diff --git a/.editorconfig b/.editorconfig index 58d0d332bbe..cd1dd217f15 100644 --- a/.editorconfig +++ b/.editorconfig @@ -12,6 +12,7 @@ tab_width = 4 end_of_line = crlf:suggestion insert_final_newline = true trim_trailing_whitespace = true +max_line_length = 120 #### .NET Coding Conventions #### @@ -337,7 +338,11 @@ dotnet_naming_symbols.type_parameters_symbols.applicable_kinds = type_parameter # ReSharper properties resharper_braces_for_ifelse = required_for_multiline +resharper_csharp_wrap_arguments_style = chop_if_long +resharper_csharp_wrap_parameters_style = chop_if_long resharper_keep_existing_attribute_arrangement = true +resharper_wrap_chained_binary_patterns = chop_if_long +resharper_wrap_chained_method_calls = chop_if_long [*.{csproj,xml,yml,yaml,dll.config,msbuildproj,targets,props}] indent_size = 2 diff --git a/.github/labeler.yml b/.github/labeler.yml index eb01eeecc4f..4cfe775ed41 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -1,39 +1,56 @@ "Changes: Audio": - - "**/*.ogg" - + - changed-files: + - any-glob-to-any-file: "**/*.ogg" + "Changes: C#": - - "**/*.cs" + - changed-files: + - any-glob-to-any-file: "**/*.cs" "Changes: Config": - - "**/*.toml" - - "**/*.config" - - "*.json" - - ".github/*.yml" - - ".github/*.json" - - ".vscode/*.json" - - ".editorconfig" +- changed-files: + - any-glob-to-any-file: + - "**/*.toml" + - "**/*.config" + - "*.json" + - ".github/*.yml" + - ".github/*.json" + - ".vscode/*.json" + - ".editorconfig" "Changes: Documentation": - - "**/*.xml" - - "**/*.md" + - changed-files: + - any-glob-to-any-file: + - "**/*.xml" + - "**/*.md" "Changes: Localization": -- 'Resources/Locale/**/*.ftl' + - changed-files: + - any-glob-to-any-file: 'Resources/Locale/**/*.ftl' "Changes: Map": - - "Resources/Maps/**/*.yml" - - "Resources/Prototypes/Maps/**/*.yml" + - changed-files: + - any-glob-to-any-file: + - "Resources/Maps/**/*.yml" + - "Resources/Prototypes/Maps/**/*.yml" "Changes: Sprite": - - "**/*.rsi/*.png" - - "**/*.rsi/*.json" + - changed-files: + - any-glob-to-any-file: + - "**/*.rsi/*.png" + - "**/*.rsi/*.json" "Changes: UI": - - "**/*.xaml*" + - changed-files: + - any-glob-to-any-file: "**/*.xaml*" "Changes: YML": - - any: ["**/*.yml"] - all: ["!Resources/Maps/**/*.yml", "!Resources/Prototypes/Maps/**/*.yml"] + - changed-files: + - any-glob-to-any-file: + - "**/*.yml" + - all-globs-to-all-files: + - "!Resources/Maps/**/*.yml" + - "!Resources/Prototypes/Maps/**/*.yml" "Changes: Workflow": - - ".github/workflows/*.yml" + - changed-files: + - any-glob-to-any-file: ".github/workflows/*.yml" diff --git a/.github/workflows/conflict-labeler.yml b/.github/workflows/conflict-labeler.yml index 152d3a9f3c8..1bba6770222 100644 --- a/.github/workflows/conflict-labeler.yml +++ b/.github/workflows/conflict-labeler.yml @@ -1,18 +1,20 @@ name: Check Merge Conflicts on: - push: - branches: - - master pull_request_target: + types: + - opened + - synchronize + - reopened + - ready_for_review jobs: Label: - if: github.actor != 'PJBot' && github.actor != 'DeltaV-Bot' && github.actor != 'SimpleStation14' + if: ( github.event.pull_request.draft == false ) && ( github.actor != 'PJBot' && github.actor != 'DeltaV-Bot' && github.actor != 'SimpleStation14' ) runs-on: ubuntu-latest steps: - name: Check for Merge Conflicts - uses: ike709/actions-label-merge-conflict@9eefdd17e10566023c46d2dc6dc04fcb8ec76142 + uses: eps1lon/actions-label-merge-conflict@v3.0.0 with: dirtyLabel: "Status: Merge Conflict" repoToken: "${{ secrets.GITHUB_TOKEN }}" diff --git a/.github/workflows/labeler-pr.yml b/.github/workflows/labeler-pr.yml index efb051f4ccf..2fd754b15ee 100644 --- a/.github/workflows/labeler-pr.yml +++ b/.github/workflows/labeler-pr.yml @@ -6,8 +6,9 @@ on: jobs: labeler: if: github.actor != 'PJBot' && github.actor != 'DeltaV-Bot' && github.actor != 'SimpleStation14' + permissions: + contents: read + pull-requests: write runs-on: ubuntu-latest steps: - - uses: actions/labeler@v3 - with: - repo-token: "${{ secrets.GITHUB_TOKEN }}" + - uses: actions/labeler@v5 diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 177e6a0fe6d..d9cfd3b25b4 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -41,39 +41,17 @@ jobs: - name: Package client run: dotnet run --project Content.Packaging client --no-wipe-release - - name: Update Build Info - run: Tools/gen_build_info.py - - - name: Shuffle files around - run: | - mkdir "release/${{ github.sha }}" - mv release/*.zip "release/${{ github.sha }}" - - - name: Upload files to centcomm - uses: appleboy/scp-action@master - with: - host: ${{ secrets.PUBLISH_HOST }} - username: ${{ secrets.PUBLISH_USER }} - key: ${{ secrets.PUBLISH_KEY }} - port: ${{ secrets.PUBLISH_PORT }} - source: "release/${{ github.sha }}" - target: "/var/www/builds.delta-v.org/delta-v/builds/" - strip_components: 1 - - - name: Update manifest JSON - uses: appleboy/ssh-action@master - with: - host: ${{ secrets.PUBLISH_HOST }} - username: ${{ secrets.PUBLISH_USER }} - key: ${{ secrets.PUBLISH_KEY }} - port: ${{ secrets.PUBLISH_PORT }} - script: /home/deltav/publish/push.ps1 ${{ github.sha }} - - - name: Publish changelog (Discord) - run: Tools/actions_changelogs_since_last_run.py + - name: Publish version + run: Tools/publish_multi_request.py env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - DISCORD_WEBHOOK_URL: ${{ secrets.CHANGELOG_DISCORD_WEBHOOK }} + PUBLISH_TOKEN: ${{ secrets.PUBLISH_TOKEN }} + GITHUB_REPOSITORY: ${{ vars.GITHUB_REPOSITORY }} + + # - name: Publish changelog (Discord) + # run: Tools/actions_changelogs_since_last_run.py + # env: + # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + # DISCORD_WEBHOOK_URL: ${{ secrets.CHANGELOG_DISCORD_WEBHOOK }} - name: Publish changelog (RSS) run: Tools/actions_changelog_rss.py diff --git a/.github/workflows/update-credits.yml b/.github/workflows/update-credits.yml index 69a8bc19888..5dc6299c6c1 100644 --- a/.github/workflows/update-credits.yml +++ b/.github/workflows/update-credits.yml @@ -19,6 +19,8 @@ jobs: - name: Get this week's Contributors shell: pwsh + env: + GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} run: Tools/dump_github_contributors.ps1 > Resources/Credits/GitHub.txt # TODO diff --git a/BuildChecker/BuildChecker.csproj b/BuildChecker/BuildChecker.csproj index d4f9a412549..63d16fa9708 100644 --- a/BuildChecker/BuildChecker.csproj +++ b/BuildChecker/BuildChecker.csproj @@ -14,6 +14,8 @@ https://docs.microsoft.com/en-us/visualstudio/msbuild/msbuild --> + python3 + py -3 {C899FCA4-7037-4E49-ABC2-44DE72487110} .NETFramework, Version=v4.7.2 false @@ -37,7 +39,7 @@ https://docs.microsoft.com/en-us/visualstudio/msbuild/msbuild bin\DebugOpt\ - + diff --git a/BuildChecker/git_helper.py b/BuildChecker/git_helper.py new file mode 100644 index 00000000000..becd4506e82 --- /dev/null +++ b/BuildChecker/git_helper.py @@ -0,0 +1,110 @@ +#!/usr/bin/env python3 +# Installs git hooks, updates them, updates submodules, that kind of thing. + +import subprocess +import sys +import os +import shutil +from pathlib import Path +from typing import List + +SOLUTION_PATH = Path("..") / "SpaceStation14.sln" +# If this doesn't match the saved version we overwrite them all. +CURRENT_HOOKS_VERSION = "2" +QUIET = len(sys.argv) == 2 and sys.argv[1] == "--quiet" + + +def run_command(command: List[str], capture: bool = False) -> subprocess.CompletedProcess: + """ + Runs a command with pretty output. + """ + text = ' '.join(command) + if not QUIET: + print("$ {}".format(text)) + + sys.stdout.flush() + + completed = None + + if capture: + completed = subprocess.run(command, cwd="..", stdout=subprocess.PIPE) + else: + completed = subprocess.run(command, cwd="..") + + if completed.returncode != 0: + print("Error: command exited with code {}!".format(completed.returncode)) + + return completed + + +def update_submodules(): + """ + Updates all submodules. + """ + + if ('GITHUB_ACTIONS' in os.environ): + return + + if os.path.isfile("DISABLE_SUBMODULE_AUTOUPDATE"): + return + + if shutil.which("git") is None: + raise FileNotFoundError("git not found in PATH") + + # If the status doesn't match, force VS to reload the solution. + # status = run_command(["git", "submodule", "status"], capture=True) + run_command(["git", "submodule", "update", "--init", "--recursive"]) + # status2 = run_command(["git", "submodule", "status"], capture=True) + + # Something changed. + # if status.stdout != status2.stdout: + # print("Git submodules changed. Reloading solution.") + # reset_solution() + + +def install_hooks(): + """ + Installs the necessary git hooks into .git/hooks. + """ + + # Read version file. + if os.path.isfile("INSTALLED_HOOKS_VERSION"): + with open("INSTALLED_HOOKS_VERSION", "r") as f: + if f.read() == CURRENT_HOOKS_VERSION: + if not QUIET: + print("No hooks change detected.") + return + + with open("INSTALLED_HOOKS_VERSION", "w") as f: + f.write(CURRENT_HOOKS_VERSION) + + print("Hooks need updating.") + + hooks_target_dir = Path("..")/".git"/"hooks" + hooks_source_dir = Path("hooks") + + # Clear entire tree since we need to kill deleted files too. + for filename in os.listdir(str(hooks_target_dir)): + os.remove(str(hooks_target_dir/filename)) + + for filename in os.listdir(str(hooks_source_dir)): + print("Copying hook {}".format(filename)) + shutil.copy2(str(hooks_source_dir/filename), + str(hooks_target_dir/filename)) + + +def reset_solution(): + """ + Force VS to think the solution has been changed to prompt the user to reload it, thus fixing any load errors. + """ + + with SOLUTION_PATH.open("r") as f: + content = f.read() + + with SOLUTION_PATH.open("w") as f: + f.write(content) + + +if __name__ == '__main__': + install_hooks() + update_submodules() diff --git a/BuildChecker/hooks/post-checkout b/BuildChecker/hooks/post-checkout new file mode 100644 index 00000000000..c5662445c27 --- /dev/null +++ b/BuildChecker/hooks/post-checkout @@ -0,0 +1,13 @@ +#!/bin/bash + +gitroot=`git rev-parse --show-toplevel` + +cd "$gitroot/BuildChecker" + +if [[ `uname` == MINGW* || `uname` == CYGWIN* ]]; then + # Windows + py -3 git_helper.py --quiet +else + # Not Windows, so probably some other Unix thing. + python3 git_helper.py --quiet +fi diff --git a/BuildChecker/hooks/post-merge b/BuildChecker/hooks/post-merge new file mode 100644 index 00000000000..85fe61d966c --- /dev/null +++ b/BuildChecker/hooks/post-merge @@ -0,0 +1,5 @@ +#!/bin/bash + +# Just call post-checkout since it does the same thing. +gitroot=`git rev-parse --show-toplevel` +bash "$gitroot/.git/hooks/post-checkout" diff --git a/Content.Client/Access/IdCardSystem.cs b/Content.Client/Access/IdCardSystem.cs index fcf2bf57de3..e0c02976f7b 100644 --- a/Content.Client/Access/IdCardSystem.cs +++ b/Content.Client/Access/IdCardSystem.cs @@ -2,6 +2,4 @@ namespace Content.Client.Access; -public sealed class IdCardSystem : SharedIdCardSystem -{ -} +public sealed class IdCardSystem : SharedIdCardSystem; diff --git a/Content.Client/Access/UI/AgentIDCardBoundUserInterface.cs b/Content.Client/Access/UI/AgentIDCardBoundUserInterface.cs index 73f18aec8d6..c3fac8cb92a 100644 --- a/Content.Client/Access/UI/AgentIDCardBoundUserInterface.cs +++ b/Content.Client/Access/UI/AgentIDCardBoundUserInterface.cs @@ -40,9 +40,9 @@ private void OnJobChanged(string newJob) SendMessage(new AgentIDCardJobChangedMessage(newJob)); } - public void OnJobIconChanged(string newJobIcon) + public void OnJobIconChanged(string newJobIconId) { - SendMessage(new AgentIDCardJobIconChangedMessage(newJobIcon)); + SendMessage(new AgentIDCardJobIconChangedMessage(newJobIconId)); } /// @@ -57,7 +57,7 @@ protected override void UpdateState(BoundUserInterfaceState state) _window.SetCurrentName(cast.CurrentName); _window.SetCurrentJob(cast.CurrentJob); - _window.SetAllowedIcons(cast.Icons); + _window.SetAllowedIcons(cast.Icons, cast.CurrentJobIconId); } protected override void Dispose(bool disposing) diff --git a/Content.Client/Access/UI/AgentIDCardWindow.xaml.cs b/Content.Client/Access/UI/AgentIDCardWindow.xaml.cs index beca0c41ba9..9a38c0c4853 100644 --- a/Content.Client/Access/UI/AgentIDCardWindow.xaml.cs +++ b/Content.Client/Access/UI/AgentIDCardWindow.xaml.cs @@ -38,7 +38,7 @@ public AgentIDCardWindow(AgentIDCardBoundUserInterface bui) JobLineEdit.OnFocusExit += e => OnJobChanged?.Invoke(e.Text); } - public void SetAllowedIcons(HashSet icons) + public void SetAllowedIcons(HashSet icons, string currentJobIconId) { IconGrid.DisposeAllChildren(); @@ -79,6 +79,10 @@ public void SetAllowedIcons(HashSet icons) jobIconButton.AddChild(jobIconTexture); jobIconButton.OnPressed += _ => _bui.OnJobIconChanged(jobIcon.ID); IconGrid.AddChild(jobIconButton); + + if (jobIconId.Equals(currentJobIconId)) + jobIconButton.Pressed = true; + i++; } } diff --git a/Content.Client/Actions/ActionsSystem.cs b/Content.Client/Actions/ActionsSystem.cs index 90158ba81e6..0bc65eb9358 100644 --- a/Content.Client/Actions/ActionsSystem.cs +++ b/Content.Client/Actions/ActionsSystem.cs @@ -249,7 +249,10 @@ public void TriggerAction(EntityUid actionId, BaseActionComponent action) if (action.ClientExclusive) { if (instantAction.Event != null) + { instantAction.Event.Performer = user; + instantAction.Event.Action = actionId; + } PerformAction(user, actions, actionId, instantAction, instantAction.Event, GameTiming.CurTime); } diff --git a/Content.Client/Administration/Components/HeadstandComponent.cs b/Content.Client/Administration/Components/HeadstandComponent.cs index d95e74576bf..a4e3bfc5aaf 100644 --- a/Content.Client/Administration/Components/HeadstandComponent.cs +++ b/Content.Client/Administration/Components/HeadstandComponent.cs @@ -3,7 +3,7 @@ namespace Content.Client.Administration.Components; -[RegisterComponent, NetworkedComponent] +[RegisterComponent] public sealed partial class HeadstandComponent : SharedHeadstandComponent { diff --git a/Content.Client/Administration/Components/KillSignComponent.cs b/Content.Client/Administration/Components/KillSignComponent.cs index 1cf47b93ff5..91c44ef3f27 100644 --- a/Content.Client/Administration/Components/KillSignComponent.cs +++ b/Content.Client/Administration/Components/KillSignComponent.cs @@ -3,6 +3,5 @@ namespace Content.Client.Administration.Components; -[NetworkedComponent, RegisterComponent] -public sealed partial class KillSignComponent : SharedKillSignComponent -{ } +[RegisterComponent] +public sealed partial class KillSignComponent : SharedKillSignComponent; diff --git a/Content.Client/Administration/Managers/ClientAdminManager.cs b/Content.Client/Administration/Managers/ClientAdminManager.cs index fdd62fb6a2d..0f740c81045 100644 --- a/Content.Client/Administration/Managers/ClientAdminManager.cs +++ b/Content.Client/Administration/Managers/ClientAdminManager.cs @@ -126,12 +126,15 @@ void IPostInjectInit.PostInject() public AdminData? GetAdminData(EntityUid uid, bool includeDeAdmin = false) { - return uid == _player.LocalEntity ? _adminData : null; + if (uid == _player.LocalEntity && (_adminData?.Active ?? includeDeAdmin)) + return _adminData; + + return null; } public AdminData? GetAdminData(ICommonSession session, bool includeDeAdmin = false) { - if (_player.LocalUser == session.UserId) + if (_player.LocalUser == session.UserId && (_adminData?.Active ?? includeDeAdmin)) return _adminData; return null; diff --git a/Content.Client/Administration/Systems/AdminVerbSystem.cs b/Content.Client/Administration/Systems/AdminVerbSystem.cs index e0f84bc4f03..dced59bbf2e 100644 --- a/Content.Client/Administration/Systems/AdminVerbSystem.cs +++ b/Content.Client/Administration/Systems/AdminVerbSystem.cs @@ -1,3 +1,6 @@ +using Content.Shared.Administration; +using Content.Shared.Administration.Managers; +using Content.Shared.Mind.Components; using Content.Shared.Verbs; using Robust.Client.Console; using Robust.Shared.Utility; @@ -11,10 +14,12 @@ sealed class AdminVerbSystem : EntitySystem { [Dependency] private readonly IClientConGroupController _clientConGroupController = default!; [Dependency] private readonly IClientConsoleHost _clientConsoleHost = default!; + [Dependency] private readonly ISharedAdminManager _admin = default!; public override void Initialize() { SubscribeLocalEvent>(AddAdminVerbs); + } private void AddAdminVerbs(GetVerbsEvent args) @@ -33,6 +38,24 @@ private void AddAdminVerbs(GetVerbsEvent args) }; args.Verbs.Add(verb); } + + if (!_admin.IsAdmin(args.User)) + return; + + if (_admin.HasAdminFlag(args.User, AdminFlags.Admin)) + args.ExtraCategories.Add(VerbCategory.Admin); + + if (_admin.HasAdminFlag(args.User, AdminFlags.Fun) && HasComp(args.Target)) + args.ExtraCategories.Add(VerbCategory.Antag); + + if (_admin.HasAdminFlag(args.User, AdminFlags.Debug)) + args.ExtraCategories.Add(VerbCategory.Debug); + + if (_admin.HasAdminFlag(args.User, AdminFlags.Fun)) + args.ExtraCategories.Add(VerbCategory.Smite); + + if (_admin.HasAdminFlag(args.User, AdminFlags.Admin)) + args.ExtraCategories.Add(VerbCategory.Tricks); } } } diff --git a/Content.Client/Administration/UI/BanPanel/BanPanel.xaml.cs b/Content.Client/Administration/UI/BanPanel/BanPanel.xaml.cs index 1f32640f7dd..dc263d6055c 100644 --- a/Content.Client/Administration/UI/BanPanel/BanPanel.xaml.cs +++ b/Content.Client/Administration/UI/BanPanel/BanPanel.xaml.cs @@ -3,6 +3,7 @@ using System.Net.Sockets; using Content.Client.Administration.UI.CustomControls; using Content.Shared.Administration; +using Content.Shared.CCVar; using Content.Shared.Database; using Content.Shared.Roles; using Robust.Client.AutoGenerated; @@ -11,6 +12,7 @@ using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.CustomControls; using Robust.Client.UserInterface.XAML; +using Robust.Shared.Configuration; using Robust.Shared.Prototypes; using Robust.Shared.Timing; using Robust.Shared.Utility; @@ -32,8 +34,11 @@ public sealed partial class BanPanel : DefaultWindow // This is less efficient than just holding a reference to the root control and enumerating children, but you // have to know how the controls are nested, which makes the code more complicated. private readonly List _roleCheckboxes = new(); + private readonly ISawmill _banpanelSawmill; [Dependency] private readonly IGameTiming _gameTiming = default!; + [Dependency] private readonly IConfigurationManager _cfg = default!; + [Dependency] private readonly ILogManager _logManager = default!; private enum TabNumbers { @@ -65,6 +70,7 @@ public BanPanel() { RobustXamlLoader.Load(this); IoCManager.InjectDependencies(this); + _banpanelSawmill = _logManager.GetSawmill("admin.banpanel"); PlayerList.OnSelectionChanged += OnPlayerSelectionChanged; PlayerNameLine.OnFocusExit += _ => OnPlayerNameChanged(); PlayerCheckbox.OnPressed += _ => @@ -104,6 +110,11 @@ public BanPanel() }; SubmitButton.OnPressed += SubmitButtonOnOnPressed; + IpCheckbox.Pressed = _cfg.GetCVar(CCVars.ServerBanIpBanDefault); + HwidCheckbox.Pressed = _cfg.GetCVar(CCVars.ServerBanHwidBanDefault); + LastConnCheckbox.Pressed = _cfg.GetCVar(CCVars.ServerBanUseLastDetails); + EraseCheckbox.Pressed = _cfg.GetCVar(CCVars.ServerBanErasePlayer); + SeverityOption.AddItem(Loc.GetString("admin-note-editor-severity-none"), (int) NoteSeverity.None); SeverityOption.AddItem(Loc.GetString("admin-note-editor-severity-low"), (int) NoteSeverity.Minor); SeverityOption.AddItem(Loc.GetString("admin-note-editor-severity-medium"), (int) NoteSeverity.Medium); @@ -175,6 +186,39 @@ private void CreateRoleGroup(string roleName, IEnumerable roleList, Colo c.Pressed = args.Pressed; } } + + if (args.Pressed) + { + if (!Enum.TryParse(_cfg.GetCVar(CCVars.DepartmentBanDefaultSeverity), true, out NoteSeverity newSeverity)) + { + _banpanelSawmill + .Warning("Departmental role ban severity could not be parsed from config!"); + return; + } + SeverityOption.SelectId((int) newSeverity); + } + else + { + foreach (var childContainer in RolesContainer.Children) + { + if (childContainer is Container) + { + foreach (var child in childContainer.Children) + { + if (child is CheckBox { Pressed: true }) + return; + } + } + } + + if (!Enum.TryParse(_cfg.GetCVar(CCVars.RoleBanDefaultSeverity), true, out NoteSeverity newSeverity)) + { + _banpanelSawmill + .Warning("Role ban severity could not be parsed from config!"); + return; + } + SeverityOption.SelectId((int) newSeverity); + } }; outerContainer.AddChild(innerContainer); foreach (var role in roleList) @@ -353,6 +397,35 @@ private void OnTypeChanged() { TypeOption.ModulateSelfOverride = null; Tabs.SetTabVisible((int) TabNumbers.Roles, TypeOption.SelectedId == (int) Types.Role); + NoteSeverity? newSeverity = null; + switch (TypeOption.SelectedId) + { + case (int)Types.Server: + if (Enum.TryParse(_cfg.GetCVar(CCVars.ServerBanDefaultSeverity), true, out NoteSeverity serverSeverity)) + newSeverity = serverSeverity; + else + { + _banpanelSawmill + .Warning("Server ban severity could not be parsed from config!"); + } + + break; + case (int) Types.Role: + + if (Enum.TryParse(_cfg.GetCVar(CCVars.RoleBanDefaultSeverity), true, out NoteSeverity roleSeverity)) + { + newSeverity = roleSeverity; + } + else + { + _banpanelSawmill + .Warning("Role ban severity could not be parsed from config!"); + } + break; + } + + if (newSeverity != null) + SeverityOption.SelectId((int) newSeverity.Value); } private void UpdateSubmitEnabled() diff --git a/Content.Client/Administration/UI/DepartmentWhitelistPanel.xaml b/Content.Client/Administration/UI/DepartmentWhitelistPanel.xaml new file mode 100644 index 00000000000..d5f77aedd52 --- /dev/null +++ b/Content.Client/Administration/UI/DepartmentWhitelistPanel.xaml @@ -0,0 +1,11 @@ + + + + + + diff --git a/Content.Client/Administration/UI/DepartmentWhitelistPanel.xaml.cs b/Content.Client/Administration/UI/DepartmentWhitelistPanel.xaml.cs new file mode 100644 index 00000000000..275055daf6e --- /dev/null +++ b/Content.Client/Administration/UI/DepartmentWhitelistPanel.xaml.cs @@ -0,0 +1,49 @@ +using Content.Shared.Roles; +using Robust.Client.AutoGenerated; +using Robust.Client.UserInterface; +using Robust.Client.UserInterface.Controls; +using Robust.Client.UserInterface.CustomControls; +using Robust.Client.UserInterface.XAML; +using Robust.Shared.Prototypes; + +namespace Content.Client.Administration.UI; + +[GenerateTypedNameReferences] +public sealed partial class DepartmentWhitelistPanel : PanelContainer +{ + public Action, bool>? OnSetJob; + + public DepartmentWhitelistPanel(DepartmentPrototype department, IPrototypeManager proto, HashSet> whitelists) + { + RobustXamlLoader.Load(this); + + var allWhitelisted = true; + var grey = Color.FromHex("#ccc"); + foreach (var id in department.Roles) + { + var thisJob = id; // closure capturing funny + var button = new CheckBox(); + button.Text = proto.Index(id).LocalizedName; + if (!proto.Index(id).Whitelisted) + button.Modulate = grey; // Let admins know whitelisting this job is only for futureproofing. + button.Pressed = whitelists.Contains(id); + button.OnPressed += _ => OnSetJob?.Invoke(thisJob, button.Pressed); + JobsContainer.AddChild(button); + + allWhitelisted &= button.Pressed; + } + + Department.Text = Loc.GetString(department.ID); + Department.Modulate = department.Color; + Department.Pressed = allWhitelisted; + Department.OnPressed += args => + { + foreach (var id in department.Roles) + { + // only request to whitelist roles that aren't already whitelisted, and vice versa + if (whitelists.Contains(id) != Department.Pressed) + OnSetJob?.Invoke(id, Department.Pressed); + } + }; + } +} diff --git a/Content.Client/Administration/UI/JobWhitelistsEui.cs b/Content.Client/Administration/UI/JobWhitelistsEui.cs new file mode 100644 index 00000000000..b8fe974c0a3 --- /dev/null +++ b/Content.Client/Administration/UI/JobWhitelistsEui.cs @@ -0,0 +1,40 @@ +using Content.Client.Eui; +using Content.Shared.Administration; +using Content.Shared.Eui; + +namespace Content.Client.Administration.UI; + +public sealed class JobWhitelistsEui : BaseEui +{ + private JobWhitelistsWindow Window; + + public JobWhitelistsEui() + { + Window = new JobWhitelistsWindow(); + Window.OnClose += () => SendMessage(new CloseEuiMessage()); + Window.OnSetJob += (id, whitelisted) => SendMessage(new SetJobWhitelistedMessage(id, whitelisted)); + } + + public override void HandleState(EuiStateBase state) + { + if (state is not JobWhitelistsEuiState cast) + return; + + Window.HandleState(cast); + } + + public override void Opened() + { + base.Opened(); + + Window.OpenCentered(); + } + + public override void Closed() + { + base.Closed(); + + Window.Close(); + Window.Dispose(); + } +} diff --git a/Content.Client/Administration/UI/JobWhitelistsWindow.xaml b/Content.Client/Administration/UI/JobWhitelistsWindow.xaml new file mode 100644 index 00000000000..165f5ac3d7d --- /dev/null +++ b/Content.Client/Administration/UI/JobWhitelistsWindow.xaml @@ -0,0 +1,11 @@ + + + + diff --git a/Content.Client/Administration/UI/JobWhitelistsWindow.xaml.cs b/Content.Client/Administration/UI/JobWhitelistsWindow.xaml.cs new file mode 100644 index 00000000000..51fb5287dcc --- /dev/null +++ b/Content.Client/Administration/UI/JobWhitelistsWindow.xaml.cs @@ -0,0 +1,46 @@ +using Content.Client.UserInterface.Controls; +using Content.Shared.Database; +using Content.Shared.Administration; +using Content.Shared.Roles; +using Robust.Client.AutoGenerated; +using Robust.Client.UserInterface; +using Robust.Client.UserInterface.Controls; +using Robust.Client.UserInterface.CustomControls; +using Robust.Client.UserInterface.XAML; +using Robust.Shared.Prototypes; + +namespace Content.Client.Administration.UI; + +/// +/// An admin panel to toggle whitelists for individual jobs or entire departments. +/// This should generally be preferred to a blanket whitelist (Whitelisted: True) since +/// being good with a batong doesn't mean you know engineering and vice versa. +/// +[GenerateTypedNameReferences] +public sealed partial class JobWhitelistsWindow : FancyWindow +{ + [Dependency] private readonly IPrototypeManager _proto = default!; + + public Action, bool>? OnSetJob; + + public JobWhitelistsWindow() + { + RobustXamlLoader.Load(this); + IoCManager.InjectDependencies(this); + + PlayerName.Text = "???"; + } + + public void HandleState(JobWhitelistsEuiState state) + { + PlayerName.Text = state.PlayerName; + + Departments.RemoveAllChildren(); + foreach (var proto in _proto.EnumeratePrototypes()) + { + var panel = new DepartmentWhitelistPanel(proto, _proto, state.Whitelists); + panel.OnSetJob += (id, whitelisting) => OnSetJob?.Invoke(id, whitelisting); + Departments.AddChild(panel); + } + } +} diff --git a/Content.Client/Administration/UI/SpawnExplosion/ExplosionDebugOverlay.cs b/Content.Client/Administration/UI/SpawnExplosion/ExplosionDebugOverlay.cs index eede3a6217f..d60094ad897 100644 --- a/Content.Client/Administration/UI/SpawnExplosion/ExplosionDebugOverlay.cs +++ b/Content.Client/Administration/UI/SpawnExplosion/ExplosionDebugOverlay.cs @@ -25,7 +25,7 @@ public sealed class ExplosionDebugOverlay : Overlay public override OverlaySpace Space => OverlaySpace.WorldSpace | OverlaySpace.ScreenSpace; - public Matrix3 SpaceMatrix; + public Matrix3x2 SpaceMatrix; public MapId Map; private readonly Font _font; @@ -78,7 +78,8 @@ private void DrawScreen(OverlayDrawArgs args) if (SpaceTiles == null) return; - gridBounds = Matrix3.Invert(SpaceMatrix).TransformBox(args.WorldBounds); + Matrix3x2.Invert(SpaceMatrix, out var invSpace); + gridBounds = invSpace.TransformBox(args.WorldBounds); DrawText(handle, gridBounds, SpaceMatrix, SpaceTiles, SpaceTileSize); } @@ -86,7 +87,7 @@ private void DrawScreen(OverlayDrawArgs args) private void DrawText( DrawingHandleScreen handle, Box2 gridBounds, - Matrix3 transform, + Matrix3x2 transform, Dictionary> tileSets, ushort tileSize) { @@ -103,7 +104,7 @@ private void DrawText( if (!gridBounds.Contains(centre)) continue; - var worldCenter = transform.Transform(centre); + var worldCenter = Vector2.Transform(centre, transform); var screenCenter = _eyeManager.WorldToScreen(worldCenter); @@ -119,7 +120,7 @@ private void DrawText( if (tileSets.TryGetValue(0, out var set)) { var epicenter = set.First(); - var worldCenter = transform.Transform((epicenter + Vector2Helpers.Half) * tileSize); + var worldCenter = Vector2.Transform((epicenter + Vector2Helpers.Half) * tileSize, transform); var screenCenter = _eyeManager.WorldToScreen(worldCenter) + new Vector2(-24, -24); var text = $"{Intensity[0]:F2}\nΣ={TotalIntensity:F1}\nΔ={Slope:F1}"; handle.DrawString(_font, screenCenter, text); @@ -148,11 +149,12 @@ private void DrawWorld(in OverlayDrawArgs args) if (SpaceTiles == null) return; - gridBounds = Matrix3.Invert(SpaceMatrix).TransformBox(args.WorldBounds).Enlarged(2); + Matrix3x2.Invert(SpaceMatrix, out var invSpace); + gridBounds = invSpace.TransformBox(args.WorldBounds).Enlarged(2); handle.SetTransform(SpaceMatrix); DrawTiles(handle, gridBounds, SpaceTiles, SpaceTileSize); - handle.SetTransform(Matrix3.Identity); + handle.SetTransform(Matrix3x2.Identity); } private void DrawTiles( diff --git a/Content.Client/Animations/TrackUserComponent.cs b/Content.Client/Animations/TrackUserComponent.cs new file mode 100644 index 00000000000..374c187398d --- /dev/null +++ b/Content.Client/Animations/TrackUserComponent.cs @@ -0,0 +1,17 @@ +using System.Numerics; + +namespace Content.Client.Animations; + +/// +/// Entities with this component tracks the user's world position every frame. +/// +[RegisterComponent] +public sealed partial class TrackUserComponent : Component +{ + public EntityUid? User; + + /// + /// Offset in the direction of the entity's rotation. + /// + public Vector2 Offset = Vector2.Zero; +} diff --git a/Content.Client/Atmos/Consoles/AtmosAlarmEntryContainer.xaml b/Content.Client/Atmos/Consoles/AtmosAlarmEntryContainer.xaml new file mode 100644 index 00000000000..96f136abf0e --- /dev/null +++ b/Content.Client/Atmos/Consoles/AtmosAlarmEntryContainer.xaml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Content.Client/Atmos/Consoles/AtmosAlarmEntryContainer.xaml.cs b/Content.Client/Atmos/Consoles/AtmosAlarmEntryContainer.xaml.cs new file mode 100644 index 00000000000..b0d0365ef6b --- /dev/null +++ b/Content.Client/Atmos/Consoles/AtmosAlarmEntryContainer.xaml.cs @@ -0,0 +1,215 @@ +using Content.Client.Stylesheets; +using Content.Shared.Atmos; +using Content.Shared.Atmos.Components; +using Content.Shared.Atmos.Monitor; +using Content.Shared.FixedPoint; +using Content.Shared.Temperature; +using Robust.Client.AutoGenerated; +using Robust.Client.Graphics; +using Robust.Client.ResourceManagement; +using Robust.Client.UserInterface.Controls; +using Robust.Client.UserInterface.XAML; +using Robust.Shared.Map; +using System.Linq; + +namespace Content.Client.Atmos.Consoles; + +[GenerateTypedNameReferences] +public sealed partial class AtmosAlarmEntryContainer : BoxContainer +{ + public NetEntity NetEntity; + public EntityCoordinates? Coordinates; + + private readonly IEntityManager _entManager; + private readonly IResourceCache _cache; + + private Dictionary _alarmStrings = new Dictionary() + { + [AtmosAlarmType.Invalid] = "atmos-alerts-window-invalid-state", + [AtmosAlarmType.Normal] = "atmos-alerts-window-normal-state", + [AtmosAlarmType.Warning] = "atmos-alerts-window-warning-state", + [AtmosAlarmType.Danger] = "atmos-alerts-window-danger-state", + }; + + private Dictionary _gasShorthands = new Dictionary() + { + [Gas.Ammonia] = "NH₃", + [Gas.CarbonDioxide] = "CO₂", + [Gas.Frezon] = "F", + [Gas.Nitrogen] = "N₂", + [Gas.NitrousOxide] = "N₂O", + [Gas.Oxygen] = "O₂", + [Gas.Plasma] = "P", + [Gas.Tritium] = "T", + [Gas.WaterVapor] = "H₂O", + }; + + public AtmosAlarmEntryContainer(NetEntity uid, EntityCoordinates? coordinates) + { + RobustXamlLoader.Load(this); + + _entManager = IoCManager.Resolve(); + _cache = IoCManager.Resolve(); + + NetEntity = uid; + Coordinates = coordinates; + + // Load fonts + var headerFont = new VectorFont(_cache.GetResource("/Fonts/NotoSans/NotoSans-Bold.ttf"), 11); + var normalFont = new VectorFont(_cache.GetResource("/Fonts/NotoSansDisplay/NotoSansDisplay-Regular.ttf"), 11); + var smallFont = new VectorFont(_cache.GetResource("/Fonts/NotoSans/NotoSans-Regular.ttf"), 10); + + // Set fonts + TemperatureHeaderLabel.FontOverride = headerFont; + PressureHeaderLabel.FontOverride = headerFont; + OxygenationHeaderLabel.FontOverride = headerFont; + GasesHeaderLabel.FontOverride = headerFont; + + TemperatureLabel.FontOverride = normalFont; + PressureLabel.FontOverride = normalFont; + OxygenationLabel.FontOverride = normalFont; + + NoDataLabel.FontOverride = headerFont; + + SilenceCheckBox.Label.FontOverride = smallFont; + SilenceCheckBox.Label.FontColorOverride = Color.DarkGray; + } + + public void UpdateEntry(AtmosAlertsComputerEntry entry, bool isFocus, AtmosAlertsFocusDeviceData? focusData = null) + { + NetEntity = entry.NetEntity; + Coordinates = _entManager.GetCoordinates(entry.Coordinates); + + // Load fonts + var normalFont = new VectorFont(_cache.GetResource("/Fonts/NotoSansDisplay/NotoSansDisplay-Regular.ttf"), 11); + + // Update alarm state + if (!_alarmStrings.TryGetValue(entry.AlarmState, out var alarmString)) + alarmString = "atmos-alerts-window-invalid-state"; + + AlarmStateLabel.Text = Loc.GetString(alarmString); + AlarmStateLabel.FontColorOverride = GetAlarmStateColor(entry.AlarmState); + + // Update alarm name + AlarmNameLabel.Text = Loc.GetString("atmos-alerts-window-alarm-label", ("name", entry.EntityName), ("address", entry.Address)); + + // Focus updates + FocusContainer.Visible = isFocus; + + if (isFocus) + SetAsFocus(); + else + RemoveAsFocus(); + + if (isFocus && entry.Group == AtmosAlertsComputerGroup.AirAlarm) + { + MainDataContainer.Visible = (entry.AlarmState != AtmosAlarmType.Invalid); + NoDataLabel.Visible = (entry.AlarmState == AtmosAlarmType.Invalid); + + if (focusData != null) + { + // Update temperature + var tempK = (FixedPoint2)focusData.Value.TemperatureData.Item1; + var tempC = (FixedPoint2)TemperatureHelpers.KelvinToCelsius(tempK.Float()); + + TemperatureLabel.Text = Loc.GetString("atmos-alerts-window-temperature-value", ("valueInC", tempC), ("valueInK", tempK)); + TemperatureLabel.FontColorOverride = GetAlarmStateColor(focusData.Value.TemperatureData.Item2); + + // Update pressure + PressureLabel.Text = Loc.GetString("atmos-alerts-window-pressure-value", ("value", (FixedPoint2)focusData.Value.PressureData.Item1)); + PressureLabel.FontColorOverride = GetAlarmStateColor(focusData.Value.PressureData.Item2); + + // Update oxygenation + var oxygenPercent = (FixedPoint2)0f; + var oxygenAlert = AtmosAlarmType.Invalid; + + if (focusData.Value.GasData.TryGetValue(Gas.Oxygen, out var oxygenData)) + { + oxygenPercent = oxygenData.Item2 * 100f; + oxygenAlert = oxygenData.Item3; + } + + OxygenationLabel.Text = Loc.GetString("atmos-alerts-window-oxygenation-value", ("value", oxygenPercent)); + OxygenationLabel.FontColorOverride = GetAlarmStateColor(oxygenAlert); + + // Update other present gases + GasGridContainer.RemoveAllChildren(); + + var gasData = focusData.Value.GasData.Where(g => g.Key != Gas.Oxygen); + + if (gasData.Count() == 0) + { + // No other gases + var gasLabel = new Label() + { + Text = Loc.GetString("atmos-alerts-window-other-gases-value-nil"), + FontOverride = normalFont, + FontColorOverride = StyleNano.DisabledFore, + HorizontalAlignment = HAlignment.Center, + VerticalAlignment = VAlignment.Center, + HorizontalExpand = true, + Margin = new Thickness(0, 2, 0, 0), + SetHeight = 24f, + }; + + GasGridContainer.AddChild(gasLabel); + } + + else + { + // Add an entry for each gas + foreach ((var gas, (var mol, var percent, var alert)) in gasData) + { + var gasPercent = (FixedPoint2)0f; + gasPercent = percent * 100f; + + if (!_gasShorthands.TryGetValue(gas, out var gasShorthand)) + gasShorthand = "X"; + + var gasLabel = new Label() + { + Text = Loc.GetString("atmos-alerts-window-other-gases-value", ("shorthand", gasShorthand), ("value", gasPercent)), + FontOverride = normalFont, + FontColorOverride = GetAlarmStateColor(alert), + HorizontalAlignment = HAlignment.Center, + VerticalAlignment = VAlignment.Center, + HorizontalExpand = true, + Margin = new Thickness(0, 2, 0, 0), + SetHeight = 24f, + }; + + GasGridContainer.AddChild(gasLabel); + } + } + } + } + } + + public void SetAsFocus() + { + FocusButton.AddStyleClass(StyleNano.StyleClassButtonColorGreen); + ArrowTexture.TexturePath = "/Textures/Interface/Nano/inverted_triangle.svg.png"; + } + + public void RemoveAsFocus() + { + FocusButton.RemoveStyleClass(StyleNano.StyleClassButtonColorGreen); + ArrowTexture.TexturePath = "/Textures/Interface/Nano/triangle_right.png"; + FocusContainer.Visible = false; + } + + private Color GetAlarmStateColor(AtmosAlarmType alarmType) + { + switch (alarmType) + { + case AtmosAlarmType.Normal: + return StyleNano.GoodGreenFore; + case AtmosAlarmType.Warning: + return StyleNano.ConcerningOrangeFore; + case AtmosAlarmType.Danger: + return StyleNano.DangerousRedFore; + } + + return StyleNano.DisabledFore; + } +} \ No newline at end of file diff --git a/Content.Client/Atmos/Consoles/AtmosAlertsComputerBoundUserInterface.cs b/Content.Client/Atmos/Consoles/AtmosAlertsComputerBoundUserInterface.cs new file mode 100644 index 00000000000..08cae979b9b --- /dev/null +++ b/Content.Client/Atmos/Consoles/AtmosAlertsComputerBoundUserInterface.cs @@ -0,0 +1,52 @@ +using Content.Shared.Atmos.Components; + +namespace Content.Client.Atmos.Consoles; + +public sealed class AtmosAlertsComputerBoundUserInterface : BoundUserInterface +{ + [ViewVariables] + private AtmosAlertsComputerWindow? _menu; + + public AtmosAlertsComputerBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey) { } + + protected override void Open() + { + _menu = new AtmosAlertsComputerWindow(this, Owner); + _menu.OpenCentered(); + _menu.OnClose += Close; + + EntMan.TryGetComponent(Owner, out var xform); + } + + protected override void UpdateState(BoundUserInterfaceState state) + { + base.UpdateState(state); + + var castState = (AtmosAlertsComputerBoundInterfaceState) state; + + if (castState == null) + return; + + EntMan.TryGetComponent(Owner, out var xform); + _menu?.UpdateUI(xform?.Coordinates, castState.AirAlarms, castState.FireAlarms, castState.FocusData); + } + + public void SendFocusChangeMessage(NetEntity? netEntity) + { + SendMessage(new AtmosAlertsComputerFocusChangeMessage(netEntity)); + } + + public void SendDeviceSilencedMessage(NetEntity netEntity, bool silenceDevice) + { + SendMessage(new AtmosAlertsComputerDeviceSilencedMessage(netEntity, silenceDevice)); + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + if (!disposing) + return; + + _menu?.Dispose(); + } +} diff --git a/Content.Client/Atmos/Consoles/AtmosAlertsComputerWindow.xaml b/Content.Client/Atmos/Consoles/AtmosAlertsComputerWindow.xaml new file mode 100644 index 00000000000..8824a776ee6 --- /dev/null +++ b/Content.Client/Atmos/Consoles/AtmosAlertsComputerWindow.xaml @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Content.Client/Atmos/Consoles/AtmosAlertsComputerWindow.xaml.cs b/Content.Client/Atmos/Consoles/AtmosAlertsComputerWindow.xaml.cs new file mode 100644 index 00000000000..a55321833cd --- /dev/null +++ b/Content.Client/Atmos/Consoles/AtmosAlertsComputerWindow.xaml.cs @@ -0,0 +1,550 @@ +using Content.Client.Message; +using Content.Client.Pinpointer.UI; +using Content.Client.Stylesheets; +using Content.Client.UserInterface.Controls; +using Content.Shared.Atmos.Components; +using Content.Shared.Atmos.Monitor; +using Content.Shared.Pinpointer; +using Robust.Client.AutoGenerated; +using Robust.Client.GameObjects; +using Robust.Client.UserInterface; +using Robust.Client.UserInterface.Controls; +using Robust.Client.UserInterface.XAML; +using Robust.Shared.Map; +using Robust.Shared.Timing; +using Robust.Shared.Utility; +using Robust.Shared.ContentPack; +using Robust.Shared.Prototypes; +using System.Diagnostics.CodeAnalysis; +using System.Linq; + +namespace Content.Client.Atmos.Consoles; + +[GenerateTypedNameReferences] +public sealed partial class AtmosAlertsComputerWindow : FancyWindow +{ + private readonly IEntityManager _entManager; + private readonly SpriteSystem _spriteSystem; + + private EntityUid? _owner; + private NetEntity? _trackedEntity; + + private AtmosAlertsComputerEntry[]? _airAlarms = null; + private AtmosAlertsComputerEntry[]? _fireAlarms = null; + private IEnumerable? _allAlarms = null; + + private IEnumerable? _activeAlarms = null; + private Dictionary _deviceSilencingProgress = new(); + + public event Action? SendFocusChangeMessageAction; + public event Action? SendDeviceSilencedMessageAction; + + private bool _autoScrollActive = false; + private bool _autoScrollAwaitsUpdate = false; + + private const float SilencingDuration = 2.5f; + + public AtmosAlertsComputerWindow(AtmosAlertsComputerBoundUserInterface userInterface, EntityUid? owner) + { + RobustXamlLoader.Load(this); + _entManager = IoCManager.Resolve(); + _spriteSystem = _entManager.System(); + + // Pass the owner to nav map + _owner = owner; + NavMap.Owner = _owner; + + // Set nav map colors + NavMap.WallColor = new Color(64, 64, 64); + NavMap.TileColor = Color.DimGray * NavMap.WallColor; + + // Set nav map grid uid + var stationName = Loc.GetString("atmos-alerts-window-unknown-location"); + + if (_entManager.TryGetComponent(owner, out var xform)) + { + NavMap.MapUid = xform.GridUid; + + // Assign station name + if (_entManager.TryGetComponent(xform.GridUid, out var stationMetaData)) + stationName = stationMetaData.EntityName; + + var msg = new FormattedMessage(); + msg.AddMarkup(Loc.GetString("atmos-alerts-window-station-name", ("stationName", stationName))); + + StationName.SetMessage(msg); + } + + else + { + StationName.SetMessage(stationName); + NavMap.Visible = false; + } + + // Set trackable entity selected action + NavMap.TrackedEntitySelectedAction += SetTrackedEntityFromNavMap; + + // Update nav map + NavMap.ForceNavMapUpdate(); + + // Set tab container headers + MasterTabContainer.SetTabTitle(0, Loc.GetString("atmos-alerts-window-tab-no-alerts")); + MasterTabContainer.SetTabTitle(1, Loc.GetString("atmos-alerts-window-tab-air-alarms")); + MasterTabContainer.SetTabTitle(2, Loc.GetString("atmos-alerts-window-tab-fire-alarms")); + + // Set UI toggles + ShowInactiveAlarms.OnToggled += _ => OnShowAlarmsToggled(ShowInactiveAlarms, AtmosAlarmType.Invalid); + ShowNormalAlarms.OnToggled += _ => OnShowAlarmsToggled(ShowNormalAlarms, AtmosAlarmType.Normal); + ShowWarningAlarms.OnToggled += _ => OnShowAlarmsToggled(ShowWarningAlarms, AtmosAlarmType.Warning); + ShowDangerAlarms.OnToggled += _ => OnShowAlarmsToggled(ShowDangerAlarms, AtmosAlarmType.Danger); + + // Set atmos monitoring message action + SendFocusChangeMessageAction += userInterface.SendFocusChangeMessage; + SendDeviceSilencedMessageAction += userInterface.SendDeviceSilencedMessage; + } + + #region Toggle handling + + private void OnShowAlarmsToggled(CheckBox toggle, AtmosAlarmType toggledAlarmState) + { + if (_owner == null) + return; + + if (!_entManager.TryGetComponent(_owner.Value, out var console)) + return; + + foreach (var device in console.AtmosDevices) + { + var alarmState = GetAlarmState(device.NetEntity); + + if (toggledAlarmState != alarmState) + continue; + + if (toggle.Pressed) + AddTrackedEntityToNavMap(device, alarmState); + + else + NavMap.TrackedEntities.Remove(device.NetEntity); + } + } + + private void OnSilenceAlertsToggled(NetEntity netEntity, bool toggleState) + { + if (!_entManager.TryGetComponent(_owner, out var console)) + return; + + if (toggleState) + _deviceSilencingProgress[netEntity] = SilencingDuration; + + else + _deviceSilencingProgress.Remove(netEntity); + + foreach (AtmosAlarmEntryContainer entryContainer in AlertsTable.Children) + { + if (entryContainer.NetEntity == netEntity) + entryContainer.SilenceAlarmProgressBar.Visible = toggleState; + } + + SendDeviceSilencedMessageAction?.Invoke(netEntity, toggleState); + } + + #endregion + + public void UpdateUI(EntityCoordinates? consoleCoords, AtmosAlertsComputerEntry[] airAlarms, AtmosAlertsComputerEntry[] fireAlarms, AtmosAlertsFocusDeviceData? focusData) + { + if (_owner == null) + return; + + if (!_entManager.TryGetComponent(_owner.Value, out var console)) + return; + + if (_trackedEntity != focusData?.NetEntity) + { + SendFocusChangeMessageAction?.Invoke(_trackedEntity); + focusData = null; + } + + // Retain alarm data for use inbetween updates + _airAlarms = airAlarms; + _fireAlarms = fireAlarms; + _allAlarms = airAlarms.Concat(fireAlarms); + + var silenced = console.SilencedDevices; + + _activeAlarms = _allAlarms.Where(x => x.AlarmState > AtmosAlarmType.Normal && + (!silenced.Contains(x.NetEntity) || _deviceSilencingProgress.ContainsKey(x.NetEntity))); + + // Reset nav map data + NavMap.TrackedCoordinates.Clear(); + NavMap.TrackedEntities.Clear(); + + // Add tracked entities to the nav map + foreach (var device in console.AtmosDevices) + { + if (!NavMap.Visible) + continue; + + var alarmState = GetAlarmState(device.NetEntity); + + if (_trackedEntity != device.NetEntity) + { + // Skip air alarms if the appropriate overlay is off + if (!ShowInactiveAlarms.Pressed && alarmState == AtmosAlarmType.Invalid) + continue; + + if (!ShowNormalAlarms.Pressed && alarmState == AtmosAlarmType.Normal) + continue; + + if (!ShowWarningAlarms.Pressed && alarmState == AtmosAlarmType.Warning) + continue; + + if (!ShowDangerAlarms.Pressed && alarmState == AtmosAlarmType.Danger) + continue; + } + + AddTrackedEntityToNavMap(device, alarmState); + } + + // Show the monitor location + var consoleUid = _entManager.GetNetEntity(_owner); + + if (consoleCoords != null && consoleUid != null) + { + var texture = _spriteSystem.Frame0(new SpriteSpecifier.Texture(new ResPath("/Textures/Interface/NavMap/beveled_circle.png"))); + var blip = new NavMapBlip(consoleCoords.Value, texture, Color.Cyan, true, false); + NavMap.TrackedEntities[consoleUid.Value] = blip; + } + + // Update the nav map + NavMap.ForceNavMapUpdate(); + + // Clear excess children from the tables + var activeAlarmCount = _activeAlarms.Count(); + + while (AlertsTable.ChildCount > activeAlarmCount) + AlertsTable.RemoveChild(AlertsTable.GetChild(AlertsTable.ChildCount - 1)); + + while (AirAlarmsTable.ChildCount > airAlarms.Length) + AirAlarmsTable.RemoveChild(AirAlarmsTable.GetChild(AirAlarmsTable.ChildCount - 1)); + + while (FireAlarmsTable.ChildCount > fireAlarms.Length) + FireAlarmsTable.RemoveChild(FireAlarmsTable.GetChild(FireAlarmsTable.ChildCount - 1)); + + // Update all entries in each table + for (int index = 0; index < _activeAlarms.Count(); index++) + { + var entry = _activeAlarms.ElementAt(index); + UpdateUIEntry(entry, index, AlertsTable, console, focusData); + } + + for (int index = 0; index < airAlarms.Count(); index++) + { + var entry = airAlarms.ElementAt(index); + UpdateUIEntry(entry, index, AirAlarmsTable, console, focusData); + } + + for (int index = 0; index < fireAlarms.Count(); index++) + { + var entry = fireAlarms.ElementAt(index); + UpdateUIEntry(entry, index, FireAlarmsTable, console, focusData); + } + + // If no alerts are active, display a message + if (MasterTabContainer.CurrentTab == 0 && activeAlarmCount == 0) + { + var label = new RichTextLabel() + { + HorizontalExpand = true, + VerticalExpand = true, + HorizontalAlignment = HAlignment.Center, + VerticalAlignment = VAlignment.Center, + }; + + label.SetMarkup(Loc.GetString("atmos-alerts-window-no-active-alerts", ("color", StyleNano.GoodGreenFore.ToHexNoAlpha()))); + + AlertsTable.AddChild(label); + } + + // Update the alerts tab with the number of active alerts + if (activeAlarmCount == 0) + MasterTabContainer.SetTabTitle(0, Loc.GetString("atmos-alerts-window-tab-no-alerts")); + + else + MasterTabContainer.SetTabTitle(0, Loc.GetString("atmos-alerts-window-tab-alerts", ("value", activeAlarmCount))); + + // Auto-scroll re-enable + if (_autoScrollAwaitsUpdate) + { + _autoScrollActive = true; + _autoScrollAwaitsUpdate = false; + } + } + + private void AddTrackedEntityToNavMap(AtmosAlertsDeviceNavMapData metaData, AtmosAlarmType alarmState) + { + var data = GetBlipTexture(alarmState); + + if (data == null) + return; + + var texture = data.Value.Item1; + var color = data.Value.Item2; + var coords = _entManager.GetCoordinates(metaData.NetCoordinates); + + if (_trackedEntity != null && _trackedEntity != metaData.NetEntity) + color *= Color.DimGray; + + var selectable = true; + var blip = new NavMapBlip(coords, _spriteSystem.Frame0(texture), color, _trackedEntity == metaData.NetEntity, selectable); + + NavMap.TrackedEntities[metaData.NetEntity] = blip; + } + + private void UpdateUIEntry(AtmosAlertsComputerEntry entry, int index, Control table, AtmosAlertsComputerComponent console, AtmosAlertsFocusDeviceData? focusData = null) + { + // Make new UI entry if required + if (index >= table.ChildCount) + { + var newEntryContainer = new AtmosAlarmEntryContainer(entry.NetEntity, _entManager.GetCoordinates(entry.Coordinates)); + + // On click + newEntryContainer.FocusButton.OnButtonUp += args => + { + if (_trackedEntity == newEntryContainer.NetEntity) + { + _trackedEntity = null; + } + + else + { + _trackedEntity = newEntryContainer.NetEntity; + + if (newEntryContainer.Coordinates != null) + NavMap.CenterToCoordinates(newEntryContainer.Coordinates.Value); + } + + // Send message to console that the focus has changed + SendFocusChangeMessageAction?.Invoke(_trackedEntity); + + // Update affected UI elements across all tables + UpdateConsoleTable(console, AlertsTable, _trackedEntity); + UpdateConsoleTable(console, AirAlarmsTable, _trackedEntity); + UpdateConsoleTable(console, FireAlarmsTable, _trackedEntity); + }; + + // On toggling the silence check box + newEntryContainer.SilenceCheckBox.OnToggled += _ => OnSilenceAlertsToggled(newEntryContainer.NetEntity, newEntryContainer.SilenceCheckBox.Pressed); + + // Add the entry to the current table + table.AddChild(newEntryContainer); + } + + // Update values and UI elements + var tableChild = table.GetChild(index); + + if (tableChild is not AtmosAlarmEntryContainer) + { + table.RemoveChild(tableChild); + UpdateUIEntry(entry, index, table, console, focusData); + + return; + } + + var entryContainer = (AtmosAlarmEntryContainer)tableChild; + + entryContainer.UpdateEntry(entry, entry.NetEntity == _trackedEntity, focusData); + + if (_trackedEntity != entry.NetEntity) + { + var silenced = console.SilencedDevices; + entryContainer.SilenceCheckBox.Pressed = (silenced.Contains(entry.NetEntity) || _deviceSilencingProgress.ContainsKey(entry.NetEntity)); + } + + entryContainer.SilenceAlarmProgressBar.Visible = (table == AlertsTable && _deviceSilencingProgress.ContainsKey(entry.NetEntity)); + } + + private void UpdateConsoleTable(AtmosAlertsComputerComponent console, Control table, NetEntity? currTrackedEntity) + { + foreach (var tableChild in table.Children) + { + if (tableChild is not AtmosAlarmEntryContainer) + continue; + + var entryContainer = (AtmosAlarmEntryContainer)tableChild; + + if (entryContainer.NetEntity != currTrackedEntity) + entryContainer.RemoveAsFocus(); + + else if (entryContainer.NetEntity == currTrackedEntity) + entryContainer.SetAsFocus(); + } + } + + private void SetTrackedEntityFromNavMap(NetEntity? netEntity) + { + if (netEntity == null) + return; + + if (!_entManager.TryGetComponent(_owner, out var console)) + return; + + _trackedEntity = netEntity; + + if (netEntity != null) + { + // Tab switching + if (MasterTabContainer.CurrentTab != 0 || _activeAlarms?.Any(x => x.NetEntity == netEntity) == false) + { + var device = console.AtmosDevices.FirstOrNull(x => x.NetEntity == netEntity); + + switch (device?.Group) + { + case AtmosAlertsComputerGroup.AirAlarm: + MasterTabContainer.CurrentTab = 1; break; + case AtmosAlertsComputerGroup.FireAlarm: + MasterTabContainer.CurrentTab = 2; break; + } + } + + // Get the scroll position of the selected entity on the selected button the UI + ActivateAutoScrollToFocus(); + } + + // Send message to console that the focus has changed + SendFocusChangeMessageAction?.Invoke(_trackedEntity); + } + + protected override void FrameUpdate(FrameEventArgs args) + { + AutoScrollToFocus(); + + // Device silencing update + foreach ((var device, var remainingTime) in _deviceSilencingProgress) + { + var t = remainingTime - args.DeltaSeconds; + + if (t <= 0) + { + _deviceSilencingProgress.Remove(device); + + if (device == _trackedEntity) + _trackedEntity = null; + } + + else + _deviceSilencingProgress[device] = t; + } + } + + private void ActivateAutoScrollToFocus() + { + _autoScrollActive = false; + _autoScrollAwaitsUpdate = true; + } + + private void AutoScrollToFocus() + { + if (!_autoScrollActive) + return; + + var scroll = MasterTabContainer.Children.ElementAt(MasterTabContainer.CurrentTab) as ScrollContainer; + if (scroll == null) + return; + + if (!TryGetVerticalScrollbar(scroll, out var vScrollbar)) + return; + + if (!TryGetNextScrollPosition(out float? nextScrollPosition)) + return; + + vScrollbar.ValueTarget = nextScrollPosition.Value; + + if (MathHelper.CloseToPercent(vScrollbar.Value, vScrollbar.ValueTarget)) + _autoScrollActive = false; + } + + private bool TryGetVerticalScrollbar(ScrollContainer scroll, [NotNullWhen(true)] out VScrollBar? vScrollBar) + { + vScrollBar = null; + + foreach (var child in scroll.Children) + { + if (child is not VScrollBar) + continue; + + var castChild = child as VScrollBar; + + if (castChild != null) + { + vScrollBar = castChild; + return true; + } + } + + return false; + } + + private bool TryGetNextScrollPosition([NotNullWhen(true)] out float? nextScrollPosition) + { + nextScrollPosition = null; + + var scroll = MasterTabContainer.Children.ElementAt(MasterTabContainer.CurrentTab) as ScrollContainer; + if (scroll == null) + return false; + + var container = scroll.Children.ElementAt(0) as BoxContainer; + if (container == null || container.Children.Count() == 0) + return false; + + // Exit if the heights of the children haven't been initialized yet + if (!container.Children.Any(x => x.Height > 0)) + return false; + + nextScrollPosition = 0; + + foreach (var control in container.Children) + { + if (control == null || control is not AtmosAlarmEntryContainer) + continue; + + if (((AtmosAlarmEntryContainer)control).NetEntity == _trackedEntity) + return true; + + nextScrollPosition += control.Height; + } + + // Failed to find control + nextScrollPosition = null; + + return false; + } + + private AtmosAlarmType GetAlarmState(NetEntity netEntity) + { + var alarmState = _allAlarms?.FirstOrNull(x => x.NetEntity == netEntity)?.AlarmState; + + if (alarmState == null) + return AtmosAlarmType.Invalid; + + return alarmState.Value; + } + + private (SpriteSpecifier.Texture, Color)? GetBlipTexture(AtmosAlarmType alarmState) + { + (SpriteSpecifier.Texture, Color)? output = null; + + switch (alarmState) + { + case AtmosAlarmType.Invalid: + output = (new SpriteSpecifier.Texture(new ResPath("/Textures/Interface/NavMap/beveled_circle.png")), StyleNano.DisabledFore); break; + case AtmosAlarmType.Normal: + output = (new SpriteSpecifier.Texture(new ResPath("/Textures/Interface/NavMap/beveled_circle.png")), Color.LimeGreen); break; + case AtmosAlarmType.Warning: + output = (new SpriteSpecifier.Texture(new ResPath("/Textures/Interface/NavMap/beveled_triangle.png")), new Color(255, 182, 72)); break; + case AtmosAlarmType.Danger: + output = (new SpriteSpecifier.Texture(new ResPath("/Textures/Interface/NavMap/beveled_square.png")), new Color(255, 67, 67)); break; + } + + return output; + } +} \ No newline at end of file diff --git a/Content.Client/Atmos/EntitySystems/GasTileOverlaySystem.cs b/Content.Client/Atmos/EntitySystems/GasTileOverlaySystem.cs index 78185ce6b0e..86cf0a9eb82 100644 --- a/Content.Client/Atmos/EntitySystems/GasTileOverlaySystem.cs +++ b/Content.Client/Atmos/EntitySystems/GasTileOverlaySystem.cs @@ -1,4 +1,5 @@ using Content.Client.Atmos.Overlays; +using Content.Shared.Atmos; using Content.Shared.Atmos.Components; using Content.Shared.Atmos.EntitySystems; using JetBrains.Annotations; @@ -36,28 +37,38 @@ public override void Shutdown() private void OnHandleState(EntityUid gridUid, GasTileOverlayComponent comp, ref ComponentHandleState args) { - if (args.Current is not GasTileOverlayState state) - return; + Dictionary modifiedChunks; - // is this a delta or full state? - if (!state.FullState) + switch (args.Current) { - foreach (var index in comp.Chunks.Keys) + // is this a delta or full state? + case GasTileOverlayDeltaState delta: { - if (!state.AllChunks!.Contains(index)) - comp.Chunks.Remove(index); + modifiedChunks = delta.ModifiedChunks; + foreach (var index in comp.Chunks.Keys) + { + if (!delta.AllChunks.Contains(index)) + comp.Chunks.Remove(index); + } + + break; } - } - else - { - foreach (var index in comp.Chunks.Keys) + case GasTileOverlayState state: { - if (!state.Chunks.ContainsKey(index)) - comp.Chunks.Remove(index); + modifiedChunks = state.Chunks; + foreach (var index in comp.Chunks.Keys) + { + if (!state.Chunks.ContainsKey(index)) + comp.Chunks.Remove(index); + } + + break; } + default: + return; } - foreach (var (index, data) in state.Chunks) + foreach (var (index, data) in modifiedChunks) { comp.Chunks[index] = data; } diff --git a/Content.Client/Atmos/Overlays/AtmosDebugOverlay.cs b/Content.Client/Atmos/Overlays/AtmosDebugOverlay.cs index 6dfbc326ecb..c85dbd20512 100644 --- a/Content.Client/Atmos/Overlays/AtmosDebugOverlay.cs +++ b/Content.Client/Atmos/Overlays/AtmosDebugOverlay.cs @@ -66,7 +66,7 @@ protected override void Draw(in OverlayDrawArgs args) DrawData(msg, handle); } - handle.SetTransform(Matrix3.Identity); + handle.SetTransform(Matrix3x2.Identity); } private void DrawData(DebugMessage msg, diff --git a/Content.Client/Atmos/Overlays/GasTileOverlay.cs b/Content.Client/Atmos/Overlays/GasTileOverlay.cs index f4dc274a4e5..17027525e54 100644 --- a/Content.Client/Atmos/Overlays/GasTileOverlay.cs +++ b/Content.Client/Atmos/Overlays/GasTileOverlay.cs @@ -190,7 +190,7 @@ protected override void Draw(in OverlayDrawArgs args) var (_, _, worldMatrix, invMatrix) = gridXform.GetWorldPositionRotationMatrixWithInv(); state.drawHandle.SetTransform(worldMatrix); - var floatBounds = invMatrix.TransformBox(in state.WorldBounds).Enlarged(grid.TileSize); + var floatBounds = invMatrix.TransformBox(state.WorldBounds).Enlarged(grid.TileSize); var localBounds = new Box2i( (int) MathF.Floor(floatBounds.Left), (int) MathF.Floor(floatBounds.Bottom), @@ -249,7 +249,7 @@ protected override void Draw(in OverlayDrawArgs args) }); drawHandle.UseShader(null); - drawHandle.SetTransform(Matrix3.Identity); + drawHandle.SetTransform(Matrix3x2.Identity); } private void DrawMapOverlay( diff --git a/Content.Client/Atmos/UI/GasAnalyzerWindow.xaml.cs b/Content.Client/Atmos/UI/GasAnalyzerWindow.xaml.cs index b105e629cfa..b54af3a5871 100644 --- a/Content.Client/Atmos/UI/GasAnalyzerWindow.xaml.cs +++ b/Content.Client/Atmos/UI/GasAnalyzerWindow.xaml.cs @@ -163,6 +163,26 @@ private void GenerateGasDisplay(GasMixEntry gasMix, Control parent) parent.AddChild(panel); panel.AddChild(dataContainer); + // Volume label + var volBox = new BoxContainer { Orientation = BoxContainer.LayoutOrientation.Horizontal }; + + volBox.AddChild(new Label + { + Text = Loc.GetString("gas-analyzer-window-volume-text") + }); + volBox.AddChild(new Control + { + MinSize = new Vector2(10, 0), + HorizontalExpand = true + }); + volBox.AddChild(new Label + { + Text = Loc.GetString("gas-analyzer-window-volume-val-text", ("volume", $"{gasMix.Volume:0.##}")), + Align = Label.AlignMode.Right, + HorizontalExpand = true + }); + dataContainer.AddChild(volBox); + // Pressure label var presBox = new BoxContainer { Orientation = BoxContainer.LayoutOrientation.Horizontal }; diff --git a/Content.Client/Audio/Jukebox/JukeboxBoundUserInterface.cs b/Content.Client/Audio/Jukebox/JukeboxBoundUserInterface.cs index 072730d65d4..60fe339069a 100644 --- a/Content.Client/Audio/Jukebox/JukeboxBoundUserInterface.cs +++ b/Content.Client/Audio/Jukebox/JukeboxBoundUserInterface.cs @@ -9,7 +9,6 @@ namespace Content.Client.Audio.Jukebox; public sealed class JukeboxBoundUserInterface : BoundUserInterface { - [Dependency] private readonly IPlayerManager _player = default!; [Dependency] private readonly IPrototypeManager _protoManager = default!; [ViewVariables] diff --git a/Content.Client/Audio/Jukebox/JukeboxSystem.cs b/Content.Client/Audio/Jukebox/JukeboxSystem.cs index 53bde82a784..dd4a5bbb9b0 100644 --- a/Content.Client/Audio/Jukebox/JukeboxSystem.cs +++ b/Content.Client/Audio/Jukebox/JukeboxSystem.cs @@ -11,6 +11,7 @@ public sealed class JukeboxSystem : SharedJukeboxSystem [Dependency] private readonly IPrototypeManager _protoManager = default!; [Dependency] private readonly AnimationPlayerSystem _animationPlayer = default!; [Dependency] private readonly SharedAppearanceSystem _appearanceSystem = default!; + [Dependency] private readonly SharedUserInterfaceSystem _uiSystem = default!; public override void Initialize() { @@ -35,13 +36,10 @@ private void OnProtoReload(PrototypesReloadedEventArgs obj) var query = AllEntityQuery(); - while (query.MoveNext(out _, out var ui)) + while (query.MoveNext(out var uid, out _, out var ui)) { - if (!ui.OpenInterfaces.TryGetValue(JukeboxUiKey.Key, out var baseBui) || - baseBui is not JukeboxBoundUserInterface bui) - { + if (!_uiSystem.TryGetOpenUi((uid, ui), JukeboxUiKey.Key, out var bui)) continue; - } bui.PopulateMusic(); } @@ -49,15 +47,9 @@ private void OnProtoReload(PrototypesReloadedEventArgs obj) private void OnJukeboxAfterState(Entity ent, ref AfterAutoHandleStateEvent args) { - if (!TryComp(ent, out UserInterfaceComponent? ui)) + if (!_uiSystem.TryGetOpenUi(ent.Owner, JukeboxUiKey.Key, out var bui)) return; - if (!ui.OpenInterfaces.TryGetValue(JukeboxUiKey.Key, out var baseBui) || - baseBui is not JukeboxBoundUserInterface bui) - { - return; - } - bui.Reload(); } diff --git a/Content.Client/Buckle/BuckleSystem.cs b/Content.Client/Buckle/BuckleSystem.cs index fea18e5cf3c..d4614210d9f 100644 --- a/Content.Client/Buckle/BuckleSystem.cs +++ b/Content.Client/Buckle/BuckleSystem.cs @@ -50,17 +50,11 @@ private void OnBuckleAfterAutoHandleState(EntityUid uid, BuckleComponent compone private void OnAppearanceChange(EntityUid uid, BuckleComponent component, ref AppearanceChangeEvent args) { - if (!TryComp(uid, out var rotVisuals)) + if (!TryComp(uid, out var rotVisuals) + || !Appearance.TryGetData(uid, BuckleVisuals.Buckled, out var buckled, args.Component) + || !buckled || args.Sprite == null) return; - if (!Appearance.TryGetData(uid, BuckleVisuals.Buckled, out var buckled, args.Component) || - !buckled || - args.Sprite == null) - { - _rotationVisualizerSystem.SetHorizontalAngle((uid, rotVisuals), rotVisuals.DefaultRotation); - return; - } - // Animate strapping yourself to something at a given angle // TODO: Dump this when buckle is better _rotationVisualizerSystem.AnimateSpriteRotation(uid, args.Sprite, rotVisuals.HorizontalRotation, 0.125f); diff --git a/Content.Client/CardboardBox/CardboardBoxSystem.cs b/Content.Client/CardboardBox/CardboardBoxSystem.cs index 90a21d8e41b..925013db109 100644 --- a/Content.Client/CardboardBox/CardboardBoxSystem.cs +++ b/Content.Client/CardboardBox/CardboardBoxSystem.cs @@ -1,4 +1,5 @@ using System.Numerics; +using Content.Shared.Body.Components; using Content.Shared.CardboardBox; using Content.Shared.CardboardBox.Components; using Content.Shared.Examine; @@ -13,9 +14,14 @@ public sealed class CardboardBoxSystem : SharedCardboardBoxSystem [Dependency] private readonly TransformSystem _transform = default!; [Dependency] private readonly ExamineSystemShared _examine = default!; + private EntityQuery _bodyQuery; + public override void Initialize() { base.Initialize(); + + _bodyQuery = GetEntityQuery(); + SubscribeNetworkEvent(OnBoxEffect); } @@ -59,6 +65,10 @@ private void OnBoxEffect(PlayBoxEffectMessage msg) if (!_examine.InRangeUnOccluded(sourcePos, mapPos, box.Distance, null)) continue; + // no effect for anything too exotic + if (!_bodyQuery.HasComp(mob)) + continue; + var ent = Spawn(box.Effect, mapPos); if (!xformQuery.TryGetComponent(ent, out var entTransform) || !TryComp(ent, out var sprite)) diff --git a/Content.Client/CartridgeLoader/Cartridges/MailMetricUi.cs b/Content.Client/CartridgeLoader/Cartridges/MailMetricUi.cs new file mode 100644 index 00000000000..504dda7c56e --- /dev/null +++ b/Content.Client/CartridgeLoader/Cartridges/MailMetricUi.cs @@ -0,0 +1,28 @@ +using Content.Client.UserInterface.Fragments; +using Content.Shared.CartridgeLoader.Cartridges; +using Robust.Client.UserInterface; + +namespace Content.Client.CartridgeLoader.Cartridges; + +public sealed partial class MailMetricUi : UIFragment +{ + private MailMetricUiFragment? _fragment; + + public override Control GetUIFragmentRoot() + { + return _fragment!; + } + + public override void Setup(BoundUserInterface userInterface, EntityUid? fragmentOwner) + { + _fragment = new MailMetricUiFragment(); + } + + public override void UpdateState(BoundUserInterfaceState state) + { + if (state is MailMetricUiState cast) + { + _fragment?.UpdateState(cast); + } + } +} diff --git a/Content.Client/CartridgeLoader/Cartridges/MailMetricUiFragment.xaml b/Content.Client/CartridgeLoader/Cartridges/MailMetricUiFragment.xaml new file mode 100644 index 00000000000..39639fe8c97 --- /dev/null +++ b/Content.Client/CartridgeLoader/Cartridges/MailMetricUiFragment.xaml @@ -0,0 +1,183 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Content.Client/CartridgeLoader/Cartridges/MailMetricUiFragment.xaml.cs b/Content.Client/CartridgeLoader/Cartridges/MailMetricUiFragment.xaml.cs new file mode 100644 index 00000000000..553e3a57931 --- /dev/null +++ b/Content.Client/CartridgeLoader/Cartridges/MailMetricUiFragment.xaml.cs @@ -0,0 +1,104 @@ +using Content.Shared.CartridgeLoader.Cartridges; +using Robust.Client.AutoGenerated; +using Robust.Client.UserInterface.Controls; +using Robust.Client.UserInterface.XAML; + +namespace Content.Client.CartridgeLoader.Cartridges; + +[GenerateTypedNameReferences] +public sealed partial class MailMetricUiFragment : BoxContainer +{ + + private OpenedMailPercentGrade? _successGrade; + + public MailMetricUiFragment() + { + RobustXamlLoader.Load(this); + + // This my way of adding multiple classes to a XAML control. + // Haha Batman I'm going to blow up Gotham City + OpenedMailCount.StyleClasses.Add("Good"); + OpenedMailSpesos.StyleClasses.Add("Good"); + TamperedMailCount.StyleClasses.Add("Danger"); + TamperedMailSpesos.StyleClasses.Add("Danger"); + ExpiredMailCount.StyleClasses.Add("Danger"); + ExpiredMailSpesos.StyleClasses.Add("Danger"); + DamagedMailCount.StyleClasses.Add("Danger"); + DamagedMailSpesos.StyleClasses.Add("Danger"); + UnopenedMailCount.StyleClasses.Add("Caution"); + } + + public void UpdateState(MailMetricUiState state) + { + UpdateTextLabels(state); + UpdateSuccessGrade(state); + } + + public void UpdateTextLabels(MailMetricUiState state) + { + var stats = state.Metrics; + + OpenedMailCount.Text = stats.OpenedCount.ToString(); + OpenedMailSpesos.Text = stats.Earnings.ToString(); + TamperedMailCount.Text = stats.TamperedCount.ToString(); + TamperedMailSpesos.Text = stats.TamperedLosses.ToString(); + ExpiredMailCount.Text = stats.ExpiredCount.ToString(); + ExpiredMailSpesos.Text = stats.ExpiredLosses.ToString(); + DamagedMailCount.Text = stats.DamagedCount.ToString(); + DamagedMailSpesos.Text = stats.DamagedLosses.ToString(); + UnopenedMailCount.Text = state.UnopenedMailCount.ToString(); + TotalMailCount.Text = state.TotalMail.ToString(); + TotalMailSpesos.Text = stats.TotalIncome.ToString(); + SuccessRateCounts.Text = Loc.GetString("mail-metrics-progress", + ("opened", stats.OpenedCount), + ("total", state.TotalMail)); + SuccessRatePercent.Text = Loc.GetString("mail-metrics-progress-percent", + ("successRate", state.SuccessRate)); + } + + public void UpdateSuccessGrade(MailMetricUiState state) + { + var previousGrade = _successGrade; + _successGrade = GetSuccessRateGrade(state.SuccessRate); + + // No need to update if they're the same + if (previousGrade == _successGrade) + return; + + var previousGradeClass = GetClassForGrade(previousGrade); + if (previousGradeClass != string.Empty) + { + SuccessRatePercent.StyleClasses.Remove(previousGradeClass); + } + + SuccessRatePercent.StyleClasses.Add(GetClassForGrade(_successGrade)); + } + + private static OpenedMailPercentGrade GetSuccessRateGrade(double successRate) + { + return successRate switch + { + > 75 => OpenedMailPercentGrade.Good, + > 50 => OpenedMailPercentGrade.Average, + _ => OpenedMailPercentGrade.Bad, + }; + } + + private string GetClassForGrade(OpenedMailPercentGrade? grade) + { + return grade switch + { + OpenedMailPercentGrade.Good => "Good", + OpenedMailPercentGrade.Average => "Caution", + OpenedMailPercentGrade.Bad => "Danger", + _ => string.Empty, + }; + } +} + +enum OpenedMailPercentGrade +{ + Good, + Average, + Bad +} diff --git a/Content.Client/CartridgeLoader/Cartridges/NewsReaderUiFragment.xaml.cs b/Content.Client/CartridgeLoader/Cartridges/NewsReaderUiFragment.xaml.cs index f3b2d373d74..2d4d192ea8a 100644 --- a/Content.Client/CartridgeLoader/Cartridges/NewsReaderUiFragment.xaml.cs +++ b/Content.Client/CartridgeLoader/Cartridges/NewsReaderUiFragment.xaml.cs @@ -31,7 +31,7 @@ public void UpdateState(NewsArticle article, int targetNum, int totalNum, bool n Author.Visible = true; PageName.Text = article.Title; - PageText.SetMarkup(article.Content); + PageText.SetMarkupPermissive(article.Content); PageNum.Text = $"{targetNum}/{totalNum}"; diff --git a/Content.Client/Changelog/ChangelogWindow.xaml.cs b/Content.Client/Changelog/ChangelogWindow.xaml.cs index e5f492900c2..9b7fd754369 100644 --- a/Content.Client/Changelog/ChangelogWindow.xaml.cs +++ b/Content.Client/Changelog/ChangelogWindow.xaml.cs @@ -87,14 +87,12 @@ private void TabsUpdated() if (!tab.AdminOnly || isAdmin) { Tabs.SetTabVisible(i, true); - tab.Visible = true; visibleTabs++; firstVisible ??= i; } else { Tabs.SetTabVisible(i, false); - tab.Visible = false; } } diff --git a/Content.Client/Chapel/SacrificialAltarSystem.cs b/Content.Client/Chapel/SacrificialAltarSystem.cs new file mode 100644 index 00000000000..5b694e4b4e2 --- /dev/null +++ b/Content.Client/Chapel/SacrificialAltarSystem.cs @@ -0,0 +1,5 @@ +using Content.Shared.Chapel; + +namespace Content.Client.Chapel; + +public sealed class SacrificialAltarSystem : SharedSacrificialAltarSystem; diff --git a/Content.Client/Chat/UI/EmotesMenu.xaml b/Content.Client/Chat/UI/EmotesMenu.xaml new file mode 100644 index 00000000000..cc4d5bb77e9 --- /dev/null +++ b/Content.Client/Chat/UI/EmotesMenu.xaml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Content.Client/Chat/UI/EmotesMenu.xaml.cs b/Content.Client/Chat/UI/EmotesMenu.xaml.cs new file mode 100644 index 00000000000..a26d319920b --- /dev/null +++ b/Content.Client/Chat/UI/EmotesMenu.xaml.cs @@ -0,0 +1,112 @@ +using System.Numerics; +using Content.Client.UserInterface.Controls; +using Content.Shared.Chat.Prototypes; +using Content.Shared.Speech; +using Robust.Client.AutoGenerated; +using Robust.Client.GameObjects; +using Robust.Client.UserInterface.Controls; +using Robust.Client.UserInterface.XAML; +using Robust.Shared.Player; +using Robust.Shared.Prototypes; + +namespace Content.Client.Chat.UI; + +[GenerateTypedNameReferences] +public sealed partial class EmotesMenu : RadialMenu +{ + [Dependency] private readonly EntityManager _entManager = default!; + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + [Dependency] private readonly ISharedPlayerManager _playerManager = default!; + + private readonly SpriteSystem _spriteSystem; + + public event Action>? OnPlayEmote; + + public EmotesMenu() + { + IoCManager.InjectDependencies(this); + RobustXamlLoader.Load(this); + + _spriteSystem = _entManager.System(); + + var main = FindControl("Main"); + + var emotes = _prototypeManager.EnumeratePrototypes(); + foreach (var emote in emotes) + { + var player = _playerManager.LocalSession?.AttachedEntity; + if (emote.Category == EmoteCategory.Invalid || + emote.ChatTriggers.Count == 0 || + !(player.HasValue && (emote.Whitelist?.IsValid(player.Value, _entManager) ?? true)) || + (emote.Blacklist?.IsValid(player.Value, _entManager) ?? false)) + continue; + + if (!emote.Available && + _entManager.TryGetComponent(player.Value, out var speech) && + !speech.AllowedEmotes.Contains(emote.ID)) + continue; + + var parent = FindControl(emote.Category.ToString()); + + var button = new EmoteMenuButton + { + StyleClasses = { "RadialMenuButton" }, + SetSize = new Vector2(64f, 64f), + ToolTip = Loc.GetString(emote.Name), + ProtoId = emote.ID, + }; + + var tex = new TextureRect + { + VerticalAlignment = VAlignment.Center, + HorizontalAlignment = HAlignment.Center, + Texture = _spriteSystem.Frame0(emote.Icon), + TextureScale = new Vector2(2f, 2f), + }; + + button.AddChild(tex); + parent.AddChild(button); + foreach (var child in main.Children) + { + if (child is not RadialMenuTextureButton castChild) + continue; + + if (castChild.TargetLayer == emote.Category.ToString()) + { + castChild.Visible = true; + break; + } + } + } + + + // Set up menu actions + foreach (var child in Children) + { + if (child is not RadialContainer container) + continue; + AddEmoteClickAction(container); + } + } + + private void AddEmoteClickAction(RadialContainer container) + { + foreach (var child in container.Children) + { + if (child is not EmoteMenuButton castChild) + continue; + + castChild.OnButtonUp += _ => + { + OnPlayEmote?.Invoke(castChild.ProtoId); + Close(); + }; + } + } +} + + +public sealed class EmoteMenuButton : RadialMenuTextureButton +{ + public ProtoId ProtoId { get; set; } +} diff --git a/Content.Client/Chemistry/Components/SolutionItemStatusComponent.cs b/Content.Client/Chemistry/Components/SolutionItemStatusComponent.cs new file mode 100644 index 00000000000..58c5a05894b --- /dev/null +++ b/Content.Client/Chemistry/Components/SolutionItemStatusComponent.cs @@ -0,0 +1,22 @@ +using Content.Client.Chemistry.EntitySystems; +using Content.Client.Chemistry.UI; + +namespace Content.Client.Chemistry.Components; + +/// +/// Exposes a solution container's contents via a basic item status control. +/// +/// +/// Shows the solution volume, max volume, and transfer amount. +/// +/// +/// +[RegisterComponent] +public sealed partial class SolutionItemStatusComponent : Component +{ + /// + /// The ID of the solution that will be shown on the item status control. + /// + [DataField, ViewVariables(VVAccess.ReadWrite)] + public string Solution = "default"; +} diff --git a/Content.Client/Chemistry/EntitySystems/SolutionItemStatusSystem.cs b/Content.Client/Chemistry/EntitySystems/SolutionItemStatusSystem.cs new file mode 100644 index 00000000000..76aab516a77 --- /dev/null +++ b/Content.Client/Chemistry/EntitySystems/SolutionItemStatusSystem.cs @@ -0,0 +1,22 @@ +using Content.Client.Chemistry.Components; +using Content.Client.Chemistry.UI; +using Content.Client.Items; +using Content.Shared.Chemistry.EntitySystems; + +namespace Content.Client.Chemistry.EntitySystems; + +/// +/// Wires up item status logic for . +/// +/// +public sealed class SolutionItemStatusSystem : EntitySystem +{ + [Dependency] private readonly SharedSolutionContainerSystem _solutionContainerSystem = default!; + + public override void Initialize() + { + base.Initialize(); + Subs.ItemStatus( + entity => new SolutionStatusControl(entity, EntityManager, _solutionContainerSystem)); + } +} diff --git a/Content.Client/Chemistry/UI/ButtonGrid.cs b/Content.Client/Chemistry/UI/ButtonGrid.cs new file mode 100644 index 00000000000..0abd9ef8a43 --- /dev/null +++ b/Content.Client/Chemistry/UI/ButtonGrid.cs @@ -0,0 +1,119 @@ +using System; +using Robust.Client.Graphics; +using Robust.Client.UserInterface.Controls; + +namespace Content.Client.Chemistry.UI; + +/// +/// Creates a grid of buttons given a comma-seperated list of Text +/// +public sealed class ButtonGrid : GridContainer +{ + private string _buttonList = ""; + + /// + /// A comma-seperated list of text to use for each button. These will be inserted sequentially. + /// + public string ButtonList + { + get => _buttonList; + set + { + _buttonList = value; + Update(); + } + } + + public bool RadioGroup { get; set; } = false; + + private string? _selected; + + /// + /// Which button is currently selected. Only matters when is true. + /// + public string? Selected + { + get => _selected; + set + { + _selected = value; + Update(); + } + } + + public Action? OnButtonPressed; + + /// + /// + /// + public new int Columns + { + get => base.Columns; + set + { + base.Columns = value; + Update(); + } + } + + /// + /// + /// + public new int Rows + { + get => base.Rows; + set + { + base.Rows = value; + Update(); + } + } + + private void Update() + { + if (ButtonList == "") + return; + + this.Children.Clear(); + var i = 0; + var list = ButtonList.Split(","); + + var group = new ButtonGroup(); + + foreach (var button in list) + { + var btn = new Button(); + btn.Text = button; + btn.OnPressed += _ => + { + if (RadioGroup) + btn.Pressed = true; + Selected = button; + OnButtonPressed?.Invoke(button); + }; + if (button == Selected) + btn.Pressed = true; + var sep = HSeparationOverride ?? 0; + // ReSharper disable once PossibleLossOfFraction + // btn.SetWidth = (this.PixelWidth - sep * (Columns - 1)) / 3; + btn.Group = group; + + var row = i / Columns; + var col = i % Columns; + var last = i == list.Length - 1; + var lastCol = i == Columns - 1; + var lastRow = row == list.Length / Columns - 1; + + if (row == 0 && (lastCol || last)) + btn.AddStyleClass("OpenLeft"); + else if (col == 0 && lastRow) + btn.AddStyleClass("OpenRight"); + else + btn.AddStyleClass("OpenBoth"); + + this.Children.Add(btn); + + i++; + } + } +} diff --git a/Content.Client/Chemistry/UI/InjectorStatusControl.cs b/Content.Client/Chemistry/UI/InjectorStatusControl.cs index ba1f97cd1e4..f9b0d90e205 100644 --- a/Content.Client/Chemistry/UI/InjectorStatusControl.cs +++ b/Content.Client/Chemistry/UI/InjectorStatusControl.cs @@ -32,7 +32,7 @@ protected override void FrameUpdate(FrameEventArgs args) { base.FrameUpdate(args); - if (!_solutionContainers.TryGetSolution(_parent.Owner, InjectorComponent.SolutionName, out _, out var solution)) + if (!_solutionContainers.TryGetSolution(_parent.Owner, _parent.Comp.SolutionName, out _, out var solution)) return; // only updates the UI if any of the details are different than they previously were diff --git a/Content.Client/Chemistry/UI/ReagentCardControl.xaml b/Content.Client/Chemistry/UI/ReagentCardControl.xaml new file mode 100644 index 00000000000..966c7301406 --- /dev/null +++ b/Content.Client/Chemistry/UI/ReagentCardControl.xaml @@ -0,0 +1,37 @@ + + + + + + + diff --git a/Content.Client/Chemistry/UI/ReagentCardControl.xaml.cs b/Content.Client/Chemistry/UI/ReagentCardControl.xaml.cs new file mode 100644 index 00000000000..60336143fc7 --- /dev/null +++ b/Content.Client/Chemistry/UI/ReagentCardControl.xaml.cs @@ -0,0 +1,30 @@ +using Content.Shared.Chemistry; +using Robust.Client.AutoGenerated; +using Robust.Client.Graphics; +using Robust.Client.UserInterface; +using Robust.Client.UserInterface.XAML; + +namespace Content.Client.Chemistry.UI; + +[GenerateTypedNameReferences] +public sealed partial class ReagentCardControl : Control +{ + public string StorageSlotId { get; } + public Action? OnPressed; + public Action? OnEjectButtonPressed; + + public ReagentCardControl(ReagentInventoryItem item) + { + RobustXamlLoader.Load(this); + + StorageSlotId = item.StorageSlotId; + ColorPanel.PanelOverride = new StyleBoxFlat { BackgroundColor = item.ReagentColor }; + ReagentNameLabel.Text = item.ReagentLabel; + ReagentNameLabel.FontColorOverride = Color.White; + FillLabel.Text = item.StoredAmount; + EjectButtonIcon.Text = Loc.GetString("reagent-dispenser-window-eject-container-button"); + + MainButton.OnPressed += args => OnPressed?.Invoke(StorageSlotId); + EjectButton.OnPressed += args => OnEjectButtonPressed?.Invoke(StorageSlotId); + } +} diff --git a/Content.Client/Chemistry/UI/ReagentDispenserBoundUserInterface.cs b/Content.Client/Chemistry/UI/ReagentDispenserBoundUserInterface.cs index 8244e3e6edb..99e5a3d3953 100644 --- a/Content.Client/Chemistry/UI/ReagentDispenserBoundUserInterface.cs +++ b/Content.Client/Chemistry/UI/ReagentDispenserBoundUserInterface.cs @@ -1,3 +1,4 @@ +using Content.Client.Guidebook.Components; using Content.Shared.Chemistry; using Content.Shared.Containers.ItemSlots; using JetBrains.Annotations; @@ -34,6 +35,7 @@ protected override void Open() _window = new() { Title = EntMan.GetComponent(Owner).EntityName, + HelpGuidebookIds = EntMan.GetComponent(Owner).Guides }; _window.OpenCentered(); @@ -42,38 +44,11 @@ protected override void Open() // Setup static button actions. _window.EjectButton.OnPressed += _ => SendMessage(new ItemSlotButtonPressedEvent(SharedReagentDispenser.OutputSlotName)); _window.ClearButton.OnPressed += _ => SendMessage(new ReagentDispenserClearContainerSolutionMessage()); - _window.DispenseButton1.OnPressed += _ => SendMessage(new ReagentDispenserSetDispenseAmountMessage(ReagentDispenserDispenseAmount.U1)); - _window.DispenseButton5.OnPressed += _ => SendMessage(new ReagentDispenserSetDispenseAmountMessage(ReagentDispenserDispenseAmount.U5)); - _window.DispenseButton10.OnPressed += _ => SendMessage(new ReagentDispenserSetDispenseAmountMessage(ReagentDispenserDispenseAmount.U10)); - _window.DispenseButton15.OnPressed += _ => SendMessage(new ReagentDispenserSetDispenseAmountMessage(ReagentDispenserDispenseAmount.U15)); - _window.DispenseButton20.OnPressed += _ => SendMessage(new ReagentDispenserSetDispenseAmountMessage(ReagentDispenserDispenseAmount.U20)); - _window.DispenseButton25.OnPressed += _ => SendMessage(new ReagentDispenserSetDispenseAmountMessage(ReagentDispenserDispenseAmount.U25)); - _window.DispenseButton30.OnPressed += _ => SendMessage(new ReagentDispenserSetDispenseAmountMessage(ReagentDispenserDispenseAmount.U30)); - _window.DispenseButton50.OnPressed += _ => SendMessage(new ReagentDispenserSetDispenseAmountMessage(ReagentDispenserDispenseAmount.U50)); - _window.DispenseButton100.OnPressed += _ => SendMessage(new ReagentDispenserSetDispenseAmountMessage(ReagentDispenserDispenseAmount.U100)); - // Setup reagent button actions. - _window.OnDispenseReagentButtonPressed += (args, button) => SendMessage(new ReagentDispenserDispenseReagentMessage(button.ReagentId)); - _window.OnDispenseReagentButtonMouseEntered += (args, button) => - { - if (_lastState is not null) - _window.UpdateContainerInfo(_lastState); - }; - _window.OnDispenseReagentButtonMouseExited += (args, button) => - { - if (_lastState is not null) - _window.UpdateContainerInfo(_lastState); - }; + _window.AmountGrid.OnButtonPressed += s => SendMessage(new ReagentDispenserSetDispenseAmountMessage(s)); - _window.OnEjectJugButtonPressed += (args, button) => SendMessage(new ItemSlotButtonPressedEvent(button.ReagentId)); - _window.OnEjectJugButtonMouseEntered += (args, button) => { - if (_lastState is not null) - _window.UpdateContainerInfo(_lastState); - }; - _window.OnEjectJugButtonMouseExited += (args, button) => { - if (_lastState is not null) - _window.UpdateContainerInfo(_lastState); - }; + _window.OnDispenseReagentButtonPressed += (id) => SendMessage(new ReagentDispenserDispenseReagentMessage(id)); + _window.OnEjectJugButtonPressed += (id) => SendMessage(new ItemSlotButtonPressedEvent(id)); } /// diff --git a/Content.Client/Chemistry/UI/ReagentDispenserWindow.xaml b/Content.Client/Chemistry/UI/ReagentDispenserWindow.xaml index 3b812ba56b2..c900d7ecf2d 100644 --- a/Content.Client/Chemistry/UI/ReagentDispenserWindow.xaml +++ b/Content.Client/Chemistry/UI/ReagentDispenserWindow.xaml @@ -1,53 +1,77 @@ - - - - [GenerateTypedNameReferences] - public sealed partial class ReagentDispenserWindow : DefaultWindow + public sealed partial class ReagentDispenserWindow : FancyWindow { [Dependency] private readonly IPrototypeManager _prototypeManager = default!; [Dependency] private readonly IEntityManager _entityManager = default!; - public event Action? OnDispenseReagentButtonPressed; - public event Action? OnDispenseReagentButtonMouseEntered; - public event Action? OnDispenseReagentButtonMouseExited; - - public event Action? OnEjectJugButtonPressed; - public event Action? OnEjectJugButtonMouseEntered; - public event Action? OnEjectJugButtonMouseExited; + public event Action? OnDispenseReagentButtonPressed; + public event Action? OnEjectJugButtonPressed; /// /// Create and initialize the dispenser UI client-side. Creates the basic layout, @@ -35,44 +29,27 @@ public ReagentDispenserWindow() { RobustXamlLoader.Load(this); IoCManager.InjectDependencies(this); - - var dispenseAmountGroup = new ButtonGroup(); - DispenseButton1.Group = dispenseAmountGroup; - DispenseButton5.Group = dispenseAmountGroup; - DispenseButton10.Group = dispenseAmountGroup; - DispenseButton15.Group = dispenseAmountGroup; - DispenseButton20.Group = dispenseAmountGroup; - DispenseButton25.Group = dispenseAmountGroup; - DispenseButton30.Group = dispenseAmountGroup; - DispenseButton50.Group = dispenseAmountGroup; - DispenseButton100.Group = dispenseAmountGroup; } /// /// Update the button grid of reagents which can be dispensed. /// /// Reagents which can be dispensed by this dispenser - public void UpdateReagentsList(List>> inventory) + public void UpdateReagentsList(List inventory) { - if (ChemicalList == null) + if (ReagentList == null) return; - ChemicalList.Children.Clear(); + ReagentList.Children.Clear(); //Sort inventory by reagentLabel - inventory.Sort((x, y) => x.Value.Key.CompareTo(y.Value.Key)); + inventory.Sort((x, y) => x.ReagentLabel.CompareTo(y.ReagentLabel)); - foreach (KeyValuePair> entry in inventory) + foreach (var item in inventory) { - var button = new DispenseReagentButton(entry.Key, entry.Value.Key, entry.Value.Value); - button.OnPressed += args => OnDispenseReagentButtonPressed?.Invoke(args, button); - button.OnMouseEntered += args => OnDispenseReagentButtonMouseEntered?.Invoke(args, button); - button.OnMouseExited += args => OnDispenseReagentButtonMouseExited?.Invoke(args, button); - ChemicalList.AddChild(button); - var ejectButton = new EjectJugButton(entry.Key); - ejectButton.OnPressed += args => OnEjectJugButtonPressed?.Invoke(args, ejectButton); - ejectButton.OnMouseEntered += args => OnEjectJugButtonMouseEntered?.Invoke(args, ejectButton); - ejectButton.OnMouseExited += args => OnEjectJugButtonMouseExited?.Invoke(args, ejectButton); - ChemicalList.AddChild(ejectButton); + var card = new ReagentCardControl(item); + card.OnPressed += OnDispenseReagentButtonPressed; + card.OnEjectButtonPressed += OnEjectJugButtonPressed; + ReagentList.Children.Add(card); } } @@ -93,36 +70,7 @@ public void UpdateState(BoundUserInterfaceState state) ClearButton.Disabled = castState.OutputContainer is null; EjectButton.Disabled = castState.OutputContainer is null; - switch (castState.SelectedDispenseAmount) - { - case ReagentDispenserDispenseAmount.U1: - DispenseButton1.Pressed = true; - break; - case ReagentDispenserDispenseAmount.U5: - DispenseButton5.Pressed = true; - break; - case ReagentDispenserDispenseAmount.U10: - DispenseButton10.Pressed = true; - break; - case ReagentDispenserDispenseAmount.U15: - DispenseButton15.Pressed = true; - break; - case ReagentDispenserDispenseAmount.U20: - DispenseButton20.Pressed = true; - break; - case ReagentDispenserDispenseAmount.U25: - DispenseButton25.Pressed = true; - break; - case ReagentDispenserDispenseAmount.U30: - DispenseButton30.Pressed = true; - break; - case ReagentDispenserDispenseAmount.U50: - DispenseButton50.Pressed = true; - break; - case ReagentDispenserDispenseAmount.U100: - DispenseButton100.Pressed = true; - break; - } + AmountGrid.Selected = ((int)castState.SelectedDispenseAmount).ToString(); } /// @@ -137,23 +85,15 @@ public void UpdateContainerInfo(ReagentDispenserBoundUserInterfaceState state) if (state.OutputContainer is null) { + ContainerInfoName.Text = ""; + ContainerInfoFill.Text = ""; ContainerInfo.Children.Add(new Label { Text = Loc.GetString("reagent-dispenser-window-no-container-loaded-text") }); return; } - ContainerInfo.Children.Add(new BoxContainer // Name of the container and its fill status (Ex: 44/100u) - { - Orientation = LayoutOrientation.Horizontal, - Children = - { - new Label {Text = $"{state.OutputContainer.DisplayName}: "}, - new Label - { - Text = $"{state.OutputContainer.CurrentVolume}/{state.OutputContainer.MaxVolume}", - StyleClasses = {StyleNano.StyleClassLabelSecondaryColor} - } - } - }); + // Set Name of the container and its fill status (Ex: 44/100u) + ContainerInfoName.Text = state.OutputContainer.DisplayName; + ContainerInfoFill.Text = state.OutputContainer.CurrentVolume + "/" + state.OutputContainer.MaxVolume; foreach (var (reagent, quantity) in state.OutputContainer.Reagents!) { diff --git a/Content.Client/Chemistry/UI/SolutionStatusControl.cs b/Content.Client/Chemistry/UI/SolutionStatusControl.cs new file mode 100644 index 00000000000..1a33ffb0e14 --- /dev/null +++ b/Content.Client/Chemistry/UI/SolutionStatusControl.cs @@ -0,0 +1,59 @@ +using Content.Client.Chemistry.Components; +using Content.Client.Chemistry.EntitySystems; +using Content.Client.Items.UI; +using Content.Client.Message; +using Content.Client.Stylesheets; +using Content.Shared.Chemistry.Components; +using Content.Shared.Chemistry.EntitySystems; +using Content.Shared.FixedPoint; +using Robust.Client.UserInterface.Controls; + +namespace Content.Client.Chemistry.UI; + +/// +/// Displays basic solution information for . +/// +/// +public sealed class SolutionStatusControl : PollingItemStatusControl +{ + private readonly Entity _parent; + private readonly IEntityManager _entityManager; + private readonly SharedSolutionContainerSystem _solutionContainers; + private readonly RichTextLabel _label; + + public SolutionStatusControl( + Entity parent, + IEntityManager entityManager, + SharedSolutionContainerSystem solutionContainers) + { + _parent = parent; + _entityManager = entityManager; + _solutionContainers = solutionContainers; + _label = new RichTextLabel { StyleClasses = { StyleNano.StyleClassItemStatus } }; + AddChild(_label); + } + + protected override Data PollData() + { + if (!_solutionContainers.TryGetSolution(_parent.Owner, _parent.Comp.Solution, out _, out var solution)) + return default; + + FixedPoint2? transferAmount = null; + if (_entityManager.TryGetComponent(_parent.Owner, out SolutionTransferComponent? transfer)) + transferAmount = transfer.TransferAmount; + + return new Data(solution.Volume, solution.MaxVolume, transferAmount); + } + + protected override void Update(in Data data) + { + var markup = Loc.GetString("solution-status-volume", + ("currentVolume", data.Volume), + ("maxVolume", data.MaxVolume)); + if (data.TransferVolume is { } transferVolume) + markup += "\n" + Loc.GetString("solution-status-transfer", ("volume", transferVolume)); + _label.SetMarkup(markup); + } + + public readonly record struct Data(FixedPoint2 Volume, FixedPoint2 MaxVolume, FixedPoint2? TransferVolume); +} diff --git a/Content.Client/Clickable/ClickableComponent.cs b/Content.Client/Clickable/ClickableComponent.cs index cfbd1a99d69..6f75df46830 100644 --- a/Content.Client/Clickable/ClickableComponent.cs +++ b/Content.Client/Clickable/ClickableComponent.cs @@ -38,9 +38,9 @@ public bool CheckClick(SpriteComponent sprite, TransformComponent transform, Ent renderOrder = sprite.RenderOrder; var (spritePos, spriteRot) = transform.GetWorldPositionRotation(xformQuery); var spriteBB = sprite.CalculateRotatedBoundingBox(spritePos, spriteRot, eye.Rotation); - bottom = Matrix3.CreateRotation(eye.Rotation).TransformBox(spriteBB).Bottom; + bottom = Matrix3Helpers.CreateRotation(eye.Rotation).TransformBox(spriteBB).Bottom; - var invSpriteMatrix = Matrix3.Invert(sprite.GetLocalMatrix()); + 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(); @@ -48,8 +48,8 @@ public bool CheckClick(SpriteComponent sprite, TransformComponent transform, Ent Angle cardinalSnapping = sprite.SnapCardinals ? relativeRotation.GetCardinalDir().ToAngle() : Angle.Zero; // First we get `localPos`, the clicked location in the sprite-coordinate frame. - var entityXform = Matrix3.CreateInverseTransform(transform.WorldPosition, sprite.NoRotation ? -eye.Rotation : spriteRot - cardinalSnapping); - var localPos = invSpriteMatrix.Transform(entityXform.Transform(worldPos)); + 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)) @@ -79,8 +79,8 @@ public bool CheckClick(SpriteComponent sprite, TransformComponent transform, Ent // convert to layer-local coordinates layer.GetLayerDrawMatrix(dir, out var matrix); - var inverseMatrix = Matrix3.Invert(matrix); - var layerLocal = inverseMatrix.Transform(localPos); + 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); diff --git a/Content.Client/Clothing/ClientClothingSystem.cs b/Content.Client/Clothing/ClientClothingSystem.cs index 7e78ac7d707..dd69521f483 100644 --- a/Content.Client/Clothing/ClientClothingSystem.cs +++ b/Content.Client/Clothing/ClientClothingSystem.cs @@ -11,6 +11,7 @@ using Robust.Client.GameObjects; using Robust.Client.Graphics; using Robust.Client.ResourceManagement; +using Robust.Shared.Serialization.Manager; using Robust.Shared.Serialization.TypeSerializers.Implementations; using Robust.Shared.Utility; using static Robust.Client.GameObjects.SpriteComponent; @@ -46,6 +47,7 @@ public sealed class ClientClothingSystem : ClothingSystem }; [Dependency] private readonly IResourceCache _cache = default!; + [Dependency] private readonly ISerializationManager _serialization = default!; [Dependency] private readonly InventorySystem _inventorySystem = default!; public override void Initialize() @@ -265,6 +267,7 @@ private void RenderEquipment(EntityUid equipee, EntityUid equipment, string slot // temporary, until layer draw depths get added. Basically: a layer with the key "slot" is being used as a // bookmark to determine where in the list of layers we should insert the clothing layers. bool slotLayerExists = sprite.LayerMapTryGet(slot, out var index); + var displacementData = inventory.Displacements.GetValueOrDefault(slot); // add the new layers foreach (var (key, layerData) in ev.Layers) @@ -308,6 +311,28 @@ private void RenderEquipment(EntityUid equipee, EntityUid equipment, string slot sprite.LayerSetData(index, layerData); layer.Offset += slotDef.Offset; + + if (displacementData != null) + { + if (displacementData.ShaderOverride != null) + sprite.LayerSetShader(index, displacementData.ShaderOverride); + + var displacementKey = $"{key}-displacement"; + if (!revealedLayers.Add(displacementKey)) + { + Log.Warning($"Duplicate key for clothing visuals DISPLACEMENT: {displacementKey}."); + continue; + } + + var displacementLayer = _serialization.CreateCopy(displacementData.Layer, notNullableOverride: true); + displacementLayer.CopyToShaderParameters!.LayerKey = key; + + // Add before main layer for this item. + sprite.AddLayer(displacementLayer, index); + sprite.LayerMapSet(displacementKey, index); + + revealedLayers.Add(displacementKey); + } } RaiseLocalEvent(equipment, new EquipmentVisualsUpdatedEvent(equipee, slot, revealedLayers), true); diff --git a/Content.Client/Cocoon/CocoonSystem.cs b/Content.Client/Cocoon/CocoonSystem.cs new file mode 100644 index 00000000000..d3eb4a8205f --- /dev/null +++ b/Content.Client/Cocoon/CocoonSystem.cs @@ -0,0 +1,33 @@ +using Content.Shared.Cocoon; +using Content.Shared.Humanoid; +using Robust.Client.GameObjects; +using Robust.Shared.Containers; +using System.Numerics; + +namespace Content.Client.Cocoon +{ + public sealed class CocoonSystem : EntitySystem + { + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnCocEntInserted); + } + + private void OnCocEntInserted(EntityUid uid, CocoonComponent component, EntInsertedIntoContainerMessage args) + { + if (!TryComp(uid, out var cocoonSprite)) + return; + + if (TryComp(args.Entity, out var humanoidAppearance)) // If humanoid, use height and width + cocoonSprite.Scale = new Vector2(humanoidAppearance.Width, humanoidAppearance.Height); + else if (!TryComp(args.Entity, out var entSprite)) + return; + else if (entSprite.BaseRSI != null) // Set scale based on sprite scale + sprite dimensions. Ideally we would somehow get a bounding box from the sprite size not including transparent pixels, but FUCK figuring that out. + cocoonSprite.Scale = entSprite.Scale * (entSprite.BaseRSI.Size / 32); + else if (entSprite.Scale != cocoonSprite.Scale) // if basersi somehow not found (?) just use scale + cocoonSprite.Scale = entSprite.Scale; + } + } +} diff --git a/Content.Client/Communications/UI/CommunicationsConsoleMenu.xaml.cs b/Content.Client/Communications/UI/CommunicationsConsoleMenu.xaml.cs index 90643e45cf7..4d8dd86a4dc 100644 --- a/Content.Client/Communications/UI/CommunicationsConsoleMenu.xaml.cs +++ b/Content.Client/Communications/UI/CommunicationsConsoleMenu.xaml.cs @@ -1,7 +1,9 @@ using Content.Client.UserInterface.Controls; using System.Threading; +using Content.Shared.CCVar; using Robust.Client.AutoGenerated; using Robust.Client.UserInterface.XAML; +using Robust.Shared.Configuration; using Robust.Shared.Utility; using Timer = Robust.Shared.Timing.Timer; @@ -13,6 +15,8 @@ public sealed partial class CommunicationsConsoleMenu : FancyWindow private CommunicationsConsoleBoundUserInterface Owner { get; set; } private readonly CancellationTokenSource _timerCancelTokenSource = new(); + [Dependency] private readonly IConfigurationManager _cfg = default!; + public CommunicationsConsoleMenu(CommunicationsConsoleBoundUserInterface owner) { IoCManager.InjectDependencies(this); @@ -23,6 +27,22 @@ public CommunicationsConsoleMenu(CommunicationsConsoleBoundUserInterface owner) var loc = IoCManager.Resolve(); MessageInput.Placeholder = new Rope.Leaf(loc.GetString("comms-console-menu-announcement-placeholder")); + var maxAnnounceLength = _cfg.GetCVar(CCVars.ChatMaxAnnouncementLength); + MessageInput.OnTextChanged += (args) => + { + if (args.Control.TextLength > maxAnnounceLength) + { + AnnounceButton.Disabled = true; + AnnounceButton.ToolTip = Loc.GetString("comms-console-message-too-long"); + } + else + { + AnnounceButton.Disabled = !owner.CanAnnounce; + AnnounceButton.ToolTip = null; + + } + }; + AnnounceButton.OnPressed += (_) => Owner.AnnounceButtonPressed(Rope.Collapse(MessageInput.TextRope)); AnnounceButton.Disabled = !owner.CanAnnounce; diff --git a/Content.Client/CriminalRecords/Systems/CriminalRecordsHackerSystem.cs b/Content.Client/CriminalRecords/Systems/CriminalRecordsHackerSystem.cs new file mode 100644 index 00000000000..21fccc880da --- /dev/null +++ b/Content.Client/CriminalRecords/Systems/CriminalRecordsHackerSystem.cs @@ -0,0 +1,7 @@ +using Content.Shared.CriminalRecords.Systems; + +namespace Content.Client.CriminalRecords.Systems; + +public sealed class CriminalRecordsHackerSystem : SharedCriminalRecordsHackerSystem +{ +} diff --git a/Content.Client/Decals/DecalSystem.cs b/Content.Client/Decals/DecalSystem.cs index 901ab270fb5..41e5f39c286 100644 --- a/Content.Client/Decals/DecalSystem.cs +++ b/Content.Client/Decals/DecalSystem.cs @@ -56,34 +56,43 @@ protected override void OnDecalRemoved(EntityUid gridId, uint decalId, DecalGrid private void OnHandleState(EntityUid gridUid, DecalGridComponent gridComp, ref ComponentHandleState args) { - if (args.Current is not DecalGridState state) - return; - // is this a delta or full state? _removedChunks.Clear(); + Dictionary modifiedChunks; - if (!state.FullState) + switch (args.Current) { - foreach (var key in gridComp.ChunkCollection.ChunkCollection.Keys) + case DecalGridDeltaState delta: { - if (!state.AllChunks!.Contains(key)) - _removedChunks.Add(key); + modifiedChunks = delta.ModifiedChunks; + foreach (var key in gridComp.ChunkCollection.ChunkCollection.Keys) + { + if (!delta.AllChunks.Contains(key)) + _removedChunks.Add(key); + } + + break; } - } - else - { - foreach (var key in gridComp.ChunkCollection.ChunkCollection.Keys) + case DecalGridState state: { - if (!state.Chunks.ContainsKey(key)) - _removedChunks.Add(key); + modifiedChunks = state.Chunks; + foreach (var key in gridComp.ChunkCollection.ChunkCollection.Keys) + { + if (!state.Chunks.ContainsKey(key)) + _removedChunks.Add(key); + } + + break; } + default: + return; } if (_removedChunks.Count > 0) RemoveChunks(gridUid, gridComp, _removedChunks); - if (state.Chunks.Count > 0) - UpdateChunks(gridUid, gridComp, state.Chunks); + if (modifiedChunks.Count > 0) + UpdateChunks(gridUid, gridComp, modifiedChunks); } private void OnChunkUpdate(DecalChunkUpdateEvent ev) diff --git a/Content.Client/Decals/Overlays/DecalOverlay.cs b/Content.Client/Decals/Overlays/DecalOverlay.cs index d9904ae80b5..0de3301e589 100644 --- a/Content.Client/Decals/Overlays/DecalOverlay.cs +++ b/Content.Client/Decals/Overlays/DecalOverlay.cs @@ -1,3 +1,4 @@ +using System.Numerics; using Content.Shared.Decals; using Robust.Client.GameObjects; using Robust.Client.Graphics; @@ -113,7 +114,7 @@ protected override void Draw(in OverlayDrawArgs args) handle.DrawTexture(cache.Texture, decal.Coordinates, angle, decal.Color); } - handle.SetTransform(Matrix3.Identity); + handle.SetTransform(Matrix3x2.Identity); } } } diff --git a/Content.Client/Decals/Overlays/DecalPlacementOverlay.cs b/Content.Client/Decals/Overlays/DecalPlacementOverlay.cs index be277448eda..845bd7c03d2 100644 --- a/Content.Client/Decals/Overlays/DecalPlacementOverlay.cs +++ b/Content.Client/Decals/Overlays/DecalPlacementOverlay.cs @@ -51,7 +51,7 @@ protected override void Draw(in OverlayDrawArgs args) var handle = args.WorldHandle; handle.SetTransform(worldMatrix); - var localPos = invMatrix.Transform(mousePos.Position); + var localPos = Vector2.Transform(mousePos.Position, invMatrix); if (snap) { @@ -63,6 +63,6 @@ protected override void Draw(in OverlayDrawArgs args) var box = new Box2Rotated(aabb, rotation, localPos); handle.DrawTextureRect(_sprite.Frame0(decal.Sprite), box, color); - handle.SetTransform(Matrix3.Identity); + handle.SetTransform(Matrix3x2.Identity); } } diff --git a/Content.Client/DeltaV/Options/UI/Tabs/DeltaTab.xaml b/Content.Client/DeltaV/Options/UI/Tabs/DeltaTab.xaml deleted file mode 100644 index f1dae68077d..00000000000 --- a/Content.Client/DeltaV/Options/UI/Tabs/DeltaTab.xaml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - diff --git a/Content.Client/Lathe/UI/RecipeControl.xaml.cs b/Content.Client/Lathe/UI/RecipeControl.xaml.cs index bf85ff7d938..47b6b5932c4 100644 --- a/Content.Client/Lathe/UI/RecipeControl.xaml.cs +++ b/Content.Client/Lathe/UI/RecipeControl.xaml.cs @@ -2,8 +2,8 @@ using Robust.Client.AutoGenerated; using Robust.Client.Graphics; using Robust.Client.UserInterface; +using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.XAML; -using Robust.Shared.Graphics; namespace Content.Client.Lathe.UI; @@ -13,12 +13,12 @@ public sealed partial class RecipeControl : Control public Action? OnButtonPressed; public Func TooltipTextSupplier; - public RecipeControl(LatheRecipePrototype recipe, Func tooltipTextSupplier, bool canProduce, Texture? texture = null) + public RecipeControl(LatheRecipePrototype recipe, Func tooltipTextSupplier, bool canProduce, List textures) { RobustXamlLoader.Load(this); RecipeName.Text = recipe.Name; - RecipeTexture.Texture = texture; + RecipeTextures.Textures = textures; Button.Disabled = !canProduce; TooltipTextSupplier = tooltipTextSupplier; Button.TooltipSupplier = SupplyTooltip; diff --git a/Content.Client/Light/EntitySystems/ExpendableLightSystem.cs b/Content.Client/Light/EntitySystems/ExpendableLightSystem.cs index a2a7fb2531c..80774067301 100644 --- a/Content.Client/Light/EntitySystems/ExpendableLightSystem.cs +++ b/Content.Client/Light/EntitySystems/ExpendableLightSystem.cs @@ -52,7 +52,7 @@ protected override void OnAppearanceChange(EntityUid uid, ExpendableLightCompone case ExpendableLightState.Lit: _audioSystem.Stop(comp.PlayingStream); comp.PlayingStream = _audioSystem.PlayPvs( - comp.LoopedSound, uid, SharedExpendableLightComponent.LoopedSoundParams)?.Entity; + comp.LoopedSound, uid)?.Entity; if (args.Sprite.LayerMapTryGet(ExpendableLightVisualLayers.Overlay, out var layerIdx, true)) { diff --git a/Content.Client/Preferences/ClientPreferencesManager.cs b/Content.Client/Lobby/ClientPreferencesManager.cs similarity index 99% rename from Content.Client/Preferences/ClientPreferencesManager.cs rename to Content.Client/Lobby/ClientPreferencesManager.cs index aca7159504d..29269686579 100644 --- a/Content.Client/Preferences/ClientPreferencesManager.cs +++ b/Content.Client/Lobby/ClientPreferencesManager.cs @@ -10,7 +10,7 @@ using Robust.Shared.Prototypes; using Robust.Shared.Utility; -namespace Content.Client.Preferences +namespace Content.Client.Lobby { /// /// Receives and from the server during the initial diff --git a/Content.Client/Preferences/IClientPreferencesManager.cs b/Content.Client/Lobby/IClientPreferencesManager.cs similarity index 94% rename from Content.Client/Preferences/IClientPreferencesManager.cs rename to Content.Client/Lobby/IClientPreferencesManager.cs index e55d6b600ca..1b72593ad04 100644 --- a/Content.Client/Preferences/IClientPreferencesManager.cs +++ b/Content.Client/Lobby/IClientPreferencesManager.cs @@ -1,7 +1,7 @@ using System; using Content.Shared.Preferences; -namespace Content.Client.Preferences +namespace Content.Client.Lobby { public interface IClientPreferencesManager { diff --git a/Content.Client/Lobby/LobbyState.cs b/Content.Client/Lobby/LobbyState.cs index 1d68a5f068c..2e728f552a5 100644 --- a/Content.Client/Lobby/LobbyState.cs +++ b/Content.Client/Lobby/LobbyState.cs @@ -3,8 +3,6 @@ using Content.Client.LateJoin; using Content.Client.Lobby.UI; using Content.Client.Message; -using Content.Client.Preferences; -using Content.Client.Preferences.UI; using Content.Client.UserInterface.Systems.Chat; using Content.Client.Voting; using Robust.Client; @@ -12,8 +10,6 @@ using Robust.Client.ResourceManagement; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; -using Robust.Shared.Configuration; -using Robust.Shared.Prototypes; using Robust.Shared.Timing; @@ -25,60 +21,39 @@ public sealed class LobbyState : Robust.Client.State.State [Dependency] private readonly IClientConsoleHost _consoleHost = default!; [Dependency] private readonly IEntityManager _entityManager = default!; [Dependency] private readonly IResourceCache _resourceCache = default!; - [Dependency] private readonly IPrototypeManager _prototypeManager = default!; [Dependency] private readonly IUserInterfaceManager _userInterfaceManager = default!; - [Dependency] private readonly IClientPreferencesManager _preferencesManager = default!; [Dependency] private readonly IGameTiming _gameTiming = default!; [Dependency] private readonly IVoteManager _voteManager = default!; - [Dependency] private readonly IConfigurationManager _configurationManager = default!; - - [ViewVariables] private CharacterSetupGui? _characterSetup; private ClientGameTicker _gameTicker = default!; private ContentAudioSystem _contentAudioSystem = default!; protected override Type? LinkedScreenType { get; } = typeof(LobbyGui); - private LobbyGui? _lobby; + public LobbyGui? Lobby; protected override void Startup() { if (_userInterfaceManager.ActiveScreen == null) return; - _lobby = (LobbyGui) _userInterfaceManager.ActiveScreen; + Lobby = (LobbyGui) _userInterfaceManager.ActiveScreen; var chatController = _userInterfaceManager.GetUIController(); _gameTicker = _entityManager.System(); _contentAudioSystem = _entityManager.System(); _contentAudioSystem.LobbySoundtrackChanged += UpdateLobbySoundtrackInfo; - _characterSetup = new CharacterSetupGui(_entityManager, _resourceCache, _preferencesManager, - _prototypeManager, _configurationManager); - LayoutContainer.SetAnchorPreset(_characterSetup, LayoutContainer.LayoutPreset.Wide); - _lobby.CharacterSetupState.AddChild(_characterSetup); chatController.SetMainChat(true); - _voteManager.SetPopupContainer(_lobby.VoteContainer); - - _characterSetup.CloseButton.OnPressed += _ => - { - _lobby.SwitchState(LobbyGui.LobbyGuiState.Default); - }; + _voteManager.SetPopupContainer(Lobby.VoteContainer); + LayoutContainer.SetAnchorPreset(Lobby, LayoutContainer.LayoutPreset.Wide); + Lobby.ServerName.Text = _baseClient.GameInfo?.ServerName; // The eye of refactor gazes upon you... - _characterSetup.SaveButton.OnPressed += _ => - { - _characterSetup.Save(); - _userInterfaceManager.GetUIController().UpdateCharacterUI(); - // _characterSetup.Save(); //Nuclear14 workaround to prevent saving using this button, as I can't make it disable dependent on Special points - }; - - LayoutContainer.SetAnchorPreset(_lobby, LayoutContainer.LayoutPreset.Wide); - _lobby.ServerName.Text = _baseClient.GameInfo?.ServerName; //The eye of refactor gazes upon you... UpdateLobbyUi(); - _lobby.CharacterPreview.CharacterSetupButton.OnPressed += OnSetupPressed; - _lobby.ReadyButton.OnPressed += OnReadyPressed; - _lobby.ReadyButton.OnToggled += OnReadyToggled; + Lobby.CharacterPreview.CharacterSetupButton.OnPressed += OnSetupPressed; + Lobby.ReadyButton.OnPressed += OnReadyPressed; + Lobby.ReadyButton.OnToggled += OnReadyToggled; _gameTicker.InfoBlobUpdated += UpdateLobbyUi; _gameTicker.LobbyStatusUpdated += LobbyStatusUpdated; @@ -96,20 +71,23 @@ protected override void Shutdown() _voteManager.ClearPopupContainer(); - _lobby!.CharacterPreview.CharacterSetupButton.OnPressed -= OnSetupPressed; - _lobby!.ReadyButton.OnPressed -= OnReadyPressed; - _lobby!.ReadyButton.OnToggled -= OnReadyToggled; + Lobby!.CharacterPreview.CharacterSetupButton.OnPressed -= OnSetupPressed; + Lobby!.ReadyButton.OnPressed -= OnReadyPressed; + Lobby!.ReadyButton.OnToggled -= OnReadyToggled; - _lobby = null; + Lobby = null; + } - _characterSetup?.Dispose(); - _characterSetup = null; + public void SwitchState(LobbyGui.LobbyGuiState state) + { + // Yeah I hate this but LobbyState contains all the badness for now + Lobby?.SwitchState(state); } private void OnSetupPressed(BaseButton.ButtonEventArgs args) { SetReady(false); - _lobby!.SwitchState(LobbyGui.LobbyGuiState.CharacterSetup); + Lobby?.SwitchState(LobbyGui.LobbyGuiState.CharacterSetup); } private void OnReadyPressed(BaseButton.ButtonEventArgs args) @@ -129,20 +107,20 @@ public override void FrameUpdate(FrameEventArgs e) { if (_gameTicker.IsGameStarted) { - _lobby!.StartTime.Text = string.Empty; + Lobby!.StartTime.Text = string.Empty; var roundTime = _gameTiming.CurTime.Subtract(_gameTicker.RoundStartTimeSpan); - _lobby!.StationTime.Text = Loc.GetString("lobby-state-player-status-round-time", ("hours", roundTime.Hours), ("minutes", roundTime.Minutes)); + Lobby!.StationTime.Text = Loc.GetString("lobby-state-player-status-round-time", ("hours", roundTime.Hours), ("minutes", roundTime.Minutes)); return; } - _lobby!.StationTime.Text = Loc.GetString("lobby-state-player-status-round-not-started"); + Lobby!.StationTime.Text = Loc.GetString("lobby-state-player-status-round-not-started"); string text; if (_gameTicker.Paused) text = Loc.GetString("lobby-state-paused"); else if (_gameTicker.StartTime < _gameTiming.CurTime) { - _lobby!.StartTime.Text = Loc.GetString("lobby-state-soon"); + Lobby!.StartTime.Text = Loc.GetString("lobby-state-soon"); return; } else @@ -157,7 +135,7 @@ public override void FrameUpdate(FrameEventArgs e) text = $"{difference.Minutes}:{difference.Seconds:D2}"; } - _lobby!.StartTime.Text = Loc.GetString("lobby-state-round-start-countdown-text", ("timeLeft", text)); + Lobby!.StartTime.Text = Loc.GetString("lobby-state-round-start-countdown-text", ("timeLeft", text)); } private void LobbyStatusUpdated() @@ -168,36 +146,36 @@ private void LobbyStatusUpdated() private void LobbyLateJoinStatusUpdated() { - _lobby!.ReadyButton.Disabled = _gameTicker.DisallowedLateJoin; + Lobby!.ReadyButton.Disabled = _gameTicker.DisallowedLateJoin; } private void UpdateLobbyUi() { if (_gameTicker.IsGameStarted) { - _lobby!.ReadyButton.Text = Loc.GetString("lobby-state-ready-button-join-state"); - _lobby!.ReadyButton.ToggleMode = false; - _lobby!.ReadyButton.Pressed = false; - _lobby!.ObserveButton.Disabled = false; + Lobby!.ReadyButton.Text = Loc.GetString("lobby-state-ready-button-join-state"); + Lobby!.ReadyButton.ToggleMode = false; + Lobby!.ReadyButton.Pressed = false; + Lobby!.ObserveButton.Disabled = false; } else { - _lobby!.StartTime.Text = string.Empty; - _lobby!.ReadyButton.Text = Loc.GetString(_lobby!.ReadyButton.Pressed ? "lobby-state-player-status-ready": "lobby-state-player-status-not-ready"); - _lobby!.ReadyButton.ToggleMode = true; - _lobby!.ReadyButton.Disabled = false; - _lobby!.ReadyButton.Pressed = _gameTicker.AreWeReady; - _lobby!.ObserveButton.Disabled = true; + Lobby!.StartTime.Text = string.Empty; + Lobby!.ReadyButton.Text = Loc.GetString(Lobby!.ReadyButton.Pressed ? "lobby-state-player-status-ready": "lobby-state-player-status-not-ready"); + Lobby!.ReadyButton.ToggleMode = true; + Lobby!.ReadyButton.Disabled = false; + Lobby!.ReadyButton.Pressed = _gameTicker.AreWeReady; + Lobby!.ObserveButton.Disabled = true; } if (_gameTicker.ServerInfoBlob != null) - _lobby!.ServerInfo.SetInfoBlob(_gameTicker.ServerInfoBlob); + Lobby!.ServerInfo.SetInfoBlob(_gameTicker.ServerInfoBlob); } private void UpdateLobbySoundtrackInfo(LobbySoundtrackChangedEvent ev) { if (ev.SoundtrackFilename == null) - _lobby!.LobbySong.SetMarkup(Loc.GetString("lobby-state-song-no-song-text")); + Lobby!.LobbySong.SetMarkup(Loc.GetString("lobby-state-song-no-song-text")); else if (ev.SoundtrackFilename != null && _resourceCache.TryGetResource(ev.SoundtrackFilename, out var lobbySongResource)) { @@ -215,16 +193,16 @@ private void UpdateLobbySoundtrackInfo(LobbySoundtrackChangedEvent ev) ("songTitle", title), ("songArtist", artist)); - _lobby!.LobbySong.SetMarkup(markup); + Lobby!.LobbySong.SetMarkup(markup); } } private void UpdateLobbyBackground() { if (_gameTicker.LobbyBackground != null) - _lobby!.Background.Texture = _resourceCache.GetResource(_gameTicker.LobbyBackground); + Lobby!.Background.Texture = _resourceCache.GetResource(_gameTicker.LobbyBackground); else - _lobby!.Background.Texture = null; + Lobby!.Background.Texture = null; } diff --git a/Content.Client/Lobby/LobbyUIController.cs b/Content.Client/Lobby/LobbyUIController.cs index 47ab651c10e..26643cb603c 100644 --- a/Content.Client/Lobby/LobbyUIController.cs +++ b/Content.Client/Lobby/LobbyUIController.cs @@ -3,156 +3,252 @@ using Content.Client.Inventory; using Content.Client.Lobby.UI; using Content.Client.Players.PlayTimeTracking; -using Content.Client.Preferences; -using Content.Client.Preferences.UI; +using Content.Shared.CCVar; +using Content.Shared.Clothing.Loadouts.Prototypes; using Content.Shared.Clothing.Loadouts.Systems; using Content.Shared.GameTicking; -using Content.Shared.Humanoid; +using Content.Shared.Humanoid.Markings; using Content.Shared.Humanoid.Prototypes; using Content.Shared.Preferences; using Content.Shared.Roles; +using Content.Shared.Traits; +using Robust.Client.Player; +using Robust.Client.ResourceManagement; using Robust.Client.State; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controllers; +using Robust.Shared.Configuration; using Robust.Shared.Map; using Robust.Shared.Prototypes; +using Robust.Shared.Utility; +using static Content.Shared.Humanoid.SharedHumanoidAppearanceSystem; +using CharacterSetupGui = Content.Client.Lobby.UI.CharacterSetupGui; +using HumanoidProfileEditor = Content.Client.Lobby.UI.HumanoidProfileEditor; namespace Content.Client.Lobby; public sealed class LobbyUIController : UIController, IOnStateEntered, IOnStateExited { [Dependency] private readonly IClientPreferencesManager _preferencesManager = default!; - [Dependency] private readonly IStateManager _stateManager = default!; + [Dependency] private readonly IConfigurationManager _configurationManager = default!; + [Dependency] private readonly IFileDialogManager _dialogManager = default!; + [Dependency] private readonly IPlayerManager _playerManager = default!; [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + [Dependency] private readonly IResourceCache _resourceCache = default!; + [Dependency] private readonly IStateManager _stateManager = default!; + [Dependency] private readonly JobRequirementsManager _requirements = default!; + [Dependency] private readonly MarkingManager _markings = default!; [Dependency] private readonly JobRequirementsManager _jobRequirements = default!; [UISystemDependency] private readonly HumanoidAppearanceSystem _humanoid = default!; [UISystemDependency] private readonly ClientInventorySystem _inventory = default!; [UISystemDependency] private readonly LoadoutSystem _loadouts = default!; - private LobbyCharacterPanel? _previewPanel; + private CharacterSetupGui? _characterSetup; private HumanoidProfileEditor? _profileEditor; - /* - * Each character profile has its own dummy. There is also a dummy for the lobby screen + character editor - * that is shared too. - */ + /// This is the character preview panel in the chat. This should only update if their character updates + private LobbyCharacterPreviewPanel? PreviewPanel => GetLobbyPreview(); - /// - /// Preview dummy for role gear. - /// - private EntityUid? _previewDummy; + /// This is the modified profile currently being edited + private HumanoidCharacterProfile? EditedProfile => _profileEditor?.Profile; + private int? EditedSlot => _profileEditor?.CharacterSlot; - [Access(typeof(HumanoidProfileEditor))] - public bool UpdateClothes = true; - [Access(typeof(HumanoidProfileEditor))] - public bool ShowClothes = true; - [Access(typeof(HumanoidProfileEditor))] - public bool ShowLoadouts = true; - - // TODO: Load the species directly and don't update entity ever. - public event Action? PreviewDummyUpdated; public override void Initialize() { base.Initialize(); + _prototypeManager.PrototypesReloaded += OnPrototypesReloaded; _preferencesManager.OnServerDataLoaded += PreferencesDataLoaded; + _requirements.Updated += OnRequirementsUpdated; + + _configurationManager.OnValueChanged(CCVars.FlavorText, _ => _profileEditor?.RefreshFlavorText()); + _configurationManager.OnValueChanged(CCVars.GameRoleTimers, _ => RefreshProfileEditor()); + _configurationManager.OnValueChanged(CCVars.GameRoleWhitelist, _ => RefreshProfileEditor()); + + _preferencesManager.OnServerDataLoaded += PreferencesDataLoaded; + } + + public void OnStateEntered(LobbyState state) + { + PreviewPanel?.SetLoaded(_preferencesManager.ServerDataLoaded); + ReloadCharacterSetup(); + } + + public void OnStateExited(LobbyState state) + { + PreviewPanel?.SetLoaded(false); + _characterSetup?.Dispose(); + _profileEditor?.Dispose(); + _characterSetup = null; + _profileEditor = null; } + private void PreferencesDataLoaded() { - if (_previewDummy != null) - EntityManager.DeleteEntity(_previewDummy); + PreviewPanel?.SetLoaded(true); + + if (_stateManager.CurrentState is not LobbyState) + return; - UpdateCharacterUI(); + ReloadCharacterSetup(); } - public void OnStateEntered(LobbyState state) + private LobbyCharacterPreviewPanel? GetLobbyPreview() { + return _stateManager.CurrentState is LobbyState lobby ? lobby.Lobby?.CharacterPreview : null; } - public void OnStateExited(LobbyState state) + private void OnRequirementsUpdated() { - EntityManager.DeleteEntity(_previewDummy); - _previewDummy = null; + if (_profileEditor == null) + return; + + _profileEditor.RefreshAntags(); + _profileEditor.RefreshJobs(); } - public void SetPreviewPanel(LobbyCharacterPanel? panel) + private void OnPrototypesReloaded(PrototypesReloadedEventArgs obj) { - _previewPanel = panel; - UpdateCharacterUI(); + if (_profileEditor == null) + return; + + if (obj.WasModified()) + _profileEditor.RefreshSpecies(); + + if (obj.WasModified()) + _profileEditor.RefreshAntags(); + + if (obj.WasModified() + || obj.WasModified()) + _profileEditor.RefreshJobs(); + + if (obj.WasModified()) + _profileEditor.UpdateTraits(null, true); + + if (obj.WasModified()) + _profileEditor.UpdateLoadouts(null, true); } - public void SetProfileEditor(HumanoidProfileEditor? editor) + + /// Reloads every single character setup control + public void ReloadCharacterSetup() { - _profileEditor = editor; - UpdateCharacterUI(); + RefreshLobbyPreview(); + var (characterGui, profileEditor) = EnsureGui(); + characterGui.ReloadCharacterPickers(); + profileEditor.SetProfile( + (HumanoidCharacterProfile?) _preferencesManager.Preferences?.SelectedCharacter, + _preferencesManager.Preferences?.SelectedCharacterIndex); } - public void UpdateCharacterUI() + /// Refreshes the character preview in the lobby chat + private void RefreshLobbyPreview() { - // Test moment - if (_stateManager.CurrentState is not LobbyState) + if (PreviewPanel == null) return; - if (!_preferencesManager.ServerDataLoaded) + // Get selected character, load it, then set it + var character = _preferencesManager.Preferences?.SelectedCharacter; + + if (character is not HumanoidCharacterProfile humanoid) { - _previewPanel?.SetLoaded(false); + PreviewPanel.SetSprite(EntityUid.Invalid); + PreviewPanel.SetSummaryText(string.Empty); return; } - var maybeProfile = _profileEditor?.Profile ?? (HumanoidCharacterProfile) _preferencesManager.Preferences!.SelectedCharacter; + var dummy = LoadProfileEntity(humanoid, true); + PreviewPanel.SetSprite(dummy); + PreviewPanel.SetSummaryText(humanoid.Summary); + } - if (_previewDummy == null - || maybeProfile.Species != EntityManager.GetComponent(_previewDummy.Value).Species) - { - RespawnDummy(maybeProfile); - _previewPanel?.SetSprite(_previewDummy!.Value); - } + private void RefreshProfileEditor() + { + _profileEditor?.RefreshAntags(); + _profileEditor?.RefreshJobs(); + } - _previewPanel?.SetLoaded(true); + private void SaveProfile() + { + DebugTools.Assert(EditedProfile != null); - if (_previewDummy == null) + if (EditedProfile == null || EditedSlot == null) return; - _previewPanel?.SetSummaryText(maybeProfile.Summary); - _humanoid.LoadProfile(_previewDummy.Value, maybeProfile); + var selected = _preferencesManager.Preferences?.SelectedCharacterIndex; + if (selected == null) + return; + _preferencesManager.UpdateCharacter(EditedProfile, EditedSlot.Value); + ReloadCharacterSetup(); + } - if (UpdateClothes) + private (CharacterSetupGui, HumanoidProfileEditor) EnsureGui() + { + if (_characterSetup != null && _profileEditor != null) { - RemoveDummyClothes(_previewDummy.Value); - if (ShowClothes) - GiveDummyJobClothes(_previewDummy.Value, GetPreferredJob(maybeProfile), maybeProfile); - if (ShowLoadouts) - _loadouts.ApplyCharacterLoadout(_previewDummy.Value, GetPreferredJob(maybeProfile), maybeProfile, - _jobRequirements.GetRawPlayTimeTrackers(), _jobRequirements.IsWhitelisted()); - UpdateClothes = false; + _characterSetup.Visible = true; + _profileEditor.Visible = true; + return (_characterSetup, _profileEditor); } - PreviewDummyUpdated?.Invoke(_previewDummy.Value); - } + _profileEditor = new HumanoidProfileEditor( + _preferencesManager, + _configurationManager, + EntityManager, + _dialogManager, + _playerManager, + _prototypeManager, + _requirements, + _markings); + _characterSetup = new CharacterSetupGui(EntityManager, _prototypeManager, _resourceCache, _preferencesManager, _profileEditor); - public void RespawnDummy(HumanoidCharacterProfile profile) - { - if (_previewDummy != null) - RemoveDummyClothes(_previewDummy.Value); + _characterSetup.CloseButton.OnPressed += _ => + { + // Reset sliders etc. + _profileEditor.SetProfile(null, null); + _profileEditor.Visible = false; + if (_stateManager.CurrentState is LobbyState lobbyGui) + { + lobbyGui.SwitchState(LobbyGui.LobbyGuiState.Default); + } + }; + + _profileEditor.Save += SaveProfile; + + _characterSetup.SelectCharacter += args => + { + _preferencesManager.SelectCharacter(args); + ReloadCharacterSetup(); + }; + + _characterSetup.DeleteCharacter += args => + { + _preferencesManager.DeleteCharacter(args); - EntityManager.DeleteEntity(_previewDummy); - _previewDummy = EntityManager.SpawnEntity( - _prototypeManager.Index(profile.Species).DollPrototype, MapCoordinates.Nullspace); + if (EditedSlot == args) + // Reload everything + ReloadCharacterSetup(); + else + // Only need to reload character pickers + _characterSetup?.ReloadCharacterPickers(); + }; - UpdateClothes = true; + if (_stateManager.CurrentState is LobbyState lobby) + lobby.Lobby?.CharacterSetupState.AddChild(_characterSetup); + + return (_characterSetup, _profileEditor); } - /// - /// Gets the highest priority job for the profile. - /// + #region Helpers + + /// Gets the highest priority job for the profile. public JobPrototype GetPreferredJob(HumanoidCharacterProfile profile) { var highPriorityJob = profile.JobPriorities.FirstOrDefault(p => p.Value == JobPriority.High).Key; - // ReSharper disable once NullCoalescingConditionIsAlwaysNotNullAccordingToAPIContract (what is ReSharper smoking?) return _prototypeManager.Index(highPriorityJob ?? SharedGameTicker.FallbackOverflowJob); } @@ -166,9 +262,7 @@ public void RemoveDummyClothes(EntityUid dummy) EntityManager.DeleteEntity(unequippedItem.Value); } - /// - /// Applies the highest priority job's clothes and loadouts to the dummy. - /// + /// Applies the highest priority job's clothes and loadouts to the dummy. public void GiveDummyJobClothesLoadout(EntityUid dummy, HumanoidCharacterProfile profile) { var job = GetPreferredJob(profile); @@ -176,9 +270,7 @@ public void GiveDummyJobClothesLoadout(EntityUid dummy, HumanoidCharacterProfile _loadouts.ApplyCharacterLoadout(dummy, job, profile, _jobRequirements.GetRawPlayTimeTrackers(), _jobRequirements.IsWhitelisted()); } - /// - /// Applies the specified job's clothes to the dummy. - /// + /// Applies the specified job's clothes to the dummy. public void GiveDummyJobClothes(EntityUid dummy, JobPrototype job, HumanoidCharacterProfile profile) { if (!_inventory.TryGetSlots(dummy, out var slots) @@ -202,8 +294,28 @@ public void GiveDummyJobClothes(EntityUid dummy, JobPrototype job, HumanoidChara } } - public EntityUid? GetPreviewDummy() + /// Loads the profile onto a dummy entity + public EntityUid LoadProfileEntity(HumanoidCharacterProfile? humanoid, bool jobClothes) { - return _previewDummy; + EntityUid dummyEnt; + + if (humanoid is not null) + { + var dummy = _prototypeManager.Index(humanoid.Species).DollPrototype; + dummyEnt = EntityManager.SpawnEntity(dummy, MapCoordinates.Nullspace); + } + else + dummyEnt = EntityManager.SpawnEntity( + _prototypeManager.Index(DefaultSpecies).DollPrototype, + MapCoordinates.Nullspace); + + _humanoid.LoadProfile(dummyEnt, humanoid); + + if (humanoid != null && jobClothes) + GiveDummyJobClothesLoadout(dummyEnt, humanoid); + + return dummyEnt; } + + #endregion } diff --git a/Content.Client/Lobby/UI/CharacterPickerButton.xaml b/Content.Client/Lobby/UI/CharacterPickerButton.xaml new file mode 100644 index 00000000000..fa428b9b61f --- /dev/null +++ b/Content.Client/Lobby/UI/CharacterPickerButton.xaml @@ -0,0 +1,11 @@ + + + + + [GenerateTypedNameReferences] + public sealed partial class CharacterSetupGui : Control + { + private readonly IClientPreferencesManager _preferencesManager; + private readonly IEntityManager _entManager; + private readonly IPrototypeManager _protomanager; + + private readonly Button _createNewCharacterButton; + + public event Action? SelectCharacter; + public event Action? DeleteCharacter; + + public CharacterSetupGui( + IEntityManager entManager, + IPrototypeManager protoManager, + IResourceCache resourceCache, + IClientPreferencesManager preferencesManager, + HumanoidProfileEditor profileEditor) + { + RobustXamlLoader.Load(this); + _preferencesManager = preferencesManager; + _entManager = entManager; + _protomanager = protoManager; + + var panelTex = resourceCache.GetTexture("/Textures/Interface/Nano/button.svg.96dpi.png"); + var back = new StyleBoxTexture + { + Texture = panelTex, + Modulate = new Color(37, 37, 42) + }; + back.SetPatchMargin(StyleBox.Margin.All, 10); + + BackgroundPanel.PanelOverride = back; + + _createNewCharacterButton = new Button + { + Text = Loc.GetString("character-setup-gui-create-new-character-button"), + }; + + _createNewCharacterButton.OnPressed += args => + { + preferencesManager.CreateCharacter(HumanoidCharacterProfile.Random()); + ReloadCharacterPickers(); + args.Event.Handle(); + }; + + CharEditor.AddChild(profileEditor); + RulesButton.OnPressed += _ => new RulesAndInfoWindow().Open(); + + StatsButton.OnPressed += _ => new PlaytimeStatsWindow().OpenCentered(); + } + + /// + /// Disposes and reloads all character picker buttons from the preferences data. + /// + public void ReloadCharacterPickers() + { + _createNewCharacterButton.Orphan(); + Characters.DisposeAllChildren(); + + var numberOfFullSlots = 0; + var characterButtonsGroup = new ButtonGroup(); + + if (!_preferencesManager.ServerDataLoaded) + { + return; + } + + _createNewCharacterButton.ToolTip = + Loc.GetString("character-setup-gui-create-new-character-button-tooltip", + ("maxCharacters", _preferencesManager.Settings!.MaxCharacterSlots)); + + var selectedSlot = _preferencesManager.Preferences?.SelectedCharacterIndex; + + foreach (var (slot, character) in _preferencesManager.Preferences!.Characters) + { + numberOfFullSlots++; + var characterPickerButton = new CharacterPickerButton(_entManager, + _protomanager, + characterButtonsGroup, + character, + slot == selectedSlot); + + Characters.AddChild(characterPickerButton); + + characterPickerButton.OnPressed += args => + { + SelectCharacter?.Invoke(slot); + }; + + characterPickerButton.OnDeletePressed += () => + { + DeleteCharacter?.Invoke(slot); + }; + } + + _createNewCharacterButton.Disabled = numberOfFullSlots >= _preferencesManager.Settings.MaxCharacterSlots; + Characters.AddChild(_createNewCharacterButton); + } + } +} diff --git a/Content.Client/Preferences/UI/HighlightedContainer.xaml b/Content.Client/Lobby/UI/HighlightedContainer.xaml similarity index 100% rename from Content.Client/Preferences/UI/HighlightedContainer.xaml rename to Content.Client/Lobby/UI/HighlightedContainer.xaml diff --git a/Content.Client/Preferences/UI/HighlightedContainer.xaml.cs b/Content.Client/Lobby/UI/HighlightedContainer.xaml.cs similarity index 88% rename from Content.Client/Preferences/UI/HighlightedContainer.xaml.cs rename to Content.Client/Lobby/UI/HighlightedContainer.xaml.cs index 68294d0f059..084c1c37098 100644 --- a/Content.Client/Preferences/UI/HighlightedContainer.xaml.cs +++ b/Content.Client/Lobby/UI/HighlightedContainer.xaml.cs @@ -2,7 +2,7 @@ using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.XAML; -namespace Content.Client.Preferences.UI; +namespace Content.Client.Lobby.UI; [GenerateTypedNameReferences] public sealed partial class HighlightedContainer : PanelContainer diff --git a/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml b/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml new file mode 100644 index 00000000000..df364546ba8 --- /dev/null +++ b/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml @@ -0,0 +1,220 @@ + + + + + + + + + + + + + +public sealed class ColorTintOverlay : Overlay +{ + [Dependency] private readonly IPrototypeManager _prototype = default!; + [Dependency] private readonly IPlayerManager _player = default!; + [Dependency] IEntityManager _entityManager = default!; + + public override bool RequestScreenTexture => true; + public override OverlaySpace Space => OverlaySpace.WorldSpace; + private readonly ShaderInstance _shader; + + /// + /// The color to tint the screen to as RGB on a scale of 0-1. + /// + public Robust.Shared.Maths.Vector3? TintColor = null; + /// + /// The percent to tint the screen by on a scale of 0-1. + /// + public float? TintAmount = null; + + public ColorTintOverlay() + { + IoCManager.InjectDependencies(this); + _shader = _prototype.Index("ColorTint").InstanceUnique(); + } + + protected override bool BeforeDraw(in OverlayDrawArgs args) + { + if (_player.LocalEntity is not { Valid: true } player + || !_entityManager.HasComponent(player)) + return false; + + return base.BeforeDraw(in args); + } + protected override void Draw(in OverlayDrawArgs args) + { + if (ScreenTexture is null) + return; + + _shader.SetParameter("SCREEN_TEXTURE", ScreenTexture); + if (TintColor != null) + _shader.SetParameter("tint_color", (Robust.Shared.Maths.Vector3) TintColor); + if (TintAmount != null) + _shader.SetParameter("tint_amount", (float) TintAmount); + + var worldHandle = args.WorldHandle; + var viewport = args.WorldBounds; + worldHandle.SetTransform(Matrix3x2.Identity); + worldHandle.UseShader(_shader); + worldHandle.DrawRect(viewport, Color.White); + worldHandle.UseShader(null); + } +} diff --git a/Content.Client/Overlays/DogVisionOverlay.cs b/Content.Client/Overlays/DogVisionOverlay.cs index 91f5521f7ff..022a31d6969 100644 --- a/Content.Client/Overlays/DogVisionOverlay.cs +++ b/Content.Client/Overlays/DogVisionOverlay.cs @@ -1,3 +1,4 @@ +using System.Numerics; using Robust.Client.Graphics; using Robust.Client.Player; using Robust.Shared.Enums; @@ -41,7 +42,7 @@ protected override void Draw(in OverlayDrawArgs args) var worldHandle = args.WorldHandle; var viewport = args.WorldBounds; - worldHandle.SetTransform(Matrix3.Identity); + worldHandle.SetTransform(Matrix3x2.Identity); worldHandle.UseShader(_dogVisionShader); worldHandle.DrawRect(viewport, Color.White); worldHandle.UseShader(null); diff --git a/Content.Client/Overlays/DogVisionSystem.cs b/Content.Client/Overlays/DogVisionSystem.cs index 9eab2e09aff..5c80c307cb3 100644 --- a/Content.Client/Overlays/DogVisionSystem.cs +++ b/Content.Client/Overlays/DogVisionSystem.cs @@ -1,5 +1,5 @@ using Content.Shared.Traits.Assorted.Components; -using Content.Shared.DeltaV.CCVars; +using Content.Shared.CCVar; using Robust.Client.Graphics; using Robust.Shared.Configuration; using Robust.Shared.Player; @@ -23,7 +23,7 @@ public override void Initialize() SubscribeLocalEvent(OnPlayerAttached); SubscribeLocalEvent(OnPlayerDetached); - Subs.CVar(_cfg, DCCVars.NoVisionFilters, OnNoVisionFiltersChanged); + Subs.CVar(_cfg, CCVars.NoVisionFilters, OnNoVisionFiltersChanged); _overlay = new(); } @@ -33,7 +33,7 @@ private void OnDogVisionInit(EntityUid uid, DogVisionComponent component, Compon if (uid != _playerMan.LocalEntity) return; - if (!_cfg.GetCVar(DCCVars.NoVisionFilters)) + if (!_cfg.GetCVar(CCVars.NoVisionFilters)) _overlayMan.AddOverlay(_overlay); } @@ -47,7 +47,7 @@ private void OnDogVisionShutdown(EntityUid uid, DogVisionComponent component, Co private void OnPlayerAttached(EntityUid uid, DogVisionComponent component, LocalPlayerAttachedEvent args) { - if (!_cfg.GetCVar(DCCVars.NoVisionFilters)) + if (!_cfg.GetCVar(CCVars.NoVisionFilters)) _overlayMan.AddOverlay(_overlay); } diff --git a/Content.Client/Overlays/EntityHealthBarOverlay.cs b/Content.Client/Overlays/EntityHealthBarOverlay.cs index c1c0ae93ec1..c96225c0c65 100644 --- a/Content.Client/Overlays/EntityHealthBarOverlay.cs +++ b/Content.Client/Overlays/EntityHealthBarOverlay.cs @@ -43,8 +43,8 @@ protected override void Draw(in OverlayDrawArgs args) var xformQuery = _entManager.GetEntityQuery(); const float scale = 1f; - var scaleMatrix = Matrix3.CreateScale(new Vector2(scale, scale)); - var rotationMatrix = Matrix3.CreateRotation(-rotation); + var scaleMatrix = Matrix3Helpers.CreateScale(new Vector2(scale, scale)); + var rotationMatrix = Matrix3Helpers.CreateRotation(-rotation); var query = _entManager.AllEntityQueryEnumerator(); while (query.MoveNext(out var uid, @@ -80,10 +80,10 @@ protected override void Draw(in OverlayDrawArgs args) } var worldPosition = _transform.GetWorldPosition(xform); - var worldMatrix = Matrix3.CreateTranslation(worldPosition); + var worldMatrix = Matrix3Helpers.CreateTranslation(worldPosition); - Matrix3.Multiply(scaleMatrix, worldMatrix, out var scaledWorld); - Matrix3.Multiply(rotationMatrix, scaledWorld, out var matty); + var scaledWorld = Matrix3x2.Multiply(scaleMatrix, worldMatrix); + var matty = Matrix3x2.Multiply(rotationMatrix, scaledWorld); handle.SetTransform(matty); @@ -116,7 +116,7 @@ protected override void Draw(in OverlayDrawArgs args) handle.DrawRect(pixelDarken, Black.WithAlpha(128)); } - handle.SetTransform(Matrix3.Identity); + handle.SetTransform(Matrix3x2.Identity); } /// diff --git a/Content.Client/Overlays/EtherealOverlay.cs b/Content.Client/Overlays/EtherealOverlay.cs new file mode 100644 index 00000000000..594a3656c8e --- /dev/null +++ b/Content.Client/Overlays/EtherealOverlay.cs @@ -0,0 +1,49 @@ +using System.Numerics; +using Robust.Client.Graphics; +using Robust.Client.Player; +using Robust.Shared.Enums; +using Robust.Shared.Prototypes; +using Content.Shared.Shadowkin; + +namespace Content.Client.Overlays; + +public sealed class EtherealOverlay : Overlay +{ + [Dependency] private readonly IPrototypeManager _prototype = default!; + [Dependency] private readonly IPlayerManager _player = default!; + [Dependency] IEntityManager _entityManager = default!; + + public override bool RequestScreenTexture => true; + public override OverlaySpace Space => OverlaySpace.WorldSpaceBelowFOV; + private readonly ShaderInstance _shader; + + public EtherealOverlay() + { + IoCManager.InjectDependencies(this); + _shader = _prototype.Index("Ethereal").InstanceUnique(); + } + + protected override bool BeforeDraw(in OverlayDrawArgs args) + { + if (_player.LocalEntity is not { Valid: true } player + || !_entityManager.HasComponent(player)) + return false; + + return base.BeforeDraw(in args); + } + + protected override void Draw(in OverlayDrawArgs args) + { + if (ScreenTexture is null) + return; + + _shader.SetParameter("SCREEN_TEXTURE", ScreenTexture); + + var worldHandle = args.WorldHandle; + var viewport = args.WorldBounds; + worldHandle.SetTransform(Matrix3x2.Identity); + worldHandle.UseShader(_shader); + worldHandle.DrawRect(viewport, Color.White); + worldHandle.UseShader(null); + } +} diff --git a/Content.Client/Overlays/SaturationScaleOverlay.cs b/Content.Client/Overlays/SaturationScaleOverlay.cs index 50656d3bc1e..df19da4f77f 100644 --- a/Content.Client/Overlays/SaturationScaleOverlay.cs +++ b/Content.Client/Overlays/SaturationScaleOverlay.cs @@ -1,4 +1,5 @@ -using Robust.Client.Graphics; +using System.Numerics; +using Robust.Client.Graphics; using Robust.Client.Player; using Robust.Shared.Enums; using Robust.Shared.Prototypes; @@ -45,7 +46,7 @@ protected override void Draw(in OverlayDrawArgs args) _shader.SetParameter("saturation", Saturation); var handle = args.WorldHandle; - handle.SetTransform(Matrix3.Identity); + handle.SetTransform(Matrix3x2.Identity); handle.UseShader(_shader); handle.DrawRect(args.WorldBounds, Color.White); handle.UseShader(null); diff --git a/Content.Client/Overlays/ShowCriminalRecordIconsSystem.cs b/Content.Client/Overlays/ShowCriminalRecordIconsSystem.cs new file mode 100644 index 00000000000..8f23cd510cb --- /dev/null +++ b/Content.Client/Overlays/ShowCriminalRecordIconsSystem.cs @@ -0,0 +1,28 @@ +using Content.Shared.Overlays; +using Content.Shared.Security.Components; +using Content.Shared.StatusIcon; +using Content.Shared.StatusIcon.Components; +using Robust.Shared.Prototypes; + +namespace Content.Client.Overlays; + +public sealed class ShowCriminalRecordIconsSystem : EquipmentHudSystem +{ + [Dependency] private readonly IPrototypeManager _prototype = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnGetStatusIconsEvent); + } + + private void OnGetStatusIconsEvent(EntityUid uid, CriminalRecordComponent component, ref GetStatusIconsEvent ev) + { + if (!IsActive || ev.InContainer) + return; + + if (_prototype.TryIndex(component.StatusIcon.Id, out var iconPrototype)) + ev.StatusIcons.Add(iconPrototype); + } +} diff --git a/Content.Client/Overlays/ShowHungerIconsSystem.cs b/Content.Client/Overlays/ShowHungerIconsSystem.cs index 58551b30c26..b1c0f3a1a0c 100644 --- a/Content.Client/Overlays/ShowHungerIconsSystem.cs +++ b/Content.Client/Overlays/ShowHungerIconsSystem.cs @@ -1,14 +1,13 @@ +using Content.Shared.Nutrition.EntitySystems; using Content.Shared.Nutrition.Components; using Content.Shared.Overlays; -using Content.Shared.StatusIcon; using Content.Shared.StatusIcon.Components; -using Robust.Shared.Prototypes; namespace Content.Client.Overlays; public sealed class ShowHungerIconsSystem : EquipmentHudSystem { - [Dependency] private readonly IPrototypeManager _prototypeMan = default!; + [Dependency] private readonly HungerSystem _hunger = default!; public override void Initialize() { @@ -17,42 +16,12 @@ public override void Initialize() SubscribeLocalEvent(OnGetStatusIconsEvent); } - private void OnGetStatusIconsEvent(EntityUid uid, HungerComponent hungerComponent, ref GetStatusIconsEvent args) + private void OnGetStatusIconsEvent(EntityUid uid, HungerComponent component, ref GetStatusIconsEvent ev) { - if (!IsActive || args.InContainer) + if (!IsActive || ev.InContainer) return; - var hungerIcons = DecideHungerIcon(uid, hungerComponent); - - args.StatusIcons.AddRange(hungerIcons); - } - - private IReadOnlyList DecideHungerIcon(EntityUid uid, HungerComponent hungerComponent) - { - var result = new List(); - - switch (hungerComponent.CurrentThreshold) - { - case HungerThreshold.Overfed: - if (_prototypeMan.TryIndex("HungerIconOverfed", out var overfed)) - { - result.Add(overfed); - } - break; - case HungerThreshold.Peckish: - if (_prototypeMan.TryIndex("HungerIconPeckish", out var peckish)) - { - result.Add(peckish); - } - break; - case HungerThreshold.Starving: - if (_prototypeMan.TryIndex("HungerIconStarving", out var starving)) - { - result.Add(starving); - } - break; - } - - return result; + if (_hunger.TryGetStatusIconPrototype(component, out var iconPrototype)) + ev.StatusIcons.Add(iconPrototype); } } diff --git a/Content.Client/Overlays/ShowJobIconsSystem.cs b/Content.Client/Overlays/ShowJobIconsSystem.cs new file mode 100644 index 00000000000..e24b99f3e87 --- /dev/null +++ b/Content.Client/Overlays/ShowJobIconsSystem.cs @@ -0,0 +1,60 @@ +using Content.Shared.Access.Components; +using Content.Shared.Access.Systems; +using Content.Shared.Overlays; +using Content.Shared.PDA; +using Content.Shared.StatusIcon; +using Content.Shared.StatusIcon.Components; +using Robust.Shared.Prototypes; + +namespace Content.Client.Overlays; + +public sealed class ShowJobIconsSystem : EquipmentHudSystem +{ + [Dependency] private readonly IPrototypeManager _prototype = default!; + [Dependency] private readonly AccessReaderSystem _accessReader = default!; + + [ValidatePrototypeId] + private const string JobIconForNoId = "JobIconNoId"; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnGetStatusIconsEvent); + } + + private void OnGetStatusIconsEvent(EntityUid uid, StatusIconComponent _, ref GetStatusIconsEvent ev) + { + if (!IsActive || ev.InContainer) + return; + + var iconId = JobIconForNoId; + + if (_accessReader.FindAccessItemsInventory(uid, out var items)) + { + foreach (var item in items) + { + // ID Card + if (TryComp(item, out var id)) + { + iconId = id.JobIcon; + break; + } + + // PDA + if (TryComp(item, out var pda) + && pda.ContainedId != null + && TryComp(pda.ContainedId, out id)) + { + iconId = id.JobIcon; + break; + } + } + } + + if (_prototype.TryIndex(iconId, out var iconPrototype)) + ev.StatusIcons.Add(iconPrototype); + else + Log.Error($"Invalid job icon prototype: {iconPrototype}"); + } +} diff --git a/Content.Client/Overlays/ShowMindShieldIconsSystem.cs b/Content.Client/Overlays/ShowMindShieldIconsSystem.cs new file mode 100644 index 00000000000..8bf39b875f6 --- /dev/null +++ b/Content.Client/Overlays/ShowMindShieldIconsSystem.cs @@ -0,0 +1,28 @@ +using Content.Shared.Mindshield.Components; +using Content.Shared.Overlays; +using Content.Shared.StatusIcon; +using Content.Shared.StatusIcon.Components; +using Robust.Shared.Prototypes; + +namespace Content.Client.Overlays; + +public sealed class ShowMindShieldIconsSystem : EquipmentHudSystem +{ + [Dependency] private readonly IPrototypeManager _prototype = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnGetStatusIconsEvent); + } + + private void OnGetStatusIconsEvent(EntityUid uid, MindShieldComponent component, ref GetStatusIconsEvent ev) + { + if (!IsActive || ev.InContainer) + return; + + if (_prototype.TryIndex(component.MindShieldStatusIcon.Id, out var iconPrototype)) + ev.StatusIcons.Add(iconPrototype); + } +} diff --git a/Content.Client/Overlays/ShowSecurityIconsSystem.cs b/Content.Client/Overlays/ShowSecurityIconsSystem.cs deleted file mode 100644 index 7a4abd05e00..00000000000 --- a/Content.Client/Overlays/ShowSecurityIconsSystem.cs +++ /dev/null @@ -1,86 +0,0 @@ -using Content.Shared.Access.Components; -using Content.Shared.Access.Systems; -using Content.Shared.Mindshield.Components; -using Content.Shared.Overlays; -using Content.Shared.PDA; -using Content.Shared.Security.Components; -using Content.Shared.StatusIcon; -using Content.Shared.StatusIcon.Components; -using Robust.Shared.Prototypes; - -namespace Content.Client.Overlays; - -public sealed class ShowSecurityIconsSystem : EquipmentHudSystem -{ - [Dependency] private readonly IPrototypeManager _prototypeMan = default!; - [Dependency] private readonly AccessReaderSystem _accessReader = default!; - - [ValidatePrototypeId] - private const string JobIconForNoId = "JobIconNoId"; - - public override void Initialize() - { - base.Initialize(); - - SubscribeLocalEvent(OnGetStatusIconsEvent); - } - - private void OnGetStatusIconsEvent(EntityUid uid, StatusIconComponent _, ref GetStatusIconsEvent @event) - { - if (!IsActive || @event.InContainer) - { - return; - } - - var securityIcons = DecideSecurityIcon(uid); - - @event.StatusIcons.AddRange(securityIcons); - } - - private IReadOnlyList DecideSecurityIcon(EntityUid uid) - { - var result = new List(); - - var jobIconToGet = JobIconForNoId; - if (_accessReader.FindAccessItemsInventory(uid, out var items)) - { - foreach (var item in items) - { - // ID Card - if (TryComp(item, out IdCardComponent? id)) - { - jobIconToGet = id.JobIcon; - break; - } - - // PDA - if (TryComp(item, out PdaComponent? pda) - && pda.ContainedId != null - && TryComp(pda.ContainedId, out id)) - { - jobIconToGet = id.JobIcon; - break; - } - } - } - - if (_prototypeMan.TryIndex(jobIconToGet, out var jobIcon)) - result.Add(jobIcon); - else - Log.Error($"Invalid job icon prototype: {jobIcon}"); - - if (TryComp(uid, out var comp)) - { - if (_prototypeMan.TryIndex(comp.MindShieldStatusIcon.Id, out var icon)) - result.Add(icon); - } - - if (TryComp(uid, out var record)) - { - if(_prototypeMan.TryIndex(record.StatusIcon.Id, out var criminalIcon)) - result.Add(criminalIcon); - } - - return result; - } -} diff --git a/Content.Client/Overlays/ShowSyndicateIconsSystem.cs b/Content.Client/Overlays/ShowSyndicateIconsSystem.cs index a6407266853..660ef198e14 100644 --- a/Content.Client/Overlays/ShowSyndicateIconsSystem.cs +++ b/Content.Client/Overlays/ShowSyndicateIconsSystem.cs @@ -1,10 +1,11 @@ using Content.Shared.Overlays; -using Content.Shared.StatusIcon.Components; using Content.Shared.NukeOps; using Content.Shared.StatusIcon; +using Content.Shared.StatusIcon.Components; using Robust.Shared.Prototypes; namespace Content.Client.Overlays; + public sealed class ShowSyndicateIconsSystem : EquipmentHudSystem { [Dependency] private readonly IPrototypeManager _prototype = default!; @@ -16,28 +17,13 @@ public override void Initialize() SubscribeLocalEvent(OnGetStatusIconsEvent); } - private void OnGetStatusIconsEvent(EntityUid uid, NukeOperativeComponent nukeOperativeComponent, ref GetStatusIconsEvent args) + private void OnGetStatusIconsEvent(EntityUid uid, NukeOperativeComponent component, ref GetStatusIconsEvent ev) { - if (!IsActive || args.InContainer) - { + if (!IsActive || ev.InContainer) return; - } - - var syndicateIcons = SyndicateIcon(uid, nukeOperativeComponent); - - args.StatusIcons.AddRange(syndicateIcons); - } - - private IReadOnlyList SyndicateIcon(EntityUid uid, NukeOperativeComponent nukeOperativeComponent) - { - var result = new List(); - - if (_prototype.TryIndex(nukeOperativeComponent.SyndStatusIcon, out var syndicateicon)) - { - result.Add(syndicateicon); - } - return result; + if (_prototype.TryIndex(component.SyndStatusIcon, out var iconPrototype)) + ev.StatusIcons.Add(iconPrototype); } } diff --git a/Content.Client/Overlays/ShowThirstIconsSystem.cs b/Content.Client/Overlays/ShowThirstIconsSystem.cs index f9d6d0ab259..b08aa4340b2 100644 --- a/Content.Client/Overlays/ShowThirstIconsSystem.cs +++ b/Content.Client/Overlays/ShowThirstIconsSystem.cs @@ -1,14 +1,13 @@ +using Content.Shared.Nutrition.EntitySystems; using Content.Shared.Nutrition.Components; using Content.Shared.Overlays; -using Content.Shared.StatusIcon; using Content.Shared.StatusIcon.Components; -using Robust.Shared.Prototypes; namespace Content.Client.Overlays; public sealed class ShowThirstIconsSystem : EquipmentHudSystem { - [Dependency] private readonly IPrototypeManager _prototypeMan = default!; + [Dependency] private readonly ThirstSystem _thirst = default!; public override void Initialize() { @@ -17,42 +16,12 @@ public override void Initialize() SubscribeLocalEvent(OnGetStatusIconsEvent); } - private void OnGetStatusIconsEvent(EntityUid uid, ThirstComponent thirstComponent, ref GetStatusIconsEvent args) + private void OnGetStatusIconsEvent(EntityUid uid, ThirstComponent component, ref GetStatusIconsEvent ev) { - if (!IsActive || args.InContainer) + if (!IsActive || ev.InContainer) return; - var thirstIcons = DecideThirstIcon(uid, thirstComponent); - - args.StatusIcons.AddRange(thirstIcons); - } - - private IReadOnlyList DecideThirstIcon(EntityUid uid, ThirstComponent thirstComponent) - { - var result = new List(); - - switch (thirstComponent.CurrentThirstThreshold) - { - case ThirstThreshold.OverHydrated: - if (_prototypeMan.TryIndex("ThirstIconOverhydrated", out var overhydrated)) - { - result.Add(overhydrated); - } - break; - case ThirstThreshold.Thirsty: - if (_prototypeMan.TryIndex("ThirstIconThirsty", out var thirsty)) - { - result.Add(thirsty); - } - break; - case ThirstThreshold.Parched: - if (_prototypeMan.TryIndex("ThirstIconParched", out var parched)) - { - result.Add(parched); - } - break; - } - - return result; + if (_thirst.TryGetStatusIconPrototype(component, out var iconPrototype)) + ev.StatusIcons.Add(iconPrototype!); } } diff --git a/Content.Client/Overlays/StencilOverlay.RestrictedRange.cs b/Content.Client/Overlays/StencilOverlay.RestrictedRange.cs index 9581fec37b7..d29564caa93 100644 --- a/Content.Client/Overlays/StencilOverlay.RestrictedRange.cs +++ b/Content.Client/Overlays/StencilOverlay.RestrictedRange.cs @@ -7,7 +7,7 @@ namespace Content.Client.Overlays; public sealed partial class StencilOverlay { - private void DrawRestrictedRange(in OverlayDrawArgs args, RestrictedRangeComponent rangeComp, Matrix3 invMatrix) + private void DrawRestrictedRange(in OverlayDrawArgs args, RestrictedRangeComponent rangeComp, Matrix3x2 invMatrix) { var worldHandle = args.WorldHandle; var renderScale = args.Viewport.RenderScale.X; @@ -16,7 +16,7 @@ private void DrawRestrictedRange(in OverlayDrawArgs args, RestrictedRangeCompone var length = zoom.X; var bufferRange = MathF.Min(10f, rangeComp.Range); - var pixelCenter = invMatrix.Transform(rangeComp.Origin); + var pixelCenter = Vector2.Transform(rangeComp.Origin, invMatrix); // Something something offset? var vertical = args.Viewport.Size.Y; @@ -44,7 +44,7 @@ private void DrawRestrictedRange(in OverlayDrawArgs args, RestrictedRangeCompone worldHandle.DrawRect(localAABB, Color.White); }, Color.Transparent); - worldHandle.SetTransform(Matrix3.Identity); + worldHandle.SetTransform(Matrix3x2.Identity); worldHandle.UseShader(_protoManager.Index("StencilMask").Instance()); worldHandle.DrawTextureRect(_blep!.Texture, worldBounds); var curTime = _timing.RealTime; diff --git a/Content.Client/Overlays/StencilOverlay.Weather.cs b/Content.Client/Overlays/StencilOverlay.Weather.cs index 19ee75f05fc..c8ce8978319 100644 --- a/Content.Client/Overlays/StencilOverlay.Weather.cs +++ b/Content.Client/Overlays/StencilOverlay.Weather.cs @@ -10,7 +10,7 @@ public sealed partial class StencilOverlay { private List> _grids = new(); - private void DrawWeather(in OverlayDrawArgs args, WeatherPrototype weatherProto, float alpha, Matrix3 invMatrix) + private void DrawWeather(in OverlayDrawArgs args, WeatherPrototype weatherProto, float alpha, Matrix3x2 invMatrix) { if (weatherProto.Sprite == null) return; @@ -34,7 +34,7 @@ private void DrawWeather(in OverlayDrawArgs args, WeatherPrototype weatherProto, foreach (var grid in _grids) { var matrix = _transform.GetWorldMatrix(grid, xformQuery); - Matrix3.Multiply(in matrix, in invMatrix, out var matty); + var matty = Matrix3x2.Multiply(matrix, invMatrix); worldHandle.SetTransform(matty); foreach (var tile in grid.Comp.GetTilesIntersecting(worldAABB)) @@ -54,7 +54,7 @@ private void DrawWeather(in OverlayDrawArgs args, WeatherPrototype weatherProto, }, Color.Transparent); - worldHandle.SetTransform(Matrix3.Identity); + worldHandle.SetTransform(Matrix3x2.Identity); worldHandle.UseShader(_protoManager.Index("StencilMask").Instance()); worldHandle.DrawTextureRect(_blep!.Texture, worldBounds); var curTime = _timing.RealTime; @@ -64,7 +64,7 @@ private void DrawWeather(in OverlayDrawArgs args, WeatherPrototype weatherProto, worldHandle.UseShader(_protoManager.Index("StencilDraw").Instance()); _parallax.DrawParallax(worldHandle, worldAABB, sprite, curTime, position, Vector2.Zero, modulate: (weatherProto.Color ?? Color.White).WithAlpha(alpha)); - worldHandle.SetTransform(Matrix3.Identity); + worldHandle.SetTransform(Matrix3x2.Identity); worldHandle.UseShader(null); } } diff --git a/Content.Client/Overlays/StencilOverlay.cs b/Content.Client/Overlays/StencilOverlay.cs index 04c12a6ab2c..abf4fa2b969 100644 --- a/Content.Client/Overlays/StencilOverlay.cs +++ b/Content.Client/Overlays/StencilOverlay.cs @@ -1,3 +1,4 @@ +using System.Numerics; using Content.Client.Parallax; using Content.Client.Weather; using Content.Shared.Salvage; @@ -73,6 +74,6 @@ protected override void Draw(in OverlayDrawArgs args) } args.WorldHandle.UseShader(null); - args.WorldHandle.SetTransform(Matrix3.Identity); + args.WorldHandle.SetTransform(Matrix3x2.Identity); } } diff --git a/Content.Client/Overlays/UltraVisionOverlay.cs b/Content.Client/Overlays/UltraVisionOverlay.cs index fe9317e3650..a12aa94ea83 100644 --- a/Content.Client/Overlays/UltraVisionOverlay.cs +++ b/Content.Client/Overlays/UltraVisionOverlay.cs @@ -1,3 +1,4 @@ +using System.Numerics; using Robust.Client.Graphics; using Robust.Client.Player; using Robust.Shared.Enums; @@ -41,7 +42,7 @@ protected override void Draw(in OverlayDrawArgs args) var worldHandle = args.WorldHandle; var viewport = args.WorldBounds; - worldHandle.SetTransform(Matrix3.Identity); + worldHandle.SetTransform(Matrix3x2.Identity); worldHandle.UseShader(_ultraVisionShader); worldHandle.DrawRect(viewport, Color.White); worldHandle.UseShader(null); diff --git a/Content.Client/Overlays/UltraVisionSystem.cs b/Content.Client/Overlays/UltraVisionSystem.cs index 7728a647848..e8e6cdfa72b 100644 --- a/Content.Client/Overlays/UltraVisionSystem.cs +++ b/Content.Client/Overlays/UltraVisionSystem.cs @@ -1,5 +1,5 @@ using Content.Shared.Traits.Assorted.Components; -using Content.Shared.DeltaV.CCVars; +using Content.Shared.CCVar; using Robust.Client.Graphics; using Robust.Shared.Configuration; using Robust.Shared.Player; @@ -23,7 +23,7 @@ public override void Initialize() SubscribeLocalEvent(OnPlayerAttached); SubscribeLocalEvent(OnPlayerDetached); - Subs.CVar(_cfg, DCCVars.NoVisionFilters, OnNoVisionFiltersChanged); + Subs.CVar(_cfg, CCVars.NoVisionFilters, OnNoVisionFiltersChanged); _overlay = new(); } @@ -33,7 +33,7 @@ private void OnUltraVisionInit(EntityUid uid, UltraVisionComponent component, Co if (uid != _playerMan.LocalEntity) return; - if (!_cfg.GetCVar(DCCVars.NoVisionFilters)) + if (!_cfg.GetCVar(CCVars.NoVisionFilters)) _overlayMan.AddOverlay(_overlay); } @@ -47,7 +47,7 @@ private void OnUltraVisionShutdown(EntityUid uid, UltraVisionComponent component private void OnPlayerAttached(EntityUid uid, UltraVisionComponent component, LocalPlayerAttachedEvent args) { - if (!_cfg.GetCVar(DCCVars.NoVisionFilters)) + if (!_cfg.GetCVar(CCVars.NoVisionFilters)) _overlayMan.AddOverlay(_overlay); } diff --git a/Content.Client/PDA/PdaBoundUserInterface.cs b/Content.Client/PDA/PdaBoundUserInterface.cs index ef9d6e8b9be..07352b512b0 100644 --- a/Content.Client/PDA/PdaBoundUserInterface.cs +++ b/Content.Client/PDA/PdaBoundUserInterface.cs @@ -21,7 +21,6 @@ public PdaBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey) protected override void Open() { base.Open(); - SendMessage(new PdaRequestUpdateInterfaceMessage()); _menu = new PdaMenu(); _menu.OpenCenteredLeft(); _menu.OnClose += Close; @@ -32,17 +31,17 @@ protected override void Open() _menu.EjectIdButton.OnPressed += _ => { - SendMessage(new ItemSlotButtonPressedEvent(PdaComponent.PdaIdSlotId)); + SendPredictedMessage(new ItemSlotButtonPressedEvent(PdaComponent.PdaIdSlotId)); }; _menu.EjectPenButton.OnPressed += _ => { - SendMessage(new ItemSlotButtonPressedEvent(PdaComponent.PdaPenSlotId)); + SendPredictedMessage(new ItemSlotButtonPressedEvent(PdaComponent.PdaPenSlotId)); }; _menu.EjectPaiButton.OnPressed += _ => { - SendMessage(new ItemSlotButtonPressedEvent(PdaComponent.PdaPaiSlotId)); + SendPredictedMessage(new ItemSlotButtonPressedEvent(PdaComponent.PdaPaiSlotId)); }; _menu.ActivateMusicButton.OnPressed += _ => diff --git a/Content.Client/Paper/PaperComponent.cs b/Content.Client/Paper/PaperComponent.cs index d197cd3721b..1dc827bf7e6 100644 --- a/Content.Client/Paper/PaperComponent.cs +++ b/Content.Client/Paper/PaperComponent.cs @@ -1,9 +1,6 @@ using Content.Shared.Paper; -using Robust.Shared.GameStates; namespace Content.Client.Paper; -[NetworkedComponent, RegisterComponent] -public sealed partial class PaperComponent : SharedPaperComponent -{ -} +[RegisterComponent] +public sealed partial class PaperComponent : SharedPaperComponent; diff --git a/Content.Client/Paper/UI/StampLabel.xaml.cs b/Content.Client/Paper/UI/StampLabel.xaml.cs index 6a8eb5f98f9..be6d52baeaf 100644 --- a/Content.Client/Paper/UI/StampLabel.xaml.cs +++ b/Content.Client/Paper/UI/StampLabel.xaml.cs @@ -50,7 +50,7 @@ protected override void Draw(DrawingHandleScreen handle) base.Draw(handle); // Restore a sane transform+shader - handle.SetTransform(Matrix3.Identity); + handle.SetTransform(Matrix3x2.Identity); handle.UseShader(null); } } diff --git a/Content.Client/Paper/UI/StampWidget.xaml.cs b/Content.Client/Paper/UI/StampWidget.xaml.cs index a04508aeba3..487e0732b46 100644 --- a/Content.Client/Paper/UI/StampWidget.xaml.cs +++ b/Content.Client/Paper/UI/StampWidget.xaml.cs @@ -53,7 +53,7 @@ protected override void Draw(DrawingHandleScreen handle) base.Draw(handle); // Restore a sane transform+shader - handle.SetTransform(Matrix3.Identity); + handle.SetTransform(Matrix3x2.Identity); handle.UseShader(null); } } diff --git a/Content.Client/Pinpointer/NavMapSystem.cs b/Content.Client/Pinpointer/NavMapSystem.cs index bd7dfc1117f..9aeb792a429 100644 --- a/Content.Client/Pinpointer/NavMapSystem.cs +++ b/Content.Client/Pinpointer/NavMapSystem.cs @@ -1,109 +1,63 @@ -using System.Numerics; using Content.Shared.Pinpointer; -using Robust.Client.Graphics; -using Robust.Shared.Enums; using Robust.Shared.GameStates; -using Robust.Shared.Map; -using Robust.Shared.Map.Components; namespace Content.Client.Pinpointer; -public sealed class NavMapSystem : SharedNavMapSystem +public sealed partial class NavMapSystem : SharedNavMapSystem { public override void Initialize() { base.Initialize(); + SubscribeLocalEvent(OnHandleState); } private void OnHandleState(EntityUid uid, NavMapComponent component, ref ComponentHandleState args) { - if (args.Current is not NavMapComponentState state) - return; - - component.Chunks.Clear(); + Dictionary modifiedChunks; + Dictionary beacons; - foreach (var (origin, data) in state.TileData) + switch (args.Current) { - component.Chunks.Add(origin, new NavMapChunk(origin) + case NavMapDeltaState delta: { - TileData = data, - }); - } - - component.Beacons.Clear(); - component.Beacons.AddRange(state.Beacons); - - component.Airlocks.Clear(); - component.Airlocks.AddRange(state.Airlocks); - } -} - -public sealed class NavMapOverlay : Overlay -{ - private readonly IEntityManager _entManager; - private readonly IMapManager _mapManager; - - public override OverlaySpace Space => OverlaySpace.WorldSpace; - - private List> _grids = new(); - - public NavMapOverlay(IEntityManager entManager, IMapManager mapManager) - { - _entManager = entManager; - _mapManager = mapManager; - } - - protected override void Draw(in OverlayDrawArgs args) - { - var query = _entManager.GetEntityQuery(); - var xformQuery = _entManager.GetEntityQuery(); - var scale = Matrix3.CreateScale(new Vector2(1f, 1f)); - - _grids.Clear(); - _mapManager.FindGridsIntersecting(args.MapId, args.WorldBounds, ref _grids); - - foreach (var grid in _grids) - { - if (!query.TryGetComponent(grid, out var navMap) || !xformQuery.TryGetComponent(grid.Owner, out var xform)) - continue; - - // TODO: Faster helper method - var (_, _, matrix, invMatrix) = xform.GetWorldPositionRotationMatrixWithInv(); - - var localAABB = invMatrix.TransformBox(args.WorldBounds); - Matrix3.Multiply(in scale, in matrix, out var matty); - - args.WorldHandle.SetTransform(matty); + modifiedChunks = delta.ModifiedChunks; + beacons = delta.Beacons; + foreach (var index in component.Chunks.Keys) + { + if (!delta.AllChunks!.Contains(index)) + component.Chunks.Remove(index); + } - for (var x = Math.Floor(localAABB.Left); x <= Math.Ceiling(localAABB.Right); x += SharedNavMapSystem.ChunkSize * grid.Comp.TileSize) + break; + } + case NavMapState state: { - for (var y = Math.Floor(localAABB.Bottom); y <= Math.Ceiling(localAABB.Top); y += SharedNavMapSystem.ChunkSize * grid.Comp.TileSize) + modifiedChunks = state.Chunks; + beacons = state.Beacons; + foreach (var index in component.Chunks.Keys) { - var floored = new Vector2i((int) x, (int) y); - - var chunkOrigin = SharedMapSystem.GetChunkIndices(floored, SharedNavMapSystem.ChunkSize); - - if (!navMap.Chunks.TryGetValue(chunkOrigin, out var chunk)) - continue; - - // TODO: Okay maybe I should just use ushorts lmao... - for (var i = 0; i < SharedNavMapSystem.ChunkSize * SharedNavMapSystem.ChunkSize; i++) - { - var value = (int) Math.Pow(2, i); - - var mask = chunk.TileData & value; - - if (mask == 0x0) - continue; - - var tile = chunk.Origin * SharedNavMapSystem.ChunkSize + SharedNavMapSystem.GetTile(mask); - args.WorldHandle.DrawRect(new Box2(tile * grid.Comp.TileSize, (tile + 1) * grid.Comp.TileSize), Color.Aqua, false); - } + if (!state.Chunks.ContainsKey(index)) + component.Chunks.Remove(index); } + + break; } + default: + return; } - args.WorldHandle.SetTransform(Matrix3.Identity); + foreach (var (origin, chunk) in modifiedChunks) + { + var newChunk = new NavMapChunk(origin); + Array.Copy(chunk, newChunk.TileData, chunk.Length); + component.Chunks[origin] = newChunk; + } + + component.Beacons.Clear(); + foreach (var (nuid, beacon) in beacons) + { + component.Beacons[nuid] = beacon; + } } } diff --git a/Content.Client/Pinpointer/UI/NavMapControl.cs b/Content.Client/Pinpointer/UI/NavMapControl.cs index 677092e1918..3c99a188181 100644 --- a/Content.Client/Pinpointer/UI/NavMapControl.cs +++ b/Content.Client/Pinpointer/UI/NavMapControl.cs @@ -16,6 +16,9 @@ using Robust.Shared.Timing; using System.Numerics; using JetBrains.Annotations; +using Content.Shared.Atmos; +using System.Linq; +using Robust.Shared.Utility; namespace Content.Client.Pinpointer.UI; @@ -27,6 +30,7 @@ public partial class NavMapControl : MapGridControl { [Dependency] private IResourceCache _cache = default!; private readonly SharedTransformSystem _transformSystem; + private readonly SharedNavMapSystem _navMapSystem; public EntityUid? Owner; public EntityUid? MapUid; @@ -40,7 +44,10 @@ public partial class NavMapControl : MapGridControl // Tracked data public Dictionary TrackedCoordinates = new(); public Dictionary TrackedEntities = new(); - public Dictionary>? TileGrid = default!; + + public List<(Vector2, Vector2)> TileLines = new(); + public List<(Vector2, Vector2)> TileRects = new(); + public List<(Vector2[], Color)> TilePolygons = new(); // Default colors public Color WallColor = new(102, 217, 102); @@ -53,14 +60,23 @@ public partial class NavMapControl : MapGridControl protected static float MinDisplayedRange = 8f; protected static float MaxDisplayedRange = 128f; protected static float DefaultDisplayedRange = 48f; + protected float MinmapScaleModifier = 0.075f; + protected float FullWallInstep = 0.165f; + protected float ThinWallThickness = 0.165f; + protected float ThinDoorThickness = 0.30f; // Local variables - private float _updateTimer = 0.25f; + private float _updateTimer = 1.0f; private Dictionary _sRGBLookUp = new(); protected Color BackgroundColor; protected float BackgroundOpacity = 0.9f; private int _targetFontsize = 8; + private Dictionary _horizLines = new(); + private Dictionary _horizLinesReversed = new(); + private Dictionary _vertLines = new(); + private Dictionary _vertLinesReversed = new(); + // Components private NavMapComponent? _navMap; private MapGridComponent? _grid; @@ -72,6 +88,7 @@ public partial class NavMapControl : MapGridControl private readonly Label _zoom = new() { VerticalAlignment = VAlignment.Top, + HorizontalExpand = true, Margin = new Thickness(8f, 8f), }; @@ -80,6 +97,7 @@ public partial class NavMapControl : MapGridControl Text = Loc.GetString("navmap-recenter"), VerticalAlignment = VAlignment.Top, HorizontalAlignment = HAlignment.Right, + HorizontalExpand = true, Margin = new Thickness(8f, 4f), Disabled = true, }; @@ -87,9 +105,10 @@ public partial class NavMapControl : MapGridControl private readonly CheckBox _beacons = new() { Text = Loc.GetString("navmap-toggle-beacons"), - Margin = new Thickness(4f, 0f), VerticalAlignment = VAlignment.Center, HorizontalAlignment = HAlignment.Center, + HorizontalExpand = true, + Margin = new Thickness(4f, 0f), Pressed = true, }; @@ -98,6 +117,8 @@ public NavMapControl() : base(MinDisplayedRange, MaxDisplayedRange, DefaultDispl IoCManager.InjectDependencies(this); _transformSystem = EntManager.System(); + _navMapSystem = EntManager.System(); + BackgroundColor = Color.FromSrgb(TileColor.WithAlpha(BackgroundOpacity)); RectClipContent = true; @@ -112,6 +133,8 @@ public NavMapControl() : base(MinDisplayedRange, MaxDisplayedRange, DefaultDispl BorderColor = StyleNano.PanelDark }, VerticalExpand = false, + HorizontalExpand = true, + SetWidth = 650f, Children = { new BoxContainer() @@ -130,6 +153,7 @@ public NavMapControl() : base(MinDisplayedRange, MaxDisplayedRange, DefaultDispl var topContainer = new BoxContainer() { Orientation = BoxContainer.LayoutOrientation.Vertical, + HorizontalExpand = true, Children = { topPanel, @@ -157,6 +181,9 @@ public void ForceNavMapUpdate() { EntManager.TryGetComponent(MapUid, out _navMap); EntManager.TryGetComponent(MapUid, out _grid); + EntManager.TryGetComponent(MapUid, out _xform); + EntManager.TryGetComponent(MapUid, out _physics); + EntManager.TryGetComponent(MapUid, out _fixtures); UpdateNavMap(); } @@ -191,7 +218,7 @@ protected override void KeyBindUp(GUIBoundKeyEventArgs args) // Convert to a world position var unscaledPosition = (localPosition - MidPointVector) / MinimapScale; - var worldPosition = _transformSystem.GetWorldMatrix(_xform).Transform(new Vector2(unscaledPosition.X, -unscaledPosition.Y) + offset); + var worldPosition = Vector2.Transform(new Vector2(unscaledPosition.X, -unscaledPosition.Y) + offset, _transformSystem.GetWorldMatrix(_xform)); // Find closest tracked entity in range var closestEntity = NetEntity.Invalid; @@ -251,119 +278,93 @@ protected override void Draw(DrawingHandleScreen handle) EntManager.TryGetComponent(MapUid, out _physics); EntManager.TryGetComponent(MapUid, out _fixtures); + if (_navMap == null || _grid == null || _xform == null) + return; + // Map re-centering _recenter.Disabled = DrawRecenter(); - _zoom.Text = Loc.GetString("navmap-zoom", ("value", $"{(DefaultDisplayedRange / WorldRange ):0.0}")); - - if (_navMap == null || _xform == null) - return; + // Update zoom text + _zoom.Text = Loc.GetString("navmap-zoom", ("value", $"{(DefaultDisplayedRange / WorldRange):0.0}")); + // Update offset with physics local center var offset = Offset; if (_physics != null) offset += _physics.LocalCenter; - // Draw tiles - if (_fixtures != null) + var offsetVec = new Vector2(offset.X, -offset.Y); + + // Wall sRGB + if (!_sRGBLookUp.TryGetValue(WallColor, out var wallsRGB)) + { + wallsRGB = Color.ToSrgb(WallColor); + _sRGBLookUp[WallColor] = wallsRGB; + } + + // Draw floor tiles + if (TilePolygons.Any()) { Span verts = new Vector2[8]; - foreach (var fixture in _fixtures.Fixtures.Values) + foreach (var (polygonVerts, polygonColor) in TilePolygons) { - if (fixture.Shape is not PolygonShape poly) - continue; - - for (var i = 0; i < poly.VertexCount; i++) + for (var i = 0; i < polygonVerts.Length; i++) { - var vert = poly.Vertices[i] - offset; - + var vert = polygonVerts[i] - offset; verts[i] = ScalePosition(new Vector2(vert.X, -vert.Y)); } - handle.DrawPrimitives(DrawPrimitiveTopology.TriangleFan, verts[..poly.VertexCount], TileColor); + handle.DrawPrimitives(DrawPrimitiveTopology.TriangleFan, verts[..polygonVerts.Length], polygonColor); } } - var area = new Box2(-WorldRange, -WorldRange, WorldRange + 1f, WorldRange + 1f).Translated(offset); - - // Drawing lines can be rather expensive due to the number of neighbors that need to be checked in order - // to figure out where they should be drawn. However, we don't *need* to do check these every frame. - // Instead, lets periodically update where to draw each line and then store these points in a list. - // Then we can just run through the list each frame and draw the lines without any extra computation. - - // Draw walls - if (TileGrid != null && TileGrid.Count > 0) + // Draw map lines + if (TileLines.Any()) { - var walls = new ValueList(); + var lines = new ValueList(TileLines.Count * 2); - foreach ((var chunk, var chunkedLines) in TileGrid) + foreach (var (o, t) in TileLines) { - var offsetChunk = new Vector2(chunk.X, chunk.Y) * SharedNavMapSystem.ChunkSize; + var origin = ScalePosition(o - offsetVec); + var terminus = ScalePosition(t - offsetVec); - if (offsetChunk.X < area.Left - SharedNavMapSystem.ChunkSize || offsetChunk.X > area.Right) - continue; - - if (offsetChunk.Y < area.Bottom - SharedNavMapSystem.ChunkSize || offsetChunk.Y > area.Top) - continue; - - foreach (var chunkedLine in chunkedLines) - { - var start = ScalePosition(chunkedLine.Origin - new Vector2(offset.X, -offset.Y)); - var end = ScalePosition(chunkedLine.Terminus - new Vector2(offset.X, -offset.Y)); - - walls.Add(start); - walls.Add(end); - } + lines.Add(origin); + lines.Add(terminus); } - if (walls.Count > 0) - { - if (!_sRGBLookUp.TryGetValue(WallColor, out var sRGB)) - { - sRGB = Color.ToSrgb(WallColor); - _sRGBLookUp[WallColor] = sRGB; - } - - handle.DrawPrimitives(DrawPrimitiveTopology.LineList, walls.Span, sRGB); - } + if (lines.Count > 0) + handle.DrawPrimitives(DrawPrimitiveTopology.LineList, lines.Span, wallsRGB); } - var airlockBuffer = Vector2.One * (MinimapScale / 2.25f) * 0.75f; - var airlockLines = new ValueList(); - var foobarVec = new Vector2(1, -1); - - foreach (var airlock in _navMap.Airlocks) + // Draw map rects + if (TileRects.Any()) { - var position = airlock.Position - offset; - position = ScalePosition(position with { Y = -position.Y }); - airlockLines.Add(position + airlockBuffer); - airlockLines.Add(position - airlockBuffer * foobarVec); - - airlockLines.Add(position + airlockBuffer); - airlockLines.Add(position + airlockBuffer * foobarVec); - - airlockLines.Add(position - airlockBuffer); - airlockLines.Add(position + airlockBuffer * foobarVec); - - airlockLines.Add(position - airlockBuffer); - airlockLines.Add(position - airlockBuffer * foobarVec); + var rects = new ValueList(TileRects.Count * 8); - airlockLines.Add(position + airlockBuffer * -Vector2.UnitY); - airlockLines.Add(position - airlockBuffer * -Vector2.UnitY); - } - - if (airlockLines.Count > 0) - { - if (!_sRGBLookUp.TryGetValue(WallColor, out var sRGB)) + foreach (var (lt, rb) in TileRects) { - sRGB = Color.ToSrgb(WallColor); - _sRGBLookUp[WallColor] = sRGB; + var leftTop = ScalePosition(lt - offsetVec); + var rightBottom = ScalePosition(rb - offsetVec); + + var rightTop = new Vector2(rightBottom.X, leftTop.Y); + var leftBottom = new Vector2(leftTop.X, rightBottom.Y); + + rects.Add(leftTop); + rects.Add(rightTop); + rects.Add(rightTop); + rects.Add(rightBottom); + rects.Add(rightBottom); + rects.Add(leftBottom); + rects.Add(leftBottom); + rects.Add(leftTop); } - handle.DrawPrimitives(DrawPrimitiveTopology.LineList, airlockLines.Span, sRGB); + if (rects.Count > 0) + handle.DrawPrimitives(DrawPrimitiveTopology.LineList, rects.Span, wallsRGB); } + // Invoke post wall drawing action if (PostWallDrawingAction != null) PostWallDrawingAction.Invoke(handle); @@ -373,10 +374,10 @@ protected override void Draw(DrawingHandleScreen handle) var rectBuffer = new Vector2(5f, 3f); // Calculate font size for current zoom level - var fontSize = (int) Math.Round(1 / WorldRange * DefaultDisplayedRange * UIScale * _targetFontsize , 0); + var fontSize = (int) Math.Round(1 / WorldRange * DefaultDisplayedRange * UIScale * _targetFontsize, 0); var font = new VectorFont(_cache.GetResource("/Fonts/NotoSans/NotoSans-Bold.ttf"), fontSize); - foreach (var beacon in _navMap.Beacons) + foreach (var beacon in _navMap.Beacons.Values) { var position = beacon.Position - offset; position = ScalePosition(position with { Y = -position.Y }); @@ -400,7 +401,7 @@ protected override void Draw(DrawingHandleScreen handle) if (mapPos.MapId != MapId.Nullspace) { - var position = _transformSystem.GetInvWorldMatrix(_xform).Transform(mapPos.Position) - offset; + var position = Vector2.Transform(mapPos.Position, _transformSystem.GetInvWorldMatrix(_xform)) - offset; position = ScalePosition(new Vector2(position.X, -position.Y)); handle.DrawCircle(position, float.Sqrt(MinimapScale) * 2f, value.Color); @@ -409,8 +410,6 @@ protected override void Draw(DrawingHandleScreen handle) } // Tracked entities (can use a supplied sprite as a marker instead; should probably just replace TrackedCoordinates with this eventually) - var iconVertexUVs = new Dictionary<(Texture, Color), ValueList>(); - foreach (var blip in TrackedEntities.Values) { if (blip.Blinks && !lit) @@ -419,39 +418,18 @@ protected override void Draw(DrawingHandleScreen handle) if (blip.Texture == null) continue; - if (!iconVertexUVs.TryGetValue((blip.Texture, blip.Color), out var vertexUVs)) - vertexUVs = new(); - var mapPos = blip.Coordinates.ToMap(EntManager, _transformSystem); if (mapPos.MapId != MapId.Nullspace) { - var position = _transformSystem.GetInvWorldMatrix(_xform).Transform(mapPos.Position) - offset; + var position = Vector2.Transform(mapPos.Position, _transformSystem.GetInvWorldMatrix(_xform)) - offset; position = ScalePosition(new Vector2(position.X, -position.Y)); - var scalingCoefficient = 2.5f; - var positionOffset = scalingCoefficient * float.Sqrt(MinimapScale); - - vertexUVs.Add(new DrawVertexUV2D(new Vector2(position.X - positionOffset, position.Y - positionOffset), new Vector2(1f, 1f))); - vertexUVs.Add(new DrawVertexUV2D(new Vector2(position.X - positionOffset, position.Y + positionOffset), new Vector2(1f, 0f))); - vertexUVs.Add(new DrawVertexUV2D(new Vector2(position.X + positionOffset, position.Y - positionOffset), new Vector2(0f, 1f))); - vertexUVs.Add(new DrawVertexUV2D(new Vector2(position.X - positionOffset, position.Y + positionOffset), new Vector2(1f, 0f))); - vertexUVs.Add(new DrawVertexUV2D(new Vector2(position.X + positionOffset, position.Y - positionOffset), new Vector2(0f, 1f))); - vertexUVs.Add(new DrawVertexUV2D(new Vector2(position.X + positionOffset, position.Y + positionOffset), new Vector2(0f, 0f))); - } - - iconVertexUVs[(blip.Texture, blip.Color)] = vertexUVs; - } + var scalingCoefficient = MinmapScaleModifier * float.Sqrt(MinimapScale); + var positionOffset = new Vector2(scalingCoefficient * blip.Texture.Width, scalingCoefficient * blip.Texture.Height); - foreach ((var (texture, color), var vertexUVs) in iconVertexUVs) - { - if (!_sRGBLookUp.TryGetValue(color, out var sRGB)) - { - sRGB = Color.ToSrgb(color); - _sRGBLookUp[color] = sRGB; + handle.DrawTextureRect(blip.Texture, new UIBox2(position - positionOffset, position + positionOffset), blip.Color); } - - handle.DrawPrimitives(DrawPrimitiveTopology.TriangleList, texture, vertexUVs.Span, sRGB); } } @@ -470,123 +448,265 @@ protected override void FrameUpdate(FrameEventArgs args) protected virtual void UpdateNavMap() { - if (_navMap == null || _grid == null) + // Clear stale values + TilePolygons.Clear(); + TileLines.Clear(); + TileRects.Clear(); + + UpdateNavMapFloorTiles(); + UpdateNavMapWallLines(); + UpdateNavMapAirlocks(); + } + + private void UpdateNavMapFloorTiles() + { + if (_fixtures == null) return; - TileGrid = GetDecodedWallChunks(_navMap.Chunks, _grid); + var verts = new Vector2[8]; + + foreach (var fixture in _fixtures.Fixtures.Values) + { + if (fixture.Shape is not PolygonShape poly) + continue; + + for (var i = 0; i < poly.VertexCount; i++) + { + var vert = poly.Vertices[i]; + verts[i] = new Vector2(MathF.Round(vert.X), MathF.Round(vert.Y)); + } + + TilePolygons.Add((verts[..poly.VertexCount], TileColor)); + } } - public Dictionary> GetDecodedWallChunks - (Dictionary chunks, - MapGridComponent grid) + private void UpdateNavMapWallLines() { - var decodedOutput = new Dictionary>(); + if (_navMap == null || _grid == null) + return; - foreach ((var chunkOrigin, var chunk) in chunks) - { - var list = new List(); + // We'll use the following dictionaries to combine collinear wall lines + _horizLines.Clear(); + _horizLinesReversed.Clear(); + _vertLines.Clear(); + _vertLinesReversed.Clear(); - // TODO: Okay maybe I should just use ushorts lmao... - for (var i = 0; i < SharedNavMapSystem.ChunkSize * SharedNavMapSystem.ChunkSize; i++) + const int southMask = (int) AtmosDirection.South << (int) NavMapChunkType.Wall; + const int eastMask = (int) AtmosDirection.East << (int) NavMapChunkType.Wall; + const int westMask = (int) AtmosDirection.West << (int) NavMapChunkType.Wall; + const int northMask = (int) AtmosDirection.North << (int) NavMapChunkType.Wall; + + foreach (var (chunkOrigin, chunk) in _navMap.Chunks) + { + for (var i = 0; i < SharedNavMapSystem.ArraySize; i++) { - var value = (int) Math.Pow(2, i); + var tileData = chunk.TileData[i] & SharedNavMapSystem.WallMask; + if (tileData == 0) + continue; - var mask = chunk.TileData & value; + tileData >>= (int) NavMapChunkType.Wall; - if (mask == 0x0) + var relativeTile = SharedNavMapSystem.GetTileFromIndex(i); + var tile = (chunk.Origin * SharedNavMapSystem.ChunkSize + relativeTile) * _grid.TileSize; + + if (tileData != SharedNavMapSystem.AllDirMask) + { + AddRectForThinWall(tileData, tile); continue; + } - // Alright now we'll work out our edges - var relativeTile = SharedNavMapSystem.GetTile(mask); - var tile = (chunk.Origin * SharedNavMapSystem.ChunkSize + relativeTile) * grid.TileSize; - var position = new Vector2(tile.X, -tile.Y); + tile = tile with { Y = -tile.Y }; NavMapChunk? neighborChunk; - bool neighbor; // North edge - if (relativeTile.Y == SharedNavMapSystem.ChunkSize - 1) - { - neighbor = chunks.TryGetValue(chunkOrigin + new Vector2i(0, 1), out neighborChunk) && - (neighborChunk.TileData & - SharedNavMapSystem.GetFlag(new Vector2i(relativeTile.X, 0))) != 0x0; - } - else - { - var flag = SharedNavMapSystem.GetFlag(relativeTile + new Vector2i(0, 1)); - neighbor = (chunk.TileData & flag) != 0x0; - } + var neighborData = 0; + if (relativeTile.Y != SharedNavMapSystem.ChunkSize - 1) + neighborData = chunk.TileData[i+1]; + else if (_navMap.Chunks.TryGetValue(chunkOrigin + Vector2i.Up, out neighborChunk)) + neighborData = neighborChunk.TileData[i + 1 - SharedNavMapSystem.ChunkSize]; - if (!neighbor) + if ((neighborData & southMask) == 0) { - // Add points - list.Add(new NavMapLine(position + new Vector2(0f, -grid.TileSize), position + new Vector2(grid.TileSize, -grid.TileSize))); + AddOrUpdateNavMapLine(tile + new Vector2i(0, -_grid.TileSize), + tile + new Vector2i(_grid.TileSize, -_grid.TileSize), _horizLines, + _horizLinesReversed); } // East edge - if (relativeTile.X == SharedNavMapSystem.ChunkSize - 1) - { - neighbor = chunks.TryGetValue(chunkOrigin + new Vector2i(1, 0), out neighborChunk) && - (neighborChunk.TileData & - SharedNavMapSystem.GetFlag(new Vector2i(0, relativeTile.Y))) != 0x0; - } - else - { - var flag = SharedNavMapSystem.GetFlag(relativeTile + new Vector2i(1, 0)); - neighbor = (chunk.TileData & flag) != 0x0; - } + neighborData = 0; + if (relativeTile.X != SharedNavMapSystem.ChunkSize - 1) + neighborData = chunk.TileData[i+SharedNavMapSystem.ChunkSize]; + else if (_navMap.Chunks.TryGetValue(chunkOrigin + Vector2i.Right, out neighborChunk)) + neighborData = neighborChunk.TileData[i + SharedNavMapSystem.ChunkSize - SharedNavMapSystem.ArraySize]; - if (!neighbor) + if ((neighborData & westMask) == 0) { - // Add points - list.Add(new NavMapLine(position + new Vector2(grid.TileSize, -grid.TileSize), position + new Vector2(grid.TileSize, 0f))); + AddOrUpdateNavMapLine(tile + new Vector2i(_grid.TileSize, -_grid.TileSize), + tile + new Vector2i(_grid.TileSize, 0), _vertLines, _vertLinesReversed); } // South edge - if (relativeTile.Y == 0) - { - neighbor = chunks.TryGetValue(chunkOrigin + new Vector2i(0, -1), out neighborChunk) && - (neighborChunk.TileData & - SharedNavMapSystem.GetFlag(new Vector2i(relativeTile.X, SharedNavMapSystem.ChunkSize - 1))) != 0x0; - } - else - { - var flag = SharedNavMapSystem.GetFlag(relativeTile + new Vector2i(0, -1)); - neighbor = (chunk.TileData & flag) != 0x0; - } + neighborData = 0; + if (relativeTile.Y != 0) + neighborData = chunk.TileData[i-1]; + else if (_navMap.Chunks.TryGetValue(chunkOrigin + Vector2i.Down, out neighborChunk)) + neighborData = neighborChunk.TileData[i - 1 + SharedNavMapSystem.ChunkSize]; - if (!neighbor) + if ((neighborData & northMask) == 0) { - // Add points - list.Add(new NavMapLine(position + new Vector2(grid.TileSize, 0f), position)); + AddOrUpdateNavMapLine(tile, tile + new Vector2i(_grid.TileSize, 0), _horizLines, + _horizLinesReversed); } // West edge - if (relativeTile.X == 0) - { - neighbor = chunks.TryGetValue(chunkOrigin + new Vector2i(-1, 0), out neighborChunk) && - (neighborChunk.TileData & - SharedNavMapSystem.GetFlag(new Vector2i(SharedNavMapSystem.ChunkSize - 1, relativeTile.Y))) != 0x0; - } - else + neighborData = 0; + if (relativeTile.X != 0) + neighborData = chunk.TileData[i-SharedNavMapSystem.ChunkSize]; + else if (_navMap.Chunks.TryGetValue(chunkOrigin + Vector2i.Left, out neighborChunk)) + neighborData = neighborChunk.TileData[i - SharedNavMapSystem.ChunkSize + SharedNavMapSystem.ArraySize]; + + if ((neighborData & eastMask) == 0) { - var flag = SharedNavMapSystem.GetFlag(relativeTile + new Vector2i(-1, 0)); - neighbor = (chunk.TileData & flag) != 0x0; + AddOrUpdateNavMapLine(tile + new Vector2i(0, -_grid.TileSize), tile, _vertLines, + _vertLinesReversed); } - if (!neighbor) + // Add a diagonal line for interiors. Unless there are a lot of double walls, there is no point combining these + TileLines.Add((tile + new Vector2(0, -_grid.TileSize), tile + new Vector2(_grid.TileSize, 0))); + } + } + + // Record the combined lines + foreach (var (origin, terminal) in _horizLines) + { + TileLines.Add((origin, terminal)); + } + + foreach (var (origin, terminal) in _vertLines) + { + TileLines.Add((origin, terminal)); + } + } + + private void UpdateNavMapAirlocks() + { + if (_navMap == null || _grid == null) + return; + + foreach (var chunk in _navMap.Chunks.Values) + { + for (var i = 0; i < SharedNavMapSystem.ArraySize; i++) + { + var tileData = chunk.TileData[i] & SharedNavMapSystem.AirlockMask; + if (tileData == 0) + continue; + + tileData >>= (int) NavMapChunkType.Airlock; + + var relative = SharedNavMapSystem.GetTileFromIndex(i); + var tile = (chunk.Origin * SharedNavMapSystem.ChunkSize + relative) * _grid.TileSize; + + // If the edges of an airlock tile are not all occupied, draw a thin airlock for each edge + if (tileData != SharedNavMapSystem.AllDirMask) { - // Add point - list.Add(new NavMapLine(position, position + new Vector2(0f, -grid.TileSize))); + AddRectForThinAirlock(tileData, tile); + continue; } - // Draw a diagonal line for interiors. - list.Add(new NavMapLine(position + new Vector2(0f, -grid.TileSize), position + new Vector2(grid.TileSize, 0f))); + // Otherwise add a single full tile airlock + TileRects.Add((new Vector2(tile.X + FullWallInstep, -tile.Y - FullWallInstep), + new Vector2(tile.X - FullWallInstep + 1f, -tile.Y + FullWallInstep - 1))); + + TileLines.Add((new Vector2(tile.X + 0.5f, -tile.Y - FullWallInstep), + new Vector2(tile.X + 0.5f, -tile.Y + FullWallInstep - 1))); + } + } + } + + private void AddRectForThinWall(int tileData, Vector2i tile) + { + var leftTop = new Vector2(-0.5f, 0.5f - ThinWallThickness); + var rightBottom = new Vector2(0.5f, 0.5f); + + for (var i = 0; i < SharedNavMapSystem.Directions; i++) + { + var dirMask = 1 << i; + if ((tileData & dirMask) == 0) + continue; + + var tilePosition = new Vector2(tile.X + 0.5f, -tile.Y - 0.5f); + + // TODO NAVMAP + // Consider using faster rotation operations, given that these are always 90 degree increments + var angle = -((AtmosDirection) dirMask).ToAngle(); + TileRects.Add((angle.RotateVec(leftTop) + tilePosition, angle.RotateVec(rightBottom) + tilePosition)); + } + } + + private void AddRectForThinAirlock(int tileData, Vector2i tile) + { + var leftTop = new Vector2(-0.5f + FullWallInstep, 0.5f - FullWallInstep - ThinDoorThickness); + var rightBottom = new Vector2(0.5f - FullWallInstep, 0.5f - FullWallInstep); + var centreTop = new Vector2(0f, 0.5f - FullWallInstep - ThinDoorThickness); + var centreBottom = new Vector2(0f, 0.5f - FullWallInstep); + + for (var i = 0; i < SharedNavMapSystem.Directions; i++) + { + var dirMask = 1 << i; + if ((tileData & dirMask) == 0) + continue; + + var tilePosition = new Vector2(tile.X + 0.5f, -tile.Y - 0.5f); + var angle = -((AtmosDirection) dirMask).ToAngle(); + TileRects.Add((angle.RotateVec(leftTop) + tilePosition, angle.RotateVec(rightBottom) + tilePosition)); + TileLines.Add((angle.RotateVec(centreTop) + tilePosition, angle.RotateVec(centreBottom) + tilePosition)); + } + } + + protected void AddOrUpdateNavMapLine( + Vector2i origin, + Vector2i terminus, + Dictionary lookup, + Dictionary lookupReversed) + { + Vector2i foundTermius; + Vector2i foundOrigin; + + // Does our new line end at the beginning of an existing line? + if (lookup.Remove(terminus, out foundTermius)) + { + DebugTools.Assert(lookupReversed[foundTermius] == terminus); + + // Does our new line start at the end of an existing line? + if (lookupReversed.Remove(origin, out foundOrigin)) + { + // Our new line just connects two existing lines + DebugTools.Assert(lookup[foundOrigin] == origin); + lookup[foundOrigin] = foundTermius; + lookupReversed[foundTermius] = foundOrigin; + } + else + { + // Our new line precedes an existing line, extending it further to the left + lookup[origin] = foundTermius; + lookupReversed[foundTermius] = origin; } + return; + } - decodedOutput.Add(chunkOrigin, list); + // Does our new line start at the end of an existing line? + if (lookupReversed.Remove(origin, out foundOrigin)) + { + // Our new line just extends an existing line further to the right + DebugTools.Assert(lookup[foundOrigin] == origin); + lookup[foundOrigin] = terminus; + lookupReversed[terminus] = foundOrigin; + return; } - return decodedOutput; + // Completely disconnected line segment. + lookup.Add(origin, terminus); + lookupReversed.Add(terminus, origin); } protected Vector2 GetOffset() @@ -612,15 +732,3 @@ public NavMapBlip(EntityCoordinates coordinates, Texture texture, Color color, b Selectable = selectable; } } - -public struct NavMapLine -{ - public readonly Vector2 Origin; - public readonly Vector2 Terminus; - - public NavMapLine(Vector2 origin, Vector2 terminus) - { - Origin = origin; - Terminus = terminus; - } -} diff --git a/Content.Client/Players/PlayTimeTracking/JobRequirementsManager.cs b/Content.Client/Players/PlayTimeTracking/JobRequirementsManager.cs index d21d4e657b8..2cfd00ce892 100644 --- a/Content.Client/Players/PlayTimeTracking/JobRequirementsManager.cs +++ b/Content.Client/Players/PlayTimeTracking/JobRequirementsManager.cs @@ -1,19 +1,16 @@ -using System.Diagnostics.CodeAnalysis; -using System.Text; // Nuclear 14 +using System.Diagnostics.CodeAnalysis; using Content.Shared.CCVar; using Content.Shared.Customization.Systems; +using Content.Shared.Players.JobWhitelist; using Content.Shared.Players; using Content.Shared.Players.PlayTimeTracking; using Content.Shared.Roles; -using Content.Shared._NC.Roles; // Nuclear 14 using Robust.Client; using Robust.Client.Player; -using Content.Client.Preferences; // Nuclear 14 using Robust.Shared.Configuration; using Robust.Shared.Network; using Robust.Shared.Player; using Robust.Shared.Prototypes; -using Content.Shared.Preferences; // Nuclear 14 using Robust.Shared.Utility; namespace Content.Client.Players.PlayTimeTracking; @@ -22,14 +19,13 @@ public sealed partial class JobRequirementsManager : ISharedPlaytimeManager { [Dependency] private readonly IBaseClient _client = default!; [Dependency] private readonly IClientNetManager _net = default!; + [Dependency] private readonly IConfigurationManager _cfg = default!; [Dependency] private readonly IPrototypeManager _prototypes = default!; - [Dependency] private readonly IClientPreferencesManager _clientPreferences = default!; // Nuclear 14 private readonly Dictionary _roles = new(); private readonly List _roleBans = new(); - private ISawmill _sawmill = default!; - + private readonly List _jobWhitelists = new(); public event Action? Updated; public void Initialize() @@ -40,6 +36,7 @@ public void Initialize() _net.RegisterNetMessage(RxRoleBans); _net.RegisterNetMessage(RxPlayTime); _net.RegisterNetMessage(RxWhitelist); + _net.RegisterNetMessage(RxJobWhitelist); _client.RunLevelChanged += ClientOnRunLevelChanged; } @@ -83,6 +80,28 @@ private void RxPlayTime(MsgPlayTime message) Updated?.Invoke(); } + private void RxJobWhitelist(MsgJobWhitelist message) + { + _jobWhitelists.Clear(); + _jobWhitelists.AddRange(message.Whitelist); + Updated?.Invoke(); + } + + public bool CheckJobWhitelist(JobPrototype job, [NotNullWhen(false)] out FormattedMessage? reason) + { + reason = default; + if (!_cfg.GetCVar(CCVars.GameRoleWhitelist)) + return true; + + if (job.Whitelisted && !_jobWhitelists.Contains(job.ID)) + { + reason = FormattedMessage.FromUnformatted(Loc.GetString("role-not-whitelisted")); + return false; + } + + return true; + } + public TimeSpan FetchOverallPlaytime() { return _roles.TryGetValue("Overall", out var overallPlaytime) ? overallPlaytime : TimeSpan.Zero; diff --git a/Content.Client/Polymorph/Systems/ChameleonProjectorSystem.cs b/Content.Client/Polymorph/Systems/ChameleonProjectorSystem.cs new file mode 100644 index 00000000000..5ba4878c6d4 --- /dev/null +++ b/Content.Client/Polymorph/Systems/ChameleonProjectorSystem.cs @@ -0,0 +1,33 @@ +using Content.Shared.Chemistry.Components; +using Content.Shared.Polymorph.Components; +using Content.Shared.Polymorph.Systems; +using Robust.Client.GameObjects; + +namespace Content.Client.Polymorph.Systems; + +public sealed class ChameleonProjectorSystem : SharedChameleonProjectorSystem +{ + [Dependency] private readonly SharedAppearanceSystem _appearance = default!; + + private EntityQuery _appearanceQuery; + + public override void Initialize() + { + base.Initialize(); + + _appearanceQuery = GetEntityQuery(); + + SubscribeLocalEvent(OnHandleState); + } + + private void OnHandleState(Entity ent, ref AfterAutoHandleStateEvent args) + { + CopyComp(ent); + CopyComp(ent); + CopyComp(ent); + + // reload appearance to hopefully prevent any invisible layers + if (_appearanceQuery.TryComp(ent, out var appearance)) + _appearance.QueueUpdate(ent, appearance); + } +} diff --git a/Content.Client/Popups/PopupOverlay.cs b/Content.Client/Popups/PopupOverlay.cs index fb6bb3bf565..77eeb611f51 100644 --- a/Content.Client/Popups/PopupOverlay.cs +++ b/Content.Client/Popups/PopupOverlay.cs @@ -1,3 +1,4 @@ +using System.Numerics; using Content.Shared.Examine; using Robust.Client.Graphics; using Robust.Client.Player; @@ -55,7 +56,7 @@ protected override void Draw(in OverlayDrawArgs args) if (args.ViewportControl == null) return; - args.DrawingHandle.SetTransform(Matrix3.Identity); + args.DrawingHandle.SetTransform(Matrix3x2.Identity); args.DrawingHandle.UseShader(_shader); var scale = _configManager.GetCVar(CVars.DisplayUIScale); @@ -90,7 +91,7 @@ private void DrawWorld(DrawingHandleScreen worldHandle, OverlayDrawArgs args, fl e => e == popup.InitialPos.EntityId || e == ourEntity, entMan: _entManager)) continue; - var pos = matrix.Transform(mapPos.Position); + var pos = Vector2.Transform(mapPos.Position, matrix); _controller.DrawPopup(popup, worldHandle, pos, scale); } } diff --git a/Content.Client/Popups/PopupSystem.cs b/Content.Client/Popups/PopupSystem.cs index 3faa392e58d..1ef8dfba2d1 100644 --- a/Content.Client/Popups/PopupSystem.cs +++ b/Content.Client/Popups/PopupSystem.cs @@ -5,7 +5,6 @@ using Robust.Client.Graphics; using Robust.Client.Input; using Robust.Client.Player; -using Robust.Client.ResourceManagement; using Robust.Client.UserInterface; using Robust.Shared.Configuration; using Robust.Shared.Map; @@ -163,6 +162,15 @@ public override void PopupEntity(string? message, EntityUid uid, Filter filter, PopupEntity(message, uid, type); } + public override void PopupClient(string? message, EntityUid? recipient, PopupType type = PopupType.Small) + { + if (recipient == null) + return; + + if (_timing.IsFirstTimePredicted) + PopupCursor(message, recipient.Value, type); + } + public override void PopupClient(string? message, EntityUid uid, EntityUid? recipient, PopupType type = PopupType.Small) { if (recipient == null) @@ -172,6 +180,15 @@ public override void PopupClient(string? message, EntityUid uid, EntityUid? reci PopupEntity(message, uid, recipient.Value, type); } + public override void PopupClient(string? message, EntityCoordinates coordinates, EntityUid? recipient, PopupType type = PopupType.Small) + { + if (recipient == null) + return; + + if (_timing.IsFirstTimePredicted) + PopupCoordinates(message, coordinates, recipient.Value, type); + } + public override void PopupEntity(string? message, EntityUid uid, PopupType type = PopupType.Small) { if (TryComp(uid, out TransformComponent? transform)) diff --git a/Content.Client/Power/ActivatableUIRequiresPowerSystem.cs b/Content.Client/Power/ActivatableUIRequiresPowerSystem.cs new file mode 100644 index 00000000000..60ed8d87b9e --- /dev/null +++ b/Content.Client/Power/ActivatableUIRequiresPowerSystem.cs @@ -0,0 +1,21 @@ +using Content.Shared.Power.Components; +using Content.Shared.UserInterface; +using Content.Shared.Wires; + +namespace Content.Client.Power; + +public sealed class ActivatableUIRequiresPowerSystem : EntitySystem +{ + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnActivate); + } + + private void OnActivate(EntityUid uid, ActivatableUIRequiresPowerComponent component, ActivatableUIOpenAttemptEvent args) + { + // Client can't predict the power properly at the moment so rely upon the server to do it. + args.Cancel(); + } +} diff --git a/Content.Client/Power/PowerMonitoringConsoleNavMapControl.cs b/Content.Client/Power/PowerMonitoringConsoleNavMapControl.cs index 902d6bb7e60..d5057416cf8 100644 --- a/Content.Client/Power/PowerMonitoringConsoleNavMapControl.cs +++ b/Content.Client/Power/PowerMonitoringConsoleNavMapControl.cs @@ -5,6 +5,7 @@ using Robust.Shared.Collections; using Robust.Shared.Map.Components; using System.Numerics; +using static Content.Shared.Power.SharedPowerMonitoringConsoleSystem; namespace Content.Client.Power; @@ -23,8 +24,13 @@ public sealed partial class PowerMonitoringConsoleNavMapControl : NavMapControl public PowerMonitoringCableNetworksComponent? PowerMonitoringCableNetworks; public List HiddenLineGroups = new(); - public Dictionary>? PowerCableNetwork; - public Dictionary>? FocusCableNetwork; + public List PowerCableNetwork = new(); + public List FocusCableNetwork = new(); + + private Dictionary[] _horizLines = [new(), new(), new()]; + private Dictionary[] _horizLinesReversed = [new(), new(), new()]; + private Dictionary[] _vertLines = [new(), new(), new()]; + private Dictionary[] _vertLinesReversed = [new(), new(), new()]; private MapGridComponent? _grid; @@ -48,15 +54,15 @@ protected override void UpdateNavMap() if (!_entManager.TryGetComponent(Owner, out var cableNetworks)) return; - if (!_entManager.TryGetComponent(MapUid, out _grid)) - return; - - PowerCableNetwork = GetDecodedPowerCableChunks(cableNetworks.AllChunks, _grid); - FocusCableNetwork = GetDecodedPowerCableChunks(cableNetworks.FocusChunks, _grid); + PowerCableNetwork = GetDecodedPowerCableChunks(cableNetworks.AllChunks); + FocusCableNetwork = GetDecodedPowerCableChunks(cableNetworks.FocusChunks); } public void DrawAllCableNetworks(DrawingHandleScreen handle) { + if (!_entManager.TryGetComponent(MapUid, out _grid)) + return; + // Draw full cable network if (PowerCableNetwork != null && PowerCableNetwork.Count > 0) { @@ -69,36 +75,29 @@ public void DrawAllCableNetworks(DrawingHandleScreen handle) DrawCableNetwork(handle, FocusCableNetwork, Color.White); } - public void DrawCableNetwork(DrawingHandleScreen handle, Dictionary> fullCableNetwork, Color modulator) + public void DrawCableNetwork(DrawingHandleScreen handle, List fullCableNetwork, Color modulator) { + if (!_entManager.TryGetComponent(MapUid, out _grid)) + return; + var offset = GetOffset(); - var area = new Box2(-WorldRange, -WorldRange, WorldRange + 1f, WorldRange + 1f).Translated(offset); + offset = offset with { Y = -offset.Y }; if (WorldRange / WorldMaxRange > 0.5f) { var cableNetworks = new ValueList[3]; - foreach ((var chunk, var chunkedLines) in fullCableNetwork) + foreach (var line in fullCableNetwork) { - var offsetChunk = new Vector2(chunk.X, chunk.Y) * SharedNavMapSystem.ChunkSize; - - if (offsetChunk.X < area.Left - SharedNavMapSystem.ChunkSize || offsetChunk.X > area.Right) + if (HiddenLineGroups.Contains(line.Group)) continue; - if (offsetChunk.Y < area.Bottom - SharedNavMapSystem.ChunkSize || offsetChunk.Y > area.Top) - continue; - - foreach (var chunkedLine in chunkedLines) - { - if (HiddenLineGroups.Contains(chunkedLine.Group)) - continue; - - var start = ScalePosition(chunkedLine.Origin - new Vector2(offset.X, -offset.Y)); - var end = ScalePosition(chunkedLine.Terminus - new Vector2(offset.X, -offset.Y)); + var cableOffset = _powerCableOffsets[(int) line.Group]; + var start = ScalePosition(line.Origin + cableOffset - offset); + var end = ScalePosition(line.Terminus + cableOffset - offset); - cableNetworks[(int) chunkedLine.Group].Add(start); - cableNetworks[(int) chunkedLine.Group].Add(end); - } + cableNetworks[(int) line.Group].Add(start); + cableNetworks[(int) line.Group].Add(end); } for (int cableNetworkIdx = 0; cableNetworkIdx < cableNetworks.Length; cableNetworkIdx++) @@ -124,48 +123,39 @@ public void DrawCableNetwork(DrawingHandleScreen handle, Dictionary[3]; - foreach ((var chunk, var chunkedLines) in fullCableNetwork) + foreach (var line in fullCableNetwork) { - var offsetChunk = new Vector2(chunk.X, chunk.Y) * SharedNavMapSystem.ChunkSize; - - if (offsetChunk.X < area.Left - SharedNavMapSystem.ChunkSize || offsetChunk.X > area.Right) + if (HiddenLineGroups.Contains(line.Group)) continue; - if (offsetChunk.Y < area.Bottom - SharedNavMapSystem.ChunkSize || offsetChunk.Y > area.Top) - continue; - - foreach (var chunkedLine in chunkedLines) - { - if (HiddenLineGroups.Contains(chunkedLine.Group)) - continue; - - var leftTop = ScalePosition(new Vector2 - (Math.Min(chunkedLine.Origin.X, chunkedLine.Terminus.X) - 0.1f, - Math.Min(chunkedLine.Origin.Y, chunkedLine.Terminus.Y) - 0.1f) - - new Vector2(offset.X, -offset.Y)); - - var rightTop = ScalePosition(new Vector2 - (Math.Max(chunkedLine.Origin.X, chunkedLine.Terminus.X) + 0.1f, - Math.Min(chunkedLine.Origin.Y, chunkedLine.Terminus.Y) - 0.1f) - - new Vector2(offset.X, -offset.Y)); - - var leftBottom = ScalePosition(new Vector2 - (Math.Min(chunkedLine.Origin.X, chunkedLine.Terminus.X) - 0.1f, - Math.Max(chunkedLine.Origin.Y, chunkedLine.Terminus.Y) + 0.1f) - - new Vector2(offset.X, -offset.Y)); - - var rightBottom = ScalePosition(new Vector2 - (Math.Max(chunkedLine.Origin.X, chunkedLine.Terminus.X) + 0.1f, - Math.Max(chunkedLine.Origin.Y, chunkedLine.Terminus.Y) + 0.1f) - - new Vector2(offset.X, -offset.Y)); - - cableVertexUVs[(int) chunkedLine.Group].Add(leftBottom); - cableVertexUVs[(int) chunkedLine.Group].Add(leftTop); - cableVertexUVs[(int) chunkedLine.Group].Add(rightBottom); - cableVertexUVs[(int) chunkedLine.Group].Add(leftTop); - cableVertexUVs[(int) chunkedLine.Group].Add(rightBottom); - cableVertexUVs[(int) chunkedLine.Group].Add(rightTop); - } + var cableOffset = _powerCableOffsets[(int) line.Group]; + + var leftTop = ScalePosition(new Vector2 + (Math.Min(line.Origin.X, line.Terminus.X) - 0.1f, + Math.Min(line.Origin.Y, line.Terminus.Y) - 0.1f) + + cableOffset - offset); + + var rightTop = ScalePosition(new Vector2 + (Math.Max(line.Origin.X, line.Terminus.X) + 0.1f, + Math.Min(line.Origin.Y, line.Terminus.Y) - 0.1f) + + cableOffset - offset); + + var leftBottom = ScalePosition(new Vector2 + (Math.Min(line.Origin.X, line.Terminus.X) - 0.1f, + Math.Max(line.Origin.Y, line.Terminus.Y) + 0.1f) + + cableOffset - offset); + + var rightBottom = ScalePosition(new Vector2 + (Math.Max(line.Origin.X, line.Terminus.X) + 0.1f, + Math.Max(line.Origin.Y, line.Terminus.Y) + 0.1f) + + cableOffset - offset); + + cableVertexUVs[(int) line.Group].Add(leftBottom); + cableVertexUVs[(int) line.Group].Add(leftTop); + cableVertexUVs[(int) line.Group].Add(rightBottom); + cableVertexUVs[(int) line.Group].Add(leftTop); + cableVertexUVs[(int) line.Group].Add(rightBottom); + cableVertexUVs[(int) line.Group].Add(rightTop); } for (int cableNetworkIdx = 0; cableNetworkIdx < cableVertexUVs.Length; cableNetworkIdx++) @@ -188,34 +178,43 @@ public void DrawCableNetwork(DrawingHandleScreen handle, Dictionary>? GetDecodedPowerCableChunks(Dictionary? chunks, MapGridComponent? grid) + public List GetDecodedPowerCableChunks(Dictionary? chunks) { - if (chunks == null || grid == null) - return null; + var decodedOutput = new List(); - var decodedOutput = new Dictionary>(); + if (!_entManager.TryGetComponent(MapUid, out _grid)) + return decodedOutput; - foreach ((var chunkOrigin, var chunk) in chunks) - { - var list = new List(); + if (chunks == null) + return decodedOutput; + + Array.ForEach(_horizLines, x=> x.Clear()); + Array.ForEach(_horizLinesReversed, x=> x.Clear()); + Array.ForEach(_vertLines, x=> x.Clear()); + Array.ForEach(_vertLinesReversed, x=> x.Clear()); - for (int cableIdx = 0; cableIdx < chunk.PowerCableData.Length; cableIdx++) + foreach (var (chunkOrigin, chunk) in chunks) + { + for (var cableIdx = 0; cableIdx < 3; cableIdx++) { - var chunkMask = chunk.PowerCableData[cableIdx]; + var horizLines = _horizLines[cableIdx]; + var horizLinesReversed = _horizLinesReversed[cableIdx]; + var vertLines = _vertLines[cableIdx]; + var vertLinesReversed = _vertLinesReversed[cableIdx]; - Vector2 offset = _powerCableOffsets[cableIdx]; + var chunkMask = chunk.PowerCableData[cableIdx]; - for (var chunkIdx = 0; chunkIdx < SharedNavMapSystem.ChunkSize * SharedNavMapSystem.ChunkSize; chunkIdx++) + for (var chunkIdx = 0; chunkIdx < ChunkSize * ChunkSize; chunkIdx++) { - var value = (int) Math.Pow(2, chunkIdx); + var value = 1 << chunkIdx; var mask = chunkMask & value; if (mask == 0x0) continue; - var relativeTile = SharedNavMapSystem.GetTile(mask); - var tile = (chunk.Origin * SharedNavMapSystem.ChunkSize + relativeTile) * grid.TileSize; - var position = new Vector2(tile.X, -tile.Y); + var relativeTile = GetTileFromIndex(chunkIdx); + var tile = (chunk.Origin * ChunkSize + relativeTile) * _grid.TileSize; + tile = tile with { Y = -tile.Y }; PowerCableChunk neighborChunk; bool neighbor; @@ -223,56 +222,65 @@ public void DrawCableNetwork(DrawingHandleScreen handle, Dictionary 0) - decodedOutput.Add(chunkOrigin, list); + for (var index = 0; index < _vertLines.Length; index++) + { + var vertLines = _vertLines[index]; + foreach (var (origin, terminal) in vertLines) + { + decodedOutput.Add(new PowerMonitoringConsoleLine(origin + gridOffset, terminal + gridOffset, + (PowerMonitoringConsoleLineGroup) index)); + } } return decodedOutput; diff --git a/Content.Client/Power/PowerMonitoringWindow.xaml.cs b/Content.Client/Power/PowerMonitoringWindow.xaml.cs index edc0eaa18a8..81fe1f4d047 100644 --- a/Content.Client/Power/PowerMonitoringWindow.xaml.cs +++ b/Content.Client/Power/PowerMonitoringWindow.xaml.cs @@ -170,9 +170,6 @@ public void ShowEntites NavMap.TrackedEntities[mon.Value] = blip; } - // Update nav map - NavMap.ForceNavMapUpdate(); - // If the entry group doesn't match the current tab, the data is out dated, do not use it if (allEntries.Length > 0 && allEntries[0].Group != GetCurrentPowerMonitoringConsoleGroup()) return; diff --git a/Content.Client/Preferences/UI/AntagPreferenceSelector.cs b/Content.Client/Preferences/UI/AntagPreferenceSelector.cs deleted file mode 100644 index f4975a6090c..00000000000 --- a/Content.Client/Preferences/UI/AntagPreferenceSelector.cs +++ /dev/null @@ -1,57 +0,0 @@ -using Content.Client.Players.PlayTimeTracking; -using Content.Shared.Customization.Systems; -using Content.Shared.Preferences; -using Content.Shared.Roles; -using Robust.Shared.Configuration; -using Robust.Shared.Prototypes; - -namespace Content.Client.Preferences.UI; - -public sealed class AntagPreferenceSelector : RequirementsSelector -{ - // 0 is yes and 1 is no - public bool Preference - { - get => Options.SelectedValue == 0; - set => Options.Select(value && !Disabled ? 0 : 1); - } - - public event Action? PreferenceChanged; - - public AntagPreferenceSelector(AntagPrototype proto, JobPrototype highJob) : base(proto, highJob) - { - Options.OnItemSelected += _ => PreferenceChanged?.Invoke(Preference); - - var items = new[] - { - ("humanoid-profile-editor-antag-preference-yes-button", 0), - ("humanoid-profile-editor-antag-preference-no-button", 1), - }; - var title = Loc.GetString(proto.Name); - var description = Loc.GetString(proto.Objective); - Setup(items, title, 250, description); - - // Immediately lock requirements if they aren't met. - // Another function checks Disabled after creating the selector so this has to be done now - var requirements = IoCManager.Resolve(); - var prefs = IoCManager.Resolve(); - var entMan = IoCManager.Resolve(); - var characterReqs = entMan.System(); - var protoMan = IoCManager.Resolve(); - var configMan = IoCManager.Resolve(); - - if (proto.Requirements != null - && !characterReqs.CheckRequirementsValid( - proto.Requirements, - highJob, - (HumanoidCharacterProfile) (prefs.Preferences?.SelectedCharacter ?? HumanoidCharacterProfile.DefaultWithSpecies()), - requirements.GetRawPlayTimeTrackers(), - requirements.IsWhitelisted(), - proto, - entMan, - protoMan, - configMan, - out var reasons)) - LockRequirements(characterReqs.GetRequirementsText(reasons)); - } -} diff --git a/Content.Client/Preferences/UI/CharacterSetupGui.xaml.cs b/Content.Client/Preferences/UI/CharacterSetupGui.xaml.cs deleted file mode 100644 index 3ac13f96e7a..00000000000 --- a/Content.Client/Preferences/UI/CharacterSetupGui.xaml.cs +++ /dev/null @@ -1,257 +0,0 @@ -using System.Linq; -using System.Numerics; -using Content.Client.Humanoid; -using Content.Client.Info; -using Content.Client.Info.PlaytimeStats; -using Content.Client.Lobby; -using Content.Client.Lobby.UI; -using Content.Client.Resources; -using Content.Client.Stylesheets; -using Content.Shared.Clothing.Loadouts.Systems; -using Content.Shared.Humanoid; -using Content.Shared.Humanoid.Prototypes; -using Content.Shared.Preferences; -using Content.Shared.Roles; -using Robust.Client.AutoGenerated; -using Robust.Client.Graphics; -using Robust.Client.ResourceManagement; -using Robust.Client.UserInterface; -using Robust.Client.UserInterface.Controls; -using Robust.Client.UserInterface.XAML; -using Robust.Shared.Configuration; -using Robust.Shared.Map; -using Robust.Shared.Prototypes; -using static Robust.Client.UserInterface.Controls.BoxContainer; -using Direction = Robust.Shared.Maths.Direction; - -namespace Content.Client.Preferences.UI -{ - [GenerateTypedNameReferences] - public sealed partial class CharacterSetupGui : Control - { - private readonly IClientPreferencesManager _preferencesManager; - private readonly IEntityManager _entityManager; - private readonly IPrototypeManager _prototypeManager; - private readonly Button _createNewCharacterButton; - private readonly HumanoidProfileEditor _humanoidProfileEditor; - - public CharacterSetupGui( - IEntityManager entityManager, - IResourceCache resourceCache, - IClientPreferencesManager preferencesManager, - IPrototypeManager prototypeManager, - IConfigurationManager configurationManager) - { - RobustXamlLoader.Load(this); - _entityManager = entityManager; - _prototypeManager = prototypeManager; - _preferencesManager = preferencesManager; - - var panelTex = resourceCache.GetTexture("/Textures/Interface/Nano/button.svg.96dpi.png"); - var back = new StyleBoxTexture - { - Texture = panelTex, - Modulate = new Color(37, 37, 42) - }; - back.SetPatchMargin(StyleBox.Margin.All, 10); - - BackgroundPanel.PanelOverride = back; - - _createNewCharacterButton = new Button - { - Text = Loc.GetString("character-setup-gui-create-new-character-button"), - }; - _createNewCharacterButton.OnPressed += args => - { - preferencesManager.CreateCharacter(HumanoidCharacterProfile.Random()); - UpdateUI(); - args.Event.Handle(); - }; - - _humanoidProfileEditor = new HumanoidProfileEditor(preferencesManager, prototypeManager, configurationManager); - _humanoidProfileEditor.OnProfileChanged += ProfileChanged; - CharEditor.AddChild(_humanoidProfileEditor); - - UpdateUI(); - - RulesButton.OnPressed += _ => new RulesAndInfoWindow().Open(); - - StatsButton.OnPressed += _ => new PlaytimeStatsWindow().OpenCentered(); - preferencesManager.OnServerDataLoaded += UpdateUI; - } - - protected override void Dispose(bool disposing) - { - base.Dispose(disposing); - if (!disposing) - return; - - _preferencesManager.OnServerDataLoaded -= UpdateUI; - } - - public void Save() => _humanoidProfileEditor.Save(); - - private void ProfileChanged(ICharacterProfile profile, int profileSlot) - { - _humanoidProfileEditor.UpdateControls(); - UpdateUI(); - } - - private void UpdateUI() - { - UserInterfaceManager.GetUIController().UpdateCharacterUI(); - var numberOfFullSlots = 0; - var characterButtonsGroup = new ButtonGroup(); - Characters.RemoveAllChildren(); - - if (!_preferencesManager.ServerDataLoaded) - return; - - _createNewCharacterButton.ToolTip = - Loc.GetString("character-setup-gui-create-new-character-button-tooltip", - ("maxCharacters", _preferencesManager.Settings!.MaxCharacterSlots)); - - foreach (var (slot, character) in _preferencesManager.Preferences!.Characters) - { - numberOfFullSlots++; - var characterPickerButton = new CharacterPickerButton(_entityManager, - _preferencesManager, - _prototypeManager, - characterButtonsGroup, - character); - Characters.AddChild(characterPickerButton); - - var characterIndexCopy = slot; - characterPickerButton.OnPressed += args => - { - _humanoidProfileEditor.Profile = (HumanoidCharacterProfile)character; - _humanoidProfileEditor.CharacterSlot = characterIndexCopy; - _humanoidProfileEditor.UpdateControls(); - _preferencesManager.SelectCharacter(character); - UpdateUI(); - args.Event.Handle(); - }; - } - - _createNewCharacterButton.Disabled = - numberOfFullSlots >= _preferencesManager.Settings.MaxCharacterSlots; - Characters.AddChild(_createNewCharacterButton); - // TODO: Move this shit to the Lobby UI controller - } - - /// - /// Shows individual characters on the side of the character GUI. - /// - private sealed class CharacterPickerButton : ContainerButton - { - private EntityUid _previewDummy; - - public CharacterPickerButton( - IEntityManager entityManager, - IClientPreferencesManager preferencesManager, - IPrototypeManager prototypeManager, - ButtonGroup group, - ICharacterProfile profile) - { - AddStyleClass(StyleClassButton); - ToggleMode = true; - Group = group; - - var humanoid = profile as HumanoidCharacterProfile; - if (humanoid is not null) - { - var dummy = prototypeManager.Index(humanoid.Species).DollPrototype; - _previewDummy = entityManager.SpawnEntity(dummy, MapCoordinates.Nullspace); - } - else - { - _previewDummy = entityManager.SpawnEntity(prototypeManager.Index(SharedHumanoidAppearanceSystem.DefaultSpecies).DollPrototype, MapCoordinates.Nullspace); - } - - EntitySystem.Get().LoadProfile(_previewDummy, (HumanoidCharacterProfile)profile); - - if (humanoid != null) - { - var controller = UserInterfaceManager.GetUIController(); - controller.GiveDummyJobClothesLoadout(_previewDummy, humanoid); - } - - var isSelectedCharacter = profile == preferencesManager.Preferences?.SelectedCharacter; - - if (isSelectedCharacter) - Pressed = true; - - var view = new SpriteView - { - Scale = new Vector2(2, 2), - OverrideDirection = Direction.South - }; - view.SetEntity(_previewDummy); - - var description = profile.Name; - - var highPriorityJob = humanoid?.JobPriorities.SingleOrDefault(p => p.Value == JobPriority.High).Key; - if (highPriorityJob != null) - { - var jobName = IoCManager.Resolve().Index(highPriorityJob).LocalizedName; - description = $"{description}\n{jobName}"; - } - - var descriptionLabel = new Label - { - Text = description, - ClipText = true, - HorizontalExpand = true - }; - var deleteButton = new Button - { - Text = Loc.GetString("character-setup-gui-character-picker-button-delete-button"), - Visible = !isSelectedCharacter, - }; - var confirmDeleteButton = new Button - { - Text = Loc.GetString("character-setup-gui-character-picker-button-confirm-delete-button"), - Visible = false, - }; - confirmDeleteButton.ModulateSelfOverride = StyleNano.ButtonColorDangerDefault; - confirmDeleteButton.OnPressed += _ => - { - Parent?.RemoveChild(this); - Parent?.RemoveChild(confirmDeleteButton); - preferencesManager.DeleteCharacter(profile); - }; - deleteButton.OnPressed += _ => - { - deleteButton.Visible = false; - confirmDeleteButton.Visible = true; - }; - - var internalHBox = new BoxContainer - { - Orientation = LayoutOrientation.Horizontal, - HorizontalExpand = true, - SeparationOverride = 0, - Children = - { - view, - descriptionLabel, - deleteButton, - confirmDeleteButton - } - }; - - AddChild(internalHBox); - } - - protected override void Dispose(bool disposing) - { - base.Dispose(disposing); - if (!disposing) - return; - - IoCManager.Resolve().DeleteEntity(_previewDummy); - _previewDummy = default; - } - } - } -} diff --git a/Content.Client/Preferences/UI/HumanoidProfileEditor.Random.cs b/Content.Client/Preferences/UI/HumanoidProfileEditor.Random.cs deleted file mode 100644 index e12da12d0a3..00000000000 --- a/Content.Client/Preferences/UI/HumanoidProfileEditor.Random.cs +++ /dev/null @@ -1,22 +0,0 @@ -using Content.Shared.Preferences; - -namespace Content.Client.Preferences.UI; - -public sealed partial class HumanoidProfileEditor -{ - private void RandomizeEverything() - { - Profile = HumanoidCharacterProfile.Random(); - UpdateControls(); - IsDirty = true; - } - - private void RandomizeName() - { - if (Profile == null) - return; - var name = HumanoidCharacterProfile.GetName(Profile.Species, Profile.Gender); - SetName(name); - UpdateNameEdit(); - } -} diff --git a/Content.Client/Preferences/UI/HumanoidProfileEditor.xaml b/Content.Client/Preferences/UI/HumanoidProfileEditor.xaml deleted file mode 100644 index 546a11b637b..00000000000 --- a/Content.Client/Preferences/UI/HumanoidProfileEditor.xaml +++ /dev/null @@ -1,236 +0,0 @@ - - - - - - - - - - - - - public AlignRCDConstruction(PlacementManager pMan) : base(pMan) { - var dependencies = IoCManager.Instance!; - _entityManager = dependencies.Resolve(); - _mapManager = dependencies.Resolve(); - _playerManager = dependencies.Resolve(); - _stateManager = dependencies.Resolve(); - + IoCManager.InjectDependencies(this); _mapSystem = _entityManager.System(); _rcdSystem = _entityManager.System(); _transformSystem = _entityManager.System(); diff --git a/Content.Client/RadialSelector/RadialSelectorMenuBUI.cs b/Content.Client/RadialSelector/RadialSelectorMenuBUI.cs new file mode 100644 index 00000000000..6b2a89f7a98 --- /dev/null +++ b/Content.Client/RadialSelector/RadialSelectorMenuBUI.cs @@ -0,0 +1,202 @@ +using System.Linq; +using System.Numerics; +using Content.Client.UserInterface.Controls; +using Content.Shared.Construction.Prototypes; +using Content.Shared.RadialSelector; +using JetBrains.Annotations; +using Robust.Client.GameObjects; +using Robust.Client.Graphics; +using Robust.Client.Input; +using Robust.Client.ResourceManagement; +using Robust.Client.UserInterface; +using Robust.Client.UserInterface.Controls; +using Robust.Shared.Prototypes; + +// ReSharper disable InconsistentNaming + +namespace Content.Client.RadialSelector; + +[UsedImplicitly] +public sealed class RadialSelectorMenuBUI : BoundUserInterface +{ + [Dependency] private readonly IClyde _displayManager = default!; + [Dependency] private readonly IInputManager _inputManager = default!; + [Dependency] private readonly IResourceCache _resources = default!; + [Dependency] private readonly IPrototypeManager _protoManager = default!; + [Dependency] private readonly IEntityManager _entManager = default!; + + private readonly SpriteSystem _spriteSystem; + + private readonly RadialMenu _menu; + + // Used to clearing on state changing + private readonly HashSet _cachedContainers = new(); + + private bool _openCentered; + private readonly Vector2 ItemSize = Vector2.One * 64; + + public RadialSelectorMenuBUI(EntityUid owner, Enum uiKey) : base(owner, uiKey) + { + _spriteSystem = _entManager.System(); + _menu = new RadialMenu + { + HorizontalExpand = true, + VerticalExpand = true, + BackButtonStyleClass = "RadialMenuBackButton", + CloseButtonStyleClass = "RadialMenuCloseButton" + }; + } + + protected override void Open() + { + _menu.OnClose += Close; + + if (_openCentered) + _menu.OpenCentered(); + else + _menu.OpenCenteredAt(_inputManager.MouseScreenPosition.Position / _displayManager.ScreenSize); + } + + protected override void UpdateState(BoundUserInterfaceState state) + { + base.UpdateState(state); + + if (state is not RadialSelectorState radialSelectorState) + return; + + ClearExistingContainers(); + CreateMenu(radialSelectorState.Entries); + _openCentered = radialSelectorState.OpenCentered; + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + if (disposing) + _menu.Dispose(); + } + + private void CreateMenu(List entries, string parentCategory = "") + { + var container = new RadialContainer + { + Name = !string.IsNullOrEmpty(parentCategory) ? parentCategory : "Main", + Radius = 48f + 24f * MathF.Log(entries.Count), + }; + + _menu.AddChild(container); + _cachedContainers.Add(container); + + foreach (var entry in entries) + { + if (entry.Category != null) + { + var button = CreateButton(entry.Category.Name, _spriteSystem.Frame0(entry.Category.Icon)); + button.TargetLayer = entry.Category.Name; + CreateMenu(entry.Category.Entries, entry.Category.Name); + container.AddChild(button); + } + else if (entry.Prototype != null) + { + var name = GetName(entry.Prototype); + var icon = GetTextures(entry); + var button = CreateButton(name, icon); + button.OnButtonUp += _ => + { + var msg = new RadialSelectorSelectedMessage(entry.Prototype); + SendPredictedMessage(msg); + }; + + container.AddChild(button); + } + } + } + + private string GetName(string proto) + { + if (_protoManager.TryIndex(proto, out var prototype)) + return prototype.Name; + + if (_protoManager.TryIndex(proto, out ConstructionPrototype? constructionPrototype)) + return constructionPrototype.Name; + + return proto; + } + + private List GetTextures(RadialSelectorEntry entry) + { + var result = new List(); + if (entry.Icon is not null) + { + result.Add(_spriteSystem.Frame0(entry.Icon)); + return result; + } + + if (_protoManager.TryIndex(entry.Prototype!, out var prototype)) + { + result.AddRange(SpriteComponent.GetPrototypeTextures(prototype, _resources).Select(o => o.Default)); + return result; + } + + if (_protoManager.TryIndex(entry.Prototype!, out ConstructionPrototype? constructionProto)) + { + result.Add(_spriteSystem.Frame0(constructionProto.Icon)); + return result; + } + + // No icons provided and no icons found in prototypes. There's nothing we can do. + return result; + } + + 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 RadialMenuTextureButton CreateButton(string name, List icons) + { + var button = new RadialMenuTextureButton + { + ToolTip = Loc.GetString(name), + StyleClasses = { "RadialMenuButton" }, + SetSize = ItemSize + }; + + var iconScale = ItemSize / icons[0].Size; + var texture = new LayeredTextureRect + { + VerticalAlignment = Control.VAlignment.Center, + HorizontalAlignment = Control.HAlignment.Center, + Textures = icons, + TextureScale = iconScale + }; + + button.AddChild(texture); + return button; + } + + private void ClearExistingContainers() + { + foreach (var container in _cachedContainers) + _menu.RemoveChild(container); + + _cachedContainers.Clear(); + } +} diff --git a/Content.Client/Replay/Spectator/ReplaySpectatorSystem.Position.cs b/Content.Client/Replay/Spectator/ReplaySpectatorSystem.Position.cs index 2ee7e30ec9a..d00e319eed9 100644 --- a/Content.Client/Replay/Spectator/ReplaySpectatorSystem.Position.cs +++ b/Content.Client/Replay/Spectator/ReplaySpectatorSystem.Position.cs @@ -195,9 +195,16 @@ private void OnParentChanged(EntityUid uid, ReplaySpectatorComponent component, if (uid != _player.LocalEntity) return; - if (args.Transform.MapUid != null || args.OldMapId == MapId.Nullspace) + if (args.Transform.MapUid != null || args.OldMapId == null) return; + if (_spectatorData != null) + { + // Currently scrubbing/setting the replay tick + // the observer will get respawned once the state was applied + return; + } + // The entity being spectated from was moved to null-space. // This was probably because they were spectating some entity in a client-side replay that left PVS range. // Simple respawn the ghost. diff --git a/Content.Client/Robotics/Systems/RoboticsConsoleSystem.cs b/Content.Client/Robotics/Systems/RoboticsConsoleSystem.cs new file mode 100644 index 00000000000..0219c965cde --- /dev/null +++ b/Content.Client/Robotics/Systems/RoboticsConsoleSystem.cs @@ -0,0 +1,7 @@ +using Content.Shared.Robotics.Systems; + +namespace Content.Client.Robotics.Systems; + +public sealed class RoboticsConsoleSystem : SharedRoboticsConsoleSystem +{ +} diff --git a/Content.Client/Robotics/UI/RoboticsConsoleBoundUserInterface.cs b/Content.Client/Robotics/UI/RoboticsConsoleBoundUserInterface.cs new file mode 100644 index 00000000000..6185979eee6 --- /dev/null +++ b/Content.Client/Robotics/UI/RoboticsConsoleBoundUserInterface.cs @@ -0,0 +1,50 @@ +using Content.Shared.Robotics; +using Robust.Client.GameObjects; + +namespace Content.Client.Robotics.UI; + +public sealed class RoboticsConsoleBoundUserInterface : BoundUserInterface +{ + [ViewVariables] + public RoboticsConsoleWindow _window = default!; + + public RoboticsConsoleBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey) + { + } + + protected override void Open() + { + base.Open(); + + _window = new RoboticsConsoleWindow(Owner); + _window.OnDisablePressed += address => + { + SendMessage(new RoboticsConsoleDisableMessage(address)); + }; + _window.OnDestroyPressed += address => + { + SendMessage(new RoboticsConsoleDestroyMessage(address)); + }; + _window.OnClose += Close; + + _window.OpenCentered(); + } + + protected override void UpdateState(BoundUserInterfaceState state) + { + base.UpdateState(state); + + if (state is not RoboticsConsoleState cast) + return; + + _window?.UpdateState(cast); + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + + if (disposing) + _window?.Dispose(); + } +} diff --git a/Content.Client/Robotics/UI/RoboticsConsoleWindow.xaml b/Content.Client/Robotics/UI/RoboticsConsoleWindow.xaml new file mode 100644 index 00000000000..a3b39787900 --- /dev/null +++ b/Content.Client/Robotics/UI/RoboticsConsoleWindow.xaml @@ -0,0 +1,40 @@ + + + + + + + + + + /// /// - private List GetViewportMapObjects(Matrix3 matty, List mapObjects) + private List GetViewportMapObjects(Matrix3x2 matty, List mapObjects) { var results = new List(); var enlargement = new Vector2i((int) (16 * UIScale), (int) (16 * UIScale)); @@ -217,7 +217,7 @@ private List GetViewportMapObjects(Matrix3 matty, List m var mapCoords = _shuttles.GetMapCoordinates(mapObj); - var relativePos = matty.Transform(mapCoords.Position); + var relativePos = Vector2.Transform(mapCoords.Position, matty); relativePos = relativePos with { Y = -relativePos.Y }; var uiPosition = ScalePosition(relativePos); @@ -250,7 +250,7 @@ protected override void Draw(DrawingHandleScreen handle) DrawParallax(handle); var viewedMapUid = _mapManager.GetMapEntityId(ViewingMap); - var matty = Matrix3.CreateInverseTransform(Offset, Angle.Zero); + var matty = Matrix3Helpers.CreateInverseTransform(Offset, Angle.Zero); var realTime = _timing.RealTime; var viewBox = new Box2(Offset - WorldRangeVector, Offset + WorldRangeVector); var viewportObjects = GetViewportMapObjects(matty, mapObjects); @@ -267,7 +267,7 @@ protected override void Draw(DrawingHandleScreen handle) var (gridPos, gridRot) = _xformSystem.GetWorldPositionRotation(shuttleXform); gridPos = Maps.GetGridPosition((gridUid, gridPhysics), gridPos, gridRot); - var gridRelativePos = matty.Transform(gridPos); + var gridRelativePos = Vector2.Transform(gridPos, matty); gridRelativePos = gridRelativePos with { Y = -gridRelativePos.Y }; var gridUiPos = ScalePosition(gridRelativePos); @@ -296,7 +296,7 @@ protected override void Draw(DrawingHandleScreen handle) continue; } - var adjustedPos = matty.Transform(mapCoords.Position); + var adjustedPos = Vector2.Transform(mapCoords.Position, matty); var localPos = ScalePosition(adjustedPos with { Y = -adjustedPos.Y}); handle.DrawCircle(localPos, exclusion.Range * MinimapScale, exclusionColor.WithAlpha(0.05f)); handle.DrawCircle(localPos, exclusion.Range * MinimapScale, exclusionColor, filled: false); @@ -319,7 +319,7 @@ protected override void Draw(DrawingHandleScreen handle) foreach (var (beaconName, coords, mapO) in GetBeacons(viewportObjects, matty, controlLocalBounds)) { - var localPos = matty.Transform(coords.Position); + var localPos = Vector2.Transform(coords.Position, matty); localPos = localPos with { Y = -localPos.Y }; var beaconUiPos = ScalePosition(localPos); var mapObject = GetMapObject(localPos, Angle.Zero, scale: 0.75f, scalePosition: true); @@ -360,7 +360,7 @@ protected override void Draw(DrawingHandleScreen handle) var (gridPos, gridRot) = _xformSystem.GetWorldPositionRotation(grid.Owner); gridPos = Maps.GetGridPosition((grid, gridPhysics), gridPos, gridRot); - var gridRelativePos = matty.Transform(gridPos); + var gridRelativePos = Vector2.Transform(gridPos, matty); gridRelativePos = gridRelativePos with { Y = -gridRelativePos.Y }; var gridUiPos = ScalePosition(gridRelativePos); @@ -439,7 +439,7 @@ protected override void Draw(DrawingHandleScreen handle) var color = ftlFree ? Color.LimeGreen : Color.Magenta; - var gridRelativePos = matty.Transform(gridPos); + var gridRelativePos = Vector2.Transform(gridPos, matty); gridRelativePos = gridRelativePos with { Y = -gridRelativePos.Y }; var gridUiPos = ScalePosition(gridRelativePos); @@ -512,7 +512,7 @@ private void AddMapObject(List edges, List verts, ValueList /// Returns the beacons that intersect the viewport. /// - private IEnumerable<(string Beacon, MapCoordinates Coordinates, IMapObject MapObject)> GetBeacons(List mapObjs, Matrix3 mapTransform, UIBox2i area) + private IEnumerable<(string Beacon, MapCoordinates Coordinates, IMapObject MapObject)> GetBeacons(List mapObjs, Matrix3x2 mapTransform, UIBox2i area) { foreach (var mapO in mapObjs) { @@ -520,7 +520,7 @@ private void AddMapObject(List edges, List verts, ValueList GetMapObject(Vector2 localPos, Angle angle, float sca return mapObj; } - private bool TryGetBeacon(IEnumerable mapObjects, Matrix3 mapTransform, Vector2 mousePos, UIBox2i area, out ShuttleBeaconObject foundBeacon, out Vector2 foundLocalPos) + private bool TryGetBeacon(IEnumerable mapObjects, Matrix3x2 mapTransform, Vector2 mousePos, UIBox2i area, out ShuttleBeaconObject foundBeacon, out Vector2 foundLocalPos) { // In pixels const float BeaconSnapRange = 32f; @@ -579,7 +579,7 @@ private bool TryGetBeacon(IEnumerable mapObjects, Matrix3 mapTransfo if (!_shuttles.CanFTLBeacon(beaconObj.Coordinates)) continue; - var position = mapTransform.Transform(beaconCoords.Position); + var position = Vector2.Transform(beaconCoords.Position, mapTransform); var localPos = ScalePosition(position with {Y = -position.Y}); // If beacon not on screen then ignore it. diff --git a/Content.Client/Shuttles/UI/ShuttleNavControl.xaml.cs b/Content.Client/Shuttles/UI/ShuttleNavControl.xaml.cs index 00ee6890b28..0b8720add21 100644 --- a/Content.Client/Shuttles/UI/ShuttleNavControl.xaml.cs +++ b/Content.Client/Shuttles/UI/ShuttleNavControl.xaml.cs @@ -137,10 +137,10 @@ protected override void Draw(DrawingHandleScreen handle) var mapPos = _transform.ToMapCoordinates(_coordinates.Value); var offset = _coordinates.Value.Position; - var posMatrix = Matrix3.CreateTransform(offset, _rotation.Value); + var posMatrix = Matrix3Helpers.CreateTransform(offset, _rotation.Value); var (_, ourEntRot, ourEntMatrix) = _transform.GetWorldPositionRotationMatrix(_coordinates.Value.EntityId); - Matrix3.Multiply(posMatrix, ourEntMatrix, out var ourWorldMatrix); - var ourWorldMatrixInvert = ourWorldMatrix.Invert(); + var ourWorldMatrix = Matrix3x2.Multiply(posMatrix, ourEntMatrix); + Matrix3x2.Invert(ourWorldMatrix, out var ourWorldMatrixInvert); // Draw our grid in detail var ourGridId = xform.GridUid; @@ -148,7 +148,7 @@ protected override void Draw(DrawingHandleScreen handle) fixturesQuery.HasComponent(ourGridId.Value)) { var ourGridMatrix = _transform.GetWorldMatrix(ourGridId.Value); - Matrix3.Multiply(in ourGridMatrix, in ourWorldMatrixInvert, out var matrix); + var matrix = Matrix3x2.Multiply(ourGridMatrix, ourWorldMatrixInvert); var color = _shuttles.GetIFFColor(ourGridId.Value, self: true); DrawGrid(handle, matrix, (ourGridId.Value, ourGrid), color); @@ -194,7 +194,7 @@ protected override void Draw(DrawingHandleScreen handle) continue; var gridMatrix = _transform.GetWorldMatrix(gUid); - Matrix3.Multiply(in gridMatrix, in ourWorldMatrixInvert, out var matty); + var matty = Matrix3x2.Multiply(gridMatrix, ourWorldMatrixInvert); var color = _shuttles.GetIFFColor(grid, self: false, iff); // Others default: @@ -207,7 +207,7 @@ protected override void Draw(DrawingHandleScreen handle) { var gridBounds = grid.Comp.LocalAABB; - var gridCentre = matty.Transform(gridBody.LocalCenter); + var gridCentre = Vector2.Transform(gridBody.LocalCenter, matty); gridCentre.Y = -gridCentre.Y; var distance = gridCentre.Length(); var labelText = Loc.GetString("shuttle-console-iff-label", ("name", labelName), @@ -242,7 +242,7 @@ protected override void Draw(DrawingHandleScreen handle) } } - private void DrawDocks(DrawingHandleScreen handle, EntityUid uid, Matrix3 matrix) + private void DrawDocks(DrawingHandleScreen handle, EntityUid uid, Matrix3x2 matrix) { if (!ShowDocks) return; @@ -255,7 +255,7 @@ private void DrawDocks(DrawingHandleScreen handle, EntityUid uid, Matrix3 matrix foreach (var state in docks) { var position = state.Coordinates.Position; - var uiPosition = matrix.Transform(position); + var uiPosition = Vector2.Transform(position, matrix); if (uiPosition.Length() > (WorldRange * 2f) - DockScale) continue; @@ -264,10 +264,10 @@ private void DrawDocks(DrawingHandleScreen handle, EntityUid uid, Matrix3 matrix var verts = new[] { - matrix.Transform(position + new Vector2(-DockScale, -DockScale)), - matrix.Transform(position + new Vector2(DockScale, -DockScale)), - matrix.Transform(position + new Vector2(DockScale, DockScale)), - matrix.Transform(position + new Vector2(-DockScale, DockScale)), + Vector2.Transform(position + new Vector2(-DockScale, -DockScale), matrix), + Vector2.Transform(position + new Vector2(DockScale, -DockScale), matrix), + Vector2.Transform(position + new Vector2(DockScale, DockScale), matrix), + Vector2.Transform(position + new Vector2(-DockScale, DockScale), matrix), }; for (var i = 0; i < verts.Length; i++) diff --git a/Content.Client/SimpleStation14/Overlays/Shaders/NearsightedOverlays.cs b/Content.Client/SimpleStation14/Overlays/Shaders/NearsightedOverlays.cs deleted file mode 100644 index 2597975bd4e..00000000000 --- a/Content.Client/SimpleStation14/Overlays/Shaders/NearsightedOverlays.cs +++ /dev/null @@ -1,130 +0,0 @@ -using Content.Shared.SimpleStation14.Traits.Components; -using Robust.Client.GameObjects; -using Robust.Client.Graphics; -using Robust.Client.Player; -using Robust.Shared.Enums; -using Robust.Shared.Prototypes; -using Robust.Shared.Timing; - -namespace Content.Client.SimpleStation14.Overlays.Shaders; - -public sealed class NearsightedOverlay : Overlay -{ - [Dependency] private readonly IGameTiming _timing = default!; - [Dependency] private readonly IPrototypeManager _prototypeManager = default!; - [Dependency] private readonly IEntityManager _entityManager = default!; - [Dependency] private readonly IPlayerManager _playerManager = default!; - - public override OverlaySpace Space => OverlaySpace.WorldSpace; - private readonly ShaderInstance _nearsightShader; - - public float Radius; - private float _oldRadius; - public float Darkness; - private float _oldDarkness; - - private float _lerpTime; - public float LerpDuration; - - - public NearsightedOverlay() - { - IoCManager.InjectDependencies(this); - _nearsightShader = _prototypeManager.Index("GradientCircleMask").InstanceUnique(); - } - - protected override bool BeforeDraw(in OverlayDrawArgs args) - { - // Check if the player has a NearsightedComponent and is controlling it - if (!_entityManager.TryGetComponent(_playerManager.LocalPlayer?.ControlledEntity, out NearsightedComponent? nearComp) || - _playerManager.LocalPlayer?.ControlledEntity != nearComp.Owner) - return false; - - // Check if the player has an EyeComponent and if the overlay should be drawn for this eye - if (!_entityManager.TryGetComponent(_playerManager.LocalPlayer?.ControlledEntity, out EyeComponent? eyeComp) || - args.Viewport.Eye != eyeComp.Eye) - return false; - - return true; - } - - protected override void Draw(in OverlayDrawArgs args) - { - // We already checked if they have a NearsightedComponent and are controlling it in BeforeDraw, so we assume this hasn't changed - var nearComp = _entityManager.GetComponent(_playerManager.LocalPlayer!.ControlledEntity!.Value); - - // Set LerpDuration based on nearComp.LerpDuration - LerpDuration = nearComp.LerpDuration; - - // Set the radius and darkness values based on whether the player is wearing glasses or not - if (nearComp.Active) - { - Radius = nearComp.EquippedRadius; - Darkness = nearComp.EquippedAlpha; - } - else - { - Radius = nearComp.Radius; - Darkness = nearComp.Alpha; - } - - - var viewport = args.WorldAABB; - var handle = args.WorldHandle; - var distance = args.ViewportBounds.Width; - - var lastFrameTime = (float) _timing.FrameTime.TotalSeconds; - - - // If the current radius value is different from the previous one, lerp between them - if (!MathHelper.CloseTo(_oldRadius, Radius, 0.001f)) - { - _lerpTime += lastFrameTime; - var t = MathHelper.Clamp(_lerpTime / LerpDuration, 0f, 1f); // Calculate lerp time - _oldRadius = MathHelper.Lerp(_oldRadius, Radius, t); // Lerp between old and new radius values - } - // If the current radius value is the same as the previous one, reset the lerp time and old radius value - else - { - _lerpTime = 0f; - _oldRadius = Radius; - } - - // If the current darkness value is different from the previous one, lerp between them - if (!MathHelper.CloseTo(_oldDarkness, Darkness, 0.001f)) - { - _lerpTime += lastFrameTime; - var t = MathHelper.Clamp(_lerpTime / LerpDuration, 0f, 1f); // Calculate lerp time - _oldDarkness = MathHelper.Lerp(_oldDarkness, Darkness, t); // Lerp between old and new darkness values - } - // If the current darkness value is the same as the previous one, reset the lerp time and old darkness value - else - { - _lerpTime = 0f; - _oldDarkness = Darkness; - } - - - // Calculate the outer and inner radii based on the current radius value - var outerMaxLevel = 0.6f * distance; - var outerMinLevel = 0.06f * distance; - var innerMaxLevel = 0.02f * distance; - var innerMinLevel = 0.02f * distance; - - var outerRadius = outerMaxLevel - _oldRadius * (outerMaxLevel - outerMinLevel); - var innerRadius = innerMaxLevel - _oldRadius * (innerMaxLevel - innerMinLevel); - - // Set the shader parameters and draw the overlay - _nearsightShader.SetParameter("time", 0.0f); - _nearsightShader.SetParameter("color", new Vector3(1f, 1f, 1f)); - _nearsightShader.SetParameter("darknessAlphaOuter", _oldDarkness); - _nearsightShader.SetParameter("innerCircleRadius", innerRadius); - _nearsightShader.SetParameter("innerCircleMaxRadius", innerRadius); - _nearsightShader.SetParameter("outerCircleRadius", outerRadius); - _nearsightShader.SetParameter("outerCircleMaxRadius", outerRadius + 0.2f * distance); - handle.UseShader(_nearsightShader); - handle.DrawRect(viewport, Color.Black); - - handle.UseShader(null); - } -} diff --git a/Content.Client/SimpleStation14/Overlays/Systems/NearsightedSystems.cs b/Content.Client/SimpleStation14/Overlays/Systems/NearsightedSystems.cs deleted file mode 100644 index dedb067429c..00000000000 --- a/Content.Client/SimpleStation14/Overlays/Systems/NearsightedSystems.cs +++ /dev/null @@ -1,64 +0,0 @@ -using Content.Client.SimpleStation14.Overlays.Shaders; -using Content.Shared.Inventory.Events; -using Content.Shared.SimpleStation14.Traits; -using Content.Shared.SimpleStation14.Traits.Components; -using Content.Shared.Tag; -using Robust.Client.Graphics; - -namespace Content.Client.SimpleStation14.Overlays.Systems; - -public sealed class NearsightedSystem : EntitySystem -{ - [Dependency] private readonly IOverlayManager _overlayMan = default!; - - private NearsightedOverlay _overlay = default!; - - public override void Initialize() - { - base.Initialize(); - - _overlay = new NearsightedOverlay(); - - SubscribeLocalEvent(OnStartup); - SubscribeLocalEvent(OnEquip); - SubscribeLocalEvent(OnUnEquip); - } - - - private void OnStartup(EntityUid uid, NearsightedComponent component, ComponentStartup args) - { - UpdateShader(component, false); - } - - private void OnEquip(GotEquippedEvent args) - { - // Note: it would be cleaner to check if the glasses are being equipped - // to the eyes rather than the pockets using `args.SlotFlags.HasFlag(SlotFlags.EYES)`, - // but this field is not present on GotUnequippedEvent. This method is - // used for both equip and unequip to make it consistent between checks. - if (TryComp(args.Equipee, out var nearsighted) && - EnsureComp(args.Equipment).Tags.Contains("GlassesNearsight") && - args.Slot == "eyes") - UpdateShader(nearsighted, true); - } - - private void OnUnEquip(GotUnequippedEvent args) - { - if (TryComp(args.Equipee, out var nearsighted) && - EnsureComp(args.Equipment).Tags.Contains("GlassesNearsight") && - args.Slot == "eyes") - UpdateShader(nearsighted, false); - } - - - private void UpdateShader(NearsightedComponent component, bool booLean) - { - while (_overlayMan.HasOverlay()) - { - _overlayMan.RemoveOverlay(_overlay); - } - - component.Active = booLean; - _overlayMan.AddOverlay(_overlay); - } -} diff --git a/Content.Client/Standing/LayingDownSystem.cs b/Content.Client/Standing/LayingDownSystem.cs new file mode 100644 index 00000000000..d45d4811340 --- /dev/null +++ b/Content.Client/Standing/LayingDownSystem.cs @@ -0,0 +1,89 @@ +using Content.Shared.Buckle; +using Content.Shared.Rotation; +using Content.Shared.Standing; +using Robust.Client.GameObjects; +using Robust.Client.Graphics; +using Robust.Shared.Configuration; +using Robust.Shared.Timing; + +namespace Content.Client.Standing; + +public sealed class LayingDownSystem : SharedLayingDownSystem +{ + [Dependency] private readonly IGameTiming _timing = default!; + [Dependency] private readonly IEyeManager _eyeManager = default!; + [Dependency] private readonly StandingStateSystem _standing = default!; + [Dependency] private readonly AnimationPlayerSystem _animation = default!; + [Dependency] private readonly SharedBuckleSystem _buckle = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnMovementInput); + SubscribeNetworkEvent(OnCheckAutoGetUp); + } + + public override void Update(float frameTime) + { + // Update draw depth of laying down entities as necessary + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var layingDown, out var standing, out var sprite)) + { + // Do not modify the entities draw depth if it's modified externally + if (sprite.DrawDepth != layingDown.NormalDrawDepth && sprite.DrawDepth != layingDown.CrawlingUnderDrawDepth) + continue; + + sprite.DrawDepth = standing.CurrentState is StandingState.Lying && layingDown.IsCrawlingUnder + ? layingDown.CrawlingUnderDrawDepth + : layingDown.NormalDrawDepth; + } + + query.Dispose(); + } + + private void OnMovementInput(EntityUid uid, LayingDownComponent component, MoveEvent args) + { + if (!_timing.IsFirstTimePredicted + || !_standing.IsDown(uid) + || _buckle.IsBuckled(uid) + || _animation.HasRunningAnimation(uid, "rotate") + || !TryComp(uid, out var transform) + || !TryComp(uid, out var sprite) + || !TryComp(uid, out var rotationVisuals)) + return; + + var rotation = transform.LocalRotation + (_eyeManager.CurrentEye.Rotation - (transform.LocalRotation - transform.WorldRotation)); + + if (rotation.GetDir() is Direction.SouthEast or Direction.East or Direction.NorthEast or Direction.North) + { + rotationVisuals.HorizontalRotation = Angle.FromDegrees(270); + sprite.Rotation = Angle.FromDegrees(270); + return; + } + + rotationVisuals.HorizontalRotation = Angle.FromDegrees(90); + sprite.Rotation = Angle.FromDegrees(90); + } + + private void OnCheckAutoGetUp(CheckAutoGetUpEvent ev, EntitySessionEventArgs args) + { + if (!_timing.IsFirstTimePredicted) + return; + + var uid = GetEntity(ev.User); + + if (!TryComp(uid, out var transform) || !TryComp(uid, out var rotationVisuals)) + return; + + var rotation = transform.LocalRotation + (_eyeManager.CurrentEye.Rotation - (transform.LocalRotation - transform.WorldRotation)); + + if (rotation.GetDir() is Direction.SouthEast or Direction.East or Direction.NorthEast or Direction.North) + { + rotationVisuals.HorizontalRotation = Angle.FromDegrees(270); + return; + } + + rotationVisuals.HorizontalRotation = Angle.FromDegrees(90); + } +} diff --git a/Content.Client/Station/StationSpawningSystem.cs b/Content.Client/Station/StationSpawningSystem.cs index 65da518d229..71dce5a78f3 100644 --- a/Content.Client/Station/StationSpawningSystem.cs +++ b/Content.Client/Station/StationSpawningSystem.cs @@ -2,7 +2,4 @@ namespace Content.Client.Station; -public sealed class StationSpawningSystem : SharedStationSpawningSystem -{ - -} +public sealed class StationSpawningSystem : SharedStationSpawningSystem; diff --git a/Content.Client/StatusIcon/StatusIconOverlay.cs b/Content.Client/StatusIcon/StatusIconOverlay.cs index f8381afdbe4..372bd04f571 100644 --- a/Content.Client/StatusIcon/StatusIconOverlay.cs +++ b/Content.Client/StatusIcon/StatusIconOverlay.cs @@ -39,8 +39,8 @@ protected override void Draw(in OverlayDrawArgs args) var eyeRot = args.Viewport.Eye?.Rotation ?? default; var xformQuery = _entity.GetEntityQuery(); - var scaleMatrix = Matrix3.CreateScale(new Vector2(1, 1)); - var rotationMatrix = Matrix3.CreateRotation(-eyeRot); + var scaleMatrix = Matrix3Helpers.CreateScale(new Vector2(1, 1)); + var rotationMatrix = Matrix3Helpers.CreateRotation(-eyeRot); var query = _entity.AllEntityQueryEnumerator(); while (query.MoveNext(out var uid, out var comp, out var sprite, out var xform, out var meta)) @@ -59,9 +59,9 @@ protected override void Draw(in OverlayDrawArgs args) if (icons.Count == 0) continue; - var worldMatrix = Matrix3.CreateTranslation(worldPos); - Matrix3.Multiply(scaleMatrix, worldMatrix, out var scaledWorld); - Matrix3.Multiply(rotationMatrix, scaledWorld, out var matty); + var worldMatrix = Matrix3Helpers.CreateTranslation(worldPos); + var scaledWorld = Matrix3x2.Multiply(scaleMatrix, worldMatrix); + var matty = Matrix3x2.Multiply(rotationMatrix, scaledWorld); handle.SetTransform(matty); var countL = 0; diff --git a/Content.Client/Storage/Components/StorageContainerVisualsComponent.cs b/Content.Client/Storage/Components/StorageContainerVisualsComponent.cs index 9f07867da85..9ef6c65e890 100644 --- a/Content.Client/Storage/Components/StorageContainerVisualsComponent.cs +++ b/Content.Client/Storage/Components/StorageContainerVisualsComponent.cs @@ -1,4 +1,5 @@ using Content.Client.Chemistry.Visualizers; +using Content.Shared.Chemistry.Components; namespace Content.Client.Storage.Components; diff --git a/Content.Client/Storage/StorageBoundUserInterface.cs b/Content.Client/Storage/StorageBoundUserInterface.cs index f7fdbb83675..899df30f7fc 100644 --- a/Content.Client/Storage/StorageBoundUserInterface.cs +++ b/Content.Client/Storage/StorageBoundUserInterface.cs @@ -17,6 +17,14 @@ public StorageBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKe _storage = _entManager.System(); } + protected override void Open() + { + base.Open(); + + if (_entManager.TryGetComponent(Owner, out var comp)) + _storage.OpenStorageWindow((Owner, comp)); + } + protected override void Dispose(bool disposing) { base.Dispose(disposing); @@ -25,16 +33,5 @@ protected override void Dispose(bool disposing) _storage.CloseStorageWindow(Owner); } - - protected override void ReceiveMessage(BoundUserInterfaceMessage message) - { - base.ReceiveMessage(message); - - if (message is StorageModifyWindowMessage) - { - if (_entManager.TryGetComponent(Owner, out var comp)) - _storage.OpenStorageWindow((Owner, comp)); - } - } } diff --git a/Content.Client/Storage/Systems/StorageSystem.cs b/Content.Client/Storage/Systems/StorageSystem.cs index ce0a6bf1ca4..b80a855f986 100644 --- a/Content.Client/Storage/Systems/StorageSystem.cs +++ b/Content.Client/Storage/Systems/StorageSystem.cs @@ -1,4 +1,5 @@ -using System.Linq; +using System.Linq; +using System.Numerics; using Content.Client.Animations; using Content.Shared.Hands; using Content.Shared.Storage; @@ -26,7 +27,7 @@ public override void Initialize() SubscribeLocalEvent(OnShutdown); SubscribeNetworkEvent(HandlePickupAnimation); - SubscribeNetworkEvent(HandleAnimatingInsertingEntities); + SubscribeAllEvent(HandleAnimatingInsertingEntities); } public override void UpdateUI(Entity entity) @@ -111,7 +112,7 @@ private void CloseStorageBoundUserInterface(Entity enti if (!Resolve(entity, ref entity.Comp, false)) return; - if (entity.Comp.OpenInterfaces.GetValueOrDefault(StorageComponent.StorageUiKey.Key) is not { } bui) + if (entity.Comp.ClientOpenInterfaces.GetValueOrDefault(StorageComponent.StorageUiKey.Key) is not { } bui) return; bui.Close(); @@ -149,7 +150,7 @@ public void PickupAnimation(EntityUid item, EntityCoordinates initialCoords, Ent } var finalMapPos = finalCoords.ToMapPos(EntityManager, TransformSystem); - var finalPos = TransformSystem.GetInvWorldMatrix(initialCoords.EntityId).Transform(finalMapPos); + var finalPos = Vector2.Transform(finalMapPos, TransformSystem.GetInvWorldMatrix(initialCoords.EntityId)); _entityPickupAnimation.AnimateEntityPickup(item, initialCoords, finalPos, initialAngle); } diff --git a/Content.Client/Store/Ui/StoreMenu.xaml.cs b/Content.Client/Store/Ui/StoreMenu.xaml.cs index b7a2c285fe5..7eb597f2f39 100644 --- a/Content.Client/Store/Ui/StoreMenu.xaml.cs +++ b/Content.Client/Store/Ui/StoreMenu.xaml.cs @@ -3,6 +3,7 @@ using Content.Client.Message; using Content.Shared.FixedPoint; using Content.Shared.Store; +using Content.Client.Stylesheets; using Robust.Client.AutoGenerated; using Robust.Client.GameObjects; using Robust.Client.Graphics; @@ -147,6 +148,10 @@ private void AddListingGui(ListingData listing) } var newListing = new StoreListingControl(listing, GetListingPriceString(listing), hasBalance, texture); + + if (listing.DiscountValue > 0) + newListing.StoreItemBuyButton.AddStyleClass(StyleNano.ButtonColorDangerDefault.ToString()); + newListing.StoreItemBuyButton.OnButtonDown += args => OnListingButtonPressed?.Invoke(args, listing); diff --git a/Content.Client/Strip/StrippableSystem.cs b/Content.Client/Strip/StrippableSystem.cs index c5083d22046..23f38e9d51b 100644 --- a/Content.Client/Strip/StrippableSystem.cs +++ b/Content.Client/Strip/StrippableSystem.cs @@ -35,7 +35,7 @@ public void UpdateUi(EntityUid uid, StrippableComponent? component = null, Entit if (!TryComp(uid, out UserInterfaceComponent? uiComp)) return; - foreach (var ui in uiComp.OpenInterfaces.Values) + foreach (var ui in uiComp.ClientOpenInterfaces.Values) { if (ui is StrippableBoundUserInterface stripUi) stripUi.DirtyMenu(); diff --git a/Content.Client/Stylesheets/StyleBase.cs b/Content.Client/Stylesheets/StyleBase.cs index c304f63d74b..638ef84c8d4 100644 --- a/Content.Client/Stylesheets/StyleBase.cs +++ b/Content.Client/Stylesheets/StyleBase.cs @@ -1,5 +1,6 @@ using System.Numerics; using Content.Client.Resources; +using Content.Client.UserInterface.Controls; using Robust.Client.Graphics; using Robust.Client.ResourceManagement; using Robust.Client.UserInterface; diff --git a/Content.Client/Stylesheets/StyleNano.cs b/Content.Client/Stylesheets/StyleNano.cs index df1daaf44d6..28b0a0c38ab 100644 --- a/Content.Client/Stylesheets/StyleNano.cs +++ b/Content.Client/Stylesheets/StyleNano.cs @@ -141,6 +141,8 @@ public sealed class StyleNano : StyleBase public const string StyleClassPowerStateGood = "PowerStateGood"; public const string StyleClassItemStatus = "ItemStatus"; + public const string StyleClassItemStatusNotHeld = "ItemStatusNotHeld"; + public static readonly Color ItemStatusNotHeldColor = Color.Gray; //Background public const string StyleClassBackgroundBaseDark = "PanelBackgroundBaseDark"; @@ -1256,6 +1258,16 @@ public StyleNano(IResourceCache resCache) : base(resCache) new StyleProperty("font", notoSans10), }), + Element() + .Class(StyleClassItemStatusNotHeld) + .Prop("font", notoSansItalic10) + .Prop("font-color", ItemStatusNotHeldColor), + + Element() + .Class(StyleClassItemStatus) + .Prop(nameof(RichTextLabel.LineHeightScale), 0.7f) + .Prop(nameof(Control.Margin), new Thickness(0, 0, 0, -6)), + // Slider new StyleRule(SelectorElement.Type(typeof(Slider)), new [] { @@ -1399,6 +1411,17 @@ public StyleNano(IResourceCache resCache) : base(resCache) Element().Class("WindowHeadingBackgroundLight") .Prop("panel", new StyleBoxTexture(BaseButtonOpenLeft) { Padding = default }), + // Window Header Help Button + Element().Class(FancyWindow.StyleClassWindowHelpButton) + .Prop(TextureButton.StylePropertyTexture, resCache.GetTexture("/Textures/Interface/Nano/help.png")) + .Prop(Control.StylePropertyModulateSelf, Color.FromHex("#4B596A")), + + Element().Class(FancyWindow.StyleClassWindowHelpButton).Pseudo(ContainerButton.StylePseudoClassHover) + .Prop(Control.StylePropertyModulateSelf, Color.FromHex("#7F3636")), + + Element().Class(FancyWindow.StyleClassWindowHelpButton).Pseudo(ContainerButton.StylePseudoClassPressed) + .Prop(Control.StylePropertyModulateSelf, Color.FromHex("#753131")), + //The lengths you have to go through to change a background color smh Element().Class("PanelBackgroundBaseDark") .Prop("panel", new StyleBoxTexture(BaseButtonOpenBoth) { Padding = default }) diff --git a/Content.Client/Telescope/TelescopeSystem.cs b/Content.Client/Telescope/TelescopeSystem.cs new file mode 100644 index 00000000000..ac2270aa971 --- /dev/null +++ b/Content.Client/Telescope/TelescopeSystem.cs @@ -0,0 +1,128 @@ +using System.Numerics; +using Content.Client.Viewport; +using Content.Shared.CCVar; +using Content.Shared.Telescope; +using Content.Shared.Input; +using Robust.Client.GameObjects; +using Robust.Client.Graphics; +using Robust.Client.Input; +using Robust.Client.Player; +using Robust.Client.UserInterface; +using Robust.Shared.Configuration; +using Robust.Shared.Input; +using Robust.Shared.Input.Binding; +using Robust.Shared.Timing; + +namespace Content.Client.Telescope; + +public sealed class TelescopeSystem : SharedTelescopeSystem +{ + [Dependency] private readonly InputSystem _inputSystem = default!; + [Dependency] private readonly IGameTiming _timing = default!; + [Dependency] private readonly IPlayerManager _player = default!; + [Dependency] private readonly IInputManager _input = default!; + [Dependency] private readonly IEyeManager _eyeManager = default!; + [Dependency] private readonly IUserInterfaceManager _uiManager = default!; + [Dependency] private readonly IConfigurationManager _cfg = default!; + + private ScalingViewport? _viewport; + private bool _holdLookUp; + private bool _toggled; + + public override void Initialize() + { + base.Initialize(); + + _cfg.OnValueChanged(CCVars.HoldLookUp, + val => + { + var input = val ? null : InputCmdHandler.FromDelegate(_ => _toggled = !_toggled); + _input.SetInputCommand(ContentKeyFunctions.LookUp, input); + _holdLookUp = val; + _toggled = false; + }, + true); + } + + public override void FrameUpdate(float frameTime) + { + base.FrameUpdate(frameTime); + + if (_timing.ApplyingState + || !_timing.IsFirstTimePredicted + || !_input.MouseScreenPosition.IsValid) + return; + + var player = _player.LocalEntity; + + var telescope = GetRightTelescope(player); + + if (telescope == null) + { + _toggled = false; + return; + } + + if (!TryComp(player, out var eye)) + return; + + var offset = Vector2.Zero; + + if (_holdLookUp) + { + if (_inputSystem.CmdStates.GetState(ContentKeyFunctions.LookUp) != BoundKeyState.Down) + { + RaiseEvent(offset); + return; + } + } + else if (!_toggled) + { + RaiseEvent(offset); + return; + } + + var mousePos = _input.MouseScreenPosition; + + if (_uiManager.MouseGetControl(mousePos) as ScalingViewport is { } viewport) + _viewport = viewport; + + if (_viewport == null) + return; + + var centerPos = _eyeManager.WorldToScreen(eye.Eye.Position.Position + eye.Offset); + + var diff = mousePos.Position - centerPos; + var len = diff.Length(); + + var size = _viewport.PixelSize; + + var maxLength = Math.Min(size.X, size.Y) * 0.4f; + var minLength = maxLength * 0.2f; + + if (len > maxLength) + { + diff *= maxLength / len; + len = maxLength; + } + + var divisor = maxLength * telescope.Divisor; + + if (len > minLength) + { + diff -= diff * minLength / len; + offset = new Vector2(diff.X / divisor, -diff.Y / divisor); + offset = new Angle(-eye.Rotation.Theta).RotateVec(offset); + } + + RaiseEvent(offset); + } + + private void RaiseEvent(Vector2 offset) + { + RaisePredictiveEvent(new EyeOffsetChangedEvent + { + Offset = offset + }); + } +} diff --git a/Content.Client/Tips/TippyUI.xaml b/Content.Client/Tips/TippyUI.xaml new file mode 100644 index 00000000000..a86e05aaddd --- /dev/null +++ b/Content.Client/Tips/TippyUI.xaml @@ -0,0 +1,11 @@ + + + + + + + + diff --git a/Content.Client/Tips/TippyUI.xaml.cs b/Content.Client/Tips/TippyUI.xaml.cs new file mode 100644 index 00000000000..de3eaf4f51b --- /dev/null +++ b/Content.Client/Tips/TippyUI.xaml.cs @@ -0,0 +1,54 @@ +using Content.Client.Paper; +using Robust.Client.AutoGenerated; +using Robust.Client.Graphics; +using Robust.Client.ResourceManagement; +using Robust.Client.UserInterface.Controls; +using Robust.Client.UserInterface.XAML; + +namespace Content.Client.Tips; + +[GenerateTypedNameReferences] +public sealed partial class TippyUI : UIWidget +{ + public TippyState State = TippyState.Hidden; + public bool ModifyLayers = true; + + public TippyUI() + { + RobustXamlLoader.Load(this); + } + + public void InitLabel(PaperVisualsComponent? visuals, IResourceCache resCache) + { + if (visuals == null) + return; + + Label.ModulateSelfOverride = visuals.FontAccentColor; + + if (visuals.BackgroundImagePath == null) + return; + + LabelPanel.ModulateSelfOverride = visuals.BackgroundModulate; + var backgroundImage = resCache.GetResource(visuals.BackgroundImagePath); + var backgroundImageMode = visuals.BackgroundImageTile ? StyleBoxTexture.StretchMode.Tile : StyleBoxTexture.StretchMode.Stretch; + var backgroundPatchMargin = visuals.BackgroundPatchMargin; + LabelPanel.PanelOverride = new StyleBoxTexture + { + Texture = backgroundImage, + TextureScale = visuals.BackgroundScale, + Mode = backgroundImageMode, + PatchMarginLeft = backgroundPatchMargin.Left, + PatchMarginBottom = backgroundPatchMargin.Bottom, + PatchMarginRight = backgroundPatchMargin.Right, + PatchMarginTop = backgroundPatchMargin.Top + }; + } + + public enum TippyState : byte + { + Hidden, + Revealing, + Speaking, + Hiding, + } +} diff --git a/Content.Client/Tips/TippyUIController.cs b/Content.Client/Tips/TippyUIController.cs new file mode 100644 index 00000000000..2cc694d97d4 --- /dev/null +++ b/Content.Client/Tips/TippyUIController.cs @@ -0,0 +1,241 @@ +using Content.Client.Gameplay; +using System.Numerics; +using Content.Client.Message; +using Content.Client.Paper; +using Content.Shared.CCVar; +using Content.Shared.Movement.Components; +using Content.Shared.Tips; +using Robust.Client.GameObjects; +using Robust.Client.ResourceManagement; +using Robust.Client.State; +using Robust.Client.UserInterface; +using Robust.Client.UserInterface.Controllers; +using Robust.Client.UserInterface.Controls; +using Robust.Client.Audio; +using Robust.Shared.Configuration; +using Robust.Shared.Console; +using Robust.Shared.Map; +using Robust.Shared.Prototypes; +using Robust.Shared.Timing; +using static Content.Client.Tips.TippyUI; + +namespace Content.Client.Tips; + +public sealed class TippyUIController : UIController +{ + [Dependency] private readonly IConfigurationManager _cfg = default!; + [Dependency] private readonly IResourceCache _resCache = default!; + [UISystemDependency] private readonly AudioSystem _audio = default!; + + public const float Padding = 50; + public static Angle WaddleRotation = Angle.FromDegrees(10); + + private EntityUid _entity; + private float _secondsUntilNextState; + private int _previousStep = 0; + private TippyEvent? _currentMessage; + private readonly Queue _queuedMessages = new(); + + public override void Initialize() + { + base.Initialize(); + UIManager.OnScreenChanged += OnScreenChanged; + SubscribeNetworkEvent(OnTippyEvent); + } + + private void OnTippyEvent(TippyEvent msg, EntitySessionEventArgs args) + { + _queuedMessages.Enqueue(msg); + } + + public override void FrameUpdate(FrameEventArgs args) + { + base.FrameUpdate(args); + + var screen = UIManager.ActiveScreen; + if (screen == null) + { + _queuedMessages.Clear(); + return; + } + + var tippy = screen.GetOrAddWidget(); + _secondsUntilNextState -= args.DeltaSeconds; + + if (_secondsUntilNextState <= 0) + NextState(tippy); + else + { + var pos = UpdatePosition(tippy, screen.Size, args); ; + LayoutContainer.SetPosition(tippy, pos); + } + } + + private Vector2 UpdatePosition(TippyUI tippy, Vector2 screenSize, FrameEventArgs args) + { + if (_currentMessage == null) + return default; + + var slideTime = _currentMessage.SlideTime; + + var offset = tippy.State switch + { + TippyState.Hidden => 0, + TippyState.Revealing => Math.Clamp(1 - _secondsUntilNextState / slideTime, 0, 1), + TippyState.Hiding => Math.Clamp(_secondsUntilNextState / slideTime, 0, 1), + _ => 1, + }; + + var waddle = _currentMessage.WaddleInterval; + + if (_currentMessage == null + || waddle <= 0 + || tippy.State == TippyState.Hidden + || tippy.State == TippyState.Speaking + || !EntityManager.TryGetComponent(_entity, out SpriteComponent? sprite)) + { + return new Vector2(screenSize.X - offset * (tippy.DesiredSize.X + Padding), (screenSize.Y - tippy.DesiredSize.Y) / 2); + } + + var numSteps = (int) Math.Ceiling(slideTime / waddle); + var curStep = (int) Math.Floor(numSteps * offset); + var stepSize = (tippy.DesiredSize.X + Padding) / numSteps; + + if (curStep != _previousStep) + { + _previousStep = curStep; + sprite.Rotation = sprite.Rotation > 0 + ? -WaddleRotation + : WaddleRotation; + + if (EntityManager.TryGetComponent(_entity, out FootstepModifierComponent? step)) + { + var audioParams = step.FootstepSoundCollection.Params + .AddVolume(-7f) + .WithVariation(0.1f); + _audio.PlayGlobal(step.FootstepSoundCollection, EntityUid.Invalid, audioParams); + } + } + + return new Vector2(screenSize.X - stepSize * curStep, (screenSize.Y - tippy.DesiredSize.Y) / 2); + } + + private void NextState(TippyUI tippy) + { + SpriteComponent? sprite; + switch (tippy.State) + { + case TippyState.Hidden: + if (!_queuedMessages.TryDequeue(out var next)) + return; + + if (next.Proto != null) + { + _entity = EntityManager.SpawnEntity(next.Proto, MapCoordinates.Nullspace); + tippy.ModifyLayers = false; + } + else + { + _entity = EntityManager.SpawnEntity(_cfg.GetCVar(CCVars.TippyEntity), MapCoordinates.Nullspace); + tippy.ModifyLayers = true; + } + if (!EntityManager.TryGetComponent(_entity, out sprite)) + return; + if (!EntityManager.HasComponent(_entity)) + { + var paper = EntityManager.AddComponent(_entity); + paper.BackgroundImagePath = "/Textures/Interface/Paper/paper_background_default.svg.96dpi.png"; + paper.BackgroundPatchMargin = new(16f, 16f, 16f, 16f); + paper.BackgroundModulate = new(255, 255, 204); + paper.FontAccentColor = new(0, 0, 0); + } + tippy.InitLabel(EntityManager.GetComponentOrNull(_entity), _resCache); + + var scale = sprite.Scale; + if (tippy.ModifyLayers) + { + sprite.Scale = Vector2.One; + } + else + { + sprite.Scale = new Vector2(3, 3); + } + tippy.Entity.SetEntity(_entity); + tippy.Entity.Scale = scale; + + _currentMessage = next; + _secondsUntilNextState = next.SlideTime; + tippy.State = TippyState.Revealing; + _previousStep = 0; + if (tippy.ModifyLayers) + { + sprite.LayerSetAnimationTime("revealing", 0); + sprite.LayerSetVisible("revealing", true); + sprite.LayerSetVisible("speaking", false); + sprite.LayerSetVisible("hiding", false); + } + sprite.Rotation = 0; + tippy.Label.SetMarkupPermissive(_currentMessage.Msg); + tippy.Label.Visible = false; + tippy.LabelPanel.Visible = false; + tippy.Visible = true; + sprite.Visible = true; + break; + + case TippyState.Revealing: + tippy.State = TippyState.Speaking; + if (!EntityManager.TryGetComponent(_entity, out sprite)) + return; + sprite.Rotation = 0; + _previousStep = 0; + if (tippy.ModifyLayers) + { + sprite.LayerSetAnimationTime("speaking", 0); + sprite.LayerSetVisible("revealing", false); + sprite.LayerSetVisible("speaking", true); + sprite.LayerSetVisible("hiding", false); + } + tippy.Label.Visible = true; + tippy.LabelPanel.Visible = true; + tippy.InvalidateArrange(); + tippy.InvalidateMeasure(); + if (_currentMessage != null) + _secondsUntilNextState = _currentMessage.SpeakTime; + + break; + + case TippyState.Speaking: + tippy.State = TippyState.Hiding; + if (!EntityManager.TryGetComponent(_entity, out sprite)) + return; + if (tippy.ModifyLayers) + { + sprite.LayerSetAnimationTime("hiding", 0); + sprite.LayerSetVisible("revealing", false); + sprite.LayerSetVisible("speaking", false); + sprite.LayerSetVisible("hiding", true); + } + tippy.LabelPanel.Visible = false; + if (_currentMessage != null) + _secondsUntilNextState = _currentMessage.SlideTime; + break; + + default: // finished hiding + + EntityManager.DeleteEntity(_entity); + _entity = default; + tippy.Visible = false; + _currentMessage = null; + _secondsUntilNextState = 0; + tippy.State = TippyState.Hidden; + break; + } + } + + private void OnScreenChanged((UIScreen? Old, UIScreen? New) ev) + { + ev.Old?.RemoveWidget(); + _currentMessage = null; + EntityManager.DeleteEntity(_entity); + } +} diff --git a/Content.Client/Tools/Components/WelderComponent.cs b/Content.Client/Tools/Components/WelderComponent.cs deleted file mode 100644 index a83a78a5a4d..00000000000 --- a/Content.Client/Tools/Components/WelderComponent.cs +++ /dev/null @@ -1,18 +0,0 @@ -using Content.Client.Tools.UI; -using Content.Shared.Tools.Components; - -namespace Content.Client.Tools.Components -{ - [RegisterComponent, Access(typeof(ToolSystem), typeof(WelderStatusControl))] - public sealed partial class WelderComponent : SharedWelderComponent - { - [ViewVariables(VVAccess.ReadWrite)] - public bool UiUpdateNeeded { get; set; } - - [ViewVariables] - public float FuelCapacity { get; set; } - - [ViewVariables] - public float Fuel { get; set; } - } -} diff --git a/Content.Client/Tools/ToolSystem.cs b/Content.Client/Tools/ToolSystem.cs index 6811d58460d..2207242918e 100644 --- a/Content.Client/Tools/ToolSystem.cs +++ b/Content.Client/Tools/ToolSystem.cs @@ -1,10 +1,8 @@ using Content.Client.Items; using Content.Client.Tools.Components; using Content.Client.Tools.UI; -using Content.Shared.Item; using Content.Shared.Tools.Components; using Robust.Client.GameObjects; -using Robust.Shared.GameStates; using SharedToolSystem = Content.Shared.Tools.Systems.SharedToolSystem; namespace Content.Client.Tools @@ -15,8 +13,7 @@ public override void Initialize() { base.Initialize(); - SubscribeLocalEvent(OnWelderHandleState); - Subs.ItemStatus(ent => new WelderStatusControl(ent)); + Subs.ItemStatus(ent => new WelderStatusControl(ent, EntityManager, this)); Subs.ItemStatus(ent => new MultipleToolStatusControl(ent)); } @@ -42,20 +39,5 @@ public override void SetMultipleTool(EntityUid uid, sprite.LayerSetSprite(0, current.Sprite); } } - - private void OnWelderHandleState(EntityUid uid, WelderComponent welder, ref ComponentHandleState args) - { - if (args.Current is not WelderComponentState state) - return; - - welder.FuelCapacity = state.FuelCapacity; - welder.Fuel = state.Fuel; - welder.UiUpdateNeeded = true; - } - - protected override bool IsWelder(EntityUid uid) - { - return HasComp(uid); - } } } diff --git a/Content.Client/Tools/UI/WelderStatusControl.cs b/Content.Client/Tools/UI/WelderStatusControl.cs index af81a28f620..3d44d6fa84a 100644 --- a/Content.Client/Tools/UI/WelderStatusControl.cs +++ b/Content.Client/Tools/UI/WelderStatusControl.cs @@ -1,62 +1,45 @@ +using Content.Client.Items.UI; using Content.Client.Message; using Content.Client.Stylesheets; -using Content.Client.Tools.Components; -using Content.Shared.Item; -using Robust.Client.UserInterface; +using Content.Shared.FixedPoint; +using Content.Shared.Tools.Components; +using Content.Shared.Tools.Systems; using Robust.Client.UserInterface.Controls; -using Robust.Shared.Timing; -using ItemToggleComponent = Content.Shared.Item.ItemToggle.Components.ItemToggleComponent; namespace Content.Client.Tools.UI; -public sealed class WelderStatusControl : Control +public sealed class WelderStatusControl : PollingItemStatusControl { - [Dependency] private readonly IEntityManager _entMan = default!; - - private readonly WelderComponent _parent; - private readonly ItemToggleComponent? _toggleComponent; + private readonly Entity _parent; + private readonly IEntityManager _entityManager; + private readonly SharedToolSystem _toolSystem; private readonly RichTextLabel _label; - public WelderStatusControl(Entity parent) + public WelderStatusControl(Entity parent, IEntityManager entityManager, SharedToolSystem toolSystem) { _parent = parent; - _entMan = IoCManager.Resolve(); - if (_entMan.TryGetComponent(parent, out var itemToggle)) - _toggleComponent = itemToggle; + _entityManager = entityManager; + _toolSystem = toolSystem; _label = new RichTextLabel { StyleClasses = { StyleNano.StyleClassItemStatus } }; AddChild(_label); UpdateDraw(); } - /// - protected override void FrameUpdate(FrameEventArgs args) + protected override Data PollData() { - base.FrameUpdate(args); - - if (!_parent.UiUpdateNeeded) - { - return; - } - Update(); + var (fuel, capacity) = _toolSystem.GetWelderFuelAndCapacity(_parent, _parent.Comp); + return new Data(fuel, capacity, _parent.Comp.Enabled); } - public void Update() + protected override void Update(in Data data) { - _parent.UiUpdateNeeded = false; - - var fuelCap = _parent.FuelCapacity; - var fuel = _parent.Fuel; - var lit = false; - if (_toggleComponent != null) - { - lit = _toggleComponent.Activated; - } - _label.SetMarkup(Loc.GetString("welder-component-on-examine-detailed-message", - ("colorName", fuel < fuelCap / 4f ? "darkorange" : "orange"), - ("fuelLeft", Math.Round(fuel, 1)), - ("fuelCapacity", fuelCap), - ("status", Loc.GetString(lit ? "welder-component-on-examine-welder-lit-message" : "welder-component-on-examine-welder-not-lit-message")))); + ("colorName", data.Fuel < data.FuelCapacity / 4f ? "darkorange" : "orange"), + ("fuelLeft", data.Fuel), + ("fuelCapacity", data.FuelCapacity), + ("status", Loc.GetString(data.Lit ? "welder-component-on-examine-welder-lit-message" : "welder-component-on-examine-welder-not-lit-message")))); } + + public record struct Data(FixedPoint2 Fuel, FixedPoint2 FuelCapacity, bool Lit); } diff --git a/Content.Client/UserInterface/Controls/ClipControl.cs b/Content.Client/UserInterface/Controls/ClipControl.cs new file mode 100644 index 00000000000..1fca3c0f474 --- /dev/null +++ b/Content.Client/UserInterface/Controls/ClipControl.cs @@ -0,0 +1,55 @@ +using System.Numerics; +using Robust.Client.UserInterface; +using Robust.Client.UserInterface.Controls; + +namespace Content.Client.UserInterface.Controls; + +/// +/// Pretends to child controls that there's infinite space. +/// This can be used to make something like a clip instead of wrapping. +/// +public sealed class ClipControl : Control +{ + private bool _clipHorizontal = true; + private bool _clipVertical = true; + + public bool ClipHorizontal + { + get => _clipHorizontal; + set + { + _clipHorizontal = value; + InvalidateMeasure(); + } + } + + public bool ClipVertical + { + get => _clipVertical; + set + { + _clipVertical = value; + InvalidateMeasure(); + } + } + + protected override Vector2 MeasureOverride(Vector2 availableSize) + { + if (ClipHorizontal) + availableSize = availableSize with { X = float.PositiveInfinity }; + if (ClipVertical) + availableSize = availableSize with { Y = float.PositiveInfinity }; + + return base.MeasureOverride(availableSize); + } + + protected override Vector2 ArrangeOverride(Vector2 finalSize) + { + foreach (var child in Children) + { + child.Arrange(UIBox2.FromDimensions(Vector2.Zero, child.DesiredSize)); + } + + return finalSize; + } +} diff --git a/Content.Client/UserInterface/Controls/DirectionIcon.cs b/Content.Client/UserInterface/Controls/DirectionIcon.cs index a6cc428091a..c8fd63b43c9 100644 --- a/Content.Client/UserInterface/Controls/DirectionIcon.cs +++ b/Content.Client/UserInterface/Controls/DirectionIcon.cs @@ -65,7 +65,7 @@ protected override void Draw(DrawingHandleScreen handle) if (_rotation != null) { var offset = (-_rotation.Value).RotateVec(Size * UIScale / 2) - Size * UIScale / 2; - handle.SetTransform(Matrix3.CreateTransform(GlobalPixelPosition - offset, -_rotation.Value)); + handle.SetTransform(Matrix3Helpers.CreateTransform(GlobalPixelPosition - offset, -_rotation.Value)); } base.Draw(handle); diff --git a/Content.Client/UserInterface/Controls/FancyWindow.xaml b/Content.Client/UserInterface/Controls/FancyWindow.xaml index d076a552bf2..84d0499b3a6 100644 --- a/Content.Client/UserInterface/Controls/FancyWindow.xaml +++ b/Content.Client/UserInterface/Controls/FancyWindow.xaml @@ -11,6 +11,7 @@ diff --git a/Content.Client/UserInterface/Controls/FancyWindow.xaml.cs b/Content.Client/UserInterface/Controls/FancyWindow.xaml.cs index 8cdfe57dba2..5912687fc35 100644 --- a/Content.Client/UserInterface/Controls/FancyWindow.xaml.cs +++ b/Content.Client/UserInterface/Controls/FancyWindow.xaml.cs @@ -1,7 +1,10 @@ using System.Numerics; +using Content.Client.Guidebook; +using Content.Client.Guidebook.Components; using Robust.Client.AutoGenerated; using Robust.Client.UserInterface.CustomControls; using Robust.Client.UserInterface.XAML; +using Robust.Shared.Prototypes; namespace Content.Client.UserInterface.Controls { @@ -9,13 +12,17 @@ namespace Content.Client.UserInterface.Controls [Virtual] public partial class FancyWindow : BaseWindow { + [Dependency] private readonly IEntitySystemManager _sysMan = default!; + private GuidebookSystem? _guidebookSystem; private const int DRAG_MARGIN_SIZE = 7; + public const string StyleClassWindowHelpButton = "windowHelpButton"; public FancyWindow() { RobustXamlLoader.Load(this); CloseButton.OnPressed += _ => Close(); + HelpButton.OnPressed += _ => Help(); XamlChildren = ContentsContainer.Children; } @@ -25,6 +32,26 @@ public string? Title set => WindowTitle.Text = value; } + private List? _helpGuidebookIds; + public List? HelpGuidebookIds + { + get => _helpGuidebookIds; + set + { + _helpGuidebookIds = value; + HelpButton.Disabled = _helpGuidebookIds == null; + HelpButton.Visible = !HelpButton.Disabled; + } + } + + public void Help() + { + if (HelpGuidebookIds is null) + return; + _guidebookSystem ??= _sysMan.GetEntitySystem(); + _guidebookSystem.OpenHelp(HelpGuidebookIds); + } + protected override DragMode GetDragModeFor(Vector2 relativeMousePos) { var mode = DragMode.Move; diff --git a/Content.Client/UserInterface/Controls/MainViewport.cs b/Content.Client/UserInterface/Controls/MainViewport.cs index e334f615724..721d7501152 100644 --- a/Content.Client/UserInterface/Controls/MainViewport.cs +++ b/Content.Client/UserInterface/Controls/MainViewport.cs @@ -51,6 +51,7 @@ public void UpdateCfg() var stretch = _cfg.GetCVar(CCVars.ViewportStretch); var renderScaleUp = _cfg.GetCVar(CCVars.ViewportScaleRender); var fixedFactor = _cfg.GetCVar(CCVars.ViewportFixedScaleFactor); + var verticalFit = _cfg.GetCVar(CCVars.ViewportVerticalFit); if (stretch) { @@ -60,6 +61,7 @@ public void UpdateCfg() // Did not find a snap, enable stretching. Viewport.FixedStretchSize = null; Viewport.StretchMode = ScalingViewportStretchMode.Bilinear; + Viewport.IgnoreDimension = verticalFit ? ScalingViewportIgnoreDimension.Horizontal : ScalingViewportIgnoreDimension.None; if (renderScaleUp) { @@ -104,6 +106,8 @@ public void UpdateCfg() // where we are clipping the viewport to make it fit. var cfgToleranceClip = _cfg.GetCVar(CCVars.ViewportSnapToleranceClip); + var cfgVerticalFit = _cfg.GetCVar(CCVars.ViewportVerticalFit); + // Calculate if the viewport, when rendered at an integer scale, // is close enough to the control size to enable "snapping" to NN, // potentially cutting a tiny bit off/leaving a margin. @@ -123,7 +127,8 @@ public void UpdateCfg() // The rule for which snap fits is that at LEAST one axis needs to be in the tolerance size wise. // One axis MAY be larger but not smaller than tolerance. // Obviously if it's too small it's bad, and if it's too big on both axis we should stretch up. - if (Fits(dx) && Fits(dy) || Fits(dx) && Larger(dy) || Larger(dx) && Fits(dy)) + // Additionally, if the viewport's supposed to be vertically fit, then the horizontal scale should just be ignored where appropriate. + if ((Fits(dx) || cfgVerticalFit) && Fits(dy) || !cfgVerticalFit && Fits(dx) && Larger(dy) || Larger(dx) && Fits(dy)) { // Found snap that fits. return i; diff --git a/Content.Client/UserInterface/Controls/MapGridControl.xaml.cs b/Content.Client/UserInterface/Controls/MapGridControl.xaml.cs index f6b0929f3b2..a10155f3e8c 100644 --- a/Content.Client/UserInterface/Controls/MapGridControl.xaml.cs +++ b/Content.Client/UserInterface/Controls/MapGridControl.xaml.cs @@ -169,7 +169,7 @@ protected Vector2 InverseMapPosition(Vector2 value) var inversePos = (value - MidPointVector) / MinimapScale; inversePos = inversePos with { Y = -inversePos.Y }; - inversePos = Matrix3.CreateTransform(Offset, Angle.Zero).Transform(inversePos); + inversePos = Vector2.Transform(inversePos, Matrix3Helpers.CreateTransform(Offset, Angle.Zero)); return inversePos; } diff --git a/Content.Client/UserInterface/Controls/NeoTabContainer.xaml.cs b/Content.Client/UserInterface/Controls/NeoTabContainer.xaml.cs index c0f6300d325..fc148cc634f 100644 --- a/Content.Client/UserInterface/Controls/NeoTabContainer.xaml.cs +++ b/Content.Client/UserInterface/Controls/NeoTabContainer.xaml.cs @@ -134,7 +134,7 @@ public int AddTab(Control control, string? title, bool updateTabMerging = true) } /// - /// Removes the tab associated with the given index + /// Removes/Disposes the tab associated with the given index /// /// The index of the tab to remove /// Whether the tabs should fix their styling automatically. Useful if you're doing tons of updates at once @@ -150,7 +150,7 @@ public bool RemoveTab(int index, bool updateTabMerging = true) } /// - /// Removes the tab associated with the given control + /// Removes/Disposes the tab associated with the given control /// /// The control to remove /// Whether the tabs should fix their styling automatically. Useful if you're doing tons of updates at once diff --git a/Content.Client/UserInterface/Controls/SlotButton.cs b/Content.Client/UserInterface/Controls/SlotButton.cs index 4ec68616069..c33782371f5 100644 --- a/Content.Client/UserInterface/Controls/SlotButton.cs +++ b/Content.Client/UserInterface/Controls/SlotButton.cs @@ -9,6 +9,7 @@ public SlotButton() { } public SlotButton(SlotData slotData) { ButtonTexturePath = slotData.TextureName; + FullButtonTexturePath = slotData.FullTextureName; Blocked = slotData.Blocked; Highlight = slotData.Highlighted; StorageTexturePath = "Slots/back"; diff --git a/Content.Client/UserInterface/Controls/SlotControl.cs b/Content.Client/UserInterface/Controls/SlotControl.cs index 9b94f8a0c8c..a684bb05efd 100644 --- a/Content.Client/UserInterface/Controls/SlotControl.cs +++ b/Content.Client/UserInterface/Controls/SlotControl.cs @@ -15,11 +15,12 @@ public abstract class SlotControl : Control, IEntityControl public TextureRect ButtonRect { get; } public TextureRect BlockedRect { get; } public TextureRect HighlightRect { get; } - public SpriteView SpriteView { get; } public SpriteView HoverSpriteView { get; } public TextureButton StorageButton { get; } public CooldownGraphic CooldownDisplay { get; } + private SpriteView SpriteView { get; } + public EntityUid? Entity => SpriteView.Entity; private bool _slotNameSet; @@ -68,7 +69,18 @@ public string? ButtonTexturePath set { _buttonTexturePath = value; - ButtonRect.Texture = Theme.ResolveTextureOrNull(_buttonTexturePath)?.Texture; + UpdateButtonTexture(); + } + } + + private string? _fullButtonTexturePath; + public string? FullButtonTexturePath + { + get => _fullButtonTexturePath; + set + { + _fullButtonTexturePath = value; + UpdateButtonTexture(); } } @@ -197,6 +209,21 @@ public void ClearHover() HoverSpriteView.SetEntity(null); } + public void SetEntity(EntityUid? ent) + { + SpriteView.SetEntity(ent); + UpdateButtonTexture(); + } + + private void UpdateButtonTexture() + { + var fullTexture = Theme.ResolveTextureOrNull(_fullButtonTexturePath); + var texture = Entity.HasValue && fullTexture != null + ? fullTexture.Texture + : Theme.ResolveTextureOrNull(_buttonTexturePath)?.Texture; + ButtonRect.Texture = texture; + } + private void OnButtonPressed(GUIBoundKeyEventArgs args) { Pressed?.Invoke(args, this); @@ -229,8 +256,8 @@ protected override void OnThemeUpdated() base.OnThemeUpdated(); StorageButton.TextureNormal = Theme.ResolveTextureOrNull(_storageTexturePath)?.Texture; - ButtonRect.Texture = Theme.ResolveTextureOrNull(_buttonTexturePath)?.Texture; HighlightRect.Texture = Theme.ResolveTextureOrNull(_highlightTexturePath)?.Texture; + UpdateButtonTexture(); } EntityUid? IEntityControl.UiEntity => Entity; diff --git a/Content.Client/UserInterface/Systems/Actions/ActionUIController.cs b/Content.Client/UserInterface/Systems/Actions/ActionUIController.cs index 09663ba82cd..69ac3ab0230 100644 --- a/Content.Client/UserInterface/Systems/Actions/ActionUIController.cs +++ b/Content.Client/UserInterface/Systems/Actions/ActionUIController.cs @@ -15,6 +15,7 @@ using Content.Shared.Input; using Robust.Client.GameObjects; using Robust.Client.Graphics; +using Robust.Client.Input; using Robust.Client.Player; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controllers; @@ -42,6 +43,7 @@ public sealed class ActionUIController : UIController, IOnStateChanged position && position >= 0) + _actions.RemoveAt(position); } } else if (button.TryReplaceWith(actionId.Value, _actionsSystem) && @@ -539,24 +548,23 @@ private void SetAction(ActionButton button, EntityUid? actionId, bool updateSlot private void DragAction() { - EntityUid? swapAction = null; - if (UIManager.CurrentlyHovered is ActionButton button) + if (_menuDragHelper.Dragged is not {ActionId: {} action} dragged) { - if (!_menuDragHelper.IsDragging || _menuDragHelper.Dragged?.ActionId is not { } type) - { - _menuDragHelper.EndDrag(); - return; - } - - swapAction = button.ActionId; - SetAction(button, type, false); + _menuDragHelper.EndDrag(); + return; } - if (_menuDragHelper.Dragged is {Parent: ActionButtonContainer} old) + EntityUid? swapAction = null; + var currentlyHovered = UIManager.MouseGetControl(_input.MouseScreenPosition); + if (currentlyHovered is ActionButton button) { - SetAction(old, swapAction, false); + swapAction = button.ActionId; + SetAction(button, action, false); } + if (dragged.Parent is ActionButtonContainer) + SetAction(dragged, swapAction, false); + if (_actionsSystem != null) _container?.SetActionData(_actionsSystem, _actions.ToArray()); @@ -610,27 +618,27 @@ private void OnWindowActionFocusExisted(ActionButton button) private void OnActionPressed(GUIBoundKeyEventArgs args, ActionButton button) { - if (args.Function == EngineKeyFunctions.UIClick) + if (args.Function == EngineKeyFunctions.UIRightClick) { - if (button.ActionId == null) - { - var ev = new FillActionSlotEvent(); - EntityManager.EventBus.RaiseEvent(EventSource.Local, ev); - if (ev.Action != null) - SetAction(button, ev.Action); - } - else - { - _menuDragHelper.MouseDown(button); - } - + SetAction(button, null); args.Handle(); + return; } - else if (args.Function == EngineKeyFunctions.UIRightClick) + + if (args.Function != EngineKeyFunctions.UIClick) + return; + + args.Handle(); + if (button.ActionId != null) { - SetAction(button, null); - args.Handle(); + _menuDragHelper.MouseDown(button); + return; } + + var ev = new FillActionSlotEvent(); + EntityManager.EventBus.RaiseEvent(EventSource.Local, ev); + if (ev.Action != null) + SetAction(button, ev.Action); } private void OnActionUnpressed(GUIBoundKeyEventArgs args, ActionButton button) @@ -638,33 +646,31 @@ private void OnActionUnpressed(GUIBoundKeyEventArgs args, ActionButton button) if (args.Function != EngineKeyFunctions.UIClick || _actionsSystem == null) return; - //todo: make dragging onto the same spot NOT trigger again - if (UIManager.CurrentlyHovered == button) - { - _menuDragHelper.EndDrag(); + args.Handle(); - if (_actionsSystem.TryGetActionData(button.ActionId, out var baseAction)) - { - if (baseAction is BaseTargetActionComponent action) - { - // for target actions, we go into "select target" mode, we don't - // message the server until we actually pick our target. - - // if we're clicking the same thing we're already targeting for, then we simply cancel - // targeting - ToggleTargeting(button.ActionId.Value, action); - return; - } - - _actionsSystem?.TriggerAction(button.ActionId.Value, baseAction); - } - } - else + if (_menuDragHelper.IsDragging) { DragAction(); + return; } - args.Handle(); + _menuDragHelper.EndDrag(); + + if (!_actionsSystem.TryGetActionData(button.ActionId, out var baseAction)) + return; + + if (baseAction is not BaseTargetActionComponent action) + { + _actionsSystem?.TriggerAction(button.ActionId.Value, baseAction); + return; + } + + // for target actions, we go into "select target" mode, we don't + // message the server until we actually pick our target. + + // if we're clicking the same thing we're already targeting for, then we simply cancel + // targeting + ToggleTargeting(button.ActionId.Value, action); } private bool OnMenuBeginDrag() diff --git a/Content.Client/UserInterface/Systems/Actions/Controls/ActionButton.cs b/Content.Client/UserInterface/Systems/Actions/Controls/ActionButton.cs index 2372d98f8dd..6be41af0d89 100644 --- a/Content.Client/UserInterface/Systems/Actions/Controls/ActionButton.cs +++ b/Content.Client/UserInterface/Systems/Actions/Controls/ActionButton.cs @@ -152,16 +152,8 @@ public ActionButton(IEntityManager entities, SpriteSystem? spriteSys = null, Act OnThemeUpdated(); - OnKeyBindDown += args => - { - Depress(args, true); - OnPressed(args); - }; - OnKeyBindUp += args => - { - Depress(args, false); - OnUnpressed(args); - }; + OnKeyBindDown += OnPressed; + OnKeyBindUp += OnUnpressed; TooltipSupplier = SupplyTooltip; } @@ -175,11 +167,23 @@ protected override void OnThemeUpdated() private void OnPressed(GUIBoundKeyEventArgs args) { + if (args.Function != EngineKeyFunctions.UIClick && args.Function != EngineKeyFunctions.UIRightClick) + return; + + if (args.Function == EngineKeyFunctions.UIRightClick) + Depress(args, true); + ActionPressed?.Invoke(args, this); } private void OnUnpressed(GUIBoundKeyEventArgs args) { + if (args.Function != EngineKeyFunctions.UIClick && args.Function != EngineKeyFunctions.UIRightClick) + return; + + if (args.Function == EngineKeyFunctions.UIRightClick) + Depress(args, false); + ActionUnpressed?.Invoke(args, this); } @@ -281,10 +285,19 @@ public void UpdateIcons() _controller ??= UserInterfaceManager.GetUIController(); _spriteSys ??= _entities.System(); - if ((_controller.SelectingTargetFor == ActionId || _action.Toggled) && _action.IconOn != null) - SetActionIcon(_spriteSys.Frame0(_action.IconOn)); + if ((_controller.SelectingTargetFor == ActionId || _action.Toggled)) + { + if (_action.IconOn != null) + SetActionIcon(_spriteSys.Frame0(_action.IconOn)); + + if (_action.BackgroundOn != null) + _buttonBackgroundTexture = _spriteSys.Frame0(_action.BackgroundOn); + } else + { SetActionIcon(_action.Icon != null ? _spriteSys.Frame0(_action.Icon) : null); + _buttonBackgroundTexture = Theme.ResolveTexture("SlotBackground"); + } } public void UpdateBackground() @@ -378,12 +391,6 @@ public void Depress(GUIBoundKeyEventArgs args, bool depress) if (_action is not {Enabled: true}) return; - if (_depressed && !depress) - { - // fire the action - OnUnpressed(args); - } - _depressed = depress; DrawModeChanged(); } diff --git a/Content.Client/UserInterface/Systems/Alerts/Controls/AlertControl.cs b/Content.Client/UserInterface/Systems/Alerts/Controls/AlertControl.cs index 9423f7288df..6327757dec2 100644 --- a/Content.Client/UserInterface/Systems/Alerts/Controls/AlertControl.cs +++ b/Content.Client/UserInterface/Systems/Alerts/Controls/AlertControl.cs @@ -3,7 +3,6 @@ using Content.Client.Cooldown; using Content.Shared.Alert; using Robust.Client.GameObjects; -using Robust.Client.Graphics; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; using Robust.Shared.Timing; @@ -118,7 +117,8 @@ protected override void Dispose(bool disposing) { base.Dispose(disposing); - _entityManager.DeleteEntity(_spriteViewEntity); + if (!_entityManager.Deleted(_spriteViewEntity)) + _entityManager.QueueDeleteEntity(_spriteViewEntity); } } diff --git a/Content.Client/UserInterface/Systems/Alerts/Widgets/AlertsUI.xaml.cs b/Content.Client/UserInterface/Systems/Alerts/Widgets/AlertsUI.xaml.cs index 189de504079..a1a494c47b3 100644 --- a/Content.Client/UserInterface/Systems/Alerts/Widgets/AlertsUI.xaml.cs +++ b/Content.Client/UserInterface/Systems/Alerts/Widgets/AlertsUI.xaml.cs @@ -97,7 +97,8 @@ private void SyncUpdateControls(AlertsSystem alertsSystem, AlertOrderPrototype? } else { - if (existingAlertControl != null) AlertContainer.Children.Remove(existingAlertControl); + if (existingAlertControl != null) + AlertContainer.Children.Remove(existingAlertControl); // this is a new alert + alert key or just a different alert with the same // key, create the control and add it in the appropriate order diff --git a/Content.Client/UserInterface/Systems/Chat/ChatUIController.cs b/Content.Client/UserInterface/Systems/Chat/ChatUIController.cs index bc79283d76e..b1d8b01050c 100644 --- a/Content.Client/UserInterface/Systems/Chat/ChatUIController.cs +++ b/Content.Client/UserInterface/Systems/Chat/ChatUIController.cs @@ -550,7 +550,7 @@ private void UpdateChannelPermissions() } // only admins can see / filter asay - if (_admin.HasFlag(AdminFlags.Admin)) + if (_admin.HasFlag(AdminFlags.Adminchat)) { FilterableChannels |= ChatChannel.Admin; FilterableChannels |= ChatChannel.AdminAlert; diff --git a/Content.Client/UserInterface/Systems/Emotes/EmotesUIController.cs b/Content.Client/UserInterface/Systems/Emotes/EmotesUIController.cs new file mode 100644 index 00000000000..7b86859a1a2 --- /dev/null +++ b/Content.Client/UserInterface/Systems/Emotes/EmotesUIController.cs @@ -0,0 +1,125 @@ +using Content.Client.Chat.UI; +using Content.Client.Gameplay; +using Content.Client.UserInterface.Controls; +using Content.Shared.Chat; +using Content.Shared.Chat.Prototypes; +using Content.Shared.Input; +using JetBrains.Annotations; +using Robust.Client.Graphics; +using Robust.Client.Input; +using Robust.Client.UserInterface.Controllers; +using Robust.Client.UserInterface.Controls; +using Robust.Shared.Input.Binding; +using Robust.Shared.Prototypes; + +namespace Content.Client.UserInterface.Systems.Emotes; + +[UsedImplicitly] +public sealed class EmotesUIController : UIController, IOnStateChanged +{ + [Dependency] private readonly IEntityManager _entityManager = default!; + [Dependency] private readonly IClyde _displayManager = default!; + [Dependency] private readonly IInputManager _inputManager = default!; + + private MenuButton? EmotesButton => UIManager.GetActiveUIWidgetOrNull()?.EmotesButton; + private EmotesMenu? _menu; + + public void OnStateEntered(GameplayState state) + { + CommandBinds.Builder + .Bind(ContentKeyFunctions.OpenEmotesMenu, + InputCmdHandler.FromDelegate(_ => ToggleEmotesMenu(false))) + .Register(); + } + + public void OnStateExited(GameplayState state) + { + CommandBinds.Unregister(); + } + + private void ToggleEmotesMenu(bool centered) + { + if (_menu == null) + { + // setup window + _menu = UIManager.CreateWindow(); + _menu.OnClose += OnWindowClosed; + _menu.OnOpen += OnWindowOpen; + _menu.OnPlayEmote += OnPlayEmote; + + if (EmotesButton != null) + EmotesButton.SetClickPressed(true); + + if (centered) + { + _menu.OpenCentered(); + } + else + { + // Open the menu, centered on the mouse + var vpSize = _displayManager.ScreenSize; + _menu.OpenCenteredAt(_inputManager.MouseScreenPosition.Position / vpSize); + } + } + else + { + _menu.OnClose -= OnWindowClosed; + _menu.OnOpen -= OnWindowOpen; + _menu.OnPlayEmote -= OnPlayEmote; + + if (EmotesButton != null) + EmotesButton.SetClickPressed(false); + + CloseMenu(); + } + } + + public void UnloadButton() + { + if (EmotesButton == null) + return; + + EmotesButton.OnPressed -= ActionButtonPressed; + } + + public void LoadButton() + { + if (EmotesButton == null) + return; + + EmotesButton.OnPressed += ActionButtonPressed; + } + + private void ActionButtonPressed(BaseButton.ButtonEventArgs args) + { + ToggleEmotesMenu(true); + } + + private void OnWindowClosed() + { + if (EmotesButton != null) + EmotesButton.Pressed = false; + + CloseMenu(); + } + + private void OnWindowOpen() + { + if (EmotesButton != null) + EmotesButton.Pressed = true; + } + + private void CloseMenu() + { + if (_menu == null) + return; + + _menu.Dispose(); + _menu = null; + } + + private void OnPlayEmote(ProtoId protoId) + { + _entityManager.RaisePredictiveEvent(new PlayEmoteMessage(protoId)); + } +} diff --git a/Content.Client/UserInterface/Systems/Ghost/Controls/GhostTargetWindow.xaml b/Content.Client/UserInterface/Systems/Ghost/Controls/GhostTargetWindow.xaml index 86fd09b2c80..32cab732d14 100644 --- a/Content.Client/UserInterface/Systems/Ghost/Controls/GhostTargetWindow.xaml +++ b/Content.Client/UserInterface/Systems/Ghost/Controls/GhostTargetWindow.xaml @@ -1,5 +1,6 @@ + + Text="{Loc 'analysis-console-server-list-button'}"> + + + + + @@ -36,13 +52,13 @@ - + - + diff --git a/Content.Client/Xenoarchaeology/Ui/AnalysisConsoleMenu.xaml.cs b/Content.Client/Xenoarchaeology/Ui/AnalysisConsoleMenu.xaml.cs index 90732f814f8..2890bb3dbf7 100644 --- a/Content.Client/Xenoarchaeology/Ui/AnalysisConsoleMenu.xaml.cs +++ b/Content.Client/Xenoarchaeology/Ui/AnalysisConsoleMenu.xaml.cs @@ -3,6 +3,7 @@ using Content.Shared.Xenoarchaeology.Equipment; using Robust.Client.AutoGenerated; using Robust.Client.GameObjects; +using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.XAML; using Robust.Shared.Timing; using Robust.Shared.Utility; @@ -19,6 +20,8 @@ public sealed partial class AnalysisConsoleMenu : FancyWindow public event Action? OnScanButtonPressed; public event Action? OnPrintButtonPressed; public event Action? OnExtractButtonPressed; + public event Action? OnUpBiasButtonPressed; + public event Action? OnDownBiasButtonPressed; // For rendering the progress bar, updated from BUI state private TimeSpan? _startTime; @@ -36,6 +39,12 @@ public AnalysisConsoleMenu() ScanButton.OnPressed += _ => OnScanButtonPressed?.Invoke(); PrintButton.OnPressed += _ => OnPrintButtonPressed?.Invoke(); ExtractButton.OnPressed += _ => OnExtractButtonPressed?.Invoke(); + UpBiasButton.OnPressed += _ => OnUpBiasButtonPressed?.Invoke(); + DownBiasButton.OnPressed += _ => OnDownBiasButtonPressed?.Invoke(); + + var buttonGroup = new ButtonGroup(false); + UpBiasButton.Group = buttonGroup; + DownBiasButton.Group = buttonGroup; } protected override void FrameUpdate(FrameEventArgs args) @@ -60,25 +69,55 @@ protected override void FrameUpdate(FrameEventArgs args) ProgressBar.Value = Math.Clamp(1.0f - (float) remaining.Divide(total), 0.0f, 1.0f); } - public void SetButtonsDisabled(AnalysisConsoleScanUpdateState state) + public void SetButtonsDisabled(AnalysisConsoleUpdateState state) { ScanButton.Disabled = !state.CanScan; PrintButton.Disabled = !state.CanPrint; + if (state.IsTraversalDown) + DownBiasButton.Pressed = true; + else + UpBiasButton.Pressed = true; - var disabled = !state.ServerConnected || !state.CanScan || state.PointAmount <= 0; - - ExtractButton.Disabled = disabled; + ExtractButton.Disabled = false; + if (!state.ServerConnected) + { + ExtractButton.Disabled = true; + ExtractButton.ToolTip = Loc.GetString("analysis-console-no-server-connected"); + } + else if (!state.CanScan) + { + ExtractButton.Disabled = true; + + // CanScan can be false if either there's no analyzer connected or if there's + // no entity on the scanner. The `Information` text will always tell the user + // of the former case, but in the latter, it'll only show a message if a scan + // has never been performed, so add a tooltip to indicate that the artifact + // is gone. + if (state.AnalyzerConnected) + { + ExtractButton.ToolTip = Loc.GetString("analysis-console-no-artifact-placed"); + } + else + { + ExtractButton.ToolTip = null; + } + } + else if (state.PointAmount <= 0) + { + ExtractButton.Disabled = true; + ExtractButton.ToolTip = Loc.GetString("analysis-console-no-points-to-extract"); + } - if (disabled) + if (ExtractButton.Disabled) { ExtractButton.RemoveStyleClass("ButtonColorGreen"); } else { ExtractButton.AddStyleClass("ButtonColorGreen"); + ExtractButton.ToolTip = null; } } - private void UpdateArtifactIcon(EntityUid? uid) { if (uid == null) @@ -91,7 +130,7 @@ private void UpdateArtifactIcon(EntityUid? uid) ArtifactDisplay.SetEntity(uid); } - public void UpdateInformationDisplay(AnalysisConsoleScanUpdateState state) + public void UpdateInformationDisplay(AnalysisConsoleUpdateState state) { var message = new FormattedMessage(); @@ -129,7 +168,7 @@ public void UpdateInformationDisplay(AnalysisConsoleScanUpdateState state) Information.SetMessage(message); } - public void UpdateProgressBar(AnalysisConsoleScanUpdateState state) + public void UpdateProgressBar(AnalysisConsoleUpdateState state) { ProgressBar.Visible = state.Scanning; ProgressLabel.Visible = state.Scanning; diff --git a/Content.Client/_N14/NightVision/GreenVisionOverlay.cs b/Content.Client/_N14/NightVision/GreenVisionOverlay.cs index f7970cca662..a78becd72f4 100644 --- a/Content.Client/_N14/NightVision/GreenVisionOverlay.cs +++ b/Content.Client/_N14/NightVision/GreenVisionOverlay.cs @@ -1,4 +1,5 @@ -using Robust.Client.Graphics; +using System.Numerics; +using Robust.Client.Graphics; using Robust.Client.Player; using Robust.Shared.Enums; using Robust.Shared.Prototypes; @@ -38,8 +39,8 @@ protected override void Draw(in OverlayDrawArgs args) var worldHandle = args.WorldHandle; var viewport = args.WorldBounds; - worldHandle.SetTransform(Matrix3.Identity); + worldHandle.SetTransform(Matrix3x2.Identity); worldHandle.UseShader(_greenVisionShader); worldHandle.DrawRect(viewport, Color.White); } -} \ No newline at end of file +} diff --git a/Content.IntegrationTests/Pair/TestPair.Recycle.cs b/Content.IntegrationTests/Pair/TestPair.Recycle.cs index 52fdf600bb4..c0f4b3b745f 100644 --- a/Content.IntegrationTests/Pair/TestPair.Recycle.cs +++ b/Content.IntegrationTests/Pair/TestPair.Recycle.cs @@ -131,7 +131,7 @@ public async Task CleanPooledPair(PoolSettings settings, TextWriter testOut) // Move to pre-round lobby. Required to toggle dummy ticker on and off if (gameTicker.RunLevel != GameRunLevel.PreRoundLobby) { - await testOut.WriteLineAsync($"Recycling: {Watch.Elapsed.TotalMilliseconds} ms: Restarting server."); + await testOut.WriteLineAsync($"Recycling: {Watch.Elapsed.TotalMilliseconds} ms: Restarting round."); Assert.That(gameTicker.DummyTicker, Is.False); Server.CfgMan.SetCVar(CCVars.GameLobbyEnabled, true); await Server.WaitPost(() => gameTicker.RestartRound()); @@ -146,6 +146,7 @@ public async Task CleanPooledPair(PoolSettings settings, TextWriter testOut) // Restart server. await testOut.WriteLineAsync($"Recycling: {Watch.Elapsed.TotalMilliseconds} ms: Restarting server again"); + await Server.WaitPost(() => Server.EntMan.FlushEntities()); await Server.WaitPost(() => gameTicker.RestartRound()); await RunTicksSync(1); diff --git a/Content.IntegrationTests/Pair/TestPair.Timing.cs b/Content.IntegrationTests/Pair/TestPair.Timing.cs index 3487ea68010..e0859660d42 100644 --- a/Content.IntegrationTests/Pair/TestPair.Timing.cs +++ b/Content.IntegrationTests/Pair/TestPair.Timing.cs @@ -1,5 +1,4 @@ #nullable enable -using Robust.Shared.Timing; namespace Content.IntegrationTests.Pair; @@ -19,6 +18,22 @@ public async Task RunTicksSync(int ticks) } } + /// + /// Convert a time interval to some number of ticks. + /// + public int SecondsToTicks(float seconds) + { + return (int) Math.Ceiling(seconds / Server.Timing.TickPeriod.TotalSeconds); + } + + /// + /// Run the server & client in sync for some amount of time + /// + public async Task RunSeconds(float seconds) + { + await RunTicksSync(SecondsToTicks(seconds)); + } + /// /// Runs the server-client pair in sync, but also ensures they are both idle each tick. /// @@ -59,4 +74,4 @@ public async Task SyncTicks(int targetDelta = 1) delta = cTick - sTick; Assert.That(delta, Is.EqualTo(targetDelta)); } -} \ No newline at end of file +} diff --git a/Content.IntegrationTests/PoolManager.Cvars.cs b/Content.IntegrationTests/PoolManager.Cvars.cs index 327ec627f52..5acd9d502c1 100644 --- a/Content.IntegrationTests/PoolManager.Cvars.cs +++ b/Content.IntegrationTests/PoolManager.Cvars.cs @@ -21,7 +21,9 @@ private static readonly (string cvar, string value)[] TestCvars = (CCVars.NPCMaxUpdates.Name, "999999"), (CVars.ThreadParallelCount.Name, "1"), (CCVars.GameRoleTimers.Name, "false"), + (CCVars.GameRoleWhitelist.Name, "false"), (CCVars.GridFill.Name, "false"), + (CCVars.PreloadGrids.Name, "false"), (CCVars.ArrivalsShuttles.Name, "false"), (CCVars.EmergencyShuttleEnabled.Name, "false"), (CCVars.ProcgenPreload.Name, "false"), @@ -32,6 +34,7 @@ private static readonly (string cvar, string value)[] TestCvars = (CCVars.GameLobbyEnabled.Name, "false"), (CCVars.ConfigPresetDevelopment.Name, "false"), (CCVars.AdminLogsEnabled.Name, "false"), + (CCVars.AutosaveEnabled.Name, "false"), (CVars.NetBufferSize.Name, "0") }; diff --git a/Content.IntegrationTests/Tests/Construction/Interaction/MachineConstruction.cs b/Content.IntegrationTests/Tests/Construction/Interaction/MachineConstruction.cs index f52f820a4ce..cd95a85f205 100644 --- a/Content.IntegrationTests/Tests/Construction/Interaction/MachineConstruction.cs +++ b/Content.IntegrationTests/Tests/Construction/Interaction/MachineConstruction.cs @@ -57,4 +57,3 @@ public async Task ChangeMachine() AssertPrototype("Autolathe"); } } - diff --git a/Content.IntegrationTests/Tests/Damageable/DamageableTest.cs b/Content.IntegrationTests/Tests/Damageable/DamageableTest.cs index 16744d83dce..c40b8ed286f 100644 --- a/Content.IntegrationTests/Tests/Damageable/DamageableTest.cs +++ b/Content.IntegrationTests/Tests/Damageable/DamageableTest.cs @@ -19,36 +19,45 @@ public sealed class DamageableTest # Define some damage groups - type: damageType id: TestDamage1 + name: damage-type-blunt - type: damageType id: TestDamage2a + name: damage-type-blunt - type: damageType id: TestDamage2b + name: damage-type-blunt - type: damageType id: TestDamage3a + name: damage-type-blunt - type: damageType id: TestDamage3b + name: damage-type-blunt - type: damageType id: TestDamage3c + name: damage-type-blunt # Define damage Groups with 1,2,3 damage types - type: damageGroup id: TestGroup1 + name: damage-group-brute damageTypes: - TestDamage1 - type: damageGroup id: TestGroup2 + name: damage-group-brute damageTypes: - TestDamage2a - TestDamage2b - type: damageGroup id: TestGroup3 + name: damage-group-brute damageTypes: - TestDamage3a - TestDamage3b diff --git a/Content.IntegrationTests/Tests/Destructible/DestructibleTestPrototypes.cs b/Content.IntegrationTests/Tests/Destructible/DestructibleTestPrototypes.cs index 12292f4652d..7ff92423984 100644 --- a/Content.IntegrationTests/Tests/Destructible/DestructibleTestPrototypes.cs +++ b/Content.IntegrationTests/Tests/Destructible/DestructibleTestPrototypes.cs @@ -12,24 +12,31 @@ public static class DestructibleTestPrototypes public const string DamagePrototypes = $@" - type: damageType id: TestBlunt + name: damage-type-blunt - type: damageType id: TestSlash + name: damage-type-slash - type: damageType id: TestPiercing + name: damage-type-piercing - type: damageType id: TestHeat + name: damage-type-heat - type: damageType id: TestShock + name: damage-type-shock - type: damageType id: TestCold + name: damage-type-cold - type: damageGroup id: TestBrute + name: damage-group-brute damageTypes: - TestBlunt - TestSlash @@ -37,6 +44,7 @@ public static class DestructibleTestPrototypes - type: damageGroup id: TestBurn + name: damage-group-burn damageTypes: - TestHeat - TestShock diff --git a/Content.IntegrationTests/Tests/DoAfter/DoAfterCancellationTests.cs b/Content.IntegrationTests/Tests/DoAfter/DoAfterCancellationTests.cs index d47eb13273f..0ebd17d8879 100644 --- a/Content.IntegrationTests/Tests/DoAfter/DoAfterCancellationTests.cs +++ b/Content.IntegrationTests/Tests/DoAfter/DoAfterCancellationTests.cs @@ -3,8 +3,6 @@ using Content.IntegrationTests.Tests.Interaction; using Content.IntegrationTests.Tests.Weldable; using Content.Shared.Tools.Components; -using Content.Server.Tools.Components; -using Content.Shared.DoAfter; namespace Content.IntegrationTests.Tests.DoAfter; diff --git a/Content.IntegrationTests/Tests/EntityTest.cs b/Content.IntegrationTests/Tests/EntityTest.cs index d3b1fb47221..926374cf050 100644 --- a/Content.IntegrationTests/Tests/EntityTest.cs +++ b/Content.IntegrationTests/Tests/EntityTest.cs @@ -19,6 +19,8 @@ namespace Content.IntegrationTests.Tests [TestOf(typeof(EntityUid))] public sealed class EntityTest { + private static readonly ProtoId SpawnerCategory = "Spawner"; + [Test] public async Task SpawnAndDeleteAllEntitiesOnDifferentMaps() { @@ -234,14 +236,6 @@ public async Task SpawnAndDeleteEntityCountTest() "StationEvent", "TimedDespawn", - // Spawner entities - "DragonRift", - "RandomHumanoidSpawner", - "RandomSpawner", - "ConditionalSpawner", - "GhostRoleMobSpawner", - "NukeOperativeSpawner", - "TimedSpawner", // makes an announcement on mapInit. "AnnounceOnSpawn", }; @@ -253,6 +247,7 @@ public async Task SpawnAndDeleteEntityCountTest() .Where(p => !p.Abstract) .Where(p => !pair.IsTestPrototype(p)) .Where(p => !excluded.Any(p.Components.ContainsKey)) + .Where(p => p.Categories.All(x => x.ID != SpawnerCategory)) .Select(p => p.ID) .ToList(); @@ -350,8 +345,12 @@ public async Task AllComponentsOneToOneDeleteTest() "DebrisFeaturePlacerController", // Above. "LoadedChunk", // Worldgen chunk loading malding. "BiomeSelection", // Whaddya know, requires config. + "ActivatableUI", // Requires enum key }; + // TODO TESTS + // auto ignore any components that have a "required" data field. + await using var pair = await PoolManager.GetServerClient(); var server = pair.Server; var entityManager = server.ResolveDependency(); diff --git a/Content.IntegrationTests/Tests/GameRules/FailAndStartPresetTest.cs b/Content.IntegrationTests/Tests/GameRules/FailAndStartPresetTest.cs new file mode 100644 index 00000000000..d0e0255ae77 --- /dev/null +++ b/Content.IntegrationTests/Tests/GameRules/FailAndStartPresetTest.cs @@ -0,0 +1,152 @@ +// #nullable enable +// using Content.Server.GameTicking; +// using Content.Server.GameTicking.Components; +// using Content.Server.GameTicking.Presets; +// using Content.Shared.CCVar; +// using Content.Shared.GameTicking; +// using Robust.Shared.GameObjects; + +// namespace Content.IntegrationTests.Tests.GameRules; + +// [TestFixture] +// public sealed class FailAndStartPresetTest +// { +// [TestPrototypes] +// private const string Prototypes = @" +// - type: gamePreset +// id: TestPreset +// alias: +// - nukeops +// name: Test Preset +// description: """" +// showInVote: false +// rules: +// - TestRule + +// - type: gamePreset +// id: TestPresetTenPlayers +// alias: +// - nukeops +// name: Test Preset 10 players +// description: """" +// showInVote: false +// rules: +// - TestRuleTenPlayers + +// - type: entity +// id: TestRule +// parent: BaseGameRule +// noSpawn: true +// components: +// - type: GameRule +// minPlayers: 0 +// - type: TestRule + +// - type: entity +// id: TestRuleTenPlayers +// parent: BaseGameRule +// noSpawn: true +// components: +// - type: GameRule +// minPlayers: 10 +// - type: TestRule +// "; + +// /// +// /// Test that a nuke ops gamemode can start after failing to start once. +// /// +// [Test] +// public async Task FailAndStartTest() +// { +// await using var pair = await PoolManager.GetServerClient(new PoolSettings +// { +// Dirty = true, +// DummyTicker = false, +// Connected = true, +// InLobby = true +// }); + +// var server = pair.Server; +// var client = pair.Client; +// var entMan = server.EntMan; +// var ticker = server.System(); +// server.System().Run = true; + +// Assert.That(server.CfgMan.GetCVar(CCVars.GridFill), Is.False); +// Assert.That(server.CfgMan.GetCVar(CCVars.GameLobbyFallbackEnabled), Is.True); +// Assert.That(server.CfgMan.GetCVar(CCVars.GameLobbyDefaultPreset), Is.EqualTo("secret")); +// server.CfgMan.SetCVar(CCVars.GridFill, true); +// server.CfgMan.SetCVar(CCVars.GameLobbyFallbackEnabled, false); +// server.CfgMan.SetCVar(CCVars.GameLobbyDefaultPreset, "TestPreset"); + +// // Initially in the lobby +// Assert.That(ticker.RunLevel, Is.EqualTo(GameRunLevel.PreRoundLobby)); +// Assert.That(client.AttachedEntity, Is.Null); +// Assert.That(ticker.PlayerGameStatuses[client.User!.Value], Is.EqualTo(PlayerGameStatus.NotReadyToPlay)); + +// // Try to start nukeops without readying up +// await pair.WaitCommand("setgamepreset TestPresetTenPlayers"); +// await pair.WaitCommand("startround"); +// await pair.RunTicksSync(10); + +// // Game should not have started +// Assert.That(ticker.RunLevel, Is.EqualTo(GameRunLevel.PreRoundLobby)); +// Assert.That(ticker.PlayerGameStatuses[client.User!.Value], Is.EqualTo(PlayerGameStatus.NotReadyToPlay)); +// Assert.That(!client.EntMan.EntityExists(client.AttachedEntity)); +// var player = pair.Player!.AttachedEntity; +// Assert.That(!entMan.EntityExists(player)); + +// // Ready up and start nukeops +// await pair.WaitClientCommand("toggleready True"); +// Assert.That(ticker.PlayerGameStatuses[client.User!.Value], Is.EqualTo(PlayerGameStatus.ReadyToPlay)); +// await pair.WaitCommand("setgamepreset TestPreset"); +// await pair.WaitCommand("startround"); +// await pair.RunTicksSync(10); + +// // Game should have started +// Assert.That(ticker.RunLevel, Is.EqualTo(GameRunLevel.InRound)); +// Assert.That(ticker.PlayerGameStatuses[client.User!.Value], Is.EqualTo(PlayerGameStatus.JoinedGame)); +// Assert.That(client.EntMan.EntityExists(client.AttachedEntity)); +// player = pair.Player!.AttachedEntity!.Value; +// Assert.That(entMan.EntityExists(player)); + +// ticker.SetGamePreset((GamePresetPrototype?)null); +// server.CfgMan.SetCVar(CCVars.GridFill, false); +// server.CfgMan.SetCVar(CCVars.GameLobbyFallbackEnabled, true); +// server.CfgMan.SetCVar(CCVars.GameLobbyDefaultPreset, "secret"); +// server.System().Run = false; +// await pair.CleanReturnAsync(); +// } +// } + +// public sealed class TestRuleSystem : EntitySystem +// { +// public bool Run; + +// public override void Initialize() +// { +// SubscribeLocalEvent(OnRoundStartAttempt); +// } + +// private void OnRoundStartAttempt(RoundStartAttemptEvent args) +// { +// if (!Run) +// return; + +// if (args.Forced || args.Cancelled) +// return; + +// var query = EntityQueryEnumerator(); +// while (query.MoveNext(out _, out _, out var gameRule)) +// { +// var minPlayers = gameRule.MinPlayers; +// if (args.Players.Length >= minPlayers) +// continue; + +// args.Cancel(); +// } +// } +// } + +// [RegisterComponent] +// public sealed partial class TestRuleComponent : Component; diff --git a/Content.IntegrationTests/Tests/GameRules/NukeOpsTest.cs b/Content.IntegrationTests/Tests/GameRules/NukeOpsTest.cs index 62fa93c9997..822f7967cfd 100644 --- a/Content.IntegrationTests/Tests/GameRules/NukeOpsTest.cs +++ b/Content.IntegrationTests/Tests/GameRules/NukeOpsTest.cs @@ -18,6 +18,7 @@ using Content.Shared.GameTicking; using Content.Shared.Hands.Components; using Content.Shared.Inventory; +using Content.Shared.NPC.Systems; using Content.Shared.NukeOps; using Robust.Server.GameObjects; using Robust.Shared.GameObjects; @@ -125,8 +126,14 @@ public async Task TryStopNukeOpsFromConstantlyFailing() Assert.That(entMan.HasComponent(grid)); Assert.That(entMan.HasComponent(grid)); } + Assert.That(entMan.EntityExists(rule.NukieOutpost)); + Assert.That(entMan.EntityExists(rule.NukieShuttle)); Assert.That(entMan.EntityExists(rule.TargetStation)); + Assert.That(entMan.HasComponent(rule.NukieOutpost)); + Assert.That(entMan.HasComponent(rule.NukieShuttle)); + + Assert.That(entMan.HasComponent(rule.NukieOutpost)); Assert.That(entMan.HasComponent(rule.TargetStation)); var nukieShuttlEnt = entMan.AllComponents().FirstOrDefault().Uid; @@ -145,11 +152,14 @@ public async Task TryStopNukeOpsFromConstantlyFailing() Assert.That(entMan.EntityExists(nukieStationEnt)); var nukieStation = entMan.GetComponent(nukieStationEnt!.Value); + var nukieStation = entMan.GetComponent(rule.NukieOutpost!.Value); Assert.That(entMan.EntityExists(nukieStation.Station)); Assert.That(nukieStation.Station, Is.Not.EqualTo(rule.TargetStation)); Assert.That(server.MapMan.MapExists(mapRule.Map)); var nukieMap = mapSys.GetMap(mapRule.Map!.Value); + Assert.That(server.MapMan.MapExists(rule.NukiePlanet)); + var nukieMap = mapSys.GetMap(rule.NukiePlanet!.Value); var targetStation = entMan.GetComponent(rule.TargetStation!.Value); var targetGrid = targetStation.Grids.First(); @@ -159,6 +169,8 @@ public async Task TryStopNukeOpsFromConstantlyFailing() Assert.That(entMan.GetComponent(player).MapUid, Is.EqualTo(nukieMap)); Assert.That(entMan.GetComponent(nukieStationEnt.Value).MapUid, Is.EqualTo(nukieMap)); Assert.That(entMan.GetComponent(nukieShuttlEnt).MapUid, Is.EqualTo(nukieMap)); + Assert.That(entMan.GetComponent(rule.NukieOutpost!.Value).MapUid, Is.EqualTo(nukieMap)); + Assert.That(entMan.GetComponent(rule.NukieShuttle!.Value).MapUid, Is.EqualTo(nukieMap)); // The maps are all map-initialized, including the player // Yes, this is necessary as this has repeatedly been broken somehow. @@ -173,6 +185,8 @@ public async Task TryStopNukeOpsFromConstantlyFailing() Assert.That(LifeStage(targetMap), Is.GreaterThan(EntityLifeStage.Initialized)); Assert.That(LifeStage(nukieStationEnt.Value), Is.GreaterThan(EntityLifeStage.Initialized)); Assert.That(LifeStage(nukieShuttlEnt), Is.GreaterThan(EntityLifeStage.Initialized)); + Assert.That(LifeStage(rule.NukieOutpost), Is.GreaterThan(EntityLifeStage.Initialized)); + Assert.That(LifeStage(rule.NukieShuttle), Is.GreaterThan(EntityLifeStage.Initialized)); Assert.That(LifeStage(rule.TargetStation), Is.GreaterThan(EntityLifeStage.Initialized)); // Make sure the player has hands. We've had fucking disarmed nukies before. diff --git a/Content.IntegrationTests/Tests/GameRules/RuleMaxTimeRestartTest.cs b/Content.IntegrationTests/Tests/GameRules/RuleMaxTimeRestartTest.cs index ffaff3b8ded..20a157e33e8 100644 --- a/Content.IntegrationTests/Tests/GameRules/RuleMaxTimeRestartTest.cs +++ b/Content.IntegrationTests/Tests/GameRules/RuleMaxTimeRestartTest.cs @@ -20,6 +20,9 @@ public async Task RestartTest() await using var pair = await PoolManager.GetServerClient(new PoolSettings { InLobby = true }); var server = pair.Server; + Assert.That(server.EntMan.Count(), Is.Zero); + Assert.That(server.EntMan.Count(), Is.Zero); + var entityManager = server.ResolveDependency(); var sGameTicker = server.ResolveDependency().GetEntitySystem(); var sGameTiming = server.ResolveDependency(); @@ -27,6 +30,9 @@ public async Task RestartTest() sGameTicker.StartGameRule("MaxTimeRestart", out var ruleEntity); Assert.That(entityManager.TryGetComponent(ruleEntity, out var maxTime)); + Assert.That(server.EntMan.Count(), Is.EqualTo(1)); + Assert.That(server.EntMan.Count(), Is.EqualTo(1)); + await server.WaitAssertion(() => { Assert.That(sGameTicker.RunLevel, Is.EqualTo(GameRunLevel.PreRoundLobby)); @@ -34,6 +40,9 @@ await server.WaitAssertion(() => sGameTicker.StartRound(); }); + Assert.That(server.EntMan.Count(), Is.EqualTo(1)); + Assert.That(server.EntMan.Count(), Is.EqualTo(1)); + await server.WaitAssertion(() => { Assert.That(sGameTicker.RunLevel, Is.EqualTo(GameRunLevel.InRound)); diff --git a/Content.IntegrationTests/Tests/Interaction/InteractionTest.Constants.cs b/Content.IntegrationTests/Tests/Interaction/InteractionTest.Constants.cs index 11381fb8ccd..a915e5d47d1 100644 --- a/Content.IntegrationTests/Tests/Interaction/InteractionTest.Constants.cs +++ b/Content.IntegrationTests/Tests/Interaction/InteractionTest.Constants.cs @@ -1,3 +1,4 @@ + namespace Content.IntegrationTests.Tests.Interaction; // This partial class contains various constant prototype IDs common to interaction tests. @@ -27,8 +28,6 @@ public abstract partial class InteractionTest // Parts protected const string Bin1 = "MatterBinStockPart"; - protected const string Cap1 = "CapacitorStockPart"; protected const string Manipulator1 = "MicroManipulatorStockPart"; - protected const string Battery1 = "PowerCellSmall"; - protected const string Battery4 = "PowerCellHyper"; } + diff --git a/Content.IntegrationTests/Tests/Interaction/InteractionTest.EntitySpecifier.cs b/Content.IntegrationTests/Tests/Interaction/InteractionTest.EntitySpecifier.cs index 414cf4bb56f..37dca721373 100644 --- a/Content.IntegrationTests/Tests/Interaction/InteractionTest.EntitySpecifier.cs +++ b/Content.IntegrationTests/Tests/Interaction/InteractionTest.EntitySpecifier.cs @@ -3,6 +3,7 @@ using Robust.Shared.GameObjects; using Robust.Shared.Map; using Robust.Shared.Prototypes; +using static Robust.UnitTesting.RobustIntegrationTest; namespace Content.IntegrationTests.Tests.Interaction; @@ -54,7 +55,7 @@ public static implicit operator EntitySpecifier((string, int) tuple) /// /// Convert applicable entity prototypes into stack prototypes. /// - public void ConvertToStack(IPrototypeManager protoMan, IComponentFactory factory) + public async Task ConvertToStack(IPrototypeManager protoMan, IComponentFactory factory, ServerIntegrationInstance server) { if (Converted) return; @@ -73,11 +74,14 @@ public void ConvertToStack(IPrototypeManager protoMan, IComponentFactory factory return; } - if (entProto.TryGetComponent(factory.GetComponentName(typeof(StackComponent)), - out var stackComp)) + StackComponent? stack = null; + await server.WaitPost(() => { - Prototype = stackComp.StackTypeId; - } + entProto.TryGetComponent(factory.GetComponentName(typeof(StackComponent)), out stack); + }); + + if (stack != null) + Prototype = stack.StackTypeId; } } @@ -100,11 +104,14 @@ await Server.WaitPost(() => return default; } - if (entProto.TryGetComponent(Factory.GetComponentName(typeof(StackComponent)), - out var stackComp)) + StackComponent? stack = null; + await Server.WaitPost(() => { - return await SpawnEntity((stackComp.StackTypeId, spec.Quantity), coords); - } + entProto.TryGetComponent(Factory.GetComponentName(typeof(StackComponent)), out stack); + }); + + if (stack != null) + return await SpawnEntity((stack.StackTypeId, spec.Quantity), coords); Assert.That(spec.Quantity, Is.EqualTo(1), "SpawnEntity only supports returning a singular entity"); await Server.WaitPost(() => uid = SEntMan.SpawnEntity(spec.Prototype, coords)); diff --git a/Content.IntegrationTests/Tests/Interaction/InteractionTest.EntitySpecifierCollection.cs b/Content.IntegrationTests/Tests/Interaction/InteractionTest.EntitySpecifierCollection.cs index 520d2699c14..7f7de3318b4 100644 --- a/Content.IntegrationTests/Tests/Interaction/InteractionTest.EntitySpecifierCollection.cs +++ b/Content.IntegrationTests/Tests/Interaction/InteractionTest.EntitySpecifierCollection.cs @@ -5,6 +5,7 @@ using Robust.Shared.GameObjects; using Robust.Shared.Prototypes; using Robust.Shared.Utility; +using static Robust.UnitTesting.RobustIntegrationTest; namespace Content.IntegrationTests.Tests.Interaction; @@ -111,7 +112,7 @@ public EntitySpecifierCollection Clone() /// /// Convert applicable entity prototypes into stack prototypes. /// - public void ConvertToStacks(IPrototypeManager protoMan, IComponentFactory factory) + public async Task ConvertToStacks(IPrototypeManager protoMan, IComponentFactory factory, ServerIntegrationInstance server) { if (Converted) return; @@ -130,14 +131,17 @@ public void ConvertToStacks(IPrototypeManager protoMan, IComponentFactory factor continue; } - if (!entProto.TryGetComponent(factory.GetComponentName(typeof(StackComponent)), - out var stackComp)) + StackComponent? stack = null; + await server.WaitPost(() => { + entProto.TryGetComponent(factory.GetComponentName(typeof(StackComponent)), out stack); + }); + + if (stack == null) continue; - } toRemove.Add(id); - toAdd.Add((stackComp.StackTypeId, quantity)); + toAdd.Add((stack.StackTypeId, quantity)); } foreach (var id in toRemove) diff --git a/Content.IntegrationTests/Tests/Interaction/InteractionTest.Helpers.cs b/Content.IntegrationTests/Tests/Interaction/InteractionTest.Helpers.cs index 480fd9cde6f..19ca83a9715 100644 --- a/Content.IntegrationTests/Tests/Interaction/InteractionTest.Helpers.cs +++ b/Content.IntegrationTests/Tests/Interaction/InteractionTest.Helpers.cs @@ -5,12 +5,9 @@ using System.Numerics; using System.Reflection; using Content.Client.Construction; -using Content.Server.Atmos; -using Content.Server.Atmos.Components; using Content.Server.Atmos.EntitySystems; using Content.Server.Construction.Components; using Content.Server.Gravity; -using Content.Server.Item; using Content.Server.Power.Components; using Content.Shared.Atmos; using Content.Shared.Construction.Prototypes; @@ -634,7 +631,7 @@ protected async Task AssertEntityLookup( var entities = await DoEntityLookup(flags); var found = ToEntityCollection(entities); expected.Remove(found); - expected.ConvertToStacks(ProtoMan, Factory); + await expected.ConvertToStacks(ProtoMan, Factory, Server); if (expected.Entities.Count == 0) return; @@ -670,7 +667,7 @@ protected async Task FindEntity( LookupFlags flags = LookupFlags.Uncontained | LookupFlags.Contained, bool shouldSucceed = true) { - spec.ConvertToStack(ProtoMan, Factory); + await spec.ConvertToStack(ProtoMan, Factory, Server); var entities = await DoEntityLookup(flags); foreach (var uid in entities) @@ -767,14 +764,9 @@ protected async Task RunTicks(int ticks) await Pair.RunTicksSync(ticks); } - protected int SecondsToTicks(float seconds) - { - return (int) Math.Ceiling(seconds / TickPeriod); - } - protected async Task RunSeconds(float seconds) { - await RunTicks(SecondsToTicks(seconds)); + await Pair.RunSeconds(seconds); } #endregion @@ -825,7 +817,7 @@ protected bool TryGetBui(Enum key, [NotNullWhen(true)] out BoundUserInterface? b return false; } - if (!ui.OpenInterfaces.TryGetValue(key, out bui)) + if (!ui.ClientOpenInterfaces.TryGetValue(key, out bui)) { if (shouldSucceed) Assert.Fail($"Entity {SEntMan.ToPrettyString(SEntMan.GetEntity(target.Value))} does not have an open bui with key {key.GetType()}.{key}."); diff --git a/Content.IntegrationTests/Tests/Interaction/InteractionTest.cs b/Content.IntegrationTests/Tests/Interaction/InteractionTest.cs index a4ed31e9983..42f64b344cd 100644 --- a/Content.IntegrationTests/Tests/Interaction/InteractionTest.cs +++ b/Content.IntegrationTests/Tests/Interaction/InteractionTest.cs @@ -12,7 +12,6 @@ using Content.Shared.DoAfter; using Content.Shared.Hands.Components; using Content.Shared.Interaction; -using Content.Server.Item; using Content.Shared.Mind; using Content.Shared.Players; using Robust.Client.Input; diff --git a/Content.IntegrationTests/Tests/Lobby/CharacterCreationTest.cs b/Content.IntegrationTests/Tests/Lobby/CharacterCreationTest.cs index 4abe2839fba..60501a781fc 100644 --- a/Content.IntegrationTests/Tests/Lobby/CharacterCreationTest.cs +++ b/Content.IntegrationTests/Tests/Lobby/CharacterCreationTest.cs @@ -1,5 +1,4 @@ using Content.Client.Lobby; -using Content.Client.Preferences; using Content.Server.Preferences.Managers; using Content.Shared.Preferences; using Robust.Client.State; diff --git a/Content.IntegrationTests/Tests/Mapping/MappingTests.cs b/Content.IntegrationTests/Tests/Mapping/MappingTests.cs new file mode 100644 index 00000000000..287e30eb8b1 --- /dev/null +++ b/Content.IntegrationTests/Tests/Mapping/MappingTests.cs @@ -0,0 +1,102 @@ +using Robust.Server.GameObjects; +using Robust.Shared.GameObjects; +using Robust.Shared.Map; + +namespace Content.IntegrationTests.Tests.Mapping; + +[TestFixture] +public sealed class MappingTests +{ + /// + /// Checks that the mapping command creates paused & uninitialized maps. + /// + [Test] + public async Task MappingTest() + { + await using var pair = await PoolManager.GetServerClient(new PoolSettings {Dirty = true, Connected = true, DummyTicker = false}); + + var server = pair.Server; + var entMan = server.EntMan; + var mapSys = server.System(); + + await pair.RunTicksSync(5); + var mapId = 1; + while (mapSys.MapExists(new(mapId))) + { + mapId++; + } + + await pair.WaitClientCommand($"mapping {mapId}"); + var map = mapSys.GetMap(new MapId(mapId)); + + var mapXform = server.Transform(map); + Assert.That(mapXform.MapUid, Is.EqualTo(map)); + Assert.That(mapXform.MapID, Is.EqualTo(new MapId(mapId))); + + var xform = server.Transform(pair.Player!.AttachedEntity!.Value); + + Assert.That(xform.MapUid, Is.EqualTo(map)); + Assert.That(mapSys.IsInitialized(map), Is.False); + Assert.That(mapSys.IsPaused(map), Is.True); + Assert.That(server.MetaData(map).EntityLifeStage, Is.EqualTo(EntityLifeStage.Initialized)); + Assert.That(server.MetaData(map).EntityPaused, Is.True); + + // Spawn a new entity + EntityUid ent = default; + await server.WaitPost(() => + { + ent = entMan.Spawn(null, new MapCoordinates(default, new(mapId))); + }); + await pair.RunTicksSync(5); + Assert.That(server.MetaData(ent).EntityLifeStage, Is.EqualTo(EntityLifeStage.Initialized)); + Assert.That(server.MetaData(ent).EntityPaused, Is.True); + + // Save the map + var file = $"{nameof(MappingTest)}.yml"; + await pair.WaitClientCommand($"savemap {mapId} {file}"); + + // Mapinitialize it + await pair.WaitClientCommand($"mapinit {mapId}"); + Assert.That(mapSys.IsInitialized(map), Is.True); + Assert.That(mapSys.IsPaused(map), Is.False); + Assert.That(server.MetaData(map).EntityLifeStage, Is.EqualTo(EntityLifeStage.MapInitialized)); + Assert.That(server.MetaData(map).EntityPaused, Is.False); + Assert.That(server.MetaData(ent).EntityLifeStage, Is.EqualTo(EntityLifeStage.MapInitialized)); + Assert.That(server.MetaData(ent).EntityPaused, Is.False); + + await server.WaitPost(() => entMan.DeleteEntity(map)); + + // Load the saved map + mapId++; + while (mapSys.MapExists(new(mapId))) + { + mapId++; + } + + await pair.WaitClientCommand($"mapping {mapId} {file}"); + map = mapSys.GetMap(new MapId(mapId)); + + // And it should all be paused and un-initialized + xform = server.Transform(pair.Player!.AttachedEntity!.Value); + Assert.That(xform.MapUid, Is.EqualTo(map)); + Assert.That(mapSys.IsInitialized(map), Is.False); + Assert.That(mapSys.IsPaused(map), Is.True); + Assert.That(server.MetaData(map).EntityLifeStage, Is.EqualTo(EntityLifeStage.Initialized)); + Assert.That(server.MetaData(map).EntityPaused, Is.True); + + mapXform = server.Transform(map); + Assert.That(mapXform.MapUid, Is.EqualTo(map)); + Assert.That(mapXform.MapID, Is.EqualTo(new MapId(mapId))); + Assert.That(mapXform.ChildCount, Is.EqualTo(2)); + + mapXform.ChildEnumerator.MoveNext(out ent); + if (ent == pair.Player.AttachedEntity) + mapXform.ChildEnumerator.MoveNext(out ent); + + Assert.That(server.MetaData(ent).EntityLifeStage, Is.EqualTo(EntityLifeStage.Initialized)); + Assert.That(server.MetaData(ent).EntityPaused, Is.True); + + await server.WaitPost(() => entMan.DeleteEntity(map)); + await pair.CleanReturnAsync(); + } +} diff --git a/Content.IntegrationTests/Tests/MaterialArbitrageTest.cs b/Content.IntegrationTests/Tests/MaterialArbitrageTest.cs index a2faef0dd4d..7f9c02fc13b 100644 --- a/Content.IntegrationTests/Tests/MaterialArbitrageTest.cs +++ b/Content.IntegrationTests/Tests/MaterialArbitrageTest.cs @@ -1,22 +1,23 @@ +using System.Collections.Generic; using Content.Server.Cargo.Systems; using Content.Server.Construction.Completions; using Content.Server.Construction.Components; using Content.Server.Destructible; using Content.Server.Destructible.Thresholds.Behaviors; using Content.Server.Stack; +using Content.Shared.Chemistry.Reagent; +using Content.Shared.Construction.Components; using Content.Shared.Construction.Prototypes; using Content.Shared.Construction.Steps; +using Content.Shared.FixedPoint; using Content.Shared.Lathe; +using Content.Shared.Materials; using Content.Shared.Research.Prototypes; using Content.Shared.Stacks; using Robust.Shared.GameObjects; using Robust.Shared.Map; using Robust.Shared.Prototypes; -using System.Collections.Generic; -using Content.Shared.Chemistry.Reagent; -using Content.Shared.Construction.Components; -using Content.Shared.FixedPoint; -using Content.Shared.Materials; +using Robust.Shared.Utility; namespace Content.IntegrationTests.Tests; @@ -52,10 +53,10 @@ public async Task NoMaterialArbitrage() var destructibleName = compFact.GetComponentName(typeof(DestructibleComponent)); // construct inverted lathe recipe dictionary - Dictionary latheRecipes = new(); + Dictionary> latheRecipes = new(); foreach (var proto in protoManager.EnumeratePrototypes()) { - latheRecipes.Add(proto.Result, proto); + latheRecipes.GetOrNew(proto.Result).Add(proto); } // Lets assume the possible lathe for resource multipliers: @@ -183,16 +184,19 @@ public async Task NoMaterialArbitrage() var spawnedPrice = await GetSpawnedPrice(spawnedEnts); var price = await GetPrice(id); if (spawnedPrice > 0 && price > 0) - Assert.That(spawnedPrice, Is.LessThanOrEqualTo(price), $"{id} increases in price after being destroyed"); + Assert.That(spawnedPrice, Is.LessThanOrEqualTo(price), $"{id} increases in price after being destroyed\nEntities spawned on destruction: {string.Join(',', spawnedEnts)}"); // Check lathe production - if (latheRecipes.TryGetValue(id, out var recipe)) + if (latheRecipes.TryGetValue(id, out var recipes)) { - foreach (var (matId, amount) in recipe.RequiredMaterials) + foreach (var recipe in recipes) { - var actualAmount = SharedLatheSystem.AdjustMaterial(amount, recipe.ApplyMaterialDiscount, multiplier); - if (spawnedMats.TryGetValue(matId, out var numSpawned)) - Assert.That(numSpawned, Is.LessThanOrEqualTo(actualAmount), $"destroying a {id} spawns more {matId} than required to produce via an (upgraded) lathe."); + foreach (var (matId, amount) in recipe.RequiredMaterials) + { + var actualAmount = SharedLatheSystem.AdjustMaterial(amount, recipe.ApplyMaterialDiscount, multiplier); + if (spawnedMats.TryGetValue(matId, out var numSpawned)) + Assert.That(numSpawned, Is.LessThanOrEqualTo(actualAmount), $"destroying a {id} spawns more {matId} than required to produce via an (upgraded) lathe."); + } } } @@ -263,13 +267,16 @@ public async Task NoMaterialArbitrage() Assert.That(deconstructedPrice, Is.LessThanOrEqualTo(price), $"{id} increases in price after being deconstructed"); // Check lathe production - if (latheRecipes.TryGetValue(id, out var recipe)) + if (latheRecipes.TryGetValue(id, out var recipes)) { - foreach (var (matId, amount) in recipe.RequiredMaterials) + foreach (var recipe in recipes) { - var actualAmount = SharedLatheSystem.AdjustMaterial(amount, recipe.ApplyMaterialDiscount, multiplier); - if (deconstructedMats.TryGetValue(matId, out var numSpawned)) - Assert.That(numSpawned, Is.LessThanOrEqualTo(actualAmount), $"deconstructing {id} spawns more {matId} than required to produce via an (upgraded) lathe."); + foreach (var (matId, amount) in recipe.RequiredMaterials) + { + var actualAmount = SharedLatheSystem.AdjustMaterial(amount, recipe.ApplyMaterialDiscount, multiplier); + if (deconstructedMats.TryGetValue(matId, out var numSpawned)) + Assert.That(numSpawned, Is.LessThanOrEqualTo(actualAmount), $"deconstructing {id} spawns more {matId} than required to produce via an (upgraded) lathe."); + } } } @@ -315,13 +322,16 @@ public async Task NoMaterialArbitrage() Assert.That(sumPrice, Is.LessThanOrEqualTo(price), $"{id} increases in price after decomposed into raw materials"); // Check lathe production - if (latheRecipes.TryGetValue(id, out var recipe)) + if (latheRecipes.TryGetValue(id, out var recipes)) { - foreach (var (matId, amount) in recipe.RequiredMaterials) + foreach (var recipe in recipes) { - var actualAmount = SharedLatheSystem.AdjustMaterial(amount, recipe.ApplyMaterialDiscount, multiplier); - if (compositionComponent.MaterialComposition.TryGetValue(matId, out var numSpawned)) - Assert.That(numSpawned, Is.LessThanOrEqualTo(actualAmount), $"The physical composition of {id} has more {matId} than required to produce via an (upgraded) lathe."); + foreach (var (matId, amount) in recipe.RequiredMaterials) + { + var actualAmount = SharedLatheSystem.AdjustMaterial(amount, recipe.ApplyMaterialDiscount, multiplier); + if (compositionComponent.MaterialComposition.TryGetValue(matId, out var numSpawned)) + Assert.That(numSpawned, Is.LessThanOrEqualTo(actualAmount), $"The physical composition of {id} has more {matId} than required to produce via an (upgraded) lathe."); + } } } @@ -359,7 +369,7 @@ await server.WaitPost(() => { var ent = entManager.SpawnEntity(id, testMap.GridCoords); stackSys.SetCount(ent, 1); - priceCache[id] = price = pricing.GetPrice(ent); + priceCache[id] = price = pricing.GetPrice(ent, false); entManager.DeleteEntity(ent); }); } diff --git a/Content.IntegrationTests/Tests/Minds/GhostRoleTests.cs b/Content.IntegrationTests/Tests/Minds/GhostRoleTests.cs index ca97e435a7f..150bc951f8c 100644 --- a/Content.IntegrationTests/Tests/Minds/GhostRoleTests.cs +++ b/Content.IntegrationTests/Tests/Minds/GhostRoleTests.cs @@ -1,5 +1,6 @@ #nullable enable using System.Linq; +using Content.IntegrationTests.Pair; using Content.Server.Ghost.Roles; using Content.Server.Ghost.Roles.Components; using Content.Server.Players; @@ -26,7 +27,7 @@ public sealed class GhostRoleTests "; /// - /// This is a simple test that just checks if a player can take a ghost roll and then regain control of their + /// This is a simple test that just checks if a player can take a ghost role and then regain control of their /// original entity without encountering errors. /// [Test] @@ -34,12 +35,15 @@ public async Task TakeRoleAndReturn() { await using var pair = await PoolManager.GetServerClient(new PoolSettings { + Dirty = true, DummyTicker = false, Connected = true }); var server = pair.Server; var client = pair.Client; + var mapData = await pair.CreateTestMap(); + var entMan = server.ResolveDependency(); var sPlayerMan = server.ResolveDependency(); var conHost = client.ResolveDependency(); @@ -51,7 +55,7 @@ public async Task TakeRoleAndReturn() EntityUid originalMob = default; await server.WaitPost(() => { - originalMob = entMan.SpawnEntity(null, MapCoordinates.Nullspace); + originalMob = entMan.SpawnEntity(null, mapData.GridCoords); mindSystem.TransferTo(originalMindId, originalMob, true); }); @@ -69,12 +73,12 @@ await server.WaitPost(() => Assert.That(entMan.HasComponent(ghost)); Assert.That(ghost, Is.Not.EqualTo(originalMob)); Assert.That(session.ContentData()?.Mind, Is.EqualTo(originalMindId)); - Assert.That(originalMind.OwnedEntity, Is.EqualTo(originalMob)); + Assert.That(originalMind.OwnedEntity, Is.EqualTo(originalMob), $"Original mob: {originalMob}, Ghost: {ghost}"); Assert.That(originalMind.VisitingEntity, Is.EqualTo(ghost)); // Spawn ghost takeover entity. EntityUid ghostRole = default; - await server.WaitPost(() => ghostRole = entMan.SpawnEntity("GhostRoleTestEntity", MapCoordinates.Nullspace)); + await server.WaitPost(() => ghostRole = entMan.SpawnEntity("GhostRoleTestEntity", mapData.GridCoords)); // Take the ghost role await server.WaitPost(() => diff --git a/Content.IntegrationTests/Tests/Minds/GhostTests.cs b/Content.IntegrationTests/Tests/Minds/GhostTests.cs new file mode 100644 index 00000000000..ad9d53a70db --- /dev/null +++ b/Content.IntegrationTests/Tests/Minds/GhostTests.cs @@ -0,0 +1,159 @@ +using System.Numerics; +using Content.IntegrationTests.Pair; +using Content.Shared.Ghost; +using Content.Shared.Mind; +using Content.Shared.Players; +using Robust.Server.GameObjects; +using Robust.Shared.GameObjects; +using Robust.Shared.Map; +using Robust.Shared.Player; +using Robust.UnitTesting; + +namespace Content.IntegrationTests.Tests.Minds; + +[TestFixture] +public sealed class GhostTests +{ + struct GhostTestData + { + public IEntityManager SEntMan; + public Robust.Server.Player.IPlayerManager SPlayerMan; + public Server.Mind.MindSystem SMindSys; + public SharedTransformSystem STransformSys = default!; + + public TestPair Pair = default!; + + public TestMapData MapData => Pair.TestMap!; + + public RobustIntegrationTest.ServerIntegrationInstance Server => Pair.Server; + public RobustIntegrationTest.ClientIntegrationInstance Client => Pair.Client; + + /// + /// Initial player coordinates. Note that this does not necessarily correspond to the position of the + /// entity. + /// + public NetCoordinates PlayerCoords = default!; + + public NetEntity Player = default!; + public EntityUid SPlayerEnt = default!; + + public ICommonSession ClientSession = default!; + public ICommonSession ServerSession = default!; + + public GhostTestData() + { + } + } + + private async Task SetupData() + { + var data = new GhostTestData(); + + // Client is needed to create a session for the ghost system. Creating a dummy session was too difficult. + data.Pair = await PoolManager.GetServerClient(new PoolSettings + { + DummyTicker = false, + Connected = true, + Dirty = true + }); + + data.SEntMan = data.Pair.Server.ResolveDependency(); + data.SPlayerMan = data.Pair.Server.ResolveDependency(); + data.SMindSys = data.SEntMan.System(); + data.STransformSys = data.SEntMan.System(); + + // Setup map. + await data.Pair.CreateTestMap(); + data.PlayerCoords = data.SEntMan.GetNetCoordinates(data.MapData.GridCoords.Offset(new Vector2(0.5f, 0.5f)).WithEntityId(data.MapData.MapUid, data.STransformSys, data.SEntMan)); + + if (data.Client.Session == null) + Assert.Fail("No player"); + data.ClientSession = data.Client.Session!; + data.ServerSession = data.SPlayerMan.GetSessionById(data.ClientSession.UserId); + + Entity mind = default!; + await data.Pair.Server.WaitPost(() => + { + data.Player = data.SEntMan.GetNetEntity(data.SEntMan.SpawnEntity(null, data.SEntMan.GetCoordinates(data.PlayerCoords))); + mind = data.SMindSys.CreateMind(data.ServerSession.UserId, "DummyPlayerEntity"); + data.SPlayerEnt = data.SEntMan.GetEntity(data.Player); + data.SMindSys.TransferTo(mind, data.SPlayerEnt, mind: mind.Comp); + data.Server.PlayerMan.SetAttachedEntity(data.ServerSession, data.SPlayerEnt); + }); + + await data.Pair.RunTicksSync(5); + + Assert.Multiple(() => + { + Assert.That(data.ServerSession.ContentData()?.Mind, Is.EqualTo(mind.Owner)); + Assert.That(data.ServerSession.AttachedEntity, Is.EqualTo(data.SPlayerEnt)); + Assert.That(data.ServerSession.AttachedEntity, Is.EqualTo(mind.Comp.CurrentEntity), + "Player is not attached to the mind's current entity."); + Assert.That(data.SEntMan.EntityExists(mind.Comp.OwnedEntity), + "The mind's current entity does not exist"); + Assert.That(mind.Comp.VisitingEntity == null || data.SEntMan.EntityExists(mind.Comp.VisitingEntity), + "The minds visited entity does not exist."); + }); + + Assert.That(data.SPlayerEnt, Is.Not.EqualTo(null)); + + return data; + } + + /// + /// Test that a ghost gets created when the player entity is deleted. + /// 1. Delete mob + /// 2. Assert is ghost + /// + [Test] + public async Task TestGridGhostOnDelete() + { + var data = await SetupData(); + + var oldPosition = data.SEntMan.GetComponent(data.SPlayerEnt).Coordinates; + + Assert.That(!data.SEntMan.HasComponent(data.SPlayerEnt), "Player was initially a ghost?"); + + // Delete entity + await data.Server.WaitPost(() => data.SEntMan.DeleteEntity(data.SPlayerEnt)); + await data.Pair.RunTicksSync(5); + + var ghost = data.ServerSession.AttachedEntity!.Value; + Assert.That(data.SEntMan.HasComponent(ghost), "Player did not become a ghost"); + + // Ensure the position is the same + var ghostPosition = data.SEntMan.GetComponent(ghost).Coordinates; + Assert.That(ghostPosition, Is.EqualTo(oldPosition)); + + await data.Pair.CleanReturnAsync(); + } + + /// + /// Test that a ghost gets created when the player entity is queue deleted. + /// 1. Delete mob + /// 2. Assert is ghost + /// + [Test] + public async Task TestGridGhostOnQueueDelete() + { + var data = await SetupData(); + + var oldPosition = data.SEntMan.GetComponent(data.SPlayerEnt).Coordinates; + + Assert.That(!data.SEntMan.HasComponent(data.SPlayerEnt), "Player was initially a ghost?"); + + // Delete entity + await data.Server.WaitPost(() => data.SEntMan.QueueDeleteEntity(data.SPlayerEnt)); + await data.Pair.RunTicksSync(5); + + var ghost = data.ServerSession.AttachedEntity!.Value; + Assert.That(data.SEntMan.HasComponent(ghost), "Player did not become a ghost"); + + // Ensure the position is the same + var ghostPosition = data.SEntMan.GetComponent(ghost).Coordinates; + Assert.That(ghostPosition, Is.EqualTo(oldPosition)); + + await data.Pair.CleanReturnAsync(); + } + +} diff --git a/Content.IntegrationTests/Tests/Minds/MindTests.EntityDeletion.cs b/Content.IntegrationTests/Tests/Minds/MindTests.EntityDeletion.cs index 2ebe750f98d..de7739b2ad7 100644 --- a/Content.IntegrationTests/Tests/Minds/MindTests.EntityDeletion.cs +++ b/Content.IntegrationTests/Tests/Minds/MindTests.EntityDeletion.cs @@ -1,3 +1,4 @@ +#nullable enable using System.Linq; using Content.Server.GameTicking; using Content.Shared.Ghost; @@ -77,7 +78,7 @@ public async Task TestGhostOnDeleteMap() await using var pair = await SetupPair(dirty: true); var server = pair.Server; var testMap = await pair.CreateTestMap(); - var coordinates = testMap.GridCoords; + var testMap2 = await pair.CreateTestMap(); var entMan = server.ResolveDependency(); var mapManager = server.ResolveDependency(); @@ -91,7 +92,7 @@ public async Task TestGhostOnDeleteMap() MindComponent mind = default!; await server.WaitAssertion(() => { - playerEnt = entMan.SpawnEntity(null, coordinates); + playerEnt = entMan.SpawnEntity(null, testMap.GridCoords); mindId = player.ContentData()!.Mind!.Value; mind = entMan.GetComponent(mindId); mindSystem.TransferTo(mindId, playerEnt); @@ -100,14 +101,20 @@ await server.WaitAssertion(() => }); await pair.RunTicksSync(5); - await server.WaitPost(() => mapManager.DeleteMap(testMap.MapId)); + await server.WaitAssertion(() => mapManager.DeleteMap(testMap.MapId)); await pair.RunTicksSync(5); await server.WaitAssertion(() => { #pragma warning disable NUnit2045 // Interdependent assertions. - Assert.That(entMan.EntityExists(mind.CurrentEntity), Is.True); - Assert.That(mind.CurrentEntity, Is.Not.EqualTo(playerEnt)); + // Spawn ghost on the second map + var attachedEntity = player.AttachedEntity; + Assert.That(entMan.EntityExists(attachedEntity), Is.True); + Assert.That(attachedEntity, Is.Not.EqualTo(playerEnt)); + Assert.That(entMan.HasComponent(attachedEntity)); + var transform = entMan.GetComponent(attachedEntity.Value); + Assert.That(transform.MapID, Is.Not.EqualTo(MapId.Nullspace)); + Assert.That(transform.MapID, Is.Not.EqualTo(testMap.MapId)); #pragma warning restore NUnit2045 }); diff --git a/Content.IntegrationTests/Tests/PostMapInitTest.cs b/Content.IntegrationTests/Tests/PostMapInitTest.cs index 6cddd866ebb..05f603408b3 100644 --- a/Content.IntegrationTests/Tests/PostMapInitTest.cs +++ b/Content.IntegrationTests/Tests/PostMapInitTest.cs @@ -61,7 +61,9 @@ public sealed class PostMapInitTest "TheHive", //DeltaV "Hammurabi", //DeltaV "Lighthouse", //DeltaV - "Submarine" //DeltaV + "Submarine", //DeltaV + "Gax", + "Rad" }; /// @@ -153,7 +155,10 @@ public async Task NoSavedPostMapInitTest() [Test, TestCaseSource(nameof(GameMaps))] public async Task GameMapsLoadableTest(string mapProto) { - await using var pair = await PoolManager.GetServerClient(); + await using var pair = await PoolManager.GetServerClient(new PoolSettings + { + Dirty = true // Stations spawn a bunch of nullspace entities and maps like centcomm. + }); var server = pair.Server; var mapManager = server.ResolveDependency(); diff --git a/Content.IntegrationTests/Tests/Power/PowerTest.cs b/Content.IntegrationTests/Tests/Power/PowerTest.cs index a6af3e6a65b..a94e94489c0 100644 --- a/Content.IntegrationTests/Tests/Power/PowerTest.cs +++ b/Content.IntegrationTests/Tests/Power/PowerTest.cs @@ -143,8 +143,8 @@ public sealed class PowerTest anchored: true - type: UserInterface interfaces: - - key: enum.ApcUiKey.Key - type: ApcBoundUserInterface + enum.ApcUiKey.Key: + type: ApcBoundUserInterface - type: AccessReader access: [['Engineering']] diff --git a/Content.IntegrationTests/Tests/Preferences/ServerDbSqliteTests.cs b/Content.IntegrationTests/Tests/Preferences/ServerDbSqliteTests.cs index d759a78215d..2e8ef850f1c 100644 --- a/Content.IntegrationTests/Tests/Preferences/ServerDbSqliteTests.cs +++ b/Content.IntegrationTests/Tests/Preferences/ServerDbSqliteTests.cs @@ -3,6 +3,7 @@ using Content.Server.Database; using Content.Shared.GameTicking; using Content.Shared.Humanoid; +using Content.Shared.Humanoid.Markings; using Content.Shared.Preferences; using Content.Shared.Nuclear14.Special; using Microsoft.Data.Sqlite; @@ -38,22 +39,22 @@ public sealed class ServerDbSqliteTests private static HumanoidCharacterProfile CharlieCharlieson() { - return new( - "Charlie Charlieson", - "The biggest boy around.", - "Human", - 1, - 1, - 21, - Sex.Male, - Gender.Epicene, - new HumanoidCharacterAppearance( + return new HumanoidCharacterProfile + { + Name = "Charlie Charlieson", + FlavorText = "The biggest boy around.", + Species = "Human", + Customspeciename = "", + Age = 21, + Appearance = new( "Afro", Color.Aqua, "Shaved", Color.Aquamarine, Color.Azure, Color.Beige, + new List()), + }; new () ), ClothingPreference.Jumpskirt, diff --git a/Content.IntegrationTests/Tests/RoundEndTest.cs b/Content.IntegrationTests/Tests/RoundEndTest.cs index 1ddddf66bce..69780856406 100644 --- a/Content.IntegrationTests/Tests/RoundEndTest.cs +++ b/Content.IntegrationTests/Tests/RoundEndTest.cs @@ -12,7 +12,7 @@ public sealed class RoundEndTest { private sealed class RoundEndTestSystem : EntitySystem { - public int Count; + public int RoundCount; public override void Initialize() { @@ -22,7 +22,7 @@ public override void Initialize() private void OnRoundEnd(RoundEndSystemChangedEvent ev) { - Interlocked.Increment(ref Count); + Interlocked.Increment(ref RoundCount); } } @@ -43,7 +43,7 @@ public async Task Test() var ticker = sysManager.GetEntitySystem(); var roundEndSystem = sysManager.GetEntitySystem(); var sys = server.System(); - sys.Count = 0; + sys.RoundCount = 0; await server.WaitAssertion(() => { @@ -128,8 +128,8 @@ Task CheckRunLevel(GameRunLevel level) async Task WaitForEvent() { var timeout = Task.Delay(TimeSpan.FromSeconds(10)); - var currentCount = Thread.VolatileRead(ref sys.Count); - while (currentCount == Thread.VolatileRead(ref sys.Count) && !timeout.IsCompleted) + var currentCount = Thread.VolatileRead(ref sys.RoundCount); + while (currentCount == Thread.VolatileRead(ref sys.RoundCount) && !timeout.IsCompleted) { await pair.RunTicksSync(5); } diff --git a/Content.IntegrationTests/Tests/Station/EvacShuttleTest.cs b/Content.IntegrationTests/Tests/Station/EvacShuttleTest.cs new file mode 100644 index 00000000000..9e925a451a5 --- /dev/null +++ b/Content.IntegrationTests/Tests/Station/EvacShuttleTest.cs @@ -0,0 +1,127 @@ +using System.Linq; +using Content.Server.GameTicking; +using Content.Server.Shuttles.Components; +using Content.Server.Shuttles.Systems; +using Content.Server.Station.Components; +using Content.Shared.CCVar; +using Content.Shared.Shuttles.Components; +using Robust.Shared.GameObjects; +using Robust.Shared.Map.Components; + +namespace Content.IntegrationTests.Tests.Station; + +[TestFixture] +[TestOf(typeof(EmergencyShuttleSystem))] +public sealed class EvacShuttleTest +{ + /// + /// Ensure that the emergency shuttle can be called, and that it will travel to centcomm + /// + [Test] + public async Task EmergencyEvacTest() + { + await using var pair = await PoolManager.GetServerClient(new PoolSettings { DummyTicker = true, Dirty = true }); + var server = pair.Server; + var entMan = server.EntMan; + var ticker = server.System(); + + // Dummy ticker tests should not have centcomm + Assert.That(entMan.Count(), Is.Zero); + + Assert.That(pair.Server.CfgMan.GetCVar(CCVars.GridFill), Is.False); + pair.Server.CfgMan.SetCVar(CCVars.EmergencyShuttleEnabled, true); + pair.Server.CfgMan.SetCVar(CCVars.GameDummyTicker, false); + var gameMap = pair.Server.CfgMan.GetCVar(CCVars.GameMap); + pair.Server.CfgMan.SetCVar(CCVars.GameMap, "Saltern"); + + await server.WaitPost(() => ticker.RestartRound()); + await pair.RunTicksSync(25); + Assert.That(ticker.RunLevel, Is.EqualTo(GameRunLevel.InRound)); + + // Find the station, centcomm, and shuttle, and ftl map. + + Assert.That(entMan.Count(), Is.EqualTo(1)); + Assert.That(entMan.Count(), Is.EqualTo(1)); + Assert.That(entMan.Count(), Is.EqualTo(1)); + Assert.That(entMan.Count(), Is.EqualTo(1)); + Assert.That(entMan.Count(), Is.EqualTo(0)); + + var station = (Entity) entMan.AllComponentsList().Single(); + var data = entMan.GetComponent(station); + var shuttleData = entMan.GetComponent(station); + + var saltern = data.Grids.Single(); + Assert.That(entMan.HasComponent(saltern)); + + var shuttle = shuttleData.EmergencyShuttle!.Value; + Assert.That(entMan.HasComponent(shuttle)); + Assert.That(entMan.HasComponent(shuttle)); + + var centcomm = station.Comp.Entity!.Value; + Assert.That(entMan.HasComponent(centcomm)); + + var centcommMap = station.Comp.MapEntity!.Value; + Assert.That(entMan.HasComponent(centcommMap)); + Assert.That(server.Transform(centcomm).MapUid, Is.EqualTo(centcommMap)); + + var salternXform = server.Transform(saltern); + Assert.That(salternXform.MapUid, Is.Not.Null); + Assert.That(salternXform.MapUid, Is.Not.EqualTo(centcommMap)); + + var shuttleXform = server.Transform(shuttle); + Assert.That(shuttleXform.MapUid, Is.Not.Null); + Assert.That(shuttleXform.MapUid, Is.EqualTo(centcommMap)); + + // All of these should have been map-initialized. + var mapSys = entMan.System(); + Assert.That(mapSys.IsInitialized(centcommMap), Is.True); + Assert.That(mapSys.IsInitialized(salternXform.MapUid), Is.True); + Assert.That(mapSys.IsPaused(centcommMap), Is.False); + Assert.That(mapSys.IsPaused(salternXform.MapUid!.Value), Is.False); + + EntityLifeStage LifeStage(EntityUid uid) => entMan.GetComponent(uid).EntityLifeStage; + Assert.That(LifeStage(saltern), Is.EqualTo(EntityLifeStage.MapInitialized)); + Assert.That(LifeStage(shuttle), Is.EqualTo(EntityLifeStage.MapInitialized)); + Assert.That(LifeStage(centcomm), Is.EqualTo(EntityLifeStage.MapInitialized)); + Assert.That(LifeStage(centcommMap), Is.EqualTo(EntityLifeStage.MapInitialized)); + Assert.That(LifeStage(salternXform.MapUid.Value), Is.EqualTo(EntityLifeStage.MapInitialized)); + + // Set up shuttle timing + var shuttleSys = server.System(); + var evacSys = server.System(); + evacSys.TransitTime = shuttleSys.DefaultTravelTime; // Absolute minimum transit time, so the test has to run for at least this long + // TODO SHUTTLE fix spaghetti + + var dockTime = server.CfgMan.GetCVar(CCVars.EmergencyShuttleDockTime); + server.CfgMan.SetCVar(CCVars.EmergencyShuttleDockTime, 2); + + // Call evac shuttle. + await pair.WaitCommand("callshuttle 0:02"); + await pair.RunSeconds(3); + + // Shuttle should have arrived on the station + Assert.That(shuttleXform.MapUid, Is.EqualTo(salternXform.MapUid)); + + await pair.RunSeconds(2); + + // Shuttle should be FTLing back to centcomm + Assert.That(entMan.Count(), Is.EqualTo(1)); + var ftl = (Entity) entMan.AllComponentsList().Single(); + Assert.That(entMan.HasComponent(ftl)); + Assert.That(ftl.Owner, Is.Not.EqualTo(centcommMap)); + Assert.That(ftl.Owner, Is.Not.EqualTo(salternXform.MapUid)); + Assert.That(shuttleXform.MapUid, Is.EqualTo(ftl.Owner)); + + // Shuttle should have arrived at centcomm + await pair.RunSeconds(shuttleSys.DefaultTravelTime); + Assert.That(shuttleXform.MapUid, Is.EqualTo(centcommMap)); + + // Round should be ending now + Assert.That(ticker.RunLevel, Is.EqualTo(GameRunLevel.PostRound)); + + server.CfgMan.SetCVar(CCVars.EmergencyShuttleDockTime, dockTime); + pair.Server.CfgMan.SetCVar(CCVars.EmergencyShuttleEnabled, false); + pair.Server.CfgMan.SetCVar(CCVars.GameMap, gameMap); + await pair.CleanReturnAsync(); + } +} diff --git a/Content.IntegrationTests/Tests/StorageTest.cs b/Content.IntegrationTests/Tests/StorageTest.cs index 659b310661b..2d28534347d 100644 --- a/Content.IntegrationTests/Tests/StorageTest.cs +++ b/Content.IntegrationTests/Tests/StorageTest.cs @@ -92,23 +92,32 @@ public async Task TestSufficientSpaceForFill() var allSizes = protoMan.EnumeratePrototypes().ToList(); allSizes.Sort(); - Assert.Multiple(() => + await Assert.MultipleAsync(async () => { foreach (var proto in pair.GetPrototypesWithComponent()) { if (proto.HasComponent(compFact)) continue; - if (!proto.TryGetComponent("Storage", out var storage)) + StorageComponent? storage = null; + ItemComponent? item = null; + StorageFillComponent fill = default!; + var size = 0; + await server.WaitAssertion(() => { - Assert.Fail($"Entity {proto.ID} has storage-fill without a storage component!"); - continue; - } + if (!proto.TryGetComponent("Storage", out storage)) + { + Assert.Fail($"Entity {proto.ID} has storage-fill without a storage component!"); + return; + } - proto.TryGetComponent("Item", out var item); + proto.TryGetComponent("Item", out item); + fill = (StorageFillComponent) proto.Components[id].Component; + size = GetFillSize(fill, false, protoMan, itemSys); + }); - var fill = (StorageFillComponent) proto.Components[id].Component; - var size = GetFillSize(fill, false, protoMan, itemSys); + if (storage == null) + continue; var maxSize = storage.MaxItemSize; if (storage.MaxItemSize == null) @@ -138,7 +147,13 @@ public async Task TestSufficientSpaceForFill() if (!protoMan.TryIndex(entry.PrototypeId, out var fillItem)) continue; - if (!fillItem.TryGetComponent("Item", out var entryItem)) + ItemComponent? entryItem = null; + await server.WaitPost(() => + { + fillItem.TryGetComponent("Item", out entryItem); + }); + + if (entryItem == null) continue; Assert.That(protoMan.Index(entryItem.Size).Weight, @@ -164,25 +179,25 @@ public async Task TestSufficientSpaceForEntityStorageFill() var itemSys = entMan.System(); - Assert.Multiple(() => + foreach (var proto in pair.GetPrototypesWithComponent()) { - foreach (var proto in pair.GetPrototypesWithComponent()) - { - if (proto.HasComponent(compFact)) - continue; + if (proto.HasComponent(compFact)) + continue; - if (!proto.TryGetComponent("EntityStorage", out var entStorage)) - { + await server.WaitAssertion(() => + { + if (!proto.TryGetComponent("EntityStorage", out EntityStorageComponent? entStorage)) Assert.Fail($"Entity {proto.ID} has storage-fill without a storage component!"); - continue; - } + + if (entStorage == null) + return; var fill = (StorageFillComponent) proto.Components[id].Component; var size = GetFillSize(fill, true, protoMan, itemSys); Assert.That(size, Is.LessThanOrEqualTo(entStorage.Capacity), $"{proto.ID} storage fill is too large."); - } - }); + }); + } await pair.CleanReturnAsync(); } diff --git a/Content.IntegrationTests/Tests/Utility/EntityWhitelistTest.cs b/Content.IntegrationTests/Tests/Utility/EntityWhitelistTest.cs index 6b47ec4d8eb..19b25816fa3 100644 --- a/Content.IntegrationTests/Tests/Utility/EntityWhitelistTest.cs +++ b/Content.IntegrationTests/Tests/Utility/EntityWhitelistTest.cs @@ -64,7 +64,8 @@ public async Task Test() var testMap = await pair.CreateTestMap(); var mapCoordinates = testMap.MapCoords; - var sEntities = server.ResolveDependency(); + var sEntities = server.EntMan; + var sys = server.System(); await server.WaitAssertion(() => { @@ -80,22 +81,14 @@ await server.WaitAssertion(() => Components = new[] { $"{ValidComponent}" }, Tags = new() { "WhitelistTestValidTag" } }; - whitelistInst.UpdateRegistrations(); - Assert.That(whitelistInst, Is.Not.Null); Assert.Multiple(() => { - Assert.That(whitelistInst.Components, Is.Not.Null); - Assert.That(whitelistInst.Tags, Is.Not.Null); - }); - - Assert.Multiple(() => - { - Assert.That(whitelistInst.IsValid(validComponent), Is.True); - Assert.That(whitelistInst.IsValid(WhitelistTestValidTag), Is.True); + Assert.That(sys.IsValid(whitelistInst, validComponent), Is.True); + Assert.That(sys.IsValid(whitelistInst, WhitelistTestValidTag), Is.True); - Assert.That(whitelistInst.IsValid(invalidComponent), Is.False); - Assert.That(whitelistInst.IsValid(WhitelistTestInvalidTag), Is.False); + Assert.That(sys.IsValid(whitelistInst, invalidComponent), Is.False); + Assert.That(sys.IsValid(whitelistInst, WhitelistTestInvalidTag), Is.False); }); // Test from serialized @@ -111,11 +104,11 @@ await server.WaitAssertion(() => Assert.Multiple(() => { - Assert.That(whitelistSer.IsValid(validComponent), Is.True); - Assert.That(whitelistSer.IsValid(WhitelistTestValidTag), Is.True); + Assert.That(sys.IsValid(whitelistSer, validComponent), Is.True); + Assert.That(sys.IsValid(whitelistSer, WhitelistTestValidTag), Is.True); - Assert.That(whitelistSer.IsValid(invalidComponent), Is.False); - Assert.That(whitelistSer.IsValid(WhitelistTestInvalidTag), Is.False); + Assert.That(sys.IsValid(whitelistSer, invalidComponent), Is.False); + Assert.That(sys.IsValid(whitelistSer, WhitelistTestInvalidTag), Is.False); }); }); await pair.CleanReturnAsync(); diff --git a/Content.Server.Database/Migrations/Postgres/20240623005121_BanTemplate.Designer.cs b/Content.Server.Database/Migrations/Postgres/20240623005121_BanTemplate.Designer.cs new file mode 100644 index 00000000000..2fb55ddfec8 --- /dev/null +++ b/Content.Server.Database/Migrations/Postgres/20240623005121_BanTemplate.Designer.cs @@ -0,0 +1,1847 @@ +// +using System; +using System.Net; +using System.Text.Json; +using Content.Server.Database; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; +using NpgsqlTypes; + +#nullable disable + +namespace Content.Server.Database.Migrations.Postgres +{ + [DbContext(typeof(PostgresServerDbContext))] + [Migration("20240623005113_BanTemplate")] + partial class BanTemplate + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.0") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Content.Server.Database.Admin", b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.Property("AdminRankId") + .HasColumnType("integer") + .HasColumnName("admin_rank_id"); + + b.Property("Title") + .HasColumnType("text") + .HasColumnName("title"); + + b.HasKey("UserId") + .HasName("PK_admin"); + + b.HasIndex("AdminRankId") + .HasDatabaseName("IX_admin_admin_rank_id"); + + b.ToTable("admin", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminFlag", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("admin_flag_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AdminId") + .HasColumnType("uuid") + .HasColumnName("admin_id"); + + b.Property("Flag") + .IsRequired() + .HasColumnType("text") + .HasColumnName("flag"); + + b.Property("Negative") + .HasColumnType("boolean") + .HasColumnName("negative"); + + b.HasKey("Id") + .HasName("PK_admin_flag"); + + b.HasIndex("AdminId") + .HasDatabaseName("IX_admin_flag_admin_id"); + + b.HasIndex("Flag", "AdminId") + .IsUnique(); + + b.ToTable("admin_flag", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLog", b => + { + b.Property("RoundId") + .HasColumnType("integer") + .HasColumnName("round_id"); + + b.Property("Id") + .HasColumnType("integer") + .HasColumnName("admin_log_id"); + + b.Property("Date") + .HasColumnType("timestamp with time zone") + .HasColumnName("date"); + + b.Property("Impact") + .HasColumnType("smallint") + .HasColumnName("impact"); + + b.Property("Json") + .IsRequired() + .HasColumnType("jsonb") + .HasColumnName("json"); + + b.Property("Message") + .IsRequired() + .HasColumnType("text") + .HasColumnName("message"); + + b.Property("Type") + .HasColumnType("integer") + .HasColumnName("type"); + + b.HasKey("RoundId", "Id") + .HasName("PK_admin_log"); + + b.HasIndex("Date"); + + b.HasIndex("Message") + .HasAnnotation("Npgsql:TsVectorConfig", "english"); + + NpgsqlIndexBuilderExtensions.HasMethod(b.HasIndex("Message"), "GIN"); + + b.HasIndex("Type") + .HasDatabaseName("IX_admin_log_type"); + + b.ToTable("admin_log", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLogPlayer", b => + { + b.Property("RoundId") + .HasColumnType("integer") + .HasColumnName("round_id"); + + b.Property("LogId") + .HasColumnType("integer") + .HasColumnName("log_id"); + + b.Property("PlayerUserId") + .HasColumnType("uuid") + .HasColumnName("player_user_id"); + + b.HasKey("RoundId", "LogId", "PlayerUserId") + .HasName("PK_admin_log_player"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_log_player_player_user_id"); + + b.ToTable("admin_log_player", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminMessage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("admin_messages_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("created_at"); + + b.Property("CreatedById") + .HasColumnType("uuid") + .HasColumnName("created_by_id"); + + b.Property("Deleted") + .HasColumnType("boolean") + .HasColumnName("deleted"); + + b.Property("DeletedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("deleted_at"); + + b.Property("DeletedById") + .HasColumnType("uuid") + .HasColumnName("deleted_by_id"); + + b.Property("ExpirationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("expiration_time"); + + b.Property("LastEditedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("uuid") + .HasColumnName("last_edited_by_id"); + + b.Property("Message") + .IsRequired() + .HasMaxLength(4096) + .HasColumnType("character varying(4096)") + .HasColumnName("message"); + + b.Property("PlayerUserId") + .HasColumnType("uuid") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("interval") + .HasColumnName("playtime_at_note"); + + b.Property("RoundId") + .HasColumnType("integer") + .HasColumnName("round_id"); + + b.Property("Seen") + .HasColumnType("boolean") + .HasColumnName("seen"); + + b.HasKey("Id") + .HasName("PK_admin_messages"); + + b.HasIndex("CreatedById"); + + b.HasIndex("DeletedById"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_messages_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_admin_messages_round_id"); + + b.ToTable("admin_messages", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminNote", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("admin_notes_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("created_at"); + + b.Property("CreatedById") + .HasColumnType("uuid") + .HasColumnName("created_by_id"); + + b.Property("Deleted") + .HasColumnType("boolean") + .HasColumnName("deleted"); + + b.Property("DeletedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("deleted_at"); + + b.Property("DeletedById") + .HasColumnType("uuid") + .HasColumnName("deleted_by_id"); + + b.Property("ExpirationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("expiration_time"); + + b.Property("LastEditedAt") + .IsRequired() + .HasColumnType("timestamp with time zone") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("uuid") + .HasColumnName("last_edited_by_id"); + + b.Property("Message") + .IsRequired() + .HasMaxLength(4096) + .HasColumnType("character varying(4096)") + .HasColumnName("message"); + + b.Property("PlayerUserId") + .HasColumnType("uuid") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("interval") + .HasColumnName("playtime_at_note"); + + b.Property("RoundId") + .HasColumnType("integer") + .HasColumnName("round_id"); + + b.Property("Secret") + .HasColumnType("boolean") + .HasColumnName("secret"); + + b.Property("Severity") + .HasColumnType("integer") + .HasColumnName("severity"); + + b.HasKey("Id") + .HasName("PK_admin_notes"); + + b.HasIndex("CreatedById"); + + b.HasIndex("DeletedById"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_notes_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_admin_notes_round_id"); + + b.ToTable("admin_notes", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRank", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("admin_rank_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name"); + + b.HasKey("Id") + .HasName("PK_admin_rank"); + + b.ToTable("admin_rank", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRankFlag", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("admin_rank_flag_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AdminRankId") + .HasColumnType("integer") + .HasColumnName("admin_rank_id"); + + b.Property("Flag") + .IsRequired() + .HasColumnType("text") + .HasColumnName("flag"); + + b.HasKey("Id") + .HasName("PK_admin_rank_flag"); + + b.HasIndex("AdminRankId"); + + b.HasIndex("Flag", "AdminRankId") + .IsUnique(); + + b.ToTable("admin_rank_flag", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminWatchlist", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("admin_watchlists_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("created_at"); + + b.Property("CreatedById") + .HasColumnType("uuid") + .HasColumnName("created_by_id"); + + b.Property("Deleted") + .HasColumnType("boolean") + .HasColumnName("deleted"); + + b.Property("DeletedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("deleted_at"); + + b.Property("DeletedById") + .HasColumnType("uuid") + .HasColumnName("deleted_by_id"); + + b.Property("ExpirationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("expiration_time"); + + b.Property("LastEditedAt") + .IsRequired() + .HasColumnType("timestamp with time zone") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("uuid") + .HasColumnName("last_edited_by_id"); + + b.Property("Message") + .IsRequired() + .HasMaxLength(4096) + .HasColumnType("character varying(4096)") + .HasColumnName("message"); + + b.Property("PlayerUserId") + .HasColumnType("uuid") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("interval") + .HasColumnName("playtime_at_note"); + + b.Property("RoundId") + .HasColumnType("integer") + .HasColumnName("round_id"); + + b.HasKey("Id") + .HasName("PK_admin_watchlists"); + + b.HasIndex("CreatedById"); + + b.HasIndex("DeletedById"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_watchlists_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_admin_watchlists_round_id"); + + b.ToTable("admin_watchlists", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Antag", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("antag_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AntagName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("antag_name"); + + b.Property("ProfileId") + .HasColumnType("integer") + .HasColumnName("profile_id"); + + b.HasKey("Id") + .HasName("PK_antag"); + + b.HasIndex("ProfileId", "AntagName") + .IsUnique(); + + b.ToTable("antag", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AssignedUserId", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("assigned_user_id_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.Property("UserName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("user_name"); + + b.HasKey("Id") + .HasName("PK_assigned_user_id"); + + b.HasIndex("UserId") + .IsUnique(); + + b.HasIndex("UserName") + .IsUnique(); + + b.ToTable("assigned_user_id", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.BanTemplate", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("ban_template_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AutoDelete") + .HasColumnType("boolean") + .HasColumnName("auto_delete"); + + b.Property("ExemptFlags") + .HasColumnType("integer") + .HasColumnName("exempt_flags"); + + b.Property("Hidden") + .HasColumnType("boolean") + .HasColumnName("hidden"); + + b.Property("Length") + .HasColumnType("interval") + .HasColumnName("length"); + + b.Property("Reason") + .IsRequired() + .HasColumnType("text") + .HasColumnName("reason"); + + b.Property("Severity") + .HasColumnType("integer") + .HasColumnName("severity"); + + b.Property("Title") + .IsRequired() + .HasColumnType("text") + .HasColumnName("title"); + + b.HasKey("Id") + .HasName("PK_ban_template"); + + b.ToTable("ban_template", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ConnectionLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("connection_log_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Address") + .IsRequired() + .HasColumnType("inet") + .HasColumnName("address"); + + b.Property("Denied") + .HasColumnType("smallint") + .HasColumnName("denied"); + + b.Property("HWId") + .HasColumnType("bytea") + .HasColumnName("hwid"); + + b.Property("ServerId") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("server_id"); + + b.Property("Time") + .HasColumnType("timestamp with time zone") + .HasColumnName("time"); + + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.Property("UserName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("user_name"); + + b.HasKey("Id") + .HasName("PK_connection_log"); + + b.HasIndex("ServerId") + .HasDatabaseName("IX_connection_log_server_id"); + + b.HasIndex("UserId"); + + b.ToTable("connection_log", null, t => + { + t.HasCheckConstraint("AddressNotIPv6MappedIPv4", "NOT inet '::ffff:0.0.0.0/96' >>= address"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.Job", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("job_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("JobName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("job_name"); + + b.Property("Priority") + .HasColumnType("integer") + .HasColumnName("priority"); + + b.Property("ProfileId") + .HasColumnType("integer") + .HasColumnName("profile_id"); + + b.HasKey("Id") + .HasName("PK_job"); + + b.HasIndex("ProfileId"); + + b.HasIndex("ProfileId", "JobName") + .IsUnique(); + + b.HasIndex(new[] { "ProfileId" }, "IX_job_one_high_priority") + .IsUnique() + .HasFilter("priority = 3"); + + b.ToTable("job", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Loadout", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("loadout_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("LoadoutName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("loadout_name"); + + b.Property("ProfileId") + .HasColumnType("integer") + .HasColumnName("profile_id"); + + b.HasKey("Id") + .HasName("PK_loadout"); + + b.HasIndex("ProfileId", "LoadoutName") + .IsUnique(); + + b.ToTable("loadout", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.PlayTime", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("play_time_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("PlayerId") + .HasColumnType("uuid") + .HasColumnName("player_id"); + + b.Property("TimeSpent") + .HasColumnType("interval") + .HasColumnName("time_spent"); + + b.Property("Tracker") + .IsRequired() + .HasColumnType("text") + .HasColumnName("tracker"); + + b.HasKey("Id") + .HasName("PK_play_time"); + + b.HasIndex("PlayerId", "Tracker") + .IsUnique(); + + b.ToTable("play_time", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Player", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("player_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("FirstSeenTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("first_seen_time"); + + b.Property("LastReadRules") + .HasColumnType("timestamp with time zone") + .HasColumnName("last_read_rules"); + + b.Property("LastSeenAddress") + .IsRequired() + .HasColumnType("inet") + .HasColumnName("last_seen_address"); + + b.Property("LastSeenHWId") + .HasColumnType("bytea") + .HasColumnName("last_seen_hwid"); + + b.Property("LastSeenTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("last_seen_time"); + + b.Property("LastSeenUserName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("last_seen_user_name"); + + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("PK_player"); + + b.HasAlternateKey("UserId") + .HasName("ak_player_user_id"); + + b.HasIndex("LastSeenUserName"); + + b.HasIndex("UserId") + .IsUnique(); + + b.ToTable("player", null, t => + { + t.HasCheckConstraint("LastSeenAddressNotIPv6MappedIPv4", "NOT inet '::ffff:0.0.0.0/96' >>= last_seen_address"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.Preference", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("preference_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AdminOOCColor") + .IsRequired() + .HasColumnType("text") + .HasColumnName("admin_ooc_color"); + + b.Property("SelectedCharacterSlot") + .HasColumnType("integer") + .HasColumnName("selected_character_slot"); + + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("PK_preference"); + + b.HasIndex("UserId") + .IsUnique(); + + b.ToTable("preference", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Profile", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("profile_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Age") + .HasColumnType("integer") + .HasColumnName("age"); + + b.Property("Backpack") + .IsRequired() + .HasColumnType("text") + .HasColumnName("backpack"); + + b.Property("CharacterName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("char_name"); + + b.Property("Clothing") + .IsRequired() + .HasColumnType("text") + .HasColumnName("clothing"); + + b.Property("EyeColor") + .IsRequired() + .HasColumnType("text") + .HasColumnName("eye_color"); + + b.Property("FacialHairColor") + .IsRequired() + .HasColumnType("text") + .HasColumnName("facial_hair_color"); + + b.Property("FacialHairName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("facial_hair_name"); + + b.Property("FlavorText") + .IsRequired() + .HasColumnType("text") + .HasColumnName("flavor_text"); + + b.Property("Gender") + .IsRequired() + .HasColumnType("text") + .HasColumnName("gender"); + + b.Property("HairColor") + .IsRequired() + .HasColumnType("text") + .HasColumnName("hair_color"); + + b.Property("HairName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("hair_name"); + + b.Property("Markings") + .HasColumnType("jsonb") + .HasColumnName("markings"); + + b.Property("PreferenceId") + .HasColumnType("integer") + .HasColumnName("preference_id"); + + b.Property("PreferenceUnavailable") + .HasColumnType("integer") + .HasColumnName("pref_unavailable"); + + b.Property("Sex") + .IsRequired() + .HasColumnType("text") + .HasColumnName("sex"); + + b.Property("SkinColor") + .IsRequired() + .HasColumnType("text") + .HasColumnName("skin_color"); + + b.Property("Slot") + .HasColumnType("integer") + .HasColumnName("slot"); + + b.Property("SpawnPriority") + .HasColumnType("integer") + .HasColumnName("spawn_priority"); + + b.Property("Species") + .IsRequired() + .HasColumnType("text") + .HasColumnName("species"); + + b.HasKey("Id") + .HasName("PK_profile"); + + b.HasIndex("PreferenceId") + .HasDatabaseName("IX_profile_preference_id"); + + b.HasIndex("Slot", "PreferenceId") + .IsUnique(); + + b.ToTable("profile", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Round", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("round_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ServerId") + .HasColumnType("integer") + .HasColumnName("server_id"); + + b.Property("StartDate") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValue(new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified)) + .HasColumnName("start_date"); + + b.HasKey("Id") + .HasName("PK_round"); + + b.HasIndex("ServerId") + .HasDatabaseName("IX_round_server_id"); + + b.HasIndex("StartDate"); + + b.ToTable("round", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Server", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("server_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name"); + + b.HasKey("Id") + .HasName("PK_server"); + + b.ToTable("server", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBan", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("server_ban_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Address") + .HasColumnType("inet") + .HasColumnName("address"); + + b.Property("AutoDelete") + .HasColumnType("boolean") + .HasColumnName("auto_delete"); + + b.Property("BanTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("ban_time"); + + b.Property("BanningAdmin") + .HasColumnType("uuid") + .HasColumnName("banning_admin"); + + b.Property("ExemptFlags") + .HasColumnType("integer") + .HasColumnName("exempt_flags"); + + b.Property("ExpirationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("expiration_time"); + + b.Property("HWId") + .HasColumnType("bytea") + .HasColumnName("hwid"); + + b.Property("Hidden") + .HasColumnType("boolean") + .HasColumnName("hidden"); + + b.Property("LastEditedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("uuid") + .HasColumnName("last_edited_by_id"); + + b.Property("PlayerUserId") + .HasColumnType("uuid") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("interval") + .HasColumnName("playtime_at_note"); + + b.Property("Reason") + .IsRequired() + .HasColumnType("text") + .HasColumnName("reason"); + + b.Property("RoundId") + .HasColumnType("integer") + .HasColumnName("round_id"); + + b.Property("Severity") + .HasColumnType("integer") + .HasColumnName("severity"); + + b.HasKey("Id") + .HasName("PK_server_ban"); + + b.HasIndex("Address"); + + b.HasIndex("BanningAdmin"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_server_ban_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_server_ban_round_id"); + + b.ToTable("server_ban", null, t => + { + t.HasCheckConstraint("AddressNotIPv6MappedIPv4", "NOT inet '::ffff:0.0.0.0/96' >>= address"); + + t.HasCheckConstraint("HaveEitherAddressOrUserIdOrHWId", "address IS NOT NULL OR player_user_id IS NOT NULL OR hwid IS NOT NULL"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBanExemption", b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.Property("Flags") + .HasColumnType("integer") + .HasColumnName("flags"); + + b.HasKey("UserId") + .HasName("PK_server_ban_exemption"); + + b.ToTable("server_ban_exemption", null, t => + { + t.HasCheckConstraint("FlagsNotZero", "flags != 0"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBanHit", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("server_ban_hit_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("BanId") + .HasColumnType("integer") + .HasColumnName("ban_id"); + + b.Property("ConnectionId") + .HasColumnType("integer") + .HasColumnName("connection_id"); + + b.HasKey("Id") + .HasName("PK_server_ban_hit"); + + b.HasIndex("BanId") + .HasDatabaseName("IX_server_ban_hit_ban_id"); + + b.HasIndex("ConnectionId") + .HasDatabaseName("IX_server_ban_hit_connection_id"); + + b.ToTable("server_ban_hit", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleBan", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("server_role_ban_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Address") + .HasColumnType("inet") + .HasColumnName("address"); + + b.Property("BanTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("ban_time"); + + b.Property("BanningAdmin") + .HasColumnType("uuid") + .HasColumnName("banning_admin"); + + b.Property("ExpirationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("expiration_time"); + + b.Property("HWId") + .HasColumnType("bytea") + .HasColumnName("hwid"); + + b.Property("Hidden") + .HasColumnType("boolean") + .HasColumnName("hidden"); + + b.Property("LastEditedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("uuid") + .HasColumnName("last_edited_by_id"); + + b.Property("PlayerUserId") + .HasColumnType("uuid") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("interval") + .HasColumnName("playtime_at_note"); + + b.Property("Reason") + .IsRequired() + .HasColumnType("text") + .HasColumnName("reason"); + + b.Property("RoleId") + .IsRequired() + .HasColumnType("text") + .HasColumnName("role_id"); + + b.Property("RoundId") + .HasColumnType("integer") + .HasColumnName("round_id"); + + b.Property("Severity") + .HasColumnType("integer") + .HasColumnName("severity"); + + b.HasKey("Id") + .HasName("PK_server_role_ban"); + + b.HasIndex("Address"); + + b.HasIndex("BanningAdmin"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_server_role_ban_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_server_role_ban_round_id"); + + b.ToTable("server_role_ban", null, t => + { + t.HasCheckConstraint("AddressNotIPv6MappedIPv4", "NOT inet '::ffff:0.0.0.0/96' >>= address"); + + t.HasCheckConstraint("HaveEitherAddressOrUserIdOrHWId", "address IS NOT NULL OR player_user_id IS NOT NULL OR hwid IS NOT NULL"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleUnban", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("role_unban_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("BanId") + .HasColumnType("integer") + .HasColumnName("ban_id"); + + b.Property("UnbanTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("unban_time"); + + b.Property("UnbanningAdmin") + .HasColumnType("uuid") + .HasColumnName("unbanning_admin"); + + b.HasKey("Id") + .HasName("PK_server_role_unban"); + + b.HasIndex("BanId") + .IsUnique(); + + b.ToTable("server_role_unban", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ServerUnban", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("unban_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("BanId") + .HasColumnType("integer") + .HasColumnName("ban_id"); + + b.Property("UnbanTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("unban_time"); + + b.Property("UnbanningAdmin") + .HasColumnType("uuid") + .HasColumnName("unbanning_admin"); + + b.HasKey("Id") + .HasName("PK_server_unban"); + + b.HasIndex("BanId") + .IsUnique(); + + b.ToTable("server_unban", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Trait", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("trait_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ProfileId") + .HasColumnType("integer") + .HasColumnName("profile_id"); + + b.Property("TraitName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("trait_name"); + + b.HasKey("Id") + .HasName("PK_trait"); + + b.HasIndex("ProfileId", "TraitName") + .IsUnique(); + + b.ToTable("trait", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.UploadedResourceLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("uploaded_resource_log_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Data") + .IsRequired() + .HasColumnType("bytea") + .HasColumnName("data"); + + b.Property("Date") + .HasColumnType("timestamp with time zone") + .HasColumnName("date"); + + b.Property("Path") + .IsRequired() + .HasColumnType("text") + .HasColumnName("path"); + + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("PK_uploaded_resource_log"); + + b.ToTable("uploaded_resource_log", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Whitelist", b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.HasKey("UserId") + .HasName("PK_whitelist"); + + b.ToTable("whitelist", (string)null); + }); + + modelBuilder.Entity("PlayerRound", b => + { + b.Property("PlayersId") + .HasColumnType("integer") + .HasColumnName("players_id"); + + b.Property("RoundsId") + .HasColumnType("integer") + .HasColumnName("rounds_id"); + + b.HasKey("PlayersId", "RoundsId") + .HasName("PK_player_round"); + + b.HasIndex("RoundsId") + .HasDatabaseName("IX_player_round_rounds_id"); + + b.ToTable("player_round", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Admin", b => + { + b.HasOne("Content.Server.Database.AdminRank", "AdminRank") + .WithMany("Admins") + .HasForeignKey("AdminRankId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_admin_rank_admin_rank_id"); + + b.Navigation("AdminRank"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminFlag", b => + { + b.HasOne("Content.Server.Database.Admin", "Admin") + .WithMany("Flags") + .HasForeignKey("AdminId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_flag_admin_admin_id"); + + b.Navigation("Admin"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLog", b => + { + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany("AdminLogs") + .HasForeignKey("RoundId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_log_round_round_id"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLogPlayer", b => + { + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminLogs") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_log_player_player_player_user_id"); + + b.HasOne("Content.Server.Database.AdminLog", "Log") + .WithMany("Players") + .HasForeignKey("RoundId", "LogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_log_player_admin_log_round_id_log_id"); + + b.Navigation("Log"); + + b.Navigation("Player"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminMessage", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminMessagesCreated") + .HasForeignKey("CreatedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_messages_player_created_by_id"); + + b.HasOne("Content.Server.Database.Player", "DeletedBy") + .WithMany("AdminMessagesDeleted") + .HasForeignKey("DeletedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_messages_player_deleted_by_id"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminMessagesLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_messages_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminMessagesReceived") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_admin_messages_player_player_user_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_admin_messages_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("DeletedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Player"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminNote", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminNotesCreated") + .HasForeignKey("CreatedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_notes_player_created_by_id"); + + b.HasOne("Content.Server.Database.Player", "DeletedBy") + .WithMany("AdminNotesDeleted") + .HasForeignKey("DeletedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_notes_player_deleted_by_id"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminNotesLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_notes_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminNotesReceived") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_admin_notes_player_player_user_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_admin_notes_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("DeletedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Player"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRankFlag", b => + { + b.HasOne("Content.Server.Database.AdminRank", "Rank") + .WithMany("Flags") + .HasForeignKey("AdminRankId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_rank_flag_admin_rank_admin_rank_id"); + + b.Navigation("Rank"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminWatchlist", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminWatchlistsCreated") + .HasForeignKey("CreatedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_watchlists_player_created_by_id"); + + b.HasOne("Content.Server.Database.Player", "DeletedBy") + .WithMany("AdminWatchlistsDeleted") + .HasForeignKey("DeletedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_watchlists_player_deleted_by_id"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminWatchlistsLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_watchlists_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminWatchlistsReceived") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_admin_watchlists_player_player_user_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_admin_watchlists_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("DeletedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Player"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.Antag", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Antags") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_antag_profile_profile_id"); + + b.Navigation("Profile"); + }); + + modelBuilder.Entity("Content.Server.Database.ConnectionLog", b => + { + b.HasOne("Content.Server.Database.Server", "Server") + .WithMany("ConnectionLogs") + .HasForeignKey("ServerId") + .OnDelete(DeleteBehavior.SetNull) + .IsRequired() + .HasConstraintName("FK_connection_log_server_server_id"); + + b.Navigation("Server"); + }); + + modelBuilder.Entity("Content.Server.Database.Job", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Jobs") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_job_profile_profile_id"); + + b.Navigation("Profile"); + }); + + modelBuilder.Entity("Content.Server.Database.Loadout", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Loadouts") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_loadout_profile_profile_id"); + + b.Navigation("Profile"); + }); + + modelBuilder.Entity("Content.Server.Database.Profile", b => + { + b.HasOne("Content.Server.Database.Preference", "Preference") + .WithMany("Profiles") + .HasForeignKey("PreferenceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_profile_preference_preference_id"); + + b.Navigation("Preference"); + }); + + modelBuilder.Entity("Content.Server.Database.Round", b => + { + b.HasOne("Content.Server.Database.Server", "Server") + .WithMany("Rounds") + .HasForeignKey("ServerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_round_server_server_id"); + + b.Navigation("Server"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBan", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminServerBansCreated") + .HasForeignKey("BanningAdmin") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_ban_player_banning_admin"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminServerBansLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_ban_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_server_ban_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBanHit", b => + { + b.HasOne("Content.Server.Database.ServerBan", "Ban") + .WithMany("BanHits") + .HasForeignKey("BanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_ban_hit_server_ban_ban_id"); + + b.HasOne("Content.Server.Database.ConnectionLog", "Connection") + .WithMany("BanHits") + .HasForeignKey("ConnectionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_ban_hit_connection_log_connection_id"); + + b.Navigation("Ban"); + + b.Navigation("Connection"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleBan", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminServerRoleBansCreated") + .HasForeignKey("BanningAdmin") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_role_ban_player_banning_admin"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminServerRoleBansLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_role_ban_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_server_role_ban_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleUnban", b => + { + b.HasOne("Content.Server.Database.ServerRoleBan", "Ban") + .WithOne("Unban") + .HasForeignKey("Content.Server.Database.ServerRoleUnban", "BanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_role_unban_server_role_ban_ban_id"); + + b.Navigation("Ban"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerUnban", b => + { + b.HasOne("Content.Server.Database.ServerBan", "Ban") + .WithOne("Unban") + .HasForeignKey("Content.Server.Database.ServerUnban", "BanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_unban_server_ban_ban_id"); + + b.Navigation("Ban"); + }); + + modelBuilder.Entity("Content.Server.Database.Trait", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Traits") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_trait_profile_profile_id"); + + b.Navigation("Profile"); + }); + + modelBuilder.Entity("PlayerRound", b => + { + b.HasOne("Content.Server.Database.Player", null) + .WithMany() + .HasForeignKey("PlayersId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_player_round_player_players_id"); + + b.HasOne("Content.Server.Database.Round", null) + .WithMany() + .HasForeignKey("RoundsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_player_round_round_rounds_id"); + }); + + modelBuilder.Entity("Content.Server.Database.Admin", b => + { + b.Navigation("Flags"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLog", b => + { + b.Navigation("Players"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRank", b => + { + b.Navigation("Admins"); + + b.Navigation("Flags"); + }); + + modelBuilder.Entity("Content.Server.Database.ConnectionLog", b => + { + b.Navigation("BanHits"); + }); + + modelBuilder.Entity("Content.Server.Database.Player", b => + { + b.Navigation("AdminLogs"); + + b.Navigation("AdminMessagesCreated"); + + b.Navigation("AdminMessagesDeleted"); + + b.Navigation("AdminMessagesLastEdited"); + + b.Navigation("AdminMessagesReceived"); + + b.Navigation("AdminNotesCreated"); + + b.Navigation("AdminNotesDeleted"); + + b.Navigation("AdminNotesLastEdited"); + + b.Navigation("AdminNotesReceived"); + + b.Navigation("AdminServerBansCreated"); + + b.Navigation("AdminServerBansLastEdited"); + + b.Navigation("AdminServerRoleBansCreated"); + + b.Navigation("AdminServerRoleBansLastEdited"); + + b.Navigation("AdminWatchlistsCreated"); + + b.Navigation("AdminWatchlistsDeleted"); + + b.Navigation("AdminWatchlistsLastEdited"); + + b.Navigation("AdminWatchlistsReceived"); + }); + + modelBuilder.Entity("Content.Server.Database.Preference", b => + { + b.Navigation("Profiles"); + }); + + modelBuilder.Entity("Content.Server.Database.Profile", b => + { + b.Navigation("Antags"); + + b.Navigation("Jobs"); + + b.Navigation("Loadouts"); + + b.Navigation("Traits"); + }); + + modelBuilder.Entity("Content.Server.Database.Round", b => + { + b.Navigation("AdminLogs"); + }); + + modelBuilder.Entity("Content.Server.Database.Server", b => + { + b.Navigation("ConnectionLogs"); + + b.Navigation("Rounds"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBan", b => + { + b.Navigation("BanHits"); + + b.Navigation("Unban"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleBan", b => + { + b.Navigation("Unban"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Content.Server.Database/Migrations/Postgres/20240623005121_BanTemplate.cs b/Content.Server.Database/Migrations/Postgres/20240623005121_BanTemplate.cs new file mode 100644 index 00000000000..192e87ac96b --- /dev/null +++ b/Content.Server.Database/Migrations/Postgres/20240623005121_BanTemplate.cs @@ -0,0 +1,42 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace Content.Server.Database.Migrations.Postgres +{ + /// + public partial class BanTemplate : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "ban_template", + columns: table => new + { + ban_template_id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + title = table.Column(type: "text", nullable: false), + length = table.Column(type: "interval", nullable: false), + reason = table.Column(type: "text", nullable: false), + exempt_flags = table.Column(type: "integer", nullable: false), + severity = table.Column(type: "integer", nullable: false), + auto_delete = table.Column(type: "boolean", nullable: false), + hidden = table.Column(type: "boolean", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_ban_template", x => x.ban_template_id); + }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "ban_template"); + } + } +} diff --git a/Content.Server.Database/Migrations/Postgres/20240926173711_1984 Backpack Prefs.Designer.cs b/Content.Server.Database/Migrations/Postgres/20240926173711_1984 Backpack Prefs.Designer.cs new file mode 100644 index 00000000000..0a583c10a08 --- /dev/null +++ b/Content.Server.Database/Migrations/Postgres/20240926173711_1984 Backpack Prefs.Designer.cs @@ -0,0 +1,1815 @@ +// +using System; +using System.Net; +using System.Text.Json; +using Content.Server.Database; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; +using NpgsqlTypes; + +#nullable disable + +namespace Content.Server.Database.Migrations.Postgres +{ + [DbContext(typeof(PostgresServerDbContext))] + [Migration("20240926173711_1984 Backpack Prefs")] + partial class _1984BackpackPrefs + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.0") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Content.Server.Database.Admin", b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.Property("AdminRankId") + .HasColumnType("integer") + .HasColumnName("admin_rank_id"); + + b.Property("Title") + .HasColumnType("text") + .HasColumnName("title"); + + b.HasKey("UserId") + .HasName("PK_admin"); + + b.HasIndex("AdminRankId") + .HasDatabaseName("IX_admin_admin_rank_id"); + + b.ToTable("admin", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminFlag", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("admin_flag_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AdminId") + .HasColumnType("uuid") + .HasColumnName("admin_id"); + + b.Property("Flag") + .IsRequired() + .HasColumnType("text") + .HasColumnName("flag"); + + b.Property("Negative") + .HasColumnType("boolean") + .HasColumnName("negative"); + + b.HasKey("Id") + .HasName("PK_admin_flag"); + + b.HasIndex("AdminId") + .HasDatabaseName("IX_admin_flag_admin_id"); + + b.HasIndex("Flag", "AdminId") + .IsUnique(); + + b.ToTable("admin_flag", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLog", b => + { + b.Property("RoundId") + .HasColumnType("integer") + .HasColumnName("round_id"); + + b.Property("Id") + .HasColumnType("integer") + .HasColumnName("admin_log_id"); + + b.Property("Date") + .HasColumnType("timestamp with time zone") + .HasColumnName("date"); + + b.Property("Impact") + .HasColumnType("smallint") + .HasColumnName("impact"); + + b.Property("Json") + .IsRequired() + .HasColumnType("jsonb") + .HasColumnName("json"); + + b.Property("Message") + .IsRequired() + .HasColumnType("text") + .HasColumnName("message"); + + b.Property("Type") + .HasColumnType("integer") + .HasColumnName("type"); + + b.HasKey("RoundId", "Id") + .HasName("PK_admin_log"); + + b.HasIndex("Date"); + + b.HasIndex("Message") + .HasAnnotation("Npgsql:TsVectorConfig", "english"); + + NpgsqlIndexBuilderExtensions.HasMethod(b.HasIndex("Message"), "GIN"); + + b.HasIndex("Type") + .HasDatabaseName("IX_admin_log_type"); + + b.ToTable("admin_log", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLogPlayer", b => + { + b.Property("RoundId") + .HasColumnType("integer") + .HasColumnName("round_id"); + + b.Property("LogId") + .HasColumnType("integer") + .HasColumnName("log_id"); + + b.Property("PlayerUserId") + .HasColumnType("uuid") + .HasColumnName("player_user_id"); + + b.HasKey("RoundId", "LogId", "PlayerUserId") + .HasName("PK_admin_log_player"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_log_player_player_user_id"); + + b.ToTable("admin_log_player", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminMessage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("admin_messages_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("created_at"); + + b.Property("CreatedById") + .HasColumnType("uuid") + .HasColumnName("created_by_id"); + + b.Property("Deleted") + .HasColumnType("boolean") + .HasColumnName("deleted"); + + b.Property("DeletedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("deleted_at"); + + b.Property("DeletedById") + .HasColumnType("uuid") + .HasColumnName("deleted_by_id"); + + b.Property("Dismissed") + .HasColumnType("boolean") + .HasColumnName("dismissed"); + + b.Property("ExpirationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("expiration_time"); + + b.Property("LastEditedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("uuid") + .HasColumnName("last_edited_by_id"); + + b.Property("Message") + .IsRequired() + .HasMaxLength(4096) + .HasColumnType("character varying(4096)") + .HasColumnName("message"); + + b.Property("PlayerUserId") + .HasColumnType("uuid") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("interval") + .HasColumnName("playtime_at_note"); + + b.Property("RoundId") + .HasColumnType("integer") + .HasColumnName("round_id"); + + b.Property("Seen") + .HasColumnType("boolean") + .HasColumnName("seen"); + + b.HasKey("Id") + .HasName("PK_admin_messages"); + + b.HasIndex("CreatedById"); + + b.HasIndex("DeletedById"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_messages_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_admin_messages_round_id"); + + b.ToTable("admin_messages", null, t => + { + t.HasCheckConstraint("NotDismissedAndSeen", "NOT dismissed OR seen"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.AdminNote", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("admin_notes_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("created_at"); + + b.Property("CreatedById") + .HasColumnType("uuid") + .HasColumnName("created_by_id"); + + b.Property("Deleted") + .HasColumnType("boolean") + .HasColumnName("deleted"); + + b.Property("DeletedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("deleted_at"); + + b.Property("DeletedById") + .HasColumnType("uuid") + .HasColumnName("deleted_by_id"); + + b.Property("ExpirationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("expiration_time"); + + b.Property("LastEditedAt") + .IsRequired() + .HasColumnType("timestamp with time zone") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("uuid") + .HasColumnName("last_edited_by_id"); + + b.Property("Message") + .IsRequired() + .HasMaxLength(4096) + .HasColumnType("character varying(4096)") + .HasColumnName("message"); + + b.Property("PlayerUserId") + .HasColumnType("uuid") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("interval") + .HasColumnName("playtime_at_note"); + + b.Property("RoundId") + .HasColumnType("integer") + .HasColumnName("round_id"); + + b.Property("Secret") + .HasColumnType("boolean") + .HasColumnName("secret"); + + b.Property("Severity") + .HasColumnType("integer") + .HasColumnName("severity"); + + b.HasKey("Id") + .HasName("PK_admin_notes"); + + b.HasIndex("CreatedById"); + + b.HasIndex("DeletedById"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_notes_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_admin_notes_round_id"); + + b.ToTable("admin_notes", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRank", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("admin_rank_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name"); + + b.HasKey("Id") + .HasName("PK_admin_rank"); + + b.ToTable("admin_rank", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRankFlag", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("admin_rank_flag_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AdminRankId") + .HasColumnType("integer") + .HasColumnName("admin_rank_id"); + + b.Property("Flag") + .IsRequired() + .HasColumnType("text") + .HasColumnName("flag"); + + b.HasKey("Id") + .HasName("PK_admin_rank_flag"); + + b.HasIndex("AdminRankId"); + + b.HasIndex("Flag", "AdminRankId") + .IsUnique(); + + b.ToTable("admin_rank_flag", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminWatchlist", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("admin_watchlists_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("created_at"); + + b.Property("CreatedById") + .HasColumnType("uuid") + .HasColumnName("created_by_id"); + + b.Property("Deleted") + .HasColumnType("boolean") + .HasColumnName("deleted"); + + b.Property("DeletedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("deleted_at"); + + b.Property("DeletedById") + .HasColumnType("uuid") + .HasColumnName("deleted_by_id"); + + b.Property("ExpirationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("expiration_time"); + + b.Property("LastEditedAt") + .IsRequired() + .HasColumnType("timestamp with time zone") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("uuid") + .HasColumnName("last_edited_by_id"); + + b.Property("Message") + .IsRequired() + .HasMaxLength(4096) + .HasColumnType("character varying(4096)") + .HasColumnName("message"); + + b.Property("PlayerUserId") + .HasColumnType("uuid") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("interval") + .HasColumnName("playtime_at_note"); + + b.Property("RoundId") + .HasColumnType("integer") + .HasColumnName("round_id"); + + b.HasKey("Id") + .HasName("PK_admin_watchlists"); + + b.HasIndex("CreatedById"); + + b.HasIndex("DeletedById"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_watchlists_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_admin_watchlists_round_id"); + + b.ToTable("admin_watchlists", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Antag", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("antag_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AntagName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("antag_name"); + + b.Property("ProfileId") + .HasColumnType("integer") + .HasColumnName("profile_id"); + + b.HasKey("Id") + .HasName("PK_antag"); + + b.HasIndex("ProfileId", "AntagName") + .IsUnique(); + + b.ToTable("antag", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AssignedUserId", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("assigned_user_id_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.Property("UserName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("user_name"); + + b.HasKey("Id") + .HasName("PK_assigned_user_id"); + + b.HasIndex("UserId") + .IsUnique(); + + b.HasIndex("UserName") + .IsUnique(); + + b.ToTable("assigned_user_id", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ConnectionLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("connection_log_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Address") + .IsRequired() + .HasColumnType("inet") + .HasColumnName("address"); + + b.Property("Denied") + .HasColumnType("smallint") + .HasColumnName("denied"); + + b.Property("HWId") + .HasColumnType("bytea") + .HasColumnName("hwid"); + + b.Property("ServerId") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("server_id"); + + b.Property("Time") + .HasColumnType("timestamp with time zone") + .HasColumnName("time"); + + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.Property("UserName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("user_name"); + + b.HasKey("Id") + .HasName("PK_connection_log"); + + b.HasIndex("ServerId") + .HasDatabaseName("IX_connection_log_server_id"); + + b.HasIndex("UserId"); + + b.ToTable("connection_log", null, t => + { + t.HasCheckConstraint("AddressNotIPv6MappedIPv4", "NOT inet '::ffff:0.0.0.0/96' >>= address"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.Job", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("job_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("JobName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("job_name"); + + b.Property("Priority") + .HasColumnType("integer") + .HasColumnName("priority"); + + b.Property("ProfileId") + .HasColumnType("integer") + .HasColumnName("profile_id"); + + b.HasKey("Id") + .HasName("PK_job"); + + b.HasIndex("ProfileId"); + + b.HasIndex("ProfileId", "JobName") + .IsUnique(); + + b.HasIndex(new[] { "ProfileId" }, "IX_job_one_high_priority") + .IsUnique() + .HasFilter("priority = 3"); + + b.ToTable("job", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Loadout", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("loadout_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("LoadoutName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("loadout_name"); + + b.Property("ProfileId") + .HasColumnType("integer") + .HasColumnName("profile_id"); + + b.HasKey("Id") + .HasName("PK_loadout"); + + b.HasIndex("ProfileId", "LoadoutName") + .IsUnique(); + + b.ToTable("loadout", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.PlayTime", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("play_time_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("PlayerId") + .HasColumnType("uuid") + .HasColumnName("player_id"); + + b.Property("TimeSpent") + .HasColumnType("interval") + .HasColumnName("time_spent"); + + b.Property("Tracker") + .IsRequired() + .HasColumnType("text") + .HasColumnName("tracker"); + + b.HasKey("Id") + .HasName("PK_play_time"); + + b.HasIndex("PlayerId", "Tracker") + .IsUnique(); + + b.ToTable("play_time", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Player", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("player_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("FirstSeenTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("first_seen_time"); + + b.Property("LastReadRules") + .HasColumnType("timestamp with time zone") + .HasColumnName("last_read_rules"); + + b.Property("LastSeenAddress") + .IsRequired() + .HasColumnType("inet") + .HasColumnName("last_seen_address"); + + b.Property("LastSeenHWId") + .HasColumnType("bytea") + .HasColumnName("last_seen_hwid"); + + b.Property("LastSeenTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("last_seen_time"); + + b.Property("LastSeenUserName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("last_seen_user_name"); + + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("PK_player"); + + b.HasAlternateKey("UserId") + .HasName("ak_player_user_id"); + + b.HasIndex("LastSeenUserName"); + + b.HasIndex("UserId") + .IsUnique(); + + b.ToTable("player", null, t => + { + t.HasCheckConstraint("LastSeenAddressNotIPv6MappedIPv4", "NOT inet '::ffff:0.0.0.0/96' >>= last_seen_address"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.Preference", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("preference_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AdminOOCColor") + .IsRequired() + .HasColumnType("text") + .HasColumnName("admin_ooc_color"); + + b.Property("SelectedCharacterSlot") + .HasColumnType("integer") + .HasColumnName("selected_character_slot"); + + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("PK_preference"); + + b.HasIndex("UserId") + .IsUnique(); + + b.ToTable("preference", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Profile", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("profile_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Age") + .HasColumnType("integer") + .HasColumnName("age"); + + b.Property("Backpack") + .IsRequired() + .HasColumnType("text") + .HasColumnName("backpack"); + + b.Property("CharacterName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("char_name"); + + b.Property("Clothing") + .IsRequired() + .HasColumnType("text") + .HasColumnName("clothing"); + + b.Property("EyeColor") + .IsRequired() + .HasColumnType("text") + .HasColumnName("eye_color"); + + b.Property("FacialHairColor") + .IsRequired() + .HasColumnType("text") + .HasColumnName("facial_hair_color"); + + b.Property("FacialHairName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("facial_hair_name"); + + b.Property("FlavorText") + .IsRequired() + .HasColumnType("text") + .HasColumnName("flavor_text"); + + b.Property("Gender") + .IsRequired() + .HasColumnType("text") + .HasColumnName("gender"); + + b.Property("HairColor") + .IsRequired() + .HasColumnType("text") + .HasColumnName("hair_color"); + + b.Property("HairName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("hair_name"); + + b.Property("Height") + .HasColumnType("real") + .HasColumnName("height"); + + b.Property("Markings") + .HasColumnType("jsonb") + .HasColumnName("markings"); + + b.Property("PreferenceId") + .HasColumnType("integer") + .HasColumnName("preference_id"); + + b.Property("PreferenceUnavailable") + .HasColumnType("integer") + .HasColumnName("pref_unavailable"); + + b.Property("Sex") + .IsRequired() + .HasColumnType("text") + .HasColumnName("sex"); + + b.Property("SkinColor") + .IsRequired() + .HasColumnType("text") + .HasColumnName("skin_color"); + + b.Property("Slot") + .HasColumnType("integer") + .HasColumnName("slot"); + + b.Property("SpawnPriority") + .HasColumnType("integer") + .HasColumnName("spawn_priority"); + + b.Property("Species") + .IsRequired() + .HasColumnType("text") + .HasColumnName("species"); + + b.Property("Width") + .HasColumnType("real") + .HasColumnName("width"); + + b.HasKey("Id") + .HasName("PK_profile"); + + b.HasIndex("PreferenceId") + .HasDatabaseName("IX_profile_preference_id"); + + b.HasIndex("Slot", "PreferenceId") + .IsUnique(); + + b.ToTable("profile", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Round", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("round_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ServerId") + .HasColumnType("integer") + .HasColumnName("server_id"); + + b.Property("StartDate") + .HasColumnType("timestamp with time zone") + .HasColumnName("start_date"); + + b.HasKey("Id") + .HasName("PK_round"); + + b.HasIndex("ServerId") + .HasDatabaseName("IX_round_server_id"); + + b.HasIndex("StartDate"); + + b.ToTable("round", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Server", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("server_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name"); + + b.HasKey("Id") + .HasName("PK_server"); + + b.ToTable("server", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBan", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("server_ban_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Address") + .HasColumnType("inet") + .HasColumnName("address"); + + b.Property("AutoDelete") + .HasColumnType("boolean") + .HasColumnName("auto_delete"); + + b.Property("BanTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("ban_time"); + + b.Property("BanningAdmin") + .HasColumnType("uuid") + .HasColumnName("banning_admin"); + + b.Property("ExemptFlags") + .HasColumnType("integer") + .HasColumnName("exempt_flags"); + + b.Property("ExpirationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("expiration_time"); + + b.Property("HWId") + .HasColumnType("bytea") + .HasColumnName("hwid"); + + b.Property("Hidden") + .HasColumnType("boolean") + .HasColumnName("hidden"); + + b.Property("LastEditedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("uuid") + .HasColumnName("last_edited_by_id"); + + b.Property("PlayerUserId") + .HasColumnType("uuid") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("interval") + .HasColumnName("playtime_at_note"); + + b.Property("Reason") + .IsRequired() + .HasColumnType("text") + .HasColumnName("reason"); + + b.Property("RoundId") + .HasColumnType("integer") + .HasColumnName("round_id"); + + b.Property("Severity") + .HasColumnType("integer") + .HasColumnName("severity"); + + b.HasKey("Id") + .HasName("PK_server_ban"); + + b.HasIndex("Address"); + + b.HasIndex("BanningAdmin"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_server_ban_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_server_ban_round_id"); + + b.ToTable("server_ban", null, t => + { + t.HasCheckConstraint("AddressNotIPv6MappedIPv4", "NOT inet '::ffff:0.0.0.0/96' >>= address"); + + t.HasCheckConstraint("HaveEitherAddressOrUserIdOrHWId", "address IS NOT NULL OR player_user_id IS NOT NULL OR hwid IS NOT NULL"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBanExemption", b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.Property("Flags") + .HasColumnType("integer") + .HasColumnName("flags"); + + b.HasKey("UserId") + .HasName("PK_server_ban_exemption"); + + b.ToTable("server_ban_exemption", null, t => + { + t.HasCheckConstraint("FlagsNotZero", "flags != 0"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBanHit", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("server_ban_hit_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("BanId") + .HasColumnType("integer") + .HasColumnName("ban_id"); + + b.Property("ConnectionId") + .HasColumnType("integer") + .HasColumnName("connection_id"); + + b.HasKey("Id") + .HasName("PK_server_ban_hit"); + + b.HasIndex("BanId") + .HasDatabaseName("IX_server_ban_hit_ban_id"); + + b.HasIndex("ConnectionId") + .HasDatabaseName("IX_server_ban_hit_connection_id"); + + b.ToTable("server_ban_hit", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleBan", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("server_role_ban_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Address") + .HasColumnType("inet") + .HasColumnName("address"); + + b.Property("BanTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("ban_time"); + + b.Property("BanningAdmin") + .HasColumnType("uuid") + .HasColumnName("banning_admin"); + + b.Property("ExpirationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("expiration_time"); + + b.Property("HWId") + .HasColumnType("bytea") + .HasColumnName("hwid"); + + b.Property("Hidden") + .HasColumnType("boolean") + .HasColumnName("hidden"); + + b.Property("LastEditedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("uuid") + .HasColumnName("last_edited_by_id"); + + b.Property("PlayerUserId") + .HasColumnType("uuid") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("interval") + .HasColumnName("playtime_at_note"); + + b.Property("Reason") + .IsRequired() + .HasColumnType("text") + .HasColumnName("reason"); + + b.Property("RoleId") + .IsRequired() + .HasColumnType("text") + .HasColumnName("role_id"); + + b.Property("RoundId") + .HasColumnType("integer") + .HasColumnName("round_id"); + + b.Property("Severity") + .HasColumnType("integer") + .HasColumnName("severity"); + + b.HasKey("Id") + .HasName("PK_server_role_ban"); + + b.HasIndex("Address"); + + b.HasIndex("BanningAdmin"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_server_role_ban_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_server_role_ban_round_id"); + + b.ToTable("server_role_ban", null, t => + { + t.HasCheckConstraint("AddressNotIPv6MappedIPv4", "NOT inet '::ffff:0.0.0.0/96' >>= address"); + + t.HasCheckConstraint("HaveEitherAddressOrUserIdOrHWId", "address IS NOT NULL OR player_user_id IS NOT NULL OR hwid IS NOT NULL"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleUnban", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("role_unban_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("BanId") + .HasColumnType("integer") + .HasColumnName("ban_id"); + + b.Property("UnbanTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("unban_time"); + + b.Property("UnbanningAdmin") + .HasColumnType("uuid") + .HasColumnName("unbanning_admin"); + + b.HasKey("Id") + .HasName("PK_server_role_unban"); + + b.HasIndex("BanId") + .IsUnique(); + + b.ToTable("server_role_unban", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ServerUnban", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("unban_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("BanId") + .HasColumnType("integer") + .HasColumnName("ban_id"); + + b.Property("UnbanTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("unban_time"); + + b.Property("UnbanningAdmin") + .HasColumnType("uuid") + .HasColumnName("unbanning_admin"); + + b.HasKey("Id") + .HasName("PK_server_unban"); + + b.HasIndex("BanId") + .IsUnique(); + + b.ToTable("server_unban", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Trait", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("trait_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ProfileId") + .HasColumnType("integer") + .HasColumnName("profile_id"); + + b.Property("TraitName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("trait_name"); + + b.HasKey("Id") + .HasName("PK_trait"); + + b.HasIndex("ProfileId", "TraitName") + .IsUnique(); + + b.ToTable("trait", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.UploadedResourceLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("uploaded_resource_log_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Data") + .IsRequired() + .HasColumnType("bytea") + .HasColumnName("data"); + + b.Property("Date") + .HasColumnType("timestamp with time zone") + .HasColumnName("date"); + + b.Property("Path") + .IsRequired() + .HasColumnType("text") + .HasColumnName("path"); + + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("PK_uploaded_resource_log"); + + b.ToTable("uploaded_resource_log", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Whitelist", b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.HasKey("UserId") + .HasName("PK_whitelist"); + + b.ToTable("whitelist", (string)null); + }); + + modelBuilder.Entity("PlayerRound", b => + { + b.Property("PlayersId") + .HasColumnType("integer") + .HasColumnName("players_id"); + + b.Property("RoundsId") + .HasColumnType("integer") + .HasColumnName("rounds_id"); + + b.HasKey("PlayersId", "RoundsId") + .HasName("PK_player_round"); + + b.HasIndex("RoundsId") + .HasDatabaseName("IX_player_round_rounds_id"); + + b.ToTable("player_round", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Admin", b => + { + b.HasOne("Content.Server.Database.AdminRank", "AdminRank") + .WithMany("Admins") + .HasForeignKey("AdminRankId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_admin_rank_admin_rank_id"); + + b.Navigation("AdminRank"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminFlag", b => + { + b.HasOne("Content.Server.Database.Admin", "Admin") + .WithMany("Flags") + .HasForeignKey("AdminId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_flag_admin_admin_id"); + + b.Navigation("Admin"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLog", b => + { + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany("AdminLogs") + .HasForeignKey("RoundId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_log_round_round_id"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLogPlayer", b => + { + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminLogs") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_log_player_player_player_user_id"); + + b.HasOne("Content.Server.Database.AdminLog", "Log") + .WithMany("Players") + .HasForeignKey("RoundId", "LogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_log_player_admin_log_round_id_log_id"); + + b.Navigation("Log"); + + b.Navigation("Player"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminMessage", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminMessagesCreated") + .HasForeignKey("CreatedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_messages_player_created_by_id"); + + b.HasOne("Content.Server.Database.Player", "DeletedBy") + .WithMany("AdminMessagesDeleted") + .HasForeignKey("DeletedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_messages_player_deleted_by_id"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminMessagesLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_messages_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminMessagesReceived") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_admin_messages_player_player_user_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_admin_messages_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("DeletedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Player"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminNote", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminNotesCreated") + .HasForeignKey("CreatedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_notes_player_created_by_id"); + + b.HasOne("Content.Server.Database.Player", "DeletedBy") + .WithMany("AdminNotesDeleted") + .HasForeignKey("DeletedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_notes_player_deleted_by_id"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminNotesLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_notes_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminNotesReceived") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_admin_notes_player_player_user_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_admin_notes_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("DeletedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Player"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRankFlag", b => + { + b.HasOne("Content.Server.Database.AdminRank", "Rank") + .WithMany("Flags") + .HasForeignKey("AdminRankId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_rank_flag_admin_rank_admin_rank_id"); + + b.Navigation("Rank"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminWatchlist", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminWatchlistsCreated") + .HasForeignKey("CreatedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_watchlists_player_created_by_id"); + + b.HasOne("Content.Server.Database.Player", "DeletedBy") + .WithMany("AdminWatchlistsDeleted") + .HasForeignKey("DeletedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_watchlists_player_deleted_by_id"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminWatchlistsLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_watchlists_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminWatchlistsReceived") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_admin_watchlists_player_player_user_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_admin_watchlists_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("DeletedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Player"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.Antag", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Antags") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_antag_profile_profile_id"); + + b.Navigation("Profile"); + }); + + modelBuilder.Entity("Content.Server.Database.ConnectionLog", b => + { + b.HasOne("Content.Server.Database.Server", "Server") + .WithMany("ConnectionLogs") + .HasForeignKey("ServerId") + .OnDelete(DeleteBehavior.SetNull) + .IsRequired() + .HasConstraintName("FK_connection_log_server_server_id"); + + b.Navigation("Server"); + }); + + modelBuilder.Entity("Content.Server.Database.Job", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Jobs") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_job_profile_profile_id"); + + b.Navigation("Profile"); + }); + + modelBuilder.Entity("Content.Server.Database.Loadout", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Loadouts") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_loadout_profile_profile_id"); + + b.Navigation("Profile"); + }); + + modelBuilder.Entity("Content.Server.Database.Profile", b => + { + b.HasOne("Content.Server.Database.Preference", "Preference") + .WithMany("Profiles") + .HasForeignKey("PreferenceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_profile_preference_preference_id"); + + b.Navigation("Preference"); + }); + + modelBuilder.Entity("Content.Server.Database.Round", b => + { + b.HasOne("Content.Server.Database.Server", "Server") + .WithMany("Rounds") + .HasForeignKey("ServerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_round_server_server_id"); + + b.Navigation("Server"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBan", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminServerBansCreated") + .HasForeignKey("BanningAdmin") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_ban_player_banning_admin"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminServerBansLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_ban_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_server_ban_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBanHit", b => + { + b.HasOne("Content.Server.Database.ServerBan", "Ban") + .WithMany("BanHits") + .HasForeignKey("BanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_ban_hit_server_ban_ban_id"); + + b.HasOne("Content.Server.Database.ConnectionLog", "Connection") + .WithMany("BanHits") + .HasForeignKey("ConnectionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_ban_hit_connection_log_connection_id"); + + b.Navigation("Ban"); + + b.Navigation("Connection"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleBan", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminServerRoleBansCreated") + .HasForeignKey("BanningAdmin") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_role_ban_player_banning_admin"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminServerRoleBansLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_role_ban_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_server_role_ban_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleUnban", b => + { + b.HasOne("Content.Server.Database.ServerRoleBan", "Ban") + .WithOne("Unban") + .HasForeignKey("Content.Server.Database.ServerRoleUnban", "BanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_role_unban_server_role_ban_ban_id"); + + b.Navigation("Ban"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerUnban", b => + { + b.HasOne("Content.Server.Database.ServerBan", "Ban") + .WithOne("Unban") + .HasForeignKey("Content.Server.Database.ServerUnban", "BanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_unban_server_ban_ban_id"); + + b.Navigation("Ban"); + }); + + modelBuilder.Entity("Content.Server.Database.Trait", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Traits") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_trait_profile_profile_id"); + + b.Navigation("Profile"); + }); + + modelBuilder.Entity("PlayerRound", b => + { + b.HasOne("Content.Server.Database.Player", null) + .WithMany() + .HasForeignKey("PlayersId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_player_round_player_players_id"); + + b.HasOne("Content.Server.Database.Round", null) + .WithMany() + .HasForeignKey("RoundsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_player_round_round_rounds_id"); + }); + + modelBuilder.Entity("Content.Server.Database.Admin", b => + { + b.Navigation("Flags"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLog", b => + { + b.Navigation("Players"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRank", b => + { + b.Navigation("Admins"); + + b.Navigation("Flags"); + }); + + modelBuilder.Entity("Content.Server.Database.ConnectionLog", b => + { + b.Navigation("BanHits"); + }); + + modelBuilder.Entity("Content.Server.Database.Player", b => + { + b.Navigation("AdminLogs"); + + b.Navigation("AdminMessagesCreated"); + + b.Navigation("AdminMessagesDeleted"); + + b.Navigation("AdminMessagesLastEdited"); + + b.Navigation("AdminMessagesReceived"); + + b.Navigation("AdminNotesCreated"); + + b.Navigation("AdminNotesDeleted"); + + b.Navigation("AdminNotesLastEdited"); + + b.Navigation("AdminNotesReceived"); + + b.Navigation("AdminServerBansCreated"); + + b.Navigation("AdminServerBansLastEdited"); + + b.Navigation("AdminServerRoleBansCreated"); + + b.Navigation("AdminServerRoleBansLastEdited"); + + b.Navigation("AdminWatchlistsCreated"); + + b.Navigation("AdminWatchlistsDeleted"); + + b.Navigation("AdminWatchlistsLastEdited"); + + b.Navigation("AdminWatchlistsReceived"); + }); + + modelBuilder.Entity("Content.Server.Database.Preference", b => + { + b.Navigation("Profiles"); + }); + + modelBuilder.Entity("Content.Server.Database.Profile", b => + { + b.Navigation("Antags"); + + b.Navigation("Jobs"); + + b.Navigation("Loadouts"); + + b.Navigation("Traits"); + }); + + modelBuilder.Entity("Content.Server.Database.Round", b => + { + b.Navigation("AdminLogs"); + }); + + modelBuilder.Entity("Content.Server.Database.Server", b => + { + b.Navigation("ConnectionLogs"); + + b.Navigation("Rounds"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBan", b => + { + b.Navigation("BanHits"); + + b.Navigation("Unban"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleBan", b => + { + b.Navigation("Unban"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Content.Server.Database/Migrations/Postgres/20240926173711_1984 Backpack Prefs.cs b/Content.Server.Database/Migrations/Postgres/20240926173711_1984 Backpack Prefs.cs new file mode 100644 index 00000000000..0e137db06cf --- /dev/null +++ b/Content.Server.Database/Migrations/Postgres/20240926173711_1984 Backpack Prefs.cs @@ -0,0 +1,22 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Content.Server.Database.Migrations.Postgres +{ + /// + public partial class _1984BackpackPrefs : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/Content.Server.Database/Migrations/Postgres/20241001054803_CustomSpecieName.Designer.cs b/Content.Server.Database/Migrations/Postgres/20241001054803_CustomSpecieName.Designer.cs new file mode 100644 index 00000000000..d4f96b21e56 --- /dev/null +++ b/Content.Server.Database/Migrations/Postgres/20241001054803_CustomSpecieName.Designer.cs @@ -0,0 +1,1820 @@ +// +using System; +using System.Net; +using System.Text.Json; +using Content.Server.Database; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; +using NpgsqlTypes; + +#nullable disable + +namespace Content.Server.Database.Migrations.Postgres +{ + [DbContext(typeof(PostgresServerDbContext))] + [Migration("20241001054803_CustomSpecieName")] + partial class CustomSpecieName + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.0") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Content.Server.Database.Admin", b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.Property("AdminRankId") + .HasColumnType("integer") + .HasColumnName("admin_rank_id"); + + b.Property("Title") + .HasColumnType("text") + .HasColumnName("title"); + + b.HasKey("UserId") + .HasName("PK_admin"); + + b.HasIndex("AdminRankId") + .HasDatabaseName("IX_admin_admin_rank_id"); + + b.ToTable("admin", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminFlag", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("admin_flag_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AdminId") + .HasColumnType("uuid") + .HasColumnName("admin_id"); + + b.Property("Flag") + .IsRequired() + .HasColumnType("text") + .HasColumnName("flag"); + + b.Property("Negative") + .HasColumnType("boolean") + .HasColumnName("negative"); + + b.HasKey("Id") + .HasName("PK_admin_flag"); + + b.HasIndex("AdminId") + .HasDatabaseName("IX_admin_flag_admin_id"); + + b.HasIndex("Flag", "AdminId") + .IsUnique(); + + b.ToTable("admin_flag", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLog", b => + { + b.Property("RoundId") + .HasColumnType("integer") + .HasColumnName("round_id"); + + b.Property("Id") + .HasColumnType("integer") + .HasColumnName("admin_log_id"); + + b.Property("Date") + .HasColumnType("timestamp with time zone") + .HasColumnName("date"); + + b.Property("Impact") + .HasColumnType("smallint") + .HasColumnName("impact"); + + b.Property("Json") + .IsRequired() + .HasColumnType("jsonb") + .HasColumnName("json"); + + b.Property("Message") + .IsRequired() + .HasColumnType("text") + .HasColumnName("message"); + + b.Property("Type") + .HasColumnType("integer") + .HasColumnName("type"); + + b.HasKey("RoundId", "Id") + .HasName("PK_admin_log"); + + b.HasIndex("Date"); + + b.HasIndex("Message") + .HasAnnotation("Npgsql:TsVectorConfig", "english"); + + NpgsqlIndexBuilderExtensions.HasMethod(b.HasIndex("Message"), "GIN"); + + b.HasIndex("Type") + .HasDatabaseName("IX_admin_log_type"); + + b.ToTable("admin_log", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLogPlayer", b => + { + b.Property("RoundId") + .HasColumnType("integer") + .HasColumnName("round_id"); + + b.Property("LogId") + .HasColumnType("integer") + .HasColumnName("log_id"); + + b.Property("PlayerUserId") + .HasColumnType("uuid") + .HasColumnName("player_user_id"); + + b.HasKey("RoundId", "LogId", "PlayerUserId") + .HasName("PK_admin_log_player"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_log_player_player_user_id"); + + b.ToTable("admin_log_player", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminMessage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("admin_messages_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("created_at"); + + b.Property("CreatedById") + .HasColumnType("uuid") + .HasColumnName("created_by_id"); + + b.Property("Deleted") + .HasColumnType("boolean") + .HasColumnName("deleted"); + + b.Property("DeletedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("deleted_at"); + + b.Property("DeletedById") + .HasColumnType("uuid") + .HasColumnName("deleted_by_id"); + + b.Property("Dismissed") + .HasColumnType("boolean") + .HasColumnName("dismissed"); + + b.Property("ExpirationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("expiration_time"); + + b.Property("LastEditedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("uuid") + .HasColumnName("last_edited_by_id"); + + b.Property("Message") + .IsRequired() + .HasMaxLength(4096) + .HasColumnType("character varying(4096)") + .HasColumnName("message"); + + b.Property("PlayerUserId") + .HasColumnType("uuid") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("interval") + .HasColumnName("playtime_at_note"); + + b.Property("RoundId") + .HasColumnType("integer") + .HasColumnName("round_id"); + + b.Property("Seen") + .HasColumnType("boolean") + .HasColumnName("seen"); + + b.HasKey("Id") + .HasName("PK_admin_messages"); + + b.HasIndex("CreatedById"); + + b.HasIndex("DeletedById"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_messages_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_admin_messages_round_id"); + + b.ToTable("admin_messages", null, t => + { + t.HasCheckConstraint("NotDismissedAndSeen", "NOT dismissed OR seen"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.AdminNote", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("admin_notes_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("created_at"); + + b.Property("CreatedById") + .HasColumnType("uuid") + .HasColumnName("created_by_id"); + + b.Property("Deleted") + .HasColumnType("boolean") + .HasColumnName("deleted"); + + b.Property("DeletedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("deleted_at"); + + b.Property("DeletedById") + .HasColumnType("uuid") + .HasColumnName("deleted_by_id"); + + b.Property("ExpirationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("expiration_time"); + + b.Property("LastEditedAt") + .IsRequired() + .HasColumnType("timestamp with time zone") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("uuid") + .HasColumnName("last_edited_by_id"); + + b.Property("Message") + .IsRequired() + .HasMaxLength(4096) + .HasColumnType("character varying(4096)") + .HasColumnName("message"); + + b.Property("PlayerUserId") + .HasColumnType("uuid") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("interval") + .HasColumnName("playtime_at_note"); + + b.Property("RoundId") + .HasColumnType("integer") + .HasColumnName("round_id"); + + b.Property("Secret") + .HasColumnType("boolean") + .HasColumnName("secret"); + + b.Property("Severity") + .HasColumnType("integer") + .HasColumnName("severity"); + + b.HasKey("Id") + .HasName("PK_admin_notes"); + + b.HasIndex("CreatedById"); + + b.HasIndex("DeletedById"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_notes_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_admin_notes_round_id"); + + b.ToTable("admin_notes", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRank", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("admin_rank_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name"); + + b.HasKey("Id") + .HasName("PK_admin_rank"); + + b.ToTable("admin_rank", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRankFlag", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("admin_rank_flag_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AdminRankId") + .HasColumnType("integer") + .HasColumnName("admin_rank_id"); + + b.Property("Flag") + .IsRequired() + .HasColumnType("text") + .HasColumnName("flag"); + + b.HasKey("Id") + .HasName("PK_admin_rank_flag"); + + b.HasIndex("AdminRankId"); + + b.HasIndex("Flag", "AdminRankId") + .IsUnique(); + + b.ToTable("admin_rank_flag", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminWatchlist", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("admin_watchlists_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("created_at"); + + b.Property("CreatedById") + .HasColumnType("uuid") + .HasColumnName("created_by_id"); + + b.Property("Deleted") + .HasColumnType("boolean") + .HasColumnName("deleted"); + + b.Property("DeletedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("deleted_at"); + + b.Property("DeletedById") + .HasColumnType("uuid") + .HasColumnName("deleted_by_id"); + + b.Property("ExpirationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("expiration_time"); + + b.Property("LastEditedAt") + .IsRequired() + .HasColumnType("timestamp with time zone") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("uuid") + .HasColumnName("last_edited_by_id"); + + b.Property("Message") + .IsRequired() + .HasMaxLength(4096) + .HasColumnType("character varying(4096)") + .HasColumnName("message"); + + b.Property("PlayerUserId") + .HasColumnType("uuid") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("interval") + .HasColumnName("playtime_at_note"); + + b.Property("RoundId") + .HasColumnType("integer") + .HasColumnName("round_id"); + + b.HasKey("Id") + .HasName("PK_admin_watchlists"); + + b.HasIndex("CreatedById"); + + b.HasIndex("DeletedById"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_watchlists_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_admin_watchlists_round_id"); + + b.ToTable("admin_watchlists", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Antag", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("antag_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AntagName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("antag_name"); + + b.Property("ProfileId") + .HasColumnType("integer") + .HasColumnName("profile_id"); + + b.HasKey("Id") + .HasName("PK_antag"); + + b.HasIndex("ProfileId", "AntagName") + .IsUnique(); + + b.ToTable("antag", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AssignedUserId", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("assigned_user_id_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.Property("UserName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("user_name"); + + b.HasKey("Id") + .HasName("PK_assigned_user_id"); + + b.HasIndex("UserId") + .IsUnique(); + + b.HasIndex("UserName") + .IsUnique(); + + b.ToTable("assigned_user_id", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ConnectionLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("connection_log_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Address") + .IsRequired() + .HasColumnType("inet") + .HasColumnName("address"); + + b.Property("Denied") + .HasColumnType("smallint") + .HasColumnName("denied"); + + b.Property("HWId") + .HasColumnType("bytea") + .HasColumnName("hwid"); + + b.Property("ServerId") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("server_id"); + + b.Property("Time") + .HasColumnType("timestamp with time zone") + .HasColumnName("time"); + + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.Property("UserName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("user_name"); + + b.HasKey("Id") + .HasName("PK_connection_log"); + + b.HasIndex("ServerId") + .HasDatabaseName("IX_connection_log_server_id"); + + b.HasIndex("UserId"); + + b.ToTable("connection_log", null, t => + { + t.HasCheckConstraint("AddressNotIPv6MappedIPv4", "NOT inet '::ffff:0.0.0.0/96' >>= address"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.Job", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("job_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("JobName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("job_name"); + + b.Property("Priority") + .HasColumnType("integer") + .HasColumnName("priority"); + + b.Property("ProfileId") + .HasColumnType("integer") + .HasColumnName("profile_id"); + + b.HasKey("Id") + .HasName("PK_job"); + + b.HasIndex("ProfileId"); + + b.HasIndex("ProfileId", "JobName") + .IsUnique(); + + b.HasIndex(new[] { "ProfileId" }, "IX_job_one_high_priority") + .IsUnique() + .HasFilter("priority = 3"); + + b.ToTable("job", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Loadout", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("loadout_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("LoadoutName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("loadout_name"); + + b.Property("ProfileId") + .HasColumnType("integer") + .HasColumnName("profile_id"); + + b.HasKey("Id") + .HasName("PK_loadout"); + + b.HasIndex("ProfileId", "LoadoutName") + .IsUnique(); + + b.ToTable("loadout", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.PlayTime", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("play_time_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("PlayerId") + .HasColumnType("uuid") + .HasColumnName("player_id"); + + b.Property("TimeSpent") + .HasColumnType("interval") + .HasColumnName("time_spent"); + + b.Property("Tracker") + .IsRequired() + .HasColumnType("text") + .HasColumnName("tracker"); + + b.HasKey("Id") + .HasName("PK_play_time"); + + b.HasIndex("PlayerId", "Tracker") + .IsUnique(); + + b.ToTable("play_time", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Player", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("player_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("FirstSeenTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("first_seen_time"); + + b.Property("LastReadRules") + .HasColumnType("timestamp with time zone") + .HasColumnName("last_read_rules"); + + b.Property("LastSeenAddress") + .IsRequired() + .HasColumnType("inet") + .HasColumnName("last_seen_address"); + + b.Property("LastSeenHWId") + .HasColumnType("bytea") + .HasColumnName("last_seen_hwid"); + + b.Property("LastSeenTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("last_seen_time"); + + b.Property("LastSeenUserName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("last_seen_user_name"); + + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("PK_player"); + + b.HasAlternateKey("UserId") + .HasName("ak_player_user_id"); + + b.HasIndex("LastSeenUserName"); + + b.HasIndex("UserId") + .IsUnique(); + + b.ToTable("player", null, t => + { + t.HasCheckConstraint("LastSeenAddressNotIPv6MappedIPv4", "NOT inet '::ffff:0.0.0.0/96' >>= last_seen_address"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.Preference", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("preference_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AdminOOCColor") + .IsRequired() + .HasColumnType("text") + .HasColumnName("admin_ooc_color"); + + b.Property("SelectedCharacterSlot") + .HasColumnType("integer") + .HasColumnName("selected_character_slot"); + + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("PK_preference"); + + b.HasIndex("UserId") + .IsUnique(); + + b.ToTable("preference", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Profile", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("profile_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Age") + .HasColumnType("integer") + .HasColumnName("age"); + + b.Property("Backpack") + .IsRequired() + .HasColumnType("text") + .HasColumnName("backpack"); + + b.Property("CharacterName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("char_name"); + + b.Property("Clothing") + .IsRequired() + .HasColumnType("text") + .HasColumnName("clothing"); + + b.Property("CustomSpecieName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("custom_specie_name"); + + b.Property("EyeColor") + .IsRequired() + .HasColumnType("text") + .HasColumnName("eye_color"); + + b.Property("FacialHairColor") + .IsRequired() + .HasColumnType("text") + .HasColumnName("facial_hair_color"); + + b.Property("FacialHairName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("facial_hair_name"); + + b.Property("FlavorText") + .IsRequired() + .HasColumnType("text") + .HasColumnName("flavor_text"); + + b.Property("Gender") + .IsRequired() + .HasColumnType("text") + .HasColumnName("gender"); + + b.Property("HairColor") + .IsRequired() + .HasColumnType("text") + .HasColumnName("hair_color"); + + b.Property("HairName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("hair_name"); + + b.Property("Height") + .HasColumnType("real") + .HasColumnName("height"); + + b.Property("Markings") + .HasColumnType("jsonb") + .HasColumnName("markings"); + + b.Property("PreferenceId") + .HasColumnType("integer") + .HasColumnName("preference_id"); + + b.Property("PreferenceUnavailable") + .HasColumnType("integer") + .HasColumnName("pref_unavailable"); + + b.Property("Sex") + .IsRequired() + .HasColumnType("text") + .HasColumnName("sex"); + + b.Property("SkinColor") + .IsRequired() + .HasColumnType("text") + .HasColumnName("skin_color"); + + b.Property("Slot") + .HasColumnType("integer") + .HasColumnName("slot"); + + b.Property("SpawnPriority") + .HasColumnType("integer") + .HasColumnName("spawn_priority"); + + b.Property("Species") + .IsRequired() + .HasColumnType("text") + .HasColumnName("species"); + + b.Property("Width") + .HasColumnType("real") + .HasColumnName("width"); + + b.HasKey("Id") + .HasName("PK_profile"); + + b.HasIndex("PreferenceId") + .HasDatabaseName("IX_profile_preference_id"); + + b.HasIndex("Slot", "PreferenceId") + .IsUnique(); + + b.ToTable("profile", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Round", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("round_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ServerId") + .HasColumnType("integer") + .HasColumnName("server_id"); + + b.Property("StartDate") + .HasColumnType("timestamp with time zone") + .HasColumnName("start_date"); + + b.HasKey("Id") + .HasName("PK_round"); + + b.HasIndex("ServerId") + .HasDatabaseName("IX_round_server_id"); + + b.HasIndex("StartDate"); + + b.ToTable("round", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Server", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("server_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name"); + + b.HasKey("Id") + .HasName("PK_server"); + + b.ToTable("server", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBan", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("server_ban_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Address") + .HasColumnType("inet") + .HasColumnName("address"); + + b.Property("AutoDelete") + .HasColumnType("boolean") + .HasColumnName("auto_delete"); + + b.Property("BanTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("ban_time"); + + b.Property("BanningAdmin") + .HasColumnType("uuid") + .HasColumnName("banning_admin"); + + b.Property("ExemptFlags") + .HasColumnType("integer") + .HasColumnName("exempt_flags"); + + b.Property("ExpirationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("expiration_time"); + + b.Property("HWId") + .HasColumnType("bytea") + .HasColumnName("hwid"); + + b.Property("Hidden") + .HasColumnType("boolean") + .HasColumnName("hidden"); + + b.Property("LastEditedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("uuid") + .HasColumnName("last_edited_by_id"); + + b.Property("PlayerUserId") + .HasColumnType("uuid") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("interval") + .HasColumnName("playtime_at_note"); + + b.Property("Reason") + .IsRequired() + .HasColumnType("text") + .HasColumnName("reason"); + + b.Property("RoundId") + .HasColumnType("integer") + .HasColumnName("round_id"); + + b.Property("Severity") + .HasColumnType("integer") + .HasColumnName("severity"); + + b.HasKey("Id") + .HasName("PK_server_ban"); + + b.HasIndex("Address"); + + b.HasIndex("BanningAdmin"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_server_ban_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_server_ban_round_id"); + + b.ToTable("server_ban", null, t => + { + t.HasCheckConstraint("AddressNotIPv6MappedIPv4", "NOT inet '::ffff:0.0.0.0/96' >>= address"); + + t.HasCheckConstraint("HaveEitherAddressOrUserIdOrHWId", "address IS NOT NULL OR player_user_id IS NOT NULL OR hwid IS NOT NULL"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBanExemption", b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.Property("Flags") + .HasColumnType("integer") + .HasColumnName("flags"); + + b.HasKey("UserId") + .HasName("PK_server_ban_exemption"); + + b.ToTable("server_ban_exemption", null, t => + { + t.HasCheckConstraint("FlagsNotZero", "flags != 0"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBanHit", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("server_ban_hit_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("BanId") + .HasColumnType("integer") + .HasColumnName("ban_id"); + + b.Property("ConnectionId") + .HasColumnType("integer") + .HasColumnName("connection_id"); + + b.HasKey("Id") + .HasName("PK_server_ban_hit"); + + b.HasIndex("BanId") + .HasDatabaseName("IX_server_ban_hit_ban_id"); + + b.HasIndex("ConnectionId") + .HasDatabaseName("IX_server_ban_hit_connection_id"); + + b.ToTable("server_ban_hit", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleBan", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("server_role_ban_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Address") + .HasColumnType("inet") + .HasColumnName("address"); + + b.Property("BanTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("ban_time"); + + b.Property("BanningAdmin") + .HasColumnType("uuid") + .HasColumnName("banning_admin"); + + b.Property("ExpirationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("expiration_time"); + + b.Property("HWId") + .HasColumnType("bytea") + .HasColumnName("hwid"); + + b.Property("Hidden") + .HasColumnType("boolean") + .HasColumnName("hidden"); + + b.Property("LastEditedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("uuid") + .HasColumnName("last_edited_by_id"); + + b.Property("PlayerUserId") + .HasColumnType("uuid") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("interval") + .HasColumnName("playtime_at_note"); + + b.Property("Reason") + .IsRequired() + .HasColumnType("text") + .HasColumnName("reason"); + + b.Property("RoleId") + .IsRequired() + .HasColumnType("text") + .HasColumnName("role_id"); + + b.Property("RoundId") + .HasColumnType("integer") + .HasColumnName("round_id"); + + b.Property("Severity") + .HasColumnType("integer") + .HasColumnName("severity"); + + b.HasKey("Id") + .HasName("PK_server_role_ban"); + + b.HasIndex("Address"); + + b.HasIndex("BanningAdmin"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_server_role_ban_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_server_role_ban_round_id"); + + b.ToTable("server_role_ban", null, t => + { + t.HasCheckConstraint("AddressNotIPv6MappedIPv4", "NOT inet '::ffff:0.0.0.0/96' >>= address"); + + t.HasCheckConstraint("HaveEitherAddressOrUserIdOrHWId", "address IS NOT NULL OR player_user_id IS NOT NULL OR hwid IS NOT NULL"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleUnban", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("role_unban_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("BanId") + .HasColumnType("integer") + .HasColumnName("ban_id"); + + b.Property("UnbanTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("unban_time"); + + b.Property("UnbanningAdmin") + .HasColumnType("uuid") + .HasColumnName("unbanning_admin"); + + b.HasKey("Id") + .HasName("PK_server_role_unban"); + + b.HasIndex("BanId") + .IsUnique(); + + b.ToTable("server_role_unban", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ServerUnban", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("unban_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("BanId") + .HasColumnType("integer") + .HasColumnName("ban_id"); + + b.Property("UnbanTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("unban_time"); + + b.Property("UnbanningAdmin") + .HasColumnType("uuid") + .HasColumnName("unbanning_admin"); + + b.HasKey("Id") + .HasName("PK_server_unban"); + + b.HasIndex("BanId") + .IsUnique(); + + b.ToTable("server_unban", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Trait", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("trait_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ProfileId") + .HasColumnType("integer") + .HasColumnName("profile_id"); + + b.Property("TraitName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("trait_name"); + + b.HasKey("Id") + .HasName("PK_trait"); + + b.HasIndex("ProfileId", "TraitName") + .IsUnique(); + + b.ToTable("trait", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.UploadedResourceLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("uploaded_resource_log_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Data") + .IsRequired() + .HasColumnType("bytea") + .HasColumnName("data"); + + b.Property("Date") + .HasColumnType("timestamp with time zone") + .HasColumnName("date"); + + b.Property("Path") + .IsRequired() + .HasColumnType("text") + .HasColumnName("path"); + + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("PK_uploaded_resource_log"); + + b.ToTable("uploaded_resource_log", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Whitelist", b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.HasKey("UserId") + .HasName("PK_whitelist"); + + b.ToTable("whitelist", (string)null); + }); + + modelBuilder.Entity("PlayerRound", b => + { + b.Property("PlayersId") + .HasColumnType("integer") + .HasColumnName("players_id"); + + b.Property("RoundsId") + .HasColumnType("integer") + .HasColumnName("rounds_id"); + + b.HasKey("PlayersId", "RoundsId") + .HasName("PK_player_round"); + + b.HasIndex("RoundsId") + .HasDatabaseName("IX_player_round_rounds_id"); + + b.ToTable("player_round", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Admin", b => + { + b.HasOne("Content.Server.Database.AdminRank", "AdminRank") + .WithMany("Admins") + .HasForeignKey("AdminRankId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_admin_rank_admin_rank_id"); + + b.Navigation("AdminRank"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminFlag", b => + { + b.HasOne("Content.Server.Database.Admin", "Admin") + .WithMany("Flags") + .HasForeignKey("AdminId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_flag_admin_admin_id"); + + b.Navigation("Admin"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLog", b => + { + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany("AdminLogs") + .HasForeignKey("RoundId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_log_round_round_id"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLogPlayer", b => + { + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminLogs") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_log_player_player_player_user_id"); + + b.HasOne("Content.Server.Database.AdminLog", "Log") + .WithMany("Players") + .HasForeignKey("RoundId", "LogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_log_player_admin_log_round_id_log_id"); + + b.Navigation("Log"); + + b.Navigation("Player"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminMessage", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminMessagesCreated") + .HasForeignKey("CreatedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_messages_player_created_by_id"); + + b.HasOne("Content.Server.Database.Player", "DeletedBy") + .WithMany("AdminMessagesDeleted") + .HasForeignKey("DeletedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_messages_player_deleted_by_id"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminMessagesLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_messages_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminMessagesReceived") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_admin_messages_player_player_user_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_admin_messages_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("DeletedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Player"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminNote", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminNotesCreated") + .HasForeignKey("CreatedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_notes_player_created_by_id"); + + b.HasOne("Content.Server.Database.Player", "DeletedBy") + .WithMany("AdminNotesDeleted") + .HasForeignKey("DeletedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_notes_player_deleted_by_id"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminNotesLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_notes_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminNotesReceived") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_admin_notes_player_player_user_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_admin_notes_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("DeletedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Player"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRankFlag", b => + { + b.HasOne("Content.Server.Database.AdminRank", "Rank") + .WithMany("Flags") + .HasForeignKey("AdminRankId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_rank_flag_admin_rank_admin_rank_id"); + + b.Navigation("Rank"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminWatchlist", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminWatchlistsCreated") + .HasForeignKey("CreatedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_watchlists_player_created_by_id"); + + b.HasOne("Content.Server.Database.Player", "DeletedBy") + .WithMany("AdminWatchlistsDeleted") + .HasForeignKey("DeletedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_watchlists_player_deleted_by_id"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminWatchlistsLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_watchlists_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminWatchlistsReceived") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_admin_watchlists_player_player_user_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_admin_watchlists_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("DeletedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Player"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.Antag", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Antags") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_antag_profile_profile_id"); + + b.Navigation("Profile"); + }); + + modelBuilder.Entity("Content.Server.Database.ConnectionLog", b => + { + b.HasOne("Content.Server.Database.Server", "Server") + .WithMany("ConnectionLogs") + .HasForeignKey("ServerId") + .OnDelete(DeleteBehavior.SetNull) + .IsRequired() + .HasConstraintName("FK_connection_log_server_server_id"); + + b.Navigation("Server"); + }); + + modelBuilder.Entity("Content.Server.Database.Job", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Jobs") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_job_profile_profile_id"); + + b.Navigation("Profile"); + }); + + modelBuilder.Entity("Content.Server.Database.Loadout", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Loadouts") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_loadout_profile_profile_id"); + + b.Navigation("Profile"); + }); + + modelBuilder.Entity("Content.Server.Database.Profile", b => + { + b.HasOne("Content.Server.Database.Preference", "Preference") + .WithMany("Profiles") + .HasForeignKey("PreferenceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_profile_preference_preference_id"); + + b.Navigation("Preference"); + }); + + modelBuilder.Entity("Content.Server.Database.Round", b => + { + b.HasOne("Content.Server.Database.Server", "Server") + .WithMany("Rounds") + .HasForeignKey("ServerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_round_server_server_id"); + + b.Navigation("Server"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBan", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminServerBansCreated") + .HasForeignKey("BanningAdmin") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_ban_player_banning_admin"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminServerBansLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_ban_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_server_ban_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBanHit", b => + { + b.HasOne("Content.Server.Database.ServerBan", "Ban") + .WithMany("BanHits") + .HasForeignKey("BanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_ban_hit_server_ban_ban_id"); + + b.HasOne("Content.Server.Database.ConnectionLog", "Connection") + .WithMany("BanHits") + .HasForeignKey("ConnectionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_ban_hit_connection_log_connection_id"); + + b.Navigation("Ban"); + + b.Navigation("Connection"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleBan", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminServerRoleBansCreated") + .HasForeignKey("BanningAdmin") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_role_ban_player_banning_admin"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminServerRoleBansLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_role_ban_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_server_role_ban_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleUnban", b => + { + b.HasOne("Content.Server.Database.ServerRoleBan", "Ban") + .WithOne("Unban") + .HasForeignKey("Content.Server.Database.ServerRoleUnban", "BanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_role_unban_server_role_ban_ban_id"); + + b.Navigation("Ban"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerUnban", b => + { + b.HasOne("Content.Server.Database.ServerBan", "Ban") + .WithOne("Unban") + .HasForeignKey("Content.Server.Database.ServerUnban", "BanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_unban_server_ban_ban_id"); + + b.Navigation("Ban"); + }); + + modelBuilder.Entity("Content.Server.Database.Trait", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Traits") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_trait_profile_profile_id"); + + b.Navigation("Profile"); + }); + + modelBuilder.Entity("PlayerRound", b => + { + b.HasOne("Content.Server.Database.Player", null) + .WithMany() + .HasForeignKey("PlayersId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_player_round_player_players_id"); + + b.HasOne("Content.Server.Database.Round", null) + .WithMany() + .HasForeignKey("RoundsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_player_round_round_rounds_id"); + }); + + modelBuilder.Entity("Content.Server.Database.Admin", b => + { + b.Navigation("Flags"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLog", b => + { + b.Navigation("Players"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRank", b => + { + b.Navigation("Admins"); + + b.Navigation("Flags"); + }); + + modelBuilder.Entity("Content.Server.Database.ConnectionLog", b => + { + b.Navigation("BanHits"); + }); + + modelBuilder.Entity("Content.Server.Database.Player", b => + { + b.Navigation("AdminLogs"); + + b.Navigation("AdminMessagesCreated"); + + b.Navigation("AdminMessagesDeleted"); + + b.Navigation("AdminMessagesLastEdited"); + + b.Navigation("AdminMessagesReceived"); + + b.Navigation("AdminNotesCreated"); + + b.Navigation("AdminNotesDeleted"); + + b.Navigation("AdminNotesLastEdited"); + + b.Navigation("AdminNotesReceived"); + + b.Navigation("AdminServerBansCreated"); + + b.Navigation("AdminServerBansLastEdited"); + + b.Navigation("AdminServerRoleBansCreated"); + + b.Navigation("AdminServerRoleBansLastEdited"); + + b.Navigation("AdminWatchlistsCreated"); + + b.Navigation("AdminWatchlistsDeleted"); + + b.Navigation("AdminWatchlistsLastEdited"); + + b.Navigation("AdminWatchlistsReceived"); + }); + + modelBuilder.Entity("Content.Server.Database.Preference", b => + { + b.Navigation("Profiles"); + }); + + modelBuilder.Entity("Content.Server.Database.Profile", b => + { + b.Navigation("Antags"); + + b.Navigation("Jobs"); + + b.Navigation("Loadouts"); + + b.Navigation("Traits"); + }); + + modelBuilder.Entity("Content.Server.Database.Round", b => + { + b.Navigation("AdminLogs"); + }); + + modelBuilder.Entity("Content.Server.Database.Server", b => + { + b.Navigation("ConnectionLogs"); + + b.Navigation("Rounds"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBan", b => + { + b.Navigation("BanHits"); + + b.Navigation("Unban"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleBan", b => + { + b.Navigation("Unban"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Content.Server.Database/Migrations/Postgres/20241001054803_CustomSpecieName.cs b/Content.Server.Database/Migrations/Postgres/20241001054803_CustomSpecieName.cs new file mode 100644 index 00000000000..6c40d6240f4 --- /dev/null +++ b/Content.Server.Database/Migrations/Postgres/20241001054803_CustomSpecieName.cs @@ -0,0 +1,29 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Content.Server.Database.Migrations.Postgres +{ + /// + public partial class CustomSpecieName : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "custom_specie_name", + table: "profile", + type: "text", + nullable: false, + defaultValue: ""); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "custom_specie_name", + table: "profile"); + } + } +} \ No newline at end of file diff --git a/Content.Server.Database/Migrations/Postgres/20241018043329_RoleWhitelist.Designer.cs b/Content.Server.Database/Migrations/Postgres/20241018043329_RoleWhitelist.Designer.cs new file mode 100644 index 00000000000..159af4d192a --- /dev/null +++ b/Content.Server.Database/Migrations/Postgres/20241018043329_RoleWhitelist.Designer.cs @@ -0,0 +1,1896 @@ +// +using System; +using System.Net; +using System.Text.Json; +using Content.Server.Database; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; +using NpgsqlTypes; + +#nullable disable + +namespace Content.Server.Database.Migrations.Postgres +{ + [DbContext(typeof(PostgresServerDbContext))] + [Migration("20241018043329_RoleWhitelist")] + partial class RoleWhitelist + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.0") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Content.Server.Database.Admin", b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.Property("AdminRankId") + .HasColumnType("integer") + .HasColumnName("admin_rank_id"); + + b.Property("Title") + .HasColumnType("text") + .HasColumnName("title"); + + b.HasKey("UserId") + .HasName("PK_admin"); + + b.HasIndex("AdminRankId") + .HasDatabaseName("IX_admin_admin_rank_id"); + + b.ToTable("admin", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminFlag", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("admin_flag_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AdminId") + .HasColumnType("uuid") + .HasColumnName("admin_id"); + + b.Property("Flag") + .IsRequired() + .HasColumnType("text") + .HasColumnName("flag"); + + b.Property("Negative") + .HasColumnType("boolean") + .HasColumnName("negative"); + + b.HasKey("Id") + .HasName("PK_admin_flag"); + + b.HasIndex("AdminId") + .HasDatabaseName("IX_admin_flag_admin_id"); + + b.HasIndex("Flag", "AdminId") + .IsUnique(); + + b.ToTable("admin_flag", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLog", b => + { + b.Property("RoundId") + .HasColumnType("integer") + .HasColumnName("round_id"); + + b.Property("Id") + .HasColumnType("integer") + .HasColumnName("admin_log_id"); + + b.Property("Date") + .HasColumnType("timestamp with time zone") + .HasColumnName("date"); + + b.Property("Impact") + .HasColumnType("smallint") + .HasColumnName("impact"); + + b.Property("Json") + .IsRequired() + .HasColumnType("jsonb") + .HasColumnName("json"); + + b.Property("Message") + .IsRequired() + .HasColumnType("text") + .HasColumnName("message"); + + b.Property("Type") + .HasColumnType("integer") + .HasColumnName("type"); + + b.HasKey("RoundId", "Id") + .HasName("PK_admin_log"); + + b.HasIndex("Date"); + + b.HasIndex("Message") + .HasAnnotation("Npgsql:TsVectorConfig", "english"); + + NpgsqlIndexBuilderExtensions.HasMethod(b.HasIndex("Message"), "GIN"); + + b.HasIndex("Type") + .HasDatabaseName("IX_admin_log_type"); + + b.ToTable("admin_log", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLogPlayer", b => + { + b.Property("RoundId") + .HasColumnType("integer") + .HasColumnName("round_id"); + + b.Property("LogId") + .HasColumnType("integer") + .HasColumnName("log_id"); + + b.Property("PlayerUserId") + .HasColumnType("uuid") + .HasColumnName("player_user_id"); + + b.HasKey("RoundId", "LogId", "PlayerUserId") + .HasName("PK_admin_log_player"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_log_player_player_user_id"); + + b.ToTable("admin_log_player", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminMessage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("admin_messages_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("created_at"); + + b.Property("CreatedById") + .HasColumnType("uuid") + .HasColumnName("created_by_id"); + + b.Property("Deleted") + .HasColumnType("boolean") + .HasColumnName("deleted"); + + b.Property("DeletedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("deleted_at"); + + b.Property("DeletedById") + .HasColumnType("uuid") + .HasColumnName("deleted_by_id"); + + b.Property("Dismissed") + .HasColumnType("boolean") + .HasColumnName("dismissed"); + + b.Property("ExpirationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("expiration_time"); + + b.Property("LastEditedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("uuid") + .HasColumnName("last_edited_by_id"); + + b.Property("Message") + .IsRequired() + .HasMaxLength(4096) + .HasColumnType("character varying(4096)") + .HasColumnName("message"); + + b.Property("PlayerUserId") + .HasColumnType("uuid") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("interval") + .HasColumnName("playtime_at_note"); + + b.Property("RoundId") + .HasColumnType("integer") + .HasColumnName("round_id"); + + b.Property("Seen") + .HasColumnType("boolean") + .HasColumnName("seen"); + + b.HasKey("Id") + .HasName("PK_admin_messages"); + + b.HasIndex("CreatedById"); + + b.HasIndex("DeletedById"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_messages_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_admin_messages_round_id"); + + b.ToTable("admin_messages", null, t => + { + t.HasCheckConstraint("NotDismissedAndSeen", "NOT dismissed OR seen"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.AdminNote", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("admin_notes_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("created_at"); + + b.Property("CreatedById") + .HasColumnType("uuid") + .HasColumnName("created_by_id"); + + b.Property("Deleted") + .HasColumnType("boolean") + .HasColumnName("deleted"); + + b.Property("DeletedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("deleted_at"); + + b.Property("DeletedById") + .HasColumnType("uuid") + .HasColumnName("deleted_by_id"); + + b.Property("ExpirationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("expiration_time"); + + b.Property("LastEditedAt") + .IsRequired() + .HasColumnType("timestamp with time zone") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("uuid") + .HasColumnName("last_edited_by_id"); + + b.Property("Message") + .IsRequired() + .HasMaxLength(4096) + .HasColumnType("character varying(4096)") + .HasColumnName("message"); + + b.Property("PlayerUserId") + .HasColumnType("uuid") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("interval") + .HasColumnName("playtime_at_note"); + + b.Property("RoundId") + .HasColumnType("integer") + .HasColumnName("round_id"); + + b.Property("Secret") + .HasColumnType("boolean") + .HasColumnName("secret"); + + b.Property("Severity") + .HasColumnType("integer") + .HasColumnName("severity"); + + b.HasKey("Id") + .HasName("PK_admin_notes"); + + b.HasIndex("CreatedById"); + + b.HasIndex("DeletedById"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_notes_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_admin_notes_round_id"); + + b.ToTable("admin_notes", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRank", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("admin_rank_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name"); + + b.HasKey("Id") + .HasName("PK_admin_rank"); + + b.ToTable("admin_rank", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRankFlag", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("admin_rank_flag_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AdminRankId") + .HasColumnType("integer") + .HasColumnName("admin_rank_id"); + + b.Property("Flag") + .IsRequired() + .HasColumnType("text") + .HasColumnName("flag"); + + b.HasKey("Id") + .HasName("PK_admin_rank_flag"); + + b.HasIndex("AdminRankId"); + + b.HasIndex("Flag", "AdminRankId") + .IsUnique(); + + b.ToTable("admin_rank_flag", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminWatchlist", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("admin_watchlists_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("created_at"); + + b.Property("CreatedById") + .HasColumnType("uuid") + .HasColumnName("created_by_id"); + + b.Property("Deleted") + .HasColumnType("boolean") + .HasColumnName("deleted"); + + b.Property("DeletedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("deleted_at"); + + b.Property("DeletedById") + .HasColumnType("uuid") + .HasColumnName("deleted_by_id"); + + b.Property("ExpirationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("expiration_time"); + + b.Property("LastEditedAt") + .IsRequired() + .HasColumnType("timestamp with time zone") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("uuid") + .HasColumnName("last_edited_by_id"); + + b.Property("Message") + .IsRequired() + .HasMaxLength(4096) + .HasColumnType("character varying(4096)") + .HasColumnName("message"); + + b.Property("PlayerUserId") + .HasColumnType("uuid") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("interval") + .HasColumnName("playtime_at_note"); + + b.Property("RoundId") + .HasColumnType("integer") + .HasColumnName("round_id"); + + b.HasKey("Id") + .HasName("PK_admin_watchlists"); + + b.HasIndex("CreatedById"); + + b.HasIndex("DeletedById"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_watchlists_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_admin_watchlists_round_id"); + + b.ToTable("admin_watchlists", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Antag", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("antag_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AntagName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("antag_name"); + + b.Property("ProfileId") + .HasColumnType("integer") + .HasColumnName("profile_id"); + + b.HasKey("Id") + .HasName("PK_antag"); + + b.HasIndex("ProfileId", "AntagName") + .IsUnique(); + + b.ToTable("antag", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AssignedUserId", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("assigned_user_id_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.Property("UserName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("user_name"); + + b.HasKey("Id") + .HasName("PK_assigned_user_id"); + + b.HasIndex("UserId") + .IsUnique(); + + b.HasIndex("UserName") + .IsUnique(); + + b.ToTable("assigned_user_id", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.BanTemplate", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("ban_template_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AutoDelete") + .HasColumnType("boolean") + .HasColumnName("auto_delete"); + + b.Property("ExemptFlags") + .HasColumnType("integer") + .HasColumnName("exempt_flags"); + + b.Property("Hidden") + .HasColumnType("boolean") + .HasColumnName("hidden"); + + b.Property("Length") + .HasColumnType("interval") + .HasColumnName("length"); + + b.Property("Reason") + .IsRequired() + .HasColumnType("text") + .HasColumnName("reason"); + + b.Property("Severity") + .HasColumnType("integer") + .HasColumnName("severity"); + + b.Property("Title") + .IsRequired() + .HasColumnType("text") + .HasColumnName("title"); + + b.HasKey("Id") + .HasName("PK_ban_template"); + + b.ToTable("ban_template", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ConnectionLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("connection_log_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Address") + .IsRequired() + .HasColumnType("inet") + .HasColumnName("address"); + + b.Property("Denied") + .HasColumnType("smallint") + .HasColumnName("denied"); + + b.Property("HWId") + .HasColumnType("bytea") + .HasColumnName("hwid"); + + b.Property("ServerId") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("server_id"); + + b.Property("Time") + .HasColumnType("timestamp with time zone") + .HasColumnName("time"); + + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.Property("UserName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("user_name"); + + b.HasKey("Id") + .HasName("PK_connection_log"); + + b.HasIndex("ServerId") + .HasDatabaseName("IX_connection_log_server_id"); + + b.HasIndex("UserId"); + + b.ToTable("connection_log", null, t => + { + t.HasCheckConstraint("AddressNotIPv6MappedIPv4", "NOT inet '::ffff:0.0.0.0/96' >>= address"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.Job", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("job_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("JobName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("job_name"); + + b.Property("Priority") + .HasColumnType("integer") + .HasColumnName("priority"); + + b.Property("ProfileId") + .HasColumnType("integer") + .HasColumnName("profile_id"); + + b.HasKey("Id") + .HasName("PK_job"); + + b.HasIndex("ProfileId"); + + b.HasIndex("ProfileId", "JobName") + .IsUnique(); + + b.HasIndex(new[] { "ProfileId" }, "IX_job_one_high_priority") + .IsUnique() + .HasFilter("priority = 3"); + + b.ToTable("job", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Loadout", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("loadout_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("LoadoutName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("loadout_name"); + + b.Property("ProfileId") + .HasColumnType("integer") + .HasColumnName("profile_id"); + + b.HasKey("Id") + .HasName("PK_loadout"); + + b.HasIndex("ProfileId", "LoadoutName") + .IsUnique(); + + b.ToTable("loadout", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.PlayTime", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("play_time_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("PlayerId") + .HasColumnType("uuid") + .HasColumnName("player_id"); + + b.Property("TimeSpent") + .HasColumnType("interval") + .HasColumnName("time_spent"); + + b.Property("Tracker") + .IsRequired() + .HasColumnType("text") + .HasColumnName("tracker"); + + b.HasKey("Id") + .HasName("PK_play_time"); + + b.HasIndex("PlayerId", "Tracker") + .IsUnique(); + + b.ToTable("play_time", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Player", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("player_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("FirstSeenTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("first_seen_time"); + + b.Property("LastReadRules") + .HasColumnType("timestamp with time zone") + .HasColumnName("last_read_rules"); + + b.Property("LastSeenAddress") + .IsRequired() + .HasColumnType("inet") + .HasColumnName("last_seen_address"); + + b.Property("LastSeenHWId") + .HasColumnType("bytea") + .HasColumnName("last_seen_hwid"); + + b.Property("LastSeenTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("last_seen_time"); + + b.Property("LastSeenUserName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("last_seen_user_name"); + + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("PK_player"); + + b.HasAlternateKey("UserId") + .HasName("ak_player_user_id"); + + b.HasIndex("LastSeenUserName"); + + b.HasIndex("UserId") + .IsUnique(); + + b.ToTable("player", null, t => + { + t.HasCheckConstraint("LastSeenAddressNotIPv6MappedIPv4", "NOT inet '::ffff:0.0.0.0/96' >>= last_seen_address"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.Preference", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("preference_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AdminOOCColor") + .IsRequired() + .HasColumnType("text") + .HasColumnName("admin_ooc_color"); + + b.Property("SelectedCharacterSlot") + .HasColumnType("integer") + .HasColumnName("selected_character_slot"); + + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("PK_preference"); + + b.HasIndex("UserId") + .IsUnique(); + + b.ToTable("preference", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Profile", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("profile_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Age") + .HasColumnType("integer") + .HasColumnName("age"); + + b.Property("Backpack") + .IsRequired() + .HasColumnType("text") + .HasColumnName("backpack"); + + b.Property("CharacterName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("char_name"); + + b.Property("Clothing") + .IsRequired() + .HasColumnType("text") + .HasColumnName("clothing"); + + b.Property("CustomSpecieName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("custom_specie_name"); + + b.Property("EyeColor") + .IsRequired() + .HasColumnType("text") + .HasColumnName("eye_color"); + + b.Property("FacialHairColor") + .IsRequired() + .HasColumnType("text") + .HasColumnName("facial_hair_color"); + + b.Property("FacialHairName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("facial_hair_name"); + + b.Property("FlavorText") + .IsRequired() + .HasColumnType("text") + .HasColumnName("flavor_text"); + + b.Property("Gender") + .IsRequired() + .HasColumnType("text") + .HasColumnName("gender"); + + b.Property("HairColor") + .IsRequired() + .HasColumnType("text") + .HasColumnName("hair_color"); + + b.Property("HairName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("hair_name"); + + b.Property("Height") + .HasColumnType("real") + .HasColumnName("height"); + + b.Property("Markings") + .HasColumnType("jsonb") + .HasColumnName("markings"); + + b.Property("PreferenceId") + .HasColumnType("integer") + .HasColumnName("preference_id"); + + b.Property("PreferenceUnavailable") + .HasColumnType("integer") + .HasColumnName("pref_unavailable"); + + b.Property("Sex") + .IsRequired() + .HasColumnType("text") + .HasColumnName("sex"); + + b.Property("SkinColor") + .IsRequired() + .HasColumnType("text") + .HasColumnName("skin_color"); + + b.Property("Slot") + .HasColumnType("integer") + .HasColumnName("slot"); + + b.Property("SpawnPriority") + .HasColumnType("integer") + .HasColumnName("spawn_priority"); + + b.Property("Species") + .IsRequired() + .HasColumnType("text") + .HasColumnName("species"); + + b.Property("Width") + .HasColumnType("real") + .HasColumnName("width"); + + b.HasKey("Id") + .HasName("PK_profile"); + + b.HasIndex("PreferenceId") + .HasDatabaseName("IX_profile_preference_id"); + + b.HasIndex("Slot", "PreferenceId") + .IsUnique(); + + b.ToTable("profile", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.RoleWhitelist", b => + { + b.Property("PlayerUserId") + .HasColumnType("uuid") + .HasColumnName("player_user_id"); + + b.Property("RoleId") + .HasColumnType("text") + .HasColumnName("role_id"); + + b.HasKey("PlayerUserId", "RoleId") + .HasName("PK_role_whitelists"); + + b.ToTable("role_whitelists", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Round", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("round_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ServerId") + .HasColumnType("integer") + .HasColumnName("server_id"); + + b.Property("StartDate") + .HasColumnType("timestamp with time zone") + .HasColumnName("start_date"); + + b.HasKey("Id") + .HasName("PK_round"); + + b.HasIndex("ServerId") + .HasDatabaseName("IX_round_server_id"); + + b.HasIndex("StartDate"); + + b.ToTable("round", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Server", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("server_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name"); + + b.HasKey("Id") + .HasName("PK_server"); + + b.ToTable("server", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBan", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("server_ban_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Address") + .HasColumnType("inet") + .HasColumnName("address"); + + b.Property("AutoDelete") + .HasColumnType("boolean") + .HasColumnName("auto_delete"); + + b.Property("BanTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("ban_time"); + + b.Property("BanningAdmin") + .HasColumnType("uuid") + .HasColumnName("banning_admin"); + + b.Property("ExemptFlags") + .HasColumnType("integer") + .HasColumnName("exempt_flags"); + + b.Property("ExpirationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("expiration_time"); + + b.Property("HWId") + .HasColumnType("bytea") + .HasColumnName("hwid"); + + b.Property("Hidden") + .HasColumnType("boolean") + .HasColumnName("hidden"); + + b.Property("LastEditedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("uuid") + .HasColumnName("last_edited_by_id"); + + b.Property("PlayerUserId") + .HasColumnType("uuid") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("interval") + .HasColumnName("playtime_at_note"); + + b.Property("Reason") + .IsRequired() + .HasColumnType("text") + .HasColumnName("reason"); + + b.Property("RoundId") + .HasColumnType("integer") + .HasColumnName("round_id"); + + b.Property("Severity") + .HasColumnType("integer") + .HasColumnName("severity"); + + b.HasKey("Id") + .HasName("PK_server_ban"); + + b.HasIndex("Address"); + + b.HasIndex("BanningAdmin"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_server_ban_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_server_ban_round_id"); + + b.ToTable("server_ban", null, t => + { + t.HasCheckConstraint("AddressNotIPv6MappedIPv4", "NOT inet '::ffff:0.0.0.0/96' >>= address"); + + t.HasCheckConstraint("HaveEitherAddressOrUserIdOrHWId", "address IS NOT NULL OR player_user_id IS NOT NULL OR hwid IS NOT NULL"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBanExemption", b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.Property("Flags") + .HasColumnType("integer") + .HasColumnName("flags"); + + b.HasKey("UserId") + .HasName("PK_server_ban_exemption"); + + b.ToTable("server_ban_exemption", null, t => + { + t.HasCheckConstraint("FlagsNotZero", "flags != 0"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBanHit", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("server_ban_hit_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("BanId") + .HasColumnType("integer") + .HasColumnName("ban_id"); + + b.Property("ConnectionId") + .HasColumnType("integer") + .HasColumnName("connection_id"); + + b.HasKey("Id") + .HasName("PK_server_ban_hit"); + + b.HasIndex("BanId") + .HasDatabaseName("IX_server_ban_hit_ban_id"); + + b.HasIndex("ConnectionId") + .HasDatabaseName("IX_server_ban_hit_connection_id"); + + b.ToTable("server_ban_hit", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleBan", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("server_role_ban_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Address") + .HasColumnType("inet") + .HasColumnName("address"); + + b.Property("BanTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("ban_time"); + + b.Property("BanningAdmin") + .HasColumnType("uuid") + .HasColumnName("banning_admin"); + + b.Property("ExpirationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("expiration_time"); + + b.Property("HWId") + .HasColumnType("bytea") + .HasColumnName("hwid"); + + b.Property("Hidden") + .HasColumnType("boolean") + .HasColumnName("hidden"); + + b.Property("LastEditedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("uuid") + .HasColumnName("last_edited_by_id"); + + b.Property("PlayerUserId") + .HasColumnType("uuid") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("interval") + .HasColumnName("playtime_at_note"); + + b.Property("Reason") + .IsRequired() + .HasColumnType("text") + .HasColumnName("reason"); + + b.Property("RoleId") + .IsRequired() + .HasColumnType("text") + .HasColumnName("role_id"); + + b.Property("RoundId") + .HasColumnType("integer") + .HasColumnName("round_id"); + + b.Property("Severity") + .HasColumnType("integer") + .HasColumnName("severity"); + + b.HasKey("Id") + .HasName("PK_server_role_ban"); + + b.HasIndex("Address"); + + b.HasIndex("BanningAdmin"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_server_role_ban_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_server_role_ban_round_id"); + + b.ToTable("server_role_ban", null, t => + { + t.HasCheckConstraint("AddressNotIPv6MappedIPv4", "NOT inet '::ffff:0.0.0.0/96' >>= address"); + + t.HasCheckConstraint("HaveEitherAddressOrUserIdOrHWId", "address IS NOT NULL OR player_user_id IS NOT NULL OR hwid IS NOT NULL"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleUnban", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("role_unban_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("BanId") + .HasColumnType("integer") + .HasColumnName("ban_id"); + + b.Property("UnbanTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("unban_time"); + + b.Property("UnbanningAdmin") + .HasColumnType("uuid") + .HasColumnName("unbanning_admin"); + + b.HasKey("Id") + .HasName("PK_server_role_unban"); + + b.HasIndex("BanId") + .IsUnique(); + + b.ToTable("server_role_unban", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ServerUnban", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("unban_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("BanId") + .HasColumnType("integer") + .HasColumnName("ban_id"); + + b.Property("UnbanTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("unban_time"); + + b.Property("UnbanningAdmin") + .HasColumnType("uuid") + .HasColumnName("unbanning_admin"); + + b.HasKey("Id") + .HasName("PK_server_unban"); + + b.HasIndex("BanId") + .IsUnique(); + + b.ToTable("server_unban", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Trait", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("trait_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ProfileId") + .HasColumnType("integer") + .HasColumnName("profile_id"); + + b.Property("TraitName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("trait_name"); + + b.HasKey("Id") + .HasName("PK_trait"); + + b.HasIndex("ProfileId", "TraitName") + .IsUnique(); + + b.ToTable("trait", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.UploadedResourceLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("uploaded_resource_log_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Data") + .IsRequired() + .HasColumnType("bytea") + .HasColumnName("data"); + + b.Property("Date") + .HasColumnType("timestamp with time zone") + .HasColumnName("date"); + + b.Property("Path") + .IsRequired() + .HasColumnType("text") + .HasColumnName("path"); + + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("PK_uploaded_resource_log"); + + b.ToTable("uploaded_resource_log", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Whitelist", b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.HasKey("UserId") + .HasName("PK_whitelist"); + + b.ToTable("whitelist", (string)null); + }); + + modelBuilder.Entity("PlayerRound", b => + { + b.Property("PlayersId") + .HasColumnType("integer") + .HasColumnName("players_id"); + + b.Property("RoundsId") + .HasColumnType("integer") + .HasColumnName("rounds_id"); + + b.HasKey("PlayersId", "RoundsId") + .HasName("PK_player_round"); + + b.HasIndex("RoundsId") + .HasDatabaseName("IX_player_round_rounds_id"); + + b.ToTable("player_round", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Admin", b => + { + b.HasOne("Content.Server.Database.AdminRank", "AdminRank") + .WithMany("Admins") + .HasForeignKey("AdminRankId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_admin_rank_admin_rank_id"); + + b.Navigation("AdminRank"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminFlag", b => + { + b.HasOne("Content.Server.Database.Admin", "Admin") + .WithMany("Flags") + .HasForeignKey("AdminId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_flag_admin_admin_id"); + + b.Navigation("Admin"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLog", b => + { + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany("AdminLogs") + .HasForeignKey("RoundId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_log_round_round_id"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLogPlayer", b => + { + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminLogs") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_log_player_player_player_user_id"); + + b.HasOne("Content.Server.Database.AdminLog", "Log") + .WithMany("Players") + .HasForeignKey("RoundId", "LogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_log_player_admin_log_round_id_log_id"); + + b.Navigation("Log"); + + b.Navigation("Player"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminMessage", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminMessagesCreated") + .HasForeignKey("CreatedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_messages_player_created_by_id"); + + b.HasOne("Content.Server.Database.Player", "DeletedBy") + .WithMany("AdminMessagesDeleted") + .HasForeignKey("DeletedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_messages_player_deleted_by_id"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminMessagesLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_messages_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminMessagesReceived") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_admin_messages_player_player_user_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_admin_messages_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("DeletedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Player"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminNote", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminNotesCreated") + .HasForeignKey("CreatedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_notes_player_created_by_id"); + + b.HasOne("Content.Server.Database.Player", "DeletedBy") + .WithMany("AdminNotesDeleted") + .HasForeignKey("DeletedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_notes_player_deleted_by_id"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminNotesLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_notes_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminNotesReceived") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_admin_notes_player_player_user_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_admin_notes_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("DeletedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Player"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRankFlag", b => + { + b.HasOne("Content.Server.Database.AdminRank", "Rank") + .WithMany("Flags") + .HasForeignKey("AdminRankId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_rank_flag_admin_rank_admin_rank_id"); + + b.Navigation("Rank"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminWatchlist", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminWatchlistsCreated") + .HasForeignKey("CreatedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_watchlists_player_created_by_id"); + + b.HasOne("Content.Server.Database.Player", "DeletedBy") + .WithMany("AdminWatchlistsDeleted") + .HasForeignKey("DeletedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_watchlists_player_deleted_by_id"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminWatchlistsLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_watchlists_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminWatchlistsReceived") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_admin_watchlists_player_player_user_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_admin_watchlists_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("DeletedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Player"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.Antag", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Antags") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_antag_profile_profile_id"); + + b.Navigation("Profile"); + }); + + modelBuilder.Entity("Content.Server.Database.ConnectionLog", b => + { + b.HasOne("Content.Server.Database.Server", "Server") + .WithMany("ConnectionLogs") + .HasForeignKey("ServerId") + .OnDelete(DeleteBehavior.SetNull) + .IsRequired() + .HasConstraintName("FK_connection_log_server_server_id"); + + b.Navigation("Server"); + }); + + modelBuilder.Entity("Content.Server.Database.Job", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Jobs") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_job_profile_profile_id"); + + b.Navigation("Profile"); + }); + + modelBuilder.Entity("Content.Server.Database.Loadout", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Loadouts") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_loadout_profile_profile_id"); + + b.Navigation("Profile"); + }); + + modelBuilder.Entity("Content.Server.Database.Profile", b => + { + b.HasOne("Content.Server.Database.Preference", "Preference") + .WithMany("Profiles") + .HasForeignKey("PreferenceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_profile_preference_preference_id"); + + b.Navigation("Preference"); + }); + + modelBuilder.Entity("Content.Server.Database.RoleWhitelist", b => + { + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("JobWhitelists") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_role_whitelists_player_player_user_id"); + + b.Navigation("Player"); + }); + + modelBuilder.Entity("Content.Server.Database.Round", b => + { + b.HasOne("Content.Server.Database.Server", "Server") + .WithMany("Rounds") + .HasForeignKey("ServerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_round_server_server_id"); + + b.Navigation("Server"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBan", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminServerBansCreated") + .HasForeignKey("BanningAdmin") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_ban_player_banning_admin"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminServerBansLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_ban_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_server_ban_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBanHit", b => + { + b.HasOne("Content.Server.Database.ServerBan", "Ban") + .WithMany("BanHits") + .HasForeignKey("BanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_ban_hit_server_ban_ban_id"); + + b.HasOne("Content.Server.Database.ConnectionLog", "Connection") + .WithMany("BanHits") + .HasForeignKey("ConnectionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_ban_hit_connection_log_connection_id"); + + b.Navigation("Ban"); + + b.Navigation("Connection"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleBan", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminServerRoleBansCreated") + .HasForeignKey("BanningAdmin") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_role_ban_player_banning_admin"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminServerRoleBansLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_role_ban_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_server_role_ban_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleUnban", b => + { + b.HasOne("Content.Server.Database.ServerRoleBan", "Ban") + .WithOne("Unban") + .HasForeignKey("Content.Server.Database.ServerRoleUnban", "BanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_role_unban_server_role_ban_ban_id"); + + b.Navigation("Ban"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerUnban", b => + { + b.HasOne("Content.Server.Database.ServerBan", "Ban") + .WithOne("Unban") + .HasForeignKey("Content.Server.Database.ServerUnban", "BanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_unban_server_ban_ban_id"); + + b.Navigation("Ban"); + }); + + modelBuilder.Entity("Content.Server.Database.Trait", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Traits") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_trait_profile_profile_id"); + + b.Navigation("Profile"); + }); + + modelBuilder.Entity("PlayerRound", b => + { + b.HasOne("Content.Server.Database.Player", null) + .WithMany() + .HasForeignKey("PlayersId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_player_round_player_players_id"); + + b.HasOne("Content.Server.Database.Round", null) + .WithMany() + .HasForeignKey("RoundsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_player_round_round_rounds_id"); + }); + + modelBuilder.Entity("Content.Server.Database.Admin", b => + { + b.Navigation("Flags"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLog", b => + { + b.Navigation("Players"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRank", b => + { + b.Navigation("Admins"); + + b.Navigation("Flags"); + }); + + modelBuilder.Entity("Content.Server.Database.ConnectionLog", b => + { + b.Navigation("BanHits"); + }); + + modelBuilder.Entity("Content.Server.Database.Player", b => + { + b.Navigation("AdminLogs"); + + b.Navigation("AdminMessagesCreated"); + + b.Navigation("AdminMessagesDeleted"); + + b.Navigation("AdminMessagesLastEdited"); + + b.Navigation("AdminMessagesReceived"); + + b.Navigation("AdminNotesCreated"); + + b.Navigation("AdminNotesDeleted"); + + b.Navigation("AdminNotesLastEdited"); + + b.Navigation("AdminNotesReceived"); + + b.Navigation("AdminServerBansCreated"); + + b.Navigation("AdminServerBansLastEdited"); + + b.Navigation("AdminServerRoleBansCreated"); + + b.Navigation("AdminServerRoleBansLastEdited"); + + b.Navigation("AdminWatchlistsCreated"); + + b.Navigation("AdminWatchlistsDeleted"); + + b.Navigation("AdminWatchlistsLastEdited"); + + b.Navigation("AdminWatchlistsReceived"); + + b.Navigation("JobWhitelists"); + }); + + modelBuilder.Entity("Content.Server.Database.Preference", b => + { + b.Navigation("Profiles"); + }); + + modelBuilder.Entity("Content.Server.Database.Profile", b => + { + b.Navigation("Antags"); + + b.Navigation("Jobs"); + + b.Navigation("Loadouts"); + + b.Navigation("Traits"); + }); + + modelBuilder.Entity("Content.Server.Database.Round", b => + { + b.Navigation("AdminLogs"); + }); + + modelBuilder.Entity("Content.Server.Database.Server", b => + { + b.Navigation("ConnectionLogs"); + + b.Navigation("Rounds"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBan", b => + { + b.Navigation("BanHits"); + + b.Navigation("Unban"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleBan", b => + { + b.Navigation("Unban"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Content.Server.Database/Migrations/Postgres/20241018043329_RoleWhitelist.cs b/Content.Server.Database/Migrations/Postgres/20241018043329_RoleWhitelist.cs new file mode 100644 index 00000000000..13cd23a7fcf --- /dev/null +++ b/Content.Server.Database/Migrations/Postgres/20241018043329_RoleWhitelist.cs @@ -0,0 +1,40 @@ +#nullable disable + +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +namespace Content.Server.Database.Migrations.Postgres +{ + /// + public partial class RoleWhitelist : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "role_whitelists", + columns: table => new + { + player_user_id = table.Column(type: "uuid", nullable: false), + role_id = table.Column(type: "text", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_role_whitelists", x => new { x.player_user_id, x.role_id }); + table.ForeignKey( + name: "FK_role_whitelists_player_player_user_id", + column: x => x.player_user_id, + principalTable: "player", + principalColumn: "user_id", + onDelete: ReferentialAction.Cascade); + }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "role_whitelists"); + } + } +} diff --git a/Content.Server.Database/Migrations/Postgres/PostgresServerDbContextModelSnapshot.cs b/Content.Server.Database/Migrations/Postgres/PostgresServerDbContextModelSnapshot.cs index 441df105a9f..7611b307119 100644 --- a/Content.Server.Database/Migrations/Postgres/PostgresServerDbContextModelSnapshot.cs +++ b/Content.Server.Database/Migrations/Postgres/PostgresServerDbContextModelSnapshot.cs @@ -512,6 +512,51 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.ToTable("assigned_user_id", (string)null); }); + modelBuilder.Entity("Content.Server.Database.BanTemplate", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("ban_template_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AutoDelete") + .HasColumnType("boolean") + .HasColumnName("auto_delete"); + + b.Property("ExemptFlags") + .HasColumnType("integer") + .HasColumnName("exempt_flags"); + + b.Property("Hidden") + .HasColumnType("boolean") + .HasColumnName("hidden"); + + b.Property("Length") + .HasColumnType("interval") + .HasColumnName("length"); + + b.Property("Reason") + .IsRequired() + .HasColumnType("text") + .HasColumnName("reason"); + + b.Property("Severity") + .HasColumnType("integer") + .HasColumnName("severity"); + + b.Property("Title") + .IsRequired() + .HasColumnType("text") + .HasColumnName("title"); + + b.HasKey("Id") + .HasName("PK_ban_template"); + + b.ToTable("ban_template", (string)null); + }); + modelBuilder.Entity("Content.Server.Database.ConnectionLog", b => { b.Property("Id") @@ -809,6 +854,11 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("text") .HasColumnName("clothing"); + b.Property("CustomSpecieName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("custom_specie_name"); + b.Property("EyeColor") .IsRequired() .HasColumnType("text") @@ -844,16 +894,10 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("text") .HasColumnName("hair_name"); - // Parkstation-HeightSlider Start b.Property("Height") .HasColumnType("real") .HasColumnName("height"); - b.Property("Width") - .HasColumnType("real") - .HasColumnName("width"); - // Parkstation-HeightSlider End - b.Property("Markings") .HasColumnType("jsonb") .HasColumnName("markings"); @@ -889,6 +933,10 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("text") .HasColumnName("species"); + b.Property("Width") + .HasColumnType("real") + .HasColumnName("width"); + b.HasKey("Id") .HasName("PK_profile"); @@ -901,6 +949,22 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.ToTable("profile", (string)null); }); + modelBuilder.Entity("Content.Server.Database.RoleWhitelist", b => + { + b.Property("PlayerUserId") + .HasColumnType("uuid") + .HasColumnName("player_user_id"); + + b.Property("RoleId") + .HasColumnType("text") + .HasColumnName("role_id"); + + b.HasKey("PlayerUserId", "RoleId") + .HasName("PK_role_whitelists"); + + b.ToTable("role_whitelists", (string)null); + }); + modelBuilder.Entity("Content.Server.Database.Round", b => { b.Property("Id") @@ -1612,6 +1676,19 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Navigation("Preference"); }); + modelBuilder.Entity("Content.Server.Database.RoleWhitelist", b => + { + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("JobWhitelists") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_role_whitelists_player_player_user_id"); + + b.Navigation("Player"); + }); + modelBuilder.Entity("Content.Server.Database.Round", b => { b.HasOne("Content.Server.Database.Server", "Server") @@ -1811,6 +1888,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Navigation("AdminWatchlistsLastEdited"); b.Navigation("AdminWatchlistsReceived"); + + b.Navigation("JobWhitelists"); }); modelBuilder.Entity("Content.Server.Database.Preference", b => diff --git a/Content.Server.Database/Migrations/Sqlite/20240623005113_BanTemplate.Designer.cs b/Content.Server.Database/Migrations/Sqlite/20240623005113_BanTemplate.Designer.cs new file mode 100644 index 00000000000..0bf74f84a70 --- /dev/null +++ b/Content.Server.Database/Migrations/Sqlite/20240623005113_BanTemplate.Designer.cs @@ -0,0 +1,1774 @@ +// +using System; +using Content.Server.Database; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Content.Server.Database.Migrations.Sqlite +{ + [DbContext(typeof(SqliteServerDbContext))] + [Migration("20240623005113_BanTemplate")] + partial class BanTemplate + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "8.0.0"); + + modelBuilder.Entity("Content.Server.Database.Admin", b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.Property("AdminRankId") + .HasColumnType("INTEGER") + .HasColumnName("admin_rank_id"); + + b.Property("Title") + .HasColumnType("TEXT") + .HasColumnName("title"); + + b.HasKey("UserId") + .HasName("PK_admin"); + + b.HasIndex("AdminRankId") + .HasDatabaseName("IX_admin_admin_rank_id"); + + b.ToTable("admin", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminFlag", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("admin_flag_id"); + + b.Property("AdminId") + .HasColumnType("TEXT") + .HasColumnName("admin_id"); + + b.Property("Flag") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("flag"); + + b.Property("Negative") + .HasColumnType("INTEGER") + .HasColumnName("negative"); + + b.HasKey("Id") + .HasName("PK_admin_flag"); + + b.HasIndex("AdminId") + .HasDatabaseName("IX_admin_flag_admin_id"); + + b.HasIndex("Flag", "AdminId") + .IsUnique(); + + b.ToTable("admin_flag", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLog", b => + { + b.Property("RoundId") + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.Property("Id") + .HasColumnType("INTEGER") + .HasColumnName("admin_log_id"); + + b.Property("Date") + .HasColumnType("TEXT") + .HasColumnName("date"); + + b.Property("Impact") + .HasColumnType("INTEGER") + .HasColumnName("impact"); + + b.Property("Json") + .IsRequired() + .HasColumnType("jsonb") + .HasColumnName("json"); + + b.Property("Message") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("message"); + + b.Property("Type") + .HasColumnType("INTEGER") + .HasColumnName("type"); + + b.HasKey("RoundId", "Id") + .HasName("PK_admin_log"); + + b.HasIndex("Date"); + + b.HasIndex("Type") + .HasDatabaseName("IX_admin_log_type"); + + b.ToTable("admin_log", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLogPlayer", b => + { + b.Property("RoundId") + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.Property("LogId") + .HasColumnType("INTEGER") + .HasColumnName("log_id"); + + b.Property("PlayerUserId") + .HasColumnType("TEXT") + .HasColumnName("player_user_id"); + + b.HasKey("RoundId", "LogId", "PlayerUserId") + .HasName("PK_admin_log_player"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_log_player_player_user_id"); + + b.ToTable("admin_log_player", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminMessage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("admin_messages_id"); + + b.Property("CreatedAt") + .HasColumnType("TEXT") + .HasColumnName("created_at"); + + b.Property("CreatedById") + .HasColumnType("TEXT") + .HasColumnName("created_by_id"); + + b.Property("Deleted") + .HasColumnType("INTEGER") + .HasColumnName("deleted"); + + b.Property("DeletedAt") + .HasColumnType("TEXT") + .HasColumnName("deleted_at"); + + b.Property("DeletedById") + .HasColumnType("TEXT") + .HasColumnName("deleted_by_id"); + + b.Property("ExpirationTime") + .HasColumnType("TEXT") + .HasColumnName("expiration_time"); + + b.Property("LastEditedAt") + .HasColumnType("TEXT") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("TEXT") + .HasColumnName("last_edited_by_id"); + + b.Property("Message") + .IsRequired() + .HasMaxLength(4096) + .HasColumnType("TEXT") + .HasColumnName("message"); + + b.Property("PlayerUserId") + .HasColumnType("TEXT") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("TEXT") + .HasColumnName("playtime_at_note"); + + b.Property("RoundId") + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.Property("Seen") + .HasColumnType("INTEGER") + .HasColumnName("seen"); + + b.HasKey("Id") + .HasName("PK_admin_messages"); + + b.HasIndex("CreatedById"); + + b.HasIndex("DeletedById"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_messages_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_admin_messages_round_id"); + + b.ToTable("admin_messages", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminNote", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("admin_notes_id"); + + b.Property("CreatedAt") + .HasColumnType("TEXT") + .HasColumnName("created_at"); + + b.Property("CreatedById") + .HasColumnType("TEXT") + .HasColumnName("created_by_id"); + + b.Property("Deleted") + .HasColumnType("INTEGER") + .HasColumnName("deleted"); + + b.Property("DeletedAt") + .HasColumnType("TEXT") + .HasColumnName("deleted_at"); + + b.Property("DeletedById") + .HasColumnType("TEXT") + .HasColumnName("deleted_by_id"); + + b.Property("ExpirationTime") + .HasColumnType("TEXT") + .HasColumnName("expiration_time"); + + b.Property("LastEditedAt") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("TEXT") + .HasColumnName("last_edited_by_id"); + + b.Property("Message") + .IsRequired() + .HasMaxLength(4096) + .HasColumnType("TEXT") + .HasColumnName("message"); + + b.Property("PlayerUserId") + .HasColumnType("TEXT") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("TEXT") + .HasColumnName("playtime_at_note"); + + b.Property("RoundId") + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.Property("Secret") + .HasColumnType("INTEGER") + .HasColumnName("secret"); + + b.Property("Severity") + .HasColumnType("INTEGER") + .HasColumnName("severity"); + + b.HasKey("Id") + .HasName("PK_admin_notes"); + + b.HasIndex("CreatedById"); + + b.HasIndex("DeletedById"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_notes_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_admin_notes_round_id"); + + b.ToTable("admin_notes", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRank", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("admin_rank_id"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("name"); + + b.HasKey("Id") + .HasName("PK_admin_rank"); + + b.ToTable("admin_rank", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRankFlag", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("admin_rank_flag_id"); + + b.Property("AdminRankId") + .HasColumnType("INTEGER") + .HasColumnName("admin_rank_id"); + + b.Property("Flag") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("flag"); + + b.HasKey("Id") + .HasName("PK_admin_rank_flag"); + + b.HasIndex("AdminRankId"); + + b.HasIndex("Flag", "AdminRankId") + .IsUnique(); + + b.ToTable("admin_rank_flag", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminWatchlist", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("admin_watchlists_id"); + + b.Property("CreatedAt") + .HasColumnType("TEXT") + .HasColumnName("created_at"); + + b.Property("CreatedById") + .HasColumnType("TEXT") + .HasColumnName("created_by_id"); + + b.Property("Deleted") + .HasColumnType("INTEGER") + .HasColumnName("deleted"); + + b.Property("DeletedAt") + .HasColumnType("TEXT") + .HasColumnName("deleted_at"); + + b.Property("DeletedById") + .HasColumnType("TEXT") + .HasColumnName("deleted_by_id"); + + b.Property("ExpirationTime") + .HasColumnType("TEXT") + .HasColumnName("expiration_time"); + + b.Property("LastEditedAt") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("TEXT") + .HasColumnName("last_edited_by_id"); + + b.Property("Message") + .IsRequired() + .HasMaxLength(4096) + .HasColumnType("TEXT") + .HasColumnName("message"); + + b.Property("PlayerUserId") + .HasColumnType("TEXT") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("TEXT") + .HasColumnName("playtime_at_note"); + + b.Property("RoundId") + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.HasKey("Id") + .HasName("PK_admin_watchlists"); + + b.HasIndex("CreatedById"); + + b.HasIndex("DeletedById"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_watchlists_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_admin_watchlists_round_id"); + + b.ToTable("admin_watchlists", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Antag", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("antag_id"); + + b.Property("AntagName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("antag_name"); + + b.Property("ProfileId") + .HasColumnType("INTEGER") + .HasColumnName("profile_id"); + + b.HasKey("Id") + .HasName("PK_antag"); + + b.HasIndex("ProfileId", "AntagName") + .IsUnique(); + + b.ToTable("antag", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AssignedUserId", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("assigned_user_id_id"); + + b.Property("UserId") + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.Property("UserName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("user_name"); + + b.HasKey("Id") + .HasName("PK_assigned_user_id"); + + b.HasIndex("UserId") + .IsUnique(); + + b.HasIndex("UserName") + .IsUnique(); + + b.ToTable("assigned_user_id", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.BanTemplate", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("ban_template_id"); + + b.Property("AutoDelete") + .HasColumnType("INTEGER") + .HasColumnName("auto_delete"); + + b.Property("ExemptFlags") + .HasColumnType("INTEGER") + .HasColumnName("exempt_flags"); + + b.Property("Hidden") + .HasColumnType("INTEGER") + .HasColumnName("hidden"); + + b.Property("Length") + .HasColumnType("TEXT") + .HasColumnName("length"); + + b.Property("Reason") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("reason"); + + b.Property("Severity") + .HasColumnType("INTEGER") + .HasColumnName("severity"); + + b.Property("Title") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("title"); + + b.HasKey("Id") + .HasName("PK_ban_template"); + + b.ToTable("ban_template", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ConnectionLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("connection_log_id"); + + b.Property("Address") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("address"); + + b.Property("Denied") + .HasColumnType("INTEGER") + .HasColumnName("denied"); + + b.Property("HWId") + .HasColumnType("BLOB") + .HasColumnName("hwid"); + + b.Property("ServerId") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasDefaultValue(0) + .HasColumnName("server_id"); + + b.Property("Time") + .HasColumnType("TEXT") + .HasColumnName("time"); + + b.Property("UserId") + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.Property("UserName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("user_name"); + + b.HasKey("Id") + .HasName("PK_connection_log"); + + b.HasIndex("ServerId") + .HasDatabaseName("IX_connection_log_server_id"); + + b.HasIndex("UserId"); + + b.ToTable("connection_log", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Job", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("job_id"); + + b.Property("JobName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("job_name"); + + b.Property("Priority") + .HasColumnType("INTEGER") + .HasColumnName("priority"); + + b.Property("ProfileId") + .HasColumnType("INTEGER") + .HasColumnName("profile_id"); + + b.HasKey("Id") + .HasName("PK_job"); + + b.HasIndex("ProfileId"); + + b.HasIndex("ProfileId", "JobName") + .IsUnique(); + + b.HasIndex(new[] { "ProfileId" }, "IX_job_one_high_priority") + .IsUnique() + .HasFilter("priority = 3"); + + b.ToTable("job", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Loadout", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("loadout_id"); + + b.Property("LoadoutName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("loadout_name"); + + b.Property("ProfileId") + .HasColumnType("INTEGER") + .HasColumnName("profile_id"); + + b.HasKey("Id") + .HasName("PK_loadout"); + + b.HasIndex("ProfileId", "LoadoutName") + .IsUnique(); + + b.ToTable("loadout", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.PlayTime", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("play_time_id"); + + b.Property("PlayerId") + .HasColumnType("TEXT") + .HasColumnName("player_id"); + + b.Property("TimeSpent") + .HasColumnType("TEXT") + .HasColumnName("time_spent"); + + b.Property("Tracker") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("tracker"); + + b.HasKey("Id") + .HasName("PK_play_time"); + + b.HasIndex("PlayerId", "Tracker") + .IsUnique(); + + b.ToTable("play_time", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Player", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("player_id"); + + b.Property("FirstSeenTime") + .HasColumnType("TEXT") + .HasColumnName("first_seen_time"); + + b.Property("LastReadRules") + .HasColumnType("TEXT") + .HasColumnName("last_read_rules"); + + b.Property("LastSeenAddress") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("last_seen_address"); + + b.Property("LastSeenHWId") + .HasColumnType("BLOB") + .HasColumnName("last_seen_hwid"); + + b.Property("LastSeenTime") + .HasColumnType("TEXT") + .HasColumnName("last_seen_time"); + + b.Property("LastSeenUserName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("last_seen_user_name"); + + b.Property("UserId") + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("PK_player"); + + b.HasAlternateKey("UserId") + .HasName("ak_player_user_id"); + + b.HasIndex("LastSeenUserName"); + + b.HasIndex("UserId") + .IsUnique(); + + b.ToTable("player", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Preference", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("preference_id"); + + b.Property("AdminOOCColor") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("admin_ooc_color"); + + b.Property("SelectedCharacterSlot") + .HasColumnType("INTEGER") + .HasColumnName("selected_character_slot"); + + b.Property("UserId") + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("PK_preference"); + + b.HasIndex("UserId") + .IsUnique(); + + b.ToTable("preference", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Profile", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("profile_id"); + + b.Property("Age") + .HasColumnType("INTEGER") + .HasColumnName("age"); + + b.Property("Backpack") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("backpack"); + + b.Property("CharacterName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("char_name"); + + b.Property("Clothing") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("clothing"); + + b.Property("EyeColor") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("eye_color"); + + b.Property("FacialHairColor") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("facial_hair_color"); + + b.Property("FacialHairName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("facial_hair_name"); + + b.Property("FlavorText") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("flavor_text"); + + b.Property("Gender") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("gender"); + + b.Property("HairColor") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("hair_color"); + + b.Property("HairName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("hair_name"); + + b.Property("Markings") + .HasColumnType("jsonb") + .HasColumnName("markings"); + + b.Property("PreferenceId") + .HasColumnType("INTEGER") + .HasColumnName("preference_id"); + + b.Property("PreferenceUnavailable") + .HasColumnType("INTEGER") + .HasColumnName("pref_unavailable"); + + b.Property("Sex") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("sex"); + + b.Property("SkinColor") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("skin_color"); + + b.Property("Slot") + .HasColumnType("INTEGER") + .HasColumnName("slot"); + + b.Property("SpawnPriority") + .HasColumnType("INTEGER") + .HasColumnName("spawn_priority"); + + b.Property("Species") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("species"); + + b.HasKey("Id") + .HasName("PK_profile"); + + b.HasIndex("PreferenceId") + .HasDatabaseName("IX_profile_preference_id"); + + b.HasIndex("Slot", "PreferenceId") + .IsUnique(); + + b.ToTable("profile", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Round", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.Property("ServerId") + .HasColumnType("INTEGER") + .HasColumnName("server_id"); + + b.Property("StartDate") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT") + .HasDefaultValue(new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified)) + .HasColumnName("start_date"); + + b.HasKey("Id") + .HasName("PK_round"); + + b.HasIndex("ServerId") + .HasDatabaseName("IX_round_server_id"); + + b.HasIndex("StartDate"); + + b.ToTable("round", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Server", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("server_id"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("name"); + + b.HasKey("Id") + .HasName("PK_server"); + + b.ToTable("server", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBan", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("server_ban_id"); + + b.Property("Address") + .HasColumnType("TEXT") + .HasColumnName("address"); + + b.Property("AutoDelete") + .HasColumnType("INTEGER") + .HasColumnName("auto_delete"); + + b.Property("BanTime") + .HasColumnType("TEXT") + .HasColumnName("ban_time"); + + b.Property("BanningAdmin") + .HasColumnType("TEXT") + .HasColumnName("banning_admin"); + + b.Property("ExemptFlags") + .HasColumnType("INTEGER") + .HasColumnName("exempt_flags"); + + b.Property("ExpirationTime") + .HasColumnType("TEXT") + .HasColumnName("expiration_time"); + + b.Property("HWId") + .HasColumnType("BLOB") + .HasColumnName("hwid"); + + b.Property("Hidden") + .HasColumnType("INTEGER") + .HasColumnName("hidden"); + + b.Property("LastEditedAt") + .HasColumnType("TEXT") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("TEXT") + .HasColumnName("last_edited_by_id"); + + b.Property("PlayerUserId") + .HasColumnType("TEXT") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("TEXT") + .HasColumnName("playtime_at_note"); + + b.Property("Reason") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("reason"); + + b.Property("RoundId") + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.Property("Severity") + .HasColumnType("INTEGER") + .HasColumnName("severity"); + + b.HasKey("Id") + .HasName("PK_server_ban"); + + b.HasIndex("Address"); + + b.HasIndex("BanningAdmin"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_server_ban_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_server_ban_round_id"); + + b.ToTable("server_ban", null, t => + { + t.HasCheckConstraint("HaveEitherAddressOrUserIdOrHWId", "address IS NOT NULL OR player_user_id IS NOT NULL OR hwid IS NOT NULL"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBanExemption", b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.Property("Flags") + .HasColumnType("INTEGER") + .HasColumnName("flags"); + + b.HasKey("UserId") + .HasName("PK_server_ban_exemption"); + + b.ToTable("server_ban_exemption", null, t => + { + t.HasCheckConstraint("FlagsNotZero", "flags != 0"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBanHit", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("server_ban_hit_id"); + + b.Property("BanId") + .HasColumnType("INTEGER") + .HasColumnName("ban_id"); + + b.Property("ConnectionId") + .HasColumnType("INTEGER") + .HasColumnName("connection_id"); + + b.HasKey("Id") + .HasName("PK_server_ban_hit"); + + b.HasIndex("BanId") + .HasDatabaseName("IX_server_ban_hit_ban_id"); + + b.HasIndex("ConnectionId") + .HasDatabaseName("IX_server_ban_hit_connection_id"); + + b.ToTable("server_ban_hit", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleBan", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("server_role_ban_id"); + + b.Property("Address") + .HasColumnType("TEXT") + .HasColumnName("address"); + + b.Property("BanTime") + .HasColumnType("TEXT") + .HasColumnName("ban_time"); + + b.Property("BanningAdmin") + .HasColumnType("TEXT") + .HasColumnName("banning_admin"); + + b.Property("ExpirationTime") + .HasColumnType("TEXT") + .HasColumnName("expiration_time"); + + b.Property("HWId") + .HasColumnType("BLOB") + .HasColumnName("hwid"); + + b.Property("Hidden") + .HasColumnType("INTEGER") + .HasColumnName("hidden"); + + b.Property("LastEditedAt") + .HasColumnType("TEXT") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("TEXT") + .HasColumnName("last_edited_by_id"); + + b.Property("PlayerUserId") + .HasColumnType("TEXT") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("TEXT") + .HasColumnName("playtime_at_note"); + + b.Property("Reason") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("reason"); + + b.Property("RoleId") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("role_id"); + + b.Property("RoundId") + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.Property("Severity") + .HasColumnType("INTEGER") + .HasColumnName("severity"); + + b.HasKey("Id") + .HasName("PK_server_role_ban"); + + b.HasIndex("Address"); + + b.HasIndex("BanningAdmin"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_server_role_ban_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_server_role_ban_round_id"); + + b.ToTable("server_role_ban", null, t => + { + t.HasCheckConstraint("HaveEitherAddressOrUserIdOrHWId", "address IS NOT NULL OR player_user_id IS NOT NULL OR hwid IS NOT NULL"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleUnban", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("role_unban_id"); + + b.Property("BanId") + .HasColumnType("INTEGER") + .HasColumnName("ban_id"); + + b.Property("UnbanTime") + .HasColumnType("TEXT") + .HasColumnName("unban_time"); + + b.Property("UnbanningAdmin") + .HasColumnType("TEXT") + .HasColumnName("unbanning_admin"); + + b.HasKey("Id") + .HasName("PK_server_role_unban"); + + b.HasIndex("BanId") + .IsUnique(); + + b.ToTable("server_role_unban", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ServerUnban", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("unban_id"); + + b.Property("BanId") + .HasColumnType("INTEGER") + .HasColumnName("ban_id"); + + b.Property("UnbanTime") + .HasColumnType("TEXT") + .HasColumnName("unban_time"); + + b.Property("UnbanningAdmin") + .HasColumnType("TEXT") + .HasColumnName("unbanning_admin"); + + b.HasKey("Id") + .HasName("PK_server_unban"); + + b.HasIndex("BanId") + .IsUnique(); + + b.ToTable("server_unban", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Trait", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("trait_id"); + + b.Property("ProfileId") + .HasColumnType("INTEGER") + .HasColumnName("profile_id"); + + b.Property("TraitName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("trait_name"); + + b.HasKey("Id") + .HasName("PK_trait"); + + b.HasIndex("ProfileId", "TraitName") + .IsUnique(); + + b.ToTable("trait", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.UploadedResourceLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("uploaded_resource_log_id"); + + b.Property("Data") + .IsRequired() + .HasColumnType("BLOB") + .HasColumnName("data"); + + b.Property("Date") + .HasColumnType("TEXT") + .HasColumnName("date"); + + b.Property("Path") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("path"); + + b.Property("UserId") + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("PK_uploaded_resource_log"); + + b.ToTable("uploaded_resource_log", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Whitelist", b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.HasKey("UserId") + .HasName("PK_whitelist"); + + b.ToTable("whitelist", (string)null); + }); + + modelBuilder.Entity("PlayerRound", b => + { + b.Property("PlayersId") + .HasColumnType("INTEGER") + .HasColumnName("players_id"); + + b.Property("RoundsId") + .HasColumnType("INTEGER") + .HasColumnName("rounds_id"); + + b.HasKey("PlayersId", "RoundsId") + .HasName("PK_player_round"); + + b.HasIndex("RoundsId") + .HasDatabaseName("IX_player_round_rounds_id"); + + b.ToTable("player_round", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Admin", b => + { + b.HasOne("Content.Server.Database.AdminRank", "AdminRank") + .WithMany("Admins") + .HasForeignKey("AdminRankId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_admin_rank_admin_rank_id"); + + b.Navigation("AdminRank"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminFlag", b => + { + b.HasOne("Content.Server.Database.Admin", "Admin") + .WithMany("Flags") + .HasForeignKey("AdminId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_flag_admin_admin_id"); + + b.Navigation("Admin"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLog", b => + { + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany("AdminLogs") + .HasForeignKey("RoundId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_log_round_round_id"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLogPlayer", b => + { + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminLogs") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_log_player_player_player_user_id"); + + b.HasOne("Content.Server.Database.AdminLog", "Log") + .WithMany("Players") + .HasForeignKey("RoundId", "LogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_log_player_admin_log_round_id_log_id"); + + b.Navigation("Log"); + + b.Navigation("Player"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminMessage", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminMessagesCreated") + .HasForeignKey("CreatedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_messages_player_created_by_id"); + + b.HasOne("Content.Server.Database.Player", "DeletedBy") + .WithMany("AdminMessagesDeleted") + .HasForeignKey("DeletedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_messages_player_deleted_by_id"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminMessagesLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_messages_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminMessagesReceived") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_admin_messages_player_player_user_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_admin_messages_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("DeletedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Player"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminNote", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminNotesCreated") + .HasForeignKey("CreatedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_notes_player_created_by_id"); + + b.HasOne("Content.Server.Database.Player", "DeletedBy") + .WithMany("AdminNotesDeleted") + .HasForeignKey("DeletedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_notes_player_deleted_by_id"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminNotesLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_notes_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminNotesReceived") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_admin_notes_player_player_user_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_admin_notes_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("DeletedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Player"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRankFlag", b => + { + b.HasOne("Content.Server.Database.AdminRank", "Rank") + .WithMany("Flags") + .HasForeignKey("AdminRankId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_rank_flag_admin_rank_admin_rank_id"); + + b.Navigation("Rank"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminWatchlist", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminWatchlistsCreated") + .HasForeignKey("CreatedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_watchlists_player_created_by_id"); + + b.HasOne("Content.Server.Database.Player", "DeletedBy") + .WithMany("AdminWatchlistsDeleted") + .HasForeignKey("DeletedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_watchlists_player_deleted_by_id"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminWatchlistsLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_watchlists_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminWatchlistsReceived") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_admin_watchlists_player_player_user_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_admin_watchlists_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("DeletedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Player"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.Antag", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Antags") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_antag_profile_profile_id"); + + b.Navigation("Profile"); + }); + + modelBuilder.Entity("Content.Server.Database.ConnectionLog", b => + { + b.HasOne("Content.Server.Database.Server", "Server") + .WithMany("ConnectionLogs") + .HasForeignKey("ServerId") + .OnDelete(DeleteBehavior.SetNull) + .IsRequired() + .HasConstraintName("FK_connection_log_server_server_id"); + + b.Navigation("Server"); + }); + + modelBuilder.Entity("Content.Server.Database.Job", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Jobs") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_job_profile_profile_id"); + + b.Navigation("Profile"); + }); + + modelBuilder.Entity("Content.Server.Database.Loadout", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Loadouts") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_loadout_profile_profile_id"); + + b.Navigation("Profile"); + }); + + modelBuilder.Entity("Content.Server.Database.Profile", b => + { + b.HasOne("Content.Server.Database.Preference", "Preference") + .WithMany("Profiles") + .HasForeignKey("PreferenceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_profile_preference_preference_id"); + + b.Navigation("Preference"); + }); + + modelBuilder.Entity("Content.Server.Database.Round", b => + { + b.HasOne("Content.Server.Database.Server", "Server") + .WithMany("Rounds") + .HasForeignKey("ServerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_round_server_server_id"); + + b.Navigation("Server"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBan", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminServerBansCreated") + .HasForeignKey("BanningAdmin") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_ban_player_banning_admin"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminServerBansLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_ban_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_server_ban_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBanHit", b => + { + b.HasOne("Content.Server.Database.ServerBan", "Ban") + .WithMany("BanHits") + .HasForeignKey("BanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_ban_hit_server_ban_ban_id"); + + b.HasOne("Content.Server.Database.ConnectionLog", "Connection") + .WithMany("BanHits") + .HasForeignKey("ConnectionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_ban_hit_connection_log_connection_id"); + + b.Navigation("Ban"); + + b.Navigation("Connection"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleBan", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminServerRoleBansCreated") + .HasForeignKey("BanningAdmin") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_role_ban_player_banning_admin"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminServerRoleBansLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_role_ban_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_server_role_ban_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleUnban", b => + { + b.HasOne("Content.Server.Database.ServerRoleBan", "Ban") + .WithOne("Unban") + .HasForeignKey("Content.Server.Database.ServerRoleUnban", "BanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_role_unban_server_role_ban_ban_id"); + + b.Navigation("Ban"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerUnban", b => + { + b.HasOne("Content.Server.Database.ServerBan", "Ban") + .WithOne("Unban") + .HasForeignKey("Content.Server.Database.ServerUnban", "BanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_unban_server_ban_ban_id"); + + b.Navigation("Ban"); + }); + + modelBuilder.Entity("Content.Server.Database.Trait", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Traits") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_trait_profile_profile_id"); + + b.Navigation("Profile"); + }); + + modelBuilder.Entity("PlayerRound", b => + { + b.HasOne("Content.Server.Database.Player", null) + .WithMany() + .HasForeignKey("PlayersId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_player_round_player_players_id"); + + b.HasOne("Content.Server.Database.Round", null) + .WithMany() + .HasForeignKey("RoundsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_player_round_round_rounds_id"); + }); + + modelBuilder.Entity("Content.Server.Database.Admin", b => + { + b.Navigation("Flags"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLog", b => + { + b.Navigation("Players"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRank", b => + { + b.Navigation("Admins"); + + b.Navigation("Flags"); + }); + + modelBuilder.Entity("Content.Server.Database.ConnectionLog", b => + { + b.Navigation("BanHits"); + }); + + modelBuilder.Entity("Content.Server.Database.Player", b => + { + b.Navigation("AdminLogs"); + + b.Navigation("AdminMessagesCreated"); + + b.Navigation("AdminMessagesDeleted"); + + b.Navigation("AdminMessagesLastEdited"); + + b.Navigation("AdminMessagesReceived"); + + b.Navigation("AdminNotesCreated"); + + b.Navigation("AdminNotesDeleted"); + + b.Navigation("AdminNotesLastEdited"); + + b.Navigation("AdminNotesReceived"); + + b.Navigation("AdminServerBansCreated"); + + b.Navigation("AdminServerBansLastEdited"); + + b.Navigation("AdminServerRoleBansCreated"); + + b.Navigation("AdminServerRoleBansLastEdited"); + + b.Navigation("AdminWatchlistsCreated"); + + b.Navigation("AdminWatchlistsDeleted"); + + b.Navigation("AdminWatchlistsLastEdited"); + + b.Navigation("AdminWatchlistsReceived"); + }); + + modelBuilder.Entity("Content.Server.Database.Preference", b => + { + b.Navigation("Profiles"); + }); + + modelBuilder.Entity("Content.Server.Database.Profile", b => + { + b.Navigation("Antags"); + + b.Navigation("Jobs"); + + b.Navigation("Loadouts"); + + b.Navigation("Traits"); + }); + + modelBuilder.Entity("Content.Server.Database.Round", b => + { + b.Navigation("AdminLogs"); + }); + + modelBuilder.Entity("Content.Server.Database.Server", b => + { + b.Navigation("ConnectionLogs"); + + b.Navigation("Rounds"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBan", b => + { + b.Navigation("BanHits"); + + b.Navigation("Unban"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleBan", b => + { + b.Navigation("Unban"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Content.Server.Database/Migrations/Sqlite/20240623005113_BanTemplate.cs b/Content.Server.Database/Migrations/Sqlite/20240623005113_BanTemplate.cs new file mode 100644 index 00000000000..ffe5a475507 --- /dev/null +++ b/Content.Server.Database/Migrations/Sqlite/20240623005113_BanTemplate.cs @@ -0,0 +1,41 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Content.Server.Database.Migrations.Sqlite +{ + /// + public partial class BanTemplate : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "ban_template", + columns: table => new + { + ban_template_id = table.Column(type: "INTEGER", nullable: false) + .Annotation("Sqlite:Autoincrement", true), + title = table.Column(type: "TEXT", nullable: false), + length = table.Column(type: "TEXT", nullable: false), + reason = table.Column(type: "TEXT", nullable: false), + exempt_flags = table.Column(type: "INTEGER", nullable: false), + severity = table.Column(type: "INTEGER", nullable: false), + auto_delete = table.Column(type: "INTEGER", nullable: false), + hidden = table.Column(type: "INTEGER", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_ban_template", x => x.ban_template_id); + }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "ban_template"); + } + } +} diff --git a/Content.Server.Database/Migrations/Sqlite/20240926173707_1984 Backpack Prefs.Designer.cs b/Content.Server.Database/Migrations/Sqlite/20240926173707_1984 Backpack Prefs.Designer.cs new file mode 100644 index 00000000000..490cc07d361 --- /dev/null +++ b/Content.Server.Database/Migrations/Sqlite/20240926173707_1984 Backpack Prefs.Designer.cs @@ -0,0 +1,1744 @@ +// +using System; +using Content.Server.Database; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Content.Server.Database.Migrations.Sqlite +{ + [DbContext(typeof(SqliteServerDbContext))] + [Migration("20240926173707_1984 Backpack Prefs")] + partial class _1984BackpackPrefs + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "8.0.0"); + + modelBuilder.Entity("Content.Server.Database.Admin", b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.Property("AdminRankId") + .HasColumnType("INTEGER") + .HasColumnName("admin_rank_id"); + + b.Property("Title") + .HasColumnType("TEXT") + .HasColumnName("title"); + + b.HasKey("UserId") + .HasName("PK_admin"); + + b.HasIndex("AdminRankId") + .HasDatabaseName("IX_admin_admin_rank_id"); + + b.ToTable("admin", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminFlag", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("admin_flag_id"); + + b.Property("AdminId") + .HasColumnType("TEXT") + .HasColumnName("admin_id"); + + b.Property("Flag") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("flag"); + + b.Property("Negative") + .HasColumnType("INTEGER") + .HasColumnName("negative"); + + b.HasKey("Id") + .HasName("PK_admin_flag"); + + b.HasIndex("AdminId") + .HasDatabaseName("IX_admin_flag_admin_id"); + + b.HasIndex("Flag", "AdminId") + .IsUnique(); + + b.ToTable("admin_flag", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLog", b => + { + b.Property("RoundId") + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.Property("Id") + .HasColumnType("INTEGER") + .HasColumnName("admin_log_id"); + + b.Property("Date") + .HasColumnType("TEXT") + .HasColumnName("date"); + + b.Property("Impact") + .HasColumnType("INTEGER") + .HasColumnName("impact"); + + b.Property("Json") + .IsRequired() + .HasColumnType("jsonb") + .HasColumnName("json"); + + b.Property("Message") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("message"); + + b.Property("Type") + .HasColumnType("INTEGER") + .HasColumnName("type"); + + b.HasKey("RoundId", "Id") + .HasName("PK_admin_log"); + + b.HasIndex("Date"); + + b.HasIndex("Type") + .HasDatabaseName("IX_admin_log_type"); + + b.ToTable("admin_log", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLogPlayer", b => + { + b.Property("RoundId") + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.Property("LogId") + .HasColumnType("INTEGER") + .HasColumnName("log_id"); + + b.Property("PlayerUserId") + .HasColumnType("TEXT") + .HasColumnName("player_user_id"); + + b.HasKey("RoundId", "LogId", "PlayerUserId") + .HasName("PK_admin_log_player"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_log_player_player_user_id"); + + b.ToTable("admin_log_player", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminMessage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("admin_messages_id"); + + b.Property("CreatedAt") + .HasColumnType("TEXT") + .HasColumnName("created_at"); + + b.Property("CreatedById") + .HasColumnType("TEXT") + .HasColumnName("created_by_id"); + + b.Property("Deleted") + .HasColumnType("INTEGER") + .HasColumnName("deleted"); + + b.Property("DeletedAt") + .HasColumnType("TEXT") + .HasColumnName("deleted_at"); + + b.Property("DeletedById") + .HasColumnType("TEXT") + .HasColumnName("deleted_by_id"); + + b.Property("Dismissed") + .HasColumnType("INTEGER") + .HasColumnName("dismissed"); + + b.Property("ExpirationTime") + .HasColumnType("TEXT") + .HasColumnName("expiration_time"); + + b.Property("LastEditedAt") + .HasColumnType("TEXT") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("TEXT") + .HasColumnName("last_edited_by_id"); + + b.Property("Message") + .IsRequired() + .HasMaxLength(4096) + .HasColumnType("TEXT") + .HasColumnName("message"); + + b.Property("PlayerUserId") + .HasColumnType("TEXT") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("TEXT") + .HasColumnName("playtime_at_note"); + + b.Property("RoundId") + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.Property("Seen") + .HasColumnType("INTEGER") + .HasColumnName("seen"); + + b.HasKey("Id") + .HasName("PK_admin_messages"); + + b.HasIndex("CreatedById"); + + b.HasIndex("DeletedById"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_messages_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_admin_messages_round_id"); + + b.ToTable("admin_messages", null, t => + { + t.HasCheckConstraint("NotDismissedAndSeen", "NOT dismissed OR seen"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.AdminNote", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("admin_notes_id"); + + b.Property("CreatedAt") + .HasColumnType("TEXT") + .HasColumnName("created_at"); + + b.Property("CreatedById") + .HasColumnType("TEXT") + .HasColumnName("created_by_id"); + + b.Property("Deleted") + .HasColumnType("INTEGER") + .HasColumnName("deleted"); + + b.Property("DeletedAt") + .HasColumnType("TEXT") + .HasColumnName("deleted_at"); + + b.Property("DeletedById") + .HasColumnType("TEXT") + .HasColumnName("deleted_by_id"); + + b.Property("ExpirationTime") + .HasColumnType("TEXT") + .HasColumnName("expiration_time"); + + b.Property("LastEditedAt") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("TEXT") + .HasColumnName("last_edited_by_id"); + + b.Property("Message") + .IsRequired() + .HasMaxLength(4096) + .HasColumnType("TEXT") + .HasColumnName("message"); + + b.Property("PlayerUserId") + .HasColumnType("TEXT") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("TEXT") + .HasColumnName("playtime_at_note"); + + b.Property("RoundId") + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.Property("Secret") + .HasColumnType("INTEGER") + .HasColumnName("secret"); + + b.Property("Severity") + .HasColumnType("INTEGER") + .HasColumnName("severity"); + + b.HasKey("Id") + .HasName("PK_admin_notes"); + + b.HasIndex("CreatedById"); + + b.HasIndex("DeletedById"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_notes_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_admin_notes_round_id"); + + b.ToTable("admin_notes", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRank", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("admin_rank_id"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("name"); + + b.HasKey("Id") + .HasName("PK_admin_rank"); + + b.ToTable("admin_rank", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRankFlag", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("admin_rank_flag_id"); + + b.Property("AdminRankId") + .HasColumnType("INTEGER") + .HasColumnName("admin_rank_id"); + + b.Property("Flag") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("flag"); + + b.HasKey("Id") + .HasName("PK_admin_rank_flag"); + + b.HasIndex("AdminRankId"); + + b.HasIndex("Flag", "AdminRankId") + .IsUnique(); + + b.ToTable("admin_rank_flag", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminWatchlist", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("admin_watchlists_id"); + + b.Property("CreatedAt") + .HasColumnType("TEXT") + .HasColumnName("created_at"); + + b.Property("CreatedById") + .HasColumnType("TEXT") + .HasColumnName("created_by_id"); + + b.Property("Deleted") + .HasColumnType("INTEGER") + .HasColumnName("deleted"); + + b.Property("DeletedAt") + .HasColumnType("TEXT") + .HasColumnName("deleted_at"); + + b.Property("DeletedById") + .HasColumnType("TEXT") + .HasColumnName("deleted_by_id"); + + b.Property("ExpirationTime") + .HasColumnType("TEXT") + .HasColumnName("expiration_time"); + + b.Property("LastEditedAt") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("TEXT") + .HasColumnName("last_edited_by_id"); + + b.Property("Message") + .IsRequired() + .HasMaxLength(4096) + .HasColumnType("TEXT") + .HasColumnName("message"); + + b.Property("PlayerUserId") + .HasColumnType("TEXT") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("TEXT") + .HasColumnName("playtime_at_note"); + + b.Property("RoundId") + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.HasKey("Id") + .HasName("PK_admin_watchlists"); + + b.HasIndex("CreatedById"); + + b.HasIndex("DeletedById"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_watchlists_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_admin_watchlists_round_id"); + + b.ToTable("admin_watchlists", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Antag", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("antag_id"); + + b.Property("AntagName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("antag_name"); + + b.Property("ProfileId") + .HasColumnType("INTEGER") + .HasColumnName("profile_id"); + + b.HasKey("Id") + .HasName("PK_antag"); + + b.HasIndex("ProfileId", "AntagName") + .IsUnique(); + + b.ToTable("antag", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AssignedUserId", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("assigned_user_id_id"); + + b.Property("UserId") + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.Property("UserName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("user_name"); + + b.HasKey("Id") + .HasName("PK_assigned_user_id"); + + b.HasIndex("UserId") + .IsUnique(); + + b.HasIndex("UserName") + .IsUnique(); + + b.ToTable("assigned_user_id", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ConnectionLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("connection_log_id"); + + b.Property("Address") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("address"); + + b.Property("Denied") + .HasColumnType("INTEGER") + .HasColumnName("denied"); + + b.Property("HWId") + .HasColumnType("BLOB") + .HasColumnName("hwid"); + + b.Property("ServerId") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasDefaultValue(0) + .HasColumnName("server_id"); + + b.Property("Time") + .HasColumnType("TEXT") + .HasColumnName("time"); + + b.Property("UserId") + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.Property("UserName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("user_name"); + + b.HasKey("Id") + .HasName("PK_connection_log"); + + b.HasIndex("ServerId") + .HasDatabaseName("IX_connection_log_server_id"); + + b.HasIndex("UserId"); + + b.ToTable("connection_log", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Job", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("job_id"); + + b.Property("JobName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("job_name"); + + b.Property("Priority") + .HasColumnType("INTEGER") + .HasColumnName("priority"); + + b.Property("ProfileId") + .HasColumnType("INTEGER") + .HasColumnName("profile_id"); + + b.HasKey("Id") + .HasName("PK_job"); + + b.HasIndex("ProfileId"); + + b.HasIndex("ProfileId", "JobName") + .IsUnique(); + + b.HasIndex(new[] { "ProfileId" }, "IX_job_one_high_priority") + .IsUnique() + .HasFilter("priority = 3"); + + b.ToTable("job", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Loadout", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("loadout_id"); + + b.Property("LoadoutName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("loadout_name"); + + b.Property("ProfileId") + .HasColumnType("INTEGER") + .HasColumnName("profile_id"); + + b.HasKey("Id") + .HasName("PK_loadout"); + + b.HasIndex("ProfileId", "LoadoutName") + .IsUnique(); + + b.ToTable("loadout", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.PlayTime", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("play_time_id"); + + b.Property("PlayerId") + .HasColumnType("TEXT") + .HasColumnName("player_id"); + + b.Property("TimeSpent") + .HasColumnType("TEXT") + .HasColumnName("time_spent"); + + b.Property("Tracker") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("tracker"); + + b.HasKey("Id") + .HasName("PK_play_time"); + + b.HasIndex("PlayerId", "Tracker") + .IsUnique(); + + b.ToTable("play_time", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Player", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("player_id"); + + b.Property("FirstSeenTime") + .HasColumnType("TEXT") + .HasColumnName("first_seen_time"); + + b.Property("LastReadRules") + .HasColumnType("TEXT") + .HasColumnName("last_read_rules"); + + b.Property("LastSeenAddress") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("last_seen_address"); + + b.Property("LastSeenHWId") + .HasColumnType("BLOB") + .HasColumnName("last_seen_hwid"); + + b.Property("LastSeenTime") + .HasColumnType("TEXT") + .HasColumnName("last_seen_time"); + + b.Property("LastSeenUserName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("last_seen_user_name"); + + b.Property("UserId") + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("PK_player"); + + b.HasAlternateKey("UserId") + .HasName("ak_player_user_id"); + + b.HasIndex("LastSeenUserName"); + + b.HasIndex("UserId") + .IsUnique(); + + b.ToTable("player", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Preference", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("preference_id"); + + b.Property("AdminOOCColor") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("admin_ooc_color"); + + b.Property("SelectedCharacterSlot") + .HasColumnType("INTEGER") + .HasColumnName("selected_character_slot"); + + b.Property("UserId") + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("PK_preference"); + + b.HasIndex("UserId") + .IsUnique(); + + b.ToTable("preference", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Profile", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("profile_id"); + + b.Property("Age") + .HasColumnType("INTEGER") + .HasColumnName("age"); + + b.Property("Backpack") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("backpack"); + + b.Property("CharacterName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("char_name"); + + b.Property("Clothing") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("clothing"); + + b.Property("EyeColor") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("eye_color"); + + b.Property("FacialHairColor") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("facial_hair_color"); + + b.Property("FacialHairName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("facial_hair_name"); + + b.Property("FlavorText") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("flavor_text"); + + b.Property("Gender") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("gender"); + + b.Property("HairColor") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("hair_color"); + + b.Property("HairName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("hair_name"); + + b.Property("Height") + .HasColumnType("REAL") + .HasColumnName("height"); + + b.Property("Markings") + .HasColumnType("jsonb") + .HasColumnName("markings"); + + b.Property("PreferenceId") + .HasColumnType("INTEGER") + .HasColumnName("preference_id"); + + b.Property("PreferenceUnavailable") + .HasColumnType("INTEGER") + .HasColumnName("pref_unavailable"); + + b.Property("Sex") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("sex"); + + b.Property("SkinColor") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("skin_color"); + + b.Property("Slot") + .HasColumnType("INTEGER") + .HasColumnName("slot"); + + b.Property("SpawnPriority") + .HasColumnType("INTEGER") + .HasColumnName("spawn_priority"); + + b.Property("Species") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("species"); + + b.Property("Width") + .HasColumnType("REAL") + .HasColumnName("width"); + + b.HasKey("Id") + .HasName("PK_profile"); + + b.HasIndex("PreferenceId") + .HasDatabaseName("IX_profile_preference_id"); + + b.HasIndex("Slot", "PreferenceId") + .IsUnique(); + + b.ToTable("profile", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Round", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.Property("ServerId") + .HasColumnType("INTEGER") + .HasColumnName("server_id"); + + b.Property("StartDate") + .HasColumnType("TEXT") + .HasColumnName("start_date"); + + b.HasKey("Id") + .HasName("PK_round"); + + b.HasIndex("ServerId") + .HasDatabaseName("IX_round_server_id"); + + b.HasIndex("StartDate"); + + b.ToTable("round", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Server", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("server_id"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("name"); + + b.HasKey("Id") + .HasName("PK_server"); + + b.ToTable("server", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBan", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("server_ban_id"); + + b.Property("Address") + .HasColumnType("TEXT") + .HasColumnName("address"); + + b.Property("AutoDelete") + .HasColumnType("INTEGER") + .HasColumnName("auto_delete"); + + b.Property("BanTime") + .HasColumnType("TEXT") + .HasColumnName("ban_time"); + + b.Property("BanningAdmin") + .HasColumnType("TEXT") + .HasColumnName("banning_admin"); + + b.Property("ExemptFlags") + .HasColumnType("INTEGER") + .HasColumnName("exempt_flags"); + + b.Property("ExpirationTime") + .HasColumnType("TEXT") + .HasColumnName("expiration_time"); + + b.Property("HWId") + .HasColumnType("BLOB") + .HasColumnName("hwid"); + + b.Property("Hidden") + .HasColumnType("INTEGER") + .HasColumnName("hidden"); + + b.Property("LastEditedAt") + .HasColumnType("TEXT") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("TEXT") + .HasColumnName("last_edited_by_id"); + + b.Property("PlayerUserId") + .HasColumnType("TEXT") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("TEXT") + .HasColumnName("playtime_at_note"); + + b.Property("Reason") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("reason"); + + b.Property("RoundId") + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.Property("Severity") + .HasColumnType("INTEGER") + .HasColumnName("severity"); + + b.HasKey("Id") + .HasName("PK_server_ban"); + + b.HasIndex("Address"); + + b.HasIndex("BanningAdmin"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_server_ban_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_server_ban_round_id"); + + b.ToTable("server_ban", null, t => + { + t.HasCheckConstraint("HaveEitherAddressOrUserIdOrHWId", "address IS NOT NULL OR player_user_id IS NOT NULL OR hwid IS NOT NULL"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBanExemption", b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.Property("Flags") + .HasColumnType("INTEGER") + .HasColumnName("flags"); + + b.HasKey("UserId") + .HasName("PK_server_ban_exemption"); + + b.ToTable("server_ban_exemption", null, t => + { + t.HasCheckConstraint("FlagsNotZero", "flags != 0"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBanHit", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("server_ban_hit_id"); + + b.Property("BanId") + .HasColumnType("INTEGER") + .HasColumnName("ban_id"); + + b.Property("ConnectionId") + .HasColumnType("INTEGER") + .HasColumnName("connection_id"); + + b.HasKey("Id") + .HasName("PK_server_ban_hit"); + + b.HasIndex("BanId") + .HasDatabaseName("IX_server_ban_hit_ban_id"); + + b.HasIndex("ConnectionId") + .HasDatabaseName("IX_server_ban_hit_connection_id"); + + b.ToTable("server_ban_hit", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleBan", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("server_role_ban_id"); + + b.Property("Address") + .HasColumnType("TEXT") + .HasColumnName("address"); + + b.Property("BanTime") + .HasColumnType("TEXT") + .HasColumnName("ban_time"); + + b.Property("BanningAdmin") + .HasColumnType("TEXT") + .HasColumnName("banning_admin"); + + b.Property("ExpirationTime") + .HasColumnType("TEXT") + .HasColumnName("expiration_time"); + + b.Property("HWId") + .HasColumnType("BLOB") + .HasColumnName("hwid"); + + b.Property("Hidden") + .HasColumnType("INTEGER") + .HasColumnName("hidden"); + + b.Property("LastEditedAt") + .HasColumnType("TEXT") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("TEXT") + .HasColumnName("last_edited_by_id"); + + b.Property("PlayerUserId") + .HasColumnType("TEXT") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("TEXT") + .HasColumnName("playtime_at_note"); + + b.Property("Reason") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("reason"); + + b.Property("RoleId") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("role_id"); + + b.Property("RoundId") + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.Property("Severity") + .HasColumnType("INTEGER") + .HasColumnName("severity"); + + b.HasKey("Id") + .HasName("PK_server_role_ban"); + + b.HasIndex("Address"); + + b.HasIndex("BanningAdmin"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_server_role_ban_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_server_role_ban_round_id"); + + b.ToTable("server_role_ban", null, t => + { + t.HasCheckConstraint("HaveEitherAddressOrUserIdOrHWId", "address IS NOT NULL OR player_user_id IS NOT NULL OR hwid IS NOT NULL"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleUnban", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("role_unban_id"); + + b.Property("BanId") + .HasColumnType("INTEGER") + .HasColumnName("ban_id"); + + b.Property("UnbanTime") + .HasColumnType("TEXT") + .HasColumnName("unban_time"); + + b.Property("UnbanningAdmin") + .HasColumnType("TEXT") + .HasColumnName("unbanning_admin"); + + b.HasKey("Id") + .HasName("PK_server_role_unban"); + + b.HasIndex("BanId") + .IsUnique(); + + b.ToTable("server_role_unban", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ServerUnban", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("unban_id"); + + b.Property("BanId") + .HasColumnType("INTEGER") + .HasColumnName("ban_id"); + + b.Property("UnbanTime") + .HasColumnType("TEXT") + .HasColumnName("unban_time"); + + b.Property("UnbanningAdmin") + .HasColumnType("TEXT") + .HasColumnName("unbanning_admin"); + + b.HasKey("Id") + .HasName("PK_server_unban"); + + b.HasIndex("BanId") + .IsUnique(); + + b.ToTable("server_unban", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Trait", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("trait_id"); + + b.Property("ProfileId") + .HasColumnType("INTEGER") + .HasColumnName("profile_id"); + + b.Property("TraitName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("trait_name"); + + b.HasKey("Id") + .HasName("PK_trait"); + + b.HasIndex("ProfileId", "TraitName") + .IsUnique(); + + b.ToTable("trait", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.UploadedResourceLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("uploaded_resource_log_id"); + + b.Property("Data") + .IsRequired() + .HasColumnType("BLOB") + .HasColumnName("data"); + + b.Property("Date") + .HasColumnType("TEXT") + .HasColumnName("date"); + + b.Property("Path") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("path"); + + b.Property("UserId") + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("PK_uploaded_resource_log"); + + b.ToTable("uploaded_resource_log", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Whitelist", b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.HasKey("UserId") + .HasName("PK_whitelist"); + + b.ToTable("whitelist", (string)null); + }); + + modelBuilder.Entity("PlayerRound", b => + { + b.Property("PlayersId") + .HasColumnType("INTEGER") + .HasColumnName("players_id"); + + b.Property("RoundsId") + .HasColumnType("INTEGER") + .HasColumnName("rounds_id"); + + b.HasKey("PlayersId", "RoundsId") + .HasName("PK_player_round"); + + b.HasIndex("RoundsId") + .HasDatabaseName("IX_player_round_rounds_id"); + + b.ToTable("player_round", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Admin", b => + { + b.HasOne("Content.Server.Database.AdminRank", "AdminRank") + .WithMany("Admins") + .HasForeignKey("AdminRankId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_admin_rank_admin_rank_id"); + + b.Navigation("AdminRank"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminFlag", b => + { + b.HasOne("Content.Server.Database.Admin", "Admin") + .WithMany("Flags") + .HasForeignKey("AdminId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_flag_admin_admin_id"); + + b.Navigation("Admin"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLog", b => + { + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany("AdminLogs") + .HasForeignKey("RoundId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_log_round_round_id"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLogPlayer", b => + { + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminLogs") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_log_player_player_player_user_id"); + + b.HasOne("Content.Server.Database.AdminLog", "Log") + .WithMany("Players") + .HasForeignKey("RoundId", "LogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_log_player_admin_log_round_id_log_id"); + + b.Navigation("Log"); + + b.Navigation("Player"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminMessage", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminMessagesCreated") + .HasForeignKey("CreatedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_messages_player_created_by_id"); + + b.HasOne("Content.Server.Database.Player", "DeletedBy") + .WithMany("AdminMessagesDeleted") + .HasForeignKey("DeletedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_messages_player_deleted_by_id"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminMessagesLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_messages_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminMessagesReceived") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_admin_messages_player_player_user_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_admin_messages_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("DeletedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Player"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminNote", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminNotesCreated") + .HasForeignKey("CreatedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_notes_player_created_by_id"); + + b.HasOne("Content.Server.Database.Player", "DeletedBy") + .WithMany("AdminNotesDeleted") + .HasForeignKey("DeletedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_notes_player_deleted_by_id"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminNotesLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_notes_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminNotesReceived") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_admin_notes_player_player_user_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_admin_notes_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("DeletedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Player"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRankFlag", b => + { + b.HasOne("Content.Server.Database.AdminRank", "Rank") + .WithMany("Flags") + .HasForeignKey("AdminRankId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_rank_flag_admin_rank_admin_rank_id"); + + b.Navigation("Rank"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminWatchlist", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminWatchlistsCreated") + .HasForeignKey("CreatedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_watchlists_player_created_by_id"); + + b.HasOne("Content.Server.Database.Player", "DeletedBy") + .WithMany("AdminWatchlistsDeleted") + .HasForeignKey("DeletedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_watchlists_player_deleted_by_id"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminWatchlistsLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_watchlists_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminWatchlistsReceived") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_admin_watchlists_player_player_user_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_admin_watchlists_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("DeletedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Player"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.Antag", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Antags") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_antag_profile_profile_id"); + + b.Navigation("Profile"); + }); + + modelBuilder.Entity("Content.Server.Database.ConnectionLog", b => + { + b.HasOne("Content.Server.Database.Server", "Server") + .WithMany("ConnectionLogs") + .HasForeignKey("ServerId") + .OnDelete(DeleteBehavior.SetNull) + .IsRequired() + .HasConstraintName("FK_connection_log_server_server_id"); + + b.Navigation("Server"); + }); + + modelBuilder.Entity("Content.Server.Database.Job", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Jobs") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_job_profile_profile_id"); + + b.Navigation("Profile"); + }); + + modelBuilder.Entity("Content.Server.Database.Loadout", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Loadouts") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_loadout_profile_profile_id"); + + b.Navigation("Profile"); + }); + + modelBuilder.Entity("Content.Server.Database.Profile", b => + { + b.HasOne("Content.Server.Database.Preference", "Preference") + .WithMany("Profiles") + .HasForeignKey("PreferenceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_profile_preference_preference_id"); + + b.Navigation("Preference"); + }); + + modelBuilder.Entity("Content.Server.Database.Round", b => + { + b.HasOne("Content.Server.Database.Server", "Server") + .WithMany("Rounds") + .HasForeignKey("ServerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_round_server_server_id"); + + b.Navigation("Server"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBan", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminServerBansCreated") + .HasForeignKey("BanningAdmin") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_ban_player_banning_admin"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminServerBansLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_ban_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_server_ban_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBanHit", b => + { + b.HasOne("Content.Server.Database.ServerBan", "Ban") + .WithMany("BanHits") + .HasForeignKey("BanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_ban_hit_server_ban_ban_id"); + + b.HasOne("Content.Server.Database.ConnectionLog", "Connection") + .WithMany("BanHits") + .HasForeignKey("ConnectionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_ban_hit_connection_log_connection_id"); + + b.Navigation("Ban"); + + b.Navigation("Connection"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleBan", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminServerRoleBansCreated") + .HasForeignKey("BanningAdmin") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_role_ban_player_banning_admin"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminServerRoleBansLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_role_ban_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_server_role_ban_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleUnban", b => + { + b.HasOne("Content.Server.Database.ServerRoleBan", "Ban") + .WithOne("Unban") + .HasForeignKey("Content.Server.Database.ServerRoleUnban", "BanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_role_unban_server_role_ban_ban_id"); + + b.Navigation("Ban"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerUnban", b => + { + b.HasOne("Content.Server.Database.ServerBan", "Ban") + .WithOne("Unban") + .HasForeignKey("Content.Server.Database.ServerUnban", "BanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_unban_server_ban_ban_id"); + + b.Navigation("Ban"); + }); + + modelBuilder.Entity("Content.Server.Database.Trait", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Traits") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_trait_profile_profile_id"); + + b.Navigation("Profile"); + }); + + modelBuilder.Entity("PlayerRound", b => + { + b.HasOne("Content.Server.Database.Player", null) + .WithMany() + .HasForeignKey("PlayersId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_player_round_player_players_id"); + + b.HasOne("Content.Server.Database.Round", null) + .WithMany() + .HasForeignKey("RoundsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_player_round_round_rounds_id"); + }); + + modelBuilder.Entity("Content.Server.Database.Admin", b => + { + b.Navigation("Flags"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLog", b => + { + b.Navigation("Players"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRank", b => + { + b.Navigation("Admins"); + + b.Navigation("Flags"); + }); + + modelBuilder.Entity("Content.Server.Database.ConnectionLog", b => + { + b.Navigation("BanHits"); + }); + + modelBuilder.Entity("Content.Server.Database.Player", b => + { + b.Navigation("AdminLogs"); + + b.Navigation("AdminMessagesCreated"); + + b.Navigation("AdminMessagesDeleted"); + + b.Navigation("AdminMessagesLastEdited"); + + b.Navigation("AdminMessagesReceived"); + + b.Navigation("AdminNotesCreated"); + + b.Navigation("AdminNotesDeleted"); + + b.Navigation("AdminNotesLastEdited"); + + b.Navigation("AdminNotesReceived"); + + b.Navigation("AdminServerBansCreated"); + + b.Navigation("AdminServerBansLastEdited"); + + b.Navigation("AdminServerRoleBansCreated"); + + b.Navigation("AdminServerRoleBansLastEdited"); + + b.Navigation("AdminWatchlistsCreated"); + + b.Navigation("AdminWatchlistsDeleted"); + + b.Navigation("AdminWatchlistsLastEdited"); + + b.Navigation("AdminWatchlistsReceived"); + }); + + modelBuilder.Entity("Content.Server.Database.Preference", b => + { + b.Navigation("Profiles"); + }); + + modelBuilder.Entity("Content.Server.Database.Profile", b => + { + b.Navigation("Antags"); + + b.Navigation("Jobs"); + + b.Navigation("Loadouts"); + + b.Navigation("Traits"); + }); + + modelBuilder.Entity("Content.Server.Database.Round", b => + { + b.Navigation("AdminLogs"); + }); + + modelBuilder.Entity("Content.Server.Database.Server", b => + { + b.Navigation("ConnectionLogs"); + + b.Navigation("Rounds"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBan", b => + { + b.Navigation("BanHits"); + + b.Navigation("Unban"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleBan", b => + { + b.Navigation("Unban"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Content.Server.Database/Migrations/Sqlite/20240926173707_1984 Backpack Prefs.cs b/Content.Server.Database/Migrations/Sqlite/20240926173707_1984 Backpack Prefs.cs new file mode 100644 index 00000000000..19bc59a6e66 --- /dev/null +++ b/Content.Server.Database/Migrations/Sqlite/20240926173707_1984 Backpack Prefs.cs @@ -0,0 +1,22 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Content.Server.Database.Migrations.Sqlite +{ + /// + public partial class _1984BackpackPrefs : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/Content.Server.Database/Migrations/Sqlite/20241001054735_CustomSpecieName.Designer.cs b/Content.Server.Database/Migrations/Sqlite/20241001054735_CustomSpecieName.Designer.cs new file mode 100644 index 00000000000..c724031d560 --- /dev/null +++ b/Content.Server.Database/Migrations/Sqlite/20241001054735_CustomSpecieName.Designer.cs @@ -0,0 +1,1749 @@ +// +using System; +using Content.Server.Database; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Content.Server.Database.Migrations.Sqlite +{ + [DbContext(typeof(SqliteServerDbContext))] + [Migration("20241001054735_CustomSpecieName")] + partial class CustomSpecieName + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "8.0.0"); + + modelBuilder.Entity("Content.Server.Database.Admin", b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.Property("AdminRankId") + .HasColumnType("INTEGER") + .HasColumnName("admin_rank_id"); + + b.Property("Title") + .HasColumnType("TEXT") + .HasColumnName("title"); + + b.HasKey("UserId") + .HasName("PK_admin"); + + b.HasIndex("AdminRankId") + .HasDatabaseName("IX_admin_admin_rank_id"); + + b.ToTable("admin", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminFlag", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("admin_flag_id"); + + b.Property("AdminId") + .HasColumnType("TEXT") + .HasColumnName("admin_id"); + + b.Property("Flag") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("flag"); + + b.Property("Negative") + .HasColumnType("INTEGER") + .HasColumnName("negative"); + + b.HasKey("Id") + .HasName("PK_admin_flag"); + + b.HasIndex("AdminId") + .HasDatabaseName("IX_admin_flag_admin_id"); + + b.HasIndex("Flag", "AdminId") + .IsUnique(); + + b.ToTable("admin_flag", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLog", b => + { + b.Property("RoundId") + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.Property("Id") + .HasColumnType("INTEGER") + .HasColumnName("admin_log_id"); + + b.Property("Date") + .HasColumnType("TEXT") + .HasColumnName("date"); + + b.Property("Impact") + .HasColumnType("INTEGER") + .HasColumnName("impact"); + + b.Property("Json") + .IsRequired() + .HasColumnType("jsonb") + .HasColumnName("json"); + + b.Property("Message") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("message"); + + b.Property("Type") + .HasColumnType("INTEGER") + .HasColumnName("type"); + + b.HasKey("RoundId", "Id") + .HasName("PK_admin_log"); + + b.HasIndex("Date"); + + b.HasIndex("Type") + .HasDatabaseName("IX_admin_log_type"); + + b.ToTable("admin_log", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLogPlayer", b => + { + b.Property("RoundId") + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.Property("LogId") + .HasColumnType("INTEGER") + .HasColumnName("log_id"); + + b.Property("PlayerUserId") + .HasColumnType("TEXT") + .HasColumnName("player_user_id"); + + b.HasKey("RoundId", "LogId", "PlayerUserId") + .HasName("PK_admin_log_player"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_log_player_player_user_id"); + + b.ToTable("admin_log_player", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminMessage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("admin_messages_id"); + + b.Property("CreatedAt") + .HasColumnType("TEXT") + .HasColumnName("created_at"); + + b.Property("CreatedById") + .HasColumnType("TEXT") + .HasColumnName("created_by_id"); + + b.Property("Deleted") + .HasColumnType("INTEGER") + .HasColumnName("deleted"); + + b.Property("DeletedAt") + .HasColumnType("TEXT") + .HasColumnName("deleted_at"); + + b.Property("DeletedById") + .HasColumnType("TEXT") + .HasColumnName("deleted_by_id"); + + b.Property("Dismissed") + .HasColumnType("INTEGER") + .HasColumnName("dismissed"); + + b.Property("ExpirationTime") + .HasColumnType("TEXT") + .HasColumnName("expiration_time"); + + b.Property("LastEditedAt") + .HasColumnType("TEXT") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("TEXT") + .HasColumnName("last_edited_by_id"); + + b.Property("Message") + .IsRequired() + .HasMaxLength(4096) + .HasColumnType("TEXT") + .HasColumnName("message"); + + b.Property("PlayerUserId") + .HasColumnType("TEXT") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("TEXT") + .HasColumnName("playtime_at_note"); + + b.Property("RoundId") + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.Property("Seen") + .HasColumnType("INTEGER") + .HasColumnName("seen"); + + b.HasKey("Id") + .HasName("PK_admin_messages"); + + b.HasIndex("CreatedById"); + + b.HasIndex("DeletedById"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_messages_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_admin_messages_round_id"); + + b.ToTable("admin_messages", null, t => + { + t.HasCheckConstraint("NotDismissedAndSeen", "NOT dismissed OR seen"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.AdminNote", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("admin_notes_id"); + + b.Property("CreatedAt") + .HasColumnType("TEXT") + .HasColumnName("created_at"); + + b.Property("CreatedById") + .HasColumnType("TEXT") + .HasColumnName("created_by_id"); + + b.Property("Deleted") + .HasColumnType("INTEGER") + .HasColumnName("deleted"); + + b.Property("DeletedAt") + .HasColumnType("TEXT") + .HasColumnName("deleted_at"); + + b.Property("DeletedById") + .HasColumnType("TEXT") + .HasColumnName("deleted_by_id"); + + b.Property("ExpirationTime") + .HasColumnType("TEXT") + .HasColumnName("expiration_time"); + + b.Property("LastEditedAt") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("TEXT") + .HasColumnName("last_edited_by_id"); + + b.Property("Message") + .IsRequired() + .HasMaxLength(4096) + .HasColumnType("TEXT") + .HasColumnName("message"); + + b.Property("PlayerUserId") + .HasColumnType("TEXT") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("TEXT") + .HasColumnName("playtime_at_note"); + + b.Property("RoundId") + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.Property("Secret") + .HasColumnType("INTEGER") + .HasColumnName("secret"); + + b.Property("Severity") + .HasColumnType("INTEGER") + .HasColumnName("severity"); + + b.HasKey("Id") + .HasName("PK_admin_notes"); + + b.HasIndex("CreatedById"); + + b.HasIndex("DeletedById"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_notes_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_admin_notes_round_id"); + + b.ToTable("admin_notes", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRank", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("admin_rank_id"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("name"); + + b.HasKey("Id") + .HasName("PK_admin_rank"); + + b.ToTable("admin_rank", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRankFlag", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("admin_rank_flag_id"); + + b.Property("AdminRankId") + .HasColumnType("INTEGER") + .HasColumnName("admin_rank_id"); + + b.Property("Flag") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("flag"); + + b.HasKey("Id") + .HasName("PK_admin_rank_flag"); + + b.HasIndex("AdminRankId"); + + b.HasIndex("Flag", "AdminRankId") + .IsUnique(); + + b.ToTable("admin_rank_flag", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminWatchlist", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("admin_watchlists_id"); + + b.Property("CreatedAt") + .HasColumnType("TEXT") + .HasColumnName("created_at"); + + b.Property("CreatedById") + .HasColumnType("TEXT") + .HasColumnName("created_by_id"); + + b.Property("Deleted") + .HasColumnType("INTEGER") + .HasColumnName("deleted"); + + b.Property("DeletedAt") + .HasColumnType("TEXT") + .HasColumnName("deleted_at"); + + b.Property("DeletedById") + .HasColumnType("TEXT") + .HasColumnName("deleted_by_id"); + + b.Property("ExpirationTime") + .HasColumnType("TEXT") + .HasColumnName("expiration_time"); + + b.Property("LastEditedAt") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("TEXT") + .HasColumnName("last_edited_by_id"); + + b.Property("Message") + .IsRequired() + .HasMaxLength(4096) + .HasColumnType("TEXT") + .HasColumnName("message"); + + b.Property("PlayerUserId") + .HasColumnType("TEXT") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("TEXT") + .HasColumnName("playtime_at_note"); + + b.Property("RoundId") + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.HasKey("Id") + .HasName("PK_admin_watchlists"); + + b.HasIndex("CreatedById"); + + b.HasIndex("DeletedById"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_watchlists_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_admin_watchlists_round_id"); + + b.ToTable("admin_watchlists", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Antag", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("antag_id"); + + b.Property("AntagName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("antag_name"); + + b.Property("ProfileId") + .HasColumnType("INTEGER") + .HasColumnName("profile_id"); + + b.HasKey("Id") + .HasName("PK_antag"); + + b.HasIndex("ProfileId", "AntagName") + .IsUnique(); + + b.ToTable("antag", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AssignedUserId", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("assigned_user_id_id"); + + b.Property("UserId") + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.Property("UserName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("user_name"); + + b.HasKey("Id") + .HasName("PK_assigned_user_id"); + + b.HasIndex("UserId") + .IsUnique(); + + b.HasIndex("UserName") + .IsUnique(); + + b.ToTable("assigned_user_id", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ConnectionLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("connection_log_id"); + + b.Property("Address") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("address"); + + b.Property("Denied") + .HasColumnType("INTEGER") + .HasColumnName("denied"); + + b.Property("HWId") + .HasColumnType("BLOB") + .HasColumnName("hwid"); + + b.Property("ServerId") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasDefaultValue(0) + .HasColumnName("server_id"); + + b.Property("Time") + .HasColumnType("TEXT") + .HasColumnName("time"); + + b.Property("UserId") + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.Property("UserName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("user_name"); + + b.HasKey("Id") + .HasName("PK_connection_log"); + + b.HasIndex("ServerId") + .HasDatabaseName("IX_connection_log_server_id"); + + b.HasIndex("UserId"); + + b.ToTable("connection_log", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Job", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("job_id"); + + b.Property("JobName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("job_name"); + + b.Property("Priority") + .HasColumnType("INTEGER") + .HasColumnName("priority"); + + b.Property("ProfileId") + .HasColumnType("INTEGER") + .HasColumnName("profile_id"); + + b.HasKey("Id") + .HasName("PK_job"); + + b.HasIndex("ProfileId"); + + b.HasIndex("ProfileId", "JobName") + .IsUnique(); + + b.HasIndex(new[] { "ProfileId" }, "IX_job_one_high_priority") + .IsUnique() + .HasFilter("priority = 3"); + + b.ToTable("job", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Loadout", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("loadout_id"); + + b.Property("LoadoutName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("loadout_name"); + + b.Property("ProfileId") + .HasColumnType("INTEGER") + .HasColumnName("profile_id"); + + b.HasKey("Id") + .HasName("PK_loadout"); + + b.HasIndex("ProfileId", "LoadoutName") + .IsUnique(); + + b.ToTable("loadout", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.PlayTime", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("play_time_id"); + + b.Property("PlayerId") + .HasColumnType("TEXT") + .HasColumnName("player_id"); + + b.Property("TimeSpent") + .HasColumnType("TEXT") + .HasColumnName("time_spent"); + + b.Property("Tracker") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("tracker"); + + b.HasKey("Id") + .HasName("PK_play_time"); + + b.HasIndex("PlayerId", "Tracker") + .IsUnique(); + + b.ToTable("play_time", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Player", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("player_id"); + + b.Property("FirstSeenTime") + .HasColumnType("TEXT") + .HasColumnName("first_seen_time"); + + b.Property("LastReadRules") + .HasColumnType("TEXT") + .HasColumnName("last_read_rules"); + + b.Property("LastSeenAddress") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("last_seen_address"); + + b.Property("LastSeenHWId") + .HasColumnType("BLOB") + .HasColumnName("last_seen_hwid"); + + b.Property("LastSeenTime") + .HasColumnType("TEXT") + .HasColumnName("last_seen_time"); + + b.Property("LastSeenUserName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("last_seen_user_name"); + + b.Property("UserId") + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("PK_player"); + + b.HasAlternateKey("UserId") + .HasName("ak_player_user_id"); + + b.HasIndex("LastSeenUserName"); + + b.HasIndex("UserId") + .IsUnique(); + + b.ToTable("player", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Preference", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("preference_id"); + + b.Property("AdminOOCColor") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("admin_ooc_color"); + + b.Property("SelectedCharacterSlot") + .HasColumnType("INTEGER") + .HasColumnName("selected_character_slot"); + + b.Property("UserId") + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("PK_preference"); + + b.HasIndex("UserId") + .IsUnique(); + + b.ToTable("preference", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Profile", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("profile_id"); + + b.Property("Age") + .HasColumnType("INTEGER") + .HasColumnName("age"); + + b.Property("Backpack") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("backpack"); + + b.Property("CharacterName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("char_name"); + + b.Property("Clothing") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("clothing"); + + b.Property("CustomSpecieName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("custom_specie_name"); + + b.Property("EyeColor") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("eye_color"); + + b.Property("FacialHairColor") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("facial_hair_color"); + + b.Property("FacialHairName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("facial_hair_name"); + + b.Property("FlavorText") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("flavor_text"); + + b.Property("Gender") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("gender"); + + b.Property("HairColor") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("hair_color"); + + b.Property("HairName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("hair_name"); + + b.Property("Height") + .HasColumnType("REAL") + .HasColumnName("height"); + + b.Property("Markings") + .HasColumnType("jsonb") + .HasColumnName("markings"); + + b.Property("PreferenceId") + .HasColumnType("INTEGER") + .HasColumnName("preference_id"); + + b.Property("PreferenceUnavailable") + .HasColumnType("INTEGER") + .HasColumnName("pref_unavailable"); + + b.Property("Sex") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("sex"); + + b.Property("SkinColor") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("skin_color"); + + b.Property("Slot") + .HasColumnType("INTEGER") + .HasColumnName("slot"); + + b.Property("SpawnPriority") + .HasColumnType("INTEGER") + .HasColumnName("spawn_priority"); + + b.Property("Species") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("species"); + + b.Property("Width") + .HasColumnType("REAL") + .HasColumnName("width"); + + b.HasKey("Id") + .HasName("PK_profile"); + + b.HasIndex("PreferenceId") + .HasDatabaseName("IX_profile_preference_id"); + + b.HasIndex("Slot", "PreferenceId") + .IsUnique(); + + b.ToTable("profile", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Round", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.Property("ServerId") + .HasColumnType("INTEGER") + .HasColumnName("server_id"); + + b.Property("StartDate") + .HasColumnType("TEXT") + .HasColumnName("start_date"); + + b.HasKey("Id") + .HasName("PK_round"); + + b.HasIndex("ServerId") + .HasDatabaseName("IX_round_server_id"); + + b.HasIndex("StartDate"); + + b.ToTable("round", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Server", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("server_id"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("name"); + + b.HasKey("Id") + .HasName("PK_server"); + + b.ToTable("server", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBan", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("server_ban_id"); + + b.Property("Address") + .HasColumnType("TEXT") + .HasColumnName("address"); + + b.Property("AutoDelete") + .HasColumnType("INTEGER") + .HasColumnName("auto_delete"); + + b.Property("BanTime") + .HasColumnType("TEXT") + .HasColumnName("ban_time"); + + b.Property("BanningAdmin") + .HasColumnType("TEXT") + .HasColumnName("banning_admin"); + + b.Property("ExemptFlags") + .HasColumnType("INTEGER") + .HasColumnName("exempt_flags"); + + b.Property("ExpirationTime") + .HasColumnType("TEXT") + .HasColumnName("expiration_time"); + + b.Property("HWId") + .HasColumnType("BLOB") + .HasColumnName("hwid"); + + b.Property("Hidden") + .HasColumnType("INTEGER") + .HasColumnName("hidden"); + + b.Property("LastEditedAt") + .HasColumnType("TEXT") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("TEXT") + .HasColumnName("last_edited_by_id"); + + b.Property("PlayerUserId") + .HasColumnType("TEXT") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("TEXT") + .HasColumnName("playtime_at_note"); + + b.Property("Reason") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("reason"); + + b.Property("RoundId") + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.Property("Severity") + .HasColumnType("INTEGER") + .HasColumnName("severity"); + + b.HasKey("Id") + .HasName("PK_server_ban"); + + b.HasIndex("Address"); + + b.HasIndex("BanningAdmin"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_server_ban_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_server_ban_round_id"); + + b.ToTable("server_ban", null, t => + { + t.HasCheckConstraint("HaveEitherAddressOrUserIdOrHWId", "address IS NOT NULL OR player_user_id IS NOT NULL OR hwid IS NOT NULL"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBanExemption", b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.Property("Flags") + .HasColumnType("INTEGER") + .HasColumnName("flags"); + + b.HasKey("UserId") + .HasName("PK_server_ban_exemption"); + + b.ToTable("server_ban_exemption", null, t => + { + t.HasCheckConstraint("FlagsNotZero", "flags != 0"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBanHit", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("server_ban_hit_id"); + + b.Property("BanId") + .HasColumnType("INTEGER") + .HasColumnName("ban_id"); + + b.Property("ConnectionId") + .HasColumnType("INTEGER") + .HasColumnName("connection_id"); + + b.HasKey("Id") + .HasName("PK_server_ban_hit"); + + b.HasIndex("BanId") + .HasDatabaseName("IX_server_ban_hit_ban_id"); + + b.HasIndex("ConnectionId") + .HasDatabaseName("IX_server_ban_hit_connection_id"); + + b.ToTable("server_ban_hit", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleBan", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("server_role_ban_id"); + + b.Property("Address") + .HasColumnType("TEXT") + .HasColumnName("address"); + + b.Property("BanTime") + .HasColumnType("TEXT") + .HasColumnName("ban_time"); + + b.Property("BanningAdmin") + .HasColumnType("TEXT") + .HasColumnName("banning_admin"); + + b.Property("ExpirationTime") + .HasColumnType("TEXT") + .HasColumnName("expiration_time"); + + b.Property("HWId") + .HasColumnType("BLOB") + .HasColumnName("hwid"); + + b.Property("Hidden") + .HasColumnType("INTEGER") + .HasColumnName("hidden"); + + b.Property("LastEditedAt") + .HasColumnType("TEXT") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("TEXT") + .HasColumnName("last_edited_by_id"); + + b.Property("PlayerUserId") + .HasColumnType("TEXT") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("TEXT") + .HasColumnName("playtime_at_note"); + + b.Property("Reason") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("reason"); + + b.Property("RoleId") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("role_id"); + + b.Property("RoundId") + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.Property("Severity") + .HasColumnType("INTEGER") + .HasColumnName("severity"); + + b.HasKey("Id") + .HasName("PK_server_role_ban"); + + b.HasIndex("Address"); + + b.HasIndex("BanningAdmin"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_server_role_ban_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_server_role_ban_round_id"); + + b.ToTable("server_role_ban", null, t => + { + t.HasCheckConstraint("HaveEitherAddressOrUserIdOrHWId", "address IS NOT NULL OR player_user_id IS NOT NULL OR hwid IS NOT NULL"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleUnban", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("role_unban_id"); + + b.Property("BanId") + .HasColumnType("INTEGER") + .HasColumnName("ban_id"); + + b.Property("UnbanTime") + .HasColumnType("TEXT") + .HasColumnName("unban_time"); + + b.Property("UnbanningAdmin") + .HasColumnType("TEXT") + .HasColumnName("unbanning_admin"); + + b.HasKey("Id") + .HasName("PK_server_role_unban"); + + b.HasIndex("BanId") + .IsUnique(); + + b.ToTable("server_role_unban", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ServerUnban", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("unban_id"); + + b.Property("BanId") + .HasColumnType("INTEGER") + .HasColumnName("ban_id"); + + b.Property("UnbanTime") + .HasColumnType("TEXT") + .HasColumnName("unban_time"); + + b.Property("UnbanningAdmin") + .HasColumnType("TEXT") + .HasColumnName("unbanning_admin"); + + b.HasKey("Id") + .HasName("PK_server_unban"); + + b.HasIndex("BanId") + .IsUnique(); + + b.ToTable("server_unban", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Trait", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("trait_id"); + + b.Property("ProfileId") + .HasColumnType("INTEGER") + .HasColumnName("profile_id"); + + b.Property("TraitName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("trait_name"); + + b.HasKey("Id") + .HasName("PK_trait"); + + b.HasIndex("ProfileId", "TraitName") + .IsUnique(); + + b.ToTable("trait", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.UploadedResourceLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("uploaded_resource_log_id"); + + b.Property("Data") + .IsRequired() + .HasColumnType("BLOB") + .HasColumnName("data"); + + b.Property("Date") + .HasColumnType("TEXT") + .HasColumnName("date"); + + b.Property("Path") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("path"); + + b.Property("UserId") + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("PK_uploaded_resource_log"); + + b.ToTable("uploaded_resource_log", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Whitelist", b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.HasKey("UserId") + .HasName("PK_whitelist"); + + b.ToTable("whitelist", (string)null); + }); + + modelBuilder.Entity("PlayerRound", b => + { + b.Property("PlayersId") + .HasColumnType("INTEGER") + .HasColumnName("players_id"); + + b.Property("RoundsId") + .HasColumnType("INTEGER") + .HasColumnName("rounds_id"); + + b.HasKey("PlayersId", "RoundsId") + .HasName("PK_player_round"); + + b.HasIndex("RoundsId") + .HasDatabaseName("IX_player_round_rounds_id"); + + b.ToTable("player_round", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Admin", b => + { + b.HasOne("Content.Server.Database.AdminRank", "AdminRank") + .WithMany("Admins") + .HasForeignKey("AdminRankId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_admin_rank_admin_rank_id"); + + b.Navigation("AdminRank"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminFlag", b => + { + b.HasOne("Content.Server.Database.Admin", "Admin") + .WithMany("Flags") + .HasForeignKey("AdminId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_flag_admin_admin_id"); + + b.Navigation("Admin"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLog", b => + { + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany("AdminLogs") + .HasForeignKey("RoundId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_log_round_round_id"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLogPlayer", b => + { + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminLogs") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_log_player_player_player_user_id"); + + b.HasOne("Content.Server.Database.AdminLog", "Log") + .WithMany("Players") + .HasForeignKey("RoundId", "LogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_log_player_admin_log_round_id_log_id"); + + b.Navigation("Log"); + + b.Navigation("Player"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminMessage", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminMessagesCreated") + .HasForeignKey("CreatedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_messages_player_created_by_id"); + + b.HasOne("Content.Server.Database.Player", "DeletedBy") + .WithMany("AdminMessagesDeleted") + .HasForeignKey("DeletedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_messages_player_deleted_by_id"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminMessagesLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_messages_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminMessagesReceived") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_admin_messages_player_player_user_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_admin_messages_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("DeletedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Player"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminNote", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminNotesCreated") + .HasForeignKey("CreatedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_notes_player_created_by_id"); + + b.HasOne("Content.Server.Database.Player", "DeletedBy") + .WithMany("AdminNotesDeleted") + .HasForeignKey("DeletedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_notes_player_deleted_by_id"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminNotesLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_notes_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminNotesReceived") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_admin_notes_player_player_user_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_admin_notes_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("DeletedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Player"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRankFlag", b => + { + b.HasOne("Content.Server.Database.AdminRank", "Rank") + .WithMany("Flags") + .HasForeignKey("AdminRankId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_rank_flag_admin_rank_admin_rank_id"); + + b.Navigation("Rank"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminWatchlist", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminWatchlistsCreated") + .HasForeignKey("CreatedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_watchlists_player_created_by_id"); + + b.HasOne("Content.Server.Database.Player", "DeletedBy") + .WithMany("AdminWatchlistsDeleted") + .HasForeignKey("DeletedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_watchlists_player_deleted_by_id"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminWatchlistsLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_watchlists_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminWatchlistsReceived") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_admin_watchlists_player_player_user_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_admin_watchlists_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("DeletedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Player"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.Antag", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Antags") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_antag_profile_profile_id"); + + b.Navigation("Profile"); + }); + + modelBuilder.Entity("Content.Server.Database.ConnectionLog", b => + { + b.HasOne("Content.Server.Database.Server", "Server") + .WithMany("ConnectionLogs") + .HasForeignKey("ServerId") + .OnDelete(DeleteBehavior.SetNull) + .IsRequired() + .HasConstraintName("FK_connection_log_server_server_id"); + + b.Navigation("Server"); + }); + + modelBuilder.Entity("Content.Server.Database.Job", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Jobs") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_job_profile_profile_id"); + + b.Navigation("Profile"); + }); + + modelBuilder.Entity("Content.Server.Database.Loadout", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Loadouts") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_loadout_profile_profile_id"); + + b.Navigation("Profile"); + }); + + modelBuilder.Entity("Content.Server.Database.Profile", b => + { + b.HasOne("Content.Server.Database.Preference", "Preference") + .WithMany("Profiles") + .HasForeignKey("PreferenceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_profile_preference_preference_id"); + + b.Navigation("Preference"); + }); + + modelBuilder.Entity("Content.Server.Database.Round", b => + { + b.HasOne("Content.Server.Database.Server", "Server") + .WithMany("Rounds") + .HasForeignKey("ServerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_round_server_server_id"); + + b.Navigation("Server"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBan", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminServerBansCreated") + .HasForeignKey("BanningAdmin") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_ban_player_banning_admin"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminServerBansLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_ban_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_server_ban_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBanHit", b => + { + b.HasOne("Content.Server.Database.ServerBan", "Ban") + .WithMany("BanHits") + .HasForeignKey("BanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_ban_hit_server_ban_ban_id"); + + b.HasOne("Content.Server.Database.ConnectionLog", "Connection") + .WithMany("BanHits") + .HasForeignKey("ConnectionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_ban_hit_connection_log_connection_id"); + + b.Navigation("Ban"); + + b.Navigation("Connection"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleBan", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminServerRoleBansCreated") + .HasForeignKey("BanningAdmin") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_role_ban_player_banning_admin"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminServerRoleBansLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_role_ban_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_server_role_ban_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleUnban", b => + { + b.HasOne("Content.Server.Database.ServerRoleBan", "Ban") + .WithOne("Unban") + .HasForeignKey("Content.Server.Database.ServerRoleUnban", "BanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_role_unban_server_role_ban_ban_id"); + + b.Navigation("Ban"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerUnban", b => + { + b.HasOne("Content.Server.Database.ServerBan", "Ban") + .WithOne("Unban") + .HasForeignKey("Content.Server.Database.ServerUnban", "BanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_unban_server_ban_ban_id"); + + b.Navigation("Ban"); + }); + + modelBuilder.Entity("Content.Server.Database.Trait", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Traits") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_trait_profile_profile_id"); + + b.Navigation("Profile"); + }); + + modelBuilder.Entity("PlayerRound", b => + { + b.HasOne("Content.Server.Database.Player", null) + .WithMany() + .HasForeignKey("PlayersId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_player_round_player_players_id"); + + b.HasOne("Content.Server.Database.Round", null) + .WithMany() + .HasForeignKey("RoundsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_player_round_round_rounds_id"); + }); + + modelBuilder.Entity("Content.Server.Database.Admin", b => + { + b.Navigation("Flags"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLog", b => + { + b.Navigation("Players"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRank", b => + { + b.Navigation("Admins"); + + b.Navigation("Flags"); + }); + + modelBuilder.Entity("Content.Server.Database.ConnectionLog", b => + { + b.Navigation("BanHits"); + }); + + modelBuilder.Entity("Content.Server.Database.Player", b => + { + b.Navigation("AdminLogs"); + + b.Navigation("AdminMessagesCreated"); + + b.Navigation("AdminMessagesDeleted"); + + b.Navigation("AdminMessagesLastEdited"); + + b.Navigation("AdminMessagesReceived"); + + b.Navigation("AdminNotesCreated"); + + b.Navigation("AdminNotesDeleted"); + + b.Navigation("AdminNotesLastEdited"); + + b.Navigation("AdminNotesReceived"); + + b.Navigation("AdminServerBansCreated"); + + b.Navigation("AdminServerBansLastEdited"); + + b.Navigation("AdminServerRoleBansCreated"); + + b.Navigation("AdminServerRoleBansLastEdited"); + + b.Navigation("AdminWatchlistsCreated"); + + b.Navigation("AdminWatchlistsDeleted"); + + b.Navigation("AdminWatchlistsLastEdited"); + + b.Navigation("AdminWatchlistsReceived"); + }); + + modelBuilder.Entity("Content.Server.Database.Preference", b => + { + b.Navigation("Profiles"); + }); + + modelBuilder.Entity("Content.Server.Database.Profile", b => + { + b.Navigation("Antags"); + + b.Navigation("Jobs"); + + b.Navigation("Loadouts"); + + b.Navigation("Traits"); + }); + + modelBuilder.Entity("Content.Server.Database.Round", b => + { + b.Navigation("AdminLogs"); + }); + + modelBuilder.Entity("Content.Server.Database.Server", b => + { + b.Navigation("ConnectionLogs"); + + b.Navigation("Rounds"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBan", b => + { + b.Navigation("BanHits"); + + b.Navigation("Unban"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleBan", b => + { + b.Navigation("Unban"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Content.Server.Database/Migrations/Sqlite/20241001054735_CustomSpecieName.cs b/Content.Server.Database/Migrations/Sqlite/20241001054735_CustomSpecieName.cs new file mode 100644 index 00000000000..a1e968045b5 --- /dev/null +++ b/Content.Server.Database/Migrations/Sqlite/20241001054735_CustomSpecieName.cs @@ -0,0 +1,29 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Content.Server.Database.Migrations.Sqlite +{ + /// + public partial class CustomSpecieName : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "custom_specie_name", + table: "profile", + type: "TEXT", + nullable: false, + defaultValue: ""); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "custom_specie_name", + table: "profile"); + } + } +} diff --git a/Content.Server.Database/Migrations/Sqlite/20241018043307_RoleWhitelist.Designer.cs b/Content.Server.Database/Migrations/Sqlite/20241018043307_RoleWhitelist.Designer.cs new file mode 100644 index 00000000000..bef2d1038fa --- /dev/null +++ b/Content.Server.Database/Migrations/Sqlite/20241018043307_RoleWhitelist.Designer.cs @@ -0,0 +1,1823 @@ +// +using System; +using Content.Server.Database; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Content.Server.Database.Migrations.Sqlite +{ + [DbContext(typeof(SqliteServerDbContext))] + [Migration("20241018043307_RoleWhitelist")] + partial class RoleWhitelist + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "8.0.0"); + + modelBuilder.Entity("Content.Server.Database.Admin", b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.Property("AdminRankId") + .HasColumnType("INTEGER") + .HasColumnName("admin_rank_id"); + + b.Property("Title") + .HasColumnType("TEXT") + .HasColumnName("title"); + + b.HasKey("UserId") + .HasName("PK_admin"); + + b.HasIndex("AdminRankId") + .HasDatabaseName("IX_admin_admin_rank_id"); + + b.ToTable("admin", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminFlag", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("admin_flag_id"); + + b.Property("AdminId") + .HasColumnType("TEXT") + .HasColumnName("admin_id"); + + b.Property("Flag") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("flag"); + + b.Property("Negative") + .HasColumnType("INTEGER") + .HasColumnName("negative"); + + b.HasKey("Id") + .HasName("PK_admin_flag"); + + b.HasIndex("AdminId") + .HasDatabaseName("IX_admin_flag_admin_id"); + + b.HasIndex("Flag", "AdminId") + .IsUnique(); + + b.ToTable("admin_flag", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLog", b => + { + b.Property("RoundId") + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.Property("Id") + .HasColumnType("INTEGER") + .HasColumnName("admin_log_id"); + + b.Property("Date") + .HasColumnType("TEXT") + .HasColumnName("date"); + + b.Property("Impact") + .HasColumnType("INTEGER") + .HasColumnName("impact"); + + b.Property("Json") + .IsRequired() + .HasColumnType("jsonb") + .HasColumnName("json"); + + b.Property("Message") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("message"); + + b.Property("Type") + .HasColumnType("INTEGER") + .HasColumnName("type"); + + b.HasKey("RoundId", "Id") + .HasName("PK_admin_log"); + + b.HasIndex("Date"); + + b.HasIndex("Type") + .HasDatabaseName("IX_admin_log_type"); + + b.ToTable("admin_log", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLogPlayer", b => + { + b.Property("RoundId") + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.Property("LogId") + .HasColumnType("INTEGER") + .HasColumnName("log_id"); + + b.Property("PlayerUserId") + .HasColumnType("TEXT") + .HasColumnName("player_user_id"); + + b.HasKey("RoundId", "LogId", "PlayerUserId") + .HasName("PK_admin_log_player"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_log_player_player_user_id"); + + b.ToTable("admin_log_player", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminMessage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("admin_messages_id"); + + b.Property("CreatedAt") + .HasColumnType("TEXT") + .HasColumnName("created_at"); + + b.Property("CreatedById") + .HasColumnType("TEXT") + .HasColumnName("created_by_id"); + + b.Property("Deleted") + .HasColumnType("INTEGER") + .HasColumnName("deleted"); + + b.Property("DeletedAt") + .HasColumnType("TEXT") + .HasColumnName("deleted_at"); + + b.Property("DeletedById") + .HasColumnType("TEXT") + .HasColumnName("deleted_by_id"); + + b.Property("Dismissed") + .HasColumnType("INTEGER") + .HasColumnName("dismissed"); + + b.Property("ExpirationTime") + .HasColumnType("TEXT") + .HasColumnName("expiration_time"); + + b.Property("LastEditedAt") + .HasColumnType("TEXT") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("TEXT") + .HasColumnName("last_edited_by_id"); + + b.Property("Message") + .IsRequired() + .HasMaxLength(4096) + .HasColumnType("TEXT") + .HasColumnName("message"); + + b.Property("PlayerUserId") + .HasColumnType("TEXT") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("TEXT") + .HasColumnName("playtime_at_note"); + + b.Property("RoundId") + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.Property("Seen") + .HasColumnType("INTEGER") + .HasColumnName("seen"); + + b.HasKey("Id") + .HasName("PK_admin_messages"); + + b.HasIndex("CreatedById"); + + b.HasIndex("DeletedById"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_messages_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_admin_messages_round_id"); + + b.ToTable("admin_messages", null, t => + { + t.HasCheckConstraint("NotDismissedAndSeen", "NOT dismissed OR seen"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.AdminNote", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("admin_notes_id"); + + b.Property("CreatedAt") + .HasColumnType("TEXT") + .HasColumnName("created_at"); + + b.Property("CreatedById") + .HasColumnType("TEXT") + .HasColumnName("created_by_id"); + + b.Property("Deleted") + .HasColumnType("INTEGER") + .HasColumnName("deleted"); + + b.Property("DeletedAt") + .HasColumnType("TEXT") + .HasColumnName("deleted_at"); + + b.Property("DeletedById") + .HasColumnType("TEXT") + .HasColumnName("deleted_by_id"); + + b.Property("ExpirationTime") + .HasColumnType("TEXT") + .HasColumnName("expiration_time"); + + b.Property("LastEditedAt") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("TEXT") + .HasColumnName("last_edited_by_id"); + + b.Property("Message") + .IsRequired() + .HasMaxLength(4096) + .HasColumnType("TEXT") + .HasColumnName("message"); + + b.Property("PlayerUserId") + .HasColumnType("TEXT") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("TEXT") + .HasColumnName("playtime_at_note"); + + b.Property("RoundId") + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.Property("Secret") + .HasColumnType("INTEGER") + .HasColumnName("secret"); + + b.Property("Severity") + .HasColumnType("INTEGER") + .HasColumnName("severity"); + + b.HasKey("Id") + .HasName("PK_admin_notes"); + + b.HasIndex("CreatedById"); + + b.HasIndex("DeletedById"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_notes_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_admin_notes_round_id"); + + b.ToTable("admin_notes", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRank", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("admin_rank_id"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("name"); + + b.HasKey("Id") + .HasName("PK_admin_rank"); + + b.ToTable("admin_rank", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRankFlag", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("admin_rank_flag_id"); + + b.Property("AdminRankId") + .HasColumnType("INTEGER") + .HasColumnName("admin_rank_id"); + + b.Property("Flag") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("flag"); + + b.HasKey("Id") + .HasName("PK_admin_rank_flag"); + + b.HasIndex("AdminRankId"); + + b.HasIndex("Flag", "AdminRankId") + .IsUnique(); + + b.ToTable("admin_rank_flag", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminWatchlist", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("admin_watchlists_id"); + + b.Property("CreatedAt") + .HasColumnType("TEXT") + .HasColumnName("created_at"); + + b.Property("CreatedById") + .HasColumnType("TEXT") + .HasColumnName("created_by_id"); + + b.Property("Deleted") + .HasColumnType("INTEGER") + .HasColumnName("deleted"); + + b.Property("DeletedAt") + .HasColumnType("TEXT") + .HasColumnName("deleted_at"); + + b.Property("DeletedById") + .HasColumnType("TEXT") + .HasColumnName("deleted_by_id"); + + b.Property("ExpirationTime") + .HasColumnType("TEXT") + .HasColumnName("expiration_time"); + + b.Property("LastEditedAt") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("TEXT") + .HasColumnName("last_edited_by_id"); + + b.Property("Message") + .IsRequired() + .HasMaxLength(4096) + .HasColumnType("TEXT") + .HasColumnName("message"); + + b.Property("PlayerUserId") + .HasColumnType("TEXT") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("TEXT") + .HasColumnName("playtime_at_note"); + + b.Property("RoundId") + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.HasKey("Id") + .HasName("PK_admin_watchlists"); + + b.HasIndex("CreatedById"); + + b.HasIndex("DeletedById"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_watchlists_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_admin_watchlists_round_id"); + + b.ToTable("admin_watchlists", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Antag", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("antag_id"); + + b.Property("AntagName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("antag_name"); + + b.Property("ProfileId") + .HasColumnType("INTEGER") + .HasColumnName("profile_id"); + + b.HasKey("Id") + .HasName("PK_antag"); + + b.HasIndex("ProfileId", "AntagName") + .IsUnique(); + + b.ToTable("antag", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AssignedUserId", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("assigned_user_id_id"); + + b.Property("UserId") + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.Property("UserName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("user_name"); + + b.HasKey("Id") + .HasName("PK_assigned_user_id"); + + b.HasIndex("UserId") + .IsUnique(); + + b.HasIndex("UserName") + .IsUnique(); + + b.ToTable("assigned_user_id", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.BanTemplate", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("ban_template_id"); + + b.Property("AutoDelete") + .HasColumnType("INTEGER") + .HasColumnName("auto_delete"); + + b.Property("ExemptFlags") + .HasColumnType("INTEGER") + .HasColumnName("exempt_flags"); + + b.Property("Hidden") + .HasColumnType("INTEGER") + .HasColumnName("hidden"); + + b.Property("Length") + .HasColumnType("TEXT") + .HasColumnName("length"); + + b.Property("Reason") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("reason"); + + b.Property("Severity") + .HasColumnType("INTEGER") + .HasColumnName("severity"); + + b.Property("Title") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("title"); + + b.HasKey("Id") + .HasName("PK_ban_template"); + + b.ToTable("ban_template", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ConnectionLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("connection_log_id"); + + b.Property("Address") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("address"); + + b.Property("Denied") + .HasColumnType("INTEGER") + .HasColumnName("denied"); + + b.Property("HWId") + .HasColumnType("BLOB") + .HasColumnName("hwid"); + + b.Property("ServerId") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasDefaultValue(0) + .HasColumnName("server_id"); + + b.Property("Time") + .HasColumnType("TEXT") + .HasColumnName("time"); + + b.Property("UserId") + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.Property("UserName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("user_name"); + + b.HasKey("Id") + .HasName("PK_connection_log"); + + b.HasIndex("ServerId") + .HasDatabaseName("IX_connection_log_server_id"); + + b.HasIndex("UserId"); + + b.ToTable("connection_log", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Job", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("job_id"); + + b.Property("JobName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("job_name"); + + b.Property("Priority") + .HasColumnType("INTEGER") + .HasColumnName("priority"); + + b.Property("ProfileId") + .HasColumnType("INTEGER") + .HasColumnName("profile_id"); + + b.HasKey("Id") + .HasName("PK_job"); + + b.HasIndex("ProfileId"); + + b.HasIndex("ProfileId", "JobName") + .IsUnique(); + + b.HasIndex(new[] { "ProfileId" }, "IX_job_one_high_priority") + .IsUnique() + .HasFilter("priority = 3"); + + b.ToTable("job", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Loadout", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("loadout_id"); + + b.Property("LoadoutName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("loadout_name"); + + b.Property("ProfileId") + .HasColumnType("INTEGER") + .HasColumnName("profile_id"); + + b.HasKey("Id") + .HasName("PK_loadout"); + + b.HasIndex("ProfileId", "LoadoutName") + .IsUnique(); + + b.ToTable("loadout", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.PlayTime", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("play_time_id"); + + b.Property("PlayerId") + .HasColumnType("TEXT") + .HasColumnName("player_id"); + + b.Property("TimeSpent") + .HasColumnType("TEXT") + .HasColumnName("time_spent"); + + b.Property("Tracker") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("tracker"); + + b.HasKey("Id") + .HasName("PK_play_time"); + + b.HasIndex("PlayerId", "Tracker") + .IsUnique(); + + b.ToTable("play_time", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Player", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("player_id"); + + b.Property("FirstSeenTime") + .HasColumnType("TEXT") + .HasColumnName("first_seen_time"); + + b.Property("LastReadRules") + .HasColumnType("TEXT") + .HasColumnName("last_read_rules"); + + b.Property("LastSeenAddress") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("last_seen_address"); + + b.Property("LastSeenHWId") + .HasColumnType("BLOB") + .HasColumnName("last_seen_hwid"); + + b.Property("LastSeenTime") + .HasColumnType("TEXT") + .HasColumnName("last_seen_time"); + + b.Property("LastSeenUserName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("last_seen_user_name"); + + b.Property("UserId") + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("PK_player"); + + b.HasAlternateKey("UserId") + .HasName("ak_player_user_id"); + + b.HasIndex("LastSeenUserName"); + + b.HasIndex("UserId") + .IsUnique(); + + b.ToTable("player", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Preference", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("preference_id"); + + b.Property("AdminOOCColor") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("admin_ooc_color"); + + b.Property("SelectedCharacterSlot") + .HasColumnType("INTEGER") + .HasColumnName("selected_character_slot"); + + b.Property("UserId") + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("PK_preference"); + + b.HasIndex("UserId") + .IsUnique(); + + b.ToTable("preference", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Profile", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("profile_id"); + + b.Property("Age") + .HasColumnType("INTEGER") + .HasColumnName("age"); + + b.Property("Backpack") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("backpack"); + + b.Property("CharacterName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("char_name"); + + b.Property("Clothing") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("clothing"); + + b.Property("CustomSpecieName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("custom_specie_name"); + + b.Property("EyeColor") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("eye_color"); + + b.Property("FacialHairColor") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("facial_hair_color"); + + b.Property("FacialHairName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("facial_hair_name"); + + b.Property("FlavorText") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("flavor_text"); + + b.Property("Gender") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("gender"); + + b.Property("HairColor") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("hair_color"); + + b.Property("HairName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("hair_name"); + + b.Property("Height") + .HasColumnType("REAL") + .HasColumnName("height"); + + b.Property("Markings") + .HasColumnType("jsonb") + .HasColumnName("markings"); + + b.Property("PreferenceId") + .HasColumnType("INTEGER") + .HasColumnName("preference_id"); + + b.Property("PreferenceUnavailable") + .HasColumnType("INTEGER") + .HasColumnName("pref_unavailable"); + + b.Property("Sex") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("sex"); + + b.Property("SkinColor") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("skin_color"); + + b.Property("Slot") + .HasColumnType("INTEGER") + .HasColumnName("slot"); + + b.Property("SpawnPriority") + .HasColumnType("INTEGER") + .HasColumnName("spawn_priority"); + + b.Property("Species") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("species"); + + b.Property("Width") + .HasColumnType("REAL") + .HasColumnName("width"); + + b.HasKey("Id") + .HasName("PK_profile"); + + b.HasIndex("PreferenceId") + .HasDatabaseName("IX_profile_preference_id"); + + b.HasIndex("Slot", "PreferenceId") + .IsUnique(); + + b.ToTable("profile", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.RoleWhitelist", b => + { + b.Property("PlayerUserId") + .HasColumnType("TEXT") + .HasColumnName("player_user_id"); + + b.Property("RoleId") + .HasColumnType("TEXT") + .HasColumnName("role_id"); + + b.HasKey("PlayerUserId", "RoleId") + .HasName("PK_role_whitelists"); + + b.ToTable("role_whitelists", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Round", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.Property("ServerId") + .HasColumnType("INTEGER") + .HasColumnName("server_id"); + + b.Property("StartDate") + .HasColumnType("TEXT") + .HasColumnName("start_date"); + + b.HasKey("Id") + .HasName("PK_round"); + + b.HasIndex("ServerId") + .HasDatabaseName("IX_round_server_id"); + + b.HasIndex("StartDate"); + + b.ToTable("round", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Server", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("server_id"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("name"); + + b.HasKey("Id") + .HasName("PK_server"); + + b.ToTable("server", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBan", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("server_ban_id"); + + b.Property("Address") + .HasColumnType("TEXT") + .HasColumnName("address"); + + b.Property("AutoDelete") + .HasColumnType("INTEGER") + .HasColumnName("auto_delete"); + + b.Property("BanTime") + .HasColumnType("TEXT") + .HasColumnName("ban_time"); + + b.Property("BanningAdmin") + .HasColumnType("TEXT") + .HasColumnName("banning_admin"); + + b.Property("ExemptFlags") + .HasColumnType("INTEGER") + .HasColumnName("exempt_flags"); + + b.Property("ExpirationTime") + .HasColumnType("TEXT") + .HasColumnName("expiration_time"); + + b.Property("HWId") + .HasColumnType("BLOB") + .HasColumnName("hwid"); + + b.Property("Hidden") + .HasColumnType("INTEGER") + .HasColumnName("hidden"); + + b.Property("LastEditedAt") + .HasColumnType("TEXT") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("TEXT") + .HasColumnName("last_edited_by_id"); + + b.Property("PlayerUserId") + .HasColumnType("TEXT") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("TEXT") + .HasColumnName("playtime_at_note"); + + b.Property("Reason") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("reason"); + + b.Property("RoundId") + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.Property("Severity") + .HasColumnType("INTEGER") + .HasColumnName("severity"); + + b.HasKey("Id") + .HasName("PK_server_ban"); + + b.HasIndex("Address"); + + b.HasIndex("BanningAdmin"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_server_ban_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_server_ban_round_id"); + + b.ToTable("server_ban", null, t => + { + t.HasCheckConstraint("HaveEitherAddressOrUserIdOrHWId", "address IS NOT NULL OR player_user_id IS NOT NULL OR hwid IS NOT NULL"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBanExemption", b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.Property("Flags") + .HasColumnType("INTEGER") + .HasColumnName("flags"); + + b.HasKey("UserId") + .HasName("PK_server_ban_exemption"); + + b.ToTable("server_ban_exemption", null, t => + { + t.HasCheckConstraint("FlagsNotZero", "flags != 0"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBanHit", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("server_ban_hit_id"); + + b.Property("BanId") + .HasColumnType("INTEGER") + .HasColumnName("ban_id"); + + b.Property("ConnectionId") + .HasColumnType("INTEGER") + .HasColumnName("connection_id"); + + b.HasKey("Id") + .HasName("PK_server_ban_hit"); + + b.HasIndex("BanId") + .HasDatabaseName("IX_server_ban_hit_ban_id"); + + b.HasIndex("ConnectionId") + .HasDatabaseName("IX_server_ban_hit_connection_id"); + + b.ToTable("server_ban_hit", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleBan", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("server_role_ban_id"); + + b.Property("Address") + .HasColumnType("TEXT") + .HasColumnName("address"); + + b.Property("BanTime") + .HasColumnType("TEXT") + .HasColumnName("ban_time"); + + b.Property("BanningAdmin") + .HasColumnType("TEXT") + .HasColumnName("banning_admin"); + + b.Property("ExpirationTime") + .HasColumnType("TEXT") + .HasColumnName("expiration_time"); + + b.Property("HWId") + .HasColumnType("BLOB") + .HasColumnName("hwid"); + + b.Property("Hidden") + .HasColumnType("INTEGER") + .HasColumnName("hidden"); + + b.Property("LastEditedAt") + .HasColumnType("TEXT") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("TEXT") + .HasColumnName("last_edited_by_id"); + + b.Property("PlayerUserId") + .HasColumnType("TEXT") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("TEXT") + .HasColumnName("playtime_at_note"); + + b.Property("Reason") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("reason"); + + b.Property("RoleId") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("role_id"); + + b.Property("RoundId") + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.Property("Severity") + .HasColumnType("INTEGER") + .HasColumnName("severity"); + + b.HasKey("Id") + .HasName("PK_server_role_ban"); + + b.HasIndex("Address"); + + b.HasIndex("BanningAdmin"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_server_role_ban_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_server_role_ban_round_id"); + + b.ToTable("server_role_ban", null, t => + { + t.HasCheckConstraint("HaveEitherAddressOrUserIdOrHWId", "address IS NOT NULL OR player_user_id IS NOT NULL OR hwid IS NOT NULL"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleUnban", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("role_unban_id"); + + b.Property("BanId") + .HasColumnType("INTEGER") + .HasColumnName("ban_id"); + + b.Property("UnbanTime") + .HasColumnType("TEXT") + .HasColumnName("unban_time"); + + b.Property("UnbanningAdmin") + .HasColumnType("TEXT") + .HasColumnName("unbanning_admin"); + + b.HasKey("Id") + .HasName("PK_server_role_unban"); + + b.HasIndex("BanId") + .IsUnique(); + + b.ToTable("server_role_unban", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ServerUnban", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("unban_id"); + + b.Property("BanId") + .HasColumnType("INTEGER") + .HasColumnName("ban_id"); + + b.Property("UnbanTime") + .HasColumnType("TEXT") + .HasColumnName("unban_time"); + + b.Property("UnbanningAdmin") + .HasColumnType("TEXT") + .HasColumnName("unbanning_admin"); + + b.HasKey("Id") + .HasName("PK_server_unban"); + + b.HasIndex("BanId") + .IsUnique(); + + b.ToTable("server_unban", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Trait", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("trait_id"); + + b.Property("ProfileId") + .HasColumnType("INTEGER") + .HasColumnName("profile_id"); + + b.Property("TraitName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("trait_name"); + + b.HasKey("Id") + .HasName("PK_trait"); + + b.HasIndex("ProfileId", "TraitName") + .IsUnique(); + + b.ToTable("trait", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.UploadedResourceLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("uploaded_resource_log_id"); + + b.Property("Data") + .IsRequired() + .HasColumnType("BLOB") + .HasColumnName("data"); + + b.Property("Date") + .HasColumnType("TEXT") + .HasColumnName("date"); + + b.Property("Path") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("path"); + + b.Property("UserId") + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("PK_uploaded_resource_log"); + + b.ToTable("uploaded_resource_log", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Whitelist", b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.HasKey("UserId") + .HasName("PK_whitelist"); + + b.ToTable("whitelist", (string)null); + }); + + modelBuilder.Entity("PlayerRound", b => + { + b.Property("PlayersId") + .HasColumnType("INTEGER") + .HasColumnName("players_id"); + + b.Property("RoundsId") + .HasColumnType("INTEGER") + .HasColumnName("rounds_id"); + + b.HasKey("PlayersId", "RoundsId") + .HasName("PK_player_round"); + + b.HasIndex("RoundsId") + .HasDatabaseName("IX_player_round_rounds_id"); + + b.ToTable("player_round", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Admin", b => + { + b.HasOne("Content.Server.Database.AdminRank", "AdminRank") + .WithMany("Admins") + .HasForeignKey("AdminRankId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_admin_rank_admin_rank_id"); + + b.Navigation("AdminRank"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminFlag", b => + { + b.HasOne("Content.Server.Database.Admin", "Admin") + .WithMany("Flags") + .HasForeignKey("AdminId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_flag_admin_admin_id"); + + b.Navigation("Admin"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLog", b => + { + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany("AdminLogs") + .HasForeignKey("RoundId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_log_round_round_id"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLogPlayer", b => + { + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminLogs") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_log_player_player_player_user_id"); + + b.HasOne("Content.Server.Database.AdminLog", "Log") + .WithMany("Players") + .HasForeignKey("RoundId", "LogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_log_player_admin_log_round_id_log_id"); + + b.Navigation("Log"); + + b.Navigation("Player"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminMessage", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminMessagesCreated") + .HasForeignKey("CreatedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_messages_player_created_by_id"); + + b.HasOne("Content.Server.Database.Player", "DeletedBy") + .WithMany("AdminMessagesDeleted") + .HasForeignKey("DeletedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_messages_player_deleted_by_id"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminMessagesLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_messages_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminMessagesReceived") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_admin_messages_player_player_user_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_admin_messages_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("DeletedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Player"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminNote", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminNotesCreated") + .HasForeignKey("CreatedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_notes_player_created_by_id"); + + b.HasOne("Content.Server.Database.Player", "DeletedBy") + .WithMany("AdminNotesDeleted") + .HasForeignKey("DeletedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_notes_player_deleted_by_id"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminNotesLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_notes_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminNotesReceived") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_admin_notes_player_player_user_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_admin_notes_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("DeletedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Player"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRankFlag", b => + { + b.HasOne("Content.Server.Database.AdminRank", "Rank") + .WithMany("Flags") + .HasForeignKey("AdminRankId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_rank_flag_admin_rank_admin_rank_id"); + + b.Navigation("Rank"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminWatchlist", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminWatchlistsCreated") + .HasForeignKey("CreatedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_watchlists_player_created_by_id"); + + b.HasOne("Content.Server.Database.Player", "DeletedBy") + .WithMany("AdminWatchlistsDeleted") + .HasForeignKey("DeletedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_watchlists_player_deleted_by_id"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminWatchlistsLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_watchlists_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminWatchlistsReceived") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_admin_watchlists_player_player_user_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_admin_watchlists_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("DeletedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Player"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.Antag", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Antags") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_antag_profile_profile_id"); + + b.Navigation("Profile"); + }); + + modelBuilder.Entity("Content.Server.Database.ConnectionLog", b => + { + b.HasOne("Content.Server.Database.Server", "Server") + .WithMany("ConnectionLogs") + .HasForeignKey("ServerId") + .OnDelete(DeleteBehavior.SetNull) + .IsRequired() + .HasConstraintName("FK_connection_log_server_server_id"); + + b.Navigation("Server"); + }); + + modelBuilder.Entity("Content.Server.Database.Job", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Jobs") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_job_profile_profile_id"); + + b.Navigation("Profile"); + }); + + modelBuilder.Entity("Content.Server.Database.Loadout", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Loadouts") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_loadout_profile_profile_id"); + + b.Navigation("Profile"); + }); + + modelBuilder.Entity("Content.Server.Database.Profile", b => + { + b.HasOne("Content.Server.Database.Preference", "Preference") + .WithMany("Profiles") + .HasForeignKey("PreferenceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_profile_preference_preference_id"); + + b.Navigation("Preference"); + }); + + modelBuilder.Entity("Content.Server.Database.RoleWhitelist", b => + { + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("JobWhitelists") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_role_whitelists_player_player_user_id"); + + b.Navigation("Player"); + }); + + modelBuilder.Entity("Content.Server.Database.Round", b => + { + b.HasOne("Content.Server.Database.Server", "Server") + .WithMany("Rounds") + .HasForeignKey("ServerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_round_server_server_id"); + + b.Navigation("Server"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBan", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminServerBansCreated") + .HasForeignKey("BanningAdmin") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_ban_player_banning_admin"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminServerBansLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_ban_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_server_ban_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBanHit", b => + { + b.HasOne("Content.Server.Database.ServerBan", "Ban") + .WithMany("BanHits") + .HasForeignKey("BanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_ban_hit_server_ban_ban_id"); + + b.HasOne("Content.Server.Database.ConnectionLog", "Connection") + .WithMany("BanHits") + .HasForeignKey("ConnectionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_ban_hit_connection_log_connection_id"); + + b.Navigation("Ban"); + + b.Navigation("Connection"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleBan", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminServerRoleBansCreated") + .HasForeignKey("BanningAdmin") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_role_ban_player_banning_admin"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminServerRoleBansLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_role_ban_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_server_role_ban_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleUnban", b => + { + b.HasOne("Content.Server.Database.ServerRoleBan", "Ban") + .WithOne("Unban") + .HasForeignKey("Content.Server.Database.ServerRoleUnban", "BanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_role_unban_server_role_ban_ban_id"); + + b.Navigation("Ban"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerUnban", b => + { + b.HasOne("Content.Server.Database.ServerBan", "Ban") + .WithOne("Unban") + .HasForeignKey("Content.Server.Database.ServerUnban", "BanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_unban_server_ban_ban_id"); + + b.Navigation("Ban"); + }); + + modelBuilder.Entity("Content.Server.Database.Trait", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Traits") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_trait_profile_profile_id"); + + b.Navigation("Profile"); + }); + + modelBuilder.Entity("PlayerRound", b => + { + b.HasOne("Content.Server.Database.Player", null) + .WithMany() + .HasForeignKey("PlayersId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_player_round_player_players_id"); + + b.HasOne("Content.Server.Database.Round", null) + .WithMany() + .HasForeignKey("RoundsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_player_round_round_rounds_id"); + }); + + modelBuilder.Entity("Content.Server.Database.Admin", b => + { + b.Navigation("Flags"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLog", b => + { + b.Navigation("Players"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRank", b => + { + b.Navigation("Admins"); + + b.Navigation("Flags"); + }); + + modelBuilder.Entity("Content.Server.Database.ConnectionLog", b => + { + b.Navigation("BanHits"); + }); + + modelBuilder.Entity("Content.Server.Database.Player", b => + { + b.Navigation("AdminLogs"); + + b.Navigation("AdminMessagesCreated"); + + b.Navigation("AdminMessagesDeleted"); + + b.Navigation("AdminMessagesLastEdited"); + + b.Navigation("AdminMessagesReceived"); + + b.Navigation("AdminNotesCreated"); + + b.Navigation("AdminNotesDeleted"); + + b.Navigation("AdminNotesLastEdited"); + + b.Navigation("AdminNotesReceived"); + + b.Navigation("AdminServerBansCreated"); + + b.Navigation("AdminServerBansLastEdited"); + + b.Navigation("AdminServerRoleBansCreated"); + + b.Navigation("AdminServerRoleBansLastEdited"); + + b.Navigation("AdminWatchlistsCreated"); + + b.Navigation("AdminWatchlistsDeleted"); + + b.Navigation("AdminWatchlistsLastEdited"); + + b.Navigation("AdminWatchlistsReceived"); + + b.Navigation("JobWhitelists"); + }); + + modelBuilder.Entity("Content.Server.Database.Preference", b => + { + b.Navigation("Profiles"); + }); + + modelBuilder.Entity("Content.Server.Database.Profile", b => + { + b.Navigation("Antags"); + + b.Navigation("Jobs"); + + b.Navigation("Loadouts"); + + b.Navigation("Traits"); + }); + + modelBuilder.Entity("Content.Server.Database.Round", b => + { + b.Navigation("AdminLogs"); + }); + + modelBuilder.Entity("Content.Server.Database.Server", b => + { + b.Navigation("ConnectionLogs"); + + b.Navigation("Rounds"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBan", b => + { + b.Navigation("BanHits"); + + b.Navigation("Unban"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleBan", b => + { + b.Navigation("Unban"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Content.Server.Database/Migrations/Sqlite/20241018043307_RoleWhitelist.cs b/Content.Server.Database/Migrations/Sqlite/20241018043307_RoleWhitelist.cs new file mode 100644 index 00000000000..9d192fc6853 --- /dev/null +++ b/Content.Server.Database/Migrations/Sqlite/20241018043307_RoleWhitelist.cs @@ -0,0 +1,40 @@ +#nullable disable + +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +namespace Content.Server.Database.Migrations.Sqlite +{ + /// + public partial class RoleWhitelist : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "role_whitelists", + columns: table => new + { + player_user_id = table.Column(type: "TEXT", nullable: false), + role_id = table.Column(type: "TEXT", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_role_whitelists", x => new { x.player_user_id, x.role_id }); + table.ForeignKey( + name: "FK_role_whitelists_player_player_user_id", + column: x => x.player_user_id, + principalTable: "player", + principalColumn: "user_id", + onDelete: ReferentialAction.Cascade); + }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "role_whitelists"); + } + } +} diff --git a/Content.Server.Database/Migrations/Sqlite/SqliteServerDbContextModelSnapshot.cs b/Content.Server.Database/Migrations/Sqlite/SqliteServerDbContextModelSnapshot.cs index 9d992a8e281..848ab284f75 100644 --- a/Content.Server.Database/Migrations/Sqlite/SqliteServerDbContextModelSnapshot.cs +++ b/Content.Server.Database/Migrations/Sqlite/SqliteServerDbContextModelSnapshot.cs @@ -483,6 +483,49 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.ToTable("assigned_user_id", (string)null); }); + modelBuilder.Entity("Content.Server.Database.BanTemplate", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("ban_template_id"); + + b.Property("AutoDelete") + .HasColumnType("INTEGER") + .HasColumnName("auto_delete"); + + b.Property("ExemptFlags") + .HasColumnType("INTEGER") + .HasColumnName("exempt_flags"); + + b.Property("Hidden") + .HasColumnType("INTEGER") + .HasColumnName("hidden"); + + b.Property("Length") + .HasColumnType("TEXT") + .HasColumnName("length"); + + b.Property("Reason") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("reason"); + + b.Property("Severity") + .HasColumnType("INTEGER") + .HasColumnName("severity"); + + b.Property("Title") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("title"); + + b.HasKey("Id") + .HasName("PK_ban_template"); + + b.ToTable("ban_template", (string)null); + }); + modelBuilder.Entity("Content.Server.Database.ConnectionLog", b => { b.Property("Id") @@ -760,6 +803,11 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("TEXT") .HasColumnName("clothing"); + b.Property("CustomSpecieName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("custom_specie_name"); + b.Property("EyeColor") .IsRequired() .HasColumnType("TEXT") @@ -795,16 +843,10 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("TEXT") .HasColumnName("hair_name"); - // Parkstation-HeightSlider Start b.Property("Height") .HasColumnType("REAL") .HasColumnName("height"); - b.Property("Width") - .HasColumnType("REAL") - .HasColumnName("width"); - // Parkstation-HeightSlider End - b.Property("Markings") .HasColumnType("jsonb") .HasColumnName("markings"); @@ -840,6 +882,10 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("TEXT") .HasColumnName("species"); + b.Property("Width") + .HasColumnType("REAL") + .HasColumnName("width"); + b.HasKey("Id") .HasName("PK_profile"); @@ -852,6 +898,22 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.ToTable("profile", (string)null); }); + modelBuilder.Entity("Content.Server.Database.RoleWhitelist", b => + { + b.Property("PlayerUserId") + .HasColumnType("TEXT") + .HasColumnName("player_user_id"); + + b.Property("RoleId") + .HasColumnType("TEXT") + .HasColumnName("role_id"); + + b.HasKey("PlayerUserId", "RoleId") + .HasName("PK_role_whitelists"); + + b.ToTable("role_whitelists", (string)null); + }); + modelBuilder.Entity("Content.Server.Database.Round", b => { b.Property("Id") @@ -1541,6 +1603,19 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Navigation("Preference"); }); + modelBuilder.Entity("Content.Server.Database.RoleWhitelist", b => + { + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("JobWhitelists") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_role_whitelists_player_player_user_id"); + + b.Navigation("Player"); + }); + modelBuilder.Entity("Content.Server.Database.Round", b => { b.HasOne("Content.Server.Database.Server", "Server") @@ -1740,6 +1815,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Navigation("AdminWatchlistsLastEdited"); b.Navigation("AdminWatchlistsReceived"); + + b.Navigation("JobWhitelists"); }); modelBuilder.Entity("Content.Server.Database.Preference", b => diff --git a/Content.Server.Database/Model.cs b/Content.Server.Database/Model.cs index 5319d5398c0..f9983cfcb91 100644 --- a/Content.Server.Database/Model.cs +++ b/Content.Server.Database/Model.cs @@ -40,6 +40,8 @@ protected ServerDbContext(DbContextOptions options) : base(options) public DbSet AdminNotes { get; set; } = null!; public DbSet AdminWatchlists { get; set; } = null!; public DbSet AdminMessages { get; set; } = null!; + public DbSet BanTemplate { get; set; } = null!; + public DbSet RoleWhitelists { get; set; } = null!; protected override void OnModelCreating(ModelBuilder modelBuilder) { @@ -48,19 +50,19 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) .IsUnique(); modelBuilder.Entity() - .HasIndex(p => new {p.Slot, PrefsId = p.PreferenceId}) + .HasIndex(p => new { p.Slot, PrefsId = p.PreferenceId }) .IsUnique(); modelBuilder.Entity() - .HasIndex(p => new {HumanoidProfileId = p.ProfileId, p.AntagName}) + .HasIndex(p => new { HumanoidProfileId = p.ProfileId, p.AntagName }) .IsUnique(); modelBuilder.Entity() - .HasIndex(p => new {HumanoidProfileId = p.ProfileId, p.TraitName}) + .HasIndex(p => new { HumanoidProfileId = p.ProfileId, p.TraitName }) .IsUnique(); modelBuilder.Entity() - .HasIndex(p => new {HumanoidProfileId = p.ProfileId, p.LoadoutName}) + .HasIndex(p => new { HumanoidProfileId = p.ProfileId, p.LoadoutName }) .IsUnique(); modelBuilder.Entity() @@ -99,15 +101,15 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) .OnDelete(DeleteBehavior.SetNull); modelBuilder.Entity() - .HasIndex(f => new {f.Flag, f.AdminId}) + .HasIndex(f => new { f.Flag, f.AdminId }) .IsUnique(); modelBuilder.Entity() - .HasIndex(f => new {f.Flag, f.AdminRankId}) + .HasIndex(f => new { f.Flag, f.AdminRankId }) .IsUnique(); modelBuilder.Entity() - .HasKey(log => new {log.RoundId, log.Id}); + .HasKey(log => new { log.RoundId, log.Id }); modelBuilder.Entity() .Property(log => log.Id); @@ -132,7 +134,7 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) .HasIndex(round => round.StartDate); modelBuilder.Entity() - .HasKey(logPlayer => new {logPlayer.RoundId, logPlayer.LogId, logPlayer.PlayerUserId}); + .HasKey(logPlayer => new { logPlayer.RoundId, logPlayer.LogId, logPlayer.PlayerUserId }); modelBuilder.Entity() .HasIndex(p => p.PlayerUserId); @@ -309,6 +311,13 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) .HasForeignKey(ban => ban.LastEditedById) .HasPrincipalKey(author => author.UserId) .OnDelete(DeleteBehavior.SetNull); + + modelBuilder.Entity() + .HasOne(w => w.Player) + .WithMany(p => p.JobWhitelists) + .HasForeignKey(w => w.PlayerUserId) + .HasPrincipalKey(p => p.UserId) + .OnDelete(DeleteBehavior.Cascade); } public virtual IQueryable SearchLogs(IQueryable query, string searchText) @@ -339,6 +348,7 @@ public class Profile public int Slot { get; set; } [Column("char_name")] public string CharacterName { get; set; } = null!; public string FlavorText { get; set; } = null!; + public string CustomSpecieName { get; set; } = null!; public int Age { get; set; } public string Sex { get; set; } = null!; public string Gender { get; set; } = null!; @@ -492,6 +502,7 @@ public class Player public List AdminServerBansLastEdited { get; set; } = null!; public List AdminServerRoleBansCreated { get; set; } = null!; public List AdminServerRoleBansLastEdited { get; set; } = null!; + public List JobWhitelists { get; set; } = null!; } [Table("whitelist")] @@ -632,7 +643,7 @@ public interface IUnbanCommon public enum ServerBanExemptFlags { // @formatter:off - None = 0, + None = 0, /// /// Ban is a datacenter range, connections usually imply usage of a VPN service. @@ -1061,4 +1072,68 @@ public class AdminMessage : IAdminRemarksCommon /// public bool Dismissed { get; set; } } + + [PrimaryKey(nameof(PlayerUserId), nameof(RoleId))] + public class RoleWhitelist + { + [Required, ForeignKey("Player")] + public Guid PlayerUserId { get; set; } + public Player Player { get; set; } = default!; + + [Required] + public string RoleId { get; set; } = default!; + } + + /// + /// Defines a template that admins can use to quickly fill out ban information. + /// + /// + /// + /// This information is not currently used by the game itself, but it is used by SS14.Admin. + /// + /// + public sealed class BanTemplate + { + public int Id { get; set; } + + /// + /// Title of the ban template. This is purely for reference by admins and not copied into the ban. + /// + public required string Title { get; set; } + + /// + /// How long the ban should last. 0 for permanent. + /// + public TimeSpan Length { get; set; } + + /// + /// The reason for the ban. + /// + /// + public string Reason { get; set; } = ""; + + /// + /// Exemptions granted to the ban. + /// + /// + public ServerBanExemptFlags ExemptFlags { get; set; } + + /// + /// Severity of the ban + /// + /// + public NoteSeverity Severity { get; set; } + + /// + /// Ban will be automatically deleted once expired. + /// + /// + public bool AutoDelete { get; set; } + + /// + /// Ban is not visible to players in the remarks menu. + /// + /// + public bool Hidden { get; set; } + } } diff --git a/Content.Server/Abilities/Psionics/Abilities/AnomalyPowerSystem.Bluespace.cs b/Content.Server/Abilities/Psionics/Abilities/AnomalyPowerSystem.Bluespace.cs new file mode 100644 index 00000000000..698f49a112e --- /dev/null +++ b/Content.Server/Abilities/Psionics/Abilities/AnomalyPowerSystem.Bluespace.cs @@ -0,0 +1,79 @@ +using Content.Shared.Abilities.Psionics; +using Content.Shared.Actions.Events; +using Content.Shared.Mobs.Components; +using System.Linq; +using System.Numerics; +using Content.Shared.Database; +using Robust.Shared.Collections; + +namespace Content.Server.Abilities.Psionics; + +public sealed partial class AnomalyPowerSystem +{ + /// + /// This function handles emulating the effects of a "Bluespace Anomaly", using the caster as the "Anomaly", + /// while substituting their Psionic casting stats for "Severity and Stability". + /// Essentially, scramble the location of entities near the caster(possibly to include the caster). + /// + private void DoBluespaceAnomalyEffects(EntityUid uid, PsionicComponent component, AnomalyPowerActionEvent args, bool overcharged = false) + { + if (args.Bluespace is null) + return; + + if (overcharged) + BluespaceSupercrit(uid, component, args); + else BluespacePulse(uid, component, args); + } + + private void BluespaceSupercrit(EntityUid uid, PsionicComponent component, AnomalyPowerActionEvent args) + { + var xform = Transform(uid); + var mapPos = _xform.GetWorldPosition(xform); + var radius = args.Bluespace!.Value.SupercriticalTeleportRadius * component.CurrentAmplification; + var gridBounds = new Box2(mapPos - new Vector2(radius, radius), mapPos + new Vector2(radius, radius)); + var mobs = new HashSet>(); + _lookup.GetEntitiesInRange(xform.Coordinates, args.Bluespace!.Value.MaxShuffleRadius, mobs); + foreach (var comp in mobs) + { + if (args.Bluespace!.Value.SupercritTeleportsCaster && comp.Owner == uid) + continue; + + var ent = comp.Owner; + var randomX = _random.NextFloat(gridBounds.Left, gridBounds.Right); + var randomY = _random.NextFloat(gridBounds.Bottom, gridBounds.Top); + + var pos = new Vector2(randomX, randomY); + + _adminLogger.Add(LogType.Teleport, $"{ToPrettyString(ent)} has been teleported to {pos} by the supercritical {ToPrettyString(uid)} at {mapPos}"); + + _xform.SetWorldPosition(ent, pos); + _audio.PlayPvs(args.Bluespace!.Value.TeleportSound, ent); + } + } + + private void BluespacePulse(EntityUid uid, PsionicComponent component, AnomalyPowerActionEvent args) + { + var xformQuery = GetEntityQuery(); + var xform = xformQuery.GetComponent(uid); + var range = args.Bluespace!.Value.MaxShuffleRadius * component.CurrentAmplification; + var mobs = new HashSet>(); + _lookup.GetEntitiesInRange(xform.Coordinates, range, mobs); + var allEnts = new ValueList(mobs.Select(m => m.Owner)) { uid }; + var coords = new ValueList(); + foreach (var ent in allEnts) + { + if (args.Bluespace!.Value.PulseTeleportsCaster && ent == uid + || !xformQuery.TryGetComponent(ent, out var allXform)) + continue; + + coords.Add(_xform.GetWorldPosition(allXform)); + } + + _random.Shuffle(coords); + for (var i = 0; i < allEnts.Count; i++) + { + _adminLogger.Add(LogType.Teleport, $"{ToPrettyString(allEnts[i])} has been shuffled to {coords[i]} by the {ToPrettyString(uid)} at {xform.Coordinates}"); + _xform.SetWorldPosition(allEnts[i], coords[i]); + } + } +} \ No newline at end of file diff --git a/Content.Server/Abilities/Psionics/Abilities/AnomalyPowerSystem.Electricity.cs b/Content.Server/Abilities/Psionics/Abilities/AnomalyPowerSystem.Electricity.cs new file mode 100644 index 00000000000..3f494aafb10 --- /dev/null +++ b/Content.Server/Abilities/Psionics/Abilities/AnomalyPowerSystem.Electricity.cs @@ -0,0 +1,39 @@ +using Content.Shared.Abilities.Psionics; +using Content.Shared.Actions.Events; + +namespace Content.Server.Abilities.Psionics; + +public sealed partial class AnomalyPowerSystem +{ + /// + /// This function handles emulating the effects of a "Electrical Anomaly", using the caster as the "Anomaly", + /// while substituting their Psionic casting stats for "Severity and Stability". + /// This fires lightning bolts at random entities near the caster. + /// + private void DoElectricityAnomalyEffects(EntityUid uid, PsionicComponent component, AnomalyPowerActionEvent args, bool overcharged = false) + { + if (args.Electricity is null) + return; + + if (overcharged) + ElectricitySupercrit(uid, component, args); + else ElectricityPulse(uid, component, args); + } + + private void ElectricitySupercrit(EntityUid uid, PsionicComponent component, AnomalyPowerActionEvent args) + { + var range = args.Electricity!.Value.MaxElectrocuteRange * component.CurrentAmplification; + + _emp.EmpPulse(_xform.GetMapCoordinates(uid), range, args.Electricity!.Value.EmpEnergyConsumption, args.Electricity!.Value.EmpDisabledDuration); + _lightning.ShootRandomLightnings(uid, range, args.Electricity!.Value.MaxBoltCount * (int) component.CurrentAmplification, arcDepth: (int) component.CurrentDampening); + } + + private void ElectricityPulse(EntityUid uid, PsionicComponent component, AnomalyPowerActionEvent args) + { + var range = args.Electricity!.Value.MaxElectrocuteRange * component.CurrentAmplification; + + int boltCount = (int) MathF.Floor(MathHelper.Lerp(args.Electricity!.Value.MinBoltCount, args.Electricity!.Value.MaxBoltCount, component.CurrentAmplification)); + + _lightning.ShootRandomLightnings(uid, range, boltCount); + } +} \ No newline at end of file diff --git a/Content.Server/Abilities/Psionics/Abilities/AnomalyPowerSystem.EntitySpawn.cs b/Content.Server/Abilities/Psionics/Abilities/AnomalyPowerSystem.EntitySpawn.cs new file mode 100644 index 00000000000..456f2784863 --- /dev/null +++ b/Content.Server/Abilities/Psionics/Abilities/AnomalyPowerSystem.EntitySpawn.cs @@ -0,0 +1,79 @@ +using Content.Shared.Abilities.Psionics; +using Content.Shared.Actions.Events; +using Content.Shared.Random.Helpers; +using Robust.Shared.Random; +using Content.Shared.Anomaly.Effects.Components; +using Robust.Shared.Map.Components; + +namespace Content.Server.Abilities.Psionics; + +public sealed partial class AnomalyPowerSystem +{ + private const string NoGrid = "entity-anomaly-no-grid"; + + /// + /// This function handles emulating the effects of an "Entity Anomaly", using the caster as the "Anomaly", + /// while substituting their Psionic casting stats for "Severity and Stability". + /// Essentially, spawn entities on random tiles in a radius around the caster. + /// + private void DoEntityAnomalyEffects(EntityUid uid, PsionicComponent component, AnomalyPowerActionEvent args, bool overcharged = false) + { + if (args.EntitySpawnEntries is null) + return; + + if (Transform(uid).GridUid is null) + { + _popup.PopupEntity(Loc.GetString(NoGrid), uid, uid); + return; + } + + if (overcharged) + EntitySupercrit(uid, component, args); + else EntityPulse(uid, component, args); + } + + private void EntitySupercrit(EntityUid uid, PsionicComponent component, AnomalyPowerActionEvent args) + { + foreach (var entry in args.EntitySpawnEntries!) + { + if (!entry.Settings.SpawnOnSuperCritical) + continue; + + SpawnEntities(uid, component, entry); + } + } + + private void EntityPulse(EntityUid uid, PsionicComponent component, AnomalyPowerActionEvent args) + { + if (args.EntitySpawnEntries is null) + return; + + foreach (var entry in args.EntitySpawnEntries!) + { + if (!entry.Settings.SpawnOnPulse) + continue; + + SpawnEntities(uid, component, entry); + } + } + + private void SpawnEntities(EntityUid uid, PsionicComponent component, EntitySpawnSettingsEntry entry) + { + if (!TryComp(Transform(uid).GridUid, out var grid)) + return; + + var tiles = _anomalySystem.GetSpawningPoints(uid, + component.CurrentDampening, + component.CurrentAmplification, + entry.Settings, + _glimmerSystem.Glimmer / 1000, + component.CurrentAmplification, + component.CurrentAmplification); + + if (tiles is null) + return; + + foreach (var tileref in tiles) + Spawn(_random.Pick(entry.Spawns), _mapSystem.ToCenterCoordinates(tileref, grid)); + } +} diff --git a/Content.Server/Abilities/Psionics/Abilities/AnomalyPowerSystem.Explosion.cs b/Content.Server/Abilities/Psionics/Abilities/AnomalyPowerSystem.Explosion.cs new file mode 100644 index 00000000000..06501afa71b --- /dev/null +++ b/Content.Server/Abilities/Psionics/Abilities/AnomalyPowerSystem.Explosion.cs @@ -0,0 +1,52 @@ +using Content.Shared.Abilities.Psionics; +using Content.Shared.Actions.Events; + +namespace Content.Server.Abilities.Psionics; + +public sealed partial class AnomalyPowerSystem +{ + /// + /// This function handles emulating the effects of a "Explosion Anomaly", using the caster as the "Anomaly", + /// while substituting their Psionic casting stats for "Severity and Stability". + /// Generates an explosion centered on the caster. + /// + private void DoExplosionAnomalyEffects(EntityUid uid, PsionicComponent component, AnomalyPowerActionEvent args, bool overcharged = false) + { + if (args.Explosion is null) + return; + + if (overcharged) + ExplosionSupercrit(uid, component, args); + else ExplosionPulse(uid, component, args); + } + + private void ExplosionSupercrit(EntityUid uid, PsionicComponent component, AnomalyPowerActionEvent args) + { + if (args.Explosion!.Value.SupercritExplosionPrototype is null) + return; + + var explosion = args.Explosion!.Value; + _boom.QueueExplosion( + uid, + explosion.SupercritExplosionPrototype, + explosion.SupercritTotalIntensity * component.CurrentAmplification, + explosion.SupercritDropoff / component.CurrentDampening, + explosion.SupercritMaxTileIntensity * component.CurrentDampening + ); + } + + private void ExplosionPulse(EntityUid uid, PsionicComponent component, AnomalyPowerActionEvent args) + { + if (args.Explosion!.Value.ExplosionPrototype is null) + return; + + var explosion = args.Explosion!.Value; + _boom.QueueExplosion( + uid, + explosion.ExplosionPrototype, + explosion.TotalIntensity * component.CurrentAmplification, + explosion.Dropoff / component.CurrentDampening, + explosion.MaxTileIntensity * component.CurrentDampening + ); + } +} \ No newline at end of file diff --git a/Content.Server/Abilities/Psionics/Abilities/AnomalyPowerSystem.GasProducer.cs b/Content.Server/Abilities/Psionics/Abilities/AnomalyPowerSystem.GasProducer.cs new file mode 100644 index 00000000000..267f826f35c --- /dev/null +++ b/Content.Server/Abilities/Psionics/Abilities/AnomalyPowerSystem.GasProducer.cs @@ -0,0 +1,110 @@ +using Content.Shared.Abilities.Psionics; +using Content.Shared.Actions.Events; +using Robust.Shared.Map.Components; +using System.Linq; +using System.Numerics; + +namespace Content.Server.Abilities.Psionics; + +public sealed partial class AnomalyPowerSystem +{ + private void DoGasProducerAnomalyEffects(EntityUid uid, PsionicComponent component, AnomalyPowerActionEvent args, bool overcharged = false) + { + if (args.Gas is null) + return; + + if (overcharged) + GasProducerSupercrit(uid, component, args); + else GasProducerPulse(uid, component, args); + } + + private void GasProducerSupercrit(EntityUid uid, PsionicComponent component, AnomalyPowerActionEvent args) + { + var xform = Transform(uid); + if (!TryComp(xform.GridUid, out var grid)) + return; + + var gas = args.Gas!.Value.SupercritReleasedGas; + var mols = args.Gas!.Value.SupercritMoleAmount * component.CurrentAmplification; + var radius = args.Gas!.Value.SupercritSpawnRadius * component.CurrentAmplification; + var count = args.Gas!.Value.SupercritTileCount * component.CurrentDampening; + var temp = args.Gas!.Value.SupercritTempChange * component.CurrentDampening; + var localpos = xform.Coordinates.Position; + var tilerefs = grid.GetLocalTilesIntersecting( + new Box2(localpos + new Vector2(-radius, -radius), localpos + new Vector2(radius, radius))).ToArray(); + + if (tilerefs.Length == 0) + return; + + var mixture = _atmosphere.GetTileMixture((uid, xform), true); + if (mixture != null) + { + mixture.AdjustMoles(gas, mols); + mixture.Temperature += temp; + } + + if (count == 0) + return; + + _random.Shuffle(tilerefs); + var amountCounter = 0; + foreach (var tileref in tilerefs) + { + var mix = _atmosphere.GetTileMixture(xform.GridUid, xform.MapUid, tileref.GridIndices, true); + amountCounter++; + if (mix is not { }) + continue; + + mix.AdjustMoles(gas, mols); + mix.Temperature += temp; + + if (amountCounter >= count) + return; + } + } + + private void GasProducerPulse(EntityUid uid, PsionicComponent component, AnomalyPowerActionEvent args) + { + var xform = Transform(uid); + if (!TryComp(xform.GridUid, out var grid)) + return; + + var gas = args.Gas!.Value.ReleasedGas; + var mols = args.Gas!.Value.MoleAmount * component.CurrentAmplification; + var radius = args.Gas!.Value.SpawnRadius * component.CurrentAmplification; + var count = args.Gas!.Value.TileCount * component.CurrentDampening; + var temp = args.Gas!.Value.TempChange * component.CurrentDampening; + var localpos = xform.Coordinates.Position; + var tilerefs = grid.GetLocalTilesIntersecting( + new Box2(localpos + new Vector2(-radius, -radius), localpos + new Vector2(radius, radius))).ToArray(); + + if (tilerefs.Length == 0) + return; + + var mixture = _atmosphere.GetTileMixture((uid, xform), true); + if (mixture != null) + { + mixture.AdjustMoles(gas, mols); + mixture.Temperature += temp; + } + + if (count == 0) + return; + + _random.Shuffle(tilerefs); + var amountCounter = 0; + foreach (var tileref in tilerefs) + { + var mix = _atmosphere.GetTileMixture(xform.GridUid, xform.MapUid, tileref.GridIndices, true); + amountCounter++; + if (mix is not { }) + continue; + + mix.AdjustMoles(gas, mols); + mix.Temperature += temp; + + if (amountCounter >= count) + return; + } + } +} \ No newline at end of file diff --git a/Content.Server/Abilities/Psionics/Abilities/AnomalyPowerSystem.Gravity.cs b/Content.Server/Abilities/Psionics/Abilities/AnomalyPowerSystem.Gravity.cs new file mode 100644 index 00000000000..532cb846d4b --- /dev/null +++ b/Content.Server/Abilities/Psionics/Abilities/AnomalyPowerSystem.Gravity.cs @@ -0,0 +1,78 @@ +using Content.Shared.Abilities.Psionics; +using Content.Shared.Actions.Events; +using Robust.Shared.Physics.Components; +using Content.Shared.Physics; +using System.Linq; +using Robust.Shared.Map; +using Robust.Shared.Map.Components; + +namespace Content.Server.Abilities.Psionics; + +public sealed partial class AnomalyPowerSystem +{ + private void DoGravityAnomalyEffects(EntityUid uid, PsionicComponent component, AnomalyPowerActionEvent args, bool overcharged = false) + { + if (args.Gravity is null) + return; + + if (overcharged) + GravitySupercrit(uid, component, args); + else GravityPulse(uid, component, args); + } + + private void GravitySupercrit(EntityUid uid, PsionicComponent component, AnomalyPowerActionEvent args) + { + var xform = Transform(uid); + if (!TryComp(xform.GridUid, out MapGridComponent? grid)) + return; + + var gravity = args.Gravity!.Value; + var worldPos = _xform.GetWorldPosition(xform); + var tileref = _mapSystem.GetTilesIntersecting( + xform.GridUid.Value, + grid, + new Circle(worldPos, gravity.SpaceRange)) + .ToArray(); + + var tiles = tileref.Select(t => (t.GridIndices, Tile.Empty)).ToList(); + _mapSystem.SetTiles(xform.GridUid.Value, grid, tiles); + + var range = gravity.MaxThrowRange * component.CurrentDampening; + var strength = gravity.MaxThrowStrength * component.CurrentAmplification; + var lookup = _lookup.GetEntitiesInRange(uid, range, LookupFlags.Dynamic | LookupFlags.Sundries); + var xformQuery = GetEntityQuery(); + var physQuery = GetEntityQuery(); + + foreach (var ent in lookup) + { + if (physQuery.TryGetComponent(ent, out var phys) + && (phys.CollisionMask & (int) CollisionGroup.GhostImpassable) != 0) + continue; + + var foo = _xform.GetWorldPosition(ent, xformQuery) - worldPos; + _throwing.TryThrow(ent, foo * 5, strength, uid, 0); + } + } + + private void GravityPulse(EntityUid uid, PsionicComponent component, AnomalyPowerActionEvent args) + { + var gravity = args.Gravity!.Value; + var xform = Transform(uid); + var range = gravity.MaxThrowRange * component.CurrentDampening; + var strength = gravity.MaxThrowStrength * component.CurrentAmplification; + var lookup = _lookup.GetEntitiesInRange(uid, range, LookupFlags.Dynamic | LookupFlags.Sundries); + var xformQuery = GetEntityQuery(); + var worldPos = _xform.GetWorldPosition(xform, xformQuery); + var physQuery = GetEntityQuery(); + + foreach (var ent in lookup) + { + if (physQuery.TryGetComponent(ent, out var phys) + && (phys.CollisionMask & (int) CollisionGroup.GhostImpassable) != 0) + continue; + + var foo = _xform.GetWorldPosition(ent, xformQuery) - worldPos; + _throwing.TryThrow(ent, foo * 10, strength, uid, 0); + } + } +} \ No newline at end of file diff --git a/Content.Server/Abilities/Psionics/Abilities/AnomalyPowerSystem.Injection.cs b/Content.Server/Abilities/Psionics/Abilities/AnomalyPowerSystem.Injection.cs new file mode 100644 index 00000000000..e2b11392718 --- /dev/null +++ b/Content.Server/Abilities/Psionics/Abilities/AnomalyPowerSystem.Injection.cs @@ -0,0 +1,78 @@ +using Content.Shared.Abilities.Psionics; +using Content.Shared.Actions.Events; +using Content.Shared.Chemistry.Components.SolutionManager; +using System.Linq; + +namespace Content.Server.Abilities.Psionics; + +public sealed partial class AnomalyPowerSystem +{ + private EntityQuery _injectableQuery; + private void DoInjectionAnomalyEffects(EntityUid uid, PsionicComponent component, AnomalyPowerActionEvent args, bool overcharged = false) + { + if (args.Injection is null) + return; + + if (overcharged) + InjectionSupercrit(uid, component, args); + else InjectionPulse(uid, component, args); + } + + private void InjectionSupercrit(EntityUid uid, PsionicComponent component, AnomalyPowerActionEvent args) + { + var injection = args.Injection!.Value; + var injectRadius = injection.SuperCriticalInjectRadius * component.CurrentAmplification; + var maxInject = injection.SuperCriticalSolutionInjection * component.CurrentDampening; + + if (!_solutionContainer.TryGetSolution(uid, injection.Solution, out _, out var sol)) + return; + + //We get all the entity in the radius into which the reagent will be injected. + var xformQuery = GetEntityQuery(); + var xform = xformQuery.GetComponent(uid); + var allEnts = _lookup.GetEntitiesInRange(_xform.GetMapCoordinates(uid), injectRadius) + .Select(x => x.Owner).ToList(); + + //for each matching entity found + foreach (var ent in allEnts) + { + if (!_solutionContainer.TryGetInjectableSolution(ent, out var injectable, out _) + || !_injectableQuery.TryGetComponent(ent, out var injEnt) + || !_solutionContainer.TryTransferSolution(injectable.Value, sol, maxInject)) + continue; + + //Spawn Effect + var uidXform = Transform(ent); + Spawn(injection.VisualEffectPrototype, uidXform.Coordinates); + } + } + + private void InjectionPulse(EntityUid uid, PsionicComponent component, AnomalyPowerActionEvent args) + { + var injection = args.Injection!.Value; + var injectRadius = injection.InjectRadius * component.CurrentAmplification; + var maxInject = injection.MaxSolutionInjection * component.CurrentDampening; + + if (!_solutionContainer.TryGetSolution(uid, injection.Solution, out _, out var sol)) + return; + + //We get all the entity in the radius into which the reagent will be injected. + var xformQuery = GetEntityQuery(); + var xform = xformQuery.GetComponent(uid); + var allEnts = _lookup.GetEntitiesInRange(_xform.GetMapCoordinates(uid), injectRadius) + .Select(x => x.Owner).ToList(); + + //for each matching entity found + foreach (var ent in allEnts) + { + if (!_solutionContainer.TryGetInjectableSolution(ent, out var injectable, out _) + || !_injectableQuery.TryGetComponent(ent, out var injEnt) + || !_solutionContainer.TryTransferSolution(injectable.Value, sol, maxInject)) + continue; + + //Spawn Effect + var uidXform = Transform(ent); + Spawn(injection.VisualEffectPrototype, uidXform.Coordinates); + } + } +} \ No newline at end of file diff --git a/Content.Server/Abilities/Psionics/Abilities/AnomalyPowerSystem.Puddle.cs b/Content.Server/Abilities/Psionics/Abilities/AnomalyPowerSystem.Puddle.cs new file mode 100644 index 00000000000..a53b5e4930f --- /dev/null +++ b/Content.Server/Abilities/Psionics/Abilities/AnomalyPowerSystem.Puddle.cs @@ -0,0 +1,38 @@ +using Content.Shared.Abilities.Psionics; +using Content.Shared.Actions.Events; + +namespace Content.Server.Abilities.Psionics; + +public sealed partial class AnomalyPowerSystem +{ + private void DoPuddleAnomalyEffects(EntityUid uid, PsionicComponent component, AnomalyPowerActionEvent args, bool overcharged = false) + { + if (args.Puddle is null) + return; + + if (overcharged) + PuddleSupercrit(uid, args); + else PuddlePulse(uid, component, args); + } + + private void PuddleSupercrit(EntityUid uid, AnomalyPowerActionEvent args) + { + var puddle = args.Puddle!.Value; + if (!_solutionContainer.TryGetSolution(uid, puddle.Solution, out _, out var sol)) + return; + + var xform = Transform(uid); + _puddle.TrySpillAt(xform.Coordinates, sol, out _); + } + + private void PuddlePulse(EntityUid uid, PsionicComponent component, AnomalyPowerActionEvent args) + { + var puddle = args.Puddle!.Value; + if (!_solutionContainer.TryGetSolution(uid, puddle.Solution, out var sol, out _)) + return; + + var xform = Transform(uid); + var puddleSol = _solutionContainer.SplitSolution(sol.Value, puddle.MaxPuddleSize * component.CurrentAmplification); + _puddle.TrySplashSpillAt(uid, xform.Coordinates, puddleSol, out _); + } +} \ No newline at end of file diff --git a/Content.Server/Abilities/Psionics/Abilities/AnomalyPowerSystem.Pyroclastic.cs b/Content.Server/Abilities/Psionics/Abilities/AnomalyPowerSystem.Pyroclastic.cs new file mode 100644 index 00000000000..0ff6fc28b83 --- /dev/null +++ b/Content.Server/Abilities/Psionics/Abilities/AnomalyPowerSystem.Pyroclastic.cs @@ -0,0 +1,49 @@ +using Content.Shared.Abilities.Psionics; +using Content.Shared.Actions.Events; +using Content.Server.Atmos.Components; +using Robust.Shared.Map; + +namespace Content.Server.Abilities.Psionics; + +public sealed partial class AnomalyPowerSystem +{ + private void DoPyroclasticAnomalyEffects(EntityUid uid, PsionicComponent component, AnomalyPowerActionEvent args, bool overcharged = false) + { + if (args.Pyroclastic is null) + return; + + if (overcharged) + PyroclasticSupercrit(uid, component, args); + else PyroclasticPulse(uid, component, args); + } + + private void PyroclasticSupercrit(EntityUid uid, PsionicComponent component, AnomalyPowerActionEvent args) + { + var pyroclastic = args.Pyroclastic!.Value; + var xform = Transform(uid); + var ignitionRadius = pyroclastic.SupercritMaximumIgnitionRadius * component.CurrentAmplification; + IgniteNearby(uid, xform.Coordinates, component.CurrentAmplification, ignitionRadius); + } + + private void PyroclasticPulse(EntityUid uid, PsionicComponent component, AnomalyPowerActionEvent args) + { + var pyroclastic = args.Pyroclastic!.Value; + var xform = Transform(uid); + var ignitionRadius = pyroclastic.MaximumIgnitionRadius * component.CurrentAmplification; + IgniteNearby(uid, xform.Coordinates, component.CurrentAmplification, ignitionRadius); + } + + private void IgniteNearby(EntityUid uid, EntityCoordinates coordinates, float severity, float radius) + { + var flammables = new HashSet>(); + _lookup.GetEntitiesInRange(coordinates, radius, flammables); + + foreach (var flammable in flammables) + { + var ent = flammable.Owner; + var stackAmount = 1 + (int) (severity / 0.15f); + _flammable.AdjustFireStacks(ent, stackAmount, flammable); + _flammable.Ignite(ent, uid, flammable); + } + } +} \ No newline at end of file diff --git a/Content.Server/Abilities/Psionics/Abilities/DarkSwapSystem.cs b/Content.Server/Abilities/Psionics/Abilities/DarkSwapSystem.cs new file mode 100644 index 00000000000..fd394e0a228 --- /dev/null +++ b/Content.Server/Abilities/Psionics/Abilities/DarkSwapSystem.cs @@ -0,0 +1,58 @@ +using Content.Shared.Abilities.Psionics; +using Content.Shared.Actions.Events; +using Content.Shared.Shadowkin; +using Content.Shared.Physics; +using Content.Shared.Popups; +using Content.Shared.Maps; +using Robust.Server.GameObjects; + +namespace Content.Server.Abilities.Psionics +{ + public sealed class DarkSwapSystem : EntitySystem + { + [Dependency] private readonly SharedPsionicAbilitiesSystem _psionics = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] private readonly PhysicsSystem _physics = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnPowerUsed); + } + + private void OnPowerUsed(DarkSwapActionEvent args) + { + if (TryComp(args.Performer, out var ethereal)) + { + var tileref = Transform(args.Performer).Coordinates.GetTileRef(); + if (tileref != null + && _physics.GetEntitiesIntersectingBody(args.Performer, (int) CollisionGroup.Impassable).Count > 0) + { + _popup.PopupEntity(Loc.GetString("revenant-in-solid"), args.Performer, args.Performer); + return; + } + + if (_psionics.OnAttemptPowerUse(args.Performer, "DarkSwap", args.ManaCost / 2, args.CheckInsulation)) + { + RemComp(args.Performer, ethereal); + args.Handled = true; + } + } + else if (_psionics.OnAttemptPowerUse(args.Performer, "DarkSwap", args.ManaCost, args.CheckInsulation)) + { + var newethereal = EnsureComp(args.Performer); + newethereal.Darken = true; + + SpawnAtPosition("ShadowkinShadow", Transform(args.Performer).Coordinates); + SpawnAtPosition("EffectFlashShadowkinDarkSwapOn", Transform(args.Performer).Coordinates); + + args.Handled = true; + } + + if (args.Handled) + _psionics.LogPowerUsed(args.Performer, "DarkSwap", 0, 0); + } + } +} + + diff --git a/Content.Server/Abilities/Psionics/Abilities/DispelPowerSystem.cs b/Content.Server/Abilities/Psionics/Abilities/DispelPowerSystem.cs index cdfda7c8013..ecffc86c76d 100644 --- a/Content.Server/Abilities/Psionics/Abilities/DispelPowerSystem.cs +++ b/Content.Server/Abilities/Psionics/Abilities/DispelPowerSystem.cs @@ -38,6 +38,9 @@ public override void Initialize() private void OnPowerUsed(DispelPowerActionEvent args) { + if (!_psionics.OnAttemptPowerUse(args.Performer, "dispel")) + return; + var ev = new DispelledEvent(); RaiseLocalEvent(args.Target, ev, false); diff --git a/Content.Server/Abilities/Psionics/Abilities/HealOtherPowerSystem.cs b/Content.Server/Abilities/Psionics/Abilities/HealOtherPowerSystem.cs new file mode 100644 index 00000000000..6a2e90dd88d --- /dev/null +++ b/Content.Server/Abilities/Psionics/Abilities/HealOtherPowerSystem.cs @@ -0,0 +1,170 @@ +using Robust.Shared.Player; +using Content.Server.DoAfter; +using Content.Shared.Abilities.Psionics; +using Content.Shared.Damage; +using Content.Shared.DoAfter; +using Content.Shared.Popups; +using Content.Shared.Psionics.Events; +using Content.Shared.Examine; +using static Content.Shared.Examine.ExamineSystemShared; +using Robust.Shared.Timing; +using Content.Shared.Actions.Events; +using Robust.Server.Audio; +using Content.Server.Atmos.Rotting; +using Content.Shared.Mobs.Systems; +using Content.Shared.Mobs; +using Content.Shared.Mobs.Components; +using Content.Shared.Psionics.Glimmer; + +namespace Content.Server.Abilities.Psionics; + +public sealed class RevivifyPowerSystem : EntitySystem +{ + [Dependency] private readonly AudioSystem _audioSystem = default!; + [Dependency] private readonly DoAfterSystem _doAfterSystem = default!; + [Dependency] private readonly SharedPopupSystem _popupSystem = default!; + [Dependency] private readonly SharedPsionicAbilitiesSystem _psionics = default!; + [Dependency] private readonly IGameTiming _gameTiming = default!; + [Dependency] private readonly ExamineSystemShared _examine = default!; + [Dependency] private readonly DamageableSystem _damageable = default!; + [Dependency] private readonly RottingSystem _rotting = default!; + [Dependency] private readonly MobThresholdSystem _mobThreshold = default!; + [Dependency] private readonly MobStateSystem _mobState = default!; + [Dependency] private readonly GlimmerSystem _glimmer = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnPowerUsed); + SubscribeLocalEvent(OnDispelled); + SubscribeLocalEvent(OnDoAfter); + } + + + private void OnPowerUsed(EntityUid uid, PsionicComponent component, PsionicHealOtherPowerActionEvent args) + { + if (!_psionics.OnAttemptPowerUse(args.Performer, args.PowerName)) + return; + + args.ModifiedAmplification = _psionics.ModifiedAmplification(uid, component); + args.ModifiedDampening = _psionics.ModifiedDampening(uid, component); + + if (!args.Immediate) + AttemptDoAfter(uid, component, args); + else ActivatePower(uid, component, args); + + if (args.PopupText is not null + && _glimmer.Glimmer > args.GlimmerPopupThreshold * args.ModifiedDampening) + _popupSystem.PopupEntity(Loc.GetString(args.PopupText, ("entity", uid)), uid, + Filter.Pvs(uid).RemoveWhereAttachedEntity(entity => !_examine.InRangeUnOccluded(uid, entity, ExamineRange, null)), + true, + args.PopupType); + + if (args.PlaySound + && _glimmer.Glimmer > args.GlimmerSoundThreshold * args.ModifiedDampening) + _audioSystem.PlayPvs(args.SoundUse, uid, args.AudioParams); + + // Sanitize the Glimmer inputs because otherwise the game will crash if someone makes MaxGlimmer lower than MinGlimmer. + var minGlimmer = (int) Math.Round(MathF.MinMagnitude(args.MinGlimmer, args.MaxGlimmer) + * args.ModifiedAmplification - args.ModifiedDampening); + var maxGlimmer = (int) Math.Round(MathF.MaxMagnitude(args.MinGlimmer, args.MaxGlimmer) + * args.ModifiedAmplification - args.ModifiedDampening); + + _psionics.LogPowerUsed(uid, args.PowerName, minGlimmer, maxGlimmer); + args.Handled = true; + } + + private void AttemptDoAfter(EntityUid uid, PsionicComponent component, PsionicHealOtherPowerActionEvent args) + { + var ev = new PsionicHealOtherDoAfterEvent(_gameTiming.CurTime); + if (args.HealingAmount is not null) + ev.HealingAmount = args.HealingAmount; + if (args.RotReduction is not null) + ev.RotReduction = args.RotReduction.Value; + + ev.ModifiedAmplification = args.ModifiedAmplification; + ev.ModifiedDampening = args.ModifiedDampening; + ev.DoRevive = args.DoRevive; + var doAfterArgs = new DoAfterArgs(EntityManager, uid, args.UseDelay, ev, uid, target: args.Target) + { + BreakOnUserMove = args.BreakOnUserMove, + BreakOnTargetMove = args.BreakOnTargetMove, + Hidden = _glimmer.Glimmer > args.GlimmerDoAfterVisibilityThreshold * args.ModifiedDampening, + }; + + if (!_doAfterSystem.TryStartDoAfter(doAfterArgs, out var doAfterId)) + return; + + component.DoAfter = doAfterId; + } + + private void OnDispelled(EntityUid uid, PsionicComponent component, DispelledEvent args) + { + if (component.DoAfter is null) + return; + + _doAfterSystem.Cancel(component.DoAfter); + component.DoAfter = null; + args.Handled = true; + } + + private void OnDoAfter(EntityUid uid, PsionicComponent component, PsionicHealOtherDoAfterEvent args) + { + // It's entirely possible for the caster to stop being Psionic(due to mindbreaking) mid cast + if (component is null) + return; + component.DoAfter = null; + + // The target can also cease existing mid-cast + // Or the DoAfter is cancelled(such as if the caster moves). + if (args.Target is null + || args.Cancelled) + return; + + if (args.RotReduction is not null) + _rotting.ReduceAccumulator(args.Target.Value, TimeSpan.FromSeconds(args.RotReduction.Value * args.ModifiedAmplification)); + + if (!TryComp(args.Target.Value, out var damageableComponent)) + return; + + if (args.HealingAmount is not null) + _damageable.TryChangeDamage(args.Target.Value, args.HealingAmount * args.ModifiedAmplification, true, false, damageableComponent, uid); + + if (!args.DoRevive + || _rotting.IsRotten(args.Target.Value) + || !TryComp(args.Target.Value, out var mob) + || !_mobState.IsDead(args.Target.Value, mob) + || !_mobThreshold.TryGetThresholdForState(args.Target.Value, MobState.Dead, out var threshold) + || damageableComponent.TotalDamage > threshold) + return; + + _mobState.ChangeMobState(args.Target.Value, MobState.Critical, mob, uid); + } + + // This would be the same thing as OnDoAfter, except that here the target isn't nullable, so I have to reuse code with different arguments. + private void ActivatePower(EntityUid uid, PsionicComponent component, PsionicHealOtherPowerActionEvent args) + { + if (component is null) + return; + + if (args.RotReduction is not null) + _rotting.ReduceAccumulator(args.Target, TimeSpan.FromSeconds(args.RotReduction.Value * args.ModifiedAmplification)); + + if (!TryComp(args.Target, out var damageableComponent)) + return; + + if (args.HealingAmount is not null) + _damageable.TryChangeDamage(args.Target, args.HealingAmount * args.ModifiedAmplification, true, false, damageableComponent, uid); + + if (!args.DoRevive + || _rotting.IsRotten(args.Target) + || !TryComp(args.Target, out var mob) + || !_mobState.IsDead(args.Target, mob) + || !_mobThreshold.TryGetThresholdForState(args.Target, MobState.Dead, out var threshold) + || damageableComponent.TotalDamage > threshold) + return; + + _mobState.ChangeMobState(args.Target, MobState.Critical, mob, uid); + } +} diff --git a/Content.Server/Abilities/Psionics/Abilities/MetapsionicPowerSystem.cs b/Content.Server/Abilities/Psionics/Abilities/MetapsionicPowerSystem.cs index 58d7d804da6..24ef344f638 100644 --- a/Content.Server/Abilities/Psionics/Abilities/MetapsionicPowerSystem.cs +++ b/Content.Server/Abilities/Psionics/Abilities/MetapsionicPowerSystem.cs @@ -19,6 +19,9 @@ public override void Initialize() private void OnPowerUsed(EntityUid uid, MetapsionicPowerComponent component, MetapsionicPowerActionEvent args) { + if (!_psionics.OnAttemptPowerUse(args.Performer, "metapsionic pulse")) + return; + foreach (var entity in _lookup.GetEntitiesInRange(uid, component.Range)) { if (HasComp(entity) && entity != uid && !HasComp(entity) && diff --git a/Content.Server/Abilities/Psionics/Abilities/MindSwapPowerSystem.cs b/Content.Server/Abilities/Psionics/Abilities/MindSwapPowerSystem.cs index 2d106706c67..869bf269ab6 100644 --- a/Content.Server/Abilities/Psionics/Abilities/MindSwapPowerSystem.cs +++ b/Content.Server/Abilities/Psionics/Abilities/MindSwapPowerSystem.cs @@ -38,7 +38,8 @@ public override void Initialize() private void OnPowerUsed(MindSwapPowerActionEvent args) { - if (!(TryComp(args.Target, out var damageable) && damageable.DamageContainerID == "Biological")) + if (!_psionics.OnAttemptPowerUse(args.Performer, "mind swap") + || !(TryComp(args.Target, out var damageable) && damageable.DamageContainerID == "Biological")) return; Swap(args.Performer, args.Target); @@ -116,8 +117,8 @@ private void OnGhostAttempt(GhostAttemptHandleEvent args) private void OnSwapInit(EntityUid uid, MindSwappedComponent component, ComponentInit args) { - _actions.AddAction(uid, ref component.MindSwapReturnActionEntity, component.MindSwapReturnActionId ); - _actions.TryGetActionData( component.MindSwapReturnActionEntity, out var actionData ); + _actions.AddAction(uid, ref component.MindSwapReturnActionEntity, component.MindSwapReturnActionId); + _actions.TryGetActionData(component.MindSwapReturnActionEntity, out var actionData); if (actionData is { UseDelay: not null }) _actions.StartUseDelay(component.MindSwapReturnActionEntity); } @@ -132,11 +133,13 @@ public void Swap(EntityUid performer, EntityUid target, bool end = false) MindComponent? targetMind = null; // This is here to prevent missing MindContainerComponent Resolve errors. - if(!_mindSystem.TryGetMind(performer, out var performerMindId, out performerMind)){ + if (!_mindSystem.TryGetMind(performer, out var performerMindId, out performerMind)) + { performerMind = null; }; - if(!_mindSystem.TryGetMind(target, out var targetMindId, out targetMind)){ + if (!_mindSystem.TryGetMind(target, out var targetMindId, out targetMind)) + { targetMind = null; }; //This is a terrible way to 'unattach' minds. I wanted to use UnVisit but in TransferTo's code they say diff --git a/Content.Server/Abilities/Psionics/Abilities/NoosphericZapPowerSystem.cs b/Content.Server/Abilities/Psionics/Abilities/NoosphericZapPowerSystem.cs index c2f59206392..22c4f2e5005 100644 --- a/Content.Server/Abilities/Psionics/Abilities/NoosphericZapPowerSystem.cs +++ b/Content.Server/Abilities/Psionics/Abilities/NoosphericZapPowerSystem.cs @@ -22,6 +22,9 @@ public override void Initialize() private void OnPowerUsed(NoosphericZapPowerActionEvent args) { + if (!_psionics.OnAttemptPowerUse(args.Performer, "noospheric zap")) + return; + _beam.TryCreateBeam(args.Performer, args.Target, "LightningNoospheric"); _stunSystem.TryParalyze(args.Target, TimeSpan.FromSeconds(5), false); diff --git a/Content.Server/Abilities/Psionics/Abilities/PsionicInvisibilityPowerSystem.cs b/Content.Server/Abilities/Psionics/Abilities/PsionicInvisibilityPowerSystem.cs index 19658629545..c6a01912a08 100644 --- a/Content.Server/Abilities/Psionics/Abilities/PsionicInvisibilityPowerSystem.cs +++ b/Content.Server/Abilities/Psionics/Abilities/PsionicInvisibilityPowerSystem.cs @@ -31,13 +31,14 @@ public override void Initialize() private void OnPowerUsed(EntityUid uid, PsionicInvisibilityPowerComponent component, PsionicInvisibilityPowerActionEvent args) { - if (HasComp(uid)) + if (!_psionics.OnAttemptPowerUse(args.Performer, "psionic invisibility") + || HasComp(uid)) return; ToggleInvisibility(args.Performer); var action = Spawn(PsionicInvisibilityUsedComponent.PsionicInvisibilityUsedActionPrototype); _actions.AddAction(uid, action, action); - _actions.TryGetActionData( action, out var actionData ); + _actions.TryGetActionData(action, out var actionData); if (actionData is { UseDelay: not null }) _actions.StartUseDelay(action); @@ -93,7 +94,8 @@ public void ToggleInvisibility(EntityUid uid) if (!HasComp(uid)) { EnsureComp(uid); - } else + } + else { RemComp(uid); } diff --git a/Content.Server/Abilities/Psionics/Abilities/PsionicRegenerationPowerSystem.cs b/Content.Server/Abilities/Psionics/Abilities/PsionicRegenerationPowerSystem.cs index 17e9249e655..d7ad2d49aba 100644 --- a/Content.Server/Abilities/Psionics/Abilities/PsionicRegenerationPowerSystem.cs +++ b/Content.Server/Abilities/Psionics/Abilities/PsionicRegenerationPowerSystem.cs @@ -40,6 +40,9 @@ public override void Initialize() private void OnPowerUsed(EntityUid uid, PsionicRegenerationPowerComponent component, PsionicRegenerationPowerActionEvent args) { + if (!_psionics.OnAttemptPowerUse(args.Performer, "psionic regeneration")) + return; + var ev = new PsionicRegenerationDoAfterEvent(_gameTiming.CurTime); var doAfterArgs = new DoAfterArgs(EntityManager, uid, component.UseDelay, ev, uid); diff --git a/Content.Server/Abilities/Psionics/Abilities/PyrokinesisPowerSystem.cs b/Content.Server/Abilities/Psionics/Abilities/PyrokinesisPowerSystem.cs index 3740822667b..4a750836020 100644 --- a/Content.Server/Abilities/Psionics/Abilities/PyrokinesisPowerSystem.cs +++ b/Content.Server/Abilities/Psionics/Abilities/PyrokinesisPowerSystem.cs @@ -19,6 +19,9 @@ public override void Initialize() } private void OnPowerUsed(PyrokinesisPowerActionEvent args) { + if (!_psionics.OnAttemptPowerUse(args.Performer, "pyrokinesis")) + return; + if (!TryComp(args.Target, out var flammableComponent)) return; diff --git a/Content.Server/Abilities/Psionics/Abilities/TelegnosisPowerSystem.cs b/Content.Server/Abilities/Psionics/Abilities/TelegnosisPowerSystem.cs index 7a3f663a43f..abbbdfacc56 100644 --- a/Content.Server/Abilities/Psionics/Abilities/TelegnosisPowerSystem.cs +++ b/Content.Server/Abilities/Psionics/Abilities/TelegnosisPowerSystem.cs @@ -18,6 +18,9 @@ public override void Initialize() private void OnPowerUsed(EntityUid uid, TelegnosisPowerComponent component, TelegnosisPowerActionEvent args) { + if (!_psionics.OnAttemptPowerUse(args.Performer, "telegnosis")) + return; + var projection = Spawn(component.Prototype, Transform(uid).Coordinates); Transform(projection).AttachToGridOrMap(); _mindSwap.Swap(uid, projection); diff --git a/Content.Server/Abilities/Psionics/AnomalyPowerSystem.cs b/Content.Server/Abilities/Psionics/AnomalyPowerSystem.cs new file mode 100644 index 00000000000..ff9910c400d --- /dev/null +++ b/Content.Server/Abilities/Psionics/AnomalyPowerSystem.cs @@ -0,0 +1,119 @@ +using Content.Shared.Abilities.Psionics; +using Content.Shared.Actions.Events; +using Content.Shared.Psionics.Glimmer; +using Robust.Shared.Random; +using Content.Shared.Anomaly; +using Robust.Shared.Audio.Systems; +using Content.Shared.Actions; +using Content.Shared.Damage; +using Content.Server.Popups; +using Content.Shared.Administration.Logs; +using Content.Server.Lightning; +using Content.Server.Emp; +using Content.Server.Explosion.EntitySystems; +using Content.Server.Atmos.EntitySystems; +using Content.Shared.Throwing; +using Content.Server.Chemistry.Containers.EntitySystems; +using Content.Server.Fluids.EntitySystems; + +namespace Content.Server.Abilities.Psionics; + +public sealed partial class AnomalyPowerSystem : EntitySystem +{ + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly GlimmerSystem _glimmerSystem = default!; + [Dependency] private readonly SharedAnomalySystem _anomalySystem = default!; + [Dependency] private readonly SharedMapSystem _mapSystem = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly SharedPsionicAbilitiesSystem _psionics = default!; + [Dependency] private readonly SharedActionsSystem _actions = default!; + [Dependency] private readonly DamageableSystem _damageable = default!; + [Dependency] private readonly PopupSystem _popup = default!; + [Dependency] private readonly EntityLookupSystem _lookup = default!; + [Dependency] private readonly SharedTransformSystem _xform = default!; + [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!; + [Dependency] private readonly LightningSystem _lightning = default!; + [Dependency] private readonly EmpSystem _emp = default!; + [Dependency] private readonly ExplosionSystem _boom = default!; + [Dependency] private readonly AtmosphereSystem _atmosphere = default!; + [Dependency] private readonly ThrowingSystem _throwing = default!; + [Dependency] private readonly SolutionContainerSystem _solutionContainer = default!; + [Dependency] private readonly PuddleSystem _puddle = default!; + [Dependency] private readonly FlammableSystem _flammable = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnPowerUsed); + } + + private void OnPowerUsed(EntityUid uid, PsionicComponent component, AnomalyPowerActionEvent args) + { + if (!_psionics.OnAttemptPowerUse(args.Performer, args.Settings.PowerName, args.Settings.ManaCost, args.Settings.CheckInsulation)) + return; + + var overcharged = args.Settings.DoSupercritical ? _glimmerSystem.Glimmer * component.CurrentAmplification + > Math.Min(args.Settings.SupercriticalThreshold * component.CurrentDampening, args.Settings.MaxSupercriticalThreshold) + : false; + + // Behold the wall of nullable logic gates. + DoBluespaceAnomalyEffects(uid, component, args, overcharged); + DoElectricityAnomalyEffects(uid, component, args, overcharged); + DoEntityAnomalyEffects(uid, component, args, overcharged); + DoExplosionAnomalyEffects(uid, component, args, overcharged); + DoGasProducerAnomalyEffects(uid, component, args, overcharged); + DoGravityAnomalyEffects(uid, component, args, overcharged); + DoInjectionAnomalyEffects(uid, component, args, overcharged); + DoPuddleAnomalyEffects(uid, component, args, overcharged); + DoPyroclasticAnomalyEffects(uid, component, args, overcharged); + DoAnomalySounds(uid, component, args, overcharged); + DoGlimmerEffects(uid, component, args, overcharged); + + if (overcharged) + DoOverchargedEffects(uid, component, args); + + args.Handled = true; + } + + public void DoAnomalySounds(EntityUid uid, PsionicComponent component, AnomalyPowerActionEvent args, bool overcharged = false) + { + if (overcharged && args.Settings.SupercriticalSound is not null) + { + _audio.PlayPvs(args.Settings.SupercriticalSound, uid); + return; + } + + if (args.Settings.PulseSound is null + || _glimmerSystem.Glimmer < args.Settings.GlimmerSoundThreshold * component.CurrentDampening) + return; + + _audio.PlayEntity(args.Settings.PulseSound, uid, uid); + } + + public void DoGlimmerEffects(EntityUid uid, PsionicComponent component, AnomalyPowerActionEvent args, bool overcharged = false) + { + var minGlimmer = (int) Math.Round(MathF.MinMagnitude(args.Settings.MinGlimmer, args.Settings.MaxGlimmer) + * (overcharged ? args.Settings.SupercriticalGlimmerMultiplier : 1) + * component.CurrentAmplification - component.CurrentDampening); + var maxGlimmer = (int) Math.Round(MathF.MaxMagnitude(args.Settings.MinGlimmer, args.Settings.MaxGlimmer) + * (overcharged ? args.Settings.SupercriticalGlimmerMultiplier : 1) + * component.CurrentAmplification - component.CurrentDampening); + + _psionics.LogPowerUsed(uid, args.Settings.PowerName, minGlimmer, maxGlimmer); + } + + public void DoOverchargedEffects(EntityUid uid, PsionicComponent component, AnomalyPowerActionEvent args) + { + if (args.Settings.OverchargeFeedback is not null + && Loc.TryGetString(args.Settings.OverchargeFeedback, out var popup)) + _popup.PopupEntity(popup, uid, uid); + + if (args.Settings.OverchargeRecoil is not null + && TryComp(uid, out var damageable)) + _damageable.TryChangeDamage(uid, args.Settings.OverchargeRecoil / component.CurrentDampening, true, true, damageable, uid); + + if (args.Settings.OverchargeCooldown > 0) + foreach (var action in component.Actions) + _actions.SetCooldown(action.Value, TimeSpan.FromSeconds(args.Settings.OverchargeCooldown / component.CurrentDampening)); + } +} diff --git a/Content.Server/Abilities/Psionics/PsionicAbilitiesSystem.cs b/Content.Server/Abilities/Psionics/PsionicAbilitiesSystem.cs index 32e51d3c101..bdf295615ea 100644 --- a/Content.Server/Abilities/Psionics/PsionicAbilitiesSystem.cs +++ b/Content.Server/Abilities/Psionics/PsionicAbilitiesSystem.cs @@ -28,6 +28,7 @@ public sealed class PsionicAbilitiesSystem : EntitySystem [Dependency] private readonly ISerializationManager _serialization = default!; [Dependency] private readonly IPlayerManager _playerManager = default!; [Dependency] private readonly IChatManager _chatManager = default!; + [Dependency] private readonly PsionicFamiliarSystem _psionicFamiliar = default!; private ProtoId _pool = "RandomPsionicPowerPool"; private const string GenericInitializationMessage = "generic-power-initialization-feedback"; @@ -58,6 +59,7 @@ private void OnPsionicShutdown(EntityUid uid, PsionicComponent component, Compon || HasComp(uid)) return; + KillFamiliars(component); RemoveAllPsionicPowers(uid); } @@ -122,6 +124,8 @@ public void InitializePsionicPower(EntityUid uid, PsionicPowerPrototype proto, P AddPsionicStatSources(proto, psionic); RefreshPsionicModifiers(uid, psionic); SendFeedbackMessage(uid, proto, playFeedback); + UpdatePowerSlots(psionic); + //UpdatePsionicDanger(uid, psionic); // TODO: After Glimmer Refactor //SendFeedbackAudio(uid, proto, playPopup); // TODO: This one is coming next! } @@ -212,8 +216,13 @@ public void RemoveAllPsionicPowers(EntityUid uid, bool mindbreak = false) _popups.PopupEntity(Loc.GetString(psionic.MindbreakingFeedback, ("entity", MetaData(uid).EntityName)), uid, uid, PopupType.MediumCaution); + KillFamiliars(psionic); RemComp(uid); RemComp(uid); + + var ev = new OnMindbreakEvent(); + RaiseLocalEvent(uid, ref ev); + return; } RefreshPsionicModifiers(uid, psionic); @@ -297,6 +306,27 @@ private void SendFeedbackMessage(EntityUid uid, PsionicPowerPrototype proto, boo session.Channel); } + private void UpdatePowerSlots(PsionicComponent psionic) + { + var slotsUsed = 0; + foreach (var power in psionic.ActivePowers) + slotsUsed += power.PowerSlotCost; + + psionic.PowerSlotsTaken = slotsUsed; + } + + /// + /// Psions over a certain power threshold become a glimmer source. This cannot be fully implemented until after I rework Glimmer + /// + //private void UpdatePsionicDanger(EntityUid uid, PsionicComponent psionic) + //{ + // if (psionic.PowerSlotsTaken <= psionic.PowerSlots) + // return; + // + // EnsureComp(uid, out var glimmerSource); + // glimmerSource.SecondsPerGlimmer = 10 / (psionic.PowerSlotsTaken - psionic.PowerSlots); + //} + /// /// Remove all Psychic Actions listed in an entity's Psionic Component. Unfortunately, removing actions associated with a specific Power Prototype is not supported. /// @@ -340,5 +370,20 @@ private void RemovePsionicStatSources(EntityUid uid, PsionicPowerPrototype proto RefreshPsionicModifiers(uid, psionic); } + + private void KillFamiliars(PsionicComponent component) + { + if (component.Familiars.Count <= 0) + return; + + foreach (var familiar in component.Familiars) + { + if (!TryComp(familiar, out var familiarComponent) + || !familiarComponent.DespawnOnMasterDeath) + continue; + + _psionicFamiliar.DespawnFamiliar(familiar, familiarComponent); + } + } } } diff --git a/Content.Server/Abilities/Psionics/PsionicFamiliarSystem.cs b/Content.Server/Abilities/Psionics/PsionicFamiliarSystem.cs new file mode 100644 index 00000000000..d382c1f2318 --- /dev/null +++ b/Content.Server/Abilities/Psionics/PsionicFamiliarSystem.cs @@ -0,0 +1,140 @@ +using Content.Server.NPC; +using Content.Server.NPC.Components; +using Content.Server.NPC.HTN; +using Content.Server.NPC.Systems; +using Content.Server.Popups; +using Content.Shared.Abilities.Psionics; +using Content.Shared.Actions.Events; +using Content.Shared.Interaction.Events; +using Content.Shared.Mobs; +using Robust.Shared.Map; +using System.Numerics; + +namespace Content.Server.Abilities.Psionics; + +public sealed partial class PsionicFamiliarSystem : EntitySystem +{ + [Dependency] private readonly SharedPsionicAbilitiesSystem _psionics = default!; + [Dependency] private readonly NpcFactionSystem _factions = default!; + [Dependency] private readonly NPCSystem _npc = default!; + [Dependency] private readonly HTNSystem _htn = default!; + [Dependency] private readonly PopupSystem _popup = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnSummon); + SubscribeLocalEvent(OnFamiliarShutdown); + SubscribeLocalEvent(OnFamiliarAttack); + SubscribeLocalEvent(OnFamiliarDeath); + } + + private void OnSummon(EntityUid uid, PsionicComponent psionicComponent, SummonPsionicFamiliarActionEvent args) + { + if (psionicComponent.Familiars.Count >= psionicComponent.FamiliarLimit + || !_psionics.OnAttemptPowerUse(args.Performer, args.PowerName, args.ManaCost, args.CheckInsulation) + || args.Handled || args.FamiliarProto is null) + return; + + args.Handled = true; + var familiar = Spawn(args.FamiliarProto, Transform(uid).Coordinates); + EnsureComp(familiar, out var familiarComponent); + familiarComponent.Master = uid; + psionicComponent.Familiars.Add(familiar); + Dirty(familiar, familiarComponent); + Dirty(uid, psionicComponent); + + InheritFactions(uid, familiar, familiarComponent); + HandleBlackboards(uid, familiar, args); + DoGlimmerEffects(uid, psionicComponent, args); + } + + private void InheritFactions(EntityUid uid, EntityUid familiar, PsionicFamiliarComponent familiarComponent) + { + if (!familiarComponent.InheritMasterFactions + || !TryComp(uid, out var masterFactions) + || masterFactions.Factions.Count <= 0) + return; + + EnsureComp(familiar, out var familiarFactions); + foreach (var faction in masterFactions.Factions) + { + if (familiarFactions.Factions.Contains(faction)) + continue; + + _factions.AddFaction(familiar, faction, true); + } + } + + private void HandleBlackboards(EntityUid master, EntityUid familiar, SummonPsionicFamiliarActionEvent args) + { + if (!args.FollowMaster + || !TryComp(familiar, out var htnComponent)) + return; + + _npc.SetBlackboard(familiar, NPCBlackboard.FollowTarget, new EntityCoordinates(master, Vector2.Zero), htnComponent); + _htn.Replan(htnComponent); + } + + private void DoGlimmerEffects(EntityUid uid, PsionicComponent component, SummonPsionicFamiliarActionEvent args) + { + if (!args.DoGlimmerEffects + || args.MinGlimmer == 0 && args.MaxGlimmer == 0) + return; + + var minGlimmer = (int) Math.Round(MathF.MinMagnitude(args.MinGlimmer, args.MaxGlimmer) + * component.CurrentAmplification - component.CurrentDampening); + var maxGlimmer = (int) Math.Round(MathF.MaxMagnitude(args.MinGlimmer, args.MaxGlimmer) + * component.CurrentAmplification - component.CurrentDampening); + + _psionics.LogPowerUsed(uid, args.PowerName, minGlimmer, maxGlimmer); + } + + private void OnFamiliarShutdown(EntityUid uid, PsionicFamiliarComponent component, ComponentShutdown args) + { + if (!Exists(component.Master) + || !TryComp(component.Master, out var psionicComponent) + || !psionicComponent.Familiars.Contains(uid)) + return; + + psionicComponent.Familiars.Remove(uid); + } + + private void OnFamiliarAttack(EntityUid uid, PsionicFamiliarComponent component, AttackAttemptEvent args) + { + if (component.CanAttackMaster || args.Target is null + || args.Target != component.Master) + return; + + args.Cancel(); + if (!Loc.TryGetString(component.AttackMasterText, out var attackFailMessage)) + return; + + _popup.PopupEntity(attackFailMessage, uid, uid, component.AttackPopupType); + } + + private void OnFamiliarDeath(EntityUid uid, PsionicFamiliarComponent component, MobStateChangedEvent args) + { + if (!component.DespawnOnFamiliarDeath + || args.NewMobState != MobState.Dead) + return; + + DespawnFamiliar(uid, component); + } + + public void DespawnFamiliar(EntityUid uid) + { + if (!TryComp(uid, out var familiarComponent)) + return; + + DespawnFamiliar(uid, familiarComponent); + } + + public void DespawnFamiliar(EntityUid uid, PsionicFamiliarComponent component) + { + var popupText = Loc.GetString(component.DespawnText, ("entity", MetaData(uid).EntityName)); + _popup.PopupEntity(popupText, uid, component.DespawnPopopType); + QueueDel(uid); + } +} diff --git a/Content.Server/Access/Components/IdExaminableComponent.cs b/Content.Server/Access/Components/IdExaminableComponent.cs deleted file mode 100644 index 2def517f408..00000000000 --- a/Content.Server/Access/Components/IdExaminableComponent.cs +++ /dev/null @@ -1,8 +0,0 @@ -using Content.Server.Access.Systems; - -namespace Content.Server.Access.Components; - -[RegisterComponent, Access(typeof(IdExaminableSystem))] -public sealed partial class IdExaminableComponent : Component -{ -} diff --git a/Content.Server/Access/Systems/AccessOverriderSystem.cs b/Content.Server/Access/Systems/AccessOverriderSystem.cs index d0b8c31ab69..4e7b796503f 100644 --- a/Content.Server/Access/Systems/AccessOverriderSystem.cs +++ b/Content.Server/Access/Systems/AccessOverriderSystem.cs @@ -28,7 +28,6 @@ public sealed class AccessOverriderSystem : SharedAccessOverriderSystem [Dependency] private readonly PopupSystem _popupSystem = default!; [Dependency] private readonly SharedAudioSystem _audioSystem = default!; [Dependency] private readonly SharedDoAfterSystem _doAfterSystem = default!; - [Dependency] private readonly SharedContainerSystem _containerSystem = default!; public override void Initialize() { @@ -69,16 +68,13 @@ private void AfterInteractOn(EntityUid uid, AccessOverriderComponent component, private void OnDoAfter(EntityUid uid, AccessOverriderComponent component, AccessOverriderDoAfterEvent args) { - if (!TryComp(args.User, out ActorComponent? actor)) - return; - if (args.Handled || args.Cancelled) return; if (args.Args.Target != null) { component.TargetAccessReaderId = args.Args.Target.Value; - _userInterface.TryOpen(uid, AccessOverriderUiKey.Key, actor.PlayerSession); + _userInterface.OpenUi(uid, AccessOverriderUiKey.Key, args.User); UpdateUserInterface(uid, component, args); } @@ -95,7 +91,7 @@ private void OnClose(EntityUid uid, AccessOverriderComponent component, BoundUIC private void OnWriteToTargetAccessReaderIdMessage(EntityUid uid, AccessOverriderComponent component, WriteToTargetAccessReaderIdMessage args) { - if (args.Session.AttachedEntity is not { Valid: true } player) + if (args.Actor is not { Valid: true } player) return; TryWriteToTargetAccessReaderId(uid, args.AccessList, player, component); @@ -155,22 +151,19 @@ private void UpdateUserInterface(EntityUid uid, AccessOverriderComponent compone targetLabel, targetLabelColor); - _userInterface.TrySetUiState(uid, AccessOverriderUiKey.Key, newState); + _userInterface.SetUiState(uid, AccessOverriderUiKey.Key, newState); } private List> ConvertAccessHashSetsToList(List>> accessHashsets) { - List> accessList = new List>(); + var accessList = new List>(); + + if (accessHashsets.Count <= 0) + return accessList; - if (accessHashsets != null && accessHashsets.Any()) + foreach (var hashSet in accessHashsets) { - foreach (HashSet> hashSet in accessHashsets) - { - foreach (ProtoId hash in hashSet.ToArray()) - { - accessList.Add(hash); - } - } + accessList.AddRange(hashSet); } return accessList; diff --git a/Content.Server/Access/Systems/AgentIDCardSystem.cs b/Content.Server/Access/Systems/AgentIDCardSystem.cs index bd4d3b3f233..d5e9dc357dd 100644 --- a/Content.Server/Access/Systems/AgentIDCardSystem.cs +++ b/Content.Server/Access/Systems/AgentIDCardSystem.cs @@ -61,14 +61,14 @@ private void OnAfterInteract(EntityUid uid, AgentIDCardComponent component, Afte private void AfterUIOpen(EntityUid uid, AgentIDCardComponent component, AfterActivatableUIOpenEvent args) { - if (!_uiSystem.TryGetUi(uid, AgentIDCardUiKey.Key, out var ui)) + if (!_uiSystem.HasUi(uid, AgentIDCardUiKey.Key)) return; if (!TryComp(uid, out var idCard)) return; - var state = new AgentIDCardBoundUserInterfaceState(idCard.FullName ?? "", idCard.JobTitle ?? "", component.Icons); - _uiSystem.SetUiState(ui, state, args.Session); + var state = new AgentIDCardBoundUserInterfaceState(idCard.FullName ?? "", idCard.JobTitle ?? "", idCard.JobIcon ?? "", component.Icons); + _uiSystem.SetUiState(uid, AgentIDCardUiKey.Key, state); } private void OnJobChanged(EntityUid uid, AgentIDCardComponent comp, AgentIDCardJobChangedMessage args) @@ -94,7 +94,7 @@ private void OnJobIconChanged(EntityUid uid, AgentIDCardComponent comp, AgentIDC return; } - if (!_prototypeManager.TryIndex(args.JobIcon, out var jobIcon)) + if (!_prototypeManager.TryIndex(args.JobIconId, out var jobIcon)) { return; } diff --git a/Content.Server/Access/Systems/IdCardConsoleSystem.cs b/Content.Server/Access/Systems/IdCardConsoleSystem.cs index db8b9d036e8..e680b0c6f40 100644 --- a/Content.Server/Access/Systems/IdCardConsoleSystem.cs +++ b/Content.Server/Access/Systems/IdCardConsoleSystem.cs @@ -41,7 +41,7 @@ public override void Initialize() private void OnWriteToTargetIdMessage(EntityUid uid, IdCardConsoleComponent component, WriteToTargetIdMessage args) { - if (args.Session.AttachedEntity is not { Valid: true } player) + if (args.Actor is not { Valid: true } player) return; TryWriteToTargetId(uid, args.FullName, args.JobTitle, args.AccessList, args.JobPrototype, player, component); @@ -104,7 +104,7 @@ private void UpdateUserInterface(EntityUid uid, IdCardConsoleComponent component Name(targetId)); } - _userInterface.TrySetUiState(uid, IdCardConsoleUiKey.Key, newState); + _userInterface.SetUiState(uid, IdCardConsoleUiKey.Key, newState); } /// diff --git a/Content.Server/Access/Systems/IdCardSystem.cs b/Content.Server/Access/Systems/IdCardSystem.cs index 6b3d8db595f..9cd9976cea9 100644 --- a/Content.Server/Access/Systems/IdCardSystem.cs +++ b/Content.Server/Access/Systems/IdCardSystem.cs @@ -7,8 +7,6 @@ using Content.Shared.Access.Systems; using Content.Shared.Database; using Content.Shared.Popups; -using Content.Shared.Roles; -using Content.Shared.StatusIcon; using Robust.Shared.Prototypes; using Robust.Shared.Random; @@ -20,20 +18,13 @@ public sealed class IdCardSystem : SharedIdCardSystem [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly IPrototypeManager _prototypeManager = default!; [Dependency] private readonly IAdminLogManager _adminLogger = default!; - [Dependency] private readonly MetaDataSystem _metaSystem = default!; public override void Initialize() { base.Initialize(); - SubscribeLocalEvent(OnMapInit); SubscribeLocalEvent(OnMicrowaved); } - private void OnMapInit(EntityUid uid, IdCardComponent id, MapInitEvent args) - { - UpdateEntityName(uid, id); - } - private void OnMicrowaved(EntityUid uid, IdCardComponent component, BeingMicrowavedEvent args) { if (TryComp(uid, out var access)) @@ -81,143 +72,4 @@ private void OnMicrowaved(EntityUid uid, IdCardComponent component, BeingMicrowa $"{ToPrettyString(args.Microwave)} added {random.ID} access to {ToPrettyString(uid):entity}"); } } - - /// - /// Attempts to change the job title of a card. - /// Returns true/false. - /// - /// - /// If provided with a player's EntityUid to the player parameter, adds the change to the admin logs. - /// - public bool TryChangeJobTitle(EntityUid uid, string? jobTitle, IdCardComponent? id = null, EntityUid? player = null) - { - if (!Resolve(uid, ref id)) - return false; - - if (!string.IsNullOrWhiteSpace(jobTitle)) - { - jobTitle = jobTitle.Trim(); - - if (jobTitle.Length > IdCardConsoleComponent.MaxJobTitleLength) - jobTitle = jobTitle[..IdCardConsoleComponent.MaxJobTitleLength]; - } - else - { - jobTitle = null; - } - - if (id.JobTitle == jobTitle) - return true; - id.JobTitle = jobTitle; - Dirty(uid, id); - UpdateEntityName(uid, id); - - if (player != null) - { - _adminLogger.Add(LogType.Identity, LogImpact.Low, - $"{ToPrettyString(player.Value):player} has changed the job title of {ToPrettyString(uid):entity} to {jobTitle} "); - } - return true; - } - - public bool TryChangeJobIcon(EntityUid uid, StatusIconPrototype jobIcon, IdCardComponent? id = null, EntityUid? player = null) - { - if (!Resolve(uid, ref id)) - { - return false; - } - - if (id.JobIcon == jobIcon.ID) - { - return true; - } - - id.JobIcon = jobIcon.ID; - Dirty(uid, id); - - if (player != null) - { - _adminLogger.Add(LogType.Identity, LogImpact.Low, - $"{ToPrettyString(player.Value):player} has changed the job icon of {ToPrettyString(uid):entity} to {jobIcon} "); - } - - return true; - } - - public bool TryChangeJobDepartment(EntityUid uid, JobPrototype job, IdCardComponent? id = null) - { - if (!Resolve(uid, ref id)) - return false; - - id.JobDepartments.Clear(); - foreach (var department in _prototypeManager.EnumeratePrototypes()) - { - if (department.Roles.Contains(job.ID)) - id.JobDepartments.Add("department-" + department.ID); - } - - Dirty(uid, id); - - return true; - } - - /// - /// Attempts to change the full name of a card. - /// Returns true/false. - /// - /// - /// If provided with a player's EntityUid to the player parameter, adds the change to the admin logs. - /// - public bool TryChangeFullName(EntityUid uid, string? fullName, IdCardComponent? id = null, EntityUid? player = null) - { - if (!Resolve(uid, ref id)) - return false; - - if (!string.IsNullOrWhiteSpace(fullName)) - { - fullName = fullName.Trim(); - if (fullName.Length > IdCardConsoleComponent.MaxFullNameLength) - fullName = fullName[..IdCardConsoleComponent.MaxFullNameLength]; - } - else - { - fullName = null; - } - - if (id.FullName == fullName) - return true; - id.FullName = fullName; - Dirty(uid, id); - UpdateEntityName(uid, id); - - if (player != null) - { - _adminLogger.Add(LogType.Identity, LogImpact.Low, - $"{ToPrettyString(player.Value):player} has changed the name of {ToPrettyString(uid):entity} to {fullName} "); - } - return true; - } - - /// - /// Changes the name of the id's owner. - /// - /// - /// If either or is empty, it's replaced by placeholders. - /// If both are empty, the original entity's name is restored. - /// - private void UpdateEntityName(EntityUid uid, IdCardComponent? id = null) - { - if (!Resolve(uid, ref id)) - return; - - var jobSuffix = string.IsNullOrWhiteSpace(id.JobTitle) ? string.Empty : $" ({id.JobTitle})"; - - var val = string.IsNullOrWhiteSpace(id.FullName) - ? Loc.GetString("access-id-card-component-owner-name-job-title-text", - ("jobSuffix", jobSuffix)) - : Loc.GetString("access-id-card-component-owner-full-name-job-title-text", - ("fullName", id.FullName), - ("jobSuffix", jobSuffix)); - _metaSystem.SetEntityName(uid, val); - } } diff --git a/Content.Server/Actions/ActionOnInteractSystem.cs b/Content.Server/Actions/ActionOnInteractSystem.cs index c9a5f4b5d09..b6eec0ce0f6 100644 --- a/Content.Server/Actions/ActionOnInteractSystem.cs +++ b/Content.Server/Actions/ActionOnInteractSystem.cs @@ -1,3 +1,4 @@ +using System.Linq; using Content.Shared.Actions; using Content.Shared.Interaction; using Robust.Shared.Random; @@ -38,16 +39,27 @@ private void OnMapInit(EntityUid uid, ActionOnInteractComponent component, MapIn private void OnActivate(EntityUid uid, ActionOnInteractComponent component, ActivateInWorldEvent args) { - if (args.Handled || component.ActionEntities == null) + if (args.Handled) return; - var options = GetValidActions(component.ActionEntities); + if (component.ActionEntities is not {} actionEnts) + { + if (!TryComp(uid, out var actionsContainerComponent)) + return; + + actionEnts = actionsContainerComponent.Container.ContainedEntities.ToList(); + } + + var options = GetValidActions(actionEnts); if (options.Count == 0) return; var (actId, act) = _random.Pick(options); if (act.Event != null) + { act.Event.Performer = args.User; + act.Event.Action = actId; + } _actions.PerformAction(args.User, null, actId, act, act.Event, _timing.CurTime, false); args.Handled = true; @@ -55,16 +67,24 @@ private void OnActivate(EntityUid uid, ActionOnInteractComponent component, Acti private void OnAfterInteract(EntityUid uid, ActionOnInteractComponent component, AfterInteractEvent args) { - if (args.Handled || component.ActionEntities == null) + if (args.Handled) return; + if (component.ActionEntities is not {} actionEnts) + { + if (!TryComp(uid, out var actionsContainerComponent)) + return; + + actionEnts = actionsContainerComponent.Container.ContainedEntities.ToList(); + } + // First, try entity target actions if (args.Target != null) { - var entOptions = GetValidActions(component.ActionEntities, args.CanReach); + var entOptions = GetValidActions(actionEnts, args.CanReach); for (var i = entOptions.Count - 1; i >= 0; i--) { - var action = entOptions[i].Comp; + var action = entOptions[i]; if (!_actions.ValidateEntityTarget(args.User, args.Target.Value, action)) entOptions.RemoveAt(i); } @@ -75,6 +95,7 @@ private void OnAfterInteract(EntityUid uid, ActionOnInteractComponent component, if (entAct.Event != null) { entAct.Event.Performer = args.User; + entAct.Event.Action = entActId; entAct.Event.Target = args.Target.Value; } @@ -88,7 +109,7 @@ private void OnAfterInteract(EntityUid uid, ActionOnInteractComponent component, var options = GetValidActions(component.ActionEntities, args.CanReach); for (var i = options.Count - 1; i >= 0; i--) { - var action = options[i].Comp; + var action = options[i]; if (!_actions.ValidateWorldTarget(args.User, args.ClickLocation, action)) options.RemoveAt(i); } @@ -100,6 +121,7 @@ private void OnAfterInteract(EntityUid uid, ActionOnInteractComponent component, if (act.Event != null) { act.Event.Performer = args.User; + act.Event.Action = actId; act.Event.Target = args.ClickLocation; } diff --git a/Content.Server/Administration/BanList/BanListEui.cs b/Content.Server/Administration/BanList/BanListEui.cs index 3a86a42d531..8ddc7459d7b 100644 --- a/Content.Server/Administration/BanList/BanListEui.cs +++ b/Content.Server/Administration/BanList/BanListEui.cs @@ -65,13 +65,23 @@ private async Task LoadBans(NetUserId userId) unban = new SharedServerUnban(unbanningAdmin, ban.Unban.UnbanTime.UtcDateTime); } + (string, int cidrMask)? ip = ("*Hidden*", 0); + var hwid = "*Hidden*"; + + if (_admins.HasAdminFlag(Player, AdminFlags.Pii)) + { + ip = ban.Address is { } address + ? (address.address.ToString(), address.cidrMask) + : null; + + hwid = ban.HWId == null ? null : Convert.ToBase64String(ban.HWId.Value.AsSpan()); + } + Bans.Add(new SharedServerBan( ban.Id, ban.UserId, - ban.Address is { } address - ? (address.address.ToString(), address.cidrMask) - : null, - ban.HWId == null ? null : Convert.ToBase64String(ban.HWId.Value.AsSpan()), + ip, + hwid, ban.BanTime.UtcDateTime, ban.ExpirationTime?.UtcDateTime, ban.Reason, @@ -96,13 +106,22 @@ private async Task LoadRoleBans(NetUserId userId) unban = new SharedServerUnban(unbanningAdmin, ban.Unban.UnbanTime.UtcDateTime); } + (string, int cidrMask)? ip = ("*Hidden*", 0); + var hwid = "*Hidden*"; + + if (_admins.HasAdminFlag(Player, AdminFlags.Pii)) + { + ip = ban.Address is { } address + ? (address.address.ToString(), address.cidrMask) + : null; + + hwid = ban.HWId == null ? null : Convert.ToBase64String(ban.HWId.Value.AsSpan()); + } RoleBans.Add(new SharedServerRoleBan( ban.Id, ban.UserId, - ban.Address is { } address - ? (address.address.ToString(), address.cidrMask) - : null, - ban.HWId == null ? null : Convert.ToBase64String(ban.HWId.Value.AsSpan()), + ip, + hwid, ban.BanTime.UtcDateTime, ban.ExpirationTime?.UtcDateTime, ban.Reason, diff --git a/Content.Server/Administration/Commands/JobWhitelistCommands.cs b/Content.Server/Administration/Commands/JobWhitelistCommands.cs new file mode 100644 index 00000000000..f06cecabd7e --- /dev/null +++ b/Content.Server/Administration/Commands/JobWhitelistCommands.cs @@ -0,0 +1,214 @@ +using System.Linq; +using Content.Server.Database; +using Content.Server.Players.JobWhitelist; +using Content.Shared.Administration; +using Content.Shared.Roles; +using Robust.Server.Player; +using Robust.Shared.Console; +using Robust.Shared.Prototypes; + +namespace Content.Server.Administration.Commands; + +[AdminCommand(AdminFlags.Ban)] +public sealed class JobWhitelistAddCommand : LocalizedCommands +{ + [Dependency] private readonly IServerDbManager _db = default!; + [Dependency] private readonly JobWhitelistManager _jobWhitelist = default!; + [Dependency] private readonly IPlayerLocator _playerLocator = default!; + [Dependency] private readonly IPlayerManager _players = default!; + [Dependency] private readonly IPrototypeManager _prototypes = default!; + + public override string Command => "jobwhitelistadd"; + + public override async void Execute(IConsoleShell shell, string argStr, string[] args) + { + if (args.Length != 2) + { + shell.WriteError(Loc.GetString("shell-wrong-arguments-number-need-specific", + ("properAmount", 2), + ("currentAmount", args.Length))); + shell.WriteLine(Help); + return; + } + + var player = args[0].Trim(); + var job = new ProtoId(args[1].Trim()); + if (!_prototypes.TryIndex(job, out var jobPrototype)) + { + shell.WriteError(Loc.GetString("cmd-jobwhitelist-job-does-not-exist", ("job", job.Id))); + shell.WriteLine(Help); + return; + } + + var data = await _playerLocator.LookupIdByNameAsync(player); + if (data != null) + { + var guid = data.UserId; + var isWhitelisted = await _db.IsJobWhitelisted(guid, job); + if (isWhitelisted) + { + shell.WriteLine(Loc.GetString("cmd-jobwhitelist-already-whitelisted", + ("player", player), + ("jobId", job.Id), + ("jobName", jobPrototype.LocalizedName))); + return; + } + + _jobWhitelist.AddWhitelist(guid, job); + shell.WriteLine(Loc.GetString("cmd-jobwhitelistadd-added", + ("player", player), + ("jobId", job.Id), + ("jobName", jobPrototype.LocalizedName))); + return; + } + + shell.WriteError(Loc.GetString("cmd-jobwhitelist-player-not-found", ("player", player))); + } + + public override CompletionResult GetCompletion(IConsoleShell shell, string[] args) + { + if (args.Length == 1) + { + return CompletionResult.FromHintOptions( + _players.Sessions.Select(s => s.Name), + Loc.GetString("cmd-jobwhitelist-hint-player")); + } + + if (args.Length == 2) + { + return CompletionResult.FromHintOptions( + _prototypes.EnumeratePrototypes().Select(p => p.ID), + Loc.GetString("cmd-jobwhitelist-hint-job")); + } + + return CompletionResult.Empty; + } +} + +[AdminCommand(AdminFlags.Ban)] +public sealed class GetJobWhitelistCommand : LocalizedCommands +{ + [Dependency] private readonly IServerDbManager _db = default!; + [Dependency] private readonly IPlayerLocator _playerLocator = default!; + [Dependency] private readonly IPlayerManager _players = default!; + + public override string Command => "jobwhitelistget"; + + public override async void Execute(IConsoleShell shell, string argStr, string[] args) + { + if (args.Length == 0) + { + shell.WriteError("This command needs at least one argument."); + shell.WriteLine(Help); + return; + } + + var player = string.Join(' ', args).Trim(); + var data = await _playerLocator.LookupIdByNameAsync(player); + if (data != null) + { + var guid = data.UserId; + var whitelists = await _db.GetJobWhitelists(guid); + if (whitelists.Count == 0) + { + shell.WriteLine(Loc.GetString("cmd-jobwhitelistget-whitelisted-none", ("player", player))); + return; + } + + shell.WriteLine(Loc.GetString("cmd-jobwhitelistget-whitelisted-for", + ("player", player), + ("jobs", string.Join(", ", whitelists)))); + return; + } + + shell.WriteError(Loc.GetString("cmd-jobwhitelist-player-not-found", ("player", player))); + } + + public override CompletionResult GetCompletion(IConsoleShell shell, string[] args) + { + if (args.Length == 1) + { + return CompletionResult.FromHintOptions( + _players.Sessions.Select(s => s.Name), + Loc.GetString("cmd-jobwhitelist-hint-player")); + } + + return CompletionResult.Empty; + } +} + +[AdminCommand(AdminFlags.Ban)] +public sealed class RemoveJobWhitelistCommand : LocalizedCommands +{ + [Dependency] private readonly IServerDbManager _db = default!; + [Dependency] private readonly JobWhitelistManager _jobWhitelist = default!; + [Dependency] private readonly IPlayerLocator _playerLocator = default!; + [Dependency] private readonly IPlayerManager _players = default!; + [Dependency] private readonly IPrototypeManager _prototypes = default!; + + public override string Command => "jobwhitelistremove"; + + public override async void Execute(IConsoleShell shell, string argStr, string[] args) + { + if (args.Length != 2) + { + shell.WriteError(Loc.GetString("shell-wrong-arguments-number-need-specific", + ("properAmount", 2), + ("currentAmount", args.Length))); + shell.WriteLine(Help); + return; + } + + var player = args[0].Trim(); + var job = new ProtoId(args[1].Trim()); + if (!_prototypes.TryIndex(job, out var jobPrototype)) + { + shell.WriteError(Loc.GetString("cmd-jobwhitelist-job-does-not-exist", ("job", job))); + shell.WriteLine(Help); + return; + } + + var data = await _playerLocator.LookupIdByNameAsync(player); + if (data != null) + { + var guid = data.UserId; + var isWhitelisted = await _db.IsJobWhitelisted(guid, job); + if (!isWhitelisted) + { + shell.WriteError(Loc.GetString("cmd-jobwhitelistremove-was-not-whitelisted", + ("player", player), + ("jobId", job.Id), + ("jobName", jobPrototype.LocalizedName))); + return; + } + + _jobWhitelist.RemoveWhitelist(guid, job); + shell.WriteLine(Loc.GetString("cmd-jobwhitelistremove-removed", + ("player", player), + ("jobId", job.Id), + ("jobName", jobPrototype.LocalizedName))); + return; + } + + shell.WriteError(Loc.GetString("cmd-jobwhitelist-player-not-found", ("player", player))); + } + + public override CompletionResult GetCompletion(IConsoleShell shell, string[] args) + { + if (args.Length == 1) + { + return CompletionResult.FromHintOptions( + _players.Sessions.Select(s => s.Name), + Loc.GetString("cmd-jobwhitelist-hint-player")); + } + + if (args.Length == 2) + { + return CompletionResult.FromHintOptions( + _prototypes.EnumeratePrototypes().Select(p => p.ID), + Loc.GetString("cmd-jobwhitelist-hint-job")); + } + + return CompletionResult.Empty; + } +} diff --git a/Content.Server/Administration/Commands/JobWhitelistsCommand.cs b/Content.Server/Administration/Commands/JobWhitelistsCommand.cs new file mode 100644 index 00000000000..6ad44a0c737 --- /dev/null +++ b/Content.Server/Administration/Commands/JobWhitelistsCommand.cs @@ -0,0 +1,61 @@ +using System.Linq; +using Content.Server.Administration; +using Content.Server.EUI; +using Content.Shared.Administration; +using Robust.Shared.Console; +using Robust.Server.Player; + +namespace Content.Server.Administration.Commands; + +/// +/// Opens the job whitelists panel for editing player whitelists. +/// To use this ingame it's easiest to first open the player panel, then hit Job Whitelists. +/// +[AdminCommand(AdminFlags.Whitelist)] +public sealed class JobWhitelistsCommand : LocalizedCommands +{ + [Dependency] private readonly EuiManager _eui = default!; + [Dependency] private readonly IPlayerLocator _locator = default!; + [Dependency] private readonly IPlayerManager _players = default!; + + public override string Command => "jobwhitelists"; + + public override async void Execute(IConsoleShell shell, string argStr, string[] args) + { + if (shell.Player is not {} player) + { + shell.WriteError(Loc.GetString("shell-cannot-run-command-from-server")); + return; + } + + if (args.Length != 1) + { + shell.WriteLine(Loc.GetString("cmd-ban-invalid-arguments")); + shell.WriteLine(Help); + } + + var playerarg = string.Join(' ', args).Trim(); + var located = await _locator.LookupIdByNameAsync(playerarg); + if (located is null) + { + shell.WriteError(Loc.GetString("cmd-jobwhitelists-player-err")); + return; + } + + var ui = new JobWhitelistsEui(located.UserId, located.Username); + ui.LoadWhitelists(); + _eui.OpenEui(ui, player); + } + + public override CompletionResult GetCompletion(IConsoleShell shell, string[] args) + { + if (args.Length == 1) + { + return CompletionResult.FromHintOptions( + _players.Sessions.Select(s => s.Name), + Loc.GetString("cmd-jobwhitelist-hint-player")); + } + + return CompletionResult.Empty; + } +} diff --git a/Content.Server/Administration/Commands/SetOutfitCommand.cs b/Content.Server/Administration/Commands/SetOutfitCommand.cs index 2f979f4340b..e19c5b72fa4 100644 --- a/Content.Server/Administration/Commands/SetOutfitCommand.cs +++ b/Content.Server/Administration/Commands/SetOutfitCommand.cs @@ -13,6 +13,8 @@ using Robust.Shared.Player; using Robust.Shared.Prototypes; using Content.Server.Silicon.IPC; +using Content.Shared.Radio.Components; +using Content.Shared.Cluwne; namespace Content.Server.Administration.Commands { @@ -127,7 +129,14 @@ public static bool SetOutfit(EntityUid target, string gear, IEntityManager entit handsSystem.TryPickup(target, inhandEntity, checkActionBlocker: false, handsComp: handsComponent); } } - InternalEncryptionKeySpawner.TryInsertEncryptionKey(target, startingGear, entityManager, profile); + + if (entityManager.HasComponent(target)) + return true; //Fuck it, nuclear option for not Cluwning an IPC because that causes a crash that SOMEHOW ignores null checks. + if (entityManager.HasComponent(target)) + { + var encryption = new InternalEncryptionKeySpawner(); + encryption.TryInsertEncryptionKey(target, startingGear, entityManager); + } return true; } } diff --git a/Content.Server/Administration/Components/HeadstandComponent.cs b/Content.Server/Administration/Components/HeadstandComponent.cs index 8472b5ad368..2ab097fad49 100644 --- a/Content.Server/Administration/Components/HeadstandComponent.cs +++ b/Content.Server/Administration/Components/HeadstandComponent.cs @@ -3,7 +3,7 @@ namespace Content.Server.Administration.Components; -[RegisterComponent, NetworkedComponent] +[RegisterComponent] public sealed partial class HeadstandComponent : SharedHeadstandComponent { diff --git a/Content.Server/Administration/Components/KillSignComponent.cs b/Content.Server/Administration/Components/KillSignComponent.cs index e29ce202dda..11479c32fc4 100644 --- a/Content.Server/Administration/Components/KillSignComponent.cs +++ b/Content.Server/Administration/Components/KillSignComponent.cs @@ -3,6 +3,5 @@ namespace Content.Server.Administration.Components; -[NetworkedComponent, RegisterComponent] -public sealed partial class KillSignComponent : SharedKillSignComponent -{ } +[RegisterComponent] +public sealed partial class KillSignComponent : SharedKillSignComponent; diff --git a/Content.Server/Administration/JobWhitelistsEui.cs b/Content.Server/Administration/JobWhitelistsEui.cs new file mode 100644 index 00000000000..9d50a721839 --- /dev/null +++ b/Content.Server/Administration/JobWhitelistsEui.cs @@ -0,0 +1,90 @@ +using System.Threading.Tasks; +using Content.Server.Administration.Managers; +using Content.Server.Database; +using Content.Server.EUI; +using Content.Server.Players.JobWhitelist; +using Content.Shared.Administration; +using Content.Shared.Administration; +using Content.Shared.Eui; +using Content.Shared.Roles; +using Robust.Shared.Log; +using Robust.Shared.Network; +using Robust.Shared.Prototypes; + +namespace Content.Server.Administration; + +public sealed class JobWhitelistsEui : BaseEui +{ + [Dependency] private readonly IAdminManager _admin = default!; + [Dependency] private readonly ILogManager _log = default!; + [Dependency] private readonly IPrototypeManager _proto = default!; + [Dependency] private readonly IServerDbManager _db = default!; + [Dependency] private readonly JobWhitelistManager _jobWhitelist = default!; + + private readonly ISawmill _sawmill; + + public NetUserId PlayerId; + public string PlayerName; + + public HashSet> Whitelists = new(); + + public JobWhitelistsEui(NetUserId playerId, string playerName) + { + IoCManager.InjectDependencies(this); + + _sawmill = _log.GetSawmill("admin.job_whitelists_eui"); + + PlayerId = playerId; + PlayerName = playerName; + } + + public async void LoadWhitelists() + { + var jobs = await _db.GetJobWhitelists(PlayerId.UserId); + foreach (var id in jobs) + { + if (_proto.HasIndex(id)) + Whitelists.Add(id); + } + + StateDirty(); + } + + public override EuiStateBase GetNewState() + { + return new JobWhitelistsEuiState(PlayerName, Whitelists); + } + + public override void HandleMessage(EuiMessageBase msg) + { + base.HandleMessage(msg); + + if (msg is not SetJobWhitelistedMessage args) + return; + + if (!_admin.HasAdminFlag(Player, AdminFlags.Whitelist)) + { + _sawmill.Warning($"{Player.Name} ({Player.UserId}) tried to change role whitelists for {PlayerName} without whitelists flag"); + return; + } + + if (!_proto.HasIndex(args.Job)) + return; + + if (args.Whitelisting) + { + _jobWhitelist.AddWhitelist(PlayerId, args.Job); + Whitelists.Add(args.Job); + } + else + { + _jobWhitelist.RemoveWhitelist(PlayerId, args.Job); + Whitelists.Remove(args.Job); + } + + var verb = args.Whitelisting ? "added" : "removed"; + _sawmill.Info($"{Player.Name} ({Player.UserId}) {verb} whitelist for {args.Job} to player {PlayerName} ({PlayerId.UserId})"); + + StateDirty(); + } +} diff --git a/Content.Server/Administration/Managers/BanManager.cs b/Content.Server/Administration/Managers/BanManager.cs index 3a05b934b24..68bd8170265 100644 --- a/Content.Server/Administration/Managers/BanManager.cs +++ b/Content.Server/Administration/Managers/BanManager.cs @@ -73,7 +73,9 @@ private async Task AddRoleBan(ServerRoleBanDef banDef) public HashSet? GetRoleBans(NetUserId playerUserId) { - return _cachedRoleBans.TryGetValue(playerUserId, out var roleBans) ? roleBans.Select(banDef => banDef.Role).ToHashSet() : null; + return _cachedRoleBans.TryGetValue(playerUserId, out var roleBans) + ? roleBans.Select(banDef => banDef.Role).ToHashSet() + : null; } private async Task CacheDbRoleBans(NetUserId userId, IPAddress? address = null, ImmutableArray? hwId = null) @@ -263,13 +265,13 @@ public async Task PardonRoleBan(int banId, NetUserId? unbanningAdmin, Da return $"Pardoned ban with id {banId}"; } - public HashSet? GetJobBans(NetUserId playerUserId) + public HashSet>? GetJobBans(NetUserId playerUserId) { if (!_cachedRoleBans.TryGetValue(playerUserId, out var roleBans)) return null; return roleBans .Where(ban => ban.Role.StartsWith(JobPrefix, StringComparison.Ordinal)) - .Select(ban => ban.Role[JobPrefix.Length..]) + .Select(ban => new ProtoId(ban.Role[JobPrefix.Length..])) .ToHashSet(); } #endregion diff --git a/Content.Server/Administration/Managers/IBanManager.cs b/Content.Server/Administration/Managers/IBanManager.cs index dafe3d35bdd..b60e0a25351 100644 --- a/Content.Server/Administration/Managers/IBanManager.cs +++ b/Content.Server/Administration/Managers/IBanManager.cs @@ -2,8 +2,10 @@ using System.Net; using System.Threading.Tasks; using Content.Shared.Database; +using Content.Shared.Roles; using Robust.Shared.Network; using Robust.Shared.Player; +using Robust.Shared.Prototypes; namespace Content.Server.Administration.Managers; @@ -24,7 +26,7 @@ public interface IBanManager /// Reason for the ban public void CreateServerBan(NetUserId? target, string? targetUsername, NetUserId? banningAdmin, (IPAddress, int)? addressRange, ImmutableArray? hwid, uint? minutes, NoteSeverity severity, string reason); public HashSet? GetRoleBans(NetUserId playerUserId); - public HashSet? GetJobBans(NetUserId playerUserId); + public HashSet>? GetJobBans(NetUserId playerUserId); /// /// Creates a job ban for the specified target, username or GUID diff --git a/Content.Server/Administration/Systems/AdminVerbSystem.Smites.cs b/Content.Server/Administration/Systems/AdminVerbSystem.Smites.cs index 8ee52ad03e7..4e6af6ceea5 100644 --- a/Content.Server/Administration/Systems/AdminVerbSystem.Smites.cs +++ b/Content.Server/Administration/Systems/AdminVerbSystem.Smites.cs @@ -18,7 +18,6 @@ using Content.Server.Storage.EntitySystems; using Content.Server.Tabletop; using Content.Server.Tabletop.Components; -using Content.Server.Terminator.Systems; using Content.Shared.Administration; using Content.Shared.Administration.Components; using Content.Shared.Body.Components; @@ -31,7 +30,6 @@ using Content.Shared.Electrocution; using Content.Shared.Interaction.Components; using Content.Shared.Inventory; -using Content.Shared.Mind.Components; using Content.Shared.Mobs; using Content.Shared.Mobs.Components; using Content.Shared.Mobs.Systems; @@ -74,7 +72,6 @@ public sealed partial class AdminVerbSystem [Dependency] private readonly PopupSystem _popupSystem = default!; [Dependency] private readonly SharedPhysicsSystem _physics = default!; [Dependency] private readonly TabletopSystem _tabletopSystem = default!; - [Dependency] private readonly TerminatorSystem _terminator = default!; [Dependency] private readonly VomitSystem _vomitSystem = default!; [Dependency] private readonly WeldableSystem _weldableSystem = default!; [Dependency] private readonly SharedContentEyeSystem _eyeSystem = default!; @@ -152,7 +149,7 @@ private void AddSmiteVerbs(GetVerbsEvent args) Act = () => { // Fuck you. Burn Forever. - flammable.FireStacks = FlammableSystem.MaximumFireStacks; + flammable.FireStacks = flammable.MaximumFireStacks; _flammableSystem.Ignite(args.Target, args.User); var xform = Transform(args.Target); _popupSystem.PopupEntity(Loc.GetString("admin-smite-set-alight-self"), args.Target, @@ -824,27 +821,5 @@ private void AddSmiteVerbs(GetVerbsEvent args) Impact = LogImpact.Extreme, }; args.Verbs.Add(superBonk); - - Verb terminate = new() - { - Text = "Terminate", - Category = VerbCategory.Smite, - Icon = new SpriteSpecifier.Rsi(new ("Mobs/Species/Terminator/parts.rsi"), "skull_icon"), - Act = () => - { - if (!TryComp(args.Target, out var mindContainer) || mindContainer.Mind == null) - return; - - var coords = Transform(args.Target).Coordinates; - var mindId = mindContainer.Mind.Value; - _terminator.CreateSpawner(coords, mindId); - - _popupSystem.PopupEntity(Loc.GetString("admin-smite-terminate-prompt"), args.Target, - args.Target, PopupType.LargeCaution); - }, - Impact = LogImpact.Extreme, - Message = Loc.GetString("admin-smite-terminate-description") - }; - args.Verbs.Add(terminate); } } diff --git a/Content.Server/Administration/Systems/AdminVerbSystem.cs b/Content.Server/Administration/Systems/AdminVerbSystem.cs index f5b237b4492..5bb75b4c99c 100644 --- a/Content.Server/Administration/Systems/AdminVerbSystem.cs +++ b/Content.Server/Administration/Systems/AdminVerbSystem.cs @@ -463,7 +463,7 @@ private void AddDebugVerbs(GetVerbsEvent args) Text = Loc.GetString("configure-verb-get-data-text"), Icon = new SpriteSpecifier.Texture(new ("/Textures/Interface/VerbIcons/settings.svg.192dpi.png")), Category = VerbCategory.Debug, - Act = () => _uiSystem.TryOpen(args.Target, ConfigurationUiKey.Key, actor.PlayerSession) + Act = () => _uiSystem.OpenUi(args.Target, ConfigurationUiKey.Key, actor.PlayerSession) }; args.Verbs.Add(verb); } diff --git a/Content.Server/Administration/Systems/BwoinkSystem.cs b/Content.Server/Administration/Systems/BwoinkSystem.cs index 2e236688ac3..a07115544bf 100644 --- a/Content.Server/Administration/Systems/BwoinkSystem.cs +++ b/Content.Server/Administration/Systems/BwoinkSystem.cs @@ -25,7 +25,7 @@ namespace Content.Server.Administration.Systems { [UsedImplicitly] - public sealed class BwoinkSystem : SharedBwoinkSystem + public sealed partial class BwoinkSystem : SharedBwoinkSystem { [Dependency] private readonly IPlayerManager _playerManager = default!; [Dependency] private readonly IAdminManager _adminManager = default!; @@ -36,6 +36,9 @@ public sealed class BwoinkSystem : SharedBwoinkSystem [Dependency] private readonly SharedMindSystem _minds = default!; [Dependency] private readonly IAfkManager _afkManager = default!; + [GeneratedRegex(@"^https://discord\.com/api/webhooks/(\d+)/((?!.*/).*)$")] + private static partial Regex DiscordRegex(); + private ISawmill _sawmill = default!; private readonly HttpClient _httpClient = new(); private string _webhookUrl = string.Empty; @@ -157,7 +160,7 @@ private async void OnWebhookChanged(string url) return; // Basic sanity check and capturing webhook ID and token - var match = Regex.Match(url, @"^https://discord\.com/api/webhooks/(\d+)/((?!.*/).*)$"); + var match = DiscordRegex().Match(url); if (!match.Success) { diff --git a/Content.Server/Advertise/EntitySystems/SpeakOnUIClosedSystem.cs b/Content.Server/Advertise/EntitySystems/SpeakOnUIClosedSystem.cs index 939fc9a2dbb..6b771578200 100644 --- a/Content.Server/Advertise/EntitySystems/SpeakOnUIClosedSystem.cs +++ b/Content.Server/Advertise/EntitySystems/SpeakOnUIClosedSystem.cs @@ -5,6 +5,7 @@ using Content.Shared.Chat; using Robust.Shared.Prototypes; using Robust.Shared.Random; +using ActivatableUIComponent = Content.Shared.UserInterface.ActivatableUIComponent; namespace Content.Server.Advertise; diff --git a/Content.Server/Alert/Click/CheckHealth.cs b/Content.Server/Alert/Click/CheckHealth.cs new file mode 100644 index 00000000000..31beff69c29 --- /dev/null +++ b/Content.Server/Alert/Click/CheckHealth.cs @@ -0,0 +1,44 @@ +using Content.Server.Chat.Managers; +using Content.Shared.Alert; +using Content.Shared.Chat; +using Content.Shared.Damage; +using Content.Shared.HealthExaminable; +using JetBrains.Annotations; +using Robust.Server.Player; +using Robust.Shared.Player; + +namespace Content.Server.Alert.Click; + +[UsedImplicitly] +[DataDefinition] +public sealed partial class CheckHealth : IAlertClick +{ + public void AlertClicked(EntityUid player) + { + var chatManager = IoCManager.Resolve(); + var entityManager = IoCManager.Resolve(); + var playerManager = IoCManager.Resolve(); + + var healthExaminableSystem = entityManager.System(); + + if (!entityManager.TryGetComponent(player, out HealthExaminableComponent? healthExaminable) || + !entityManager.TryGetComponent(player, out DamageableComponent? damageable) || + !playerManager.TryGetSessionByEntity(player, out var session)) + return; + + var baseMsg = Loc.GetString("health-alert-start"); + SendMessage(chatManager, baseMsg, session); + var markup = healthExaminableSystem.GetMarkup(player, (player, healthExaminable), damageable).ToMarkup(); + SendMessage(chatManager, markup, session); + } + + private static void SendMessage(IChatManager chatManager, string msg, ICommonSession session) + { + chatManager.ChatMessageToOne(ChatChannel.Emotes, + msg, + msg, + EntityUid.Invalid, + false, + session.Channel); + } +} diff --git a/Content.Server/AlertLevel/AlertLevelSystem.cs b/Content.Server/AlertLevel/AlertLevelSystem.cs index b290d95a5c1..46b02c0e977 100644 --- a/Content.Server/AlertLevel/AlertLevelSystem.cs +++ b/Content.Server/AlertLevel/AlertLevelSystem.cs @@ -98,6 +98,16 @@ private void OnPrototypeReload(PrototypesReloadedEventArgs args) RaiseLocalEvent(new AlertLevelPrototypeReloadedEvent()); } + public string GetLevel(EntityUid station, AlertLevelComponent? alert = null) + { + if (!Resolve(station, ref alert)) + { + return string.Empty; + } + + return alert.CurrentLevel; + } + public float GetAlertLevelDelay(EntityUid station, AlertLevelComponent? alert = null) { if (!Resolve(station, ref alert)) diff --git a/Content.Server/Ame/EntitySystems/AmeControllerSystem.cs b/Content.Server/Ame/EntitySystems/AmeControllerSystem.cs index 5bf78bde857..1b323d66437 100644 --- a/Content.Server/Ame/EntitySystems/AmeControllerSystem.cs +++ b/Content.Server/Ame/EntitySystems/AmeControllerSystem.cs @@ -129,11 +129,11 @@ public void UpdateUi(EntityUid uid, AmeControllerComponent? controller = null) if (!Resolve(uid, ref controller)) return; - if (!_userInterfaceSystem.TryGetUi(uid, AmeControllerUiKey.Key, out var bui)) + if (!_userInterfaceSystem.HasUi(uid, AmeControllerUiKey.Key)) return; var state = GetUiState(uid, controller); - _userInterfaceSystem.SetUiState(bui, state); + _userInterfaceSystem.SetUiState(uid, AmeControllerUiKey.Key, state); controller.NextUIUpdate = _gameTiming.CurTime + controller.UpdateUIPeriod; } @@ -324,7 +324,7 @@ private void OnPowerChanged(EntityUid uid, AmeControllerComponent comp, ref Powe private void OnUiButtonPressed(EntityUid uid, AmeControllerComponent comp, UiButtonPressedMessage msg) { - var user = msg.Session.AttachedEntity; + var user = msg.Actor; if (!Exists(user)) return; @@ -334,7 +334,7 @@ private void OnUiButtonPressed(EntityUid uid, AmeControllerComponent comp, UiBut _ => true, }; - if (!PlayerCanUseController(uid, user!.Value, needsPower, comp)) + if (!PlayerCanUseController(uid, user, needsPower, comp)) return; _audioSystem.PlayPvs(comp.ClickSound, uid, AudioParams.Default.WithVolume(-2f)); diff --git a/Content.Server/Anomaly/AnomalySystem.Generator.cs b/Content.Server/Anomaly/AnomalySystem.Generator.cs index 7aa1a8935f3..056a985cbe2 100644 --- a/Content.Server/Anomaly/AnomalySystem.Generator.cs +++ b/Content.Server/Anomaly/AnomalySystem.Generator.cs @@ -61,7 +61,7 @@ public void UpdateGeneratorUi(EntityUid uid, AnomalyGeneratorComponent component var materialAmount = _material.GetMaterialAmount(uid, component.RequiredMaterial); var state = new AnomalyGeneratorUserInterfaceState(component.CooldownEndTime, materialAmount, component.MaterialPerAnomaly); - _ui.TrySetUiState(uid, AnomalyGeneratorUiKey.Key, state); + _ui.SetUiState(uid, AnomalyGeneratorUiKey.Key, state); } public void TryGeneratorCreateAnomaly(EntityUid uid, AnomalyGeneratorComponent? component = null) diff --git a/Content.Server/Anomaly/AnomalySystem.Scanner.cs b/Content.Server/Anomaly/AnomalySystem.Scanner.cs index bce508903d0..39c0d08b55e 100644 --- a/Content.Server/Anomaly/AnomalySystem.Scanner.cs +++ b/Content.Server/Anomaly/AnomalySystem.Scanner.cs @@ -31,7 +31,8 @@ private void OnScannerAnomalyShutdown(ref AnomalyShutdownEvent args) { if (component.ScannedAnomaly != args.Anomaly) continue; - _ui.TryCloseAll(uid, AnomalyScannerUiKey.Key); + + _ui.CloseUi(uid, AnomalyScannerUiKey.Key); } } @@ -108,7 +109,7 @@ private void OnDoAfter(EntityUid uid, AnomalyScannerComponent component, DoAfter Popup.PopupEntity(Loc.GetString("anomaly-scanner-component-scan-complete"), uid); UpdateScannerWithNewAnomaly(uid, args.Args.Target.Value, component); - if (TryComp(args.Args.User, out var actor)) _ui.TryOpen(uid, AnomalyScannerUiKey.Key, actor.PlayerSession); + _ui.OpenUi(uid, AnomalyScannerUiKey.Key, args.User); args.Handled = true; } @@ -123,7 +124,7 @@ public void UpdateScannerUi(EntityUid uid, AnomalyScannerComponent? component = nextPulse = anomalyComponent.NextPulseTime; var state = new AnomalyScannerUserInterfaceState(GetScannerMessage(component), nextPulse); - _ui.TrySetUiState(uid, AnomalyScannerUiKey.Key, state); + _ui.SetUiState(uid, AnomalyScannerUiKey.Key, state); } public void UpdateScannerWithNewAnomaly(EntityUid scanner, EntityUid anomaly, AnomalyScannerComponent? scannerComp = null, AnomalyComponent? anomalyComp = null) diff --git a/Content.Server/Anomaly/AnomalySystem.Vessel.cs b/Content.Server/Anomaly/AnomalySystem.Vessel.cs index 35de5c1a646..9a6c99f8208 100644 --- a/Content.Server/Anomaly/AnomalySystem.Vessel.cs +++ b/Content.Server/Anomaly/AnomalySystem.Vessel.cs @@ -1,4 +1,5 @@ using Content.Server.Anomaly.Components; +using Content.Server.Construction; using Content.Server.Power.EntitySystems; using Content.Shared.Anomaly; using Content.Shared.Anomaly.Components; @@ -20,6 +21,7 @@ private void InitializeVessel() { SubscribeLocalEvent(OnVesselShutdown); SubscribeLocalEvent(OnVesselMapInit); + SubscribeLocalEvent(OnUpgradeExamine); SubscribeLocalEvent(OnVesselInteractUsing); SubscribeLocalEvent(OnExamined); SubscribeLocalEvent(OnVesselGetPointsPerSecond); @@ -65,6 +67,11 @@ private void OnVesselMapInit(EntityUid uid, AnomalyVesselComponent component, Ma UpdateVesselAppearance(uid, component); } + private void OnUpgradeExamine(EntityUid uid, AnomalyVesselComponent component, UpgradeExamineEvent args) + { + args.AddPercentageUpgrade("anomaly-vessel-component-upgrade-output", component.PointMultiplier); + } + private void OnVesselInteractUsing(EntityUid uid, AnomalyVesselComponent component, InteractUsingEvent args) { if (component.Anomaly != null || diff --git a/Content.Server/Antag/AntagSelectionSystem.API.cs b/Content.Server/Antag/AntagSelectionSystem.API.cs index 59bf05fe03f..77f543cdcf1 100644 --- a/Content.Server/Antag/AntagSelectionSystem.API.cs +++ b/Content.Server/Antag/AntagSelectionSystem.API.cs @@ -5,6 +5,7 @@ using Content.Server.Objectives; using Content.Shared.Chat; using Content.Shared.Mind; +using Content.Shared.Preferences; using JetBrains.Annotations; using Robust.Shared.Audio; using Robust.Shared.Enums; @@ -156,6 +157,36 @@ public List GetAntagMindEntityUids(Entity e return ent.Comp.SelectedMinds.Select(p => p.Item1).ToList(); } + /// + /// Checks if a given session has the primary antag preferences for a given definition + /// + public bool HasPrimaryAntagPreference(ICommonSession? session, AntagSelectionDefinition def) + { + if (session == null) + return true; + + if (def.PrefRoles.Count == 0) + return false; + + var pref = (HumanoidCharacterProfile) _pref.GetPreferences(session.UserId).SelectedCharacter; + return pref.AntagPreferences.Any(p => def.PrefRoles.Contains(p)); + } + + /// + /// Checks if a given session has the fallback antag preferences for a given definition + /// + public bool HasFallbackAntagPreference(ICommonSession? session, AntagSelectionDefinition def) + { + if (session == null) + return true; + + if (def.FallbackRoles.Count == 0) + return false; + + var pref = (HumanoidCharacterProfile) _pref.GetPreferences(session.UserId).SelectedCharacter; + return pref.AntagPreferences.Any(p => def.FallbackRoles.Contains(p)); + } + /// /// Returns all the antagonists for this rule who are currently alive /// diff --git a/Content.Server/Antag/AntagSelectionSystem.cs b/Content.Server/Antag/AntagSelectionSystem.cs index d74824dd2d5..cd4d836e683 100644 --- a/Content.Server/Antag/AntagSelectionSystem.cs +++ b/Content.Server/Antag/AntagSelectionSystem.cs @@ -17,7 +17,6 @@ using Content.Shared.Ghost; using Content.Shared.Humanoid; using Content.Shared.Players; -using Content.Shared.Preferences; using Robust.Server.Audio; using Robust.Server.GameObjects; using Robust.Server.Player; @@ -118,12 +117,15 @@ private void OnSpawnComplete(PlayerSpawnCompleteEvent args) // something to figure out later. var query = QueryActiveRules(); + var rules = new List<(EntityUid, AntagSelectionComponent)>(); while (query.MoveNext(out var uid, out _, out var antag, out _)) { - // TODO ANTAG - // what why aasdiuhasdopiuasdfhksad - // stop this insanity please - // probability of antag assignment shouldn't depend on the order in which rules are returned by the query. + rules.Add((uid, antag)); + } + RobustRandom.Shuffle(rules); + + foreach (var (uid, antag) in rules) + { if (!RobustRandom.Prob(LateJoinRandomChance)) continue; @@ -221,13 +223,13 @@ public void ChooseAntags(Entity ent, IList /// Tries to makes a given player into the specified antagonist. /// - public bool TryMakeAntag(Entity ent, ICommonSession? session, AntagSelectionDefinition def, bool ignoreSpawner = false) + public bool TryMakeAntag(Entity ent, ICommonSession? session, AntagSelectionDefinition def, bool ignoreSpawner = false, bool checkPref = true) { - if (!IsSessionValid(ent, session, def) || - !IsEntityValid(session?.AttachedEntity, def)) - { + if (checkPref && !HasPrimaryAntagPreference(session, def)) + return false; + + if (!IsSessionValid(ent, session, def) || !IsEntityValid(session?.AttachedEntity, def)) return false; - } MakeAntag(ent, session, def, ignoreSpawner); return true; @@ -324,16 +326,14 @@ public AntagSelectionPlayerPool GetPlayerPool(Entity en var fallbackList = new List(); foreach (var session in sessions) { - if (!IsSessionValid(ent, session, def) || - !IsEntityValid(session.AttachedEntity, def)) + if (!IsSessionValid(ent, session, def) || !IsEntityValid(session.AttachedEntity, def)) continue; - var pref = (HumanoidCharacterProfile) _pref.GetPreferences(session.UserId).SelectedCharacter; - if (def.PrefRoles.Count != 0 && pref.AntagPreferences.Any(p => def.PrefRoles.Contains(p))) + if (HasPrimaryAntagPreference(session, def)) { preferredList.Add(session); } - else if (def.FallbackRoles.Count != 0 && pref.AntagPreferences.Any(p => def.FallbackRoles.Contains(p))) + else if (HasFallbackAntagPreference(session, def)) { fallbackList.Add(session); } @@ -404,13 +404,13 @@ public bool IsEntityValid(EntityUid? entity, AntagSelectionDefinition def) if (def.Whitelist != null) { - if (!def.Whitelist.IsValid(entity.Value, EntityManager)) + if (!def.Whitelist.IsValid(entity.Value)) return false; } if (def.Blacklist != null) { - if (def.Blacklist.IsValid(entity.Value, EntityManager)) + if (def.Blacklist.IsValid(entity.Value)) return false; } diff --git a/Content.Server/Antag/Mimic/MobReplacementRuleComponent.cs b/Content.Server/Antag/Mimic/MobReplacementRuleComponent.cs index 0824d48ae27..0c7e257d2bd 100644 --- a/Content.Server/Antag/Mimic/MobReplacementRuleComponent.cs +++ b/Content.Server/Antag/Mimic/MobReplacementRuleComponent.cs @@ -23,7 +23,7 @@ public sealed partial class MobReplacementRuleComponent : Component /// Chance per-entity. /// [DataField] - public float Chance = 0.001f; + public float Chance = 0.004f; [DataField] public bool DoAnnouncement = true; diff --git a/Content.Server/Antag/MobReplacementRuleSystem.cs b/Content.Server/Antag/MobReplacementRuleSystem.cs index 18837b5a7c8..dc8103497ee 100644 --- a/Content.Server/Antag/MobReplacementRuleSystem.cs +++ b/Content.Server/Antag/MobReplacementRuleSystem.cs @@ -1,16 +1,45 @@ +using System.Numerics; using Content.Server.Antag.Mimic; -using Content.Server.GameTicking.Components; +using Content.Server.Chat.Systems; using Content.Server.GameTicking.Rules; -using Content.Server.GameTicking.Rules.Components; +using Content.Server.GameTicking.Components; +using Content.Server.NPC.Systems; +using Content.Server.Station.Systems; +using Content.Server.GameTicking; using Content.Shared.VendingMachines; using Robust.Shared.Map; +using Robust.Shared.Prototypes; using Robust.Shared.Random; +using Robust.Server.GameObjects; +using Robust.Shared.Physics.Systems; +using System.Linq; +using Robust.Shared.Physics; +using Content.Shared.Movement.Components; +using Content.Shared.Damage; +using Content.Server.NPC.HTN; +using Content.Server.NPC; +using Content.Shared.Weapons.Melee; +using Content.Server.Advertise.EntitySystems; +using Content.Server.Advertise.Components; +using Content.Server.Power.Components; +using Content.Shared.CombatMode; namespace Content.Server.Antag; public sealed class MobReplacementRuleSystem : GameRuleSystem { [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly StationSystem _station = default!; + [Dependency] private readonly GameTicker _gameTicker = default!; + [Dependency] private readonly ChatSystem _chat = default!; + [Dependency] private readonly IPrototypeManager _prototype = default!; + [Dependency] private readonly IComponentFactory _componentFactory = default!; + [Dependency] private readonly SharedPhysicsSystem _physics = default!; + [Dependency] private readonly NpcFactionSystem _npcFaction = default!; + [Dependency] private readonly NPCSystem _npc = default!; + [Dependency] private readonly TransformSystem _transform = default!; + [Dependency] private readonly AdvertiseSystem _advertise = default!; + protected override void Started(EntityUid uid, MobReplacementRuleComponent component, GameRuleComponent gameRule, GameRuleStartedEvent args) { @@ -18,21 +47,120 @@ protected override void Started(EntityUid uid, MobReplacementRuleComponent compo var query = AllEntityQuery(); var spawns = new List<(EntityUid Entity, EntityCoordinates Coordinates)>(); + var stations = _gameTicker.GetSpawnableStations(); while (query.MoveNext(out var vendingUid, out _, out var xform)) { - if (!_random.Prob(component.Chance)) + var ownerStation = _station.GetOwningStation(vendingUid); + + if (ownerStation == null + || ownerStation != stations[0]) + continue; + + // Make sure that we aren't running this on something that is already a mimic + if (HasComp(vendingUid)) continue; spawns.Add((vendingUid, xform.Coordinates)); } - foreach (var entity in spawns) + if (spawns == null) + //WTF: THE STATION DOESN'T EXIST! WE MUST BE IN A TEST! QUICK, PUT A MIMIC AT 0,0!!! + Spawn(component.Proto, new EntityCoordinates(uid, new Vector2(0, 0))); + else { - var coordinates = entity.Coordinates; - Del(entity.Entity); + // This is intentionally not clamped. If a server host wants to replace every vending machine in the entire station with a mimic, who am I to stop them? + var k = MathF.MaxMagnitude(component.NumberToReplace, 1); + while (k > 0 && spawns != null && spawns.Count > 0) + { + if (k > 1) + { + var spawnLocation = _random.PickAndTake(spawns); + BuildAMimicWorkshop(spawnLocation.Entity, component); + } + else + { + BuildAMimicWorkshop(spawns[0].Entity, component); + } - Spawn(component.Proto, coordinates); + if (k == MathF.MaxMagnitude(component.NumberToReplace, 1) + && component.DoAnnouncement) + _chat.DispatchStationAnnouncement(stations[0], Loc.GetString("station-event-rampant-intelligence-announcement"), playDefaultSound: true, + colorOverride: Color.Red, sender: "Central Command"); + + k--; + } + } + } + + /// It's like Build a Bear, but MURDER + public void BuildAMimicWorkshop(EntityUid uid, MobReplacementRuleComponent component) + { + var metaData = MetaData(uid); + var vendorPrototype = metaData.EntityPrototype; + var mimicProto = _prototype.Index(component.Proto); + + var vendorComponents = vendorPrototype?.Components.Keys + .Where(n => n != "Transform" && n != "MetaData") + .Select(name => (name, _componentFactory.GetRegistration(name).Type)) + .ToList() ?? new List<(string name, Type type)>(); + + var mimicComponents = mimicProto?.Components.Keys + .Where(n => n != "Transform" && n != "MetaData") + .Select(name => (name, _componentFactory.GetRegistration(name).Type)) + .ToList() ?? new List<(string name, Type type)>(); + + foreach (var name in mimicComponents.Except(vendorComponents)) + { + var newComponent = _componentFactory.GetComponent(name.name); + EntityManager.AddComponent(uid, newComponent); } + + var xform = Transform(uid); + if (xform.Anchored) + _transform.Unanchor(uid, xform); + + SetupMimicNPC(uid, component); + + if (TryComp(uid, out var vendor) + && component.VendorModify) + SetupMimicVendor(uid, component, vendor); + } + + /// This handles getting the entity ready to be a hostile NPC + private void SetupMimicNPC(EntityUid uid, MobReplacementRuleComponent component) + { + _physics.SetBodyType(uid, BodyType.KinematicController); + _npcFaction.AddFaction(uid, "SimpleHostile"); + + var melee = EnsureComp(uid); + melee.Angle = 0; + DamageSpecifier dspec = new() + { + DamageDict = new() + { + { "Blunt", component.MimicMeleeDamage } + } + }; + melee.Damage = dspec; + + var movementSpeed = EnsureComp(uid); + (movementSpeed.BaseSprintSpeed, movementSpeed.BaseWalkSpeed) = (component.MimicMoveSpeed, component.MimicMoveSpeed); + + var htn = EnsureComp(uid); + htn.RootTask = new HTNCompoundTask() { Task = component.MimicAIType }; + htn.Blackboard.SetValue(NPCBlackboard.NavSmash, component.MimicSmashGlass); + _npc.WakeNPC(uid, htn); + } + + /// Handling specific interactions with vending machines + private void SetupMimicVendor(EntityUid uid, MobReplacementRuleComponent mimicComponent, AdvertiseComponent vendorComponent) + { + vendorComponent.MinimumWait = 5; + vendorComponent.MaximumWait = 15; + _advertise.SayAdvertisement(uid, vendorComponent); + + if (TryComp(uid, out var aPC)) + aPC.NeedsPower = false; } } diff --git a/Content.Server/Arcade/BlockGame/BlockGame.Ui.cs b/Content.Server/Arcade/BlockGame/BlockGame.Ui.cs index ef69600783b..cd22f1f6d31 100644 --- a/Content.Server/Arcade/BlockGame/BlockGame.Ui.cs +++ b/Content.Server/Arcade/BlockGame/BlockGame.Ui.cs @@ -157,39 +157,37 @@ private void InputTick(float frameTime) /// The message to broadcase to all players/spectators. private void SendMessage(BoundUserInterfaceMessage message) { - if (_uiSystem.TryGetUi(_owner, BlockGameUiKey.Key, out var bui)) - _uiSystem.SendUiMessage(bui, message); + _uiSystem.ServerSendUiMessage(_entityManager.GetEntity(message.Entity), BlockGameUiKey.Key, message); } /// /// Handles sending a message to a specific player/spectator. /// /// The message to send to a specific player/spectator. - /// The target recipient. - private void SendMessage(BoundUserInterfaceMessage message, ICommonSession session) + /// The target recipient. + private void SendMessage(BoundUserInterfaceMessage message, EntityUid actor) { - if (_uiSystem.TryGetUi(_owner, BlockGameUiKey.Key, out var bui)) - _uiSystem.TrySendUiMessage(bui, message, session); + _uiSystem.ServerSendUiMessage(_entityManager.GetEntity(message.Entity), BlockGameUiKey.Key, message, actor); } /// /// Handles sending the current state of the game to a player that has just opened the UI. /// - /// The target recipient. - public void UpdateNewPlayerUI(ICommonSession session) + /// The target recipient. + public void UpdateNewPlayerUI(EntityUid actor) { if (_gameOver) { - SendMessage(new BlockGameMessages.BlockGameGameOverScreenMessage(Points, _highScorePlacement?.LocalPlacement, _highScorePlacement?.GlobalPlacement), session); + SendMessage(new BlockGameMessages.BlockGameGameOverScreenMessage(Points, _highScorePlacement?.LocalPlacement, _highScorePlacement?.GlobalPlacement), actor); return; } if (Paused) - SendMessage(new BlockGameMessages.BlockGameSetScreenMessage(BlockGameMessages.BlockGameScreen.Pause, Started), session); + SendMessage(new BlockGameMessages.BlockGameSetScreenMessage(BlockGameMessages.BlockGameScreen.Pause, Started), actor); else - SendMessage(new BlockGameMessages.BlockGameSetScreenMessage(BlockGameMessages.BlockGameScreen.Game, Started), session); + SendMessage(new BlockGameMessages.BlockGameSetScreenMessage(BlockGameMessages.BlockGameScreen.Game, Started), actor); - FullUpdate(session); + FullUpdate(actor); } /// @@ -209,14 +207,14 @@ private void FullUpdate() /// Handles broadcasting the full player-visible game state to a specific player/spectator. /// /// The target recipient. - private void FullUpdate(ICommonSession session) + private void FullUpdate(EntityUid actor) { - UpdateFieldUI(session); - SendNextPieceUpdate(session); - SendHoldPieceUpdate(session); - SendLevelUpdate(session); - SendPointsUpdate(session); - SendHighscoreUpdate(session); + UpdateFieldUI(actor); + SendNextPieceUpdate(actor); + SendHoldPieceUpdate(actor); + SendLevelUpdate(actor); + SendPointsUpdate(actor); + SendHighscoreUpdate(actor); } /// @@ -234,14 +232,13 @@ public void UpdateFieldUI() /// /// Handles broadcasting the current location of all of the blocks in the playfield + the active piece to a specific player/spectator. /// - /// The target recipient. - public void UpdateFieldUI(ICommonSession session) + public void UpdateFieldUI(EntityUid actor) { if (!Started) return; var computedField = ComputeField(); - SendMessage(new BlockGameMessages.BlockGameVisualUpdateMessage(computedField.ToArray(), BlockGameMessages.BlockGameVisualType.GameField), session); + SendMessage(new BlockGameMessages.BlockGameVisualUpdateMessage(computedField.ToArray(), BlockGameMessages.BlockGameVisualType.GameField), actor); } /// @@ -282,10 +279,9 @@ private void SendNextPieceUpdate() /// /// Broadcasts the state of the next queued piece to a specific viewer. /// - /// The target recipient. - private void SendNextPieceUpdate(ICommonSession session) + private void SendNextPieceUpdate(EntityUid actor) { - SendMessage(new BlockGameMessages.BlockGameVisualUpdateMessage(NextPiece.BlocksForPreview(), BlockGameMessages.BlockGameVisualType.NextBlock), session); + SendMessage(new BlockGameMessages.BlockGameVisualUpdateMessage(NextPiece.BlocksForPreview(), BlockGameMessages.BlockGameVisualType.NextBlock), actor); } /// @@ -302,13 +298,12 @@ private void SendHoldPieceUpdate() /// /// Broadcasts the state of the currently held piece to a specific viewer. /// - /// The target recipient. - private void SendHoldPieceUpdate(ICommonSession session) + private void SendHoldPieceUpdate(EntityUid actor) { if (HeldPiece.HasValue) - SendMessage(new BlockGameMessages.BlockGameVisualUpdateMessage(HeldPiece.Value.BlocksForPreview(), BlockGameMessages.BlockGameVisualType.HoldBlock), session); + SendMessage(new BlockGameMessages.BlockGameVisualUpdateMessage(HeldPiece.Value.BlocksForPreview(), BlockGameMessages.BlockGameVisualType.HoldBlock), actor); else - SendMessage(new BlockGameMessages.BlockGameVisualUpdateMessage(Array.Empty(), BlockGameMessages.BlockGameVisualType.HoldBlock), session); + SendMessage(new BlockGameMessages.BlockGameVisualUpdateMessage(Array.Empty(), BlockGameMessages.BlockGameVisualType.HoldBlock), actor); } /// @@ -322,10 +317,9 @@ private void SendLevelUpdate() /// /// Broadcasts the current game level to a specific viewer. /// - /// The target recipient. - private void SendLevelUpdate(ICommonSession session) + private void SendLevelUpdate(EntityUid actor) { - SendMessage(new BlockGameMessages.BlockGameLevelUpdateMessage(Level), session); + SendMessage(new BlockGameMessages.BlockGameLevelUpdateMessage(Level), actor); } /// @@ -339,10 +333,9 @@ private void SendPointsUpdate() /// /// Broadcasts the current game score to a specific viewer. /// - /// The target recipient. - private void SendPointsUpdate(ICommonSession session) + private void SendPointsUpdate(EntityUid actor) { - SendMessage(new BlockGameMessages.BlockGameScoreUpdateMessage(Points), session); + SendMessage(new BlockGameMessages.BlockGameScoreUpdateMessage(Points), actor); } /// @@ -356,9 +349,8 @@ private void SendHighscoreUpdate() /// /// Broadcasts the current game high score positions to a specific viewer. /// - /// The target recipient. - private void SendHighscoreUpdate(ICommonSession session) + private void SendHighscoreUpdate(EntityUid actor) { - SendMessage(new BlockGameMessages.BlockGameHighScoreUpdateMessage(_arcadeSystem.GetLocalHighscores(), _arcadeSystem.GetGlobalHighscores()), session); + SendMessage(new BlockGameMessages.BlockGameHighScoreUpdateMessage(_arcadeSystem.GetLocalHighscores(), _arcadeSystem.GetGlobalHighscores()), actor); } } diff --git a/Content.Server/Arcade/BlockGame/BlockGame.cs b/Content.Server/Arcade/BlockGame/BlockGame.cs index 675776828f8..a6707af408e 100644 --- a/Content.Server/Arcade/BlockGame/BlockGame.cs +++ b/Content.Server/Arcade/BlockGame/BlockGame.cs @@ -10,8 +10,8 @@ public sealed partial class BlockGame { [Dependency] private readonly IEntityManager _entityManager = default!; [Dependency] private readonly IRobustRandom _random = default!; - private readonly ArcadeSystem _arcadeSystem = default!; - private readonly UserInterfaceSystem _uiSystem = default!; + private readonly ArcadeSystem _arcadeSystem; + private readonly UserInterfaceSystem _uiSystem; /// /// What entity is currently hosting this game of NT-BG. @@ -79,7 +79,7 @@ private void InvokeGameover() _gameOver = true; if (_entityManager.TryGetComponent(_owner, out var cabinet) - && _entityManager.TryGetComponent(cabinet.Player?.AttachedEntity, out var meta)) + && _entityManager.TryGetComponent(cabinet.Player, out var meta)) { _highScorePlacement = _arcadeSystem.RegisterHighScore(meta.EntityName, Points); SendHighscoreUpdate(); diff --git a/Content.Server/Arcade/BlockGame/BlockGameArcadeComponent.cs b/Content.Server/Arcade/BlockGame/BlockGameArcadeComponent.cs index 5613d915444..75952b0a33b 100644 --- a/Content.Server/Arcade/BlockGame/BlockGameArcadeComponent.cs +++ b/Content.Server/Arcade/BlockGame/BlockGameArcadeComponent.cs @@ -13,10 +13,10 @@ public sealed partial class BlockGameArcadeComponent : Component /// /// The player currently playing the active session of NT-BG. /// - public ICommonSession? Player = null; + public EntityUid? Player = null; /// /// The players currently viewing (but not playing) the active session of NT-BG. /// - public readonly List Spectators = new(); + public readonly List Spectators = new(); } diff --git a/Content.Server/Arcade/BlockGame/BlockGameArcadeSystem.cs b/Content.Server/Arcade/BlockGame/BlockGameArcadeSystem.cs index ad65c5cca6b..561cad8d7ee 100644 --- a/Content.Server/Arcade/BlockGame/BlockGameArcadeSystem.cs +++ b/Content.Server/Arcade/BlockGame/BlockGameArcadeSystem.cs @@ -37,14 +37,12 @@ public override void Update(float frameTime) } } - private void UpdatePlayerStatus(EntityUid uid, ICommonSession session, PlayerBoundUserInterface? bui = null, BlockGameArcadeComponent? blockGame = null) + private void UpdatePlayerStatus(EntityUid uid, EntityUid actor, BlockGameArcadeComponent? blockGame = null) { if (!Resolve(uid, ref blockGame)) return; - if (bui == null && !_uiSystem.TryGetUi(uid, BlockGameUiKey.Key, out bui)) - return; - _uiSystem.TrySendUiMessage(bui, new BlockGameMessages.BlockGameUserStatusMessage(blockGame.Player == session), session); + _uiSystem.ServerSendUiMessage(uid, BlockGameUiKey.Key, new BlockGameMessages.BlockGameUserStatusMessage(blockGame.Player == actor), actor); } private void OnComponentInit(EntityUid uid, BlockGameArcadeComponent component, ComponentInit args) @@ -54,33 +52,21 @@ private void OnComponentInit(EntityUid uid, BlockGameArcadeComponent component, private void OnAfterUIOpen(EntityUid uid, BlockGameArcadeComponent component, AfterActivatableUIOpenEvent args) { - if (!TryComp(args.User, out var actor)) - return; - if (!_uiSystem.TryGetUi(uid, BlockGameUiKey.Key, out var bui)) - return; - - var session = actor.PlayerSession; - if (!bui.SubscribedSessions.Contains(session)) - return; - if (component.Player == null) - component.Player = session; + component.Player = args.Actor; else - component.Spectators.Add(session); + component.Spectators.Add(args.Actor); - UpdatePlayerStatus(uid, session, bui, component); - component.Game?.UpdateNewPlayerUI(session); + UpdatePlayerStatus(uid, args.Actor, component); + component.Game?.UpdateNewPlayerUI(args.Actor); } private void OnAfterUiClose(EntityUid uid, BlockGameArcadeComponent component, BoundUIClosedEvent args) { - if (args.Session is not { } session) - return; - - if (component.Player != session) + if (component.Player != args.Actor) { - component.Spectators.Remove(session); - UpdatePlayerStatus(uid, session, blockGame: component); + component.Spectators.Remove(args.Actor); + UpdatePlayerStatus(uid, args.Actor, blockGame: component); return; } @@ -88,11 +74,11 @@ private void OnAfterUiClose(EntityUid uid, BlockGameArcadeComponent component, B if (component.Spectators.Count > 0) { component.Player = component.Spectators[0]; - component.Spectators.Remove(component.Player); - UpdatePlayerStatus(uid, component.Player, blockGame: component); + component.Spectators.Remove(component.Player.Value); + UpdatePlayerStatus(uid, component.Player.Value, blockGame: component); } - UpdatePlayerStatus(uid, temp, blockGame: component); + UpdatePlayerStatus(uid, temp.Value, blockGame: component); } private void OnBlockPowerChanged(EntityUid uid, BlockGameArcadeComponent component, ref PowerChangedEvent args) @@ -100,8 +86,7 @@ private void OnBlockPowerChanged(EntityUid uid, BlockGameArcadeComponent compone if (args.Powered) return; - if (_uiSystem.TryGetUi(uid, BlockGameUiKey.Key, out var bui)) - _uiSystem.CloseAll(bui); + _uiSystem.CloseUi(uid, BlockGameUiKey.Key); component.Player = null; component.Spectators.Clear(); } @@ -112,7 +97,7 @@ private void OnPlayerAction(EntityUid uid, BlockGameArcadeComponent component, B return; if (!BlockGameUiKey.Key.Equals(msg.UiKey)) return; - if (msg.Session != component.Player) + if (msg.Actor != component.Player) return; if (msg.PlayerAction == BlockGamePlayerAction.NewGame) diff --git a/Content.Server/Arcade/SpaceVillainGame/SpaceVillainArcadeSystem.cs b/Content.Server/Arcade/SpaceVillainGame/SpaceVillainArcadeSystem.cs index a5ca626d131..07a4d044cab 100644 --- a/Content.Server/Arcade/SpaceVillainGame/SpaceVillainArcadeSystem.cs +++ b/Content.Server/Arcade/SpaceVillainGame/SpaceVillainArcadeSystem.cs @@ -77,8 +77,7 @@ private void OnSVPlayerAction(EntityUid uid, SpaceVillainArcadeComponent compone if (!TryComp(uid, out var power) || !power.Powered) return; - if (msg.Session.AttachedEntity != null) - RaiseLocalEvent(msg.Session.AttachedEntity.Value, new MoodEffectEvent("ArcadePlay")); + RaiseLocalEvent(EntityManager.GetEntity(msg.Entity), new MoodEffectEvent("ArcadePlay")); switch (msg.PlayerAction) { @@ -94,12 +93,10 @@ private void OnSVPlayerAction(EntityUid uid, SpaceVillainArcadeComponent compone _audioSystem.PlayPvs(component.NewGameSound, uid, AudioParams.Default.WithVolume(-4f)); component.Game = new SpaceVillainGame(uid, component, this); - if (_uiSystem.TryGetUi(uid, SpaceVillainArcadeUiKey.Key, out var bui)) - _uiSystem.SendUiMessage(bui, component.Game.GenerateMetaDataMessage()); + _uiSystem.ServerSendUiMessage(uid, SpaceVillainArcadeUiKey.Key, component.Game.GenerateMetaDataMessage()); break; case PlayerAction.RequestData: - if (_uiSystem.TryGetUi(uid, SpaceVillainArcadeUiKey.Key, out bui)) - _uiSystem.SendUiMessage(bui, component.Game.GenerateMetaDataMessage()); + _uiSystem.ServerSendUiMessage(uid, SpaceVillainArcadeUiKey.Key, component.Game.GenerateMetaDataMessage()); break; } } @@ -114,7 +111,6 @@ private void OnSVillainPower(EntityUid uid, SpaceVillainArcadeComponent componen if (TryComp(uid, out var power) && power.Powered) return; - if (_uiSystem.TryGetUi(uid, SpaceVillainArcadeUiKey.Key, out var bui)) - _uiSystem.CloseAll(bui); + _uiSystem.CloseUi(uid, SpaceVillainArcadeUiKey.Key); } } diff --git a/Content.Server/Arcade/SpaceVillainGame/SpaceVillainGame.Ui.cs b/Content.Server/Arcade/SpaceVillainGame/SpaceVillainGame.Ui.cs index 890e9888a79..ebcfb8e3f64 100644 --- a/Content.Server/Arcade/SpaceVillainGame/SpaceVillainGame.Ui.cs +++ b/Content.Server/Arcade/SpaceVillainGame/SpaceVillainGame.Ui.cs @@ -9,8 +9,7 @@ public sealed partial class SpaceVillainGame /// private void UpdateUi(EntityUid uid, bool metadata = false) { - if (_uiSystem.TryGetUi(uid, SpaceVillainArcadeUiKey.Key, out var bui)) - _uiSystem.SendUiMessage(bui, metadata ? GenerateMetaDataMessage() : GenerateUpdateMessage()); + _uiSystem.ServerSendUiMessage(uid, SpaceVillainArcadeUiKey.Key, metadata ? GenerateMetaDataMessage() : GenerateUpdateMessage()); } private void UpdateUi(EntityUid uid, string message1, string message2, bool metadata = false) diff --git a/Content.Server/Atmos/Components/BreathToolComponent.cs b/Content.Server/Atmos/Components/BreathToolComponent.cs index f3688ef7ffc..ae17a5d872f 100644 --- a/Content.Server/Atmos/Components/BreathToolComponent.cs +++ b/Content.Server/Atmos/Components/BreathToolComponent.cs @@ -12,9 +12,10 @@ public sealed partial class BreathToolComponent : Component /// /// Tool is functional only in allowed slots /// - [DataField("allowedSlots")] + [DataField] public SlotFlags AllowedSlots = SlotFlags.MASK | SlotFlags.HEAD; public bool IsFunctional; + public EntityUid? ConnectedInternalsEntity; } } diff --git a/Content.Server/Atmos/Components/FlammableComponent.cs b/Content.Server/Atmos/Components/FlammableComponent.cs index 33a163228f1..9f39af540dd 100644 --- a/Content.Server/Atmos/Components/FlammableComponent.cs +++ b/Content.Server/Atmos/Components/FlammableComponent.cs @@ -11,49 +11,65 @@ public sealed partial class FlammableComponent : Component [ViewVariables(VVAccess.ReadWrite)] [DataField] - public bool OnFire { get; set; } + public bool OnFire; [ViewVariables(VVAccess.ReadWrite)] [DataField] - public float FireStacks { get; set; } + public float FireStacks; [ViewVariables(VVAccess.ReadWrite)] - [DataField("fireSpread")] + [DataField] + public float MaximumFireStacks = 10f; + + [ViewVariables(VVAccess.ReadWrite)] + [DataField] + public float MinimumFireStacks = -10f; + + [ViewVariables(VVAccess.ReadWrite)] + [DataField] + public string FlammableFixtureID = "flammable"; + + [ViewVariables(VVAccess.ReadWrite)] + [DataField] + public float MinIgnitionTemperature = 373.15f; + + [ViewVariables(VVAccess.ReadWrite)] + [DataField] public bool FireSpread { get; private set; } = false; [ViewVariables(VVAccess.ReadWrite)] - [DataField("canResistFire")] + [DataField] public bool CanResistFire { get; private set; } = false; - [DataField("damage", required: true)] + [DataField(required: true)] [ViewVariables(VVAccess.ReadWrite)] public DamageSpecifier Damage = new(); // Empty by default, we don't want any funny NREs. /// /// Used for the fixture created to handle passing firestacks when two flammable objects collide. /// - [DataField("flammableCollisionShape")] + [DataField] public IPhysShape FlammableCollisionShape = new PhysShapeCircle(0.35f); /// /// Should the component be set on fire by interactions with isHot entities /// [ViewVariables(VVAccess.ReadWrite)] - [DataField("alwaysCombustible")] + [DataField] public bool AlwaysCombustible = false; /// /// Can the component anyhow lose its FireStacks? /// [ViewVariables(VVAccess.ReadWrite)] - [DataField("canExtinguish")] + [DataField] public bool CanExtinguish = true; /// /// How many firestacks should be applied to component when being set on fire? /// [ViewVariables(VVAccess.ReadWrite)] - [DataField("firestacksOnIgnite")] + [DataField] public float FirestacksOnIgnite = 2.0f; /// diff --git a/Content.Server/Atmos/Components/GasMixtureHolderComponent.cs b/Content.Server/Atmos/Components/GasMixtureHolderComponent.cs index 9d533f6ec4d..98feb433468 100644 --- a/Content.Server/Atmos/Components/GasMixtureHolderComponent.cs +++ b/Content.Server/Atmos/Components/GasMixtureHolderComponent.cs @@ -1,4 +1,6 @@ -namespace Content.Server.Atmos.Components +using Content.Shared.Atmos; + +namespace Content.Server.Atmos.Components { [RegisterComponent] public sealed partial class GasMixtureHolderComponent : Component, IGasMixtureHolder diff --git a/Content.Server/Atmos/Components/MapAtmosphereComponent.cs b/Content.Server/Atmos/Components/MapAtmosphereComponent.cs index 6bdef901d44..bdd05e78494 100644 --- a/Content.Server/Atmos/Components/MapAtmosphereComponent.cs +++ b/Content.Server/Atmos/Components/MapAtmosphereComponent.cs @@ -1,3 +1,4 @@ +using Content.Shared.Atmos; using Content.Shared.Atmos.Components; using Content.Shared.Atmos.EntitySystems; diff --git a/Content.Server/Atmos/Consoles/AtmosAlertsComputerSystem.cs b/Content.Server/Atmos/Consoles/AtmosAlertsComputerSystem.cs new file mode 100644 index 00000000000..5d040cd7b37 --- /dev/null +++ b/Content.Server/Atmos/Consoles/AtmosAlertsComputerSystem.cs @@ -0,0 +1,356 @@ +using Content.Server.Atmos.Monitor.Components; +using Content.Server.DeviceNetwork.Components; +using Content.Server.Power.Components; +using Content.Shared.Atmos; +using Content.Shared.Atmos.Components; +using Content.Shared.Atmos.Consoles; +using Content.Shared.Atmos.Monitor; +using Content.Shared.Atmos.Monitor.Components; +using Content.Shared.Pinpointer; +using Robust.Server.GameObjects; +using Robust.Shared.Map.Components; +using Robust.Shared.Player; +using Robust.Shared.ContentPack; +using Robust.Shared.Prototypes; +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using Content.Shared.Access.Components; +using Content.Shared.Database; +using Content.Shared.NameIdentifier; +using Content.Shared.Stacks; +using JetBrains.Annotations; +using Robust.Shared.Utility; + +namespace Content.Server.Atmos.Monitor.Systems; + +public sealed class AtmosAlertsComputerSystem : SharedAtmosAlertsComputerSystem +{ + [Dependency] private readonly UserInterfaceSystem _uiSystem = default!; + [Dependency] private readonly AirAlarmSystem _airAlarmSystem = default!; + [Dependency] private readonly AtmosDeviceNetworkSystem _atmosDevNet = default!; + [Dependency] private readonly SharedAppearanceSystem _appearance = default!; + + private const float UpdateTime = 1.0f; + + // Note: this data does not need to be saved + private float _updateTimer = 1.0f; + + public override void Initialize() + { + base.Initialize(); + + // Console events + SubscribeLocalEvent(OnConsoleInit); + SubscribeLocalEvent(OnConsoleParentChanged); + SubscribeLocalEvent(OnFocusChangedMessage); + + // Grid events + SubscribeLocalEvent(OnGridSplit); + SubscribeLocalEvent(OnDeviceAnchorChanged); + } + + #region Event handling + + private void OnConsoleInit(EntityUid uid, AtmosAlertsComputerComponent component, ComponentInit args) + { + InitalizeConsole(uid, component); + } + + private void OnConsoleParentChanged(EntityUid uid, AtmosAlertsComputerComponent component, EntParentChangedMessage args) + { + InitalizeConsole(uid, component); + } + + private void OnFocusChangedMessage(EntityUid uid, AtmosAlertsComputerComponent component, AtmosAlertsComputerFocusChangeMessage args) + { + component.FocusDevice = args.FocusDevice; + } + + private void OnGridSplit(ref GridSplitEvent args) + { + // Collect grids + var allGrids = args.NewGrids.ToList(); + + if (!allGrids.Contains(args.Grid)) + allGrids.Add(args.Grid); + + // Update atmos monitoring consoles that stand upon an updated grid + var query = AllEntityQuery(); + while (query.MoveNext(out var ent, out var entConsole, out var entXform)) + { + if (entXform.GridUid == null) + continue; + + if (!allGrids.Contains(entXform.GridUid.Value)) + continue; + + InitalizeConsole(ent, entConsole); + } + } + + private void OnDeviceAnchorChanged(EntityUid uid, AtmosAlertsDeviceComponent component, AnchorStateChangedEvent args) + { + var xform = Transform(uid); + var gridUid = xform.GridUid; + + if (gridUid == null) + return; + + if (!TryGetAtmosDeviceNavMapData(uid, component, xform, gridUid.Value, out var data)) + return; + + var netEntity = EntityManager.GetNetEntity(uid); + + var query = AllEntityQuery(); + while (query.MoveNext(out var ent, out var entConsole, out var entXform)) + { + if (gridUid != entXform.GridUid) + continue; + + if (args.Anchored) + entConsole.AtmosDevices.Add(data.Value); + + else if (!args.Anchored) + entConsole.AtmosDevices.RemoveWhere(x => x.NetEntity == netEntity); + } + } + + #endregion + + public override void Update(float frameTime) + { + base.Update(frameTime); + + _updateTimer += frameTime; + + if (_updateTimer >= UpdateTime) + { + _updateTimer -= UpdateTime; + + // Keep a list of UI entries for each gridUid, in case multiple consoles stand on the same grid + var airAlarmEntriesForEachGrid = new Dictionary(); + var fireAlarmEntriesForEachGrid = new Dictionary(); + + var query = AllEntityQuery(); + while (query.MoveNext(out var ent, out var entConsole, out var entXform)) + { + if (entXform?.GridUid == null) + continue; + + // Make a list of alarm state data for all the air and fire alarms on the grid + if (!airAlarmEntriesForEachGrid.TryGetValue(entXform.GridUid.Value, out var airAlarmEntries)) + { + airAlarmEntries = GetAlarmStateData(entXform.GridUid.Value, AtmosAlertsComputerGroup.AirAlarm).ToArray(); + airAlarmEntriesForEachGrid[entXform.GridUid.Value] = airAlarmEntries; + } + + if (!fireAlarmEntriesForEachGrid.TryGetValue(entXform.GridUid.Value, out var fireAlarmEntries)) + { + fireAlarmEntries = GetAlarmStateData(entXform.GridUid.Value, AtmosAlertsComputerGroup.FireAlarm).ToArray(); + fireAlarmEntriesForEachGrid[entXform.GridUid.Value] = fireAlarmEntries; + } + + // Determine the highest level of alert for the console (based on non-silenced alarms) + var highestAlert = AtmosAlarmType.Invalid; + + foreach (var entry in airAlarmEntries) + { + if (entry.AlarmState > highestAlert && !entConsole.SilencedDevices.Contains(entry.NetEntity)) + highestAlert = entry.AlarmState; + } + + foreach (var entry in fireAlarmEntries) + { + if (entry.AlarmState > highestAlert && !entConsole.SilencedDevices.Contains(entry.NetEntity)) + highestAlert = entry.AlarmState; + } + + // Update the appearance of the console based on the highest recorded level of alert + if (TryComp(ent, out var entAppearance)) + _appearance.SetData(ent, AtmosAlertsComputerVisuals.ComputerLayerScreen, (int) highestAlert, entAppearance); + + // If the console UI is open, send UI data to each subscribed session + UpdateUIState(ent, airAlarmEntries, fireAlarmEntries, entConsole, entXform); + } + } + } + + public void UpdateUIState + (EntityUid uid, + AtmosAlertsComputerEntry[] airAlarmStateData, + AtmosAlertsComputerEntry[] fireAlarmStateData, + AtmosAlertsComputerComponent component, + TransformComponent xform) + { + if (!_uiSystem.IsUiOpen(uid, AtmosAlertsComputerUiKey.Key)) + return; + + var gridUid = xform.GridUid!.Value; + + if (!HasComp(gridUid)) + return; + + // The grid must have a NavMapComponent to visualize the map in the UI + EnsureComp(gridUid); + + // Gathering remaining data to be send to the client + var focusAlarmData = GetFocusAlarmData(uid, GetEntity(component.FocusDevice), gridUid); + + // Set the UI state + _uiSystem.SetUiState(uid, AtmosAlertsComputerUiKey.Key, + new AtmosAlertsComputerBoundInterfaceState(airAlarmStateData, fireAlarmStateData, focusAlarmData)); + } + + private List GetAlarmStateData(EntityUid gridUid, AtmosAlertsComputerGroup group) + { + var alarmStateData = new List(); + + var queryAlarms = AllEntityQuery(); + while (queryAlarms.MoveNext(out var ent, out var entDevice, out var entAtmosAlarmable, out var entDeviceNetwork, out var entXform)) + { + if (entXform.GridUid != gridUid) + continue; + + if (!entXform.Anchored) + continue; + + if (entDevice.Group != group) + continue; + + // If emagged, change the alarm type to normal + var alarmState = (entAtmosAlarmable.LastAlarmState == AtmosAlarmType.Emagged) ? AtmosAlarmType.Normal : entAtmosAlarmable.LastAlarmState; + + // Unpowered alarms can't sound + if (TryComp(ent, out var entAPCPower) && !entAPCPower.Powered) + alarmState = AtmosAlarmType.Invalid; + + var entry = new AtmosAlertsComputerEntry + (GetNetEntity(ent), + GetNetCoordinates(entXform.Coordinates), + entDevice.Group, + alarmState, + MetaData(ent).EntityName, + entDeviceNetwork.Address); + + alarmStateData.Add(entry); + } + + return alarmStateData; + } + + private AtmosAlertsFocusDeviceData? GetFocusAlarmData(EntityUid uid, EntityUid? focusDevice, EntityUid gridUid) + { + if (focusDevice == null) + return null; + + var focusDeviceXform = Transform(focusDevice.Value); + + if (!focusDeviceXform.Anchored || + focusDeviceXform.GridUid != gridUid || + !TryComp(focusDevice.Value, out var focusDeviceAirAlarm)) + { + return null; + } + + // Force update the sensors attached to the alarm + if (!_uiSystem.IsUiOpen(focusDevice.Value, SharedAirAlarmInterfaceKey.Key)) + { + _atmosDevNet.Register(focusDevice.Value, null); + _atmosDevNet.Sync(focusDevice.Value, null); + + foreach ((var address, var _) in focusDeviceAirAlarm.SensorData) + _atmosDevNet.Register(uid, null); + } + + // Get the sensor data + var temperatureData = (_airAlarmSystem.CalculateTemperatureAverage(focusDeviceAirAlarm), AtmosAlarmType.Normal); + var pressureData = (_airAlarmSystem.CalculatePressureAverage(focusDeviceAirAlarm), AtmosAlarmType.Normal); + var gasData = new Dictionary(); + + foreach ((var address, var sensorData) in focusDeviceAirAlarm.SensorData) + { + if (sensorData.TemperatureThreshold.CheckThreshold(sensorData.Temperature, out var temperatureState) && + (int) temperatureState > (int) temperatureData.Item2) + { + temperatureData = (temperatureData.Item1, temperatureState); + } + + if (sensorData.PressureThreshold.CheckThreshold(sensorData.Pressure, out var pressureState) && + (int) pressureState > (int) pressureData.Item2) + { + pressureData = (pressureData.Item1, pressureState); + } + + if (focusDeviceAirAlarm.SensorData.Sum(g => g.Value.TotalMoles) > 1e-8) + { + foreach ((var gas, var threshold) in sensorData.GasThresholds) + { + if (!gasData.ContainsKey(gas)) + { + float mol = _airAlarmSystem.CalculateGasMolarConcentrationAverage(focusDeviceAirAlarm, gas, out var percentage); + + if (mol < 1e-8) + continue; + + gasData[gas] = (mol, percentage, AtmosAlarmType.Normal); + } + + if (threshold.CheckThreshold(gasData[gas].Item2, out var gasState) && + (int) gasState > (int) gasData[gas].Item3) + { + gasData[gas] = (gasData[gas].Item1, gasData[gas].Item2, gasState); + } + } + } + } + + return new AtmosAlertsFocusDeviceData(GetNetEntity(focusDevice.Value), temperatureData, pressureData, gasData); + } + + private HashSet GetAllAtmosDeviceNavMapData(EntityUid gridUid) + { + var atmosDeviceNavMapData = new HashSet(); + + var query = AllEntityQuery(); + while (query.MoveNext(out var ent, out var entComponent, out var entXform)) + { + if (TryGetAtmosDeviceNavMapData(ent, entComponent, entXform, gridUid, out var data)) + atmosDeviceNavMapData.Add(data.Value); + } + + return atmosDeviceNavMapData; + } + + private bool TryGetAtmosDeviceNavMapData + (EntityUid uid, + AtmosAlertsDeviceComponent component, + TransformComponent xform, + EntityUid gridUid, + [NotNullWhen(true)] out AtmosAlertsDeviceNavMapData? output) + { + output = null; + + if (xform.GridUid != gridUid) + return false; + + if (!xform.Anchored) + return false; + + output = new AtmosAlertsDeviceNavMapData(GetNetEntity(uid), GetNetCoordinates(xform.Coordinates), component.Group); + + return true; + } + + private void InitalizeConsole(EntityUid uid, AtmosAlertsComputerComponent component) + { + var xform = Transform(uid); + + if (xform.GridUid == null) + return; + + var grid = xform.GridUid.Value; + component.AtmosDevices = GetAllAtmosDeviceNavMapData(grid); + + Dirty(uid, component); + } +} diff --git a/Content.Server/Atmos/EntitySystems/AirFilterSystem.cs b/Content.Server/Atmos/EntitySystems/AirFilterSystem.cs index 2ab15cfb174..c3344c830c0 100644 --- a/Content.Server/Atmos/EntitySystems/AirFilterSystem.cs +++ b/Content.Server/Atmos/EntitySystems/AirFilterSystem.cs @@ -12,7 +12,6 @@ namespace Content.Server.Atmos.EntitySystems; public sealed class AirFilterSystem : EntitySystem { [Dependency] private readonly AtmosphereSystem _atmosphere = default!; - [Dependency] private readonly IMapManager _map = default!; [Dependency] private readonly SharedTransformSystem _transform = default!; public override void Initialize() diff --git a/Content.Server/Atmos/EntitySystems/AirtightSystem.cs b/Content.Server/Atmos/EntitySystems/AirtightSystem.cs index 152fba8fc4d..cd07da71127 100644 --- a/Content.Server/Atmos/EntitySystems/AirtightSystem.cs +++ b/Content.Server/Atmos/EntitySystems/AirtightSystem.cs @@ -12,6 +12,7 @@ public sealed class AirtightSystem : EntitySystem [Dependency] private readonly SharedTransformSystem _transform = default!; [Dependency] private readonly AtmosphereSystem _atmosphereSystem = default!; [Dependency] private readonly ExplosionSystem _explosionSystem = default!; + [Dependency] private readonly SharedMapSystem _mapSystem = default!; public override void Initialize() { @@ -24,16 +25,19 @@ public override void Initialize() private void OnAirtightInit(Entity airtight, ref ComponentInit args) { - var xform = EntityManager.GetComponent(airtight); - - if (airtight.Comp.FixAirBlockedDirectionInitialize) + // TODO AIRTIGHT what FixAirBlockedDirectionInitialize even for? + if (!airtight.Comp.FixAirBlockedDirectionInitialize) { - var moveEvent = new MoveEvent(airtight, default, default, Angle.Zero, xform.LocalRotation, xform, false); - if (AirtightMove(airtight, ref moveEvent)) - return; + UpdatePosition(airtight); + return; } - UpdatePosition(airtight); + var xform = Transform(airtight); + airtight.Comp.CurrentAirBlockedDirection = + (int) Rotate((AtmosDirection) airtight.Comp.InitialAirBlockedDirection, xform.LocalRotation); + UpdatePosition(airtight, xform); + var airtightEv = new AirtightChanged(airtight, airtight, false, default); + RaiseLocalEvent(airtight, ref airtightEv, true); } private void OnAirtightShutdown(Entity airtight, ref ComponentShutdown args) @@ -41,13 +45,8 @@ private void OnAirtightShutdown(Entity airtight, ref Componen var xform = Transform(airtight); // If the grid is deleting no point updating atmos. - if (HasComp(xform.GridUid) && - MetaData(xform.GridUid.Value).EntityLifeStage > EntityLifeStage.MapInitialized) - { - return; - } - - SetAirblocked(airtight, false, xform); + if (xform.GridUid != null && LifeStage(xform.GridUid.Value) <= EntityLifeStage.MapInitialized) + SetAirblocked(airtight, false, xform); } private void OnAirtightPositionChanged(EntityUid uid, AirtightComponent airtight, ref AnchorStateChangedEvent args) @@ -59,12 +58,14 @@ private void OnAirtightPositionChanged(EntityUid uid, AirtightComponent airtight var gridId = xform.GridUid; var coords = xform.Coordinates; - - var tilePos = grid.TileIndicesFor(coords); + var tilePos = _mapSystem.TileIndicesFor(gridId.Value, grid, coords); // Update and invalidate new position. airtight.LastPosition = (gridId.Value, tilePos); InvalidatePosition(gridId.Value, tilePos); + + var airtightEv = new AirtightChanged(uid, airtight, false, (gridId.Value, tilePos)); + RaiseLocalEvent(uid, ref airtightEv, true); } private void OnAirtightReAnchor(EntityUid uid, AirtightComponent airtight, ref ReAnchorEvent args) @@ -74,24 +75,20 @@ private void OnAirtightReAnchor(EntityUid uid, AirtightComponent airtight, ref R // Update and invalidate new position. airtight.LastPosition = (gridId, args.TilePos); InvalidatePosition(gridId, args.TilePos); - } - } - private void OnAirtightMoved(Entity airtight, ref MoveEvent ev) - { - AirtightMove(airtight, ref ev); + var airtightEv = new AirtightChanged(uid, airtight, false, (gridId, args.TilePos)); + RaiseLocalEvent(uid, ref airtightEv, true); + } } - private bool AirtightMove(Entity ent, ref MoveEvent ev) + private void OnAirtightMoved(Entity ent, ref MoveEvent ev) { var (owner, airtight) = ent; - airtight.CurrentAirBlockedDirection = (int) Rotate((AtmosDirection)airtight.InitialAirBlockedDirection, ev.NewRotation); var pos = airtight.LastPosition; UpdatePosition(ent, ev.Component); - var airtightEv = new AirtightChanged(owner, airtight, pos); + var airtightEv = new AirtightChanged(owner, airtight, false, pos); RaiseLocalEvent(owner, ref airtightEv, true); - return true; } public void SetAirblocked(Entity airtight, bool airblocked, TransformComponent? xform = null) @@ -105,7 +102,7 @@ public void SetAirblocked(Entity airtight, bool airblocked, T var pos = airtight.Comp.LastPosition; airtight.Comp.AirBlocked = airblocked; UpdatePosition(airtight, xform); - var airtightEv = new AirtightChanged(airtight, airtight, pos); + var airtightEv = new AirtightChanged(airtight, airtight, true, pos); RaiseLocalEvent(airtight, ref airtightEv, true); } @@ -152,7 +149,13 @@ private AtmosDirection Rotate(AtmosDirection myDirection, Angle myAngle) } } + /// + /// Raised upon the airtight status being changed via anchoring, movement, etc. + /// + /// + /// + /// Whether the changed + /// [ByRefEvent] - public readonly record struct AirtightChanged(EntityUid Entity, AirtightComponent Airtight, - (EntityUid Grid, Vector2i Tile) Position); + public readonly record struct AirtightChanged(EntityUid Entity, AirtightComponent Airtight, bool AirBlockedChanged, (EntityUid Grid, Vector2i Tile) Position); } diff --git a/Content.Server/Atmos/EntitySystems/AtmosExposedSystem.cs b/Content.Server/Atmos/EntitySystems/AtmosExposedSystem.cs index 9590b9aa548..39469e993f0 100644 --- a/Content.Server/Atmos/EntitySystems/AtmosExposedSystem.cs +++ b/Content.Server/Atmos/EntitySystems/AtmosExposedSystem.cs @@ -1,3 +1,4 @@ +using Content.Shared.Atmos; using Robust.Shared.Map; namespace Content.Server.Atmos.EntitySystems diff --git a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.API.cs b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.API.cs index 614d550c2f7..df31db6ba07 100644 --- a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.API.cs +++ b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.API.cs @@ -1,10 +1,10 @@ using System.Linq; using Content.Server.Atmos.Components; using Content.Server.Atmos.Piping.Components; -using Content.Server.Atmos.Reactions; using Content.Server.NodeContainer.NodeGroups; using Content.Shared.Atmos; using Content.Shared.Atmos.Components; +using Content.Shared.Atmos.Reactions; using Robust.Shared.Map.Components; using Robust.Shared.Utility; diff --git a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Gases.cs b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Gases.cs index f8ee4f41923..70c4639e481 100644 --- a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Gases.cs +++ b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Gases.cs @@ -2,6 +2,7 @@ using System.Runtime.CompilerServices; using Content.Server.Atmos.Reactions; using Content.Shared.Atmos; +using Content.Shared.Atmos.Reactions; using Robust.Shared.Prototypes; using DependencyAttribute = Robust.Shared.IoC.DependencyAttribute; diff --git a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.GridAtmosphere.cs b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.GridAtmosphere.cs index 4b9ef49a406..3830745f68c 100644 --- a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.GridAtmosphere.cs +++ b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.GridAtmosphere.cs @@ -2,6 +2,7 @@ using Content.Server.Atmos.Reactions; using Content.Shared.Atmos; using Content.Shared.Atmos.Components; +using Content.Shared.Atmos.Reactions; using Robust.Shared.Map; using Robust.Shared.Map.Components; using Robust.Shared.Utility; diff --git a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Hotspot.cs b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Hotspot.cs index 7163b4cd44c..db952237338 100644 --- a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Hotspot.cs +++ b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Hotspot.cs @@ -2,6 +2,7 @@ using Content.Server.Atmos.Reactions; using Content.Shared.Atmos; using Content.Shared.Atmos.Components; +using Content.Shared.Atmos.Reactions; using Content.Shared.Audio; using Content.Shared.Database; using Robust.Shared.Audio; diff --git a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Map.cs b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Map.cs index 25b3b801f76..4b77d9c70da 100644 --- a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Map.cs +++ b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Map.cs @@ -1,4 +1,5 @@ using Content.Server.Atmos.Components; +using Content.Shared.Atmos; using Content.Shared.Atmos.Components; using Robust.Shared.GameStates; using Robust.Shared.Map.Components; diff --git a/Content.Server/Atmos/EntitySystems/FlammableSystem.cs b/Content.Server/Atmos/EntitySystems/FlammableSystem.cs index 7890b7751ac..ec0e7b07092 100644 --- a/Content.Server/Atmos/EntitySystems/FlammableSystem.cs +++ b/Content.Server/Atmos/EntitySystems/FlammableSystem.cs @@ -12,6 +12,7 @@ using Content.Shared.Damage; using Content.Shared.Database; using Content.Shared.Interaction; +using Content.Shared.Inventory; using Content.Shared.Physics; using Content.Shared.Popups; using Content.Shared.Projectiles; @@ -42,18 +43,18 @@ public sealed class FlammableSystem : EntitySystem [Dependency] private readonly AlertsSystem _alertsSystem = default!; [Dependency] private readonly FixtureSystem _fixture = default!; [Dependency] private readonly IAdminLogManager _adminLogger = default!; + [Dependency] private readonly InventorySystem _inventory = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly SharedPopupSystem _popup = default!; [Dependency] private readonly UseDelaySystem _useDelay = default!; [Dependency] private readonly AudioSystem _audio = default!; [Dependency] private readonly IRobustRandom _random = default!; - public const float MinimumFireStacks = -10f; - public const float MaximumFireStacks = 20f; - private const float UpdateTime = 1f; + private EntityQuery _inventoryQuery; + private EntityQuery _physicsQuery; - public const float MinIgnitionTemperature = 373.15f; - public const string FlammableFixtureID = "flammable"; + // This should probably be moved to the component, requires a rewrite, all fires tick at the same time + private const float UpdateTime = 1f; private float _timer; @@ -63,6 +64,9 @@ public override void Initialize() { UpdatesAfter.Add(typeof(AtmosphereSystem)); + _inventoryQuery = GetEntityQuery(); + _physicsQuery = GetEntityQuery(); + SubscribeLocalEvent(OnMapInit); SubscribeLocalEvent(OnInteractUsing); SubscribeLocalEvent(OnCollide); @@ -131,7 +135,7 @@ private void OnMapInit(EntityUid uid, FlammableComponent component, MapInitEvent if (!TryComp(uid, out var body)) return; - _fixture.TryCreateFixture(uid, component.FlammableCollisionShape, FlammableFixtureID, hard: false, + _fixture.TryCreateFixture(uid, component.FlammableCollisionShape, component.FlammableFixtureID, hard: false, collisionMask: (int) CollisionGroup.FullTileLayer, body: body); } @@ -189,7 +193,7 @@ private void OnCollide(EntityUid uid, FlammableComponent flammable, ref StartCol // Normal hard collisions, though this isn't generally possible since most flammable things are mobs // which don't collide with one another, shouldn't work here. - if (args.OtherFixtureId != FlammableFixtureID && args.OurFixtureId != FlammableFixtureID) + if (args.OtherFixtureId != flammable.FlammableFixtureID && args.OurFixtureId != flammable.FlammableFixtureID) return; if (!flammable.FireSpread) @@ -204,7 +208,17 @@ private void OnCollide(EntityUid uid, FlammableComponent flammable, ref StartCol if (flammable.OnFire && otherFlammable.OnFire) { // Both are on fire -> equalize fire stacks. - var avg = (flammable.FireStacks + otherFlammable.FireStacks) / 2; + // Weight each thing's firestacks by its mass + var mass1 = 1f; + var mass2 = 1f; + if (_physicsQuery.TryComp(uid, out var physics) && _physicsQuery.TryComp(otherUid, out var otherPhys)) + { + mass1 = physics.Mass; + mass2 = otherPhys.Mass; + } + + var total = mass1 + mass2; + var avg = (flammable.FireStacks * mass1 + otherFlammable.FireStacks * mass2) / total; flammable.FireStacks = flammable.CanExtinguish ? avg : Math.Max(flammable.FireStacks, avg); otherFlammable.FireStacks = otherFlammable.CanExtinguish ? avg : Math.Max(otherFlammable.FireStacks, avg); UpdateAppearance(uid, flammable); @@ -213,25 +227,24 @@ private void OnCollide(EntityUid uid, FlammableComponent flammable, ref StartCol } // Only one is on fire -> attempt to spread the fire. - if (flammable.OnFire) + var (srcUid, srcFlammable, destUid, destFlammable) = flammable.OnFire + ? (uid, flammable, otherUid, otherFlammable) + : (otherUid, otherFlammable, uid, flammable); + + // if the thing on fire has less mass, spread less firestacks and vice versa + var ratio = 0.5f; + if (_physicsQuery.TryComp(srcUid, out var srcPhysics) && _physicsQuery.TryComp(destUid, out var destPhys)) { - otherFlammable.FireStacks += flammable.FireStacks / 2; - Ignite(otherUid, uid, otherFlammable); - if (flammable.CanExtinguish) - { - flammable.FireStacks /= 2; - UpdateAppearance(uid, flammable); - } + ratio *= srcPhysics.Mass / destPhys.Mass; } - else + + var lost = srcFlammable.FireStacks * ratio; + destFlammable.FireStacks += lost; + Ignite(destUid, srcUid, destFlammable); + if (srcFlammable.CanExtinguish) { - flammable.FireStacks += otherFlammable.FireStacks / 2; - Ignite(uid, otherUid, flammable); - if (otherFlammable.CanExtinguish) - { - otherFlammable.FireStacks /= 2; - UpdateAppearance(otherUid, otherFlammable); - } + srcFlammable.FireStacks -= lost; + UpdateAppearance(srcUid, srcFlammable); } } @@ -242,7 +255,7 @@ private void OnIsHot(EntityUid uid, FlammableComponent flammable, IsHotEvent arg private void OnTileFire(Entity ent, ref TileFireEvent args) { - var tempDelta = args.Temperature - MinIgnitionTemperature; + var tempDelta = args.Temperature - ent.Comp.MinIgnitionTemperature; _fireEvents.TryGetValue(ent, out var maxTemp); @@ -278,7 +291,7 @@ public void AdjustFireStacks(EntityUid uid, float relativeFireStacks, FlammableC if (relativeFireStacks > 0) relativeFireStacks *= flammable.FireStackIncreaseMultiplier; - flammable.FireStacks = MathF.Min(MathF.Max(MinimumFireStacks, flammable.FireStacks + relativeFireStacks), MaximumFireStacks); + flammable.FireStacks = MathF.Min(MathF.Max(flammable.MinimumFireStacks, flammable.FireStacks + relativeFireStacks), flammable.MaximumFireStacks); if (flammable.OnFire && flammable.FireStacks <= 0) Extinguish(uid, flammable); @@ -429,15 +442,20 @@ public override void Update(float frameTime) continue; } - EnsureComp(uid); - _ignitionSourceSystem.SetIgnited(uid); - - var damageScale = MathF.Min( flammable.FireStacks, 5); + var source = EnsureComp(uid); + _ignitionSourceSystem.SetIgnited((uid, source)); if (TryComp(uid, out TemperatureComponent? temp)) - _temperatureSystem.ChangeHeat(uid, 12500 * damageScale, false, temp); + _temperatureSystem.ChangeHeat(uid, 12500 * flammable.FireStacks, false, temp); + + var ev = new GetFireProtectionEvent(); + // let the thing on fire handle it + RaiseLocalEvent(uid, ref ev); + // and whatever it's wearing + if (_inventoryQuery.TryComp(uid, out var inv)) + _inventory.RelayEvent((uid, inv), ref ev); - _damageableSystem.TryChangeDamage(uid, flammable.Damage * damageScale, interruptsDoAfters: false); + _damageableSystem.TryChangeDamage(uid, flammable.Damage * flammable.FireStacks * ev.Multiplier, interruptsDoAfters: false); AdjustFireStacks(uid, flammable.FirestackFade * (flammable.Resisting ? 10f : 1f), flammable); } diff --git a/Content.Server/Atmos/EntitySystems/GasAnalyzerSystem.cs b/Content.Server/Atmos/EntitySystems/GasAnalyzerSystem.cs index 552ee142329..65977f8c140 100644 --- a/Content.Server/Atmos/EntitySystems/GasAnalyzerSystem.cs +++ b/Content.Server/Atmos/EntitySystems/GasAnalyzerSystem.cs @@ -95,9 +95,9 @@ private void ActivateAnalyzer(EntityUid uid, GasAnalyzerComponent component, Ent component.Enabled = true; Dirty(component); UpdateAppearance(uid, component); - if(!HasComp(uid)) - AddComp(uid); + EnsureComp(uid); UpdateAnalyzer(uid, component); + OpenUserInterface(uid, user, component); } /// @@ -118,8 +118,7 @@ private void DisableAnalyzer(EntityUid uid, GasAnalyzerComponent? component = nu if (!Resolve(uid, ref component)) return; - if (user != null && TryComp(user, out var actor)) - _userInterface.TryClose(uid, GasAnalyzerUiKey.Key, actor.PlayerSession); + _userInterface.CloseUi(uid, GasAnalyzerUiKey.Key, user); component.Enabled = false; Dirty(component); @@ -132,8 +131,6 @@ private void DisableAnalyzer(EntityUid uid, GasAnalyzerComponent? component = nu /// private void OnDisabledMessage(EntityUid uid, GasAnalyzerComponent component, GasAnalyzerDisableMessage message) { - if (message.Session.AttachedEntity is not {Valid: true}) - return; DisableAnalyzer(uid, component); } @@ -142,10 +139,7 @@ private void OpenUserInterface(EntityUid uid, EntityUid user, GasAnalyzerCompone if (!Resolve(uid, ref component, false)) return; - if (!TryComp(user, out var actor)) - return; - - _userInterface.TryOpen(uid, GasAnalyzerUiKey.Key, actor.PlayerSession); + _userInterface.OpenUi(uid, GasAnalyzerUiKey.Key, user); } /// @@ -169,7 +163,7 @@ private bool UpdateAnalyzer(EntityUid uid, GasAnalyzerComponent? component = nul // Check if position is out of range => don't update and disable if (!component.LastPosition.Value.InRange(EntityManager, _transform, userPos, SharedInteractionSystem.InteractionRange)) { - if(component.User is { } userId && component.Enabled) + if (component.User is { } userId && component.Enabled) _popup.PopupEntity(Loc.GetString("gas-analyzer-shutoff"), userId, userId); DisableAnalyzer(uid, component, component.User); return false; @@ -182,13 +176,13 @@ private bool UpdateAnalyzer(EntityUid uid, GasAnalyzerComponent? component = nul var tileMixture = _atmo.GetContainingMixture(uid, true); if (tileMixture != null) { - gasMixList.Add(new GasMixEntry(Loc.GetString("gas-analyzer-window-environment-tab-label"), tileMixture.Pressure, tileMixture.Temperature, + gasMixList.Add(new GasMixEntry(Loc.GetString("gas-analyzer-window-environment-tab-label"), tileMixture.Volume, tileMixture.Pressure, tileMixture.Temperature, GenerateGasEntryArray(tileMixture))); } else { // No gases were found - gasMixList.Add(new GasMixEntry(Loc.GetString("gas-analyzer-window-environment-tab-label"), 0f, 0f)); + gasMixList.Add(new GasMixEntry(Loc.GetString("gas-analyzer-window-environment-tab-label"), 0f, 0f, 0f)); } var deviceFlipped = false; @@ -209,8 +203,8 @@ private bool UpdateAnalyzer(EntityUid uid, GasAnalyzerComponent? component = nul { foreach (var mixes in ev.GasMixtures) { - if(mixes.Value != null) - gasMixList.Add(new GasMixEntry(mixes.Key, mixes.Value.Pressure, mixes.Value.Temperature, GenerateGasEntryArray(mixes.Value))); + if (mixes.Item2 != null) + gasMixList.Add(new GasMixEntry(mixes.Item1, mixes.Item2.Volume, mixes.Item2.Pressure, mixes.Item2.Temperature, GenerateGasEntryArray(mixes.Item2))); } deviceFlipped = ev.DeviceFlipped; @@ -223,7 +217,16 @@ private bool UpdateAnalyzer(EntityUid uid, GasAnalyzerComponent? component = nul foreach (var pair in node.Nodes) { if (pair.Value is PipeNode pipeNode) - gasMixList.Add(new GasMixEntry(pair.Key, pipeNode.Air.Pressure, pipeNode.Air.Temperature, GenerateGasEntryArray(pipeNode.Air))); + { + // check if the volume is zero for some reason so we don't divide by zero + if (pipeNode.Air.Volume == 0f) + continue; + // only display the gas in the analyzed pipe element, not the whole system + var pipeAir = pipeNode.Air.Clone(); + pipeAir.Multiply(pipeNode.Volume / pipeNode.Air.Volume); + pipeAir.Volume = pipeNode.Volume; + gasMixList.Add(new GasMixEntry(pair.Key, pipeAir.Volume, pipeAir.Pressure, pipeAir.Temperature, GenerateGasEntryArray(pipeAir))); + } } } } @@ -233,7 +236,7 @@ private bool UpdateAnalyzer(EntityUid uid, GasAnalyzerComponent? component = nul if (gasMixList.Count == 0) return false; - _userInterface.TrySendUiMessage(uid, GasAnalyzerUiKey.Key, + _userInterface.ServerSendUiMessage(uid, GasAnalyzerUiKey.Key, new GasAnalyzerUserMessage(gasMixList.ToArray(), component.Target != null ? Name(component.Target.Value) : string.Empty, GetNetEntity(component.Target) ?? NetEntity.Invalid, @@ -286,9 +289,9 @@ private GasEntry[] GenerateGasEntryArray(GasMixture? mixture) public sealed class GasAnalyzerScanEvent : EntityEventArgs { /// - /// Key is the mix name (ex "pipe", "inlet", "filter"), value is the pipe direction and GasMixture. Add all mixes that should be reported when scanned. + /// The string is for the name (ex "pipe", "inlet", "filter"), GasMixture for the corresponding gas mix. Add all mixes that should be reported when scanned. /// - public Dictionary? GasMixtures; + public List<(string, GasMixture?)>? GasMixtures; /// /// If the device is flipped. Flipped is defined as when the inline input is 90 degrees CW to the side input diff --git a/Content.Server/Atmos/EntitySystems/GasTankSystem.cs b/Content.Server/Atmos/EntitySystems/GasTankSystem.cs index 80842416e8b..07594820fcc 100644 --- a/Content.Server/Atmos/EntitySystems/GasTankSystem.cs +++ b/Content.Server/Atmos/EntitySystems/GasTankSystem.cs @@ -75,7 +75,7 @@ private void OnGasTankSetPressure(Entity ent, ref GasTankSetPr public void UpdateUserInterface(Entity ent, bool initialUpdate = false) { var (owner, component) = ent; - _ui.TrySetUiState(owner, SharedGasTankUiKey.Key, + _ui.SetUiState(owner, SharedGasTankUiKey.Key, new GasTankBoundUserInterfaceState { TankPressure = component.Air?.Pressure ?? 0, @@ -359,7 +359,8 @@ public void CheckStatus(Entity ent) /// private void OnAnalyzed(EntityUid uid, GasTankComponent component, GasAnalyzerScanEvent args) { - args.GasMixtures = new Dictionary { {Name(uid), component.Air} }; + args.GasMixtures ??= new List<(string, GasMixture?)>(); + args.GasMixtures.Add((Name(uid), component.Air)); } private void OnGasTankPrice(EntityUid uid, GasTankComponent component, ref PriceCalculationEvent args) diff --git a/Content.Server/Atmos/IGasMixtureHolder.cs b/Content.Server/Atmos/IGasMixtureHolder.cs index 96efa6b9836..65d7ba69a76 100644 --- a/Content.Server/Atmos/IGasMixtureHolder.cs +++ b/Content.Server/Atmos/IGasMixtureHolder.cs @@ -1,4 +1,6 @@ -namespace Content.Server.Atmos +using Content.Shared.Atmos; + +namespace Content.Server.Atmos { public interface IGasMixtureHolder { diff --git a/Content.Server/Atmos/IGasReactionEffect.cs b/Content.Server/Atmos/IGasReactionEffect.cs index bd229694bb1..9fc9231908c 100644 --- a/Content.Server/Atmos/IGasReactionEffect.cs +++ b/Content.Server/Atmos/IGasReactionEffect.cs @@ -1,5 +1,6 @@ using Content.Server.Atmos.EntitySystems; -using Content.Server.Atmos.Reactions; +using Content.Shared.Atmos; +using Content.Shared.Atmos.Reactions; namespace Content.Server.Atmos { diff --git a/Content.Server/Atmos/Monitor/Components/AirAlarmComponent.cs b/Content.Server/Atmos/Monitor/Components/AirAlarmComponent.cs index 7030d607a6e..93f704fe21b 100644 --- a/Content.Server/Atmos/Monitor/Components/AirAlarmComponent.cs +++ b/Content.Server/Atmos/Monitor/Components/AirAlarmComponent.cs @@ -24,8 +24,6 @@ public sealed partial class AirAlarmComponent : Component public readonly Dictionary ScrubberData = new(); public readonly Dictionary SensorData = new(); - public HashSet ActivePlayers = new(); - public bool CanSync = true; /// diff --git a/Content.Server/Atmos/Monitor/Systems/AirAlarmSystem.cs b/Content.Server/Atmos/Monitor/Systems/AirAlarmSystem.cs index 2922d0796a9..04a9023c1dd 100644 --- a/Content.Server/Atmos/Monitor/Systems/AirAlarmSystem.cs +++ b/Content.Server/Atmos/Monitor/Systems/AirAlarmSystem.cs @@ -223,8 +223,7 @@ private void OnPowerChanged(EntityUid uid, AirAlarmComponent component, ref Powe private void OnClose(EntityUid uid, AirAlarmComponent component, BoundUIClosedEvent args) { - component.ActivePlayers.Remove(args.Session.UserId); - if (component.ActivePlayers.Count == 0) + if (!_ui.IsUiOpen(uid, SharedAirAlarmInterfaceKey.Key)) RemoveActiveInterface(uid); } @@ -247,9 +246,6 @@ private void OnShutdown(EntityUid uid, AirAlarmComponent component, ComponentShu private void OnActivate(EntityUid uid, AirAlarmComponent component, ActivateInWorldEvent args) { - if (!TryComp(args.User, out var actor)) - return; - if (TryComp(uid, out var panel) && panel.Open) { args.Handled = false; @@ -259,10 +255,7 @@ private void OnActivate(EntityUid uid, AirAlarmComponent component, ActivateInWo if (!this.IsPowered(uid, EntityManager)) return; - var ui = _ui.GetUiOrNull(uid, SharedAirAlarmInterfaceKey.Key); - if (ui != null) - _ui.OpenUi(ui, actor.PlayerSession); - component.ActivePlayers.Add(actor.PlayerSession.UserId); + _ui.OpenUi(uid, SharedAirAlarmInterfaceKey.Key, args.User); AddActiveInterface(uid); SyncAllDevices(uid); UpdateUI(uid, component); @@ -270,7 +263,7 @@ private void OnActivate(EntityUid uid, AirAlarmComponent component, ActivateInWo private void OnResyncAll(EntityUid uid, AirAlarmComponent component, AirAlarmResyncAllDevicesMessage args) { - if (!AccessCheck(uid, args.Session.AttachedEntity, component)) + if (!AccessCheck(uid, args.Actor, component)) { return; } @@ -285,7 +278,7 @@ private void OnResyncAll(EntityUid uid, AirAlarmComponent component, AirAlarmRes private void OnUpdateAlarmMode(EntityUid uid, AirAlarmComponent component, AirAlarmUpdateAlarmModeMessage args) { - if (AccessCheck(uid, args.Session.AttachedEntity, component)) + if (AccessCheck(uid, args.Actor, component)) { var addr = string.Empty; if (TryComp(uid, out var netConn)) @@ -309,7 +302,7 @@ private void OnUpdateAutoMode(EntityUid uid, AirAlarmComponent component, AirAla private void OnUpdateThreshold(EntityUid uid, AirAlarmComponent component, AirAlarmUpdateAlarmThresholdMessage args) { - if (AccessCheck(uid, args.Session.AttachedEntity, component)) + if (AccessCheck(uid, args.Actor, component)) SetThreshold(uid, args.Address, args.Type, args.Threshold, args.Gas); else UpdateUI(uid, component); @@ -317,7 +310,7 @@ private void OnUpdateThreshold(EntityUid uid, AirAlarmComponent component, AirAl private void OnUpdateDeviceData(EntityUid uid, AirAlarmComponent component, AirAlarmUpdateDeviceDataMessage args) { - if (AccessCheck(uid, args.Session.AttachedEntity, component) + if (AccessCheck(uid, args.Actor, component) && _deviceList.ExistsInDeviceList(uid, args.Address)) { SetDeviceData(uid, args.Address, args.Data); @@ -330,7 +323,7 @@ private void OnUpdateDeviceData(EntityUid uid, AirAlarmComponent component, AirA private void OnCopyDeviceData(EntityUid uid, AirAlarmComponent component, AirAlarmCopyDeviceDataMessage args) { - if (!AccessCheck(uid, args.Session.AttachedEntity, component)) + if (!AccessCheck(uid, args.Actor, component)) { UpdateUI(uid, component); return; @@ -377,7 +370,7 @@ private bool AccessCheck(EntityUid uid, EntityUid? user, AirAlarmComponent? comp private void OnAtmosAlarm(EntityUid uid, AirAlarmComponent component, AtmosAlarmEvent args) { - if (component.ActivePlayers.Count != 0) + if (_ui.IsUiOpen(uid, SharedAirAlarmInterfaceKey.Key)) { SyncAllDevices(uid); } @@ -571,7 +564,7 @@ private void RemoveActiveInterface(EntityUid uid) /// private void ForceCloseAllInterfaces(EntityUid uid) { - _ui.TryCloseAll(uid, SharedAirAlarmInterfaceKey.Key); + _ui.CloseUi(uid, SharedAirAlarmInterfaceKey.Key); } private void OnAtmosUpdate(EntityUid uid, AirAlarmComponent alarm, ref AtmosDeviceUpdateEvent args) @@ -593,6 +586,21 @@ public float CalculateTemperatureAverage(AirAlarmComponent alarm) : 0f; } + public float CalculateGasMolarConcentrationAverage(AirAlarmComponent alarm, Gas gas, out float percentage) + { + percentage = 0f; + + var data = alarm.SensorData.Values.SelectMany(v => v.Gases.Where(g => g.Key == gas)); + + if (data.Count() == 0) + return 0f; + + var averageMol = data.Select(kvp => kvp.Value).Average(); + percentage = data.Select(kvp => kvp.Value).Sum() / alarm.SensorData.Values.Select(v => v.TotalMoles).Sum(); + + return averageMol; + } + public void UpdateUI(EntityUid uid, AirAlarmComponent? alarm = null, DeviceNetworkComponent? devNet = null, AtmosAlarmableComponent? alarmable = null) { if (!Resolve(uid, ref alarm, ref devNet, ref alarmable)) @@ -639,7 +647,7 @@ public void UpdateUI(EntityUid uid, AirAlarmComponent? alarm = null, DeviceNetwo highestAlarm = AtmosAlarmType.Normal; } - _ui.TrySetUiState( + _ui.SetUiState( uid, SharedAirAlarmInterfaceKey.Key, new AirAlarmUIState(devNet.Address, deviceCount, pressure, temperature, dataToSend, alarm.CurrentMode, alarm.CurrentTab, highestAlarm.Value, alarm.AutoMode)); diff --git a/Content.Server/Atmos/Piping/Binary/Components/GasPortComponent.cs b/Content.Server/Atmos/Piping/Binary/Components/GasPortComponent.cs index fb7ee6d5cf9..315362383c3 100644 --- a/Content.Server/Atmos/Piping/Binary/Components/GasPortComponent.cs +++ b/Content.Server/Atmos/Piping/Binary/Components/GasPortComponent.cs @@ -1,3 +1,5 @@ +using Content.Shared.Atmos; + namespace Content.Server.Atmos.Piping.Binary.Components { [RegisterComponent] diff --git a/Content.Server/Atmos/Piping/Binary/Components/GasRecyclerComponent.cs b/Content.Server/Atmos/Piping/Binary/Components/GasRecyclerComponent.cs index e1eb0072b9d..aa7e3e0b360 100644 --- a/Content.Server/Atmos/Piping/Binary/Components/GasRecyclerComponent.cs +++ b/Content.Server/Atmos/Piping/Binary/Components/GasRecyclerComponent.cs @@ -1,11 +1,12 @@ using Content.Shared.Atmos; +using Content.Shared.Construction.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; namespace Content.Server.Atmos.Piping.Binary.Components { [RegisterComponent] public sealed partial class GasRecyclerComponent : Component { - [ViewVariables(VVAccess.ReadOnly)] [DataField("reacting")] public Boolean Reacting { get; set; } = false; @@ -17,10 +18,28 @@ public sealed partial class GasRecyclerComponent : Component [DataField("outlet")] public string OutletName { get; set; } = "outlet"; - [DataField, ViewVariables(VVAccess.ReadWrite)] + [DataField] public float MinTemp = 300 + Atmospherics.T0C; - [DataField, ViewVariables(VVAccess.ReadWrite)] + [DataField] + public float BaseMinTemp = 300 + Atmospherics.T0C; + + [DataField(customTypeSerializer: typeof(PrototypeIdSerializer))] + public string MachinePartMinTemp = "Capacitor"; + + [DataField] + public float PartRatingMinTempMultiplier = 0.95f; + + [ViewVariables(VVAccess.ReadWrite)] public float MinPressure = 30 * Atmospherics.OneAtmosphere; + + [DataField] + public float BaseMinPressure = 30 * Atmospherics.OneAtmosphere; + + [DataField(customTypeSerializer: typeof(PrototypeIdSerializer))] + public string MachinePartMinPressure = "Manipulator"; + + [DataField] + public float PartRatingMinPressureMultiplier = 0.8f; } } diff --git a/Content.Server/Atmos/Piping/Binary/EntitySystems/GasPressurePumpSystem.cs b/Content.Server/Atmos/Piping/Binary/EntitySystems/GasPressurePumpSystem.cs index af25d04df92..83b7b67ba46 100644 --- a/Content.Server/Atmos/Piping/Binary/EntitySystems/GasPressurePumpSystem.cs +++ b/Content.Server/Atmos/Piping/Binary/EntitySystems/GasPressurePumpSystem.cs @@ -98,7 +98,7 @@ private void OnPumpLeaveAtmosphere(EntityUid uid, GasPressurePumpComponent pump, UpdateAppearance(uid, pump); DirtyUI(uid, pump); - _userInterfaceSystem.TryCloseAll(uid, GasPressurePumpUiKey.Key); + _userInterfaceSystem.CloseUi(uid, GasPressurePumpUiKey.Key); } private void OnPumpActivate(EntityUid uid, GasPressurePumpComponent pump, ActivateInWorldEvent args) @@ -108,7 +108,7 @@ private void OnPumpActivate(EntityUid uid, GasPressurePumpComponent pump, Activa if (Transform(uid).Anchored) { - _userInterfaceSystem.TryOpen(uid, GasPressurePumpUiKey.Key, actor.PlayerSession); + _userInterfaceSystem.OpenUi(uid, GasPressurePumpUiKey.Key, actor.PlayerSession); DirtyUI(uid, pump); } else @@ -123,7 +123,7 @@ private void OnToggleStatusMessage(EntityUid uid, GasPressurePumpComponent pump, { pump.Enabled = args.Enabled; _adminLogger.Add(LogType.AtmosPowerChanged, LogImpact.Medium, - $"{ToPrettyString(args.Session.AttachedEntity!.Value):player} set the power on {ToPrettyString(uid):device} to {args.Enabled}"); + $"{ToPrettyString(args.Actor):player} set the power on {ToPrettyString(uid):device} to {args.Enabled}"); DirtyUI(uid, pump); UpdateAppearance(uid, pump); } @@ -132,7 +132,7 @@ private void OnOutputPressureChangeMessage(EntityUid uid, GasPressurePumpCompone { pump.TargetPressure = Math.Clamp(args.Pressure, 0f, Atmospherics.MaxOutputPressure); _adminLogger.Add(LogType.AtmosPressureChanged, LogImpact.Medium, - $"{ToPrettyString(args.Session.AttachedEntity!.Value):player} set the pressure on {ToPrettyString(uid):device} to {args.Pressure}kPa"); + $"{ToPrettyString(args.Actor):player} set the pressure on {ToPrettyString(uid):device} to {args.Pressure}kPa"); DirtyUI(uid, pump); } @@ -142,7 +142,7 @@ private void DirtyUI(EntityUid uid, GasPressurePumpComponent? pump) if (!Resolve(uid, ref pump)) return; - _userInterfaceSystem.TrySetUiState(uid, GasPressurePumpUiKey.Key, + _userInterfaceSystem.SetUiState(uid, GasPressurePumpUiKey.Key, new GasPressurePumpBoundUserInterfaceState(EntityManager.GetComponent(uid).EntityName, pump.TargetPressure, pump.Enabled)); } diff --git a/Content.Server/Atmos/Piping/Binary/EntitySystems/GasRecyclerSystem.cs b/Content.Server/Atmos/Piping/Binary/EntitySystems/GasRecyclerSystem.cs index 3ebc5094926..40b9d88846f 100644 --- a/Content.Server/Atmos/Piping/Binary/EntitySystems/GasRecyclerSystem.cs +++ b/Content.Server/Atmos/Piping/Binary/EntitySystems/GasRecyclerSystem.cs @@ -1,6 +1,7 @@ using Content.Server.Atmos.EntitySystems; using Content.Server.Atmos.Piping.Binary.Components; using Content.Server.Atmos.Piping.Components; +using Content.Server.Construction; using Content.Server.NodeContainer; using Content.Server.NodeContainer.EntitySystems; using Content.Server.NodeContainer.Nodes; @@ -28,6 +29,8 @@ public override void Initialize() SubscribeLocalEvent(OnUpdate); SubscribeLocalEvent(OnDisabled); SubscribeLocalEvent(OnExamined); + SubscribeLocalEvent(OnRefreshParts); + SubscribeLocalEvent(OnUpgradeExamine); } private void OnEnabled(EntityUid uid, GasRecyclerComponent comp, ref AtmosDeviceEnabledEvent args) @@ -116,5 +119,20 @@ private void UpdateAppearance(EntityUid uid, GasRecyclerComponent? comp = null) _appearance.SetData(uid, PumpVisuals.Enabled, comp.Reacting); } + + private void OnRefreshParts(EntityUid uid, GasRecyclerComponent component, RefreshPartsEvent args) + { + var ratingTemp = args.PartRatings[component.MachinePartMinTemp]; + var ratingPressure = args.PartRatings[component.MachinePartMinPressure]; + + component.MinTemp = component.BaseMinTemp * MathF.Pow(component.PartRatingMinTempMultiplier, ratingTemp - 1); + component.MinPressure = component.BaseMinPressure * MathF.Pow(component.PartRatingMinPressureMultiplier, ratingPressure - 1); + } + + private void OnUpgradeExamine(EntityUid uid, GasRecyclerComponent component, UpgradeExamineEvent args) + { + args.AddPercentageUpgrade("gas-recycler-upgrade-min-temp", component.MinTemp / component.BaseMinTemp); + args.AddPercentageUpgrade("gas-recycler-upgrade-min-pressure", component.MinPressure / component.BaseMinPressure); + } } } diff --git a/Content.Server/Atmos/Piping/Binary/EntitySystems/GasVolumePumpSystem.cs b/Content.Server/Atmos/Piping/Binary/EntitySystems/GasVolumePumpSystem.cs index e4767c4061a..cbcd1f4fa3b 100644 --- a/Content.Server/Atmos/Piping/Binary/EntitySystems/GasVolumePumpSystem.cs +++ b/Content.Server/Atmos/Piping/Binary/EntitySystems/GasVolumePumpSystem.cs @@ -128,7 +128,7 @@ private void OnVolumePumpLeaveAtmosphere(EntityUid uid, GasVolumePumpComponent p UpdateAppearance(uid, pump); DirtyUI(uid, pump); - _userInterfaceSystem.TryCloseAll(uid, GasVolumePumpUiKey.Key); + _userInterfaceSystem.CloseUi(uid, GasVolumePumpUiKey.Key); } private void OnPumpActivate(EntityUid uid, GasVolumePumpComponent pump, ActivateInWorldEvent args) @@ -138,7 +138,7 @@ private void OnPumpActivate(EntityUid uid, GasVolumePumpComponent pump, Activate if (Transform(uid).Anchored) { - _userInterfaceSystem.TryOpen(uid, GasVolumePumpUiKey.Key, actor.PlayerSession); + _userInterfaceSystem.OpenUi(uid, GasVolumePumpUiKey.Key, actor.PlayerSession); DirtyUI(uid, pump); } else @@ -153,7 +153,7 @@ private void OnToggleStatusMessage(EntityUid uid, GasVolumePumpComponent pump, G { pump.Enabled = args.Enabled; _adminLogger.Add(LogType.AtmosPowerChanged, LogImpact.Medium, - $"{ToPrettyString(args.Session.AttachedEntity!.Value):player} set the power on {ToPrettyString(uid):device} to {args.Enabled}"); + $"{ToPrettyString(args.Actor):player} set the power on {ToPrettyString(uid):device} to {args.Enabled}"); DirtyUI(uid, pump); UpdateAppearance(uid, pump); } @@ -162,7 +162,7 @@ private void OnTransferRateChangeMessage(EntityUid uid, GasVolumePumpComponent p { pump.TransferRate = Math.Clamp(args.TransferRate, 0f, pump.MaxTransferRate); _adminLogger.Add(LogType.AtmosVolumeChanged, LogImpact.Medium, - $"{ToPrettyString(args.Session.AttachedEntity!.Value):player} set the transfer rate on {ToPrettyString(uid):device} to {args.TransferRate}"); + $"{ToPrettyString(args.Actor):player} set the transfer rate on {ToPrettyString(uid):device} to {args.TransferRate}"); DirtyUI(uid, pump); } @@ -171,7 +171,7 @@ private void DirtyUI(EntityUid uid, GasVolumePumpComponent? pump) if (!Resolve(uid, ref pump)) return; - _userInterfaceSystem.TrySetUiState(uid, GasVolumePumpUiKey.Key, + _userInterfaceSystem.SetUiState(uid, GasVolumePumpUiKey.Key, new GasVolumePumpBoundUserInterfaceState(Name(uid), pump.TransferRate, pump.Enabled)); } diff --git a/Content.Server/Atmos/Piping/Trinary/EntitySystems/GasFilterSystem.cs b/Content.Server/Atmos/Piping/Trinary/EntitySystems/GasFilterSystem.cs index fbd42604694..007d304e98e 100644 --- a/Content.Server/Atmos/Piping/Trinary/EntitySystems/GasFilterSystem.cs +++ b/Content.Server/Atmos/Piping/Trinary/EntitySystems/GasFilterSystem.cs @@ -73,7 +73,7 @@ private void OnFilterUpdated(EntityUid uid, GasFilterComponent filter, ref Atmos if (filter.FilteredGas.HasValue) { - var filteredOut = new GasMixture() {Temperature = removed.Temperature}; + var filteredOut = new GasMixture() { Temperature = removed.Temperature }; filteredOut.SetMoles(filter.FilteredGas.Value, removed.GetMoles(filter.FilteredGas.Value)); removed.SetMoles(filter.FilteredGas.Value, 0f); @@ -94,7 +94,7 @@ private void OnFilterLeaveAtmosphere(EntityUid uid, GasFilterComponent filter, r _ambientSoundSystem.SetAmbience(uid, false); DirtyUI(uid, filter); - _userInterfaceSystem.TryCloseAll(uid, GasFilterUiKey.Key); + _userInterfaceSystem.CloseUi(uid, GasFilterUiKey.Key); } private void OnFilterActivate(EntityUid uid, GasFilterComponent filter, ActivateInWorldEvent args) @@ -104,7 +104,7 @@ private void OnFilterActivate(EntityUid uid, GasFilterComponent filter, Activate if (EntityManager.GetComponent(uid).Anchored) { - _userInterfaceSystem.TryOpen(uid, GasFilterUiKey.Key, actor.PlayerSession); + _userInterfaceSystem.OpenUi(uid, GasFilterUiKey.Key, actor.PlayerSession); DirtyUI(uid, filter); } else @@ -120,7 +120,7 @@ private void DirtyUI(EntityUid uid, GasFilterComponent? filter) if (!Resolve(uid, ref filter)) return; - _userInterfaceSystem.TrySetUiState(uid, GasFilterUiKey.Key, + _userInterfaceSystem.SetUiState(uid, GasFilterUiKey.Key, new GasFilterBoundUserInterfaceState(MetaData(uid).EntityName, filter.TransferRate, filter.Enabled, filter.FilteredGas)); } @@ -136,7 +136,7 @@ private void OnToggleStatusMessage(EntityUid uid, GasFilterComponent filter, Gas { filter.Enabled = args.Enabled; _adminLogger.Add(LogType.AtmosPowerChanged, LogImpact.Medium, - $"{ToPrettyString(args.Session.AttachedEntity!.Value):player} set the power on {ToPrettyString(uid):device} to {args.Enabled}"); + $"{ToPrettyString(args.Actor):player} set the power on {ToPrettyString(uid):device} to {args.Enabled}"); DirtyUI(uid, filter); UpdateAppearance(uid, filter); } @@ -145,7 +145,7 @@ private void OnTransferRateChangeMessage(EntityUid uid, GasFilterComponent filte { filter.TransferRate = Math.Clamp(args.Rate, 0f, filter.MaxTransferRate); _adminLogger.Add(LogType.AtmosVolumeChanged, LogImpact.Medium, - $"{ToPrettyString(args.Session.AttachedEntity!.Value):player} set the transfer rate on {ToPrettyString(uid):device} to {args.Rate}"); + $"{ToPrettyString(args.Actor):player} set the transfer rate on {ToPrettyString(uid):device} to {args.Rate}"); DirtyUI(uid, filter); } @@ -158,7 +158,7 @@ private void OnSelectGasMessage(EntityUid uid, GasFilterComponent filter, GasFil { filter.FilteredGas = parsedGas; _adminLogger.Add(LogType.AtmosFilterChanged, LogImpact.Medium, - $"{ToPrettyString(args.Session.AttachedEntity!.Value):player} set the filter on {ToPrettyString(uid):device} to {parsedGas.ToString()}"); + $"{ToPrettyString(args.Actor):player} set the filter on {ToPrettyString(uid):device} to {parsedGas.ToString()}"); DirtyUI(uid, filter); } else @@ -170,7 +170,7 @@ private void OnSelectGasMessage(EntityUid uid, GasFilterComponent filter, GasFil { filter.FilteredGas = null; _adminLogger.Add(LogType.AtmosFilterChanged, LogImpact.Medium, - $"{ToPrettyString(args.Session.AttachedEntity!.Value):player} set the filter on {ToPrettyString(uid):device} to none"); + $"{ToPrettyString(args.Actor):player} set the filter on {ToPrettyString(uid):device} to none"); DirtyUI(uid, filter); } } @@ -180,17 +180,30 @@ private void OnSelectGasMessage(EntityUid uid, GasFilterComponent filter, GasFil /// private void OnFilterAnalyzed(EntityUid uid, GasFilterComponent component, GasAnalyzerScanEvent args) { - if (!EntityManager.TryGetComponent(uid, out NodeContainerComponent? nodeContainer)) - return; - - args.GasMixtures ??= new Dictionary(); + args.GasMixtures ??= new List<(string, GasMixture?)>(); - if(_nodeContainer.TryGetNode(nodeContainer, component.InletName, out PipeNode? inlet)) - args.GasMixtures.Add(Loc.GetString("gas-analyzer-window-text-inlet"), inlet.Air); - if(_nodeContainer.TryGetNode(nodeContainer, component.FilterName, out PipeNode? filterNode)) - args.GasMixtures.Add(Loc.GetString("gas-analyzer-window-text-filter"), filterNode.Air); - if(_nodeContainer.TryGetNode(nodeContainer, component.OutletName, out PipeNode? outlet)) - args.GasMixtures.Add(Loc.GetString("gas-analyzer-window-text-outlet"), outlet.Air); + // multiply by volume fraction to make sure to send only the gas inside the analyzed pipe element, not the whole pipe system + if (_nodeContainer.TryGetNode(uid, component.InletName, out PipeNode? inlet) && inlet.Air.Volume != 0f) + { + var inletAirLocal = inlet.Air.Clone(); + inletAirLocal.Multiply(inlet.Volume / inlet.Air.Volume); + inletAirLocal.Volume = inlet.Volume; + args.GasMixtures.Add((Loc.GetString("gas-analyzer-window-text-inlet"), inletAirLocal)); + } + if (_nodeContainer.TryGetNode(uid, component.FilterName, out PipeNode? filterNode) && filterNode.Air.Volume != 0f) + { + var filterNodeAirLocal = filterNode.Air.Clone(); + filterNodeAirLocal.Multiply(filterNode.Volume / filterNode.Air.Volume); + filterNodeAirLocal.Volume = filterNode.Volume; + args.GasMixtures.Add((Loc.GetString("gas-analyzer-window-text-filter"), filterNodeAirLocal)); + } + if (_nodeContainer.TryGetNode(uid, component.OutletName, out PipeNode? outlet) && outlet.Air.Volume != 0f) + { + var outletAirLocal = outlet.Air.Clone(); + outletAirLocal.Multiply(outlet.Volume / outlet.Air.Volume); + outletAirLocal.Volume = outlet.Volume; + args.GasMixtures.Add((Loc.GetString("gas-analyzer-window-text-outlet"), outletAirLocal)); + } args.DeviceFlipped = inlet != null && filterNode != null && inlet.CurrentPipeDirection.ToDirection() == filterNode.CurrentPipeDirection.ToDirection().GetClockwise90Degrees(); } diff --git a/Content.Server/Atmos/Piping/Trinary/EntitySystems/GasMixerSystem.cs b/Content.Server/Atmos/Piping/Trinary/EntitySystems/GasMixerSystem.cs index ba8ebf3c9ae..4ab8572843b 100644 --- a/Content.Server/Atmos/Piping/Trinary/EntitySystems/GasMixerSystem.cs +++ b/Content.Server/Atmos/Piping/Trinary/EntitySystems/GasMixerSystem.cs @@ -134,7 +134,7 @@ private void OnMixerLeaveAtmosphere(EntityUid uid, GasMixerComponent mixer, ref DirtyUI(uid, mixer); UpdateAppearance(uid, mixer); - _userInterfaceSystem.TryCloseAll(uid, GasFilterUiKey.Key); + _userInterfaceSystem.CloseUi(uid, GasFilterUiKey.Key); } private void OnMixerActivate(EntityUid uid, GasMixerComponent mixer, ActivateInWorldEvent args) @@ -144,7 +144,7 @@ private void OnMixerActivate(EntityUid uid, GasMixerComponent mixer, ActivateInW if (Transform(uid).Anchored) { - _userInterfaceSystem.TryOpen(uid, GasMixerUiKey.Key, actor.PlayerSession); + _userInterfaceSystem.OpenUi(uid, GasMixerUiKey.Key, actor.PlayerSession); DirtyUI(uid, mixer); } else @@ -160,7 +160,7 @@ private void DirtyUI(EntityUid uid, GasMixerComponent? mixer) if (!Resolve(uid, ref mixer)) return; - _userInterfaceSystem.TrySetUiState(uid, GasMixerUiKey.Key, + _userInterfaceSystem.SetUiState(uid, GasMixerUiKey.Key, new GasMixerBoundUserInterfaceState(EntityManager.GetComponent(uid).EntityName, mixer.TargetPressure, mixer.Enabled, mixer.InletOneConcentration)); } @@ -176,7 +176,7 @@ private void OnToggleStatusMessage(EntityUid uid, GasMixerComponent mixer, GasMi { mixer.Enabled = args.Enabled; _adminLogger.Add(LogType.AtmosPowerChanged, LogImpact.Medium, - $"{ToPrettyString(args.Session.AttachedEntity!.Value):player} set the power on {ToPrettyString(uid):device} to {args.Enabled}"); + $"{ToPrettyString(args.Actor):player} set the power on {ToPrettyString(uid):device} to {args.Enabled}"); DirtyUI(uid, mixer); UpdateAppearance(uid, mixer); } @@ -185,7 +185,7 @@ private void OnOutputPressureChangeMessage(EntityUid uid, GasMixerComponent mixe { mixer.TargetPressure = Math.Clamp(args.Pressure, 0f, mixer.MaxTargetPressure); _adminLogger.Add(LogType.AtmosPressureChanged, LogImpact.Medium, - $"{ToPrettyString(args.Session.AttachedEntity!.Value):player} set the pressure on {ToPrettyString(uid):device} to {args.Pressure}kPa"); + $"{ToPrettyString(args.Actor):player} set the pressure on {ToPrettyString(uid):device} to {args.Pressure}kPa"); DirtyUI(uid, mixer); } @@ -196,7 +196,7 @@ private void OnChangeNodePercentageMessage(EntityUid uid, GasMixerComponent mixe mixer.InletOneConcentration = nodeOne; mixer.InletTwoConcentration = 1.0f - mixer.InletOneConcentration; _adminLogger.Add(LogType.AtmosRatioChanged, LogImpact.Medium, - $"{EntityManager.ToPrettyString(args.Session.AttachedEntity!.Value):player} set the ratio on {EntityManager.ToPrettyString(uid):device} to {mixer.InletOneConcentration}:{mixer.InletTwoConcentration}"); + $"{EntityManager.ToPrettyString(args.Actor):player} set the ratio on {EntityManager.ToPrettyString(uid):device} to {mixer.InletOneConcentration}:{mixer.InletTwoConcentration}"); DirtyUI(uid, mixer); } @@ -205,19 +205,31 @@ private void OnChangeNodePercentageMessage(EntityUid uid, GasMixerComponent mixe /// private void OnMixerAnalyzed(EntityUid uid, GasMixerComponent component, GasAnalyzerScanEvent args) { - if (!EntityManager.TryGetComponent(uid, out NodeContainerComponent? nodeContainer)) - return; - - var gasMixDict = new Dictionary(); + args.GasMixtures ??= new List<(string, GasMixture?)>(); - if(_nodeContainer.TryGetNode(nodeContainer, component.InletOneName, out PipeNode? inletOne)) - gasMixDict.Add($"{inletOne.CurrentPipeDirection} {Loc.GetString("gas-analyzer-window-text-inlet")}", inletOne.Air); - if(_nodeContainer.TryGetNode(nodeContainer, component.InletTwoName, out PipeNode? inletTwo)) - gasMixDict.Add($"{inletTwo.CurrentPipeDirection} {Loc.GetString("gas-analyzer-window-text-inlet")}", inletTwo.Air); - if(_nodeContainer.TryGetNode(nodeContainer, component.OutletName, out PipeNode? outlet)) - gasMixDict.Add(Loc.GetString("gas-analyzer-window-text-outlet"), outlet.Air); + // multiply by volume fraction to make sure to send only the gas inside the analyzed pipe element, not the whole pipe system + if (_nodeContainer.TryGetNode(uid, component.InletOneName, out PipeNode? inletOne) && inletOne.Air.Volume != 0f) + { + var inletOneAirLocal = inletOne.Air.Clone(); + inletOneAirLocal.Multiply(inletOne.Volume / inletOne.Air.Volume); + inletOneAirLocal.Volume = inletOne.Volume; + args.GasMixtures.Add(($"{inletOne.CurrentPipeDirection} {Loc.GetString("gas-analyzer-window-text-inlet")}", inletOneAirLocal)); + } + if (_nodeContainer.TryGetNode(uid, component.InletTwoName, out PipeNode? inletTwo) && inletTwo.Air.Volume != 0f) + { + var inletTwoAirLocal = inletTwo.Air.Clone(); + inletTwoAirLocal.Multiply(inletTwo.Volume / inletTwo.Air.Volume); + inletTwoAirLocal.Volume = inletTwo.Volume; + args.GasMixtures.Add(($"{inletTwo.CurrentPipeDirection} {Loc.GetString("gas-analyzer-window-text-inlet")}", inletTwoAirLocal)); + } + if (_nodeContainer.TryGetNode(uid, component.OutletName, out PipeNode? outlet) && outlet.Air.Volume != 0f) + { + var outletAirLocal = outlet.Air.Clone(); + outletAirLocal.Multiply(outlet.Volume / outlet.Air.Volume); + outletAirLocal.Volume = outlet.Volume; + args.GasMixtures.Add((Loc.GetString("gas-analyzer-window-text-outlet"), outletAirLocal)); + } - args.GasMixtures = gasMixDict; args.DeviceFlipped = inletOne != null && inletTwo != null && inletOne.CurrentPipeDirection.ToDirection() == inletTwo.CurrentPipeDirection.ToDirection().GetClockwise90Degrees(); } } diff --git a/Content.Server/Atmos/Piping/Trinary/EntitySystems/PressureControlledValveSystem.cs b/Content.Server/Atmos/Piping/Trinary/EntitySystems/PressureControlledValveSystem.cs index 1bab2abd8e9..d567e19f02f 100644 --- a/Content.Server/Atmos/Piping/Trinary/EntitySystems/PressureControlledValveSystem.cs +++ b/Content.Server/Atmos/Piping/Trinary/EntitySystems/PressureControlledValveSystem.cs @@ -1,7 +1,5 @@ -using Content.Server.Atmos.EntitySystems; using Content.Server.Atmos.Piping.Components; using Content.Server.Atmos.Piping.Trinary.Components; -using Content.Server.NodeContainer; using Content.Server.NodeContainer.EntitySystems; using Content.Server.NodeContainer.Nodes; using Content.Shared.Atmos.Piping; @@ -13,7 +11,6 @@ namespace Content.Server.Atmos.Piping.Trinary.EntitySystems [UsedImplicitly] public sealed class PressureControlledValveSystem : EntitySystem { - [Dependency] private readonly AtmosphereSystem _atmosphereSystem = default!; [Dependency] private readonly SharedAmbientSoundSystem _ambientSoundSystem = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly NodeContainerSystem _nodeContainer = default!; @@ -40,39 +37,26 @@ private void OnUpdate(EntityUid uid, PressureControlledValveComponent comp, ref return; } - // If output is higher than input, flip input/output to enable bidirectional flow. - if (outletNode.Air.Pressure > inletNode.Air.Pressure) - { - PipeNode temp = outletNode; - outletNode = inletNode; - inletNode = temp; - } - - float control = (controlNode.Air.Pressure - outletNode.Air.Pressure) - comp.Threshold; - float transferRate; - if (control < 0) - { - comp.Enabled = false; - transferRate = 0; - } - else + // If the pressure in either inlet or outlet exceeds the side pressure, act as an open pipe. + if (!comp.Enabled && (controlNode.Air.Pressure < inletNode.Air.Pressure + || controlNode.Air.Pressure < outletNode.Air.Pressure)) { + inletNode.AddAlwaysReachable(outletNode); + outletNode.AddAlwaysReachable(inletNode); comp.Enabled = true; - transferRate = Math.Min(control * comp.Gain, comp.MaxTransferRate * _atmosphereSystem.PumpSpeedup()); + UpdateAppearance(uid, comp); + _ambientSoundSystem.SetAmbience(uid, true); + return; } - UpdateAppearance(uid, comp); - // We multiply the transfer rate in L/s by the seconds passed since the last process to get the liters. - var transferVolume = transferRate * args.dt; - if (transferVolume <= 0) - { - _ambientSoundSystem.SetAmbience(uid, false); + if (!comp.Enabled) return; - } - _ambientSoundSystem.SetAmbience(uid, true); - var removed = inletNode.Air.RemoveVolume(transferVolume); - _atmosphereSystem.Merge(outletNode.Air, removed); + inletNode.RemoveAlwaysReachable(outletNode); + outletNode.RemoveAlwaysReachable(inletNode); + comp.Enabled = false; + UpdateAppearance(uid, comp); + _ambientSoundSystem.SetAmbience(uid, false); } private void OnFilterLeaveAtmosphere(EntityUid uid, PressureControlledValveComponent comp, ref AtmosDeviceDisabledEvent args) diff --git a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasCanisterSystem.cs b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasCanisterSystem.cs index d53e29c9499..60ae230b1ba 100644 --- a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasCanisterSystem.cs +++ b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasCanisterSystem.cs @@ -101,7 +101,7 @@ private void DirtyUI(EntityUid uid, tankPressure = tankComponent.Air.Pressure; } - _ui.TrySetUiState(uid, GasCanisterUiKey.Key, + _ui.SetUiState(uid, GasCanisterUiKey.Key, new GasCanisterBoundUserInterfaceState(Name(uid), canister.Air.Pressure, portStatus, tankLabel, tankPressure, canister.ReleasePressure, canister.ReleaseValve, canister.MinReleasePressure, canister.MaxReleasePressure)); @@ -109,19 +109,19 @@ private void DirtyUI(EntityUid uid, private void OnHoldingTankEjectMessage(EntityUid uid, GasCanisterComponent canister, GasCanisterHoldingTankEjectMessage args) { - if (canister.GasTankSlot.Item == null || args.Session.AttachedEntity == null) + if (canister.GasTankSlot.Item == null) return; var item = canister.GasTankSlot.Item; - _slots.TryEjectToHands(uid, canister.GasTankSlot, args.Session.AttachedEntity); - _adminLogger.Add(LogType.CanisterTankEjected, LogImpact.Medium, $"Player {ToPrettyString(args.Session.AttachedEntity.GetValueOrDefault()):player} ejected tank {ToPrettyString(item):tank} from {ToPrettyString(uid):canister}"); + _slots.TryEjectToHands(uid, canister.GasTankSlot, args.Actor); + _adminLogger.Add(LogType.CanisterTankEjected, LogImpact.Medium, $"Player {ToPrettyString(args.Actor):player} ejected tank {ToPrettyString(item):tank} from {ToPrettyString(uid):canister}"); } private void OnCanisterChangeReleasePressure(EntityUid uid, GasCanisterComponent canister, GasCanisterChangeReleasePressureMessage args) { var pressure = Math.Clamp(args.Pressure, canister.MinReleasePressure, canister.MaxReleasePressure); - _adminLogger.Add(LogType.CanisterPressure, LogImpact.Medium, $"{ToPrettyString(args.Session.AttachedEntity.GetValueOrDefault()):player} set the release pressure on {ToPrettyString(uid):canister} to {args.Pressure}"); + _adminLogger.Add(LogType.CanisterPressure, LogImpact.Medium, $"{ToPrettyString(args.Actor):player} set the release pressure on {ToPrettyString(uid):canister} to {args.Pressure}"); canister.ReleasePressure = pressure; DirtyUI(uid, canister); @@ -134,14 +134,14 @@ private void OnCanisterChangeReleaseValve(EntityUid uid, GasCanisterComponent ca impact = canister.GasTankSlot.HasItem ? LogImpact.Medium : LogImpact.High; var containedGasDict = new Dictionary(); - var containedGasArray = Gas.GetValues(typeof(Gas)); + var containedGasArray = Enum.GetValues(typeof(Gas)); for (int i = 0; i < containedGasArray.Length; i++) { containedGasDict.Add((Gas)i, canister.Air[i]); } - _adminLogger.Add(LogType.CanisterValve, impact, $"{ToPrettyString(args.Session.AttachedEntity.GetValueOrDefault()):player} set the valve on {ToPrettyString(uid):canister} to {args.Valve:valveState} while it contained [{string.Join(", ", containedGasDict)}]"); + _adminLogger.Add(LogType.CanisterValve, impact, $"{ToPrettyString(args.Actor):player} set the valve on {ToPrettyString(uid):canister} to {args.Valve:valveState} while it contained [{string.Join(", ", containedGasDict)}]"); canister.ReleaseValve = args.Valve; DirtyUI(uid, canister); @@ -222,7 +222,7 @@ private void OnCanisterActivate(EntityUid uid, GasCanisterComponent component, A if (args.Handled) return; - _ui.TryOpen(uid, GasCanisterUiKey.Key, actor.PlayerSession); + _ui.OpenUi(uid, GasCanisterUiKey.Key, actor.PlayerSession); args.Handled = true; } @@ -234,7 +234,7 @@ private void OnCanisterInteractHand(EntityUid uid, GasCanisterComponent componen if (CheckLocked(uid, component, args.User)) return; - _ui.TryOpen(uid, GasCanisterUiKey.Key, actor.PlayerSession); + _ui.OpenUi(uid, GasCanisterUiKey.Key, actor.PlayerSession); args.Handled = true; } @@ -316,9 +316,17 @@ private void CalculateCanisterPrice(EntityUid uid, GasCanisterComponent componen /// /// Returns the gas mixture for the gas analyzer /// - private void OnAnalyzed(EntityUid uid, GasCanisterComponent component, GasAnalyzerScanEvent args) + private void OnAnalyzed(EntityUid uid, GasCanisterComponent canisterComponent, GasAnalyzerScanEvent args) { - args.GasMixtures = new Dictionary { {Name(uid), component.Air} }; + args.GasMixtures ??= new List<(string, GasMixture?)>(); + args.GasMixtures.Add((Name(uid), canisterComponent.Air)); + // if a tank is inserted show it on the analyzer as well + if (canisterComponent.GasTankSlot.Item != null) + { + var tank = canisterComponent.GasTankSlot.Item.Value; + var tankComponent = Comp(tank); + args.GasMixtures.Add((Name(tank), tankComponent.Air)); + } } /// diff --git a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasThermoMachineSystem.cs b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasThermoMachineSystem.cs index 720fd5b5b91..01eab560a16 100644 --- a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasThermoMachineSystem.cs +++ b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasThermoMachineSystem.cs @@ -144,7 +144,7 @@ private bool IsHeater(GasThermoMachineComponent comp) private void OnToggleMessage(EntityUid uid, GasThermoMachineComponent thermoMachine, GasThermomachineToggleMessage args) { var powerState = _power.TryTogglePower(uid); - _adminLogger.Add(LogType.AtmosPowerChanged, $"{ToPrettyString(args.Session.AttachedEntity)} turned {(powerState ? "On" : "Off")} {ToPrettyString(uid)}"); + _adminLogger.Add(LogType.AtmosPowerChanged, $"{ToPrettyString(args.Actor)} turned {(powerState ? "On" : "Off")} {ToPrettyString(uid)}"); DirtyUI(uid, thermoMachine); } @@ -155,7 +155,7 @@ private void OnChangeTemperature(EntityUid uid, GasThermoMachineComponent thermo else thermoMachine.TargetTemperature = MathF.Max(args.Temperature, thermoMachine.MinTemperature); thermoMachine.TargetTemperature = MathF.Max(thermoMachine.TargetTemperature, Atmospherics.TCMB); - _adminLogger.Add(LogType.AtmosTemperatureChanged, $"{ToPrettyString(args.Session.AttachedEntity)} set temperature on {ToPrettyString(uid)} to {thermoMachine.TargetTemperature}"); + _adminLogger.Add(LogType.AtmosTemperatureChanged, $"{ToPrettyString(args.Actor)} set temperature on {ToPrettyString(uid)} to {thermoMachine.TargetTemperature}"); DirtyUI(uid, thermoMachine); } @@ -168,8 +168,8 @@ private void DirtyUI(EntityUid uid, GasThermoMachineComponent? thermoMachine, Us if (!Resolve(uid, ref powerReceiver)) return; - _userInterfaceSystem.TrySetUiState(uid, ThermomachineUiKey.Key, - new GasThermomachineBoundUserInterfaceState(thermoMachine.MinTemperature, thermoMachine.MaxTemperature, thermoMachine.TargetTemperature, !powerReceiver.PowerDisabled, IsHeater(thermoMachine)), null, ui); + _userInterfaceSystem.SetUiState(uid, ThermomachineUiKey.Key, + new GasThermomachineBoundUserInterfaceState(thermoMachine.MinTemperature, thermoMachine.MaxTemperature, thermoMachine.TargetTemperature, !powerReceiver.PowerDisabled, IsHeater(thermoMachine))); } private void OnExamined(EntityUid uid, GasThermoMachineComponent thermoMachine, ExaminedEvent args) diff --git a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasVentPumpSystem.cs b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasVentPumpSystem.cs index a986385f5e9..7c12cf3f77f 100644 --- a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasVentPumpSystem.cs +++ b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasVentPumpSystem.cs @@ -80,7 +80,7 @@ private void OnGasVentPumpUpdated(EntityUid uid, GasVentPumpComponent vent, ref return; } - var timeDelta = args.dt; + var timeDelta = args.dt; var pressureDelta = timeDelta * vent.TargetPressureChange; if (vent.PumpDirection == VentPumpDirection.Releasing && pipe.Air.Pressure > 0) @@ -292,7 +292,7 @@ private void OnExamine(EntityUid uid, GasVentPumpComponent component, ExaminedEv /// private void OnAnalyzed(EntityUid uid, GasVentPumpComponent component, GasAnalyzerScanEvent args) { - var gasMixDict = new Dictionary(); + args.GasMixtures ??= new List<(string, GasMixture?)>(); // these are both called pipe, above it switches using this so I duplicated that...? var nodeName = component.PumpDirection switch @@ -301,10 +301,14 @@ private void OnAnalyzed(EntityUid uid, GasVentPumpComponent component, GasAnalyz VentPumpDirection.Siphoning => component.Outlet, _ => throw new ArgumentOutOfRangeException() }; - if (_nodeContainer.TryGetNode(uid, nodeName, out PipeNode? pipe)) - gasMixDict.Add(nodeName, pipe.Air); - - args.GasMixtures = gasMixDict; + // multiply by volume fraction to make sure to send only the gas inside the analyzed pipe element, not the whole pipe system + if (_nodeContainer.TryGetNode(uid, nodeName, out PipeNode? pipe) && pipe.Air.Volume != 0f) + { + var pipeAirLocal = pipe.Air.Clone(); + pipeAirLocal.Multiply(pipe.Volume / pipe.Air.Volume); + pipeAirLocal.Volume = pipe.Volume; + args.GasMixtures.Add((nodeName, pipeAirLocal)); + } } private void OnWeldChanged(EntityUid uid, GasVentPumpComponent component, ref WeldableChangedEvent args) diff --git a/Content.Server/Atmos/Portable/PortableScrubberComponent.cs b/Content.Server/Atmos/Portable/PortableScrubberComponent.cs index ae9a5da9639..fbe2d3f95a0 100644 --- a/Content.Server/Atmos/Portable/PortableScrubberComponent.cs +++ b/Content.Server/Atmos/Portable/PortableScrubberComponent.cs @@ -1,4 +1,6 @@ using Content.Shared.Atmos; +using Content.Shared.Construction.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; namespace Content.Server.Atmos.Portable { @@ -37,13 +39,51 @@ public sealed partial class PortableScrubberComponent : Component /// /// Maximum internal pressure before it refuses to take more. /// - [DataField, ViewVariables(VVAccess.ReadWrite)] + [DataField] public float MaxPressure = 2500; /// - /// The speed at which gas is scrubbed from the environment. + /// The base amount of maximum internal pressure /// - [DataField, ViewVariables(VVAccess.ReadWrite)] + [DataField] + public float BaseMaxPressure = 2500; + + /// + /// The machine part that modifies the maximum internal pressure + /// + [DataField(customTypeSerializer: typeof(PrototypeIdSerializer))] + public string MachinePartMaxPressure = "MatterBin"; + + /// + /// How much the will affect the pressure. + /// The value will be multiplied by this amount for each increasing part tier. + /// + [DataField] + public float PartRatingMaxPressureModifier = 1.5f; + + /// + /// The speed at which gas is scrubbed from the environment. + /// + [ViewVariables(VVAccess.ReadWrite)] public float TransferRate = 800; + + /// + /// The base speed at which gas is scrubbed from the environment. + /// + [DataField] + public float BaseTransferRate = 800; + + /// + /// The machine part which modifies the speed of + /// + [DataField(customTypeSerializer: typeof(PrototypeIdSerializer))] + public string MachinePartTransferRate = "Manipulator"; + + /// + /// How much the will modify the rate. + /// The value will be multiplied by this amount for each increasing part tier. + /// + [DataField] + public float PartRatingTransferRateModifier = 1.4f; } } diff --git a/Content.Server/Atmos/Portable/PortableScrubberSystem.cs b/Content.Server/Atmos/Portable/PortableScrubberSystem.cs index f9043c091a8..fbe40deedb1 100644 --- a/Content.Server/Atmos/Portable/PortableScrubberSystem.cs +++ b/Content.Server/Atmos/Portable/PortableScrubberSystem.cs @@ -12,7 +12,9 @@ using Content.Server.NodeContainer.NodeGroups; using Content.Server.Audio; using Content.Server.Administration.Logs; +using Content.Server.Construction; using Content.Server.NodeContainer.EntitySystems; +using Content.Shared.Atmos; using Content.Shared.Database; namespace Content.Server.Atmos.Portable @@ -38,6 +40,8 @@ public override void Initialize() SubscribeLocalEvent(OnExamined); SubscribeLocalEvent(OnDestroyed); SubscribeLocalEvent(OnScrubberAnalyzed); + SubscribeLocalEvent(OnRefreshParts); + SubscribeLocalEvent(OnUpgradeExamine); } private bool IsFull(PortableScrubberComponent component) @@ -151,10 +155,23 @@ private void UpdateAppearance(EntityUid uid, bool isFull, bool isRunning) /// private void OnScrubberAnalyzed(EntityUid uid, PortableScrubberComponent component, GasAnalyzerScanEvent args) { - args.GasMixtures ??= new Dictionary { { Name(uid), component.Air } }; - // If it's connected to a port, include the port side - if (_nodeContainer.TryGetNode(uid, component.PortName, out PipeNode? port)) - args.GasMixtures.Add(component.PortName, port.Air); + args.GasMixtures ??= new List<(string, GasMixture?)>(); + args.GasMixtures.Add((Name(uid), component.Air)); + } + + private void OnRefreshParts(EntityUid uid, PortableScrubberComponent component, RefreshPartsEvent args) + { + var pressureRating = args.PartRatings[component.MachinePartMaxPressure]; + var transferRating = args.PartRatings[component.MachinePartTransferRate]; + + component.MaxPressure = component.BaseMaxPressure * MathF.Pow(component.PartRatingMaxPressureModifier, pressureRating - 1); + component.TransferRate = component.BaseTransferRate * MathF.Pow(component.PartRatingTransferRateModifier, transferRating - 1); + } + + private void OnUpgradeExamine(EntityUid uid, PortableScrubberComponent component, UpgradeExamineEvent args) + { + args.AddPercentageUpgrade("portable-scrubber-component-upgrade-max-pressure", component.MaxPressure / component.BaseMaxPressure); + args.AddPercentageUpgrade("portable-scrubber-component-upgrade-transfer-rate", component.TransferRate / component.BaseTransferRate); } } } diff --git a/Content.Server/Atmos/Portable/SpaceHeaterSystem.cs b/Content.Server/Atmos/Portable/SpaceHeaterSystem.cs index 8094b0e1a66..70eea2d9b78 100644 --- a/Content.Server/Atmos/Portable/SpaceHeaterSystem.cs +++ b/Content.Server/Atmos/Portable/SpaceHeaterSystem.cs @@ -163,7 +163,7 @@ private void DirtyUI(EntityUid uid, SpaceHeaterComponent? spaceHeater) { return; } - _userInterfaceSystem.TrySetUiState(uid, SpaceHeaterUiKey.Key, + _userInterfaceSystem.SetUiState(uid, SpaceHeaterUiKey.Key, new SpaceHeaterBoundUserInterfaceState(spaceHeater.MinTemperature, spaceHeater.MaxTemperature, thermoMachine.TargetTemperature, !powerReceiver.PowerDisabled, spaceHeater.Mode, spaceHeater.PowerLevel)); } diff --git a/Content.Server/Atmos/Reactions/AmmoniaOxygenReaction.cs b/Content.Server/Atmos/Reactions/AmmoniaOxygenReaction.cs index 197034ce545..2c071afab1e 100644 --- a/Content.Server/Atmos/Reactions/AmmoniaOxygenReaction.cs +++ b/Content.Server/Atmos/Reactions/AmmoniaOxygenReaction.cs @@ -1,5 +1,6 @@ using Content.Server.Atmos.EntitySystems; using Content.Shared.Atmos; +using Content.Shared.Atmos.Reactions; using JetBrains.Annotations; namespace Content.Server.Atmos.Reactions; diff --git a/Content.Server/Atmos/Reactions/FrezonCoolantReaction.cs b/Content.Server/Atmos/Reactions/FrezonCoolantReaction.cs index 051ee8202db..475c149cf37 100644 --- a/Content.Server/Atmos/Reactions/FrezonCoolantReaction.cs +++ b/Content.Server/Atmos/Reactions/FrezonCoolantReaction.cs @@ -1,5 +1,6 @@ using Content.Server.Atmos.EntitySystems; using Content.Shared.Atmos; +using Content.Shared.Atmos.Reactions; using JetBrains.Annotations; namespace Content.Server.Atmos.Reactions; diff --git a/Content.Server/Atmos/Reactions/FrezonProductionReaction.cs b/Content.Server/Atmos/Reactions/FrezonProductionReaction.cs index 4ffd9c2f5b3..e3d3ece6b6a 100644 --- a/Content.Server/Atmos/Reactions/FrezonProductionReaction.cs +++ b/Content.Server/Atmos/Reactions/FrezonProductionReaction.cs @@ -1,5 +1,6 @@ using Content.Server.Atmos.EntitySystems; using Content.Shared.Atmos; +using Content.Shared.Atmos.Reactions; using JetBrains.Annotations; namespace Content.Server.Atmos.Reactions; diff --git a/Content.Server/Atmos/Reactions/GasReactionPrototype.cs b/Content.Server/Atmos/Reactions/GasReactionPrototype.cs index 0ee29de3bf1..48a113bb9a2 100644 --- a/Content.Server/Atmos/Reactions/GasReactionPrototype.cs +++ b/Content.Server/Atmos/Reactions/GasReactionPrototype.cs @@ -1,22 +1,10 @@ using Content.Server.Atmos.EntitySystems; using Content.Shared.Atmos; +using Content.Shared.Atmos.Reactions; using Robust.Shared.Prototypes; namespace Content.Server.Atmos.Reactions { - [Flags] - public enum ReactionResult : byte - { - NoReaction = 0, - Reacting = 1, - StopReactions = 2, - } - - public enum GasReaction : byte - { - Fire = 0, - } - [Prototype("gasReaction")] public sealed partial class GasReactionPrototype : IPrototype { diff --git a/Content.Server/Atmos/Reactions/N2ODecompositionReaction.cs b/Content.Server/Atmos/Reactions/N2ODecompositionReaction.cs index 7fce663dc31..367c0eb7b9c 100644 --- a/Content.Server/Atmos/Reactions/N2ODecompositionReaction.cs +++ b/Content.Server/Atmos/Reactions/N2ODecompositionReaction.cs @@ -1,5 +1,6 @@ using Content.Server.Atmos.EntitySystems; using Content.Shared.Atmos; +using Content.Shared.Atmos.Reactions; using JetBrains.Annotations; namespace Content.Server.Atmos.Reactions; diff --git a/Content.Server/Atmos/Reactions/PlasmaFireReaction.cs b/Content.Server/Atmos/Reactions/PlasmaFireReaction.cs index e7ab7835fd9..98d567d4ed5 100644 --- a/Content.Server/Atmos/Reactions/PlasmaFireReaction.cs +++ b/Content.Server/Atmos/Reactions/PlasmaFireReaction.cs @@ -1,5 +1,6 @@ using Content.Server.Atmos.EntitySystems; using Content.Shared.Atmos; +using Content.Shared.Atmos.Reactions; using JetBrains.Annotations; namespace Content.Server.Atmos.Reactions diff --git a/Content.Server/Atmos/Reactions/TritiumFireReaction.cs b/Content.Server/Atmos/Reactions/TritiumFireReaction.cs index 7103859a90f..3ad0a4b04de 100644 --- a/Content.Server/Atmos/Reactions/TritiumFireReaction.cs +++ b/Content.Server/Atmos/Reactions/TritiumFireReaction.cs @@ -1,5 +1,6 @@ using Content.Server.Atmos.EntitySystems; using Content.Shared.Atmos; +using Content.Shared.Atmos.Reactions; using JetBrains.Annotations; namespace Content.Server.Atmos.Reactions diff --git a/Content.Server/Atmos/Reactions/WaterVaporReaction.cs b/Content.Server/Atmos/Reactions/WaterVaporReaction.cs index 8db8fdbd66d..e06c4b75ff9 100644 --- a/Content.Server/Atmos/Reactions/WaterVaporReaction.cs +++ b/Content.Server/Atmos/Reactions/WaterVaporReaction.cs @@ -1,5 +1,7 @@ using Content.Server.Atmos.EntitySystems; using Content.Server.Fluids.EntitySystems; +using Content.Shared.Atmos; +using Content.Shared.Atmos.Reactions; using Content.Shared.Chemistry.Components; using Content.Shared.FixedPoint; using Content.Shared.Maps; diff --git a/Content.Server/Atmos/Rotting/RottingSystem.cs b/Content.Server/Atmos/Rotting/RottingSystem.cs index 5070b3f197f..40bdf657439 100644 --- a/Content.Server/Atmos/Rotting/RottingSystem.cs +++ b/Content.Server/Atmos/Rotting/RottingSystem.cs @@ -46,6 +46,29 @@ private void OnTempIsRotting(EntityUid uid, TemperatureComponent component, ref args.Handled = component.CurrentTemperature < Atmospherics.T0C + 0.85f; } + + public void ReduceAccumulator(EntityUid uid, TimeSpan time) + { + if (!TryComp(uid, out var perishable)) + return; + + if (!TryComp(uid, out var rotting)) + { + perishable.RotAccumulator -= time; + return; + } + var total = (rotting.TotalRotTime + perishable.RotAccumulator) - time; + + if (total < perishable.RotAfter) + { + RemCompDeferred(uid, rotting); + perishable.RotAccumulator = total; + } + + else + rotting.TotalRotTime = total - perishable.RotAfter; + } + /// /// Is anything speeding up the decay? /// e.g. buried in a grave diff --git a/Content.Server/Atmos/Serialization/TileAtmosCollectionSerializer.cs b/Content.Server/Atmos/Serialization/TileAtmosCollectionSerializer.cs index 00be83e86d9..5b30d65e48e 100644 --- a/Content.Server/Atmos/Serialization/TileAtmosCollectionSerializer.cs +++ b/Content.Server/Atmos/Serialization/TileAtmosCollectionSerializer.cs @@ -1,4 +1,5 @@ using System.Globalization; +using Content.Shared.Atmos; using Robust.Shared.Serialization; using Robust.Shared.Serialization.Manager; using Robust.Shared.Serialization.Markdown; diff --git a/Content.Server/Atmos/TileMixtureEnumerator.cs b/Content.Server/Atmos/TileMixtureEnumerator.cs index 20440032dab..5601615f509 100644 --- a/Content.Server/Atmos/TileMixtureEnumerator.cs +++ b/Content.Server/Atmos/TileMixtureEnumerator.cs @@ -1,4 +1,5 @@ using System.Diagnostics.CodeAnalysis; +using Content.Shared.Atmos; namespace Content.Server.Atmos; diff --git a/Content.Server/Audio/Jukebox/JukeboxSystem.cs b/Content.Server/Audio/Jukebox/JukeboxSystem.cs index bfb9b2099a4..cc9235e3d7a 100644 --- a/Content.Server/Audio/Jukebox/JukeboxSystem.cs +++ b/Content.Server/Audio/Jukebox/JukeboxSystem.cs @@ -5,6 +5,7 @@ using Robust.Shared.Audio; using Robust.Shared.Audio.Components; using Robust.Shared.Audio.Systems; +using Robust.Shared.Player; using Robust.Shared.Prototypes; using JukeboxComponent = Content.Shared.Audio.Jukebox.JukeboxComponent; @@ -66,8 +67,11 @@ private void OnJukeboxPause(Entity ent, ref JukeboxPauseMessag private void OnJukeboxSetTime(EntityUid uid, JukeboxComponent component, JukeboxSetTimeMessage args) { - var offset = (args.Session.Channel.Ping * 1.5f) / 1000f; - Audio.SetPlaybackPosition(component.AudioStream, args.SongTime + offset); + if (TryComp(args.Actor, out ActorComponent? actorComp)) + { + var offset = actorComp.PlayerSession.Channel.Ping * 1.5f / 1000f; + Audio.SetPlaybackPosition(component.AudioStream, args.SongTime + offset); + } } private void OnPowerChanged(Entity entity, ref PowerChangedEvent args) diff --git a/Content.Server/Bed/BedSystem.cs b/Content.Server/Bed/BedSystem.cs index f1bd9482e5e..976ef5139c3 100644 --- a/Content.Server/Bed/BedSystem.cs +++ b/Content.Server/Bed/BedSystem.cs @@ -2,6 +2,7 @@ using Content.Server.Bed.Components; using Content.Server.Bed.Sleep; using Content.Server.Body.Systems; +using Content.Server.Construction; using Content.Server.Power.Components; using Content.Server.Power.EntitySystems; using Content.Shared.Bed; @@ -9,6 +10,7 @@ using Content.Shared.Body.Components; using Content.Shared.Buckle.Components; using Content.Shared.Damage; +using Content.Shared.Emag.Components; using Content.Shared.Emag.Systems; using Content.Shared.Mobs.Systems; using Robust.Shared.Timing; @@ -32,6 +34,8 @@ public override void Initialize() SubscribeLocalEvent(OnBuckleChange); SubscribeLocalEvent(OnPowerChanged); SubscribeLocalEvent(OnEmagged); + SubscribeLocalEvent(OnRefreshParts); + SubscribeLocalEvent(OnUpgradeExamine); } private void ManageUpdateList(EntityUid uid, HealOnBuckleComponent component, ref BuckleChangeEvent args) @@ -66,7 +70,7 @@ public override void Update(float frameTime) foreach (var healedEntity in strapComponent.BuckledEntities) { - if (_mobStateSystem.IsDead(healedEntity) + if (_mobStateSystem.IsDead(healedEntity) || HasComp(healedEntity)) continue; @@ -126,5 +130,18 @@ private void UpdateMetabolisms(EntityUid uid, StasisBedComponent component, bool RaiseLocalEvent(buckledEntity, ref metabolicEvent); } } + + private void OnRefreshParts(EntityUid uid, StasisBedComponent component, RefreshPartsEvent args) + { + var metabolismRating = args.PartRatings[component.MachinePartMetabolismModifier]; + component.Multiplier = component.BaseMultiplier * metabolismRating; // Linear scaling so it's not OP + if (HasComp(uid)) + component.Multiplier = 1f / component.Multiplier; + } + + private void OnUpgradeExamine(EntityUid uid, StasisBedComponent component, UpgradeExamineEvent args) + { + args.AddPercentageUpgrade("stasis-bed-component-upgrade-stasis", component.Multiplier / component.BaseMultiplier); + } } } diff --git a/Content.Server/Bed/Components/StasisBedComponent.cs b/Content.Server/Bed/Components/StasisBedComponent.cs index e2175d6e646..bb4096a2a5e 100644 --- a/Content.Server/Bed/Components/StasisBedComponent.cs +++ b/Content.Server/Bed/Components/StasisBedComponent.cs @@ -1,12 +1,21 @@ +using Content.Shared.Construction.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; + namespace Content.Server.Bed.Components { [RegisterComponent] public sealed partial class StasisBedComponent : Component { + [DataField] + public float BaseMultiplier = 10f; + /// - /// What the metabolic update rate will be multiplied by (higher = slower metabolism) + /// What the metabolic update rate will be multiplied by (higher = slower metabolism) /// [ViewVariables(VVAccess.ReadWrite)] public float Multiplier = 10f; + + [DataField(customTypeSerializer: typeof(PrototypeIdSerializer))] + public string MachinePartMetabolismModifier = "Capacitor"; } } diff --git a/Content.Server/Bed/Cryostorage/CryostorageSystem.cs b/Content.Server/Bed/Cryostorage/CryostorageSystem.cs index 2e7f8c4235a..1369fa20f11 100644 --- a/Content.Server/Bed/Cryostorage/CryostorageSystem.cs +++ b/Content.Server/Bed/Cryostorage/CryostorageSystem.cs @@ -79,9 +79,7 @@ private void OnBeforeUIOpened(Entity ent, ref BeforeActiva private void OnRemoveItemBuiMessage(Entity ent, ref CryostorageRemoveItemBuiMessage args) { var (_, comp) = ent; - if (args.Session.AttachedEntity is not { } attachedEntity) - return; - + var attachedEntity = args.Actor; var cryoContained = GetEntity(args.StoredEntity); if (!comp.StoredPlayers.Contains(cryoContained) || !IsInPausedMap(cryoContained)) @@ -114,6 +112,7 @@ private void OnRemoveItemBuiMessage(Entity ent, ref Cryost AdminLog.Add(LogType.Action, LogImpact.High, $"{ToPrettyString(attachedEntity):player} removed item {ToPrettyString(entity)} from cryostorage-contained player " + $"{ToPrettyString(cryoContained):player}, stored in cryostorage {ToPrettyString(ent)}"); + _container.TryRemoveFromContainer(entity.Value); _transform.SetCoordinates(entity.Value, Transform(attachedEntity).Coordinates); _hands.PickupOrDrop(attachedEntity, entity.Value); @@ -122,8 +121,8 @@ private void OnRemoveItemBuiMessage(Entity ent, ref Cryost private void UpdateCryostorageUIState(Entity ent) { - var state = new CryostorageBuiState(GetAllContainedData(ent).ToList()); - _ui.TrySetUiState(ent, CryostorageUIKey.Key, state); + var state = new CryostorageBuiState(GetAllContainedData(ent)); + _ui.SetUiState(ent.Owner, CryostorageUIKey.Key, state); } private void OnPlayerSpawned(Entity ent, ref PlayerSpawnCompleteEvent args) @@ -293,12 +292,17 @@ protected override void OnInsertedContainer(Entity ent, re _chatManager.ChatMessageToOne(ChatChannel.Server, msg, msg, uid, false, actor.PlayerSession.Channel); } - private IEnumerable GetAllContainedData(Entity ent) + private List GetAllContainedData(Entity ent) { + var data = new List(); + data.EnsureCapacity(ent.Comp.StoredPlayers.Count); + foreach (var contained in ent.Comp.StoredPlayers) { - yield return GetContainedData(contained); + data.Add(GetContainedData(contained)); } + + return data; } private CryostorageContainedPlayerData GetContainedData(EntityUid uid) diff --git a/Content.Server/Body/Components/BloodstreamComponent.cs b/Content.Server/Body/Components/BloodstreamComponent.cs index a272d5f3656..f7024a63951 100644 --- a/Content.Server/Body/Components/BloodstreamComponent.cs +++ b/Content.Server/Body/Components/BloodstreamComponent.cs @@ -1,5 +1,6 @@ using Content.Server.Body.Systems; using Content.Server.Chemistry.EntitySystems; +using Content.Server.Traits; using Content.Server.Traits.Assorted; using Content.Shared.Chemistry.Components; using Content.Shared.Chemistry.Reagent; @@ -83,6 +84,14 @@ public sealed partial class BloodstreamComponent : Component [DataField] public FixedPoint2 BloodRefreshAmount = 1.0f; + /// + /// How much hunger/thirst is used to regenerate one unit of blood. Set to zero to disable. + /// The actual thirst/hunger rate will scale with . + /// + /// Those will have no effect if the entity has no hunger/thirst components. + [DataField] + public float BloodRegenerationHunger = 1f, BloodRegenerationThirst = 1f; + /// /// How much blood needs to be in the temporary solution in order to create a puddle? /// @@ -172,18 +181,5 @@ public sealed partial class BloodstreamComponent : Component /// [ViewVariables(VVAccess.ReadWrite)] public TimeSpan StatusTime; - - /// - /// If this is true, the entity will not passively regenerate blood, - /// and instead will slowly lose blood. - /// - [DataField] - public bool HasBloodDeficiency = false; - - /// - /// How much percentage of max blood volume should be removed with blood deficiency in each update interval? - /// - [DataField] - public float BloodDeficiencyLossPercentage; } } diff --git a/Content.Server/Body/Components/RespiratorImmuneComponent.cs b/Content.Server/Body/Components/RespiratorImmuneComponent.cs new file mode 100644 index 00000000000..afc261eff24 --- /dev/null +++ b/Content.Server/Body/Components/RespiratorImmuneComponent.cs @@ -0,0 +1,4 @@ +namespace Content.Server.Body.Components; + +[RegisterComponent] +public sealed partial class RespiratorImmuneComponent : Component { } \ No newline at end of file diff --git a/Content.Server/Body/Events/NaturalBloodRegenerationAttemptEvent.cs b/Content.Server/Body/Events/NaturalBloodRegenerationAttemptEvent.cs new file mode 100644 index 00000000000..8ad2b88efe8 --- /dev/null +++ b/Content.Server/Body/Events/NaturalBloodRegenerationAttemptEvent.cs @@ -0,0 +1,15 @@ +using Content.Shared.FixedPoint; + +namespace Content.Server.Body.Events; + +/// +/// Raised on a mob when its bloodstream tries to perform natural blood regeneration. +/// +[ByRefEvent] +public sealed class NaturalBloodRegenerationAttemptEvent : CancellableEntityEventArgs +{ + /// + /// How much blood the mob will regenerate on this tick. Can be negative. + /// + public FixedPoint2 Amount; +} diff --git a/Content.Server/Body/Systems/BloodstreamSystem.cs b/Content.Server/Body/Systems/BloodstreamSystem.cs index 91ed7a24808..d1fad6541ba 100644 --- a/Content.Server/Body/Systems/BloodstreamSystem.cs +++ b/Content.Server/Body/Systems/BloodstreamSystem.cs @@ -1,9 +1,9 @@ using Content.Server.Body.Components; +using Content.Server.Body.Events; using Content.Server.Chemistry.Containers.EntitySystems; using Content.Server.Chemistry.ReactionEffects; using Content.Server.Fluids.EntitySystems; using Content.Server.Forensics; -using Content.Server.HealthExaminable; using Content.Server.Popups; using Content.Shared.Alert; using Content.Shared.Chemistry.Components; @@ -13,7 +13,10 @@ using Content.Shared.Damage.Prototypes; using Content.Shared.Drunk; using Content.Shared.FixedPoint; +using Content.Shared.HealthExaminable; using Content.Shared.Mobs.Systems; +using Content.Shared.Nutrition.Components; +using Content.Shared.Nutrition.EntitySystems; using Content.Shared.Popups; using Content.Shared.Rejuvenate; using Content.Shared.Speech.EntitySystems; @@ -39,6 +42,8 @@ public sealed class BloodstreamSystem : EntitySystem [Dependency] private readonly SharedStutteringSystem _stutteringSystem = default!; [Dependency] private readonly AlertsSystem _alertsSystem = default!; [Dependency] private readonly ForensicsSystem _forensicsSystem = default!; + [Dependency] private readonly HungerSystem _hunger = default!; + [Dependency] private readonly ThirstSystem _thirst = default!; public override void Initialize() { @@ -118,17 +123,9 @@ public override void Update(float frameTime) if (!_solutionContainerSystem.ResolveSolution(uid, bloodstream.BloodSolutionName, ref bloodstream.BloodSolution, out var bloodSolution)) continue; - // Removes blood for Blood Deficiency constantly. - if (bloodstream.HasBloodDeficiency) - { - if (!_mobStateSystem.IsDead(uid)) - RemoveBlood(uid, bloodstream.BloodMaxVolume * bloodstream.BloodDeficiencyLossPercentage, bloodstream); - } - // Adds blood to their blood level if it is below the maximum. - else if (bloodSolution.Volume < bloodSolution.MaxVolume && !_mobStateSystem.IsDead(uid)) - { - TryModifyBloodLevel(uid, bloodstream.BloodRefreshAmount, bloodstream); - } + // Try to apply natural blood regeneration/bloodloss + if (!_mobStateSystem.IsDead(uid)) + TryDoNaturalRegeneration((uid, bloodstream), bloodSolution); // Removes blood from the bloodstream based on bleed amount (bleed rate) // as well as stop their bleeding to a certain extent. @@ -498,4 +495,35 @@ private void RemoveBlood(EntityUid uid, FixedPoint2 amount, BloodstreamComponent bloodSolution.RemoveReagent(component.BloodReagent, amount); } + + /// + /// Tries to apply natural blood regeneration/loss to the entity. Returns true if succesful. + /// + private bool TryDoNaturalRegeneration(Entity ent, Solution bloodSolution) + { + var ev = new NaturalBloodRegenerationAttemptEvent { Amount = ent.Comp.BloodRefreshAmount }; + RaiseLocalEvent(ent, ref ev); + + if (ev.Cancelled || (ev.Amount > 0 && bloodSolution.Volume >= bloodSolution.MaxVolume)) + return false; + + var usedHunger = ev.Amount * ent.Comp.BloodRegenerationHunger; + var usedThirst = ev.Amount * ent.Comp.BloodRegenerationThirst; + + // First, check if the entity has enough hunger/thirst + var hungerComp = CompOrNull(ent); + var thirstComp = CompOrNull(ent); + if (usedHunger > 0 && hungerComp is not null && (hungerComp.CurrentHunger < usedHunger || hungerComp.CurrentThreshold <= HungerThreshold.Starving) + || usedThirst > 0 && thirstComp is not null && (thirstComp.CurrentThirst < usedThirst || thirstComp.CurrentThirstThreshold <= ThirstThreshold.Parched)) + return false; + + // Then actually expend hunger and thirst (if necessary) and regenerate blood. + if (usedHunger > 0 && hungerComp is not null) + _hunger.ModifyHunger(ent, (float) -usedHunger, hungerComp); + + if (usedThirst > 0 && thirstComp is not null) + _thirst.ModifyThirst(ent, thirstComp, (float) -usedThirst); + + return TryModifyBloodLevel(ent, ev.Amount, ent.Comp); + } } diff --git a/Content.Server/Body/Systems/InternalsSystem.cs b/Content.Server/Body/Systems/InternalsSystem.cs index 9607a808f65..db078e2f291 100644 --- a/Content.Server/Body/Systems/InternalsSystem.cs +++ b/Content.Server/Body/Systems/InternalsSystem.cs @@ -8,6 +8,7 @@ using Content.Shared.Hands.Components; using Content.Shared.Internals; using Content.Shared.Inventory; +using Content.Shared.Roles; using Content.Shared.Verbs; using Robust.Shared.Containers; using Robust.Shared.Utility; @@ -23,17 +24,29 @@ public sealed class InternalsSystem : EntitySystem [Dependency] private readonly InventorySystem _inventory = default!; [Dependency] private readonly PopupSystem _popupSystem = default!; - public const SlotFlags InventorySlots = SlotFlags.POCKET | SlotFlags.BELT; + private EntityQuery _internalsQuery; public override void Initialize() { base.Initialize(); + _internalsQuery = GetEntityQuery(); + SubscribeLocalEvent(OnInhaleLocation); SubscribeLocalEvent(OnInternalsStartup); SubscribeLocalEvent(OnInternalsShutdown); SubscribeLocalEvent>(OnGetInteractionVerbs); SubscribeLocalEvent(OnDoAfter); + + SubscribeLocalEvent(OnStartingGear); + } + + private void OnStartingGear(ref StartingGearEquippedEvent ev) + { + if (!_internalsQuery.TryComp(ev.Entity, out var internals) || internals.BreathToolEntity == null) + return; + + ToggleInternals(ev.Entity, ev.Entity, force: false, internals); } private void OnGetInteractionVerbs( @@ -218,7 +231,7 @@ private short GetSeverity(InternalsComponent component) if (component.BreathToolEntity is null || !AreInternalsWorking(component)) return 2; - // If pressure in the tank is below low pressure threshhold, flash warning on internals UI + // If pressure in the tank is below low pressure threshold, flash warning on internals UI if (TryComp(component.GasTankEntity, out var gasTank) && gasTank.IsLowPressure) { diff --git a/Content.Server/Body/Systems/RespiratorSystem.cs b/Content.Server/Body/Systems/RespiratorSystem.cs index 389e5fbab72..f6a17d32b65 100644 --- a/Content.Server/Body/Systems/RespiratorSystem.cs +++ b/Content.Server/Body/Systems/RespiratorSystem.cs @@ -66,6 +66,9 @@ public override void Update(float frameTime) if (_mobState.IsDead(uid)) continue; + if (HasComp(uid)) + continue; + UpdateSaturation(uid, -(float) respirator.UpdateInterval.TotalSeconds, respirator); if (!_mobState.IsIncapacitated(uid)) // cannot breathe in crit. diff --git a/Content.Server/Botany/Components/SeedExtractorComponent.cs b/Content.Server/Botany/Components/SeedExtractorComponent.cs index ddb04f213d1..d765e079cec 100644 --- a/Content.Server/Botany/Components/SeedExtractorComponent.cs +++ b/Content.Server/Botany/Components/SeedExtractorComponent.cs @@ -1,4 +1,7 @@ using Content.Server.Botany.Systems; +using Content.Server.Construction; +using Content.Shared.Construction.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; namespace Content.Server.Botany.Components; @@ -7,14 +10,33 @@ namespace Content.Server.Botany.Components; public sealed partial class SeedExtractorComponent : Component { /// - /// The minimum amount of seed packets dropped. + /// The minimum amount of seed packets dropped with no machine upgrades. /// - [DataField("baseMinSeeds"), ViewVariables(VVAccess.ReadWrite)] + [DataField] public int BaseMinSeeds = 1; /// - /// The maximum amount of seed packets dropped. + /// The maximum amount of seed packets dropped with no machine upgrades. /// - [DataField("baseMaxSeeds"), ViewVariables(VVAccess.ReadWrite)] + [DataField] public int BaseMaxSeeds = 3; + + /// + /// Modifier to the amount of seeds outputted, set on . + /// + [ViewVariables(VVAccess.ReadWrite)] + public float SeedAmountMultiplier; + + /// + /// Machine part whose rating modifies the amount of seed packets dropped. + /// + [DataField(customTypeSerializer: typeof(PrototypeIdSerializer))] + public string MachinePartSeedAmount = "Manipulator"; + + /// + /// How much the machine part quality affects the amount of seeds outputted. + /// Going up a tier will multiply the seed output by this amount. + /// + [DataField] + public float PartRatingSeedAmountMultiplier = 1.5f; } diff --git a/Content.Server/Botany/SeedPrototype.cs b/Content.Server/Botany/SeedPrototype.cs index 2644da2a3b0..dd3555f143f 100644 --- a/Content.Server/Botany/SeedPrototype.cs +++ b/Content.Server/Botany/SeedPrototype.cs @@ -2,16 +2,16 @@ using Content.Server.Botany.Systems; using Content.Shared.Atmos; using Content.Shared.Chemistry.Reagent; +using Robust.Shared.Audio; using Robust.Shared.Prototypes; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.List; using Robust.Shared.Utility; -using Robust.Shared.Audio; namespace Content.Server.Botany; [Prototype("seed")] -public sealed class SeedPrototype : SeedData, IPrototype +public sealed partial class SeedPrototype : SeedData, IPrototype { [IdDataField] public string ID { get; private init; } = default!; } @@ -70,7 +70,7 @@ public partial struct SeedChemQuantity /// When chemicals are added to produce, the potency of the seed is divided with this value. Final chemical amount is the result plus the `Min` value. /// Example: PotencyDivisor of 20 with seed potency of 55 results in 2.75, 55/20 = 2.75. If minimum is 1 then final result will be 3.75 of that chemical, 55/20+1 = 3.75. /// - [DataField("PotencyDivisor")] public int PotencyDivisor; + [DataField] public int PotencyDivisor; /// /// Inherent chemical is one that is NOT result of mutation or crossbreeding. These chemicals are removed if species mutation is executed. diff --git a/Content.Server/Botany/Systems/PlantHolderSystem.cs b/Content.Server/Botany/Systems/PlantHolderSystem.cs index 721536a7c07..c8842e14939 100644 --- a/Content.Server/Botany/Systems/PlantHolderSystem.cs +++ b/Content.Server/Botany/Systems/PlantHolderSystem.cs @@ -6,6 +6,7 @@ using Content.Server.Ghost.Roles.Components; using Content.Server.Kitchen.Components; using Content.Server.Popups; +using Content.Shared.Atmos; using Content.Shared.Botany; using Content.Shared.Burial.Components; using Content.Shared.Chemistry.Reagent; diff --git a/Content.Server/Botany/Systems/SeedExtractorSystem.cs b/Content.Server/Botany/Systems/SeedExtractorSystem.cs index f1ae6c9f11a..4c547b96f09 100644 --- a/Content.Server/Botany/Systems/SeedExtractorSystem.cs +++ b/Content.Server/Botany/Systems/SeedExtractorSystem.cs @@ -1,8 +1,10 @@ using Content.Server.Botany.Components; +using Content.Server.Construction; using Content.Server.Popups; using Content.Server.Power.EntitySystems; using Content.Shared.Interaction; using Content.Shared.Popups; +using Robust.Shared.Player; using Robust.Shared.Random; namespace Content.Server.Botany.Systems; @@ -18,6 +20,8 @@ public override void Initialize() base.Initialize(); SubscribeLocalEvent(OnInteractUsing); + SubscribeLocalEvent(OnRefreshParts); + SubscribeLocalEvent(OnUpgradeExamine); } private void OnInteractUsing(EntityUid uid, SeedExtractorComponent seedExtractor, InteractUsingEvent args) @@ -25,8 +29,7 @@ private void OnInteractUsing(EntityUid uid, SeedExtractorComponent seedExtractor if (!this.IsPowered(uid, EntityManager)) return; - if (!TryComp(args.Used, out ProduceComponent? produce)) - return; + if (!TryComp(args.Used, out ProduceComponent? produce)) return; if (!_botanySystem.TryGetSeed(produce, out var seed) || seed.Seedless) { _popupSystem.PopupCursor(Loc.GetString("seed-extractor-component-no-seeds",("name", args.Used)), @@ -39,7 +42,7 @@ private void OnInteractUsing(EntityUid uid, SeedExtractorComponent seedExtractor QueueDel(args.Used); - var amount = _random.Next(seedExtractor.BaseMinSeeds, seedExtractor.BaseMaxSeeds + 1); + var amount = (int) _random.NextFloat(seedExtractor.BaseMinSeeds, seedExtractor.BaseMaxSeeds + 1) * seedExtractor.SeedAmountMultiplier; var coords = Transform(uid).Coordinates; if (amount > 1) @@ -50,4 +53,15 @@ private void OnInteractUsing(EntityUid uid, SeedExtractorComponent seedExtractor _botanySystem.SpawnSeedPacket(seed, coords, args.User); } } + + private void OnRefreshParts(EntityUid uid, SeedExtractorComponent seedExtractor, RefreshPartsEvent args) + { + var manipulatorQuality = args.PartRatings[seedExtractor.MachinePartSeedAmount]; + seedExtractor.SeedAmountMultiplier = MathF.Pow(seedExtractor.PartRatingSeedAmountMultiplier, manipulatorQuality - 1); + } + + private void OnUpgradeExamine(EntityUid uid, SeedExtractorComponent seedExtractor, UpgradeExamineEvent args) + { + args.AddPercentageUpgrade("seed-extractor-component-upgrade-seed-yield", seedExtractor.SeedAmountMultiplier); + } } diff --git a/Content.Server/Cargo/Components/StationCargoOrderDatabaseComponent.cs b/Content.Server/Cargo/Components/StationCargoOrderDatabaseComponent.cs index c30db08bbe5..2e3b2c21157 100644 --- a/Content.Server/Cargo/Components/StationCargoOrderDatabaseComponent.cs +++ b/Content.Server/Cargo/Components/StationCargoOrderDatabaseComponent.cs @@ -1,4 +1,6 @@ +using Content.Server.Station.Components; using Content.Shared.Cargo; +using Content.Shared.Cargo.Components; using Content.Shared.Cargo.Prototypes; using Robust.Shared.Prototypes; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; @@ -38,3 +40,17 @@ public sealed partial class StationCargoOrderDatabaseComponent : Component [DataField] public EntProtoId PrinterOutput = "PaperCargoInvoice"; } + +/// +/// Event broadcast before a cargo order is fulfilled, allowing alternate systems to fulfill the order. +/// +[ByRefEvent] +public record struct FulfillCargoOrderEvent(Entity Station, CargoOrderData Order, Entity OrderConsole) +{ + public Entity OrderConsole = OrderConsole; + public Entity Station = Station; + public CargoOrderData Order = Order; + + public EntityUid? FulfillmentEntity; + public bool Handled = false; +} diff --git a/Content.Server/Cargo/Components/StationLogisticStatsDatabaseComponent.cs b/Content.Server/Cargo/Components/StationLogisticStatsDatabaseComponent.cs new file mode 100644 index 00000000000..ca1fbeaad08 --- /dev/null +++ b/Content.Server/Cargo/Components/StationLogisticStatsDatabaseComponent.cs @@ -0,0 +1,14 @@ +using Content.Shared.Cargo; +using Content.Shared.CartridgeLoader.Cartridges; + +namespace Content.Server.Cargo.Components; + +/// +/// Added to the abstract representation of a station to track stats related to mail delivery and income +/// +[RegisterComponent, Access(typeof(SharedCargoSystem))] +public sealed partial class StationLogisticStatsComponent : Component +{ + [DataField] + public MailStats Metrics { get; set; } +} diff --git a/Content.Server/Cargo/Systems/CargoSystem.Bounty.cs b/Content.Server/Cargo/Systems/CargoSystem.Bounty.cs index 22e5c67e175..e132e4f12a3 100644 --- a/Content.Server/Cargo/Systems/CargoSystem.Bounty.cs +++ b/Content.Server/Cargo/Systems/CargoSystem.Bounty.cs @@ -52,7 +52,7 @@ private void OnBountyConsoleOpened(EntityUid uid, CargoBountyConsoleComponent co return; var untilNextSkip = bountyDb.NextSkipTime - _timing.CurTime; - _uiSystem.TrySetUiState(uid, CargoConsoleUiKey.Bounty, new CargoBountyConsoleState(bountyDb.Bounties, untilNextSkip)); + _uiSystem.SetUiState(uid, CargoConsoleUiKey.Bounty, new CargoBountyConsoleState(bountyDb.Bounties, untilNextSkip)); } private void OnPrintLabelMessage(EntityUid uid, CargoBountyConsoleComponent component, BountyPrintLabelMessage args) @@ -83,7 +83,7 @@ private void OnSkipBountyMessage(EntityUid uid, CargoBountyConsoleComponent comp if (!TryGetBountyFromId(station, args.BountyId, out var bounty)) return; - if (args.Session.AttachedEntity is not { Valid: true } mob) + if (args.Actor is not { Valid: true } mob) return; if (TryComp(uid, out var accessReaderComponent) && @@ -99,7 +99,7 @@ private void OnSkipBountyMessage(EntityUid uid, CargoBountyConsoleComponent comp FillBountyDatabase(station); db.NextSkipTime = _timing.CurTime + db.SkipDelay; var untilNextSkip = db.NextSkipTime - _timing.CurTime; - _uiSystem.TrySetUiState(uid, CargoConsoleUiKey.Bounty, new CargoBountyConsoleState(db.Bounties, untilNextSkip)); + _uiSystem.SetUiState(uid, CargoConsoleUiKey.Bounty, new CargoBountyConsoleState(db.Bounties, untilNextSkip)); _audio.PlayPvs(component.SkipSound, uid); } @@ -462,10 +462,12 @@ public void UpdateBountyConsoles() { if (_station.GetOwningStation(uid) is not { } station || !TryComp(station, out var db)) + { continue; + } var untilNextSkip = db.NextSkipTime - _timing.CurTime; - _uiSystem.TrySetUiState(uid, CargoConsoleUiKey.Bounty, new CargoBountyConsoleState(db.Bounties, untilNextSkip), ui: ui); + _uiSystem.SetUiState((uid, ui), CargoConsoleUiKey.Bounty, new CargoBountyConsoleState(db.Bounties, untilNextSkip)); } } diff --git a/Content.Server/Cargo/Systems/CargoSystem.Orders.cs b/Content.Server/Cargo/Systems/CargoSystem.Orders.cs index d8b55a7237f..8978e6b2bfb 100644 --- a/Content.Server/Cargo/Systems/CargoSystem.Orders.cs +++ b/Content.Server/Cargo/Systems/CargoSystem.Orders.cs @@ -102,12 +102,12 @@ private void UpdateConsole(float frameTime) private void OnApproveOrderMessage(EntityUid uid, CargoOrderConsoleComponent component, CargoConsoleApproveOrderMessage args) { - if (args.Session.AttachedEntity is not { Valid: true } player) + if (args.Actor is not { Valid: true } player) return; if (!_accessReaderSystem.IsAllowed(player, uid)) { - ConsolePopup(args.Session, Loc.GetString("cargo-console-order-not-allowed")); + ConsolePopup(args.Actor, Loc.GetString("cargo-console-order-not-allowed")); PlayDenySound(uid, component); return; } @@ -119,7 +119,7 @@ private void OnApproveOrderMessage(EntityUid uid, CargoOrderConsoleComponent com !TryComp(station, out StationDataComponent? stationData) || !TryGetOrderDatabase(station, out var orderDatabase)) { - ConsolePopup(args.Session, Loc.GetString("cargo-console-station-not-found")); + ConsolePopup(args.Actor, Loc.GetString("cargo-console-station-not-found")); PlayDenySound(uid, component); return; } @@ -134,7 +134,7 @@ private void OnApproveOrderMessage(EntityUid uid, CargoOrderConsoleComponent com // Invalid order if (!_protoMan.HasIndex(order.ProductId)) { - ConsolePopup(args.Session, Loc.GetString("cargo-console-invalid-product")); + ConsolePopup(args.Actor, Loc.GetString("cargo-console-invalid-product")); PlayDenySound(uid, component); return; } @@ -145,7 +145,7 @@ private void OnApproveOrderMessage(EntityUid uid, CargoOrderConsoleComponent com // Too many orders, avoid them getting spammed in the UI. if (amount >= capacity) { - ConsolePopup(args.Session, Loc.GetString("cargo-console-too-many")); + ConsolePopup(args.Actor, Loc.GetString("cargo-console-too-many")); PlayDenySound(uid, component); return; } @@ -156,7 +156,7 @@ private void OnApproveOrderMessage(EntityUid uid, CargoOrderConsoleComponent com if (cappedAmount != order.OrderQuantity) { order.OrderQuantity = cappedAmount; - ConsolePopup(args.Session, Loc.GetString("cargo-console-snip-snip")); + ConsolePopup(args.Actor, Loc.GetString("cargo-console-snip-snip")); PlayDenySound(uid, component); } @@ -165,18 +165,25 @@ private void OnApproveOrderMessage(EntityUid uid, CargoOrderConsoleComponent com // Not enough balance if (cost > bank.Balance) { - ConsolePopup(args.Session, Loc.GetString("cargo-console-insufficient-funds", ("cost", cost))); + ConsolePopup(args.Actor, Loc.GetString("cargo-console-insufficient-funds", ("cost", cost))); PlayDenySound(uid, component); return; } - var tradeDestination = TryFulfillOrder(stationData, order, orderDatabase); + var ev = new FulfillCargoOrderEvent((station.Value, stationData), order, (uid, component)); + RaiseLocalEvent(ref ev); + ev.FulfillmentEntity ??= station.Value; - if (tradeDestination == null) + if (!ev.Handled) { - ConsolePopup(args.Session, Loc.GetString("cargo-console-unfulfilled")); - PlayDenySound(uid, component); - return; + ev.FulfillmentEntity = TryFulfillOrder((station.Value, stationData), order, orderDatabase); + + if (ev.FulfillmentEntity == null) + { + ConsolePopup(args.Actor, Loc.GetString("cargo-console-unfulfilled")); + PlayDenySound(uid, component); + return; + } } _idCardSystem.TryFindIdCard(player, out var idCard); @@ -184,7 +191,16 @@ private void OnApproveOrderMessage(EntityUid uid, CargoOrderConsoleComponent com order.SetApproverData(idCard.Comp?.FullName, idCard.Comp?.JobTitle); _audio.PlayPvs(component.ConfirmSound, uid); - ConsolePopup(args.Session, Loc.GetString("cargo-console-trade-station", ("destination", MetaData(tradeDestination.Value).EntityName))); + var approverName = idCard.Comp?.FullName ?? Loc.GetString("access-reader-unknown-id"); + var approverJob = idCard.Comp?.JobTitle ?? Loc.GetString("access-reader-unknown-id"); + var message = Loc.GetString("cargo-console-unlock-approved-order-broadcast", + ("productName", Loc.GetString(order.ProductName)), + ("orderAmount", order.OrderQuantity), + ("approverName", approverName), + ("approverJob", approverJob), + ("cost", cost)); + _radio.SendRadioMessage(uid, message, component.AnnouncementChannel, uid, escapeMarkup: false); + ConsolePopup(args.Actor, Loc.GetString("cargo-console-trade-station", ("destination", MetaData(ev.FulfillmentEntity.Value).EntityName))); // Log order approval _adminLogger.Add(LogType.Action, LogImpact.Low, @@ -192,10 +208,10 @@ private void OnApproveOrderMessage(EntityUid uid, CargoOrderConsoleComponent com orderDatabase.Orders.Remove(order); DeductFunds(bank, cost); - UpdateOrders(station.Value, orderDatabase); + UpdateOrders(station.Value); } - private EntityUid? TryFulfillOrder(StationDataComponent stationData, CargoOrderData order, StationCargoOrderDatabaseComponent orderDatabase) + private EntityUid? TryFulfillOrder(Entity stationData, CargoOrderData order, StationCargoOrderDatabaseComponent orderDatabase) { // No slots at the trade station _listEnts.Clear(); @@ -257,7 +273,7 @@ private void OnRemoveOrderMessage(EntityUid uid, CargoOrderConsoleComponent comp private void OnAddOrderMessage(EntityUid uid, CargoOrderConsoleComponent component, CargoConsoleAddOrderMessage args) { - if (args.Session.AttachedEntity is not { Valid: true } player) + if (args.Actor is not { Valid: true } player) return; if (args.Amount <= 0) @@ -305,9 +321,9 @@ private void UpdateOrderState(EntityUid consoleUid, EntityUid? station) !TryComp(station, out var orderDatabase) || !TryComp(station, out var bankAccount)) return; - if (_uiSystem.TryGetUi(consoleUid, CargoConsoleUiKey.Orders, out var bui)) + if (_uiSystem.HasUi(consoleUid, CargoConsoleUiKey.Orders)) { - _uiSystem.SetUiState(bui, new CargoConsoleInterfaceState( + _uiSystem.SetUiState(consoleUid, CargoConsoleUiKey.Orders, new CargoConsoleInterfaceState( MetaData(station.Value).EntityName, GetOutstandingOrderCount(orderDatabase), orderDatabase.Capacity, @@ -317,9 +333,9 @@ private void UpdateOrderState(EntityUid consoleUid, EntityUid? station) } } - private void ConsolePopup(ICommonSession session, string text) + private void ConsolePopup(EntityUid actor, string text) { - _popup.PopupCursor(text, session); + _popup.PopupCursor(text, actor); } private void PlayDenySound(EntityUid uid, CargoOrderConsoleComponent component) @@ -329,7 +345,7 @@ private void PlayDenySound(EntityUid uid, CargoOrderConsoleComponent component) private static CargoOrderData GetOrderData(CargoConsoleAddOrderMessage args, CargoProductPrototype cargoProduct, int id) { - return new CargoOrderData(id, cargoProduct.Product, cargoProduct.Cost, args.Amount, args.Requester, args.Reason); + return new CargoOrderData(id, cargoProduct.Product, cargoProduct.Name, cargoProduct.Cost, args.Amount, args.Requester, args.Reason); } public static int GetOutstandingOrderCount(StationCargoOrderDatabaseComponent component) @@ -350,7 +366,7 @@ public static int GetOutstandingOrderCount(StationCargoOrderDatabaseComponent co /// Updates all of the cargo-related consoles for a particular station. /// This should be called whenever orders change. /// - private void UpdateOrders(EntityUid dbUid, StationCargoOrderDatabaseComponent _) + private void UpdateOrders(EntityUid dbUid) { // Order added so all consoles need updating. var orderQuery = AllEntityQuery(); @@ -378,19 +394,20 @@ private void UpdateOrders(EntityUid dbUid, StationCargoOrderDatabaseComponent _) public bool AddAndApproveOrder( EntityUid dbUid, string spawnId, + string name, int cost, int qty, string sender, string description, string dest, StationCargoOrderDatabaseComponent component, - StationDataComponent stationData + Entity stationData ) { DebugTools.Assert(_protoMan.HasIndex(spawnId)); // Make an order var id = GenerateOrderId(component); - var order = new CargoOrderData(id, spawnId, cost, qty, sender, description); + var order = new CargoOrderData(id, spawnId, name, cost, qty, sender, description); // Approve it now order.SetApproverData(dest, sender); @@ -406,7 +423,7 @@ StationDataComponent stationData private bool TryAddOrder(EntityUid dbUid, CargoOrderData data, StationCargoOrderDatabaseComponent component) { component.Orders.Add(data); - UpdateOrders(dbUid, component); + UpdateOrders(dbUid); return true; } @@ -424,7 +441,7 @@ public void RemoveOrder(EntityUid dbUid, int index, StationCargoOrderDatabaseCom { orderDB.Orders.RemoveAt(sequenceIdx); } - UpdateOrders(dbUid, orderDB); + UpdateOrders(dbUid); } public void ClearOrders(StationCargoOrderDatabaseComponent component) diff --git a/Content.Server/Cargo/Systems/CargoSystem.Shuttle.cs b/Content.Server/Cargo/Systems/CargoSystem.Shuttle.cs index 0484e05ced1..1c5c7ed1c0d 100644 --- a/Content.Server/Cargo/Systems/CargoSystem.Shuttle.cs +++ b/Content.Server/Cargo/Systems/CargoSystem.Shuttle.cs @@ -79,21 +79,20 @@ private void UpdateCargoShuttleConsoles(EntityUid shuttleUid, CargoShuttleCompon private void UpdatePalletConsoleInterface(EntityUid uid) { - var bui = _uiSystem.GetUi(uid, CargoPalletConsoleUiKey.Sale); if (Transform(uid).GridUid is not EntityUid gridUid) { - _uiSystem.SetUiState(bui, + _uiSystem.SetUiState(uid, CargoPalletConsoleUiKey.Sale, new CargoPalletConsoleInterfaceState(0, 0, false)); return; } GetPalletGoods(gridUid, out var toSell, out var amount); - _uiSystem.SetUiState(bui, + _uiSystem.SetUiState(uid, CargoPalletConsoleUiKey.Sale, new CargoPalletConsoleInterfaceState((int) amount, toSell.Count, true)); } private void OnPalletUIOpen(EntityUid uid, CargoPalletConsoleComponent component, BoundUIOpenedEvent args) { - var player = args.Session.AttachedEntity; + var player = args.Actor; if (player == null) return; @@ -111,7 +110,7 @@ private void OnPalletUIOpen(EntityUid uid, CargoPalletConsoleComponent component private void OnPalletAppraise(EntityUid uid, CargoPalletConsoleComponent component, CargoPalletAppraiseMessage args) { - var player = args.Session.AttachedEntity; + var player = args.Actor; if (player == null) return; @@ -133,8 +132,8 @@ private void UpdateShuttleState(EntityUid uid, EntityUid? station = null) var orders = GetProjectedOrders(station ?? EntityUid.Invalid, orderDatabase, shuttle); var shuttleName = orderDatabase?.Shuttle != null ? MetaData(orderDatabase.Shuttle.Value).EntityName : string.Empty; - if (_uiSystem.TryGetUi(uid, CargoConsoleUiKey.Shuttle, out var bui)) - _uiSystem.SetUiState(bui, new CargoShuttleConsoleBoundUserInterfaceState( + if (_uiSystem.HasUi(uid, CargoConsoleUiKey.Shuttle)) + _uiSystem.SetUiState(uid, CargoConsoleUiKey.Shuttle, new CargoShuttleConsoleBoundUserInterfaceState( station != null ? MetaData(station.Value).EntityName : Loc.GetString("cargo-shuttle-console-station-unknown"), string.IsNullOrEmpty(shuttleName) ? Loc.GetString("cargo-shuttle-console-shuttle-not-found") : shuttleName, orders @@ -179,7 +178,7 @@ private List GetProjectedOrders( // We won't be able to fit the whole order on, so make one // which represents the space we do have left: var reducedOrder = new CargoOrderData(order.OrderId, - order.ProductId, order.Price, spaceRemaining, order.Requester, order.Reason); + order.ProductId, order.ProductName, order.Price, spaceRemaining, order.Requester, order.Reason); orders.Add(reducedOrder); } else @@ -339,17 +338,16 @@ private bool CanSell(EntityUid uid, TransformComponent xform) private void OnPalletSale(EntityUid uid, CargoPalletConsoleComponent component, CargoPalletSellMessage args) { - var player = args.Session.AttachedEntity; + var player = args.Actor; if (player == null) return; - var bui = _uiSystem.GetUi(uid, CargoPalletConsoleUiKey.Sale); var xform = Transform(uid); if (xform.GridUid is not EntityUid gridUid) { - _uiSystem.SetUiState(bui, + _uiSystem.SetUiState(uid, CargoPalletConsoleUiKey.Sale, new CargoPalletConsoleInterfaceState(0, 0, false)); return; } diff --git a/Content.Server/Cargo/Systems/CargoSystem.Telepad.cs b/Content.Server/Cargo/Systems/CargoSystem.Telepad.cs index 42aabf2578e..223dd2ac329 100644 --- a/Content.Server/Cargo/Systems/CargoSystem.Telepad.cs +++ b/Content.Server/Cargo/Systems/CargoSystem.Telepad.cs @@ -1,9 +1,15 @@ +using System.Linq; using Content.Server.Cargo.Components; +using Content.Server.Construction; +using Content.Server.Paper; using Content.Server.Power.Components; +using Content.Server.Power.EntitySystems; +using Content.Server.Station.Components; using Content.Shared.Cargo; using Content.Shared.Cargo.Components; using Content.Shared.DeviceLinking; using Robust.Shared.Audio; +using Robust.Shared.Random; using Robust.Shared.Utility; namespace Content.Server.Cargo.Systems; @@ -13,10 +19,46 @@ public sealed partial class CargoSystem private void InitializeTelepad() { SubscribeLocalEvent(OnInit); + SubscribeLocalEvent(OnRefreshParts); + SubscribeLocalEvent(OnUpgradeExamine); + SubscribeLocalEvent(OnShutdown); SubscribeLocalEvent(OnTelepadPowerChange); // Shouldn't need re-anchored event SubscribeLocalEvent(OnTelepadAnchorChange); + SubscribeLocalEvent(OnTelepadFulfillCargoOrder); } + + private void OnTelepadFulfillCargoOrder(ref FulfillCargoOrderEvent args) + { + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var tele, out var xform)) + { + if (tele.CurrentState != CargoTelepadState.Idle) + continue; + + if (!this.IsPowered(uid, EntityManager)) + continue; + + if (_station.GetOwningStation(uid, xform) != args.Station) + continue; + + // todo cannot be fucking asked to figure out device linking rn but this shouldn't just default to the first port. + if (!TryComp(uid, out var sinkComponent) || + sinkComponent.LinkedSources.FirstOrNull() is not { } console || + console != args.OrderConsole.Owner) + continue; + + for (var i = 0; i < args.Order.OrderQuantity; i++) + { + tele.CurrentOrders.Add(args.Order); + } + tele.Accumulator = tele.Delay; + args.Handled = true; + args.FulfillmentEntity = uid; + return; + } + } + private void UpdateTelepad(float frameTime) { var query = EntityQueryEnumerator(); @@ -33,14 +75,6 @@ private void UpdateTelepad(float frameTime) continue; } - if (!TryComp(uid, out var sinkComponent) || - sinkComponent.LinkedSources.FirstOrNull() is not { } console || - !HasComp(console)) - { - comp.Accumulator = comp.Delay; - continue; - } - comp.Accumulator -= frameTime; // Uhh listen teleporting takes time and I just want the 1 float. @@ -51,21 +85,22 @@ private void UpdateTelepad(float frameTime) continue; } - var station = _station.GetOwningStation(console); - - if (!TryComp(station, out var orderDatabase) || - orderDatabase.Orders.Count == 0) + if (comp.CurrentOrders.Count == 0) { comp.Accumulator += comp.Delay; continue; } var xform = Transform(uid); - if (FulfillNextOrder(orderDatabase, xform.Coordinates, comp.PrinterOutput)) + var currentOrder = comp.CurrentOrders.First(); + if (FulfillOrder(currentOrder, xform.Coordinates, comp.PrinterOutput)) { _audio.PlayPvs(_audio.GetSound(comp.TeleportSound), uid, AudioParams.Default.WithVolume(-8f)); - UpdateOrders(station.Value, orderDatabase); + if (_station.GetOwningStation(uid) is { } station) + UpdateOrders(station); + + comp.CurrentOrders.Remove(currentOrder); comp.CurrentState = CargoTelepadState.Teleporting; _appearance.SetData(uid, CargoTelepadVisuals.State, CargoTelepadState.Teleporting, appearance); } @@ -79,6 +114,40 @@ private void OnInit(EntityUid uid, CargoTelepadComponent telepad, ComponentInit _linker.EnsureSinkPorts(uid, telepad.ReceiverPort); } + private void OnRefreshParts(EntityUid uid, CargoTelepadComponent component, RefreshPartsEvent args) + { + var rating = args.PartRatings[component.MachinePartTeleportDelay] - 1; + component.Delay = component.BaseDelay * MathF.Pow(component.PartRatingTeleportDelay, rating); + } + + private void OnUpgradeExamine(EntityUid uid, CargoTelepadComponent component, UpgradeExamineEvent args) + { + args.AddPercentageUpgrade("cargo-telepad-delay-upgrade", component.Delay / component.BaseDelay); + } + + private void OnShutdown(Entity ent, ref ComponentShutdown args) + { + if (ent.Comp.CurrentOrders.Count == 0) + return; + + if (_station.GetStations().Count == 0) + return; + + if (_station.GetOwningStation(ent) is not { } station) + { + station = _random.Pick(_station.GetStations().Where(HasComp).ToList()); + } + + if (!TryComp(station, out var db) || + !TryComp(station, out var data)) + return; + + foreach (var order in ent.Comp.CurrentOrders) + { + TryFulfillOrder((station, data), order, db); + } + } + private void SetEnabled(EntityUid uid, CargoTelepadComponent component, ApcPowerReceiverComponent? receiver = null, TransformComponent? xform = null) { diff --git a/Content.Server/Cargo/Systems/CargoSystem.cs b/Content.Server/Cargo/Systems/CargoSystem.cs index 3d6fc964725..e593299321e 100644 --- a/Content.Server/Cargo/Systems/CargoSystem.cs +++ b/Content.Server/Cargo/Systems/CargoSystem.cs @@ -8,6 +8,7 @@ using Content.Server.Station.Systems; using Content.Shared.Access.Systems; using Content.Shared.Administration.Logs; +using Content.Server.Radio.EntitySystems; using Content.Shared.Cargo; using Content.Shared.Cargo.Components; using Content.Shared.Containers.ItemSlots; @@ -44,6 +45,7 @@ public sealed partial class CargoSystem : SharedCargoSystem [Dependency] private readonly StationSystem _station = default!; [Dependency] private readonly UserInterfaceSystem _uiSystem = default!; [Dependency] private readonly MetaDataSystem _metaSystem = default!; + [Dependency] private readonly RadioSystem _radio = default!; [Dependency] private readonly IConfigurationManager _cfgManager = default!; [Dependency] private readonly IMapManager _mapManager = default!; [Dependency] private readonly IComponentFactory _factory = default!; diff --git a/Content.Server/Cargo/Systems/LogisticStatsSystem.cs b/Content.Server/Cargo/Systems/LogisticStatsSystem.cs new file mode 100644 index 00000000000..6abf4eb5a47 --- /dev/null +++ b/Content.Server/Cargo/Systems/LogisticStatsSystem.cs @@ -0,0 +1,63 @@ +using Content.Shared.Cargo; +using Content.Server.Cargo.Components; +using JetBrains.Annotations; + +namespace Content.Server.Cargo.Systems; + +public sealed partial class LogisticStatsSystem : SharedCargoSystem +{ + [PublicAPI] + public void AddOpenedMailEarnings(EntityUid uid, StationLogisticStatsComponent component, int earnedMoney) + { + component.Metrics = component.Metrics with + { + Earnings = component.Metrics.Earnings + earnedMoney, + OpenedCount = component.Metrics.OpenedCount + 1 + }; + UpdateLogisticsStats(uid); + } + + [PublicAPI] + public void AddExpiredMailLosses(EntityUid uid, StationLogisticStatsComponent component, int lostMoney) + { + component.Metrics = component.Metrics with + { + ExpiredLosses = component.Metrics.ExpiredLosses + lostMoney, + ExpiredCount = component.Metrics.ExpiredCount + 1 + }; + UpdateLogisticsStats(uid); + } + + [PublicAPI] + public void AddDamagedMailLosses(EntityUid uid, StationLogisticStatsComponent component, int lostMoney) + { + component.Metrics = component.Metrics with + { + DamagedLosses = component.Metrics.DamagedLosses + lostMoney, + DamagedCount = component.Metrics.DamagedCount + 1 + }; + UpdateLogisticsStats(uid); + } + + [PublicAPI] + public void AddTamperedMailLosses(EntityUid uid, StationLogisticStatsComponent component, int lostMoney) + { + component.Metrics = component.Metrics with + { + TamperedLosses = component.Metrics.TamperedLosses + lostMoney, + TamperedCount = component.Metrics.TamperedCount + 1 + }; + UpdateLogisticsStats(uid); + } + + private void UpdateLogisticsStats(EntityUid uid) => RaiseLocalEvent(new LogisticStatsUpdatedEvent(uid)); +} + +public sealed class LogisticStatsUpdatedEvent : EntityEventArgs +{ + public EntityUid Station; + public LogisticStatsUpdatedEvent(EntityUid station) + { + Station = station; + } +} diff --git a/Content.Server/Cargo/Systems/PricingSystem.cs b/Content.Server/Cargo/Systems/PricingSystem.cs index 9e1970d63c9..f878eeee75c 100644 --- a/Content.Server/Cargo/Systems/PricingSystem.cs +++ b/Content.Server/Cargo/Systems/PricingSystem.cs @@ -199,7 +199,7 @@ public double GetEstimatedPrice(EntityPrototype prototype) /// This fires off an event to calculate the price. /// Calculating the price of an entity that somehow contains itself will likely hang. /// - public double GetPrice(EntityUid uid) + public double GetPrice(EntityUid uid, bool includeContents = true) { var ev = new PriceCalculationEvent(); RaiseLocalEvent(uid, ref ev); @@ -222,7 +222,7 @@ public double GetPrice(EntityUid uid) price += GetStaticPrice(uid); } - if (TryComp(uid, out var containers)) + if (includeContents && TryComp(uid, out var containers)) { foreach (var container in containers.Containers.Values) { diff --git a/Content.Server/Carrying/CarryingSystem.cs b/Content.Server/Carrying/CarryingSystem.cs index 3e37366a2e5..857c3861a74 100644 --- a/Content.Server/Carrying/CarryingSystem.cs +++ b/Content.Server/Carrying/CarryingSystem.cs @@ -146,7 +146,7 @@ private void OnThrow(EntityUid uid, CarryingComponent component, ref BeforeThrow private void OnParentChanged(EntityUid uid, CarryingComponent component, ref EntParentChangedMessage args) { var xform = Transform(uid); - if (xform.MapID != args.OldMapId || xform.ParentUid == xform.GridUid) + if (xform.MapUid != args.OldMapId || xform.ParentUid == xform.GridUid) return; DropCarried(uid, component.Carried); diff --git a/Content.Server/CartridgeLoader/CartridgeLoaderSystem.cs b/Content.Server/CartridgeLoader/CartridgeLoaderSystem.cs index 4a76aef911f..7896a7822e2 100644 --- a/Content.Server/CartridgeLoader/CartridgeLoaderSystem.cs +++ b/Content.Server/CartridgeLoader/CartridgeLoaderSystem.cs @@ -103,12 +103,12 @@ public void UpdateUiState(EntityUid loaderUid, ICommonSession? session, Cartridg if (!Resolve(loaderUid, ref loader)) return; - if (!_userInterfaceSystem.TryGetUi(loaderUid, loader.UiKey, out var ui)) + if (!_userInterfaceSystem.HasUi(loaderUid, loader.UiKey)) return; var programs = GetAvailablePrograms(loaderUid, loader); var state = new CartridgeLoaderUiState(programs, GetNetEntity(loader.ActiveProgram)); - _userInterfaceSystem.SetUiState(ui, state, session); + _userInterfaceSystem.SetUiState(loaderUid, loader.UiKey, state); } /// @@ -127,8 +127,8 @@ public void UpdateCartridgeUiState(EntityUid loaderUid, BoundUserInterfaceState if (!Resolve(loaderUid, ref loader)) return; - if (_userInterfaceSystem.TryGetUi(loaderUid, loader.UiKey, out var ui)) - _userInterfaceSystem.SetUiState(ui, state, session); + if (_userInterfaceSystem.HasUi(loaderUid, loader.UiKey)) + _userInterfaceSystem.SetUiState(loaderUid, loader.UiKey, state); } /// diff --git a/Content.Server/CartridgeLoader/Cartridges/MailMetricsCartridgeComponent.cs b/Content.Server/CartridgeLoader/Cartridges/MailMetricsCartridgeComponent.cs new file mode 100644 index 00000000000..380a4d90c04 --- /dev/null +++ b/Content.Server/CartridgeLoader/Cartridges/MailMetricsCartridgeComponent.cs @@ -0,0 +1,11 @@ +namespace Content.Server.CartridgeLoader.Cartridges; + +[RegisterComponent, Access(typeof(MailMetricsCartridgeSystem))] +public sealed partial class MailMetricsCartridgeComponent : Component +{ + /// + /// Station entity keeping track of logistics stats + /// + [DataField] + public EntityUid? Station; +} diff --git a/Content.Server/CartridgeLoader/Cartridges/MailMetricsCartridgeSystem.cs b/Content.Server/CartridgeLoader/Cartridges/MailMetricsCartridgeSystem.cs new file mode 100644 index 00000000000..00b6d0a16e8 --- /dev/null +++ b/Content.Server/CartridgeLoader/Cartridges/MailMetricsCartridgeSystem.cs @@ -0,0 +1,82 @@ +using Content.Server.Cargo.Components; +using Content.Server.Cargo.Systems; +using Content.Server.Mail.Components; +using Content.Server.Station.Systems; +using Content.Shared.CartridgeLoader; +using Content.Shared.CartridgeLoader.Cartridges; + +namespace Content.Server.CartridgeLoader.Cartridges; + +public sealed class MailMetricsCartridgeSystem : EntitySystem +{ + [Dependency] private readonly CartridgeLoaderSystem _cartridgeLoader = default!; + [Dependency] private readonly StationSystem _station = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnUiReady); + SubscribeLocalEvent(OnLogisticsStatsUpdated); + SubscribeLocalEvent(OnMapInit); + } + + private void OnUiReady(Entity ent, ref CartridgeUiReadyEvent args) + { + UpdateUI(ent, args.Loader); + } + + private void OnLogisticsStatsUpdated(LogisticStatsUpdatedEvent args) + { + UpdateAllCartridges(args.Station); + } + + private void OnMapInit(EntityUid uid, MailComponent mail, MapInitEvent args) + { + if (_station.GetOwningStation(uid) is { } station) + UpdateAllCartridges(station); + } + + private void UpdateAllCartridges(EntityUid station) + { + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var comp, out var cartridge)) + { + if (cartridge.LoaderUid is not { } loader || comp.Station != station) + continue; + UpdateUI((uid, comp), loader); + } + } + + private void UpdateUI(Entity ent, EntityUid loader) + { + if (_station.GetOwningStation(loader) is { } station) + ent.Comp.Station = station; + + if (!TryComp(ent.Comp.Station, out var logiStats)) + return; + + // Get station's logistic stats + var unopenedMailCount = GetUnopenedMailCount(ent.Comp.Station); + + // Send logistic stats to cartridge client + var state = new MailMetricUiState(logiStats.Metrics, unopenedMailCount); + _cartridgeLoader.UpdateCartridgeUiState(loader, state); + } + + + private int GetUnopenedMailCount(EntityUid? station) + { + var unopenedMail = 0; + + var query = EntityQueryEnumerator(); + + while (query.MoveNext(out var uid, out var comp)) + { + if (comp.IsLocked && _station.GetOwningStation(uid) == station) + unopenedMail++; + } + + return unopenedMail; + } +} diff --git a/Content.Server/Chapel/SacrificialAltarSystem.cs b/Content.Server/Chapel/SacrificialAltarSystem.cs new file mode 100644 index 00000000000..e7144e1185b --- /dev/null +++ b/Content.Server/Chapel/SacrificialAltarSystem.cs @@ -0,0 +1,129 @@ +using Content.Server.Bible.Components; +using Content.Shared.Abilities.Psionics; +using Content.Shared.Administration.Logs; +using Content.Shared.Body.Components; +using Content.Shared.Body.Systems; +using Content.Shared.Database; +using Content.Shared.Chapel; +using Content.Shared.DoAfter; +using Content.Shared.Humanoid; +using Content.Shared.Mind; +using Content.Shared.Popups; +using Content.Shared.Psionics.Glimmer; +using Robust.Shared.Audio.Systems; +using Robust.Shared.Player; +using Robust.Shared.Prototypes; +using Robust.Shared.Random; + +namespace Content.Server.Chapel; + +public sealed class SacrificialAltarSystem : SharedSacrificialAltarSystem +{ + [Dependency] private readonly GlimmerSystem _glimmer = default!; + [Dependency] private readonly IPrototypeManager _proto = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly SharedBodySystem _body = default!; + [Dependency] private readonly SharedMindSystem _mind = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnDoAfter); + } + + private void OnDoAfter(Entity ent, ref SacrificeDoAfterEvent args) + { + ent.Comp.SacrificeStream = _audio.Stop(ent.Comp.SacrificeStream); + ent.Comp.DoAfter = null; + + if (args.Cancelled || args.Handled || args.Args.Target is not { } target + || !TryComp(target, out var psionic) + || !_mind.TryGetMind(target, out var _, out var _)) + return; + + _adminLogger.Add(LogType.Action, LogImpact.Extreme, $"{ToPrettyString(args.Args.User):player} sacrificed {ToPrettyString(target):target} on {ToPrettyString(ent):altar}"); + + // lower glimmer by a random amount + _glimmer.Glimmer -= (int) (ent.Comp.GlimmerReduction * psionic.CurrentAmplification); + + if (ent.Comp.RewardPool is not null && _random.Prob(ent.Comp.BaseItemChance * psionic.CurrentDampening)) + { + var proto = _proto.Index(_random.Pick(ent.Comp.RewardPool)); + Spawn(proto.ToString(), Transform(ent).Coordinates); + } + // TODO GOLEMS: create a soul crystal and transfer mind into it + + // finally gib the targets old body + if (TryComp(target, out var body)) + _body.GibBody(target, gibOrgans: false, body, launchGibs: true); + else + QueueDel(target); + } + + protected override void AttemptSacrifice(Entity ent, EntityUid user, EntityUid target) + { + if (ent.Comp.DoAfter != null) + return; + + // can't sacrifice yourself + if (user == target) + { + _popup.PopupEntity(Loc.GetString("altar-failure-reason-self"), ent, user, PopupType.SmallCaution); + return; + } + + // you need to be psionic OR bible user + if (!HasComp(user) && !HasComp(user)) + { + _popup.PopupEntity(Loc.GetString("altar-failure-reason-user"), ent, user, PopupType.SmallCaution); + return; + } + + // and no golems or familiars or whatever should be sacrificing + if (!HasComp(user)) + { + _popup.PopupEntity(Loc.GetString("altar-failure-reason-user-humanoid"), ent, user, PopupType.SmallCaution); + return; + } + + // prevent psichecking SSD people... + // notably there is no check in OnDoAfter so you can't alt f4 to survive being sacrificed + if (!HasComp(target) || _mind.GetMind(target) == null) + { + _popup.PopupEntity(Loc.GetString("altar-failure-reason-target-catatonic", ("target", target)), ent, user, PopupType.SmallCaution); + return; + } + + // TODO: there should be a penalty to the user for psichecking like this + if (!HasComp(target)) + { + _popup.PopupEntity(Loc.GetString("altar-failure-reason-target", ("target", target)), ent, user, PopupType.SmallCaution); + return; + } + + if (!HasComp(target)) + { + _popup.PopupEntity(Loc.GetString("altar-failure-reason-target-humanoid", ("target", target)), ent, user, PopupType.SmallCaution); + return; + } + + _popup.PopupEntity(Loc.GetString("altar-sacrifice-popup", ("user", user), ("target", target)), ent, PopupType.LargeCaution); + + ent.Comp.SacrificeStream = _audio.PlayPvs(ent.Comp.SacrificeSound, ent)?.Entity; + + var ev = new SacrificeDoAfterEvent(); + var args = new DoAfterArgs(EntityManager, user, ent.Comp.SacrificeTime, ev, target: target, eventTarget: ent) + { + BreakOnDamage = true, + BreakOnUserMove = true, + BreakOnTargetMove = true, + BreakOnWeightlessMove = true, + NeedHand = true + }; + DoAfter.TryStartDoAfter(args, out ent.Comp.DoAfter); + } +} diff --git a/Content.Server/Chat/Commands/AdminChatCommand.cs b/Content.Server/Chat/Commands/AdminChatCommand.cs index 979051e9d3e..1a7ae050b66 100644 --- a/Content.Server/Chat/Commands/AdminChatCommand.cs +++ b/Content.Server/Chat/Commands/AdminChatCommand.cs @@ -5,7 +5,7 @@ namespace Content.Server.Chat.Commands { - [AdminCommand(AdminFlags.Admin)] + [AdminCommand(AdminFlags.Adminchat)] internal sealed class AdminChatCommand : IConsoleCommand { public string Command => "asay"; diff --git a/Content.Server/Chat/EmpathyChatSystem.cs b/Content.Server/Chat/EmpathyChatSystem.cs new file mode 100644 index 00000000000..b46bbdc34e9 --- /dev/null +++ b/Content.Server/Chat/EmpathyChatSystem.cs @@ -0,0 +1,83 @@ +using System.Linq; +using Robust.Shared.Utility; +using Content.Server.Chat.Managers; +using Content.Server.Language; +using Content.Server.Chat.Systems; +using Content.Server.Administration.Managers; +using Robust.Shared.Network; +using Robust.Shared.Player; +using Content.Shared.Chat; +using Content.Shared.Language; +using Robust.Shared.Prototypes; +using Content.Shared.Language.Components; + +namespace Content.Server.Chat; + +public sealed partial class EmpathyChatSystem : EntitySystem +{ + [Dependency] private readonly IChatManager _chatManager = default!; + [Dependency] private readonly LanguageSystem _language = default!; + [Dependency] private readonly IAdminManager _adminManager = default!; + [Dependency] private readonly IPrototypeManager _prototype = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnSpeak); + } + + private void OnSpeak(EntityUid uid, LanguageSpeakerComponent component, EntitySpokeEvent args) + { + if (args.Source != uid + || !args.Language.SpeechOverride.EmpathySpeech + || args.IsWhisper) + return; + + SendEmpathyChat(args.Source, args.Message, false); + } + + /// + /// Send a Message in the Shadowkin Empathy Chat. + /// + /// The entity making the message + /// The contents of the message + /// Set the ChatTransmitRange + public void SendEmpathyChat(EntityUid source, string message, bool hideChat) + { + var clients = GetEmpathChatClients(); + string wrappedMessage; + + wrappedMessage = Loc.GetString("chat-manager-send-empathy-chat-wrap-message", + ("source", source), + ("message", FormattedMessage.EscapeText(message))); + + _chatManager.ChatMessageToMany(ChatChannel.Telepathic, message, wrappedMessage, source, hideChat, true, clients.ToList(), Color.FromHex("#be3cc5")); + } + + private IEnumerable GetEmpathChatClients() + { + return Filter.Empty() + .AddWhereAttachedEntity(entity => + CanHearEmpathy(entity)) + .Recipients + .Union(_adminManager.ActiveAdmins) + .Select(p => p.Channel); + } + + /// + /// Check if an entity can hear Empathy. + /// (Admins will always be able to hear Empathy) + /// + /// The entity to check + public bool CanHearEmpathy(EntityUid entity) + { + var understood = _language.GetUnderstoodLanguages(entity); + for (int i = 0; i < understood.Count; i++) + { + var language = _prototype.Index(understood[i]); + if (language.SpeechOverride.EmpathySpeech) + return true; + } + return false; + } +} \ No newline at end of file diff --git a/Content.Server/Chat/Systems/ChatSystem.Emote.cs b/Content.Server/Chat/Systems/ChatSystem.Emote.cs index c18b945ec6f..1aeed69e030 100644 --- a/Content.Server/Chat/Systems/ChatSystem.Emote.cs +++ b/Content.Server/Chat/Systems/ChatSystem.Emote.cs @@ -2,6 +2,7 @@ using System.Linq; using Content.Shared.Chat; using Content.Shared.Chat.Prototypes; +using Content.Shared.Speech; using Robust.Shared.Prototypes; using Robust.Shared.Random; @@ -50,7 +51,7 @@ private void CacheEmotes() /// The id of emote prototype. Should has valid /// Whether or not this message should appear in the adminlog window /// Conceptual range of transmission, if it shows in the chat window, if it shows to far-away ghosts or ghosts at all... - /// The name to use for the speaking entity. Usually this should just be modified via . If this is set, the event will not get raised. + /// The name to use for the speaking entity. Usually this should just be modified via . If this is set, the event will not get raised. public void TryEmoteWithChat( EntityUid source, string emoteId, @@ -73,7 +74,7 @@ public void TryEmoteWithChat( /// Whether or not this message should appear in the adminlog window /// Whether or not this message should appear in the chat window /// Conceptual range of transmission, if it shows in the chat window, if it shows to far-away ghosts or ghosts at all... - /// The name to use for the speaking entity. Usually this should just be modified via . If this is set, the event will not get raised. + /// The name to use for the speaking entity. Usually this should just be modified via . If this is set, the event will not get raised. public void TryEmoteWithChat( EntityUid source, EmotePrototype emote, @@ -83,6 +84,16 @@ public void TryEmoteWithChat( bool ignoreActionBlocker = false ) { + if (!(emote.Whitelist?.IsValid(source, EntityManager) ?? true)) + return; + if (emote.Blacklist?.IsValid(source, EntityManager) ?? false) + return; + + if (!emote.Available && + TryComp(source, out var speech) && + !speech.AllowedEmotes.Contains(emote.ID)) + return; + // check if proto has valid message for chat if (emote.ChatMessages.Count != 0) { diff --git a/Content.Server/Chat/Systems/ChatSystem.cs b/Content.Server/Chat/Systems/ChatSystem.cs index 68508b08f53..fc50dfae570 100644 --- a/Content.Server/Chat/Systems/ChatSystem.cs +++ b/Content.Server/Chat/Systems/ChatSystem.cs @@ -8,7 +8,6 @@ using Content.Server.Language; using Content.Server.Speech.Components; using Content.Server.Speech.EntitySystems; -using Content.Server.Chat; using Content.Server.Station.Components; using Content.Server.Station.Systems; using Content.Shared.ActionBlocker; @@ -147,7 +146,7 @@ private void OnGameChange(GameRunLevelChangedEvent ev) /// Whether or not this message should appear in the adminlog window /// /// The player doing the speaking - /// The name to use for the speaking entity. Usually this should just be modified via . If this is set, the event will not get raised. + /// The name to use for the speaking entity. Usually this should just be modified via . If this is set, the event will not get raised. public void TrySendInGameICMessage( EntityUid source, string message, @@ -170,7 +169,7 @@ public void TrySendInGameICMessage( /// Conceptual range of transmission, if it shows in the chat window, if it shows to far-away ghosts or ghosts at all... /// /// The player doing the speaking - /// The name to use for the speaking entity. Usually this should just be modified via . If this is set, the event will not get raised. + /// The name to use for the speaking entity. Usually this should just be modified via . If this is set, the event will not get raised. /// If set to true, action blocker will not be considered for whether an entity can send this message. public void TrySendInGameICMessage( EntityUid source, @@ -421,11 +420,11 @@ private void SendEntitySpeak( } else { - var nameEv = new TransformSpeakerNameEvent(source, Name(source)); + var nameEv = new TransformSpeakerSpeechEvent(source, Name(source)); RaiseLocalEvent(source, nameEv); - name = nameEv.Name; + name = nameEv.VoiceName ?? Name(source); // Check for a speech verb override - if (nameEv.SpeechVerb != null && _prototypeManager.TryIndex(nameEv.SpeechVerb, out var proto)) + if (nameEv.SpeechVerb != null && _prototypeManager.TryIndex(nameEv.SpeechVerb, out var proto)) speech = proto; } @@ -493,9 +492,9 @@ private void SendEntityWhisper( } else { - var nameEv = new TransformSpeakerNameEvent(source, Name(source)); + var nameEv = new TransformSpeakerSpeechEvent(source, Name(source)); RaiseLocalEvent(source, nameEv); - name = nameEv.Name; + name = nameEv.VoiceName ?? Name(source); } name = FormattedMessage.EscapeText(name); @@ -881,6 +880,9 @@ public string WrapMessage(LocId wrapId, InGameICChatType chatType, EntityUid sou var color = DefaultSpeakColor; if (language.SpeechOverride.Color is { } colorOverride) color = Color.InterpolateBetween(color, colorOverride, colorOverride.A); + var languageDisplay = language.IsVisibleLanguage + ? $"{language.ChatName} | " + : ""; return Loc.GetString(wrapId, ("color", color), @@ -888,7 +890,8 @@ public string WrapMessage(LocId wrapId, InGameICChatType chatType, EntityUid sou ("verb", Loc.GetString(verbId)), ("fontType", language.SpeechOverride.FontId ?? speech.FontId), ("fontSize", language.SpeechOverride.FontSize ?? speech.FontSize), - ("message", message)); + ("message", message), + ("language", languageDisplay)); } /// @@ -991,20 +994,6 @@ public record ExpandICChatRecipientstEvent(EntityUid Source, float VoiceRange, D { } -public sealed class TransformSpeakerNameEvent : EntityEventArgs -{ - public EntityUid Sender; - public string Name; - public string? SpeechVerb; - - public TransformSpeakerNameEvent(EntityUid sender, string name, string? speechVerb = null) - { - Sender = sender; - Name = name; - SpeechVerb = speechVerb; - } -} - /// /// Raised broadcast in order to transform speech.transmit /// diff --git a/Content.Server/Chat/V2/Commands/DeleteChatMessageCommand.cs b/Content.Server/Chat/V2/Commands/DeleteChatMessageCommand.cs new file mode 100644 index 00000000000..1f9203d299f --- /dev/null +++ b/Content.Server/Chat/V2/Commands/DeleteChatMessageCommand.cs @@ -0,0 +1,36 @@ +using System.Diagnostics; +using Content.Server.Administration; +using Content.Server.Chat.V2.Repository; +using Content.Shared.Administration; +using Robust.Shared.Toolshed; +using Robust.Shared.Toolshed.Errors; +using Robust.Shared.Utility; + +namespace Content.Server.Chat.V2.Commands; + +[ToolshedCommand, AdminCommand(AdminFlags.Admin)] +public sealed class DeleteChatMessageCommand : ToolshedCommand +{ + [Dependency] private readonly IEntitySystemManager _manager = default!; + + [CommandImplementation("id")] + public void DeleteChatMessage([CommandInvocationContext] IInvocationContext ctx, [CommandArgument] uint messageId) + { + if (!_manager.GetEntitySystem().Delete(messageId)) + { + ctx.ReportError(new MessageIdDoesNotExist()); + } + } +} + +public record struct MessageIdDoesNotExist() : IConError +{ + public FormattedMessage DescribeInner() + { + return FormattedMessage.FromUnformatted(Loc.GetString("command-error-deletechatmessage-id-notexist")); + } + + public string? Expression { get; set; } + public Vector2i? IssueSpan { get; set; } + public StackTrace? Trace { get; set; } +} diff --git a/Content.Server/Chat/V2/Commands/NukeChatMessagesCommand.cs b/Content.Server/Chat/V2/Commands/NukeChatMessagesCommand.cs new file mode 100644 index 00000000000..3d8b69dd765 --- /dev/null +++ b/Content.Server/Chat/V2/Commands/NukeChatMessagesCommand.cs @@ -0,0 +1,41 @@ +using System.Diagnostics; +using Content.Server.Administration; +using Content.Server.Chat.V2.Repository; +using Content.Shared.Administration; +using Robust.Shared.Toolshed; +using Robust.Shared.Toolshed.Errors; +using Robust.Shared.Utility; + +namespace Content.Server.Chat.V2.Commands; + +[ToolshedCommand, AdminCommand(AdminFlags.Admin)] +public sealed class NukeChatMessagesCommand : ToolshedCommand +{ + [Dependency] private readonly IEntitySystemManager _manager = default!; + + [CommandImplementation("usernames")] + public void Command([CommandInvocationContext] IInvocationContext ctx, [CommandArgument] string usernamesCsv) + { + var usernames = usernamesCsv.Split(','); + + foreach (var username in usernames) + { + if (!_manager.GetEntitySystem().NukeForUsername(username, out var reason)) + { + ctx.ReportError(new NukeMessagesForUsernameError(reason)); + } + } + } +} + +public record struct NukeMessagesForUsernameError(string Reason) : IConError +{ + public FormattedMessage DescribeInner() + { + return FormattedMessage.FromUnformatted(Reason); + } + + public string? Expression { get; set; } + public Vector2i? IssueSpan { get; set; } + public StackTrace? Trace { get; set; } +} diff --git a/Content.Server/Chat/V2/Messages.cs b/Content.Server/Chat/V2/Messages.cs new file mode 100644 index 00000000000..31a563cbebf --- /dev/null +++ b/Content.Server/Chat/V2/Messages.cs @@ -0,0 +1,94 @@ +using Content.Shared.Chat.Prototypes; +using Content.Shared.Chat.V2; +using Content.Shared.Radio; + +namespace Content.Server.Chat.V2; + +/// +/// Raised locally when a comms announcement is made. +/// +public sealed class CommsAnnouncementCreatedEvent(EntityUid sender, EntityUid console, string message) : IChatEvent +{ + public uint Id { get; set; } + public EntityUid Sender { get; set; } = sender; + public string Message { get; set; } = message; + public MessageType Type => MessageType.Announcement; + public EntityUid Console = console; +} + +/// +/// Raised locally when a character speaks in Dead Chat. +/// +public sealed class DeadChatCreatedEvent(EntityUid speaker, string message, bool isAdmin) : IChatEvent +{ + public uint Id { get; set; } + public EntityUid Sender { get; set; } = speaker; + public string Message { get; set; } = message; + public MessageType Type => MessageType.DeadChat; + public bool IsAdmin = isAdmin; +} + +/// +/// Raised locally when a character emotes. +/// +public sealed class EmoteCreatedEvent(EntityUid sender, string message, float range) : IChatEvent +{ + public uint Id { get; set; } + public EntityUid Sender { get; set; } = sender; + public string Message { get; set; } = message; + public MessageType Type => MessageType.Emote; + public float Range = range; +} + +/// +/// Raised locally when a character talks in local. +/// +public sealed class LocalChatCreatedEvent(EntityUid speaker, string message, float range) : IChatEvent +{ + public uint Id { get; set; } + public EntityUid Sender { get; set; } = speaker; + public string Message { get; set; } = message; + public MessageType Type => MessageType.Local; + public float Range = range; +} + +/// +/// Raised locally when a character speaks in LOOC. +/// +public sealed class LoocCreatedEvent(EntityUid speaker, string message) : IChatEvent +{ + public uint Id { get; set; } + public EntityUid Sender { get; set; } = speaker; + public string Message { get; set; } = message; + public MessageType Type => MessageType.Looc; +} + +/// +/// Raised locally when a character speaks on the radio. +/// +public sealed class RadioCreatedEvent( + EntityUid speaker, + string message, + RadioChannelPrototype channel) + : IChatEvent +{ + public uint Id { get; set; } + public EntityUid Sender { get; set; } = speaker; + public string Message { get; set; } = message; + public RadioChannelPrototype Channel = channel; + public MessageType Type => MessageType.Radio; +} + +/// +/// Raised locally when a character whispers. +/// +public sealed class WhisperCreatedEvent(EntityUid speaker, string message, float minRange, float maxRange) : IChatEvent +{ + public uint Id { get; set; } + public EntityUid Sender { get; set; } = speaker; + public string Message { get; set; } = message; + public MessageType Type => MessageType.Whisper; + public float MinRange = minRange; + public float MaxRange = maxRange; +} + diff --git a/Content.Server/Chat/V2/Repository/ChatRepository.cs b/Content.Server/Chat/V2/Repository/ChatRepository.cs new file mode 100644 index 00000000000..06de37128f5 --- /dev/null +++ b/Content.Server/Chat/V2/Repository/ChatRepository.cs @@ -0,0 +1,196 @@ +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using System.Runtime.InteropServices; +using Content.Shared.Chat.V2; +using Content.Shared.Chat.V2.Repository; +using Robust.Server.Player; +using Robust.Shared.Network; +using Robust.Shared.Replays; + +namespace Content.Server.Chat.V2.Repository; + +/// +/// Stores , gives them UIDs, and issues . +/// Allows for deletion of messages. +/// +public sealed class ChatRepositorySystem : EntitySystem +{ + [Dependency] private readonly IReplayRecordingManager _replay = default!; + [Dependency] private readonly IPlayerManager _player = default!; + + // Clocks should start at 1, as 0 indicates "clock not set" or "clock forgotten to be set by bad programmer". + private uint _nextMessageId = 1; + private Dictionary _messages = new(); + private Dictionary> _playerMessages = new(); + + public override void Initialize() + { + Refresh(); + + _replay.RecordingFinished += _ => + { + // TODO: resolve https://github.com/space-wizards/space-station-14/issues/25485 so we can dump the chat to disc. + Refresh(); + }; + } + + /// + /// Adds an to the repo and raises it with a UID for consumption elsewhere. + /// + /// The event to store and raise + /// If storing and raising succeeded. + public bool Add(IChatEvent ev) + { + if (!_player.TryGetSessionByEntity(ev.Sender, out var session)) + { + return false; + } + + var messageId = _nextMessageId; + + _nextMessageId++; + + ev.Id = messageId; + + var storedEv = new ChatRecord + { + UserName = session.Name, + UserId = session.UserId, + EntityName = Name(ev.Sender), + StoredEvent = ev + }; + + _messages[messageId] = storedEv; + + CollectionsMarshal.GetValueRefOrAddDefault(_playerMessages, storedEv.UserId, out _)?.Add(messageId); + + RaiseLocalEvent(ev.Sender, new MessageCreatedEvent(ev), true); + + return true; + } + + /// + /// Returns the event associated with a UID, if it exists. + /// + /// The UID of a event. + /// The event, if it exists. + public IChatEvent? GetEventFor(uint id) + { + return _messages.TryGetValue(id, out var record) ? record.StoredEvent : null; + } + + /// + /// Edits a specific message and issues a that says this happened both locally and + /// on the network. Note that this doesn't replay the message (yet), so translators and mutators won't act on it. + /// + /// The ID to edit + /// The new message to send + /// If patching did anything did anything + /// Should be used for admining and admemeing only. + public bool Patch(uint id, string message) + { + if (!_messages.TryGetValue(id, out var ev)) + { + return false; + } + + ev.StoredEvent.Message = message; + + RaiseLocalEvent(new MessagePatchedEvent(id, message)); + + return true; + } + + /// + /// Deletes a message from the repository and issues a that says this has happened + /// both locally and on the network. + /// + /// The ID to delete + /// If deletion did anything + /// Should only be used for adminning + public bool Delete(uint id) + { + if (!_messages.TryGetValue(id, out var ev)) + { + return false; + } + + _messages.Remove(id); + + if (_playerMessages.TryGetValue(ev.UserId, out var set)) + { + set.Remove(id); + } + + RaiseLocalEvent(new MessageDeletedEvent(id)); + + return true; + } + + /// + /// Nukes a user's entire chat history from the repo and issues a saying this has + /// happened. + /// + /// The user ID to nuke. + /// Why nuking failed, if it did. + /// If nuking did anything. + /// Note that this could be a very large event, as we send every single event ID over the wire. + /// By necessity we can't leak the player-source of chat messages (or if they even have the same origin) because of + /// client modders who could use that information to cheat/metagrudge/etc >:( + public bool NukeForUsername(string userName, [NotNullWhen(false)] out string? reason) + { + if (!_player.TryGetUserId(userName, out var userId)) + { + reason = Loc.GetString("command-error-nukechatmessages-usernames-usernamenotexist", ("username", userName)); + + return false; + } + + return NukeForUserId(userId, out reason); + } + + /// + /// Nukes a user's entire chat history from the repo and issues a saying this has + /// happened. + /// + /// The user ID to nuke. + /// Why nuking failed, if it did. + /// If nuking did anything. + /// Note that this could be a very large event, as we send every single event ID over the wire. + /// By necessity we can't leak the player-source of chat messages (or if they even have the same origin) because of + /// client modders who could use that information to cheat/metagrudge/etc >:( + public bool NukeForUserId(NetUserId userId, [NotNullWhen(false)] out string? reason) + { + if (!_playerMessages.TryGetValue(userId, out var dict)) + { + reason = Loc.GetString("command-error-nukechatmessages-usernames-usernamenomessages", ("userId", userId.UserId.ToString())); + + return false; + } + + foreach (var id in dict) + { + _messages.Remove(id); + } + + var ev = new MessagesNukedEvent(dict); + + CollectionsMarshal.GetValueRefOrAddDefault(_playerMessages, userId, out _)?.Clear(); + + RaiseLocalEvent(ev); + + reason = null; + + return true; + } + + /// + /// Dumps held chat storage data and refreshes the repo. + /// + public void Refresh() + { + _nextMessageId = 1; + _messages.Clear(); + _playerMessages.Clear(); + } +} diff --git a/Content.Server/Chemistry/Components/ReagentTankComponent.cs b/Content.Server/Chemistry/Components/ReagentTankComponent.cs deleted file mode 100644 index cc0d2657d7d..00000000000 --- a/Content.Server/Chemistry/Components/ReagentTankComponent.cs +++ /dev/null @@ -1,23 +0,0 @@ -using Content.Shared.FixedPoint; - - -namespace Content.Server.Chemistry.Components -{ - [RegisterComponent] - public sealed partial class ReagentTankComponent : Component - { - [DataField("transferAmount")] - [ViewVariables(VVAccess.ReadWrite)] - public FixedPoint2 TransferAmount { get; set; } = FixedPoint2.New(10); - - [DataField("tankType")] - [ViewVariables(VVAccess.ReadWrite)] - public ReagentTankType TankType { get; set; } = ReagentTankType.Unspecified; - } - - public enum ReagentTankType : byte - { - Unspecified, - Fuel - } -} diff --git a/Content.Server/Chemistry/Components/SolutionHeaterComponent.cs b/Content.Server/Chemistry/Components/SolutionHeaterComponent.cs index c1841e022c7..bc1d44e82f1 100644 --- a/Content.Server/Chemistry/Components/SolutionHeaterComponent.cs +++ b/Content.Server/Chemistry/Components/SolutionHeaterComponent.cs @@ -4,8 +4,26 @@ namespace Content.Server.Chemistry.Components; public sealed partial class SolutionHeaterComponent : Component { /// - /// How much heat is added per second to the solution, taking upgrades into account. + /// How much heat is added per second to the solution, with no upgrades. /// - [DataField, ViewVariables(VVAccess.ReadWrite)] + [DataField] + public float BaseHeatPerSecond = 120; + + /// + /// How much heat is added per second to the solution, taking upgrades into account. + /// + [ViewVariables(VVAccess.ReadWrite)] public float HeatPerSecond; + + /// + /// The machine part that affects the heat multiplier. + /// + [DataField] + public string MachinePartHeatMultiplier = "Capacitor"; + + /// + /// How much each upgrade multiplies the heat by. + /// + [DataField] + public float PartRatingHeatMultiplier = 1.5f; } diff --git a/Content.Server/Chemistry/Containers/EntitySystems/SolutionContainerSystem.cs b/Content.Server/Chemistry/Containers/EntitySystems/SolutionContainerSystem.cs index 755312554c2..3d99db1129c 100644 --- a/Content.Server/Chemistry/Containers/EntitySystems/SolutionContainerSystem.cs +++ b/Content.Server/Chemistry/Containers/EntitySystems/SolutionContainerSystem.cs @@ -9,180 +9,37 @@ namespace Content.Server.Chemistry.Containers.EntitySystems; +[Obsolete("This is being depreciated. Use SharedSolutionContainerSystem instead!")] public sealed partial class SolutionContainerSystem : SharedSolutionContainerSystem { - public override void Initialize() - { - base.Initialize(); - - SubscribeLocalEvent(OnMapInit); - SubscribeLocalEvent(OnComponentShutdown); - SubscribeLocalEvent(OnComponentShutdown); - } - - + [Obsolete("This is being depreciated. Use the ensure methods in SharedSolutionContainerSystem instead!")] public Solution EnsureSolution(Entity entity, string name) => EnsureSolution(entity, name, out _); + [Obsolete("This is being depreciated. Use the ensure methods in SharedSolutionContainerSystem instead!")] public Solution EnsureSolution(Entity entity, string name, out bool existed) => EnsureSolution(entity, name, FixedPoint2.Zero, out existed); + [Obsolete("This is being depreciated. Use the ensure methods in SharedSolutionContainerSystem instead!")] public Solution EnsureSolution(Entity entity, string name, FixedPoint2 maxVol, out bool existed) => EnsureSolution(entity, name, maxVol, null, out existed); + [Obsolete("This is being depreciated. Use the ensure methods in SharedSolutionContainerSystem instead!")] public Solution EnsureSolution(Entity entity, string name, FixedPoint2 maxVol, Solution? prototype, out bool existed) { - var (uid, meta) = entity; - if (!Resolve(uid, ref meta)) - throw new InvalidOperationException("Attempted to ensure solution on invalid entity."); - - var manager = EnsureComp(uid); - if (meta.EntityLifeStage >= EntityLifeStage.MapInitialized) - return EnsureSolutionEntity((uid, manager), name, maxVol, prototype, out existed).Comp.Solution; - else - return EnsureSolutionPrototype((uid, manager), name, maxVol, prototype, out existed); - } - - public void EnsureAllSolutions(Entity entity) - { - if (entity.Comp.Solutions is not { } prototypes) - return; - - foreach (var (name, prototype) in prototypes) - { - EnsureSolutionEntity((entity.Owner, entity.Comp), name, prototype.MaxVolume, prototype, out _); - } - - entity.Comp.Solutions = null; - Dirty(entity); - } - - public Entity EnsureSolutionEntity(Entity entity, string name, FixedPoint2 maxVol, Solution? prototype, out bool existed) - { - existed = true; - - var (uid, container) = entity; - - var solutionSlot = ContainerSystem.EnsureContainer(uid, $"solution@{name}", out existed); - if (!Resolve(uid, ref container, logMissing: false)) - { - existed = false; - container = AddComp(uid); - container.Containers.Add(name); - } - else if (!existed) - { - container.Containers.Add(name); - Dirty(uid, container); - } - - var needsInit = false; - SolutionComponent solutionComp; - if (solutionSlot.ContainedEntity is not { } solutionId) - { - prototype ??= new() { MaxVolume = maxVol }; - prototype.Name = name; - (solutionId, solutionComp, _) = SpawnSolutionUninitialized(solutionSlot, name, maxVol, prototype); - existed = false; - needsInit = true; - Dirty(uid, container); - } - else - { - solutionComp = Comp(solutionId); - DebugTools.Assert(TryComp(solutionId, out ContainedSolutionComponent? relation) && relation.Container == uid && relation.ContainerName == name); - DebugTools.Assert(solutionComp.Solution.Name == name); - - var solution = solutionComp.Solution; - solution.MaxVolume = FixedPoint2.Max(solution.MaxVolume, maxVol); - - // Depending on MapInitEvent order some systems can ensure solution empty solutions and conflict with the prototype solutions. - // We want the reagents from the prototype to exist even if something else already created the solution. - if (prototype is { Volume.Value: > 0 }) - solution.AddSolution(prototype, PrototypeManager); - - Dirty(solutionId, solutionComp); - } - - if (needsInit) - EntityManager.InitializeAndStartEntity(solutionId, Transform(solutionId).MapID); - - return (solutionId, solutionComp); - } - - private Solution EnsureSolutionPrototype(Entity entity, string name, FixedPoint2 maxVol, Solution? prototype, out bool existed) - { - existed = true; - - var (uid, container) = entity; - if (!Resolve(uid, ref container, logMissing: false)) - { - container = AddComp(uid); - existed = false; - } - - if (container.Solutions is null) - container.Solutions = new(SolutionContainerManagerComponent.DefaultCapacity); - - if (!container.Solutions.TryGetValue(name, out var solution)) - { - solution = prototype ?? new() { Name = name, MaxVolume = maxVol }; - container.Solutions.Add(name, solution); - existed = false; - } - else - solution.MaxVolume = FixedPoint2.Max(solution.MaxVolume, maxVol); - - Dirty(uid, container); - return solution; + EnsureSolution(entity, name, maxVol, prototype, out existed, out var solution); + return solution!;//solution is only ever null on the client, so we can suppress this } - - private Entity SpawnSolutionUninitialized(ContainerSlot container, string name, FixedPoint2 maxVol, Solution prototype) + [Obsolete("This is being depreciated. Use the ensure methods in SharedSolutionContainerSystem instead!")] + public Entity EnsureSolutionEntity( + Entity entity, + string name, + FixedPoint2 maxVol, + Solution? prototype, + out bool existed) { - var coords = new EntityCoordinates(container.Owner, Vector2.Zero); - var uid = EntityManager.CreateEntityUninitialized(null, coords, null); - - var solution = new SolutionComponent() { Solution = prototype }; - AddComp(uid, solution); - - var relation = new ContainedSolutionComponent() { Container = container.Owner, ContainerName = name }; - AddComp(uid, relation); - - MetaData.SetEntityName(uid, $"solution - {name}"); - ContainerSystem.Insert(uid, container, force: true); - - return (uid, solution, relation); + EnsureSolutionEntity(entity, name, out existed, out var solEnt, maxVol, prototype); + return solEnt!.Value;//solEnt is only ever null on the client, so we can suppress this } - - #region Event Handlers - - private void OnMapInit(Entity entity, ref MapInitEvent args) - { - EnsureAllSolutions(entity); - } - - private void OnComponentShutdown(Entity entity, ref ComponentShutdown args) - { - foreach (var name in entity.Comp.Containers) - { - if (ContainerSystem.TryGetContainer(entity, $"solution@{name}", out var solutionContainer)) - ContainerSystem.ShutdownContainer(solutionContainer); - } - entity.Comp.Containers.Clear(); - } - - private void OnComponentShutdown(Entity entity, ref ComponentShutdown args) - { - if (TryComp(entity.Comp.Container, out SolutionContainerManagerComponent? container)) - { - container.Containers.Remove(entity.Comp.ContainerName); - Dirty(entity.Comp.Container, container); - } - - if (ContainerSystem.TryGetContainer(entity, $"solution@{entity.Comp.ContainerName}", out var solutionContainer)) - ContainerSystem.ShutdownContainer(solutionContainer); - } - - #endregion Event Handlers } diff --git a/Content.Server/Chemistry/EntitySystems/ChemMasterSystem.cs b/Content.Server/Chemistry/EntitySystems/ChemMasterSystem.cs index ab910445749..289db759816 100644 --- a/Content.Server/Chemistry/EntitySystems/ChemMasterSystem.cs +++ b/Content.Server/Chemistry/EntitySystems/ChemMasterSystem.cs @@ -80,7 +80,7 @@ private void UpdateUiState(Entity ent, bool updateLabel = f chemMaster.Mode, BuildInputContainerInfo(inputContainer), BuildOutputContainerInfo(outputContainer), bufferReagents, bufferCurrentVolume, chemMaster.PillType, chemMaster.PillDosageLimit, updateLabel); - _userInterfaceSystem.TrySetUiState(owner, ChemMasterUiKey.Key, state); + _userInterfaceSystem.SetUiState(owner, ChemMasterUiKey.Key, state); } private void OnSetModeMessage(Entity chemMaster, ref ChemMasterSetModeMessage message) @@ -179,7 +179,7 @@ private void DiscardReagents(Entity chemMaster, ReagentId i private void OnCreatePillsMessage(Entity chemMaster, ref ChemMasterCreatePillsMessage message) { - var user = message.Session.AttachedEntity; + var user = message.Actor; var maybeContainer = _itemSlotsSystem.GetItemOrNull(chemMaster, SharedChemMaster.OutputSlotName); if (maybeContainer is not { Valid: true } container || !TryComp(container, out StorageComponent? storage)) @@ -218,18 +218,9 @@ private void OnCreatePillsMessage(Entity chemMaster, ref Ch pill.PillType = chemMaster.Comp.PillType; Dirty(item, pill); - if (user.HasValue) - { - // Log pill creation by a user - _adminLogger.Add(LogType.Action, LogImpact.Low, - $"{ToPrettyString(user.Value):user} printed {ToPrettyString(item):pill} {SolutionContainerSystem.ToPrettyString(itemSolution.Comp.Solution)}"); - } - else - { - // Log pill creation by magic? This should never happen... right? - _adminLogger.Add(LogType.Action, LogImpact.Low, - $"Unknown printed {ToPrettyString(item):pill} {SolutionContainerSystem.ToPrettyString(itemSolution.Comp.Solution)}"); - } + // Log pill creation by a user + _adminLogger.Add(LogType.Action, LogImpact.Low, + $"{ToPrettyString(user):user} printed {ToPrettyString(item):pill} {SharedSolutionContainerSystem.ToPrettyString(itemSolution.Comp.Solution)}"); } UpdateUiState(chemMaster); @@ -238,7 +229,7 @@ private void OnCreatePillsMessage(Entity chemMaster, ref Ch private void OnOutputToBottleMessage(Entity chemMaster, ref ChemMasterOutputToBottleMessage message) { - var user = message.Session.AttachedEntity; + var user = message.Actor; var maybeContainer = _itemSlotsSystem.GetItemOrNull(chemMaster, SharedChemMaster.OutputSlotName); if (maybeContainer is not { Valid: true } container || !_solutionContainerSystem.TryGetSolution(container, SharedChemMaster.BottleSolutionName, out var soln, out var solution)) @@ -260,18 +251,9 @@ private void OnOutputToBottleMessage(Entity chemMaster, ref _labelSystem.Label(container, message.Label); _solutionContainerSystem.TryAddSolution(soln.Value, withdrawal); - if (user.HasValue) - { - // Log bottle creation by a user - _adminLogger.Add(LogType.Action, LogImpact.Low, - $"{ToPrettyString(user.Value):user} bottled {ToPrettyString(container):bottle} {SolutionContainerSystem.ToPrettyString(solution)}"); - } - else - { - // Log bottle creation by magic? This should never happen... right? - _adminLogger.Add(LogType.Action, LogImpact.Low, - $"Unknown bottled {ToPrettyString(container):bottle} {SolutionContainerSystem.ToPrettyString(solution)}"); - } + // Log bottle creation by a user + _adminLogger.Add(LogType.Action, LogImpact.Low, + $"{ToPrettyString(user):user} bottled {ToPrettyString(container):bottle} {SharedSolutionContainerSystem.ToPrettyString(solution)}"); UpdateUiState(chemMaster); ClickSound(chemMaster); diff --git a/Content.Server/Chemistry/EntitySystems/HypospraySystem.cs b/Content.Server/Chemistry/EntitySystems/HypospraySystem.cs index dfbe45c035b..56cc0f96709 100644 --- a/Content.Server/Chemistry/EntitySystems/HypospraySystem.cs +++ b/Content.Server/Chemistry/EntitySystems/HypospraySystem.cs @@ -25,7 +25,6 @@ public sealed class HypospraySystem : SharedHypospraySystem { [Dependency] private readonly AudioSystem _audio = default!; [Dependency] private readonly InteractionSystem _interaction = default!; - [Dependency] private readonly SolutionContainerSystem _solutionContainerSystem = default!; public override void Initialize() { diff --git a/Content.Server/Chemistry/EntitySystems/InjectorSystem.cs b/Content.Server/Chemistry/EntitySystems/InjectorSystem.cs index a6d13b2f7cd..9dd1d429b7c 100644 --- a/Content.Server/Chemistry/EntitySystems/InjectorSystem.cs +++ b/Content.Server/Chemistry/EntitySystems/InjectorSystem.cs @@ -124,7 +124,7 @@ private void InjectDoAfter(Entity injector, EntityUid target, Popup.PopupEntity(Loc.GetString("injector-component-injecting-user"), target, user); } - if (!SolutionContainers.TryGetSolution(injector.Owner, InjectorComponent.SolutionName, out _, out var solution)) + if (!SolutionContainers.TryGetSolution(injector.Owner, injector.Comp.SolutionName, out _, out var solution)) return; var actualDelay = MathHelper.Max(injector.Comp.Delay, TimeSpan.FromSeconds(1)); @@ -252,7 +252,7 @@ private void TryInjectIntoBloodstream(Entity injector, Entity private void TryInject(Entity injector, EntityUid targetEntity, Entity targetSolution, EntityUid user, bool asRefill) { - if (!SolutionContainers.TryGetSolution(injector.Owner, InjectorComponent.SolutionName, out var soln, + if (!SolutionContainers.TryGetSolution(injector.Owner, injector.Comp.SolutionName, out var soln, out var solution) || solution.Volume == 0) return; @@ -294,7 +294,7 @@ private void TryInject(Entity injector, EntityUid targetEntit private void AfterInject(Entity injector, EntityUid target) { // Automatically set syringe to draw after completely draining it. - if (SolutionContainers.TryGetSolution(injector.Owner, InjectorComponent.SolutionName, out _, + if (SolutionContainers.TryGetSolution(injector.Owner, injector.Comp.SolutionName, out _, out var solution) && solution.Volume == 0) { SetMode(injector, InjectorToggleMode.Draw); @@ -308,7 +308,7 @@ private void AfterInject(Entity injector, EntityUid target) private void AfterDraw(Entity injector, EntityUid target) { // Automatically set syringe to inject after completely filling it. - if (SolutionContainers.TryGetSolution(injector.Owner, InjectorComponent.SolutionName, out _, + if (SolutionContainers.TryGetSolution(injector.Owner, injector.Comp.SolutionName, out _, out var solution) && solution.AvailableVolume == 0) { SetMode(injector, InjectorToggleMode.Inject); @@ -322,7 +322,7 @@ private void AfterDraw(Entity injector, EntityUid target) private void TryDraw(Entity injector, Entity target, Entity targetSolution, EntityUid user) { - if (!SolutionContainers.TryGetSolution(injector.Owner, InjectorComponent.SolutionName, out var soln, + if (!SolutionContainers.TryGetSolution(injector.Owner, injector.Comp.SolutionName, out var soln, out var solution) || solution.AvailableVolume == 0) { return; diff --git a/Content.Server/Chemistry/EntitySystems/ReactionMixerSystem.cs b/Content.Server/Chemistry/EntitySystems/ReactionMixerSystem.cs index 032374d4a55..d5f7655f884 100644 --- a/Content.Server/Chemistry/EntitySystems/ReactionMixerSystem.cs +++ b/Content.Server/Chemistry/EntitySystems/ReactionMixerSystem.cs @@ -30,7 +30,7 @@ private void OnAfterInteract(Entity entity, ref AfterInt return; } - if (!_solutionContainers.TryGetMixableSolution(args.Target.Value, out var solution)) + if (!_solutionContainers.TryGetMixableSolution(args.Target.Value, out var solution, out _)) return; _popup.PopupEntity(Loc.GetString(entity.Comp.MixMessage, ("mixed", Identity.Entity(args.Target.Value, EntityManager)), ("mixer", Identity.Entity(entity.Owner, EntityManager))), args.User, args.User); diff --git a/Content.Server/Chemistry/EntitySystems/ReagentDispenserSystem.cs b/Content.Server/Chemistry/EntitySystems/ReagentDispenserSystem.cs index d6433da56a0..c48bf086d39 100644 --- a/Content.Server/Chemistry/EntitySystems/ReagentDispenserSystem.cs +++ b/Content.Server/Chemistry/EntitySystems/ReagentDispenserSystem.cs @@ -62,7 +62,7 @@ private void UpdateUiState(Entity reagentDispenser) var inventory = GetInventory(reagentDispenser); var state = new ReagentDispenserBoundUserInterfaceState(outputContainerInfo, GetNetEntity(outputContainer), inventory, reagentDispenser.Comp.DispenseAmount); - _userInterfaceSystem.TrySetUiState(reagentDispenser, ReagentDispenserUiKey.Key, state); + _userInterfaceSystem.SetUiState(reagentDispenser.Owner, ReagentDispenserUiKey.Key, state); } private ContainerInfo? BuildOutputContainerInfo(EntityUid? container) @@ -81,9 +81,9 @@ private void UpdateUiState(Entity reagentDispenser) return null; } - private List>> GetInventory(Entity reagentDispenser) + private List GetInventory(Entity reagentDispenser) { - var inventory = new List>>(); + var inventory = new List(); for (var i = 0; i < reagentDispenser.Comp.NumSlots; i++) { @@ -99,15 +99,17 @@ private List>> GetInventory(En else continue; - // Add volume remaining label + // Get volume remaining and color of solution FixedPoint2 quantity = 0f; + var reagentColor = Color.White; if (storedContainer != null && _solutionContainerSystem.TryGetDrainableSolution(storedContainer.Value, out _, out var sol)) { quantity = sol.Volume; + reagentColor = sol.GetColor(_prototypeManager); } var storedAmount = Loc.GetString("reagent-dispenser-window-quantity-label-text", ("quantity", quantity)); - inventory.Add(new KeyValuePair>(storageSlotId, new KeyValuePair(reagentLabel, storedAmount))); + inventory.Add(new ReagentInventoryItem(storageSlotId, reagentLabel, storedAmount, reagentColor)); } return inventory; diff --git a/Content.Server/Chemistry/EntitySystems/SolutionHeaterSystem.cs b/Content.Server/Chemistry/EntitySystems/SolutionHeaterSystem.cs index 6e6373e10bf..1ef589ab5cb 100644 --- a/Content.Server/Chemistry/EntitySystems/SolutionHeaterSystem.cs +++ b/Content.Server/Chemistry/EntitySystems/SolutionHeaterSystem.cs @@ -1,5 +1,6 @@ using Content.Server.Chemistry.Components; using Content.Server.Chemistry.Containers.EntitySystems; +using Content.Server.Construction; using Content.Server.Power.Components; using Content.Server.Power.EntitySystems; using Content.Shared.Chemistry; @@ -20,6 +21,8 @@ public override void Initialize() base.Initialize(); SubscribeLocalEvent(OnPowerChanged); + SubscribeLocalEvent(OnRefreshParts); + SubscribeLocalEvent(OnUpgradeExamine); SubscribeLocalEvent(OnItemPlaced); SubscribeLocalEvent(OnItemRemoved); } @@ -61,6 +64,18 @@ private void OnPowerChanged(Entity entity, ref PowerCha } } + private void OnRefreshParts(Entity entity, ref RefreshPartsEvent args) + { + var heatRating = args.PartRatings[entity.Comp.MachinePartHeatMultiplier] - 1; + + entity.Comp.HeatPerSecond = entity.Comp.BaseHeatPerSecond * MathF.Pow(entity.Comp.PartRatingHeatMultiplier, heatRating); + } + + private void OnUpgradeExamine(Entity entity, ref UpgradeExamineEvent args) + { + args.AddPercentageUpgrade("solution-heater-upgrade-heat", entity.Comp.HeatPerSecond / entity.Comp.BaseHeatPerSecond); + } + private void OnItemPlaced(Entity entity, ref ItemPlacedEvent args) { TryTurnOn(entity); diff --git a/Content.Server/Chemistry/EntitySystems/TransformableContainerSystem.cs b/Content.Server/Chemistry/EntitySystems/TransformableContainerSystem.cs index 94a3fe21861..c375d97b8c3 100644 --- a/Content.Server/Chemistry/EntitySystems/TransformableContainerSystem.cs +++ b/Content.Server/Chemistry/EntitySystems/TransformableContainerSystem.cs @@ -20,7 +20,7 @@ public override void Initialize() SubscribeLocalEvent(OnSolutionChange); } - private void OnMapInit(Entity entity, ref MapInitEvent args) + private void OnMapInit(Entity entity, ref MapInitEvent args) { var meta = MetaData(entity.Owner); if (string.IsNullOrEmpty(entity.Comp.InitialName)) diff --git a/Content.Server/Chemistry/ReagentEffectConditions/OrganType.cs b/Content.Server/Chemistry/ReagentEffectConditions/OrganType.cs index 3b7bffb9cff..4ae13b6a6e4 100644 --- a/Content.Server/Chemistry/ReagentEffectConditions/OrganType.cs +++ b/Content.Server/Chemistry/ReagentEffectConditions/OrganType.cs @@ -1,4 +1,4 @@ -using Content.Server.Body.Components; +using Content.Server.Body.Components; using Content.Shared.Body.Prototypes; using Content.Shared.Chemistry.Reagent; using Robust.Shared.Prototypes; @@ -35,7 +35,7 @@ public override bool Condition(ReagentEffectArgs args) public override string GuidebookExplanation(IPrototypeManager prototype) { return Loc.GetString("reagent-effect-condition-guidebook-organ-type", - ("name", prototype.Index(Type).Name), + ("name", prototype.Index(Type).LocalizedName), ("shouldhave", ShouldHave)); } } diff --git a/Content.Server/Chemistry/ReagentEffectConditions/ReagentThreshold.cs b/Content.Server/Chemistry/ReagentEffectConditions/ReagentThreshold.cs index 50be89581fb..061af2b3aef 100644 --- a/Content.Server/Chemistry/ReagentEffectConditions/ReagentThreshold.cs +++ b/Content.Server/Chemistry/ReagentEffectConditions/ReagentThreshold.cs @@ -1,4 +1,4 @@ -using Content.Shared.Chemistry.Reagent; +using Content.Shared.Chemistry.Reagent; using Content.Shared.FixedPoint; using Robust.Shared.Prototypes; @@ -43,7 +43,7 @@ public override string GuidebookExplanation(IPrototypeManager prototype) prototype.TryIndex(Reagent, out reagentProto); return Loc.GetString("reagent-effect-condition-guidebook-reagent-threshold", - ("reagent", reagentProto?.LocalizedName ?? "this reagent"), + ("reagent", reagentProto?.LocalizedName ?? Loc.GetString("reagent-effect-condition-guidebook-this-reagent")), ("max", Max == FixedPoint2.MaxValue ? (float) int.MaxValue : Max.Float()), ("min", Min.Float())); } diff --git a/Content.Server/Chemistry/ReagentEffectConditions/TotalHunger.cs b/Content.Server/Chemistry/ReagentEffectConditions/TotalHunger.cs new file mode 100644 index 00000000000..1dd12e632a7 --- /dev/null +++ b/Content.Server/Chemistry/ReagentEffectConditions/TotalHunger.cs @@ -0,0 +1,35 @@ +using Content.Shared.Chemistry.Reagent; +using Content.Shared.Nutrition.Components; +using Content.Shared.FixedPoint; +using Robust.Shared.Prototypes; + +namespace Content.Server.Chemistry.ReagentEffectConditions +{ + public sealed partial class Hunger : ReagentEffectCondition + { + [DataField] + public float Max = float.PositiveInfinity; + + [DataField] + public float Min = 0; + + public override bool Condition(ReagentEffectArgs args) + { + if (args.EntityManager.TryGetComponent(args.SolutionEntity, out HungerComponent? hunger)) + { + var total = hunger.CurrentHunger; + if (total > Min && total < Max) + return true; + } + + return false; + } + + public override string GuidebookExplanation(IPrototypeManager prototype) + { + return Loc.GetString("reagent-effect-condition-guidebook-total-hunger", + ("max", float.IsPositiveInfinity(Max) ? (float) int.MaxValue : Max), + ("min", Min)); + } + } +} diff --git a/Content.Server/Chemistry/ReagentEffects/AdjustReagent.cs b/Content.Server/Chemistry/ReagentEffects/AdjustReagent.cs index e70626f1d3e..16d69edd9aa 100644 --- a/Content.Server/Chemistry/ReagentEffects/AdjustReagent.cs +++ b/Content.Server/Chemistry/ReagentEffects/AdjustReagent.cs @@ -1,4 +1,4 @@ -using Content.Shared.Body.Prototypes; +using Content.Shared.Body.Prototypes; using Content.Shared.Chemistry.Reagent; using Content.Shared.FixedPoint; using JetBrains.Annotations; @@ -74,7 +74,7 @@ public override void Effect(ReagentEffectArgs args) return Loc.GetString("reagent-effect-guidebook-adjust-reagent-group", ("chance", Probability), ("deltasign", MathF.Sign(Amount.Float())), - ("group", groupProto.ID), + ("group", groupProto.LocalizedName), ("amount", MathF.Abs(Amount.Float()))); } diff --git a/Content.Server/Chemistry/ReagentEffects/ChemCleanBoodstream.cs b/Content.Server/Chemistry/ReagentEffects/ChemCleanBloodstream.cs similarity index 100% rename from Content.Server/Chemistry/ReagentEffects/ChemCleanBoodstream.cs rename to Content.Server/Chemistry/ReagentEffects/ChemCleanBloodstream.cs diff --git a/Content.Server/Chemistry/ReagentEffects/HealthChange.cs b/Content.Server/Chemistry/ReagentEffects/HealthChange.cs index 2a6181c7f35..24880cfd371 100644 --- a/Content.Server/Chemistry/ReagentEffects/HealthChange.cs +++ b/Content.Server/Chemistry/ReagentEffects/HealthChange.cs @@ -74,7 +74,7 @@ protected override string ReagentEffectGuidebookText(IPrototypeManager prototype damages.Add( Loc.GetString("health-change-display", - ("kind", group.ID), + ("kind", group.LocalizedName), ("amount", MathF.Abs(amount.Float())), ("deltasign", sign) )); @@ -96,7 +96,7 @@ protected override string ReagentEffectGuidebookText(IPrototypeManager prototype damages.Add( Loc.GetString("health-change-display", - ("kind", kind), + ("kind", prototype.Index(kind).LocalizedName), ("amount", MathF.Abs(amount.Float())), ("deltasign", sign) )); diff --git a/Content.Server/Chemistry/ReagentEffects/MakeSentient.cs b/Content.Server/Chemistry/ReagentEffects/MakeSentient.cs index 5654f9067b5..21bfe239232 100644 --- a/Content.Server/Chemistry/ReagentEffects/MakeSentient.cs +++ b/Content.Server/Chemistry/ReagentEffects/MakeSentient.cs @@ -1,7 +1,6 @@ using System.Linq; using Content.Server.Ghost.Roles.Components; using Content.Server.Language; -using Content.Server.Language.Events; using Content.Server.Speech.Components; using Content.Shared.Chemistry.Reagent; using Content.Shared.Language; @@ -41,7 +40,7 @@ public override void Effect(ReagentEffectArgs args) if (!knowledge.SpokenLanguages.Contains(fallback)) knowledge.SpokenLanguages.Add(fallback); - IoCManager.Resolve().GetEntitySystem().UpdateEntityLanguages(uid, speaker); + IoCManager.Resolve().GetEntitySystem().UpdateEntityLanguages(uid); // Stops from adding a ghost role to things like people who already have a mind if (entityManager.TryGetComponent(uid, out var mindContainer) && mindContainer.HasMind) diff --git a/Content.Server/Chemistry/ReagentEffects/ReduceRotting.cs b/Content.Server/Chemistry/ReagentEffects/ReduceRotting.cs new file mode 100644 index 00000000000..cea4f853321 --- /dev/null +++ b/Content.Server/Chemistry/ReagentEffects/ReduceRotting.cs @@ -0,0 +1,31 @@ +using Content.Shared.Chemistry.Reagent; +using JetBrains.Annotations; +using Robust.Shared.Prototypes; +using Content.Server.Atmos.Rotting; + +namespace Content.Server.Chemistry.ReagentEffects +{ + /// + /// Reduces the rotting accumulator on the patient, making them revivable. + /// + [UsedImplicitly] + public sealed partial class ReduceRotting : ReagentEffect + { + [DataField("seconds")] + public double RottingAmount = 10; + + protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) + => Loc.GetString("reagent-effect-guidebook-reduce-rotting", + ("chance", Probability), + ("time", RottingAmount)); + public override void Effect(ReagentEffectArgs args) + { + if (args.Scale != 1f) + return; + + var rottingSys = args.EntityManager.EntitySysManager.GetEntitySystem(); + + rottingSys.ReduceAccumulator(args.SolutionEntity, TimeSpan.FromSeconds(RottingAmount)); + } + } +} diff --git a/Content.Server/Chemistry/ReagentEffects/ResetNarcolepsy.cs b/Content.Server/Chemistry/ReagentEffects/ResetNarcolepsy.cs index fa4f9108918..2893505fc85 100644 --- a/Content.Server/Chemistry/ReagentEffects/ResetNarcolepsy.cs +++ b/Content.Server/Chemistry/ReagentEffects/ResetNarcolepsy.cs @@ -15,7 +15,7 @@ public sealed partial class ResetNarcolepsy : ReagentEffect /// The # of seconds the effect resets the narcolepsy timer to /// [DataField("TimerReset")] - public int TimerReset = 600; + public float TimerReset = 600; protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) => Loc.GetString("reagent-effect-guidebook-reset-narcolepsy", ("chance", Probability)); diff --git a/Content.Server/Cloning/CloningConsoleSystem.cs b/Content.Server/Cloning/CloningConsoleSystem.cs index 524cbe80e48..c0685024aae 100644 --- a/Content.Server/Cloning/CloningConsoleSystem.cs +++ b/Content.Server/Cloning/CloningConsoleSystem.cs @@ -138,17 +138,17 @@ private void OnAnchorChanged(EntityUid uid, CloningConsoleComponent component, r public void UpdateUserInterface(EntityUid consoleUid, CloningConsoleComponent consoleComponent) { - if (!_uiSystem.TryGetUi(consoleUid, CloningConsoleUiKey.Key, out var ui)) + if (!_uiSystem.HasUi(consoleUid, CloningConsoleUiKey.Key)) return; if (!_powerReceiverSystem.IsPowered(consoleUid)) { - _uiSystem.CloseAll(ui); + _uiSystem.CloseUis(consoleUid); return; } var newState = GetUserInterfaceState(consoleComponent); - _uiSystem.SetUiState(ui, newState); + _uiSystem.SetUiState(consoleUid, CloningConsoleUiKey.Key, newState); } public void TryClone(EntityUid uid, EntityUid cloningPodUid, EntityUid scannerUid, CloningPodComponent cloningPod, MedicalScannerComponent? scannerComp = null, CloningConsoleComponent? consoleComponent = null) diff --git a/Content.Server/Cloning/CloningSystem.Utility.cs b/Content.Server/Cloning/CloningSystem.Utility.cs index 408e1cf24a3..d98e105e631 100644 --- a/Content.Server/Cloning/CloningSystem.Utility.cs +++ b/Content.Server/Cloning/CloningSystem.Utility.cs @@ -21,9 +21,9 @@ using Content.Shared.Damage.ForceSay; using Content.Shared.Chat; using Content.Server.Body.Components; +using Content.Server.Language; using Content.Shared.Abilities.Psionics; using Content.Shared.Language.Components; -using Content.Shared.Language; using Content.Shared.Nutrition.Components; using Robust.Shared.Enums; @@ -68,9 +68,10 @@ private bool CheckUncloneable(EntityUid uid, EntityUid bodyToClone, CloningPodCo if (ev.Cancelled && ev.CloningFailMessage is not null) { - _chatSystem.TrySendInGameICMessage(uid, - Loc.GetString(ev.CloningFailMessage), - InGameICChatType.Speak, false); + if (clonePod.ConnectedConsole is not null) + _chatSystem.TrySendInGameICMessage(clonePod.ConnectedConsole.Value, + Loc.GetString(ev.CloningFailMessage), + InGameICChatType.Speak, false); return false; } @@ -252,7 +253,7 @@ private void MakeAHugeMess(EntityUid uid, PhysicsComponent? physics = null, Bloo ? physics.Mass : 71)); - bloodSolution.AddReagent("blood", 0.8f + bloodSolution.AddReagent("Blood", 0.8f * ((blood is not null) ? blood.BloodMaxVolume : 300)); diff --git a/Content.Server/Cloning/CloningSystem.cs b/Content.Server/Cloning/CloningSystem.cs index 7931fae4778..72104bc381f 100644 --- a/Content.Server/Cloning/CloningSystem.cs +++ b/Content.Server/Cloning/CloningSystem.cs @@ -1,6 +1,7 @@ using Content.Server.Atmos.EntitySystems; using Content.Server.Chat.Systems; using Content.Server.Cloning.Components; +using Content.Server.Construction; using Content.Server.DeviceLinking.Systems; using Content.Server.EUI; using Content.Server.Fluids.EntitySystems; @@ -9,6 +10,10 @@ using Content.Server.Materials; using Content.Server.Popups; using Content.Server.Power.EntitySystems; +using Content.Server.Traits.Assorted; +using Content.Shared.Atmos; +using Content.Shared.CCVar; +using Content.Shared.Chemistry.Components; using Content.Shared.Cloning; using Content.Shared.Damage; using Content.Shared.DeviceLinking.Events; @@ -90,8 +95,23 @@ public override void Initialize() SubscribeLocalEvent(OnExamined); SubscribeLocalEvent(OnEmagged); SubscribeLocalEvent(OnPowerChanged); + SubscribeLocalEvent(OnPartsRefreshed); + SubscribeLocalEvent(OnUpgradeExamine); + } + private void OnPartsRefreshed(EntityUid uid, CloningPodComponent component, RefreshPartsEvent args) + { + var materialRating = args.PartRatings[component.MachinePartMaterialUse]; + var speedRating = args.PartRatings[component.MachinePartCloningSpeed]; + + component.BiomassCostMultiplier = MathF.Pow(component.PartRatingMaterialMultiplier, materialRating - 1); + component.CloningTime = component.CloningTime * MathF.Pow(component.PartRatingSpeedMultiplier, speedRating - 1); } + private void OnUpgradeExamine(EntityUid uid, CloningPodComponent component, UpgradeExamineEvent args) + { + args.AddPercentageUpgrade("cloning-pod-component-upgrade-speed", component.CloningTime / component.CloningTime); + args.AddPercentageUpgrade("cloning-pod-component-upgrade-biomass-requirement", component.BiomassCostMultiplier); + } private void OnPortDisconnected(EntityUid uid, CloningPodComponent pod, PortDisconnectedEvent args) { pod.ConnectedConsole = null; diff --git a/Content.Server/Clothing/MagbootsSystem.cs b/Content.Server/Clothing/MagbootsSystem.cs index bc6880552fc..f12558389e3 100644 --- a/Content.Server/Clothing/MagbootsSystem.cs +++ b/Content.Server/Clothing/MagbootsSystem.cs @@ -1,7 +1,6 @@ using Content.Server.Atmos.Components; using Content.Shared.Alert; using Content.Shared.Clothing; -using Content.Shared.Inventory.Events; namespace Content.Server.Clothing; @@ -13,8 +12,8 @@ public override void Initialize() { base.Initialize(); - SubscribeLocalEvent(OnGotEquipped); - SubscribeLocalEvent(OnGotUnequipped); + SubscribeLocalEvent(OnGotEquipped); + SubscribeLocalEvent(OnGotUnequipped); } protected override void UpdateMagbootEffects(EntityUid parent, EntityUid uid, bool state, MagbootsComponent? component) @@ -38,19 +37,13 @@ protected override void UpdateMagbootEffects(EntityUid parent, EntityUid uid, bo } } - private void OnGotUnequipped(EntityUid uid, MagbootsComponent component, GotUnequippedEvent args) + private void OnGotUnequipped(EntityUid uid, MagbootsComponent component, ref ClothingGotUnequippedEvent args) { - if (args.Slot == "shoes") - { - UpdateMagbootEffects(args.Equipee, uid, false, component); - } + UpdateMagbootEffects(args.Wearer, uid, false, component); } - private void OnGotEquipped(EntityUid uid, MagbootsComponent component, GotEquippedEvent args) + private void OnGotEquipped(EntityUid uid, MagbootsComponent component, ref ClothingGotEquippedEvent args) { - if (args.Slot == "shoes") - { - UpdateMagbootEffects(args.Equipee, uid, true, component); - } + UpdateMagbootEffects(args.Wearer, uid, true, component); } } diff --git a/Content.Server/Clothing/Systems/ChameleonClothingSystem.cs b/Content.Server/Clothing/Systems/ChameleonClothingSystem.cs index 6fbfd9f3673..e20a6c3da97 100644 --- a/Content.Server/Clothing/Systems/ChameleonClothingSystem.cs +++ b/Content.Server/Clothing/Systems/ChameleonClothingSystem.cs @@ -64,7 +64,7 @@ private void UpdateUi(EntityUid uid, ChameleonClothingComponent? component = nul return; var state = new ChameleonBoundUserInterfaceState(component.Slot, component.Default); - _uiSystem.TrySetUiState(uid, ChameleonUiKey.Key, state); + _uiSystem.SetUiState(uid, ChameleonUiKey.Key, state); } /// diff --git a/Content.Server/Cocoon/CocoonerSystem.cs b/Content.Server/Cocoon/CocoonerSystem.cs new file mode 100644 index 00000000000..676eb9808b2 --- /dev/null +++ b/Content.Server/Cocoon/CocoonerSystem.cs @@ -0,0 +1,204 @@ +using Content.Shared.Cocoon; +using Content.Shared.IdentityManagement; +using Content.Shared.Verbs; +using Content.Shared.DoAfter; +using Content.Shared.Stunnable; +using Content.Shared.Eye.Blinding.Systems; +using Content.Shared.Containers.ItemSlots; +using Content.Shared.Damage; +using Content.Shared.Administration.Logs; +using Content.Shared.Database; +using Content.Shared.Humanoid; +using Content.Server.Popups; +using Content.Server.DoAfter; +using Content.Server.Speech.Components; +using Robust.Shared.Containers; +using Content.Shared.Mobs.Components; +using Content.Shared.Destructible; +using Robust.Shared.Random; +using Content.Shared.Nutrition.Components; +using Content.Shared.Storage; +using Robust.Shared.Utility; + +namespace Content.Server.Cocoon +{ + public sealed class CocooningSystem : EntitySystem + { + [Dependency] private readonly PopupSystem _popupSystem = default!; + [Dependency] private readonly DoAfterSystem _doAfter = default!; + [Dependency] private readonly ItemSlotsSystem _itemSlots = default!; + [Dependency] private readonly BlindableSystem _blindableSystem = default!; + [Dependency] private readonly DamageableSystem _damageableSystem = default!; + [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!; + [Dependency] private readonly SharedDestructibleSystem _destructibleSystem = default!; + [Dependency] private readonly IRobustRandom _robustRandom = default!; + + private const string BodySlot = "body_slot"; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent>(AddVerbs); + SubscribeLocalEvent(OnCocEntInserted); + SubscribeLocalEvent(OnCocEntRemoved); + SubscribeLocalEvent(OnDamageChanged); + SubscribeLocalEvent(OnCocoonDoAfter); + SubscribeLocalEvent(OnUnCocoonDoAfter); + } + + private void AddVerbs(EntityUid uid, CocoonerComponent component, GetVerbsEvent args) + { + AddCocoonVerb(uid, component, args); + AddUnCocoonVerb(uid, component, args); + } + + private void AddCocoonVerb(EntityUid uid, CocoonerComponent component, GetVerbsEvent args) + { + if (!args.CanAccess || !args.CanInteract || !HasComp(args.Target)) + return; + + InnateVerb verb = new() + { + Act = () => + { + StartCocooning(uid, component, args.Target); + }, + Text = Loc.GetString("cocoon"), + Icon = new SpriteSpecifier.Texture(new ResPath("/Textures/Interface/Actions/web.png")), + Priority = 2 + }; + args.Verbs.Add(verb); + } + + private void AddUnCocoonVerb(EntityUid uid, CocoonerComponent component, GetVerbsEvent args) + { + if (!args.CanAccess || !args.CanInteract || !HasComp(args.Target)) + return; + + InnateVerb verb = new() + { + Act = () => + { + StartUnCocooning(uid, component, args.Target); + }, + Text = Loc.GetString("uncocoon"), + Icon = new SpriteSpecifier.Texture(new ResPath("/Textures/Interface/Actions/web.png")), + Priority = 2 + }; + args.Verbs.Add(verb); + } + + private void OnCocEntInserted(EntityUid uid, CocoonComponent component, EntInsertedIntoContainerMessage args) + { + component.Victim = args.Entity; + + if (TryComp(args.Entity, out var currentAccent)) + component.OldAccent = currentAccent.Accent; + + EnsureComp(args.Entity).Accent = "mumble"; + EnsureComp(args.Entity); + + _blindableSystem.UpdateIsBlind(args.Entity); + } + + private void OnCocEntRemoved(EntityUid uid, CocoonComponent component, EntRemovedFromContainerMessage args) + { + if (TryComp(args.Entity, out var replacement)) + if (component.OldAccent is not null) + replacement.Accent = component.OldAccent; + else + RemComp(args.Entity, replacement); + + + RemComp(args.Entity); + _blindableSystem.UpdateIsBlind(args.Entity); + } + + private void OnDamageChanged(EntityUid uid, CocoonComponent component, DamageChangedEvent args) + { + if (!args.DamageIncreased || args.DamageDelta == null || component.Victim == null) + return; + + var damage = args.DamageDelta * component.DamagePassthrough; + _damageableSystem.TryChangeDamage(component.Victim, damage); + } + + private void StartCocooning(EntityUid uid, CocoonerComponent component, EntityUid target) + { + _popupSystem.PopupEntity(Loc.GetString("cocoon-start-third-person", ("target", Identity.Entity(target, EntityManager)), ("spider", Identity.Entity(uid, EntityManager))), uid, + Shared.Popups.PopupType.MediumCaution); + + var delay = component.CocoonDelay; + + if (HasComp(target)) + delay *= component.CocoonKnockdownMultiplier; + + var args = new DoAfterArgs(EntityManager, uid, delay, new CocoonDoAfterEvent(), uid, target: target) + { + BreakOnUserMove = true, + BreakOnTargetMove = true, + }; + + _doAfter.TryStartDoAfter(args); + } + + private void StartUnCocooning(EntityUid uid, CocoonerComponent component, EntityUid target) + { + _popupSystem.PopupEntity(Loc.GetString("uncocoon-start-third-person", ("target", target), ("spider", Identity.Entity(uid, EntityManager))), uid, + Shared.Popups.PopupType.MediumCaution); + + var delay = component.CocoonDelay / 2; + + var args = new DoAfterArgs(EntityManager, uid, delay, new UnCocoonDoAfterEvent(), uid, target: target) + { + BreakOnUserMove = true, + BreakOnTargetMove = true, + }; + + _doAfter.TryStartDoAfter(args); + } + + private void OnCocoonDoAfter(EntityUid uid, CocoonerComponent component, CocoonDoAfterEvent args) + { + if (args.Handled || args.Cancelled || args.Args.Target == null) + return; + + var spawnProto = HasComp(args.Args.Target) ? "CocoonedHumanoid" : "CocoonSmall"; + Transform(args.Args.Target.Value).AttachToGridOrMap(); + var cocoon = Spawn(spawnProto, Transform(args.Args.Target.Value).Coordinates); + + if (!TryComp(cocoon, out var slots)) + return; + + _itemSlots.SetLock(cocoon, BodySlot, false, slots); + _itemSlots.TryInsert(cocoon, BodySlot, args.Args.Target.Value, args.Args.User); + _itemSlots.SetLock(cocoon, BodySlot, true, slots); + + var impact = (spawnProto == "CocoonedHumanoid") ? LogImpact.High : LogImpact.Medium; + + _adminLogger.Add(LogType.Action, impact, $"{ToPrettyString(args.Args.User):player} cocooned {ToPrettyString(args.Args.Target.Value):target}"); + args.Handled = true; + } + + private void OnUnCocoonDoAfter(EntityUid uid, CocoonerComponent component, UnCocoonDoAfterEvent args) + { + if (args.Handled || args.Cancelled || args.Args.Target == null) + return; + + if (TryComp(args.Args.Target.Value, out var butcher)) + { + var spawnEntities = EntitySpawnCollection.GetSpawns(butcher.SpawnedEntities, _robustRandom); + var coords = Transform(args.Args.Target.Value).MapPosition; + EntityUid popupEnt = default!; + foreach (var proto in spawnEntities) + popupEnt = Spawn(proto, coords.Offset(_robustRandom.NextVector2(0.25f))); + } + + _destructibleSystem.DestroyEntity(args.Args.Target.Value); + + _adminLogger.Add(LogType.Action, LogImpact.Low + , $"{ToPrettyString(args.Args.User):player} uncocooned {ToPrettyString(args.Args.Target.Value):target}"); + args.Handled = true; + } + } +} diff --git a/Content.Server/Communications/CommunicationsConsoleSystem.cs b/Content.Server/Communications/CommunicationsConsoleSystem.cs index b68a952105e..0cdcb3a47f8 100644 --- a/Content.Server/Communications/CommunicationsConsoleSystem.cs +++ b/Content.Server/Communications/CommunicationsConsoleSystem.cs @@ -86,8 +86,8 @@ public override void Update(float frameTime) comp.UIUpdateAccumulator -= UIUpdateInterval; - if (_uiSystem.TryGetUi(uid, CommunicationsConsoleUiKey.Key, out var ui) && ui.SubscribedSessions.Count > 0) - UpdateCommsConsoleInterface(uid, comp, ui); + if (_uiSystem.IsUiOpen(uid, CommunicationsConsoleUiKey.Key)) + UpdateCommsConsoleInterface(uid, comp); } base.Update(frameTime); @@ -140,11 +140,8 @@ public void UpdateCommsConsoleInterface() /// /// Updates the UI for a particular comms console. /// - public void UpdateCommsConsoleInterface(EntityUid uid, CommunicationsConsoleComponent comp, PlayerBoundUserInterface? ui = null) + public void UpdateCommsConsoleInterface(EntityUid uid, CommunicationsConsoleComponent comp) { - if (ui == null && !_uiSystem.TryGetUi(uid, CommunicationsConsoleUiKey.Key, out ui)) - return; - var stationUid = _stationSystem.GetOwningStation(uid); List? levels = null; string currentLevel = default!; @@ -172,7 +169,7 @@ public void UpdateCommsConsoleInterface(EntityUid uid, CommunicationsConsoleComp } } - _uiSystem.SetUiState(ui, new CommunicationsConsoleInterfaceState( + _uiSystem.SetUiState(uid, CommunicationsConsoleUiKey.Key, new CommunicationsConsoleInterfaceState( CanAnnounce(comp), CanCallOrRecall(comp), levels, @@ -203,7 +200,9 @@ private bool CanUse(EntityUid user, EntityUid console) private bool CanCallOrRecall(CommunicationsConsoleComponent comp) { // Defer to what the round end system thinks we should be able to do. - if (_emergency.EmergencyShuttleArrived || !_roundEndSystem.CanCallOrRecall()) + if (_emergency.EmergencyShuttleArrived + || !_roundEndSystem.CanCallOrRecall() + || !comp.CanShuttle) return false; // Calling shuttle checks @@ -223,12 +222,12 @@ private bool CanCallOrRecall(CommunicationsConsoleComponent comp) private void OnSelectAlertLevelMessage(EntityUid uid, CommunicationsConsoleComponent comp, CommunicationsConsoleSelectAlertLevelMessage message) { - if (message.Session.AttachedEntity is not { Valid: true } mob) + if (message.Actor is not { Valid: true } mob) return; if (!CanUse(mob, uid)) { - _popupSystem.PopupCursor(Loc.GetString("comms-console-permission-denied"), message.Session, PopupType.Medium); + _popupSystem.PopupCursor(Loc.GetString("comms-console-permission-denied"), message.Actor, PopupType.Medium); return; } @@ -245,7 +244,7 @@ private void OnAnnounceMessage(EntityUid uid, CommunicationsConsoleComponent com var maxLength = _cfg.GetCVar(CCVars.ChatMaxAnnouncementLength); var msg = SharedChatSystem.SanitizeAnnouncement(message.Message, maxLength); var author = Loc.GetString("comms-console-announcement-unknown-sender"); - if (message.Session.AttachedEntity is { Valid: true } mob) + if (message.Actor is { Valid: true } mob) { if (!CanAnnounce(comp)) { @@ -254,7 +253,7 @@ private void OnAnnounceMessage(EntityUid uid, CommunicationsConsoleComponent com if (!CanUse(mob, uid)) { - _popupSystem.PopupEntity(Loc.GetString("comms-console-permission-denied"), uid, message.Session); + _popupSystem.PopupEntity(Loc.GetString("comms-console-permission-denied"), uid, message.Actor); return; } @@ -267,7 +266,7 @@ private void OnAnnounceMessage(EntityUid uid, CommunicationsConsoleComponent com comp.AnnouncementCooldownRemaining = comp.Delay; UpdateCommsConsoleInterface(uid, comp); - var ev = new CommunicationConsoleAnnouncementEvent(uid, comp, msg, message.Session.AttachedEntity); + var ev = new CommunicationConsoleAnnouncementEvent(uid, comp, msg, message.Actor); RaiseLocalEvent(ref ev); // allow admemes with vv @@ -279,17 +278,16 @@ private void OnAnnounceMessage(EntityUid uid, CommunicationsConsoleComponent com { _announcer.SendAnnouncement("announce", Filter.Broadcast(), msg, title, comp.Color); - if (message.Session.AttachedEntity != null) - _adminLogger.Add(LogType.Chat, LogImpact.Low, $"{ToPrettyString(message.Session.AttachedEntity.Value):player} has sent the following global announcement: {msg}"); - + _adminLogger.Add(LogType.Chat, LogImpact.Low, $"{ToPrettyString(message.Actor):player} has sent the following global announcement: {msg}"); return; } + if (TryComp(_stationSystem.GetOwningStation(uid), out var stationData)) _announcer.SendAnnouncement("announce", _stationSystem.GetInStation(stationData), msg, title, comp.Color); - if (message.Session.AttachedEntity != null) - _adminLogger.Add(LogType.Chat, LogImpact.Low, $"{ToPrettyString(message.Session.AttachedEntity.Value):player} has sent the following station announcement: {msg}"); + _adminLogger.Add(LogType.Chat, LogImpact.Low, $"{ToPrettyString(message.Actor):player} has sent the following station announcement: {msg}"); + } private void OnBroadcastMessage(EntityUid uid, CommunicationsConsoleComponent component, CommunicationsConsoleBroadcastMessage message) @@ -304,8 +302,7 @@ private void OnBroadcastMessage(EntityUid uid, CommunicationsConsoleComponent co _deviceNetworkSystem.QueuePacket(uid, null, payload, net.TransmitFrequency); - if (message.Session.AttachedEntity != null) - _adminLogger.Add(LogType.DeviceNetwork, LogImpact.Low, $"{ToPrettyString(message.Session.AttachedEntity.Value):player} has sent the following broadcast: {message.Message:msg}"); + _adminLogger.Add(LogType.DeviceNetwork, LogImpact.Low, $"{ToPrettyString(message.Actor):player} has sent the following broadcast: {message.Message:msg}"); } private void OnCallShuttleMessage(EntityUid uid, CommunicationsConsoleComponent comp, CommunicationsConsoleCallEmergencyShuttleMessage message) @@ -313,12 +310,11 @@ private void OnCallShuttleMessage(EntityUid uid, CommunicationsConsoleComponent if (!CanCallOrRecall(comp)) return; - if (message.Session.AttachedEntity is not { Valid: true } mob) - return; + var mob = message.Actor; if (!CanUse(mob, uid)) { - _popupSystem.PopupEntity(Loc.GetString("comms-console-permission-denied"), uid, message.Session); + _popupSystem.PopupEntity(Loc.GetString("comms-console-permission-denied"), uid, message.Actor); return; } @@ -326,7 +322,7 @@ private void OnCallShuttleMessage(EntityUid uid, CommunicationsConsoleComponent RaiseLocalEvent(ref ev); if (ev.Cancelled) { - _popupSystem.PopupEntity(ev.Reason ?? Loc.GetString("comms-console-shuttle-unavailable"), uid, message.Session); + _popupSystem.PopupEntity(ev.Reason ?? Loc.GetString("comms-console-shuttle-unavailable"), uid, message.Actor); return; } @@ -339,17 +335,14 @@ private void OnRecallShuttleMessage(EntityUid uid, CommunicationsConsoleComponen if (!CanCallOrRecall(comp)) return; - if (message.Session.AttachedEntity is not { Valid: true } mob) - return; - - if (!CanUse(mob, uid)) + if (!CanUse(message.Actor, uid)) { - _popupSystem.PopupEntity(Loc.GetString("comms-console-permission-denied"), uid, message.Session); + _popupSystem.PopupEntity(Loc.GetString("comms-console-permission-denied"), uid, message.Actor); return; } _roundEndSystem.CancelRoundEndCountdown(uid); - _adminLogger.Add(LogType.Action, LogImpact.Extreme, $"{ToPrettyString(mob):player} has recalled the shuttle."); + _adminLogger.Add(LogType.Action, LogImpact.Extreme, $"{ToPrettyString(message.Actor):player} has recalled the shuttle."); } } diff --git a/Content.Server/Configurable/ConfigurationSystem.cs b/Content.Server/Configurable/ConfigurationSystem.cs index eb31149ecae..5f5f1ef7d16 100644 --- a/Content.Server/Configurable/ConfigurationSystem.cs +++ b/Content.Server/Configurable/ConfigurationSystem.cs @@ -24,16 +24,14 @@ public override void Initialize() private void OnInteractUsing(EntityUid uid, ConfigurationComponent component, InteractUsingEvent args) { + // TODO use activatable ui system if (args.Handled) return; if (!TryComp(args.Used, out ToolComponent? tool) || !tool.Qualities.Contains(component.QualityNeeded)) return; - if (!TryComp(args.User, out ActorComponent? actor)) - return; - - args.Handled = _uiSystem.TryOpen(uid, ConfigurationUiKey.Key, actor.PlayerSession); + args.Handled = _uiSystem.TryOpenUi(uid, ConfigurationUiKey.Key, args.User); } private void OnStartup(EntityUid uid, ConfigurationComponent component, ComponentStartup args) @@ -43,8 +41,8 @@ private void OnStartup(EntityUid uid, ConfigurationComponent component, Componen private void UpdateUi(EntityUid uid, ConfigurationComponent component) { - if (_uiSystem.TryGetUi(uid, ConfigurationUiKey.Key, out var ui)) - _uiSystem.SetUiState(ui, new ConfigurationBoundUserInterfaceState(component.Config)); + if (_uiSystem.HasUi(uid, ConfigurationUiKey.Key)) + _uiSystem.SetUiState(uid, ConfigurationUiKey.Key, new ConfigurationBoundUserInterfaceState(component.Config)); } private void OnUpdate(EntityUid uid, ConfigurationComponent component, ConfigurationUpdatedMessage args) diff --git a/Content.Server/Construction/Components/WelderRefinableComponent.cs b/Content.Server/Construction/Components/WelderRefinableComponent.cs index dc3074f1958..31b029e2415 100644 --- a/Content.Server/Construction/Components/WelderRefinableComponent.cs +++ b/Content.Server/Construction/Components/WelderRefinableComponent.cs @@ -2,22 +2,24 @@ using Content.Shared.Storage; using Robust.Shared.Prototypes; -namespace Content.Server.Construction.Components +namespace Content.Server.Construction.Components; + +/// +/// Used for something that can be refined by welder. +/// For example, glass shard can be refined to glass sheet. +/// +[RegisterComponent] +public sealed partial class WelderRefinableComponent : Component { - /// - /// Used for something that can be refined by welder. - /// For example, glass shard can be refined to glass sheet. - /// - [RegisterComponent] - public sealed partial class WelderRefinableComponent : Component - { - [DataField] - public List RefineResult = new(); + [DataField] + public HashSet? RefineResult; + + [DataField] + public float RefineTime = 2f; - [DataField] - public float RefineTime = 2f; + [DataField] + public float RefineFuel; - [DataField] - public ProtoId QualityNeeded = "Welding"; - } + [DataField] + public ProtoId QualityNeeded = "Welding"; } diff --git a/Content.Server/Construction/Conditions/Locked.cs b/Content.Server/Construction/Conditions/Locked.cs index fde704b161b..0b8c9118dc7 100644 --- a/Content.Server/Construction/Conditions/Locked.cs +++ b/Content.Server/Construction/Conditions/Locked.cs @@ -15,7 +15,7 @@ public sealed partial class Locked : IGraphCondition public bool Condition(EntityUid uid, IEntityManager entityManager) { if (!entityManager.TryGetComponent(uid, out LockComponent? lockcomp)) - return false; + return true; return lockcomp.Locked == IsLocked; } @@ -25,7 +25,8 @@ public bool DoExamine(ExaminedEvent args) var entMan = IoCManager.Resolve(); var entity = args.Examined; - if (!entMan.TryGetComponent(entity, out LockComponent? lockcomp)) return false; + if (!entMan.TryGetComponent(entity, out LockComponent? lockcomp)) + return true; switch (IsLocked) { diff --git a/Content.Server/Construction/ConstructionSystem.Guided.cs b/Content.Server/Construction/ConstructionSystem.Guided.cs index fe7f9152c0b..e096bc02c31 100644 --- a/Content.Server/Construction/ConstructionSystem.Guided.cs +++ b/Content.Server/Construction/ConstructionSystem.Guided.cs @@ -41,6 +41,18 @@ private void AddDeconstructVerb(EntityUid uid, ConstructionComponent component, component.Node == component.DeconstructionNode) return; + if (!_prototypeManager.TryIndex(component.Graph, out ConstructionGraphPrototype? graph)) + return; + + if (component.DeconstructionNode == null) + return; + + if (GetCurrentNode(uid, component) is not {} currentNode) + return; + + if (graph.Path(currentNode.Name, component.DeconstructionNode) is not {} path || path.Length == 0) + return; + Verb verb = new(); //verb.Category = VerbCategories.Construction; //TODO VERBS add more construction verbs? Until then, removing construction category diff --git a/Content.Server/Construction/ConstructionSystem.Interactions.cs b/Content.Server/Construction/ConstructionSystem.Interactions.cs index 946aaa0d3ee..5361b65b1ff 100644 --- a/Content.Server/Construction/ConstructionSystem.Interactions.cs +++ b/Content.Server/Construction/ConstructionSystem.Interactions.cs @@ -11,10 +11,8 @@ using Content.Shared.Interaction; using Content.Shared.Prying.Systems; using Content.Shared.Radio.EntitySystems; -using Content.Shared.Tools.Components; using Content.Shared.Tools.Systems; using Robust.Shared.Containers; -using Robust.Shared.Map; using Robust.Shared.Utility; #if EXCEPTION_TOLERANCE // ReSharper disable once RedundantUsingDirective @@ -370,7 +368,8 @@ private HandleResult HandleInteraction(EntityUid uid, object ev, ConstructionGra TimeSpan.FromSeconds(toolInsertStep.DoAfter), new [] { toolInsertStep.Tool }, new ConstructionInteractDoAfterEvent(EntityManager, interactUsing), - out var doAfter); + out var doAfter, + toolInsertStep.Fuel); return result && doAfter != null ? HandleResult.DoAfter : HandleResult.False; } diff --git a/Content.Server/Construction/ConstructionSystem.Machine.cs b/Content.Server/Construction/ConstructionSystem.Machine.cs index 2e670dbe40d..65b0b704761 100644 --- a/Content.Server/Construction/ConstructionSystem.Machine.cs +++ b/Content.Server/Construction/ConstructionSystem.Machine.cs @@ -5,6 +5,7 @@ using Content.Shared.Construction.Prototypes; using Content.Shared.Verbs; using Robust.Shared.Containers; +using Robust.Shared.Map.Components; using Robust.Shared.Utility; namespace Content.Server.Construction; @@ -143,7 +144,7 @@ private void CreateBoardAndStockParts(EntityUid uid, MachineComponent component) var p = EntityManager.SpawnEntity(partProto.StockPartPrototype, xform.Coordinates); if (!_container.Insert(p, partContainer)) - throw new Exception($"Couldn't insert machine part of type {part} to machine with prototype {partProto.StockPartPrototype}!"); + throw new Exception($"Couldn't insert machine part of type {part} to machine with prototype {partProto.StockPartPrototype ?? "N/A"}!"); } } @@ -183,7 +184,7 @@ public sealed class RefreshPartsEvent : EntityEventArgs { public IReadOnlyList Parts = new List(); - public Dictionary PartRatings = new(); + public Dictionary PartRatings = new Dictionary(); } public sealed class UpgradeExamineEvent : EntityEventArgs diff --git a/Content.Server/Construction/PartExchangerSystem.cs b/Content.Server/Construction/PartExchangerSystem.cs index ee5edcbd0a0..f364d1b547d 100644 --- a/Content.Server/Construction/PartExchangerSystem.cs +++ b/Content.Server/Construction/PartExchangerSystem.cs @@ -10,6 +10,7 @@ using Robust.Shared.Containers; using Robust.Shared.Utility; using Content.Shared.Wires; +using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; using Robust.Shared.Collections; @@ -42,7 +43,7 @@ private void OnDoAfter(EntityUid uid, PartExchangerComponent component, DoAfterE if (args.Handled || args.Args.Target == null) return; - if (!TryComp(uid, out var storage)) + if (!TryComp(uid, out var storage) || storage.Container == null) return; //the parts are stored in here var machinePartQuery = GetEntityQuery(); diff --git a/Content.Server/Construction/RefiningSystem.cs b/Content.Server/Construction/RefiningSystem.cs index d4df8b0916b..2ca32baf906 100644 --- a/Content.Server/Construction/RefiningSystem.cs +++ b/Content.Server/Construction/RefiningSystem.cs @@ -2,43 +2,50 @@ using Content.Server.Stack; using Content.Shared.Construction; using Content.Shared.Interaction; +using Content.Shared.Stacks; using Content.Shared.Storage; using SharedToolSystem = Content.Shared.Tools.Systems.SharedToolSystem; -namespace Content.Server.Construction +namespace Content.Server.Construction; + +public sealed class RefiningSystem : EntitySystem { - public sealed class RefiningSystem : EntitySystem + [Dependency] private readonly SharedToolSystem _toolSystem = default!; + [Dependency] private readonly StackSystem _stackSystem = default!; + + public override void Initialize() { - [Dependency] private readonly SharedToolSystem _toolSystem = default!; - public override void Initialize() - { - base.Initialize(); - SubscribeLocalEvent(OnInteractUsing); - SubscribeLocalEvent(OnDoAfter); - } + base.Initialize(); + SubscribeLocalEvent(OnInteractUsing); + SubscribeLocalEvent(OnDoAfter); + } - private void OnInteractUsing(EntityUid uid, WelderRefinableComponent component, InteractUsingEvent args) - { - if (args.Handled) - return; + private void OnInteractUsing(EntityUid uid, WelderRefinableComponent component, InteractUsingEvent args) + { + if (args.Handled) + return; - args.Handled = _toolSystem.UseTool(args.Used, args.User, uid, component.RefineTime, component.QualityNeeded, new WelderRefineDoAfterEvent()); - } + args.Handled = _toolSystem.UseTool(args.Used, args.User, uid, component.RefineTime, component.QualityNeeded, new WelderRefineDoAfterEvent(), fuel: component.RefineFuel); + } + + private void OnDoAfter(EntityUid uid, WelderRefinableComponent component, WelderRefineDoAfterEvent args) + { + if (args.Cancelled) + return; + + // Get last owner coordinates and delete it + var resultPosition = Transform(uid).Coordinates; + EntityManager.DeleteEntity(uid); - private void OnDoAfter(EntityUid uid, WelderRefinableComponent component, WelderRefineDoAfterEvent args) + // Spawn each result after refine + foreach (var ent in EntitySpawnCollection.GetSpawns(component.RefineResult ?? new())) { - if (args.Cancelled) - return; - - // get last owner coordinates and delete it - var resultPosition = Transform(uid).Coordinates; - EntityManager.DeleteEntity(uid); - - // spawn each result after refine - foreach (var ent in EntitySpawnCollection.GetSpawns(component.RefineResult)) - { - Spawn(ent, resultPosition); - } + var droppedEnt = Spawn(ent, resultPosition); + + // TODO: If something has a stack... Just use a prototype with a single thing in the stack. + // This is not a good way to do it. + if (TryComp(droppedEnt, out var stack)) + _stackSystem.SetCount(droppedEnt, 1, stack); } } } diff --git a/Content.Server/Containers/ThrowInsertContainerComponent.cs b/Content.Server/Containers/ThrowInsertContainerComponent.cs new file mode 100644 index 00000000000..7eb5f4657d0 --- /dev/null +++ b/Content.Server/Containers/ThrowInsertContainerComponent.cs @@ -0,0 +1,35 @@ +using Robust.Shared.Audio; + +namespace Content.Server.Containers; + +/// +/// Allows objects to fall inside the Container when thrown +/// +[RegisterComponent] +[Access(typeof(ThrowInsertContainerSystem))] +public sealed partial class ThrowInsertContainerComponent : Component +{ + [DataField(required: true)] + public string ContainerId = string.Empty; + + /// + /// Throw chance of hitting into the container + /// + [DataField] + public float Probability = 0.75f; + + /// + /// Sound played when an object is throw into the container. + /// + [DataField] + public SoundSpecifier? InsertSound = new SoundPathSpecifier("/Audio/Effects/trashbag1.ogg"); + + /// + /// Sound played when an item is thrown and misses the container. + /// + [DataField] + public SoundSpecifier? MissSound = new SoundPathSpecifier("/Audio/Effects/thudswoosh.ogg"); + + [DataField] + public LocId MissLocString = "container-thrown-missed"; +} diff --git a/Content.Server/Containers/ThrowInsertContainerSystem.cs b/Content.Server/Containers/ThrowInsertContainerSystem.cs new file mode 100644 index 00000000000..12bb602811a --- /dev/null +++ b/Content.Server/Containers/ThrowInsertContainerSystem.cs @@ -0,0 +1,50 @@ +using Content.Server.Administration.Logs; +using Content.Shared.Database; +using Content.Shared.Popups; +using Content.Shared.Throwing; +using Robust.Shared.Audio.Systems; +using Robust.Shared.Containers; +using Robust.Shared.Random; + +namespace Content.Server.Containers; + +public sealed class ThrowInsertContainerSystem : EntitySystem +{ + [Dependency] private readonly IAdminLogManager _adminLogger = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly SharedContainerSystem _containerSystem = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] private readonly IRobustRandom _random = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnThrowCollide); + } + + private void OnThrowCollide(Entity ent, ref ThrowHitByEvent args) + { + var container = _containerSystem.GetContainer(ent, ent.Comp.ContainerId); + + if (!_containerSystem.CanInsert(args.Thrown, container)) + return; + + + var rand = _random.NextFloat(); + if (_random.Prob(ent.Comp.Probability)) + { + _audio.PlayPvs(ent.Comp.MissSound, ent); + _popup.PopupEntity(Loc.GetString(ent.Comp.MissLocString), ent); + return; + } + + if (!_containerSystem.Insert(args.Thrown, container)) + throw new InvalidOperationException("Container insertion failed but CanInsert returned true"); + + _audio.PlayPvs(ent.Comp.InsertSound, ent); + + if (args.Component.Thrower != null) + _adminLogger.Add(LogType.Landed, LogImpact.Low, $"{ToPrettyString(args.Thrown)} thrown by {ToPrettyString(args.Component.Thrower.Value):player} landed in {ToPrettyString(ent)}"); + } +} diff --git a/Content.Server/Content.Server.csproj b/Content.Server/Content.Server.csproj index 8782454eacb..70e404fdef0 100644 --- a/Content.Server/Content.Server.csproj +++ b/Content.Server/Content.Server.csproj @@ -28,7 +28,6 @@ - diff --git a/Content.Server/Crayon/CrayonSystem.cs b/Content.Server/Crayon/CrayonSystem.cs index 32bb96e9e28..07a13d8a34a 100644 --- a/Content.Server/Crayon/CrayonSystem.cs +++ b/Content.Server/Crayon/CrayonSystem.cs @@ -90,19 +90,14 @@ private void OnCrayonUse(EntityUid uid, CrayonComponent component, UseInHandEven if (args.Handled) return; - if (!TryComp(args.User, out var actor) || - !_uiSystem.TryGetUi(uid, SharedCrayonComponent.CrayonUiKey.Key, out var ui)) + if (!_uiSystem.HasUi(uid, SharedCrayonComponent.CrayonUiKey.Key)) { return; } - _uiSystem.ToggleUi(ui, actor.PlayerSession); - if (ui.SubscribedSessions.Contains(actor.PlayerSession)) - { - // Tell the user interface the selected stuff - _uiSystem.SetUiState(ui, new CrayonBoundUserInterfaceState(component.SelectedState, component.SelectableColor, component.Color)); - } + _uiSystem.TryToggleUi(uid, SharedCrayonComponent.CrayonUiKey.Key, args.User); + _uiSystem.SetUiState(uid, SharedCrayonComponent.CrayonUiKey.Key, new CrayonBoundUserInterfaceState(component.SelectedState, component.SelectableColor, component.Color)); args.Handled = true; } @@ -140,8 +135,8 @@ private void OnCrayonInit(EntityUid uid, CrayonComponent component, ComponentIni private void OnCrayonDropped(EntityUid uid, CrayonComponent component, DroppedEvent args) { - if (TryComp(args.User, out var actor)) - _uiSystem.TryClose(uid, SharedCrayonComponent.CrayonUiKey.Key, actor.PlayerSession); + // TODO: Use the existing event. + _uiSystem.CloseUi(uid, SharedCrayonComponent.CrayonUiKey.Key, args.User); } private void UseUpCrayon(EntityUid uid, EntityUid user) diff --git a/Content.Server/CrewManifest/CrewManifestSystem.cs b/Content.Server/CrewManifest/CrewManifestSystem.cs index 8b4cbac5c15..e7424560159 100644 --- a/Content.Server/CrewManifest/CrewManifestSystem.cs +++ b/Content.Server/CrewManifest/CrewManifestSystem.cs @@ -100,12 +100,12 @@ private void OnBoundUiClose(EntityUid uid, CrewManifestViewerComponent component return; var owningStation = _stationSystem.GetOwningStation(uid); - if (owningStation == null || ev.Session is not { } session) + if (owningStation == null || !TryComp(ev.Actor, out ActorComponent? actorComp)) { return; } - CloseEui(owningStation.Value, session, uid); + CloseEui(owningStation.Value, actorComp.PlayerSession, uid); } /// @@ -136,12 +136,12 @@ private void OpenEuiFromBui(EntityUid uid, CrewManifestViewerComponent component { Log.Error( "{User} tried to open crew manifest from wrong UI: {Key}. Correct owned is {ExpectedKey}", - msg.Session, msg.UiKey, component.OwnerKey); + msg.Actor, msg.UiKey, component.OwnerKey); return; } var owningStation = _stationSystem.GetOwningStation(uid); - if (owningStation == null || msg.Session is not { } session) + if (owningStation == null || !TryComp(msg.Actor, out ActorComponent? actorComp)) { return; } @@ -151,7 +151,7 @@ private void OpenEuiFromBui(EntityUid uid, CrewManifestViewerComponent component return; } - OpenEui(owningStation.Value, session, uid); + OpenEui(owningStation.Value, actorComp.PlayerSession, uid); } /// diff --git a/Content.Server/CriminalRecords/Systems/CriminalRecordsConsoleSystem.cs b/Content.Server/CriminalRecords/Systems/CriminalRecordsConsoleSystem.cs index 4290726cc40..4389c68c049 100644 --- a/Content.Server/CriminalRecords/Systems/CriminalRecordsConsoleSystem.cs +++ b/Content.Server/CriminalRecords/Systems/CriminalRecordsConsoleSystem.cs @@ -77,7 +77,7 @@ private void OnChangeStatus(Entity ent, ref Cri msg.Status == SecurityStatus.Suspected != (msg.Reason != null)) return; - if (!CheckSelected(ent, msg.Session, out var mob, out var key)) + if (!CheckSelected(ent, msg.Actor, out var mob, out var key)) return; if (!_stationRecords.TryGetRecord(key.Value, out var record) || record.Status == msg.Status) @@ -150,7 +150,7 @@ private void OnChangeStatus(Entity ent, ref Cri private void OnAddHistory(Entity ent, ref CriminalRecordAddHistory msg) { - if (!CheckSelected(ent, msg.Session, out _, out var key)) + if (!CheckSelected(ent, msg.Actor, out _, out var key)) return; var line = msg.Line.Trim(); @@ -167,7 +167,7 @@ private void OnAddHistory(Entity ent, ref Crimi private void OnDeleteHistory(Entity ent, ref CriminalRecordDeleteHistory msg) { - if (!CheckSelected(ent, msg.Session, out _, out var key)) + if (!CheckSelected(ent, msg.Actor, out _, out var key)) return; if (!_criminalRecords.TryDeleteHistory(key.Value, msg.Index)) @@ -185,7 +185,7 @@ private void UpdateUserInterface(Entity ent) if (!TryComp(owningStation, out var stationRecords)) { - _ui.TrySetUiState(uid, CriminalRecordsConsoleKey.Key, new CriminalRecordsConsoleState()); + _ui.SetUiState(uid, CriminalRecordsConsoleKey.Key, new CriminalRecordsConsoleState()); return; } @@ -201,24 +201,22 @@ private void UpdateUserInterface(Entity ent) state.SelectedKey = id; } - _ui.TrySetUiState(uid, CriminalRecordsConsoleKey.Key, state); + _ui.SetUiState(uid, CriminalRecordsConsoleKey.Key, state); } /// /// Boilerplate that most actions use, if they require that a record be selected. /// Obviously shouldn't be used for selecting records. /// - private bool CheckSelected(Entity ent, ICommonSession session, + private bool CheckSelected(Entity ent, EntityUid user, [NotNullWhen(true)] out EntityUid? mob, [NotNullWhen(true)] out StationRecordKey? key) { key = null; mob = null; - if (session.AttachedEntity is not { } user) - return false; if (!_access.IsAllowed(user, ent)) { - _popup.PopupEntity(Loc.GetString("criminal-records-permission-denied"), ent, session); + _popup.PopupEntity(Loc.GetString("criminal-records-permission-denied"), ent, user); return false; } @@ -253,6 +251,8 @@ public void CheckNewIdentity(EntityUid uid) { var name = Identity.Name(uid, EntityManager); var xform = Transform(uid); + + // TODO use the entity's station? Not the station of the map that it happens to currently be on? var station = _station.GetStationInMap(xform.MapID); if (station != null && _stationRecords.GetRecordByName(station.Value, name) is { } id) diff --git a/Content.Server/CriminalRecords/Systems/CriminalRecordsHackerSystem.cs b/Content.Server/CriminalRecords/Systems/CriminalRecordsHackerSystem.cs new file mode 100644 index 00000000000..91285a1ca73 --- /dev/null +++ b/Content.Server/CriminalRecords/Systems/CriminalRecordsHackerSystem.cs @@ -0,0 +1,62 @@ +using Content.Server.Chat.Systems; +using Content.Server.Station.Systems; +using Content.Server.StationRecords.Systems; +using Content.Shared.CriminalRecords; +using Content.Shared.CriminalRecords.Components; +using Content.Shared.CriminalRecords.Systems; +using Content.Shared.Dataset; +using Content.Shared.Security; +using Robust.Shared.Prototypes; +using Robust.Shared.Random; + +namespace Content.Server.CriminalRecords.Systems; + +public sealed class CriminalRecordsHackerSystem : SharedCriminalRecordsHackerSystem +{ + [Dependency] private readonly ChatSystem _chat = default!; + [Dependency] private readonly IPrototypeManager _proto = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly StationSystem _station = default!; + [Dependency] private readonly StationRecordsSystem _records = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnDoAfter); + } + + private void OnDoAfter(Entity ent, ref CriminalRecordsHackDoAfterEvent args) + { + if (args.Cancelled || args.Handled || args.Target == null) + return; + + if (_station.GetOwningStation(ent) is not {} station) + return; + + var reasons = _proto.Index(ent.Comp.Reasons); + foreach (var (key, record) in _records.GetRecordsOfType(station)) + { + var reason = _random.Pick(reasons.Values); + record.Status = SecurityStatus.Wanted; + record.Reason = reason; + // no radio message since spam + // no history since lazy and its easy to remove anyway + // main damage with this is existing arrest warrants are lost and to anger beepsky + } + + _chat.DispatchGlobalAnnouncement(Loc.GetString(ent.Comp.Announcement), playSound: true, colorOverride: Color.Red); + + // once is enough + RemComp(ent); + + var ev = new CriminalRecordsHackedEvent(ent, args.Target.Value); + RaiseLocalEvent(args.User, ref ev); + } +} + +/// +/// Raised on the user after hacking a criminal records console. +/// +[ByRefEvent] +public record struct CriminalRecordsHackedEvent(EntityUid User, EntityUid Target); diff --git a/Content.Server/Damage/Systems/DamageOnToolInteractSystem.cs b/Content.Server/Damage/Systems/DamageOnToolInteractSystem.cs index 264ec4a8ec4..42676c1891c 100644 --- a/Content.Server/Damage/Systems/DamageOnToolInteractSystem.cs +++ b/Content.Server/Damage/Systems/DamageOnToolInteractSystem.cs @@ -1,7 +1,5 @@ using Content.Server.Administration.Logs; using Content.Server.Damage.Components; -using Content.Server.Tools.Components; -using Content.Shared.Item; using Content.Shared.Damage; using Content.Shared.Database; using Content.Shared.Interaction; diff --git a/Content.Server/Database/ServerDbBase.cs b/Content.Server/Database/ServerDbBase.cs index 78d75695cc7..2207c2b217d 100644 --- a/Content.Server/Database/ServerDbBase.cs +++ b/Content.Server/Database/ServerDbBase.cs @@ -17,6 +17,8 @@ using Robust.Shared.Enums; using Robust.Shared.Network; using Robust.Shared.Utility; +using Content.Shared.Roles; +using Robust.Shared.Prototypes; using Content.Shared.Nuclear14.Special; namespace Content.Server.Database @@ -32,9 +34,11 @@ public ServerDbBase(ISawmill opsLog) } #region Preferences - public async Task GetPlayerPreferencesAsync(NetUserId userId) + public async Task GetPlayerPreferencesAsync( + NetUserId userId, + CancellationToken cancel = default) { - await using var db = await GetDb(); + await using var db = await GetDb(cancel); var prefs = await db.DbContext .Preference @@ -44,7 +48,7 @@ public ServerDbBase(ISawmill opsLog) .Include(p => p.Profiles).ThenInclude(h => h.Traits) .Include(p => p.Profiles).ThenInclude(h => h.Loadouts) .AsSingleQuery() - .SingleOrDefaultAsync(p => p.UserId == userId.UserId); + .SingleOrDefaultAsync(p => p.UserId == userId.UserId, cancel); if (prefs is null) return null; @@ -156,7 +160,7 @@ public async Task InitPrefsAsync(NetUserId userId, ICharacter await db.DbContext.SaveChangesAsync(); - return new PlayerPreferences(new[] {new KeyValuePair(0, defaultProfile)}, 0, Color.FromHex(prefs.AdminOOCColor)); + return new PlayerPreferences(new[] { new KeyValuePair(0, defaultProfile) }, 0, Color.FromHex(prefs.AdminOOCColor)); } public async Task DeleteSlotAndSetSelectedIndex(NetUserId userId, int deleteSlot, int newSlot) @@ -234,13 +238,13 @@ private static HumanoidCharacterProfile ConvertProfiles(Profile profile) profile.CharacterName, profile.FlavorText, profile.Species, + profile.CustomSpecieName, profile.Height, profile.Width, profile.Age, sex, gender, - new HumanoidCharacterAppearance - ( + new HumanoidCharacterAppearance( profile.HairName, Color.FromHex(profile.HairColor), profile.FacialHairName, @@ -249,14 +253,15 @@ private static HumanoidCharacterProfile ConvertProfiles(Profile profile) Color.FromHex(profile.SkinColor), markings ), - clothing, - backpack, spawnPriority, jobs, + clothing, + backpack, (PreferenceUnavailableMode) profile.PreferenceUnavailable, + antags.ToHashSet(), + traits.ToHashSet(), + loadouts.ToHashSet(), antags.ToList(), - traits.ToList(), - loadouts.ToList(), specials // Nuclear14 Special ); } @@ -275,6 +280,7 @@ private static Profile ConvertProfiles(HumanoidCharacterProfile humanoid, int sl profile.CharacterName = humanoid.Name; profile.FlavorText = humanoid.FlavorText; profile.Species = humanoid.Species; + profile.CustomSpecieName = humanoid.Customspeciename; profile.Age = humanoid.Age; profile.Sex = humanoid.Sex.ToString(); profile.Gender = humanoid.Gender.ToString(); @@ -298,7 +304,7 @@ private static Profile ConvertProfiles(HumanoidCharacterProfile humanoid, int sl profile.Jobs.AddRange( humanoid.JobPriorities .Where(j => j.Value != JobPriority.Never) - .Select(j => new Job {JobName = j.Key, Priority = (DbJobPriority) j.Value}) + .Select(j => new Job { JobName = j.Key, Priority = (DbJobPriority) j.Value }) ); // Nuclear14 Special profile.Specials.AddRange( @@ -311,19 +317,19 @@ private static Profile ConvertProfiles(HumanoidCharacterProfile humanoid, int sl profile.Antags.Clear(); profile.Antags.AddRange( humanoid.AntagPreferences - .Select(a => new Antag {AntagName = a}) + .Select(a => new Antag { AntagName = a }) ); profile.Traits.Clear(); profile.Traits.AddRange( humanoid.TraitPreferences - .Select(t => new Trait {TraitName = t}) + .Select(t => new Trait { TraitName = t }) ); profile.Loadouts.Clear(); profile.Loadouts.AddRange( humanoid.LoadoutPreferences - .Select(t => new Loadout {LoadoutName = t}) + .Select(t => new Loadout { LoadoutName = t }) ); return profile; @@ -507,13 +513,13 @@ public async Task EditServerRoleBan(int id, string reason, NoteSeverity severity #endregion #region Playtime - public async Task> GetPlayTimes(Guid player) + public async Task> GetPlayTimes(Guid player, CancellationToken cancel) { - await using var db = await GetDb(); + await using var db = await GetDb(cancel); return await db.DbContext.PlayTime .Where(p => p.PlayerId == player) - .ToListAsync(); + .ToListAsync(cancel); } public async Task UpdatePlayTimes(IReadOnlyCollection updates) @@ -665,7 +671,7 @@ public async Task AddServerBanHitsAsync(int connection, IEnumerable GetAdminDataForAsync(NetUserId userId, CancellationToken cancel) { - await using var db = await GetDb(); + await using var db = await GetDb(cancel); return await db.DbContext.Admin .Include(p => p.Flags) @@ -680,7 +686,7 @@ public async Task AddServerBanHitsAsync(int connection, IEnumerable GetAdminRankDataForAsync(int id, CancellationToken cancel = default) { - await using var db = await GetDb(); + await using var db = await GetDb(cancel); return await db.DbContext.AdminRank .Include(r => r.Flags) @@ -689,7 +695,7 @@ public async Task AddServerBanHitsAsync(int connection, IEnumerable a.UserId == userId.UserId, cancel); db.DbContext.Admin.Remove(admin); @@ -699,7 +705,7 @@ public async Task RemoveAdminAsync(NetUserId userId, CancellationToken cancel) public async Task AddAdminAsync(Admin admin, CancellationToken cancel) { - await using var db = await GetDb(); + await using var db = await GetDb(cancel); db.DbContext.Admin.Add(admin); @@ -708,7 +714,7 @@ public async Task AddAdminAsync(Admin admin, CancellationToken cancel) public async Task UpdateAdminAsync(Admin admin, CancellationToken cancel) { - await using var db = await GetDb(); + await using var db = await GetDb(cancel); var existing = await db.DbContext.Admin.Include(a => a.Flags).SingleAsync(a => a.UserId == admin.UserId, cancel); existing.Flags = admin.Flags; @@ -720,7 +726,7 @@ public async Task UpdateAdminAsync(Admin admin, CancellationToken cancel) public async Task RemoveAdminRankAsync(int rankId, CancellationToken cancel) { - await using var db = await GetDb(); + await using var db = await GetDb(cancel); var admin = await db.DbContext.AdminRank.SingleAsync(a => a.Id == rankId, cancel); db.DbContext.AdminRank.Remove(admin); @@ -730,7 +736,7 @@ public async Task RemoveAdminRankAsync(int rankId, CancellationToken cancel) public async Task AddAdminRankAsync(AdminRank rank, CancellationToken cancel) { - await using var db = await GetDb(); + await using var db = await GetDb(cancel); db.DbContext.AdminRank.Add(rank); @@ -803,7 +809,7 @@ INSERT INTO player_round (players_id, rounds_id) VALUES ({players[player]}, {id} public async Task UpdateAdminRankAsync(AdminRank rank, CancellationToken cancel) { - await using var db = await GetDb(); + await using var db = await GetDb(cancel); var existing = await db.DbContext.AdminRank .Include(r => r.Flags) @@ -1260,7 +1266,7 @@ ban.Unban is null ban.LastEditedAt, ban.ExpirationTime, ban.Hidden, - new [] { ban.RoleId.Replace(BanManager.JobPrefix, null) }, + new[] { ban.RoleId.Replace(BanManager.JobPrefix, null) }, MakePlayerRecord(unbanningAdmin), ban.Unban?.UnbanTime); } @@ -1424,10 +1430,10 @@ public async Task> GetActiveWatchlists(Guid player) protected async Task> GetActiveWatchlistsImpl(DbGuard db, Guid player) { var entities = await (from watchlist in db.DbContext.AdminWatchlists - where watchlist.PlayerUserId == player && - !watchlist.Deleted && - (watchlist.ExpirationTime == null || DateTime.UtcNow < watchlist.ExpirationTime) - select watchlist) + where watchlist.PlayerUserId == player && + !watchlist.Deleted && + (watchlist.ExpirationTime == null || DateTime.UtcNow < watchlist.ExpirationTime) + select watchlist) .Include(note => note.Round) .ThenInclude(r => r!.Server) .Include(note => note.CreatedBy) @@ -1452,9 +1458,9 @@ public async Task> GetMessages(Guid player) protected async Task> GetMessagesImpl(DbGuard db, Guid player) { var entities = await (from message in db.DbContext.AdminMessages - where message.PlayerUserId == player && !message.Deleted && - (message.ExpirationTime == null || DateTime.UtcNow < message.ExpirationTime) - select message).Include(note => note.Round) + where message.PlayerUserId == player && !message.Deleted && + (message.ExpirationTime == null || DateTime.UtcNow < message.ExpirationTime) + select message).Include(note => note.Round) .ThenInclude(r => r!.Server) .Include(note => note.CreatedBy) .Include(note => note.LastEditedBy) @@ -1533,7 +1539,7 @@ protected async Task> GetGroupedServerRoleBansAsNo // Client side query, as EF can't do groups yet var bansEnumerable = bansQuery - .GroupBy(ban => new { ban.BanTime, CreatedBy = (Player?)ban.CreatedBy, ban.Reason, Unbanned = ban.Unban == null }) + .GroupBy(ban => new { ban.BanTime, CreatedBy = (Player?) ban.CreatedBy, ban.Reason, Unbanned = ban.Unban == null }) .Select(banGroup => banGroup) .ToArray(); @@ -1586,7 +1592,9 @@ public async Task HasPendingModelChanges() return db.DbContext.Database.HasPendingModelChanges(); } - protected abstract Task GetDb([CallerMemberName] string? name = null); + protected abstract Task GetDb( + CancellationToken cancel = default, + [CallerMemberName] string? name = null); protected void LogDbOp(string? name) { @@ -1599,5 +1607,64 @@ protected abstract class DbGuard : IAsyncDisposable public abstract ValueTask DisposeAsync(); } + + #region Job Whitelists + + public async Task AddJobWhitelist(Guid player, ProtoId job) + { + await using var db = await GetDb(); + var exists = await db.DbContext.RoleWhitelists + .Where(w => w.PlayerUserId == player) + .Where(w => w.RoleId == job.Id) + .AnyAsync(); + + if (exists) + return false; + + var whitelist = new RoleWhitelist + { + PlayerUserId = player, + RoleId = job + }; + db.DbContext.RoleWhitelists.Add(whitelist); + await db.DbContext.SaveChangesAsync(); + return true; + } + + public async Task> GetJobWhitelists(Guid player, CancellationToken cancel) + { + await using var db = await GetDb(cancel); + return await db.DbContext.RoleWhitelists + .Where(w => w.PlayerUserId == player) + .Select(w => w.RoleId) + .ToListAsync(cancellationToken: cancel); + } + + public async Task IsJobWhitelisted(Guid player, ProtoId job) + { + await using var db = await GetDb(); + return await db.DbContext.RoleWhitelists + .Where(w => w.PlayerUserId == player) + .Where(w => w.RoleId == job.Id) + .AnyAsync(); + } + + public async Task RemoveJobWhitelist(Guid player, ProtoId job) + { + await using var db = await GetDb(); + var entry = await db.DbContext.RoleWhitelists + .Where(w => w.PlayerUserId == player) + .Where(w => w.RoleId == job.Id) + .SingleOrDefaultAsync(); + + if (entry == null) + return false; + + db.DbContext.RoleWhitelists.Remove(entry); + await db.DbContext.SaveChangesAsync(); + return true; + } + + #endregion } } diff --git a/Content.Server/Database/ServerDbManager.cs b/Content.Server/Database/ServerDbManager.cs index 554dd307437..a9c5e8c43ac 100644 --- a/Content.Server/Database/ServerDbManager.cs +++ b/Content.Server/Database/ServerDbManager.cs @@ -19,6 +19,8 @@ using Robust.Shared.Network; using LogLevel = Robust.Shared.Log.LogLevel; using MSLogLevel = Microsoft.Extensions.Logging.LogLevel; +using Content.Shared.Roles; +using Robust.Shared.Prototypes; namespace Content.Server.Database { @@ -29,7 +31,11 @@ public interface IServerDbManager void Shutdown(); #region Preferences - Task InitPrefsAsync(NetUserId userId, ICharacterProfile defaultProfile); + Task InitPrefsAsync( + NetUserId userId, + ICharacterProfile defaultProfile, + CancellationToken cancel); + Task SaveSelectedCharacterIndexAsync(NetUserId userId, int index); Task SaveCharacterSlotAsync(NetUserId userId, ICharacterProfile? profile, int slot); @@ -38,7 +44,7 @@ public interface IServerDbManager // Single method for two operations for transaction. Task DeleteSlotAndSetSelectedIndex(NetUserId userId, int deleteSlot, int newSlot); - Task GetPlayerPreferencesAsync(NetUserId userId); + Task GetPlayerPreferencesAsync(NetUserId userId, CancellationToken cancel); #endregion #region User Ids @@ -83,7 +89,7 @@ Task> GetServerBansAsync( IPAddress? address, NetUserId? userId, ImmutableArray? hwId, - bool includeUnbanned=true); + bool includeUnbanned = true); Task AddServerBanAsync(ServerBanDef serverBan); Task AddServerUnbanAsync(ServerUnbanDef serverBan); @@ -157,8 +163,9 @@ public Task EditServerRoleBan( /// Look up a player's role timers. /// /// The player to get the role timer information from. + /// /// All role timers belonging to the player. - Task> GetPlayTimes(Guid player); + Task> GetPlayTimes(Guid player, CancellationToken cancel = default); /// /// Update play time information in bulk. @@ -285,6 +292,18 @@ Task AddConnectionLogAsync( Task MarkMessageAsSeen(int id, bool dismissedToo); #endregion + + #region Job Whitelists + + Task AddJobWhitelist(Guid player, ProtoId job); + + + Task> GetJobWhitelists(Guid player, CancellationToken cancel = default); + Task IsJobWhitelisted(Guid player, ProtoId job); + + Task RemoveJobWhitelist(Guid player, ProtoId job); + + #endregion } public sealed class ServerDbManager : IServerDbManager @@ -346,7 +365,10 @@ public void Shutdown() _sqliteInMemoryConnection?.Dispose(); } - public Task InitPrefsAsync(NetUserId userId, ICharacterProfile defaultProfile) + public Task InitPrefsAsync( + NetUserId userId, + ICharacterProfile defaultProfile, + CancellationToken cancel) { DbWriteOpsMetric.Inc(); return RunDbCommand(() => _db.InitPrefsAsync(userId, defaultProfile)); @@ -376,10 +398,10 @@ public Task SaveAdminOOCColorAsync(NetUserId userId, Color color) return RunDbCommand(() => _db.SaveAdminOOCColorAsync(userId, color)); } - public Task GetPlayerPreferencesAsync(NetUserId userId) + public Task GetPlayerPreferencesAsync(NetUserId userId, CancellationToken cancel) { DbReadOpsMetric.Inc(); - return RunDbCommand(() => _db.GetPlayerPreferencesAsync(userId)); + return RunDbCommand(() => _db.GetPlayerPreferencesAsync(userId, cancel)); } public Task AssignUserIdAsync(string name, NetUserId userId) @@ -413,7 +435,7 @@ public Task> GetServerBansAsync( IPAddress? address, NetUserId? userId, ImmutableArray? hwId, - bool includeUnbanned=true) + bool includeUnbanned = true) { DbReadOpsMetric.Inc(); return RunDbCommand(() => _db.GetServerBansAsync(address, userId, hwId, includeUnbanned)); @@ -487,10 +509,10 @@ public Task EditServerRoleBan(int id, string reason, NoteSeverity severity, Date #region Playtime - public Task> GetPlayTimes(Guid player) + public Task> GetPlayTimes(Guid player, CancellationToken cancel) { DbReadOpsMetric.Inc(); - return RunDbCommand(() => _db.GetPlayTimes(player)); + return RunDbCommand(() => _db.GetPlayTimes(player, cancel)); } public Task UpdatePlayTimes(IReadOnlyCollection updates) @@ -784,7 +806,7 @@ public Task AddAdminMessage(int? roundId, Guid player, TimeSpan playtimeAtN return RunDbCommand(() => _db.GetServerRoleBanAsNoteAsync(id)); } - public Task> GetAllAdminRemarks(Guid player) + public Task> GetAllAdminRemarks(Guid player) { DbReadOpsMetric.Inc(); return RunDbCommand(() => _db.GetAllAdminRemarks(player)); @@ -861,6 +883,30 @@ public Task MarkMessageAsSeen(int id, bool dismissedToo) return RunDbCommand(() => _db.MarkMessageAsSeen(id, dismissedToo)); } + public Task AddJobWhitelist(Guid player, ProtoId job) + { + DbWriteOpsMetric.Inc(); + return RunDbCommand(() => _db.AddJobWhitelist(player, job)); + } + + public Task> GetJobWhitelists(Guid player, CancellationToken cancel = default) + { + DbReadOpsMetric.Inc(); + return RunDbCommand(() => _db.GetJobWhitelists(player, cancel)); + } + + public Task IsJobWhitelisted(Guid player, ProtoId job) + { + DbReadOpsMetric.Inc(); + return RunDbCommand(() => _db.IsJobWhitelisted(player, job)); + } + + public Task RemoveJobWhitelist(Guid player, ProtoId job) + { + DbWriteOpsMetric.Inc(); + return RunDbCommand(() => _db.RemoveJobWhitelist(player, job)); + } + // Wrapper functions to run DB commands from the thread pool. // This will avoid SynchronizationContext capturing and avoid running CPU work on the main thread. // For SQLite, this will also enable read parallelization (within limits). diff --git a/Content.Server/Database/ServerDbPostgres.cs b/Content.Server/Database/ServerDbPostgres.cs index c81e735868a..fd4699fff4e 100644 --- a/Content.Server/Database/ServerDbPostgres.cs +++ b/Content.Server/Database/ServerDbPostgres.cs @@ -527,22 +527,26 @@ protected override DateTime NormalizeDatabaseTime(DateTime time) return time; } - private async Task GetDbImpl([CallerMemberName] string? name = null) + private async Task GetDbImpl( + CancellationToken cancel = default, + [CallerMemberName] string? name = null) { LogDbOp(name); await _dbReadyTask; - await _prefsSemaphore.WaitAsync(); + await _prefsSemaphore.WaitAsync(cancel); if (_msLag > 0) - await Task.Delay(_msLag); + await Task.Delay(_msLag, cancel); return new DbGuardImpl(this, new PostgresServerDbContext(_options)); } - protected override async Task GetDb([CallerMemberName] string? name = null) + protected override async Task GetDb( + CancellationToken cancel = default, + [CallerMemberName] string? name = null) { - return await GetDbImpl(name); + return await GetDbImpl(cancel, name); } private sealed class DbGuardImpl : DbGuard diff --git a/Content.Server/Database/ServerDbSqlite.cs b/Content.Server/Database/ServerDbSqlite.cs index 88ecf820020..ffec90bb43d 100644 --- a/Content.Server/Database/ServerDbSqlite.cs +++ b/Content.Server/Database/ServerDbSqlite.cs @@ -439,7 +439,7 @@ public override async Task AddConnectionLogAsync( public override async Task<((Admin, string? lastUserName)[] admins, AdminRank[])> GetAllAdminAndRanksAsync( CancellationToken cancel) { - await using var db = await GetDbImpl(); + await using var db = await GetDbImpl(cancel); var admins = await db.SqliteDbContext.Admin .Include(a => a.Flags) @@ -514,23 +514,27 @@ protected override DateTime NormalizeDatabaseTime(DateTime time) return DateTime.SpecifyKind(time, DateTimeKind.Utc); } - private async Task GetDbImpl([CallerMemberName] string? name = null) + private async Task GetDbImpl( + CancellationToken cancel = default, + [CallerMemberName] string? name = null) { LogDbOp(name); await _dbReadyTask; if (_msDelay > 0) - await Task.Delay(_msDelay); + await Task.Delay(_msDelay, cancel); - await _prefsSemaphore.WaitAsync(); + await _prefsSemaphore.WaitAsync(cancel); var dbContext = new SqliteServerDbContext(_options()); return new DbGuardImpl(this, dbContext); } - protected override async Task GetDb([CallerMemberName] string? name = null) + protected override async Task GetDb( + CancellationToken cancel = default, + [CallerMemberName] string? name = null) { - return await GetDbImpl(name).ConfigureAwait(false); + return await GetDbImpl(cancel, name).ConfigureAwait(false); } private sealed class DbGuardImpl : DbGuard @@ -569,9 +573,9 @@ public ConcurrencySemaphore(int maxCount, bool synchronous) _semaphore = new SemaphoreSlim(maxCount, maxCount); } - public Task WaitAsync() + public Task WaitAsync(CancellationToken cancel = default) { - var task = _semaphore.WaitAsync(); + var task = _semaphore.WaitAsync(cancel); if (_synchronous) { diff --git a/Content.Server/Database/UserDbDataManager.cs b/Content.Server/Database/UserDbDataManager.cs index f8b1611fd57..fde610a6fdd 100644 --- a/Content.Server/Database/UserDbDataManager.cs +++ b/Content.Server/Database/UserDbDataManager.cs @@ -1,6 +1,5 @@ using System.Threading; using System.Threading.Tasks; -using Content.Server.Players.PlayTimeTracking; using Content.Server.Preferences.Managers; using Robust.Shared.Network; using Robust.Shared.Player; @@ -16,17 +15,23 @@ namespace Content.Server.Database; /// Actual loading code is handled by separate managers such as . /// This manager is simply a centralized "is loading done" controller for other code to rely on. /// -public sealed class UserDbDataManager +public sealed class UserDbDataManager : IPostInjectInit { - [Dependency] private readonly IServerPreferencesManager _prefs = default!; - [Dependency] private readonly PlayTimeTrackingManager _playTimeTracking = default!; + [Dependency] private readonly ILogManager _logManager = default!; private readonly Dictionary _users = new(); + private readonly List _onLoadPlayer = []; + private readonly List _onFinishLoad = []; + private readonly List _onPlayerDisconnect = []; + + private ISawmill _sawmill = default!; // TODO: Ideally connected/disconnected would be subscribed to IPlayerManager directly, // but this runs into ordering issues with game ticker. public void ClientConnected(ICommonSession session) { + _sawmill.Verbose($"Initiating load for user {session}"); + DebugTools.Assert(!_users.ContainsKey(session.UserId), "We should not have any cached data on client connect."); var cts = new CancellationTokenSource(); @@ -45,17 +50,67 @@ public void ClientDisconnected(ICommonSession session) data.Cancel.Cancel(); data.Cancel.Dispose(); - _prefs.OnClientDisconnected(session); - _playTimeTracking.ClientDisconnected(session); + foreach (var onDisconnect in _onPlayerDisconnect) + { + onDisconnect(session); + } } private async Task Load(ICommonSession session, CancellationToken cancel) { - await Task.WhenAll( - _prefs.LoadData(session, cancel), - _playTimeTracking.LoadData(session, cancel)); + // The task returned by this function is only ever observed by callers of WaitLoadComplete, + // which doesn't even happen currently if the lobby is enabled. + // As such, this task must NOT throw a non-cancellation error! + try + { + var tasks = new List(); + foreach (var action in _onLoadPlayer) + { + tasks.Add(action(session, cancel)); + } + + await Task.WhenAll(tasks); + + cancel.ThrowIfCancellationRequested(); + foreach (var action in _onFinishLoad) + { + action(session); + } + + _sawmill.Verbose($"Load complete for user {session}"); + } + catch (OperationCanceledException) + { + _sawmill.Debug($"Load cancelled for user {session}"); + + // We can rethrow the cancellation. + // This will make the task returned by WaitLoadComplete() also return a cancellation. + throw; + } + catch (Exception e) + { + // Must catch all exceptions here, otherwise task may go unobserved. + _sawmill.Error($"Load of user data failed: {e}"); + + // Kick them from server, since something is hosed. Let them try again I guess. + session.Channel.Disconnect("Loading of server user data failed, this is a bug."); + + // We throw a OperationCanceledException so users of WaitLoadComplete() always see cancellation here. + throw new OperationCanceledException("Load of user data cancelled due to unknown error"); + } } + /// + /// Wait for all on-database data for a user to be loaded. + /// + /// + /// The task returned by this function may end up in a cancelled state + /// (throwing ) if the user disconnects while loading or an error occurs. + /// + /// + /// + /// A task that completes when all on-database data for a user has finished loading. + /// public Task WaitLoadComplete(ICommonSession session) { return _users[session.UserId].Task; @@ -63,7 +118,7 @@ public Task WaitLoadComplete(ICommonSession session) public bool IsLoadComplete(ICommonSession session) { - return GetLoadTask(session).IsCompleted; + return GetLoadTask(session).IsCompletedSuccessfully; } public Task GetLoadTask(ICommonSession session) @@ -71,5 +126,31 @@ public Task GetLoadTask(ICommonSession session) return _users[session.UserId].Task; } + void IPostInjectInit.PostInject() + { + _sawmill = _logManager.GetSawmill("userdb"); + } + + public void AddOnLoadPlayer(OnLoadPlayer action) + { + _onLoadPlayer.Add(action); + } + + public void AddOnFinishLoad(OnFinishLoad action) + { + _onFinishLoad.Add(action); + } + + public void AddOnPlayerDisconnect(OnPlayerDisconnect action) + { + _onPlayerDisconnect.Add(action); + } + private sealed record UserData(CancellationTokenSource Cancel, Task Task); + + public delegate Task OnLoadPlayer(ICommonSession player, CancellationToken cancel); + + public delegate void OnFinishLoad(ICommonSession player); + + public delegate void OnPlayerDisconnect(ICommonSession player); } diff --git a/Content.Server/DeltaV/Implants/SubdermalBionicSyrinxImplantSystem.cs b/Content.Server/DeltaV/Implants/SubdermalBionicSyrinxImplantSystem.cs index 30a894a2d11..203872518f2 100644 --- a/Content.Server/DeltaV/Implants/SubdermalBionicSyrinxImplantSystem.cs +++ b/Content.Server/DeltaV/Implants/SubdermalBionicSyrinxImplantSystem.cs @@ -1,113 +1,30 @@ -using Content.Server.Administration.Logs; -using Content.Server.Chat.Systems; -using Content.Server.Popups; -using Content.Server.VoiceMask; -using Content.Shared.Database; +using Content.Server.VoiceMask; using Content.Shared.Implants; -using Content.Shared.Implants.Components; -using Content.Shared.Popups; -using Content.Shared.Preferences; using Content.Shared.Tag; -using Content.Shared.VoiceMask; -using Robust.Server.GameObjects; -using Robust.Shared.Containers; namespace Content.Server.Implants; public sealed class SubdermalBionicSyrinxImplantSystem : EntitySystem { - [Dependency] private readonly UserInterfaceSystem _uiSystem = default!; - [Dependency] private readonly PopupSystem _popupSystem = default!; - [Dependency] private readonly IAdminLogManager _adminLogger = default!; [Dependency] private readonly TagSystem _tag = default!; [ValidatePrototypeId] - public const string BionicSyrinxImplant = "BionicSyrinxImplant"; - + private const string BionicSyrinxImplant = "BionicSyrinxImplant"; public override void Initialize() { base.Initialize(); - SubscribeLocalEvent(OnInsert); - SubscribeLocalEvent(OnSpeakerNameTransform); - SubscribeLocalEvent(OnChangeName); - // We need to remove the SyrinxVoiceMaskComponent from the owner before the implant - // is removed, so we need to execute before the SubdermalImplantSystem. - SubscribeLocalEvent(OnRemove, before: new[] { typeof(SubdermalImplantSystem) }); + SubscribeLocalEvent(OnInsert); } - private void OnInsert(EntityUid uid, VoiceMaskerComponent component, ImplantImplantedEvent args) + private void OnInsert(EntityUid uid, VoiceMaskComponent component, ImplantImplantedEvent args) { if (!args.Implanted.HasValue || !_tag.HasTag(args.Implant, BionicSyrinxImplant)) return; - var voicemask = EnsureComp(args.Implanted.Value); - voicemask.VoiceName = MetaData(args.Implanted.Value).EntityName; - Dirty(args.Implanted.Value, voicemask); - } - - private void OnRemove(EntityUid uid, VoiceMaskerComponent component, EntGotRemovedFromContainerMessage args) - { - if (!TryComp(uid, out var implanted) || implanted.ImplantedEntity == null) - return; - - RemComp(implanted.ImplantedEntity.Value); - } - - /// - /// Copy from VoiceMaskSystem, adapted to work with SyrinxVoiceMaskComponent. - /// - private void OnChangeName(EntityUid uid, SyrinxVoiceMaskComponent component, VoiceMaskChangeNameMessage message) - { - if (message.Name.Length > HumanoidCharacterProfile.MaxNameLength || message.Name.Length <= 0) - { - _popupSystem.PopupEntity(Loc.GetString("voice-mask-popup-failure"), uid, message.Session, PopupType.SmallCaution); - return; - } - - component.VoiceName = message.Name; - if (message.Session.AttachedEntity != null) - _adminLogger.Add(LogType.Action, LogImpact.Medium, $"{ToPrettyString(message.Session.AttachedEntity.Value):player} set voice of {ToPrettyString(uid):mask}: {component.VoiceName}"); - else - _adminLogger.Add(LogType.Action, LogImpact.Medium, $"Voice of {ToPrettyString(uid):mask} set: {component.VoiceName}"); - - _popupSystem.PopupEntity(Loc.GetString("voice-mask-popup-success"), uid, message.Session); - TrySetLastKnownName(uid, message.Name); - UpdateUI(uid, component); - } - - /// - /// Copy from VoiceMaskSystem, adapted to work with SyrinxVoiceMaskComponent. - /// - private void TrySetLastKnownName(EntityUid implanted, string lastName) - { - if (!HasComp(implanted) - || !TryComp(implanted, out var maskComp)) - return; - - maskComp.LastSetName = lastName; - } - - /// - /// Copy from VoiceMaskSystem, adapted to work with SyrinxVoiceMaskComponent. - /// - private void UpdateUI(EntityUid owner, SyrinxVoiceMaskComponent? component = null) - { - if (!Resolve(owner, ref component, logMissing: false)) - return; - - if (_uiSystem.TryGetUi(owner, VoiceMaskUIKey.Key, out var bui)) - _uiSystem.SetUiState(bui, new VoiceMaskBuiState(component.VoiceName, null)); - } - - /// - /// Copy from VoiceMaskSystem, adapted to work with SyrinxVoiceMaskComponent. - /// - private void OnSpeakerNameTransform(EntityUid uid, SyrinxVoiceMaskComponent component, TransformSpeakerNameEvent args) - { - if (component.Enabled) - args.Name = component.VoiceName; + // Update the name so it's the entities default name. You can't take it off like a voice mask so it's important! + component.VoiceMaskName = Name(args.Implanted.Value); } } diff --git a/Content.Server/DeltaV/ParadoxAnomaly/Systems/ParadoxAnomalySystem.cs b/Content.Server/DeltaV/ParadoxAnomaly/Systems/ParadoxAnomalySystem.cs index 477a3c56590..142669f84a2 100644 --- a/Content.Server/DeltaV/ParadoxAnomaly/Systems/ParadoxAnomalySystem.cs +++ b/Content.Server/DeltaV/ParadoxAnomaly/Systems/ParadoxAnomalySystem.cs @@ -6,7 +6,6 @@ using Content.Server.Psionics; using Content.Server.Spawners.Components; using Content.Server.Station.Systems; -using Content.Server.Terminator.Systems; using Content.Shared.Abilities.Psionics; using Content.Shared.Humanoid; using Content.Shared.Humanoid.Prototypes; @@ -38,7 +37,6 @@ public sealed class ParadoxAnomalySystem : EntitySystem [Dependency] private readonly SharedRoleSystem _role = default!; [Dependency] private readonly StationSystem _station = default!; [Dependency] private readonly StationSpawningSystem _stationSpawning = default!; - [Dependency] private readonly TerminatorSystem _terminator = default!; public override void Initialize() { @@ -123,7 +121,7 @@ private bool TrySpawnParadoxAnomaly(string rule, [NotNullWhen(true)] out EntityU var spawned = Spawn(species.Prototype, destination); // Set the kill target to the chosen player - _terminator.SetTarget(spawned, mindId); + // _terminator.SetTarget(spawned, mindId); _genericAntag.MakeAntag(spawned, rule); ////////////////////////// diff --git a/Content.Server/DeltaV/StationEvents/Components/GlimmerMobRuleComponent.cs b/Content.Server/DeltaV/StationEvents/Components/GlimmerMobRuleComponent.cs deleted file mode 100644 index bde0422a1ae..00000000000 --- a/Content.Server/DeltaV/StationEvents/Components/GlimmerMobRuleComponent.cs +++ /dev/null @@ -1,11 +0,0 @@ -using Content.Server.StationEvents.Events; -using Robust.Shared.Prototypes; - -namespace Content.Server.StationEvents.Components; - -[RegisterComponent, Access(typeof(GlimmerMobRule))] -public sealed partial class GlimmerMobRuleComponent : Component -{ - [DataField(required: true)] - public EntProtoId MobPrototype = string.Empty; -} diff --git a/Content.Server/DeltaV/StationEvents/Components/PirateRadioSpawnRuleComponent.cs b/Content.Server/DeltaV/StationEvents/Components/PirateRadioSpawnRuleComponent.cs deleted file mode 100644 index fb4c1751f61..00000000000 --- a/Content.Server/DeltaV/StationEvents/Components/PirateRadioSpawnRuleComponent.cs +++ /dev/null @@ -1,30 +0,0 @@ -using Content.Server.StationEvents.Events; - -namespace Content.Server.StationEvents.Components; - -[RegisterComponent, Access(typeof(PirateRadioSpawnRule))] -public sealed partial class PirateRadioSpawnRuleComponent : Component -{ - [DataField("PirateRadioShuttlePath")] - public string PirateRadioShuttlePath = "Maps/Shuttles/DeltaV/DV-pirateradio.yml"; - - [DataField("additionalRule")] - public EntityUid? AdditionalRule; - - [DataField("debrisCount")] - public int DebrisCount { get; set; } - - [DataField("distanceModifier")] - public float DistanceModifier { get; set; } - - [DataField("debrisDistanceModifier")] - public float DebrisDistanceModifier { get; set; } - - /// - /// "Stations of Unusual Size Constant", derived from the AABB.Width of Shoukou. - /// This Constant is used to check the size of a station relative to the reference point - /// - [DataField("sousk")] - public float SOUSK = 123.44f; - -} diff --git a/Content.Server/DeltaV/StationEvents/Events/GlimmerMobSpawnRule.cs b/Content.Server/DeltaV/StationEvents/Events/GlimmerMobSpawnRule.cs deleted file mode 100644 index 6849c508a1f..00000000000 --- a/Content.Server/DeltaV/StationEvents/Events/GlimmerMobSpawnRule.cs +++ /dev/null @@ -1,57 +0,0 @@ -using System.Linq; -using Content.Server.GameTicking.Components; -using Robust.Shared.Random; -using Content.Server.GameTicking.Rules.Components; -using Content.Server.NPC.Components; -using Content.Server.Psionics.Glimmer; -using Content.Server.StationEvents.Components; -using Content.Shared.Psionics.Glimmer; -using Content.Shared.Abilities.Psionics; - -namespace Content.Server.StationEvents.Events; - -public sealed class GlimmerMobRule : StationEventSystem -{ - [Dependency] private readonly IRobustRandom _robustRandom = default!; - [Dependency] private readonly GlimmerSystem _glimmerSystem = default!; - - - protected override void Started(EntityUid uid, GlimmerMobRuleComponent component, GameRuleComponent gameRule, GameRuleStartedEvent args) - { - base.Started(uid, component, gameRule, args); - - var glimmerSources = EntityQuery().ToList(); - var normalSpawnLocations = EntityQuery().ToList(); - var hiddenSpawnLocations = EntityQuery().ToList(); - - var baseCount = Math.Max(1, EntityQuery().Count() / 10); - int multiplier = Math.Max(1, (int) _glimmerSystem.GetGlimmerTier() - 2); - - var total = baseCount * multiplier; - - int i = 0; - while (i < total) - { - if (glimmerSources.Count != 0 && _robustRandom.Prob(0.4f)) - { - Spawn(component.MobPrototype, _robustRandom.Pick(glimmerSources).Item2.Coordinates); - i++; - continue; - } - - if (normalSpawnLocations.Count != 0) - { - Spawn(component.MobPrototype, _robustRandom.Pick(normalSpawnLocations).Item2.Coordinates); - i++; - continue; - } - - if (hiddenSpawnLocations.Count != 0) - { - Spawn(component.MobPrototype, _robustRandom.Pick(hiddenSpawnLocations).Item2.Coordinates); - i++; - continue; - } - } - } -} diff --git a/Content.Server/DeltaV/StationEvents/Events/PirateRadioSpawnRule.cs b/Content.Server/DeltaV/StationEvents/Events/PirateRadioSpawnRule.cs deleted file mode 100644 index 43e7c3b4747..00000000000 --- a/Content.Server/DeltaV/StationEvents/Events/PirateRadioSpawnRule.cs +++ /dev/null @@ -1,96 +0,0 @@ -using Robust.Server.GameObjects; -using Robust.Server.Maps; -using Robust.Shared.Configuration; -using Robust.Shared.Map; -using Robust.Shared.Map.Components; -using Robust.Shared.Prototypes; -using Robust.Shared.Random; -using Robust.Shared.Utility; -using Content.Server.GameTicking; -using Content.Server.GameTicking.Rules.Components; -using Content.Server.StationEvents.Components; -using Content.Server.Station.Components; -using Content.Shared.Salvage; -using Content.Shared.Random.Helpers; -using System.Linq; -using Content.Server.GameTicking.Components; -using Content.Shared.CCVar; - -namespace Content.Server.StationEvents.Events; - -public sealed class PirateRadioSpawnRule : StationEventSystem -{ - [Dependency] private readonly IEntityManager _entities = default!; - [Dependency] private readonly IMapManager _mapManager = default!; - [Dependency] private readonly MapLoaderSystem _map = default!; - [Dependency] private readonly IRobustRandom _random = default!; - [Dependency] private readonly IPrototypeManager _prototypeManager = default!; - [Dependency] private readonly IConfigurationManager _confMan = default!; - - protected override void Started(EntityUid uid, PirateRadioSpawnRuleComponent component, GameRuleComponent gameRule, GameRuleStartedEvent args) - { - //Start of Syndicate Listening Outpost spawning system - base.Started(uid, component, gameRule, args); - var xformQuery = GetEntityQuery(); - var aabbs = EntityQuery().SelectMany(x => - x.Grids.Select(x => - xformQuery.GetComponent(x).WorldMatrix.TransformBox(_entities.GetComponent(x).LocalAABB))) - .ToArray(); - if (aabbs.Length < 1) return; - var aabb = aabbs[0]; - - for (var i = 1; i < aabbs.Length; i++) - { - aabb.Union(aabbs[i]); - } - var distanceFactorCoefficient = component.SOUSK / aabb.Width; - var distanceModifier = Math.Clamp(component.DistanceModifier, 1, 25); - var distanceModifierNormalized = distanceModifier * distanceFactorCoefficient; - var a = MathF.Max(aabb.Height / 2f, aabb.Width / 2f) * distanceModifierNormalized; - var randomoffset = _random.NextVector2(a, a * 2.5f); - var outpostOptions = new MapLoadOptions - { - Offset = aabb.Center + randomoffset, - LoadMap = false, - }; - if (!_map.TryLoad(GameTicker.DefaultMap, component.PirateRadioShuttlePath, out var outpostids, outpostOptions)) return; - //End of Syndicate Listening Outpost spawning system - - //Start of Debris Field Generation - var debrisSpawner = _confMan.GetCVar(CCVars.WorldgenEnabled); - if (debrisSpawner == true) return; - var debrisCount = Math.Clamp(component.DebrisCount, 0, 6); - if (debrisCount == 0) return; - var debrisDistanceModifier = Math.Clamp(component.DebrisDistanceModifier, 3, 10); - foreach (var id in outpostids) - { - if (!TryComp(id, out var grid)) return; - var outpostaabb = _entities.GetComponent(id).WorldMatrix.TransformBox(grid.LocalAABB); - var b = MathF.Max(outpostaabb.Height / 2f, aabb.Width / 2f) * debrisDistanceModifier; - var k = 1; - while (k < debrisCount + 1) - { - var debrisRandomOffset = _random.NextVector2(b, b * 2.5f); - var randomer = _random.NextVector2(b, b * 5f); //Second random vector to ensure the outpost isn't perfectly centered in the debris field - var debrisOptions = new MapLoadOptions - { - Offset = outpostaabb.Center + debrisRandomOffset + randomer, - LoadMap = false, - }; - - var salvageProto = _random.Pick(_prototypeManager.EnumeratePrototypes().ToList()); - _map.TryLoad(GameTicker.DefaultMap, salvageProto.MapPath.ToString(), out _, debrisOptions); - k++; - } - } - //End of Debris Field generation - } - - protected override void Ended(EntityUid uid, PirateRadioSpawnRuleComponent component, GameRuleComponent gameRule, GameRuleEndedEvent args) - { - base.Ended(uid, component, gameRule, args); - - if (component.AdditionalRule != null) - GameTicker.EndGameRule(component.AdditionalRule.Value); - } -} diff --git a/Content.Server/DeltaV/VoiceMask/SyrinxVoiceMaskComponent.cs b/Content.Server/DeltaV/VoiceMask/SyrinxVoiceMaskComponent.cs deleted file mode 100644 index 97c04039f92..00000000000 --- a/Content.Server/DeltaV/VoiceMask/SyrinxVoiceMaskComponent.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace Content.Server.VoiceMask; - -[RegisterComponent] -public sealed partial class SyrinxVoiceMaskComponent : Component -{ - [ViewVariables(VVAccess.ReadWrite)] public bool Enabled = true; - - [ViewVariables(VVAccess.ReadWrite)] public string VoiceName = "Unknown"; -} diff --git a/Content.Server/Destructible/Thresholds/Behaviors/BurnBodyBehavior.cs b/Content.Server/Destructible/Thresholds/Behaviors/BurnBodyBehavior.cs index 28c4b2ef16e..f0499dc6a2d 100644 --- a/Content.Server/Destructible/Thresholds/Behaviors/BurnBodyBehavior.cs +++ b/Content.Server/Destructible/Thresholds/Behaviors/BurnBodyBehavior.cs @@ -17,12 +17,12 @@ public void Execute(EntityUid bodyId, DestructibleSystem system, EntityUid? caus var inventorySystem = system.EntityManager.System(); var sharedPopupSystem = system.EntityManager.System(); - if (!system.EntityManager.TryGetComponent(bodyId, out var comp)) - return; - - foreach (var item in inventorySystem.GetHandOrInventoryEntities(bodyId)) + if (system.EntityManager.TryGetComponent(bodyId, out var comp)) { - transformSystem.DropNextTo(item, bodyId); + foreach (var item in inventorySystem.GetHandOrInventoryEntities(bodyId)) + { + transformSystem.DropNextTo(item, bodyId); + } } sharedPopupSystem.PopupCoordinates(Loc.GetString("bodyburn-text-others", ("name", bodyId)), transformSystem.GetMoverCoordinates(bodyId), PopupType.LargeCaution); diff --git a/Content.Server/Destructible/Thresholds/Behaviors/PopupBehavior.cs b/Content.Server/Destructible/Thresholds/Behaviors/PopupBehavior.cs index 59589c19aa7..1d7ce24f600 100644 --- a/Content.Server/Destructible/Thresholds/Behaviors/PopupBehavior.cs +++ b/Content.Server/Destructible/Thresholds/Behaviors/PopupBehavior.cs @@ -1,6 +1,6 @@ using Content.Shared.Popups; -namespace Content.Server.Destructible.Thresholds.Behaviors; +namespace Content.Server.Destructible.Thresholds.Behaviors; /// /// Shows a popup for everyone. diff --git a/Content.Server/Destructible/Thresholds/Behaviors/SpawnGasBehavior.cs b/Content.Server/Destructible/Thresholds/Behaviors/SpawnGasBehavior.cs index fec93a87f45..81fb07ecfc9 100644 --- a/Content.Server/Destructible/Thresholds/Behaviors/SpawnGasBehavior.cs +++ b/Content.Server/Destructible/Thresholds/Behaviors/SpawnGasBehavior.cs @@ -1,4 +1,5 @@ using Content.Server.Atmos; +using Content.Shared.Atmos; using JetBrains.Annotations; namespace Content.Server.Destructible.Thresholds.Behaviors; diff --git a/Content.Server/DeviceLinking/Components/PowerSensorComponent.cs b/Content.Server/DeviceLinking/Components/PowerSensorComponent.cs index d9599546aea..b67a2fcd950 100644 --- a/Content.Server/DeviceLinking/Components/PowerSensorComponent.cs +++ b/Content.Server/DeviceLinking/Components/PowerSensorComponent.cs @@ -1,5 +1,6 @@ using Content.Server.DeviceLinking.Systems; using Content.Shared.DeviceLinking; +using Content.Shared.Power.Generator; using Content.Shared.Tools; using Robust.Shared.Audio; using Robust.Shared.Prototypes; diff --git a/Content.Server/DeviceLinking/Systems/SignalTimerSystem.cs b/Content.Server/DeviceLinking/Systems/SignalTimerSystem.cs index 0e214ee865a..14e0c75d962 100644 --- a/Content.Server/DeviceLinking/Systems/SignalTimerSystem.cs +++ b/Content.Server/DeviceLinking/Systems/SignalTimerSystem.cs @@ -48,9 +48,9 @@ private void OnAfterActivatableUIOpen(EntityUid uid, SignalTimerComponent compon { var time = TryComp(uid, out var active) ? active.TriggerTime : TimeSpan.Zero; - if (_ui.TryGetUi(uid, SignalTimerUiKey.Key, out var bui)) + if (_ui.HasUi(uid, SignalTimerUiKey.Key)) { - _ui.SetUiState(bui, new SignalTimerBoundUserInterfaceState(component.Label, + _ui.SetUiState(uid, SignalTimerUiKey.Key, new SignalTimerBoundUserInterfaceState(component.Label, TimeSpan.FromSeconds(component.Delay).Minutes.ToString("D2"), TimeSpan.FromSeconds(component.Delay).Seconds.ToString("D2"), component.CanEditLabel, @@ -70,9 +70,9 @@ public void Trigger(EntityUid uid, SignalTimerComponent signalTimer) _audio.PlayPvs(signalTimer.DoneSound, uid); _signalSystem.InvokePort(uid, signalTimer.TriggerPort); - if (_ui.TryGetUi(uid, SignalTimerUiKey.Key, out var bui)) + if (_ui.HasUi(uid, SignalTimerUiKey.Key)) { - _ui.SetUiState(bui, new SignalTimerBoundUserInterfaceState(signalTimer.Label, + _ui.SetUiState(uid, SignalTimerUiKey.Key, new SignalTimerBoundUserInterfaceState(signalTimer.Label, TimeSpan.FromSeconds(signalTimer.Delay).Minutes.ToString("D2"), TimeSpan.FromSeconds(signalTimer.Delay).Seconds.ToString("D2"), signalTimer.CanEditLabel, @@ -117,10 +117,7 @@ private void UpdateTimer() /// The entity that is interacted with. private bool IsMessageValid(EntityUid uid, BoundUserInterfaceMessage message) { - if (message.Session.AttachedEntity is not { Valid: true } mob) - return false; - - if (!_accessReader.IsAllowed(mob, uid)) + if (!_accessReader.IsAllowed(message.Actor, uid)) return false; return true; diff --git a/Content.Server/DeviceNetwork/Systems/NetworkConfiguratorSystem.cs b/Content.Server/DeviceNetwork/Systems/NetworkConfiguratorSystem.cs index 9a038f1c78a..dc1bf499df5 100644 --- a/Content.Server/DeviceNetwork/Systems/NetworkConfiguratorSystem.cs +++ b/Content.Server/DeviceNetwork/Systems/NetworkConfiguratorSystem.cs @@ -62,7 +62,6 @@ public override void Initialize() SubscribeLocalEvent(OnClearLinks); SubscribeLocalEvent(OnToggleLinks); SubscribeLocalEvent(OnConfigButtonPressed); - SubscribeLocalEvent(OnUiOpenAttempt); SubscribeLocalEvent(OnComponentRemoved); } @@ -89,7 +88,7 @@ public override void Update(float frameTime) continue; //The network configurator is a handheld device. There can only ever be an ui session open for the player holding the device. - _uiSystem.TryCloseAll(uid, NetworkConfiguratorUiKey.Configure); + _uiSystem.CloseUi(uid, NetworkConfiguratorUiKey.Configure); } } @@ -215,7 +214,7 @@ private bool AccessCheck(EntityUid target, EntityUid? user, NetworkConfiguratorC private void OnComponentRemoved(EntityUid uid, DeviceListComponent component, ComponentRemove args) { - _uiSystem.TryCloseAll(uid, NetworkConfiguratorUiKey.Configure); + _uiSystem.CloseUi(uid, NetworkConfiguratorUiKey.Configure); } /// @@ -433,7 +432,7 @@ private void OpenDeviceLinkUi(EntityUid configuratorUid, EntityUid? targetUid, E return; - _uiSystem.TryOpen(configuratorUid, NetworkConfiguratorUiKey.Link, actor.PlayerSession); + _uiSystem.OpenUi(configuratorUid, NetworkConfiguratorUiKey.Link, actor.PlayerSession); configurator.DeviceLinkTarget = targetUid; @@ -464,7 +463,7 @@ private void UpdateLinkUiState(EntityUid configuratorUid, EntityUid sourceUid, E var sinkAddress = Resolve(sinkUid, ref sinkNetworkComponent, false) ? sinkNetworkComponent.Address : ""; var state = new DeviceLinkUserInterfaceState(sources, sinks, links, sourceAddress, sinkAddress, defaults); - _uiSystem.TrySetUiState(configuratorUid, NetworkConfiguratorUiKey.Link, state); + _uiSystem.SetUiState(configuratorUid, NetworkConfiguratorUiKey.Link, state); } /// @@ -478,7 +477,7 @@ private void OpenDeviceListUi(EntityUid configuratorUid, EntityUid? targetUid, E if (Delay(configurator)) return; - if (!targetUid.HasValue || !TryComp(userUid, out ActorComponent? actor) || !AccessCheck(targetUid.Value, userUid, configurator)) + if (!targetUid.HasValue || !AccessCheck(targetUid.Value, userUid, configurator)) return; if (!TryComp(targetUid, out DeviceListComponent? list)) @@ -488,14 +487,13 @@ private void OpenDeviceListUi(EntityUid configuratorUid, EntityUid? targetUid, E configurator.ActiveDeviceList = targetUid; Dirty(configuratorUid, configurator); - if (!_uiSystem.TryGetUi(configuratorUid, NetworkConfiguratorUiKey.Configure, out var bui)) - return; - - if (_uiSystem.OpenUi(bui, actor.PlayerSession)) - _uiSystem.SetUiState(bui, new DeviceListUserInterfaceState( + if (_uiSystem.TryOpenUi(configuratorUid, NetworkConfiguratorUiKey.Configure, userUid)) + { + _uiSystem.SetUiState(configuratorUid, NetworkConfiguratorUiKey.Configure, new DeviceListUserInterfaceState( _deviceListSystem.GetDeviceList(configurator.ActiveDeviceList.Value) .Select(v => (v.Key, MetaData(v.Value).EntityName)).ToHashSet() )); + } } /// @@ -523,8 +521,7 @@ private void UpdateListUiState(EntityUid uid, NetworkConfiguratorComponent compo component.Devices.Remove(invalidDevice); } - if (_uiSystem.TryGetUi(uid, NetworkConfiguratorUiKey.List, out var bui)) - _uiSystem.SetUiState(bui, new NetworkConfiguratorUserInterfaceState(devices)); + _uiSystem.SetUiState(uid, NetworkConfiguratorUiKey.List, new NetworkConfiguratorUserInterfaceState(devices)); } /// @@ -565,10 +562,10 @@ public void OnDeviceListShutdown(Entity conf, Ent /// private void OnRemoveDevice(EntityUid uid, NetworkConfiguratorComponent component, NetworkConfiguratorRemoveDeviceMessage args) { - if (component.Devices.TryGetValue(args.Address, out var removedDevice) && args.Session.AttachedEntity != null) + if (component.Devices.TryGetValue(args.Address, out var removedDevice)) { _adminLogger.Add(LogType.DeviceLinking, LogImpact.Low, - $"{ToPrettyString(args.Session.AttachedEntity.Value):actor} removed buffered device {ToPrettyString(removedDevice):subject} from {ToPrettyString(uid):tool}"); + $"{ToPrettyString(args.Actor):actor} removed buffered device {ToPrettyString(removedDevice):subject} from {ToPrettyString(uid):tool}"); } component.Devices.Remove(args.Address); @@ -583,10 +580,8 @@ private void OnRemoveDevice(EntityUid uid, NetworkConfiguratorComponent componen /// private void OnClearDevice(EntityUid uid, NetworkConfiguratorComponent component, NetworkConfiguratorClearDevicesMessage args) { - if (args.Session.AttachedEntity != null) - _adminLogger.Add(LogType.DeviceLinking, LogImpact.Low, - $"{ToPrettyString(args.Session.AttachedEntity.Value):actor} cleared buffered devices from {ToPrettyString(uid):tool}"); - + _adminLogger.Add(LogType.DeviceLinking, LogImpact.Low, + $"{ToPrettyString(args.Actor):actor} cleared buffered devices from {ToPrettyString(uid):tool}"); ClearDevices(uid, component); UpdateListUiState(uid, component); @@ -609,9 +604,8 @@ private void OnClearLinks(EntityUid uid, NetworkConfiguratorComponent configurat if (!configurator.ActiveDeviceLink.HasValue || !configurator.DeviceLinkTarget.HasValue) return; - if (args.Session.AttachedEntity != null) - _adminLogger.Add(LogType.DeviceLinking, LogImpact.Low, - $"{ToPrettyString(args.Session.AttachedEntity.Value):actor} cleared links between {ToPrettyString(configurator.ActiveDeviceLink.Value):subject} and {ToPrettyString(configurator.DeviceLinkTarget.Value):subject2} with {ToPrettyString(uid):tool}"); + _adminLogger.Add(LogType.DeviceLinking, LogImpact.Low, + $"{ToPrettyString(args.Actor):actor} cleared links between {ToPrettyString(configurator.ActiveDeviceLink.Value):subject} and {ToPrettyString(configurator.DeviceLinkTarget.Value):subject2} with {ToPrettyString(uid):tool}"); if (HasComp(configurator.ActiveDeviceLink) && HasComp(configurator.DeviceLinkTarget)) { @@ -649,7 +643,7 @@ private void OnToggleLinks(EntityUid uid, NetworkConfiguratorComponent configura if (TryComp(configurator.ActiveDeviceLink, out DeviceLinkSourceComponent? activeSource) && TryComp(configurator.DeviceLinkTarget, out DeviceLinkSinkComponent? targetSink)) { _deviceLinkSystem.ToggleLink( - args.Session.AttachedEntity, + args.Actor, configurator.ActiveDeviceLink.Value, configurator.DeviceLinkTarget.Value, args.Source, args.Sink, @@ -660,7 +654,7 @@ private void OnToggleLinks(EntityUid uid, NetworkConfiguratorComponent configura else if (TryComp(configurator.DeviceLinkTarget, out DeviceLinkSourceComponent? targetSource) && TryComp(configurator.ActiveDeviceLink, out DeviceLinkSinkComponent? activeSink)) { _deviceLinkSystem.ToggleLink( - args.Session.AttachedEntity, + args.Actor, configurator.DeviceLinkTarget.Value, configurator.ActiveDeviceLink.Value, args.Source, args.Sink, @@ -687,7 +681,7 @@ private void OnSaveLinks(EntityUid uid, NetworkConfiguratorComponent configurato if (TryComp(configurator.ActiveDeviceLink, out DeviceLinkSourceComponent? activeSource) && TryComp(configurator.DeviceLinkTarget, out DeviceLinkSinkComponent? targetSink)) { _deviceLinkSystem.SaveLinks( - args.Session.AttachedEntity, + args.Actor, configurator.ActiveDeviceLink.Value, configurator.DeviceLinkTarget.Value, args.Links, @@ -705,7 +699,7 @@ private void OnSaveLinks(EntityUid uid, NetworkConfiguratorComponent configurato else if (TryComp(configurator.DeviceLinkTarget, out DeviceLinkSourceComponent? targetSource) && TryComp(configurator.ActiveDeviceLink, out DeviceLinkSinkComponent? activeSink)) { _deviceLinkSystem.SaveLinks( - args.Session.AttachedEntity, + args.Actor, configurator.DeviceLinkTarget.Value, configurator.ActiveDeviceLink.Value, args.Links, @@ -735,29 +729,25 @@ private void OnConfigButtonPressed(EntityUid uid, NetworkConfiguratorComponent c switch (args.ButtonKey) { case NetworkConfiguratorButtonKey.Set: - if (args.Session.AttachedEntity != null) - _adminLogger.Add(LogType.DeviceLinking, LogImpact.Low, - $"{ToPrettyString(args.Session.AttachedEntity.Value):actor} set device links to {ToPrettyString(component.ActiveDeviceList.Value):subject} with {ToPrettyString(uid):tool}"); + _adminLogger.Add(LogType.DeviceLinking, LogImpact.Low, + $"{ToPrettyString(args.Actor):actor} set device links to {ToPrettyString(component.ActiveDeviceList.Value):subject} with {ToPrettyString(uid):tool}"); result = _deviceListSystem.UpdateDeviceList(component.ActiveDeviceList.Value, new HashSet(component.Devices.Values)); break; case NetworkConfiguratorButtonKey.Add: - if (args.Session.AttachedEntity != null) - _adminLogger.Add(LogType.DeviceLinking, LogImpact.Low, - $"{ToPrettyString(args.Session.AttachedEntity.Value):actor} added device links to {ToPrettyString(component.ActiveDeviceList.Value):subject} with {ToPrettyString(uid):tool}"); + _adminLogger.Add(LogType.DeviceLinking, LogImpact.Low, + $"{ToPrettyString(args.Actor):actor} added device links to {ToPrettyString(component.ActiveDeviceList.Value):subject} with {ToPrettyString(uid):tool}"); result = _deviceListSystem.UpdateDeviceList(component.ActiveDeviceList.Value, new HashSet(component.Devices.Values), true); break; case NetworkConfiguratorButtonKey.Clear: - if (args.Session.AttachedEntity != null) - _adminLogger.Add(LogType.DeviceLinking, LogImpact.Low, - $"{ToPrettyString(args.Session.AttachedEntity.Value):actor} cleared device links from {ToPrettyString(component.ActiveDeviceList.Value):subject} with {ToPrettyString(uid):tool}"); + _adminLogger.Add(LogType.DeviceLinking, LogImpact.Low, + $"{ToPrettyString(args.Actor):actor} cleared device links from {ToPrettyString(component.ActiveDeviceList.Value):subject} with {ToPrettyString(uid):tool}"); result = _deviceListSystem.UpdateDeviceList(component.ActiveDeviceList.Value, new HashSet()); break; case NetworkConfiguratorButtonKey.Copy: - if (args.Session.AttachedEntity != null) - _adminLogger.Add(LogType.DeviceLinking, LogImpact.Low, - $"{ToPrettyString(args.Session.AttachedEntity.Value):actor} copied devices from {ToPrettyString(component.ActiveDeviceList.Value):subject} to {ToPrettyString(uid):tool}"); + _adminLogger.Add(LogType.DeviceLinking, LogImpact.Low, + $"{ToPrettyString(args.Actor):actor} copied devices from {ToPrettyString(component.ActiveDeviceList.Value):subject} to {ToPrettyString(uid):tool}"); ClearDevices(uid, component); @@ -783,8 +773,8 @@ private void OnConfigButtonPressed(EntityUid uid, NetworkConfiguratorComponent c _ => "error" }; - _popupSystem.PopupCursor(Loc.GetString(resultText), args.Session, PopupType.Medium); - _uiSystem.TrySetUiState( + _popupSystem.PopupCursor(Loc.GetString(resultText), args.Actor, PopupType.Medium); + _uiSystem.SetUiState( uid, NetworkConfiguratorUiKey.Configure, new DeviceListUserInterfaceState( diff --git a/Content.Server/Devour/DevourSystem.cs b/Content.Server/Devour/DevourSystem.cs index febbd093a6c..d9c50f260a3 100644 --- a/Content.Server/Devour/DevourSystem.cs +++ b/Content.Server/Devour/DevourSystem.cs @@ -1,3 +1,4 @@ +using Content.Server.Body.Components; using Content.Server.Body.Systems; using Content.Shared.Chemistry.Components; using Content.Shared.Devour; @@ -15,6 +16,7 @@ public override void Initialize() base.Initialize(); SubscribeLocalEvent(OnDoAfter); + SubscribeLocalEvent(OnGibContents); } private void OnDoAfter(EntityUid uid, DevourerComponent component, DevourDoAfterEvent args) @@ -45,5 +47,15 @@ private void OnDoAfter(EntityUid uid, DevourerComponent component, DevourDoAfter _audioSystem.PlayPvs(component.SoundDevour, uid); } + + private void OnGibContents(EntityUid uid, DevourerComponent component, ref BeingGibbedEvent args) + { + if (!component.ShouldStoreDevoured) + return; + + // For some reason we have two different systems that should handle gibbing, + // and for some another reason GibbingSystem, which should empty all containers, doesn't get involved in this process + ContainerSystem.EmptyContainer(component.Stomach); + } } diff --git a/Content.Server/Disposal/Mailing/MailingUnitSystem.cs b/Content.Server/Disposal/Mailing/MailingUnitSystem.cs index 001abad3dcd..8e9c9e4ba73 100644 --- a/Content.Server/Disposal/Mailing/MailingUnitSystem.cs +++ b/Content.Server/Disposal/Mailing/MailingUnitSystem.cs @@ -159,8 +159,7 @@ private void HandleActivate(EntityUid uid, MailingUnitComponent component, Activ args.Handled = true; UpdateTargetList(uid, component); - if (_userInterfaceSystem.TryGetUi(uid, MailingUnitUiKey.Key, out var bui)) - _userInterfaceSystem.OpenUi(bui, actor.PlayerSession); + _userInterfaceSystem.OpenUi(uid, MailingUnitUiKey.Key, actor.PlayerSession); } /// @@ -178,8 +177,7 @@ private void UpdateUserInterface(EntityUid uid, MailingUnitComponent component) return; var state = new MailingUnitBoundUserInterfaceState(component.DisposalUnitInterfaceState, component.Target, component.TargetList, component.Tag); - if (_userInterfaceSystem.TryGetUi(uid, MailingUnitUiKey.Key, out var bui)) - _userInterfaceSystem.SetUiState(bui, state); + _userInterfaceSystem.SetUiState(uid, MailingUnitUiKey.Key, state); } private void OnTargetSelected(EntityUid uid, MailingUnitComponent component, TargetSelectedMessage args) diff --git a/Content.Server/Disposal/Tube/DisposalTubeSystem.cs b/Content.Server/Disposal/Tube/DisposalTubeSystem.cs index 6c0bced53e0..f0f6e9142c6 100644 --- a/Content.Server/Disposal/Tube/DisposalTubeSystem.cs +++ b/Content.Server/Disposal/Tube/DisposalTubeSystem.cs @@ -101,8 +101,9 @@ private void OnUiAction(EntityUid uid, DisposalTaggerComponent tagger, SharedDis /// A user interface message from the client. private void OnUiAction(EntityUid uid, DisposalRouterComponent router, SharedDisposalRouterComponent.UiActionMessage msg) { - if (!EntityManager.EntityExists(msg.Session.AttachedEntity)) + if (!EntityManager.EntityExists(msg.Actor)) return; + if (TryComp(uid, out var physBody) && physBody.BodyType != BodyType.Static) return; @@ -279,9 +280,9 @@ private void OnOpenRouterUI(EntityUid uid, DisposalRouterComponent router, Bound private void OnOpenTaggerUI(EntityUid uid, DisposalTaggerComponent tagger, BoundUIOpenedEvent args) { - if (_uiSystem.TryGetUi(uid, DisposalTaggerUiKey.Key, out var bui)) + if (_uiSystem.HasUi(uid, DisposalTaggerUiKey.Key)) { - _uiSystem.SetUiState(bui, + _uiSystem.SetUiState(uid, DisposalTaggerUiKey.Key, new DisposalTaggerUserInterfaceState(tagger.Tag)); } } @@ -292,13 +293,9 @@ private void OnOpenTaggerUI(EntityUid uid, DisposalTaggerComponent tagger, Bound /// Returns a private void UpdateRouterUserInterface(EntityUid uid, DisposalRouterComponent router) { - var bui = _uiSystem.GetUiOrNull(uid, DisposalRouterUiKey.Key); - if (bui == null) - return; - if (router.Tags.Count <= 0) { - _uiSystem.SetUiState(bui, new DisposalRouterUserInterfaceState("")); + _uiSystem.SetUiState(uid, DisposalRouterUiKey.Key, new DisposalRouterUserInterfaceState("")); return; } @@ -312,7 +309,7 @@ private void UpdateRouterUserInterface(EntityUid uid, DisposalRouterComponent ro taglist.Remove(taglist.Length - 2, 2); - _uiSystem.SetUiState(bui, new DisposalRouterUserInterfaceState(taglist.ToString())); + _uiSystem.SetUiState(uid, DisposalRouterUiKey.Key, new DisposalRouterUserInterfaceState(taglist.ToString())); } private void OnAnchorChange(EntityUid uid, DisposalTubeComponent component, ref AnchorStateChangedEvent args) diff --git a/Content.Server/Disposal/Unit/Components/DisposalHolderComponent.cs b/Content.Server/Disposal/Unit/Components/DisposalHolderComponent.cs index 3df2182b41e..690b33968b0 100644 --- a/Content.Server/Disposal/Unit/Components/DisposalHolderComponent.cs +++ b/Content.Server/Disposal/Unit/Components/DisposalHolderComponent.cs @@ -1,5 +1,6 @@ using Content.Server.Atmos; using Content.Server.Disposal.Tube.Components; +using Content.Shared.Atmos; using Robust.Shared.Containers; namespace Content.Server.Disposal.Unit.Components diff --git a/Content.Server/Disposal/Unit/EntitySystems/DisposalUnitSystem.cs b/Content.Server/Disposal/Unit/EntitySystems/DisposalUnitSystem.cs index d6647bbf2eb..3e81ebfb79f 100644 --- a/Content.Server/Disposal/Unit/EntitySystems/DisposalUnitSystem.cs +++ b/Content.Server/Disposal/Unit/EntitySystems/DisposalUnitSystem.cs @@ -42,7 +42,6 @@ namespace Content.Server.Disposal.Unit.EntitySystems; public sealed class DisposalUnitSystem : SharedDisposalUnitSystem { [Dependency] private readonly IAdminLogManager _adminLogger = default!; - [Dependency] private readonly IRobustRandom _robustRandom = default!; [Dependency] private readonly ActionBlockerSystem _actionBlockerSystem = default!; [Dependency] private readonly AppearanceSystem _appearance = default!; [Dependency] private readonly AtmosphereSystem _atmosSystem = default!; @@ -73,8 +72,6 @@ public override void Initialize() SubscribeLocalEvent(OnPowerChange); SubscribeLocalEvent(OnDisposalInit); - SubscribeLocalEvent(OnThrowCollide); - SubscribeLocalEvent(OnActivate); SubscribeLocalEvent(OnAfterInteractUsing); SubscribeLocalEvent(OnDragDropOn); @@ -143,6 +140,9 @@ private void AddClimbInsideVerb(EntityUid uid, SharedDisposalUnitComponent compo return; } + if (!CanInsert(uid, component, args.User)) + return; + // Add verb to climb inside of the unit, Verb verb = new() { @@ -219,7 +219,7 @@ public override void Update(float frameTime) #region UI Handlers private void OnUiButtonPressed(EntityUid uid, SharedDisposalUnitComponent component, SharedDisposalUnitComponent.UiButtonPressedMessage args) { - if (args.Session.AttachedEntity is not { Valid: true } player) + if (args.Actor is not { Valid: true } player) { return; } @@ -235,7 +235,7 @@ private void OnUiButtonPressed(EntityUid uid, SharedDisposalUnitComponent compon _adminLogger.Add(LogType.Action, LogImpact.Low, $"{ToPrettyString(player):player} hit flush button on {ToPrettyString(uid)}, it's now {(component.Engaged ? "on" : "off")}"); break; case SharedDisposalUnitComponent.UiButton.Power: - _power.TryTogglePower(uid, user: args.Session.AttachedEntity); + _power.TryTogglePower(uid, user: args.Actor); break; default: throw new ArgumentOutOfRangeException($"{ToPrettyString(player):player} attempted to hit a nonexistant button on {ToPrettyString(uid)}"); @@ -268,7 +268,7 @@ private void OnActivate(EntityUid uid, SharedDisposalUnitComponent component, Ac } args.Handled = true; - _ui.TryOpen(uid, SharedDisposalUnitComponent.DisposalUnitUiKey.Key, actor.PlayerSession); + _ui.OpenUi(uid, SharedDisposalUnitComponent.DisposalUnitUiKey.Key, actor.PlayerSession); } private void OnAfterInteractUsing(EntityUid uid, SharedDisposalUnitComponent component, AfterInteractUsingEvent args) @@ -291,40 +291,6 @@ private void OnAfterInteractUsing(EntityUid uid, SharedDisposalUnitComponent com args.Handled = true; } - /// - /// Thrown items have a chance of bouncing off the unit and not going in. - /// - private void OnThrowCollide(EntityUid uid, SharedDisposalUnitComponent component, ThrowHitByEvent args) - { - var canInsert = CanInsert(uid, component, args.Thrown); - var randDouble = _robustRandom.NextDouble(); - - if (!canInsert) - { - return; - } - - if (randDouble > 0.75) - { - _audioSystem.PlayPvs(component.MissSound, uid); - - _popupSystem.PopupEntity(Loc.GetString("disposal-unit-thrown-missed"), uid); - return; - } - - var inserted = _containerSystem.Insert(args.Thrown, component.Container); - - if (!inserted) - { - throw new InvalidOperationException("Container insertion failed but CanInsert returned true"); - } - - if (args.Component.Thrower != null) - _adminLogger.Add(LogType.Landed, LogImpact.Low, $"{ToPrettyString(args.Thrown)} thrown by {ToPrettyString(args.Component.Thrower.Value):player} landed in {ToPrettyString(uid)}"); - - AfterInsert(uid, component, args.Thrown); - } - private void OnDisposalInit(EntityUid uid, SharedDisposalUnitComponent component, ComponentInit args) { component.Container = _containerSystem.EnsureContainer(uid, SharedDisposalUnitComponent.ContainerId); @@ -598,7 +564,7 @@ public void UpdateInterface(EntityUid uid, SharedDisposalUnitComponent component var compState = GetState(uid, component); var stateString = Loc.GetString($"disposal-unit-state-{compState}"); var state = new SharedDisposalUnitComponent.DisposalUnitBoundUserInterfaceState(Name(uid), stateString, EstimatedFullPressure(uid, component), powered, component.Engaged); - _ui.TrySetUiState(uid, SharedDisposalUnitComponent.DisposalUnitUiKey.Key, state); + _ui.SetUiState(uid, SharedDisposalUnitComponent.DisposalUnitUiKey.Key, state); var stateUpdatedEvent = new DisposalUnitUIStateUpdatedEvent(state); RaiseLocalEvent(uid, stateUpdatedEvent); @@ -803,10 +769,7 @@ public void AfterInsert(EntityUid uid, SharedDisposalUnitComponent component, En QueueAutomaticEngage(uid, component); - if (TryComp(inserted, out ActorComponent? actor)) - { - _ui.TryClose(uid, SharedDisposalUnitComponent.DisposalUnitUiKey.Key, actor.PlayerSession); - } + _ui.CloseUi(uid, SharedDisposalUnitComponent.DisposalUnitUiKey.Key, inserted); // Maybe do pullable instead? Eh still fine. Joints.RecursiveClearJoints(inserted); diff --git a/Content.Server/Doors/Electronics/Systems/DoorElectronicsSystem.cs b/Content.Server/Doors/Electronics/Systems/DoorElectronicsSystem.cs index 56e8bd50b32..af9ccadd91c 100644 --- a/Content.Server/Doors/Electronics/Systems/DoorElectronicsSystem.cs +++ b/Content.Server/Doors/Electronics/Systems/DoorElectronicsSystem.cs @@ -39,7 +39,7 @@ public void UpdateUserInterface(EntityUid uid, DoorElectronicsComponent componen } var state = new DoorElectronicsConfigurationState(accesses); - _uiSystem.TrySetUiState(uid, DoorElectronicsConfigurationUiKey.Key, state); + _uiSystem.SetUiState(uid, DoorElectronicsConfigurationUiKey.Key, state); } private void OnChangeConfiguration( diff --git a/Content.Server/Dragon/DragonRiftSystem.cs b/Content.Server/Dragon/DragonRiftSystem.cs index 776aa841d85..c0a81d0d24e 100644 --- a/Content.Server/Dragon/DragonRiftSystem.cs +++ b/Content.Server/Dragon/DragonRiftSystem.cs @@ -72,9 +72,8 @@ public override void Update(float frameTime) comp.State = DragonRiftState.AlmostFinished; Dirty(comp); - var location = xform.LocalPosition; _announcer.SendAnnouncement(_announcer.GetAnnouncementId("CarpRift"), Filter.Broadcast(), - "carp-rift-warning", colorOverride: Color.Red, localeArgs: ("location", location)); + "carp-rift-warning", colorOverride: Color.Red, localeArgs: ("location", FormattedMessage.RemoveMarkupPermissive(_navMap.GetNearestBeaconString((uid, xform))))); _navMap.SetBeaconEnabled(uid, true); } diff --git a/Content.Server/Electrocution/Components/ElectrifiedComponent.cs b/Content.Server/Electrocution/Components/ElectrifiedComponent.cs index 65a539eb08e..4ef07a0cca8 100644 --- a/Content.Server/Electrocution/Components/ElectrifiedComponent.cs +++ b/Content.Server/Electrocution/Components/ElectrifiedComponent.cs @@ -85,4 +85,7 @@ public sealed partial class ElectrifiedComponent : Component [DataField("shockVolume")] public float ShockVolume = 20; + + [DataField] + public float Probability = 1f; } diff --git a/Content.Server/Electrocution/ElectrocutionSystem.cs b/Content.Server/Electrocution/ElectrocutionSystem.cs index ba20f4e32f3..4db815a3944 100644 --- a/Content.Server/Electrocution/ElectrocutionSystem.cs +++ b/Content.Server/Electrocution/ElectrocutionSystem.cs @@ -215,6 +215,9 @@ public bool TryDoElectrifiedAct(EntityUid uid, EntityUid targetUid, if (!IsPowered(uid, electrified, transform)) return false; + if (!_random.Prob(electrified.Probability)) + return false; + EnsureComp(uid); _appearance.SetData(uid, ElectrifiedVisuals.IsPowered, true); diff --git a/Content.Server/Ensnaring/EnsnareableSystem.cs b/Content.Server/Ensnaring/EnsnareableSystem.cs index f939e087e02..7b810b4f49c 100644 --- a/Content.Server/Ensnaring/EnsnareableSystem.cs +++ b/Content.Server/Ensnaring/EnsnareableSystem.cs @@ -14,7 +14,7 @@ public sealed partial class EnsnareableSystem : SharedEnsnareableSystem [Dependency] private readonly ContainerSystem _container = default!; [Dependency] private readonly SharedHandsSystem _hands = default!; [Dependency] private readonly PopupSystem _popup = default!; - + public override void Initialize() { base.Initialize(); @@ -48,8 +48,11 @@ private void OnDoAfter(EntityUid uid, EnsnareableComponent component, DoAfterEve Dirty(component); ensnaring.Ensnared = null; - _hands.PickupOrDrop(args.Args.User, args.Args.Used.Value); - + if (ensnaring.DestroyOnRemove) + QueueDel(args.Args.Used); + else + _hands.PickupOrDrop(args.Args.User, args.Args.Used.Value); + _popup.PopupEntity(Loc.GetString("ensnare-component-try-free-complete", ("ensnare", args.Args.Used)), uid, uid, PopupType.Medium); UpdateAlert(args.Args.Target.Value, component); diff --git a/Content.Server/Entry/EntryPoint.cs b/Content.Server/Entry/EntryPoint.cs index 48a65973491..dda783c4325 100644 --- a/Content.Server/Entry/EntryPoint.cs +++ b/Content.Server/Entry/EntryPoint.cs @@ -14,6 +14,7 @@ using Content.Server.GuideGenerator; using Content.Server.Info; using Content.Server.IoC; +using Content.Server.Players.JobWhitelist; using Content.Server.Maps; using Content.Server.NodeContainer.NodeGroups; using Content.Server.Players.PlayTimeTracking; @@ -111,6 +112,7 @@ public override void Init() _voteManager.Initialize(); _updateManager.Initialize(); _playTimeTracking.Initialize(); + IoCManager.Resolve().Initialize(); } } diff --git a/Content.Server/Entry/IgnoredComponents.cs b/Content.Server/Entry/IgnoredComponents.cs index fe073da7a49..d9b81c8e5a5 100644 --- a/Content.Server/Entry/IgnoredComponents.cs +++ b/Content.Server/Entry/IgnoredComponents.cs @@ -14,12 +14,13 @@ public static class IgnoredComponents "Icon", "HandheldGPS", "CableVisualizer", + "SolutionItemStatus", "UIFragment", "PdaBorderColor", "InventorySlots", "LightFade", "HolidayRsiSwap", - "OptionsVisualizer", + "OptionsVisualizer" }; } } diff --git a/Content.Server/Execution/ExecutionSystem.cs b/Content.Server/Execution/ExecutionSystem.cs index 326aa1d6a49..c1080b84ad8 100644 --- a/Content.Server/Execution/ExecutionSystem.cs +++ b/Content.Server/Execution/ExecutionSystem.cs @@ -281,7 +281,7 @@ private void OnDoafterGun(EntityUid uid, GunComponent component, DoAfterEvent ar var prevention = new ShotAttemptedEvent { User = attacker, - Used = weapon + Used = new Entity(uid, component) }; RaiseLocalEvent(weapon, ref prevention); diff --git a/Content.Server/Explosion/Components/ExplosiveComponent.cs b/Content.Server/Explosion/Components/ExplosiveComponent.cs index 04a08955a35..2b27a89d9db 100644 --- a/Content.Server/Explosion/Components/ExplosiveComponent.cs +++ b/Content.Server/Explosion/Components/ExplosiveComponent.cs @@ -81,6 +81,13 @@ public sealed partial class ExplosiveComponent : Component [DataField("deleteAfterExplosion")] public bool? DeleteAfterExplosion; + /// + /// Whether to not set to true, allowing it to explode multiple times. + /// This should never be used if it is damageable. + /// + [DataField] + public bool Repeatable; + /// /// Avoid somehow double-triggering this explosion (e.g. by damaging this entity from its own explosion. /// diff --git a/Content.Server/Explosion/Components/RepeatingTriggerComponent.cs b/Content.Server/Explosion/Components/RepeatingTriggerComponent.cs new file mode 100644 index 00000000000..cc08de53f90 --- /dev/null +++ b/Content.Server/Explosion/Components/RepeatingTriggerComponent.cs @@ -0,0 +1,25 @@ +using Content.Server.Explosion.EntitySystems; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; + +namespace Content.Server.Explosion.Components; + +/// +/// Constantly triggers after being added to an entity. +/// +[RegisterComponent, Access(typeof(TriggerSystem))] +[AutoGenerateComponentPause] +public sealed partial class RepeatingTriggerComponent : Component +{ + /// + /// How long to wait between triggers. + /// The first trigger starts this long after the component is added. + /// + [DataField] + public TimeSpan Delay = TimeSpan.FromSeconds(1); + + /// + /// When the next trigger will be. + /// + [DataField(customTypeSerializer: typeof(TimeOffsetSerializer)), AutoPausedField] + public TimeSpan NextTrigger; +} diff --git a/Content.Server/Explosion/EntitySystems/ExplosionGridTileFlood.cs b/Content.Server/Explosion/EntitySystems/ExplosionGridTileFlood.cs index 7db1f513f7c..2ddcc052d85 100644 --- a/Content.Server/Explosion/EntitySystems/ExplosionGridTileFlood.cs +++ b/Content.Server/Explosion/EntitySystems/ExplosionGridTileFlood.cs @@ -14,7 +14,7 @@ public sealed class ExplosionGridTileFlood : ExplosionTileFlood public MapGridComponent Grid; private bool _needToTransform = false; - private Matrix3 _matrix = Matrix3.Identity; + private Matrix3x2 _matrix = Matrix3x2.Identity; private Vector2 _offset; // Tiles which neighbor an exploding tile, but have not yet had the explosion spread to them due to an @@ -44,7 +44,7 @@ public ExplosionGridTileFlood( int typeIndex, Dictionary edgeTiles, EntityUid? referenceGrid, - Matrix3 spaceMatrix, + Matrix3x2 spaceMatrix, Angle spaceAngle) { Grid = grid; @@ -72,9 +72,10 @@ public ExplosionGridTileFlood( var transform = IoCManager.Resolve().GetComponent(Grid.Owner); var size = (float) Grid.TileSize; - _matrix.R0C2 = size / 2; - _matrix.R1C2 = size / 2; - _matrix *= transform.WorldMatrix * Matrix3.Invert(spaceMatrix); + _matrix.M31 = size / 2; + _matrix.M32 = size / 2; + Matrix3x2.Invert(spaceMatrix, out var invSpace); + _matrix *= transform.WorldMatrix * invSpace; var relativeAngle = transform.WorldRotation - spaceAngle; _offset = relativeAngle.RotateVec(new Vector2(size / 4, size / 4)); } @@ -228,7 +229,7 @@ private void JumpToSpace(Vector2i tile) return; } - var center = _matrix.Transform(tile); + var center = Vector2.Transform(tile, _matrix); SpaceJump.Add(new((int) MathF.Floor(center.X + _offset.X), (int) MathF.Floor(center.Y + _offset.Y))); SpaceJump.Add(new((int) MathF.Floor(center.X - _offset.Y), (int) MathF.Floor(center.Y + _offset.X))); SpaceJump.Add(new((int) MathF.Floor(center.X - _offset.X), (int) MathF.Floor(center.Y - _offset.Y))); diff --git a/Content.Server/Explosion/EntitySystems/ExplosionSystem.CVars.cs b/Content.Server/Explosion/EntitySystems/ExplosionSystem.CVars.cs index 1f031093333..3332d3a4f59 100644 --- a/Content.Server/Explosion/EntitySystems/ExplosionSystem.CVars.cs +++ b/Content.Server/Explosion/EntitySystems/ExplosionSystem.CVars.cs @@ -11,7 +11,8 @@ public sealed partial class ExplosionSystem : EntitySystem public int ThrowLimit { get; private set; } public bool SleepNodeSys { get; private set; } public bool IncrementalTileBreaking { get; private set; } - public int SingleTickAreaLimit {get; private set; } + public int SingleTickAreaLimit { get; private set; } + public bool CanCreateVacuum { get; private set; } private void SubscribeCvars() { @@ -23,5 +24,6 @@ private void SubscribeCvars() Subs.CVar(_cfg, CCVars.ExplosionMaxProcessingTime, value => MaxProcessingTime = value, true); Subs.CVar(_cfg, CCVars.ExplosionIncrementalTileBreaking, value => IncrementalTileBreaking = value, true); Subs.CVar(_cfg, CCVars.ExplosionSingleTickAreaLimit, value => SingleTickAreaLimit = value, true); + Subs.CVar(_cfg, CCVars.ExplosionCanCreateVacuum, value => CanCreateVacuum = value, true); } } diff --git a/Content.Server/Explosion/EntitySystems/ExplosionSystem.GridMap.cs b/Content.Server/Explosion/EntitySystems/ExplosionSystem.GridMap.cs index 719a2eca797..556fe7c1415 100644 --- a/Content.Server/Explosion/EntitySystems/ExplosionSystem.GridMap.cs +++ b/Content.Server/Explosion/EntitySystems/ExplosionSystem.GridMap.cs @@ -60,7 +60,7 @@ private void OnGridRemoved(GridRemovalEvent ev) { Dictionary transformedEdges = new(); - var targetMatrix = Matrix3.Identity; + var targetMatrix = Matrix3x2.Identity; Angle targetAngle = new(); var tileSize = DefaultTileSize; var maxDistanceSq = (int) (maxDistance * maxDistance); @@ -75,9 +75,9 @@ private void OnGridRemoved(GridRemovalEvent ev) tileSize = targetGrid.TileSize; } - var offsetMatrix = Matrix3.Identity; - offsetMatrix.R0C2 = tileSize / 2f; - offsetMatrix.R1C2 = tileSize / 2f; + var offsetMatrix = Matrix3x2.Identity; + offsetMatrix.M31 = tileSize / 2f; + offsetMatrix.M32 = tileSize / 2f; // Here we can end up with a triple nested for loop: // foreach other grid @@ -106,7 +106,7 @@ private void OnGridRemoved(GridRemovalEvent ev) var xform = xforms.GetComponent(gridToTransform); var (_, gridWorldRotation, gridWorldMatrix, invGridWorldMatrid) = xform.GetWorldPositionRotationMatrixWithInv(xforms); - var localEpicentre = (Vector2i) invGridWorldMatrid.Transform(epicentre.Position); + var localEpicentre = (Vector2i) Vector2.Transform(epicentre.Position, invGridWorldMatrid); var matrix = offsetMatrix * gridWorldMatrix * targetMatrix; var angle = gridWorldRotation - targetAngle; @@ -119,7 +119,7 @@ private void OnGridRemoved(GridRemovalEvent ev) if (delta.X * delta.X + delta.Y * delta.Y > maxDistanceSq) // no Vector2.Length??? continue; - var center = matrix.Transform(tile); + var center = Vector2.Transform(tile, matrix); if ((dir & NeighborFlag.Cardinal) == 0) { diff --git a/Content.Server/Explosion/EntitySystems/ExplosionSystem.Processing.cs b/Content.Server/Explosion/EntitySystems/ExplosionSystem.Processing.cs index 14a149074dc..67070d08eb9 100644 --- a/Content.Server/Explosion/EntitySystems/ExplosionSystem.Processing.cs +++ b/Content.Server/Explosion/EntitySystems/ExplosionSystem.Processing.cs @@ -1,4 +1,5 @@ using System.Numerics; +using Content.Server.Atmos.EntitySystems; using Content.Shared.CCVar; using Content.Shared.Damage; using Content.Shared.Explosion; @@ -295,8 +296,8 @@ private static bool GridQueryCallback( /// Same as , but for SPAAAAAAACE. /// internal void ExplodeSpace(BroadphaseComponent lookup, - Matrix3 spaceMatrix, - Matrix3 invSpaceMatrix, + Matrix3x2 spaceMatrix, + Matrix3x2 invSpaceMatrix, Vector2i tile, float throwForce, DamageSpecifier damage, @@ -337,7 +338,7 @@ internal void ExplodeSpace(BroadphaseComponent lookup, } private static bool SpaceQueryCallback( - ref (List<(EntityUid, TransformComponent)> List, HashSet Processed, Matrix3 InvSpaceMatrix, EntityUid LookupOwner, EntityQuery XformQuery, Box2 GridBox, SharedTransformSystem System) state, + ref (List<(EntityUid, TransformComponent)> List, HashSet Processed, Matrix3x2 InvSpaceMatrix, EntityUid LookupOwner, EntityQuery XformQuery, Box2 GridBox, SharedTransformSystem System) state, in EntityUid uid) { if (state.Processed.Contains(uid)) @@ -348,7 +349,7 @@ private static bool SpaceQueryCallback( if (xform.ParentUid == state.LookupOwner) { // parented directly to the map, use local position - if (state.GridBox.Contains(state.InvSpaceMatrix.Transform(xform.LocalPosition))) + if (state.GridBox.Contains(Vector2.Transform(xform.LocalPosition, state.InvSpaceMatrix))) state.List.Add((uid, xform)); return true; @@ -356,14 +357,14 @@ private static bool SpaceQueryCallback( // finally check if it intersects our tile var wpos = state.System.GetWorldPosition(xform); - if (state.GridBox.Contains(state.InvSpaceMatrix.Transform(wpos))) + if (state.GridBox.Contains(Vector2.Transform(wpos, state.InvSpaceMatrix))) state.List.Add((uid, xform)); return true; } private static bool SpaceQueryCallback( - ref (List<(EntityUid, TransformComponent)> List, HashSet Processed, Matrix3 InvSpaceMatrix, EntityUid LookupOwner, EntityQuery XformQuery, Box2 GridBox, SharedTransformSystem System) state, + ref (List<(EntityUid, TransformComponent)> List, HashSet Processed, Matrix3x2 InvSpaceMatrix, EntityUid LookupOwner, EntityQuery XformQuery, Box2 GridBox, SharedTransformSystem System) state, in FixtureProxy proxy) { var uid = proxy.Entity; @@ -474,7 +475,9 @@ public void DamageFloorTile(TileRef tileRef, if (_tileDefinitionManager[tileRef.Tile.TypeId] is not ContentTileDefinition tileDef) return; - if (tileDef.MapAtmosphere) + if (!CanCreateVacuum) + canCreateVacuum = false; + else if (tileDef.MapAtmosphere) canCreateVacuum = true; // is already a vacuum. int tileBreakages = 0; @@ -567,12 +570,12 @@ struct ExplosionData /// /// The matrix that defines the reference frame for the explosion in space. /// - private readonly Matrix3 _spaceMatrix; + private readonly Matrix3x2 _spaceMatrix; /// /// Inverse of /// - private readonly Matrix3 _invSpaceMatrix; + private readonly Matrix3x2 _invSpaceMatrix; /// /// Have all the tiles on all the grids been processed? @@ -638,7 +641,7 @@ public Explosion(ExplosionSystem system, List gridData, List tileSetIntensity, MapCoordinates epicenter, - Matrix3 spaceMatrix, + Matrix3x2 spaceMatrix, int area, float tileBreakScale, int maxTileBreak, @@ -677,7 +680,7 @@ public Explosion(ExplosionSystem system, }); _spaceMatrix = spaceMatrix; - _invSpaceMatrix = Matrix3.Invert(spaceMatrix); + Matrix3x2.Invert(spaceMatrix, out _invSpaceMatrix); } foreach (var grid in gridData) diff --git a/Content.Server/Explosion/EntitySystems/ExplosionSystem.TileFill.cs b/Content.Server/Explosion/EntitySystems/ExplosionSystem.TileFill.cs index a42dd110831..8b4c0e14c5f 100644 --- a/Content.Server/Explosion/EntitySystems/ExplosionSystem.TileFill.cs +++ b/Content.Server/Explosion/EntitySystems/ExplosionSystem.TileFill.cs @@ -26,7 +26,7 @@ public sealed partial class ExplosionSystem : EntitySystem /// The maximum intensity that the explosion can have at any given tile. This /// effectively caps the damage that this explosion can do. /// A list of tile-sets and a list of intensity values which describe the explosion. - private (int, List, ExplosionSpaceTileFlood?, Dictionary, Matrix3)? GetExplosionTiles( + private (int, List, ExplosionSpaceTileFlood?, Dictionary, Matrix3x2)? GetExplosionTiles( MapCoordinates epicenter, string typeID, float totalIntensity, @@ -84,7 +84,7 @@ public sealed partial class ExplosionSystem : EntitySystem Dictionary>? previousGridJump; // variables for transforming between grid and space-coordinates - var spaceMatrix = Matrix3.Identity; + var spaceMatrix = Matrix3x2.Identity; var spaceAngle = Angle.Zero; if (referenceGrid != null) { diff --git a/Content.Server/Explosion/EntitySystems/ExplosionSystem.Visuals.cs b/Content.Server/Explosion/EntitySystems/ExplosionSystem.Visuals.cs index d332531502c..5db8b55bf96 100644 --- a/Content.Server/Explosion/EntitySystems/ExplosionSystem.Visuals.cs +++ b/Content.Server/Explosion/EntitySystems/ExplosionSystem.Visuals.cs @@ -1,3 +1,4 @@ +using System.Numerics; using Content.Shared.Explosion; using Content.Shared.Explosion.Components; using Robust.Server.GameObjects; @@ -35,7 +36,7 @@ private void OnGetState(EntityUid uid, ExplosionVisualsComponent component, ref /// /// Constructor for the shared using the server-exclusive explosion classes. /// - private EntityUid CreateExplosionVisualEntity(MapCoordinates epicenter, string prototype, Matrix3 spaceMatrix, ExplosionSpaceTileFlood? spaceData, IEnumerable gridData, List iterationIntensity) + private EntityUid CreateExplosionVisualEntity(MapCoordinates epicenter, string prototype, Matrix3x2 spaceMatrix, ExplosionSpaceTileFlood? spaceData, IEnumerable gridData, List iterationIntensity) { var explosionEntity = Spawn(null, MapCoordinates.Nullspace); var comp = AddComp(explosionEntity); diff --git a/Content.Server/Explosion/EntitySystems/ExplosionSystem.cs b/Content.Server/Explosion/EntitySystems/ExplosionSystem.cs index 607a514e63c..71f3025748a 100644 --- a/Content.Server/Explosion/EntitySystems/ExplosionSystem.cs +++ b/Content.Server/Explosion/EntitySystems/ExplosionSystem.cs @@ -160,7 +160,7 @@ public void TriggerExplosive(EntityUid uid, ExplosiveComponent? explosive = null if (explosive.Exploded) return; - explosive.Exploded = true; + explosive.Exploded = !explosive.Repeatable; // Override the explosion intensity if optional arguments were provided. if (radius != null) diff --git a/Content.Server/Explosion/EntitySystems/TriggerSystem.cs b/Content.Server/Explosion/EntitySystems/TriggerSystem.cs index 94f55855362..8e0a75ea24f 100644 --- a/Content.Server/Explosion/EntitySystems/TriggerSystem.cs +++ b/Content.Server/Explosion/EntitySystems/TriggerSystem.cs @@ -94,6 +94,7 @@ public override void Initialize() SubscribeLocalEvent(OnStepTriggered); SubscribeLocalEvent(OnSlipTriggered); SubscribeLocalEvent(OnEmptyTriggered); + SubscribeLocalEvent(OnRepeatInit); SubscribeLocalEvent(OnSpawnTrigger); SubscribeLocalEvent(HandleDeleteTrigger); @@ -153,7 +154,7 @@ private void HandleExplodeTrigger(EntityUid uid, ExplodeOnTriggerComponent compo private void HandleFlashTrigger(EntityUid uid, FlashOnTriggerComponent component, TriggerEvent args) { // TODO Make flash durations sane ffs. - _flashSystem.FlashArea(uid, args.User, component.Range, component.Duration * 1000f); + _flashSystem.FlashArea(uid, args.User, component.Range, component.Duration * 1000f, probability: component.Probability); args.Handled = true; } @@ -241,6 +242,11 @@ private void OnEmptyTriggered(EntityUid uid, TriggerWhenEmptyComponent component Trigger(uid, args.EmptyGun); } + private void OnRepeatInit(Entity ent, ref MapInitEvent args) + { + ent.Comp.NextTrigger = _timing.CurTime + ent.Comp.Delay; + } + public bool Trigger(EntityUid trigger, EntityUid? user = null) { var triggerEvent = new TriggerEvent(trigger, user); @@ -323,6 +329,7 @@ public override void Update(float frameTime) UpdateProximity(); UpdateTimer(frameTime); UpdateTimedCollide(frameTime); + UpdateRepeat(); } private void UpdateTimer(float frameTime) @@ -357,5 +364,19 @@ private void UpdateTimer(float frameTime) _appearance.SetData(uid, TriggerVisuals.VisualState, TriggerVisualState.Unprimed, appearance); } } + + private void UpdateRepeat() + { + var now = _timing.CurTime; + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var comp)) + { + if (comp.NextTrigger > now) + continue; + + comp.NextTrigger = now + comp.Delay; + Trigger(uid); + } + } } } diff --git a/Content.Server/Extinguisher/FireExtinguisherComponent.cs b/Content.Server/Extinguisher/FireExtinguisherComponent.cs index fe10b4a574a..991fc76c62e 100644 --- a/Content.Server/Extinguisher/FireExtinguisherComponent.cs +++ b/Content.Server/Extinguisher/FireExtinguisherComponent.cs @@ -3,7 +3,7 @@ namespace Content.Server.Extinguisher; -[NetworkedComponent, RegisterComponent] +[RegisterComponent] [Access(typeof(FireExtinguisherSystem))] public sealed partial class FireExtinguisherComponent : SharedFireExtinguisherComponent { diff --git a/Content.Server/Eye/Blinding/ActivatableUIRequiresVisionSystem.cs b/Content.Server/Eye/Blinding/ActivatableUIRequiresVisionSystem.cs index b51efc2f5e1..7b937cf0d81 100644 --- a/Content.Server/Eye/Blinding/ActivatableUIRequiresVisionSystem.cs +++ b/Content.Server/Eye/Blinding/ActivatableUIRequiresVisionSystem.cs @@ -5,6 +5,7 @@ using Content.Shared.Eye.Blinding.Systems; using Robust.Shared.Player; using Robust.Server.GameObjects; +using Robust.Shared.Collections; namespace Content.Server.Eye.Blinding; @@ -37,24 +38,19 @@ private void OnBlindnessChanged(EntityUid uid, BlindableComponent component, ref if (!args.Blind) return; - if (!TryComp(uid, out var actor)) - return; - - var uiList = _userInterfaceSystem.GetAllUIsForSession(actor.PlayerSession); - if (uiList == null) - return; - - Queue closeList = new(); // foreach collection modified moment + var toClose = new ValueList<(EntityUid Entity, Enum Key)>(); - foreach (var ui in uiList) + foreach (var bui in _userInterfaceSystem.GetActorUis(uid)) { - if (HasComp(ui.Owner)) - closeList.Enqueue(ui); + if (HasComp(bui.Entity)) + { + toClose.Add(bui); + } } - foreach (var ui in closeList) + foreach (var bui in toClose) { - _userInterfaceSystem.CloseUi(ui, actor.PlayerSession); + _userInterfaceSystem.CloseUi(bui.Entity, bui.Key, uid); } } } diff --git a/Content.Server/Fax/AdminUI/AdminFaxEui.cs b/Content.Server/Fax/AdminUI/AdminFaxEui.cs index c8be6618e45..452fc593d95 100644 --- a/Content.Server/Fax/AdminUI/AdminFaxEui.cs +++ b/Content.Server/Fax/AdminUI/AdminFaxEui.cs @@ -1,6 +1,7 @@ using Content.Server.DeviceNetwork.Components; using Content.Server.EUI; using Content.Shared.Eui; +using Content.Shared.Fax.Components; using Content.Shared.Fax; using Content.Shared.Follower; using Content.Shared.Ghost; @@ -54,7 +55,7 @@ public override void HandleMessage(EuiMessageBase msg) } case AdminFaxEuiMsg.Send sendData: { - var printout = new FaxPrintout(sendData.Content, sendData.Title, null, sendData.StampState, + var printout = new FaxPrintout(sendData.Content, sendData.Title, null, null, sendData.StampState, new() { new StampDisplayInfo { StampedName = sendData.From, StampedColor = sendData.StampColor } }); _faxSystem.Receive(_entityManager.GetEntity(sendData.Target), printout); break; diff --git a/Content.Server/Fax/FaxConstants.cs b/Content.Server/Fax/FaxConstants.cs index 102510bd46e..24ed7cbcf32 100644 --- a/Content.Server/Fax/FaxConstants.cs +++ b/Content.Server/Fax/FaxConstants.cs @@ -23,6 +23,7 @@ public static class FaxConstants public const string FaxNameData = "fax_data_name"; public const string FaxPaperNameData = "fax_data_title"; + public const string FaxPaperLabelData = "fax_data_label"; public const string FaxPaperPrototypeData = "fax_data_prototype"; public const string FaxPaperContentData = "fax_data_content"; public const string FaxPaperStampStateData = "fax_data_stamp_state"; diff --git a/Content.Server/Fax/FaxSystem.cs b/Content.Server/Fax/FaxSystem.cs index 3ff139466f5..e86dbca4a13 100644 --- a/Content.Server/Fax/FaxSystem.cs +++ b/Content.Server/Fax/FaxSystem.cs @@ -4,6 +4,7 @@ using Content.Server.DeviceNetwork; using Content.Server.DeviceNetwork.Components; using Content.Server.DeviceNetwork.Systems; +using Content.Server.Labels; using Content.Server.Paper; using Content.Server.Popups; using Content.Server.Power.Components; @@ -16,7 +17,11 @@ using Content.Shared.Emag.Components; using Content.Shared.Emag.Systems; using Content.Shared.Fax; +using Content.Shared.Fax.Systems; +using Content.Shared.Fax.Components; using Content.Shared.Interaction; +using Content.Shared.Labels.Components; +using Content.Shared.Mobs.Components; using Content.Shared.Paper; using Robust.Server.GameObjects; using Robust.Shared.Audio; @@ -36,12 +41,14 @@ public sealed class FaxSystem : EntitySystem [Dependency] private readonly PopupSystem _popupSystem = default!; [Dependency] private readonly DeviceNetworkSystem _deviceNetworkSystem = default!; [Dependency] private readonly PaperSystem _paperSystem = default!; + [Dependency] private readonly LabelSystem _labelSystem = default!; [Dependency] private readonly SharedAudioSystem _audioSystem = default!; [Dependency] private readonly ToolSystem _toolSystem = default!; [Dependency] private readonly QuickDialogSystem _quickDialog = default!; [Dependency] private readonly UserInterfaceSystem _userInterface = default!; [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!; [Dependency] private readonly MetaDataSystem _metaData = default!; + [Dependency] private readonly FaxecuteSystem _faxecute = default!; private const string PaperSlotId = "Paper"; @@ -51,7 +58,7 @@ public sealed class FaxSystem : EntitySystem /// [ValidatePrototypeId] private const string DefaultPaperPrototypeId = "Paper"; - + [ValidatePrototypeId] private const string OfficePaperPrototypeId = "PaperOffice"; @@ -236,7 +243,7 @@ private void OnInteractUsing(EntityUid uid, FaxMachineComponent component, Inter } _adminLogger.Add(LogType.Action, LogImpact.Low, - $"{ToPrettyString(args.User):user} renamed {ToPrettyString(uid)} from \"{component.FaxName}\" to \"{newName}\""); + $"{ToPrettyString(args.User):user} renamed {ToPrettyString(uid):tool} from \"{component.FaxName}\" to \"{newName}\""); component.FaxName = newName; _popupSystem.PopupEntity(Loc.GetString("fax-machine-popup-name-set"), uid); UpdateUserInterface(uid, component); @@ -288,11 +295,12 @@ private void OnPacketReceived(EntityUid uid, FaxMachineComponent component, Devi !args.Data.TryGetValue(FaxConstants.FaxPaperContentData, out string? content)) return; + args.Data.TryGetValue(FaxConstants.FaxPaperLabelData, out string? label); args.Data.TryGetValue(FaxConstants.FaxPaperStampStateData, out string? stampState); args.Data.TryGetValue(FaxConstants.FaxPaperStampedByData, out List? stampedBy); args.Data.TryGetValue(FaxConstants.FaxPaperPrototypeData, out string? prototypeId); - var printout = new FaxPrintout(content, name, prototypeId, stampState, stampedBy); + var printout = new FaxPrintout(content, name, label, prototypeId, stampState, stampedBy); Receive(uid, printout, args.SenderAddress); break; @@ -307,18 +315,25 @@ private void OnToggleInterface(EntityUid uid, FaxMachineComponent component, Aft private void OnFileButtonPressed(EntityUid uid, FaxMachineComponent component, FaxFileMessage args) { + args.Label = args.Label?[..Math.Min(args.Label.Length, FaxFileMessageValidation.MaxLabelSize)]; args.Content = args.Content[..Math.Min(args.Content.Length, FaxFileMessageValidation.MaxContentSize)]; PrintFile(uid, component, args); } private void OnCopyButtonPressed(EntityUid uid, FaxMachineComponent component, FaxCopyMessage args) { - Copy(uid, component, args); + if (HasComp(component.PaperSlot.Item)) + _faxecute.Faxecute(uid, component); /// when button pressed it will hurt the mob. + else + Copy(uid, component, args); } private void OnSendButtonPressed(EntityUid uid, FaxMachineComponent component, FaxSendMessage args) { - Send(uid, component, args.Session.AttachedEntity); + if (HasComp(component.PaperSlot.Item)) + _faxecute.Faxecute(uid, component); /// when button pressed it will hurt the mob. + else + Send(uid, component, args); } private void OnRefreshButtonPressed(EntityUid uid, FaxMachineComponent component, FaxRefreshMessage args) @@ -336,14 +351,20 @@ private void UpdateAppearance(EntityUid uid, FaxMachineComponent? component = nu if (!Resolve(uid, ref component)) return; + if (TryComp(component.PaperSlot.Item, out var faxable)) + component.InsertingState = faxable.InsertingState; + + if (component.InsertingTimeRemaining > 0) + { _appearanceSystem.SetData(uid, FaxMachineVisuals.VisualState, FaxMachineVisualState.Inserting); + Dirty(uid, component); + } else if (component.PrintingTimeRemaining > 0) _appearanceSystem.SetData(uid, FaxMachineVisuals.VisualState, FaxMachineVisualState.Printing); else _appearanceSystem.SetData(uid, FaxMachineVisuals.VisualState, FaxMachineVisualState.Normal); } - private void UpdateUserInterface(EntityUid uid, FaxMachineComponent? component = null) { if (!Resolve(uid, ref component)) @@ -358,7 +379,7 @@ private void UpdateUserInterface(EntityUid uid, FaxMachineComponent? component = component.SendTimeoutRemaining <= 0 && component.InsertingTimeRemaining <= 0; var state = new FaxUiState(component.FaxName, component.KnownFaxes, canSend, canCopy, isPaperInserted, component.DestinationFaxAddress); - _userInterface.TrySetUiState(uid, FaxUiKey.Key, state); + _userInterface.SetUiState(uid, FaxUiKey.Key, state); } /// @@ -409,20 +430,20 @@ public void PrintFile(EntityUid uid, FaxMachineComponent component, FaxFileMessa else prototype = DefaultPaperPrototypeId; - var name = Loc.GetString("fax-machine-printed-paper-name"); - - var printout = new FaxPrintout(args.Content, name, prototype); + var name = Loc.GetString("fax-machine-printed-paper-name"); + + var printout = new FaxPrintout(args.Content, name, args.Label, prototype); component.PrintingQueue.Enqueue(printout); component.SendTimeoutRemaining += component.SendTimeout; UpdateUserInterface(uid, component); - if (args.Session.AttachedEntity != null) - _adminLogger.Add(LogType.Action, LogImpact.Low, - $"{ToPrettyString(args.Session.AttachedEntity.Value):actor} added print job to {ToPrettyString(uid):tool} with text: {args.Content}"); - else - _adminLogger.Add(LogType.Action, LogImpact.Low, - $"Someone added print job to {ToPrettyString(uid):tool} with text: {args.Content}"); + // Unfortunately, since a paper entity does not yet exist, we have to emulate what LabelSystem will do. + var nameWithLabel = (args.Label is { } label) ? $"{name} ({label})" : name; + _adminLogger.Add(LogType.Action, LogImpact.Low, + $"{ToPrettyString(args.Actor):actor} " + + $"added print job to \"{component.FaxName}\" {ToPrettyString(uid):tool} " + + $"of {nameWithLabel}: {args.Content}"); } /// @@ -442,9 +463,12 @@ public void Copy(EntityUid uid, FaxMachineComponent? component, FaxCopyMessage a !TryComp(sendEntity, out var paper)) return; + TryComp(sendEntity, out var labelComponent); + // TODO: See comment in 'Send()' about not being able to copy whole entities var printout = new FaxPrintout(paper.Content, - metadata.EntityName, + labelComponent?.OriginalName ?? metadata.EntityName, + labelComponent?.CurrentLabel, metadata.EntityPrototype?.ID ?? DefaultPaperPrototypeId, paper.StampState, paper.StampedBy); @@ -457,16 +481,17 @@ public void Copy(EntityUid uid, FaxMachineComponent? component, FaxCopyMessage a UpdateUserInterface(uid, component); - if (args.Session.AttachedEntity != null) - _adminLogger.Add(LogType.Action, LogImpact.Low, - $"{ToPrettyString(args.Session.AttachedEntity.Value):actor} added copy job to {ToPrettyString(uid):tool} with text: {ToPrettyString(component.PaperSlot.Item):subject}"); + _adminLogger.Add(LogType.Action, LogImpact.Low, + $"{ToPrettyString(args.Actor):actor} " + + $"added copy job to \"{component.FaxName}\" {ToPrettyString(uid):tool} " + + $"of {ToPrettyString(sendEntity):subject}: {printout.Content}"); } /// /// Sends message to addressee if paper is set and a known fax is selected /// A timeout is set after sending, which is shared by the copy button. /// - public void Send(EntityUid uid, FaxMachineComponent? component = null, EntityUid? sender = null) + public void Send(EntityUid uid, FaxMachineComponent? component, FaxSendMessage args) { if (!Resolve(uid, ref component)) return; @@ -482,13 +507,16 @@ public void Send(EntityUid uid, FaxMachineComponent? component = null, EntityUid return; if (!TryComp(sendEntity, out var metadata) || - !TryComp(sendEntity, out var paper)) + !TryComp(sendEntity, out var paper)) return; + TryComp(sendEntity, out var labelComponent); + var payload = new NetworkPayload() { { DeviceNetworkConstants.Command, FaxConstants.FaxPrintCommand }, - { FaxConstants.FaxPaperNameData, metadata.EntityName }, + { FaxConstants.FaxPaperNameData, labelComponent?.OriginalName ?? metadata.EntityName }, + { FaxConstants.FaxPaperLabelData, labelComponent?.CurrentLabel }, { FaxConstants.FaxPaperContentData, paper.Content }, }; @@ -509,7 +537,11 @@ public void Send(EntityUid uid, FaxMachineComponent? component = null, EntityUid _deviceNetworkSystem.QueuePacket(uid, component.DestinationFaxAddress, payload); - _adminLogger.Add(LogType.Action, LogImpact.Low, $"{(sender != null ? ToPrettyString(sender.Value) : "Unknown"):user} sent fax from \"{component.FaxName}\" {ToPrettyString(uid)} to {faxName} ({component.DestinationFaxAddress}): {paper.Content}"); + _adminLogger.Add(LogType.Action, LogImpact.Low, + $"{ToPrettyString(args.Actor):actor} " + + $"sent fax from \"{component.FaxName}\" {ToPrettyString(uid):tool} " + + $"to \"{faxName}\" ({component.DestinationFaxAddress}) " + + $"of {ToPrettyString(sendEntity):subject}: {paper.Content}"); component.SendTimeoutRemaining += component.SendTimeout; @@ -565,7 +597,13 @@ private void SpawnPaperFromQueue(EntityUid uid, FaxMachineComponent? component = } _metaData.SetEntityName(printed, printout.Name); - _adminLogger.Add(LogType.Action, LogImpact.Low, $"\"{component.FaxName}\" {ToPrettyString(uid)} printed {ToPrettyString(printed)}: {printout.Content}"); + + if (printout.Label is { } label) + { + _labelSystem.Label(printed, label); + } + + _adminLogger.Add(LogType.Action, LogImpact.Low, $"\"{component.FaxName}\" {ToPrettyString(uid):tool} printed {ToPrettyString(printed):subject}: {printout.Content}"); } private void NotifyAdmins(string faxName) diff --git a/Content.Server/Flash/FlashSystem.cs b/Content.Server/Flash/FlashSystem.cs index 7706bfec4ea..bc91a307b08 100644 --- a/Content.Server/Flash/FlashSystem.cs +++ b/Content.Server/Flash/FlashSystem.cs @@ -18,6 +18,7 @@ using Robust.Server.Audio; using Robust.Server.GameObjects; using Robust.Shared.Audio; +using Robust.Shared.Random; using Robust.Shared.Timing; using InventoryComponent = Content.Shared.Inventory.InventoryComponent; using Content.Shared.Traits.Assorted.Components; @@ -67,7 +68,7 @@ private void OnFlashMeleeHit(EntityUid uid, FlashComponent comp, MeleeHitEvent a args.Handled = true; foreach (var e in args.HitEntities) { - Flash(e, args.User, uid, comp.FlashDuration, comp.SlowTo, melee: true); + Flash(e, args.User, uid, comp.FlashDuration, comp.SlowTo, melee: true, stunDuration: comp.MeleeStunDuration); } } @@ -77,7 +78,7 @@ private void OnFlashUseInHand(EntityUid uid, FlashComponent comp, UseInHandEvent return; args.Handled = true; - FlashArea(uid, args.User, comp.Range, comp.AoeFlashDuration, comp.SlowTo, true); + FlashArea(uid, args.User, comp.Range, comp.AoeFlashDuration, comp.SlowTo, true, comp.Probability); } private bool UseFlash(EntityUid uid, FlashComponent comp, EntityUid user) @@ -117,7 +118,8 @@ public void Flash(EntityUid target, float slowTo, bool displayPopup = true, FlashableComponent? flashable = null, - bool melee = false) + bool melee = false, + TimeSpan? stunDuration = null) { if (!Resolve(target, ref flashable, false)) return; @@ -148,41 +150,46 @@ public void Flash(EntityUid target, && _random.Prob(flashable.EyeDamageChance)) _blindingSystem.AdjustEyeDamage((target, blindable), flashable.EyeDamage); - _stun.TrySlowdown(target, TimeSpan.FromSeconds(flashDuration/1000f), true, + if (stunDuration != null) + { + _stun.TryParalyze(target, stunDuration.Value, true); + } + else + { + _stun.TrySlowdown(target, TimeSpan.FromSeconds(flashDuration/1000f), true, slowTo, slowTo); + } if (displayPopup && user != null && target != user && Exists(user.Value)) { _popup.PopupEntity(Loc.GetString("flash-component-user-blinds-you", ("user", Identity.Entity(user.Value, EntityManager))), target, target); } - } - public void FlashArea(EntityUid source, EntityUid? user, float range, float duration, float slowTo = 0.8f, bool displayPopup = false, SoundSpecifier? sound = null) + public void FlashArea(Entity source, EntityUid? user, float range, float duration, float slowTo = 0.8f, bool displayPopup = false, float probability = 1f, SoundSpecifier? sound = null) { - var transform = EntityManager.GetComponent(source); + var transform = Transform(source); var mapPosition = _transform.GetMapCoordinates(transform); var flashableQuery = GetEntityQuery(); foreach (var entity in _entityLookup.GetEntitiesInRange(transform.Coordinates, range)) { - if (!flashableQuery.TryGetComponent(entity, out var flashable)) + if (!_random.Prob(probability)) continue; + if (!flashableQuery.TryGetComponent(entity, out var flashable)) + continue; // Check for unobstructed entities while ignoring the mobs with flashable components. - if (!_interaction.InRangeUnobstructed(entity, mapPosition, range, flashable.CollisionGroup, (e) => e == source)) + if (!_interaction.InRangeUnobstructed(entity, mapPosition, range, flashable.CollisionGroup, predicate: (e) => flashableQuery.HasComponent(e) || e == source.Owner)) continue; // They shouldn't have flash removed in between right? Flash(entity, user, source, duration, slowTo, displayPopup, flashableQuery.GetComponent(entity)); } - if (sound != null) - { - _audio.PlayPvs(sound, source, AudioParams.Default.WithVolume(1f).WithMaxDistance(3f)); - } + _audio.PlayPvs(sound, source, AudioParams.Default.WithVolume(1f).WithMaxDistance(3f)); } private void OnInventoryFlashAttempt(EntityUid uid, InventoryComponent component, FlashAttemptEvent args) diff --git a/Content.Server/Flight/FlightSystem.cs b/Content.Server/Flight/FlightSystem.cs index e056fc24ec0..39321b1e66c 100644 --- a/Content.Server/Flight/FlightSystem.cs +++ b/Content.Server/Flight/FlightSystem.cs @@ -6,6 +6,7 @@ using Content.Shared.Flight.Events; using Content.Shared.Mobs; using Content.Shared.Popups; +using Content.Shared.Standing; using Content.Shared.Stunnable; using Content.Shared.Zombies; using Robust.Shared.Audio.Systems; @@ -16,6 +17,7 @@ public sealed class FlightSystem : SharedFlightSystem [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly SharedDoAfterSystem _doAfter = default!; [Dependency] private readonly SharedPopupSystem _popupSystem = default!; + [Dependency] private readonly StandingStateSystem _standing = default!; public override void Initialize() { @@ -27,6 +29,7 @@ public override void Initialize() SubscribeLocalEvent(OnZombified); SubscribeLocalEvent(OnKnockedDown); SubscribeLocalEvent(OnStunned); + SubscribeLocalEvent(OnDowned); SubscribeLocalEvent(OnSleep); } public override void Update(float frameTime) @@ -103,6 +106,13 @@ private bool CanFly(EntityUid uid, FlightComponent component) _popupSystem.PopupEntity(Loc.GetString("no-flight-while-zombified"), uid, uid, PopupType.Medium); return false; } + + if (HasComp(uid) && _standing.IsDown(uid)) + { + _popupSystem.PopupEntity(Loc.GetString("no-flight-while-lying"), uid, uid, PopupType.Medium); + return false; + } + return true; } @@ -142,6 +152,14 @@ private void OnStunned(EntityUid uid, FlightComponent component, ref StunnedEven ToggleActive(uid, false, component); } + private void OnDowned(EntityUid uid, FlightComponent component, ref DownedEvent args) + { + if (!component.On) + return; + + ToggleActive(uid, false, component); + } + private void OnSleep(EntityUid uid, FlightComponent component, ref SleepStateChangedEvent args) { if (!component.On diff --git a/Content.Server/Fluids/EntitySystems/AbsorbentSystem.cs b/Content.Server/Fluids/EntitySystems/AbsorbentSystem.cs index d88f46968ab..3d0996a3802 100644 --- a/Content.Server/Fluids/EntitySystems/AbsorbentSystem.cs +++ b/Content.Server/Fluids/EntitySystems/AbsorbentSystem.cs @@ -1,3 +1,4 @@ +using System.Numerics; using Content.Server.Chemistry.Containers.EntitySystems; using Content.Server.Popups; using Content.Shared.Chemistry.Components; @@ -317,7 +318,7 @@ private bool TryPuddleInteract(EntityUid user, EntityUid used, EntityUid target, var userXform = Transform(user); var targetPos = _transform.GetWorldPosition(target); - var localPos = _transform.GetInvWorldMatrix(userXform).Transform(targetPos); + var localPos = Vector2.Transform(targetPos, _transform.GetInvWorldMatrix(userXform)); localPos = userXform.LocalRotation.RotateVec(localPos); _melee.DoLunge(user, used, Angle.Zero, localPos, null, false); diff --git a/Content.Server/Fluids/EntitySystems/DrainSystem.cs b/Content.Server/Fluids/EntitySystems/DrainSystem.cs index 19cb650db7c..27ad2178f93 100644 --- a/Content.Server/Fluids/EntitySystems/DrainSystem.cs +++ b/Content.Server/Fluids/EntitySystems/DrainSystem.cs @@ -87,19 +87,25 @@ private void Empty(EntityUid container, SpillableComponent spillable, EntityUid // Try to transfer as much solution as possible to the drain - var transferSolution = _solutionContainerSystem.SplitSolution(containerSoln.Value, - FixedPoint2.Min(containerSolution.Volume, drainSolution.AvailableVolume)); + var amountToPutInDrain = drainSolution.AvailableVolume; + var amountToSpillOnGround = containerSolution.Volume - drainSolution.AvailableVolume; - _solutionContainerSystem.TryAddSolution(drain.Solution.Value, transferSolution); + if (amountToPutInDrain > 0) + { + var solutionToPutInDrain = _solutionContainerSystem.SplitSolution(containerSoln.Value, amountToPutInDrain); + _solutionContainerSystem.TryAddSolution(drain.Solution.Value, solutionToPutInDrain); + + _audioSystem.PlayPvs(drain.ManualDrainSound, target); + _ambientSoundSystem.SetAmbience(target, true); + } - _audioSystem.PlayPvs(drain.ManualDrainSound, target); - _ambientSoundSystem.SetAmbience(target, true); - // If drain is full, spill + // Spill the remainder. - if (drainSolution.MaxVolume == drainSolution.Volume) + if (amountToSpillOnGround > 0) { - _puddleSystem.TrySpillAt(Transform(target).Coordinates, containerSolution, out _); + var solutionToSpill = _solutionContainerSystem.SplitSolution(containerSoln.Value, amountToSpillOnGround); + _puddleSystem.TrySpillAt(Transform(target).Coordinates, solutionToSpill, out _); _popupSystem.PopupEntity( Loc.GetString("drain-component-empty-verb-target-is-full-message", ("object", target)), container); diff --git a/Content.Server/Fluids/EntitySystems/PuddleSystem.Spillable.cs b/Content.Server/Fluids/EntitySystems/PuddleSystem.Spillable.cs index 7780e5d4676..3104e7b56c5 100644 --- a/Content.Server/Fluids/EntitySystems/PuddleSystem.Spillable.cs +++ b/Content.Server/Fluids/EntitySystems/PuddleSystem.Spillable.cs @@ -1,10 +1,9 @@ using Content.Server.Chemistry.Containers.EntitySystems; -using Content.Server.Fluids.Components; using Content.Shared.Chemistry.Components; using Content.Shared.Chemistry.EntitySystems; using Content.Shared.Chemistry.Reaction; using Content.Shared.Chemistry.Reagent; -using Content.Shared.Clothing.Components; +using Content.Shared.Clothing; using Content.Shared.CombatMode.Pacification; using Content.Shared.Database; using Content.Shared.FixedPoint; @@ -29,8 +28,8 @@ protected override void InitializeSpillable() SubscribeLocalEvent(SpillOnLand); // Openable handles the event if it's closed SubscribeLocalEvent(SplashOnMeleeHit, after: [typeof(OpenableSystem)]); - SubscribeLocalEvent(OnGotEquipped); - SubscribeLocalEvent(OnGotUnequipped); + SubscribeLocalEvent(OnGotEquipped); + SubscribeLocalEvent(OnGotUnequipped); SubscribeLocalEvent(OnOverflow); SubscribeLocalEvent(OnDoAfter); SubscribeLocalEvent(OnAttemptPacifiedThrow); @@ -99,20 +98,11 @@ private void SplashOnMeleeHit(Entity entity, ref MeleeHitEve } } - private void OnGotEquipped(Entity entity, ref GotEquippedEvent args) + private void OnGotEquipped(Entity entity, ref ClothingGotEquippedEvent args) { if (!entity.Comp.SpillWorn) return; - if (!TryComp(entity, out ClothingComponent? clothing)) - return; - - // check if entity was actually used as clothing - // not just taken in pockets or something - var isCorrectSlot = clothing.Slots.HasFlag(args.SlotFlags); - if (!isCorrectSlot) - return; - if (!_solutionContainerSystem.TryGetSolution(entity.Owner, entity.Comp.SolutionName, out var soln, out var solution)) return; @@ -124,7 +114,15 @@ private void OnGotEquipped(Entity entity, ref GotEquippedEve // spill all solution on the player var drainedSolution = _solutionContainerSystem.Drain(entity.Owner, soln.Value, solution.Volume); - TrySplashSpillAt(entity.Owner, Transform(args.Equipee).Coordinates, drainedSolution, out _); + TrySplashSpillAt(entity.Owner, Transform(args.Wearer).Coordinates, drainedSolution, out _); + } + + private void OnGotUnequipped(Entity entity, ref ClothingGotUnequippedEvent args) + { + if (!entity.Comp.SpillWorn) + return; + + RemCompDeferred(entity); } private void OnGotUnequipped(Entity entity, ref GotUnequippedEvent args) diff --git a/Content.Server/Fluids/EntitySystems/SpraySystem.cs b/Content.Server/Fluids/EntitySystems/SpraySystem.cs index f7621aec626..5499070738f 100644 --- a/Content.Server/Fluids/EntitySystems/SpraySystem.cs +++ b/Content.Server/Fluids/EntitySystems/SpraySystem.cs @@ -144,7 +144,7 @@ private void OnAfterInteract(Entity entity, ref AfterInteractEve _audio.PlayPvs(entity.Comp.SpraySound, entity, entity.Comp.SpraySound.Params.WithVariation(0.125f)); - _useDelay.SetDelay((entity, useDelay), TimeSpan.FromSeconds(cooldownTime)); + _useDelay.SetLength(entity.Owner, TimeSpan.FromSeconds(cooldownTime)); _useDelay.TryResetDelay((entity, useDelay)); } } diff --git a/Content.Server/FootPrint/FootPrintsSystem.cs b/Content.Server/FootPrint/FootPrintsSystem.cs new file mode 100644 index 00000000000..0e45acff5cc --- /dev/null +++ b/Content.Server/FootPrint/FootPrintsSystem.cs @@ -0,0 +1,122 @@ +using Content.Server.Atmos.Components; +using Content.Shared.Inventory; +using Content.Shared.Mobs; +using Content.Shared.Mobs.Components; +using Content.Shared.FootPrint; +using Content.Shared.Standing; +using Content.Shared.Chemistry.Components.SolutionManager; +using Content.Shared.Chemistry.EntitySystems; +using Robust.Shared.Map; +using Robust.Shared.Random; + +namespace Content.Server.FootPrint; + +public sealed class FootPrintsSystem : EntitySystem +{ + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly InventorySystem _inventory = default!; + [Dependency] private readonly IMapManager _map = default!; + + [Dependency] private readonly SharedSolutionContainerSystem _solution = default!; + [Dependency] private readonly SharedAppearanceSystem _appearance = default!; + [Dependency] private readonly SharedTransformSystem _transform = default!; + + private EntityQuery _transformQuery; + private EntityQuery _mobThresholdQuery; + private EntityQuery _appearanceQuery; + private EntityQuery _layingQuery; + + public override void Initialize() + { + base.Initialize(); + + _transformQuery = GetEntityQuery(); + _mobThresholdQuery = GetEntityQuery(); + _appearanceQuery = GetEntityQuery(); + _layingQuery = GetEntityQuery(); + + SubscribeLocalEvent(OnStartupComponent); + SubscribeLocalEvent(OnMove); + } + + private void OnStartupComponent(EntityUid uid, FootPrintsComponent component, ComponentStartup args) + { + component.StepSize = Math.Max(0f, component.StepSize + _random.NextFloat(-0.05f, 0.05f)); + } + + private void OnMove(EntityUid uid, FootPrintsComponent component, ref MoveEvent args) + { + if (component.PrintsColor.A <= 0f + || !_transformQuery.TryComp(uid, out var transform) + || !_mobThresholdQuery.TryComp(uid, out var mobThreshHolds) + || !_map.TryFindGridAt(_transform.GetMapCoordinates((uid, transform)), out var gridUid, out _)) + return; + + var dragging = mobThreshHolds.CurrentThresholdState is MobState.Critical or MobState.Dead + || _layingQuery.TryComp(uid, out var laying) && laying.IsCrawlingUnder; + var distance = (transform.LocalPosition - component.StepPos).Length(); + var stepSize = dragging ? component.DragSize : component.StepSize; + + if (!(distance > stepSize)) + return; + + component.RightStep = !component.RightStep; + + var entity = Spawn(component.StepProtoId, CalcCoords(gridUid, component, transform, dragging)); + var footPrintComponent = EnsureComp(entity); + + footPrintComponent.PrintOwner = uid; + Dirty(entity, footPrintComponent); + + if (_appearanceQuery.TryComp(entity, out var appearance)) + { + _appearance.SetData(entity, FootPrintVisualState.State, PickState(uid, dragging), appearance); + _appearance.SetData(entity, FootPrintVisualState.Color, component.PrintsColor, appearance); + } + + if (!_transformQuery.TryComp(entity, out var stepTransform)) + return; + + stepTransform.LocalRotation = dragging + ? (transform.LocalPosition - component.StepPos).ToAngle() + Angle.FromDegrees(-90f) + : transform.LocalRotation + Angle.FromDegrees(180f); + + component.PrintsColor = component.PrintsColor.WithAlpha(Math.Max(0f, component.PrintsColor.A - component.ColorReduceAlpha)); + component.StepPos = transform.LocalPosition; + + if (!TryComp(entity, out var solutionContainer) + || !_solution.ResolveSolution((entity, solutionContainer), footPrintComponent.SolutionName, ref footPrintComponent.Solution, out var solution) + || string.IsNullOrWhiteSpace(component.ReagentToTransfer) || solution.Volume >= 1) + return; + + _solution.TryAddReagent(footPrintComponent.Solution.Value, component.ReagentToTransfer, 1, out _); + } + + private EntityCoordinates CalcCoords(EntityUid uid, FootPrintsComponent component, TransformComponent transform, bool state) + { + if (state) + return new EntityCoordinates(uid, transform.LocalPosition); + + var offset = component.RightStep + ? new Angle(Angle.FromDegrees(180f) + transform.LocalRotation).RotateVec(component.OffsetPrint) + : new Angle(transform.LocalRotation).RotateVec(component.OffsetPrint); + + return new EntityCoordinates(uid, transform.LocalPosition + offset); + } + + private FootPrintVisuals PickState(EntityUid uid, bool dragging) + { + var state = FootPrintVisuals.BareFootPrint; + + if (_inventory.TryGetSlotEntity(uid, "shoes", out _)) + state = FootPrintVisuals.ShoesPrint; + + if (_inventory.TryGetSlotEntity(uid, "outerClothing", out var suit) && TryComp(suit, out _)) + state = FootPrintVisuals.SuitPrint; + + if (dragging) + state = FootPrintVisuals.Dragging; + + return state; + } +} diff --git a/Content.Server/FootPrint/PuddleFootPrintsSystem.cs b/Content.Server/FootPrint/PuddleFootPrintsSystem.cs new file mode 100644 index 00000000000..706ba25359d --- /dev/null +++ b/Content.Server/FootPrint/PuddleFootPrintsSystem.cs @@ -0,0 +1,52 @@ +using System.Linq; +using Content.Shared.FootPrint; +using Content.Shared.Chemistry.Components.SolutionManager; +using Content.Shared.Chemistry.EntitySystems; +using Content.Shared.Fluids; +using Content.Shared.Fluids.Components; +using Robust.Shared.Physics.Events; + +namespace Content.Server.FootPrint; + +public sealed class PuddleFootPrintsSystem : EntitySystem +{ + [Dependency] private readonly SharedAppearanceSystem _appearance = default!; + [Dependency] private readonly SharedSolutionContainerSystem _solutionContainer = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnStepTrigger); + } + + private void OnStepTrigger(EntityUid uid, PuddleFootPrintsComponent component, ref EndCollideEvent args) + { + if (!TryComp(uid, out var appearance) + || !TryComp(uid, out var puddle) + || !TryComp(args.OtherEntity, out var tripper) + || !TryComp(uid, out var solutionManager) + || !_solutionContainer.ResolveSolution((uid, solutionManager), puddle.SolutionName, ref puddle.Solution, out var solutions)) + return; + + var totalSolutionQuantity = solutions.Contents.Sum(sol => (float) sol.Quantity); + var waterQuantity = (from sol in solutions.Contents where sol.Reagent.Prototype == "Water" select (float) sol.Quantity).FirstOrDefault(); + + if (waterQuantity / (totalSolutionQuantity / 100f) > component.OffPercent || solutions.Contents.Count <= 0) + return; + + tripper.ReagentToTransfer = + solutions.Contents.Aggregate((l, r) => l.Quantity > r.Quantity ? l : r).Reagent.Prototype; + + if (_appearance.TryGetData(uid, PuddleVisuals.SolutionColor, out var color, appearance) + && _appearance.TryGetData(uid, PuddleVisuals.CurrentVolume, out var volume, appearance)) + AddColor((Color) color, (float) volume * component.SizeRatio, tripper); + + _solutionContainer.RemoveEachReagent(puddle.Solution.Value, 1); + } + + private void AddColor(Color col, float quantity, FootPrintsComponent component) + { + component.PrintsColor = component.ColorQuantity == 0f ? col : Color.InterpolateBetween(component.PrintsColor, col, component.ColorInterpolationFactor); + component.ColorQuantity += quantity; + } +} diff --git a/Content.Server/Forensics/Components/ForensicScannerComponent.cs b/Content.Server/Forensics/Components/ForensicScannerComponent.cs index ad262138482..3ad805cbbf8 100644 --- a/Content.Server/Forensics/Components/ForensicScannerComponent.cs +++ b/Content.Server/Forensics/Components/ForensicScannerComponent.cs @@ -1,4 +1,5 @@ using System.Threading; +using Content.Shared.Forensics; using Robust.Shared.Audio; using Robust.Shared.Prototypes; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; diff --git a/Content.Server/Forensics/Systems/ForensicScannerSystem.cs b/Content.Server/Forensics/Systems/ForensicScannerSystem.cs index 0d3168fd4e0..e83cde7456c 100644 --- a/Content.Server/Forensics/Systems/ForensicScannerSystem.cs +++ b/Content.Server/Forensics/Systems/ForensicScannerSystem.cs @@ -52,8 +52,7 @@ private void UpdateUserInterface(EntityUid uid, ForensicScannerComponent compone component.PrintCooldown, component.PrintReadyAt); - if (!_uiSystem.TrySetUiState(uid, ForensicScannerUiKey.Key, state)) - Log.Warning($"{ToPrettyString(uid)} was unable to set UI state."); + _uiSystem.SetUiState(uid, ForensicScannerUiKey.Key, state); } private void OnDoAfter(EntityUid uid, ForensicScannerComponent component, DoAfterEvent args) @@ -164,23 +163,14 @@ private void OnBeforeActivatableUIOpen(EntityUid uid, ForensicScannerComponent c private void OpenUserInterface(EntityUid user, Entity scanner) { - if (!TryComp(user, out var actor)) - return; - UpdateUserInterface(scanner, scanner.Comp); - _uiSystem.TryOpen(scanner, ForensicScannerUiKey.Key, actor.PlayerSession); + _uiSystem.OpenUi(scanner.Owner, ForensicScannerUiKey.Key, user); } private void OnPrint(EntityUid uid, ForensicScannerComponent component, ForensicScannerPrintMessage args) { - if (!args.Session.AttachedEntity.HasValue) - { - Log.Warning($"{ToPrettyString(uid)} got OnPrint without Session.AttachedEntity"); - return; - } - - var user = args.Session.AttachedEntity.Value; + var user = args.Actor; if (_gameTiming.CurTime < component.PrintReadyAt) { @@ -192,7 +182,7 @@ private void OnPrint(EntityUid uid, ForensicScannerComponent component, Forensic // Spawn a piece of paper. var printed = EntityManager.SpawnEntity(component.MachineOutput, Transform(uid).Coordinates); - _handsSystem.PickupOrDrop(args.Session.AttachedEntity, printed, checkActionBlocker: false); + _handsSystem.PickupOrDrop(args.Actor, printed, checkActionBlocker: false); if (!HasComp(printed)) { @@ -241,9 +231,6 @@ private void OnPrint(EntityUid uid, ForensicScannerComponent component, Forensic private void OnClear(EntityUid uid, ForensicScannerComponent component, ForensicScannerClearMessage args) { - if (!args.Session.AttachedEntity.HasValue) - return; - component.Fingerprints = new(); component.Fibers = new(); component.DNAs = new(); diff --git a/Content.Server/Forensics/Systems/ForensicsSystem.cs b/Content.Server/Forensics/Systems/ForensicsSystem.cs index dff134a5113..8f91ec41e80 100644 --- a/Content.Server/Forensics/Systems/ForensicsSystem.cs +++ b/Content.Server/Forensics/Systems/ForensicsSystem.cs @@ -131,53 +131,32 @@ public void CopyForensicsFrom(ForensicsComponent src, EntityUid target) private void OnAfterInteract(EntityUid uid, CleansForensicsComponent component, AfterInteractEvent args) { - if (args.Handled) + if (args.Handled || !args.CanReach || !TryComp(args.Target, out var forensicsComp)) return; - if (TryComp(args.Target, out var forensicsComp) - && forensicsComp.DNAs.Count > 0 && forensicsComp.CanDnaBeCleaned - && forensicsComp.Fingerprints.Count + forensicsComp.Fibers.Count > 0 - && forensicsComp.Scent != string.Empty) - { - var cleanDelay = component.CleanDelay; - if (HasComp(args.Target)) - cleanDelay += 30; + if ((forensicsComp.DNAs.Count <= 0 || !forensicsComp.CanDnaBeCleaned) + && forensicsComp.Fingerprints.Count + forensicsComp.Fibers.Count <= 0 + && forensicsComp.Scent == string.Empty) + return; // Nothing to do if there is no DNAs, fibers, and scent - var doAfterArgs = new DoAfterArgs(EntityManager, args.User, cleanDelay, new CleanForensicsDoAfterEvent(), uid, target: args.Target, used: args.Used) - { - BreakOnHandChange = true, - NeedHand = true, - BreakOnDamage = true, - BreakOnTargetMove = true, - MovementThreshold = 0.01f, - DistanceThreshold = forensicsComp.CleanDistance, - }; - - _doAfterSystem.TryStartDoAfter(doAfterArgs); - _popupSystem.PopupEntity(Loc.GetString("forensics-cleaning", ("target", args.Target)), args.User, args.User); - - args.Handled = true; - return; - } + var cleanDelay = component.CleanDelay; + if (HasComp(args.Target)) + cleanDelay += 30; - if (TryComp(args.Target, out var scentComp)) + var doAfterArgs = new DoAfterArgs(EntityManager, args.User, cleanDelay, new CleanForensicsDoAfterEvent(), uid, target: args.Target, used: args.Used) { - var cleanDelay = component.CleanDelay + 30; - var doAfterArgs = new DoAfterArgs(EntityManager, args.User, cleanDelay, new CleanForensicsDoAfterEvent(), uid, target: args.Target, used: args.Used) - { - BreakOnHandChange = true, - NeedHand = true, - BreakOnDamage = true, - BreakOnTargetMove = true, - MovementThreshold = 0.01f, - DistanceThreshold = 1.5f, - }; - - _doAfterSystem.TryStartDoAfter(doAfterArgs); - _popupSystem.PopupEntity(Loc.GetString("forensics-cleaning", ("target", args.Target)), args.User, args.User); - - args.Handled = true; - } + BreakOnHandChange = true, + NeedHand = true, + BreakOnDamage = true, + BreakOnTargetMove = true, + MovementThreshold = 0.01f, + DistanceThreshold = forensicsComp.CleanDistance, + }; + + _doAfterSystem.TryStartDoAfter(doAfterArgs); + _popupSystem.PopupEntity(Loc.GetString("forensics-cleaning", ("target", args.Target)), args.User, args.User); + + args.Handled = true; } private void OnCleanForensicsDoAfter(EntityUid uid, ForensicsComponent component, CleanForensicsDoAfterEvent args) @@ -202,7 +181,8 @@ private void OnCleanForensicsDoAfter(EntityUid uid, ForensicsComponent component if (TryComp(args.Used, out var residue)) targetComp.Residues.Add(string.IsNullOrEmpty(residue.ResidueColor) ? Loc.GetString("forensic-residue", ("adjective", residue.ResidueAdjective)) : Loc.GetString("forensic-residue-colored", ("color", residue.ResidueColor), ("adjective", residue.ResidueAdjective))); - // If the ent has a Scent Component, we compleatly generate a new one and apply the new scent to all currently weared items. + // If the ent has a Scent Component, we completely generate a new one and apply the new scent to all currently worn items. + // TODO this is never gonna work unless you like, wash yourself with the soap??? if (TryComp(args.Target, out var scentComp)) { var generatedscent = GenerateFingerprint(length: 5); diff --git a/Content.Server/GameTicking/Events/GetDisallowedJobsEvent.cs b/Content.Server/GameTicking/Events/GetDisallowedJobsEvent.cs new file mode 100644 index 00000000000..cd15cfb8f8d --- /dev/null +++ b/Content.Server/GameTicking/Events/GetDisallowedJobsEvent.cs @@ -0,0 +1,8 @@ +using Content.Shared.Roles; +using Robust.Shared.Player; +using Robust.Shared.Prototypes; + +namespace Content.Server.GameTicking.Events; + +[ByRefEvent] +public readonly record struct GetDisallowedJobsEvent(ICommonSession Player, HashSet> Jobs); diff --git a/Content.Server/GameTicking/Events/IsJobAllowedEvent.cs b/Content.Server/GameTicking/Events/IsJobAllowedEvent.cs new file mode 100644 index 00000000000..51969d61ea0 --- /dev/null +++ b/Content.Server/GameTicking/Events/IsJobAllowedEvent.cs @@ -0,0 +1,13 @@ +using Content.Shared.Roles; +using Robust.Shared.Player; +using Robust.Shared.Prototypes; + +namespace Content.Server.GameTicking.Events; + +[ByRefEvent] +public struct IsJobAllowedEvent(ICommonSession player, ProtoId jobId, bool cancelled = false) +{ + public readonly ICommonSession Player = player; + public readonly ProtoId JobId = jobId; + public bool Cancelled = cancelled; +} diff --git a/Content.Server/GameTicking/GameTicker.GamePreset.cs b/Content.Server/GameTicking/GameTicker.GamePreset.cs index b97a16ab993..4c454fb1897 100644 --- a/Content.Server/GameTicking/GameTicker.GamePreset.cs +++ b/Content.Server/GameTicking/GameTicker.GamePreset.cs @@ -1,6 +1,7 @@ using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Threading.Tasks; +using Content.Server.Ghost; using Content.Server.GameTicking.Presets; using Content.Server.Maps; using Content.Shared.CCVar; @@ -21,7 +22,7 @@ namespace Content.Server.GameTicking public sealed partial class GameTicker { [Dependency] private readonly MobThresholdSystem _mobThresholdSystem = default!; - + [Dependency] private readonly GhostReturnToRoundSystem _ghostReturnToRound = default!; public const float PresetFailedCooldownIncrease = 30f; /// @@ -100,7 +101,7 @@ private void InitializeGamePreset() SetGamePreset(LobbyEnabled ? _configurationManager.GetCVar(CCVars.GameLobbyDefaultPreset) : "sandbox"); } - public void SetGamePreset(GamePresetPrototype preset, bool force = false) + public void SetGamePreset(GamePresetPrototype? preset, bool force = false) { // Do nothing if this game ticker is a dummy! if (DummyTicker) @@ -274,35 +275,13 @@ public bool OnGhostAttempt(EntityUid mindId, bool canReturnGlobal, bool viaComma } } - var xformQuery = GetEntityQuery(); - var coords = _transform.GetMoverCoordinates(position, xformQuery); - - var ghost = Spawn(ObserverPrototypeName, coords); - - // Try setting the ghost entity name to either the character name or the player name. - // If all else fails, it'll default to the default entity prototype name, "observer". - // However, that should rarely happen. - if (!string.IsNullOrWhiteSpace(mind.CharacterName)) - _metaData.SetEntityName(ghost, mind.CharacterName); - else if (!string.IsNullOrWhiteSpace(mind.Session?.Name)) - _metaData.SetEntityName(ghost, mind.Session.Name); - - var ghostComponent = Comp(ghost); - - if (mind.TimeOfDeath.HasValue) - { - _ghost.SetTimeOfDeath(ghost, mind.TimeOfDeath!.Value, ghostComponent); - } + var ghost = _ghost.SpawnGhost((mindId, mind), position, canReturn); + if (ghost == null) + return false; if (playerEntity != null) _adminLogger.Add(LogType.Mind, $"{EntityManager.ToPrettyString(playerEntity.Value):player} ghosted{(!canReturn ? " (non-returnable)" : "")}"); - _ghost.SetCanReturnToBody(ghostComponent, canReturn); - - if (canReturn) - _mind.Visit(mindId, ghost, mind); - else - _mind.TransferTo(mindId, ghost, mind: mind); return true; } diff --git a/Content.Server/GameTicking/GameTicker.Player.cs b/Content.Server/GameTicking/GameTicker.Player.cs index be52137d4fc..2e003742055 100644 --- a/Content.Server/GameTicking/GameTicker.Player.cs +++ b/Content.Server/GameTicking/GameTicker.Player.cs @@ -142,13 +142,30 @@ private async void PlayerStatusChanged(object? sender, SessionStatusEventArgs ar async void SpawnWaitDb() { - await _userDb.WaitLoadComplete(session); + try + {await _userDb.WaitLoadComplete(session);} + catch (OperationCanceledException) + { + // Bail, user must've disconnected or something. + Log.Debug($"Database load cancelled while waiting to spawn {session}"); + return; + } SpawnPlayer(session, EntityUid.Invalid); } async void SpawnObserverWaitDb() { - await _userDb.WaitLoadComplete(session); + try + { + await _userDb.WaitLoadComplete(session); + } + catch (OperationCanceledException) + { + // Bail, user must've disconnected or something. + Log.Debug($"Database load cancelled while waiting to spawn {session}"); + return; + } + JoinAsObserver(session); } diff --git a/Content.Server/GameTicking/GameTicker.RoundFlow.cs b/Content.Server/GameTicking/GameTicker.RoundFlow.cs index 0fc984abeda..889a8a5a2b6 100644 --- a/Content.Server/GameTicking/GameTicker.RoundFlow.cs +++ b/Content.Server/GameTicking/GameTicker.RoundFlow.cs @@ -167,7 +167,7 @@ public IReadOnlyList LoadGameMap(GameMapPrototype map, MapId targetMa var gridIds = _map.LoadMap(targetMapId, ev.GameMap.MapPath.ToString(), ev.Options); - _metaData.SetEntityName(_mapManager.GetMapEntityId(targetMapId), "Station map"); + _metaData.SetEntityName(_mapManager.GetMapEntityId(targetMapId), $"station map - {map.MapName}"); var gridUids = gridIds.ToList(); RaiseLocalEvent(new PostGameMapLoad(map, targetMapId, gridUids, stationName)); @@ -269,7 +269,10 @@ public void StartRound(bool force = false) var origReadyPlayers = readyPlayers.ToArray(); if (!StartPreset(origReadyPlayers, force)) + { + _startingRound = false; return; + } // MapInitialize *before* spawning players, our codebase is too shit to do it afterwards... _mapManager.DoMapInitialize(DefaultMap); diff --git a/Content.Server/GameTicking/GameTicker.Spawning.cs b/Content.Server/GameTicking/GameTicker.Spawning.cs index f007718f6b4..463d6734d46 100644 --- a/Content.Server/GameTicking/GameTicker.Spawning.cs +++ b/Content.Server/GameTicking/GameTicker.Spawning.cs @@ -2,13 +2,16 @@ using System.Linq; using System.Numerics; using Content.Server.Administration.Managers; +using Content.Server.GameTicking.Events; using Content.Server._NF.Respawn; using Content.Server.Ghost; using Content.Server.Spawners.Components; using Content.Server.Speech.Components; using Content.Server.Station.Components; using Content.Shared.CCVar; +using Content.Shared.Chat; using Content.Shared.Database; +using Content.Shared.Mind; using Content.Shared.Players; using Content.Shared.Preferences; using Content.Shared.Roles; @@ -56,7 +59,9 @@ public List GetSpawnableStations() return spawnableStations; } - private void SpawnPlayers(List readyPlayers, Dictionary profiles, bool force) + private void SpawnPlayers(List readyPlayers, + Dictionary profiles, + bool force) { // Allow game rules to spawn players by themselves if needed. (For example, nuke ops or wizard) RaiseLocalEvent(new RulePlayerSpawningEvent(readyPlayers, profiles, force)); @@ -117,10 +122,17 @@ private void SpawnPlayers(List readyPlayers, Dictionary _playerManager.GetSessionById(x)).ToArray(), profiles, force)); + RaiseLocalEvent(new RulePlayerJobsAssignedEvent( + assignedJobs.Keys.Select(x => _playerManager.GetSessionById(x)).ToArray(), + profiles, + force)); } - private void SpawnPlayer(ICommonSession player, EntityUid station, string? jobId = null, bool lateJoin = true, bool silent = false) + private void SpawnPlayer(ICommonSession player, + EntityUid station, + string? jobId = null, + bool lateJoin = true, + bool silent = false) { var character = GetPlayerProfile(player); @@ -128,12 +140,23 @@ private void SpawnPlayer(ICommonSession player, EntityUid station, string? jobId if (jobBans == null || jobId != null && jobBans.Contains(jobId)) return; - if (jobId != null && !_playTimeTrackings.IsAllowed(player, jobId)) - return; + if (jobId != null) + { + var ev = new IsJobAllowedEvent(player, new ProtoId(jobId)); + RaiseLocalEvent(ref ev); + if (ev.Cancelled) + return; + } + SpawnPlayer(player, character, station, jobId, lateJoin, silent); } - private void SpawnPlayer(ICommonSession player, HumanoidCharacterProfile character, EntityUid station, string? jobId = null, bool lateJoin = true, bool silent = false) + private void SpawnPlayer(ICommonSession player, + HumanoidCharacterProfile character, + EntityUid station, + string? jobId = null, + bool lateJoin = true, + bool silent = false) { // Can't spawn players with a dummy ticker! if (DummyTicker) @@ -155,6 +178,20 @@ private void SpawnPlayer(ICommonSession player, HumanoidCharacterProfile charact return; } + //Ghost system return to round, check for whether the character isn't the same. + if (!_cfg.GetCVar(CCVars.GhostAllowSameCharacter) && lateJoin && !_adminManager.IsAdmin(player) && !CheckGhostReturnToRound(player, character, out var checkAvoid)) + { + var message = checkAvoid + ? Loc.GetString("ghost-respawn-same-character-slightly-changed-name") + : Loc.GetString("ghost-respawn-same-character"); + var wrappedMessage = Loc.GetString("chat-manager-server-wrap-message", ("message", message)); + + _chatManager.ChatMessageToOne(ChatChannel.Server, message, wrappedMessage, + default, false, player.Channel, Color.Red); + + return; + } + // We raise this event to allow other systems to handle spawning this player themselves. (e.g. late-join wizard, etc) var bev = new PlayerBeforeSpawnEvent(player, character, jobId, lateJoin, station); RaiseLocalEvent(bev); @@ -167,17 +204,18 @@ private void SpawnPlayer(ICommonSession player, HumanoidCharacterProfile charact } // Figure out job restrictions - var restrictedRoles = new HashSet(); - - var getDisallowed = _playTimeTrackings.GetDisallowedJobs(player); - restrictedRoles.UnionWith(getDisallowed); + var restrictedRoles = new HashSet>(); + var ev = new GetDisallowedJobsEvent(player, restrictedRoles); + RaiseLocalEvent(ref ev); var jobBans = _banManager.GetJobBans(player.UserId); if (jobBans != null) restrictedRoles.UnionWith(jobBans); // Pick best job best on prefs. - jobId ??= _stationJobs.PickBestAvailableJobWithPriority(station, character.JobPriorities, true, + jobId ??= _stationJobs.PickBestAvailableJobWithPriority(station, + character.JobPriorities, + true, restrictedRoles); // If no job available, stay in lobby, or if no lobby spawn as observer if (jobId is null) @@ -186,7 +224,9 @@ private void SpawnPlayer(ICommonSession player, HumanoidCharacterProfile charact { JoinAsObserver(player); } - _chatManager.DispatchServerMessage(player, Loc.GetString("game-ticker-player-no-jobs-available-when-joining")); + + _chatManager.DispatchServerMessage(player, + Loc.GetString("game-ticker-player-no-jobs-available-when-joining")); return; } @@ -223,12 +263,10 @@ private void SpawnPlayer(ICommonSession player, HumanoidCharacterProfile charact if (lateJoin && !silent) { _chatSystem.DispatchStationAnnouncement(station, - Loc.GetString( - "latejoin-arrival-announcement", - ("character", MetaData(mob).EntityName), - ("gender", character.Gender), // Corvax-LastnameGender - ("job", CultureInfo.CurrentCulture.TextInfo.ToTitleCase(jobName)) - ), Loc.GetString("latejoin-arrival-sender"), + Loc.GetString("latejoin-arrival-announcement", + ("character", MetaData(mob).EntityName), + ("job", CultureInfo.CurrentCulture.TextInfo.ToTitleCase(jobName))), + Loc.GetString("latejoin-arrival-sender"), playDefaultSound: false); } @@ -242,14 +280,17 @@ private void SpawnPlayer(ICommonSession player, HumanoidCharacterProfile charact _stationJobs.TryAssignJob(station, jobPrototype, player.UserId); if (lateJoin) - _adminLogger.Add(LogType.LateJoin, LogImpact.Medium, $"Player {player.Name} late joined as {character.Name:characterName} on station {Name(station):stationName} with {ToPrettyString(mob):entity} as a {jobName:jobName}."); + _adminLogger.Add(LogType.LateJoin, + LogImpact.Medium, + $"Player {player.Name} late joined as {character.Name:characterName} on station {Name(station):stationName} with {ToPrettyString(mob):entity} as a {jobName:jobName}."); else - _adminLogger.Add(LogType.RoundStartJoin, LogImpact.Medium, $"Player {player.Name} joined as {character.Name:characterName} on station {Name(station):stationName} with {ToPrettyString(mob):entity} as a {jobName:jobName}."); + _adminLogger.Add(LogType.RoundStartJoin, + LogImpact.Medium, + $"Player {player.Name} joined as {character.Name:characterName} on station {Name(station):stationName} with {ToPrettyString(mob):entity} as a {jobName:jobName}."); // Make sure they're aware of extended access. if (Comp(station).ExtendedAccess - && (jobPrototype.ExtendedAccess.Count > 0 - || jobPrototype.ExtendedAccessGroups.Count > 0)) + && (jobPrototype.ExtendedAccess.Count > 0 || jobPrototype.ExtendedAccessGroups.Count > 0)) { _chatManager.DispatchServerMessage(player, Loc.GetString("job-greet-crew-shortages")); } @@ -271,14 +312,20 @@ private void SpawnPlayer(ICommonSession player, HumanoidCharacterProfile charact } else { - _chatManager.DispatchServerMessage(player, Loc.GetString("latejoin-arrivals-direction-time", - ("time", $"{arrival:mm\\:ss}"))); + _chatManager.DispatchServerMessage(player, + Loc.GetString("latejoin-arrivals-direction-time", ("time", $"{arrival:mm\\:ss}"))); } } // We raise this event directed to the mob, but also broadcast it so game rules can do something now. PlayersJoinedRoundNormally++; - var aev = new PlayerSpawnCompleteEvent(mob, player, jobId, lateJoin, PlayersJoinedRoundNormally, station, character); + var aev = new PlayerSpawnCompleteEvent(mob, + player, + jobId, + lateJoin, + PlayersJoinedRoundNormally, + station, + character); RaiseLocalEvent(mob, aev, true); } @@ -333,20 +380,74 @@ public void SpawnObserver(ICommonSession player) if (DummyTicker) return; - var mind = player.GetMind(); + Entity? mind = player.GetMind(); if (mind == null) { - mind = _mind.CreateMind(player.UserId); + var name = GetPlayerProfile(player).Name; + var (mindId, mindComp) = _mind.CreateMind(player.UserId, name); + mind = (mindId, mindComp); _mind.SetUserId(mind.Value, player.UserId); _roles.MindAddRole(mind.Value, new ObserverRoleComponent()); } - var name = GetPlayerProfile(player).Name; - var ghost = SpawnObserverMob(); - _metaData.SetEntityName(ghost, name); - _ghost.SetCanReturnToBody(ghost, false); - _mind.TransferTo(mind.Value, ghost); - _adminLogger.Add(LogType.LateJoin, LogImpact.Low, $"{player.Name} late joined the round as an Observer with {ToPrettyString(ghost):entity}."); + var ghost = _ghost.SpawnGhost(mind.Value); + _adminLogger.Add(LogType.LateJoin, + LogImpact.Low, + $"{player.Name} late joined the round as an Observer with {ToPrettyString(ghost):entity}."); + } + + private bool CheckGhostReturnToRound(ICommonSession player, HumanoidCharacterProfile character, out bool checkAvoid) + { + checkAvoid = false; + + var allPlayerMinds = EntityQuery() + .Where(mind => mind.OriginalOwnerUserId == player.UserId); + + foreach (var mind in allPlayerMinds) + { + if (mind.CharacterName == character.Name) + return false; + + if (mind.CharacterName == null) + continue; + + var similarity = CalculateStringSimilarity(mind.CharacterName, character.Name); + switch (similarity) + { + case >= 85f: + _chatManager.SendAdminAlert(Loc.GetString("ghost-respawn-log-character-almost-same", + ("player", player.Name), ("try", false), ("oldName", mind.CharacterName), + ("newName", character.Name))); + checkAvoid = true; + + return false; + case >= 50f: + _chatManager.SendAdminAlert(Loc.GetString("ghost-respawn-log-character-almost-same", + ("player", player.Name), ("try", true), ("oldName", mind.CharacterName), + ("newName", character.Name))); + + break; + } + } + + return true; + } + + private float CalculateStringSimilarity(string str1, string str2) + { + var minLength = Math.Min(str1.Length, str2.Length); + var matchingCharacters = 0; + + for (var i = 0; i < minLength; i++) + { + if (str1[i] == str2[i]) + matchingCharacters++; + } + + float maxLength = Math.Max(str1.Length, str2.Length); + var similarityPercentage = (matchingCharacters / maxLength) * 100; + + return similarityPercentage; } #region Mob Spawning Helpers @@ -358,6 +459,7 @@ private EntityUid SpawnObserverMob() #endregion #region Spawn Points + public EntityCoordinates GetObserverSpawnPoint() { _possiblePositions.Clear(); @@ -378,8 +480,7 @@ public EntityCoordinates GetObserverSpawnPoint() var query = AllEntityQuery(); while (query.MoveNext(out var uid, out var grid)) { - if (!metaQuery.TryGetComponent(uid, out var meta) || - meta.EntityPaused) + if (!metaQuery.TryGetComponent(uid, out var meta) || meta.EntityPaused || TerminatingOrDeleted(uid)) { continue; } @@ -400,8 +501,7 @@ public EntityCoordinates GetObserverSpawnPoint() { var gridXform = Transform(gridUid); - return new EntityCoordinates(gridUid, - gridXform.InvWorldMatrix.Transform(toMap.Position)); + return new EntityCoordinates(gridUid, Vector2.Transform(toMap.Position, gridXform.InvWorldMatrix)); } return spawn; @@ -417,8 +517,9 @@ public EntityCoordinates GetObserverSpawnPoint() { var mapUid = _mapManager.GetMapEntityId(map); - if (!metaQuery.TryGetComponent(mapUid, out var meta) || - meta.EntityPaused) + if (!metaQuery.TryGetComponent(mapUid, out var meta) + || meta.EntityPaused + || TerminatingOrDeleted(mapUid)) { continue; } @@ -431,6 +532,7 @@ public EntityCoordinates GetObserverSpawnPoint() _sawmill.Warning("Found no observer spawn points!"); return EntityCoordinates.Invalid; } + #endregion } @@ -448,7 +550,11 @@ public sealed class PlayerBeforeSpawnEvent : HandledEntityEventArgs public bool LateJoin { get; } public EntityUid Station { get; } - public PlayerBeforeSpawnEvent(ICommonSession player, HumanoidCharacterProfile profile, string? jobId, bool lateJoin, EntityUid station) + public PlayerBeforeSpawnEvent(ICommonSession player, + HumanoidCharacterProfile profile, + string? jobId, + bool lateJoin, + EntityUid station) { Player = player; Profile = profile; @@ -476,7 +582,13 @@ public sealed class PlayerSpawnCompleteEvent : EntityEventArgs // Ex. If this is the 27th person to join, this will be 27. public int JoinOrder { get; } - public PlayerSpawnCompleteEvent(EntityUid mob, ICommonSession player, string? jobId, bool lateJoin, int joinOrder, EntityUid station, HumanoidCharacterProfile profile) + public PlayerSpawnCompleteEvent(EntityUid mob, + ICommonSession player, + string? jobId, + bool lateJoin, + int joinOrder, + EntityUid station, + HumanoidCharacterProfile profile) { Mob = mob; Player = player; diff --git a/Content.Server/GameTicking/Rules/Components/LoadMapRuleComponent.cs b/Content.Server/GameTicking/Rules/Components/LoadMapRuleComponent.cs index 463aecbff54..b7aef0c61dc 100644 --- a/Content.Server/GameTicking/Rules/Components/LoadMapRuleComponent.cs +++ b/Content.Server/GameTicking/Rules/Components/LoadMapRuleComponent.cs @@ -1,4 +1,6 @@ using Content.Server.Maps; +using Content.Shared.GridPreloader.Prototypes; +using Content.Shared.Storage; using Content.Shared.Whitelist; using Robust.Shared.Map; using Robust.Shared.Prototypes; @@ -16,11 +18,14 @@ public sealed partial class LoadMapRuleComponent : Component public MapId? Map; [DataField] - public ProtoId? GameMap ; + public ProtoId? GameMap; [DataField] public ResPath? MapPath; + [DataField] + public ProtoId? PreloadedGrid; + [DataField] public List MapGrids = new(); diff --git a/Content.Server/GameTicking/Rules/Components/NukeOperativeSpawnerComponent.cs b/Content.Server/GameTicking/Rules/Components/NukeOperativeSpawnerComponent.cs index bb1b7c87460..54eaa6e32e4 100644 --- a/Content.Server/GameTicking/Rules/Components/NukeOperativeSpawnerComponent.cs +++ b/Content.Server/GameTicking/Rules/Components/NukeOperativeSpawnerComponent.cs @@ -1,3 +1,5 @@ +using Robust.Shared.Prototypes; + namespace Content.Server.GameTicking.Rules.Components; /// @@ -5,6 +7,5 @@ namespace Content.Server.GameTicking.Rules.Components; /// and providing loadout + name for the operative on spawn. /// TODO: Remove once systems can request spawns from the ghost role system directly. /// -[RegisterComponent] +[RegisterComponent, EntityCategory("Spawner")] public sealed partial class NukeOperativeSpawnerComponent : Component; - diff --git a/Content.Server/GameTicking/Rules/Components/NukeopsRuleComponent.cs b/Content.Server/GameTicking/Rules/Components/NukeopsRuleComponent.cs index f64947e286e..7862b38e592 100644 --- a/Content.Server/GameTicking/Rules/Components/NukeopsRuleComponent.cs +++ b/Content.Server/GameTicking/Rules/Components/NukeopsRuleComponent.cs @@ -5,11 +5,7 @@ using Content.Shared.Roles; using Robust.Shared.Audio; using Robust.Shared.Prototypes; -using Robust.Shared.Serialization.TypeSerializers.Implementations; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; -using Robust.Shared.Utility; - namespace Content.Server.GameTicking.Rules.Components; diff --git a/Content.Server/GameTicking/Rules/Components/TraitorRuleComponent.cs b/Content.Server/GameTicking/Rules/Components/TraitorRuleComponent.cs index dd359969b6f..47a4adeaf34 100644 --- a/Content.Server/GameTicking/Rules/Components/TraitorRuleComponent.cs +++ b/Content.Server/GameTicking/Rules/Components/TraitorRuleComponent.cs @@ -31,6 +31,9 @@ public sealed partial class TraitorRuleComponent : Component [DataField] public ProtoId CodewordVerbs = "verbs"; + [DataField] + public ProtoId ObjectiveIssuers = "TraitorCorporations"; + public int TotalTraitors => TraitorMinds.Count; public string[] Codewords = new string[3]; diff --git a/Content.Server/GameTicking/Rules/GameRuleSystem.Utility.cs b/Content.Server/GameTicking/Rules/GameRuleSystem.Utility.cs index 27a9edbad71..cbd981e99e6 100644 --- a/Content.Server/GameTicking/Rules/GameRuleSystem.Utility.cs +++ b/Content.Server/GameTicking/Rules/GameRuleSystem.Utility.cs @@ -1,7 +1,10 @@ using System.Diagnostics.CodeAnalysis; +using System.Linq; using Content.Server.GameTicking.Components; using Content.Server.GameTicking.Rules.Components; using Content.Server.Station.Components; +using Content.Shared.Random.Helpers; +using Robust.Server.GameObjects; using Robust.Shared.Collections; using Robust.Shared.Map; using Robust.Shared.Map.Components; @@ -82,17 +85,23 @@ protected bool TryFindRandomTileOnStation(Entity station, targetCoords = EntityCoordinates.Invalid; targetGrid = EntityUid.Invalid; - var possibleTargets = station.Comp.Grids; - if (possibleTargets.Count == 0) + // Weight grid choice by tilecount + var weights = new Dictionary, float>(); + foreach (var possibleTarget in station.Comp.Grids) + { + if (!TryComp(possibleTarget, out var comp)) + continue; + + weights.Add((possibleTarget, comp), _map.GetAllTiles(possibleTarget, comp).Count()); + } + + if (weights.Count == 0) { targetGrid = EntityUid.Invalid; return false; } - targetGrid = RobustRandom.Pick(possibleTargets); - - if (!TryComp(targetGrid, out var gridComp)) - return false; + (targetGrid, var gridComp) = RobustRandom.Pick(weights); var found = false; var aabb = gridComp.LocalAABB; diff --git a/Content.Server/GameTicking/Rules/GameRuleSystem.cs b/Content.Server/GameTicking/Rules/GameRuleSystem.cs index c167ae7b6c7..05374aa1396 100644 --- a/Content.Server/GameTicking/Rules/GameRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/GameRuleSystem.cs @@ -26,7 +26,7 @@ public override void Initialize() SubscribeLocalEvent(OnGameRuleAdded); SubscribeLocalEvent(OnGameRuleStarted); SubscribeLocalEvent(OnGameRuleEnded); - SubscribeLocalEvent(OnRoundEndTextAppend); + SubscribeLocalEvent(OnRoundEndTextAppend); } private void OnStartAttempt(RoundStartAttemptEvent args) @@ -70,11 +70,16 @@ private void OnGameRuleEnded(EntityUid uid, T component, ref GameRuleEndedEvent Ended(uid, component, ruleData, args); } - private void OnRoundEndTextAppend(Entity ent, ref RoundEndTextAppendEvent args) + private void OnRoundEndTextAppend(RoundEndTextAppendEvent ev) { - if (!TryComp(ent, out var ruleData)) - return; - AppendRoundEndText(ent, ent, ruleData, ref args); + var query = AllEntityQuery(); + while (query.MoveNext(out var uid, out var comp)) + { + if (!TryComp(uid, out var ruleData)) + continue; + + AppendRoundEndText(uid, comp, ruleData, ref ev); + } } /// diff --git a/Content.Server/GameTicking/Rules/LoadMapRuleSystem.cs b/Content.Server/GameTicking/Rules/LoadMapRuleSystem.cs index aba9ed9e583..3a80d82fd92 100644 --- a/Content.Server/GameTicking/Rules/LoadMapRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/LoadMapRuleSystem.cs @@ -1,9 +1,11 @@ using Content.Server.Antag; using Content.Server.GameTicking.Components; using Content.Server.GameTicking.Rules.Components; +using Content.Server.GridPreloader; using Content.Server.Spawners.Components; using Robust.Server.GameObjects; using Robust.Server.Maps; +using Robust.Shared.Map; using Robust.Shared.Prototypes; namespace Content.Server.GameTicking.Rules; @@ -11,9 +13,12 @@ namespace Content.Server.GameTicking.Rules; public sealed class LoadMapRuleSystem : GameRuleSystem { [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + [Dependency] private readonly IMapManager _mapManager = default!; [Dependency] private readonly MapSystem _map = default!; [Dependency] private readonly MapLoaderSystem _mapLoader = default!; + [Dependency] private readonly MetaDataSystem _metaData = default!; [Dependency] private readonly TransformSystem _transform = default!; + [Dependency] private readonly GridPreloaderSystem _gridPreloader = default!; public override void Initialize() { @@ -41,7 +46,9 @@ protected override void Added(EntityUid uid, LoadMapRuleComponent comp, GameRule if (comp.Map != null) return; - _map.CreateMap(out var mapId); + // grid preloading needs map to init after moving it + var mapUid = comp.PreloadedGrid != null ? _map.CreateMap(out var mapId, false) : _map.CreateMap(out mapId); + _metaData.SetEntityName(mapUid, $"LoadMapRule destination for rule {ToPrettyString(uid)}"); comp.Map = mapId; if (comp.GameMap != null) @@ -51,8 +58,29 @@ protected override void Added(EntityUid uid, LoadMapRuleComponent comp, GameRule } else if (comp.MapPath != null) { - if (_mapLoader.TryLoad(comp.Map.Value, comp.MapPath.Value.ToString(), out var roots, new MapLoadOptions { LoadMap = true })) - comp.MapGrids.AddRange(roots); + if (!_mapLoader.TryLoad(comp.Map.Value, + comp.MapPath.Value.ToString(), + out var roots, + new MapLoadOptions { LoadMap = true })) + { + _mapManager.DeleteMap(mapId); + return; + } + + comp.MapGrids.AddRange(roots); + } + else if (comp.PreloadedGrid != null) + { + // TODO: If there are no preloaded grids left, any rule announcements will still go off! + if (!_gridPreloader.TryGetPreloadedGrid(comp.PreloadedGrid.Value, out var loadedShuttle)) + { + _mapManager.DeleteMap(mapId); + return; + } + + _transform.SetParent(loadedShuttle.Value, mapUid); + comp.MapGrids.Add(loadedShuttle.Value); + _map.InitializeMap(mapId); } else { diff --git a/Content.Server/GameTicking/Rules/MaxTimeRestartRuleSystem.cs b/Content.Server/GameTicking/Rules/MaxTimeRestartRuleSystem.cs index ee3a025533a..cae99fee9fc 100644 --- a/Content.Server/GameTicking/Rules/MaxTimeRestartRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/MaxTimeRestartRuleSystem.cs @@ -34,6 +34,7 @@ protected override void Ended(EntityUid uid, MaxTimeRestartRuleComponent compone public void RestartTimer(MaxTimeRestartRuleComponent component) { + // TODO FULL GAME SAVE component.TimerCancel.Cancel(); component.TimerCancel = new CancellationTokenSource(); Timer.Spawn(component.RoundMaxTime, () => TimerFired(component), component.TimerCancel.Token); @@ -50,6 +51,7 @@ private void TimerFired(MaxTimeRestartRuleComponent component) _chatManager.DispatchServerAnnouncement(Loc.GetString("rule-restarting-in-seconds",("seconds", (int) component.RoundEndDelay.TotalSeconds))); + // TODO FULL GAME SAVE Timer.Spawn(component.RoundEndDelay, () => GameTicker.RestartRound()); } diff --git a/Content.Server/GameTicking/Rules/NukeopsRuleSystem.cs b/Content.Server/GameTicking/Rules/NukeopsRuleSystem.cs index d06b9fb899c..3e61fda8744 100644 --- a/Content.Server/GameTicking/Rules/NukeopsRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/NukeopsRuleSystem.cs @@ -481,12 +481,10 @@ private void OnAntagSelectEntity(Entity ent, ref AntagSele ? _prefs.GetPreferences(args.Session.UserId).SelectedCharacter as HumanoidCharacterProfile : HumanoidCharacterProfile.RandomWithSpecies(); if (!_prototypeManager.TryIndex(profile?.Species ?? SharedHumanoidAppearanceSystem.DefaultSpecies, out SpeciesPrototype? species)) - { species = _prototypeManager.Index(SharedHumanoidAppearanceSystem.DefaultSpecies); - } args.Entity = Spawn(species.Prototype); - _humanoid.LoadProfile(args.Entity.Value, profile); + _humanoid.LoadProfile(args.Entity.Value, profile!); } private void OnAfterAntagEntSelected(Entity ent, ref AfterAntagEntitySelectedEvent args) diff --git a/Content.Server/GameTicking/Rules/RevolutionaryRuleSystem.cs b/Content.Server/GameTicking/Rules/RevolutionaryRuleSystem.cs index 7e6901e6c48..577b0c30303 100644 --- a/Content.Server/GameTicking/Rules/RevolutionaryRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/RevolutionaryRuleSystem.cs @@ -28,6 +28,7 @@ using Robust.Shared.Prototypes; using Robust.Shared.Timing; using Content.Server.GameTicking.Components; +using Content.Shared.Cuffs.Components; namespace Content.Server.GameTicking.Rules; @@ -141,7 +142,6 @@ private void OnPostFlash(EntityUid uid, HeadRevolutionaryComponent comp, ref Aft _npcFaction.AddFaction(ev.Target, RevolutionaryNpcFaction); var revComp = EnsureComp(ev.Target); - _stun.TryParalyze(ev.Target, comp.StunTime, true); if (ev.User != null) { @@ -180,7 +180,7 @@ private bool CheckCommandLose() commandList.Add(id); } - return IsGroupDead(commandList, true); + return IsGroupDetainedOrDead(commandList, true, true); } private void OnHeadRevMobStateChanged(EntityUid uid, HeadRevolutionaryComponent comp, MobStateChangedEvent ev) @@ -204,7 +204,8 @@ private bool CheckRevsLose() } // If no Head Revs are alive all normal Revs will lose their Rev status and rejoin Nanotrasen - if (IsGroupDead(headRevList, false)) + // Cuffing Head Revs is not enough - they must be killed. + if (IsGroupDetainedOrDead(headRevList, false, false)) { var rev = AllEntityQuery(); while (rev.MoveNext(out var uid, out _, out var mc)) @@ -236,35 +237,43 @@ private bool CheckRevsLose() } /// - /// Will take a group of entities and check if they are all alive or dead + /// Will take a group of entities and check if these entities are alive, dead or cuffed. /// /// The list of the entities - /// Bool for if you want to check if someone is in space and consider them dead. (Won't check when emergency shuttle arrives just in case) + /// Bool for if you want to check if someone is in space and consider them missing in action. (Won't check when emergency shuttle arrives just in case) + /// Bool for if you don't want to count cuffed entities. /// - private bool IsGroupDead(List list, bool checkOffStation) + private bool IsGroupDetainedOrDead(List list, bool checkOffStation, bool countCuffed) { - var dead = 0; + var gone = 0; foreach (var entity in list) { - if (TryComp(entity, out var state)) + if (TryComp(entity, out var cuffed) && cuffed.CuffedHandCount > 0 && countCuffed) { - if (state.CurrentState == MobState.Dead || state.CurrentState == MobState.Invalid) + gone++; + } + else + { + if (TryComp(entity, out var state)) { - dead++; + if (state.CurrentState == MobState.Dead || state.CurrentState == MobState.Invalid) + { + gone++; + } + else if (checkOffStation && _stationSystem.GetOwningStation(entity) == null && !_emergencyShuttle.EmergencyShuttleArrived) + { + gone++; + } } - else if (checkOffStation && _stationSystem.GetOwningStation(entity) == null && !_emergencyShuttle.EmergencyShuttleArrived) + //If they don't have the MobStateComponent they might as well be dead. + else { - dead++; + gone++; } } - //If they don't have the MobStateComponent they might as well be dead. - else - { - dead++; - } } - return dead == list.Count || list.Count == 0; + return gone == list.Count || list.Count == 0; } private static readonly string[] Outcomes = diff --git a/Content.Server/GameTicking/Rules/TraitorRuleSystem.cs b/Content.Server/GameTicking/Rules/TraitorRuleSystem.cs index aff49510d9f..b80389297f8 100644 --- a/Content.Server/GameTicking/Rules/TraitorRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/TraitorRuleSystem.cs @@ -76,6 +76,13 @@ public bool MakeTraitor(EntityUid traitor, TraitorRuleComponent component, bool return false; var briefing = Loc.GetString("traitor-role-codewords-short", ("codewords", string.Join(", ", component.Codewords))); + var issuer = _random.Pick(_prototypeManager.Index(component.ObjectiveIssuers).Values); + + if (TryComp(traitor, out var autoTraitorComponent)) + { + giveUplink = autoTraitorComponent.GiveUplink; + giveObjectives = autoTraitorComponent.GiveObjectives; + } if (TryComp(traitor, out var autoTraitorComponent)) { @@ -105,7 +112,7 @@ public bool MakeTraitor(EntityUid traitor, TraitorRuleComponent component, bool Loc.GetString("traitor-role-uplink-code-short", ("code", string.Join("-", code).Replace("sharp", "#")))); } - _antag.SendBriefing(traitor, GenerateBriefing(component.Codewords, code), null, component.GreetSoundNotification); + _antag.SendBriefing(traitor, GenerateBriefing(component.Codewords, code, issuer), null, component.GreetSoundNotification); component.TraitorMinds.Add(mindId); @@ -115,9 +122,11 @@ public bool MakeTraitor(EntityUid traitor, TraitorRuleComponent component, bool Briefing = briefing }, mind, true); - // Change the faction - _npcFaction.RemoveFaction(traitor, component.NanoTrasenFaction, false); - _npcFaction.AddFaction(traitor, component.SyndicateFaction); + // Don't Change the faction, this was stupid. + //_npcFaction.RemoveFaction(traitor, component.NanoTrasenFaction, false); + //_npcFaction.AddFaction(traitor, component.SyndicateFaction); + + RaiseLocalEvent(traitor, new MoodEffectEvent("TraitorFocused")); RaiseLocalEvent(traitor, new MoodEffectEvent("TraitorFocused")); @@ -152,10 +161,10 @@ private void OnObjectivesTextPrepend(EntityUid uid, TraitorRuleComponent comp, r args.Text += "\n" + Loc.GetString("traitor-round-end-codewords", ("codewords", string.Join(", ", comp.Codewords))); } - private string GenerateBriefing(string[] codewords, Note[]? uplinkCode) + private string GenerateBriefing(string[] codewords, Note[]? uplinkCode, string? objectiveIssuer = null) { var sb = new StringBuilder(); - sb.AppendLine(Loc.GetString("traitor-role-greeting")); + sb.AppendLine(Loc.GetString("traitor-role-greeting", ("corporation", objectiveIssuer ?? Loc.GetString("objective-issuer-unknown")))); sb.AppendLine(Loc.GetString("traitor-role-codewords-short", ("codewords", string.Join(", ", codewords)))); if (uplinkCode != null) sb.AppendLine(Loc.GetString("traitor-role-uplink-code-short", ("code", string.Join("-", uplinkCode).Replace("sharp", "#")))); diff --git a/Content.Server/GameTicking/Rules/ZombieRuleSystem.cs b/Content.Server/GameTicking/Rules/ZombieRuleSystem.cs index f62d0b79ffb..1361ab37338 100644 --- a/Content.Server/GameTicking/Rules/ZombieRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/ZombieRuleSystem.cs @@ -38,7 +38,7 @@ public override void Initialize() { base.Initialize(); - SubscribeLocalEvent(OnZombifySelf); + SubscribeLocalEvent(OnZombifySelf); } protected override void AppendRoundEndText(EntityUid uid, ZombieRuleComponent component, GameRuleComponent gameRule, @@ -133,7 +133,7 @@ protected override void ActiveTick(EntityUid uid, ZombieRuleComponent component, component.NextRoundEndCheck = _timing.CurTime + component.EndCheckDelay; } - private void OnZombifySelf(EntityUid uid, PendingZombieComponent component, ZombifySelfActionEvent args) + private void OnZombifySelf(EntityUid uid, IncurableZombieComponent component, ZombifySelfActionEvent args) { _zombie.ZombifyEntity(uid); if (component.Action != null) diff --git a/Content.Server/Gateway/Components/GatewayGeneratorComponent.cs b/Content.Server/Gateway/Components/GatewayGeneratorComponent.cs index d65760e270f..0f948f1b8f6 100644 --- a/Content.Server/Gateway/Components/GatewayGeneratorComponent.cs +++ b/Content.Server/Gateway/Components/GatewayGeneratorComponent.cs @@ -64,6 +64,8 @@ public sealed partial class GatewayGeneratorComponent : Component "OreUranium", "OreBananium", "OreArtifactFragment", + "OreBluespace", + "OreNormality", }; } diff --git a/Content.Server/Gateway/Systems/GatewaySystem.cs b/Content.Server/Gateway/Systems/GatewaySystem.cs index 7ebc751dd2d..6ed28d71a76 100644 --- a/Content.Server/Gateway/Systems/GatewaySystem.cs +++ b/Content.Server/Gateway/Systems/GatewaySystem.cs @@ -129,7 +129,7 @@ private void UpdateUserInterface(EntityUid uid, GatewayComponent comp, Transform unlockTime ); - _ui.TrySetUiState(uid, GatewayUiKey.Key, state); + _ui.SetUiState(uid, GatewayUiKey.Key, state); } private void UpdateAppearance(EntityUid uid) @@ -139,12 +139,14 @@ private void UpdateAppearance(EntityUid uid) private void OnOpenPortal(EntityUid uid, GatewayComponent comp, GatewayOpenPortalMessage args) { - if (args.Session.AttachedEntity == null || GetNetEntity(uid) == args.Destination || + if (GetNetEntity(uid) == args.Destination || !comp.Enabled || !comp.Interactable) + { return; + } // if the gateway has an access reader check it before allowing opening - var user = args.Session.AttachedEntity.Value; + var user = args.Actor; if (CheckAccess(user, uid, comp)) return; diff --git a/Content.Server/Geras/GerasComponent.cs b/Content.Server/Geras/GerasComponent.cs new file mode 100644 index 00000000000..eaf792502f4 --- /dev/null +++ b/Content.Server/Geras/GerasComponent.cs @@ -0,0 +1,18 @@ +using Content.Shared.Actions; +using Content.Shared.Polymorph; +using Robust.Shared.Prototypes; + +namespace Content.Server.Geras; + +/// +/// This component assigns the entity with a polymorph action. +/// +[RegisterComponent] +public sealed partial class GerasComponent : Component +{ + [DataField] public ProtoId GerasPolymorphId = "SlimeMorphGeras"; + + [DataField] public ProtoId GerasAction = "ActionMorphGeras"; + + [DataField] public EntityUid? GerasActionEntity; +} diff --git a/Content.Server/Geras/GerasSystem.cs b/Content.Server/Geras/GerasSystem.cs new file mode 100644 index 00000000000..f83f7c19990 --- /dev/null +++ b/Content.Server/Geras/GerasSystem.cs @@ -0,0 +1,51 @@ +using Content.Server.Polymorph.Systems; +using Content.Shared.Zombies; +using Content.Server.Actions; +using Content.Server.Popups; +using Content.Shared.Geras; +using Robust.Shared.Player; + +namespace Content.Server.Geras; + +/// +public sealed class GerasSystem : SharedGerasSystem +{ + [Dependency] private readonly PolymorphSystem _polymorphSystem = default!; + [Dependency] private readonly ActionsSystem _actionsSystem = default!; + [Dependency] private readonly PopupSystem _popupSystem = default!; + + /// + public override void Initialize() + { + SubscribeLocalEvent(OnMorphIntoGeras); + SubscribeLocalEvent(OnMapInit); + SubscribeLocalEvent(OnZombification); + } + + private void OnZombification(EntityUid uid, GerasComponent component, EntityZombifiedEvent args) + { + _actionsSystem.RemoveAction(uid, component.GerasActionEntity); + } + + private void OnMapInit(EntityUid uid, GerasComponent component, MapInitEvent args) + { + // try to add geras action + _actionsSystem.AddAction(uid, ref component.GerasActionEntity, component.GerasAction); + } + + private void OnMorphIntoGeras(EntityUid uid, GerasComponent component, MorphIntoGeras args) + { + if (HasComp(uid)) + return; // i hate zomber. + + var ent = _polymorphSystem.PolymorphEntity(uid, component.GerasPolymorphId); + + if (!ent.HasValue) + return; + + _popupSystem.PopupEntity(Loc.GetString("geras-popup-morph-message-others", ("entity", ent.Value)), ent.Value, Filter.PvsExcept(ent.Value), true); + _popupSystem.PopupEntity(Loc.GetString("geras-popup-morph-message-user"), ent.Value, ent.Value); + + args.Handled = true; + } +} diff --git a/Content.Server/Ghost/GhostReturnToRoundSystem.cs b/Content.Server/Ghost/GhostReturnToRoundSystem.cs new file mode 100644 index 00000000000..f6ed44ca589 --- /dev/null +++ b/Content.Server/Ghost/GhostReturnToRoundSystem.cs @@ -0,0 +1,80 @@ +using Content.Server.Administration.Logs; +using Content.Server.Chat.Managers; +using Content.Server.GameTicking; +using Content.Shared.Database; +using Content.Shared.CCVar; +using Content.Shared.Ghost; +using Robust.Server.Player; +using Robust.Shared.Configuration; +using Robust.Shared.Network; +using Robust.Shared.Timing; + +namespace Content.Server.Ghost; + +public sealed class GhostReturnToRoundSystem : EntitySystem +{ + [Dependency] private readonly IChatManager _chatManager = default!; + [Dependency] private readonly IAdminLogManager _adminLogger = default!; + [Dependency] private readonly IPlayerManager _playerManager = default!; + [Dependency] private readonly IGameTiming _gameTiming = default!; + [Dependency] private readonly IConfigurationManager _cfg = default!; + [Dependency] private readonly GameTicker _ticker = default!; + + public override void Initialize() + { + SubscribeNetworkEvent(OnGhostReturnToRoundRequest); + } + + private void OnGhostReturnToRoundRequest(GhostReturnToRoundRequest msg, EntitySessionEventArgs args) + { + var uid = args.SenderSession.AttachedEntity; + + if (uid == null) + return; + + var connectedClient = args.SenderSession.Channel; + var userId = args.SenderSession.UserId; + + TryGhostReturnToRound(uid.Value, connectedClient, userId, out var message, out var wrappedMessage); + + _chatManager.ChatMessageToOne(Shared.Chat.ChatChannel.Server, + message, + wrappedMessage, + default, + false, + connectedClient, + Color.Red); + } + + private void TryGhostReturnToRound(EntityUid uid, INetChannel connectedClient, NetUserId userId, out string message, out string wrappedMessage) + { + var maxPlayers = _cfg.GetCVar(CCVars.GhostRespawnMaxPlayers); + if (_playerManager.PlayerCount >= maxPlayers) + { + message = Loc.GetString("ghost-respawn-max-players", ("players", maxPlayers)); + wrappedMessage = Loc.GetString("chat-manager-server-wrap-message", ("message", message)); + return; + } + + var deathTime = EnsureComp(uid).TimeOfDeath; + var timeUntilRespawn = _cfg.GetCVar(CCVars.GhostRespawnTime); + var timePast = (_gameTiming.CurTime - deathTime).TotalMinutes; + if (timePast >= timeUntilRespawn) + { + _playerManager.TryGetSessionById(userId, out var targetPlayer); + + if (targetPlayer != null) + _ticker.Respawn(targetPlayer); + + _adminLogger.Add(LogType.Mind, LogImpact.Medium, $"{Loc.GetString("ghost-respawn-log-return-to-lobby", ("userName", connectedClient.UserName))}"); + + message = Loc.GetString("ghost-respawn-window-rules-footer"); + wrappedMessage = Loc.GetString("chat-manager-server-wrap-message", ("message", message)); + + return; + } + + message = Loc.GetString("ghost-respawn-time-left", ("time", (int) (timeUntilRespawn - timePast))); + wrappedMessage = Loc.GetString("chat-manager-server-wrap-message", ("message", message)); + } +} diff --git a/Content.Server/Ghost/GhostSystem.cs b/Content.Server/Ghost/GhostSystem.cs index c0e753c4c55..254d478bb0f 100644 --- a/Content.Server/Ghost/GhostSystem.cs +++ b/Content.Server/Ghost/GhostSystem.cs @@ -19,6 +19,7 @@ using Content.Shared.Storage.Components; using Robust.Server.GameObjects; using Robust.Server.Player; +using Robust.Shared.Map; using Robust.Shared.Physics.Components; using Robust.Shared.Physics.Systems; using Robust.Shared.Player; @@ -42,11 +43,18 @@ public sealed class GhostSystem : SharedGhostSystem [Dependency] private readonly GameTicker _ticker = default!; [Dependency] private readonly TransformSystem _transformSystem = default!; [Dependency] private readonly VisibilitySystem _visibilitySystem = default!; + [Dependency] private readonly MetaDataSystem _metaData = default!; + + private EntityQuery _ghostQuery; + private EntityQuery _physicsQuery; public override void Initialize() { base.Initialize(); + _ghostQuery = GetEntityQuery(); + _physicsQuery = GetEntityQuery(); + SubscribeLocalEvent(OnGhostStartup); SubscribeLocalEvent(OnMapInit); SubscribeLocalEvent(OnGhostShutdown); @@ -62,12 +70,14 @@ public override void Initialize() SubscribeNetworkEvent(OnGhostWarpsRequest); SubscribeNetworkEvent(OnGhostReturnToBodyRequest); SubscribeNetworkEvent(OnGhostWarpToTargetRequest); + SubscribeNetworkEvent(OnGhostnadoRequest); SubscribeLocalEvent(OnActionPerform); SubscribeLocalEvent(OnGhostHearingAction); SubscribeLocalEvent(OnEntityStorageInsertAttempt); SubscribeLocalEvent(_ => MakeVisible(true)); + SubscribeLocalEvent(OnToggleGhostVisibilityToAll); } private void OnGhostHearingAction(EntityUid uid, GhostComponent component, ToggleGhostHearingActionEvent args) @@ -144,8 +154,8 @@ private void OnGhostStartup(EntityUid uid, GhostComponent component, ComponentSt if (_ticker.RunLevel != GameRunLevel.PostRound) { - _visibilitySystem.AddLayer(uid, visibility, (int) VisibilityFlags.Ghost, false); - _visibilitySystem.RemoveLayer(uid, visibility, (int) VisibilityFlags.Normal, false); + _visibilitySystem.AddLayer((uid, visibility), (int) VisibilityFlags.Ghost, false); + _visibilitySystem.RemoveLayer((uid, visibility), (int) VisibilityFlags.Normal, false); _visibilitySystem.RefreshVisibility(uid, visibilityComponent: visibility); } @@ -164,8 +174,8 @@ private void OnGhostShutdown(EntityUid uid, GhostComponent component, ComponentS // Entity can't be seen by ghosts anymore. if (TryComp(uid, out VisibilityComponent? visibility)) { - _visibilitySystem.RemoveLayer(uid, visibility, (int) VisibilityFlags.Ghost, false); - _visibilitySystem.AddLayer(uid, visibility, (int) VisibilityFlags.Normal, false); + _visibilitySystem.RemoveLayer((uid, visibility), (int) VisibilityFlags.Ghost, false); + _visibilitySystem.AddLayer((uid, visibility), (int) VisibilityFlags.Normal, false); _visibilitySystem.RefreshVisibility(uid, visibilityComponent: visibility); } @@ -241,7 +251,7 @@ private void DeleteEntity(EntityUid uid) private void OnGhostReturnToBodyRequest(GhostReturnToBodyRequest msg, EntitySessionEventArgs args) { if (args.SenderSession.AttachedEntity is not {Valid: true} attached - || !TryComp(attached, out GhostComponent? ghost) + || !_ghostQuery.TryComp(attached, out var ghost) || !ghost.CanReturnToBody || !TryComp(attached, out ActorComponent? actor)) { @@ -257,7 +267,7 @@ private void OnGhostReturnToBodyRequest(GhostReturnToBodyRequest msg, EntitySess private void OnGhostWarpsRequest(GhostWarpsRequestEvent msg, EntitySessionEventArgs args) { if (args.SenderSession.AttachedEntity is not {Valid: true} entity - || !HasComp(entity)) + || !_ghostQuery.HasComp(entity)) { Log.Warning($"User {args.SenderSession.Name} sent a {nameof(GhostWarpsRequestEvent)} without being a ghost."); return; @@ -270,7 +280,7 @@ private void OnGhostWarpsRequest(GhostWarpsRequestEvent msg, EntitySessionEventA private void OnGhostWarpToTargetRequest(GhostWarpToTargetRequestEvent msg, EntitySessionEventArgs args) { if (args.SenderSession.AttachedEntity is not {Valid: true} attached - || !TryComp(attached, out GhostComponent? _)) + || !_ghostQuery.HasComp(attached)) { Log.Warning($"User {args.SenderSession.Name} tried to warp to {msg.Target} without being a ghost."); return; @@ -284,17 +294,37 @@ private void OnGhostWarpToTargetRequest(GhostWarpToTargetRequestEvent msg, Entit return; } + WarpTo(attached, target); + } + + private void OnGhostnadoRequest(GhostnadoRequestEvent msg, EntitySessionEventArgs args) + { + if (args.SenderSession.AttachedEntity is not {} uid + || !_ghostQuery.HasComp(uid)) + { + Log.Warning($"User {args.SenderSession.Name} tried to ghostnado without being a ghost."); + return; + } + + if (_followerSystem.GetMostFollowed() is not {} target) + return; + + WarpTo(uid, target); + } + + private void WarpTo(EntityUid uid, EntityUid target) + { if ((TryComp(target, out WarpPointComponent? warp) && warp.Follow) || HasComp(target)) { - _followerSystem.StartFollowingEntity(attached, target); + _followerSystem.StartFollowingEntity(uid, target); return; } - var xform = Transform(attached); - _transformSystem.SetCoordinates(attached, xform, Transform(target).Coordinates); - _transformSystem.AttachToGridOrMap(attached, xform); - if (TryComp(attached, out PhysicsComponent? physics)) - _physics.SetLinearVelocity(attached, Vector2.Zero, body: physics); + var xform = Transform(uid); + _transformSystem.SetCoordinates(uid, xform, Transform(target).Coordinates); + _transformSystem.AttachToGridOrMap(uid, xform); + if (_physicsQuery.TryComp(uid, out var physics)) + _physics.SetLinearVelocity(uid, Vector2.Zero, body: physics); } private IEnumerable GetLocationWarps() @@ -333,6 +363,15 @@ private void OnEntityStorageInsertAttempt(EntityUid uid, GhostComponent comp, re args.Cancelled = true; } + private void OnToggleGhostVisibilityToAll(ToggleGhostVisibilityToAllEvent ev) + { + if (ev.Handled) + return; + + ev.Handled = true; + MakeVisible(true); + } + /// /// When the round ends, make all players able to see ghosts. /// @@ -343,13 +382,13 @@ public void MakeVisible(bool visible) { if (visible) { - _visibilitySystem.AddLayer(uid, vis, (int) VisibilityFlags.Normal, false); - _visibilitySystem.RemoveLayer(uid, vis, (int) VisibilityFlags.Ghost, false); + _visibilitySystem.AddLayer((uid, vis), (int) VisibilityFlags.Normal, false); + _visibilitySystem.RemoveLayer((uid, vis), (int) VisibilityFlags.Ghost, false); } else { - _visibilitySystem.AddLayer(uid, vis, (int) VisibilityFlags.Ghost, false); - _visibilitySystem.RemoveLayer(uid, vis, (int) VisibilityFlags.Normal, false); + _visibilitySystem.AddLayer((uid, vis), (int) VisibilityFlags.Ghost, false); + _visibilitySystem.RemoveLayer((uid, vis), (int) VisibilityFlags.Normal, false); } _visibilitySystem.RefreshVisibility(uid, visibilityComponent: vis); } @@ -362,5 +401,59 @@ public bool DoGhostBooEvent(EntityUid target) return ghostBoo.Handled; } + + public EntityUid? SpawnGhost(Entity mind, EntityUid targetEntity, + bool canReturn = false) + { + _transformSystem.TryGetMapOrGridCoordinates(targetEntity, out var spawnPosition); + return SpawnGhost(mind, spawnPosition, canReturn); + } + + public EntityUid? SpawnGhost(Entity mind, EntityCoordinates? spawnPosition = null, + bool canReturn = false) + { + if (!Resolve(mind, ref mind.Comp)) + return null; + + // Test if the map is being deleted + var mapUid = spawnPosition?.GetMapUid(EntityManager); + if (mapUid == null || TerminatingOrDeleted(mapUid.Value)) + spawnPosition = null; + + spawnPosition ??= _ticker.GetObserverSpawnPoint(); + + if (!spawnPosition.Value.IsValid(EntityManager)) + { + Log.Warning($"No spawn valid ghost spawn position found for {mind.Comp.CharacterName}" + + " \"{ToPrettyString(mind)}\""); + _minds.TransferTo(mind.Owner, null, createGhost: false, mind: mind.Comp); + return null; + } + + var ghost = SpawnAtPosition(GameTicker.ObserverPrototypeName, spawnPosition.Value); + var ghostComponent = Comp(ghost); + + // Try setting the ghost entity name to either the character name or the player name. + // If all else fails, it'll default to the default entity prototype name, "observer". + // However, that should rarely happen. + if (!string.IsNullOrWhiteSpace(mind.Comp.CharacterName)) + _metaData.SetEntityName(ghost, mind.Comp.CharacterName); + else if (!string.IsNullOrWhiteSpace(mind.Comp.Session?.Name)) + _metaData.SetEntityName(ghost, mind.Comp.Session.Name); + + if (mind.Comp.TimeOfDeath.HasValue) + { + SetTimeOfDeath(ghost, mind.Comp.TimeOfDeath!.Value, ghostComponent); + } + + SetCanReturnToBody(ghostComponent, canReturn); + + if (canReturn) + _minds.Visit(mind.Owner, ghost, mind.Comp); + else + _minds.TransferTo(mind.Owner, ghost, mind: mind.Comp); + Log.Debug($"Spawned ghost \"{ToPrettyString(ghost)}\" for {mind.Comp.CharacterName}."); + return ghost; + } } } diff --git a/Content.Server/Ghost/Roles/Components/GhostRoleComponent.cs b/Content.Server/Ghost/Roles/Components/GhostRoleComponent.cs index 997961ae675..b26f3d6eba9 100644 --- a/Content.Server/Ghost/Roles/Components/GhostRoleComponent.cs +++ b/Content.Server/Ghost/Roles/Components/GhostRoleComponent.cs @@ -1,4 +1,5 @@ -using Content.Server.Mind.Commands; +using Content.Server.Ghost.Roles.Raffles; +using Content.Server.Mind.Commands; using Content.Shared.Customization.Systems; using Content.Shared.Roles; @@ -88,5 +89,12 @@ public string RoleRules [ViewVariables(VVAccess.ReadWrite)] [DataField("reregister")] public bool ReregisterOnGhost { get; set; } = true; + + /// + /// If set, ghost role is raffled, otherwise it is first-come-first-serve. + /// + [DataField("raffle")] + [Access(typeof(GhostRoleSystem), Other = AccessPermissions.ReadWriteExecute)] // FIXME Friends + public GhostRoleRaffleConfig? RaffleConfig { get; set; } } } diff --git a/Content.Server/Ghost/Roles/Components/GhostRoleMobSpawnerComponent.cs b/Content.Server/Ghost/Roles/Components/GhostRoleMobSpawnerComponent.cs index 4cdab6ce070..6116173f904 100644 --- a/Content.Server/Ghost/Roles/Components/GhostRoleMobSpawnerComponent.cs +++ b/Content.Server/Ghost/Roles/Components/GhostRoleMobSpawnerComponent.cs @@ -1,26 +1,30 @@ using Robust.Shared.Prototypes; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; namespace Content.Server.Ghost.Roles.Components { /// /// Allows a ghost to take this role, spawning a new entity. /// - [RegisterComponent] + [RegisterComponent, EntityCategory("Spawner")] [Access(typeof(GhostRoleSystem))] public sealed partial class GhostRoleMobSpawnerComponent : Component { - [ViewVariables(VVAccess.ReadWrite)] [DataField("deleteOnSpawn")] + [DataField] public bool DeleteOnSpawn = true; - [ViewVariables(VVAccess.ReadWrite)] [DataField("availableTakeovers")] + [DataField] public int AvailableTakeovers = 1; [ViewVariables] public int CurrentTakeovers = 0; - [ViewVariables(VVAccess.ReadWrite)] - [DataField("prototype", customTypeSerializer: typeof(PrototypeIdSerializer))] - public string? Prototype { get; private set; } + [DataField] + public EntProtoId? Prototype; + + /// + /// If this ghostrole spawner has multiple selectable ghostrole prototypes. + /// + [DataField] + public List SelectablePrototypes = []; } } diff --git a/Content.Server/Ghost/Roles/Components/GhostRoleRaffleComponent.cs b/Content.Server/Ghost/Roles/Components/GhostRoleRaffleComponent.cs new file mode 100644 index 00000000000..ac518685e9b --- /dev/null +++ b/Content.Server/Ghost/Roles/Components/GhostRoleRaffleComponent.cs @@ -0,0 +1,58 @@ +using Content.Server.Ghost.Roles.Raffles; +using Robust.Shared.Player; + +namespace Content.Server.Ghost.Roles.Components; + +/// +/// Indicates that a ghost role is currently being raffled, and stores data about the raffle in progress. +/// Raffles start when the first player joins a raffle. +/// +[RegisterComponent] +[Access(typeof(GhostRoleSystem))] +public sealed partial class GhostRoleRaffleComponent : Component +{ + /// + /// Identifier of the Ghost Role this raffle is for. + /// + [ViewVariables(VVAccess.ReadOnly)] + [DataField] + public uint Identifier { get; set; } + + /// + /// List of sessions that are currently in the raffle. + /// + [ViewVariables(VVAccess.ReadOnly)] + public HashSet CurrentMembers = []; + + /// + /// List of sessions that are currently or were previously in the raffle. + /// + [ViewVariables(VVAccess.ReadOnly)] + public HashSet AllMembers = []; + + /// + /// Time left in the raffle in seconds. This must be initialized to a positive value. + /// + [ViewVariables(VVAccess.ReadOnly)] + [DataField] + public TimeSpan Countdown = TimeSpan.MaxValue; + + /// + /// The cumulative time, i.e. how much time the raffle will take in total. Added to when the time is extended + /// by someone joining the raffle. + /// Must be set to the same value as on initialization. + /// + [ViewVariables(VVAccess.ReadOnly)] + [DataField("cumulativeTime")] + public TimeSpan CumulativeTime = TimeSpan.MaxValue; + + /// + [ViewVariables(VVAccess.ReadOnly)] + [DataField("joinExtendsDurationBy")] + public TimeSpan JoinExtendsDurationBy { get; set; } + + /// + [ViewVariables(VVAccess.ReadOnly)] + [DataField("maxDuration")] + public TimeSpan MaxDuration { get; set; } +} diff --git a/Content.Server/Ghost/Roles/GhostRoleSystem.cs b/Content.Server/Ghost/Roles/GhostRoleSystem.cs index f603416d00a..346cb64ea85 100644 --- a/Content.Server/Ghost/Roles/GhostRoleSystem.cs +++ b/Content.Server/Ghost/Roles/GhostRoleSystem.cs @@ -1,7 +1,10 @@ +using System.Linq; using Content.Server.Administration.Logs; using Content.Server.EUI; using Content.Server.Ghost.Roles.Components; using Content.Server.Ghost.Roles.Events; +using Content.Server.Ghost.Roles.Raffles; +using Content.Shared.Ghost.Roles.Raffles; using Content.Server.Ghost.Roles.UI; using Content.Server.Mind.Commands; using Content.Shared.Administration; @@ -21,8 +24,13 @@ using Robust.Shared.Console; using Robust.Shared.Enums; using Robust.Shared.Player; +using Robust.Shared.Prototypes; using Robust.Shared.Random; +using Robust.Shared.Timing; using Robust.Shared.Utility; +using Content.Server.Popups; +using Content.Shared.Verbs; +using Robust.Shared.Collections; namespace Content.Server.Ghost.Roles { @@ -37,10 +45,16 @@ namespace Content.Server.Ghost.Roles [Dependency] private readonly TransformSystem _transform = default!; [Dependency] private readonly SharedMindSystem _mindSystem = default!; [Dependency] private readonly SharedRoleSystem _roleSystem = default!; + [Dependency] private readonly IGameTiming _timing = default!; + [Dependency] private readonly PopupSystem _popupSystem = default!; + [Dependency] private readonly IPrototypeManager _prototype = default!; private uint _nextRoleIdentifier; private bool _needsUpdateGhostRoleCount = true; + private readonly Dictionary> _ghostRoles = new(); + private readonly Dictionary> _ghostRoleRaffles = new(); + private readonly Dictionary _openUis = new(); private readonly Dictionary _openMakeGhostRoleUis = new(); @@ -57,13 +71,16 @@ public override void Initialize() SubscribeLocalEvent(OnMindRemoved); SubscribeLocalEvent(OnMobStateChanged); SubscribeLocalEvent(OnMapInit); - SubscribeLocalEvent(OnStartup); - SubscribeLocalEvent(OnShutdown); + SubscribeLocalEvent(OnRoleStartup); + SubscribeLocalEvent(OnRoleShutdown); SubscribeLocalEvent(OnPaused); SubscribeLocalEvent(OnUnpaused); + SubscribeLocalEvent(OnRaffleInit); + SubscribeLocalEvent(OnRaffleShutdown); SubscribeLocalEvent(OnSpawnerTakeRole); SubscribeLocalEvent(OnTakeoverTakeRole); - SubscribeLocalEvent(OnSpawnerTakeCharacter); // DeltaV - Character ghost roles, see Content.Server/DeltaV/Ghost/Roles/GhostRoleSystem.Character.cs + SubscribeLocalEvent>(OnVerb); + SubscribeLocalEvent(OnSpawnerTakeCharacter); _playerManager.PlayerStatusChanged += PlayerStatusChanged; } @@ -75,11 +92,11 @@ private void OnMobStateChanged(Entity component switch (args.NewMobState) { case MobState.Alive: - { - if (!ghostRole.Taken) - RegisterGhostRole((component, ghostRole)); - break; - } + { + if (!ghostRole.Taken) + RegisterGhostRole((component, ghostRole)); + break; + } case MobState.Critical: case MobState.Dead: UnregisterGhostRole((component, ghostRole)); @@ -101,11 +118,11 @@ private uint GetNextRoleIdentifier() public void OpenEui(ICommonSession session) { - if (session.AttachedEntity is not {Valid: true} attached || + if (session.AttachedEntity is not { Valid: true } attached || !EntityManager.HasComponent(attached)) return; - if(_openUis.ContainsKey(session)) + if (_openUis.ContainsKey(session)) CloseEui(session); var eui = _openUis[session] = new GhostRolesEui(); @@ -159,17 +176,118 @@ public void UpdateAllEui() public override void Update(float frameTime) { base.Update(frameTime); - if (_needsUpdateGhostRoleCount) + + UpdateGhostRoleCount(); + UpdateRaffles(frameTime); + } + + /// + /// Handles sending count update for the ghost role button in ghost UI, if ghost role count changed. + /// + private void UpdateGhostRoleCount() + { + if (!_needsUpdateGhostRoleCount) + return; + + _needsUpdateGhostRoleCount = false; + var response = new GhostUpdateGhostRoleCountEvent(GetGhostRoleCount()); + foreach (var player in _playerManager.Sessions) + { + RaiseNetworkEvent(response, player.Channel); + } + } + + /// + /// Handles ghost role raffle logic. + /// + private void UpdateRaffles(float frameTime) + { + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var entityUid, out var raffle, out var meta)) { - _needsUpdateGhostRoleCount = false; - var response = new GhostUpdateGhostRoleCountEvent(GetGhostRolesInfo().Length); - foreach (var player in _playerManager.Sessions) + if (meta.EntityPaused) + continue; + + // if all participants leave/were removed from the raffle, the raffle is canceled. + if (raffle.CurrentMembers.Count == 0) { - RaiseNetworkEvent(response, player.Channel); + RemoveRaffleAndUpdateEui(entityUid, raffle); + continue; } + + raffle.Countdown = raffle.Countdown.Subtract(TimeSpan.FromSeconds(frameTime)); + if (raffle.Countdown.Ticks > 0) + continue; + + // the raffle is over! find someone to take over the ghost role + if (!TryComp(entityUid, out GhostRoleComponent? ghostRole)) + { + Log.Warning($"Ghost role raffle finished on {entityUid} but {nameof(GhostRoleComponent)} is missing"); + RemoveRaffleAndUpdateEui(entityUid, raffle); + continue; + } + + if (ghostRole.RaffleConfig is null) + { + Log.Warning($"Ghost role raffle finished on {entityUid} but RaffleConfig became null"); + RemoveRaffleAndUpdateEui(entityUid, raffle); + continue; + } + + var foundWinner = false; + var deciderPrototype = _prototype.Index(ghostRole.RaffleConfig.Decider); + + // use the ghost role's chosen winner picker to find a winner + deciderPrototype.Decider.PickWinner( + raffle.CurrentMembers.AsEnumerable(), + session => + { + var success = TryTakeover(session, raffle.Identifier); + foundWinner |= success; + return success; + } + ); + + if (!foundWinner) + { + Log.Warning($"Ghost role raffle for {entityUid} ({ghostRole.RoleName}) finished without " + + $"{ghostRole.RaffleConfig?.Decider} finding a winner"); + } + + // raffle over + RemoveRaffleAndUpdateEui(entityUid, raffle); } } + private bool TryTakeover(ICommonSession player, uint identifier) + { + // TODO: the following two checks are kind of redundant since they should already be removed + // from the raffle + // can't win if you are disconnected (although you shouldn't be a candidate anyway) + if (player.Status != SessionStatus.InGame) + return false; + + // can't win if you are no longer a ghost (e.g. if you returned to your body) + if (player.AttachedEntity == null || !HasComp(player.AttachedEntity)) + return false; + + if (Takeover(player, identifier)) + { + // takeover successful, we have a winner! remove the winner from other raffles they might be in + LeaveAllRaffles(player); + return true; + } + + return false; + } + + private void RemoveRaffleAndUpdateEui(EntityUid entityUid, GhostRoleRaffleComponent raffle) + { + _ghostRoleRaffles.Remove(raffle.Identifier); + RemComp(entityUid, raffle); + UpdateAllEui(); + } + private void PlayerStatusChanged(object? blah, SessionStatusEventArgs args) { if (args.NewStatus == SessionStatus.InGame) @@ -177,6 +295,11 @@ private void PlayerStatusChanged(object? blah, SessionStatusEventArgs args) var response = new GhostUpdateGhostRoleCountEvent(_ghostRoles.Count); RaiseNetworkEvent(response, args.Session.Channel); } + else + { + // people who disconnect are removed from ghost role raffles + LeaveAllRaffles(args.Session); + } } public void RegisterGhostRole(Entity role) @@ -195,24 +318,170 @@ public void UnregisterGhostRole(Entity role) return; _ghostRoles.Remove(comp.Identifier); + if (TryComp(role.Owner, out GhostRoleRaffleComponent? raffle)) + { + // if a raffle is still running, get rid of it + RemoveRaffleAndUpdateEui(role.Owner, raffle); + } + else + { + UpdateAllEui(); + } + } + + // probably fine to be init because it's never added during entity initialization, but much later + private void OnRaffleInit(Entity ent, ref ComponentInit args) + { + if (!TryComp(ent, out GhostRoleComponent? ghostRole)) + { + // can't have a raffle for a ghost role that doesn't exist + RemComp(ent); + return; + } + + var config = ghostRole.RaffleConfig; + if (config is null) + return; // should, realistically, never be reached but you never know + + var settings = config.SettingsOverride + ?? _prototype.Index(config.Settings).Settings; + + if (settings.MaxDuration < settings.InitialDuration) + { + Log.Error($"Ghost role on {ent} has invalid raffle settings (max duration shorter than initial)"); + ghostRole.RaffleConfig = null; // make it a non-raffle role so stuff isn't entirely broken + RemComp(ent); + return; + } + + var raffle = ent.Comp; + raffle.Identifier = ghostRole.Identifier; + raffle.Countdown = TimeSpan.FromSeconds(settings.InitialDuration); + raffle.CumulativeTime = TimeSpan.FromSeconds(settings.InitialDuration); + // we copy these settings into the component because they would be cumbersome to access otherwise + raffle.JoinExtendsDurationBy = TimeSpan.FromSeconds(settings.JoinExtendsDurationBy); + raffle.MaxDuration = TimeSpan.FromSeconds(settings.MaxDuration); + } + + private void OnRaffleShutdown(Entity ent, ref ComponentShutdown args) + { + _ghostRoleRaffles.Remove(ent.Comp.Identifier); + } + + /// + /// Joins the given player onto a ghost role raffle, or creates it if it doesn't exist. + /// + /// The player. + /// The ID that represents the ghost role or ghost role raffle. + /// (A raffle will have the same ID as the ghost role it's for.) + private void JoinRaffle(ICommonSession player, uint identifier) + { + if (!_ghostRoles.TryGetValue(identifier, out var roleEnt)) + return; + + // get raffle or create a new one if it doesn't exist + var raffle = _ghostRoleRaffles.TryGetValue(identifier, out var raffleEnt) + ? raffleEnt.Comp + : EnsureComp(roleEnt.Owner); + + _ghostRoleRaffles.TryAdd(identifier, (roleEnt.Owner, raffle)); + + if (!raffle.CurrentMembers.Add(player)) + { + Log.Warning($"{player.Name} tried to join raffle for ghost role {identifier} but they are already in the raffle"); + return; + } + + // if this is the first time the player joins this raffle, and the player wasn't the starter of the raffle: + // extend the countdown, but only if doing so will not make the raffle take longer than the maximum + // duration + if (raffle.AllMembers.Add(player) && raffle.AllMembers.Count > 1 + && raffle.CumulativeTime.Add(raffle.JoinExtendsDurationBy) <= raffle.MaxDuration) + { + raffle.Countdown += raffle.JoinExtendsDurationBy; + raffle.CumulativeTime += raffle.JoinExtendsDurationBy; + } + UpdateAllEui(); } - public void Takeover(ICommonSession player, uint identifier) + /// + /// Makes the given player leave the raffle corresponding to the given ID. + /// + public void LeaveRaffle(ICommonSession player, uint identifier) { - if (!_ghostRoles.TryGetValue(identifier, out var role)) + if (!_ghostRoleRaffles.TryGetValue(identifier, out var raffleEnt)) return; + if (raffleEnt.Comp.CurrentMembers.Remove(player)) + { + UpdateAllEui(); + } + else + { + Log.Warning($"{player.Name} tried to leave raffle for ghost role {identifier} but they are not in the raffle"); + } + + // (raffle ending because all players left is handled in update()) + } + + /// + /// Makes the given player leave all ghost role raffles. + /// + public void LeaveAllRaffles(ICommonSession player) + { + var shouldUpdateEui = false; + + foreach (var raffleEnt in _ghostRoleRaffles.Values) + { + shouldUpdateEui |= raffleEnt.Comp.CurrentMembers.Remove(player); + } + + if (shouldUpdateEui) + UpdateAllEui(); + } + + /// + /// Request a ghost role. If it's a raffled role starts or joins a raffle, otherwise the player immediately + /// takes over the ghost role if possible. + /// + /// The player. + /// ID of the ghost role. + public void Request(ICommonSession player, uint identifier) + { + if (!_ghostRoles.TryGetValue(identifier, out var roleEnt)) + return; + + if (roleEnt.Comp.RaffleConfig is not null) + { + JoinRaffle(player, identifier); + } + else + { + Takeover(player, identifier); + } + } + + /// + /// Attempts having the player take over the ghost role with the corresponding ID. Does not start a raffle. + /// + /// True if takeover was successful, otherwise false. + public bool Takeover(ICommonSession player, uint identifier) + { + if (!_ghostRoles.TryGetValue(identifier, out var role)) + return false; + var ev = new TakeGhostRoleEvent(player); RaiseLocalEvent(role, ref ev); if (!ev.TookRole) - return; + return false; if (player.AttachedEntity != null) _adminLogger.Add(LogType.GhostRoleTaken, LogImpact.Low, $"{player:player} took the {role.Comp.RoleName:roleName} ghost role {ToPrettyString(player.AttachedEntity.Value):entity}"); CloseEui(player); + return true; } public void Follow(ICommonSession player, uint identifier) @@ -241,7 +510,22 @@ public void GhostRoleInternalCreateMindAndTransfer(ICommonSession player, Entity _mindSystem.TransferTo(newMind, mob); } - public GhostRoleInfo[] GetGhostRolesInfo() + /// + /// Returns the number of available ghost roles. + /// + public int GetGhostRoleCount() + { + var metaQuery = GetEntityQuery(); + return _ghostRoles.Count(pair => metaQuery.GetComponent(pair.Value.Owner).EntityPaused == false); + } + + /// + /// Returns information about all available ghost roles. + /// + /// + /// If not null, the s will show if the given player is in a raffle. + /// + public GhostRoleInfo[] GetGhostRolesInfo(ICommonSession? player) { var roles = new List(); var metaQuery = GetEntityQuery(); @@ -251,7 +535,40 @@ public GhostRoleInfo[] GetGhostRolesInfo() if (metaQuery.GetComponent(uid).EntityPaused) continue; - roles.Add(new GhostRoleInfo {Identifier = id, Name = role.RoleName, Description = role.RoleDescription, Rules = role.RoleRules, Requirements = role.Requirements}); + + var kind = GhostRoleKind.FirstComeFirstServe; + GhostRoleRaffleComponent? raffle = null; + + if (role.RaffleConfig is not null) + { + kind = GhostRoleKind.RaffleReady; + + if (_ghostRoleRaffles.TryGetValue(id, out var raffleEnt)) + { + kind = GhostRoleKind.RaffleInProgress; + raffle = raffleEnt.Comp; + + if (player is not null && raffle.CurrentMembers.Contains(player)) + kind = GhostRoleKind.RaffleJoined; + } + } + + var rafflePlayerCount = (uint?) raffle?.CurrentMembers.Count ?? 0; + var raffleEndTime = raffle is not null + ? _timing.CurTime.Add(raffle.Countdown) + : TimeSpan.MinValue; + + roles.Add(new GhostRoleInfo + { + Identifier = id, + Name = role.RoleName, + Description = role.RoleDescription, + Rules = role.RoleRules, + Requirements = role.Requirements, + Kind = kind, + RafflePlayerCount = rafflePlayerCount, + RaffleEndTime = raffleEndTime + }); } return roles.ToArray(); @@ -266,6 +583,10 @@ private void OnPlayerAttached(PlayerAttachedEvent message) if (HasComp(message.Entity)) return; + // The player is not a ghost (anymore), so they should not be in any raffles. Remove them. + // This ensures player doesn't win a raffle after returning to their (revived) body and ends up being + // forced into a ghost role. + LeaveAllRaffles(message.Player); CloseEui(message.Player); } @@ -300,6 +621,7 @@ public void Reset(RoundRestartCleanupEvent ev) _openUis.Clear(); _ghostRoles.Clear(); + _ghostRoleRaffles.Clear(); _nextRoleIdentifier = 0; } @@ -325,12 +647,12 @@ private void OnMapInit(Entity ent, ref MapInitEvent args) RemCompDeferred(ent); } - private void OnStartup(Entity ent, ref ComponentStartup args) + private void OnRoleStartup(Entity ent, ref ComponentStartup args) { RegisterGhostRole(ent); } - private void OnShutdown(Entity role, ref ComponentShutdown args) + private void OnRoleShutdown(Entity role, ref ComponentShutdown args) { UnregisterGhostRole(role); } @@ -408,6 +730,63 @@ private void OnTakeoverTakeRole(EntityUid uid, GhostTakeoverAvailableComponent c args.TookRole = true; } + + private void OnVerb(EntityUid uid, GhostRoleMobSpawnerComponent component, GetVerbsEvent args) + { + var prototypes = component.SelectablePrototypes; + if (prototypes.Count < 1) + return; + + if (!args.CanAccess || !args.CanInteract || args.Hands == null) + return; + + var verbs = new ValueList(); + + foreach (var prototypeID in prototypes) + { + if (_prototype.TryIndex(prototypeID, out var prototype)) + { + var verb = CreateVerb(uid, component, args.User, prototype); + verbs.Add(verb); + } + } + + args.Verbs.UnionWith(verbs); + } + + private Verb CreateVerb(EntityUid uid, GhostRoleMobSpawnerComponent component, EntityUid userUid, GhostRolePrototype prototype) + { + var verbText = Loc.GetString(prototype.Name); + + return new Verb() + { + Text = verbText, + Disabled = component.Prototype == prototype.EntityPrototype, + Category = VerbCategory.SelectType, + Act = () => SetMode(uid, prototype, verbText, component, userUid) + }; + } + + public void SetMode(EntityUid uid, GhostRolePrototype prototype, string verbText, GhostRoleMobSpawnerComponent? component, EntityUid? userUid = null) + { + if (!Resolve(uid, ref component)) + return; + + var ghostrolecomp = EnsureComp(uid); + + component.Prototype = prototype.EntityPrototype; + ghostrolecomp.RoleName = verbText; + ghostrolecomp.RoleDescription = prototype.Description; + ghostrolecomp.RoleRules = prototype.Rules; + + // Dirty(ghostrolecomp); + + if (userUid != null) + { + var msg = Loc.GetString("ghostrole-spawner-select", ("mode", verbText)); + _popupSystem.PopupEntity(msg, uid, userUid.Value); + } + } } [AnyCommand] @@ -418,7 +797,7 @@ public sealed class GhostRoles : IConsoleCommand public string Help => $"{Command}"; public void Execute(IConsoleShell shell, string argStr, string[] args) { - if(shell.Player != null) + if (shell.Player != null) EntitySystem.Get().OpenEui(shell.Player); else shell.WriteLine("You can only open the ghost roles UI on a client."); diff --git a/Content.Server/Ghost/Roles/MakeRaffledGhostRoleCommand.cs b/Content.Server/Ghost/Roles/MakeRaffledGhostRoleCommand.cs new file mode 100644 index 00000000000..5f5eabdad40 --- /dev/null +++ b/Content.Server/Ghost/Roles/MakeRaffledGhostRoleCommand.cs @@ -0,0 +1,127 @@ +using System.Linq; +using Content.Server.Administration; +using Content.Server.Ghost.Roles.Components; +using Content.Server.Ghost.Roles.Raffles; +using Content.Shared.Administration; +using Content.Shared.Ghost.Roles.Raffles; +using Content.Shared.Mind.Components; +using Robust.Shared.Console; +using Robust.Shared.Prototypes; + +namespace Content.Server.Ghost.Roles +{ + [AdminCommand(AdminFlags.Admin)] + public sealed class MakeRaffledGhostRoleCommand : IConsoleCommand + { + [Dependency] private readonly IPrototypeManager _protoManager = default!; + [Dependency] private readonly IEntityManager _entManager = default!; + + public string Command => "makeghostroleraffled"; + public string Description => "Turns an entity into a raffled ghost role."; + public string Help => $"Usage: {Command} ( | ) []\n" + + $"Durations are in seconds."; + + public void Execute(IConsoleShell shell, string argStr, string[] args) + { + if (args.Length is < 4 or > 7) + { + shell.WriteLine($"Invalid amount of arguments.\n{Help}"); + return; + } + + if (!NetEntity.TryParse(args[0], out var uidNet) || !_entManager.TryGetEntity(uidNet, out var uid)) + { + shell.WriteLine($"{args[0]} is not a valid entity uid."); + return; + } + + if (!_entManager.TryGetComponent(uid, out MetaDataComponent? metaData)) + { + shell.WriteLine($"No entity found with uid {uid}"); + return; + } + + if (_entManager.TryGetComponent(uid, out MindContainerComponent? mind) && + mind.HasMind) + { + shell.WriteLine($"Entity {metaData.EntityName} with id {uid} already has a mind."); + return; + } + + if (_entManager.TryGetComponent(uid, out GhostRoleComponent? ghostRole)) + { + shell.WriteLine($"Entity {metaData.EntityName} with id {uid} already has a {nameof(GhostRoleComponent)}"); + return; + } + + if (_entManager.HasComponent(uid)) + { + shell.WriteLine($"Entity {metaData.EntityName} with id {uid} already has a {nameof(GhostTakeoverAvailableComponent)}"); + return; + } + + var name = args[1]; + var description = args[2]; + + // if the rules are specified then use those, otherwise use the default + var rules = args.Length switch + { + 5 => args[4], + 7 => args[6], + _ => Loc.GetString("ghost-role-component-default-rules"), + }; + + // is it an invocation with a prototype ID and optional rules? + var isProto = args.Length is 4 or 5; + GhostRoleRaffleSettings settings; + + if (isProto) + { + if (!_protoManager.TryIndex(args[4], out var proto)) + { + var validProtos = string.Join(", ", + _protoManager.EnumeratePrototypes().Select(p => p.ID) + ); + + shell.WriteLine($"{args[4]} is not a valid raffle settings prototype. Valid options: {validProtos}"); + return; + } + + settings = proto.Settings; + } + else + { + if (!uint.TryParse(args[3], out var initial) + || !uint.TryParse(args[4], out var extends) + || !uint.TryParse(args[5], out var max) + || initial == 0 || max == 0) + { + shell.WriteLine($"The raffle initial/extends/max settings must be positive numbers."); + return; + } + + if (initial > max) + { + shell.WriteLine("The initial duration must be smaller than or equal to the maximum duration."); + return; + } + + settings = new GhostRoleRaffleSettings() + { + InitialDuration = initial, + JoinExtendsDurationBy = extends, + MaxDuration = max + }; + } + + ghostRole = _entManager.AddComponent(uid.Value); + _entManager.AddComponent(uid.Value); + ghostRole.RoleName = name; + ghostRole.RoleDescription = description; + ghostRole.RoleRules = rules; + ghostRole.RaffleConfig = new GhostRoleRaffleConfig(settings); + + shell.WriteLine($"Made entity {metaData.EntityName} a raffled ghost role."); + } + } +} diff --git a/Content.Server/Ghost/Roles/Raffles/GhostRoleRaffleConfig.cs b/Content.Server/Ghost/Roles/Raffles/GhostRoleRaffleConfig.cs new file mode 100644 index 00000000000..052704df250 --- /dev/null +++ b/Content.Server/Ghost/Roles/Raffles/GhostRoleRaffleConfig.cs @@ -0,0 +1,35 @@ +using Content.Shared.Ghost.Roles.Raffles; +using Robust.Shared.Prototypes; + +namespace Content.Server.Ghost.Roles.Raffles; + +/// +/// Raffle configuration. +/// +[DataDefinition] +public sealed partial class GhostRoleRaffleConfig +{ + public GhostRoleRaffleConfig(GhostRoleRaffleSettings settings) + { + SettingsOverride = settings; + } + + /// + /// Specifies the raffle settings to use. + /// + [DataField("settings", required: true)] + public ProtoId Settings { get; set; } = "default"; + + /// + /// If not null, the settings from are ignored and these settings are used instead. + /// Intended for allowing admins to set custom raffle settings for admeme ghost roles. + /// + [ViewVariables(VVAccess.ReadOnly)] + public GhostRoleRaffleSettings? SettingsOverride { get; set; } + + /// + /// Sets which is used. + /// + [DataField("decider")] + public ProtoId Decider { get; set; } = "default"; +} diff --git a/Content.Server/Ghost/Roles/Raffles/GhostRoleRaffleDeciderPrototype.cs b/Content.Server/Ghost/Roles/Raffles/GhostRoleRaffleDeciderPrototype.cs new file mode 100644 index 00000000000..b2ebf6ca5fc --- /dev/null +++ b/Content.Server/Ghost/Roles/Raffles/GhostRoleRaffleDeciderPrototype.cs @@ -0,0 +1,20 @@ +using Robust.Shared.Prototypes; + +namespace Content.Server.Ghost.Roles.Raffles; + +/// +/// Allows getting a as prototype. +/// +[Prototype("ghostRoleRaffleDecider")] +public sealed class GhostRoleRaffleDeciderPrototype : IPrototype +{ + /// + [IdDataField] + public string ID { get; private set; } = default!; + + /// + /// The instance that chooses the winner of a raffle. + /// + [DataField("decider", required: true)] + public IGhostRoleRaffleDecider Decider { get; private set; } = new RngGhostRoleRaffleDecider(); +} diff --git a/Content.Server/Ghost/Roles/Raffles/IGhostRoleRaffleDecider.cs b/Content.Server/Ghost/Roles/Raffles/IGhostRoleRaffleDecider.cs new file mode 100644 index 00000000000..bdd2bf046da --- /dev/null +++ b/Content.Server/Ghost/Roles/Raffles/IGhostRoleRaffleDecider.cs @@ -0,0 +1,28 @@ +using Robust.Shared.Player; + +namespace Content.Server.Ghost.Roles.Raffles; + +/// +/// Chooses a winner of a ghost role raffle. +/// +[ImplicitDataDefinitionForInheritors] +public partial interface IGhostRoleRaffleDecider +{ + /// + /// Chooses a winner of a ghost role raffle draw from the given pool of candidates. + /// + /// The players in the session at the time of drawing. + /// + /// Call this with the chosen winner as argument. + ///
  • If true is returned, your winner was able to take over the ghost role, and the drawing is complete. + /// Do not call again after true is returned.
  • + ///
  • If false is returned, your winner was not able to take over the ghost role, + /// and you must choose another winner, and call with the new winner as argument.
  • + ///
+ /// + /// If is not called, or only returns false, the raffle will end without a winner. + /// Do not call with the same player several times. + /// + void PickWinner(IEnumerable candidates, Func tryTakeover); +} + diff --git a/Content.Server/Ghost/Roles/Raffles/RngGhostRoleRaffleDecider.cs b/Content.Server/Ghost/Roles/Raffles/RngGhostRoleRaffleDecider.cs new file mode 100644 index 00000000000..b91d359935e --- /dev/null +++ b/Content.Server/Ghost/Roles/Raffles/RngGhostRoleRaffleDecider.cs @@ -0,0 +1,27 @@ +using System.Linq; +using JetBrains.Annotations; +using Robust.Shared.Player; +using Robust.Shared.Random; + +namespace Content.Server.Ghost.Roles.Raffles; + +/// +/// Chooses the winner of a ghost role raffle entirely randomly, without any weighting. +/// +[UsedImplicitly(ImplicitUseTargetFlags.WithMembers)] +public sealed partial class RngGhostRoleRaffleDecider : IGhostRoleRaffleDecider +{ + public void PickWinner(IEnumerable candidates, Func tryTakeover) + { + var random = IoCManager.Resolve(); + + var choices = candidates.ToList(); + random.Shuffle(choices); // shuffle the list so we can pick a lucky winner! + + foreach (var candidate in choices) + { + if (tryTakeover(candidate)) + return; + } + } +} diff --git a/Content.Server/Ghost/Roles/UI/GhostRolesEui.cs b/Content.Server/Ghost/Roles/UI/GhostRolesEui.cs index 627231db9e3..c1e39919a2f 100644 --- a/Content.Server/Ghost/Roles/UI/GhostRolesEui.cs +++ b/Content.Server/Ghost/Roles/UI/GhostRolesEui.cs @@ -6,9 +6,16 @@ namespace Content.Server.Ghost.Roles.UI { public sealed class GhostRolesEui : BaseEui { + private readonly GhostRoleSystem _ghostRoleSystem; + + public GhostRolesEui() + { + _ghostRoleSystem = IoCManager.Resolve().GetEntitySystem(); + } + public override GhostRolesEuiState GetNewState() { - return new(EntitySystem.Get().GetGhostRolesInfo()); + return new(_ghostRoleSystem.GetGhostRolesInfo(Player)); } public override void HandleMessage(EuiMessageBase msg) @@ -17,11 +24,14 @@ public override void HandleMessage(EuiMessageBase msg) switch (msg) { - case GhostRoleTakeoverRequestMessage req: - EntitySystem.Get().Takeover(Player, req.Identifier); + case RequestGhostRoleMessage req: + _ghostRoleSystem.Request(Player, req.Identifier); + break; + case FollowGhostRoleMessage req: + _ghostRoleSystem.Follow(Player, req.Identifier); break; - case GhostRoleFollowRequestMessage req: - EntitySystem.Get().Follow(Player, req.Identifier); + case LeaveGhostRoleRaffleMessage req: + _ghostRoleSystem.LeaveRaffle(Player, req.Identifier); break; } } diff --git a/Content.Server/Gravity/GravityGeneratorComponent.cs b/Content.Server/Gravity/GravityGeneratorComponent.cs index f9462920384..f47d3979391 100644 --- a/Content.Server/Gravity/GravityGeneratorComponent.cs +++ b/Content.Server/Gravity/GravityGeneratorComponent.cs @@ -37,6 +37,9 @@ public sealed partial class GravityGeneratorComponent : SharedGravityGeneratorCo // 0 -> 1 [ViewVariables(VVAccess.ReadWrite)] [DataField("charge")] public float Charge { get; set; } = 1; + [DataField(customTypeSerializer: typeof(PrototypeIdSerializer))] + public string MachinePartMaxChargeMultiplier = "Capacitor"; + /// /// Is the gravity generator currently "producing" gravity? /// diff --git a/Content.Server/Gravity/GravityGeneratorSystem.cs b/Content.Server/Gravity/GravityGeneratorSystem.cs index ec5646457e2..f5af26556cc 100644 --- a/Content.Server/Gravity/GravityGeneratorSystem.cs +++ b/Content.Server/Gravity/GravityGeneratorSystem.cs @@ -1,5 +1,6 @@ using Content.Server.Administration.Logs; using Content.Server.Audio; +using Content.Server.Construction; using Content.Server.Power.Components; using Content.Server.Emp; using Content.Shared.Database; @@ -25,15 +26,19 @@ public override void Initialize() SubscribeLocalEvent(OnCompInit); SubscribeLocalEvent(OnComponentShutdown); - SubscribeLocalEvent(OnParentChanged); // Or just anchor changed? + SubscribeLocalEvent( + OnParentChanged); // Or just anchor changed? SubscribeLocalEvent(OnInteractHand); + SubscribeLocalEvent(OnRefreshParts); SubscribeLocalEvent( OnSwitchGenerator); SubscribeLocalEvent(OnEmpPulse); } - private void OnParentChanged(EntityUid uid, GravityGeneratorComponent component, ref EntParentChangedMessage args) + private void OnParentChanged(EntityUid uid, + GravityGeneratorComponent component, + ref EntParentChangedMessage args) { if (component.GravityActive && TryComp(args.OldParent, out GravityComponent? gravity)) { @@ -133,14 +138,19 @@ public override void Update(float frameTime) } } - private void SetSwitchedOn(EntityUid uid, GravityGeneratorComponent component, bool on, - ApcPowerReceiverComponent? powerReceiver = null, ICommonSession? session = null) + private void SetSwitchedOn(EntityUid uid, + GravityGeneratorComponent component, + bool on, + ApcPowerReceiverComponent? powerReceiver = null, + EntityUid? user = null) { if (!Resolve(uid, ref powerReceiver)) return; - if (session is { AttachedEntity: { } }) - _adminLogger.Add(LogType.Action, on ? LogImpact.Medium : LogImpact.High, $"{session:player} set ${ToPrettyString(uid):target} to {(on ? "on" : "off")}"); + if (user != null) + _adminLogger.Add(LogType.Action, + on ? LogImpact.Medium : LogImpact.High, + $"{ToPrettyString(user)} set ${ToPrettyString(uid):target} to {(on ? "on" : "off")}"); component.SwitchedOn = on; UpdatePowerState(component, powerReceiver); @@ -157,7 +167,7 @@ private static void UpdatePowerState( private void UpdateUI(Entity ent, float chargeRate) { var (_, component, powerReceiver) = ent; - if (!_uiSystem.IsUiOpen(ent, SharedGravityGeneratorComponent.GravityGeneratorUiKey.Key)) + if (!_uiSystem.IsUiOpen(ent.Owner, SharedGravityGeneratorComponent.GravityGeneratorUiKey.Key)) return; var chargeTarget = chargeRate < 0 ? 0 : component.MaxCharge; @@ -192,8 +202,8 @@ private void UpdateUI(Entity ent, ref ComponentInit private void OnInteractHand(EntityUid uid, GravityGeneratorComponent component, InteractHandEvent args) { - if (!EntityManager.TryGetComponent(args.User, out ActorComponent? actor)) - return; - ApcPowerReceiverComponent? powerReceiver = default!; if (!Resolve(uid, ref powerReceiver)) return; @@ -223,7 +230,7 @@ private void OnInteractHand(EntityUid uid, GravityGeneratorComponent component, if (!component.Intact || powerReceiver.PowerReceived < component.IdlePowerUse) return; - _uiSystem.TryOpen(uid, SharedGravityGeneratorComponent.GravityGeneratorUiKey.Key, actor.PlayerSession); + _uiSystem.OpenUi(uid, SharedGravityGeneratorComponent.GravityGeneratorUiKey.Key, args.User); component.NeedUIUpdate = true; } @@ -236,7 +243,9 @@ public void UpdateState(Entity 0, pointLight); - _lights.SetRadius(uid, MathHelper.Lerp(grav.LightRadiusMin, grav.LightRadiusMax, grav.Charge), pointLight); + _lights.SetRadius(uid, + MathHelper.Lerp(grav.LightRadiusMin, grav.LightRadiusMax, grav.Charge), + pointLight); } if (!grav.Intact) @@ -257,6 +266,12 @@ public void UpdateState(Entity ent, AppearanceComponent? appearance) { _ambientSoundSystem.SetAmbience(ent, false); @@ -290,7 +305,7 @@ private void OnSwitchGenerator( GravityGeneratorComponent component, SharedGravityGeneratorComponent.SwitchGeneratorMessage args) { - SetSwitchedOn(uid, component, args.On, session:args.Session); + SetSwitchedOn(uid, component, args.On, user: args.Actor); } private void OnEmpPulse(EntityUid uid, GravityGeneratorComponent component, EmpPulseEvent args) diff --git a/Content.Server/GridPreloader/GridPreloaderComponent.cs b/Content.Server/GridPreloader/GridPreloaderComponent.cs new file mode 100644 index 00000000000..9ff31927d0b --- /dev/null +++ b/Content.Server/GridPreloader/GridPreloaderComponent.cs @@ -0,0 +1,16 @@ +using Content.Shared.GridPreloader.Prototypes; +using Robust.Shared.Map; +using Robust.Shared.Prototypes; + +namespace Content.Server.GridPreloader; + +/// +/// Component storing data about preloaded grids and their location +/// Goes on the map entity +/// +[RegisterComponent, Access(typeof(GridPreloaderSystem))] +public sealed partial class GridPreloaderComponent : Component +{ + [DataField] + public Dictionary, List> PreloadedGrids = new(); +} diff --git a/Content.Server/GridPreloader/GridPreloaderSystem.cs b/Content.Server/GridPreloader/GridPreloaderSystem.cs new file mode 100644 index 00000000000..569fe54141c --- /dev/null +++ b/Content.Server/GridPreloader/GridPreloaderSystem.cs @@ -0,0 +1,147 @@ +using System.Diagnostics.CodeAnalysis; +using Content.Shared.CCVar; +using Content.Shared.GridPreloader.Prototypes; +using Content.Shared.GridPreloader.Systems; +using Robust.Server.GameObjects; +using Robust.Server.Maps; +using Robust.Shared.Configuration; +using Robust.Shared.Map; +using Robust.Shared.Map.Components; +using Robust.Shared.Physics.Components; +using Robust.Shared.Prototypes; +using System.Numerics; +using Content.Server.GameTicking; +using Content.Shared.GameTicking; +using JetBrains.Annotations; + +namespace Content.Server.GridPreloader; +public sealed class GridPreloaderSystem : SharedGridPreloaderSystem +{ + [Dependency] private readonly IConfigurationManager _cfg = default!; + [Dependency] private readonly MapSystem _map = default!; + [Dependency] private readonly MapLoaderSystem _mapLoader = default!; + [Dependency] private readonly MetaDataSystem _meta = default!; + [Dependency] private readonly IPrototypeManager _prototype = default!; + [Dependency] private readonly SharedTransformSystem _transform = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnRoundRestart); + SubscribeLocalEvent(OnPostGameMapLoad); + } + + private void OnRoundRestart(RoundRestartCleanupEvent ev) + { + var ent = GetPreloaderEntity(); + if (ent == null) + return; + + Del(ent.Value.Owner); + } + + private void OnPostGameMapLoad(PostGameMapLoad ev) + { + EnsurePreloadedGridMap(); + } + + private void EnsurePreloadedGridMap() + { + // Already have a preloader? + if (GetPreloaderEntity() != null) + return; + + if (!_cfg.GetCVar(CCVars.PreloadGrids)) + return; + + var mapUid = _map.CreateMap(out var mapId, false); + var preloader = EnsureComp(mapUid); + _meta.SetEntityName(mapUid, "GridPreloader Map"); + _map.SetPaused(mapId, true); + + var globalXOffset = 0f; + foreach (var proto in _prototype.EnumeratePrototypes()) + { + for (var i = 0; i < proto.Copies; i++) + { + var options = new MapLoadOptions + { + LoadMap = false, + }; + + if (!_mapLoader.TryLoad(mapId, proto.Path.ToString(), out var roots, options)) + continue; + + // only supports loading maps with one grid. + if (roots.Count != 1) + continue; + + var gridUid = roots[0]; + + // gets grid + also confirms that the root we loaded is actually a grid + if (!TryComp(gridUid, out var mapGrid)) + continue; + + if (!TryComp(gridUid, out var physics)) + continue; + + // Position Calculating + globalXOffset += mapGrid.LocalAABB.Width / 2; + + var coords = new Vector2(-physics.LocalCenter.X + globalXOffset, -physics.LocalCenter.Y); + _transform.SetCoordinates(gridUid, new EntityCoordinates(mapUid, coords)); + + globalXOffset += (mapGrid.LocalAABB.Width / 2) + 1; + + // Add to list + if (!preloader.PreloadedGrids.ContainsKey(proto.ID)) + preloader.PreloadedGrids[proto.ID] = new(); + preloader.PreloadedGrids[proto.ID].Add(gridUid); + } + } + } + + /// + /// Should be a singleton no matter station count, so we can assume 1 + /// (better support for singleton component in engine at some point i guess) + /// + /// + public Entity? GetPreloaderEntity() + { + var query = AllEntityQuery(); + while (query.MoveNext(out var uid, out var comp)) + { + return (uid, comp); + } + + return null; + } + + /// + /// An attempt to get a certain preloaded shuttle. If there are no more such shuttles left, returns null + /// + [PublicAPI] + public bool TryGetPreloadedGrid(ProtoId proto, [NotNullWhen(true)] out EntityUid? preloadedGrid, GridPreloaderComponent? preloader = null) + { + preloadedGrid = null; + + if (preloader == null) + { + preloader = GetPreloaderEntity(); + if (preloader == null) + return false; + } + + if (!preloader.PreloadedGrids.TryGetValue(proto, out var list) || list.Count <= 0) + return false; + + preloadedGrid = list[0]; + + list.RemoveAt(0); + if (list.Count == 0) + preloader.PreloadedGrids.Remove(proto); + + return true; + } +} diff --git a/Content.Server/Hands/Systems/HandsSystem.cs b/Content.Server/Hands/Systems/HandsSystem.cs index bd24ddab5d1..289c440ab7f 100644 --- a/Content.Server/Hands/Systems/HandsSystem.cs +++ b/Content.Server/Hands/Systems/HandsSystem.cs @@ -19,6 +19,7 @@ using Robust.Shared.Input.Binding; using Robust.Shared.Map; using Robust.Shared.Player; +using Robust.Shared.Random; using Robust.Shared.Timing; using Robust.Shared.Utility; @@ -27,10 +28,10 @@ namespace Content.Server.Hands.Systems public sealed class HandsSystem : SharedHandsSystem { [Dependency] private readonly IGameTiming _timing = default!; + [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly StackSystem _stackSystem = default!; [Dependency] private readonly VirtualItemSystem _virtualItemSystem = default!; [Dependency] private readonly ActionBlockerSystem _actionBlockerSystem = default!; - [Dependency] private readonly SharedHandsSystem _handsSystem = default!; [Dependency] private readonly SharedTransformSystem _transformSystem = default!; [Dependency] private readonly PullingSystem _pullingSystem = default!; [Dependency] private readonly ThrowingSystem _throwingSystem = default!; @@ -90,7 +91,8 @@ private void OnDisarmed(EntityUid uid, HandsComponent component, DisarmedEvent a if (TryComp(uid, out PullerComponent? puller) && TryComp(puller.Pulling, out PullableComponent? pullable)) _pullingSystem.TryStopPull(puller.Pulling.Value, pullable); - if (!_handsSystem.TryDrop(uid, component.ActiveHand!, null, checkActionBlocker: false)) + var offsetRandomCoordinates = _transformSystem.GetMoverCoordinates(args.Target).Offset(_random.NextVector2(1f, 1.5f)); + if (!ThrowHeldItem(args.Target, offsetRandomCoordinates)) return; args.Handled = true; // no shove/stun. diff --git a/Content.Server/HealthExaminable/HealthExaminableComponent.cs b/Content.Server/HealthExaminable/HealthExaminableComponent.cs deleted file mode 100644 index 04053aed70e..00000000000 --- a/Content.Server/HealthExaminable/HealthExaminableComponent.cs +++ /dev/null @@ -1,27 +0,0 @@ -using Content.Shared.Damage.Prototypes; -using Content.Shared.FixedPoint; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Set; - -namespace Content.Server.HealthExaminable; - -[RegisterComponent, Access(typeof(HealthExaminableSystem))] -public sealed partial class HealthExaminableComponent : Component -{ - // - // The thresholds for determining the examine text for certain amounts of damage. - // These are calculated as a percentage of the entity's critical threshold. - // - public List Thresholds = new() - { FixedPoint2.New(0.10), FixedPoint2.New(0.25), FixedPoint2.New(0.50), FixedPoint2.New(0.75) }; - - [DataField("examinableTypes", required: true, customTypeSerializer:typeof(PrototypeIdHashSetSerializer))] - public HashSet ExaminableTypes = default!; - - /// - /// Health examine text is automatically generated through creating loc string IDs, in the form: - /// `health-examine-[prefix]-[type]-[threshold]` - /// This part determines the prefix. - /// - [DataField("locPrefix")] - public string LocPrefix = "carbon"; -} diff --git a/Content.Server/Humanoid/Components/RandomHumanoidSpawnerComponent.cs b/Content.Server/Humanoid/Components/RandomHumanoidSpawnerComponent.cs index b56664fe19e..bb38e94e04a 100644 --- a/Content.Server/Humanoid/Components/RandomHumanoidSpawnerComponent.cs +++ b/Content.Server/Humanoid/Components/RandomHumanoidSpawnerComponent.cs @@ -8,7 +8,7 @@ namespace Content.Server.Humanoid.Components; /// This is added to a marker entity in order to spawn a randomized /// humanoid ingame. ///
-[RegisterComponent] +[RegisterComponent, EntityCategory("Spawner")] public sealed partial class RandomHumanoidSpawnerComponent : Component { [DataField("settings", customTypeSerializer: typeof(PrototypeIdSerializer))] diff --git a/Content.Server/Humanoid/Systems/HumanoidAppearanceSystem.Modifier.cs b/Content.Server/Humanoid/Systems/HumanoidAppearanceSystem.Modifier.cs index 05a8b062221..06225c9d57c 100644 --- a/Content.Server/Humanoid/Systems/HumanoidAppearanceSystem.Modifier.cs +++ b/Content.Server/Humanoid/Systems/HumanoidAppearanceSystem.Modifier.cs @@ -32,8 +32,8 @@ private void OnVerbsRequest(EntityUid uid, HumanoidAppearanceComponent component Icon = new SpriteSpecifier.Rsi(new ("/Textures/Mobs/Customization/reptilian_parts.rsi"), "tail_smooth"), Act = () => { - _uiSystem.TryOpen(uid, HumanoidMarkingModifierKey.Key, actor.PlayerSession); - _uiSystem.TrySetUiState( + _uiSystem.OpenUi(uid, HumanoidMarkingModifierKey.Key, actor.PlayerSession); + _uiSystem.SetUiState( uid, HumanoidMarkingModifierKey.Key, new HumanoidMarkingModifierState(component.MarkingSet, component.Species, @@ -48,8 +48,7 @@ private void OnVerbsRequest(EntityUid uid, HumanoidAppearanceComponent component private void OnBaseLayersSet(EntityUid uid, HumanoidAppearanceComponent component, HumanoidMarkingModifierBaseLayersSetMessage message) { - if (message.Session is not { } player - || !_adminManager.HasAdminFlag(player, AdminFlags.Fun)) + if (!_adminManager.HasAdminFlag(message.Actor, AdminFlags.Fun)) { return; } @@ -67,7 +66,7 @@ private void OnBaseLayersSet(EntityUid uid, HumanoidAppearanceComponent componen if (message.ResendState) { - _uiSystem.TrySetUiState( + _uiSystem.SetUiState( uid, HumanoidMarkingModifierKey.Key, new HumanoidMarkingModifierState(component.MarkingSet, component.Species, @@ -81,8 +80,7 @@ private void OnBaseLayersSet(EntityUid uid, HumanoidAppearanceComponent componen private void OnMarkingsSet(EntityUid uid, HumanoidAppearanceComponent component, HumanoidMarkingModifierMarkingSetMessage message) { - if (message.Session is not { } player - || !_adminManager.HasAdminFlag(player, AdminFlags.Fun)) + if (!_adminManager.HasAdminFlag(message.Actor, AdminFlags.Fun)) { return; } @@ -92,7 +90,7 @@ private void OnMarkingsSet(EntityUid uid, HumanoidAppearanceComponent component, if (message.ResendState) { - _uiSystem.TrySetUiState( + _uiSystem.SetUiState( uid, HumanoidMarkingModifierKey.Key, new HumanoidMarkingModifierState(component.MarkingSet, component.Species, diff --git a/Content.Server/IdentityManagement/IdentitySystem.cs b/Content.Server/IdentityManagement/IdentitySystem.cs index a959b96ef97..4766b89172f 100644 --- a/Content.Server/IdentityManagement/IdentitySystem.cs +++ b/Content.Server/IdentityManagement/IdentitySystem.cs @@ -19,7 +19,7 @@ namespace Content.Server.IdentityManagement; /// /// Responsible for updating the identity of an entity on init or clothing equip/unequip. /// -public class IdentitySystem : SharedIdentitySystem +public sealed class IdentitySystem : SharedIdentitySystem { [Dependency] private readonly IdCardSystem _idCard = default!; [Dependency] private readonly IAdminLogManager _adminLog = default!; diff --git a/Content.Server/ImmovableRod/ImmovableRodComponent.cs b/Content.Server/ImmovableRod/ImmovableRodComponent.cs index 05fa3d9d9b2..8b57a716969 100644 --- a/Content.Server/ImmovableRod/ImmovableRodComponent.cs +++ b/Content.Server/ImmovableRod/ImmovableRodComponent.cs @@ -42,7 +42,7 @@ public sealed partial class ImmovableRodComponent : Component /// If true, this will gib & delete bodies ///
[DataField] - public bool ShouldGib = true; + public bool ShouldGib; /// /// Damage done, if not gibbing diff --git a/Content.Server/ImmovableRod/ImmovableRodSystem.cs b/Content.Server/ImmovableRod/ImmovableRodSystem.cs index 4553dda095a..f9873b0d6a9 100644 --- a/Content.Server/ImmovableRod/ImmovableRodSystem.cs +++ b/Content.Server/ImmovableRod/ImmovableRodSystem.cs @@ -60,18 +60,21 @@ private void OnMapInit(EntityUid uid, ImmovableRodComponent component, MapInitEv _physics.SetFriction(uid, phys, 0f); _physics.SetBodyStatus(uid, phys, BodyStatus.InAir); - if (!component.RandomizeVelocity) - return; - var xform = Transform(uid); - var vel = component.DirectionOverride.Degrees switch + var (worldPos, worldRot) = _transform.GetWorldPositionRotation(uid); + var vel = worldRot.ToWorldVec() * component.MaxSpeed; + + if (component.RandomizeVelocity) { - 0f => _random.NextVector2(component.MinSpeed, component.MaxSpeed), - _ => _transform.GetWorldRotation(uid).RotateVec(component.DirectionOverride.ToVec()) * _random.NextFloat(component.MinSpeed, component.MaxSpeed) - }; + vel = component.DirectionOverride.Degrees switch + { + 0f => _random.NextVector2(component.MinSpeed, component.MaxSpeed), + _ => worldRot.RotateVec(component.DirectionOverride.ToVec()) * _random.NextFloat(component.MinSpeed, component.MaxSpeed) + }; + } _physics.ApplyLinearImpulse(uid, vel, body: phys); - xform.LocalRotation = (vel - _transform.GetWorldPosition(uid)).ToWorldAngle() + MathHelper.PiOver2; + xform.LocalRotation = (vel - worldPos).ToWorldAngle() + MathHelper.PiOver2; } } diff --git a/Content.Server/Instruments/InstrumentComponent.cs b/Content.Server/Instruments/InstrumentComponent.cs index 1b7913386d2..db9dbb375bc 100644 --- a/Content.Server/Instruments/InstrumentComponent.cs +++ b/Content.Server/Instruments/InstrumentComponent.cs @@ -1,6 +1,7 @@ using Content.Server.UserInterface; using Content.Shared.Instruments; using Robust.Shared.Player; +using ActivatableUIComponent = Content.Shared.UserInterface.ActivatableUIComponent; namespace Content.Server.Instruments; @@ -16,9 +17,9 @@ public sealed partial class InstrumentComponent : SharedInstrumentComponent [ViewVariables] public uint LastSequencerTick = 0; // TODO Instruments: Make this ECS - public ICommonSession? InstrumentPlayer => + public EntityUid? InstrumentPlayer => _entMan.GetComponentOrNull(Owner)?.CurrentSingleUser - ?? _entMan.GetComponentOrNull(Owner)?.PlayerSession; + ?? _entMan.GetComponentOrNull(Owner)?.PlayerSession.AttachedEntity; } [RegisterComponent] diff --git a/Content.Server/Instruments/InstrumentSystem.cs b/Content.Server/Instruments/InstrumentSystem.cs index 8dd9644e3c5..f5a6713886d 100644 --- a/Content.Server/Instruments/InstrumentSystem.cs +++ b/Content.Server/Instruments/InstrumentSystem.cs @@ -111,7 +111,7 @@ private void OnMidiStart(InstrumentStartMidiEvent msg, EntitySessionEventArgs ar if (!TryComp(uid, out InstrumentComponent? instrument)) return; - if (args.SenderSession != instrument.InstrumentPlayer) + if (args.SenderSession.AttachedEntity != instrument.InstrumentPlayer) return; instrument.Playing = true; @@ -125,7 +125,7 @@ private void OnMidiStop(InstrumentStopMidiEvent msg, EntitySessionEventArgs args if (!TryComp(uid, out InstrumentComponent? instrument)) return; - if (args.SenderSession != instrument.InstrumentPlayer) + if (args.SenderSession.AttachedEntity != instrument.InstrumentPlayer) return; Clean(uid, instrument); @@ -142,7 +142,7 @@ private void OnMidiSetMaster(InstrumentSetMasterEvent msg, EntitySessionEventArg if (!TryComp(uid, out InstrumentComponent? instrument)) return; - if (args.SenderSession != instrument.InstrumentPlayer) + if (args.SenderSession.AttachedEntity != instrument.InstrumentPlayer) return; if (master != null) @@ -174,7 +174,7 @@ private void OnMidiSetFilteredChannel(InstrumentSetFilteredChannelEvent msg, Ent if (!TryComp(uid, out InstrumentComponent? instrument)) return; - if (args.SenderSession != instrument.InstrumentPlayer) + if (args.SenderSession.AttachedEntity != instrument.InstrumentPlayer) return; if (msg.Channel == RobustMidiEvent.PercussionChannel && !instrument.AllowPercussion) @@ -194,8 +194,7 @@ private void OnMidiSetFilteredChannel(InstrumentSetFilteredChannelEvent msg, Ent private void OnBoundUIClosed(EntityUid uid, InstrumentComponent component, BoundUIClosedEvent args) { if (HasComp(uid) - && _bui.TryGetUi(uid, args.UiKey, out var bui) - && bui.SubscribedSessions.Count == 0) + && !_bui.IsUiOpen(uid, args.UiKey)) { RemComp(uid); } @@ -232,7 +231,7 @@ private void OnBoundUIRequestBands(EntityUid uid, InstrumentComponent component, var instrumentQuery = EntityManager.GetEntityQuery(); if (!TryComp(uid, out InstrumentComponent? originInstrument) - || originInstrument.InstrumentPlayer?.AttachedEntity is not {} originPlayer) + || originInstrument.InstrumentPlayer is not {} originPlayer) return Array.Empty<(NetEntity, string)>(); // It's probably faster to get all possible active instruments than all entities in range @@ -247,7 +246,7 @@ private void OnBoundUIRequestBands(EntityUid uid, InstrumentComponent component, continue; // We want to use the instrument player's name. - if (instrument.InstrumentPlayer?.AttachedEntity is not {} playerUid) + if (instrument.InstrumentPlayer is not {} playerUid) continue; // Maybe a bit expensive but oh well GetBands is queued and has a timer anyway. @@ -298,7 +297,7 @@ private void OnMidiEventRx(InstrumentMidiEventEvent msg, EntitySessionEventArgs return; if (!instrument.Playing - || args.SenderSession != instrument.InstrumentPlayer + || args.SenderSession.AttachedEntity != instrument.InstrumentPlayer || instrument.InstrumentPlayer == null || args.SenderSession.AttachedEntity is not { } attached) { @@ -374,8 +373,7 @@ public override void Update(float frameTime) var entity = GetEntity(request.Entity); var nearby = GetBands(entity); - _bui.TrySendUiMessage(entity, request.UiKey, new InstrumentBandResponseBuiMessage(nearby), - request.Session); + _bui.ServerSendUiMessage(entity, request.UiKey, new InstrumentBandResponseBuiMessage(nearby), request.Actor); } _bandRequestQueue.Clear(); @@ -413,7 +411,7 @@ public override void Update(float frameTime) (instrument.BatchesDropped >= MaxMidiBatchesDropped || instrument.LaggedBatches >= MaxMidiLaggedBatches)) { - if (instrument.InstrumentPlayer?.AttachedEntity is {Valid: true} mob) + if (instrument.InstrumentPlayer is {Valid: true} mob) { _stuns.TryParalyze(mob, TimeSpan.FromSeconds(1), true); @@ -423,7 +421,7 @@ public override void Update(float frameTime) // Just in case Clean(uid); - _bui.TryCloseAll(uid, InstrumentUiKey.Key); + _bui.CloseUi(uid, InstrumentUiKey.Key); } instrument.Timer += frameTime; @@ -437,13 +435,12 @@ public override void Update(float frameTime) } } - public void ToggleInstrumentUi(EntityUid uid, ICommonSession session, InstrumentComponent? component = null) + public void ToggleInstrumentUi(EntityUid uid, EntityUid actor, InstrumentComponent? component = null) { if (!Resolve(uid, ref component)) return; - if (_bui.TryGetUi(uid, InstrumentUiKey.Key, out var bui)) - _bui.ToggleUi(bui, session); + _bui.TryToggleUi(uid, InstrumentUiKey.Key, actor); } public override bool ResolveInstrument(EntityUid uid, ref SharedInstrumentComponent? component) diff --git a/Content.Server/Interaction/InteractionSystem.cs b/Content.Server/Interaction/InteractionSystem.cs index 203781bcdaa..9ac82b21858 100644 --- a/Content.Server/Interaction/InteractionSystem.cs +++ b/Content.Server/Interaction/InteractionSystem.cs @@ -7,56 +7,6 @@ namespace Content.Server.Interaction { - /// - /// Governs interactions during clicking on entities - /// - [UsedImplicitly] - public sealed partial class InteractionSystem : SharedInteractionSystem - { - [Dependency] private readonly SharedContainerSystem _container = default!; - [Dependency] private readonly UserInterfaceSystem _uiSystem = default!; - - public override void Initialize() - { - base.Initialize(); - - SubscribeLocalEvent(HandleUserInterfaceRangeCheck); - } - - public override bool CanAccessViaStorage(EntityUid user, EntityUid target) - { - if (Deleted(target)) - return false; - - if (!_container.TryGetContainingContainer(target, out var container)) - return false; - - if (!TryComp(container.Owner, out StorageComponent? storage)) - return false; - - if (storage.Container?.ID != container.ID) - return false; - - if (!TryComp(user, out ActorComponent? actor)) - return false; - - // we don't check if the user can access the storage entity itself. This should be handed by the UI system. - return _uiSystem.SessionHasOpenUi(container.Owner, StorageComponent.StorageUiKey.Key, actor.PlayerSession); - } - - private void HandleUserInterfaceRangeCheck(ref BoundUserInterfaceCheckRangeEvent ev) - { - if (ev.Player.AttachedEntity is not { } user || ev.Result == BoundUserInterfaceRangeResult.Fail) - return; - - if (InRangeUnobstructed(user, ev.Target, ev.UserInterface.InteractionRange)) - { - ev.Result = BoundUserInterfaceRangeResult.Pass; - } - else - { - ev.Result = BoundUserInterfaceRangeResult.Fail; - } - } - } + // TODO Remove Shared prefix + public sealed class InteractionSystem : SharedInteractionSystem; } diff --git a/Content.Server/InteractionVerbs/Actions/ChangeStandingStateAction.cs b/Content.Server/InteractionVerbs/Actions/ChangeStandingStateAction.cs index b061c85f9c0..59340df58f2 100644 --- a/Content.Server/InteractionVerbs/Actions/ChangeStandingStateAction.cs +++ b/Content.Server/InteractionVerbs/Actions/ChangeStandingStateAction.cs @@ -15,24 +15,25 @@ public override bool CanPerform(InteractionArgs args, InteractionVerbPrototype p return false; if (isBefore) - args.Blackboard["standing"] = state.Standing; + args.Blackboard["standing"] = state.CurrentState; - return state.Standing ? MakeLaying : MakeStanding; + return state.CurrentState == StandingState.Standing && MakeLaying + || state.CurrentState == StandingState.Lying && MakeStanding; } public override bool Perform(InteractionArgs args, InteractionVerbPrototype proto, VerbDependencies deps) { var stateSystem = deps.EntMan.System(); - var isDown = stateSystem.IsDown(args.Target); - if (args.TryGetBlackboard("standing", out bool wasStanding) && wasStanding != !isDown) - return false; // The target changed its standing state during the do-after - sus + if (!deps.EntMan.TryGetComponent(args.Target, out var state) + || args.TryGetBlackboard("standing", out StandingState oldStanding) && oldStanding != state.CurrentState) + return false; // Note: these will get cancelled if the target is forced to stand/lay, e.g. due to a buckle or stun or something else. - if (isDown && MakeStanding) + if (state.CurrentState == StandingState.Lying && MakeStanding) return stateSystem.Stand(args.Target); - else if (!isDown && MakeLaying) - return stateSystem.Down(args.Target); + else if (state.CurrentState == StandingState.Standing && MakeLaying) + return stateSystem.Down(args.Target, setDrawDepth: true); return false; } diff --git a/Content.Server/InteractionVerbs/InteractionVerbsSystem.cs b/Content.Server/InteractionVerbs/InteractionVerbsSystem.cs index 83aa4548162..ba51bbe39cd 100644 --- a/Content.Server/InteractionVerbs/InteractionVerbsSystem.cs +++ b/Content.Server/InteractionVerbs/InteractionVerbsSystem.cs @@ -13,6 +13,14 @@ public sealed class InteractionVerbsSystem : SharedInteractionVerbsSystem [Dependency] private readonly IChatManager _chatManager = default!; [Dependency] private readonly SharedInteractionSystem _interactions = default!; + private EntityQuery _occluderQuery; + + public override void Initialize() + { + base.Initialize(); + _occluderQuery = GetEntityQuery(); + } + protected override void SendChatLog(string message, EntityUid source, Filter filter, InteractionPopupPrototype popup, bool clip) { if (filter.Count <= 0) @@ -24,7 +32,7 @@ protected override void SendChatLog(string message, EntityUid source, Filter fil // Exclude entities who cannot directly see the target of the popup. TODO this may have a high performance cost - although whispers do the same. // We only do this if the popup has to be logged into chat since that has some gameplay implications. if (clip && popup.DoClipping) - filter.RemoveWhereAttachedEntity(ent => !_interactions.InRangeUnobstructed(ent, source, popup.VisibilityRange, CollisionGroup.Opaque)); + filter.RemoveWhereAttachedEntity(ent => !CanSee(ent, source, popup.VisibilityRange)); if (filter.Count == 1) _chatManager.ChatMessageToOne(popup.LogChannel, message, wrappedMessage, source, false, filter.Recipients.First().Channel, color); @@ -39,4 +47,15 @@ protected override void SendChatLog(string message, EntityUid source, Filter fil PopupType.Medium or PopupType.Small => Color.LightGray, _ => Color.White }; + + private bool CanSee(EntityUid source, EntityUid target, float maxRange) + { + // TODO: InRangeUnobstructed has a pretty high performance cost and is not intended to be used like that. + // We should see if we can move this to client side later, aka make the client check if the target is visible for it. + return _interactions.InRangeUnobstructed( + source, target, maxRange, + CollisionGroup.Opaque, + uid => !_occluderQuery.TryComp(uid, out var occluder) || !occluder.Enabled, // We ignore all entities that do not occlude light + false); + } } diff --git a/Content.Server/Inventory/ServerInventorySystem.cs b/Content.Server/Inventory/ServerInventorySystem.cs index 29d39f37234..e3783753bbc 100644 --- a/Content.Server/Inventory/ServerInventorySystem.cs +++ b/Content.Server/Inventory/ServerInventorySystem.cs @@ -1,21 +1,15 @@ -using Content.Server.Storage.EntitySystems; using Content.Shared.Explosion; using Content.Shared.Inventory; -using Content.Shared.Inventory.Events; -using Content.Shared.Storage; namespace Content.Server.Inventory { public sealed class ServerInventorySystem : InventorySystem { - [Dependency] private readonly StorageSystem _storageSystem = default!; - public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnExploded); - SubscribeNetworkEvent(OnOpenSlotStorage); } private void OnExploded(Entity ent, ref BeforeExplodeEvent args) @@ -29,17 +23,6 @@ private void OnExploded(Entity ent, ref BeforeExplodeEvent a } } - private void OnOpenSlotStorage(OpenSlotStorageNetworkMessage ev, EntitySessionEventArgs args) - { - if (args.SenderSession.AttachedEntity is not { Valid: true } uid) - return; - - if (TryGetSlotEntity(uid, ev.Slot, out var entityUid) && TryComp(entityUid, out var storageComponent)) - { - _storageSystem.OpenStorageUI(entityUid.Value, uid, storageComponent); - } - } - public void TransferEntityInventories(Entity source, Entity target) { if (!Resolve(source.Owner, ref source.Comp) || !Resolve(target.Owner, ref target.Comp)) diff --git a/Content.Server/IoC/ServerContentIoC.cs b/Content.Server/IoC/ServerContentIoC.cs index bc399977358..7c150141333 100644 --- a/Content.Server/IoC/ServerContentIoC.cs +++ b/Content.Server/IoC/ServerContentIoC.cs @@ -13,6 +13,7 @@ using Content.Server.GhostKick; using Content.Server.Info; using Content.Server.Maps; +using Content.Server.Players.JobWhitelist; using Content.Server.MoMMI; using Content.Server.NodeContainer.NodeGroups; using Content.Server.Players.PlayTimeTracking; @@ -61,6 +62,7 @@ public static void Register() IoCManager.Register(); IoCManager.Register(); IoCManager.Register(); + IoCManager.Register(); IoCManager.Register(); IoCManager.Register(); IoCManager.Register(); diff --git a/Content.Server/Jobs/AddComponentSpecial.cs b/Content.Server/Jobs/AddComponentSpecial.cs index c57d7343543..3264c54cd57 100644 --- a/Content.Server/Jobs/AddComponentSpecial.cs +++ b/Content.Server/Jobs/AddComponentSpecial.cs @@ -8,8 +8,7 @@ namespace Content.Server.Jobs [UsedImplicitly] public sealed partial class AddComponentSpecial : JobSpecial { - [DataField("components")] - [AlwaysPushInheritance] + [DataField, AlwaysPushInheritance] public ComponentRegistry Components { get; private set; } = new(); public override void AfterEquip(EntityUid mob) diff --git a/Content.Server/Kitchen/Components/MicrowaveComponent.cs b/Content.Server/Kitchen/Components/MicrowaveComponent.cs index 815ba8f5213..1e343e5e332 100644 --- a/Content.Server/Kitchen/Components/MicrowaveComponent.cs +++ b/Content.Server/Kitchen/Components/MicrowaveComponent.cs @@ -11,95 +11,99 @@ namespace Content.Server.Kitchen.Components [RegisterComponent] public sealed partial class MicrowaveComponent : Component { - [DataField("cookTimeMultiplier"), ViewVariables(VVAccess.ReadWrite)] + [DataField] public float CookTimeMultiplier = 1; - - [DataField("baseHeatMultiplier"), ViewVariables(VVAccess.ReadWrite)] + [DataField(customTypeSerializer: typeof(PrototypeIdSerializer))] + public string MachinePartCookTimeMultiplier = "Capacitor"; + [DataField] + public float CookTimeScalingConstant = 0.5f; + [DataField] public float BaseHeatMultiplier = 100; - [DataField("objectHeatMultiplier"), ViewVariables(VVAccess.ReadWrite)] + [DataField] public float ObjectHeatMultiplier = 100; - [DataField("failureResult", customTypeSerializer: typeof(PrototypeIdSerializer))] + [DataField(customTypeSerializer: typeof(PrototypeIdSerializer))] public string BadRecipeEntityId = "FoodBadRecipe"; #region audio - [DataField("beginCookingSound")] + [DataField] public SoundSpecifier StartCookingSound = new SoundPathSpecifier("/Audio/Machines/microwave_start_beep.ogg"); - [DataField("foodDoneSound")] + [DataField] public SoundSpecifier FoodDoneSound = new SoundPathSpecifier("/Audio/Machines/microwave_done_beep.ogg"); - [DataField("clickSound")] + [DataField] public SoundSpecifier ClickSound = new SoundPathSpecifier("/Audio/Machines/machine_switch.ogg"); - [DataField("ItemBreakSound")] + [DataField] public SoundSpecifier ItemBreakSound = new SoundPathSpecifier("/Audio/Effects/clang.ogg"); public EntityUid? PlayingStream; - [DataField("loopingSound")] + [DataField] public SoundSpecifier LoopingSound = new SoundPathSpecifier("/Audio/Machines/microwave_loop.ogg"); #endregion [ViewVariables] public bool Broken; - [DataField, ViewVariables(VVAccess.ReadWrite)] + [DataField] public ProtoId OnPort = "On"; /// - /// This is a fixed offset of 5. - /// The cook times for all recipes should be divisible by 5,with a minimum of 1 second. - /// For right now, I don't think any recipe cook time should be greater than 60 seconds. + /// This is a fixed offset of 5. + /// The cook times for all recipes should be divisible by 5,with a minimum of 1 second. + /// For right now, I don't think any recipe cook time should be greater than 60 seconds. /// - [DataField("currentCookTimerTime"), ViewVariables(VVAccess.ReadWrite)] + [DataField] public uint CurrentCookTimerTime = 0; /// - /// Tracks the elapsed time of the current cook timer. + /// Tracks the elapsed time of the current cook timer. /// - [DataField, ViewVariables(VVAccess.ReadWrite)] + [DataField] public TimeSpan CurrentCookTimeEnd = TimeSpan.Zero; /// - /// The maximum number of seconds a microwave can be set to. - /// This is currently only used for validation and the client does not check this. + /// The maximum number of seconds a microwave can be set to. + /// This is currently only used for validation and the client does not check this. /// - [DataField("maxCookTime"), ViewVariables(VVAccess.ReadWrite)] + [DataField] public uint MaxCookTime = 30; /// /// The max temperature that this microwave can heat objects to. /// - [DataField("temperatureUpperThreshold")] + [DataField] public float TemperatureUpperThreshold = 373.15f; public int CurrentCookTimeButtonIndex; public Container Storage = default!; - [DataField, ViewVariables(VVAccess.ReadWrite)] + [DataField] public int Capacity = 10; - [DataField, ViewVariables(VVAccess.ReadWrite)] + [DataField] public ProtoId MaxItemSize = "Normal"; /// - /// How frequently the microwave can malfunction. + /// How frequently the microwave can malfunction. /// [DataField] public float MalfunctionInterval = 1.0f; /// - /// Chance of an explosion occurring when we microwave a metallic object + /// Chance of an explosion occurring when we microwave a metallic object /// - [DataField, ViewVariables(VVAccess.ReadWrite)] + [DataField] public float ExplosionChance = .1f; /// - /// Chance of lightning occurring when we microwave a metallic object - [DataField, ViewVariables(VVAccess.ReadWrite)] + /// Chance of lightning occurring when we microwave a metallic object + /// + [DataField] public float LightningChance = .75f; } diff --git a/Content.Server/Kitchen/Components/ReagentGrinderComponent.cs b/Content.Server/Kitchen/Components/ReagentGrinderComponent.cs index 5bbbe2dc8da..4f4531206c7 100644 --- a/Content.Server/Kitchen/Components/ReagentGrinderComponent.cs +++ b/Content.Server/Kitchen/Components/ReagentGrinderComponent.cs @@ -1,6 +1,8 @@ using Content.Shared.Kitchen; using Content.Server.Kitchen.EntitySystems; +using Content.Shared.Construction.Prototypes; using Robust.Shared.Audio; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; namespace Content.Server.Kitchen.Components { @@ -13,15 +15,30 @@ namespace Content.Server.Kitchen.Components [Access(typeof(ReagentGrinderSystem)), RegisterComponent] public sealed partial class ReagentGrinderComponent : Component { - [DataField] + [ViewVariables(VVAccess.ReadWrite)] public int StorageMaxEntities = 6; [DataField] - public TimeSpan WorkTime = TimeSpan.FromSeconds(3.5); // Roughly matches the grind/juice sounds. + public int BaseStorageMaxEntities = 4; + + [DataField(customTypeSerializer: typeof(PrototypeIdSerializer))] + public string MachinePartStorageMax = "MatterBin"; + + [DataField] + public int StoragePerPartRating = 4; [DataField] + public TimeSpan WorkTime = TimeSpan.FromSeconds(3.5); // Roughly matches the grind/juice sounds. + + [ViewVariables(VVAccess.ReadWrite)] public float WorkTimeMultiplier = 1; + [DataField(customTypeSerializer: typeof(PrototypeIdSerializer))] + public string MachinePartWorkTime = "Manipulator"; + + [DataField] + public float PartRatingWorkTimerMulitplier = 0.6f; + [DataField] public SoundSpecifier ClickSound { get; set; } = new SoundPathSpecifier("/Audio/Machines/machine_switch.ogg"); diff --git a/Content.Server/Kitchen/EntitySystems/MicrowaveSystem.cs b/Content.Server/Kitchen/EntitySystems/MicrowaveSystem.cs index 212383c463a..f9e1ae22416 100644 --- a/Content.Server/Kitchen/EntitySystems/MicrowaveSystem.cs +++ b/Content.Server/Kitchen/EntitySystems/MicrowaveSystem.cs @@ -76,10 +76,12 @@ public override void Initialize() SubscribeLocalEvent(OnPowerChanged); SubscribeLocalEvent(OnAnchorChanged); SubscribeLocalEvent(OnSuicide); + SubscribeLocalEvent(OnRefreshParts); + SubscribeLocalEvent(OnUpgradeExamine); SubscribeLocalEvent(OnSignalReceived); - SubscribeLocalEvent((u, c, m) => Wzhzhzh(u, c, m.Session.AttachedEntity)); + SubscribeLocalEvent((u, c, m) => Wzhzhzh(u, c, m.Actor)); SubscribeLocalEvent(OnEjectMessage); SubscribeLocalEvent(OnEjectIndex); SubscribeLocalEvent(OnSelectTime); @@ -271,6 +273,9 @@ private void OnSolutionChange(Entity ent, ref SolutionContai private void OnContentUpdate(EntityUid uid, MicrowaveComponent component, ContainerModifiedMessage args) // For some reason ContainerModifiedMessage just can't be used at all with Entity. TODO: replace with Entity syntax once that's possible { + if (component.Storage != args.Container) + return; + UpdateUserInterfaceState(uid, component); } @@ -342,6 +347,17 @@ private void OnAnchorChanged(EntityUid uid, MicrowaveComponent component, ref An _container.EmptyContainer(component.Storage); } + private void OnRefreshParts(Entity ent, ref RefreshPartsEvent args) + { + var cookRating = args.PartRatings[ent.Comp.MachinePartCookTimeMultiplier]; + ent.Comp.CookTimeMultiplier = MathF.Pow(ent.Comp.CookTimeScalingConstant, cookRating - 1); + } + + private void OnUpgradeExamine(Entity ent, ref UpgradeExamineEvent args) + { + args.AddPercentageUpgrade("microwave-component-upgrade-cook-time", ent.Comp.CookTimeMultiplier); + } + private void OnSignalReceived(Entity ent, ref SignalReceivedEvent args) { if (args.Port != ent.Comp.OnPort) @@ -355,11 +371,7 @@ private void OnSignalReceived(Entity ent, ref SignalReceived public void UpdateUserInterfaceState(EntityUid uid, MicrowaveComponent component) { - var ui = _userInterface.GetUiOrNull(uid, MicrowaveUiKey.Key); - if (ui == null) - return; - - _userInterface.SetUiState(ui, new MicrowaveUpdateUserInterfaceState( + _userInterface.SetUiState(uid, MicrowaveUiKey.Key, new MicrowaveUpdateUserInterfaceState( GetNetEntityArray(component.Storage.ContainedEntities.ToArray()), HasComp(uid), component.CurrentCookTimeButtonIndex, diff --git a/Content.Server/Kitchen/EntitySystems/ReagentGrinderSystem.cs b/Content.Server/Kitchen/EntitySystems/ReagentGrinderSystem.cs index e8ee4539860..93a15f319d9 100644 --- a/Content.Server/Kitchen/EntitySystems/ReagentGrinderSystem.cs +++ b/Content.Server/Kitchen/EntitySystems/ReagentGrinderSystem.cs @@ -1,4 +1,5 @@ using Content.Server.Chemistry.Containers.EntitySystems; +using Content.Server.Construction; using Content.Server.Kitchen.Components; using Content.Server.Power.Components; using Content.Server.Power.EntitySystems; @@ -48,6 +49,8 @@ public override void Initialize() SubscribeLocalEvent((uid, _, _) => UpdateUiState(uid)); SubscribeLocalEvent((EntityUid uid, ReagentGrinderComponent _, ref PowerChangedEvent _) => UpdateUiState(uid)); SubscribeLocalEvent(OnInteractUsing); + SubscribeLocalEvent(OnRefreshParts); + SubscribeLocalEvent(OnUpgradeExamine); SubscribeLocalEvent(OnContainerModified); SubscribeLocalEvent(OnContainerModified); @@ -127,7 +130,7 @@ public override void Update(float frameTime) _solutionContainersSystem.TryAddSolution(containerSoln.Value, solution); } - _userInterfaceSystem.TrySendUiMessage(uid, ReagentGrinderUiKey.Key, + _userInterfaceSystem.ServerSendUiMessage(uid, ReagentGrinderUiKey.Key, new ReagentGrinderWorkCompleteMessage()); UpdateUiState(uid); @@ -197,6 +200,24 @@ private void OnInteractUsing(Entity entity, ref Interac args.Handled = true; } + /// + /// Gotta be efficient, you know? you're saving a whole extra second here and everything. + /// + private void OnRefreshParts(Entity entity, ref RefreshPartsEvent args) + { + var ratingWorkTime = args.PartRatings[entity.Comp.MachinePartWorkTime]; + var ratingStorage = args.PartRatings[entity.Comp.MachinePartStorageMax]; + + entity.Comp.WorkTimeMultiplier = MathF.Pow(entity.Comp.PartRatingWorkTimerMulitplier, ratingWorkTime - 1); + entity.Comp.StorageMaxEntities = entity.Comp.BaseStorageMaxEntities + (int) (entity.Comp.StoragePerPartRating * (ratingStorage - 1)); + } + + private void OnUpgradeExamine(Entity entity, ref UpgradeExamineEvent args) + { + args.AddPercentageUpgrade("reagent-grinder-component-upgrade-work-time", entity.Comp.WorkTimeMultiplier); + args.AddNumberUpgrade("reagent-grinder-component-upgrade-storage", entity.Comp.StorageMaxEntities - entity.Comp.BaseStorageMaxEntities); + } + private void UpdateUiState(EntityUid uid) { ReagentGrinderComponent? grinderComp = null; @@ -228,7 +249,7 @@ private void UpdateUiState(EntityUid uid) GetNetEntityArray(inputContainer.ContainedEntities.ToArray()), containerSolution?.Contents.ToArray() ); - _userInterfaceSystem.TrySetUiState(uid, ReagentGrinderUiKey.Key, state); + _userInterfaceSystem.SetUiState(uid, ReagentGrinderUiKey.Key, state); } private void OnStartMessage(Entity entity, ref ReagentGrinderStartMessage message) @@ -305,7 +326,7 @@ private void DoWork(EntityUid uid, ReagentGrinderComponent reagentGrinder, Grind reagentGrinder.AudioStream = _audioSystem.PlayPvs(sound, uid, AudioParams.Default.WithPitchScale(1 / reagentGrinder.WorkTimeMultiplier)).Value.Entity; //slightly higher pitched - _userInterfaceSystem.TrySendUiMessage(uid, ReagentGrinderUiKey.Key, + _userInterfaceSystem.ServerSendUiMessage(uid, ReagentGrinderUiKey.Key, new ReagentGrinderWorkStartedMessage(program)); } diff --git a/Content.Server/Kitchen/EntitySystems/SharpSystem.cs b/Content.Server/Kitchen/EntitySystems/SharpSystem.cs index 35adf6f4b57..5375ae64b9e 100644 --- a/Content.Server/Kitchen/EntitySystems/SharpSystem.cs +++ b/Content.Server/Kitchen/EntitySystems/SharpSystem.cs @@ -3,11 +3,9 @@ using Content.Server.Nutrition.EntitySystems; using Content.Shared.Body.Components; using Content.Shared.Administration.Logs; -using Content.Shared.Body.Components; using Content.Shared.Database; using Content.Shared.Interaction; using Content.Shared.Nutrition.Components; -using Content.Server.Nutrition.EntitySystems; using Content.Shared.Popups; using Content.Shared.Storage; using Content.Shared.Verbs; diff --git a/Content.Server/Labels/Label/Components/HandLabelerComponent.cs b/Content.Server/Labels/Label/Components/HandLabelerComponent.cs deleted file mode 100644 index 6c96cada9e7..00000000000 --- a/Content.Server/Labels/Label/Components/HandLabelerComponent.cs +++ /dev/null @@ -1,19 +0,0 @@ -using Content.Shared.Whitelist; - -namespace Content.Server.Labels.Components -{ - [RegisterComponent] - public sealed partial class HandLabelerComponent : Component - { - [ViewVariables(VVAccess.ReadWrite)] - [DataField("assignedLabel")] - public string AssignedLabel { get; set; } = string.Empty; - - [ViewVariables(VVAccess.ReadWrite)] - [DataField("maxLabelChars")] - public int MaxLabelChars { get; set; } = 50; - - [DataField("whitelist")] - public EntityWhitelist Whitelist = new(); - } -} diff --git a/Content.Server/Labels/Label/HandLabelerSystem.cs b/Content.Server/Labels/Label/HandLabelerSystem.cs index dec7d697590..d52bf260460 100644 --- a/Content.Server/Labels/Label/HandLabelerSystem.cs +++ b/Content.Server/Labels/Label/HandLabelerSystem.cs @@ -1,123 +1,8 @@ -using Content.Server.Labels.Components; -using Content.Server.UserInterface; -using Content.Server.Popups; -using Content.Shared.Administration.Logs; -using Content.Shared.Database; -using Content.Shared.Interaction; -using Content.Shared.Labels; -using Content.Shared.Tag; -using Content.Shared.Verbs; -using JetBrains.Annotations; -using Robust.Server.GameObjects; -using Robust.Shared.Player; +using Content.Shared.Labels.EntitySystems; -namespace Content.Server.Labels -{ - /// - /// A hand labeler system that lets an object apply labels to objects with the . - /// - [UsedImplicitly] - public sealed class HandLabelerSystem : EntitySystem - { - [Dependency] private readonly UserInterfaceSystem _userInterfaceSystem = default!; - [Dependency] private readonly PopupSystem _popupSystem = default!; - [Dependency] private readonly LabelSystem _labelSystem = default!; - [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!; - [Dependency] private readonly TagSystem _tagSystem = default!; - - [ValidatePrototypeId] - private const string PreventTag = "PreventLabel"; - - public override void Initialize() - { - base.Initialize(); - - SubscribeLocalEvent(AfterInteractOn); - SubscribeLocalEvent>(OnUtilityVerb); - // Bound UI subscriptions - SubscribeLocalEvent(OnHandLabelerLabelChanged); - } - - private void OnUtilityVerb(EntityUid uid, HandLabelerComponent handLabeler, GetVerbsEvent args) - { - if (args.Target is not { Valid: true } target || !handLabeler.Whitelist.IsValid(target) || !args.CanAccess - || _tagSystem.HasTag(target, PreventTag)) // DeltaV - Prevent labels on certain items - return; - - string labelerText = handLabeler.AssignedLabel == string.Empty ? Loc.GetString("hand-labeler-remove-label-text") : Loc.GetString("hand-labeler-add-label-text"); - - var verb = new UtilityVerb() - { - Act = () => - { - AddLabelTo(uid, handLabeler, target, out var result); - if (result != null) - _popupSystem.PopupEntity(result, args.User, args.User); - }, - Text = labelerText - }; - - args.Verbs.Add(verb); - } - - private void AfterInteractOn(EntityUid uid, HandLabelerComponent handLabeler, AfterInteractEvent args) - { - if (args.Target is not {Valid: true} target || !handLabeler.Whitelist.IsValid(target) || !args.CanReach - || _tagSystem.HasTag(target, PreventTag)) // DeltaV - Prevent labels on certain items - return; - - AddLabelTo(uid, handLabeler, target, out string? result); - if (result == null) - return; - _popupSystem.PopupEntity(result, args.User, args.User); +namespace Content.Server.Labels.Label; - // Log labeling - _adminLogger.Add(LogType.Action, LogImpact.Low, - $"{ToPrettyString(args.User):user} labeled {ToPrettyString(target):target} with {ToPrettyString(uid):labeler}"); - } - - private void AddLabelTo(EntityUid uid, HandLabelerComponent? handLabeler, EntityUid target, out string? result) - { - if (!Resolve(uid, ref handLabeler)) - { - result = null; - return; - } - - if (handLabeler.AssignedLabel == string.Empty) - { - _labelSystem.Label(target, null); - result = Loc.GetString("hand-labeler-successfully-removed"); - return; - } - - _labelSystem.Label(target, handLabeler.AssignedLabel); - result = Loc.GetString("hand-labeler-successfully-applied"); - } - - private void OnHandLabelerLabelChanged(EntityUid uid, HandLabelerComponent handLabeler, HandLabelerLabelChangedMessage args) - { - if (args.Session.AttachedEntity is not {Valid: true} player) - return; - - var label = args.Label.Trim(); - handLabeler.AssignedLabel = label.Substring(0, Math.Min(handLabeler.MaxLabelChars, label.Length)); - DirtyUI(uid, handLabeler); - - // Log label change - _adminLogger.Add(LogType.Action, LogImpact.Low, - $"{ToPrettyString(player):user} set {ToPrettyString(uid):labeler} to apply label \"{handLabeler.AssignedLabel}\""); - - } - - private void DirtyUI(EntityUid uid, - HandLabelerComponent? handLabeler = null) - { - if (!Resolve(uid, ref handLabeler)) - return; +public sealed class HandLabelerSystem : SharedHandLabelerSystem +{ - _userInterfaceSystem.TrySetUiState(uid, HandLabelerUiKey.Key, - new HandLabelerBoundUserInterfaceState(handLabeler.AssignedLabel)); - } - } } diff --git a/Content.Server/Labels/Label/LabelSystem.cs b/Content.Server/Labels/Label/LabelSystem.cs index 52184fb58f2..9d235b488b8 100644 --- a/Content.Server/Labels/Label/LabelSystem.cs +++ b/Content.Server/Labels/Label/LabelSystem.cs @@ -54,7 +54,7 @@ private void OnLabelCompMapInit(EntityUid uid, LabelComponent component, MapInit /// intended label text (null to remove) /// label component for resolve /// metadata component for resolve - public void Label(EntityUid uid, string? text, MetaDataComponent? metadata = null, LabelComponent? label = null) + public override void Label(EntityUid uid, string? text, MetaDataComponent? metadata = null, LabelComponent? label = null) { if (!Resolve(uid, ref metadata)) return; diff --git a/Content.Server/Language/Commands/AdminLanguageCommand.cs b/Content.Server/Language/Commands/AdminLanguageCommand.cs index f02d9c7f401..2e7a0b193a1 100644 --- a/Content.Server/Language/Commands/AdminLanguageCommand.cs +++ b/Content.Server/Language/Commands/AdminLanguageCommand.cs @@ -3,6 +3,7 @@ using Content.Shared.Language; using Content.Shared.Language.Components; using Content.Shared.Language.Systems; +using Robust.Shared.Prototypes; using Robust.Shared.Toolshed; using Robust.Shared.Toolshed.Syntax; using Robust.Shared.Toolshed.TypeParsers; @@ -62,13 +63,13 @@ public EntityUid RemoveLanguage( } [CommandImplementation("lsspoken")] - public IEnumerable ListSpoken([PipedArgument] EntityUid input) + public IEnumerable> ListSpoken([PipedArgument] EntityUid input) { return Languages.GetSpokenLanguages(input); } [CommandImplementation("lsunderstood")] - public IEnumerable ListUnderstood([PipedArgument] EntityUid input) + public IEnumerable> ListUnderstood([PipedArgument] EntityUid input) { return Languages.GetUnderstoodLanguages(input); } diff --git a/Content.Server/Language/Commands/AdminTranslatorCommand.cs b/Content.Server/Language/Commands/AdminTranslatorCommand.cs index 8a7984bc36b..fc8ee02e386 100644 --- a/Content.Server/Language/Commands/AdminTranslatorCommand.cs +++ b/Content.Server/Language/Commands/AdminTranslatorCommand.cs @@ -6,6 +6,7 @@ using Content.Shared.Language.Components.Translators; using Content.Shared.Language.Systems; using Robust.Server.Containers; +using Robust.Shared.Prototypes; using Robust.Shared.Toolshed; using Robust.Shared.Toolshed.Syntax; using Robust.Shared.Toolshed.TypeParsers; @@ -107,7 +108,7 @@ public EntityUid RemoveRequiredLanguage( } [CommandImplementation("lsspoken")] - public IEnumerable ListSpoken([PipedArgument] EntityUid input) + public IEnumerable> ListSpoken([PipedArgument] EntityUid input) { if (!TryGetTranslatorComp(input, out var translator)) return []; @@ -115,7 +116,7 @@ public IEnumerable ListSpoken([PipedArgument] EntityUid input) } [CommandImplementation("lsunderstood")] - public IEnumerable ListUnderstood([PipedArgument] EntityUid input) + public IEnumerable> ListUnderstood([PipedArgument] EntityUid input) { if (!TryGetTranslatorComp(input, out var translator)) return []; @@ -123,7 +124,7 @@ public IEnumerable ListUnderstood([PipedArgument] EntityUid input) } [CommandImplementation("lsrequired")] - public IEnumerable ListRequired([PipedArgument] EntityUid input) + public IEnumerable> ListRequired([PipedArgument] EntityUid input) { if (!TryGetTranslatorComp(input, out var translator)) return []; diff --git a/Content.Server/Language/LanguageKnowledgeComponent.cs b/Content.Server/Language/LanguageKnowledgeComponent.cs new file mode 100644 index 00000000000..da8376f7625 --- /dev/null +++ b/Content.Server/Language/LanguageKnowledgeComponent.cs @@ -0,0 +1,23 @@ +using Content.Shared.Language; +using Robust.Shared.Prototypes; + +namespace Content.Server.Language; + +/// +/// Stores data about entities' intrinsic language knowledge. +/// +[RegisterComponent] +public sealed partial class LanguageKnowledgeComponent : Component +{ + /// + /// List of languages this entity can speak without any external tools. + /// + [DataField("speaks", required: true)] + public List> SpokenLanguages = new(); + + /// + /// List of languages this entity can understand without any external tools. + /// + [DataField("understands", required: true)] + public List> UnderstoodLanguages = new(); +} diff --git a/Content.Server/Language/LanguageSystem.Networking.cs b/Content.Server/Language/LanguageSystem.Networking.cs deleted file mode 100644 index 3f36e83e054..00000000000 --- a/Content.Server/Language/LanguageSystem.Networking.cs +++ /dev/null @@ -1,79 +0,0 @@ -using Content.Server.Language.Events; -using Content.Server.Mind; -using Content.Shared.Language; -using Content.Shared.Language.Components; -using Content.Shared.Language.Events; -using Content.Shared.Mind; -using Content.Shared.Mind.Components; -using Robust.Shared.Player; -using LanguagesUpdateEvent = Content.Shared.Language.Events.LanguagesUpdateEvent; - -namespace Content.Server.Language; - -public sealed partial class LanguageSystem -{ - [Dependency] private readonly MindSystem _mind = default!; - - - public void InitializeNet() - { - SubscribeNetworkEvent(OnClientSetLanguage); - SubscribeNetworkEvent((_, session) => SendLanguageStateToClient(session.SenderSession)); - - SubscribeLocalEvent((uid, comp, _) => SendLanguageStateToClient(uid, comp)); - - // Refresh the client's state when its mind hops to a different entity - SubscribeLocalEvent((uid, _, _) => SendLanguageStateToClient(uid)); - SubscribeLocalEvent((_, _, args) => - { - if (args.Mind.Comp.Session != null) - SendLanguageStateToClient(args.Mind.Comp.Session); - }); - } - - - private void OnClientSetLanguage(LanguagesSetMessage message, EntitySessionEventArgs args) - { - if (args.SenderSession.AttachedEntity is not { Valid: true } uid) - return; - - var language = GetLanguagePrototype(message.CurrentLanguage); - if (language == null || !CanSpeak(uid, language.ID)) - return; - - SetLanguage(uid, language.ID); - } - - private void SendLanguageStateToClient(EntityUid uid, LanguageSpeakerComponent? comp = null) - { - // Try to find a mind inside the entity and notify its session - if (!_mind.TryGetMind(uid, out _, out var mindComp) || mindComp.Session == null) - return; - - SendLanguageStateToClient(uid, mindComp.Session, comp); - } - - private void SendLanguageStateToClient(ICommonSession session, LanguageSpeakerComponent? comp = null) - { - // Try to find an entity associated with the session and resolve the languages from it - if (session.AttachedEntity is not { Valid: true } entity) - return; - - SendLanguageStateToClient(entity, session, comp); - } - - // TODO this is really stupid and can be avoided if we just make everything shared... - private void SendLanguageStateToClient(EntityUid uid, ICommonSession session, LanguageSpeakerComponent? component = null) - { - var isUniversal = HasComp(uid); - if (!isUniversal) - Resolve(uid, ref component, logMissing: false); - - // I really don't want to call 3 getter methods here, so we'll just have this slightly hardcoded solution - var message = isUniversal || component == null - ? new LanguagesUpdatedMessage(UniversalPrototype, [UniversalPrototype], [UniversalPrototype]) - : new LanguagesUpdatedMessage(component.CurrentLanguage, component.SpokenLanguages, component.UnderstoodLanguages); - - RaiseNetworkEvent(message, session); - } -} diff --git a/Content.Server/Language/LanguageSystem.cs b/Content.Server/Language/LanguageSystem.cs index bf9c7d3b275..3ef4caa84d4 100644 --- a/Content.Server/Language/LanguageSystem.cs +++ b/Content.Server/Language/LanguageSystem.cs @@ -1,11 +1,10 @@ using System.Linq; -using Content.Server.Language.Events; using Content.Shared.Language; using Content.Shared.Language.Components; using Content.Shared.Language.Events; using Content.Shared.Language.Systems; -using LanguagesUpdateEvent = Content.Shared.Language.Events.LanguagesUpdateEvent; -using UniversalLanguageSpeakerComponent = Content.Shared.Language.Components.UniversalLanguageSpeakerComponent; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; namespace Content.Server.Language; @@ -14,45 +13,85 @@ public sealed partial class LanguageSystem : SharedLanguageSystem public override void Initialize() { base.Initialize(); - InitializeNet(); - SubscribeLocalEvent(OnInitLanguageSpeaker); + SubscribeLocalEvent(OnInitLanguageSpeaker); + SubscribeLocalEvent(OnGetLanguageState); + SubscribeLocalEvent(OnDetermineUniversalLanguages); + SubscribeNetworkEvent(OnClientSetLanguage); + + SubscribeLocalEvent((uid, _, _) => UpdateEntityLanguages(uid)); + SubscribeLocalEvent((uid, _, _) => UpdateEntityLanguages(uid)); } + #region event handling - #region public api + private void OnInitLanguageSpeaker(Entity ent, ref MapInitEvent args) + { + if (string.IsNullOrEmpty(ent.Comp.CurrentLanguage)) + ent.Comp.CurrentLanguage = ent.Comp.SpokenLanguages.FirstOrDefault(UniversalPrototype); + + UpdateEntityLanguages(ent!); + } - public bool CanUnderstand(EntityUid listener, string language, LanguageSpeakerComponent? component = null) + private void OnGetLanguageState(Entity entity, ref ComponentGetState args) { - if (language == UniversalPrototype || HasComp(listener)) - return true; + args.State = new LanguageSpeakerComponent.State + { + CurrentLanguage = entity.Comp.CurrentLanguage, + SpokenLanguages = entity.Comp.SpokenLanguages, + UnderstoodLanguages = entity.Comp.UnderstoodLanguages + }; + } - if (!Resolve(listener, ref component, logMissing: false)) - return false; + private void OnDetermineUniversalLanguages(Entity entity, ref DetermineEntityLanguagesEvent ev) + { + // We only add it as a spoken language; CanUnderstand checks for ULSC itself. + if (entity.Comp.Enabled) + ev.SpokenLanguages.Add(UniversalPrototype); + } + + + private void OnClientSetLanguage(LanguagesSetMessage message, EntitySessionEventArgs args) + { + if (args.SenderSession.AttachedEntity is not { Valid: true } uid) + return; - return component.UnderstoodLanguages.Contains(language); + var language = GetLanguagePrototype(message.CurrentLanguage); + if (language == null || !CanSpeak(uid, language.ID)) + return; + + SetLanguage(uid, language.ID); } - public bool CanSpeak(EntityUid speaker, string language, LanguageSpeakerComponent? component = null) + #endregion + + #region public api + + public bool CanUnderstand(Entity ent, ProtoId language) { - if (HasComp(speaker)) + if (language == UniversalPrototype || TryComp(ent, out var uni) && uni.Enabled) return true; - if (!Resolve(speaker, ref component, logMissing: false)) + return Resolve(ent, ref ent.Comp, logMissing: false) && ent.Comp.UnderstoodLanguages.Contains(language); + } + + public bool CanSpeak(Entity ent, ProtoId language) + { + if (!Resolve(ent, ref ent.Comp, logMissing: false)) return false; - return component.SpokenLanguages.Contains(language); + return ent.Comp.SpokenLanguages.Contains(language); } /// /// Returns the current language of the given entity, assumes Universal if it's not a language speaker. /// - public LanguagePrototype GetLanguage(EntityUid speaker, LanguageSpeakerComponent? component = null) + public LanguagePrototype GetLanguage(Entity ent) { - if (HasComp(speaker) || !Resolve(speaker, ref component, logMissing: false)) - return Universal; // Serves both as a fallback and uhhh something (TODO: fix this comment) - - if (string.IsNullOrEmpty(component.CurrentLanguage) || !_prototype.TryIndex(component.CurrentLanguage, out var proto)) + if (!Resolve(ent, ref ent.Comp, logMissing: false) + || string.IsNullOrEmpty(ent.Comp.CurrentLanguage) + || !_prototype.TryIndex(ent.Comp.CurrentLanguage, out var proto) + ) return Universal; return proto; @@ -61,43 +100,31 @@ public LanguagePrototype GetLanguage(EntityUid speaker, LanguageSpeakerComponent /// /// Returns the list of languages this entity can speak. /// - /// Typically, checking is sufficient. - public List GetSpokenLanguages(EntityUid uid) + /// This simply returns the value of . + public List> GetSpokenLanguages(EntityUid uid) { - if (HasComp(uid)) - return [UniversalPrototype]; - - if (TryComp(uid, out var component)) - return component.SpokenLanguages; - - return []; + return TryComp(uid, out var component) ? component.SpokenLanguages : []; } /// /// Returns the list of languages this entity can understand. - /// - /// Typically, checking is sufficient. - public List GetUnderstoodLanguages(EntityUid uid) + /// This simply returns the value of . + public List> GetUnderstoodLanguages(EntityUid uid) { - if (HasComp(uid)) - return [UniversalPrototype]; // This one is tricky because... well, they understand all of them, not just one. - - if (TryComp(uid, out var component)) - return component.UnderstoodLanguages; - - return []; + return TryComp(uid, out var component) ? component.UnderstoodLanguages : []; } - public void SetLanguage(EntityUid speaker, string language, LanguageSpeakerComponent? component = null) + public void SetLanguage(Entity ent, ProtoId language) { - if (!CanSpeak(speaker, language) || (HasComp(speaker) && language != UniversalPrototype)) + if (!CanSpeak(ent, language) + || !Resolve(ent, ref ent.Comp) + || ent.Comp.CurrentLanguage == language) return; - if (!Resolve(speaker, ref component) || component.CurrentLanguage == language) - return; - - component.CurrentLanguage = language; - RaiseLocalEvent(speaker, new LanguagesUpdateEvent(), true); + ent.Comp.CurrentLanguage = language; + RaiseLocalEvent(ent, new LanguagesUpdateEvent(), true); + Dirty(ent); } /// @@ -105,14 +132,12 @@ public void SetLanguage(EntityUid speaker, string language, LanguageSpeakerCompo /// public void AddLanguage( EntityUid uid, - string language, + ProtoId language, bool addSpoken = true, - bool addUnderstood = true, - LanguageKnowledgeComponent? knowledge = null, - LanguageSpeakerComponent? speaker = null) + bool addUnderstood = true) { - if (knowledge == null) - knowledge = EnsureComp(uid); + EnsureComp(uid, out var knowledge); + EnsureComp(uid, out var speaker); if (addSpoken && !knowledge.SpokenLanguages.Contains(language)) knowledge.SpokenLanguages.Add(language); @@ -120,30 +145,29 @@ public void AddLanguage( if (addUnderstood && !knowledge.UnderstoodLanguages.Contains(language)) knowledge.UnderstoodLanguages.Add(language); - UpdateEntityLanguages(uid, speaker); + UpdateEntityLanguages((uid, speaker)); } /// /// Removes a language from the respective lists of intrinsically known languages of the given entity. /// public void RemoveLanguage( - EntityUid uid, - string language, + Entity ent, + ProtoId language, bool removeSpoken = true, - bool removeUnderstood = true, - LanguageKnowledgeComponent? knowledge = null, - LanguageSpeakerComponent? speaker = null) + bool removeUnderstood = true) { - if (knowledge == null) - knowledge = EnsureComp(uid); + if (!Resolve(ent, ref ent.Comp, false)) + return; if (removeSpoken) - knowledge.SpokenLanguages.Remove(language); + ent.Comp.SpokenLanguages.Remove(language); if (removeUnderstood) - knowledge.UnderstoodLanguages.Remove(language); + ent.Comp.UnderstoodLanguages.Remove(language); - UpdateEntityLanguages(uid, speaker); + // We don't ensure that the entity has a speaker comp. If it doesn't... Well, woe be the caller of this method. + UpdateEntityLanguages(ent.Owner); } /// @@ -151,15 +175,16 @@ public void RemoveLanguage( /// If not, sets it to the first entry of its SpokenLanguages list, or universal if it's empty. /// /// True if the current language was modified, false otherwise. - public bool EnsureValidLanguage(EntityUid entity, LanguageSpeakerComponent? comp = null) + public bool EnsureValidLanguage(Entity ent) { - if (!Resolve(entity, ref comp)) + if (!Resolve(ent, ref ent.Comp, false)) return false; - if (!comp.SpokenLanguages.Contains(comp.CurrentLanguage)) + if (!ent.Comp.SpokenLanguages.Contains(ent.Comp.CurrentLanguage)) { - comp.CurrentLanguage = comp.SpokenLanguages.FirstOrDefault(UniversalPrototype); - RaiseLocalEvent(entity, new LanguagesUpdateEvent()); + ent.Comp.CurrentLanguage = ent.Comp.SpokenLanguages.FirstOrDefault(UniversalPrototype); + RaiseLocalEvent(ent, new LanguagesUpdateEvent()); + Dirty(ent); return true; } @@ -169,14 +194,14 @@ public bool EnsureValidLanguage(EntityUid entity, LanguageSpeakerComponent? comp /// /// Immediately refreshes the cached lists of spoken and understood languages for the given entity. /// - public void UpdateEntityLanguages(EntityUid entity, LanguageSpeakerComponent? languages = null) + public void UpdateEntityLanguages(Entity ent) { - if (!Resolve(entity, ref languages)) + if (!Resolve(ent, ref ent.Comp, false)) return; var ev = new DetermineEntityLanguagesEvent(); // We add the intrinsically known languages first so other systems can manipulate them easily - if (TryComp(entity, out var knowledge)) + if (TryComp(ent, out var knowledge)) { foreach (var spoken in knowledge.SpokenLanguages) ev.SpokenLanguages.Add(spoken); @@ -185,28 +210,19 @@ public void UpdateEntityLanguages(EntityUid entity, LanguageSpeakerComponent? la ev.UnderstoodLanguages.Add(understood); } - RaiseLocalEvent(entity, ref ev); - - languages.SpokenLanguages.Clear(); - languages.UnderstoodLanguages.Clear(); - - languages.SpokenLanguages.AddRange(ev.SpokenLanguages); - languages.UnderstoodLanguages.AddRange(ev.UnderstoodLanguages); + RaiseLocalEvent(ent, ref ev); - if (!EnsureValidLanguage(entity)) - RaiseLocalEvent(entity, new LanguagesUpdateEvent()); - } + ent.Comp.SpokenLanguages.Clear(); + ent.Comp.UnderstoodLanguages.Clear(); - #endregion + ent.Comp.SpokenLanguages.AddRange(ev.SpokenLanguages); + ent.Comp.UnderstoodLanguages.AddRange(ev.UnderstoodLanguages); - #region event handling - - private void OnInitLanguageSpeaker(EntityUid uid, LanguageSpeakerComponent component, ComponentInit args) - { - if (string.IsNullOrEmpty(component.CurrentLanguage)) - component.CurrentLanguage = component.SpokenLanguages.FirstOrDefault(UniversalPrototype); + // If EnsureValidLanguage returns true, it also raises a LanguagesUpdateEvent, so we try to avoid raising it twice in that case. + if (!EnsureValidLanguage(ent)) + RaiseLocalEvent(ent, new LanguagesUpdateEvent()); - UpdateEntityLanguages(uid, component); + Dirty(ent); } #endregion diff --git a/Content.Server/Language/LanguagesUpdateEvent.cs b/Content.Server/Language/LanguagesUpdateEvent.cs deleted file mode 100644 index 88ea09916bb..00000000000 --- a/Content.Server/Language/LanguagesUpdateEvent.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace Content.Server.Language.Events; - -/// -/// Raised on an entity when its list of languages changes. -/// -public sealed class LanguagesUpdateEvent : EntityEventArgs -{ -} diff --git a/Content.Server/Language/TranslatorImplantSystem.cs b/Content.Server/Language/TranslatorImplantSystem.cs index 4d58144481d..439389477c5 100644 --- a/Content.Server/Language/TranslatorImplantSystem.cs +++ b/Content.Server/Language/TranslatorImplantSystem.cs @@ -1,6 +1,7 @@ using Content.Shared.Implants.Components; using Content.Shared.Language; using Content.Shared.Language.Components; +using Content.Shared.Language.Events; using Robust.Shared.Containers; namespace Content.Server.Language; diff --git a/Content.Server/Language/TranslatorSystem.cs b/Content.Server/Language/TranslatorSystem.cs index a893993e884..5cb5c8cd2e9 100644 --- a/Content.Server/Language/TranslatorSystem.cs +++ b/Content.Server/Language/TranslatorSystem.cs @@ -8,7 +8,9 @@ using Content.Shared.Language.Systems; using Content.Shared.PowerCell; using Content.Shared.Language.Components.Translators; +using Content.Shared.Language.Events; using Robust.Shared.Containers; +using Robust.Shared.Prototypes; using Robust.Shared.Timing; namespace Content.Server.Language; @@ -85,8 +87,8 @@ private void OnTranslatorParentChanged(EntityUid translator, HandheldTranslatorC // If that is not the case, then OnProxyDetermineLanguages will remove this translator from HoldsTranslatorComponent.Translators. Timer.Spawn(0, () => { - if (Exists(args.OldParent) && TryComp(args.OldParent, out var speaker)) - _language.UpdateEntityLanguages(args.OldParent.Value, speaker); + if (Exists(args.OldParent) && HasComp(args.OldParent)) + _language.UpdateEntityLanguages(args.OldParent.Value); }); } @@ -108,11 +110,11 @@ private void OnTranslatorToggle(EntityUid translator, HandheldTranslatorComponen { // The first new spoken language added by this translator, or null var firstNewLanguage = translatorComp.SpokenLanguages.FirstOrDefault(it => !languageComp.SpokenLanguages.Contains(it)); - _language.UpdateEntityLanguages(holder, languageComp); + _language.UpdateEntityLanguages(holder); // Update the current language of the entity if necessary if (isEnabled && translatorComp.SetLanguageOnInteract && firstNewLanguage is {}) - _language.SetLanguage(holder, firstNewLanguage, languageComp); + _language.SetLanguage((holder, languageComp), firstNewLanguage); } OnAppearanceChange(translator, translatorComp); @@ -131,8 +133,8 @@ private void OnPowerCellSlotEmpty(EntityUid translator, HandheldTranslatorCompon _powerCell.SetPowerCellDrawEnabled(translator, false); OnAppearanceChange(translator, component); - if (_containers.TryGetContainingContainer(translator, out var holderCont) && TryComp(holderCont.Owner, out var languageComp)) - _language.UpdateEntityLanguages(holderCont.Owner, languageComp); + if (_containers.TryGetContainingContainer(translator, out var holderCont) && HasComp(holderCont.Owner)) + _language.UpdateEntityLanguages(holderCont.Owner); } private void CopyLanguages(BaseTranslatorComponent from, DetermineEntityLanguagesEvent to, LanguageKnowledgeComponent knowledge) @@ -152,7 +154,7 @@ private void CopyLanguages(BaseTranslatorComponent from, DetermineEntityLanguage /// /// Checks whether any OR all required languages are provided. Used for utility purposes. /// - public static bool CheckLanguagesMatch(ICollection required, ICollection provided, bool requireAll) + public static bool CheckLanguagesMatch(ICollection> required, ICollection> provided, bool requireAll) { if (required.Count == 0) return true; diff --git a/Content.Server/Language/UniversalLanguageSpeakerComponent.cs b/Content.Server/Language/UniversalLanguageSpeakerComponent.cs new file mode 100644 index 00000000000..ee43450335a --- /dev/null +++ b/Content.Server/Language/UniversalLanguageSpeakerComponent.cs @@ -0,0 +1,12 @@ +namespace Content.Server.Language; + +// +// Signifies that this entity can speak and understand any language. +// Applies to such entities as ghosts. +// +[RegisterComponent] +public sealed partial class UniversalLanguageSpeakerComponent : Component +{ + [DataField] + public bool Enabled = true; +} diff --git a/Content.Server/Lathe/LatheSystem.cs b/Content.Server/Lathe/LatheSystem.cs index 06d1b463ec3..7448a9b84dd 100644 --- a/Content.Server/Lathe/LatheSystem.cs +++ b/Content.Server/Lathe/LatheSystem.cs @@ -8,11 +8,13 @@ using Content.Server.Power.Components; using Content.Server.Power.EntitySystems; using Content.Server.Stack; +using Content.Shared.Atmos; using Content.Shared.UserInterface; using Content.Shared.Database; using Content.Shared.Emag.Components; using Content.Shared.Lathe; using Content.Shared.Materials; +using Content.Shared.ReagentSpeed; using Content.Shared.Research.Components; using Content.Shared.Research.Prototypes; using JetBrains.Annotations; @@ -34,6 +36,7 @@ public sealed class LatheSystem : SharedLatheSystem [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly UserInterfaceSystem _uiSys = default!; [Dependency] private readonly MaterialStorageSystem _materialStorage = default!; + [Dependency] private readonly ReagentSpeedSystem _reagentSpeed = default!; [Dependency] private readonly StackSystem _stack = default!; [Dependency] private readonly TransformSystem _transform = default!; @@ -185,9 +188,11 @@ public bool TryStartProducing(EntityUid uid, LatheComponent? component = null) var recipe = component.Queue.First(); component.Queue.RemoveAt(0); + var time = _reagentSpeed.ApplySpeed(uid, recipe.CompleteTime); + var lathe = EnsureComp(uid); lathe.StartTime = _timing.CurTime; - lathe.ProductionLength = recipe.CompleteTime * component.TimeMultiplier; + lathe.ProductionLength = time * component.TimeMultiplier; component.CurrentRecipe = recipe; var ev = new LatheStartPrintingEvent(recipe); @@ -226,11 +231,10 @@ public void UpdateUserInterfaceState(EntityUid uid, LatheComponent? component = if (!Resolve(uid, ref component)) return; - var ui = _uiSys.GetUi(uid, LatheUiKey.Key); var producing = component.CurrentRecipe ?? component.Queue.FirstOrDefault(); var state = new LatheUpdateState(GetAvailableRecipes(uid, component), component.Queue, producing); - _uiSys.SetUiState(ui, state); + _uiSys.SetUiState(uid, LatheUiKey.Key, state); } private void OnGetRecipes(EntityUid uid, TechnologyDatabaseComponent component, LatheGetRecipesEvent args) @@ -337,10 +341,10 @@ private void OnLatheQueueRecipeMessage(EntityUid uid, LatheComponent component, else break; } - if (count > 0 && args.Session.AttachedEntity != null) + if (count > 0) { _adminLogger.Add(LogType.Action, LogImpact.Low, - $"{ToPrettyString(args.Session.AttachedEntity.Value):player} queued {count} {recipe.Name} at {ToPrettyString(uid):lathe}"); + $"{ToPrettyString(args.Actor):player} queued {count} {recipe.Name} at {ToPrettyString(uid):lathe}"); } } TryStartProducing(uid, component); diff --git a/Content.Server/LifeDrainer/LifeDrainerComponent.cs b/Content.Server/LifeDrainer/LifeDrainerComponent.cs new file mode 100644 index 00000000000..c5d09266c77 --- /dev/null +++ b/Content.Server/LifeDrainer/LifeDrainerComponent.cs @@ -0,0 +1,60 @@ +using Content.Shared.Damage; +using Content.Shared.DoAfter; +using Content.Shared.Whitelist; +using Robust.Shared.Audio; + +namespace Content.Server.LifeDrainer; + +/// +/// Adds a verb to drain life from a crit mob that matches a whitelist. +/// Successfully draining a mob rejuvenates you completely. +/// +[RegisterComponent, Access(typeof(LifeDrainerSystem))] +public sealed partial class LifeDrainerComponent : Component +{ + /// + /// Damage to give to the target when draining is complete + /// + [DataField(required: true)] + public DamageSpecifier Damage = new(); + + /// + /// Mobs have to match this whitelist to be drained. + /// + [DataField] + public EntityWhitelist? Whitelist; + + /// + /// The time that it takes to drain an entity. + /// + [DataField] + public TimeSpan Delay = TimeSpan.FromSeconds(8.35f); + + /// + /// Sound played while draining a mob. + /// + [DataField] + public SoundSpecifier DrainSound = new SoundPathSpecifier("/Audio/DeltaV/Effects/clang2.ogg"); + + /// + /// Sound played after draining is complete. + /// + [DataField] + public SoundSpecifier FinishSound = new SoundPathSpecifier("/Audio/Effects/guardian_inject.ogg"); + + [DataField] + public EntityUid? DrainStream; + + /// + /// A current drain doafter in progress. + /// + [DataField] + public DoAfterId? DoAfter; + + /// + /// What mob is being targeted for draining. + /// When draining stops the AI will try to drain this target again until successful. + /// + [DataField] + public EntityUid? Target; +} diff --git a/Content.Server/LifeDrainer/LifeDrainerSystem.cs b/Content.Server/LifeDrainer/LifeDrainerSystem.cs new file mode 100644 index 00000000000..439a5dcf45f --- /dev/null +++ b/Content.Server/LifeDrainer/LifeDrainerSystem.cs @@ -0,0 +1,143 @@ +using Content.Server.Carrying; +using Content.Server.NPC.Systems; +using Content.Shared.ActionBlocker; +using Content.Shared.Damage; +using Content.Shared.DoAfter; +using Content.Shared.Interaction; +using Content.Shared.Mobs.Systems; +using Content.Shared.Movement.Pulling.Components; +using Content.Shared.Popups; +using Content.Shared.Rejuvenate; +using Content.Shared.Verbs; +using Content.Shared.Whitelist; +using Robust.Shared.Audio.Systems; +using Robust.Shared.Player; +using Robust.Shared.Utility; + +namespace Content.Server.LifeDrainer; + +public sealed class LifeDrainerSystem : EntitySystem +{ + [Dependency] private readonly ActionBlockerSystem _actionBlocker = default!; + [Dependency] private readonly DamageableSystem _damageable = default!; + [Dependency] private readonly EntityWhitelistSystem _whitelist = default!; + [Dependency] private readonly MobStateSystem _mob = default!; + [Dependency] private readonly NpcFactionSystem _faction = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly SharedDoAfterSystem _doAfter = default!; + [Dependency] private readonly SharedInteractionSystem _interaction = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent>(OnGetVerbs); + SubscribeLocalEvent(OnDrain); + } + + private void OnGetVerbs(Entity ent, ref GetVerbsEvent args) + { + var target = args.Target; + if (!args.CanAccess || !args.CanInteract || !CanDrain(ent, target)) + return; + + args.Verbs.Add(new InnateVerb() + { + Act = () => + { + TryDrain(ent, target); + }, + Text = Loc.GetString("verb-life-drain"), + Icon = new SpriteSpecifier.Texture(new ("/Textures/Nyanotrasen/Icons/verbiconfangs.png")), + Priority = 2 + }); + } + + private void OnDrain(Entity ent, ref LifeDrainDoAfterEvent args) + { + var (uid, comp) = ent; + CancelDrain(comp); + if (args.Handled || args.Args.Target is not {} target) + return; + + // attack whoever interrupted the draining + if (args.Cancelled) + { + // someone pulled the psionic away + if (TryComp(target, out var pullable) && pullable.Puller is {} puller) + _faction.AggroEntity(uid, puller); + + // someone pulled me away + if (TryComp(ent, out pullable) && pullable.Puller is {} selfPuller) + _faction.AggroEntity(uid, selfPuller); + + // someone carried the psionic away + if (TryComp(target, out var carried)) + _faction.AggroEntity(uid, carried.Carrier); + + return; + } + + _popup.PopupEntity(Loc.GetString("life-drain-second-end", ("drainer", uid)), target, target, PopupType.LargeCaution); + _popup.PopupEntity(Loc.GetString("life-drain-third-end", ("drainer", uid), ("target", target)), target, Filter.PvsExcept(target), true, PopupType.LargeCaution); + + var rejuv = new RejuvenateEvent(); + RaiseLocalEvent(uid, rejuv); + + _audio.PlayPvs(comp.FinishSound, uid); + + _damageable.TryChangeDamage(target, comp.Damage, true, origin: uid); + } + + public bool CanDrain(Entity ent, EntityUid target) + { + var (uid, comp) = ent; + return !IsDraining(comp) + && uid != target + && (comp.Whitelist is null || _whitelist.IsValid(comp.Whitelist, target)) + && _mob.IsCritical(target); + } + + public bool IsDraining(LifeDrainerComponent comp) + { + return _doAfter.GetStatus(comp.DoAfter) == DoAfterStatus.Running; + } + + public bool TryDrain(Entity ent, EntityUid target) + { + var (uid, comp) = ent; + if (!CanDrain(ent, target) || !_actionBlocker.CanInteract(uid, target) || !_interaction.InRangeUnobstructed(ent.Owner, target, popup: true)) + return false; + + _popup.PopupEntity(Loc.GetString("life-drain-second-start", ("drainer", uid)), target, target, PopupType.LargeCaution); + _popup.PopupEntity(Loc.GetString("life-drain-third-start", ("drainer", uid), ("target", target)), target, Filter.PvsExcept(target), true, PopupType.LargeCaution); + + if (_audio.PlayPvs(comp.DrainSound, target) is {} stream) + comp.DrainStream = stream.Item1; + + var ev = new LifeDrainDoAfterEvent(); + var args = new DoAfterArgs(EntityManager, uid, comp.Delay, ev, target: target, eventTarget: uid) + { + BreakOnTargetMove = true, + BreakOnUserMove = true, + MovementThreshold = 2f, + NeedHand = false + }; + + if (!_doAfter.TryStartDoAfter(args, out var id)) + return false; + + comp.DoAfter = id; + comp.Target = target; + return true; + } + + public void CancelDrain(LifeDrainerComponent comp) + { + comp.DrainStream = _audio.Stop(comp.DrainStream); + _doAfter.Cancel(comp.DoAfter); + comp.DoAfter = null; + comp.Target = null; + } +} diff --git a/Content.Server/Light/Components/EmergencyLightComponent.cs b/Content.Server/Light/Components/EmergencyLightComponent.cs index 20de7f1c03b..b49a8c3868a 100644 --- a/Content.Server/Light/Components/EmergencyLightComponent.cs +++ b/Content.Server/Light/Components/EmergencyLightComponent.cs @@ -14,7 +14,7 @@ public sealed partial class EmergencyLightComponent : SharedEmergencyLightCompon /// /// Is this emergency light forced on for some reason and cannot be disabled through normal means - /// (i.e. delta alert level?) + /// (i.e. blue alert or higher?) /// public bool ForciblyEnabled = false; diff --git a/Content.Server/Light/EntitySystems/EmergencyLightSystem.cs b/Content.Server/Light/EntitySystems/EmergencyLightSystem.cs index 3fa5237948c..f2c4c7dcc59 100644 --- a/Content.Server/Light/EntitySystems/EmergencyLightSystem.cs +++ b/Content.Server/Light/EntitySystems/EmergencyLightSystem.cs @@ -31,9 +31,9 @@ public override void Initialize() SubscribeLocalEvent(OnEmergencyPower); } - private void OnEmergencyPower(EntityUid uid, EmergencyLightComponent component, ref PowerChangedEvent args) + private void OnEmergencyPower(Entity entity, ref PowerChangedEvent args) { - var meta = MetaData(uid); + var meta = MetaData(entity.Owner); // TODO: PowerChangedEvent shouldn't be issued for paused ents but this is the world we live in. if (meta.EntityLifeStage >= EntityLifeStage.Terminating || @@ -42,7 +42,7 @@ private void OnEmergencyPower(EntityUid uid, EmergencyLightComponent component, return; } - UpdateState(uid, component); + UpdateState(entity); } private void OnEmergencyExamine(EntityUid uid, EmergencyLightComponent component, ExaminedEvent args) @@ -111,13 +111,13 @@ private void OnAlertLevelChanged(AlertLevelChangedEvent ev) if (details.ForceEnableEmergencyLights && !light.ForciblyEnabled) { light.ForciblyEnabled = true; - TurnOn(uid, light); + TurnOn((uid, light)); } else if (!details.ForceEnableEmergencyLights && light.ForciblyEnabled) { // Previously forcibly enabled, and we went down an alert level. light.ForciblyEnabled = false; - UpdateState(uid, light); + UpdateState((uid, light)); } } } @@ -135,31 +135,31 @@ public override void Update(float frameTime) var query = EntityQueryEnumerator(); while (query.MoveNext(out var uid, out _, out var emergencyLight, out var battery)) { - Update(uid, emergencyLight, battery, frameTime); + Update((uid, emergencyLight), battery, frameTime); } } - private void Update(EntityUid uid, EmergencyLightComponent component, BatteryComponent battery, float frameTime) + private void Update(Entity entity, BatteryComponent battery, float frameTime) { - if (component.State == EmergencyLightState.On) + if (entity.Comp.State == EmergencyLightState.On) { - if (!_battery.TryUseCharge(uid, component.Wattage * frameTime, battery)) + if (!_battery.TryUseCharge(entity.Owner, entity.Comp.Wattage * frameTime, battery)) { - SetState(uid, component, EmergencyLightState.Empty); - TurnOff(uid, component); + SetState(entity.Owner, entity.Comp, EmergencyLightState.Empty); + TurnOff(entity); } } else { - _battery.SetCharge(uid, battery.CurrentCharge + component.ChargingWattage * frameTime * component.ChargingEfficiency, battery); + _battery.SetCharge(entity.Owner, battery.CurrentCharge + entity.Comp.ChargingWattage * frameTime * entity.Comp.ChargingEfficiency, battery); if (battery.IsFullyCharged) { - if (TryComp(uid, out var receiver)) + if (TryComp(entity.Owner, out var receiver)) { receiver.Load = 1; } - SetState(uid, component, EmergencyLightState.Full); + SetState(entity.Owner, entity.Comp, EmergencyLightState.Full); } } } @@ -167,35 +167,73 @@ private void Update(EntityUid uid, EmergencyLightComponent component, BatteryCom /// /// Updates the light's power drain, battery drain, sprite and actual light state. /// - public void UpdateState(EntityUid uid, EmergencyLightComponent component) + public void UpdateState(Entity entity) { - if (!TryComp(uid, out var receiver)) + if (!TryComp(entity.Owner, out var receiver)) return; - if (receiver.Powered && !component.ForciblyEnabled) + if (!TryComp(_station.GetOwningStation(entity.Owner), out var alerts)) + return; + + if (alerts.AlertLevels == null || !alerts.AlertLevels.Levels.TryGetValue(alerts.CurrentLevel, out var details)) { - receiver.Load = (int) Math.Abs(component.Wattage); - TurnOff(uid, component); - SetState(uid, component, EmergencyLightState.Charging); + TurnOff(entity, Color.Red); // if no alert, default to off red state + return; } - else + + if (receiver.Powered && !entity.Comp.ForciblyEnabled) // Green alert { - TurnOn(uid, component); - SetState(uid, component, EmergencyLightState.On); + receiver.Load = (int) Math.Abs(entity.Comp.Wattage); + TurnOff(entity, details.Color); + SetState(entity.Owner, entity.Comp, EmergencyLightState.Charging); + } + else if (!receiver.Powered) // If internal battery runs out it will end in off red state + { + TurnOn(entity, Color.Red); + SetState(entity.Owner, entity.Comp, EmergencyLightState.On); + } + else // Powered and enabled + { + TurnOn(entity, details.Color); + SetState(entity.Owner, entity.Comp, EmergencyLightState.On); } } - private void TurnOff(EntityUid uid, EmergencyLightComponent component) + private void TurnOff(Entity entity) { - _pointLight.SetEnabled(uid, false); - _appearance.SetData(uid, EmergencyLightVisuals.On, false); - _ambient.SetAmbience(uid, false); + _pointLight.SetEnabled(entity.Owner, false); + _appearance.SetData(entity.Owner, EmergencyLightVisuals.On, false); + _ambient.SetAmbience(entity.Owner, false); } - private void TurnOn(EntityUid uid, EmergencyLightComponent component) + /// + /// Turn off emergency light and set color. + /// + private void TurnOff(Entity entity, Color color) + { + _pointLight.SetEnabled(entity.Owner, false); + _pointLight.SetColor(entity.Owner, color); + _appearance.SetData(entity.Owner, EmergencyLightVisuals.Color, color); + _appearance.SetData(entity.Owner, EmergencyLightVisuals.On, false); + _ambient.SetAmbience(entity.Owner, false); + } + + private void TurnOn(Entity entity) + { + _pointLight.SetEnabled(entity.Owner, true); + _appearance.SetData(entity.Owner, EmergencyLightVisuals.On, true); + _ambient.SetAmbience(entity.Owner, true); + } + + /// + /// Turn on emergency light and set color. + /// + private void TurnOn(Entity entity, Color color) { - _pointLight.SetEnabled(uid, true); - _appearance.SetData(uid, EmergencyLightVisuals.On, true); - _ambient.SetAmbience(uid, true); + _pointLight.SetEnabled(entity.Owner, true); + _pointLight.SetColor(entity.Owner, color); + _appearance.SetData(entity.Owner, EmergencyLightVisuals.Color, color); + _appearance.SetData(entity.Owner, EmergencyLightVisuals.On, true); + _ambient.SetAmbience(entity.Owner, true); } } diff --git a/Content.Server/Light/EntitySystems/UnpoweredFlashlightSystem.cs b/Content.Server/Light/EntitySystems/UnpoweredFlashlightSystem.cs deleted file mode 100644 index a1ed71ee4cd..00000000000 --- a/Content.Server/Light/EntitySystems/UnpoweredFlashlightSystem.cs +++ /dev/null @@ -1,113 +0,0 @@ -using Content.Server.Light.Events; -using Content.Shared.Actions; -using Content.Shared.Decals; -using Content.Shared.Emag.Systems; -using Content.Shared.Light; -using Content.Shared.Light.Components; -using Content.Shared.Mind.Components; -using Content.Shared.Toggleable; -using Content.Shared.Verbs; -using Robust.Shared.Audio; -using Robust.Shared.Audio.Systems; -using Robust.Shared.Prototypes; -using Robust.Shared.Random; -using Robust.Shared.Utility; - -namespace Content.Server.Light.EntitySystems -{ - public sealed class UnpoweredFlashlightSystem : EntitySystem - { - [Dependency] private readonly IPrototypeManager _prototypeManager = default!; - [Dependency] private readonly IRobustRandom _random = default!; - [Dependency] private readonly SharedActionsSystem _actionsSystem = default!; - [Dependency] private readonly ActionContainerSystem _actionContainer = default!; - [Dependency] private readonly SharedAppearanceSystem _appearance = default!; - [Dependency] private readonly SharedAudioSystem _audioSystem = default!; - [Dependency] private readonly SharedPointLightSystem _light = default!; - - public override void Initialize() - { - base.Initialize(); - - SubscribeLocalEvent>(AddToggleLightVerbs); - SubscribeLocalEvent(OnGetActions); - SubscribeLocalEvent(OnToggleAction); - SubscribeLocalEvent(OnMindAdded); - SubscribeLocalEvent(OnGotEmagged); - SubscribeLocalEvent(OnMapInit); - } - - private void OnMapInit(EntityUid uid, UnpoweredFlashlightComponent component, MapInitEvent args) - { - _actionContainer.EnsureAction(uid, ref component.ToggleActionEntity, component.ToggleAction); - Dirty(uid, component); - } - - private void OnToggleAction(EntityUid uid, UnpoweredFlashlightComponent component, ToggleActionEvent args) - { - if (args.Handled) - return; - - ToggleLight(uid, component); - - args.Handled = true; - } - - private void OnGetActions(EntityUid uid, UnpoweredFlashlightComponent component, GetItemActionsEvent args) - { - args.AddAction(ref component.ToggleActionEntity, component.ToggleAction); - } - - private void AddToggleLightVerbs(EntityUid uid, UnpoweredFlashlightComponent component, GetVerbsEvent args) - { - if (!args.CanAccess || !args.CanInteract) - return; - - ActivationVerb verb = new() - { - Text = Loc.GetString("toggle-flashlight-verb-get-data-text"), - Icon = new SpriteSpecifier.Texture(new ("/Textures/Interface/VerbIcons/light.svg.192dpi.png")), - Act = () => ToggleLight(uid, component), - Priority = -1 // For things like PDA's, Open-UI and other verbs that should be higher priority. - }; - - args.Verbs.Add(verb); - } - - private void OnMindAdded(EntityUid uid, UnpoweredFlashlightComponent component, MindAddedMessage args) - { - _actionsSystem.AddAction(uid, ref component.ToggleActionEntity, component.ToggleAction); - } - - private void OnGotEmagged(EntityUid uid, UnpoweredFlashlightComponent component, ref GotEmaggedEvent args) - { - if (!_light.TryGetLight(uid, out var light)) - return; - - if (_prototypeManager.TryIndex(component.EmaggedColorsPrototype, out var possibleColors)) - { - var pick = _random.Pick(possibleColors.Colors.Values); - _light.SetColor(uid, pick, light); - } - - args.Repeatable = true; - args.Handled = true; - } - - public void ToggleLight(EntityUid uid, UnpoweredFlashlightComponent flashlight) - { - if (!_light.TryGetLight(uid, out var light)) - return; - - flashlight.LightOn = !flashlight.LightOn; - _light.SetEnabled(uid, flashlight.LightOn, light); - - _appearance.SetData(uid, UnpoweredFlashlightVisuals.LightOn, flashlight.LightOn); - - _audioSystem.PlayPvs(flashlight.ToggleSound, uid); - - RaiseLocalEvent(uid, new LightToggleEvent(flashlight.LightOn), true); - _actionsSystem.SetToggled(flashlight.ToggleActionEntity, flashlight.LightOn); - } - } -} diff --git a/Content.Server/Light/Events/LightToggleEvent.cs b/Content.Server/Light/Events/LightToggleEvent.cs deleted file mode 100644 index c7e82ce7542..00000000000 --- a/Content.Server/Light/Events/LightToggleEvent.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace Content.Server.Light.Events -{ - public sealed class LightToggleEvent : EntityEventArgs - { - public bool IsOn; - - public LightToggleEvent(bool isOn) - { - IsOn = isOn; - } - } -} diff --git a/Content.Server/Lock/EntitySystems/ActivatableUIRequiresLockSystem.cs b/Content.Server/Lock/EntitySystems/ActivatableUIRequiresLockSystem.cs index dfe398ebafa..04f8e2eb54c 100644 --- a/Content.Server/Lock/EntitySystems/ActivatableUIRequiresLockSystem.cs +++ b/Content.Server/Lock/EntitySystems/ActivatableUIRequiresLockSystem.cs @@ -3,6 +3,7 @@ using Content.Shared.UserInterface; using Content.Shared.Lock; using Content.Server.UserInterface; +using ActivatableUISystem = Content.Shared.UserInterface.ActivatableUISystem; namespace Content.Server.Lock.EntitySystems; public sealed class ActivatableUIRequiresLockSystem : EntitySystem diff --git a/Content.Server/Magic/Components/SpellbookComponent.cs b/Content.Server/Magic/Components/SpellbookComponent.cs deleted file mode 100644 index ebc3c880436..00000000000 --- a/Content.Server/Magic/Components/SpellbookComponent.cs +++ /dev/null @@ -1,35 +0,0 @@ -using Robust.Shared.Prototypes; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Dictionary; - -namespace Content.Server.Magic.Components; - -/// -/// Spellbooks for having an entity learn spells as long as they've read the book and it's in their hand. -/// -[RegisterComponent] -public sealed partial class SpellbookComponent : Component -{ - /// - /// List of spells that this book has. This is a combination of the WorldSpells, EntitySpells, and InstantSpells. - /// - [ViewVariables] - public readonly List Spells = new(); - - /// - /// The three fields below is just used for initialization. - /// - [DataField("spells", customTypeSerializer: typeof(PrototypeIdDictionarySerializer))] - [ViewVariables(VVAccess.ReadWrite)] - public Dictionary SpellActions = new(); - - [DataField("learnTime")] - [ViewVariables(VVAccess.ReadWrite)] - public float LearnTime = .75f; - - /// - /// If true, the spell action stays even after the book is removed - /// - [DataField("learnPermanently")] - [ViewVariables(VVAccess.ReadWrite)] - public bool LearnPermanently; -} diff --git a/Content.Server/Magic/MagicSystem.cs b/Content.Server/Magic/MagicSystem.cs index 18602c3de8b..c25aada3a07 100644 --- a/Content.Server/Magic/MagicSystem.cs +++ b/Content.Server/Magic/MagicSystem.cs @@ -1,409 +1,23 @@ -using System.Numerics; -using Content.Server.Body.Components; -using Content.Server.Body.Systems; using Content.Server.Chat.Systems; -using Content.Server.Doors.Systems; -using Content.Server.Magic.Components; -using Content.Server.Weapons.Ranged.Systems; -using Content.Shared.Actions; -using Content.Shared.Body.Components; using Content.Shared.Chat; -using Content.Shared.Coordinates.Helpers; -using Content.Shared.DoAfter; -using Content.Shared.Doors.Components; -using Content.Shared.Doors.Systems; -using Content.Shared.Interaction.Events; using Content.Shared.Magic; using Content.Shared.Magic.Events; -using Content.Shared.Maps; -using Content.Shared.Physics; -using Content.Shared.Storage; -using Robust.Server.GameObjects; -using Robust.Shared.Audio; -using Robust.Shared.Audio.Systems; -using Robust.Shared.Map; -using Robust.Shared.Map.Components; -using Robust.Shared.Random; -using Robust.Shared.Serialization.Manager; -using Robust.Shared.Spawners; namespace Content.Server.Magic; -/// -/// Handles learning and using spells (actions) -/// -public sealed class MagicSystem : EntitySystem +public sealed class MagicSystem : SharedMagicSystem { - [Dependency] private readonly ISerializationManager _seriMan = default!; - [Dependency] private readonly IComponentFactory _compFact = default!; - [Dependency] private readonly IMapManager _mapManager = default!; - [Dependency] private readonly IRobustRandom _random = default!; - [Dependency] private readonly BodySystem _bodySystem = default!; - [Dependency] private readonly EntityLookupSystem _lookup = default!; - [Dependency] private readonly SharedDoorSystem _doorSystem = default!; - [Dependency] private readonly SharedActionsSystem _actionsSystem = default!; - [Dependency] private readonly SharedDoAfterSystem _doAfter = default!; - [Dependency] private readonly GunSystem _gunSystem = default!; - [Dependency] private readonly PhysicsSystem _physics = default!; - [Dependency] private readonly SharedTransformSystem _transformSystem = default!; - [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly ChatSystem _chat = default!; - [Dependency] private readonly ActionContainerSystem _actionContainer = default!; public override void Initialize() { base.Initialize(); - SubscribeLocalEvent(OnInit); - SubscribeLocalEvent(OnUse); - SubscribeLocalEvent(OnDoAfter); - - SubscribeLocalEvent(OnInstantSpawn); - SubscribeLocalEvent(OnTeleportSpell); - SubscribeLocalEvent(OnKnockSpell); - SubscribeLocalEvent(OnSmiteSpell); - SubscribeLocalEvent(OnWorldSpawn); - SubscribeLocalEvent(OnProjectileSpell); - SubscribeLocalEvent(OnChangeComponentsSpell); - } - - private void OnDoAfter(EntityUid uid, SpellbookComponent component, DoAfterEvent args) - { - if (args.Handled || args.Cancelled) - return; - - args.Handled = true; - if (!component.LearnPermanently) - { - _actionsSystem.GrantActions(args.Args.User, component.Spells, uid); - return; - } - - foreach (var (id, charges) in component.SpellActions) - { - // TOOD store spells entity ids on some sort of innate magic user component or something like that. - EntityUid? actionId = null; - if (_actionsSystem.AddAction(args.Args.User, ref actionId, id)) - _actionsSystem.SetCharges(actionId, charges < 0 ? null : charges); - } - - component.SpellActions.Clear(); - } - - private void OnInit(EntityUid uid, SpellbookComponent component, MapInitEvent args) - { - if (component.LearnPermanently) - return; - - foreach (var (id, charges) in component.SpellActions) - { - var spell = _actionContainer.AddAction(uid, id); - if (spell == null) - continue; - - _actionsSystem.SetCharges(spell, charges < 0 ? null : charges); - component.Spells.Add(spell.Value); - } - } - - private void OnUse(EntityUid uid, SpellbookComponent component, UseInHandEvent args) - { - if (args.Handled) - return; - - AttemptLearn(uid, component, args); - - args.Handled = true; - } - - private void AttemptLearn(EntityUid uid, SpellbookComponent component, UseInHandEvent args) - { - var doAfterEventArgs = new DoAfterArgs(EntityManager, args.User, component.LearnTime, new SpellbookDoAfterEvent(), uid, target: uid) - { - BreakOnTargetMove = true, - BreakOnUserMove = true, - BreakOnDamage = true, - NeedHand = true //What, are you going to read with your eyes only?? - }; - - _doAfter.TryStartDoAfter(doAfterEventArgs); - } - - #region Spells - - /// - /// Handles the instant action (i.e. on the caster) attempting to spawn an entity. - /// - private void OnInstantSpawn(InstantSpawnSpellEvent args) - { - if (args.Handled) - return; - - var transform = Transform(args.Performer); - - foreach (var position in GetSpawnPositions(transform, args.Pos)) - { - var ent = Spawn(args.Prototype, position.SnapToGrid(EntityManager, _mapManager)); - - if (args.PreventCollideWithCaster) - { - var comp = EnsureComp(ent); - comp.Uid = args.Performer; - } - } - - Speak(args); - args.Handled = true; - } - - private void OnProjectileSpell(ProjectileSpellEvent ev) - { - if (ev.Handled) - return; - - ev.Handled = true; - Speak(ev); - - var xform = Transform(ev.Performer); - var userVelocity = _physics.GetMapLinearVelocity(ev.Performer); - - foreach (var pos in GetSpawnPositions(xform, ev.Pos)) - { - // If applicable, this ensures the projectile is parented to grid on spawn, instead of the map. - var mapPos = pos.ToMap(EntityManager, _transformSystem); - var spawnCoords = _mapManager.TryFindGridAt(mapPos, out var gridUid, out _) - ? pos.WithEntityId(gridUid, EntityManager) - : new(_mapManager.GetMapEntityId(mapPos.MapId), mapPos.Position); - - var ent = Spawn(ev.Prototype, spawnCoords); - var direction = ev.Target.ToMapPos(EntityManager, _transformSystem) - - spawnCoords.ToMapPos(EntityManager, _transformSystem); - _gunSystem.ShootProjectile(ent, direction, userVelocity, ev.Performer, ev.Performer); - } - } - - private void OnChangeComponentsSpell(ChangeComponentsSpellEvent ev) - { - if (ev.Handled) - return; - ev.Handled = true; - Speak(ev); - - foreach (var toRemove in ev.ToRemove) - { - if (_compFact.TryGetRegistration(toRemove, out var registration)) - RemComp(ev.Target, registration.Type); - } - - foreach (var (name, data) in ev.ToAdd) - { - if (HasComp(ev.Target, data.Component.GetType())) - continue; - - var component = (Component) _compFact.GetComponent(name); - component.Owner = ev.Target; - var temp = (object) component; - _seriMan.CopyTo(data.Component, ref temp); - EntityManager.AddComponent(ev.Target, (Component) temp!); - } - } - - private List GetSpawnPositions(TransformComponent casterXform, MagicSpawnData data) - { - switch (data) - { - case TargetCasterPos: - return new List(1) {casterXform.Coordinates}; - case TargetInFront: - { - // This is shit but you get the idea. - var directionPos = casterXform.Coordinates.Offset(casterXform.LocalRotation.ToWorldVec().Normalized()); - - if (!TryComp(casterXform.GridUid, out var mapGrid)) - return new List(); - - if (!directionPos.TryGetTileRef(out var tileReference, EntityManager, _mapManager)) - return new List(); - - var tileIndex = tileReference.Value.GridIndices; - var coords = mapGrid.GridTileToLocal(tileIndex); - EntityCoordinates coordsPlus; - EntityCoordinates coordsMinus; - - var dir = casterXform.LocalRotation.GetCardinalDir(); - switch (dir) - { - case Direction.North: - case Direction.South: - { - coordsPlus = mapGrid.GridTileToLocal(tileIndex + (1, 0)); - coordsMinus = mapGrid.GridTileToLocal(tileIndex + (-1, 0)); - return new List(3) - { - coords, - coordsPlus, - coordsMinus, - }; - } - case Direction.East: - case Direction.West: - { - coordsPlus = mapGrid.GridTileToLocal(tileIndex + (0, 1)); - coordsMinus = mapGrid.GridTileToLocal(tileIndex + (0, -1)); - return new List(3) - { - coords, - coordsPlus, - coordsMinus, - }; - } - } - - return new List(); - } - default: - throw new ArgumentOutOfRangeException(); - } - } - - /// - /// Teleports the user to the clicked location - /// - /// - private void OnTeleportSpell(TeleportSpellEvent args) - { - if (args.Handled) - return; - - var transform = Transform(args.Performer); - - if (transform.MapID != args.Target.GetMapId(EntityManager)) return; - - _transformSystem.SetCoordinates(args.Performer, args.Target); - transform.AttachToGridOrMap(); - _audio.PlayPvs(args.BlinkSound, args.Performer, AudioParams.Default.WithVolume(args.BlinkVolume)); - Speak(args); - args.Handled = true; + SubscribeLocalEvent(OnSpellSpoken); } - /// - /// Opens all doors within range - /// - /// - private void OnKnockSpell(KnockSpellEvent args) + private void OnSpellSpoken(ref SpeakSpellEvent args) { - if (args.Handled) - return; - - args.Handled = true; - Speak(args); - - //Get the position of the player - var transform = Transform(args.Performer); - var coords = transform.Coordinates; - - _audio.PlayPvs(args.KnockSound, args.Performer, AudioParams.Default.WithVolume(args.KnockVolume)); - - //Look for doors and don't open them if they're already open. - foreach (var entity in _lookup.GetEntitiesInRange(coords, args.Range)) - { - if (TryComp(entity, out var bolts)) - _doorSystem.SetBoltsDown((entity, bolts), false); - - if (TryComp(entity, out var doorComp) && doorComp.State is not DoorState.Open) - _doorSystem.StartOpening(entity); - } - } - - private void OnSmiteSpell(SmiteSpellEvent ev) - { - if (ev.Handled) - return; - - ev.Handled = true; - Speak(ev); - - var direction = Transform(ev.Target).MapPosition.Position - Transform(ev.Performer).MapPosition.Position; - var impulseVector = direction * 10000; - - _physics.ApplyLinearImpulse(ev.Target, impulseVector); - - if (!TryComp(ev.Target, out var body)) - return; - - var ents = _bodySystem.GibBody(ev.Target, true, body); - - if (!ev.DeleteNonBrainParts) - return; - - foreach (var part in ents) - { - // just leaves a brain and clothes - if (HasComp(part) && !HasComp(part)) - { - QueueDel(part); - } - } - } - - /// - /// Spawns entity prototypes from a list within range of click. - /// - /// - /// It will offset mobs after the first mob based on the OffsetVector2 property supplied. - /// - /// The Spawn Spell Event args. - private void OnWorldSpawn(WorldSpawnSpellEvent args) - { - if (args.Handled) - return; - - var targetMapCoords = args.Target; - - SpawnSpellHelper(args.Contents, targetMapCoords, args.Lifetime, args.Offset); - Speak(args); - args.Handled = true; - } - - /// - /// Loops through a supplied list of entity prototypes and spawns them - /// - /// - /// If an offset of 0, 0 is supplied then the entities will all spawn on the same tile. - /// Any other offset will spawn entities starting from the source Map Coordinates and will increment the supplied - /// offset - /// - /// The list of Entities to spawn in - /// Map Coordinates where the entities will spawn - /// Check to see if the entities should self delete - /// A Vector2 offset that the entities will spawn in - private void SpawnSpellHelper(List entityEntries, EntityCoordinates entityCoords, float? lifetime, Vector2 offsetVector2) - { - var getProtos = EntitySpawnCollection.GetSpawns(entityEntries, _random); - - var offsetCoords = entityCoords; - foreach (var proto in getProtos) - { - // TODO: Share this code with instant because they're both doing similar things for positioning. - var entity = Spawn(proto, offsetCoords); - offsetCoords = offsetCoords.Offset(offsetVector2); - - if (lifetime != null) - { - var comp = EnsureComp(entity); - comp.Lifetime = lifetime.Value; - } - } - } - - #endregion - - private void Speak(BaseActionEvent args) - { - if (args is not ISpeakSpell speak || string.IsNullOrWhiteSpace(speak.Speech)) - return; - - _chat.TrySendInGameICMessage(args.Performer, Loc.GetString(speak.Speech), - InGameICChatType.Speak, false); + _chat.TrySendInGameICMessage(args.Performer, Loc.GetString(args.Speech), InGameICChatType.Speak, false); } } diff --git a/Content.Server/MagicMirror/MagicMirrorSystem.cs b/Content.Server/MagicMirror/MagicMirrorSystem.cs index aef6e11d71c..6cbfc55cac0 100644 --- a/Content.Server/MagicMirror/MagicMirrorSystem.cs +++ b/Content.Server/MagicMirror/MagicMirrorSystem.cs @@ -16,13 +16,12 @@ namespace Content.Server.MagicMirror; /// /// Allows humanoids to change their appearance mid-round. /// -public sealed class MagicMirrorSystem : EntitySystem +public sealed class MagicMirrorSystem : SharedMagicMirrorSystem { [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly DoAfterSystem _doAfterSystem = default!; [Dependency] private readonly MarkingManager _markings = default!; [Dependency] private readonly HumanoidAppearanceSystem _humanoid = default!; - [Dependency] private readonly SharedInteractionSystem _interaction = default!; [Dependency] private readonly UserInterfaceSystem _uiSystem = default!; public override void Initialize() @@ -32,7 +31,7 @@ public override void Initialize() Subs.BuiEvents(MagicMirrorUiKey.Key, subs => { - subs.Event(OnUIClosed); + subs.Event(OnUiClosed); subs.Event(OnMagicMirrorSelect); subs.Event(OnTryMagicMirrorChangeColor); subs.Event(OnTryMagicMirrorAddSlot); @@ -45,16 +44,6 @@ public override void Initialize() SubscribeLocalEvent(OnChangeColorDoAfter); SubscribeLocalEvent(OnRemoveSlotDoAfter); SubscribeLocalEvent(OnAddSlotDoAfter); - - SubscribeLocalEvent(OnMirrorRangeCheck); - } - - private void OnMirrorRangeCheck(EntityUid uid, MagicMirrorComponent component, ref BoundUserInterfaceCheckRangeEvent args) - { - if (!Exists(component.Target) || !_interaction.InRangeUnobstructed(uid, component.Target.Value)) - { - args.Result = BoundUserInterfaceRangeResult.Fail; - } } private void OnMagicMirrorInteract(Entity mirror, ref AfterInteractEvent args) @@ -62,10 +51,7 @@ private void OnMagicMirrorInteract(Entity mirror, ref Afte if (!args.CanReach || args.Target == null) return; - if (!TryComp(args.User, out var actor)) - return; - - if (!_uiSystem.TryOpen(mirror.Owner, MagicMirrorUiKey.Key, actor.PlayerSession)) + if (!_uiSystem.TryOpenUi(mirror.Owner, MagicMirrorUiKey.Key, args.User)) return; UpdateInterface(mirror.Owner, args.Target.Value, mirror.Comp); @@ -79,7 +65,7 @@ private void OnOpenUIAttempt(EntityUid uid, MagicMirrorComponent mirror, Activat private void OnMagicMirrorSelect(EntityUid uid, MagicMirrorComponent component, MagicMirrorSelectMessage message) { - if (component.Target is not { } target || message.Session.AttachedEntity is not { } user) + if (component.Target is not { } target) return; _doAfterSystem.Cancel(component.DoAfter); @@ -92,7 +78,7 @@ private void OnMagicMirrorSelect(EntityUid uid, MagicMirrorComponent component, Marking = message.Marking, }; - _doAfterSystem.TryStartDoAfter(new DoAfterArgs(EntityManager, user, component.SelectSlotTime, doAfter, uid, target: target, used: uid) + _doAfterSystem.TryStartDoAfter(new DoAfterArgs(EntityManager, message.Actor, component.SelectSlotTime, doAfter, uid, target: target, used: uid) { DistanceThreshold = SharedInteractionSystem.InteractionRange, BreakOnTargetMove = true, @@ -136,7 +122,7 @@ private void OnSelectSlotDoAfter(EntityUid uid, MagicMirrorComponent component, private void OnTryMagicMirrorChangeColor(EntityUid uid, MagicMirrorComponent component, MagicMirrorChangeColorMessage message) { - if (component.Target is not { } target || message.Session.AttachedEntity is not { } user) + if (component.Target is not { } target) return; _doAfterSystem.Cancel(component.DoAfter); @@ -149,7 +135,7 @@ private void OnTryMagicMirrorChangeColor(EntityUid uid, MagicMirrorComponent com Colors = message.Colors, }; - _doAfterSystem.TryStartDoAfter(new DoAfterArgs(EntityManager, user, component.ChangeSlotTime, doAfter, uid, target: target, used: uid) + _doAfterSystem.TryStartDoAfter(new DoAfterArgs(EntityManager, message.Actor, component.ChangeSlotTime, doAfter, uid, target: target, used: uid) { BreakOnTargetMove = true, BreakOnDamage = true, @@ -191,7 +177,7 @@ private void OnChangeColorDoAfter(EntityUid uid, MagicMirrorComponent component, private void OnTryMagicMirrorRemoveSlot(EntityUid uid, MagicMirrorComponent component, MagicMirrorRemoveSlotMessage message) { - if (component.Target is not { } target || message.Session.AttachedEntity is not { } user) + if (component.Target is not { } target) return; _doAfterSystem.Cancel(component.DoAfter); @@ -203,7 +189,7 @@ private void OnTryMagicMirrorRemoveSlot(EntityUid uid, MagicMirrorComponent comp Slot = message.Slot, }; - _doAfterSystem.TryStartDoAfter(new DoAfterArgs(EntityManager, user, component.RemoveSlotTime, doAfter, uid, target: target, used: uid) + _doAfterSystem.TryStartDoAfter(new DoAfterArgs(EntityManager, message.Actor, component.RemoveSlotTime, doAfter, uid, target: target, used: uid) { DistanceThreshold = SharedInteractionSystem.InteractionRange, BreakOnTargetMove = true, @@ -250,9 +236,6 @@ private void OnTryMagicMirrorAddSlot(EntityUid uid, MagicMirrorComponent compone if (component.Target == null) return; - if (message.Session.AttachedEntity == null) - return; - _doAfterSystem.Cancel(component.DoAfter); component.DoAfter = null; @@ -261,7 +244,7 @@ private void OnTryMagicMirrorAddSlot(EntityUid uid, MagicMirrorComponent compone Category = message.Category, }; - _doAfterSystem.TryStartDoAfter(new DoAfterArgs(EntityManager, message.Session.AttachedEntity.Value, component.AddSlotTime, doAfter, uid, target: component.Target.Value, used: uid) + _doAfterSystem.TryStartDoAfter(new DoAfterArgs(EntityManager, message.Actor, component.AddSlotTime, doAfter, uid, target: component.Target.Value, used: uid) { BreakOnTargetMove = true, BreakOnDamage = true, @@ -324,12 +307,15 @@ private void UpdateInterface(EntityUid mirrorUid, EntityUid targetUid, MagicMirr facialHair, humanoid.MarkingSet.PointsLeft(MarkingCategories.FacialHair) + facialHair.Count); + // TODO: Component states component.Target = targetUid; - _uiSystem.TrySetUiState(mirrorUid, MagicMirrorUiKey.Key, state); + _uiSystem.SetUiState(mirrorUid, MagicMirrorUiKey.Key, state); + Dirty(mirrorUid, component); } - private void OnUIClosed(Entity ent, ref BoundUIClosedEvent args) + private void OnUiClosed(Entity ent, ref BoundUIClosedEvent args) { ent.Comp.Target = null; + Dirty(ent); } } diff --git a/Content.Server/Mail/Components/DelayedItemComponent.cs b/Content.Server/Mail/Components/DelayedItemComponent.cs new file mode 100644 index 00000000000..f73aef85b06 --- /dev/null +++ b/Content.Server/Mail/Components/DelayedItemComponent.cs @@ -0,0 +1,15 @@ +namespace Content.Server.Mail.Components; + +/// +/// A placeholder for another entity, spawned when dropped or placed in someone's hands. +/// Useful for storing instant effect entities, e.g. smoke, in the mail. +/// +[RegisterComponent] +public sealed partial class DelayedItemComponent : Component +{ + /// + /// The entity to replace this when opened or dropped. + /// + [DataField] + public string Item = "None"; +} diff --git a/Content.Server/Mail/Components/MailComponent.cs b/Content.Server/Mail/Components/MailComponent.cs new file mode 100644 index 00000000000..af0bdaa87ff --- /dev/null +++ b/Content.Server/Mail/Components/MailComponent.cs @@ -0,0 +1,111 @@ +using System.Threading; +using Robust.Shared.Audio; +using Content.Shared.Storage; +using Content.Shared.Mail; + +namespace Content.Server.Mail.Components; + +[RegisterComponent] +public sealed partial class MailComponent : SharedMailComponent +{ + [DataField] + public string Recipient = "None"; + + [DataField] + public string RecipientJob = "None"; + + /// + /// Why do we not use LockComponent? + /// Because this can't be locked again, + /// and we have special conditions for unlocking, + /// and we don't want to add a verb. + /// + [DataField] + public bool IsLocked = true; + + /// + /// Is this parcel profitable to deliver for the station? + /// + /// + /// The station won't receive any award on delivery if this is false. + /// This is useful for broken fragile packages and packages that were + /// not delivered in time. + /// + [DataField] + public bool IsProfitable = true; + + /// + /// Is this package considered fragile? + /// + /// + /// This can be set to true in the YAML files for a mail delivery to + /// always be Fragile, despite its contents. + /// + [DataField] + public bool IsFragile = false; + + /// + /// Is this package considered priority mail? + /// + /// + /// There will be a timer set for its successful delivery. The + /// station's bank account will be penalized if it is not delivered on + /// time.
+ ///
+ /// This is set to false on successful delivery.
+ ///
+ /// This can be set to true in the YAML files for a mail delivery to always be Priority. + ///
+ [DataField] + public bool IsPriority = false; + + /// + /// Whether this parcel is large. + /// + [DataField] + public bool IsLarge = false; + + /// + /// What will be packaged when the mail is spawned. + /// + [DataField] + public List Contents = new(); + + /// + /// The amount that cargo will be awarded for delivering this mail. + /// + [DataField] + public int Bounty = 750; + + /// + /// Penalty if the mail is destroyed. + /// + [DataField] + public int Penalty = -250; + + /// + /// The sound that's played when the mail's lock is broken. + /// + [DataField] + public SoundSpecifier PenaltySound = new SoundPathSpecifier("/Audio/Machines/Nuke/angry_beep.ogg"); + + /// + /// The sound that's played when the mail's opened. + /// + [DataField] + public SoundSpecifier OpenSound = new SoundPathSpecifier("/Audio/Effects/packetrip.ogg"); + + /// + /// The sound that's played when the mail's lock has been emagged. + /// + [DataField] + public SoundSpecifier EmagSound = new SoundCollectionSpecifier("sparks"); + + /// + /// Whether this component is enabled. + /// Removed when it becomes trash. + /// + public bool IsEnabled = true; + + public CancellationTokenSource? PriorityCancelToken; +} diff --git a/Content.Server/Mail/Components/MailReceiverComponent.cs b/Content.Server/Mail/Components/MailReceiverComponent.cs new file mode 100644 index 00000000000..281a27ea79e --- /dev/null +++ b/Content.Server/Mail/Components/MailReceiverComponent.cs @@ -0,0 +1,4 @@ +namespace Content.Server.Mail.Components; + +[RegisterComponent] +public sealed partial class MailReceiverComponent : Component {} diff --git a/Content.Server/Mail/Components/MailTeleporterComponent.cs b/Content.Server/Mail/Components/MailTeleporterComponent.cs new file mode 100644 index 00000000000..81f58bc7a59 --- /dev/null +++ b/Content.Server/Mail/Components/MailTeleporterComponent.cs @@ -0,0 +1,118 @@ +using Robust.Shared.Audio; + +namespace Content.Server.Mail.Components; + +/// +/// This is for the mail teleporter. +/// Random mail will be teleported to this every few minutes. +/// +[RegisterComponent] +public sealed partial class MailTeleporterComponent : Component +{ + // Not starting accumulator at 0 so mail carriers have some deliveries to make shortly after roundstart. + [DataField] + public float Accumulator = 285f; + + [DataField] + public TimeSpan TeleportInterval = TimeSpan.FromMinutes(5); + + /// + /// The sound that's played when new mail arrives. + /// + [DataField] + public SoundSpecifier TeleportSound = new SoundPathSpecifier("/Audio/Effects/teleport_arrival.ogg"); + + /// + /// The MailDeliveryPoolPrototype that's used to select what mail this + /// teleporter can deliver. + /// + [DataField] + public string MailPool = "RandomDeltaVMailDeliveryPool"; + + /// + /// How many mail candidates do we need per actual delivery sent when + /// the mail goes out? The number of candidates is divided by this number + /// to determine how many deliveries will be teleported in. + /// It does not determine unique recipients. That is random. + /// + [DataField] + public int CandidatesPerDelivery = 8; + + [DataField] + public int MinimumDeliveriesPerTeleport = 1; + + /// + /// Do not teleport any more mail in, if there are at least this many + /// undelivered parcels. + /// + /// + /// Currently this works by checking how many MailComponent entities + /// are sitting on the teleporter's tile.

+ /// + /// It should be noted that if the number of actual deliveries to be + /// made based on the number of candidates divided by candidates per + /// delivery exceeds this number, the teleporter will spawn more mail + /// than this number.

+ /// + /// This is just a simple check to see if anyone's been picking up the + /// mail lately to prevent entity bloat for the sake of performance. + ///
+ [DataField] + public int MaximumUndeliveredParcels = 5; + + /// + /// Any item that breaks or is destroyed in less than this amount of + /// damage is one of the types of items considered fragile. + /// + [DataField] + public int FragileDamageThreshold = 10; + + /// + /// What's the bonus for delivering a fragile package intact? + /// + [DataField] + public int FragileBonus = 100; + + /// + /// What's the malus for failing to deliver a fragile package? + /// + [DataField] + public int FragileMalus = -100; + + /// + /// What's the chance for any one delivery to be marked as priority mail? + /// + [DataField] + public float PriorityChance = 0.1f; + + /// + /// How long until a priority delivery is considered as having failed + /// if not delivered? + /// + [DataField] + public TimeSpan PriorityDuration = TimeSpan.FromMinutes(5); + + /// + /// What's the bonus for delivering a priority package on time? + /// + [DataField] + public int PriorityBonus = 250; + + /// + /// What's the malus for failing to deliver a priority package? + /// + [DataField] + public int PriorityMalus = -250; + + /// + /// What's the bonus for delivering a large package intact? + /// + [DataField] + public int LargeBonus = 1500; + + /// + /// What's the malus for failing to deliver a large package? + /// + [DataField] + public int LargeMalus = -500; +} diff --git a/Content.Server/Mail/Components/StationMailRouterComponent.cs b/Content.Server/Mail/Components/StationMailRouterComponent.cs new file mode 100644 index 00000000000..6f6df1e10bb --- /dev/null +++ b/Content.Server/Mail/Components/StationMailRouterComponent.cs @@ -0,0 +1,9 @@ +namespace Content.Server.Mail.Components; + +/// +/// Designates a station as a place for sending and receiving mail. +/// +[RegisterComponent] +public sealed partial class StationMailRouterComponent : Component +{ +} diff --git a/Content.Server/Mail/MailCommands.cs b/Content.Server/Mail/MailCommands.cs new file mode 100644 index 00000000000..390de93fb3a --- /dev/null +++ b/Content.Server/Mail/MailCommands.cs @@ -0,0 +1,142 @@ +using System.Linq; +using Robust.Shared.Console; +using Robust.Shared.Containers; +using Robust.Shared.Prototypes; +using Content.Shared.Administration; +using Content.Server.Administration; +using Content.Server.Mail.Components; +using Content.Server.Mail.Systems; + +namespace Content.Server.Mail; + +[AdminCommand(AdminFlags.Fun)] +public sealed class MailToCommand : IConsoleCommand +{ + public string Command => "mailto"; + public string Description => Loc.GetString("command-mailto-description", ("requiredComponent", nameof(MailReceiverComponent))); + public string Help => Loc.GetString("command-mailto-help", ("command", Command)); + + [Dependency] private readonly IEntityManager _entityManager = default!; + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + [Dependency] private readonly IEntitySystemManager _entitySystemManager = default!; + + private readonly string _blankMailPrototype = "MailAdminFun"; + private readonly string _blankLargeMailPrototype = "MailLargeAdminFun"; // Frontier: large mail + private readonly string _container = "storagebase"; + private readonly string _mailContainer = "contents"; + + + public async void Execute(IConsoleShell shell, string argStr, string[] args) + { + if (args.Length < 4) + { + shell.WriteError(Loc.GetString("shell-wrong-arguments-number")); + return; + } + + if (!EntityUid.TryParse(args[0], out var recipientUid)) + { + shell.WriteError(Loc.GetString("shell-entity-uid-must-be-number")); + return; + } + + if (!EntityUid.TryParse(args[1], out var containerUid)) + { + shell.WriteError(Loc.GetString("shell-entity-uid-must-be-number")); + return; + } + + if (!bool.TryParse(args[2], out var isFragile) || !bool.TryParse(args[3], out var isPriority)) + { + shell.WriteError(Loc.GetString("shell-invalid-bool")); + return; + } + + var isLarge = false; + if (args.Length > 4 && !bool.TryParse(args[4], out isLarge)) + { + shell.WriteError(Loc.GetString("shell-invalid-bool")); + return; + } + var mailPrototype = isLarge ? _blankLargeMailPrototype : _blankMailPrototype; + + + var mailSystem = _entitySystemManager.GetEntitySystem(); + var containerSystem = _entitySystemManager.GetEntitySystem(); + + if (!_entityManager.TryGetComponent(recipientUid, out MailReceiverComponent? mailReceiver)) + { + shell.WriteLine(Loc.GetString("command-mailto-no-mailreceiver", ("requiredComponent", nameof(MailReceiverComponent)))); + return; + } + + if (!_prototypeManager.HasIndex(mailPrototype)) + { + shell.WriteLine(Loc.GetString("command-mailto-no-blankmail", ("blankMail", mailPrototype))); + return; + } + + if (!containerSystem.TryGetContainer(containerUid, _container, out var targetContainer)) + { + shell.WriteLine(Loc.GetString("command-mailto-invalid-container", ("requiredContainer", _container))); + return; + } + + if (!mailSystem.TryGetMailRecipientForReceiver(mailReceiver, out MailRecipient? recipient)) + { + shell.WriteLine(Loc.GetString("command-mailto-unable-to-receive")); + return; + } + + if (!mailSystem.TryGetMailTeleporterForReceiver(mailReceiver, out MailTeleporterComponent? teleporterComponent)) + { + shell.WriteLine(Loc.GetString("command-mailto-no-teleporter-found")); + return; + } + + var mailUid = _entityManager.SpawnEntity(mailPrototype, _entityManager.GetComponent(containerUid).Coordinates); + var mailContents = containerSystem.EnsureContainer(mailUid, _mailContainer); + + if (!_entityManager.TryGetComponent(mailUid, out MailComponent? mailComponent)) + { + shell.WriteLine(Loc.GetString("command-mailto-bogus-mail", ("blankMail", mailPrototype), ("requiredMailComponent", nameof(MailComponent)))); + return; + } + + foreach (var entity in targetContainer.ContainedEntities.ToArray()) + containerSystem.Insert(entity, mailContents); + + mailComponent.IsFragile = isFragile; + mailComponent.IsPriority = isPriority; + mailComponent.IsLarge = isLarge; + + mailSystem.SetupMail(mailUid, teleporterComponent, recipient.Value); + + var teleporterQueue = containerSystem.EnsureContainer(teleporterComponent.Owner, "queued"); + containerSystem.Insert(mailUid, teleporterQueue); + shell.WriteLine(Loc.GetString("command-mailto-success", ("timeToTeleport", teleporterComponent.TeleportInterval.TotalSeconds - teleporterComponent.Accumulator))); + } +} + +[AdminCommand(AdminFlags.Fun)] +public sealed class MailNowCommand : IConsoleCommand +{ + public string Command => "mailnow"; + public string Description => Loc.GetString("command-mailnow"); + public string Help => Loc.GetString("command-mailnow-help", ("command", Command)); + + [Dependency] private readonly IEntityManager _entityManager = default!; + [Dependency] private readonly IEntitySystemManager _entitySystemManager = default!; + + public async void Execute(IConsoleShell shell, string argStr, string[] args) + { + var entitySystem = _entitySystemManager.GetEntitySystem(); + + foreach (var mailTeleporter in _entityManager.EntityQuery()) + { + mailTeleporter.Accumulator += (float) mailTeleporter.TeleportInterval.TotalSeconds - mailTeleporter.Accumulator; + } + + shell.WriteLine(Loc.GetString("command-mailnow-success")); + } +} diff --git a/Content.Server/Mail/MailConstants.cs b/Content.Server/Mail/MailConstants.cs new file mode 100644 index 00000000000..38d37a13269 --- /dev/null +++ b/Content.Server/Mail/MailConstants.cs @@ -0,0 +1,37 @@ +namespace Content.Server.Mail; + +/// +/// A set of localized strings related to mail entities +/// +public struct MailEntityStrings +{ + public string NameAddressed; + public string DescClose; + public string DescFar; +} + +/// +/// Constants related to mail. +/// +public static class MailConstants +{ + /// + /// Locale strings related to small parcels. + /// + public static readonly MailEntityStrings Mail = new() + { + NameAddressed = "mail-item-name-addressed", + DescClose = "mail-desc-close", + DescFar = "mail-desc-far" + }; + + /// + /// Locale strings related to large packages. + /// + public static readonly MailEntityStrings MailLarge = new() + { + NameAddressed = "mail-large-item-name-addressed", + DescClose = "mail-large-desc-close", + DescFar = "mail-large-desc-far" + }; +} diff --git a/Content.Server/Mail/Systems/DelayedItemSystem.cs b/Content.Server/Mail/Systems/DelayedItemSystem.cs new file mode 100644 index 00000000000..59aaa3aff6f --- /dev/null +++ b/Content.Server/Mail/Systems/DelayedItemSystem.cs @@ -0,0 +1,43 @@ +using Content.Shared.Damage; +using Content.Shared.Hands; +using Robust.Shared.Containers; + +namespace Content.Server.Mail.Systems; + +/// +/// A placeholder for another entity, spawned when taken out of a container, with the placeholder deleted shortly after. +/// Useful for storing instant effect entities, e.g. smoke, in the mail. +/// +public sealed class DelayedItemSystem : EntitySystem +{ + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnDropAttempt); + SubscribeLocalEvent(OnHandEquipped); + SubscribeLocalEvent(OnDamageChanged); + SubscribeLocalEvent(OnRemovedFromContainer); + } + + private void OnRemovedFromContainer(EntityUid uid, Components.DelayedItemComponent component, ContainerModifiedMessage args) + { + Spawn(component.Item, Transform(uid).Coordinates); + } + + private void OnHandEquipped(EntityUid uid, Components.DelayedItemComponent component, EquippedHandEvent args) + { + EntityManager.DeleteEntity(uid); + } + + private void OnDropAttempt(EntityUid uid, Components.DelayedItemComponent component, DropAttemptEvent args) + { + EntityManager.DeleteEntity(uid); + } + + private void OnDamageChanged(EntityUid uid, Components.DelayedItemComponent component, DamageChangedEvent args) + { + Spawn(component.Item, Transform(uid).Coordinates); + EntityManager.DeleteEntity(uid); + } +} diff --git a/Content.Server/Mail/Systems/MailSystem.cs b/Content.Server/Mail/Systems/MailSystem.cs new file mode 100644 index 00000000000..e80febd2308 --- /dev/null +++ b/Content.Server/Mail/Systems/MailSystem.cs @@ -0,0 +1,756 @@ +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using System.Threading; +using Content.Server.Access.Systems; +using Content.Server.Cargo.Components; +using Content.Server.Cargo.Systems; +using Content.Server.Chat.Systems; +using Content.Server.Chemistry.Containers.EntitySystems; +using Content.Server.Damage.Components; +using Content.Server.Destructible; +using Content.Server.Destructible.Thresholds; +using Content.Server.Destructible.Thresholds.Behaviors; +using Content.Server.Destructible.Thresholds.Triggers; +using Content.Server.Item; +using Content.Server.Mail.Components; +using Content.Server.Mind; +using Content.Server.Popups; +using Content.Server.Power.Components; +using Content.Server.Spawners.EntitySystems; +using Content.Server.Station.Systems; +using Content.Shared.Access; +using Content.Shared.Access.Components; +using Content.Shared.Access.Systems; +using Content.Shared.Chat; +using Content.Shared.Damage; +using Content.Shared.Destructible; +using Content.Shared.Emag.Components; +using Content.Shared.Emag.Systems; +using Content.Shared.Examine; +using Content.Shared.Fluids.Components; +using Content.Shared.Hands.EntitySystems; +using Content.Shared.Interaction; +using Content.Shared.Interaction.Events; +using Content.Shared.Mail; +using Content.Shared.Maps; +using Content.Shared.Nutrition.Components; +using Content.Shared.Nutrition.EntitySystems; +using Content.Shared.PDA; +using Content.Shared.Roles; +using Content.Shared.Storage; +using Content.Shared.Tag; +using Robust.Shared.Audio; +using Robust.Shared.Audio.Systems; +using Robust.Shared.Containers; +using Robust.Shared.Prototypes; +using Robust.Shared.Random; +using Timer = Robust.Shared.Timing.Timer; + +namespace Content.Server.Mail.Systems; + +public sealed class MailSystem : EntitySystem +{ + [Dependency] private readonly PopupSystem _popupSystem = default!; + [Dependency] private readonly AccessReaderSystem _accessSystem = default!; + [Dependency] private readonly SharedHandsSystem _handsSystem = default!; + [Dependency] private readonly IdCardSystem _idCardSystem = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly TagSystem _tagSystem = default!; + [Dependency] private readonly CargoSystem _cargoSystem = default!; + [Dependency] private readonly StationSystem _stationSystem = default!; + [Dependency] private readonly ChatSystem _chatSystem = default!; + [Dependency] private readonly OpenableSystem _openable = default!; + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + [Dependency] private readonly SharedContainerSystem _containerSystem = default!; + [Dependency] private readonly SolutionContainerSystem _solutionContainerSystem = default!; + [Dependency] private readonly SharedAppearanceSystem _appearanceSystem = default!; + [Dependency] private readonly SharedAudioSystem _audioSystem = default!; + [Dependency] private readonly DamageableSystem _damageableSystem = default!; + [Dependency] private readonly MindSystem _mindSystem = default!; + [Dependency] private readonly MetaDataSystem _metaDataSystem = default!; + + // DeltaV - system that keeps track of mail and cargo stats + [Dependency] private readonly LogisticStatsSystem _logisticsStatsSystem = default!; + + private ISawmill _sawmill = default!; + + public override void Initialize() + { + base.Initialize(); + + _sawmill = Logger.GetSawmill("mail"); + + SubscribeLocalEvent(OnSpawnPlayer, after: new[] { typeof(SpawnPointSystem) }); + + SubscribeLocalEvent(OnRemove); + SubscribeLocalEvent(OnUseInHand); + SubscribeLocalEvent(OnAfterInteractUsing); + SubscribeLocalEvent(OnExamined); + SubscribeLocalEvent(OnDestruction); + SubscribeLocalEvent(OnDamage); + SubscribeLocalEvent(OnBreak); + SubscribeLocalEvent(OnMailEmagged); + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + foreach (var mailTeleporter in EntityQuery()) + { + if (TryComp(mailTeleporter.Owner, out var power) && !power.Powered) + continue; + + mailTeleporter.Accumulator += frameTime; + if (mailTeleporter.Accumulator < mailTeleporter.TeleportInterval.TotalSeconds) + continue; + + mailTeleporter.Accumulator -= (float) mailTeleporter.TeleportInterval.TotalSeconds; + + SpawnMail(mailTeleporter.Owner, mailTeleporter); + } + } + + /// + /// Dynamically add the MailReceiver component to appropriate entities. + /// + private void OnSpawnPlayer(PlayerSpawningEvent args) + { + if (args.SpawnResult == null + || args.Job == null + || args.Station is not {} station + || !HasComp(station)) + return; + + AddComp(args.SpawnResult.Value); + } + + private void OnRemove(EntityUid uid, MailComponent component, ComponentRemove args) + { + // Make sure the priority timer doesn't run. + if (component.PriorityCancelToken != null) + component.PriorityCancelToken.Cancel(); + } + + /// + /// Try to open the mail. + /// + private void OnUseInHand(EntityUid uid, MailComponent component, UseInHandEvent args) + { + if (!component.IsEnabled) + return; + if (component.IsLocked) + { + _popupSystem.PopupEntity(Loc.GetString("mail-locked"), uid, args.User); + return; + } + OpenMail(uid, component, args.User); + } + + /// + /// Handle logic similar between a normal mail unlock and an emag + /// frying out the lock. + /// + private void UnlockMail(EntityUid uid, MailComponent component) + { + component.IsLocked = false; + UpdateAntiTamperVisuals(uid, false); + + if (component.IsPriority) + { + // This is a successful delivery. Keep the failure timer from triggering. + if (component.PriorityCancelToken != null) + component.PriorityCancelToken.Cancel(); + + // The priority tape is visually considered to be a part of the + // anti-tamper lock, so remove that too. + _appearanceSystem.SetData(uid, MailVisuals.IsPriority, false); + + // The examination code depends on this being false to not show + // the priority tape description anymore. + component.IsPriority = false; + } + } + + /// + /// Check the ID against the mail's lock + /// + private void OnAfterInteractUsing(EntityUid uid, MailComponent component, AfterInteractUsingEvent args) + { + if (!args.CanReach || !component.IsLocked || !TryComp(uid, out var access)) + return; + + IdCardComponent? idCard = null; // We need an ID card. + if (HasComp(args.Used)) // Can we find it in a PDA if the user is using that? + { + _idCardSystem.TryGetIdCard(args.Used, out var pdaID); + idCard = pdaID; + } + + if (HasComp(args.Used)) // Or are they using an id card directly? + idCard = Comp(args.Used); + + if (idCard == null) // Return if we still haven't found an id card. + return; + + if (!HasComp(uid)) + { + if (idCard.FullName != component.Recipient || idCard.JobTitle != component.RecipientJob) + { + _popupSystem.PopupEntity(Loc.GetString("mail-recipient-mismatch"), uid, args.User); + return; + } + + if (!_accessSystem.IsAllowed(uid, args.User)) + { + _popupSystem.PopupEntity(Loc.GetString("mail-invalid-access"), uid, args.User); + return; + } + } + + ExecuteForEachLogisticsStats(uid, (station, logisticStats) => + { + _logisticsStatsSystem.AddOpenedMailEarnings(station, + logisticStats, + component.IsProfitable ? component.Bounty : 0); + }); + UnlockMail(uid, component); + + if (!component.IsProfitable) + { + _popupSystem.PopupEntity(Loc.GetString("mail-unlocked"), uid, args.User); + return; + } + + _popupSystem.PopupEntity(Loc.GetString("mail-unlocked-reward", ("bounty", component.Bounty)), uid, args.User); + + component.IsProfitable = false; + + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var station, out var account)) + { + if (_stationSystem.GetOwningStation(uid) != station) + continue; + + _cargoSystem.UpdateBankAccount(station, account, component.Bounty); + } + } + + private void OnExamined(EntityUid uid, MailComponent component, ExaminedEvent args) + { + MailEntityStrings mailEntityStrings = component.IsLarge ? MailConstants.MailLarge : MailConstants.Mail; //Frontier: mail types stored per type (large mail) + if (!args.IsInDetailsRange) + { + args.PushMarkup(Loc.GetString(mailEntityStrings.DescFar)); // Frontier: mail constants struct + return; + } + + args.PushMarkup(Loc.GetString(mailEntityStrings.DescClose, ("name", component.Recipient), ("job", component.RecipientJob))); // Frontier: mail constants struct + + if (component.IsFragile) + args.PushMarkup(Loc.GetString("mail-desc-fragile")); + + if (component.IsPriority) + { + if (component.IsProfitable) + args.PushMarkup(Loc.GetString("mail-desc-priority")); + else + args.PushMarkup(Loc.GetString("mail-desc-priority-inactive")); + } + } + + /// + /// Penalize a station for a failed delivery. + /// + /// + /// This will mark a parcel as no longer being profitable, which will + /// prevent multiple failures on different conditions for the same + /// delivery.

+ /// + /// The standard penalization is breaking the anti-tamper lock, + /// but this allows a delivery to fail for other reasons too + /// while having a generic function to handle different messages. + ///
+ public void PenalizeStationFailedDelivery(EntityUid uid, MailComponent component, string localizationString) + { + if (!component.IsProfitable) + return; + + _chatSystem.TrySendInGameICMessage(uid, Loc.GetString(localizationString, ("credits", component.Penalty)), InGameICChatType.Speak, false); + _audioSystem.PlayPvs(component.PenaltySound, uid); + + component.IsProfitable = false; + + if (component.IsPriority) + _appearanceSystem.SetData(uid, MailVisuals.IsPriorityInactive, true); + + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var station, out var account)) + { + if (_stationSystem.GetOwningStation(uid) != station) + continue; + + _cargoSystem.UpdateBankAccount(station, account, component.Penalty); + return; + } + } + + private void OnDestruction(EntityUid uid, MailComponent component, DestructionEventArgs args) + { + if (component.IsLocked) + { + // DeltaV - Tampered mail recorded to logistic stats + ExecuteForEachLogisticsStats(uid, (station, logisticStats) => + { + _logisticsStatsSystem.AddTamperedMailLosses(station, + logisticStats, + component.IsProfitable ? component.Penalty : 0); + }); + + PenalizeStationFailedDelivery(uid, component, "mail-penalty-lock"); + } + + if (component.IsEnabled) + OpenMail(uid, component); + + UpdateAntiTamperVisuals(uid, false); + } + + private void OnDamage(EntityUid uid, MailComponent component, DamageChangedEvent args) + { + if (args.DamageDelta == null || !_containerSystem.TryGetContainer(uid, "contents", out var contents)) + return; + + // Transfer damage to the contents. + // This should be a general-purpose feature for all containers in the future. + foreach (var entity in contents.ContainedEntities.ToArray()) + _damageableSystem.TryChangeDamage(entity, args.DamageDelta); + } + + private void OnBreak(EntityUid uid, MailComponent component, BreakageEventArgs args) + { + _appearanceSystem.SetData(uid, MailVisuals.IsBroken, true); + + if (component.IsFragile) + { + // DeltaV - Broken mail recorded to logistic stats + ExecuteForEachLogisticsStats(uid, (station, logisticStats) => + { + _logisticsStatsSystem.AddDamagedMailLosses(station, + logisticStats, + component.IsProfitable ? component.Penalty : 0); + }); + + PenalizeStationFailedDelivery(uid, component, "mail-penalty-fragile"); + } + } + + private void OnMailEmagged(EntityUid uid, MailComponent component, ref GotEmaggedEvent args) + { + if (!component.IsLocked) + return; + + UnlockMail(uid, component); + + _popupSystem.PopupEntity(Loc.GetString("mail-unlocked-by-emag"), uid, args.UserUid); + + _audioSystem.PlayPvs(component.EmagSound, uid, AudioParams.Default.WithVolume(4)); + component.IsProfitable = false; + args.Handled = true; + } + + /// + /// Returns true if the given entity is considered fragile for delivery. + /// + public bool IsEntityFragile(EntityUid uid, int fragileDamageThreshold) + { + // It takes damage on falling. + if (HasComp(uid)) + return true; + + // It can be spilled easily and has something to spill. + if (HasComp(uid) + && TryComp(uid, out var openable) + && !_openable.IsClosed(uid, null, openable) + && _solutionContainerSystem.PercentFull(uid) > 0) + return true; + + // It might be made of non-reinforced glass. + if (TryComp(uid, out DamageableComponent? damageableComponent) + && damageableComponent.DamageModifierSetId == "Glass") + return true; + + if (!TryComp(uid, out DestructibleComponent? destructibleComp)) + return false; + + // Fallback: It breaks or is destroyed in less than a damage + // threshold dictated by the teleporter. + foreach (var threshold in destructibleComp.Thresholds) + { + if (threshold.Trigger is not DamageTrigger trigger || trigger.Damage >= fragileDamageThreshold) + continue; + + foreach (var behavior in threshold.Behaviors) + { + if (behavior is not DoActsBehavior doActs) + continue; + + if (doActs.Acts.HasFlag(ThresholdActs.Breakage) || doActs.Acts.HasFlag(ThresholdActs.Destruction)) + return true; + } + } + + return false; + } + + public bool TryMatchJobTitleToDepartment(string jobTitle, [NotNullWhen(true)] out string? jobDepartment) + { + foreach (var department in _prototypeManager.EnumeratePrototypes()) + { + foreach (var role in department.Roles) + { + if (!_prototypeManager.TryIndex(role, out JobPrototype? jobPrototype) || jobPrototype.LocalizedName != jobTitle) + continue; + + jobDepartment = department.ID; + return true; + } + } + + jobDepartment = null; + return false; + } + + public bool TryMatchJobTitleToPrototype(string jobTitle, [NotNullWhen(true)] out JobPrototype? jobPrototype) + { + foreach (var job in _prototypeManager.EnumeratePrototypes()) + { + if (job.LocalizedName == jobTitle) + { + jobPrototype = job; + return true; + } + } + + jobPrototype = null; + return false; + } + + /// + /// Handle all the gritty details particular to a new mail entity. + /// + /// + /// This is separate mostly so the unit tests can get to it. + /// + public void SetupMail(EntityUid uid, MailTeleporterComponent component, MailRecipient recipient) + { + var mailComp = EnsureComp(uid); + + var container = _containerSystem.EnsureContainer(uid, "contents"); + foreach (var item in EntitySpawnCollection.GetSpawns(mailComp.Contents, _random)) + { + var entity = EntityManager.SpawnEntity(item, Transform(uid).Coordinates); + if (!_containerSystem.Insert(entity, container)) + { + _sawmill.Error($"Can't insert {ToPrettyString(entity)} into new mail delivery {ToPrettyString(uid)}! Deleting it."); + QueueDel(entity); + } + else if (!mailComp.IsFragile && IsEntityFragile(entity, component.FragileDamageThreshold)) + { + mailComp.IsFragile = true; + } + } + + mailComp.IsPriority = recipient.MayReceivePriorityMail && _random.Prob(component.PriorityChance); + mailComp.RecipientJob = recipient.Job; + mailComp.Recipient = recipient.Name; + + var mailEntityStrings = mailComp.IsLarge ? MailConstants.MailLarge : MailConstants.Mail; + if (mailComp.IsLarge) + { + mailComp.Bounty += component.LargeBonus; + mailComp.Penalty += component.LargeMalus; + } + + if (mailComp.IsFragile) + { + mailComp.Bounty += component.FragileBonus; + mailComp.Penalty += component.FragileMalus; + _appearanceSystem.SetData(uid, MailVisuals.IsFragile, true); + } + + if (mailComp.IsPriority) + { + mailComp.Bounty += component.PriorityBonus; + mailComp.Penalty += component.PriorityMalus; + _appearanceSystem.SetData(uid, MailVisuals.IsPriority, true); + mailComp.PriorityCancelToken = new CancellationTokenSource(); + + Timer.Spawn((int) component.PriorityDuration.TotalMilliseconds, () => + { + // DeltaV - Expired mail recorded to logistic stats + ExecuteForEachLogisticsStats(uid, (station, logisticStats) => + { + _logisticsStatsSystem.AddExpiredMailLosses(station, + logisticStats, + mailComp.IsProfitable ? mailComp.Penalty : 0); + }); + + PenalizeStationFailedDelivery(uid, mailComp, "mail-penalty-expired"); + }, mailComp.PriorityCancelToken.Token); + } + + _appearanceSystem.SetData(uid, MailVisuals.JobIcon, recipient.JobIcon); + + _metaDataSystem.SetEntityName(uid, Loc.GetString(mailEntityStrings.NameAddressed, // Frontier: move constant to MailEntityString + ("recipient", recipient.Name))); + + var accessReader = EnsureComp(uid); + accessReader.AccessLists.Add(recipient.AccessTags); + } + + /// + /// Return the parcels waiting for delivery. + /// + /// The mail teleporter to check. + public List GetUndeliveredParcels(EntityUid uid) + { + // An alternative solution would be to keep a list of the unopened + // parcels spawned by the teleporter and see if they're not carried + // by someone, but this is simple, and simple is good. + List undeliveredParcels = new(); + foreach (var entityInTile in TurfHelpers.GetEntitiesInTile(Transform(uid).Coordinates, LookupFlags.Dynamic | LookupFlags.Sundries)) + { + if (HasComp(entityInTile)) + undeliveredParcels.Add(entityInTile); + } + return undeliveredParcels; + } + + /// + /// Return how many parcels are waiting for delivery. + /// + /// The mail teleporter to check. + public uint GetUndeliveredParcelCount(EntityUid uid) + { + return (uint) GetUndeliveredParcels(uid).Count(); + } + + /// + /// Try to match a mail receiver to a mail teleporter. + /// + public bool TryGetMailTeleporterForReceiver(MailReceiverComponent receiver, [NotNullWhen(true)] out MailTeleporterComponent? teleporterComponent) + { + foreach (var mailTeleporter in EntityQuery()) + { + if (_stationSystem.GetOwningStation(receiver.Owner) != _stationSystem.GetOwningStation(mailTeleporter.Owner)) + continue; + + teleporterComponent = mailTeleporter; + return true; + } + + teleporterComponent = null; + return false; + } + + /// + /// Try to construct a recipient struct for a mail parcel based on a receiver. + /// + public bool TryGetMailRecipientForReceiver(MailReceiverComponent receiver, [NotNullWhen(true)] out MailRecipient? recipient) + { + // Because of the way this works, people are not considered + // candidates for mail if there is no valid PDA or ID in their slot + // or active hand. A better future solution might be checking the + // station records, possibly cross-referenced with the medical crew + // scanner to look for living recipients. TODO + + if (_idCardSystem.TryFindIdCard(receiver.Owner, out var idCard) + && TryComp(idCard.Owner, out var access) + && idCard.Comp.FullName != null + && idCard.Comp.JobTitle != null) + { + var accessTags = access.Tags; + + var mayReceivePriorityMail = !(_mindSystem.GetMind(receiver.Owner) == null); + + recipient = new MailRecipient(idCard.Comp.FullName, + idCard.Comp.JobTitle, + idCard.Comp.JobIcon, + accessTags, + mayReceivePriorityMail); + + return true; + } + + recipient = null; + return false; + } + + /// + /// Get the list of valid mail recipients for a mail teleporter. + /// + public List GetMailRecipientCandidates(EntityUid uid) + { + List candidateList = new(); + + foreach (var receiver in EntityQuery()) + { + if (_stationSystem.GetOwningStation(receiver.Owner) != _stationSystem.GetOwningStation(uid)) + continue; + + if (TryGetMailRecipientForReceiver(receiver, out MailRecipient? recipient)) + candidateList.Add(recipient.Value); + } + + return candidateList; + } + + /// + /// Handle the spawning of all the mail for a mail teleporter. + /// + public void SpawnMail(EntityUid uid, MailTeleporterComponent? component = null) + { + if (!Resolve(uid, ref component)) + { + _sawmill.Error($"Tried to SpawnMail on {ToPrettyString(uid)} without a valid MailTeleporterComponent!"); + return; + } + + if (GetUndeliveredParcelCount(uid) >= component.MaximumUndeliveredParcels) + return; + + var candidateList = GetMailRecipientCandidates(uid); + + if (candidateList.Count <= 0) + { + _sawmill.Error("List of mail candidates was empty!"); + return; + } + + if (!_prototypeManager.TryIndex(component.MailPool, out var pool)) + { + _sawmill.Error($"Can't index {ToPrettyString(uid)}'s MailPool {component.MailPool}!"); + return; + } + + for (int i = 0; + i < component.MinimumDeliveriesPerTeleport + candidateList.Count / component.CandidatesPerDelivery; + i++) + { + var candidate = _random.Pick(candidateList); + var possibleParcels = new Dictionary(pool.Everyone); + + if (TryMatchJobTitleToPrototype(candidate.Job, out JobPrototype? jobPrototype) + && pool.Jobs.TryGetValue(jobPrototype.ID, out Dictionary? jobParcels)) + { + possibleParcels = possibleParcels.Union(jobParcels) + .GroupBy(g => g.Key) + .ToDictionary(pair => pair.Key, pair => pair.First().Value); + } + + if (TryMatchJobTitleToDepartment(candidate.Job, out string? department) + && pool.Departments.TryGetValue(department, out Dictionary? departmentParcels)) + { + possibleParcels = possibleParcels.Union(departmentParcels) + .GroupBy(g => g.Key) + .ToDictionary(pair => pair.Key, pair => pair.First().Value); + } + + var accumulated = 0f; + var randomPoint = _random.NextFloat(possibleParcels.Values.Sum()); + string? chosenParcel = null; + foreach (var (key, weight) in possibleParcels) + { + accumulated += weight; + if (accumulated >= randomPoint) + { + chosenParcel = key; + break; + } + } + + if (chosenParcel == null) + { + _sawmill.Error($"MailSystem wasn't able to find a deliverable parcel for {candidate.Name}, {candidate.Job}!"); + return; + } + + var mail = EntityManager.SpawnEntity(chosenParcel, Transform(uid).Coordinates); + SetupMail(mail, component, candidate); + + _tagSystem.AddTag(mail, "Mail"); // Frontier + } + + if (_containerSystem.TryGetContainer(uid, "queued", out var queued)) + _containerSystem.EmptyContainer(queued); + + _audioSystem.PlayPvs(component.TeleportSound, uid); + } + + public void OpenMail(EntityUid uid, MailComponent? component = null, EntityUid? user = null) + { + if (!Resolve(uid, ref component)) + return; + + _audioSystem.PlayPvs(component.OpenSound, uid); + + if (user != null) + _handsSystem.TryDrop((EntityUid) user); + + if (!_containerSystem.TryGetContainer(uid, "contents", out var contents)) + { + // I silenced this error because it fails non deterministically in tests and doesn't seem to effect anything else. + // _sawmill.Error($"Mail {ToPrettyString(uid)} was missing contents container!"); + return; + } + + foreach (var entity in contents.ContainedEntities.ToArray()) + { + _handsSystem.PickupOrDrop(user, entity); + } + + _tagSystem.AddTag(uid, "Trash"); + _tagSystem.AddTag(uid, "Recyclable"); + component.IsEnabled = false; + UpdateMailTrashState(uid, true); + } + + private void UpdateAntiTamperVisuals(EntityUid uid, bool isLocked) + { + _appearanceSystem.SetData(uid, MailVisuals.IsLocked, isLocked); + } + + private void UpdateMailTrashState(EntityUid uid, bool isTrash) + { + _appearanceSystem.SetData(uid, MailVisuals.IsTrash, isTrash); + } + + // DeltaV - Helper function that executes for each StationLogisticsStatsComponent + // For updating MailMetrics stats + private void ExecuteForEachLogisticsStats(EntityUid uid, + Action action) + { + + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var station, out var logisticStats)) + { + if (_stationSystem.GetOwningStation(uid) != station) + continue; + action(station, logisticStats); + } + } +} + +public struct MailRecipient( + string name, + string job, + string jobIcon, + HashSet> accessTags, + bool mayReceivePriorityMail) +{ + public string Name = name; + public string Job = job; + public string JobIcon = jobIcon; + public HashSet> AccessTags = accessTags; + public bool MayReceivePriorityMail = mayReceivePriorityMail; +} diff --git a/Content.Server/Mapping/MappingCommand.cs b/Content.Server/Mapping/MappingCommand.cs index 08f3dcccf9f..46534f7059d 100644 --- a/Content.Server/Mapping/MappingCommand.cs +++ b/Content.Server/Mapping/MappingCommand.cs @@ -53,7 +53,7 @@ public void Execute(IConsoleShell shell, string argStr, string[] args) } #if DEBUG - shell.WriteError(Loc.GetString("cmd-mapping-warning")); + shell.WriteLine(Loc.GetString("cmd-mapping-warning")); #endif MapId mapId; diff --git a/Content.Server/MassMedia/Systems/NewsSystem.cs b/Content.Server/MassMedia/Systems/NewsSystem.cs index c313b0d4ccd..3246de5316c 100644 --- a/Content.Server/MassMedia/Systems/NewsSystem.cs +++ b/Content.Server/MassMedia/Systems/NewsSystem.cs @@ -92,15 +92,12 @@ private void OnWriteUiDeleteMessage(Entity ent, ref NewsWri if (msg.ArticleNum >= articles.Count) return; - if (msg.Session.AttachedEntity is not { } actor) - return; - var article = articles[msg.ArticleNum]; - if (CheckDeleteAccess(article, ent, actor)) + if (CheckDeleteAccess(article, ent, msg.Actor)) { _adminLogger.Add( LogType.Chat, LogImpact.Medium, - $"{ToPrettyString(actor):actor} deleted news article {article.Title} by {article.Author}: {article.Content}" + $"{ToPrettyString(msg.Actor):actor} deleted news article {article.Title} by {article.Author}: {article.Content}" ); articles.RemoveAt(msg.ArticleNum); @@ -138,11 +135,8 @@ private void OnWriteUiPublishMessage(Entity ent, ref NewsWr if (!TryGetArticles(ent, out var articles)) return; - if (msg.Session.AttachedEntity is not { } author) - return; - string? authorName = null; - if (_idCardSystem.TryFindIdCard(author, out var idCard)) + if (_idCardSystem.TryFindIdCard(msg.Actor, out var idCard)) authorName = idCard.Comp.FullName; var title = msg.Title.Trim(); @@ -161,7 +155,7 @@ private void OnWriteUiPublishMessage(Entity ent, ref NewsWr _adminLogger.Add( LogType.Chat, LogImpact.Medium, - $"{ToPrettyString(author):actor} created news article {article.Title} by {article.Author}: {article.Content}" + $"{ToPrettyString(msg.Actor):actor} created news article {article.Title} by {article.Author}: {article.Content}" ); articles.Add(article); @@ -245,14 +239,14 @@ private bool TryGetArticles(EntityUid uid, [NotNullWhen(true)] out List ent) { - if (!_ui.TryGetUi(ent, NewsWriterUiKey.Key, out var ui)) + if (!_ui.HasUi(ent, NewsWriterUiKey.Key)) return; if (!TryGetArticles(ent, out var articles)) return; var state = new NewsWriterBoundUserInterfaceState(articles.ToArray(), ent.Comp.PublishEnabled, ent.Comp.NextPublish); - _ui.SetUiState(ui, state); + _ui.SetUiState(ent.Owner, NewsWriterUiKey.Key, state); } private void UpdateReaderUi(Entity ent, EntityUid loaderUid) diff --git a/Content.Server/Materials/MaterialReclaimerSystem.cs b/Content.Server/Materials/MaterialReclaimerSystem.cs index aa24fde44b7..de82f125985 100644 --- a/Content.Server/Materials/MaterialReclaimerSystem.cs +++ b/Content.Server/Materials/MaterialReclaimerSystem.cs @@ -1,4 +1,6 @@ using Content.Server.Chemistry.Containers.EntitySystems; +using Content.Server.Chemistry.EntitySystems; +using Content.Server.Construction; using Content.Server.Fluids.EntitySystems; using Content.Server.GameTicking; using Content.Server.Popups; @@ -45,6 +47,8 @@ public override void Initialize() base.Initialize(); SubscribeLocalEvent(OnStartup); + SubscribeLocalEvent(OnRefreshParts); + SubscribeLocalEvent(OnUpgradeExamine); SubscribeLocalEvent(OnPowerChanged); SubscribeLocalEvent(OnInteractUsing, before: new []{typeof(WiresSystem), typeof(SolutionTransferSystem)}); @@ -56,6 +60,18 @@ private void OnStartup(Entity entity, ref ComponentS _solutionContainer.EnsureSolution(entity.Owner, entity.Comp.SolutionContainerId); } + private void OnUpgradeExamine(Entity entity, ref UpgradeExamineEvent args) + { + args.AddPercentageUpgrade(Loc.GetString("material-reclaimer-upgrade-process-rate"), entity.Comp.MaterialProcessRate / entity.Comp.BaseMaterialProcessRate); + } + + private void OnRefreshParts(Entity entity, ref RefreshPartsEvent args) + { + var rating = args.PartRatings[entity.Comp.MachinePartProcessRate] - 1; + entity.Comp.MaterialProcessRate = entity.Comp.BaseMaterialProcessRate * MathF.Pow(entity.Comp.PartRatingProcessRateMultiplier, rating); + Dirty(entity); + } + private void OnPowerChanged(Entity entity, ref PowerChangedEvent args) { AmbientSound.SetAmbience(entity.Owner, entity.Comp.Enabled && args.Powered); diff --git a/Content.Server/Mech/Components/MechAirComponent.cs b/Content.Server/Mech/Components/MechAirComponent.cs index c533b3d8343..d312e1b7399 100644 --- a/Content.Server/Mech/Components/MechAirComponent.cs +++ b/Content.Server/Mech/Components/MechAirComponent.cs @@ -1,4 +1,5 @@ using Content.Server.Atmos; +using Content.Shared.Atmos; namespace Content.Server.Mech.Components; diff --git a/Content.Server/Mech/Systems/MechSystem.cs b/Content.Server/Mech/Systems/MechSystem.cs index 976c3867a9c..36dce2c9bcc 100644 --- a/Content.Server/Mech/Systems/MechSystem.cs +++ b/Content.Server/Mech/Systems/MechSystem.cs @@ -306,15 +306,14 @@ public override void UpdateUserInterface(EntityUid uid, MechComponent? component { EquipmentStates = ev.States }; - var ui = _ui.GetUi(uid, MechUiKey.Key); - _ui.SetUiState(ui, state); + _ui.SetUiState(uid, MechUiKey.Key, state); } public override void BreakMech(EntityUid uid, MechComponent? component = null) { base.BreakMech(uid, component); - _ui.TryCloseAll(uid, MechUiKey.Key); + _ui.CloseUi(uid, MechUiKey.Key); _actionBlocker.UpdateCanMove(uid); } diff --git a/Content.Server/Medical/BiomassReclaimer/BiomassReclaimerComponent.cs b/Content.Server/Medical/BiomassReclaimer/BiomassReclaimerComponent.cs index 61d36f98b96..1358bfbcbbc 100644 --- a/Content.Server/Medical/BiomassReclaimer/BiomassReclaimerComponent.cs +++ b/Content.Server/Medical/BiomassReclaimer/BiomassReclaimerComponent.cs @@ -1,4 +1,8 @@ +using System.Threading; +using Content.Shared.Construction.Prototypes; using Content.Shared.Storage; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; namespace Content.Server.Medical.BiomassReclaimer { @@ -6,72 +10,111 @@ namespace Content.Server.Medical.BiomassReclaimer public sealed partial class BiomassReclaimerComponent : Component { /// - /// This gets set for each mob it processes. - /// When it hits 0, there is a chance for the reclaimer to either spill blood or throw an item. + /// This gets set for each mob it processes. + /// When it hits 0, there is a chance for the reclaimer to either spill blood or throw an item. /// [ViewVariables] public float RandomMessTimer = 0f; /// - /// The interval for . + /// The interval for . /// - [ViewVariables(VVAccess.ReadWrite), DataField] + [DataField] public TimeSpan RandomMessInterval = TimeSpan.FromSeconds(5); /// - /// This gets set for each mob it processes. - /// When it hits 0, spit out biomass. + /// This gets set for each mob it processes. + /// When it hits 0, spit out biomass. /// [ViewVariables] - public float ProcessingTimer = default; + public float ProcessingTimer; /// - /// Amount of biomass that the mob being processed will yield. - /// This is calculated from the YieldPerUnitMass. - /// Also stores non-integer leftovers. + /// Amount of biomass that the mob being processed will yield. + /// This is calculated from the YieldPerUnitMass. + /// Also stores non-integer leftovers. /// [ViewVariables] - public float CurrentExpectedYield = 0f; + public float CurrentExpectedYield; /// - /// The reagent that will be spilled while processing a mob. + /// The reagent that will be spilled while processing a mob. /// [ViewVariables] public string? BloodReagent; /// - /// Entities that can be randomly spawned while processing a mob. + /// Entities that can be randomly spawned while processing a mob. /// public List SpawnedEntities = new(); /// - /// How many units of biomass it produces for each unit of mass. + /// How many units of biomass it produces for each unit of mass. /// - [DataField, ViewVariables(VVAccess.ReadWrite)] - public float YieldPerUnitMass = 0.4f; + [ViewVariables(VVAccess.ReadWrite)] + public float YieldPerUnitMass = default; /// - /// How many seconds to take to insert an entity per unit of its mass. + /// The base yield per mass unit when no components are upgraded. /// - [DataField, ViewVariables(VVAccess.ReadWrite)] + [DataField] + public float BaseYieldPerUnitMass = 0.4f; + + /// + /// Machine part whose rating modifies the yield per mass. + /// + [DataField(customTypeSerializer: typeof(PrototypeIdSerializer))] + public string MachinePartYieldAmount = "MatterBin"; + + /// + /// How much the machine part quality affects the yield. + /// Going up a tier will multiply the yield by this amount. + /// + [DataField] + public float PartRatingYieldAmountMultiplier = 1.25f; + + /// + /// How many seconds to take to insert an entity per unit of its mass. + /// + [DataField] public float BaseInsertionDelay = 0.1f; /// - /// How much to multiply biomass yield from botany produce. + /// How much to multiply biomass yield from botany produce. /// - [DataField, ViewVariables(VVAccess.ReadWrite)] + [DataField] public float ProduceYieldMultiplier = 0.25f; /// - /// The time it takes to process a mob, per mass. + /// The time it takes to process a mob, per mass. + /// + [ViewVariables(VVAccess.ReadWrite)] + public float ProcessingTimePerUnitMass; + + /// + /// The base time per mass unit that it takes to process a mob + /// when no components are upgraded. + /// + [DataField] + public float BaseProcessingTimePerUnitMass = 0.5f; + + /// + /// The machine part that increses the processing speed. + /// + [DataField(customTypeSerializer: typeof(PrototypeIdSerializer))] + public string MachinePartProcessingSpeed = "Manipulator"; + + /// + /// How much the machine part quality affects the yield. + /// Going up a tier will multiply the speed by this amount. /// - [DataField, ViewVariables(VVAccess.ReadWrite)] - public float ProcessingTimePerUnitMass = 0.5f; + [DataField] + public float PartRatingSpeedMultiplier = 1.35f; /// - /// Will this refuse to gib a living mob? + /// Will this refuse to gib a living mob? /// - [ViewVariables(VVAccess.ReadWrite), DataField] + [DataField] public bool SafetyEnabled = true; } } diff --git a/Content.Server/Medical/BiomassReclaimer/BiomassReclaimerSystem.cs b/Content.Server/Medical/BiomassReclaimer/BiomassReclaimerSystem.cs index eaf04d64b2b..97a758a5ed3 100644 --- a/Content.Server/Medical/BiomassReclaimer/BiomassReclaimerSystem.cs +++ b/Content.Server/Medical/BiomassReclaimer/BiomassReclaimerSystem.cs @@ -1,6 +1,7 @@ using System.Numerics; using Content.Server.Body.Components; using Content.Server.Botany.Components; +using Content.Server.Construction; using Content.Server.Fluids.EntitySystems; using Content.Server.Materials; using Content.Server.Power.Components; @@ -99,6 +100,8 @@ public override void Initialize() SubscribeLocalEvent(OnUnanchorAttempt); SubscribeLocalEvent(OnAfterInteractUsing); SubscribeLocalEvent(OnClimbedOn); + SubscribeLocalEvent(OnRefreshParts); + SubscribeLocalEvent(OnUpgradeExamine); SubscribeLocalEvent(OnPowerChanged); SubscribeLocalEvent(OnSuicide); SubscribeLocalEvent(OnDoAfter); @@ -173,6 +176,26 @@ private void OnClimbedOn(Entity reclaimer, ref Climbe StartProcessing(args.Climber, reclaimer); } + private void OnRefreshParts(EntityUid uid, BiomassReclaimerComponent component, RefreshPartsEvent args) + { + var laserRating = args.PartRatings[component.MachinePartProcessingSpeed]; + var manipRating = args.PartRatings[component.MachinePartYieldAmount]; + + // Processing time slopes downwards with part rating. + component.ProcessingTimePerUnitMass = + component.BaseProcessingTimePerUnitMass / MathF.Pow(component.PartRatingSpeedMultiplier, laserRating - 1); + + // Yield slopes upwards with part rating. + component.YieldPerUnitMass = + component.BaseYieldPerUnitMass * MathF.Pow(component.PartRatingYieldAmountMultiplier, manipRating - 1); + } + + private void OnUpgradeExamine(EntityUid uid, BiomassReclaimerComponent component, UpgradeExamineEvent args) + { + args.AddPercentageUpgrade("biomass-reclaimer-component-upgrade-speed", component.BaseProcessingTimePerUnitMass / component.ProcessingTimePerUnitMass); + args.AddPercentageUpgrade("biomass-reclaimer-component-upgrade-biomass-yield", component.YieldPerUnitMass / component.BaseYieldPerUnitMass); + } + private void OnDoAfter(Entity reclaimer, ref ReclaimerDoAfterEvent args) { if (args.Handled diff --git a/Content.Server/Medical/Components/CryoPodAirComponent.cs b/Content.Server/Medical/Components/CryoPodAirComponent.cs index baaa3bcda0e..72a10b391e7 100644 --- a/Content.Server/Medical/Components/CryoPodAirComponent.cs +++ b/Content.Server/Medical/Components/CryoPodAirComponent.cs @@ -11,5 +11,5 @@ public sealed partial class CryoPodAirComponent : Component ///
[ViewVariables(VVAccess.ReadWrite)] [DataField("gasMixture")] - public GasMixture Air { get; set; } = new(Atmospherics.OneAtmosphere); + public GasMixture Air { get; set; } = new GasMixture(1000f); } diff --git a/Content.Server/Medical/Components/MedicalScannerComponent.cs b/Content.Server/Medical/Components/MedicalScannerComponent.cs index 96de6499875..15ca6cd2bd7 100644 --- a/Content.Server/Medical/Components/MedicalScannerComponent.cs +++ b/Content.Server/Medical/Components/MedicalScannerComponent.cs @@ -1,5 +1,4 @@ using Content.Shared.Construction.Prototypes; -using Content.Shared.DragDrop; using Content.Shared.MedicalScanner; using Robust.Shared.Containers; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; @@ -13,10 +12,15 @@ public sealed partial class MedicalScannerComponent : SharedMedicalScannerCompon public ContainerSlot BodyContainer = default!; public EntityUid? ConnectedConsole; - [DataField, ViewVariables(VVAccess.ReadWrite)] + [ViewVariables(VVAccess.ReadWrite)] public float CloningFailChanceMultiplier = 1f; - - // Nyano, needed for Metem Machine. + public float MetemKarmaBonus = 0.25f; + + [DataField(customTypeSerializer: typeof(PrototypeIdSerializer))] + public string MachinePartCloningFailChance = "Capacitor"; + + [DataField] + public float PartRatingFailMultiplier = 0.75f; } } diff --git a/Content.Server/Medical/CrewMonitoring/CrewMonitoringConsoleSystem.cs b/Content.Server/Medical/CrewMonitoring/CrewMonitoringConsoleSystem.cs index ff02b9cbdfe..a53df6dbae9 100644 --- a/Content.Server/Medical/CrewMonitoring/CrewMonitoringConsoleSystem.cs +++ b/Content.Server/Medical/CrewMonitoring/CrewMonitoringConsoleSystem.cs @@ -58,7 +58,7 @@ private void UpdateUserInterface(EntityUid uid, CrewMonitoringConsoleComponent? if (!Resolve(uid, ref component)) return; - if (!_uiSystem.TryGetUi(uid, CrewMonitoringUIKey.Key, out var bui)) + if (!_uiSystem.IsUiOpen(uid, CrewMonitoringUIKey.Key)) return; // The grid must have a NavMapComponent to visualize the map in the UI @@ -69,6 +69,6 @@ private void UpdateUserInterface(EntityUid uid, CrewMonitoringConsoleComponent? // Update all sensors info var allSensors = component.ConnectedSensors.Values.ToList(); - _uiSystem.SetUiState(bui, new CrewMonitoringState(allSensors)); + _uiSystem.SetUiState(uid, CrewMonitoringUIKey.Key, new CrewMonitoringState(allSensors)); } } diff --git a/Content.Server/Medical/CryoPodSystem.cs b/Content.Server/Medical/CryoPodSystem.cs index bcacd2f5051..023a2e4083f 100644 --- a/Content.Server/Medical/CryoPodSystem.cs +++ b/Content.Server/Medical/CryoPodSystem.cs @@ -13,6 +13,7 @@ using Content.Server.NodeContainer.Nodes; using Content.Server.Power.Components; using Content.Server.Temperature.Components; +using Content.Shared.Atmos; using Content.Shared.UserInterface; using Content.Shared.Chemistry; using Content.Shared.Chemistry.Components; @@ -194,7 +195,8 @@ private void OnActivateUI(Entity entity, ref AfterActivatableU healthAnalyzer.ScannedEntity = entity.Comp.BodyContainer.ContainedEntity; } - _userInterfaceSystem.TrySendUiMessage( + // TODO: This should be a state my dude + _userInterfaceSystem.ServerSendUiMessage( entity.Owner, HealthAnalyzerUiKey.Key, new HealthAnalyzerScannedUserMessage(GetNetEntity(entity.Comp.BodyContainer.ContainedEntity), @@ -204,6 +206,7 @@ private void OnActivateUI(Entity entity, ref AfterActivatableU ? bloodSolution.FillFraction : 0, null, + null, null )); } @@ -247,7 +250,7 @@ private void OnPowerChanged(Entity entity, ref PowerChangedEve else { RemComp(entity); - _uiSystem.TryCloseAll(entity.Owner, HealthAnalyzerUiKey.Key); + _uiSystem.CloseUi(entity.Owner, HealthAnalyzerUiKey.Key); } UpdateAppearance(entity.Owner, entity.Comp); } @@ -277,10 +280,17 @@ private void OnGasAnalyzed(Entity entity, ref GasAnalyzerScanE if (!TryComp(entity, out CryoPodAirComponent? cryoPodAir)) return; - args.GasMixtures ??= new Dictionary { { Name(entity.Owner), cryoPodAir.Air } }; + args.GasMixtures ??= new List<(string, GasMixture?)>(); + args.GasMixtures.Add((Name(entity.Owner), cryoPodAir.Air)); // If it's connected to a port, include the port side - if (_nodeContainer.TryGetNode(entity.Owner, entity.Comp.PortName, out PipeNode? port)) - args.GasMixtures.Add(entity.Comp.PortName, port.Air); + // multiply by volume fraction to make sure to send only the gas inside the analyzed pipe element, not the whole pipe system + if (_nodeContainer.TryGetNode(entity.Owner, entity.Comp.PortName, out PipeNode? port) && port.Air.Volume != 0f) + { + var portAirLocal = port.Air.Clone(); + portAirLocal.Multiply(port.Volume / port.Air.Volume); + portAirLocal.Volume = port.Volume; + args.GasMixtures.Add((entity.Comp.PortName, portAirLocal)); + } } private void OnEjected(Entity cryoPod, ref EntRemovedFromContainerMessage args) @@ -291,7 +301,7 @@ private void OnEjected(Entity cryoPod, ref EntRemovedFromConta } // if body is ejected - no need to display health-analyzer - _uiSystem.TryCloseAll(cryoPod.Owner, HealthAnalyzerUiKey.Key); + _uiSystem.CloseUi(cryoPod.Owner, HealthAnalyzerUiKey.Key); } #endregion diff --git a/Content.Server/Medical/HealthAnalyzerSystem.cs b/Content.Server/Medical/HealthAnalyzerSystem.cs index 489ba9ac81c..76d09c42f08 100644 --- a/Content.Server/Medical/HealthAnalyzerSystem.cs +++ b/Content.Server/Medical/HealthAnalyzerSystem.cs @@ -3,6 +3,8 @@ using Content.Server.Medical.Components; using Content.Server.PowerCell; using Content.Server.Temperature.Components; +using Content.Server.Traits.Assorted; +using Content.Shared.Chemistry.EntitySystems; using Content.Shared.Damage; using Content.Shared.DoAfter; using Content.Shared.Interaction; @@ -129,10 +131,10 @@ private void OnDropped(Entity uid, ref DroppedEvent arg private void OpenUserInterface(EntityUid user, EntityUid analyzer) { - if (!TryComp(user, out var actor) || !_uiSystem.TryGetUi(analyzer, HealthAnalyzerUiKey.Key, out var ui)) + if (!_uiSystem.HasUi(analyzer, HealthAnalyzerUiKey.Key)) return; - _uiSystem.OpenUi(ui, actor.PlayerSession); + _uiSystem.OpenUi(analyzer, HealthAnalyzerUiKey.Key, user); } /// @@ -173,7 +175,7 @@ private void StopAnalyzingEntity(Entity healthAnalyzer, /// True makes the UI show ACTIVE, False makes the UI show INACTIVE public void UpdateScannedUser(EntityUid healthAnalyzer, EntityUid target, bool scanMode) { - if (!_uiSystem.TryGetUi(healthAnalyzer, HealthAnalyzerUiKey.Key, out var ui)) + if (!_uiSystem.HasUi(healthAnalyzer, HealthAnalyzerUiKey.Key)) return; if (!HasComp(target)) @@ -186,6 +188,7 @@ public void UpdateScannedUser(EntityUid healthAnalyzer, EntityUid target, bool s var bloodAmount = float.NaN; var bleeding = false; + var unrevivable = false; if (TryComp(target, out var bloodstream) && _solutionContainerSystem.ResolveSolution(target, bloodstream.BloodSolutionName, @@ -195,14 +198,16 @@ public void UpdateScannedUser(EntityUid healthAnalyzer, EntityUid target, bool s bleeding = bloodstream.BleedAmount > 0; } - - - _uiSystem.SendUiMessage(ui, new HealthAnalyzerScannedUserMessage( + /*if (HasComp(target)) Somehow we dont have unrevivable??? + unrevivable = true; + */ + _uiSystem.ServerSendUiMessage(healthAnalyzer, HealthAnalyzerUiKey.Key, new HealthAnalyzerScannedUserMessage( GetNetEntity(target), bodyTemperature, bloodAmount, scanMode, - bleeding + bleeding, + unrevivable )); } } diff --git a/Content.Server/Medical/MedicalScannerSystem.cs b/Content.Server/Medical/MedicalScannerSystem.cs index a6ce43c4081..ab6918e373b 100644 --- a/Content.Server/Medical/MedicalScannerSystem.cs +++ b/Content.Server/Medical/MedicalScannerSystem.cs @@ -7,6 +7,7 @@ using Content.Shared.Verbs; using Robust.Shared.Containers; using Content.Server.Cloning.Components; +using Content.Server.Construction; using Content.Server.DeviceLinking.Systems; using Content.Shared.DeviceLinking.Events; using Content.Server.Power.EntitySystems; @@ -44,6 +45,8 @@ public override void Initialize() SubscribeLocalEvent(OnDragDropOn); SubscribeLocalEvent(OnPortDisconnected); SubscribeLocalEvent(OnAnchorChanged); + SubscribeLocalEvent(OnRefreshParts); + SubscribeLocalEvent(OnUpgradeExamine); SubscribeLocalEvent(OnCanDragDropOn); } @@ -220,5 +223,17 @@ public void EjectBody(EntityUid uid, MedicalScannerComponent? scannerComponent) _climbSystem.ForciblySetClimbing(contained, uid); UpdateAppearance(uid, scannerComponent); } + + private void OnRefreshParts(EntityUid uid, MedicalScannerComponent component, RefreshPartsEvent args) + { + var ratingFail = args.PartRatings[component.MachinePartCloningFailChance]; + + component.CloningFailChanceMultiplier = MathF.Pow(component.PartRatingFailMultiplier, ratingFail - 1); + } + + private void OnUpgradeExamine(EntityUid uid, MedicalScannerComponent component, UpgradeExamineEvent args) + { + args.AddPercentageUpgrade("medical-scanner-upgrade-cloning", component.CloningFailChanceMultiplier); + } } } diff --git a/Content.Server/Medical/PenLightSystem.cs b/Content.Server/Medical/PenLightSystem.cs index 0e0f22684a7..f1df356cab0 100644 --- a/Content.Server/Medical/PenLightSystem.cs +++ b/Content.Server/Medical/PenLightSystem.cs @@ -38,9 +38,9 @@ private void OnAfterInteract(EntityUid uid, PenLightComponent component, ref Aft { if (args.Handled || args.Target is not {} target - || target == null - || !args.CanReach - || !HasComp(target) + || target == null + || !args.CanReach + || !HasComp(target) || !_powerCell.HasDrawCharge(uid, user: args.User)) return; args.Handled = TryStartExam(uid, target, args.User, component); @@ -99,11 +99,10 @@ public bool TryStartExam(EntityUid uid, EntityUid target, EntityUid user, PenLig } private void OpenUserInterface(EntityUid user, EntityUid penlight) { - if (!TryComp(user, out var actor) - || !_uiSystem.TryGetUi(penlight, PenLightUiKey.Key, out var ui)) + if (!_uiSystem.HasUi(penlight, PenLightUiKey.Key)) return; - _uiSystem.OpenUi(ui, actor.PlayerSession); + _uiSystem.OpenUi(penlight, PenLightUiKey.Key, user); } /// @@ -111,7 +110,7 @@ private void OpenUserInterface(EntityUid user, EntityUid penlight) /// private void Diagnose(EntityUid penlight, EntityUid target) { - if (!_uiSystem.TryGetUi(penlight, PenLightUiKey.Key, out var ui) + if (!_uiSystem.HasUi(penlight, PenLightUiKey.Key) || !HasComp(target) || !HasComp(target)) return; @@ -135,12 +134,16 @@ private void Diagnose(EntityUid penlight, EntityUid target) // Healthy var healthy = !(blind || drunk || eyeDamage || seeingRainbows); - _uiSystem.SendUiMessage(ui, new PenLightUserMessage(GetNetEntity(target), - blind, - drunk, - eyeDamage, - healthy, - seeingRainbows - )); + _uiSystem.ServerSendUiMessage( + penlight, + PenLightUiKey.Key, + new PenLightUserMessage(GetNetEntity(target), + blind, + drunk, + eyeDamage, + healthy, + seeingRainbows + ) + ); } } diff --git a/Content.Server/Medical/Stethoscope/StethoscopeSystem.cs b/Content.Server/Medical/Stethoscope/StethoscopeSystem.cs index 9521c14f2e3..96bfc7c904c 100644 --- a/Content.Server/Medical/Stethoscope/StethoscopeSystem.cs +++ b/Content.Server/Medical/Stethoscope/StethoscopeSystem.cs @@ -3,11 +3,10 @@ using Content.Server.Medical.Stethoscope.Components; using Content.Server.Popups; using Content.Shared.Actions; -using Content.Shared.Clothing.Components; +using Content.Shared.Clothing; using Content.Shared.Damage; using Content.Shared.DoAfter; using Content.Shared.FixedPoint; -using Content.Shared.Inventory.Events; using Content.Shared.Medical; using Content.Shared.Medical.Stethoscope; using Content.Shared.Mobs.Components; @@ -26,8 +25,8 @@ public sealed class StethoscopeSystem : EntitySystem public override void Initialize() { base.Initialize(); - SubscribeLocalEvent(OnEquipped); - SubscribeLocalEvent(OnUnequipped); + SubscribeLocalEvent(OnEquipped); + SubscribeLocalEvent(OnUnequipped); SubscribeLocalEvent>(AddStethoscopeVerb); SubscribeLocalEvent(OnGetActions); SubscribeLocalEvent(OnStethoscopeAction); @@ -37,26 +36,20 @@ public override void Initialize() /// /// Add the component the verb event subs to if the equippee is wearing the stethoscope. /// - private void OnEquipped(EntityUid uid, StethoscopeComponent component, GotEquippedEvent args) + private void OnEquipped(EntityUid uid, StethoscopeComponent component, ref ClothingGotEquippedEvent args) { - if (!TryComp(uid, out var clothing)) - return; - // Is the clothing in its actual slot? - if (!clothing.Slots.HasFlag(args.SlotFlags)) - return; - component.IsActive = true; - var wearingComp = EnsureComp(args.Equipee); + var wearingComp = EnsureComp(args.Wearer); wearingComp.Stethoscope = uid; } - private void OnUnequipped(EntityUid uid, StethoscopeComponent component, GotUnequippedEvent args) + private void OnUnequipped(EntityUid uid, StethoscopeComponent component, ref ClothingGotUnequippedEvent args) { if (!component.IsActive) return; - RemComp(args.Equipee); + RemComp(args.Wearer); component.IsActive = false; } diff --git a/Content.Server/Medical/SuitSensors/SuitSensorSystem.cs b/Content.Server/Medical/SuitSensors/SuitSensorSystem.cs index 0c4f1ec5463..bd904a03b0d 100644 --- a/Content.Server/Medical/SuitSensors/SuitSensorSystem.cs +++ b/Content.Server/Medical/SuitSensors/SuitSensorSystem.cs @@ -1,3 +1,4 @@ +using System.Numerics; using Content.Server.Access.Systems; using Content.Server.DeviceNetwork; using Content.Server.DeviceNetwork.Components; @@ -7,10 +8,10 @@ using Content.Server.Medical.CrewMonitoring; using Content.Server.Popups; using Content.Server.Station.Systems; +using Content.Shared.Clothing; using Content.Shared.Damage; using Content.Shared.DeviceNetwork; using Content.Shared.Examine; -using Content.Shared.Inventory.Events; using Content.Shared.Medical.SuitSensor; using Content.Shared.Mobs.Components; using Content.Shared.Mobs.Systems; @@ -40,8 +41,8 @@ public override void Initialize() base.Initialize(); SubscribeLocalEvent(OnPlayerSpawn); SubscribeLocalEvent(OnMapInit); - SubscribeLocalEvent(OnEquipped); - SubscribeLocalEvent(OnUnequipped); + SubscribeLocalEvent(OnEquipped); + SubscribeLocalEvent(OnUnequipped); SubscribeLocalEvent(OnExamine); SubscribeLocalEvent>(OnVerb); SubscribeLocalEvent(OnInsert); @@ -165,19 +166,13 @@ private void OnMapInit(EntityUid uid, SuitSensorComponent component, MapInitEven } } - private void OnEquipped(EntityUid uid, SuitSensorComponent component, GotEquippedEvent args) + private void OnEquipped(EntityUid uid, SuitSensorComponent component, ref ClothingGotEquippedEvent args) { - if (args.Slot != component.ActivationSlot) - return; - - component.User = args.Equipee; + component.User = args.Wearer; } - private void OnUnequipped(EntityUid uid, SuitSensorComponent component, GotUnequippedEvent args) + private void OnUnequipped(EntityUid uid, SuitSensorComponent component, ref ClothingGotUnequippedEvent args) { - if (args.Slot != component.ActivationSlot) - return; - component.User = null; } @@ -377,8 +372,8 @@ public void SetSensor(EntityUid uid, SuitSensorMode mode, EntityUid? userUid = n if (transform.GridUid != null) { coordinates = new EntityCoordinates(transform.GridUid.Value, - _transform.GetInvWorldMatrix(xformQuery.GetComponent(transform.GridUid.Value), xformQuery) - .Transform(_transform.GetWorldPosition(transform, xformQuery))); + Vector2.Transform(_transform.GetWorldPosition(transform, xformQuery), + _transform.GetInvWorldMatrix(xformQuery.GetComponent(transform.GridUid.Value), xformQuery))); } else if (transform.MapUid != null) { diff --git a/Content.Server/Mind/Commands/MakeSentientCommand.cs b/Content.Server/Mind/Commands/MakeSentientCommand.cs index b58d782d9c5..450f0712a14 100644 --- a/Content.Server/Mind/Commands/MakeSentientCommand.cs +++ b/Content.Server/Mind/Commands/MakeSentientCommand.cs @@ -3,7 +3,7 @@ using Content.Shared.Administration; using Content.Shared.Emoting; using Content.Shared.Examine; -using Content.Shared.Language; +using Content.Shared.Language.Components; using Content.Shared.Language.Systems; using Content.Shared.Mind.Components; using Content.Shared.Movement.Components; diff --git a/Content.Server/Mind/MindSystem.cs b/Content.Server/Mind/MindSystem.cs index 2ce4c1fcf03..ef9eff7794b 100644 --- a/Content.Server/Mind/MindSystem.cs +++ b/Content.Server/Mind/MindSystem.cs @@ -1,6 +1,7 @@ using System.Diagnostics.CodeAnalysis; using Content.Server.Administration.Logs; using Content.Server.GameTicking; +using Content.Server.Ghost; using Content.Server.Mind.Commands; using Content.Shared.Database; using Content.Shared.Ghost; @@ -9,10 +10,8 @@ using Content.Shared.Players; using Robust.Server.GameStates; using Robust.Server.Player; -using Robust.Shared.Map.Components; using Robust.Shared.Network; using Robust.Shared.Player; -using Robust.Shared.Timing; using Robust.Shared.Utility; using Content.Server.NPC.Components; @@ -24,8 +23,7 @@ public sealed class MindSystem : SharedMindSystem [Dependency] private readonly GameTicker _gameTicker = default!; [Dependency] private readonly IAdminLogManager _adminLogger = default!; [Dependency] private readonly IPlayerManager _players = default!; - [Dependency] private readonly MetaDataSystem _metaData = default!; - [Dependency] private readonly SharedGhostSystem _ghosts = default!; + [Dependency] private readonly GhostSystem _ghosts = default!; [Dependency] private readonly SharedTransformSystem _transform = default!; [Dependency] private readonly PvsOverrideSystem _pvsOverride = default!; @@ -65,8 +63,8 @@ private void OnMindContainerTerminating(EntityUid uid, MindContainerComponent co && !Terminating(visiting)) { TransferTo(mindId, visiting, mind: mind); - if (TryComp(visiting, out GhostComponent? ghost)) - _ghosts.SetCanReturnToBody(ghost, false); + if (TryComp(visiting, out GhostComponent? ghostComp)) + _ghosts.SetCanReturnToBody(ghostComp, false); return; } @@ -76,40 +74,13 @@ private void OnMindContainerTerminating(EntityUid uid, MindContainerComponent co if (!component.GhostOnShutdown || mind.Session == null || _gameTicker.RunLevel == GameRunLevel.PreRoundLobby) return; - var xform = Transform(uid); - var gridId = xform.GridUid; - var spawnPosition = Transform(uid).Coordinates; - - // Use a regular timer here because the entity has probably been deleted. - Timer.Spawn(0, () => - { - // Make extra sure the round didn't end between spawning the timer and it being executed. - if (_gameTicker.RunLevel == GameRunLevel.PreRoundLobby) - return; - - // Async this so that we don't throw if the grid we're on is being deleted. - if (!HasComp(gridId)) - spawnPosition = _gameTicker.GetObserverSpawnPoint(); - - // TODO refactor observer spawning. - // please. - if (!spawnPosition.IsValid(EntityManager)) - { - // This should be an error, if it didn't cause tests to start erroring when they delete a player. - Log.Warning($"Entity \"{ToPrettyString(uid)}\" for {mind.CharacterName} was deleted, and no applicable spawn location is available."); - TransferTo(mindId, null, createGhost: false, mind: mind); - return; - } - - var ghost = Spawn(GameTicker.ObserverPrototypeName, spawnPosition); - var ghostComponent = Comp(ghost); - _ghosts.SetCanReturnToBody(ghostComponent, false); - + var ghost = _ghosts.SpawnGhost((mindId, mind), uid); + if (ghost != null) // Log these to make sure they're not causing the GameTicker round restart bugs... Log.Debug($"Entity \"{ToPrettyString(uid)}\" for {mind.CharacterName} was deleted, spawned \"{ToPrettyString(ghost)}\"."); - _metaData.SetEntityName(ghost, mind.CharacterName ?? string.Empty); - TransferTo(mindId, ghost, mind: mind); - }); + else + // This should be an error, if it didn't cause tests to start erroring when they delete a player. + Log.Warning($"Entity \"{ToPrettyString(uid)}\" for {mind.CharacterName} was deleted, and no applicable spawn location is available."); } public override bool TryGetMind(NetUserId user, [NotNullWhen(true)] out EntityUid? mindId, [NotNullWhen(true)] out MindComponent? mind) diff --git a/Content.Server/Mood/MoodSystem.cs b/Content.Server/Mood/MoodSystem.cs index 0e287adccee..4ec4709ea7a 100644 --- a/Content.Server/Mood/MoodSystem.cs +++ b/Content.Server/Mood/MoodSystem.cs @@ -122,16 +122,15 @@ private void ApplyEffect(EntityUid uid, MoodComponent component, MoodEffectProto if (!_prototypeManager.TryIndex(oldPrototypeId, out var oldPrototype)) return; - if (prototype.ID != oldPrototype.ID) - { + // Don't send the moodlet popup if we already have the moodlet. + if (!component.CategorisedEffects.ContainsValue(prototype.ID)) SendEffectText(uid, prototype); + + if (prototype.ID != oldPrototype.ID) component.CategorisedEffects[prototype.Category] = prototype.ID; - } } else - { component.CategorisedEffects.Add(prototype.Category, prototype.ID); - } if (prototype.Timeout != 0) Timer.Spawn(TimeSpan.FromSeconds(prototype.Timeout), () => RemoveTimedOutEffect(uid, prototype.ID, prototype.Category)); @@ -146,7 +145,10 @@ private void ApplyEffect(EntityUid uid, MoodComponent component, MoodEffectProto if (moodChange == 0) return; - SendEffectText(uid, prototype); + // Don't send the moodlet popup if we already have the moodlet. + if (!component.UncategorisedEffects.ContainsKey(prototype.ID)) + SendEffectText(uid, prototype); + component.UncategorisedEffects.Add(prototype.ID, moodChange); if (prototype.Timeout != 0) diff --git a/Content.Server/NPC/Components/NPCJukeComponent.cs b/Content.Server/NPC/Components/NPCJukeComponent.cs index 2c4136c24b9..768feeca6fc 100644 --- a/Content.Server/NPC/Components/NPCJukeComponent.cs +++ b/Content.Server/NPC/Components/NPCJukeComponent.cs @@ -1,4 +1,3 @@ -using Content.Server.NPC.HTN.PrimitiveTasks.Operators.Combat; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; namespace Content.Server.NPC.Components; @@ -6,17 +5,20 @@ namespace Content.Server.NPC.Components; [RegisterComponent, AutoGenerateComponentPause] public sealed partial class NPCJukeComponent : Component { - [DataField("jukeType")] + [DataField] public JukeType JukeType = JukeType.Away; - [DataField("jukeDuration")] + [DataField] public float JukeDuration = 0.5f; - [DataField("nextJuke", customTypeSerializer:typeof(TimeOffsetSerializer))] + [DataField] + public float JukeCooldown = 3f; + + [DataField(customTypeSerializer: typeof(TimeOffsetSerializer))] [AutoPausedField] public TimeSpan NextJuke; - [DataField("targetTile")] + [DataField] public Vector2i? TargetTile; } diff --git a/Content.Server/NPC/Components/NPCRetaliationComponent.cs b/Content.Server/NPC/Components/NPCRetaliationComponent.cs index c0bf54d76e7..21b806c4486 100644 --- a/Content.Server/NPC/Components/NPCRetaliationComponent.cs +++ b/Content.Server/NPC/Components/NPCRetaliationComponent.cs @@ -21,4 +21,10 @@ public sealed partial class NPCRetaliationComponent : Component /// todo: this needs to support timeoffsetserializer at some point [DataField("attackMemories")] public Dictionary AttackMemories = new(); + + /// + /// Whether this NPC will retaliate against a "Friendly" NPC. + /// + [DataField] + public bool RetaliateFriendlies; } diff --git a/Content.Server/NPC/Components/NpcFactionMemberComponent.cs b/Content.Server/NPC/Components/NpcFactionMemberComponent.cs index ce7e59ea2c7..f38d8cca0f4 100644 --- a/Content.Server/NPC/Components/NpcFactionMemberComponent.cs +++ b/Content.Server/NPC/Components/NpcFactionMemberComponent.cs @@ -4,7 +4,6 @@ namespace Content.Server.NPC.Components { [RegisterComponent] - [Access(typeof(NpcFactionSystem))] public sealed partial class NpcFactionMemberComponent : Component { /// diff --git a/Content.Server/NPC/HTN/Preconditions/GunAmmoPrecondition.cs b/Content.Server/NPC/HTN/Preconditions/GunAmmoPrecondition.cs index fe3b844ae34..58647d88749 100644 --- a/Content.Server/NPC/HTN/Preconditions/GunAmmoPrecondition.cs +++ b/Content.Server/NPC/HTN/Preconditions/GunAmmoPrecondition.cs @@ -35,7 +35,7 @@ public override bool IsMet(NPCBlackboard blackboard) else percent = ammoEv.Count / (float) ammoEv.Capacity; - percent = Math.Clamp(percent, 0f, 1f); + percent = System.Math.Clamp(percent, 0f, 1f); if (MaxPercent < percent) return false; diff --git a/Content.Server/NPC/HTN/Preconditions/InContainerPrecondition.cs b/Content.Server/NPC/HTN/Preconditions/InContainerPrecondition.cs new file mode 100644 index 00000000000..aa0ad98edec --- /dev/null +++ b/Content.Server/NPC/HTN/Preconditions/InContainerPrecondition.cs @@ -0,0 +1,27 @@ +using Robust.Server.Containers; + +namespace Content.Server.NPC.HTN.Preconditions; + +/// +/// Checks if the owner in container or not +/// +public sealed partial class InContainerPrecondition : HTNPrecondition +{ + private ContainerSystem _container = default!; + + [ViewVariables(VVAccess.ReadWrite)] [DataField("isInContainer")] public bool IsInContainer = true; + + public override void Initialize(IEntitySystemManager sysManager) + { + base.Initialize(sysManager); + _container = sysManager.GetEntitySystem(); + } + + public override bool IsMet(NPCBlackboard blackboard) + { + var owner = blackboard.GetValue(NPCBlackboard.Owner); + + return IsInContainer && _container.IsEntityInContainer(owner) || + !IsInContainer && !_container.IsEntityInContainer(owner); + } +} diff --git a/Content.Server/NPC/HTN/Preconditions/KeyNotExistsPrecondition.cs b/Content.Server/NPC/HTN/Preconditions/KeyNotExistsPrecondition.cs new file mode 100644 index 00000000000..c12663901c7 --- /dev/null +++ b/Content.Server/NPC/HTN/Preconditions/KeyNotExistsPrecondition.cs @@ -0,0 +1,12 @@ +namespace Content.Server.NPC.HTN.Preconditions; + +public sealed partial class KeyNotExistsPrecondition : HTNPrecondition +{ + [DataField(required: true)] + public string Key = string.Empty; + + public override bool IsMet(NPCBlackboard blackboard) + { + return !blackboard.ContainsKey(Key); + } +} diff --git a/Content.Server/NPC/HTN/Preconditions/Math/KeyBoolEqualsPrecondition.cs b/Content.Server/NPC/HTN/Preconditions/Math/KeyBoolEqualsPrecondition.cs new file mode 100644 index 00000000000..8c7920e8be5 --- /dev/null +++ b/Content.Server/NPC/HTN/Preconditions/Math/KeyBoolEqualsPrecondition.cs @@ -0,0 +1,23 @@ +namespace Content.Server.NPC.HTN.Preconditions.Math; + +/// +/// Checks for the presence of data in the blackboard and makes a comparison with the specified boolean +/// +public sealed partial class KeyBoolEqualsPrecondition : HTNPrecondition +{ + [Dependency] private readonly IEntityManager _entManager = default!; + + [DataField(required: true)] + public string Key = string.Empty; + + [DataField(required: true)] + public bool Value; + + public override bool IsMet(NPCBlackboard blackboard) + { + if (!blackboard.TryGetValue(Key, out var value, _entManager)) + return false; + + return Value == value; + } +} diff --git a/Content.Server/NPC/HTN/Preconditions/Math/KeyFloatEqualsPrecondition.cs b/Content.Server/NPC/HTN/Preconditions/Math/KeyFloatEqualsPrecondition.cs new file mode 100644 index 00000000000..802fdaf2b9c --- /dev/null +++ b/Content.Server/NPC/HTN/Preconditions/Math/KeyFloatEqualsPrecondition.cs @@ -0,0 +1,18 @@ +namespace Content.Server.NPC.HTN.Preconditions.Math; + +public sealed partial class KeyFloatEqualsPrecondition : HTNPrecondition +{ + [Dependency] private readonly IEntityManager _entManager = default!; + + [DataField(required: true)] + public string Key = string.Empty; + + [DataField(required: true)] + public float Value; + + public override bool IsMet(NPCBlackboard blackboard) + { + return blackboard.TryGetValue(Key, out var value, _entManager) && + MathHelper.CloseTo(value, value); + } +} diff --git a/Content.Server/NPC/HTN/Preconditions/Math/KeyFloatGreaterPrecondition.cs b/Content.Server/NPC/HTN/Preconditions/Math/KeyFloatGreaterPrecondition.cs new file mode 100644 index 00000000000..3a9ac366980 --- /dev/null +++ b/Content.Server/NPC/HTN/Preconditions/Math/KeyFloatGreaterPrecondition.cs @@ -0,0 +1,17 @@ +namespace Content.Server.NPC.HTN.Preconditions.Math; + +public sealed partial class KeyFloatGreaterPrecondition : HTNPrecondition +{ + [Dependency] private readonly IEntityManager _entManager = default!; + + [DataField(required: true)] + public string Key = string.Empty; + + [DataField(required: true)] + public float Value; + + public override bool IsMet(NPCBlackboard blackboard) + { + return blackboard.TryGetValue(Key, out var value, _entManager) && value > Value; + } +} diff --git a/Content.Server/NPC/HTN/Preconditions/Math/KeyFloatLessPrecondition.cs b/Content.Server/NPC/HTN/Preconditions/Math/KeyFloatLessPrecondition.cs new file mode 100644 index 00000000000..5cd51d7a7c5 --- /dev/null +++ b/Content.Server/NPC/HTN/Preconditions/Math/KeyFloatLessPrecondition.cs @@ -0,0 +1,17 @@ +namespace Content.Server.NPC.HTN.Preconditions.Math; + +public sealed partial class KeyFloatLessPrecondition : HTNPrecondition +{ + [Dependency] private readonly IEntityManager _entManager = default!; + + [DataField(required: true)] + public string Key = string.Empty; + + [DataField(required: true)] + public float Value; + + public override bool IsMet(NPCBlackboard blackboard) + { + return blackboard.TryGetValue(Key, out var value, _entManager) && value < Value; + } +} diff --git a/Content.Server/NPC/HTN/PrimitiveTasks/Operators/Combat/ContainerOperator.cs b/Content.Server/NPC/HTN/PrimitiveTasks/Operators/Combat/ContainerOperator.cs new file mode 100644 index 00000000000..667d0b8ec40 --- /dev/null +++ b/Content.Server/NPC/HTN/PrimitiveTasks/Operators/Combat/ContainerOperator.cs @@ -0,0 +1,40 @@ +using Robust.Server.Containers; + +namespace Content.Server.NPC.HTN.PrimitiveTasks.Operators.Combat; + +public sealed partial class ContainerOperator : HTNOperator +{ + [Dependency] private readonly IEntityManager _entManager = default!; + private ContainerSystem _container = default!; + private EntityQuery _transformQuery; + + [DataField("shutdownState")] + public HTNPlanState ShutdownState { get; private set; } = HTNPlanState.TaskFinished; + + [DataField("targetKey", required: true)] + public string TargetKey = default!; + + public override void Initialize(IEntitySystemManager sysManager) + { + base.Initialize(sysManager); + _container = sysManager.GetEntitySystem(); + _transformQuery = _entManager.GetEntityQuery(); + } + + public override void Startup(NPCBlackboard blackboard) + { + base.Startup(blackboard); + var owner = blackboard.GetValue(NPCBlackboard.Owner); + + if (!_container.TryGetOuterContainer(owner, _transformQuery.GetComponent(owner), out var outerContainer) && outerContainer == null) + return; + + var target = outerContainer.Owner; + blackboard.SetValue(TargetKey, target); + } + + public override HTNOperatorStatus Update(NPCBlackboard blackboard, float frameTime) + { + return HTNOperatorStatus.Finished; + } +} diff --git a/Content.Server/NPC/HTN/PrimitiveTasks/Operators/Combat/EscapeOperator.cs b/Content.Server/NPC/HTN/PrimitiveTasks/Operators/Combat/EscapeOperator.cs new file mode 100644 index 00000000000..a794e1e3140 --- /dev/null +++ b/Content.Server/NPC/HTN/PrimitiveTasks/Operators/Combat/EscapeOperator.cs @@ -0,0 +1,140 @@ +using System.Threading; +using System.Threading.Tasks; +using Content.Server.NPC.Components; +using Content.Server.Storage.EntitySystems; +using Content.Shared.CombatMode; +using Robust.Server.Containers; + +namespace Content.Server.NPC.HTN.PrimitiveTasks.Operators.Combat.Melee; + +public sealed partial class EscapeOperator : HTNOperator, IHtnConditionalShutdown +{ + [Dependency] private readonly IEntityManager _entManager = default!; + private ContainerSystem _container = default!; + private EntityStorageSystem _entityStorage = default!; + + [DataField("shutdownState")] + public HTNPlanState ShutdownState { get; private set; } = HTNPlanState.TaskFinished; + + [DataField("targetKey", required: true)] + public string TargetKey = default!; + + public override void Initialize(IEntitySystemManager sysManager) + { + base.Initialize(sysManager); + _container = sysManager.GetEntitySystem(); + _entityStorage = sysManager.GetEntitySystem(); + } + + public override void Startup(NPCBlackboard blackboard) + { + base.Startup(blackboard); + var owner = blackboard.GetValue(NPCBlackboard.Owner); + var target = blackboard.GetValue(TargetKey); + + if (_entityStorage.TryOpenStorage(owner, target)) + { + TaskShutdown(blackboard, HTNOperatorStatus.Finished); + return; + } + + var melee = _entManager.EnsureComponent(owner); + melee.MissChance = blackboard.GetValueOrDefault(NPCBlackboard.MeleeMissChance, _entManager); + melee.Target = target; + } + + public override async Task<(bool Valid, Dictionary? Effects)> Plan(NPCBlackboard blackboard, + CancellationToken cancelToken) + { + var owner = blackboard.GetValue(NPCBlackboard.Owner); + if (!blackboard.TryGetValue(TargetKey, out var target, _entManager)) + { + return (false, null); + } + + if (!_container.IsEntityInContainer(owner)) + { + return (false, null); + } + + if (_entityStorage.TryOpenStorage(owner, target)) + { + return (false, null); + } + + return (true, null); + } + + public void ConditionalShutdown(NPCBlackboard blackboard) + { + var owner = blackboard.GetValue(NPCBlackboard.Owner); + _entManager.System().SetInCombatMode(owner, false); + _entManager.RemoveComponent(owner); + blackboard.Remove(TargetKey); + } + + public override void TaskShutdown(NPCBlackboard blackboard, HTNOperatorStatus status) + { + base.TaskShutdown(blackboard, status); + + ConditionalShutdown(blackboard); + } + + public override void PlanShutdown(NPCBlackboard blackboard) + { + base.PlanShutdown(blackboard); + + ConditionalShutdown(blackboard); + } + + public override HTNOperatorStatus Update(NPCBlackboard blackboard, float frameTime) + { + base.Update(blackboard, frameTime); + var owner = blackboard.GetValue(NPCBlackboard.Owner); + HTNOperatorStatus status; + + if (_entManager.TryGetComponent(owner, out var combat) && + blackboard.TryGetValue(TargetKey, out var target, _entManager)) + { + combat.Target = target; + + // Success + if (!_container.IsEntityInContainer(owner)) + { + status = HTNOperatorStatus.Finished; + } + else + { + if (_entityStorage.TryOpenStorage(owner, target)) + { + status = HTNOperatorStatus.Finished; + } + else + { + switch (combat.Status) + { + case CombatStatus.TargetOutOfRange: + case CombatStatus.Normal: + status = HTNOperatorStatus.Continuing; + break; + default: + status = HTNOperatorStatus.Failed; + break; + } + } + } + } + else + { + status = HTNOperatorStatus.Failed; + } + + // Mark it as finished to continue the plan. + if (status == HTNOperatorStatus.Continuing && ShutdownState == HTNPlanState.PlanFinished) + { + status = HTNOperatorStatus.Finished; + } + + return status; + } +} diff --git a/Content.Server/NPC/HTN/PrimitiveTasks/Operators/Combat/JukeOperator.cs b/Content.Server/NPC/HTN/PrimitiveTasks/Operators/Combat/JukeOperator.cs index 02a3b085104..68029f5a4c2 100644 --- a/Content.Server/NPC/HTN/PrimitiveTasks/Operators/Combat/JukeOperator.cs +++ b/Content.Server/NPC/HTN/PrimitiveTasks/Operators/Combat/JukeOperator.cs @@ -6,17 +6,31 @@ public sealed partial class JukeOperator : HTNOperator, IHtnConditionalShutdown { [Dependency] private readonly IEntityManager _entManager = default!; - [DataField("jukeType")] + [DataField] public JukeType JukeType = JukeType.AdjacentTile; - [DataField("shutdownState")] + [DataField] public HTNPlanState ShutdownState { get; private set; } = HTNPlanState.PlanFinished; + /// + /// Controls how long(in seconds) the NPC will move while juking. + /// + [DataField] + public float JukeDuration = 0.5f; + + /// + /// Controls how often (in seconds) an NPC will try to juke. + /// + [DataField] + public float JukeCooldown = 3f; + public override void Startup(NPCBlackboard blackboard) { base.Startup(blackboard); var juke = _entManager.EnsureComponent(blackboard.GetValue(NPCBlackboard.Owner)); juke.JukeType = JukeType; + juke.JukeDuration = JukeDuration; + juke.JukeCooldown = JukeCooldown; } public override HTNOperatorStatus Update(NPCBlackboard blackboard, float frameTime) diff --git a/Content.Server/NPC/HTN/PrimitiveTasks/Operators/Combat/UnPullOperator.cs b/Content.Server/NPC/HTN/PrimitiveTasks/Operators/Combat/UnPullOperator.cs new file mode 100644 index 00000000000..54f422fe67d --- /dev/null +++ b/Content.Server/NPC/HTN/PrimitiveTasks/Operators/Combat/UnPullOperator.cs @@ -0,0 +1,35 @@ +using Content.Shared.Movement.Pulling.Components; +using Content.Shared.Movement.Pulling.Systems; + +namespace Content.Server.NPC.HTN.PrimitiveTasks.Operators.Combat; + +public sealed partial class UnPullOperator : HTNOperator +{ + [Dependency] private readonly IEntityManager _entManager = default!; + private PullingSystem _pulling = default!; + + private EntityQuery _pullableQuery; + + [DataField("shutdownState")] + public HTNPlanState ShutdownState { get; private set; } = HTNPlanState.TaskFinished; + + public override void Initialize(IEntitySystemManager sysManager) + { + base.Initialize(sysManager); + _pulling = sysManager.GetEntitySystem(); + _pullableQuery = _entManager.GetEntityQuery(); + } + + public override void Startup(NPCBlackboard blackboard) + { + base.Startup(blackboard); + var owner = blackboard.GetValue(NPCBlackboard.Owner); + + _pulling.TryStopPull(owner, _pullableQuery.GetComponent(owner), owner); + } + + public override HTNOperatorStatus Update(NPCBlackboard blackboard, float frameTime) + { + return HTNOperatorStatus.Finished; + } +} diff --git a/Content.Server/NPC/HTN/PrimitiveTasks/Operators/Combat/UnbuckleOperator.cs b/Content.Server/NPC/HTN/PrimitiveTasks/Operators/Combat/UnbuckleOperator.cs new file mode 100644 index 00000000000..207665d786f --- /dev/null +++ b/Content.Server/NPC/HTN/PrimitiveTasks/Operators/Combat/UnbuckleOperator.cs @@ -0,0 +1,34 @@ +using Content.Server.Buckle.Systems; +using Content.Shared.Buckle.Components; + +namespace Content.Server.NPC.HTN.PrimitiveTasks.Operators.Combat; + +public sealed partial class UnbuckleOperator : HTNOperator +{ + [Dependency] private readonly IEntityManager _entManager = default!; + private BuckleSystem _buckle = default!; + + [DataField("shutdownState")] + public HTNPlanState ShutdownState { get; private set; } = HTNPlanState.TaskFinished; + + public override void Initialize(IEntitySystemManager sysManager) + { + base.Initialize(sysManager); + _buckle = sysManager.GetEntitySystem(); + } + + public override void Startup(NPCBlackboard blackboard) + { + base.Startup(blackboard); + var owner = blackboard.GetValue(NPCBlackboard.Owner); + if (!_entManager.TryGetComponent(owner, out var buckle) || !buckle.Buckled) + return; + + _buckle.TryUnbuckle(owner, owner, true, buckle); + } + + public override HTNOperatorStatus Update(NPCBlackboard blackboard, float frameTime) + { + return HTNOperatorStatus.Finished; + } +} diff --git a/Content.Server/NPC/HTN/PrimitiveTasks/Operators/Interactions/DrainOperator.cs b/Content.Server/NPC/HTN/PrimitiveTasks/Operators/Interactions/DrainOperator.cs new file mode 100644 index 00000000000..ecb6e16c9d8 --- /dev/null +++ b/Content.Server/NPC/HTN/PrimitiveTasks/Operators/Interactions/DrainOperator.cs @@ -0,0 +1,50 @@ +using Content.Server.LifeDrainer; + +namespace Content.Server.NPC.HTN.PrimitiveTasks.Operators.Interactions; + +public sealed partial class DrainOperator : HTNOperator +{ + [Dependency] private readonly IEntityManager _entMan = default!; + + private LifeDrainerSystem _drainer = default!; + private EntityQuery _drainerQuery; + + [DataField(required: true)] + public string DrainKey = string.Empty; + + public override void Initialize(IEntitySystemManager sysManager) + { + base.Initialize(sysManager); + + _drainer = sysManager.GetEntitySystem(); + _drainerQuery = _entMan.GetEntityQuery(); + } + + public override HTNOperatorStatus Update(NPCBlackboard blackboard, float frameTime) + { + var owner = blackboard.GetValue(NPCBlackboard.Owner); + var target = blackboard.GetValue(DrainKey); + + if (_entMan.Deleted(target)) + return HTNOperatorStatus.Failed; + + if (!_drainerQuery.TryComp(owner, out var wisp)) + return HTNOperatorStatus.Failed; + + // still draining hold your horses + if (_drainer.IsDraining(wisp)) + return HTNOperatorStatus.Continuing; + + // not draining and no target set, start to drain + if (wisp.Target == null) + { + return _drainer.TryDrain((owner, wisp), target) + ? HTNOperatorStatus.Continuing + : HTNOperatorStatus.Failed; + } + + // stopped draining, clean up and find another one after + _drainer.CancelDrain(wisp); + return HTNOperatorStatus.Finished; + } +} diff --git a/Content.Server/NPC/HTN/PrimitiveTasks/Operators/Math/AddFloatOperator.cs b/Content.Server/NPC/HTN/PrimitiveTasks/Operators/Math/AddFloatOperator.cs new file mode 100644 index 00000000000..00404517c9e --- /dev/null +++ b/Content.Server/NPC/HTN/PrimitiveTasks/Operators/Math/AddFloatOperator.cs @@ -0,0 +1,33 @@ +using System.Threading; +using System.Threading.Tasks; + +namespace Content.Server.NPC.HTN.PrimitiveTasks.Operators.Math; + +/// +/// Gets the key, and adds the value to that float +/// +public sealed partial class AddFloatOperator : HTNOperator +{ + [Dependency] private readonly IEntityManager _entManager = default!; + + [DataField(required: true)] + public string TargetKey = string.Empty; + + [DataField, ViewVariables(VVAccess.ReadWrite)] + public float Amount; + + public override async Task<(bool Valid, Dictionary? Effects)> Plan(NPCBlackboard blackboard, + CancellationToken cancelToken) + { + if (!blackboard.TryGetValue(TargetKey, out var value, _entManager)) + return (false, null); + + return ( + true, + new Dictionary + { + { TargetKey, value + Amount } + } + ); + } +} diff --git a/Content.Server/NPC/HTN/PrimitiveTasks/Operators/Math/SetBoolOperator.cs b/Content.Server/NPC/HTN/PrimitiveTasks/Operators/Math/SetBoolOperator.cs new file mode 100644 index 00000000000..a40b96798d4 --- /dev/null +++ b/Content.Server/NPC/HTN/PrimitiveTasks/Operators/Math/SetBoolOperator.cs @@ -0,0 +1,28 @@ +using System.Threading; +using System.Threading.Tasks; + +namespace Content.Server.NPC.HTN.PrimitiveTasks.Operators.Math; + +/// +/// Just sets a blackboard key to a bool +/// +public sealed partial class SetBoolOperator : HTNOperator +{ + [DataField(required: true)] + public string TargetKey = string.Empty; + + [DataField, ViewVariables(VVAccess.ReadWrite)] + public bool Value; + + public override async Task<(bool Valid, Dictionary? Effects)> Plan(NPCBlackboard blackboard, + CancellationToken cancelToken) + { + return ( + true, + new Dictionary + { + { TargetKey, Value } + } + ); + } +} diff --git a/Content.Server/NPC/HTN/PrimitiveTasks/Operators/Math/SetFloatOperator.cs b/Content.Server/NPC/HTN/PrimitiveTasks/Operators/Math/SetFloatOperator.cs new file mode 100644 index 00000000000..76842b431f7 --- /dev/null +++ b/Content.Server/NPC/HTN/PrimitiveTasks/Operators/Math/SetFloatOperator.cs @@ -0,0 +1,28 @@ +using System.Threading; +using System.Threading.Tasks; + +namespace Content.Server.NPC.HTN.PrimitiveTasks.Operators.Math; + +/// +/// Just sets a blackboard key to a float +/// +public sealed partial class SetFloatOperator : HTNOperator +{ + [DataField(required: true)] + public string TargetKey = string.Empty; + + [DataField, ViewVariables(VVAccess.ReadWrite)] + public float Amount; + + public override async Task<(bool Valid, Dictionary? Effects)> Plan(NPCBlackboard blackboard, + CancellationToken cancelToken) + { + return ( + true, + new Dictionary + { + { TargetKey, Amount } + } + ); + } +} diff --git a/Content.Server/NPC/HTN/PrimitiveTasks/Operators/Math/SetRandomFloatOperator.cs b/Content.Server/NPC/HTN/PrimitiveTasks/Operators/Math/SetRandomFloatOperator.cs new file mode 100644 index 00000000000..999756f1f74 --- /dev/null +++ b/Content.Server/NPC/HTN/PrimitiveTasks/Operators/Math/SetRandomFloatOperator.cs @@ -0,0 +1,34 @@ +using System.Threading; +using System.Threading.Tasks; +using Robust.Shared.Random; + +namespace Content.Server.NPC.HTN.PrimitiveTasks.Operators.Math; + +/// +/// Sets a random float from MinAmount to MaxAmount to blackboard +/// +public sealed partial class SetRandomFloatOperator : HTNOperator +{ + [Dependency] private readonly IRobustRandom _random = default!; + + [DataField(required: true)] + public string TargetKey = string.Empty; + + [DataField, ViewVariables(VVAccess.ReadWrite)] + public float MaxAmount = 1f; + + [DataField, ViewVariables(VVAccess.ReadWrite)] + public float MinAmount = 0f; + + public override async Task<(bool Valid, Dictionary? Effects)> Plan(NPCBlackboard blackboard, + CancellationToken cancelToken) + { + return ( + true, + new Dictionary + { + { TargetKey, _random.NextFloat(MinAmount, MaxAmount) } + } + ); + } +} diff --git a/Content.Server/NPC/HTN/PrimitiveTasks/Operators/PickDrainTargetOperator.cs b/Content.Server/NPC/HTN/PrimitiveTasks/Operators/PickDrainTargetOperator.cs new file mode 100644 index 00000000000..52c12777aa5 --- /dev/null +++ b/Content.Server/NPC/HTN/PrimitiveTasks/Operators/PickDrainTargetOperator.cs @@ -0,0 +1,74 @@ +using System.Threading; +using System.Threading.Tasks; +using Content.Server.LifeDrainer; +using Content.Server.NPC.Pathfinding; +using Content.Server.NPC.Systems; + +namespace Content.Server.NPC.HTN.PrimitiveTasks.Operators; + +public sealed partial class PickDrainTargetOperator : HTNOperator +{ + [Dependency] private readonly IEntityManager _entMan = default!; + + private LifeDrainerSystem _drainer = default!; + private NpcFactionSystem _faction = default!; + private PathfindingSystem _pathfinding = default!; + + private EntityQuery _drainerQuery; + private EntityQuery _xformQuery; + + [DataField(required: true)] public string + RangeKey = string.Empty, + TargetKey = string.Empty, + DrainKey = string.Empty; + + /// + /// Where the pathfinding result will be stored (if applicable). This gets removed after execution. + /// + [DataField] + public string PathfindKey = NPCBlackboard.PathfindKey; + + public override void Initialize(IEntitySystemManager sysMan) + { + base.Initialize(sysMan); + + _drainer = sysMan.GetEntitySystem(); + _faction = sysMan.GetEntitySystem(); + _pathfinding = sysMan.GetEntitySystem(); + + _drainerQuery = _entMan.GetEntityQuery(); + _xformQuery = _entMan.GetEntityQuery(); + } + + public override async Task<(bool Valid, Dictionary? Effects)> Plan(NPCBlackboard blackboard, CancellationToken cancelToken) { + var owner = blackboard.GetValue(NPCBlackboard.Owner); + if (!_drainerQuery.TryComp(owner, out var drainer)) + return (false, null); + + var ent = (owner, drainer); + if (!blackboard.TryGetValue(RangeKey, out var range, _entMan)) + return (false, null); + + // find crit psionics nearby + foreach (var target in _faction.GetNearbyHostiles(owner, range)) + { + if (!_drainer.CanDrain(ent, target) || !_xformQuery.TryComp(target, out var xform)) + continue; + + // pathfind to the first crit psionic in range to start draining + var targetCoords = xform.Coordinates; + var path = await _pathfinding.GetPath(owner, target, range, cancelToken); + if (path.Result != PathResult.Path) + continue; + + return (true, new Dictionary() + { + { TargetKey, targetCoords }, + { DrainKey, target }, + { PathfindKey, path } + }); + } + + return (false, null); + } +} diff --git a/Content.Server/NPC/HTN/PrimitiveTasks/Operators/PlaySoundOperator.cs b/Content.Server/NPC/HTN/PrimitiveTasks/Operators/PlaySoundOperator.cs new file mode 100644 index 00000000000..57cc2e91e44 --- /dev/null +++ b/Content.Server/NPC/HTN/PrimitiveTasks/Operators/PlaySoundOperator.cs @@ -0,0 +1,28 @@ +using Robust.Server.Audio; +using Robust.Shared.Audio; + +namespace Content.Server.NPC.HTN.PrimitiveTasks.Operators; + +public sealed partial class PlaySoundOperator : HTNOperator +{ + private AudioSystem _audio = default!; + + [DataField(required: true)] + public SoundSpecifier? Sound; + + public override void Initialize(IEntitySystemManager sysManager) + { + base.Initialize(sysManager); + + _audio = IoCManager.Resolve().GetEntitySystem(); + } + + public override HTNOperatorStatus Update(NPCBlackboard blackboard, float frameTime) + { + var uid = blackboard.GetValue(NPCBlackboard.Owner); + + _audio.PlayPvs(Sound, uid); + + return base.Update(blackboard, frameTime); + } +} diff --git a/Content.Server/NPC/HTN/PrimitiveTasks/Operators/SayKeyOperator.cs b/Content.Server/NPC/HTN/PrimitiveTasks/Operators/SayKeyOperator.cs new file mode 100644 index 00000000000..3422c77249a --- /dev/null +++ b/Content.Server/NPC/HTN/PrimitiveTasks/Operators/SayKeyOperator.cs @@ -0,0 +1,37 @@ +using Content.Server.Chat.Systems; +using Content.Shared.Chat; + +namespace Content.Server.NPC.HTN.PrimitiveTasks.Operators; + +public sealed partial class SayKeyOperator : HTNOperator +{ + [Dependency] private readonly IEntityManager _entManager = default!; + + private ChatSystem _chat = default!; + + [DataField(required: true)] + public string Key = string.Empty; + + /// + /// Whether to hide message from chat window and logs. + /// + [DataField] + public bool Hidden; + + public override void Initialize(IEntitySystemManager sysManager) + { + base.Initialize(sysManager); + _chat = IoCManager.Resolve().GetEntitySystem(); + } + + public override HTNOperatorStatus Update(NPCBlackboard blackboard, float frameTime) + { + if (!blackboard.TryGetValue(Key, out var value, _entManager)) + return HTNOperatorStatus.Failed; + + var speaker = blackboard.GetValue(NPCBlackboard.Owner); + _chat.TrySendInGameICMessage(speaker, value.ToString() ?? "Oh no...", InGameICChatType.Speak, hideChat: Hidden, hideLog: Hidden); + + return base.Update(blackboard, frameTime); + } +} diff --git a/Content.Server/NPC/HTN/PrimitiveTasks/Operators/SetFloatOperator.cs b/Content.Server/NPC/HTN/PrimitiveTasks/Operators/SetFloatOperator.cs deleted file mode 100644 index 7a460592cb4..00000000000 --- a/Content.Server/NPC/HTN/PrimitiveTasks/Operators/SetFloatOperator.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System.Threading; -using System.Threading.Tasks; - -namespace Content.Server.NPC.HTN.PrimitiveTasks.Operators; - -/// -/// Just sets a blackboard key to a float -/// -public sealed partial class SetFloatOperator : HTNOperator -{ - [DataField("targetKey", required: true)] public string TargetKey = string.Empty; - - [ViewVariables(VVAccess.ReadWrite), DataField("amount")] - public float Amount; - - public override async Task<(bool Valid, Dictionary? Effects)> Plan(NPCBlackboard blackboard, - CancellationToken cancelToken) - { - return (true, new Dictionary() - { - {TargetKey, Amount}, - }); - } -} diff --git a/Content.Server/NPC/Pathfinding/PathfindingSystem.Distance.cs b/Content.Server/NPC/Pathfinding/PathfindingSystem.Distance.cs index 95d5c9c4651..35deb6a0ca3 100644 --- a/Content.Server/NPC/Pathfinding/PathfindingSystem.Distance.cs +++ b/Content.Server/NPC/Pathfinding/PathfindingSystem.Distance.cs @@ -36,7 +36,7 @@ private Vector2 GetDiff(PathPoly start, PathPoly end) return Vector2.Zero; } - endPos = startXform.InvWorldMatrix.Transform(endXform.WorldMatrix.Transform(endPos)); + endPos = Vector2.Transform(Vector2.Transform(endPos, endXform.WorldMatrix), startXform.InvWorldMatrix); } // TODO: Numerics when we changeover. diff --git a/Content.Server/NPC/Pathfinding/PathfindingSystem.Grid.cs b/Content.Server/NPC/Pathfinding/PathfindingSystem.Grid.cs index 6462c10fe55..35122e3e62f 100644 --- a/Content.Server/NPC/Pathfinding/PathfindingSystem.Grid.cs +++ b/Content.Server/NPC/Pathfinding/PathfindingSystem.Grid.cs @@ -395,7 +395,7 @@ private Vector2i GetOrigin(Vector2 localPos) private Vector2i GetOrigin(EntityCoordinates coordinates, EntityUid gridUid) { - var localPos = _transform.GetInvWorldMatrix(gridUid).Transform(coordinates.ToMapPos(EntityManager, _transform)); + var localPos = Vector2.Transform(coordinates.ToMapPos(EntityManager, _transform), _transform.GetInvWorldMatrix(gridUid)); return new Vector2i((int) Math.Floor(localPos.X / ChunkSize), (int) Math.Floor(localPos.Y / ChunkSize)); } diff --git a/Content.Server/NPC/Pathfinding/PathfindingSystem.cs b/Content.Server/NPC/Pathfinding/PathfindingSystem.cs index a59af88ff58..af9c44a1efc 100644 --- a/Content.Server/NPC/Pathfinding/PathfindingSystem.cs +++ b/Content.Server/NPC/Pathfinding/PathfindingSystem.cs @@ -405,7 +405,7 @@ public async void GetPathEvent( return null; } - var localPos = xform.InvWorldMatrix.Transform(coordinates.ToMapPos(EntityManager, _transform)); + var localPos = Vector2.Transform(coordinates.ToMapPos(EntityManager, _transform), xform.InvWorldMatrix); var origin = GetOrigin(localPos); if (!TryGetChunk(origin, comp, out var chunk)) diff --git a/Content.Server/NPC/Systems/NPCJukeSystem.cs b/Content.Server/NPC/Systems/NPCJukeSystem.cs index da9fa1f7615..5a724762ef6 100644 --- a/Content.Server/NPC/Systems/NPCJukeSystem.cs +++ b/Content.Server/NPC/Systems/NPCJukeSystem.cs @@ -3,6 +3,7 @@ using Content.Server.NPC.Events; using Content.Server.NPC.HTN.PrimitiveTasks.Operators.Combat; using Content.Server.Weapons.Melee; +using Content.Shared.Coordinates.Helpers; using Content.Shared.NPC; using Content.Shared.Weapons.Melee; using Robust.Shared.Collections; @@ -38,22 +39,19 @@ public override void Initialize() private void OnJukeSteering(EntityUid uid, NPCJukeComponent component, ref NPCSteeringEvent args) { - if (component.JukeType == JukeType.AdjacentTile) + if (_timing.CurTime < component.NextJuke) { - if (_npcRangedQuery.TryGetComponent(uid, out var ranged) && - ranged.Status == CombatStatus.NotInSight) - { - component.TargetTile = null; - return; - } + component.TargetTile = null; + return; + } - if (_timing.CurTime < component.NextJuke) - { - component.TargetTile = null; - return; - } + component.NextJuke = _timing.CurTime + TimeSpan.FromSeconds(component.JukeCooldown); - if (!TryComp(args.Transform.GridUid, out var grid)) + if (component.JukeType == JukeType.AdjacentTile) + { + if (_npcRangedQuery.TryGetComponent(uid, out var ranged) + && ranged.Status is CombatStatus.NotInSight + || !TryComp(args.Transform.GridUid, out var grid)) { component.TargetTile = null; return; @@ -107,12 +105,11 @@ private void OnJukeSteering(EntityUid uid, NPCJukeComponent component, ref NPCSt var elapsed = _timing.CurTime - component.NextJuke; - // Finished juke, reset timer. - if (elapsed.TotalSeconds > component.JukeDuration || - currentTile == component.TargetTile) + // Finished juke. + if (elapsed.TotalSeconds > component.JukeDuration + || currentTile == component.TargetTile) { component.TargetTile = null; - component.NextJuke = _timing.CurTime + TimeSpan.FromSeconds(component.JukeDuration); return; } @@ -155,9 +152,7 @@ private void OnJukeSteering(EntityUid uid, NPCJukeComponent component, ref NPCSt var obstacleDirection = _transform.GetWorldPosition(melee.Target) - args.WorldPosition; if (obstacleDirection == Vector2.Zero) - { obstacleDirection = _random.NextVector2(); - } // If they're moving away then pursue anyway. // If just hit then always back up a bit. diff --git a/Content.Server/NPC/Systems/NPCRetaliationSystem.cs b/Content.Server/NPC/Systems/NPCRetaliationSystem.cs index cde8decefc4..a855c9915a0 100644 --- a/Content.Server/NPC/Systems/NPCRetaliationSystem.cs +++ b/Content.Server/NPC/Systems/NPCRetaliationSystem.cs @@ -47,7 +47,8 @@ public bool TryRetaliate(EntityUid uid, EntityUid target, NPCRetaliationComponen if (!HasComp(target)) return false; - if (_npcFaction.IsEntityFriendly(uid, target)) + if (!component.RetaliateFriendlies + && _npcFaction.IsEntityFriendly(uid, target)) return false; _npcFaction.AggroEntity(uid, target); diff --git a/Content.Server/NPC/Systems/NPCSystem.cs b/Content.Server/NPC/Systems/NPCSystem.cs index 8abe0f7f54c..24c038a3e7f 100644 --- a/Content.Server/NPC/Systems/NPCSystem.cs +++ b/Content.Server/NPC/Systems/NPCSystem.cs @@ -2,6 +2,8 @@ using Content.Server.NPC.Components; using Content.Server.NPC.HTN; using Content.Shared.CCVar; +using Content.Shared.Mind; +using Content.Shared.Mind.Components; using Content.Shared.Mobs; using Content.Shared.Mobs.Systems; using Content.Shared.NPC; @@ -48,6 +50,10 @@ public void OnPlayerNPCDetach(EntityUid uid, HTNComponent component, PlayerDetac if (_mobState.IsIncapacitated(uid) || TerminatingOrDeleted(uid)) return; + // This NPC has an attached mind, so it should not wake up. + if (TryComp(uid, out var mindContainer) && mindContainer.HasMind) + return; + WakeNPC(uid, component); } diff --git a/Content.Server/Ninja/Systems/NinjaGlovesSystem.cs b/Content.Server/Ninja/Systems/NinjaGlovesSystem.cs index d84a7287751..ac76ae6b771 100644 --- a/Content.Server/Ninja/Systems/NinjaGlovesSystem.cs +++ b/Content.Server/Ninja/Systems/NinjaGlovesSystem.cs @@ -1,8 +1,9 @@ using Content.Server.Communications; using Content.Server.Mind; using Content.Server.Ninja.Events; -using Content.Server.Objectives.Components; +using Content.Server.Objectives.Systems; using Content.Shared.Communications; +using Content.Shared.CriminalRecords.Components; using Content.Shared.Ninja.Components; using Content.Shared.Ninja.Systems; using Content.Shared.Research.Components; @@ -16,8 +17,8 @@ namespace Content.Server.Ninja.Systems; public sealed class NinjaGlovesSystem : SharedNinjaGlovesSystem { [Dependency] private readonly EmagProviderSystem _emagProvider = default!; + [Dependency] private readonly CodeConditionSystem _codeCondition = default!; [Dependency] private readonly CommsHackerSystem _commsHacker = default!; - [Dependency] private readonly MindSystem _mind = default!; [Dependency] private readonly SharedStunProviderSystem _stunProvider = default!; [Dependency] private readonly SpaceNinjaSystem _ninja = default!; @@ -88,12 +89,16 @@ private void EnableGloves(EntityUid uid, NinjaGlovesComponent comp, EntityUid us EnsureComp(user); // prevent calling in multiple threats by toggling gloves after - if (_mind.TryGetObjectiveComp(user, out var obj) && !obj.CalledInThreat) + if (!_codeCondition.IsCompleted(user, ninja.TerrorObjective)) { var hacker = EnsureComp(user); var rule = _ninja.NinjaRule(user); if (rule != null) _commsHacker.SetThreats(user, rule.Threats, hacker); } + if (!_codeCondition.IsCompleted(user, ninja.MassArrestObjective)) + { + EnsureComp(user); + } } } diff --git a/Content.Server/Ninja/Systems/SpaceNinjaSystem.cs b/Content.Server/Ninja/Systems/SpaceNinjaSystem.cs index 835ac7ad6cd..1dfaf4f3393 100644 --- a/Content.Server/Ninja/Systems/SpaceNinjaSystem.cs +++ b/Content.Server/Ninja/Systems/SpaceNinjaSystem.cs @@ -1,12 +1,15 @@ using Content.Server.Communications; using Content.Server.Chat.Managers; +using Content.Server.CriminalRecords.Systems; using Content.Server.GameTicking.Rules.Components; +using Content.Server.GenericAntag; +using Content.Server.Objectives.Components; +using Content.Server.Objectives.Systems; using Content.Server.Power.Components; using Content.Server.Power.EntitySystems; using Content.Server.PowerCell; using Content.Server.Research.Systems; using Content.Server.Roles; -using Content.Server.GenericAntag; using Content.Shared.Alert; using Content.Shared.Clothing.EntitySystems; using Content.Shared.Doors.Components; @@ -19,7 +22,6 @@ using Robust.Shared.Audio; using Robust.Shared.Player; using System.Diagnostics.CodeAnalysis; -using Content.Server.Objectives.Components; using Robust.Shared.Audio.Systems; namespace Content.Server.Ninja.Systems; @@ -28,7 +30,6 @@ namespace Content.Server.Ninja.Systems; // engi -> saboteur // medi -> idk reskin it // other -> assault -// TODO: when criminal records is merged, hack it to set everyone to arrest /// /// Main ninja system that handles ninja setup, provides helper methods for the rest of the code to use. @@ -37,6 +38,7 @@ public sealed class SpaceNinjaSystem : SharedSpaceNinjaSystem { [Dependency] private readonly AlertsSystem _alerts = default!; [Dependency] private readonly BatterySystem _battery = default!; + [Dependency] private readonly CodeConditionSystem _codeCondition = default!; [Dependency] private readonly IChatManager _chatMan = default!; [Dependency] private readonly PowerCellSystem _powerCell = default!; [Dependency] private readonly RoleSystem _role = default!; @@ -52,6 +54,7 @@ public override void Initialize() SubscribeLocalEvent(OnDoorjack); SubscribeLocalEvent(OnResearchStolen); SubscribeLocalEvent(OnThreatCalledIn); + SubscribeLocalEvent(OnCriminalRecordsHacked); } public override void Update(float frameTime) @@ -216,11 +219,21 @@ private void OnResearchStolen(EntityUid uid, SpaceNinjaComponent comp, ref Resea Popup.PopupEntity(str, uid, uid, PopupType.Medium); } - private void OnThreatCalledIn(EntityUid uid, SpaceNinjaComponent comp, ref ThreatCalledInEvent args) + private void OnThreatCalledIn(Entity ent, ref ThreatCalledInEvent args) { - if (_mind.TryGetObjectiveComp(uid, out var obj)) - { - obj.CalledInThreat = true; - } + _codeCondition.SetCompleted(ent.Owner, ent.Comp.TerrorObjective); + } + + private void OnCriminalRecordsHacked(Entity ent, ref CriminalRecordsHackedEvent args) + { + _codeCondition.SetCompleted(ent.Owner, ent.Comp.MassArrestObjective); + } + + /// + /// Called by when it detonates. + /// + public void DetonatedSpiderCharge(Entity ent) + { + _codeCondition.SetCompleted(ent.Owner, ent.Comp.SpiderChargeObjective); } } diff --git a/Content.Server/Ninja/Systems/SpiderChargeSystem.cs b/Content.Server/Ninja/Systems/SpiderChargeSystem.cs index 948d715f0a7..64c958d6f1a 100644 --- a/Content.Server/Ninja/Systems/SpiderChargeSystem.cs +++ b/Content.Server/Ninja/Systems/SpiderChargeSystem.cs @@ -19,6 +19,7 @@ public sealed class SpiderChargeSystem : EntitySystem [Dependency] private readonly MindSystem _mind = default!; [Dependency] private readonly PopupSystem _popup = default!; [Dependency] private readonly SharedTransformSystem _transform = default!; + [Dependency] private readonly SpaceNinjaSystem _ninja = default!; public override void Initialize() { @@ -76,10 +77,10 @@ private void OnStuck(EntityUid uid, SpiderChargeComponent comp, EntityStuckEvent /// private void OnExplode(EntityUid uid, SpiderChargeComponent comp, TriggerEvent args) { - if (comp.Planter == null || !_mind.TryGetObjectiveComp(comp.Planter.Value, out var obj)) + if (!TryComp(comp.Planter, out var ninja)) return; // assumes the target was destroyed, that the charge wasn't moved somehow - obj.Detonated = true; + _ninja.DetonatedSpiderCharge((comp.Planter.Value, ninja)); } } diff --git a/Content.Server/Nuke/NukeCodePaperSystem.cs b/Content.Server/Nuke/NukeCodePaperSystem.cs index 36268d5648d..cedae696825 100644 --- a/Content.Server/Nuke/NukeCodePaperSystem.cs +++ b/Content.Server/Nuke/NukeCodePaperSystem.cs @@ -1,6 +1,7 @@ using System.Diagnostics.CodeAnalysis; using Content.Server.Chat.Systems; using Content.Server.Fax; +using Content.Shared.Fax.Components; using Content.Server.Paper; using Content.Server.Station.Components; using Content.Server.Station.Systems; @@ -66,6 +67,7 @@ public bool SendNukeCodes(EntityUid station) paperContent, Loc.GetString("nuke-codes-fax-paper-name"), null, + null, "paper_stamp-centcom", new List { diff --git a/Content.Server/Nuke/NukeSystem.cs b/Content.Server/Nuke/NukeSystem.cs index 5a7219fdf15..9cd24b9af6c 100644 --- a/Content.Server/Nuke/NukeSystem.cs +++ b/Content.Server/Nuke/NukeSystem.cs @@ -189,7 +189,7 @@ private async void OnAnchorButtonPressed(EntityUid uid, NukeComponent component, continue; var msg = Loc.GetString("nuke-component-cant-anchor-floor"); - _popups.PopupEntity(msg, uid, args.Session, PopupType.MediumCaution); + _popups.PopupEntity(msg, uid, args.Actor, PopupType.MediumCaution); return; } @@ -245,10 +245,7 @@ private void OnArmButtonPressed(EntityUid uid, NukeComponent component, NukeArme else { - if (args.Session.AttachedEntity is not { } user) - return; - - DisarmBombDoafter(uid, user, component); + DisarmBombDoafter(uid, args.Actor, component); } } @@ -368,8 +365,7 @@ private void UpdateUserInterface(EntityUid uid, NukeComponent? component = null) if (!Resolve(uid, ref component)) return; - var ui = _ui.GetUiOrNull(uid, NukeUiKey.Key); - if (ui == null) + if (!_ui.HasUi(uid, NukeUiKey.Key)) return; var anchored = Transform(uid).Anchored; @@ -390,7 +386,7 @@ private void UpdateUserInterface(EntityUid uid, NukeComponent? component = null) CooldownTime = (int) component.CooldownTime }; - _ui.SetUiState(ui, state); + _ui.SetUiState(uid, NukeUiKey.Key, state); } private void PlayNukeKeypadSound(EntityUid uid, int number, NukeComponent? component = null) @@ -456,11 +452,6 @@ public void ArmBomb(EntityUid uid, NukeComponent? component = null) if (stationUid != null) _alertLevel.SetLevel(stationUid.Value, component.AlertLevelOnActivate, true, true, true, true); - var pos = nukeXform.MapPosition; - var x = (int) pos.X; - var y = (int) pos.Y; - var posText = $"({x}, {y})"; - // We are collapsing the randomness here, otherwise we would get separate random song picks for checking duration and when actually playing the song afterwards _selectedNukeSong = _audio.GetSound(component.ArmMusic); @@ -471,7 +462,7 @@ public void ArmBomb(EntityUid uid, NukeComponent? component = null) Color.Red, stationUid ?? uid, null, - ("time", (int) component.RemainingTime), ("position", posText) + ("time", (int) component.RemainingTime), ("position", FormattedMessage.RemoveMarkupPermissive(_navMap.GetNearestBeaconString((uid, nukeXform)))) ); _sound.PlayGlobalOnStation(uid, _audio.GetSound(component.ArmSound)); diff --git a/Content.Server/NukeOps/WarDeclaratorSystem.cs b/Content.Server/NukeOps/WarDeclaratorSystem.cs index dee0c10c40e..04f0b069f12 100644 --- a/Content.Server/NukeOps/WarDeclaratorSystem.cs +++ b/Content.Server/NukeOps/WarDeclaratorSystem.cs @@ -58,9 +58,6 @@ private void OnAttemptOpenUI(Entity ent, ref Activatable private void OnActivated(Entity ent, ref WarDeclaratorActivateMessage args) { - if (args.Session.AttachedEntity is not {} playerEntity) - return; - var ev = new WarDeclaredEvent(ent.Comp.CurrentStatus, ent); RaiseLocalEvent(ref ev); @@ -78,7 +75,7 @@ private void OnActivated(Entity ent, ref WarDeclaratorAc { var title = Loc.GetString(ent.Comp.SenderTitle); _announcer.SendAnnouncement("war", Filter.Broadcast(), ent.Comp.Message, title, ent.Comp.Color); - _adminLogger.Add(LogType.Chat, LogImpact.Low, $"{ToPrettyString(playerEntity):player} has declared war with this text: {ent.Comp.Message}"); + _adminLogger.Add(LogType.Chat, LogImpact.Low, $"{ToPrettyString(args.Actor):player} has declared war with this text: {ent.Comp.Message}"); } UpdateUI(ent, ev.Status); @@ -86,8 +83,8 @@ private void OnActivated(Entity ent, ref WarDeclaratorAc private void UpdateUI(Entity ent, WarConditionStatus? status = null) { - _userInterfaceSystem.TrySetUiState( - ent, + _userInterfaceSystem.SetUiState( + ent.Owner, WarDeclaratorUiKey.Key, new WarDeclaratorBoundUserInterfaceState(status, ent.Comp.DisableAt, ent.Comp.ShuttleDisabledTime)); } diff --git a/Content.Server/Nutrition/Components/DrinkComponent.cs b/Content.Server/Nutrition/Components/DrinkComponent.cs deleted file mode 100644 index 20d47cda88c..00000000000 --- a/Content.Server/Nutrition/Components/DrinkComponent.cs +++ /dev/null @@ -1,41 +0,0 @@ -using Content.Server.Nutrition.EntitySystems; -using Content.Shared.FixedPoint; -using Robust.Shared.Audio; - -namespace Content.Server.Nutrition.Components; - -[RegisterComponent, Access(typeof(DrinkSystem))] -public sealed partial class DrinkComponent : Component -{ - [DataField, ViewVariables(VVAccess.ReadWrite)] - public string Solution = "drink"; - - [DataField] - public SoundSpecifier UseSound = new SoundPathSpecifier("/Audio/Items/drink.ogg"); - - [DataField, ViewVariables(VVAccess.ReadWrite)] - public FixedPoint2 TransferAmount = FixedPoint2.New(5); - - /// - /// How long it takes to drink this yourself. - /// - [DataField, ViewVariables(VVAccess.ReadWrite)] - public float Delay = 1; - - [DataField, ViewVariables(VVAccess.ReadWrite)] - public bool Examinable = true; - - /// - /// If true, trying to drink when empty will not handle the event. - /// This means other systems such as equipping on use can run. - /// Example usecase is the bucket. - /// - [DataField, ViewVariables(VVAccess.ReadWrite)] - public bool IgnoreEmpty; - - /// - /// This is how many seconds it takes to force feed someone this drink. - /// - [DataField, ViewVariables(VVAccess.ReadWrite)] - public float ForceFeedDelay = 3; -} diff --git a/Content.Server/Nutrition/Components/FatExtractorComponent.cs b/Content.Server/Nutrition/Components/FatExtractorComponent.cs index e23c557236c..fa6edc911e1 100644 --- a/Content.Server/Nutrition/Components/FatExtractorComponent.cs +++ b/Content.Server/Nutrition/Components/FatExtractorComponent.cs @@ -1,4 +1,5 @@ using Content.Server.Nutrition.EntitySystems; +using Content.Shared.Construction.Prototypes; using Content.Shared.Nutrition.Components; using Robust.Shared.Audio; using Robust.Shared.Prototypes; @@ -8,67 +9,87 @@ namespace Content.Server.Nutrition.Components; /// -/// This is used for a machine that extracts hunger from entities and creates meat. Yum! +/// This is used for a machine that extracts hunger from entities and creates meat. Yum! /// [RegisterComponent, Access(typeof(FatExtractorSystem)), AutoGenerateComponentPause] public sealed partial class FatExtractorComponent : Component { /// - /// Whether or not the extractor is currently extracting fat from someone + /// Whether or not the extractor is currently extracting fat from someone /// - [DataField("processing")] + [DataField] public bool Processing = true; /// - /// How much nutrition is extracted per second. + /// How much nutrition is extracted per second. /// - [DataField("nutritionPerSecond"), ViewVariables(VVAccess.ReadWrite)] + [ViewVariables(VVAccess.ReadWrite)] public int NutritionPerSecond = 10; /// - /// An accumulator which tracks extracted nutrition to determine - /// when to spawn a meat. + /// The base rate of extraction /// - [DataField("nutrientAccumulator"), ViewVariables(VVAccess.ReadWrite)] + [DataField] + public int BaseNutritionPerSecond = 10; + + #region Machine Upgrade + /// + /// Which machine part affects the nutrition rate + /// + [DataField(customTypeSerializer: typeof(PrototypeIdSerializer))] + public string MachinePartNutritionRate = "Manipulator"; + + /// + /// The increase in rate per each rating above 1. + /// + [DataField] + public float PartRatingRateMultiplier = 10; + #endregion + + /// + /// An accumulator which tracks extracted nutrition to determine + /// when to spawn a meat. + /// + [DataField] public int NutrientAccumulator; /// - /// How high has to be to spawn meat + /// How high has to be to spawn meat /// - [DataField("nutrientPerMeat"), ViewVariables(VVAccess.ReadWrite)] - public int NutrientPerMeat = 30; + [DataField] + public int NutrientPerMeat = 60; /// - /// Meat spawned by the extractor. + /// Meat spawned by the extractor. /// - [DataField("meatPrototype", customTypeSerializer: typeof(PrototypeIdSerializer)), ViewVariables(VVAccess.ReadWrite)] + [DataField(customTypeSerializer: typeof(PrototypeIdSerializer))] public string MeatPrototype = "FoodMeat"; /// - /// When the next update will occur + /// When the next update will occur /// - [DataField("nextUpdate", customTypeSerializer: typeof(TimeOffsetSerializer)), ViewVariables(VVAccess.ReadWrite)] + [DataField(customTypeSerializer: typeof(TimeOffsetSerializer))] [AutoPausedField] public TimeSpan NextUpdate; /// - /// How long each update takes + /// How long each update takes /// - [DataField("updateTime"), ViewVariables(VVAccess.ReadWrite)] + [DataField] public TimeSpan UpdateTime = TimeSpan.FromSeconds(1); /// - /// The sound played when extracting + /// The sound played when extracting /// - [DataField("processSound")] + [DataField] public SoundSpecifier? ProcessSound; public EntityUid? Stream; /// - /// A minium hunger threshold for extracting nutrition. - /// Ignored when emagged. + /// A minium hunger threshold for extracting nutrition. + /// Ignored when emagged. /// - [DataField("minHungerThreshold")] + [DataField] public HungerThreshold MinHungerThreshold = HungerThreshold.Okay; } diff --git a/Content.Server/Nutrition/Components/PressurizedDrinkComponent.cs b/Content.Server/Nutrition/Components/PressurizedDrinkComponent.cs deleted file mode 100644 index aafb3bc1065..00000000000 --- a/Content.Server/Nutrition/Components/PressurizedDrinkComponent.cs +++ /dev/null @@ -1,27 +0,0 @@ -using Content.Server.Nutrition.EntitySystems; -using Robust.Shared.Audio; - -namespace Content.Server.Nutrition.Components; - -/// -/// Lets a drink burst open when thrown while closed. -/// Requires and to work. -/// -[RegisterComponent, Access(typeof(DrinkSystem))] -public sealed partial class PressurizedDrinkComponent : Component -{ - /// - /// Chance for the drink to burst when thrown while closed. - /// - [DataField, ViewVariables(VVAccess.ReadWrite)] - public float BurstChance = 0.25f; - - /// - /// Sound played when the drink bursts. - /// - [DataField] - public SoundSpecifier BurstSound = new SoundPathSpecifier("/Audio/Effects/flash_bang.ogg") - { - Params = AudioParams.Default.WithVolume(-4) - }; -} diff --git a/Content.Server/Nutrition/EntitySystems/DrinkSystem.cs b/Content.Server/Nutrition/EntitySystems/DrinkSystem.cs index 2249926baab..cd05adc7948 100644 --- a/Content.Server/Nutrition/EntitySystems/DrinkSystem.cs +++ b/Content.Server/Nutrition/EntitySystems/DrinkSystem.cs @@ -5,7 +5,6 @@ using Content.Server.Fluids.EntitySystems; using Content.Server.Forensics; using Content.Server.Inventory; -using Content.Server.Nutrition.Components; using Content.Server.Popups; using Content.Server.Traits.Assorted.Components; using Content.Shared.Administration.Logs; @@ -18,7 +17,6 @@ using Content.Shared.Chemistry.Reagent; using Content.Shared.Database; using Content.Shared.DoAfter; -using Content.Shared.Examine; using Content.Shared.FixedPoint; using Content.Shared.IdentityManagement; using Content.Shared.Interaction; @@ -27,25 +25,22 @@ using Content.Shared.Nutrition; using Content.Shared.Nutrition.Components; using Content.Shared.Nutrition.EntitySystems; -using Content.Shared.Throwing; using Content.Shared.Verbs; using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; using Robust.Shared.Configuration; using Robust.Shared.Player; using Robust.Shared.Prototypes; -using Robust.Shared.Random; using Robust.Shared.Utility; namespace Content.Server.Nutrition.EntitySystems; -public sealed class DrinkSystem : EntitySystem +public sealed class DrinkSystem : SharedDrinkSystem { [Dependency] private readonly BodySystem _body = default!; [Dependency] private readonly FlavorProfileSystem _flavorProfile = default!; [Dependency] private readonly FoodSystem _food = default!; [Dependency] private readonly IPrototypeManager _proto = default!; - [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!; [Dependency] private readonly MobStateSystem _mobState = default!; [Dependency] private readonly OpenableSystem _openable = default!; @@ -70,33 +65,10 @@ public override void Initialize() SubscribeLocalEvent(OnDrinkInit); // run before inventory so for bucket it always tries to drink before equipping (when empty) // run after openable so its always open -> drink - SubscribeLocalEvent(OnUse, before: new[] { typeof(ServerInventorySystem) }, after: new[] { typeof(OpenableSystem) }); + SubscribeLocalEvent(OnUse, before: [typeof(ServerInventorySystem)], after: [typeof(OpenableSystem)]); SubscribeLocalEvent(AfterInteract); SubscribeLocalEvent>(AddDrinkVerb); - // put drink amount after opened - SubscribeLocalEvent(OnExamined, after: new[] { typeof(OpenableSystem) }); SubscribeLocalEvent(OnDoAfter); - - SubscribeLocalEvent(OnPressurizedDrinkLand); - } - - private FixedPoint2 DrinkVolume(EntityUid uid, DrinkComponent? component = null) - { - if (!Resolve(uid, ref component)) - return FixedPoint2.Zero; - - if (!_solutionContainer.TryGetSolution(uid, component.Solution, out _, out var sol)) - return FixedPoint2.Zero; - - return sol.Volume; - } - - public bool IsEmpty(EntityUid uid, DrinkComponent? component = null) - { - if (!Resolve(uid, ref component)) - return true; - - return DrinkVolume(uid, component) <= 0; } /// @@ -133,38 +105,6 @@ public float TotalHydration(EntityUid uid, DrinkComponent? comp = null) return total; } - private void OnExamined(Entity entity, ref ExaminedEvent args) - { - TryComp(entity, out var openable); - if (_openable.IsClosed(entity.Owner, null, openable) || !args.IsInDetailsRange || !entity.Comp.Examinable) - return; - - var empty = IsEmpty(entity, entity.Comp); - if (empty) - { - args.PushMarkup(Loc.GetString("drink-component-on-examine-is-empty")); - return; - } - - if (HasComp(entity)) - { - //provide exact measurement for beakers - args.PushText(Loc.GetString("drink-component-on-examine-exact-volume", ("amount", DrinkVolume(entity, entity.Comp)))); - } - else - { - //general approximation - var remainingString = (int) _solutionContainer.PercentFull(entity) switch - { - 100 => "drink-component-on-examine-is-full", - > 66 => "drink-component-on-examine-is-mostly-full", - > 33 => HalfEmptyOrHalfFull(args), - _ => "drink-component-on-examine-is-mostly-empty", - }; - args.PushMarkup(Loc.GetString(remainingString)); - } - } - private void AfterInteract(Entity entity, ref AfterInteractEvent args) { if (args.Handled || args.Target == null || !args.CanReach) @@ -181,25 +121,6 @@ private void OnUse(Entity entity, ref UseInHandEvent args) args.Handled = TryDrink(args.User, args.User, entity.Comp, entity); } - private void OnPressurizedDrinkLand(Entity entity, ref LandEvent args) - { - if (!TryComp(entity, out var drink) || !TryComp(entity, out var openable)) - return; - - if (!openable.Opened && - _random.Prob(entity.Comp.BurstChance) && - _solutionContainer.TryGetSolution(entity.Owner, drink.Solution, out var soln, out var interactions)) - { - // using SetOpen instead of TryOpen to not play 2 sounds - _openable.SetOpen(entity, true, openable); - - var solution = _solutionContainer.SplitSolution(soln.Value, interactions.Volume); - _puddle.TrySpillAt(entity, solution, out _); - - _audio.PlayPvs(entity.Comp.BurstSound, entity); - } - } - private void OnDrinkInit(Entity entity, ref ComponentInit args) { if (TryComp(entity, out var existingDrainable)) @@ -442,16 +363,4 @@ private void AddDrinkVerb(Entity entity, ref GetVerbsEvent(args.Examiner, out var examiner) && examiner.EntityName.Length > 0 - && string.Compare(examiner.EntityName.Substring(0, 1), "m", StringComparison.InvariantCultureIgnoreCase) > 0) - remainingString = "drink-component-on-examine-is-half-empty"; - - return remainingString; - } } diff --git a/Content.Server/Nutrition/EntitySystems/FatExtractorSystem.cs b/Content.Server/Nutrition/EntitySystems/FatExtractorSystem.cs index 180e40d1e42..dc1f67c7400 100644 --- a/Content.Server/Nutrition/EntitySystems/FatExtractorSystem.cs +++ b/Content.Server/Nutrition/EntitySystems/FatExtractorSystem.cs @@ -1,5 +1,6 @@ using System.Diagnostics.CodeAnalysis; using System.Linq; +using Content.Server.Construction; using Content.Server.Nutrition.Components; using Content.Server.Power.Components; using Content.Server.Power.EntitySystems; @@ -9,6 +10,7 @@ using Content.Shared.Nutrition.Components; using Content.Shared.Nutrition.EntitySystems; using Content.Shared.Storage.Components; +using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; using Robust.Shared.Timing; @@ -27,12 +29,25 @@ public sealed class FatExtractorSystem : EntitySystem /// public override void Initialize() { + SubscribeLocalEvent(OnRefreshParts); + SubscribeLocalEvent(OnUpgradeExamine); SubscribeLocalEvent(OnGotEmagged); SubscribeLocalEvent(OnClosed); SubscribeLocalEvent(OnOpen); SubscribeLocalEvent(OnPowerChanged); } + private void OnRefreshParts(EntityUid uid, FatExtractorComponent component, RefreshPartsEvent args) + { + var rating = args.PartRatings[component.MachinePartNutritionRate] - 1; + component.NutritionPerSecond = component.BaseNutritionPerSecond + (int) (component.PartRatingRateMultiplier * rating); + } + + private void OnUpgradeExamine(EntityUid uid, FatExtractorComponent component, UpgradeExamineEvent args) + { + args.AddPercentageUpgrade("fat-extractor-component-rate", (float) component.NutritionPerSecond / component.BaseNutritionPerSecond); + } + private void OnGotEmagged(EntityUid uid, FatExtractorComponent component, ref GotEmaggedEvent args) { args.Handled = true; diff --git a/Content.Server/Nutrition/EntitySystems/SmokingSystem.Vape.cs b/Content.Server/Nutrition/EntitySystems/SmokingSystem.Vape.cs index fe0d1d0c168..d5bff967b3c 100644 --- a/Content.Server/Nutrition/EntitySystems/SmokingSystem.Vape.cs +++ b/Content.Server/Nutrition/EntitySystems/SmokingSystem.Vape.cs @@ -13,6 +13,7 @@ using Content.Shared.Interaction; using Content.Shared.Nutrition; using System.Threading; +using Content.Shared.Atmos; /// /// System for vapes diff --git a/Content.Server/Nyanotrasen/Kitchen/EntitySystems/DeepFryerSystem.Storage.cs b/Content.Server/Nyanotrasen/Kitchen/EntitySystems/DeepFryerSystem.Storage.cs index 8858286dbf6..a9a07c287b4 100644 --- a/Content.Server/Nyanotrasen/Kitchen/EntitySystems/DeepFryerSystem.Storage.cs +++ b/Content.Server/Nyanotrasen/Kitchen/EntitySystems/DeepFryerSystem.Storage.cs @@ -80,14 +80,13 @@ private void OnInteractUsing(EntityUid uid, DeepFryerComponent component, Intera private void OnInsertItem(EntityUid uid, DeepFryerComponent component, DeepFryerInsertItemMessage args) { - var user = args.Session.AttachedEntity; + var user = EntityManager.GetEntity(args.Entity); - if (user == null || - !TryComp(user, out var handsComponent) || + if (!TryComp(user, out var handsComponent) || handsComponent.ActiveHandEntity == null) return; if (handsComponent.ActiveHandEntity != null) - TryInsertItem(uid, component, user.Value, handsComponent.ActiveHandEntity.Value); + TryInsertItem(uid, component, user, handsComponent.ActiveHandEntity.Value); } } diff --git a/Content.Server/Nyanotrasen/Kitchen/EntitySystems/DeepFryerSystem.cs b/Content.Server/Nyanotrasen/Kitchen/EntitySystems/DeepFryerSystem.cs index 80c38f4630e..dc182c1edfa 100644 --- a/Content.Server/Nyanotrasen/Kitchen/EntitySystems/DeepFryerSystem.cs +++ b/Content.Server/Nyanotrasen/Kitchen/EntitySystems/DeepFryerSystem.cs @@ -128,8 +128,7 @@ private void UpdateUserInterface(EntityUid uid, DeepFryerComponent component) component.FryingOilThreshold, EntityManager.GetNetEntityArray(component.Storage.ContainedEntities.ToArray())); - if (!_uiSystem.TrySetUiState(uid, DeepFryerUiKey.Key, state)) - _sawmill.Warning($"{ToPrettyString(uid)} was unable to set UI state."); + _uiSystem.SetUiState(new Entity(uid, null), DeepFryerUiKey.Key, state); } /// @@ -525,15 +524,12 @@ private void OnRemoveItem(EntityUid uid, DeepFryerComponent component, DeepFryer if (!_containerSystem.Remove(removedItem, component.Storage)) return; - var user = args.Session.AttachedEntity; + var user = EntityManager.GetEntity(args.Entity); - if (user != null) - { - _handsSystem.TryPickupAnyHand(user.Value, removedItem); + _handsSystem.TryPickupAnyHand(user, removedItem); - _adminLogManager.Add(LogType.Action, LogImpact.Low, - $"{ToPrettyString(user.Value)} took {ToPrettyString(args.Item)} out of {ToPrettyString(uid)}."); - } + _adminLogManager.Add(LogType.Action, LogImpact.Low, + $"{ToPrettyString(user)} took {ToPrettyString(args.Item)} out of {ToPrettyString(uid)}."); _audioSystem.PlayPvs(component.SoundRemoveItem, uid, AudioParamsInsertRemove); @@ -581,17 +577,16 @@ private bool TryGetActiveHandSolutionContainer( private void OnScoopVat(EntityUid uid, DeepFryerComponent component, DeepFryerScoopVatMessage args) { - var user = args.Session.AttachedEntity; + var user = EntityManager.GetEntity(args.Entity); - if (user == null || - !TryGetActiveHandSolutionContainer(uid, user.Value, out var heldItem, out var heldSolution, + if (!TryGetActiveHandSolutionContainer(uid, user, out var heldItem, out var heldSolution, out var transferAmount)) return; if (!_solutionContainerSystem.TryGetSolution(component.Owner, component.Solution.Name, out var solution)) return; - _solutionTransferSystem.Transfer(user.Value, + _solutionTransferSystem.Transfer(user, uid, solution.Value, heldItem.Value, @@ -603,10 +598,9 @@ private void OnScoopVat(EntityUid uid, DeepFryerComponent component, DeepFryerSc private void OnClearSlagStart(EntityUid uid, DeepFryerComponent component, DeepFryerClearSlagMessage args) { - var user = args.Session.AttachedEntity; + var user = EntityManager.GetEntity(args.Entity); - if (user == null || - !TryGetActiveHandSolutionContainer(uid, user.Value, out var heldItem, out var heldSolution, + if (!TryGetActiveHandSolutionContainer(uid, user, out var heldItem, out var heldSolution, out var transferAmount)) return; @@ -616,7 +610,7 @@ private void OnClearSlagStart(EntityUid uid, DeepFryerComponent component, DeepF _popupSystem.PopupEntity( Loc.GetString("deep-fryer-oil-no-slag"), uid, - user.Value); + user); return; } @@ -626,7 +620,7 @@ private void OnClearSlagStart(EntityUid uid, DeepFryerComponent component, DeepF var ev = new ClearSlagDoAfterEvent(heldSolution.Value.Comp.Solution, transferAmount); //JJ Comment - not sure I have DoAfterArgs configured correctly. - var doAfterArgs = new DoAfterArgs(EntityManager, user.Value, delay, ev, uid, uid, heldItem) + var doAfterArgs = new DoAfterArgs(EntityManager, user, delay, ev, uid, uid, heldItem) { BreakOnDamage = true, BreakOnTargetMove = true, @@ -645,13 +639,10 @@ private void OnRemoveAllItems(EntityUid uid, DeepFryerComponent component, DeepF _containerSystem.EmptyContainer(component.Storage); - var user = args.Session.AttachedEntity; + var user = EntityManager.GetEntity(args.Entity); - if (user != null) - { - _adminLogManager.Add(LogType.Action, LogImpact.Low, - $"{ToPrettyString(user.Value)} removed all items from {ToPrettyString(uid)}."); - } + _adminLogManager.Add(LogType.Action, LogImpact.Low, + $"{ToPrettyString(user)} removed all items from {ToPrettyString(uid)}."); _audioSystem.PlayPvs(component.SoundRemoveItem, uid, AudioParamsInsertRemove); diff --git a/Content.Server/Nyanotrasen/Mail/Components/MailComponent.cs b/Content.Server/Nyanotrasen/Mail/Components/MailComponent.cs deleted file mode 100644 index 61d94bbad31..00000000000 --- a/Content.Server/Nyanotrasen/Mail/Components/MailComponent.cs +++ /dev/null @@ -1,108 +0,0 @@ -using System.Threading; -using Robust.Shared.Audio; -using Content.Shared.Storage; -using Content.Shared.Mail; - -namespace Content.Server.Mail.Components -{ - [RegisterComponent] - public sealed partial class MailComponent : SharedMailComponent - { - [ViewVariables(VVAccess.ReadWrite)] - [DataField("recipient")] - public string Recipient = "None"; - - [ViewVariables(VVAccess.ReadWrite)] - [DataField("recipientJob")] - public string RecipientJob = "None"; - - // Why do we not use LockComponent? - // Because this can't be locked again, - // and we have special conditions for unlocking, - // and we don't want to add a verb. - [ViewVariables(VVAccess.ReadWrite)] - [DataField("isLocked")] - public bool IsLocked = true; - - /// - /// Is this parcel profitable to deliver for the station? - /// - /// - /// The station won't receive any award on delivery if this is false. - /// This is useful for broken fragile packages and packages that were - /// not delivered in time. - /// - [DataField("isProfitable")] - public bool IsProfitable = true; - - /// - /// Is this package considered fragile? - /// - /// - /// This can be set to true in the YAML files for a mail delivery to - /// always be Fragile, despite its contents. - /// - [DataField("isFragile")] - public bool IsFragile = false; - - /// - /// Is this package considered priority mail? - /// - /// - /// There will be a timer set for its successful delivery. The - /// station's bank account will be penalized if it is not delivered on - /// time. - /// - /// This is set to false on successful delivery. - /// - /// This can be set to true in the YAML files for a mail delivery to - /// always be Priority. - /// - [DataField("isPriority")] - public bool IsPriority = false; - - /// - /// What will be packaged when the mail is spawned. - /// - [DataField("contents")] - public List Contents = new(); - - /// - /// The amount that cargo will be awarded for delivering this mail. - /// - [DataField("bounty")] - public int Bounty = 750; - - /// - /// Penalty if the mail is destroyed. - /// - [DataField("penalty")] - public int Penalty = -250; - - /// - /// The sound that's played when the mail's lock is broken. - /// - [DataField("penaltySound")] - public SoundSpecifier PenaltySound = new SoundPathSpecifier("/Audio/Machines/Nuke/angry_beep.ogg"); - - /// - /// The sound that's played when the mail's opened. - /// - [DataField("openSound")] - public SoundSpecifier OpenSound = new SoundPathSpecifier("/Audio/Effects/packetrip.ogg"); - - /// - /// The sound that's played when the mail's lock has been emagged. - /// - [DataField("emagSound")] - public SoundSpecifier EmagSound = new SoundCollectionSpecifier("sparks"); - - /// - /// Whether this component is enabled. - /// Removed when it becomes trash. - /// - public bool IsEnabled = true; - - public CancellationTokenSource? priorityCancelToken; - } -} diff --git a/Content.Server/Nyanotrasen/Mail/Components/MailReceiverComponent.cs b/Content.Server/Nyanotrasen/Mail/Components/MailReceiverComponent.cs deleted file mode 100644 index 4224de5de45..00000000000 --- a/Content.Server/Nyanotrasen/Mail/Components/MailReceiverComponent.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace Content.Server.Mail.Components -{ - [RegisterComponent] - public sealed partial class MailReceiverComponent : Component - {} -} diff --git a/Content.Server/Nyanotrasen/Mail/Components/MailTeleporterComponent.cs b/Content.Server/Nyanotrasen/Mail/Components/MailTeleporterComponent.cs deleted file mode 100644 index bc05d7307d9..00000000000 --- a/Content.Server/Nyanotrasen/Mail/Components/MailTeleporterComponent.cs +++ /dev/null @@ -1,108 +0,0 @@ -using Robust.Shared.Audio; - -namespace Content.Server.Mail.Components -{ - /// - /// This is for the mail teleporter. - /// Random mail will be teleported to this every few minutes. - /// - [RegisterComponent] - public sealed partial class MailTeleporterComponent : Component - { - - // Not starting accumulator at 0 so mail carriers have some deliveries to make shortly after roundstart. - [DataField("accumulator")] - public float Accumulator = 285f; - - [DataField("teleportInterval")] - public TimeSpan TeleportInterval = TimeSpan.FromMinutes(5); - - /// - /// The sound that's played when new mail arrives. - /// - [DataField("teleportSound")] - public SoundSpecifier TeleportSound = new SoundPathSpecifier("/Audio/Effects/teleport_arrival.ogg"); - - /// - /// The MailDeliveryPoolPrototype that's used to select what mail this - /// teleporter can deliver. - /// - [DataField("mailPool")] - public string MailPool = "RandomMailDeliveryPool"; - - /// - /// How many mail candidates do we need per actual delivery sent when - /// the mail goes out? The number of candidates is divided by this number - /// to determine how many deliveries will be teleported in. - /// It does not determine unique recipients. That is random. - /// - [DataField("candidatesPerDelivery")] - public int CandidatesPerDelivery = 8; - - [DataField("minimumDeliveriesPerTeleport")] - public int MinimumDeliveriesPerTeleport = 1; - - /// - /// Do not teleport any more mail in, if there are at least this many - /// undelivered parcels. - /// - /// - /// Currently this works by checking how many MailComponent entities - /// are sitting on the teleporter's tile. - /// - /// It should be noted that if the number of actual deliveries to be - /// made based on the number of candidates divided by candidates per - /// delivery exceeds this number, the teleporter will spawn more mail - /// than this number. - /// - /// This is just a simple check to see if anyone's been picking up the - /// mail lately to prevent entity bloat for the sake of performance. - /// - [DataField("maximumUndeliveredParcels")] - public int MaximumUndeliveredParcels = 5; - - /// - /// Any item that breaks or is destroyed in less than this amount of - /// damage is one of the types of items considered fragile. - /// - [DataField("fragileDamageThreshold")] - public int FragileDamageThreshold = 10; - - /// - /// What's the bonus for delivering a fragile package intact? - /// - [DataField("fragileBonus")] - public int FragileBonus = 100; - - /// - /// What's the malus for failing to deliver a fragile package? - /// - [DataField("fragileMalus")] - public int FragileMalus = -100; - - /// - /// What's the chance for any one delivery to be marked as priority mail? - /// - [DataField("priorityChance")] - public float PriorityChance = 0.1f; - - /// - /// How long until a priority delivery is considered as having failed - /// if not delivered? - /// - [DataField("priorityDuration")] - public TimeSpan priorityDuration = TimeSpan.FromMinutes(5); - - /// - /// What's the bonus for delivering a priority package on time? - /// - [DataField("priorityBonus")] - public int PriorityBonus = 250; - - /// - /// What's the malus for failing to deliver a priority package? - /// - [DataField("priorityMalus")] - public int PriorityMalus = -250; - } -} diff --git a/Content.Server/Nyanotrasen/Mail/Components/StationMailRouterComponent.cs b/Content.Server/Nyanotrasen/Mail/Components/StationMailRouterComponent.cs deleted file mode 100644 index ce87eb131fc..00000000000 --- a/Content.Server/Nyanotrasen/Mail/Components/StationMailRouterComponent.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace Content.Server.Mail; - -/// -/// Designates a station as a place for sending and receiving mail. -/// -[RegisterComponent] -public sealed partial class StationMailRouterComponent : Component -{ -} diff --git a/Content.Server/Nyanotrasen/Mail/MailCommands.cs b/Content.Server/Nyanotrasen/Mail/MailCommands.cs deleted file mode 100644 index 5af873f9e80..00000000000 --- a/Content.Server/Nyanotrasen/Mail/MailCommands.cs +++ /dev/null @@ -1,137 +0,0 @@ -using System.Linq; -using Robust.Shared.Console; -using Robust.Shared.Containers; -using Robust.Shared.Prototypes; -using Content.Shared.Administration; -using Content.Server.Administration; -using Content.Server.Mail.Components; - -namespace Content.Server.Mail; - -[AdminCommand(AdminFlags.Fun)] -public sealed class MailToCommand : IConsoleCommand -{ - public string Command => "mailto"; - public string Description => Loc.GetString("command-mailto-description", ("requiredComponent", nameof(MailReceiverComponent))); - public string Help => Loc.GetString("command-mailto-help", ("command", Command)); - - [Dependency] private readonly IEntityManager _entityManager = default!; - [Dependency] private readonly IPrototypeManager _prototypeManager = default!; - [Dependency] private readonly IEntitySystemManager _entitySystemManager = default!; - - private readonly string _blankMailPrototype = "MailAdminFun"; - private readonly string _container = "storagebase"; - private readonly string _mailContainer = "contents"; - - - public async void Execute(IConsoleShell shell, string argStr, string[] args) - { - if (args.Length < 4) - { - shell.WriteError(Loc.GetString("shell-wrong-arguments-number")); - return; - } - - if (!EntityUid.TryParse(args[0], out var recipientUid)) - { - shell.WriteError(Loc.GetString("shell-entity-uid-must-be-number")); - return; - } - - if (!EntityUid.TryParse(args[1], out var containerUid)) - { - shell.WriteError(Loc.GetString("shell-entity-uid-must-be-number")); - return; - } - - if (!Boolean.TryParse(args[2], out var isFragile)) - { - shell.WriteError(Loc.GetString("shell-invalid-bool")); - return; - } - - if (!Boolean.TryParse(args[3], out var isPriority)) - { - shell.WriteError(Loc.GetString("shell-invalid-bool")); - return; - } - - - var _mailSystem = _entitySystemManager.GetEntitySystem(); - var _containerSystem = _entitySystemManager.GetEntitySystem(); - - if (!_entityManager.TryGetComponent(recipientUid, out MailReceiverComponent? mailReceiver)) - { - shell.WriteLine(Loc.GetString("command-mailto-no-mailreceiver", ("requiredComponent", nameof(MailReceiverComponent)))); - return; - } - - if (!_prototypeManager.HasIndex(_blankMailPrototype)) - { - shell.WriteLine(Loc.GetString("command-mailto-no-blankmail", ("blankMail", _blankMailPrototype))); - return; - } - - if (!_containerSystem.TryGetContainer(containerUid, _container, out var targetContainer)) - { - shell.WriteLine(Loc.GetString("command-mailto-invalid-container", ("requiredContainer", _container))); - return; - } - - if (!_mailSystem.TryGetMailRecipientForReceiver(mailReceiver, out MailRecipient? recipient)) - { - shell.WriteLine(Loc.GetString("command-mailto-unable-to-receive")); - return; - } - - if (!_mailSystem.TryGetMailTeleporterForReceiver(mailReceiver, out MailTeleporterComponent? teleporterComponent)) - { - shell.WriteLine(Loc.GetString("command-mailto-no-teleporter-found")); - return; - } - - var mailUid = _entityManager.SpawnEntity(_blankMailPrototype, _entityManager.GetComponent(containerUid).Coordinates); - var mailContents = _containerSystem.EnsureContainer(mailUid, _mailContainer); - - if (!_entityManager.TryGetComponent(mailUid, out MailComponent? mailComponent)) - { - shell.WriteLine(Loc.GetString("command-mailto-bogus-mail", ("blankMail", _blankMailPrototype), ("requiredMailComponent", nameof(MailComponent)))); - return; - } - - foreach (var entity in targetContainer.ContainedEntities.ToArray()) - _containerSystem.Insert(entity, mailContents); - - mailComponent.IsFragile = isFragile; - mailComponent.IsPriority = isPriority; - - _mailSystem.SetupMail(mailUid, teleporterComponent, recipient.Value); - - var teleporterQueue = _containerSystem.EnsureContainer(teleporterComponent.Owner, "queued"); - _containerSystem.Insert(mailUid, teleporterQueue); - shell.WriteLine(Loc.GetString("command-mailto-success", ("timeToTeleport", teleporterComponent.TeleportInterval.TotalSeconds - teleporterComponent.Accumulator))); - } -} - -[AdminCommand(AdminFlags.Fun)] -public sealed class MailNowCommand : IConsoleCommand -{ - public string Command => "mailnow"; - public string Description => Loc.GetString("command-mailnow"); - public string Help => Loc.GetString("command-mailnow-help", ("command", Command)); - - [Dependency] private readonly IEntityManager _entityManager = default!; - [Dependency] private readonly IEntitySystemManager _entitySystemManager = default!; - - public async void Execute(IConsoleShell shell, string argStr, string[] args) - { - var _mailSystem = _entitySystemManager.GetEntitySystem(); - - foreach (var mailTeleporter in _entityManager.EntityQuery()) - { - mailTeleporter.Accumulator += (float) mailTeleporter.TeleportInterval.TotalSeconds - mailTeleporter.Accumulator; - } - - shell.WriteLine(Loc.GetString("command-mailnow-success")); - } -} diff --git a/Content.Server/Nyanotrasen/Mail/MailSystem.cs b/Content.Server/Nyanotrasen/Mail/MailSystem.cs deleted file mode 100644 index 05cd0c88a72..00000000000 --- a/Content.Server/Nyanotrasen/Mail/MailSystem.cs +++ /dev/null @@ -1,731 +0,0 @@ -using System.Diagnostics.CodeAnalysis; -using System.Linq; -using System.Threading; -using Robust.Shared.Audio; -using Robust.Shared.Containers; -using Robust.Shared.Prototypes; -using Robust.Shared.Random; -using Content.Server.Access.Systems; -using Content.Server.Cargo.Components; -using Content.Server.Cargo.Systems; -using Content.Server.Chat.Systems; -using Content.Server.Chemistry.Containers.EntitySystems; -using Content.Server.Chemistry.EntitySystems; -using Content.Server.Damage.Components; -using Content.Server.Destructible; -using Content.Server.Destructible.Thresholds; -using Content.Server.Destructible.Thresholds.Behaviors; -using Content.Server.Destructible.Thresholds.Triggers; -using Content.Server.Fluids.Components; -using Content.Server.Item; -using Content.Server.Mail.Components; -using Content.Server.Mind; -using Content.Server.Nutrition.Components; -using Content.Server.Nutrition.EntitySystems; -using Content.Server.Popups; -using Content.Server.Power.Components; -using Content.Server.Station.Systems; -using Content.Server.Spawners.EntitySystems; -using Content.Shared.Access; -using Content.Shared.Access.Components; -using Content.Shared.Access.Systems; -using Content.Shared.Chat; -using Content.Shared.Chemistry.EntitySystems; -using Content.Shared.Damage; -using Content.Shared.Emag.Components; -using Content.Shared.Destructible; -using Content.Shared.Emag.Systems; -using Content.Shared.Examine; -using Content.Shared.Fluids.Components; -using Content.Shared.Hands.EntitySystems; -using Content.Shared.Interaction; -using Content.Shared.Interaction.Events; -using Content.Shared.Item; -using Content.Shared.Mail; -using Content.Shared.Maps; -using Content.Shared.Nutrition.Components; -using Content.Shared.Nutrition.EntitySystems; -using Content.Shared.PDA; -using Content.Shared.Random.Helpers; -using Content.Shared.Roles; -using Content.Shared.StatusIcon; -using Content.Shared.Storage; -using Content.Shared.Tag; -using Robust.Shared.Audio.Systems; -using Timer = Robust.Shared.Timing.Timer; - -namespace Content.Server.Mail -{ - public sealed class MailSystem : EntitySystem - { - [Dependency] private readonly PopupSystem _popupSystem = default!; - [Dependency] private readonly AccessReaderSystem _accessSystem = default!; - [Dependency] private readonly SharedHandsSystem _handsSystem = default!; - [Dependency] private readonly IdCardSystem _idCardSystem = default!; - [Dependency] private readonly IRobustRandom _random = default!; - [Dependency] private readonly TagSystem _tagSystem = default!; - [Dependency] private readonly CargoSystem _cargoSystem = default!; - [Dependency] private readonly StationSystem _stationSystem = default!; - [Dependency] private readonly ChatSystem _chatSystem = default!; - [Dependency] private readonly OpenableSystem _openable = default!; - [Dependency] private readonly IPrototypeManager _prototypeManager = default!; - [Dependency] private readonly SharedContainerSystem _containerSystem = default!; - [Dependency] private readonly SolutionContainerSystem _solutionContainerSystem = default!; - [Dependency] private readonly SharedAppearanceSystem _appearanceSystem = default!; - [Dependency] private readonly SharedAudioSystem _audioSystem = default!; - [Dependency] private readonly DamageableSystem _damageableSystem = default!; - [Dependency] private readonly ItemSystem _itemSystem = default!; - [Dependency] private readonly MindSystem _mindSystem = default!; - [Dependency] private readonly MetaDataSystem _metaDataSystem = default!; - - private ISawmill _sawmill = default!; - - public override void Initialize() - { - base.Initialize(); - - _sawmill = Logger.GetSawmill("mail"); - - SubscribeLocalEvent(OnSpawnPlayer, after: new[] { typeof(SpawnPointSystem) }); - - SubscribeLocalEvent(OnRemove); - SubscribeLocalEvent(OnUseInHand); - SubscribeLocalEvent(OnAfterInteractUsing); - SubscribeLocalEvent(OnExamined); - SubscribeLocalEvent(OnDestruction); - SubscribeLocalEvent(OnDamage); - SubscribeLocalEvent(OnBreak); - SubscribeLocalEvent(OnMailEmagged); - } - - public override void Update(float frameTime) - { - base.Update(frameTime); - foreach (var mailTeleporter in EntityQuery()) - { - if (TryComp(mailTeleporter.Owner, out var power) && !power.Powered) - return; - - mailTeleporter.Accumulator += frameTime; - - if (mailTeleporter.Accumulator < mailTeleporter.TeleportInterval.TotalSeconds) - continue; - - mailTeleporter.Accumulator -= (float) mailTeleporter.TeleportInterval.TotalSeconds; - - SpawnMail(mailTeleporter.Owner, mailTeleporter); - } - } - - /// - /// Dynamically add the MailReceiver component to appropriate entities. - /// - private void OnSpawnPlayer(PlayerSpawningEvent args) - { - if (args.SpawnResult == null || - args.Job == null || - args.Station is not {} station) - { - return; - } - - if (!HasComp(station)) - return; - - AddComp(args.SpawnResult.Value); - } - - private void OnRemove(EntityUid uid, MailComponent component, ComponentRemove args) - { - // Make sure the priority timer doesn't run. - if (component.priorityCancelToken != null) - component.priorityCancelToken.Cancel(); - } - - /// - /// Try to open the mail. - /// - private void OnUseInHand(EntityUid uid, MailComponent component, UseInHandEvent args) - { - if (!component.IsEnabled) - return; - if (component.IsLocked) - { - _popupSystem.PopupEntity(Loc.GetString("mail-locked"), uid, args.User); - return; - } - OpenMail(uid, component, args.User); - } - - /// - /// Handle logic similar between a normal mail unlock and an emag - /// frying out the lock. - /// - private void UnlockMail(EntityUid uid, MailComponent component) - { - component.IsLocked = false; - UpdateAntiTamperVisuals(uid, false); - - if (component.IsPriority) - { - // This is a successful delivery. Keep the failure timer from triggering. - if (component.priorityCancelToken != null) - component.priorityCancelToken.Cancel(); - - // The priority tape is visually considered to be a part of the - // anti-tamper lock, so remove that too. - _appearanceSystem.SetData(uid, MailVisuals.IsPriority, false); - - // The examination code depends on this being false to not show - // the priority tape description anymore. - component.IsPriority = false; - } - } - - /// - /// Check the ID against the mail's lock - /// - private void OnAfterInteractUsing(EntityUid uid, MailComponent component, AfterInteractUsingEvent args) - { - if (!args.CanReach || !component.IsLocked) - return; - - if (!TryComp(uid, out var access)) - return; - - IdCardComponent? idCard = null; // We need an ID card. - - if (HasComp(args.Used)) /// Can we find it in a PDA if the user is using that? - { - _idCardSystem.TryGetIdCard(args.Used, out var pdaID); - idCard = pdaID; - } - - if (HasComp(args.Used)) /// Or are they using an id card directly? - idCard = Comp(args.Used); - - if (idCard == null) /// Return if we still haven't found an id card. - return; - - if (!HasComp(uid)) - { - if (idCard.FullName != component.Recipient || idCard.JobTitle != component.RecipientJob) - { - _popupSystem.PopupEntity(Loc.GetString("mail-recipient-mismatch"), uid, args.User); - return; - } - - if (!_accessSystem.IsAllowed(uid, args.User)) - { - _popupSystem.PopupEntity(Loc.GetString("mail-invalid-access"), uid, args.User); - return; - } - } - - UnlockMail(uid, component); - - if (!component.IsProfitable) - { - _popupSystem.PopupEntity(Loc.GetString("mail-unlocked"), uid, args.User); - return; - } - - _popupSystem.PopupEntity(Loc.GetString("mail-unlocked-reward", ("bounty", component.Bounty)), uid, args.User); - - component.IsProfitable = false; - - var query = EntityQueryEnumerator(); - while (query.MoveNext(out var station, out var account)) - { - if (_stationSystem.GetOwningStation(uid) != station) - continue; - - _cargoSystem.UpdateBankAccount(station, account, component.Bounty); - return; - } - } - - private void OnExamined(EntityUid uid, MailComponent component, ExaminedEvent args) - { - if (!args.IsInDetailsRange) - { - args.PushMarkup(Loc.GetString("mail-desc-far")); - return; - } - - args.PushMarkup(Loc.GetString("mail-desc-close", ("name", component.Recipient), ("job", component.RecipientJob))); - - if (component.IsFragile) - args.PushMarkup(Loc.GetString("mail-desc-fragile")); - - if (component.IsPriority) - { - if (component.IsProfitable) - args.PushMarkup(Loc.GetString("mail-desc-priority")); - else - args.PushMarkup(Loc.GetString("mail-desc-priority-inactive")); - } - } - - /// - /// Penalize a station for a failed delivery. - /// - /// - /// This will mark a parcel as no longer being profitable, which will - /// prevent multiple failures on different conditions for the same - /// delivery. - /// - /// The standard penalization is breaking the anti-tamper lock, - /// but this allows a delivery to fail for other reasons too - /// while having a generic function to handle different messages. - /// - public void PenalizeStationFailedDelivery(EntityUid uid, MailComponent component, string localizationString) - { - if (!component.IsProfitable) - return; - - _chatSystem.TrySendInGameICMessage(uid, Loc.GetString(localizationString, ("credits", component.Penalty)), InGameICChatType.Speak, false); - _audioSystem.PlayPvs(component.PenaltySound, uid); - - component.IsProfitable = false; - - if (component.IsPriority) - _appearanceSystem.SetData(uid, MailVisuals.IsPriorityInactive, true); - - var query = EntityQueryEnumerator(); - while (query.MoveNext(out var station, out var account)) - { - if (_stationSystem.GetOwningStation(uid) != station) - continue; - - _cargoSystem.UpdateBankAccount(station, account, component.Penalty); - return; - } - } - - private void OnDestruction(EntityUid uid, MailComponent component, DestructionEventArgs args) - { - if (component.IsLocked) - PenalizeStationFailedDelivery(uid, component, "mail-penalty-lock"); - - if (component.IsEnabled) - OpenMail(uid, component); - - UpdateAntiTamperVisuals(uid, false); - } - - private void OnDamage(EntityUid uid, MailComponent component, DamageChangedEvent args) - { - if (args.DamageDelta == null) - return; - - if (!_containerSystem.TryGetContainer(uid, "contents", out var contents)) - return; - - // Transfer damage to the contents. - // This should be a general-purpose feature for all containers in the future. - foreach (var entity in contents.ContainedEntities.ToArray()) - { - _damageableSystem.TryChangeDamage(entity, args.DamageDelta); - } - } - - private void OnBreak(EntityUid uid, MailComponent component, BreakageEventArgs args) - { - _appearanceSystem.SetData(uid, MailVisuals.IsBroken, true); - - if (component.IsFragile) - PenalizeStationFailedDelivery(uid, component, "mail-penalty-fragile"); - } - - private void OnMailEmagged(EntityUid uid, MailComponent component, ref GotEmaggedEvent args) - { - if (!component.IsLocked) - return; - - UnlockMail(uid, component); - - _popupSystem.PopupEntity(Loc.GetString("mail-unlocked-by-emag"), uid, args.UserUid); - - _audioSystem.PlayPvs(component.EmagSound, uid, AudioParams.Default.WithVolume(4)); - component.IsProfitable = false; - args.Handled = true; - } - - /// - /// Returns true if the given entity is considered fragile for delivery. - /// - public bool IsEntityFragile(EntityUid uid, int fragileDamageThreshold) - { - // It takes damage on falling. - if (HasComp(uid)) - return true; - - // It can be spilled easily and has something to spill. - if (HasComp(uid) - && TryComp(uid, out var openable) - && !_openable.IsClosed(uid, null, openable) - && _solutionContainerSystem.PercentFull(uid) > 0) - return true; - - // It might be made of non-reinforced glass. - if (TryComp(uid, out DamageableComponent? damageableComponent) - && damageableComponent.DamageModifierSetId == "Glass") - return true; - - // Fallback: It breaks or is destroyed in less than a damage - // threshold dictated by the teleporter. - if (TryComp(uid, out DestructibleComponent? destructibleComp)) - { - foreach (var threshold in destructibleComp.Thresholds) - { - if (threshold.Trigger is DamageTrigger trigger - && trigger.Damage < fragileDamageThreshold) - { - foreach (var behavior in threshold.Behaviors) - { - if (behavior is DoActsBehavior doActs) - { - if (doActs.Acts.HasFlag(ThresholdActs.Breakage) - || doActs.Acts.HasFlag(ThresholdActs.Destruction)) - { - return true; - } - } - } - } - } - } - - return false; - } - - public bool TryMatchJobTitleToDepartment(string jobTitle, [NotNullWhen(true)] out string? jobDepartment) - { - foreach (var department in _prototypeManager.EnumeratePrototypes()) - { - foreach (var role in department.Roles) - { - if (_prototypeManager.TryIndex(role, out JobPrototype? _jobPrototype) - && _jobPrototype.LocalizedName == jobTitle) - { - jobDepartment = department.ID; - return true; - } - } - } - - jobDepartment = null; - return false; - } - - public bool TryMatchJobTitleToPrototype(string jobTitle, [NotNullWhen(true)] out JobPrototype? jobPrototype) - { - foreach (var job in _prototypeManager.EnumeratePrototypes()) - { - if (job.LocalizedName == jobTitle) - { - jobPrototype = job; - return true; - } - } - - jobPrototype = null; - return false; - } - - /// - /// Handle all the gritty details particular to a new mail entity. - /// - /// - /// This is separate mostly so the unit tests can get to it. - /// - public void SetupMail(EntityUid uid, MailTeleporterComponent component, MailRecipient recipient) - { - var mailComp = EnsureComp(uid); - - var container = _containerSystem.EnsureContainer(uid, "contents"); - foreach (var item in EntitySpawnCollection.GetSpawns(mailComp.Contents, _random)) - { - var entity = EntityManager.SpawnEntity(item, Transform(uid).Coordinates); - if (!_containerSystem.Insert(entity, container)) - { - _sawmill.Error($"Can't insert {ToPrettyString(entity)} into new mail delivery {ToPrettyString(uid)}! Deleting it."); - QueueDel(entity); - } - else if (!mailComp.IsFragile && IsEntityFragile(entity, component.FragileDamageThreshold)) - { - mailComp.IsFragile = true; - } - } - - if (_random.Prob(component.PriorityChance)) - mailComp.IsPriority = true; - - // This needs to override both the random probability and the - // entity prototype, so this is fine. - if (!recipient.MayReceivePriorityMail) - mailComp.IsPriority = false; - - mailComp.RecipientJob = recipient.Job; - mailComp.Recipient = recipient.Name; - - if (mailComp.IsFragile) - { - mailComp.Bounty += component.FragileBonus; - mailComp.Penalty += component.FragileMalus; - _appearanceSystem.SetData(uid, MailVisuals.IsFragile, true); - } - - if (mailComp.IsPriority) - { - mailComp.Bounty += component.PriorityBonus; - mailComp.Penalty += component.PriorityMalus; - _appearanceSystem.SetData(uid, MailVisuals.IsPriority, true); - - mailComp.priorityCancelToken = new CancellationTokenSource(); - - Timer.Spawn((int) component.priorityDuration.TotalMilliseconds, - () => PenalizeStationFailedDelivery(uid, mailComp, "mail-penalty-expired"), - mailComp.priorityCancelToken.Token); - } - - _appearanceSystem.SetData(uid, MailVisuals.JobIcon, recipient.JobIcon); - - _metaDataSystem.SetEntityName(uid, Loc.GetString("mail-item-name-addressed", - ("recipient", recipient.Name))); - - var accessReader = EnsureComp(uid); - accessReader.AccessLists.Add(recipient.AccessTags); - } - - /// - /// Return the parcels waiting for delivery. - /// - /// The mail teleporter to check. - public List GetUndeliveredParcels(EntityUid uid) - { - // An alternative solution would be to keep a list of the unopened - // parcels spawned by the teleporter and see if they're not carried - // by someone, but this is simple, and simple is good. - List undeliveredParcels = new(); - foreach (var entityInTile in TurfHelpers.GetEntitiesInTile(Transform(uid).Coordinates, LookupFlags.Dynamic | LookupFlags.Sundries)) - { - if (HasComp(entityInTile)) - undeliveredParcels.Add(entityInTile); - } - return undeliveredParcels; - } - - /// - /// Return how many parcels are waiting for delivery. - /// - /// The mail teleporter to check. - public uint GetUndeliveredParcelCount(EntityUid uid) - { - return (uint) GetUndeliveredParcels(uid).Count(); - } - - /// - /// Try to match a mail receiver to a mail teleporter. - /// - public bool TryGetMailTeleporterForReceiver(MailReceiverComponent receiver, [NotNullWhen(true)] out MailTeleporterComponent? teleporterComponent) - { - foreach (var mailTeleporter in EntityQuery()) - { - if (_stationSystem.GetOwningStation(receiver.Owner) == _stationSystem.GetOwningStation(mailTeleporter.Owner)) - { - teleporterComponent = mailTeleporter; - return true; - } - } - - teleporterComponent = null; - return false; - } - - /// - /// Try to construct a recipient struct for a mail parcel based on a receiver. - /// - public bool TryGetMailRecipientForReceiver(MailReceiverComponent receiver, [NotNullWhen(true)] out MailRecipient? recipient) - { - // Because of the way this works, people are not considered - // candidates for mail if there is no valid PDA or ID in their slot - // or active hand. A better future solution might be checking the - // station records, possibly cross-referenced with the medical crew - // scanner to look for living recipients. TODO - - if (_idCardSystem.TryFindIdCard(receiver.Owner, out var idCard) - && TryComp(idCard.Owner, out var access) - && idCard.Comp.FullName != null - && idCard.Comp.JobTitle != null) - { - var accessTags = access.Tags; - - var mayReceivePriorityMail = !(_mindSystem.GetMind(receiver.Owner) == null); - - recipient = new MailRecipient(idCard.Comp.FullName, - idCard.Comp.JobTitle, - idCard.Comp.JobIcon, - accessTags, - mayReceivePriorityMail); - - return true; - } - - recipient = null; - return false; - } - - /// - /// Get the list of valid mail recipients for a mail teleporter. - /// - public List GetMailRecipientCandidates(EntityUid uid) - { - List candidateList = new(); - - foreach (var receiver in EntityQuery()) - { - if (_stationSystem.GetOwningStation(receiver.Owner) != _stationSystem.GetOwningStation(uid)) - continue; - - if (TryGetMailRecipientForReceiver(receiver, out MailRecipient? recipient)) - candidateList.Add(recipient.Value); - } - - return candidateList; - } - - /// - /// Handle the spawning of all the mail for a mail teleporter. - /// - public void SpawnMail(EntityUid uid, MailTeleporterComponent? component = null) - { - if (!Resolve(uid, ref component)) - { - _sawmill.Error($"Tried to SpawnMail on {ToPrettyString(uid)} without a valid MailTeleporterComponent!"); - return; - } - - if (GetUndeliveredParcelCount(uid) >= component.MaximumUndeliveredParcels) - return; - - var candidateList = GetMailRecipientCandidates(uid); - - if (candidateList.Count <= 0) - { - _sawmill.Error("List of mail candidates was empty!"); - return; - } - - if (!_prototypeManager.TryIndex(component.MailPool, out var pool)) - { - _sawmill.Error($"Can't index {ToPrettyString(uid)}'s MailPool {component.MailPool}!"); - return; - } - - for (int i = 0; - i < component.MinimumDeliveriesPerTeleport + candidateList.Count / component.CandidatesPerDelivery; - i++) - { - var candidate = _random.Pick(candidateList); - var possibleParcels = new Dictionary(pool.Everyone); - - if (TryMatchJobTitleToPrototype(candidate.Job, out JobPrototype? jobPrototype) - && pool.Jobs.TryGetValue(jobPrototype.ID, out Dictionary? jobParcels)) - { - possibleParcels = possibleParcels.Union(jobParcels) - .GroupBy(g => g.Key) - .ToDictionary(pair => pair.Key, pair => pair.First().Value); - } - - if (TryMatchJobTitleToDepartment(candidate.Job, out string? department) - && pool.Departments.TryGetValue(department, out Dictionary? departmentParcels)) - { - possibleParcels = possibleParcels.Union(departmentParcels) - .GroupBy(g => g.Key) - .ToDictionary(pair => pair.Key, pair => pair.First().Value); - } - - var accumulated = 0f; - var randomPoint = _random.NextFloat(possibleParcels.Values.Sum()); - string? chosenParcel = null; - foreach (var (key, weight) in possibleParcels) - { - accumulated += weight; - if (accumulated >= randomPoint) - { - chosenParcel = key; - break; - } - } - - if (chosenParcel == null) - { - _sawmill.Error($"MailSystem wasn't able to find a deliverable parcel for {candidate.Name}, {candidate.Job}!"); - return; - } - - var mail = EntityManager.SpawnEntity(chosenParcel, Transform(uid).Coordinates); - SetupMail(mail, component, candidate); - } - - if (_containerSystem.TryGetContainer(uid, "queued", out var queued)) - _containerSystem.EmptyContainer(queued); - - _audioSystem.PlayPvs(component.TeleportSound, uid); - } - - public void OpenMail(EntityUid uid, MailComponent? component = null, EntityUid? user = null) - { - if (!Resolve(uid, ref component)) - return; - - _audioSystem.PlayPvs(component.OpenSound, uid); - - if (user != null) - _handsSystem.TryDrop((EntityUid) user); - - if (!_containerSystem.TryGetContainer(uid, "contents", out var contents)) - { - // I silenced this error because it fails non deterministically in tests and doesn't seem to effect anything else. - // _sawmill.Error($"Mail {ToPrettyString(uid)} was missing contents container!"); - return; - } - - foreach (var entity in contents.ContainedEntities.ToArray()) - { - _handsSystem.PickupOrDrop(user, entity); - } - - _tagSystem.AddTag(uid, "Trash"); - _tagSystem.AddTag(uid, "Recyclable"); - component.IsEnabled = false; - UpdateMailTrashState(uid, true); - } - - private void UpdateAntiTamperVisuals(EntityUid uid, bool isLocked) - { - _appearanceSystem.SetData(uid, MailVisuals.IsLocked, isLocked); - } - - private void UpdateMailTrashState(EntityUid uid, bool isTrash) - { - _appearanceSystem.SetData(uid, MailVisuals.IsTrash, isTrash); - } - } - - public struct MailRecipient( - string name, - string job, - string jobIcon, - HashSet> accessTags, - bool mayReceivePriorityMail) - { - public string Name = name; - public string Job = job; - public string JobIcon = jobIcon; - public HashSet> AccessTags = accessTags; - public bool MayReceivePriorityMail = mayReceivePriorityMail; - } -} diff --git a/Content.Server/Nyanotrasen/Objectives/Components/BecomePsionicConditionComponent.cs b/Content.Server/Nyanotrasen/Objectives/Components/BecomePsionicConditionComponent.cs deleted file mode 100644 index 3b677bab2d4..00000000000 --- a/Content.Server/Nyanotrasen/Objectives/Components/BecomePsionicConditionComponent.cs +++ /dev/null @@ -1,11 +0,0 @@ -using Content.Server.Objectives.Systems; - -namespace Content.Server.Objectives.Components; - -/// -/// Requires that the player dies to be complete. -/// -[RegisterComponent, Access(typeof(BecomePsionicConditionSystem))] -public sealed partial class BecomePsionicConditionComponent : Component -{ -} \ No newline at end of file diff --git a/Content.Server/Nyanotrasen/Objectives/Systems/BecomePsionicConditionSystem.cs b/Content.Server/Nyanotrasen/Objectives/Systems/BecomePsionicConditionSystem.cs deleted file mode 100644 index d090c320a41..00000000000 --- a/Content.Server/Nyanotrasen/Objectives/Systems/BecomePsionicConditionSystem.cs +++ /dev/null @@ -1,32 +0,0 @@ -using Content.Shared.Abilities.Psionics; -using Content.Server.Objectives.Components; -using Content.Shared.Mind; -using Content.Shared.Objectives.Components; - -namespace Content.Server.Objectives.Systems -{ - public sealed class BecomePsionicConditionSystem : EntitySystem - { - private EntityQuery _metaQuery; - - public override void Initialize() - { - base.Initialize(); - - SubscribeLocalEvent(OnGetProgress); - } - - private void OnGetProgress(EntityUid uid, BecomePsionicConditionComponent comp, ref ObjectiveGetProgressEvent args) - { - args.Progress = GetProgress(args.Mind); - } - - private float GetProgress(MindComponent mind) - { - var entMan = IoCManager.Resolve(); - if (HasComp(mind.CurrentEntity)) - return 1; - return 0; - } - } -} diff --git a/Content.Server/Nyanotrasen/Psionics/NPC/PsionicNpcCombatSystem.cs b/Content.Server/Nyanotrasen/Psionics/NPC/PsionicNpcCombatSystem.cs new file mode 100644 index 00000000000..9caef36a752 --- /dev/null +++ b/Content.Server/Nyanotrasen/Psionics/NPC/PsionicNpcCombatSystem.cs @@ -0,0 +1,51 @@ +using Content.Shared.Abilities.Psionics; +using Content.Shared.Actions; +using Content.Server.NPC.Events; +using Content.Server.NPC.Components; +using Content.Server.Abilities.Psionics; +using Content.Shared.Psionics; +using Robust.Shared.Prototypes; +using Robust.Shared.Timing; +using Robust.Shared.Utility; + +namespace Content.Server.Psionics.NPC; + +// TODO this is nyanotrasen shitcode. It works, but it needs to be refactored to be more generic. +public sealed class PsionicNpcCombatSystem : EntitySystem +{ + [Dependency] private readonly IGameTiming _timing = default!; + [Dependency] private readonly IPrototypeManager _protoMan = default!; + [Dependency] private readonly SharedActionsSystem _actions = default!; + + private static readonly ProtoId NoosphericZapProto = "NoosphericZapPower"; + private PsionicPowerPrototype NoosphericZap = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(ZapCombat); + + NoosphericZap = _protoMan.Index(NoosphericZapProto); + DebugTools.Assert(NoosphericZap.Actions.Count == 1, "I can't account for this, so it's your problem now"); + } + + private void ZapCombat(Entity ent, ref NPCSteeringEvent args) + { + PsionicComponent? psionics = null; + if (!Resolve(ent, ref psionics, logMissing: true) + || !psionics.Actions.TryGetValue(NoosphericZap.Actions[0], out var action) + || action is null) + return; + + var actionTarget = Comp(action.Value); + if (actionTarget.Cooldown is {} cooldown && cooldown.End > _timing.CurTime + || !TryComp(ent, out var combat) + || !_actions.ValidateEntityTarget(ent, combat.Target, (action.Value, actionTarget)) + || actionTarget.Event is not {} ev) + return; + + ev.Target = combat.Target; + _actions.PerformAction(ent, null, action.Value, actionTarget, ev, _timing.CurTime, predicted: false); + } +} diff --git a/Content.Server/Nyanotrasen/ReverseEngineering/ReverseEngineeringSystem.cs b/Content.Server/Nyanotrasen/ReverseEngineering/ReverseEngineeringSystem.cs index 85fa160d8ee..88da3093d74 100644 --- a/Content.Server/Nyanotrasen/ReverseEngineering/ReverseEngineeringSystem.cs +++ b/Content.Server/Nyanotrasen/ReverseEngineering/ReverseEngineeringSystem.cs @@ -187,22 +187,18 @@ private void UpdateUserInterface(EntityUid uid, ReverseEngineeringMachineCompone if (!Resolve(uid, ref component)) return; - if (!_ui.TryGetUi(uid, ReverseEngineeringMachineUiKey.Key, out var bui)) - return; - EntityUid? item = component.CurrentItem; if (component.CachedMessage == null) component.CachedMessage = GetReverseEngineeringScanMessage(component); - var totalTime = TimeSpan.Zero; var scanning = TryComp(uid, out var active); - var canScan = (item != null && !scanning); + var canScan = item != null && !scanning; var remaining = active != null ? _timing.CurTime - active.StartTime : TimeSpan.Zero; EntityManager.TryGetNetEntity(item, out var netItem); var state = new ReverseEngineeringMachineScanUpdateState(netItem, canScan, component.CachedMessage, scanning, component.SafetyOn, component.AutoScan, component.Progress, remaining, component.AnalysisDuration); - _ui.SetUiState(bui, state); + _ui.SetUiState(uid, ReverseEngineeringMachineUiKey.Key, state); } private ReverseEngineeringTickResult Roll(ReverseEngineeringMachineComponent component, out int actualRoll) diff --git a/Content.Server/Objectives/Components/CodeConditionSystem.cs b/Content.Server/Objectives/Components/CodeConditionSystem.cs new file mode 100644 index 00000000000..581098c3f7e --- /dev/null +++ b/Content.Server/Objectives/Components/CodeConditionSystem.cs @@ -0,0 +1,17 @@ +using Content.Server.Objectives.Systems; + +namespace Content.Server.Objectives.Components; + +/// +/// An objective that is set to complete by code in another system. +/// Use to check and set this. +/// +[RegisterComponent, Access(typeof(CodeConditionSystem))] +public sealed partial class CodeConditionComponent : Component +{ + /// + /// Whether the objective is complete or not. + /// + [DataField] + public bool Completed; +} diff --git a/Content.Server/Objectives/Components/SpiderChargeConditionComponent.cs b/Content.Server/Objectives/Components/SpiderChargeConditionComponent.cs index 368c9f27ed4..9983b35969f 100644 --- a/Content.Server/Objectives/Components/SpiderChargeConditionComponent.cs +++ b/Content.Server/Objectives/Components/SpiderChargeConditionComponent.cs @@ -9,9 +9,6 @@ namespace Content.Server.Objectives.Components; [RegisterComponent, Access(typeof(NinjaConditionsSystem), typeof(SpiderChargeSystem), typeof(SpaceNinjaSystem))] public sealed partial class SpiderChargeConditionComponent : Component { - [DataField, ViewVariables(VVAccess.ReadWrite)] - public bool Detonated; - /// /// Warp point that the spider charge has to target /// diff --git a/Content.Server/Objectives/Components/TerminatorTargetOverrideComponent.cs b/Content.Server/Objectives/Components/TerminatorTargetOverrideComponent.cs deleted file mode 100644 index c66ff55f054..00000000000 --- a/Content.Server/Objectives/Components/TerminatorTargetOverrideComponent.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Content.Server.Objectives.Systems; - -namespace Content.Server.Objectives.Components; - -/// -/// Sets this objective's target to the exterminator's target override, if it has one. -/// If not it will be random. -/// -[RegisterComponent, Access(typeof(TerminatorTargetOverrideSystem))] -public sealed partial class TerminatorTargetOverrideComponent : Component -{ -} diff --git a/Content.Server/Objectives/Components/TerrorConditionComponent.cs b/Content.Server/Objectives/Components/TerrorConditionComponent.cs deleted file mode 100644 index acd3218ad4d..00000000000 --- a/Content.Server/Objectives/Components/TerrorConditionComponent.cs +++ /dev/null @@ -1,17 +0,0 @@ -using Content.Server.Objectives.Systems; -using Content.Shared.Ninja.Systems; - -namespace Content.Server.Objectives.Components; - -/// -/// Requires that the player is a ninja and has called in a threat. -/// -[RegisterComponent, Access(typeof(NinjaConditionsSystem), typeof(SharedSpaceNinjaSystem))] -public sealed partial class TerrorConditionComponent : Component -{ - /// - /// Whether the comms console has been hacked - /// - [DataField("calledInThreat"), ViewVariables(VVAccess.ReadWrite)] - public bool CalledInThreat; -} diff --git a/Content.Server/Objectives/Systems/CodeConditionSystem.cs b/Content.Server/Objectives/Systems/CodeConditionSystem.cs new file mode 100644 index 00000000000..7ba312f4bb9 --- /dev/null +++ b/Content.Server/Objectives/Systems/CodeConditionSystem.cs @@ -0,0 +1,76 @@ +using Content.Server.Objectives.Components; +using Content.Shared.Objectives.Components; +using Content.Shared.Mind; +using Content.Shared.Mind.Components; + +namespace Content.Server.Objectives.Systems; + +/// +/// Handles progress and provides API for systems to use. +/// +public sealed class CodeConditionSystem : EntitySystem +{ + [Dependency] private readonly SharedMindSystem _mind = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnGetProgress); + } + + private void OnGetProgress(Entity ent, ref ObjectiveGetProgressEvent args) + { + args.Progress = ent.Comp.Completed ? 1f : 0f; + } + + /// + /// Returns whether an objective is completed. + /// + public bool IsCompleted(Entity ent) + { + if (!Resolve(ent, ref ent.Comp)) + return false; + + return ent.Comp.Completed; + } + + /// + /// Returns true if a mob's objective with a certain prototype is completed. + /// + public bool IsCompleted(Entity mob, string prototype) + { + if (_mind.GetMind(mob, mob.Comp) is not {} mindId) + return false; + + if (!_mind.TryFindObjective(mindId, prototype, out var obj)) + return false; + + return IsCompleted(obj.Value); + } + + /// + /// Sets an objective's completed field. + /// + public void SetCompleted(Entity ent, bool completed = true) + { + if (!Resolve(ent, ref ent.Comp)) + return; + + ent.Comp.Completed = completed; + } + + /// + /// Sets a mob's objective to complete. + /// + public void SetCompleted(Entity mob, string prototype, bool completed = true) + { + if (_mind.GetMind(mob, mob.Comp) is not {} mindId) + return; + + if (!_mind.TryFindObjective(mindId, prototype, out var obj)) + return; + + SetCompleted(obj.Value, completed); + } +} diff --git a/Content.Server/Objectives/Systems/NinjaConditionsSystem.cs b/Content.Server/Objectives/Systems/NinjaConditionsSystem.cs index 888a365a5dd..47c54b937a0 100644 --- a/Content.Server/Objectives/Systems/NinjaConditionsSystem.cs +++ b/Content.Server/Objectives/Systems/NinjaConditionsSystem.cs @@ -23,11 +23,8 @@ public override void Initialize() SubscribeLocalEvent(OnSpiderChargeRequirementCheck); SubscribeLocalEvent(OnSpiderChargeAfterAssign); - SubscribeLocalEvent(OnSpiderChargeGetProgress); SubscribeLocalEvent(OnStealResearchGetProgress); - - SubscribeLocalEvent(OnTerrorGetProgress); } // doorjack @@ -88,11 +85,6 @@ private void OnSpiderChargeAfterAssign(EntityUid uid, SpiderChargeConditionCompo _metaData.SetEntityName(uid, title, args.Meta); } - private void OnSpiderChargeGetProgress(EntityUid uid, SpiderChargeConditionComponent comp, ref ObjectiveGetProgressEvent args) - { - args.Progress = comp.Detonated ? 1f : 0f; - } - // steal research private void OnStealResearchGetProgress(EntityUid uid, StealResearchConditionComponent comp, ref ObjectiveGetProgressEvent args) @@ -108,9 +100,4 @@ private float StealResearchProgress(StealResearchConditionComponent comp, int ta return MathF.Min(comp.DownloadedNodes.Count / (float) target, 1f); } - - private void OnTerrorGetProgress(EntityUid uid, TerrorConditionComponent comp, ref ObjectiveGetProgressEvent args) - { - args.Progress = comp.CalledInThreat ? 1f : 0f; - } } diff --git a/Content.Server/Objectives/Systems/TerminatorTargetOverrideSystem.cs b/Content.Server/Objectives/Systems/TerminatorTargetOverrideSystem.cs deleted file mode 100644 index 0a81c2810ed..00000000000 --- a/Content.Server/Objectives/Systems/TerminatorTargetOverrideSystem.cs +++ /dev/null @@ -1,41 +0,0 @@ -using Content.Server.Objectives.Components; -using Content.Server.Terminator.Components; -using Content.Shared.Mind; -using Content.Shared.Objectives.Components; - -namespace Content.Server.Objectives.Systems; - -/// -/// Handles copying the exterminator's target override to this objective. -/// -public sealed class TerminatorTargetOverrideSystem : EntitySystem -{ - [Dependency] private readonly TargetObjectiveSystem _target = default!; - - public override void Initialize() - { - base.Initialize(); - - SubscribeLocalEvent(OnAssigned); - } - - private void OnAssigned(EntityUid uid, TerminatorTargetOverrideComponent comp, ref ObjectiveAssignedEvent args) - { - if (args.Mind.OwnedEntity == null) - { - args.Cancelled = true; - return; - } - - var user = args.Mind.OwnedEntity.Value; - if (!TryComp(user, out var terminator)) - { - args.Cancelled = true; - return; - } - - // this exterminator has a target override so set its objective target accordingly - if (terminator.Target != null) - _target.SetTarget(uid, terminator.Target.Value); - } -} diff --git a/Content.Server/PAI/PAISystem.cs b/Content.Server/PAI/PAISystem.cs index e9505b5e6fd..091afb15576 100644 --- a/Content.Server/PAI/PAISystem.cs +++ b/Content.Server/PAI/PAISystem.cs @@ -102,13 +102,15 @@ public void PAITurningOff(EntityUid uid) { // Close the instrument interface if it was open // before closing - if (HasComp(uid) && TryComp(uid, out var actor)) + if (HasComp(uid)) { - _instrumentSystem.ToggleInstrumentUi(uid, actor.PlayerSession); + _instrumentSystem.ToggleInstrumentUi(uid, uid); } // Stop instrument - if (TryComp(uid, out var instrument)) _instrumentSystem.Clean(uid, instrument); + if (TryComp(uid, out var instrument)) + _instrumentSystem.Clean(uid, instrument); + if (TryComp(uid, out var metadata)) { var proto = metadata.EntityPrototype; diff --git a/Content.Server/PDA/PdaSystem.cs b/Content.Server/PDA/PdaSystem.cs index a3436071969..d4934ee24e5 100644 --- a/Content.Server/PDA/PdaSystem.cs +++ b/Content.Server/PDA/PdaSystem.cs @@ -4,7 +4,6 @@ using Content.Server.DeviceNetwork.Components; using Content.Server.Instruments; using Content.Server.Light.EntitySystems; -using Content.Server.Light.Events; using Content.Server.PDA.Ringer; using Content.Server.Station.Systems; using Content.Server.Store.Components; @@ -12,7 +11,9 @@ using Content.Shared.Access.Components; using Content.Shared.CartridgeLoader; using Content.Shared.Chat; +using Content.Shared.Light; using Content.Shared.Light.Components; +using Content.Shared.Light.EntitySystems; using Content.Shared.PDA; using Robust.Server.Containers; using Robust.Server.GameObjects; @@ -41,6 +42,7 @@ public override void Initialize() SubscribeLocalEvent(OnLightToggle); // UI Events: + SubscribeLocalEvent(OnPdaOpen); SubscribeLocalEvent(OnUiMessage); SubscribeLocalEvent(OnUiMessage); SubscribeLocalEvent(OnUiMessage); @@ -145,7 +147,7 @@ public void UpdatePdaUi(EntityUid uid, PdaComponent? pda = null) if (!Resolve(uid, ref pda, false)) return; - if (!_ui.TryGetUi(uid, PdaUiKey.Key, out var ui)) + if (!_ui.HasUi(uid, PdaUiKey.Key)) return; var address = GetDeviceNetAddress(uid); @@ -182,7 +184,15 @@ public void UpdatePdaUi(EntityUid uid, PdaComponent? pda = null) hasInstrument, address); - _ui.SetUiState(ui, state); + _ui.SetUiState(uid, PdaUiKey.Key, state); + } + + private void OnPdaOpen(Entity ent, ref BoundUIOpenedEvent args) + { + if (!PdaUiKey.Key.Equals(args.UiKey)) + return; + + UpdatePdaUi(ent.Owner, ent.Comp); } private void OnUiMessage(EntityUid uid, PdaComponent pda, PdaRequestUpdateInterfaceMessage msg) @@ -198,8 +208,9 @@ private void OnUiMessage(EntityUid uid, PdaComponent pda, PdaToggleFlashlightMes if (!PdaUiKey.Key.Equals(msg.UiKey)) return; - if (TryComp(uid, out var flashlight)) - _unpoweredFlashlight.ToggleLight(uid, flashlight); + // TODO PREDICTION + // When moving this to shared, fill in the user field + _unpoweredFlashlight.TryToggleLight(uid, user: null); } private void OnUiMessage(EntityUid uid, PdaComponent pda, PdaShowRingtoneMessage msg) @@ -208,7 +219,7 @@ private void OnUiMessage(EntityUid uid, PdaComponent pda, PdaShowRingtoneMessage return; if (HasComp(uid)) - _ringer.ToggleRingerUI(uid, msg.Session); + _ringer.ToggleRingerUI(uid, msg.Actor); } private void OnUiMessage(EntityUid uid, PdaComponent pda, PdaShowMusicMessage msg) @@ -217,7 +228,7 @@ private void OnUiMessage(EntityUid uid, PdaComponent pda, PdaShowMusicMessage ms return; if (TryComp(uid, out var instrument)) - _instrument.ToggleInstrumentUi(uid, msg.Session, instrument); + _instrument.ToggleInstrumentUi(uid, msg.Actor, instrument); } private void OnUiMessage(EntityUid uid, PdaComponent pda, PdaShowUplinkMessage msg) @@ -227,7 +238,7 @@ private void OnUiMessage(EntityUid uid, PdaComponent pda, PdaShowUplinkMessage m // check if its locked again to prevent malicious clients opening locked uplinks if (TryComp(uid, out var store) && IsUnlocked(uid)) - _store.ToggleUi(msg.Session.AttachedEntity!.Value, uid, store); + _store.ToggleUi(msg.Actor, uid, store); } private void OnUiMessage(EntityUid uid, PdaComponent pda, PdaLockUplinkMessage msg) diff --git a/Content.Server/PDA/Ringer/RingerSystem.cs b/Content.Server/PDA/Ringer/RingerSystem.cs index f95725873ae..a10544d6966 100644 --- a/Content.Server/PDA/Ringer/RingerSystem.cs +++ b/Content.Server/PDA/Ringer/RingerSystem.cs @@ -81,7 +81,10 @@ private void UpdateRingerUserInterfaceDriver(EntityUid uid, RingerComponent ring private void OnSetRingtone(EntityUid uid, RingerComponent ringer, RingerSetRingtoneMessage args) { - ref var lastSetAt = ref CollectionsMarshal.GetValueRefOrAddDefault(_lastSetRingtoneAt, args.Session.UserId, out var exists); + if (!TryComp(args.Actor, out ActorComponent? actorComp)) + return; + + ref var lastSetAt = ref CollectionsMarshal.GetValueRefOrAddDefault(_lastSetRingtoneAt, actorComp.PlayerSession.UserId, out var exists); // Delay on the client is 0.333, 0.25 is still enough and gives some leeway in case of small time differences if (exists && lastSetAt > _gameTiming.CurTime - TimeSpan.FromMilliseconds(250)) @@ -111,7 +114,7 @@ private void OnSetUplinkRingtone(EntityUid uid, RingerUplinkComponent uplink, re // can't keep store open after locking it if (!uplink.Unlocked) - _ui.TryCloseAll(uid, StoreUiKey.Key); + _ui.CloseUi(uid, StoreUiKey.Key); // no saving the code to prevent meta click set on sus guys pda -> wewlad args.Handled = true; @@ -130,7 +133,7 @@ public void LockUplink(EntityUid uid, RingerUplinkComponent? uplink) return; uplink.Unlocked = false; - _ui.TryCloseAll(uid, StoreUiKey.Key); + _ui.CloseUi(uid, StoreUiKey.Key); } public void RandomizeRingtone(EntityUid uid, RingerComponent ringer, MapInitEvent args) @@ -181,14 +184,12 @@ private bool UpdateRingerRingtone(EntityUid uid, RingerComponent ringer, Note[] private void UpdateRingerUserInterface(EntityUid uid, RingerComponent ringer, bool isPlaying) { - if (_ui.TryGetUi(uid, RingerUiKey.Key, out var bui)) - _ui.SetUiState(bui, new RingerUpdateState(isPlaying, ringer.Ringtone)); + _ui.SetUiState(uid, RingerUiKey.Key, new RingerUpdateState(isPlaying, ringer.Ringtone)); } - public bool ToggleRingerUI(EntityUid uid, ICommonSession session) + public bool ToggleRingerUI(EntityUid uid, EntityUid actor) { - if (_ui.TryGetUi(uid, RingerUiKey.Key, out var bui)) - _ui.ToggleUi(bui, session); + _ui.TryToggleUi(uid, RingerUiKey.Key, actor); return true; } diff --git a/Content.Server/Paper/PaperComponent.cs b/Content.Server/Paper/PaperComponent.cs index 556a197fd4c..6c96b67acb4 100644 --- a/Content.Server/Paper/PaperComponent.cs +++ b/Content.Server/Paper/PaperComponent.cs @@ -3,7 +3,7 @@ namespace Content.Server.Paper; -[NetworkedComponent, RegisterComponent] +[RegisterComponent] public sealed partial class PaperComponent : SharedPaperComponent { public PaperAction Mode; diff --git a/Content.Server/Paper/PaperSystem.cs b/Content.Server/Paper/PaperSystem.cs index 27c94313b21..d9202341d55 100644 --- a/Content.Server/Paper/PaperSystem.cs +++ b/Content.Server/Paper/PaperSystem.cs @@ -67,11 +67,7 @@ private void OnInit(EntityUid uid, PaperComponent paperComp, ComponentInit args) private void BeforeUIOpen(EntityUid uid, PaperComponent paperComp, BeforeActivatableUIOpenEvent args) { paperComp.Mode = PaperAction.Read; - - if (!TryComp(args.User, out var actor)) - return; - - UpdateUserInterface(uid, paperComp, actor.PlayerSession); + UpdateUserInterface(uid, paperComp); } private void OnExamined(EntityUid uid, PaperComponent paperComp, ExaminedEvent args) @@ -108,12 +104,10 @@ private void OnInteractUsing(EntityUid uid, PaperComponent paperComp, InteractUs { var writeEvent = new PaperWriteEvent(uid, args.User); RaiseLocalEvent(args.Used, ref writeEvent); - if (!TryComp(args.User, out var actor)) - return; paperComp.Mode = PaperAction.Write; - _uiSystem.TryOpen(uid, PaperUiKey.Key, actor.PlayerSession); - UpdateUserInterface(uid, paperComp, actor.PlayerSession); + _uiSystem.OpenUi(uid, PaperUiKey.Key, args.User); + UpdateUserInterface(uid, paperComp); args.Handled = true; return; } @@ -157,9 +151,8 @@ private void OnInputTextMessage(EntityUid uid, PaperComponent paperComp, PaperIn if (TryComp(uid, out var meta)) _metaSystem.SetEntityDescription(uid, "", meta); - if (args.Session.AttachedEntity != null) - _adminLogger.Add(LogType.Chat, LogImpact.Low, - $"{ToPrettyString(args.Session.AttachedEntity.Value):player} has written on {ToPrettyString(uid):entity} the following text: {args.Text}"); + _adminLogger.Add(LogType.Chat, LogImpact.Low, + $"{ToPrettyString(args.Actor):player} has written on {ToPrettyString(uid):entity} the following text: {args.Text}"); _audio.PlayPvs(paperComp.Sound, uid); } @@ -213,13 +206,12 @@ public void SetContent(EntityUid uid, string content, PaperComponent? paperComp _appearance.SetData(uid, PaperVisuals.Status, status, appearance); } - public void UpdateUserInterface(EntityUid uid, PaperComponent? paperComp = null, ICommonSession? session = null) + public void UpdateUserInterface(EntityUid uid, PaperComponent? paperComp = null) { if (!Resolve(uid, ref paperComp)) return; - if (_uiSystem.TryGetUi(uid, PaperUiKey.Key, out var bui)) - _uiSystem.SetUiState(bui, new PaperBoundUserInterfaceState(paperComp.Content, paperComp.StampedBy, paperComp.Mode), session); + _uiSystem.SetUiState(uid, PaperUiKey.Key, new PaperBoundUserInterfaceState(paperComp.Content, paperComp.StampedBy, paperComp.Mode)); } } diff --git a/Content.Server/Parallax/BiomeSystem.cs b/Content.Server/Parallax/BiomeSystem.cs index 342d24f7d68..88b0b12b163 100644 --- a/Content.Server/Parallax/BiomeSystem.cs +++ b/Content.Server/Parallax/BiomeSystem.cs @@ -973,7 +973,7 @@ private void UnloadChunk(BiomeComponent component, EntityUid gridUid, MapGridCom /// /// Creates a simple planet setup for a map. /// - public void EnsurePlanet(EntityUid mapUid, BiomeTemplatePrototype biomeTemplate, int? seed = null, MetaDataComponent? metadata = null) + public void EnsurePlanet(EntityUid mapUid, BiomeTemplatePrototype biomeTemplate, int? seed = null, MetaDataComponent? metadata = null, Color? mapLight = null) { if (!Resolve(mapUid, ref metadata)) return; @@ -998,7 +998,7 @@ public void EnsurePlanet(EntityUid mapUid, BiomeTemplatePrototype biomeTemplate, // Lava: #A34931 var light = EnsureComp(mapUid); - light.AmbientLightColor = Color.FromHex("#D8B059"); + light.AmbientLightColor = mapLight ?? Color.FromHex("#D8B059"); Dirty(mapUid, light, metadata); var moles = new float[Atmospherics.AdjustedNumberOfGases]; diff --git a/Content.Server/ParticleAccelerator/EntitySystems/ParticleAcceleratorSystem.ControlBox.cs b/Content.Server/ParticleAccelerator/EntitySystems/ParticleAcceleratorSystem.ControlBox.cs index 5d373652a97..f3cff9f2e72 100644 --- a/Content.Server/ParticleAccelerator/EntitySystems/ParticleAcceleratorSystem.ControlBox.cs +++ b/Content.Server/ParticleAccelerator/EntitySystems/ParticleAcceleratorSystem.ControlBox.cs @@ -67,7 +67,7 @@ public void Fire(EntityUid uid, TimeSpan curTime, ParticleAcceleratorControlBoxC FireEmitter(comp.StarboardEmitter!.Value, strength); } - public void SwitchOn(EntityUid uid, ICommonSession? user = null, ParticleAcceleratorControlBoxComponent? comp = null) + public void SwitchOn(EntityUid uid, EntityUid? user = null, ParticleAcceleratorControlBoxComponent? comp = null) { if (!Resolve(uid, ref comp)) return; @@ -77,7 +77,7 @@ public void SwitchOn(EntityUid uid, ICommonSession? user = null, ParticleAcceler if (comp.Enabled || !comp.CanBeEnabled) return; - if (user?.AttachedEntity is { } player) + if (user is { } player) _adminLogger.Add(LogType.Action, LogImpact.Low, $"{ToPrettyString(player):player} has turned {ToPrettyString(uid)} on"); comp.Enabled = true; @@ -90,14 +90,14 @@ public void SwitchOn(EntityUid uid, ICommonSession? user = null, ParticleAcceler UpdateUI(uid, comp); } - public void SwitchOff(EntityUid uid, ICommonSession? user = null, ParticleAcceleratorControlBoxComponent? comp = null) + public void SwitchOff(EntityUid uid, EntityUid? user = null, ParticleAcceleratorControlBoxComponent? comp = null) { if (!Resolve(uid, ref comp)) return; if (!comp.Enabled) return; - if (user?.AttachedEntity is { } player) + if (user is { } player) _adminLogger.Add(LogType.Action, LogImpact.Low, $"{ToPrettyString(player):player} has turned {ToPrettyString(uid)} off"); comp.Enabled = false; @@ -138,7 +138,7 @@ public void PowerOff(EntityUid uid, ParticleAcceleratorControlBoxComponent? comp UpdateUI(uid, comp); } - public void SetStrength(EntityUid uid, ParticleAcceleratorPowerState strength, ICommonSession? user = null, ParticleAcceleratorControlBoxComponent? comp = null) + public void SetStrength(EntityUid uid, ParticleAcceleratorPowerState strength, EntityUid? user = null, ParticleAcceleratorControlBoxComponent? comp = null) { if (!Resolve(uid, ref comp)) return; @@ -154,7 +154,7 @@ public void SetStrength(EntityUid uid, ParticleAcceleratorPowerState strength, I if (strength == comp.SelectedStrength) return; - if (user?.AttachedEntity is { } player) + if (user is { } player) { var impact = strength switch { @@ -235,7 +235,8 @@ private void UpdateUI(EntityUid uid, ParticleAcceleratorControlBoxComponent? com { if (!Resolve(uid, ref comp)) return; - if (!_uiSystem.TryGetUi(uid, ParticleAcceleratorControlBoxUiKey.Key, out var bui)) + + if (!_uiSystem.HasUi(uid, ParticleAcceleratorControlBoxUiKey.Key)) return; var draw = 0f; @@ -247,7 +248,7 @@ private void UpdateUI(EntityUid uid, ParticleAcceleratorControlBoxComponent? com receive = powerConsumer.ReceivedPower; } - _uiSystem.SetUiState(bui, new ParticleAcceleratorUIState( + _uiSystem.SetUiState(uid, ParticleAcceleratorControlBoxUiKey.Key, new ParticleAcceleratorUIState( comp.Assembled, comp.Enabled, comp.SelectedStrength, @@ -346,7 +347,7 @@ private void OnControlBoxPowerChange(EntityUid uid, ParticleAcceleratorControlBo UpdateAppearance(uid, comp); if (!args.Powered) - _uiSystem.TryCloseAll(uid, ParticleAcceleratorControlBoxUiKey.Key); + _uiSystem.CloseUi(uid, ParticleAcceleratorControlBoxUiKey.Key); } private void OnUISetEnableMessage(EntityUid uid, ParticleAcceleratorControlBoxComponent comp, ParticleAcceleratorSetEnableMessage msg) @@ -361,10 +362,10 @@ private void OnUISetEnableMessage(EntityUid uid, ParticleAcceleratorControlBoxCo if (msg.Enabled) { if (comp.Assembled) - SwitchOn(uid, msg.Session, comp); + SwitchOn(uid, msg.Actor, comp); } else - SwitchOff(uid, msg.Session, comp); + SwitchOff(uid, msg.Actor, comp); UpdateUI(uid, comp); } @@ -378,7 +379,7 @@ private void OnUISetPowerMessage(EntityUid uid, ParticleAcceleratorControlBoxCom if (TryComp(uid, out var apcPower) && !apcPower.Powered) return; - SetStrength(uid, msg.State, msg.Session, comp); + SetStrength(uid, msg.State, msg.Actor, comp); UpdateUI(uid, comp); } @@ -392,7 +393,7 @@ private void OnUIRescanMessage(EntityUid uid, ParticleAcceleratorControlBoxCompo if (TryComp(uid, out var apcPower) && !apcPower.Powered) return; - RescanParts(uid, msg.Session, comp); + RescanParts(uid, msg.Actor, comp); UpdateUI(uid, comp); } diff --git a/Content.Server/ParticleAccelerator/EntitySystems/ParticleAcceleratorSystem.Parts.cs b/Content.Server/ParticleAccelerator/EntitySystems/ParticleAcceleratorSystem.Parts.cs index bdbc7b3f5bc..99bb0d5cbda 100644 --- a/Content.Server/ParticleAccelerator/EntitySystems/ParticleAcceleratorSystem.Parts.cs +++ b/Content.Server/ParticleAccelerator/EntitySystems/ParticleAcceleratorSystem.Parts.cs @@ -18,7 +18,7 @@ private void InitializePartSystem() SubscribeLocalEvent(BodyTypeChanged); } - public void RescanParts(EntityUid uid, ICommonSession? user = null, ParticleAcceleratorControlBoxComponent? controller = null) + public void RescanParts(EntityUid uid, EntityUid? user = null, ParticleAcceleratorControlBoxComponent? controller = null) { if (!Resolve(uid, ref controller)) return; diff --git a/Content.Server/ParticleAccelerator/Wires/ParticleAcceleratorLimiterWireAction.cs b/Content.Server/ParticleAccelerator/Wires/ParticleAcceleratorLimiterWireAction.cs index 0cbd47c233a..0645944a2ac 100644 --- a/Content.Server/ParticleAccelerator/Wires/ParticleAcceleratorLimiterWireAction.cs +++ b/Content.Server/ParticleAccelerator/Wires/ParticleAcceleratorLimiterWireAction.cs @@ -48,8 +48,7 @@ public override bool Mend(EntityUid user, Wire wire, ParticleAcceleratorControlB // Yes, it's a feature that mending this wire WON'T WORK if the strength wire is also cut. // Since that blocks SetStrength(). var paSystem = EntityManager.System(); - var userSession = EntityManager.TryGetComponent(user, out var actor) ? actor.PlayerSession : null; - paSystem.SetStrength(wire.Owner, controller.MaxStrength, userSession, controller); + paSystem.SetStrength(wire.Owner, controller.MaxStrength, user, controller); return true; } diff --git a/Content.Server/ParticleAccelerator/Wires/ParticleAcceleratorStrengthWireAction.cs b/Content.Server/ParticleAccelerator/Wires/ParticleAcceleratorStrengthWireAction.cs index 65fa76ee413..1650960bd31 100644 --- a/Content.Server/ParticleAccelerator/Wires/ParticleAcceleratorStrengthWireAction.cs +++ b/Content.Server/ParticleAccelerator/Wires/ParticleAcceleratorStrengthWireAction.cs @@ -33,7 +33,6 @@ public override bool Mend(EntityUid user, Wire wire, ParticleAcceleratorControlB public override void Pulse(EntityUid user, Wire wire, ParticleAcceleratorControlBoxComponent controller) { var paSystem = EntityManager.System(); - var userSession = EntityManager.TryGetComponent(user, out var actor) ? actor.PlayerSession : null; - paSystem.SetStrength(wire.Owner, (ParticleAcceleratorPowerState) ((int) controller.SelectedStrength + 1), userSession, controller); + paSystem.SetStrength(wire.Owner, (ParticleAcceleratorPowerState) ((int) controller.SelectedStrength + 1), user, controller); } } diff --git a/Content.Server/ParticleAccelerator/Wires/ParticleAcceleratorToggleWireAction.cs b/Content.Server/ParticleAccelerator/Wires/ParticleAcceleratorToggleWireAction.cs index c43403edd41..40a15d2bc50 100644 --- a/Content.Server/ParticleAccelerator/Wires/ParticleAcceleratorToggleWireAction.cs +++ b/Content.Server/ParticleAccelerator/Wires/ParticleAcceleratorToggleWireAction.cs @@ -23,10 +23,9 @@ public sealed partial class ParticleAcceleratorPowerWireAction : ComponentWireAc public override bool Cut(EntityUid user, Wire wire, ParticleAcceleratorControlBoxComponent controller) { var paSystem = EntityManager.System(); - var userSession = EntityManager.TryGetComponent(user, out var actor) ? actor.PlayerSession : null; controller.CanBeEnabled = false; - paSystem.SwitchOff(wire.Owner, userSession, controller); + paSystem.SwitchOff(wire.Owner, user, controller); return true; } @@ -39,11 +38,10 @@ public override bool Mend(EntityUid user, Wire wire, ParticleAcceleratorControlB public override void Pulse(EntityUid user, Wire wire, ParticleAcceleratorControlBoxComponent controller) { var paSystem = EntityManager.System(); - var userSession = EntityManager.TryGetComponent(user, out var actor) ? actor.PlayerSession : null; if (controller.Enabled) - paSystem.SwitchOff(wire.Owner, userSession, controller); + paSystem.SwitchOff(wire.Owner, user, controller); else if (controller.Assembled) - paSystem.SwitchOn(wire.Owner, userSession, controller); + paSystem.SwitchOn(wire.Owner, user, controller); } } diff --git a/Content.Server/Pinpointer/NavMapSystem.cs b/Content.Server/Pinpointer/NavMapSystem.cs index aee8b901910..5881daa0689 100644 --- a/Content.Server/Pinpointer/NavMapSystem.cs +++ b/Content.Server/Pinpointer/NavMapSystem.cs @@ -1,61 +1,65 @@ -using System.Diagnostics.CodeAnalysis; using Content.Server.Administration.Logs; +using Content.Server.Atmos.Components; +using Content.Server.Atmos.EntitySystems; using Content.Server.Station.Systems; using Content.Server.Warps; using Content.Shared.Database; using Content.Shared.Examine; using Content.Shared.Localizations; +using Content.Shared.Maps; using Content.Shared.Pinpointer; -using Content.Shared.Tag; using JetBrains.Annotations; -using Robust.Server.GameObjects; -using Robust.Shared.GameStates; using Robust.Shared.Map; using Robust.Shared.Map.Components; -using Robust.Shared.Physics; -using Robust.Shared.Physics.Components; +using Robust.Shared.Timing; +using System.Diagnostics.CodeAnalysis; namespace Content.Server.Pinpointer; /// /// Handles data to be used for in-grid map displays. /// -public sealed class NavMapSystem : SharedNavMapSystem +public sealed partial class NavMapSystem : SharedNavMapSystem { [Dependency] private readonly IAdminLogManager _adminLog = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; - [Dependency] private readonly TagSystem _tags = default!; - [Dependency] private readonly MapSystem _map = default!; + [Dependency] private readonly SharedMapSystem _mapSystem = default!; + [Dependency] private readonly SharedTransformSystem _transformSystem = default!; [Dependency] private readonly IMapManager _mapManager = default!; - [Dependency] private readonly TransformSystem _transform = default!; - - private EntityQuery _physicsQuery; - private EntityQuery _tagQuery; + [Dependency] private readonly IGameTiming _gameTiming = default!; + [Dependency] private readonly ITileDefinitionManager _tileDefManager = default!; public const float CloseDistance = 15f; public const float FarDistance = 30f; + private EntityQuery _airtightQuery; + private EntityQuery _gridQuery; + private EntityQuery _navQuery; + public override void Initialize() { base.Initialize(); - _physicsQuery = GetEntityQuery(); - _tagQuery = GetEntityQuery(); + var categories = Enum.GetNames(typeof(NavMapChunkType)).Length - 1; // -1 due to "Invalid" entry. + if (Categories != categories) + throw new Exception($"{nameof(Categories)} must be equal to the number of chunk types"); + + _airtightQuery = GetEntityQuery(); + _gridQuery = GetEntityQuery(); + _navQuery = GetEntityQuery(); - SubscribeLocalEvent(OnAnchorChange); - SubscribeLocalEvent(OnReAnchor); + // Initialization events SubscribeLocalEvent(OnStationInit); - SubscribeLocalEvent(OnNavMapStartup); - SubscribeLocalEvent(OnGetState); + + // Grid change events SubscribeLocalEvent(OnNavMapSplit); + SubscribeLocalEvent(OnTileChanged); + + SubscribeLocalEvent(OnAirtightChange); + // Beacon events SubscribeLocalEvent(OnNavMapBeaconMapInit); - SubscribeLocalEvent(OnNavMapBeaconStartup); SubscribeLocalEvent(OnNavMapBeaconAnchor); - - SubscribeLocalEvent(OnNavMapDoorStartup); - SubscribeLocalEvent(OnNavMapDoorAnchor); - SubscribeLocalEvent(OnConfigureMessage); SubscribeLocalEvent(OnConfigurableMapInit); SubscribeLocalEvent(OnConfigurableExamined); @@ -67,64 +71,137 @@ private void OnStationInit(StationGridAddedEvent ev) RefreshGrid(comp, Comp(ev.GridId)); } - private void OnNavMapBeaconMapInit(EntityUid uid, NavMapBeaconComponent component, MapInitEvent args) + #region: Grid change event handling + + private void OnNavMapSplit(ref GridSplitEvent args) { - if (component.DefaultText == null || component.Text != null) + if (!_navQuery.TryComp(args.Grid, out var comp)) return; - component.Text = Loc.GetString(component.DefaultText); - Dirty(uid, component); - RefreshNavGrid(uid); + foreach (var grid in args.NewGrids) + { + var newComp = EnsureComp(grid); + RefreshGrid(comp, newComp); + } + + RefreshGrid(comp, _gridQuery.GetComponent(args.Grid)); } - private void OnNavMapBeaconStartup(EntityUid uid, NavMapBeaconComponent component, ComponentStartup args) + private NavMapChunk EnsureChunk(NavMapComponent component, Vector2i origin) { - RefreshNavGrid(uid); + if (!component.Chunks.TryGetValue(origin, out var chunk)) + { + chunk = new(origin); + component.Chunks[origin] = chunk; + } + + return chunk; } - private void OnNavMapBeaconAnchor(EntityUid uid, NavMapBeaconComponent component, ref AnchorStateChangedEvent args) + private void OnTileChanged(ref TileChangedEvent ev) { - UpdateBeaconEnabledVisuals((uid, component)); - RefreshNavGrid(uid); + if (!ev.EmptyChanged || !_navQuery.TryComp(ev.NewTile.GridUid, out var navMap)) + return; + + var tile = ev.NewTile.GridIndices; + var chunkOrigin = SharedMapSystem.GetChunkIndices(tile, ChunkSize); + + var chunk = EnsureChunk(navMap, chunkOrigin); + + // This could be easily replaced in the future to accommodate diagonal tiles + var relative = SharedMapSystem.GetChunkRelative(tile, ChunkSize); + ref var tileData = ref chunk.TileData[GetTileIndex(relative)]; + + if (ev.NewTile.IsSpace(_tileDefManager)) + { + tileData = 0; + if (PruneEmpty((ev.NewTile.GridUid, navMap), chunk)) + return; + } + else + { + tileData = FloorMask; + } + + DirtyChunk((ev.NewTile.GridUid, navMap), chunk); } - private void OnNavMapDoorStartup(Entity ent, ref ComponentStartup args) + private void DirtyChunk(Entity entity, NavMapChunk chunk) { - RefreshNavGrid(ent); + if (chunk.LastUpdate == _gameTiming.CurTick) + return; + + chunk.LastUpdate = _gameTiming.CurTick; + Dirty(entity); } - private void OnNavMapDoorAnchor(Entity ent, ref AnchorStateChangedEvent args) + private void OnAirtightChange(ref AirtightChanged args) { - RefreshNavGrid(ent); + if (args.AirBlockedChanged) + return; + + var gridUid = args.Position.Grid; + + if (!_navQuery.TryComp(gridUid, out var navMap) || + !_gridQuery.TryComp(gridUid, out var mapGrid)) + { + return; + } + + var chunkOrigin = SharedMapSystem.GetChunkIndices(args.Position.Tile, ChunkSize); + var (newValue, chunk) = RefreshTileEntityContents(gridUid, navMap, mapGrid, chunkOrigin, args.Position.Tile, setFloor: false); + + if (newValue == 0 && PruneEmpty((gridUid, navMap), chunk)) + return; + + DirtyChunk((gridUid, navMap), chunk); } - private void OnConfigureMessage(Entity ent, ref NavMapBeaconConfigureBuiMessage args) + #endregion + + #region: Beacon event handling + + private void OnNavMapBeaconMapInit(EntityUid uid, NavMapBeaconComponent component, MapInitEvent args) { - if (args.Session.AttachedEntity is not { } user) + if (component.DefaultText == null || component.Text != null) return; - if (!TryComp(ent, out var navMap)) + component.Text = Loc.GetString(component.DefaultText); + Dirty(uid, component); + + UpdateNavMapBeaconData(uid, component); + } + + private void OnNavMapBeaconAnchor(EntityUid uid, NavMapBeaconComponent component, ref AnchorStateChangedEvent args) + { + UpdateBeaconEnabledVisuals((uid, component)); + UpdateNavMapBeaconData(uid, component); + } + + private void OnConfigureMessage(Entity ent, ref NavMapBeaconConfigureBuiMessage args) + { + if (!TryComp(ent, out var beacon)) return; - if (navMap.Text == args.Text && - navMap.Color == args.Color && - navMap.Enabled == args.Enabled) + if (beacon.Text == args.Text && + beacon.Color == args.Color && + beacon.Enabled == args.Enabled) return; _adminLog.Add(LogType.Action, LogImpact.Medium, - $"{ToPrettyString(user):player} configured NavMapBeacon \'{ToPrettyString(ent):entity}\' with text \'{args.Text}\', color {args.Color.ToHexNoAlpha()}, and {(args.Enabled ? "enabled" : "disabled")} it."); + $"{ToPrettyString(args.Actor):player} configured NavMapBeacon \'{ToPrettyString(ent):entity}\' with text \'{args.Text}\', color {args.Color.ToHexNoAlpha()}, and {(args.Enabled ? "enabled" : "disabled")} it."); if (TryComp(ent, out var warpPoint)) { warpPoint.Location = args.Text; } - navMap.Text = args.Text; - navMap.Color = args.Color; - navMap.Enabled = args.Enabled; - UpdateBeaconEnabledVisuals((ent, navMap)); - Dirty(ent, navMap); - RefreshNavGrid(ent); + beacon.Text = args.Text; + beacon.Color = args.Color; + beacon.Enabled = args.Enabled; + + UpdateBeaconEnabledVisuals((ent, beacon)); + UpdateNavMapBeaconData(ent, beacon); } private void OnConfigurableMapInit(Entity ent, ref MapInitEvent args) @@ -134,9 +211,7 @@ private void OnConfigurableMapInit(Entity ent // We set this on mapinit just in case the text was edited via VV or something. if (TryComp(ent, out var warpPoint)) - { warpPoint.Location = navMap.Text; - } UpdateBeaconEnabledVisuals((ent, navMap)); } @@ -152,231 +227,117 @@ private void OnConfigurableExamined(Entity en ("label", navMap.Text ?? string.Empty))); } - private void UpdateBeaconEnabledVisuals(Entity ent) - { - _appearance.SetData(ent, NavMapBeaconVisuals.Enabled, ent.Comp.Enabled && Transform(ent).Anchored); - } - - /// - /// Refreshes the grid for the corresponding beacon. - /// - /// - private void RefreshNavGrid(EntityUid uid) - { - var xform = Transform(uid); - - if (!TryComp(xform.GridUid, out var navMap)) - return; + #endregion - Dirty(xform.GridUid.Value, navMap); - } + #region: Grid functions - private bool CanBeacon(EntityUid uid, TransformComponent? xform = null) - { - if (!Resolve(uid, ref xform)) - return false; - - return xform.GridUid != null && xform.Anchored; - } - - private void OnNavMapStartup(EntityUid uid, NavMapComponent component, ComponentStartup args) - { - if (!TryComp(uid, out var grid)) - return; - - RefreshGrid(component, grid); - } - - private void OnNavMapSplit(ref GridSplitEvent args) - { - if (!TryComp(args.Grid, out NavMapComponent? comp)) - return; - - var gridQuery = GetEntityQuery(); - - foreach (var grid in args.NewGrids) - { - var newComp = EnsureComp(grid); - RefreshGrid(newComp, gridQuery.GetComponent(grid)); - } - - RefreshGrid(comp, gridQuery.GetComponent(args.Grid)); - } - - private void RefreshGrid(NavMapComponent component, MapGridComponent grid) + private void RefreshGrid(NavMapComponent component, MapGridComponent mapGrid) { + // Clear stale data component.Chunks.Clear(); + component.Beacons.Clear(); - var tiles = grid.GetAllTilesEnumerator(); + // Loop over all tiles + var tileRefs = _mapSystem.GetAllTiles(mapGrid.Owner, mapGrid); - while (tiles.MoveNext(out var tile)) + foreach (var tileRef in tileRefs) { - var chunkOrigin = SharedMapSystem.GetChunkIndices(tile.Value.GridIndices, ChunkSize); + var tile = tileRef.GridIndices; + var chunkOrigin = SharedMapSystem.GetChunkIndices(tile, ChunkSize); - if (!component.Chunks.TryGetValue(chunkOrigin, out var chunk)) - { - chunk = new NavMapChunk(chunkOrigin); - component.Chunks[chunkOrigin] = chunk; - } - - RefreshTile(grid, component, chunk, tile.Value.GridIndices); + var chunk = EnsureChunk(component, chunkOrigin); + chunk.LastUpdate = _gameTiming.CurTick; + RefreshTileEntityContents(mapGrid.Owner, component, mapGrid, chunkOrigin, tile, setFloor: true); } + + Dirty(mapGrid.Owner, component); } - private void OnGetState(EntityUid uid, NavMapComponent component, ref ComponentGetState args) + private (int NewVal, NavMapChunk Chunk) RefreshTileEntityContents(EntityUid uid, + NavMapComponent component, + MapGridComponent mapGrid, + Vector2i chunkOrigin, + Vector2i tile, + bool setFloor) { - if (!TryComp(uid, out var mapGrid)) - return; - - var data = new Dictionary(component.Chunks.Count); - foreach (var (index, chunk) in component.Chunks) - { - data.Add(index, chunk.TileData); - } + var relative = SharedMapSystem.GetChunkRelative(tile, ChunkSize); + var chunk = EnsureChunk(component, chunkOrigin); + ref var tileData = ref chunk.TileData[GetTileIndex(relative)]; - var beaconQuery = AllEntityQuery(); - var beacons = new List(); + // Clear all data except for floor bits + if (setFloor) + tileData = FloorMask; + else + tileData &= FloorMask; - while (beaconQuery.MoveNext(out var beaconUid, out var beacon, out var xform)) + var enumerator = _mapSystem.GetAnchoredEntitiesEnumerator(uid, mapGrid, tile); + while (enumerator.MoveNext(out var ent)) { - if (!beacon.Enabled || xform.GridUid != uid || !CanBeacon(beaconUid, xform)) + if (!_airtightQuery.TryComp(ent, out var airtight)) continue; - // TODO: Make warp points use metadata name instead. - string? name = beacon.Text; - - if (string.IsNullOrEmpty(name)) - { - if (TryComp(beaconUid, out var warpPoint) && warpPoint.Location != null) - { - name = warpPoint.Location; - } - else - { - name = MetaData(beaconUid).EntityName; - } - } - - beacons.Add(new NavMapBeacon(beacon.Color, name, xform.LocalPosition)); + var category = GetEntityType(ent.Value); + if (category == NavMapChunkType.Invalid) + continue; + + var directions = (int)airtight.AirBlockedDirection; + tileData |= directions << (int) category; } - var airlockQuery = EntityQueryEnumerator(); - var airlocks = new List(); - while (airlockQuery.MoveNext(out _, out _, out var xform)) - { - if (xform.GridUid != uid || !xform.Anchored) - continue; + // Remove walls that intersect with doors (unless they can both physically fit on the same tile) + // TODO NAVMAP why can this even happen? + // Is this for blast-doors or something? - var pos = _map.TileIndicesFor(uid, mapGrid, xform.Coordinates); - var enumerator = _map.GetAnchoredEntitiesEnumerator(uid, mapGrid, pos); - - var wallPresent = false; - while (enumerator.MoveNext(out var ent)) - { - if (!_physicsQuery.TryGetComponent(ent, out var body) || - !body.CanCollide || - !body.Hard || - body.BodyType != BodyType.Static || - !_tags.HasTag(ent.Value, "Wall", _tagQuery) && - !_tags.HasTag(ent.Value, "Window", _tagQuery)) - { - continue; - } - - wallPresent = true; - break; - } - - if (wallPresent) - continue; + // Shift airlock bits over to the wall bits + var shiftedAirlockBits = (tileData & AirlockMask) >> ((int) NavMapChunkType.Airlock - (int) NavMapChunkType.Wall); - airlocks.Add(new NavMapAirlock(xform.LocalPosition)); - } + // And then mask door bits + tileData &= ~shiftedAirlockBits; - // TODO: Diffs - args.State = new NavMapComponentState() - { - TileData = data, - Beacons = beacons, - Airlocks = airlocks - }; + return (tileData, chunk); } - private void OnReAnchor(ref ReAnchorEvent ev) + private bool PruneEmpty(Entity entity, NavMapChunk chunk) { - if (TryComp(ev.OldGrid, out var oldGrid) && - TryComp(ev.OldGrid, out var navMap)) + foreach (var val in chunk.TileData) { - var chunkOrigin = SharedMapSystem.GetChunkIndices(ev.TilePos, ChunkSize); - - if (navMap.Chunks.TryGetValue(chunkOrigin, out var chunk)) - { - RefreshTile(oldGrid, navMap, chunk, ev.TilePos); - } + // TODO NAVMAP SIMD + if (val != 0) + return false; } - HandleAnchor(ev.Xform); + entity.Comp.Chunks.Remove(chunk.Origin); + Dirty(entity); + return true; } - private void OnAnchorChange(ref AnchorStateChangedEvent ev) - { - HandleAnchor(ev.Transform); - } + #endregion - private void HandleAnchor(TransformComponent xform) + #region: Beacon functions + + private void UpdateNavMapBeaconData(EntityUid uid, NavMapBeaconComponent component, TransformComponent? xform = null) { - if (!TryComp(xform.GridUid, out var navMap) || - !TryComp(xform.GridUid, out var grid)) + if (!Resolve(uid, ref xform) + || xform.GridUid == null + || !_navQuery.TryComp(xform.GridUid, out var navMap)) return; - var tile = grid.LocalToTile(xform.Coordinates); - var chunkOrigin = SharedMapSystem.GetChunkIndices(tile, ChunkSize); + var meta = MetaData(uid); + var changed = navMap.Beacons.Remove(meta.NetEntity); - if (!navMap.Chunks.TryGetValue(chunkOrigin, out var chunk)) + if (TryCreateNavMapBeaconData(uid, component, xform, meta, out var beaconData)) { - chunk = new NavMapChunk(chunkOrigin); - navMap.Chunks[chunkOrigin] = chunk; + navMap.Beacons.Add(meta.NetEntity, beaconData.Value); + changed = true; } - RefreshTile(grid, navMap, chunk, tile); + if (changed) + Dirty(xform.GridUid.Value, navMap); } - private void RefreshTile(MapGridComponent grid, NavMapComponent component, NavMapChunk chunk, Vector2i tile) + private void UpdateBeaconEnabledVisuals(Entity ent) { - var relative = SharedMapSystem.GetChunkRelative(tile, ChunkSize); - var existing = chunk.TileData; - var flag = GetFlag(relative); - - chunk.TileData &= ~flag; - - var enumerator = grid.GetAnchoredEntitiesEnumerator(tile); - // TODO: Use something to get convex poly. - - while (enumerator.MoveNext(out var ent)) - { - if (!_physicsQuery.TryGetComponent(ent, out var body) || - !body.CanCollide || - !body.Hard || - body.BodyType != BodyType.Static || - !_tags.HasTag(ent.Value, "Wall", _tagQuery) && - !_tags.HasTag(ent.Value, "Window", _tagQuery)) - { - continue; - } - - chunk.TileData |= flag; - break; - } - - if (chunk.TileData == 0) - { - component.Chunks.Remove(chunk.Origin); - } - - if (existing == chunk.TileData) - return; - - Dirty(component); + _appearance.SetData(ent, NavMapBeaconVisuals.Enabled, ent.Comp.Enabled && Transform(ent).Anchored); } /// @@ -389,9 +350,6 @@ public void SetBeaconEnabled(EntityUid uid, bool enabled, NavMapBeaconComponent? comp.Enabled = enabled; UpdateBeaconEnabledVisuals((uid, comp)); - Dirty(uid, comp); - - RefreshNavGrid(uid); } /// @@ -419,7 +377,7 @@ public bool TryGetNearestBeacon(Entity ent, if (!Resolve(ent, ref ent.Comp)) return false; - return TryGetNearestBeacon(_transform.GetMapCoordinates(ent, ent.Comp), out beacon, out beaconCoords); + return TryGetNearestBeacon(_transformSystem.GetMapCoordinates(ent, ent.Comp), out beacon, out beaconCoords); } /// @@ -446,7 +404,7 @@ public bool TryGetNearestBeacon(MapCoordinates coordinates, if (coordinates.MapId != xform.MapID) continue; - var coords = _transform.GetWorldPosition(xform); + var coords = _transformSystem.GetWorldPosition(xform); var distanceSquared = (coordinates.Position - coords).LengthSquared(); if (!float.IsInfinity(minDistance) && distanceSquared >= minDistance) continue; @@ -465,7 +423,7 @@ public string GetNearestBeaconString(Entity ent) if (!Resolve(ent, ref ent.Comp)) return Loc.GetString("nav-beacon-pos-no-beacons"); - return GetNearestBeaconString(_transform.GetMapCoordinates(ent, ent.Comp)); + return GetNearestBeaconString(_transformSystem.GetMapCoordinates(ent, ent.Comp)); } public string GetNearestBeaconString(MapCoordinates coordinates) @@ -494,11 +452,13 @@ public string GetNearestBeaconString(MapCoordinates coordinates) ? Loc.GetString("nav-beacon-pos-format-direction-mod-far") : string.Empty; - // we can null suppress the text being null because TRyGetNearestVisibleStationBeacon always gives us a beacon with not-null text. + // we can null suppress the text being null because TryGetNearestVisibleStationBeacon always gives us a beacon with not-null text. return Loc.GetString("nav-beacon-pos-format-direction", ("modifier", modifier), ("direction", ContentLocalizationManager.FormatDirection(adjustedDir).ToLowerInvariant()), ("color", beacon.Value.Comp.Color), ("marker", beacon.Value.Comp.Text!)); } + + #endregion } diff --git a/Content.Server/Pinpointer/StationMapSystem.cs b/Content.Server/Pinpointer/StationMapSystem.cs index c9db560fef0..b0b3141fb0e 100644 --- a/Content.Server/Pinpointer/StationMapSystem.cs +++ b/Content.Server/Pinpointer/StationMapSystem.cs @@ -24,29 +24,23 @@ public override void Initialize() private void OnStationMapClosed(EntityUid uid, StationMapComponent component, BoundUIClosedEvent args) { - if (!Equals(args.UiKey, StationMapUiKey.Key) || args.Session.AttachedEntity == null) + if (!Equals(args.UiKey, StationMapUiKey.Key)) return; - RemCompDeferred(args.Session.AttachedEntity.Value); + RemCompDeferred(args.Actor); } private void OnUserParentChanged(EntityUid uid, StationMapUserComponent component, ref EntParentChangedMessage args) { - if (TryComp(uid, out var actor)) - { - _ui.TryClose(component.Map, StationMapUiKey.Key, actor.PlayerSession); - } + _ui.CloseUi(component.Map, StationMapUiKey.Key, uid); } private void OnStationMapOpened(EntityUid uid, StationMapComponent component, BoundUIOpenedEvent args) { - if (args.Session.AttachedEntity == null) - return; - if (!_cell.TryUseActivatableCharge(uid)) return; - var comp = EnsureComp(args.Session.AttachedEntity.Value); + var comp = EnsureComp(args.Actor); comp.Map = uid; } } diff --git a/Content.Server/Players/JobWhitelist/JobWhitelistManager.cs b/Content.Server/Players/JobWhitelist/JobWhitelistManager.cs new file mode 100644 index 00000000000..04289a40980 --- /dev/null +++ b/Content.Server/Players/JobWhitelist/JobWhitelistManager.cs @@ -0,0 +1,114 @@ +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Content.Server.Database; +using Content.Shared.CCVar; +using Content.Shared.Players.JobWhitelist; +using Content.Shared.Roles; +using Robust.Server.Player; +using Robust.Shared.Configuration; +using Robust.Shared.Network; +using Robust.Shared.Player; +using Robust.Shared.Prototypes; +using Serilog; + +namespace Content.Server.Players.JobWhitelist; + +public sealed class JobWhitelistManager : IPostInjectInit +{ + [Dependency] private readonly IConfigurationManager _config = default!; + [Dependency] private readonly IServerDbManager _db = default!; + [Dependency] private readonly INetManager _net = default!; + [Dependency] private readonly IPlayerManager _player = default!; + [Dependency] private readonly IPrototypeManager _prototypes = default!; + [Dependency] private readonly UserDbDataManager _userDb = default!; + + private readonly Dictionary> _whitelists = new(); + + public void Initialize() + { + _net.RegisterNetMessage(); + } + + private async Task LoadData(ICommonSession session, CancellationToken cancel) + { + var whitelists = await _db.GetJobWhitelists(session.UserId, cancel); + cancel.ThrowIfCancellationRequested(); + _whitelists[session.UserId] = whitelists.ToHashSet(); + } + + private void FinishLoad(ICommonSession session) + { + SendJobWhitelist(session); + } + + private void ClientDisconnected(ICommonSession session) + { + _whitelists.Remove(session.UserId); + } + + public async void AddWhitelist(NetUserId player, ProtoId job) + { + if (_whitelists.TryGetValue(player, out var whitelists)) + whitelists.Add(job); + + await _db.AddJobWhitelist(player, job); + + if (_player.TryGetSessionById(player, out var session)) + SendJobWhitelist(session); + } + + public bool IsAllowed(ICommonSession session, ProtoId job) + { + if (!_config.GetCVar(CCVars.GameRoleWhitelist)) + return true; + + if (!_prototypes.TryIndex(job, out var jobPrototype) || + !jobPrototype.Whitelisted) + { + return true; + } + + return IsWhitelisted(session.UserId, job); + } + + public bool IsWhitelisted(NetUserId player, ProtoId job) + { + if (!_whitelists.TryGetValue(player, out var whitelists)) + { + Log.Error("Unable to check if player {Player} is whitelisted for {Job}. Stack trace:\\n{StackTrace}", + player, + job, + Environment.StackTrace); + return false; + } + + return whitelists.Contains(job); + } + + public async void RemoveWhitelist(NetUserId player, ProtoId job) + { + _whitelists.GetValueOrDefault(player)?.Remove(job); + await _db.RemoveJobWhitelist(player, job); + + if (_player.TryGetSessionById(new NetUserId(player), out var session)) + SendJobWhitelist(session); + } + + public void SendJobWhitelist(ICommonSession player) + { + var msg = new MsgJobWhitelist + { + Whitelist = _whitelists.GetValueOrDefault(player.UserId) ?? new HashSet() + }; + + _net.ServerSendMessage(msg, player.Channel); + } + + void IPostInjectInit.PostInject() + { + _userDb.AddOnLoadPlayer(LoadData); + _userDb.AddOnFinishLoad(FinishLoad); + _userDb.AddOnPlayerDisconnect(ClientDisconnected); + } +} diff --git a/Content.Server/Players/JobWhitelist/JobWhitelistSystem.cs b/Content.Server/Players/JobWhitelist/JobWhitelistSystem.cs new file mode 100644 index 00000000000..aaada99dea9 --- /dev/null +++ b/Content.Server/Players/JobWhitelist/JobWhitelistSystem.cs @@ -0,0 +1,83 @@ +using System.Collections.Immutable; +using Content.Server.GameTicking.Events; +using Content.Server.Station.Events; +using Content.Shared.CCVar; +using Content.Shared.Roles; +using Robust.Server.Player; +using Robust.Shared.Configuration; +using Robust.Shared.Prototypes; +using Robust.Shared.Utility; + +namespace Content.Server.Players.JobWhitelist; + +public sealed class JobWhitelistSystem : EntitySystem +{ + [Dependency] private readonly IConfigurationManager _config = default!; + [Dependency] private readonly JobWhitelistManager _manager = default!; + [Dependency] private readonly IPlayerManager _player = default!; + [Dependency] private readonly IPrototypeManager _prototypes = default!; + + private ImmutableArray> _whitelistedJobs = []; + + public override void Initialize() + { + SubscribeLocalEvent(OnPrototypesReloaded); + SubscribeLocalEvent(OnStationJobsGetCandidates); + SubscribeLocalEvent(OnIsJobAllowed); + SubscribeLocalEvent(OnGetDisallowedJobs); + + CacheJobs(); + } + + private void OnPrototypesReloaded(PrototypesReloadedEventArgs ev) + { + if (ev.WasModified()) + CacheJobs(); + } + + private void OnStationJobsGetCandidates(ref StationJobsGetCandidatesEvent ev) + { + if (!_config.GetCVar(CCVars.GameRoleWhitelist)) + return; + + for (var i = ev.Jobs.Count - 1; i >= 0; i--) + { + var jobId = ev.Jobs[i]; + if (_player.TryGetSessionById(ev.Player, out var player) && + !_manager.IsAllowed(player, jobId)) + { + ev.Jobs.RemoveSwap(i); + } + } + } + + private void OnIsJobAllowed(ref IsJobAllowedEvent ev) + { + if (!_manager.IsAllowed(ev.Player, ev.JobId)) + ev.Cancelled = true; + } + + private void OnGetDisallowedJobs(ref GetDisallowedJobsEvent ev) + { + if (!_config.GetCVar(CCVars.GameRoleWhitelist)) + return; + + foreach (var job in _whitelistedJobs) + { + if (!_manager.IsAllowed(ev.Player, job)) + ev.Jobs.Add(job); + } + } + + private void CacheJobs() + { + var builder = ImmutableArray.CreateBuilder>(); + foreach (var job in _prototypes.EnumeratePrototypes()) + { + if (job.Whitelisted) + builder.Add(job.ID); + } + + _whitelistedJobs = builder.ToImmutable(); + } +} diff --git a/Content.Server/Players/PlayTimeTracking/PlayTimeTrackingManager.cs b/Content.Server/Players/PlayTimeTracking/PlayTimeTrackingManager.cs index 02d57803154..295d11f8986 100644 --- a/Content.Server/Players/PlayTimeTracking/PlayTimeTrackingManager.cs +++ b/Content.Server/Players/PlayTimeTracking/PlayTimeTrackingManager.cs @@ -55,7 +55,7 @@ namespace Content.Server.Players.PlayTimeTracking; /// Operations like refreshing and sending play time info to clients are deferred until the next frame (note: not tick). /// /// -public sealed partial class PlayTimeTrackingManager : ISharedPlaytimeManager +public sealed partial class PlayTimeTrackingManager : ISharedPlaytimeManager, IPostInjectInit { [Dependency] private readonly IServerDbManager _db = default!; [Dependency] private readonly IServerNetManager _net = default!; @@ -63,6 +63,7 @@ public sealed partial class PlayTimeTrackingManager : ISharedPlaytimeManager [Dependency] private readonly IGameTiming _timing = default!; [Dependency] private readonly ITaskManager _task = default!; [Dependency] private readonly IRuntimeLog _runtimeLog = default!; + [Dependency] private readonly UserDbDataManager _userDb = default!; private ISawmill _sawmill = default!; @@ -317,7 +318,7 @@ public async Task LoadData(ICommonSession session, CancellationToken cancel) var data = new PlayTimeData(); _playTimeData.Add(session, data); - var playTimes = await _db.GetPlayTimes(session.UserId); + var playTimes = await _db.GetPlayTimes(session.UserId, cancel); cancel.ThrowIfCancellationRequested(); foreach (var timer in playTimes) @@ -456,4 +457,10 @@ private sealed class PlayTimeData /// public readonly HashSet DbTrackersDirty = new(); } + + void IPostInjectInit.PostInject() + { + _userDb.AddOnLoadPlayer(LoadData); + _userDb.AddOnPlayerDisconnect(ClientDisconnected); + } } diff --git a/Content.Server/Players/PlayTimeTracking/PlayTimeTrackingSystem.cs b/Content.Server/Players/PlayTimeTracking/PlayTimeTrackingSystem.cs index de532351985..ba7b9f3c37d 100644 --- a/Content.Server/Players/PlayTimeTracking/PlayTimeTrackingSystem.cs +++ b/Content.Server/Players/PlayTimeTracking/PlayTimeTrackingSystem.cs @@ -1,8 +1,12 @@ using System.Linq; +using Content.Server.Administration; +using Content.Server.Administration.Managers; using Content.Server.Afk; using Content.Server.Afk.Events; using Content.Server.GameTicking; +using Content.Server.GameTicking.Events; using Content.Server.Mind; +using Content.Server.Station.Events; using Content.Server.Preferences.Managers; using Content.Shared.CCVar; using Content.Shared.Customization.Systems; @@ -13,7 +17,6 @@ using Content.Shared.Players.PlayTimeTracking; using Content.Shared.Preferences; using Content.Shared.Roles; -using Robust.Server.GameObjects; using Robust.Server.Player; using Robust.Shared.Configuration; using Robust.Shared.Network; @@ -34,6 +37,7 @@ public sealed class PlayTimeTrackingSystem : EntitySystem [Dependency] private readonly IConfigurationManager _cfg = default!; [Dependency] private readonly MindSystem _minds = default!; [Dependency] private readonly PlayTimeTrackingManager _tracking = default!; + [Dependency] private readonly IAdminManager _adminManager = default!; [Dependency] private readonly CharacterRequirementsSystem _characterRequirements = default!; [Dependency] private readonly IServerPreferencesManager _prefs = default!; [Dependency] private readonly IConfigurationManager _config = default!; @@ -54,6 +58,10 @@ public override void Initialize() SubscribeLocalEvent(OnUnAFK); SubscribeLocalEvent(OnMobStateChanged); SubscribeLocalEvent(OnPlayerJoinedLobby); + SubscribeLocalEvent(OnStationJobsGetCandidates); + SubscribeLocalEvent(OnIsJobAllowed); + SubscribeLocalEvent(OnGetDisallowedJobs); + _adminManager.OnPermsChanged += AdminPermsChanged; } public override void Shutdown() @@ -61,6 +69,7 @@ public override void Shutdown() base.Shutdown(); _tracking.CalcTrackers -= CalcTrackers; + _adminManager.OnPermsChanged -= AdminPermsChanged; } private void CalcTrackers(ICommonSession player, HashSet trackers) @@ -68,6 +77,13 @@ private void CalcTrackers(ICommonSession player, HashSet trackers) if (_afk.IsAfk(player)) return; + if (_adminManager.IsAdmin(player)) + { + trackers.Add(PlayTimeTrackingShared.TrackerAdmin); + trackers.Add(PlayTimeTrackingShared.TrackerOverall); + return; + } + if (!IsPlayerAlive(player)) return; @@ -138,6 +154,11 @@ private void OnAFK(ref AFKEvent ev) _tracking.QueueRefreshTrackers(ev.Session); } + private void AdminPermsChanged(AdminPermsChangedEventArgs admin) + { + _tracking.QueueRefreshTrackers(admin.Player); + } + private void OnPlayerAttached(PlayerAttachedEvent ev) { _tracking.QueueRefreshTrackers(ev.Player); @@ -157,6 +178,22 @@ private void OnMobStateChanged(MobStateChangedEvent ev) _tracking.QueueRefreshTrackers(actor.PlayerSession); } + private void OnStationJobsGetCandidates(ref StationJobsGetCandidatesEvent ev) + { + RemoveDisallowedJobs(ev.Player, ev.Jobs); + } + + private void OnIsJobAllowed(ref IsJobAllowedEvent ev) + { + if (!IsAllowed(ev.Player, ev.JobId)) + ev.Cancelled = true; + } + + private void OnGetDisallowedJobs(ref GetDisallowedJobsEvent ev) + { + ev.Jobs.UnionWith(GetDisallowedJobs(ev.Player)); + } + private void OnPlayerJoinedLobby(PlayerJoinedLobbyEvent ev) { _tracking.QueueRefreshTrackers(ev.PlayerSession); @@ -193,9 +230,9 @@ public bool IsAllowed(ICommonSession player, string role) out _); } - public HashSet GetDisallowedJobs(ICommonSession player) + public HashSet> GetDisallowedJobs(ICommonSession player) { - var roles = new HashSet(); + var roles = new HashSet>(); if (!_cfg.GetCVar(CCVars.GameRoleTimers)) return roles; @@ -234,7 +271,7 @@ public HashSet GetDisallowedJobs(ICommonSession player) return roles; } - public void RemoveDisallowedJobs(NetUserId userId, ref List jobs) + public void RemoveDisallowedJobs(NetUserId userId, List> jobs) { if (!_cfg.GetCVar(CCVars.GameRoleTimers)) return; @@ -253,7 +290,7 @@ public void RemoveDisallowedJobs(NetUserId userId, ref List jobs) { var job = jobs[i]; - if (!_prototypes.TryIndex(job, out var jobber) || + if (!_prototypes.TryIndex(job, out var jobber) || jobber.Requirements == null || jobber.Requirements.Count == 0) continue; diff --git a/Content.Server/Pointing/EntitySystems/PointingSystem.cs b/Content.Server/Pointing/EntitySystems/PointingSystem.cs index 9b2e14eff8b..c9e86772fb9 100644 --- a/Content.Server/Pointing/EntitySystems/PointingSystem.cs +++ b/Content.Server/Pointing/EntitySystems/PointingSystem.cs @@ -171,7 +171,7 @@ public bool TryPoint(ICommonSession? session, EntityCoordinates coordsPointed, E { var arrowVisibility = EntityManager.EnsureComponent(arrow); layer = playerVisibility.Layer; - _visibilitySystem.SetLayer(arrow, arrowVisibility, layer); + _visibilitySystem.SetLayer((arrow, arrowVisibility), (ushort) layer); } // Get players that are in range and whose visibility layer matches the arrow's. diff --git a/Content.Server/Polymorph/Systems/ChameleonProjectorSystem.cs b/Content.Server/Polymorph/Systems/ChameleonProjectorSystem.cs new file mode 100644 index 00000000000..1586973a21e --- /dev/null +++ b/Content.Server/Polymorph/Systems/ChameleonProjectorSystem.cs @@ -0,0 +1,99 @@ +using Content.Server.Polymorph.Components; +using Content.Shared.Actions; +using Content.Shared.Construction.Components; +using Content.Shared.Hands; +using Content.Shared.Mobs; +using Content.Shared.Mobs.Components; +using Content.Shared.Mobs.Systems; +using Content.Shared.Polymorph; +using Content.Shared.Polymorph.Components; +using Content.Shared.Polymorph.Systems; +using Content.Shared.StatusIcon.Components; +using Robust.Shared.Physics.Components; + +namespace Content.Server.Polymorph.Systems; + +public sealed class ChameleonProjectorSystem : SharedChameleonProjectorSystem +{ + [Dependency] private readonly MetaDataSystem _meta = default!; + [Dependency] private readonly MobThresholdSystem _mobThreshold = default!; + [Dependency] private readonly PolymorphSystem _polymorph = default!; + [Dependency] private readonly SharedActionsSystem _actions = default!; + [Dependency] private readonly SharedAppearanceSystem _appearance = default!; + [Dependency] private readonly SharedTransformSystem _xform = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnEquippedHand); + SubscribeLocalEvent(OnToggleNoRot); + SubscribeLocalEvent(OnToggleAnchored); + } + + private void OnEquippedHand(Entity ent, ref GotEquippedHandEvent args) + { + if (!TryComp(ent, out var poly)) + return; + + _polymorph.Revert((ent, poly)); + args.Handled = true; + } + + public override void Disguise(ChameleonProjectorComponent proj, EntityUid user, EntityUid entity) + { + if (_polymorph.PolymorphEntity(user, proj.Polymorph) is not {} disguise) + return; + + // make disguise look real (for simple things at least) + var meta = MetaData(entity); + _meta.SetEntityName(disguise, meta.EntityName); + _meta.SetEntityDescription(disguise, meta.EntityDescription); + + var comp = EnsureComp(disguise); + comp.SourceEntity = entity; + comp.SourceProto = Prototype(entity)?.ID; + Dirty(disguise, comp); + + // no sechud trolling + RemComp(disguise); + + _appearance.CopyData(entity, disguise); + + var mass = CompOrNull(entity)?.Mass ?? 0f; + + // let the disguise die when its taken enough damage, which then transfers to the player + // health is proportional to mass, and capped to not be insane + if (TryComp(disguise, out var thresholds)) + { + // if the player is of flesh and blood, cap max health to theirs + // so that when reverting damage scales 1:1 and not round removing + var playerMax = _mobThreshold.GetThresholdForState(user, MobState.Dead).Float(); + var max = playerMax == 0f ? proj.MaxHealth : Math.Max(proj.MaxHealth, playerMax); + + var health = Math.Clamp(mass, proj.MinHealth, proj.MaxHealth); + _mobThreshold.SetMobStateThreshold(disguise, health, MobState.Critical, thresholds); + _mobThreshold.SetMobStateThreshold(disguise, max, MobState.Dead, thresholds); + } + + // add actions for controlling transform aspects + _actions.AddAction(disguise, proj.NoRotAction); + _actions.AddAction(disguise, proj.AnchorAction); + } + + private void OnToggleNoRot(Entity ent, ref DisguiseToggleNoRotEvent args) + { + var xform = Transform(ent); + xform.NoLocalRotation = !xform.NoLocalRotation; + } + + private void OnToggleAnchored(Entity ent, ref DisguiseToggleAnchoredEvent args) + { + var uid = ent.Owner; + var xform = Transform(uid); + if (xform.Anchored) + _xform.Unanchor(uid, xform); + else + _xform.AnchorEntity((uid, xform)); + } +} diff --git a/Content.Server/Polymorph/Systems/PolymorphSystem.cs b/Content.Server/Polymorph/Systems/PolymorphSystem.cs index 8cae15d70df..e6ba1d02afd 100644 --- a/Content.Server/Polymorph/Systems/PolymorphSystem.cs +++ b/Content.Server/Polymorph/Systems/PolymorphSystem.cs @@ -199,7 +199,7 @@ private void OnDestruction(Entity ent, ref Destructi var targetTransformComp = Transform(uid); - var child = Spawn(configuration.Entity, targetTransformComp.Coordinates); + var child = Spawn(configuration.Entity, _transform.GetMapCoordinates(uid, targetTransformComp), rotation: _transform.GetWorldRotation(uid)); MakeSentientCommand.MakeSentient(child, EntityManager); diff --git a/Content.Server/Popups/PopupSystem.cs b/Content.Server/Popups/PopupSystem.cs index d1163a2be1b..4aa3d39224c 100644 --- a/Content.Server/Popups/PopupSystem.cs +++ b/Content.Server/Popups/PopupSystem.cs @@ -88,11 +88,19 @@ public override void PopupEntity(string? message, EntityUid uid, EntityUid recip RaiseNetworkEvent(new PopupEntityEvent(message, type, GetNetEntity(uid)), actor.PlayerSession); } + public override void PopupClient(string? message, EntityUid? recipient, PopupType type = PopupType.Small) + { + } + public override void PopupClient(string? message, EntityUid uid, EntityUid? recipient, PopupType type = PopupType.Small) { // do nothing duh its for client only } + public override void PopupClient(string? message, EntityCoordinates coordinates, EntityUid? recipient, PopupType type = PopupType.Small) + { + } + public override void PopupEntity(string? message, EntityUid uid, ICommonSession recipient, PopupType type = PopupType.Small) { if (message == null) diff --git a/Content.Server/Power/Components/ActivatableUIRequiresPowerComponent.cs b/Content.Server/Power/Components/ActivatableUIRequiresPowerComponent.cs deleted file mode 100644 index c387457adba..00000000000 --- a/Content.Server/Power/Components/ActivatableUIRequiresPowerComponent.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace Content.Server.Power.Components -{ - [RegisterComponent] - public sealed partial class ActivatableUIRequiresPowerComponent : Component - { - } -} - diff --git a/Content.Server/Power/Components/ChargerComponent.cs b/Content.Server/Power/Components/ChargerComponent.cs index af4498f01ba..4a3c83ae03b 100644 --- a/Content.Server/Power/Components/ChargerComponent.cs +++ b/Content.Server/Power/Components/ChargerComponent.cs @@ -26,5 +26,12 @@ public sealed partial class ChargerComponent : Component /// [DataField("whitelist")] public EntityWhitelist? Whitelist; + + /// + /// Indicates whether the charger is portable and thus subject to EMP effects + /// and bypasses checks for transform, anchored, and ApcPowerReceiverComponent. + /// + [DataField] + public bool Portable = false; } } diff --git a/Content.Server/Power/Components/SiliconEmitSoundOnDrainedComponent.cs b/Content.Server/Power/Components/SiliconEmitSoundOnDrainedComponent.cs index 4e5121d6076..481311d9681 100644 --- a/Content.Server/Power/Components/SiliconEmitSoundOnDrainedComponent.cs +++ b/Content.Server/Power/Components/SiliconEmitSoundOnDrainedComponent.cs @@ -1,6 +1,6 @@ -using System.ComponentModel.DataAnnotations; using Robust.Shared.Audio; using Content.Server.Sound.Components; +using Content.Shared.Sound.Components; namespace Content.Server.Silicon; diff --git a/Content.Server/Power/Components/UpgradeBatteryComponent.cs b/Content.Server/Power/Components/UpgradeBatteryComponent.cs new file mode 100644 index 00000000000..b676883b711 --- /dev/null +++ b/Content.Server/Power/Components/UpgradeBatteryComponent.cs @@ -0,0 +1,28 @@ +using Content.Shared.Construction.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; + +namespace Content.Server.Power.Components +{ + + [RegisterComponent] + public sealed partial class UpgradeBatteryComponent : Component + { + /// + /// The machine part that affects the power capacity. + /// + [DataField(customTypeSerializer: typeof(PrototypeIdSerializer))] + public string MachinePartPowerCapacity = "PowerCell"; + + /// + /// The machine part rating is raised to this power when calculating power gain + /// + [DataField] + public float MaxChargeMultiplier = 2f; + + /// + /// Power gain scaling + /// + [DataField] + public float BaseMaxCharge = 8000000; + } +} diff --git a/Content.Server/Power/Components/UpgradePowerDrawComponent.cs b/Content.Server/Power/Components/UpgradePowerDrawComponent.cs new file mode 100644 index 00000000000..23db4905cc5 --- /dev/null +++ b/Content.Server/Power/Components/UpgradePowerDrawComponent.cs @@ -0,0 +1,41 @@ +using Content.Server.Construction.Components; +using Content.Shared.Construction.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; + +namespace Content.Server.Power.Components; + +/// +/// This is used for machines whose power draw +/// can be decreased through machine part upgrades. +/// +[RegisterComponent] +public sealed partial class UpgradePowerDrawComponent : Component +{ + /// + /// The base power draw of the machine. + /// Prioritizes hv/mv draw over lv draw. + /// Value is initializezd on map init from + /// + [ViewVariables(VVAccess.ReadWrite)] + public float BaseLoad; + + /// + /// The machine part that affects the power draw. + /// + [DataField(customTypeSerializer: typeof(PrototypeIdSerializer)), ViewVariables(VVAccess.ReadWrite)] + public string MachinePartPowerDraw = "Capacitor"; + + /// + /// The multiplier used for scaling the power draw. + /// + [DataField(required: true), ViewVariables(VVAccess.ReadWrite)] + public float PowerDrawMultiplier = 1f; + + /// + /// What type of scaling is being used? + /// + [DataField(required: true), ViewVariables(VVAccess.ReadWrite)] + public MachineUpgradeScalingType Scaling; +} + + diff --git a/Content.Server/Power/Components/UpgradePowerSupplierComponent.cs b/Content.Server/Power/Components/UpgradePowerSupplierComponent.cs new file mode 100644 index 00000000000..012c38a6b90 --- /dev/null +++ b/Content.Server/Power/Components/UpgradePowerSupplierComponent.cs @@ -0,0 +1,36 @@ +using Content.Server.Construction.Components; +using Content.Shared.Construction.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; + +namespace Content.Server.Power.Components; + +[RegisterComponent] +public sealed partial class UpgradePowerSupplierComponent : Component +{ + [ViewVariables(VVAccess.ReadWrite)] + public float BaseSupplyRate; + + /// + /// The machine part that affects the power supplu. + /// + [DataField(customTypeSerializer: typeof(PrototypeIdSerializer))] + public string MachinePartPowerSupply = "Capacitor"; + + /// + /// The multiplier used for scaling the power supply. + /// + [DataField(required: true)] + public float PowerSupplyMultiplier = 1f; + + /// + /// What type of scaling is being used? + /// + [DataField(required: true)] + public MachineUpgradeScalingType Scaling; + + /// + /// The current value that the power supply is being scaled by, + /// + [DataField] + public float ActualScalar = 1f; +} diff --git a/Content.Server/Power/Components/UpgradePowerSupplyRampingComponent.cs b/Content.Server/Power/Components/UpgradePowerSupplyRampingComponent.cs new file mode 100644 index 00000000000..61a654b383b --- /dev/null +++ b/Content.Server/Power/Components/UpgradePowerSupplyRampingComponent.cs @@ -0,0 +1,36 @@ +using Content.Server.Construction.Components; +using Content.Shared.Construction.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; + +namespace Content.Server.Power.Components; + +[RegisterComponent] +public sealed partial class UpgradePowerSupplyRampingComponent : Component +{ + [ViewVariables(VVAccess.ReadWrite)] + public float BaseRampRate; + + /// + /// The machine part that affects the power supply ramping + /// + [DataField(customTypeSerializer: typeof(PrototypeIdSerializer))] + public string MachinePartRampRate = "Capacitor"; + + /// + /// The multiplier used for scaling the power supply ramping + /// + [DataField] + public float SupplyRampingMultiplier = 1f; + + /// + /// What type of scaling is being used? + /// + [DataField(required: true)] + public MachineUpgradeScalingType Scaling; + + /// + /// The current value that the power supply is being scaled by + /// + [DataField] + public float ActualScalar = 1f; +} diff --git a/Content.Server/Power/EntitySystems/ActivatableUIRequiresPowerSystem.cs b/Content.Server/Power/EntitySystems/ActivatableUIRequiresPowerSystem.cs index 561b0e71f09..72843a65b84 100644 --- a/Content.Server/Power/EntitySystems/ActivatableUIRequiresPowerSystem.cs +++ b/Content.Server/Power/EntitySystems/ActivatableUIRequiresPowerSystem.cs @@ -4,11 +4,12 @@ using JetBrains.Annotations; using Content.Shared.Wires; using Content.Server.UserInterface; +using Content.Shared.Power.Components; +using ActivatableUISystem = Content.Shared.UserInterface.ActivatableUISystem; namespace Content.Server.Power.EntitySystems; -[UsedImplicitly] -internal sealed class ActivatableUIRequiresPowerSystem : EntitySystem +public sealed class ActivatableUIRequiresPowerSystem : EntitySystem { [Dependency] private readonly ActivatableUISystem _activatableUI = default!; [Dependency] private readonly SharedPopupSystem _popup = default!; diff --git a/Content.Server/Power/EntitySystems/ApcSystem.cs b/Content.Server/Power/EntitySystems/ApcSystem.cs index f345c9e88ea..a449f3555ac 100644 --- a/Content.Server/Power/EntitySystems/ApcSystem.cs +++ b/Content.Server/Power/EntitySystems/ApcSystem.cs @@ -68,11 +68,8 @@ private void OnApcInit(EntityUid uid, ApcComponent component, MapInitEvent args) //Update the HasAccess var for UI to read private void OnBoundUiOpen(EntityUid uid, ApcComponent component, BoundUIOpenedEvent args) { - if (args.Session.AttachedEntity == null) - return; - // TODO: this should be per-player not stored on the apc - component.HasAccess = _accessReader.IsAllowed(args.Session.AttachedEntity.Value, uid); + component.HasAccess = _accessReader.IsAllowed(args.Actor, uid); UpdateApcState(uid, component); } @@ -83,21 +80,18 @@ private void OnToggleMainBreaker(EntityUid uid, ApcComponent component, ApcToggl if (attemptEv.Cancelled) { _popup.PopupCursor(Loc.GetString("apc-component-on-toggle-cancel"), - args.Session, PopupType.Medium); + args.Actor, PopupType.Medium); return; } - if (args.Session.AttachedEntity == null) - return; - - if (_accessReader.IsAllowed(args.Session.AttachedEntity.Value, uid)) + if (_accessReader.IsAllowed(args.Actor, uid)) { ApcToggleBreaker(uid, component); } else { _popup.PopupCursor(Loc.GetString("apc-component-insufficient-access"), - args.Session, PopupType.Medium); + args.Actor, PopupType.Medium); } } @@ -160,7 +154,7 @@ public void UpdateUIState(EntityUid uid, (int) MathF.Ceiling(battery.CurrentSupply), apc.LastExternalState, battery.CurrentStorage / battery.Capacity); - _ui.TrySetUiState(uid, ApcUiKey.Key, state, ui: ui); + _ui.SetUiState((uid, ui), ApcUiKey.Key, state); } private ApcChargeState CalcChargeState(EntityUid uid, PowerState.Battery battery) diff --git a/Content.Server/Power/EntitySystems/ChargerSystem.cs b/Content.Server/Power/EntitySystems/ChargerSystem.cs index db16dfa008e..1ff13a24f2c 100644 --- a/Content.Server/Power/EntitySystems/ChargerSystem.cs +++ b/Content.Server/Power/EntitySystems/ChargerSystem.cs @@ -1,8 +1,10 @@ using Content.Server.Power.Components; +using Content.Server.Emp; using Content.Server.PowerCell; using Content.Shared.Examine; using Content.Shared.Power; using Content.Shared.PowerCell.Components; +using Content.Shared.Emp; using JetBrains.Annotations; using Robust.Shared.Containers; using System.Diagnostics.CodeAnalysis; @@ -28,6 +30,8 @@ public override void Initialize() SubscribeLocalEvent(OnInsertAttempt); SubscribeLocalEvent(OnEntityStorageInsertAttempt); SubscribeLocalEvent(OnChargerExamine); + + SubscribeLocalEvent(OnEmpPulse); } private void OnStartup(EntityUid uid, ChargerComponent component, ComponentStartup args) @@ -158,18 +162,27 @@ private void UpdateStatus(EntityUid uid, ChargerComponent component) } } + private void OnEmpPulse(EntityUid uid, ChargerComponent component, ref EmpPulseEvent args) + { + args.Affected = true; + args.Disabled = true; + } + private CellChargerStatus GetStatus(EntityUid uid, ChargerComponent component) { - if (!TryComp(uid, out TransformComponent? transformComponent)) - return CellChargerStatus.Off; + if (!component.Portable) + { + if (!TryComp(uid, out TransformComponent? transformComponent) || !transformComponent.Anchored) + return CellChargerStatus.Off; + } - if (!transformComponent.Anchored) + if (!TryComp(uid, out ApcPowerReceiverComponent? apcPowerReceiverComponent)) return CellChargerStatus.Off; - if (!TryComp(uid, out ApcPowerReceiverComponent? apcPowerReceiverComponent)) + if (!component.Portable && !apcPowerReceiverComponent.Powered) return CellChargerStatus.Off; - if (!apcPowerReceiverComponent.Powered) + if (HasComp(uid)) return CellChargerStatus.Off; if (!_container.TryGetContainer(uid, component.SlotId, out var container)) @@ -186,7 +199,7 @@ private CellChargerStatus GetStatus(EntityUid uid, ChargerComponent component) return CellChargerStatus.Charging; } - + private void TransferPower(EntityUid uid, EntityUid targetEntity, ChargerComponent component, float frameTime) { if (!TryComp(uid, out ApcPowerReceiverComponent? receiverComponent)) diff --git a/Content.Server/Power/EntitySystems/PowerMonitoringConsoleSystem.cs b/Content.Server/Power/EntitySystems/PowerMonitoringConsoleSystem.cs index 0e20f007d71..42c84b7f43b 100644 --- a/Content.Server/Power/EntitySystems/PowerMonitoringConsoleSystem.cs +++ b/Content.Server/Power/EntitySystems/PowerMonitoringConsoleSystem.cs @@ -1,7 +1,5 @@ -using Content.Server.GameTicking.Rules.Components; using Content.Server.NodeContainer; using Content.Server.NodeContainer.EntitySystems; -using Content.Server.NodeContainer.NodeGroups; using Content.Server.NodeContainer.Nodes; using Content.Server.Power.Components; using Content.Server.Power.Nodes; @@ -13,10 +11,8 @@ using JetBrains.Annotations; using Robust.Server.GameObjects; using Robust.Shared.Map.Components; -using Robust.Shared.Player; using Robust.Shared.Utility; using System.Linq; -using System.Diagnostics.CodeAnalysis; using Content.Server.GameTicking.Components; namespace Content.Server.Power.EntitySystems; @@ -163,7 +159,7 @@ public void OnCableAnchorStateChanged(EntityUid uid, CableComponent component, C allChunks = new(); var tile = _sharedMapSystem.LocalToTile(xform.GridUid.Value, grid, xform.Coordinates); - var chunkOrigin = SharedMapSystem.GetChunkIndices(tile, SharedNavMapSystem.ChunkSize); + var chunkOrigin = SharedMapSystem.GetChunkIndices(tile, ChunkSize); if (!allChunks.TryGetValue(chunkOrigin, out var chunk)) { @@ -171,8 +167,8 @@ public void OnCableAnchorStateChanged(EntityUid uid, CableComponent component, C allChunks[chunkOrigin] = chunk; } - var relative = SharedMapSystem.GetChunkRelative(tile, SharedNavMapSystem.ChunkSize); - var flag = SharedNavMapSystem.GetFlag(relative); + var relative = SharedMapSystem.GetChunkRelative(tile, ChunkSize); + var flag = GetFlag(relative); if (args.Anchored) chunk.PowerCableData[(int) component.CableType] |= flag; @@ -286,20 +282,17 @@ public override void Update(float frameTime) var query = AllEntityQuery(); while (query.MoveNext(out var ent, out var console)) { - if (!_userInterfaceSystem.TryGetUi(ent, PowerMonitoringConsoleUiKey.Key, out var bui)) + if (!_userInterfaceSystem.IsUiOpen(ent, PowerMonitoringConsoleUiKey.Key)) continue; - foreach (var session in bui.SubscribedSessions) - UpdateUIState(ent, console, session); + UpdateUIState(ent, console); + } } } - public void UpdateUIState(EntityUid uid, PowerMonitoringConsoleComponent component, ICommonSession session) + private void UpdateUIState(EntityUid uid, PowerMonitoringConsoleComponent component) { - if (!_userInterfaceSystem.TryGetUi(uid, PowerMonitoringConsoleUiKey.Key, out var bui)) - return; - var consoleXform = Transform(uid); if (consoleXform?.GridUid == null) @@ -422,15 +415,15 @@ public void UpdateUIState(EntityUid uid, PowerMonitoringConsoleComponent compone } // Set the UI state - _userInterfaceSystem.SetUiState(bui, + _userInterfaceSystem.SetUiState(uid, + PowerMonitoringConsoleUiKey.Key, new PowerMonitoringConsoleBoundInterfaceState (totalSources, totalBatteryUsage, totalLoads, allEntries.ToArray(), sourcesForFocus.ToArray(), - loadsForFocus.ToArray()), - session); + loadsForFocus.ToArray())); } private double GetPrimaryPowerValues(EntityUid uid, PowerMonitoringDeviceComponent device, out double powerSupplied, out double powerUsage, out double batteryUsage) @@ -887,7 +880,7 @@ private Dictionary RefreshPowerCableGrid(EntityUid gr continue; var tile = _sharedMapSystem.GetTileRef(gridUid, grid, entXform.Coordinates); - var chunkOrigin = SharedMapSystem.GetChunkIndices(tile.GridIndices, SharedNavMapSystem.ChunkSize); + var chunkOrigin = SharedMapSystem.GetChunkIndices(tile.GridIndices, ChunkSize); if (!allChunks.TryGetValue(chunkOrigin, out var chunk)) { @@ -895,8 +888,8 @@ private Dictionary RefreshPowerCableGrid(EntityUid gr allChunks[chunkOrigin] = chunk; } - var relative = SharedMapSystem.GetChunkRelative(tile.GridIndices, SharedNavMapSystem.ChunkSize); - var flag = SharedNavMapSystem.GetFlag(relative); + var relative = SharedMapSystem.GetChunkRelative(tile.GridIndices, ChunkSize); + var flag = GetFlag(relative); chunk.PowerCableData[(int) cable.CableType] |= flag; } @@ -913,7 +906,7 @@ private void UpdateFocusNetwork(EntityUid uid, PowerMonitoringCableNetworksCompo var xform = Transform(ent); var tile = _sharedMapSystem.GetTileRef(gridUid, grid, xform.Coordinates); var gridIndices = tile.GridIndices; - var chunkOrigin = SharedMapSystem.GetChunkIndices(gridIndices, SharedNavMapSystem.ChunkSize); + var chunkOrigin = SharedMapSystem.GetChunkIndices(gridIndices, ChunkSize); if (!component.FocusChunks.TryGetValue(chunkOrigin, out var chunk)) { @@ -921,8 +914,8 @@ private void UpdateFocusNetwork(EntityUid uid, PowerMonitoringCableNetworksCompo component.FocusChunks[chunkOrigin] = chunk; } - var relative = SharedMapSystem.GetChunkRelative(gridIndices, SharedNavMapSystem.ChunkSize); - var flag = SharedNavMapSystem.GetFlag(relative); + var relative = SharedMapSystem.GetChunkRelative(gridIndices, ChunkSize); + var flag = GetFlag(relative); if (TryComp(ent, out var cable)) chunk.PowerCableData[(int) cable.CableType] |= flag; diff --git a/Content.Server/Power/EntitySystems/PowerNetSystem.cs b/Content.Server/Power/EntitySystems/PowerNetSystem.cs index 07ecc2eafb0..2d80c810e2e 100644 --- a/Content.Server/Power/EntitySystems/PowerNetSystem.cs +++ b/Content.Server/Power/EntitySystems/PowerNetSystem.cs @@ -3,9 +3,11 @@ using Content.Server.Power.Components; using Content.Server.Power.NodeGroups; using Content.Server.Power.Pow3r; +using Content.Shared.CCVar; using Content.Shared.Power; using JetBrains.Annotations; using Robust.Server.GameObjects; +using Robust.Shared.Configuration; using Robust.Shared.Threading; namespace Content.Server.Power.EntitySystems @@ -18,19 +20,21 @@ public sealed class PowerNetSystem : EntitySystem { [Dependency] private readonly AppearanceSystem _appearance = default!; [Dependency] private readonly PowerNetConnectorSystem _powerNetConnector = default!; + [Dependency] private readonly IConfigurationManager _cfg = default!; [Dependency] private readonly IParallelManager _parMan = default!; private readonly PowerState _powerState = new(); private readonly HashSet _powerNetReconnectQueue = new(); private readonly HashSet _apcNetReconnectQueue = new(); - private readonly BatteryRampPegSolver _solver = new(); + private BatteryRampPegSolver _solver = new(); public override void Initialize() { base.Initialize(); UpdatesAfter.Add(typeof(NodeGroupSystem)); + _solver = new(_cfg.GetCVar(CCVars.DebugPow3rDisableParallel)); SubscribeLocalEvent(ApcPowerReceiverInit); SubscribeLocalEvent(ApcPowerReceiverShutdown); @@ -52,6 +56,13 @@ public override void Initialize() SubscribeLocalEvent(PowerSupplierShutdown); SubscribeLocalEvent(PowerSupplierPaused); SubscribeLocalEvent(PowerSupplierUnpaused); + + Subs.CVar(_cfg, CCVars.DebugPow3rDisableParallel, DebugPow3rDisableParallelChanged); + } + + private void DebugPow3rDisableParallelChanged(bool val) + { + _solver = new(val); } private void ApcPowerReceiverInit(EntityUid uid, ApcPowerReceiverComponent component, ComponentInit args) diff --git a/Content.Server/Power/EntitySystems/UpgradeBatterySystem.cs b/Content.Server/Power/EntitySystems/UpgradeBatterySystem.cs new file mode 100644 index 00000000000..734cf9d89ce --- /dev/null +++ b/Content.Server/Power/EntitySystems/UpgradeBatterySystem.cs @@ -0,0 +1,39 @@ +using Content.Server.Construction; +using Content.Server.Power.Components; +using JetBrains.Annotations; + +namespace Content.Server.Power.EntitySystems +{ + [UsedImplicitly] + public sealed class UpgradeBatterySystem : EntitySystem + { + [Dependency] private readonly BatterySystem _batterySystem = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnRefreshParts); + SubscribeLocalEvent(OnUpgradeExamine); + } + + public void OnRefreshParts(EntityUid uid, UpgradeBatteryComponent component, RefreshPartsEvent args) + { + var powerCellRating = args.PartRatings[component.MachinePartPowerCapacity]; + + if (TryComp(uid, out var batteryComp)) + { + _batterySystem.SetMaxCharge(uid, MathF.Pow(component.MaxChargeMultiplier, powerCellRating - 1) * component.BaseMaxCharge, batteryComp); + } + } + + private void OnUpgradeExamine(EntityUid uid, UpgradeBatteryComponent component, UpgradeExamineEvent args) + { + // UpgradeBatteryComponent.MaxChargeMultiplier is not the actual multiplier, so we have to do this. + if (TryComp(uid, out var batteryComp)) + { + args.AddPercentageUpgrade("upgrade-max-charge", batteryComp.MaxCharge / component.BaseMaxCharge); + } + } + } +} diff --git a/Content.Server/Power/EntitySystems/UpgradePowerSystem.cs b/Content.Server/Power/EntitySystems/UpgradePowerSystem.cs new file mode 100644 index 00000000000..d2f6ee4f568 --- /dev/null +++ b/Content.Server/Power/EntitySystems/UpgradePowerSystem.cs @@ -0,0 +1,151 @@ +using Content.Server.Construction; +using Content.Server.Construction.Components; +using Content.Server.Power.Components; + +namespace Content.Server.Power.EntitySystems; + +/// +/// This handles using upgraded machine parts +/// to modify the power supply/generation of a machine. +/// +public sealed class UpgradePowerSystem : EntitySystem +{ + /// + public override void Initialize() + { + SubscribeLocalEvent(OnMapInit); + SubscribeLocalEvent(OnRefreshParts); + SubscribeLocalEvent(OnUpgradeExamine); + + SubscribeLocalEvent(OnSupplierMapInit); + SubscribeLocalEvent(OnSupplierRefreshParts); + SubscribeLocalEvent(OnSupplierUpgradeExamine); + + SubscribeLocalEvent(OnSupplyRampingMapInit); + SubscribeLocalEvent(OnSupplyRampingRefreshParts); + SubscribeLocalEvent(OnSupplyRampingUpgradeExamine); + } + + private void OnMapInit(EntityUid uid, UpgradePowerDrawComponent component, MapInitEvent args) + { + if (TryComp(uid, out var powa)) + component.BaseLoad = powa.DrawRate; + else if (TryComp(uid, out var powa2)) + component.BaseLoad = powa2.Load; + } + + private void OnRefreshParts(EntityUid uid, UpgradePowerDrawComponent component, RefreshPartsEvent args) + { + var load = component.BaseLoad; + var rating = args.PartRatings[component.MachinePartPowerDraw]; + switch (component.Scaling) + + { + case MachineUpgradeScalingType.Linear: + load += component.PowerDrawMultiplier * (rating - 1); + break; + case MachineUpgradeScalingType.Exponential: + load *= MathF.Pow(component.PowerDrawMultiplier, rating - 1); + break; + default: + Log.Error($"invalid power scaling type for {ToPrettyString(uid)}."); + load = 0; + break; + } + + if (TryComp(uid, out var powa)) + powa.Load = load; + if (TryComp(uid, out var powa2)) + powa2.DrawRate = load; + } + + private void OnUpgradeExamine(EntityUid uid, UpgradePowerDrawComponent component, UpgradeExamineEvent args) + { + // UpgradePowerDrawComponent.PowerDrawMultiplier is not the actual multiplier, so we have to do this. + var powerDrawMultiplier = CompOrNull(uid)?.Load / component.BaseLoad + ?? CompOrNull(uid)?.DrawRate / component.BaseLoad; + + if (powerDrawMultiplier is not null) + args.AddPercentageUpgrade("upgrade-power-draw", powerDrawMultiplier.Value); + } + + private void OnSupplierMapInit(EntityUid uid, UpgradePowerSupplierComponent component, MapInitEvent args) + { + if (!TryComp(uid, out var supplier)) + return; + + component.BaseSupplyRate = supplier.MaxSupply; + } + + private void OnSupplierRefreshParts(EntityUid uid, UpgradePowerSupplierComponent component, RefreshPartsEvent args) + { + var supply = component.BaseSupplyRate; + var rating = args.PartRatings[component.MachinePartPowerSupply]; + switch (component.Scaling) + + { + case MachineUpgradeScalingType.Linear: + supply += component.PowerSupplyMultiplier * component.BaseSupplyRate * (rating - 1); + break; + case MachineUpgradeScalingType.Exponential: + supply *= MathF.Pow(component.PowerSupplyMultiplier, rating - 1); + break; + default: + Log.Error($"invalid power scaling type for {ToPrettyString(uid)}."); + supply = component.BaseSupplyRate; + break; + } + + component.ActualScalar = supply / component.BaseSupplyRate; + + if (!TryComp(uid, out var powa)) + return; + + powa.MaxSupply = supply; + } + + private void OnSupplierUpgradeExamine(EntityUid uid, UpgradePowerSupplierComponent component, UpgradeExamineEvent args) + { + args.AddPercentageUpgrade("upgrade-power-supply", component.ActualScalar); + } + + private void OnSupplyRampingMapInit(EntityUid uid, UpgradePowerSupplyRampingComponent component, MapInitEvent args) + { + if (!TryComp(uid, out var battery)) + return; + + component.BaseRampRate = battery.SupplyRampRate; + } + + private void OnSupplyRampingRefreshParts(EntityUid uid, UpgradePowerSupplyRampingComponent component, RefreshPartsEvent args) + { + var rampRate = component.BaseRampRate; + var rating = args.PartRatings[component.MachinePartRampRate]; + switch (component.Scaling) + + { + case MachineUpgradeScalingType.Linear: + rampRate += component.SupplyRampingMultiplier * component.BaseRampRate * (rating - 1); + break; + case MachineUpgradeScalingType.Exponential: + rampRate *= MathF.Pow(component.SupplyRampingMultiplier, rating - 1); + break; + default: + Log.Error($"invalid power supply ramping type for {ToPrettyString(uid)}."); + rampRate = component.BaseRampRate; + break; + } + + component.ActualScalar = rampRate / component.BaseRampRate; + + if (!TryComp(uid, out var battery)) + return; + + battery.SupplyRampRate = rampRate; + } + + private void OnSupplyRampingUpgradeExamine(EntityUid uid, UpgradePowerSupplyRampingComponent component, UpgradeExamineEvent args) + { + args.AddPercentageUpgrade("upgrade-power-supply-ramping", component.ActualScalar); + } +} diff --git a/Content.Server/Power/Generation/Teg/TegSystem.cs b/Content.Server/Power/Generation/Teg/TegSystem.cs index 3510a3da45d..540bd6c4832 100644 --- a/Content.Server/Power/Generation/Teg/TegSystem.cs +++ b/Content.Server/Power/Generation/Teg/TegSystem.cs @@ -7,6 +7,7 @@ using Content.Server.NodeContainer; using Content.Server.NodeContainer.Nodes; using Content.Server.Power.Components; +using Content.Shared.Atmos; using Content.Shared.DeviceNetwork; using Content.Shared.Examine; using Content.Shared.Power.Generation.Teg; diff --git a/Content.Server/Power/Generator/GeneratorExhaustGasSystem.cs b/Content.Server/Power/Generator/GeneratorExhaustGasSystem.cs index cd85e67221c..359c31d75bb 100644 --- a/Content.Server/Power/Generator/GeneratorExhaustGasSystem.cs +++ b/Content.Server/Power/Generator/GeneratorExhaustGasSystem.cs @@ -1,5 +1,6 @@ using Content.Server.Atmos; using Content.Server.Atmos.EntitySystems; +using Content.Shared.Atmos; using Content.Shared.Power.Generator; namespace Content.Server.Power.Generator; diff --git a/Content.Server/Power/Generator/GeneratorSignalControlComponent.cs b/Content.Server/Power/Generator/GeneratorSignalControlComponent.cs index f16a09eae37..19ae0bd6876 100644 --- a/Content.Server/Power/Generator/GeneratorSignalControlComponent.cs +++ b/Content.Server/Power/Generator/GeneratorSignalControlComponent.cs @@ -1,4 +1,5 @@ using Content.Shared.DeviceLinking; +using Content.Shared.Power.Generator; using Robust.Shared.Prototypes; namespace Content.Server.Power.Generator; diff --git a/Content.Server/Power/Generator/GeneratorSystem.cs b/Content.Server/Power/Generator/GeneratorSystem.cs index a75d1e4113d..721a959820b 100644 --- a/Content.Server/Power/Generator/GeneratorSystem.cs +++ b/Content.Server/Power/Generator/GeneratorSystem.cs @@ -26,8 +26,11 @@ public sealed class GeneratorSystem : SharedGeneratorSystem [Dependency] private readonly PopupSystem _popup = default!; [Dependency] private readonly PuddleSystem _puddle = default!; + private EntityQuery _upgradeQuery; + public override void Initialize() { + _upgradeQuery = GetEntityQuery(); UpdatesBefore.Add(typeof(PowerNetSystem)); @@ -225,7 +228,9 @@ public override void Update(float frameTime) supplier.Enabled = true; - supplier.MaxSupply = gen.TargetPower; + var upgradeMultiplier = _upgradeQuery.CompOrNull(uid)?.ActualScalar ?? 1f; + + supplier.MaxSupply = gen.TargetPower * upgradeMultiplier; var eff = 1 / CalcFuelEfficiency(gen.TargetPower, gen.OptimalPower, gen); var consumption = gen.OptimalBurnRate * frameTime * eff; diff --git a/Content.Server/Power/Generator/PortableGeneratorSystem.cs b/Content.Server/Power/Generator/PortableGeneratorSystem.cs index e7dfa351789..e2996a54d71 100644 --- a/Content.Server/Power/Generator/PortableGeneratorSystem.cs +++ b/Content.Server/Power/Generator/PortableGeneratorSystem.cs @@ -48,30 +48,21 @@ public override void Initialize() private void GeneratorSwitchOutputMessage(EntityUid uid, PortableGeneratorComponent component, PortableGeneratorSwitchOutputMessage args) { - if (args.Session.AttachedEntity == null) - return; - var fuelGenerator = Comp(uid); if (fuelGenerator.On) return; - _switchable.Cycle(uid, args.Session.AttachedEntity.Value); + _switchable.Cycle(uid, args.Actor); } private void GeneratorStopMessage(EntityUid uid, PortableGeneratorComponent component, PortableGeneratorStopMessage args) { - if (args.Session.AttachedEntity == null) - return; - - StopGenerator(uid, component, args.Session.AttachedEntity.Value); + StopGenerator(uid, component, args.Actor); } private void GeneratorStartMessage(EntityUid uid, PortableGeneratorComponent component, PortableGeneratorStartMessage args) { - if (args.Session.AttachedEntity == null) - return; - - StartGenerator(uid, component, args.Session.AttachedEntity.Value); + StartGenerator(uid, component, args.Actor); } private void StartGenerator(EntityUid uid, PortableGeneratorComponent component, EntityUid user) @@ -234,7 +225,7 @@ private void UpdateUI( if (powerSupplier.Net is { IsConnectedNetwork: true } net) networkStats = (net.NetworkNode.LastCombinedLoad, net.NetworkNode.LastCombinedSupply); - _uiSystem.TrySetUiState( + _uiSystem.SetUiState( uid, GeneratorComponentUiKey.Key, new PortableGeneratorComponentBuiState(fuelComp, fuel, clogged, networkStats)); diff --git a/Content.Server/Power/Pow3r/BatteryRampPegSolver.cs b/Content.Server/Power/Pow3r/BatteryRampPegSolver.cs index 5d52bde3777..34ed2695f5e 100644 --- a/Content.Server/Power/Pow3r/BatteryRampPegSolver.cs +++ b/Content.Server/Power/Pow3r/BatteryRampPegSolver.cs @@ -8,9 +8,11 @@ namespace Content.Server.Power.Pow3r public sealed class BatteryRampPegSolver : IPowerSolver { private UpdateNetworkJob _networkJob; + private bool _disableParallel; - public BatteryRampPegSolver() + public BatteryRampPegSolver(bool disableParallel = false) { + _disableParallel = disableParallel; _networkJob = new() { Solver = this, @@ -54,7 +56,10 @@ public void Tick(float frameTime, PowerState state, IParallelManager parallel) // suppliers + discharger) Then decide based on total layer size whether its worth parallelizing that // layer? _networkJob.Networks = group; - parallel.ProcessNow(_networkJob, group.Count); + if (_disableParallel) + parallel.ProcessSerialNow(_networkJob, group.Count); + else + parallel.ProcessNow(_networkJob, group.Count); } ClearBatteries(state); diff --git a/Content.Server/Power/Systems/BatteryDrinkerSystem.cs b/Content.Server/Power/Systems/BatteryDrinkerSystem.cs index 9a06d4181c9..e42783c4d8d 100644 --- a/Content.Server/Power/Systems/BatteryDrinkerSystem.cs +++ b/Content.Server/Power/Systems/BatteryDrinkerSystem.cs @@ -1,4 +1,3 @@ -using System.Diagnostics.CodeAnalysis; using System.Linq; using Content.Server.Power.Components; using Content.Shared.Containers.ItemSlots; @@ -12,8 +11,6 @@ using Content.Server.Popups; using Content.Server.PowerCell; using Content.Shared.Popups; -using Content.Shared.Silicon.Components; -using FastAccessors; using Robust.Shared.Audio.Systems; using Robust.Shared.Containers; @@ -21,13 +18,11 @@ namespace Content.Server.Power; public sealed class BatteryDrinkerSystem : EntitySystem { - [Dependency] private readonly ItemSlotsSystem _slots = default!; [Dependency] private readonly SharedDoAfterSystem _doAfter = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly BatterySystem _battery = default!; [Dependency] private readonly SiliconChargeSystem _silicon = default!; [Dependency] private readonly PopupSystem _popup = default!; - [Dependency] private readonly PowerCellSystem _powerCell = default!; [Dependency] private readonly SharedContainerSystem _container = default!; public override void Initialize() @@ -41,12 +36,10 @@ public override void Initialize() private void AddAltVerb(EntityUid uid, BatteryComponent batteryComponent, GetVerbsEvent args) { - if (!args.CanAccess || !args.CanInteract) - return; - - if (!TryComp(args.User, out var drinkerComp) || - !TestDrinkableBattery(uid, drinkerComp) || - !_silicon.TryGetSiliconBattery(args.User, out var drinkerBattery)) + if (!args.CanAccess || !args.CanInteract + || !TryComp(args.User, out var drinkerComp) + || !TestDrinkableBattery(uid, drinkerComp) + || !_silicon.TryGetSiliconBattery(args.User, out var _)) return; AlternativeVerb verb = new() @@ -80,6 +73,7 @@ private void DrinkBattery(EntityUid target, EntityUid user, BatteryDrinkerCompon { BreakOnDamage = true, BreakOnTargetMove = true, + BreakOnUserMove = true, Broadcast = false, DistanceThreshold = 1.35f, RequireCanInteract = true, @@ -91,39 +85,28 @@ private void DrinkBattery(EntityUid target, EntityUid user, BatteryDrinkerCompon private void OnDoAfter(EntityUid uid, BatteryDrinkerComponent drinkerComp, DoAfterEvent args) { - if (args.Cancelled || args.Target == null) + if (args.Cancelled || args.Target == null + || !TryComp(args.Target.Value, out var sourceBattery) + || !_silicon.TryGetSiliconBattery(uid, out var drinkerBatteryComponent) + || !TryComp(uid, out PowerCellSlotComponent? batterySlot) + || !TryComp(args.Target.Value, out var sourceComp) + || !_container.TryGetContainer(uid, batterySlot.CellSlotId, out var container) + || container.ContainedEntities is null) return; var source = args.Target.Value; - var drinker = uid; - var sourceBattery = Comp(source); - - _silicon.TryGetSiliconBattery(drinker, out var drinkerBatteryComponent); - - if (!TryComp(uid, out PowerCellSlotComponent? batterySlot)) - return; - - var container = _container.GetContainer(uid, batterySlot.CellSlotId); var drinkerBattery = container.ContainedEntities.First(); - - TryComp(source, out var sourceComp); - - DebugTools.AssertNotNull(drinkerBattery); - - if (drinkerBattery == null) - return; - var amountToDrink = drinkerComp.DrinkMultiplier * 1000; amountToDrink = MathF.Min(amountToDrink, sourceBattery.CurrentCharge); amountToDrink = MathF.Min(amountToDrink, drinkerBatteryComponent!.MaxCharge - drinkerBatteryComponent.CurrentCharge); - if (sourceComp != null && sourceComp.MaxAmount > 0) + if (sourceComp.MaxAmount > 0) amountToDrink = MathF.Min(amountToDrink, (float) sourceComp.MaxAmount); if (amountToDrink <= 0) { - _popup.PopupEntity(Loc.GetString("battery-drinker-empty", ("target", source)), drinker, drinker); + _popup.PopupEntity(Loc.GetString("battery-drinker-empty", ("target", source)), uid, uid); return; } @@ -135,10 +118,11 @@ private void OnDoAfter(EntityUid uid, BatteryDrinkerComponent drinkerComp, DoAft _battery.SetCharge(source, 0); } - if (sourceComp != null && sourceComp.DrinkSound != null){ - _popup.PopupEntity(Loc.GetString("ipc-recharge-tip"), drinker, drinker, PopupType.SmallCaution); - _audio.PlayPvs(sourceComp.DrinkSound, source); - Spawn("EffectSparks", Transform(source).Coordinates); - } + if (sourceComp.DrinkSound is null) + return; + + _popup.PopupEntity(Loc.GetString("ipc-recharge-tip"), uid, uid, PopupType.SmallCaution); + _audio.PlayPvs(sourceComp.DrinkSound, source); + Spawn("EffectSparks", Transform(source).Coordinates); } } diff --git a/Content.Server/Power/Systems/BatteryElectrocuteChargeSystem.cs b/Content.Server/Power/Systems/BatteryElectrocuteChargeSystem.cs index 9993c151b1e..707d7c679e8 100644 --- a/Content.Server/Power/Systems/BatteryElectrocuteChargeSystem.cs +++ b/Content.Server/Power/Systems/BatteryElectrocuteChargeSystem.cs @@ -4,7 +4,6 @@ using Content.Server.Power.EntitySystems; using Content.Shared.Electrocution; using Robust.Shared.Random; -using Robust.Shared.Timing; namespace Content.Server.Power.Systems; @@ -26,10 +25,10 @@ private void OnElectrocuted(EntityUid uid, BatteryComponent battery, Electrocute if (args.ShockDamage == null || args.ShockDamage <= 0) return; - var damagePerWatt = ElectrocutionSystem.ElectrifiedDamagePerWatt * 2; - - var damage = args.ShockDamage.Value * args.SiemensCoefficient; - var charge = Math.Min(damage / damagePerWatt, battery.MaxCharge * 0.25f) * _random.NextFloat(0.75f, 1.25f); + var charge = Math.Min(args.ShockDamage.Value * args.SiemensCoefficient + / ElectrocutionSystem.ElectrifiedDamagePerWatt * 2, + battery.MaxCharge * 0.25f) + * _random.NextFloat(0.75f, 1.25f); _battery.SetCharge(uid, battery.CurrentCharge + charge); diff --git a/Content.Server/Power/Systems/SiliconEmitSoundOnDrainedSystem.cs b/Content.Server/Power/Systems/SiliconEmitSoundOnDrainedSystem.cs index 28a46cc7f70..f95a940aaeb 100644 --- a/Content.Server/Power/Systems/SiliconEmitSoundOnDrainedSystem.cs +++ b/Content.Server/Power/Systems/SiliconEmitSoundOnDrainedSystem.cs @@ -2,7 +2,6 @@ using Content.Shared.Sound.Components; using Content.Server.Sound; using Content.Shared.Mobs; -using Content.Shared.Silicon.Systems; namespace Content.Server.Silicon; @@ -35,7 +34,9 @@ private void OnAlive(EntityUid uid, SiliconEmitSoundOnDrainedComponent component public void OnStateChange(EntityUid uid, SiliconEmitSoundOnDrainedComponent component, MobStateChangedEvent args) { - if (args.NewMobState == MobState.Dead) - RemComp(uid); + if (args.NewMobState != MobState.Dead) + return; + + RemComp(uid); } } diff --git a/Content.Server/PowerCell/PowerCellSystem.cs b/Content.Server/PowerCell/PowerCellSystem.cs index d4c1faa4c9d..f45a01b2e1b 100644 --- a/Content.Server/PowerCell/PowerCellSystem.cs +++ b/Content.Server/PowerCell/PowerCellSystem.cs @@ -11,6 +11,7 @@ using Content.Server.UserInterface; using Content.Shared.Containers.ItemSlots; using Content.Shared.Popups; +using ActivatableUISystem = Content.Shared.UserInterface.ActivatableUISystem; namespace Content.Server.PowerCell; diff --git a/Content.Server/Prayer/PrayerSystem.cs b/Content.Server/Prayer/PrayerSystem.cs index f5051741c03..c8ef368dadf 100644 --- a/Content.Server/Prayer/PrayerSystem.cs +++ b/Content.Server/Prayer/PrayerSystem.cs @@ -39,7 +39,7 @@ private void AddPrayVerb(EntityUid uid, PrayableComponent comp, GetVerbsEvent before the client joins the lobby. /// Receives and at any time. /// - public sealed class ServerPreferencesManager : IServerPreferencesManager + public sealed class ServerPreferencesManager : IServerPreferencesManager, IPostInjectInit { [Dependency] private readonly IServerNetManager _netManager = default!; [Dependency] private readonly IConfigurationManager _cfg = default!; [Dependency] private readonly IServerDbManager _db = default!; [Dependency] private readonly IPlayerManager _playerManager = default!; + [Dependency] private readonly IDependencyCollection _dependencies = default!; [Dependency] private readonly ILogManager _log = default!; + [Dependency] private readonly UserDbDataManager _userDb = default!; // Cache player prefs on the server so we don't need as much async hell related to them. private readonly Dictionary _cachedPlayerPrefs = @@ -100,9 +101,8 @@ public async Task SetProfile(NetUserId userId, int slot, ICharacterProfile profi var curPrefs = prefsData.Prefs!; var session = _playerManager.GetSessionById(userId); - var collection = IoCManager.Instance!; - profile.EnsureValid(session, collection); + profile.EnsureValid(session, _dependencies); var profiles = new Dictionary(curPrefs.Characters) { @@ -179,7 +179,7 @@ public async Task LoadData(ICommonSession session, CancellationToken cancel) { PrefsLoaded = true, Prefs = new PlayerPreferences( - new[] {new KeyValuePair(0, HumanoidCharacterProfile.Random())}, + new[] { new KeyValuePair(0, HumanoidCharacterProfile.Random()) }, 0, Color.Transparent) }; @@ -195,23 +195,32 @@ public async Task LoadData(ICommonSession session, CancellationToken cancel) async Task LoadPrefs() { - var prefs = await GetOrCreatePreferencesAsync(session.UserId); + var prefs = await GetOrCreatePreferencesAsync(session.UserId, cancel); prefsData.Prefs = prefs; - prefsData.PrefsLoaded = true; - - var msg = new MsgPreferencesAndSettings - { - Preferences = prefs, - Settings = new GameSettings - { - MaxCharacterSlots = MaxCharacterSlots - } - }; - _netManager.ServerSendMessage(msg, session.Channel); } } } + public void FinishLoad(ICommonSession session) + { + // This is a separate step from the actual database load. + // Sanitizing preferences requires play time info due to loadouts. + // And play time info is loaded concurrently from the DB with preferences. + var prefsData = _cachedPlayerPrefs[session.UserId]; + DebugTools.Assert(prefsData.Prefs != null); + prefsData.Prefs = SanitizePreferences(session, prefsData.Prefs, _dependencies); + + prefsData.PrefsLoaded = true; + + var msg = new MsgPreferencesAndSettings(); + msg.Preferences = prefsData.Prefs; + msg.Settings = new GameSettings + { + MaxCharacterSlots = MaxCharacterSlots + }; + _netManager.ServerSendMessage(msg, session.Channel); + } + public void OnClientDisconnected(ICommonSession session) { _cachedPlayerPrefs.Remove(session.UserId); @@ -270,18 +279,15 @@ public PlayerPreferences GetPreferences(NetUserId userId) return null; } - private async Task GetOrCreatePreferencesAsync(NetUserId userId) + private async Task GetOrCreatePreferencesAsync(NetUserId userId, CancellationToken cancel) { - var prefs = await _db.GetPlayerPreferencesAsync(userId); + var prefs = await _db.GetPlayerPreferencesAsync(userId, cancel); if (prefs is null) { - return await _db.InitPrefsAsync(userId, HumanoidCharacterProfile.Random()); + return await _db.InitPrefsAsync(userId, HumanoidCharacterProfile.Random(), cancel); } - var session = _playerManager.GetSessionById(userId); - var collection = IoCManager.Instance!; - - return SanitizePreferences(session, prefs, collection); + return prefs; } private PlayerPreferences SanitizePreferences(ICommonSession session, PlayerPreferences prefs, @@ -316,5 +322,12 @@ private sealed class PlayerPrefData public bool PrefsLoaded; public PlayerPreferences? Prefs; } + + void IPostInjectInit.PostInject() + { + _userDb.AddOnLoadPlayer(LoadData); + _userDb.AddOnFinishLoad(FinishLoad); + _userDb.AddOnPlayerDisconnect(OnClientDisconnected); + } } } diff --git a/Content.Server/Procedural/DungeonJob.PrefabDunGen.cs b/Content.Server/Procedural/DungeonJob.PrefabDunGen.cs index 1783a567904..a19f7e4701d 100644 --- a/Content.Server/Procedural/DungeonJob.PrefabDunGen.cs +++ b/Content.Server/Procedural/DungeonJob.PrefabDunGen.cs @@ -19,7 +19,7 @@ private async Task GeneratePrefabDungeon(PrefabDunGen prefab, EntityUid var gen = _prototype.Index(preset); var dungeonRotation = _dungeon.GetDungeonRotation(seed); - var dungeonTransform = Matrix3.CreateTransform(_position, dungeonRotation); + var dungeonTransform = Matrix3Helpers.CreateTransform(_position, dungeonRotation); var roomPackProtos = new Dictionary>(); foreach (var pack in _prototype.EnumeratePrototypes()) @@ -69,7 +69,7 @@ private async Task GeneratePrefabDungeon(PrefabDunGen prefab, EntityUid var dungeon = new Dungeon(); var availablePacks = new List(); var chosenPacks = new DungeonRoomPackPrototype?[gen.RoomPacks.Count]; - var packTransforms = new Matrix3[gen.RoomPacks.Count]; + var packTransforms = new Matrix3x2[gen.RoomPacks.Count]; var packRotations = new Angle[gen.RoomPacks.Count]; // Actually pick the room packs and rooms @@ -97,7 +97,7 @@ private async Task GeneratePrefabDungeon(PrefabDunGen prefab, EntityUid // Iterate every pack random.Shuffle(availablePacks); - Matrix3 packTransform = default!; + Matrix3x2 packTransform = default!; var found = false; DungeonRoomPackPrototype pack = default!; @@ -128,7 +128,7 @@ private async Task GeneratePrefabDungeon(PrefabDunGen prefab, EntityUid var aRotation = dir.AsDir().ToAngle(); // Use this pack - packTransform = Matrix3.CreateTransform(bounds.Center, aRotation); + packTransform = Matrix3Helpers.CreateTransform(bounds.Center, aRotation); packRotations[i] = aRotation; pack = aPack; break; @@ -168,7 +168,7 @@ private async Task GeneratePrefabDungeon(PrefabDunGen prefab, EntityUid { var roomDimensions = new Vector2i(roomSize.Width, roomSize.Height); Angle roomRotation = Angle.Zero; - Matrix3 matty; + Matrix3x2 matty; if (!roomProtos.TryGetValue(roomDimensions, out var roomProto)) { @@ -176,13 +176,13 @@ private async Task GeneratePrefabDungeon(PrefabDunGen prefab, EntityUid if (!roomProtos.TryGetValue(roomDimensions, out roomProto)) { - Matrix3.Multiply(packTransform, dungeonTransform, out matty); + matty = Matrix3x2.Multiply(packTransform, dungeonTransform); for (var x = roomSize.Left; x < roomSize.Right; x++) { for (var y = roomSize.Bottom; y < roomSize.Top; y++) { - var index = matty.Transform(new Vector2(x, y) + grid.TileSizeHalfVector - packCenter).Floored(); + var index = Vector2.Transform(new Vector2(x, y) + grid.TileSizeHalfVector - packCenter, matty).Floored(); tiles.Add((index, new Tile(_tileDefManager["FloorPlanetGrass"].TileId))); } } @@ -209,10 +209,10 @@ private async Task GeneratePrefabDungeon(PrefabDunGen prefab, EntityUid roomRotation += Math.PI; } - var roomTransform = Matrix3.CreateTransform(roomSize.Center - packCenter, roomRotation); + var roomTransform = Matrix3Helpers.CreateTransform(roomSize.Center - packCenter, roomRotation); - Matrix3.Multiply(roomTransform, packTransform, out matty); - Matrix3.Multiply(matty, dungeonTransform, out var dungeonMatty); + matty = Matrix3x2.Multiply(roomTransform, packTransform); + var dungeonMatty = Matrix3x2.Multiply(matty, dungeonTransform); // The expensive bit yippy. _dungeon.SpawnRoom(gridUid, grid, dungeonMatty, room); @@ -232,7 +232,7 @@ private async Task GeneratePrefabDungeon(PrefabDunGen prefab, EntityUid continue; } - var tilePos = dungeonMatty.Transform(new Vector2i(x + room.Offset.X, y + room.Offset.Y) + tileOffset); + var tilePos = Vector2.Transform(new Vector2i(x + room.Offset.X, y + room.Offset.Y) + tileOffset, dungeonMatty); exterior.Add(tilePos.Floored()); } } @@ -244,7 +244,7 @@ private async Task GeneratePrefabDungeon(PrefabDunGen prefab, EntityUid for (var y = 0; y < room.Size.Y; y++) { var roomTile = new Vector2i(x + room.Offset.X, y + room.Offset.Y); - var tilePos = dungeonMatty.Transform(roomTile + tileOffset); + var tilePos = Vector2.Transform(roomTile + tileOffset, dungeonMatty); var tileIndex = tilePos.Floored(); roomTiles.Add(tileIndex); diff --git a/Content.Server/Procedural/DungeonSystem.Rooms.cs b/Content.Server/Procedural/DungeonSystem.Rooms.cs index 03bcc2b4b13..5b4de34906e 100644 --- a/Content.Server/Procedural/DungeonSystem.Rooms.cs +++ b/Content.Server/Procedural/DungeonSystem.Rooms.cs @@ -67,7 +67,7 @@ public void SpawnRoom( bool clearExisting = false, bool rotation = false) { - var originTransform = Matrix3.CreateTranslation(origin); + var originTransform = Matrix3Helpers.CreateTranslation(origin.X, origin.Y); var roomRotation = Angle.Zero; if (rotation) @@ -75,8 +75,8 @@ public void SpawnRoom( roomRotation = GetRoomRotation(room, random); } - var roomTransform = Matrix3.CreateTransform((Vector2) room.Size / 2f, roomRotation); - Matrix3.Multiply(roomTransform, originTransform, out var finalTransform); + var roomTransform = Matrix3Helpers.CreateTransform((Vector2) room.Size / 2f, roomRotation); + var finalTransform = Matrix3x2.Multiply(roomTransform, originTransform); SpawnRoom(gridUid, grid, finalTransform, room, clearExisting); } @@ -101,7 +101,7 @@ public Angle GetRoomRotation(DungeonRoomPrototype room, Random random) public void SpawnRoom( EntityUid gridUid, MapGridComponent grid, - Matrix3 roomTransform, + Matrix3x2 roomTransform, DungeonRoomPrototype room, bool clearExisting = false) { @@ -116,7 +116,7 @@ public void SpawnRoom( // go BRRNNTTT on existing stuff if (clearExisting) { - var gridBounds = new Box2(roomTransform.Transform(Vector2.Zero), roomTransform.Transform(room.Size)); + var gridBounds = new Box2(Vector2.Transform(Vector2.Zero, roomTransform), Vector2.Transform(room.Size, roomTransform)); _entitySet.Clear(); // Polygon skin moment gridBounds = gridBounds.Enlarged(-0.05f); @@ -148,7 +148,7 @@ public void SpawnRoom( var indices = new Vector2i(x + room.Offset.X, y + room.Offset.Y); var tileRef = _maps.GetTileRef(templateMapUid, templateGrid, indices); - var tilePos = roomTransform.Transform(indices + tileOffset); + var tilePos = Vector2.Transform(indices + tileOffset, roomTransform); var rounded = tilePos.Floored(); _tiles.Add((rounded, tileRef.Tile)); } @@ -164,7 +164,7 @@ public void SpawnRoom( foreach (var templateEnt in _lookup.GetEntitiesIntersecting(templateMapUid, bounds, LookupFlags.Uncontained)) { var templateXform = _xformQuery.GetComponent(templateEnt); - var childPos = roomTransform.Transform(templateXform.LocalPosition - roomCenter); + var childPos = Vector2.Transform(templateXform.LocalPosition - roomCenter, roomTransform); var childRot = templateXform.LocalRotation + finalRoomRotation; var protoId = _metaQuery.GetComponent(templateEnt).EntityPrototype?.ID; @@ -192,7 +192,7 @@ public void SpawnRoom( // Offset by 0.5 because decals are offset from bot-left corner // So we convert it to center of tile then convert it back again after transform. // Do these shenanigans because 32x32 decals assume as they are centered on bottom-left of tiles. - var position = roomTransform.Transform(decal.Coordinates + Vector2Helpers.Half - roomCenter); + var position = Vector2.Transform(decal.Coordinates + Vector2Helpers.Half - roomCenter, roomTransform); position -= Vector2Helpers.Half; // Umm uhh I love decals so uhhhh idk what to do about this diff --git a/Content.Server/Psionics/Invisibility/PsionicInvisibilitySystem.cs b/Content.Server/Psionics/Invisibility/PsionicInvisibilitySystem.cs index 751dc28f8cf..b9aac6ccee2 100644 --- a/Content.Server/Psionics/Invisibility/PsionicInvisibilitySystem.cs +++ b/Content.Server/Psionics/Invisibility/PsionicInvisibilitySystem.cs @@ -78,8 +78,8 @@ private void OnInvisInit(EntityUid uid, PsionicallyInvisibleComponent component, { var visibility = EntityManager.EnsureComponent(uid); - _visibilitySystem.AddLayer(uid, visibility, (int) VisibilityFlags.PsionicInvisibility, false); - _visibilitySystem.RemoveLayer(uid, visibility, (int) VisibilityFlags.Normal, false); + _visibilitySystem.AddLayer((uid, visibility), (int) VisibilityFlags.PsionicInvisibility, false); + _visibilitySystem.RemoveLayer((uid, visibility), (int) VisibilityFlags.Normal, false); _visibilitySystem.RefreshVisibility(uid, visibility); } @@ -88,8 +88,8 @@ private void OnInvisShutdown(EntityUid uid, PsionicallyInvisibleComponent compon { if (TryComp(uid, out var visibility)) { - _visibilitySystem.RemoveLayer(uid, visibility, (int) VisibilityFlags.PsionicInvisibility, false); - _visibilitySystem.AddLayer(uid, visibility, (int) VisibilityFlags.Normal, false); + _visibilitySystem.RemoveLayer((uid, visibility), (int) VisibilityFlags.PsionicInvisibility, false); + _visibilitySystem.AddLayer((uid, visibility), (int) VisibilityFlags.Normal, false); _visibilitySystem.RefreshVisibility(uid, visibility); } } diff --git a/Content.Server/Psionics/PsionicsCommands.cs b/Content.Server/Psionics/PsionicsCommands.cs index 2894343c66b..565146629b6 100644 --- a/Content.Server/Psionics/PsionicsCommands.cs +++ b/Content.Server/Psionics/PsionicsCommands.cs @@ -38,7 +38,7 @@ public sealed class AddPsionicPowerCommand : IConsoleCommand public async void Execute(IConsoleShell shell, string argStr, string[] args) { var entMan = IoCManager.Resolve(); - var psionicPowers = IoCManager.Resolve(); + var psionicPowers = entMan.System(); var protoMan = IoCManager.Resolve(); if (args.Length != 2) diff --git a/Content.Server/Psionics/PsionicsSystem.Events.cs b/Content.Server/Psionics/PsionicsSystem.Events.cs index 82a0faec64b..f82621115de 100644 --- a/Content.Server/Psionics/PsionicsSystem.Events.cs +++ b/Content.Server/Psionics/PsionicsSystem.Events.cs @@ -1,19 +1,8 @@ -namespace Content.Server.Psionics -{ - /// - /// Raised on an entity about to roll for a Psionic Power, after their baseline chances of success are calculated. - /// - [ByRefEvent] - public struct OnRollPsionicsEvent - { - public readonly EntityUid Roller; - public float BaselineChance; - public OnRollPsionicsEvent(EntityUid roller, float baselineChance) - { - Roller = roller; - BaselineChance = baselineChance; - } - } -} +namespace Content.Server.Psionics; +/// +/// Raised on an entity about to roll for a Psionic Power, after their baseline chances of success are calculated. +/// +[ByRefEvent] +public record struct OnRollPsionicsEvent(EntityUid Roller, float BaselineChance); diff --git a/Content.Server/Psionics/PsionicsSystem.cs b/Content.Server/Psionics/PsionicsSystem.cs index 23cf6aeb80b..9685334daba 100644 --- a/Content.Server/Psionics/PsionicsSystem.cs +++ b/Content.Server/Psionics/PsionicsSystem.cs @@ -11,139 +11,305 @@ using Robust.Shared.Audio.Systems; using Robust.Shared.Configuration; using Robust.Shared.Random; +using Content.Shared.Popups; +using Content.Shared.Chat; +using Robust.Server.Player; +using Content.Server.Chat.Managers; +using Robust.Shared.Prototypes; +using Content.Shared.Mobs; +using Content.Shared.Damage; +using Content.Shared.Interaction.Events; -namespace Content.Server.Psionics +namespace Content.Server.Psionics; + +public sealed class PsionicsSystem : EntitySystem { - public sealed class PsionicsSystem : EntitySystem - { - [Dependency] private readonly IRobustRandom _random = default!; - [Dependency] private readonly PsionicAbilitiesSystem _psionicAbilitiesSystem = default!; - [Dependency] private readonly StatusEffectsSystem _statusEffects = default!; - [Dependency] private readonly ElectrocutionSystem _electrocutionSystem = default!; - [Dependency] private readonly MindSwapPowerSystem _mindSwapPowerSystem = default!; - [Dependency] private readonly GlimmerSystem _glimmerSystem = default!; - [Dependency] private readonly NpcFactionSystem _npcFactonSystem = default!; - [Dependency] private readonly IConfigurationManager _cfg = default!; - [Dependency] private readonly SharedAudioSystem _audio = default!; - - private const string BaselineAmplification = "Baseline Amplification"; - private const string BaselineDampening = "Baseline Dampening"; - - /// - /// Unfortunately, since spawning as a normal role and anything else is so different, - /// this is the only way to unify them, for now at least. - /// - Queue<(PsionicComponent component, EntityUid uid)> _rollers = new(); - public override void Update(float frameTime) - { - base.Update(frameTime); - foreach (var roller in _rollers) - RollPsionics(roller.uid, roller.component, false); - _rollers.Clear(); - } - public override void Initialize() - { - base.Initialize(); - SubscribeLocalEvent(OnStartup); - SubscribeLocalEvent(OnMeleeHit); - SubscribeLocalEvent(OnStamHit); + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly PsionicAbilitiesSystem _psionicAbilitiesSystem = default!; + [Dependency] private readonly StatusEffectsSystem _statusEffects = default!; + [Dependency] private readonly ElectrocutionSystem _electrocutionSystem = default!; + [Dependency] private readonly MindSwapPowerSystem _mindSwapPowerSystem = default!; + [Dependency] private readonly GlimmerSystem _glimmerSystem = default!; + [Dependency] private readonly NpcFactionSystem _npcFactonSystem = default!; + [Dependency] private readonly IConfigurationManager _cfg = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly SharedPopupSystem _popups = default!; + [Dependency] private readonly IPlayerManager _playerManager = default!; + [Dependency] private readonly IChatManager _chatManager = default!; + [Dependency] private readonly IPrototypeManager _protoMan = default!; + [Dependency] private readonly PsionicFamiliarSystem _psionicFamiliar = default!; + [Dependency] private readonly NPCRetaliationSystem _retaliationSystem = default!; - SubscribeLocalEvent(OnInit); - SubscribeLocalEvent(OnRemove); - } + private const string BaselineAmplification = "Baseline Amplification"; + private const string BaselineDampening = "Baseline Dampening"; - private void OnStartup(EntityUid uid, PsionicComponent component, MapInitEvent args) - { - _rollers.Enqueue((component, uid)); - } + // Yes these are a mirror of what's normally default datafields on the PsionicPowerPrototype. + // We haven't generated a prototype yet, and I'm not going to duplicate them on the PsionicComponent. + private const string PsionicRollFailedMessage = "psionic-roll-failed"; + private const string PsionicRollFailedColor = "#8A00C2"; + private const int PsionicRollFailedFontSize = 12; + private const ChatChannel PsionicRollFailedChatChannel = ChatChannel.Emotes; - private void OnMeleeHit(EntityUid uid, AntiPsionicWeaponComponent component, MeleeHitEvent args) - { - foreach (var entity in args.HitEntities) - { - if (HasComp(entity)) - { - _audio.PlayPvs("/Audio/Effects/lightburn.ogg", entity); - args.ModifiersList.Add(component.Modifiers); - if (_random.Prob(component.DisableChance)) - _statusEffects.TryAddStatusEffect(entity, component.DisableStatus, TimeSpan.FromSeconds(component.DisableDuration), true, component.DisableStatus); - } - - if (TryComp(entity, out var swapped)) - { - _mindSwapPowerSystem.Swap(entity, swapped.OriginalEntity, true); - return; - } - - if (component.Punish && !HasComp(entity) && _random.Prob(component.PunishChances)) - _electrocutionSystem.TryDoElectrocution(args.User, null, component.PunishSelfDamage, TimeSpan.FromSeconds(component.PunishStunDuration), false); - } - } + /// + /// Unfortunately, since spawning as a normal role and anything else is so different, + /// this is the only way to unify them, for now at least. + /// + Queue<(PsionicComponent component, EntityUid uid)> _rollers = new(); + public override void Update(float frameTime) + { + base.Update(frameTime); + foreach (var roller in _rollers) + RollPsionics(roller.uid, roller.component, true); + _rollers.Clear(); + } + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnStartup); + SubscribeLocalEvent(OnMeleeHit); + SubscribeLocalEvent(OnStamHit); + SubscribeLocalEvent(OnMobstateChanged); + SubscribeLocalEvent(OnDamageChanged); + SubscribeLocalEvent(OnAttackAttempt); - private void OnInit(EntityUid uid, PsionicComponent component, ComponentStartup args) - { - component.AmplificationSources.Add(BaselineAmplification, _random.NextFloat(component.BaselineAmplification.Item1, component.BaselineAmplification.Item2)); - component.DampeningSources.Add(BaselineDampening, _random.NextFloat(component.BaselineDampening.Item1, component.BaselineDampening.Item2)); + SubscribeLocalEvent(OnInit); + SubscribeLocalEvent(OnRemove); + } - if (!component.Removable - || !TryComp(uid, out var factions) - || _npcFactonSystem.ContainsFaction(uid, "GlimmerMonster", factions)) - return; + private void OnStartup(EntityUid uid, PsionicComponent component, MapInitEvent args) + { + if (!component.Removable + || !component.CanReroll) + return; - _npcFactonSystem.AddFaction(uid, "PsionicInterloper"); - } + CheckPowerCost(uid, component); + _rollers.Enqueue((component, uid)); + } + + /// + /// On MapInit, PsionicComponent isn't going to contain any powers. + /// So before we send a Latent Psychic into the roundstart roll queue, we need to calculate their power cost in advance. + /// + private void CheckPowerCost(EntityUid uid, PsionicComponent component) + { + if (!TryComp(uid, out var innate)) + return; + + var powerCount = 0; + foreach (var powerId in innate.PowersToAdd) + if (_protoMan.TryIndex(powerId, out var power)) + powerCount += power.PowerSlotCost; - private void OnRemove(EntityUid uid, PsionicComponent component, ComponentRemove args) + component.NextPowerCost = 100 * MathF.Pow(2, powerCount); + } + + private void OnMeleeHit(EntityUid uid, AntiPsionicWeaponComponent component, MeleeHitEvent args) + { + foreach (var entity in args.HitEntities) + CheckAntiPsionic(entity, component, args); + } + + private void CheckAntiPsionic(EntityUid entity, AntiPsionicWeaponComponent component, MeleeHitEvent args) + { + if (HasComp(entity)) { - if (!HasComp(uid)) + _audio.PlayPvs("/Audio/Effects/lightburn.ogg", entity); + args.ModifiersList.Add(component.Modifiers); + + if (!_random.Prob(component.DisableChance)) return; - _npcFactonSystem.RemoveFaction(uid, "PsionicInterloper"); + _statusEffects.TryAddStatusEffect(entity, component.DisableStatus, TimeSpan.FromSeconds(component.DisableDuration), true, component.DisableStatus); } - private void OnStamHit(EntityUid uid, AntiPsionicWeaponComponent component, TakeStaminaDamageEvent args) - { - if (HasComp(args.Target)) - args.FlatModifier += component.PsychicStaminaDamage; - } + if (TryComp(entity, out var swapped)) + _mindSwapPowerSystem.Swap(entity, swapped.OriginalEntity, true); - public void RollPsionics(EntityUid uid, PsionicComponent component, bool applyGlimmer = true, float rollEventMultiplier = 1f) - { - if (!_cfg.GetCVar(CCVars.PsionicRollsEnabled) - || !component.Removable) - return; + if (!component.Punish + || HasComp(entity) + || !_random.Prob(component.PunishChances)) + return; + + _electrocutionSystem.TryDoElectrocution(args.User, null, component.PunishSelfDamage, TimeSpan.FromSeconds(component.PunishStunDuration), false); + } + + private void OnInit(EntityUid uid, PsionicComponent component, ComponentStartup args) + { + component.AmplificationSources.Add(BaselineAmplification, _random.NextFloat(component.BaselineAmplification.Item1, component.BaselineAmplification.Item2)); + component.DampeningSources.Add(BaselineDampening, _random.NextFloat(component.BaselineDampening.Item1, component.BaselineDampening.Item2)); - // Calculate the initial odds based on the innate potential - var baselineChance = component.Chance - * component.PowerRollMultiplier - + component.PowerRollFlatBonus; + if (!component.Removable + || !TryComp(uid, out var factions) + || _npcFactonSystem.ContainsFaction(uid, "GlimmerMonster", factions)) + return; - // Increase the initial odds based on Glimmer. - // TODO: Change this equation when I do my Glimmer Refactor - baselineChance += applyGlimmer - ? (float) _glimmerSystem.Glimmer / 1000 //Convert from Glimmer to %chance - : 0; + _npcFactonSystem.AddFaction(uid, "PsionicInterloper"); + } - // Certain sources of power rolls provide their own multiplier. - baselineChance *= rollEventMultiplier; + private void OnRemove(EntityUid uid, PsionicComponent component, ComponentRemove args) + { + if (!HasComp(uid)) + return; - // Ask if the Roller has any other effects to contribute, such as Traits. - var ev = new OnRollPsionicsEvent(uid, baselineChance); - RaiseLocalEvent(uid, ref ev); + _npcFactonSystem.RemoveFaction(uid, "PsionicInterloper"); + } + + private void OnStamHit(EntityUid uid, AntiPsionicWeaponComponent component, TakeStaminaDamageEvent args) + { + if (!HasComp(args.Target)) + return; - if (_random.Prob(Math.Clamp(ev.BaselineChance, 0, 1))) - _psionicAbilitiesSystem.AddPsionics(uid); + args.FlatModifier += component.PsychicStaminaDamage; + } + + /// + /// Now we handle Potentia calculations, the more powers you have, the harder it is to obtain psionics, but the content of your roll carries over to the next roll. + /// Your first power costs 100(2^0 is always 1), your second power costs 200, your 3rd power costs 400, and so on. This also considers people with roundstart powers. + /// Such that a Mystagogue(who has 3 powers at roundstart) needs 800 Potentia to gain his 4th power. + /// + /// + /// This exponential cost is mainly done to prevent stations from becoming "Space Hogwarts", + /// which was a common complaint with Psionic Refactor opening up the opportunity for people to have multiple powers. + /// + private bool HandlePotentiaCalculations(EntityUid uid, PsionicComponent component, float psionicChance) + { + component.Potentia += _random.NextFloat(0 + psionicChance, 100 + psionicChance); + + if (component.Potentia < component.NextPowerCost) + return false; + + component.Potentia -= component.NextPowerCost; + _psionicAbilitiesSystem.AddPsionics(uid); + component.NextPowerCost = 100 * MathF.Pow(2, component.PowerSlotsTaken); + return true; + } + + /// + /// Provide the player with feedback about their roll failure, so they don't just think nothing happened. + /// TODO: Add an audio cue to this and other areas of psionic player feedback. + /// + private void HandleRollFeedback(EntityUid uid) + { + if (!_playerManager.TryGetSessionByEntity(uid, out var session) + || !Loc.TryGetString(PsionicRollFailedMessage, out var rollFailedMessage)) + return; + + _popups.PopupEntity(rollFailedMessage, uid, uid, PopupType.MediumCaution); + + // Popups only last a few seconds, and are easily ignored. + // So we also put a message in chat to make it harder to miss. + var feedbackMessage = $"[font size={PsionicRollFailedFontSize}][color={PsionicRollFailedColor}]{rollFailedMessage}[/color][/font]"; + _chatManager.ChatMessageToOne( + PsionicRollFailedChatChannel, + feedbackMessage, + feedbackMessage, + EntityUid.Invalid, + false, + session.Channel); + } + + /// + /// This function attempts to generate a psionic power by incrementing a Psion's Potentia stat by a random amount, then checking if it beats a certain threshold. + /// Please consider going through RerollPsionics or PsionicAbilitiesSystem.InitializePsionicPower instead of this function, particularly if you don't have a good reason to call this directly. + /// + public void RollPsionics(EntityUid uid, PsionicComponent component, bool applyGlimmer = true, float rollEventMultiplier = 1f) + { + if (!_cfg.GetCVar(CCVars.PsionicRollsEnabled) + || !component.Removable) + return; + + // Calculate the initial odds based on the innate potential + var baselineChance = component.Chance + * component.PowerRollMultiplier + + component.PowerRollFlatBonus + + _random.NextFloat(0, 100); + + // Increase the initial odds based on Glimmer. + // TODO: Change this equation when I do my Glimmer Refactor + baselineChance += applyGlimmer + ? (float) _glimmerSystem.Glimmer / 1000 //Convert from Glimmer to %chance + : 0; + + // Certain sources of power rolls provide their own multiplier. + baselineChance *= rollEventMultiplier; + + // Ask if the Roller has any other effects to contribute, such as Traits. + var ev = new OnRollPsionicsEvent(uid, baselineChance); + RaiseLocalEvent(uid, ref ev); + + if (HandlePotentiaCalculations(uid, component, ev.BaselineChance)) + return; + + HandleRollFeedback(uid); + } + + /// + /// Each person has a single free reroll for their Psionics, which certain conditions can restore. + /// This function attempts to "Spend" a reroll, if one is available. + /// + public void RerollPsionics(EntityUid uid, PsionicComponent? psionic = null, float bonusMuliplier = 1f) + { + if (!Resolve(uid, ref psionic, false) + || !psionic.Removable + || !psionic.CanReroll) + return; + + RollPsionics(uid, psionic, true, bonusMuliplier); + psionic.CanReroll = false; + } + + private void OnMobstateChanged(EntityUid uid, PsionicComponent component, MobStateChangedEvent args) + { + if (component.Familiars.Count <= 0 + || args.NewMobState != MobState.Dead) + return; + + foreach (var familiar in component.Familiars) + { + if (!TryComp(familiar, out var familiarComponent) + || !familiarComponent.DespawnOnMasterDeath) + continue; + + _psionicFamiliar.DespawnFamiliar(familiar, familiarComponent); } + } - public void RerollPsionics(EntityUid uid, PsionicComponent? psionic = null, float bonusMuliplier = 1f) + /// + /// When a caster with active summons is attacked, aggro their familiars to the attacker. + /// + private void OnDamageChanged(EntityUid uid, PsionicComponent component, DamageChangedEvent args) + { + if (component.Familiars.Count <= 0 + || !args.DamageIncreased + || args.Origin is not { } origin + || origin == uid) + return; + + SetFamiliarTarget(origin, component); + } + + /// + /// When a caster with active summons attempts to attack something, aggro their familiars to the target. + /// + private void OnAttackAttempt(EntityUid uid, PsionicComponent component, AttackAttemptEvent args) + { + if (component.Familiars.Count <= 0 + || args.Target == uid + || args.Target is not { } target + || component.Familiars.Contains(target)) + return; + + SetFamiliarTarget(target, component); + } + + private void SetFamiliarTarget(EntityUid target, PsionicComponent component) + { + foreach (var familiar in component.Familiars) { - if (!Resolve(uid, ref psionic, false) - || !psionic.Removable - || psionic.CanReroll) - return; + if (!TryComp(familiar, out var retaliationComponent)) + continue; - RollPsionics(uid, psionic, true, bonusMuliplier); - psionic.CanReroll = true; + _retaliationSystem.TryRetaliate(familiar, target, retaliationComponent); } } } diff --git a/Content.Server/Punpun/PunpunComponent.cs b/Content.Server/Punpun/PunpunComponent.cs new file mode 100644 index 00000000000..19d2da42c9d --- /dev/null +++ b/Content.Server/Punpun/PunpunComponent.cs @@ -0,0 +1,9 @@ +namespace Content.Server.Punpun; + +[RegisterComponent] +public sealed partial class PunpunComponent : Component +{ + /// How many rounds Punpun will be around for before disappearing with a note + [DataField] + public int Lifetime = 14; +} diff --git a/Content.Server/Punpun/PunpunSystem.cs b/Content.Server/Punpun/PunpunSystem.cs new file mode 100644 index 00000000000..5f1f22b42a1 --- /dev/null +++ b/Content.Server/Punpun/PunpunSystem.cs @@ -0,0 +1,114 @@ +using System.Linq; +using Content.Server.GameTicking; +using Content.Shared.Containers.ItemSlots; +using Content.Shared.Inventory; +using Content.Shared.Mobs; +using Content.Shared.Mobs.Components; +using Robust.Server.GameObjects; + +namespace Content.Server.Punpun; + +public sealed class PunpunSystem : EntitySystem +{ + [Dependency] private readonly InventorySystem _inventory = default!; + [Dependency] private readonly ServerMetaDataSystem _meta = default!; + + private (int, string, string, string) _punpunData = (1, string.Empty, string.Empty, string.Empty); + + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnRoundStart); + SubscribeLocalEvent(OnRoundEnd); + } + + + // Checks if the Punpun data has any items to equip, and names the Punpun upon initialization + private void OnRoundStart(EntityUid uid, PunpunComponent component, ComponentStartup args) + { + if (_punpunData.Item1 > component.Lifetime) + { + EntityManager.SpawnEntity("PaperWrittenPunpunNote", Transform(uid).Coordinates); + EntityManager.QueueDeleteEntity(uid); + _punpunData = (1, string.Empty, string.Empty, string.Empty); + + return; + } + + var meta = MetaData(uid); + _meta.SetEntityName(uid, $"{meta.EntityName} {ToRomanNumeral(_punpunData.Item1)}", meta); + + if (!EntityManager.TryGetComponent(uid, out _)) + return; + EquipItem(uid, "head", _punpunData.Item2); + EquipItem(uid, "mask", _punpunData.Item3); + EquipItem(uid, "jumpsuit", _punpunData.Item4); + } + + // Checks if Punpun exists, and is alive at round end + // If so, stores the items and increments the Punpun count + private void OnRoundEnd(RoundEndTextAppendEvent ev) + { + // I couldn't find a method to get a single entity, so this just enumerates over the first and disposes it + var punpunComponents = EntityManager.EntityQueryEnumerator(); + punpunComponents.MoveNext(out var punpun, out _); + + if (!EntityManager.TryGetComponent(punpun, out var mobState) + || mobState.CurrentState == MobState.Dead) + _punpunData = (1, string.Empty, string.Empty, string.Empty); + + _punpunData.Item1++; + + if (EntityManager.HasComponent(punpun)) + { + _punpunData.Item2 = CheckSlot(punpun, "head"); + _punpunData.Item3 = CheckSlot(punpun, "mask"); + _punpunData.Item4 = CheckSlot(punpun, "jumpsuit"); + } + + punpunComponents.Dispose(); + } + + // Equips an item to a slot, and names it. + private void EquipItem(EntityUid uid, string slot, string item) + { + if (item == string.Empty) + return; + + var itemEnt = EntityManager.SpawnEntity(item, EntityManager.GetComponent(uid).Coordinates); + if (_inventory.TryEquip(uid, itemEnt, slot, true, true)) + _meta.SetEntityName(itemEnt, $"{MetaData(uid).EntityName}'s {MetaData(itemEnt).EntityName}"); + else + EntityManager.DeleteEntity(itemEnt); + } + + // Checks if an item exists in a slot, and returns its name + private string CheckSlot(EntityUid uid, string slot) + { + return _inventory.TryGetSlotEntity(uid, slot, out var item) + ? EntityManager.GetComponent(item.Value).EntityPrototype!.ID + : string.Empty; + } + + + // Punpun, the lord of Roman Numerals + public static List RomanNumerals = new() { "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" }; + public static List Numerals = new() { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 }; + + public static string ToRomanNumeral(int number) + { + var romanNumeral = string.Empty; + while (number > 0) + { + // Find the biggest numeral that is less than equal to number + var index = Numerals.FindIndex(x => x <= number); + // Subtract its value from your number + number -= Numerals[index]; + // Add it onto the end of your roman numeral + romanNumeral += RomanNumerals[index]; + } + return romanNumeral; + } +} diff --git a/Content.Server/Radiation/Systems/RadiationSystem.GridCast.cs b/Content.Server/Radiation/Systems/RadiationSystem.GridCast.cs index b8193c4d2f3..ccee7cf227c 100644 --- a/Content.Server/Radiation/Systems/RadiationSystem.GridCast.cs +++ b/Content.Server/Radiation/Systems/RadiationSystem.GridCast.cs @@ -195,11 +195,11 @@ private RadiationRay Gridcast(Entity grid, RadiationRay ray, b Vector2 srcLocal = sourceTrs.ParentUid == grid.Owner ? sourceTrs.LocalPosition - : gridTrs.InvLocalMatrix.Transform(ray.Source); + : Vector2.Transform(ray.Source, gridTrs.InvLocalMatrix); Vector2 dstLocal = destTrs.ParentUid == grid.Owner ? destTrs.LocalPosition - : gridTrs.InvLocalMatrix.Transform(ray.Destination); + : Vector2.Transform(ray.Destination, gridTrs.InvLocalMatrix); Vector2i sourceGrid = new( (int) Math.Floor(srcLocal.X / grid.Comp.TileSize), diff --git a/Content.Server/Radio/Components/RadioJammerComponent.cs b/Content.Server/Radio/Components/RadioJammerComponent.cs deleted file mode 100644 index 93504ef9573..00000000000 --- a/Content.Server/Radio/Components/RadioJammerComponent.cs +++ /dev/null @@ -1,20 +0,0 @@ -using Content.Server.Radio.EntitySystems; - -namespace Content.Server.Radio.Components; - -/// -/// When activated () prevents from sending messages in range -/// -[RegisterComponent] -[Access(typeof(JammerSystem))] -public sealed partial class RadioJammerComponent : Component -{ - [DataField("range"), ViewVariables(VVAccess.ReadWrite)] - public float Range = 8f; - - /// - /// Power usage per second when enabled - /// - [DataField("wattage"), ViewVariables(VVAccess.ReadWrite)] - public float Wattage = 2f; -} diff --git a/Content.Server/Radio/EntitySystems/JammerSystem.cs b/Content.Server/Radio/EntitySystems/JammerSystem.cs index bba8c4766e6..6e0689390e1 100644 --- a/Content.Server/Radio/EntitySystems/JammerSystem.cs +++ b/Content.Server/Radio/EntitySystems/JammerSystem.cs @@ -1,27 +1,22 @@ using Content.Server.DeviceNetwork.Components; -using Content.Server.DeviceNetwork.Systems; -using Content.Server.Medical.CrewMonitoring; using Content.Server.Medical.SuitSensors; -using Content.Server.Popups; using Content.Server.Power.EntitySystems; using Content.Server.PowerCell; using Content.Server.Radio.Components; -using Content.Server.Station.Systems; using Content.Shared.DeviceNetwork.Components; using Content.Shared.Examine; using Content.Shared.Interaction; using Content.Shared.PowerCell.Components; +using Content.Shared.RadioJammer; +using Content.Shared.Radio.EntitySystems; namespace Content.Server.Radio.EntitySystems; -public sealed class JammerSystem : EntitySystem +public sealed class JammerSystem : SharedJammerSystem { [Dependency] private readonly PowerCellSystem _powerCell = default!; [Dependency] private readonly BatterySystem _battery = default!; - [Dependency] private readonly PopupSystem _popup = default!; [Dependency] private readonly SharedTransformSystem _transform = default!; - [Dependency] private readonly StationSystem _stationSystem = default!; - [Dependency] private readonly SingletonDeviceNetServerSystem _singletonServerSystem = default!; public override void Initialize() { @@ -37,14 +32,37 @@ public override void Initialize() public override void Update(float frameTime) { var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var _, out var jam)) { - if (_powerCell.TryGetBatteryFromSlot(uid, out var batteryUid, out var battery) && - !_battery.TryUseCharge(batteryUid.Value, jam.Wattage * frameTime, battery)) + + if (_powerCell.TryGetBatteryFromSlot(uid, out var batteryUid, out var battery)) { - RemComp(uid); - RemComp(uid); + if (!_battery.TryUseCharge(batteryUid.Value, GetCurrentWattage(jam) * frameTime, battery)) + { + ChangeLEDState(false, uid); + RemComp(uid); + RemComp(uid); + } + else + { + var percentCharged = battery.CurrentCharge / battery.MaxCharge; + if (percentCharged > .50) + { + ChangeChargeLevel(RadioJammerChargeLevel.High, uid); + } + else if (percentCharged < .15) + { + ChangeChargeLevel(RadioJammerChargeLevel.Low, uid); + } + else + { + ChangeChargeLevel(RadioJammerChargeLevel.Medium, uid); + } + } + } + } } @@ -52,40 +70,49 @@ private void OnActivate(EntityUid uid, RadioJammerComponent comp, ActivateInWorl { var activated = !HasComp(uid) && _powerCell.TryGetBatteryFromSlot(uid, out var battery) && - battery.CurrentCharge > comp.Wattage; + battery.CurrentCharge > GetCurrentWattage(comp); if (activated) { + ChangeLEDState(true, uid); EnsureComp(uid); EnsureComp(uid, out var jammingComp); - jammingComp.Range = comp.Range; + jammingComp.Range = GetCurrentRange(comp); jammingComp.JammableNetworks.Add(DeviceNetworkComponent.DeviceNetIdDefaults.Wireless.ToString()); Dirty(uid, jammingComp); } else { - RemComp(uid); - RemComp(uid); + ChangeLEDState(false, uid); + RemCompDeferred(uid); + RemCompDeferred(uid); } var state = Loc.GetString(activated ? "radio-jammer-component-on-state" : "radio-jammer-component-off-state"); var message = Loc.GetString("radio-jammer-component-on-use", ("state", state)); - _popup.PopupEntity(message, args.User, args.User); + Popup.PopupEntity(message, args.User, args.User); args.Handled = true; } private void OnPowerCellChanged(EntityUid uid, ActiveRadioJammerComponent comp, PowerCellChangedEvent args) { if (args.Ejected) - RemComp(uid); + { + ChangeLEDState(false, uid); + RemCompDeferred(uid); + } } private void OnExamine(EntityUid uid, RadioJammerComponent comp, ExaminedEvent args) { if (args.IsInDetailsRange) { - var msg = HasComp(uid) + var powerIndicator = HasComp(uid) ? Loc.GetString("radio-jammer-component-examine-on-state") : Loc.GetString("radio-jammer-component-examine-off-state"); - args.PushMarkup(msg); + args.PushMarkup(powerIndicator); + + var powerLevel = Loc.GetString(comp.Settings[comp.SelectedPowerLevel].Name); + var switchIndicator = Loc.GetString("radio-jammer-component-switch-setting", ("powerLevel", powerLevel)); + args.PushMarkup(switchIndicator); } } @@ -112,7 +139,7 @@ private bool ShouldCancelSend(EntityUid sourceUid) while (query.MoveNext(out _, out _, out var jam, out var transform)) { - if (source.InRange(EntityManager, _transform, transform.Coordinates, jam.Range)) + if (source.InRange(EntityManager, _transform, transform.Coordinates, GetCurrentRange(jam))) { return true; } diff --git a/Content.Server/Radio/EntitySystems/RadioDeviceSystem.cs b/Content.Server/Radio/EntitySystems/RadioDeviceSystem.cs index f1859de726c..0afc656c70f 100644 --- a/Content.Server/Radio/EntitySystems/RadioDeviceSystem.cs +++ b/Content.Server/Radio/EntitySystems/RadioDeviceSystem.cs @@ -210,11 +210,14 @@ private void OnAttemptListen(EntityUid uid, RadioMicrophoneComponent component, private void OnReceiveRadio(EntityUid uid, RadioSpeakerComponent component, ref RadioReceiveEvent args) { - var nameEv = new TransformSpeakerNameEvent(args.MessageSource, Name(args.MessageSource)); + if (uid == args.RadioSource) + return; + + var nameEv = new TransformSpeakerSpeechEvent(args.MessageSource, Name(args.MessageSource)); RaiseLocalEvent(args.MessageSource, nameEv); var name = Loc.GetString("speech-name-relay", ("speaker", Name(uid)), - ("originalName", nameEv.Name)); + ("originalName", nameEv.VoiceName ?? Name(args.MessageSource))); // log to chat so people can identity the speaker/source, but avoid clogging ghost chat if there are many radios var message = args.OriginalChatMsg.Message; // The chat system will handle the rest and re-obfuscate if needed. @@ -230,25 +233,25 @@ private void OnBeforeIntercomUiOpen(EntityUid uid, IntercomComponent component, private void OnToggleIntercomMic(EntityUid uid, IntercomComponent component, ToggleIntercomMicMessage args) { - if (component.RequiresPower && !this.IsPowered(uid, EntityManager) || args.Session.AttachedEntity is not { } user) + if (component.RequiresPower && !this.IsPowered(uid, EntityManager)) return; - SetMicrophoneEnabled(uid, user, args.Enabled, true); + SetMicrophoneEnabled(uid, args.Actor, args.Enabled, true); UpdateIntercomUi(uid, component); } private void OnToggleIntercomSpeaker(EntityUid uid, IntercomComponent component, ToggleIntercomSpeakerMessage args) { - if (component.RequiresPower && !this.IsPowered(uid, EntityManager) || args.Session.AttachedEntity is not { } user) + if (component.RequiresPower && !this.IsPowered(uid, EntityManager)) return; - SetSpeakerEnabled(uid, user, args.Enabled, true); + SetSpeakerEnabled(uid, args.Actor, args.Enabled, true); UpdateIntercomUi(uid, component); } private void OnSelectIntercomChannel(EntityUid uid, IntercomComponent component, SelectIntercomChannelMessage args) { - if (component.RequiresPower && !this.IsPowered(uid, EntityManager) || args.Session.AttachedEntity is not { }) + if (component.RequiresPower && !this.IsPowered(uid, EntityManager)) return; if (!_protoMan.TryIndex(args.Channel, out var /*Nuclear-14-start*/ channel /*Nuclear-14-end*/) || !component.SupportedChannels.Contains(args.Channel)) @@ -274,7 +277,7 @@ private void UpdateIntercomUi(EntityUid uid, IntercomComponent component) var availableChannels = component.SupportedChannels; var selectedChannel = micComp?.BroadcastChannel ?? SharedChatSystem.CommonChannel; var state = new IntercomBoundUIState(micEnabled, speakerEnabled, availableChannels, selectedChannel); - _ui.TrySetUiState(uid, IntercomUiKey.Key, state); + _ui.SetUiState(uid, IntercomUiKey.Key, state); } // Nuclear-14-Start diff --git a/Content.Server/Radio/EntitySystems/RadioSystem.cs b/Content.Server/Radio/EntitySystems/RadioSystem.cs index 6931ec8b921..1c496165bfd 100644 --- a/Content.Server/Radio/EntitySystems/RadioSystem.cs +++ b/Content.Server/Radio/EntitySystems/RadioSystem.cs @@ -3,8 +3,6 @@ using Content.Server.Language; using Content.Server.Power.Components; using Content.Server.Radio.Components; -using Content.Server.Speech; -using Content.Server.VoiceMask; using Content.Shared.Chat; using Content.Shared.Database; using Content.Shared.Language; @@ -105,28 +103,13 @@ public void SendRadioMessage(EntityUid messageSource, string message, RadioChann if (!_messages.Add(message)) return; - var name = TryComp(messageSource, out VoiceMaskComponent? mask) && mask.Enabled - ? mask.VoiceName - : MetaData(messageSource).EntityName; - - // Delta-V: Support syrinx voice mask on radio. - if (TryComp(messageSource, out SyrinxVoiceMaskComponent? syrinx) && syrinx.Enabled) - name = syrinx.VoiceName; + var evt = new TransformSpeakerSpeechEvent(messageSource, Name(messageSource)); + RaiseLocalEvent(messageSource, evt); + var name = evt.VoiceName ?? Name(messageSource); name = FormattedMessage.EscapeText(name); // most radios are relayed to chat, so lets parse the chat message beforehand - SpeechVerbPrototype speech; - if (mask != null - && mask.Enabled - && mask.SpeechVerb != null - && _prototype.TryIndex(mask.SpeechVerb, out var proto)) - { - speech = proto; - } - else - speech = _chat.GetSpeechVerb(messageSource, message); - var content = escapeMarkup ? FormattedMessage.EscapeText(message) : message; @@ -139,7 +122,7 @@ public void SendRadioMessage(EntityUid messageSource, string message, RadioChann var obfuscatedWrapped = WrapRadioMessage(messageSource, channel, name, obfuscated, language); var notUdsMsg = new ChatMessage(ChatChannel.Radio, obfuscated, obfuscatedWrapped, NetEntity.Invalid, null); - var ev = new RadioReceiveEvent(messageSource, channel, msg, notUdsMsg, language); + var ev = new RadioReceiveEvent(messageSource, channel, msg, notUdsMsg, language, radioSource); var sendAttemptEv = new RadioSendAttemptEvent(channel, radioSource); RaiseLocalEvent(ref sendAttemptEv); @@ -206,6 +189,9 @@ private string WrapRadioMessage(EntityUid source, RadioChannelPrototype channel, var languageColor = channel.Color; if (language.SpeechOverride.Color is { } colorOverride) languageColor = Color.InterpolateBetween(languageColor, colorOverride, colorOverride.A); + var languageDisplay = language.IsVisibleLanguage + ? $"{language.ChatName} | " + : ""; return Loc.GetString(speech.Bold ? "chat-radio-message-wrap-bold" : "chat-radio-message-wrap", ("color", channel.Color), @@ -215,7 +201,8 @@ private string WrapRadioMessage(EntityUid source, RadioChannelPrototype channel, ("verb", Loc.GetString(_random.Pick(speech.SpeechVerbStrings))), ("channel", $"\\[{channel.LocalizedName}\\]"), ("name", name), - ("message", message)); + ("message", message), + ("language", languageDisplay)); } /// diff --git a/Content.Server/Radio/RadioEvent.cs b/Content.Server/Radio/RadioEvent.cs index 35220d1d757..1198f7c1339 100644 --- a/Content.Server/Radio/RadioEvent.cs +++ b/Content.Server/Radio/RadioEvent.cs @@ -10,12 +10,12 @@ namespace Content.Server.Radio; /// [ByRefEvent] public readonly record struct RadioReceiveEvent( - // Einstein-Engines - languages mechanic EntityUid MessageSource, RadioChannelPrototype Channel, ChatMessage OriginalChatMsg, ChatMessage LanguageObfuscatedChatMsg, - LanguagePrototype Language + LanguagePrototype Language, + EntityUid RadioSource ); /// diff --git a/Content.Server/RandomMetadata/RandomMetadataSystem.cs b/Content.Server/RandomMetadata/RandomMetadataSystem.cs index 0c254c52ac0..abab5e5fc38 100644 --- a/Content.Server/RandomMetadata/RandomMetadataSystem.cs +++ b/Content.Server/RandomMetadata/RandomMetadataSystem.cs @@ -47,9 +47,13 @@ public string GetRandomFromSegments(List segments, string? separator) var outputSegments = new List(); foreach (var segment in segments) { - if (_prototype.TryIndex(segment, out var proto)) - outputSegments.Add(_random.Pick(proto.Values)); - else if (Loc.TryGetString(segment, out var localizedSegment)) + if (_prototype.TryIndex(segment, out var proto)) { + var random = _random.Pick(proto.Values); + if (Loc.TryGetString(random, out var localizedSegment)) + outputSegments.Add(localizedSegment); + else + outputSegments.Add(random); + } else if (Loc.TryGetString(segment, out var localizedSegment)) outputSegments.Add(localizedSegment); else outputSegments.Add(segment); diff --git a/Content.Server/Repairable/RepairableComponent.cs b/Content.Server/Repairable/RepairableComponent.cs index c436386110c..bab70f66b56 100644 --- a/Content.Server/Repairable/RepairableComponent.cs +++ b/Content.Server/Repairable/RepairableComponent.cs @@ -1,5 +1,6 @@ using Content.Shared.Damage; using Content.Shared.Tools; +using Robust.Shared.Prototypes; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; namespace Content.Server.Repairable @@ -14,28 +15,28 @@ public sealed partial class RepairableComponent : Component /// If this data-field is specified, it will change damage by this amount instead of setting all damage to 0. /// in order to heal/repair the damage values have to be negative. /// - [ViewVariables(VVAccess.ReadWrite)] [DataField("damage")] + [DataField] public DamageSpecifier? Damage; - [ViewVariables(VVAccess.ReadWrite)] [DataField("fuelCost")] + [DataField] public int FuelCost = 5; - [ViewVariables(VVAccess.ReadWrite)] [DataField("qualityNeeded", customTypeSerializer:typeof(PrototypeIdSerializer))] - public string QualityNeeded = "Welding"; + [DataField] + public ProtoId QualityNeeded = "Welding"; - [ViewVariables(VVAccess.ReadWrite)] [DataField("doAfterDelay")] + [DataField] public int DoAfterDelay = 1; /// /// A multiplier that will be applied to the above if an entity is repairing themselves. /// - [ViewVariables(VVAccess.ReadWrite)] [DataField("selfRepairPenalty")] + [DataField] public float SelfRepairPenalty = 3f; /// /// Whether or not an entity is allowed to repair itself. /// - [DataField("allowSelfRepair")] + [DataField] public bool AllowSelfRepair = true; } } diff --git a/Content.Server/Repairable/RepairableSystem.cs b/Content.Server/Repairable/RepairableSystem.cs index 5bd580756da..ec24cd81975 100644 --- a/Content.Server/Repairable/RepairableSystem.cs +++ b/Content.Server/Repairable/RepairableSystem.cs @@ -4,7 +4,6 @@ using Content.Shared.Interaction; using Content.Shared.Popups; using Content.Shared.Repairable; -using Content.Shared.Tools; using SharedToolSystem = Content.Shared.Tools.Systems.SharedToolSystem; namespace Content.Server.Repairable @@ -70,7 +69,7 @@ public async void Repair(EntityUid uid, RepairableComponent component, InteractU } // Run the repairing doafter - args.Handled = _toolSystem.UseTool(args.Used, args.User, uid, delay, component.QualityNeeded, new RepairFinishedEvent()); + args.Handled = _toolSystem.UseTool(args.Used, args.User, uid, delay, component.QualityNeeded, new RepairFinishedEvent(), component.FuelCost); } } } diff --git a/Content.Server/Research/Systems/ResearchSystem.Client.cs b/Content.Server/Research/Systems/ResearchSystem.Client.cs index 6bd5300d8fe..f8fdba55b76 100644 --- a/Content.Server/Research/Systems/ResearchSystem.Client.cs +++ b/Content.Server/Research/Systems/ResearchSystem.Client.cs @@ -45,7 +45,7 @@ private void OnConsoleSelect(EntityUid uid, ResearchClientComponent component, C if (!this.IsPowered(uid, EntityManager)) return; - _uiSystem.TryToggleUi(uid, ResearchClientUiKey.Key, args.Session); + _uiSystem.TryToggleUi(uid, ResearchClientUiKey.Key, args.Actor); } #endregion @@ -88,7 +88,7 @@ private void UpdateClientInterface(EntityUid uid, ResearchClientComponent? compo var state = new ResearchClientBoundInterfaceState(names.Length, names, GetServerIds(), serverComponent?.Id ?? -1); - _uiSystem.TrySetUiState(uid, ResearchClientUiKey.Key, state); + _uiSystem.SetUiState(uid, ResearchClientUiKey.Key, state); } /// diff --git a/Content.Server/Research/Systems/ResearchSystem.Console.cs b/Content.Server/Research/Systems/ResearchSystem.Console.cs index 9f95fd25176..5358ddefcdf 100644 --- a/Content.Server/Research/Systems/ResearchSystem.Console.cs +++ b/Content.Server/Research/Systems/ResearchSystem.Console.cs @@ -20,8 +20,7 @@ private void InitializeConsole() private void OnConsoleUnlock(EntityUid uid, ResearchConsoleComponent component, ConsoleUnlockTechnologyMessage args) { - if (args.Session.AttachedEntity is not { } ent) - return; + var act = args.Actor; if (!this.IsPowered(uid, EntityManager)) return; @@ -29,13 +28,13 @@ private void OnConsoleUnlock(EntityUid uid, ResearchConsoleComponent component, if (!PrototypeManager.TryIndex(args.Id, out var technologyPrototype)) return; - if (TryComp(uid, out var access) && !_accessReader.IsAllowed(ent, uid, access)) + if (TryComp(uid, out var access) && !_accessReader.IsAllowed(act, uid, access)) { - _popup.PopupEntity(Loc.GetString("research-console-no-access-popup"), ent); + _popup.PopupEntity(Loc.GetString("research-console-no-access-popup"), act); return; } - if (!UnlockTechnology(uid, args.Id, ent)) + if (!UnlockTechnology(uid, args.Id, act)) return; var message = Loc.GetString("research-console-unlock-technology-radio-broadcast", @@ -68,7 +67,7 @@ private void UpdateConsoleInterface(EntityUid uid, ResearchConsoleComponent? com state = new ResearchConsoleBoundInterfaceState(default); } - _uiSystem.TrySetUiState(uid, ResearchConsoleUiKey.Key, state); + _uiSystem.SetUiState(uid, ResearchConsoleUiKey.Key, state); } private void OnPointsChanged(EntityUid uid, ResearchConsoleComponent component, ref ResearchServerPointsChangedEvent args) diff --git a/Content.Server/Research/TechnologyDisk/Systems/DiskConsoleSystem.cs b/Content.Server/Research/TechnologyDisk/Systems/DiskConsoleSystem.cs index 2064abd8ebf..67002475228 100644 --- a/Content.Server/Research/TechnologyDisk/Systems/DiskConsoleSystem.cs +++ b/Content.Server/Research/TechnologyDisk/Systems/DiskConsoleSystem.cs @@ -91,7 +91,7 @@ public void UpdateUserInterface(EntityUid uid, DiskConsoleComponent? component = totalPoints >= component.PricePerDisk; var state = new DiskConsoleBoundUserInterfaceState(totalPoints, component.PricePerDisk, canPrint); - _ui.TrySetUiState(uid, DiskConsoleUiKey.Key, state); + _ui.SetUiState(uid, DiskConsoleUiKey.Key, state); } private void OnShutdown(EntityUid uid, DiskConsolePrintingComponent component, ComponentShutdown args) diff --git a/Content.Server/Resist/CanEscapeInventoryComponent.cs b/Content.Server/Resist/CanEscapeInventoryComponent.cs index 978e03d95f9..2b4045143a4 100644 --- a/Content.Server/Resist/CanEscapeInventoryComponent.cs +++ b/Content.Server/Resist/CanEscapeInventoryComponent.cs @@ -6,9 +6,9 @@ namespace Content.Server.Resist; public sealed partial class CanEscapeInventoryComponent : Component { /// - /// Base doafter length for uncontested breakouts. + /// Base doafter length for uncontested breakouts. /// - [DataField("baseResistTime")] + [DataField] public float BaseResistTime = 5f; public bool IsEscaping => DoAfter != null; diff --git a/Content.Server/Revenant/EntitySystems/CorporealSystem.cs b/Content.Server/Revenant/EntitySystems/CorporealSystem.cs index 1d43cb3ac85..5f31a2f280a 100644 --- a/Content.Server/Revenant/EntitySystems/CorporealSystem.cs +++ b/Content.Server/Revenant/EntitySystems/CorporealSystem.cs @@ -1,4 +1,4 @@ -using Content.Server.GameTicking; +using Content.Server.GameTicking; using Content.Shared.Eye; using Content.Shared.Revenant.Components; using Content.Shared.Revenant.EntitySystems; @@ -17,8 +17,8 @@ public override void OnStartup(EntityUid uid, CorporealComponent component, Comp if (TryComp(uid, out var visibility)) { - _visibilitySystem.RemoveLayer(uid, visibility, (int) VisibilityFlags.Ghost, false); - _visibilitySystem.AddLayer(uid, visibility, (int) VisibilityFlags.Normal, false); + _visibilitySystem.RemoveLayer((uid, visibility), (int) VisibilityFlags.Ghost, false); + _visibilitySystem.AddLayer((uid, visibility), (int) VisibilityFlags.Normal, false); _visibilitySystem.RefreshVisibility(uid, visibility); } } @@ -29,8 +29,8 @@ public override void OnShutdown(EntityUid uid, CorporealComponent component, Com if (TryComp(uid, out var visibility) && _ticker.RunLevel != GameRunLevel.PostRound) { - _visibilitySystem.AddLayer(uid, visibility, (int) VisibilityFlags.Ghost, false); - _visibilitySystem.RemoveLayer(uid, visibility, (int) VisibilityFlags.Normal, false); + _visibilitySystem.AddLayer((uid, visibility), (int) VisibilityFlags.Ghost, false); + _visibilitySystem.RemoveLayer((uid, visibility), (int) VisibilityFlags.Normal, false); _visibilitySystem.RefreshVisibility(uid, visibility); } } diff --git a/Content.Server/Revenant/EntitySystems/RevenantSystem.Abilities.cs b/Content.Server/Revenant/EntitySystems/RevenantSystem.Abilities.cs index cd64f043a08..5d7c7514b84 100644 --- a/Content.Server/Revenant/EntitySystems/RevenantSystem.Abilities.cs +++ b/Content.Server/Revenant/EntitySystems/RevenantSystem.Abilities.cs @@ -15,6 +15,7 @@ using System.Linq; using System.Numerics; using Content.Server.Revenant.Components; +using Content.Shared.Physics; using Content.Shared.DoAfter; using Content.Shared.Emag.Systems; using Content.Shared.FixedPoint; @@ -135,6 +136,12 @@ private void BeginHarvestDoAfter(EntityUid uid, EntityUid target, RevenantCompon return; } + if(_physics.GetEntitiesIntersectingBody(uid, (int) CollisionGroup.Impassable).Count > 0) + { + _popup.PopupEntity(Loc.GetString("revenant-in-solid"), uid, uid); + return; + } + var doAfter = new DoAfterArgs(EntityManager, uid, revenant.HarvestDebuffs.X, new HarvestEvent(), uid, target: target) { DistanceThreshold = 2, @@ -238,7 +245,7 @@ private void OnDefileAction(EntityUid uid, RevenantComponent component, Revenant { //hardcoded damage specifiers til i die. var dspec = new DamageSpecifier(); - dspec.DamageDict.Add("Structural", 15); + dspec.DamageDict.Add("Structural", 60); _damage.TryChangeDamage(ent, dspec, origin: uid); } diff --git a/Content.Server/Revenant/EntitySystems/RevenantSystem.cs b/Content.Server/Revenant/EntitySystems/RevenantSystem.cs index 86be70c41fe..428d1ecb75e 100644 --- a/Content.Server/Revenant/EntitySystems/RevenantSystem.cs +++ b/Content.Server/Revenant/EntitySystems/RevenantSystem.cs @@ -77,8 +77,8 @@ private void OnStartup(EntityUid uid, RevenantComponent component, ComponentStar if (_ticker.RunLevel == GameRunLevel.PostRound && TryComp(uid, out var visibility)) { - _visibility.AddLayer(uid, visibility, (int) VisibilityFlags.Ghost, false); - _visibility.RemoveLayer(uid, visibility, (int) VisibilityFlags.Normal, false); + _visibility.AddLayer((uid, visibility), (int) VisibilityFlags.Ghost, false); + _visibility.RemoveLayer((uid, visibility), (int) VisibilityFlags.Normal, false); _visibility.RefreshVisibility(uid, visibility); } @@ -191,13 +191,13 @@ public void MakeVisible(bool visible) { if (visible) { - _visibility.AddLayer(uid, vis, (int) VisibilityFlags.Normal, false); - _visibility.RemoveLayer(uid, vis, (int) VisibilityFlags.Ghost, false); + _visibility.AddLayer((uid, vis), (int) VisibilityFlags.Normal, false); + _visibility.RemoveLayer((uid, vis), (int) VisibilityFlags.Ghost, false); } else { - _visibility.AddLayer(uid, vis, (int) VisibilityFlags.Ghost, false); - _visibility.RemoveLayer(uid, vis, (int) VisibilityFlags.Normal, false); + _visibility.AddLayer((uid, vis), (int) VisibilityFlags.Ghost, false); + _visibility.RemoveLayer((uid, vis), (int) VisibilityFlags.Normal, false); } _visibility.RefreshVisibility(uid, vis); } diff --git a/Content.Server/Robotics/Systems/RoboticsConsoleSystem.cs b/Content.Server/Robotics/Systems/RoboticsConsoleSystem.cs new file mode 100644 index 00000000000..916694fdd86 --- /dev/null +++ b/Content.Server/Robotics/Systems/RoboticsConsoleSystem.cs @@ -0,0 +1,146 @@ +using Content.Server.Administration.Logs; +using Content.Server.DeviceNetwork; +using Content.Server.DeviceNetwork.Systems; +using Content.Server.Radio.EntitySystems; +using Content.Shared.Lock; +using Content.Shared.Database; +using Content.Shared.DeviceNetwork; +using Content.Shared.Robotics; +using Content.Shared.Robotics.Components; +using Content.Shared.Robotics.Systems; +using Robust.Server.GameObjects; +using Robust.Shared.Timing; +using System.Diagnostics.CodeAnalysis; + +namespace Content.Server.Research.Systems; + +/// +/// Handles UI and state receiving for the robotics control console. +/// BorgTransponderComponent broadcasts state from the station's borgs to consoles. +/// +public sealed class RoboticsConsoleSystem : SharedRoboticsConsoleSystem +{ + [Dependency] private readonly DeviceNetworkSystem _deviceNetwork = default!; + [Dependency] private readonly IAdminLogManager _adminLogger = default!; + [Dependency] private readonly IGameTiming _timing = default!; + [Dependency] private readonly LockSystem _lock = default!; + [Dependency] private readonly RadioSystem _radio = default!; + [Dependency] private readonly UserInterfaceSystem _ui = default!; + + // almost never timing out more than 1 per tick so initialize with that capacity + private List _removing = new(1); + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnPacketReceived); + Subs.BuiEvents(RoboticsConsoleUiKey.Key, subs => + { + subs.Event(OnOpened); + subs.Event(OnDisable); + subs.Event(OnDestroy); + // TODO: camera stuff + }); + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + + var now = _timing.CurTime; + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var comp)) + { + // remove cyborgs that havent pinged in a while + _removing.Clear(); + foreach (var (address, data) in comp.Cyborgs) + { + if (now >= data.Timeout) + _removing.Add(address); + } + + // needed to prevent modifying while iterating it + foreach (var address in _removing) + { + comp.Cyborgs.Remove(address); + } + + if (_removing.Count > 0) + UpdateUserInterface((uid, comp)); + } + } + + private void OnPacketReceived(Entity ent, ref DeviceNetworkPacketEvent args) + { + var payload = args.Data; + if (!payload.TryGetValue(DeviceNetworkConstants.Command, out string? command)) + return; + if (command != DeviceNetworkConstants.CmdUpdatedState) + return; + + if (!payload.TryGetValue(RoboticsConsoleConstants.NET_CYBORG_DATA, out CyborgControlData? data)) + return; + + var real = data.Value; + real.Timeout = _timing.CurTime + ent.Comp.Timeout; + ent.Comp.Cyborgs[args.SenderAddress] = real; + + UpdateUserInterface(ent); + } + + private void OnOpened(Entity ent, ref BoundUIOpenedEvent args) + { + UpdateUserInterface(ent); + } + + private void OnDisable(Entity ent, ref RoboticsConsoleDisableMessage args) + { + if (_lock.IsLocked(ent.Owner)) + return; + + if (!ent.Comp.Cyborgs.TryGetValue(args.Address, out var data)) + return; + + var payload = new NetworkPayload() + { + [DeviceNetworkConstants.Command] = RoboticsConsoleConstants.NET_DISABLE_COMMAND + }; + + _deviceNetwork.QueuePacket(ent, args.Address, payload); + _adminLogger.Add(LogType.Action, LogImpact.High, $"{ToPrettyString(args.Actor):user} disabled borg {data.Name} with address {args.Address}"); + } + + private void OnDestroy(Entity ent, ref RoboticsConsoleDestroyMessage args) + { + if (_lock.IsLocked(ent.Owner)) + return; + + var now = _timing.CurTime; + if (now < ent.Comp.NextDestroy) + return; + + if (!ent.Comp.Cyborgs.Remove(args.Address, out var data)) + return; + + var payload = new NetworkPayload() + { + [DeviceNetworkConstants.Command] = RoboticsConsoleConstants.NET_DESTROY_COMMAND + }; + + _deviceNetwork.QueuePacket(ent, args.Address, payload); + + var message = Loc.GetString(ent.Comp.DestroyMessage, ("name", data.Name)); + _radio.SendRadioMessage(ent, message, ent.Comp.RadioChannel, ent); + _adminLogger.Add(LogType.Action, LogImpact.Extreme, $"{ToPrettyString(args.Actor):user} destroyed borg {data.Name} with address {args.Address}"); + + ent.Comp.NextDestroy = now + ent.Comp.DestroyCooldown; + Dirty(ent, ent.Comp); + } + + private void UpdateUserInterface(Entity ent) + { + var state = new RoboticsConsoleState(ent.Comp.Cyborgs); + _ui.SetUiState(ent.Owner, RoboticsConsoleUiKey.Key, state); + } +} diff --git a/Content.Server/Roles/RoleSystem.cs b/Content.Server/Roles/RoleSystem.cs index f7a51773573..c53fa1cf9eb 100644 --- a/Content.Server/Roles/RoleSystem.cs +++ b/Content.Server/Roles/RoleSystem.cs @@ -15,7 +15,6 @@ public override void Initialize() SubscribeAntagEvents(); SubscribeAntagEvents(); SubscribeAntagEvents(); - SubscribeAntagEvents(); SubscribeAntagEvents(); SubscribeAntagEvents(); SubscribeAntagEvents(); diff --git a/Content.Server/RoundEnd/RoundEndSystem.cs b/Content.Server/RoundEnd/RoundEndSystem.cs index d79fe2d2cca..0866b975c2b 100644 --- a/Content.Server/RoundEnd/RoundEndSystem.cs +++ b/Content.Server/RoundEnd/RoundEndSystem.cs @@ -147,11 +147,15 @@ public void RequestRoundEnd(EntityUid? requester = null, bool checkCooldown = tr public void RequestRoundEnd(TimeSpan countdownTime, EntityUid? requester = null, bool checkCooldown = true, string text = "round-end-system-shuttle-called-announcement", string name = "Station") { - if (_gameTicker.RunLevel != GameRunLevel.InRound) return; + if (_gameTicker.RunLevel != GameRunLevel.InRound) + return; - if (checkCooldown && _cooldownTokenSource != null) return; + if (checkCooldown && _cooldownTokenSource != null) + return; + + if (_countdownTokenSource != null) + return; - if (_countdownTokenSource != null) return; _countdownTokenSource = new(); if (requester != null) @@ -191,6 +195,8 @@ public void RequestRoundEnd(TimeSpan countdownTime, EntityUid? requester = null, LastCountdownStart = _gameTiming.CurTime; ExpectedCountdownEnd = _gameTiming.CurTime + countdownTime; + + // TODO full game saves Timer.Spawn(countdownTime, _shuttle.CallEmergencyShuttle, _countdownTokenSource.Token); ActivateCooldown(); @@ -343,6 +349,8 @@ private void ActivateCooldown() { _cooldownTokenSource?.Cancel(); _cooldownTokenSource = new(); + + // TODO full game saves Timer.Spawn(DefaultCooldownDuration, () => { _cooldownTokenSource.Cancel(); diff --git a/Content.Server/Salvage/Expeditions/SalvageExpeditionComponent.cs b/Content.Server/Salvage/Expeditions/SalvageExpeditionComponent.cs index 6a58c209cfa..ff3c8176fd0 100644 --- a/Content.Server/Salvage/Expeditions/SalvageExpeditionComponent.cs +++ b/Content.Server/Salvage/Expeditions/SalvageExpeditionComponent.cs @@ -40,14 +40,21 @@ public sealed partial class SalvageExpeditionComponent : SharedSalvageExpedition /// /// Countdown audio stream. /// + [DataField, AutoNetworkedField] public EntityUid? Stream = null; /// /// Sound that plays when the mission end is imminent. /// - [ViewVariables(VVAccess.ReadWrite), DataField("sound")] - public SoundSpecifier Sound = new SoundPathSpecifier("/Audio/Misc/tension_session.ogg") + [ViewVariables(VVAccess.ReadWrite), DataField] + public SoundSpecifier Sound = new SoundCollectionSpecifier("ExpeditionEnd") { Params = AudioParams.Default.WithVolume(-5), }; + + /// + /// Song selected on MapInit so we can predict the audio countdown properly. + /// + [DataField] + public SoundPathSpecifier SelectedSong; } diff --git a/Content.Server/Salvage/FultonSystem.cs b/Content.Server/Salvage/FultonSystem.cs index a24bab45846..8c656790e90 100644 --- a/Content.Server/Salvage/FultonSystem.cs +++ b/Content.Server/Salvage/FultonSystem.cs @@ -1,3 +1,4 @@ +using System.Numerics; using Content.Shared.Salvage.Fulton; using Robust.Shared.Containers; using Robust.Shared.Map; @@ -61,8 +62,9 @@ private void Fulton(EntityUid uid, FultonedComponent component) var metadata = MetaData(uid); var oldCoords = xform.Coordinates; var offset = _random.NextVector2(1.5f); - var localPos = TransformSystem.GetInvWorldMatrix(beaconXform.ParentUid) - .Transform(TransformSystem.GetWorldPosition(beaconXform)) + offset; + var localPos = Vector2.Transform( + TransformSystem.GetWorldPosition(beaconXform), + TransformSystem.GetInvWorldMatrix(beaconXform.ParentUid)) + offset; TransformSystem.SetCoordinates(uid, new EntityCoordinates(beaconXform.ParentUid, localPos)); diff --git a/Content.Server/Salvage/SalvageSystem.ExpeditionConsole.cs b/Content.Server/Salvage/SalvageSystem.ExpeditionConsole.cs index 61636bea7c9..d0314184767 100644 --- a/Content.Server/Salvage/SalvageSystem.ExpeditionConsole.cs +++ b/Content.Server/Salvage/SalvageSystem.ExpeditionConsole.cs @@ -56,7 +56,7 @@ private void UpdateConsoles(Entity component) if (station != component.Owner) continue; - _ui.TrySetUiState(uid, SalvageConsoleUiKey.Expedition, state, ui: uiComp); + _ui.SetUiState((uid, uiComp), SalvageConsoleUiKey.Expedition, state); } } @@ -74,6 +74,6 @@ private void UpdateConsole(Entity component) state = new SalvageExpeditionConsoleState(TimeSpan.Zero, false, true, 0, new List()); } - _ui.TrySetUiState(component, SalvageConsoleUiKey.Expedition, state); + _ui.SetUiState(component.Owner, SalvageConsoleUiKey.Expedition, state); } } diff --git a/Content.Server/Salvage/SalvageSystem.Expeditions.cs b/Content.Server/Salvage/SalvageSystem.Expeditions.cs index 4d5d569dabd..923880169d5 100644 --- a/Content.Server/Salvage/SalvageSystem.Expeditions.cs +++ b/Content.Server/Salvage/SalvageSystem.Expeditions.cs @@ -4,7 +4,9 @@ using Content.Server.Salvage.Expeditions.Structure; using Content.Shared.CCVar; using Content.Shared.Examine; +using Content.Shared.Random.Helpers; using Content.Shared.Salvage.Expeditions; +using Robust.Shared.Audio; using Robust.Shared.CPUJob.JobQueues; using Robust.Shared.CPUJob.JobQueues.Queues; using Robust.Shared.GameStates; @@ -32,6 +34,7 @@ private void InitializeExpeditions() SubscribeLocalEvent(OnSalvageConsoleParent); SubscribeLocalEvent(OnSalvageClaimMessage); + SubscribeLocalEvent(OnExpeditionMapInit); SubscribeLocalEvent(OnExpeditionShutdown); SubscribeLocalEvent(OnExpeditionGetState); @@ -64,6 +67,12 @@ private void SetCooldownChange(float obj) _cooldown = obj; } + private void OnExpeditionMapInit(EntityUid uid, SalvageExpeditionComponent component, MapInitEvent args) + { + var selectedFile = _audio.GetSound(component.Sound); + component.SelectedSong = new SoundPathSpecifier(selectedFile, component.Sound.Params); + } + private void OnExpeditionShutdown(EntityUid uid, SalvageExpeditionComponent component, ComponentShutdown args) { component.Stream = _audio.Stop(component.Stream); diff --git a/Content.Server/Salvage/SalvageSystem.Magnet.cs b/Content.Server/Salvage/SalvageSystem.Magnet.cs index e4711a58763..4b7291298b2 100644 --- a/Content.Server/Salvage/SalvageSystem.Magnet.cs +++ b/Content.Server/Salvage/SalvageSystem.Magnet.cs @@ -35,11 +35,6 @@ private void InitializeMagnet() private void OnMagnetClaim(EntityUid uid, SalvageMagnetComponent component, ref MagnetClaimOfferEvent args) { - var player = args.Session.AttachedEntity; - - if (player is null) - return; - var station = _station.GetOwningStation(uid); if (!TryComp(station, out SalvageMagnetDataComponent? dataComp) || @@ -177,12 +172,12 @@ private void CreateMagnetOffers(Entity data) // Fuck with the seed to mix wrecks and asteroids. seed = (int) (seed / 10f) * 10; - + if (i >= data.Comp.OfferCount / 2) { seed++; } - + data.Comp.Offered.Add(seed); } @@ -216,7 +211,7 @@ private void UpdateMagnetUI(Entity entity, TransformComp if (!TryComp(station, out SalvageMagnetDataComponent? dataComp)) return; - _ui.TrySetUiState(entity, SalvageMagnetUiKey.Key, + _ui.SetUiState(entity.Owner, SalvageMagnetUiKey.Key, new SalvageMagnetBoundUserInterfaceState(dataComp.Offered) { Cooldown = dataComp.OfferCooldown, @@ -238,7 +233,7 @@ private void UpdateMagnetUIs(Entity data) if (station != data.Owner) continue; - _ui.TrySetUiState(magnetUid, SalvageMagnetUiKey.Key, + _ui.SetUiState(magnetUid, SalvageMagnetUiKey.Key, new SalvageMagnetBoundUserInterfaceState(data.Comp.Offered) { Cooldown = data.Comp.OfferCooldown, diff --git a/Content.Server/Salvage/SalvageSystem.Runner.cs b/Content.Server/Salvage/SalvageSystem.Runner.cs index 8a1498cbe96..23607e2bdc5 100644 --- a/Content.Server/Salvage/SalvageSystem.Runner.cs +++ b/Content.Server/Salvage/SalvageSystem.Runner.cs @@ -1,9 +1,7 @@ using System.Numerics; using Content.Server.Salvage.Expeditions; -using Content.Server.Salvage.Expeditions.Structure; using Content.Server.Shuttles.Components; using Content.Server.Shuttles.Events; -using Content.Server.Shuttles.Systems; using Content.Server.Station.Components; using Content.Shared.Chat; using Content.Shared.Humanoid; @@ -13,7 +11,6 @@ using Content.Shared.Shuttles.Components; using Robust.Shared.Map.Components; using Robust.Shared.Player; -using Robust.Shared.Utility; namespace Content.Server.Salvage; @@ -144,6 +141,7 @@ private void UpdateRunner() while (query.MoveNext(out var uid, out var comp)) { var remaining = comp.EndTime - _timing.CurTime; + var audioLength = _audio.GetAudioLength(comp.SelectedSong.Path.ToString()); if (comp.Stage < ExpeditionStage.FinalCountdown && remaining < TimeSpan.FromSeconds(45)) { @@ -151,13 +149,14 @@ private void UpdateRunner() Dirty(uid, comp); Announce(uid, Loc.GetString("salvage-expedition-announcement-countdown-seconds", ("duration", TimeSpan.FromSeconds(45).Seconds))); } - else if (comp.Stage < ExpeditionStage.MusicCountdown && remaining < TimeSpan.FromMinutes(2)) + else if (comp.Stream == null && remaining < audioLength) { - // TODO: Some way to play audio attached to a map for players. - comp.Stream = _audio.PlayGlobal(comp.Sound, Filter.BroadcastMap(Comp(uid).MapId), true).Value.Entity; + var audio = _audio.PlayPvs(comp.Sound, uid).Value; + comp.Stream = audio.Entity; + _audio.SetMapAudio(audio); comp.Stage = ExpeditionStage.MusicCountdown; Dirty(uid, comp); - Announce(uid, Loc.GetString("salvage-expedition-announcement-countdown-minutes", ("duration", TimeSpan.FromMinutes(2).Minutes))); + Announce(uid, Loc.GetString("salvage-expedition-announcement-countdown-minutes", ("duration", audioLength.Minutes))); } else if (comp.Stage < ExpeditionStage.Countdown && remaining < TimeSpan.FromMinutes(4)) { @@ -166,16 +165,16 @@ private void UpdateRunner() Announce(uid, Loc.GetString("salvage-expedition-announcement-countdown-minutes", ("duration", TimeSpan.FromMinutes(5).Minutes))); } // Auto-FTL out any shuttles - else if (remaining < TimeSpan.FromSeconds(ShuttleSystem.DefaultStartupTime) + TimeSpan.FromSeconds(0.5)) + else if (remaining < TimeSpan.FromSeconds(_shuttle.DefaultStartupTime) + TimeSpan.FromSeconds(0.5)) { var ftlTime = (float) remaining.TotalSeconds; - if (remaining < TimeSpan.FromSeconds(ShuttleSystem.DefaultStartupTime)) + if (remaining < TimeSpan.FromSeconds(_shuttle.DefaultStartupTime)) { ftlTime = MathF.Max(0, (float) remaining.TotalSeconds - 0.5f); } - ftlTime = MathF.Min(ftlTime, ShuttleSystem.DefaultStartupTime); + ftlTime = MathF.Min(ftlTime, _shuttle.DefaultStartupTime); var shuttleQuery = AllEntityQuery(); if (TryComp(comp.Station, out var data)) diff --git a/Content.Server/Salvage/SpawnSalvageMissionJob.cs b/Content.Server/Salvage/SpawnSalvageMissionJob.cs index 47123e97845..ce844e57a13 100644 --- a/Content.Server/Salvage/SpawnSalvageMissionJob.cs +++ b/Content.Server/Salvage/SpawnSalvageMissionJob.cs @@ -34,8 +34,6 @@ using Robust.Shared.Timing; using Robust.Shared.Utility; using Content.Server.Shuttles.Components; -using Content.Shared.Coordinates; -using Content.Shared.Shuttles.Components; namespace Content.Server.Salvage; diff --git a/Content.Server/SensorMonitoring/SensorMonitoringConsoleComponent.cs b/Content.Server/SensorMonitoring/SensorMonitoringConsoleComponent.cs index 63b4d9daef9..b5a954f166d 100644 --- a/Content.Server/SensorMonitoring/SensorMonitoringConsoleComponent.cs +++ b/Content.Server/SensorMonitoring/SensorMonitoringConsoleComponent.cs @@ -27,7 +27,7 @@ public sealed partial class SensorMonitoringConsoleComponent : Component public TimeSpan RetentionTime = TimeSpan.FromMinutes(1); // UI update tracking stuff. - public HashSet InitialUIStateSent = new(); + public HashSet InitialUIStateSent = new(); public TimeSpan LastUIUpdate; public ValueList RemovedSensors; diff --git a/Content.Server/SensorMonitoring/SensorMonitoringConsoleSystem.UI.cs b/Content.Server/SensorMonitoring/SensorMonitoringConsoleSystem.UI.cs index 26c6b178313..dec3e6c36ea 100644 --- a/Content.Server/SensorMonitoring/SensorMonitoringConsoleSystem.UI.cs +++ b/Content.Server/SensorMonitoring/SensorMonitoringConsoleSystem.UI.cs @@ -18,27 +18,26 @@ private void InitUI() private void UpdateConsoleUI(EntityUid uid, SensorMonitoringConsoleComponent comp) { - if (!_userInterface.TryGetUi(uid, SensorMonitoringConsoleUiKey.Key, out var ui)) - return; - - if (ui.SubscribedSessions.Count == 0) + if (!_userInterface.IsUiOpen(uid, SensorMonitoringConsoleUiKey.Key)) + { return; + } ConsoleUIState? fullState = null; SensorMonitoringIncrementalUpdate? incrementalUpdate = null; - foreach (var session in ui.SubscribedSessions) + foreach (var actorUid in _userInterface.GetActors(uid, SensorMonitoringConsoleUiKey.Key)) { - if (comp.InitialUIStateSent.Contains(session)) + if (comp.InitialUIStateSent.Contains(actorUid)) { incrementalUpdate ??= CalculateIncrementalUpdate(); - _userInterface.TrySendUiMessage(ui, incrementalUpdate, session); + _userInterface.ServerSendUiMessage(uid, SensorMonitoringConsoleUiKey.Key, incrementalUpdate, actorUid); } else { fullState ??= CalculateFullState(); - _userInterface.SetUiState(ui, fullState, session); - comp.InitialUIStateSent.Add(session); + _userInterface.SetUiState(uid, SensorMonitoringConsoleUiKey.Key, fullState); + comp.InitialUIStateSent.Add(actorUid); } } @@ -131,9 +130,6 @@ private static void ConsoleUIClosed( if (!args.UiKey.Equals(SensorMonitoringConsoleUiKey.Key)) return; - if (args.Session is not { } player) - return; - - component.InitialUIStateSent.Remove(player); + component.InitialUIStateSent.Remove(args.Actor); } } diff --git a/Content.Server/Shadowkin/EtherealLightComponent.cs b/Content.Server/Shadowkin/EtherealLightComponent.cs new file mode 100644 index 00000000000..8f47d862002 --- /dev/null +++ b/Content.Server/Shadowkin/EtherealLightComponent.cs @@ -0,0 +1,15 @@ +namespace Content.Server.Shadowkin; + +[RegisterComponent] +public sealed partial class EtherealLightComponent : Component +{ + public EntityUid AttachedEntity = EntityUid.Invalid; + + public float OldRadius = 0f; + + public bool OldRadiusEdited = false; + + public float OldEnergy = 0f; + + public bool OldEnergyEdited = false; +} \ No newline at end of file diff --git a/Content.Server/Shadowkin/EtherealStunItemSystem.cs b/Content.Server/Shadowkin/EtherealStunItemSystem.cs new file mode 100644 index 00000000000..b48b4d4fecf --- /dev/null +++ b/Content.Server/Shadowkin/EtherealStunItemSystem.cs @@ -0,0 +1,44 @@ +using Content.Shared.Interaction.Events; +using Content.Shared.Damage.Components; +using Content.Shared.Damage.Systems; +using Content.Shared.Shadowkin; +using Content.Shared.Abilities.Psionics; +using Content.Shared.Stacks; + +namespace Content.Server.Shadowkin; + +public sealed class EtherealStunItemSystem : EntitySystem +{ + [Dependency] private readonly StaminaSystem _stamina = default!; + [Dependency] private readonly EntityLookupSystem _lookup = default!; + [Dependency] private readonly SharedStackSystem _sharedStackSystem = default!; + public override void Initialize() + { + SubscribeLocalEvent(OnUseInHand); + } + + private void OnUseInHand(EntityUid uid, EtherealStunItemComponent component, UseInHandEvent args) + { + foreach (var ent in _lookup.GetEntitiesInRange(uid, component.Radius)) + { + if (!TryComp(ent, out var ethereal)) + continue; + + RemComp(ent, ethereal); + + if (TryComp(ent, out var stamina)) + _stamina.TakeStaminaDamage(ent, stamina.CritThreshold, stamina, ent); + + if (TryComp(ent, out var magic)) + magic.Mana = 0; + } + + if (!component.DeleteOnUse) + return; + + if (TryComp(uid, out var stack)) + _sharedStackSystem.Use(uid, 1, stack); + else + QueueDel(uid); + } +} diff --git a/Content.Server/Shadowkin/EtherealSystem.cs b/Content.Server/Shadowkin/EtherealSystem.cs new file mode 100644 index 00000000000..2622547a3f6 --- /dev/null +++ b/Content.Server/Shadowkin/EtherealSystem.cs @@ -0,0 +1,216 @@ +using Content.Shared.Eye; +using Content.Shared.Shadowkin; +using Robust.Server.GameObjects; +using Content.Server.Atmos.Components; +using Content.Server.Temperature.Components; +using Content.Shared.Movement.Components; +using Content.Shared.Stealth; +using Content.Shared.Stealth.Components; +using Content.Server.Body.Components; +using Content.Server.NPC.Components; +using Content.Server.NPC.Systems; +using System.Linq; +using Content.Shared.Abilities.Psionics; +using Robust.Shared.Random; +using Content.Server.Light.Components; + +namespace Content.Server.Shadowkin; + +public sealed class EtherealSystem : SharedEtherealSystem +{ + [Dependency] private readonly VisibilitySystem _visibilitySystem = default!; + [Dependency] private readonly SharedStealthSystem _stealth = default!; + [Dependency] private readonly EyeSystem _eye = default!; + [Dependency] private readonly NpcFactionSystem _factions = default!; + [Dependency] private readonly EntityLookupSystem _lookup = default!; + [Dependency] private readonly SharedPointLightSystem _light = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly SharedTransformSystem _transform = default!; + + public override void OnStartup(EntityUid uid, EtherealComponent component, MapInitEvent args) + { + base.OnStartup(uid, component, args); + + var visibility = EnsureComp(uid); + _visibilitySystem.RemoveLayer((uid, visibility), (int) VisibilityFlags.Normal, false); + _visibilitySystem.AddLayer((uid, visibility), (int) VisibilityFlags.Ethereal, false); + _visibilitySystem.RefreshVisibility(uid, visibility); + + if (TryComp(uid, out var eye)) + _eye.SetVisibilityMask(uid, eye.VisibilityMask | (int) (VisibilityFlags.Ethereal), eye); + + if (TryComp(uid, out var temp)) + temp.AtmosTemperatureTransferEfficiency = 0; + + var stealth = EnsureComp(uid); + _stealth.SetVisibility(uid, 0.8f, stealth); + + SuppressFactions(uid, component, true); + + EnsureComp(uid); + EnsureComp(uid); + EnsureComp(uid); + + if (HasComp(uid)) + RemComp(uid, component); + } + + public override void OnShutdown(EntityUid uid, EtherealComponent component, ComponentShutdown args) + { + base.OnShutdown(uid, component, args); + + if (TryComp(uid, out var visibility)) + { + _visibilitySystem.AddLayer((uid, visibility), (int) VisibilityFlags.Normal, false); + _visibilitySystem.RemoveLayer((uid, visibility), (int) VisibilityFlags.Ethereal, false); + _visibilitySystem.RefreshVisibility(uid, visibility); + } + + if (TryComp(uid, out var eye)) + _eye.SetVisibilityMask(uid, (int) VisibilityFlags.Normal, eye); + + if (TryComp(uid, out var temp)) + temp.AtmosTemperatureTransferEfficiency = 0.1f; + + SuppressFactions(uid, component, false); + + RemComp(uid); + RemComp(uid); + RemComp(uid); + RemComp(uid); + + SpawnAtPosition("ShadowkinShadow", Transform(uid).Coordinates); + SpawnAtPosition("EffectFlashShadowkinDarkSwapOff", Transform(uid).Coordinates); + + foreach (var light in component.DarkenedLights.ToArray()) + { + if (!TryComp(light, out var pointLight) + || !TryComp(light, out var etherealLight)) + continue; + + ResetLight(light, pointLight, etherealLight); + } + } + + public void SuppressFactions(EntityUid uid, EtherealComponent component, bool set) + { + if (set) + { + if (!TryComp(uid, out var factions)) + return; + + component.SuppressedFactions = factions.Factions.ToList(); + + foreach (var faction in factions.Factions) + _factions.RemoveFaction(uid, faction); + } + else + { + foreach (var faction in component.SuppressedFactions) + _factions.AddFaction(uid, faction); + + component.SuppressedFactions.Clear(); + } + } + + public void ResetLight(EntityUid uid, PointLightComponent light, EtherealLightComponent etherealLight) + { + etherealLight.AttachedEntity = EntityUid.Invalid; + + if (etherealLight.OldRadiusEdited) + _light.SetRadius(uid, etherealLight.OldRadius); + etherealLight.OldRadiusEdited = false; + + if (etherealLight.OldEnergyEdited) + _light.SetEnergy(uid, etherealLight.OldEnergy); + etherealLight.OldEnergyEdited = false; + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var component)) + { + if (!component.Darken) + continue; + + component.DarkenAccumulator += frameTime; + + if (component.DarkenAccumulator <= 1) + continue; + + component.DarkenAccumulator -= component.DarkenRate; + + var darkened = new List(); + var lightQuery = _lookup.GetEntitiesInRange(uid, component.DarkenRange, flags: LookupFlags.StaticSundries) + .Where(x => HasComp(x) && HasComp(x)); + + foreach (var entity in lightQuery) + if (!darkened.Contains(entity)) + darkened.Add(entity); + + _random.Shuffle(darkened); + component.DarkenedLights = darkened; + + var playerPos = _transform.GetWorldPosition(uid); + + foreach (var light in component.DarkenedLights.ToArray()) + { + var lightPos = _transform.GetWorldPosition(light); + if (!TryComp(light, out var pointLight) + || !TryComp(light, out var etherealLight)) + continue; + + if (TryComp(light, out var powered) && !powered.On) + { + ResetLight(light, pointLight, etherealLight); + continue; + } + + if (etherealLight.AttachedEntity == EntityUid.Invalid) + etherealLight.AttachedEntity = uid; + + if (etherealLight.AttachedEntity != EntityUid.Invalid + && etherealLight.AttachedEntity != uid) + { + component.DarkenedLights.Remove(light); + continue; + } + + if (etherealLight.AttachedEntity == uid + && _random.Prob(0.03f)) + etherealLight.AttachedEntity = EntityUid.Invalid; + + if (!etherealLight.OldRadiusEdited) + { + etherealLight.OldRadius = pointLight.Radius; + etherealLight.OldRadiusEdited = true; + } + if (!etherealLight.OldEnergyEdited) + { + etherealLight.OldEnergy = pointLight.Energy; + etherealLight.OldEnergyEdited = true; + } + + var distance = (lightPos - playerPos).Length(); + var radius = distance * 2f; + var energy = distance * 0.8f; + + if (etherealLight.OldRadiusEdited && radius > etherealLight.OldRadius) + radius = etherealLight.OldRadius; + if (etherealLight.OldRadiusEdited && radius < etherealLight.OldRadius * 0.20f) + radius = etherealLight.OldRadius * 0.20f; + + if (etherealLight.OldEnergyEdited && energy > etherealLight.OldEnergy) + energy = etherealLight.OldEnergy; + if (etherealLight.OldEnergyEdited && energy < etherealLight.OldEnergy * 0.20f) + energy = etherealLight.OldEnergy * 0.20f; + + _light.SetRadius(light, radius); + _light.SetEnergy(light, energy); + } + } + } +} \ No newline at end of file diff --git a/Content.Server/Shadowkin/ShadowkinCuffSystem.cs b/Content.Server/Shadowkin/ShadowkinCuffSystem.cs new file mode 100644 index 00000000000..ce2b2588174 --- /dev/null +++ b/Content.Server/Shadowkin/ShadowkinCuffSystem.cs @@ -0,0 +1,29 @@ +using Content.Shared.Inventory.Events; +using Content.Shared.Clothing.Components; +using Content.Shared.Shadowkin; + +namespace Content.Server.Shadowkin; + +public sealed class ShadowkinCuffSystem : EntitySystem +{ + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnEquipped); + SubscribeLocalEvent(OnUnequipped); + } + + private void OnEquipped(EntityUid uid, ShadowkinCuffComponent component, GotEquippedEvent args) + { + if (!TryComp(uid, out var clothing) + || !clothing.Slots.HasFlag(args.SlotFlags)) + return; + + EnsureComp(args.Equipee); + } + + private void OnUnequipped(EntityUid uid, ShadowkinCuffComponent component, GotUnequippedEvent args) + { + RemComp(args.Equipee); + } +} \ No newline at end of file diff --git a/Content.Server/Shadowkin/ShadowkinSystem.cs b/Content.Server/Shadowkin/ShadowkinSystem.cs new file mode 100644 index 00000000000..83461e7a7fe --- /dev/null +++ b/Content.Server/Shadowkin/ShadowkinSystem.cs @@ -0,0 +1,181 @@ +using Content.Shared.Examine; +using Content.Shared.Abilities.Psionics; +using Content.Shared.Humanoid; +using Content.Shared.Psionics; +using Content.Shared.Bed.Sleep; +using Content.Shared.Damage.Components; +using Content.Shared.Damage.Systems; +using Content.Shared.Shadowkin; +using Content.Shared.Rejuvenate; +using Content.Shared.Alert; +using Content.Shared.Rounding; +using Content.Shared.Actions; +using Robust.Shared.Prototypes; +using Content.Server.Abilities.Psionics; + +namespace Content.Server.Shadowkin; + +public sealed class ShadowkinSystem : EntitySystem +{ + [Dependency] private readonly StaminaSystem _stamina = default!; + [Dependency] private readonly PsionicAbilitiesSystem _psionicAbilitiesSystem = default!; + [Dependency] private readonly AlertsSystem _alerts = default!; + [Dependency] private readonly SharedActionsSystem _actionsSystem = default!; + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + + public const string ShadowkinSleepActionId = "ShadowkinActionSleep"; + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnInit); + SubscribeLocalEvent(OnExamined); + SubscribeLocalEvent(OnMindbreak); + SubscribeLocalEvent(OnAttemptPowerUse); + SubscribeLocalEvent(OnManaUpdate); + SubscribeLocalEvent(OnRejuvenate); + SubscribeLocalEvent(OnEyeColorChange); + } + + private void OnInit(EntityUid uid, ShadowkinComponent component, ComponentStartup args) + { + if (component.BlackeyeSpawn) + ApplyBlackEye(uid); + + _actionsSystem.AddAction(uid, ref component.ShadowkinSleepAction, ShadowkinSleepActionId, uid); + + UpdateShadowkinAlert(uid, component); + } + + private void OnEyeColorChange(EntityUid uid, ShadowkinComponent component, EyeColorInitEvent args) + { + if (!TryComp(uid, out var humanoid) + || !component.BlackeyeSpawn + || humanoid.EyeColor == component.OldEyeColor) + return; + + component.OldEyeColor = humanoid.EyeColor; + humanoid.EyeColor = component.BlackEyeColor; + Dirty(humanoid); + } + + private void OnExamined(EntityUid uid, ShadowkinComponent component, ExaminedEvent args) + { + if (!args.IsInDetailsRange + || !TryComp(uid, out var magic) + || HasComp(uid)) + return; + + var severity = "shadowkin-power-" + ContentHelpers.RoundToLevels(magic.Mana, magic.MaxMana, 6); + var powerType = Loc.GetString(severity); + + if (args.Examined == args.Examiner) + args.PushMarkup(Loc.GetString("shadowkin-power-examined-self", + ("power", Math.Floor(magic.Mana)), + ("powerMax", Math.Floor(magic.MaxMana)), + ("powerType", powerType) + )); + else + args.PushMarkup(Loc.GetString("shadowkin-power-examined-other", + ("target", uid), + ("powerType", powerType) + )); + } + + /// + /// Update the Shadowkin Alert, if Blackeye will remove the Alert, if not will update to its current power status. + /// + public void UpdateShadowkinAlert(EntityUid uid, ShadowkinComponent component) + { + if (TryComp(uid, out var magic)) + { + var severity = (short) ContentHelpers.RoundToLevels(magic.Mana, magic.MaxMana, 8); + _alerts.ShowAlert(uid, AlertType.ShadowkinPower, severity); + } + else + _alerts.ClearAlert(uid, AlertType.ShadowkinPower); + } + + private void OnAttemptPowerUse(EntityUid uid, ShadowkinComponent component, OnAttemptPowerUseEvent args) + { + if (HasComp(uid)) + args.Cancel(); + } + + private void OnManaUpdate(EntityUid uid, ShadowkinComponent component, ref OnManaUpdateEvent args) + { + if (!TryComp(uid, out var magic)) + return; + + if (component.SleepManaRegen + && TryComp(uid, out var sleep)) + magic.ManaGainMultiplier = component.SleepManaRegenMultiplier; + else + magic.ManaGainMultiplier = 1; + + if (magic.Mana <= component.BlackEyeMana) + ApplyBlackEye(uid); + + Dirty(magic); // Update Shadowkin Overlay. + UpdateShadowkinAlert(uid, component); + } + + /// + /// Blackeye the Shadowkin, its just a function to mindbreak the shadowkin but making sure "Removable" is checked true during it. + /// + /// + public void ApplyBlackEye(EntityUid uid) + { + if (!TryComp(uid, out var magic)) + return; + + magic.Removable = true; + _psionicAbilitiesSystem.MindBreak(uid); + } + + private void OnMindbreak(EntityUid uid, ShadowkinComponent component, ref OnMindbreakEvent args) + { + if (TryComp(uid, out var mindbreak)) + mindbreak.MindbrokenExaminationText = "examine-mindbroken-shadowkin-message"; + + if (TryComp(uid, out var humanoid)) + { + component.OldEyeColor = humanoid.EyeColor; + humanoid.EyeColor = component.BlackEyeColor; + Dirty(humanoid); + } + + if (component.BlackeyeSpawn) + return; + + if (TryComp(uid, out var stamina)) + _stamina.TakeStaminaDamage(uid, stamina.CritThreshold, stamina, uid); + } + + private void OnRejuvenate(EntityUid uid, ShadowkinComponent component, RejuvenateEvent args) + { + if (component.BlackeyeSpawn + || !HasComp(uid)) + return; + + RemComp(uid); + + if (TryComp(uid, out var humanoid)) + { + humanoid.EyeColor = component.OldEyeColor; + Dirty(humanoid); + } + + EnsureComp(uid, out var magic); + magic.Mana = 250; + magic.MaxMana = 250; + magic.ManaGain = 0.25f; + magic.BypassManaCheck = true; + magic.Removable = false; + magic.MindbreakingFeedback = "shadowkin-blackeye"; + + if (_prototypeManager.TryIndex("ShadowkinPowers", out var shadowkinPowers)) + _psionicAbilitiesSystem.InitializePsionicPower(uid, shadowkinPowers); + + UpdateShadowkinAlert(uid, component); + } +} diff --git a/Content.Server/Shadowkin/ShowEtherealSystem.cs b/Content.Server/Shadowkin/ShowEtherealSystem.cs new file mode 100644 index 00000000000..151c379afbb --- /dev/null +++ b/Content.Server/Shadowkin/ShowEtherealSystem.cs @@ -0,0 +1,88 @@ +using Content.Shared.Shadowkin; +using Content.Shared.Eye; +using Robust.Server.GameObjects; +using Content.Shared.Inventory.Events; +using Content.Shared.Interaction.Events; +using Robust.Shared.Timing; +using Content.Shared.Popups; +using Content.Shared.Clothing.Components; + +namespace Content.Server.Shadowkin; +public sealed class ShowEtherealSystem : EntitySystem +{ + [Dependency] private readonly EyeSystem _eye = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] private readonly IGameTiming _gameTiming = default!; + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnInit); + SubscribeLocalEvent(OnShutdown); + SubscribeLocalEvent(OnEquipped); + SubscribeLocalEvent(OnUnequipped); + SubscribeLocalEvent(OnInteractionAttempt); + SubscribeLocalEvent(OnAttackAttempt); + } + + private void OnInit(EntityUid uid, ShowEtherealComponent component, MapInitEvent args) + { + Toggle(uid, true); + } + + public void OnShutdown(EntityUid uid, ShowEtherealComponent component, ComponentShutdown args) + { + Toggle(uid, false); + } + + private void OnEquipped(EntityUid uid, ShowEtherealComponent component, GotEquippedEvent args) + { + if (!TryComp(uid, out var clothing) + || !clothing.Slots.HasFlag(args.SlotFlags)) + return; + + EnsureComp(args.Equipee); + } + + private void OnUnequipped(EntityUid uid, ShowEtherealComponent component, GotUnequippedEvent args) + { + RemComp(args.Equipee); + } + + private void Toggle(EntityUid uid, bool toggle) + { + if (!TryComp(uid, out var eye)) + return; + + if (toggle) + { + _eye.SetVisibilityMask(uid, eye.VisibilityMask | (int) (VisibilityFlags.Ethereal), eye); + return; + } + else if (HasComp(uid)) + return; + + _eye.SetVisibilityMask(uid, (int) VisibilityFlags.Normal, eye); + } + + private void OnInteractionAttempt(EntityUid uid, ShowEtherealComponent component, InteractionAttemptEvent args) + { + if (HasComp(uid) + || !HasComp(args.Target)) + return; + + args.Cancel(); + if (_gameTiming.InPrediction) + return; + + _popup.PopupEntity(Loc.GetString("ethereal-pickup-fail"), args.Target.Value, uid); + } + + private void OnAttackAttempt(EntityUid uid, ShowEtherealComponent component, AttackAttemptEvent args) + { + if (HasComp(uid) + || !HasComp(args.Target)) + return; + + args.Cancel(); + } +} \ No newline at end of file diff --git a/Content.Server/ShortConstruction/ShortConstructionSystem.cs b/Content.Server/ShortConstruction/ShortConstructionSystem.cs new file mode 100644 index 00000000000..b274b6e9bfc --- /dev/null +++ b/Content.Server/ShortConstruction/ShortConstructionSystem.cs @@ -0,0 +1,24 @@ +using Content.Shared.RadialSelector; +using Content.Shared.ShortConstruction; +using Content.Shared.UserInterface; +using Robust.Server.GameObjects; + +namespace Content.Server.ShortConstruction; + +public sealed class ShortConstructionSystem : EntitySystem +{ + [Dependency] private readonly UserInterfaceSystem _ui = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(BeforeUiOpen); + } + + private void BeforeUiOpen(Entity ent, ref BeforeActivatableUIOpenEvent args) + { + var state = new RadialSelectorState(ent.Comp.Entries); + _ui.SetUiState(ent.Owner, RadialSelectorUiKey.Key, state); + } +} diff --git a/Content.Server/Shuttles/Components/DockingSignalControlComponent.cs b/Content.Server/Shuttles/Components/DockingSignalControlComponent.cs new file mode 100644 index 00000000000..43612650802 --- /dev/null +++ b/Content.Server/Shuttles/Components/DockingSignalControlComponent.cs @@ -0,0 +1,14 @@ +using Content.Shared.DeviceLinking; +using Robust.Shared.Prototypes; + +namespace Content.Server.Shuttles.Components; + +[RegisterComponent] +public sealed partial class DockingSignalControlComponent : Component +{ + /// + /// Output port that is high while docked. + /// + [DataField] + public ProtoId DockStatusSignalPort = "DockStatus"; +} diff --git a/Content.Server/Shuttles/Components/FTLComponent.cs b/Content.Server/Shuttles/Components/FTLComponent.cs index ab40875e29a..c9b84064234 100644 --- a/Content.Server/Shuttles/Components/FTLComponent.cs +++ b/Content.Server/Shuttles/Components/FTLComponent.cs @@ -14,6 +14,8 @@ namespace Content.Server.Shuttles.Components; [RegisterComponent] public sealed partial class FTLComponent : Component { + // TODO Full game save / add datafields + [ViewVariables] public FTLState State = FTLState.Available; @@ -23,6 +25,7 @@ public sealed partial class FTLComponent : Component [ViewVariables(VVAccess.ReadWrite)] public float StartupTime = 0f; + // Because of sphagetti, actual travel time is Math.Max(TravelTime, DefaultArrivalTime) [ViewVariables(VVAccess.ReadWrite)] public float TravelTime = 0f; diff --git a/Content.Server/Shuttles/Components/StationEmergencyShuttleComponent.cs b/Content.Server/Shuttles/Components/StationEmergencyShuttleComponent.cs index bdfdcb273aa..58d23ee4326 100644 --- a/Content.Server/Shuttles/Components/StationEmergencyShuttleComponent.cs +++ b/Content.Server/Shuttles/Components/StationEmergencyShuttleComponent.cs @@ -13,7 +13,7 @@ public sealed partial class StationEmergencyShuttleComponent : Component /// /// The emergency shuttle assigned to this station. /// - [ViewVariables, Access(typeof(ShuttleSystem), typeof(EmergencyShuttleSystem), Friend = AccessPermissions.ReadWrite)] + [DataField, Access(typeof(ShuttleSystem), typeof(EmergencyShuttleSystem), Friend = AccessPermissions.ReadWrite)] public EntityUid? EmergencyShuttle; /// diff --git a/Content.Server/Shuttles/Components/ThrusterComponent.cs b/Content.Server/Shuttles/Components/ThrusterComponent.cs index 3bba9b5a7f0..f64d9bdcbf0 100644 --- a/Content.Server/Shuttles/Components/ThrusterComponent.cs +++ b/Content.Server/Shuttles/Components/ThrusterComponent.cs @@ -1,8 +1,10 @@ using System.Numerics; using Content.Server.Shuttles.Systems; +using Content.Shared.Construction.Prototypes; using Content.Shared.Damage; using Robust.Shared.GameStates; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; namespace Content.Server.Shuttles.Components { @@ -13,7 +15,7 @@ public sealed partial class ThrusterComponent : Component /// /// Whether the thruster has been force to be enabled / disabled (e.g. VV, interaction, etc.) /// - [DataField, ViewVariables(VVAccess.ReadWrite)] + [DataField] public bool Enabled { get; set; } = true; /// @@ -22,9 +24,12 @@ public sealed partial class ThrusterComponent : Component public bool IsOn; // Need to serialize this because RefreshParts isn't called on Init and this will break post-mapinit maps! - [ViewVariables(VVAccess.ReadWrite), DataField("thrust")] + [DataField] public float Thrust = 100f; + [DataField] + public float BaseThrust = 100f; + [DataField("thrusterType")] public ThrusterType Type = ThrusterType.Linear; @@ -37,24 +42,31 @@ public sealed partial class ThrusterComponent : Component }; /// - /// How much damage is done per second to anything colliding with our thrust. + /// How much damage is done per second to anything colliding with our thrust. /// - [DataField("damage")] public DamageSpecifier? Damage = new(); + [DataField] + public DamageSpecifier? Damage = new(); - [DataField("requireSpace")] + [DataField] public bool RequireSpace = true; // Used for burns public List Colliding = new(); - public bool Firing = false; + public bool Firing; /// - /// Next time we tick damage for anyone colliding. + /// Next time we tick damage for anyone colliding. /// - [ViewVariables(VVAccess.ReadWrite), DataField("nextFire", customTypeSerializer:typeof(TimeOffsetSerializer))] + [DataField(customTypeSerializer: typeof(TimeOffsetSerializer))] public TimeSpan NextFire; + + [DataField(customTypeSerializer: typeof(PrototypeIdSerializer))] + public string MachinePartThrust = "Capacitor"; + + [DataField] + public float PartRatingThrustMultiplier = 1.5f; } public enum ThrusterType diff --git a/Content.Server/Shuttles/Events/FTLStartedEvent.cs b/Content.Server/Shuttles/Events/FTLStartedEvent.cs index 965da7f0c5e..eafbeddd5c4 100644 --- a/Content.Server/Shuttles/Events/FTLStartedEvent.cs +++ b/Content.Server/Shuttles/Events/FTLStartedEvent.cs @@ -1,3 +1,4 @@ +using System.Numerics; using Robust.Shared.Map; namespace Content.Server.Shuttles.Events; @@ -6,4 +7,4 @@ namespace Content.Server.Shuttles.Events; /// Raised when a shuttle has moved to FTL space. /// [ByRefEvent] -public readonly record struct FTLStartedEvent(EntityUid Entity, EntityCoordinates TargetCoordinates, EntityUid? FromMapUid, Matrix3 FTLFrom, Angle FromRotation); +public readonly record struct FTLStartedEvent(EntityUid Entity, EntityCoordinates TargetCoordinates, EntityUid? FromMapUid, Matrix3x2 FTLFrom, Angle FromRotation); diff --git a/Content.Server/Shuttles/Systems/ArrivalsSystem.cs b/Content.Server/Shuttles/Systems/ArrivalsSystem.cs index ae742cf1f9e..62fe3e13ffc 100644 --- a/Content.Server/Shuttles/Systems/ArrivalsSystem.cs +++ b/Content.Server/Shuttles/Systems/ArrivalsSystem.cs @@ -1,15 +1,17 @@ using System.Linq; +using System.Numerics; using Content.Server.Administration; +using Content.Server.DeviceNetwork.Components; +using Content.Server.DeviceNetwork.Systems; using Content.Server.GameTicking; using Content.Server.GameTicking.Events; using Content.Server.Parallax; -using Content.Server.DeviceNetwork.Components; -using Content.Server.DeviceNetwork.Systems; using Content.Server.Screens.Components; using Content.Server.Shuttles.Components; using Content.Server.Shuttles.Events; using Content.Server.Spawners.Components; using Content.Server.Station.Components; +using Content.Server.Station.Events; using Content.Server.Station.Systems; using Content.Shared.Administration; using Content.Shared.CCVar; @@ -17,6 +19,7 @@ using Content.Shared.Mobs.Components; using Content.Shared.Movement.Components; using Content.Shared.Parallax.Biomes; +using Content.Shared.Roles; using Content.Shared.Salvage; using Content.Shared.Shuttles.Components; using Content.Shared.Tiles; @@ -77,7 +80,7 @@ public override void Initialize() { base.Initialize(); - SubscribeLocalEvent(OnArrivalsStartup); + SubscribeLocalEvent(OnStationPostInit); SubscribeLocalEvent(OnShuttleStartup); SubscribeLocalEvent(OnShuttleTag); @@ -187,7 +190,7 @@ private void OnArrivalsFTL(EntityUid shuttleUid, ArrivalsShuttleComponent compon if (TryComp(shuttleUid, out var netComp)) { TryComp(shuttleUid, out var ftlComp); - var ftlTime = TimeSpan.FromSeconds(ftlComp?.TravelTime ?? ShuttleSystem.DefaultTravelTime); + var ftlTime = TimeSpan.FromSeconds(ftlComp?.TravelTime ?? _shuttles.DefaultTravelTime); var payload = new NetworkPayload { @@ -253,7 +256,7 @@ private void OnArrivalsFTL(EntityUid shuttleUid, ArrivalsShuttleComponent compon private void OnArrivalsDocked(EntityUid uid, ArrivalsShuttleComponent component, ref FTLCompletedEvent args) { - TimeSpan dockTime = component.NextTransfer - _timing.CurTime + TimeSpan.FromSeconds(ShuttleSystem.DefaultStartupTime); + var dockTime = component.NextTransfer - _timing.CurTime + TimeSpan.FromSeconds(_shuttles.DefaultStartupTime); if (TryComp(uid, out var netComp)) { @@ -276,7 +279,7 @@ private void DumpChildren(EntityUid uid, ref FTLStartedEvent args) foreach (var (ent, xform) in toDump) { var rotation = xform.LocalRotation; - _transform.SetCoordinates(ent, new EntityCoordinates(args.FromMapUid!.Value, args.FTLFrom.Transform(xform.LocalPosition))); + _transform.SetCoordinates(ent, new EntityCoordinates(args.FromMapUid!.Value, Vector2.Transform(xform.LocalPosition, args.FTLFrom))); _transform.SetWorldRotation(ent, args.FromRotation + rotation); } } @@ -310,6 +313,12 @@ public void HandlePlayerSpawning(PlayerSpawningEvent ev) if (!Enabled || _ticker.RunLevel != GameRunLevel.InRound) return; + if (ev.Job is not null + && ev.Job.Prototype is not null + && _protoManager.Index(ev.Job.Prototype.Value.Id).AlwaysUseSpawner) + return; + + if (!HasComp(ev.Station)) return; @@ -419,13 +428,13 @@ public override void Update(float frameTime) if (comp.NextTransfer > curTime || !TryComp(comp.Station, out var data)) continue; - var tripTime = ShuttleSystem.DefaultTravelTime + ShuttleSystem.DefaultStartupTime; + var tripTime = _shuttles.DefaultTravelTime + _shuttles.DefaultStartupTime; // Go back to arrivals source if (xform.MapUid != arrivalsXform.MapUid) { if (arrivals.IsValid()) - _shuttles.FTLToDock(uid, shuttle, arrivals); + _shuttles.FTLToDock(uid, shuttle, arrivals, _cfgManager.GetCVar(CCVars.ArrivalsStartupTime), _cfgManager.GetCVar(CCVars.ArrivalsHyperspaceTime), "DockArrivals"); comp.NextArrivalsTime = _timing.CurTime + TimeSpan.FromSeconds(tripTime); } @@ -435,7 +444,7 @@ public override void Update(float frameTime) var targetGrid = _station.GetLargestGrid(data); if (targetGrid != null) - _shuttles.FTLToDock(uid, shuttle, targetGrid.Value); + _shuttles.FTLToDock(uid, shuttle, targetGrid.Value, _cfgManager.GetCVar(CCVars.ArrivalsStartupTime), _cfgManager.GetCVar(CCVars.ArrivalsHyperspaceTime), "DockArrivals"); // The ArrivalsCooldown includes the trip there, so we only need to add the time taken for // the trip back. @@ -530,7 +539,7 @@ private void SetArrivals(bool obj) } } - private void OnArrivalsStartup(EntityUid uid, StationArrivalsComponent component, ComponentStartup args) + private void OnStationPostInit(EntityUid uid, StationArrivalsComponent component, ref StationPostInitEvent args) { if (!Enabled) return; diff --git a/Content.Server/Shuttles/Systems/DockingSignalControlSystem.cs b/Content.Server/Shuttles/Systems/DockingSignalControlSystem.cs new file mode 100644 index 00000000000..34cade7f1c1 --- /dev/null +++ b/Content.Server/Shuttles/Systems/DockingSignalControlSystem.cs @@ -0,0 +1,28 @@ +using Content.Server.DeviceLinking.Systems; +using Content.Server.Shuttles.Components; +using Content.Server.Shuttles.Events; + +namespace Content.Server.Shuttles.Systems; + +public sealed class DockingSignalControlSystem : EntitySystem +{ + [Dependency] private readonly DeviceLinkSystem _deviceLinkSystem = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnDocked); + SubscribeLocalEvent(OnUndocked); + } + + private void OnDocked(Entity ent, ref DockEvent args) + { + _deviceLinkSystem.SendSignal(ent, ent.Comp.DockStatusSignalPort, signal: true); + } + + private void OnUndocked(Entity ent, ref UndockEvent args) + { + _deviceLinkSystem.SendSignal(ent, ent.Comp.DockStatusSignalPort, signal: false); + } +} diff --git a/Content.Server/Shuttles/Systems/DockingSystem.Shuttle.cs b/Content.Server/Shuttles/Systems/DockingSystem.Shuttle.cs index e46a7c715ff..1a95ef9cb22 100644 --- a/Content.Server/Shuttles/Systems/DockingSystem.Shuttle.cs +++ b/Content.Server/Shuttles/Systems/DockingSystem.Shuttle.cs @@ -46,13 +46,13 @@ private bool CanDock( FixturesComponent shuttleFixtures, MapGridComponent grid, bool isMap, - out Matrix3 matty, + out Matrix3x2 matty, out Box2 shuttleDockedAABB, out Angle gridRotation) { shuttleDockedAABB = Box2.UnitCentered; gridRotation = Angle.Zero; - matty = Matrix3.Identity; + matty = Matrix3x2.Identity; if (shuttleDock.Docked || gridDock.Docked || @@ -71,9 +71,9 @@ private bool CanDock( var gridDockAngle = gridDockXform.LocalRotation.Opposite(); var offsetAngle = gridDockAngle - shuttleDockAngle; - var stationDockMatrix = Matrix3.CreateInverseTransform(stationDockPos, shuttleDockAngle); - var gridXformMatrix = Matrix3.CreateTransform(gridDockXform.LocalPosition, gridDockAngle); - Matrix3.Multiply(in stationDockMatrix, in gridXformMatrix, out matty); + var stationDockMatrix = Matrix3Helpers.CreateInverseTransform(stationDockPos, shuttleDockAngle); + var gridXformMatrix = Matrix3Helpers.CreateTransform(gridDockXform.LocalPosition, gridDockAngle); + matty = Matrix3x2.Multiply(stationDockMatrix, gridXformMatrix); if (!ValidSpawn(grid, matty, offsetAngle, shuttleFixtures, isMap)) return false; @@ -193,7 +193,7 @@ private List GetDockingConfigs( } // Can't just use the AABB as we want to get bounds as tight as possible. - var gridPosition = new EntityCoordinates(targetGrid, matty.Transform(Vector2.Zero)); + var gridPosition = new EntityCoordinates(targetGrid, Vector2.Transform(Vector2.Zero, matty)); var spawnPosition = new EntityCoordinates(targetGridXform.MapUid!.Value, gridPosition.ToMapPos(EntityManager, _transform)); // TODO: use tight bounds @@ -303,9 +303,9 @@ private List GetDockingConfigs( /// /// Checks whether the shuttle can warp to the specified position. /// - private bool ValidSpawn(MapGridComponent grid, Matrix3 matty, Angle angle, FixturesComponent shuttleFixturesComp, bool isMap) + private bool ValidSpawn(MapGridComponent grid, Matrix3x2 matty, Angle angle, FixturesComponent shuttleFixturesComp, bool isMap) { - var transform = new Transform(matty.Transform(Vector2.Zero), angle); + var transform = new Transform(Vector2.Transform(Vector2.Zero, matty), angle); // Because some docking bounds are tight af need to check each chunk individually foreach (var fix in shuttleFixturesComp.Fixtures.Values) diff --git a/Content.Server/Shuttles/Systems/EmergencyShuttleSystem.Console.cs b/Content.Server/Shuttles/Systems/EmergencyShuttleSystem.Console.cs index 3f6eafb454c..6c040e7a0ec 100644 --- a/Content.Server/Shuttles/Systems/EmergencyShuttleSystem.Console.cs +++ b/Content.Server/Shuttles/Systems/EmergencyShuttleSystem.Console.cs @@ -1,10 +1,8 @@ using System.Threading; -using Content.Server.DeviceNetwork; using Content.Server.DeviceNetwork.Components; using Content.Server.Screens.Components; using Content.Server.Shuttles.Components; using Content.Server.Shuttles.Events; -using Content.Shared.UserInterface; using Content.Shared.Access; using Content.Shared.CCVar; using Content.Shared.Database; @@ -13,12 +11,15 @@ using Content.Shared.Shuttles.BUIStates; using Content.Shared.Shuttles.Events; using Content.Shared.Shuttles.Systems; +using Content.Shared.UserInterface; using Robust.Shared.Map; using Robust.Shared.Player; using Timer = Robust.Shared.Timing.Timer; namespace Content.Server.Shuttles.Systems; +// TODO full game saves +// Move state data into the emergency shuttle component public sealed partial class EmergencyShuttleSystem { /* @@ -55,7 +56,7 @@ public sealed partial class EmergencyShuttleSystem /// /// How long it will take for the emergency shuttle to arrive at CentComm. /// - public float TransitTime { get; private set; } + public float TransitTime; /// /// @@ -129,9 +130,17 @@ private void OnEmergencyStartup(EntityUid uid, EmergencyShuttleConsoleComponent private void UpdateEmergencyConsole(float frameTime) { // Add some buffer time so eshuttle always first. - var minTime = -(TransitTime - (ShuttleSystem.DefaultStartupTime + ShuttleSystem.DefaultTravelTime + 1f)); + var minTime = -(TransitTime - (_shuttle.DefaultStartupTime + _shuttle.DefaultTravelTime + 1f)); // TODO: I know this is shit but I already just cleaned up a billion things. + + // This is very cursed spaghetti code. I don't even know what the fuck this is doing or why it exists. + // But I think it needs to be less than or equal to zero or the shuttle might never leave??? + // TODO Shuttle AAAAAAAAAAAAAAAAAAAAAAAAA + // Clean this up, just have a single timer with some state system. + // I.e., dont infer state from the current interval that the accumulator is in??? + minTime = Math.Min(0, minTime); // ???? + if (_consoleAccumulator < minTime) { return; @@ -147,7 +156,7 @@ private void UpdateEmergencyConsole(float frameTime) } // Imminent departure - if (!_launchedShuttles && _consoleAccumulator <= ShuttleSystem.DefaultStartupTime) + if (!_launchedShuttles && _consoleAccumulator <= _shuttle.DefaultStartupTime) { _launchedShuttles = true; @@ -241,19 +250,18 @@ private void UpdateEmergencyConsole(float frameTime) private void OnEmergencyRepealAll(EntityUid uid, EmergencyShuttleConsoleComponent component, EmergencyShuttleRepealAllMessage args) { - var player = args.Session.AttachedEntity; - if (player == null) return; + var player = args.Actor; - if (!_reader.FindAccessTags(player.Value).Contains(EmergencyRepealAllAccess)) + if (!_reader.FindAccessTags(player).Contains(EmergencyRepealAllAccess)) { - _popup.PopupCursor(Loc.GetString("emergency-shuttle-console-denied"), player.Value, PopupType.Medium); + _popup.PopupCursor(Loc.GetString("emergency-shuttle-console-denied"), player, PopupType.Medium); return; } if (component.AuthorizedEntities.Count == 0) return; - _logger.Add(LogType.EmergencyShuttle, LogImpact.High, $"Emergency shuttle early launch REPEAL ALL by {args.Session:user}"); + _logger.Add(LogType.EmergencyShuttle, LogImpact.High, $"Emergency shuttle early launch REPEAL ALL by {args.Actor:user}"); _announcer.SendAnnouncement( _announcer.GetAnnouncementId("ShuttleAuthRevoked"), Filter.Broadcast(), @@ -267,13 +275,11 @@ private void OnEmergencyRepealAll(EntityUid uid, EmergencyShuttleConsoleComponen private void OnEmergencyRepeal(EntityUid uid, EmergencyShuttleConsoleComponent component, EmergencyShuttleRepealMessage args) { - var player = args.Session.AttachedEntity; - if (player == null) - return; + var player = args.Actor; - if (!_idSystem.TryFindIdCard(player.Value, out var idCard) || !_reader.IsAllowed(idCard, uid)) + if (!_idSystem.TryFindIdCard(player, out var idCard) || !_reader.IsAllowed(idCard, uid)) { - _popup.PopupCursor(Loc.GetString("emergency-shuttle-console-denied"), player.Value, PopupType.Medium); + _popup.PopupCursor(Loc.GetString("emergency-shuttle-console-denied"), player, PopupType.Medium); return; } @@ -281,7 +287,7 @@ private void OnEmergencyRepeal(EntityUid uid, EmergencyShuttleConsoleComponent c if (!component.AuthorizedEntities.Remove(MetaData(idCard).EntityName)) return; - _logger.Add(LogType.EmergencyShuttle, LogImpact.High, $"Emergency shuttle early launch REPEAL by {args.Session:user}"); + _logger.Add(LogType.EmergencyShuttle, LogImpact.High, $"Emergency shuttle early launch REPEAL by {args.Actor:user}"); var remaining = component.AuthorizationsRequired - component.AuthorizedEntities.Count; _announcer.SendAnnouncement( _announcer.GetAnnouncementId("ShuttleAuthRevoked"), @@ -296,13 +302,11 @@ private void OnEmergencyRepeal(EntityUid uid, EmergencyShuttleConsoleComponent c private void OnEmergencyAuthorize(EntityUid uid, EmergencyShuttleConsoleComponent component, EmergencyShuttleAuthorizeMessage args) { - var player = args.Session.AttachedEntity; - if (player == null) - return; + var player = args.Actor; - if (!_idSystem.TryFindIdCard(player.Value, out var idCard) || !_reader.IsAllowed(idCard, uid)) + if (!_idSystem.TryFindIdCard(player, out var idCard) || !_reader.IsAllowed(idCard, uid)) { - _popup.PopupCursor(Loc.GetString("emergency-shuttle-console-denied"), args.Session, PopupType.Medium); + _popup.PopupCursor(Loc.GetString("emergency-shuttle-console-denied"), args.Actor, PopupType.Medium); return; } @@ -310,7 +314,7 @@ private void OnEmergencyAuthorize(EntityUid uid, EmergencyShuttleConsoleComponen if (!component.AuthorizedEntities.Add(MetaData(idCard).EntityName)) return; - _logger.Add(LogType.EmergencyShuttle, LogImpact.High, $"Emergency shuttle early launch AUTH by {args.Session:user}"); + _logger.Add(LogType.EmergencyShuttle, LogImpact.High, $"Emergency shuttle early launch AUTH by {args.Actor:user}"); var remaining = component.AuthorizationsRequired - component.AuthorizedEntities.Count; if (remaining > 0) @@ -362,9 +366,10 @@ private void UpdateConsoleState(EntityUid uid, EmergencyShuttleConsoleComponent auths.Add(auth); } - if (_uiSystem.TryGetUi(uid, EmergencyConsoleUiKey.Key, out var bui)) + if (_uiSystem.HasUi(uid, EmergencyConsoleUiKey.Key)) _uiSystem.SetUiState( - bui, + uid, + EmergencyConsoleUiKey.Key, new EmergencyConsoleBoundUserInterfaceState() { EarlyLaunchTime = EarlyLaunchAuthorized ? _timing.CurTime + TimeSpan.FromSeconds(_consoleAccumulator) : null, diff --git a/Content.Server/Shuttles/Systems/EmergencyShuttleSystem.cs b/Content.Server/Shuttles/Systems/EmergencyShuttleSystem.cs index 2df0bc148cc..90be263ae2e 100644 --- a/Content.Server/Shuttles/Systems/EmergencyShuttleSystem.cs +++ b/Content.Server/Shuttles/Systems/EmergencyShuttleSystem.cs @@ -15,6 +15,7 @@ using Content.Server.Shuttles.Components; using Content.Server.Shuttles.Events; using Content.Server.Station.Components; +using Content.Server.Station.Events; using Content.Server.Station.Systems; using Content.Shared.Access.Systems; using Content.Shared.CCVar; @@ -84,9 +85,9 @@ public override void Initialize() SubscribeLocalEvent(OnRoundStart); SubscribeLocalEvent(OnRoundCleanup); - SubscribeLocalEvent(OnStationStartup); + SubscribeLocalEvent(OnStationStartup); SubscribeLocalEvent(OnCentcommShutdown); - SubscribeLocalEvent(OnCentcommInit); + SubscribeLocalEvent(OnStationInit); SubscribeLocalEvent(OnEmergencyFTL); SubscribeLocalEvent(OnEmergencyFTLComplete); @@ -201,10 +202,9 @@ private void OnShuttleRequestPosition(EmergencyShuttleRequestPositionMessage msg /// private void OnEmergencyFTL(EntityUid uid, EmergencyShuttleComponent component, ref FTLStartedEvent args) { - TimeSpan ftlTime = TimeSpan.FromSeconds + var ftlTime = TimeSpan.FromSeconds ( - TryComp(uid, out var ftlComp) ? - ftlComp.TravelTime : ShuttleSystem.DefaultTravelTime + TryComp(uid, out var ftlComp) ? ftlComp.TravelTime : _shuttle.DefaultTravelTime ); if (TryComp(uid, out var netComp)) @@ -260,10 +260,13 @@ private void OnEmergencyFTLComplete(EntityUid uid, EmergencyShuttleComponent com /// public void CallEmergencyShuttle(EntityUid stationUid, StationEmergencyShuttleComponent? stationShuttle = null) { - if (!Resolve(stationUid, ref stationShuttle) || - !TryComp(stationShuttle.EmergencyShuttle, out var xform) || + if (!Resolve(stationUid, ref stationShuttle)) + return; + + if (!TryComp(stationShuttle.EmergencyShuttle, out var xform) || !TryComp(stationShuttle.EmergencyShuttle, out var shuttle)) { + Log.Error($"Attempted to call an emergency shuttle for an uninitialized station? Station: {ToPrettyString(stationUid)}. Shuttle: {ToPrettyString(stationShuttle.EmergencyShuttle)}"); return; } @@ -329,8 +332,10 @@ public void CallEmergencyShuttle(EntityUid stationUid, StationEmergencyShuttleCo } } - private void OnCentcommInit(EntityUid uid, StationCentcommComponent component, ComponentInit args) + private void OnStationInit(EntityUid uid, StationCentcommComponent component, MapInitEvent args) { + // This is handled on map-init, so that centcomm has finished initializing by the time the StationPostInitEvent + // gets raised if (!_emergencyShuttleEnabled) return; @@ -341,12 +346,12 @@ private void OnCentcommInit(EntityUid uid, StationCentcommComponent component, C return; } - AddCentcomm(component); + AddCentcomm(uid, component); } - private void OnStationStartup(EntityUid uid, StationEmergencyShuttleComponent component, ComponentStartup args) + private void OnStationStartup(Entity ent, ref StationPostInitEvent args) { - AddEmergencyShuttle(uid, component); + AddEmergencyShuttle((ent, ent)); } /// @@ -383,19 +388,22 @@ private void SetupEmergencyShuttle() var centcommQuery = AllEntityQuery(); - while (centcommQuery.MoveNext(out var centcomm)) + while (centcommQuery.MoveNext(out var uid, out var centcomm)) { - AddCentcomm(centcomm); + AddCentcomm(uid, centcomm); } var query = AllEntityQuery(); while (query.MoveNext(out var uid, out var comp)) - AddEmergencyShuttle(uid, comp); + { + AddEmergencyShuttle((uid, comp)); + } } - private void AddCentcomm(StationCentcommComponent component) + private void AddCentcomm(EntityUid station, StationCentcommComponent component) { + DebugTools.Assert(LifeStage(station)>= EntityLifeStage.MapInitialized); if (component.MapEntity != null || component.Entity != null) { Log.Warning("Attempted to re-add an existing centcomm map."); @@ -411,12 +419,13 @@ private void AddCentcomm(StationCentcommComponent component) if (!Exists(otherComp.MapEntity) || !Exists(otherComp.Entity)) { - Log.Error($"Disconvered invalid centcomm component?"); + Log.Error($"Discovered invalid centcomm component?"); ClearCentcomm(otherComp); continue; } component.MapEntity = otherComp.MapEntity; + component.Entity = otherComp.Entity; component.ShuttleIndex = otherComp.ShuttleIndex; return; } @@ -460,6 +469,7 @@ private void AddCentcomm(StationCentcommComponent component) component.MapEntity = map; component.Entity = grid; _shuttle.TryAddFTLDestination(mapId, false, out _); + Log.Info($"Created centcomm grid {ToPrettyString(grid)} on map {ToPrettyString(map)} for station {ToPrettyString(station)}"); } public HashSet GetCentcommMaps() @@ -476,49 +486,67 @@ public HashSet GetCentcommMaps() return maps; } - private void AddEmergencyShuttle(EntityUid uid, StationEmergencyShuttleComponent component) + private void AddEmergencyShuttle(Entity ent) { - if (!_emergencyShuttleEnabled - || component.EmergencyShuttle != null || - !TryComp(uid, out var centcomm) - || !TryComp(centcomm.MapEntity, out MapComponent? map)) + if (!Resolve(ent.Owner, ref ent.Comp1, ref ent.Comp2)) + return; + + if (!_emergencyShuttleEnabled) + return; + + if (ent.Comp1.EmergencyShuttle != null ) + { + if (Exists(ent.Comp1.EmergencyShuttle)) + { + Log.Error($"Attempted to add an emergency shuttle to {ToPrettyString(ent)}, despite a shuttle already existing?"); + return; + } + + Log.Error($"Encountered deleted emergency shuttle during initialization of {ToPrettyString(ent)}"); + ent.Comp1.EmergencyShuttle = null; + } + + if (!TryComp(ent.Comp2.MapEntity, out MapComponent? map)) { + Log.Error($"Failed to add emergency shuttle - centcomm has not been initialized? {ToPrettyString(ent)}"); return; } // Load escape shuttle - var shuttlePath = component.EmergencyShuttlePath; + var shuttlePath = ent.Comp1.EmergencyShuttlePath; var shuttle = _map.LoadGrid(map.MapId, shuttlePath.ToString(), new MapLoadOptions() { // Should be far enough... right? I'm too lazy to bounds check CentCom rn. - Offset = new Vector2(500f + centcomm.ShuttleIndex, 0f), + Offset = new Vector2(500f + ent.Comp2.ShuttleIndex, 0f), // fun fact: if you just fucking yeet centcomm into nullspace anytime you try to spawn the shuttle, then any distance is far enough. so lets not do that LoadMap = false, }); if (shuttle == null) { - Log.Error($"Unable to spawn emergency shuttle {shuttlePath} for {ToPrettyString(uid)}"); + Log.Error($"Unable to spawn emergency shuttle {shuttlePath} for {ToPrettyString(ent)}"); return; } - centcomm.ShuttleIndex += Comp(shuttle.Value).LocalAABB.Width + ShuttleSpawnBuffer; + ent.Comp2.ShuttleIndex += Comp(shuttle.Value).LocalAABB.Width + ShuttleSpawnBuffer; // Update indices for all centcomm comps pointing to same map var query = AllEntityQuery(); while (query.MoveNext(out var comp)) { - if (comp == centcomm || comp.MapEntity != centcomm.MapEntity) + if (comp == ent.Comp2 || comp.MapEntity != ent.Comp2.MapEntity) continue; - comp.ShuttleIndex = centcomm.ShuttleIndex; + comp.ShuttleIndex = ent.Comp2.ShuttleIndex; } - component.EmergencyShuttle = shuttle; + ent.Comp1.EmergencyShuttle = shuttle; EnsureComp(shuttle.Value); EnsureComp(shuttle.Value); EnsureComp(shuttle.Value); + + Log.Info($"Added emergency shuttle {ToPrettyString(shuttle)} for station {ToPrettyString(ent)} and centcomm {ToPrettyString(ent.Comp2.Entity)}"); } /// diff --git a/Content.Server/Shuttles/Systems/RadarConsoleSystem.cs b/Content.Server/Shuttles/Systems/RadarConsoleSystem.cs index b7f08b4b349..1de20a87348 100644 --- a/Content.Server/Shuttles/Systems/RadarConsoleSystem.cs +++ b/Content.Server/Shuttles/Systems/RadarConsoleSystem.cs @@ -39,7 +39,7 @@ protected override void UpdateState(EntityUid uid, RadarConsoleComponent compone angle = Angle.Zero; } - if (_uiSystem.TryGetUi(uid, RadarConsoleUiKey.Key, out var bui)) + if (_uiSystem.HasUi(uid, RadarConsoleUiKey.Key)) { NavInterfaceState state; var docks = _console.GetAllDocks(); @@ -53,7 +53,7 @@ protected override void UpdateState(EntityUid uid, RadarConsoleComponent compone state = _console.GetNavState(uid, docks); } - _uiSystem.SetUiState(bui, new NavBoundUserInterfaceState(state)); + _uiSystem.SetUiState(uid, RadarConsoleUiKey.Key, new NavBoundUserInterfaceState(state)); } } } diff --git a/Content.Server/Shuttles/Systems/ShuttleConsoleSystem.cs b/Content.Server/Shuttles/Systems/ShuttleConsoleSystem.cs index fac74e34c58..6f24208c3a6 100644 --- a/Content.Server/Shuttles/Systems/ShuttleConsoleSystem.cs +++ b/Content.Server/Shuttles/Systems/ShuttleConsoleSystem.cs @@ -136,13 +136,12 @@ public void RefreshShuttleConsoles() /// private void OnConsoleUIClose(EntityUid uid, ShuttleConsoleComponent component, BoundUIClosedEvent args) { - if ((ShuttleConsoleUiKey) args.UiKey != ShuttleConsoleUiKey.Key || - args.Session.AttachedEntity is not { } user) + if ((ShuttleConsoleUiKey) args.UiKey != ShuttleConsoleUiKey.Key) { return; } - RemovePilot(user); + RemovePilot(args.Actor); } private void OnConsoleUIOpenAttempt(EntityUid uid, ShuttleConsoleComponent component, @@ -265,9 +264,9 @@ private void UpdateState(EntityUid consoleUid, ref DockingInterfaceState? dockSt new List()); } - if (_ui.TryGetUi(consoleUid, ShuttleConsoleUiKey.Key, out var bui)) + if (_ui.HasUi(consoleUid, ShuttleConsoleUiKey.Key)) { - _ui.SetUiState(bui, new ShuttleBoundUserInterfaceState(navState, mapState, dockState)); + _ui.SetUiState(consoleUid, ShuttleConsoleUiKey.Key, new ShuttleBoundUserInterfaceState(navState, mapState, dockState)); } } diff --git a/Content.Server/Shuttles/Systems/ShuttleSystem.FasterThanLight.cs b/Content.Server/Shuttles/Systems/ShuttleSystem.FasterThanLight.cs index 51288691039..11cc16e0cd0 100644 --- a/Content.Server/Shuttles/Systems/ShuttleSystem.FasterThanLight.cs +++ b/Content.Server/Shuttles/Systems/ShuttleSystem.FasterThanLight.cs @@ -6,6 +6,8 @@ using Content.Server.Station.Events; using Content.Shared.Body.Components; using Content.Shared.Buckle.Components; +using Content.Shared.CCVar; +using Content.Shared.Database; using Content.Shared.Ghost; using Content.Shared.Maps; using Content.Shared.Parallax; @@ -33,14 +35,6 @@ public sealed partial class ShuttleSystem * This is a way to move a shuttle from one location to another, via an intermediate map for fanciness. */ - public const float DefaultStartupTime = 5.5f; - public const float DefaultTravelTime = 20f; - public const float DefaultArrivalTime = 5f; - private const float FTLCooldown = 10f; - public const float FTLMassLimit = 300f; - - // I'm too lazy to make CVars. - private readonly SoundSpecifier _startupSound = new SoundPathSpecifier("/Audio/Effects/Shuttle/hyperspace_begin.ogg") { Params = AudioParams.Default.WithVolume(-5f), @@ -51,7 +45,12 @@ public sealed partial class ShuttleSystem Params = AudioParams.Default.WithVolume(-5f), }; - private readonly TimeSpan _hyperspaceKnockdownTime = TimeSpan.FromSeconds(5); + public float DefaultStartupTime; + public float DefaultTravelTime; + public float DefaultArrivalTime; + private float FTLCooldown; + public float FTLMassLimit; + private TimeSpan _hyperspaceKnockdownTime = TimeSpan.FromSeconds(5); /// /// Left-side of the station we're allowed to use @@ -89,6 +88,13 @@ private void InitializeFTL() _physicsQuery = GetEntityQuery(); _statusQuery = GetEntityQuery(); _xformQuery = GetEntityQuery(); + + _cfg.OnValueChanged(CCVars.FTLStartupTime, time => DefaultStartupTime = time, true); + _cfg.OnValueChanged(CCVars.FTLTravelTime, time => DefaultTravelTime = time, true); + _cfg.OnValueChanged(CCVars.FTLArrivalTime, time => DefaultArrivalTime = time, true); + _cfg.OnValueChanged(CCVars.FTLCooldown, time => FTLCooldown = time, true); + _cfg.OnValueChanged(CCVars.FTLMassLimit, time => FTLMassLimit = time, true); + _cfg.OnValueChanged(CCVars.HyperspaceKnockdownTime, time => _hyperspaceKnockdownTime = TimeSpan.FromSeconds(time), true); } private void OnStationPostInit(ref StationPostInitEvent ev) @@ -210,7 +216,9 @@ public bool CanFTL(EntityUid shuttleUid, [NotNullWhen(false)] out string? reason return false; } - if (TryComp(shuttleUid, out PhysicsComponent? shuttlePhysics) && shuttlePhysics.Mass > FTLMassLimit) + if (FTLMassLimit > 0 && + TryComp(shuttleUid, out PhysicsComponent? shuttlePhysics) && + shuttlePhysics.Mass > FTLMassLimit) { reason = Loc.GetString("shuttle-console-mass"); return false; @@ -243,15 +251,18 @@ public void FTLToCoordinates( ShuttleComponent component, EntityCoordinates coordinates, Angle angle, - float startupTime = DefaultStartupTime, - float hyperspaceTime = DefaultTravelTime, + float? startupTime = null, + float? hyperspaceTime = null, string? priorityTag = null) { if (!TrySetupFTL(shuttleUid, component, out var hyperspace)) return; - hyperspace.StartupTime = startupTime; - hyperspace.TravelTime = hyperspaceTime; + startupTime ??= DefaultStartupTime; + hyperspaceTime ??= DefaultTravelTime; + + hyperspace.StartupTime = startupTime.Value; + hyperspace.TravelTime = hyperspaceTime.Value; hyperspace.StateTime = StartEndTime.FromStartDuration( _gameTiming.CurTime, TimeSpan.FromSeconds(hyperspace.StartupTime)); @@ -275,16 +286,19 @@ public void FTLToDock( EntityUid shuttleUid, ShuttleComponent component, EntityUid target, - float startupTime = DefaultStartupTime, - float hyperspaceTime = DefaultTravelTime, + float? startupTime = null, + float? hyperspaceTime = null, string? priorityTag = null) { if (!TrySetupFTL(shuttleUid, component, out var hyperspace)) return; + startupTime ??= DefaultStartupTime; + hyperspaceTime ??= DefaultTravelTime; + var config = _dockSystem.GetDockingConfig(shuttleUid, target, priorityTag); - hyperspace.StartupTime = startupTime; - hyperspace.TravelTime = hyperspaceTime; + hyperspace.StartupTime = startupTime.Value; + hyperspace.TravelTime = hyperspaceTime.Value; hyperspace.StateTime = StartEndTime.FromStartDuration( _gameTiming.CurTime, TimeSpan.FromSeconds(hyperspace.StartupTime)); @@ -863,6 +877,8 @@ private void Smimsh(EntityUid uid, FixturesComponent? manager = null, MapGridCom if (_bodyQuery.TryGetComponent(ent, out var mob)) { + _logger.Add(LogType.Gib, LogImpact.Extreme, $"{ToPrettyString(ent):player} got gibbed by the shuttle" + + $" {ToPrettyString(uid)} arriving from FTL at {xform.Coordinates:coordinates}"); var gibs = _bobby.GibBody(ent, body: mob); _immuneEnts.UnionWith(gibs); continue; diff --git a/Content.Server/Shuttles/Systems/ShuttleSystem.IFF.cs b/Content.Server/Shuttles/Systems/ShuttleSystem.IFF.cs index bf265da2e64..ce79466b589 100644 --- a/Content.Server/Shuttles/Systems/ShuttleSystem.IFF.cs +++ b/Content.Server/Shuttles/Systems/ShuttleSystem.IFF.cs @@ -57,7 +57,7 @@ private void OnIFFConsoleAnchor(EntityUid uid, IFFConsoleComponent component, re !TryComp(uid, out var xform) || !TryComp(xform.GridUid, out var iff)) { - _uiSystem.TrySetUiState(uid, IFFConsoleUiKey.Key, new IFFConsoleBoundUserInterfaceState() + _uiSystem.SetUiState(uid, IFFConsoleUiKey.Key, new IFFConsoleBoundUserInterfaceState() { AllowedFlags = component.AllowedFlags, Flags = IFFFlags.None, @@ -65,7 +65,7 @@ private void OnIFFConsoleAnchor(EntityUid uid, IFFConsoleComponent component, re } else { - _uiSystem.TrySetUiState(uid, IFFConsoleUiKey.Key, new IFFConsoleBoundUserInterfaceState() + _uiSystem.SetUiState(uid, IFFConsoleUiKey.Key, new IFFConsoleBoundUserInterfaceState() { AllowedFlags = component.AllowedFlags, Flags = iff.Flags, @@ -83,7 +83,7 @@ protected override void UpdateIFFInterfaces(EntityUid gridUid, IFFComponent comp if (xform.GridUid != gridUid) continue; - _uiSystem.TrySetUiState(uid, IFFConsoleUiKey.Key, new IFFConsoleBoundUserInterfaceState() + _uiSystem.SetUiState(uid, IFFConsoleUiKey.Key, new IFFConsoleBoundUserInterfaceState() { AllowedFlags = comp.AllowedFlags, Flags = component.Flags, diff --git a/Content.Server/Shuttles/Systems/ShuttleSystem.Impact.cs b/Content.Server/Shuttles/Systems/ShuttleSystem.Impact.cs index f346398cdaa..8a8d2d883d0 100644 --- a/Content.Server/Shuttles/Systems/ShuttleSystem.Impact.cs +++ b/Content.Server/Shuttles/Systems/ShuttleSystem.Impact.cs @@ -1,3 +1,4 @@ +using System.Numerics; using Content.Server.Shuttles.Components; using Content.Shared.Audio; using Robust.Shared.Audio; @@ -38,8 +39,8 @@ private void OnShuttleCollide(EntityUid uid, ShuttleComponent component, ref Sta var otherXform = Transform(args.OtherEntity); - var ourPoint = ourXform.InvWorldMatrix.Transform(args.WorldPoint); - var otherPoint = otherXform.InvWorldMatrix.Transform(args.WorldPoint); + var ourPoint = Vector2.Transform(args.WorldPoint, ourXform.InvWorldMatrix); + var otherPoint = Vector2.Transform(args.WorldPoint, otherXform.InvWorldMatrix); var ourVelocity = _physics.GetLinearVelocity(uid, ourPoint, ourBody, ourXform); var otherVelocity = _physics.GetLinearVelocity(args.OtherEntity, otherPoint, otherBody, otherXform); diff --git a/Content.Server/Shuttles/Systems/ShuttleSystem.cs b/Content.Server/Shuttles/Systems/ShuttleSystem.cs index 6dc25e8d766..6fe2324d51e 100644 --- a/Content.Server/Shuttles/Systems/ShuttleSystem.cs +++ b/Content.Server/Shuttles/Systems/ShuttleSystem.cs @@ -1,3 +1,4 @@ +using Content.Server.Administration.Logs; using Content.Server.Body.Systems; using Content.Server.Doors.Systems; using Content.Server.Parallax; @@ -48,6 +49,7 @@ public sealed partial class ShuttleSystem : SharedShuttleSystem [Dependency] private readonly ThrowingSystem _throwing = default!; [Dependency] private readonly ThrusterSystem _thruster = default!; [Dependency] private readonly UserInterfaceSystem _uiSystem = default!; + [Dependency] private readonly IAdminLogManager _logger = default!; public const float TileMassMultiplier = 0.5f; diff --git a/Content.Server/Shuttles/Systems/ThrusterSystem.cs b/Content.Server/Shuttles/Systems/ThrusterSystem.cs index be55cd9a62a..ee131d7857a 100644 --- a/Content.Server/Shuttles/Systems/ThrusterSystem.cs +++ b/Content.Server/Shuttles/Systems/ThrusterSystem.cs @@ -1,5 +1,6 @@ using System.Numerics; using Content.Server.Audio; +using Content.Server.Construction; using Content.Server.Power.Components; using Content.Server.Power.EntitySystems; using Content.Server.Shuttles.Components; @@ -51,6 +52,9 @@ public override void Initialize() SubscribeLocalEvent(OnThrusterExamine); + SubscribeLocalEvent(OnRefreshParts); + SubscribeLocalEvent(OnUpgradeExamine); + SubscribeLocalEvent(OnShuttleTileChange); } @@ -580,6 +584,24 @@ public void SetAngularThrust(ShuttleComponent component, bool on) } } + private void OnRefreshParts(EntityUid uid, ThrusterComponent component, RefreshPartsEvent args) + { + if (component.IsOn) // safely disable thruster to prevent negative thrust + DisableThruster(uid, component); + + var thrustRating = args.PartRatings[component.MachinePartThrust]; + + component.Thrust = component.BaseThrust * MathF.Pow(component.PartRatingThrustMultiplier, thrustRating - 1); + + if (component.Enabled && CanEnable(uid, component)) + EnableThruster(uid, component); + } + + private void OnUpgradeExamine(EntityUid uid, ThrusterComponent component, UpgradeExamineEvent args) + { + args.AddPercentageUpgrade("thruster-comp-upgrade-thrust", component.Thrust / component.BaseThrust); + } + #endregion private int GetFlagIndex(DirectionFlag flag) diff --git a/Content.Server/Silicon/BatteryLocking/BatterySlotRequiresLockSystem.cs b/Content.Server/Silicon/BatteryLocking/BatterySlotRequiresLockSystem.cs index 98e1cb5584c..12e86691281 100644 --- a/Content.Server/Silicon/BatteryLocking/BatterySlotRequiresLockSystem.cs +++ b/Content.Server/Silicon/BatteryLocking/BatterySlotRequiresLockSystem.cs @@ -2,7 +2,7 @@ using Content.Shared.Lock; using Content.Shared.Popups; using Content.Shared.Silicon.Components; -using Content.Shared.IdentityManagement; +using Content.Shared.IdentityManagement; namespace Content.Server.Silicon.BatteryLocking; @@ -10,19 +10,18 @@ public sealed class BatterySlotRequiresLockSystem : EntitySystem { [Dependency] private readonly ItemSlotsSystem _itemSlotsSystem = default!; - [Dependency] private readonly SharedPopupSystem _popupSystem = default!; + [Dependency] private readonly SharedPopupSystem _popupSystem = default!; - /// public override void Initialize() { base.Initialize(); SubscribeLocalEvent(LockToggled); - SubscribeLocalEvent(LockToggleAttempted); - + SubscribeLocalEvent(LockToggleAttempted); } + private void LockToggled(EntityUid uid, BatterySlotRequiresLockComponent component, LockToggledEvent args) { - if (!TryComp(uid, out var lockComp) + if (!TryComp(uid, out var lockComp) || !TryComp(uid, out var itemslots) || !_itemSlotsSystem.TryGetSlot(uid, component.ItemSlot, out var slot, itemslots)) return; @@ -33,9 +32,9 @@ private void LockToggled(EntityUid uid, BatterySlotRequiresLockComponent compone private void LockToggleAttempted(EntityUid uid, BatterySlotRequiresLockComponent component, LockToggleAttemptEvent args) { if (args.User == uid - || !TryComp(uid, out var siliconComp)) + || !HasComp(uid)) return; - + _popupSystem.PopupEntity(Loc.GetString("batteryslotrequireslock-component-alert-owner", ("user", Identity.Entity(args.User, EntityManager))), uid, uid, PopupType.Large); } diff --git a/Content.Server/Silicon/BlindHealing/BlindHealingComponent.cs b/Content.Server/Silicon/BlindHealing/BlindHealingComponent.cs index 4c3c478c4b8..fe218491708 100644 --- a/Content.Server/Silicon/BlindHealing/BlindHealingComponent.cs +++ b/Content.Server/Silicon/BlindHealing/BlindHealingComponent.cs @@ -1,28 +1,23 @@ -using Content.Shared.Damage; -using Content.Shared.Tools; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; +namespace Content.Server.Silicon.BlindHealing; -namespace Content.Server.Silicon.BlindHealing +[RegisterComponent] +public sealed partial class BlindHealingComponent : Component { - [RegisterComponent] - public sealed partial class BlindHealingComponent : Component - { - [DataField] - public int DoAfterDelay = 3; + [DataField] + public int DoAfterDelay = 3; - /// - /// A multiplier that will be applied to the above if an entity is repairing themselves. - /// - [DataField] - public float SelfHealPenalty = 3f; + /// + /// A multiplier that will be applied to the above if an entity is repairing themselves. + /// + [DataField] + public float SelfHealPenalty = 3f; - /// - /// Whether or not an entity is allowed to repair itself. - /// - [DataField] - public bool AllowSelfHeal = true; + /// + /// Whether or not an entity is allowed to repair itself. + /// + [DataField] + public bool AllowSelfHeal = true; - [DataField(required: true)] - public List DamageContainers; - } + [DataField(required: true)] + public List DamageContainers; } diff --git a/Content.Server/Silicon/BlindHealing/BlindHealingSystem.cs b/Content.Server/Silicon/BlindHealing/BlindHealingSystem.cs index 6cf60e6ef3f..b9d26b59f7c 100644 --- a/Content.Server/Silicon/BlindHealing/BlindHealingSystem.cs +++ b/Content.Server/Silicon/BlindHealing/BlindHealingSystem.cs @@ -12,110 +12,87 @@ using Content.Shared.Popups; using Content.Shared.Stacks; -namespace Content.Server.Silicon.BlindHealing +namespace Content.Server.Silicon.BlindHealing; + +public sealed class BlindHealingSystem : SharedBlindHealingSystem { - public sealed class BlindHealingSystem : SharedBlindHealingSystem + [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] private readonly IAdminLogManager _adminLogger = default!; + [Dependency] private readonly BlindableSystem _blindableSystem = default!; + [Dependency] private readonly StackSystem _stackSystem = default!; + [Dependency] private readonly SharedDoAfterSystem _doAfter = default!; + + public override void Initialize() { - [Dependency] private readonly SharedPopupSystem _popup = default!; - [Dependency] private readonly IAdminLogManager _adminLogger= default!; - [Dependency] private readonly BlindableSystem _blindableSystem = default!; - [Dependency] private readonly StackSystem _stackSystem = default!; - [Dependency] private readonly DamageableSystem _damageableSystem = default!; - [Dependency] private readonly SharedDoAfterSystem _doAfter = default!; - - public override void Initialize() - { - SubscribeLocalEvent(OnUse); - SubscribeLocalEvent(OnInteract); - SubscribeLocalEvent(OnHealingFinished); - } - - private void OnHealingFinished(EntityUid uid, BlindHealingComponent component, HealingDoAfterEvent args) - { - Log.Info("event started!"); - - if (args.Cancelled || args.Target == null) - return; - - EntityUid target = (EntityUid) args.Target; - - if(!EntityManager.TryGetComponent(target, out BlindableComponent? blindcomp) - || blindcomp is { EyeDamage: 0 }) - return; - - if(EntityManager.TryGetComponent(uid, out StackComponent? stackComponent)) - { - double price = 1; - if (EntityManager.TryGetComponent(uid, out StackPriceComponent? stackPrice)) - price = stackPrice.Price; - _stackSystem.SetCount(uid, (int) (_stackSystem.GetCount(uid, stackComponent) - price), stackComponent); + SubscribeLocalEvent(OnUse); + SubscribeLocalEvent(OnInteract); + SubscribeLocalEvent(OnHealingFinished); + } - } + private void OnHealingFinished(EntityUid uid, BlindHealingComponent component, HealingDoAfterEvent args) + { + if (args.Cancelled || args.Target == null + || !TryComp(args.Target, out var blindComp) + || blindComp is { EyeDamage: 0 }) + return; - _blindableSystem.AdjustEyeDamage((target, blindcomp), -blindcomp!.EyeDamage); + if (TryComp(uid, out var stackComponent) + && TryComp(uid, out var stackPrice)) + _stackSystem.SetCount(uid, (int) (_stackSystem.GetCount(uid, stackComponent) - stackPrice.Price), stackComponent); - _adminLogger.Add(LogType.Healed, $"{ToPrettyString(args.User):user} repaired {ToPrettyString(uid):target}'s vision"); + _blindableSystem.AdjustEyeDamage((args.Target.Value, blindComp), -blindComp.EyeDamage); - var str = Loc.GetString("comp-repairable-repair", - ("target", uid), - ("tool", args.Used!)); - _popup.PopupEntity(str, uid, args.User); + _adminLogger.Add(LogType.Healed, $"{ToPrettyString(args.User):user} repaired {ToPrettyString(uid):target}'s vision"); - } + var str = Loc.GetString("comp-repairable-repair", + ("target", uid), + ("tool", args.Used!)); + _popup.PopupEntity(str, uid, args.User); - private bool TryHealBlindness(EntityUid uid, EntityUid user, EntityUid target, float delay) - { - var doAfterEventArgs = - new DoAfterArgs(EntityManager, user, delay, new HealingDoAfterEvent(), uid, target: target, used: uid) - { - NeedHand = true, - BreakOnUserMove = true, - BreakOnWeightlessMove = false, - }; + } - _doAfter.TryStartDoAfter(doAfterEventArgs); - return true; - } + private bool TryHealBlindness(EntityUid uid, EntityUid user, EntityUid target, float delay) + { + var doAfterEventArgs = + new DoAfterArgs(EntityManager, user, delay, new HealingDoAfterEvent(), uid, target: target, used: uid) + { + NeedHand = true, + BreakOnUserMove = true, + BreakOnWeightlessMove = false, + }; - private void OnInteract(EntityUid uid, BlindHealingComponent component, ref AfterInteractEvent args) - { + _doAfter.TryStartDoAfter(doAfterEventArgs); + return true; + } - if (args.Handled - || !TryComp(args.User, out DamageableComponent? damageable) - || damageable.DamageContainerID != null - && !component.DamageContainers.Contains(damageable.DamageContainerID) - || !TryComp(args.User, out BlindableComponent? blindcomp) - || blindcomp is { EyeDamage: 0 }) - return; + private void OnInteract(EntityUid uid, BlindHealingComponent component, ref AfterInteractEvent args) + { - float delay = component.DoAfterDelay; + if (args.Handled + || !TryComp(args.User, out var damageable) + || damageable.DamageContainerID != null && !component.DamageContainers.Contains(damageable.DamageContainerID) + || !TryComp(args.User, out var blindcomp) + || blindcomp.EyeDamage == 0 + || args.User == args.Target && !component.AllowSelfHeal) + return; + + TryHealBlindness(uid, args.User, args.User, + args.User == args.Target + ? component.DoAfterDelay * component.SelfHealPenalty + : component.DoAfterDelay); + } - if (args.User == args.Target) - { - if (!component.AllowSelfHeal) - return; - delay *= component.SelfHealPenalty; - } - - TryHealBlindness(uid, args.User, args.User, delay); - } - - private void OnUse(EntityUid uid, BlindHealingComponent component, ref UseInHandEvent args) - { - if (args.Handled - || !TryComp(args.User, out DamageableComponent? damageable) - || damageable.DamageContainerID != null - && !component.DamageContainers.Contains(damageable.DamageContainerID) - || !TryComp(args.User, out BlindableComponent? blindcomp) - || blindcomp is { EyeDamage: 0 } - || !component.AllowSelfHeal) - return; - - float delay = component.DoAfterDelay; - delay *= component.SelfHealPenalty; - - TryHealBlindness(uid, args.User, args.User, delay); - - } + private void OnUse(EntityUid uid, BlindHealingComponent component, ref UseInHandEvent args) + { + if (args.Handled + || !TryComp(args.User, out var damageable) + || damageable.DamageContainerID != null && !component.DamageContainers.Contains(damageable.DamageContainerID) + || !TryComp(args.User, out var blindcomp) + || blindcomp.EyeDamage == 0 + || !component.AllowSelfHeal) + return; + + TryHealBlindness(uid, args.User, args.User, + component.DoAfterDelay * component.SelfHealPenalty); } } diff --git a/Content.Server/Silicon/Charge/Components/SiliconDownOnDeadComponent.cs b/Content.Server/Silicon/Charge/Components/SiliconDownOnDeadComponent.cs index 3080144cd4a..4b3aad33ab6 100644 --- a/Content.Server/Silicon/Charge/Components/SiliconDownOnDeadComponent.cs +++ b/Content.Server/Silicon/Charge/Components/SiliconDownOnDeadComponent.cs @@ -1,5 +1,3 @@ -using System.Threading; - namespace Content.Server.Silicon.Death; /// @@ -15,5 +13,5 @@ public sealed partial class SiliconDownOnDeadComponent : Component /// Is this Silicon currently dead? /// [ViewVariables(VVAccess.ReadOnly)] - public bool Dead { get; set; } = false; + public bool Dead; } diff --git a/Content.Server/Silicon/Charge/Systems/SiliconChargeDeathSystem.cs b/Content.Server/Silicon/Charge/Systems/SiliconChargeDeathSystem.cs index d6fa07a1a14..d4d1db5ed96 100644 --- a/Content.Server/Silicon/Charge/Systems/SiliconChargeDeathSystem.cs +++ b/Content.Server/Silicon/Charge/Systems/SiliconChargeDeathSystem.cs @@ -2,14 +2,9 @@ using Content.Shared.Silicon.Systems; using Content.Server.Bed.Sleep; using Content.Shared.Bed.Sleep; -using Content.Server.Sound.Components; using Content.Server.Silicon.Charge; -using System.Threading; using Content.Server.Humanoid; using Content.Shared.Humanoid; -using Content.Shared.Humanoid.Markings; -using Robust.Shared.Utility; -using Timer = Robust.Shared.Timing.Timer; namespace Content.Server.Silicon.Death; @@ -40,7 +35,7 @@ private void OnSiliconChargeStateUpdate(EntityUid uid, SiliconDownOnDeadComponen if (args.ChargePercent == 0 && !siliconDeadComp.Dead) SiliconDead(uid, siliconDeadComp, batteryComp, uid); else if (args.ChargePercent != 0 && siliconDeadComp.Dead) - SiliconUnDead(uid, siliconDeadComp, batteryComp, uid); + SiliconUnDead(uid, siliconDeadComp, batteryComp, uid); } private void SiliconDead(EntityUid uid, SiliconDownOnDeadComponent siliconDeadComp, BatteryComponent? batteryComp, EntityUid batteryUid) @@ -54,7 +49,7 @@ private void SiliconDead(EntityUid uid, SiliconDownOnDeadComponent siliconDeadCo EntityManager.EnsureComponent(uid); EntityManager.EnsureComponent(uid); - if (TryComp(uid, out HumanoidAppearanceComponent? humanoidAppearanceComponent)) + if (TryComp(uid, out var humanoidAppearanceComponent)) { var layers = HumanoidVisualLayersExtension.Sublayers(HumanoidVisualLayers.HeadSide); _humanoidAppearanceSystem.SetLayersVisibility(uid, layers, false, true, humanoidAppearanceComponent); diff --git a/Content.Server/Silicon/Charge/Systems/SiliconChargeSystem.cs b/Content.Server/Silicon/Charge/Systems/SiliconChargeSystem.cs index de50c828bd7..d8b034a69f5 100644 --- a/Content.Server/Silicon/Charge/Systems/SiliconChargeSystem.cs +++ b/Content.Server/Silicon/Charge/Systems/SiliconChargeSystem.cs @@ -10,20 +10,16 @@ using Content.Shared.Silicon.Systems; using Content.Shared.Movement.Systems; using Content.Server.Body.Components; -using Content.Server.Power.EntitySystems; using Robust.Shared.Containers; using Content.Shared.Mind.Components; using System.Diagnostics.CodeAnalysis; using Content.Server.PowerCell; using Robust.Shared.Timing; using Robust.Shared.Configuration; -using Robust.Shared.Audio.Systems; using Robust.Shared.Utility; using Content.Shared.CCVar; using Content.Shared.PowerCell.Components; -using Content.Shared.Mind; using Content.Shared.Alert; -using Content.Server.Silicon.Death; namespace Content.Server.Silicon.Charge; @@ -34,7 +30,6 @@ public sealed class SiliconChargeSystem : EntitySystem [Dependency] private readonly FlammableSystem _flammable = default!; [Dependency] private readonly PopupSystem _popup = default!; [Dependency] private readonly MovementSpeedModifierSystem _moveMod = default!; - [Dependency] private readonly SharedContainerSystem _container = default!; [Dependency] private readonly IGameTiming _timing = default!; [Dependency] private readonly IConfigurationManager _config = default!; [Dependency] private readonly PowerCellSystem _powerCell = default!; @@ -49,27 +44,23 @@ public override void Initialize() public bool TryGetSiliconBattery(EntityUid silicon, [NotNullWhen(true)] out BatteryComponent? batteryComp) { batteryComp = null; - if (!TryComp(silicon, out SiliconComponent? siliconComp)) + if (!HasComp(silicon)) return false; - // try get a battery directly on the inserted entity if (TryComp(silicon, out batteryComp) || _powerCell.TryGetBatteryFromSlot(silicon, out batteryComp)) return true; - //DebugTools.Assert("SiliconComponent does not contain Battery"); return false; } private void OnSiliconStartup(EntityUid uid, SiliconComponent component, ComponentStartup args) { - if (!TryComp(uid, out PowerCellSlotComponent? batterySlot)) + if (!HasComp(uid)) return; - var container = _container.GetContainer(uid, batterySlot.CellSlotId); - if (component.EntityType.GetType() != typeof(SiliconType)) DebugTools.Assert("SiliconComponent.EntityType is not a SiliconType enum."); } @@ -82,7 +73,8 @@ public override void Update(float frameTime) var query = EntityQueryEnumerator(); while (query.MoveNext(out var silicon, out var siliconComp)) { - if (!siliconComp.BatteryPowered) + if (_mobState.IsDead(silicon) + || !siliconComp.BatteryPowered) continue; // Check if the Silicon is an NPC, and if so, follow the delay as specified in the CVAR. @@ -107,20 +99,11 @@ public override void Update(float frameTime) continue; } - // If the silicon is dead, skip it. - if (_mobState.IsDead(silicon)) + // If the silicon ghosted or is SSD while still being powered, skip it. + if (TryComp(silicon, out var mindContComp) + && !mindContComp.HasMind) continue; - // If the silicon ghosted or is SSD while still being powered, skip it. - DeltaV - if (EntityManager.TryGetComponent(silicon, out var mindContComp) - && EntityManager.TryGetComponent(silicon, out var siliconDeathComp)) - { - if ((mindContComp.HasMind == false || CompOrNull(mindContComp.Mind)?.Session == null) && !siliconDeathComp.Dead) - { - continue; - } - } - var drainRate = siliconComp.DrainPerSecond; // All multipliers will be subtracted by 1, and then added together, and then multiplied by the drain rate. This is then added to the base drain rate. @@ -131,7 +114,7 @@ public override void Update(float frameTime) // Maybe use something similar to refreshmovespeedmodifiers, where it's stored in the component. // Maybe it doesn't matter, and stuff should just use static drain? if (!siliconComp.EntityType.Equals(SiliconType.Npc)) // Don't bother checking heat if it's an NPC. It's a waste of time, and it'd be delayed due to the update time. - drainRateFinalAddi += SiliconHeatEffects(silicon, frameTime) - 1; // This will need to be changed at some point if we allow external batteries, since the heat of the Silicon might not be applicable. + drainRateFinalAddi += SiliconHeatEffects(silicon, siliconComp, frameTime) - 1; // This will need to be changed at some point if we allow external batteries, since the heat of the Silicon might not be applicable. // Ensures that the drain rate is at least 10% of normal, // and would allow at least 4 minutes of life with a max charge, to prevent cheese. @@ -166,14 +149,12 @@ public void UpdateChargeState(EntityUid uid, short chargePercent, SiliconCompone } } - private float SiliconHeatEffects(EntityUid silicon, float frameTime) + private float SiliconHeatEffects(EntityUid silicon, SiliconComponent siliconComp, float frameTime) { - if (!EntityManager.TryGetComponent(silicon, out var temperComp) - || !EntityManager.TryGetComponent(silicon, out var thermalComp)) + if (!TryComp(silicon, out var temperComp) + || !TryComp(silicon, out var thermalComp)) return 0; - var siliconComp = EntityManager.GetComponent(silicon); - // If the Silicon is hot, drain the battery faster, if it's cold, drain it slower, capped. var upperThresh = thermalComp.NormalBodyTemperature + thermalComp.ThermalRegulationTemperatureThreshold; var upperThreshHalf = thermalComp.NormalBodyTemperature + thermalComp.ThermalRegulationTemperatureThreshold * 0.5f; @@ -198,12 +179,11 @@ private float SiliconHeatEffects(EntityUid silicon, float frameTime) return hotTempMulti; _popup.PopupEntity(Loc.GetString("silicon-overheating"), silicon, silicon, PopupType.MediumCaution); - if (_random.Prob(Math.Clamp(temperComp.CurrentTemperature / (upperThresh * 5), 0.001f, 0.9f))) - { - //MaximumFireStacks and MinimumFireStacks doesn't exists on EE - _flammable.AdjustFireStacks(silicon, Math.Clamp(siliconComp.FireStackMultiplier, -10, 10), flamComp); - _flammable.Ignite(silicon, silicon, flamComp); - } + if (!_random.Prob(Math.Clamp(temperComp.CurrentTemperature / (upperThresh * 5), 0.001f, 0.9f))) + return hotTempMulti; + + _flammable.AdjustFireStacks(silicon, Math.Clamp(siliconComp.FireStackMultiplier, -10, 10), flamComp); + _flammable.Ignite(silicon, silicon, flamComp); return hotTempMulti; } diff --git a/Content.Server/Silicon/DeadStartupButtonSystem/DeadStartupButtonSystem.cs b/Content.Server/Silicon/DeadStartupButtonSystem/DeadStartupButtonSystem.cs index a25f2a22545..6e516f3011e 100644 --- a/Content.Server/Silicon/DeadStartupButtonSystem/DeadStartupButtonSystem.cs +++ b/Content.Server/Silicon/DeadStartupButtonSystem/DeadStartupButtonSystem.cs @@ -1,4 +1,3 @@ -using Content.Server.Chat.Systems; using Content.Server.Lightning; using Content.Server.Popups; using Content.Server.PowerCell; @@ -25,11 +24,11 @@ public sealed class DeadStartupButtonSystem : SharedDeadStartupButtonSystem [Dependency] private readonly LightningSystem _lightning = default!; [Dependency] private readonly SiliconChargeSystem _siliconChargeSystem = default!; [Dependency] private readonly PowerCellSystem _powerCell = default!; - [Dependency] private readonly ChatSystem _chatSystem = default!; /// public override void Initialize() { + base.Initialize(); SubscribeLocalEvent(OnDoAfter); SubscribeLocalEvent(OnElectrocuted); SubscribeLocalEvent(OnMobStateChanged); @@ -39,14 +38,13 @@ public override void Initialize() private void OnDoAfter(EntityUid uid, DeadStartupButtonComponent comp, OnDoAfterButtonPressedEvent args) { if (args.Handled || args.Cancelled - || !TryComp(uid, out MobStateComponent? mobStateComponent) + || !TryComp(uid, out var mobStateComponent) || !_mobState.IsDead(uid, mobStateComponent) - || !TryComp(uid, out MobThresholdsComponent? mobThresholdsComponent) - || !TryComp(uid, out DamageableComponent? damageable)) + || !TryComp(uid, out var mobThresholdsComponent) + || !TryComp(uid, out var damageable) + || !_mobThreshold.TryGetThresholdForState(uid, MobState.Critical, out var criticalThreshold, mobThresholdsComponent)) return; - var criticalThreshold = _mobThreshold.GetThresholdForState(uid, MobState.Critical, mobThresholdsComponent); - if (damageable.TotalDamage < criticalThreshold) _mobState.ChangeMobState(uid, MobState.Alive, mobStateComponent); else @@ -59,9 +57,9 @@ private void OnDoAfter(EntityUid uid, DeadStartupButtonComponent comp, OnDoAfter private void OnElectrocuted(EntityUid uid, DeadStartupButtonComponent comp, ElectrocutedEvent args) { - if (!TryComp(uid, out MobStateComponent? mobStateComponent) + if (!TryComp(uid, out var mobStateComponent) || !_mobState.IsDead(uid, mobStateComponent) - || !_siliconChargeSystem.TryGetSiliconBattery(uid, out var bateria) + || !_siliconChargeSystem.TryGetSiliconBattery(uid, out var bateria) || bateria.CurrentCharge <= 0) return; @@ -72,13 +70,10 @@ private void OnElectrocuted(EntityUid uid, DeadStartupButtonComponent comp, Elec private void OnMobStateChanged(EntityUid uid, DeadStartupButtonComponent comp, MobStateChangedEvent args) { + if (args.NewMobState != MobState.Alive) + return; - if (args.NewMobState == MobState.Alive) - { - _popup.PopupEntity(Loc.GetString("dead-startup-system-reboot-success", ("target", MetaData(uid).EntityName)), uid); - _audio.PlayPvs(comp.Sound, uid); - } - + _popup.PopupEntity(Loc.GetString("dead-startup-system-reboot-success", ("target", MetaData(uid).EntityName)), uid); + _audio.PlayPvs(comp.Sound, uid); } - } diff --git a/Content.Server/Silicon/EmitBuzzWhileDamaged/EmitBuzzWhileDamagedSystem.cs b/Content.Server/Silicon/EmitBuzzWhileDamaged/EmitBuzzWhileDamagedSystem.cs index 05e5f5af89b..161a912d061 100644 --- a/Content.Server/Silicon/EmitBuzzWhileDamaged/EmitBuzzWhileDamagedSystem.cs +++ b/Content.Server/Silicon/EmitBuzzWhileDamaged/EmitBuzzWhileDamagedSystem.cs @@ -1,13 +1,13 @@ using Content.Server.Popups; using Content.Shared.Silicon.EmitBuzzWhileDamaged; using Content.Shared.Audio; -using Content.Shared.Body.Components; using Content.Shared.Damage; using Content.Shared.Mobs; using Content.Shared.Mobs.Systems; using Robust.Shared.Audio.Systems; using Robust.Shared.Random; using Robust.Shared.Timing; +using Content.Shared.Mobs.Components; namespace Content.Server.Silicon.EmitBuzzOnCrit; @@ -27,34 +27,29 @@ public override void Update(float frameTime) { base.Update(frameTime); - var query = EntityQueryEnumerator(); + var query = EntityQueryEnumerator(); - while (query.MoveNext(out var uid, out var emitBuzzOnCritComponent, out var body)) + while (query.MoveNext(out var uid, out var emitBuzzOnCritComponent, out var mobStateComponent, out var thresholdsComponent, out var damageableComponent)) { - - if (_mobState.IsDead(uid) - || !_mobThreshold.TryGetThresholdForState(uid, MobState.Critical, out var threshold) - || !TryComp(uid, out DamageableComponent? damageableComponent) - || damageableComponent.TotalDamage < (threshold/2)) + if (_mobState.IsDead(uid, mobStateComponent) + || !_mobThreshold.TryGetThresholdForState(uid, MobState.Critical, out var threshold, thresholdsComponent) + || damageableComponent.TotalDamage < threshold / 2) continue; - + // Check update time emitBuzzOnCritComponent.AccumulatedFrametime += frameTime; - if (emitBuzzOnCritComponent.AccumulatedFrametime < emitBuzzOnCritComponent.CycleDelay) continue; emitBuzzOnCritComponent.AccumulatedFrametime -= emitBuzzOnCritComponent.CycleDelay; + if (_gameTiming.CurTime <= emitBuzzOnCritComponent.LastBuzzPopupTime + emitBuzzOnCritComponent.BuzzPopupCooldown) + continue; - // start buzzing - if (_gameTiming.CurTime >= emitBuzzOnCritComponent.LastBuzzPopupTime + emitBuzzOnCritComponent.BuzzPopupCooldown) - { - emitBuzzOnCritComponent.LastBuzzPopupTime = _gameTiming.CurTime; - _popupSystem.PopupEntity(Loc.GetString("silicon-behavior-buzz"), uid); - Spawn("EffectSparks", Transform(uid).Coordinates); - _audio.PlayPvs(emitBuzzOnCritComponent.Sound, uid, AudioHelpers.WithVariation(0.05f, _robustRandom)); - } + // Start buzzing + emitBuzzOnCritComponent.LastBuzzPopupTime = _gameTiming.CurTime; + _popupSystem.PopupEntity(Loc.GetString("silicon-behavior-buzz"), uid); + Spawn("EffectSparks", Transform(uid).Coordinates); + _audio.PlayPvs(emitBuzzOnCritComponent.Sound, uid, AudioHelpers.WithVariation(0.05f, _robustRandom)); } } - } diff --git a/Content.Server/Silicon/EncryptionHolderRequiresLock/EncryptionHolderRequiresLockSystem.cs b/Content.Server/Silicon/EncryptionHolderRequiresLock/EncryptionHolderRequiresLockSystem.cs index 5eb4f25c49b..6efb51096c3 100644 --- a/Content.Server/Silicon/EncryptionHolderRequiresLock/EncryptionHolderRequiresLockSystem.cs +++ b/Content.Server/Silicon/EncryptionHolderRequiresLock/EncryptionHolderRequiresLockSystem.cs @@ -1,4 +1,3 @@ -using Content.Shared.Containers.ItemSlots; using Content.Shared.Lock; using Content.Shared.Radio.Components; using Content.Shared.Radio.EntitySystems; @@ -8,7 +7,6 @@ namespace Content.Server.Silicon.EncryptionHolderRequiresLock; public sealed class EncryptionHolderRequiresLockSystem : EntitySystem { - [Dependency] private readonly ItemSlotsSystem _itemSlotsSystem = default!; [Dependency] private readonly EncryptionKeySystem _encryptionKeySystem = default!; /// @@ -16,11 +14,11 @@ public override void Initialize() { base.Initialize(); SubscribeLocalEvent(LockToggled); - } + private void LockToggled(EntityUid uid, EncryptionHolderRequiresLockComponent component, LockToggledEvent args) { - if (!TryComp(uid, out var lockComp) + if (!TryComp(uid, out var lockComp) || !TryComp(uid, out var keyHolder)) return; diff --git a/Content.Server/Silicon/IPC/InternalEncryptionKeySpawner.cs b/Content.Server/Silicon/IPC/InternalEncryptionKeySpawner.cs index eb01409e854..5f799a102e7 100644 --- a/Content.Server/Silicon/IPC/InternalEncryptionKeySpawner.cs +++ b/Content.Server/Silicon/IPC/InternalEncryptionKeySpawner.cs @@ -1,39 +1,34 @@ -using Content.Shared.Preferences; using Content.Shared.Roles; using Content.Shared.Radio.Components; using Content.Shared.Containers; using Robust.Shared.Containers; - // Pretty much copied from StationSpawningSystem.SpawnStartingGear namespace Content.Server.Silicon.IPC; -public static class InternalEncryptionKeySpawner +public sealed partial class InternalEncryptionKeySpawner : EntitySystem { - public static void TryInsertEncryptionKey(EntityUid target, StartingGearPrototype startingGear, IEntityManager entityManager, HumanoidCharacterProfile? profile) + [Dependency] private readonly SharedContainerSystem _container = default!; + public void TryInsertEncryptionKey(EntityUid target, StartingGearPrototype startingGear, IEntityManager entityManager) { - if (entityManager.TryGetComponent(target, out var keyHolderComp)) - { - var earEquipString = startingGear.GetGear("ears", profile); - var containerMan = entityManager.System(); +#pragma warning disable CS8073 + if (target == null // target can be null during race conditions intentionally created by awful tests. +#pragma warning restore CS8073 + || !TryComp(target, out var keyHolderComp) + || keyHolderComp is null + || !startingGear.Equipment.TryGetValue("ears", out var earEquipString) + || string.IsNullOrEmpty(earEquipString)) + return; - if (!string.IsNullOrEmpty(earEquipString)) - { - var earEntity = entityManager.SpawnEntity(earEquipString, entityManager.GetComponent(target).Coordinates); + var earEntity = entityManager.SpawnEntity(earEquipString, entityManager.GetComponent(target).Coordinates); + if (!entityManager.HasComponent(earEntity) + || !entityManager.TryGetComponent(earEntity, out var fillComp) + || !fillComp.Containers.TryGetValue(EncryptionKeyHolderComponent.KeyContainerName, out var defaultKeys)) + return; - if (entityManager.TryGetComponent(earEntity, out _) && // I had initially wanted this to spawn the headset, and simply move all the keys over, but the headset didn't seem to have any keys in it when spawned... - entityManager.TryGetComponent(earEntity, out var fillComp) && - fillComp.Containers.TryGetValue(EncryptionKeyHolderComponent.KeyContainerName, out var defaultKeys)) - { - containerMan.CleanContainer(keyHolderComp.KeyContainer); + _container.CleanContainer(keyHolderComp.KeyContainer); - foreach (var key in defaultKeys) - { - var keyEntity = entityManager.SpawnEntity(key, entityManager.GetComponent(target).Coordinates); - containerMan.Insert(keyEntity, keyHolderComp.KeyContainer, force: true); - } - } + foreach (var key in defaultKeys) + entityManager.SpawnInContainerOrDrop(key, target, keyHolderComp.KeyContainer.ID, out _); - entityManager.QueueDeleteEntity(earEntity); - } - } + entityManager.QueueDeleteEntity(earEntity); } } diff --git a/Content.Server/Silicon/WeldingHealable/WeldingHealableComponent.cs b/Content.Server/Silicon/WeldingHealable/WeldingHealableComponent.cs index 115e9308707..9f4b6c3483f 100644 --- a/Content.Server/Silicon/WeldingHealable/WeldingHealableComponent.cs +++ b/Content.Server/Silicon/WeldingHealable/WeldingHealableComponent.cs @@ -1,9 +1,5 @@ -using Content.Shared.Damage; -using Content.Shared.Tools; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; +namespace Content.Server.Silicon.WeldingHealable; + +[RegisterComponent] +public sealed partial class WeldingHealableComponent : Component { } -namespace Content.Server.Silicon.WeldingHealable -{ - [RegisterComponent] - public sealed partial class WeldingHealableComponent : Component { } -} diff --git a/Content.Server/Silicon/WeldingHealable/WeldingHealableSystem.cs b/Content.Server/Silicon/WeldingHealable/WeldingHealableSystem.cs index 09a2ee99fcd..df7ac7ac0fd 100644 --- a/Content.Server/Silicon/WeldingHealable/WeldingHealableSystem.cs +++ b/Content.Server/Silicon/WeldingHealable/WeldingHealableSystem.cs @@ -1,121 +1,105 @@ -using System.Diagnostics; using Content.Server.Silicon.WeldingHealing; -using Content.Server.Administration.Logs; -using Content.Server.Stack; -using Content.Server.Tools.Components; -using Content.Shared.Silicon.WeldingHealing; using Content.Shared.Chemistry.Components; +using Content.Shared.Silicon.WeldingHealing; using Content.Shared.Chemistry.Components.SolutionManager; using Content.Shared.Chemistry.EntitySystems; using Content.Shared.Damage; -using Content.Shared.Database; -using Content.Shared.Eye.Blinding.Components; -using Content.Shared.Eye.Blinding.Systems; -using Content.Shared.FixedPoint; using Content.Shared.Interaction; using Content.Shared.Popups; -using Content.Shared.Tools; -using Content.Shared.Stacks; +using Content.Shared.Tools.Components; using SharedToolSystem = Content.Shared.Tools.Systems.SharedToolSystem; -namespace Content.Server.Silicon.WeldingHealable -{ - public sealed class WeldingHealableSystem : SharedWeldingHealableSystem - { - [Dependency] private readonly SharedToolSystem _toolSystem = default!; - [Dependency] private readonly DamageableSystem _damageableSystem = default!; - [Dependency] private readonly SharedPopupSystem _popup = default!; - [Dependency] private readonly IAdminLogManager _adminLogger= default!; - [Dependency] private readonly SharedSolutionContainerSystem _solutionContainer= default!; - - public override void Initialize() - { - SubscribeLocalEvent(Repair); - SubscribeLocalEvent(OnRepairFinished); - } - - private void OnRepairFinished(EntityUid uid, WeldingHealableComponent healableComponentcomponent, SiliconRepairFinishedEvent args) - { - if (args.Cancelled || args.Used == null - || !EntityManager.TryGetComponent(args.Target, out DamageableComponent? damageable) - || !EntityManager.TryGetComponent(args.Used, out WeldingHealingComponent? component) - || damageable.DamageContainerID != null - && !component.DamageContainers.Contains(damageable.DamageContainerID)) - return; - - var damageChanged = _damageableSystem.TryChangeDamage(uid, component.Damage, true, false, origin: args.User); - - - if (!HasDamage(damageable, component)) - return; - - if (TryComp(args.Used, out WelderComponent? welder) && - TryComp(args.Used, out SolutionContainerManagerComponent? solutionContainer)) - { - if (!_solutionContainer.ResolveSolution(((EntityUid) args.Used, solutionContainer), welder.FuelSolutionName, ref welder.FuelSolution, out var solution)) - return; - _solutionContainer.RemoveReagent(welder.FuelSolution.Value, welder.FuelReagent, component.FuelCost); - } - - var str = Loc.GetString("comp-repairable-repair", - ("target", uid), - ("tool", args.Used!)); - _popup.PopupEntity(str, uid, args.User); - - - if (args.Used.HasValue) - { - args.Handled = _toolSystem.UseTool(args.Used.Value, args.User, uid, args.Delay, component.QualityNeeded, new SiliconRepairFinishedEvent - { - Delay = args.Delay - }); - } - } - +namespace Content.Server.Silicon.WeldingHealable; +public sealed class WeldingHealableSystem : SharedWeldingHealableSystem +{ + [Dependency] private readonly SharedToolSystem _toolSystem = default!; + [Dependency] private readonly DamageableSystem _damageableSystem = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] private readonly SharedSolutionContainerSystem _solutionContainer = default!; - private async void Repair(EntityUid uid, WeldingHealableComponent healableComponent, InteractUsingEvent args) - { - if (args.Handled - || !EntityManager.TryGetComponent(args.Used, out WeldingHealingComponent? component) - || !EntityManager.TryGetComponent(args.Target, out DamageableComponent? damageable) - || damageable.DamageContainerID != null - && !component.DamageContainers.Contains(damageable.DamageContainerID) - || !HasDamage(damageable, component) - || !_toolSystem.HasQuality(args.Used, component.QualityNeeded)) - return; - - float delay = component.DoAfterDelay; + public override void Initialize() + { + SubscribeLocalEvent(Repair); + SubscribeLocalEvent(OnRepairFinished); + } - // Add a penalty to how long it takes if the user is repairing itself - if (args.User == args.Target) + private void OnRepairFinished(EntityUid uid, WeldingHealableComponent healableComponent, SiliconRepairFinishedEvent args) + { + if (args.Cancelled || args.Used == null + || !TryComp(args.Target, out var damageable) + || !TryComp(args.Used, out var component) + || damageable.DamageContainerID is null + || !component.DamageContainers.Contains(damageable.DamageContainerID) + || !HasDamage(damageable, component) + || !TryComp(args.Used, out var welder) + || !TryComp(args.Used, out var solutionContainer)) + return; + + _damageableSystem.TryChangeDamage(uid, component.Damage, true, false, origin: args.User); + + Entity? sol = new(); + if (!_solutionContainer.ResolveSolution(((EntityUid) args.Used, solutionContainer), welder.FuelSolutionName, ref sol, out _)) + return; + _solutionContainer.RemoveReagent(sol.Value, welder.FuelReagent, component.FuelCost); + + var str = Loc.GetString("comp-repairable-repair", + ("target", uid), + ("tool", args.Used!)); + _popup.PopupEntity(str, uid, args.User); + + if (!args.Used.HasValue) + return; + + args.Handled = _toolSystem.UseTool + (args.Used.Value, + args.User, + uid, + args.Delay, + component.QualityNeeded, + new SiliconRepairFinishedEvent { - if (!component.AllowSelfHeal) - return; - - delay *= component.SelfHealPenalty; - } + Delay = args.Delay + }); + } - // Run the repairing doafter - args.Handled = _toolSystem.UseTool(args.Used, args.User, args.Target, delay, component.QualityNeeded, new SiliconRepairFinishedEvent + private async void Repair(EntityUid uid, WeldingHealableComponent healableComponent, InteractUsingEvent args) + { + if (args.Handled + || !EntityManager.TryGetComponent(args.Used, out WeldingHealingComponent? component) + || !EntityManager.TryGetComponent(args.Target, out DamageableComponent? damageable) + || damageable.DamageContainerID is null + || !component.DamageContainers.Contains(damageable.DamageContainerID) + || !HasDamage(damageable, component) + || !_toolSystem.HasQuality(args.Used, component.QualityNeeded) + || args.User == args.Target && !component.AllowSelfHeal) + return; + + float delay = args.User == args.Target + ? component.DoAfterDelay * component.SelfHealPenalty + : component.DoAfterDelay; + + args.Handled = _toolSystem.UseTool + (args.Used, + args.User, + args.Target, + delay, + component.QualityNeeded, + new SiliconRepairFinishedEvent { Delay = delay, }); + } - } - private bool HasDamage(DamageableComponent component, WeldingHealingComponent healable) - { - var damageableDict = component.Damage.DamageDict; - var healingDict = healable.Damage.DamageDict; - foreach (var type in healingDict) - { - if (damageableDict[type.Key].Value > 0) - { - return true; - } - } - + private bool HasDamage(DamageableComponent component, WeldingHealingComponent healable) + { + if (healable.Damage.DamageDict is null) return false; - } + + foreach (var type in healable.Damage.DamageDict) + if (component.Damage.DamageDict[type.Key].Value > 0) + return true; + return false; } } + diff --git a/Content.Server/Silicon/WeldingHealing/WeldingHealingComponent.cs b/Content.Server/Silicon/WeldingHealing/WeldingHealingComponent.cs index c381d547180..a7aa1707938 100644 --- a/Content.Server/Silicon/WeldingHealing/WeldingHealingComponent.cs +++ b/Content.Server/Silicon/WeldingHealing/WeldingHealingComponent.cs @@ -2,47 +2,46 @@ using Content.Shared.Tools; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; -namespace Content.Server.Silicon.WeldingHealing +namespace Content.Server.Silicon.WeldingHealing; + +[RegisterComponent] +public sealed partial class WeldingHealingComponent : Component { - [RegisterComponent] - public sealed partial class WeldingHealingComponent : Component - { - /// - /// All the damage to change information is stored in this . - /// - /// - /// If this data-field is specified, it will change damage by this amount instead of setting all damage to 0. - /// in order to heal/repair the damage values have to be negative. - /// - - [DataField(required: true)] - public DamageSpecifier Damage; - - [DataField(customTypeSerializer:typeof(PrototypeIdSerializer))] - public string QualityNeeded = "Welding"; - - /// - /// The fuel amount needed to repair physical related damage - /// - [DataField] - public int FuelCost = 5; - - [DataField] - public int DoAfterDelay = 3; - - /// - /// A multiplier that will be applied to the above if an entity is repairing themselves. - /// - [DataField] - public float SelfHealPenalty = 3f; - - /// - /// Whether or not an entity is allowed to repair itself. - /// - [DataField] - public bool AllowSelfHeal = true; - - [DataField(required: true)] - public List DamageContainers; - } + /// + /// All the damage to change information is stored in this . + /// + /// + /// If this data-field is specified, it will change damage by this amount instead of setting all damage to 0. + /// in order to heal/repair the damage values have to be negative. + /// + + [DataField(required: true)] + public DamageSpecifier Damage; + + [DataField(customTypeSerializer:typeof(PrototypeIdSerializer))] + public string QualityNeeded = "Welding"; + + /// + /// The fuel amount needed to repair physical related damage + /// + [DataField] + public int FuelCost = 5; + + [DataField] + public int DoAfterDelay = 3; + + /// + /// A multiplier that will be applied to the above if an entity is repairing themselves. + /// + [DataField] + public float SelfHealPenalty = 3f; + + /// + /// Whether or not an entity is allowed to repair itself. + /// + [DataField] + public bool AllowSelfHeal = true; + + [DataField(required: true)] + public List DamageContainers; } diff --git a/Content.Server/Silicons/Borgs/BorgSystem.Transponder.cs b/Content.Server/Silicons/Borgs/BorgSystem.Transponder.cs new file mode 100644 index 00000000000..1c10cbe667e --- /dev/null +++ b/Content.Server/Silicons/Borgs/BorgSystem.Transponder.cs @@ -0,0 +1,107 @@ +using Content.Shared.DeviceNetwork; +using Content.Shared.Emag.Components; +using Content.Shared.Popups; +using Content.Shared.Robotics; +using Content.Shared.Silicons.Borgs.Components; +using Content.Server.DeviceNetwork; +using Content.Server.DeviceNetwork.Components; +using Content.Server.DeviceNetwork.Systems; +using Content.Server.Explosion.Components; + +namespace Content.Server.Silicons.Borgs; + +/// +public sealed partial class BorgSystem +{ + private void InitializeTransponder() + { + SubscribeLocalEvent(OnPacketReceived); + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + + var now = _timing.CurTime; + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var comp, out var chassis, out var device, out var meta)) + { + if (now < comp.NextBroadcast) + continue; + + var charge = 0f; + if (_powerCell.TryGetBatteryFromSlot(uid, out var battery)) + charge = battery.CurrentCharge / battery.MaxCharge; + + var data = new CyborgControlData( + comp.Sprite, + comp.Name, + meta.EntityName, + charge, + chassis.ModuleCount, + chassis.BrainEntity != null); + + var payload = new NetworkPayload() + { + [DeviceNetworkConstants.Command] = DeviceNetworkConstants.CmdUpdatedState, + [RoboticsConsoleConstants.NET_CYBORG_DATA] = data + }; + _deviceNetwork.QueuePacket(uid, null, payload, device: device); + + comp.NextBroadcast = now + comp.BroadcastDelay; + } + } + + private void OnPacketReceived(Entity ent, ref DeviceNetworkPacketEvent args) + { + var payload = args.Data; + if (!payload.TryGetValue(DeviceNetworkConstants.Command, out string? command)) + return; + + if (command == RoboticsConsoleConstants.NET_DISABLE_COMMAND) + Disable(ent); + else if (command == RoboticsConsoleConstants.NET_DESTROY_COMMAND) + Destroy(ent.Owner); + } + + private void Disable(Entity ent) + { + if (!Resolve(ent, ref ent.Comp2) || ent.Comp2.BrainEntity is not {} brain) + return; + + // this won't exactly be stealthy but if you are malf its better than actually disabling you + if (CheckEmagged(ent, "disabled")) + return; + + var message = Loc.GetString(ent.Comp1.DisabledPopup, ("name", Name(ent))); + Popup.PopupEntity(message, ent); + _container.Remove(brain, ent.Comp2.BrainContainer); + } + + private void Destroy(Entity ent) + { + if (!Resolve(ent, ref ent.Comp)) + return; + + // this is stealthy until someone realises you havent exploded + if (CheckEmagged(ent, "destroyed")) + { + // prevent reappearing on the console a few seconds later + RemComp(ent); + return; + } + + _explosion.TriggerExplosive(ent, ent.Comp, delete: false); + } + + private bool CheckEmagged(EntityUid uid, string name) + { + if (HasComp(uid)) + { + Popup.PopupEntity(Loc.GetString($"borg-transponder-emagged-{name}-popup"), uid, uid, PopupType.LargeCaution); + return true; + } + + return false; + } +} diff --git a/Content.Server/Silicons/Borgs/BorgSystem.Ui.cs b/Content.Server/Silicons/Borgs/BorgSystem.Ui.cs index 3dcdd78affa..d0e9f80e364 100644 --- a/Content.Server/Silicons/Borgs/BorgSystem.Ui.cs +++ b/Content.Server/Silicons/Borgs/BorgSystem.Ui.cs @@ -28,20 +28,19 @@ private void OnBeforeBorgUiOpen(EntityUid uid, BorgChassisComponent component, B private void OnEjectBrainBuiMessage(EntityUid uid, BorgChassisComponent component, BorgEjectBrainBuiMessage args) { - if (args.Session.AttachedEntity is not { } attachedEntity || component.BrainEntity is not { } brain) + if (component.BrainEntity is not { } brain) return; _adminLog.Add(LogType.Action, LogImpact.Medium, - $"{ToPrettyString(attachedEntity):player} removed brain {ToPrettyString(brain)} from borg {ToPrettyString(uid)}"); + $"{ToPrettyString(args.Actor):player} removed brain {ToPrettyString(brain)} from borg {ToPrettyString(uid)}"); _container.Remove(brain, component.BrainContainer); - _hands.TryPickupAnyHand(attachedEntity, brain); + _hands.TryPickupAnyHand(args.Actor, brain); UpdateUI(uid, component); } private void OnEjectBatteryBuiMessage(EntityUid uid, BorgChassisComponent component, BorgEjectBatteryBuiMessage args) { - if (args.Session.AttachedEntity is not { } attachedEntity || - !TryComp(uid, out var slotComp) || + if (!TryComp(uid, out var slotComp) || !Container.TryGetContainer(uid, slotComp.CellSlotId, out var container) || !container.ContainedEntities.Any()) { @@ -49,14 +48,11 @@ private void OnEjectBatteryBuiMessage(EntityUid uid, BorgChassisComponent compon } var ents = Container.EmptyContainer(container); - _hands.TryPickupAnyHand(attachedEntity, ents.First()); + _hands.TryPickupAnyHand(args.Actor, ents.First()); } private void OnSetNameBuiMessage(EntityUid uid, BorgChassisComponent component, BorgSetNameBuiMessage args) { - if (args.Session.AttachedEntity is not { } attachedEntity) - return; - if (args.Name.Length > HumanoidCharacterProfile.MaxNameLength || args.Name.Length == 0 || string.IsNullOrWhiteSpace(args.Name) || @@ -75,24 +71,21 @@ private void OnSetNameBuiMessage(EntityUid uid, BorgChassisComponent component, if (metaData.EntityName.Equals(name, StringComparison.InvariantCulture)) return; - _adminLog.Add(LogType.Action, LogImpact.High, $"{ToPrettyString(attachedEntity):player} set borg \"{ToPrettyString(uid)}\"'s name to: {name}"); + _adminLog.Add(LogType.Action, LogImpact.High, $"{ToPrettyString(args.Actor):player} set borg \"{ToPrettyString(uid)}\"'s name to: {name}"); _metaData.SetEntityName(uid, name, metaData); } private void OnRemoveModuleBuiMessage(EntityUid uid, BorgChassisComponent component, BorgRemoveModuleBuiMessage args) { - if (args.Session.AttachedEntity is not { } attachedEntity) - return; - var module = GetEntity(args.Module); if (!component.ModuleContainer.Contains(module)) return; _adminLog.Add(LogType.Action, LogImpact.Medium, - $"{ToPrettyString(attachedEntity):player} removed module {ToPrettyString(module)} from borg {ToPrettyString(uid)}"); + $"{ToPrettyString(args.Actor):player} removed module {ToPrettyString(module)} from borg {ToPrettyString(uid)}"); _container.Remove(module, component.ModuleContainer); - _hands.TryPickupAnyHand(attachedEntity, module); + _hands.TryPickupAnyHand(args.Actor, module); UpdateUI(uid, component); } @@ -111,6 +104,6 @@ public void UpdateUI(EntityUid uid, BorgChassisComponent? component = null) } var state = new BorgBuiState(chargePercent, hasBattery); - _ui.TrySetUiState(uid, BorgUiKey.Key, state); + _ui.SetUiState(uid, BorgUiKey.Key, state); } } diff --git a/Content.Server/Silicons/Borgs/BorgSystem.cs b/Content.Server/Silicons/Borgs/BorgSystem.cs index 869c2797047..75f25a3a922 100644 --- a/Content.Server/Silicons/Borgs/BorgSystem.cs +++ b/Content.Server/Silicons/Borgs/BorgSystem.cs @@ -1,6 +1,8 @@ using Content.Server.Actions; using Content.Server.Administration.Logs; using Content.Server.Administration.Managers; +using Content.Server.DeviceNetwork.Systems; +using Content.Server.Explosion.EntitySystems; using Content.Server.Hands.Systems; using Content.Server.PowerCell; using Content.Shared.UserInterface; @@ -26,6 +28,7 @@ using Robust.Shared.Containers; using Robust.Shared.Player; using Robust.Shared.Random; +using Robust.Shared.Timing; namespace Content.Server.Silicons.Borgs; @@ -34,10 +37,13 @@ public sealed partial class BorgSystem : SharedBorgSystem { [Dependency] private readonly IAdminLogManager _adminLog = default!; [Dependency] private readonly IBanManager _banManager = default!; + [Dependency] private readonly IGameTiming _timing = default!; [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly SharedAccessSystem _access = default!; [Dependency] private readonly ActionsSystem _actions = default!; [Dependency] private readonly AlertsSystem _alerts = default!; + [Dependency] private readonly DeviceNetworkSystem _deviceNetwork = default!; + [Dependency] private readonly ExplosionSystem _explosion = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly HandsSystem _hands = default!; [Dependency] private readonly MetaDataSystem _metaData = default!; @@ -73,6 +79,7 @@ public override void Initialize() InitializeModules(); InitializeMMI(); InitializeUI(); + InitializeTransponder(); } private void OnMapInit(EntityUid uid, BorgChassisComponent component, MapInitEvent args) diff --git a/Content.Server/Silicons/Laws/SiliconLawSystem.cs b/Content.Server/Silicons/Laws/SiliconLawSystem.cs index 010682bc0d3..bc7a7b35c27 100644 --- a/Content.Server/Silicons/Laws/SiliconLawSystem.cs +++ b/Content.Server/Silicons/Laws/SiliconLawSystem.cs @@ -55,7 +55,6 @@ public override void Initialize() SubscribeLocalEvent(OnEmagLawsAdded); SubscribeLocalEvent(OnEmagMindAdded); SubscribeLocalEvent(OnEmagMindRemoved); - SubscribeLocalEvent(OnExamined); } private void OnComponentShutdown(EntityUid uid, SiliconLawBoundComponent component, ComponentShutdown args) @@ -93,10 +92,10 @@ private void OnToggleLawsScreen(EntityUid uid, SiliconLawBoundComponent componen private void OnBoundUIOpened(EntityUid uid, SiliconLawBoundComponent component, BoundUIOpenedEvent args) { _entityManager.TryGetComponent(uid, out var intrinsicRadio); - HashSet? radioChannels = intrinsicRadio?.Channels; + var radioChannels = intrinsicRadio?.Channels; var state = new SiliconLawBuiState(GetLaws(uid).Laws, radioChannels); - _userInterface.TrySetUiState(args.Entity, SiliconLawsUiKey.Key, state, args.Session); + _userInterface.SetUiState(args.Entity, SiliconLawsUiKey.Key, state); } private void OnPlayerSpawnComplete(EntityUid uid, SiliconLawBoundComponent component, PlayerSpawnCompleteEvent args) @@ -155,17 +154,6 @@ private void OnEmagLawsAdded(EntityUid uid, SiliconLawProviderComponent componen }); } - private void OnExamined(EntityUid uid, EmagSiliconLawComponent component, ExaminedEvent args) - { - if (!args.IsInDetailsRange || !HasComp(uid)) - return; - - if (component.RequireOpenPanel && TryComp(uid, out var panel) && !panel.Open) - return; - - args.PushMarkup(Loc.GetString("laws-compromised-examine")); - } - protected override void OnGotEmagged(EntityUid uid, EmagSiliconLawComponent component, ref GotEmaggedEvent args) { if (component.RequireOpenPanel && TryComp(uid, out var panel) && !panel.Open) diff --git a/Content.Server/Singularity/EntitySystems/EmitterSystem.cs b/Content.Server/Singularity/EntitySystems/EmitterSystem.cs index a9763b64d90..652ca236e44 100644 --- a/Content.Server/Singularity/EntitySystems/EmitterSystem.cs +++ b/Content.Server/Singularity/EntitySystems/EmitterSystem.cs @@ -1,6 +1,7 @@ using System.Numerics; using System.Threading; using Content.Server.Administration.Logs; +using Content.Server.Construction; using Content.Server.DeviceLinking.Events; using Content.Server.Power.Components; using Content.Server.Power.EntitySystems; @@ -47,6 +48,8 @@ public override void Initialize() SubscribeLocalEvent(OnInteractHand); SubscribeLocalEvent>(OnGetVerb); SubscribeLocalEvent(OnExamined); + SubscribeLocalEvent(OnRefreshParts); + SubscribeLocalEvent(OnUpgradeExamine); SubscribeLocalEvent(OnAnchorStateChanged); SubscribeLocalEvent(OnSignalReceived); } @@ -176,6 +179,20 @@ private void OnApcChanged(EntityUid uid, EmitterComponent component, ref PowerCh } } + private void OnRefreshParts(EntityUid uid, EmitterComponent component, RefreshPartsEvent args) + { + var fireRateRating = args.PartRatings[component.MachinePartFireRate]; + + component.FireInterval = component.BaseFireInterval * MathF.Pow(component.FireRateMultiplier, fireRateRating - 1); + component.FireBurstDelayMin = component.BaseFireBurstDelayMin * MathF.Pow(component.FireRateMultiplier, fireRateRating - 1); + component.FireBurstDelayMax = component.BaseFireBurstDelayMax * MathF.Pow(component.FireRateMultiplier, fireRateRating - 1); + } + + private void OnUpgradeExamine(EntityUid uid, EmitterComponent component, UpgradeExamineEvent args) + { + args.AddPercentageUpgrade("emitter-component-upgrade-fire-rate", (float) (component.BaseFireInterval.TotalSeconds / component.FireInterval.TotalSeconds)); + } + public void SwitchOff(EntityUid uid, EmitterComponent component) { component.IsOn = false; diff --git a/Content.Server/Singularity/EntitySystems/GravityWellSystem.cs b/Content.Server/Singularity/EntitySystems/GravityWellSystem.cs index f1d0af6f905..779b2f59719 100644 --- a/Content.Server/Singularity/EntitySystems/GravityWellSystem.cs +++ b/Content.Server/Singularity/EntitySystems/GravityWellSystem.cs @@ -1,3 +1,4 @@ +using System.Numerics; using Content.Server.Atmos.Components; using Content.Server.Singularity.Components; using Content.Shared.Ghost; @@ -126,7 +127,7 @@ private bool CanGravPulseAffect(EntityUid entity) /// The minimum distance at which entities can be affected by the gravity pulse. /// The base velocity added to any entities within affected by the gravity pulse scaled by the displacement of those entities from the epicenter. /// (optional) The transform of the entity at the epicenter of the gravitational pulse. - public void GravPulse(EntityUid uid, float maxRange, float minRange, in Matrix3 baseMatrixDeltaV, TransformComponent? xform = null) + public void GravPulse(EntityUid uid, float maxRange, float minRange, in Matrix3x2 baseMatrixDeltaV, TransformComponent? xform = null) { if (Resolve(uid, ref xform)) GravPulse(xform.Coordinates, maxRange, minRange, in baseMatrixDeltaV); @@ -154,7 +155,7 @@ public void GravPulse(EntityUid uid, float maxRange, float minRange, float baseR /// The maximum distance at which entities can be affected by the gravity pulse. /// The minimum distance at which entities can be affected by the gravity pulse. /// The base velocity added to any entities within affected by the gravity pulse scaled by the displacement of those entities from the epicenter. - public void GravPulse(EntityCoordinates entityPos, float maxRange, float minRange, in Matrix3 baseMatrixDeltaV) + public void GravPulse(EntityCoordinates entityPos, float maxRange, float minRange, in Matrix3x2 baseMatrixDeltaV) => GravPulse(entityPos.ToMap(EntityManager, _transform), maxRange, minRange, in baseMatrixDeltaV); /// @@ -175,7 +176,7 @@ public void GravPulse(EntityCoordinates entityPos, float maxRange, float minRang /// The maximum distance at which entities can be affected by the gravity pulse. /// The minimum distance at which entities can be affected by the gravity pulse. Exists to prevent div/0 errors. /// The base velocity added to any entities within affected by the gravity pulse scaled by the displacement of those entities from the epicenter. - public void GravPulse(MapCoordinates mapPos, float maxRange, float minRange, in Matrix3 baseMatrixDeltaV) + public void GravPulse(MapCoordinates mapPos, float maxRange, float minRange, in Matrix3x2 baseMatrixDeltaV) { if (mapPos == MapCoordinates.Nullspace) return; // No gravpulses in nullspace please. @@ -205,7 +206,7 @@ public void GravPulse(MapCoordinates mapPos, float maxRange, float minRange, in continue; var scaling = (1f / distance2) * physics.Mass; // TODO: Variable falloff gradiants. - _physics.ApplyLinearImpulse(entity, (displacement * baseMatrixDeltaV) * scaling, body: physics); + _physics.ApplyLinearImpulse(entity, Vector2.Transform(displacement, baseMatrixDeltaV) * scaling, body: physics); } } @@ -218,10 +219,9 @@ public void GravPulse(MapCoordinates mapPos, float maxRange, float minRange, in /// The base amount of velocity that will be added to entities in range towards the epicenter of the pulse. /// The base amount of velocity that will be added to entities in range counterclockwise relative to the epicenter of the pulse. public void GravPulse(MapCoordinates mapPos, float maxRange, float minRange = 0.0f, float baseRadialDeltaV = 0.0f, float baseTangentialDeltaV = 0.0f) - => GravPulse(mapPos, maxRange, minRange, new Matrix3( - baseRadialDeltaV, +baseTangentialDeltaV, 0.0f, - -baseTangentialDeltaV, baseRadialDeltaV, 0.0f, - 0.0f, 0.0f, 1.0f + => GravPulse(mapPos, maxRange, minRange, new Matrix3x2( + baseRadialDeltaV, -baseTangentialDeltaV, 0.0f, + +baseTangentialDeltaV, baseRadialDeltaV, 0.0f )); #endregion GravPulse diff --git a/Content.Server/Singularity/EntitySystems/RadiationCollectorSystem.cs b/Content.Server/Singularity/EntitySystems/RadiationCollectorSystem.cs index b26ab301c64..9107ff2e32e 100644 --- a/Content.Server/Singularity/EntitySystems/RadiationCollectorSystem.cs +++ b/Content.Server/Singularity/EntitySystems/RadiationCollectorSystem.cs @@ -151,7 +151,8 @@ private void OnAnalyzed(EntityUid uid, RadiationCollectorComponent component, Ga if (!TryGetLoadedGasTank(uid, out var gasTankComponent)) return; - args.GasMixtures = new Dictionary { { Name(uid), gasTankComponent.Air } }; + args.GasMixtures ??= new List<(string, GasMixture?)>(); + args.GasMixtures.Add((Name(uid), gasTankComponent.Air)); } public void ToggleCollector(EntityUid uid, EntityUid? user = null, RadiationCollectorComponent? component = null) diff --git a/Content.Server/Solar/EntitySystems/PowerSolarControlConsoleSystem.cs b/Content.Server/Solar/EntitySystems/PowerSolarControlConsoleSystem.cs index 179cadcfbcb..dd3f0c00543 100644 --- a/Content.Server/Solar/EntitySystems/PowerSolarControlConsoleSystem.cs +++ b/Content.Server/Solar/EntitySystems/PowerSolarControlConsoleSystem.cs @@ -35,13 +35,13 @@ public override void Update(float frameTime) _updateTimer -= 1; var state = new SolarControlConsoleBoundInterfaceState(_powerSolarSystem.TargetPanelRotation, _powerSolarSystem.TargetPanelVelocity, _powerSolarSystem.TotalPanelPower, _powerSolarSystem.TowardsSun); var query = EntityQueryEnumerator(); - while (query.MoveNext(out var uid, out var _, out var uiComp)) + while (query.MoveNext(out var uid, out _, out var uiComp)) { - _uiSystem.TrySetUiState(uid, SolarControlConsoleUiKey.Key, state, ui: uiComp); + _uiSystem.SetUiState((uid, uiComp), SolarControlConsoleUiKey.Key, state); } } } - + private void OnUIMessage(EntityUid uid, SolarControlConsoleComponent component, SolarControlConsoleAdjustMessage msg) { if (double.IsFinite(msg.Rotation)) diff --git a/Content.Server/Spawners/Components/ConditionalSpawnerComponent.cs b/Content.Server/Spawners/Components/ConditionalSpawnerComponent.cs index 5b98989bb3e..1b06367b0d8 100644 --- a/Content.Server/Spawners/Components/ConditionalSpawnerComponent.cs +++ b/Content.Server/Spawners/Components/ConditionalSpawnerComponent.cs @@ -2,7 +2,7 @@ namespace Content.Server.Spawners.Components { - [RegisterComponent] + [RegisterComponent, EntityCategory("Spawner")] [Virtual] public partial class ConditionalSpawnerComponent : Component { diff --git a/Content.Server/Spawners/Components/RandomSpawnerComponent.cs b/Content.Server/Spawners/Components/RandomSpawnerComponent.cs index 9bf4d6d2531..e6a597f3658 100644 --- a/Content.Server/Spawners/Components/RandomSpawnerComponent.cs +++ b/Content.Server/Spawners/Components/RandomSpawnerComponent.cs @@ -2,7 +2,7 @@ namespace Content.Server.Spawners.Components { - [RegisterComponent] + [RegisterComponent, EntityCategory("Spawner")] public sealed partial class RandomSpawnerComponent : ConditionalSpawnerComponent { [ViewVariables(VVAccess.ReadWrite)] diff --git a/Content.Server/Spawners/Components/TimedSpawnerComponent.cs b/Content.Server/Spawners/Components/TimedSpawnerComponent.cs index b60afbc88ba..828e5417177 100644 --- a/Content.Server/Spawners/Components/TimedSpawnerComponent.cs +++ b/Content.Server/Spawners/Components/TimedSpawnerComponent.cs @@ -9,7 +9,7 @@ namespace Content.Server.Spawners.Components; /// Can configure the set of entities, spawn timing, spawn chance, /// and min/max number of entities to spawn. /// -[RegisterComponent] +[RegisterComponent, EntityCategory("Spawner")] public sealed partial class TimedSpawnerComponent : Component, ISerializationHooks { /// diff --git a/Content.Server/Speech/Components/ListenWireAction.cs b/Content.Server/Speech/Components/ListenWireAction.cs index 68d2201862c..b8b1c19e84b 100644 --- a/Content.Server/Speech/Components/ListenWireAction.cs +++ b/Content.Server/Speech/Components/ListenWireAction.cs @@ -1,9 +1,12 @@ -using Content.Server.Speech.Components; using Content.Server.Chat.Systems; -using Content.Server.VoiceMask; +using Content.Shared.Radio; +using Content.Server.Radio.Components; +using Content.Server.Radio.EntitySystems; +using Content.Server.Speech.Components; using Content.Server.Wires; -using Content.Shared.Speech; using Content.Shared.Wires; +using Content.Shared.Speech; +using Robust.Shared.Prototypes; namespace Content.Server.Speech; @@ -11,17 +14,13 @@ public sealed partial class ListenWireAction : BaseToggleWireAction { private WiresSystem _wires = default!; private ChatSystem _chat = default!; + private RadioSystem _radio = default!; + private IPrototypeManager _protoMan = default!; /// /// Length of the gibberish string sent when pulsing the wire /// private const int NoiseLength = 16; - - /// - /// Identifier of the SpeechVerbPrototype to use when pulsing the wire - /// - [ValidatePrototypeId] - private const string SpeechVerb = "Electricity"; public override Color Color { get; set; } = Color.Green; public override string Name { get; set; } = "wire-name-listen"; @@ -37,6 +36,8 @@ public override void Initialize() _wires = EntityManager.System(); _chat = EntityManager.System(); + _radio = EntityManager.System(); + _protoMan = IoCManager.Resolve(); } public override StatusLightState? GetLightState(Wire wire) { @@ -72,46 +73,20 @@ public override void Pulse(EntityUid user, Wire wire) if (!GetValue(wire.Owner) || !IsPowered(wire.Owner)) return; - // We have to use a valid euid in the ListenEvent. The user seems - // like a sensible choice, but we need to mask their name. - - // Save the user's existing voicemask if they have one - var oldEnabled = true; - var oldVoiceName = Loc.GetString("wire-listen-pulse-error-name"); - string? oldSpeechVerb = null; - if (EntityManager.TryGetComponent(user, out var oldMask)) - { - oldEnabled = oldMask.Enabled; - oldVoiceName = oldMask.VoiceName; - oldSpeechVerb = oldMask.SpeechVerb; - } - - // Give the user a temporary voicemask component - var mask = EntityManager.EnsureComponent(user); - mask.Enabled = true; - mask.VoiceName = Loc.GetString("wire-listen-pulse-identifier"); - mask.SpeechVerb = SpeechVerb; - var chars = Loc.GetString("wire-listen-pulse-characters").ToCharArray(); var noiseMsg = _chat.BuildGibberishString(chars, NoiseLength); - var attemptEv = new ListenAttemptEvent(wire.Owner); - EntityManager.EventBus.RaiseLocalEvent(wire.Owner, attemptEv); - if (!attemptEv.Cancelled) - { - var ev = new ListenEvent(noiseMsg, user); - EntityManager.EventBus.RaiseLocalEvent(wire.Owner, ev); - } + if (!EntityManager.TryGetComponent(wire.Owner, out var radioMicroPhoneComp)) + return; - // Remove the voicemask component, or set it back to what it was before - if (oldMask == null) - EntityManager.RemoveComponent(user, mask); - else - { - mask.Enabled = oldEnabled; - mask.VoiceName = oldVoiceName; - mask.SpeechVerb = oldSpeechVerb; - } + if (!EntityManager.TryGetComponent(wire.Owner, out var voiceOverrideComp)) + return; + + // The reason for the override is to make the voice sound like its coming from electrity rather than the intercom. + voiceOverrideComp.NameOverride = Loc.GetString("wire-listen-pulse-identifier"); + voiceOverrideComp.Enabled = true; + _radio.SendRadioMessage(wire.Owner, noiseMsg, _protoMan.Index(radioMicroPhoneComp.BroadcastChannel), wire.Owner); + voiceOverrideComp.Enabled = false; base.Pulse(user, wire); } diff --git a/Content.Server/Speech/Components/PirateAccentComponent.cs b/Content.Server/Speech/Components/PirateAccentComponent.cs index 0559d9854b8..b5b292775dc 100644 --- a/Content.Server/Speech/Components/PirateAccentComponent.cs +++ b/Content.Server/Speech/Components/PirateAccentComponent.cs @@ -15,6 +15,7 @@ public sealed partial class PirateAccentComponent : Component { "accent-pirate-prefix-1", "accent-pirate-prefix-2", - "accent-pirate-prefix-3" + "accent-pirate-prefix-3", + "accent-pirate-prefix-4", }; } diff --git a/Content.Server/Speech/Components/RandomBarkComponent.cs b/Content.Server/Speech/Components/RandomBarkComponent.cs index 7229428f538..470e49e7fa5 100644 --- a/Content.Server/Speech/Components/RandomBarkComponent.cs +++ b/Content.Server/Speech/Components/RandomBarkComponent.cs @@ -37,27 +37,15 @@ public sealed partial class RandomBarkComponent : Component public float BarkMultiplier = 1f; /// - /// List of things to be said. Filled with garbage to be modified by an accent, but can be specified in the .yml + /// Bark type, for use in locales. Locale keys follow the format "bark-{type}-{index between 1 and BarkLocaleCount}". /// [DataField] - public IReadOnlyList Barks = new[] - { - "Bark", - "Boof", - "Woofums", - "Rawrl", - "Eeeeeee", - "Barkums", - "Awooooooooooooooooooo awoo awoooo", - "Grrrrrrrrrrrrrrrrrr", - "Rarrwrarrwr", - "Goddamn I love gold fish crackers", - "Bork bork boof boof bork bork boof boof boof bork", - "Bark", - "Boof", - "Woofums", - "Rawrl", - "Eeeeeee", - "Barkums", - }; + public string BarkType = "default"; + + /// + /// Number of bark locales. If not specified, then it will be figured out by fetching the locale string + /// with the key "bark-{type}-count" and parsing it as an integer. + /// + [DataField] + public int? BarkLocaleCount = null; } diff --git a/Content.Server/Speech/Components/ReplacementAccentComponent.cs b/Content.Server/Speech/Components/ReplacementAccentComponent.cs index ac4e9fbafef..e7f57b80d04 100644 --- a/Content.Server/Speech/Components/ReplacementAccentComponent.cs +++ b/Content.Server/Speech/Components/ReplacementAccentComponent.cs @@ -32,5 +32,11 @@ public sealed partial class ReplacementAccentComponent : Component { [DataField("accent", customTypeSerializer: typeof(PrototypeIdSerializer), required: true)] public string Accent = default!; + + /// + /// Allows you to substitute words, not always, but with some chance + /// + [DataField] + public float ReplacementChance = 1f; } } diff --git a/Content.Server/Speech/Components/VoiceOverrideComponent.cs b/Content.Server/Speech/Components/VoiceOverrideComponent.cs new file mode 100644 index 00000000000..70deba5ba55 --- /dev/null +++ b/Content.Server/Speech/Components/VoiceOverrideComponent.cs @@ -0,0 +1,35 @@ +using Content.Shared.Speech; +using Robust.Shared.Prototypes; + +namespace Content.Server.Speech.Components; + +/// +/// Will change the voice of the entity that has the component (e.g radio and speech). +/// +/// +/// Before using this component, please take a look at the the TransformSpeakerNameEvent (and the inventory relay version). +/// Depending on what you're doing, it could be a better choice! +/// +[RegisterComponent] +public sealed partial class VoiceOverrideComponent : Component +{ + /// + /// The name that will be used instead of an entities default one. + /// Uses the localized version of the string and if null wont do anything. + /// + [DataField] + public string? NameOverride = null; + + /// + /// The verb that will be used insteand of an entities default one. + /// If null, the defaut will be used. + /// + [DataField] + public ProtoId? SpeechVerbOverride = null; + + /// + /// If true, the override values (if they are not null) will be applied. + /// + [DataField] + public bool Enabled = true; +} diff --git a/Content.Server/Speech/EmotesMenuSystem.cs b/Content.Server/Speech/EmotesMenuSystem.cs new file mode 100644 index 00000000000..a69b5a65e43 --- /dev/null +++ b/Content.Server/Speech/EmotesMenuSystem.cs @@ -0,0 +1,30 @@ +using Content.Server.Chat.Systems; +using Content.Shared.Chat; +using Robust.Shared.Prototypes; + +namespace Content.Server.Speech; + +public sealed partial class EmotesMenuSystem : EntitySystem +{ + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + [Dependency] private readonly ChatSystem _chat = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeAllEvent(OnPlayEmote); + } + + private void OnPlayEmote(PlayEmoteMessage msg, EntitySessionEventArgs args) + { + var player = args.SenderSession.AttachedEntity; + if (!player.HasValue) + return; + + if (!_prototypeManager.TryIndex(msg.ProtoId, out var proto) || proto.ChatTriggers.Count == 0) + return; + + _chat.TryEmoteWithChat(player.Value, msg.ProtoId); + } +} diff --git a/Content.Server/Speech/EntitySystems/AddAccentClothingSystem.cs b/Content.Server/Speech/EntitySystems/AddAccentClothingSystem.cs index 1f707c2249c..897cd061f42 100644 --- a/Content.Server/Speech/EntitySystems/AddAccentClothingSystem.cs +++ b/Content.Server/Speech/EntitySystems/AddAccentClothingSystem.cs @@ -1,6 +1,5 @@ using Content.Server.Speech.Components; -using Content.Shared.Clothing.Components; -using Content.Shared.Inventory.Events; +using Content.Shared.Clothing; namespace Content.Server.Speech.EntitySystems; @@ -11,29 +10,20 @@ public sealed class AddAccentClothingSystem : EntitySystem public override void Initialize() { base.Initialize(); - SubscribeLocalEvent(OnGotEquipped); - SubscribeLocalEvent(OnGotUnequipped); + SubscribeLocalEvent(OnGotEquipped); + SubscribeLocalEvent(OnGotUnequipped); } - private void OnGotEquipped(EntityUid uid, AddAccentClothingComponent component, GotEquippedEvent args) + private void OnGotEquipped(EntityUid uid, AddAccentClothingComponent component, ref ClothingGotEquippedEvent args) { - if (!TryComp(uid, out ClothingComponent? clothing)) - return; - - // check if entity was actually used as clothing - // not just taken in pockets or something - var isCorrectSlot = clothing.Slots.HasFlag(args.SlotFlags); - if (!isCorrectSlot) - return; - // does the user already has this accent? var componentType = _componentFactory.GetRegistration(component.Accent).Type; - if (HasComp(args.Equipee, componentType)) + if (HasComp(args.Wearer, componentType)) return; // add accent to the user var accentComponent = (Component) _componentFactory.GetComponent(componentType); - AddComp(args.Equipee, accentComponent); + AddComp(args.Wearer, accentComponent); // snowflake case for replacement accent if (accentComponent is ReplacementAccentComponent rep) @@ -42,16 +32,16 @@ private void OnGotEquipped(EntityUid uid, AddAccentClothingComponent component, component.IsActive = true; } - private void OnGotUnequipped(EntityUid uid, AddAccentClothingComponent component, GotUnequippedEvent args) + private void OnGotUnequipped(EntityUid uid, AddAccentClothingComponent component, ref ClothingGotUnequippedEvent args) { if (!component.IsActive) return; // try to remove accent var componentType = _componentFactory.GetRegistration(component.Accent).Type; - if (EntityManager.HasComponent(args.Equipee, componentType)) + if (EntityManager.HasComponent(args.Wearer, componentType)) { - EntityManager.RemoveComponent(args.Equipee, componentType); + EntityManager.RemoveComponent(args.Wearer, componentType); } component.IsActive = false; diff --git a/Content.Server/Speech/EntitySystems/FrenchAccentSystem.cs b/Content.Server/Speech/EntitySystems/FrenchAccentSystem.cs index 56372887325..f6d259c1153 100644 --- a/Content.Server/Speech/EntitySystems/FrenchAccentSystem.cs +++ b/Content.Server/Speech/EntitySystems/FrenchAccentSystem.cs @@ -10,6 +10,10 @@ public sealed class FrenchAccentSystem : EntitySystem { [Dependency] private readonly ReplacementAccentSystem _replacement = default!; + private static readonly Regex RegexTh = new(@"th", RegexOptions.IgnoreCase); + private static readonly Regex RegexStartH = new(@"(? DirectReplacements = new() - { - { "let me", "lemme" }, - { "should", "oughta" }, - { "the", "da" }, - { "them", "dem" }, - { "attack", "whack" }, - { "kill", "whack" }, - { "murder", "whack" }, - { "dead", "sleepin' with da fishies"}, - { "hey", "ey'o" }, - { "hi", "ey'o"}, - { "hello", "ey'o"}, - { "rules", "roolz" }, - { "you", "yous" }, - { "have to", "gotta" }, - { "going to", "boutta" }, - { "about to", "boutta" }, - { "here", "'ere" } - }; - public override void Initialize() { base.Initialize(); @@ -49,20 +36,30 @@ public string Accentuate(string message, MobsterAccentComponent component) // thinking -> thinkin' // king -> king - msg = Regex.Replace(msg, @"(?<=\w\w)ing(?!\w)", "in'", RegexOptions.IgnoreCase); + //Uses captures groups to make sure the captialization of IN is kept + msg = RegexIng.Replace(msg, "$1'"); // or -> uh and ar -> ah in the middle of words (fuhget, tahget) - msg = Regex.Replace(msg, @"(?<=\w)or(?=\w)", "uh", RegexOptions.IgnoreCase); - msg = Regex.Replace(msg, @"(?<=\w)ar(?=\w)", "ah", RegexOptions.IgnoreCase); + msg = RegexLowerOr.Replace(msg, "uh"); + msg = RegexUpperOr.Replace(msg, "UH"); + msg = RegexLowerAr.Replace(msg, "ah"); + msg = RegexUpperAr.Replace(msg, "AH"); // Prefix if (_random.Prob(0.15f)) { + //Checks if the first word of the sentence is all caps + //So the prefix can be allcapped and to not resanitize the captial + var firstWordAllCaps = !RegexFirstWord.Match(msg).Value.Any(char.IsLower); var pick = _random.Next(1, 2); // Reverse sanitize capital - msg = msg[0].ToString().ToLower() + msg.Remove(0, 1); - msg = Loc.GetString($"accent-mobster-prefix-{pick}") + " " + msg; + var prefix = Loc.GetString($"accent-mobster-prefix-{pick}"); + if (!firstWordAllCaps) + msg = msg[0].ToString().ToLower() + msg.Remove(0, 1); + else + prefix = prefix.ToUpper(); + msg = prefix + " " + msg; } // Sanitize capital again, in case we substituted a word that should be capitalized @@ -71,16 +68,23 @@ public string Accentuate(string message, MobsterAccentComponent component) // Suffixes if (_random.Prob(0.4f)) { + //Checks if the last word of the sentence is all caps + //So the suffix can be allcapped + var lastWordAllCaps = !RegexLastWord.Match(msg).Value.Any(char.IsLower); + var suffix = ""; if (component.IsBoss) { var pick = _random.Next(1, 4); - msg += Loc.GetString($"accent-mobster-suffix-boss-{pick}"); + suffix = Loc.GetString($"accent-mobster-suffix-boss-{pick}"); } else { var pick = _random.Next(1, 3); - msg += Loc.GetString($"accent-mobster-suffix-minion-{pick}"); + suffix = Loc.GetString($"accent-mobster-suffix-minion-{pick}"); } + if (lastWordAllCaps) + suffix = suffix.ToUpper(); + msg += suffix; } return msg; diff --git a/Content.Server/Speech/EntitySystems/MothAccentSystem.cs b/Content.Server/Speech/EntitySystems/MothAccentSystem.cs index 3de4651b4af..84b79d4ce98 100644 --- a/Content.Server/Speech/EntitySystems/MothAccentSystem.cs +++ b/Content.Server/Speech/EntitySystems/MothAccentSystem.cs @@ -5,6 +5,9 @@ namespace Content.Server.Speech.EntitySystems; public sealed class MothAccentSystem : EntitySystem { + private static readonly Regex RegexLowerBuzz = new Regex("z{1,3}"); + private static readonly Regex RegexUpperBuzz = new Regex("Z{1,3}"); + public override void Initialize() { base.Initialize(); @@ -16,10 +19,10 @@ private void OnAccent(EntityUid uid, MothAccentComponent component, AccentGetEve var message = args.Message; // buzzz - message = Regex.Replace(message, "z{1,3}", "zzz"); + message = RegexLowerBuzz.Replace(message, "zzz"); // buZZZ - message = Regex.Replace(message, "Z{1,3}", "ZZZ"); - + message = RegexUpperBuzz.Replace(message, "ZZZ"); + args.Message = message; } } diff --git a/Content.Server/Speech/EntitySystems/ParrotAccentSystem.cs b/Content.Server/Speech/EntitySystems/ParrotAccentSystem.cs index 10437c235d6..ae8fe522b9b 100644 --- a/Content.Server/Speech/EntitySystems/ParrotAccentSystem.cs +++ b/Content.Server/Speech/EntitySystems/ParrotAccentSystem.cs @@ -7,6 +7,8 @@ namespace Content.Server.Speech.EntitySystems; public sealed partial class ParrotAccentSystem : EntitySystem { + private static readonly Regex WordCleanupRegex = new Regex("[^A-Za-z0-9 -]"); + [Dependency] private readonly IRobustRandom _random = default!; public override void Initialize() @@ -27,7 +29,7 @@ public string Accentuate(Entity entity, string message) if (_random.Prob(entity.Comp.LongestWordRepeatChance)) { // Don't count non-alphanumeric characters as parts of words - var cleaned = Regex.Replace(message, "[^A-Za-z0-9 -]", string.Empty); + var cleaned = WordCleanupRegex.Replace(message, string.Empty); // Split on whitespace and favor words towards the end of the message var words = cleaned.Split(null).Reverse(); // Find longest word diff --git a/Content.Server/Speech/EntitySystems/PirateAccentSystem.cs b/Content.Server/Speech/EntitySystems/PirateAccentSystem.cs index f1d64ede101..84298cbf01a 100644 --- a/Content.Server/Speech/EntitySystems/PirateAccentSystem.cs +++ b/Content.Server/Speech/EntitySystems/PirateAccentSystem.cs @@ -1,3 +1,4 @@ +using System.Linq; using Content.Server.Speech.Components; using Robust.Shared.Random; using System.Text.RegularExpressions; @@ -6,6 +7,8 @@ namespace Content.Server.Speech.EntitySystems; public sealed class PirateAccentSystem : EntitySystem { + private static readonly Regex FirstWordAllCapsRegex = new(@"^(\S+)"); + [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly ReplacementAccentSystem _replacement = default!; @@ -19,17 +22,22 @@ public override void Initialize() // converts left word when typed into the right word. For example typing you becomes ye. public string Accentuate(string message, PirateAccentComponent component) { - var msg = message; - - msg = _replacement.ApplyReplacements(msg, "pirate"); + var msg = _replacement.ApplyReplacements(message, "pirate"); if (!_random.Prob(component.YarrChance)) return msg; + //Checks if the first word of the sentence is all caps + //So the prefix can be allcapped and to not resanitize the captial + var firstWordAllCaps = !FirstWordAllCapsRegex.Match(msg).Value.Any(char.IsLower); var pick = _random.Pick(component.PirateWords); + var pirateWord = Loc.GetString(pick); // Reverse sanitize capital - msg = msg[0].ToString().ToLower() + msg.Remove(0, 1); - msg = Loc.GetString(pick) + " " + msg; + if (!firstWordAllCaps) + msg = msg[0].ToString().ToLower() + msg.Remove(0, 1); + else + pirateWord = pirateWord.ToUpper(); + msg = pirateWord + " " + msg; return msg; } diff --git a/Content.Server/Speech/EntitySystems/ReplacementAccentSystem.cs b/Content.Server/Speech/EntitySystems/ReplacementAccentSystem.cs index 36fa7e07ad5..da198bcc12b 100644 --- a/Content.Server/Speech/EntitySystems/ReplacementAccentSystem.cs +++ b/Content.Server/Speech/EntitySystems/ReplacementAccentSystem.cs @@ -24,6 +24,9 @@ public override void Initialize() private void OnAccent(EntityUid uid, ReplacementAccentComponent component, AccentGetEvent args) { + if (!_random.Prob(component.ReplacementChance)) + return; + args.Message = ApplyReplacements(args.Message, component.Accent); } @@ -46,6 +49,12 @@ public string ApplyReplacements(string message, string accent) if (prototype.WordReplacements == null) return message; + // Prohibition of repeated word replacements. + // All replaced words placed in the final message are placed here as dashes (___) with the same length. + // The regex search goes through this buffer message, from which the already replaced words are crossed out, + // ensuring that the replaced words cannot be replaced again. + var maskMessage = message; + foreach (var (first, replace) in prototype.WordReplacements) { var f = _loc.GetString(first); @@ -53,10 +62,10 @@ public string ApplyReplacements(string message, string accent) // this is kind of slow but its not that bad // essentially: go over all matches, try to match capitalization where possible, then replace // rather than using regex.replace - for (int i = Regex.Count(message, $@"(? 0; i--) + for (int i = Regex.Count(maskMessage, $@"(? 0; i--) { // fetch the match again as the character indices may have changed - Match match = Regex.Match(message, $@"(? DirectReplacements = new() { { "fuck you", "I've got a BONE to pick with you" }, @@ -45,7 +48,7 @@ public string Accentuate(string message, SkeletonAccentComponent component) // Character manipulations: // At the start of words, any non-vowel + "one" becomes "bone", e.g. tone -> bone ; lonely -> bonely; clone -> clone (remains unchanged). - msg = Regex.Replace(msg, @"(?] + private const string MuzzleAccent = "mumble"; public override void Initialize() { @@ -53,7 +59,10 @@ private void OnSexChanged(EntityUid uid, VocalComponent component, SexChangedEve private void OnEmote(EntityUid uid, VocalComponent component, ref EmoteEvent args) { - if (args.Handled || !args.Emote.Category.HasFlag(EmoteCategory.Vocal)) + if (args.Handled + || !args.Emote.Category.HasFlag(EmoteCategory.Vocal) + || !_actionBlocker.CanSpeak(uid) + || TryComp(uid, out var replacement) && replacement.Accent == MuzzleAccent) // This is not ideal, but it works. return; // snowflake case for wilhelm scream easter egg diff --git a/Content.Server/Speech/EntitySystems/VoiceOverrideSystem.cs b/Content.Server/Speech/EntitySystems/VoiceOverrideSystem.cs new file mode 100644 index 00000000000..97510966f55 --- /dev/null +++ b/Content.Server/Speech/EntitySystems/VoiceOverrideSystem.cs @@ -0,0 +1,22 @@ +using Content.Shared.Chat; +using Content.Server.Speech.Components; + +namespace Content.Server.Speech.EntitySystems; + +public sealed partial class VoiceOverrideSystem : EntitySystem +{ + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnTransformSpeakerName); + } + + private void OnTransformSpeakerName(Entity entity, ref TransformSpeakerSpeechEvent args) + { + if (!entity.Comp.Enabled) + return; + + args.VoiceName = entity.Comp.NameOverride ?? args.VoiceName; + args.SpeechVerb = entity.Comp.SpeechVerbOverride ?? args.SpeechVerb; + } +} diff --git a/Content.Server/Speech/Systems/RandomBarkSystem.cs b/Content.Server/Speech/Systems/RandomBarkSystem.cs index 863ea798433..5706a791bff 100644 --- a/Content.Server/Speech/Systems/RandomBarkSystem.cs +++ b/Content.Server/Speech/Systems/RandomBarkSystem.cs @@ -10,20 +10,22 @@ public sealed class RandomBarkSystem : EntitySystem { [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly ChatSystem _chat = default!; - [Dependency] private readonly EntityManager _entity = default!; + + private static readonly string[] AddedPunctuation = [".", "...", "!", "..!", "!!"]; public override void Initialize() { base.Initialize(); - SubscribeLocalEvent(OnInit); + SubscribeLocalEvent(OnInit); } - private void OnInit(EntityUid uid, RandomBarkComponent barker, ComponentInit args) + private void OnInit(Entity ent, ref MapInitEvent args) { - barker.BarkAccumulator = _random.NextFloat(barker.MinTime, barker.MaxTime) * barker.BarkMultiplier; + ent.Comp.BarkAccumulator = _random.NextFloat(ent.Comp.MinTime, ent.Comp.MaxTime) * ent.Comp.BarkMultiplier; + ent.Comp.BarkLocaleCount ??= GetBarkLocaleCount(ent); } public override void Update(float frameTime) @@ -38,11 +40,55 @@ public override void Update(float frameTime) continue; barker.BarkAccumulator = _random.NextFloat(barker.MinTime, barker.MaxTime) * barker.BarkMultiplier; - if (_entity.TryGetComponent(uid, out var actComp) && - actComp.HasMind) + if (TryComp(uid, out var actComp) && actComp.HasMind + || GetNextBark((uid, barker)) is not { } bark) continue; - _chat.TrySendInGameICMessage(uid, _random.Pick(barker.Barks), InGameICChatType.Speak, barker.ChatLog ? ChatTransmitRange.Normal : ChatTransmitRange.HideChat); + _chat.TrySendInGameICMessage(uid, bark, InGameICChatType.Speak, barker.ChatLog ? ChatTransmitRange.Normal : ChatTransmitRange.HideChat); + } + } + + /// + /// Tries to get the next bark for the given entity. Returns null if it fails. + /// + public string? GetNextBark(Entity ent) + { + var count = GetBarkLocaleCount(ent); + if (count <= 0) + return null; + + var index = _random.Next(0, count) + 1; + if (!Loc.TryGetString($"bark-{ent.Comp.BarkType}-{index}", out var bark)) + { + Log.Error($"Could not find bark with index {index} and type {ent.Comp.BarkType} for entity {ent.Owner}."); + return null; } + + // If the last char of the string is an alphanumeric one, then add a random punctuation mark + if (bark.Length > 0 && char.IsLetterOrDigit(bark[^1])) + bark += _random.Pick(AddedPunctuation); + + return bark; + } + + private int GetBarkLocaleCount(Entity ent) + { + if (ent.Comp.BarkLocaleCount is { } localeCount) + return localeCount; + + // All the error logging should cause certain integration tests to fail should someone setup randombark incorrectly + if (!Loc.TryGetString($"bark-{ent.Comp.BarkType}-count", out var localeCountStr)) + { + Log.Error($"Entity {ent.Owner} has a bark type {ent.Comp.BarkType} which does not have a respective bark count locale."); + return 0; + } + + if (!int.TryParse(localeCountStr, out localeCount) || localeCount < 0) + { + Log.Error($"Entity {ent.Owner} has a bark type {ent.Comp.BarkType} whose respective bark count locale is not a valid number."); + return 0; + } + + return localeCount; } } diff --git a/Content.Server/Standing/LayingDownSystem.cs b/Content.Server/Standing/LayingDownSystem.cs index 73a929fdfc4..fcad649c9ab 100644 --- a/Content.Server/Standing/LayingDownSystem.cs +++ b/Content.Server/Standing/LayingDownSystem.cs @@ -1,101 +1,33 @@ -using Content.Shared.ActionBlocker; +using Content.Shared.Standing; +using Content.Shared.CCVar; using Content.Shared.Input; using Content.Shared.Movement.Systems; using Content.Shared.Popups; -using Content.Shared.Standing; +using Robust.Shared.Configuration; using Robust.Shared.Input.Binding; using Robust.Shared.Player; -using Robust.Shared.Timing; namespace Content.Server.Standing; -/// Unfortunately cannot be shared because some standing conditions are server-side only -public sealed class LayingDownSystem : EntitySystem +public sealed class LayingDownSystem : SharedLayingDownSystem { - [Dependency] private readonly ActionBlockerSystem _actionBlocker = default!; - [Dependency] private readonly MovementSpeedModifierSystem _movement = default!; - [Dependency] private readonly SharedPopupSystem _popups = default!; - [Dependency] private readonly Shared.Standing.StandingStateSystem _standing = default!; // WHY IS THERE TWO DIFFERENT STANDING SYSTEMS?! - [Dependency] private readonly IGameTiming _timing = default!; - + [Dependency] private readonly INetConfigurationManager _cfg = default!; public override void Initialize() { - CommandBinds.Builder - .Bind(ContentKeyFunctions.ToggleStanding, InputCmdHandler.FromDelegate(ToggleStanding, handle: false, outsidePrediction: false)) - .Register(); + base.Initialize(); - SubscribeLocalEvent(DoRefreshMovementSpeed); - SubscribeLocalEvent(DoRefreshMovementSpeed); - SubscribeLocalEvent(OnRefreshMovementSpeed); - SubscribeLocalEvent(OnParentChanged); + SubscribeNetworkEvent(OnCheckAutoGetUp); } - public override void Shutdown() + private void OnCheckAutoGetUp(CheckAutoGetUpEvent ev, EntitySessionEventArgs args) { - base.Shutdown(); + var uid = GetEntity(ev.User); - CommandBinds.Unregister(); - } - - private void DoRefreshMovementSpeed(EntityUid uid, LayingDownComponent component, object args) - { - _movement.RefreshMovementSpeedModifiers(uid); - } - - private void OnRefreshMovementSpeed(EntityUid uid, LayingDownComponent component, RefreshMovementSpeedModifiersEvent args) - { - if (TryComp(uid, out var standingState) && standingState.Standing) + if (!TryComp(uid, out LayingDownComponent? layingDown)) return; - args.ModifySpeed(component.DownedSpeedMultiplier, component.DownedSpeedMultiplier, bypassImmunity: true); - } - - private void OnParentChanged(EntityUid uid, LayingDownComponent component, EntParentChangedMessage args) - { - // If the entity is not on a grid, try to make it stand up to avoid issues - if (!TryComp(uid, out var standingState) - || standingState.Standing - || Transform(uid).GridUid != null) - return; - - _standing.Stand(uid, standingState); - } - - private void ToggleStanding(ICommonSession? session) - { - if (session is not { AttachedEntity: { Valid: true } uid } playerSession - || !Exists(uid) - || !TryComp(uid, out var standingState) - || !TryComp(uid, out var layingDown)) - return; - - // If successful, show popup to self and others. Otherwise, only to self. - if (ToggleStandingImpl(uid, standingState, layingDown, out var popupBranch)) - { - _popups.PopupEntity(Loc.GetString($"laying-comp-{popupBranch}-other", ("entity", uid)), uid, Filter.PvsExcept(uid), true); - layingDown.NextToggleAttempt = _timing.CurTime + layingDown.Cooldown; - } - - _popups.PopupEntity(Loc.GetString($"laying-comp-{popupBranch}-self", ("entity", uid)), uid, uid); - } - - private bool ToggleStandingImpl(EntityUid uid, StandingStateComponent standingState, LayingDownComponent layingDown, out string popupBranch) - { - var success = layingDown.NextToggleAttempt <= _timing.CurTime; - - if (_standing.IsDown(uid, standingState)) - { - success = success && _standing.Stand(uid, standingState, force: false); - popupBranch = success ? "stand-success" : "stand-fail"; - } - else - { - success = success && Transform(uid).GridUid != null; // Do not allow laying down when not on a surface. - success = success && _standing.Down(uid, standingState: standingState, playSound: true, dropHeldItems: false); - popupBranch = success ? "lay-success" : "lay-fail"; - } - - return success; + layingDown.AutoGetUp = _cfg.GetClientCVar(args.SenderSession.Channel, CCVars.AutoGetUp); + Dirty(uid, layingDown); } } diff --git a/Content.Server/Station/Components/StationBiomeComponent.cs b/Content.Server/Station/Components/StationBiomeComponent.cs new file mode 100644 index 00000000000..0eb64aaff80 --- /dev/null +++ b/Content.Server/Station/Components/StationBiomeComponent.cs @@ -0,0 +1,22 @@ +using Content.Server.Station.Systems; +using Content.Shared.Parallax.Biomes; +using Robust.Shared.Prototypes; + +namespace Content.Server.Station.Components; + +/// +/// Runs EnsurePlanet against the largest grid on Mapinit. +/// +[RegisterComponent, Access(typeof(StationBiomeSystem))] +public sealed partial class StationBiomeComponent : Component +{ + [DataField(required: true)] + public ProtoId Biome = "Grasslands"; + + // If null, its random + [DataField] + public int? Seed = null; + + [DataField] + public Color MapLightColor = Color.Black; +} diff --git a/Content.Server/Station/Events/StationJobsGetCandidatesEvent.cs b/Content.Server/Station/Events/StationJobsGetCandidatesEvent.cs new file mode 100644 index 00000000000..58d860b1e12 --- /dev/null +++ b/Content.Server/Station/Events/StationJobsGetCandidatesEvent.cs @@ -0,0 +1,8 @@ +using Content.Shared.Roles; +using Robust.Shared.Network; +using Robust.Shared.Prototypes; + +namespace Content.Server.Station.Events; + +[ByRefEvent] +public readonly record struct StationJobsGetCandidatesEvent(NetUserId Player, List> Jobs); diff --git a/Content.Server/Station/Events/StationPostInitEvent.cs b/Content.Server/Station/Events/StationPostInitEvent.cs index 4f7927cee52..54b8eeeb312 100644 --- a/Content.Server/Station/Events/StationPostInitEvent.cs +++ b/Content.Server/Station/Events/StationPostInitEvent.cs @@ -4,6 +4,8 @@ namespace Content.Server.Station.Events; /// /// Raised directed on a station after it has been initialized, as well as broadcast. +/// This gets raised after the entity has been map-initialized, and the station's centcomm map/entity (if any) has been +/// set up. /// [ByRefEvent] public readonly record struct StationPostInitEvent(Entity Station); diff --git a/Content.Server/Station/Systems/StationBiomeSystem.cs b/Content.Server/Station/Systems/StationBiomeSystem.cs new file mode 100644 index 00000000000..8c80806ccf5 --- /dev/null +++ b/Content.Server/Station/Systems/StationBiomeSystem.cs @@ -0,0 +1,35 @@ +using Content.Server.Parallax; +using Content.Server.Station.Components; +using Content.Server.Station.Events; +using Content.Server.Station.Systems; +using Robust.Shared.Map; +using Robust.Shared.Prototypes; + +namespace Content.Server.Station.Systems; +public sealed partial class StationBiomeSystem : EntitySystem +{ + [Dependency] private readonly BiomeSystem _biome = default!; + [Dependency] private readonly IMapManager _mapManager = default!; + [Dependency] private readonly IPrototypeManager _proto = default!; + [Dependency] private readonly StationSystem _station = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnStationPostInit); + } + + private void OnStationPostInit(Entity map, ref StationPostInitEvent args) + { + if (!TryComp(map, out StationDataComponent? dataComp)) + return; + + var station = _station.GetLargestGrid(dataComp); + if (station == null) return; + + var mapId = Transform(station.Value).MapID; + var mapUid = _mapManager.GetMapEntityId(mapId); + + _biome.EnsurePlanet(mapUid, _proto.Index(map.Comp.Biome), map.Comp.Seed, mapLight: map.Comp.MapLightColor); + } +} diff --git a/Content.Server/Station/Systems/StationJobsSystem.Roundstart.cs b/Content.Server/Station/Systems/StationJobsSystem.Roundstart.cs index 4b7cd64961b..c3c3865c7bf 100644 --- a/Content.Server/Station/Systems/StationJobsSystem.Roundstart.cs +++ b/Content.Server/Station/Systems/StationJobsSystem.Roundstart.cs @@ -2,6 +2,7 @@ using Content.Server.Administration.Managers; using Content.Server.Players.PlayTimeTracking; using Content.Server.Station.Components; +using Content.Server.Station.Events; using Content.Shared.Preferences; using Content.Shared.Roles; using Robust.Shared.Network; @@ -342,8 +343,9 @@ private Dictionary> GetPlayersJobCandidates(int? weight, foreach (var (player, profile) in profiles) { var roleBans = _banManager.GetJobBans(player); - var profileJobs = profile.JobPriorities.Keys.ToList(); - _playTime.RemoveDisallowedJobs(player, ref profileJobs); + var profileJobs = profile.JobPriorities.Keys.Select(k => new ProtoId(k)).ToList(); + var ev = new StationJobsGetCandidatesEvent(player, profileJobs); + RaiseLocalEvent(ref ev); List? availableJobs = null; @@ -354,7 +356,7 @@ private Dictionary> GetPlayersJobCandidates(int? weight, if (!(priority == selectedPriority || selectedPriority is null)) continue; - if (!_prototypeManager.TryIndex(jobId, out JobPrototype? job)) + if (!_prototypeManager.TryIndex(jobId, out var job)) continue; if (weight is not null && job.Weight != weight.Value) diff --git a/Content.Server/Station/Systems/StationJobsSystem.cs b/Content.Server/Station/Systems/StationJobsSystem.cs index debac8902e2..3bfa815af1e 100644 --- a/Content.Server/Station/Systems/StationJobsSystem.cs +++ b/Content.Server/Station/Systems/StationJobsSystem.cs @@ -428,7 +428,7 @@ public IReadOnlySet GetOverflowJobs(EntityUid station, StationJobsCompon /// Whether or not to pick from the overflow list. /// A set of disallowed jobs, if any. /// The selected job, if any. - public string? PickBestAvailableJobWithPriority(EntityUid station, IReadOnlyDictionary jobPriorities, bool pickOverflows, IReadOnlySet? disallowedJobs = null) + public string? PickBestAvailableJobWithPriority(EntityUid station, IReadOnlyDictionary jobPriorities, bool pickOverflows, IReadOnlySet>? disallowedJobs = null) { if (station == EntityUid.Invalid) return null; diff --git a/Content.Server/Station/Systems/StationSpawningSystem.cs b/Content.Server/Station/Systems/StationSpawningSystem.cs index 61fc1e0a51b..85be5f740d5 100644 --- a/Content.Server/Station/Systems/StationSpawningSystem.cs +++ b/Content.Server/Station/Systems/StationSpawningSystem.cs @@ -47,7 +47,7 @@ public sealed class StationSpawningSystem : SharedStationSpawningSystem [Dependency] private readonly SharedAccessSystem _accessSystem = default!; [Dependency] private readonly IdentitySystem _identity = default!; [Dependency] private readonly MetaDataSystem _metaSystem = default!; - + [Dependency] private readonly InternalEncryptionKeySpawner _internalEncryption = default!; [Dependency] private readonly ArrivalsSystem _arrivalsSystem = default!; [Dependency] private readonly ContainerSpawnPointSystem _containerSpawnPointSystem = default!; @@ -58,6 +58,7 @@ public sealed class StationSpawningSystem : SharedStationSpawningSystem /// public override void Initialize() { + base.Initialize(); Subs.CVar(_configurationManager, CCVars.ICRandomCharacters, e => _randomizeCharacters = e, true); _spawnerCallbacks = new Dictionary>() @@ -173,12 +174,15 @@ public EntityUid SpawnPlayerMob( if (prototype?.StartingGear != null) { var startingGear = _prototypeManager.Index(prototype.StartingGear); - EquipStartingGear(entity.Value, startingGear); + EquipStartingGear(entity.Value, startingGear, raiseEvent: false); if (profile != null) EquipIdCard(entity.Value, profile.Name, prototype, station); - InternalEncryptionKeySpawner.TryInsertEncryptionKey(entity.Value, startingGear, EntityManager, profile); // Parkstation - IPC + _internalEncryption.TryInsertEncryptionKey(entity.Value, startingGear, EntityManager); } + var gearEquippedEv = new StartingGearEquippedEvent(entity.Value); + RaiseLocalEvent(entity.Value, ref gearEquippedEv, true); + if (profile != null) { _humanoidSystem.LoadProfile(entity.Value, profile); diff --git a/Content.Server/Station/Systems/StationSystem.cs b/Content.Server/Station/Systems/StationSystem.cs index 408b3ebc555..6c1ed15ebf9 100644 --- a/Content.Server/Station/Systems/StationSystem.cs +++ b/Content.Server/Station/Systems/StationSystem.cs @@ -28,22 +28,16 @@ namespace Content.Server.Station.Systems; [PublicAPI] public sealed class StationSystem : EntitySystem { - [Dependency] private readonly IConfigurationManager _configurationManager = default!; [Dependency] private readonly ILogManager _logManager = default!; [Dependency] private readonly IPlayerManager _player = default!; [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly ChatSystem _chatSystem = default!; - [Dependency] private readonly GameTicker _gameTicker = default!; [Dependency] private readonly SharedTransformSystem _transform = default!; [Dependency] private readonly MetaDataSystem _metaData = default!; [Dependency] private readonly MapSystem _map = default!; private ISawmill _sawmill = default!; - private bool _randomStationOffset; - private bool _randomStationRotation; - private float _maxRandomStationOffset; - /// public override void Initialize() { @@ -112,26 +106,12 @@ private void OnPostGameMapLoad(PostGameMapLoad ev) { var dict = new Dictionary>(); - void AddGrid(string station, EntityUid grid) - { - if (dict.ContainsKey(station)) - { - dict[station].Add(grid); - } - else - { - dict[station] = new List {grid}; - } - } - // Iterate over all BecomesStation foreach (var grid in ev.Grids) { // We still setup the grid - if (!TryComp(grid, out var becomesStation)) - continue; - - AddGrid(becomesStation.Id, grid); + if (TryComp(grid, out var becomesStation)) + dict.GetOrNew(becomesStation.Id).Add(grid); } if (!dict.Any()) @@ -346,6 +326,9 @@ public EntityUid InitializeNewStation(StationConfig stationConfig, IEnumerable + /// Alert level to set the station to when the event starts. + /// + [DataField] + public string AlertLevel = "blue"; +} diff --git a/Content.Server/StationEvents/Components/GlimmerMobRuleComponent.cs b/Content.Server/StationEvents/Components/GlimmerMobRuleComponent.cs new file mode 100644 index 00000000000..982cb35ae8e --- /dev/null +++ b/Content.Server/StationEvents/Components/GlimmerMobRuleComponent.cs @@ -0,0 +1,51 @@ +using Content.Server.StationEvents.Events; +using Content.Shared.Psionics.Glimmer; +using Robust.Shared.Prototypes; + +namespace Content.Server.StationEvents.Components; + +/// +/// Tries to spawn a random number of mobs scaling with psionic people. +/// Rolls glimmer sources then vents then midround spawns in that order. +/// +[RegisterComponent, Access(typeof(GlimmerMobRule))] +public sealed partial class GlimmerMobRuleComponent : Component +{ + /// + /// The mob to spawn. + /// + [DataField(required: true)] + public EntProtoId MobPrototype = string.Empty; + + /// + /// Every this number of psionics spawns 1 mob. + /// + [DataField] + public int MobsPerPsionic = 10; + + /// + /// If the current glimmer tier is above this, mob count gets multiplied by the difference. + /// So by default 500-900 glimmer will double it and 900+ will triple it. + /// + [DataField] + public GlimmerTier GlimmerTier = GlimmerTier.Moderate; + + /// + /// Probability of rolling a glimmer source location. + /// + [DataField] + public float GlimmerProb = 0.4f; + + /// + /// Probability of rolling a vent location. + /// + [DataField] + public float NormalProb = 1f; + + /// + /// Probability of rolling a midround antag location. + /// Should always be 1 to guarantee the right number of spawned mobs. + /// + [DataField] + public float HiddenProb = 1f; +} diff --git a/Content.Server/StationEvents/Components/GlimmerWispRuleComponent.cs b/Content.Server/StationEvents/Components/GlimmerWispRuleComponent.cs deleted file mode 100644 index 60477e6a6a7..00000000000 --- a/Content.Server/StationEvents/Components/GlimmerWispRuleComponent.cs +++ /dev/null @@ -1,8 +0,0 @@ -using Content.Server.StationEvents.Events; - -namespace Content.Server.StationEvents.Components; - -[RegisterComponent, Access(typeof(GlimmerWispRule))] -public sealed partial class GlimmerWispRuleComponent : Component -{ -} diff --git a/Content.Server/StationEvents/Components/PirateRadioSpawnRuleComponent.cs b/Content.Server/StationEvents/Components/PirateRadioSpawnRuleComponent.cs new file mode 100644 index 00000000000..3bfa189ec6b --- /dev/null +++ b/Content.Server/StationEvents/Components/PirateRadioSpawnRuleComponent.cs @@ -0,0 +1,37 @@ +using Content.Server.StationEvents.Events; + +namespace Content.Server.StationEvents.Components; + +[RegisterComponent, Access(typeof(PirateRadioSpawnRule))] +public sealed partial class PirateRadioSpawnRuleComponent : Component +{ + [DataField] + public List PirateRadioShuttlePath { get; private set; } = new() + { + "Maps/Shuttles/pirateradio.yml", + }; + + [DataField] + public EntityUid? AdditionalRule; + + [DataField] + public int DebrisCount { get; set; } + + [DataField] + public float MinimumDistance { get; set; } = 750f; + + [DataField] + public float MaximumDistance { get; set; } = 1250f; + + [DataField] + public float MinimumDebrisDistance { get; set; } = 150f; + + [DataField] + public float MaximumDebrisDistance { get; set; } = 250f; + + [DataField] + public float DebrisMinimumOffset { get; set; } = 50f; + + [DataField] + public float DebrisMaximumOffset { get; set; } = 100f; +} diff --git a/Content.Server/StationEvents/Components/RampingStationEventSchedulerComponent.cs b/Content.Server/StationEvents/Components/RampingStationEventSchedulerComponent.cs index 282ee5b612a..9771e02e038 100644 --- a/Content.Server/StationEvents/Components/RampingStationEventSchedulerComponent.cs +++ b/Content.Server/StationEvents/Components/RampingStationEventSchedulerComponent.cs @@ -24,6 +24,7 @@ public sealed partial class RampingStationEventSchedulerComponent : Component /// /// The number by which average expected shift length is multiplied. Higher values lead to slower chaos growth. /// + [DataField] public float ShiftLengthModifier = 1f; // Everything below is overridden in the RampingStationEventSchedulerSystem based on CVars diff --git a/Content.Server/StationEvents/Components/StationEventComponent.cs b/Content.Server/StationEvents/Components/StationEventComponent.cs index 980034aa7b7..54af1a59d99 100644 --- a/Content.Server/StationEvents/Components/StationEventComponent.cs +++ b/Content.Server/StationEvents/Components/StationEventComponent.cs @@ -1,4 +1,4 @@ -using Robust.Shared.Audio; +using Robust.Shared.Audio; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; namespace Content.Server.StationEvents.Components; @@ -15,43 +15,43 @@ public sealed partial class StationEventComponent : Component public const float WeightHigh = 15.0f; public const float WeightVeryHigh = 20.0f; - [DataField("weight")] + [DataField] public float Weight = WeightNormal; - [DataField("startAnnouncement")] + [DataField] public bool StartAnnouncement; - [DataField("endAnnouncement")] + [DataField] public bool EndAnnouncement; /// /// In minutes, when is the first round time this event can start /// - [DataField("earliestStart")] + [DataField] public int EarliestStart = 5; /// /// In minutes, the amount of time before the same event can occur again /// - [DataField("reoccurrenceDelay")] + [DataField] public int ReoccurrenceDelay = 30; /// /// How long after being added does the event start /// - [DataField("startDelay")] + [DataField] public TimeSpan StartDelay = TimeSpan.Zero; /// /// How long the event lasts. /// - [DataField("duration")] + [DataField] public TimeSpan? Duration = TimeSpan.FromSeconds(1); /// /// The max amount of time the event lasts. /// - [DataField("maxDuration")] + [DataField] public TimeSpan? MaxDuration; /// @@ -60,13 +60,13 @@ public sealed partial class StationEventComponent : Component /// /// To avoid running deadly events with low-pop /// - [DataField("minimumPlayers")] + [DataField] public int MinimumPlayers; /// /// How many times this even can occur in a single round /// - [DataField("maxOccurrences")] + [DataField] public int? MaxOccurrences; /// diff --git a/Content.Server/StationEvents/EventManagerSystem.cs b/Content.Server/StationEvents/EventManagerSystem.cs index 2d8606e9293..9c0005d06db 100644 --- a/Content.Server/StationEvents/EventManagerSystem.cs +++ b/Content.Server/StationEvents/EventManagerSystem.cs @@ -1,4 +1,5 @@ using System.Linq; +using Content.Server.Chat.Managers; using Content.Server.GameTicking; using Content.Server.StationEvents.Components; using Content.Shared.CCVar; @@ -16,6 +17,7 @@ public sealed class EventManagerSystem : EntitySystem [Dependency] private readonly IPlayerManager _playerManager = default!; [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly IPrototypeManager _prototype = default!; + [Dependency] private readonly IChatManager _chat = default!; [Dependency] public readonly GameTicker GameTicker = default!; [Dependency] private readonly GlimmerSystem _glimmerSystem = default!; //Nyano - Summary: pulls in the glimmer system. @@ -45,6 +47,7 @@ public string RunRandomEvent() var ent = GameTicker.AddGameRule(randomEvent); var str = Loc.GetString("station-event-system-run-event",("eventName", ToPrettyString(ent))); + _chat.SendAdminAlert(str); Log.Info(str); return str; } diff --git a/Content.Server/StationEvents/Events/AlertLevelInterceptionRule.cs b/Content.Server/StationEvents/Events/AlertLevelInterceptionRule.cs new file mode 100644 index 00000000000..a78a542d3b3 --- /dev/null +++ b/Content.Server/StationEvents/Events/AlertLevelInterceptionRule.cs @@ -0,0 +1,23 @@ +using Content.Server.GameTicking.Components; +using Content.Server.StationEvents.Components; +using Content.Server.AlertLevel; + +namespace Content.Server.StationEvents.Events; + +public sealed class AlertLevelInterceptionRule : StationEventSystem +{ + [Dependency] private readonly AlertLevelSystem _alertLevelSystem = default!; + + protected override void Started(EntityUid uid, AlertLevelInterceptionRuleComponent component, GameRuleComponent gameRule, + GameRuleStartedEvent args) + { + base.Started(uid, component, gameRule, args); + + if (!TryGetRandomStation(out var chosenStation)) + return; + if (_alertLevelSystem.GetLevel(chosenStation.Value) != "green") + return; + + _alertLevelSystem.SetLevel(chosenStation.Value, component.AlertLevel, true, true, true); + } +} \ No newline at end of file diff --git a/Content.Server/StationEvents/Events/CargoGiftsRule.cs b/Content.Server/StationEvents/Events/CargoGiftsRule.cs index 62f01f58fe6..550f799b27e 100644 --- a/Content.Server/StationEvents/Events/CargoGiftsRule.cs +++ b/Content.Server/StationEvents/Events/CargoGiftsRule.cs @@ -1,4 +1,4 @@ -using System.Linq; +using System.Linq; using Content.Server.Cargo.Components; using Content.Server.Cargo.Systems; using Content.Server.GameTicking; @@ -74,13 +74,14 @@ protected override void ActiveTick(EntityUid uid, CargoGiftsRuleComponent compon if (!_cargoSystem.AddAndApproveOrder( station!.Value, product.Product, + product.Name, product.Cost, qty, Loc.GetString(component.Sender), Loc.GetString(component.Description), Loc.GetString(component.Dest), cargoDb, - stationData! + (station.Value, stationData) )) { break; diff --git a/Content.Server/StationEvents/Events/GlimmerMobSpawnRule.cs b/Content.Server/StationEvents/Events/GlimmerMobSpawnRule.cs new file mode 100644 index 00000000000..702147842c6 --- /dev/null +++ b/Content.Server/StationEvents/Events/GlimmerMobSpawnRule.cs @@ -0,0 +1,77 @@ +using System.Linq; +using Content.Server.GameTicking.Components; +using Robust.Shared.Random; +using Content.Server.GameTicking; +using Content.Server.NPC.Components; +using Content.Server.Psionics.Glimmer; +using Content.Server.Station.Systems; +using Content.Server.StationEvents.Components; +using Content.Shared.Psionics.Glimmer; +using Content.Shared.Abilities.Psionics; +using Robust.Shared.Map; + +namespace Content.Server.StationEvents.Events; + +public sealed class GlimmerMobRule : StationEventSystem +{ + [Dependency] private readonly GameTicker _gameTicker = default!; + [Dependency] private readonly GlimmerSystem _glimmer = default!; + [Dependency] private readonly StationSystem _stations = default!; + + protected override void Started(EntityUid uid, GlimmerMobRuleComponent comp, GameRuleComponent gameRule, GameRuleStartedEvent args) + { + base.Started(uid, comp, gameRule, args); + + var stations = _gameTicker.GetSpawnableStations(); + if (stations.Count <= 0) + return; + + List + glimmerSources = GetCoords(stations), + normalSpawns = GetCoords(stations), + hiddenSpawns = GetCoords(stations); + + var psionics = EntityQuery().Count(); + var baseCount = Math.Max(1, psionics / comp.MobsPerPsionic); + var multiplier = Math.Max(1, (int) _glimmer.GetGlimmerTier() - (int) comp.GlimmerTier); + var total = baseCount * multiplier; + + Log.Info($"Spawning {total} of {comp.MobPrototype} from {ToPrettyString(uid):rule}"); + + for (var i = 0; i < total; i++) + { + // if we cant get a spawn just give up + if (!TrySpawn(comp, glimmerSources, comp.GlimmerProb) && + !TrySpawn(comp, normalSpawns, comp.NormalProb) && + !TrySpawn(comp, hiddenSpawns, comp.HiddenProb)) + return; + } + } + + private List GetCoords(List allowedStations) where T : IComponent + { + var coords = new List(); + var query = EntityQueryEnumerator(); + + while (query.MoveNext(out var uid, out _, out var xform)) + { + var station = _stations.GetOwningStation(uid, xform); + if (station is null || !allowedStations.Contains(station.Value)) + continue; + + coords.Add(xform.Coordinates); + } + + return coords; + } + + private bool TrySpawn(GlimmerMobRuleComponent comp, List spawns, float prob) + { + if (spawns.Count == 0 || !RobustRandom.Prob(prob)) + return false; + + var coords = RobustRandom.Pick(spawns); + Spawn(comp.MobPrototype, coords); + return true; + } +} diff --git a/Content.Server/StationEvents/Events/GlimmerWispSpawnRule.cs b/Content.Server/StationEvents/Events/GlimmerWispSpawnRule.cs deleted file mode 100644 index c2cb4eca6d4..00000000000 --- a/Content.Server/StationEvents/Events/GlimmerWispSpawnRule.cs +++ /dev/null @@ -1,59 +0,0 @@ -using System.Linq; -using Content.Server.GameTicking.Components; -using Robust.Shared.Random; -using Content.Server.GameTicking.Rules.Components; -using Content.Server.NPC.Components; -using Content.Server.Psionics.Glimmer; -using Content.Server.StationEvents.Components; -using Content.Shared.Psionics.Glimmer; -using Content.Shared.Abilities.Psionics; - -namespace Content.Server.StationEvents.Events; - -internal sealed class GlimmerWispRule : StationEventSystem -{ - [Dependency] private readonly IRobustRandom _robustRandom = default!; - [Dependency] private readonly GlimmerSystem _glimmerSystem = default!; - - private static readonly string WispPrototype = "MobGlimmerWisp"; - - protected override void Started(EntityUid uid, GlimmerWispRuleComponent component, GameRuleComponent gameRule, GameRuleStartedEvent args) - { - base.Started(uid, component, gameRule, args); - - var glimmerSources = EntityManager.EntityQuery().ToList(); - var normalSpawnLocations = EntityManager.EntityQuery().ToList(); - var hiddenSpawnLocations = EntityManager.EntityQuery().ToList(); - - var baseCount = Math.Max(1, EntityManager.EntityQuery().Count() / 10); - int multiplier = Math.Max(1, (int) _glimmerSystem.GetGlimmerTier() - 2); - - var total = baseCount * multiplier; - - int i = 0; - while (i < total) - { - if (glimmerSources.Count != 0 && _robustRandom.Prob(0.4f)) - { - EntityManager.SpawnEntity(WispPrototype, _robustRandom.Pick(glimmerSources).Item2.Coordinates); - i++; - continue; - } - - if (normalSpawnLocations.Count != 0) - { - EntityManager.SpawnEntity(WispPrototype, _robustRandom.Pick(normalSpawnLocations).Item2.Coordinates); - i++; - continue; - } - - if (hiddenSpawnLocations.Count != 0) - { - EntityManager.SpawnEntity(WispPrototype, _robustRandom.Pick(hiddenSpawnLocations).Item2.Coordinates); - i++; - continue; - } - return; - } - } -} diff --git a/Content.Server/StationEvents/Events/ImmovableRodRule.cs b/Content.Server/StationEvents/Events/ImmovableRodRule.cs index 781d0368f47..45d6c18189c 100644 --- a/Content.Server/StationEvents/Events/ImmovableRodRule.cs +++ b/Content.Server/StationEvents/Events/ImmovableRodRule.cs @@ -23,7 +23,9 @@ protected override void Started(EntityUid uid, ImmovableRodRuleComponent compone var proto = _prototypeManager.Index(component.RodPrototype); if (proto.TryGetComponent(out var rod) && proto.TryGetComponent(out var despawn)) { - TryFindRandomTile(out _, out _, out _, out var targetCoords); + if (!TryFindRandomTile(out _, out _, out _, out var targetCoords)) + return; + var speed = RobustRandom.NextFloat(rod.MinSpeed, rod.MaxSpeed); var angle = RobustRandom.NextAngle(); var direction = angle.ToVec(); diff --git a/Content.Server/StationEvents/Events/NoosphericZapRule.cs b/Content.Server/StationEvents/Events/NoosphericZapRule.cs index 4be7b6e63fc..96c33612036 100644 --- a/Content.Server/StationEvents/Events/NoosphericZapRule.cs +++ b/Content.Server/StationEvents/Events/NoosphericZapRule.cs @@ -36,9 +36,9 @@ protected override void Started(EntityUid uid, NoosphericZapRuleComponent compon _stunSystem.TryParalyze(psion, TimeSpan.FromSeconds(component.StunDuration), false); _statusEffectsSystem.TryAddStatusEffect(psion, "Stutter", TimeSpan.FromSeconds(component.StutterDuration), false, "StutteringAccent"); - if (psionicComponent.CanReroll) + if (!psionicComponent.CanReroll) { - psionicComponent.CanReroll = false; + psionicComponent.CanReroll = true; _popupSystem.PopupEntity(Loc.GetString("noospheric-zap-seize-potential-regained"), psion, psion, Shared.Popups.PopupType.LargeCaution); } else diff --git a/Content.Server/StationEvents/Events/PirateRadioSpawnRule.cs b/Content.Server/StationEvents/Events/PirateRadioSpawnRule.cs new file mode 100644 index 00000000000..e0803132044 --- /dev/null +++ b/Content.Server/StationEvents/Events/PirateRadioSpawnRule.cs @@ -0,0 +1,84 @@ +using Robust.Server.GameObjects; +using Robust.Server.Maps; +using Robust.Shared.Configuration; +using Robust.Shared.Prototypes; +using Robust.Shared.Random; +using Content.Server.GameTicking; +using Content.Server.StationEvents.Components; +using Content.Shared.Salvage; +using Content.Shared.Random.Helpers; +using System.Linq; +using Content.Server.GameTicking.Components; +using Content.Shared.CCVar; + +namespace Content.Server.StationEvents.Events; + +public sealed class PirateRadioSpawnRule : StationEventSystem +{ + [Dependency] private readonly MapLoaderSystem _map = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + [Dependency] private readonly IConfigurationManager _confMan = default!; + [Dependency] private readonly GameTicker _gameTicker = default!; + [Dependency] private readonly TransformSystem _xform = default!; + + protected override void Started(EntityUid uid, PirateRadioSpawnRuleComponent component, GameRuleComponent gameRule, GameRuleStartedEvent args) + { + base.Started(uid, component, gameRule, args); + + var stations = _gameTicker.GetSpawnableStations(); + if (stations is null || stations.Count <= 0) + return; + + var targetStation = _random.Pick(stations); + var randomOffset = _random.NextVector2(component.MinimumDistance, component.MaximumDistance); + + var outpostOptions = new MapLoadOptions + { + Offset = _xform.GetWorldPosition(targetStation) + randomOffset, + LoadMap = false, + }; + + if (!_map.TryLoad(GameTicker.DefaultMap, _random.Pick(component.PirateRadioShuttlePath), out var outpostids, outpostOptions)) + return; + + SpawnDebris(component, outpostids); + } + + private void SpawnDebris(PirateRadioSpawnRuleComponent component, IReadOnlyList outpostids) + { + if (_confMan.GetCVar(CCVars.WorldgenEnabled) + || component.DebrisCount <= 0) + return; + + foreach (var id in outpostids) + { + var outpostaabb = _xform.GetWorldPosition(id); + var k = 0; + while (k < component.DebrisCount) + { + var debrisRandomOffset = _random.NextVector2(component.MinimumDebrisDistance, component.MaximumDebrisDistance); + var randomer = _random.NextVector2(component.DebrisMinimumOffset, component.DebrisMaximumOffset); //Second random vector to ensure the outpost isn't perfectly centered in the debris field + var debrisOptions = new MapLoadOptions + { + Offset = outpostaabb + debrisRandomOffset + randomer, + LoadMap = false, + }; + + var salvageProto = _random.Pick(_prototypeManager.EnumeratePrototypes().ToList()); + if (!_map.TryLoad(GameTicker.DefaultMap, salvageProto.MapPath.ToString(), out _, debrisOptions)) + return; + + k++; + } + } + } + + protected override void Ended(EntityUid uid, PirateRadioSpawnRuleComponent component, GameRuleComponent gameRule, GameRuleEndedEvent args) + { + base.Ended(uid, component, gameRule, args); + + if (component.AdditionalRule != null) + GameTicker.EndGameRule(component.AdditionalRule.Value); + } +} diff --git a/Content.Server/StationEvents/Events/StationEventSystem.cs b/Content.Server/StationEvents/Events/StationEventSystem.cs index 257babd0d2c..040ebad2260 100644 --- a/Content.Server/StationEvents/Events/StationEventSystem.cs +++ b/Content.Server/StationEvents/Events/StationEventSystem.cs @@ -1,3 +1,4 @@ +using System.Linq; using Content.Server.Administration.Logs; using Content.Server.Chat.Systems; using Content.Server.GameTicking.Components; @@ -46,6 +47,7 @@ protected override void Added(EntityUid uid, T component, GameRuleComponent game if (!TryComp(uid, out var stationEvent)) return; + AdminLogManager.Add(LogType.EventAnnounced, $"Event added / announced: {ToPrettyString(uid)}"); stationEvent.StartTime = Timing.CurTime + stationEvent.StartDelay; diff --git a/Content.Server/StationGoal/StationGoalPaperSystem.cs b/Content.Server/StationGoal/StationGoalPaperSystem.cs index 6a059c37a3d..8442f9b4aac 100644 --- a/Content.Server/StationGoal/StationGoalPaperSystem.cs +++ b/Content.Server/StationGoal/StationGoalPaperSystem.cs @@ -9,6 +9,7 @@ using Robust.Shared.Prototypes; using Robust.Shared.Random; using Content.Shared.Dataset; +using Content.Shared.Fax.Components; namespace Content.Server.StationGoal; diff --git a/Content.Server/StationGoal/StationGoalPrototype.cs b/Content.Server/StationGoal/StationGoalPrototype.cs index 733759a37df..c49d49e939e 100644 --- a/Content.Server/StationGoal/StationGoalPrototype.cs +++ b/Content.Server/StationGoal/StationGoalPrototype.cs @@ -3,7 +3,7 @@ namespace Content.Server.StationGoal { [Serializable, Prototype("stationGoal")] - public sealed class StationGoalPrototype : IPrototype + public sealed partial class StationGoalPrototype : IPrototype { [IdDataFieldAttribute] public string ID { get; } = default!; diff --git a/Content.Server/StationRecords/Systems/GeneralStationRecordConsoleSystem.cs b/Content.Server/StationRecords/Systems/GeneralStationRecordConsoleSystem.cs index 721eff6f2cf..a5202285d99 100644 --- a/Content.Server/StationRecords/Systems/GeneralStationRecordConsoleSystem.cs +++ b/Content.Server/StationRecords/Systems/GeneralStationRecordConsoleSystem.cs @@ -57,7 +57,7 @@ private void UpdateUserInterface(Entity en if (!TryComp(owningStation, out var stationRecords)) { - _ui.TrySetUiState(uid, GeneralStationRecordConsoleKey.Key, new GeneralStationRecordConsoleState()); + _ui.SetUiState(uid, GeneralStationRecordConsoleKey.Key, new GeneralStationRecordConsoleState()); return; } @@ -66,7 +66,7 @@ private void UpdateUserInterface(Entity en switch (listing.Count) { case 0: - _ui.TrySetUiState(uid, GeneralStationRecordConsoleKey.Key, new GeneralStationRecordConsoleState()); + _ui.SetUiState(uid, GeneralStationRecordConsoleKey.Key, new GeneralStationRecordConsoleState()); return; case 1: console.ActiveKey = listing.Keys.First(); @@ -80,6 +80,6 @@ private void UpdateUserInterface(Entity en _stationRecords.TryGetRecord(key, out var record, stationRecords); GeneralStationRecordConsoleState newState = new(id, record, listing, console.Filter); - _ui.TrySetUiState(uid, GeneralStationRecordConsoleKey.Key, newState); + _ui.SetUiState(uid, GeneralStationRecordConsoleKey.Key, newState); } } diff --git a/Content.Server/StationRecords/Systems/StationRecordsSystem.cs b/Content.Server/StationRecords/Systems/StationRecordsSystem.cs index 67f50d7a4e1..f04d9970438 100644 --- a/Content.Server/StationRecords/Systems/StationRecordsSystem.cs +++ b/Content.Server/StationRecords/Systems/StationRecordsSystem.cs @@ -65,7 +65,11 @@ private void CreateGeneralRecord(EntityUid station, EntityUid player, HumanoidCh TryComp(player, out var fingerprintComponent); TryComp(player, out var dnaComponent); - CreateGeneralRecord(station, idUid.Value, profile.Name, profile.Age, profile.Species, profile.Gender, jobId, fingerprintComponent?.Fingerprint, dnaComponent?.DNA, profile, records); + string specie = profile.Species; + if (!string.IsNullOrEmpty(profile.Customspeciename)) + specie = profile.Customspeciename; + + CreateGeneralRecord(station, idUid.Value, profile.Name, profile.Age, specie, profile.Gender, jobId, fingerprintComponent?.Fingerprint, dnaComponent?.DNA, profile, records); } @@ -211,7 +215,7 @@ public bool TryGetRecord(StationRecordKey key, [NotNullWhen(true)] out T? ent /// public uint? GetRecordByName(EntityUid station, string name, StationRecordsComponent? records = null) { - if (!Resolve(station, ref records)) + if (!Resolve(station, ref records, false)) return null; foreach (var (id, record) in GetRecordsOfType(station, records)) diff --git a/Content.Server/Storage/Components/EntityStorageComponent.cs b/Content.Server/Storage/Components/EntityStorageComponent.cs index 40fdb1b3261..3fba89b64ab 100644 --- a/Content.Server/Storage/Components/EntityStorageComponent.cs +++ b/Content.Server/Storage/Components/EntityStorageComponent.cs @@ -1,4 +1,5 @@ using Content.Server.Atmos; +using Content.Shared.Atmos; using Content.Shared.Storage.Components; using Robust.Shared.GameStates; diff --git a/Content.Server/Storage/EntitySystems/SpawnItemsOnUseSystem.cs b/Content.Server/Storage/EntitySystems/SpawnItemsOnUseSystem.cs index c49bfdec931..4c533ede3ad 100644 --- a/Content.Server/Storage/EntitySystems/SpawnItemsOnUseSystem.cs +++ b/Content.Server/Storage/EntitySystems/SpawnItemsOnUseSystem.cs @@ -82,7 +82,9 @@ private void OnUseInHand(EntityUid uid, SpawnItemsOnUseComponent component, UseI if (component.Sound != null) { - _audio.PlayPvs(component.Sound, uid); + // The entity is often deleted, so play the sound at its position rather than parenting + var coordinates = Transform(uid).Coordinates; + _audio.PlayPvs(component.Sound, coordinates); } component.Uses--; diff --git a/Content.Server/Storage/EntitySystems/StorageSystem.Fill.cs b/Content.Server/Storage/EntitySystems/StorageSystem.Fill.cs index 10278cc8051..768491f9876 100644 --- a/Content.Server/Storage/EntitySystems/StorageSystem.Fill.cs +++ b/Content.Server/Storage/EntitySystems/StorageSystem.Fill.cs @@ -65,12 +65,23 @@ private void FillStorage(Entity entity var sortedItems = items .OrderByDescending(x => ItemSystem.GetItemShape(x.Comp).GetArea()); + ClearCantFillReasons(); foreach (var ent in sortedItems) { if (Insert(uid, ent, out _, out var reason, storageComp: storage, playSound: false)) continue; + if (CantFillReasons.Count > 0) + { + var reasons = string.Join(", ", CantFillReasons.Select(s => Loc.GetString(s))); + if (reason == null) + reason = reasons; + else + reason += $", {reasons}"; + } + Log.Error($"Tried to StorageFill {ToPrettyString(ent)} inside {ToPrettyString(uid)} but can't. reason: {reason}"); + ClearCantFillReasons(); Del(ent); } } diff --git a/Content.Server/Storage/EntitySystems/StorageSystem.cs b/Content.Server/Storage/EntitySystems/StorageSystem.cs index 0f5efda74de..4b5dd7290c0 100644 --- a/Content.Server/Storage/EntitySystems/StorageSystem.cs +++ b/Content.Server/Storage/EntitySystems/StorageSystem.cs @@ -3,17 +3,12 @@ using Content.Shared.Explosion; using Content.Shared.Ghost; using Content.Shared.Hands; -using Content.Shared.Input; -using Content.Shared.Inventory; using Content.Shared.Lock; using Content.Shared.Storage; using Content.Shared.Storage.Components; using Content.Shared.Storage.EntitySystems; -using Content.Shared.Timing; using Content.Shared.Verbs; using Robust.Server.GameObjects; -using Robust.Shared.Audio.Systems; -using Robust.Shared.Input.Binding; using Robust.Shared.Map; using Robust.Shared.Player; using Robust.Shared.Prototypes; @@ -23,95 +18,14 @@ namespace Content.Server.Storage.EntitySystems; public sealed partial class StorageSystem : SharedStorageSystem { - [Dependency] private readonly IAdminManager _admin = default!; [Dependency] private readonly IPrototypeManager _prototype = default!; - [Dependency] private readonly InventorySystem _inventory = default!; - [Dependency] private readonly UserInterfaceSystem _uiSystem = default!; - [Dependency] private readonly SharedAudioSystem _audio = default!; - [Dependency] private readonly UseDelaySystem _useDelay = default!; public override void Initialize() { base.Initialize(); - SubscribeLocalEvent>(AddUiVerb); - Subs.BuiEvents(StorageComponent.StorageUiKey.Key, subs => - { - subs.Event(OnBoundUIClosed); - }); SubscribeLocalEvent(OnExploded); SubscribeLocalEvent(OnStorageFillMapInit); - - CommandBinds.Builder - .Bind(ContentKeyFunctions.OpenBackpack, InputCmdHandler.FromDelegate(HandleOpenBackpack)) - .Bind(ContentKeyFunctions.OpenBelt, InputCmdHandler.FromDelegate(HandleOpenBelt)) - .Register(); - } - - 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); - - // Get the session for the user - if (!TryComp(args.User, out var actor)) - return; - - // Does this player currently have the storage UI open? - var uiOpen = _uiSystem.SessionHasOpenUi(uid, StorageComponent.StorageUiKey.Key, actor.PlayerSession); - - ActivationVerb verb = new() - { - Act = () => - { - if (uiOpen) - { - _uiSystem.TryClose(uid, StorageComponent.StorageUiKey.Key, actor.PlayerSession); - } - else - { - OpenStorageUI(uid, args.User, component, silent); - } - } - }; - if (uiOpen) - { - verb.Text = Loc.GetString("verb-common-close-ui"); - verb.Icon = new SpriteSpecifier.Texture( - new("/Textures/Interface/VerbIcons/close.svg.192dpi.png")); - } - else - { - verb.Text = Loc.GetString("verb-common-open-ui"); - verb.Icon = new SpriteSpecifier.Texture( - new("/Textures/Interface/VerbIcons/open.svg.192dpi.png")); - } - args.Verbs.Add(verb); - } - - private void OnBoundUIClosed(EntityUid uid, StorageComponent storageComp, BoundUIClosedEvent args) - { - if (TryComp(args.Session.AttachedEntity, out var actor) && actor?.PlayerSession != null) - CloseNestedInterfaces(uid, actor.PlayerSession, storageComp); - - // If UI is closed for everyone - if (!_uiSystem.IsUiOpen(uid, args.UiKey)) - { - storageComp.IsUiOpen = false; - UpdateAppearance((uid, storageComp, null)); - - if (storageComp.StorageCloseSound is not null) - Audio.PlayEntity(storageComp.StorageCloseSound, Filter.Pvs(uid, entityManager: EntityManager), uid, true, storageComp.StorageCloseSound.Params); - } } private void OnExploded(Entity ent, ref BeforeExplodeEvent args) @@ -119,34 +33,6 @@ private void OnExploded(Entity ent, ref BeforeExplodeEvent arg args.Contents.AddRange(ent.Comp.Container.ContainedEntities); } - /// - /// Opens the storage UI for an entity - /// - /// The entity to open the UI for - public override void OpenStorageUI(EntityUid uid, EntityUid entity, StorageComponent? storageComp = null, bool silent = false) - { - if (!Resolve(uid, ref storageComp, false) || !TryComp(entity, out ActorComponent? player)) - return; - - // prevent spamming bag open / honkerton honk sound - silent |= TryComp(uid, out var useDelay) && _useDelay.IsDelayed((uid, useDelay)); - if (!silent) - { - if (!storageComp.IsUiOpen) - _audio.PlayPvs(storageComp.StorageOpenSound, uid); - if (useDelay != null) - _useDelay.TryResetDelay((uid, useDelay)); - } - - Log.Debug($"Storage (UID {uid}) \"used\" by player session (UID {player.PlayerSession.AttachedEntity})."); - - var bui = _uiSystem.GetUiOrNull(uid, StorageComponent.StorageUiKey.Key); - if (bui == null) - return; - _uiSystem.OpenUi(bui, player.PlayerSession); - _uiSystem.SendUiMessage(bui, new StorageModifyWindowMessage()); - } - /// public override void PlayPickupAnimation(EntityUid uid, EntityCoordinates initialCoordinates, EntityCoordinates finalCoordinates, Angle initialRotation, EntityUid? user = null) @@ -154,57 +40,4 @@ public override void PlayPickupAnimation(EntityUid uid, EntityCoordinates initia var filter = Filter.Pvs(uid).RemoveWhereAttachedEntity(e => e == user); RaiseNetworkEvent(new PickupAnimationEvent(GetNetEntity(uid), GetNetCoordinates(initialCoordinates), GetNetCoordinates(finalCoordinates), initialRotation), filter); } - - /// - /// If the user has nested-UIs open (e.g., PDA UI open when pda is in a backpack), close them. - /// - /// - public void CloseNestedInterfaces(EntityUid uid, ICommonSession session, StorageComponent? storageComp = null) - { - if (!Resolve(uid, ref storageComp)) - return; - - // for each containing thing - // if it has a storage comp - // ensure unsubscribe from session - // if it has a ui component - // close ui - foreach (var entity in storageComp.Container.ContainedEntities) - { - if (!TryComp(entity, out UserInterfaceComponent? ui)) - continue; - - foreach (var bui in ui.Interfaces.Values) - { - _uiSystem.TryClose(entity, bui.UiKey, session, ui); - } - } - } - - private void HandleOpenBackpack(ICommonSession? session) - { - HandleOpenSlotUI(session, "back"); - } - - private void HandleOpenBelt(ICommonSession? session) - { - HandleOpenSlotUI(session, "belt"); - } - - private void HandleOpenSlotUI(ICommonSession? session, string slot) - { - if (session is not { } playerSession) - return; - - if (playerSession.AttachedEntity is not {Valid: true} playerEnt || !Exists(playerEnt)) - return; - - if (!_inventory.TryGetSlotEntity(playerEnt, slot, out var storageEnt)) - return; - - if (!ActionBlocker.CanInteract(playerEnt, storageEnt)) - return; - - OpenStorageUI(storageEnt.Value, playerEnt); - } } diff --git a/Content.Server/Store/Systems/StoreSystem.Refund.cs b/Content.Server/Store/Systems/StoreSystem.Refund.cs index d59ee75e3ea..5a8be4be2bb 100644 --- a/Content.Server/Store/Systems/StoreSystem.Refund.cs +++ b/Content.Server/Store/Systems/StoreSystem.Refund.cs @@ -1,4 +1,4 @@ -using Content.Server.Store.Components; +using Content.Server.Store.Components; using Robust.Shared.Containers; namespace Content.Server.Store.Systems; diff --git a/Content.Server/Store/Systems/StoreSystem.Ui.cs b/Content.Server/Store/Systems/StoreSystem.Ui.cs index 25f64ba4b64..0d2f3af91b3 100644 --- a/Content.Server/Store/Systems/StoreSystem.Ui.cs +++ b/Content.Server/Store/Systems/StoreSystem.Ui.cs @@ -73,7 +73,7 @@ public void CloseUi(EntityUid uid, StoreComponent? component = null) if (!Resolve(uid, ref component)) return; - _ui.TryCloseAll(uid, StoreUiKey.Key); + _ui.CloseUi(uid, StoreUiKey.Key); } /// @@ -83,12 +83,13 @@ public void CloseUi(EntityUid uid, StoreComponent? component = null) /// The store entity itself /// The store component being refreshed. /// - public void UpdateUserInterface(EntityUid? user, EntityUid store, StoreComponent? component = null, PlayerBoundUserInterface? ui = null) + public void UpdateUserInterface(EntityUid? user, EntityUid store, StoreComponent? component = null) { if (!Resolve(store, ref component)) return; - if (ui == null && !_ui.TryGetUi(store, StoreUiKey.Key, out ui)) + // TODO: Why is the state not being set unless this? + if (!_ui.HasUi(store, StoreUiKey.Key)) return; //this is the person who will be passed into logic for all listing filtering. @@ -113,12 +114,12 @@ public void UpdateUserInterface(EntityUid? user, EntityUid store, StoreComponent // only tell operatives to lock their uplink if it can be locked var showFooter = HasComp(store); var state = new StoreUpdateState(component.LastAvailableListings, allCurrency, showFooter, component.RefundAllowed); - _ui.SetUiState(ui, state); + _ui.SetUiState(store, StoreUiKey.Key, state); } private void OnRequestUpdate(EntityUid uid, StoreComponent component, StoreRequestUpdateInterfaceMessage args) { - UpdateUserInterface(args.Session.AttachedEntity, GetEntity(args.Entity), component); + UpdateUserInterface(args.Actor, GetEntity(args.Entity), component); } private void BeforeActivatableUiOpen(EntityUid uid, StoreComponent component, BeforeActivatableUIOpenEvent args) @@ -139,8 +140,7 @@ private void OnBuyRequest(EntityUid uid, StoreComponent component, StoreBuyListi return; } - if (msg.Session.AttachedEntity is not { Valid: true } buyer) - return; + var buyer = msg.Actor; //verify that we can actually buy this listing and it wasn't added if (!ListingHasCategory(listing, component.Categories)) @@ -215,11 +215,11 @@ private void OnBuyRequest(EntityUid uid, StoreComponent component, StoreBuyListi { HandleRefundComp(uid, component, actionId.Value); - if (listing.ProductUpgradeID != null) + if (listing.ProductUpgradeId != null) { foreach (var upgradeListing in component.Listings) { - if (upgradeListing.ID == listing.ProductUpgradeID) + if (upgradeListing.ID == listing.ProductUpgradeId) { upgradeListing.ProductActionEntity = actionId.Value; break; @@ -229,7 +229,7 @@ private void OnBuyRequest(EntityUid uid, StoreComponent component, StoreBuyListi } } - if (listing is { ProductUpgradeID: not null, ProductActionEntity: not null }) + if (listing is { ProductUpgradeId: not null, ProductActionEntity: not null }) { if (listing.ProductActionEntity != null) { @@ -263,7 +263,13 @@ private void OnBuyRequest(EntityUid uid, StoreComponent component, StoreBuyListi $"{ToPrettyString(buyer):player} purchased listing \"{ListingLocalisationHelpers.GetLocalisedNameOrEntityName(listing, _prototypeManager)}\" from {ToPrettyString(uid)}"); listing.PurchaseAmount++; //track how many times something has been purchased - _audio.PlayEntity(component.BuySuccessSound, msg.Session, uid); //cha-ching! + _audio.PlayEntity(component.BuySuccessSound, msg.Actor, uid); //cha-ching! + + if (listing.SaleLimit != 0 && listing.DiscountValue > 0 && listing.PurchaseAmount >= listing.SaleLimit) + { + listing.DiscountValue = 0; + listing.Cost = listing.OldCost; + } UpdateUserInterface(buyer, uid, component); } @@ -289,8 +295,7 @@ private void OnRequestWithdraw(EntityUid uid, StoreComponent component, StoreReq if (proto.Cash == null || !proto.CanWithdraw) return; - if (msg.Session.AttachedEntity is not { Valid: true } buyer) - return; + var buyer = msg.Actor; FixedPoint2 amountRemaining = msg.Amount; var coordinates = Transform(buyer).Coordinates; @@ -313,7 +318,7 @@ private void OnRequestRefund(EntityUid uid, StoreComponent component, StoreReque { // TODO: Remove guardian/holopara - if (args.Session.AttachedEntity is not { Valid: true } buyer) + if (args.Actor is not { Valid: true } buyer) return; if (!IsOnStartingMap(uid, component)) diff --git a/Content.Server/Store/Systems/StoreSystem.cs b/Content.Server/Store/Systems/StoreSystem.cs index 72aeb29d195..978d98ac0cf 100644 --- a/Content.Server/Store/Systems/StoreSystem.cs +++ b/Content.Server/Store/Systems/StoreSystem.cs @@ -10,6 +10,7 @@ using Robust.Server.GameObjects; using Robust.Shared.Prototypes; using System.Linq; +using Content.Server.StoreDiscount; using Robust.Shared.Utility; namespace Content.Server.Store.Systems; @@ -22,6 +23,7 @@ public sealed partial class StoreSystem : EntitySystem { [Dependency] private readonly IPrototypeManager _proto = default!; [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] private readonly StoreDiscountSystem _storeDiscount = default!; public override void Initialize() { @@ -100,7 +102,7 @@ private void OnAfterInteract(EntityUid uid, CurrencyComponent component, AfterIn if (args.Handled) { var msg = Loc.GetString("store-currency-inserted", ("used", args.Used), ("target", args.Target)); - _popup.PopupEntity(msg, args.Target.Value); + _popup.PopupEntity(msg, args.Target.Value, args.User); QueueDel(args.Used); } } @@ -199,11 +201,10 @@ public void InitializeFromPreset(StorePresetPrototype preset, EntityUid uid, Sto if (component.Balance == new Dictionary() && preset.InitialBalance != null) //if we don't have a value stored, use the preset TryAddCurrency(preset.InitialBalance, uid, component); - var ui = _ui.GetUiOrNull(uid, StoreUiKey.Key); - if (ui != null) - { - _ui.SetUiState(ui, new StoreInitializeState(preset.StoreName)); - } + _storeDiscount.ApplyDiscounts(component.Listings, preset); + + if (_ui.HasUi(uid, StoreUiKey.Key)) + _ui.SetUiState(uid, StoreUiKey.Key, new StoreInitializeState(preset.StoreName)); } } @@ -225,7 +226,7 @@ public CurrencyInsertAttemptEvent(EntityUid user, EntityUid target, EntityUid us /// -/// Nyano/DeltaV Code. For penguin bombs and what not. +/// Nyano/DeltaV Code. For penguin bombs and what not. /// Raised on an item when it is purchased. /// An item may need to set it upself up for its purchaser. /// For example, to make sure it isn't hostile to them or diff --git a/Content.Server/StoreDiscount/StoreDiscountSystem.cs b/Content.Server/StoreDiscount/StoreDiscountSystem.cs new file mode 100644 index 00000000000..8f77eba7801 --- /dev/null +++ b/Content.Server/StoreDiscount/StoreDiscountSystem.cs @@ -0,0 +1,55 @@ +using System.Linq; +using Content.Shared.FixedPoint; +using Content.Shared.Store; +using Robust.Shared.Prototypes; +using Robust.Shared.Random; + +namespace Content.Server.StoreDiscount; + +public sealed class StoreDiscountSystem : EntitySystem +{ + [Dependency] private readonly IRobustRandom _random = default!; + + public void ApplyDiscounts(IEnumerable listings, StorePresetPrototype store) + { + if (!store.Sales.Enabled) + return; + + var count = _random.Next(store.Sales.MinItems, store.Sales.MaxItems + 1); + + listings = listings + .Where(l => + !l.SaleBlacklist + && l.Cost.Any(x => x.Value > 1) + && store.Categories.Overlaps(ChangedFormatCategories(l.Categories))) + .OrderBy(_ => _random.Next()).Take(count).ToList(); + + foreach (var listing in listings) + { + var sale = GetDiscount(store.Sales.MinMultiplier, store.Sales.MaxMultiplier); + var newCost = listing.Cost.ToDictionary(x => x.Key, + x => FixedPoint2.New(Math.Max(1, (int) MathF.Round(x.Value.Float() * sale)))); + + if (listing.Cost.All(x => x.Value.Int() == newCost[x.Key].Int())) + continue; + + var key = listing.Cost.First(x => x.Value > 0).Key; + listing.OldCost = listing.Cost; + listing.DiscountValue = 100 - (newCost[key] / listing.Cost[key] * 100).Int(); + listing.Cost = newCost; + listing.Categories = new() {store.Sales.SalesCategory}; + } + } + + private IEnumerable ChangedFormatCategories(List> categories) + { + var modified = from p in categories select p.Id; + + return modified; + } + + private float GetDiscount(float minMultiplier, float maxMultiplier) + { + return _random.NextFloat() * (maxMultiplier - minMultiplier) + minMultiplier; + } +} diff --git a/Content.Server/Strip/StrippableSystem.cs b/Content.Server/Strip/StrippableSystem.cs index d9f084252ae..73f2ce17a66 100644 --- a/Content.Server/Strip/StrippableSystem.cs +++ b/Content.Server/Strip/StrippableSystem.cs @@ -112,17 +112,15 @@ public override void StartOpeningStripper(EntityUid user, Entity(user, out var mode) && mode.IsInCombatMode && !openInCombat) return; - if (TryComp(user, out var actor) && HasComp(user)) + if (HasComp(user)) { - if (_userInterfaceSystem.SessionHasOpenUi(strippable, StrippingUiKey.Key, actor.PlayerSession)) - return; - _userInterfaceSystem.TryOpen(strippable, StrippingUiKey.Key, actor.PlayerSession); + _userInterfaceSystem.OpenUi(strippable.Owner, StrippingUiKey.Key, user); } } private void OnStripButtonPressed(Entity strippable, ref StrippingSlotButtonPressed args) { - if (args.Session.AttachedEntity is not { Valid: true } user || + if (args.Actor is not { Valid: true } user || !TryComp(user, out var userHands)) return; @@ -174,7 +172,7 @@ private void StripHand( private void OnStripEnsnareMessage(EntityUid uid, EnsnareableComponent component, StrippingEnsnareButtonPressed args) { - if (args.Session.AttachedEntity is not { Valid: true } user) + if (args.Actor is not { Valid: true } user) return; foreach (var entity in component.Container.ContainedEntities) diff --git a/Content.Server/Stunnable/Components/KnockdownOnHitComponent.cs b/Content.Server/Stunnable/Components/KnockdownOnHitComponent.cs new file mode 100644 index 00000000000..b89e674ecec --- /dev/null +++ b/Content.Server/Stunnable/Components/KnockdownOnHitComponent.cs @@ -0,0 +1,16 @@ +using Content.Shared.Standing; + +namespace Content.Server.Stunnable.Components; + +[RegisterComponent] +public sealed partial class KnockdownOnHitComponent : Component +{ + [DataField] + public TimeSpan Duration = TimeSpan.FromSeconds(1); + + [DataField] + public DropHeldItemsBehavior DropHeldItemsBehavior = DropHeldItemsBehavior.NoDrop; + + [DataField] + public bool RefreshDuration = true; +} diff --git a/Content.Server/Stunnable/Systems/KnockdownOnHitSystem.cs b/Content.Server/Stunnable/Systems/KnockdownOnHitSystem.cs new file mode 100644 index 00000000000..d1300c54f02 --- /dev/null +++ b/Content.Server/Stunnable/Systems/KnockdownOnHitSystem.cs @@ -0,0 +1,40 @@ +using System.Linq; +using Content.Server.Stunnable.Components; +using Content.Shared.StatusEffect; +using Content.Shared.Stunnable.Events; +using Content.Shared.Weapons.Melee.Events; + +namespace Content.Server.Stunnable.Systems; + +public sealed class KnockdownOnHitSystem : EntitySystem +{ + [Dependency] private readonly StunSystem _stun = default!; + + public override void Initialize() + { + SubscribeLocalEvent(OnMeleeHit); + } + + private void OnMeleeHit(Entity entity, ref MeleeHitEvent args) + { + if (args.Direction.HasValue || !args.IsHit || !args.HitEntities.Any() || entity.Comp.Duration <= TimeSpan.Zero) + return; + + var ev = new KnockdownOnHitAttemptEvent(); + RaiseLocalEvent(entity, ref ev); + if (ev.Cancelled) + return; + + foreach (var target in args.HitEntities) + { + if (!TryComp(target, out StatusEffectsComponent? statusEffects)) + continue; + + _stun.TryKnockdown(target, + entity.Comp.Duration, + entity.Comp.RefreshDuration, + entity.Comp.DropHeldItemsBehavior, + statusEffects); + } + } +} diff --git a/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraMonitorSystem.cs b/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraMonitorSystem.cs index f258fbe89cf..ca0f59cd14d 100644 --- a/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraMonitorSystem.cs +++ b/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraMonitorSystem.cs @@ -90,7 +90,7 @@ private void OnComponentStartup(EntityUid uid, SurveillanceCameraMonitorComponen private void OnSubnetRequest(EntityUid uid, SurveillanceCameraMonitorComponent component, SurveillanceCameraMonitorSubnetRequestMessage args) { - if (args.Session.AttachedEntity != null) + if (args.Actor != null) { SetActiveSubnet(uid, args.Subnet, component); } @@ -208,13 +208,9 @@ private void OnSurveillanceCameraDeactivate(EntityUid uid, SurveillanceCameraMon private void OnBoundUiClose(EntityUid uid, SurveillanceCameraMonitorComponent component, BoundUIClosedEvent args) { - if (args.Session.AttachedEntity == null) - { - return; - } - - RemoveViewer(uid, args.Session.AttachedEntity.Value, component); + RemoveViewer(uid, args.Actor, component); } + #endregion private void SendHeartbeat(EntityUid uid, SurveillanceCameraMonitorComponent? monitor = null) @@ -487,6 +483,6 @@ private void UpdateUserInterface(EntityUid uid, SurveillanceCameraMonitorCompone } var state = new SurveillanceCameraMonitorUiState(GetNetEntity(monitor.ActiveCamera), monitor.KnownSubnets.Keys.ToHashSet(), monitor.ActiveCameraAddress, monitor.ActiveSubnet, monitor.KnownCameras); - _userInterface.TrySetUiState(uid, SurveillanceCameraMonitorUiKey.Key, state); + _userInterface.SetUiState(uid, SurveillanceCameraMonitorUiKey.Key, state); } } diff --git a/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraRouterSystem.cs b/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraRouterSystem.cs index ac417230267..d0c2cd78d32 100644 --- a/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraRouterSystem.cs +++ b/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraRouterSystem.cs @@ -134,14 +134,14 @@ private void OnSetNetwork(EntityUid uid, SurveillanceCameraRouterComponent compo UpdateSetupInterface(uid, component); } - private void OpenSetupInterface(EntityUid uid, EntityUid player, SurveillanceCameraRouterComponent? camera = null, ActorComponent? actor = null) + private void OpenSetupInterface(EntityUid uid, EntityUid player, SurveillanceCameraRouterComponent? camera = null) { - if (!Resolve(uid, ref camera) || !Resolve(player, ref actor)) + if (!Resolve(uid, ref camera)) return; - if (!_userInterface.TryGetUi(uid, SurveillanceCameraSetupUiKey.Router, out var bui)) + + if (!_userInterface.TryOpenUi(uid, SurveillanceCameraSetupUiKey.Router, player)) return; - _userInterface.OpenUi(bui, actor.PlayerSession); UpdateSetupInterface(uid, camera); } @@ -154,13 +154,13 @@ private void UpdateSetupInterface(EntityUid uid, SurveillanceCameraRouterCompone if (router.AvailableNetworks.Count == 0 || router.SubnetFrequencyId != null) { - _userInterface.TryCloseAll(uid, SurveillanceCameraSetupUiKey.Router); + _userInterface.CloseUi(uid, SurveillanceCameraSetupUiKey.Router); return; } var state = new SurveillanceCameraSetupBoundUiState(router.SubnetName, deviceNet.ReceiveFrequency ?? 0, router.AvailableNetworks, true, router.SubnetFrequencyId != null); - _userInterface.TrySetUiState(uid, SurveillanceCameraSetupUiKey.Router, state); + _userInterface.SetUiState(uid, SurveillanceCameraSetupUiKey.Router, state); } private void SendHeartbeat(EntityUid uid, string origin, string destination, diff --git a/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraSpeakerSystem.cs b/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraSpeakerSystem.cs index 206c0800f0a..22af959fbd2 100644 --- a/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraSpeakerSystem.cs +++ b/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraSpeakerSystem.cs @@ -45,11 +45,11 @@ private void OnSpeechSent(EntityUid uid, SurveillanceCameraSpeakerComponent comp component.LastSoundPlayed = time; } - var nameEv = new TransformSpeakerNameEvent(args.Speaker, Name(args.Speaker)); + var nameEv = new TransformSpeakerSpeechEvent(args.Speaker, Name(args.Speaker)); RaiseLocalEvent(args.Speaker, nameEv); var name = Loc.GetString("speech-name-relay", ("speaker", Name(uid)), - ("originalName", nameEv.Name)); + ("originalName", nameEv.VoiceName ?? Name(uid))); // log to chat so people can identity the speaker/source, but avoid clogging ghost chat if there are many radios _chatSystem.TrySendInGameICMessage(uid, args.Message, InGameICChatType.Speak, ChatTransmitRange.GhostRangeLimit, nameOverride: name); diff --git a/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraSystem.cs b/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraSystem.cs index ec3d33157ab..accaa75d1c3 100644 --- a/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraSystem.cs +++ b/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraSystem.cs @@ -192,14 +192,14 @@ private void OnSetNetwork(EntityUid uid, SurveillanceCameraComponent component, UpdateSetupInterface(uid, component); } - private void OpenSetupInterface(EntityUid uid, EntityUid player, SurveillanceCameraComponent? camera = null, ActorComponent? actor = null) + private void OpenSetupInterface(EntityUid uid, EntityUid player, SurveillanceCameraComponent? camera = null) { - if (!Resolve(uid, ref camera) || !Resolve(player, ref actor)) + if (!Resolve(uid, ref camera)) return; - if (!_userInterface.TryGetUi(uid, SurveillanceCameraSetupUiKey.Camera, out var bui)) + + if (!_userInterface.TryOpenUi(uid, SurveillanceCameraSetupUiKey.Camera, player)) return; - _userInterface.OpenUi(bui, actor.PlayerSession); UpdateSetupInterface(uid, camera); } @@ -212,7 +212,7 @@ private void UpdateSetupInterface(EntityUid uid, SurveillanceCameraComponent? ca if (camera.NameSet && camera.NetworkSet) { - _userInterface.TryCloseAll(uid, SurveillanceCameraSetupUiKey.Camera); + _userInterface.CloseUi(uid, SurveillanceCameraSetupUiKey.Camera); return; } @@ -224,14 +224,14 @@ private void UpdateSetupInterface(EntityUid uid, SurveillanceCameraComponent? ca } else if (!camera.NetworkSet) { - _userInterface.TryCloseAll(uid, SurveillanceCameraSetupUiKey.Camera); + _userInterface.CloseUi(uid, SurveillanceCameraSetupUiKey.Camera); return; } } var state = new SurveillanceCameraSetupBoundUiState(camera.CameraId, deviceNet.ReceiveFrequency ?? 0, camera.AvailableNetworks, camera.NameSet, camera.NetworkSet); - _userInterface.TrySetUiState(uid, SurveillanceCameraSetupUiKey.Camera, state); + _userInterface.SetUiState(uid, SurveillanceCameraSetupUiKey.Camera, state); } // If the camera deactivates for any reason, it must have all viewers removed, diff --git a/Content.Server/Telescope/TelescopeSystem.cs b/Content.Server/Telescope/TelescopeSystem.cs new file mode 100644 index 00000000000..0e53cc15a20 --- /dev/null +++ b/Content.Server/Telescope/TelescopeSystem.cs @@ -0,0 +1,5 @@ +using Content.Shared.Telescope; + +namespace Content.Server.Telescope; + +public sealed class TelescopeSystem : SharedTelescopeSystem; diff --git a/Content.Server/TelescopicBaton/TelescopicBatonComponent.cs b/Content.Server/TelescopicBaton/TelescopicBatonComponent.cs new file mode 100644 index 00000000000..1846c76c75d --- /dev/null +++ b/Content.Server/TelescopicBaton/TelescopicBatonComponent.cs @@ -0,0 +1,17 @@ +namespace Content.Server.TelescopicBaton; + +[RegisterComponent] +public sealed partial class TelescopicBatonComponent : Component +{ + [DataField] + public bool CanKnockDown; + + /// + /// The amount of time during which the baton will be able to knockdown someone after activating it. + /// + [DataField] + public TimeSpan AttackTimeframe = TimeSpan.FromSeconds(1.5f); + + [ViewVariables(VVAccess.ReadOnly)] + public TimeSpan TimeframeAccumulator = TimeSpan.FromSeconds(0); +} diff --git a/Content.Server/TelescopicBaton/TelescopicBatonSystem.cs b/Content.Server/TelescopicBaton/TelescopicBatonSystem.cs new file mode 100644 index 00000000000..a859b447505 --- /dev/null +++ b/Content.Server/TelescopicBaton/TelescopicBatonSystem.cs @@ -0,0 +1,67 @@ +using Content.Shared.Item.ItemToggle.Components; +using Content.Shared.Stunnable.Events; +using Content.Shared.TelescopicBaton; +using Robust.Server.GameObjects; + +namespace Content.Server.TelescopicBaton; + +public sealed class TelescopicBatonSystem : EntitySystem +{ + [Dependency] private readonly AppearanceSystem _appearance = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnMapInit); + SubscribeLocalEvent(OnToggled); + SubscribeLocalEvent(OnKnockdownAttempt); + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var baton)) + { + if (!baton.CanKnockDown) + continue; + + baton.TimeframeAccumulator += TimeSpan.FromSeconds(frameTime); + if (baton.TimeframeAccumulator <= baton.AttackTimeframe) + continue; + + baton.CanKnockDown = false; // Only disable knockdown + baton.TimeframeAccumulator = TimeSpan.Zero; + } + } + + private void OnMapInit(Entity baton, ref MapInitEvent args) + { + ToggleBaton(baton, false); + } + + private void OnToggled(Entity baton, ref ItemToggledEvent args) + { + ToggleBaton(baton, args.Activated); + } + + private void OnKnockdownAttempt(Entity baton, ref KnockdownOnHitAttemptEvent args) + { + if (!baton.Comp.CanKnockDown) + { + args.Cancelled = true; + return; + } + + baton.Comp.CanKnockDown = false; + } + + public void ToggleBaton(Entity baton, bool state) + { + baton.Comp.TimeframeAccumulator = TimeSpan.Zero; + baton.Comp.CanKnockDown = state; + _appearance.SetData(baton, TelescopicBatonVisuals.State, state); + } +} diff --git a/Content.Server/Terminator/Components/TerminatorComponent.cs b/Content.Server/Terminator/Components/TerminatorComponent.cs deleted file mode 100644 index 9427f95eeda..00000000000 --- a/Content.Server/Terminator/Components/TerminatorComponent.cs +++ /dev/null @@ -1,19 +0,0 @@ -using Content.Server.Terminator.Systems; -using Robust.Shared.Prototypes; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.List; - -namespace Content.Server.Terminator.Components; - -/// -/// Main terminator component, handles the target, if any, and objectives. -/// -[RegisterComponent, Access(typeof(TerminatorSystem))] -public sealed partial class TerminatorComponent : Component -{ - /// - /// Used to force the terminate objective's target. - /// If null it will be a random person. - /// - [DataField("target")] - public EntityUid? Target; -} diff --git a/Content.Server/Terminator/Components/TerminatorTargetComponent.cs b/Content.Server/Terminator/Components/TerminatorTargetComponent.cs deleted file mode 100644 index 786cbd1167b..00000000000 --- a/Content.Server/Terminator/Components/TerminatorTargetComponent.cs +++ /dev/null @@ -1,16 +0,0 @@ -using Content.Server.Terminator.Systems; - -namespace Content.Server.Terminator.Components; - -/// -/// Sets after the ghost role spawns. -/// -[RegisterComponent, Access(typeof(TerminatorSystem))] -public sealed partial class TerminatorTargetComponent : Component -{ - /// - /// The target to set after the ghost role spawns. - /// - [DataField("target")] - public EntityUid? Target; -} diff --git a/Content.Server/Terminator/Systems/TerminatorSystem.cs b/Content.Server/Terminator/Systems/TerminatorSystem.cs deleted file mode 100644 index 837778d3c41..00000000000 --- a/Content.Server/Terminator/Systems/TerminatorSystem.cs +++ /dev/null @@ -1,75 +0,0 @@ -using Content.Server.Body.Components; -using Content.Server.GenericAntag; -using Content.Server.Ghost.Roles.Events; -using Content.Server.Roles; -using Content.Server.Terminator.Components; -using Content.Shared.Roles; -using Robust.Shared.Map; - -namespace Content.Server.Terminator.Systems; - -public sealed class TerminatorSystem : EntitySystem -{ - [Dependency] private readonly SharedRoleSystem _role = default!; - - public override void Initialize() - { - base.Initialize(); - - SubscribeLocalEvent(OnMapInit); - SubscribeLocalEvent(OnSpawned); - SubscribeLocalEvent(OnCreated); - } - - private void OnMapInit(EntityUid uid, TerminatorComponent comp, MapInitEvent args) - { - // cyborg doesn't need to breathe - //RemComp(uid); // DeltaV - paradox anomaly does actually need to breathe - } - - private void OnSpawned(EntityUid uid, TerminatorComponent comp, GhostRoleSpawnerUsedEvent args) - { - if (!TryComp(args.Spawner, out var target)) - return; - - comp.Target = target.Target; - } - - private void OnCreated(EntityUid uid, TerminatorComponent comp, ref GenericAntagCreatedEvent args) - { - var mindId = args.MindId; - var mind = args.Mind; - - _role.MindAddRole(mindId, new RoleBriefingComponent - { - Briefing = Loc.GetString("terminator-role-briefing") - }, mind); - _role.MindAddRole(mindId, new TerminatorRoleComponent(), mind); - } - - /// - /// DeltaV - used for paradox anomaly. - /// - public void SetTarget(Entity ent, EntityUid mindId) - { - ent.Comp ??= EnsureComp(ent); - ent.Comp.Target = mindId; - } - - /// - /// Create a spawner at a position and return it. - /// - /// Coordinates to create the spawner at - /// Optional target mind to force the terminator to target - public EntityUid CreateSpawner(EntityCoordinates coords, EntityUid? target) - { - var uid = Spawn("SpawnPointGhostTerminator", coords); - if (target != null) - { - var comp = EnsureComp(uid); - comp.Target = target; - } - - return uid; - } -} diff --git a/Content.Server/Thief/Systems/ThiefUndeterminedBackpackSystem.cs b/Content.Server/Thief/Systems/ThiefUndeterminedBackpackSystem.cs index 99185653288..133876bd751 100644 --- a/Content.Server/Thief/Systems/ThiefUndeterminedBackpackSystem.cs +++ b/Content.Server/Thief/Systems/ThiefUndeterminedBackpackSystem.cs @@ -79,6 +79,6 @@ private void UpdateUI(EntityUid uid, ThiefUndeterminedBackpackComponent? compone data.Add(i, info); } - _ui.TrySetUiState(uid, ThiefBackpackUIKey.Key, new ThiefBackpackBoundUserInterfaceState(data, MaxSelectedSets)); + _ui.SetUiState(uid, ThiefBackpackUIKey.Key, new ThiefBackpackBoundUserInterfaceState(data, MaxSelectedSets)); } } diff --git a/Content.Server/Tips/TipsSystem.cs b/Content.Server/Tips/TipsSystem.cs index cc45a3a1d5e..168f11de8f8 100644 --- a/Content.Server/Tips/TipsSystem.cs +++ b/Content.Server/Tips/TipsSystem.cs @@ -1,9 +1,13 @@ -using Content.Server.Chat.Managers; +using Content.Server.Chat.Managers; using Content.Server.GameTicking; using Content.Shared.CCVar; using Content.Shared.Chat; using Content.Shared.Dataset; +using Content.Shared.Tips; +using Robust.Server.GameObjects; +using Robust.Server.Player; using Robust.Shared.Configuration; +using Robust.Shared.Console; using Robust.Shared.Player; using Robust.Shared.Prototypes; using Robust.Shared.Random; @@ -22,11 +26,14 @@ public sealed class TipsSystem : EntitySystem [Dependency] private readonly IGameTiming _timing = default!; [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly GameTicker _ticker = default!; + [Dependency] private readonly IConsoleHost _conHost = default!; + [Dependency] private readonly IPlayerManager _playerManager = default!; private bool _tipsEnabled; private float _tipTimeOutOfRound; private float _tipTimeInRound; private string _tipsDataset = ""; + private float _tipTippyChance; [ViewVariables(VVAccess.ReadWrite)] private TimeSpan _nextTipTime = TimeSpan.Zero; @@ -40,10 +47,100 @@ public override void Initialize() Subs.CVar(_cfg, CCVars.TipFrequencyInRound, SetInRound, true); Subs.CVar(_cfg, CCVars.TipsEnabled, SetEnabled, true); Subs.CVar(_cfg, CCVars.TipsDataset, SetDataset, true); + Subs.CVar(_cfg, CCVars.TipsTippyChance, SetTippyChance, true); RecalculateNextTipTime(); + _conHost.RegisterCommand("tippy", Loc.GetString("cmd-tippy-desc"), Loc.GetString("cmd-tippy-help"), SendTippy, SendTippyHelper); + _conHost.RegisterCommand("tip", Loc.GetString("cmd-tip-desc"), "tip", SendTip); } + private CompletionResult SendTippyHelper(IConsoleShell shell, string[] args) + { + return args.Length switch + { + 1 => CompletionResult.FromHintOptions(CompletionHelper.SessionNames(), Loc.GetString("cmd-tippy-auto-1")), + 2 => CompletionResult.FromHint(Loc.GetString("cmd-tippy-auto-2")), + 3 => CompletionResult.FromHintOptions(CompletionHelper.PrototypeIDs(), Loc.GetString("cmd-tippy-auto-3")), + 4 => CompletionResult.FromHint(Loc.GetString("cmd-tippy-auto-4")), + 5 => CompletionResult.FromHint(Loc.GetString("cmd-tippy-auto-5")), + 6 => CompletionResult.FromHint(Loc.GetString("cmd-tippy-auto-6")), + _ => CompletionResult.Empty + }; + } + + private void SendTip(IConsoleShell shell, string argstr, string[] args) + { + AnnounceRandomTip(); + RecalculateNextTipTime(); + } + + private void SendTippy(IConsoleShell shell, string argstr, string[] args) + { + if (args.Length < 2) + { + shell.WriteLine(Loc.GetString("cmd-tippy-help")); + return; + } + + ActorComponent? actor = null; + if (args[0] != "all") + { + ICommonSession? session; + if (args.Length > 0) + { + // Get player entity + if (!_playerManager.TryGetSessionByUsername(args[0], out session)) + { + shell.WriteLine(Loc.GetString("cmd-tippy-error-no-user")); + return; + } + } + else + { + session = shell.Player; + } + + if (session?.AttachedEntity is not { } user) + { + shell.WriteLine(Loc.GetString("cmd-tippy-error-no-user")); + return; + } + + if (!TryComp(user, out actor)) + { + shell.WriteError(Loc.GetString("cmd-tippy-error-no-user")); + return; + } + } + + var ev = new TippyEvent(args[1]); + + if (args.Length > 2) + { + ev.Proto = args[2]; + if (!_prototype.HasIndex(args[2])) + { + shell.WriteError(Loc.GetString("cmd-tippy-error-no-prototype", ("proto", args[2]))); + return; + } + } + + if (args.Length > 3) + ev.SpeakTime = float.Parse(args[3]); + + if (args.Length > 4) + ev.SlideTime = float.Parse(args[4]); + + if (args.Length > 5) + ev.WaddleInterval = float.Parse(args[5]); + + if (actor != null) + RaiseNetworkEvent(ev, actor.PlayerSession); + else + RaiseNetworkEvent(ev); + } + + public override void Update(float frameTime) { base.Update(frameTime); @@ -81,6 +178,11 @@ private void SetDataset(string value) _tipsDataset = value; } + private void SetTippyChance(float value) + { + _tipTippyChance = value; + } + private void AnnounceRandomTip() { if (!_prototype.TryIndex(_tipsDataset, out var tips)) @@ -89,8 +191,16 @@ private void AnnounceRandomTip() var tip = _random.Pick(tips.Values); var msg = Loc.GetString("tips-system-chat-message-wrap", ("tip", tip)); - _chat.ChatMessageToManyFiltered(Filter.Broadcast(), ChatChannel.OOC, tip, msg, + if (_random.Prob(_tipTippyChance)) + { + var ev = new TippyEvent(msg); + ev.SpeakTime = 1 + tip.Length * 0.05f; + RaiseNetworkEvent(ev); + } else + { + _chat.ChatMessageToManyFiltered(Filter.Broadcast(), ChatChannel.OOC, tip, msg, EntityUid.Invalid, false, false, Color.MediumPurple); + } } private void RecalculateNextTipTime() diff --git a/Content.Server/Tools/Components/WelderComponent.cs b/Content.Server/Tools/Components/WelderComponent.cs deleted file mode 100644 index b0db2c58e88..00000000000 --- a/Content.Server/Tools/Components/WelderComponent.cs +++ /dev/null @@ -1,56 +0,0 @@ -using Content.Shared.Chemistry.Components; -using Content.Shared.Chemistry.Reagent; -using Content.Shared.FixedPoint; -using Content.Shared.Tools.Components; -using Robust.Shared.Audio; -using Robust.Shared.Prototypes; - -namespace Content.Server.Tools.Components -{ - [RegisterComponent] - public sealed partial class WelderComponent : SharedWelderComponent - { - /// - /// Name of . - /// - [DataField("fuelSolution"), ViewVariables(VVAccess.ReadWrite)] - public string FuelSolutionName = "Welder"; - - /// - /// Solution on the entity that contains the fuel. - /// - [DataField("fuelSolutionRef")] - public Entity? FuelSolution = null; - - /// - /// Reagent that will be used as fuel for welding. - /// - [DataField, ViewVariables(VVAccess.ReadWrite)] - public ProtoId FuelReagent = "WeldingFuel"; - - /// - /// Fuel consumption per second while the welder is active. - /// - [DataField, ViewVariables(VVAccess.ReadWrite)] - public FixedPoint2 FuelConsumption = FixedPoint2.New(2.0f); - - /// - /// A fuel amount to be consumed when the welder goes from being unlit to being lit. - /// - [DataField, ViewVariables(VVAccess.ReadWrite)] - public FixedPoint2 FuelLitCost = FixedPoint2.New(0.5f); - - /// - /// Sound played when refilling the welder. - /// - [DataField] - public SoundSpecifier WelderRefill = new SoundPathSpecifier("/Audio/Effects/refill.ogg"); - - /// - /// Whether the item is safe to refill while lit without exploding the tank. - /// - [DataField] - public bool TankSafe = false; //I have no idea what I'm doing - - } -} diff --git a/Content.Server/Tools/ToolSystem.Welder.cs b/Content.Server/Tools/ToolSystem.Welder.cs deleted file mode 100644 index 727526b3989..00000000000 --- a/Content.Server/Tools/ToolSystem.Welder.cs +++ /dev/null @@ -1,211 +0,0 @@ -using Content.Server.Chemistry.Components; -using Content.Server.IgnitionSource; -using Content.Server.Tools.Components; -using Content.Shared.Chemistry.Components.SolutionManager; -using Content.Shared.Database; -using Content.Shared.DoAfter; -using Content.Shared.Examine; -using Content.Shared.FixedPoint; -using Content.Shared.Interaction; -using Content.Shared.Item.ItemToggle; -using Content.Shared.Tools.Components; -using Robust.Shared.GameStates; -using System.Linq; -using Content.Shared.Item.ItemToggle.Components; - -namespace Content.Server.Tools -{ - public sealed partial class ToolSystem - { - [Dependency] private readonly SharedItemToggleSystem _itemToggle = default!; - [Dependency] private readonly IgnitionSourceSystem _ignitionSource = default!; - private readonly HashSet _activeWelders = new(); - - private const float WelderUpdateTimer = 1f; - private float _welderTimer; - - public void InitializeWelders() - { - SubscribeLocalEvent(OnWelderExamine); - SubscribeLocalEvent(OnWelderAfterInteract); - SubscribeLocalEvent>(OnWelderToolUseAttempt); - SubscribeLocalEvent(OnWelderShutdown); - SubscribeLocalEvent(OnWelderGetState); - SubscribeLocalEvent(OnToggle); - SubscribeLocalEvent(OnActivateAttempt); - } - - public (FixedPoint2 fuel, FixedPoint2 capacity) GetWelderFuelAndCapacity(EntityUid uid, WelderComponent? welder = null, SolutionContainerManagerComponent? solutionContainer = null) - { - if (!Resolve(uid, ref welder, ref solutionContainer) - || !_solutionContainer.ResolveSolution((uid, solutionContainer), welder.FuelSolutionName, ref welder.FuelSolution, out var fuelSolution)) - return (FixedPoint2.Zero, FixedPoint2.Zero); - - return (fuelSolution.GetTotalPrototypeQuantity(welder.FuelReagent), fuelSolution.MaxVolume); - } - - private void OnToggle(Entity entity, ref ItemToggledEvent args) - { - if (args.Activated) - TurnOn(entity, args.User); - else - TurnOff(entity, args.User); - } - - private void OnActivateAttempt(Entity entity, ref ItemToggleActivateAttemptEvent args) - { - if (!_solutionContainer.ResolveSolution(entity.Owner, entity.Comp.FuelSolutionName, ref entity.Comp.FuelSolution, out var solution)) - { - args.Cancelled = true; - args.Popup = Loc.GetString("welder-component-no-fuel-message"); - return; - } - - var fuel = solution.GetTotalPrototypeQuantity(entity.Comp.FuelReagent); - if (fuel == FixedPoint2.Zero || fuel < entity.Comp.FuelLitCost) - { - args.Popup = Loc.GetString("welder-component-no-fuel-message"); - args.Cancelled = true; - } - } - - public void TurnOn(Entity entity, EntityUid? user) - { - if (!_solutionContainer.ResolveSolution(entity.Owner, entity.Comp.FuelSolutionName, ref entity.Comp.FuelSolution)) - return; - - _solutionContainer.RemoveReagent(entity.Comp.FuelSolution.Value, entity.Comp.FuelReagent, entity.Comp.FuelLitCost); - AdminLogger.Add(LogType.InteractActivate, LogImpact.Low, - $"{ToPrettyString(user):user} toggled {ToPrettyString(entity.Owner):welder} on"); - - var xform = Transform(entity); - if (xform.GridUid is { } gridUid) - { - var position = _transformSystem.GetGridOrMapTilePosition(entity.Owner, xform); - _atmosphereSystem.HotspotExpose(gridUid, position, 700, 50, entity.Owner, true); - } - - _activeWelders.Add(entity); - } - - public void TurnOff(Entity entity, EntityUid? user) - { - AdminLogger.Add(LogType.InteractActivate, LogImpact.Low, - $"{ToPrettyString(user):user} toggled {ToPrettyString(entity.Owner):welder} off"); - _activeWelders.Remove(entity); - } - - private void OnWelderExamine(Entity entity, ref ExaminedEvent args) - { - using (args.PushGroup(nameof(WelderComponent))) - { - if (_itemToggle.IsActivated(entity.Owner)) - { - args.PushMarkup(Loc.GetString("welder-component-on-examine-welder-lit-message")); - } - else - { - args.PushMarkup(Loc.GetString("welder-component-on-examine-welder-not-lit-message")); - } - - if (args.IsInDetailsRange) - { - var (fuel, capacity) = GetWelderFuelAndCapacity(entity.Owner, entity.Comp); - - args.PushMarkup(Loc.GetString("welder-component-on-examine-detailed-message", - ("colorName", fuel < capacity / FixedPoint2.New(4f) ? "darkorange" : "orange"), - ("fuelLeft", fuel), - ("fuelCapacity", capacity), - ("status", string.Empty))); // Lit status is handled above - } - } - } - - private void OnWelderAfterInteract(Entity entity, ref AfterInteractEvent args) - { - if (args.Handled) - return; - - if (args.Target is not { Valid: true } target || !args.CanReach) - return; - - if (TryComp(target, out ReagentTankComponent? tank) - && tank.TankType == ReagentTankType.Fuel - && _solutionContainer.TryGetDrainableSolution(target, out var targetSoln, out var targetSolution) - && _solutionContainer.ResolveSolution(entity.Owner, entity.Comp.FuelSolutionName, ref entity.Comp.FuelSolution, out var welderSolution)) - { - var trans = FixedPoint2.Min(welderSolution.AvailableVolume, targetSolution.Volume); - if (trans > 0) - { - var drained = _solutionContainer.Drain(target, targetSoln.Value, trans); - _solutionContainer.TryAddSolution(entity.Comp.FuelSolution.Value, drained); - _audio.PlayPvs(entity.Comp.WelderRefill, entity); - _popup.PopupEntity(Loc.GetString("welder-component-after-interact-refueled-message"), entity, args.User); - } - else if (welderSolution.AvailableVolume <= 0) - { - _popup.PopupEntity(Loc.GetString("welder-component-already-full"), entity, args.User); - } - else - { - _popup.PopupEntity(Loc.GetString("welder-component-no-fuel-in-tank", ("owner", args.Target)), entity, args.User); - } - - args.Handled = true; - } - } - - private void OnWelderToolUseAttempt(Entity entity, ref DoAfterAttemptEvent args) - { - var user = args.DoAfter.Args.User; - - if (!_itemToggle.IsActivated(entity.Owner)) - { - _popup.PopupEntity(Loc.GetString("welder-component-welder-not-lit-message"), entity, user); - args.Cancel(); - } - } - - private void OnWelderShutdown(Entity entity, ref ComponentShutdown args) - { - _activeWelders.Remove(entity); - } - - private void OnWelderGetState(Entity entity, ref ComponentGetState args) - { - var (fuel, capacity) = GetWelderFuelAndCapacity(entity.Owner, entity.Comp); - args.State = new WelderComponentState(capacity.Float(), fuel.Float()); - } - - private void UpdateWelders(float frameTime) - { - _welderTimer += frameTime; - - if (_welderTimer < WelderUpdateTimer) - return; - - // TODO Serialization. _activeWelders is not serialized. - // Need to use some "active" component, and EntityQuery over that. - // Probably best to generalize it to a "ToggleableFuelDrain" component. - foreach (var tool in _activeWelders.ToArray()) - { - if (!TryComp(tool, out WelderComponent? welder) - || !TryComp(tool, out SolutionContainerManagerComponent? solutionContainer)) - continue; - - if (!_solutionContainer.ResolveSolution((tool, solutionContainer), welder.FuelSolutionName, ref welder.FuelSolution, out var solution)) - continue; - - _solutionContainer.RemoveReagent(welder.FuelSolution.Value, welder.FuelReagent, welder.FuelConsumption * _welderTimer); - - if (solution.GetTotalPrototypeQuantity(welder.FuelReagent) <= FixedPoint2.Zero) - { - _itemToggle.Toggle(tool, predicted: false); - } - - Dirty(tool, welder); - } - _welderTimer -= WelderUpdateTimer; - } - } -} diff --git a/Content.Server/Tools/ToolSystem.cs b/Content.Server/Tools/ToolSystem.cs index 7bae1778923..7738a6398fa 100644 --- a/Content.Server/Tools/ToolSystem.cs +++ b/Content.Server/Tools/ToolSystem.cs @@ -1,40 +1,63 @@ using Content.Server.Atmos.EntitySystems; -using Content.Server.Chemistry.Containers.EntitySystems; -using Content.Server.Popups; -using Content.Server.Tools.Components; +using Content.Shared.Chemistry.Components.SolutionManager; +using Content.Shared.FixedPoint; +using Content.Shared.Tools.Components; using Robust.Server.GameObjects; -using Robust.Shared.Audio.Systems; using SharedToolSystem = Content.Shared.Tools.Systems.SharedToolSystem; -namespace Content.Server.Tools +namespace Content.Server.Tools; + +public sealed class ToolSystem : SharedToolSystem { - // TODO move tool system to shared, and make it a friend of Tool Component. - public sealed partial class ToolSystem : SharedToolSystem - { - [Dependency] private readonly AtmosphereSystem _atmosphereSystem = default!; - [Dependency] private readonly PopupSystem _popup = default!; - [Dependency] private readonly SharedAudioSystem _audio = default!; - [Dependency] private readonly SolutionContainerSystem _solutionContainer = default!; - [Dependency] private readonly TransformSystem _transformSystem = default!; + [Dependency] private readonly AtmosphereSystem _atmosphereSystem = default!; + [Dependency] private readonly TransformSystem _transformSystem = default!; - public override void Initialize() + public override void TurnOn(Entity entity, EntityUid? user) + { + base.TurnOn(entity, user); + var xform = Transform(entity); + if (xform.GridUid is { } gridUid) { - base.Initialize(); - - InitializeWelders(); + var position = _transformSystem.GetGridOrMapTilePosition(entity.Owner, xform); + _atmosphereSystem.HotspotExpose(gridUid, position, 700, 50, entity.Owner, true); } + } - public override void Update(float frameTime) - { - base.Update(frameTime); + public override void Update(float frameTime) + { + base.Update(frameTime); - UpdateWelders(frameTime); - } + UpdateWelders(frameTime); + } - protected override bool IsWelder(EntityUid uid) + //todo move to shared once you can remove reagents from shared without it freaking out. + private void UpdateWelders(float frameTime) + { + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var welder, out var solutionContainer)) { - return HasComp(uid); + if (!welder.Enabled) + continue; + + welder.WelderTimer += frameTime; + + if (welder.WelderTimer < welder.WelderUpdateTimer) + continue; + + if (!SolutionContainerSystem.TryGetSolution((uid, solutionContainer), welder.FuelSolutionName, out var solutionComp, out var solution)) + continue; + + SolutionContainerSystem.RemoveReagent(solutionComp.Value, welder.FuelReagent, welder.FuelConsumption * welder.WelderTimer); + + if (solution.GetTotalPrototypeQuantity(welder.FuelReagent) <= FixedPoint2.Zero) + { + ItemToggle.Toggle(uid, predicted: false); + } + + Dirty(uid, welder); + welder.WelderTimer -= welder.WelderUpdateTimer; } } } + diff --git a/Content.Server/Traitor/Uplink/Commands/AddUplinkCommand.cs b/Content.Server/Traitor/Uplink/Commands/AddUplinkCommand.cs index 79192f6b496..63be36b360a 100644 --- a/Content.Server/Traitor/Uplink/Commands/AddUplinkCommand.cs +++ b/Content.Server/Traitor/Uplink/Commands/AddUplinkCommand.cs @@ -12,7 +12,6 @@ namespace Content.Server.Traitor.Uplink.Commands [AdminCommand(AdminFlags.Admin)] public sealed class AddUplinkCommand : IConsoleCommand { - [Dependency] private readonly IConfigurationManager _cfgManager = default!; [Dependency] private readonly IEntityManager _entManager = default!; [Dependency] private readonly IPlayerManager _playerManager = default!; diff --git a/Content.Server/Traits/Assorted/ForeignerTraitComponent.cs b/Content.Server/Traits/Assorted/ForeignerTraitComponent.cs index 756f44e7429..a35972f1c86 100644 --- a/Content.Server/Traits/Assorted/ForeignerTraitComponent.cs +++ b/Content.Server/Traits/Assorted/ForeignerTraitComponent.cs @@ -13,7 +13,7 @@ public sealed partial class ForeignerTraitComponent : Component { /// /// The "base" language that is to be removed and substituted with a translator. - /// By default, equals to the fallback language, which is GalacticCommon. + /// By default, equals to the fallback language, which is TauCetiBasic. /// [DataField] public ProtoId BaseLanguage = SharedLanguageSystem.FallbackLanguagePrototype; diff --git a/Content.Server/Traits/Assorted/ForeignerTraitSystem.cs b/Content.Server/Traits/Assorted/ForeignerTraitSystem.cs index 58e974227ce..ce9fb51a031 100644 --- a/Content.Server/Traits/Assorted/ForeignerTraitSystem.cs +++ b/Content.Server/Traits/Assorted/ForeignerTraitSystem.cs @@ -38,7 +38,7 @@ private void OnSpawn(Entity entity, ref ComponentInit a } var alternateLanguage = knowledge.SpokenLanguages.Find(it => it != entity.Comp.BaseLanguage); - if (alternateLanguage == null) + if (alternateLanguage == default) { Log.Warning($"Entity {entity.Owner} does not have an alternative language to choose from (must have at least one non-GC for ForeignerTrait)!"); return; @@ -46,12 +46,12 @@ private void OnSpawn(Entity entity, ref ComponentInit a if (TryGiveTranslator(entity.Owner, entity.Comp.BaseTranslator, entity.Comp.BaseLanguage, alternateLanguage, out var translator)) { - _languages.RemoveLanguage(entity, entity.Comp.BaseLanguage, entity.Comp.CantSpeak, entity.Comp.CantUnderstand, knowledge); + _languages.RemoveLanguage(entity.Owner, entity.Comp.BaseLanguage, entity.Comp.CantSpeak, entity.Comp.CantUnderstand); } } /// - /// Tries to create and give the entity a translator to translator that translates speech between the two specified languages. + /// Tries to create and give the entity a translator that translates speech between the two specified languages. /// public bool TryGiveTranslator( EntityUid uid, diff --git a/Content.Server/Traits/Assorted/LayingDownModifierSystem.cs b/Content.Server/Traits/Assorted/LayingDownModifierSystem.cs index dc6dcd2de3b..8c47d65233f 100644 --- a/Content.Server/Traits/Assorted/LayingDownModifierSystem.cs +++ b/Content.Server/Traits/Assorted/LayingDownModifierSystem.cs @@ -1,5 +1,5 @@ using Content.Server.Traits.Assorted; -using Content.Server.Standing; +using Content.Shared.Standing; namespace Content.Shared.Traits.Assorted.Systems; @@ -16,7 +16,7 @@ private void OnStartup(EntityUid uid, LayingDownModifierComponent component, Com if (!TryComp(uid, out var layingDown)) return; - layingDown.Cooldown *= component.LayingDownCooldownMultiplier; - layingDown.DownedSpeedMultiplier *= component.DownedSpeedMultiplierMultiplier; + layingDown.StandingUpTime *= component.LayingDownCooldownMultiplier; + layingDown.LyingSpeedModifier *= component.DownedSpeedMultiplierMultiplier; } } diff --git a/Content.Server/Traits/Assorted/NarcolepsyComponent.cs b/Content.Server/Traits/Assorted/NarcolepsyComponent.cs index efa34584958..d18d35f22c7 100644 --- a/Content.Server/Traits/Assorted/NarcolepsyComponent.cs +++ b/Content.Server/Traits/Assorted/NarcolepsyComponent.cs @@ -20,5 +20,21 @@ public sealed partial class NarcolepsyComponent : Component [DataField("durationOfIncident", required: true)] public Vector2 DurationOfIncident { get; private set; } + [DataField] public float NextIncidentTime; + + /// + /// Locales for popups shown when the entity is about to fall asleep/is waking up. + /// They are fetched in the format of "(base)-(random number between 1 and count)", e.g. "narcolepsy-warning-popup-3". + /// + [DataField] + public string WarningLocaleBase = "narcolepsy-warning-popup", WakeupLocaleBase = "narcolepsy-wakeup-popup"; + + [DataField] + public int WarningLocaleCount = 5, WakeupLocaleCount = 3; + + [DataField] + public float TimeBeforeWarning = 20f, WarningChancePerSecond = 0.25f; + + public float LastWarningRollTime = float.MaxValue; } diff --git a/Content.Server/Traits/Assorted/NarcolepsySystem.cs b/Content.Server/Traits/Assorted/NarcolepsySystem.cs index e4fa1ccbc73..1a6e6d92bc6 100644 --- a/Content.Server/Traits/Assorted/NarcolepsySystem.cs +++ b/Content.Server/Traits/Assorted/NarcolepsySystem.cs @@ -1,5 +1,9 @@ +using Content.Server.Chat.Managers; using Content.Shared.Bed.Sleep; +using Content.Shared.Chat; +using Content.Shared.Popups; using Content.Shared.StatusEffect; +using Robust.Shared.Player; using Robust.Shared.Random; namespace Content.Server.Traits.Assorted; @@ -12,6 +16,8 @@ public sealed class NarcolepsySystem : EntitySystem [ValidatePrototypeId] private const string StatusEffectKey = "ForcedSleep"; // Same one used by N2O and other sleep chems. + [Dependency] private readonly IChatManager _chatMan = default!; + [Dependency] private readonly SharedPopupSystem _popups = default!; [Dependency] private readonly StatusEffectsSystem _statusEffects = default!; [Dependency] private readonly IRobustRandom _random = default!; @@ -19,20 +25,38 @@ public sealed class NarcolepsySystem : EntitySystem public override void Initialize() { SubscribeLocalEvent(SetupNarcolepsy); + SubscribeLocalEvent(OnSleepChanged); } private void SetupNarcolepsy(EntityUid uid, NarcolepsyComponent component, ComponentStartup args) { - component.NextIncidentTime = - _random.NextFloat(component.TimeBetweenIncidents.X, component.TimeBetweenIncidents.Y); + PrepareNextIncident((uid, component)); } - public void AdjustNarcolepsyTimer(EntityUid uid, int TimerReset, NarcolepsyComponent? narcolepsy = null) + private void OnSleepChanged(Entity ent, ref SleepStateChangedEvent args) { - if (!Resolve(uid, ref narcolepsy, false)) + // When falling asleep while an incident is nigh, force it to happen immediately. + if (args.FellAsleep) + { + if (ent.Comp.NextIncidentTime < ent.Comp.TimeBeforeWarning) + StartIncident(ent); + return; + } + + // When waking up after sleeping for at least the minimum time of an incident, reset the incident timer and show a popup. + if (args.TimeSlept is null || args.TimeSlept.Value.TotalSeconds < ent.Comp.DurationOfIncident.X) return; - narcolepsy.NextIncidentTime = TimerReset; + ShowRandomPopup(ent, ent.Comp.WakeupLocaleBase, ent.Comp.WakeupLocaleCount); + PrepareNextIncident(ent); + } + + public void AdjustNarcolepsyTimer(EntityUid uid, float setTime, NarcolepsyComponent? narcolepsy = null) + { + if (!Resolve(uid, ref narcolepsy, false) || narcolepsy.NextIncidentTime > setTime) + return; + + narcolepsy.NextIncidentTime = setTime; } public override void Update(float frameTime) @@ -42,22 +66,52 @@ public override void Update(float frameTime) var query = EntityQueryEnumerator(); while (query.MoveNext(out var uid, out var narcolepsy)) { + if (HasComp(uid)) + continue; + narcolepsy.NextIncidentTime -= frameTime; + if (narcolepsy.NextIncidentTime <= narcolepsy.TimeBeforeWarning && narcolepsy.NextIncidentTime < narcolepsy.LastWarningRollTime - 1f) + { + // Roll for showing a popup. There should really be a class for doing this. + narcolepsy.LastWarningRollTime = narcolepsy.NextIncidentTime; + if (_random.Prob(narcolepsy.WarningChancePerSecond)) + { + ShowRandomPopup(uid, narcolepsy.WarningLocaleBase, narcolepsy.WakeupLocaleCount); + narcolepsy.LastWarningRollTime = 0f; // Do not show any more popups for the upcoming incident + } + } if (narcolepsy.NextIncidentTime >= 0) continue; - // Set the new time. - narcolepsy.NextIncidentTime += - _random.NextFloat(narcolepsy.TimeBetweenIncidents.X, narcolepsy.TimeBetweenIncidents.Y); + StartIncident((uid, narcolepsy)); + } + } - var duration = _random.NextFloat(narcolepsy.DurationOfIncident.X, narcolepsy.DurationOfIncident.Y); + public void StartIncident(Entity ent) + { + var duration = _random.NextFloat(ent.Comp.DurationOfIncident.X, ent.Comp.DurationOfIncident.Y); + PrepareNextIncident(ent, duration); - // Make sure the sleep time doesn't cut into the time to next incident. - narcolepsy.NextIncidentTime += duration; + _statusEffects.TryAddStatusEffect(ent, StatusEffectKey, TimeSpan.FromSeconds(duration), false); + } - _statusEffects.TryAddStatusEffect(uid, StatusEffectKey, - TimeSpan.FromSeconds(duration), false); - } + private void PrepareNextIncident(Entity ent, float startingFrom = 0f) + { + var time = _random.NextFloat(ent.Comp.TimeBetweenIncidents.X, ent.Comp.TimeBetweenIncidents.Y); + ent.Comp.NextIncidentTime = startingFrom + time; + ent.Comp.LastWarningRollTime = float.MaxValue; + } + + private void ShowRandomPopup(EntityUid uid, string prefix, int count) + { + if (count <= 0 || !TryComp(uid, out var actor)) + return; + + var popup = Loc.GetString($"{prefix}-{_random.Next(1, count + 1)}"); + _popups.PopupEntity(popup, uid, uid, PopupType.MediumCaution); + // This should use ChatChannel.Visual, but it's not displayed on the client. + _chatMan.ChatMessageToOne(ChatChannel.Notifications, popup, popup, uid, false, + actor.PlayerSession.Channel, Color.IndianRed); } } diff --git a/Content.Server/Traits/Assorted/PotentiaModifierComponent.cs b/Content.Server/Traits/Assorted/PotentiaModifierComponent.cs new file mode 100644 index 00000000000..2ddfd633b9b --- /dev/null +++ b/Content.Server/Traits/Assorted/PotentiaModifierComponent.cs @@ -0,0 +1,20 @@ +namespace Content.Server.Traits.Assorted; + +/// +/// This is used for traits that modify the outcome of Potentia Rolls +/// +[RegisterComponent] +public sealed partial class PotentiaModifierComponent : Component +{ + /// + /// When rolling for psionic powers, increase the potentia gains by a flat amount. + /// + [DataField] + public float PotentiaFlatModifier = 0; + + /// + /// When rolling for psionic powers, multiply the potentia gains by a specific factor. + /// + [DataField] + public float PotentiaMultiplier = 1; +} diff --git a/Content.Server/Traits/Assorted/PotentiaModifierSystem.cs b/Content.Server/Traits/Assorted/PotentiaModifierSystem.cs new file mode 100644 index 00000000000..f05f788a08d --- /dev/null +++ b/Content.Server/Traits/Assorted/PotentiaModifierSystem.cs @@ -0,0 +1,19 @@ +using Content.Server.Psionics; + +namespace Content.Server.Traits.Assorted; +public sealed partial class PotentiaModifierSystem : EntitySystem +{ + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnRollPsionics); + } + + private void OnRollPsionics(EntityUid uid, PotentiaModifierComponent component, ref OnRollPsionicsEvent args) + { + if (uid != args.Roller) + return; + + args.BaselineChance = args.BaselineChance * component.PotentiaMultiplier + component.PotentiaFlatModifier; + } +} diff --git a/Content.Server/Traits/Assorted/SingerSystem.cs b/Content.Server/Traits/Assorted/SingerSystem.cs index 7b560957b6e..78a4101a65f 100644 --- a/Content.Server/Traits/Assorted/SingerSystem.cs +++ b/Content.Server/Traits/Assorted/SingerSystem.cs @@ -65,9 +65,7 @@ private void OnEquip(GotEquippedEvent args) if (TryComp(args.Equipment, out var accent) && accent.ReplacementPrototype == "mumble" && args.Slot == "mask") - { CloseMidiUi(args.Equipee); - } } private void OnMobStateChangedEvent(EntityUid uid, SharedInstrumentComponent component, MobStateChangedEvent args) @@ -154,8 +152,6 @@ public override void CloseMidiUi(EntityUid uid) { if (HasComp(uid) && TryComp(uid, out var actor)) - { - _instrument.ToggleInstrumentUi(uid, actor.PlayerSession); - } + _instrument.ToggleInstrumentUi(uid, actor.PlayerSession.AttachedEntity ?? EntityUid.Invalid); } } diff --git a/Content.Server/Traits/BloodDeficiencyComponent.cs b/Content.Server/Traits/BloodDeficiencyComponent.cs index c6219d3e02d..ce438278f74 100644 --- a/Content.Server/Traits/BloodDeficiencyComponent.cs +++ b/Content.Server/Traits/BloodDeficiencyComponent.cs @@ -11,4 +11,10 @@ public sealed partial class BloodDeficiencyComponent : Component // [DataField(required: true)] public float BloodLossPercentage; + + /// + /// Whether the effects of this trait should be active. + /// + [DataField] + public bool Active = true; } diff --git a/Content.Server/Traits/BloodDeficiencySystem.cs b/Content.Server/Traits/BloodDeficiencySystem.cs index ee7a39e46ee..8928bc57a1c 100644 --- a/Content.Server/Traits/BloodDeficiencySystem.cs +++ b/Content.Server/Traits/BloodDeficiencySystem.cs @@ -1,23 +1,24 @@ -using Content.Server.Body.Systems; using Content.Server.Body.Components; -using Content.Shared.Damage; +using Content.Server.Body.Events; +using Content.Server.Traits.Assorted; +using Content.Shared.FixedPoint; -namespace Content.Server.Traits.Assorted; +namespace Content.Server.Traits; public sealed class BloodDeficiencySystem : EntitySystem { public override void Initialize() { base.Initialize(); - SubscribeLocalEvent(OnStartup); + SubscribeLocalEvent(OnBloodRegen); } - private void OnStartup(EntityUid uid, BloodDeficiencyComponent component, ComponentStartup args) + private void OnBloodRegen(Entity ent, ref NaturalBloodRegenerationAttemptEvent args) { - if (!TryComp(uid, out var bloodstream)) + if (!ent.Comp.Active || !TryComp(ent.Owner, out var bloodstream)) return; - bloodstream.HasBloodDeficiency = true; - bloodstream.BloodDeficiencyLossPercentage = component.BloodLossPercentage; + args.Amount = FixedPoint2.Min(args.Amount, 0) // If the blood regen amount already was negative, we keep it. + - bloodstream.BloodMaxVolume * ent.Comp.BloodLossPercentage; } } diff --git a/Content.Server/Traits/TraitSystem.Functions.cs b/Content.Server/Traits/TraitSystem.Functions.cs new file mode 100644 index 00000000000..528cb4f9183 --- /dev/null +++ b/Content.Server/Traits/TraitSystem.Functions.cs @@ -0,0 +1,265 @@ +using Content.Shared.Traits; +using JetBrains.Annotations; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization.Manager; +using Content.Shared.Implants; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Set; +using Content.Shared.Actions; +using Content.Server.Abilities.Psionics; +using Content.Shared.Psionics; +using Content.Server.Language; +using Content.Shared.Mood; +using Content.Server.NPC.Systems; + +namespace Content.Server.Traits; + +/// Used for traits that add a Component upon spawning in, overwriting the pre-existing component if it already exists. +[UsedImplicitly] +public sealed partial class TraitReplaceComponent : TraitFunction +{ + [DataField, AlwaysPushInheritance] + public ComponentRegistry Components { get; private set; } = new(); + + public override void OnPlayerSpawn(EntityUid uid, + IComponentFactory factory, + IEntityManager entityManager, + ISerializationManager serializationManager) + { + foreach (var (_, data) in Components) + { + var comp = (Component) serializationManager.CreateCopy(data.Component, notNullableOverride: true); + comp.Owner = uid; + entityManager.AddComponent(uid, comp, true); + } + } +} + +/// +/// Used for traits that add a Component upon spawning in. +/// This will do nothing if the Component already exists. +/// +[UsedImplicitly] +public sealed partial class TraitAddComponent : TraitFunction +{ + [DataField, AlwaysPushInheritance] + public ComponentRegistry Components { get; private set; } = new(); + + public override void OnPlayerSpawn(EntityUid uid, + IComponentFactory factory, + IEntityManager entityManager, + ISerializationManager serializationManager) + { + foreach (var entry in Components.Values) + { + if (entityManager.HasComponent(uid, entry.Component.GetType())) + continue; + + var comp = (Component) serializationManager.CreateCopy(entry.Component, notNullableOverride: true); + comp.Owner = uid; + entityManager.AddComponent(uid, comp); + } + } +} + +/// Used for traits that remove a component upon a player spawning in. +[UsedImplicitly] +public sealed partial class TraitRemoveComponent : TraitFunction +{ + [DataField, AlwaysPushInheritance] + public ComponentRegistry Components { get; private set; } = new(); + + public override void OnPlayerSpawn(EntityUid uid, + IComponentFactory factory, + IEntityManager entityManager, + ISerializationManager serializationManager) + { + foreach (var (name, _) in Components) + entityManager.RemoveComponent(uid, (Component) factory.GetComponent(name)); + } +} + +/// Used for traits that add an action upon a player spawning in. +[UsedImplicitly] +public sealed partial class TraitAddActions : TraitFunction +{ + [DataField, AlwaysPushInheritance] + public List Actions { get; private set; } = new(); + + public override void OnPlayerSpawn(EntityUid uid, + IComponentFactory factory, + IEntityManager entityManager, + ISerializationManager serializationManager) + { + var actionSystem = entityManager.System(); + + foreach (var id in Actions) + { + EntityUid? actionId = null; + if (actionSystem.AddAction(uid, ref actionId, id)) + actionSystem.StartUseDelay(actionId); + } + } +} + +/// Used for traits that add an Implant upon spawning in. +[UsedImplicitly] +public sealed partial class TraitAddImplant : TraitFunction +{ + [DataField(customTypeSerializer: typeof(PrototypeIdHashSetSerializer))] + [AlwaysPushInheritance] + public HashSet Implants { get; private set; } = new(); + + public override void OnPlayerSpawn(EntityUid uid, + IComponentFactory factory, + IEntityManager entityManager, + ISerializationManager serializationManager) + { + var implantSystem = entityManager.System(); + implantSystem.AddImplants(uid, Implants); + } +} + +/// +/// If a trait includes any Psionic Powers, this enters the powers into PsionicSystem to be initialized. +/// If the lack of logic here seems startling, it's okay. All of the logic necessary for adding Psionics is handled by InitializePsionicPower. +/// +[UsedImplicitly] +public sealed partial class TraitAddPsionics : TraitFunction +{ + [DataField, AlwaysPushInheritance] + public List> PsionicPowers { get; private set; } = new(); + + public override void OnPlayerSpawn(EntityUid uid, + IComponentFactory factory, + IEntityManager entityManager, + ISerializationManager serializationManager) + { + var prototype = IoCManager.Resolve(); + var psionic = entityManager.System(); + + foreach (var powerProto in PsionicPowers) + if (prototype.TryIndex(powerProto, out var psionicPower)) + psionic.InitializePsionicPower(uid, psionicPower, false); + } +} + +/// Handles all modification of Known Languages. Removes languages before adding them. +[UsedImplicitly] +public sealed partial class TraitModifyLanguages : TraitFunction +{ + /// The list of all Spoken Languages that this trait adds. + [DataField, AlwaysPushInheritance] + public List? LanguagesSpoken { get; private set; } = default!; + + /// The list of all Understood Languages that this trait adds. + [DataField, AlwaysPushInheritance] + public List? LanguagesUnderstood { get; private set; } = default!; + + /// The list of all Spoken Languages that this trait removes. + [DataField, AlwaysPushInheritance] + public List? RemoveLanguagesSpoken { get; private set; } = default!; + + /// The list of all Understood Languages that this trait removes. + [DataField, AlwaysPushInheritance] + public List? RemoveLanguagesUnderstood { get; private set; } = default!; + + public override void OnPlayerSpawn(EntityUid uid, + IComponentFactory factory, + IEntityManager entityManager, + ISerializationManager serializationManager) + { + var language = entityManager.System(); + + if (RemoveLanguagesSpoken is not null) + foreach (var lang in RemoveLanguagesSpoken) + language.RemoveLanguage(uid, lang, true, false); + + if (RemoveLanguagesUnderstood is not null) + foreach (var lang in RemoveLanguagesUnderstood) + language.RemoveLanguage(uid, lang, false, true); + + if (LanguagesSpoken is not null) + foreach (var lang in LanguagesSpoken) + language.AddLanguage(uid, lang, true, false); + + if (LanguagesUnderstood is not null) + foreach (var lang in LanguagesUnderstood) + language.AddLanguage(uid, lang, false, true); + } +} + +/// Handles adding Moodlets to a player character upon spawning in. Typically used for permanent moodlets or drug addictions. +[UsedImplicitly] +public sealed partial class TraitAddMoodlets : TraitFunction +{ + /// The list of all Moodlets that this trait adds. + [DataField, AlwaysPushInheritance] + public List> MoodEffects { get; private set; } = new(); + + public override void OnPlayerSpawn(EntityUid uid, + IComponentFactory factory, + IEntityManager entityManager, + ISerializationManager serializationManager) + { + var prototype = IoCManager.Resolve(); + + foreach (var moodProto in MoodEffects) + if (prototype.TryIndex(moodProto, out var moodlet)) + entityManager.EventBus.RaiseLocalEvent(uid, new MoodEffectEvent(moodlet.ID)); + } +} + +/// Add or remove Factions from a player upon spawning in. +[UsedImplicitly] +public sealed partial class TraitModifyFactions : TraitFunction +{ + /// + /// The list of all Factions that this trait removes. + /// + /// + /// I can't actually Validate these because the proto lives in Shared. + /// + [DataField, AlwaysPushInheritance] + public List RemoveFactions { get; private set; } = new(); + + /// + /// The list of all Factions that this trait adds. + /// + /// + /// I can't actually Validate these because the proto lives in Shared. + /// + [DataField, AlwaysPushInheritance] + public List AddFactions { get; private set; } = new(); + + public override void OnPlayerSpawn(EntityUid uid, + IComponentFactory factory, + IEntityManager entityManager, + ISerializationManager serializationManager) + { + var factionSystem = entityManager.System(); + + foreach (var faction in RemoveFactions) + factionSystem.RemoveFaction(uid, faction); + + foreach (var faction in AddFactions) + factionSystem.AddFaction(uid, faction); + } +} + +/// Only use this if you know what you're doing. This function directly writes to any arbitrary component. +[UsedImplicitly] +public sealed partial class TraitVVEdit : TraitFunction +{ + [DataField, AlwaysPushInheritance] + public Dictionary VVEdit { get; private set; } = new(); + + public override void OnPlayerSpawn(EntityUid uid, + IComponentFactory factory, + IEntityManager entityManager, + ISerializationManager serializationManager) + { + var vvm = IoCManager.Resolve(); + foreach (var (path, value) in VVEdit) + vvm.WritePath(path, value); + } +} diff --git a/Content.Server/Traits/TraitSystem.cs b/Content.Server/Traits/TraitSystem.cs index 39812f65b6d..75771a57432 100644 --- a/Content.Server/Traits/TraitSystem.cs +++ b/Content.Server/Traits/TraitSystem.cs @@ -1,5 +1,4 @@ using System.Linq; -using Content.Shared.Actions; using Content.Server.GameTicking; using Content.Server.Players.PlayTimeTracking; using Content.Shared.Customization.Systems; @@ -10,9 +9,6 @@ using Robust.Shared.Prototypes; using Robust.Shared.Serialization.Manager; using Robust.Shared.Utility; -using Content.Server.Abilities.Psionics; -using Content.Shared.Psionics; -using Content.Shared.Mood; namespace Content.Server.Traits; @@ -23,8 +19,6 @@ public sealed class TraitSystem : EntitySystem [Dependency] private readonly CharacterRequirementsSystem _characterRequirements = default!; [Dependency] private readonly PlayTimeTrackingManager _playTimeTracking = default!; [Dependency] private readonly IConfigurationManager _configuration = default!; - [Dependency] private readonly SharedActionsSystem _actions = default!; - [Dependency] private readonly PsionicAbilitiesSystem _psionicAbilities = default!; [Dependency] private readonly IComponentFactory _componentFactory = default!; public override void Initialize() @@ -62,97 +56,7 @@ private void OnPlayerSpawnComplete(PlayerSpawnCompleteEvent args) /// public void AddTrait(EntityUid uid, TraitPrototype traitPrototype) { - RemoveTraitComponents(uid, traitPrototype); - AddTraitComponents(uid, traitPrototype); - AddTraitActions(uid, traitPrototype); - AddTraitPsionics(uid, traitPrototype); - AddTraitMoodlets(uid, traitPrototype); - } - - /// - /// Removes all components defined by a Trait. It's not possible to validate component removals, - /// so if an incorrect string is given, it's basically a skill issue. - /// - /// - /// This comes before AddTraitComponents for a good reason. - /// It allows for a component to optionally be fully wiped and replaced with a new component. - /// - public void RemoveTraitComponents(EntityUid uid, TraitPrototype traitPrototype) - { - if (traitPrototype.ComponentRemovals is null) - return; - - foreach (var entry in traitPrototype.ComponentRemovals) - { - if (!_componentFactory.TryGetRegistration(entry, out var comp)) - continue; - - EntityManager.RemoveComponent(uid, comp.Type); - } - } - - /// - /// Adds all Components included with a Trait. - /// - public void AddTraitComponents(EntityUid uid, TraitPrototype traitPrototype) - { - if (traitPrototype.Components is null) - return; - - foreach (var entry in traitPrototype.Components.Values) - { - if (HasComp(uid, entry.Component.GetType())) - continue; - - var comp = (Component) _serialization.CreateCopy(entry.Component, notNullableOverride: true); - comp.Owner = uid; - EntityManager.AddComponent(uid, comp); - } - } - - /// - /// Add all actions associated with a specific Trait - /// - public void AddTraitActions(EntityUid uid, TraitPrototype traitPrototype) - { - if (traitPrototype.Actions is null) - return; - - foreach (var id in traitPrototype.Actions) - { - EntityUid? actionId = null; - if (_actions.AddAction(uid, ref actionId, id)) - { - _actions.StartUseDelay(actionId); - } - } - } - - /// - /// If a trait includes any Psionic Powers, this enters the powers into PsionicSystem to be initialized. - /// If the lack of logic here seems startling, it's okay. All of the logic necessary for adding Psionics is handled by InitializePsionicPower. - /// - public void AddTraitPsionics(EntityUid uid, TraitPrototype traitPrototype) - { - if (traitPrototype.PsionicPowers is null) - return; - - foreach (var powerProto in traitPrototype.PsionicPowers) - if (_prototype.TryIndex(powerProto, out var psionicPower)) - _psionicAbilities.InitializePsionicPower(uid, psionicPower, false); - } - - /// - /// If a trait includes any moodlets, this adds the moodlets to the receiving entity. - /// While I can't stop you, you shouldn't use this to add temporary moodlets. - /// - public void AddTraitMoodlets(EntityUid uid, TraitPrototype traitPrototype) - { - if (traitPrototype.MoodEffects is null) - return; - - foreach (var moodProto in traitPrototype.MoodEffects) - if (_prototype.TryIndex(moodProto, out var moodlet)) - RaiseLocalEvent(uid, new MoodEffectEvent(moodlet.ID)); + foreach (var function in traitPrototype.Functions) + function.OnPlayerSpawn(uid, _componentFactory, EntityManager, _serialization); } } diff --git a/Content.Server/UserInterface/ActivatableUIComponent.cs b/Content.Server/UserInterface/ActivatableUIComponent.cs deleted file mode 100644 index cc0e5008e47..00000000000 --- a/Content.Server/UserInterface/ActivatableUIComponent.cs +++ /dev/null @@ -1,75 +0,0 @@ -using Content.Shared.Whitelist; -using Robust.Server.GameObjects; -using Robust.Server.Player; -using Robust.Shared.Player; -using Robust.Shared.Serialization.TypeSerializers.Implementations; - -namespace Content.Server.UserInterface -{ - [RegisterComponent] - public sealed partial class ActivatableUIComponent : Component - { - [DataField(required: true, customTypeSerializer:typeof(EnumSerializer))] - public Enum? Key { get; set; } - - [ViewVariables(VVAccess.ReadWrite)] - [DataField] - public bool InHandsOnly { get; set; } = false; - - [DataField] - public bool SingleUser { get; set; } = false; - - [ViewVariables(VVAccess.ReadWrite)] - [DataField] - public bool AdminOnly { get; set; } = false; - - [DataField] - public LocId VerbText = "ui-verb-toggle-open"; - - /// - /// Whether you need a hand to operate this UI. The hand does not need to be free, you just need to have one. - /// - /// - /// This should probably be true for most machines & computers, but there will still be UIs that represent a - /// more generic interaction / configuration that might not require hands. - /// - [ViewVariables(VVAccess.ReadWrite)] - [DataField] - public bool RequireHands = true; - - /// - /// Entities that are required to open this UI. - /// - [DataField("allowedItems")] - [ViewVariables(VVAccess.ReadWrite)] - public EntityWhitelist? AllowedItems = null; - - /// - /// Whether you can activate this ui with activateinhand or not - /// - [ViewVariables(VVAccess.ReadWrite)] - [DataField] - public bool RightClickOnly; - - /// - /// Whether spectators (non-admin ghosts) should be allowed to view this UI. - /// - [ViewVariables(VVAccess.ReadWrite)] - [DataField] - public bool AllowSpectator = true; - - /// - /// Whether the UI should close when the item is deselected due to a hand swap or drop - /// - [ViewVariables(VVAccess.ReadWrite)] - [DataField] - public bool CloseOnHandDeselect = true; - - /// - /// The client channel currently using the object, or null if there's none/not single user. - /// NOTE: DO NOT DIRECTLY SET, USE ActivatableUISystem.SetCurrentSingleUser - /// - [ViewVariables] - public ICommonSession? CurrentSingleUser; - } -} diff --git a/Content.Server/UserInterface/ActivatableUIRequiresPowerCellComponent.cs b/Content.Server/UserInterface/ActivatableUIRequiresPowerCellComponent.cs deleted file mode 100644 index fdc56f89a05..00000000000 --- a/Content.Server/UserInterface/ActivatableUIRequiresPowerCellComponent.cs +++ /dev/null @@ -1,14 +0,0 @@ -using Content.Server.PowerCell; -using Content.Shared.PowerCell; -using Content.Shared.UserInterface; - -namespace Content.Server.UserInterface; - -/// -/// Specifies that the attached entity requires power. -/// -[RegisterComponent] -public sealed partial class ActivatableUIRequiresPowerCellComponent : Component -{ - -} diff --git a/Content.Server/UserInterface/ActivatableUISystem.Power.cs b/Content.Server/UserInterface/ActivatableUISystem.Power.cs deleted file mode 100644 index d4dcc91d46e..00000000000 --- a/Content.Server/UserInterface/ActivatableUISystem.Power.cs +++ /dev/null @@ -1,81 +0,0 @@ -using Content.Server.PowerCell; -using Content.Shared.PowerCell; -using Content.Shared.UserInterface; -using Robust.Shared.Containers; - -namespace Content.Server.UserInterface; - -public sealed partial class ActivatableUISystem -{ - [Dependency] private readonly PowerCellSystem _cell = default!; - - private void InitializePower() - { - SubscribeLocalEvent(OnBatteryOpenAttempt); - SubscribeLocalEvent(OnBatteryOpened); - SubscribeLocalEvent(OnBatteryClosed); - - SubscribeLocalEvent(OnPowerCellRemoved); - } - - private void OnPowerCellRemoved(EntityUid uid, PowerCellDrawComponent component, EntRemovedFromContainerMessage args) - { - _cell.SetPowerCellDrawEnabled(uid, false); - - if (HasComp(uid) && - TryComp(uid, out var activatable) && - activatable.Key != null) - { - _uiSystem.TryCloseAll(uid, activatable.Key); - } - } - - private void OnBatteryOpened(EntityUid uid, ActivatableUIRequiresPowerCellComponent component, BoundUIOpenedEvent args) - { - var activatable = Comp(uid); - - if (!args.UiKey.Equals(activatable.Key)) - return; - - _cell.SetPowerCellDrawEnabled(uid, true); - } - - private void OnBatteryClosed(EntityUid uid, ActivatableUIRequiresPowerCellComponent component, BoundUIClosedEvent args) - { - var activatable = Comp(uid); - - if (!args.UiKey.Equals(activatable.Key)) - return; - - // Stop drawing power if this was the last person with the UI open. - if (!_uiSystem.IsUiOpen(uid, activatable.Key)) - _cell.SetPowerCellDrawEnabled(uid, false); - } - - /// - /// Call if you want to check if the UI should close due to a recent battery usage. - /// - public void CheckUsage(EntityUid uid, ActivatableUIComponent? active = null, ActivatableUIRequiresPowerCellComponent? component = null, PowerCellDrawComponent? draw = null) - { - if (!Resolve(uid, ref component, ref draw, ref active, false) || active.Key == null) - return; - - if (_cell.HasCharge(uid, draw.UseRate)) - return; - - _uiSystem.TryCloseAll(uid, active.Key); - } - - private void OnBatteryOpenAttempt(EntityUid uid, ActivatableUIRequiresPowerCellComponent component, ActivatableUIOpenAttemptEvent args) - { - if (!TryComp(uid, out var draw)) - return; - - // Check if we have the appropriate drawrate / userate to even open it. - if (args.Cancelled || !_cell.HasCharge(uid, MathF.Max(draw.DrawRate, draw.UseRate), user: args.User)) - { - args.Cancel(); - return; - } - } -} diff --git a/Content.Server/UserInterface/ActivatableUISystem.cs b/Content.Server/UserInterface/ActivatableUISystem.cs deleted file mode 100644 index 5f2314df90b..00000000000 --- a/Content.Server/UserInterface/ActivatableUISystem.cs +++ /dev/null @@ -1,235 +0,0 @@ -using Content.Server.Administration.Managers; -using Content.Shared.ActionBlocker; -using Content.Shared.Ghost; -using Content.Shared.Hands; -using Content.Shared.Hands.Components; -using Content.Shared.Interaction; -using Content.Shared.Interaction.Events; -using Content.Shared.Popups; -using Content.Shared.UserInterface; -using Content.Shared.Verbs; -using Robust.Server.GameObjects; -using Robust.Shared.Player; - -namespace Content.Server.UserInterface; - -public sealed partial class ActivatableUISystem : EntitySystem -{ - [Dependency] private readonly IAdminManager _adminManager = default!; - [Dependency] private readonly ActionBlockerSystem _blockerSystem = default!; - [Dependency] private readonly UserInterfaceSystem _uiSystem = default!; - [Dependency] private readonly SharedPopupSystem _popupSystem = default!; - - public override void Initialize() - { - base.Initialize(); - - SubscribeLocalEvent(OnActivate); - SubscribeLocalEvent(OnUseInHand); - SubscribeLocalEvent(OnInteractUsing); - SubscribeLocalEvent(OnHandDeselected); - SubscribeLocalEvent((uid, aui, _) => CloseAll(uid, aui)); - // *THIS IS A BLATANT WORKAROUND!* RATIONALE: Microwaves need it - SubscribeLocalEvent(OnParentChanged); - SubscribeLocalEvent(OnUIClose); - SubscribeLocalEvent(OnBoundInterfaceInteractAttempt); - - SubscribeLocalEvent>(AddOpenUiVerb); - - SubscribeLocalEvent(OnActionPerform); - - InitializePower(); - } - - private void OnBoundInterfaceInteractAttempt(BoundUserInterfaceMessageAttempt ev) - { - if (!TryComp(ev.Target, out ActivatableUIComponent? comp)) - return; - - if (!comp.RequireHands) - return; - - if (!TryComp(ev.Sender.AttachedEntity, out HandsComponent? hands) || hands.Hands.Count == 0) - ev.Cancel(); - } - - private void OnActionPerform(EntityUid uid, UserInterfaceComponent component, OpenUiActionEvent args) - { - if (args.Handled || args.Key == null) - return; - - if (!TryComp(args.Performer, out ActorComponent? actor)) - return; - - args.Handled = _uiSystem.TryToggleUi(uid, args.Key, actor.PlayerSession); - } - - private void AddOpenUiVerb(EntityUid uid, ActivatableUIComponent component, GetVerbsEvent args) - { - if (!args.CanAccess) - return; - - if (component.RequireHands && args.Hands == null) - return; - - if (component.InHandsOnly && args.Using != uid) - return; - - if (!args.CanInteract && (!component.AllowSpectator || !HasComp(args.User))) - return; - - ActivationVerb verb = new(); - verb.Act = () => InteractUI(args.User, uid, component); - verb.Text = Loc.GetString(component.VerbText); - // TODO VERBS add "open UI" icon? - args.Verbs.Add(verb); - } - - private void OnActivate(EntityUid uid, ActivatableUIComponent component, ActivateInWorldEvent args) - { - if (args.Handled) - return; - - if (component.InHandsOnly) - return; - - if (component.AllowedItems != null) - return; - - args.Handled = InteractUI(args.User, uid, component); - } - - private void OnUseInHand(EntityUid uid, ActivatableUIComponent component, UseInHandEvent args) - { - if (args.Handled) - return; - - if (component.RightClickOnly) - return; - - if (component.AllowedItems != null) - return; - - args.Handled = InteractUI(args.User, uid, component); - } - - private void OnInteractUsing(EntityUid uid, ActivatableUIComponent component, InteractUsingEvent args) - { - if (args.Handled) return; - if (component.AllowedItems == null) return; - if (!component.AllowedItems.IsValid(args.Used, EntityManager)) return; - args.Handled = InteractUI(args.User, uid, component); - } - - private void OnParentChanged(EntityUid uid, ActivatableUIComponent aui, ref EntParentChangedMessage args) - { - CloseAll(uid, aui); - } - - private void OnUIClose(EntityUid uid, ActivatableUIComponent component, BoundUIClosedEvent args) - { - if (args.Session != component.CurrentSingleUser) - return; - - if (!Equals(args.UiKey, component.Key)) - return; - - SetCurrentSingleUser(uid, null, component); - } - - private bool InteractUI(EntityUid user, EntityUid uiEntity, ActivatableUIComponent aui) - { - if (!TryComp(user, out ActorComponent? actor)) - return false; - - if (aui.Key == null) - return false; - - if (!_uiSystem.TryGetUi(uiEntity, aui.Key, out var ui)) - return false; - - if (ui.SubscribedSessions.Contains(actor.PlayerSession)) - { - _uiSystem.CloseUi(ui, actor.PlayerSession); - return true; - } - - if (!_blockerSystem.CanInteract(user, uiEntity) && (!aui.AllowSpectator || !HasComp(user))) - return false; - - if (aui.RequireHands && !HasComp(user)) - return false; - - if (aui.AdminOnly && !_adminManager.IsAdmin(actor.PlayerSession)) - return false; - - if (aui.SingleUser && (aui.CurrentSingleUser != null) && (actor.PlayerSession != aui.CurrentSingleUser)) - { - string message = Loc.GetString("machine-already-in-use", ("machine", uiEntity)); - _popupSystem.PopupEntity(message, uiEntity, user); - - // If we get here, supposedly, the object is in use. - // Check with BUI that it's ACTUALLY in use just in case. - // Since this could brick the object if it goes wrong. - if (ui.SubscribedSessions.Count != 0) - return false; - } - - // If we've gotten this far, fire a cancellable event that indicates someone is about to activate this. - // This is so that stuff can require further conditions (like power). - var oae = new ActivatableUIOpenAttemptEvent(user); - var uae = new UserOpenActivatableUIAttemptEvent(user, uiEntity); - RaiseLocalEvent(user, uae); - RaiseLocalEvent(uiEntity, oae); - if (oae.Cancelled || uae.Cancelled) - return false; - - // Give the UI an opportunity to prepare itself if it needs to do anything - // before opening - var bae = new BeforeActivatableUIOpenEvent(user); - RaiseLocalEvent(uiEntity, bae); - - SetCurrentSingleUser(uiEntity, actor.PlayerSession, aui); - _uiSystem.OpenUi(ui, actor.PlayerSession); - - //Let the component know a user opened it so it can do whatever it needs to do - var aae = new AfterActivatableUIOpenEvent(user, actor.PlayerSession); - RaiseLocalEvent(uiEntity, aae); - - return true; - } - - public void SetCurrentSingleUser(EntityUid uid, ICommonSession? v, ActivatableUIComponent? aui = null) - { - if (!Resolve(uid, ref aui)) - return; - if (!aui.SingleUser) - return; - - aui.CurrentSingleUser = v; - - RaiseLocalEvent(uid, new ActivatableUIPlayerChangedEvent()); - } - - public void CloseAll(EntityUid uid, ActivatableUIComponent? aui = null) - { - if (!Resolve(uid, ref aui, false)) - return; - - if (aui.Key == null || !_uiSystem.TryGetUi(uid, aui.Key, out var ui)) - return; - - _uiSystem.CloseAll(ui); - } - - private void OnHandDeselected(EntityUid uid, ActivatableUIComponent? aui, HandDeselectedEvent args) - { - if (!Resolve(uid, ref aui, false)) - return; - - if (!aui.CloseOnHandDeselect) - return; - - CloseAll(uid, aui); - } -} diff --git a/Content.Server/UserInterface/IntrinsicUIComponent.cs b/Content.Server/UserInterface/IntrinsicUIComponent.cs index 4d3c7ffba97..83936edc8c4 100644 --- a/Content.Server/UserInterface/IntrinsicUIComponent.cs +++ b/Content.Server/UserInterface/IntrinsicUIComponent.cs @@ -9,18 +9,12 @@ public sealed partial class IntrinsicUIComponent : Component /// /// List of UIs and their actions that this entity has. /// - [DataField("uis", required: true)] public List UIs = new(); + [DataField("uis", required: true)] public Dictionary UIs = new(); } [DataDefinition] -public partial class IntrinsicUIEntry +public sealed partial class IntrinsicUIEntry { - /// - /// The BUI key that this intrinsic UI should open. - /// - [DataField("key", required: true)] - public Enum? Key { get; private set; } - [DataField("toggleAction", customTypeSerializer: typeof(PrototypeIdSerializer), required: true)] public string? ToggleAction; diff --git a/Content.Server/UserInterface/IntrinsicUISystem.cs b/Content.Server/UserInterface/IntrinsicUISystem.cs index fa725e524a0..0f7261865dc 100644 --- a/Content.Server/UserInterface/IntrinsicUISystem.cs +++ b/Content.Server/UserInterface/IntrinsicUISystem.cs @@ -18,50 +18,31 @@ public override void Initialize() private void OnActionToggle(EntityUid uid, IntrinsicUIComponent component, ToggleIntrinsicUIEvent args) { + if (args.Key == null) + return; + args.Handled = InteractUI(uid, args.Key, component); } private void InitActions(EntityUid uid, IntrinsicUIComponent component, MapInitEvent args) { - foreach (var entry in component.UIs) + foreach (var entry in component.UIs.Values) { _actionsSystem.AddAction(uid, ref entry.ToggleActionEntity, entry.ToggleAction); } } - public bool InteractUI(EntityUid uid, Enum? key, IntrinsicUIComponent? iui = null, ActorComponent? actor = null) + public bool InteractUI(EntityUid uid, Enum key, IntrinsicUIComponent? iui = null, ActorComponent? actor = null) { if (!Resolve(uid, ref iui, ref actor)) return false; - if (key is null) - { - Log.Error($"Entity {ToPrettyString(uid)} has an invalid intrinsic UI."); - } - - var ui = GetUIOrNull(uid, key, iui); - - if (ui is null) - { - Log.Error($"Couldn't get UI {key} on {ToPrettyString(uid)}"); - return false; - } - var attempt = new IntrinsicUIOpenAttemptEvent(uid, key); RaiseLocalEvent(uid, attempt); if (attempt.Cancelled) return false; - _uiSystem.ToggleUi(ui, actor.PlayerSession); - return true; - } - - private PlayerBoundUserInterface? GetUIOrNull(EntityUid uid, Enum? key, IntrinsicUIComponent? component = null) - { - if (!Resolve(uid, ref component)) - return null; - - return key is null ? null : _uiSystem.GetUiOrNull(uid, key); + return _uiSystem.TryToggleUi(uid, key, actor.PlayerSession); } } diff --git a/Content.Server/Vampire/BloodSuckerSystem.cs b/Content.Server/Vampire/BloodSuckerSystem.cs index a63334a8943..41afe0d666b 100644 --- a/Content.Server/Vampire/BloodSuckerSystem.cs +++ b/Content.Server/Vampire/BloodSuckerSystem.cs @@ -6,14 +6,15 @@ using Content.Shared.Inventory; using Content.Shared.Administration.Logs; using Content.Shared.Vampiric; +using Content.Shared.Cocoon; using Content.Server.Atmos.Components; using Content.Server.Body.Components; using Content.Server.Body.Systems; using Content.Shared.Chemistry.EntitySystems; using Content.Server.Popups; -using Content.Server.HealthExaminable; using Content.Server.DoAfter; using Content.Server.Nutrition.Components; +using Content.Shared.HealthExaminable; using Robust.Shared.Prototypes; using Robust.Shared.Audio.Systems; using Robust.Shared.Utility; @@ -45,23 +46,28 @@ public override void Initialize() private void AddSuccVerb(EntityUid uid, BloodSuckerComponent component, GetVerbsEvent args) { - if (args.User == args.Target) - return; - if (component.WebRequired) - return; // handled elsewhere - if (!TryComp(args.Target, out var bloodstream)) + + var victim = args.Target; + var ignoreClothes = false; + + if (TryComp(args.Target, out var cocoon)) + { + victim = cocoon.Victim ?? args.Target; + ignoreClothes = cocoon.Victim != null; + } else if (component.WebRequired) return; - if (!args.CanAccess) + + if (!TryComp(victim, out var bloodstream) || args.User == victim || !args.CanAccess) return; InnateVerb verb = new() { Act = () => { - StartSuccDoAfter(uid, args.Target, component, bloodstream); // start doafter + StartSuccDoAfter(uid, victim, component, bloodstream, !ignoreClothes); // start doafter }, Text = Loc.GetString("action-name-suck-blood"), - Icon = new SpriteSpecifier.Texture(new ("/Textures/Nyanotrasen/Icons/verbiconfangs.png")), + Icon = new SpriteSpecifier.Texture(new("/Textures/Nyanotrasen/Icons/verbiconfangs.png")), Priority = 2 }; args.Verbs.Add(verb); @@ -80,10 +86,8 @@ private void OnDamageChanged(EntityUid uid, BloodSuckedComponent component, Dama if (_prototypeManager.TryIndex("Brute", out var brute) && args.Damageable.Damage.TryGetDamageInGroup(brute, out var bruteTotal) && _prototypeManager.TryIndex("Airloss", out var airloss) && args.Damageable.Damage.TryGetDamageInGroup(airloss, out var airlossTotal)) - { if (bruteTotal == 0 && airlossTotal == 0) RemComp(uid); - } } private void OnDoAfter(EntityUid uid, BloodSuckerComponent component, BloodSuckDoAfterEvent args) @@ -96,18 +100,13 @@ private void OnDoAfter(EntityUid uid, BloodSuckerComponent component, BloodSuckD public void StartSuccDoAfter(EntityUid bloodsucker, EntityUid victim, BloodSuckerComponent? bloodSuckerComponent = null, BloodstreamComponent? stream = null, bool doChecks = true) { - if (!Resolve(bloodsucker, ref bloodSuckerComponent)) - return; - - if (!Resolve(victim, ref stream)) + if (!Resolve(bloodsucker, ref bloodSuckerComponent) || !Resolve(victim, ref stream)) return; if (doChecks) { if (!_interactionSystem.InRangeUnobstructed(bloodsucker, victim)) - { return; - } if (_inventorySystem.TryGetSlotEntity(victim, "head", out var headUid) && HasComp(headUid)) { @@ -125,19 +124,15 @@ public void StartSuccDoAfter(EntityUid bloodsucker, EntityUid victim, BloodSucke } if (stream.BloodReagent != "Blood") - { - _popups.PopupEntity(Loc.GetString("bloodsucker-fail-not-blood", ("target", victim)), victim, bloodsucker, Shared.Popups.PopupType.Medium); - return; - } - - if (_solutionSystem.PercentFull(stream.Owner) != 0) + _popups.PopupEntity(Loc.GetString("bloodsucker-not-blood", ("target", victim)), victim, bloodsucker, Shared.Popups.PopupType.Medium); + else if (_solutionSystem.PercentFull(victim) != 0) _popups.PopupEntity(Loc.GetString("bloodsucker-fail-no-blood", ("target", victim)), victim, bloodsucker, Shared.Popups.PopupType.Medium); + else + _popups.PopupEntity(Loc.GetString("bloodsucker-doafter-start", ("target", victim)), victim, bloodsucker, Shared.Popups.PopupType.Medium); _popups.PopupEntity(Loc.GetString("bloodsucker-doafter-start-victim", ("sucker", bloodsucker)), victim, victim, Shared.Popups.PopupType.LargeCaution); - _popups.PopupEntity(Loc.GetString("bloodsucker-doafter-start", ("target", victim)), victim, bloodsucker, Shared.Popups.PopupType.Medium); - var ev = new BloodSuckDoAfterEvent(); - var args = new DoAfterArgs(EntityManager, bloodsucker, bloodSuckerComponent.Delay, ev, bloodsucker, target: victim) + var args = new DoAfterArgs(EntityManager, bloodsucker, bloodSuckerComponent.Delay, new BloodSuckDoAfterEvent(), bloodsucker, target: victim) { BreakOnTargetMove = true, BreakOnUserMove = false, @@ -206,8 +201,5 @@ public bool TrySucc(EntityUid bloodsucker, EntityUid victim, BloodSuckerComponen //} return true; } - - private record struct BloodSuckData() - {} } } diff --git a/Content.Server/VendingMachines/VendingMachineSystem.cs b/Content.Server/VendingMachines/VendingMachineSystem.cs index 36fa69313e3..60be1ad6f1b 100644 --- a/Content.Server/VendingMachines/VendingMachineSystem.cs +++ b/Content.Server/VendingMachines/VendingMachineSystem.cs @@ -114,7 +114,7 @@ private void UpdateVendingMachineInterfaceState(EntityUid uid, VendingMachineCom { var state = new VendingMachineInterfaceState(GetAllInventory(uid, component)); - _userInterfaceSystem.TrySetUiState(uid, VendingMachineUiKey.Key, state); + _userInterfaceSystem.SetUiState(uid, VendingMachineUiKey.Key, state); } private void OnInventoryEjectMessage(EntityUid uid, VendingMachineComponent component, VendingMachineEjectMessage args) @@ -122,7 +122,7 @@ private void OnInventoryEjectMessage(EntityUid uid, VendingMachineComponent comp if (!this.IsPowered(uid, EntityManager)) return; - if (args.Session.AttachedEntity is not { Valid: true } entity || Deleted(entity)) + if (args.Actor is not { Valid: true } entity || Deleted(entity)) return; AuthorizedVend(uid, entity, args.Type, args.ID, component); diff --git a/Content.Server/VoiceMask/VoiceMaskComponent.cs b/Content.Server/VoiceMask/VoiceMaskComponent.cs index d0c92003006..d3116f94db1 100644 --- a/Content.Server/VoiceMask/VoiceMaskComponent.cs +++ b/Content.Server/VoiceMask/VoiceMaskComponent.cs @@ -3,21 +3,38 @@ namespace Content.Server.VoiceMask; +/// +/// This component is for voice mask items! Adding this component to clothing will give the the voice mask UI +/// and allow the wearer to change their voice and verb at will. +/// +/// +/// DO NOT use this if you do not want the interface. +/// The VoiceOverrideSystem is probably what your looking for (Or you might have to make something similar)! +/// [RegisterComponent] public sealed partial class VoiceMaskComponent : Component { + /// + /// The name that will override an entities default name. If null, it will use the default override. + /// + [DataField] + public string? VoiceMaskName = null; + + /// + /// The speech verb that will override an entities default one. If null, it will use the entities default verb. + /// [DataField] - [ViewVariables(VVAccess.ReadWrite)] - public bool Enabled = true; + public ProtoId? VoiceMaskSpeechVerb; + /// + /// The action that gets displayed when the voice mask is equipped. + /// [DataField] - [ViewVariables(VVAccess.ReadWrite)] - public string VoiceName = "Unknown"; + public EntProtoId Action = "ActionChangeVoiceMask"; /// - /// If EnableSpeechVerbModification is true, overrides the speech verb used when this entity speaks. + /// Reference to the action. /// [DataField] - [ViewVariables(VVAccess.ReadWrite)] - public ProtoId? SpeechVerb; + public EntityUid? ActionEntity; } diff --git a/Content.Server/VoiceMask/VoiceMaskSystem.Equip.cs b/Content.Server/VoiceMask/VoiceMaskSystem.Equip.cs deleted file mode 100644 index bd0c40f26a1..00000000000 --- a/Content.Server/VoiceMask/VoiceMaskSystem.Equip.cs +++ /dev/null @@ -1,53 +0,0 @@ -using Content.Server.Actions; -using Content.Shared.Inventory; -using Content.Shared.Inventory.Events; - -namespace Content.Server.VoiceMask; - -// This partial deals with equipment, i.e., the syndicate voice mask. -public sealed partial class VoiceMaskSystem -{ - [Dependency] private readonly InventorySystem _inventory = default!; - [Dependency] private readonly ActionsSystem _actions = default!; - - private const string MaskSlot = "mask"; - - private void OnEquip(EntityUid uid, VoiceMaskerComponent component, GotEquippedEvent args) - { - var user = args.Equipee; - // have to be wearing the mask to use it, duh. - if (!_inventory.TryGetSlotEntity(user, MaskSlot, out var maskEntity) || maskEntity != uid) - return; - - var comp = EnsureComp(user); - comp.VoiceName = component.LastSetName; - comp.SpeechVerb = component.LastSpeechVerb; - - _actions.AddAction(user, ref component.ActionEntity, component.Action, uid); - } - - private void OnUnequip(EntityUid uid, VoiceMaskerComponent compnent, GotUnequippedEvent args) - { - RemComp(args.Equipee); - } - - private VoiceMaskerComponent? TryGetMask(EntityUid user) - { - if (!HasComp(user) || !_inventory.TryGetSlotEntity(user, MaskSlot, out var maskEntity)) - return null; - - return CompOrNull(maskEntity); - } - - private void TrySetLastKnownName(EntityUid user, string name) - { - if (TryGetMask(user) is {} comp) - comp.LastSetName = name; - } - - private void TrySetLastSpeechVerb(EntityUid user, string? verb) - { - if (TryGetMask(user) is {} comp) - comp.LastSpeechVerb = verb; - } -} diff --git a/Content.Server/VoiceMask/VoiceMaskSystem.cs b/Content.Server/VoiceMask/VoiceMaskSystem.cs index 19ed156a0b4..98f6b18f537 100644 --- a/Content.Server/VoiceMask/VoiceMaskSystem.cs +++ b/Content.Server/VoiceMask/VoiceMaskSystem.cs @@ -1,121 +1,115 @@ -using Content.Server.Administration.Logs; -using Content.Server.Chat.Systems; -using Content.Server.Popups; +using Content.Shared.Actions; +using Content.Shared.Administration.Logs; +using Content.Shared.Chat; using Content.Shared.Clothing; using Content.Shared.Database; -using Content.Shared.Inventory.Events; +using Content.Shared.Implants; +using Content.Shared.Inventory; using Content.Shared.Popups; using Content.Shared.Preferences; using Content.Shared.Speech; using Content.Shared.VoiceMask; -using Robust.Server.GameObjects; -using Robust.Shared.Player; using Robust.Shared.Prototypes; namespace Content.Server.VoiceMask; public sealed partial class VoiceMaskSystem : EntitySystem { - [Dependency] private readonly UserInterfaceSystem _uiSystem = default!; - [Dependency] private readonly PopupSystem _popupSystem = default!; - [Dependency] private readonly IAdminLogManager _adminLogger = default!; + [Dependency] private readonly SharedUserInterfaceSystem _uiSystem = default!; + [Dependency] private readonly SharedPopupSystem _popupSystem = default!; + [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!; [Dependency] private readonly IPrototypeManager _proto = default!; + [Dependency] private readonly SharedActionsSystem _actions = default!; public override void Initialize() { - SubscribeLocalEvent(OnSpeakerNameTransform); + base.Initialize(); + SubscribeLocalEvent>(OnTransformSpeakerName); + SubscribeLocalEvent>(OnTransformSpeakerNameImplant); SubscribeLocalEvent(OnChangeName); SubscribeLocalEvent(OnChangeVerb); - SubscribeLocalEvent(OnMaskToggled); - SubscribeLocalEvent(OnEquip); - SubscribeLocalEvent(OnUnequip); - SubscribeLocalEvent(OnSetName); - // SubscribeLocalEvent>(GetVerbs); + SubscribeLocalEvent(OnEquip); + SubscribeLocalEvent(OpenUI); } - private void OnSetName(VoiceMaskSetNameEvent ev) + private void OnTransformSpeakerName(Entity entity, ref InventoryRelayedEvent args) { - OpenUI(ev.Performer); + args.Args.VoiceName = GetCurrentVoiceName(entity); + args.Args.SpeechVerb = entity.Comp.VoiceMaskSpeechVerb ?? args.Args.SpeechVerb; } - private void OnChangeName(EntityUid uid, VoiceMaskComponent component, VoiceMaskChangeNameMessage message) + private void OnTransformSpeakerNameImplant(Entity entity, ref ImplantRelayEvent args) { - if (message.Name.Length > HumanoidCharacterProfile.MaxNameLength || message.Name.Length <= 0) - { - _popupSystem.PopupEntity(Loc.GetString("voice-mask-popup-failure"), uid, message.Session, PopupType.SmallCaution); - return; - } - - component.VoiceName = message.Name; - if (message.Session.AttachedEntity != null) - _adminLogger.Add(LogType.Action, LogImpact.Medium, $"{ToPrettyString(message.Session.AttachedEntity.Value):player} set voice of {ToPrettyString(uid):mask}: {component.VoiceName}"); - else - _adminLogger.Add(LogType.Action, LogImpact.Medium, $"Voice of {ToPrettyString(uid):mask} set: {component.VoiceName}"); - - _popupSystem.PopupEntity(Loc.GetString("voice-mask-popup-success"), uid, message.Session); - - TrySetLastKnownName(uid, message.Name); - - UpdateUI(uid, component); + args.Event.VoiceName = GetCurrentVoiceName(entity); + args.Event.SpeechVerb = entity.Comp.VoiceMaskSpeechVerb ?? args.Event.SpeechVerb; } - private void OnChangeVerb(Entity ent, ref VoiceMaskChangeVerbMessage msg) + #region User inputs from UI + private void OnChangeVerb(Entity entity, ref VoiceMaskChangeVerbMessage msg) { - if (msg.Verb is {} id && !_proto.HasIndex(id)) + if (msg.Verb is { } id && !_proto.HasIndex(id)) return; - ent.Comp.SpeechVerb = msg.Verb; + entity.Comp.VoiceMaskSpeechVerb = msg.Verb; // verb is only important to metagamers so no need to log as opposed to name - _popupSystem.PopupEntity(Loc.GetString("voice-mask-popup-success"), ent, msg.Session); - - TrySetLastSpeechVerb(ent, msg.Verb); + _popupSystem.PopupEntity(Loc.GetString("voice-mask-popup-success"), entity, msg.Actor); - UpdateUI(ent, ent.Comp); + UpdateUI(entity); } - private void OnSpeakerNameTransform(EntityUid uid, VoiceMaskComponent component, TransformSpeakerNameEvent args) + private void OnChangeName(Entity entity, ref VoiceMaskChangeNameMessage message) { - if (component.Enabled) + if (message.Name.Length > HumanoidCharacterProfile.MaxNameLength || message.Name.Length <= 0) { - /* - args.Name = _idCard.TryGetIdCard(uid, out var card) && !string.IsNullOrEmpty(card.FullName) - ? card.FullName - : Loc.GetString("voice-mask-unknown"); - */ - - args.Name = component.VoiceName; - if (component.SpeechVerb != null) - args.SpeechVerb = component.SpeechVerb; + _popupSystem.PopupEntity(Loc.GetString("voice-mask-popup-failure"), entity, message.Actor, PopupType.SmallCaution); + return; } + + entity.Comp.VoiceMaskName = message.Name; + _adminLogger.Add(LogType.Action, LogImpact.Medium, $"{ToPrettyString(message.Actor):player} set voice of {ToPrettyString(entity):mask}: {entity.Comp.VoiceMaskName}"); + + _popupSystem.PopupEntity(Loc.GetString("voice-mask-popup-success"), entity, message.Actor); + + UpdateUI(entity); } + #endregion - private void OnMaskToggled(Entity ent, ref WearerMaskToggledEvent args) + #region UI + private void OnEquip(EntityUid uid, VoiceMaskComponent component, ClothingGotEquippedEvent args) { - ent.Comp.Enabled = !args.IsToggled; + _actions.AddAction(args.Wearer, ref component.ActionEntity, component.Action, uid); } - private void OpenUI(EntityUid player, ActorComponent? actor = null) + private void OpenUI(VoiceMaskSetNameEvent ev) { - // Delta-V: `logMissing: false` because of syrinx. - if (!Resolve(player, ref actor, logMissing: false)) + // If this ever becomes an entity remove this! + if (!TryComp(ev.Action, out var actionComp)) + return; + + var maskEntity = actionComp.Container; + + if (!TryComp(maskEntity, out var voiceMaskComp)) return; - if (!_uiSystem.TryGetUi(player, VoiceMaskUIKey.Key, out var bui)) + + if (!_uiSystem.HasUi(maskEntity.Value, VoiceMaskUIKey.Key)) return; - _uiSystem.OpenUi(bui, actor.PlayerSession); - UpdateUI(player); + _uiSystem.OpenUi(maskEntity.Value, VoiceMaskUIKey.Key, ev.Performer); + UpdateUI((maskEntity.Value, voiceMaskComp)); } - private void UpdateUI(EntityUid owner, VoiceMaskComponent? component = null) + private void UpdateUI(Entity entity) { - // Delta-V: `logMissing: false` because of syrinx - if (!Resolve(owner, ref component, logMissing: false)) - { - return; - } + if (_uiSystem.HasUi(entity, VoiceMaskUIKey.Key)) + _uiSystem.SetUiState(entity.Owner, VoiceMaskUIKey.Key, new VoiceMaskBuiState(GetCurrentVoiceName(entity), entity.Comp.VoiceMaskSpeechVerb)); + } + #endregion - if (_uiSystem.TryGetUi(owner, VoiceMaskUIKey.Key, out var bui)) - _uiSystem.SetUiState(bui, new VoiceMaskBuiState(component.VoiceName, component.SpeechVerb)); + #region Helper functions + private string GetCurrentVoiceName(Entity entity) + { + return entity.Comp.VoiceMaskName ?? Loc.GetString("voice-mask-default-name-override"); } + #endregion } diff --git a/Content.Server/VoiceMask/VoiceMaskerComponent.cs b/Content.Server/VoiceMask/VoiceMaskerComponent.cs deleted file mode 100644 index afea5877df2..00000000000 --- a/Content.Server/VoiceMask/VoiceMaskerComponent.cs +++ /dev/null @@ -1,20 +0,0 @@ -using Content.Shared.Speech; -using Robust.Shared.Prototypes; - -namespace Content.Server.VoiceMask; - -[RegisterComponent] -public sealed partial class VoiceMaskerComponent : Component -{ - [DataField] - public string LastSetName = "Unknown"; - - [DataField] - public ProtoId? LastSpeechVerb; - - [DataField] - public EntProtoId Action = "ActionChangeVoiceMask"; - - [DataField] - public EntityUid? ActionEntity; -} diff --git a/Content.Server/Weapons/Melee/MeleeWeaponSystem.cs b/Content.Server/Weapons/Melee/MeleeWeaponSystem.cs index 7e611d1dede..74e76f0dd50 100644 --- a/Content.Server/Weapons/Melee/MeleeWeaponSystem.cs +++ b/Content.Server/Weapons/Melee/MeleeWeaponSystem.cs @@ -185,15 +185,10 @@ protected override bool InRange(EntityUid user, EntityUid target, float range, I if (session is { } pSession) { (targetCoordinates, targetLocalAngle) = _lag.GetCoordinatesAngle(target, pSession); - } - else - { - var xform = Transform(target); - targetCoordinates = xform.Coordinates; - targetLocalAngle = xform.LocalRotation; + return Interaction.InRangeUnobstructed(user, target, targetCoordinates, targetLocalAngle, range); } - return Interaction.InRangeUnobstructed(user, target, targetCoordinates, targetLocalAngle, range); + return Interaction.InRangeUnobstructed(user, target, range); } protected override void DoDamageEffect(List targets, EntityUid? user, TransformComponent targetXform) diff --git a/Content.Server/Weapons/Ranged/Systems/GunSystem.cs b/Content.Server/Weapons/Ranged/Systems/GunSystem.cs index 6f2b0c1a9c1..fc9110a8367 100644 --- a/Content.Server/Weapons/Ranged/Systems/GunSystem.cs +++ b/Content.Server/Weapons/Ranged/Systems/GunSystem.cs @@ -158,7 +158,7 @@ public override void Shoot(EntityUid gunUid, GunComponent gun, List<(EntityUid? }); SetCartridgeSpent(ent.Value, cartridge, true); - MuzzleFlash(gunUid, cartridge, user); + MuzzleFlash(gunUid, cartridge, mapDirection.ToAngle(), user); Audio.PlayPredicted(gun.SoundGunshotModified, gunUid, user); if (cartridge.DeleteOnSpawn) @@ -179,7 +179,7 @@ public override void Shoot(EntityUid gunUid, GunComponent gun, List<(EntityUid? // Ammo shoots itself case AmmoComponent newAmmo: shotProjectiles.Add(ent!.Value); - MuzzleFlash(gunUid, newAmmo, user); + MuzzleFlash(gunUid, newAmmo, mapDirection.ToAngle(), user); Audio.PlayPredicted(gun.SoundGunshotModified, gunUid, user); ShootOrThrow(ent.Value, mapDirection, gunVelocity, gun, gunUid, user); break; @@ -354,9 +354,9 @@ private Angle GetRecoilAngle(TimeSpan curTime, GunComponent component, Angle dir protected override void Popup(string message, EntityUid? uid, EntityUid? user) { } - protected override void CreateEffect(EntityUid uid, MuzzleFlashEvent message, EntityUid? user = null) + protected override void CreateEffect(EntityUid gunUid, MuzzleFlashEvent message, EntityUid? user = null) { - var filter = Filter.Pvs(uid, entityManager: EntityManager); + var filter = Filter.Pvs(gunUid, entityManager: EntityManager); if (TryComp(user, out var actor)) filter.RemovePlayer(actor.PlayerSession); @@ -417,7 +417,7 @@ private void FireEffects(EntityCoordinates fromCoordinates, float distance, Angl var (_, gridRot, gridInvMatrix) = TransformSystem.GetWorldPositionRotationInvMatrix(gridXform, xformQuery); fromCoordinates = new EntityCoordinates(gridUid.Value, - gridInvMatrix.Transform(fromCoordinates.ToMapPos(EntityManager, TransformSystem))); + Vector2.Transform(fromCoordinates.ToMapPos(EntityManager, TransformSystem), gridInvMatrix)); // Use the fallback angle I guess? angle -= gridRot; diff --git a/Content.Server/Wires/WiresSystem.cs b/Content.Server/Wires/WiresSystem.cs index 0f9ee8b0f75..fce81db3277 100644 --- a/Content.Server/Wires/WiresSystem.cs +++ b/Content.Server/Wires/WiresSystem.cs @@ -17,6 +17,7 @@ using Robust.Shared.Player; using Robust.Shared.Prototypes; using Robust.Shared.Random; +using ActivatableUISystem = Content.Shared.UserInterface.ActivatableUISystem; namespace Content.Server.Wires; @@ -347,7 +348,7 @@ public override void Update(float frameTime) } } - private class ActiveWireAction + private sealed class ActiveWireAction { /// /// The wire action's ID. This is so that once the action is finished, @@ -393,11 +394,11 @@ private void OnWiresPowered(EntityUid uid, WiresComponent component, ref PowerCh private void OnWiresActionMessage(EntityUid uid, WiresComponent component, WiresActionMessage args) { - if (args.Session.AttachedEntity == null) + if (args.Actor == null) { return; } - var player = (EntityUid) args.Session.AttachedEntity; + var player = (EntityUid) args.Actor; if (!EntityManager.TryGetComponent(player, out HandsComponent? handsComponent)) { @@ -458,7 +459,7 @@ private void OnInteractUsing(EntityUid uid, WiresComponent component, InteractUs { if (TryComp(args.User, out ActorComponent? actor)) { - _uiSystem.TryOpen(uid, WiresUiKey.Key, actor.PlayerSession); + _uiSystem.OpenUi(uid, WiresUiKey.Key, actor.PlayerSession); args.Handled = true; } } @@ -468,7 +469,8 @@ private void OnPanelChanged(Entity ent, ref PanelChangedEvent ar { if (args.Open) return; - _uiSystem.TryCloseAll(ent, WiresUiKey.Key); + + _uiSystem.CloseUi(ent.Owner, WiresUiKey.Key); } private void OnAttemptOpenActivatableUI(EntityUid uid, ActivatableUIRequiresPanelComponent component, ActivatableUIOpenAttemptEvent args) @@ -574,18 +576,17 @@ private void UpdateUserInterface(EntityUid uid, WiresComponent? wires = null, Us statuses.Sort((a, b) => a.position.CompareTo(b.position)); - _uiSystem.TrySetUiState(uid, WiresUiKey.Key, new WiresBoundUserInterfaceState( + _uiSystem.SetUiState((uid, ui), WiresUiKey.Key, new WiresBoundUserInterfaceState( clientList.ToArray(), statuses.Select(p => new StatusEntry(p.key, p.value)).ToArray(), Loc.GetString(wires.BoardName), wires.SerialNumber, - wires.WireSeed), ui: ui); + wires.WireSeed)); } public void OpenUserInterface(EntityUid uid, ICommonSession player) { - if (_uiSystem.TryGetUi(uid, WiresUiKey.Key, out var ui)) - _uiSystem.OpenUi(ui, player); + _uiSystem.OpenUi(uid, WiresUiKey.Key, player); } /// @@ -629,7 +630,7 @@ public void SetWiresPanelSecurity(EntityUid uid, WiresPanelSecurityComponent com if (!args.WiresAccessible) { - _uiSystem.TryCloseAll(uid, WiresUiKey.Key); + _uiSystem.CloseUi(uid, WiresUiKey.Key); } } diff --git a/Content.Server/Worldgen/Prototypes/NoiseChannelPrototype.cs b/Content.Server/Worldgen/Prototypes/NoiseChannelPrototype.cs index 67da4c4df18..02ca383d300 100644 --- a/Content.Server/Worldgen/Prototypes/NoiseChannelPrototype.cs +++ b/Content.Server/Worldgen/Prototypes/NoiseChannelPrototype.cs @@ -80,7 +80,7 @@ public class NoiseChannelConfig } [Prototype("noiseChannel")] -public sealed class NoiseChannelPrototype : NoiseChannelConfig, IPrototype, IInheritingPrototype +public sealed partial class NoiseChannelPrototype : NoiseChannelConfig, IPrototype, IInheritingPrototype { /// [ParentDataField(typeof(AbstractPrototypeIdArraySerializer))] diff --git a/Content.Server/Xenoarchaeology/Equipment/Components/TraversalDistorterComponent.cs b/Content.Server/Xenoarchaeology/Equipment/Components/TraversalDistorterComponent.cs index ec16083c538..1461021e3d3 100644 --- a/Content.Server/Xenoarchaeology/Equipment/Components/TraversalDistorterComponent.cs +++ b/Content.Server/Xenoarchaeology/Equipment/Components/TraversalDistorterComponent.cs @@ -1,4 +1,7 @@ -namespace Content.Server.Xenoarchaeology.Equipment.Components; +using Content.Shared.Construction.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; + +namespace Content.Server.Xenoarchaeology.Equipment.Components; /// /// This is used for a machine that biases @@ -8,7 +11,19 @@ public sealed partial class TraversalDistorterComponent : Component { [ViewVariables(VVAccess.ReadWrite)] - public BiasDirection BiasDirection = BiasDirection.In; + public float BiasChance; + + [DataField] + public float BaseBiasChance = 0.7f; + + [DataField(customTypeSerializer: typeof(PrototypeIdSerializer))] + public string MachinePartBiasChance = "Manipulator"; + + [DataField] + public float PartRatingBiasChance = 1.1f; + + [ViewVariables(VVAccess.ReadWrite)] + public BiasDirection BiasDirection = BiasDirection.Up; public TimeSpan NextActivation = default!; public TimeSpan ActivationDelay = TimeSpan.FromSeconds(1); @@ -16,6 +31,6 @@ public sealed partial class TraversalDistorterComponent : Component public enum BiasDirection : byte { - In, //down the tree, towards depth 0 - Out //up the tree, away from depth 0 + Up, //Towards depth 0 + Down, //Away from depth 0 } diff --git a/Content.Server/Xenoarchaeology/Equipment/Systems/ArtifactAnalyzerSystem.cs b/Content.Server/Xenoarchaeology/Equipment/Systems/ArtifactAnalyzerSystem.cs index 27caebef808..72d99460fe2 100644 --- a/Content.Server/Xenoarchaeology/Equipment/Systems/ArtifactAnalyzerSystem.cs +++ b/Content.Server/Xenoarchaeology/Equipment/Systems/ArtifactAnalyzerSystem.cs @@ -41,7 +41,8 @@ public sealed class ArtifactAnalyzerSystem : EntitySystem [Dependency] private readonly PaperSystem _paper = default!; [Dependency] private readonly ResearchSystem _research = default!; [Dependency] private readonly MetaDataSystem _metaSystem = default!; - [Dependency] private readonly GlimmerSystem _glimmerSystem = default!; //Nyano - Summary: pulls in the glimmer system. + [Dependency] private readonly TraversalDistorterSystem _traversalDistorter = default!; + [Dependency] private readonly GlimmerSystem _glimmerSystem = default!; /// public override void Initialize() @@ -63,6 +64,7 @@ public override void Initialize() SubscribeLocalEvent(OnScanButton); SubscribeLocalEvent(OnPrintButton); SubscribeLocalEvent(OnExtractButton); + SubscribeLocalEvent(OnBiasButton); SubscribeLocalEvent((e, c, _) => UpdateUserInterface(e, c), after: new[] { typeof(ResearchSystem) }); @@ -194,6 +196,7 @@ private void UpdateUserInterface(EntityUid uid, AnalysisConsoleComponent? compon var canScan = false; var canPrint = false; var points = 0; + if (TryComp(component.AnalyzerEntity, out var analyzer)) { artifact = analyzer.LastAnalyzedArtifact; @@ -207,18 +210,22 @@ private void UpdateUserInterface(EntityUid uid, AnalysisConsoleComponent? compon if (GetArtifactForAnalysis(component.AnalyzerEntity, placer) is { } current) points = _artifact.GetResearchPointValue(current); } + var analyzerConnected = component.AnalyzerEntity != null; var serverConnected = TryComp(uid, out var client) && client.ConnectedToServer; var scanning = TryComp(component.AnalyzerEntity, out var active); var paused = active != null ? active.AnalysisPaused : false; + var biasDirection = BiasDirection.Up; - var state = new AnalysisConsoleScanUpdateState(GetNetEntity(artifact), analyzerConnected, serverConnected, - canScan, canPrint, msg, scanning, paused, active?.StartTime, active?.AccumulatedRunTime, totalTime, points); + if (TryComp(component.AnalyzerEntity, out var trav)) + biasDirection = trav.BiasDirection; - var bui = _ui.GetUi(uid, ArtifactAnalzyerUiKey.Key); - _ui.SetUiState(bui, state); + var state = new AnalysisConsoleUpdateState(GetNetEntity(artifact), analyzerConnected, serverConnected, + canScan, canPrint, msg, scanning, paused, active?.StartTime, active?.AccumulatedRunTime, totalTime, points, biasDirection == BiasDirection.Down); + + _ui.SetUiState(uid, ArtifactAnalzyerUiKey.Key, state); } /// @@ -229,7 +236,7 @@ private void UpdateUserInterface(EntityUid uid, AnalysisConsoleComponent? compon /// private void OnServerSelectionMessage(EntityUid uid, AnalysisConsoleComponent component, AnalysisConsoleServerSelectionMessage args) { - _ui.TryOpen(uid, ResearchClientUiKey.Key, args.Session); + _ui.OpenUi(uid, ResearchClientUiKey.Key, args.Actor); } /// @@ -382,6 +389,20 @@ private void OnExtractButton(EntityUid uid, AnalysisConsoleComponent component, UpdateUserInterface(uid, component); } + private void OnBiasButton(EntityUid uid, AnalysisConsoleComponent component, AnalysisConsoleBiasButtonPressedMessage args) + { + if (component.AnalyzerEntity == null) + return; + + if (!TryComp(component.AnalyzerEntity, out var trav)) + return; + + if (!_traversalDistorter.SetState(component.AnalyzerEntity.Value, trav, args.IsDown)) + return; + + UpdateUserInterface(uid, component); + } + /// /// Cancels scans if the artifact changes nodes (is activated) during the scan. /// @@ -505,4 +526,3 @@ private void OnPowerChanged(EntityUid uid, ActiveArtifactAnalyzerComponent activ } } } - diff --git a/Content.Server/Xenoarchaeology/Equipment/Systems/TraversalDistorterSystem.cs b/Content.Server/Xenoarchaeology/Equipment/Systems/TraversalDistorterSystem.cs index 230e639af49..67812a8a7ba 100644 --- a/Content.Server/Xenoarchaeology/Equipment/Systems/TraversalDistorterSystem.cs +++ b/Content.Server/Xenoarchaeology/Equipment/Systems/TraversalDistorterSystem.cs @@ -1,9 +1,12 @@ -using Content.Server.Popups; +using Content.Server.Construction; +using Content.Server.Popups; using Content.Server.Power.EntitySystems; using Content.Server.Xenoarchaeology.Equipment.Components; +using Content.Server.Xenoarchaeology.XenoArtifacts; using Content.Shared.Examine; using Content.Shared.Interaction; using Content.Shared.Placeable; +using Robust.Shared.Player; using Robust.Shared.Timing; namespace Content.Server.Xenoarchaeology.Equipment.Systems; @@ -11,15 +14,14 @@ namespace Content.Server.Xenoarchaeology.Equipment.Systems; public sealed class TraversalDistorterSystem : EntitySystem { [Dependency] private readonly IGameTiming _timing = default!; - [Dependency] private readonly PopupSystem _popup = default!; /// public override void Initialize() { SubscribeLocalEvent(OnInit); - - SubscribeLocalEvent(OnInteract); SubscribeLocalEvent(OnExamine); + SubscribeLocalEvent(OnRefreshParts); + SubscribeLocalEvent(OnUpgradeExamine); SubscribeLocalEvent(OnItemPlaced); SubscribeLocalEvent(OnItemRemoved); @@ -30,30 +32,25 @@ private void OnInit(EntityUid uid, TraversalDistorterComponent component, MapIni component.NextActivation = _timing.CurTime; } - private void OnInteract(EntityUid uid, TraversalDistorterComponent component, ActivateInWorldEvent args) + /// + /// Switches the state of the traversal distorter between up and down. + /// + /// The distorter's entity + /// The component on the entity + /// If the distorter changed state + public bool SetState(EntityUid uid, TraversalDistorterComponent component, bool isDown) { - if (args.Handled || !this.IsPowered(uid, EntityManager)) - return; + if (!this.IsPowered(uid, EntityManager)) + return false; + if (_timing.CurTime < component.NextActivation) - return; - args.Handled = true; + return false; + component.NextActivation = _timing.CurTime + component.ActivationDelay; - component.BiasDirection = component.BiasDirection == BiasDirection.In - ? BiasDirection.Out - : BiasDirection.In; + component.BiasDirection = isDown ? BiasDirection.Down : BiasDirection.Up; - var toPopup = string.Empty; - switch (component.BiasDirection) - { - case BiasDirection.In: - toPopup = Loc.GetString("traversal-distorter-set-in"); - break; - case BiasDirection.Out: - toPopup = Loc.GetString("traversal-distorter-set-out"); - break; - } - _popup.PopupEntity(toPopup, uid); + return true; } private void OnExamine(EntityUid uid, TraversalDistorterComponent component, ExaminedEvent args) @@ -61,17 +58,28 @@ private void OnExamine(EntityUid uid, TraversalDistorterComponent component, Exa string examine = string.Empty; switch (component.BiasDirection) { - case BiasDirection.In: - examine = Loc.GetString("traversal-distorter-desc-in"); + case BiasDirection.Up: + examine = Loc.GetString("traversal-distorter-desc-up"); break; - case BiasDirection.Out: - examine = Loc.GetString("traversal-distorter-desc-out"); + case BiasDirection.Down: + examine = Loc.GetString("traversal-distorter-desc-down"); break; } - args.PushMarkup(examine); } + private void OnRefreshParts(EntityUid uid, TraversalDistorterComponent component, RefreshPartsEvent args) + { + var biasRating = args.PartRatings[component.MachinePartBiasChance]; + + component.BiasChance = component.BaseBiasChance * MathF.Pow(component.PartRatingBiasChance, biasRating - 1); + } + + private void OnUpgradeExamine(EntityUid uid, TraversalDistorterComponent component, UpgradeExamineEvent args) + { + args.AddPercentageUpgrade("traversal-distorter-upgrade-bias", component.BiasChance / component.BaseBiasChance); + } + private void OnItemPlaced(EntityUid uid, TraversalDistorterComponent component, ref ItemPlacedEvent args) { var bias = EnsureComp(args.OtherEntity); diff --git a/Content.Server/Xenoarchaeology/XenoArtifacts/ArtifactSystem.Nodes.cs b/Content.Server/Xenoarchaeology/XenoArtifacts/ArtifactSystem.Nodes.cs index 647f31a8953..895bb0217b3 100644 --- a/Content.Server/Xenoarchaeology/XenoArtifacts/ArtifactSystem.Nodes.cs +++ b/Content.Server/Xenoarchaeology/XenoArtifacts/ArtifactSystem.Nodes.cs @@ -19,26 +19,46 @@ public sealed partial class ArtifactSystem /// /// /// - /// The amount of nodes it has. - private void GenerateArtifactNodeTree(EntityUid artifact, ref List allNodes, int nodeAmount) + /// The amount of nodes it has. + private void GenerateArtifactNodeTree(EntityUid artifact, List allNodes, int nodesToCreate) { - if (nodeAmount < 1) + if (nodesToCreate < 1) { - Log.Error($"nodeAmount {nodeAmount} is less than 1. Aborting artifact tree generation."); + Log.Error($"nodesToCreate {nodesToCreate} is less than 1. Aborting artifact tree generation."); return; } _usedNodeIds.Clear(); + var uninitializedNodes = new List { new(){ Id = GetValidNodeId() } }; + var createdNodes = 1; - var rootNode = new ArtifactNode + while (uninitializedNodes.Count > 0) { - Id = GetValidNodeId() - }; - var uninitializedNodes = new List { rootNode }; - while (uninitializedNodes.Any()) - { - GenerateNode(artifact, ref uninitializedNodes, ref allNodes, nodeAmount); + var node = uninitializedNodes[0]; + uninitializedNodes.Remove(node); + + node.Trigger = GetRandomTrigger(artifact, ref node); + node.Effect = GetRandomEffect(artifact, ref node); + + var maxChildren = _random.Next(1, MaxEdgesPerNode - 1); + + for (var i = 0; i < maxChildren; i++) + { + if (nodesToCreate <= createdNodes) + { + break; + } + + var child = new ArtifactNode {Id = GetValidNodeId(), Depth = node.Depth + 1}; + node.Edges.Add(child.Id); + child.Edges.Add(node.Id); + + uninitializedNodes.Add(child); + createdNodes++; + } + + allNodes.Add(node); } } @@ -51,44 +71,8 @@ private int GetValidNodeId() } _usedNodeIds.Add(id); - return id; - } - /// - /// Generate an individual node on the tree. - /// - private void GenerateNode(EntityUid artifact, ref List uninitializedNodes, ref List allNodes, int targetNodeAmount) - { - if (!uninitializedNodes.Any()) - return; - - var node = uninitializedNodes.First(); - uninitializedNodes.Remove(node); - - //Generate the connected nodes - var maxEdges = Math.Max(1, targetNodeAmount - allNodes.Count - uninitializedNodes.Count - 1); - maxEdges = Math.Min(maxEdges, MaxEdgesPerNode); - var minEdges = Math.Clamp(targetNodeAmount - allNodes.Count - uninitializedNodes.Count - 1, 0, 1); - - var edgeAmount = _random.Next(minEdges, maxEdges); - - for (var i = 0; i < edgeAmount; i++) - { - var neighbor = new ArtifactNode - { - Depth = node.Depth + 1, - Id = GetValidNodeId() - }; - node.Edges.Add(neighbor.Id); - neighbor.Edges.Add(node.Id); - - uninitializedNodes.Add(neighbor); - } - - node.Trigger = GetRandomTrigger(artifact, ref node); - node.Effect = GetRandomEffect(artifact, ref node); - - allNodes.Add(node); + return id; } //yeah these two functions are near duplicates but i don't @@ -159,6 +143,7 @@ private int GetRandomTargetDepth(Dictionary weights) return key; } } + return _random.Pick(weights.Keys); //shouldn't happen } diff --git a/Content.Server/Xenoarchaeology/XenoArtifacts/ArtifactSystem.cs b/Content.Server/Xenoarchaeology/XenoArtifacts/ArtifactSystem.cs index 955fe827d72..f1700759772 100644 --- a/Content.Server/Xenoarchaeology/XenoArtifacts/ArtifactSystem.cs +++ b/Content.Server/Xenoarchaeology/XenoArtifacts/ArtifactSystem.cs @@ -129,7 +129,7 @@ public void RandomizeArtifact(EntityUid uid, ArtifactComponent component) { var nodeAmount = _random.Next(component.NodesMin, component.NodesMax); - GenerateArtifactNodeTree(uid, ref component.NodeTree, nodeAmount); + GenerateArtifactNodeTree(uid, component.NodeTree, nodeAmount); var firstNode = GetRootNode(component.NodeTree); EnterNode(uid, ref firstNode, component); } @@ -184,13 +184,14 @@ public void ForceActivateArtifact(EntityUid uid, EntityUid? user = null, Artifac var currentNode = GetNodeFromId(component.CurrentNodeId.Value, component); currentNode.Triggered = true; - if (currentNode.Edges.Any()) - { - var newNode = GetNewNode(uid, component); - if (newNode == null) - return; - EnterNode(uid, ref newNode, component); - } + if (currentNode.Edges.Count == 0) + return; + + var newNode = GetNewNode(uid, component); + if (newNode == null) + return; + + EnterNode(uid, ref newNode, component); } private ArtifactNode? GetNewNode(EntityUid uid, ArtifactComponent component) @@ -206,19 +207,20 @@ public void ForceActivateArtifact(EntityUid uid, EntityUid? user = null, Artifac if (TryComp(uid, out var bias) && TryComp(bias.Provider, out var trav) && + _random.Prob(trav.BiasChance) && this.IsPowered(bias.Provider, EntityManager)) { switch (trav.BiasDirection) { - case BiasDirection.In: - var foo = allNodes.Where(x => GetNodeFromId(x, component).Depth < currentNode.Depth).ToHashSet(); - if (foo.Any()) - allNodes = foo; + case BiasDirection.Up: + var upNodes = allNodes.Where(x => GetNodeFromId(x, component).Depth < currentNode.Depth).ToHashSet(); + if (upNodes.Count != 0) + allNodes = upNodes; break; - case BiasDirection.Out: - var bar = allNodes.Where(x => GetNodeFromId(x, component).Depth > currentNode.Depth).ToHashSet(); - if (bar.Any()) - allNodes = bar; + case BiasDirection.Down: + var downNodes = allNodes.Where(x => GetNodeFromId(x, component).Depth > currentNode.Depth).ToHashSet(); + if (downNodes.Count != 0) + allNodes = downNodes; break; } } @@ -226,12 +228,14 @@ public void ForceActivateArtifact(EntityUid uid, EntityUid? user = null, Artifac var undiscoveredNodes = allNodes.Where(x => !GetNodeFromId(x, component).Discovered).ToList(); Log.Debug($"Undiscovered nodes: {string.Join(", ", undiscoveredNodes)}"); var newNode = _random.Pick(allNodes); - if (undiscoveredNodes.Any() && _random.Prob(0.75f)) + + if (undiscoveredNodes.Count != 0 && _random.Prob(0.75f)) { newNode = _random.Pick(undiscoveredNodes); } Log.Debug($"Going to node {newNode}"); + return GetNodeFromId(newNode, component); } diff --git a/Content.Server/Xenoarchaeology/XenoArtifacts/Effects/Systems/GasArtifactSystem.cs b/Content.Server/Xenoarchaeology/XenoArtifacts/Effects/Systems/GasArtifactSystem.cs index e24d31a1135..dc054d23182 100644 --- a/Content.Server/Xenoarchaeology/XenoArtifacts/Effects/Systems/GasArtifactSystem.cs +++ b/Content.Server/Xenoarchaeology/XenoArtifacts/Effects/Systems/GasArtifactSystem.cs @@ -2,6 +2,7 @@ using Content.Server.Atmos.EntitySystems; using Content.Server.Xenoarchaeology.XenoArtifacts.Effects.Components; using Content.Server.Xenoarchaeology.XenoArtifacts.Events; +using Content.Shared.Atmos; namespace Content.Server.Xenoarchaeology.XenoArtifacts.Effects.Systems; diff --git a/Content.Server/Xenoarchaeology/XenoArtifacts/Effects/Systems/PortalArtifactSystem.cs b/Content.Server/Xenoarchaeology/XenoArtifacts/Effects/Systems/PortalArtifactSystem.cs index e2d21723550..e44ee6baa12 100644 --- a/Content.Server/Xenoarchaeology/XenoArtifacts/Effects/Systems/PortalArtifactSystem.cs +++ b/Content.Server/Xenoarchaeology/XenoArtifacts/Effects/Systems/PortalArtifactSystem.cs @@ -35,8 +35,7 @@ private void OnActivate(Entity artifact, ref ArtifactAc var secondPortal = Spawn(artifact.Comp.PortalProto, _transform.GetMapCoordinates(target)); //Manual position swapping, because the portal that opens doesn't trigger a collision, and doesn't teleport targets the first time. - _transform.SetCoordinates(artifact, Transform(secondPortal).Coordinates); - _transform.SetCoordinates(target, Transform(firstPortal).Coordinates); + _transform.SwapPositions(target, secondPortal); _link.TryLink(firstPortal, secondPortal, true); } diff --git a/Content.Server/Xenoarchaeology/XenoArtifacts/Effects/Systems/ShuffleArtifactSystem.cs b/Content.Server/Xenoarchaeology/XenoArtifacts/Effects/Systems/ShuffleArtifactSystem.cs index b977cb038c9..c39627818a1 100644 --- a/Content.Server/Xenoarchaeology/XenoArtifacts/Effects/Systems/ShuffleArtifactSystem.cs +++ b/Content.Server/Xenoarchaeology/XenoArtifacts/Effects/Systems/ShuffleArtifactSystem.cs @@ -22,7 +22,6 @@ private void OnActivated(EntityUid uid, ShuffleArtifactComponent component, Arti { var mobState = GetEntityQuery(); - List allCoords = new(); List> toShuffle = new(); foreach (var ent in _lookup.GetEntitiesInRange(uid, component.Radius, LookupFlags.Dynamic | LookupFlags.Sundries)) @@ -33,13 +32,15 @@ private void OnActivated(EntityUid uid, ShuffleArtifactComponent component, Arti var xform = Transform(ent); toShuffle.Add((ent, xform)); - allCoords.Add(xform.Coordinates); } - foreach (var xform in toShuffle) + _random.Shuffle(toShuffle); + + while (toShuffle.Count > 1) { - var xformUid = xform.Owner; - _xform.SetCoordinates(xformUid, xform, _random.PickAndTake(allCoords)); + var ent1 = _random.PickAndTake(toShuffle); + var ent2 = _random.PickAndTake(toShuffle); + _xform.SwapPositions((ent1, ent1), (ent2, ent2)); } } } diff --git a/Content.Server/Xenoarchaeology/XenoArtifacts/Effects/Systems/TemperatureArtifactSystem.cs b/Content.Server/Xenoarchaeology/XenoArtifacts/Effects/Systems/TemperatureArtifactSystem.cs index f314d4a4fb2..e62ce36b5b9 100644 --- a/Content.Server/Xenoarchaeology/XenoArtifacts/Effects/Systems/TemperatureArtifactSystem.cs +++ b/Content.Server/Xenoarchaeology/XenoArtifacts/Effects/Systems/TemperatureArtifactSystem.cs @@ -2,6 +2,7 @@ using Content.Server.Atmos.EntitySystems; using Content.Server.Xenoarchaeology.XenoArtifacts.Effects.Components; using Content.Server.Xenoarchaeology.XenoArtifacts.Events; +using Content.Shared.Atmos; using Robust.Server.GameObjects; namespace Content.Server.Xenoarchaeology.XenoArtifacts.Effects.Systems; diff --git a/Content.Server/Xenoarchaeology/XenoArtifacts/Triggers/Systems/ArtifactExamineTriggerSystem.cs b/Content.Server/Xenoarchaeology/XenoArtifacts/Triggers/Systems/ArtifactExamineTriggerSystem.cs index cbade1682e5..b7afbcfc8b4 100644 --- a/Content.Server/Xenoarchaeology/XenoArtifacts/Triggers/Systems/ArtifactExamineTriggerSystem.cs +++ b/Content.Server/Xenoarchaeology/XenoArtifacts/Triggers/Systems/ArtifactExamineTriggerSystem.cs @@ -1,5 +1,6 @@ using Content.Server.Xenoarchaeology.XenoArtifacts.Triggers.Components; using Content.Shared.Examine; +using Content.Shared.Ghost; namespace Content.Server.Xenoarchaeology.XenoArtifacts.Triggers.Systems; @@ -15,6 +16,10 @@ public override void Initialize() private void OnExamine(EntityUid uid, ArtifactExamineTriggerComponent component, ExaminedEvent args) { + // Prevent ghosts from activating this trigger unless they have CanGhostInteract + if (TryComp(args.Examiner, out var ghost) && !ghost.CanGhostInteract) + return; + _artifact.TryActivateArtifact(uid); } } diff --git a/Content.Server/Zombies/IncurableZombieComponent.cs b/Content.Server/Zombies/IncurableZombieComponent.cs index 26958656909..375b814b51d 100644 --- a/Content.Server/Zombies/IncurableZombieComponent.cs +++ b/Content.Server/Zombies/IncurableZombieComponent.cs @@ -1,10 +1,16 @@ -namespace Content.Server.Zombies; +using Robust.Shared.Prototypes; + +namespace Content.Server.Zombies; /// -/// This is used for a zombie that cannot be cured by any methods. +/// This is used for a zombie that cannot be cured by any methods. Gives a succumb to zombie infection action. /// [RegisterComponent] public sealed partial class IncurableZombieComponent : Component { + [DataField] + public EntProtoId ZombifySelfActionPrototype = "ActionTurnUndead"; + [DataField] + public EntityUid? Action; } diff --git a/Content.Server/Zombies/InitialInfectedExemptComponent.cs b/Content.Server/Zombies/InitialInfectedExemptComponent.cs index 46077935c68..f2dfda3f872 100644 --- a/Content.Server/Zombies/InitialInfectedExemptComponent.cs +++ b/Content.Server/Zombies/InitialInfectedExemptComponent.cs @@ -1,7 +1,7 @@ namespace Content.Server.Zombies; [RegisterComponent] -public partial class InitialInfectedExemptComponent : Component +public sealed partial class InitialInfectedExemptComponent : Component { } diff --git a/Content.Server/Zombies/PendingZombieComponent.cs b/Content.Server/Zombies/PendingZombieComponent.cs index 1bb0ef28720..811d3f96440 100644 --- a/Content.Server/Zombies/PendingZombieComponent.cs +++ b/Content.Server/Zombies/PendingZombieComponent.cs @@ -1,5 +1,4 @@ using Content.Shared.Damage; -using Robust.Shared.Prototypes; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; namespace Content.Server.Zombies; @@ -17,7 +16,7 @@ public sealed partial class PendingZombieComponent : Component { DamageDict = new () { - { "Poison", 0.3 }, + { "Poison", 0.2 }, } }; @@ -48,9 +47,6 @@ public sealed partial class PendingZombieComponent : Component [DataField] public TimeSpan MaxInitialInfectedGrace = TimeSpan.FromMinutes(15f); - [DataField] - public EntProtoId ZombifySelfActionPrototype = "ActionTurnUndead"; - /// /// The chance each second that a warning will be shown. /// @@ -66,6 +62,4 @@ public sealed partial class PendingZombieComponent : Component "zombie-infection-warning", "zombie-infection-underway" }; - - [DataField] public EntityUid? Action; } diff --git a/Content.Server/Zombies/ZombieSystem.Transform.cs b/Content.Server/Zombies/ZombieSystem.Transform.cs index 5b38e6f766f..a906652765c 100644 --- a/Content.Server/Zombies/ZombieSystem.Transform.cs +++ b/Content.Server/Zombies/ZombieSystem.Transform.cs @@ -80,7 +80,7 @@ private void OnDamageChanged(EntityUid uid, ZombifyOnDeathComponent component, M /// the entity being zombified /// /// - /// ALRIGHT BIG BOY. YOU'VE COME TO THE LAYER OF THE BEAST. THIS IS YOUR WARNING. + /// ALRIGHT BIG BOYS, GIRLS AND ANYONE ELSE. YOU'VE COME TO THE LAYER OF THE BEAST. THIS IS YOUR WARNING. /// This function is the god function for zombie stuff, and it is cursed. I have /// attempted to label everything thouroughly for your sanity. I have attempted to /// rewrite this, but this is how it shall lie eternal. Turn back now. @@ -236,6 +236,11 @@ public void ZombifyEntity(EntityUid target, MobStateComponent? mobState = null) _identity.QueueIdentityUpdate(target); + var htn = EnsureComp(target); + htn.RootTask = new HTNCompoundTask() { Task = "SimpleHostileCompound" }; + htn.Blackboard.SetValue(NPCBlackboard.Owner, target); + _npc.SleepNPC(target, htn); + //He's gotta have a mind var hasMind = _mind.TryGetMind(target, out var mindId, out _); if (hasMind && _mind.TryGetSession(mindId, out var session)) @@ -251,9 +256,6 @@ public void ZombifyEntity(EntityUid target, MobStateComponent? mobState = null) } else { - var htn = EnsureComp(target); - htn.RootTask = new HTNCompoundTask() { Task = "SimpleHostileCompound" }; - htn.Blackboard.SetValue(NPCBlackboard.Owner, target); _npc.WakeNPC(target, htn); } diff --git a/Content.Server/Zombies/ZombieSystem.cs b/Content.Server/Zombies/ZombieSystem.cs index 09c8fa26db6..552fd2781c0 100644 --- a/Content.Server/Zombies/ZombieSystem.cs +++ b/Content.Server/Zombies/ZombieSystem.cs @@ -64,9 +64,16 @@ public override void Initialize() SubscribeLocalEvent(OnPendingMapInit); + SubscribeLocalEvent(OnPendingMapInit); + SubscribeLocalEvent(OnDamageChanged); } + private void OnPendingMapInit(EntityUid uid, IncurableZombieComponent component, MapInitEvent args) + { + _actions.AddAction(uid, ref component.Action, component.ZombifySelfActionPrototype); + } + private void OnPendingMapInit(EntityUid uid, PendingZombieComponent component, MapInitEvent args) { if (_mobState.IsDead(uid)) @@ -77,7 +84,6 @@ private void OnPendingMapInit(EntityUid uid, PendingZombieComponent component, M component.NextTick = _timing.CurTime + TimeSpan.FromSeconds(1f); component.GracePeriod = _random.Next(component.MinInitialInfectedGrace, component.MaxInitialInfectedGrace); - _actions.AddAction(uid, ref component.Action, component.ZombifySelfActionPrototype); } public override void Update(float frameTime) diff --git a/Content.Shared/Access/Components/IdCardComponent.cs b/Content.Shared/Access/Components/IdCardComponent.cs index 26e83c5586e..39d5d9d27f3 100644 --- a/Content.Shared/Access/Components/IdCardComponent.cs +++ b/Content.Shared/Access/Components/IdCardComponent.cs @@ -40,4 +40,10 @@ public sealed partial class IdCardComponent : Component /// [DataField, ViewVariables(VVAccess.ReadWrite)] public bool BypassLogging; + + [DataField] + public LocId NameLocId = "access-id-card-component-owner-name-job-title-text"; + + [DataField] + public LocId FullNameLocId = "access-id-card-component-owner-full-name-job-title-text"; } diff --git a/Content.Shared/Access/Components/IdExaminableComponent.cs b/Content.Shared/Access/Components/IdExaminableComponent.cs new file mode 100644 index 00000000000..87d3e03a14f --- /dev/null +++ b/Content.Shared/Access/Components/IdExaminableComponent.cs @@ -0,0 +1,6 @@ +using Content.Shared.Access.Systems; + +namespace Content.Shared.Access.Components; + +[RegisterComponent, Access(typeof(IdExaminableSystem))] +public sealed partial class IdExaminableComponent : Component; diff --git a/Content.Shared/Access/SharedAgentIDCardSystem.cs b/Content.Shared/Access/SharedAgentIDCardSystem.cs index ef6690cc356..d027a3937f5 100644 --- a/Content.Shared/Access/SharedAgentIDCardSystem.cs +++ b/Content.Shared/Access/SharedAgentIDCardSystem.cs @@ -26,12 +26,14 @@ public sealed class AgentIDCardBoundUserInterfaceState : BoundUserInterfaceState public readonly HashSet Icons; public string CurrentName { get; } public string CurrentJob { get; } + public string CurrentJobIconId { get; } - public AgentIDCardBoundUserInterfaceState(string currentName, string currentJob, HashSet icons) + public AgentIDCardBoundUserInterfaceState(string currentName, string currentJob, string currentJobIconId, HashSet icons) { Icons = icons; CurrentName = currentName; CurrentJob = currentJob; + CurrentJobIconId = currentJobIconId; } } @@ -60,11 +62,11 @@ public AgentIDCardJobChangedMessage(string job) [Serializable, NetSerializable] public sealed class AgentIDCardJobIconChangedMessage : BoundUserInterfaceMessage { - public string JobIcon { get; } + public string JobIconId { get; } - public AgentIDCardJobIconChangedMessage(string jobIcon) + public AgentIDCardJobIconChangedMessage(string jobIconId) { - JobIcon = jobIcon; + JobIconId = jobIconId; } } } diff --git a/Content.Shared/Access/Systems/AccessReaderSystem.cs b/Content.Shared/Access/Systems/AccessReaderSystem.cs index 89c08e0a4e7..3670e24bd32 100644 --- a/Content.Shared/Access/Systems/AccessReaderSystem.cs +++ b/Content.Shared/Access/Systems/AccessReaderSystem.cs @@ -153,7 +153,7 @@ public bool IsAllowed( return IsAllowedInternal(access, stationKeys, reader); if (!_containerSystem.TryGetContainer(target, reader.ContainerAccessProvider, out var container)) - return false; + return Paused(target); // when mapping, containers with electronics arent spawned foreach (var entity in container.ContainedEntities) { diff --git a/Content.Server/Access/Systems/IdExaminableSystem.cs b/Content.Shared/Access/Systems/IdExaminableSystem.cs similarity index 85% rename from Content.Server/Access/Systems/IdExaminableSystem.cs rename to Content.Shared/Access/Systems/IdExaminableSystem.cs index c2231605e4a..333272e27ac 100644 --- a/Content.Server/Access/Systems/IdExaminableSystem.cs +++ b/Content.Shared/Access/Systems/IdExaminableSystem.cs @@ -1,4 +1,3 @@ -using Content.Server.Access.Components; using Content.Shared.Access.Components; using Content.Shared.Examine; using Content.Shared.Inventory; @@ -6,7 +5,7 @@ using Content.Shared.Verbs; using Robust.Shared.Utility; -namespace Content.Server.Access.Systems; +namespace Content.Shared.Access.Systems; public sealed class IdExaminableSystem : EntitySystem { @@ -22,7 +21,7 @@ public override void Initialize() private void OnGetExamineVerbs(EntityUid uid, IdExaminableComponent component, GetVerbsEvent args) { var detailsRange = _examineSystem.IsInDetailsRange(args.User, uid); - var info = GetInfo(uid) ?? Loc.GetString("id-examinable-component-verb-no-id"); + var info = GetMessage(uid); var verb = new ExamineVerb() { @@ -41,7 +40,12 @@ private void OnGetExamineVerbs(EntityUid uid, IdExaminableComponent component, G args.Verbs.Add(verb); } - private string? GetInfo(EntityUid uid) + public string GetMessage(EntityUid uid) + { + return GetInfo(uid) ?? Loc.GetString("id-examinable-component-verb-no-id"); + } + + public string? GetInfo(EntityUid uid) { if (_inventorySystem.TryGetSlotEntity(uid, "id", out var idUid)) { @@ -65,9 +69,9 @@ private string GetNameAndJob(IdCardComponent id) var jobSuffix = string.IsNullOrWhiteSpace(id.JobTitle) ? string.Empty : $" ({id.JobTitle})"; var val = string.IsNullOrWhiteSpace(id.FullName) - ? Loc.GetString("access-id-card-component-owner-name-job-title-text", + ? Loc.GetString(id.NameLocId, ("jobSuffix", jobSuffix)) - : Loc.GetString("access-id-card-component-owner-full-name-job-title-text", + : Loc.GetString(id.FullNameLocId, ("fullName", id.FullName), ("jobSuffix", jobSuffix)); diff --git a/Content.Shared/Access/Systems/SharedIdCardSystem.cs b/Content.Shared/Access/Systems/SharedIdCardSystem.cs index 842e7e7e6ac..bfde70f5041 100644 --- a/Content.Shared/Access/Systems/SharedIdCardSystem.cs +++ b/Content.Shared/Access/Systems/SharedIdCardSystem.cs @@ -1,13 +1,32 @@ using Content.Shared.Access.Components; +using Content.Shared.Administration.Logs; +using Content.Shared.Database; using Content.Shared.Hands.Components; using Content.Shared.Inventory; using Content.Shared.PDA; +using Content.Shared.Roles; +using Content.Shared.StatusIcon; +using Robust.Shared.Prototypes; namespace Content.Shared.Access.Systems; public abstract class SharedIdCardSystem : EntitySystem { + [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!; [Dependency] private readonly InventorySystem _inventorySystem = default!; + [Dependency] private readonly MetaDataSystem _metaSystem = default!; + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnMapInit); + } + + private void OnMapInit(EntityUid uid, IdCardComponent id, MapInitEvent args) + { + UpdateEntityName(uid, id); + } /// /// Attempt to find an ID card on an entity. This will look in the entity itself, in the entity's hands, and @@ -56,4 +75,143 @@ public bool TryGetIdCard(EntityUid uid, out Entity idCard) idCard = default; return false; } + + /// + /// Attempts to change the job title of a card. + /// Returns true/false. + /// + /// + /// If provided with a player's EntityUid to the player parameter, adds the change to the admin logs. + /// + public bool TryChangeJobTitle(EntityUid uid, string? jobTitle, IdCardComponent? id = null, EntityUid? player = null) + { + if (!Resolve(uid, ref id)) + return false; + + if (!string.IsNullOrWhiteSpace(jobTitle)) + { + jobTitle = jobTitle.Trim(); + + if (jobTitle.Length > IdCardConsoleComponent.MaxJobTitleLength) + jobTitle = jobTitle[..IdCardConsoleComponent.MaxJobTitleLength]; + } + else + { + jobTitle = null; + } + + if (id.JobTitle == jobTitle) + return true; + id.JobTitle = jobTitle; + Dirty(uid, id); + UpdateEntityName(uid, id); + + if (player != null) + { + _adminLogger.Add(LogType.Identity, LogImpact.Low, + $"{ToPrettyString(player.Value):player} has changed the job title of {ToPrettyString(uid):entity} to {jobTitle} "); + } + return true; + } + + public bool TryChangeJobIcon(EntityUid uid, StatusIconPrototype jobIcon, IdCardComponent? id = null, EntityUid? player = null) + { + if (!Resolve(uid, ref id)) + { + return false; + } + + if (id.JobIcon == jobIcon.ID) + { + return true; + } + + id.JobIcon = jobIcon.ID; + Dirty(uid, id); + + if (player != null) + { + _adminLogger.Add(LogType.Identity, LogImpact.Low, + $"{ToPrettyString(player.Value):player} has changed the job icon of {ToPrettyString(uid):entity} to {jobIcon} "); + } + + return true; + } + + public bool TryChangeJobDepartment(EntityUid uid, JobPrototype job, IdCardComponent? id = null) + { + if (!Resolve(uid, ref id)) + return false; + + id.JobDepartments.Clear(); + foreach (var department in _prototypeManager.EnumeratePrototypes()) + { + if (department.Roles.Contains(job.ID)) + id.JobDepartments.Add("department-" + department.ID); + } + + Dirty(uid, id); + + return true; + } + + /// + /// Attempts to change the full name of a card. + /// Returns true/false. + /// + /// + /// If provided with a player's EntityUid to the player parameter, adds the change to the admin logs. + /// + public bool TryChangeFullName(EntityUid uid, string? fullName, IdCardComponent? id = null, EntityUid? player = null) + { + if (!Resolve(uid, ref id)) + return false; + + if (!string.IsNullOrWhiteSpace(fullName)) + { + fullName = fullName.Trim(); + if (fullName.Length > IdCardConsoleComponent.MaxFullNameLength) + fullName = fullName[..IdCardConsoleComponent.MaxFullNameLength]; + } + else + { + fullName = null; + } + + if (id.FullName == fullName) + return true; + id.FullName = fullName; + Dirty(uid, id); + UpdateEntityName(uid, id); + + if (player != null) + { + _adminLogger.Add(LogType.Identity, LogImpact.Low, + $"{ToPrettyString(player.Value):player} has changed the name of {ToPrettyString(uid):entity} to {fullName} "); + } + return true; + } + + /// + /// Changes the name of the id's owner. + /// + /// + /// If either or is empty, it's replaced by placeholders. + /// If both are empty, the original entity's name is restored. + /// + private void UpdateEntityName(EntityUid uid, IdCardComponent? id = null) + { + if (!Resolve(uid, ref id)) + return; + + var jobSuffix = string.IsNullOrWhiteSpace(id.JobTitle) ? string.Empty : $" ({id.JobTitle})"; + + var val = string.IsNullOrWhiteSpace(id.FullName) + ? Loc.GetString(id.NameLocId, + ("jobSuffix", jobSuffix)) + : Loc.GetString(id.FullNameLocId, + ("fullName", id.FullName), + ("jobSuffix", jobSuffix)); + _metaSystem.SetEntityName(uid, val); + } } diff --git a/Content.Shared/ActionBlocker/ActionBlockerSystem.cs b/Content.Shared/ActionBlocker/ActionBlockerSystem.cs index f5ed2df227c..47b3997806d 100644 --- a/Content.Shared/ActionBlocker/ActionBlockerSystem.cs +++ b/Content.Shared/ActionBlocker/ActionBlockerSystem.cs @@ -169,8 +169,16 @@ public bool CanEmote(EntityUid uid) public bool CanAttack(EntityUid uid, EntityUid? target = null, Entity? weapon = null, bool disarm = false) { + // If target is in a container can we attack + if (target != null && _container.IsEntityInContainer(target.Value)) + { + return false; + } + _container.TryGetOuterContainer(uid, Transform(uid), out var outerContainer); - if (target != null && target != outerContainer?.Owner && _container.IsEntityInContainer(uid)) + + // If we're in a container can we attack the target. + if (target != null && target != outerContainer?.Owner && _container.IsEntityInContainer(uid)) { var containerEv = new CanAttackFromContainerEvent(uid, target); RaiseLocalEvent(uid, containerEv); diff --git a/Content.Shared/Actions/ActionEvents.cs b/Content.Shared/Actions/ActionEvents.cs index 72a566b8c88..6cc50bc21b4 100644 --- a/Content.Shared/Actions/ActionEvents.cs +++ b/Content.Shared/Actions/ActionEvents.cs @@ -68,9 +68,10 @@ public void AddAction(ref EntityUid? actionId, string prototypeId) AddAction(ref actionId, prototypeId, Provider); } - public void AddAction(EntityUid actionId) + public void AddAction(EntityUid? actionId) { - Actions.Add(actionId); + if (actionId != null) + Actions.Add(actionId.Value); } } @@ -154,4 +155,9 @@ public abstract partial class BaseActionEvent : HandledEntityEventArgs /// The user performing the action. /// public EntityUid Performer; + + /// + /// The action the event belongs to. + /// + public EntityUid Action; } diff --git a/Content.Shared/Actions/BaseActionComponent.cs b/Content.Shared/Actions/BaseActionComponent.cs index 6d9242acc1d..9156f747f5c 100644 --- a/Content.Shared/Actions/BaseActionComponent.cs +++ b/Content.Shared/Actions/BaseActionComponent.cs @@ -1,15 +1,16 @@ -using Content.Shared.Mobs; -using Robust.Shared.Audio; +using Robust.Shared.Audio; +using Robust.Shared.Prototypes; using Robust.Shared.Serialization; using Robust.Shared.Utility; namespace Content.Shared.Actions; -// TODO ACTIONS make this a seprate component and remove the inheritance stuff. +// TODO ACTIONS make this a separate component and remove the inheritance stuff. // TODO ACTIONS convert to auto comp state? // TODO add access attribute. Need to figure out what to do with decal & mapping actions. // [Access(typeof(SharedActionsSystem))] +[EntityCategory("Actions")] public abstract partial class BaseActionComponent : Component { public abstract BaseActionEvent? BaseEvent { get; } @@ -25,6 +26,11 @@ public abstract partial class BaseActionComponent : Component /// [DataField("iconOn")] public SpriteSpecifier? IconOn; + /// + /// For toggle actions only, background to show when toggled on. + /// + [DataField] public SpriteSpecifier? BackgroundOn; + /// /// If not null, this color will modulate the action icon color. /// diff --git a/Content.Shared/Actions/Events/ActionPerformedEvent.cs b/Content.Shared/Actions/Events/ActionPerformedEvent.cs new file mode 100644 index 00000000000..530d7c93355 --- /dev/null +++ b/Content.Shared/Actions/Events/ActionPerformedEvent.cs @@ -0,0 +1,8 @@ +namespace Content.Shared.Actions.Events; + +/// +/// Raised on the action entity when it is used and . +/// +/// The entity that performed this action. +[ByRefEvent] +public readonly record struct ActionPerformedEvent(EntityUid Performer); diff --git a/Content.Shared/Actions/Events/AnomalyPowerActionEvent.cs b/Content.Shared/Actions/Events/AnomalyPowerActionEvent.cs new file mode 100644 index 00000000000..9184460153b --- /dev/null +++ b/Content.Shared/Actions/Events/AnomalyPowerActionEvent.cs @@ -0,0 +1,384 @@ +using Content.Shared.Anomaly.Effects.Components; +using Content.Shared.Atmos; +using Content.Shared.Damage; +using Robust.Shared.Audio; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; +using Content.Shared.Explosion; +using Robust.Shared.Prototypes; + +namespace Content.Shared.Actions.Events; + +public sealed partial class AnomalyPowerActionEvent : InstantActionEvent +{ + /// + /// Contains settings common to all "Anomalist" Powers. + /// + [DataField] + public AnomalyPowerSettings Settings; + + /// + /// Contains settings specific to "Bluespace Anomaly" powers. + /// + [DataField] + public BluespaceAnomalySettings? Bluespace; + + /// + /// Contains settings specific to "Electrical Anomaly" powers. + /// + [DataField] + public ElectricalAnomalySettings? Electricity; + + /// + /// What entities will be spawned by this action, using the same arguments as an EntitySpawnAnomalyComponent. + /// + [DataField] + public List? EntitySpawnEntries; + + /// + /// Contains settings specific to "Explosion Anomaly" powers. + /// + [DataField] + public ExplosionAnomalySettings? Explosion; + + /// + /// Contains settings specific to "Gas Producer Anomaly" powers. + /// + [DataField] + public GasProducerAnomalySettings? Gas; + + /// + /// Contains settings specific to "Gravity Anomaly" powers. + /// + [DataField] + public GravityAnomalySettings? Gravity; + + /// + /// Contains settings specific to "Injection Anomaly" powers. + /// + [DataField] + public InjectionAnomalySettings? Injection; + + /// + /// Contains settings specific to "Puddle Create Anomaly" powers. + /// + [DataField] + public PuddleAnomalySettings? Puddle; + + /// + /// Contains settings specific to "Pyroclastic Anomaly" powers. + /// + [DataField] + public PyroclasticAnomalySettings? Pyroclastic; +} + +[DataRecord] +public partial record struct AnomalyPowerSettings() +{ + public string PowerName; + + public float ManaCost; + + public bool CheckInsulation; + + /// + /// When casting above the Supercritical Threshold, if not 0, this will cause all powers to enter cooldown for the given duration. + /// + public float OverchargeCooldown; + + /// + /// When casting above the Supercritical Threshold, if not 0, this will deal recoil damage to the caster of the specified amounts. + /// + public DamageSpecifier? OverchargeRecoil; + + /// + /// When casting above the Supercritical Threshold, play a popup above the caster's head. + /// + public string? OverchargeFeedback; + + /// + /// The minimum amount of glimmer generated by this power. + /// + public int MinGlimmer; + + /// + /// The maximum amount of glimmer generated by this power. + /// + public int MaxGlimmer; + + /// + /// The amount to multiply glimmer generation by when above the Supercritical Threshold + /// + public int SupercriticalGlimmerMultiplier = 1; + + /// + /// The threshold of glimmer at which this power will play a sound. + /// + public float GlimmerSoundThreshold; + + /// + /// The glimmer threshold(divided by amplification and multiplied by dampening) at which this power will act as a Supercritical Anomaly. + /// + public float SupercriticalThreshold = 500f; + + /// + /// The maximum amount Dampening can increase the Supercritical threshold to. + /// + public float MaxSupercriticalThreshold = 800f; + + /// + /// The sound to be played upon activating this power(and not Supercritically) + /// + public SoundSpecifier? PulseSound = new SoundCollectionSpecifier("RadiationPulse"); + + /// + /// The sound plays when this power is activated above a Supercritical glimmer threshold + /// + public SoundSpecifier? SupercriticalSound = new SoundCollectionSpecifier("Explosion"); + + public bool DoSupercritical = true; +} + +[DataRecord] +public partial record struct BluespaceAnomalySettings() +{ + /// + /// The maximum radius that the shuffle effect will extend for + /// scales with stability + /// + public float MaxShuffleRadius = 10; + + /// + /// Whether or not a standard pulse teleports the caster. + /// + public bool PulseTeleportsCaster; + + /// + /// Whether or not a supercrit teleports the caster. + /// + public bool SupercritTeleportsCaster; + + /// + /// How far the supercritical event can teleport you + /// + public float SupercriticalTeleportRadius = 50f; + + /// + /// The sound played after players are shuffled/teleported around + /// + public SoundSpecifier TeleportSound = new SoundPathSpecifier("/Audio/Effects/teleport_arrival.ogg"); +} + +[DataRecord] +public partial record struct ElectricalAnomalySettings() +{ + /// + /// the minimum number of lightning strikes + /// + public int MinBoltCount = 2; + + /// + /// The number of lightning strikes, at the maximum severity of the anomaly + /// + public int MaxBoltCount = 5; + + /// + /// The maximum radius of the passive electrocution effect + /// scales with stability + /// + public float MaxElectrocuteRange = 7f; + + /// + /// Energy consumed from devices by the emp pulse upon going supercritical. + /// + public float EmpEnergyConsumption = 100000f; + + /// + /// Duration of devices being disabled by the emp pulse upon going supercritical. + /// + public float EmpDisabledDuration = 60f; +} + +[DataRecord] +public partial record struct ExplosionAnomalySettings() +{ + /// + /// The explosion prototype to spawn + /// + [DataField(customTypeSerializer: typeof(PrototypeIdSerializer))] + public string? ExplosionPrototype = default!; + + /// + /// The total amount of intensity an explosion can achieve + /// + public float TotalIntensity = 100f; + + /// + /// How quickly does the explosion's power slope? Higher = smaller area and more concentrated damage, lower = larger area and more spread out damage + /// + public float Dropoff = 10f; + + /// + /// How much intensity can be applied per tile? + /// + public float MaxTileIntensity = 10f; + + /// + /// The explosion prototype to spawn on Supercrit + /// + [DataField(customTypeSerializer: typeof(PrototypeIdSerializer))] + public string? SupercritExplosionPrototype = default!; + + /// + /// The total amount of intensity an explosion can achieve + /// + public float SupercritTotalIntensity = 100f; + + /// + /// How quickly does the explosion's power slope? Higher = smaller area and more concentrated damage, lower = larger area and more spread out damage + /// + public float SupercritDropoff = 10f; + + /// + /// How much intensity can be applied per tile? + /// + public float SupercritMaxTileIntensity = 10f; +} + +[DataRecord] +public partial record struct GasProducerAnomalySettings() +{ + /// + /// The gas to release + /// + public Gas ReleasedGas = Gas.WaterVapor; + + /// + /// The gas to release + /// + public Gas SupercritReleasedGas = Gas.WaterVapor; + + /// + /// The amount of gas released passively + /// + public float MoleAmount = 1f; + + /// + /// The radius of random gas spawns. + /// + public float SpawnRadius = 3; + + /// + /// The number of tiles which will be modified. + /// + public int TileCount = 1; + + /// + /// The the amount the temperature should be modified by (negative for decreasing temp) + /// + public float TempChange = 0; + + /// + /// The amount of gas released when the anomaly reaches max severity + /// + public float SupercritMoleAmount = 150f; + + /// + /// The radius of random gas spawns. + /// + public float SupercritSpawnRadius = 10; + + /// + /// The number of tiles which will be modified. + /// + public int SupercritTileCount = 10; + + /// + /// The the amount the temperature should be modified by (negative for decreasing temp) + /// + public float SupercritTempChange = 0; +} + +[DataRecord] +public partial record struct GravityAnomalySettings() +{ + /// + /// The maximum distance from which the anomaly + /// can throw you via a pulse. + /// + public float MaxThrowRange = 5f; + + /// + /// The maximum strength the anomaly + /// can throw you via a pulse + /// + public float MaxThrowStrength = 10; + + /// + /// The range around the anomaly that will be spaced on supercritical. + /// + public float SpaceRange = 3f; +} + +[DataRecord] +public partial record struct InjectionAnomalySettings() +{ + /// + /// the maximum amount of injection of a substance into an entity per pulsation + /// scales with Severity + /// + public float MaxSolutionInjection = 15; + + /// + /// The maximum amount of injection of a substance into an entity in the supercritical phase + /// + public float SuperCriticalSolutionInjection = 50; + + /// + /// The maximum radius in which the anomaly injects reagents into the surrounding containers. + /// + public float InjectRadius = 3; + + /// + /// The maximum radius in which the anomaly injects reagents into the surrounding containers. + /// + public float SuperCriticalInjectRadius = 15; + + /// + /// The name of the prototype of the special effect that appears above the entities into which the injection was carried out + /// + public EntProtoId VisualEffectPrototype = "PuddleSparkle"; + + /// + /// Solution name that can be drained. + /// + public string Solution { get; set; } = "default"; +} + +[DataRecord] +public partial record struct PuddleAnomalySettings() +{ + /// + /// The maximum amount of solution that an anomaly can splash out of the storage on the floor during pulsation. + /// Scales with Amplification. + /// + public float MaxPuddleSize = 100; + + /// + /// Solution name that can be drained. + /// + public string Solution { get; set; } = "default"; +} + +[DataRecord] +public partial record struct PyroclasticAnomalySettings() +{ + /// + /// The maximum distance from which entities will be ignited. + /// + public float MaximumIgnitionRadius = 5f; + + /// + /// The maximum distance from which entities will be ignited on a Supercrit cast. + /// + public float SupercritMaximumIgnitionRadius = 20f; +} diff --git a/Content.Shared/Actions/Events/DarkSwapActionEvent.cs b/Content.Shared/Actions/Events/DarkSwapActionEvent.cs new file mode 100644 index 00000000000..ad60d0ede45 --- /dev/null +++ b/Content.Shared/Actions/Events/DarkSwapActionEvent.cs @@ -0,0 +1,9 @@ +namespace Content.Shared.Actions.Events; +public sealed partial class DarkSwapActionEvent : InstantActionEvent +{ + [DataField] + public float ManaCost; + + [DataField] + public bool CheckInsulation; +} \ No newline at end of file diff --git a/Content.Shared/Actions/Events/PsionicHealOtherPowerActionEvent.cs b/Content.Shared/Actions/Events/PsionicHealOtherPowerActionEvent.cs new file mode 100644 index 00000000000..cdcba6740c2 --- /dev/null +++ b/Content.Shared/Actions/Events/PsionicHealOtherPowerActionEvent.cs @@ -0,0 +1,72 @@ +using Robust.Shared.Audio; +using Content.Shared.Damage; +using Content.Shared.Popups; + +namespace Content.Shared.Actions.Events; +public sealed partial class PsionicHealOtherPowerActionEvent : EntityTargetActionEvent +{ + /// + /// Caster's Amplification that has been modified by the results of a MoodContest. + /// + public float ModifiedAmplification = default!; + + /// + /// Caster's Dampening that has been modified by the results of a MoodContest. + /// + public float ModifiedDampening = default!; + + [DataField] + public DamageSpecifier? HealingAmount = default!; + + [DataField] + public string PowerName = default!; + + /// Controls whether or not a power fires immediately and with no DoAfter + [DataField] + public bool Immediate; + + [DataField] + public string? PopupText; + + [DataField] + public float? RotReduction; + + [DataField] + public bool DoRevive; + + [DataField] + public bool BreakOnUserMove = true; + + [DataField] + public bool BreakOnTargetMove = false; + + [DataField] + public float UseDelay = 8f; + + [DataField] + public int MinGlimmer = 8; + + [DataField] + public int MaxGlimmer = 12; + + [DataField] + public int GlimmerSoundThreshold; + + [DataField] + public int GlimmerPopupThreshold; + + [DataField] + public int GlimmerDoAfterVisibilityThreshold; + + [DataField] + public PopupType PopupType = PopupType.Medium; + + [DataField] + public AudioParams AudioParams = default!; + + [DataField] + public bool PlaySound; + + [DataField] + public SoundSpecifier SoundUse = new SoundPathSpecifier("/Audio/Psionics/heartbeat_fast.ogg"); +} diff --git a/Content.Shared/Actions/Events/SummonPsionicFamiliarActionEvent.cs b/Content.Shared/Actions/Events/SummonPsionicFamiliarActionEvent.cs new file mode 100644 index 00000000000..0df9d86f51e --- /dev/null +++ b/Content.Shared/Actions/Events/SummonPsionicFamiliarActionEvent.cs @@ -0,0 +1,54 @@ +using Robust.Shared.Prototypes; + +namespace Content.Shared.Actions.Events; + +public sealed partial class SummonPsionicFamiliarActionEvent : InstantActionEvent +{ + /// + /// The entity to be spawned by this power. + /// + [DataField] + public EntProtoId? FamiliarProto; + + /// + /// The name of this power, used for logging purposes. + /// + [DataField] + public string PowerName; + + /// + /// How much Mana this power should cost, if any. + /// + [DataField] + public float ManaCost; + + /// + /// Whether this power checks if the wearer is psionically insulated. + /// + [DataField] + public bool CheckInsulation; + + /// + /// Whether this power generates glimmer when used. + /// + [DataField] + public bool DoGlimmerEffects; + + /// + /// Whether the summoned entity will follow the one who summoned it. + /// + [DataField] + public bool FollowMaster; + + /// + /// The minimum amount of glimmer generated by this power. + /// + [DataField] + public int MinGlimmer; + + /// + /// The maximum amount of glimmer generated by this power. + /// + [DataField] + public int MaxGlimmer; +} diff --git a/Content.Shared/Actions/Events/ValidateActionEntityTargetEvent.cs b/Content.Shared/Actions/Events/ValidateActionEntityTargetEvent.cs new file mode 100644 index 00000000000..9f22e7973a4 --- /dev/null +++ b/Content.Shared/Actions/Events/ValidateActionEntityTargetEvent.cs @@ -0,0 +1,4 @@ +namespace Content.Shared.Actions.Events; + +[ByRefEvent] +public record struct ValidateActionEntityTargetEvent(EntityUid User, EntityUid Target, bool Cancelled = false); diff --git a/Content.Shared/Actions/Events/ValidateActionWorldTargetEvent.cs b/Content.Shared/Actions/Events/ValidateActionWorldTargetEvent.cs new file mode 100644 index 00000000000..43e398aad4a --- /dev/null +++ b/Content.Shared/Actions/Events/ValidateActionWorldTargetEvent.cs @@ -0,0 +1,6 @@ +using Robust.Shared.Map; + +namespace Content.Shared.Actions.Events; + +[ByRefEvent] +public record struct ValidateActionWorldTargetEvent(EntityUid User, EntityCoordinates Target, bool Cancelled = false); diff --git a/Content.Shared/Actions/SharedActionsSystem.cs b/Content.Shared/Actions/SharedActionsSystem.cs index 35d962b0e4e..6445039b9cb 100644 --- a/Content.Shared/Actions/SharedActionsSystem.cs +++ b/Content.Shared/Actions/SharedActionsSystem.cs @@ -8,14 +8,13 @@ using Content.Shared.Interaction; using Content.Shared.Inventory.Events; using Content.Shared.Mind; -using Content.Shared.Mobs.Components; +using Content.Shared.Rejuvenate; using Robust.Shared.Audio.Systems; using Robust.Shared.Containers; using Robust.Shared.GameStates; using Robust.Shared.Map; using Robust.Shared.Timing; using Robust.Shared.Utility; -using Content.Shared.Rejuvenate; namespace Content.Shared.Actions; @@ -145,9 +144,6 @@ public bool ResolveActionData( public void SetCooldown(EntityUid? actionId, TimeSpan start, TimeSpan end) { - if (actionId == null) - return; - if (!TryGetActionData(actionId, out var action)) return; @@ -163,9 +159,6 @@ public void SetCooldown(EntityUid? actionId, TimeSpan cooldown) public void ClearCooldown(EntityUid? actionId) { - if (actionId == null) - return; - if (!TryGetActionData(actionId, out var action)) return; @@ -176,6 +169,27 @@ public void ClearCooldown(EntityUid? actionId) Dirty(actionId.Value, action); } + /// + /// Sets the cooldown for this action only if it is bigger than the one it already has. + /// + public void SetIfBiggerCooldown(EntityUid? actionId, TimeSpan? cooldown) + { + if (cooldown == null || + cooldown.Value <= TimeSpan.Zero || + !TryGetActionData(actionId, out var action)) + { + return; + } + + var start = GameTiming.CurTime; + var end = start + cooldown; + if (action.Cooldown?.End > end) + return; + + action.Cooldown = (start, end.Value); + Dirty(actionId.Value, action); + } + public void StartUseDelay(EntityUid? actionId) { if (actionId == null) @@ -389,7 +403,7 @@ private void OnActionRequest(RequestPerformActionEvent ev, EntitySessionEventArg var targetWorldPos = _transformSystem.GetWorldPosition(entityTarget); _rotateToFaceSystem.TryFaceCoordinates(user, targetWorldPos); - if (!ValidateEntityTarget(user, entityTarget, entityAction)) + if (!ValidateEntityTarget(user, entityTarget, (actionEnt, entityAction))) return; _adminLogger.Add(LogType.Action, @@ -413,7 +427,7 @@ private void OnActionRequest(RequestPerformActionEvent ev, EntitySessionEventArg var entityCoordinatesTarget = GetCoordinates(netCoordinatesTarget); _rotateToFaceSystem.TryFaceCoordinates(user, entityCoordinatesTarget.ToMapPos(EntityManager, _transformSystem)); - if (!ValidateWorldTarget(user, entityCoordinatesTarget, worldAction)) + if (!ValidateWorldTarget(user, entityCoordinatesTarget, (actionEnt, worldAction))) return; _adminLogger.Add(LogType.Action, @@ -439,13 +453,26 @@ private void OnActionRequest(RequestPerformActionEvent ev, EntitySessionEventArg } if (performEvent != null) + { performEvent.Performer = user; + performEvent.Action = actionEnt; + } // All checks passed. Perform the action! PerformAction(user, component, actionEnt, action, performEvent, curTime); } - public bool ValidateEntityTarget(EntityUid user, EntityUid target, EntityTargetActionComponent action) + public bool ValidateEntityTarget(EntityUid user, EntityUid target, Entity actionEnt) + { + if (!ValidateEntityTargetBase(user, target, actionEnt)) + return false; + + var ev = new ValidateActionEntityTargetEvent(user, target); + RaiseLocalEvent(actionEnt, ref ev); + return !ev.Cancelled; + } + + private bool ValidateEntityTargetBase(EntityUid user, EntityUid target, EntityTargetActionComponent action) { if (!target.IsValid() || Deleted(target)) return false; @@ -478,16 +505,20 @@ public bool ValidateEntityTarget(EntityUid user, EntityUid target, EntityTargetA return distance <= action.Range; } - if (_interactionSystem.InRangeUnobstructed(user, target, range: action.Range) - && _containerSystem.IsInSameOrParentContainer(user, target)) - { - return true; - } + return _interactionSystem.InRangeAndAccessible(user, target, range: action.Range); + } + + public bool ValidateWorldTarget(EntityUid user, EntityCoordinates coords, Entity action) + { + if (!ValidateWorldTargetBase(user, coords, action)) + return false; - return _interactionSystem.CanAccessViaStorage(user, target); + var ev = new ValidateActionWorldTargetEvent(user, coords); + RaiseLocalEvent(action, ref ev); + return !ev.Cancelled; } - public bool ValidateWorldTarget(EntityUid user, EntityCoordinates coords, WorldTargetActionComponent action) + private bool ValidateWorldTargetBase(EntityUid user, EntityCoordinates coords, WorldTargetActionComponent action) { if (action.CheckCanInteract && !_actionBlockerSystem.CanInteract(user, null)) return false; @@ -535,13 +566,12 @@ public void PerformAction(EntityUid performer, ActionsComponent? component, Enti handled = actionEvent.Handled; } - _audio.PlayPredicted(action.Sound, performer,predicted ? performer : null); - handled |= action.Sound != null; - if (!handled) return; // no interaction occurred. - // reduce charges, start cooldown, and mark as dirty (if required). + // play sound, reduce charges, start cooldown, and mark as dirty (if required). + + _audio.PlayPredicted(action.Sound, performer,predicted ? performer : null); var dirty = toggledBefore == action.Toggled; @@ -564,6 +594,9 @@ public void PerformAction(EntityUid performer, ActionsComponent? component, Enti if (dirty && component != null) Dirty(performer, component); + + var ev = new ActionPerformedEvent(performer); + RaiseLocalEvent(actionId, ref ev); } #endregion diff --git a/Content.Shared/Administration/AdminFlags.cs b/Content.Shared/Administration/AdminFlags.cs index 9842e638c2c..71a08a70dbf 100644 --- a/Content.Shared/Administration/AdminFlags.cs +++ b/Content.Shared/Administration/AdminFlags.cs @@ -100,6 +100,16 @@ public enum AdminFlags : uint /// Stealth = 1 << 16, + /// + /// Allows you to use Admin chat + /// + Adminchat = 1 << 17, + + /// + /// Permits the visibility of Pii in game and on SS14 Admin + /// + Pii = 1 << 18, + /// /// DeltaV - The ability to whitelist people. Either this permission or +BAN is required for remove. /// diff --git a/Content.Shared/Administration/Components/SharedHeadstandComponent.cs b/Content.Shared/Administration/Components/SharedHeadstandComponent.cs index ebc23c7b053..96a4dfc2ddd 100644 --- a/Content.Shared/Administration/Components/SharedHeadstandComponent.cs +++ b/Content.Shared/Administration/Components/SharedHeadstandComponent.cs @@ -1,6 +1,9 @@ -namespace Content.Shared.Administration.Components; +using Robust.Shared.GameStates; + +namespace Content.Shared.Administration.Components; /// /// Flips the target's sprite on it's head, so they do a headstand. /// +[NetworkedComponent] public abstract partial class SharedHeadstandComponent : Component { } diff --git a/Content.Shared/Administration/Components/SharedKillSignComponent.cs b/Content.Shared/Administration/Components/SharedKillSignComponent.cs index 2e6d54ca884..9a95454f721 100644 --- a/Content.Shared/Administration/Components/SharedKillSignComponent.cs +++ b/Content.Shared/Administration/Components/SharedKillSignComponent.cs @@ -1,5 +1,8 @@ -namespace Content.Shared.Administration.Components; +using Robust.Shared.GameStates; +namespace Content.Shared.Administration.Components; + +[NetworkedComponent] public abstract partial class SharedKillSignComponent : Component { diff --git a/Content.Shared/Administration/JobWhitelistsEuiState.cs b/Content.Shared/Administration/JobWhitelistsEuiState.cs new file mode 100644 index 00000000000..e993ab3aa56 --- /dev/null +++ b/Content.Shared/Administration/JobWhitelistsEuiState.cs @@ -0,0 +1,35 @@ +using Content.Shared.Eui; +using Content.Shared.Roles; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; + +namespace Content.Shared.Administration; + +[Serializable, NetSerializable] +public sealed class JobWhitelistsEuiState : EuiStateBase +{ + public string PlayerName; + public HashSet> Whitelists; + + public JobWhitelistsEuiState(string playerName, HashSet> whitelists) + { + PlayerName = playerName; + Whitelists = whitelists; + } +} + +/// +/// Tries to add or remove a whitelist of a job for a player. +/// +[Serializable, NetSerializable] +public sealed class SetJobWhitelistedMessage : EuiMessageBase +{ + public ProtoId Job; + public bool Whitelisting; + + public SetJobWhitelistedMessage(ProtoId job, bool whitelisting) + { + Job = job; + Whitelisting = whitelisting; + } +} diff --git a/Content.Shared/Alert/AlertType.cs b/Content.Shared/Alert/AlertType.cs index b447d84161f..4b1be612054 100644 --- a/Content.Shared/Alert/AlertType.cs +++ b/Content.Shared/Alert/AlertType.cs @@ -25,6 +25,7 @@ public enum AlertType : byte HumanHealth, BorgBattery, BorgBatteryNone, + NightVision, // Mood Bleeding, @@ -71,7 +72,8 @@ public enum AlertType : byte BorgCrit, BorgDead, Offer, - NightVision + ShadowkinPower, + Deflecting, } } diff --git a/Content.Shared/Announcements/Prototypes/AnnouncerPrototype.cs b/Content.Shared/Announcements/Prototypes/AnnouncerPrototype.cs index 42db148df9c..1cb9ba085f6 100644 --- a/Content.Shared/Announcements/Prototypes/AnnouncerPrototype.cs +++ b/Content.Shared/Announcements/Prototypes/AnnouncerPrototype.cs @@ -7,7 +7,7 @@ namespace Content.Shared.Announcements.Prototypes; /// Defines an announcer and their announcement file paths /// [Prototype("announcer")] -public sealed class AnnouncerPrototype : IPrototype +public sealed partial class AnnouncerPrototype : IPrototype { [IdDataField] public string ID { get; } = default!; diff --git a/Content.Shared/Anomaly/SharedAnomalySystem.cs b/Content.Shared/Anomaly/SharedAnomalySystem.cs index da1d31c6ff6..ccc8b7bc5c6 100644 --- a/Content.Shared/Anomaly/SharedAnomalySystem.cs +++ b/Content.Shared/Anomaly/SharedAnomalySystem.cs @@ -368,14 +368,14 @@ public override void Update(float frameTime) /// /// Gets random points around the anomaly based on the given parameters. /// - public List? GetSpawningPoints(EntityUid uid, float stability, float severity, AnomalySpawnSettings settings, float powerModifier = 1f) + public List? GetSpawningPoints(EntityUid uid, float stability, float severity, AnomalySpawnSettings settings, float powerModifier = 1f, float minAmountOffset = 0, float maxAmountOffset = 0) { var xform = Transform(uid); if (!TryComp(xform.GridUid, out var grid)) return null; - var amount = (int) (MathHelper.Lerp(settings.MinAmount, settings.MaxAmount, severity * stability * powerModifier) + 0.5f); + var amount = (int) MathF.Round(MathHelper.Lerp(settings.MinAmount + minAmountOffset, settings.MaxAmount + maxAmountOffset, severity * stability * powerModifier) + 0.5f); var localpos = xform.Coordinates.Position; var tilerefs = grid.GetLocalTilesIntersecting( diff --git a/Content.Shared/Armor/AllowSuitStorageComponent.cs b/Content.Shared/Armor/AllowSuitStorageComponent.cs new file mode 100644 index 00000000000..aa7bce1c873 --- /dev/null +++ b/Content.Shared/Armor/AllowSuitStorageComponent.cs @@ -0,0 +1,10 @@ +namespace Content.Shared.Armor; + +/// +/// Used on outerclothing to allow use of suit storage +/// +[RegisterComponent] +public sealed partial class AllowSuitStorageComponent : Component +{ + +} diff --git a/Content.Shared/Atmos/AtmosDirection.cs b/Content.Shared/Atmos/AtmosDirection.cs index 09ba521aa96..a8155ef88d7 100644 --- a/Content.Shared/Atmos/AtmosDirection.cs +++ b/Content.Shared/Atmos/AtmosDirection.cs @@ -104,15 +104,14 @@ public static Angle ToAngle(this AtmosDirection direction) { return direction switch { - AtmosDirection.East => Angle.FromDegrees(90), - AtmosDirection.North => Angle.FromDegrees(180), - AtmosDirection.West => Angle.FromDegrees(270), - AtmosDirection.South => Angle.FromDegrees(0), - - AtmosDirection.NorthEast => Angle.FromDegrees(135), - AtmosDirection.NorthWest => Angle.FromDegrees(205), - AtmosDirection.SouthWest => Angle.FromDegrees(315), - AtmosDirection.SouthEast => Angle.FromDegrees(45), + AtmosDirection.South => Angle.Zero, + AtmosDirection.East => new Angle(MathHelper.PiOver2), + AtmosDirection.North => new Angle(Math.PI), + AtmosDirection.West => new Angle(-MathHelper.PiOver2), + AtmosDirection.NorthEast => new Angle(Math.PI*3/4), + AtmosDirection.NorthWest => new Angle(-Math.PI*3/4), + AtmosDirection.SouthWest => new Angle(-MathHelper.PiOver4), + AtmosDirection.SouthEast => new Angle(MathHelper.PiOver4), _ => throw new ArgumentOutOfRangeException(nameof(direction), $"It was {direction}."), }; diff --git a/Content.Shared/Atmos/Components/GasAnalyzerComponent.cs b/Content.Shared/Atmos/Components/GasAnalyzerComponent.cs index 51ae8cc7406..dec9516c013 100644 --- a/Content.Shared/Atmos/Components/GasAnalyzerComponent.cs +++ b/Content.Shared/Atmos/Components/GasAnalyzerComponent.cs @@ -56,13 +56,15 @@ public struct GasMixEntry /// Name of the tab in the UI /// public readonly string Name; + public readonly float Volume; public readonly float Pressure; public readonly float Temperature; public readonly GasEntry[]? Gases; - public GasMixEntry(string name, float pressure, float temperature, GasEntry[]? gases = null) + public GasMixEntry(string name, float volume, float pressure, float temperature, GasEntry[]? gases = null) { Name = name; + Volume = volume; Pressure = pressure; Temperature = temperature; Gases = gases; diff --git a/Content.Shared/Atmos/Components/GasTileOverlayComponent.cs b/Content.Shared/Atmos/Components/GasTileOverlayComponent.cs index e72a1d67584..2c3149b11a8 100644 --- a/Content.Shared/Atmos/Components/GasTileOverlayComponent.cs +++ b/Content.Shared/Atmos/Components/GasTileOverlayComponent.cs @@ -1,7 +1,6 @@ using Robust.Shared.GameStates; using Robust.Shared.Serialization; using Robust.Shared.Timing; -using Robust.Shared.Utility; namespace Content.Shared.Atmos.Components; @@ -24,55 +23,47 @@ public sealed partial class GasTileOverlayComponent : Component public GameTick ForceTick { get; set; } } - [Serializable, NetSerializable] -public sealed class GasTileOverlayState : ComponentState, IComponentDeltaState +public sealed class GasTileOverlayState(Dictionary chunks) : ComponentState { - public readonly Dictionary Chunks; - public bool FullState => AllChunks == null; - - // required to infer deleted/missing chunks for delta states - public HashSet? AllChunks; + public readonly Dictionary Chunks = chunks; +} - public GasTileOverlayState(Dictionary chunks) - { - Chunks = chunks; - } +[Serializable, NetSerializable] +public sealed class GasTileOverlayDeltaState( + Dictionary modifiedChunks, + HashSet allChunks) + : ComponentState, IComponentDeltaState +{ + public readonly Dictionary ModifiedChunks = modifiedChunks; + public readonly HashSet AllChunks = allChunks; - public void ApplyToFullState(IComponentState fullState) + public void ApplyToFullState(GasTileOverlayState state) { - DebugTools.Assert(!FullState); - var state = (GasTileOverlayState) fullState; - DebugTools.Assert(state.FullState); - foreach (var key in state.Chunks.Keys) { - if (!AllChunks!.Contains(key)) + if (!AllChunks.Contains(key)) state.Chunks.Remove(key); } - foreach (var (chunk, data) in Chunks) + foreach (var (chunk, data) in ModifiedChunks) { state.Chunks[chunk] = new(data); } } - public IComponentState CreateNewFullState(IComponentState fullState) + public GasTileOverlayState CreateNewFullState(GasTileOverlayState state) { - DebugTools.Assert(!FullState); - var state = (GasTileOverlayState) fullState; - DebugTools.Assert(state.FullState); - - var chunks = new Dictionary(state.Chunks.Count); + var chunks = new Dictionary(AllChunks.Count); - foreach (var (chunk, data) in Chunks) + foreach (var (chunk, data) in ModifiedChunks) { chunks[chunk] = new(data); } foreach (var (chunk, data) in state.Chunks) { - if (AllChunks!.Contains(chunk)) + if (AllChunks.Contains(chunk)) chunks.TryAdd(chunk, new(data)); } diff --git a/Content.Shared/Atmos/Consoles/Components/AtmosAlertsComputerComponent.cs b/Content.Shared/Atmos/Consoles/Components/AtmosAlertsComputerComponent.cs new file mode 100644 index 00000000000..d64c8907afb --- /dev/null +++ b/Content.Shared/Atmos/Consoles/Components/AtmosAlertsComputerComponent.cs @@ -0,0 +1,235 @@ +using Content.Shared.Atmos.Consoles; +using Content.Shared.Atmos.Monitor; +using Robust.Shared.GameStates; +using Robust.Shared.Map; +using Robust.Shared.Serialization; + +namespace Content.Shared.Atmos.Components; + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +[Access(typeof(SharedAtmosAlertsComputerSystem))] +public sealed partial class AtmosAlertsComputerComponent : Component +{ + /// + /// The current entity of interest (selected via the console UI) + /// + [ViewVariables] + public NetEntity? FocusDevice; + + /// + /// A list of all the atmos devices that will be used to populate the nav map + /// + [ViewVariables, AutoNetworkedField] + public HashSet AtmosDevices = new(); + + /// + /// A list of all the air alarms that have had their alerts silenced on this particular console + /// + [ViewVariables, AutoNetworkedField] + public HashSet SilencedDevices = new(); +} + +[Serializable, NetSerializable] +public struct AtmosAlertsDeviceNavMapData +{ + /// + /// The entity in question + /// + public NetEntity NetEntity; + + /// + /// Location of the entity + /// + public NetCoordinates NetCoordinates; + + /// + /// Used to determine what map icons to use + /// + public AtmosAlertsComputerGroup Group; + + /// + /// Populate the atmos monitoring console nav map with a single entity + /// + public AtmosAlertsDeviceNavMapData(NetEntity netEntity, NetCoordinates netCoordinates, AtmosAlertsComputerGroup group) + { + NetEntity = netEntity; + NetCoordinates = netCoordinates; + Group = group; + } +} + +[Serializable, NetSerializable] +public struct AtmosAlertsFocusDeviceData +{ + /// + /// Focus entity + /// + public NetEntity NetEntity; + + /// + /// Temperature (K) and related alert state + /// + public (float, AtmosAlarmType) TemperatureData; + + /// + /// Pressure (kPA) and related alert state + /// + public (float, AtmosAlarmType) PressureData; + + /// + /// Moles, percentage, and related alert state, for all detected gases + /// + public Dictionary GasData; + + /// + /// Populates the atmos monitoring console focus entry with atmospheric data + /// + public AtmosAlertsFocusDeviceData + (NetEntity netEntity, + (float, AtmosAlarmType) temperatureData, + (float, AtmosAlarmType) pressureData, + Dictionary gasData) + { + NetEntity = netEntity; + TemperatureData = temperatureData; + PressureData = pressureData; + GasData = gasData; + } +} + +[Serializable, NetSerializable] +public sealed class AtmosAlertsComputerBoundInterfaceState : BoundUserInterfaceState +{ + /// + /// A list of all air alarms + /// + public AtmosAlertsComputerEntry[] AirAlarms; + + /// + /// A list of all fire alarms + /// + public AtmosAlertsComputerEntry[] FireAlarms; + + /// + /// Data for the UI focus (if applicable) + /// + public AtmosAlertsFocusDeviceData? FocusData; + + /// + /// Sends data from the server to the client to populate the atmos monitoring console UI + /// + public AtmosAlertsComputerBoundInterfaceState(AtmosAlertsComputerEntry[] airAlarms, AtmosAlertsComputerEntry[] fireAlarms, AtmosAlertsFocusDeviceData? focusData) + { + AirAlarms = airAlarms; + FireAlarms = fireAlarms; + FocusData = focusData; + } +} + +[Serializable, NetSerializable] +public struct AtmosAlertsComputerEntry +{ + /// + /// The entity in question + /// + public NetEntity NetEntity; + + /// + /// Location of the entity + /// + public NetCoordinates Coordinates; + + /// + /// The type of entity + /// + public AtmosAlertsComputerGroup Group; + + /// + /// Current alarm state + /// + public AtmosAlarmType AlarmState; + + /// + /// Localised device name + /// + public string EntityName; + + /// + /// Device network address + /// + public string Address; + + /// + /// Used to populate the atmos monitoring console UI with data from a single air alarm + /// + public AtmosAlertsComputerEntry + (NetEntity entity, + NetCoordinates coordinates, + AtmosAlertsComputerGroup group, + AtmosAlarmType alarmState, + string entityName, + string address) + { + NetEntity = entity; + Coordinates = coordinates; + Group = group; + AlarmState = alarmState; + EntityName = entityName; + Address = address; + } +} + +[Serializable, NetSerializable] +public sealed class AtmosAlertsComputerFocusChangeMessage : BoundUserInterfaceMessage +{ + public NetEntity? FocusDevice; + + /// + /// Used to inform the server that the specified focus for the atmos monitoring console has been changed by the client + /// + public AtmosAlertsComputerFocusChangeMessage(NetEntity? focusDevice) + { + FocusDevice = focusDevice; + } +} + +[Serializable, NetSerializable] +public sealed class AtmosAlertsComputerDeviceSilencedMessage : BoundUserInterfaceMessage +{ + public NetEntity AtmosDevice; + public bool SilenceDevice = true; + + /// + /// Used to inform the server that the client has silenced alerts from the specified device to this atmos monitoring console + /// + public AtmosAlertsComputerDeviceSilencedMessage(NetEntity atmosDevice, bool silenceDevice = true) + { + AtmosDevice = atmosDevice; + SilenceDevice = silenceDevice; + } +} + +/// +/// List of all the different atmos device groups +/// +public enum AtmosAlertsComputerGroup +{ + Invalid, + AirAlarm, + FireAlarm, +} + +[NetSerializable, Serializable] +public enum AtmosAlertsComputerVisuals +{ + ComputerLayerScreen, +} + +/// +/// UI key associated with the atmos monitoring console +/// +[Serializable, NetSerializable] +public enum AtmosAlertsComputerUiKey +{ + Key +} diff --git a/Content.Shared/Atmos/Consoles/Components/AtmosAlertsDeviceComponent.cs b/Content.Shared/Atmos/Consoles/Components/AtmosAlertsDeviceComponent.cs new file mode 100644 index 00000000000..881d60b084c --- /dev/null +++ b/Content.Shared/Atmos/Consoles/Components/AtmosAlertsDeviceComponent.cs @@ -0,0 +1,14 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Atmos.Components; + +[RegisterComponent, NetworkedComponent] +[Access([])] +public sealed partial class AtmosAlertsDeviceComponent : Component +{ + /// + /// The group that the entity belongs to + /// + [DataField, ViewVariables] + public AtmosAlertsComputerGroup Group; +} diff --git a/Content.Shared/Atmos/Consoles/SharedAtmosAlertsComputerSystem.cs b/Content.Shared/Atmos/Consoles/SharedAtmosAlertsComputerSystem.cs new file mode 100644 index 00000000000..7e2b2b04670 --- /dev/null +++ b/Content.Shared/Atmos/Consoles/SharedAtmosAlertsComputerSystem.cs @@ -0,0 +1,24 @@ +using Content.Shared.Atmos.Components; + +namespace Content.Shared.Atmos.Consoles; + +public abstract partial class SharedAtmosAlertsComputerSystem : EntitySystem +{ + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnDeviceSilencedMessage); + } + + private void OnDeviceSilencedMessage(EntityUid uid, AtmosAlertsComputerComponent component, AtmosAlertsComputerDeviceSilencedMessage args) + { + if (args.SilenceDevice) + component.SilencedDevices.Add(args.AtmosDevice); + + else + component.SilencedDevices.Remove(args.AtmosDevice); + + Dirty(uid, component); + } +} diff --git a/Content.Shared/Atmos/EntitySystems/SharedGasTileOverlaySystem.cs b/Content.Shared/Atmos/EntitySystems/SharedGasTileOverlaySystem.cs index f468724db33..8e7dfdedaf9 100644 --- a/Content.Shared/Atmos/EntitySystems/SharedGasTileOverlaySystem.cs +++ b/Content.Shared/Atmos/EntitySystems/SharedGasTileOverlaySystem.cs @@ -55,7 +55,7 @@ private void OnGetState(EntityUid uid, GasTileOverlayComponent component, ref Co data[index] = chunk; } - args.State = new GasTileOverlayState(data) { AllChunks = new(component.Chunks.Keys) }; + args.State = new GasTileOverlayDeltaState(data, new(component.Chunks.Keys)); } public static Vector2i GetGasChunkIndices(Vector2i indices) diff --git a/Content.Server/Atmos/GasMixture.cs b/Content.Shared/Atmos/GasMixture.cs similarity index 98% rename from Content.Server/Atmos/GasMixture.cs rename to Content.Shared/Atmos/GasMixture.cs index 3d73a4d0b16..a676ed67204 100644 --- a/Content.Server/Atmos/GasMixture.cs +++ b/Content.Shared/Atmos/GasMixture.cs @@ -1,13 +1,12 @@ using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Runtime.CompilerServices; -using Content.Server.Atmos.Reactions; -using Content.Shared.Atmos; using Content.Shared.Atmos.EntitySystems; +using Content.Shared.Atmos.Reactions; using Robust.Shared.Serialization; using Robust.Shared.Utility; -namespace Content.Server.Atmos +namespace Content.Shared.Atmos { /// /// A general-purpose, variable volume gas mixture. diff --git a/Content.Shared/Atmos/GasMixtureStringRepresentation.cs b/Content.Shared/Atmos/GasMixtureStringRepresentation.cs new file mode 100644 index 00000000000..942b2bdc672 --- /dev/null +++ b/Content.Shared/Atmos/GasMixtureStringRepresentation.cs @@ -0,0 +1,16 @@ +namespace Content.Shared.Atmos; + +public readonly record struct GasMixtureStringRepresentation(float TotalMoles, float Temperature, float Pressure, Dictionary MolesPerGas) : IFormattable +{ + public override string ToString() + { + return $"{Temperature}K {Pressure} kPa"; + } + + public string ToString(string? format, IFormatProvider? formatProvider) + { + return ToString(); + } + + public static implicit operator string(GasMixtureStringRepresentation rep) => rep.ToString(); +} diff --git a/Content.Shared/Atmos/GetFireProtectionEvent.cs b/Content.Shared/Atmos/GetFireProtectionEvent.cs new file mode 100644 index 00000000000..e243295449a --- /dev/null +++ b/Content.Shared/Atmos/GetFireProtectionEvent.cs @@ -0,0 +1,33 @@ +using Content.Shared.Inventory; + +namespace Content.Shared.Atmos; + +/// +/// Raised on a burning entity to check its fire protection. +/// Damage taken is multiplied by the final amount, but not temperature. +/// TemperatureProtection is needed for that. +/// +[ByRefEvent] +public sealed class GetFireProtectionEvent : EntityEventArgs, IInventoryRelayEvent +{ + public SlotFlags TargetSlots { get; } = ~SlotFlags.POCKET; + + /// + /// What to multiply the fire damage by. + /// If this is 0 then it's ignored + /// + public float Multiplier; + + public GetFireProtectionEvent() + { + Multiplier = 1f; + } + + /// + /// Reduce fire damage taken by a percentage. + /// + public void Reduce(float by) + { + Multiplier -= by; + } +} diff --git a/Content.Shared/Atmos/Reactions/GasReactionEnums.cs b/Content.Shared/Atmos/Reactions/GasReactionEnums.cs new file mode 100644 index 00000000000..73b8998d409 --- /dev/null +++ b/Content.Shared/Atmos/Reactions/GasReactionEnums.cs @@ -0,0 +1,14 @@ +namespace Content.Shared.Atmos.Reactions; + +[Flags] +public enum ReactionResult : byte +{ + NoReaction = 0, + Reacting = 1, + StopReactions = 2, +} + +public enum GasReaction : byte +{ + Fire = 0, +} diff --git a/Content.Shared/Audio/Jukebox/JukeboxPrototype.cs b/Content.Shared/Audio/Jukebox/JukeboxPrototype.cs index 256f22f2a6e..ad690ef4973 100644 --- a/Content.Shared/Audio/Jukebox/JukeboxPrototype.cs +++ b/Content.Shared/Audio/Jukebox/JukeboxPrototype.cs @@ -7,7 +7,7 @@ namespace Content.Shared.Audio.Jukebox; /// Soundtrack that's visible on the jukebox list. /// [Prototype] -public sealed class JukeboxPrototype : IPrototype +public sealed partial class JukeboxPrototype : IPrototype { [IdDataField] public string ID { get; } = string.Empty; diff --git a/Content.Shared/Bed/Sleep/SharedSleepingSystem.cs b/Content.Shared/Bed/Sleep/SharedSleepingSystem.cs index c6248c88f77..aa5578a3a98 100644 --- a/Content.Shared/Bed/Sleep/SharedSleepingSystem.cs +++ b/Content.Shared/Bed/Sleep/SharedSleepingSystem.cs @@ -31,6 +31,8 @@ public override void Initialize() private void OnMapInit(EntityUid uid, SleepingComponent component, MapInitEvent args) { + component.SleepingSince = _gameTiming.CurTime; + var ev = new SleepStateChangedEvent(true); RaiseLocalEvent(uid, ev); _blindableSystem.UpdateIsBlind(uid); @@ -43,7 +45,10 @@ private void OnMapInit(EntityUid uid, SleepingComponent component, MapInitEvent private void OnShutdown(EntityUid uid, SleepingComponent component, ComponentShutdown args) { _actionsSystem.RemoveAction(uid, component.WakeAction); - var ev = new SleepStateChangedEvent(false); + var ev = new SleepStateChangedEvent(false) + { + TimeSlept = _gameTiming.CurTime - component.SleepingSince + }; RaiseLocalEvent(uid, ev); _blindableSystem.UpdateIsBlind(uid); } @@ -85,6 +90,11 @@ public sealed class SleepStateChangedEvent : EntityEventArgs { public bool FellAsleep = false; + /// + /// The amount of time this entity slept for. Null if is true. + /// + public TimeSpan? TimeSlept; + public SleepStateChangedEvent(bool fellAsleep) { FellAsleep = fellAsleep; diff --git a/Content.Shared/Bed/Sleep/SleepingComponent.cs b/Content.Shared/Bed/Sleep/SleepingComponent.cs index cd468440f40..e87aca2203b 100644 --- a/Content.Shared/Bed/Sleep/SleepingComponent.cs +++ b/Content.Shared/Bed/Sleep/SleepingComponent.cs @@ -28,4 +28,10 @@ public sealed partial class SleepingComponent : Component public TimeSpan CoolDownEnd; [DataField("wakeAction")] public EntityUid? WakeAction; + + /// + /// The moment this entity went to sleep. Initialized on MapInit. + /// + [DataField] + public TimeSpan SleepingSince; } diff --git a/Content.Shared/Body/Prototypes/BodyPrototypeSerializer.cs b/Content.Shared/Body/Prototypes/BodyPrototypeSerializer.cs index e2b54bf951e..ae099767049 100644 --- a/Content.Shared/Body/Prototypes/BodyPrototypeSerializer.cs +++ b/Content.Shared/Body/Prototypes/BodyPrototypeSerializer.cs @@ -182,7 +182,7 @@ public BodyPrototype Read(ISerializationManager serializationManager, MappingDat foreach (var (slotId, (part, connections, organs)) in allConnections) { - var slot = new BodyPrototypeSlot(part != null ? new EntProtoId(part) : null!, connections ?? new HashSet(), organs ?? new Dictionary()); + var slot = new BodyPrototypeSlot(part, connections ?? new HashSet(), organs ?? new Dictionary()); slots.Add(slotId, slot); } diff --git a/Content.Shared/Body/Prototypes/MetabolismGroupPrototype.cs b/Content.Shared/Body/Prototypes/MetabolismGroupPrototype.cs index 162b5f2d6c2..82f4e70ce0c 100644 --- a/Content.Shared/Body/Prototypes/MetabolismGroupPrototype.cs +++ b/Content.Shared/Body/Prototypes/MetabolismGroupPrototype.cs @@ -1,4 +1,4 @@ -using Robust.Shared.Prototypes; +using Robust.Shared.Prototypes; namespace Content.Shared.Body.Prototypes { @@ -7,5 +7,11 @@ public sealed partial class MetabolismGroupPrototype : IPrototype { [IdDataField] public string ID { get; private set; } = default!; + + [DataField("name", required: true)] + private LocId Name { get; set; } + + [ViewVariables(VVAccess.ReadOnly)] + public string LocalizedName => Loc.GetString(Name); } } diff --git a/Content.Shared/Body/Prototypes/MetabolizerTypePrototype.cs b/Content.Shared/Body/Prototypes/MetabolizerTypePrototype.cs index c840983ca0c..5273ac722b2 100644 --- a/Content.Shared/Body/Prototypes/MetabolizerTypePrototype.cs +++ b/Content.Shared/Body/Prototypes/MetabolizerTypePrototype.cs @@ -1,4 +1,4 @@ -using Robust.Shared.Prototypes; +using Robust.Shared.Prototypes; namespace Content.Shared.Body.Prototypes { @@ -9,6 +9,9 @@ public sealed partial class MetabolizerTypePrototype : IPrototype public string ID { get; private set; } = default!; [DataField("name", required: true)] - public string Name { get; private set; } = default!; + private LocId Name { get; set; } + + [ViewVariables(VVAccess.ReadOnly)] + public string LocalizedName => Loc.GetString(Name); } } diff --git a/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs b/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs index bc039c03e65..c07d90b3a2b 100644 --- a/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs +++ b/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs @@ -61,7 +61,7 @@ private void OnBuckleMove(EntityUid uid, BuckleComponent component, ref MoveEven return; var strapPosition = Transform(strapUid).Coordinates; - if (ev.NewPosition.InRange(EntityManager, _transform, strapPosition, strapComp.MaxBuckleDistance)) + if (ev.NewPosition.EntityId.IsValid() && ev.NewPosition.InRange(EntityManager, _transform, strapPosition, strapComp.MaxBuckleDistance)) return; TryUnbuckle(uid, uid, true, component); diff --git a/Content.Shared/CCVar/CCVars.cs b/Content.Shared/CCVar/CCVars.cs index c64310fd7ec..cd1e63e6a4a 100644 --- a/Content.Shared/CCVar/CCVars.cs +++ b/Content.Shared/CCVar/CCVars.cs @@ -1,6 +1,8 @@ +using Content.Shared.Maps; using Content.Shared.Supermatter.Components; using Robust.Shared; using Robust.Shared.Configuration; +using Robust.Shared.Physics.Components; namespace Content.Shared.CCVar { @@ -222,6 +224,13 @@ public static readonly CVarDef public static readonly CVarDef GameMap = CVarDef.Create("game.map", string.Empty, CVar.SERVERONLY); + /// + /// If roles should be restricted based on whether or not they are whitelisted. + /// + public static readonly CVarDef + GameRoleWhitelist = CVarDef.Create("game.role_whitelist", true, CVar.SERVER | CVar.REPLICATED); + + /// /// Controls whether to use world persistence or not. /// @@ -583,6 +592,12 @@ public static readonly CVarDef public static readonly CVarDef LoginTipsDataset = CVarDef.Create("tips.login_dataset", "Tips"); + /// + /// The chance for Tippy to replace a normal tip message. + /// + public static readonly CVarDef TipsTippyChance = + CVarDef.Create("tips.tippy_chance", 0.01f); + /* * Console */ @@ -771,7 +786,6 @@ public static readonly CVarDef public static readonly CVarDef OfferModeIndicatorsPointShow = CVarDef.Create("hud.offer_mode_indicators_point_show", true, CVar.ARCHIVE | CVar.CLIENTONLY); - public static readonly CVarDef LoocAboveHeadShow = CVarDef.Create("hud.show_looc_above_head", true, CVar.ARCHIVE | CVar.CLIENTONLY); @@ -860,19 +874,43 @@ public static readonly CVarDef /// Default severity for role bans /// public static readonly CVarDef RoleBanDefaultSeverity = - CVarDef.Create("admin.role_ban_default_severity", "medium", CVar.ARCHIVE | CVar.SERVER); + CVarDef.Create("admin.role_ban_default_severity", "medium", CVar.ARCHIVE | CVar.SERVER | CVar.REPLICATED); /// /// Default severity for department bans /// public static readonly CVarDef DepartmentBanDefaultSeverity = - CVarDef.Create("admin.department_ban_default_severity", "medium", CVar.ARCHIVE | CVar.SERVER); + CVarDef.Create("admin.department_ban_default_severity", "medium", CVar.ARCHIVE | CVar.SERVER | CVar.REPLICATED); /// /// Default severity for server bans /// public static readonly CVarDef ServerBanDefaultSeverity = - CVarDef.Create("admin.server_ban_default_severity", "High", CVar.ARCHIVE | CVar.SERVER); + CVarDef.Create("admin.server_ban_default_severity", "High", CVar.ARCHIVE | CVar.SERVER | CVar.REPLICATED); + + /// + /// Whether a server ban will ban the player's ip by default. + /// + public static readonly CVarDef ServerBanIpBanDefault = + CVarDef.Create("admin.server_ban_ip_ban_default", true, CVar.ARCHIVE | CVar.SERVER | CVar.REPLICATED); + + /// + /// Whether a server ban will ban the player's hardware id by default. + /// + public static readonly CVarDef ServerBanHwidBanDefault = + CVarDef.Create("admin.server_ban_hwid_ban_default", true, CVar.ARCHIVE | CVar.SERVER | CVar.REPLICATED); + + /// + /// Whether to use details from last connection for ip/hwid in the BanPanel. + /// + public static readonly CVarDef ServerBanUseLastDetails = + CVarDef.Create("admin.server_ban_use_last_details", true, CVar.ARCHIVE | CVar.SERVER | CVar.REPLICATED); + + /// + /// Whether to erase a player's chat messages and their entity from the game when banned. + /// + public static readonly CVarDef ServerBanErasePlayer = + CVarDef.Create("admin.server_ban_erase_player", false, CVar.ARCHIVE | CVar.SERVER | CVar.REPLICATED); /// /// Minimum explosion intensity to create an admin alert message. -1 to disable the alert. @@ -1017,6 +1055,13 @@ public static readonly CVarDef public static readonly CVarDef ExplosionSingleTickAreaLimit = CVarDef.Create("explosion.single_tick_area_limit", 400, CVar.SERVERONLY); + /// + /// Whether or not explosions are allowed to create tiles that have + /// set to true. + /// + public static readonly CVarDef ExplosionCanCreateVacuum = + CVarDef.Create("explosion.can_create_vacuum", true, CVar.SERVERONLY); + /* * Radiation */ @@ -1319,6 +1364,7 @@ public static readonly CVarDef public static readonly CVarDef ShowOocPatronColor = CVarDef.Create("ooc.show_ooc_patron_color", true, CVar.ARCHIVE | CVar.REPLICATED | CVar.CLIENT); + /* * LOOC */ @@ -1498,7 +1544,7 @@ public static readonly CVarDef /// Whether the arrivals shuttle is enabled. /// public static readonly CVarDef ArrivalsShuttles = - CVarDef.Create("shuttle.arrivals", false, CVar.SERVERONLY); + CVarDef.Create("shuttle.arrivals", true, CVar.SERVERONLY); /// /// The map to use for the arrivals station. @@ -1512,6 +1558,18 @@ public static readonly CVarDef public static readonly CVarDef ArrivalsCooldown = CVarDef.Create("shuttle.arrivals_cooldown", 50f, CVar.SERVERONLY); + /// + /// Time it takes the shuttle to spin up it's hyper drive and jump + /// + public static readonly CVarDef ArrivalsStartupTime= + CVarDef.Create("shuttle.arrivals_startup_time", 5.5f, CVar.SERVERONLY); + + /// + /// Time spent in hyperspace + /// + public static readonly CVarDef ArrivalsHyperspaceTime = + CVarDef.Create("shuttle.arrivals_hyperspace_time", 20f, CVar.SERVERONLY); + /// /// Are players allowed to return on the arrivals shuttle. /// @@ -1524,6 +1582,49 @@ public static readonly CVarDef public static readonly CVarDef GridFill = CVarDef.Create("shuttle.grid_fill", true, CVar.SERVERONLY); + /// + /// Whether to automatically preloading grids by GridPreloaderSystem + /// + public static readonly CVarDef PreloadGrids = + CVarDef.Create("shuttle.preload_grids", true, CVar.SERVERONLY); + + /// + /// How long the warmup time before FTL start should be. + /// + public static readonly CVarDef FTLStartupTime = + CVarDef.Create("shuttle.startup_time", 5.5f, CVar.SERVERONLY); + + /// + /// How long a shuttle spends in FTL. + /// + public static readonly CVarDef FTLTravelTime = + CVarDef.Create("shuttle.travel_time", 20f, CVar.SERVERONLY); + + /// + /// How long the final stage of FTL before arrival should be. + /// + public static readonly CVarDef FTLArrivalTime = + CVarDef.Create("shuttle.arrival_time", 5f, CVar.SERVERONLY); + + /// + /// How much time needs to pass before a shuttle can FTL again. + /// + public static readonly CVarDef FTLCooldown = + CVarDef.Create("shuttle.cooldown", 10f, CVar.SERVERONLY); + + /// + /// The maximum a grid can have before it becomes unable to FTL. + /// Any value equal to or less than zero will disable this check. + /// + public static readonly CVarDef FTLMassLimit = + CVarDef.Create("shuttle.mass_limit", 300f, CVar.SERVERONLY); + + /// + /// How long to knock down entities for if they aren't buckled when FTL starts and stops. + /// + public static readonly CVarDef HyperspaceKnockdownTime = + CVarDef.Create("shuttle.hyperspace_knockdown_time", 5f, CVar.SERVERONLY); + /* * Emergency */ @@ -1548,6 +1649,7 @@ public static readonly CVarDef /// /// The minimum time for the emergency shuttle to arrive at centcomm. + /// Actual minimum travel time cannot be less than /// public static readonly CVarDef EmergencyShuttleMinTransitTime = CVarDef.Create("shuttle.emergency_transit_time_min", 90f, CVar.SERVERONLY); @@ -1703,6 +1805,9 @@ public static readonly CVarDef public static readonly CVarDef ViewportWidth = CVarDef.Create("viewport.width", 21, CVar.CLIENTONLY | CVar.ARCHIVE); + public static readonly CVarDef ViewportVerticalFit = + CVarDef.Create("viewport.vertical_fit", true, CVar.CLIENTONLY | CVar.ARCHIVE); + /* * FOV */ @@ -1770,6 +1875,12 @@ public static readonly CVarDef public static readonly CVarDef AccessibilityColorblindFriendly = CVarDef.Create("accessibility.colorblind_friendly", false, CVar.CLIENTONLY | CVar.ARCHIVE); + /// + /// Disables all vision filters for species like Vulpkanin or Harpies. There are good reasons someone might want to disable these. + /// + public static readonly CVarDef NoVisionFilters = + CVarDef.Create("accessibility.no_vision_filters", false, CVar.CLIENTONLY | CVar.ARCHIVE); + /* * CHAT */ @@ -1890,6 +2001,12 @@ public static readonly CVarDef public static readonly CVarDef ICShowSSDIndicator = CVarDef.Create("ic.show_ssd_indicator", true, CVar.CLIENTONLY); + /// + /// Allow Ethereal Ent to PassThrough Walls/Objects while in Ethereal. + /// + public static readonly CVarDef EtherealPassThrough = + CVarDef.Create("ic.EtherealPassThrough", false, CVar.SERVER); + /* * Salvage */ @@ -1945,13 +2062,13 @@ public static readonly CVarDef */ /// - /// Time that players have to wait before rules can be accepted. + /// Time that players have to wait before rules can be accepted. /// public static readonly CVarDef RulesWaitTime = - CVarDef.Create("rules.time", 60f, CVar.SERVER | CVar.REPLICATED); + CVarDef.Create("rules.time", 10f, CVar.SERVER | CVar.REPLICATED); /// - /// Don't show rules to localhost/loopback interface. + /// Don't show rules to localhost/loopback interface. /// public static readonly CVarDef RulesExemptLocal = CVarDef.Create("rules.exempt_local", true, CVar.SERVERONLY); @@ -2222,6 +2339,10 @@ public static readonly CVarDef public static readonly CVarDef GatewayGeneratorEnabled = CVarDef.Create("gateway.generator_enabled", false); + // Clippy! + public static readonly CVarDef TippyEntity = + CVarDef.Create("tippy.entity", "Tippy", CVar.SERVER | CVar.REPLICATED); + /* * DEBUG */ @@ -2459,6 +2580,22 @@ public static readonly CVarDef #endregion + #region Lying Down System + + public static readonly CVarDef AutoGetUp = + CVarDef.Create("rest.auto_get_up", true, CVar.CLIENT | CVar.ARCHIVE | CVar.REPLICATED); + + public static readonly CVarDef HoldLookUp = + CVarDef.Create("rest.hold_look_up", false, CVar.CLIENT | CVar.ARCHIVE); + + /// + /// When true, players can choose to crawl under tables while laying down, using the designated keybind. + /// + public static readonly CVarDef CrawlUnderTables = + CVarDef.Create("rest.crawlundertables", true, CVar.SERVER | CVar.ARCHIVE); + + #endregion + #region Material Reclaimer /// @@ -2484,5 +2621,24 @@ public static readonly CVarDef CVarDef.Create("jetpack.enable_in_no_gravity", true, CVar.REPLICATED); #endregion + + #region GhostRespawn + + public static readonly CVarDef GhostRespawnTime = + CVarDef.Create("ghost.respawn_time", 15d, CVar.SERVERONLY); + + public static readonly CVarDef GhostRespawnMaxPlayers = + CVarDef.Create("ghost.respawn_max_players", 40, CVar.SERVERONLY); + + public static readonly CVarDef GhostAllowSameCharacter = + CVarDef.Create("ghost.allow_same_character", false, CVar.SERVERONLY); + + #endregion + + /// + /// Set to true to disable parallel processing in the pow3r solver. + /// + public static readonly CVarDef DebugPow3rDisableParallel = + CVarDef.Create("debug.pow3r_disable_parallel", true, CVar.SERVERONLY); } } diff --git a/Content.Shared/Cargo/CargoOrderData.cs b/Content.Shared/Cargo/CargoOrderData.cs index a6d5fb0a18a..ce05d922362 100644 --- a/Content.Shared/Cargo/CargoOrderData.cs +++ b/Content.Shared/Cargo/CargoOrderData.cs @@ -1,48 +1,62 @@ using Robust.Shared.Serialization; -using Content.Shared.Access.Components; using System.Text; namespace Content.Shared.Cargo { - [NetSerializable, Serializable] - public sealed class CargoOrderData + [DataDefinition, NetSerializable, Serializable] + public sealed partial class CargoOrderData { /// /// Price when the order was added. /// + [DataField] public int Price; /// /// A unique (arbitrary) ID which identifies this order. /// - public readonly int OrderId; + [DataField] + public int OrderId { get; private set; } /// /// Prototype Id for the item to be created /// - public readonly string ProductId; + [DataField] + public string ProductId { get; private set; } + + /// + /// Prototype Name + /// + [DataField] + public string ProductName { get; private set; } /// /// The number of items in the order. Not readonly, as it might change /// due to caps on the amount of orders that can be placed. /// + [DataField] public int OrderQuantity; /// /// How many instances of this order that we've already dispatched /// + [DataField] public int NumDispatched = 0; - public readonly string Requester; + [DataField] + public string Requester { get; private set; } // public String RequesterRank; // TODO Figure out how to get Character ID card data // public int RequesterId; - public readonly string Reason; + [DataField] + public string Reason { get; private set; } public bool Approved => Approver is not null; + [DataField] public string? Approver; - public CargoOrderData(int orderId, string productId, int price, int amount, string requester, string reason) + public CargoOrderData(int orderId, string productId, string productName, int price, int amount, string requester, string reason) { OrderId = orderId; ProductId = productId; + ProductName = productName; Price = price; OrderQuantity = amount; Requester = requester; diff --git a/Content.Shared/Cargo/Components/CargoOrderConsoleComponent.cs b/Content.Shared/Cargo/Components/CargoOrderConsoleComponent.cs index a7d1f531754..873e9bb7b9d 100644 --- a/Content.Shared/Cargo/Components/CargoOrderConsoleComponent.cs +++ b/Content.Shared/Cargo/Components/CargoOrderConsoleComponent.cs @@ -1,6 +1,8 @@ using Content.Shared.Cargo.Prototypes; using Robust.Shared.Audio; using Robust.Shared.GameStates; +using Content.Shared.Radio; +using Robust.Shared.Prototypes; namespace Content.Shared.Cargo.Components; @@ -21,5 +23,11 @@ public sealed partial class CargoOrderConsoleComponent : Component /// [DataField, ViewVariables(VVAccess.ReadWrite)] public List AllowedGroups = new() { "market" }; + + /// + /// Radio channel on which order approval announcements are transmitted + /// + [DataField, ViewVariables(VVAccess.ReadWrite)] + public ProtoId AnnouncementChannel = "Supply"; } diff --git a/Content.Shared/Cargo/Components/CashComponent.cs b/Content.Shared/Cargo/Components/CashComponent.cs index 10a47ff803a..89af094e04a 100644 --- a/Content.Shared/Cargo/Components/CashComponent.cs +++ b/Content.Shared/Cargo/Components/CashComponent.cs @@ -3,7 +3,7 @@ namespace Content.Shared.Cargo.Components; /// -/// Can be inserted into a to increase the station's bank account. +/// Can be inserted into a to increase the station's bank account. /// [RegisterComponent, NetworkedComponent] public sealed partial class CashComponent : Component diff --git a/Content.Shared/Cargo/Components/SharedCargoTelepadComponent.cs b/Content.Shared/Cargo/Components/SharedCargoTelepadComponent.cs index 911ea41cca5..e69e83d6352 100644 --- a/Content.Shared/Cargo/Components/SharedCargoTelepadComponent.cs +++ b/Content.Shared/Cargo/Components/SharedCargoTelepadComponent.cs @@ -1,3 +1,4 @@ +using Content.Shared.Construction.Prototypes; using Content.Shared.DeviceLinking; using Robust.Shared.Audio; using Robust.Shared.GameStates; @@ -12,30 +13,51 @@ namespace Content.Shared.Cargo.Components; [RegisterComponent, NetworkedComponent, Access(typeof(SharedCargoSystem))] public sealed partial class CargoTelepadComponent : Component { + [DataField] + public List CurrentOrders = new(); + /// - /// The actual amount of time it takes to teleport from the telepad + /// The base amount of time it takes to teleport from the telepad /// - [DataField("delay"), ViewVariables(VVAccess.ReadWrite)] + [DataField] + public float BaseDelay = 10f; + + /// + /// The actual amount of time it takes to teleport from the telepad + /// + [DataField] public float Delay = 10f; /// - /// How much time we've accumulated until next teleport. + /// The machine part that affects + /// + [DataField(customTypeSerializer: typeof(PrototypeIdSerializer)), ViewVariables(VVAccess.ReadWrite)] + public string MachinePartTeleportDelay = "Capacitor"; + + /// + /// A multiplier applied to for each level of + /// + [DataField] + public float PartRatingTeleportDelay = 0.8f; + + /// + /// How much time we've accumulated until next teleport. /// - [DataField("accumulator"), ViewVariables(VVAccess.ReadWrite)] + [DataField] public float Accumulator; - [DataField("currentState")] + [DataField] public CargoTelepadState CurrentState = CargoTelepadState.Unpowered; - [DataField("teleportSound")] + [DataField] public SoundSpecifier TeleportSound = new SoundPathSpecifier("/Audio/Machines/phasein.ogg"); /// /// The paper-type prototype to spawn with the order information. /// - [DataField("printerOutput", customTypeSerializer: typeof(PrototypeIdSerializer)), ViewVariables(VVAccess.ReadWrite)] + [DataField(customTypeSerializer: typeof(PrototypeIdSerializer)), ViewVariables(VVAccess.ReadWrite)] public string PrinterOutput = "PaperCargoInvoice"; - [DataField("receiverPort", customTypeSerializer: typeof(PrototypeIdSerializer)), ViewVariables(VVAccess.ReadWrite)] + [DataField(customTypeSerializer: typeof(PrototypeIdSerializer)), ViewVariables(VVAccess.ReadWrite)] public string ReceiverPort = "OrderReceiver"; } diff --git a/Content.Shared/Cargo/Prototypes/CargoProductPrototype.cs b/Content.Shared/Cargo/Prototypes/CargoProductPrototype.cs index 1d0ca8abdb4..af2f6613d63 100644 --- a/Content.Shared/Cargo/Prototypes/CargoProductPrototype.cs +++ b/Content.Shared/Cargo/Prototypes/CargoProductPrototype.cs @@ -1,4 +1,4 @@ -using Robust.Shared.Prototypes; +using Robust.Shared.Prototypes; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Array; using Robust.Shared.Utility; diff --git a/Content.Shared/Chapel/SacrificeDoAfterEvent.cs b/Content.Shared/Chapel/SacrificeDoAfterEvent.cs index 444871a2fc0..f730bab883c 100644 --- a/Content.Shared/Chapel/SacrificeDoAfterEvent.cs +++ b/Content.Shared/Chapel/SacrificeDoAfterEvent.cs @@ -2,8 +2,6 @@ using Content.Shared.DoAfter; namespace Content.Shared.Chapel; -[Serializable, NetSerializable] -public sealed partial class SacrificeDoAfterEvent : SimpleDoAfterEvent -{ -} +[Serializable, NetSerializable] +public sealed partial class SacrificeDoAfterEvent : SimpleDoAfterEvent { } diff --git a/Content.Shared/Chapel/SacrificialAltarComponent.cs b/Content.Shared/Chapel/SacrificialAltarComponent.cs new file mode 100644 index 00000000000..c3db338861d --- /dev/null +++ b/Content.Shared/Chapel/SacrificialAltarComponent.cs @@ -0,0 +1,48 @@ +using Content.Shared.Random; +using Content.Shared.DoAfter; +using Robust.Shared.Audio; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared.Chapel; + +/// +/// Altar that lets you sacrifice psionics to lower glimmer by a large amount. +/// +[RegisterComponent, NetworkedComponent, Access(typeof(SharedSacrificialAltarSystem))] +public sealed partial class SacrificialAltarComponent : Component +{ + /// + /// DoAfter for an active sacrifice. + /// + [DataField] + public DoAfterId? DoAfter; + + /// + /// How long it takes to sacrifice someone once they die. + /// This is the window to interrupt a sacrifice if you want glimmer to stay high, or need the psionic to be revived. + /// + [DataField] + public TimeSpan SacrificeTime = TimeSpan.FromSeconds(8.35); + + [DataField] + public SoundSpecifier SacrificeSound = new SoundPathSpecifier("/Audio/Psionics/heartbeat_fast.ogg"); + + [DataField] + public EntityUid? SacrificeStream; + + /// + /// Base amount to reduce glimmer by, multiplied by the victim's Amplification stat. + /// + [DataField] + public float GlimmerReduction = 25; + + [DataField] + public List>? RewardPool; + + /// + /// The base chance to generate an item of power, multiplied by the victim's Dampening stat. + /// + [DataField] + public float BaseItemChance = 0.1f; +} diff --git a/Content.Shared/Chapel/SharedSacrificialAltarSystem.cs b/Content.Shared/Chapel/SharedSacrificialAltarSystem.cs new file mode 100644 index 00000000000..92df7e0f6bf --- /dev/null +++ b/Content.Shared/Chapel/SharedSacrificialAltarSystem.cs @@ -0,0 +1,61 @@ +using System.Linq; +using Content.Shared.Buckle.Components; +using Content.Shared.DoAfter; +using Content.Shared.Examine; +using Content.Shared.Verbs; + +namespace Content.Shared.Chapel; + +public abstract partial class SharedSacrificialAltarSystem : EntitySystem +{ + [Dependency] protected readonly SharedDoAfterSystem DoAfter = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnExamined); + SubscribeLocalEvent(OnUnstrapped); + SubscribeLocalEvent>(OnGetVerbs); + } + + private void OnExamined(Entity ent, ref ExaminedEvent args) + { + args.PushMarkup(Loc.GetString("altar-examine")); + } + + private void OnUnstrapped(Entity ent, ref BuckleChangeEvent args) + { + if (ent.Comp.DoAfter is not { } id) + return; + + DoAfter.Cancel(id); + ent.Comp.DoAfter = null; + } + + private void OnGetVerbs(Entity ent, ref GetVerbsEvent args) + { + if (!args.CanAccess || !args.CanInteract || ent.Comp.DoAfter != null + || !TryComp(ent, out var strap) + || GetFirstBuckled(strap) is not { } target) + return; + + var user = args.User; + args.Verbs.Add(new AlternativeVerb() + { + Act = () => AttemptSacrifice(ent, user, target), + Text = Loc.GetString("altar-sacrifice-verb"), + Priority = 2 + }); + } + + private EntityUid? GetFirstBuckled(StrapComponent strap) + { + if (strap.BuckledEntities.Count <= 0) + return null; + + return strap.BuckledEntities.First(); + } + + protected virtual void AttemptSacrifice(Entity ent, EntityUid user, EntityUid target) { } +} diff --git a/Content.Shared/Chat/EmotesEvents.cs b/Content.Shared/Chat/EmotesEvents.cs new file mode 100644 index 00000000000..4479f8b2ab9 --- /dev/null +++ b/Content.Shared/Chat/EmotesEvents.cs @@ -0,0 +1,11 @@ +using Content.Shared.Chat.Prototypes; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; + +namespace Content.Shared.Chat; + +[Serializable, NetSerializable] +public sealed class PlayEmoteMessage(ProtoId protoId) : EntityEventArgs +{ + public readonly ProtoId ProtoId = protoId; +} diff --git a/Content.Shared/Chat/Prototypes/EmotePrototype.cs b/Content.Shared/Chat/Prototypes/EmotePrototype.cs index 08f209d28d3..7ee958ee6a7 100644 --- a/Content.Shared/Chat/Prototypes/EmotePrototype.cs +++ b/Content.Shared/Chat/Prototypes/EmotePrototype.cs @@ -1,11 +1,13 @@ +using Content.Shared.Whitelist; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; +using Robust.Shared.Utility; namespace Content.Shared.Chat.Prototypes; /// /// IC emotes (scream, smile, clapping, etc). -/// Entities can activate emotes by chat input or code. +/// Entities can activate emotes by chat input, radial or code. /// [Prototype("emote")] public sealed partial class EmotePrototype : IPrototype @@ -13,18 +15,50 @@ public sealed partial class EmotePrototype : IPrototype [IdDataField] public string ID { get; private set; } = default!; + /// + /// Localization string for the emote name. Displayed in the radial UI. + /// + [DataField(required: true)] + public string Name = default!; + + /// + /// Determines if emote available to all by default + /// check comes after this setting + /// can ignore this setting + /// + [DataField] + public bool Available = true; + /// /// Different emote categories may be handled by different systems. /// Also may be used for filtering. /// - [DataField("category")] + [DataField] public EmoteCategory Category = EmoteCategory.General; + /// + /// An icon used to visually represent the emote in radial UI. + /// + [DataField] + public SpriteSpecifier Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/Actions/scream.png")); + + /// + /// Determines conditions to this emote be available to use + /// + [DataField] + public EntityWhitelist? Whitelist; + + /// + /// Determines conditions to this emote be unavailable to use + /// + [DataField] + public EntityWhitelist? Blacklist; + /// /// Collection of words that will be sent to chat if emote activates. /// Will be picked randomly from list. /// - [DataField("chatMessages")] + [DataField] public List ChatMessages = new(); /// @@ -32,7 +66,7 @@ public sealed partial class EmotePrototype : IPrototype /// When typed into players chat they will activate emote event. /// All words should be unique across all emote prototypes. /// - [DataField("chatTriggers")] + [DataField] public HashSet ChatTriggers = new(); } diff --git a/Content.Shared/Chat/Prototypes/EmoteSoundsPrototype.cs b/Content.Shared/Chat/Prototypes/EmoteSoundsPrototype.cs index c9a78e7d6d7..2b7064c1e90 100644 --- a/Content.Shared/Chat/Prototypes/EmoteSoundsPrototype.cs +++ b/Content.Shared/Chat/Prototypes/EmoteSoundsPrototype.cs @@ -1,5 +1,6 @@ using Robust.Shared.Audio; using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Dictionary; namespace Content.Shared.Chat.Prototypes; @@ -8,8 +9,8 @@ namespace Content.Shared.Chat.Prototypes; /// Sounds collection for each . /// Different entities may use different sounds collections. /// -[Prototype("emoteSounds")] -public sealed partial class EmoteSoundsPrototype : IPrototype +[Prototype("emoteSounds"), Serializable, NetSerializable] +public sealed class EmoteSoundsPrototype : IPrototype { [IdDataField] public string ID { get; private set; } = default!; diff --git a/Content.Shared/Chat/SharedChatEvents.cs b/Content.Shared/Chat/SharedChatEvents.cs new file mode 100644 index 00000000000..6d5c435e055 --- /dev/null +++ b/Content.Shared/Chat/SharedChatEvents.cs @@ -0,0 +1,24 @@ +using Content.Shared.Speech; +using Robust.Shared.Prototypes; +using Content.Shared.Inventory; + +namespace Content.Shared.Chat; + +/// +/// This event should be sent everytime an entity talks (Radio, local chat, etc...). +/// The event is sent to both the entity itself, and all clothing (For stuff like voice masks). +/// +public sealed class TransformSpeakerSpeechEvent : EntityEventArgs, IInventoryRelayEvent +{ + public SlotFlags TargetSlots { get; } = SlotFlags.WITHOUT_POCKET; + public EntityUid Sender; + public string? VoiceName; + public ProtoId? SpeechVerb; + + public TransformSpeakerSpeechEvent(EntityUid sender, string? name = null) + { + Sender = sender; + VoiceName = name; + SpeechVerb = null; + } +} diff --git a/Content.Shared/Chat/SharedChatSystem.cs b/Content.Shared/Chat/SharedChatSystem.cs index efbcc9bed58..14cb37d18bb 100644 --- a/Content.Shared/Chat/SharedChatSystem.cs +++ b/Content.Shared/Chat/SharedChatSystem.cs @@ -70,19 +70,25 @@ public SpeechVerbPrototype GetSpeechVerb(EntityUid source, string message, Speec if (!Resolve(source, ref speech, false)) return _prototypeManager.Index(DefaultSpeechVerb); + var evt = new TransformSpeakerSpeechEvent(source); + RaiseLocalEvent(source, evt); + + SpeechVerbPrototype? speechProto = null; + if (evt.SpeechVerb != null && _prototypeManager.TryIndex(evt.SpeechVerb, out var evntProto)) + speechProto = evntProto; + // check for a suffix-applicable speech verb - SpeechVerbPrototype? current = null; foreach (var (str, id) in speech.SuffixSpeechVerbs) { var proto = _prototypeManager.Index(id); - if (message.EndsWith(Loc.GetString(str)) && proto.Priority >= (current?.Priority ?? 0)) + if (message.EndsWith(Loc.GetString(str)) && proto.Priority >= (speechProto?.Priority ?? 0)) { - current = proto; + speechProto = proto; } } // if no applicable suffix verb return the normal one used by the entity - return current ?? _prototypeManager.Index(speech.SpeechVerb); + return speechProto ?? _prototypeManager.Index(speech.SpeechVerb); } /// diff --git a/Content.Shared/Chat/TypingIndicator/SharedTypingIndicatorSystem.cs b/Content.Shared/Chat/TypingIndicator/SharedTypingIndicatorSystem.cs index 41ed4b1b2ba..81ebcfb1088 100644 --- a/Content.Shared/Chat/TypingIndicator/SharedTypingIndicatorSystem.cs +++ b/Content.Shared/Chat/TypingIndicator/SharedTypingIndicatorSystem.cs @@ -1,5 +1,4 @@ -using Content.Shared.Clothing.Components; -using Content.Shared.Inventory.Events; +using Content.Shared.Clothing; namespace Content.Shared.Chat.TypingIndicator; @@ -17,25 +16,21 @@ public abstract class SharedTypingIndicatorSystem : EntitySystem public override void Initialize() { base.Initialize(); - SubscribeLocalEvent(OnGotEquipped); - SubscribeLocalEvent(OnGotUnequipped); + SubscribeLocalEvent(OnGotEquipped); + SubscribeLocalEvent(OnGotUnequipped); } - private void OnGotEquipped(EntityUid uid, TypingIndicatorClothingComponent component, GotEquippedEvent args) + private void OnGotEquipped(EntityUid uid, TypingIndicatorClothingComponent component, ClothingGotEquippedEvent args) { - if (!TryComp(uid, out var clothing) || - !TryComp(args.Equipee, out var indicator)) + if (!TryComp(args.Wearer, out var indicator)) return; - var isCorrectSlot = clothing.Slots.HasFlag(args.SlotFlags); - if (!isCorrectSlot) return; - indicator.Prototype = component.Prototype; } - private void OnGotUnequipped(EntityUid uid, TypingIndicatorClothingComponent component, GotUnequippedEvent args) + private void OnGotUnequipped(EntityUid uid, TypingIndicatorClothingComponent component, ClothingGotUnequippedEvent args) { - if (!TryComp(args.Equipee, out var indicator)) + if (!TryComp(args.Wearer, out var indicator)) return; indicator.Prototype = SharedTypingIndicatorSystem.InitialIndicatorId; diff --git a/Content.Shared/Chat/V2/Repository/Types.cs b/Content.Shared/Chat/V2/Repository/Types.cs new file mode 100644 index 00000000000..59acb849d46 --- /dev/null +++ b/Content.Shared/Chat/V2/Repository/Types.cs @@ -0,0 +1,60 @@ +using System.Linq; +using System.Runtime.InteropServices; +using Robust.Shared.Network; +using Robust.Shared.Serialization; + +namespace Content.Shared.Chat.V2.Repository; + +/// +/// The record associated with a specific chat event. +/// +public struct ChatRecord(string userName, NetUserId userId, IChatEvent storedEvent, string entityName) +{ + public string UserName = userName; + public NetUserId UserId = userId; + public string EntityName = entityName; + public IChatEvent StoredEvent = storedEvent; +} + +/// +/// Notifies that a chat message has been created. +/// +/// +[Serializable, NetSerializable] +public sealed class MessageCreatedEvent(IChatEvent ev) : EntityEventArgs +{ + public IChatEvent Event = ev; +} + +/// +/// Notifies that a chat message has been changed. +/// +/// +/// +[Serializable, NetSerializable] +public sealed class MessagePatchedEvent(uint id, string newMessage) : EntityEventArgs +{ + public uint MessageId = id; + public string NewMessage = newMessage; +} + +/// +/// Notifies that a chat message has been deleted. +/// +/// +[Serializable, NetSerializable] +public sealed class MessageDeletedEvent(uint id) : EntityEventArgs +{ + public uint MessageId = id; +} + +/// +/// Notifies that a player's messages have been nuked. +/// +/// +[Serializable, NetSerializable] +public sealed class MessagesNukedEvent(List set) : EntityEventArgs +{ + public uint[] MessageIds = CollectionsMarshal.AsSpan(set).ToArray(); +} + diff --git a/Content.Shared/Chat/V2/Types.cs b/Content.Shared/Chat/V2/Types.cs new file mode 100644 index 00000000000..50e5a53ab50 --- /dev/null +++ b/Content.Shared/Chat/V2/Types.cs @@ -0,0 +1,94 @@ +namespace Content.Shared.Chat.V2; + +/// +/// The types of messages that can be sent, validated and processed via user input that are covered by Chat V2. +/// +public enum MessageType : byte +{ + #region Player-sendable types + + /// + /// Chat for announcements like CentCom telling you to stop sending them memes. + /// + Announcement, + /// + /// Chat that ghosts use to complain about being gibbed. + /// + DeadChat, + /// + /// Chat that mimes use to evade their vow. + /// + Emote, + /// + /// Chat that players use to make lame jokes to people nearby. + /// + Local, + /// + /// Chat that players use to complain about shitsec/admins/antags/balance/etc. + /// + Looc, + /// + /// Chat that players use to say "HELP MAINT", or plead to call the shuttle because a beaker spilled. + /// + /// This does not tell you what radio channel has been chatted on! + Radio, + /// + /// Chat that is used exclusively by syndie tots to collaborate on whatever tots do. + /// + Whisper, + + #endregion + + #region Non-player-sendable types + + /// + /// Chat that is sent to exactly one player; almost exclusively used for admemes and prayer responses. + /// + Subtle, + /// + /// Chat that is sent by automata, like when a vending machine thanks you for your unwise purchases. + /// + Background, + + #endregion +} + +/// +/// Defines a chat event that can be stored in a chat repository. +/// +public interface IChatEvent +{ + /// + /// The sender of the chat message. + /// + public EntityUid Sender + { + get; + } + + /// + /// The ID of the message. This is overwritten when saved into a repository. + /// + public uint Id + { + get; + set; + } + + /// + /// The sent message. + /// + public string Message + { + get; + set; + } + + /// + /// The type of sent message. + /// + public MessageType Type + { + get; + } +} diff --git a/Content.Shared/Chemistry/Components/InjectorComponent.cs b/Content.Shared/Chemistry/Components/InjectorComponent.cs index 437c5e327d2..c583ee66640 100644 --- a/Content.Shared/Chemistry/Components/InjectorComponent.cs +++ b/Content.Shared/Chemistry/Components/InjectorComponent.cs @@ -24,7 +24,8 @@ public sealed partial class InjectorDoAfterEvent : SimpleDoAfterEvent [RegisterComponent, NetworkedComponent, AutoGenerateComponentState] public sealed partial class InjectorComponent : Component { - public const string SolutionName = "injector"; + [DataField] + public string SolutionName = "injector"; /// /// Whether or not the injector is able to draw from containers or if it's a single use diff --git a/Content.Shared/Chemistry/Components/MixableSolutionComponent.cs b/Content.Shared/Chemistry/Components/MixableSolutionComponent.cs new file mode 100644 index 00000000000..2b1c140aa69 --- /dev/null +++ b/Content.Shared/Chemistry/Components/MixableSolutionComponent.cs @@ -0,0 +1,13 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Chemistry.Components; + +[RegisterComponent, NetworkedComponent] +public sealed partial class MixableSolutionComponent : Component +{ + /// + /// Solution name which can be mixed with methods such as blessing + /// + [DataField, ViewVariables(VVAccess.ReadWrite)] + public string Solution = "default"; +} diff --git a/Content.Shared/Chemistry/Components/ReagentTankComponent.cs b/Content.Shared/Chemistry/Components/ReagentTankComponent.cs new file mode 100644 index 00000000000..3aa1756cf9c --- /dev/null +++ b/Content.Shared/Chemistry/Components/ReagentTankComponent.cs @@ -0,0 +1,22 @@ +using Content.Shared.FixedPoint; +using Robust.Shared.GameStates; +using Robust.Shared.Serialization; + +namespace Content.Shared.Chemistry.Components; + +[RegisterComponent, NetworkedComponent] +public sealed partial class ReagentTankComponent : Component +{ + [DataField, ViewVariables(VVAccess.ReadWrite)] + public FixedPoint2 TransferAmount { get; set; } = FixedPoint2.New(10); + + [DataField, ViewVariables(VVAccess.ReadWrite)] + public ReagentTankType TankType { get; set; } = ReagentTankType.Unspecified; +} + +[Serializable, NetSerializable] +public enum ReagentTankType : byte +{ + Unspecified, + Fuel +} diff --git a/Content.Shared/Chemistry/Components/Solution.cs b/Content.Shared/Chemistry/Components/Solution.cs index 1c24c860dd0..f16cf4a80fa 100644 --- a/Content.Shared/Chemistry/Components/Solution.cs +++ b/Content.Shared/Chemistry/Components/Solution.cs @@ -6,6 +6,7 @@ using Robust.Shared.Utility; using System.Collections; using System.Linq; +using Content.Shared.Chemistry.Components.SolutionManager; namespace Content.Shared.Chemistry.Components { @@ -48,13 +49,6 @@ public sealed partial class Solution : IEnumerable, ISerializat [DataField("canReact")] public bool CanReact { get; set; } = true; - /// - /// If reactions can occur via mixing. - /// - [ViewVariables(VVAccess.ReadWrite)] - [DataField("canMix")] - public bool CanMix { get; set; } = false; - /// /// Volume needed to fill this container. /// diff --git a/Content.Shared/Chemistry/EntitySystems/RehydratableSystem.cs b/Content.Shared/Chemistry/EntitySystems/RehydratableSystem.cs index 44bfb583dd8..36ca791290a 100644 --- a/Content.Shared/Chemistry/EntitySystems/RehydratableSystem.cs +++ b/Content.Shared/Chemistry/EntitySystems/RehydratableSystem.cs @@ -34,7 +34,7 @@ private void OnSolutionChange(Entity ent, ref SolutionCon private void Expand(Entity ent) { if (_net.IsClient) - return; // no + return; var (uid, comp) = ent; diff --git a/Content.Shared/Chemistry/EntitySystems/SharedInjectorSystem.cs b/Content.Shared/Chemistry/EntitySystems/SharedInjectorSystem.cs index 6c43c1d5f06..1620344652c 100644 --- a/Content.Shared/Chemistry/EntitySystems/SharedInjectorSystem.cs +++ b/Content.Shared/Chemistry/EntitySystems/SharedInjectorSystem.cs @@ -113,7 +113,7 @@ private void Toggle(Entity injector, EntityUid user) if (injector.Comp.InjectOnly) return; - if (!SolutionContainers.TryGetSolution(injector.Owner, InjectorComponent.SolutionName, out var solEnt, out var solution)) + if (!SolutionContainers.TryGetSolution(injector.Owner, injector.Comp.SolutionName, out var solEnt, out var solution)) return; string msg; diff --git a/Content.Shared/Chemistry/EntitySystems/SharedSolutionContainerSystem.Capabilities.cs b/Content.Shared/Chemistry/EntitySystems/SharedSolutionContainerSystem.Capabilities.cs index 0d4912a504b..ce0cfab0021 100644 --- a/Content.Shared/Chemistry/EntitySystems/SharedSolutionContainerSystem.Capabilities.cs +++ b/Content.Shared/Chemistry/EntitySystems/SharedSolutionContainerSystem.Capabilities.cs @@ -78,31 +78,15 @@ public bool TryGetFitsInDispenser(Entity container, [NotNullWhen(true)] out Entity? solution) + public bool TryGetMixableSolution(Entity entity, [NotNullWhen(true)] out Entity? soln, [NotNullWhen(true)] out Solution? solution) { - var getMixableSolutionAttempt = new GetMixableSolutionAttemptEvent(container); - RaiseLocalEvent(container, ref getMixableSolutionAttempt); - if (getMixableSolutionAttempt.MixedSolution != null) - { - solution = getMixableSolutionAttempt.MixedSolution; - return true; - } - - if (!Resolve(container, ref container.Comp, false)) + if (!Resolve(entity, ref entity.Comp1, logMissing: false)) { - solution = default!; + (soln, solution) = (default!, null); return false; } - var tryGetSolution = EnumerateSolutions(container).FirstOrNull(x => x.Solution.Comp.Solution.CanMix); - if (tryGetSolution.HasValue) - { - solution = tryGetSolution.Value.Solution; - return true; - } - - solution = default!; - return false; + return TryGetSolution((entity.Owner, entity.Comp2), entity.Comp1.Solution, out soln, out solution); } #endregion Solution Accessors diff --git a/Content.Shared/Chemistry/EntitySystems/SharedSolutionContainerSystem.cs b/Content.Shared/Chemistry/EntitySystems/SharedSolutionContainerSystem.cs index e74c1463804..5e58a0944a4 100644 --- a/Content.Shared/Chemistry/EntitySystems/SharedSolutionContainerSystem.cs +++ b/Content.Shared/Chemistry/EntitySystems/SharedSolutionContainerSystem.cs @@ -11,10 +11,13 @@ using Robust.Shared.Utility; using System.Diagnostics.CodeAnalysis; using System.Linq; +using System.Numerics; using System.Runtime.CompilerServices; using System.Text; using Content.Shared.Hands.Components; using Content.Shared.Hands.EntitySystems; +using Robust.Shared.Map; +using Robust.Shared.Network; using Dependency = Robust.Shared.IoC.DependencyAttribute; namespace Content.Shared.Chemistry.EntitySystems; @@ -57,7 +60,8 @@ public abstract partial class SharedSolutionContainerSystem : EntitySystem [Dependency] protected readonly SharedAppearanceSystem AppearanceSystem = default!; [Dependency] protected readonly SharedHandsSystem Hands = default!; [Dependency] protected readonly SharedContainerSystem ContainerSystem = default!; - [Dependency] protected readonly MetaDataSystem MetaData = default!; + [Dependency] protected readonly MetaDataSystem MetaDataSys = default!; + [Dependency] protected readonly INetManager NetManager = default!; public override void Initialize() { @@ -66,13 +70,18 @@ public override void Initialize() InitializeRelays(); SubscribeLocalEvent(OnComponentInit); - SubscribeLocalEvent(OnComponentStartup); - SubscribeLocalEvent(OnComponentShutdown); - - SubscribeLocalEvent(OnComponentInit); - + SubscribeLocalEvent(OnSolutionStartup); + SubscribeLocalEvent(OnSolutionShutdown); + SubscribeLocalEvent(OnContainerManagerInit); SubscribeLocalEvent(OnExamineSolution); SubscribeLocalEvent>(OnSolutionExaminableVerb); + SubscribeLocalEvent(OnMapInit); + + if (NetManager.IsServer) + { + SubscribeLocalEvent(OnContainerManagerShutdown); + SubscribeLocalEvent(OnContainedSolutionShutdown); + } } @@ -121,8 +130,14 @@ public bool ResolveSolution(Entity container /// The name of the solution entity to fetch. /// Returns the solution entity that was fetched. /// Returns the solution state of the solution entity that was fetched. + /// /// Should we print an error if the solution specified by name is missing /// - public bool TryGetSolution(Entity container, string? name, [NotNullWhen(true)] out Entity? entity, [NotNullWhen(true)] out Solution? solution) + public bool TryGetSolution( + Entity container, + string? name, + [NotNullWhen(true)] out Entity? entity, + [NotNullWhen(true)] out Solution? solution, + bool errorOnMissing = false) { if (!TryGetSolution(container, name, out entity)) { @@ -135,7 +150,11 @@ public bool TryGetSolution(Entity container, } /// - public bool TryGetSolution(Entity container, string? name, [NotNullWhen(true)] out Entity? entity) + public bool TryGetSolution( + Entity container, + string? name, + [NotNullWhen(true)] out Entity? entity, + bool errorOnMissing = false) { if (TryComp(container, out BlockSolutionAccessComponent? blocker)) { @@ -155,12 +174,18 @@ solutionSlot.ContainedEntity is { } containedSolution else { entity = null; + if (!errorOnMissing) + return false; + Log.Error($"{ToPrettyString(container)} does not have a solution with ID: {name}"); return false; } if (!TryComp(uid, out SolutionComponent? comp)) { entity = null; + if (!errorOnMissing) + return false; + Log.Error($"{ToPrettyString(container)} does not have a solution with ID: {name}"); return false; } @@ -171,13 +196,18 @@ solutionSlot.ContainedEntity is { } containedSolution /// /// Version of TryGetSolution that doesn't take or return an entity. /// Used for prototypes and with old code parity. - public bool TryGetSolution(SolutionContainerManagerComponent container, string name, [NotNullWhen(true)] out Solution? solution) + public bool TryGetSolution(SolutionContainerManagerComponent container, + string name, + [NotNullWhen(true)] out Solution? solution, + bool errorOnMissing = false) { solution = null; - if (container.Solutions == null) + if (container.Solutions != null) + return container.Solutions.TryGetValue(name, out solution); + if (!errorOnMissing) return false; - - return container.Solutions.TryGetValue(name, out solution); + Log.Error($"{container} does not have a solution with ID: {name}"); + return false; } public IEnumerable<(string? Name, Entity Solution)> EnumerateSolutions(Entity container, bool includeSelf = true) @@ -703,17 +733,17 @@ private void OnComponentInit(Entity entity, ref ComponentInit entity.Comp.Solution.ValidateSolution(); } - private void OnComponentStartup(Entity entity, ref ComponentStartup args) + private void OnSolutionStartup(Entity entity, ref ComponentStartup args) { UpdateChemicals(entity); } - private void OnComponentShutdown(Entity entity, ref ComponentShutdown args) + private void OnSolutionShutdown(Entity entity, ref ComponentShutdown args) { RemoveAllSolution(entity); } - private void OnComponentInit(Entity entity, ref ComponentInit args) + private void OnContainerManagerInit(Entity entity, ref ComponentInit args) { if (entity.Comp.Containers is not { Count: > 0 } containers) return; @@ -733,7 +763,7 @@ private void OnExamineSolution(Entity entity, ref E return; } - if (!CanSeeHiddenSolution(entity,args.Examiner)) + if (!CanSeeHiddenSolution(entity, args.Examiner)) return; var primaryReagent = solution.GetPrimaryReagentId(); @@ -832,7 +862,7 @@ private void OnSolutionExaminableVerb(Entity entity return; } - if (!CanSeeHiddenSolution(entity,args.User)) + if (!CanSeeHiddenSolution(entity, args.User)) return; var target = args.Target; @@ -881,6 +911,9 @@ private FormattedMessage GetSolutionExamine(Solution solution) , ("amount", quantity))); } + msg.PushNewline(); + msg.AddMarkup(Loc.GetString("scannable-solution-temperature", ("temperature", Math.Round(solution.Temperature)))); + return msg; } @@ -901,5 +934,273 @@ private bool CanSeeHiddenSolution(Entity entity, En return true; } + private void OnMapInit(Entity entity, ref MapInitEvent args) + { + EnsureAllSolutions(entity); + } + + private void OnContainerManagerShutdown(Entity entity, ref ComponentShutdown args) + { + foreach (var name in entity.Comp.Containers) + { + if (ContainerSystem.TryGetContainer(entity, $"solution@{name}", out var solutionContainer)) + ContainerSystem.ShutdownContainer(solutionContainer); + } + entity.Comp.Containers.Clear(); + } + + private void OnContainedSolutionShutdown(Entity entity, ref ComponentShutdown args) + { + if (TryComp(entity.Comp.Container, out SolutionContainerManagerComponent? container)) + { + container.Containers.Remove(entity.Comp.ContainerName); + Dirty(entity.Comp.Container, container); + } + + if (ContainerSystem.TryGetContainer(entity, $"solution@{entity.Comp.ContainerName}", out var solutionContainer)) + ContainerSystem.ShutdownContainer(solutionContainer); + } + #endregion Event Handlers + + public bool EnsureSolution( + Entity entity, + string name, + [NotNullWhen(true)]out Solution? solution, + FixedPoint2 maxVol = default) + { + return EnsureSolution(entity, name, maxVol, null, out _, out solution); + } + + public bool EnsureSolution( + Entity entity, + string name, + out bool existed, + [NotNullWhen(true)]out Solution? solution, + FixedPoint2 maxVol = default) + { + return EnsureSolution(entity, name, maxVol, null, out existed, out solution); + } + + public bool EnsureSolution( + Entity entity, + string name, + FixedPoint2 maxVol, + Solution? prototype, + out bool existed, + [NotNullWhen(true)] out Solution? solution) + { + solution = null; + existed = false; + + var (uid, meta) = entity; + if (!Resolve(uid, ref meta)) + throw new InvalidOperationException("Attempted to ensure solution on invalid entity."); + var manager = EnsureComp(uid); + if (meta.EntityLifeStage >= EntityLifeStage.MapInitialized) + { + EnsureSolutionEntity((uid, manager), name, out existed, + out var solEnt, maxVol, prototype); + solution = solEnt!.Value.Comp.Solution; + return true; + } + solution = EnsureSolutionPrototype((uid, manager), name, maxVol, prototype, out existed); + return true; + } + + public void EnsureAllSolutions(Entity entity) + { + if (NetManager.IsClient) + return; + + if (entity.Comp.Solutions is not { } prototypes) + return; + + foreach (var (name, prototype) in prototypes) + { + EnsureSolutionEntity((entity.Owner, entity.Comp), name, out _, out _, prototype.MaxVolume, prototype); + } + + entity.Comp.Solutions = null; + Dirty(entity); + } + + public bool EnsureSolutionEntity( + Entity entity, + string name, + [NotNullWhen(true)] out Entity? solutionEntity, + FixedPoint2 maxVol = default) => + EnsureSolutionEntity(entity, name, out _, out solutionEntity, maxVol); + + public bool EnsureSolutionEntity( + Entity entity, + string name, + out bool existed, + [NotNullWhen(true)] out Entity? solutionEntity, + FixedPoint2 maxVol = default, + Solution? prototype = null + ) + { + existed = true; + solutionEntity = null; + + var (uid, container) = entity; + + var solutionSlot = ContainerSystem.EnsureContainer(uid, $"solution@{name}", out existed); + if (!Resolve(uid, ref container, logMissing: false)) + { + existed = false; + container = AddComp(uid); + container.Containers.Add(name); + if (NetManager.IsClient) + return false; + } + else if (!existed) + { + container.Containers.Add(name); + Dirty(uid, container); + } + + var needsInit = false; + SolutionComponent solutionComp; + if (solutionSlot.ContainedEntity is not { } solutionId) + { + if (NetManager.IsClient) + return false; + prototype ??= new() { MaxVolume = maxVol }; + prototype.Name = name; + (solutionId, solutionComp, _) = SpawnSolutionUninitialized(solutionSlot, name, maxVol, prototype); + existed = false; + needsInit = true; + Dirty(uid, container); + } + else + { + solutionComp = Comp(solutionId); + DebugTools.Assert(TryComp(solutionId, out ContainedSolutionComponent? relation) && relation.Container == uid && relation.ContainerName == name); + DebugTools.Assert(solutionComp.Solution.Name == name); + + var solution = solutionComp.Solution; + solution.MaxVolume = FixedPoint2.Max(solution.MaxVolume, maxVol); + + // Depending on MapInitEvent order some systems can ensure solution empty solutions and conflict with the prototype solutions. + // We want the reagents from the prototype to exist even if something else already created the solution. + if (prototype is { Volume.Value: > 0 }) + solution.AddSolution(prototype, PrototypeManager); + + Dirty(solutionId, solutionComp); + } + + if (needsInit) + EntityManager.InitializeAndStartEntity(solutionId, Transform(solutionId).MapID); + solutionEntity = (solutionId, solutionComp); + return true; + } + + private Solution EnsureSolutionPrototype(Entity entity, string name, FixedPoint2 maxVol, Solution? prototype, out bool existed) + { + existed = true; + + var (uid, container) = entity; + if (!Resolve(uid, ref container, logMissing: false)) + { + container = AddComp(uid); + existed = false; + } + + if (container.Solutions is null) + container.Solutions = new(SolutionContainerManagerComponent.DefaultCapacity); + + if (!container.Solutions.TryGetValue(name, out var solution)) + { + solution = prototype ?? new() { Name = name, MaxVolume = maxVol }; + container.Solutions.Add(name, solution); + existed = false; + } + else + solution.MaxVolume = FixedPoint2.Max(solution.MaxVolume, maxVol); + + Dirty(uid, container); + return solution; + } + + private Entity SpawnSolutionUninitialized(ContainerSlot container, string name, FixedPoint2 maxVol, Solution prototype) + { + var coords = new EntityCoordinates(container.Owner, Vector2.Zero); + var uid = EntityManager.CreateEntityUninitialized(null, coords, null); + + var solution = new SolutionComponent() { Solution = prototype }; + AddComp(uid, solution); + + var relation = new ContainedSolutionComponent() { Container = container.Owner, ContainerName = name }; + AddComp(uid, relation); + + MetaDataSys.SetEntityName(uid, $"solution - {name}"); + ContainerSystem.Insert(uid, container, force: true); + + return (uid, solution, relation); + } + + public void AdjustDissolvedReagent( + Entity dissolvedSolution, + FixedPoint2 volume, + ReagentId reagent, + float concentrationChange) + { + if (concentrationChange == 0) + return; + var dissolvedSol = dissolvedSolution.Comp.Solution; + var amtChange = + GetReagentQuantityFromConcentration(dissolvedSolution, volume, MathF.Abs(concentrationChange)); + if (concentrationChange > 0) + { + dissolvedSol.AddReagent(reagent, amtChange); + } + else + { + dissolvedSol.RemoveReagent(reagent,amtChange); + } + UpdateChemicals(dissolvedSolution); + } + + public FixedPoint2 GetReagentQuantityFromConcentration(Entity dissolvedSolution, + FixedPoint2 volume,float concentration) + { + var dissolvedSol = dissolvedSolution.Comp.Solution; + if (volume == 0 + || dissolvedSol.Volume == 0) + return 0; + return concentration * volume; + } + + public float GetReagentConcentration(Entity dissolvedSolution, + FixedPoint2 volume, ReagentId dissolvedReagent) + { + var dissolvedSol = dissolvedSolution.Comp.Solution; + if (volume == 0 + || dissolvedSol.Volume == 0 + || !dissolvedSol.TryGetReagentQuantity(dissolvedReagent, out var dissolvedVol)) + return 0; + return (float)dissolvedVol / volume.Float(); + } + + public FixedPoint2 ClampReagentAmountByConcentration( + Entity dissolvedSolution, + FixedPoint2 volume, + ReagentId dissolvedReagent, + FixedPoint2 dissolvedReagentAmount, + float maxConcentration = 1f) + { + var dissolvedSol = dissolvedSolution.Comp.Solution; + if (volume == 0 + || dissolvedSol.Volume == 0 + || !dissolvedSol.TryGetReagentQuantity(dissolvedReagent, out var dissolvedVol)) + return 0; + volume *= maxConcentration; + dissolvedVol += dissolvedReagentAmount; + var overflow = volume - dissolvedVol; + if (overflow < 0) + dissolvedReagentAmount += overflow; + return dissolvedReagentAmount; + } } diff --git a/Content.Shared/Chemistry/EntitySystems/SolutionTransferSystem.cs b/Content.Shared/Chemistry/EntitySystems/SolutionTransferSystem.cs index 34a64d0edbd..b12778262c8 100644 --- a/Content.Shared/Chemistry/EntitySystems/SolutionTransferSystem.cs +++ b/Content.Shared/Chemistry/EntitySystems/SolutionTransferSystem.cs @@ -17,7 +17,6 @@ namespace Content.Shared.Chemistry.EntitySystems; /// public sealed class SolutionTransferSystem : EntitySystem { - [Dependency] private readonly INetManager _net = default!; [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!; [Dependency] private readonly SharedPopupSystem _popup = default!; [Dependency] private readonly SharedSolutionContainerSystem _solution = default!; @@ -42,7 +41,7 @@ private void OnTransferAmountSetValueMessage(Entity e var newTransferAmount = FixedPoint2.Clamp(message.Value, ent.Comp.MinimumTransferAmount, ent.Comp.MaximumTransferAmount); ent.Comp.TransferAmount = newTransferAmount; - if (message.Session.AttachedEntity is { Valid: true } user) + if (message.Actor is { Valid: true } user) _popup.PopupClient(Loc.GetString("comp-solution-transfer-set-amount", ("amount", newTransferAmount)), ent, user); } @@ -53,10 +52,9 @@ private void AddSetTransferVerbs(Entity ent, ref GetV if (!args.CanAccess || !args.CanInteract || !comp.CanChangeTransferAmount || args.Hands == null) return; - if (!TryComp(args.User, out var actor)) - return; - // Custom transfer verb + var @event = args; + args.Verbs.Add(new AlternativeVerb() { Text = Loc.GetString("comp-solution-transfer-verb-custom-amount"), @@ -64,8 +62,7 @@ private void AddSetTransferVerbs(Entity ent, ref GetV // TODO: remove server check when bui prediction is a thing Act = () => { - if (_net.IsServer) - _ui.TryOpen(uid, TransferAmountUiKey.Key, actor.PlayerSession); + _ui.OpenUi(uid, TransferAmountUiKey.Key, @event.User); }, Priority = 1 }); diff --git a/Content.Shared/Chemistry/Reaction/ReactionMixerComponent.cs b/Content.Shared/Chemistry/Reaction/ReactionMixerComponent.cs index ede73c49690..118f2240610 100644 --- a/Content.Shared/Chemistry/Reaction/ReactionMixerComponent.cs +++ b/Content.Shared/Chemistry/Reaction/ReactionMixerComponent.cs @@ -25,6 +25,3 @@ public sealed partial class ReactionMixerComponent : Component public record struct MixingAttemptEvent(EntityUid Mixed, bool Cancelled = false); public readonly record struct AfterMixingEvent(EntityUid Mixed, EntityUid Mixer); - -[ByRefEvent] -public record struct GetMixableSolutionAttemptEvent(EntityUid Mixed, Entity? MixedSolution = null); diff --git a/Content.Shared/Chemistry/Reagent/ReagentPrototype.cs b/Content.Shared/Chemistry/Reagent/ReagentPrototype.cs index 5d6d9d21208..df1b1aa20b4 100644 --- a/Content.Shared/Chemistry/Reagent/ReagentPrototype.cs +++ b/Content.Shared/Chemistry/Reagent/ReagentPrototype.cs @@ -104,6 +104,13 @@ public sealed partial class ReagentPrototype : IPrototype, IInheritingPrototype [DataField] public bool Slippery; + /// + /// How easily this reagent becomes fizzy when aggitated. + /// 0 - completely flat, 1 - fizzes up when nudged. + /// + [DataField] + public float Fizziness; + /// /// How much reagent slows entities down if it's part of a puddle. /// 0 - no slowdown; 1 - can't move. diff --git a/Content.Shared/Chemistry/SharedReagentDispenser.cs b/Content.Shared/Chemistry/SharedReagentDispenser.cs index 2b9c318c58d..5de3f6cae35 100644 --- a/Content.Shared/Chemistry/SharedReagentDispenser.cs +++ b/Content.Shared/Chemistry/SharedReagentDispenser.cs @@ -20,6 +20,46 @@ public ReagentDispenserSetDispenseAmountMessage(ReagentDispenserDispenseAmount a { ReagentDispenserDispenseAmount = amount; } + + /// + /// Create a new instance from interpreting a String as an integer, + /// throwing an exception if it is unable to parse. + /// + public ReagentDispenserSetDispenseAmountMessage(String s) + { + switch (s) + { + case "1": + ReagentDispenserDispenseAmount = ReagentDispenserDispenseAmount.U1; + break; + case "5": + ReagentDispenserDispenseAmount = ReagentDispenserDispenseAmount.U5; + break; + case "10": + ReagentDispenserDispenseAmount = ReagentDispenserDispenseAmount.U10; + break; + case "15": + ReagentDispenserDispenseAmount = ReagentDispenserDispenseAmount.U15; + break; + case "20": + ReagentDispenserDispenseAmount = ReagentDispenserDispenseAmount.U20; + break; + case "25": + ReagentDispenserDispenseAmount = ReagentDispenserDispenseAmount.U25; + break; + case "30": + ReagentDispenserDispenseAmount = ReagentDispenserDispenseAmount.U30; + break; + case "50": + ReagentDispenserDispenseAmount = ReagentDispenserDispenseAmount.U50; + break; + case "100": + ReagentDispenserDispenseAmount = ReagentDispenserDispenseAmount.U100; + break; + default: + throw new Exception($"Cannot convert the string `{s}` into a valid ReagentDispenser DispenseAmount"); + } + } } [Serializable, NetSerializable] @@ -52,20 +92,30 @@ public enum ReagentDispenserDispenseAmount U100 = 100, } + [Serializable, NetSerializable] + public sealed class ReagentInventoryItem(string storageSlotId, string reagentLabel, string storedAmount, Color reagentColor) + { + public string StorageSlotId = storageSlotId; + public string ReagentLabel = reagentLabel; + public string StoredAmount = storedAmount; + public Color ReagentColor = reagentColor; + } + [Serializable, NetSerializable] public sealed class ReagentDispenserBoundUserInterfaceState : BoundUserInterfaceState { public readonly ContainerInfo? OutputContainer; public readonly NetEntity? OutputContainerEntity; + /// /// A list of the reagents which this dispenser can dispense. /// - public readonly List>> Inventory; + public readonly List Inventory; public readonly ReagentDispenserDispenseAmount SelectedDispenseAmount; - public ReagentDispenserBoundUserInterfaceState(ContainerInfo? outputContainer, NetEntity? outputContainerEntity, List>> inventory, ReagentDispenserDispenseAmount selectedDispenseAmount) + public ReagentDispenserBoundUserInterfaceState(ContainerInfo? outputContainer, NetEntity? outputContainerEntity, List inventory, ReagentDispenserDispenseAmount selectedDispenseAmount) { OutputContainer = outputContainer; OutputContainerEntity = outputContainerEntity; diff --git a/Content.Shared/Climbing/Systems/BonkSystem.cs b/Content.Shared/Climbing/Systems/BonkSystem.cs index 08ca63368a8..c7c89a3b7fa 100644 --- a/Content.Shared/Climbing/Systems/BonkSystem.cs +++ b/Content.Shared/Climbing/Systems/BonkSystem.cs @@ -108,17 +108,16 @@ private bool TryStartBonk(EntityUid uid, EntityUid user, EntityUid climber, Bonk { BreakOnTargetMove = true, BreakOnUserMove = true, - BreakOnDamage = true + BreakOnDamage = true, + DuplicateCondition = DuplicateConditions.SameTool | DuplicateConditions.SameTarget }; - _doAfter.TryStartDoAfter(doAfterArgs); - - return true; + return _doAfter.TryStartDoAfter(doAfterArgs); } - private void OnAttemptClimb(EntityUid uid, BonkableComponent component, AttemptClimbEvent args) + private void OnAttemptClimb(EntityUid uid, BonkableComponent component, ref AttemptClimbEvent args) { - if (args.Cancelled || !HasComp(args.Climber) || !HasComp(args.User)) + if (args.Cancelled) return; if (TryStartBonk(uid, args.User, args.Climber, component)) diff --git a/Content.Shared/Climbing/Systems/ClimbSystem.cs b/Content.Shared/Climbing/Systems/ClimbSystem.cs index 521f5ace99d..c570a821a6f 100644 --- a/Content.Shared/Climbing/Systems/ClimbSystem.cs +++ b/Content.Shared/Climbing/Systems/ClimbSystem.cs @@ -228,7 +228,8 @@ public bool TryClimb( { BreakOnTargetMove = true, BreakOnUserMove = true, - BreakOnDamage = true + BreakOnDamage = true, + DuplicateCondition = DuplicateConditions.SameTool | DuplicateConditions.SameTarget }; _audio.PlayPredicted(comp.StartClimbSound, climbable, user); @@ -473,6 +474,11 @@ public void ForciblySetClimbing(EntityUid uid, EntityUid climbable, ClimbingComp Climb(uid, uid, climbable, true, component); } + public void ForciblyStopClimbing(EntityUid uid, ClimbingComponent? climbing = null, FixturesComponent? fixtures = null) + { + StopClimb(uid, climbing, fixtures); + } + private void OnBuckleChange(EntityUid uid, ClimbingComponent component, ref BuckleChangeEvent args) { if (!args.Buckling) diff --git a/Content.Shared/Cloning/CloningPodComponent.cs b/Content.Shared/Cloning/CloningPodComponent.cs index 082b92e8b14..c9a6fd4500b 100644 --- a/Content.Shared/Cloning/CloningPodComponent.cs +++ b/Content.Shared/Cloning/CloningPodComponent.cs @@ -1,3 +1,4 @@ +using Content.Shared.Construction.Prototypes; using Content.Shared.DeviceLinking; using Content.Shared.Materials; using Content.Shared.Random; @@ -38,6 +39,18 @@ public sealed partial class CloningPodComponent : Component [DataField] public ProtoId RequiredMaterial = "Biomass"; + /// + /// The multiplier for cloning duration + /// + [DataField] + public float PartRatingSpeedMultiplier = 0.75f; + + /// + /// The machine part that affects cloning speed + /// + [DataField] + public ProtoId MachinePartCloningSpeed = "Manipulator"; + /// /// The current amount of time it takes to clone a body /// @@ -66,6 +79,18 @@ public sealed partial class CloningPodComponent : Component Params = AudioParams.Default.WithVolume(4), }; + /// + /// The machine part that affects how much biomass is needed to clone a body. + /// + [DataField] + public float PartRatingMaterialMultiplier = 0.85f; + + /// + /// The machine part that decreases the amount of material needed for cloning + /// + [DataField] + public ProtoId MachinePartMaterialUse = "MatterBin"; + [ViewVariables(VVAccess.ReadWrite)] public CloningPodStatus Status; diff --git a/Content.Shared/Clothing/ClothingEvents.cs b/Content.Shared/Clothing/ClothingEvents.cs index 1dcce2402ae..83afea45973 100644 --- a/Content.Shared/Clothing/ClothingEvents.cs +++ b/Content.Shared/Clothing/ClothingEvents.cs @@ -1,5 +1,6 @@ using Content.Shared.Actions; +using Content.Shared.Clothing.Components; namespace Content.Shared.Clothing; @@ -71,3 +72,31 @@ public sealed partial class ToggleMaskEvent : InstantActionEvent { } /// [ByRefEvent] public readonly record struct WearerMaskToggledEvent(bool IsToggled); + +/// +/// Raised on the clothing entity when it is equipped to a valid slot, +/// as determined by . +/// +[ByRefEvent] +public readonly record struct ClothingGotEquippedEvent(EntityUid Wearer, ClothingComponent Clothing); + +/// +/// Raised on the clothing entity when it is unequipped from a valid slot, +/// as determined by . +/// +[ByRefEvent] +public readonly record struct ClothingGotUnequippedEvent(EntityUid Wearer, ClothingComponent Clothing); + +/// +/// Raised on an entity when they equip a clothing item to a valid slot, +/// as determined by . +/// +[ByRefEvent] +public readonly record struct ClothingDidEquippedEvent(Entity Clothing); + +/// +/// Raised on an entity when they unequip a clothing item from a valid slot, +/// as determined by . +/// +[ByRefEvent] +public readonly record struct ClothingDidUnequippedEvent(Entity Clothing); diff --git a/Content.Shared/Clothing/Components/ClothingComponent.cs b/Content.Shared/Clothing/Components/ClothingComponent.cs index 0f4c7f68bfc..6d7226e767d 100644 --- a/Content.Shared/Clothing/Components/ClothingComponent.cs +++ b/Content.Shared/Clothing/Components/ClothingComponent.cs @@ -66,6 +66,9 @@ public sealed partial class ClothingComponent : Component [DataField("unisexMask")] public ClothingMask UnisexMask = ClothingMask.UniformFull; + /// + /// Name of the inventory slot the clothing is in. + /// public string? InSlot; [DataField, ViewVariables(VVAccess.ReadWrite)] diff --git a/Content.Shared/Clothing/Components/FireProtectionComponent.cs b/Content.Shared/Clothing/Components/FireProtectionComponent.cs new file mode 100644 index 00000000000..cafa6e5359e --- /dev/null +++ b/Content.Shared/Clothing/Components/FireProtectionComponent.cs @@ -0,0 +1,17 @@ +using Content.Shared.Clothing.EntitySystems; + +namespace Content.Shared.Clothing.Components; + +/// +/// Makes this clothing reduce fire damage when worn. +/// +[RegisterComponent, Access(typeof(FireProtectionSystem))] +public sealed partial class FireProtectionComponent : Component +{ + /// + /// Percentage to reduce fire damage by, subtracted not multiplicative. + /// 0.25 means 25% less fire damage. + /// + [DataField(required: true)] + public float Reduction; +} diff --git a/Content.Shared/Clothing/Components/HideLayerClothingComponent.cs b/Content.Shared/Clothing/Components/HideLayerClothingComponent.cs new file mode 100644 index 00000000000..ac3d9b97896 --- /dev/null +++ b/Content.Shared/Clothing/Components/HideLayerClothingComponent.cs @@ -0,0 +1,24 @@ +using Content.Shared.Humanoid; +using Robust.Shared.GameStates; + +namespace Content.Shared.Clothing.Components; + +/// +/// This is used for a clothing item that hides an appearance layer. +/// The entity's HumanoidAppearance component must have the corresponding hideLayerOnEquip value. +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class HideLayerClothingComponent : Component +{ + /// + /// The appearance layer to hide. + /// + [DataField] + public HashSet Slots = new(); + + /// + /// If true, the layer will only hide when the item is in a toggled state (e.g. masks) + /// + [DataField] + public bool HideOnToggle = false; +} diff --git a/Content.Shared/Clothing/Components/LoadoutComponent.cs b/Content.Shared/Clothing/Components/LoadoutComponent.cs index a3c6efe2a0b..612286e6e69 100644 --- a/Content.Shared/Clothing/Components/LoadoutComponent.cs +++ b/Content.Shared/Clothing/Components/LoadoutComponent.cs @@ -1,16 +1,15 @@ using Content.Shared.Roles; using Robust.Shared.GameStates; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.List; +using Robust.Shared.Prototypes; namespace Content.Shared.Clothing.Components; [RegisterComponent, NetworkedComponent, AutoGenerateComponentState] public sealed partial class LoadoutComponent : Component { - /// /// A list of starting gears, of which one will be given. /// All elements are weighted the same in the list. - /// - [DataField("prototypes", required: true, customTypeSerializer: typeof(PrototypeIdListSerializer)), AutoNetworkedField] - public List? Prototypes; + [DataField("prototypes")] + [AutoNetworkedField] + public List>? StartingGear; } diff --git a/Content.Shared/Clothing/EntitySystems/ClothingSystem.cs b/Content.Shared/Clothing/EntitySystems/ClothingSystem.cs index b407b867f74..9e3f917e96f 100644 --- a/Content.Shared/Clothing/EntitySystems/ClothingSystem.cs +++ b/Content.Shared/Clothing/EntitySystems/ClothingSystem.cs @@ -6,31 +6,18 @@ using Content.Shared.Inventory; using Content.Shared.Inventory.Events; using Content.Shared.Item; -using Content.Shared.Tag; -using Robust.Shared.GameStates; -using System.Linq; using Robust.Shared.Containers; +using Robust.Shared.GameStates; namespace Content.Shared.Clothing.EntitySystems; public abstract class ClothingSystem : EntitySystem { [Dependency] private readonly SharedItemSystem _itemSys = default!; + [Dependency] private readonly SharedContainerSystem _containerSys = default!; [Dependency] private readonly SharedHumanoidAppearanceSystem _humanoidSystem = default!; - [Dependency] private readonly TagSystem _tagSystem = default!; [Dependency] private readonly InventorySystem _invSystem = default!; [Dependency] private readonly SharedHandsSystem _handsSystem = default!; - [Dependency] private readonly SharedContainerSystem _containerSys = default!; - - [ValidatePrototypeId] - private const string HairTag = "HidesHair"; - - [ValidatePrototypeId] - private const string NoseTag = "HidesNose"; - - [ValidatePrototypeId] - - private const string BeardTag = "HidesBeard"; public override void Initialize() { @@ -101,61 +88,71 @@ private void QuickEquip( } } - private void ToggleVisualLayer(EntityUid equipee, HumanoidVisualLayers layer, string tag) + private void ToggleVisualLayers(EntityUid equipee, HashSet layers, HashSet appearanceLayers) { - InventorySystem.InventorySlotEnumerator enumerator = _invSystem.GetSlotEnumerator(equipee, SlotFlags.HEAD ^ SlotFlags.MASK); - bool shouldLayerShow = true; - - while (enumerator.NextItem(out EntityUid item)) + foreach (HumanoidVisualLayers layer in layers) { - if (_tagSystem.HasTag(item, tag)) + if (!appearanceLayers.Contains(layer)) + break; + + InventorySystem.InventorySlotEnumerator enumerator = _invSystem.GetSlotEnumerator(equipee); + + bool shouldLayerShow = true; + while (enumerator.NextItem(out EntityUid item)) { - if (tag == NoseTag || tag == BeardTag) // Special check for NoseTag or BeardTag, due to masks being toggleable + if (TryComp(item, out HideLayerClothingComponent? comp)) { - if (TryComp(item, out MaskComponent? mask) && TryComp(item, out ClothingComponent? clothing)) + if (comp.Slots.Contains(layer)) { - if (clothing.EquippedPrefix != mask.EquippedPrefix) + //Checks for mask toggling. TODO: Make a generic system for this + if (comp.HideOnToggle && TryComp(item, out MaskComponent? mask) && TryComp(item, out ClothingComponent? clothing)) + { + if (clothing.EquippedPrefix != mask.EquippedPrefix) + { + shouldLayerShow = false; + break; + } + } + else { shouldLayerShow = false; break; } } - else - { - shouldLayerShow = false; - break; - } - } - else - { - shouldLayerShow = false; - break; } } + _humanoidSystem.SetLayerVisibility(equipee, layer, shouldLayerShow); } - _humanoidSystem.SetLayerVisibility(equipee, layer, shouldLayerShow); } protected virtual void OnGotEquipped(EntityUid uid, ClothingComponent component, GotEquippedEvent args) { component.InSlot = args.Slot; - if ((new string[] { "head" }).Contains(args.Slot) && _tagSystem.HasTag(args.Equipment, HairTag)) - ToggleVisualLayer(args.Equipee, HumanoidVisualLayers.Hair, HairTag); - if ((new string[] { "mask", "head" }).Contains(args.Slot) && _tagSystem.HasTag(args.Equipment, NoseTag)) - ToggleVisualLayer(args.Equipee, HumanoidVisualLayers.Snout, NoseTag); - if ((new string[] { "mask", "head" }).Contains(args.Slot) && _tagSystem.HasTag(args.Equipment, BeardTag)) - ToggleVisualLayer(args.Equipee, HumanoidVisualLayers.FacialHair, BeardTag); + CheckEquipmentForLayerHide(args.Equipment, args.Equipee); + + if ((component.Slots & args.SlotFlags) != SlotFlags.NONE) + { + var gotEquippedEvent = new ClothingGotEquippedEvent(args.Equipee, component); + RaiseLocalEvent(uid, ref gotEquippedEvent); + + var didEquippedEvent = new ClothingDidEquippedEvent((uid, component)); + RaiseLocalEvent(args.Equipee, ref didEquippedEvent); + } } protected virtual void OnGotUnequipped(EntityUid uid, ClothingComponent component, GotUnequippedEvent args) { + if ((component.Slots & args.SlotFlags) != SlotFlags.NONE) + { + var gotUnequippedEvent = new ClothingGotUnequippedEvent(args.Equipee, component); + RaiseLocalEvent(uid, ref gotUnequippedEvent); + + var didUnequippedEvent = new ClothingDidUnequippedEvent((uid, component)); + RaiseLocalEvent(args.Equipee, ref didUnequippedEvent); + } + component.InSlot = null; - if ((new string[] { "head" }).Contains(args.Slot) && _tagSystem.HasTag(args.Equipment, HairTag)) - ToggleVisualLayer(args.Equipee, HumanoidVisualLayers.Hair, HairTag); - if ((new string[] { "mask", "head" }).Contains(args.Slot) && _tagSystem.HasTag(args.Equipment, NoseTag)) - ToggleVisualLayer(args.Equipee, HumanoidVisualLayers.Snout, NoseTag); - if ((new string[] { "mask", "head" }).Contains(args.Slot) && _tagSystem.HasTag(args.Equipment, BeardTag)) - ToggleVisualLayer(args.Equipee, HumanoidVisualLayers.FacialHair, BeardTag); + CheckEquipmentForLayerHide(args.Equipment, args.Equipee); } private void OnGetState(EntityUid uid, ClothingComponent component, ref ComponentGetState args) @@ -166,15 +163,20 @@ private void OnGetState(EntityUid uid, ClothingComponent component, ref Componen private void OnHandleState(EntityUid uid, ClothingComponent component, ref ComponentHandleState args) { if (args.Current is ClothingComponentState state) + { SetEquippedPrefix(uid, state.EquippedPrefix, component); + if (component.InSlot != null && _containerSys.TryGetContainingContainer(uid, out var container)) + { + CheckEquipmentForLayerHide(uid, container.Owner); + } + } } private void OnMaskToggled(Entity ent, ref ItemMaskToggledEvent args) { //TODO: sprites for 'pulled down' state. defaults to invisible due to no sprite with this prefix SetEquippedPrefix(ent, args.IsToggled ? args.equippedPrefix : null, ent); - ToggleVisualLayer(args.Wearer, HumanoidVisualLayers.Snout, NoseTag); - ToggleVisualLayer(args.Wearer, HumanoidVisualLayers.FacialHair, BeardTag); + CheckEquipmentForLayerHide(ent.Owner, args.Wearer); } private void OnPickedUp(Entity ent, ref GettingPickedUpAttemptEvent args) @@ -205,6 +207,12 @@ private void OnUnequipDoAfter(Entity ent, ref ClothingUnequip _handsSystem.TryPickup(args.User, ent); } + private void CheckEquipmentForLayerHide(EntityUid equipment, EntityUid equipee) + { + if (TryComp(equipment, out HideLayerClothingComponent? clothesComp) && TryComp(equipee, out HumanoidAppearanceComponent? appearanceComp)) + ToggleVisualLayers(equipee, clothesComp.Slots, appearanceComp.HideLayersOnEquip); + } + #region Public API public void SetEquippedPrefix(EntityUid uid, string? prefix, ClothingComponent? clothing = null) diff --git a/Content.Shared/Clothing/EntitySystems/FireProtectionSystem.cs b/Content.Shared/Clothing/EntitySystems/FireProtectionSystem.cs new file mode 100644 index 00000000000..6f80bc05882 --- /dev/null +++ b/Content.Shared/Clothing/EntitySystems/FireProtectionSystem.cs @@ -0,0 +1,23 @@ +using Content.Shared.Atmos; +using Content.Shared.Clothing.Components; +using Content.Shared.Inventory; + +namespace Content.Shared.Clothing.EntitySystems; + +/// +/// Handles reducing fire damage when wearing clothing with . +/// +public sealed class FireProtectionSystem : EntitySystem +{ + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent>(OnGetProtection); + } + + private void OnGetProtection(Entity ent, ref InventoryRelayedEvent args) + { + args.Args.Reduce(ent.Comp.Reduction); + } +} diff --git a/Content.Shared/Clothing/EntitySystems/MaskSystem.cs b/Content.Shared/Clothing/EntitySystems/MaskSystem.cs index aab2a172dc1..2a4383279a5 100644 --- a/Content.Shared/Clothing/EntitySystems/MaskSystem.cs +++ b/Content.Shared/Clothing/EntitySystems/MaskSystem.cs @@ -42,12 +42,10 @@ private void OnToggleMask(Entity ent, ref ToggleMaskEvent args) return; mask.IsToggled ^= true; - _actionSystem.SetToggled(mask.ToggleActionEntity, mask.IsToggled); - if (mask.IsToggled) - _popupSystem.PopupEntity(Loc.GetString("action-mask-pull-down-popup-message", ("mask", uid)), args.Performer, args.Performer); - else - _popupSystem.PopupEntity(Loc.GetString("action-mask-pull-up-popup-message", ("mask", uid)), args.Performer, args.Performer); + var dir = mask.IsToggled ? "down" : "up"; + var msg = $"action-mask-pull-{dir}-popup-message"; + _popupSystem.PopupClient(Loc.GetString(msg, ("mask", uid)), args.Performer, args.Performer); ToggleMaskComponents(uid, mask, args.Performer, mask.EquippedPrefix); } @@ -55,18 +53,22 @@ private void OnToggleMask(Entity ent, ref ToggleMaskEvent args) // set to untoggled when unequipped, so it isn't left in a 'pulled down' state private void OnGotUnequipped(EntityUid uid, MaskComponent mask, GotUnequippedEvent args) { - if (mask.ToggleActionEntity == null) + if (!mask.IsToggled) return; mask.IsToggled = false; - Dirty(uid, mask); - _actionSystem.SetToggled(mask.ToggleActionEntity, mask.IsToggled); - ToggleMaskComponents(uid, mask, args.Equipee, mask.EquippedPrefix, true); } + /// + /// Called after setting IsToggled, raises events and dirties. + /// private void ToggleMaskComponents(EntityUid uid, MaskComponent mask, EntityUid wearer, string? equippedPrefix = null, bool isEquip = false) { + Dirty(uid, mask); + if (mask.ToggleActionEntity is {} action) + _actionSystem.SetToggled(action, mask.IsToggled); + var maskEv = new ItemMaskToggledEvent(wearer, equippedPrefix, mask.IsToggled, isEquip); RaiseLocalEvent(uid, ref maskEv); diff --git a/Content.Shared/Clothing/EntitySystems/SkatesSystem.cs b/Content.Shared/Clothing/EntitySystems/SkatesSystem.cs index 7d748a67a45..bbb640bd986 100644 --- a/Content.Shared/Clothing/EntitySystems/SkatesSystem.cs +++ b/Content.Shared/Clothing/EntitySystems/SkatesSystem.cs @@ -17,34 +17,28 @@ public override void Initialize() { base.Initialize(); - SubscribeLocalEvent(OnGotEquipped); - SubscribeLocalEvent(OnGotUnequipped); + SubscribeLocalEvent(OnGotEquipped); + SubscribeLocalEvent(OnGotUnequipped); } /// /// When item is unequipped from the shoe slot, friction, aceleration and collide on impact return to default settings. /// - public void OnGotUnequipped(EntityUid uid, SkatesComponent component, GotUnequippedEvent args) + public void OnGotUnequipped(EntityUid uid, SkatesComponent component, ClothingGotUnequippedEvent args) { - if (!TryComp(args.Equipee, out MovementSpeedModifierComponent? speedModifier)) + if (!TryComp(args.Wearer, out MovementSpeedModifierComponent? speedModifier)) return; - if (args.Slot == "shoes") - { - _move.ChangeFriction(args.Equipee, MovementSpeedModifierComponent.DefaultFriction, MovementSpeedModifierComponent.DefaultFrictionNoInput, MovementSpeedModifierComponent.DefaultAcceleration, speedModifier); - _impact.ChangeCollide(args.Equipee, component.DefaultMinimumSpeed, component.DefaultStunSeconds, component.DefaultDamageCooldown, component.DefaultSpeedDamage); - } + _move.ChangeFriction(args.Wearer, MovementSpeedModifierComponent.DefaultFriction, MovementSpeedModifierComponent.DefaultFrictionNoInput, MovementSpeedModifierComponent.DefaultAcceleration, speedModifier); + _impact.ChangeCollide(args.Wearer, component.DefaultMinimumSpeed, component.DefaultStunSeconds, component.DefaultDamageCooldown, component.DefaultSpeedDamage); } /// /// When item is equipped into the shoe slot, friction, acceleration and collide on impact are adjusted. /// - private void OnGotEquipped(EntityUid uid, SkatesComponent component, GotEquippedEvent args) + private void OnGotEquipped(EntityUid uid, SkatesComponent component, ClothingGotEquippedEvent args) { - if (args.Slot == "shoes") - { - _move.ChangeFriction(args.Equipee, component.Friction, component.FrictionNoInput, component.Acceleration); - _impact.ChangeCollide(args.Equipee, component.MinimumSpeed, component.StunSeconds, component.DamageCooldown, component.SpeedDamage); - } + _move.ChangeFriction(args.Wearer, component.Friction, component.FrictionNoInput, component.Acceleration); + _impact.ChangeCollide(args.Wearer, component.MinimumSpeed, component.StunSeconds, component.DamageCooldown, component.SpeedDamage); } } diff --git a/Content.Shared/Clothing/Loadouts/Prototypes/LoadoutCategoryPrototype.cs b/Content.Shared/Clothing/Loadouts/Prototypes/LoadoutCategoryPrototype.cs index 26567d0c13b..2d008e437d1 100644 --- a/Content.Shared/Clothing/Loadouts/Prototypes/LoadoutCategoryPrototype.cs +++ b/Content.Shared/Clothing/Loadouts/Prototypes/LoadoutCategoryPrototype.cs @@ -7,7 +7,7 @@ namespace Content.Shared.Clothing.Loadouts.Prototypes; /// A prototype defining a valid category for s to go into. /// [Prototype] -public sealed class LoadoutCategoryPrototype : IPrototype +public sealed partial class LoadoutCategoryPrototype : IPrototype { [IdDataField] public string ID { get; } = default!; diff --git a/Content.Shared/Clothing/Loadouts/Prototypes/LoadoutPrototype.cs b/Content.Shared/Clothing/Loadouts/Prototypes/LoadoutPrototype.cs index 74cfa1d4e86..19c2bf59f1f 100644 --- a/Content.Shared/Clothing/Loadouts/Prototypes/LoadoutPrototype.cs +++ b/Content.Shared/Clothing/Loadouts/Prototypes/LoadoutPrototype.cs @@ -8,7 +8,7 @@ namespace Content.Shared.Clothing.Loadouts.Prototypes; [Prototype] -public sealed class LoadoutPrototype : IPrototype +public sealed partial class LoadoutPrototype : IPrototype { /// /// Formatted like "Loadout[Department/ShortHeadName][CommonClothingSlot][SimplifiedClothingId]", example: "LoadoutScienceOuterLabcoatSeniorResearcher" diff --git a/Content.Shared/Clothing/Loadouts/Systems/LoadoutSystem.cs b/Content.Shared/Clothing/Loadouts/Systems/LoadoutSystem.cs index 5a2f1b2da90..7ee0676f9ef 100644 --- a/Content.Shared/Clothing/Loadouts/Systems/LoadoutSystem.cs +++ b/Content.Shared/Clothing/Loadouts/Systems/LoadoutSystem.cs @@ -31,10 +31,11 @@ public override void Initialize() private void OnMapInit(EntityUid uid, LoadoutComponent component, MapInitEvent args) { - if (component.Prototypes == null) + if (component.StartingGear is null + || component.StartingGear.Count <= 0) return; - var proto = _prototype.Index(_random.Pick(component.Prototypes)); + var proto = _prototype.Index(_random.Pick(component.StartingGear)); _station.EquipStartingGear(uid, proto); } diff --git a/Content.Shared/Cocoon/CocoonComponent.cs b/Content.Shared/Cocoon/CocoonComponent.cs new file mode 100644 index 00000000000..66ba6e6dd37 --- /dev/null +++ b/Content.Shared/Cocoon/CocoonComponent.cs @@ -0,0 +1,14 @@ +namespace Content.Shared.Cocoon +{ + [RegisterComponent] + public sealed partial class CocoonComponent : Component + { + public string? OldAccent; + + public EntityUid? Victim; + + [DataField("damagePassthrough")] + public float DamagePassthrough = 0.5f; + + } +} diff --git a/Content.Shared/Cocoon/CocoonDoAfterEvent.cs b/Content.Shared/Cocoon/CocoonDoAfterEvent.cs new file mode 100644 index 00000000000..0b9049e9890 --- /dev/null +++ b/Content.Shared/Cocoon/CocoonDoAfterEvent.cs @@ -0,0 +1,15 @@ +using Robust.Shared.Serialization; +using Content.Shared.DoAfter; + +namespace Content.Shared.Cocoon +{ + [Serializable, NetSerializable] + public sealed partial class CocoonDoAfterEvent : SimpleDoAfterEvent + { + } + + [Serializable, NetSerializable] + public sealed partial class UnCocoonDoAfterEvent : SimpleDoAfterEvent + { + } +} diff --git a/Content.Shared/Cocoon/CocoonerComponent.cs b/Content.Shared/Cocoon/CocoonerComponent.cs new file mode 100644 index 00000000000..17cce973096 --- /dev/null +++ b/Content.Shared/Cocoon/CocoonerComponent.cs @@ -0,0 +1,14 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Cocoon +{ + [RegisterComponent, NetworkedComponent] + public sealed partial class CocoonerComponent : Component + { + [DataField("cocoonDelay")] + public float CocoonDelay = 12f; + + [DataField("cocoonKnockdownMultiplier")] + public float CocoonKnockdownMultiplier = 0.5f; + } +} diff --git a/Content.Shared/Construction/MachinePartSystem.cs b/Content.Shared/Construction/MachinePartSystem.cs index 1a19040b410..01db7fbade3 100644 --- a/Content.Shared/Construction/MachinePartSystem.cs +++ b/Content.Shared/Construction/MachinePartSystem.cs @@ -21,6 +21,7 @@ public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnMachineBoardExamined); + SubscribeLocalEvent(OnMachinePartExamined); } private void OnMachineBoardExamined(EntityUid uid, MachineBoardComponent component, ExaminedEvent args) @@ -61,6 +62,20 @@ private void OnMachineBoardExamined(EntityUid uid, MachineBoardComponent compone } } + private void OnMachinePartExamined(EntityUid uid, MachinePartComponent component, ExaminedEvent args) + { + if (!args.IsInDetailsRange) + return; + + using (args.PushGroup(nameof(MachinePartComponent))) + { + args.PushMarkup(Loc.GetString("machine-part-component-on-examine-rating-text", + ("rating", component.Rating))); + args.PushMarkup(Loc.GetString("machine-part-component-on-examine-type-text", ("type", + Loc.GetString(_prototype.Index(component.PartType).Name)))); + } + } + public Dictionary GetMachineBoardMaterialCost(Entity entity, int coefficient = 1) { var (_, comp) = entity; diff --git a/Content.Shared/Containers/ContainerFillComponent.cs b/Content.Shared/Containers/ContainerFillComponent.cs index 8c63cbc66af..7ce5fa88502 100644 --- a/Content.Shared/Containers/ContainerFillComponent.cs +++ b/Content.Shared/Containers/ContainerFillComponent.cs @@ -1,4 +1,5 @@ using Content.Shared.Storage; +using Content.Shared.Storage.Components; using Robust.Shared.Prototypes; using Robust.Shared.Serialization.Manager; using Robust.Shared.Serialization.Markdown.Mapping; diff --git a/Content.Shared/Containers/ItemSlot/ItemSlotsSystem.cs b/Content.Shared/Containers/ItemSlot/ItemSlotsSystem.cs index c7932ef8f75..cb6b2a747bc 100644 --- a/Content.Shared/Containers/ItemSlot/ItemSlotsSystem.cs +++ b/Content.Shared/Containers/ItemSlot/ItemSlotsSystem.cs @@ -633,9 +633,9 @@ private void HandleButtonPressed(EntityUid uid, ItemSlotsComponent component, It return; if (args.TryEject && slot.HasItem) - TryEjectToHands(uid, slot, args.Session.AttachedEntity, false); - else if (args.TryInsert && !slot.HasItem && args.Session.AttachedEntity is EntityUid user) - TryInsertFromHand(uid, slot, user); + TryEjectToHands(uid, slot, args.Actor, true); + else if (args.TryInsert && !slot.HasItem) + TryInsertFromHand(uid, slot, args.Actor); } #endregion diff --git a/Content.Shared/Content.Shared.csproj b/Content.Shared/Content.Shared.csproj index 9752bfcfe2d..4cca399b28b 100644 --- a/Content.Shared/Content.Shared.csproj +++ b/Content.Shared/Content.Shared.csproj @@ -23,9 +23,6 @@ false - - - diff --git a/Content.Shared/Contests/ContestsSystem.Utilities.cs b/Content.Shared/Contests/ContestsSystem.Utilities.cs index 42a69bff478..2bcb6dcc322 100644 --- a/Content.Shared/Contests/ContestsSystem.Utilities.cs +++ b/Content.Shared/Contests/ContestsSystem.Utilities.cs @@ -1,4 +1,5 @@ using Content.Shared.CCVar; +using Robust.Shared.Serialization; namespace Content.Shared.Contests; public sealed partial class ContestsSystem @@ -18,4 +19,265 @@ private bool ContestClampOverride(bool bypassClamp) { return _cfg.GetCVar(CCVars.AllowClampOverride) && bypassClamp; } + + /// + /// Constructor for feeding options from a given set of ContestArgs into the ContestsSystem. + /// Just multiply by this and give it a user EntityUid and a ContestArgs variable. That's all you need to know. + /// + public float ContestConstructor(EntityUid user, ContestArgs args) + { + if (!_cfg.GetCVar(CCVars.DoContestsSystem)) + return 1; + + if (!args.DoEveryInteraction) + return args.DoMassInteraction ? ((args.MassDisadvantage + ? MassContest(user, args.MassBypassClamp, args.MassRangeModifier) + : 1 / MassContest(user, args.MassBypassClamp, args.MassRangeModifier)) + + args.MassOffset) + : 1 + * (args.DoStaminaInteraction ? ((args.StaminaDisadvantage + ? StaminaContest(user, args.StaminaBypassClamp, args.StaminaRangeModifier) + : 1 / StaminaContest(user, args.StaminaBypassClamp, args.StaminaRangeModifier)) + + args.StaminaOffset) + : 1) + * (args.DoHealthInteraction ? ((args.HealthDisadvantage + ? HealthContest(user, args.HealthBypassClamp, args.HealthRangeModifier) + : 1 / HealthContest(user, args.HealthBypassClamp, args.HealthRangeModifier)) + + args.HealthOffset) + : 1) + * (args.DoMindInteraction ? ((args.MindDisadvantage + ? MindContest(user, args.MindBypassClamp, args.MindRangeModifier) + : 1 / MindContest(user, args.MindBypassClamp, args.MindRangeModifier)) + + args.MindOffset) + : 1) + * (args.DoMoodInteraction ? ((args.MoodDisadvantage + ? MoodContest(user, args.MoodBypassClamp, args.MoodRangeModifier) + : 1 / MoodContest(user, args.MoodBypassClamp, args.MoodRangeModifier)) + + args.MoodOffset) + : 1); + + var everyContest = EveryContest(user, + args.MassBypassClamp, + args.StaminaBypassClamp, + args.HealthBypassClamp, + args.MindBypassClamp, + args.MoodBypassClamp, + args.MassRangeModifier, + args.StaminaRangeModifier, + args.HealthRangeModifier, + args.MindRangeModifier, + args.MoodRangeModifier, + args.EveryMassWeight, + args.EveryStaminaWeight, + args.EveryHealthWeight, + args.EveryMindWeight, + args.EveryMoodWeight, + args.EveryInteractionSumOrMultiply); + + return !args.EveryDisadvantage ? everyContest : 1 / everyContest; + } +} + +[Serializable, NetSerializable, DataDefinition] +public sealed partial class ContestArgs +{ + /// + /// Controls whether this melee weapon allows for mass to factor into damage. + /// + [DataField] + public bool DoMassInteraction; + + /// + /// When true, mass provides a disadvantage. + /// + [DataField] + public bool MassDisadvantage; + + /// + /// When true, mass contests ignore clamp limitations for a melee weapon. + /// + [DataField] + public bool MassBypassClamp; + + /// + /// Multiplies the acceptable range of outputs provided by mass contests for melee. + /// + [DataField] + public float MassRangeModifier = 1; + + /// + /// The output of a mass contest is increased by this amount. + /// + [DataField] + public float MassOffset; + + /// + /// Controls whether this melee weapon allows for stamina to factor into damage. + /// + [DataField] + public bool DoStaminaInteraction; + + /// + /// When true, stamina provides a disadvantage. + /// + [DataField] + public bool StaminaDisadvantage; + + /// + /// When true, stamina contests ignore clamp limitations for a melee weapon. + /// + [DataField] + public bool StaminaBypassClamp; + + /// + /// Multiplies the acceptable range of outputs provided by mass contests for melee. + /// + [DataField] + public float StaminaRangeModifier = 1; + + /// + /// The output of a stamina contest is increased by this amount. + /// + [DataField] + public float StaminaOffset; + + /// + /// Controls whether this melee weapon allows for health to factor into damage. + /// + [DataField] + public bool DoHealthInteraction; + + /// + /// When true, health contests provide a disadvantage. + /// + [DataField] + public bool HealthDisadvantage; + + /// + /// When true, health contests ignore clamp limitations for a melee weapon. + /// + [DataField] + public bool HealthBypassClamp; + + /// + /// Multiplies the acceptable range of outputs provided by mass contests for melee. + /// + [DataField] + public float HealthRangeModifier = 1; + + /// + /// The output of health contests is increased by this amount. + /// + [DataField] + public float HealthOffset; + + /// + /// Controls whether this melee weapon allows for psychic casting stats to factor into damage. + /// + [DataField] + public bool DoMindInteraction; + + /// + /// When true, high psychic casting stats provide a disadvantage. + /// + [DataField] + public bool MindDisadvantage; + + /// + /// When true, mind contests ignore clamp limitations for a melee weapon. + /// + [DataField] + public bool MindBypassClamp; + + /// + /// Multiplies the acceptable range of outputs provided by mind contests for melee. + /// + [DataField] + public float MindRangeModifier = 1; + + /// + /// The output of a mind contest is increased by this amount. + /// + [DataField] + public float MindOffset; + + /// + /// Controls whether this melee weapon allows mood to factor into damage. + /// + [DataField] + public bool DoMoodInteraction; + + /// + /// When true, mood provides a disadvantage. + /// + [DataField] + public bool MoodDisadvantage; + + /// + /// When true, mood contests ignore clamp limitations for a melee weapon. + /// + [DataField] + public bool MoodBypassClamp; + + /// + /// Multiplies the acceptable range of outputs provided by mood contests for melee. + /// + [DataField] + public float MoodRangeModifier = 1; + + /// + /// The output of mood contests is increased by this amount. + /// + [DataField] + public float MoodOffset; + + /// + /// Enables the EveryContest interaction for a melee weapon. + /// IF YOU PUT THIS ON ANY WEAPON OTHER THAN AN ADMEME, I WILL COME TO YOUR HOUSE AND SEND YOU TO MEET YOUR CREATOR WHEN THE PLAYERS COMPLAIN. + /// + [DataField] + public bool DoEveryInteraction; + + /// + /// When true, EveryContest provides a disadvantage. + /// + [DataField] + public bool EveryDisadvantage; + + /// + /// How much Mass is considered for an EveryContest. + /// + [DataField] + public float EveryMassWeight = 1; + + /// + /// How much Stamina is considered for an EveryContest. + /// + [DataField] + public float EveryStaminaWeight = 1; + + /// + /// How much Health is considered for an EveryContest. + /// + [DataField] + public float EveryHealthWeight = 1; + + /// + /// How much psychic casting stats are considered for an EveryContest. + /// + [DataField] + public float EveryMindWeight = 1; + + /// + /// How much mood is considered for an EveryContest. + /// + [DataField] + public float EveryMoodWeight = 1; + + /// + /// When true, the EveryContest sums the results of all contests rather than multiplying them, + /// probably giving you a very, very, very large multiplier... + /// + [DataField] + public bool EveryInteractionSumOrMultiply; } diff --git a/Content.Shared/Contests/ContestsSystem.cs b/Content.Shared/Contests/ContestsSystem.cs index 35a52d7fc3c..454d17a5d84 100644 --- a/Content.Shared/Contests/ContestsSystem.cs +++ b/Content.Shared/Contests/ContestsSystem.cs @@ -2,473 +2,476 @@ using Content.Shared.CCVar; using Content.Shared.Damage; using Content.Shared.Damage.Components; +using Content.Shared.Mobs.Components; using Content.Shared.Mobs.Systems; using Content.Shared.Mood; using Robust.Shared.Configuration; using Robust.Shared.Physics.Components; -namespace Content.Shared.Contests +namespace Content.Shared.Contests; + +public sealed partial class ContestsSystem : EntitySystem { - public sealed partial class ContestsSystem : EntitySystem + [Dependency] private readonly IConfigurationManager _cfg = default!; + [Dependency] private readonly MobThresholdSystem _mobThreshold = default!; + + /// + /// The presumed average mass of a player entity + /// Defaulted to the average mass of an adult human + /// + private const float AverageMass = 71f; + + /// + /// The presumed average sum of a Psionic's Baseline Amplification and Baseline Dampening. + /// Since Baseline casting stats are a random value between 0.4 and 1.2, this is defaulted to 0.8 + 0.8. + /// + private const float AveragePsionicPotential = 1.6f; + + #region Mass Contests + /// + /// Outputs the ratio of mass between a performer and the average human mass + /// + /// + /// bypassClamp is a deprecated input intended for supporting legacy Nyanotrasen systems. Do not use it if you don't know what you're doing. + /// + public float MassContest(EntityUid performerUid, bool bypassClamp = false, float rangeFactor = 1f, float otherMass = AverageMass) + { + if (!_cfg.GetCVar(CCVars.DoContestsSystem) + || !_cfg.GetCVar(CCVars.DoMassContests) + || !TryComp(performerUid, out var performerPhysics) + || performerPhysics.Mass == 0) + return 1f; + + return ContestClamp(ContestClampOverride(bypassClamp) + ? performerPhysics.Mass / otherMass + : Math.Clamp(performerPhysics.Mass / otherMass, + 1 - _cfg.GetCVar(CCVars.MassContestsMaxPercentage) * rangeFactor, + 1 + _cfg.GetCVar(CCVars.MassContestsMaxPercentage) * rangeFactor)); + } + + /// + /// + /// MaybeMassContest, in case your entity doesn't exist + /// + public float MassContest(EntityUid? performerUid, bool bypassClamp = false, float rangeFactor = 1f, float otherMass = AverageMass) + { + if (!_cfg.GetCVar(CCVars.DoContestsSystem) + || !_cfg.GetCVar(CCVars.DoMassContests) + || performerUid is null) + return 1f; + + return MassContest(performerUid.Value, bypassClamp, rangeFactor, otherMass); + } + + /// + /// Outputs the ratio of mass between a performer and the average human mass + /// If a function already has the performer's physics component, this is faster + /// + /// + /// bypassClamp is a deprecated input intended for supporting legacy Nyanotrasen systems. Do not use it if you don't know what you're doing. + /// + public float MassContest(PhysicsComponent performerPhysics, bool bypassClamp = false, float rangeFactor = 1f, float otherMass = AverageMass) + { + if (!_cfg.GetCVar(CCVars.DoContestsSystem) + || !_cfg.GetCVar(CCVars.DoMassContests) + || performerPhysics.Mass == 0) + return 1f; + + return ContestClamp(ContestClampOverride(bypassClamp) + ? performerPhysics.Mass / otherMass + : Math.Clamp(performerPhysics.Mass / otherMass, + 1 - _cfg.GetCVar(CCVars.MassContestsMaxPercentage) * rangeFactor, + 1 + _cfg.GetCVar(CCVars.MassContestsMaxPercentage) * rangeFactor)); + } + + /// + /// Outputs the ratio of mass between a performer and a target, accepts either EntityUids or PhysicsComponents in any combination + /// If you have physics components already in your function, use instead + /// + /// + /// bypassClamp is a deprecated input intended for supporting legacy Nyanotrasen systems. Do not use it if you don't know what you're doing. + /// + public float MassContest(EntityUid performerUid, EntityUid targetUid, bool bypassClamp = false, float rangeFactor = 1f) + { + if (!_cfg.GetCVar(CCVars.DoContestsSystem) + || !_cfg.GetCVar(CCVars.DoMassContests) + || !TryComp(performerUid, out var performerPhysics) + || !TryComp(targetUid, out var targetPhysics) + || performerPhysics.Mass == 0 + || targetPhysics.InvMass == 0) + return 1f; + + return ContestClamp(ContestClampOverride(bypassClamp) + ? performerPhysics.Mass * targetPhysics.InvMass + : Math.Clamp(performerPhysics.Mass * targetPhysics.InvMass, + 1 - _cfg.GetCVar(CCVars.MassContestsMaxPercentage) * rangeFactor, + 1 + _cfg.GetCVar(CCVars.MassContestsMaxPercentage) * rangeFactor)); + } + + /// + public float MassContest(EntityUid performerUid, PhysicsComponent targetPhysics, bool bypassClamp = false, float rangeFactor = 1f) + { + if (!_cfg.GetCVar(CCVars.DoContestsSystem) + || !_cfg.GetCVar(CCVars.DoMassContests) + || !TryComp(performerUid, out var performerPhysics) + || performerPhysics.Mass == 0 + || targetPhysics.InvMass == 0) + return 1f; + + return ContestClamp(ContestClampOverride(bypassClamp) + ? performerPhysics.Mass * targetPhysics.InvMass + : Math.Clamp(performerPhysics.Mass * targetPhysics.InvMass, + 1 - _cfg.GetCVar(CCVars.MassContestsMaxPercentage) * rangeFactor, + 1 + _cfg.GetCVar(CCVars.MassContestsMaxPercentage) * rangeFactor)); + } + + /// + public float MassContest(PhysicsComponent performerPhysics, EntityUid targetUid, bool bypassClamp = false, float rangeFactor = 1f) + { + if (!_cfg.GetCVar(CCVars.DoContestsSystem) + || !_cfg.GetCVar(CCVars.DoMassContests) + || !TryComp(targetUid, out var targetPhysics) + || performerPhysics.Mass == 0 + || targetPhysics.InvMass == 0) + return 1f; + + return ContestClamp(ContestClampOverride(bypassClamp) + ? performerPhysics.Mass * targetPhysics.InvMass + : Math.Clamp(performerPhysics.Mass * targetPhysics.InvMass, + 1 - _cfg.GetCVar(CCVars.MassContestsMaxPercentage) * rangeFactor, + 1 + _cfg.GetCVar(CCVars.MassContestsMaxPercentage) * rangeFactor)); + } + + /// + public float MassContest(PhysicsComponent performerPhysics, PhysicsComponent targetPhysics, bool bypassClamp = false, float rangeFactor = 1f) + { + if (!_cfg.GetCVar(CCVars.DoContestsSystem) + || !_cfg.GetCVar(CCVars.DoMassContests) + || performerPhysics.Mass == 0 + || targetPhysics.InvMass == 0) + return 1f; + + return ContestClamp(ContestClampOverride(bypassClamp) + ? performerPhysics.Mass * targetPhysics.InvMass + : Math.Clamp(performerPhysics.Mass * targetPhysics.InvMass, + 1 - _cfg.GetCVar(CCVars.MassContestsMaxPercentage) * rangeFactor, + 1 + _cfg.GetCVar(CCVars.MassContestsMaxPercentage) * rangeFactor)); + } + + #endregion + #region Stamina Contests + + /// + /// Outputs 1 minus the percentage of an Entity's Stamina, with a Range of [Epsilon, 1 - 0.25 * rangeFactor], or a range of [Epsilon, 1 - Epsilon] if bypassClamp is true. + /// This will never return a value >1. + /// + /// + /// bypassClamp is a deprecated input intended for supporting legacy Nyanotrasen systems. Do not use it if you don't know what you're doing. + /// + public float StaminaContest(EntityUid performer, bool bypassClamp = false, float rangeFactor = 1f) + { + if (!TryComp(performer, out var perfStamina) + || perfStamina.StaminaDamage == 0) + return 1f; + + return StaminaContest(perfStamina, bypassClamp, rangeFactor); + } + + /// + public float StaminaContest(StaminaComponent perfStamina, bool bypassClamp = false, float rangeFactor = 1f) + { + if (!_cfg.GetCVar(CCVars.DoContestsSystem) + || !_cfg.GetCVar(CCVars.DoStaminaContests)) + return 1f; + + return ContestClamp(ContestClampOverride(bypassClamp) + ? 1 - perfStamina.StaminaDamage / perfStamina.CritThreshold + : 1 - Math.Clamp(perfStamina.StaminaDamage / perfStamina.CritThreshold, 0, 0.25f * rangeFactor)); + } + + /// + /// Outputs the ratio of percentage of an Entity's Stamina and a Target Entity's Stamina, with a Range of [Epsilon, 0.25 * rangeFactor], or a range of [Epsilon, +inf] if bypassClamp is true. + /// This does NOT produce the same kind of outputs as a Single-Entity StaminaContest. 2Entity StaminaContest returns the product of two Solo Stamina Contests, and so its values can be very strange. + /// + /// + /// bypassClamp is a deprecated input intended for supporting legacy Nyanotrasen systems. Do not use it if you don't know what you're doing. + /// + public float StaminaContest(EntityUid performer, EntityUid target, bool bypassClamp = false, float rangeFactor = 1f) + { + if (!_cfg.GetCVar(CCVars.DoContestsSystem) + || !_cfg.GetCVar(CCVars.DoStaminaContests) + || !TryComp(performer, out var perfStamina) + || !TryComp(target, out var targetStamina)) + return 1f; + + return ContestClamp(ContestClampOverride(bypassClamp) + ? (1 - perfStamina.StaminaDamage / perfStamina.CritThreshold) + / (1 - targetStamina.StaminaDamage / targetStamina.CritThreshold) + : (1 - Math.Clamp(perfStamina.StaminaDamage / perfStamina.CritThreshold, 0, 0.25f * rangeFactor)) + / (1 - Math.Clamp(targetStamina.StaminaDamage / targetStamina.CritThreshold, 0, 0.25f * rangeFactor))); + } + + #endregion + + #region Health Contests + + /// + /// Outputs 1 minus the percentage of an Entity's Health, with a Range of [Epsilon, 1 - 0.25 * rangeFactor], or a range of [Epsilon, 1 - Epsilon] if bypassClamp is true. + /// This will never return a value >1. + /// + /// + /// bypassClamp is a deprecated input intended for supporting legacy Nyanotrasen systems. Do not use it if you don't know what you're doing. + /// + public float HealthContest(EntityUid performer, bool bypassClamp = false, float rangeFactor = 1f) + { + if (!_cfg.GetCVar(CCVars.DoContestsSystem) + || !_cfg.GetCVar(CCVars.DoHealthContests) + || !TryComp(performer, out var damage) + || !TryComp(performer, out var thresholdsComponent) + || !_mobThreshold.TryGetThresholdForState(performer, Mobs.MobState.Critical, out var threshold, thresholdsComponent)) + return 1f; + + return ContestClamp(ContestClampOverride(bypassClamp) + ? 1 - damage.TotalDamage.Float() / threshold.Value.Float() + : 1 - Math.Clamp(damage.TotalDamage.Float() / threshold.Value.Float(), 0, 0.25f * rangeFactor)); + } + + /// + /// Outputs the ratio of percentage of an Entity's Health and a Target Entity's Health, with a Range of [Epsilon, 0.25 * rangeFactor], or a range of [Epsilon, +inf] if bypassClamp is true. + /// This does NOT produce the same kind of outputs as a Single-Entity HealthContest. 2Entity HealthContest returns the product of two Solo Health Contests, and so its values can be very strange. + /// + /// + /// bypassClamp is a deprecated input intended for supporting legacy Nyanotrasen systems. Do not use it if you don't know what you're doing. + /// + public float HealthContest(EntityUid performer, EntityUid target, bool bypassClamp = false, float rangeFactor = 1f) + { + if (!_cfg.GetCVar(CCVars.DoContestsSystem) + || !_cfg.GetCVar(CCVars.DoHealthContests) + || !TryComp(performer, out var perfDamage) + || !TryComp(target, out var targetDamage) + || !TryComp(performer, out var perfThresholdComp) + || !TryComp(target, out var targetThresholdComp) + || !_mobThreshold.TryGetThresholdForState(performer, Mobs.MobState.Critical, out var perfThreshold, perfThresholdComp) + || !_mobThreshold.TryGetThresholdForState(target, Mobs.MobState.Critical, out var targetThreshold, targetThresholdComp)) + return 1f; + + return ContestClamp(ContestClampOverride(bypassClamp) + ? (1 - perfDamage.TotalDamage.Float() / perfThreshold.Value.Float()) + / (1 - targetDamage.TotalDamage.Float() / targetThreshold.Value.Float()) + : (1 - Math.Clamp(perfDamage.TotalDamage.Float() / perfThreshold.Value.Float(), 0, 0.25f * rangeFactor)) + / (1 - Math.Clamp(targetDamage.TotalDamage.Float() / targetThreshold.Value.Float(), 0, 0.25f * rangeFactor))); + } + #endregion + + #region Mind Contests + + /// + /// Returns the ratio of casting stats between a performer and the presumed average latent psionic. + /// Uniquely among Contests, not being Psionic is not a failure condition, and is instead a variable. + /// If you do not have a PsionicComponent, your combined casting stats are assumed to be 0.1f + /// + /// + /// This can produce some truly astounding modifiers, so be ready to meet god if you bypass the clamp. + /// By bypassing this function's clamp you hereby agree to forfeit your soul to VMSolidus should unintended bugs occur. + /// + public float MindContest(EntityUid performer, bool bypassClamp = false, float rangeFactor = 1f, float otherPsion = AveragePsionicPotential) + { + if (!_cfg.GetCVar(CCVars.DoContestsSystem) + || !_cfg.GetCVar(CCVars.DoMindContests)) + return 1f; + + var performerPotential = TryComp(performer, out var performerPsionic) + ? performerPsionic.CurrentAmplification + performerPsionic.CurrentDampening + : 0.1f; + + if (performerPotential == otherPsion) + return 1f; + + return ContestClamp(ContestClampOverride(bypassClamp) + ? performerPotential / otherPsion + : Math.Clamp(performerPotential / otherPsion, + 1 - _cfg.GetCVar(CCVars.MassContestsMaxPercentage) * rangeFactor, + 1 + _cfg.GetCVar(CCVars.MassContestsMaxPercentage) * rangeFactor)); + } + + /// + /// Returns the ratio of casting stats between a performer and a target. + /// Like with single-Uid MindContests, if an entity does not possess a PsionicComponent, its casting stats are assumed to be 0.1f. + /// + /// + /// This can produce some truly astounding modifiers, so be ready to meet god if you bypass the clamp. + /// By bypassing this function's clamp you hereby agree to forfeit your soul to VMSolidus should unintended bugs occur. + /// + public float MindContest(EntityUid performer, EntityUid target, bool bypassClamp = false, float rangeFactor = 1f) + { + if (!_cfg.GetCVar(CCVars.DoContestsSystem) + || !_cfg.GetCVar(CCVars.DoMindContests)) + return 1f; + + var performerPotential = TryComp(performer, out var performerPsionic) + ? performerPsionic.CurrentAmplification + performerPsionic.CurrentDampening + : 0.1f; + + var targetPotential = TryComp(target, out var targetPsionic) + ? targetPsionic.CurrentAmplification + targetPsionic.CurrentDampening + : 0.1f; + + if (performerPotential == targetPotential) + return 1f; + + return ContestClamp(ContestClampOverride(bypassClamp) + ? performerPotential / targetPotential + : Math.Clamp(performerPotential / targetPotential, + 1 - _cfg.GetCVar(CCVars.MassContestsMaxPercentage) * rangeFactor, + 1 + _cfg.GetCVar(CCVars.MassContestsMaxPercentage) * rangeFactor)); + } + + #endregion + + #region Mood Contests + + /// + /// Outputs the ratio of an Entity's mood level and its Neutral Mood threshold. + /// + /// + /// bypassClamp is a deprecated input intended for supporting legacy Nyanotrasen systems. Do not use it if you don't know what you're doing. + /// + public float MoodContest(EntityUid performer, bool bypassClamp = false, float rangeFactor = 1f) + { + if (!_cfg.GetCVar(CCVars.DoContestsSystem) + || !_cfg.GetCVar(CCVars.DoMoodContests) + || !TryComp(performer, out var mood)) + return 1f; + + return ContestClamp(ContestClampOverride(bypassClamp) + ? mood.CurrentMoodLevel / mood.NeutralMoodThreshold + : Math.Clamp(mood.CurrentMoodLevel / mood.NeutralMoodThreshold, + 1 - _cfg.GetCVar(CCVars.MassContestsMaxPercentage) * rangeFactor, + 1 + _cfg.GetCVar(CCVars.MassContestsMaxPercentage) * rangeFactor)); + } + + /// + /// Outputs the ratio of mood level between two Entities. + /// + /// + /// bypassClamp is a deprecated input intended for supporting legacy Nyanotrasen systems. Do not use it if you don't know what you're doing. + /// + public float MoodContest(EntityUid performer, EntityUid target, bool bypassClamp = false, float rangeFactor = 1f) + { + if (!_cfg.GetCVar(CCVars.DoContestsSystem) + || !_cfg.GetCVar(CCVars.DoMoodContests) + || !TryComp(performer, out var performerMood) + || !TryComp(target, out var targetMood)) + return 1f; + + return ContestClamp(ContestClampOverride(bypassClamp) + ? performerMood.CurrentMoodLevel / targetMood.CurrentMoodLevel + : Math.Clamp(performerMood.CurrentMoodLevel / targetMood.CurrentMoodLevel, + 1 - _cfg.GetCVar(CCVars.MassContestsMaxPercentage) * rangeFactor, + 1 + _cfg.GetCVar(CCVars.MassContestsMaxPercentage) * rangeFactor)); + } + + #endregion + + #region EVERY CONTESTS + + /// + /// EveryContest takes either the Sum or Product of all existing contests, for if you want to just check if somebody is absolutely fucked up. + /// + /// + /// If it's not immediately obvious that a function with 16 optional inputs is a joke, please take a step back and re-evaluate why you're using this function. + /// All prior warnings also apply here. Bypass the clamps at your own risk. By calling this function in your system, you hereby agree to forfeit your soul to VMSolidus if bugs occur. + /// + public float EveryContest( + EntityUid performer, + bool bypassClampMass = false, + bool bypassClampStamina = false, + bool bypassClampHealth = false, + bool bypassClampMind = false, + bool bypassClampMood = false, + float rangeFactorMass = 1f, + float rangeFactorStamina = 1f, + float rangeFactorHealth = 1f, + float rangeFactorMind = 1f, + float rangeFactorMood = 1f, + float weightMass = 1f, + float weightStamina = 1f, + float weightHealth = 1f, + float weightMind = 1f, + float weightMood = 1f, + bool sumOrMultiply = false) + { + if (!_cfg.GetCVar(CCVars.DoContestsSystem)) + return 1f; + + var weightTotal = weightMass + weightStamina + weightHealth + weightMind + weightMood; + var massMultiplier = weightMass / weightTotal; + var staminaMultiplier = weightStamina / weightTotal; + var healthMultiplier = weightHealth / weightTotal; + var mindMultiplier = weightMind / weightTotal; + var moodMultiplier = weightMood / weightTotal; + + return sumOrMultiply + ? MassContest(performer, bypassClampMass, rangeFactorMass) * massMultiplier + + StaminaContest(performer, bypassClampStamina, rangeFactorStamina) * staminaMultiplier + + HealthContest(performer, bypassClampHealth, rangeFactorHealth) * healthMultiplier + + MindContest(performer, bypassClampMind, rangeFactorMind) * mindMultiplier + + MoodContest(performer, bypassClampMood, rangeFactorMood) * moodMultiplier + : ContestClamp(MassContest(performer, bypassClampMass, rangeFactorMass) * massMultiplier + * StaminaContest(performer, bypassClampStamina, rangeFactorStamina) * staminaMultiplier + * HealthContest(performer, bypassClampHealth, rangeFactorHealth) * healthMultiplier + * MindContest(performer, bypassClampMind, rangeFactorMind) * mindMultiplier + * MoodContest(performer, bypassClampMood, rangeFactorMood) * moodMultiplier); + } + + /// + /// EveryContest takes either the Sum or Product of all existing contests, for if you want to just check if somebody is absolutely fucked up. + /// + /// + /// If it's not immediately obvious that a function with 16 optional inputs is a joke, please take a step back and re-evaluate why you're using this function. + /// All prior warnings also apply here. Bypass the clamps at your own risk. By calling this function in your system, you hereby agree to forfeit your soul to VMSolidus if bugs occur. + /// + public float EveryContest( + EntityUid performer, + EntityUid target, + bool bypassClampMass = false, + bool bypassClampStamina = false, + bool bypassClampHealth = false, + bool bypassClampMind = false, + bool bypassClampMood = false, + float rangeFactorMass = 1f, + float rangeFactorStamina = 1f, + float rangeFactorHealth = 1f, + float rangeFactorMind = 1f, + float rangeFactorMood = 1f, + float weightMass = 1f, + float weightStamina = 1f, + float weightHealth = 1f, + float weightMind = 1f, + float weightMood = 1f, + bool sumOrMultiply = false) { - [Dependency] private readonly IConfigurationManager _cfg = default!; - [Dependency] private readonly MobThresholdSystem _mobThreshold = default!; - - /// - /// The presumed average mass of a player entity - /// Defaulted to the average mass of an adult human - /// - private const float AverageMass = 71f; - - /// - /// The presumed average sum of a Psionic's Baseline Amplification and Baseline Dampening. - /// Since Baseline casting stats are a random value between 0.4 and 1.2, this is defaulted to 0.8 + 0.8. - /// - private const float AveragePsionicPotential = 1.6f; - - #region Mass Contests - /// - /// Outputs the ratio of mass between a performer and the average human mass - /// - /// - /// bypassClamp is a deprecated input intended for supporting legacy Nyanotrasen systems. Do not use it if you don't know what you're doing. - /// - public float MassContest(EntityUid performerUid, bool bypassClamp = false, float rangeFactor = 1f, float otherMass = AverageMass) - { - if (!_cfg.GetCVar(CCVars.DoContestsSystem) - || !_cfg.GetCVar(CCVars.DoMassContests) - || !TryComp(performerUid, out var performerPhysics) - || performerPhysics.Mass == 0) - return 1f; - - return ContestClamp(ContestClampOverride(bypassClamp) - ? performerPhysics.Mass / otherMass - : Math.Clamp(performerPhysics.Mass / otherMass, - 1 - _cfg.GetCVar(CCVars.MassContestsMaxPercentage) * rangeFactor, - 1 + _cfg.GetCVar(CCVars.MassContestsMaxPercentage) * rangeFactor)); - } - - /// - /// - /// MaybeMassContest, in case your entity doesn't exist - /// - public float MassContest(EntityUid? performerUid, bool bypassClamp = false, float rangeFactor = 1f, float otherMass = AverageMass) - { - if (!_cfg.GetCVar(CCVars.DoContestsSystem) - || !_cfg.GetCVar(CCVars.DoMassContests) - || performerUid is null) - return 1f; - - return MassContest(performerUid.Value, bypassClamp, rangeFactor, otherMass); - } - - /// - /// Outputs the ratio of mass between a performer and the average human mass - /// If a function already has the performer's physics component, this is faster - /// - /// - /// bypassClamp is a deprecated input intended for supporting legacy Nyanotrasen systems. Do not use it if you don't know what you're doing. - /// - public float MassContest(PhysicsComponent performerPhysics, bool bypassClamp = false, float rangeFactor = 1f, float otherMass = AverageMass) - { - if (!_cfg.GetCVar(CCVars.DoContestsSystem) - || !_cfg.GetCVar(CCVars.DoMassContests) - || performerPhysics.Mass == 0) - return 1f; - - return ContestClamp(ContestClampOverride(bypassClamp) - ? performerPhysics.Mass / otherMass - : Math.Clamp(performerPhysics.Mass / otherMass, - 1 - _cfg.GetCVar(CCVars.MassContestsMaxPercentage) * rangeFactor, - 1 + _cfg.GetCVar(CCVars.MassContestsMaxPercentage) * rangeFactor)); - } - - /// - /// Outputs the ratio of mass between a performer and a target, accepts either EntityUids or PhysicsComponents in any combination - /// If you have physics components already in your function, use instead - /// - /// - /// bypassClamp is a deprecated input intended for supporting legacy Nyanotrasen systems. Do not use it if you don't know what you're doing. - /// - public float MassContest(EntityUid performerUid, EntityUid targetUid, bool bypassClamp = false, float rangeFactor = 1f) - { - if (!_cfg.GetCVar(CCVars.DoContestsSystem) - || !_cfg.GetCVar(CCVars.DoMassContests) - || !TryComp(performerUid, out var performerPhysics) - || !TryComp(targetUid, out var targetPhysics) - || performerPhysics.Mass == 0 - || targetPhysics.InvMass == 0) - return 1f; - - return ContestClamp(ContestClampOverride(bypassClamp) - ? performerPhysics.Mass * targetPhysics.InvMass - : Math.Clamp(performerPhysics.Mass * targetPhysics.InvMass, - 1 - _cfg.GetCVar(CCVars.MassContestsMaxPercentage) * rangeFactor, - 1 + _cfg.GetCVar(CCVars.MassContestsMaxPercentage) * rangeFactor)); - } - - /// - public float MassContest(EntityUid performerUid, PhysicsComponent targetPhysics, bool bypassClamp = false, float rangeFactor = 1f) - { - if (!_cfg.GetCVar(CCVars.DoContestsSystem) - || !_cfg.GetCVar(CCVars.DoMassContests) - || !TryComp(performerUid, out var performerPhysics) - || performerPhysics.Mass == 0 - || targetPhysics.InvMass == 0) - return 1f; - - return ContestClamp(ContestClampOverride(bypassClamp) - ? performerPhysics.Mass * targetPhysics.InvMass - : Math.Clamp(performerPhysics.Mass * targetPhysics.InvMass, - 1 - _cfg.GetCVar(CCVars.MassContestsMaxPercentage) * rangeFactor, - 1 + _cfg.GetCVar(CCVars.MassContestsMaxPercentage) * rangeFactor)); - } - - /// - public float MassContest(PhysicsComponent performerPhysics, EntityUid targetUid, bool bypassClamp = false, float rangeFactor = 1f) - { - if (!_cfg.GetCVar(CCVars.DoContestsSystem) - || !_cfg.GetCVar(CCVars.DoMassContests) - || !TryComp(targetUid, out var targetPhysics) - || performerPhysics.Mass == 0 - || targetPhysics.InvMass == 0) - return 1f; - - return ContestClamp(ContestClampOverride(bypassClamp) - ? performerPhysics.Mass * targetPhysics.InvMass - : Math.Clamp(performerPhysics.Mass * targetPhysics.InvMass, - 1 - _cfg.GetCVar(CCVars.MassContestsMaxPercentage) * rangeFactor, - 1 + _cfg.GetCVar(CCVars.MassContestsMaxPercentage) * rangeFactor)); - } - - /// - public float MassContest(PhysicsComponent performerPhysics, PhysicsComponent targetPhysics, bool bypassClamp = false, float rangeFactor = 1f) - { - if (!_cfg.GetCVar(CCVars.DoContestsSystem) - || !_cfg.GetCVar(CCVars.DoMassContests) - || performerPhysics.Mass == 0 - || targetPhysics.InvMass == 0) - return 1f; - - return ContestClamp(ContestClampOverride(bypassClamp) - ? performerPhysics.Mass * targetPhysics.InvMass - : Math.Clamp(performerPhysics.Mass * targetPhysics.InvMass, - 1 - _cfg.GetCVar(CCVars.MassContestsMaxPercentage) * rangeFactor, - 1 + _cfg.GetCVar(CCVars.MassContestsMaxPercentage) * rangeFactor)); - } - - #endregion - #region Stamina Contests - - /// - /// Outputs 1 minus the percentage of an Entity's Stamina, with a Range of [Epsilon, 1 - 0.25 * rangeFactor], or a range of [Epsilon, 1 - Epsilon] if bypassClamp is true. - /// This will never return a value >1. - /// - /// - /// bypassClamp is a deprecated input intended for supporting legacy Nyanotrasen systems. Do not use it if you don't know what you're doing. - /// - public float StaminaContest(EntityUid performer, bool bypassClamp = false, float rangeFactor = 1f) - { - if (!TryComp(performer, out var perfStamina) - || perfStamina.StaminaDamage == 0) - return 1f; - - return StaminaContest(perfStamina, bypassClamp, rangeFactor); - } - - /// - public float StaminaContest(StaminaComponent perfStamina, bool bypassClamp = false, float rangeFactor = 1f) - { - if (!_cfg.GetCVar(CCVars.DoContestsSystem) - || !_cfg.GetCVar(CCVars.DoStaminaContests)) - return 1f; - - return ContestClamp(ContestClampOverride(bypassClamp) - ? 1 - perfStamina.StaminaDamage / perfStamina.CritThreshold - : 1 - Math.Clamp(perfStamina.StaminaDamage / perfStamina.CritThreshold, 0, 0.25f * rangeFactor)); - } - - /// - /// Outputs the ratio of percentage of an Entity's Stamina and a Target Entity's Stamina, with a Range of [Epsilon, 0.25 * rangeFactor], or a range of [Epsilon, +inf] if bypassClamp is true. - /// This does NOT produce the same kind of outputs as a Single-Entity StaminaContest. 2Entity StaminaContest returns the product of two Solo Stamina Contests, and so its values can be very strange. - /// - /// - /// bypassClamp is a deprecated input intended for supporting legacy Nyanotrasen systems. Do not use it if you don't know what you're doing. - /// - public float StaminaContest(EntityUid performer, EntityUid target, bool bypassClamp = false, float rangeFactor = 1f) - { - if (!_cfg.GetCVar(CCVars.DoContestsSystem) - || !_cfg.GetCVar(CCVars.DoStaminaContests) - || !TryComp(performer, out var perfStamina) - || !TryComp(target, out var targetStamina)) - return 1f; - - return ContestClamp(ContestClampOverride(bypassClamp) - ? (1 - perfStamina.StaminaDamage / perfStamina.CritThreshold) - / (1 - targetStamina.StaminaDamage / targetStamina.CritThreshold) - : (1 - Math.Clamp(perfStamina.StaminaDamage / perfStamina.CritThreshold, 0, 0.25f * rangeFactor)) - / (1 - Math.Clamp(targetStamina.StaminaDamage / targetStamina.CritThreshold, 0, 0.25f * rangeFactor))); - } - - #endregion - - #region Health Contests - - /// - /// Outputs 1 minus the percentage of an Entity's Health, with a Range of [Epsilon, 1 - 0.25 * rangeFactor], or a range of [Epsilon, 1 - Epsilon] if bypassClamp is true. - /// This will never return a value >1. - /// - /// - /// bypassClamp is a deprecated input intended for supporting legacy Nyanotrasen systems. Do not use it if you don't know what you're doing. - /// - public float HealthContest(EntityUid performer, bool bypassClamp = false, float rangeFactor = 1f) - { - if (!_cfg.GetCVar(CCVars.DoContestsSystem) - || !_cfg.GetCVar(CCVars.DoHealthContests) - || !TryComp(performer, out var damage) - || !_mobThreshold.TryGetThresholdForState(performer, Mobs.MobState.Critical, out var threshold)) - return 1f; - - return ContestClamp(ContestClampOverride(bypassClamp) - ? 1 - damage.TotalDamage.Float() / threshold.Value.Float() - : 1 - Math.Clamp(damage.TotalDamage.Float() / threshold.Value.Float(), 0, 0.25f * rangeFactor)); - } - - /// - /// Outputs the ratio of percentage of an Entity's Health and a Target Entity's Health, with a Range of [Epsilon, 0.25 * rangeFactor], or a range of [Epsilon, +inf] if bypassClamp is true. - /// This does NOT produce the same kind of outputs as a Single-Entity HealthContest. 2Entity HealthContest returns the product of two Solo Health Contests, and so its values can be very strange. - /// - /// - /// bypassClamp is a deprecated input intended for supporting legacy Nyanotrasen systems. Do not use it if you don't know what you're doing. - /// - public float HealthContest(EntityUid performer, EntityUid target, bool bypassClamp = false, float rangeFactor = 1f) - { - if (!_cfg.GetCVar(CCVars.DoContestsSystem) - || !_cfg.GetCVar(CCVars.DoHealthContests) - || !TryComp(performer, out var perfDamage) - || !TryComp(target, out var targetDamage) - || !_mobThreshold.TryGetThresholdForState(performer, Mobs.MobState.Critical, out var perfThreshold) - || !_mobThreshold.TryGetThresholdForState(target, Mobs.MobState.Critical, out var targetThreshold)) - return 1f; - - return ContestClamp(ContestClampOverride(bypassClamp) - ? (1 - perfDamage.TotalDamage.Float() / perfThreshold.Value.Float()) - / (1 - targetDamage.TotalDamage.Float() / targetThreshold.Value.Float()) - : (1 - Math.Clamp(perfDamage.TotalDamage.Float() / perfThreshold.Value.Float(), 0, 0.25f * rangeFactor)) - / (1 - Math.Clamp(targetDamage.TotalDamage.Float() / targetThreshold.Value.Float(), 0, 0.25f * rangeFactor))); - } - #endregion - - #region Mind Contests - - /// - /// Returns the ratio of casting stats between a performer and the presumed average latent psionic. - /// Uniquely among Contests, not being Psionic is not a failure condition, and is instead a variable. - /// If you do not have a PsionicComponent, your combined casting stats are assumed to be 0.1f - /// - /// - /// This can produce some truly astounding modifiers, so be ready to meet god if you bypass the clamp. - /// By bypassing this function's clamp you hereby agree to forfeit your soul to VMSolidus should unintended bugs occur. - /// - public float MindContest(EntityUid performer, bool bypassClamp = false, float rangeFactor = 1f, float otherPsion = AveragePsionicPotential) - { - if (!_cfg.GetCVar(CCVars.DoContestsSystem) - || !_cfg.GetCVar(CCVars.DoMindContests)) - return 1f; - - var performerPotential = TryComp(performer, out var performerPsionic) - ? performerPsionic.CurrentAmplification + performerPsionic.CurrentDampening - : 0.1f; - - if (performerPotential == otherPsion) - return 1f; - - return ContestClamp(ContestClampOverride(bypassClamp) - ? performerPotential / otherPsion - : Math.Clamp(performerPotential / otherPsion, - 1 - _cfg.GetCVar(CCVars.MassContestsMaxPercentage) * rangeFactor, - 1 + _cfg.GetCVar(CCVars.MassContestsMaxPercentage) * rangeFactor)); - } - - /// - /// Returns the ratio of casting stats between a performer and a target. - /// Like with single-Uid MindContests, if an entity does not possess a PsionicComponent, its casting stats are assumed to be 0.1f. - /// - /// - /// This can produce some truly astounding modifiers, so be ready to meet god if you bypass the clamp. - /// By bypassing this function's clamp you hereby agree to forfeit your soul to VMSolidus should unintended bugs occur. - /// - public float MindContest(EntityUid performer, EntityUid target, bool bypassClamp = false, float rangeFactor = 1f) - { - if (!_cfg.GetCVar(CCVars.DoContestsSystem) - || !_cfg.GetCVar(CCVars.DoMindContests)) - return 1f; - - var performerPotential = TryComp(performer, out var performerPsionic) - ? performerPsionic.CurrentAmplification + performerPsionic.CurrentDampening - : 0.1f; - - var targetPotential = TryComp(target, out var targetPsionic) - ? targetPsionic.CurrentAmplification + targetPsionic.CurrentDampening - : 0.1f; - - if (performerPotential == targetPotential) - return 1f; - - return ContestClamp(ContestClampOverride(bypassClamp) - ? performerPotential / targetPotential - : Math.Clamp(performerPotential / targetPotential, - 1 - _cfg.GetCVar(CCVars.MassContestsMaxPercentage) * rangeFactor, - 1 + _cfg.GetCVar(CCVars.MassContestsMaxPercentage) * rangeFactor)); - } - - #endregion - - #region Mood Contests - - /// - /// Outputs the ratio of an Entity's mood level and its Neutral Mood threshold. - /// - /// - /// bypassClamp is a deprecated input intended for supporting legacy Nyanotrasen systems. Do not use it if you don't know what you're doing. - /// - public float MoodContest(EntityUid performer, bool bypassClamp = false, float rangeFactor = 1f) - { - if (!_cfg.GetCVar(CCVars.DoContestsSystem) - || !_cfg.GetCVar(CCVars.DoMoodContests) - || !TryComp(performer, out var mood)) - return 1f; - - return ContestClamp(ContestClampOverride(bypassClamp) - ? mood.CurrentMoodLevel / mood.NeutralMoodThreshold - : Math.Clamp(mood.CurrentMoodLevel / mood.NeutralMoodThreshold, - 1 - _cfg.GetCVar(CCVars.MassContestsMaxPercentage) * rangeFactor, - 1 + _cfg.GetCVar(CCVars.MassContestsMaxPercentage) * rangeFactor)); - } - - /// - /// Outputs the ratio of mood level between two Entities. - /// - /// - /// bypassClamp is a deprecated input intended for supporting legacy Nyanotrasen systems. Do not use it if you don't know what you're doing. - /// - public float MoodContest(EntityUid performer, EntityUid target, bool bypassClamp = false, float rangeFactor = 1f) - { - if (!_cfg.GetCVar(CCVars.DoContestsSystem) - || !_cfg.GetCVar(CCVars.DoMoodContests) - || !TryComp(performer, out var performerMood) - || !TryComp(target, out var targetMood)) - return 1f; - - return ContestClamp(ContestClampOverride(bypassClamp) - ? performerMood.CurrentMoodLevel / targetMood.CurrentMoodLevel - : Math.Clamp(performerMood.CurrentMoodLevel / targetMood.CurrentMoodLevel, - 1 - _cfg.GetCVar(CCVars.MassContestsMaxPercentage) * rangeFactor, - 1 + _cfg.GetCVar(CCVars.MassContestsMaxPercentage) * rangeFactor)); - } - - #endregion - - #region EVERY CONTESTS - - /// - /// EveryContest takes either the Sum or Product of all existing contests, for if you want to just check if somebody is absolutely fucked up. - /// - /// - /// If it's not immediately obvious that a function with 16 optional inputs is a joke, please take a step back and re-evaluate why you're using this function. - /// All prior warnings also apply here. Bypass the clamps at your own risk. By calling this function in your system, you hereby agree to forfeit your soul to VMSolidus if bugs occur. - /// - public float EveryContest( - EntityUid performer, - bool bypassClampMass = false, - bool bypassClampStamina = false, - bool bypassClampHealth = false, - bool bypassClampMind = false, - bool bypassClampMood = false, - float rangeFactorMass = 1f, - float rangeFactorStamina = 1f, - float rangeFactorHealth = 1f, - float rangeFactorMind = 1f, - float rangeFactorMood = 1f, - float weightMass = 1f, - float weightStamina = 1f, - float weightHealth = 1f, - float weightMind = 1f, - float weightMood = 1f, - bool sumOrMultiply = false) - { - if (!_cfg.GetCVar(CCVars.DoContestsSystem)) - return 1f; - - var weightTotal = weightMass + weightStamina + weightHealth + weightMind + weightMood; - var massMultiplier = weightMass / weightTotal; - var staminaMultiplier = weightStamina / weightTotal; - var healthMultiplier = weightHealth / weightTotal; - var mindMultiplier = weightMind / weightTotal; - var moodMultiplier = weightMood / weightTotal; - - return sumOrMultiply - ? MassContest(performer, bypassClampMass, rangeFactorMass) * massMultiplier - + StaminaContest(performer, bypassClampStamina, rangeFactorStamina) * staminaMultiplier - + HealthContest(performer, bypassClampHealth, rangeFactorHealth) * healthMultiplier - + MindContest(performer, bypassClampMind, rangeFactorMind) * mindMultiplier - + MoodContest(performer, bypassClampMood, rangeFactorMood) * moodMultiplier - : ContestClamp(MassContest(performer, bypassClampMass, rangeFactorMass) * massMultiplier - * StaminaContest(performer, bypassClampStamina, rangeFactorStamina) * staminaMultiplier - * HealthContest(performer, bypassClampHealth, rangeFactorHealth) * healthMultiplier - * MindContest(performer, bypassClampMind, rangeFactorMind) * mindMultiplier - * MoodContest(performer, bypassClampMood, rangeFactorMood) * moodMultiplier); - } - - /// - /// EveryContest takes either the Sum or Product of all existing contests, for if you want to just check if somebody is absolutely fucked up. - /// - /// - /// If it's not immediately obvious that a function with 16 optional inputs is a joke, please take a step back and re-evaluate why you're using this function. - /// All prior warnings also apply here. Bypass the clamps at your own risk. By calling this function in your system, you hereby agree to forfeit your soul to VMSolidus if bugs occur. - /// - public float EveryContest( - EntityUid performer, - EntityUid target, - bool bypassClampMass = false, - bool bypassClampStamina = false, - bool bypassClampHealth = false, - bool bypassClampMind = false, - bool bypassClampMood = false, - float rangeFactorMass = 1f, - float rangeFactorStamina = 1f, - float rangeFactorHealth = 1f, - float rangeFactorMind = 1f, - float rangeFactorMood = 1f, - float weightMass = 1f, - float weightStamina = 1f, - float weightHealth = 1f, - float weightMind = 1f, - float weightMood = 1f, - bool sumOrMultiply = false) - { - if (!_cfg.GetCVar(CCVars.DoContestsSystem)) - return 1f; - - var weightTotal = weightMass + weightStamina + weightHealth + weightMind + weightMood; - var massMultiplier = weightMass / weightTotal; - var staminaMultiplier = weightStamina / weightTotal; - var healthMultiplier = weightHealth / weightTotal; - var mindMultiplier = weightMind / weightTotal; - var moodMultiplier = weightMood / weightTotal; - - return sumOrMultiply - ? MassContest(performer, target, bypassClampMass, rangeFactorMass) * massMultiplier - + StaminaContest(performer, target, bypassClampStamina, rangeFactorStamina) * staminaMultiplier - + HealthContest(performer, target, bypassClampHealth, rangeFactorHealth) * healthMultiplier - + MindContest(performer, target, bypassClampMind, rangeFactorMind) * mindMultiplier - + MoodContest(performer, target, bypassClampMood, rangeFactorMood) * moodMultiplier - : ContestClamp(MassContest(performer, target, bypassClampMass, rangeFactorMass) * massMultiplier - * StaminaContest(performer, target, bypassClampStamina, rangeFactorStamina) * staminaMultiplier - * HealthContest(performer, target, bypassClampHealth, rangeFactorHealth) * healthMultiplier - * MindContest(performer, target, bypassClampMind, rangeFactorMind) * mindMultiplier - * MoodContest(performer, target, bypassClampMood, rangeFactorMood) * moodMultiplier); - } - #endregion + if (!_cfg.GetCVar(CCVars.DoContestsSystem)) + return 1f; + + var weightTotal = weightMass + weightStamina + weightHealth + weightMind + weightMood; + var massMultiplier = weightMass / weightTotal; + var staminaMultiplier = weightStamina / weightTotal; + var healthMultiplier = weightHealth / weightTotal; + var mindMultiplier = weightMind / weightTotal; + var moodMultiplier = weightMood / weightTotal; + + return sumOrMultiply + ? MassContest(performer, target, bypassClampMass, rangeFactorMass) * massMultiplier + + StaminaContest(performer, target, bypassClampStamina, rangeFactorStamina) * staminaMultiplier + + HealthContest(performer, target, bypassClampHealth, rangeFactorHealth) * healthMultiplier + + MindContest(performer, target, bypassClampMind, rangeFactorMind) * mindMultiplier + + MoodContest(performer, target, bypassClampMood, rangeFactorMood) * moodMultiplier + : ContestClamp(MassContest(performer, target, bypassClampMass, rangeFactorMass) * massMultiplier + * StaminaContest(performer, target, bypassClampStamina, rangeFactorStamina) * staminaMultiplier + * HealthContest(performer, target, bypassClampHealth, rangeFactorHealth) * healthMultiplier + * MindContest(performer, target, bypassClampMind, rangeFactorMind) * mindMultiplier + * MoodContest(performer, target, bypassClampMood, rangeFactorMood) * moodMultiplier); } + #endregion } diff --git a/Content.Shared/CriminalRecords/Components/CriminalRecordsHackerComponent.cs b/Content.Shared/CriminalRecords/Components/CriminalRecordsHackerComponent.cs new file mode 100644 index 00000000000..189a387a5de --- /dev/null +++ b/Content.Shared/CriminalRecords/Components/CriminalRecordsHackerComponent.cs @@ -0,0 +1,31 @@ +using Content.Shared.CriminalRecords.Systems; +using Content.Shared.Dataset; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared.CriminalRecords.Components; + +/// +/// Lets the user hack a criminal records console, once. +/// Everyone is set to wanted with a randomly picked reason. +/// +[RegisterComponent, NetworkedComponent, Access(typeof(SharedCriminalRecordsHackerSystem))] +public sealed partial class CriminalRecordsHackerComponent : Component +{ + /// + /// How long the doafter is for hacking it. + /// + public TimeSpan Delay = TimeSpan.FromSeconds(20); + + /// + /// Dataset of random reasons to use. + /// + [DataField] + public ProtoId Reasons = "CriminalRecordsWantedReasonPlaceholders"; + + /// + /// Announcement made after the console is hacked. + /// + [DataField] + public LocId Announcement = "ninja-criminal-records-hack-announcement"; +} diff --git a/Content.Shared/CriminalRecords/Systems/SharedCriminalRecordsHackerSystem.cs b/Content.Shared/CriminalRecords/Systems/SharedCriminalRecordsHackerSystem.cs new file mode 100644 index 00000000000..a626db19e5f --- /dev/null +++ b/Content.Shared/CriminalRecords/Systems/SharedCriminalRecordsHackerSystem.cs @@ -0,0 +1,50 @@ +using Content.Shared.CriminalRecords.Components; +using Content.Shared.DoAfter; +using Content.Shared.Interaction; +using Content.Shared.Ninja.Systems; +using Robust.Shared.Serialization; + +namespace Content.Shared.CriminalRecords.Systems; + +public abstract class SharedCriminalRecordsHackerSystem : EntitySystem +{ + [Dependency] private readonly SharedDoAfterSystem _doAfter = default!; + [Dependency] private readonly SharedNinjaGlovesSystem _gloves = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnBeforeInteractHand); + } + + private void OnBeforeInteractHand(Entity ent, ref BeforeInteractHandEvent args) + { + // TODO: generic event + if (args.Handled || !_gloves.AbilityCheck(ent, args, out var target)) + return; + + if (!HasComp(target)) + return; + + var doAfterArgs = new DoAfterArgs(EntityManager, ent, ent.Comp.Delay, new CriminalRecordsHackDoAfterEvent(), target: target, used: ent, eventTarget: ent) + { + BreakOnDamage = true, + BreakOnTargetMove = true, + BreakOnUserMove = true, + BreakOnWeightlessMove = true, + MovementThreshold = 0.5f, + }; + + _doAfter.TryStartDoAfter(doAfterArgs); + args.Handled = true; + } +} + +/// +/// Raised on the user when the doafter completes. +/// +[Serializable, NetSerializable] +public sealed partial class CriminalRecordsHackDoAfterEvent : SimpleDoAfterEvent +{ +} diff --git a/Content.Shared/Customization/Systems/CharacterRequirements.Profile.cs b/Content.Shared/Customization/Systems/CharacterRequirements.Profile.cs index 8fdb7c0e7db..568a7f1b61d 100644 --- a/Content.Shared/Customization/Systems/CharacterRequirements.Profile.cs +++ b/Content.Shared/Customization/Systems/CharacterRequirements.Profile.cs @@ -41,50 +41,6 @@ public override bool IsValid(JobPrototype job, HumanoidCharacterProfile profile, } } -/// -/// Requires the profile to use either a Backpack, Satchel, or Duffelbag -/// -[UsedImplicitly] -[Serializable, NetSerializable] -public sealed partial class CharacterBackpackTypeRequirement : CharacterRequirement -{ - [DataField(required: true)] - public BackpackPreference Preference; - - public override bool IsValid(JobPrototype job, HumanoidCharacterProfile profile, - Dictionary playTimes, bool whitelisted, IPrototype prototype, - IEntityManager entityManager, IPrototypeManager prototypeManager, IConfigurationManager configManager, - out FormattedMessage? reason, int depth = 0) - { - reason = FormattedMessage.FromMarkup(Loc.GetString("character-backpack-type-requirement", - ("inverted", Inverted), - ("type", Loc.GetString($"humanoid-profile-editor-preference-{Preference.ToString().ToLower()}")))); - return profile.Backpack == Preference; - } -} - -/// -/// Requires the profile to use either Jumpsuits or Jumpskirts -/// -[UsedImplicitly] -[Serializable, NetSerializable] -public sealed partial class CharacterClothingPreferenceRequirement : CharacterRequirement -{ - [DataField(required: true)] - public ClothingPreference Preference; - - public override bool IsValid(JobPrototype job, HumanoidCharacterProfile profile, - Dictionary playTimes, bool whitelisted, IPrototype prototype, - IEntityManager entityManager, IPrototypeManager prototypeManager, IConfigurationManager configManager, - out FormattedMessage? reason, int depth = 0) - { - reason = FormattedMessage.FromMarkup(Loc.GetString("character-clothing-preference-requirement", - ("inverted", Inverted), - ("preference", Loc.GetString($"humanoid-profile-editor-preference-{Preference.ToString().ToLower()}")))); - return profile.Clothing == Preference; - } -} - /// /// Requires the profile to be a certain gender /// diff --git a/Content.Shared/Customization/Systems/CharacterRequirements.Whitelist.cs b/Content.Shared/Customization/Systems/CharacterRequirements.Whitelist.cs index d23d472e067..78a520ca8d9 100644 --- a/Content.Shared/Customization/Systems/CharacterRequirements.Whitelist.cs +++ b/Content.Shared/Customization/Systems/CharacterRequirements.Whitelist.cs @@ -6,6 +6,7 @@ using Robust.Shared.Prototypes; using Robust.Shared.Serialization; using Robust.Shared.Utility; +using Robust.Shared.Network; namespace Content.Shared.Customization.Systems; diff --git a/Content.Shared/Damage/Prototypes/DamageGroupPrototype.cs b/Content.Shared/Damage/Prototypes/DamageGroupPrototype.cs index 807f143708c..bb5aea3a38c 100644 --- a/Content.Shared/Damage/Prototypes/DamageGroupPrototype.cs +++ b/Content.Shared/Damage/Prototypes/DamageGroupPrototype.cs @@ -17,6 +17,12 @@ public sealed partial class DamageGroupPrototype : IPrototype { [IdDataField] public string ID { get; } = default!; + [DataField(required: true)] + private LocId Name { get; set; } + + [ViewVariables(VVAccess.ReadOnly)] + public string LocalizedName => Loc.GetString(Name); + [DataField("damageTypes", required: true, customTypeSerializer: typeof(PrototypeIdListSerializer))] public List DamageTypes { get; private set; } = default!; } diff --git a/Content.Shared/Damage/Prototypes/DamageModifierSetPrototype.cs b/Content.Shared/Damage/Prototypes/DamageModifierSetPrototype.cs index 99e13ee2842..a50856b0448 100644 --- a/Content.Shared/Damage/Prototypes/DamageModifierSetPrototype.cs +++ b/Content.Shared/Damage/Prototypes/DamageModifierSetPrototype.cs @@ -10,7 +10,7 @@ namespace Content.Shared.Damage.Prototypes /// just want normal data to be deserialized. /// [Prototype("damageModifierSet")] - public sealed class DamageModifierSetPrototype : DamageModifierSet, IPrototype + public sealed partial class DamageModifierSetPrototype : DamageModifierSet, IPrototype { [ViewVariables] [IdDataField] diff --git a/Content.Shared/Damage/Prototypes/DamageTypePrototype.cs b/Content.Shared/Damage/Prototypes/DamageTypePrototype.cs index cde7a8617f5..a1ae23ef676 100644 --- a/Content.Shared/Damage/Prototypes/DamageTypePrototype.cs +++ b/Content.Shared/Damage/Prototypes/DamageTypePrototype.cs @@ -11,6 +11,12 @@ public sealed partial class DamageTypePrototype : IPrototype [IdDataField] public string ID { get; private set; } = default!; + [DataField(required: true)] + private LocId Name { get; set; } + + [ViewVariables(VVAccess.ReadOnly)] + public string LocalizedName => Loc.GetString(Name); + /// /// The price for each 1% damage reduction in armors /// diff --git a/Content.Shared/Damage/Systems/DamageExamineSystem.cs b/Content.Shared/Damage/Systems/DamageExamineSystem.cs index 8273719110b..fd1f191334f 100644 --- a/Content.Shared/Damage/Systems/DamageExamineSystem.cs +++ b/Content.Shared/Damage/Systems/DamageExamineSystem.cs @@ -1,8 +1,10 @@ using Content.Shared.Damage.Components; using Content.Shared.Damage.Events; +using Content.Shared.Damage.Prototypes; using Content.Shared.Examine; using Content.Shared.FixedPoint; using Content.Shared.Verbs; +using Robust.Shared.Prototypes; using Robust.Shared.Utility; namespace Content.Shared.Damage.Systems; @@ -10,6 +12,7 @@ namespace Content.Shared.Damage.Systems; public sealed class DamageExamineSystem : EntitySystem { [Dependency] private readonly ExamineSystemShared _examine = default!; + [Dependency] private readonly IPrototypeManager _prototype = default!; public override void Initialize() { @@ -66,7 +69,7 @@ private FormattedMessage GetDamageExamine(DamageSpecifier damageSpecifier, strin if (damage.Value != FixedPoint2.Zero) { msg.PushNewline(); - msg.AddMarkup(Loc.GetString("damage-value", ("type", damage.Key), ("amount", damage.Value))); + msg.AddMarkup(Loc.GetString("damage-value", ("type", _prototype.Index(damage.Key).LocalizedName), ("amount", damage.Value))); } } diff --git a/Content.Shared/Decals/DecalGridComponent.cs b/Content.Shared/Decals/DecalGridComponent.cs index 8ac05cb280f..67a9c037696 100644 --- a/Content.Shared/Decals/DecalGridComponent.cs +++ b/Content.Shared/Decals/DecalGridComponent.cs @@ -62,46 +62,37 @@ public record DecalGridChunkCollection(Dictionary ChunkCol } [Serializable, NetSerializable] - public sealed class DecalGridState : ComponentState, IComponentDeltaState + public sealed class DecalGridState(Dictionary chunks) : ComponentState { - public Dictionary Chunks; - public bool FullState => AllChunks == null; - - // required to infer deleted/missing chunks for delta states - public HashSet? AllChunks; + public Dictionary Chunks = chunks; + } - public DecalGridState(Dictionary chunks) - { - Chunks = chunks; - } + [Serializable, NetSerializable] + public sealed class DecalGridDeltaState(Dictionary modifiedChunks, HashSet allChunks) + : ComponentState, IComponentDeltaState + { + public Dictionary ModifiedChunks = modifiedChunks; + public HashSet AllChunks = allChunks; - public void ApplyToFullState(IComponentState fullState) + public void ApplyToFullState(DecalGridState state) { - DebugTools.Assert(!FullState); - var state = (DecalGridState) fullState; - DebugTools.Assert(state.FullState); - foreach (var key in state.Chunks.Keys) { if (!AllChunks!.Contains(key)) state.Chunks.Remove(key); } - foreach (var (chunk, data) in Chunks) + foreach (var (chunk, data) in ModifiedChunks) { state.Chunks[chunk] = new(data); } } - public IComponentState CreateNewFullState(IComponentState fullState) + public DecalGridState CreateNewFullState(DecalGridState state) { - DebugTools.Assert(!FullState); - var state = (DecalGridState) fullState; - DebugTools.Assert(state.FullState); - var chunks = new Dictionary(state.Chunks.Count); - foreach (var (chunk, data) in Chunks) + foreach (var (chunk, data) in ModifiedChunks) { chunks[chunk] = new(data); } diff --git a/Content.Shared/Decals/SharedDecalSystem.cs b/Content.Shared/Decals/SharedDecalSystem.cs index 76fa9d64dba..9dbef60f0da 100644 --- a/Content.Shared/Decals/SharedDecalSystem.cs +++ b/Content.Shared/Decals/SharedDecalSystem.cs @@ -49,7 +49,7 @@ private void OnGetState(EntityUid uid, DecalGridComponent component, ref Compone data[index] = chunk; } - args.State = new DecalGridState(data) { AllChunks = new(component.ChunkCollection.ChunkCollection.Keys) }; + args.State = new DecalGridDeltaState(data, new(component.ChunkCollection.ChunkCollection.Keys)); } private void OnGridInitialize(GridInitializeEvent msg) diff --git a/Content.Shared/DeltaV/CCVars/DCCVars.cs b/Content.Shared/DeltaV/CCVars/DCCVars.cs index 2028397ffe2..89a14275bef 100644 --- a/Content.Shared/DeltaV/CCVars/DCCVars.cs +++ b/Content.Shared/DeltaV/CCVars/DCCVars.cs @@ -15,10 +15,4 @@ public sealed class DCCVars /// public static readonly CVarDef RoundEndPacifist = CVarDef.Create("game.round_end_pacifist", false, CVar.SERVERONLY); - - /// - /// Disables all vision filters for species like Vulpkanin or Harpies. There are good reasons someone might want to disable these. - /// - public static readonly CVarDef NoVisionFilters = - CVarDef.Create("accessibility.no_vision_filters", false, CVar.CLIENTONLY | CVar.ARCHIVE); } diff --git a/Content.Shared/DeltaV/CartridgeLoader/Cartridges/MailMetricUiState.cs b/Content.Shared/DeltaV/CartridgeLoader/Cartridges/MailMetricUiState.cs new file mode 100644 index 00000000000..69506f5d0c2 --- /dev/null +++ b/Content.Shared/DeltaV/CartridgeLoader/Cartridges/MailMetricUiState.cs @@ -0,0 +1,50 @@ +using Content.Shared.Security; +using Robust.Shared.Serialization; + +namespace Content.Shared.CartridgeLoader.Cartridges; + +[Serializable, NetSerializable] +public sealed class MailMetricUiState : BoundUserInterfaceState +{ + public readonly MailStats Metrics; + public int UnopenedMailCount { get; } + public int TotalMail { get; } + public double SuccessRate { get; } + + public MailMetricUiState(MailStats metrics, int unopenedMailCount) + { + Metrics = metrics; + UnopenedMailCount = unopenedMailCount; + TotalMail = metrics.TotalMail(unopenedMailCount); + SuccessRate = metrics.SuccessRate(unopenedMailCount); + } +} + +[DataDefinition] +[Serializable, NetSerializable] +public partial record struct MailStats +{ + public int Earnings { get; init; } + public int DamagedLosses { get; init; } + public int ExpiredLosses { get; init; } + public int TamperedLosses { get; init; } + public int OpenedCount { get; init; } + public int DamagedCount { get; init; } + public int ExpiredCount { get; init; } + public int TamperedCount { get; init; } + + public readonly int TotalMail(int unopenedCount) + { + return OpenedCount + unopenedCount; + } + + public readonly int TotalIncome => Earnings + DamagedLosses + ExpiredLosses + TamperedLosses; + + public readonly double SuccessRate(int unopenedCount) + { + var totalMail = TotalMail(unopenedCount); + return (totalMail > 0) + ? Math.Round((double)OpenedCount / totalMail * 100, 2) + : 0; + } +} \ No newline at end of file diff --git a/Content.Shared/DeltaV/GlimmerWisp/Events.cs b/Content.Shared/DeltaV/GlimmerWisp/Events.cs new file mode 100644 index 00000000000..10d985193b1 --- /dev/null +++ b/Content.Shared/DeltaV/GlimmerWisp/Events.cs @@ -0,0 +1,5 @@ +using Content.Shared.DoAfter; +using Robust.Shared.Serialization; + +[NetSerializable, Serializable] +public sealed partial class LifeDrainDoAfterEvent : SimpleDoAfterEvent; diff --git a/Content.Shared/DeviceLinking/DevicePortPrototype.cs b/Content.Shared/DeviceLinking/DevicePortPrototype.cs index c0a419ee653..e3421dda9db 100644 --- a/Content.Shared/DeviceLinking/DevicePortPrototype.cs +++ b/Content.Shared/DeviceLinking/DevicePortPrototype.cs @@ -29,13 +29,13 @@ public abstract class DevicePortPrototype [Prototype("sinkPort")] [Serializable, NetSerializable] -public sealed class SinkPortPrototype : DevicePortPrototype, IPrototype +public sealed partial class SinkPortPrototype : DevicePortPrototype, IPrototype { } [Prototype("sourcePort")] [Serializable, NetSerializable] -public sealed class SourcePortPrototype : DevicePortPrototype, IPrototype +public sealed partial class SourcePortPrototype : DevicePortPrototype, IPrototype { /// /// This is a set of sink ports that this source port will attempt to link to when using the diff --git a/Content.Shared/DeviceNetwork/Systems/SharedNetworkConfiguratorSystem.cs b/Content.Shared/DeviceNetwork/Systems/SharedNetworkConfiguratorSystem.cs index 4aa9db199dc..53928f83a98 100644 --- a/Content.Shared/DeviceNetwork/Systems/SharedNetworkConfiguratorSystem.cs +++ b/Content.Shared/DeviceNetwork/Systems/SharedNetworkConfiguratorSystem.cs @@ -1,10 +1,23 @@ using Content.Shared.Actions; +using Content.Shared.DeviceNetwork.Components; +using Content.Shared.UserInterface; using Robust.Shared.Serialization; namespace Content.Shared.DeviceNetwork.Systems; public abstract class SharedNetworkConfiguratorSystem : EntitySystem { + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnUiOpenAttempt); + } + + private void OnUiOpenAttempt(EntityUid uid, NetworkConfiguratorComponent configurator, ActivatableUIOpenAttemptEvent args) + { + if (configurator.LinkModeActive) + args.Cancel(); + } } public sealed partial class ClearAllOverlaysEvent : InstantActionEvent diff --git a/Content.Shared/Disposal/Components/SharedDisposalUnitComponent.cs b/Content.Shared/Disposal/Components/SharedDisposalUnitComponent.cs index 4948cb6640e..36dd14f9b22 100644 --- a/Content.Shared/Disposal/Components/SharedDisposalUnitComponent.cs +++ b/Content.Shared/Disposal/Components/SharedDisposalUnitComponent.cs @@ -36,13 +36,6 @@ public abstract partial class SharedDisposalUnitComponent : Component [ViewVariables(VVAccess.ReadWrite), DataField("soundInsert")] public SoundSpecifier? InsertSound = new SoundPathSpecifier("/Audio/Effects/trashbag1.ogg"); - /// - /// Sound played when an item is thrown and misses the disposal unit. - /// - [ViewVariables(VVAccess.ReadWrite), DataField("soundMiss")] - public SoundSpecifier? MissSound = new SoundPathSpecifier("/Audio/Effects/thudswoosh.ogg"); - - /// /// State for this disposals unit. /// diff --git a/Content.Shared/DoAfter/DoAfterEvent.cs b/Content.Shared/DoAfter/DoAfterEvent.cs index c01505f9b25..bc9abdab87b 100644 --- a/Content.Shared/DoAfter/DoAfterEvent.cs +++ b/Content.Shared/DoAfter/DoAfterEvent.cs @@ -73,7 +73,7 @@ public sealed partial class DoAfterAttemptEvent : CancellableEntityEvent public readonly DoAfter DoAfter; /// - /// The event that the DoAfter will raise after sucesfully finishing. Given that this event has the data + /// The event that the DoAfter will raise after successfully finishing. Given that this event has the data /// required to perform the interaction, it should also contain the data required to validate/attempt the /// interaction. /// diff --git a/Content.Shared/DoAfter/SharedDoAfterSystem.Update.cs b/Content.Shared/DoAfter/SharedDoAfterSystem.Update.cs index abd8888f583..24b38417596 100644 --- a/Content.Shared/DoAfter/SharedDoAfterSystem.Update.cs +++ b/Content.Shared/DoAfter/SharedDoAfterSystem.Update.cs @@ -101,6 +101,7 @@ private bool TryAttemptEvent(DoAfter doAfter) doAfter.AttemptEvent = _factory.CreateInstance(evType, new object[] { doAfter, args.Event }); } + args.Event.DoAfter = doAfter; if (args.EventTarget != null) RaiseLocalEvent(args.EventTarget.Value, doAfter.AttemptEvent, args.Broadcast); else diff --git a/Content.Shared/DoAfter/SharedDoAfterSystem.cs b/Content.Shared/DoAfter/SharedDoAfterSystem.cs index 58b9f4b31e4..d893fb53e1c 100644 --- a/Content.Shared/DoAfter/SharedDoAfterSystem.cs +++ b/Content.Shared/DoAfter/SharedDoAfterSystem.cs @@ -253,8 +253,9 @@ public bool TryStartDoAfter(DoAfterArgs args, [NotNullWhen(true)] out DoAfterId? if (args.AttemptFrequency == AttemptFrequency.StartAndEnd && !TryAttemptEvent(doAfter)) return false; - if (args.Delay <= TimeSpan.Zero || - _tag.HasTag(args.User, "InstantDoAfters")) + // TODO DO AFTER + // Why does this tag exist? Just make this a bool on the component? + if (args.Delay <= TimeSpan.Zero || _tag.HasTag(args.User, "InstantDoAfters")) { RaiseDoAfterEvents(doAfter, comp); // We don't store instant do-afters. This is just a lazy way of hiding them from client-side visuals. diff --git a/Content.Shared/Dragon/SharedDragonRiftComponent.cs b/Content.Shared/Dragon/SharedDragonRiftComponent.cs index 0d2bf440180..8377dbfee7a 100644 --- a/Content.Shared/Dragon/SharedDragonRiftComponent.cs +++ b/Content.Shared/Dragon/SharedDragonRiftComponent.cs @@ -1,9 +1,10 @@ using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; using Robust.Shared.Serialization; namespace Content.Shared.Dragon; -[NetworkedComponent] +[NetworkedComponent, EntityCategory("Spawner")] public abstract partial class SharedDragonRiftComponent : Component { [DataField("state")] diff --git a/Content.Shared/Ensnaring/Components/EnsnaringComponent.cs b/Content.Shared/Ensnaring/Components/EnsnaringComponent.cs index 6e1f3077f30..fe415e0f4a8 100644 --- a/Content.Shared/Ensnaring/Components/EnsnaringComponent.cs +++ b/Content.Shared/Ensnaring/Components/EnsnaringComponent.cs @@ -11,59 +11,57 @@ public sealed partial class EnsnaringComponent : Component /// /// How long it should take to free someone else. /// - [ViewVariables(VVAccess.ReadWrite)] - [DataField("freeTime")] + [DataField] public float FreeTime = 3.5f; /// /// How long it should take for an entity to free themselves. /// - [ViewVariables(VVAccess.ReadWrite)] - [DataField("breakoutTime")] + [DataField] public float BreakoutTime = 30.0f; /// /// How much should this slow down the entities walk? /// - [ViewVariables(VVAccess.ReadWrite)] - [DataField("walkSpeed")] + [DataField] public float WalkSpeed = 0.9f; /// /// How much should this slow down the entities sprint? /// - [ViewVariables(VVAccess.ReadWrite)] - [DataField("sprintSpeed")] + [DataField] public float SprintSpeed = 0.9f; /// /// How much stamina does the ensnare sap /// - [ViewVariables(VVAccess.ReadWrite)] - [DataField("staminaDamage")] + [DataField] public float StaminaDamage = 55f; /// /// Should this ensnare someone when thrown? /// - [ViewVariables(VVAccess.ReadWrite)] - [DataField("canThrowTrigger")] + [DataField] public bool CanThrowTrigger; /// /// What is ensnared? /// - [ViewVariables(VVAccess.ReadWrite)] - [DataField("ensnared")] + [DataField] public EntityUid? Ensnared; /// /// Should breaking out be possible when moving? /// - [ViewVariables(VVAccess.ReadWrite)] - [DataField("canMoveBreakout")] + [DataField] public bool CanMoveBreakout; + /// + /// Should the ensaring entity be deleted upon removal? + /// + [DataField] + public bool DestroyOnRemove = false; + } /// diff --git a/Content.Shared/Explosion/Components/ExplosionVisualsComponent.cs b/Content.Shared/Explosion/Components/ExplosionVisualsComponent.cs index 7477b6c26ea..88e81c93c52 100644 --- a/Content.Shared/Explosion/Components/ExplosionVisualsComponent.cs +++ b/Content.Shared/Explosion/Components/ExplosionVisualsComponent.cs @@ -1,3 +1,4 @@ +using System.Numerics; using Robust.Shared.GameStates; using Robust.Shared.Map; using Robust.Shared.Serialization; @@ -15,7 +16,7 @@ public sealed partial class ExplosionVisualsComponent : Component public Dictionary>> Tiles = new(); public List Intensity = new(); public string ExplosionType = string.Empty; - public Matrix3 SpaceMatrix; + public Matrix3x2 SpaceMatrix; public ushort SpaceTileSize; } @@ -27,7 +28,7 @@ public sealed class ExplosionVisualsState : ComponentState public Dictionary>> Tiles; public List Intensity; public string ExplosionType = string.Empty; - public Matrix3 SpaceMatrix; + public Matrix3x2 SpaceMatrix; public ushort SpaceTileSize; public ExplosionVisualsState( @@ -36,7 +37,7 @@ public ExplosionVisualsState( List intensity, Dictionary>? spaceTiles, Dictionary>> tiles, - Matrix3 spaceMatrix, + Matrix3x2 spaceMatrix, ushort spaceTileSize) { Epicenter = epicenter; diff --git a/Content.Shared/Extinguisher/SharedFireExtinguisherComponent.cs b/Content.Shared/Extinguisher/SharedFireExtinguisherComponent.cs index 53d58f1d80f..dbb1f6f2c4d 100644 --- a/Content.Shared/Extinguisher/SharedFireExtinguisherComponent.cs +++ b/Content.Shared/Extinguisher/SharedFireExtinguisherComponent.cs @@ -1,8 +1,10 @@ using Robust.Shared.Audio; +using Robust.Shared.GameStates; using Robust.Shared.Serialization; namespace Content.Shared.Extinguisher; +[NetworkedComponent] public abstract partial class SharedFireExtinguisherComponent : Component { [DataField("refillSound")] public SoundSpecifier RefillSound = new SoundPathSpecifier("/Audio/Effects/refill.ogg"); diff --git a/Content.Shared/Eye/Blinding/Components/BlindableComponent.cs b/Content.Shared/Eye/Blinding/Components/BlindableComponent.cs index 4379d309bc4..c2e73bd6b89 100644 --- a/Content.Shared/Eye/Blinding/Components/BlindableComponent.cs +++ b/Content.Shared/Eye/Blinding/Components/BlindableComponent.cs @@ -24,7 +24,11 @@ public sealed partial class BlindableComponent : Component [ViewVariables(VVAccess.ReadWrite), DataField("EyeDamage"), AutoNetworkedField] public int EyeDamage = 0; - public const int MaxDamage = 9; + [ViewVariables(VVAccess.ReadOnly), DataField] + public int MaxDamage = 9; + + [ViewVariables(VVAccess.ReadOnly), DataField] + public int MinDamage = 0; /// /// Used to ensure that this doesn't break with sandbox or admin tools. diff --git a/Content.Shared/Eye/Blinding/Systems/BlindableSystem.cs b/Content.Shared/Eye/Blinding/Systems/BlindableSystem.cs index 5f24ff20188..24eed3adcf5 100644 --- a/Content.Shared/Eye/Blinding/Systems/BlindableSystem.cs +++ b/Content.Shared/Eye/Blinding/Systems/BlindableSystem.cs @@ -37,7 +37,7 @@ public void UpdateIsBlind(Entity blindable) var old = blindable.Comp.IsBlind; // Don't bother raising an event if the eye is too damaged. - if (blindable.Comp.EyeDamage >= BlindableComponent.MaxDamage) + if (blindable.Comp.EyeDamage >= blindable.Comp.MaxDamage) { blindable.Comp.IsBlind = true; } @@ -62,13 +62,31 @@ public void AdjustEyeDamage(Entity blindable, int amount) return; blindable.Comp.EyeDamage += amount; - blindable.Comp.EyeDamage = Math.Clamp(blindable.Comp.EyeDamage, 0, BlindableComponent.MaxDamage); + UpdateEyeDamage(blindable, true); + } + private void UpdateEyeDamage(Entity blindable, bool isDamageChanged) + { + if (!Resolve(blindable, ref blindable.Comp, false)) + return; + + var previousDamage = blindable.Comp.EyeDamage; + blindable.Comp.EyeDamage = Math.Clamp(blindable.Comp.EyeDamage, blindable.Comp.MinDamage, blindable.Comp.MaxDamage); Dirty(blindable); - UpdateIsBlind(blindable); + if (!isDamageChanged && previousDamage == blindable.Comp.EyeDamage) + return; + UpdateIsBlind(blindable); var ev = new EyeDamageChangedEvent(blindable.Comp.EyeDamage); RaiseLocalEvent(blindable.Owner, ref ev); } + public void SetMinDamage(Entity blindable, int amount) + { + if (!Resolve(blindable, ref blindable.Comp, false)) + return; + + blindable.Comp.MinDamage = amount; + UpdateEyeDamage(blindable, false); + } } /// diff --git a/Content.Shared/Eye/Blinding/Systems/EyeClosingSystem.cs b/Content.Shared/Eye/Blinding/Systems/EyeClosingSystem.cs index 5326af9636e..9a4afaec3a9 100644 --- a/Content.Shared/Eye/Blinding/Systems/EyeClosingSystem.cs +++ b/Content.Shared/Eye/Blinding/Systems/EyeClosingSystem.cs @@ -1,4 +1,3 @@ - using Content.Shared.Actions; using Content.Shared.Eye.Blinding.Components; using Robust.Shared.Audio.Systems; @@ -124,7 +123,7 @@ public void UpdateEyesClosable(Entity blindable) if (_entityManager.TryGetComponent(blindable, out var eyelids) && !eyelids.NaturallyCreated) return; - if (ev.Blur < BlurryVisionComponent.MaxMagnitude || ev.Blur >= BlindableComponent.MaxDamage) + if (ev.Blur < BlurryVisionComponent.MaxMagnitude || ev.Blur >= blindable.Comp.MaxDamage) { RemCompDeferred(blindable); return; diff --git a/Content.Shared/Eye/VisibilityFlags.cs b/Content.Shared/Eye/VisibilityFlags.cs index 7e2dd33d7d4..2e20b1de4f3 100644 --- a/Content.Shared/Eye/VisibilityFlags.cs +++ b/Content.Shared/Eye/VisibilityFlags.cs @@ -6,10 +6,11 @@ namespace Content.Shared.Eye [FlagsFor(typeof(VisibilityMaskLayer))] public enum VisibilityFlags : int { - None = 0, + None = 0, Normal = 1 << 0, - Ghost = 1 << 1, + Ghost = 1 << 1, PsionicInvisibility = 1 << 2, //Nyano - Summary: adds Psionic Invisibility as a visibility layer. Currently does nothing. - TelegnosticProjection = 5, + TelegnosticProjection = 5, + Ethereal = 1 << 3, } } diff --git a/Content.Server/Fax/FaxMachineComponent.cs b/Content.Shared/Fax/Components/FaxMachineComponent.cs similarity index 80% rename from Content.Server/Fax/FaxMachineComponent.cs rename to Content.Shared/Fax/Components/FaxMachineComponent.cs index a189bdc05ac..5599befa31b 100644 --- a/Content.Server/Fax/FaxMachineComponent.cs +++ b/Content.Shared/Fax/Components/FaxMachineComponent.cs @@ -1,12 +1,13 @@ using Content.Shared.Containers.ItemSlots; using Content.Shared.Paper; using Robust.Shared.Audio; +using Robust.Shared.GameStates; using Robust.Shared.Prototypes; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; -namespace Content.Server.Fax; +namespace Content.Shared.Fax.Components; -[RegisterComponent] +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] public sealed partial class FaxMachineComponent : Component { /// @@ -16,6 +17,13 @@ public sealed partial class FaxMachineComponent : Component [DataField("name")] public string FaxName { get; set; } = "Unknown"; + /// + /// Sprite to use when inserting an object. + /// + [ViewVariables(VVAccess.ReadWrite)] + [DataField, AutoNetworkedField] + public string InsertingState = "inserting"; + /// /// Device address of fax in network to which data will be send /// @@ -26,7 +34,7 @@ public sealed partial class FaxMachineComponent : Component /// /// Contains the item to be sent, assumes it's paper... /// - [DataField("paperSlot", required: true)] + [DataField(required: true)] public ItemSlot PaperSlot = new(); /// @@ -34,21 +42,21 @@ public sealed partial class FaxMachineComponent : Component /// This will make it visible to others on the network /// [ViewVariables(VVAccess.ReadWrite)] - [DataField("responsePings")] + [DataField] public bool ResponsePings { get; set; } = true; /// /// Should admins be notified on message receive /// [ViewVariables(VVAccess.ReadWrite)] - [DataField("notifyAdmins")] + [DataField] public bool NotifyAdmins { get; set; } = false; /// /// Should that fax receive nuke codes send by admins. Probably should be captain fax only /// [ViewVariables(VVAccess.ReadWrite)] - [DataField("receiveNukeCodes")] + [DataField] public bool ReceiveNukeCodes { get; set; } = false; /// @@ -60,19 +68,19 @@ public sealed partial class FaxMachineComponent : Component /// /// Sound to play when fax has been emagged /// - [DataField("emagSound")] + [DataField] public SoundSpecifier EmagSound = new SoundCollectionSpecifier("sparks"); /// /// Sound to play when fax printing new message /// - [DataField("printSound")] + [DataField] public SoundSpecifier PrintSound = new SoundPathSpecifier("/Audio/Machines/printer.ogg"); /// /// Sound to play when fax successfully send message /// - [DataField("sendSound")] + [DataField] public SoundSpecifier SendSound = new SoundPathSpecifier("/Audio/Machines/high_tech_confirm.ogg"); /// @@ -85,27 +93,27 @@ public sealed partial class FaxMachineComponent : Component /// Print queue of the incoming message /// [ViewVariables] - [DataField("printingQueue")] + [DataField] public Queue PrintingQueue { get; private set; } = new(); /// /// Message sending timeout /// [ViewVariables] - [DataField("sendTimeoutRemaining")] + [DataField] public float SendTimeoutRemaining; /// /// Message sending timeout /// [ViewVariables] - [DataField("sendTimeout")] + [DataField] public float SendTimeout = 5f; /// /// Remaining time of inserting animation /// - [DataField("insertingTimeRemaining")] + [DataField] public float InsertingTimeRemaining; /// @@ -117,7 +125,7 @@ public sealed partial class FaxMachineComponent : Component /// /// Remaining time of printing animation /// - [DataField("printingTimeRemaining")] + [DataField] public float PrintingTimeRemaining; /// @@ -130,13 +138,16 @@ public sealed partial class FaxMachineComponent : Component [DataDefinition] public sealed partial class FaxPrintout { - [DataField("name", required: true)] + [DataField(required: true)] public string Name { get; private set; } = default!; - [DataField("content", required: true)] + [DataField] + public string? Label { get; private set; } + + [DataField(required: true)] public string Content { get; private set; } = default!; - [DataField("prototypeId", customTypeSerializer: typeof(PrototypeIdSerializer), required: true)] + [DataField(customTypeSerializer: typeof(PrototypeIdSerializer), required: true)] public string PrototypeId { get; private set; } = default!; [DataField("stampState")] @@ -149,10 +160,11 @@ private FaxPrintout() { } - public FaxPrintout(string content, string name, string? prototypeId = null, string? stampState = null, List? stampedBy = null) + public FaxPrintout(string content, string name, string? label = null, string? prototypeId = null, string? stampState = null, List? stampedBy = null) { Content = content; Name = name; + Label = label; PrototypeId = prototypeId ?? ""; StampState = stampState; StampedBy = stampedBy ?? new List(); diff --git a/Content.Shared/Fax/Components/FaxableObjectComponent.cs b/Content.Shared/Fax/Components/FaxableObjectComponent.cs new file mode 100644 index 00000000000..57b6e610a32 --- /dev/null +++ b/Content.Shared/Fax/Components/FaxableObjectComponent.cs @@ -0,0 +1,16 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Fax.Components; +/// +/// Entity with this component can be faxed. +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class FaxableObjectComponent : Component +{ + /// + /// Sprite to use when inserting an object. + /// + [ViewVariables(VVAccess.ReadWrite)] + [DataField, AutoNetworkedField] + public string InsertingState = "inserting"; +} diff --git a/Content.Shared/Fax/Components/FaxecuteComponent.cs b/Content.Shared/Fax/Components/FaxecuteComponent.cs new file mode 100644 index 00000000000..9c9bd030203 --- /dev/null +++ b/Content.Shared/Fax/Components/FaxecuteComponent.cs @@ -0,0 +1,19 @@ +using Content.Shared.Damage; +using Robust.Shared.GameStates; + +namespace Content.Shared.Fax.Components; + +/// +/// A fax component which stores a damage specifier for attempting to fax a mob. +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class FaxecuteComponent : Component +{ + + /// + /// Type of damage dealt when entity is faxecuted. + /// + [DataField(required: true), AutoNetworkedField] + public DamageSpecifier Damage = new(); +} + diff --git a/Content.Shared/Fax/DamageOnFaxecuteEvent.cs b/Content.Shared/Fax/DamageOnFaxecuteEvent.cs new file mode 100644 index 00000000000..b36f55ab5d2 --- /dev/null +++ b/Content.Shared/Fax/DamageOnFaxecuteEvent.cs @@ -0,0 +1,9 @@ + +namespace Content.Shared.Fax.Components; + +/// +/// Event for killing any mob within the fax machine. +/// +/// System for handling execution of a mob within fax when copy or send attempt is made. +/// +public sealed class FaxecuteSystem : EntitySystem +{ + [Dependency] private readonly DamageableSystem _damageable = default!; + [Dependency] private readonly SharedPopupSystem _popupSystem = default!; + + public override void Initialize() + { + base.Initialize(); + } + + public void Faxecute(EntityUid uid, FaxMachineComponent component, DamageOnFaxecuteEvent? args = null) + { + var sendEntity = component.PaperSlot.Item; + if (sendEntity == null) + return; + + if (!TryComp(uid, out var faxecute)) + return; + + var damageSpec = faxecute.Damage; + _damageable.TryChangeDamage(sendEntity, damageSpec); + _popupSystem.PopupEntity(Loc.GetString("fax-machine-popup-error", ("target", uid)), uid, PopupType.LargeCaution); + return; + + } +} diff --git a/Content.Shared/Flash/Components/FlashComponent.cs b/Content.Shared/Flash/Components/FlashComponent.cs index a26e32cb70f..a9098bc85a9 100644 --- a/Content.Shared/Flash/Components/FlashComponent.cs +++ b/Content.Shared/Flash/Components/FlashComponent.cs @@ -12,6 +12,13 @@ public sealed partial class FlashComponent : Component [ViewVariables(VVAccess.ReadWrite)] public int FlashDuration { get; set; } = 5000; + /// + /// How long a target is stunned when a melee flash is used. + /// If null, melee flashes will not stun at all + /// + [DataField] + public TimeSpan? MeleeStunDuration = TimeSpan.FromSeconds(1.5); + [DataField("range")] [ViewVariables(VVAccess.ReadWrite)] public float Range { get; set; } = 7f; @@ -32,5 +39,8 @@ public sealed partial class FlashComponent : Component }; public bool Flashing; + + [DataField] + public float Probability = 1f; } } diff --git a/Content.Shared/Flash/Components/FlashOnTriggerComponent.cs b/Content.Shared/Flash/Components/FlashOnTriggerComponent.cs index d1270e9db74..7658ca0ae5a 100644 --- a/Content.Shared/Flash/Components/FlashOnTriggerComponent.cs +++ b/Content.Shared/Flash/Components/FlashOnTriggerComponent.cs @@ -9,4 +9,5 @@ public sealed partial class FlashOnTriggerComponent : Component { [DataField] public float Range = 1.0f; [DataField] public float Duration = 8.0f; + [DataField] public float Probability = 1.0f; } diff --git a/Content.Shared/Follower/FollowerSystem.cs b/Content.Shared/Follower/FollowerSystem.cs index fc7cccf9bd6..6c02b130762 100644 --- a/Content.Shared/Follower/FollowerSystem.cs +++ b/Content.Shared/Follower/FollowerSystem.cs @@ -247,6 +247,27 @@ public void StopAllFollowers(EntityUid uid, StopFollowingEntity(player, uid, followed); } } + + /// + /// Get the most followed entity. + /// + public EntityUid? GetMostFollowed() + { + EntityUid? picked = null; + int most = 0; + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var comp)) + { + var count = comp.Following.Count; + if (count > most) + { + picked = uid; + most = count; + } + } + + return picked; + } } public abstract class FollowEvent : EntityEventArgs diff --git a/Content.Shared/Footprint/FootPrintComponent.cs b/Content.Shared/Footprint/FootPrintComponent.cs new file mode 100644 index 00000000000..e1f9716057f --- /dev/null +++ b/Content.Shared/Footprint/FootPrintComponent.cs @@ -0,0 +1,23 @@ +using Content.Shared.Chemistry.Components; +using Robust.Shared.GameStates; + +namespace Content.Shared.FootPrint; + +/// +/// This is used for marking footsteps, handling footprint drawing. +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class FootPrintComponent : Component +{ + /// + /// Owner (with ) of a print (this component). + /// + [AutoNetworkedField] + public EntityUid PrintOwner; + + [DataField] + public string SolutionName = "step"; + + [DataField] + public Entity? Solution; +} diff --git a/Content.Shared/Footprint/FootPrintVisuals.cs b/Content.Shared/Footprint/FootPrintVisuals.cs new file mode 100644 index 00000000000..f980f60a6d9 --- /dev/null +++ b/Content.Shared/Footprint/FootPrintVisuals.cs @@ -0,0 +1,25 @@ +using Robust.Shared.Serialization; + +namespace Content.Shared.FootPrint; + +[Serializable, NetSerializable] +public enum FootPrintVisuals : byte +{ + BareFootPrint, + ShoesPrint, + SuitPrint, + Dragging +} + +[Serializable, NetSerializable] +public enum FootPrintVisualState : byte +{ + State, + Color +} + +[Serializable, NetSerializable] +public enum FootPrintVisualLayers : byte +{ + Print +} diff --git a/Content.Shared/Footprint/FootPrintsComponent.cs b/Content.Shared/Footprint/FootPrintsComponent.cs new file mode 100644 index 00000000000..2b2c4ed66ed --- /dev/null +++ b/Content.Shared/Footprint/FootPrintsComponent.cs @@ -0,0 +1,88 @@ +using System.Numerics; +using Robust.Shared.Prototypes; +using Robust.Shared.Utility; + +namespace Content.Shared.FootPrint; + +[RegisterComponent] +public sealed partial class FootPrintsComponent : Component +{ + [ViewVariables(VVAccess.ReadOnly), DataField] + public ResPath RsiPath = new("/Textures/Effects/footprints.rsi"); + + // all of those are set as a layer + [ViewVariables(VVAccess.ReadOnly), DataField] + public string LeftBarePrint = "footprint-left-bare-human"; + + [ViewVariables(VVAccess.ReadOnly), DataField] + public string RightBarePrint = "footprint-right-bare-human"; + + [ViewVariables(VVAccess.ReadOnly), DataField] + public string ShoesPrint = "footprint-shoes"; + + [ViewVariables(VVAccess.ReadOnly), DataField] + public string SuitPrint = "footprint-suit"; + + [ViewVariables(VVAccess.ReadOnly), DataField] + public string[] DraggingPrint = + [ + "dragging-1", + "dragging-2", + "dragging-3", + "dragging-4", + "dragging-5", + ]; + // yea, those + + [ViewVariables(VVAccess.ReadOnly), DataField] + public EntProtoId StepProtoId = "Footstep"; + + [ViewVariables(VVAccess.ReadOnly), DataField] + public Color PrintsColor = Color.FromHex("#00000000"); + + /// + /// The size scaling factor for footprint steps. Must be positive. + /// + [DataField] + public float StepSize = 0.7f; + + /// + /// The size scaling factor for drag marks. Must be positive. + /// + [DataField] + public float DragSize = 0.5f; + + /// + /// The amount of color to transfer from the source (e.g., puddle) to the footprint. + /// + [DataField] + public float ColorQuantity; + + /// + /// The factor by which the alpha channel is reduced in subsequent footprints. + /// + [DataField] + public float ColorReduceAlpha = 0.1f; + + [DataField] + public string? ReagentToTransfer; + + [DataField] + public Vector2 OffsetPrint = new(0.1f, 0f); + + /// + /// Tracks which foot should make the next print. True for right foot, false for left. + /// + public bool RightStep = true; + + /// + /// The position of the last footprint in world coordinates. + /// + public Vector2 StepPos = Vector2.Zero; + + /// + /// Controls how quickly the footprint color transitions between steps. + /// Value between 0 and 1, where higher values mean faster color changes. + /// + public float ColorInterpolationFactor = 0.2f; +} diff --git a/Content.Shared/Footprint/PuddleFootPrintsComponent.cs b/Content.Shared/Footprint/PuddleFootPrintsComponent.cs new file mode 100644 index 00000000000..0e2ddfe3836 --- /dev/null +++ b/Content.Shared/Footprint/PuddleFootPrintsComponent.cs @@ -0,0 +1,11 @@ +namespace Content.Shared.FootPrint; + +[RegisterComponent] +public sealed partial class PuddleFootPrintsComponent : Component +{ + [ViewVariables(VVAccess.ReadWrite)] + public float SizeRatio = 0.2f; + + [ViewVariables(VVAccess.ReadWrite)] + public float OffPercent = 80f; +} diff --git a/Content.Shared/Geras/SharedGerasSystem.cs b/Content.Shared/Geras/SharedGerasSystem.cs new file mode 100644 index 00000000000..8c998371b64 --- /dev/null +++ b/Content.Shared/Geras/SharedGerasSystem.cs @@ -0,0 +1,16 @@ +using Content.Shared.Actions; + +namespace Content.Shared.Geras; + +/// +/// Geras is the god of old age, and A geras is the small morph of a slime. This system allows the slimes to have the morphing action. +/// +public abstract class SharedGerasSystem : EntitySystem +{ + +} + +public sealed partial class MorphIntoGeras : InstantActionEvent +{ + +} diff --git a/Content.Shared/Ghost/GhostComponent.cs b/Content.Shared/Ghost/GhostComponent.cs index f7717e8d232..96e9b717b90 100644 --- a/Content.Shared/Ghost/GhostComponent.cs +++ b/Content.Shared/Ghost/GhostComponent.cs @@ -101,4 +101,6 @@ public sealed partial class ToggleLightingActionEvent : InstantActionEvent { } public sealed partial class ToggleGhostHearingActionEvent : InstantActionEvent { } +public sealed partial class ToggleGhostVisibilityToAllEvent : InstantActionEvent { } + public sealed partial class BooActionEvent : InstantActionEvent { } diff --git a/Content.Shared/Ghost/Roles/GhostRolePrototype.cs b/Content.Shared/Ghost/Roles/GhostRolePrototype.cs new file mode 100644 index 00000000000..43d64322504 --- /dev/null +++ b/Content.Shared/Ghost/Roles/GhostRolePrototype.cs @@ -0,0 +1,38 @@ +using Robust.Shared.Prototypes; + +namespace Content.Shared.Ghost.Roles; + +/// +/// For selectable ghostrole prototypes in ghostrole spawners. +/// +[Prototype] +public sealed partial class GhostRolePrototype : IPrototype +{ + [ViewVariables] + [IdDataField] + public string ID { get; private set; } = default!; + + /// + /// The name of the ghostrole. + /// + [DataField] + public string Name { get; set; } = default!; + + /// + /// The description of the ghostrole. + /// + [DataField] + public string Description { get; set; } = default!; + + /// + /// The entity prototype of the ghostrole + /// + [DataField] + public string EntityPrototype = default!; + + /// + /// Rules of the ghostrole + /// + [DataField] + public string Rules = default!; +} \ No newline at end of file diff --git a/Content.Shared/Ghost/Roles/GhostRolesEuiMessages.cs b/Content.Shared/Ghost/Roles/GhostRolesEuiMessages.cs index 74af1e89ecc..4dd6bfa433d 100644 --- a/Content.Shared/Ghost/Roles/GhostRolesEuiMessages.cs +++ b/Content.Shared/Ghost/Roles/GhostRolesEuiMessages.cs @@ -13,6 +13,20 @@ public struct GhostRoleInfo public string Description { get; set; } public string Rules { get; set; } public List? Requirements { get; set; } + + /// + public GhostRoleKind Kind { get; set; } + + /// + /// if is , specifies how many players are currently + /// in the raffle for this role. + /// + public uint RafflePlayerCount { get; set; } + + /// + /// if is , specifies when raffle finishes. + /// + public TimeSpan RaffleEndTime { get; set; } } [NetSerializable, Serializable] @@ -27,24 +41,62 @@ public GhostRolesEuiState(GhostRoleInfo[] ghostRoles) } [NetSerializable, Serializable] - public sealed class GhostRoleTakeoverRequestMessage : EuiMessageBase + public sealed class RequestGhostRoleMessage : EuiMessageBase { public uint Identifier { get; } - public GhostRoleTakeoverRequestMessage(uint identifier) + public RequestGhostRoleMessage(uint identifier) { Identifier = identifier; } } [NetSerializable, Serializable] - public sealed class GhostRoleFollowRequestMessage : EuiMessageBase + public sealed class FollowGhostRoleMessage : EuiMessageBase { public uint Identifier { get; } - public GhostRoleFollowRequestMessage(uint identifier) + public FollowGhostRoleMessage(uint identifier) { Identifier = identifier; } } + + [NetSerializable, Serializable] + public sealed class LeaveGhostRoleRaffleMessage : EuiMessageBase + { + public uint Identifier { get; } + + public LeaveGhostRoleRaffleMessage(uint identifier) + { + Identifier = identifier; + } + } + + /// + /// Determines whether a ghost role is a raffle role, and if it is, whether it's running. + /// + [NetSerializable, Serializable] + public enum GhostRoleKind + { + /// + /// Role is not a raffle role and can be taken immediately. + /// + FirstComeFirstServe, + + /// + /// Role is a raffle role, but raffle hasn't started yet. + /// + RaffleReady, + + /// + /// Role is raffle role and currently being raffled, but player hasn't joined raffle. + /// + RaffleInProgress, + + /// + /// Role is raffle role and currently being raffled, and player joined raffle. + /// + RaffleJoined + } } diff --git a/Content.Shared/Ghost/Roles/Raffles/GhostRoleRaffleSettings.cs b/Content.Shared/Ghost/Roles/Raffles/GhostRoleRaffleSettings.cs new file mode 100644 index 00000000000..a7aa757b72a --- /dev/null +++ b/Content.Shared/Ghost/Roles/Raffles/GhostRoleRaffleSettings.cs @@ -0,0 +1,30 @@ +namespace Content.Server.Ghost.Roles.Raffles; + +/// +/// Defines settings for a ghost role raffle. +/// +[DataDefinition] +public sealed partial class GhostRoleRaffleSettings +{ + /// + /// The initial duration of a raffle in seconds. This is the countdown timer's value when the raffle starts. + /// + [ViewVariables(VVAccess.ReadWrite)] + [DataField(required: true)] + public uint InitialDuration { get; set; } + + /// + /// When the raffle is joined by a player, the countdown timer is extended by this value in seconds. + /// + [ViewVariables(VVAccess.ReadWrite)] + [DataField(required: true)] + public uint JoinExtendsDurationBy { get; set; } + + /// + /// The maximum duration in seconds for the ghost role raffle. A raffle cannot run for longer than this + /// duration, even if extended by joiners. Must be greater than or equal to . + /// + [ViewVariables(VVAccess.ReadWrite)] + [DataField(required: true)] + public uint MaxDuration { get; set; } +} diff --git a/Content.Shared/Ghost/Roles/Raffles/GhostRoleRaffleSettingsPrototype.cs b/Content.Shared/Ghost/Roles/Raffles/GhostRoleRaffleSettingsPrototype.cs new file mode 100644 index 00000000000..f1447a0e096 --- /dev/null +++ b/Content.Shared/Ghost/Roles/Raffles/GhostRoleRaffleSettingsPrototype.cs @@ -0,0 +1,22 @@ +using Content.Server.Ghost.Roles.Raffles; +using Robust.Shared.Prototypes; + +namespace Content.Shared.Ghost.Roles.Raffles; + +/// +/// Allows specifying the settings for a ghost role raffle as a prototype. +/// +[Prototype("ghostRoleRaffleSettings")] +public sealed class GhostRoleRaffleSettingsPrototype : IPrototype +{ + /// + [IdDataField] + public string ID { get; private set; } = default!; + + /// + /// The settings for a ghost role raffle. + /// + /// + [DataField(required: true)] + public GhostRoleRaffleSettings Settings { get; private set; } = new(); +} diff --git a/Content.Shared/Ghost/SharedGhostSystem.cs b/Content.Shared/Ghost/SharedGhostSystem.cs index 24da2f144f8..6f7370fe581 100644 --- a/Content.Shared/Ghost/SharedGhostSystem.cs +++ b/Content.Shared/Ghost/SharedGhostSystem.cs @@ -127,6 +127,12 @@ public GhostWarpToTargetRequestEvent(NetEntity target) } } + /// + /// A client to server request for their ghost to be warped to the most followed entity. + /// + [Serializable, NetSerializable] + public sealed class GhostnadoRequestEvent : EntityEventArgs; + /// /// A client to server request for their ghost to return to body /// @@ -148,4 +154,7 @@ public GhostUpdateGhostRoleCountEvent(int availableGhostRoleCount) AvailableGhostRoles = availableGhostRoleCount; } } + + [Serializable, NetSerializable] + public sealed class GhostReturnToRoundRequest : EntityEventArgs; } diff --git a/Content.Shared/GridPreloader/Prototypes/PreloadedGridPrototype.cs b/Content.Shared/GridPreloader/Prototypes/PreloadedGridPrototype.cs new file mode 100644 index 00000000000..89da9dfb8f7 --- /dev/null +++ b/Content.Shared/GridPreloader/Prototypes/PreloadedGridPrototype.cs @@ -0,0 +1,21 @@ +using Robust.Shared.Prototypes; +using Robust.Shared.Utility; + +namespace Content.Shared.GridPreloader.Prototypes; + +/// +/// Creating this prototype will automatically load the grid at the specified path at the beginning of the round, +/// and allow the GridPreloader system to load them in the middle of the round. This is needed for optimization, +/// because loading grids in the middle of a round causes the server to lag. +/// +[Prototype("preloadedGrid")] +public sealed partial class PreloadedGridPrototype : IPrototype +{ + [IdDataField] public string ID { get; } = string.Empty; + + [DataField(required: true)] + public ResPath Path; + + [DataField] + public int Copies = 1; +} diff --git a/Content.Shared/GridPreloader/Systems/SharedGridPreloaderSystem.cs b/Content.Shared/GridPreloader/Systems/SharedGridPreloaderSystem.cs new file mode 100644 index 00000000000..04c994adf2c --- /dev/null +++ b/Content.Shared/GridPreloader/Systems/SharedGridPreloaderSystem.cs @@ -0,0 +1,4 @@ +namespace Content.Shared.GridPreloader.Systems; +public abstract class SharedGridPreloaderSystem : EntitySystem +{ +} diff --git a/Content.Shared/Hands/Components/HandHelpers.cs b/Content.Shared/Hands/Components/HandHelpers.cs index 11fff6d9c8a..aecf3a69369 100644 --- a/Content.Shared/Hands/Components/HandHelpers.cs +++ b/Content.Shared/Hands/Components/HandHelpers.cs @@ -1,4 +1,5 @@ using System.Linq; +using Content.Shared.Hands.EntitySystems; namespace Content.Shared.Hands.Components; @@ -20,6 +21,15 @@ public static class HandHelpers /// public static int CountFreeHands(this HandsComponent component) => component.Hands.Values.Count(hand => hand.IsEmpty); + /// + /// Get the number of hands that are not currently holding anything. This is a LinQ method, not a property, so + /// cache it instead of accessing this multiple times. + /// + public static int CountFreeableHands(this Entity component, SharedHandsSystem system) + { + return system.CountFreeableHands(component); + } + /// /// Get a list of hands that are currently holding nothing. This is a LinQ method, not a property, so cache /// it instead of accessing this multiple times. diff --git a/Content.Shared/Hands/Components/HandsComponent.cs b/Content.Shared/Hands/Components/HandsComponent.cs index f1f25a69f7a..919d55f294a 100644 --- a/Content.Shared/Hands/Components/HandsComponent.cs +++ b/Content.Shared/Hands/Components/HandsComponent.cs @@ -126,9 +126,43 @@ public HandsComponentState(HandsComponent handComp) /// /// What side of the body this hand is on. /// +/// +/// public enum HandLocation : byte { Left, Middle, Right } + +/// +/// What side of the UI a hand is on. +/// +/// +/// +public enum HandUILocation : byte +{ + Left, + Right +} + +/// +/// Helper functions for working with . +/// +public static class HandLocationExt +{ + /// + /// Convert a into the appropriate . + /// This maps "middle" hands to . + /// + public static HandUILocation GetUILocation(this HandLocation location) + { + return location switch + { + HandLocation.Left => HandUILocation.Left, + HandLocation.Middle => HandUILocation.Right, + HandLocation.Right => HandUILocation.Right, + _ => throw new ArgumentOutOfRangeException(nameof(location), location, null) + }; + } +} diff --git a/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Interactions.cs b/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Interactions.cs index 32339eb03ac..6d4d332479f 100644 --- a/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Interactions.cs +++ b/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Interactions.cs @@ -8,6 +8,7 @@ using Robust.Shared.Input.Binding; using Robust.Shared.Map; using Robust.Shared.Player; +using Robust.Shared.Utility; namespace Content.Shared.Hands.EntitySystems; @@ -181,27 +182,21 @@ public bool TryMoveHeldEntityToActiveHand(EntityUid uid, string handName, bool c } //TODO: Actually shows all items/clothing/etc. - private void HandleExamined(EntityUid uid, HandsComponent handsComp, ExaminedEvent args) + private void HandleExamined(EntityUid examinedUid, HandsComponent handsComp, ExaminedEvent args) { - var held = EnumerateHeld(uid, handsComp) - .Where(x => !HasComp(x)).ToList(); + var heldItemNames = EnumerateHeld(examinedUid, handsComp) + .Where(entity => !HasComp(entity)) + .Select(item => FormattedMessage.EscapeText(Identity.Name(item, EntityManager))) + .Select(itemName => Loc.GetString("comp-hands-examine-wrapper", ("item", itemName))) + .ToList(); + + var locKey = heldItemNames.Count != 0 ? "comp-hands-examine" : "comp-hands-examine-empty"; + var locUser = ("user", Identity.Entity(examinedUid, EntityManager)); + var locItems = ("items", ContentLocalizationManager.FormatList(heldItemNames)); using (args.PushGroup(nameof(HandsComponent))) { - if (!held.Any()) - { - args.PushText(Loc.GetString("comp-hands-examine-empty", - ("user", Identity.Entity(uid, EntityManager)))); - return; - } - - var heldList = ContentLocalizationManager.FormatList(held - .Select(x => Loc.GetString("comp-hands-examine-wrapper", - ("item", Identity.Entity(x, EntityManager)))).ToList()); - - args.PushMarkup(Loc.GetString("comp-hands-examine", - ("user", Identity.Entity(uid, EntityManager)), - ("items", heldList))); + args.PushMarkup(Loc.GetString(locKey, locUser, locItems)); } } } diff --git a/Content.Shared/Hands/EntitySystems/SharedHandsSystem.cs b/Content.Shared/Hands/EntitySystems/SharedHandsSystem.cs index b72a7c4eb3c..40f2c5bbd59 100644 --- a/Content.Shared/Hands/EntitySystems/SharedHandsSystem.cs +++ b/Content.Shared/Hands/EntitySystems/SharedHandsSystem.cs @@ -5,7 +5,6 @@ using Content.Shared.Hands.Components; using Content.Shared.Interaction; using Content.Shared.Inventory.VirtualItem; -using Content.Shared.Item; using Content.Shared.Storage.EntitySystems; using Robust.Shared.Containers; using Robust.Shared.Input.Binding; @@ -87,7 +86,6 @@ public virtual void RemoveHand(EntityUid uid, string handName, HandsComponent? h /// /// /// - public void RemoveHands(EntityUid uid, HandsComponent? handsComp = null) { if (!Resolve(uid, ref handsComp)) @@ -137,6 +135,43 @@ public bool TryGetEmptyHand(EntityUid uid, [NotNullWhen(true)] out Hand? emptyHa return false; } + public bool TryGetActiveHand(Entity entity, [NotNullWhen(true)] out Hand? hand) + { + if (!Resolve(entity, ref entity.Comp, false)) + { + hand = null; + return false; + } + + hand = entity.Comp.ActiveHand; + return hand != null; + } + + public bool TryGetActiveItem(Entity entity, [NotNullWhen(true)] out EntityUid? item) + { + if (!TryGetActiveHand(entity, out var hand)) + { + item = null; + return false; + } + + item = hand.HeldEntity; + return item != null; + } + + public Hand? GetActiveHand(Entity entity) + { + if (!Resolve(entity, ref entity.Comp)) + return null; + + return entity.Comp.ActiveHand; + } + + public EntityUid? GetActiveItem(Entity entity) + { + return GetActiveHand(entity)?.HeldEntity; + } + /// /// Enumerate over hands, starting with the currently active hand. /// @@ -227,9 +262,17 @@ public bool SetActiveHand(EntityUid uid, Hand? hand, HandsComponent? handComp = return true; } - public bool IsHolding(EntityUid uid, EntityUid? entity, [NotNullWhen(true)] out Hand? inHand, HandsComponent? handsComp = null) + public bool IsHolding(Entity entity, [NotNullWhen(true)] EntityUid? item) + { + return IsHolding(entity, item, out _, entity); + } + + public bool IsHolding(EntityUid uid, [NotNullWhen(true)] EntityUid? entity, [NotNullWhen(true)] out Hand? inHand, HandsComponent? handsComp = null) { inHand = null; + if (entity == null) + return false; + if (!Resolve(uid, ref handsComp, false)) return false; @@ -255,4 +298,14 @@ public bool TryGetHand(EntityUid handsUid, string handId, [NotNullWhen(true)] ou return hands.Hands.TryGetValue(handId, out hand); } + + public int CountFreeableHands(Entity hands) + { + var freeable = 0; + foreach (var hand in hands.Comp.Hands.Values) + if (hand.IsEmpty || CanDropHeld(hands, hand)) + freeable++; + + return freeable; + } } diff --git a/Content.Shared/HealthExaminable/HealthExaminableComponent.cs b/Content.Shared/HealthExaminable/HealthExaminableComponent.cs new file mode 100644 index 00000000000..88a79782a55 --- /dev/null +++ b/Content.Shared/HealthExaminable/HealthExaminableComponent.cs @@ -0,0 +1,27 @@ +using Content.Shared.Damage.Prototypes; +using Content.Shared.FixedPoint; +using Robust.Shared.Prototypes; + +namespace Content.Shared.HealthExaminable; + +[RegisterComponent, Access(typeof(HealthExaminableSystem))] +public sealed partial class HealthExaminableComponent : Component +{ + // + // The thresholds for determining the examine text for certain amounts of damage. + // These are calculated as a percentage of the entity's critical threshold. + // + public List Thresholds = new() + { FixedPoint2.New(0.10), FixedPoint2.New(0.25), FixedPoint2.New(0.50), FixedPoint2.New(0.75) }; + + [DataField(required: true)] + public HashSet> ExaminableTypes = default!; + + /// + /// Health examine text is automatically generated through creating loc string IDs, in the form: + /// `health-examine-[prefix]-[type]-[threshold]` + /// This part determines the prefix. + /// + [DataField] + public string LocPrefix = "carbon"; +} diff --git a/Content.Server/HealthExaminable/HealthExaminableSystem.cs b/Content.Shared/HealthExaminable/HealthExaminableSystem.cs similarity index 90% rename from Content.Server/HealthExaminable/HealthExaminableSystem.cs rename to Content.Shared/HealthExaminable/HealthExaminableSystem.cs index 89291726fbe..091176a3cb1 100644 --- a/Content.Server/HealthExaminable/HealthExaminableSystem.cs +++ b/Content.Shared/HealthExaminable/HealthExaminableSystem.cs @@ -1,4 +1,3 @@ -using Content.Server.Traits.Assorted; using Content.Shared.Damage; using Content.Shared.Examine; using Content.Shared.FixedPoint; @@ -8,8 +7,9 @@ using Content.Shared.Verbs; using Robust.Shared.Utility; using System.Linq; +using Content.Shared.Traits.Assorted.Components; -namespace Content.Server.HealthExaminable; +namespace Content.Shared.HealthExaminable; public sealed class HealthExaminableSystem : EntitySystem { @@ -30,29 +30,32 @@ private void OnGetExamineVerbs(EntityUid uid, HealthExaminableComponent componen var detailsRange = _examineSystem.IsInDetailsRange(args.User, uid); - var verb = new ExamineVerb() + var verb = new ExamineVerb { Act = () => { - FormattedMessage markup; - if (uid == args.User - && TryComp(uid, out var selfAware)) - markup = CreateMarkupSelfAware(uid, selfAware, component, damage); - else - markup = CreateMarkup(uid, component, damage); - + var markup = GetMarkup(args.User, (uid, component), damage); _examineSystem.SendExamineTooltip(args.User, uid, markup, false, false); }, Text = Loc.GetString("health-examinable-verb-text"), Category = VerbCategory.Examine, Disabled = !detailsRange, Message = detailsRange ? null : Loc.GetString("health-examinable-verb-disabled"), - Icon = new SpriteSpecifier.Texture(new ("/Textures/Interface/VerbIcons/rejuvenate.svg.192dpi.png")) + Icon = new SpriteSpecifier.Texture(new ResPath("/Textures/Interface/VerbIcons/rejuvenate.svg.192dpi.png")) }; args.Verbs.Add(verb); } + public FormattedMessage GetMarkup(EntityUid examiner, + Entity examinable, + DamageableComponent damageable) + { + return examiner == examinable.Owner && TryComp(examinable, out var selfAware) + ? CreateMarkupSelfAware(examinable, selfAware, examinable.Comp, damageable) + : CreateMarkup(examinable, examinable.Comp, damageable); + } + private FormattedMessage CreateMarkup(EntityUid uid, HealthExaminableComponent component, DamageableComponent damage) { var msg = new FormattedMessage(); @@ -92,20 +95,14 @@ private FormattedMessage CreateMarkup(EntityUid uid, HealthExaminableComponent c continue; if (!first) - { msg.PushNewline(); - } else - { first = false; - } msg.AddMarkup(chosenLocStr); } if (msg.IsEmpty) - { msg.AddMarkup(Loc.GetString($"health-examinable-{component.LocPrefix}-none")); - } // Anything else want to add on to this? RaiseLocalEvent(uid, new HealthBeingExaminedEvent(msg, false), true); diff --git a/Content.Shared/Humanoid/EyeColor.cs b/Content.Shared/Humanoid/EyeColor.cs new file mode 100644 index 00000000000..a39e090a86c --- /dev/null +++ b/Content.Shared/Humanoid/EyeColor.cs @@ -0,0 +1,4 @@ +namespace Content.Shared.Humanoid; + +[ByRefEvent] +public record struct EyeColorInitEvent(); \ No newline at end of file diff --git a/Content.Shared/Humanoid/HumanoidAppearanceComponent.cs b/Content.Shared/Humanoid/HumanoidAppearanceComponent.cs index c9292337d7d..c0f9b8ac00f 100644 --- a/Content.Shared/Humanoid/HumanoidAppearanceComponent.cs +++ b/Content.Shared/Humanoid/HumanoidAppearanceComponent.cs @@ -32,6 +32,9 @@ public sealed partial class HumanoidAppearanceComponent : Component [DataField, AutoNetworkedField] public int Age = 18; + [DataField, AutoNetworkedField] + public string CustomSpecieName = ""; + /// /// Any custom base layers this humanoid might have. See: /// limb transplants (potentially), robotic arms, etc. @@ -85,6 +88,12 @@ public sealed partial class HumanoidAppearanceComponent : Component [ViewVariables(VVAccess.ReadOnly)] public Color? CachedFacialHairColor; + /// + /// Which layers of this humanoid that should be hidden on equipping a corresponding item.. + /// + [DataField] + public HashSet HideLayersOnEquip = [HumanoidVisualLayers.Hair]; + /// /// DeltaV - let paradox anomaly be cloned /// diff --git a/Content.Shared/Humanoid/HumanoidCharacterAppearance.cs b/Content.Shared/Humanoid/HumanoidCharacterAppearance.cs index f1f7de5c11a..fc44ed5e3b9 100644 --- a/Content.Shared/Humanoid/HumanoidCharacterAppearance.cs +++ b/Content.Shared/Humanoid/HumanoidCharacterAppearance.cs @@ -5,262 +5,286 @@ using Robust.Shared.Random; using Robust.Shared.Serialization; -namespace Content.Shared.Humanoid +namespace Content.Shared.Humanoid; + +[DataDefinition] +[Serializable, NetSerializable] +public sealed partial class HumanoidCharacterAppearance : ICharacterAppearance, IEquatable { - [DataDefinition] - [Serializable, NetSerializable] - public sealed partial class HumanoidCharacterAppearance : ICharacterAppearance - { - public HumanoidCharacterAppearance(string hairStyleId, - Color hairColor, - string facialHairStyleId, - Color facialHairColor, - Color eyeColor, - Color skinColor, - List markings) - { - HairStyleId = hairStyleId; - HairColor = ClampColor(hairColor); - FacialHairStyleId = facialHairStyleId; - FacialHairColor = ClampColor(facialHairColor); - EyeColor = ClampColor(eyeColor); - SkinColor = ClampColor(skinColor); - Markings = markings; - } + [DataField("hair")] + public string HairStyleId { get; set; } = HairStyles.DefaultHairStyle; - [DataField("hair")] - public string HairStyleId { get; private set; } + [DataField] + public Color HairColor { get; set; } = Color.Black; - [DataField("hairColor")] - public Color HairColor { get; private set; } + [DataField("facialHair")] + public string FacialHairStyleId { get; set; } = HairStyles.DefaultFacialHairStyle; - [DataField("facialHair")] - public string FacialHairStyleId { get; private set; } + [DataField] + public Color FacialHairColor { get; set; } = Color.Black; - [DataField("facialHairColor")] - public Color FacialHairColor { get; private set; } + [DataField] + public Color EyeColor { get; private set; } - [DataField("eyeColor")] - public Color EyeColor { get; private set; } + [DataField] + public Color SkinColor { get; private set; } - [DataField("skinColor")] - public Color SkinColor { get; private set; } + [DataField] + public List Markings { get; private set; } = new(); - [DataField("markings")] - public List Markings { get; private set; } + public HumanoidCharacterAppearance(string hairStyleId, + Color hairColor, + string facialHairStyleId, + Color facialHairColor, + Color eyeColor, + Color skinColor, + List markings) + { + HairStyleId = hairStyleId; + HairColor = ClampColor(hairColor); + FacialHairStyleId = facialHairStyleId; + FacialHairColor = ClampColor(facialHairColor); + EyeColor = ClampColor(eyeColor); + SkinColor = ClampColor(skinColor); + Markings = markings; + } - public HumanoidCharacterAppearance WithHairStyleName(string newName) - { - return new(newName, HairColor, FacialHairStyleId, FacialHairColor, EyeColor, SkinColor, Markings); - } + public HumanoidCharacterAppearance(HumanoidCharacterAppearance other) + : this( + other.HairStyleId, + other.HairColor, + other.FacialHairStyleId, + other.FacialHairColor, + other.EyeColor, + other.SkinColor, + new(other.Markings)) + { - public HumanoidCharacterAppearance WithHairColor(Color newColor) - { - return new(HairStyleId, newColor, FacialHairStyleId, FacialHairColor, EyeColor, SkinColor, Markings); - } + } - public HumanoidCharacterAppearance WithFacialHairStyleName(string newName) - { - return new(HairStyleId, HairColor, newName, FacialHairColor, EyeColor, SkinColor, Markings); - } + public HumanoidCharacterAppearance WithHairStyleName(string newName) + { + return new(newName, HairColor, FacialHairStyleId, FacialHairColor, EyeColor, SkinColor, Markings); + } - public HumanoidCharacterAppearance WithFacialHairColor(Color newColor) - { - return new(HairStyleId, HairColor, FacialHairStyleId, newColor, EyeColor, SkinColor, Markings); - } + public HumanoidCharacterAppearance WithHairColor(Color newColor) + { + return new(HairStyleId, newColor, FacialHairStyleId, FacialHairColor, EyeColor, SkinColor, Markings); + } - public HumanoidCharacterAppearance WithEyeColor(Color newColor) - { - return new(HairStyleId, HairColor, FacialHairStyleId, FacialHairColor, newColor, SkinColor, Markings); - } + public HumanoidCharacterAppearance WithFacialHairStyleName(string newName) + { + return new(HairStyleId, HairColor, newName, FacialHairColor, EyeColor, SkinColor, Markings); + } - public HumanoidCharacterAppearance WithSkinColor(Color newColor) - { - return new(HairStyleId, HairColor, FacialHairStyleId, FacialHairColor, EyeColor, newColor, Markings); - } + public HumanoidCharacterAppearance WithFacialHairColor(Color newColor) + { + return new(HairStyleId, HairColor, FacialHairStyleId, newColor, EyeColor, SkinColor, Markings); + } - public HumanoidCharacterAppearance WithMarkings(List newMarkings) + public HumanoidCharacterAppearance WithEyeColor(Color newColor) + { + return new(HairStyleId, HairColor, FacialHairStyleId, FacialHairColor, newColor, SkinColor, Markings); + } + + public HumanoidCharacterAppearance WithSkinColor(Color newColor) + { + return new(HairStyleId, HairColor, FacialHairStyleId, FacialHairColor, EyeColor, newColor, Markings); + } + + public HumanoidCharacterAppearance WithMarkings(List newMarkings) + { + return new(HairStyleId, HairColor, FacialHairStyleId, FacialHairColor, EyeColor, SkinColor, newMarkings); + } + + public static HumanoidCharacterAppearance DefaultWithSpecies(string species) + { + var speciesPrototype = IoCManager.Resolve().Index(species); + var skinColor = speciesPrototype.SkinColoration switch { - return new(HairStyleId, HairColor, FacialHairStyleId, FacialHairColor, EyeColor, SkinColor, newMarkings); - } + HumanoidSkinColor.HumanToned => Humanoid.SkinColor.HumanSkinTone(speciesPrototype.DefaultHumanSkinTone), + HumanoidSkinColor.Hues => speciesPrototype.DefaultSkinTone, + HumanoidSkinColor.TintedHues => Humanoid.SkinColor.TintedHues(speciesPrototype.DefaultSkinTone), + HumanoidSkinColor.VoxFeathers => Humanoid.SkinColor.ClosestVoxColor(speciesPrototype.DefaultSkinTone), + HumanoidSkinColor.TintedHuesSkin => Humanoid.SkinColor.TintedHuesSkin(speciesPrototype.DefaultSkinTone, speciesPrototype.DefaultSkinTone), + _ => Humanoid.SkinColor.ValidHumanSkinTone, + }; - public HumanoidCharacterAppearance() : this( + return new( HairStyles.DefaultHairStyle, Color.Black, HairStyles.DefaultFacialHairStyle, Color.Black, Color.Black, - Humanoid.SkinColor.ValidHumanSkinTone, + skinColor, new () - ) - { - } - - public static HumanoidCharacterAppearance DefaultWithSpecies(string species) - { - var speciesPrototype = IoCManager.Resolve().Index(species); - var skinColor = speciesPrototype.SkinColoration switch - { - HumanoidSkinColor.HumanToned => Humanoid.SkinColor.HumanSkinTone(speciesPrototype.DefaultHumanSkinTone), - HumanoidSkinColor.Hues => speciesPrototype.DefaultSkinTone, - HumanoidSkinColor.TintedHues => Humanoid.SkinColor.TintedHues(speciesPrototype.DefaultSkinTone), - // DeltaV - Blended tint for moths - HumanoidSkinColor.TintedHuesSkin => Humanoid.SkinColor.TintedHuesSkin(speciesPrototype.DefaultSkinTone, speciesPrototype.DefaultSkinTone), - _ => Humanoid.SkinColor.ValidHumanSkinTone - }; - - return new( - HairStyles.DefaultHairStyle, - Color.Black, - HairStyles.DefaultFacialHairStyle, - Color.Black, - Color.Black, - skinColor, - new () - ); - } - - private static IReadOnlyList RealisticEyeColors = new List - { - Color.Brown, - Color.Gray, - Color.Azure, - Color.SteelBlue, - Color.Black - }; + ); + } - public static HumanoidCharacterAppearance Random(string species, Sex sex) - { - var random = IoCManager.Resolve(); - var markingManager = IoCManager.Resolve(); - var hairStyles = markingManager.MarkingsByCategoryAndSpecies(MarkingCategories.Hair, species).Keys.ToList(); - var facialHairStyles = markingManager.MarkingsByCategoryAndSpecies(MarkingCategories.FacialHair, species).Keys.ToList(); + private static IReadOnlyList RealisticEyeColors = new List + { + Color.Brown, + Color.Gray, + Color.Azure, + Color.SteelBlue, + Color.Black + }; + + public static HumanoidCharacterAppearance Random(string species, Sex sex) + { + var random = IoCManager.Resolve(); + var markingManager = IoCManager.Resolve(); + var hairStyles = markingManager.MarkingsByCategoryAndSpecies(MarkingCategories.Hair, species).Keys.ToList(); + var facialHairStyles = markingManager.MarkingsByCategoryAndSpecies(MarkingCategories.FacialHair, species).Keys.ToList(); - var newHairStyle = hairStyles.Count > 0 - ? random.Pick(hairStyles) - : HairStyles.DefaultHairStyle; + var newHairStyle = hairStyles.Count > 0 + ? random.Pick(hairStyles) + : HairStyles.DefaultHairStyle; - var newFacialHairStyle = facialHairStyles.Count == 0 || sex == Sex.Female - ? HairStyles.DefaultFacialHairStyle - : random.Pick(facialHairStyles); + var newFacialHairStyle = facialHairStyles.Count == 0 || sex == Sex.Female + ? HairStyles.DefaultFacialHairStyle + : random.Pick(facialHairStyles); - var newHairColor = random.Pick(HairStyles.RealisticHairColors); - newHairColor = newHairColor - .WithRed(RandomizeColor(newHairColor.R)) - .WithGreen(RandomizeColor(newHairColor.G)) - .WithBlue(RandomizeColor(newHairColor.B)); + var newHairColor = random.Pick(HairStyles.RealisticHairColors); + newHairColor = newHairColor + .WithRed(RandomizeColor(newHairColor.R)) + .WithGreen(RandomizeColor(newHairColor.G)) + .WithBlue(RandomizeColor(newHairColor.B)); - // TODO: Add random markings + // TODO: Add random markings - var newEyeColor = random.Pick(RealisticEyeColors); + var newEyeColor = random.Pick(RealisticEyeColors); - var skinType = IoCManager.Resolve().Index(species).SkinColoration; + var skinType = IoCManager.Resolve().Index(species).SkinColoration; var skinTone = IoCManager.Resolve().Index(species).DefaultSkinTone; // DeltaV, required for tone blending - var newSkinColor = Humanoid.SkinColor.ValidHumanSkinTone; - switch (skinType) - { - case HumanoidSkinColor.HumanToned: - var tone = random.Next(0, 100); - newSkinColor = Humanoid.SkinColor.HumanSkinTone(tone); - break; - case HumanoidSkinColor.Hues: - case HumanoidSkinColor.TintedHues: - var rbyte = random.NextByte(); - var gbyte = random.NextByte(); - var bbyte = random.NextByte(); - newSkinColor = new Color(rbyte, gbyte, bbyte); - break; - case HumanoidSkinColor.TintedHuesSkin: // DeltaV, tone blending - rbyte = random.NextByte(); - gbyte = random.NextByte(); - bbyte = random.NextByte(); - newSkinColor = new Color(rbyte, gbyte, bbyte); - break; - } - - if (skinType == HumanoidSkinColor.TintedHues) - { + var newSkinColor = new Color(random.NextFloat(1), random.NextFloat(1), random.NextFloat(1), 1); + switch (skinType) + { + case HumanoidSkinColor.HumanToned: + var tone = Math.Round(Humanoid.SkinColor.HumanSkinToneFromColor(newSkinColor)); + newSkinColor = Humanoid.SkinColor.HumanSkinTone((int)tone); + break; + case HumanoidSkinColor.Hues: + break; + case HumanoidSkinColor.TintedHues: newSkinColor = Humanoid.SkinColor.ValidTintedHuesSkinTone(newSkinColor); - } - - if (skinType == HumanoidSkinColor.TintedHuesSkin) // DeltaV, tone blending - { + break; + case HumanoidSkinColor.TintedHuesSkin: newSkinColor = Humanoid.SkinColor.ValidTintedHuesSkinTone(skinTone, newSkinColor); - } + break; + case HumanoidSkinColor.VoxFeathers: + newSkinColor = Humanoid.SkinColor.ProportionalVoxColor(newSkinColor); + break; + } - return new HumanoidCharacterAppearance(newHairStyle, newHairColor, newFacialHairStyle, newHairColor, newEyeColor, newSkinColor, new ()); + return new HumanoidCharacterAppearance(newHairStyle, newHairColor, newFacialHairStyle, newHairColor, newEyeColor, newSkinColor, new ()); - float RandomizeColor(float channel) - { - return MathHelper.Clamp01(channel + random.Next(-25, 25) / 100f); - } + float RandomizeColor(float channel) + { + return MathHelper.Clamp01(channel + random.Next(-25, 25) / 100f); } + } + + public static Color ClampColor(Color color) + { + return new(color.RByte, color.GByte, color.BByte); + } + + public static HumanoidCharacterAppearance EnsureValid(HumanoidCharacterAppearance appearance, string species, Sex sex) + { + var hairStyleId = appearance.HairStyleId; + var facialHairStyleId = appearance.FacialHairStyleId; + + var hairColor = ClampColor(appearance.HairColor); + var facialHairColor = ClampColor(appearance.FacialHairColor); + var eyeColor = ClampColor(appearance.EyeColor); - public static Color ClampColor(Color color) + var proto = IoCManager.Resolve(); + var markingManager = IoCManager.Resolve(); + + if (!markingManager.MarkingsByCategory(MarkingCategories.Hair).ContainsKey(hairStyleId)) { - return new(color.RByte, color.GByte, color.BByte); + hairStyleId = HairStyles.DefaultHairStyle; } - public static HumanoidCharacterAppearance EnsureValid(HumanoidCharacterAppearance appearance, string species, Sex sex) + if (!markingManager.MarkingsByCategory(MarkingCategories.FacialHair).ContainsKey(facialHairStyleId)) { - var hairStyleId = appearance.HairStyleId; - var facialHairStyleId = appearance.FacialHairStyleId; - - var hairColor = ClampColor(appearance.HairColor); - var facialHairColor = ClampColor(appearance.FacialHairColor); - var eyeColor = ClampColor(appearance.EyeColor); + facialHairStyleId = HairStyles.DefaultFacialHairStyle; + } - var proto = IoCManager.Resolve(); - var markingManager = IoCManager.Resolve(); + var markingSet = new MarkingSet(); + var skinColor = appearance.SkinColor; + if (proto.TryIndex(species, out SpeciesPrototype? speciesProto)) + { + markingSet = new MarkingSet(appearance.Markings, speciesProto.MarkingPoints, markingManager, proto); + markingSet.EnsureValid(markingManager); - if (!markingManager.MarkingsByCategory(MarkingCategories.Hair).ContainsKey(hairStyleId)) + if (!Humanoid.SkinColor.VerifySkinColor(speciesProto.SkinColoration, skinColor)) { - hairStyleId = HairStyles.DefaultHairStyle; + skinColor = Humanoid.SkinColor.ValidSkinTone(speciesProto.SkinColoration, skinColor); } - if (!markingManager.MarkingsByCategory(MarkingCategories.FacialHair).ContainsKey(facialHairStyleId)) - { - facialHairStyleId = HairStyles.DefaultFacialHairStyle; - } + markingSet.EnsureSpecies(species, skinColor, markingManager); + markingSet.EnsureSexes(sex, markingManager); + } - var markingSet = new MarkingSet(); - var skinColor = appearance.SkinColor; - if (proto.TryIndex(species, out SpeciesPrototype? speciesProto)) - { - markingSet = new MarkingSet(appearance.Markings, speciesProto.MarkingPoints, markingManager, proto); - markingSet.EnsureValid(markingManager); + return new HumanoidCharacterAppearance( + hairStyleId, + hairColor, + facialHairStyleId, + facialHairColor, + eyeColor, + skinColor, + markingSet.GetForwardEnumerator().ToList()); + } - if (!Humanoid.SkinColor.VerifySkinColor(speciesProto.SkinColoration, skinColor)) - { - skinColor = Humanoid.SkinColor.ValidSkinTone(speciesProto.SkinColoration, skinColor); - } + public bool MemberwiseEquals(ICharacterAppearance maybeOther) + { + return + maybeOther is HumanoidCharacterAppearance other + && HairStyleId == other.HairStyleId + && HairColor.Equals(other.HairColor) + && FacialHairStyleId == other.FacialHairStyleId + && FacialHairColor.Equals(other.FacialHairColor) + && EyeColor.Equals(other.EyeColor) + && SkinColor.Equals(other.SkinColor) + && Markings.SequenceEqual(other.Markings); + } - markingSet.EnsureSpecies(species, skinColor, markingManager); - markingSet.EnsureSexes(sex, markingManager); - } + public bool Equals(HumanoidCharacterAppearance? other) + { + if (ReferenceEquals(null, other)) + return false; + if (ReferenceEquals(this, other)) + return true; + return HairStyleId == other.HairStyleId + && HairColor.Equals(other.HairColor) + && FacialHairStyleId == other.FacialHairStyleId + && FacialHairColor.Equals(other.FacialHairColor) + && EyeColor.Equals(other.EyeColor) + && SkinColor.Equals(other.SkinColor) + && Markings.SequenceEqual(other.Markings); + } - return new HumanoidCharacterAppearance( - hairStyleId, - hairColor, - facialHairStyleId, - facialHairColor, - eyeColor, - skinColor, - markingSet.GetForwardEnumerator().ToList()); - } + public override bool Equals(object? obj) + { + return ReferenceEquals(this, obj) + || obj is HumanoidCharacterAppearance other + && Equals(other); + } - public bool MemberwiseEquals(ICharacterAppearance maybeOther) - { - if (maybeOther is not HumanoidCharacterAppearance other) return false; - if (HairStyleId != other.HairStyleId) return false; - if (!HairColor.Equals(other.HairColor)) return false; - if (FacialHairStyleId != other.FacialHairStyleId) return false; - if (!FacialHairColor.Equals(other.FacialHairColor)) return false; - if (!EyeColor.Equals(other.EyeColor)) return false; - if (!SkinColor.Equals(other.SkinColor)) return false; - if (!Markings.SequenceEqual(other.Markings)) return false; - return true; - } + public override int GetHashCode() + { + return HashCode.Combine( + HairStyleId, + HairColor, + FacialHairStyleId, + FacialHairColor, + EyeColor, + SkinColor, + Markings); } + + public HumanoidCharacterAppearance Clone() => new(this); } diff --git a/Content.Shared/Humanoid/HumanoidProfileExport.cs b/Content.Shared/Humanoid/HumanoidProfileExport.cs new file mode 100644 index 00000000000..4f020cce19a --- /dev/null +++ b/Content.Shared/Humanoid/HumanoidProfileExport.cs @@ -0,0 +1,17 @@ +using Content.Shared.Preferences; + +namespace Content.Shared.Humanoid; + +/// Holds all of the data for importing / exporting character profiles. +[DataDefinition] +public sealed partial class HumanoidProfileExport +{ + [DataField] + public string ForkId; + + [DataField] + public int Version = 1; + + [DataField(required: true)] + public HumanoidCharacterProfile Profile = default!; +} diff --git a/Content.Shared/Humanoid/Prototypes/SpeciesPrototype.cs b/Content.Shared/Humanoid/Prototypes/SpeciesPrototype.cs index 8500d530e56..36b1e2387b7 100644 --- a/Content.Shared/Humanoid/Prototypes/SpeciesPrototype.cs +++ b/Content.Shared/Humanoid/Prototypes/SpeciesPrototype.cs @@ -75,6 +75,12 @@ public sealed partial class SpeciesPrototype : IPrototype [DataField(required: true)] public EntProtoId DollPrototype { get; private set; } + /// + /// Allow Custom Specie Name for this Specie. + /// + [DataField] + public Boolean CustomName { get; private set; } = false; + /// /// Method of skin coloration used by the species. /// @@ -121,6 +127,12 @@ public sealed partial class SpeciesPrototype : IPrototype [DataField] public int MaxAge = 120; + /// + /// The minimum height and width ratio for this species + /// + [DataField] + public float SizeRatio = 1.2f; + /// /// The minimum height for this species /// diff --git a/Content.Shared/Humanoid/SharedHumanoidAppearanceSystem.cs b/Content.Shared/Humanoid/SharedHumanoidAppearanceSystem.cs index ce49f80af3b..eeebd149c19 100644 --- a/Content.Shared/Humanoid/SharedHumanoidAppearanceSystem.cs +++ b/Content.Shared/Humanoid/SharedHumanoidAppearanceSystem.cs @@ -1,3 +1,4 @@ +using System.IO; using System.Linq; using System.Numerics; using Content.Shared.Decals; @@ -7,9 +8,18 @@ using Content.Shared.IdentityManagement; using Content.Shared.Preferences; using Content.Shared.HeightAdjust; +using Microsoft.Extensions.Configuration; +using Robust.Shared; +using Robust.Shared.Configuration; using Robust.Shared.GameObjects.Components.Localization; using Robust.Shared.Network; +using Robust.Shared.Player; using Robust.Shared.Prototypes; +using Content.Shared.Shadowkin; +using Robust.Shared.Serialization.Manager; +using Robust.Shared.Serialization.Markdown; +using Robust.Shared.Utility; +using YamlDotNet.RepresentationModel; namespace Content.Shared.Humanoid; @@ -24,9 +34,11 @@ namespace Content.Shared.Humanoid; /// public abstract class SharedHumanoidAppearanceSystem : EntitySystem { + [Dependency] private readonly IConfigurationManager _cfgManager = default!; [Dependency] private readonly INetManager _netManager = default!; [Dependency] private readonly IPrototypeManager _proto = default!; [Dependency] private readonly MarkingManager _markingManager = default!; + [Dependency] private readonly ISerializationManager _serManager = default!; [Dependency] private readonly HeightAdjustSystem _heightAdjust = default!; [ValidatePrototypeId] @@ -40,12 +52,39 @@ public override void Initialize() SubscribeLocalEvent(OnExamined); } + public DataNode ToDataNode(HumanoidCharacterProfile profile) + { + var export = new HumanoidProfileExport + { + ForkId = _cfgManager.GetCVar(CVars.BuildForkId), + Profile = profile, + }; + + var dataNode = _serManager.WriteValue(export, alwaysWrite: true, notNullableOverride: true); + return dataNode; + } + + public HumanoidCharacterProfile FromStream(Stream stream, ICommonSession session) + { + using var reader = new StreamReader(stream, EncodingHelpers.UTF8); + var yamlStream = new YamlStream(); + yamlStream.Load(reader); + + var root = yamlStream.Documents[0].RootNode; + var export = _serManager.Read(root.ToDataNode(), notNullableOverride: true); + + // Add custom handling here for forks / version numbers if you care + + var profile = export.Profile; + var collection = IoCManager.Instance; + profile.EnsureValid(session, collection!); + return profile; + } + private void OnInit(EntityUid uid, HumanoidAppearanceComponent humanoid, ComponentInit args) { if (string.IsNullOrEmpty(humanoid.Species) || _netManager.IsClient && !IsClientSide(uid)) - { return; - } if (string.IsNullOrEmpty(humanoid.Initial) || !_proto.TryIndex(humanoid.Initial, out HumanoidProfilePrototype? startingSet)) @@ -56,9 +95,7 @@ private void OnInit(EntityUid uid, HumanoidAppearanceComponent humanoid, Compone // Do this first, because profiles currently do not support custom base layers foreach (var (layer, info) in startingSet.CustomBaseLayers) - { humanoid.CustomBaseLayers.Add(layer, info); - } LoadProfile(uid, startingSet.Profile, humanoid); } @@ -66,8 +103,14 @@ private void OnInit(EntityUid uid, HumanoidAppearanceComponent humanoid, Compone private void OnExamined(EntityUid uid, HumanoidAppearanceComponent component, ExaminedEvent args) { var identity = Identity.Entity(uid, EntityManager); - var species = GetSpeciesRepresentation(component.Species).ToLower(); + var species = GetSpeciesRepresentation(component.Species, component.CustomSpecieName).ToLower(); var age = GetAgeRepresentation(component.Species, component.Age); + if (HasComp(uid)) + { + var color = component.EyeColor.Name(); + if (color != null) + age = Loc.GetString("identity-eye-shadowkin", ("color", color)); + } args.PushText(Loc.GetString("humanoid-appearance-component-examine", ("user", identity), ("age", age), ("species", species))); } @@ -110,9 +153,7 @@ public void SetLayersVisibility(EntityUid uid, IEnumerable var dirty = false; foreach (var layer in layers) - { SetLayerVisibility(uid, humanoid, layer, visible, permanent, ref dirty); - } if (dirty) Dirty(humanoid); @@ -153,9 +194,7 @@ protected virtual void SetLayerVisibility( public void SetSpecies(EntityUid uid, string species, bool sync = true, HumanoidAppearanceComponent? humanoid = null) { if (!Resolve(uid, ref humanoid) || !_proto.TryIndex(species, out var prototype)) - { return; - } humanoid.Species = species; humanoid.MarkingSet.EnsureSpecies(species, humanoid.SkinColor, _markingManager); @@ -181,14 +220,10 @@ public virtual void SetSkinColor(EntityUid uid, Color skinColor, bool sync = tru return; if (!_proto.TryIndex(humanoid.Species, out var species)) - { return; - } if (verify && !SkinColor.VerifySkinColor(species.SkinColoration, skinColor)) - { skinColor = SkinColor.ValidSkinTone(species.SkinColoration, skinColor); - } humanoid.SkinColor = skinColor; @@ -259,9 +294,7 @@ public void SetSex(EntityUid uid, Sex sex, bool sync = true, HumanoidAppearanceC RaiseLocalEvent(uid, new SexChangedEvent(oldSex, sex)); if (sync) - { Dirty(humanoid); - } } /// @@ -334,13 +367,13 @@ public virtual void LoadProfile(EntityUid uid, HumanoidCharacterProfile? profile return; if (!Resolve(uid, ref humanoid)) - { return; - } SetSpecies(uid, profile.Species, false, humanoid); SetSex(uid, profile.Sex, false, humanoid); humanoid.EyeColor = profile.Appearance.EyeColor; + var ev = new EyeColorInitEvent(); + RaiseLocalEvent(uid, ref ev); SetSkinColor(uid, profile.Appearance.SkinColor, false); @@ -353,13 +386,9 @@ public virtual void LoadProfile(EntityUid uid, HumanoidCharacterProfile? profile if (_markingManager.TryGetMarking(marking, out var prototype)) { if (!prototype.ForcedColoring) - { AddMarking(uid, marking.MarkingId, marking.MarkingColors, false); - } else - { markingFColored.Add(marking, prototype); - } } } @@ -372,15 +401,11 @@ public virtual void LoadProfile(EntityUid uid, HumanoidCharacterProfile? profile if (_markingManager.Markings.TryGetValue(profile.Appearance.HairStyleId, out var hairPrototype) && _markingManager.CanBeApplied(profile.Species, profile.Sex, hairPrototype, _proto)) - { AddMarking(uid, profile.Appearance.HairStyleId, hairColor, false); - } if (_markingManager.Markings.TryGetValue(profile.Appearance.FacialHairStyleId, out var facialHairPrototype) && _markingManager.CanBeApplied(profile.Species, profile.Sex, facialHairPrototype, _proto)) - { AddMarking(uid, profile.Appearance.FacialHairStyleId, facialHairColor, false); - } humanoid.MarkingSet.EnsureSpecies(profile.Species, profile.Appearance.SkinColor, _markingManager, _proto); @@ -400,13 +425,20 @@ public virtual void LoadProfile(EntityUid uid, HumanoidCharacterProfile? profile humanoid.Gender = profile.Gender; if (TryComp(uid, out var grammar)) - { grammar.Gender = profile.Gender; - } humanoid.Age = profile.Age; - _heightAdjust.SetScale(uid, new Vector2(profile.Width, profile.Height)); + humanoid.CustomSpecieName = profile.Customspeciename; + + var species = _proto.Index(humanoid.Species); + + if (profile.Height <= 0 || profile.Width <= 0) + SetScale(uid, new Vector2(species.DefaultWidth, species.DefaultHeight), true, humanoid); + else + SetScale(uid, new Vector2(profile.Width, profile.Height), true, humanoid); + + _heightAdjust.SetScale(uid, new Vector2(humanoid.Width, humanoid.Height)); humanoid.LastProfileLoaded = profile; // DeltaV - let paradox anomaly be cloned @@ -426,9 +458,7 @@ public void AddMarking(EntityUid uid, string marking, Color? color = null, bool { if (!Resolve(uid, ref humanoid) || !_markingManager.Markings.TryGetValue(marking, out var prototype)) - { return; - } var markingObject = prototype.AsMarking(); markingObject.Forced = forced; @@ -449,9 +479,7 @@ public void AddMarking(EntityUid uid, string marking, Color? color = null, bool private void EnsureDefaultMarkings(EntityUid uid, HumanoidAppearanceComponent? humanoid) { if (!Resolve(uid, ref humanoid)) - { return; - } humanoid.MarkingSet.EnsureDefault(humanoid.SkinColor, humanoid.EyeColor, _markingManager); } @@ -468,9 +496,7 @@ public void AddMarking(EntityUid uid, string marking, IReadOnlyList color { if (!Resolve(uid, ref humanoid) || !_markingManager.Markings.TryGetValue(marking, out var prototype)) - { return; - } var markingObject = new Marking(marking, colors); markingObject.Forced = forced; @@ -483,12 +509,13 @@ public void AddMarking(EntityUid uid, string marking, IReadOnlyList color /// /// Takes ID of the species prototype, returns UI-friendly name of the species. /// - public string GetSpeciesRepresentation(string speciesId) + public string GetSpeciesRepresentation(string speciesId, string? customespeciename) { + if (!string.IsNullOrEmpty(customespeciename)) + return Loc.GetString(customespeciename); + if (_proto.TryIndex(speciesId, out var species)) - { return Loc.GetString(species.Name); - } Log.Error("Tried to get representation of unknown species: {speciesId}"); return Loc.GetString("humanoid-appearance-component-unknown-species"); @@ -503,14 +530,10 @@ public string GetAgeRepresentation(string species, int age) } if (age < speciesPrototype.YoungAge) - { return Loc.GetString("identity-age-young"); - } if (age < speciesPrototype.OldAge) - { return Loc.GetString("identity-age-middle-aged"); - } return Loc.GetString("identity-age-old"); } diff --git a/Content.Shared/Humanoid/SkinColor.cs b/Content.Shared/Humanoid/SkinColor.cs index dcc5c2d7645..64ad82ac982 100644 --- a/Content.Shared/Humanoid/SkinColor.cs +++ b/Content.Shared/Humanoid/SkinColor.cs @@ -1,3 +1,6 @@ +using System.Security.Cryptography; +using Microsoft.VisualBasic.CompilerServices; + namespace Content.Shared.Humanoid; public static class SkinColor @@ -7,6 +10,13 @@ public static class SkinColor public const float MinHuesLightness = 0.175f; + public const float MinFeathersHue = 29f / 360; + public const float MaxFeathersHue = 174f / 360; + public const float MinFeathersSaturation = 20f / 100; + public const float MaxFeathersSaturation = 88f / 100; + public const float MinFeathersValue = 36f / 100; + public const float MaxFeathersValue = 55f / 100; + public static Color ValidHumanSkinTone => Color.FromHsv(new Vector4(0.07f, 0.2f, 1f, 1f)); /// @@ -159,6 +169,60 @@ public static bool VerifyTintedHues(Color color) return Color.ToHsl(color).Y <= MaxTintedHuesSaturation && Color.ToHsl(color).Z >= MinTintedHuesLightness; } + /// + /// Converts a Color proportionally to the allowed vox color range. + /// Will NOT preserve the specific input color even if it is within the allowed vox color range. + /// + /// Color to convert + /// Vox feather coloration + public static Color ProportionalVoxColor(Color color) + { + var newColor = Color.ToHsv(color); + + newColor.X = newColor.X * (MaxFeathersHue - MinFeathersHue) + MinFeathersHue; + newColor.Y = newColor.Y * (MaxFeathersSaturation - MinFeathersSaturation) + MinFeathersSaturation; + newColor.Z = newColor.Z * (MaxFeathersValue - MinFeathersValue) + MinFeathersValue; + + return Color.FromHsv(newColor); + } + + // /// + // /// Ensures the input Color is within the allowed vox color range. + // /// + // /// Color to convert + // /// The same Color if it was within the allowed range, or the closest matching Color otherwise + public static Color ClosestVoxColor(Color color) + { + var hsv = Color.ToHsv(color); + + hsv.X = Math.Clamp(hsv.X, MinFeathersHue, MaxFeathersHue); + hsv.Y = Math.Clamp(hsv.Y, MinFeathersSaturation, MaxFeathersSaturation); + hsv.Z = Math.Clamp(hsv.Z, MinFeathersValue, MaxFeathersValue); + + return Color.FromHsv(hsv); + } + + /// + /// Verify if this color is a valid vox feather coloration, or not. + /// + /// The color to verify + /// True if valid, false otherwise + public static bool VerifyVoxFeathers(Color color) + { + var colorHsv = Color.ToHsv(color); + + if (colorHsv.X < MinFeathersHue || colorHsv.X > MaxFeathersHue) + return false; + + if (colorHsv.Y < MinFeathersSaturation || colorHsv.Y > MaxFeathersSaturation) + return false; + + if (colorHsv.Z < MinFeathersValue || colorHsv.Z > MaxFeathersValue) + return false; + + return true; + } + /// /// This takes in a color, and returns a color guaranteed to be above MinHuesLightness /// @@ -189,6 +253,7 @@ public static bool VerifySkinColor(HumanoidSkinColor type, Color color) HumanoidSkinColor.TintedHues => VerifyTintedHues(color), HumanoidSkinColor.TintedHuesSkin => true, // DeltaV - Tone blending HumanoidSkinColor.Hues => VerifyHues(color), + HumanoidSkinColor.VoxFeathers => VerifyVoxFeathers(color), _ => false, }; } @@ -201,6 +266,7 @@ public static Color ValidSkinTone(HumanoidSkinColor type, Color color) HumanoidSkinColor.TintedHues => ValidTintedHuesSkinTone(color), HumanoidSkinColor.TintedHuesSkin => ValidTintedHuesSkinTone(color), // DeltaV - Tone blending HumanoidSkinColor.Hues => MakeHueValid(color), + HumanoidSkinColor.VoxFeathers => ClosestVoxColor(color), _ => color }; } @@ -210,6 +276,7 @@ public enum HumanoidSkinColor : byte { HumanToned, Hues, + VoxFeathers, // Vox feathers are limited to a specific color range TintedHues, //This gives a color tint to a humanoid's skin (10% saturation with full hue range). TintedHuesSkin, // DeltaV - Default TintedHues assumes the texture will have the proper skin color, but moths dont } diff --git a/Content.Shared/Implants/SharedSubdermalImplantSystem.cs b/Content.Shared/Implants/SharedSubdermalImplantSystem.cs index 830d2270aa4..a43d4fca723 100644 --- a/Content.Shared/Implants/SharedSubdermalImplantSystem.cs +++ b/Content.Shared/Implants/SharedSubdermalImplantSystem.cs @@ -1,5 +1,6 @@ using System.Linq; using Content.Shared.Actions; +using Content.Shared.Chat; using Content.Shared.Implants.Components; using Content.Shared.Interaction; using Content.Shared.Interaction.Events; @@ -29,6 +30,7 @@ public override void Initialize() SubscribeLocalEvent(RelayToImplantEvent); SubscribeLocalEvent(RelayToImplantEvent); SubscribeLocalEvent(RelayToImplantEvent); + SubscribeLocalEvent(RelayToImplantEvent); } private void OnInsert(EntityUid uid, SubdermalImplantComponent component, EntGotInsertedIntoContainerMessage args) diff --git a/Content.Shared/Input/ContentKeyFunctions.cs b/Content.Shared/Input/ContentKeyFunctions.cs index dac780783c7..3f88ca4e20a 100644 --- a/Content.Shared/Input/ContentKeyFunctions.cs +++ b/Content.Shared/Input/ContentKeyFunctions.cs @@ -25,6 +25,7 @@ public static class ContentKeyFunctions public static readonly BoundKeyFunction CycleChatChannelBackward = "CycleChatChannelBackward"; public static readonly BoundKeyFunction EscapeContext = "EscapeContext"; public static readonly BoundKeyFunction OpenCharacterMenu = "OpenCharacterMenu"; + public static readonly BoundKeyFunction OpenEmotesMenu = "OpenEmotesMenu"; public static readonly BoundKeyFunction OpenLanguageMenu = "OpenLanguageMenu"; public static readonly BoundKeyFunction OpenCraftingMenu = "OpenCraftingMenu"; public static readonly BoundKeyFunction OpenGuidebook = "OpenGuidebook"; @@ -43,6 +44,7 @@ public static class ContentKeyFunctions public static readonly BoundKeyFunction MovePulledObject = "MovePulledObject"; public static readonly BoundKeyFunction ReleasePulledObject = "ReleasePulledObject"; public static readonly BoundKeyFunction MouseMiddle = "MouseMiddle"; + public static readonly BoundKeyFunction ToggleRoundEndSummaryWindow = "ToggleRoundEndSummaryWindow"; public static readonly BoundKeyFunction OpenEntitySpawnWindow = "OpenEntitySpawnWindow"; public static readonly BoundKeyFunction OpenSandboxWindow = "OpenSandboxWindow"; public static readonly BoundKeyFunction OpenTileSpawnWindow = "OpenTileSpawnWindow"; @@ -57,6 +59,8 @@ public static class ContentKeyFunctions public static readonly BoundKeyFunction ResetZoom = "ResetZoom"; public static readonly BoundKeyFunction OfferItem = "OfferItem"; public static readonly BoundKeyFunction ToggleStanding = "ToggleStanding"; + public static readonly BoundKeyFunction ToggleCrawlingUnder = "ToggleCrawlingUnder"; + public static readonly BoundKeyFunction LookUp = "LookUp"; public static readonly BoundKeyFunction ArcadeUp = "ArcadeUp"; public static readonly BoundKeyFunction ArcadeDown = "ArcadeDown"; diff --git a/Content.Shared/Interaction/Components/ClumsyComponent.cs b/Content.Shared/Interaction/Components/ClumsyComponent.cs index 5b72fc224c8..824696c8385 100644 --- a/Content.Shared/Interaction/Components/ClumsyComponent.cs +++ b/Content.Shared/Interaction/Components/ClumsyComponent.cs @@ -1,22 +1,24 @@ using Content.Shared.Damage; using Robust.Shared.Audio; +using Robust.Shared.GameStates; -namespace Content.Shared.Interaction.Components +namespace Content.Shared.Interaction.Components; + +/// +/// A simple clumsy tag-component. +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class ClumsyComponent : Component { /// - /// A simple clumsy tag-component. + /// Damage dealt to a clumsy character when they try to fire a gun. /// - [RegisterComponent] - public sealed partial class ClumsyComponent : Component - { - [DataField("clumsyDamage", required: true)] - [ViewVariables(VVAccess.ReadWrite)] - public DamageSpecifier ClumsyDamage = default!; + [DataField(required: true), AutoNetworkedField] + public DamageSpecifier ClumsyDamage = default!; - /// - /// Sound to play when clumsy interactions fail - /// - [DataField("clumsySound")] - public SoundSpecifier ClumsySound = new SoundPathSpecifier("/Audio/Items/bikehorn.ogg"); - } + /// + /// Sound to play when clumsy interactions fail. + /// + [DataField] + public SoundSpecifier ClumsySound = new SoundPathSpecifier("/Audio/Items/bikehorn.ogg"); } diff --git a/Content.Shared/Interaction/SharedInteractionSystem.cs b/Content.Shared/Interaction/SharedInteractionSystem.cs index 8d49ce31f0a..4c22bcb14e4 100644 --- a/Content.Shared/Interaction/SharedInteractionSystem.cs +++ b/Content.Shared/Interaction/SharedInteractionSystem.cs @@ -1,11 +1,10 @@ using System.Diagnostics.CodeAnalysis; using System.Linq; using Content.Shared.ActionBlocker; -using Content.Shared.Administration; using Content.Shared.Administration.Logs; -using Content.Shared.Administration.Managers; using Content.Shared.CombatMode; using Content.Shared.Database; +using Content.Shared.Ghost; using Content.Shared.Hands; using Content.Shared.Hands.Components; using Content.Shared.Input; @@ -15,12 +14,13 @@ using Content.Shared.Inventory.Events; using Content.Shared.Item; using Content.Shared.Movement.Components; -using Content.Shared.Movement.Pulling.Components; using Content.Shared.Movement.Pulling.Systems; using Content.Shared.Physics; using Content.Shared.Popups; +using Content.Shared.Storage; using Content.Shared.Tag; using Content.Shared.Timing; +using Content.Shared.UserInterface; using Content.Shared.Verbs; using Content.Shared.Wall; using JetBrains.Annotations; @@ -36,6 +36,7 @@ using Robust.Shared.Random; using Robust.Shared.Serialization; using Robust.Shared.Timing; +using Robust.Shared.Utility; #pragma warning disable 618 @@ -50,12 +51,11 @@ public abstract partial class SharedInteractionSystem : EntitySystem [Dependency] private readonly IGameTiming _gameTiming = default!; [Dependency] private readonly INetManager _net = default!; [Dependency] private readonly IMapManager _mapManager = default!; - [Dependency] private readonly ISharedAdminManager _adminManager = default!; [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!; [Dependency] private readonly ActionBlockerSystem _actionBlockerSystem = default!; [Dependency] private readonly RotateToFaceSystem _rotateToFaceSystem = default!; [Dependency] private readonly SharedContainerSystem _containerSystem = default!; - [Dependency] private readonly SharedPhysicsSystem _sharedBroadphaseSystem = default!; + [Dependency] private readonly SharedPhysicsSystem _broadphase = default!; [Dependency] private readonly SharedTransformSystem _transform = default!; [Dependency] private readonly SharedVerbSystem _verbSystem = default!; [Dependency] private readonly SharedPopupSystem _popupSystem = default!; @@ -64,6 +64,18 @@ public abstract partial class SharedInteractionSystem : EntitySystem [Dependency] private readonly InventorySystem _inventory = default!; [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly TagSystem _tagSystem = default!; + [Dependency] private readonly SharedUserInterfaceSystem _ui = default!; + + private EntityQuery _ignoreUiRangeQuery; + private EntityQuery _fixtureQuery; + private EntityQuery _itemQuery; + private EntityQuery _physicsQuery; + private EntityQuery _handsQuery; + private EntityQuery _relayQuery; + private EntityQuery _combatQuery; + private EntityQuery _wallMountQuery; + private EntityQuery _delayQuery; + private EntityQuery _uiQuery; private const CollisionGroup InRangeUnobstructedMask = CollisionGroup.Impassable | CollisionGroup.InteractImpassable; @@ -76,8 +88,22 @@ public abstract partial class SharedInteractionSystem : EntitySystem public override void Initialize() { + _ignoreUiRangeQuery = GetEntityQuery(); + _fixtureQuery = GetEntityQuery(); + _itemQuery = GetEntityQuery(); + _physicsQuery = GetEntityQuery(); + _handsQuery = GetEntityQuery(); + _relayQuery = GetEntityQuery(); + _combatQuery = GetEntityQuery(); + _wallMountQuery = GetEntityQuery(); + _delayQuery = GetEntityQuery(); + _uiQuery = GetEntityQuery(); + + SubscribeLocalEvent(HandleUserInterfaceRangeCheck); SubscribeLocalEvent(OnBoundInterfaceInteractAttempt); + SubscribeAllEvent(HandleInteractInventorySlotEvent); + SubscribeLocalEvent(OnRemoveAttempt); SubscribeLocalEvent(OnUnequip); SubscribeLocalEvent(OnUnequipHand); @@ -108,27 +134,57 @@ public override void Shutdown() /// private void OnBoundInterfaceInteractAttempt(BoundUserInterfaceMessageAttempt ev) { - if (ev.Sender.AttachedEntity is not { } user || !_actionBlockerSystem.CanInteract(user, ev.Target)) + _uiQuery.TryComp(ev.Target, out var uiComp); + if (!_actionBlockerSystem.CanInteract(ev.Actor, ev.Target)) { - ev.Cancel(); - return; + // We permit ghosts to open uis unless explicitly blocked + if (ev.Message is not OpenBoundInterfaceMessage || !HasComp(ev.Actor) || uiComp?.BlockSpectators == true) + { + ev.Cancel(); + return; + } } - // Check if the bound entity is accessible. Note that we allow admins to ignore this restriction, so that - // they can fiddle with UI's that people can't normally interact with (e.g., placing things directly into - // other people's backpacks). - if (!_containerSystem.IsInSameOrParentContainer(user, ev.Target) - && !CanAccessViaStorage(user, ev.Target) - && !_adminManager.HasAdminFlag(user, AdminFlags.Admin)) + var range = _ui.GetUiRange(ev.Target, ev.UiKey); + + // As long as range>0, the UI frame updates should have auto-closed the UI if it is out of range. + DebugTools.Assert(range <= 0 || UiRangeCheck(ev.Actor, ev.Target, range)); + + if (range <= 0 && !IsAccessible(ev.Actor, ev.Target)) { ev.Cancel(); return; } - if (!InRangeUnobstructed(user, ev.Target)) + if (uiComp == null) + return; + + if (uiComp.SingleUser && uiComp.CurrentSingleUser != null && uiComp.CurrentSingleUser != ev.Actor) { ev.Cancel(); + return; } + + if (!uiComp.RequireHands) + return; + + if (!_handsQuery.TryComp(ev.Actor, out var hands) || hands.Hands.Count == 0) + ev.Cancel(); + } + + private bool UiRangeCheck(Entity user, Entity target, float range) + { + if (!Resolve(target, ref target.Comp)) + return false; + + if (user.Owner == target.Owner) + return true; + + // Fast check: if the user is the parent of the entity (e.g., holding it), we always assume that it is in range + if (target.Comp.ParentUid == user.Owner) + return true; + + return InRangeAndAccessible(user, target, range) || _ignoreUiRangeQuery.HasComp(user); } /// @@ -185,10 +241,7 @@ private bool HandleTryPullObject(ICommonSession? session, EntityCoordinates coor if (!InRangeUnobstructed(userEntity.Value, uid, popup: true)) return false; - if (!TryComp(uid, out PullableComponent? pull)) - return false; - - _pullSystem.TogglePull(uid, userEntity.Value, pull); + _pullSystem.TogglePull(uid, userEntity.Value); return false; } @@ -264,7 +317,7 @@ private bool ShouldCheckAccess(EntityUid user) public bool CombatModeCanHandInteract(EntityUid user, EntityUid? target) { // Always allow attack in these cases - if (target == null || !TryComp(user, out var hands) || hands.ActiveHand?.HeldEntity is not null) + if (target == null || !_handsQuery.TryComp(user, out var hands) || hands.ActiveHand?.HeldEntity is not null) return false; // Only eat input if: @@ -272,7 +325,7 @@ public bool CombatModeCanHandInteract(EntityUid user, EntityUid? target) // - Target doesn't cancel should-interact event // This is intended to allow items to be picked up in combat mode, // but to also allow items to force attacks anyway (like mobs which are items, e.g. mice) - if (!HasComp(target)) + if (!_itemQuery.HasComp(target)) return false; var combatEv = new CombatModeShouldHandInteractEvent(); @@ -302,7 +355,7 @@ public void UserInteraction( bool checkAccess = true, bool checkCanUse = true) { - if (TryComp(user, out var relay) && relay.RelayEntity is not null) + if (_relayQuery.TryComp(user, out var relay) && relay.RelayEntity is not null) { // TODO this needs to be handled better. This probably bypasses many complex can-interact checks in weird roundabout ways. if (_actionBlockerSystem.CanInteract(user, target)) @@ -316,7 +369,7 @@ public void UserInteraction( if (target != null && Deleted(target.Value)) return; - if (!altInteract && TryComp(user, out var combatMode) && combatMode.IsInCombatMode) + if (!altInteract && _combatQuery.TryComp(user, out var combatMode) && combatMode.IsInCombatMode) { if (!CombatModeCanHandInteract(user, target)) return; @@ -338,10 +391,7 @@ public void UserInteraction( // Check if interacted entity is in the same container, the direct child, or direct parent of the user. // Also checks if the item is accessible via some storage UI (e.g., open backpack) - if (checkAccess - && target != null - && !_containerSystem.IsInSameOrParentContainer(user, target.Value) - && !CanAccessViaStorage(user, target.Value)) + if (checkAccess && target != null && !IsAccessible(user, target.Value)) return; var inRangeUnobstructed = target == null @@ -349,7 +399,7 @@ public void UserInteraction( : !checkAccess || InRangeUnobstructed(user, target.Value); // permits interactions with wall mounted entities // Does the user have hands? - if (!TryComp(user, out var hands) || hands.ActiveHand == null) + if (!_handsQuery.TryComp(user, out var hands) || hands.ActiveHand == null) { var ev = new InteractNoHandEvent(user, target, coordinates); RaiseLocalEvent(user, ev); @@ -489,7 +539,7 @@ public float UnobstructedDistance( predicate ??= _ => false; var ray = new CollisionRay(origin.Position, dir.Normalized(), collisionMask); - var rayResults = _sharedBroadphaseSystem.IntersectRayWithPredicate(origin.MapId, ray, dir.Length(), predicate.Invoke, false).ToList(); + var rayResults = _broadphase.IntersectRayWithPredicate(origin.MapId, ray, dir.Length(), predicate.Invoke, false).ToList(); if (rayResults.Count == 0) return dir.Length(); @@ -552,23 +602,29 @@ public bool InRangeUnobstructed( } var ray = new CollisionRay(origin.Position, dir.Normalized(), (int) collisionMask); - var rayResults = _sharedBroadphaseSystem.IntersectRayWithPredicate(origin.MapId, ray, length, predicate.Invoke, false).ToList(); + var rayResults = _broadphase.IntersectRayWithPredicate(origin.MapId, ray, length, predicate.Invoke, false).ToList(); return rayResults.Count == 0; } public bool InRangeUnobstructed( - EntityUid origin, - EntityUid other, + Entity origin, + Entity other, float range = InteractionRange, CollisionGroup collisionMask = InRangeUnobstructedMask, Ignored? predicate = null, bool popup = false) { - if (!TryComp(other, out var otherXform)) + if (!Resolve(other, ref other.Comp)) return false; - return InRangeUnobstructed(origin, other, otherXform.Coordinates, otherXform.LocalRotation, range, collisionMask, predicate, + return InRangeUnobstructed(origin, + other, + other.Comp.Coordinates, + other.Comp.LocalRotation, + range, + collisionMask, + predicate, popup); } @@ -600,8 +656,8 @@ public bool InRangeUnobstructed( /// True if the two points are within a given range without being obstructed. /// public bool InRangeUnobstructed( - EntityUid origin, - EntityUid other, + Entity origin, + Entity other, EntityCoordinates otherCoordinates, Angle otherAngle, float range = InteractionRange, @@ -609,10 +665,10 @@ public bool InRangeUnobstructed( Ignored? predicate = null, bool popup = false) { - Ignored combinedPredicate = e => e == origin || (predicate?.Invoke(e) ?? false); + Ignored combinedPredicate = e => e == origin.Owner || (predicate?.Invoke(e) ?? false); var inRange = true; MapCoordinates originPos = default; - var targetPos = otherCoordinates.ToMap(EntityManager, _transform); + var targetPos = _transform.ToMapCoordinates(otherCoordinates); Angle targetRot = default; // So essentially: @@ -622,23 +678,30 @@ public bool InRangeUnobstructed( // Alternatively we could check centre distances first though // that means we wouldn't be able to easily check overlap interactions. if (range > 0f && - TryComp(origin, out var fixtureA) && + _fixtureQuery.TryComp(origin, out var fixtureA) && // These fixture counts are stuff that has the component but no fixtures for (e.g. buttons). // At least until they get removed. fixtureA.FixtureCount > 0 && - TryComp(other, out var fixtureB) && + _fixtureQuery.TryComp(other, out var fixtureB) && fixtureB.FixtureCount > 0 && - TryComp(origin, out var xformA)) + Resolve(origin, ref origin.Comp)) { - var (worldPosA, worldRotA) = xformA.GetWorldPositionRotation(); + var (worldPosA, worldRotA) = origin.Comp.GetWorldPositionRotation(); var xfA = new Transform(worldPosA, worldRotA); var parentRotB = _transform.GetWorldRotation(otherCoordinates.EntityId); var xfB = new Transform(targetPos.Position, parentRotB + otherAngle); // Different map or the likes. - if (!_sharedBroadphaseSystem.TryGetNearest(origin, other, - out _, out _, out var distance, - xfA, xfB, fixtureA, fixtureB)) + if (!_broadphase.TryGetNearest( + origin, + other, + out _, + out _, + out var distance, + xfA, + xfB, + fixtureA, + fixtureB)) { inRange = false; } @@ -660,15 +723,15 @@ public bool InRangeUnobstructed( else { // We'll still do the raycast from the centres but we'll bump the range as we know they're in range. - originPos = xformA.MapPosition; + originPos = _transform.GetMapCoordinates(origin, xform: origin.Comp); range = (originPos.Position - targetPos.Position).Length(); } } // No fixtures, e.g. wallmounts. else { - originPos = Transform(origin).MapPosition; - var otherParent = Transform(other).ParentUid; + originPos = _transform.GetMapCoordinates(origin, origin); + var otherParent = (other.Comp ?? Transform(other)).ParentUid; targetRot = otherParent.IsValid() ? Transform(otherParent).LocalRotation + otherAngle : otherAngle; } @@ -719,13 +782,13 @@ private Ignored GetPredicate( { HashSet ignored = new(); - if (HasComp(target) && TryComp(target, out PhysicsComponent? physics) && physics.CanCollide) + if (_itemQuery.HasComp(target) && _physicsQuery.TryComp(target, out var physics) && physics.CanCollide) { // If the target is an item, we ignore any colliding entities. Currently done so that if items get stuck // inside of walls, users can still pick them up. - ignored.UnionWith(_sharedBroadphaseSystem.GetEntitiesIntersectingBody(target, (int) collisionMask, false, physics)); + ignored.UnionWith(_broadphase.GetEntitiesIntersectingBody(target, (int) collisionMask, false, physics)); } - else if (TryComp(target, out WallMountComponent? wallMount)) + else if (_wallMountQuery.TryComp(target, out var wallMount)) { // wall-mount exemptions may be restricted to a specific angle range.da @@ -743,13 +806,7 @@ private Ignored GetPredicate( ignored.UnionWith(grid.GetAnchoredEntities(targetCoords)); } - Ignored combinedPredicate = e => - { - return e == target - || (predicate?.Invoke(e) ?? false) - || ignored.Contains(e); - }; - + Ignored combinedPredicate = e => e == target || (predicate?.Invoke(e) ?? false) || ignored.Contains(e); return combinedPredicate; } @@ -946,10 +1003,8 @@ public bool InteractionActivate( bool checkUseDelay = true, bool checkAccess = true) { - UseDelayComponent? delayComponent = null; - if (checkUseDelay - && TryComp(used, out delayComponent) - && _useDelay.IsDelayed((used, delayComponent))) + _delayQuery.TryComp(used, out var delayComponent); + if (checkUseDelay && delayComponent != null && _useDelay.IsDelayed((used, delayComponent))) return false; if (checkCanInteract && !_actionBlockerSystem.CanInteract(user, used)) @@ -960,11 +1015,11 @@ public bool InteractionActivate( // Check if interacted entity is in the same container, the direct child, or direct parent of the user. // This is bypassed IF the interaction happened through an item slot (e.g., backpack UI) - if (checkAccess && !_containerSystem.IsInSameOrParentContainer(user, used) && !CanAccessViaStorage(user, used)) + if (checkAccess && !IsAccessible(user, used)) return false; // Does the user have hands? - if (!HasComp(user)) + if (!_handsQuery.HasComp(user)) return false; var activateMsg = new ActivateInWorldEvent(user, used); @@ -973,8 +1028,10 @@ public bool InteractionActivate( return false; 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, delayComponent)); + _useDelay.TryResetDelay(used, component: delayComponent); + if (!activateMsg.WasLogged) _adminLogger.Add(LogType.InteractActivate, LogImpact.Low, $"{ToPrettyString(user):user} activated {ToPrettyString(used):used}"); return true; @@ -995,11 +1052,8 @@ public bool UseInHandInteraction( bool checkCanInteract = true, bool checkUseDelay = true) { - UseDelayComponent? delayComponent = null; - - if (checkUseDelay - && TryComp(used, out delayComponent) - && _useDelay.IsDelayed((used, delayComponent))) + _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. if (checkCanInteract && !_actionBlockerSystem.CanInteract(user, used)) @@ -1061,11 +1115,60 @@ public void DroppedInteraction(EntityUid user, EntityUid item) } #endregion + /// + /// Check if a user can access a target (stored in the same containers) and is in range without obstructions. + /// + public bool InRangeAndAccessible( + Entity user, + Entity target, + float range = InteractionRange, + CollisionGroup collisionMask = InRangeUnobstructedMask, + Ignored? predicate = null) + { + if (user == target) + return true; + + if (!Resolve(user, ref user.Comp)) + return false; + + if (!Resolve(target, ref target.Comp)) + return false; + + return IsAccessible(user, target) && InRangeUnobstructed(user, target, range, collisionMask, predicate); + } + + /// + /// Check if a user can access a target or if they are stored in different containers. + /// + public bool IsAccessible(Entity user, Entity target) + { + if (_containerSystem.IsInSameOrParentContainer(user, target, out _, out var container)) + return true; + + return container != null && CanAccessViaStorage(user, target, container); + } + /// /// If a target is in range, but not in the same container as the user, it may be inside of a backpack. This /// checks if the user can access the item in these situations. /// - public abstract bool CanAccessViaStorage(EntityUid user, EntityUid target); + public bool CanAccessViaStorage(EntityUid user, EntityUid target) + { + if (!_containerSystem.TryGetContainingContainer(target, out var container)) + return false; + + return CanAccessViaStorage(user, target, container); + } + + /// + public bool CanAccessViaStorage(EntityUid user, EntityUid target, BaseContainer container) + { + if (StorageComponent.ContainerId != container.ID) + 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); + } /// /// Checks whether an entity currently equipped by another player is accessible to some user. This shouldn't @@ -1145,6 +1248,17 @@ public void DoContactInteraction(EntityUid uidA, EntityUid? uidB, HandledEntityE RaiseLocalEvent(uidA, new ContactInteractionEvent(uidB.Value)); RaiseLocalEvent(uidB.Value, new ContactInteractionEvent(uidA)); } + + + private void HandleUserInterfaceRangeCheck(ref BoundUserInterfaceCheckRangeEvent ev) + { + if (ev.Result == BoundUserInterfaceRangeResult.Fail) + return; + + ev.Result = UiRangeCheck(ev.Actor!, ev.Target, ev.Data.InteractionRange) + ? BoundUserInterfaceRangeResult.Pass + : BoundUserInterfaceRangeResult.Fail; + } } /// diff --git a/Content.Shared/InteractionVerbs/InteractionVerbPrototype.cs b/Content.Shared/InteractionVerbs/InteractionVerbPrototype.cs index 1c33444cdfa..671e8e47184 100644 --- a/Content.Shared/InteractionVerbs/InteractionVerbPrototype.cs +++ b/Content.Shared/InteractionVerbs/InteractionVerbPrototype.cs @@ -152,8 +152,12 @@ public sealed partial class InteractionVerbPrototype : IPrototype, IInheritingPr [DataField] public bool RequiresHands = false; - [DataField] - public bool RequiresCanInteract = true; + /// + /// Whether this verb requires the user to be able to access the target normally (with their hands or otherwise). + /// + /// The misleading yml name is kept for backwards compatibility with downstreams. + [DataField("requiresCanInteract")] + public bool RequiresCanAccess = true; /// /// If true, this verb can be invoked by the user on itself. diff --git a/Content.Shared/InteractionVerbs/Requirements/AssortedRequirements.cs b/Content.Shared/InteractionVerbs/Requirements/AssortedRequirements.cs index 69193a9212c..9a4dd323360 100644 --- a/Content.Shared/InteractionVerbs/Requirements/AssortedRequirements.cs +++ b/Content.Shared/InteractionVerbs/Requirements/AssortedRequirements.cs @@ -55,7 +55,8 @@ public override bool IsMet(InteractionArgs args, InteractionVerbPrototype proto, if (!deps.EntMan.TryGetComponent(args.Target, out var state)) return false; - return state.Standing ? AllowStanding : AllowLaying; + return state.CurrentState == StandingState.Standing && AllowStanding + || state.CurrentState == StandingState.Lying && AllowLaying; } } diff --git a/Content.Shared/InteractionVerbs/SharedInteractionVerbsSystem.cs b/Content.Shared/InteractionVerbs/SharedInteractionVerbsSystem.cs index ed74af8bc6f..f8100e71c39 100644 --- a/Content.Shared/InteractionVerbs/SharedInteractionVerbsSystem.cs +++ b/Content.Shared/InteractionVerbs/SharedInteractionVerbsSystem.cs @@ -156,7 +156,7 @@ public bool StartVerb(InteractionVerbPrototype proto, InteractionArgs args, bool Broadcast = true, BreakOnHandChange = proto.RequiresHands, NeedHand = proto.RequiresHands, - RequireCanInteract = proto.RequiresCanInteract, + RequireCanInteract = proto.RequiresCanAccess, Delay = delay, Event = new InteractionVerbDoAfterEvent(proto.ID, args) }; @@ -178,7 +178,8 @@ public void PerformVerb(InteractionVerbPrototype proto, InteractionArgs args, bo if (_net.IsClient) return; // this leads to issues - if (!proto.Action!.CanPerform(args, proto, false, _verbDependencies) && !force + if (!PerformChecks(proto, ref args, out _, out _) && !force + || !proto.Action!.CanPerform(args, proto, false, _verbDependencies) && !force || !proto.Action.Perform(args, proto, _verbDependencies)) { CreateVerbEffects(proto.EffectFailure, Fail, proto, args); @@ -271,7 +272,7 @@ private bool PerformChecks(InteractionVerbPrototype proto, ref InteractionArgs a return false; } - if (proto.RequiresCanInteract && args is not { CanInteract: true, CanAccess: true } || !proto.Range.IsInRange(distance)) + if (!args.CanInteract || proto.RequiresCanAccess && !args.CanAccess || !proto.Range.IsInRange(distance)) { errorLocale = "interaction-verb-cannot-reach"; return false; diff --git a/Content.Shared/Inventory/Events/UnequippedEvents.cs b/Content.Shared/Inventory/Events/UnequippedEvents.cs index ef607f071af..4e1764a7d2d 100644 --- a/Content.Shared/Inventory/Events/UnequippedEvents.cs +++ b/Content.Shared/Inventory/Events/UnequippedEvents.cs @@ -22,12 +22,18 @@ public abstract class UnequippedEventBase : EntityEventArgs /// public readonly string SlotGroup; + /// + /// Slotflags of the slot the entity just got unequipped from. + /// + public readonly SlotFlags SlotFlags; + public UnequippedEventBase(EntityUid equipee, EntityUid equipment, SlotDefinition slotDefinition) { Equipee = equipee; Equipment = equipment; Slot = slotDefinition.Name; SlotGroup = slotDefinition.SlotGroup; + SlotFlags = slotDefinition.SlotFlags; } } diff --git a/Content.Shared/Inventory/InventoryComponent.cs b/Content.Shared/Inventory/InventoryComponent.cs index 2a8710f0f28..02b3a5b2583 100644 --- a/Content.Shared/Inventory/InventoryComponent.cs +++ b/Content.Shared/Inventory/InventoryComponent.cs @@ -13,6 +13,18 @@ public sealed partial class InventoryComponent : Component [DataField("speciesId")] public string? SpeciesId { get; set; } + [DataField] public Dictionary Displacements = []; + public SlotDefinition[] Slots = Array.Empty(); public ContainerSlot[] Containers = Array.Empty(); + + [DataDefinition] + public sealed partial class SlotDisplacementData + { + [DataField(required: true)] + public PrototypeLayerData Layer = default!; + + [DataField] + public string? ShaderOverride = "DisplacedStencilDraw"; + } } diff --git a/Content.Shared/Inventory/InventorySystem.Equip.cs b/Content.Shared/Inventory/InventorySystem.Equip.cs index 78321d8f82d..7d653709799 100644 --- a/Content.Shared/Inventory/InventorySystem.Equip.cs +++ b/Content.Shared/Inventory/InventorySystem.Equip.cs @@ -1,4 +1,5 @@ using System.Diagnostics.CodeAnalysis; +using Content.Shared.Armor; using Content.Shared.Clothing.Components; using Content.Shared.DoAfter; using Content.Shared.Hands; @@ -118,7 +119,7 @@ private void OnUseSlot(UseSlotNetworkMessage ev, EntitySessionEventArgs eventArg if (!_handsSystem.CanDropHeld(actor, hands.ActiveHand!, checkActionBlocker: false)) return; - RaiseLocalEvent(held.Value, new HandDeselectedEvent(actor), false); + RaiseLocalEvent(held.Value, new HandDeselectedEvent(actor)); TryEquip(actor, actor, held.Value, ev.Slot, predicted: true, inventory: inventory, force: true, checkDoafter:true); } @@ -218,11 +219,7 @@ public bool CanAccess(EntityUid actor, EntityUid target, EntityUid itemUid) return false; // Can the actor reach the item? - if (_interactionSystem.InRangeUnobstructed(actor, itemUid) && _containerSystem.IsInSameOrParentContainer(actor, itemUid)) - return true; - - // Is the item in an open storage UI, i.e., is the user quick-equipping from an open backpack? - if (_interactionSystem.CanAccessViaStorage(actor, itemUid)) + if (_interactionSystem.InRangeAndAccessible(actor, itemUid)) return true; // Is the actor currently stripping the target? Here we could check if the actor has the stripping UI open, but @@ -252,8 +249,16 @@ public bool CanEquip(EntityUid actor, EntityUid target, EntityUid itemUid, strin return false; DebugTools.Assert(slotDefinition.Name == slot); - if (slotDefinition.DependsOn != null && !TryGetSlotEntity(target, slotDefinition.DependsOn, out _, inventory)) - return false; + if (slotDefinition.DependsOn != null) + { + if (!TryGetSlotEntity(target, slotDefinition.DependsOn, out EntityUid? slotEntity, inventory)) + return false; + + if (slotDefinition.DependsOnComponents is { } componentRegistry) + foreach (var (_, entry) in componentRegistry) + if (!HasComp(slotEntity, entry.Component.GetType())) + return false; + } var fittingInPocket = slotDefinition.SlotFlags.HasFlag(SlotFlags.POCKET) && item != null && @@ -310,7 +315,6 @@ public bool CanEquip(EntityUid actor, EntityUid target, EntityUid itemUid, strin reason = itemAttemptEvent.Reason ?? reason; return false; } - return true; } diff --git a/Content.Shared/Inventory/InventorySystem.Relay.cs b/Content.Shared/Inventory/InventorySystem.Relay.cs index 6ee5ccb2064..a14c836e1d9 100644 --- a/Content.Shared/Inventory/InventorySystem.Relay.cs +++ b/Content.Shared/Inventory/InventorySystem.Relay.cs @@ -13,8 +13,7 @@ using Content.Shared.Strip.Components; using Content.Shared.Temperature; using Content.Shared.Verbs; -using Robust.Shared.Containers; -using Content.Shared.Nuclear14.Special; +using Content.Shared.Chat; namespace Content.Shared.Inventory; @@ -31,6 +30,7 @@ public void InitializeRelay() SubscribeLocalEvent(RelayInventoryEvent); SubscribeLocalEvent(RelayInventoryEvent); SubscribeLocalEvent(RelayInventoryEvent); + SubscribeLocalEvent(RelayInventoryEvent); // by-ref events SubscribeLocalEvent(RefRelayInventoryEvent); @@ -42,16 +42,18 @@ public void InitializeRelay() SubscribeLocalEvent(RelayInventoryEvent); // ComponentActivatedClientSystems - SubscribeLocalEvent>(RelayInventoryEvent); + SubscribeLocalEvent>(RelayInventoryEvent); SubscribeLocalEvent>(RelayInventoryEvent); SubscribeLocalEvent>(RelayInventoryEvent); SubscribeLocalEvent>(RelayInventoryEvent); SubscribeLocalEvent>(RelayInventoryEvent); + SubscribeLocalEvent>(RelayInventoryEvent); SubscribeLocalEvent>(RelayInventoryEvent); + SubscribeLocalEvent>(RelayInventoryEvent); SubscribeLocalEvent>(OnGetEquipmentVerbs); // Nuclear14 Cloth Special Modifiers - SubscribeLocalEvent(RelayInventoryEvent); + // SubscribeLocalEvent(RelayInventoryEvent); // Nuclear14 end } @@ -128,6 +130,11 @@ public InventoryRelayedEvent(TEvent args) } } +public interface IClothingSlots +{ + SlotFlags Slots { get; } +} + /// /// Events that should be relayed to inventory slots should implement this interface. /// diff --git a/Content.Shared/Inventory/InventorySystem.Slots.cs b/Content.Shared/Inventory/InventorySystem.Slots.cs index cbbee3a85bd..e0f2a695576 100644 --- a/Content.Shared/Inventory/InventorySystem.Slots.cs +++ b/Content.Shared/Inventory/InventorySystem.Slots.cs @@ -1,4 +1,6 @@ using System.Diagnostics.CodeAnalysis; +using Content.Shared.Inventory.Events; +using Content.Shared.Storage; using Robust.Shared.Containers; using Robust.Shared.Prototypes; using Robust.Shared.Utility; @@ -13,6 +15,7 @@ public partial class InventorySystem : EntitySystem private void InitializeSlots() { SubscribeLocalEvent(OnInit); + SubscribeNetworkEvent(OnOpenSlotStorage); _vvm.GetTypeHandler() .AddHandler(HandleViewVariablesSlots, ListViewVariablesSlots); @@ -24,6 +27,31 @@ private void ShutdownSlots() .RemoveHandler(HandleViewVariablesSlots, ListViewVariablesSlots); } + /// + /// Tries to find an entity in the specified slot with the specified component. + /// + public bool TryGetInventoryEntity(Entity entity, out EntityUid targetUid) + where T : IComponent, IClothingSlots + { + if (TryGetContainerSlotEnumerator(entity.Owner, out var containerSlotEnumerator)) + { + while (containerSlotEnumerator.NextItem(out var item, out var slot)) + { + if (!TryComp(item, out var required)) + continue; + + if ((((IClothingSlots) required).Slots & slot.SlotFlags) == 0x0) + continue; + + targetUid = item; + return true; + } + } + + targetUid = EntityUid.Invalid; + return false; + } + protected virtual void OnInit(EntityUid uid, InventoryComponent component, ComponentInit args) { if (!_prototypeManager.TryIndex(component.TemplateId, out InventoryTemplatePrototype? invTemplate)) @@ -40,6 +68,17 @@ protected virtual void OnInit(EntityUid uid, InventoryComponent component, Compo } } + private void OnOpenSlotStorage(OpenSlotStorageNetworkMessage ev, EntitySessionEventArgs args) + { + if (args.SenderSession.AttachedEntity is not { Valid: true } uid) + return; + + if (TryGetSlotEntity(uid, ev.Slot, out var entityUid) && TryComp(entityUid, out var storageComponent)) + { + _storageSystem.OpenStorageUI(entityUid.Value, uid, storageComponent); + } + } + public bool TryGetSlotContainer(EntityUid uid, string slot, [NotNullWhen(true)] out ContainerSlot? containerSlot, [NotNullWhen(true)] out SlotDefinition? slotDefinition, InventoryComponent? inventory = null, ContainerManagerComponent? containerComp = null) { @@ -112,7 +151,6 @@ public bool TryGetSlots(EntityUid uid, [NotNullWhen(true)] out SlotDefinition[]? slotDefinitions = null; return false; } - slotDefinitions = inv.Slots; return true; } diff --git a/Content.Shared/Inventory/InventoryTemplatePrototype.cs b/Content.Shared/Inventory/InventoryTemplatePrototype.cs index 585f80d4ce9..a4d77767e37 100644 --- a/Content.Shared/Inventory/InventoryTemplatePrototype.cs +++ b/Content.Shared/Inventory/InventoryTemplatePrototype.cs @@ -17,6 +17,10 @@ public sealed partial class SlotDefinition { [DataField("name", required: true)] public string Name { get; private set; } = string.Empty; [DataField("slotTexture")] public string TextureName { get; private set; } = "pocket"; + /// + /// The texture displayed in a slot when it has an item inside of it. + /// + [DataField] public string FullTextureName { get; private set; } = "SlotBackground"; [DataField("slotFlags")] public SlotFlags SlotFlags { get; private set; } = SlotFlags.PREVENTEQUIP; [DataField("showInWindow")] public bool ShowInWindow { get; private set; } = true; [DataField("slotGroup")] public string SlotGroup { get; private set; } = "Default"; @@ -30,6 +34,8 @@ public sealed partial class SlotDefinition [DataField("dependsOn")] public string? DependsOn { get; private set; } + [DataField("dependsOnComponents")] public ComponentRegistry? DependsOnComponents { get; private set; } + [DataField("displayName", required: true)] public string DisplayName { get; private set; } = string.Empty; diff --git a/Content.Shared/Inventory/SlotFlags.cs b/Content.Shared/Inventory/SlotFlags.cs index 8d5e33e3486..90971d1670b 100644 --- a/Content.Shared/Inventory/SlotFlags.cs +++ b/Content.Shared/Inventory/SlotFlags.cs @@ -27,4 +27,6 @@ public enum SlotFlags FEET = 1 << 14, SUITSTORAGE = 1 << 15, All = ~NONE, + + WITHOUT_POCKET = All & ~POCKET } diff --git a/Content.Shared/Inventory/VirtualItem/SharedVirtualItemSystem.cs b/Content.Shared/Inventory/VirtualItem/SharedVirtualItemSystem.cs index e45530e4582..60beb546521 100644 --- a/Content.Shared/Inventory/VirtualItem/SharedVirtualItemSystem.cs +++ b/Content.Shared/Inventory/VirtualItem/SharedVirtualItemSystem.cs @@ -4,6 +4,7 @@ using Content.Shared.Interaction; using Content.Shared.Inventory.Events; using Content.Shared.Item; +using Content.Shared.Popups; using Robust.Shared.Containers; using Robust.Shared.Network; using Robust.Shared.Prototypes; @@ -29,6 +30,7 @@ public abstract class SharedVirtualItemSystem : EntitySystem [Dependency] private readonly SharedItemSystem _itemSystem = default!; [Dependency] private readonly InventorySystem _inventorySystem = default!; [Dependency] private readonly SharedHandsSystem _handsSystem = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; [ValidatePrototypeId] private const string VirtualItem = "VirtualItem"; @@ -71,23 +73,48 @@ private void OnBeforeRangedInteract(Entity ent, ref Before } #region Hands + /// /// Spawns a virtual item in a empty hand /// /// The entity we will make a virtual entity copy of /// The entity that we want to insert the virtual entity - public bool TrySpawnVirtualItemInHand(EntityUid blockingEnt, EntityUid user) + /// Whether or not to try and drop other items to make space + public bool TrySpawnVirtualItemInHand(EntityUid blockingEnt, EntityUid user, bool dropOthers = false) { - return TrySpawnVirtualItemInHand(blockingEnt, user, out _); + return TrySpawnVirtualItemInHand(blockingEnt, user, out _, dropOthers); } - /// - public bool TrySpawnVirtualItemInHand(EntityUid blockingEnt, EntityUid user, [NotNullWhen(true)] out EntityUid? virtualItem) + /// + public bool TrySpawnVirtualItemInHand(EntityUid blockingEnt, EntityUid user, [NotNullWhen(true)] out EntityUid? virtualItem, bool dropOthers = false) { - if (!TrySpawnVirtualItem(blockingEnt, user, out virtualItem) || !_handsSystem.TryGetEmptyHand(user, out var hand)) + virtualItem = null; + if (!_handsSystem.TryGetEmptyHand(user, out var empty)) + { + if (!dropOthers) + return false; + + foreach (var hand in _handsSystem.EnumerateHands(user)) + { + if (hand.HeldEntity is not { } held + || held == blockingEnt + || HasComp(held) + || !_handsSystem.TryDrop(user, hand)) + continue; + + if (!TerminatingOrDeleted(held)) + _popup.PopupClient(Loc.GetString("virtual-item-dropped-other", ("dropped", held)), user, user); + + empty = hand; + break; + } + } + + if (empty == null + || !TrySpawnVirtualItem(blockingEnt, user, out virtualItem)) return false; - _handsSystem.DoPickup(user, hand, virtualItem.Value); + _handsSystem.DoPickup(user, empty, virtualItem.Value); return true; } @@ -120,6 +147,7 @@ public void DeleteInHandsMatching(EntityUid user, EntityUid matching) /// The entity we will make a virtual entity copy of /// The entity that we want to insert the virtual entity /// The slot to which we will insert the virtual entity (could be the "shoes" slot, for example) + /// Whether or not to force an equip public bool TrySpawnVirtualItemInInventory(EntityUid blockingEnt, EntityUid user, string slot, bool force = false) { return TrySpawnVirtualItemInInventory(blockingEnt, user, slot, force, out _); @@ -140,6 +168,8 @@ public bool TrySpawnVirtualItemInInventory(EntityUid blockingEnt, EntityUid user /// that's done check if the found virtual entity is a copy of our matching entity, /// if it is, delete it /// + /// The entity that we want to delete the virtual entity from + /// The entity that made the virtual entity /// Set this param if you have the name of the slot, it avoids unnecessary queries public void DeleteInSlotMatching(EntityUid user, EntityUid matching, string? slotName = null) { @@ -178,6 +208,7 @@ public void DeleteInSlotMatching(EntityUid user, EntityUid matching, string? slo /// /// The entity we will make a virtual entity copy of /// The entity that we want to insert the virtual entity + /// The virtual item, if spawned public bool TrySpawnVirtualItem(EntityUid blockingEnt, EntityUid user, [NotNullWhen(true)] out EntityUid? virtualItem) { if (_netManager.IsClient) diff --git a/Content.Shared/Item/SharedItemSystem.cs b/Content.Shared/Item/SharedItemSystem.cs index 29e82f8adeb..5eaa25f4847 100644 --- a/Content.Shared/Item/SharedItemSystem.cs +++ b/Content.Shared/Item/SharedItemSystem.cs @@ -192,7 +192,7 @@ public IReadOnlyList GetAdjustedItemShape(Entity entity, var shapes = GetItemShape(entity); var boundingShape = shapes.GetBoundingBox(); var boundingCenter = ((Box2) boundingShape).Center; - var matty = Matrix3.CreateTransform(boundingCenter, rotation); + var matty = Matrix3Helpers.CreateTransform(boundingCenter, rotation); var drift = boundingShape.BottomLeft - matty.TransformBox(boundingShape).BottomLeft; var adjustedShapes = new List(); diff --git a/Content.Shared/Labels/Components/HandLabelerComponent.cs b/Content.Shared/Labels/Components/HandLabelerComponent.cs new file mode 100644 index 00000000000..8e2cb7b0675 --- /dev/null +++ b/Content.Shared/Labels/Components/HandLabelerComponent.cs @@ -0,0 +1,30 @@ +using Content.Shared.Labels.EntitySystems; +using Content.Shared.Whitelist; +using Robust.Shared.GameStates; +using Robust.Shared.Serialization; + +namespace Content.Shared.Labels.Components; + +[RegisterComponent, NetworkedComponent] +[Access(typeof(SharedHandLabelerSystem))] +public sealed partial class HandLabelerComponent : Component +{ + [ViewVariables(VVAccess.ReadWrite), Access(Other = AccessPermissions.ReadWriteExecute)] + [DataField] + public string AssignedLabel = string.Empty; + + [ViewVariables(VVAccess.ReadWrite)] + [DataField] + public int MaxLabelChars = 50; + + [DataField] + public EntityWhitelist Whitelist = new(); +} + +[Serializable, NetSerializable] +public sealed class HandLabelerComponentState(string assignedLabel) : IComponentState +{ + public string AssignedLabel = assignedLabel; + + public int MaxLabelChars; +} diff --git a/Content.Shared/Labels/EntitySystems/SharedHandLabelerSystem.cs b/Content.Shared/Labels/EntitySystems/SharedHandLabelerSystem.cs new file mode 100644 index 00000000000..7dbeee3e770 --- /dev/null +++ b/Content.Shared/Labels/EntitySystems/SharedHandLabelerSystem.cs @@ -0,0 +1,129 @@ +using Content.Shared.Administration.Logs; +using Content.Shared.Database; +using Content.Shared.Interaction; +using Content.Shared.Labels.Components; +using Content.Shared.Popups; +using Content.Shared.Verbs; +using Robust.Shared.GameStates; +using Robust.Shared.Network; + +namespace Content.Shared.Labels.EntitySystems; + +public abstract class SharedHandLabelerSystem : EntitySystem +{ + [Dependency] protected readonly SharedUserInterfaceSystem UserInterfaceSystem = default!; + [Dependency] private readonly SharedPopupSystem _popupSystem = default!; + [Dependency] private readonly SharedLabelSystem _labelSystem = default!; + [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!; + [Dependency] private readonly INetManager _netManager = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(AfterInteractOn); + SubscribeLocalEvent>(OnUtilityVerb); + // Bound UI subscriptions + SubscribeLocalEvent(OnHandLabelerLabelChanged); + SubscribeLocalEvent(OnGetState); + SubscribeLocalEvent(OnHandleState); + } + + private void OnGetState(Entity ent, ref ComponentGetState args) + { + args.State = new HandLabelerComponentState(ent.Comp.AssignedLabel) + { + MaxLabelChars = ent.Comp.MaxLabelChars, + }; + } + + private void OnHandleState(Entity ent, ref ComponentHandleState args) + { + if (args.Current is not HandLabelerComponentState state) + return; + + ent.Comp.MaxLabelChars = state.MaxLabelChars; + + if (ent.Comp.AssignedLabel == state.AssignedLabel) + return; + + ent.Comp.AssignedLabel = state.AssignedLabel; + UpdateUI(ent); + } + + protected virtual void UpdateUI(Entity ent) + { + } + + private void AddLabelTo(EntityUid uid, HandLabelerComponent? handLabeler, EntityUid target, out string? result) + { + if (!Resolve(uid, ref handLabeler)) + { + result = null; + return; + } + + if (handLabeler.AssignedLabel == string.Empty) + { + if (_netManager.IsServer) + _labelSystem.Label(target, null); + result = Loc.GetString("hand-labeler-successfully-removed"); + return; + } + if (_netManager.IsServer) + _labelSystem.Label(target, handLabeler.AssignedLabel); + result = Loc.GetString("hand-labeler-successfully-applied"); + } + + private void OnUtilityVerb(EntityUid uid, HandLabelerComponent handLabeler, GetVerbsEvent args) + { + if (args.Target is not { Valid: true } target || !handLabeler.Whitelist.IsValid(target) || !args.CanAccess) + return; + + var labelerText = handLabeler.AssignedLabel == string.Empty ? Loc.GetString("hand-labeler-remove-label-text") : Loc.GetString("hand-labeler-add-label-text"); + + var verb = new UtilityVerb() + { + Act = () => + { + Labeling(uid, target, args.User, handLabeler); + }, + Text = labelerText + }; + + args.Verbs.Add(verb); + } + + private void AfterInteractOn(EntityUid uid, HandLabelerComponent handLabeler, AfterInteractEvent args) + { + if (args.Target is not { Valid: true } target || !handLabeler.Whitelist.IsValid(target) || !args.CanReach) + return; + + Labeling(uid, target, args.User, handLabeler); + } + + private void Labeling(EntityUid uid, EntityUid target, EntityUid User, HandLabelerComponent handLabeler) + { + AddLabelTo(uid, handLabeler, target, out var result); + if (result == null) + return; + + _popupSystem.PopupClient(result, User, User); + + // Log labeling + _adminLogger.Add(LogType.Action, LogImpact.Low, + $"{ToPrettyString(User):user} labeled {ToPrettyString(target):target} with {ToPrettyString(uid):labeler}"); + } + + private void OnHandLabelerLabelChanged(EntityUid uid, HandLabelerComponent handLabeler, HandLabelerLabelChangedMessage args) + { + var label = args.Label.Trim(); + handLabeler.AssignedLabel = label[..Math.Min(handLabeler.MaxLabelChars, label.Length)]; + UpdateUI((uid, handLabeler)); + Dirty(uid, handLabeler); + + // Log label change + _adminLogger.Add(LogType.Action, LogImpact.Low, + $"{ToPrettyString(args.Actor):user} set {ToPrettyString(uid):labeler} to apply label \"{handLabeler.AssignedLabel}\""); + } +} diff --git a/Content.Shared/Labels/EntitySystems/SharedLabelSystem.cs b/Content.Shared/Labels/EntitySystems/SharedLabelSystem.cs index a8239e7867b..1189bb46d04 100644 --- a/Content.Shared/Labels/EntitySystems/SharedLabelSystem.cs +++ b/Content.Shared/Labels/EntitySystems/SharedLabelSystem.cs @@ -13,6 +13,8 @@ public override void Initialize() SubscribeLocalEvent(OnExamine); } + public virtual void Label(EntityUid uid, string? text, MetaDataComponent? metadata = null, LabelComponent? label = null){} + private void OnExamine(EntityUid uid, LabelComponent? label, ExaminedEvent args) { if (!Resolve(uid, ref label)) diff --git a/Content.Shared/Labels/LabelEvents.cs b/Content.Shared/Labels/LabelEvents.cs index 9f00354af24..62e9c15c85e 100644 --- a/Content.Shared/Labels/LabelEvents.cs +++ b/Content.Shared/Labels/LabelEvents.cs @@ -1,47 +1,27 @@ using Robust.Shared.Serialization; -namespace Content.Shared.Labels -{ - /// - /// Key representing which is currently open. - /// Useful when there are multiple UI for an object. Here it's future-proofing only. - /// - [Serializable, NetSerializable] - public enum HandLabelerUiKey - { - Key, - } - - [Serializable, NetSerializable] - public enum PaperLabelVisuals : byte - { - Layer, - HasLabel, - LabelType - } +namespace Content.Shared.Labels; - /// - /// Represents a state that can be sent to the client - /// - [Serializable, NetSerializable] - public sealed class HandLabelerBoundUserInterfaceState : BoundUserInterfaceState - { - public string CurrentLabel { get; } - - public HandLabelerBoundUserInterfaceState(string currentLabel) - { - CurrentLabel = currentLabel; - } - } +/// +/// Key representing which is currently open. +/// Useful when there are multiple UI for an object. Here it's future-proofing only. +/// +[Serializable, NetSerializable] +public enum HandLabelerUiKey +{ + Key, +} - [Serializable, NetSerializable] - public sealed class HandLabelerLabelChangedMessage : BoundUserInterfaceMessage - { - public string Label { get; } +[Serializable, NetSerializable] +public enum PaperLabelVisuals : byte +{ + Layer, + HasLabel, + LabelType +} - public HandLabelerLabelChangedMessage(string label) - { - Label = label; - } - } +[Serializable, NetSerializable] +public sealed class HandLabelerLabelChangedMessage(string label) : BoundUserInterfaceMessage +{ + public string Label { get; } = label; } diff --git a/Content.Shared/Language/Components/LanguageKnowledgeComponent.cs b/Content.Shared/Language/Components/LanguageKnowledgeComponent.cs deleted file mode 100644 index ddbdc742be4..00000000000 --- a/Content.Shared/Language/Components/LanguageKnowledgeComponent.cs +++ /dev/null @@ -1,24 +0,0 @@ -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.List; - -namespace Content.Shared.Language.Components; - -// TODO: move to server side, it's never synchronized! - -/// -/// Stores data about entities' intrinsic language knowledge. -/// -[RegisterComponent] -public sealed partial class LanguageKnowledgeComponent : Component -{ - /// - /// List of languages this entity can speak without any external tools. - /// - [DataField("speaks", customTypeSerializer: typeof(PrototypeIdListSerializer), required: true)] - public List SpokenLanguages = new(); - - /// - /// List of languages this entity can understand without any external tools. - /// - [DataField("understands", customTypeSerializer: typeof(PrototypeIdListSerializer), required: true)] - public List UnderstoodLanguages = new(); -} diff --git a/Content.Shared/Language/Components/LanguageSpeakerComponent.cs b/Content.Shared/Language/Components/LanguageSpeakerComponent.cs index e8ebccb3ddf..f026361cadf 100644 --- a/Content.Shared/Language/Components/LanguageSpeakerComponent.cs +++ b/Content.Shared/Language/Components/LanguageSpeakerComponent.cs @@ -1,7 +1,9 @@ -namespace Content.Shared.Language; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; +using Robust.Shared.Serialization.TypeSerializers.Implementations; -// TODO: either move all language speaker-related components to server side, or make everything else shared. -// The current approach leads to confusion, as the server never informs the client of updates in these components. +namespace Content.Shared.Language.Components; /// /// Stores the current state of the languages the entity can speak and understand. @@ -10,23 +12,35 @@ namespace Content.Shared.Language; /// All fields of this component are populated during a DetermineEntityLanguagesEvent. /// They are not to be modified externally. /// -[RegisterComponent] +[RegisterComponent, NetworkedComponent] public sealed partial class LanguageSpeakerComponent : Component { + public override bool SendOnlyToOwner => true; + /// /// The current language the entity uses when speaking. /// Other listeners will hear the entity speak in this language. /// [DataField] - public string CurrentLanguage = ""; // The language system will override it on init + public string CurrentLanguage = ""; // The language system will override it on mapinit /// /// List of languages this entity can speak at the current moment. /// - public List SpokenLanguages = []; + [DataField] + public List> SpokenLanguages = []; /// /// List of languages this entity can understand at the current moment. /// - public List UnderstoodLanguages = []; + [DataField] + public List> UnderstoodLanguages = []; + + [Serializable, NetSerializable] + public sealed class State : ComponentState + { + public string CurrentLanguage = default!; + public List> SpokenLanguages = default!; + public List> UnderstoodLanguages = default!; + } } diff --git a/Content.Shared/Language/Components/Translators/BaseTranslatorComponent.cs b/Content.Shared/Language/Components/Translators/BaseTranslatorComponent.cs index 072480031d5..8bd1f6be488 100644 --- a/Content.Shared/Language/Components/Translators/BaseTranslatorComponent.cs +++ b/Content.Shared/Language/Components/Translators/BaseTranslatorComponent.cs @@ -1,3 +1,4 @@ +using Robust.Shared.Prototypes; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.List; namespace Content.Shared.Language.Components.Translators; @@ -7,21 +8,21 @@ public abstract partial class BaseTranslatorComponent : Component /// /// The list of additional languages this translator allows the wielder to speak. /// - [DataField("spoken", customTypeSerializer: typeof(PrototypeIdListSerializer))] - public List SpokenLanguages = new(); + [DataField("spoken")] + public List> SpokenLanguages = new(); /// /// The list of additional languages this translator allows the wielder to understand. /// - [DataField("understood", customTypeSerializer: typeof(PrototypeIdListSerializer))] - public List UnderstoodLanguages = new(); + [DataField("understood")] + public List> UnderstoodLanguages = new(); /// /// The languages the wielding MUST know in order for this translator to have effect. /// The field [RequiresAllLanguages] indicates whether all of them are required, or just one. /// - [DataField("requires", customTypeSerializer: typeof(PrototypeIdListSerializer))] - public List RequiredLanguages = new(); + [DataField("requires")] + public List> RequiredLanguages = new(); /// /// If true, the wielder must understand all languages in [RequiredLanguages] to speak [SpokenLanguages], @@ -30,9 +31,8 @@ public abstract partial class BaseTranslatorComponent : Component /// Otherwise, at least one language must be known (or the list must be empty). /// [DataField("requiresAll")] - [ViewVariables(VVAccess.ReadWrite)] public bool RequiresAllLanguages = false; - [DataField("enabled"), ViewVariables(VVAccess.ReadWrite)] + [DataField("enabled")] public bool Enabled = true; } diff --git a/Content.Shared/Language/Components/Translators/HandheldTranslatorComponent.cs b/Content.Shared/Language/Components/Translators/HandheldTranslatorComponent.cs index 7e3de0eca61..6b2f434fa70 100644 --- a/Content.Shared/Language/Components/Translators/HandheldTranslatorComponent.cs +++ b/Content.Shared/Language/Components/Translators/HandheldTranslatorComponent.cs @@ -4,7 +4,7 @@ namespace Content.Shared.Language.Components.Translators; /// A translator that must be held in a hand or a pocket of an entity in order ot have effect. /// [RegisterComponent] -public sealed partial class HandheldTranslatorComponent : Translators.BaseTranslatorComponent +public sealed partial class HandheldTranslatorComponent : BaseTranslatorComponent { /// /// Whether interacting with this translator toggles it on and off. diff --git a/Content.Shared/Language/Components/UniversalLanguageSpeakerComponent.cs b/Content.Shared/Language/Components/UniversalLanguageSpeakerComponent.cs deleted file mode 100644 index 6f5ad1178b8..00000000000 --- a/Content.Shared/Language/Components/UniversalLanguageSpeakerComponent.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace Content.Shared.Language.Components; - -// -// Signifies that this entity can speak and understand any language. -// Applies to such entities as ghosts. -// -[RegisterComponent] -public sealed partial class UniversalLanguageSpeakerComponent : Component -{ - -} diff --git a/Content.Server/Language/DetermineEntityLanguagesEvent.cs b/Content.Shared/Language/Events/DetermineEntityLanguagesEvent.cs similarity index 77% rename from Content.Server/Language/DetermineEntityLanguagesEvent.cs rename to Content.Shared/Language/Events/DetermineEntityLanguagesEvent.cs index 8d6b868d070..a01e5613f82 100644 --- a/Content.Server/Language/DetermineEntityLanguagesEvent.cs +++ b/Content.Shared/Language/Events/DetermineEntityLanguagesEvent.cs @@ -1,6 +1,6 @@ -using Content.Shared.Language; +using Robust.Shared.Prototypes; -namespace Content.Server.Language; +namespace Content.Shared.Language.Events; /// /// Raised in order to determine the list of languages the entity can speak and understand at the given moment. @@ -13,13 +13,13 @@ public record struct DetermineEntityLanguagesEvent /// The list of all languages the entity may speak. /// By default, contains the languages this entity speaks intrinsically. /// - public HashSet SpokenLanguages = new(); + public HashSet> SpokenLanguages = new(); /// /// The list of all languages the entity may understand. /// By default, contains the languages this entity understands intrinsically. /// - public HashSet UnderstoodLanguages = new(); + public HashSet> UnderstoodLanguages = new(); public DetermineEntityLanguagesEvent() {} } diff --git a/Content.Shared/Language/Events/LanguagesUpdateEvent.cs b/Content.Shared/Language/Events/LanguagesUpdateEvent.cs index 90ce2f4446b..fa68bf5af6f 100644 --- a/Content.Shared/Language/Events/LanguagesUpdateEvent.cs +++ b/Content.Shared/Language/Events/LanguagesUpdateEvent.cs @@ -3,6 +3,10 @@ namespace Content.Shared.Language.Events; /// /// Raised on an entity when its list of languages changes. /// +/// +/// This is raised both on the server and on the client. +/// The client raises it broadcast after receiving a new language comp state from the server. +/// public sealed class LanguagesUpdateEvent : EntityEventArgs { } diff --git a/Content.Shared/Language/Events/LanguagesUpdatedMessage.cs b/Content.Shared/Language/Events/LanguagesUpdatedMessage.cs deleted file mode 100644 index 563f036df6d..00000000000 --- a/Content.Shared/Language/Events/LanguagesUpdatedMessage.cs +++ /dev/null @@ -1,15 +0,0 @@ -using Robust.Shared.Serialization; - -namespace Content.Shared.Language.Events; - -/// -/// Sent to the client when its list of languages changes. -/// The client should in turn update its HUD and relevant systems. -/// -[Serializable, NetSerializable] -public sealed class LanguagesUpdatedMessage(string currentLanguage, List spoken, List understood) : EntityEventArgs -{ - public string CurrentLanguage = currentLanguage; - public List Spoken = spoken; - public List Understood = understood; -} diff --git a/Content.Shared/Language/Events/RequestLanguagesMessage.cs b/Content.Shared/Language/Events/RequestLanguagesMessage.cs deleted file mode 100644 index aead1f4cd1a..00000000000 --- a/Content.Shared/Language/Events/RequestLanguagesMessage.cs +++ /dev/null @@ -1,10 +0,0 @@ -using Robust.Shared.Serialization; - -namespace Content.Shared.Language.Events; - -/// -/// Sent from the client to the server when it needs to learn the list of languages its entity knows. -/// This event should always be followed by a , unless the client doesn't have an entity. -/// -[Serializable, NetSerializable] -public sealed class RequestLanguagesMessage : EntityEventArgs; diff --git a/Content.Shared/Language/LanguagePrototype.cs b/Content.Shared/Language/LanguagePrototype.cs index d40a7b40681..dbc53c65d47 100644 --- a/Content.Shared/Language/LanguagePrototype.cs +++ b/Content.Shared/Language/LanguagePrototype.cs @@ -4,10 +4,16 @@ namespace Content.Shared.Language; [Prototype("language")] -public sealed class LanguagePrototype : IPrototype +public sealed partial class LanguagePrototype : IPrototype { [IdDataField] - public string ID { get; private set; } = default!; + public string ID { get; private set; } = default!; + + /// + /// Whether this language will display its name in chat behind a player's name. + /// + [DataField] + public bool IsVisibleLanguage { get; set; } /// /// Obfuscation method used by this language. By default, uses @@ -27,6 +33,11 @@ public sealed class LanguagePrototype : IPrototype /// public string Name => Loc.GetString($"language-{ID}-name"); + /// + /// The in-world chat abbreviation of this language, localized. + /// + public string ChatName => Loc.GetString($"chat-language-{ID}-name"); + /// /// The in-world description of this language, localized. /// @@ -53,6 +64,14 @@ public sealed partial class SpeechOverrideInfo [DataField] public bool AllowRadio = true; + /// + /// If true, the message will be relayed to the Empathy Chat and + /// anyone with that language will also hear Empathy Chat. (Unless user has ShadowkinBlackeyeComponent) + /// This is mostly only use for "Marish" but... fuckit modularity :p + /// + [DataField] + public bool EmpathySpeech = false; + /// /// If false, the entity can use this language even when it's unable to speak (i.e. muffled or muted), /// and accents are not applied to messages in this language. diff --git a/Content.Shared/Language/Systems/SharedLanguageSystem.cs b/Content.Shared/Language/Systems/SharedLanguageSystem.cs index 0a03086ebe1..86a58dc2a7c 100644 --- a/Content.Shared/Language/Systems/SharedLanguageSystem.cs +++ b/Content.Shared/Language/Systems/SharedLanguageSystem.cs @@ -10,7 +10,7 @@ public abstract class SharedLanguageSystem : EntitySystem /// The language used as a fallback in cases where an entity suddenly becomes a language speaker (e.g. the usage of make-sentient) /// [ValidatePrototypeId] - public static readonly string FallbackLanguagePrototype = "GalacticCommon"; + public static readonly string FallbackLanguagePrototype = "TauCetiBasic"; /// /// The language whose speakers are assumed to understand and speak every language. Should never be added directly. @@ -31,9 +31,9 @@ public override void Initialize() Universal = _prototype.Index("Universal"); } - public LanguagePrototype? GetLanguagePrototype(string id) + public LanguagePrototype? GetLanguagePrototype(ProtoId id) { - _prototype.TryIndex(id, out var proto); + _prototype.TryIndex(id, out var proto); return proto; } @@ -43,8 +43,7 @@ public override void Initialize() public string ObfuscateSpeech(string message, LanguagePrototype language) { var builder = new StringBuilder(); - var method = language.Obfuscation; - method.Obfuscate(builder, message, this); + language.Obfuscation.Obfuscate(builder, message, this); return builder.ToString(); } diff --git a/Content.Shared/Light/Components/SharedExpendableLightComponent.cs b/Content.Shared/Light/Components/SharedExpendableLightComponent.cs index e40174ab783..001794880ac 100644 --- a/Content.Shared/Light/Components/SharedExpendableLightComponent.cs +++ b/Content.Shared/Light/Components/SharedExpendableLightComponent.cs @@ -7,7 +7,6 @@ namespace Content.Shared.Light.Components; [NetworkedComponent] public abstract partial class SharedExpendableLightComponent : Component { - public static readonly AudioParams LoopedSoundParams = new(0, 1, 62.5f, 1, 1, true, 0.3f); [ViewVariables(VVAccess.ReadOnly)] public ExpendableLightState CurrentState { get; set; } diff --git a/Content.Shared/Light/Components/UnpoweredFlashlightComponent.cs b/Content.Shared/Light/Components/UnpoweredFlashlightComponent.cs index 1b0701edd2c..2953a01ced8 100644 --- a/Content.Shared/Light/Components/UnpoweredFlashlightComponent.cs +++ b/Content.Shared/Light/Components/UnpoweredFlashlightComponent.cs @@ -2,7 +2,6 @@ using Robust.Shared.Audio; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; namespace Content.Shared.Light.Components; @@ -17,7 +16,7 @@ public sealed partial class UnpoweredFlashlightComponent : Component public SoundSpecifier ToggleSound = new SoundPathSpecifier("/Audio/Items/flashlight_pda.ogg"); [DataField, AutoNetworkedField] - public bool LightOn = false; + public bool LightOn; [DataField] public EntProtoId ToggleAction = "ActionToggleLight"; diff --git a/Content.Shared/Light/EntitySystems/UnpoweredFlashlightSystem.cs b/Content.Shared/Light/EntitySystems/UnpoweredFlashlightSystem.cs new file mode 100644 index 00000000000..42e55bea55d --- /dev/null +++ b/Content.Shared/Light/EntitySystems/UnpoweredFlashlightSystem.cs @@ -0,0 +1,122 @@ +using Content.Shared.Actions; +using Content.Shared.Emag.Systems; +using Content.Shared.Light.Components; +using Content.Shared.Mind.Components; +using Content.Shared.Toggleable; +using Content.Shared.Verbs; +using Robust.Shared.Audio.Systems; +using Robust.Shared.Prototypes; +using Robust.Shared.Random; +using Robust.Shared.Utility; + +namespace Content.Shared.Light.EntitySystems; + +public sealed class UnpoweredFlashlightSystem : EntitySystem +{ + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly SharedActionsSystem _actionsSystem = default!; + [Dependency] private readonly ActionContainerSystem _actionContainer = default!; + [Dependency] private readonly SharedAppearanceSystem _appearance = default!; + [Dependency] private readonly SharedAudioSystem _audioSystem = default!; + [Dependency] private readonly SharedPointLightSystem _light = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent>(AddToggleLightVerbs); + SubscribeLocalEvent(OnGetActions); + SubscribeLocalEvent(OnToggleAction); + SubscribeLocalEvent(OnMindAdded); + SubscribeLocalEvent(OnGotEmagged); + SubscribeLocalEvent(OnMapInit); + } + + private void OnMapInit(EntityUid uid, UnpoweredFlashlightComponent component, MapInitEvent args) + { + _actionContainer.EnsureAction(uid, ref component.ToggleActionEntity, component.ToggleAction); + Dirty(uid, component); + } + + private void OnToggleAction(EntityUid uid, UnpoweredFlashlightComponent component, ToggleActionEvent args) + { + if (args.Handled) + return; + + TryToggleLight((uid, component), args.Performer); + args.Handled = true; + } + + private void OnGetActions(EntityUid uid, UnpoweredFlashlightComponent component, GetItemActionsEvent args) + { + args.AddAction(component.ToggleActionEntity); + } + + private void AddToggleLightVerbs(EntityUid uid, UnpoweredFlashlightComponent component, GetVerbsEvent args) + { + if (!args.CanAccess || !args.CanInteract) + return; + + ActivationVerb verb = new() + { + Text = Loc.GetString("toggle-flashlight-verb-get-data-text"), + Icon = new SpriteSpecifier.Texture(new ("/Textures/Interface/VerbIcons/light.svg.192dpi.png")), + Act = () => TryToggleLight((uid, component), args.User), + Priority = -1 // For things like PDA's, Open-UI and other verbs that should be higher priority. + }; + + args.Verbs.Add(verb); + } + + private void OnMindAdded(EntityUid uid, UnpoweredFlashlightComponent component, MindAddedMessage args) + { + _actionsSystem.AddAction(uid, ref component.ToggleActionEntity, component.ToggleAction); + } + + private void OnGotEmagged(EntityUid uid, UnpoweredFlashlightComponent component, ref GotEmaggedEvent args) + { + if (!_light.TryGetLight(uid, out var light)) + return; + + if (_prototypeManager.TryIndex(component.EmaggedColorsPrototype, out var possibleColors)) + { + var pick = _random.Pick(possibleColors.Colors.Values); + _light.SetColor(uid, pick, light); + } + + args.Repeatable = true; + args.Handled = true; + } + + public void TryToggleLight(Entity ent, EntityUid? user = null, bool quiet = false) + { + if (!Resolve(ent, ref ent.Comp, false)) + return; + + SetLight(ent, !ent.Comp.LightOn, user, quiet); + } + + public void SetLight(Entity ent, bool value, EntityUid? user = null, bool quiet = false) + { + if (!Resolve(ent, ref ent.Comp)) + return; + + if (ent.Comp.LightOn == value) + return; + + if (!_light.TryGetLight(ent, out var light)) + return; + + Dirty(ent); + ent.Comp.LightOn = value; + _light.SetEnabled(ent, value, light); + _appearance.SetData(ent, UnpoweredFlashlightVisuals.LightOn, value); + + if (!quiet) + _audioSystem.PlayPredicted(ent.Comp.ToggleSound, ent, user); + + _actionsSystem.SetToggled(ent.Comp.ToggleActionEntity, value); + RaiseLocalEvent(ent, new LightToggleEvent(value)); + } +} diff --git a/Content.Shared/Light/LightToggleEvent.cs b/Content.Shared/Light/LightToggleEvent.cs new file mode 100644 index 00000000000..ac48c094195 --- /dev/null +++ b/Content.Shared/Light/LightToggleEvent.cs @@ -0,0 +1,6 @@ +namespace Content.Shared.Light; + +public sealed class LightToggleEvent(bool isOn) : EntityEventArgs +{ + public bool IsOn = isOn; +} diff --git a/Content.Shared/Localizations/ContentLocalizationManager.cs b/Content.Shared/Localizations/ContentLocalizationManager.cs index 3c311f43821..7d40182f6cc 100644 --- a/Content.Shared/Localizations/ContentLocalizationManager.cs +++ b/Content.Shared/Localizations/ContentLocalizationManager.cs @@ -69,7 +69,7 @@ private ILocValue FormatNaturalPercent(LocArgs args) var maxDecimals = (int)Math.Floor(((LocValueNumber) args.Args[1]).Value); var formatter = (NumberFormatInfo)NumberFormatInfo.GetInstance(CultureInfo.GetCultureInfo(Culture)).Clone(); formatter.NumberDecimalDigits = maxDecimals; - return new LocValueString(string.Format(formatter, "{0:N}", number).TrimEnd('0').TrimEnd('.') + "%"); + return new LocValueString(string.Format(formatter, "{0:N}", number).TrimEnd('0').TrimEnd(char.Parse(formatter.NumberDecimalSeparator)) + "%"); } private ILocValue FormatNaturalFixed(LocArgs args) @@ -78,7 +78,7 @@ private ILocValue FormatNaturalFixed(LocArgs args) var maxDecimals = (int)Math.Floor(((LocValueNumber) args.Args[1]).Value); var formatter = (NumberFormatInfo)NumberFormatInfo.GetInstance(CultureInfo.GetCultureInfo(Culture)).Clone(); formatter.NumberDecimalDigits = maxDecimals; - return new LocValueString(string.Format(formatter, "{0:N}", number).TrimEnd('0').TrimEnd('.')); + return new LocValueString(string.Format(formatter, "{0:N}", number).TrimEnd('0').TrimEnd(char.Parse(formatter.NumberDecimalSeparator))); } private static readonly Regex PluralEsRule = new("^.*(s|sh|ch|x|z)$"); diff --git a/Content.Shared/Lock/LockComponent.cs b/Content.Shared/Lock/LockComponent.cs index 9606540a74a..e1d47365b7d 100644 --- a/Content.Shared/Lock/LockComponent.cs +++ b/Content.Shared/Lock/LockComponent.cs @@ -14,88 +14,81 @@ namespace Content.Shared.Lock; public sealed partial class LockComponent : Component { /// - /// Whether or not the lock is locked. + /// Whether or not the lock is locked. /// - [DataField("locked"), ViewVariables(VVAccess.ReadWrite)] - [AutoNetworkedField] - public bool Locked = true; + [DataField, AutoNetworkedField] + public bool Locked = true; /// - /// Whether or not the lock is toggled by simply clicking. + /// Whether or not the lock is toggled by simply clicking. /// - [DataField("lockOnClick"), ViewVariables(VVAccess.ReadWrite)] - [AutoNetworkedField] + [DataField, AutoNetworkedField] public bool LockOnClick; /// - /// Whether or not the lock is unlocked by simply clicking. + /// Whether or not the lock is unlocked by simply clicking. /// - [DataField("unlockOnClick"), ViewVariables(VVAccess.ReadWrite)] - [AutoNetworkedField] + [DataField, AutoNetworkedField] public bool UnlockOnClick = true; - /// - /// The sound played when unlocked. + /// The sound played when unlocked. /// - [DataField("unlockingSound"), ViewVariables(VVAccess.ReadWrite)] + [DataField] public SoundSpecifier UnlockSound = new SoundPathSpecifier("/Audio/Machines/door_lock_off.ogg") { Params = AudioParams.Default.WithVolume(-5f), }; /// - /// The sound played when locked. + /// The sound played when locked. /// - [DataField("lockingSound"), ViewVariables(VVAccess.ReadWrite)] + [DataField] public SoundSpecifier LockSound = new SoundPathSpecifier("/Audio/Machines/door_lock_on.ogg") { Params = AudioParams.Default.WithVolume(-5f) }; /// - /// Whether or not an emag disables it. + /// Whether or not an emag disables it. /// - [DataField("breakOnEmag")] - [AutoNetworkedField] + [DataField, AutoNetworkedField] public bool BreakOnEmag = true; /// - /// Amount of do-after time needed to lock the entity. + /// Amount of do-after time needed to lock the entity. /// /// - /// If set to zero, no do-after will be used. + /// If set to zero, no do-after will be used. /// - [DataField] - [AutoNetworkedField] + [DataField, AutoNetworkedField] public TimeSpan LockTime; /// - /// Amount of do-after time needed to unlock the entity. + /// Amount of do-after time needed to unlock the entity. /// /// - /// If set to zero, no do-after will be used. + /// If set to zero, no do-after will be used. /// - [DataField] - [AutoNetworkedField] + [DataField, AutoNetworkedField] public TimeSpan UnlockTime; } /// -/// Event raised on the lock when a toggle is attempted. -/// Can be cancelled to prevent it. +/// Event raised on the lock when a toggle is attempted. +/// Can be cancelled to prevent it. /// [ByRefEvent] public record struct LockToggleAttemptEvent(EntityUid User, bool Silent = false, bool Cancelled = false); /// -/// Event raised on a lock after it has been toggled. +/// Event raised on a lock after it has been toggled. /// [ByRefEvent] public readonly record struct LockToggledEvent(bool Locked); /// -/// Used to lock a lockable entity that has a lock time configured. +/// Used to lock a lockable entity that has a lock time configured. /// /// /// @@ -109,7 +102,7 @@ public override DoAfterEvent Clone() } /// -/// Used to unlock a lockable entity that has an unlock time configured. +/// Used to unlock a lockable entity that has an unlock time configured. /// /// /// diff --git a/Content.Shared/Lock/LockSystem.cs b/Content.Shared/Lock/LockSystem.cs index b74f17b1525..72f623b112a 100644 --- a/Content.Shared/Lock/LockSystem.cs +++ b/Content.Shared/Lock/LockSystem.cs @@ -59,14 +59,14 @@ private void OnActivated(EntityUid uid, LockComponent lockComp, ActivateInWorldE return; // Only attempt an unlock by default on Activate - if (lockComp.Locked) + if (lockComp.Locked && lockComp.UnlockOnClick) { if (!lockComp.UnlockOnClick) return; TryUnlock(uid, args.User, lockComp); args.Handled = true; } - else if (lockComp.LockOnClick) + else if (!lockComp.Locked && lockComp.LockOnClick) { TryLock(uid, args.User, lockComp); args.Handled = true; @@ -204,6 +204,18 @@ public bool TryUnlock(EntityUid uid, EntityUid user, LockComponent? lockComp = n return true; } + /// + /// Returns true if the entity is locked. + /// Entities with no lock component are considered unlocked. + /// + public bool IsLocked(Entity ent) + { + if (!Resolve(ent, ref ent.Comp, false)) + return false; + + return ent.Comp.Locked; + } + /// /// Raises an event for other components to check whether or not /// the entity can be locked in its current state. diff --git a/Content.Shared/Magic/Components/MagicComponent.cs b/Content.Shared/Magic/Components/MagicComponent.cs new file mode 100644 index 00000000000..bcc11063b71 --- /dev/null +++ b/Content.Shared/Magic/Components/MagicComponent.cs @@ -0,0 +1,39 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Magic.Components; + +// TODO: Rename to MagicActionComponent or MagicRequirementsComponent +[RegisterComponent, NetworkedComponent, Access(typeof(SharedMagicSystem))] +public sealed partial class MagicComponent : Component +{ + // TODO: Split into different components? + // This could be the MagicRequirementsComp - which just is requirements for the spell + // Magic comp could be on the actual entities itself + // Could handle lifetime, ignore caster, etc? + // Magic caster comp would be on the caster, used for what I'm not sure + + // TODO: Do After here or in actions + + // TODO: Spell requirements + // A list of requirements to cast the spell + // Hands + // Any item in hand + // Spell takes up an inhand slot + // May be an action toggle or something + + // TODO: List requirements in action desc + /// + /// Does this spell require Wizard Robes & Hat? + /// + [DataField, ViewVariables(VVAccess.ReadWrite)] + public bool RequiresClothes; + + /// + /// Does this spell require the user to speak? + /// + [DataField, ViewVariables(VVAccess.ReadWrite)] + public bool RequiresSpeech; + + // TODO: FreeHand - should check if toggleable action + // Check which hand is free to toggle action in +} diff --git a/Content.Shared/Magic/Components/SpellbookComponent.cs b/Content.Shared/Magic/Components/SpellbookComponent.cs new file mode 100644 index 00000000000..f1b307c245d --- /dev/null +++ b/Content.Shared/Magic/Components/SpellbookComponent.cs @@ -0,0 +1,36 @@ +using Robust.Shared.Prototypes; + +namespace Content.Shared.Magic.Components; + +/// +/// Spellbooks can grant one or more spells to the user. If marked as it will teach +/// the performer the spells and wipe the book. +/// Default behavior requires the book to be held in hand +/// +[RegisterComponent, Access(typeof(SpellbookSystem))] +public sealed partial class SpellbookComponent : Component +{ + /// + /// List of spells that this book has. This is a combination of the WorldSpells, EntitySpells, and InstantSpells. + /// + [ViewVariables] + public readonly List Spells = new(); + + /// + /// The three fields below is just used for initialization. + /// + [DataField] + [ViewVariables(VVAccess.ReadWrite)] + public Dictionary SpellActions = new(); + + [DataField] + [ViewVariables(VVAccess.ReadWrite)] + public float LearnTime = .75f; + + /// + /// If true, the spell action stays even after the book is removed + /// + [DataField] + [ViewVariables(VVAccess.ReadWrite)] + public bool LearnPermanently; +} diff --git a/Content.Shared/Magic/Components/WizardClothesComponent.cs b/Content.Shared/Magic/Components/WizardClothesComponent.cs new file mode 100644 index 00000000000..063cf56c338 --- /dev/null +++ b/Content.Shared/Magic/Components/WizardClothesComponent.cs @@ -0,0 +1,10 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Magic.Components; + +/// +/// The checks this if a spell requires wizard clothes +/// +[RegisterComponent, NetworkedComponent] +[Access(typeof(SharedMagicSystem))] +public sealed partial class WizardClothesComponent : Component; diff --git a/Content.Shared/Magic/Events/BeforeCastSpellEvent.cs b/Content.Shared/Magic/Events/BeforeCastSpellEvent.cs new file mode 100644 index 00000000000..afb5c1f090d --- /dev/null +++ b/Content.Shared/Magic/Events/BeforeCastSpellEvent.cs @@ -0,0 +1,12 @@ +namespace Content.Shared.Magic.Events; + +[ByRefEvent] +public struct BeforeCastSpellEvent(EntityUid performer) +{ + /// + /// The Performer of the event, to check if they meet the requirements. + /// + public EntityUid Performer = performer; + + public bool Cancelled; +} diff --git a/Content.Shared/Magic/Events/ChargeSpellEvent.cs b/Content.Shared/Magic/Events/ChargeSpellEvent.cs new file mode 100644 index 00000000000..8898761ec2a --- /dev/null +++ b/Content.Shared/Magic/Events/ChargeSpellEvent.cs @@ -0,0 +1,18 @@ +using Content.Shared.Actions; + +namespace Content.Shared.Magic.Events; + +/// +/// Adds provided Charge to the held wand +/// +public sealed partial class ChargeSpellEvent : InstantActionEvent, ISpeakSpell +{ + [DataField(required: true)] + public int Charge; + + [DataField] + public string WandTag = "WizardWand"; + + [DataField] + public string? Speech { get; private set; } +} diff --git a/Content.Shared/Magic/Events/InstantSpawnSpellEvent.cs b/Content.Shared/Magic/Events/InstantSpawnSpellEvent.cs index ef8d6898623..1405b158271 100644 --- a/Content.Shared/Magic/Events/InstantSpawnSpellEvent.cs +++ b/Content.Shared/Magic/Events/InstantSpawnSpellEvent.cs @@ -1,6 +1,5 @@ using Content.Shared.Actions; using Robust.Shared.Prototypes; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; namespace Content.Shared.Magic.Events; @@ -9,17 +8,18 @@ public sealed partial class InstantSpawnSpellEvent : InstantActionEvent, ISpeakS /// /// What entity should be spawned. /// - [DataField("prototype", required: true, customTypeSerializer: typeof(PrototypeIdSerializer))] - public string Prototype = default!; + [DataField(required: true)] + public EntProtoId Prototype; - [DataField("preventCollide")] + [DataField] public bool PreventCollideWithCaster = true; - [DataField("speech")] + [DataField] public string? Speech { get; private set; } /// /// Gets the targeted spawn positons; may lead to multiple entities being spawned. /// - [DataField("posData")] public MagicSpawnData Pos = new TargetCasterPos(); + [DataField] + public MagicInstantSpawnData PosData = new TargetCasterPos(); } diff --git a/Content.Shared/Magic/Events/KnockSpellEvent.cs b/Content.Shared/Magic/Events/KnockSpellEvent.cs index a3b0be55759..24a1700d21f 100644 --- a/Content.Shared/Magic/Events/KnockSpellEvent.cs +++ b/Content.Shared/Magic/Events/KnockSpellEvent.cs @@ -1,5 +1,4 @@ using Content.Shared.Actions; -using Robust.Shared.Audio; namespace Content.Shared.Magic.Events; @@ -7,20 +6,12 @@ public sealed partial class KnockSpellEvent : InstantActionEvent, ISpeakSpell { /// /// The range this spell opens doors in - /// 4f is the default + /// 10f is the default + /// Should be able to open all doors/lockers in visible sight /// - [DataField("range")] - public float Range = 4f; + [DataField] + public float Range = 10f; - [DataField("knockSound")] - public SoundSpecifier KnockSound = new SoundPathSpecifier("/Audio/Magic/knock.ogg"); - - /// - /// Volume control for the spell. - /// - [DataField("knockVolume")] - public float KnockVolume = 5f; - - [DataField("speech")] + [DataField] public string? Speech { get; private set; } } diff --git a/Content.Shared/Magic/Events/ProjectileSpellEvent.cs b/Content.Shared/Magic/Events/ProjectileSpellEvent.cs index 44966257699..336ea03346b 100644 --- a/Content.Shared/Magic/Events/ProjectileSpellEvent.cs +++ b/Content.Shared/Magic/Events/ProjectileSpellEvent.cs @@ -1,6 +1,5 @@ using Content.Shared.Actions; using Robust.Shared.Prototypes; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; namespace Content.Shared.Magic.Events; @@ -9,14 +8,9 @@ public sealed partial class ProjectileSpellEvent : WorldTargetActionEvent, ISpea /// /// What entity should be spawned. /// - [DataField("prototype", required: true, customTypeSerializer: typeof(PrototypeIdSerializer))] - public string Prototype = default!; + [DataField(required: true)] + public EntProtoId Prototype; - /// - /// Gets the targeted spawn positions; may lead to multiple entities being spawned. - /// - [DataField("posData")] public MagicSpawnData Pos = new TargetCasterPos(); - - [DataField("speech")] + [DataField] public string? Speech { get; private set; } } diff --git a/Content.Shared/Magic/Events/SmiteSpellEvent.cs b/Content.Shared/Magic/Events/SmiteSpellEvent.cs index 08ec63c05e7..74ca116ad59 100644 --- a/Content.Shared/Magic/Events/SmiteSpellEvent.cs +++ b/Content.Shared/Magic/Events/SmiteSpellEvent.cs @@ -4,12 +4,13 @@ namespace Content.Shared.Magic.Events; public sealed partial class SmiteSpellEvent : EntityTargetActionEvent, ISpeakSpell { + // TODO: Make part of gib method /// - /// Should this smite delete all parts/mechanisms gibbed except for the brain? + /// Should this smite delete all parts/mechanisms gibbed except for the brain? /// - [DataField("deleteNonBrainParts")] + [DataField] public bool DeleteNonBrainParts = true; - [DataField("speech")] + [DataField] public string? Speech { get; private set; } } diff --git a/Content.Shared/Magic/Events/SpeakSpellEvent.cs b/Content.Shared/Magic/Events/SpeakSpellEvent.cs new file mode 100644 index 00000000000..1b3f7af63c3 --- /dev/null +++ b/Content.Shared/Magic/Events/SpeakSpellEvent.cs @@ -0,0 +1,8 @@ +namespace Content.Shared.Magic.Events; + +[ByRefEvent] +public readonly struct SpeakSpellEvent(EntityUid performer, string speech) +{ + public readonly EntityUid Performer = performer; + public readonly string Speech = speech; +} diff --git a/Content.Shared/Magic/Events/TeleportSpellEvent.cs b/Content.Shared/Magic/Events/TeleportSpellEvent.cs index b24f6ec72f7..525c1e51052 100644 --- a/Content.Shared/Magic/Events/TeleportSpellEvent.cs +++ b/Content.Shared/Magic/Events/TeleportSpellEvent.cs @@ -1,19 +1,19 @@ using Content.Shared.Actions; -using Robust.Shared.Audio; namespace Content.Shared.Magic.Events; +// TODO: Can probably just be an entity or something public sealed partial class TeleportSpellEvent : WorldTargetActionEvent, ISpeakSpell { - [DataField("blinkSound")] - public SoundSpecifier BlinkSound = new SoundPathSpecifier("/Audio/Magic/blink.ogg"); - - [DataField("speech")] + [DataField] public string? Speech { get; private set; } + // TODO: Move to magic component + // TODO: Maybe not since sound specifier is a thing + // Keep here to remind what the volume was set as /// /// Volume control for the spell. /// - [DataField("blinkVolume")] + [DataField] public float BlinkVolume = 5f; } diff --git a/Content.Shared/Magic/Events/WorldSpawnSpellEvent.cs b/Content.Shared/Magic/Events/WorldSpawnSpellEvent.cs index 4355cab8421..2f50c67b3e7 100644 --- a/Content.Shared/Magic/Events/WorldSpawnSpellEvent.cs +++ b/Content.Shared/Magic/Events/WorldSpawnSpellEvent.cs @@ -4,29 +4,31 @@ namespace Content.Shared.Magic.Events; +// TODO: This class needs combining with InstantSpawnSpellEvent + public sealed partial class WorldSpawnSpellEvent : WorldTargetActionEvent, ISpeakSpell { - // TODO:This class needs combining with InstantSpawnSpellEvent - /// /// The list of prototypes this spell will spawn /// - [DataField("prototypes")] - public List Contents = new(); + [DataField] + public List Prototypes = new(); // TODO: This offset is liable for deprecation. + // TODO: Target tile via code instead? /// /// The offset the prototypes will spawn in on relative to the one prior. /// Set to 0,0 to have them spawn on the same tile. /// - [DataField("offset")] + [DataField] public Vector2 Offset; /// /// Lifetime to set for the entities to self delete /// - [DataField("lifetime")] public float? Lifetime; + [DataField] + public float? Lifetime; - [DataField("speech")] + [DataField] public string? Speech { get; private set; } } diff --git a/Content.Shared/Magic/MagicInstantSpawnData.cs b/Content.Shared/Magic/MagicInstantSpawnData.cs new file mode 100644 index 00000000000..5dcc1453edc --- /dev/null +++ b/Content.Shared/Magic/MagicInstantSpawnData.cs @@ -0,0 +1,25 @@ +namespace Content.Shared.Magic; + +// TODO: If still needed, move to magic component +[ImplicitDataDefinitionForInheritors] +public abstract partial class MagicInstantSpawnData; + +/// +/// Spawns underneath caster. +/// +public sealed partial class TargetCasterPos : MagicInstantSpawnData; + +/// +/// Spawns 3 tiles wide in front of the caster. +/// +public sealed partial class TargetInFront : MagicInstantSpawnData +{ + [DataField] + public int Width = 3; +} + + +/// +/// Spawns 1 tile in front of caster +/// +public sealed partial class TargetInFrontSingle : MagicInstantSpawnData; diff --git a/Content.Shared/Magic/MagicSpawnData.cs b/Content.Shared/Magic/MagicSpawnData.cs deleted file mode 100644 index cd96d4ad76b..00000000000 --- a/Content.Shared/Magic/MagicSpawnData.cs +++ /dev/null @@ -1,20 +0,0 @@ -namespace Content.Shared.Magic; - -[ImplicitDataDefinitionForInheritors] -public abstract partial class MagicSpawnData -{ - -} - -/// -/// Spawns 1 at the caster's feet. -/// -public sealed partial class TargetCasterPos : MagicSpawnData {} - -/// -/// Targets the 3 tiles in front of the caster. -/// -public sealed partial class TargetInFront : MagicSpawnData -{ - [DataField("width")] public int Width = 3; -} diff --git a/Content.Shared/Magic/SharedMagicSystem.cs b/Content.Shared/Magic/SharedMagicSystem.cs new file mode 100644 index 00000000000..cc7a297aa40 --- /dev/null +++ b/Content.Shared/Magic/SharedMagicSystem.cs @@ -0,0 +1,519 @@ +using System.Numerics; +using Content.Shared.Actions; +using Content.Shared.Body.Components; +using Content.Shared.Body.Systems; +using Content.Shared.Coordinates.Helpers; +using Content.Shared.Doors.Components; +using Content.Shared.Doors.Systems; +using Content.Shared.Hands.Components; +using Content.Shared.Hands.EntitySystems; +using Content.Shared.Interaction; +using Content.Shared.Inventory; +using Content.Shared.Lock; +using Content.Shared.Magic.Components; +using Content.Shared.Magic.Events; +using Content.Shared.Maps; +using Content.Shared.Physics; +using Content.Shared.Popups; +using Content.Shared.Speech.Muting; +using Content.Shared.Storage; +using Content.Shared.Tag; +using Content.Shared.Weapons.Ranged.Components; +using Content.Shared.Weapons.Ranged.Systems; +using Robust.Shared.Map; +using Robust.Shared.Map.Components; +using Robust.Shared.Network; +using Robust.Shared.Physics.Systems; +using Robust.Shared.Random; +using Robust.Shared.Serialization.Manager; +using Robust.Shared.Spawners; + +namespace Content.Shared.Magic; + +/// +/// Handles learning and using spells (actions) +/// +public abstract class SharedMagicSystem : EntitySystem +{ + [Dependency] private readonly ISerializationManager _seriMan = default!; + [Dependency] private readonly IComponentFactory _compFact = default!; + [Dependency] private readonly IMapManager _mapManager = default!; + [Dependency] private readonly SharedMapSystem _mapSystem = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly SharedGunSystem _gunSystem = default!; + [Dependency] private readonly SharedPhysicsSystem _physics = default!; + [Dependency] private readonly SharedTransformSystem _transform = default!; + [Dependency] private readonly INetManager _net = default!; + [Dependency] private readonly SharedBodySystem _body = default!; + [Dependency] private readonly EntityLookupSystem _lookup = default!; + [Dependency] private readonly SharedDoorSystem _door = default!; + [Dependency] private readonly InventorySystem _inventory = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] private readonly SharedInteractionSystem _interaction = default!; + [Dependency] private readonly LockSystem _lock = default!; + [Dependency] private readonly SharedHandsSystem _hands = default!; + [Dependency] private readonly TagSystem _tag = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnBeforeCastSpell); + + SubscribeLocalEvent(OnInstantSpawn); + SubscribeLocalEvent(OnTeleportSpell); + SubscribeLocalEvent(OnWorldSpawn); + SubscribeLocalEvent(OnProjectileSpell); + SubscribeLocalEvent(OnChangeComponentsSpell); + SubscribeLocalEvent(OnSmiteSpell); + SubscribeLocalEvent(OnKnockSpell); + SubscribeLocalEvent(OnChargeSpell); + + // Spell wishlist + // A wishlish of spells that I'd like to implement or planning on implementing in a future PR + + // TODO: InstantDoAfterSpell and WorldDoafterSpell + // Both would be an action that take in an event, that passes an event to trigger once the doafter is done + // This would be three events: + // 1 - Event that triggers from the action that starts the doafter + // 2 - The doafter event itself, which passes the event with it + // 3 - The event to trigger once the do-after finishes + + // TODO: Inanimate objects to life ECS + // AI sentience + + // TODO: Flesh2Stone + // Entity Target spell + // Synergy with Inanimate object to life (detects player and allows player to move around) + + // TODO: Lightning Spell + // Should just fire lightning, try to prevent arc back to caster + + // TODO: Magic Missile (homing projectile ecs) + // Instant action, target any player (except self) on screen + + // TODO: Random projectile ECS for magic-carp, wand of magic + + // TODO: Recall Spell + // mark any item in hand to recall + // ItemRecallComponent + // Event adds the component if it doesn't exist and the performer isn't stored in the comp + // 2nd firing of the event checks to see if the recall comp has this uid, and if it does it calls it + // if no free hands, summon at feet + // if item deleted, clear stored item + + // TODO: Jaunt (should be its own ECS) + // Instant action + // When clicked, disappear/reappear (goes to paused map) + // option to restrict to tiles + // option for requiring entry/exit (blood jaunt) + // speed option + + // TODO: Summon Events + // List of wizard events to add into the event pool that frequently activate + // floor is lava + // change places + // ECS that when triggered, will periodically trigger a random GameRule + // Would need a controller/controller entity? + + // TODO: Summon Guns + // Summon a random gun at peoples feet + // Get every alive player (not in cryo, not a simplemob) + // TODO: After Antag Rework - Rare chance of giving gun collector status to people + + // TODO: Summon Magic + // Summon a random magic wand at peoples feet + // Get every alive player (not in cryo, not a simplemob) + // TODO: After Antag Rework - Rare chance of giving magic collector status to people + + // TODO: Bottle of Blood + // Summons Slaughter Demon + // TODO: Slaughter Demon + // Also see Jaunt + + // TODO: Field Spells + // Should be able to specify a grid of tiles (3x3 for example) that it effects + // Timed despawn - so it doesn't last forever + // Ignore caster - for spells that shouldn't effect the caster (ie if timestop should effect the caster) + + // TODO: Touch toggle spell + // 1 - When toggled on, show in hand + // 2 - Block hand when toggled on + // - Require free hand + // 3 - use spell event when toggled & click + } + + private void OnBeforeCastSpell(Entity ent, ref BeforeCastSpellEvent args) + { + var comp = ent.Comp; + var hasReqs = true; + + if (comp.RequiresClothes) + { + var enumerator = _inventory.GetSlotEnumerator(args.Performer, SlotFlags.OUTERCLOTHING | SlotFlags.HEAD); + while (enumerator.MoveNext(out var containerSlot)) + { + if (containerSlot.ContainedEntity is { } item) + hasReqs = HasComp(item); + else + hasReqs = false; + + if (!hasReqs) + break; + } + } + + if (comp.RequiresSpeech && HasComp(args.Performer)) + hasReqs = false; + + if (hasReqs) + return; + + args.Cancelled = true; + _popup.PopupClient(Loc.GetString("spell-requirements-failed"), args.Performer, args.Performer); + + // TODO: Pre-cast do after, either here or in SharedActionsSystem + } + + private bool PassesSpellPrerequisites(EntityUid spell, EntityUid performer) + { + var ev = new BeforeCastSpellEvent(performer); + RaiseLocalEvent(spell, ref ev); + return !ev.Cancelled; + } + + #region Spells + #region Instant Spawn Spells + /// + /// Handles the instant action (i.e. on the caster) attempting to spawn an entity. + /// + private void OnInstantSpawn(InstantSpawnSpellEvent args) + { + if (args.Handled || !PassesSpellPrerequisites(args.Action, args.Performer)) + return; + + var transform = Transform(args.Performer); + + foreach (var position in GetInstantSpawnPositions(transform, args.PosData)) + { + SpawnSpellHelper(args.Prototype, position, args.Performer, preventCollide: args.PreventCollideWithCaster); + } + + Speak(args); + args.Handled = true; + } + + /// + /// Gets spawn positions listed on + /// + /// + private List GetInstantSpawnPositions(TransformComponent casterXform, MagicInstantSpawnData data) + { + switch (data) + { + case TargetCasterPos: + return new List(1) {casterXform.Coordinates}; + case TargetInFrontSingle: + { + var directionPos = casterXform.Coordinates.Offset(casterXform.LocalRotation.ToWorldVec().Normalized()); + + if (!TryComp(casterXform.GridUid, out var mapGrid)) + return new List(); + if (!directionPos.TryGetTileRef(out var tileReference, EntityManager, _mapManager)) + return new List(); + + var tileIndex = tileReference.Value.GridIndices; + return new List(1) { _mapSystem.GridTileToLocal(casterXform.GridUid.Value, mapGrid, tileIndex) }; + } + case TargetInFront: + { + var directionPos = casterXform.Coordinates.Offset(casterXform.LocalRotation.ToWorldVec().Normalized()); + + if (!TryComp(casterXform.GridUid, out var mapGrid)) + return new List(); + + if (!directionPos.TryGetTileRef(out var tileReference, EntityManager, _mapManager)) + return new List(); + + var tileIndex = tileReference.Value.GridIndices; + var coords = _mapSystem.GridTileToLocal(casterXform.GridUid.Value, mapGrid, tileIndex); + EntityCoordinates coordsPlus; + EntityCoordinates coordsMinus; + + var dir = casterXform.LocalRotation.GetCardinalDir(); + switch (dir) + { + case Direction.North: + case Direction.South: + { + coordsPlus = _mapSystem.GridTileToLocal(casterXform.GridUid.Value, mapGrid, tileIndex + (1, 0)); + coordsMinus = _mapSystem.GridTileToLocal(casterXform.GridUid.Value, mapGrid, tileIndex + (-1, 0)); + return new List(3) + { + coords, + coordsPlus, + coordsMinus, + }; + } + case Direction.East: + case Direction.West: + { + coordsPlus = _mapSystem.GridTileToLocal(casterXform.GridUid.Value, mapGrid, tileIndex + (0, 1)); + coordsMinus = _mapSystem.GridTileToLocal(casterXform.GridUid.Value, mapGrid, tileIndex + (0, -1)); + return new List(3) + { + coords, + coordsPlus, + coordsMinus, + }; + } + } + + return new List(); + } + default: + throw new ArgumentOutOfRangeException(); + } + } + // End Instant Spawn Spells + #endregion + #region World Spawn Spells + /// + /// Spawns entities from a list within range of click. + /// + /// + /// It will offset entities after the first entity based on the OffsetVector2. + /// + /// The Spawn Spell Event args. + private void OnWorldSpawn(WorldSpawnSpellEvent args) + { + if (args.Handled || !PassesSpellPrerequisites(args.Action, args.Performer)) + return; + + var targetMapCoords = args.Target; + + WorldSpawnSpellHelper(args.Prototypes, targetMapCoords, args.Performer, args.Lifetime, args.Offset); + Speak(args); + args.Handled = true; + } + + /// + /// Loops through a supplied list of entity prototypes and spawns them + /// + /// + /// If an offset of 0, 0 is supplied then the entities will all spawn on the same tile. + /// Any other offset will spawn entities starting from the source Map Coordinates and will increment the supplied + /// offset + /// + /// The list of Entities to spawn in + /// Map Coordinates where the entities will spawn + /// Check to see if the entities should self delete + /// A Vector2 offset that the entities will spawn in + private void WorldSpawnSpellHelper(List entityEntries, EntityCoordinates entityCoords, EntityUid performer, float? lifetime, Vector2 offsetVector2) + { + var getProtos = EntitySpawnCollection.GetSpawns(entityEntries, _random); + + var offsetCoords = entityCoords; + foreach (var proto in getProtos) + { + SpawnSpellHelper(proto, offsetCoords, performer, lifetime); + offsetCoords = offsetCoords.Offset(offsetVector2); + } + } + // End World Spawn Spells + #endregion + #region Projectile Spells + private void OnProjectileSpell(ProjectileSpellEvent ev) + { + if (ev.Handled || !PassesSpellPrerequisites(ev.Action, ev.Performer) || !_net.IsServer) + return; + + ev.Handled = true; + Speak(ev); + + var xform = Transform(ev.Performer); + var fromCoords = xform.Coordinates; + var toCoords = ev.Target; + var userVelocity = _physics.GetMapLinearVelocity(ev.Performer); + + // If applicable, this ensures the projectile is parented to grid on spawn, instead of the map. + var fromMap = fromCoords.ToMap(EntityManager, _transform); + var spawnCoords = _mapManager.TryFindGridAt(fromMap, out var gridUid, out _) + ? fromCoords.WithEntityId(gridUid, EntityManager) + : new(_mapManager.GetMapEntityId(fromMap.MapId), fromMap.Position); + + 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); + } + // End Projectile Spells + #endregion + #region Change Component Spells + // staves.yml ActionRGB light + private void OnChangeComponentsSpell(ChangeComponentsSpellEvent ev) + { + if (ev.Handled || !PassesSpellPrerequisites(ev.Action, ev.Performer)) + return; + + ev.Handled = true; + Speak(ev); + + foreach (var toRemove in ev.ToRemove) + { + if (_compFact.TryGetRegistration(toRemove, out var registration)) + RemComp(ev.Target, registration.Type); + } + + foreach (var (name, data) in ev.ToAdd) + { + if (HasComp(ev.Target, data.Component.GetType())) + continue; + + var component = (Component) _compFact.GetComponent(name); + component.Owner = ev.Target; + var temp = (object) component; + _seriMan.CopyTo(data.Component, ref temp); + EntityManager.AddComponent(ev.Target, (Component) temp!); + } + } + // End Change Component Spells + #endregion + #region Teleport Spells + // TODO: Rename to teleport clicked spell? + /// + /// Teleports the user to the clicked location + /// + /// + private void OnTeleportSpell(TeleportSpellEvent args) + { + if (args.Handled || !PassesSpellPrerequisites(args.Action, args.Performer)) + return; + + var transform = Transform(args.Performer); + + if (transform.MapID != args.Target.GetMapId(EntityManager) || !_interaction.InRangeUnobstructed(args.Performer, args.Target, range: 1000F, collisionMask: CollisionGroup.Opaque, popup: true)) + return; + + _transform.SetCoordinates(args.Performer, args.Target); + _transform.AttachToGridOrMap(args.Performer, transform); + Speak(args); + args.Handled = true; + } + // End Teleport Spells + #endregion + #region Spell Helpers + private void SpawnSpellHelper(string? proto, EntityCoordinates position, EntityUid performer, float? lifetime = null, bool preventCollide = false) + { + if (!_net.IsServer) + return; + + var ent = Spawn(proto, position.SnapToGrid(EntityManager, _mapManager)); + + if (lifetime != null) + { + var comp = EnsureComp(ent); + comp.Lifetime = lifetime.Value; + } + + if (preventCollide) + { + var comp = EnsureComp(ent); + comp.Uid = performer; + } + } + // End Spell Helpers + #endregion + #region Smite Spells + private void OnSmiteSpell(SmiteSpellEvent ev) + { + if (ev.Handled || !PassesSpellPrerequisites(ev.Action, ev.Performer)) + return; + + ev.Handled = true; + Speak(ev); + + var direction = _transform.GetMapCoordinates(ev.Target, Transform(ev.Target)).Position - _transform.GetMapCoordinates(ev.Performer, Transform(ev.Performer)).Position; + var impulseVector = direction * 10000; + + _physics.ApplyLinearImpulse(ev.Target, impulseVector); + + if (!TryComp(ev.Target, out var body)) + return; + + _body.GibBody(ev.Target, true, body); + } + // End Smite Spells + #endregion + #region Knock Spells + /// + /// Opens all doors and locks within range + /// + /// + private void OnKnockSpell(KnockSpellEvent args) + { + if (args.Handled || !PassesSpellPrerequisites(args.Action, args.Performer)) + return; + + args.Handled = true; + Speak(args); + + var transform = Transform(args.Performer); + + // Look for doors and lockers, and don't open/unlock them if they're already opened/unlocked. + foreach (var target in _lookup.GetEntitiesInRange(_transform.GetMapCoordinates(args.Performer, transform), args.Range, flags: LookupFlags.Dynamic | LookupFlags.Static)) + { + if (!_interaction.InRangeUnobstructed(args.Performer, target, range: 0, collisionMask: CollisionGroup.Opaque)) + continue; + + if (TryComp(target, out var doorBoltComp) && doorBoltComp.BoltsDown) + _door.SetBoltsDown((target, doorBoltComp), false, predicted: true); + + if (TryComp(target, out var doorComp) && doorComp.State is not DoorState.Open) + _door.StartOpening(target); + + if (TryComp(target, out var lockComp) && lockComp.Locked) + _lock.Unlock(target, args.Performer, lockComp); + } + } + // End Knock Spells + #endregion + #region Charge Spells + // TODO: Future support to charge other items + private void OnChargeSpell(ChargeSpellEvent ev) + { + if (ev.Handled || !PassesSpellPrerequisites(ev.Action, ev.Performer) || !TryComp(ev.Performer, out var handsComp)) + return; + + EntityUid? wand = null; + foreach (var item in _hands.EnumerateHeld(ev.Performer, handsComp)) + { + if (!_tag.HasTag(item, ev.WandTag)) + continue; + + wand = item; + } + + ev.Handled = true; + Speak(ev); + + if (wand == null || !TryComp(wand, out var basicAmmoComp) || basicAmmoComp.Count == null) + return; + + _gunSystem.UpdateBasicEntityAmmoCount(wand.Value, basicAmmoComp.Count.Value + ev.Charge, basicAmmoComp); + } + // End Charge Spells + #endregion + // End Spells + #endregion + + // When any spell is cast it will raise this as an event, so then it can be played in server or something. At least until chat gets moved to shared + // TODO: Temp until chat is in shared + private void Speak(BaseActionEvent args) + { + if (args is not ISpeakSpell speak || string.IsNullOrWhiteSpace(speak.Speech)) + return; + + var ev = new SpeakSpellEvent(args.Performer, speak.Speech); + RaiseLocalEvent(ref ev); + } +} diff --git a/Content.Shared/Magic/SpellbookSystem.cs b/Content.Shared/Magic/SpellbookSystem.cs new file mode 100644 index 00000000000..a7c82746249 --- /dev/null +++ b/Content.Shared/Magic/SpellbookSystem.cs @@ -0,0 +1,98 @@ +using Content.Shared.Actions; +using Content.Shared.DoAfter; +using Content.Shared.Interaction.Events; +using Content.Shared.Magic.Components; +using Content.Shared.Mind; +using Robust.Shared.Network; + +namespace Content.Shared.Magic; + +public sealed class SpellbookSystem : EntitySystem +{ + [Dependency] private readonly SharedMindSystem _mind = default!; + [Dependency] private readonly SharedDoAfterSystem _doAfter = default!; + [Dependency] private readonly SharedActionsSystem _actions = default!; + [Dependency] private readonly ActionContainerSystem _actionContainer = default!; + [Dependency] private readonly INetManager _netManager = default!; + + public override void Initialize() + { + SubscribeLocalEvent(OnInit, before: [typeof(SharedMagicSystem)]); + SubscribeLocalEvent(OnUse); + SubscribeLocalEvent(OnDoAfter); + } + + private void OnInit(Entity ent, ref MapInitEvent args) + { + foreach (var (id, charges) in ent.Comp.SpellActions) + { + var spell = _actionContainer.AddAction(ent, id); + if (spell == null) + continue; + + int? charge = charges; + if (_actions.GetCharges(spell) != null) + charge = _actions.GetCharges(spell); + + _actions.SetCharges(spell, charge < 0 ? null : charge); + ent.Comp.Spells.Add(spell.Value); + } + } + + private void OnUse(Entity ent, ref UseInHandEvent args) + { + if (args.Handled) + return; + + AttemptLearn(ent, args); + + args.Handled = true; + } + + private void OnDoAfter(Entity ent, ref T args) where T : DoAfterEvent // Sometimes i despise this language + { + if (args.Handled || args.Cancelled) + return; + + args.Handled = true; + + if (!ent.Comp.LearnPermanently) + { + _actions.GrantActions(args.Args.User, ent.Comp.Spells, ent); + return; + } + + if (_mind.TryGetMind(args.Args.User, out var mindId, out _)) + { + var mindActionContainerComp = EnsureComp(mindId); + + if (_netManager.IsServer) + _actionContainer.TransferAllActionsWithNewAttached(ent, mindId, args.Args.User, newContainer: mindActionContainerComp); + } + else + { + foreach (var (id, charges) in ent.Comp.SpellActions) + { + EntityUid? actionId = null; + if (_actions.AddAction(args.Args.User, ref actionId, id)) + _actions.SetCharges(actionId, charges < 0 ? null : charges); + } + } + + ent.Comp.SpellActions.Clear(); + } + + private void AttemptLearn(Entity ent, UseInHandEvent args) + { + var doAfterEventArgs = new DoAfterArgs(EntityManager, args.User, ent.Comp.LearnTime, new SpellbookDoAfterEvent(), ent, target: ent) + { + BreakOnTargetMove = true, + BreakOnUserMove = true, + BreakOnWeightlessMove = true, + BreakOnDamage = true, + NeedHand = true, // What, are you going to read with your eyes only?? + }; + + _doAfter.TryStartDoAfter(doAfterEventArgs); + } +} diff --git a/Content.Server/MagicMirror/MagicMirrorComponent.cs b/Content.Shared/MagicMirror/MagicMirrorComponent.cs similarity index 89% rename from Content.Server/MagicMirror/MagicMirrorComponent.cs rename to Content.Shared/MagicMirror/MagicMirrorComponent.cs index 624a381ca58..63575439052 100644 --- a/Content.Server/MagicMirror/MagicMirrorComponent.cs +++ b/Content.Shared/MagicMirror/MagicMirrorComponent.cs @@ -1,13 +1,13 @@ using Content.Shared.DoAfter; -using Content.Shared.Humanoid; using Robust.Shared.Audio; +using Robust.Shared.GameStates; -namespace Content.Server.MagicMirror; +namespace Content.Shared.MagicMirror; /// /// Allows humanoids to change their appearance mid-round. /// -[RegisterComponent] +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] public sealed partial class MagicMirrorComponent : Component { [DataField] @@ -16,7 +16,7 @@ public sealed partial class MagicMirrorComponent : Component /// /// Magic mirror target, used for validating UI messages. /// - [DataField] + [DataField, AutoNetworkedField] public EntityUid? Target; /// diff --git a/Content.Shared/MagicMirror/SharedMagicMirrorSystem.cs b/Content.Shared/MagicMirror/SharedMagicMirrorSystem.cs index 0b22e024982..ea5838a723e 100644 --- a/Content.Shared/MagicMirror/SharedMagicMirrorSystem.cs +++ b/Content.Shared/MagicMirror/SharedMagicMirrorSystem.cs @@ -1,10 +1,33 @@ using Content.Shared.DoAfter; using Content.Shared.Humanoid.Markings; -using Robust.Shared.Player; +using Content.Shared.Interaction; using Robust.Shared.Serialization; +using Robust.Shared.Utility; namespace Content.Shared.MagicMirror; +public abstract class SharedMagicMirrorSystem : EntitySystem +{ + [Dependency] private readonly SharedInteractionSystem _interaction = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnMirrorRangeCheck); + } + + private void OnMirrorRangeCheck(EntityUid uid, MagicMirrorComponent component, ref BoundUserInterfaceCheckRangeEvent args) + { + if (args.Result == BoundUserInterfaceRangeResult.Fail) + return; + + DebugTools.Assert(component.Target != null && Exists(component.Target)); + + if (!_interaction.InRangeUnobstructed(uid, component.Target.Value)) + args.Result = BoundUserInterfaceRangeResult.Fail; + } +} + [Serializable, NetSerializable] public enum MagicMirrorUiKey : byte { diff --git a/Content.Shared/Maps/TurfSystem.cs b/Content.Shared/Maps/TurfSystem.cs index ad8b3ddea8d..8a4bbf68bed 100644 --- a/Content.Shared/Maps/TurfSystem.cs +++ b/Content.Shared/Maps/TurfSystem.cs @@ -44,7 +44,7 @@ public bool IsTileBlocked(EntityUid gridUid, var size = grid.TileSize; var localPos = new Vector2(indices.X * size + (size / 2f), indices.Y * size + (size / 2f)); - var worldPos = matrix.Transform(localPos); + var worldPos = Vector2.Transform(localPos, matrix); // This is scaled to 95 % so it doesn't encompass walls on other tiles. var tileAabb = Box2.UnitCentered.Scale(0.95f * size); diff --git a/Content.Shared/Materials/MaterialReclaimerComponent.cs b/Content.Shared/Materials/MaterialReclaimerComponent.cs index 3e72baf6041..2fd6cd6fc82 100644 --- a/Content.Shared/Materials/MaterialReclaimerComponent.cs +++ b/Content.Shared/Materials/MaterialReclaimerComponent.cs @@ -1,100 +1,121 @@ -using Content.Shared.Whitelist; +using Content.Shared.Construction.Prototypes; +using Content.Shared.Whitelist; using Robust.Shared.Audio; using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; using Robust.Shared.Serialization; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; namespace Content.Shared.Materials; /// -/// This is a machine that handles converting entities -/// into the raw materials and chemicals that make them up. +/// This is a machine that handles converting entities +/// into the raw materials and chemicals that make them up. /// [RegisterComponent, NetworkedComponent, AutoGenerateComponentState, AutoGenerateComponentPause] [Access(typeof(SharedMaterialReclaimerSystem))] public sealed partial class MaterialReclaimerComponent : Component { /// - /// Whether or not the machine has power. We put it here - /// so we can network and predict it. + /// Whether or not the machine has power. We put it here + /// so we can network and predict it. /// - [DataField, AutoNetworkedField, ViewVariables(VVAccess.ReadWrite)] + [DataField, AutoNetworkedField] public bool Powered; /// - /// An "enable" toggle for things like interfacing with machine linking + /// An "enable" toggle for things like interfacing with machine linking /// - [DataField, AutoNetworkedField, ViewVariables(VVAccess.ReadWrite)] + [DataField, AutoNetworkedField] public bool Enabled = true; /// - /// How efficiently the materials are reclaimed. - /// In practice, a multiplier per material when calculating the output of the reclaimer. + /// How efficiently the materials are reclaimed. + /// In practice, a multiplier per material when calculating the output of the reclaimer. /// - [DataField, ViewVariables(VVAccess.ReadWrite)] + [DataField] public float Efficiency = 1f; /// - /// Whether or not the process - /// speed scales with the amount of materials being processed - /// or if it's just + /// Whether or not the process + /// speed scales with the amount of materials being processed + /// or if it's just /// [DataField] public bool ScaleProcessSpeed = true; /// - /// How quickly it takes to consume X amount of materials per second. - /// For example, with a rate of 50, an entity with 100 total material takes 2 seconds to process. + /// How quickly it takes to consume X amount of materials per second. + /// For example, with a rate of 50, an entity with 100 total material takes 2 seconds to process. /// - [DataField, AutoNetworkedField, ViewVariables(VVAccess.ReadWrite)] + [DataField] + public float BaseMaterialProcessRate = 100f; + + /// + /// How quickly it takes to consume X amount of materials per second. + /// For example, with a rate of 50, an entity with 100 total material takes 2 seconds to process. + /// + [DataField, AutoNetworkedField] public float MaterialProcessRate = 100f; /// - /// The minimum amount fo time it can take to process an entity. - /// this value supercedes the calculated one using + /// Machine part whose rating modifies + /// + [DataField] + public ProtoId MachinePartProcessRate = "Manipulator"; + + /// + /// How much the machine part quality affects the /// - [DataField, ViewVariables(VVAccess.ReadWrite)] + [DataField] + public float PartRatingProcessRateMultiplier = 1.5f; + + /// + /// The minimum amount fo time it can take to process an entity. + /// this value supercedes the calculated one using + /// + [DataField] public TimeSpan MinimumProcessDuration = TimeSpan.FromSeconds(0.5f); /// - /// The id of our output solution + /// The id of our output solution /// - [DataField, ViewVariables(VVAccess.ReadWrite)] + [DataField] public string SolutionContainerId = "output"; /// - /// a whitelist for what entities can be inserted into this reclaimer + /// a whitelist for what entities can be inserted into this reclaimer /// [DataField] public EntityWhitelist? Whitelist; /// - /// a blacklist for what entities cannot be inserted into this reclaimer + /// a blacklist for what entities cannot be inserted into this reclaimer /// [DataField] public EntityWhitelist? Blacklist; /// - /// The sound played when something is being processed. + /// The sound played when something is being processed. /// [DataField] public SoundSpecifier? Sound; /// - /// whether or not we cut off the sound early when the reclaiming ends. + /// whether or not we cut off the sound early when the reclaiming ends. /// [DataField] public bool CutOffSound = true; /// - /// When the next sound will be allowed to be played. Used to prevent spam. + /// When the next sound will be allowed to be played. Used to prevent spam. /// [DataField(customTypeSerializer: typeof(TimeOffsetSerializer))] [AutoPausedField] public TimeSpan NextSound; /// - /// Minimum time inbetween each + /// Minimum time inbetween each /// [DataField] public TimeSpan SoundCooldown = TimeSpan.FromSeconds(0.8f); @@ -102,10 +123,10 @@ public sealed partial class MaterialReclaimerComponent : Component public EntityUid? Stream; /// - /// A counter of how many items have been processed + /// A counter of how many items have been processed /// /// - /// I saw this on the recycler and i'm porting it because it's cute af + /// I saw this on the recycler and i'm porting it because it's cute af /// [DataField, AutoNetworkedField] public int ItemsProcessed; diff --git a/Content.Shared/MedicalScanner/HealthAnalyzerScannedUserMessage.cs b/Content.Shared/MedicalScanner/HealthAnalyzerScannedUserMessage.cs index 78f26ed5c02..08af1a36a7b 100644 --- a/Content.Shared/MedicalScanner/HealthAnalyzerScannedUserMessage.cs +++ b/Content.Shared/MedicalScanner/HealthAnalyzerScannedUserMessage.cs @@ -13,14 +13,16 @@ public sealed class HealthAnalyzerScannedUserMessage : BoundUserInterfaceMessage public float BloodLevel; public bool? ScanMode; public bool? Bleeding; + public bool? Unrevivable; - public HealthAnalyzerScannedUserMessage(NetEntity? targetEntity, float temperature, float bloodLevel, bool? scanMode, bool? bleeding) + public HealthAnalyzerScannedUserMessage(NetEntity? targetEntity, float temperature, float bloodLevel, bool? scanMode, bool? bleeding, bool? unrevivable) { TargetEntity = targetEntity; Temperature = temperature; BloodLevel = bloodLevel; ScanMode = scanMode; Bleeding = bleeding; + Unrevivable = unrevivable; } } diff --git a/Content.Shared/Mind/SharedMindSystem.cs b/Content.Shared/Mind/SharedMindSystem.cs index 1898126d803..7887b8f9b22 100644 --- a/Content.Shared/Mind/SharedMindSystem.cs +++ b/Content.Shared/Mind/SharedMindSystem.cs @@ -383,6 +383,30 @@ public bool TryGetObjectiveComp(EntityUid mindId, [NotNullWhen(true)] out T? return false; } + /// + /// Tries to find an objective that has the same prototype as the argument. + /// + /// + /// Will not work for objectives that have no prototype, or duplicate objectives with the same prototype. + /// + public bool TryFindObjective(Entity mind, string prototype, [NotNullWhen(true)] out EntityUid? objective) + { + objective = null; + if (!Resolve(mind, ref mind.Comp)) + return false; + + foreach (var uid in mind.Comp.Objectives) + { + if (MetaData(uid).EntityPrototype?.ID == prototype) + { + objective = uid; + return true; + } + } + + return false; + } + public bool TryGetSession(EntityUid? mindId, [NotNullWhen(true)] out ICommonSession? session) { session = null; diff --git a/Content.Shared/Mobs/Components/MobStateComponent.cs b/Content.Shared/Mobs/Components/MobStateComponent.cs index a2ff349e133..7cff0779cbe 100644 --- a/Content.Shared/Mobs/Components/MobStateComponent.cs +++ b/Content.Shared/Mobs/Components/MobStateComponent.cs @@ -13,30 +13,21 @@ namespace Content.Shared.Mobs.Components /// [RegisterComponent] [NetworkedComponent] + [AutoGenerateComponentState] [Access(typeof(MobStateSystem), typeof(MobThresholdSystem))] public sealed partial class MobStateComponent : Component { //default mobstate is always the lowest state level - [ViewVariables] public MobState CurrentState { get; set; } = MobState.Alive; + [AutoNetworkedField, ViewVariables] + public MobState CurrentState { get; set; } = MobState.Alive; - [DataField("allowedStates")] public HashSet AllowedStates = new() + [DataField] + [AutoNetworkedField] + public HashSet AllowedStates = new() { MobState.Alive, MobState.Critical, MobState.Dead }; } - - [Serializable, NetSerializable] - public sealed class MobStateComponentState : ComponentState - { - public readonly MobState CurrentState; - public readonly HashSet AllowedStates; - - public MobStateComponentState(MobState currentState, HashSet allowedStates) - { - CurrentState = currentState; - AllowedStates = allowedStates; - } - } } diff --git a/Content.Shared/Mobs/Systems/MobStateSystem.Subscribers.cs b/Content.Shared/Mobs/Systems/MobStateSystem.Subscribers.cs index 08b351e61e8..d9ef671afe2 100644 --- a/Content.Shared/Mobs/Systems/MobStateSystem.Subscribers.cs +++ b/Content.Shared/Mobs/Systems/MobStateSystem.Subscribers.cs @@ -90,12 +90,12 @@ private void OnStateEnteredSubscribers(EntityUid target, MobStateComponent compo _appearance.SetData(target, MobStateVisuals.State, MobState.Alive); break; case MobState.Critical: - _standing.Down(target); + _standing.Down(target, setDrawDepth: true); _appearance.SetData(target, MobStateVisuals.State, MobState.Critical); break; case MobState.Dead: EnsureComp(target); - _standing.Down(target); + _standing.Down(target, setDrawDepth: true); if (_standing.IsDown(target) && TryComp(target, out var physics)) { diff --git a/Content.Shared/Mobs/Systems/MobStateSystem.cs b/Content.Shared/Mobs/Systems/MobStateSystem.cs index ff54c30aaf4..a3886dd42e1 100644 --- a/Content.Shared/Mobs/Systems/MobStateSystem.cs +++ b/Content.Shared/Mobs/Systems/MobStateSystem.cs @@ -25,8 +25,6 @@ public override void Initialize() _sawmill = _logManager.GetSawmill("MobState"); base.Initialize(); SubscribeEvents(); - SubscribeLocalEvent(OnGetComponentState); - SubscribeLocalEvent(OnHandleComponentState); } #region Public API @@ -100,24 +98,5 @@ public bool IsInvalidState(EntityUid target, MobStateComponent? component = null #region Private Implementation - private void OnHandleComponentState(EntityUid uid, MobStateComponent component, ref ComponentHandleState args) - { - if (args.Current is not MobStateComponentState state) - return; - - component.CurrentState = state.CurrentState; - - if (!component.AllowedStates.SetEquals(state.AllowedStates)) - { - component.AllowedStates.Clear(); - component.AllowedStates.UnionWith(state.AllowedStates); - } - } - - private void OnGetComponentState(EntityUid uid, MobStateComponent component, ref ComponentGetState args) - { - args.State = new MobStateComponentState(component.CurrentState, component.AllowedStates); - } - #endregion } diff --git a/Content.Shared/Mood/MoodCategoryPrototype.cs b/Content.Shared/Mood/MoodCategoryPrototype.cs index 13d5f8b7ea6..d5bcd707c82 100644 --- a/Content.Shared/Mood/MoodCategoryPrototype.cs +++ b/Content.Shared/Mood/MoodCategoryPrototype.cs @@ -6,7 +6,7 @@ namespace Content.Shared.Mood; /// A prototype defining a category for moodlets, where only a single moodlet of a given category is permitted. /// [Prototype] -public sealed class MoodCategoryPrototype : IPrototype +public sealed partial class MoodCategoryPrototype : IPrototype { [IdDataField] public string ID { get; } = default!; diff --git a/Content.Shared/Mood/MoodEffectPrototype.cs b/Content.Shared/Mood/MoodEffectPrototype.cs index ab9bca01602..da9d178510f 100644 --- a/Content.Shared/Mood/MoodEffectPrototype.cs +++ b/Content.Shared/Mood/MoodEffectPrototype.cs @@ -3,7 +3,7 @@ namespace Content.Shared.Mood; [Prototype] -public sealed class MoodEffectPrototype : IPrototype +public sealed partial class MoodEffectPrototype : IPrototype { /// /// The ID of the moodlet to use. diff --git a/Content.Shared/MouseRotator/MouseRotatorComponent.cs b/Content.Shared/MouseRotator/MouseRotatorComponent.cs index a35dfe0a288..2844b3cb8b5 100644 --- a/Content.Shared/MouseRotator/MouseRotatorComponent.cs +++ b/Content.Shared/MouseRotator/MouseRotatorComponent.cs @@ -30,8 +30,7 @@ public sealed partial class MouseRotatorComponent : Component public double RotationSpeed = float.MaxValue; /// - /// This one is important. If this is true, does not apply, and the system will - /// use instead. In this mode, the client will only send + /// This one is important. If this is true, does not apply. In this mode, the client will only send /// events when an entity should snap to a different cardinal direction, rather than for every angle change. /// /// This is useful for cases like humans, where what really matters is the visual sprite direction, as opposed to something @@ -50,13 +49,3 @@ public sealed class RequestMouseRotatorRotationEvent : EntityEventArgs { public Angle Rotation; } - -/// -/// Simpler version of for implementations -/// that only require snapping to 4-dir and not full angle rotation. -/// -[Serializable, NetSerializable] -public sealed class RequestMouseRotatorRotationSimpleEvent : EntityEventArgs -{ - public Direction Direction; -} diff --git a/Content.Shared/MouseRotator/SharedMouseRotatorSystem.cs b/Content.Shared/MouseRotator/SharedMouseRotatorSystem.cs index c57d477bd2f..9663b3363d1 100644 --- a/Content.Shared/MouseRotator/SharedMouseRotatorSystem.cs +++ b/Content.Shared/MouseRotator/SharedMouseRotatorSystem.cs @@ -1,5 +1,4 @@ using Content.Shared.Interaction; -using Robust.Shared.Timing; namespace Content.Shared.MouseRotator; @@ -16,7 +15,6 @@ public override void Initialize() base.Initialize(); SubscribeAllEvent(OnRequestRotation); - SubscribeAllEvent(OnRequestSimpleRotation); } public override void Update(float frameTime) @@ -50,7 +48,7 @@ public override void Update(float frameTime) private void OnRequestRotation(RequestMouseRotatorRotationEvent msg, EntitySessionEventArgs args) { if (args.SenderSession.AttachedEntity is not { } ent - || !TryComp(ent, out var rotator) || rotator.Simple4DirMode) + || !TryComp(ent, out var rotator)) { Log.Error($"User {args.SenderSession.Name} ({args.SenderSession.UserId}) tried setting local rotation directly without a valid mouse rotator component attached!"); return; @@ -59,17 +57,4 @@ private void OnRequestRotation(RequestMouseRotatorRotationEvent msg, EntitySessi rotator.GoalRotation = msg.Rotation; Dirty(ent, rotator); } - - private void OnRequestSimpleRotation(RequestMouseRotatorRotationSimpleEvent ev, EntitySessionEventArgs args) - { - if (args.SenderSession.AttachedEntity is not { } ent - || !TryComp(ent, out var rotator) || !rotator.Simple4DirMode) - { - Log.Error($"User {args.SenderSession.Name} ({args.SenderSession.UserId}) tried setting 4-dir rotation directly without a valid mouse rotator component attached!"); - return; - } - - rotator.GoalRotation = ev.Direction.ToAngle(); - Dirty(ent, rotator); - } } diff --git a/Content.Shared/Movement/Components/MobMoverComponent.cs b/Content.Shared/Movement/Components/MobMoverComponent.cs index a77f415b938..7ad7961ed7e 100644 --- a/Content.Shared/Movement/Components/MobMoverComponent.cs +++ b/Content.Shared/Movement/Components/MobMoverComponent.cs @@ -14,6 +14,15 @@ public sealed partial class MobMoverComponent : Component [DataField] public float PushStrength = 600f; + [DataField, AutoNetworkedField] + public float StepSoundMoveDistanceRunning = 2; + + [DataField, AutoNetworkedField] + public float StepSoundMoveDistanceWalking = 1.5f; + + [DataField, AutoNetworkedField] + public float FootstepVariation; + [ViewVariables(VVAccess.ReadWrite)] public EntityCoordinates LastPosition { get; set; } diff --git a/Content.Shared/Movement/Pulling/Components/PullableComponent.cs b/Content.Shared/Movement/Pulling/Components/PullableComponent.cs index db889e7e3bd..01ce0efaae6 100644 --- a/Content.Shared/Movement/Pulling/Components/PullableComponent.cs +++ b/Content.Shared/Movement/Pulling/Components/PullableComponent.cs @@ -36,4 +36,11 @@ public sealed partial class PullableComponent : Component [Access(typeof(Systems.PullingSystem), Other = AccessPermissions.ReadExecute)] [AutoNetworkedField, DataField] public bool PrevFixedRotation; + + /// + /// Whether the entity is currently being actively pushed by the puller. + /// If true, the entity will be able to enter disposals upon colliding with them, and the like. + /// + [DataField, AutoNetworkedField] + public bool BeingActivelyPushed = false; } diff --git a/Content.Shared/Movement/Pulling/Components/PullerComponent.cs b/Content.Shared/Movement/Pulling/Components/PullerComponent.cs index 1fc9b731bd5..648f06086ba 100644 --- a/Content.Shared/Movement/Pulling/Components/PullerComponent.cs +++ b/Content.Shared/Movement/Pulling/Components/PullerComponent.cs @@ -1,5 +1,6 @@ using Content.Shared.Movement.Pulling.Systems; using Robust.Shared.GameStates; +using Robust.Shared.Map; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; namespace Content.Shared.Movement.Pulling.Components; @@ -11,16 +12,17 @@ namespace Content.Shared.Movement.Pulling.Components; [Access(typeof(PullingSystem))] public sealed partial class PullerComponent : Component { - // My raiding guild /// - /// Next time the puller can throw what is being pulled. - /// Used to avoid spamming it for infinite spin + velocity. + /// Next time the puller change where they are pulling the target towards. /// [DataField(customTypeSerializer: typeof(TimeOffsetSerializer)), AutoNetworkedField] - public TimeSpan NextThrow; + public TimeSpan NextPushTargetChange; + + [DataField, AutoNetworkedField] + public TimeSpan NextPushStop; [DataField] - public TimeSpan ThrowCooldown = TimeSpan.FromSeconds(1); + public TimeSpan PushChangeCooldown = TimeSpan.FromSeconds(0.1f), PushDuration = TimeSpan.FromSeconds(5f); // Before changing how this is updated, please see SharedPullerSystem.RefreshMovementSpeed public float WalkSpeedModifier => Pulling == default ? 1.0f : 0.95f; @@ -28,14 +30,38 @@ public sealed partial class PullerComponent : Component public float SprintSpeedModifier => Pulling == default ? 1.0f : 0.95f; /// - /// Entity currently being pulled if applicable. + /// Entity currently being pulled/pushed if applicable. /// [AutoNetworkedField, DataField] public EntityUid? Pulling; + /// + /// The position the entity is currently being pulled towards. + /// + [AutoNetworkedField, DataField] + public EntityCoordinates? PushingTowards; + /// /// Does this entity need hands to be able to pull something? /// [DataField] public bool NeedsHands = true; + + /// + /// The maximum acceleration of pushing, in meters per second squared. + /// + [DataField] + public float PushAcceleration = 0.3f; + + /// + /// The maximum speed to which the pulled entity may be accelerated relative to the push direction, in meters per second. + /// + [DataField] + public float MaxPushSpeed = 1.2f; + + /// + /// The maximum distance between the puller and the point towards which the puller may attempt to pull it, in meters. + /// + [DataField] + public float MaxPushRange = 2f; } diff --git a/Content.Shared/Movement/Pulling/Systems/PullingSystem.cs b/Content.Shared/Movement/Pulling/Systems/PullingSystem.cs index 3c265d5a027..4bf53c8dbdd 100644 --- a/Content.Shared/Movement/Pulling/Systems/PullingSystem.cs +++ b/Content.Shared/Movement/Pulling/Systems/PullingSystem.cs @@ -4,20 +4,25 @@ using Content.Shared.Alert; using Content.Shared.Buckle.Components; using Content.Shared.Database; +using Content.Shared.Gravity; using Content.Shared.Hands; using Content.Shared.Hands.EntitySystems; using Content.Shared.Input; using Content.Shared.Interaction; +using Content.Shared.Movement.Components; using Content.Shared.Movement.Events; using Content.Shared.Movement.Pulling.Components; using Content.Shared.Movement.Pulling.Events; using Content.Shared.Movement.Systems; +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; using Robust.Shared.Map; +using Robust.Shared.Network; using Robust.Shared.Physics; using Robust.Shared.Physics.Components; using Robust.Shared.Physics.Events; @@ -34,8 +39,10 @@ public sealed class PullingSystem : EntitySystem { [Dependency] private readonly IGameTiming _timing = default!; [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!; + [Dependency] private readonly INetManager _net = default!; [Dependency] private readonly ActionBlockerSystem _blocker = default!; [Dependency] private readonly AlertsSystem _alertsSystem = default!; + [Dependency] private readonly SharedGravitySystem _gravity = default!; [Dependency] private readonly MovementSpeedModifierSystem _modifierSystem = default!; [Dependency] private readonly SharedJointSystem _joints = default!; [Dependency] private readonly SharedContainerSystem _containerSystem = default!; @@ -43,7 +50,7 @@ public sealed class PullingSystem : EntitySystem [Dependency] private readonly SharedInteractionSystem _interaction = default!; [Dependency] private readonly SharedPhysicsSystem _physics = default!; [Dependency] private readonly SharedTransformSystem _xformSys = default!; - [Dependency] private readonly ThrowingSystem _throwing = default!; + [Dependency] private readonly ThrownItemSystem _thrownItem = default!; public override void Initialize() { @@ -57,11 +64,14 @@ public override void Initialize() SubscribeLocalEvent(OnJointRemoved); SubscribeLocalEvent>(AddPullVerbs); SubscribeLocalEvent(OnPullableContainerInsert); + SubscribeLocalEvent(OnPullableCollide); + SubscribeLocalEvent(OnPullerMoveInput); SubscribeLocalEvent(OnPullerContainerInsert); SubscribeLocalEvent(OnPullerUnpaused); SubscribeLocalEvent(OnVirtualItemDeleted); SubscribeLocalEvent(OnRefreshMovespeed); + SubscribeLocalEvent(OnDropHandItems); CommandBinds.Builder .Bind(ContentKeyFunctions.MovePulledObject, new PointerInputCmdHandler(OnRequestMovePulledObject)) @@ -69,6 +79,99 @@ public override void Initialize() .Register(); } + public override void Shutdown() + { + base.Shutdown(); + CommandBinds.Unregister(); + } + + public override void Update(float frameTime) + { + if (_net.IsClient) // Client cannot predict this + return; + + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var puller, out var pullerComp, out var pullerPhysics, out var pullerXForm)) + { + // If not pulling, reset the pushing cooldowns and exit + if (pullerComp.Pulling is not { } pulled || !TryComp(pulled, out var pulledComp)) + { + pullerComp.PushingTowards = null; + pullerComp.NextPushTargetChange = TimeSpan.Zero; + continue; + } + + pulledComp.BeingActivelyPushed = false; // Temporarily set to false; if the checks below pass, it will be set to true again + + // If pulling but the pullee is invalid or is on a different map, stop pulling + var pulledXForm = Transform(pulled); + if (!TryComp(pulled, out var pulledPhysics) + || pulledPhysics.BodyType == BodyType.Static + || pulledXForm.MapUid != pullerXForm.MapUid) + { + StopPulling(pulled, pulledComp); + continue; + } + + if (pullerComp.PushingTowards is null) + continue; + + // If pushing but the target position is invalid, or the push action has expired or finished, stop pushing + if (pullerComp.NextPushStop < _timing.CurTime + || !(pullerComp.PushingTowards.Value.ToMap(EntityManager, _xformSys) is var pushCoordinates) + || pushCoordinates.MapId != pulledXForm.MapID) + { + pullerComp.PushingTowards = null; + pullerComp.NextPushTargetChange = TimeSpan.Zero; + continue; + } + + // Actual force calculation. All the Vector2's below are in map coordinates. + var desiredDeltaPos = pushCoordinates.Position - Transform(pulled).Coordinates.ToMapPos(EntityManager, _xformSys); + if (desiredDeltaPos.LengthSquared() < 0.1f) + { + pullerComp.PushingTowards = null; + continue; + } + + var velocityAndDirectionAngle = new Angle(pulledPhysics.LinearVelocity) - new Angle(desiredDeltaPos); + var currentRelativeSpeed = pulledPhysics.LinearVelocity.Length() * (float) Math.Cos(velocityAndDirectionAngle.Theta); + var desiredAcceleration = MathF.Max(0f, pullerComp.MaxPushSpeed - currentRelativeSpeed); + + var desiredImpulse = pulledPhysics.Mass * desiredDeltaPos; + var maxSourceImpulse = MathF.Min(pullerComp.PushAcceleration, desiredAcceleration) * pullerPhysics.Mass; + var actualImpulse = desiredImpulse.LengthSquared() > maxSourceImpulse * maxSourceImpulse ? desiredDeltaPos.Normalized() * maxSourceImpulse : desiredImpulse; + + // Ideally we'd want to apply forces instead of impulses, however... + // We cannot use ApplyForce here because it will be cleared on the next physics substep which will render it ultimately useless + // The alternative is to run this function on every physics substep, but that is way too expensive for such a minor system + _physics.ApplyLinearImpulse(pulled, actualImpulse); + if (_gravity.IsWeightless(puller, pullerPhysics, pullerXForm)) + _physics.ApplyLinearImpulse(puller, -actualImpulse); + + pulledComp.BeingActivelyPushed = true; + } + query.Dispose(); + } + + private void OnPullerMoveInput(EntityUid uid, PullerComponent component, ref MoveInputEvent args) + { + // Stop pushing + component.PushingTowards = null; + component.NextPushStop = TimeSpan.Zero; + } + + private void OnDropHandItems(EntityUid uid, PullerComponent pullerComp, DropHandItemsEvent args) + { + if (pullerComp.Pulling == null || pullerComp.NeedsHands) + return; + + if (!TryComp(pullerComp.Pulling, out PullableComponent? pullableComp)) + return; + + TryStopPull(pullerComp.Pulling.Value, pullableComp, uid); + } + private void OnPullerContainerInsert(Entity ent, ref EntGotInsertedIntoContainerMessage args) { if (ent.Comp.Pulling == null) return; @@ -84,15 +187,26 @@ private void OnPullableContainerInsert(Entity ent, ref EntGot TryStopPull(ent.Owner, ent.Comp); } - public override void Shutdown() + private void OnPullableCollide(Entity ent, ref StartCollideEvent args) { - base.Shutdown(); - CommandBinds.Unregister(); + if (!ent.Comp.BeingActivelyPushed || ent.Comp.Puller == null || args.OtherEntity == ent.Comp.Puller) + return; + + // This component isn't actually needed anywhere besides the thrownitemsyste`m itself, so we just fake it + var fakeThrown = new ThrownItemComponent() + { + Owner = ent.Owner, + Animate = false, + Landed = false, + PlayLandSound = false, + Thrower = ent.Comp.Puller + }; + _thrownItem.ThrowCollideInteraction(fakeThrown, ent, args.OtherEntity); } private void OnPullerUnpaused(EntityUid uid, PullerComponent component, ref EntityUnpausedEvent args) { - component.NextThrow += args.PausedTime; + component.NextPushTargetChange += args.PausedTime; } private void OnVirtualItemDeleted(EntityUid uid, PullerComponent component, VirtualItemDeletedEvent args) @@ -204,6 +318,7 @@ private void StopPulling(EntityUid pullableUid, PullableComponent pullableComp) var oldPuller = pullableComp.Puller; pullableComp.PullJointId = null; pullableComp.Puller = null; + pullableComp.BeingActivelyPushed = false; Dirty(pullableUid, pullableComp); // No more joints with puller -> force stop pull. @@ -234,31 +349,22 @@ public bool IsPulled(EntityUid uid, PullableComponent? component = null) private bool OnRequestMovePulledObject(ICommonSession? session, EntityCoordinates coords, EntityUid uid) { - if (session?.AttachedEntity is not { } player || - !player.IsValid()) - { - return false; - } - - if (!TryComp(player, out var pullerComp)) + if (session?.AttachedEntity is not { } player + || !player.IsValid() + || !TryComp(player, out var pullerComp)) return false; var pulled = pullerComp.Pulling; - - if (!HasComp(pulled)) + if (!HasComp(pulled) + || _containerSystem.IsEntityInContainer(player) + || _timing.CurTime < pullerComp.NextPushTargetChange) return false; - if (_containerSystem.IsEntityInContainer(player)) - return false; - - // Cooldown buddy - if (_timing.CurTime < pullerComp.NextThrow) - return false; - - pullerComp.NextThrow = _timing.CurTime + pullerComp.ThrowCooldown; + pullerComp.NextPushTargetChange = _timing.CurTime + pullerComp.PushChangeCooldown; + pullerComp.NextPushStop = _timing.CurTime + pullerComp.PushDuration; // Cap the distance - const float range = 2f; + var range = pullerComp.MaxPushRange; var fromUserCoords = coords.WithEntityId(player, EntityManager); var userCoords = new EntityCoordinates(player, Vector2.Zero); @@ -268,8 +374,9 @@ private bool OnRequestMovePulledObject(ICommonSession? session, EntityCoordinate fromUserCoords = userCoords.Offset(userDirection.Normalized() * range); } + pullerComp.PushingTowards = fromUserCoords; Dirty(player, pullerComp); - _throwing.TryThrow(pulled.Value, fromUserCoords, user: player, strength: 4f, animated: false, recoil: false, playSound: false, doSpin: false); + return false; } @@ -349,14 +456,17 @@ public bool CanPull(EntityUid puller, EntityUid pullableUid, PullerComponent? pu return !startPull.Cancelled && !getPulled.Cancelled; } - public bool TogglePull(EntityUid pullableUid, EntityUid pullerUid, PullableComponent pullable) + public bool TogglePull(Entity pullable, EntityUid pullerUid) { - if (pullable.Puller == pullerUid) + if (!Resolve(pullable, ref pullable.Comp, false)) + return false; + + if (pullable.Comp.Puller == pullerUid) { - return TryStopPull(pullableUid, pullable); + return TryStopPull(pullable, pullable.Comp); } - return TryStartPull(pullerUid, pullableUid, pullableComp: pullable); + return TryStartPull(pullerUid, pullable, pullableComp: pullable); } public bool TogglePull(EntityUid pullerUid, PullerComponent puller) @@ -364,7 +474,7 @@ public bool TogglePull(EntityUid pullerUid, PullerComponent puller) if (!TryComp(puller.Pulling, out var pullable)) return false; - return TogglePull(puller.Pulling.Value, pullerUid, pullable); + return TogglePull((puller.Pulling.Value, pullable), pullerUid); } public bool TryStartPull(EntityUid pullerUid, EntityUid pullableUid, diff --git a/Content.Shared/Movement/Systems/SharedMoverController.Input.cs b/Content.Shared/Movement/Systems/SharedMoverController.Input.cs index d72ce6e2a2d..1c097ce17bc 100644 --- a/Content.Shared/Movement/Systems/SharedMoverController.Input.cs +++ b/Content.Shared/Movement/Systems/SharedMoverController.Input.cs @@ -263,7 +263,7 @@ private void OnInputParentChange(EntityUid uid, InputMoverComponent component, r } var oldMapId = args.OldMapId; - var mapId = args.Transform.MapID; + var mapId = args.Transform.MapUid; // If we change maps then reset eye rotation entirely. if (oldMapId != mapId) diff --git a/Content.Shared/Movement/Systems/SharedMoverController.cs b/Content.Shared/Movement/Systems/SharedMoverController.cs index a3dc705ac17..511a831bb70 100644 --- a/Content.Shared/Movement/Systems/SharedMoverController.cs +++ b/Content.Shared/Movement/Systems/SharedMoverController.cs @@ -64,11 +64,6 @@ public abstract partial class SharedMoverController : VirtualController protected EntityQuery CanMoveInAirQuery; protected EntityQuery NoRotateQuery; - private const float StepSoundMoveDistanceRunning = 2; - private const float StepSoundMoveDistanceWalking = 1.5f; - - private const float FootstepVariation = 0f; - /// /// /// @@ -274,7 +269,8 @@ protected void HandleMobMovement( var audioParams = sound.Params .WithVolume(volume) - .WithVariation(sound.Params.Variation ?? FootstepVariation); + + .WithVariation(sound.Params.Variation ?? mobMover.FootstepVariation); // If we're a relay target then predict the sound for all relays. if (relayTarget != null) @@ -425,7 +421,9 @@ private bool TryGetSound( return false; var coordinates = xform.Coordinates; - var distanceNeeded = mover.Sprinting ? StepSoundMoveDistanceRunning : StepSoundMoveDistanceWalking; + var distanceNeeded = mover.Sprinting + ? mobMover.StepSoundMoveDistanceRunning + : mobMover.StepSoundMoveDistanceWalking; // Handle footsteps. if (!weightless) diff --git a/Content.Shared/Ninja/Components/SpaceNinjaComponent.cs b/Content.Shared/Ninja/Components/SpaceNinjaComponent.cs index dff4b56aa4a..0f3bff265cb 100644 --- a/Content.Shared/Ninja/Components/SpaceNinjaComponent.cs +++ b/Content.Shared/Ninja/Components/SpaceNinjaComponent.cs @@ -1,6 +1,6 @@ using Content.Shared.Ninja.Systems; using Robust.Shared.GameStates; -using Robust.Shared.Serialization; +using Robust.Shared.Prototypes; namespace Content.Shared.Ninja.Components; @@ -35,4 +35,22 @@ public sealed partial class SpaceNinjaComponent : Component /// [DataField("katana"), AutoNetworkedField] public EntityUid? Katana; + + /// + /// Objective to complete after calling in a threat. + /// + [DataField] + public EntProtoId TerrorObjective = "TerrorObjective"; + + /// + /// Objective to complete after setting everyone to arrest. + /// + [DataField] + public EntProtoId MassArrestObjective = "MassArrestObjective"; + + /// + /// Objective to complete after the spider charge detonates. + /// + [DataField] + public EntProtoId SpiderChargeObjective = "SpiderChargeObjective"; } diff --git a/Content.Shared/Ninja/Systems/DashAbilitySystem.cs b/Content.Shared/Ninja/Systems/DashAbilitySystem.cs index f9e5d4a1f63..4853968b61f 100644 --- a/Content.Shared/Ninja/Systems/DashAbilitySystem.cs +++ b/Content.Shared/Ninja/Systems/DashAbilitySystem.cs @@ -4,8 +4,8 @@ using Content.Shared.Hands.EntitySystems; using Content.Shared.Interaction; using Content.Shared.Ninja.Components; -using Content.Shared.Physics; using Content.Shared.Popups; +using Content.Shared.Examine; using Robust.Shared.Audio.Systems; using Robust.Shared.Timing; @@ -20,7 +20,7 @@ public sealed class DashAbilitySystem : EntitySystem [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly SharedChargesSystem _charges = default!; [Dependency] private readonly SharedHandsSystem _hands = default!; - [Dependency] private readonly SharedInteractionSystem _interaction = default!; + [Dependency] private readonly ExamineSystemShared _examine = default!; [Dependency] private readonly SharedPopupSystem _popup = default!; [Dependency] private readonly SharedTransformSystem _transform = default!; [Dependency] private readonly ActionContainerSystem _actionContainer = default!; @@ -79,11 +79,10 @@ private void OnDash(EntityUid uid, DashAbilityComponent comp, DashEvent args) _popup.PopupClient(Loc.GetString("dash-ability-no-charges", ("item", uid)), user, user); return; } - - var origin = Transform(user).MapPosition; + var origin = _transform.GetMapCoordinates(user); var target = args.Target.ToMap(EntityManager, _transform); // prevent collision with the user duh - if (!_interaction.InRangeUnobstructed(origin, target, 0f, CollisionGroup.Opaque, uid => uid == user)) + if (!_examine.InRangeUnOccluded(origin, target, SharedInteractionSystem.MaxRaycastRange, null)) { // can only dash if the destination is visible on screen _popup.PopupClient(Loc.GetString("dash-ability-cant-see", ("item", uid)), user, user); diff --git a/Content.Shared/Ninja/Systems/SharedNinjaGlovesSystem.cs b/Content.Shared/Ninja/Systems/SharedNinjaGlovesSystem.cs index 815464bf7a3..f61d0c6a908 100644 --- a/Content.Shared/Ninja/Systems/SharedNinjaGlovesSystem.cs +++ b/Content.Shared/Ninja/Systems/SharedNinjaGlovesSystem.cs @@ -1,6 +1,7 @@ using Content.Shared.Actions; using Content.Shared.CombatMode; using Content.Shared.Communications; +using Content.Shared.CriminalRecords.Components; using Content.Shared.Examine; using Content.Shared.Hands.Components; using Content.Shared.Interaction; @@ -62,6 +63,7 @@ public void DisableGloves(EntityUid uid, NinjaGlovesComponent? comp = null) RemComp(user); RemComp(user); RemComp(user); + RemComp(user); } /// diff --git a/Content.Shared/Nutrition/Components/DrinkComponent.cs b/Content.Shared/Nutrition/Components/DrinkComponent.cs new file mode 100644 index 00000000000..17baaef5a37 --- /dev/null +++ b/Content.Shared/Nutrition/Components/DrinkComponent.cs @@ -0,0 +1,43 @@ +using Content.Shared.Nutrition.EntitySystems; +using Content.Shared.FixedPoint; +using Robust.Shared.Audio; +using Robust.Shared.GameStates; + +namespace Content.Shared.Nutrition.Components; + +[NetworkedComponent, AutoGenerateComponentState] +[RegisterComponent, Access(typeof(SharedDrinkSystem))] +public sealed partial class DrinkComponent : Component +{ + [DataField] + public string Solution = "drink"; + + [DataField, AutoNetworkedField] + public SoundSpecifier UseSound = new SoundPathSpecifier("/Audio/Items/drink.ogg"); + + [DataField, AutoNetworkedField] + public FixedPoint2 TransferAmount = FixedPoint2.New(5); + + /// + /// How long it takes to drink this yourself. + /// + [DataField, AutoNetworkedField] + public float Delay = 1; + + [DataField, AutoNetworkedField] + public bool Examinable = true; + + /// + /// If true, trying to drink when empty will not handle the event. + /// This means other systems such as equipping on use can run. + /// Example usecase is the bucket. + /// + [DataField] + public bool IgnoreEmpty; + + /// + /// This is how many seconds it takes to force feed someone this drink. + /// + [DataField, AutoNetworkedField] + public float ForceFeedDelay = 3; +} diff --git a/Content.Shared/Nutrition/Components/PressurizedSolutionComponent.cs b/Content.Shared/Nutrition/Components/PressurizedSolutionComponent.cs new file mode 100644 index 00000000000..7060f3bf799 --- /dev/null +++ b/Content.Shared/Nutrition/Components/PressurizedSolutionComponent.cs @@ -0,0 +1,106 @@ +using Content.Shared.Nutrition.EntitySystems; +using Robust.Shared.Audio; +using Robust.Shared.GameStates; + +namespace Content.Shared.Nutrition.Components; + +/// +/// Represents a solution container that can hold the pressure from a solution that +/// gets fizzy when aggitated, and can spray the solution when opened or thrown. +/// Handles simulating the fizziness of the solution, responding to aggitating events, +/// and spraying the solution out when opening or throwing the entity. +/// +[NetworkedComponent, AutoGenerateComponentState, AutoGenerateComponentPause] +[RegisterComponent, Access(typeof(PressurizedSolutionSystem))] +public sealed partial class PressurizedSolutionComponent : Component +{ + /// + /// The name of the solution to use. + /// + [DataField] + public string Solution = "drink"; + + /// + /// The sound to play when the solution sprays out of the container. + /// + [DataField] + public SoundSpecifier SpraySound = new SoundPathSpecifier("/Audio/Items/soda_spray.ogg"); + + /// + /// The longest amount of time that the solution can remain fizzy after being aggitated. + /// Put another way, how long the solution will remain fizzy when aggitated the maximum amount. + /// Used to calculate the current fizziness level. + /// + [DataField] + public TimeSpan FizzinessMaxDuration = TimeSpan.FromSeconds(120); + + /// + /// The time at which the solution will be fully settled after being shaken. + /// + [DataField, AutoNetworkedField, AutoPausedField] + public TimeSpan FizzySettleTime; + + /// + /// How much to increase the solution's fizziness each time it's shaken. + /// This assumes the solution has maximum fizzability. + /// A value of 1 will maximize it with a single shake, and a value of + /// 0.5 will increase it by half with each shake. + /// + [DataField] + public float FizzinessAddedOnShake = 1.0f; + + /// + /// How much to increase the solution's fizziness when it lands after being thrown. + /// This assumes the solution has maximum fizzability. + /// + [DataField] + public float FizzinessAddedOnLand = 0.25f; + + /// + /// How much to modify the chance of spraying when the entity is opened. + /// Increasing this effectively increases the fizziness value when checking if it should spray. + /// + [DataField] + public float SprayChanceModOnOpened = -0.01f; // Just enough to prevent spraying at 0 fizziness + + /// + /// How much to modify the chance of spraying when the entity is shaken. + /// Increasing this effectively increases the fizziness value when checking if it should spray. + /// + [DataField] + public float SprayChanceModOnShake = -1; // No spraying when shaken by default + + /// + /// How much to modify the chance of spraying when the entity lands after being thrown. + /// Increasing this effectively increases the fizziness value when checking if it should spray. + /// + [DataField] + public float SprayChanceModOnLand = 0.25f; + + /// + /// Holds the current randomly-rolled threshold value for spraying. + /// If fizziness exceeds this value when the entity is opened, it will spray. + /// By rolling this value when the entity is aggitated, we can have randomization + /// while still having prediction! + /// + [DataField, AutoNetworkedField] + public float SprayFizzinessThresholdRoll; + + /// + /// Popup message shown to user when sprayed by the solution. + /// + [DataField] + public LocId SprayHolderMessageSelf = "pressurized-solution-spray-holder-self"; + + /// + /// Popup message shown to others when a user is sprayed by the solution. + /// + [DataField] + public LocId SprayHolderMessageOthers = "pressurized-solution-spray-holder-others"; + + /// + /// Popup message shown above the entity when the solution sprays without a target. + /// + [DataField] + public LocId SprayGroundMessage = "pressurized-solution-spray-ground"; +} diff --git a/Content.Shared/Nutrition/Components/ShakeableComponent.cs b/Content.Shared/Nutrition/Components/ShakeableComponent.cs new file mode 100644 index 00000000000..cc1c08a9b23 --- /dev/null +++ b/Content.Shared/Nutrition/Components/ShakeableComponent.cs @@ -0,0 +1,50 @@ +using Robust.Shared.Audio; +using Robust.Shared.GameStates; + +namespace Content.Shared.Nutrition.Components; + +/// +/// Adds a "Shake" verb to the entity's verb menu. +/// Handles checking the entity can be shaken, displaying popups when shaking, +/// and raising a ShakeEvent when a shake occurs. +/// Reacting to being shaken is left up to other components. +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class ShakeableComponent : Component +{ + /// + /// How long it takes to shake this item. + /// + [DataField] + public TimeSpan ShakeDuration = TimeSpan.FromSeconds(1f); + + /// + /// Does the entity need to be in the user's hand in order to be shaken? + /// + [DataField] + public bool RequireInHand; + + /// + /// Label to display in the verbs menu for this item's shake action. + /// + [DataField] + public LocId ShakeVerbText = "shakeable-verb"; + + /// + /// Text that will be displayed to the user when shaking this item. + /// + [DataField] + public LocId ShakePopupMessageSelf = "shakeable-popup-message-self"; + + /// + /// Text that will be displayed to other users when someone shakes this item. + /// + [DataField] + public LocId ShakePopupMessageOthers = "shakeable-popup-message-others"; + + /// + /// The sound that will be played when shaking this item. + /// + [DataField] + public SoundSpecifier ShakeSound = new SoundPathSpecifier("/Audio/Items/soda_shake.ogg"); +} diff --git a/Content.Shared/Nutrition/EntitySystems/HungerSystem.cs b/Content.Shared/Nutrition/EntitySystems/HungerSystem.cs index 1bc2a945f31..e6d82553336 100644 --- a/Content.Shared/Nutrition/EntitySystems/HungerSystem.cs +++ b/Content.Shared/Nutrition/EntitySystems/HungerSystem.cs @@ -1,13 +1,17 @@ +using System.Diagnostics.CodeAnalysis; using Content.Shared.Alert; using Content.Shared.Damage; using Content.Shared.Mobs.Systems; using Content.Shared.Movement.Systems; using Content.Shared.Nutrition.Components; using Content.Shared.Rejuvenate; +using Content.Shared.StatusIcon; +using Robust.Shared.Prototypes; using Content.Shared.Mood; using Robust.Shared.Network; using Robust.Shared.Random; using Robust.Shared.Timing; +using Robust.Shared.Utility; using Robust.Shared.Configuration; using Content.Shared.CCVar; @@ -16,6 +20,7 @@ namespace Content.Shared.Nutrition.EntitySystems; public sealed class HungerSystem : EntitySystem { [Dependency] private readonly IGameTiming _timing = default!; + [Dependency] private readonly IPrototypeManager _prototype = default!; [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly AlertsSystem _alerts = default!; [Dependency] private readonly DamageableSystem _damageable = default!; @@ -25,10 +30,27 @@ public sealed class HungerSystem : EntitySystem [Dependency] private readonly INetManager _net = default!; [Dependency] private readonly IConfigurationManager _config = default!; + [ValidatePrototypeId] + private const string HungerIconOverfedId = "HungerIconOverfed"; + + [ValidatePrototypeId] + private const string HungerIconPeckishId = "HungerIconPeckish"; + + [ValidatePrototypeId] + private const string HungerIconStarvingId = "HungerIconStarving"; + + private StatusIconPrototype? _hungerIconOverfed; + private StatusIconPrototype? _hungerIconPeckish; + private StatusIconPrototype? _hungerIconStarving; + public override void Initialize() { base.Initialize(); + DebugTools.Assert(_prototype.TryIndex(HungerIconOverfedId, out _hungerIconOverfed) && + _prototype.TryIndex(HungerIconPeckishId, out _hungerIconPeckish) && + _prototype.TryIndex(HungerIconStarvingId, out _hungerIconStarving)); + SubscribeLocalEvent(OnMapInit); SubscribeLocalEvent(OnShutdown); SubscribeLocalEvent(OnRefreshMovespeed); @@ -205,6 +227,27 @@ private bool GetMovementThreshold(HungerThreshold threshold) } } + public bool TryGetStatusIconPrototype(HungerComponent component, [NotNullWhen(true)] out StatusIconPrototype? prototype) + { + switch (component.CurrentThreshold) + { + case HungerThreshold.Overfed: + prototype = _hungerIconOverfed; + break; + case HungerThreshold.Peckish: + prototype = _hungerIconPeckish; + break; + case HungerThreshold.Starving: + prototype = _hungerIconStarving; + break; + default: + prototype = null; + break; + } + + return prototype != null; + } + public override void Update(float frameTime) { base.Update(frameTime); @@ -221,4 +264,3 @@ public override void Update(float frameTime) } } } - diff --git a/Content.Shared/Nutrition/EntitySystems/OpenableSystem.cs b/Content.Shared/Nutrition/EntitySystems/OpenableSystem.cs index 0ad0877d222..2934ced8b4a 100644 --- a/Content.Shared/Nutrition/EntitySystems/OpenableSystem.cs +++ b/Content.Shared/Nutrition/EntitySystems/OpenableSystem.cs @@ -16,9 +16,9 @@ namespace Content.Shared.Nutrition.EntitySystems; /// public sealed partial class OpenableSystem : EntitySystem { - [Dependency] protected readonly SharedAppearanceSystem Appearance = default!; - [Dependency] protected readonly SharedAudioSystem Audio = default!; - [Dependency] protected readonly SharedPopupSystem Popup = default!; + [Dependency] private readonly SharedAppearanceSystem _appearance = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; public override void Initialize() { @@ -31,6 +31,8 @@ public override void Initialize() SubscribeLocalEvent(HandleIfClosed); SubscribeLocalEvent>(AddOpenCloseVerbs); SubscribeLocalEvent(OnTransferAttempt); + SubscribeLocalEvent(OnAttemptShake); + SubscribeLocalEvent(OnAttemptAddFizziness); } private void OnInit(EntityUid uid, OpenableComponent comp, ComponentInit args) @@ -100,6 +102,20 @@ private void OnTransferAttempt(Entity ent, ref SolutionTransf } } + private void OnAttemptShake(Entity entity, ref AttemptShakeEvent args) + { + // Prevent shaking open containers + if (entity.Comp.Opened) + args.Cancelled = true; + } + + private void OnAttemptAddFizziness(Entity entity, ref AttemptAddFizzinessEvent args) + { + // Can't add fizziness to an open container + if (entity.Comp.Opened) + args.Cancelled = true; + } + /// /// Returns true if the entity either does not have OpenableComponent or it is opened. /// Drinks that don't have OpenableComponent are automatically open, so it returns true. @@ -126,7 +142,7 @@ public bool IsClosed(EntityUid uid, EntityUid? user = null, OpenableComponent? c return false; if (user != null) - Popup.PopupEntity(Loc.GetString(comp.ClosedPopup, ("owner", uid)), user.Value, user.Value); + _popup.PopupEntity(Loc.GetString(comp.ClosedPopup, ("owner", uid)), user.Value, user.Value); return true; } @@ -139,13 +155,13 @@ public void UpdateAppearance(EntityUid uid, OpenableComponent? comp = null, Appe if (!Resolve(uid, ref comp)) return; - Appearance.SetData(uid, OpenableVisuals.Opened, comp.Opened, appearance); + _appearance.SetData(uid, OpenableVisuals.Opened, comp.Opened, appearance); } /// /// Sets the opened field and updates open visuals. /// - public void SetOpen(EntityUid uid, bool opened = true, OpenableComponent? comp = null) + public void SetOpen(EntityUid uid, bool opened = true, OpenableComponent? comp = null, EntityUid? user = null) { if (!Resolve(uid, ref comp, false) || opened == comp.Opened) return; @@ -155,12 +171,12 @@ public void SetOpen(EntityUid uid, bool opened = true, OpenableComponent? comp = if (opened) { - var ev = new OpenableOpenedEvent(); + var ev = new OpenableOpenedEvent(user); RaiseLocalEvent(uid, ref ev); } else { - var ev = new OpenableClosedEvent(); + var ev = new OpenableClosedEvent(user); RaiseLocalEvent(uid, ref ev); } @@ -176,8 +192,8 @@ public bool TryOpen(EntityUid uid, OpenableComponent? comp = null, EntityUid? us if (!Resolve(uid, ref comp, false) || comp.Opened) return false; - SetOpen(uid, true, comp); - Audio.PlayPredicted(comp.Sound, uid, user); + SetOpen(uid, true, comp, user); + _audio.PlayPredicted(comp.Sound, uid, user); return true; } @@ -190,9 +206,9 @@ public bool TryClose(EntityUid uid, OpenableComponent? comp = null, EntityUid? u if (!Resolve(uid, ref comp, false) || !comp.Opened || !comp.Closeable) return false; - SetOpen(uid, false, comp); + SetOpen(uid, false, comp, user); if (comp.CloseSound != null) - Audio.PlayPredicted(comp.CloseSound, uid, user); + _audio.PlayPredicted(comp.CloseSound, uid, user); return true; } } @@ -201,10 +217,10 @@ public bool TryClose(EntityUid uid, OpenableComponent? comp = null, EntityUid? u /// Raised after an Openable is opened. /// [ByRefEvent] -public record struct OpenableOpenedEvent; +public record struct OpenableOpenedEvent(EntityUid? User = null); /// /// Raised after an Openable is closed. /// [ByRefEvent] -public record struct OpenableClosedEvent; +public record struct OpenableClosedEvent(EntityUid? User = null); diff --git a/Content.Shared/Nutrition/EntitySystems/PressurizedSolutionSystem.cs b/Content.Shared/Nutrition/EntitySystems/PressurizedSolutionSystem.cs new file mode 100644 index 00000000000..d63b8e7326c --- /dev/null +++ b/Content.Shared/Nutrition/EntitySystems/PressurizedSolutionSystem.cs @@ -0,0 +1,285 @@ +using Content.Shared.Chemistry.Reagent; +using Content.Shared.Chemistry.EntitySystems; +using Content.Shared.Hands.EntitySystems; +using Content.Shared.Nutrition.Components; +using Content.Shared.Throwing; +using Content.Shared.IdentityManagement; +using Robust.Shared.Audio.Systems; +using Robust.Shared.Random; +using Robust.Shared.Timing; +using Robust.Shared.Prototypes; +using Robust.Shared.Network; +using Content.Shared.Fluids; +using Content.Shared.Popups; + +namespace Content.Shared.Nutrition.EntitySystems; + +public sealed partial class PressurizedSolutionSystem : EntitySystem +{ + [Dependency] private readonly SharedSolutionContainerSystem _solutionContainer = default!; + [Dependency] private readonly OpenableSystem _openable = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly SharedHandsSystem _hands = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] private readonly SharedPuddleSystem _puddle = default!; + [Dependency] private readonly INetManager _net = default!; + [Dependency] private readonly IGameTiming _timing = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnMapInit); + SubscribeLocalEvent(OnShake); + SubscribeLocalEvent(OnOpened); + SubscribeLocalEvent(OnLand); + SubscribeLocalEvent(OnSolutionUpdate); + } + + /// + /// Helper method for checking if the solution's fizziness is high enough to spray. + /// is added to the actual fizziness for the comparison. + /// + private bool SprayCheck(Entity entity, float chanceMod = 0) + { + return Fizziness((entity, entity.Comp)) + chanceMod > entity.Comp.SprayFizzinessThresholdRoll; + } + + /// + /// Calculates how readily the contained solution becomes fizzy. + /// + private float SolutionFizzability(Entity entity) + { + if (!_solutionContainer.TryGetSolution(entity.Owner, entity.Comp.Solution, out var _, out var solution)) + return 0; + + // An empty solution can't be fizzy + if (solution.Volume <= 0) + return 0; + + var totalFizzability = 0f; + + // Check each reagent in the solution + foreach (var reagent in solution.Contents) + { + if (_prototypeManager.TryIndex(reagent.Reagent.Prototype, out ReagentPrototype? reagentProto) && reagentProto != null) + { + // What portion of the solution is this reagent? + var proportion = (float) (reagent.Quantity / solution.Volume); + totalFizzability += reagentProto.Fizziness * proportion; + } + } + + return totalFizzability; + } + + /// + /// Increases the fizziness level of the solution by the given amount, + /// scaled by the solution's fizzability. + /// 0 will result in no change, and 1 will maximize fizziness. + /// Also rerolls the spray threshold. + /// + private void AddFizziness(Entity entity, float amount) + { + var fizzability = SolutionFizzability(entity); + + // Can't add fizziness if the solution isn't fizzy + if (fizzability <= 0) + return; + + // Make sure nothing is preventing fizziness from being added + var attemptEv = new AttemptAddFizzinessEvent(entity, amount); + RaiseLocalEvent(entity, ref attemptEv); + if (attemptEv.Cancelled) + return; + + // Scale added fizziness by the solution's fizzability + amount *= fizzability; + + // Convert fizziness to time + var duration = amount * entity.Comp.FizzinessMaxDuration; + + // Add to the existing settle time, if one exists. Otherwise, add to the current time + var start = entity.Comp.FizzySettleTime > _timing.CurTime ? entity.Comp.FizzySettleTime : _timing.CurTime; + var newTime = start + duration; + + // Cap the maximum fizziness + var maxEnd = _timing.CurTime + entity.Comp.FizzinessMaxDuration; + if (newTime > maxEnd) + newTime = maxEnd; + + entity.Comp.FizzySettleTime = newTime; + + // Roll a new fizziness threshold + RollSprayThreshold(entity); + } + + /// + /// Helper method. Performs a . If it passes, calls . If it fails, . + /// + private void SprayOrAddFizziness(Entity entity, float chanceMod = 0, float fizzinessToAdd = 0, EntityUid? user = null) + { + if (SprayCheck(entity, chanceMod)) + TrySpray((entity, entity.Comp), user); + else + AddFizziness(entity, fizzinessToAdd); + } + + /// + /// Randomly generates a new spray threshold. + /// This is the value used to compare fizziness against when doing . + /// Since RNG will give different results between client and server, this is run on the server + /// and synced to the client by marking the component dirty. + /// We roll this in advance, rather than during , so that the value (hopefully) + /// has time to get synced to the client, so we can try be accurate with prediction. + /// + private void RollSprayThreshold(Entity entity) + { + // Can't predict random, so we wait for the server to tell us + if (!_net.IsServer) + return; + + entity.Comp.SprayFizzinessThresholdRoll = _random.NextFloat(); + Dirty(entity, entity.Comp); + } + + #region Public API + + /// + /// Does the entity contain a solution capable of being fizzy? + /// + public bool CanSpray(Entity entity) + { + if (!Resolve(entity, ref entity.Comp, false)) + return false; + + return SolutionFizzability((entity, entity.Comp)) > 0; + } + + /// + /// Attempts to spray the solution onto the given entity, or the ground if none is given. + /// Fails if the solution isn't able to be sprayed. + /// + public bool TrySpray(Entity entity, EntityUid? target = null) + { + if (!Resolve(entity, ref entity.Comp)) + return false; + + if (!CanSpray(entity)) + return false; + + if (!_solutionContainer.TryGetSolution(entity.Owner, entity.Comp.Solution, out var soln, out var interactions)) + return false; + + // If the container is openable, open it + _openable.SetOpen(entity, true); + + // Get the spray solution from the container + var solution = _solutionContainer.SplitSolution(soln.Value, interactions.Volume); + + // Spray the solution onto the ground and anyone nearby + if (TryComp(entity, out var transform)) + _puddle.TrySplashSpillAt(entity, transform.Coordinates, solution, out _, sound: false); + + var drinkName = Identity.Entity(entity, EntityManager); + + if (target != null) + { + var victimName = Identity.Entity(target.Value, EntityManager); + + var selfMessage = Loc.GetString(entity.Comp.SprayHolderMessageSelf, ("victim", victimName), ("drink", drinkName)); + var othersMessage = Loc.GetString(entity.Comp.SprayHolderMessageOthers, ("victim", victimName), ("drink", drinkName)); + _popup.PopupPredicted(selfMessage, othersMessage, target.Value, target.Value); + } + else + { + // Show a popup to everyone in PVS range + if (_timing.IsFirstTimePredicted) + _popup.PopupEntity(Loc.GetString(entity.Comp.SprayGroundMessage, ("drink", drinkName)), entity); + } + + _audio.PlayPredicted(entity.Comp.SpraySound, entity, target); + + // We just used all our fizziness, so clear it + TryClearFizziness(entity); + + return true; + } + + /// + /// What is the current fizziness level of the solution, from 0 to 1? + /// + public double Fizziness(Entity entity) + { + // No component means no fizz + if (!Resolve(entity, ref entity.Comp, false)) + return 0; + + // No negative fizziness + if (entity.Comp.FizzySettleTime <= _timing.CurTime) + return 0; + + var currentDuration = entity.Comp.FizzySettleTime - _timing.CurTime; + return Easings.InOutCubic((float) Math.Min(currentDuration / entity.Comp.FizzinessMaxDuration, 1)); + } + + /// + /// Attempts to clear any fizziness in the solution. + /// + /// Rolls a new spray threshold. + public void TryClearFizziness(Entity entity) + { + if (!Resolve(entity, ref entity.Comp)) + return; + + entity.Comp.FizzySettleTime = TimeSpan.Zero; + + // Roll a new fizziness threshold + RollSprayThreshold((entity, entity.Comp)); + } + + #endregion + + #region Event Handlers + private void OnMapInit(Entity entity, ref MapInitEvent args) + { + RollSprayThreshold(entity); + } + + private void OnOpened(Entity entity, ref OpenableOpenedEvent args) + { + // Make sure the opener is actually holding the drink + var held = args.User != null && _hands.IsHolding(args.User.Value, entity, out _); + + SprayOrAddFizziness(entity, entity.Comp.SprayChanceModOnOpened, -1, held ? args.User : null); + } + + private void OnShake(Entity entity, ref ShakeEvent args) + { + SprayOrAddFizziness(entity, entity.Comp.SprayChanceModOnShake, entity.Comp.FizzinessAddedOnShake, args.Shaker); + } + + private void OnLand(Entity entity, ref LandEvent args) + { + SprayOrAddFizziness(entity, entity.Comp.SprayChanceModOnLand, entity.Comp.FizzinessAddedOnLand); + } + + private void OnSolutionUpdate(Entity entity, ref SolutionContainerChangedEvent args) + { + if (args.SolutionId != entity.Comp.Solution) + return; + + // If the solution is no longer capable of being fizzy, clear any built up fizziness + if (SolutionFizzability(entity) <= 0) + TryClearFizziness((entity, entity.Comp)); + } + + #endregion +} + +[ByRefEvent] +public record struct AttemptAddFizzinessEvent(Entity Entity, float Amount) +{ + public bool Cancelled; +} diff --git a/Content.Shared/Nutrition/EntitySystems/ShakeableSystem.cs b/Content.Shared/Nutrition/EntitySystems/ShakeableSystem.cs new file mode 100644 index 00000000000..39890aada93 --- /dev/null +++ b/Content.Shared/Nutrition/EntitySystems/ShakeableSystem.cs @@ -0,0 +1,155 @@ +using Content.Shared.DoAfter; +using Content.Shared.Hands.EntitySystems; +using Content.Shared.IdentityManagement; +using Content.Shared.Nutrition.Components; +using Content.Shared.Popups; +using Content.Shared.Verbs; +using Robust.Shared.Audio.Systems; +using Robust.Shared.Serialization; + +namespace Content.Shared.Nutrition.EntitySystems; + +public sealed partial class ShakeableSystem : EntitySystem +{ + [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly SharedDoAfterSystem _doAfter = default!; + [Dependency] private readonly SharedHandsSystem _hands = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent>(AddShakeVerb); + SubscribeLocalEvent(OnShakeDoAfter); + } + + private void AddShakeVerb(EntityUid uid, ShakeableComponent component, GetVerbsEvent args) + { + if (args.Hands == null || !args.CanAccess || !args.CanInteract) + return; + + if (!CanShake((uid, component), args.User)) + return; + + var shakeVerb = new Verb() + { + Text = Loc.GetString(component.ShakeVerbText), + Act = () => TryStartShake((args.Target, component), args.User) + }; + args.Verbs.Add(shakeVerb); + } + + private void OnShakeDoAfter(Entity entity, ref ShakeDoAfterEvent args) + { + if (args.Handled || args.Cancelled) + return; + + TryShake((entity, entity.Comp), args.User); + } + + /// + /// Attempts to start the doAfter to shake the entity. + /// Fails and returns false if the entity cannot be shaken for any reason. + /// If successful, displays popup messages, plays shake sound, and starts the doAfter. + /// + public bool TryStartShake(Entity entity, EntityUid user) + { + if (!Resolve(entity, ref entity.Comp)) + return false; + + if (!CanShake(entity, user)) + return false; + + var doAfterArgs = new DoAfterArgs(EntityManager, + user, + entity.Comp.ShakeDuration, + new ShakeDoAfterEvent(), + eventTarget: entity, + target: user, + used: entity) + { + NeedHand = true, + BreakOnDamage = true, + DistanceThreshold = 1, + MovementThreshold = 0.01f, + BreakOnHandChange = entity.Comp.RequireInHand, + }; + if (entity.Comp.RequireInHand) + doAfterArgs.BreakOnHandChange = true; + + if (!_doAfter.TryStartDoAfter(doAfterArgs)) + return false; + + var userName = Identity.Entity(user, EntityManager); + var shakeableName = Identity.Entity(entity, EntityManager); + + var selfMessage = Loc.GetString(entity.Comp.ShakePopupMessageSelf, ("user", userName), ("shakeable", shakeableName)); + var othersMessage = Loc.GetString(entity.Comp.ShakePopupMessageOthers, ("user", userName), ("shakeable", shakeableName)); + _popup.PopupPredicted(selfMessage, othersMessage, user, user); + + _audio.PlayPredicted(entity.Comp.ShakeSound, entity, user); + + return true; + } + + /// + /// Attempts to shake the entity, skipping the doAfter. + /// Fails and returns false if the entity cannot be shaken for any reason. + /// If successful, raises a ShakeEvent on the entity. + /// + public bool TryShake(Entity entity, EntityUid? user = null) + { + if (!Resolve(entity, ref entity.Comp)) + return false; + + if (!CanShake(entity, user)) + return false; + + var ev = new ShakeEvent(user); + RaiseLocalEvent(entity, ref ev); + + return true; + } + + + /// + /// Is it possible for the given user to shake the entity? + /// + public bool CanShake(Entity entity, EntityUid? user = null) + { + if (!Resolve(entity, ref entity.Comp, false)) + return false; + + // If required to be in hand, fail if the user is not holding this entity + if (user != null && entity.Comp.RequireInHand && !_hands.IsHolding(user.Value, entity, out _)) + return false; + + var attemptEv = new AttemptShakeEvent(); + RaiseLocalEvent(entity, ref attemptEv); + if (attemptEv.Cancelled) + return false; + return true; + } +} + +/// +/// Raised when a ShakeableComponent is shaken, after the doAfter completes. +/// +[ByRefEvent] +public record struct ShakeEvent(EntityUid? Shaker); + +/// +/// Raised when trying to shake a ShakeableComponent. If cancelled, the +/// entity will not be shaken. +/// +[ByRefEvent] +public record struct AttemptShakeEvent() +{ + public bool Cancelled; +} + +[Serializable, NetSerializable] +public sealed partial class ShakeDoAfterEvent : SimpleDoAfterEvent +{ +} diff --git a/Content.Shared/Nutrition/EntitySystems/SharedDrinkSystem.cs b/Content.Shared/Nutrition/EntitySystems/SharedDrinkSystem.cs new file mode 100644 index 00000000000..7cae3b92086 --- /dev/null +++ b/Content.Shared/Nutrition/EntitySystems/SharedDrinkSystem.cs @@ -0,0 +1,90 @@ +using Content.Shared.Chemistry.Components.SolutionManager; +using Content.Shared.Chemistry.EntitySystems; +using Content.Shared.Examine; +using Content.Shared.FixedPoint; +using Content.Shared.Nutrition.Components; + +namespace Content.Shared.Nutrition.EntitySystems; + +public abstract partial class SharedDrinkSystem : EntitySystem +{ + [Dependency] private readonly SharedSolutionContainerSystem _solutionContainer = default!; + [Dependency] private readonly OpenableSystem _openable = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnAttemptShake); + SubscribeLocalEvent(OnExamined); + } + + protected void OnAttemptShake(Entity entity, ref AttemptShakeEvent args) + { + if (IsEmpty(entity, entity.Comp)) + args.Cancelled = true; + } + + protected void OnExamined(Entity entity, ref ExaminedEvent args) + { + TryComp(entity, out var openable); + if (_openable.IsClosed(entity.Owner, null, openable) || !args.IsInDetailsRange || !entity.Comp.Examinable) + return; + + var empty = IsEmpty(entity, entity.Comp); + if (empty) + { + args.PushMarkup(Loc.GetString("drink-component-on-examine-is-empty")); + return; + } + + if (HasComp(entity)) + { + //provide exact measurement for beakers + args.PushText(Loc.GetString("drink-component-on-examine-exact-volume", ("amount", DrinkVolume(entity, entity.Comp)))); + } + else + { + //general approximation + var remainingString = (int) _solutionContainer.PercentFull(entity) switch + { + 100 => "drink-component-on-examine-is-full", + > 66 => "drink-component-on-examine-is-mostly-full", + > 33 => HalfEmptyOrHalfFull(args), + _ => "drink-component-on-examine-is-mostly-empty", + }; + args.PushMarkup(Loc.GetString(remainingString)); + } + } + + protected FixedPoint2 DrinkVolume(EntityUid uid, DrinkComponent? component = null) + { + if (!Resolve(uid, ref component)) + return FixedPoint2.Zero; + + if (!_solutionContainer.TryGetSolution(uid, component.Solution, out _, out var sol)) + return FixedPoint2.Zero; + + return sol.Volume; + } + + protected bool IsEmpty(EntityUid uid, DrinkComponent? component = null) + { + if (!Resolve(uid, ref component)) + return true; + + return DrinkVolume(uid, component) <= 0; + } + + // some see half empty, and others see half full + private string HalfEmptyOrHalfFull(ExaminedEvent args) + { + string remainingString = "drink-component-on-examine-is-half-full"; + + if (TryComp(args.Examiner, out var examiner) && examiner.EntityName.Length > 0 + && string.Compare(examiner.EntityName.Substring(0, 1), "m", StringComparison.InvariantCultureIgnoreCase) > 0) + remainingString = "drink-component-on-examine-is-half-empty"; + + return remainingString; + } +} diff --git a/Content.Shared/Nutrition/EntitySystems/ThirstSystem.cs b/Content.Shared/Nutrition/EntitySystems/ThirstSystem.cs index f1ddc9b2b5e..a068b19104c 100644 --- a/Content.Shared/Nutrition/EntitySystems/ThirstSystem.cs +++ b/Content.Shared/Nutrition/EntitySystems/ThirstSystem.cs @@ -3,9 +3,12 @@ using Content.Shared.Movement.Systems; using Content.Shared.Nutrition.Components; using Content.Shared.Rejuvenate; +using Content.Shared.StatusIcon; using JetBrains.Annotations; +using Robust.Shared.Prototypes; using Robust.Shared.Random; using Robust.Shared.Timing; +using Robust.Shared.Utility; using Content.Shared.Mood; using Robust.Shared.Configuration; using Content.Shared.CCVar; @@ -16,16 +19,34 @@ namespace Content.Shared.Nutrition.EntitySystems; public sealed class ThirstSystem : EntitySystem { [Dependency] private readonly IGameTiming _timing = default!; + [Dependency] private readonly IPrototypeManager _prototype = default!; [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly AlertsSystem _alerts = default!; [Dependency] private readonly MovementSpeedModifierSystem _movement = default!; [Dependency] private readonly SharedJetpackSystem _jetpack = default!; [Dependency] private readonly IConfigurationManager _config = default!; + [ValidatePrototypeId] + private const string ThirstIconOverhydratedId = "ThirstIconOverhydrated"; + + [ValidatePrototypeId] + private const string ThirstIconThirstyId = "ThirstIconThirsty"; + + [ValidatePrototypeId] + private const string ThirstIconParchedId = "ThirstIconParched"; + + private StatusIconPrototype? _thirstIconOverhydrated = null; + private StatusIconPrototype? _thirstIconThirsty = null; + private StatusIconPrototype? _thirstIconParched = null; + public override void Initialize() { base.Initialize(); + DebugTools.Assert(_prototype.TryIndex(ThirstIconOverhydratedId, out _thirstIconOverhydrated) && + _prototype.TryIndex(ThirstIconThirstyId, out _thirstIconThirsty) && + _prototype.TryIndex(ThirstIconParchedId, out _thirstIconParched)); + SubscribeLocalEvent(OnRefreshMovespeed); SubscribeLocalEvent(OnMapInit); SubscribeLocalEvent(OnRejuvenate); @@ -112,6 +133,28 @@ private bool IsMovementThreshold(ThirstThreshold threshold) } } + public bool TryGetStatusIconPrototype(ThirstComponent component, out StatusIconPrototype? prototype) + { + switch (component.CurrentThirstThreshold) + { + case ThirstThreshold.OverHydrated: + prototype = _thirstIconOverhydrated; + return true; + + case ThirstThreshold.Thirsty: + prototype = _thirstIconThirsty; + return true; + + case ThirstThreshold.Parched: + prototype = _thirstIconParched; + return true; + + default: + prototype = null; + return false; + } + } + private void UpdateEffects(EntityUid uid, ThirstComponent component) { if (!_config.GetCVar(CCVars.MoodEnabled) diff --git a/Content.Shared/Nyanotrasen/Mail/MailDeliveryPoolPrototype.cs b/Content.Shared/Nyanotrasen/Mail/MailDeliveryPoolPrototype.cs index 544f489d28f..4de374a164c 100644 --- a/Content.Shared/Nyanotrasen/Mail/MailDeliveryPoolPrototype.cs +++ b/Content.Shared/Nyanotrasen/Mail/MailDeliveryPoolPrototype.cs @@ -6,7 +6,7 @@ namespace Content.Shared.Mail; /// Generic random weighting dataset to use. /// [Prototype("mailDeliveryPool")] -public sealed class MailDeliveryPoolPrototype : IPrototype +public sealed partial class MailDeliveryPoolPrototype : IPrototype { [IdDataFieldAttribute] public string ID { get; } = default!; diff --git a/Content.Shared/Objectives/ObjectiveInfo.cs b/Content.Shared/Objectives/ObjectiveInfo.cs index 689fe17e6c8..0b7e7a15f6e 100644 --- a/Content.Shared/Objectives/ObjectiveInfo.cs +++ b/Content.Shared/Objectives/ObjectiveInfo.cs @@ -1,3 +1,4 @@ +using Content.Shared.Objectives.Components; using Robust.Shared.Serialization; using Robust.Shared.Utility; diff --git a/Content.Shared/Overlays/ShowCriminalRecordIconsComponent.cs b/Content.Shared/Overlays/ShowCriminalRecordIconsComponent.cs new file mode 100644 index 00000000000..cb0759be3ee --- /dev/null +++ b/Content.Shared/Overlays/ShowCriminalRecordIconsComponent.cs @@ -0,0 +1,9 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Overlays; + +/// +/// This component allows you to see criminal record status of mobs. +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class ShowCriminalRecordIconsComponent : Component { } diff --git a/Content.Shared/Overlays/ShowHungerIconsComponent.cs b/Content.Shared/Overlays/ShowHungerIconsComponent.cs index bf1fb2dc19d..b3841bd80ff 100644 --- a/Content.Shared/Overlays/ShowHungerIconsComponent.cs +++ b/Content.Shared/Overlays/ShowHungerIconsComponent.cs @@ -3,7 +3,7 @@ namespace Content.Shared.Overlays; /// -/// This component allows you to see the hungriness of mobs. +/// This component allows you to see the hungriness of mobs. /// [RegisterComponent, NetworkedComponent] public sealed partial class ShowHungerIconsComponent : Component { } diff --git a/Content.Shared/Overlays/ShowJobIconsComponent.cs b/Content.Shared/Overlays/ShowJobIconsComponent.cs new file mode 100644 index 00000000000..aae97395063 --- /dev/null +++ b/Content.Shared/Overlays/ShowJobIconsComponent.cs @@ -0,0 +1,9 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Overlays; + +/// +/// This component allows you to see job icons above mobs. +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class ShowJobIconsComponent : Component { } diff --git a/Content.Shared/Overlays/ShowMindShieldIconsComponent.cs b/Content.Shared/Overlays/ShowMindShieldIconsComponent.cs new file mode 100644 index 00000000000..624d5ab8efc --- /dev/null +++ b/Content.Shared/Overlays/ShowMindShieldIconsComponent.cs @@ -0,0 +1,9 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Overlays; + +/// +/// This component allows you to see mindshield icons above mobs. +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class ShowMindShieldIconsComponent : Component { } diff --git a/Content.Shared/Overlays/ShowSecurityIconsComponent.cs b/Content.Shared/Overlays/ShowSecurityIconsComponent.cs deleted file mode 100644 index ec268174d18..00000000000 --- a/Content.Shared/Overlays/ShowSecurityIconsComponent.cs +++ /dev/null @@ -1,9 +0,0 @@ -using Robust.Shared.GameStates; - -namespace Content.Shared.Overlays; - -/// -/// This component allows you to see job icons above mobs. -/// -[RegisterComponent, NetworkedComponent] -public sealed partial class ShowSecurityIconsComponent : Component { } diff --git a/Content.Shared/Overlays/ShowSyndicateIconsComponent.cs b/Content.Shared/Overlays/ShowSyndicateIconsComponent.cs index 74a67db694a..a63eae8e466 100644 --- a/Content.Shared/Overlays/ShowSyndicateIconsComponent.cs +++ b/Content.Shared/Overlays/ShowSyndicateIconsComponent.cs @@ -3,7 +3,7 @@ namespace Content.Shared.Overlays; /// -/// +/// This component allows you to identify members of the Syndicate faction. /// [RegisterComponent, NetworkedComponent] public sealed partial class ShowSyndicateIconsComponent : Component {} diff --git a/Content.Shared/Overlays/ShowThirstIconsComponent.cs b/Content.Shared/Overlays/ShowThirstIconsComponent.cs index 905ab07fe23..1914034e9e3 100644 --- a/Content.Shared/Overlays/ShowThirstIconsComponent.cs +++ b/Content.Shared/Overlays/ShowThirstIconsComponent.cs @@ -3,7 +3,7 @@ namespace Content.Shared.Overlays; /// -/// This component allows you to see the thirstiness of mobs. +/// This component allows you to see the thirstiness of mobs. /// [RegisterComponent, NetworkedComponent] public sealed partial class ShowThirstIconsComponent : Component { } diff --git a/Content.Shared/Paper/SharedPaperComponent.cs b/Content.Shared/Paper/SharedPaperComponent.cs index dd87f9f907a..f65a599e539 100644 --- a/Content.Shared/Paper/SharedPaperComponent.cs +++ b/Content.Shared/Paper/SharedPaperComponent.cs @@ -1,8 +1,10 @@ using Robust.Shared.Audio; +using Robust.Shared.GameStates; using Robust.Shared.Serialization; namespace Content.Shared.Paper; +[NetworkedComponent] public abstract partial class SharedPaperComponent : Component { /// diff --git a/Content.Shared/Payload/Components/PayloadTriggerComponent.cs b/Content.Shared/Payload/Components/PayloadTriggerComponent.cs index 6d3df41ac97..b064e91198c 100644 --- a/Content.Shared/Payload/Components/PayloadTriggerComponent.cs +++ b/Content.Shared/Payload/Components/PayloadTriggerComponent.cs @@ -1,3 +1,4 @@ +using Content.Shared.Explosion.Components; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; diff --git a/Content.Shared/Physics/CollisionGroup.cs b/Content.Shared/Physics/CollisionGroup.cs index 1c10fefd5dc..775ccb7c446 100644 --- a/Content.Shared/Physics/CollisionGroup.cs +++ b/Content.Shared/Physics/CollisionGroup.cs @@ -48,6 +48,9 @@ public enum CollisionGroup MachineLayer = Opaque | MidImpassable | LowImpassable | BulletImpassable, ConveyorMask = Impassable | MidImpassable | LowImpassable | DoorPassable, + // Crates + CrateMask = Impassable | HighImpassable | LowImpassable, + // Tables that SmallMobs can go under TableMask = Impassable | MidImpassable, TableLayer = MidImpassable, diff --git a/Content.Shared/Pinpointer/NavMapComponent.cs b/Content.Shared/Pinpointer/NavMapComponent.cs index 8c9979ba25a..d77169d32ed 100644 --- a/Content.Shared/Pinpointer/NavMapComponent.cs +++ b/Content.Shared/Pinpointer/NavMapComponent.cs @@ -1,9 +1,13 @@ +using System.Linq; +using Content.Shared.Atmos; using Robust.Shared.GameStates; +using Robust.Shared.Serialization; +using Robust.Shared.Timing; namespace Content.Shared.Pinpointer; /// -/// Used to store grid poly data to be used for UIs. +/// Used to store grid data to be used for UIs. /// [RegisterComponent, NetworkedComponent] public sealed partial class NavMapComponent : Component @@ -12,25 +16,47 @@ public sealed partial class NavMapComponent : Component * Don't need DataFields as this can be reconstructed */ + /// + /// Bitmasks that represent chunked tiles. + /// [ViewVariables] - public readonly Dictionary Chunks = new(); + public Dictionary Chunks = new(); - [ViewVariables] public readonly List Beacons = new(); - - [ViewVariables] public readonly List Airlocks = new(); + /// + /// List of station beacons. + /// + [ViewVariables] + public Dictionary Beacons = new(); } -public sealed class NavMapChunk +[Serializable, NetSerializable] +public sealed class NavMapChunk(Vector2i origin) { - public readonly Vector2i Origin; + /// + /// The chunk origin + /// + [ViewVariables] + public readonly Vector2i Origin = origin; + + /// + /// Array containing the chunk's data. The + /// + [ViewVariables] + public int[] TileData = new int[SharedNavMapSystem.ArraySize]; /// - /// Bitmask for tiles, 1 for occupied and 0 for empty. + /// The last game tick that the chunk was updated /// - public int TileData; + [NonSerialized] + public GameTick LastUpdate; +} - public NavMapChunk(Vector2i origin) - { - Origin = origin; - } +public enum NavMapChunkType : byte +{ + // Values represent bit shift offsets when retrieving data in the tile array. + Invalid = byte.MaxValue, + Floor = 0, // I believe floors have directional information for diagonal tiles? + Wall = SharedNavMapSystem.Directions, + Airlock = 2 * SharedNavMapSystem.Directions, } + diff --git a/Content.Shared/Pinpointer/SharedNavMapSystem.cs b/Content.Shared/Pinpointer/SharedNavMapSystem.cs index 17f86ac7e68..7c12321b5db 100644 --- a/Content.Shared/Pinpointer/SharedNavMapSystem.cs +++ b/Content.Shared/Pinpointer/SharedNavMapSystem.cs @@ -1,49 +1,187 @@ +using System.Diagnostics.CodeAnalysis; using System.Numerics; +using System.Runtime.CompilerServices; +using Content.Shared.Tag; +using Robust.Shared.GameStates; using Robust.Shared.Serialization; +using Robust.Shared.Timing; using Robust.Shared.Utility; namespace Content.Shared.Pinpointer; public abstract class SharedNavMapSystem : EntitySystem { - public const byte ChunkSize = 4; + public const int Categories = 3; + public const int Directions = 4; // Not directly tied to number of atmos directions - /// - /// Converts the chunk's tile into a bitflag for the slot. - /// - public static int GetFlag(Vector2i relativeTile) + public const int ChunkSize = 8; + public const int ArraySize = ChunkSize* ChunkSize; + + public const int AllDirMask = (1 << Directions) - 1; + public const int AirlockMask = AllDirMask << (int) NavMapChunkType.Airlock; + public const int WallMask = AllDirMask << (int) NavMapChunkType.Wall; + public const int FloorMask = AllDirMask << (int) NavMapChunkType.Floor; + + [Robust.Shared.IoC.Dependency] private readonly TagSystem _tagSystem = default!; + + private readonly string[] _wallTags = ["Wall", "Window"]; + private EntityQuery _doorQuery; + + public override void Initialize() { - return 1 << (relativeTile.X * ChunkSize + relativeTile.Y); + base.Initialize(); + + // Data handling events + SubscribeLocalEvent(OnGetState); + _doorQuery = GetEntityQuery(); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static int GetTileIndex(Vector2i relativeTile) + { + return relativeTile.X * ChunkSize + relativeTile.Y; } /// - /// Converts the chunk's tile into a bitflag for the slot. + /// Inverse of /// - public static Vector2i GetTile(int flag) + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector2i GetTileFromIndex(int index) + { + var x = index / ChunkSize; + var y = index % ChunkSize; + return new Vector2i(x, y); + } + + public NavMapChunkType GetEntityType(EntityUid uid) { - var value = Math.Log2(flag); - var x = (int) value / ChunkSize; - var y = (int) value % ChunkSize; - var result = new Vector2i(x, y); + if (_doorQuery.HasComp(uid)) + return NavMapChunkType.Airlock; - DebugTools.Assert(GetFlag(result) == flag); + if (_tagSystem.HasAnyTag(uid, _wallTags)) + return NavMapChunkType.Wall; - return new Vector2i(x, y); + return NavMapChunkType.Invalid; } - [Serializable, NetSerializable] - protected sealed class NavMapComponentState : ComponentState + protected bool TryCreateNavMapBeaconData(EntityUid uid, NavMapBeaconComponent component, TransformComponent xform, MetaDataComponent meta, [NotNullWhen(true)] out NavMapBeacon? beaconData) + { + beaconData = null; + + if (!component.Enabled || xform.GridUid == null || !xform.Anchored) + return false; + + var name = component.Text; + if (string.IsNullOrEmpty(name)) + name = meta.EntityName; + + beaconData = new NavMapBeacon(meta.NetEntity, component.Color, name, xform.LocalPosition); + + return true; + } + + #region: Event handling + + private void OnGetState(EntityUid uid, NavMapComponent component, ref ComponentGetState args) { - public Dictionary TileData = new(); + Dictionary chunks; + + // Should this be a full component state or a delta-state? + if (args.FromTick <= component.CreationTick) + { + // Full state + chunks = new(component.Chunks.Count); + foreach (var (origin, chunk) in component.Chunks) + { + chunks.Add(origin, chunk.TileData); + } - public List Beacons = new(); + args.State = new NavMapState(chunks, component.Beacons); + return; + } - public List Airlocks = new(); + chunks = new(); + foreach (var (origin, chunk) in component.Chunks) + { + if (chunk.LastUpdate < args.FromTick) + continue; + + chunks.Add(origin, chunk.TileData); + } + + args.State = new NavMapDeltaState(chunks, component.Beacons, new(component.Chunks.Keys)); + } + + #endregion + + #region: System messages + + [Serializable, NetSerializable] + protected sealed class NavMapState( + Dictionary chunks, + Dictionary beacons) + : ComponentState + { + public Dictionary Chunks = chunks; + public Dictionary Beacons = beacons; } [Serializable, NetSerializable] - public readonly record struct NavMapBeacon(Color Color, string Text, Vector2 Position); + protected sealed class NavMapDeltaState( + Dictionary modifiedChunks, + Dictionary beacons, + HashSet allChunks) + : ComponentState, IComponentDeltaState + { + public Dictionary ModifiedChunks = modifiedChunks; + public Dictionary Beacons = beacons; + public HashSet AllChunks = allChunks; + + public void ApplyToFullState(NavMapState state) + { + foreach (var key in state.Chunks.Keys) + { + if (!AllChunks!.Contains(key)) + state.Chunks.Remove(key); + } + + foreach (var (index, data) in ModifiedChunks) + { + if (!state.Chunks.TryGetValue(index, out var stateValue)) + state.Chunks[index] = stateValue = new int[data.Length]; + + Array.Copy(data, stateValue, data.Length); + } + + state.Beacons.Clear(); + foreach (var (nuid, beacon) in Beacons) + { + state.Beacons.Add(nuid, beacon); + } + } + + public NavMapState CreateNewFullState(NavMapState state) + { + var chunks = new Dictionary(state.Chunks.Count); + foreach (var (index, data) in state.Chunks) + { + if (!AllChunks!.Contains(index)) + continue; + + var newData = chunks[index] = new int[ArraySize]; + + if (ModifiedChunks.TryGetValue(index, out var updatedData)) + Array.Copy(newData, updatedData, ArraySize); + else + Array.Copy(newData, data, ArraySize); + } + + return new NavMapState(chunks, new(Beacons)); + } + } [Serializable, NetSerializable] - public readonly record struct NavMapAirlock(Vector2 Position); + public record struct NavMapBeacon(NetEntity NetEnt, Color Color, string Text, Vector2 Position); + + #endregion } diff --git a/Content.Shared/Players/JobWhitelist/MsgJobWhitelist.cs b/Content.Shared/Players/JobWhitelist/MsgJobWhitelist.cs new file mode 100644 index 00000000000..27b0b6c6145 --- /dev/null +++ b/Content.Shared/Players/JobWhitelist/MsgJobWhitelist.cs @@ -0,0 +1,33 @@ +using Lidgren.Network; +using Robust.Shared.Network; +using Robust.Shared.Serialization; + +namespace Content.Shared.Players.JobWhitelist; + +public sealed class MsgJobWhitelist : NetMessage +{ + public override MsgGroups MsgGroup => MsgGroups.EntityEvent; + + public HashSet Whitelist = new(); + + public override void ReadFromBuffer(NetIncomingMessage buffer, IRobustSerializer serializer) + { + var count = buffer.ReadVariableInt32(); + Whitelist.EnsureCapacity(count); + + for (var i = 0; i < count; i++) + { + Whitelist.Add(buffer.ReadString()); + } + } + + public override void WriteToBuffer(NetOutgoingMessage buffer, IRobustSerializer serializer) + { + buffer.WriteVariableInt32(Whitelist.Count); + + foreach (var ban in Whitelist) + { + buffer.Write(ban); + } + } +} diff --git a/Content.Shared/Players/PlayTimeTracking/PlayTimeTrackingShared.cs b/Content.Shared/Players/PlayTimeTracking/PlayTimeTrackingShared.cs index e300524d876..ccaf9c17dd4 100644 --- a/Content.Shared/Players/PlayTimeTracking/PlayTimeTrackingShared.cs +++ b/Content.Shared/Players/PlayTimeTracking/PlayTimeTrackingShared.cs @@ -1,9 +1,18 @@ -namespace Content.Shared.Players.PlayTimeTracking; +using Content.Shared.Dataset; + +namespace Content.Shared.Players.PlayTimeTracking; public static class PlayTimeTrackingShared { /// /// The prototype ID of the play time tracker that represents overall playtime, i.e. not tied to any one role. /// + [ValidatePrototypeId] public const string TrackerOverall = "Overall"; + + /// + /// The prototype ID of the play time tracker that represents admin time, when a player is in game as admin. + /// + [ValidatePrototypeId] + public const string TrackerAdmin = "Admin"; } diff --git a/Content.Shared/Plunger/Systems/PlungerSystem.cs b/Content.Shared/Plunger/Systems/PlungerSystem.cs index 192a0185646..6e07657941b 100644 --- a/Content.Shared/Plunger/Systems/PlungerSystem.cs +++ b/Content.Shared/Plunger/Systems/PlungerSystem.cs @@ -17,8 +17,8 @@ namespace Content.Shared.Plunger.Systems; /// public sealed class PlungerSystem : EntitySystem { - [Dependency] protected readonly IPrototypeManager _proto = default!; - [Dependency] protected readonly IRobustRandom _random = default!; + [Dependency] private readonly IPrototypeManager _proto = default!; + [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly SharedDoAfterSystem _doAfter = default!; [Dependency] private readonly SharedPopupSystem _popup = default!; diff --git a/Content.Shared/Polymorph/Components/ChameleonDisguiseComponent.cs b/Content.Shared/Polymorph/Components/ChameleonDisguiseComponent.cs new file mode 100644 index 00000000000..2b9fba7b391 --- /dev/null +++ b/Content.Shared/Polymorph/Components/ChameleonDisguiseComponent.cs @@ -0,0 +1,25 @@ +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared.Polymorph.Components; + +/// +/// Component added to disguise entities. +/// Used by client to copy over appearance from the disguise's source entity. +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState(true)] +public sealed partial class ChameleonDisguiseComponent : Component +{ + /// + /// The disguise source entity for copying the sprite. + /// + [DataField, AutoNetworkedField] + public EntityUid SourceEntity; + + /// + /// The source entity's prototype. + /// Used as a fallback if the source entity was deleted. + /// + [DataField, AutoNetworkedField] + public EntProtoId? SourceProto; +} diff --git a/Content.Shared/Polymorph/Components/ChameleonProjectorComponent.cs b/Content.Shared/Polymorph/Components/ChameleonProjectorComponent.cs new file mode 100644 index 00000000000..239b5236f27 --- /dev/null +++ b/Content.Shared/Polymorph/Components/ChameleonProjectorComponent.cs @@ -0,0 +1,68 @@ +using Content.Shared.Polymorph; +using Content.Shared.Polymorph.Systems; +using Content.Shared.Whitelist; +using Robust.Shared.Prototypes; + +namespace Content.Shared.Polymorph.Components; + +/// +/// A chameleon projector polymorphs you into a clicked entity, then polymorphs back when clicked on or destroyed. +/// This creates a new dummy polymorph entity and copies the appearance over. +/// +[RegisterComponent, Access(typeof(SharedChameleonProjectorSystem))] +public sealed partial class ChameleonProjectorComponent : Component +{ + /// + /// If non-null, whitelist for valid entities to disguise as. + /// + [DataField(required: true)] + public EntityWhitelist? Whitelist; + + /// + /// If non-null, blacklist that prevents entities from being used even if they are in the whitelist. + /// + [DataField(required: true)] + public EntityWhitelist? Blacklist; + + /// + /// Polymorph configuration for the disguise entity. + /// + [DataField(required: true)] + public PolymorphConfiguration Polymorph = new(); + + /// + /// Action for disabling your disguise's rotation. + /// + [DataField] + public EntProtoId NoRotAction = "ActionDisguiseNoRot"; + + /// + /// Action for anchoring your disguise in place. + /// + [DataField] + public EntProtoId AnchorAction = "ActionDisguiseAnchor"; + + /// + /// Minimum health to give the disguise. + /// + [DataField] + public float MinHealth = 1f; + + /// + /// Maximum health to give the disguise, health scales with mass. + /// + [DataField] + public float MaxHealth = 100f; + + /// + /// Popup shown to the user when they try to disguise as an invalid entity. + /// + [DataField] + public LocId InvalidPopup = "chameleon-projector-invalid"; + + /// + /// Popup shown to the user when they disguise as a valid entity. + /// + [DataField] + public LocId SuccessPopup = "chameleon-projector-success"; +} diff --git a/Content.Shared/Polymorph/Systems/SharedChameleonProjectorSystem.cs b/Content.Shared/Polymorph/Systems/SharedChameleonProjectorSystem.cs new file mode 100644 index 00000000000..c1abfc526f5 --- /dev/null +++ b/Content.Shared/Polymorph/Systems/SharedChameleonProjectorSystem.cs @@ -0,0 +1,113 @@ +using Content.Shared.Actions; +using Content.Shared.Interaction; +using Content.Shared.Polymorph; +using Content.Shared.Polymorph.Components; +using Content.Shared.Popups; +using Robust.Shared.Serialization.Manager; +using Robust.Shared.Prototypes; +using System.Diagnostics.CodeAnalysis; + +namespace Content.Shared.Polymorph.Systems; + +/// +/// Handles whitelist/blacklist checking. +/// Actual polymorphing and deactivation is done serverside. +/// +public abstract class SharedChameleonProjectorSystem : EntitySystem +{ + [Dependency] private readonly IPrototypeManager _proto = default!; + [Dependency] private readonly ISerializationManager _serMan = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnInteract); + } + + private void OnInteract(Entity ent, ref AfterInteractEvent args) + { + if (!args.CanReach || args.Target is not {} target) + return; + + var user = args.User; + args.Handled = true; + + if (IsInvalid(ent.Comp, target)) + { + _popup.PopupClient(Loc.GetString(ent.Comp.InvalidPopup), target, user); + return; + } + + _popup.PopupClient(Loc.GetString(ent.Comp.SuccessPopup), target, user); + Disguise(ent.Comp, user, target); + } + + /// + /// Returns true if an entity cannot be used as a disguise. + /// + public bool IsInvalid(ChameleonProjectorComponent comp, EntityUid target) + { + return (comp.Whitelist?.IsValid(target, EntityManager) == false) + || (comp.Blacklist?.IsValid(target, EntityManager) == true); + } + + /// + /// On server, polymorphs the user into an entity and sets up the disguise. + /// + public virtual void Disguise(ChameleonProjectorComponent comp, EntityUid user, EntityUid entity) + { + } + + /// + /// Copy a component from the source entity/prototype to the disguise entity. + /// + /// + /// This would probably be a good thing to add to engine in the future. + /// + protected bool CopyComp(Entity ent) where T: Component, new() + { + if (!GetSrcComp(ent.Comp, out var src)) + return true; + + // remove then re-add to prevent a funny + RemComp(ent); + var dest = AddComp(ent); + _serMan.CopyTo(src, ref dest, notNullableOverride: true); + Dirty(ent, dest); + return false; + } + + /// + /// Try to get a single component from the source entity/prototype. + /// + private bool GetSrcComp(ChameleonDisguiseComponent comp, [NotNullWhen(true)] out T? src) where T: Component + { + src = null; + if (TryComp(comp.SourceEntity, out src)) + return true; + + if (comp.SourceProto is not {} protoId) + return false; + + if (!_proto.TryIndex(protoId, out var proto)) + return false; + + return proto.TryGetComponent(out src); + } +} + +/// +/// Action event for toggling transform NoRot on a disguise. +/// +public sealed partial class DisguiseToggleNoRotEvent : InstantActionEvent +{ +} + +/// +/// Action event for toggling transform Anchored on a disguise. +/// +public sealed partial class DisguiseToggleAnchoredEvent : InstantActionEvent +{ +} diff --git a/Content.Shared/Popups/SharedPopupSystem.cs b/Content.Shared/Popups/SharedPopupSystem.cs index 10e8ca9be11..38d2030cd5a 100644 --- a/Content.Shared/Popups/SharedPopupSystem.cs +++ b/Content.Shared/Popups/SharedPopupSystem.cs @@ -82,12 +82,24 @@ public abstract class SharedPopupSystem : EntitySystem /// public abstract void PopupEntity(string? message, EntityUid uid, Filter filter, bool recordReplay, PopupType type = PopupType.Small); + /// + /// Variant of that only runs on the client, outside of prediction. + /// Useful for shared code that is always ran by both sides to avoid duplicate popups. + /// + public abstract void PopupClient(string? message, EntityUid? recipient, PopupType type = PopupType.Small); + /// /// Variant of that only runs on the client, outside of prediction. /// Useful for shared code that is always ran by both sides to avoid duplicate popups. /// public abstract void PopupClient(string? message, EntityUid uid, EntityUid? recipient, PopupType type = PopupType.Small); + /// + /// Variant of that only runs on the client, outside of prediction. + /// Useful for shared code that is always ran by both sides to avoid duplicate popups. + /// + public abstract void PopupClient(string? message, EntityCoordinates coordinates, EntityUid? recipient, PopupType type = PopupType.Small); + /// /// Variant of for use with prediction. The local client will show /// the popup to the recipient, and the server will show it to every other player in PVS range. If recipient is null, the local client diff --git a/Content.Shared/Power/Components/ActivatableUIRequiresPowerComponent.cs b/Content.Shared/Power/Components/ActivatableUIRequiresPowerComponent.cs new file mode 100644 index 00000000000..af193c8dfc3 --- /dev/null +++ b/Content.Shared/Power/Components/ActivatableUIRequiresPowerComponent.cs @@ -0,0 +1,8 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Power.Components; + +[RegisterComponent, NetworkedComponent] +public sealed partial class ActivatableUIRequiresPowerComponent : Component +{ +} diff --git a/Content.Shared/Power/SharedPowerMonitoringConsoleSystem.cs b/Content.Shared/Power/SharedPowerMonitoringConsoleSystem.cs index dc4af23c239..749f0233aa8 100644 --- a/Content.Shared/Power/SharedPowerMonitoringConsoleSystem.cs +++ b/Content.Shared/Power/SharedPowerMonitoringConsoleSystem.cs @@ -1,3 +1,4 @@ +using System.Runtime.CompilerServices; using JetBrains.Annotations; namespace Content.Shared.Power; @@ -5,4 +6,23 @@ namespace Content.Shared.Power; [UsedImplicitly] public abstract class SharedPowerMonitoringConsoleSystem : EntitySystem { + // Chunk size is limited as we require ChunkSize^2 <= 32 (number of bits in an int) + public const int ChunkSize = 5; + + /// + /// Converts the chunk's tile into a bitflag for the slot. + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static int GetFlag(Vector2i relativeTile) + { + return 1 << (relativeTile.X * ChunkSize + relativeTile.Y); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector2i GetTileFromIndex(int index) + { + var x = index / ChunkSize; + var y = index % ChunkSize; + return new Vector2i(x, y); + } } diff --git a/Content.Shared/Preferences/HumanoidCharacterProfile.cs b/Content.Shared/Preferences/HumanoidCharacterProfile.cs index a420bd879e6..304d48f3e8b 100644 --- a/Content.Shared/Preferences/HumanoidCharacterProfile.cs +++ b/Content.Shared/Preferences/HumanoidCharacterProfile.cs @@ -16,775 +16,515 @@ using Robust.Shared.Utility; using Content.Shared.Nuclear14.Special; -namespace Content.Shared.Preferences +namespace Content.Shared.Preferences; + +/// Character profile. Looks immutable, but uses non-immutable semantics internally for serialization/code sanity purposes +[DataDefinition] +[Serializable, NetSerializable] +public sealed partial class HumanoidCharacterProfile : ICharacterProfile { + private static readonly Regex RestrictedNameRegex = new("[^A-Z,a-z,0-9, -]"); + private static readonly Regex ICNameCaseRegex = new(@"^(?\w)|\b(?\w)(?=\w*$)"); + + public const int MaxNameLength = 64; + public const int MaxDescLength = 1024; + + /// Job preferences for initial spawn + [DataField] + private Dictionary _jobPriorities = new() + { + { + SharedGameTicker.FallbackOverflowJob, JobPriority.High + }, + }; + + /// Antags we have opted in to + [DataField] + private HashSet _antagPreferences = new(); + + /// Enabled traits + [DataField] + private HashSet _traitPreferences = new(); + + /// + public HashSet LoadoutPreferences => _loadoutPreferences; + + [DataField] + private HashSet _loadoutPreferences = new(); + + [DataField] + public string Name { get; set; } = "John Doe"; + + /// Detailed text that can appear for the character if is enabled + [DataField] + public string FlavorText { get; set; } = string.Empty; + + /// Associated for this profile + [DataField] + public string Species { get; set; } = SharedHumanoidAppearanceSystem.DefaultSpecies; + + [DataField] + public string Customspeciename { get; set; } = ""; + + [DataField] + public float Height { get; private set; } + + [DataField] + public float Width { get; private set; } + + [DataField] + public int Age { get; set; } = 18; + + [DataField] + public Sex Sex { get; private set; } = Sex.Male; + + [DataField] + public Gender Gender { get; private set; } = Gender.Male; + + /// + public ICharacterAppearance CharacterAppearance => Appearance; + + /// Stores markings, eye colors, etc for the profile + [DataField] + public HumanoidCharacterAppearance Appearance { get; set; } = new(); + + [DataField] + public ClothingPreference Clothing { get; set; } + [DataField] + public BackpackPreference Backpack { get; set; } + + /// When spawning into a round what's the preferred spot to spawn + [DataField] + public SpawnPriorityPreference SpawnPriority { get; private set; } = SpawnPriorityPreference.None; + + /// + public IReadOnlyDictionary JobPriorities => _jobPriorities; + + /// + public IReadOnlySet AntagPreferences => _antagPreferences; + + /// + public IReadOnlySet TraitPreferences => _traitPreferences; + + /// If we're unable to get one of our preferred jobs do we spawn as a fallback job or do we stay in lobby + [DataField] + public PreferenceUnavailableMode PreferenceUnavailable { get; private set; } = + PreferenceUnavailableMode.SpawnAsOverflow; + + public HumanoidCharacterProfile( + string name, + string flavortext, + string species, + string customspeciename, + float height, + float width, + int age, + Sex sex, + Gender gender, + HumanoidCharacterAppearance appearance, + SpawnPriorityPreference spawnPriority, + Dictionary jobPriorities, + ClothingPreference clothing, + BackpackPreference backpack, + PreferenceUnavailableMode preferenceUnavailable, + HashSet antagPreferences, + HashSet traitPreferences, + HashSet loadoutPreferences) + { + Name = name; + FlavorText = flavortext; + Species = species; + Customspeciename = customspeciename; + Height = height; + Width = width; + Age = age; + Sex = sex; + Gender = gender; + Appearance = appearance; + SpawnPriority = spawnPriority; + _jobPriorities = jobPriorities; + Clothing = clothing; + Backpack = backpack; + PreferenceUnavailable = preferenceUnavailable; + _antagPreferences = antagPreferences; + _traitPreferences = traitPreferences; + _loadoutPreferences = loadoutPreferences; + } + + /// Copy constructor + public HumanoidCharacterProfile(HumanoidCharacterProfile other) + : this( + other.Name, + other.FlavorText, + other.Species, + other.Customspeciename, + other.Height, + other.Width, + other.Age, + other.Sex, + other.Gender, + other.Appearance.Clone(), + other.SpawnPriority, + new Dictionary(other.JobPriorities), + other.Clothing, + other.Backpack, + other.PreferenceUnavailable, + new HashSet(other.AntagPreferences), + new HashSet(other.TraitPreferences), + new HashSet(other.LoadoutPreferences)) + { + } + /// - /// Character profile. Looks immutable, but uses non-immutable semantics internally for serialization/code sanity purposes. + /// Get the default humanoid character profile, using internal constant values. + /// Defaults to for the species. /// - [DataDefinition] - [Serializable, NetSerializable] - public sealed partial class HumanoidCharacterProfile : ICharacterProfile + /// + public HumanoidCharacterProfile() { - public const int MaxNameLength = 48; - public const int MaxDescLength = 1024; - - private readonly Dictionary _jobPriorities; - private readonly Dictionary _specialPriorities; - private readonly List _antagPreferences; - private readonly List _traitPreferences; - private readonly List _loadoutPreferences; - - private HumanoidCharacterProfile( - string name, - string flavortext, - string species, - float height, - float width, - int age, - Sex sex, - Gender gender, - HumanoidCharacterAppearance appearance, - ClothingPreference clothing, - BackpackPreference backpack, - SpawnPriorityPreference spawnPriority, - Dictionary jobPriorities, - PreferenceUnavailableMode preferenceUnavailable, - List antagPreferences, - List traitPreferences, - List loadoutPreferences, - Dictionary specialPriorities) - { - Name = name; - FlavorText = flavortext; - Species = species; - Height = height; - Width = width; - Age = age; - Sex = sex; - Gender = gender; - Appearance = appearance; - Clothing = clothing; - Backpack = backpack; - SpawnPriority = spawnPriority; - _jobPriorities = jobPriorities; - PreferenceUnavailable = preferenceUnavailable; - _antagPreferences = antagPreferences; - _traitPreferences = traitPreferences; - _loadoutPreferences = loadoutPreferences; - _specialPriorities = specialPriorities; - } + } - /// Copy constructor but with overridable references (to prevent useless copies) - private HumanoidCharacterProfile( - HumanoidCharacterProfile other, - Dictionary jobPriorities, - List antagPreferences, - List traitPreferences, - List loadoutPreferences, - Dictionary specialPriorities) - : this(other.Name, other.FlavorText, other.Species, other.Height, other.Width, other.Age, other.Sex, other.Gender, other.Appearance, - other.Clothing, other.Backpack, other.SpawnPriority, jobPriorities, other.PreferenceUnavailable, - antagPreferences, traitPreferences, loadoutPreferences, specialPriorities) + /// + /// Return a default character profile, based on species. + /// + /// The species to use in this default profile. The default species is . + /// Humanoid character profile with default settings. + public static HumanoidCharacterProfile DefaultWithSpecies(string species = SharedHumanoidAppearanceSystem.DefaultSpecies) + { + return new() { - } + Species = species, + }; + } - /// Copy constructor - private HumanoidCharacterProfile(HumanoidCharacterProfile other) - : this(other, new Dictionary(other.JobPriorities), - new List(other.AntagPreferences), new List(other.TraitPreferences), - new List(other.LoadoutPreferences), - new Dictionary(other.SpecialPriorities)) - { - } + // TODO: This should eventually not be a visual change only. + public static HumanoidCharacterProfile Random(HashSet? ignoredSpecies = null) + { + var prototypeManager = IoCManager.Resolve(); + var random = IoCManager.Resolve(); - public HumanoidCharacterProfile( - string name, - string flavortext, - string species, - float height, - float width, - int age, - Sex sex, - Gender gender, - HumanoidCharacterAppearance appearance, - ClothingPreference clothing, - BackpackPreference backpack, - SpawnPriorityPreference spawnPriority, - IReadOnlyDictionary jobPriorities, - PreferenceUnavailableMode preferenceUnavailable, - IReadOnlyList antagPreferences, - IReadOnlyList traitPreferences, - IReadOnlyList loadoutPreferences, - IReadOnlyDictionary specialPriorities) - : this(name, flavortext, species, height, width, age, sex, gender, appearance, clothing, backpack, spawnPriority, - new Dictionary(jobPriorities), preferenceUnavailable, - new List(antagPreferences), new List(traitPreferences), - new List(loadoutPreferences), - new Dictionary(specialPriorities)) - { - } + var species = random.Pick(prototypeManager + .EnumeratePrototypes() + .Where(x => ignoredSpecies == null ? x.RoundStart : x.RoundStart && !ignoredSpecies.Contains(x.ID)) + .ToArray() + ).ID; - /// - /// Get the default humanoid character profile, using internal constant values. - /// Defaults to for the species. - /// - /// - public HumanoidCharacterProfile() : this( - "John Doe", - "", - SharedHumanoidAppearanceSystem.DefaultSpecies, - 1f, - 1f, - 18, - Sex.Male, - Gender.Male, - new HumanoidCharacterAppearance(), - ClothingPreference.Jumpsuit, - BackpackPreference.Backpack, - SpawnPriorityPreference.None, - new Dictionary - { - {SharedGameTicker.FallbackOverflowJob, JobPriority.High} - }, - PreferenceUnavailableMode.SpawnAsOverflow, - new List(), - new List(), - new List(), - new Dictionary - { - {"Strength", SpecialPriority.Five}, - {"Perception", SpecialPriority.Five}, - {"Endurance", SpecialPriority.Five}, - {"Charisma", SpecialPriority.Five}, - {"Intelligence", SpecialPriority.Five}, - {"Agility", SpecialPriority.Five}, - {"Luck", SpecialPriority.Five} - } - ) - { - } + return RandomWithSpecies(species); + } - /// - /// Return a default character profile, based on species. - /// - /// The species to use in this default profile. The default species is . - /// Humanoid character profile with default settings. - public static HumanoidCharacterProfile DefaultWithSpecies(string species = SharedHumanoidAppearanceSystem.DefaultSpecies) - { - return new( - "John Doe", - "", - species, - 1f, - 1f, - 18, - Sex.Male, - Gender.Male, - HumanoidCharacterAppearance.DefaultWithSpecies(species), - ClothingPreference.Jumpsuit, - BackpackPreference.Backpack, - SpawnPriorityPreference.None, - new Dictionary - { - {SharedGameTicker.FallbackOverflowJob, JobPriority.High} - }, - PreferenceUnavailableMode.SpawnAsOverflow, - new List(), - new List(), - new List(), - new Dictionary - { - {"Strength", SpecialPriority.Five}, - {"Perception", SpecialPriority.Five}, - {"Endurance", SpecialPriority.Five}, - {"Charisma", SpecialPriority.Five}, - {"Intelligence", SpecialPriority.Five}, - {"Agility", SpecialPriority.Five}, - {"Luck", SpecialPriority.Five} - } - ); - } + public static HumanoidCharacterProfile RandomWithSpecies(string species = SharedHumanoidAppearanceSystem.DefaultSpecies) + { + var prototypeManager = IoCManager.Resolve(); + var random = IoCManager.Resolve(); - // TODO: This should eventually not be a visual change only. - public static HumanoidCharacterProfile Random(HashSet? ignoredSpecies = null) + var sex = Sex.Unsexed; + var age = 18; + if (prototypeManager.TryIndex(species, out var speciesPrototype)) { - var prototypeManager = IoCManager.Resolve(); - var random = IoCManager.Resolve(); + sex = random.Pick(speciesPrototype.Sexes); + age = random.Next(speciesPrototype.MinAge, speciesPrototype.OldAge); // people don't look and keep making 119 year old characters with zero rp, cap it at middle aged + } - var species = random.Pick(prototypeManager - .EnumeratePrototypes() - .Where(x => ignoredSpecies == null ? x.RoundStart : x.RoundStart && !ignoredSpecies.Contains(x.ID)) - .ToArray() - ).ID; + var gender = Gender.Epicene; - return RandomWithSpecies(species); + switch (sex) + { + case Sex.Male: + gender = Gender.Male; + break; + case Sex.Female: + gender = Gender.Female; + break; } - public static HumanoidCharacterProfile RandomWithSpecies(string species = SharedHumanoidAppearanceSystem.DefaultSpecies) + var name = GetName(species, gender); + + return new HumanoidCharacterProfile() { - var prototypeManager = IoCManager.Resolve(); - var random = IoCManager.Resolve(); - - var sex = Sex.Unsexed; - var age = 18; - var height = 1f; - var width = 1f; - if (prototypeManager.TryIndex(species, out var speciesPrototype)) - { - sex = random.Pick(speciesPrototype.Sexes); - age = random.Next(speciesPrototype.MinAge, speciesPrototype.OldAge); // people don't look and keep making 119 year old characters with zero rp, cap it at middle aged - height = random.NextFloat(speciesPrototype.MinHeight, speciesPrototype.MaxHeight); - width = random.NextFloat(speciesPrototype.MinWidth, speciesPrototype.MaxWidth); - } + Name = name, + Sex = sex, + Age = age, + Gender = gender, + Species = species, + Appearance = HumanoidCharacterAppearance.Random(species, sex), + }; + } - var gender = Gender.Epicene; + public HumanoidCharacterProfile WithName(string name) => new(this) { Name = name }; + public HumanoidCharacterProfile WithFlavorText(string flavorText) => new(this) { FlavorText = flavorText }; + public HumanoidCharacterProfile WithAge(int age) => new(this) { Age = age }; + public HumanoidCharacterProfile WithSex(Sex sex) => 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 WithHeight(float height) => new(this) { Height = height }; + public HumanoidCharacterProfile WithWidth(float width) => new(this) { Width = width }; + + public HumanoidCharacterProfile WithCharacterAppearance(HumanoidCharacterAppearance appearance) => + new(this) { Appearance = appearance }; + public HumanoidCharacterProfile WithClothingPreference(ClothingPreference clothing) => + new(this) { Clothing = clothing }; + public HumanoidCharacterProfile WithBackpackPreference(BackpackPreference backpack) => + new(this) { Backpack = backpack }; + public HumanoidCharacterProfile WithSpawnPriorityPreference(SpawnPriorityPreference spawnPriority) => + new(this) { SpawnPriority = spawnPriority }; + public HumanoidCharacterProfile WithJobPriorities(IEnumerable> jobPriorities) => + new(this) { _jobPriorities = new Dictionary(jobPriorities) }; + + public HumanoidCharacterProfile WithJobPriority(string jobId, JobPriority priority) + { + var dictionary = new Dictionary(_jobPriorities); + if (priority == JobPriority.Never) + dictionary.Remove(jobId); + else + dictionary[jobId] = priority; - switch (sex) - { - case Sex.Male: - gender = Gender.Male; - break; - case Sex.Female: - gender = Gender.Female; - break; - } - - var name = GetName(species, gender); - - return new HumanoidCharacterProfile(name, "", species, height, width, age, sex, gender, - HumanoidCharacterAppearance.Random(species, sex), ClothingPreference.Jumpsuit, - BackpackPreference.Backpack, SpawnPriorityPreference.None, - new Dictionary - { - {SharedGameTicker.FallbackOverflowJob, JobPriority.High}, - }, PreferenceUnavailableMode.StayInLobby, new List(), new List(), new List(), - new Dictionary - { - {"Strength", SpecialPriority.Five}, - {"Perception", SpecialPriority.Five}, - {"Endurance", SpecialPriority.Five}, - {"Charisma", SpecialPriority.Five}, - {"Intelligence", SpecialPriority.Five}, - {"Agility", SpecialPriority.Five}, - {"Luck", SpecialPriority.Five} - }); - } + return new(this) { _jobPriorities = dictionary }; + } - public string Name { get; private set; } - public string FlavorText { get; private set; } - [DataField("species")] - public string Species { get; private set; } + public HumanoidCharacterProfile WithPreferenceUnavailable(PreferenceUnavailableMode mode) => + new(this) { PreferenceUnavailable = mode }; + public HumanoidCharacterProfile WithAntagPreferences(IEnumerable antagPreferences) => + new(this) { _antagPreferences = new HashSet(antagPreferences) }; - [DataField("height")] - public float Height { get; private set; } + public HumanoidCharacterProfile WithAntagPreference(string antagId, bool pref) + { + var list = new HashSet(_antagPreferences); + if (pref) + list.Add(antagId); + else + list.Remove(antagId); - [DataField("width")] - public float Width { get; private set; } + return new(this) { _antagPreferences = list }; + } - [DataField("age")] - public int Age { get; private set; } + public HumanoidCharacterProfile WithTraitPreference(string traitId, bool pref) + { + var list = new HashSet(_traitPreferences); - [DataField("sex")] - public Sex Sex { get; private set; } + if (pref) + list.Add(traitId); + else + list.Remove(traitId); - [DataField("gender")] - public Gender Gender { get; private set; } + return new(this) { _traitPreferences = list }; + } - public ICharacterAppearance CharacterAppearance => Appearance; + public HumanoidCharacterProfile WithLoadoutPreference(string loadoutId, bool pref) + { + var list = new HashSet(_loadoutPreferences); - [DataField("appearance")] - public HumanoidCharacterAppearance Appearance { get; private set; } - public ClothingPreference Clothing { get; private set; } - public BackpackPreference Backpack { get; private set; } - public SpawnPriorityPreference SpawnPriority { get; private set; } - public IReadOnlyDictionary JobPriorities => _jobPriorities; - public IReadOnlyDictionary SpecialPriorities => _specialPriorities; - public IReadOnlyList AntagPreferences => _antagPreferences; - public IReadOnlyList TraitPreferences => _traitPreferences; - public IReadOnlyList LoadoutPreferences => _loadoutPreferences; - public PreferenceUnavailableMode PreferenceUnavailable { get; private set; } + if (pref) + list.Add(loadoutId); + else + list.Remove(loadoutId); - public HumanoidCharacterProfile WithName(string name) - { - return new(this) { Name = name }; - } + return new HumanoidCharacterProfile(this) { _loadoutPreferences = list }; + } - public HumanoidCharacterProfile WithFlavorText(string flavorText) - { - return new(this) { FlavorText = flavorText }; - } + public string Summary => + Loc.GetString( + "humanoid-character-profile-summary", + ("name", Name), + ("gender", Gender.ToString().ToLowerInvariant()), + ("age", Age) + ); - public HumanoidCharacterProfile WithAge(int age) - { - return new(this) { Age = age }; - } + public bool MemberwiseEquals(ICharacterProfile maybeOther) + { + return maybeOther is HumanoidCharacterProfile other + && Name == other.Name + && Age == other.Age + && Sex == other.Sex + && Gender == other.Gender + && Species == other.Species + && PreferenceUnavailable == other.PreferenceUnavailable + && SpawnPriority == other.SpawnPriority + && _jobPriorities.SequenceEqual(other._jobPriorities) + && _antagPreferences.SequenceEqual(other._antagPreferences) + && _traitPreferences.SequenceEqual(other._traitPreferences) + && LoadoutPreferences.SequenceEqual(other.LoadoutPreferences) + && Appearance.MemberwiseEquals(other.Appearance) + && FlavorText == other.FlavorText; + } - public HumanoidCharacterProfile WithSex(Sex sex) - { - return new(this) { Sex = sex }; - } + public void EnsureValid(ICommonSession session, IDependencyCollection collection) + { + var configManager = collection.Resolve(); + var prototypeManager = collection.Resolve(); - public HumanoidCharacterProfile WithGender(Gender gender) + if (!prototypeManager.TryIndex(Species, out var speciesPrototype) || speciesPrototype.RoundStart == false) { - return new(this) { Gender = gender }; + Species = SharedHumanoidAppearanceSystem.DefaultSpecies; + speciesPrototype = prototypeManager.Index(Species); } - public HumanoidCharacterProfile WithSpecies(string species) + var sex = Sex switch { - return new(this) { Species = species }; - } + Sex.Male => Sex.Male, + Sex.Female => Sex.Female, + Sex.Unsexed => Sex.Unsexed, + _ => Sex.Male // Invalid enum values. + }; - public HumanoidCharacterProfile WithHeight(float height) - { - return new(this) { Height = height }; - } + // ensure the species can be that sex and their age fits the founds + if (!speciesPrototype.Sexes.Contains(sex)) + sex = speciesPrototype.Sexes[0]; - public HumanoidCharacterProfile WithWidth(float width) - { - return new(this) { Width = width }; - } + var age = Math.Clamp(Age, speciesPrototype.MinAge, speciesPrototype.MaxAge); - public HumanoidCharacterProfile WithCharacterAppearance(HumanoidCharacterAppearance appearance) + var gender = Gender switch { - return new(this) { Appearance = appearance }; - } + Gender.Epicene => Gender.Epicene, + Gender.Female => Gender.Female, + Gender.Male => Gender.Male, + Gender.Neuter => Gender.Neuter, + _ => Gender.Epicene // Invalid enum values. + }; - public HumanoidCharacterProfile WithClothingPreference(ClothingPreference clothing) - { - return new(this) { Clothing = clothing }; - } - public HumanoidCharacterProfile WithBackpackPreference(BackpackPreference backpack) - { - return new(this) { Backpack = backpack }; - } - public HumanoidCharacterProfile WithSpawnPriorityPreference(SpawnPriorityPreference spawnPriority) - { - return new(this) { SpawnPriority = spawnPriority }; - } - public HumanoidCharacterProfile WithJobPriorities(IEnumerable> jobPriorities) - { - return new(this, new Dictionary(jobPriorities), _antagPreferences, _traitPreferences, - _loadoutPreferences, _specialPriorities); - } - public HumanoidCharacterProfile WithSpecialPriorities(IEnumerable> specialPriorities) - { - return new(this, _jobPriorities, _antagPreferences, _traitPreferences, _loadoutPreferences, new Dictionary(specialPriorities)); - } + string name; + if (string.IsNullOrEmpty(Name)) + name = GetName(Species, gender); + else if (Name.Length > MaxNameLength) + name = Name[..MaxNameLength]; + else + name = Name; - public HumanoidCharacterProfile WithJobPriority(string jobId, JobPriority priority) - { - var dictionary = new Dictionary(_jobPriorities); - if (priority == JobPriority.Never) - { - dictionary.Remove(jobId); - } - else - { - dictionary[jobId] = priority; - } - return new(this, dictionary, _antagPreferences, _traitPreferences, _loadoutPreferences, _specialPriorities); - } - public HumanoidCharacterProfile WithSpecialPriority(string specialId, SpecialPriority priority) - { - var dictionary = new Dictionary(_specialPriorities); - if (priority == SpecialPriority.Zero) - { - dictionary.Remove(specialId); - } - else - { - dictionary[specialId] = priority; - } - return new(this, _jobPriorities, _antagPreferences, _traitPreferences, _loadoutPreferences, dictionary); - } - public HumanoidCharacterProfile WithPreferenceUnavailable(PreferenceUnavailableMode mode) - { - return new(this) { PreferenceUnavailable = mode }; - } + name = name.Trim(); - public HumanoidCharacterProfile WithAntagPreferences(IEnumerable antagPreferences) - { - return new(this, _jobPriorities, new List(antagPreferences), _traitPreferences, - _loadoutPreferences, _specialPriorities); - } + if (configManager.GetCVar(CCVars.RestrictedNames)) + name = RestrictedNameRegex.Replace(name, string.Empty); - public HumanoidCharacterProfile WithAntagPreference(string antagId, bool pref) + if (configManager.GetCVar(CCVars.ICNameCase)) { - var list = new List(_antagPreferences); - if (pref) - { - if (!list.Contains(antagId)) - { - list.Add(antagId); - } - } - else - { - if (list.Contains(antagId)) - { - list.Remove(antagId); - } - } - return new(this, _jobPriorities, list, _traitPreferences, _loadoutPreferences, _specialPriorities); + // This regex replaces the first character of the first and last words of the name with their uppercase version + name = ICNameCaseRegex.Replace(name, m => m.Groups["word"].Value.ToUpper()); } - public HumanoidCharacterProfile WithTraitPreference(string traitId, bool pref) - { - var list = new List(_traitPreferences); + var customspeciename = + !speciesPrototype.CustomName + || string.IsNullOrEmpty(Customspeciename) + ? "" + : Customspeciename.Length > MaxNameLength + ? FormattedMessage.RemoveMarkup(Customspeciename)[..MaxNameLength] + : FormattedMessage.RemoveMarkup(Customspeciename); - // TODO: Maybe just refactor this to HashSet? Same with _antagPreferences - if (pref) - { - if (!list.Contains(traitId)) - { - list.Add(traitId); - } - } - else - { - if (list.Contains(traitId)) - { - list.Remove(traitId); - } - } - return new(this, _jobPriorities, _antagPreferences, list, _loadoutPreferences, _specialPriorities); - } - - public HumanoidCharacterProfile WithLoadoutPreference(string loadoutId, bool pref) - { - var list = new List(_loadoutPreferences); + if (string.IsNullOrEmpty(name)) + name = GetName(Species, gender); - if(pref) - { - if(!list.Contains(loadoutId)) - { - list.Add(loadoutId); - } - } - else - { - if(list.Contains(loadoutId)) - { - list.Remove(loadoutId); - } - } - return new(this, _jobPriorities, _antagPreferences, _traitPreferences, list, _specialPriorities); - } + string flavortext; + if (FlavorText.Length > MaxDescLength) + flavortext = FormattedMessage.RemoveMarkup(FlavorText)[..MaxDescLength]; + else + flavortext = FormattedMessage.RemoveMarkup(FlavorText); - public string Summary => - Loc.GetString( - "humanoid-character-profile-summary", - ("name", Name), - ("gender", Gender.ToString().ToLowerInvariant()), - ("age", Age) - ); + var appearance = HumanoidCharacterAppearance.EnsureValid(Appearance, Species, Sex); - public bool MemberwiseEquals(ICharacterProfile maybeOther) + var prefsUnavailableMode = PreferenceUnavailable switch { - if (maybeOther is not HumanoidCharacterProfile other - || Name != other.Name - || Age != other.Age - || Height != other.Height - || Width != other.Width - || Sex != other.Sex - || Gender != other.Gender - || PreferenceUnavailable != other.PreferenceUnavailable - || Clothing != other.Clothing - || Backpack != other.Backpack - || SpawnPriority != other.SpawnPriority - || !_jobPriorities.SequenceEqual(other._jobPriorities) - || !_antagPreferences.SequenceEqual(other._antagPreferences) - || !_traitPreferences.SequenceEqual(other._traitPreferences) - || !_loadoutPreferences.SequenceEqual(other._loadoutPreferences) - || !_specialPriorities.SequenceEqual(other._specialPriorities) - ) - return false; - return Appearance.MemberwiseEquals(other.Appearance); - } + PreferenceUnavailableMode.StayInLobby => PreferenceUnavailableMode.StayInLobby, + PreferenceUnavailableMode.SpawnAsOverflow => PreferenceUnavailableMode.SpawnAsOverflow, + _ => PreferenceUnavailableMode.StayInLobby // Invalid enum values. + }; - public void EnsureValid(ICommonSession session, IDependencyCollection collection) + var spawnPriority = SpawnPriority switch { - var configManager = collection.Resolve(); - var prototypeManager = collection.Resolve(); + SpawnPriorityPreference.None => SpawnPriorityPreference.None, + SpawnPriorityPreference.Arrivals => SpawnPriorityPreference.Arrivals, + SpawnPriorityPreference.Cryosleep => SpawnPriorityPreference.Cryosleep, + _ => SpawnPriorityPreference.None // Invalid enum values. + }; - if (!prototypeManager.TryIndex(Species, out var speciesPrototype) || speciesPrototype.RoundStart == false) + var priorities = new Dictionary(JobPriorities + .Where(p => prototypeManager.TryIndex(p.Key, out var job) && job.SetPreference && p.Value switch { - Species = SharedHumanoidAppearanceSystem.DefaultSpecies; - speciesPrototype = prototypeManager.Index(Species); - } + JobPriority.Never => false, // Drop never since that's assumed default. + JobPriority.Low => true, + JobPriority.Medium => true, + JobPriority.High => true, + _ => false + })); - var sex = Sex switch - { - Sex.Male => Sex.Male, - Sex.Female => Sex.Female, - Sex.Unsexed => Sex.Unsexed, - _ => Sex.Male // Invalid enum values. - }; + var antags = AntagPreferences + .Where(id => prototypeManager.TryIndex(id, out var antag) && antag.SetPreference) + .ToList(); - // ensure the species can be that sex and their age fits the founds - if (!speciesPrototype.Sexes.Contains(sex)) - sex = speciesPrototype.Sexes[0]; + var traits = TraitPreferences + .Where(prototypeManager.HasIndex) + .ToList(); - var age = Math.Clamp(Age, speciesPrototype.MinAge, speciesPrototype.MaxAge); + var loadouts = LoadoutPreferences + .Where(prototypeManager.HasIndex) + .ToList(); - var gender = Gender switch - { - Gender.Epicene => Gender.Epicene, - Gender.Female => Gender.Female, - Gender.Male => Gender.Male, - Gender.Neuter => Gender.Neuter, - _ => Gender.Epicene // Invalid enum values. - }; - - string name; - if (string.IsNullOrEmpty(Name)) - { - name = GetName(Species, gender); - } - else if (Name.Length > MaxNameLength) - { - name = Name[..MaxNameLength]; - } - else - { - name = Name; - } + Name = name; + Customspeciename = customspeciename; + FlavorText = flavortext; + Age = age; + Sex = sex; + Gender = gender; + Appearance = appearance; + SpawnPriority = spawnPriority; - name = name.Trim(); + _jobPriorities.Clear(); - if (configManager.GetCVar(CCVars.RestrictedNames)) - { - name = Regex.Replace(name, @"[^\u0030-\u0039,\u0041-\u005A,\u0061-\u007A,\u00C0-\u00D6,\u00D8-\u00F6,\u00F8-\u00FF,\u0100-\u017F, '.,-]", string.Empty); - /* - * 0030-0039 Basic Latin: ASCII Digits - * 0041-005A Basic Latin: Uppercase Latin Alphabet - * 0061-007A Basic Latin: Lowercase Latin Alphabet - * 00C0-00D6 Latin-1 Supplement: Letters I - * 00D8-00F6 Latin-1 Supplement: Letters II - * 00F8-00FF Latin-1 Supplement: Letters III - * 0100-017F Latin Extended A: European Latin - */ - } - - if (configManager.GetCVar(CCVars.ICNameCase)) - { - // This regex replaces the first character of the first and last words of the name with their uppercase version - name = Regex.Replace(name, - @"^(?\w)|\b(?\w)(?=\w*$)", - m => m.Groups["word"].Value.ToUpper()); - } - - if (string.IsNullOrEmpty(name)) - { - name = GetName(Species, gender); - } + foreach (var (job, priority) in priorities) + _jobPriorities.Add(job, priority); - string flavortext; - if (FlavorText.Length > MaxDescLength) - { - flavortext = FormattedMessage.RemoveMarkup(FlavorText)[..MaxDescLength]; - } - else - { - flavortext = FormattedMessage.RemoveMarkup(FlavorText); - } + PreferenceUnavailable = prefsUnavailableMode; - var height = Height; - if (speciesPrototype != null) - height = Math.Clamp(Height, speciesPrototype.MinHeight, speciesPrototype.MaxHeight); + _antagPreferences.Clear(); + _antagPreferences.UnionWith(antags); - var width = Width; - if (speciesPrototype != null) - width = Math.Clamp(Width, speciesPrototype.MinWidth, speciesPrototype.MaxWidth); + _traitPreferences.Clear(); + _traitPreferences.UnionWith(traits); - var appearance = HumanoidCharacterAppearance.EnsureValid(Appearance, Species, Sex); - - var prefsUnavailableMode = PreferenceUnavailable switch - { - PreferenceUnavailableMode.StayInLobby => PreferenceUnavailableMode.StayInLobby, - PreferenceUnavailableMode.SpawnAsOverflow => PreferenceUnavailableMode.SpawnAsOverflow, - _ => PreferenceUnavailableMode.StayInLobby // Invalid enum values. - }; - - var clothing = Clothing switch - { - ClothingPreference.Jumpsuit => ClothingPreference.Jumpsuit, - ClothingPreference.Jumpskirt => ClothingPreference.Jumpskirt, - _ => ClothingPreference.Jumpsuit // Invalid enum values. - }; - - var backpack = Backpack switch - { - BackpackPreference.Backpack => BackpackPreference.Backpack, - BackpackPreference.Satchel => BackpackPreference.Satchel, - BackpackPreference.Duffelbag => BackpackPreference.Duffelbag, - _ => BackpackPreference.Backpack // Invalid enum values. - }; - - var spawnPriority = SpawnPriority switch - { - SpawnPriorityPreference.None => SpawnPriorityPreference.None, - SpawnPriorityPreference.Arrivals => SpawnPriorityPreference.Arrivals, - SpawnPriorityPreference.Cryosleep => SpawnPriorityPreference.Cryosleep, - _ => SpawnPriorityPreference.None // Invalid enum values. - }; - - var priorities = new Dictionary(JobPriorities - .Where(p => prototypeManager.TryIndex(p.Key, out var job) && job.SetPreference && p.Value switch - { - JobPriority.Never => false, // Drop never since that's assumed default. - JobPriority.Low => true, - JobPriority.Medium => true, - JobPriority.High => true, - _ => false - })); - - var specialPriorities = new Dictionary(SpecialPriorities - .Where(p => prototypeManager.HasIndex(p.Key) && p.Value switch - { - SpecialPriority.Zero => false, // Drop never since that's assumed default. - SpecialPriority.One => true, - SpecialPriority.Two => true, - SpecialPriority.Three => true, - SpecialPriority.Four => true, - SpecialPriority.Five => true, - SpecialPriority.Six => true, - SpecialPriority.Seven => true, - SpecialPriority.Eight => true, - SpecialPriority.Nine => true, - SpecialPriority.Ten => true, - _ => false - })); - - var antags = AntagPreferences - .Where(id => prototypeManager.TryIndex(id, out var antag) && antag.SetPreference) - .ToList(); - - var traits = TraitPreferences - .Where(prototypeManager.HasIndex) - .ToList(); - - var maxTraits = configManager.GetCVar(CCVars.GameTraitsMax); - var currentTraits = 0; - var traitPoints = configManager.GetCVar(CCVars.GameTraitsDefaultPoints); - - foreach (var trait in traits.OrderBy(t => -prototypeManager.Index(t).Points).ToList()) - { - var proto = prototypeManager.Index(trait); - - if (traitPoints + proto.Points < 0 || currentTraits + 1 > maxTraits) - traits.Remove(trait); - else - { - traitPoints += proto.Points; - currentTraits++; - } - } - - - var loadouts = LoadoutPreferences - .Where(prototypeManager.HasIndex) - .ToList(); - - var loadoutPoints = configManager.GetCVar(CCVars.GameLoadoutsPoints); - var currentPoints = 0; - - foreach (var loadout in loadouts.ToList()) - { - var proto = prototypeManager.Index(loadout); - - if (currentPoints + proto.Cost > loadoutPoints) - loadouts.Remove(loadout); - else - currentPoints += proto.Cost; - } - - - Name = name; - FlavorText = flavortext; - Age = age; - Height = height; - Width = width; - Sex = sex; - Gender = gender; - Appearance = appearance; - Clothing = clothing; - Backpack = backpack; - SpawnPriority = spawnPriority; - - _jobPriorities.Clear(); - - foreach (var (job, priority) in priorities) - { - _jobPriorities.Add(job, priority); - } - - _specialPriorities.Clear(); - - foreach (var (special, priority) in specialPriorities) - { - _specialPriorities.Add(special, priority); - } - - PreferenceUnavailable = prefsUnavailableMode; - - _antagPreferences.Clear(); - _antagPreferences.AddRange(antags); - - _traitPreferences.Clear(); - _traitPreferences.AddRange(traits); + _loadoutPreferences.Clear(); + _loadoutPreferences.UnionWith(loadouts); + } - _loadoutPreferences.Clear(); - _loadoutPreferences.AddRange(loadouts); - } + public ICharacterProfile Validated(ICommonSession session, IDependencyCollection collection) + { + var profile = new HumanoidCharacterProfile(this); + profile.EnsureValid(session, collection); + return profile; + } - public ICharacterProfile Validated(ICommonSession session, IDependencyCollection collection) - { - var profile = new HumanoidCharacterProfile(this); - profile.EnsureValid(session, collection); - return profile; - } + // Sorry this is kind of weird and duplicated, + // Working inside these non entity systems is a bit wack + public static string GetName(string species, Gender gender) + { + var namingSystem = IoCManager.Resolve().GetEntitySystem(); + return namingSystem.GetName(species, gender); + } - // sorry this is kind of weird and duplicated, - /// working inside these non entity systems is a bit wack - public static string GetName(string species, Gender gender) - { - var namingSystem = IoCManager.Resolve().GetEntitySystem(); - return namingSystem.GetName(species, gender); - } + public override bool Equals(object? obj) + { + return ReferenceEquals(this, obj) || obj is HumanoidCharacterProfile other && MemberwiseEquals(other); + } - public override bool Equals(object? obj) - { - return obj is HumanoidCharacterProfile other && MemberwiseEquals(other); - } + public override int GetHashCode() + { + var hashCode = new HashCode(); + hashCode.Add(_jobPriorities); + hashCode.Add(_antagPreferences); + hashCode.Add(_traitPreferences); + hashCode.Add(_loadoutPreferences); + hashCode.Add(Name); + hashCode.Add(FlavorText); + hashCode.Add(Species); + hashCode.Add(Age); + hashCode.Add((int)Sex); + hashCode.Add((int)Gender); + hashCode.Add(Appearance); + hashCode.Add((int)SpawnPriority); + hashCode.Add((int)PreferenceUnavailable); + hashCode.Add(Customspeciename); + return hashCode.ToHashCode(); + } - public override int GetHashCode() - { - return HashCode.Combine( - HashCode.Combine( - Name, - Species, - Age, - Sex, - Gender, - Appearance, - Clothing, - Backpack - ), - HashCode.Combine( - SpawnPriority, - Height, - Width, - PreferenceUnavailable, - _jobPriorities, - _antagPreferences, - _traitPreferences, - _loadoutPreferences - ), - HashCode.Combine( - _specialPriorities - ) - ); - } + public HumanoidCharacterProfile Clone() + { + return new HumanoidCharacterProfile(this); } } diff --git a/Content.Shared/Preferences/Loadouts/Effects/SpeciesLoadoutEffect.cs b/Content.Shared/Preferences/Loadouts/Effects/SpeciesLoadoutEffect.cs new file mode 100644 index 00000000000..74673cbef39 --- /dev/null +++ b/Content.Shared/Preferences/Loadouts/Effects/SpeciesLoadoutEffect.cs @@ -0,0 +1,6 @@ +namespace Content.Shared.Preferences.Loadouts.Effects; + +public sealed class SpeciesLoadoutEffect +{ + +} diff --git a/Content.Shared/Prototypes/LocalizedPrototype.cs b/Content.Shared/Prototypes/LocalizedPrototype.cs new file mode 100644 index 00000000000..acdd5fc180f --- /dev/null +++ b/Content.Shared/Prototypes/LocalizedPrototype.cs @@ -0,0 +1,35 @@ +using System.Linq; +using Robust.Shared.Prototypes; + +namespace Content.Shared.Prototypes; + +public abstract class LocalizedPrototype : IPrototype +{ + [IdDataField] + public string ID { get; } = default!; + + public const string LocFormat = "{0}-{1}-{2}"; + + /// The localization string for the name of this prototype + public string NameLoc => ToLocalizationString("name"); + /// The localized string for the name of prototype + public string Name => Loc.GetString(NameLoc); + + /// + /// Returns an Loc string using the as the 'property'. + /// Given `desc` it will return `this-prototype-PrototypeId-desc`. + /// + public string ToLocalizationString(string field) + { + // Get the ID of the proto Type + var type = + ((PrototypeAttribute?) Attribute.GetCustomAttribute(GetType(), typeof(PrototypeAttribute)))?.Type + ?? GetType().Name.Remove(GetType().Name.Length - 9); + // Lowercase the first letter + type = char.ToLowerInvariant(type[0]) + type[1..]; + // Replace every uppercase letter with a dash and the lowercase letter + type = type.Aggregate("", (current, c) => current + (char.IsUpper(c) ? "-" + char.ToLowerInvariant(c) : c.ToString())); + + return string.Format(LocFormat, type, ID, field); + } +} diff --git a/Content.Shared/Prying/Systems/PryingSystem.cs b/Content.Shared/Prying/Systems/PryingSystem.cs index fa7a135e6c5..a59c09ca535 100644 --- a/Content.Shared/Prying/Systems/PryingSystem.cs +++ b/Content.Shared/Prying/Systems/PryingSystem.cs @@ -1,15 +1,14 @@ -using Content.Shared.Prying.Components; -using Content.Shared.Verbs; -using Content.Shared.DoAfter; -using Robust.Shared.Serialization; +using System.Diagnostics.CodeAnalysis; using Content.Shared.Administration.Logs; using Content.Shared.Database; +using Content.Shared.DoAfter; using Content.Shared.Doors.Components; -using System.Diagnostics.CodeAnalysis; using Content.Shared.Interaction; using Content.Shared.Popups; -using Robust.Shared.Audio; +using Content.Shared.Prying.Components; +using Content.Shared.Verbs; using Robust.Shared.Audio.Systems; +using Robust.Shared.Serialization; using PryUnpoweredComponent = Content.Shared.Prying.Components.PryUnpoweredComponent; namespace Content.Shared.Prying.Systems; @@ -99,14 +98,16 @@ public bool TryPry(EntityUid target, EntityUid user, out DoAfterId? id) // to be marked as handled. return true; - return StartPry(target, user, null, 0.1f, out id); // hand-prying is much slower + // hand-prying is much slower + var modifier = CompOrNull(user)?.SpeedModifier ?? 0.1f; + return StartPry(target, user, null, modifier, out id); } private bool CanPry(EntityUid target, EntityUid user, out string? message, PryingComponent? comp = null) { BeforePryEvent canev; - if (comp != null) + if (comp != null || Resolve(user, ref comp, false)) { canev = new BeforePryEvent(user, comp.PryPowered, comp.Force); } diff --git a/Content.Shared/Psionics/Events.cs b/Content.Shared/Psionics/Events.cs index cf9a50c6e18..68ec3097e7d 100644 --- a/Content.Shared/Psionics/Events.cs +++ b/Content.Shared/Psionics/Events.cs @@ -1,28 +1,69 @@ using Robust.Shared.Serialization; +using Content.Shared.Damage; using Content.Shared.DoAfter; -namespace Content.Shared.Psionics.Events +namespace Content.Shared.Psionics.Events; + +[Serializable, NetSerializable] +public sealed partial class PsionicRegenerationDoAfterEvent : DoAfterEvent { - [Serializable, NetSerializable] - public sealed partial class PsionicRegenerationDoAfterEvent : DoAfterEvent + [DataField("startedAt", required: true)] + public TimeSpan StartedAt; + + public PsionicRegenerationDoAfterEvent(TimeSpan startedAt) { - [DataField("startedAt", required: true)] - public TimeSpan StartedAt; + StartedAt = startedAt; + } - private PsionicRegenerationDoAfterEvent() - { - } + public override DoAfterEvent Clone() => this; +} - public PsionicRegenerationDoAfterEvent(TimeSpan startedAt) - { - StartedAt = startedAt; - } +[Serializable, NetSerializable] +public sealed partial class GlimmerWispDrainDoAfterEvent : SimpleDoAfterEvent { } - public override DoAfterEvent Clone() => this; +[Serializable, NetSerializable] +public sealed partial class HealingWordDoAfterEvent : DoAfterEvent +{ + [DataField(required: true)] + public TimeSpan StartedAt; + + public HealingWordDoAfterEvent(TimeSpan startedAt) + { + StartedAt = startedAt; } - [Serializable, NetSerializable] - public sealed partial class GlimmerWispDrainDoAfterEvent : SimpleDoAfterEvent + public override DoAfterEvent Clone() => this; +} + +[Serializable, NetSerializable] +public sealed partial class PsionicHealOtherDoAfterEvent : DoAfterEvent +{ + [DataField(required: true)] + public TimeSpan StartedAt; + + [DataField] + public DamageSpecifier? HealingAmount = default!; + + [DataField] + public float? RotReduction; + + [DataField] + public bool DoRevive; + + /// + /// Caster's Amplification that has been modified by the results of a MoodContest. + /// + public float ModifiedAmplification = default!; + + /// + /// Caster's Dampening that has been modified by the results of a MoodContest. + /// + public float ModifiedDampening = default!; + + public PsionicHealOtherDoAfterEvent(TimeSpan startedAt) { + StartedAt = startedAt; } + + public override DoAfterEvent Clone() => this; } diff --git a/Content.Shared/Psionics/PsionicComponent.cs b/Content.Shared/Psionics/PsionicComponent.cs index 63529576152..16e0f028de0 100644 --- a/Content.Shared/Psionics/PsionicComponent.cs +++ b/Content.Shared/Psionics/PsionicComponent.cs @@ -1,18 +1,56 @@ +using Content.Shared.DoAfter; using Content.Shared.Psionics; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; namespace Content.Shared.Abilities.Psionics { - [RegisterComponent, NetworkedComponent] + [RegisterComponent, NetworkedComponent, AutoGenerateComponentState(true)] public sealed partial class PsionicComponent : Component { /// - /// How close a Psion is to awakening a new power. - /// TODO: Implement this in a separate PR. + /// Current Mana. + /// + [DataField, AutoNetworkedField] + public float Mana; + + /// + /// Max Mana Possible. + /// + [DataField, AutoNetworkedField] + public float MaxMana = 100; + + /// + /// How much energy is gained per second. /// [DataField] - public float Potentia = 0; + public float ManaGain = 1; + + /// + /// ManaGain Multiplier + /// + [DataField] + public float ManaGainMultiplier = 1; + + public float ManaAccumulator; + + [DataField] + public bool BypassManaCheck; + + /// + /// How close a Psion is to generating a new power. When Potentia reaches the NextPowerCost, it is "Spent" in order to "Buy" a random new power. + /// TODO: Psi-Potentiometry should be able to read how much Potentia a person has. + /// + [DataField] + public float Potentia; + + /// + /// Each time a Psion rolls for a new power, they roll a number between 0 and 100, adding any relevant modifiers. This number is then added to Potentia, + /// meaning that it carries over between rolls. When a character has an amount of potentia equal to at least 100 * 2^(total powers), the potentia is then spent, and a power is generated. + /// This variable stores the cost of the next power. + /// + [DataField] + public float NextPowerCost = 100; /// /// The baseline chance of obtaining a psionic power when rolling for one. @@ -24,7 +62,7 @@ public sealed partial class PsionicComponent : Component /// Whether or not a Psion has an available "Reroll" to spend on attempting to gain powers. /// [DataField] - public bool CanReroll; + public bool CanReroll = true; /// /// The Base amount of time (in minutes) this Psion is given the stutter effect if they become mindbroken. @@ -36,6 +74,10 @@ public sealed partial class PsionicComponent : Component public string MindbreakingStutterAccent = "StutteringAccent"; + /// + /// The message feedback given on mindbreak. + /// + [DataField] public string MindbreakingFeedback = "mindbreaking-feedback"; /// @@ -141,11 +183,47 @@ private set [ViewVariables(VVAccess.ReadWrite)] public float CurrentDampening; + /// + /// How many "Slots" an entity has for psionic powers. This is not a hard limit, and is instead used for calculating the cost to generate new powers. + /// Exceeding this limit causes an entity to become a Glimmer Source. + /// + [DataField] + public int PowerSlots = 1; + + /// + /// How many "Slots" are currently occupied by psionic powers. + /// + [ViewVariables(VVAccess.ReadWrite)] + public int PowerSlotsTaken; + /// /// List of descriptors this entity will bring up for psychognomy. Used to remove /// unneccesary subs for unique psionic entities like e.g. Oracle. /// [DataField] - public List? PsychognomicDescriptors = null; + public List? PsychognomicDescriptors = null; + + /// Used for tracking what spell a Psion is actively casting + [DataField] + public DoAfterId? DoAfter; + + /// Popup to play if a Psion attempts to start casting a power while already casting one + [DataField] + public string AlreadyCasting = "already-casting"; + + /// Popup to play if there no Mana left for a power to execute. + public string NoMana = "no-mana"; + + /// + /// The list of Familiars currently bound to this Psion. + /// + [DataField] + public List Familiars = new(); + + /// + /// The maximum number of Familiars a Psion may bind. + /// + [DataField] + public int FamiliarLimit = 1; } } diff --git a/Content.Shared/Psionics/PsionicEvents.cs b/Content.Shared/Psionics/PsionicEvents.cs index be3bf03af62..4d134417988 100644 --- a/Content.Shared/Psionics/PsionicEvents.cs +++ b/Content.Shared/Psionics/PsionicEvents.cs @@ -8,4 +8,10 @@ namespace Content.Shared.Psionics; /// /// [ByRefEvent] -public record struct OnSetPsionicStatsEvent(float AmplificationChangedAmount, float DampeningChangedAmount); \ No newline at end of file +public record struct OnSetPsionicStatsEvent(float AmplificationChangedAmount, float DampeningChangedAmount); + +[ByRefEvent] +public record struct OnMindbreakEvent(); + +[ByRefEvent] +public record struct OnManaUpdateEvent(); \ No newline at end of file diff --git a/Content.Shared/Psionics/PsionicFamiliarComponent.cs b/Content.Shared/Psionics/PsionicFamiliarComponent.cs new file mode 100644 index 00000000000..d47b01e7e73 --- /dev/null +++ b/Content.Shared/Psionics/PsionicFamiliarComponent.cs @@ -0,0 +1,75 @@ +using Content.Shared.Popups; +using Robust.Shared.GameStates; + +namespace Content.Shared.Abilities.Psionics; + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState(true)] +public sealed partial class PsionicFamiliarComponent : Component +{ + /// + /// The entity that summoned this Familiar. + /// + [DataField, AutoNetworkedField] + public EntityUid? Master; + + /// + /// Whether the familiar is allowed to attack its Master. + /// + [DataField] + public bool CanAttackMaster; + + /// + /// Popup to play when a familiar that isn't allowed to attack its Master, attempts to do so. + /// + [DataField] + public string AttackMasterText = "psionic-familiar-cant-attack-master"; + + /// + /// Popup type to use when failing to attack the familiar's Master. + /// + [DataField] + public PopupType AttackPopupType = PopupType.SmallCaution; + + /// + /// Text to display when a Familiar is forced to return from whence it came. + /// + [DataField] + public string DespawnText = "psionic-familiar-despawn-text"; + + /// + /// Popup type to use when a Familiar is forced to return from whence it came. + /// + [DataField] + public PopupType DespawnPopopType = PopupType.MediumCaution; + + /// + /// Whether a Psionic Familiar is sent back from whence it came if its Master dies. + /// + [DataField] + public bool DespawnOnMasterDeath = true; + + /// + /// Whether a Psionic Familiar is sent back from whence it came if it dies. + /// + [DataField] + public bool DespawnOnFamiliarDeath = true; + + /// + /// Whether a Psionic Familiar is sent back from whence it came if its Master is mindbroken. + /// + [DataField] + public bool DespawnOnMasterMindbroken = true; + + /// + /// Should the Familiar despawn when the player controlling it disconnects. + /// + [DataField] + public bool DespawnOnPlayerDetach; + + /// + /// Whether a Psionic Familiar inherits its Master's factions. + /// This can get people into trouble if the familiar inherits a hostile faction such as Syndicate. + /// + [DataField] + public bool InheritMasterFactions = true; +} diff --git a/Content.Shared/Psionics/PsionicPowerPrototype.cs b/Content.Shared/Psionics/PsionicPowerPrototype.cs index 3d389f6cdbe..d81ae05be23 100644 --- a/Content.Shared/Psionics/PsionicPowerPrototype.cs +++ b/Content.Shared/Psionics/PsionicPowerPrototype.cs @@ -72,7 +72,7 @@ public sealed partial class PsionicPowerPrototype : IPrototype /// /// What message will this power generate when scanned by a Metempsionic Focused Pulse. /// - [DataField(required: true)] + [DataField] public string MetapsionicFeedback = "psionic-metapsionic-feedback-default"; /// @@ -86,4 +86,10 @@ public sealed partial class PsionicPowerPrototype : IPrototype /// [DataField] public float DampeningModifier = 0; + + /// + /// How many "Power Slots" this power occupies. + /// + [DataField] + public int PowerSlotCost = 1; } \ No newline at end of file diff --git a/Content.Shared/Psionics/SharedPsionicAbilitiesSystem.cs b/Content.Shared/Psionics/SharedPsionicAbilitiesSystem.cs index f1f03bcb9ed..b79dabbc416 100644 --- a/Content.Shared/Psionics/SharedPsionicAbilitiesSystem.cs +++ b/Content.Shared/Psionics/SharedPsionicAbilitiesSystem.cs @@ -1,8 +1,13 @@ using Content.Shared.Administration.Logs; +using Content.Shared.Contests; using Content.Shared.Popups; +using Content.Shared.Psionics; using Content.Shared.Psionics.Glimmer; using Robust.Shared.Random; using Robust.Shared.Serialization; +using Content.Shared.Mobs.Systems; +using Content.Shared.FixedPoint; +using Content.Shared.Rejuvenate; namespace Content.Shared.Abilities.Psionics { @@ -13,11 +18,55 @@ public sealed class SharedPsionicAbilitiesSystem : EntitySystem [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!; [Dependency] private readonly GlimmerSystem _glimmerSystem = default!; [Dependency] private readonly IRobustRandom _robustRandom = default!; + [Dependency] private readonly ContestsSystem _contests = default!; + [Dependency] private readonly MobStateSystem _mobState = default!; public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnPowerUsed); + SubscribeLocalEvent(OnRejuvenate); + } + + public bool OnAttemptPowerUse(EntityUid uid, string power, float? manacost = null, bool checkInsulation = true) + { + if (!TryComp(uid, out var component) + || HasComp(uid) + || checkInsulation + && HasComp(uid)) + return false; + + var tev = new OnAttemptPowerUseEvent(uid, power); + RaiseLocalEvent(uid, tev); + + if (tev.Cancelled) + return false; + + if (component.DoAfter is not null) + { + _popups.PopupEntity(Loc.GetString(component.AlreadyCasting), uid, uid, PopupType.LargeCaution); + return false; + } + + if (manacost is null) + return true; + + if (component.Mana >= manacost + || component.BypassManaCheck) + { + var newmana = component.Mana - manacost; + component.Mana = newmana ?? component.Mana; + + var ev = new OnManaUpdateEvent(); + RaiseLocalEvent(uid, ref ev); + } + else + { + _popups.PopupEntity(Loc.GetString(component.NoMana), uid, uid, PopupType.LargeCaution); + return false; + } + + return true; } private void OnPowerUsed(EntityUid uid, PsionicComponent component, PsionicPowerUsedEvent args) @@ -41,6 +90,87 @@ public void LogPowerUsed(EntityUid uid, string power, int minGlimmer = 8, int ma _glimmerSystem.Glimmer += _robustRandom.Next(minGlimmer, maxGlimmer); } + + /// + /// Returns the CurrentAmplification of a given Entity, multiplied by the result of that Entity's MoodContest. + /// Higher mood means more Amplification, Lower mood means less Amplification. + /// + public float ModifiedAmplification(EntityUid uid) + { + if (!TryComp(uid, out var psionicComponent)) + return 1; + + return ModifiedAmplification(uid, psionicComponent); + } + + /// + /// Returns the CurrentAmplification of a given Entity, multiplied by the result of that Entity's MoodContest. + /// Higher mood means more Amplification, Lower mood means less Amplification. + /// + public float ModifiedAmplification(EntityUid uid, PsionicComponent component) + { + return component.CurrentAmplification * _contests.MoodContest(uid, true); + } + + /// + /// Returns the CurrentDampening of a given Entity, multiplied by the result of that Entity's MoodContest. + /// Lower mood means more Dampening, higher mood means less Dampening. + /// + public float ModifiedDampening(EntityUid uid) + { + if (!TryComp(uid, out var psionicComponent)) + return 1; + + return ModifiedDampening(uid, psionicComponent); + } + + /// + /// Returns the CurrentDampening of a given Entity, multiplied by the result of that Entity's MoodContest. + /// Lower mood means more Dampening, higher mood means less Dampening. + /// + public float ModifiedDampening(EntityUid uid, PsionicComponent component) + { + return component.CurrentDampening / _contests.MoodContest(uid, true); + } + + public void OnRejuvenate(EntityUid uid, PsionicComponent component, RejuvenateEvent args) + { + component.Mana = component.MaxMana; + var ev = new OnManaUpdateEvent(); + RaiseLocalEvent(uid, ref ev); + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var component)) + { + if (_mobState.IsDead(uid)) + continue; + + component.ManaAccumulator += frameTime; + + if (component.ManaAccumulator <= 1) + continue; + + component.ManaAccumulator -= 1; + + if (component.Mana > component.MaxMana) + component.Mana = component.MaxMana; + + if (component.Mana < component.MaxMana) + { + var gainedmana = component.ManaGain * component.ManaGainMultiplier; + component.Mana += gainedmana; + FixedPoint2.Min(component.Mana, component.MaxMana); + + var ev = new OnManaUpdateEvent(); + RaiseLocalEvent(uid, ref ev); + } + } + } } public sealed class PsionicPowerUsedEvent : HandledEntityEventArgs @@ -55,6 +185,18 @@ public PsionicPowerUsedEvent(EntityUid user, string power) } } + public sealed class OnAttemptPowerUseEvent : CancellableEntityEventArgs + { + public EntityUid User { get; } + public string Power = string.Empty; + + public OnAttemptPowerUseEvent(EntityUid user, string power) + { + User = user; + Power = power; + } + } + [Serializable] [NetSerializable] public sealed class PsionicsChangedEvent : EntityEventArgs diff --git a/Content.Shared/RCD/RCDPrototype.cs b/Content.Shared/RCD/RCDPrototype.cs index 1e80abfb723..58093bbe87a 100644 --- a/Content.Shared/RCD/RCDPrototype.cs +++ b/Content.Shared/RCD/RCDPrototype.cs @@ -9,7 +9,7 @@ namespace Content.Shared.RCD; /// Contains the parameters for a RCD construction / operation /// [Prototype("rcd")] -public sealed class RCDPrototype : IPrototype +public sealed partial class RCDPrototype : IPrototype { [IdDataField] public string ID { get; private set; } = default!; @@ -51,7 +51,7 @@ public sealed class RCDPrototype : IPrototype public int Cost { get; private set; } = 1; /// - /// The length of the operation + /// The length of the operation /// [DataField, ViewVariables(VVAccess.ReadOnly)] public float Delay { get; private set; } = 1f; @@ -75,7 +75,7 @@ public sealed class RCDPrototype : IPrototype public CollisionGroup CollisionMask { get; private set; } = CollisionGroup.None; /// - /// Specifies a set of custom collision bounds for determining whether the entity prototype will fit into a target tile + /// Specifies a set of custom collision bounds for determining whether the entity prototype will fit into a target tile /// /// /// Should be set assuming that the entity faces south. @@ -106,7 +106,7 @@ private set private Box2? _collisionBounds = null; /// - /// The polygon shape associated with the prototype CollisionBounds (if set) + /// The polygon shape associated with the prototype CollisionBounds (if set) /// [ViewVariables(VVAccess.ReadOnly)] public PolygonShape? CollisionPolygon { get; private set; } = null; diff --git a/Content.Shared/RadialSelector/Ui.cs b/Content.Shared/RadialSelector/Ui.cs new file mode 100644 index 00000000000..656e194dfe8 --- /dev/null +++ b/Content.Shared/RadialSelector/Ui.cs @@ -0,0 +1,52 @@ +using Robust.Shared.Serialization; +using Robust.Shared.Utility; + +namespace Content.Shared.RadialSelector; + +[NetSerializable, Serializable] +public enum RadialSelectorUiKey : byte +{ + Key, +} + +[Serializable, NetSerializable] +public sealed class RadialSelectorState(List entries, bool openCentered = false) + : BoundUserInterfaceState +{ + [DataField(required: true)] + public List Entries = entries; + + public bool OpenCentered { get; } = openCentered; +} + +[Serializable, NetSerializable] +public sealed class RadialSelectorSelectedMessage(string selectedItem) : BoundUserInterfaceMessage +{ + public string SelectedItem { get; private set; } = selectedItem; +} + +[DataDefinition, Serializable, NetSerializable] +public sealed partial class RadialSelectorEntry +{ + [DataField] + public string? Prototype { get; set; } + + [DataField] + public SpriteSpecifier? Icon { get; set; } + + [DataField] + public RadialSelectorCategory? Category { get; set; } +} + +[DataDefinition, Serializable, NetSerializable] +public sealed partial class RadialSelectorCategory +{ + [DataField(required: true)] + public string Name { get; set; } = string.Empty; + + [DataField(required: true)] + public SpriteSpecifier Icon { get; set; } = default!; + + [DataField(required: true)] + public List Entries { get; set; } = new(); +} diff --git a/Content.Shared/Radio/Components/EncryptionKeyHolderComponent.cs b/Content.Shared/Radio/Components/EncryptionKeyHolderComponent.cs index 6c50acb9660..d84a1618602 100644 --- a/Content.Shared/Radio/Components/EncryptionKeyHolderComponent.cs +++ b/Content.Shared/Radio/Components/EncryptionKeyHolderComponent.cs @@ -15,27 +15,22 @@ public sealed partial class EncryptionKeyHolderComponent : Component /// /// Whether or not encryption keys can be removed from the headset. /// - [ViewVariables(VVAccess.ReadWrite)] - [DataField("keysUnlocked")] + [DataField] public bool KeysUnlocked = true; /// /// The tool required to extract the encryption keys from the headset. /// - [ViewVariables(VVAccess.ReadWrite)] - [DataField("keysExtractionMethod", customTypeSerializer: typeof(PrototypeIdSerializer))] + [DataField(customTypeSerializer: typeof(PrototypeIdSerializer))] public string KeysExtractionMethod = "Screwing"; - [ViewVariables(VVAccess.ReadWrite)] - [DataField("keySlots")] + [DataField] public int KeySlots = 2; - [ViewVariables(VVAccess.ReadWrite)] - [DataField("keyExtractionSound")] + [DataField] public SoundSpecifier KeyExtractionSound = new SoundPathSpecifier("/Audio/Items/pistol_magout.ogg"); - [ViewVariables(VVAccess.ReadWrite)] - [DataField("keyInsertionSound")] + [DataField] public SoundSpecifier KeyInsertionSound = new SoundPathSpecifier("/Audio/Items/pistol_magin.ogg"); [ViewVariables] @@ -45,8 +40,7 @@ public sealed partial class EncryptionKeyHolderComponent : Component /// /// Whether or not the headset can be examined to see the encryption keys while the keys aren't accessible. /// - [ViewVariables(VVAccess.ReadWrite)] - [DataField("examineWhileLocked")] + [DataField] public bool ExamineWhileLocked = true; /// diff --git a/Content.Shared/Radio/Components/SharedRadioJammerComponent.cs b/Content.Shared/Radio/Components/SharedRadioJammerComponent.cs new file mode 100644 index 00000000000..e5e52a3e475 --- /dev/null +++ b/Content.Shared/Radio/Components/SharedRadioJammerComponent.cs @@ -0,0 +1,74 @@ +using Robust.Shared.Serialization; +using Robust.Shared.GameStates; + +namespace Content.Shared.RadioJammer; + +/// +/// When activated () prevents from sending messages in range +/// Suit sensors will also stop working. +/// +[NetworkedComponent, RegisterComponent] +public sealed partial class RadioJammerComponent : Component +{ + [DataDefinition] + public partial struct RadioJamSetting + { + /// + /// Power usage per second when enabled. + /// + [DataField(required: true)] + public float Wattage; + + /// + /// Range of the jammer. + /// + [DataField(required: true)] + public float Range; + + /// + /// The message that is displayed when switched + /// to this setting. + /// + [DataField(required: true)] + public LocId Message = string.Empty; + + /// + /// Name of the setting. + /// + [DataField(required: true)] + public LocId Name = string.Empty; + } + + /// + /// List of all the settings for the radio jammer. + /// + [DataField(required: true), ViewVariables(VVAccess.ReadOnly)] + public RadioJamSetting[] Settings; + + /// + /// Index of the currently selected setting. + /// + [DataField] + public int SelectedPowerLevel = 1; +} + +[Serializable, NetSerializable] +public enum RadioJammerChargeLevel : byte +{ + Low, + Medium, + High +} + +[Serializable, NetSerializable] +public enum RadioJammerLayers : byte +{ + LED +} + +[Serializable, NetSerializable] +public enum RadioJammerVisuals : byte +{ + ChargeLevel, + LEDOn +} diff --git a/Content.Shared/Radio/EntitySystems/EncryptionKeySystem.cs b/Content.Shared/Radio/EntitySystems/EncryptionKeySystem.cs index 712debbafa0..a15b6f76e90 100644 --- a/Content.Shared/Radio/EntitySystems/EncryptionKeySystem.cs +++ b/Content.Shared/Radio/EntitySystems/EncryptionKeySystem.cs @@ -6,10 +6,8 @@ using Content.Shared.Interaction; using Content.Shared.Popups; using Content.Shared.Radio.Components; -using Content.Shared.Tools; using Content.Shared.Tools.Components; using Content.Shared.Wires; -using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; using Robust.Shared.Containers; using Robust.Shared.Network; @@ -175,13 +173,9 @@ private void OnStartup(EntityUid uid, EncryptionKeyHolderComponent component, Co private void OnHolderExamined(EntityUid uid, EncryptionKeyHolderComponent component, ExaminedEvent args) { - if (!args.IsInDetailsRange) - return; - - if (!component.ExamineWhileLocked && !component.KeysUnlocked) - return; - - if (!component.ExamineWhileLocked && TryComp(uid, out var panel) && !panel.Open) + if (!args.IsInDetailsRange + || !component.ExamineWhileLocked && !component.KeysUnlocked + || !component.ExamineWhileLocked && TryComp(uid, out var panel) && !panel.Open) return; if (component.KeyContainer.ContainedEntities.Count == 0) diff --git a/Content.Shared/Radio/EntitySystems/SharedJammerSystem.cs b/Content.Shared/Radio/EntitySystems/SharedJammerSystem.cs new file mode 100644 index 00000000000..e1f632735c2 --- /dev/null +++ b/Content.Shared/Radio/EntitySystems/SharedJammerSystem.cs @@ -0,0 +1,78 @@ +using Content.Shared.Popups; +using Content.Shared.DeviceNetwork.Components; +using Content.Shared.Verbs; +using Content.Shared.RadioJammer; + +namespace Content.Shared.Radio.EntitySystems; + +public abstract class SharedJammerSystem : EntitySystem +{ + [Dependency] private readonly SharedAppearanceSystem _appearance = default!; + [Dependency] protected readonly SharedPopupSystem Popup = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent>(OnGetVerb); + } + + private void OnGetVerb(Entity entity, ref GetVerbsEvent args) + { + if (!args.CanAccess || !args.CanInteract) + return; + + var user = args.User; + + byte index = 0; + foreach (var setting in entity.Comp.Settings) + { + // This is because Act wont work with index. + // Needs it to be saved in the loop. + var currIndex = index; + var verb = new Verb + { + Priority = currIndex, + Category = VerbCategory.PowerLevel, + Disabled = entity.Comp.SelectedPowerLevel == currIndex, + Act = () => + { + entity.Comp.SelectedPowerLevel = currIndex; + if (TryComp(entity.Owner, out var jammerComp)) + { + // This is a little sketcy but only way to do it. + jammerComp.Range = GetCurrentRange(entity.Comp); + Dirty(entity.Owner, jammerComp); + } + Popup.PopupPredicted(Loc.GetString(setting.Message), user, user); + }, + Text = Loc.GetString(setting.Name), + }; + args.Verbs.Add(verb); + index++; + } + } + + public float GetCurrentWattage(RadioJammerComponent jammer) + { + return jammer.Settings[jammer.SelectedPowerLevel].Wattage; + } + + public float GetCurrentRange(RadioJammerComponent jammer) + { + return jammer.Settings[jammer.SelectedPowerLevel].Range; + } + + protected void ChangeLEDState(bool isLEDOn, EntityUid uid, + AppearanceComponent? appearance = null) + { + _appearance.SetData(uid, RadioJammerVisuals.LEDOn, isLEDOn, appearance); + } + + protected void ChangeChargeLevel(RadioJammerChargeLevel chargeLevel, EntityUid uid, + AppearanceComponent? appearance = null) + { + _appearance.SetData(uid, RadioJammerVisuals.ChargeLevel, chargeLevel, appearance); + } + +} diff --git a/Content.Shared/Random/Helpers/SharedRandomExtensions.cs b/Content.Shared/Random/Helpers/SharedRandomExtensions.cs index dcdc9d61d98..20e57e94212 100644 --- a/Content.Shared/Random/Helpers/SharedRandomExtensions.cs +++ b/Content.Shared/Random/Helpers/SharedRandomExtensions.cs @@ -57,7 +57,8 @@ public static string Pick(this IWeightedRandomPrototype prototype, IRobustRandom throw new InvalidOperationException($"Invalid weighted pick for {prototype.ID}!"); } - public static string Pick(this IRobustRandom random, Dictionary weights) + public static T Pick(this IRobustRandom random, Dictionary weights) + where T: notnull { var sum = weights.Values.Sum(); var accumulated = 0f; @@ -74,7 +75,7 @@ public static string Pick(this IRobustRandom random, Dictionary w } } - throw new InvalidOperationException($"Invalid weighted pick"); + throw new InvalidOperationException("Invalid weighted pick"); } public static (string reagent, FixedPoint2 quantity) Pick(this WeightedRandomFillSolutionPrototype prototype, IRobustRandom? random = null) diff --git a/Content.Shared/ReagentSpeed/ReagentSpeedComponent.cs b/Content.Shared/ReagentSpeed/ReagentSpeedComponent.cs new file mode 100644 index 00000000000..d233cad2a00 --- /dev/null +++ b/Content.Shared/ReagentSpeed/ReagentSpeedComponent.cs @@ -0,0 +1,34 @@ +using Content.Shared.Chemistry.Reagent; +using Content.Shared.FixedPoint; +using Robust.Shared.Prototypes; + +namespace Content.Shared.ReagentSpeed; + +/// +/// Makes a device work faster by consuming reagents on each use. +/// Other systems must use for this to do anything. +/// +[RegisterComponent, Access(typeof(ReagentSpeedSystem))] +public sealed partial class ReagentSpeedComponent : Component +{ + /// + /// Solution that will be checked. + /// Anything that isn't in Modifiers is left alone. + /// + [DataField(required: true)] + public string Solution = string.Empty; + + /// + /// How much reagent from the solution to use up for each use. + /// This is per-modifier-reagent and not shared between them. + /// + [DataField] + public FixedPoint2 Cost = 5; + + /// + /// Reagents and how much they modify speed at full purity. + /// Small number means faster large number means slower. + /// + [DataField(required: true)] + public Dictionary, float> Modifiers = new(); +} diff --git a/Content.Shared/ReagentSpeed/ReagentSpeedSystem.cs b/Content.Shared/ReagentSpeed/ReagentSpeedSystem.cs new file mode 100644 index 00000000000..8561c7b12a1 --- /dev/null +++ b/Content.Shared/ReagentSpeed/ReagentSpeedSystem.cs @@ -0,0 +1,33 @@ +using Content.Shared.Chemistry.EntitySystems; + +namespace Content.Shared.ReagentSpeed; + +public sealed class ReagentSpeedSystem : EntitySystem +{ + [Dependency] private readonly SharedSolutionContainerSystem _solution = default!; + + /// + /// Consumes reagents and modifies the duration. + /// This can be production time firing delay etc. + /// + public TimeSpan ApplySpeed(Entity ent, TimeSpan time) + { + if (!Resolve(ent, ref ent.Comp, false)) + return time; + + if (!_solution.TryGetSolution(ent.Owner, ent.Comp.Solution, out _, out var solution)) + return time; + + foreach (var (reagent, fullModifier) in ent.Comp.Modifiers) + { + var used = solution.RemoveReagent(reagent, ent.Comp.Cost); + var efficiency = (used / ent.Comp.Cost).Float(); + // scale the speed modifier so microdosing has less effect + var reduction = (1f - fullModifier) * efficiency; + var modifier = 1f - reduction; + time *= modifier; + } + + return time; + } +} diff --git a/Content.Shared/Robotics/Components/RoboticsConsoleComponent.cs b/Content.Shared/Robotics/Components/RoboticsConsoleComponent.cs new file mode 100644 index 00000000000..4329e437a29 --- /dev/null +++ b/Content.Shared/Robotics/Components/RoboticsConsoleComponent.cs @@ -0,0 +1,53 @@ +using Content.Shared.Radio; +using Content.Shared.Robotics; +using Content.Shared.Robotics.Systems; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; + +namespace Content.Shared.Robotics.Components; + +/// +/// Robotics console for managing borgs. +/// +[RegisterComponent, NetworkedComponent, Access(typeof(SharedRoboticsConsoleSystem))] +[AutoGenerateComponentState, AutoGenerateComponentPause] +public sealed partial class RoboticsConsoleComponent : Component +{ + /// + /// Address and data of each cyborg. + /// + [DataField] + public Dictionary Cyborgs = new(); + + /// + /// After not responding for this length of time borgs are removed from the console. + /// + [DataField] + public TimeSpan Timeout = TimeSpan.FromSeconds(10); + + /// + /// Radio channel to send messages on. + /// + [DataField] + public ProtoId RadioChannel = "Science"; + + /// + /// Radio message sent when destroying a borg. + /// + [DataField] + public LocId DestroyMessage = "robotics-console-cyborg-destroyed"; + + /// + /// Cooldown on destroying borgs to prevent complete abuse. + /// + [DataField] + public TimeSpan DestroyCooldown = TimeSpan.FromSeconds(30); + + /// + /// When a borg can next be destroyed. + /// + [DataField(customTypeSerializer: typeof(TimeOffsetSerializer))] + [AutoNetworkedField, AutoPausedField] + public TimeSpan NextDestroy = TimeSpan.Zero; +} diff --git a/Content.Shared/Robotics/RoboticsConsoleUi.cs b/Content.Shared/Robotics/RoboticsConsoleUi.cs new file mode 100644 index 00000000000..1be89beff0b --- /dev/null +++ b/Content.Shared/Robotics/RoboticsConsoleUi.cs @@ -0,0 +1,126 @@ +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; +using Robust.Shared.Utility; + +namespace Content.Shared.Robotics; + +[Serializable, NetSerializable] +public enum RoboticsConsoleUiKey : byte +{ + Key +} + +[Serializable, NetSerializable] +public sealed class RoboticsConsoleState : BoundUserInterfaceState +{ + /// + /// Map of device network addresses to cyborg data. + /// + public Dictionary Cyborgs; + + public RoboticsConsoleState(Dictionary cyborgs) + { + Cyborgs = cyborgs; + } +} + +/// +/// Message to disable the selected cyborg. +/// +[Serializable, NetSerializable] +public sealed class RoboticsConsoleDisableMessage : BoundUserInterfaceMessage +{ + public readonly string Address; + + public RoboticsConsoleDisableMessage(string address) + { + Address = address; + } +} + +/// +/// Message to destroy the selected cyborg. +/// +[Serializable, NetSerializable] +public sealed class RoboticsConsoleDestroyMessage : BoundUserInterfaceMessage +{ + public readonly string Address; + + public RoboticsConsoleDestroyMessage(string address) + { + Address = address; + } +} + +/// +/// All data a client needs to render the console UI for a single cyborg. +/// Created by BorgTransponderComponent and sent to clients by RoboticsConsoleComponent. +/// +[DataRecord, Serializable, NetSerializable] +public record struct CyborgControlData +{ + /// + /// Texture of the borg chassis. + /// + [DataField(required: true)] + public SpriteSpecifier? ChassisSprite; + + /// + /// Name of the borg chassis. + /// + [DataField(required: true)] + public string ChassisName = string.Empty; + + /// + /// Name of the borg's entity, including its silicon id. + /// + [DataField(required: true)] + public string Name = string.Empty; + + /// + /// Battery charge from 0 to 1. + /// + [DataField] + public float Charge; + + /// + /// How many modules this borg has, just useful information for roboticists. + /// Lets them keep track of the latejoin borgs that need new modules and stuff. + /// + [DataField] + public int ModuleCount; + + /// + /// Whether the borg has a brain installed or not. + /// + [DataField] + public bool HasBrain; + + /// + /// When this cyborg's data will be deleted. + /// Set by the console when receiving the packet. + /// + [DataField(customTypeSerializer: typeof(TimeOffsetSerializer))] + public TimeSpan Timeout = TimeSpan.Zero; + + public CyborgControlData(SpriteSpecifier? chassisSprite, string chassisName, string name, float charge, int moduleCount, bool hasBrain) + { + ChassisSprite = chassisSprite; + ChassisName = chassisName; + Name = name; + Charge = charge; + ModuleCount = moduleCount; + HasBrain = hasBrain; + } +} + +public static class RoboticsConsoleConstants +{ + // broadcast by cyborgs on Robotics Console frequency + public const string NET_CYBORG_DATA = "cyborg-data"; + + // sent by robotics console to cyborgs on Cyborg Control frequency + public const string NET_DISABLE_COMMAND = "cyborg-disable"; + public const string NET_DESTROY_COMMAND = "cyborg-destroy"; +} diff --git a/Content.Shared/Robotics/Systems/SharedRoboticsConsoleSystem.cs b/Content.Shared/Robotics/Systems/SharedRoboticsConsoleSystem.cs new file mode 100644 index 00000000000..25b3c5d07a8 --- /dev/null +++ b/Content.Shared/Robotics/Systems/SharedRoboticsConsoleSystem.cs @@ -0,0 +1,8 @@ +namespace Content.Shared.Robotics.Systems; + +/// +/// Does nothing, only exists for access right now. +/// +public abstract class SharedRoboticsConsoleSystem : EntitySystem +{ +} diff --git a/Content.Shared/Roles/JobPrototype.cs b/Content.Shared/Roles/JobPrototype.cs index 7087c6ed76a..5cf8cf38fb3 100644 --- a/Content.Shared/Roles/JobPrototype.cs +++ b/Content.Shared/Roles/JobPrototype.cs @@ -1,4 +1,3 @@ -using Content.Shared._NC.Roles; // Nuclear 14 using Content.Shared.Access; using Content.Shared.Customization.Systems; using Content.Shared.Players.PlayTimeTracking; @@ -47,11 +46,6 @@ public sealed partial class JobPrototype : IPrototype [DataField("requirements")] public List? Requirements; - // Nuclear 14 start - [DataField("jobBlockForSpecies")] - public HashSet? JobBlockForSpecies; - // Nuclear 14 end - [DataField("joinNotifyCrew")] public bool JoinNotifyCrew { get; private set; } = false; @@ -129,6 +123,9 @@ public sealed partial class JobPrototype : IPrototype [DataField("extendedAccessGroups")] public IReadOnlyCollection> ExtendedAccessGroups { get; private set; } = Array.Empty>(); + + [DataField] + public bool Whitelisted; } /// diff --git a/Content.Shared/Roles/SharedRoleSystem.cs b/Content.Shared/Roles/SharedRoleSystem.cs index 94ad32164b3..d5ac2e5923a 100644 --- a/Content.Shared/Roles/SharedRoleSystem.cs +++ b/Content.Shared/Roles/SharedRoleSystem.cs @@ -196,11 +196,13 @@ public bool MindTryRemoveRole(EntityUid mindId) where T : IComponent public bool MindHasRole(EntityUid mindId) where T : IComponent { + DebugTools.Assert(HasComp(mindId)); return HasComp(mindId); } public List MindGetAllRoles(EntityUid mindId) { + DebugTools.Assert(HasComp(mindId)); var ev = new MindGetAllRolesEvent(new List()); RaiseLocalEvent(mindId, ref ev); return ev.Roles; @@ -211,6 +213,7 @@ public bool MindIsAntagonist(EntityUid? mindId) if (mindId == null) return false; + DebugTools.Assert(HasComp(mindId)); var ev = new MindIsAntagonistEvent(); RaiseLocalEvent(mindId.Value, ref ev); return ev.IsAntagonist; diff --git a/Content.Shared/Roles/StartingGearEquippedEvent.cs b/Content.Shared/Roles/StartingGearEquippedEvent.cs new file mode 100644 index 00000000000..41b6caccff6 --- /dev/null +++ b/Content.Shared/Roles/StartingGearEquippedEvent.cs @@ -0,0 +1,10 @@ +namespace Content.Shared.Roles; + +/// +/// Raised directed on an entity when a new starting gear prototype has been equipped. +/// +[ByRefEvent] +public record struct StartingGearEquippedEvent(EntityUid Entity) +{ + public readonly EntityUid Entity = Entity; +} diff --git a/Content.Shared/Salvage/SalvageMapPrototype.cs b/Content.Shared/Salvage/SalvageMapPrototype.cs index a9814c7b0ac..9b5a37c6689 100644 --- a/Content.Shared/Salvage/SalvageMapPrototype.cs +++ b/Content.Shared/Salvage/SalvageMapPrototype.cs @@ -4,7 +4,7 @@ namespace Content.Shared.Salvage; [Prototype] -public sealed class SalvageMapPrototype : IPrototype +public sealed partial class SalvageMapPrototype : IPrototype { [ViewVariables] [IdDataField] public string ID { get; } = default!; diff --git a/Content.Shared/Shadowkin/EtherealComponent.cs b/Content.Shared/Shadowkin/EtherealComponent.cs new file mode 100644 index 00000000000..0fc50c0f12e --- /dev/null +++ b/Content.Shared/Shadowkin/EtherealComponent.cs @@ -0,0 +1,36 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Shadowkin; + +[RegisterComponent, NetworkedComponent] +public sealed partial class EtherealComponent : Component +{ + /// + /// Does the Ent, Dark lights around it? + /// + [DataField] + public bool Darken = false; + + /// + /// Range of the Darken Effect. + /// + [DataField] + public float DarkenRange = 5; + + /// + /// Darken Effect Rate. + /// + [DataField] + public float DarkenRate = 0.084f; + + public List DarkenedLights = new(); + + public float DarkenAccumulator; + + public int OldMobMask; + + public int OldMobLayer; + + public List SuppressedFactions = new(); + public bool HasDoorBumpTag; +} \ No newline at end of file diff --git a/Content.Shared/Shadowkin/EtherealStunItemComponent.cs b/Content.Shared/Shadowkin/EtherealStunItemComponent.cs new file mode 100644 index 00000000000..053b5c11f67 --- /dev/null +++ b/Content.Shared/Shadowkin/EtherealStunItemComponent.cs @@ -0,0 +1,11 @@ +namespace Content.Shared.Shadowkin; + +[RegisterComponent] +public sealed partial class EtherealStunItemComponent : Component +{ + [DataField] + public float Radius = 10; + + [DataField] + public bool DeleteOnUse = true; +} \ No newline at end of file diff --git a/Content.Shared/Shadowkin/ShadowkinComponent.cs b/Content.Shared/Shadowkin/ShadowkinComponent.cs new file mode 100644 index 00000000000..b382f3112b7 --- /dev/null +++ b/Content.Shared/Shadowkin/ShadowkinComponent.cs @@ -0,0 +1,42 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Shadowkin; + +[RegisterComponent, NetworkedComponent] +public sealed partial class ShadowkinComponent : Component +{ + /// + /// Apply the SleepManaRegenMultiplier on SleepComponent if true. + /// + [DataField] + public bool SleepManaRegen = true; + + /// + /// What do edit the ManaRegenMultiplier when on Sleep. + /// + [DataField] + public float SleepManaRegenMultiplier = 4; + + /// + /// On MapInitEvent, will Blackeye the Shadowkin. + /// + [DataField] + public bool BlackeyeSpawn; + + /// + /// If mana is equal or lower then this value, blackeye the shadowkin. + /// + [DataField] + public float BlackEyeMana; + + /// + /// Set the Black-Eye Color. + /// + [DataField] + public Color BlackEyeColor = Color.Black; + + public Color OldEyeColor = Color.LimeGreen; + + [DataField] + public EntityUid? ShadowkinSleepAction; +} \ No newline at end of file diff --git a/Content.Shared/Shadowkin/ShadowkinCuffComponent.cs b/Content.Shared/Shadowkin/ShadowkinCuffComponent.cs new file mode 100644 index 00000000000..b4c62d66647 --- /dev/null +++ b/Content.Shared/Shadowkin/ShadowkinCuffComponent.cs @@ -0,0 +1,4 @@ +namespace Content.Shared.Shadowkin; + +[RegisterComponent] +public sealed partial class ShadowkinCuffComponent : Component { } \ No newline at end of file diff --git a/Content.Shared/Shadowkin/SharedEtherealSystem.cs b/Content.Shared/Shadowkin/SharedEtherealSystem.cs new file mode 100644 index 00000000000..66196faf0a3 --- /dev/null +++ b/Content.Shared/Shadowkin/SharedEtherealSystem.cs @@ -0,0 +1,141 @@ +using Content.Shared.Physics; +using Robust.Shared.Physics; +using System.Linq; +using Robust.Shared.Physics.Systems; +using Content.Shared.Interaction.Events; +using Robust.Shared.Timing; +using Content.Shared.Popups; +using Content.Shared.Throwing; +using Content.Shared.Weapons.Ranged.Events; +using Content.Shared.CombatMode.Pacification; +using Content.Shared.Psionics; +using Content.Shared.Mobs; +using Content.Shared.CCVar; +using Robust.Shared.Configuration; +using Content.Shared.Abilities.Psionics; +using Content.Shared.Tag; + +namespace Content.Shared.Shadowkin; + +public abstract class SharedEtherealSystem : EntitySystem +{ + [Dependency] private readonly SharedPhysicsSystem _physics = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] private readonly IGameTiming _gameTiming = default!; + [Dependency] private readonly IConfigurationManager _cfg = default!; + [Dependency] private readonly TagSystem _tag = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnStartup); + SubscribeLocalEvent(OnShutdown); + SubscribeLocalEvent(OnInteractionAttempt); + SubscribeLocalEvent(OnBeforeThrow); + SubscribeLocalEvent(OnAttemptPowerUse); + SubscribeLocalEvent(OnAttackAttempt); + SubscribeLocalEvent(OnShootAttempt); + SubscribeLocalEvent(OnMindbreak); + SubscribeLocalEvent(OnMobStateChanged); + } + + public virtual void OnStartup(EntityUid uid, EtherealComponent component, MapInitEvent args) + { + if (!TryComp(uid, out var fixtures)) + return; + + var fixture = fixtures.Fixtures.First(); + + component.OldMobMask = fixture.Value.CollisionMask; + component.OldMobLayer = fixture.Value.CollisionLayer; + + if (_cfg.GetCVar(CCVars.EtherealPassThrough)) + { + _physics.SetCollisionMask(uid, fixture.Key, fixture.Value, (int) CollisionGroup.GhostImpassable, fixtures); + _physics.SetCollisionLayer(uid, fixture.Key, fixture.Value, 0, fixtures); + + if (_tag.RemoveTag(uid, "DoorBumpOpener")) + component.HasDoorBumpTag = true; + + return; + } + + _physics.SetCollisionMask(uid, fixture.Key, fixture.Value, (int) CollisionGroup.FlyingMobMask, fixtures); + _physics.SetCollisionLayer(uid, fixture.Key, fixture.Value, (int) CollisionGroup.FlyingMobLayer, fixtures); + } + + public virtual void OnShutdown(EntityUid uid, EtherealComponent component, ComponentShutdown args) + { + if (!TryComp(uid, out var fixtures)) + return; + + var fixture = fixtures.Fixtures.First(); + + _physics.SetCollisionMask(uid, fixture.Key, fixture.Value, component.OldMobMask, fixtures); + _physics.SetCollisionLayer(uid, fixture.Key, fixture.Value, component.OldMobLayer, fixtures); + + if (component.HasDoorBumpTag) + _tag.AddTag(uid, "DoorBumpOpener"); + } + + private void OnMindbreak(EntityUid uid, EtherealComponent component, ref OnMindbreakEvent args) + { + RemComp(uid, component); + } + + private void OnMobStateChanged(EntityUid uid, EtherealComponent component, MobStateChangedEvent args) + { + if (args.NewMobState == MobState.Critical + || args.NewMobState == MobState.Dead) + RemComp(uid, component); + } + + private void OnShootAttempt(Entity ent, ref ShotAttemptedEvent args) + { + args.Cancel(); + } + + private void OnAttackAttempt(EntityUid uid, EtherealComponent component, AttackAttemptEvent args) + { + if (HasComp(args.Target)) + return; + + args.Cancel(); + } + + private void OnBeforeThrow(Entity ent, ref BeforeThrowEvent args) + { + var thrownItem = args.ItemUid; + + // Raise an AttemptPacifiedThrow event and rely on other systems to check + // whether the candidate item is OK to throw: + var ev = new AttemptPacifiedThrowEvent(thrownItem, ent); + RaiseLocalEvent(thrownItem, ref ev); + if (!ev.Cancelled) + return; + + args.Cancelled = true; + } + + private void OnInteractionAttempt(EntityUid uid, EtherealComponent component, InteractionAttemptEvent args) + { + if (!HasComp(args.Target) + || HasComp(args.Target)) + return; + + args.Cancel(); + if (_gameTiming.InPrediction) + return; + + _popup.PopupEntity(Loc.GetString("ethereal-pickup-fail"), args.Target.Value, uid); + } + + private void OnAttemptPowerUse(EntityUid uid, EtherealComponent component, OnAttemptPowerUseEvent args) + { + if (args.Power == "DarkSwap") + return; + + args.Cancel(); + } +} diff --git a/Content.Shared/Shadowkin/ShowEtherealComponent.cs b/Content.Shared/Shadowkin/ShowEtherealComponent.cs new file mode 100644 index 00000000000..45fa78fa0c4 --- /dev/null +++ b/Content.Shared/Shadowkin/ShowEtherealComponent.cs @@ -0,0 +1,6 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Shadowkin; + +[RegisterComponent] +public sealed partial class ShowEtherealComponent : Component { } \ No newline at end of file diff --git a/Content.Shared/ShortConstruction/ShortConstructionComponent.cs b/Content.Shared/ShortConstruction/ShortConstructionComponent.cs index 4ca40638668..57f3f9c668d 100644 --- a/Content.Shared/ShortConstruction/ShortConstructionComponent.cs +++ b/Content.Shared/ShortConstruction/ShortConstructionComponent.cs @@ -1,7 +1,5 @@ -using Content.Shared.Construction.Prototypes; +using Content.Shared.RadialSelector; using Robust.Shared.GameStates; -using Robust.Shared.Prototypes; -using Robust.Shared.Serialization; namespace Content.Shared.ShortConstruction; @@ -9,11 +7,5 @@ namespace Content.Shared.ShortConstruction; public sealed partial class ShortConstructionComponent : Component { [DataField(required: true)] - public List> Prototypes = new(); -} - -[NetSerializable, Serializable] -public enum ShortConstructionUiKey : byte -{ - Key, + public List Entries = new(); } diff --git a/Content.Shared/Silicon/BatteryDrinkerEvent.cs b/Content.Shared/Silicon/BatteryDrinkerEvent.cs index 4d9a610055d..99af03df3a1 100644 --- a/Content.Shared/Silicon/BatteryDrinkerEvent.cs +++ b/Content.Shared/Silicon/BatteryDrinkerEvent.cs @@ -6,7 +6,5 @@ namespace Content.Shared.Silicon; [Serializable, NetSerializable] public sealed partial class BatteryDrinkerDoAfterEvent : SimpleDoAfterEvent { - public BatteryDrinkerDoAfterEvent() - { - } + public BatteryDrinkerDoAfterEvent() { } } diff --git a/Content.Shared/Silicon/BlindHealing/SharedBlindHealingSystem.cs b/Content.Shared/Silicon/BlindHealing/SharedBlindHealingSystem.cs index be4be9e5d38..bfc5092b644 100644 --- a/Content.Shared/Silicon/BlindHealing/SharedBlindHealingSystem.cs +++ b/Content.Shared/Silicon/BlindHealing/SharedBlindHealingSystem.cs @@ -6,8 +6,6 @@ namespace Content.Shared.Silicon.BlindHealing; public abstract partial class SharedBlindHealingSystem : EntitySystem { [Serializable, NetSerializable] - protected sealed partial class HealingDoAfterEvent : SimpleDoAfterEvent - { - } + protected sealed partial class HealingDoAfterEvent : SimpleDoAfterEvent { } } diff --git a/Content.Shared/Silicon/Components/SiliconComponent.cs b/Content.Shared/Silicon/Components/SiliconComponent.cs index c80d9397d93..bcee4d161a5 100644 --- a/Content.Shared/Silicon/Components/SiliconComponent.cs +++ b/Content.Shared/Silicon/Components/SiliconComponent.cs @@ -1,7 +1,6 @@ using Robust.Shared.GameStates; using Content.Shared.Silicon.Systems; using Robust.Shared.Serialization.TypeSerializers.Implementations; -using Robust.Shared.Containers; using Robust.Shared.Prototypes; using Content.Shared.Alert; @@ -36,7 +35,7 @@ public sealed partial class SiliconComponent : Component /// /// Is the Silicon currently dead? /// - public bool Dead = false; + public bool Dead; // BatterySystem took issue with how this was used, so I'm coming back to it at a later date, when more foundational Silicon stuff is implemented. // /// @@ -52,7 +51,7 @@ public sealed partial class SiliconComponent : Component /// Any new types of Silicons should be added to the enum. /// Setting this to Npc will delay charge state updates by LastDrainTime and skip battery heat calculations /// - [DataField("entityType", customTypeSerializer: typeof(EnumSerializer))] + [DataField(customTypeSerializer: typeof(EnumSerializer))] public Enum EntityType = SiliconType.Npc; /// @@ -61,13 +60,13 @@ public sealed partial class SiliconComponent : Component /// /// If true, should go along with a battery component. One will not be added automatically. /// - [DataField("batteryPowered"), ViewVariables(VVAccess.ReadWrite)] - public bool BatteryPowered = false; + [DataField] + public bool BatteryPowered; /// /// How much power is drained by this Silicon every second by default. /// - [DataField("drainPerSecond"), ViewVariables(VVAccess.ReadWrite)] + [DataField] public float DrainPerSecond = 50f; @@ -79,15 +78,15 @@ public sealed partial class SiliconComponent : Component /// Setting a value to null will disable that state. /// Setting Critical to 0 will cause the Silicon to never enter the dead state. /// - [DataField("chargeThresholdMid"), ViewVariables(VVAccess.ReadWrite)] + [DataField] public float? ChargeThresholdMid = 0.5f; /// - [DataField("chargeThresholdLow"), ViewVariables(VVAccess.ReadWrite)] + [DataField] public float? ChargeThresholdLow = 0.25f; /// - [DataField("chargeThresholdCritical"), ViewVariables(VVAccess.ReadWrite)] + [DataField] public float? ChargeThresholdCritical = 0.1f; [DataField] @@ -100,9 +99,16 @@ public sealed partial class SiliconComponent : Component /// /// The amount the Silicon will be slowed at each charge state. /// - [DataField("speedModifierThresholds", required: true)] - public Dictionary SpeedModifierThresholds = default!; + [DataField(required: true)] + public Dictionary SpeedModifierThresholds = default!; - [DataField("fireStackMultiplier"), ViewVariables(VVAccess.ReadWrite)] + [DataField] public float FireStackMultiplier = 1f; + + /// + /// Whether or not a Silicon will cancel all sleep events. + /// Maybe you want an android that can sleep as well as drink APCs? I'm not going to judge. + /// + [DataField] + public bool DoSiliconsDreamOfElectricSheep; } diff --git a/Content.Shared/Silicon/DeadStartupButton/DeadStartupButtonComponent.cs b/Content.Shared/Silicon/DeadStartupButton/DeadStartupButtonComponent.cs index 3390a76439b..9c2e5baf573 100644 --- a/Content.Shared/Silicon/DeadStartupButton/DeadStartupButtonComponent.cs +++ b/Content.Shared/Silicon/DeadStartupButton/DeadStartupButtonComponent.cs @@ -3,26 +3,26 @@ namespace Content.Shared.Silicon.DeadStartupButton; /// -/// This is used for... +/// This is used for Silicon entities such as IPCs, Cyborgs, Androids, anything "living" with a button people can touch. /// [RegisterComponent] public sealed partial class DeadStartupButtonComponent : Component { - [DataField("verbText")] + [DataField] public string VerbText = "dead-startup-button-verb"; - [DataField("sound")] + [DataField] public SoundSpecifier Sound = new SoundPathSpecifier("/Audio/Effects/Arcade/newgame.ogg"); - [DataField("buttonSound")] + [DataField] public SoundSpecifier ButtonSound = new SoundPathSpecifier("/Audio/Machines/button.ogg"); - [DataField("doAfterInterval"), ViewVariables(VVAccess.ReadWrite)] + [DataField] public float DoAfterInterval = 1f; - [DataField("buzzSound")] + [DataField] public SoundSpecifier BuzzSound = new SoundCollectionSpecifier("buzzes"); - [DataField("verbPriority"), ViewVariables(VVAccess.ReadWrite)] + [DataField] public int VerbPriority = 1; } diff --git a/Content.Shared/Silicon/DeadStartupButton/SharedDeadStartupButtonSystem.cs b/Content.Shared/Silicon/DeadStartupButton/SharedDeadStartupButtonSystem.cs index 2faa6dfde00..ced89e78608 100644 --- a/Content.Shared/Silicon/DeadStartupButton/SharedDeadStartupButtonSystem.cs +++ b/Content.Shared/Silicon/DeadStartupButton/SharedDeadStartupButtonSystem.cs @@ -10,19 +10,16 @@ namespace Content.Shared.Silicon.DeadStartupButton; /// -/// This creates a Button that can be activated after an entity, usually a silicon or an IPC, died. -/// This will activate a doAfter and then revive the entity, playing a custom afterward sound. +/// This creates a Button that can be activated after an entity, usually a silicon or an IPC, died. +/// This will activate a doAfter and then revive the entity, playing a custom afterward sound. /// -public partial class SharedDeadStartupButtonSystem : EntitySystem +public abstract partial class SharedDeadStartupButtonSystem : EntitySystem { [Dependency] private readonly MobStateSystem _mobState = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly SharedDoAfterSystem _doAfterSystem = default!; [Dependency] private readonly INetManager _net = default!; - - - /// public override void Initialize() { @@ -31,10 +28,9 @@ public override void Initialize() private void AddTurnOnVerb(EntityUid uid, DeadStartupButtonComponent component, GetVerbsEvent args) { - if (!args.CanAccess || !args.CanInteract || args.Hands == null) - return; - - if (!TryComp(uid, out MobStateComponent? mobStateComponent) || !_mobState.IsDead(uid, mobStateComponent)) + if (!TryComp(uid, out var mobState) + || !_mobState.IsDead(uid, mobState) + || !args.CanAccess || !args.CanInteract || args.Hands == null) return; args.Verbs.Add(new AlternativeVerb() @@ -50,6 +46,7 @@ private void TryStartup(EntityUid user, EntityUid target, DeadStartupButtonCompo { if (!_net.IsServer) return; + _audio.PlayPvs(comp.ButtonSound, target); var args = new DoAfterArgs(EntityManager, user, comp.DoAfterInterval, new OnDoAfterButtonPressedEvent(), target, target:target) { @@ -60,9 +57,5 @@ private void TryStartup(EntityUid user, EntityUid target, DeadStartupButtonCompo } [Serializable, NetSerializable] - public sealed partial class OnDoAfterButtonPressedEvent : SimpleDoAfterEvent - { - } - - + public sealed partial class OnDoAfterButtonPressedEvent : SimpleDoAfterEvent { } } diff --git a/Content.Shared/Silicon/EmitBuzzWhileDamaged/EmitBuzzWhileDamagedComponent.cs b/Content.Shared/Silicon/EmitBuzzWhileDamaged/EmitBuzzWhileDamagedComponent.cs index a8362610e25..986292551d0 100644 --- a/Content.Shared/Silicon/EmitBuzzWhileDamaged/EmitBuzzWhileDamagedComponent.cs +++ b/Content.Shared/Silicon/EmitBuzzWhileDamaged/EmitBuzzWhileDamagedComponent.cs @@ -1,26 +1,26 @@ -using System.ComponentModel.DataAnnotations; using Robust.Shared.Audio; namespace Content.Shared.Silicon.EmitBuzzWhileDamaged; /// -/// This is used for controlling the cadence of the buzzing emitted by EmitBuzzOnCritSystem. -/// This component is used by mechanical species that can get to critical health. +/// This is used for controlling the cadence of the buzzing emitted by EmitBuzzOnCritSystem. +/// This component is used by mechanical species that can get to critical health. /// [RegisterComponent] public sealed partial class EmitBuzzWhileDamagedComponent : Component { - [DataField("buzzPopupCooldown")] - public TimeSpan BuzzPopupCooldown { get; private set; } = TimeSpan.FromSeconds(8); + [DataField] + public TimeSpan BuzzPopupCooldown = TimeSpan.FromSeconds(8); [ViewVariables] public TimeSpan LastBuzzPopupTime; - [DataField("cycleDelay")] + [DataField] public float CycleDelay = 2.0f; + [ViewVariables] public float AccumulatedFrametime; - [DataField("sound")] + [DataField] public SoundSpecifier Sound = new SoundCollectionSpecifier("buzzes"); } diff --git a/Content.Shared/Silicon/Systems/SharedSiliconSystem.cs b/Content.Shared/Silicon/Systems/SharedSiliconSystem.cs index aab9b6e7522..8fe87e162bc 100644 --- a/Content.Shared/Silicon/Systems/SharedSiliconSystem.cs +++ b/Content.Shared/Silicon/Systems/SharedSiliconSystem.cs @@ -1,17 +1,17 @@ using Content.Shared.Silicon.Components; using Content.Shared.Alert; -using Robust.Shared.Serialization; -using Content.Shared.Movement.Systems; +using Content.Shared.Bed.Sleep; using Content.Shared.Containers.ItemSlots; +using Content.Shared.Movement.Systems; using Content.Shared.PowerCell.Components; +using Robust.Shared.Serialization; namespace Content.Shared.Silicon.Systems; - public sealed class SharedSiliconChargeSystem : EntitySystem { [Dependency] private readonly AlertsSystem _alertsSystem = default!; - [Dependency] protected readonly ItemSlotsSystem ItemSlots = default!; + [Dependency] private readonly ItemSlotsSystem _itemSlots = default!; public override void Initialize() { @@ -22,47 +22,50 @@ public override void Initialize() SubscribeLocalEvent(OnRefreshMovespeed); SubscribeLocalEvent(OnItemSlotInsertAttempt); SubscribeLocalEvent(OnItemSlotEjectAttempt); + SubscribeLocalEvent(OnTryingToSleep); } - private void OnItemSlotInsertAttempt(EntityUid uid, SiliconComponent component, ref ItemSlotInsertAttemptEvent args) + /// + /// Silicon entities can now also be Living player entities. We may want to prevent them from sleeping if they can't sleep. + /// + private void OnTryingToSleep(EntityUid uid, SiliconComponent component, ref TryingToSleepEvent args) { - if (args.Cancelled) - return; - - if (!TryComp(uid, out var cellSlotComp)) - return; + args.Cancelled = !component.DoSiliconsDreamOfElectricSheep; + } - if (!ItemSlots.TryGetSlot(uid, cellSlotComp.CellSlotId, out var cellSlot) || cellSlot != args.Slot) + private void OnItemSlotInsertAttempt(EntityUid uid, SiliconComponent component, ref ItemSlotInsertAttemptEvent args) + { + if (args.Cancelled + || !TryComp(uid, out var cellSlotComp) + || !_itemSlots.TryGetSlot(uid, cellSlotComp.CellSlotId, out var cellSlot) + || cellSlot != args.Slot || args.User != uid) return; - if (args.User == uid) - args.Cancelled = true; + args.Cancelled = true; } private void OnItemSlotEjectAttempt(EntityUid uid, SiliconComponent component, ref ItemSlotEjectAttemptEvent args) { - if (args.Cancelled) - return; - - if (!TryComp(uid, out var cellSlotComp)) - return; - - if (!ItemSlots.TryGetSlot(uid, cellSlotComp.CellSlotId, out var cellSlot) || cellSlot != args.Slot) + if (args.Cancelled + || !TryComp(uid, out var cellSlotComp) + || !_itemSlots.TryGetSlot(uid, cellSlotComp.CellSlotId, out var cellSlot) + || cellSlot != args.Slot || args.User != uid) return; - if (args.User == uid) - args.Cancelled = true; + args.Cancelled = true; } private void OnSiliconInit(EntityUid uid, SiliconComponent component, ComponentInit args) { - if (component.BatteryPowered) - _alertsSystem.ShowAlert(uid, AlertType.BorgBattery, component.ChargeState); + if (!component.BatteryPowered) + return; + + _alertsSystem.ShowAlert(uid, AlertType.BorgBattery, component.ChargeState); } private void OnSiliconChargeStateUpdate(EntityUid uid, SiliconComponent component, SiliconChargeStateUpdateEvent ev) { - _alertsSystem.ShowAlert(uid, AlertType.BorgBattery, (short) ev.ChargePercent); + _alertsSystem.ShowAlert(uid, AlertType.BorgBattery, ev.ChargePercent); } private void OnRefreshMovespeed(EntityUid uid, SiliconComponent component, RefreshMovementSpeedModifiersEvent args) @@ -70,17 +73,12 @@ private void OnRefreshMovespeed(EntityUid uid, SiliconComponent component, Refre if (!component.BatteryPowered) return; - var speedModThresholds = component.SpeedModifierThresholds; - - var closest = 0f; - - foreach (var state in speedModThresholds) - { - if (component.ChargeState >= state.Key && (float) state.Key > closest) - closest = (float) state.Key; - } + var closest = 0; + foreach (var state in component.SpeedModifierThresholds) + if (component.ChargeState >= state.Key && state.Key > closest) + closest = state.Key; - var speedMod = speedModThresholds[(short) closest]; + var speedMod = component.SpeedModifierThresholds[closest]; args.ModifySpeed(speedMod, speedMod); } diff --git a/Content.Shared/Silicons/Borgs/Components/BorgTransponderComponent.cs b/Content.Shared/Silicons/Borgs/Components/BorgTransponderComponent.cs new file mode 100644 index 00000000000..8c15e20d5d0 --- /dev/null +++ b/Content.Shared/Silicons/Borgs/Components/BorgTransponderComponent.cs @@ -0,0 +1,43 @@ +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; +using Robust.Shared.Utility; + +namespace Content.Shared.Silicons.Borgs.Components; + +/// +/// Periodically broadcasts borg data to robotics consoles. +/// When not emagged, handles disabling and destroying commands as expected. +/// +[RegisterComponent, Access(typeof(SharedBorgSystem))] +public sealed partial class BorgTransponderComponent : Component +{ + /// + /// Sprite of the chassis to send. + /// + [DataField(required: true)] + public SpriteSpecifier? Sprite; + + /// + /// Name of the chassis to send. + /// + [DataField(required: true)] + public string Name = string.Empty; + + /// + /// Popup shown to everyone when a borg is disabled. + /// Gets passed a string "name". + /// + [DataField] + public LocId DisabledPopup = "borg-transponder-disabled-popup"; + + /// + /// How long to wait between each broadcast. + /// + [DataField] + public TimeSpan BroadcastDelay = TimeSpan.FromSeconds(5); + + /// + /// When to next broadcast data. + /// + [DataField(customTypeSerializer: typeof(TimeOffsetSerializer))] + public TimeSpan NextBroadcast = TimeSpan.Zero; +} diff --git a/Content.Shared/Silicons/Laws/SiliconLawPrototype.cs b/Content.Shared/Silicons/Laws/SiliconLawPrototype.cs index f6407be5c7b..5e5df448b33 100644 --- a/Content.Shared/Silicons/Laws/SiliconLawPrototype.cs +++ b/Content.Shared/Silicons/Laws/SiliconLawPrototype.cs @@ -58,7 +58,7 @@ public SiliconLaw ShallowClone() /// [Prototype("siliconLaw")] [Serializable, NetSerializable] -public sealed class SiliconLawPrototype : SiliconLaw, IPrototype +public sealed partial class SiliconLawPrototype : SiliconLaw, IPrototype { /// [IdDataField] diff --git a/Content.Shared/SimpleStation14/Traits/Components/NearsightedComponent.cs b/Content.Shared/SimpleStation14/Traits/Components/NearsightedComponent.cs deleted file mode 100644 index fafd8f87102..00000000000 --- a/Content.Shared/SimpleStation14/Traits/Components/NearsightedComponent.cs +++ /dev/null @@ -1,49 +0,0 @@ -using Robust.Shared.GameStates; - -namespace Content.Shared.SimpleStation14.Traits.Components; - -/// -/// Owner entity cannot see well, without prescription glasses. -/// -[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] -public sealed partial class NearsightedComponent : Component -{ - /// - /// Distance from the edge of the screen to the center - /// - /// - /// I don't know how the distance is measured, 1 is very close to the center, 0 is maybe visible around the edge - /// - [DataField("radius"), ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] - public float Radius = 0.8f; - - /// - /// How dark the circle mask is from - /// - /// - /// I also don't know how this works, it only starts getting noticeably dark at 0.7, and is definitely noticeable at 0.9, 1 is black - /// - [DataField("alpha"), ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] - public float Alpha = 0.995f; - - /// - [DataField("equippedRadius"), ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] - public float EquippedRadius = 0.45f; - - /// - [DataField("equippedAlpha"), ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] - public float EquippedAlpha = 0.93f; - - /// - /// How long the lerp animation should go on for in seconds. - /// - [DataField("lerpDuration"), ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] - public float LerpDuration = 0.25f; - - /// - /// If true, uses the variables prefixed "Equipped" - /// If false, uses the variables without a prefix - /// - [ViewVariables(VVAccess.ReadWrite)] // Make the system shared if you want this networked, I don't wanna do that - public bool Active = false; -} diff --git a/Content.Shared/Singularity/Components/SharedEmitterComponent.cs b/Content.Shared/Singularity/Components/SharedEmitterComponent.cs index c2e7af717b1..cc6e8aeede2 100644 --- a/Content.Shared/Singularity/Components/SharedEmitterComponent.cs +++ b/Content.Shared/Singularity/Components/SharedEmitterComponent.cs @@ -1,4 +1,5 @@ using System.Threading; +using Content.Shared.Construction.Prototypes; using Content.Shared.DeviceLinking; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; @@ -14,90 +15,130 @@ public sealed partial class EmitterComponent : Component { public CancellationTokenSource? TimerCancel; - // whether the power switch is in "on" - [ViewVariables] public bool IsOn; - // Whether the power switch is on AND the machine has enough power (so is actively firing) - [ViewVariables] public bool IsPowered; + /// + /// Whether the power switch is on + /// + [ViewVariables] + public bool IsOn; /// - /// counts the number of consecutive shots fired. + /// Whether the power switch is on AND the machine has enough power (so is actively firing) + /// + [ViewVariables] + public bool IsPowered; + + /// + /// counts the number of consecutive shots fired. /// [ViewVariables] public int FireShotCounter; /// - /// The entity that is spawned when the emitter fires. + /// The entity that is spawned when the emitter fires. /// - [DataField("boltType", customTypeSerializer: typeof(PrototypeIdSerializer))] + [DataField(customTypeSerializer: typeof(PrototypeIdSerializer))] public string BoltType = "EmitterBolt"; - [DataField("selectableTypes", customTypeSerializer: typeof(PrototypeIdListSerializer))] + [DataField(customTypeSerializer: typeof(PrototypeIdListSerializer))] public List SelectableTypes = new(); /// - /// The current amount of power being used. + /// The current amount of power being used. /// - [DataField("powerUseActive")] + [DataField] public int PowerUseActive = 600; /// - /// The amount of shots that are fired in a single "burst" + /// The amount of shots that are fired in a single "burst" /// - [DataField("fireBurstSize")] + [DataField] public int FireBurstSize = 3; /// - /// The time between each shot during a burst. + /// The time between each shot during a burst. /// - [DataField("fireInterval")] + [DataField] public TimeSpan FireInterval = TimeSpan.FromSeconds(2); /// - /// The current minimum delay between bursts. + /// The base amount of time between each shot during a burst. /// - [DataField("fireBurstDelayMin")] + [DataField] + public TimeSpan BaseFireInterval = TimeSpan.FromSeconds(2); + + /// + /// The current minimum delay between bursts. + /// + [DataField] public TimeSpan FireBurstDelayMin = TimeSpan.FromSeconds(4); /// - /// The current maximum delay between bursts. + /// The current maximum delay between bursts. /// - [DataField("fireBurstDelayMax")] + [DataField] public TimeSpan FireBurstDelayMax = TimeSpan.FromSeconds(10); /// - /// The visual state that is set when the emitter is turned on + /// The base minimum delay between shot bursts. + /// Used for machine part rating calculations. + /// + [DataField] + public TimeSpan BaseFireBurstDelayMin = TimeSpan.FromSeconds(4); + + /// + /// The base maximum delay between shot bursts. + /// Used for machine part rating calculations. + /// + [DataField] + public TimeSpan BaseFireBurstDelayMax = TimeSpan.FromSeconds(10); + + /// + /// The multiplier for the base delay between shot bursts as well as + /// the fire interval + /// + [DataField] + public float FireRateMultiplier = 0.8f; + + /// + /// The machine part that affects burst delay. + /// + [DataField(customTypeSerializer: typeof(PrototypeIdSerializer))] + public string MachinePartFireRate = "Capacitor"; + + /// + /// The visual state that is set when the emitter is turned on /// - [DataField("onState")] + [DataField] public string? OnState = "beam"; /// - /// The visual state that is set when the emitter doesn't have enough power. + /// The visual state that is set when the emitter doesn't have enough power. /// - [DataField("underpoweredState")] + [DataField] public string? UnderpoweredState = "underpowered"; /// - /// Signal port that turns on the emitter. + /// Signal port that turns on the emitter. /// - [DataField("onPort", customTypeSerializer: typeof(PrototypeIdSerializer))] + [DataField(customTypeSerializer: typeof(PrototypeIdSerializer))] public string OnPort = "On"; /// - /// Signal port that turns off the emitter. + /// Signal port that turns off the emitter. /// - [DataField("offPort", customTypeSerializer: typeof(PrototypeIdSerializer))] + [DataField(customTypeSerializer: typeof(PrototypeIdSerializer))] public string OffPort = "Off"; /// - /// Signal port that toggles the emitter on or off. + /// Signal port that toggles the emitter on or off. /// - [DataField("togglePort", customTypeSerializer: typeof(PrototypeIdSerializer))] + [DataField(customTypeSerializer: typeof(PrototypeIdSerializer))] public string TogglePort = "Toggle"; /// - /// Map of signal ports to entity prototype IDs of the entity that will be fired. + /// Map of signal ports to entity prototype IDs of the entity that will be fired. /// - [DataField("setTypePorts", customTypeSerializer: typeof(PrototypeIdDictionarySerializer))] + [DataField(customTypeSerializer: typeof(PrototypeIdDictionarySerializer))] public Dictionary SetTypePorts = new(); } diff --git a/Content.Server/Speech/Components/VocalComponent.cs b/Content.Shared/Speech/Components/VocalComponent.cs similarity index 83% rename from Content.Server/Speech/Components/VocalComponent.cs rename to Content.Shared/Speech/Components/VocalComponent.cs index 029d638a669..e5d2c9997fa 100644 --- a/Content.Server/Speech/Components/VocalComponent.cs +++ b/Content.Shared/Speech/Components/VocalComponent.cs @@ -1,18 +1,18 @@ -using Content.Server.Speech.EntitySystems; using Content.Shared.Chat.Prototypes; using Content.Shared.Humanoid; using Robust.Shared.Audio; +using Robust.Shared.GameStates; using Robust.Shared.Prototypes; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Dictionary; -namespace Content.Server.Speech.Components; +namespace Content.Shared.Speech.Components; /// /// Component required for entities to be able to do vocal emotions. /// -[RegisterComponent] -[Access(typeof(VocalSystem))] +[RegisterComponent, NetworkedComponent] +[AutoGenerateComponentState] public sealed partial class VocalComponent : Component { /// @@ -20,21 +20,27 @@ public sealed partial class VocalComponent : Component /// Entities without considered to be . /// [DataField("sounds", customTypeSerializer: typeof(PrototypeIdValueDictionarySerializer))] + [AutoNetworkedField] public Dictionary? Sounds; [DataField("screamId", customTypeSerializer: typeof(PrototypeIdSerializer))] + [AutoNetworkedField] public string ScreamId = "Scream"; [DataField("wilhelm")] + [AutoNetworkedField] public SoundSpecifier Wilhelm = new SoundPathSpecifier("/Audio/Voice/Human/wilhelm_scream.ogg"); [DataField("wilhelmProbability")] + [AutoNetworkedField] public float WilhelmProbability = 0.0002f; [DataField("screamAction", customTypeSerializer: typeof(PrototypeIdSerializer))] + [AutoNetworkedField] public string ScreamAction = "ActionScream"; [DataField("screamActionEntity")] + [AutoNetworkedField] public EntityUid? ScreamActionEntity; /// @@ -42,5 +48,6 @@ public sealed partial class VocalComponent : Component /// Null if no valid prototype for entity sex was found. /// [ViewVariables] + [AutoNetworkedField] public EmoteSoundsPrototype? EmoteSounds = null; } diff --git a/Content.Shared/Speech/SpeechComponent.cs b/Content.Shared/Speech/SpeechComponent.cs index 272d9ef8cab..0882120718d 100644 --- a/Content.Shared/Speech/SpeechComponent.cs +++ b/Content.Shared/Speech/SpeechComponent.cs @@ -1,3 +1,4 @@ +using Content.Shared.Chat.Prototypes; using Robust.Shared.Audio; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; @@ -26,6 +27,13 @@ public sealed partial class SpeechComponent : Component [DataField] public ProtoId SpeechVerb = "Default"; + /// + /// What emotes allowed to use event if emote is false + /// + [ViewVariables(VVAccess.ReadWrite)] + [DataField] + public List> AllowedEmotes = new(); + /// /// A mapping from chat suffixes loc strings to speech verb prototypes that should be conditionally used. /// For things like '?' changing to 'asks' or '!!' making text bold and changing to 'yells'. Can be overridden if necessary. diff --git a/Content.Shared/SprayPainter/Prototypes/AirlockDepartmentsPrototype.cs b/Content.Shared/SprayPainter/Prototypes/AirlockDepartmentsPrototype.cs index 3553597c526..b61aa037cc9 100644 --- a/Content.Shared/SprayPainter/Prototypes/AirlockDepartmentsPrototype.cs +++ b/Content.Shared/SprayPainter/Prototypes/AirlockDepartmentsPrototype.cs @@ -7,7 +7,7 @@ namespace Content.Shared.SprayPainter.Prototypes; /// Maps airlock style names to department ids. /// [Prototype("airlockDepartments")] -public sealed class AirlockDepartmentsPrototype : IPrototype +public sealed partial class AirlockDepartmentsPrototype : IPrototype { [IdDataField] public string ID { get; private set; } = default!; diff --git a/Content.Shared/Standing/LayingDownComponent.cs b/Content.Shared/Standing/LayingDownComponent.cs new file mode 100644 index 00000000000..ec9351e22ca --- /dev/null +++ b/Content.Shared/Standing/LayingDownComponent.cs @@ -0,0 +1,37 @@ +using Robust.Shared.GameStates; +using Robust.Shared.Serialization; + +namespace Content.Shared.Standing; + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class LayingDownComponent : Component +{ + [DataField, AutoNetworkedField] + public TimeSpan StandingUpTime = TimeSpan.FromSeconds(1); + + [DataField, AutoNetworkedField] + public float LyingSpeedModifier = 0.35f, + CrawlingUnderSpeedModifier = 0.5f; + + [DataField, AutoNetworkedField] + public bool AutoGetUp; + + /// + /// If true, the entity is choosing to crawl under furniture. This is purely visual and has no effect on physics. + /// + [DataField, AutoNetworkedField] + public bool IsCrawlingUnder = false; + + [DataField, AutoNetworkedField] + public int NormalDrawDepth = (int) DrawDepth.DrawDepth.Mobs, + CrawlingUnderDrawDepth = (int) DrawDepth.DrawDepth.SmallMobs; +} + +[Serializable, NetSerializable] +public sealed class ChangeLayingDownEvent : CancellableEntityEventArgs; + +[Serializable, NetSerializable] +public sealed class CheckAutoGetUpEvent(NetEntity user) : CancellableEntityEventArgs +{ + public NetEntity User = user; +} diff --git a/Content.Shared/Standing/SharedLayingDownSystem.cs b/Content.Shared/Standing/SharedLayingDownSystem.cs new file mode 100644 index 00000000000..9fa4717045c --- /dev/null +++ b/Content.Shared/Standing/SharedLayingDownSystem.cs @@ -0,0 +1,187 @@ +using Content.Shared.ActionBlocker; +using Content.Shared.CCVar; +using Content.Shared.DoAfter; +using Content.Shared.Gravity; +using Content.Shared.Input; +using Content.Shared.Mobs.Systems; +using Content.Shared.Movement.Systems; +using Content.Shared.Popups; +using Content.Shared.Stunnable; +using Robust.Shared.Configuration; +using Robust.Shared.Input.Binding; +using Robust.Shared.Player; +using Robust.Shared.Serialization; + +namespace Content.Shared.Standing; + +public abstract class SharedLayingDownSystem : EntitySystem +{ + [Dependency] private readonly MobStateSystem _mobState = default!; + [Dependency] private readonly StandingStateSystem _standing = default!; + [Dependency] private readonly SharedDoAfterSystem _doAfter = default!; + [Dependency] private readonly SharedGravitySystem _gravity = default!; + [Dependency] private readonly IConfigurationManager _config = default!; + [Dependency] private readonly SharedPopupSystem _popups = default!; + [Dependency] private readonly MovementSpeedModifierSystem _speed = default!; + [Dependency] private readonly ActionBlockerSystem _actionBlocker = default!; + + public override void Initialize() + { + CommandBinds.Builder + .Bind(ContentKeyFunctions.ToggleStanding, InputCmdHandler.FromDelegate(ToggleStanding)) + .Bind(ContentKeyFunctions.ToggleCrawlingUnder, InputCmdHandler.FromDelegate(HandleCrawlUnderRequest, handle: false)) + .Register(); + + SubscribeNetworkEvent(OnChangeState); + + SubscribeLocalEvent(OnStandingUpDoAfter); + SubscribeLocalEvent(OnRefreshMovementSpeed); + SubscribeLocalEvent(OnParentChanged); + } + + public override void Shutdown() + { + base.Shutdown(); + + CommandBinds.Unregister(); + } + + private void ToggleStanding(ICommonSession? session) + { + if (session is not { AttachedEntity: { Valid: true } uid } _ + || !Exists(uid) + || !HasComp(session.AttachedEntity) + || _gravity.IsWeightless(session.AttachedEntity.Value)) + return; + + RaiseNetworkEvent(new ChangeLayingDownEvent()); + } + + private void HandleCrawlUnderRequest(ICommonSession? session) + { + if (session == null + || session.AttachedEntity is not {} uid + || !TryComp(uid, out var standingState) + || !TryComp(uid, out var layingDown) + || !_actionBlocker.CanInteract(uid, null)) + return; + + var newState = !layingDown.IsCrawlingUnder; + if (standingState.CurrentState is StandingState.Standing) + newState = false; // If the entity is already standing, this function only serves a fallback method to fix its draw depth + + // Do not allow to begin crawling under if it's disabled in config. We still, however, allow to stop it, as a failsafe. + if (newState && !_config.GetCVar(CCVars.CrawlUnderTables)) + { + _popups.PopupEntity(Loc.GetString("crawling-under-tables-disabled-popup"), uid, session); + return; + } + + layingDown.IsCrawlingUnder = newState; + _speed.RefreshMovementSpeedModifiers(uid); + Dirty(uid, layingDown); + } + + private void OnChangeState(ChangeLayingDownEvent ev, EntitySessionEventArgs args) + { + if (!args.SenderSession.AttachedEntity.HasValue) + return; + + var uid = args.SenderSession.AttachedEntity.Value; + if (!TryComp(uid, out StandingStateComponent? standing) + || !TryComp(uid, out LayingDownComponent? layingDown)) + return; + + RaiseNetworkEvent(new CheckAutoGetUpEvent(GetNetEntity(uid))); + + if (HasComp(uid) + || !_mobState.IsAlive(uid)) + return; + + if (_standing.IsDown(uid, standing)) + TryStandUp(uid, layingDown, standing); + else + TryLieDown(uid, layingDown, standing); + } + + private void OnStandingUpDoAfter(EntityUid uid, StandingStateComponent component, StandingUpDoAfterEvent args) + { + if (args.Handled || args.Cancelled + || HasComp(uid) + || _mobState.IsIncapacitated(uid) + || !_standing.Stand(uid)) + component.CurrentState = StandingState.Lying; + + component.CurrentState = StandingState.Standing; + } + + private void OnRefreshMovementSpeed(EntityUid uid, LayingDownComponent component, RefreshMovementSpeedModifiersEvent args) + { + if (!_standing.IsDown(uid)) + return; + + var modifier = component.LyingSpeedModifier * (component.IsCrawlingUnder ? component.CrawlingUnderSpeedModifier : 1); + args.ModifySpeed(modifier, modifier); + } + + private void OnParentChanged(EntityUid uid, LayingDownComponent component, EntParentChangedMessage args) + { + // If the entity is not on a grid, try to make it stand up to avoid issues + if (!TryComp(uid, out var standingState) + || standingState.CurrentState is StandingState.Standing + || Transform(uid).GridUid != null) + return; + + _standing.Stand(uid, standingState); + } + + public bool TryStandUp(EntityUid uid, LayingDownComponent? layingDown = null, StandingStateComponent? standingState = null) + { + if (!Resolve(uid, ref standingState, false) + || !Resolve(uid, ref layingDown, false) + || standingState.CurrentState is not StandingState.Lying + || !_mobState.IsAlive(uid) + || TerminatingOrDeleted(uid)) + return false; + + var args = new DoAfterArgs(EntityManager, uid, layingDown.StandingUpTime, new StandingUpDoAfterEvent(), uid) + { + BreakOnHandChange = false, + RequireCanInteract = false + }; + + if (!_doAfter.TryStartDoAfter(args)) + return false; + + standingState.CurrentState = StandingState.GettingUp; + layingDown.IsCrawlingUnder = false; + return true; + } + + public bool TryLieDown(EntityUid uid, LayingDownComponent? layingDown = null, StandingStateComponent? standingState = null, DropHeldItemsBehavior behavior = DropHeldItemsBehavior.NoDrop) + { + if (!Resolve(uid, ref standingState, false) + || !Resolve(uid, ref layingDown, false) + || standingState.CurrentState is not StandingState.Standing) + { + if (behavior == DropHeldItemsBehavior.AlwaysDrop) + RaiseLocalEvent(uid, new DropHandItemsEvent()); + + return false; + } + + _standing.Down(uid, true, behavior != DropHeldItemsBehavior.NoDrop, standingState, setDrawDepth: true); + return true; + } +} + +[Serializable, NetSerializable] +public sealed partial class StandingUpDoAfterEvent : SimpleDoAfterEvent; + +[Serializable, NetSerializable] +public enum DropHeldItemsBehavior : byte +{ + NoDrop, + DropIfStanding, + AlwaysDrop +} diff --git a/Content.Shared/Standing/StandingStateComponent.cs b/Content.Shared/Standing/StandingStateComponent.cs index 5d7bb0a59fd..5b9759a0252 100644 --- a/Content.Shared/Standing/StandingStateComponent.cs +++ b/Content.Shared/Standing/StandingStateComponent.cs @@ -1,24 +1,31 @@ using Robust.Shared.Audio; using Robust.Shared.GameStates; -namespace Content.Shared.Standing +namespace Content.Shared.Standing; + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class StandingStateComponent : Component { - [RegisterComponent, NetworkedComponent, AutoGenerateComponentState] - [Access(typeof(StandingStateSystem))] - public sealed partial class StandingStateComponent : Component - { - [ViewVariables(VVAccess.ReadWrite)] - [DataField] - public SoundSpecifier DownSound { get; private set; } = new SoundCollectionSpecifier("BodyFall"); + [DataField] + public SoundSpecifier DownSound { get; private set; } = new SoundCollectionSpecifier("BodyFall"); + + [DataField, AutoNetworkedField] + public StandingState CurrentState { get; set; } = StandingState.Standing; - [DataField, AutoNetworkedField] - public bool Standing { get; set; } = true; + [DataField, AutoNetworkedField] + public bool Standing { get; set; } = true; - /// - /// List of fixtures that had their collision mask changed when the entity was downed. - /// Required for re-adding the collision mask. - /// - [DataField, AutoNetworkedField] - public List ChangedFixtures = new(); - } + /// + /// List of fixtures that had their collision mask changed when the entity was downed. + /// Required for re-adding the collision mask. + /// + [DataField, AutoNetworkedField] + public List ChangedFixtures = new(); +} + +public enum StandingState +{ + Lying, + GettingUp, + Standing, } diff --git a/Content.Shared/Standing/StandingStateSystem.cs b/Content.Shared/Standing/StandingStateSystem.cs index 517831b8a1b..5abbf53f1b2 100644 --- a/Content.Shared/Standing/StandingStateSystem.cs +++ b/Content.Shared/Standing/StandingStateSystem.cs @@ -1,166 +1,187 @@ +using Content.Shared.Buckle; +using Content.Shared.Buckle.Components; +using Content.Shared.Climbing.Systems; +using Content.Shared.Climbing.Components; using Content.Shared.Hands.Components; +using Content.Shared.Movement.Systems; using Content.Shared.Physics; using Content.Shared.Rotation; -using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; using Robust.Shared.Physics; using Robust.Shared.Physics.Systems; +using System.Linq; -namespace Content.Shared.Standing +namespace Content.Shared.Standing; + +public sealed class StandingStateSystem : EntitySystem { - public sealed class StandingStateSystem : EntitySystem + [Dependency] private readonly SharedAppearanceSystem _appearance = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly SharedPhysicsSystem _physics = default!; + [Dependency] private readonly MovementSpeedModifierSystem _movement = default!; + [Dependency] private readonly SharedBuckleSystem _buckle = default!; + [Dependency] private readonly EntityLookupSystem _lookup = default!; + [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; + + public bool IsDown(EntityUid uid, StandingStateComponent? standingState = null) { - [Dependency] private readonly SharedAppearanceSystem _appearance = default!; - [Dependency] private readonly SharedAudioSystem _audio = default!; - [Dependency] private readonly SharedPhysicsSystem _physics = default!; + if (!Resolve(uid, ref standingState, false)) + return false; - // If StandingCollisionLayer value is ever changed to more than one layer, the logic needs to be edited. - private const int StandingCollisionLayer = (int) CollisionGroup.MidImpassable; + return standingState.CurrentState is StandingState.Lying or StandingState.GettingUp; + } - public bool IsDown(EntityUid uid, StandingStateComponent? standingState = null) - { - if (!Resolve(uid, ref standingState, false)) - return false; + public bool Down(EntityUid uid, bool playSound = true, bool dropHeldItems = true, + StandingStateComponent? standingState = null, + AppearanceComponent? appearance = null, + HandsComponent? hands = null, + bool setDrawDepth = false) + { + // TODO: This should actually log missing comps... + if (!Resolve(uid, ref standingState, false)) + return false; - return !standingState.Standing; - } + // Optional component. + Resolve(uid, ref appearance, ref hands, false); - public bool Down(EntityUid uid, bool playSound = true, bool dropHeldItems = true, - StandingStateComponent? standingState = null, - AppearanceComponent? appearance = null, - HandsComponent? hands = null) - { - // TODO: This should actually log missing comps... - if (!Resolve(uid, ref standingState, false)) - return false; + if (standingState.CurrentState is StandingState.Lying or StandingState.GettingUp) + return true; + + // This is just to avoid most callers doing this manually saving boilerplate + // 99% of the time you'll want to drop items but in some scenarios (e.g. buckling) you don't want to. + // We do this BEFORE downing because something like buckle may be blocking downing but we want to drop hand items anyway + // and ultimately this is just to avoid boilerplate in Down callers + keep their behavior consistent. + if (dropHeldItems && hands != null) + RaiseLocalEvent(uid, new DropHandItemsEvent(), false); + + if (TryComp(uid, out BuckleComponent? buckle) && buckle.Buckled && !_buckle.TryUnbuckle(uid, uid, buckleComp: buckle)) + return false; + + var msg = new DownAttemptEvent(); + RaiseLocalEvent(uid, msg, false); + + if (msg.Cancelled) + return false; - // Optional component. - Resolve(uid, ref appearance, ref hands, false); + standingState.CurrentState = StandingState.Lying; + Dirty(standingState); + RaiseLocalEvent(uid, new DownedEvent(), false); - if (!standingState.Standing) - return true; + // Seemed like the best place to put it + _appearance.SetData(uid, RotationVisuals.RotationState, RotationState.Horizontal, appearance); - // This is just to avoid most callers doing this manually saving boilerplate - // 99% of the time you'll want to drop items but in some scenarios (e.g. buckling) you don't want to. - // We do this BEFORE downing because something like buckle may be blocking downing but we want to drop hand items anyway - // and ultimately this is just to avoid boilerplate in Down callers + keep their behavior consistent. - if (dropHeldItems && hands != null) + // Change collision masks to allow going under certain entities like flaps and tables + if (TryComp(uid, out FixturesComponent? fixtureComponent)) + foreach (var (key, fixture) in fixtureComponent.Fixtures) { - RaiseLocalEvent(uid, new DropHandItemsEvent(), false); + if ((fixture.CollisionMask & StandingCollisionLayer) == 0) + continue; + + standingState.ChangedFixtures.Add(key); + _physics.SetCollisionMask(uid, key, fixture, fixture.CollisionMask & ~StandingCollisionLayer, manager: fixtureComponent); } - var msg = new DownAttemptEvent(); - RaiseLocalEvent(uid, msg, false); + // check if component was just added or streamed to client + // if true, no need to play sound - mob was down before player could seen that + if (standingState.LifeStage <= ComponentLifeStage.Starting) + return true; - if (msg.Cancelled) - return false; + if (playSound) + _audio.PlayPredicted(standingState.DownSound, uid, null); - standingState.Standing = false; - Dirty(standingState); - RaiseLocalEvent(uid, new DownedEvent(), false); + _movement.RefreshMovementSpeedModifiers(uid); - // Seemed like the best place to put it - _appearance.SetData(uid, RotationVisuals.RotationState, RotationState.Horizontal, appearance); + Climb(uid); - // Change collision masks to allow going under certain entities like flaps and tables - if (TryComp(uid, out FixturesComponent? fixtureComponent)) - { - foreach (var (key, fixture) in fixtureComponent.Fixtures) - { - if ((fixture.CollisionMask & StandingCollisionLayer) == 0) - continue; - - standingState.ChangedFixtures.Add(key); - _physics.SetCollisionMask(uid, key, fixture, fixture.CollisionMask & ~StandingCollisionLayer, manager: fixtureComponent); - } - } + return true; + } - // check if component was just added or streamed to client - // if true, no need to play sound - mob was down before player could seen that - if (standingState.LifeStage <= ComponentLifeStage.Starting) - return true; + public bool Stand(EntityUid uid, + StandingStateComponent? standingState = null, + AppearanceComponent? appearance = null, + bool force = false) + { + // TODO: This should actually log missing comps... + if (!Resolve(uid, ref standingState, false)) + return false; - if (playSound) - { - _audio.PlayPredicted(standingState.DownSound, uid, uid); - } + // Optional component. + Resolve(uid, ref appearance, false); + if (standingState.CurrentState is StandingState.Standing + || TryComp(uid, out BuckleComponent? buckle) + && buckle.Buckled && !_buckle.TryUnbuckle(uid, uid, buckleComp: buckle)) return true; - } - public bool Stand(EntityUid uid, - StandingStateComponent? standingState = null, - AppearanceComponent? appearance = null, - bool force = false) + if (!force) { - // TODO: This should actually log missing comps... - if (!Resolve(uid, ref standingState, false)) - return false; - - // Optional component. - Resolve(uid, ref appearance, false); + var msg = new StandAttemptEvent(); + RaiseLocalEvent(uid, msg, false); - if (standingState.Standing) - return true; + if (msg.Cancelled) + return false; + } - if (!force) - { - var msg = new StandAttemptEvent(); - RaiseLocalEvent(uid, msg, false); + standingState.CurrentState = StandingState.Standing; - if (msg.Cancelled) - return false; - } + Dirty(uid, standingState); + RaiseLocalEvent(uid, new StoodEvent(), false); - standingState.Standing = true; - Dirty(uid, standingState); - RaiseLocalEvent(uid, new StoodEvent(), false); + _appearance.SetData(uid, RotationVisuals.RotationState, RotationState.Vertical, appearance); - _appearance.SetData(uid, RotationVisuals.RotationState, RotationState.Vertical, appearance); - - if (TryComp(uid, out FixturesComponent? fixtureComponent)) + if (TryComp(uid, out FixturesComponent? fixtureComponent)) + { + foreach (var key in standingState.ChangedFixtures) { - foreach (var key in standingState.ChangedFixtures) - { - if (fixtureComponent.Fixtures.TryGetValue(key, out var fixture)) - _physics.SetCollisionMask(uid, key, fixture, fixture.CollisionMask | StandingCollisionLayer, fixtureComponent); - } + if (fixtureComponent.Fixtures.TryGetValue(key, out var fixture)) + _physics.SetCollisionMask(uid, key, fixture, fixture.CollisionMask | StandingCollisionLayer, fixtureComponent); } - standingState.ChangedFixtures.Clear(); - - return true; } - } + standingState.ChangedFixtures.Clear(); + _movement.RefreshMovementSpeedModifiers(uid); - public sealed class DropHandItemsEvent : EventArgs - { - } + Climb(uid); - /// - /// Subscribe if you can potentially block a down attempt. - /// - public sealed class DownAttemptEvent : CancellableEntityEventArgs - { + return true; } - /// - /// Subscribe if you can potentially block a stand attempt. - /// - public sealed class StandAttemptEvent : CancellableEntityEventArgs + private void Climb(EntityUid uid) { - } + _climb.ForciblyStopClimbing(uid); - /// - /// Raised when an entity becomes standing - /// - public sealed class StoodEvent : EntityEventArgs - { - } + var entityDistances = new Dictionary(); - /// - /// Raised when an entity is not standing - /// - public sealed class DownedEvent : EntityEventArgs - { + foreach (var entity in _lookup.GetEntitiesInRange(uid, 0.3f)) + if (HasComp(entity)) + entityDistances[entity] = (Transform(uid).Coordinates.Position - Transform(entity).Coordinates.Position).LengthSquared(); + + if (entityDistances.Count > 0) + _climb.ForciblySetClimbing(uid, entityDistances.OrderBy(e => e.Value).First().Key); } } + + +public sealed class DropHandItemsEvent : EventArgs { } + +/// +/// Subscribe if you can potentially block a down attempt. +/// +public sealed class DownAttemptEvent : CancellableEntityEventArgs { } + +/// +/// Subscribe if you can potentially block a stand attempt. +/// +public sealed class StandAttemptEvent : CancellableEntityEventArgs { } + +/// +/// Raised when an entity becomes standing +/// +public sealed class StoodEvent : EntityEventArgs { } + +/// +/// Raised when an entity is not standing +/// +public sealed class DownedEvent : EntityEventArgs { } diff --git a/Content.Shared/Station/SharedStationSpawningSystem.cs b/Content.Shared/Station/SharedStationSpawningSystem.cs index 56a8a846b07..e889b5c9746 100644 --- a/Content.Shared/Station/SharedStationSpawningSystem.cs +++ b/Content.Shared/Station/SharedStationSpawningSystem.cs @@ -1,6 +1,8 @@ +using System.Linq; using Content.Shared.Hands.Components; using Content.Shared.Hands.EntitySystems; using Content.Shared.Inventory; +using Content.Shared.Preferences.Loadouts; using Content.Shared.Roles; using Content.Shared.Storage; using Content.Shared.Storage.EntitySystems; @@ -17,12 +19,24 @@ public abstract class SharedStationSpawningSystem : EntitySystem [Dependency] private readonly SharedStorageSystem _storage = default!; [Dependency] private readonly SharedTransformSystem _xformSystem = default!; + private EntityQuery _handsQuery; + private EntityQuery _inventoryQuery; + private EntityQuery _storageQuery; + private EntityQuery _xformQuery; + + public override void Initialize() + { + base.Initialize(); + _handsQuery = GetEntityQuery(); + _inventoryQuery = GetEntityQuery(); + _storageQuery = GetEntityQuery(); + _xformQuery = GetEntityQuery(); + } + /// - /// Equips starting gear onto the given entity. + /// /// - /// Entity to load out. - /// Starting gear to use. - public void EquipStartingGear(EntityUid entity, ProtoId? startingGear) + public void EquipStartingGear(EntityUid entity, ProtoId? startingGear, bool raiseEvent = true) { PrototypeManager.TryIndex(startingGear, out var gearProto); EquipStartingGear(entity, gearProto); @@ -33,11 +47,14 @@ public void EquipStartingGear(EntityUid entity, ProtoId? /// /// Entity to load out. /// Starting gear to use. - public void EquipStartingGear(EntityUid entity, StartingGearPrototype? startingGear) + /// Should we raise the event for equipped. Set to false if you will call this manually + public void EquipStartingGear(EntityUid entity, StartingGearPrototype? startingGear, bool raiseEvent = true) { if (startingGear == null) return; + var xform = _xformQuery.GetComponent(entity); + if (InventorySystem.TryGetSlots(entity, out var slotDefinitions)) { foreach (var slot in slotDefinitions) @@ -46,16 +63,15 @@ public void EquipStartingGear(EntityUid entity, StartingGearPrototype? startingG if (string.IsNullOrEmpty(equipmentStr)) continue; - var equipmentEntity = EntityManager.SpawnEntity(equipmentStr, EntityManager.GetComponent(entity).Coordinates); + var equipmentEntity = EntityManager.SpawnEntity(equipmentStr, xform.Coordinates); InventorySystem.TryEquip(entity, equipmentEntity, slot.Name, true, force:true); } - } - if (TryComp(entity, out HandsComponent? handsComponent)) + if (_handsQuery.TryComp(entity, out var handsComponent)) { var inhand = startingGear.Inhand; - var coords = EntityManager.GetComponent(entity).Coordinates; + var coords = xform.Coordinates; foreach (var prototype in inhand) { var inhandEntity = EntityManager.SpawnEntity(prototype, coords); @@ -72,7 +88,7 @@ public void EquipStartingGear(EntityUid entity, StartingGearPrototype? startingG { var coords = _xformSystem.GetMapCoordinates(entity); var ents = new ValueList(); - TryComp(entity, out InventoryComponent? inventoryComp); + _inventoryQuery.TryComp(entity, out var inventoryComp); foreach (var (slot, entProtos) in startingGear.Storage) { @@ -84,17 +100,22 @@ public void EquipStartingGear(EntityUid entity, StartingGearPrototype? startingG ents.Add(Spawn(ent, coords)); } - if (inventoryComp == null - || !InventorySystem.TryGetSlotEntity(entity, slot, out var slotEnt, - inventoryComponent: inventoryComp) - || !TryComp(slotEnt, out StorageComponent? storage)) - continue; - - foreach (var ent in ents) + if (inventoryComp != null && + InventorySystem.TryGetSlotEntity(entity, slot, out var slotEnt, inventoryComponent: inventoryComp) && + _storageQuery.TryComp(slotEnt, out var storage)) { - _storage.Insert(slotEnt.Value, ent, out _, storageComp: storage, playSound: false); + foreach (var ent in ents) + { + _storage.Insert(slotEnt.Value, ent, out _, storageComp: storage, playSound: false); + } } } } + + if (raiseEvent) + { + var ev = new StartingGearEquippedEvent(entity); + RaiseLocalEvent(entity, ref ev, true); + } } } diff --git a/Content.Shared/StatusEffect/StatusEffectsSystem.cs b/Content.Shared/StatusEffect/StatusEffectsSystem.cs index 6aec3a8b3b4..cc6dedae495 100644 --- a/Content.Shared/StatusEffect/StatusEffectsSystem.cs +++ b/Content.Shared/StatusEffect/StatusEffectsSystem.cs @@ -123,6 +123,33 @@ public bool TryAddStatusEffect(EntityUid uid, string key, TimeSpan time, bool return false; } + /// + /// Tries to add a status effect to an entity, with a given component added as well. + /// + /// The entity to add the effect to. + /// The status effect ID to add. + /// How long the effect should last for. + /// The status effect cooldown should be refreshed (true) or accumulated (false). + /// The component of status effect itself. + /// The status effects component to change, if you already have it. + /// False if the effect could not be added or the component already exists, true otherwise. + public bool TryAddStatusEffect(EntityUid uid, string key, TimeSpan time, bool refresh, Component component, + StatusEffectsComponent? status = null) + { + if (!Resolve(uid, ref status, false) + || !TryAddStatusEffect(uid, key, time, refresh, status)) + return false; + + // If they already have the comp, we just won't bother updating anything. + if (!EntityManager.HasComponent(uid, component.GetType())) + { + EntityManager.AddComponent(uid, component); + status.ActiveEffects[key].RelevantComponent = _componentFactory.GetComponentName(component.GetType()); + } + + return true; + } + public bool TryAddStatusEffect(EntityUid uid, string key, TimeSpan time, bool refresh, string component, StatusEffectsComponent? status = null) { diff --git a/Content.Shared/StatusIcon/StatusIconPrototype.cs b/Content.Shared/StatusIcon/StatusIconPrototype.cs index b520b185de2..c5a5fd8a2c5 100644 --- a/Content.Shared/StatusIcon/StatusIconPrototype.cs +++ b/Content.Shared/StatusIcon/StatusIconPrototype.cs @@ -52,7 +52,7 @@ public int CompareTo(StatusIconData? other) /// but in new convenient prototype form! /// [Prototype("statusIcon")] -public sealed class StatusIconPrototype : StatusIconData, IPrototype, IInheritingPrototype +public sealed partial class StatusIconPrototype : StatusIconData, IPrototype, IInheritingPrototype { /// [ParentDataField(typeof(AbstractPrototypeIdArraySerializer))] diff --git a/Content.Shared/Stealth/SharedStealthSystem.cs b/Content.Shared/Stealth/SharedStealthSystem.cs index d0ea8045347..1bab55589fd 100644 --- a/Content.Shared/Stealth/SharedStealthSystem.cs +++ b/Content.Shared/Stealth/SharedStealthSystem.cs @@ -113,7 +113,7 @@ private void OnStealthHandleState(EntityUid uid, StealthComponent component, ref private void OnMove(EntityUid uid, StealthOnMoveComponent component, ref MoveEvent args) { - if (args.FromStateHandling) + if (_timing.ApplyingState) return; if (args.NewPosition.EntityId != args.OldPosition.EntityId) diff --git a/Content.Shared/StepTrigger/Components/ClothingRequiredStepTriggerComponent.cs b/Content.Shared/StepTrigger/Components/ClothingRequiredStepTriggerComponent.cs new file mode 100644 index 00000000000..9efd78d0825 --- /dev/null +++ b/Content.Shared/StepTrigger/Components/ClothingRequiredStepTriggerComponent.cs @@ -0,0 +1,10 @@ +using Content.Shared.Inventory; +using Robust.Shared.GameStates; + +namespace Content.Shared.StepTrigger.Components; + +/// +/// This is used for marking step trigger events that require the user to wear shoes, such as for glass shards. +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class ClothingRequiredStepTriggerComponent : Component; diff --git a/Content.Shared/StepTrigger/Components/ClothingRequiredStepTriggerImmuneComponent.cs b/Content.Shared/StepTrigger/Components/ClothingRequiredStepTriggerImmuneComponent.cs new file mode 100644 index 00000000000..dc76207828c --- /dev/null +++ b/Content.Shared/StepTrigger/Components/ClothingRequiredStepTriggerImmuneComponent.cs @@ -0,0 +1,16 @@ +using Content.Shared.Inventory; +using Content.Shared.StepTrigger.Systems; +using Robust.Shared.GameStates; + +namespace Content.Shared.StepTrigger.Components; + +/// +/// This is used for cancelling step trigger events if the user is wearing clothing in a valid slot. +/// +[RegisterComponent, NetworkedComponent] +[Access(typeof(StepTriggerImmuneSystem))] +public sealed partial class ClothingRequiredStepTriggerImmuneComponent : Component, IClothingSlots +{ + [DataField] + public SlotFlags Slots { get; set; } = SlotFlags.FEET; +} diff --git a/Content.Shared/StepTrigger/Components/ShoesRequiredStepTriggerComponent.cs b/Content.Shared/StepTrigger/Components/ShoesRequiredStepTriggerComponent.cs deleted file mode 100644 index dd95b94a7ef..00000000000 --- a/Content.Shared/StepTrigger/Components/ShoesRequiredStepTriggerComponent.cs +++ /dev/null @@ -1,11 +0,0 @@ -using Robust.Shared.GameStates; - -namespace Content.Shared.StepTrigger.Components; - -/// -/// This is used for cancelling step trigger events if the user is wearing shoes, such as for glass shards. -/// -[RegisterComponent, NetworkedComponent] -public sealed partial class ShoesRequiredStepTriggerComponent : Component -{ -} diff --git a/Content.Shared/StepTrigger/Components/StepTriggerComponent.cs b/Content.Shared/StepTrigger/Components/StepTriggerComponent.cs index b8483d021a4..d12c2c983ee 100644 --- a/Content.Shared/StepTrigger/Components/StepTriggerComponent.cs +++ b/Content.Shared/StepTrigger/Components/StepTriggerComponent.cs @@ -1,3 +1,4 @@ +using Content.Shared.StepTrigger.Prototypes; using Content.Shared.StepTrigger.Systems; using Content.Shared.Whitelist; using Robust.Shared.GameStates; @@ -53,15 +54,18 @@ public sealed partial class StepTriggerComponent : Component public bool IgnoreWeightless; /// - /// Does this have separate "StepOn" and "StepOff" triggers. + /// Does this have separate "StepOn" and "StepOff" triggers. /// [DataField, AutoNetworkedField] public bool StepOn = false; + + /// + /// If TriggerGroups is specified, it will check StepTriggerImmunityComponent to have the same TriggerType to activate immunity + /// + [DataField] + public StepTriggerGroup? TriggerGroups; } [RegisterComponent] [Access(typeof(StepTriggerSystem))] -public sealed partial class StepTriggerActiveComponent : Component -{ - -} +public sealed partial class StepTriggerActiveComponent : Component { } diff --git a/Content.Shared/StepTrigger/Components/StepTriggerImmuneComponent.cs b/Content.Shared/StepTrigger/Components/StepTriggerImmuneComponent.cs index 4321334a3ae..1b92905fa61 100644 --- a/Content.Shared/StepTrigger/Components/StepTriggerImmuneComponent.cs +++ b/Content.Shared/StepTrigger/Components/StepTriggerImmuneComponent.cs @@ -1,3 +1,5 @@ +using Content.Shared.StepTrigger.Prototypes; +using Content.Shared.StepTrigger.Systems; using Robust.Shared.GameStates; namespace Content.Shared.StepTrigger.Components; @@ -12,4 +14,12 @@ namespace Content.Shared.StepTrigger.Components; /// Consider using a subscription to StepTriggerAttemptEvent if you wish to be more selective. /// [RegisterComponent, NetworkedComponent] -public sealed partial class StepTriggerImmuneComponent : Component { } +[Access(typeof(StepTriggerSystem))] +public sealed partial class StepTriggerImmuneComponent : Component +{ + /// + /// WhiteList of immunity step triggers. + /// + [DataField] + public StepTriggerGroup? Whitelist; +} diff --git a/Content.Shared/StepTrigger/Prototypes/StepTriggerGroup.cs b/Content.Shared/StepTrigger/Prototypes/StepTriggerGroup.cs new file mode 100644 index 00000000000..5b64085e9a9 --- /dev/null +++ b/Content.Shared/StepTrigger/Prototypes/StepTriggerGroup.cs @@ -0,0 +1,72 @@ +using Content.Shared.StepTrigger.Components; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; + +namespace Content.Shared.StepTrigger.Prototypes; + +/// +/// A group of +/// Used to determine StepTriggerTypes like Tags. +/// Used for better work with Immunity. +/// StepTriggerTypes in StepTriggerTypes.yml +/// +/// +/// stepTriggerGroups: +/// types: +/// - Lava +/// - Landmine +/// - Shard +/// - Chasm +/// - Mousetrap +/// - SlipTile +/// - SlipEntity +/// +[DataDefinition] +[Serializable, NetSerializable] +public sealed partial class StepTriggerGroup +{ + [DataField] + public List>? Types = null; + + /// + /// Checks if types of this StepTriggerGroup is similar to types of AnotherGroup + /// + public bool IsValid(StepTriggerGroup? anotherGroup) + { + if (Types is null) + return false; + + foreach (var type in Types) + { + if (anotherGroup != null + && anotherGroup.Types != null + && anotherGroup.Types.Contains(type)) + return true; + } + return false; + } + + /// + /// Checks validation (if types of this StepTriggerGroup are similar to types of + /// another StepTriggerComponent. + /// + public bool IsValid(StepTriggerComponent component) + { + if (component.TriggerGroups is null) + return false; + + return IsValid(component.TriggerGroups); + } + + /// + /// Checks validation (if types of this StepTriggerGroup are similar to types of + /// another StepTriggerImmuneComponent. + /// + public bool IsValid(StepTriggerImmuneComponent component) + { + if (component.Whitelist is null) + return false; + + return IsValid(component.Whitelist); + } +} diff --git a/Content.Shared/StepTrigger/Prototypes/StepTriggerTypePrototype.cs b/Content.Shared/StepTrigger/Prototypes/StepTriggerTypePrototype.cs new file mode 100644 index 00000000000..732eb4b732e --- /dev/null +++ b/Content.Shared/StepTrigger/Prototypes/StepTriggerTypePrototype.cs @@ -0,0 +1,15 @@ +using Robust.Shared.Prototypes; + +namespace Content.Shared.StepTrigger.Prototypes; + +/// +/// Prototype representing a StepTriggerType in YAML. +/// Meant to only have an ID property, as that is the only thing that +/// gets saved in StepTriggerGroup. +/// +[Prototype] +public sealed partial class StepTriggerTypePrototype : IPrototype +{ + [ViewVariables, IdDataField] + public string ID { get; private set; } = default!; +} diff --git a/Content.Shared/StepTrigger/Systems/ShoesRequiredStepTriggerSystem.cs b/Content.Shared/StepTrigger/Systems/ShoesRequiredStepTriggerSystem.cs deleted file mode 100644 index 5fc9140dfd0..00000000000 --- a/Content.Shared/StepTrigger/Systems/ShoesRequiredStepTriggerSystem.cs +++ /dev/null @@ -1,41 +0,0 @@ -using Content.Shared.Examine; -using Content.Shared.Inventory; -using Content.Shared.StepTrigger.Components; -using Content.Shared.Tag; - -namespace Content.Shared.StepTrigger.Systems; - -public sealed class ShoesRequiredStepTriggerSystem : EntitySystem -{ - [Dependency] private readonly InventorySystem _inventory = default!; - [Dependency] private readonly TagSystem _tagSystem = default!; - - /// - public override void Initialize() - { - SubscribeLocalEvent(OnStepTriggerAttempt); - SubscribeLocalEvent(OnExamined); - } - - private void OnStepTriggerAttempt(EntityUid uid, ShoesRequiredStepTriggerComponent component, ref StepTriggerAttemptEvent args) - { - if (_tagSystem.HasTag(args.Tripper, "ShoesRequiredStepTriggerImmune")) - { - args.Cancelled = true; - return; - } - - if (!TryComp(args.Tripper, out var inventory)) - return; - - if (_inventory.TryGetSlotEntity(args.Tripper, "shoes", out _, inventory)) - { - args.Cancelled = true; - } - } - - private void OnExamined(EntityUid uid, ShoesRequiredStepTriggerComponent component, ExaminedEvent args) - { - args.PushMarkup(Loc.GetString("shoes-required-step-trigger-examine")); - } -} diff --git a/Content.Shared/StepTrigger/Systems/StepTriggerImmuneSystem.cs b/Content.Shared/StepTrigger/Systems/StepTriggerImmuneSystem.cs new file mode 100644 index 00000000000..ca72a20ae9c --- /dev/null +++ b/Content.Shared/StepTrigger/Systems/StepTriggerImmuneSystem.cs @@ -0,0 +1,37 @@ +using Content.Shared.Examine; +using Content.Shared.Inventory; +using Content.Shared.StepTrigger.Components; +using Content.Shared.Tag; + +namespace Content.Shared.StepTrigger.Systems; + +public sealed class StepTriggerImmuneSystem : EntitySystem +{ + [Dependency] private readonly InventorySystem _inventory = default!; + + /// + public override void Initialize() + { + SubscribeLocalEvent(OnStepTriggerAttempt); + SubscribeLocalEvent(OnStepTriggerClothingAttempt); + SubscribeLocalEvent(OnExamined); + } + + private void OnStepTriggerAttempt(Entity ent, ref StepTriggerAttemptEvent args) + { + args.Cancelled = true; + } + + private void OnStepTriggerClothingAttempt(EntityUid uid, ClothingRequiredStepTriggerComponent component, ref StepTriggerAttemptEvent args) + { + if (_inventory.TryGetInventoryEntity(args.Tripper, out _)) + { + args.Cancelled = true; + } + } + + private void OnExamined(EntityUid uid, ClothingRequiredStepTriggerComponent component, ExaminedEvent args) + { + args.PushMarkup(Loc.GetString("clothing-required-step-trigger-examine")); + } +} diff --git a/Content.Shared/StepTrigger/Systems/StepTriggerSystem.cs b/Content.Shared/StepTrigger/Systems/StepTriggerSystem.cs index 89655afac23..d0cd5c4b4e2 100644 --- a/Content.Shared/StepTrigger/Systems/StepTriggerSystem.cs +++ b/Content.Shared/StepTrigger/Systems/StepTriggerSystem.cs @@ -118,11 +118,16 @@ private void UpdateColliding(EntityUid uid, StepTriggerComponent component, Tran private bool CanTrigger(EntityUid uid, EntityUid otherUid, StepTriggerComponent component) { - if (HasComp(otherUid) - || !component.Active + if (!component.Active || component.CurrentlySteppedOn.Contains(otherUid)) return false; + // Immunity checks + if (TryComp(otherUid, out var stepTriggerImmuneComponent) + && component.TriggerGroups != null + && component.TriggerGroups.IsValid(stepTriggerImmuneComponent)) + return false; + // Can't trigger if we don't ignore weightless entities // and the entity is flying or currently weightless // Makes sense simulation wise to have this be part of steptrigger directly IMO diff --git a/Content.Shared/Storage/Components/SecretStashComponent.cs b/Content.Shared/Storage/Components/SecretStashComponent.cs index 8595f79ca57..07a1078f63f 100644 --- a/Content.Shared/Storage/Components/SecretStashComponent.cs +++ b/Content.Shared/Storage/Components/SecretStashComponent.cs @@ -6,6 +6,7 @@ using Content.Shared.Tools; using Robust.Shared.GameStates; using Content.Shared.DoAfter; +using Content.Shared.Toilet.Components; using Robust.Shared.Serialization; namespace Content.Shared.Storage.Components diff --git a/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs b/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs index 966ec02b805..e5a4bfc36a5 100644 --- a/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs +++ b/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs @@ -2,14 +2,19 @@ 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.Coordinates; 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.Inventory; using Content.Shared.Item; using Content.Shared.Lock; using Content.Shared.Nyanotrasen.Item.PseudoItem; @@ -23,10 +28,13 @@ using Robust.Shared.Audio.Systems; using Robust.Shared.Containers; using Robust.Shared.GameStates; +using Robust.Shared.Input.Binding; using Robust.Shared.Map; +using Robust.Shared.Player; using Robust.Shared.Prototypes; using Robust.Shared.Random; using Robust.Shared.Serialization; +using Robust.Shared.Utility; namespace Content.Shared.Storage.EntitySystems; @@ -34,6 +42,7 @@ 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!; @@ -42,6 +51,7 @@ public abstract class SharedStorageSystem : EntitySystem [Dependency] private readonly SharedDoAfterSystem _doAfterSystem = default!; [Dependency] protected readonly SharedEntityStorageSystem EntityStorage = default!; [Dependency] private readonly SharedInteractionSystem _interactionSystem = default!; + [Dependency] private readonly InventorySystem _inventory = default!; [Dependency] protected readonly SharedItemSystem ItemSystem = default!; [Dependency] private readonly SharedPopupSystem _popupSystem = default!; [Dependency] private readonly SharedHandsSystem _sharedHandsSystem = default!; @@ -63,9 +73,17 @@ public abstract class SharedStorageSystem : EntitySystem public bool CheckingCanInsert; + private List _entList = new(); + private HashSet _entSet = new(); + private readonly List _sortedSizes = new(); private FrozenDictionary _nextSmallest = FrozenDictionary.Empty; + private const string QuickInsertUseDelayID = "quickInsert"; + private const string OpenUiUseDelayID = "storage"; + + protected readonly List CantFillReasons = []; + /// public override void Initialize() { @@ -76,6 +94,13 @@ public override void Initialize() _xformQuery = GetEntityQuery(); _prototype.PrototypesReloaded += OnPrototypesReloaded; + Subs.BuiEvents(StorageComponent.StorageUiKey.Key, subs => + { + subs.Event(OnBoundUIClosed); + }); + + SubscribeLocalEvent(OnMapInit); + SubscribeLocalEvent>(AddUiVerb); SubscribeLocalEvent(OnStorageGetState); SubscribeLocalEvent(OnStorageHandleState); SubscribeLocalEvent(OnComponentInit, before: new[] { typeof(SharedContainerSystem) }); @@ -86,6 +111,7 @@ public override void Initialize() SubscribeLocalEvent(AfterInteract); SubscribeLocalEvent(OnDestroy); SubscribeLocalEvent(OnBoundUIOpen); + SubscribeLocalEvent(OnLockToggled); SubscribeLocalEvent(OnStackCountChanged); SubscribeLocalEvent(OnEntInserted); @@ -102,9 +128,20 @@ public override void Initialize() SubscribeLocalEvent(OnReclaimed); + CommandBinds.Builder + .Bind(ContentKeyFunctions.OpenBackpack, InputCmdHandler.FromDelegate(HandleOpenBackpack, handle: false)) + .Bind(ContentKeyFunctions.OpenBelt, InputCmdHandler.FromDelegate(HandleOpenBelt, handle: false)) + .Register(); + UpdatePrototypeCache(); } + private void OnMapInit(Entity entity, ref MapInitEvent args) + { + UseDelay.SetLength(entity.Owner, entity.Comp.QuickInsertCooldown, QuickInsertUseDelayID); + UseDelay.SetLength(entity.Owner, entity.Comp.OpenUiCooldown, OpenUiUseDelayID); + } + private void OnStorageGetState(EntityUid uid, StorageComponent component, ref ComponentGetState args) { var storedItems = new Dictionary(); @@ -117,7 +154,6 @@ private void OnStorageGetState(EntityUid uid, StorageComponent component, ref Co args.State = new StorageComponentState() { Grid = new List(component.Grid), - IsUiOpen = component.IsUiOpen, MaxItemSize = component.MaxItemSize, StoredItems = storedItems, SavedLocations = component.SavedLocations @@ -131,7 +167,6 @@ private void OnStorageHandleState(EntityUid uid, StorageComponent component, ref component.Grid.Clear(); component.Grid.AddRange(state.Grid); - component.IsUiOpen = state.IsUiOpen; component.MaxItemSize = state.MaxItemSize; component.StoredItems.Clear(); @@ -183,9 +218,108 @@ private void OnComponentInit(EntityUid uid, StorageComponent storageComp, Compon UpdateAppearance((uid, storageComp, null)); } - public virtual void UpdateUI(Entity entity) {} + /// + /// If the user has nested-UIs open (e.g., PDA UI open when pda is in a backpack), close them. + /// + private void CloseNestedInterfaces(EntityUid uid, EntityUid actor, StorageComponent? storageComp = null) + { + if (!Resolve(uid, ref storageComp)) + return; - public virtual void OpenStorageUI(EntityUid uid, EntityUid entity, StorageComponent? storageComp = null, bool silent = false) { } + // for each containing thing + // if it has a storage comp + // ensure unsubscribe from session + // if it has a ui component + // close ui + foreach (var entity in storageComp.Container.ContainedEntities) + { + _ui.CloseUis(entity, actor); + } + } + + private void OnBoundUIClosed(EntityUid uid, StorageComponent storageComp, BoundUIClosedEvent args) + { + CloseNestedInterfaces(uid, args.Actor, storageComp); + + // If UI is closed for everyone + if (!_ui.IsUiOpen(uid, args.UiKey)) + { + UpdateAppearance((uid, storageComp, null)); + Audio.PlayPredicted(storageComp.StorageCloseSound, uid, args.Actor); + } + } + + 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); + + // Does this player currently have the storage UI open? + var uiOpen = _ui.IsUiOpen(uid, StorageComponent.StorageUiKey.Key, args.User); + + ActivationVerb verb = new() + { + Act = () => + { + if (uiOpen) + { + _ui.CloseUi(uid, StorageComponent.StorageUiKey.Key, args.User); + } + else + { + OpenStorageUI(uid, args.User, component, silent); + } + } + }; + + if (uiOpen) + { + verb.Text = Loc.GetString("comp-storage-verb-close-storage"); + verb.Icon = new SpriteSpecifier.Texture( + new("/Textures/Interface/VerbIcons/close.svg.192dpi.png")); + } + else + { + verb.Text = Loc.GetString("comp-storage-verb-open-storage"); + verb.Icon = new SpriteSpecifier.Texture( + new("/Textures/Interface/VerbIcons/open.svg.192dpi.png")); + } + args.Verbs.Add(verb); + } + + /// + /// 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) + { + if (!Resolve(uid, ref storageComp, false)) + return; + + // prevent spamming bag open / honkerton honk sound + silent |= TryComp(uid, out var useDelay) && UseDelay.IsDelayed((uid, useDelay)); + if (!silent) + { + if (!_ui.IsUiOpen(uid, StorageComponent.StorageUiKey.Key)) + Audio.PlayPredicted(storageComp.StorageOpenSound, uid, entity); + + if (useDelay != null) + UseDelay.TryResetDelay((uid, useDelay)); + } + + _ui.OpenUi(uid, StorageComponent.StorageUiKey.Key, entity); + } + + public virtual void UpdateUI(Entity entity) {} private void AddTransferVerbs(EntityUid uid, StorageComponent component, GetVerbsEvent args) { @@ -239,7 +373,16 @@ private void OnActivate(EntityUid uid, StorageComponent storageComp, ActivateInW if (args.Handled || TryComp(uid, out var lockComponent) && lockComponent.Locked) return; - OpenStorageUI(uid, args.User, storageComp); + // 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; } @@ -262,36 +405,40 @@ private void OnImplantActivate(EntityUid uid, StorageComponent storageComp, Open /// private void AfterInteract(EntityUid uid, StorageComponent storageComp, AfterInteractEvent args) { - if (args.Handled || !args.CanReach) + if (args.Handled || !args.CanReach || !UseDelay.TryResetDelay(uid, checkDelayed: true, id: QuickInsertUseDelayID)) return; // Pick up all entities in a radius around the clicked location. // The last half of the if is because carpets exist and this is terrible if (storageComp.AreaInsert && (args.Target == null || !HasComp(args.Target.Value))) { - var validStorables = new List(); + _entList.Clear(); + _entSet.Clear(); + _entityLookupSystem.GetEntitiesInRange(args.ClickLocation, storageComp.AreaInsertRadius, _entSet, LookupFlags.Dynamic | LookupFlags.Sundries); var delay = 0f; - foreach (var entity in _entityLookupSystem.GetEntitiesInRange(args.ClickLocation, storageComp.AreaInsertRadius, LookupFlags.Dynamic | LookupFlags.Sundries)) + foreach (var entity in _entSet) { if (entity == args.User - // || !_itemQuery.HasComponent(entity) - || !TryComp(entity, out var itemComp) // Need comp to get item size to get weight + || !_itemQuery.TryGetComponent(entity, out var itemComp) // Need comp to get item size to get weight || !_prototype.TryIndex(itemComp.Size, out var itemSize) - || !CanInsert(uid, entity, out _, storageComp) + || !CanInsert(uid, entity, out _, storageComp, item: itemComp) || !_interactionSystem.InRangeUnobstructed(args.User, entity)) { continue; } - validStorables.Add(entity); + _entList.Add(entity); delay += itemSize.Weight * AreaInsertDelayPerItem; + + if (_entList.Count >= StorageComponent.AreaPickupLimit) + break; } //If there's only one then let's be generous - if (validStorables.Count > 1) + if (_entList.Count > 1) { - var doAfterArgs = new DoAfterArgs(EntityManager, args.User, delay, new AreaPickupDoAfterEvent(GetNetEntityList(validStorables)), uid, target: uid) + var doAfterArgs = new DoAfterArgs(EntityManager, args.User, delay, new AreaPickupDoAfterEvent(GetNetEntityList(_entList)), uid, target: uid) { BreakOnDamage = true, BreakOnUserMove = true, @@ -313,7 +460,7 @@ private void AfterInteract(EntityUid uid, StorageComponent storageComp, AfterInt if (_containerSystem.IsEntityInContainer(target) || target == args.User - || !HasComp(target)) + || !_itemQuery.HasComponent(target)) { return; } @@ -331,10 +478,10 @@ private void AfterInteract(EntityUid uid, StorageComponent storageComp, AfterInt args.Handled = true; if (PlayerInsertEntityInWorld((uid, storageComp), args.User, target)) { - RaiseNetworkEvent(new AnimateInsertingEntitiesEvent(GetNetEntity(uid), + EntityManager.RaiseSharedEvent(new AnimateInsertingEntitiesEvent(GetNetEntity(uid), new List { GetNetEntity(target) }, new List { GetNetCoordinates(position) }, - new List { transformOwner.LocalRotation })); + new List { transformOwner.LocalRotation }), args.User); } } } @@ -349,20 +496,27 @@ private void OnDoAfter(EntityUid uid, StorageComponent component, AreaPickupDoAf var successfullyInserted = new List(); var successfullyInsertedPositions = new List(); var successfullyInsertedAngles = new List(); - _xformQuery.TryGetComponent(uid, out var xform); - foreach (var netEntity in args.Entities) + if (!_xformQuery.TryGetComponent(uid, out var xform)) + { + return; + } + + var entCount = Math.Min(StorageComponent.AreaPickupLimit, args.Entities.Count); + + for (var i = 0; i < entCount; i++) { - var entity = GetEntity(netEntity); + var entity = GetEntity(args.Entities[i]); // Check again, situation may have changed for some entities, but we'll still pick up any that are valid if (_containerSystem.IsEntityInContainer(entity) || entity == args.Args.User || !_itemQuery.HasComponent(entity)) + { continue; + } - if (xform == null || - !_xformQuery.TryGetComponent(entity, out var targetXform) || + if (!_xformQuery.TryGetComponent(entity, out var targetXform) || targetXform.MapID != xform.MapID) { continue; @@ -387,12 +541,12 @@ private void OnDoAfter(EntityUid uid, StorageComponent component, AreaPickupDoAf // If we picked up at least one thing, play a sound and do a cool animation! if (successfullyInserted.Count > 0) { - Audio.PlayPvs(component.StorageInsertSound, uid); - RaiseNetworkEvent(new AnimateInsertingEntitiesEvent( + Audio.PlayPredicted(component.StorageInsertSound, uid, args.User); + EntityManager.RaiseSharedEvent(new AnimateInsertingEntitiesEvent( GetNetEntity(uid), GetNetEntityList(successfullyInserted), GetNetCoordinatesList(successfullyInsertedPositions), - successfullyInsertedAngles)); + successfullyInsertedAngles), args.User); } args.Handled = true; @@ -427,8 +581,7 @@ private void OnInteractWithItem(StorageInteractWithItemEvent msg, EntitySessionE if (!TryComp(uid, out var storageComp)) return; - if (!_ui.TryGetUi(uid, StorageComponent.StorageUiKey.Key, out var bui) || - !bui.SubscribedSessions.Contains(args.SenderSession)) + if (!_ui.IsUiOpen(uid, StorageComponent.StorageUiKey.Key, player)) return; if (!Exists(entity)) @@ -470,8 +623,7 @@ private void OnSetItemLocation(StorageSetItemLocationEvent msg, EntitySessionEve if (!TryComp(storageEnt, out var storageComp)) return; - if (!_ui.TryGetUi(storageEnt, StorageComponent.StorageUiKey.Key, out var bui) || - !bui.SubscribedSessions.Contains(args.SenderSession)) + if (!_ui.IsUiOpen(storageEnt, StorageComponent.StorageUiKey.Key, player)) return; if (!Exists(itemEnt)) @@ -497,8 +649,7 @@ private void OnRemoveItem(StorageRemoveItemEvent msg, EntitySessionEventArgs arg if (!TryComp(storageEnt, out var storageComp)) return; - if (!_ui.TryGetUi(storageEnt, StorageComponent.StorageUiKey.Key, out var bui) || - !bui.SubscribedSessions.Contains(args.SenderSession)) + if (!_ui.IsUiOpen(storageEnt, StorageComponent.StorageUiKey.Key, player)) return; if (!Exists(itemEnt)) @@ -525,8 +676,7 @@ private void OnInsertItemIntoLocation(StorageInsertItemIntoLocationEvent msg, En if (!TryComp(storageEnt, out var storageComp)) return; - if (!_ui.TryGetUi(storageEnt, StorageComponent.StorageUiKey.Key, out var bui) || - !bui.SubscribedSessions.Contains(args.SenderSession)) + if (!_ui.IsUiOpen(storageEnt, StorageComponent.StorageUiKey.Key, player)) return; if (!Exists(itemEnt)) @@ -551,11 +701,10 @@ private void OnSaveItemLocation(StorageSaveItemLocationEvent msg, EntitySessionE var storage = GetEntity(msg.Storage); var item = GetEntity(msg.Item); - if (!TryComp(storage, out var storageComp)) + if (!HasComp(storage)) return; - if (!_ui.TryGetUi(storage, StorageComponent.StorageUiKey.Key, out var bui) || - !bui.SubscribedSessions.Contains(args.SenderSession)) + if (!_ui.IsUiOpen(storage, StorageComponent.StorageUiKey.Key, player)) return; if (!Exists(item)) @@ -572,11 +721,7 @@ private void OnSaveItemLocation(StorageSaveItemLocationEvent msg, EntitySessionE private void OnBoundUIOpen(EntityUid uid, StorageComponent storageComp, BoundUIOpenedEvent args) { - if (!storageComp.IsUiOpen) - { - storageComp.IsUiOpen = true; - UpdateAppearance((uid, storageComp, null)); - } + UpdateAppearance((uid, storageComp, null)); } private void OnEntInserted(Entity entity, ref EntInsertedIntoContainerMessage args) @@ -629,8 +774,15 @@ private void OnInsertAttempt(EntityUid uid, StorageComponent component, Containe if (CheckingCanInsert) return; - if (!CanInsert(uid, args.EntityUid, out _, component, ignoreStacks: true)) + if (!CanInsert(uid, args.EntityUid, out var reason, component, ignoreStacks: true)) + { +#if DEBUG + if (reason != null) + CantFillReasons.Add(reason); +#endif + args.Cancel(); + } } public void UpdateAppearance(Entity entity) @@ -647,11 +799,13 @@ public void UpdateAppearance(Entity ent var capacity = storage.Grid.GetArea(); var used = GetCumulativeItemAreas((uid, storage)); + var isOpen = _ui.IsUiOpen(entity.Owner, StorageComponent.StorageUiKey.Key); + _appearance.SetData(uid, StorageVisuals.StorageUsed, used, appearance); _appearance.SetData(uid, StorageVisuals.Capacity, capacity, appearance); - _appearance.SetData(uid, StorageVisuals.Open, storage.IsUiOpen, appearance); - _appearance.SetData(uid, SharedBagOpenVisuals.BagState, storage.IsUiOpen ? SharedBagState.Open : SharedBagState.Closed, appearance); - _appearance.SetData(uid, StackVisuals.Hide, !storage.IsUiOpen, appearance); + _appearance.SetData(uid, StorageVisuals.Open, isOpen, appearance); + _appearance.SetData(uid, SharedBagOpenVisuals.BagState, isOpen ? SharedBagState.Open : SharedBagState.Closed, appearance); + _appearance.SetData(uid, StackVisuals.Hide, !isOpen, appearance); } /// @@ -938,7 +1092,7 @@ public bool PlayerInsertHeldEntity(EntityUid uid, EntityUid player, StorageCompo /// true if inserted, false otherwise public bool PlayerInsertEntityInWorld(Entity uid, EntityUid player, EntityUid toInsert) { - if (!Resolve(uid, ref uid.Comp) || !_interactionSystem.InRangeUnobstructed(player, uid)) + if (!Resolve(uid, ref uid.Comp) || !_interactionSystem.InRangeUnobstructed(player, uid.Owner)) return false; if (!Insert(uid, toInsert, out _, user: player, uid.Comp)) @@ -1076,7 +1230,7 @@ public void SaveItemLocation(Entity ent, Entity uid) return _nextSmallest[item.Size]; } + /// + /// Checks if a storage's UI is open by anyone when locked, and closes it unless they're an admin. + /// + private void OnLockToggled(EntityUid uid, StorageComponent component, ref LockToggledEvent args) + { + if (!args.Locked) + return; + + // 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); + } + } + private void OnStackCountChanged(EntityUid uid, MetaDataComponent component, StackCountChangedEvent args) { if (_containerSystem.TryGetContainingContainer(uid, out var container, component) && @@ -1263,6 +1436,40 @@ private void OnStackCountChanged(EntityUid uid, MetaDataComponent component, Sta } } + private void HandleOpenBackpack(ICommonSession? session) + { + HandleOpenSlotUI(session, "back"); + } + + private void HandleOpenBelt(ICommonSession? session) + { + HandleOpenSlotUI(session, "belt"); + } + + private void HandleOpenSlotUI(ICommonSession? session, string slot) + { + if (session is not { } playerSession) + return; + + if (playerSession.AttachedEntity is not {Valid: true} playerEnt || !Exists(playerEnt)) + return; + + if (!_inventory.TryGetSlotEntity(playerEnt, slot, out var storageEnt)) + return; + + if (!ActionBlocker.CanInteract(playerEnt, storageEnt)) + return; + + OpenStorageUI(storageEnt.Value, playerEnt); + } + + protected void ClearCantFillReasons() + { +#if DEBUG + CantFillReasons.Clear(); +#endif + } + /// /// Plays a clientside pickup animation for the specified uid. /// @@ -1272,8 +1479,6 @@ public abstract void PlayPickupAnimation(EntityUid uid, EntityCoordinates initia [Serializable, NetSerializable] protected sealed class StorageComponentState : ComponentState { - public bool IsUiOpen; - public Dictionary StoredItems = new(); public Dictionary> SavedLocations = new(); diff --git a/Content.Shared/Storage/StorageComponent.cs b/Content.Shared/Storage/StorageComponent.cs index 2cae12f07a8..ef682dd4f94 100644 --- a/Content.Shared/Storage/StorageComponent.cs +++ b/Content.Shared/Storage/StorageComponent.cs @@ -19,10 +19,6 @@ public sealed partial class StorageComponent : Component { public static string ContainerId = "storagebase"; - // TODO: This fucking sucks - [ViewVariables(VVAccess.ReadWrite), DataField] - public bool IsUiOpen; - [ViewVariables] public Container Container = default!; @@ -57,9 +53,27 @@ public sealed partial class StorageComponent : Component [DataField] public bool QuickInsert; // Can insert storables by clicking them with the storage entity + /// + /// Minimum delay between quick/area insert actions. + /// + /// Used to prevent autoclickers spamming server with individual pickup actions. + public TimeSpan QuickInsertCooldown = TimeSpan.FromSeconds(0.5); + + /// + /// Minimum delay between UI open actions. + /// Used to spamming opening sounds. + /// + [DataField] + public TimeSpan OpenUiCooldown = TimeSpan.Zero; + [DataField] public bool ClickInsert = true; // Can insert stuff by clicking the storage entity with it + /// + /// How many entities area pickup can pickup at once. + /// + public const int AreaPickupLimit = 10; + [DataField] public bool AreaInsert; // Clicking with the storage entity causes it to insert all nearby storables after a delay @@ -214,15 +228,6 @@ public AnimateInsertingEntitiesEvent(NetEntity storage, List storedEn } } - /// - /// An extra BUI message that either opens, closes, or focuses the storage window based on context. - /// - [Serializable, NetSerializable] - public sealed class StorageModifyWindowMessage : BoundUserInterfaceMessage - { - - } - [NetSerializable] [Serializable] public enum StorageVisuals : byte diff --git a/Content.Shared/Store/ListingLocalisationHelpers.cs b/Content.Shared/Store/ListingLocalisationHelpers.cs index 882300109ce..19cd029488f 100644 --- a/Content.Shared/Store/ListingLocalisationHelpers.cs +++ b/Content.Shared/Store/ListingLocalisationHelpers.cs @@ -18,6 +18,11 @@ public static string GetLocalisedNameOrEntityName(ListingData listingData, IProt else if (listingData.ProductEntity != null) name = prototypeManager.Index(listingData.ProductEntity.Value).Name; + if (listingData.DiscountValue > 0) + name += " " + Loc.GetString("store-sales-amount", ("amount", listingData.DiscountValue)); + else if (listingData.OldCost.Count > 0) + name += " " + Loc.GetString("store-sales-over"); + return name; } diff --git a/Content.Shared/Store/ListingPrototype.cs b/Content.Shared/Store/ListingPrototype.cs index d3d2e13cdfd..445b5742dd1 100644 --- a/Content.Shared/Store/ListingPrototype.cs +++ b/Content.Shared/Store/ListingPrototype.cs @@ -75,14 +75,14 @@ public partial class ListingData : IEquatable, ICloneable public EntProtoId? ProductAction; /// - /// The listing ID of the related upgrade listing. Can be used to link a to an - /// upgrade or to use standalone as an upgrade + /// The listing ID of the related upgrade listing. Can be used to link a to an + /// upgrade or to use standalone as an upgrade /// [DataField] - public ProtoId? ProductUpgradeID; + public ProtoId? ProductUpgradeId; /// - /// Keeps track of the current action entity this is tied to, for action upgrades + /// Keeps track of the current action entity this is tied to, for action upgrades /// [DataField] [NonSerialized] @@ -109,6 +109,19 @@ public partial class ListingData : IEquatable, ICloneable [DataField] public TimeSpan RestockTime = TimeSpan.Zero; + [DataField] + public int SaleLimit = 3; + + [DataField] + public bool SaleBlacklist; + + public int DiscountValue; + + public Dictionary, FixedPoint2> OldCost = new(); + + [DataField] + public List Components = new(); + public bool Equals(ListingData? listing) { if (listing == null) @@ -161,11 +174,16 @@ public object Clone() Priority = Priority, ProductEntity = ProductEntity, ProductAction = ProductAction, - ProductUpgradeID = ProductUpgradeID, + ProductUpgradeId = ProductUpgradeId, ProductActionEntity = ProductActionEntity, ProductEvent = ProductEvent, PurchaseAmount = PurchaseAmount, RestockTime = RestockTime, + SaleLimit = SaleLimit, + SaleBlacklist = SaleBlacklist, + DiscountValue = DiscountValue, + OldCost = OldCost, + Components = Components, }; } } diff --git a/Content.Shared/Store/StorePresetPrototype.cs b/Content.Shared/Store/StorePresetPrototype.cs index ce7f0312b60..41ee510bd8e 100644 --- a/Content.Shared/Store/StorePresetPrototype.cs +++ b/Content.Shared/Store/StorePresetPrototype.cs @@ -1,3 +1,4 @@ +using Content.Shared.StoreDiscount; using Robust.Shared.Prototypes; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Set; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Dictionary; @@ -38,4 +39,7 @@ public sealed partial class StorePresetPrototype : IPrototype /// [DataField("currencyWhitelist", customTypeSerializer: typeof(PrototypeIdHashSetSerializer))] public HashSet CurrencyWhitelist { get; private set; } = new(); + + [DataField] + public SalesSpecifier Sales { get; private set; } = new(); } diff --git a/Content.Shared/StoreDiscount/SalesSpecifier.cs b/Content.Shared/StoreDiscount/SalesSpecifier.cs new file mode 100644 index 00000000000..21539f85d41 --- /dev/null +++ b/Content.Shared/StoreDiscount/SalesSpecifier.cs @@ -0,0 +1,38 @@ +namespace Content.Shared.StoreDiscount; + +[DataDefinition] +public sealed partial class SalesSpecifier +{ + [DataField] + public bool Enabled { get; private set; } + + [DataField] + public float MinMultiplier { get; private set; } + + [DataField] + public float MaxMultiplier { get; private set; } + + [DataField] + public int MinItems { get; private set; } + + [DataField] + public int MaxItems { get; private set; } + + [DataField] + public string SalesCategory { get; private set; } = string.Empty; + + public SalesSpecifier() + { + } + + public SalesSpecifier(bool enabled, float minMultiplier, float maxMultiplier, int minItems, int maxItems, + string salesCategory) + { + Enabled = enabled; + MinMultiplier = minMultiplier; + MaxMultiplier = maxMultiplier; + MinItems = minItems; + MaxItems = maxItems; + SalesCategory = salesCategory; + } +} diff --git a/Content.Shared/Stunnable/Events/KnockdownOnHitEvent.cs b/Content.Shared/Stunnable/Events/KnockdownOnHitEvent.cs new file mode 100644 index 00000000000..b177f0e3f3c --- /dev/null +++ b/Content.Shared/Stunnable/Events/KnockdownOnHitEvent.cs @@ -0,0 +1,4 @@ +namespace Content.Shared.Stunnable.Events; + +[ByRefEvent] +public record struct KnockdownOnHitAttemptEvent(bool Cancelled); diff --git a/Content.Shared/Stunnable/KnockedDownComponent.cs b/Content.Shared/Stunnable/KnockedDownComponent.cs index e4f11b8cdaa..865c69bf6ef 100644 --- a/Content.Shared/Stunnable/KnockedDownComponent.cs +++ b/Content.Shared/Stunnable/KnockedDownComponent.cs @@ -1,6 +1,6 @@ +using Content.Shared.Standing; using Robust.Shared.Audio; using Robust.Shared.GameStates; -using Robust.Shared.Serialization; namespace Content.Shared.Stunnable; @@ -13,6 +13,9 @@ public sealed partial class KnockedDownComponent : Component [DataField("helpAttemptSound")] public SoundSpecifier StunAttemptSound = new SoundPathSpecifier("/Audio/Effects/thudswoosh.ogg"); + [DataField] + public DropHeldItemsBehavior DropHeldItemsBehavior = DropHeldItemsBehavior.DropIfStanding; + [ViewVariables, AutoNetworkedField] public float HelpTimer = 0f; } diff --git a/Content.Shared/Stunnable/SharedStunSystem.cs b/Content.Shared/Stunnable/SharedStunSystem.cs index 976b0ab500d..05d6b8ec533 100644 --- a/Content.Shared/Stunnable/SharedStunSystem.cs +++ b/Content.Shared/Stunnable/SharedStunSystem.cs @@ -19,6 +19,7 @@ using Content.Shared.Throwing; using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; +using Robust.Shared.Containers; using Robust.Shared.GameStates; using Robust.Shared.Player; @@ -26,12 +27,16 @@ namespace Content.Shared.Stunnable; public abstract class SharedStunSystem : EntitySystem { + [Dependency] private readonly IComponentFactory _componentFactory = default!; + [Dependency] private readonly ActionBlockerSystem _blocker = default!; [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!; [Dependency] private readonly MovementSpeedModifierSystem _movementSpeedModifier = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly StandingStateSystem _standingState = default!; [Dependency] private readonly StatusEffectsSystem _statusEffect = default!; + [Dependency] private readonly SharedLayingDownSystem _layingDown = default!; + [Dependency] private readonly SharedContainerSystem _container = default!; /// /// Friction modifier for knocked down players. @@ -76,15 +81,12 @@ public override void Initialize() private void OnMobStateChanged(EntityUid uid, MobStateComponent component, MobStateChangedEvent args) { if (!TryComp(uid, out var status)) - { return; - } + switch (args.NewMobState) { case MobState.Alive: - { break; - } case MobState.Critical: { _statusEffect.TryRemoveStatusEffect(uid, "Stun"); @@ -109,12 +111,23 @@ private void UpdateCanMove(EntityUid uid, StunnedComponent component, EntityEven private void OnKnockInit(EntityUid uid, KnockedDownComponent component, ComponentInit args) { - _standingState.Down(uid); + RaiseNetworkEvent(new CheckAutoGetUpEvent(GetNetEntity(uid))); + _layingDown.TryLieDown(uid, null, null, component.DropHeldItemsBehavior); } private void OnKnockShutdown(EntityUid uid, KnockedDownComponent component, ComponentShutdown args) { - _standingState.Stand(uid); + if (!TryComp(uid, out StandingStateComponent? standing)) + return; + + if (TryComp(uid, out LayingDownComponent? layingDown)) + { + if (layingDown.AutoGetUp && !_container.IsEntityInContainer(uid)) + _layingDown.TryStandUp(uid, layingDown); + return; + } + + _standingState.Stand(uid, standing); } private void OnStandAttempt(EntityUid uid, KnockedDownComponent component, StandAttemptEvent args) @@ -148,13 +161,9 @@ private void OnRefreshMovespeed(EntityUid uid, SlowedDownComponent component, Re public bool TryStun(EntityUid uid, TimeSpan time, bool refresh, StatusEffectsComponent? status = null) { - if (time <= TimeSpan.Zero) - return false; - - if (!Resolve(uid, ref status, false)) - return false; - - if (!_statusEffect.TryAddStatusEffect(uid, "Stun", time, refresh)) + if (time <= TimeSpan.Zero + || !Resolve(uid, ref status, false) + || !_statusEffect.TryAddStatusEffect(uid, "Stun", time, refresh)) return false; var ev = new StunnedEvent(); @@ -168,15 +177,31 @@ 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, StatusEffectsComponent? status = null) { - if (time <= TimeSpan.Zero) + if (time <= TimeSpan.Zero || !Resolve(uid, ref status, false)) return false; - if (!Resolve(uid, ref status, false)) + var component = _componentFactory.GetComponent(); + component.DropHeldItemsBehavior = behavior; + if (!_statusEffect.TryAddStatusEffect(uid, "KnockedDown", time, refresh, component)) return false; - if (!_statusEffect.TryAddStatusEffect(uid, "KnockedDown", time, refresh)) + var ev = new KnockedDownEvent(); + RaiseLocalEvent(uid, ref ev); + return true; + } + + /// + /// Knocks down the entity, making it fall to the ground. + /// + public bool TryKnockdown(EntityUid uid, TimeSpan time, bool refresh, + StatusEffectsComponent? status = null) + { + if (time <= TimeSpan.Zero + || !Resolve(uid, ref status, false) + || !_statusEffect.TryAddStatusEffect(uid, "KnockedDown", time, refresh)) return false; var ev = new KnockedDownEvent(); @@ -204,10 +229,8 @@ public bool TrySlowdown(EntityUid uid, TimeSpan time, bool refresh, float walkSpeedMultiplier = 1f, float runSpeedMultiplier = 1f, StatusEffectsComponent? status = null) { - if (!Resolve(uid, ref status, false)) - return false; - - if (time <= TimeSpan.Zero) + if (!Resolve(uid, ref status, false) + || time <= TimeSpan.Zero) return false; if (_statusEffect.TryAddStatusEffect(uid, "SlowedDown", time, refresh, status)) @@ -230,14 +253,8 @@ public bool TrySlowdown(EntityUid uid, TimeSpan time, bool refresh, private void OnInteractHand(EntityUid uid, KnockedDownComponent knocked, InteractHandEvent args) { - // This is currently disabled in favor of an interaction verb with the same effect, but more obvious usage. - return; - - if (args.Handled || knocked.HelpTimer > 0f) - return; - - // TODO: This should be an event. - if (HasComp(uid)) + if (args.Handled || knocked.HelpTimer > 0f + || HasComp(uid)) return; // Set it to half the help interval so helping is actually useful... @@ -273,15 +290,19 @@ private void OnAttempt(EntityUid uid, StunnedComponent stunned, CancellableEntit private void OnEquipAttempt(EntityUid uid, StunnedComponent stunned, IsEquippingAttemptEvent args) { // is this a self-equip, or are they being stripped? - if (args.Equipee == uid) - args.Cancel(); + if (args.Equipee != uid) + return; + + args.Cancel(); } private void OnUnequipAttempt(EntityUid uid, StunnedComponent stunned, IsUnequippingAttemptEvent args) { // is this a self-equip, or are they being stripped? - if (args.Unequipee == uid) - args.Cancel(); + if (args.Unequipee != uid) + return; + + args.Cancel(); } #endregion diff --git a/Content.Shared/Tag/TagSystem.cs b/Content.Shared/Tag/TagSystem.cs index 0628b892edd..0707308e486 100644 --- a/Content.Shared/Tag/TagSystem.cs +++ b/Content.Shared/Tag/TagSystem.cs @@ -1,3 +1,4 @@ +using System.Diagnostics; using System.Linq; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; @@ -9,9 +10,12 @@ public sealed class TagSystem : EntitySystem { [Dependency] private readonly IPrototypeManager _proto = default!; + private EntityQuery _tagQuery; + public override void Initialize() { base.Initialize(); + _tagQuery = GetEntityQuery(); SubscribeLocalEvent(OnTagGetState); SubscribeLocalEvent(OnTagHandleState); @@ -124,7 +128,7 @@ public bool AddTags(EntityUid entity, IEnumerable ids) /// public bool TryAddTag(EntityUid entity, string id) { - return TryComp(entity, out var component) && + return _tagQuery.TryComp(entity, out var component) && AddTag(component, id); } @@ -142,7 +146,7 @@ public bool TryAddTag(EntityUid entity, string id) /// public bool TryAddTags(EntityUid entity, params string[] ids) { - return TryComp(entity, out var component) && + return _tagQuery.TryComp(entity, out var component) && AddTags(component, ids); } @@ -160,7 +164,7 @@ public bool TryAddTags(EntityUid entity, params string[] ids) /// public bool TryAddTags(EntityUid entity, IEnumerable ids) { - return TryComp(entity, out var component) && + return _tagQuery.TryComp(entity, out var component) && AddTags(component, ids); } @@ -175,13 +179,14 @@ public bool TryAddTags(EntityUid entity, IEnumerable ids) /// public bool HasTag(EntityUid entity, string id) { - return TryComp(entity, out var component) && + return _tagQuery.TryComp(entity, out var component) && HasTag(component, id); } /// /// Checks if a tag has been added to an entity. /// + [Obsolete] public bool HasTag(EntityUid entity, string id, EntityQuery tagQuery) { return tagQuery.TryGetComponent(entity, out var component) && @@ -210,7 +215,7 @@ public bool HasTag(EntityUid entity, string id, EntityQuery tagQue /// public bool HasAllTags(EntityUid entity, List ids) { - return TryComp(entity, out var component) && + return _tagQuery.TryComp(entity, out var component) && HasAllTags(component, ids); } @@ -225,7 +230,7 @@ public bool HasAllTags(EntityUid entity, List ids) /// public bool HasAllTags(EntityUid entity, IEnumerable ids) { - return TryComp(entity, out var component) && + return _tagQuery.TryComp(entity, out var component) && HasAllTags(component, ids); } @@ -234,18 +239,33 @@ public bool HasAllTags(EntityUid entity, IEnumerable ids) /// /// The entity to check. /// The tags to check for. + /// true if they all exist, false otherwise. + /// + /// Thrown if one of the ids represents an unregistered . + /// + public bool HasAllTags(EntityUid entity, List> ids) + { + return _tagQuery.TryComp(entity, out var component) && + HasAllTags(component, ids); + } + + /// + /// Checks if any of the given tags have been added to an entity. + /// + /// The entity to check. + /// The tags to check for. /// true if any of them exist, false otherwise. /// /// Thrown if one of the ids represents an unregistered . /// public bool HasAnyTag(EntityUid entity, params string[] ids) { - return TryComp(entity, out var component) && + return _tagQuery.TryComp(entity, out var component) && HasAnyTag(component, ids); } /// - /// Checks if all of the given tags have been added to an entity. + /// Checks if any of the given tags have been added to an entity. /// /// The entity to check. /// The tag to check for. @@ -256,7 +276,7 @@ public bool HasAnyTag(EntityUid entity, params string[] ids) public bool HasAnyTag(EntityUid entity, string id) => HasTag(entity, id); /// - /// Checks if all of the given tags have been added to an entity. + /// Checks if any of the given tags have been added to an entity. /// /// The entity to check. /// The tags to check for. @@ -265,13 +285,28 @@ public bool HasAnyTag(EntityUid entity, params string[] ids) /// Thrown if one of the ids represents an unregistered . /// public bool HasAnyTag(EntityUid entity, List ids) + { + return _tagQuery.TryComp(entity, out var component) && + HasAnyTag(component, ids); + } + + /// + /// Checks if any of the given tags have been added to an entity. + /// + /// The entity to check. + /// The tags to check for. + /// true if any of them exist, false otherwise. + /// + /// Thrown if one of the ids represents an unregistered . + /// + public bool HasAnyTag(EntityUid entity, List> ids) { return TryComp(entity, out var component) && HasAnyTag(component, ids); } /// - /// Checks if all of the given tags have been added to an entity. + /// Checks if any of the given tags have been added to an entity. /// /// The entity to check. /// The tags to check for. @@ -281,7 +316,7 @@ public bool HasAnyTag(EntityUid entity, List ids) /// public bool HasAnyTag(EntityUid entity, IEnumerable ids) { - return TryComp(entity, out var component) && + return _tagQuery.TryComp(entity, out var component) && HasAnyTag(component, ids); } @@ -298,7 +333,7 @@ public bool HasAnyTag(EntityUid entity, IEnumerable ids) /// public bool RemoveTag(EntityUid entity, string id) { - return TryComp(entity, out var component) && + return _tagQuery.TryComp(entity, out var component) && RemoveTag(component, id); } @@ -315,7 +350,7 @@ public bool RemoveTag(EntityUid entity, string id) /// public bool RemoveTags(EntityUid entity, params string[] ids) { - return TryComp(entity, out var component) && + return _tagQuery.TryComp(entity, out var component) && RemoveTags(component, ids); } @@ -332,7 +367,7 @@ public bool RemoveTags(EntityUid entity, params string[] ids) /// public bool RemoveTags(EntityUid entity, IEnumerable ids) { - return TryComp(entity, out var component) && + return _tagQuery.TryComp(entity, out var component) && RemoveTags(component, ids); } @@ -478,6 +513,28 @@ public bool HasAllTags(TagComponent component, IEnumerable ids) return true; } + /// + /// Checks if all of the given tags have been added. + /// + /// The tags to check for. + /// true if they all exist, false otherwise. + /// + /// Thrown if one of the ids represents an unregistered . + /// + public bool HasAllTags(TagComponent component, List> ids) + { + foreach (var id in ids) + { + AssertValidTag(id); + + if (!component.Tags.Contains(id)) + return false; + + } + + return true; + } + /// /// Checks if any of the given tags have been added. /// @@ -488,9 +545,16 @@ public bool HasAllTags(TagComponent component, IEnumerable ids) /// public bool HasAnyTag(TagComponent component, params string[] ids) { - return HasAnyTag(component, ids.AsEnumerable()); - } + foreach (var id in ids) + { + AssertValidTag(id); + + if (component.Tags.Contains(id)) + return true; + } + return false; + } /// /// Checks if any of the given tags have been added. @@ -548,6 +612,27 @@ public bool HasAnyTag(TagComponent component, IEnumerable ids) return false; } + /// + /// Checks if any of the given tags have been added. + /// + /// The tags to check for. + /// true if any of them exist, false otherwise. + /// + /// Thrown if one of the ids represents an unregistered . + /// + public bool HasAnyTag(TagComponent comp, List> ids) + { + foreach (var id in ids) + { + AssertValidTag(id); + + if (comp.Tags.Contains(id)) + return true; + } + + return false; + } + /// /// Tries to remove a tag if it exists. /// diff --git a/Content.Shared/Teleportation/Systems/SwapTeleporterSystem.cs b/Content.Shared/Teleportation/Systems/SwapTeleporterSystem.cs index e69a31a1d40..62c0b0f44e4 100644 --- a/Content.Shared/Teleportation/Systems/SwapTeleporterSystem.cs +++ b/Content.Shared/Teleportation/Systems/SwapTeleporterSystem.cs @@ -145,27 +145,14 @@ public void DoTeleport(Entity ent) } var teleEnt = GetTeleportingEntity((uid, xform)); - var teleEntXform = Transform(teleEnt); var otherTeleEnt = GetTeleportingEntity((linkedEnt, Transform(linkedEnt))); - var otherTeleEntXform = Transform(otherTeleEnt); _popup.PopupEntity(Loc.GetString("swap-teleporter-popup-teleport-other", ("entity", Identity.Entity(linkedEnt, EntityManager))), otherTeleEnt, otherTeleEnt, PopupType.MediumCaution); - var pos = teleEntXform.Coordinates; - var otherPos = otherTeleEntXform.Coordinates; - - if (_transform.ContainsEntity(teleEnt, (otherTeleEnt, otherTeleEntXform)) || - _transform.ContainsEntity(otherTeleEnt, (teleEnt, teleEntXform))) - { - Log.Error($"Invalid teleport swap attempt between {ToPrettyString(teleEnt)} and {ToPrettyString(otherTeleEnt)}"); - return; - } - - _transform.SetCoordinates(teleEnt, otherPos); - _transform.SetCoordinates(otherTeleEnt, pos); + _transform.SwapPositions(teleEnt, otherTeleEnt); } /// diff --git a/Content.Shared/Telescope/SharedTelescopeSystem.cs b/Content.Shared/Telescope/SharedTelescopeSystem.cs new file mode 100644 index 00000000000..5f9896cc359 --- /dev/null +++ b/Content.Shared/Telescope/SharedTelescopeSystem.cs @@ -0,0 +1,110 @@ +using System.Numerics; +using Content.Shared.Camera; +using Content.Shared.Hands; +using Content.Shared.Hands.Components; +using Content.Shared.Item; +using Robust.Shared.Serialization; + +namespace Content.Shared.Telescope; + +public abstract class SharedTelescopeSystem : EntitySystem +{ + [Dependency] private readonly SharedEyeSystem _eye = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeAllEvent(OnEyeOffsetChanged); + SubscribeLocalEvent(OnUnequip); + SubscribeLocalEvent(OnHandDeselected); + SubscribeLocalEvent(OnShutdown); + } + + private void OnShutdown(Entity ent, ref ComponentShutdown args) + { + if (!TryComp(ent.Comp.LastEntity, out EyeComponent? eye) + || ent.Comp.LastEntity == ent && TerminatingOrDeleted(ent)) + return; + + SetOffset((ent.Comp.LastEntity.Value, eye), Vector2.Zero, ent); + } + + private void OnHandDeselected(Entity ent, ref HandDeselectedEvent args) + { + if (!TryComp(args.User, out EyeComponent? eye)) + return; + + SetOffset((args.User, eye), Vector2.Zero, ent); + } + + private void OnUnequip(Entity ent, ref GotUnequippedHandEvent args) + { + if (!TryComp(args.User, out EyeComponent? eye) + || !HasComp(ent.Owner)) + return; + + SetOffset((args.User, eye), Vector2.Zero, ent); + } + + public TelescopeComponent? GetRightTelescope(EntityUid? ent) + { + TelescopeComponent? telescope = null; + + if (TryComp(ent, out var hands) + && hands.ActiveHandEntity.HasValue + && TryComp(hands.ActiveHandEntity, out var handTelescope)) + telescope = handTelescope; + else if (TryComp(ent, out var entityTelescope)) + telescope = entityTelescope; + + return telescope; + } + + private void OnEyeOffsetChanged(EyeOffsetChangedEvent msg, EntitySessionEventArgs args) + { + if (args.SenderSession.AttachedEntity is not { } ent + || !TryComp(ent, out var eye)) + return; + + var telescope = GetRightTelescope(ent); + + if (telescope == null) + return; + + var offset = Vector2.Lerp(eye.Offset, msg.Offset, telescope.LerpAmount); + + SetOffset((ent, eye), offset, telescope); + } + + private void SetOffset(Entity ent, Vector2 offset, TelescopeComponent telescope) + { + telescope.LastEntity = ent; + + if (TryComp(ent, out CameraRecoilComponent? recoil)) + { + recoil.BaseOffset = offset; + _eye.SetOffset(ent, offset + recoil.CurrentKick, ent); + } + else + { + _eye.SetOffset(ent, offset, ent); + } + } + + public void SetParameters(Entity ent, float? divisor = null, float? lerpAmount = null) + { + var telescope = ent.Comp; + + telescope.Divisor = divisor ?? telescope.Divisor; + telescope.LerpAmount = lerpAmount ?? telescope.LerpAmount; + + Dirty(ent.Owner, telescope); + } +} + +[Serializable, NetSerializable] +public sealed class EyeOffsetChangedEvent : EntityEventArgs +{ + public Vector2 Offset; +} diff --git a/Content.Shared/Telescope/TelescopeComponent.cs b/Content.Shared/Telescope/TelescopeComponent.cs new file mode 100644 index 00000000000..529cc58324f --- /dev/null +++ b/Content.Shared/Telescope/TelescopeComponent.cs @@ -0,0 +1,16 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Telescope; + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class TelescopeComponent : Component +{ + [DataField, AutoNetworkedField] + public float Divisor = 0.1f; + + [DataField, AutoNetworkedField] + public float LerpAmount = 0.1f; + + [ViewVariables] + public EntityUid? LastEntity; +} diff --git a/Content.Shared/TelescopicBaton/TelescopicBatonVisuals.cs b/Content.Shared/TelescopicBaton/TelescopicBatonVisuals.cs new file mode 100644 index 00000000000..25e6f583c83 --- /dev/null +++ b/Content.Shared/TelescopicBaton/TelescopicBatonVisuals.cs @@ -0,0 +1,10 @@ +using Robust.Shared.Serialization; + +namespace Content.Shared.TelescopicBaton; + +[Serializable, NetSerializable] +public enum TelescopicBatonVisuals +{ + State, + Layer +} diff --git a/Content.Shared/Timing/UseDelayComponent.cs b/Content.Shared/Timing/UseDelayComponent.cs index 1560d4dd0b9..aa6c66eb81a 100644 --- a/Content.Shared/Timing/UseDelayComponent.cs +++ b/Content.Shared/Timing/UseDelayComponent.cs @@ -1,38 +1,53 @@ using Robust.Shared.GameStates; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; +using Robust.Shared.Serialization; namespace Content.Shared.Timing; /// -/// Timer that creates a cooldown each time an object is activated/used +/// Timer that creates a cooldown each time an object is activated/used. +/// Can support additional, separate cooldown timers on the object by passing a unique ID with the system methods. /// -/// -/// Currently it only supports a single delay per entity, this means that for things that have two delay interactions they will share one timer, so this can cause issues. For example, the bible has a delay when opening the storage UI and when applying it's interaction effect, and they share the same delay. -/// [RegisterComponent] -[NetworkedComponent, AutoGenerateComponentState, AutoGenerateComponentPause] +[NetworkedComponent] [Access(typeof(UseDelaySystem))] public sealed partial class UseDelayComponent : Component { - /// - /// When the delay starts. - /// - [ViewVariables(VVAccess.ReadWrite), DataField(customTypeSerializer: typeof(TimeOffsetSerializer)), AutoNetworkedField] - [AutoPausedField] - public TimeSpan DelayStartTime; - - /// - /// When the delay ends. - /// - [ViewVariables(VVAccess.ReadWrite), DataField(customTypeSerializer: typeof(TimeOffsetSerializer)), AutoNetworkedField] - [AutoPausedField] - public TimeSpan DelayEndTime; + [DataField] + public Dictionary Delays = []; /// - /// Default delay time + /// Default delay time. /// + /// + /// This is only used at MapInit and should not be expected + /// to reflect the length of the default delay after that. + /// Use instead. + /// [DataField] - [ViewVariables(VVAccess.ReadWrite)] - [AutoNetworkedField] public TimeSpan Delay = TimeSpan.FromSeconds(1); } + +[Serializable, NetSerializable] +public sealed class UseDelayComponentState : IComponentState +{ + public Dictionary Delays = new(); +} + +[Serializable, NetSerializable] +[DataDefinition] +public sealed partial class UseDelayInfo +{ + [DataField] + public TimeSpan Length { get; set; } + [DataField] + public TimeSpan StartTime { get; set; } + [DataField] + public TimeSpan EndTime { get; set; } + + public UseDelayInfo(TimeSpan length, TimeSpan startTime = default, TimeSpan endTime = default) + { + Length = length; + StartTime = startTime; + EndTime = endTime; + } +} diff --git a/Content.Shared/Timing/UseDelaySystem.cs b/Content.Shared/Timing/UseDelaySystem.cs index 388f31079cd..9816d0185a5 100644 --- a/Content.Shared/Timing/UseDelaySystem.cs +++ b/Content.Shared/Timing/UseDelaySystem.cs @@ -1,3 +1,5 @@ +using System.Diagnostics.CodeAnalysis; +using Robust.Shared.GameStates; using Robust.Shared.Timing; namespace Content.Shared.Timing; @@ -7,53 +9,171 @@ public sealed class UseDelaySystem : EntitySystem [Dependency] private readonly IGameTiming _gameTiming = default!; [Dependency] private readonly MetaDataSystem _metadata = default!; - public void SetDelay(Entity ent, TimeSpan delay) + private const string DefaultId = "default"; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnMapInit); + SubscribeLocalEvent(OnUnpaused); + SubscribeLocalEvent(OnDelayGetState); + SubscribeLocalEvent(OnDelayHandleState); + } + + private void OnDelayHandleState(Entity ent, ref ComponentHandleState args) { - if (ent.Comp.Delay == delay) + if (args.Current is not UseDelayComponentState state) return; - ent.Comp.Delay = delay; + ent.Comp.Delays.Clear(); + + // At time of writing sourcegen networking doesn't deep copy so this will mispredict if you try. + foreach (var (key, delay) in state.Delays) + { + ent.Comp.Delays[key] = new UseDelayInfo(delay.Length, delay.StartTime, delay.EndTime); + } + } + + private void OnDelayGetState(Entity ent, ref ComponentGetState args) + { + args.State = new UseDelayComponentState() + { + Delays = ent.Comp.Delays + }; + } + + private void OnMapInit(Entity ent, ref MapInitEvent args) + { + // Set default delay length from the prototype + // This makes it easier for simple use cases that only need a single delay + SetLength((ent, ent.Comp), ent.Comp.Delay, DefaultId); + } + + private void OnUnpaused(Entity ent, ref EntityUnpausedEvent args) + { + // We have to do this manually, since it's not just a single field. + foreach (var entry in ent.Comp.Delays.Values) + { + entry.EndTime += args.PausedTime; + } + } + + /// + /// Sets the length of the delay with the specified ID. + /// + /// + /// This will add a UseDelay component to the entity if it doesn't have one. + /// + public bool SetLength(Entity ent, TimeSpan length, string id = DefaultId) + { + EnsureComp(ent.Owner, out var comp); + + if (comp.Delays.TryGetValue(id, out var entry)) + { + if (entry.Length == length) + return true; + + entry.Length = length; + } + else + { + comp.Delays.Add(id, new UseDelayInfo(length)); + } + Dirty(ent); + return true; } /// - /// Returns true if the entity has a currently active UseDelay. + /// Returns true if the entity has a currently active UseDelay with the specified ID. /// - public bool IsDelayed(Entity ent) + public bool IsDelayed(Entity ent, string id = DefaultId) { - return ent.Comp.DelayEndTime >= _gameTiming.CurTime; + if (!ent.Comp.Delays.TryGetValue(id, out var entry)) + return false; + + return entry.EndTime >= _gameTiming.CurTime; } /// - /// Cancels the current delay. + /// Cancels the delay with the specified ID. /// - public void CancelDelay(Entity ent) + public void CancelDelay(Entity ent, string id = DefaultId) { - ent.Comp.DelayEndTime = _gameTiming.CurTime; + if (!ent.Comp.Delays.TryGetValue(id, out var entry)) + return; + + entry.EndTime = _gameTiming.CurTime; Dirty(ent); } /// - /// Resets the UseDelay entirely for this entity if possible. + /// Tries to get info about the delay with the specified ID. See . + /// + /// + /// + /// + /// + public bool TryGetDelayInfo(Entity ent, [NotNullWhen(true)] out UseDelayInfo? info, string id = DefaultId) + { + return ent.Comp.Delays.TryGetValue(id, out info); + } + + /// + /// Returns info for the delay that will end farthest in the future. /// - /// Check if the entity has an ongoing delay, return false if it does, return true if it does not. - public bool TryResetDelay(Entity ent, bool checkDelayed = false) + public UseDelayInfo GetLastEndingDelay(Entity ent) { - if (checkDelayed && IsDelayed(ent)) + var last = ent.Comp.Delays[DefaultId]; + foreach (var entry in ent.Comp.Delays) + { + if (entry.Value.EndTime > last.EndTime) + last = entry.Value; + } + return last; + } + + /// + /// Resets the delay with the specified ID for this entity if possible. + /// + /// Check if the entity has an ongoing delay with the specified ID. + /// If it does, return false and don't reset it. + /// Otherwise reset it and return true. + public bool TryResetDelay(Entity ent, bool checkDelayed = false, string id = DefaultId) + { + if (checkDelayed && IsDelayed(ent, id)) + return false; + + if (!ent.Comp.Delays.TryGetValue(id, out var entry)) return false; var curTime = _gameTiming.CurTime; - ent.Comp.DelayStartTime = curTime; - ent.Comp.DelayEndTime = curTime - _metadata.GetPauseTime(ent) + ent.Comp.Delay; + entry.StartTime = curTime; + entry.EndTime = curTime - _metadata.GetPauseTime(ent) + entry.Length; Dirty(ent); return true; } - public bool TryResetDelay(EntityUid uid, bool checkDelayed = false, UseDelayComponent? component = null) + public bool TryResetDelay(EntityUid uid, bool checkDelayed = false, UseDelayComponent? component = null, string id = DefaultId) { if (!Resolve(uid, ref component, false)) return false; - return TryResetDelay((uid, component), checkDelayed); + return TryResetDelay((uid, component), checkDelayed, id); + } + + /// + /// Resets all delays on the entity. + /// + public void ResetAllDelays(Entity ent) + { + var curTime = _gameTiming.CurTime; + foreach (var entry in ent.Comp.Delays.Values) + { + entry.StartTime = curTime; + entry.EndTime = curTime - _metadata.GetPauseTime(ent) + entry.Length; + } + Dirty(ent); } } diff --git a/Content.Shared/Tips/TippyEvent.cs b/Content.Shared/Tips/TippyEvent.cs new file mode 100644 index 00000000000..4370e9c8227 --- /dev/null +++ b/Content.Shared/Tips/TippyEvent.cs @@ -0,0 +1,19 @@ + +using Robust.Shared.Serialization; + +namespace Content.Shared.Tips; + +[Serializable, NetSerializable] +public sealed class TippyEvent : EntityEventArgs +{ + public TippyEvent(string msg) + { + Msg = msg; + } + + public string Msg; + public string? Proto; + public float SpeakTime = 5; + public float SlideTime = 3; + public float WaddleInterval = 0.5f; +} diff --git a/Content.Shared/Tools/Components/SharedWeldable.cs b/Content.Shared/Tools/Components/SharedWeldable.cs deleted file mode 100644 index 701bd4d8da5..00000000000 --- a/Content.Shared/Tools/Components/SharedWeldable.cs +++ /dev/null @@ -1,49 +0,0 @@ -using Robust.Shared.GameStates; -using Robust.Shared.Serialization; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; - -namespace Content.Shared.Tools.Components; - -[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] -public sealed partial class WeldableComponent : Component -{ - /// - /// Tool quality for welding. - /// - [DataField("weldingQuality", customTypeSerializer: typeof(PrototypeIdSerializer))] - [ViewVariables(VVAccess.ReadWrite)] - public string WeldingQuality = "Welding"; - - /// - /// How much time does it take to weld/unweld entity. - /// - [DataField("time")] - [ViewVariables(VVAccess.ReadWrite)] - [AutoNetworkedField] - public TimeSpan WeldingTime = TimeSpan.FromSeconds(1f); - - /// - /// Shown when welded entity is examined. - /// - [DataField("weldedExamineMessage")] - [ViewVariables(VVAccess.ReadWrite)] - public string? WeldedExamineMessage = "weldable-component-examine-is-welded"; - - /// - /// Is this entity currently welded shut? - /// - [DataField("isWelded"), AutoNetworkedField] - public bool IsWelded; -} - -[Serializable, NetSerializable] -public enum WeldableVisuals : byte -{ - IsWelded -} - -[Serializable, NetSerializable] -public enum WeldableLayers : byte -{ - BaseWelded -} diff --git a/Content.Shared/Tools/Components/SharedWelderComponent.cs b/Content.Shared/Tools/Components/SharedWelderComponent.cs deleted file mode 100644 index 78c1cde201b..00000000000 --- a/Content.Shared/Tools/Components/SharedWelderComponent.cs +++ /dev/null @@ -1,21 +0,0 @@ -using Robust.Shared.GameStates; -using Robust.Shared.Serialization; - -namespace Content.Shared.Tools.Components -{ - [NetworkedComponent] - public abstract partial class SharedWelderComponent : Component { } - - [NetSerializable, Serializable] - public sealed class WelderComponentState : ComponentState - { - public float FuelCapacity { get; } - public float Fuel { get; } - - public WelderComponentState(float fuelCapacity, float fuel) - { - FuelCapacity = fuelCapacity; - Fuel = fuel; - } - } -} diff --git a/Content.Shared/Tools/Components/WeldableComponent.cs b/Content.Shared/Tools/Components/WeldableComponent.cs new file mode 100644 index 00000000000..e491b5f6a73 --- /dev/null +++ b/Content.Shared/Tools/Components/WeldableComponent.cs @@ -0,0 +1,51 @@ +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; + +namespace Content.Shared.Tools.Components; + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class WeldableComponent : Component +{ + /// + /// Tool quality for welding. + /// + [DataField] + public ProtoId WeldingQuality = "Welding"; + + /// + /// How much time does it take to weld/unweld entity. + /// + [DataField, AutoNetworkedField] + public TimeSpan Time = TimeSpan.FromSeconds(1f); + + /// + /// How much fuel does it take to weld/unweld entity. + /// + [DataField] + public float Fuel = 3f; + + /// + /// Shown when welded entity is examined. + /// + [DataField] + public LocId? WeldedExamineMessage = "weldable-component-examine-is-welded"; + + /// + /// Is this entity currently welded shut? + /// + [DataField, AutoNetworkedField] + public bool IsWelded; +} + +[Serializable, NetSerializable] +public enum WeldableVisuals : byte +{ + IsWelded +} + +[Serializable, NetSerializable] +public enum WeldableLayers : byte +{ + BaseWelded +} diff --git a/Content.Shared/Tools/Components/WelderComponent.cs b/Content.Shared/Tools/Components/WelderComponent.cs new file mode 100644 index 00000000000..3c78a03fdeb --- /dev/null +++ b/Content.Shared/Tools/Components/WelderComponent.cs @@ -0,0 +1,58 @@ +using Content.Shared.Chemistry.Components; +using Content.Shared.Chemistry.Reagent; +using Content.Shared.FixedPoint; +using Content.Shared.Tools.Systems; +using Robust.Shared.Audio; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared.Tools.Components; + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState(true), Access(typeof(SharedToolSystem))] +public sealed partial class WelderComponent : Component +{ + [DataField, AutoNetworkedField] + public bool Enabled; + + [DataField] + public float WelderTimer; + + /// + /// Name of . + /// + [DataField] + public string FuelSolutionName = "Welder"; + + /// + /// Reagent that will be used as fuel for welding. + /// + [DataField] + public ProtoId FuelReagent = "WeldingFuel"; + + /// + /// Fuel consumption per second while the welder is active. + /// + [DataField, AutoNetworkedField] + public FixedPoint2 FuelConsumption = FixedPoint2.New(1.0f); + + /// + /// A fuel amount to be consumed when the welder goes from being unlit to being lit. + /// + [DataField, AutoNetworkedField] + public FixedPoint2 FuelLitCost = FixedPoint2.New(0.5f); + + /// + /// Sound played when refilling the welder. + /// + [DataField] + public SoundSpecifier WelderRefill = new SoundPathSpecifier("/Audio/Effects/refill.ogg"); + + /// + /// Whether the item is safe to refill while lit without exploding the tank. + /// + [DataField] + public bool TankSafe; + + [DataField] + public float WelderUpdateTimer = 1f; +} diff --git a/Content.Shared/Tools/Systems/SharedToolSystem.Welder.cs b/Content.Shared/Tools/Systems/SharedToolSystem.Welder.cs new file mode 100644 index 00000000000..e790b59cd12 --- /dev/null +++ b/Content.Shared/Tools/Systems/SharedToolSystem.Welder.cs @@ -0,0 +1,178 @@ +using Content.Shared.Chemistry.Components; +using Content.Shared.Chemistry.Components.SolutionManager; +using Content.Shared.Database; +using Content.Shared.DoAfter; +using Content.Shared.Examine; +using Content.Shared.FixedPoint; +using Content.Shared.Interaction; +using Content.Shared.Item.ItemToggle.Components; +using Content.Shared.Tools.Components; + +namespace Content.Shared.Tools.Systems; + +public abstract partial class SharedToolSystem +{ + public void InitializeWelder() + { + SubscribeLocalEvent(OnWelderExamine); + SubscribeLocalEvent(OnWelderAfterInteract); + SubscribeLocalEvent>(OnWelderToolUseAttempt); + SubscribeLocalEvent(OnWelderDoAfter); + SubscribeLocalEvent(OnToggle); + SubscribeLocalEvent(OnActivateAttempt); + } + + public virtual void TurnOn(Entity entity, EntityUid? user) + { + if (!SolutionContainerSystem.TryGetSolution(entity.Owner, entity.Comp.FuelSolutionName, out var solutionComp, out _)) + return; + + SolutionContainerSystem.RemoveReagent(solutionComp.Value, entity.Comp.FuelReagent, entity.Comp.FuelLitCost); + AdminLogger.Add(LogType.InteractActivate, LogImpact.Low, + $"{ToPrettyString(user):user} toggled {ToPrettyString(entity.Owner):welder} on"); + + entity.Comp.Enabled = true; + Dirty(entity, entity.Comp); + } + + public void TurnOff(Entity entity, EntityUid? user) + { + AdminLogger.Add(LogType.InteractActivate, LogImpact.Low, + $"{ToPrettyString(user):user} toggled {ToPrettyString(entity.Owner):welder} off"); + entity.Comp.Enabled = false; + Dirty(entity, entity.Comp); + } + + public (FixedPoint2 fuel, FixedPoint2 capacity) GetWelderFuelAndCapacity(EntityUid uid, WelderComponent? welder = null, SolutionContainerManagerComponent? solutionContainer = null) + { + if (!Resolve(uid, ref welder, ref solutionContainer)) + return default; + + if (!SolutionContainer.TryGetSolution( + (uid, solutionContainer), + welder.FuelSolutionName, + out _, + out var fuelSolution)) + { + return default; + } + + return (fuelSolution.GetTotalPrototypeQuantity(welder.FuelReagent), fuelSolution.MaxVolume); + } + + private void OnWelderExamine(Entity entity, ref ExaminedEvent args) + { + using (args.PushGroup(nameof(WelderComponent))) + { + if (ItemToggle.IsActivated(entity.Owner)) + { + args.PushMarkup(Loc.GetString("welder-component-on-examine-welder-lit-message")); + } + else + { + args.PushMarkup(Loc.GetString("welder-component-on-examine-welder-not-lit-message")); + } + + if (args.IsInDetailsRange) + { + var (fuel, capacity) = GetWelderFuelAndCapacity(entity.Owner, entity.Comp); + + args.PushMarkup(Loc.GetString("welder-component-on-examine-detailed-message", + ("colorName", fuel < capacity / FixedPoint2.New(4f) ? "darkorange" : "orange"), + ("fuelLeft", fuel), + ("fuelCapacity", capacity), + ("status", string.Empty))); // Lit status is handled above + } + } + } + + private void OnWelderAfterInteract(Entity entity, ref AfterInteractEvent args) + { + if (args.Handled) + return; + + if (args.Target is not { Valid: true } target || !args.CanReach) + return; + + if (TryComp(target, out ReagentTankComponent? tank) + && tank.TankType == ReagentTankType.Fuel + && SolutionContainerSystem.TryGetDrainableSolution(target, out var targetSoln, out var targetSolution) + && SolutionContainerSystem.TryGetSolution(entity.Owner, entity.Comp.FuelSolutionName, out var solutionComp, out var welderSolution)) + { + var trans = FixedPoint2.Min(welderSolution.AvailableVolume, targetSolution.Volume); + if (trans > 0) + { + var drained = SolutionContainerSystem.Drain(target, targetSoln.Value, trans); + SolutionContainerSystem.TryAddSolution(solutionComp.Value, drained); + _audioSystem.PlayPredicted(entity.Comp.WelderRefill, entity, user: args.User); + _popup.PopupClient(Loc.GetString("welder-component-after-interact-refueled-message"), entity, args.User); + } + else if (welderSolution.AvailableVolume <= 0) + { + _popup.PopupClient(Loc.GetString("welder-component-already-full"), entity, args.User); + } + else + { + _popup.PopupClient(Loc.GetString("welder-component-no-fuel-in-tank", ("owner", args.Target)), entity, args.User); + } + + args.Handled = true; + } + } + + private void OnWelderToolUseAttempt(Entity entity, ref DoAfterAttemptEvent args) + { + var user = args.DoAfter.Args.User; + + if (!ItemToggle.IsActivated(entity.Owner)) + { + _popup.PopupClient(Loc.GetString("welder-component-welder-not-lit-message"), entity, user); + args.Cancel(); + return; + } + + var (fuel, _) = GetWelderFuelAndCapacity(entity); + + if (args.Event.Fuel > fuel) + { + _popup.PopupClient(Loc.GetString("welder-component-cannot-weld-message"), entity, user); + args.Cancel(); + } + } + + private void OnWelderDoAfter(Entity ent, ref ToolDoAfterEvent args) + { + if (args.Cancelled) + return; + + if (!SolutionContainerSystem.TryGetSolution(ent.Owner, ent.Comp.FuelSolutionName, out var solution)) + return; + + SolutionContainerSystem.RemoveReagent(solution.Value, ent.Comp.FuelReagent, FixedPoint2.New(args.Fuel)); + } + + private void OnToggle(Entity entity, ref ItemToggledEvent args) + { + if (args.Activated) + TurnOn(entity, args.User); + else + TurnOff(entity, args.User); + } + + private void OnActivateAttempt(Entity entity, ref ItemToggleActivateAttemptEvent args) + { + if (!SolutionContainerSystem.TryGetSolution(entity.Owner, entity.Comp.FuelSolutionName, out _, out var solution)) + { + args.Cancelled = true; + args.Popup = Loc.GetString("welder-component-no-fuel-message"); + return; + } + + var fuel = solution.GetTotalPrototypeQuantity(entity.Comp.FuelReagent); + if (fuel == FixedPoint2.Zero || fuel < entity.Comp.FuelLitCost) + { + args.Popup = Loc.GetString("welder-component-no-fuel-message"); + args.Cancelled = true; + } + } +} diff --git a/Content.Shared/Tools/Systems/SharedToolSystem.cs b/Content.Shared/Tools/Systems/SharedToolSystem.cs index ee15b1e025a..0d7972a8de6 100644 --- a/Content.Shared/Tools/Systems/SharedToolSystem.cs +++ b/Content.Shared/Tools/Systems/SharedToolSystem.cs @@ -1,8 +1,12 @@ using Content.Shared.Administration.Logs; +using Content.Shared.Chemistry.EntitySystems; using Content.Shared.DoAfter; using Content.Shared.Interaction; +using Content.Shared.Item.ItemToggle; using Content.Shared.Maps; +using Content.Shared.Popups; using Content.Shared.Tools.Components; +using JetBrains.Annotations; using Robust.Shared.Audio.Systems; using Robust.Shared.Map; using Robust.Shared.Prototypes; @@ -15,20 +19,25 @@ public abstract partial class SharedToolSystem : EntitySystem { [Dependency] private readonly IMapManager _mapManager = default!; [Dependency] private readonly IPrototypeManager _protoMan = default!; - [Dependency] protected readonly ISharedAdminLogManager AdminLogger = default!; + [Dependency] protected readonly ISharedAdminLogManager AdminLogger = default!; [Dependency] private readonly ITileDefinitionManager _tileDefManager = default!; [Dependency] private readonly SharedAudioSystem _audioSystem = default!; [Dependency] private readonly SharedDoAfterSystem _doAfterSystem = default!; [Dependency] protected readonly SharedInteractionSystem InteractionSystem = default!; + [Dependency] protected readonly SharedItemToggleSystem ItemToggle = default!; [Dependency] private readonly SharedMapSystem _maps = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] protected readonly SharedSolutionContainerSystem SolutionContainerSystem = default!; [Dependency] private readonly SharedTransformSystem _transformSystem = default!; [Dependency] private readonly TileSystem _tiles = default!; [Dependency] private readonly TurfSystem _turfs = default!; + [Dependency] protected readonly SharedSolutionContainerSystem SolutionContainer = default!; public override void Initialize() { InitializeMultipleTool(); InitializeTile(); + InitializeWelder(); SubscribeLocalEvent(OnDoAfter); } @@ -66,6 +75,7 @@ public void PlayToolSound(EntityUid uid, ToolComponent tool, EntityUid? user) /// The qualities needed for this tool to work. /// The event that will be raised when the tool has finished (including cancellation). Event /// will be directed at the tool target. + /// Amount of fuel that should be taken from the tool. /// The tool component. /// Returns true if any interaction takes place. public bool UseTool( @@ -75,6 +85,7 @@ public bool UseTool( float doAfterDelay, IEnumerable toolQualitiesNeeded, DoAfterEvent doAfterEv, + float fuel = 0, ToolComponent? toolComponent = null) { return UseTool(tool, @@ -84,6 +95,7 @@ public bool UseTool( toolQualitiesNeeded, doAfterEv, out _, + fuel, toolComponent); } @@ -101,6 +113,7 @@ public bool UseTool( /// will be directed at the tool target. /// The id of the DoAfter that was created. This may be null even if the function returns true in /// the event that this tool-use cancelled an existing DoAfter + /// Amount of fuel that should be taken from the tool. /// The tool component. /// Returns true if any interaction takes place. public bool UseTool( @@ -111,31 +124,30 @@ public bool UseTool( IEnumerable toolQualitiesNeeded, DoAfterEvent doAfterEv, out DoAfterId? id, + float fuel = 0, ToolComponent? toolComponent = null) { id = null; if (!Resolve(tool, ref toolComponent, false)) return false; - if (!CanStartToolUse(tool, user, target, toolQualitiesNeeded, toolComponent)) + if (!CanStartToolUse(tool, user, target, fuel, toolQualitiesNeeded, toolComponent)) return false; - var toolEvent = new ToolDoAfterEvent(doAfterEv, GetNetEntity(target)); + var toolEvent = new ToolDoAfterEvent(fuel, doAfterEv, GetNetEntity(target)); var doAfterArgs = new DoAfterArgs(EntityManager, user, delay / toolComponent.SpeedModifier, toolEvent, tool, target: target, used: tool) { BreakOnDamage = true, BreakOnTargetMove = true, BreakOnUserMove = true, NeedHand = tool != user, - AttemptFrequency = IsWelder(tool) ? AttemptFrequency.EveryTick : AttemptFrequency.Never + AttemptFrequency = fuel > 0 ? AttemptFrequency.EveryTick : AttemptFrequency.Never }; _doAfterSystem.TryStartDoAfter(doAfterArgs, out id); return true; } - protected abstract bool IsWelder(EntityUid uid); - /// /// Attempts to use a tool on some entity, which will start a DoAfter. Returns true if an interaction occurred. /// Note that this does not mean the interaction was successful, you need to listen for the DoAfter event. @@ -148,6 +160,7 @@ public bool UseTool( /// The quality needed for this tool to work. /// The event that will be raised when the tool has finished (including cancellation). Event /// will be directed at the tool target. + /// Amount of fuel that should be taken from the tool. /// The tool component. /// Returns true if any interaction takes place. public bool UseTool( @@ -157,6 +170,7 @@ public bool UseTool( float doAfterDelay, string toolQualityNeeded, DoAfterEvent doAfterEv, + float fuel = 0, ToolComponent? toolComponent = null) { return UseTool(tool, @@ -166,6 +180,7 @@ public bool UseTool( new[] { toolQualityNeeded }, doAfterEv, out _, + fuel, toolComponent); } @@ -180,12 +195,13 @@ public bool HasQuality(EntityUid uid, string quality, ToolComponent? tool = null /// /// Whether a tool entity has all specified qualities or not. /// + [PublicAPI] public bool HasAllQualities(EntityUid uid, IEnumerable qualities, ToolComponent? tool = null) { return Resolve(uid, ref tool, false) && tool.Qualities.ContainsAll(qualities); } - private bool CanStartToolUse(EntityUid tool, EntityUid user, EntityUid? target, IEnumerable toolQualitiesNeeded, ToolComponent? toolComponent = null) + private bool CanStartToolUse(EntityUid tool, EntityUid user, EntityUid? target, float fuel, IEnumerable toolQualitiesNeeded, ToolComponent? toolComponent = null) { if (!Resolve(tool, ref toolComponent)) return false; @@ -220,6 +236,9 @@ private bool CanStartToolUse(EntityUid tool, EntityUid user, EntityUid? target, [Serializable, NetSerializable] protected sealed partial class ToolDoAfterEvent : DoAfterEvent { + [DataField] + public float Fuel; + /// /// Entity that the wrapped do after event will get directed at. If null, event will be broadcast. /// @@ -233,10 +252,11 @@ private ToolDoAfterEvent() { } - public ToolDoAfterEvent(DoAfterEvent wrappedEvent, NetEntity? originalTarget) + public ToolDoAfterEvent(float fuel, DoAfterEvent wrappedEvent, NetEntity? originalTarget) { DebugTools.Assert(wrappedEvent.GetType().HasCustomAttribute(), "Tool event is not serializable"); + Fuel = fuel; WrappedEvent = wrappedEvent; OriginalTarget = originalTarget; } @@ -249,14 +269,14 @@ public override DoAfterEvent Clone() if (evClone == WrappedEvent) return this; - return new ToolDoAfterEvent(evClone, OriginalTarget); + return new ToolDoAfterEvent(Fuel, evClone, OriginalTarget); } } [Serializable, NetSerializable] protected sealed partial class LatticeCuttingCompleteEvent : DoAfterEvent { - [DataField("coordinates", required:true)] + [DataField(required:true)] public NetCoordinates Coordinates; private LatticeCuttingCompleteEvent() @@ -273,9 +293,7 @@ public LatticeCuttingCompleteEvent(NetCoordinates coordinates) } [Serializable, NetSerializable] -public sealed partial class CableCuttingFinishedEvent : SimpleDoAfterEvent -{ -} +public sealed partial class CableCuttingFinishedEvent : SimpleDoAfterEvent; #endregion diff --git a/Content.Shared/Tools/Systems/WeldableSystem.cs b/Content.Shared/Tools/Systems/WeldableSystem.cs index b0ea68f713f..c6c47d539e0 100644 --- a/Content.Shared/Tools/Systems/WeldableSystem.cs +++ b/Content.Shared/Tools/Systems/WeldableSystem.cs @@ -69,7 +69,7 @@ private bool TryWeld(EntityUid uid, EntityUid tool, EntityUid user, WeldableComp if (!CanWeld(uid, tool, user, component)) return false; - if (!_toolSystem.UseTool(tool, user, uid, component.WeldingTime.Seconds, component.WeldingQuality, new WeldFinishedEvent())) + if (!_toolSystem.UseTool(tool, user, uid, component.Time.Seconds, component.WeldingQuality, new WeldFinishedEvent(), component.Fuel)) return false; // Log attempt @@ -140,10 +140,10 @@ public void SetWeldingTime(EntityUid uid, TimeSpan time, WeldableComponent? comp if (!_query.Resolve(uid, ref component)) return; - if (component.WeldingTime.Equals(time)) + if (component.Time.Equals(time)) return; - component.WeldingTime = time; + component.Time = time; Dirty(uid, component); } } diff --git a/Content.Shared/Traits/Assorted/Components/CyberEyesComponent.cs b/Content.Shared/Traits/Assorted/Components/CyberEyesComponent.cs new file mode 100644 index 00000000000..7009077e9cc --- /dev/null +++ b/Content.Shared/Traits/Assorted/Components/CyberEyesComponent.cs @@ -0,0 +1,11 @@ +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/PermanentBlindnessComponent.cs b/Content.Shared/Traits/Assorted/Components/PermanentBlindnessComponent.cs index c1bf7e1639e..c10b05ae02e 100644 --- a/Content.Shared/Traits/Assorted/Components/PermanentBlindnessComponent.cs +++ b/Content.Shared/Traits/Assorted/Components/PermanentBlindnessComponent.cs @@ -8,5 +8,7 @@ namespace Content.Shared.Traits.Assorted.Components; [RegisterComponent, NetworkedComponent] public sealed partial class PermanentBlindnessComponent : Component { + [ViewVariables(VVAccess.ReadWrite), DataField] + public int Blindness = 0; // How damaged should their eyes be. Set 0 for maximum damage. } diff --git a/Content.Shared/Traits/Assorted/Components/SelfAwareComponent.cs b/Content.Shared/Traits/Assorted/Components/SelfAwareComponent.cs new file mode 100644 index 00000000000..fa2485ac488 --- /dev/null +++ b/Content.Shared/Traits/Assorted/Components/SelfAwareComponent.cs @@ -0,0 +1,32 @@ +using Content.Shared.Damage.Prototypes; +using Content.Shared.FixedPoint; +using Robust.Shared.GameStates; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Set; + +namespace Content.Shared.Traits.Assorted.Components; + +/// +/// This is used for the Self-Aware trait to enhance the information received from HealthExaminableSystem. +/// +[RegisterComponent, NetworkedComponent] +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))] + 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))] + public HashSet DetectableGroups = default!; + + // + // The thresholds for determining the examine text of DetectableGroups for certain amounts of damage. + // These are calculated as a percentage of the entity's critical threshold. + // + public List Thresholds = new() + { FixedPoint2.New(0.10), FixedPoint2.New(0.25), FixedPoint2.New(0.40), FixedPoint2.New(0.60) }; +} diff --git a/Content.Shared/Traits/Assorted/Components/SingerComponent.cs b/Content.Shared/Traits/Assorted/Components/SingerComponent.cs index 9c79166ef6c..9e737c04ace 100644 --- a/Content.Shared/Traits/Assorted/Components/SingerComponent.cs +++ b/Content.Shared/Traits/Assorted/Components/SingerComponent.cs @@ -9,7 +9,10 @@ public sealed partial class SingerComponent : Component { // Traits are server-only, and is this is added via traits, it must be replicated to the client. [DataField(required: true), AutoNetworkedField] - public ProtoId Proto = string.Empty; + public ProtoId? Proto; + + [DataField(serverOnly: true)] + public EntProtoId? MidiActionId = "ActionHarpyPlayMidi"; [DataField(serverOnly: true)] public EntityUid? MidiAction; diff --git a/Content.Shared/Traits/Assorted/Prototypes/SingerInstrumentPrototype.cs b/Content.Shared/Traits/Assorted/Prototypes/SingerInstrumentPrototype.cs index 6a49854f6ea..e1fa696d79b 100644 --- a/Content.Shared/Traits/Assorted/Prototypes/SingerInstrumentPrototype.cs +++ b/Content.Shared/Traits/Assorted/Prototypes/SingerInstrumentPrototype.cs @@ -1,9 +1,10 @@ +using Content.Shared.Instruments; using Robust.Shared.Prototypes; namespace Content.Shared.Traits.Assorted.Prototypes; [Prototype("SingerInstrument")] -public sealed class SingerInstrumentPrototype : IPrototype +public sealed partial class SingerInstrumentPrototype : IPrototype { [IdDataField] public string ID { get; private set; } = default!; @@ -27,7 +28,7 @@ public sealed class SingerInstrumentPrototype : IPrototype /// The BUI configuration for the instrument. /// [DataField] - public PrototypeData? MidiUi; + public InstrumentUiKey? MidiUi; // The below is server only, as it uses a server-BUI event !type [DataField(serverOnly: true, required: true)] diff --git a/Content.Shared/Traits/Assorted/Systems/CyberEyesSystem.cs b/Content.Shared/Traits/Assorted/Systems/CyberEyesSystem.cs new file mode 100644 index 00000000000..2dde4379720 --- /dev/null +++ b/Content.Shared/Traits/Assorted/Systems/CyberEyesSystem.cs @@ -0,0 +1,21 @@ +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/PermanentBlindnessSystem.cs b/Content.Shared/Traits/Assorted/Systems/PermanentBlindnessSystem.cs index 113939f66b7..21faf7d50bc 100644 --- a/Content.Shared/Traits/Assorted/Systems/PermanentBlindnessSystem.cs +++ b/Content.Shared/Traits/Assorted/Systems/PermanentBlindnessSystem.cs @@ -2,6 +2,7 @@ using Content.Shared.Eye.Blinding.Components; using Content.Shared.Eye.Blinding.Systems; using Content.Shared.IdentityManagement; +using Content.Shared.Traits.Assorted.Components; using Robust.Shared.Network; namespace Content.Shared.Traits.Assorted.Systems; @@ -18,15 +19,14 @@ public sealed class PermanentBlindnessSystem : EntitySystem /// public override void Initialize() { - SubscribeLocalEvent(OnStartup); - SubscribeLocalEvent(OnShutdown); - SubscribeLocalEvent(OnDamageChanged); - SubscribeLocalEvent(OnExamined); + SubscribeLocalEvent(OnMapInit); + SubscribeLocalEvent(OnShutdown); + SubscribeLocalEvent(OnExamined); } private void OnExamined(Entity blindness, ref ExaminedEvent args) { - if (args.IsInDetailsRange && !_net.IsClient) + if (args.IsInDetailsRange && !_net.IsClient && blindness.Comp.Blindness == 0) { args.PushMarkup(Loc.GetString("trait-examined-Blindness", ("target", Identity.Entity(blindness, EntityManager)))); } @@ -37,28 +37,17 @@ private void OnShutdown(Entity blindness _blinding.UpdateIsBlind(blindness.Owner); } - private void OnStartup(Entity blindness, ref ComponentStartup args) + private void OnMapInit(Entity blindness, ref MapInitEvent args) { if (!_entityManager.TryGetComponent(blindness, out var blindable)) return; - var damageToDeal = (int) BlurryVisionComponent.MaxMagnitude - blindable.EyeDamage; - - if (damageToDeal <= 0) - return; - - _blinding.AdjustEyeDamage(blindness.Owner, damageToDeal); - } - - private void OnDamageChanged(Entity blindness, ref EyeDamageChangedEvent args) - { - if (args.Damage >= BlurryVisionComponent.MaxMagnitude) - return; - - if (!_entityManager.TryGetComponent(blindness, out var blindable)) - return; - - var damageRestoration = (int) BlurryVisionComponent.MaxMagnitude - args.Damage; - _blinding.AdjustEyeDamage(blindness.Owner, damageRestoration); + if (blindness.Comp.Blindness != 0) + _blinding.SetMinDamage(new Entity(blindness.Owner, blindable), blindness.Comp.Blindness); + else + { + var maxMagnitudeInt = (int) BlurryVisionComponent.MaxMagnitude; + _blinding.SetMinDamage(new Entity(blindness.Owner, blindable), maxMagnitudeInt); + } } } diff --git a/Content.Shared/Traits/Assorted/Systems/SharedSingerSystem.cs b/Content.Shared/Traits/Assorted/Systems/SharedSingerSystem.cs index 08d0f5c76d0..13270ae45d2 100644 --- a/Content.Shared/Traits/Assorted/Systems/SharedSingerSystem.cs +++ b/Content.Shared/Traits/Assorted/Systems/SharedSingerSystem.cs @@ -4,6 +4,7 @@ using Content.Shared.Traits.Assorted.Components; using Content.Shared.Traits.Assorted.Prototypes; using Content.Shared.Zombies; +using Robust.Shared.Player; using Robust.Shared.Prototypes; namespace Content.Shared.Traits.Assorted.Systems; @@ -15,7 +16,6 @@ public abstract class SharedSingerSystem : EntitySystem [Dependency] private readonly SharedActionsSystem _actionsSystem = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly SharedInstrumentSystem _instrument = default!; - [Dependency] private readonly SharedUserInterfaceSystem _ui = default!; public override void Initialize() { @@ -26,6 +26,7 @@ public override void Initialize() SubscribeLocalEvent(OnShutdown); SubscribeLocalEvent(OnBoundUIClosed); SubscribeLocalEvent(OnBoundUIOpened); + SubscribeLocalEvent(OnPlayerDetached); } private void OnStartup(Entity ent, ref ComponentStartup args) @@ -33,15 +34,12 @@ private void OnStartup(Entity ent, ref ComponentStartup args) if (!ProtoMan.TryIndex(ent.Comp.Proto, out var singer)) return; - _actionsSystem.AddAction(ent, ref ent.Comp.MidiAction, singer.MidiActionId); + _actionsSystem.AddAction(ent, ref ent.Comp.MidiAction, ent.Comp.MidiActionId); var instrumentComp = EnsureInstrumentComp(ent); var defaultData = singer.InstrumentList[singer.DefaultInstrument]; _instrument.SetInstrumentProgram(instrumentComp, defaultData.Item1, defaultData.Item2); SetUpSwappableInstrument(ent, singer); - - if (singer.MidiUi is {} uiData && !_ui.TryGetUi(ent, uiData.UiKey, out _)) - _ui.AddUi(ent.Owner, uiData); } private void OnShutdown(Entity ent, ref ComponentShutdown args) @@ -72,6 +70,11 @@ private void OnBoundUIOpened(EntityUid uid, SingerComponent component, BoundUIOp _appearance.SetData(uid, HarpyVisualLayers.Singing, SingingVisualLayer.True, appearance); } + private void OnPlayerDetached(EntityUid uid, SingerComponent component, PlayerDetachedEvent args) + { + CloseMidiUi(uid); + } + /// /// Closes the MIDI UI if it is open. Does nothing on client side. /// diff --git a/Content.Shared/Traits/Prototypes/TraitPrototype.cs b/Content.Shared/Traits/Prototypes/TraitPrototype.cs index cd4b02a1e63..8ee3c55637d 100644 --- a/Content.Shared/Traits/Prototypes/TraitPrototype.cs +++ b/Content.Shared/Traits/Prototypes/TraitPrototype.cs @@ -1,8 +1,7 @@ using Content.Shared.Customization.Systems; -using Content.Shared.Mood; -using Content.Shared.Psionics; using Robust.Shared.Prototypes; -using Robust.Shared.Utility; +using Robust.Shared.Serialization.Manager; +using Robust.Shared.Serialization; namespace Content.Shared.Traits; @@ -33,34 +32,17 @@ public sealed partial class TraitPrototype : IPrototype [DataField] public List Requirements = new(); - /// - /// The components that get added to the player when they pick this trait. - /// - [DataField] - public ComponentRegistry? Components { get; private set; } = default!; - - /// - /// The components that will be removed from a player when they pick this trait. - /// Primarily used to remove species innate traits. - /// - [DataField] - public List? ComponentRemovals { get; private set; } = default!; - - /// - /// The list of each Action that this trait adds in the form of ActionId and ActionEntity - /// - [DataField] - public List? Actions { get; private set; } = default!; - - /// - /// The list of all Psionic Powers that this trait adds. If this list is not empty, the trait will also Ensure that a player is Psionic. - /// - [DataField] - public List? PsionicPowers { get; private set; } = default!; + [DataField(serverOnly: true)] + public TraitFunction[] Functions { get; private set; } = Array.Empty(); +} - /// - /// The list of all Moodlets that this trait adds. - /// - [DataField] - public List>? MoodEffects { get; private set; } = default!; +/// This serves as a hook for trait functions to modify a player character upon spawning in. +[ImplicitDataDefinitionForInheritors] +public abstract partial class TraitFunction +{ + public abstract void OnPlayerSpawn( + EntityUid mob, + IComponentFactory factory, + IEntityManager entityManager, + ISerializationManager serializationManager); } diff --git a/Content.Shared/UserInterface/ActivatableUIComponent.cs b/Content.Shared/UserInterface/ActivatableUIComponent.cs new file mode 100644 index 00000000000..93f05acac05 --- /dev/null +++ b/Content.Shared/UserInterface/ActivatableUIComponent.cs @@ -0,0 +1,77 @@ +using Content.Shared.Whitelist; +using Robust.Shared.GameStates; +using Robust.Shared.Serialization.TypeSerializers.Implementations; + +namespace Content.Shared.UserInterface +{ + [RegisterComponent, NetworkedComponent, AutoGenerateComponentState] + public sealed partial class ActivatableUIComponent : Component + { + [DataField(required: true, customTypeSerializer: typeof(EnumSerializer))] + public Enum? Key; + + /// + /// Whether the item must be held in one of the user's hands to work. + /// This is ignored unless is true. + /// + [ViewVariables(VVAccess.ReadWrite)] + [DataField] + public bool InHandsOnly; + + [DataField] + public bool SingleUser; + + [ViewVariables(VVAccess.ReadWrite)] + [DataField] + public bool AdminOnly; + + [DataField] + public LocId VerbText = "ui-verb-toggle-open"; + + /// + /// Whether you need a hand to operate this UI. The hand does not need to be free, you just need to have one. + /// + /// + /// This should probably be true for most machines & computers, but there will still be UIs that represent a + /// more generic interaction / configuration that might not require hands. + /// + [ViewVariables(VVAccess.ReadWrite)] + [DataField] + public bool RequireHands = true; + + /// + /// Entities that are required to open this UI. + /// + [DataField, ViewVariables(VVAccess.ReadWrite)] + public EntityWhitelist? RequiredItems; + + /// + /// If true, then this UI can only be opened via verbs. I.e., normal interactions/activations will not open + /// the UI. + /// + [DataField, ViewVariables(VVAccess.ReadWrite)] + public bool VerbOnly; + + /// + /// Whether spectators (non-admin ghosts) should be allowed to view this UI. + /// + [ViewVariables(VVAccess.ReadWrite)] + [DataField] + public bool BlockSpectators; + + /// + /// Whether the item must be in the user's currently selected/active hand. + /// This is ignored unless is true. + /// + [ViewVariables(VVAccess.ReadWrite)] + [DataField] + public bool RequireActiveHand = true; + + /// + /// The client channel currently using the object, or null if there's none/not single user. + /// NOTE: DO NOT DIRECTLY SET, USE ActivatableUISystem.SetCurrentSingleUser + /// + [DataField, AutoNetworkedField] + public EntityUid? CurrentSingleUser; + } +} diff --git a/Content.Shared/UserInterface/ActivatableUIEvents.cs b/Content.Shared/UserInterface/ActivatableUIEvents.cs index 6e6b3f63c62..338673a3ca6 100644 --- a/Content.Shared/UserInterface/ActivatableUIEvents.cs +++ b/Content.Shared/UserInterface/ActivatableUIEvents.cs @@ -24,12 +24,12 @@ public UserOpenActivatableUIAttemptEvent(EntityUid who, EntityUid target) public sealed class AfterActivatableUIOpenEvent : EntityEventArgs { public EntityUid User { get; } - public readonly ICommonSession Session; + public readonly EntityUid Actor; - public AfterActivatableUIOpenEvent(EntityUid who, ICommonSession session) + public AfterActivatableUIOpenEvent(EntityUid who, EntityUid actor) { User = who; - Session = session; + Actor = actor; } } diff --git a/Content.Shared/UserInterface/ActivatableUIRequiresPowerCellComponent.cs b/Content.Shared/UserInterface/ActivatableUIRequiresPowerCellComponent.cs new file mode 100644 index 00000000000..aa9e561e076 --- /dev/null +++ b/Content.Shared/UserInterface/ActivatableUIRequiresPowerCellComponent.cs @@ -0,0 +1,13 @@ +using Content.Shared.PowerCell; +using Robust.Shared.GameStates; + +namespace Content.Shared.UserInterface; + +/// +/// Specifies that the attached entity requires power. +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class ActivatableUIRequiresPowerCellComponent : Component +{ + +} diff --git a/Content.Shared/UserInterface/ActivatableUISystem.Power.cs b/Content.Shared/UserInterface/ActivatableUISystem.Power.cs new file mode 100644 index 00000000000..b8a815c7a81 --- /dev/null +++ b/Content.Shared/UserInterface/ActivatableUISystem.Power.cs @@ -0,0 +1,93 @@ +using Content.Shared.PowerCell; +using Robust.Shared.Containers; + +namespace Content.Shared.UserInterface; + +public sealed partial class ActivatableUISystem +{ + [Dependency] private readonly SharedPowerCellSystem _cell = default!; + + private void InitializePower() + { + SubscribeLocalEvent(OnBatteryOpenAttempt); + SubscribeLocalEvent(OnBatteryOpened); + SubscribeLocalEvent(OnBatteryClosed); + + SubscribeLocalEvent(OnPowerCellRemoved); + } + + private void OnPowerCellRemoved(EntityUid uid, PowerCellDrawComponent component, EntRemovedFromContainerMessage args) + { + _cell.SetPowerCellDrawEnabled(uid, false); + + if (!HasComp(uid) || + !TryComp(uid, out ActivatableUIComponent? activatable)) + { + return; + } + + if (activatable.Key == null) + { + Log.Error($"Encountered null key in activatable ui on entity {ToPrettyString(uid)}"); + return; + } + + _uiSystem.CloseUi(uid, activatable.Key); + } + + private void OnBatteryOpened(EntityUid uid, ActivatableUIRequiresPowerCellComponent component, BoundUIOpenedEvent args) + { + var activatable = Comp(uid); + + if (!args.UiKey.Equals(activatable.Key)) + return; + + _cell.SetPowerCellDrawEnabled(uid, true); + } + + private void OnBatteryClosed(EntityUid uid, ActivatableUIRequiresPowerCellComponent component, BoundUIClosedEvent args) + { + var activatable = Comp(uid); + + if (!args.UiKey.Equals(activatable.Key)) + return; + + // Stop drawing power if this was the last person with the UI open. + if (!_uiSystem.IsUiOpen(uid, activatable.Key)) + _cell.SetPowerCellDrawEnabled(uid, false); + } + + /// + /// Call if you want to check if the UI should close due to a recent battery usage. + /// + public void CheckUsage(EntityUid uid, ActivatableUIComponent? active = null, ActivatableUIRequiresPowerCellComponent? component = null, PowerCellDrawComponent? draw = null) + { + if (!Resolve(uid, ref component, ref draw, ref active, false)) + return; + + if (active.Key == null) + { + Log.Error($"Encountered null key in activatable ui on entity {ToPrettyString(uid)}"); + return; + } + + if (_cell.HasActivatableCharge(uid)) + return; + + _uiSystem.CloseUi(uid, active.Key); + } + + private void OnBatteryOpenAttempt(EntityUid uid, ActivatableUIRequiresPowerCellComponent component, ActivatableUIOpenAttemptEvent args) + { + if (!TryComp(uid, out var draw)) + return; + + // Check if we have the appropriate drawrate / userate to even open it. + if (args.Cancelled || + !_cell.HasActivatableCharge(uid, draw, user: args.User) || + !_cell.HasDrawCharge(uid, draw, user: args.User)) + { + args.Cancel(); + } + } +} diff --git a/Content.Shared/UserInterface/ActivatableUISystem.cs b/Content.Shared/UserInterface/ActivatableUISystem.cs new file mode 100644 index 00000000000..14ce4f20dce --- /dev/null +++ b/Content.Shared/UserInterface/ActivatableUISystem.cs @@ -0,0 +1,284 @@ +using Content.Shared.ActionBlocker; +using Content.Shared.Administration.Managers; +using Content.Shared.Ghost; +using Content.Shared.Hands; +using Content.Shared.Hands.Components; +using Content.Shared.Hands.EntitySystems; +using Content.Shared.Interaction; +using Content.Shared.Interaction.Events; +using Content.Shared.Popups; +using Content.Shared.Verbs; +using Robust.Shared.Utility; + +namespace Content.Shared.UserInterface; + +public sealed partial class ActivatableUISystem : EntitySystem +{ + [Dependency] private readonly ISharedAdminManager _adminManager = default!; + [Dependency] private readonly ActionBlockerSystem _blockerSystem = default!; + [Dependency] private readonly SharedUserInterfaceSystem _uiSystem = default!; + [Dependency] private readonly SharedPopupSystem _popupSystem = default!; + [Dependency] private readonly SharedHandsSystem _hands = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnStartup); + SubscribeLocalEvent(OnUseInHand); + SubscribeLocalEvent(OnActivate); + SubscribeLocalEvent(OnInteractUsing); + SubscribeLocalEvent(OnHandDeselected); + SubscribeLocalEvent(OnHandUnequipped); + SubscribeLocalEvent(OnUIClose); + SubscribeLocalEvent>(GetActivationVerb); + SubscribeLocalEvent>(GetVerb); + + SubscribeLocalEvent(OnActionPerform); + + InitializePower(); + } + + private void OnStartup(Entity ent, ref ComponentStartup args) + { + if (ent.Comp.Key == null) + { + Log.Error($"Missing UI Key for entity: {ToPrettyString(ent)}"); + return; + } + + // TODO BUI + // set interaction range to zero to avoid constant range checks. + // + // if (ent.Comp.InHandsOnly && _uiSystem.TryGetInterfaceData(ent.Owner, ent.Comp.Key, out var data)) + // data.InteractionRange = 0; + } + + private void OnActionPerform(EntityUid uid, UserInterfaceComponent component, OpenUiActionEvent args) + { + if (args.Handled || args.Key == null) + return; + + args.Handled = _uiSystem.TryToggleUi(uid, args.Key, args.Performer); + } + + + private void GetActivationVerb(EntityUid uid, ActivatableUIComponent component, GetVerbsEvent args) + { + if (component.VerbOnly || !ShouldAddVerb(uid, component, args)) + return; + + args.Verbs.Add(new ActivationVerb + { + Act = () => InteractUI(args.User, uid, component), + Text = Loc.GetString(component.VerbText), + // TODO VERB ICON find a better icon + Icon = new SpriteSpecifier.Texture(new ResPath("/Textures/Interface/VerbIcons/settings.svg.192dpi.png")), + }); + } + + private void GetVerb(EntityUid uid, ActivatableUIComponent component, GetVerbsEvent args) + { + if (!component.VerbOnly || !ShouldAddVerb(uid, component, args)) + return; + + args.Verbs.Add(new Verb + { + Act = () => InteractUI(args.User, uid, component), + Text = Loc.GetString(component.VerbText), + // TODO VERB ICON find a better icon + Icon = new SpriteSpecifier.Texture(new ResPath("/Textures/Interface/VerbIcons/settings.svg.192dpi.png")), + }); + } + + private bool ShouldAddVerb(EntityUid uid, ActivatableUIComponent component, GetVerbsEvent args) where T : Verb + { + if (!args.CanAccess) + return false; + + if (!component.RequiredItems?.IsValid(args.Using ?? default, EntityManager) ?? false) + return false; + + if (component.RequireHands) + { + if (args.Hands == null) + return false; + + if (component.InHandsOnly) + { + if (!_hands.IsHolding(args.User, uid, out var hand, args.Hands)) + return false; + + if (component.RequireActiveHand && args.Hands.ActiveHand != hand) + return false; + } + } + + return args.CanInteract || HasComp(args.User) && !component.BlockSpectators; + } + + private void OnUseInHand(EntityUid uid, ActivatableUIComponent component, UseInHandEvent args) + { + if (args.Handled) + return; + + if (component.VerbOnly) + return; + + if (component.RequiredItems != null) + return; + + args.Handled = InteractUI(args.User, uid, component); + } + + private void OnActivate(EntityUid uid, ActivatableUIComponent component, ActivateInWorldEvent args) + { + if (args.Handled) + return; + + if (component.VerbOnly) + return; + + if (component.RequiredItems != null) + return; + + args.Handled = InteractUI(args.User, uid, component); + } + + private void OnInteractUsing(EntityUid uid, ActivatableUIComponent component, InteractUsingEvent args) + { + if (args.Handled) + return; + + if (component.VerbOnly) + return; + + if (component.RequiredItems == null) + return; + + if (!component.RequiredItems.IsValid(args.Used, EntityManager)) + return; + + args.Handled = InteractUI(args.User, uid, component); + } + + private void OnUIClose(EntityUid uid, ActivatableUIComponent component, BoundUIClosedEvent args) + { + var user = args.Actor; + + if (user != component.CurrentSingleUser) + return; + + if (!Equals(args.UiKey, component.Key)) + return; + + SetCurrentSingleUser(uid, null, component); + } + + private bool InteractUI(EntityUid user, EntityUid uiEntity, ActivatableUIComponent aui) + { + if (aui.Key == null || !_uiSystem.HasUi(uiEntity, aui.Key)) + return false; + + if (_uiSystem.IsUiOpen(uiEntity, aui.Key, user)) + { + _uiSystem.CloseUi(uiEntity, aui.Key, user); + return true; + } + + if (!_blockerSystem.CanInteract(user, uiEntity) && (!HasComp(user) || aui.BlockSpectators)) + return false; + + if (aui.RequireHands) + { + if (!TryComp(user, out HandsComponent? hands)) + return false; + + if (aui.InHandsOnly) + { + if (!_hands.IsHolding(user, uiEntity, out var hand, hands)) + return false; + + if (aui.RequireActiveHand && hands.ActiveHand != hand) + return false; + } + } + + if (aui.AdminOnly && !_adminManager.IsAdmin(user)) + return false; + + if (aui.SingleUser && aui.CurrentSingleUser != null && user != aui.CurrentSingleUser) + { + var message = Loc.GetString("machine-already-in-use", ("machine", uiEntity)); + _popupSystem.PopupEntity(message, uiEntity, user); + + if (_uiSystem.IsUiOpen(uiEntity, aui.Key)) + return true; + + Log.Error($"Activatable UI has user without being opened? Entity: {ToPrettyString(uiEntity)}. User: {aui.CurrentSingleUser}, Key: {aui.Key}"); + } + + // If we've gotten this far, fire a cancellable event that indicates someone is about to activate this. + // This is so that stuff can require further conditions (like power). + var oae = new ActivatableUIOpenAttemptEvent(user); + var uae = new UserOpenActivatableUIAttemptEvent(user, uiEntity); + RaiseLocalEvent(user, uae); + RaiseLocalEvent(uiEntity, oae); + if (oae.Cancelled || uae.Cancelled) + return false; + + // Give the UI an opportunity to prepare itself if it needs to do anything + // before opening + var bae = new BeforeActivatableUIOpenEvent(user); + RaiseLocalEvent(uiEntity, bae); + + SetCurrentSingleUser(uiEntity, user, aui); + _uiSystem.OpenUi(uiEntity, aui.Key, user); + + //Let the component know a user opened it so it can do whatever it needs to do + var aae = new AfterActivatableUIOpenEvent(user, user); + RaiseLocalEvent(uiEntity, aae); + + return true; + } + + public void SetCurrentSingleUser(EntityUid uid, EntityUid? user, ActivatableUIComponent? aui = null) + { + if (!Resolve(uid, ref aui)) + return; + + if (!aui.SingleUser) + return; + + aui.CurrentSingleUser = user; + Dirty(uid, aui); + + RaiseLocalEvent(uid, new ActivatableUIPlayerChangedEvent()); + } + + public void CloseAll(EntityUid uid, ActivatableUIComponent? aui = null) + { + if (!Resolve(uid, ref aui, false)) + return; + + if (aui.Key == null) + { + Log.Error($"Encountered null key in activatable ui on entity {ToPrettyString(uid)}"); + return; + } + + _uiSystem.CloseUi(uid, aui.Key); + } + + private void OnHandDeselected(Entity ent, ref HandDeselectedEvent args) + { + if (ent.Comp.RequireHands && ent.Comp.InHandsOnly && ent.Comp.RequireActiveHand) + CloseAll(ent, ent); + } + + private void OnHandUnequipped(Entity ent, ref GotUnequippedHandEvent args) + { + if (ent.Comp.RequireHands && ent.Comp.InHandsOnly) + CloseAll(ent, ent); + } +} diff --git a/Content.Shared/Verbs/SharedVerbSystem.cs b/Content.Shared/Verbs/SharedVerbSystem.cs index 9dda910f3ff..e78fe98f4c3 100644 --- a/Content.Shared/Verbs/SharedVerbSystem.cs +++ b/Content.Shared/Verbs/SharedVerbSystem.cs @@ -55,28 +55,24 @@ public SortedSet GetLocalVerbs(EntityUid target, EntityUid user, Type type return GetLocalVerbs(target, user, new List() { type }, force); } + /// + public SortedSet GetLocalVerbs(EntityUid target, EntityUid user, List types, bool force = false) + { + return GetLocalVerbs(target, user, types, out _, force); + } + /// /// Raises a number of events in order to get all verbs of the given type(s) defined in local systems. This /// does not request verbs from the server. /// - public SortedSet GetLocalVerbs(EntityUid target, EntityUid user, List types, bool force = false) + public SortedSet GetLocalVerbs(EntityUid target, EntityUid user, List types, + out List extraCategories, bool force = false) { SortedSet verbs = new(); + extraCategories = new(); // accessibility checks - bool canAccess = false; - if (force || target == user) - canAccess = true; - else if (_interactionSystem.InRangeUnobstructed(user, target)) - { - // Note that being in a container does not count as an obstruction for InRangeUnobstructed - // Therefore, we need extra checks to ensure the item is actually accessible: - if (ContainerSystem.IsInSameOrParentContainer(user, target)) - canAccess = true; - else - // the item might be in a backpack that the user has open - canAccess = _interactionSystem.CanAccessViaStorage(user, target); - } + var canAccess = force || _interactionSystem.InRangeAndAccessible(user, target); // A large number of verbs need to check action blockers. Instead of repeatedly having each system individually // call ActionBlocker checks, just cache it for the verb request. @@ -108,7 +104,7 @@ public SortedSet GetLocalVerbs(EntityUid target, EntityUid user, List(user, target, @using, hands, canInteract, canAccess); + var verbEvent = new GetVerbsEvent(user, target, @using, hands, canInteract, canAccess, extraCategories); RaiseLocalEvent(target, verbEvent, true); verbs.UnionWith(verbEvent.Verbs); } @@ -117,35 +113,35 @@ public SortedSet GetLocalVerbs(EntityUid target, EntityUid user, List(user, target, @using, hands, canInteract, canAccess); + var verbEvent = new GetVerbsEvent(user, target, @using, hands, canInteract, canAccess, extraCategories); RaiseLocalEvent(@using.Value, verbEvent, true); // directed at used, not at target verbs.UnionWith(verbEvent.Verbs); } if (types.Contains(typeof(InnateVerb))) { - var verbEvent = new GetVerbsEvent(user, target, @using, hands, canInteract, canAccess); + var verbEvent = new GetVerbsEvent(user, target, @using, hands, canInteract, canAccess, extraCategories); RaiseLocalEvent(user, verbEvent, true); verbs.UnionWith(verbEvent.Verbs); } if (types.Contains(typeof(AlternativeVerb))) { - var verbEvent = new GetVerbsEvent(user, target, @using, hands, canInteract, canAccess); + var verbEvent = new GetVerbsEvent(user, target, @using, hands, canInteract, canAccess, extraCategories); RaiseLocalEvent(target, verbEvent, true); verbs.UnionWith(verbEvent.Verbs); } if (types.Contains(typeof(ActivationVerb))) { - var verbEvent = new GetVerbsEvent(user, target, @using, hands, canInteract, canAccess); + var verbEvent = new GetVerbsEvent(user, target, @using, hands, canInteract, canAccess, extraCategories); RaiseLocalEvent(target, verbEvent, true); verbs.UnionWith(verbEvent.Verbs); } if (types.Contains(typeof(ExamineVerb))) { - var verbEvent = new GetVerbsEvent(user, target, @using, hands, canInteract, canAccess); + var verbEvent = new GetVerbsEvent(user, target, @using, hands, canInteract, canAccess, extraCategories); RaiseLocalEvent(target, verbEvent, true); verbs.UnionWith(verbEvent.Verbs); } @@ -153,7 +149,7 @@ public SortedSet GetLocalVerbs(EntityUid target, EntityUid user, List(user, target, @using, hands, canInteract, canAccess); + var verbEvent = new GetVerbsEvent(user, target, @using, hands, canInteract, canAccess, extraCategories); RaiseLocalEvent(target, verbEvent, true); verbs.UnionWith(verbEvent.Verbs); } @@ -161,7 +157,7 @@ public SortedSet GetLocalVerbs(EntityUid target, EntityUid user, List(user, target, @using, hands, canInteract, access); + var verbEvent = new GetVerbsEvent(user, target, @using, hands, canInteract, access, extraCategories); RaiseLocalEvent(target, verbEvent); verbs.UnionWith(verbEvent.Verbs); } diff --git a/Content.Shared/Verbs/VerbCategory.cs b/Content.Shared/Verbs/VerbCategory.cs index 748570b0251..3331cad30b0 100644 --- a/Content.Shared/Verbs/VerbCategory.cs +++ b/Content.Shared/Verbs/VerbCategory.cs @@ -84,6 +84,8 @@ public VerbCategory(string text, string? icon, bool iconsOnly = false) public static readonly VerbCategory SelectType = new("verb-categories-select-type", null); + public static readonly VerbCategory PowerLevel = new("verb-categories-power-level", null); + public static readonly VerbCategory Interaction = new("verb-categories-interaction", null); } } diff --git a/Content.Shared/Verbs/VerbEvents.cs b/Content.Shared/Verbs/VerbEvents.cs index 9a09d5d7a1a..6b3fd327c99 100644 --- a/Content.Shared/Verbs/VerbEvents.cs +++ b/Content.Shared/Verbs/VerbEvents.cs @@ -77,6 +77,13 @@ public sealed class GetVerbsEvent : EntityEventArgs where TVerb : Verb /// public readonly SortedSet Verbs = new(); + /// + /// Additional verb categories to show in the pop-up menu, even if there are no verbs currently associated + /// with that category. This is mainly useful to prevent verb menu pop-in. E.g., admins will get admin/debug + /// related verbs on entities, even though most of those verbs are all defined server-side. + /// + public readonly List ExtraCategories; + /// /// Can the user physically access the target? /// @@ -123,7 +130,7 @@ public sealed class GetVerbsEvent : EntityEventArgs where TVerb : Verb /// public readonly EntityUid? Using; - public GetVerbsEvent(EntityUid user, EntityUid target, EntityUid? @using, HandsComponent? hands, bool canInteract, bool canAccess) + public GetVerbsEvent(EntityUid user, EntityUid target, EntityUid? @using, HandsComponent? hands, bool canInteract, bool canAccess, List extraCategories) { User = user; Target = target; @@ -131,6 +138,7 @@ public GetVerbsEvent(EntityUid user, EntityUid target, EntityUid? @using, HandsC Hands = hands; CanAccess = canAccess; CanInteract = canInteract; + ExtraCategories = extraCategories; } } } diff --git a/Content.Shared/Wagging/WaggingComponent.cs b/Content.Shared/Wagging/WaggingComponent.cs index 76881827dd2..70e7f009c7d 100644 --- a/Content.Shared/Wagging/WaggingComponent.cs +++ b/Content.Shared/Wagging/WaggingComponent.cs @@ -17,9 +17,6 @@ public sealed partial class WaggingComponent : Component [DataField] public EntityUid? ActionEntity; - [DataField] - public ProtoId EmoteId = "WagTail"; - /// /// Suffix to add to get the animated marking. /// diff --git a/Content.Shared/Weapons/Melee/MeleeSoundSystem.cs b/Content.Shared/Weapons/Melee/MeleeSoundSystem.cs index 350642105a5..315d752a2c0 100644 --- a/Content.Shared/Weapons/Melee/MeleeSoundSystem.cs +++ b/Content.Shared/Weapons/Melee/MeleeSoundSystem.cs @@ -1,4 +1,5 @@ using Content.Shared.Weapons.Melee.Components; +using Content.Shared.Weapons.Melee.Events; using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; diff --git a/Content.Shared/Weapons/Melee/MeleeWeaponComponent.cs b/Content.Shared/Weapons/Melee/MeleeWeaponComponent.cs index c242d448f27..5fc92ce37a9 100644 --- a/Content.Shared/Weapons/Melee/MeleeWeaponComponent.cs +++ b/Content.Shared/Weapons/Melee/MeleeWeaponComponent.cs @@ -1,3 +1,4 @@ +using Content.Shared.Contests; using Content.Shared.Damage; using Content.Shared.FixedPoint; using Robust.Shared.Audio; @@ -109,7 +110,7 @@ public sealed partial class MeleeWeaponComponent : Component /// Total width of the angle for wide attacks. /// [DataField, AutoNetworkedField] - public Angle Angle = Angle.FromDegrees(45); + public Angle Angle = Angle.FromDegrees(60); [DataField, AutoNetworkedField] public EntProtoId Animation = "WeaponArcPunch"; @@ -128,10 +129,10 @@ public sealed partial class MeleeWeaponComponent : Component public bool SwingLeft; [DataField, AutoNetworkedField] - public float HeavyStaminaCost = 10f; + public float HeavyStaminaCost = 2.5f; [DataField, AutoNetworkedField] - public int MaxTargets = 1; + public int MaxTargets = 3; // Sounds @@ -156,6 +157,25 @@ public sealed partial class MeleeWeaponComponent : Component /// [DataField, AutoNetworkedField] public SoundSpecifier SoundNoDamage { get; set; } = new SoundCollectionSpecifier("WeakHit"); + + /// + /// Arguments for the MeleeContestInteractions constructor + /// + [DataField] + public ContestArgs ContestArgs = new ContestArgs + { + DoStaminaInteraction = true, + StaminaDisadvantage = true, + DoHealthInteraction = true, + }; + + /// + /// If true, the weapon must be equipped for it to be used. + /// E.g boxing gloves must be equipped to your gloves, + /// not just held in your hand to be used. + /// + [DataField, AutoNetworkedField] + public bool MustBeEquippedToUse = false; } /// diff --git a/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs b/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs index 77a642c2bb3..28b5b4b167f 100644 --- a/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs +++ b/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs @@ -33,7 +33,7 @@ namespace Content.Shared.Weapons.Melee; -public abstract class SharedMeleeWeaponSystem : EntitySystem +public abstract partial class SharedMeleeWeaponSystem : EntitySystem { [Dependency] protected readonly ISharedAdminLogManager AdminLogger = default!; [Dependency] protected readonly ActionBlockerSystem Blocker = default!; @@ -171,49 +171,39 @@ private void OnStopAttack(StopAttackEvent msg, EntitySessionEventArgs args) private void OnLightAttack(LightAttackEvent msg, EntitySessionEventArgs args) { - var user = args.SenderSession.AttachedEntity; - - if (user == null) + if (args.SenderSession.AttachedEntity is not {} user) return; - if (!TryGetWeapon(user.Value, out var weaponUid, out var weapon) || + if (!TryGetWeapon(user, out var weaponUid, out var weapon) || weaponUid != GetEntity(msg.Weapon)) { return; } - AttemptAttack(args.SenderSession.AttachedEntity!.Value, weaponUid, weapon, msg, args.SenderSession); + AttemptAttack(user, weaponUid, weapon, msg, args.SenderSession); } private void OnHeavyAttack(HeavyAttackEvent msg, EntitySessionEventArgs args) { - if (args.SenderSession.AttachedEntity == null) - { + if (args.SenderSession.AttachedEntity is not {} user) return; - } - if (!TryGetWeapon(args.SenderSession.AttachedEntity.Value, out var weaponUid, out var weapon) || + if (!TryGetWeapon(user, out var weaponUid, out var weapon) || weaponUid != GetEntity(msg.Weapon)) { return; } - AttemptAttack(args.SenderSession.AttachedEntity.Value, weaponUid, weapon, msg, args.SenderSession); + AttemptAttack(user, weaponUid, weapon, msg, args.SenderSession); } private void OnDisarmAttack(DisarmAttackEvent msg, EntitySessionEventArgs args) { - if (args.SenderSession.AttachedEntity == null) - { + if (args.SenderSession.AttachedEntity is not {} user) return; - } - - if (!TryGetWeapon(args.SenderSession.AttachedEntity.Value, out var weaponUid, out var weapon)) - { - return; - } - AttemptAttack(args.SenderSession.AttachedEntity.Value, weaponUid, weapon, msg, args.SenderSession); + if (TryGetWeapon(user, out var weaponUid, out var weapon)) + AttemptAttack(user, weaponUid, weapon, msg, args.SenderSession); } /// @@ -242,18 +232,9 @@ public DamageSpecifier GetDamage(EntityUid uid, EntityUid user, MeleeWeaponCompo var ev = new GetMeleeDamageEvent(uid, new (component.Damage), new(), user); RaiseLocalEvent(uid, ref ev); - // remove multiplier after dealing damage - foreach(var entry in damage.DamageDict) - { - if (entry.Value <= 0) continue; + if (component.ContestArgs is not null) + ev.Damage *= _contests.ContestConstructor(user, component.ContestArgs); - float newValue = entry.Value.Float(); - if (TryComp(user, out var special)){ - newValue /= 0.75f + (special.TotalStrength / 20f); - } - damage.DamageDict[entry.Key] = newValue; - } - // Nuclear14 end return DamageSpecifier.ApplyModifierSets(ev.Damage, ev.Modifiers); } @@ -278,9 +259,7 @@ public FixedPoint2 GetHeavyDamageModifier(EntityUid uid, EntityUid user, MeleeWe return ev.DamageModifier * ev.Multipliers - * component.HeavyDamageBaseModifier - * _contests.StaminaContest(user, false, 2f) //Taking stamina damage reduces wide swing damage by up to 50% - / _contests.HealthContest(user, false, 0.8f); //Being injured grants up to 20% more wide swing damage + * component.HeavyDamageBaseModifier; } public bool TryGetWeapon(EntityUid entity, out EntityUid weaponUid, [NotNullWhen(true)] out MeleeWeaponComponent? melee) @@ -305,7 +284,10 @@ public bool TryGetWeapon(EntityUid entity, out EntityUid weaponUid, [NotNullWhen if (EntityManager.TryGetComponent(entity, out HandsComponent? hands) && hands.ActiveHandEntity is { } held) { - if (EntityManager.TryGetComponent(held, out melee)) + // Make sure the entity is a weapon AND it doesn't need + // to be equipped to be used (E.g boxing gloves). + if (EntityManager.TryGetComponent(held, out melee) && + !melee.MustBeEquippedToUse) { weaponUid = held; return true; @@ -370,23 +352,32 @@ private bool AttemptAttack(EntityUid user, EntityUid weaponUid, MeleeWeaponCompo var fireRateSwingModifier = 1f; + EntityUid? target = null; switch (attack) { case LightAttackEvent light: - var lightTarget = GetEntity(light.Target); + if (light.Target != null && !TryGetEntity(light.Target, out target)) + { + // Target was lightly attacked & deleted. + return false; + } - if (!Blocker.CanAttack(user, lightTarget, (weaponUid, weapon))) + if (!Blocker.CanAttack(user, target, (weaponUid, weapon))) return false; // Can't self-attack if you're the weapon - if (weaponUid == lightTarget) + if (weaponUid == target) return false; break; case DisarmAttackEvent disarm: - var disarmTarget = GetEntity(disarm.Target); + if (disarm.Target != null && !TryGetEntity(disarm.Target, out target)) + { + // Target was lightly attacked & deleted. + return false; + } - if (!Blocker.CanAttack(user, disarmTarget, (weaponUid, weapon), true)) + if (!Blocker.CanAttack(user, target, (weaponUid, weapon), true)) return false; break; case HeavyAttackEvent: @@ -469,9 +460,7 @@ private bool AttemptAttack(EntityUid user, EntityUid weaponUid, MeleeWeaponCompo protected virtual void DoLightAttack(EntityUid user, LightAttackEvent ev, EntityUid meleeUid, MeleeWeaponComponent component, ICommonSession? session) { - var damage = GetDamage(meleeUid, user, component) - * _contests.StaminaContest(user) //Taking stamina damage reduces light attack damage by up to 25% - / _contests.HealthContest(user, false, 0.8f); //Being injured grants up to 20% more damage; + var damage = GetDamage(meleeUid, user, component); var target = GetEntity(ev.Target); // For consistency with wide attacks stuff needs damageable. @@ -785,7 +774,7 @@ private void DoLungeAnimation(EntityUid user, EntityUid weapon, Angle angle, Map return; var invMatrix = TransformSystem.GetInvWorldMatrix(userXform); - var localPos = invMatrix.Transform(coordinates.Position); + var localPos = Vector2.Transform(coordinates.Position, invMatrix); if (localPos.LengthSquared() <= 0f) return; diff --git a/Content.Shared/Weapons/Ranged/Components/ActionGunComponent.cs b/Content.Shared/Weapons/Ranged/Components/ActionGunComponent.cs new file mode 100644 index 00000000000..112339efd74 --- /dev/null +++ b/Content.Shared/Weapons/Ranged/Components/ActionGunComponent.cs @@ -0,0 +1,37 @@ +using Content.Shared.Actions; +using Content.Shared.Weapons.Ranged.Systems; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared.Weapons.Ranged.Components; + +/// +/// Lets you shoot a gun using an action. +/// +[RegisterComponent, NetworkedComponent, Access(typeof(ActionGunSystem))] +public sealed partial class ActionGunComponent : Component +{ + /// + /// Action to create, must use . + /// + [DataField(required: true)] + public EntProtoId Action = string.Empty; + + [DataField] + public EntityUid? ActionEntity; + + /// + /// Prototype of gun entity to spawn. + /// Deleted when this component is removed. + /// + [DataField(required: true)] + public EntProtoId GunProto = string.Empty; + + [DataField] + public EntityUid? Gun; +} + +/// +/// Action event for to shoot at a position. +/// +public sealed partial class ActionGunShootEvent : WorldTargetActionEvent; diff --git a/Content.Shared/Weapons/Ranged/Components/GunRequiresWieldComponent.cs b/Content.Shared/Weapons/Ranged/Components/GunRequiresWieldComponent.cs index 2ae71334b47..fa3732209f5 100644 --- a/Content.Shared/Weapons/Ranged/Components/GunRequiresWieldComponent.cs +++ b/Content.Shared/Weapons/Ranged/Components/GunRequiresWieldComponent.cs @@ -6,8 +6,13 @@ namespace Content.Shared.Weapons.Ranged.Components; /// /// Indicates that this gun requires wielding to be useable. /// -[RegisterComponent, NetworkedComponent, Access(typeof(WieldableSystem))] +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +[Access(typeof(WieldableSystem))] public sealed partial class GunRequiresWieldComponent : Component { + [DataField, AutoNetworkedField] + public TimeSpan LastPopup; + [DataField, AutoNetworkedField] + public TimeSpan PopupCooldown = TimeSpan.FromSeconds(1); } diff --git a/Content.Shared/Weapons/Ranged/Components/GunWieldBonusComponent.cs b/Content.Shared/Weapons/Ranged/Components/GunWieldBonusComponent.cs index ce96639e3c4..522319ccbd3 100644 --- a/Content.Shared/Weapons/Ranged/Components/GunWieldBonusComponent.cs +++ b/Content.Shared/Weapons/Ranged/Components/GunWieldBonusComponent.cs @@ -33,4 +33,7 @@ public sealed partial class GunWieldBonusComponent : Component /// [DataField, AutoNetworkedField] public Angle AngleIncrease = Angle.FromDegrees(0); + + [DataField] + public LocId? WieldBonusExamineMessage = "gunwieldbonus-component-examine"; } diff --git a/Content.Shared/Weapons/Ranged/Events/MuzzleFlashEvent.cs b/Content.Shared/Weapons/Ranged/Events/MuzzleFlashEvent.cs index 91f5e6cd868..10d4c2fe3c8 100644 --- a/Content.Shared/Weapons/Ranged/Events/MuzzleFlashEvent.cs +++ b/Content.Shared/Weapons/Ranged/Events/MuzzleFlashEvent.cs @@ -11,15 +11,12 @@ public sealed class MuzzleFlashEvent : EntityEventArgs public NetEntity Uid; public string Prototype; - /// - /// Should the effect match the rotation of the entity. - /// - public bool MatchRotation; + public Angle Angle; - public MuzzleFlashEvent(NetEntity uid, string prototype, bool matchRotation = false) + public MuzzleFlashEvent(NetEntity uid, string prototype, Angle angle) { Uid = uid; Prototype = prototype; - MatchRotation = matchRotation; + Angle = angle; } } diff --git a/Content.Shared/Weapons/Ranged/Events/ShotAttemptedEvent.cs b/Content.Shared/Weapons/Ranged/Events/ShotAttemptedEvent.cs index 40925ad614c..d61862bf1a0 100644 --- a/Content.Shared/Weapons/Ranged/Events/ShotAttemptedEvent.cs +++ b/Content.Shared/Weapons/Ranged/Events/ShotAttemptedEvent.cs @@ -1,3 +1,5 @@ +using Content.Shared.Weapons.Ranged.Components; + namespace Content.Shared.Weapons.Ranged.Events; /// @@ -15,7 +17,7 @@ public record struct ShotAttemptedEvent /// /// The gun being shot. /// - public EntityUid Used; + public Entity Used; public bool Cancelled { get; private set; } diff --git a/Content.Shared/Weapons/Ranged/Systems/ActionGunSystem.cs b/Content.Shared/Weapons/Ranged/Systems/ActionGunSystem.cs new file mode 100644 index 00000000000..f3dfe8a2a03 --- /dev/null +++ b/Content.Shared/Weapons/Ranged/Systems/ActionGunSystem.cs @@ -0,0 +1,41 @@ +using Content.Shared.Actions; +using Content.Shared.Weapons.Ranged.Components; + +namespace Content.Shared.Weapons.Ranged.Systems; + +public sealed class ActionGunSystem : EntitySystem +{ + [Dependency] private readonly SharedActionsSystem _actions = default!; + [Dependency] private readonly SharedGunSystem _gun = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnMapInit); + SubscribeLocalEvent(OnShutdown); + SubscribeLocalEvent(OnShoot); + } + + private void OnMapInit(Entity ent, ref MapInitEvent args) + { + if (string.IsNullOrEmpty(ent.Comp.Action)) + return; + + _actions.AddAction(ent, ref ent.Comp.ActionEntity, ent.Comp.Action); + ent.Comp.Gun = Spawn(ent.Comp.GunProto); + } + + private void OnShutdown(Entity ent, ref ComponentShutdown args) + { + if (ent.Comp.Gun is {} gun) + QueueDel(gun); + } + + private void OnShoot(Entity ent, ref ActionGunShootEvent args) + { + if (TryComp(ent.Comp.Gun, out var gun)) + _gun.AttemptShoot(ent, ent.Comp.Gun.Value, gun, args.Target); + } +} + diff --git a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs index e18e375c09c..92ae3cfdd53 100644 --- a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs +++ b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs @@ -32,8 +32,8 @@ using Robust.Shared.Prototypes; using Robust.Shared.Random; using Robust.Shared.Serialization; -using Robust.Shared.Spawners; using Robust.Shared.Timing; +using Robust.Shared.Spawners; using Robust.Shared.Utility; namespace Content.Shared.Weapons.Ranged.Systems; @@ -139,7 +139,6 @@ private void OnShootRequest(RequestShootEvent msg, EntitySessionEventArgs args) return; gun.ShootCoordinates = GetCoordinates(msg.Coordinates); - Log.Debug($"Set shoot coordinates to {gun.ShootCoordinates}"); gun.Target = GetEntity(msg.Target); AttemptShoot(user.Value, ent, gun); } @@ -199,7 +198,6 @@ private void StopShooting(EntityUid uid, GunComponent gun) if (gun.ShotCounter == 0) return; - Log.Debug($"Stopped shooting {ToPrettyString(uid)}"); gun.ShotCounter = 0; gun.ShootCoordinates = null; gun.Target = null; @@ -252,7 +250,7 @@ private void AttemptShoot(EntityUid user, EntityUid gunUid, GunComponent gun) var prevention = new ShotAttemptedEvent { User = user, - Used = gunUid + Used = (gunUid, gun) }; RaiseLocalEvent(gunUid, ref prevention); if (prevention.Cancelled) @@ -478,7 +476,7 @@ protected void RemoveShootable(EntityUid uid) RemCompDeferred(uid); } - protected void MuzzleFlash(EntityUid gun, AmmoComponent component, EntityUid? user = null) + protected void MuzzleFlash(EntityUid gun, AmmoComponent component, Angle worldAngle, EntityUid? user = null) { var attemptEv = new GunMuzzleFlashAttemptEvent(); RaiseLocalEvent(gun, ref attemptEv); @@ -490,7 +488,7 @@ protected void MuzzleFlash(EntityUid gun, AmmoComponent component, EntityUid? us if (sprite == null) return; - var ev = new MuzzleFlashEvent(GetNetEntity(gun), sprite, user == gun); + var ev = new MuzzleFlashEvent(GetNetEntity(gun), sprite, worldAngle); CreateEffect(gun, ev, user); } @@ -539,7 +537,7 @@ public void RefreshModifiers(Entity gun) Dirty(gun); } - protected abstract void CreateEffect(EntityUid uid, MuzzleFlashEvent message, EntityUid? user = null); + protected abstract void CreateEffect(EntityUid gunUid, MuzzleFlashEvent message, EntityUid? user = null); /// /// Used for animated effects on the client. diff --git a/Content.Shared/Weapons/Reflect/ReflectComponent.cs b/Content.Shared/Weapons/Reflect/ReflectComponent.cs index 8e7b8975d9d..5d8432ac776 100644 --- a/Content.Shared/Weapons/Reflect/ReflectComponent.cs +++ b/Content.Shared/Weapons/Reflect/ReflectComponent.cs @@ -21,17 +21,42 @@ public sealed partial class ReflectComponent : Component [ViewVariables(VVAccess.ReadWrite), DataField("reflects")] public ReflectType Reflects = ReflectType.Energy | ReflectType.NonEnergy; + [DataField("spread"), ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] + public Angle Spread = Angle.FromDegrees(45); + + [DataField("soundOnReflect")] + public SoundSpecifier? SoundOnReflect = new SoundPathSpecifier("/Audio/Weapons/Guns/Hits/laser_sear_wall.ogg"); + /// - /// Probability for a projectile to be reflected. + /// Is the deflection an innate power or something actively maintained? If true, this component grants a flat + /// deflection chance rather than a chance that degrades when moving/weightless/stunned/etc. + /// + [DataField] + public bool Innate = false; + + /// + /// Maximum probability for a projectile to be reflected. /// [DataField("reflectProb"), ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] public float ReflectProb = 0.25f; - [DataField("spread"), ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] - public Angle Spread = Angle.FromDegrees(45); + /// + /// The maximum velocity a wielder can move at before losing effectiveness. + /// + [DataField] + public float VelocityBeforeNotMaxProb = 2.5f; // Walking speed for a human. Suitable for a weightless deflector like an e-sword. - [DataField("soundOnReflect")] - public SoundSpecifier? SoundOnReflect = new SoundPathSpecifier("/Audio/Weapons/Guns/Hits/laser_sear_wall.ogg"); + /// + /// The velocity a wielder has to be moving at to use the minimum effectiveness value. + /// + [DataField] + public float VelocityBeforeMinProb = 4.5f; // Sprinting speed for a human. Suitable for a weightless deflector like an e-sword. + + /// + /// Minimum probability for a projectile to be reflected. + /// + [DataField] + public float MinReflectProb = 0.1f; } [Flags] diff --git a/Content.Shared/Weapons/Reflect/ReflectSystem.cs b/Content.Shared/Weapons/Reflect/ReflectSystem.cs index 4a7c2f6b6a7..36dbedb4cb1 100644 --- a/Content.Shared/Weapons/Reflect/ReflectSystem.cs +++ b/Content.Shared/Weapons/Reflect/ReflectSystem.cs @@ -1,17 +1,20 @@ using System.Diagnostics.CodeAnalysis; using System.Numerics; using Content.Shared.Administration.Logs; +using Content.Shared.Alert; using Content.Shared.Audio; +using Content.Shared.Damage.Components; using Content.Shared.Database; +using Content.Shared.Gravity; using Content.Shared.Hands; using Content.Shared.Inventory; using Content.Shared.Inventory.Events; using Content.Shared.Item.ItemToggle.Components; using Content.Shared.Popups; using Content.Shared.Projectiles; +using Content.Shared.Standing; using Content.Shared.Weapons.Ranged.Components; using Content.Shared.Weapons.Ranged.Events; -using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; using Robust.Shared.Network; using Robust.Shared.Physics.Components; @@ -35,6 +38,9 @@ public sealed class ReflectSystem : EntitySystem [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly SharedTransformSystem _transform = default!; [Dependency] private readonly InventorySystem _inventorySystem = default!; + [Dependency] private readonly SharedGravitySystem _gravity = default!; + [Dependency] private readonly StandingStateSystem _standing = default!; + [Dependency] private readonly AlertsSystem _alerts = default!; public override void Initialize() { @@ -57,7 +63,7 @@ private void OnReflectUserHitscan(EntityUid uid, ReflectUserComponent component, if (args.Reflected) return; - foreach (var ent in _inventorySystem.GetHandOrInventoryEntities(uid, SlotFlags.All & ~SlotFlags.POCKET)) + foreach (var ent in _inventorySystem.GetHandOrInventoryEntities(uid, SlotFlags.WITHOUT_POCKET)) { if (!TryReflectHitscan(uid, ent, args.Shooter, args.SourceItem, args.Direction, out var dir)) continue; @@ -70,7 +76,7 @@ private void OnReflectUserHitscan(EntityUid uid, ReflectUserComponent component, private void OnReflectUserCollide(EntityUid uid, ReflectUserComponent component, ref ProjectileReflectAttemptEvent args) { - foreach (var ent in _inventorySystem.GetHandOrInventoryEntities(uid, SlotFlags.All & ~SlotFlags.POCKET)) + foreach (var ent in _inventorySystem.GetHandOrInventoryEntities(uid, SlotFlags.WITHOUT_POCKET)) { if (!TryReflectProjectile(uid, ent, args.ProjUid)) continue; @@ -91,15 +97,20 @@ private void OnReflectCollide(EntityUid uid, ReflectComponent component, ref Pro private bool TryReflectProjectile(EntityUid user, EntityUid reflector, EntityUid projectile, ProjectileComponent? projectileComp = null, ReflectComponent? reflect = null) { - if (!Resolve(reflector, ref reflect, false) || + // Do we have the components needed to try a reflect at all? + if ( + !Resolve(reflector, ref reflect, false) || !reflect.Enabled || !TryComp(projectile, out var reflective) || (reflect.Reflects & reflective.Reflective) == 0x0 || - !_random.Prob(reflect.ReflectProb) || - !TryComp(projectile, out var physics)) - { + !TryComp(projectile, out var physics) || + TryComp(reflector, out var staminaComponent) && staminaComponent.Critical || + _standing.IsDown(reflector) + ) + return false; + + if (!_random.Prob(CalcReflectChance(reflector, reflect))) return false; - } var rotation = _random.NextAngle(-reflect.Spread / 2, reflect.Spread / 2).Opposite(); var existingVelocity = _physics.GetMapLinearVelocity(projectile, component: physics); @@ -137,6 +148,34 @@ private bool TryReflectProjectile(EntityUid user, EntityUid reflector, EntityUid return true; } + private float CalcReflectChance(EntityUid reflector, ReflectComponent reflect) + { + /* + * The rules of deflection are as follows: + * If you innately reflect things via magic, biology etc., you always have a full chance. + * If you are standing up and standing still, you're prepared to deflect and have full chance. + * If you have velocity, your deflection chance depends on your velocity, clamped. + * If you are floating, your chance is the minimum value possible. + * You cannot deflect if you are knocked down or stunned. + */ + + if (reflect.Innate) + return reflect.ReflectProb; + + if (_gravity.IsWeightless(reflector)) + return reflect.MinReflectProb; + + if (!TryComp(reflector, out var reflectorPhysics)) + return reflect.ReflectProb; + + return MathHelper.Lerp( + reflect.MinReflectProb, + reflect.ReflectProb, + // Inverse progression between velocities fed in as progression between probabilities. We go high -> low so the output here needs to be _inverted_. + 1 - Math.Clamp((reflectorPhysics.LinearVelocity.Length() - reflect.VelocityBeforeNotMaxProb) / (reflect.VelocityBeforeMinProb - reflect.VelocityBeforeNotMaxProb), 0, 1) + ); + } + private void OnReflectHitscan(EntityUid uid, ReflectComponent component, ref HitScanReflectAttemptEvent args) { if (args.Reflected || @@ -162,7 +201,14 @@ private bool TryReflectHitscan( { if (!TryComp(reflector, out var reflect) || !reflect.Enabled || - !_random.Prob(reflect.ReflectProb)) + TryComp(reflector, out var staminaComponent) && staminaComponent.Critical || + _standing.IsDown(reflector)) + { + newDirection = null; + return false; + } + + if (!_random.Prob(CalcReflectChance(reflector, reflect))) { newDirection = null; return false; @@ -191,6 +237,9 @@ private void OnReflectEquipped(EntityUid uid, ReflectComponent component, GotEqu return; EnsureComp(args.Equipee); + + if (component.Enabled) + EnableAlert(args.Equipee); } private void OnReflectUnequipped(EntityUid uid, ReflectComponent comp, GotUnequippedEvent args) @@ -204,6 +253,9 @@ private void OnReflectHandEquipped(EntityUid uid, ReflectComponent component, Go return; EnsureComp(args.User); + + if (component.Enabled) + EnableAlert(args.User); } private void OnReflectHandUnequipped(EntityUid uid, ReflectComponent component, GotUnequippedHandEvent args) @@ -215,6 +267,11 @@ private void OnToggleReflect(EntityUid uid, ReflectComponent comp, ref ItemToggl { comp.Enabled = args.Activated; Dirty(uid, comp); + + if (comp.Enabled) + EnableAlert(uid); + else + DisableAlert(uid); } /// @@ -222,15 +279,28 @@ private void OnToggleReflect(EntityUid uid, ReflectComponent comp, ref ItemToggl /// private void RefreshReflectUser(EntityUid user) { - foreach (var ent in _inventorySystem.GetHandOrInventoryEntities(user, SlotFlags.All & ~SlotFlags.POCKET)) + foreach (var ent in _inventorySystem.GetHandOrInventoryEntities(user, SlotFlags.WITHOUT_POCKET)) { if (!HasComp(ent)) continue; EnsureComp(user); + EnableAlert(user); + return; } RemCompDeferred(user); + DisableAlert(user); + } + + private void EnableAlert(EntityUid alertee) + { + _alerts.ShowAlert(alertee, AlertType.Deflecting); + } + + private void DisableAlert(EntityUid alertee) + { + _alerts.ClearAlert(alertee, AlertType.Deflecting); } } diff --git a/Content.Shared/Whitelist/EntityWhitelist.cs b/Content.Shared/Whitelist/EntityWhitelist.cs index 942de2b0e82..895759be958 100644 --- a/Content.Shared/Whitelist/EntityWhitelist.cs +++ b/Content.Shared/Whitelist/EntityWhitelist.cs @@ -1,100 +1,67 @@ +using Content.Shared.Item; using Content.Shared.Tag; +using Robust.Shared.Prototypes; using Robust.Shared.Serialization; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.List; -namespace Content.Shared.Whitelist +namespace Content.Shared.Whitelist; + +/// +/// Used to determine whether an entity fits a certain whitelist. +/// Does not whitelist by prototypes, since that is undesirable; you're better off just adding a tag to all +/// entity prototypes that need to be whitelisted, and checking for that. +/// +/// +/// whitelist: +/// tags: +/// - Cigarette +/// - FirelockElectronics +/// components: +/// - Buckle +/// - AsteroidRock +/// sizes: +/// - Tiny +/// - Large +/// +[DataDefinition] +[Serializable, NetSerializable] +public sealed partial class EntityWhitelist { /// - /// Used to determine whether an entity fits a certain whitelist. - /// Does not whitelist by prototypes, since that is undesirable; you're better off just adding a tag to all - /// entity prototypes that need to be whitelisted, and checking for that. + /// Component names that are allowed in the whitelist. /// - /// - /// whitelist: - /// tags: - /// - Cigarette - /// - FirelockElectronics - /// components: - /// - Buckle - /// - AsteroidRock - /// - [DataDefinition] - [Serializable, NetSerializable] - public sealed partial class EntityWhitelist - { - /// - /// Component names that are allowed in the whitelist. - /// - [DataField("components")] public string[]? Components = null; - // TODO yaml validation - - [NonSerialized] - private List? _registrations = null; + [DataField] public string[]? Components; + // TODO yaml validation - /// - /// Tags that are allowed in the whitelist. - /// - [DataField("tags", customTypeSerializer:typeof(PrototypeIdListSerializer))] - public List? Tags = null; - - /// - /// If false, an entity only requires one of these components or tags to pass the whitelist. If true, an - /// entity requires to have ALL of these components and tags to pass. - /// - [DataField("requireAll")] - public bool RequireAll = false; + /// + /// Item sizes that are allowed in the whitelist. + /// + [DataField] + public List>? Sizes; - public void UpdateRegistrations() - { - if (Components == null) return; + [NonSerialized, Access(typeof(EntityWhitelistSystem))] + public List? Registrations; - var compfact = IoCManager.Resolve(); - _registrations = new List(); - foreach (var name in Components) - { - var availability = compfact.GetComponentAvailability(name); - if (compfact.TryGetRegistration(name, out var registration) - && availability == ComponentAvailability.Available) - { - _registrations.Add(registration); - } - else if (availability == ComponentAvailability.Unknown) - { - Logger.Warning($"Unknown component name {name} passed to EntityWhitelist!"); - } - } - } + /// + /// Tags that are allowed in the whitelist. + /// + [DataField] + public List>? Tags; - /// - /// Returns whether a given entity fits the whitelist. - /// - public bool IsValid(EntityUid uid, IEntityManager? entityManager = null) - { - if (Components != null && _registrations == null) - UpdateRegistrations(); + /// + /// If false, an entity only requires one of these components or tags to pass the whitelist. If true, an + /// entity requires to have ALL of these components and tags to pass. + /// The "Sizes" criteria will ignores this, since an item can only have one size. + /// + [DataField] + public bool RequireAll; - IoCManager.Resolve(ref entityManager); - if (_registrations != null) - { - foreach (var reg in _registrations) - { - if (entityManager.HasComponent(uid, reg.Type)) - { - if (!RequireAll) - return true; - } - else if (RequireAll) - return false; - } - } + [Obsolete("Use WhitelistSystem")] + public bool IsValid(EntityUid uid, IEntityManager? man = null) + { + var sys = man?.System() ?? + IoCManager.Resolve().GetEntitySystem(); - if (Tags != null && entityManager.TryGetComponent(uid, out TagComponent? tags)) - { - var tagSystem = entityManager.System(); - return RequireAll ? tagSystem.HasAllTags(tags, Tags) : tagSystem.HasAnyTag(tags, Tags); - } + return sys.IsValid(this, uid); - return false; - } } } diff --git a/Content.Shared/Whitelist/EntityWhitelistSystem.cs b/Content.Shared/Whitelist/EntityWhitelistSystem.cs new file mode 100644 index 00000000000..d73646b7e99 --- /dev/null +++ b/Content.Shared/Whitelist/EntityWhitelistSystem.cs @@ -0,0 +1,84 @@ +using System.Diagnostics.CodeAnalysis; +using Content.Shared.Item; +using Content.Shared.Tag; + +namespace Content.Shared.Whitelist; + +public sealed class EntityWhitelistSystem : EntitySystem +{ + [Dependency] private readonly IComponentFactory _factory = default!; + [Dependency] private readonly TagSystem _tag = default!; + + private EntityQuery _itemQuery; + + public override void Initialize() + { + base.Initialize(); + _itemQuery = GetEntityQuery(); + } + + /// + public bool IsValid(EntityWhitelist list, [NotNullWhen(true)] EntityUid? uid) + { + return uid != null && IsValid(list, uid.Value); + } + + /// + /// Checks whether a given entity satisfies a whitelist. + /// + public bool IsValid(EntityWhitelist list, EntityUid uid) + { + if (list.Components != null) + EnsureRegistrations(list); + + if (list.Registrations != null) + { + foreach (var reg in list.Registrations) + { + if (HasComp(uid, reg.Type)) + { + if (!list.RequireAll) + return true; + } + else if (list.RequireAll) + return false; + } + } + + if (list.Sizes != null && _itemQuery.TryComp(uid, out var itemComp)) + { + if (list.Sizes.Contains(itemComp.Size)) + return true; + } + + if (list.Tags != null) + { + return list.RequireAll + ? _tag.HasAllTags(uid, list.Tags) + : _tag.HasAnyTag(uid, list.Tags); + } + + return list.RequireAll; + } + + private void EnsureRegistrations(EntityWhitelist list) + { + if (list.Components == null) + return; + + list.Registrations = new List(); + foreach (var name in list.Components) + { + var availability = _factory.GetComponentAvailability(name); + if (_factory.TryGetRegistration(name, out var registration) + && availability == ComponentAvailability.Available) + { + list.Registrations.Add(registration); + } + else if (availability == ComponentAvailability.Unknown) + { + Log.Warning($"Unknown component name {name} passed to EntityWhitelist!"); + } + } + } +} diff --git a/Content.Shared/Wieldable/Components/WieldableComponent.cs b/Content.Shared/Wieldable/Components/WieldableComponent.cs index 4a50b930722..5dc6abbbbea 100644 --- a/Content.Shared/Wieldable/Components/WieldableComponent.cs +++ b/Content.Shared/Wieldable/Components/WieldableComponent.cs @@ -26,6 +26,13 @@ public sealed partial class WieldableComponent : Component [AutoNetworkedField, DataField("wielded")] public bool Wielded = false; + /// + /// Whether using the item inhand while wielding causes the item to unwield. + /// Unwielding can conflict with other inhand actions. + /// + [DataField] + public bool UnwieldOnUse = true; + [DataField("wieldedInhandPrefix")] public string? WieldedInhandPrefix = "wielded"; diff --git a/Content.Shared/Wieldable/WieldableSystem.cs b/Content.Shared/Wieldable/WieldableSystem.cs index 753a2de7287..95fc69e0614 100644 --- a/Content.Shared/Wieldable/WieldableSystem.cs +++ b/Content.Shared/Wieldable/WieldableSystem.cs @@ -1,11 +1,11 @@ +using System.Linq; +using Content.Shared.Examine; using Content.Shared.Hands; using Content.Shared.Hands.Components; using Content.Shared.Hands.EntitySystems; using Content.Shared.Interaction.Events; using Content.Shared.Inventory.VirtualItem; using Content.Shared.Item; -using Content.Shared.Nuclear14.Special.Components; -using Content.Shared.Nuclear14.CCVar; using Content.Shared.Popups; using Content.Shared.Timing; using Content.Shared.Verbs; @@ -17,15 +17,13 @@ using Content.Shared.Weapons.Ranged.Systems; using Content.Shared.Wieldable.Components; using Robust.Shared.Audio.Systems; -using Robust.Shared.Configuration; -using Robust.Shared.Player; +using Robust.Shared.Timing; namespace Content.Shared.Wieldable; public sealed class WieldableSystem : EntitySystem { [Dependency] private readonly SharedVirtualItemSystem _virtualItemSystem = default!; - [Dependency] private readonly IConfigurationManager _config = default!; [Dependency] private readonly SharedHandsSystem _handsSystem = default!; [Dependency] private readonly SharedItemSystem _itemSystem = default!; [Dependency] private readonly SharedPopupSystem _popupSystem = default!; @@ -33,6 +31,7 @@ public sealed class WieldableSystem : EntitySystem [Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly UseDelaySystem _delay = default!; [Dependency] private readonly SharedGunSystem _gun = default!; + [Dependency] private readonly IGameTiming _timing = default!; public override void Initialize() { @@ -43,12 +42,14 @@ public override void Initialize() SubscribeLocalEvent(OnItemLeaveHand); SubscribeLocalEvent(OnVirtualItemDeleted); SubscribeLocalEvent>(AddToggleWieldVerb); + SubscribeLocalEvent(OnDeselectWieldable); SubscribeLocalEvent(OnMeleeAttempt); - SubscribeLocalEvent(OnShootAttempt); + SubscribeLocalEvent(OnShootAttempt); SubscribeLocalEvent(OnGunWielded); SubscribeLocalEvent(OnGunUnwielded); SubscribeLocalEvent(OnGunRefreshModifiers); + SubscribeLocalEvent(OnExamine); SubscribeLocalEvent(OnGetMeleeDamage); } @@ -63,16 +64,21 @@ private void OnMeleeAttempt(EntityUid uid, MeleeRequiresWieldComponent component } } - private void OnShootAttempt(EntityUid uid, GunRequiresWieldComponent component, ref AttemptShootEvent args) + private void OnShootAttempt(EntityUid uid, GunRequiresWieldComponent component, ref ShotAttemptedEvent args) { if (TryComp(uid, out var wieldable) && !wieldable.Wielded) { - args.Cancelled = true; + args.Cancel(); - if (!HasComp(uid) && !HasComp(uid)) + var time = _timing.CurTime; + if (time > component.LastPopup + component.PopupCooldown && + !HasComp(uid) && + !HasComp(uid)) { - args.Message = Loc.GetString("wieldable-component-requires", ("item", uid)); + component.LastPopup = time; + var message = Loc.GetString("wieldable-component-requires", ("item", uid)); + _popupSystem.PopupClient(message, args.Used, args.User); } } } @@ -87,6 +93,15 @@ private void OnGunWielded(EntityUid uid, GunWieldBonusComponent component, ref I _gun.RefreshModifiers(uid); } + private void OnDeselectWieldable(EntityUid uid, WieldableComponent component, HandDeselectedEvent args) + { + if (!component.Wielded || + _handsSystem.EnumerateHands(args.User).Count() > 2) + return; + + TryUnwield(uid, component, args.User); + } + private void OnGunRefreshModifiers(Entity bonus, ref GunRefreshModifiersEvent args) { if (TryComp(bonus, out WieldableComponent? wield) && @@ -99,6 +114,12 @@ private void OnGunRefreshModifiers(Entity bonus, ref Gun } } + private void OnExamine(EntityUid uid, GunWieldBonusComponent component, ref ExaminedEvent args) + { + if (component.WieldBonusExamineMessage != null) + args.PushText(Loc.GetString(component.WieldBonusExamineMessage)); + } + private void AddToggleWieldVerb(EntityUid uid, WieldableComponent component, GetVerbsEvent args) { if (args.Hands == null || !args.CanAccess || !args.CanInteract) @@ -129,7 +150,7 @@ private void OnUseInHand(EntityUid uid, WieldableComponent component, UseInHandE if (!component.Wielded) args.Handled = TryWield(uid, component, args.User); - else + else if (component.UnwieldOnUse) args.Handled = TryUnwield(uid, component, args.User); } @@ -151,7 +172,7 @@ public bool CanWield(EntityUid uid, WieldableComponent component, EntityUid user return false; } - if (hands.CountFreeHands() < component.FreeHandsRequired) + if (_handsSystem.CountFreeableHands((user, hands)) < component.FreeHandsRequired) { if (!quiet) { @@ -162,23 +183,6 @@ public bool CanWield(EntityUid uid, WieldableComponent component, EntityUid user return false; } - // Nuclear14 - Strength is needed to weild - if (!EntityManager.TryGetComponent(user, out var special)) - { - if(!quiet) - _popupSystem.PopupClient(Loc.GetString("player-component-no-special"), user, user); - return false; - } - - var strNeeded = _config.GetCVar(SpecialCCVars.StrengthWeild); - if(special.TotalStrength < strNeeded) - { - var message = Loc.GetString("player-component-not-enough-strength-weild", - ("number", strNeeded), ("item", uid)); - _popupSystem.PopupClient(message, user, user); - return false; - } - // Nuclear14 end // Seems legit. return true; } @@ -209,9 +213,19 @@ public bool TryWield(EntityUid used, WieldableComponent component, EntityUid use if (component.WieldSound != null) _audioSystem.PlayPredicted(component.WieldSound, used, user); + var virtuals = new List(); for (var i = 0; i < component.FreeHandsRequired; i++) { - _virtualItemSystem.TrySpawnVirtualItemInHand(used, user); + if (_virtualItemSystem.TrySpawnVirtualItemInHand(used, user, out var virtualItem, true)) + { + virtuals.Add(virtualItem.Value); + continue; + } + + foreach (var existingVirtual in virtuals) + QueueDel(existingVirtual); + + return false; } if (TryComp(used, out UseDelayComponent? useDelay) diff --git a/Content.Shared/Xenoarchaeology/Equipment/SharedArtifactAnalyzer.cs b/Content.Shared/Xenoarchaeology/Equipment/SharedArtifactAnalyzer.cs index cecacceda9c..07f2a60c848 100644 --- a/Content.Shared/Xenoarchaeology/Equipment/SharedArtifactAnalyzer.cs +++ b/Content.Shared/Xenoarchaeology/Equipment/SharedArtifactAnalyzer.cs @@ -30,50 +30,40 @@ public sealed class AnalysisConsoleExtractButtonPressedMessage : BoundUserInterf } [Serializable, NetSerializable] -public sealed class AnalysisConsoleScanUpdateState : BoundUserInterfaceState +public sealed class AnalysisConsoleBiasButtonPressedMessage(bool isDown) : BoundUserInterfaceMessage { - public NetEntity? Artifact; - - public bool AnalyzerConnected; - - public bool ServerConnected; - - public bool CanScan; - - public bool CanPrint; - - public FormattedMessage? ScanReport; - - public bool Scanning; - - public bool Paused; - - public TimeSpan? StartTime; - - public TimeSpan? AccumulatedRunTime; - - public TimeSpan? TotalTime; - - public int PointAmount; - - public AnalysisConsoleScanUpdateState(NetEntity? artifact, bool analyzerConnected, bool serverConnected, bool canScan, bool canPrint, - FormattedMessage? scanReport, bool scanning, bool paused, TimeSpan? startTime, TimeSpan? accumulatedRunTime, TimeSpan? totalTime, int pointAmount) - { - Artifact = artifact; - AnalyzerConnected = analyzerConnected; - ServerConnected = serverConnected; - CanScan = canScan; - CanPrint = canPrint; - - ScanReport = scanReport; - - Scanning = scanning; - Paused = paused; - - StartTime = startTime; - AccumulatedRunTime = accumulatedRunTime; - TotalTime = totalTime; + public bool IsDown = isDown; +} - PointAmount = pointAmount; - } +[Serializable, NetSerializable] +public sealed class AnalysisConsoleUpdateState( + NetEntity? artifact, + bool analyzerConnected, + bool serverConnected, + bool canScan, + bool canPrint, + FormattedMessage? scanReport, + bool scanning, + bool paused, + TimeSpan? startTime, + TimeSpan? accumulatedRunTime, + TimeSpan? totalTime, + int pointAmount, + bool isTraversalDown +) + : BoundUserInterfaceState +{ + public NetEntity? Artifact = artifact; + public bool AnalyzerConnected = analyzerConnected; + public bool ServerConnected = serverConnected; + public bool CanScan = canScan; + public bool CanPrint = canPrint; + public FormattedMessage? ScanReport = scanReport; + public bool Scanning = scanning; + public bool Paused = paused; + public TimeSpan? StartTime = startTime; + public TimeSpan? AccumulatedRunTime = accumulatedRunTime; + public TimeSpan? TotalTime = totalTime; + public int PointAmount = pointAmount; + public bool IsTraversalDown = isTraversalDown; } diff --git a/Content.Shared/Zombies/ZombieComponent.cs b/Content.Shared/Zombies/ZombieComponent.cs index be3fdbdd01a..3673a2c51d5 100644 --- a/Content.Shared/Zombies/ZombieComponent.cs +++ b/Content.Shared/Zombies/ZombieComponent.cs @@ -27,7 +27,7 @@ public sealed partial class ZombieComponent : Component, IAntagStatusIconCompone /// being invincible by bundling up. /// [ViewVariables(VVAccess.ReadWrite)] - public float MinZombieInfectionChance = 0.50f; + public float MinZombieInfectionChance = 0.25f; [ViewVariables(VVAccess.ReadWrite)] public float ZombieMovementSpeedDebuff = 0.70f; diff --git a/Content.Tests/Shared/Alert/ServerAlertsComponentTests.cs b/Content.Tests/Shared/Alert/ServerAlertsComponentTests.cs deleted file mode 100644 index 405c0ec89ed..00000000000 --- a/Content.Tests/Shared/Alert/ServerAlertsComponentTests.cs +++ /dev/null @@ -1,80 +0,0 @@ -using System.IO; -using Content.Server.Alert; -using Content.Shared.Alert; -using NUnit.Framework; -using Robust.Shared.GameObjects; -using Robust.Shared.GameStates; -using Robust.Shared.IoC; -using Robust.Shared.Prototypes; -using Robust.Shared.Serialization.Manager; - -namespace Content.Tests.Shared.Alert -{ - [TestFixture] - [TestOf(typeof(AlertsComponent))] - public sealed class ServerAlertsComponentTests : ContentUnitTest - { - const string PROTOTYPES = @" -- type: alert - id: LowPressure - category: Pressure - icon: /Textures/Interface/Alerts/Pressure/lowpressure.png - -- type: alert - id: HighPressure - category: Pressure - icon: /Textures/Interface/Alerts/Pressure/highpressure.png -"; - - [Test] - [Ignore("There is no way to load extra Systems in a unit test, fixing RobustUnitTest is out of scope.")] - public void ShowAlerts() - { - // this is kind of unnecessary because there's integration test coverage of Alert components - // but wanted to keep it anyway to see what's possible w.r.t. testing components - // in a unit test - - var entManager = IoCManager.Resolve(); - IoCManager.Resolve().Initialize(); - var prototypeManager = IoCManager.Resolve(); - prototypeManager.Initialize(); - var factory = IoCManager.Resolve(); - factory.RegisterClass(); - prototypeManager.LoadFromStream(new StringReader(PROTOTYPES)); - prototypeManager.ResolveResults(); - - var entSys = entManager.EntitySysManager; - entSys.LoadExtraSystemType(); - - var alertsComponent = new AlertsComponent(); - alertsComponent = IoCManager.InjectDependencies(alertsComponent); - - Assert.That(EntitySystem.Get().TryGet(AlertType.LowPressure, out var lowpressure)); - Assert.That(EntitySystem.Get().TryGet(AlertType.HighPressure, out var highpressure)); - - EntitySystem.Get().ShowAlert(alertsComponent.Owner, AlertType.LowPressure, null, null); - - var getty = new ComponentGetState(); - entManager.EventBus.RaiseComponentEvent(alertsComponent, getty); - - var alertState = (AlertsComponent.AlertsComponent_AutoState) getty.State!; - Assert.That(alertState, Is.Not.Null); - Assert.That(alertState.Alerts.Count, Is.EqualTo(1)); - Assert.That(alertState.Alerts.ContainsKey(lowpressure.AlertKey)); - - EntitySystem.Get().ShowAlert(alertsComponent.Owner, AlertType.HighPressure, null, null); - - // Lazy - entManager.EventBus.RaiseComponentEvent(alertsComponent, getty); - alertState = (AlertsComponent.AlertsComponent_AutoState) getty.State!; - Assert.That(alertState.Alerts.Count, Is.EqualTo(1)); - Assert.That(alertState.Alerts.ContainsKey(highpressure.AlertKey)); - - EntitySystem.Get().ClearAlertCategory(alertsComponent.Owner, AlertCategory.Pressure); - - entManager.EventBus.RaiseComponentEvent(alertsComponent, getty); - alertState = (AlertsComponent.AlertsComponent_AutoState) getty.State!; - Assert.That(alertState.Alerts.Count, Is.EqualTo(0)); - } - } -} diff --git a/Content.Tests/Shared/DamageTest.cs b/Content.Tests/Shared/DamageTest.cs index 11b810bf36a..88beca8841c 100644 --- a/Content.Tests/Shared/DamageTest.cs +++ b/Content.Tests/Shared/DamageTest.cs @@ -168,45 +168,57 @@ public void ModifierSetTest() private string _damagePrototypes = @" - type: damageType id: Blunt + name: damage-type-blunt - type: damageType id: Slash + name: damage-type-slash - type: damageType id: Piercing + name: damage-type-piercing - type: damageType id: Heat + name: damage-type-heat - type: damageType id: Shock + name: damage-type-shock - type: damageType id: Cold + name: damage-type-cold # Poison damage. Generally caused by various reagents being metabolised. - type: damageType id: Poison + name: damage-type-poison - type: damageType id: Radiation + name: damage-type-radiation # Damage due to being unable to breathe. # Represents not enough oxygen (or equivalent) getting to the blood. # Usually healed automatically if entity can breathe - type: damageType id: Asphyxiation + name: damage-type-asphyxiation # Damage representing not having enough blood. # Represents there not enough blood to supply oxygen (or equivalent). - type: damageType id: Bloodloss + name: damage-type-bloodloss - type: damageType id: Cellular + name: damage-type-cellular - type: damageGroup id: Brute + name: damage-group-brute damageTypes: - Blunt - Slash @@ -214,6 +226,7 @@ public void ModifierSetTest() - type: damageGroup id: Burn + name: damage-group-burn damageTypes: - Heat - Shock @@ -225,6 +238,7 @@ public void ModifierSetTest() # bloodloss, not this whole group, unless you have a wonder drug that affects both. - type: damageGroup id: Airloss + name: damage-group-airloss damageTypes: - Asphyxiation - Bloodloss @@ -233,12 +247,14 @@ public void ModifierSetTest() # Though there are probably some radioactive poisons. - type: damageGroup id: Toxin + name: damage-group-toxin damageTypes: - Poison - Radiation - type: damageGroup id: Genetic + name: damage-group-genetic damageTypes: - Cellular diff --git a/Content.YAMLLinter/Program.cs b/Content.YAMLLinter/Program.cs index 78867fcb8ab..7f0b740fe8c 100644 --- a/Content.YAMLLinter/Program.cs +++ b/Content.YAMLLinter/Program.cs @@ -1,9 +1,11 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Reflection; using System.Threading.Tasks; using Content.IntegrationTests; using Robust.Shared.Prototypes; +using Robust.Shared.Reflection; using Robust.Shared.Serialization.Markdown.Validation; using Robust.Shared.Timing; using Robust.Shared.Utility; @@ -103,9 +105,13 @@ await instance.WaitPost(() => return (yamlErrors, fieldErrors); } - public static async Task<(Dictionary> YamlErrors , List FieldErrors)> + public static async Task<(Dictionary> YamlErrors, List FieldErrors)> RunValidation() { + var (clientAssemblies, serverAssemblies) = await GetClientServerAssemblies(); + var serverTypes = serverAssemblies.SelectMany(n => n.GetTypes()).Select(t => t.Name).ToHashSet(); + var clientTypes = clientAssemblies.SelectMany(n => n.GetTypes()).Select(t => t.Name).ToHashSet(); + var yamlErrors = new Dictionary>(); var serverErrors = await ValidateServer(); @@ -117,9 +123,18 @@ await instance.WaitPost(() => var newErrors = val.Where(n => n.AlwaysRelevant).ToHashSet(); // We include sometimes-relevant errors if they exist both for the client & server - if (clientErrors.Item1.TryGetValue(key, out var clientVal)) + if (clientErrors.YamlErrors.TryGetValue(key, out var clientVal)) newErrors.UnionWith(val.Intersect(clientVal)); + // Include any errors that relate to server-only types + foreach (var errorNode in val) + { + if (errorNode is FieldNotFoundErrorNode fieldNotFoundNode && !clientTypes.Contains(fieldNotFoundNode.FieldType.Name)) + { + newErrors.Add(errorNode); + } + } + if (newErrors.Count != 0) yamlErrors[key] = newErrors; } @@ -135,6 +150,15 @@ await instance.WaitPost(() => errors.UnionWith(val.Where(n => n.AlwaysRelevant)); else yamlErrors[key] = newErrors; + + // Include any errors that relate to client-only types + foreach (var errorNode in val) + { + if (errorNode is FieldNotFoundErrorNode fieldNotFoundNode && !serverTypes.Contains(fieldNotFoundNode.FieldType.Name)) + { + newErrors.Add(errorNode); + } + } } // Finally, combine the prototype ID field errors. @@ -145,5 +169,23 @@ await instance.WaitPost(() => return (yamlErrors, fieldErrors); } + + private static async Task<(Assembly[] clientAssemblies, Assembly[] serverAssemblies)> + GetClientServerAssemblies() + { + await using var pair = await PoolManager.GetServerClient(); + + var result = (GetAssemblies(pair.Client), GetAssemblies(pair.Server)); + + await pair.CleanReturnAsync(); + + return result; + + Assembly[] GetAssemblies(RobustIntegrationTest.IntegrationInstance instance) + { + var refl = instance.ResolveDependency(); + return refl.Assemblies.ToArray(); + } + } } } diff --git a/Resources/Audio/Ambience/attributions.yml b/Resources/Audio/Ambience/attributions.yml index 01d1f1c92ed..931d27f22eb 100644 --- a/Resources/Audio/Ambience/attributions.yml +++ b/Resources/Audio/Ambience/attributions.yml @@ -121,3 +121,9 @@ license: "CC0-1.0" copyright: "Created by dimbark1, edited and converted to mono by TheShuEd" source: "https://freesound.org/people/dimbark1/sounds/316797/" + +- files: ["wisp_ambience.ogg"] + license: "CC-BY-4.0" + copyright: "Created by AlienXXX, touched up by Rane" + source: "https://freesound.org/people/AlienXXX/sounds/123647/" + diff --git a/Resources/Audio/Ambience/wisp_ambience.ogg b/Resources/Audio/Ambience/wisp_ambience.ogg new file mode 100644 index 00000000000..83f823ec818 Binary files /dev/null and b/Resources/Audio/Ambience/wisp_ambience.ogg differ diff --git a/Resources/Audio/Animals/attributions.yml b/Resources/Audio/Animals/attributions.yml index c34832a807a..7fd7e8b2e7b 100644 --- a/Resources/Audio/Animals/attributions.yml +++ b/Resources/Audio/Animals/attributions.yml @@ -7,7 +7,7 @@ license: "CC-BY-3.0" copyright: "Modified from 'Meow 4.wav' by freesound user 'TRNGLE. The original audio was trimmed, split to mono, and converted from WAV to OGG format" source: "https://freesound.org/people/TRNGLE/sounds/368006/" - + - files: ["cat_meow2.ogg"] license: "CC-BY-3.0" copyright: "Created by freesound user 'TRNGLE. The original audio split to mono, and converted from WAV to OGG format" @@ -117,24 +117,42 @@ license: "CC-BY-4.0" copyright: "Audio is recorded/created by Pfranzen 'FreeSound.org'. The original audio was trimmed and renamed" source: "https://freesound.org/people/pfranzen/sounds/322744/" - + - files: ["dog_bark1.ogg"] license: "CC0-1.0" copyright: "Audio is recorded/created by KFerentchak 'FreeSound.org'. The original audio was trimmed and renamed" - source: "https://freesound.org/people/KFerentchak/sounds/235912/" - + source: "https://freesound.org/people/KFerentchak/sounds/235912/" + - files: ["dog_bark2.ogg"] license: "CC0-1.0" copyright: "Audio is recorded/created by KFerentchak 'FreeSound.org'. The original audio was trimmed and renamed" - source: "https://freesound.org/people/KFerentchak/sounds/235912/" - + source: "https://freesound.org/people/KFerentchak/sounds/235912/" + - files: ["dog_bark3.ogg"] license: "CC0-1.0" copyright: "Audio is recorded/created by KFerentchak 'FreeSound.org'. The original audio was trimmed and renamed" source: "https://freesound.org/people/KFerentchak/sounds/235912/" - + - files: ["nymph_chirp.ogg"] license: "CC-BY-SA-3.0" copyright: "Taken from ParadiseSS13" source: "https://github.com/ParadiseSS13/Paradise/commit/a34f1054cef5a44a67fdac3b67b811137c6071dd" - \ No newline at end of file + +- files: + - fox1.ogg + - fox2.ogg + - fox3.ogg + - fox4.ogg + - fox5.ogg + - fox6.ogg + - fox7.ogg + - fox8.ogg + - fox9.ogg + - fox10.ogg + - fox11.ogg + - fox12.ogg + - fox13.ogg + - fox14.ogg + copyright: "Created by fujiwaranao" + license: "CC-BY-NC-SA-4.0" + source: "https://github.com/space-wizards/space-station-14/pull/27578" diff --git a/Resources/Audio/Animals/fox1.ogg b/Resources/Audio/Animals/fox1.ogg new file mode 100644 index 00000000000..40fe16cc52b Binary files /dev/null and b/Resources/Audio/Animals/fox1.ogg differ diff --git a/Resources/Audio/Animals/fox10.ogg b/Resources/Audio/Animals/fox10.ogg new file mode 100644 index 00000000000..2a9e156dc56 Binary files /dev/null and b/Resources/Audio/Animals/fox10.ogg differ diff --git a/Resources/Audio/Animals/fox11.ogg b/Resources/Audio/Animals/fox11.ogg new file mode 100644 index 00000000000..d294137dc1b Binary files /dev/null and b/Resources/Audio/Animals/fox11.ogg differ diff --git a/Resources/Audio/Animals/fox12.ogg b/Resources/Audio/Animals/fox12.ogg new file mode 100644 index 00000000000..c413af81c74 Binary files /dev/null and b/Resources/Audio/Animals/fox12.ogg differ diff --git a/Resources/Audio/Animals/fox13.ogg b/Resources/Audio/Animals/fox13.ogg new file mode 100644 index 00000000000..197a9e43392 Binary files /dev/null and b/Resources/Audio/Animals/fox13.ogg differ diff --git a/Resources/Audio/Animals/fox14.ogg b/Resources/Audio/Animals/fox14.ogg new file mode 100644 index 00000000000..1d9c99889d8 Binary files /dev/null and b/Resources/Audio/Animals/fox14.ogg differ diff --git a/Resources/Audio/Animals/fox2.ogg b/Resources/Audio/Animals/fox2.ogg new file mode 100644 index 00000000000..7aeb7da9118 Binary files /dev/null and b/Resources/Audio/Animals/fox2.ogg differ diff --git a/Resources/Audio/Animals/fox3.ogg b/Resources/Audio/Animals/fox3.ogg new file mode 100644 index 00000000000..561b313f419 Binary files /dev/null and b/Resources/Audio/Animals/fox3.ogg differ diff --git a/Resources/Audio/Animals/fox4.ogg b/Resources/Audio/Animals/fox4.ogg new file mode 100644 index 00000000000..6805d0e8481 Binary files /dev/null and b/Resources/Audio/Animals/fox4.ogg differ diff --git a/Resources/Audio/Animals/fox5.ogg b/Resources/Audio/Animals/fox5.ogg new file mode 100644 index 00000000000..5aefa939cc0 Binary files /dev/null and b/Resources/Audio/Animals/fox5.ogg differ diff --git a/Resources/Audio/Animals/fox6.ogg b/Resources/Audio/Animals/fox6.ogg new file mode 100644 index 00000000000..d23cca5ff22 Binary files /dev/null and b/Resources/Audio/Animals/fox6.ogg differ diff --git a/Resources/Audio/Animals/fox7.ogg b/Resources/Audio/Animals/fox7.ogg new file mode 100644 index 00000000000..d4da91e73bf Binary files /dev/null and b/Resources/Audio/Animals/fox7.ogg differ diff --git a/Resources/Audio/Animals/fox8.ogg b/Resources/Audio/Animals/fox8.ogg new file mode 100644 index 00000000000..52337a640b1 Binary files /dev/null and b/Resources/Audio/Animals/fox8.ogg differ diff --git a/Resources/Audio/Animals/fox9.ogg b/Resources/Audio/Animals/fox9.ogg new file mode 100644 index 00000000000..eb161ccdafc Binary files /dev/null and b/Resources/Audio/Animals/fox9.ogg differ diff --git a/Resources/Audio/Announcements/attributions.yml b/Resources/Audio/Announcements/attributions.yml index 879bfe7f600..774b0da5a09 100644 --- a/Resources/Audio/Announcements/attributions.yml +++ b/Resources/Audio/Announcements/attributions.yml @@ -7,3 +7,8 @@ license: "CC-BY-SA-3.0" copyright: "Paradise, volume and pitch changed, merged with redalert.ogg" source: "https://github.com/ParadiseSS13/Paradise/blob/07b26ee6b4a11a0607986d322ee007020569feae/sound/effects/siren.ogg" + +- files: ["intercept.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Taken from tgstation" + source: "https://github.com/tgstation/tgstation/blob/95731342b97167d7883ff091d389f79c36442ee6/sound/ai/default/intercept.ogg" diff --git a/Resources/Audio/Announcements/intercept.ogg b/Resources/Audio/Announcements/intercept.ogg new file mode 100644 index 00000000000..3569a07d401 Binary files /dev/null and b/Resources/Audio/Announcements/intercept.ogg differ diff --git a/Resources/Audio/DeltaV/Effects/attributions.yml b/Resources/Audio/DeltaV/Effects/attributions.yml new file mode 100644 index 00000000000..6a4a98a7ee2 --- /dev/null +++ b/Resources/Audio/DeltaV/Effects/attributions.yml @@ -0,0 +1,4 @@ +- files: ["clang2.ogg"] + license: "CC-BY-NC-3.0" + copyright: "Freesound user BristolStories" + source: "https://freesound.org/people/BristolStories/sounds/65915/" diff --git a/Resources/Audio/DeltaV/Effects/clang2.ogg b/Resources/Audio/DeltaV/Effects/clang2.ogg new file mode 100644 index 00000000000..74f0909a9ee Binary files /dev/null and b/Resources/Audio/DeltaV/Effects/clang2.ogg differ diff --git a/Resources/Audio/Effects/Footsteps/attributions.yml b/Resources/Audio/Effects/Footsteps/attributions.yml index 82b5fa93ca2..91c3ce260d4 100644 --- a/Resources/Audio/Effects/Footsteps/attributions.yml +++ b/Resources/Audio/Effects/Footsteps/attributions.yml @@ -71,3 +71,10 @@ license: "CC-BY-SA-3.0" copyright: "Taken from tgstation" source: "https://github.com/tgstation/tgstation/tree/1e8d511946d194f92f744f5f957a7c41683d84a6/sound/effects/footstep" + +- files: + - borgwalk1.ogg + - borgwalk2.ogg + license: "CC-BY-SA-4.0" + copyright: "Taken from IENBA freesound.org and modified by https://github.com/MilenVolf" + source: "https://freesound.org/people/IENBA/sounds/697379/" diff --git a/Resources/Audio/Effects/Footsteps/borgwalk1.ogg b/Resources/Audio/Effects/Footsteps/borgwalk1.ogg new file mode 100644 index 00000000000..3305a52ea22 Binary files /dev/null and b/Resources/Audio/Effects/Footsteps/borgwalk1.ogg differ diff --git a/Resources/Audio/Effects/Footsteps/borgwalk2.ogg b/Resources/Audio/Effects/Footsteps/borgwalk2.ogg new file mode 100644 index 00000000000..96c2c1617f4 Binary files /dev/null and b/Resources/Audio/Effects/Footsteps/borgwalk2.ogg differ diff --git a/Resources/Audio/Effects/Grenades/SelfDestruct/SDS_Charge.ogg b/Resources/Audio/Effects/Grenades/SelfDestruct/SDS_Charge.ogg new file mode 100644 index 00000000000..5efc8f443be Binary files /dev/null and b/Resources/Audio/Effects/Grenades/SelfDestruct/SDS_Charge.ogg differ diff --git a/Resources/Audio/Effects/Grenades/SelfDestruct/SDS_Charge2.ogg b/Resources/Audio/Effects/Grenades/SelfDestruct/SDS_Charge2.ogg new file mode 100644 index 00000000000..662254fbaa9 Binary files /dev/null and b/Resources/Audio/Effects/Grenades/SelfDestruct/SDS_Charge2.ogg differ diff --git a/Resources/Audio/Effects/Grenades/SelfDestruct/attributions.yml b/Resources/Audio/Effects/Grenades/SelfDestruct/attributions.yml new file mode 100644 index 00000000000..cb8a4257390 --- /dev/null +++ b/Resources/Audio/Effects/Grenades/SelfDestruct/attributions.yml @@ -0,0 +1,8 @@ +- files: + - SDS_Charge.ogg + - SDS_Charge2.ogg + license: Custom + source: https://freesound.org/people/Teh_Bucket/sounds/518739/ + # couldn't figure out how to source multiple (the right way) without shit breaking so heres the rest: https://pixabay.com/sound-effects/switchbigpowerwav-14710/ https://pixabay.com/sound-effects/shield-recharging-107016/ + copyright: '"Electric Charge + Shot" by Teh_Bucket on Freesound.org. This is adapted from multiple works by dylanperitz, satanicupsman, CaptainGusterd, arightwizard, BigKahuna360, michael_grinnell, weaveofkev, MichelleGrobler, Alex_John73, sandyrb and breo2012 all of Freesound.org. The work by sandyrb is licensed under CC-BY-4.0. , "switchbigpower-14710.wav" and "shield-recharging-107016.wav" by Pixabay on pixabay.com' + # i have no idea how to set these up, it uses all 3 sound effects and i copied the electric charge one from the powersink, godo diff --git a/Resources/Audio/Effects/Shadowkin/darkswapoff.ogg b/Resources/Audio/Effects/Shadowkin/darkswapoff.ogg new file mode 100644 index 00000000000..61f331a68a1 Binary files /dev/null and b/Resources/Audio/Effects/Shadowkin/darkswapoff.ogg differ diff --git a/Resources/Audio/Effects/Shadowkin/darkswapon.ogg b/Resources/Audio/Effects/Shadowkin/darkswapon.ogg new file mode 100644 index 00000000000..deb6139934e Binary files /dev/null and b/Resources/Audio/Effects/Shadowkin/darkswapon.ogg differ diff --git a/Resources/Audio/Effects/Shadowkin/futuristic-teleport.ogg b/Resources/Audio/Effects/Shadowkin/futuristic-teleport.ogg new file mode 100644 index 00000000000..87aeb33fdd9 Binary files /dev/null and b/Resources/Audio/Effects/Shadowkin/futuristic-teleport.ogg differ diff --git a/Resources/Audio/Effects/Shadowkin/license.txt b/Resources/Audio/Effects/Shadowkin/license.txt new file mode 100644 index 00000000000..d87bd10983a --- /dev/null +++ b/Resources/Audio/Effects/Shadowkin/license.txt @@ -0,0 +1,4 @@ +darkswapon.ogg licensed under Pixabay Licence taken from https://pixabay.com/users/cristian_changing-30278997/ +darkswapoff.ogg licensed under Pixabay Licence taken from https://pixabay.com/users/cristian_changing-30278997/ +futuristic-teleport.ogg licensed under Pixabay Licence taken from https://pixabay.com/users/cristian_changing-30278997/ +shadeskip.ogg licensed under Pixabay Licence taken from https://pixabay.com/users/cristian_changing-30278997/ diff --git a/Resources/Audio/Effects/Shadowkin/shadeskip.ogg b/Resources/Audio/Effects/Shadowkin/shadeskip.ogg new file mode 100644 index 00000000000..3cca66b47cb Binary files /dev/null and b/Resources/Audio/Effects/Shadowkin/shadeskip.ogg differ diff --git a/Resources/Audio/Effects/attributions.yml b/Resources/Audio/Effects/attributions.yml index 2554b84bd30..7199a008eb0 100644 --- a/Resources/Audio/Effects/attributions.yml +++ b/Resources/Audio/Effects/attributions.yml @@ -232,3 +232,22 @@ license: "CC-BY-SA-3.0" source: https://github.com/YuriyKiss/space-station-14/commit/971a135a9c83aed46e967aac9302ab5b35562b5f +- files: ["magic_missile_1.ogg"] + license: "CC-BY-SA-4.0" + copyright: "From battle for wesnoth" + source: "https://github.com/wesnoth/wesnoth" + +- files: ["magic_missile_2.ogg"] + license: "CC-BY-SA-4.0" + copyright: "From battle for wesnoth" + source: "https://github.com/wesnoth/wesnoth" + +- files: ["magic_missile_3.ogg"] + license: "CC-BY-SA-4.0" + copyright: "From battle for wesnoth" + source: "https://github.com/wesnoth/wesnoth" + +- files: ["wail.ogg"] + license: "CC-BY-SA-4.0" + copyright: "From battle for wesnoth" + source: "https://github.com/wesnoth/wesnoth" diff --git a/Resources/Audio/Effects/chopstickbreak.ogg b/Resources/Audio/Effects/chopstickbreak.ogg new file mode 100644 index 00000000000..bac8ac04621 Binary files /dev/null and b/Resources/Audio/Effects/chopstickbreak.ogg differ diff --git a/Resources/Audio/Effects/magic_missile_1.ogg b/Resources/Audio/Effects/magic_missile_1.ogg new file mode 100644 index 00000000000..331a3efc54e Binary files /dev/null and b/Resources/Audio/Effects/magic_missile_1.ogg differ diff --git a/Resources/Audio/Effects/magic_missile_2.ogg b/Resources/Audio/Effects/magic_missile_2.ogg new file mode 100644 index 00000000000..8aac11d665e Binary files /dev/null and b/Resources/Audio/Effects/magic_missile_2.ogg differ diff --git a/Resources/Audio/Effects/magic_missile_3.ogg b/Resources/Audio/Effects/magic_missile_3.ogg new file mode 100644 index 00000000000..b7f4e941117 Binary files /dev/null and b/Resources/Audio/Effects/magic_missile_3.ogg differ diff --git a/Resources/Audio/Effects/spray3.ogg b/Resources/Audio/Effects/spray3.ogg new file mode 100644 index 00000000000..a9f493198c7 Binary files /dev/null and b/Resources/Audio/Effects/spray3.ogg differ diff --git a/Resources/Audio/Effects/wail.ogg b/Resources/Audio/Effects/wail.ogg new file mode 100644 index 00000000000..b40ec5ab252 Binary files /dev/null and b/Resources/Audio/Effects/wail.ogg differ diff --git a/Resources/Audio/Expedition/attributions.yml b/Resources/Audio/Expedition/attributions.yml new file mode 100644 index 00000000000..8bafcc6f112 --- /dev/null +++ b/Resources/Audio/Expedition/attributions.yml @@ -0,0 +1,9 @@ +- files: ["tension_session.ogg"] + license: "CC-BY-3.0" + copyright: "Created by qwertyquerty" + source: "https://www.youtube.com/@qwertyquerty" + +- files: ["deadline.ogg"] + license: "CC-BY-4.0" + copyright: "Bolgarich" + source: "https://www.youtube.com/watch?v=q7_NFEeeEac" diff --git a/Resources/Audio/Expedition/deadline.ogg b/Resources/Audio/Expedition/deadline.ogg new file mode 100644 index 00000000000..131016d8919 Binary files /dev/null and b/Resources/Audio/Expedition/deadline.ogg differ diff --git a/Resources/Audio/Misc/tension_session.ogg b/Resources/Audio/Expedition/tension_session.ogg similarity index 100% rename from Resources/Audio/Misc/tension_session.ogg rename to Resources/Audio/Expedition/tension_session.ogg diff --git a/Resources/Audio/Items/attributions.yml b/Resources/Audio/Items/attributions.yml index c6fea50bd25..b3ae4f611f9 100644 --- a/Resources/Audio/Items/attributions.yml +++ b/Resources/Audio/Items/attributions.yml @@ -93,6 +93,16 @@ copyright: "User Hanbaal on freesound.org. Converted to ogg by TheShuEd" source: "https://freesound.org/people/Hanbaal/sounds/178669/" +- files: ["soda_shake.ogg"] + license: "CC-BY-NC-4.0" + copyright: "User mcmast on freesound.org. Converted and edited by Tayrtahn" + source: "https://freesound.org/people/mcmast/sounds/456703/" + +- files: ["soda_spray.ogg"] + license: "CC0-1.0" + copyright: "User Hajisounds on freesound.org. Converted and edited by Tayrtahn" + source: "https://freesound.org/people/Hajisounds/sounds/709149/" + - files: ["newton_cradle.ogg"] license: "CC-BY-4.0" copyright: "User LoafDV on freesound.org. Converted to ogg end edited by lzk228" @@ -117,3 +127,10 @@ license: "CC0-1.0" copyright: "Original sound by stomachache on freesound.org, processed by vanilla" source: "https://freesound.org/s/262213/" + +- files: + - "sheath.ogg" + - "unsheath.ogg" + license: "CC-BY-SA-3.0" + copyright: "Taken from tgstation." + source: "https://github.com/tgstation/tgstation/blob/a7f525bce9a359ab5282fc754078cd4b5678a006/sound/items" diff --git a/Resources/Audio/Items/sheath.ogg b/Resources/Audio/Items/sheath.ogg new file mode 100644 index 00000000000..9e1d5cdc009 Binary files /dev/null and b/Resources/Audio/Items/sheath.ogg differ diff --git a/Resources/Audio/Items/soda_shake.ogg b/Resources/Audio/Items/soda_shake.ogg new file mode 100644 index 00000000000..a596379c93a Binary files /dev/null and b/Resources/Audio/Items/soda_shake.ogg differ diff --git a/Resources/Audio/Items/soda_spray.ogg b/Resources/Audio/Items/soda_spray.ogg new file mode 100644 index 00000000000..f4a5a3e803f Binary files /dev/null and b/Resources/Audio/Items/soda_spray.ogg differ diff --git a/Resources/Audio/Items/unsheath.ogg b/Resources/Audio/Items/unsheath.ogg new file mode 100644 index 00000000000..09867f5966a Binary files /dev/null and b/Resources/Audio/Items/unsheath.ogg differ diff --git a/Resources/Audio/Jukebox/attributions.yml b/Resources/Audio/Jukebox/attributions.yml index 8e48560ac68..48e1458c4c0 100644 --- a/Resources/Audio/Jukebox/attributions.yml +++ b/Resources/Audio/Jukebox/attributions.yml @@ -20,3 +20,8 @@ license: "CC-BY-3.0" copyright: "Constellations by Qwertyquerty. Converted to mono OGG." source: "https://www.youtube.com/channel/UCPYbhBUGhH7n_G4HLK2YipQ" + +- files: ["sunset.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Sunset by PigeonBeans. Exported in Mono OGG." + source: "https://soundcloud.com/pigeonbeans/sunset" \ No newline at end of file diff --git a/Resources/Audio/Jukebox/sunset.ogg b/Resources/Audio/Jukebox/sunset.ogg new file mode 100644 index 00000000000..3f6d909eaa1 Binary files /dev/null and b/Resources/Audio/Jukebox/sunset.ogg differ diff --git a/Resources/Audio/Lobby/attributions.yml b/Resources/Audio/Lobby/attributions.yml index d7c40f1741e..09abe463ca5 100644 --- a/Resources/Audio/Lobby/attributions.yml +++ b/Resources/Audio/Lobby/attributions.yml @@ -1,70 +1,4 @@ -- files: ["thunderdome.ogg"] +- files: ["01 The Gamble.ogg", "02 Guilty Pleasures.ogg", "03 Jazzcuzzi.ogg", "04 The Walk.ogg", "05 Velvet Bossa.ogg", "06 Colors.ogg", "07 Midnight Jam.ogg", "08 Miles Ahead.ogg", "09 Moody.ogg", "10 Flying Away.ogg", "11 Take It Easy.ogg"] license: "CC-BY-NC-SA-3.0" - copyright: "-Sector11 by MashedByMachines. Converted from MP3 to OGG." - source: "https://www.newgrounds.com/audio/listen/312622" - -- files: ["endless_space.ogg"] - license: "CC-BY-3.0" - copyright: "Endless Space by SolusLunes. Converted from MP3 to OGG." - source: "https://www.newgrounds.com/audio/listen/67583" - -- files: ["space_asshole.ogg"] - license: "Custom" - copyright: "Space Asshole by Chris Remo is used with special permission from the author, under the condition that the project remains non-commercial and open source. The author also requested that a link to his bandcamp be included: https://chrisremo.bandcamp.com/" - source: "https://idlethumbs.bandcamp.com/track/space-asshole" - # The source is a direct link the the track, but not the "main" bandcamp of the author. Hence the link is also included separately in the copyright. - -- files: ["absconditus.ogg"] - license: "CC-BY-NC-SA-3.0" - copyright: "Absconditus by ZhayTee. Converted from MP3 to OGG." - source: "https://bandcamp.zhaytee.net/track/absconditus" - -- files: ["atomicamnesiammx.ogg"] - license: "CC-BY-NC-SA-3.0" - copyright: "Atomic Amnesia MMX by Philip Dyer. Converted from MP3 to OGG." - source: "https://soundcloud.com/3kliksphilip/atomic-amnesia-mmx-1" - -- files: ["singuloose.ogg"] - license: "CC-BY-NC-SA-3.0" - copyright: "Singuloose by Janis Schiedková. Converted from MP3 to OGG." - source: "https://soundcloud.com/js_m/singuloose" - -- files: ["title2.ogg"] - license: "Custom" - copyright: "Originally composed by Jonathan Dunn for Robocop 2 Gameboy published by Ocean Software. Remixed by Eric Shumaker for his video Dilbert 3. As of October 9th, 2008 nobody owns the rights to this song and copyright action has never been taken against anyone using this song in their projects." - source: "https://www.youtube.com/watch?v=4o6_8Unj2mQ" - -- files: ["title3.ogg"] - license: "CC-BY-NC-SA-3.0" - copyright: "Title3 by Cuboos. It is a remix of the song 'Tintin on the Moon'. Converted from MP3 to OGG." - source: "https://www.youtube.com/watch?v=YKVmXn-Gv0M" - -- files: ["comet_haley.ogg"] - license: "CC-BY-NC-SA-3.0" - copyright: "Comet Haley by Stellardrone. Converted from MP3 to OGG." - source: "https://freemusicarchive.org/music/Stellardrone/Light_Years_1227/07_Comet_Halley" - -- files: ["mod.flip-flap.ogg"] - license: "Custom" - copyright: "Flip Flap by X-ceed is licensed under a short but clear license (see flip-flap.txt in this directory) and is free for non-commercial use. It was converted from MOD to WAV using Schism Tracker, in 16 Bit, Non-Interpolated mode, no output equalizer settings, Ramp volume at start of sample enabled. From there it was converted to OGG Vorbis with `ffmpeg -i flip-flap.wav -q 2.9 flip-flap-renc.ogg` (quality scale chosen to match size of the OGG file being replaced). Non-interpolated mode was chosen as the module has a high enough sample rate to balance it out, but seems muffled in other interpolation modes. If 'Ramp volume at start of sample' is not enabled, a clicking phenomenon results." - source: "http://aminet.net/package/mods/xceed/Flipflap" - -- files: ["Spac_Stac.ogg"] - license: "CC-BY-NC-SA-3.0" - copyright: "Spac Stac by Hayabusa. Converted from MP3 to OGG." - source: "https://www.youtube.com/watch?v=grUBe-SZgr0" - -- files: ["pwmur.ogg"] - license: "CC-BY-NC-SA-3.0" - copyright: "phoron will make us rich by Alexander Divine." - source: "https://soundcloud.com/alexanderdivine/phoron-will-make-us-rich" - -- files: ["lasers_rip_apart_the_bulkhead.ogg"] - license: "CC-BY-NC-SA-3.0" - copyright: "lasers rip apart the bulkhead by Alexander Divine." - source: "https://soundcloud.com/alexanderdivine/lasers-rip-apart-the-bulkhead" - -- files: ["every_light_is_blinking_at_once.ogg"] - license: "CC-BY-NC-SA-3.0" - copyright: "every light is blinking at once by Alexander Divine." - source: "https://soundcloud.com/alexanderdivine/every-light-is-blinking-at-once" \ No newline at end of file + copyright: "All songs used are produced by Danya Vodovoz, royalty free." + source: "https://soundcloud.com/danyavodovoz" diff --git a/Resources/Audio/Machines/warning_buzzer.ogg b/Resources/Audio/Machines/warning_buzzer.ogg index 55bb179f57d..bef16f46fb9 100644 Binary files a/Resources/Audio/Machines/warning_buzzer.ogg and b/Resources/Audio/Machines/warning_buzzer.ogg differ diff --git a/Resources/Audio/Voice/Shadowkin/attributions.yml b/Resources/Audio/Voice/Shadowkin/attributions.yml new file mode 100644 index 00000000000..4ab746f4659 --- /dev/null +++ b/Resources/Audio/Voice/Shadowkin/attributions.yml @@ -0,0 +1,4 @@ +- files: ["wurble.ogg", "mar.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Taken from CHOMPStation" + source: "https://github.com/CHOMPStation2/CHOMPStation2" \ No newline at end of file diff --git a/Resources/Audio/Voice/Shadowkin/mar.ogg b/Resources/Audio/Voice/Shadowkin/mar.ogg new file mode 100644 index 00000000000..b13d2df8377 Binary files /dev/null and b/Resources/Audio/Voice/Shadowkin/mar.ogg differ diff --git a/Resources/Audio/Voice/Shadowkin/wurble.ogg b/Resources/Audio/Voice/Shadowkin/wurble.ogg new file mode 100644 index 00000000000..859c9df3530 Binary files /dev/null and b/Resources/Audio/Voice/Shadowkin/wurble.ogg differ diff --git a/Resources/Audio/Voice/Silicon/attributions.yml b/Resources/Audio/Voice/Silicon/attributions.yml new file mode 100644 index 00000000000..465f8455036 --- /dev/null +++ b/Resources/Audio/Voice/Silicon/attributions.yml @@ -0,0 +1,4 @@ +- files: ["syndieborg_laugh.ogg"] + license: "CC0-1.0" + copyright: "Taken from vultraz168 freesound.org and modified by https://github.com/MilenVolf" + source: "https://freesound.org/people/vultraz168/sounds/334665/" diff --git a/Resources/Audio/Voice/Silicon/syndieborg_laugh.ogg b/Resources/Audio/Voice/Silicon/syndieborg_laugh.ogg new file mode 100644 index 00000000000..e0f425301e2 Binary files /dev/null and b/Resources/Audio/Voice/Silicon/syndieborg_laugh.ogg differ diff --git a/Resources/Audio/Voice/Talk/Silicon/attributions.yml b/Resources/Audio/Voice/Talk/Silicon/attributions.yml new file mode 100644 index 00000000000..3a16007758e --- /dev/null +++ b/Resources/Audio/Voice/Talk/Silicon/attributions.yml @@ -0,0 +1,10 @@ +- files: + - borg.ogg + - borg_ask.ogg + - borg_exclaim.ogg + - syndieborg.ogg + - syndieborg_ask.ogg + - syndieborg_exclaim.ogg + license: "CC-BY-SA-4.0" + copyright: "Recorded and mixed by https://github.com/MilenVolf" + source: "https://github.com/space-wizards/space-station-14/pull/27205" diff --git a/Resources/Audio/Voice/Talk/Silicon/borg.ogg b/Resources/Audio/Voice/Talk/Silicon/borg.ogg new file mode 100644 index 00000000000..afb97390352 Binary files /dev/null and b/Resources/Audio/Voice/Talk/Silicon/borg.ogg differ diff --git a/Resources/Audio/Voice/Talk/Silicon/borg_ask.ogg b/Resources/Audio/Voice/Talk/Silicon/borg_ask.ogg new file mode 100644 index 00000000000..fe2f60141aa Binary files /dev/null and b/Resources/Audio/Voice/Talk/Silicon/borg_ask.ogg differ diff --git a/Resources/Audio/Voice/Talk/Silicon/borg_exclaim.ogg b/Resources/Audio/Voice/Talk/Silicon/borg_exclaim.ogg new file mode 100644 index 00000000000..5f0fdfe89e5 Binary files /dev/null and b/Resources/Audio/Voice/Talk/Silicon/borg_exclaim.ogg differ diff --git a/Resources/Audio/Voice/Talk/Silicon/syndieborg.ogg b/Resources/Audio/Voice/Talk/Silicon/syndieborg.ogg new file mode 100644 index 00000000000..60eb1a5ccfa Binary files /dev/null and b/Resources/Audio/Voice/Talk/Silicon/syndieborg.ogg differ diff --git a/Resources/Audio/Voice/Talk/Silicon/syndieborg_ask.ogg b/Resources/Audio/Voice/Talk/Silicon/syndieborg_ask.ogg new file mode 100644 index 00000000000..acafe456425 Binary files /dev/null and b/Resources/Audio/Voice/Talk/Silicon/syndieborg_ask.ogg differ diff --git a/Resources/Audio/Voice/Talk/Silicon/syndieborg_exclaim.ogg b/Resources/Audio/Voice/Talk/Silicon/syndieborg_exclaim.ogg new file mode 100644 index 00000000000..392b4fd1cca Binary files /dev/null and b/Resources/Audio/Voice/Talk/Silicon/syndieborg_exclaim.ogg differ diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 6a8111cec5e..f109ad51463 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -6381,3 +6381,1475 @@ Entries: id: 6363 time: '2024-09-16T04:41:44.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/919 +- author: Mnemotechnician + changes: + - type: Add + message: >- + Pulling has been reworked. Your character will now try to continuously + push the pulled entity when you use the push keybind. + - type: Remove + message: >- + You can no longer push the pulled entity while walking, and pushing now + follows the momentum conservation laws. + id: 6364 + time: '2024-09-17T23:38:45.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/883 +- author: VMSolidus + changes: + - type: Tweak + message: >- + Core now has a 6-Core AME, which is supplied with two jars of fuel. This + should give Engineers significantly more than 20 minutes of time to + setup the Supermatter engine. + id: 6365 + time: '2024-09-17T23:39:07.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/927 +- author: JayJacobs + changes: + - type: Tweak + message: Changed the sprite of the barber chair. + - type: Fix + message: Fixed bench textures. + id: 6366 + time: '2024-09-17T23:39:57.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/925 +- author: zelezniciar + changes: + - type: Tweak + message: The fireaxe once again can pry subfloors + id: 6367 + time: '2024-09-17T23:40:13.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/921 +- author: VMSolidus + changes: + - type: Fix + message: >- + Cloning Consoles will now correctly state when a body has the + Uncloneable trait. + id: 6368 + time: '2024-09-18T04:30:39.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/926 +- author: Spatison + changes: + - type: Add + message: Added lying down system / Добавлена система лежания + - type: Tweak + message: >- + Lying down now uses do-afters that are visible to other people to + indicate what is going on. + - type: Add + message: Added telescope system / Добавлена система прицеливания + - type: Tweak + message: Now you can aim from Hristov / Теперь можно прицеливаться из Христова + id: 6369 + time: '2024-09-19T02:18:35.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/815 +- author: FoxxoTrystan + changes: + - type: Remove + message: DeltaV Option Tab (Options moved) + id: 6370 + time: '2024-09-19T02:24:25.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/928 +- author: Hell_Cat + changes: [] + id: 6371 + time: '2024-09-19T03:29:41.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/929 +- author: VMSolidus + changes: + - type: Fix + message: >- + Fixed issues with the LayingDownSystem. Laying down no longer causes all + entities on your screen to lay down at once. Using any movement input no + longer causes the character to appear to the player as to be laying + down. + id: 6372 + time: '2024-09-19T20:37:51.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/933 +- author: VMSolidus + changes: + - type: Fix + message: >- + UniversalLanguageSpeaker(And Xenoglossy by extension) will now appear in + your language menu alongside other known languages, rather than replace + all known languages. You can effectively now choose whether or not to + speak it, or to use a normal language. + - type: Add + message: Traits can now add Languages directly. + - type: Add + message: Traits can now remove Languages directly. + id: 6373 + time: '2024-09-20T01:47:52.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/899 +- author: VMSolidus + changes: + - type: Add + message: >- + Melee Weapons can now individually define their interactions with the + ContestsSystem. + - type: Add + message: >- + Added the ContestArgs type, allowing arbitrarily any component to + contain a list of arguments for ContestSystems. + - type: Add + message: >- + Added the ContestConstructor, a new type of meta-Contest that enables + other systems to use components to define all possible contest + behaviors, rather than needing to hardcode specific interactions. + id: 6374 + time: '2024-09-20T02:48:43.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/934 +- author: gluesniffler + changes: + - type: Add + message: >- + Adds an optional server variable which allows entities to crawl under + tables. + - type: Tweak + message: >- + Tables and plastic flaps are less resistant to damage, and can now be + targeted by guns by aiming on top of them. + id: 6375 + time: '2024-09-20T19:34:02.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/939 +- author: ODJ + changes: + - type: Tweak + message: Tweaked melee; Less stamina usage on heavy attacks. + id: 6376 + time: '2024-09-20T19:34:46.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/938 +- author: VMSolidus + changes: + - type: Tweak + message: >- + JukeOperator now allows for JukeDuration and JukeCooldown arguments. + JukeCooldown is a new feature where enemies must wait an amount of time + in seconds equal to the JukeCooldown, before they are allowed to attempt + to dodge a melee attack. + - type: Tweak + message: >- + By default, NPCs will only attempt to dodge attacks once every 5 + seconds. + - type: Fix + message: >- + JukeOperator now performs extremely expensive math 5000 times less + often. EXIT CONDITIONS PEOPLE! + id: 6377 + time: '2024-09-20T20:05:31.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/935 +- author: VMSolidus + changes: + - type: Add + message: >- + All "Long-arms", Rifles, Light Machine Guns, Shotguns, now require + wielding to use. + id: 6378 + time: '2024-09-20T20:35:43.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/913 +- author: zelezniciar + changes: + - type: Add + message: Added Atmospheric Alerts Computer + id: 6379 + time: '2024-09-20T21:46:38.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/922 +- author: VMSolidus + changes: + - type: Add + message: 'A basic Languages menu has been added into the Traits tab. ' + - type: Add + message: >- + Tau-Ceti Basic, Tradeband, Freespeak, Elyran Standard, Sol Common, and + Sign Language have been added to the Languages tab. + id: 6380 + time: '2024-09-20T21:46:47.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/936 +- author: VMSolidus + changes: + - type: Remove + message: >- + Removed the "Become Psionic" traitor objective. It was literally + impossible to fail if you took the Latent Psychic trait, and literally + impossible to greentext if you didn't. + id: 6381 + time: '2024-09-20T21:47:16.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/940 +- author: VMSolidus + changes: + - type: Add + message: Part Upgrading has returned! + id: 6382 + time: '2024-09-21T22:46:49.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/917 +- author: Spatison + changes: + - type: Add + message: Added discounts in uplink / Добавлены скидки в аплинк + id: 6383 + time: '2024-09-21T22:46:59.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/930 +- author: VMSolidus + changes: + - type: Add + message: >- + Healing Word has been added as a new Psionic Power. When cast on another + person, it heals a small amount of every damage type(scaling with + Casting Stats), while also reducing rot timers. Healing Word has a very + short cooldown, and a fairly low Glimmer cost. + - type: Add + message: >- + Breath of Life has been added as a new extremely rare Psionic Power. + When cast on another person, it heals a large amount of damage(scaling + with Casting Stats), while also substantially reducing rot timers. + Additionally, it will revive the target if it is possible to do so. + Breath of Life has an incredibly long cooldown, a long interuptable cast + time, and an extraordinarily high glimmer cost(A typical Psion will + spike glimmer by more than 50 points when casting it). + - type: Add + message: The Chaplain now starts with the Healing Word power. + id: 6384 + time: '2024-09-21T22:50:01.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/942 +- author: VMSolidus + changes: + - type: Add + message: >- + Bottles, Drink Glasses, Plates, and all liquid containers are now struck + by bullets(and most likely destroyed in the process). We hope that this + will offer both a small tactical advantage/disadvantage, as well as + contribute to making gunfights around the bar more "Cinematic". + - type: Add + message: >- + Chairs are now hit by projectiles if a shooter clicks on them, in + addition to Tables. + id: 6385 + time: '2024-09-21T23:22:43.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/943 +- author: VMSolidus + changes: + - type: Fix + message: >- + Fixed a bug where Breath of Life and Healing Word would set living + people to crit, which would knock them down. + - type: Fix + message: >- + Fixed a bug where Breath of Life could revive people who were rotten(It + will still heal them and reduce the rot timer as intended, but will not + revive unless said rot timer reduction brings them below the 10 minute + threshold). + - type: Add + message: >- + The Do-After bar for Breath of Life and Healing Word is now hidden if + glimmer is low enough. The threshold for which scales with your + Dampening stat. More Dampening = stealthier casting. + id: 6386 + time: '2024-09-24T00:56:34.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/949 +- author: Mocho + changes: + - type: Add + message: >- + Added a lot of recipes to the quick construction menus. Give it a shot + by pressing Z with different construction materials in your hand! + id: 6387 + time: '2024-09-24T00:56:45.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/945 +- author: VMSolidus + changes: + - type: Fix + message: >- + IPC now weigh 71kg by default instead of 5kg. Seriously who the fuck + made the BeepBoops out of feathers!?! + id: 6388 + time: '2024-09-25T05:09:06.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/959 +- author: fenndragon + changes: + - type: Add + message: Added new neutral xenos, events, and reagent slimes + id: 6389 + time: '2024-09-26T15:06:54.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/956 +- author: VMSolidus + changes: + - type: Add + message: Backpacks, Duffelbags, and Satchels have been added to loadouts. + - type: Remove + message: >- + The button for "Backpack Preference" has been removed. Backpacks + selection is now done via Loadouts. + - type: Remove + message: >- + The button for "Suit/Skirt Preference" has also been removed. Suit + selection is done via Loadouts. + id: 6390 + time: '2024-09-28T00:46:19.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/957 +- author: VMSolidus + changes: + - type: Fix + message: Fixed a bug where the button to reboot IPCs wasn't appearing. + id: 6391 + time: '2024-09-28T02:23:54.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/963 +- author: VMSolidus + changes: + - type: Fix + message: Fix a crash related to Luminous Entities. + id: 6392 + time: '2024-09-28T02:28:40.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/954 +- author: VMSolidus + changes: + - type: Fix + message: >- + Smoking cigarettes or drinking loto oil will no longer spam moodlet + popup messages. + id: 6393 + time: '2024-09-28T02:30:18.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/948 +- author: Mnemotechnician + changes: + - type: Tweak + message: Noospheric events should once again occur on lower glimmer levels. + id: 6394 + time: '2024-09-28T02:43:48.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/969 +- author: Mnemotechnician + changes: + - type: Tweak + message: >- + Pushing something no longer causes your character to move, but only if + there is gravity holding you down. + - type: Tweak + message: >- + Pushing an object with Ctrl-RMB now pushes it continuously for up to 5 + seconds instead of 2. + id: 6395 + time: '2024-09-28T02:44:07.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/966 +- author: VMSolidus + changes: + - type: Add + message: Humans can now have tail and ear markings. + id: 6396 + time: '2024-09-28T03:10:14.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/964 +- author: VMSolidus + changes: + - type: Add + message: >- + Harpies now have their own species-specific language, called Valyrian + Standard + - type: Add + message: >- + Valyrian Standard can now be bought as an extra language in the Traits + menu. + id: 6397 + time: '2024-09-28T14:42:50.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/968 +- author: VMSolidus + changes: + - type: Fix + message: >- + Fixed a bug with Healing Word and Breath of Life where if the caster was + moved by another person mid-cast, they would permanently become unable + to cast it again. + id: 6398 + time: '2024-09-29T01:43:20.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/970 +- author: VMSolidus + changes: + - type: Remove + message: >- + Removed the Psionics Guidebook. It was straight up wrong about most + things, and is not ever going to be updated to match new Psionics + Content. You are fully intended to "FIND OUT IN GAME" how things work + through guessing, trial and error, and just pure happenstance. + Experiment with shit. The popups are intentionally vague. You're + supposed to think about what they mean. Stop asking admins in Ahelps + what the vague text means. + id: 6399 + time: '2024-09-29T01:43:32.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/972 +- author: Aikakakah + changes: + - type: Fix + message: Fixed markings having incomplete names for color sections + - type: Fix + message: Fixed IPC marking categories + id: 6400 + time: '2024-09-29T01:58:28.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/974 +- author: VMSolidus + changes: + - type: Fix + message: >- + Nerfed the fuck out of Reagent Slimes. They have 1/3rd as much HP, spawn + half as many during reagent slime vents, deal significantly less damage, + and inject a lot less chems when biting people. + id: 6401 + time: '2024-09-29T17:42:43.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/977 +- author: Mnemotechnician + changes: + - type: Fix + message: >- + Fixed multiple minor issues with interaction verbs. Most importantly, + interaction popups will now always be shown correctly. + id: 6402 + time: '2024-09-30T16:27:47.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/965 +- author: Spatison + changes: + - type: Fix + message: >- + The size of the Lobby cannot be changed now / Размер лобби теперь нельзя + изменить + id: 6403 + time: '2024-09-30T16:29:47.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/962 +- author: VMSolidus + changes: + - type: Add + message: Added Shadeskip as a new psionic power. + id: 6404 + time: '2024-09-30T18:04:20.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/987 +- author: VMSolidus + changes: + - type: Add + message: 'Mood System now has some interactions with Psionics. ' + id: 6405 + time: '2024-09-30T18:28:21.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/988 +- author: VMSolidus + changes: + - type: Add + message: >- + 7 new Psionic-related Traits have been added to the game: High + Psi-Potential, Low Psi-Potential, Power Overwhelming, kα Abundance, kα + Deficiency, kδ Proficient, and kδ Defect + - type: Add + message: >- + Oni now have a built-in negative trait that acts as a more severe + version of Low Psi-Potential. Oni now have significant penalties to + generating new Psionic Powers. + id: 6406 + time: '2024-09-30T18:28:31.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/983 +- author: Mnemotechnician + changes: + - type: Add + message: >- + Narcolepsy has been reworked. You can now know when you're about to fall + asleep, and can choose to go to sleep willingly to reset the narcolepsy + timer and avoid an incident. + id: 6407 + time: '2024-09-30T19:04:22.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/967 +- author: zelezniciar + changes: + - type: Fix + message: >- + Space dragons that get butchered or gibbed will now drop devoured + corpses. + id: 6408 + time: '2024-10-01T21:34:55.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/992 +- author: VMSolidus + changes: + - type: Fix + message: >- + Rampant Brand Intelligence has been unreverted. It was reverted by + complete accident a few weeks ago. I apologize to anyone who missed the + thrill of killing murderous vending machines. + id: 6409 + time: '2024-10-01T21:39:51.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/947 +- author: VMSolidus + changes: + - type: Fix + message: >- + Fixed the Markings menu by adding a scroll container to it. Markings + with greater than 2 color selections can now be used. + id: 6410 + time: '2024-10-01T21:43:17.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/997 +- author: VMSolidus + changes: + - type: Add + message: Immovable Rod Event has returned + - type: Add + message: >- + Immovable Rod Event has been made more fair. It won't automatically gib + people, just crit them with a ton of blunt damage(That you can survive + by wearing good armor), or just being an Oni funnily enough. + id: 6411 + time: '2024-10-02T01:31:29.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/973 +- author: VMSolidus + changes: + - type: Add + message: >- + Added a full Guidebook entry for Harpies. Unlike previous species + guidebooks, this document contains extensive lore and background + information for Harpies, in addition to notes on their game mechanics. + id: 6412 + time: '2024-10-02T01:32:07.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/993 +- author: VMSolidus + changes: + - type: Add + message: 13 new Kemonomimi-Style markings. 4 Ears, and 9 new tails! + id: 6413 + time: '2024-10-02T01:32:29.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/981 +- author: fenndragon + changes: + - type: Tweak + message: 'Tweaked the spawnrate of certain mobs within the ventcritters rule. ' + id: 6414 + time: '2024-10-02T01:34:19.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/982 +- author: VMSolidus + changes: + - type: Add + message: Grapple & Tether Guns have been re-added. + id: 6415 + time: '2024-10-02T02:19:46.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1000 +- author: Fansana + changes: + - type: Fix + message: Fixes door access for mail doors + id: 6416 + time: '2024-10-02T23:14:55.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/986 +- author: VMSolidus + changes: + - type: Add + message: Added Telekinetic Pulse power. + - type: Fix + message: Fixed a crash related to Shadeskip + id: 6417 + time: '2024-10-04T00:14:21.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1002 +- author: FoxxoTrystan + changes: + - type: Tweak + message: Directional Windows and Tables has gotten new sprites! + - type: Fix + message: AirAlarm Inverted Alert States has been fixed! + id: 6418 + time: '2024-10-04T00:25:33.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/958 +- author: VMSolidus + changes: + - type: Add + message: >- + Ported a Respawn System. This system allows players to return themselves + to the lobby, while also requiring that if they re-enter the round, that + they must do so on a different character. + id: 6419 + time: '2024-10-04T00:43:37.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/998 +- author: Mnemotechnician + changes: + - type: Fix + message: Winter boots are no longer able to protect you from insane temperatures. + id: 6420 + time: '2024-10-04T00:52:11.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1004 +- author: VMSolidus + changes: + - type: Fix + message: >- + Fixed a bug with CloningSystem. It now correctly spills blood upon + cloning fail. + id: 6421 + time: '2024-10-05T14:28:32.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1009 +- author: Mocho + changes: + - type: Fix + message: >- + Fixed downed entities having their draw depth set incorrectly after + being picked up, or laying on a bed. + id: 6422 + time: '2024-10-07T15:28:36.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1017 +- author: VMSolidus + changes: + - type: Tweak + message: >- + Nerfed Lotophagoi Moodlets so that both the positive and negative + moodlets only last for 10 minutes. The total mood modification has been + left untouched. + id: 6423 + time: '2024-10-07T15:29:05.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1013 +- author: VMSolidus + changes: + - type: Add + message: >- + Shadeskip no longer creates Stationwide Shadow Kudzu when casting at + high glimmer. + id: 6424 + time: '2024-10-07T15:29:16.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1012 +- author: VMSolidus + changes: + - type: Add + message: >- + The Salvage Shittle has been replaced with the Pathfinder Expedition + Vessel from Frontier. + id: 6425 + time: '2024-10-09T01:17:11.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1027 +- author: VMSolidus + changes: + - type: Add + message: Salvage techs can now buy a Crusher Dagger in their loadout. + - type: Fix + message: Re-Added the Crusher weapons to salvage spawners. + id: 6426 + time: '2024-10-09T01:17:38.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1026 +- author: Ichaie + changes: + - type: Add + message: A new map called NCS Gax has been added to rotation. + id: 6427 + time: '2024-10-09T01:37:57.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1019 +- author: VMSolidus + changes: + - type: Tweak + message: Almost all security loadout gear is now free. + - type: Remove + message: >- + All Security roles no longer spawn with a pistol by default. This has + been moved to Loadouts. + - type: Add + message: >- + Security characters can now choose from a selection of different + firearms to use as their Duty Weapon. Disablers, Mk58, and Inspector + revolvers are free, fancier weapons such as an N1984 can be bought with + loadout points. + - type: Add + message: Oni can opt to take a Truncheon in lieu of a handgun. + - type: Add + message: >- + Security characters can now take handgun magazines and spare magazines + in their loadouts. + - type: Add + message: Security Backpacks to loadouts. + - type: Fix + message: >- + Fixed issues with the security belt options(webbing, belt, holster) not + correctly replacing the original item, and also not containing items + either. + id: 6428 + time: '2024-10-09T15:37:08.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1025 +- author: VMSolidus + changes: + - type: Fix + message: >- + Fixed High & Low Psi-Potential traits lacking a requirement that you + don't have the opposite trait. The two were mutually exclusive, so + taking both caused issues. + id: 6429 + time: '2024-10-09T15:37:29.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1022 +- author: VMSolidus + changes: + - type: Fix + message: Fixed localizations for the Sinta'Azaziba language. + id: 6430 + time: '2024-10-09T15:39:59.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1020 +- author: Mnemotechnician + changes: + - type: Add + message: >- + Animals now have more unique things to say when not controlled by a + player. + id: 6431 + time: '2024-10-09T15:48:57.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1003 +- author: VMSolidus + changes: + - type: Fix + message: Glimmer Mites can no longer spawn anywhere other than "THE" Station. + id: 6432 + time: '2024-10-09T16:12:10.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/976 +- author: FoxxoTrystan + changes: + - type: Add + message: Custom Species Names. + id: 6433 + time: '2024-10-09T16:12:20.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/994 +- author: VMSolidus + changes: + - type: Add + message: >- + Logistics can now directly order a variety of hardsuits. "NT In-Network" + hardsuits being substantially cheaper thanks to backroom deals. + id: 6434 + time: '2024-10-09T23:01:29.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1024 +- author: DangerRevolution + changes: + - type: Add + message: Resprited basic Service Staff uniforms + - type: Add + message: Add rolled sleeve variants for Service Staff uniforms. + id: 6435 + time: '2024-10-10T16:21:24.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1021 +- author: VMSolidus + changes: + - type: Remove + message: The X-01 multiphase energy gun has been removed from the HoS locker. + - type: Add + message: >- + A new Loadout Item Group, "Head of Security's Antique Weapon Collection" + has been added. Rather than being given a unique weapon by whatever map + creators put in the HoS Office, each Head of Security is entitled to a + single item selected from this new loadout category, free of charge. But + beware, whatever item chosen from this list may potentially be used as a + Steal Objective for traitors. You may have a fancy new submachine gun, + but it also makes you a target. + - type: Add + message: >- + antique Bulldog, antique C-20r submachine gun, x-01 multiphase energy + gun, antique energy sword, antique pulse pistol, antique Wt550, and a + pair of Katana Sheaths have all been added as loadout options for the + Head of Security. + id: 6436 + time: '2024-10-11T01:43:36.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1031 +- author: Ichaie + changes: + - type: Add + message: A map called "RadStation" has been added to rotation. + - type: Add + message: A new Evac shuttle called "emergency_neol" has been added to RadStation + id: 6437 + time: '2024-10-11T16:05:53.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1034 +- author: Mnemotechnician + changes: + - type: Add + message: >- + Sleeping and muzzled entities can no longer use vocal emotes (scream, + meow, etc). + id: 6438 + time: '2024-10-11T16:08:48.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1037 +- author: VMSolidus + changes: + - type: Add + message: >- + Added Bluespace and Normality ore as very rare ore types. Salvage can + occasionally find these ores on Asteroids or on Expedition planets. + Bluespace and Normality Ore can be smelted in an Ore Processor into + Bluespace and Normality Crystals. Make sure to bring these to Epistemics + so that they can do their job. + id: 6439 + time: '2024-10-12T20:49:32.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1042 +- author: Fansana + changes: + - type: Fix + message: Fixes the arrivals shuttle choosing to correct docking port. + id: 6440 + time: '2024-10-13T16:38:30.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1040 +- author: FoxxoTrystan + changes: + - type: Fix + message: Oneirophage is once more psionic invisible in webs. + id: 6441 + time: '2024-10-13T18:33:59.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1033 +- author: Mnemotechnician + changes: + - type: Add + message: >- + You can now toggle crawling under furniture! The default keybind is + Shift-R, you can change it in settings. + id: 6442 + time: '2024-10-13T18:34:58.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1036 +- author: DEATHB4DEFEAT + changes: + - type: Tweak + message: Made the show clothing/loadouts button labels more clear + id: 6443 + time: '2024-10-13T18:41:16.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1030 +- author: VMSolidus + changes: + - type: Tweak + message: Brains now can no longer be eaten. + id: 6444 + time: '2024-10-13T18:51:26.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1044 +- author: VMSolidus + changes: + - type: Add + message: >- + Added 8 new Physical Traits. These are, Cyber-Eyes Basic System(Plus 4 + different modular options), Bionic Arm, Dermal Armor, and Platelet + Factories. + id: 6445 + time: '2024-10-13T19:25:05.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1035 +- author: VMSolidus + changes: + - type: Add + message: >- + NT has started hiring contractors from other corporations to fill out + station staff. New loadout items for corporate contractors are now + available for Bartender, Botanist, Cataloguer, Chef, and Janitor. + Currently there are no jumpskirt versions of these uniforms. We are + looking for people willing to make skirt variations of each of these. + id: 6446 + time: '2024-10-13T19:26:23.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1041 +- author: Mnemotechnician + changes: + - type: Add + message: >- + The Courier and Logistics Officer now have a new program in their PDA + for tracking mail delivery performance, including earnings and percent + of packages opened, damaged, or expired. + - type: Add + message: >- + The list of possible mail packages has been greately expanded, and now + includes large parcels. + - type: Add + message: >- + The CourierDrobe now offers a rapid mail delivery device, along with + capsules for it. + id: 6447 + time: '2024-10-13T19:38:19.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1011 +- author: DEATHB4DEFEAT + changes: + - type: Add + message: Merged 400 WizDen PRs. Happy testing! + id: 6448 + time: '2024-10-14T16:10:08.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/944 +- author: Aidenkrz + changes: + - type: Fix + message: Reverse engineering machine UI works again. + id: 6449 + time: '2024-10-15T23:05:13.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1053 +- author: Aidenkrz + changes: + - type: Fix + message: Arachne no longer turn into errors when they take damage + id: 6450 + time: '2024-10-15T23:05:44.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1054 +- author: Aidenkrz + changes: + - type: Tweak + message: >- + Cocoon sizing has been changed to reflect the size of the entity inside + better. + id: 6451 + time: '2024-10-15T23:07:03.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1055 +- author: Ichaie + changes: + - type: Fix + message: >- + Gax station: fixed arrivals being unable to dock due to meteor shielding + and translated security camera names to English. + id: 6452 + time: '2024-10-15T23:12:44.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1048 +- author: VMSolidus + changes: + - type: Tweak + message: >- + Psionic Rolls should now generate larger, random amounts of Potentia. + This should make it a lot easier to obtain powers. + id: 6453 + time: '2024-10-15T23:13:13.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1047 +- author: Aidenkrz + changes: + - type: Fix + message: You can properly lay down and stand up on tables now. + id: 6454 + time: '2024-10-16T03:08:07.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1057 +- author: Aidenkrz + changes: + - type: Tweak + message: Height and width are now constrained by each other. + - type: Fix + message: Humanoids can no longer phase through walls. + id: 6455 + time: '2024-10-16T12:54:15.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1049 +- author: Aidenkrz + changes: + - type: Fix + message: Bluespace crystals now properly eject from lathes. + - type: Fix + message: Bluespace parts can be reverse engineered. + id: 6456 + time: '2024-10-16T12:55:19.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1052 +- author: VMSolidus + changes: + - type: Fix + message: 'Fixed Harpy singing not opening the Midi Player. ' + id: 6457 + time: '2024-10-16T22:51:18.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1056 +- author: Mnemotechnician + changes: + - type: Fix + message: Soap once again can be used to clean evidence off. + id: 6458 + time: '2024-10-16T22:54:33.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1061 +- author: Aidenkrz + changes: + - type: Tweak + message: >- + All spiders, arachne, and arachnids can cocoon mobs, and drink their + blood. + id: 6459 + time: '2024-10-17T19:21:01.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1058 +- author: zelezniciar + changes: + - type: Fix + message: Fixes Air Alarms not entering danger/warning state when pressure is low + id: 6460 + time: '2024-10-19T08:25:27.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/996 +- author: VMSolidus + changes: + - type: Fix + message: >- + Fixed issues with Contests System that allowed mobs such as Space Carps + to smash through barriers that were not intended to be breakable by said + mobs. + id: 6461 + time: '2024-10-19T08:26:32.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1069 +- author: VMSolidus + changes: + - type: Fix + message: >- + Fixed Cryptobiolin not providing temporary Psionic Insulation. It now + provides protection from psionic abilities and events for 15 minutes. + id: 6462 + time: '2024-10-19T08:28:28.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1081 +- author: VMSolidus + changes: + - type: Add + message: Arena now has a properly functional Arrivals Dock. + id: 6463 + time: '2024-10-19T08:30:22.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1086 +- author: VMSolidus + changes: + - type: Fix + message: 'addpsionicpower command now works. ' + id: 6464 + time: '2024-10-19T08:34:03.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1095 +- author: VMSolidus + changes: + - type: Add + message: >- + The Syndicate has significantly expanded their Listening Outpost + operations, featuring larger, better defended outposts. These new + outposts also serve as supply depots for Syndicate agents in the field. + id: 6465 + time: '2024-10-19T08:45:44.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1065 +- author: VMSolidus + changes: + - type: Fix + message: >- + Fixed the "Steal The Head of Security's Weapon" so that it is now a + single objective that counts for any anique weapon chosen by the Head of + Security. The objective will also once again correctly not generate if + there are no valid items for it on the station. + id: 6466 + time: '2024-10-19T21:28:16.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1084 +- author: Mocho + changes: + - type: Add + message: Added an uplink with 20TC for all Listening Post Operatives + id: 6467 + time: '2024-10-19T21:28:50.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1062 +- author: FoxxoTrystan + changes: + - type: Add + message: Job Whitelist! + id: 6468 + time: '2024-10-19T22:10:51.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1093 +- author: VMSolidus + changes: + - type: Fix + message: Ported literally all of Wizden's Wielding Quality Of Life improvements. + id: 6469 + time: '2024-10-20T01:45:50.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1078 +- author: VMSolidus + changes: + - type: Add + message: >- + Being in an Atmosphere(such as Planets like Glacier & Nukieworld) + bypasses the limitation of "NO TALKING IN SPACE" + id: 6470 + time: '2024-10-20T05:40:19.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1089 +- author: VMSolidus + changes: + - type: Fix + message: >- + Breath of Life now correctly displays its esoteric text popup if the + right conditions are met. + id: 6471 + time: '2024-10-20T16:03:28.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1109 +- author: FoxxoTrystan + changes: + - type: Add + message: Added a new species, Shadowkin! + id: 6472 + time: '2024-10-20T16:31:21.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/960 +- author: VMSolidus + changes: + - type: Fix + message: Removed latejoin spawners from the Salvage Pathfinder. + id: 6473 + time: '2024-10-20T16:32:43.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1105 +- author: VMSolidus + changes: + - type: Add + message: >- + Musicians can now select for free, any 3 instruments in the game with + their loadout. This now includes things like Piano flatpacks. The only + instruments not included are the Sypersynth, DAW, and "Admeme + Instruments". + - type: Remove + message: >- + Musicians no longer spawn with a Saxophone and Acoustic guitar by + default. You pick which instruments you spawn with in your loadouts now. + id: 6474 + time: '2024-10-20T16:32:53.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1108 +- author: VMSolidus + changes: + - type: Add + message: 'Added localizations for all Epistemics jobs. ' + id: 6475 + time: '2024-10-20T16:35:00.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1094 +- author: VMSolidus + changes: + - type: Fix + message: >- + Fixed the Captain's Office on Gax Station missing an LV cable that would + power its doors. + id: 6476 + time: '2024-10-20T18:18:35.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1112 +- author: VMSolidus + changes: + - type: Fix + message: >- + Fixed prisoner not spawning in the Prison if the Arrivals station is + enabled. + id: 6477 + time: '2024-10-20T19:28:35.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1113 +- author: VMSolidus + changes: + - type: Add + message: >- + Sacrificing Psions has been added. Psions can be sacrificed by + Epistemics upon an altar in order to dramatically reduce glimmer. The + more powerful the Psion to be sacrificed, the more glimmer is reduced. + id: 6478 + time: '2024-10-20T21:34:05.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1110 +- author: Aidenkrz + changes: + - type: Fix + message: Flavor text can be updated again. + id: 6479 + time: '2024-10-21T00:24:18.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1119 +- author: VMSolidus + changes: + - type: Add + message: Glacier is now on a planetary surface + id: 6480 + time: '2024-10-21T00:41:02.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1115 +- author: VMSolidus + changes: + - type: Fix + message: >- + Asterisk Station no longer spawns entombed in snow, and is now on top of + an ice sheet. + id: 6481 + time: '2024-10-21T00:41:18.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1118 +- author: Aidenkrz + changes: + - type: Fix + message: Custom specie name doesn't disappear in the editor anymore. + id: 6482 + time: '2024-10-22T01:42:11.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1120 +- author: Remuchi + changes: + - type: Fix + message: Cybereyes examine message no longer reveals person's identity. + id: 6483 + time: '2024-10-23T04:16:15.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1127 +- author: Mnemotechnician + changes: + - type: Add + message: >- + Raising glimmer too high can now cause glimmer wisps to start haunting + the station. + id: 6484 + time: '2024-10-23T04:19:00.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1125 +- author: Mnemotechnician + changes: + - type: Fix + message: >- + Fixed the "high amplification" trait lowering your amplification instead + of increasing it. + id: 6485 + time: '2024-10-25T16:22:01.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1137 +- author: Remuchi + changes: + - type: Fix + message: Added missing deflect alert locale. + id: 6486 + time: '2024-10-25T16:23:04.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1140 +- author: VMSolidus + changes: + - type: Add + message: Added Pyrokinetic Flare as a new Psi ability. + id: 6487 + time: '2024-10-25T19:03:57.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1138 +- author: SleepyScarecrow + changes: + - type: Fix + message: Fixed penlights + id: 6488 + time: '2024-10-25T19:04:14.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1142 +- author: Ichaie + changes: + - type: Fix + message: '#1126 ' + id: 6489 + time: '2024-10-27T15:30:55.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1129 +- author: VMSolidus + changes: + - type: Tweak + message: >- + The Syndicate Listening Post now has a custom communications console, + which no longer can recall Nanotrasen shuttles, and doesn't sign its + messages as Nuclear Operatives. + id: 6490 + time: '2024-10-27T15:31:16.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1143 +- author: Remuchi + changes: + - type: Fix + message: Layered icons are now properly displayed in radial menus. + id: 6491 + time: '2024-10-27T15:34:45.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1150 +- author: Remuchi + changes: + - type: Add + message: >- + Clicking on health alert now will print message in chat, displaying your + health state. + id: 6492 + time: '2024-10-27T15:36:43.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1139 +- author: VMSolidus + changes: + - type: Add + message: >- + The Animal Friend trait has been added to the game. Characters with this + trait are not attacked by animals. + id: 6493 + time: '2024-10-27T16:44:50.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/955 +- author: Remuchi + changes: + - type: Add + message: Added telescopic baton - a self-defense weapon for Command staff. + id: 6494 + time: '2024-10-27T16:45:05.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1144 +- author: VMSolidus + changes: + - type: Add + message: >- + A new class of Psionic powers has been added, "Summon Familiar". + Familiars are a new kind of Psionic creature that can be summoned by + Psions with the right power. Familiars will automatically follow their + Master, attack anyone who attacks their Master, fight back when + attacked, and attack anyone their Master attacks. Additionally, + Familiars are also ghostroles, so that they can be taken over by a + player, but otherwise do not require player control to function. + Familiars disappear when they die, and will also disappear if their + Master is either killed, or mindbroken. Psions can have a maximum of + one(1) familiar at a time. + - type: Add + message: >- + New psi-power "Summon Imp", as the first new Psi Familiar. Imps are + small motes of living flame that follow and protect their summoner. Imps + also emit an incredibly bright light, and can natively cast Pyrokinetic + Flare. + - type: Add + message: >- + Remilia has been updated to be a Psi Familiar, and no longer requires + the Bible to summon. Chaplains now start with a Power that lets them + summon Remilia once every 2 minutes. + id: 6495 + time: '2024-10-27T16:51:18.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1146 +- author: VMSolidus + changes: + - type: Tweak + message: >- + Changed the default "Following distance" of Psionic Familiars from 10 + meters to 3 meters, so that they don't have an ungodly hard time keeping + up with their Master. + id: 6496 + time: '2024-10-29T02:24:08.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1162 +- author: Ichaie + changes: + - type: Add + message: >- + Fixed several issues with the Gax Station. It also now has a newly + redesigned AI Satellite. + id: 6497 + time: '2024-11-01T23:01:34.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1163 +- author: VMSolidus + changes: + - type: Tweak + message: >- + Several new updates to Saltern, particularly around Service, Logistics, + and Engineering. + - type: Tweak + message: >- + Pressure Controlled Valves now actually function like their real-world + counterpart. If the pressure in the control-side exceeds the pressure in + either input or output sides, the valve opens, allowing air to flow + bidirectionally between input and output(Basically, an open valve). Air + can never pass through the Control-side. + - type: Tweak + message: >- + Literally doubled the power output of solar panels, to make them + actually worthwhile to setup. + id: 6498 + time: '2024-11-02T00:40:50.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1170 +- author: VMSolidus + changes: + - type: Add + message: >- + Cargo can now order crates of Uranium, Gold, and Silver. This is still + far more expensive than getting the materials from Salvage, but serves + as an incredibly useful failsafe in the event Salvage is + Unwilling/Dead/Incompetent/Shitters. + id: 6499 + time: '2024-11-02T01:03:14.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1171 +- author: Beck Thompson + changes: + - type: Fix + message: Fixed various bugs related to voice masks and voice mask implants. + id: 6500 + time: '2024-11-02T01:11:00.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1147 +- author: VMSolidus + changes: + - type: Add + message: >- + Added Python, Pollock, Webley, K38, Fitz, Wood Furniture Viper, Energy + Pistol, PDW-9, and Svalinn to security loadouts as new Duty Weapon + options. + - type: Tweak + message: >- + Modified the descriptions of all handguns obtained via Security Officer + Loadouts to explicitly state that they actually belong to the security + officer. Apparently people were being stupid and confiscating weapons + from their own Secoffs that they were entirely intended to have. + id: 6501 + time: '2024-11-02T01:11:17.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1158 +- author: FoxxoTrystan + changes: + - type: Tweak + message: >- + Cocooners can now freely uncocoon any cocoons without the need of a + sharp object. + - type: Fix + message: Cocoon making you stuck in muffle accent. + id: 6502 + time: '2024-11-02T02:21:39.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1169 +- author: Ichaie + changes: + - type: Add + message: >- + lockers for Syndicate Agent (for mapping), Janitor and Bartender have + been added. + - type: Add + message: a new wall variant has been added for the radiation closet + - type: Add + message: Uranium Crate added + id: 6503 + time: '2024-11-02T15:05:09.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1174 +- author: VMSolidus + changes: + - type: Add + message: >- + Syndicate Agents no longer have the Syndicate faction. Instead, the + Syndicate faction comes from your SYNDICATE ID/PDA. This means that if + you steal a Syndicate PDA from nukies, and wear it, you won't be shot by + their turrets. This also means that syndicate turrets will fire at + syndicate agents not wearing an agent ID. + - type: Fix + message: Fixed Familiars spawned by traitors attacking crew constantly. + id: 6504 + time: '2024-11-02T16:24:46.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1176 +- author: VMSolidus + changes: + - type: Tweak + message: >- + Cargo Technicians and Salvage Techs can now process cargo orders. You + don't need to smash the fucking LO Locker with a pickaxe anymore. + id: 6505 + time: '2024-11-02T19:58:26.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1177 +- author: VMSolidus + changes: + - type: Fix + message: >- + Communications Consoles that are marked as "Can't Recall The Shuttle" + now can't recall the shuttle. Previously they were still able to recall + it. + id: 6506 + time: '2024-11-05T04:12:36.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1180 +- author: Mocho + changes: + - type: Tweak + message: Ported over Wizden's updated Health Analyzer UI. + id: 6507 + time: '2024-11-07T04:50:46.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1183 +- author: VMSolidus + changes: + - type: Fix + message: Familiars can now be Dispelled. + - type: Tweak + message: Nerfed Remilia to have 30 HP. + - type: Tweak + message: Nerfed Base Familiar to have 50 HP. + id: 6508 + time: '2024-11-08T15:17:12.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1184 +- author: VMSolidus + changes: + - type: Add + message: 'Languages are now shown in chat alongside character names. ' + id: 6509 + time: '2024-11-08T16:14:09.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1165 +- author: Ichaie + changes: + - type: Fix + message: minor fixes on the maps Rad and Gax, fix te uranium crarte to filled + id: 6510 + time: '2024-11-08T18:54:13.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1178 +- author: VMSolidus + changes: + - type: Add + message: 'Traits can now add Implants directly. ' + id: 6511 + time: '2024-11-08T18:58:04.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1182 +- author: VMSolidus + changes: + - type: Remove + message: >- + Shadowkin have been temporarily disabled pending significant reworks and + balance updates. + id: 6512 + time: '2024-11-08T19:33:53.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1187 +- author: VMSolidus + changes: + - type: Add + message: >- + Added Bloodstains, Body Dragging Marks, and Bloody Footprints to the + game. Characters that walk through puddles of blood will now leave + behind bloody footprints. Dragging a corpse leaves a trail of blood + wherever the corpse was moved. + id: 6513 + time: '2024-11-09T02:05:47.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1190 +- author: VMSolidus + changes: + - type: Fix + message: >- + Fixed AddTrait and ReplaceTrait functions giving players an unmodified, + completely default component. + id: 6514 + time: '2024-11-10T15:22:47.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1195 diff --git a/Resources/ConfigPresets/Build/development.toml b/Resources/ConfigPresets/Build/development.toml index 99ce0603c70..3be8e6fb0a1 100644 --- a/Resources/ConfigPresets/Build/development.toml +++ b/Resources/ConfigPresets/Build/development.toml @@ -23,6 +23,7 @@ grid_fill = false auto_call_time = 0 emergency = false arrivals = false +preload_grids = false [admin] see_own_notes = true diff --git a/Resources/ConfigPresets/EinsteinEngines/default.toml b/Resources/ConfigPresets/EinsteinEngines/default.toml index ae5f943d01d..b5b8dbbf64e 100644 --- a/Resources/ConfigPresets/EinsteinEngines/default.toml +++ b/Resources/ConfigPresets/EinsteinEngines/default.toml @@ -37,6 +37,7 @@ tickrate = 30 limit = 10.0 [build] +#! PLEASE set this for your fork fork_id = "EinsteinEngines" [server] diff --git a/Resources/Credits/GitHub.txt b/Resources/Credits/GitHub.txt index 1a2d582a05b..3400d8c76a7 100644 --- a/Resources/Credits/GitHub.txt +++ b/Resources/Credits/GitHub.txt @@ -1 +1 @@ -0x6273, 2013HORSEMEATSCANDAL, 20kdc, 21Melkuu, 4dplanner, 612git, 778b, Ablankmann, Acruid, actioninja, adamsong, Admiral-Obvious-001, Adrian16199, Aerocrux, Aexxie, africalimedrop, Agoichi, Ahion, AJCM-git, AjexRose, Alekshhh, AlexMorgan3817, AlmondFlour, AlphaQwerty, Altoids1, amylizzle, ancientpower, angelofallars, ArchPigeon, Arendian, arimah, Arteben, AruMoon, as334, AsikKEsel, asperger-sind, aspiringLich, avghdev, AzzyIsNotHere, BananaFlambe, BasedUser, beck-thompson, BGare, BingoJohnson-zz, BismarckShuffle, Bixkitts, Blackern5000, Blazeror, BlueHNT, Boaz1111, BobdaBiscuit, brainfood1183, BramvanZijp, Brandon-Huu, Bribrooo, Bright0, brndd, BubblegumBlue, BYONDFuckery, c4llv07e, CaasGit, CakeQ, CaptainSqrBeard, Carbonhell, Carolyn3114, CatTheSystem, Centronias, chairbender, Charlese2, Cheackraze, cheesePizza2, Chief-Engineer, chromiumboy, Chronophylos, clorl, Clyybber, CodedCrow, ColdAutumnRain, Colin-Tel, collinlunn, ComicIronic, coolmankid12345, corentt, crazybrain23, creadth, CrigCrag, Crotalus, CrudeWax, CrzyPotato, Cyberboss, d34d10cc, Daemon, daerSeebaer, dahnte, dakamakat, dakimasu, DamianX, DangerRevolution, daniel-cr, Darkenson, DawBla, dch-GH, Deahaka, DEATHB4DEFEAT, DeathCamel58, deathride58, DebugOk, Decappi, Deeeeja, deepdarkdepths, Delete69, deltanedas, DeltaV-Bot, DerbyX, DoctorBeard, DogZeroX, dontbetank, dootythefrooty, Doru991, DoubleRiceEddiedd, DrMelon, DrSmugleaf, drteaspoon420, DTanxxx, DubiousDoggo, Duddino, Dutch-VanDerLinde, Easypoller, eclips_e, EdenTheLiznerd, EEASAS, Efruit, ElectroSR, elthundercloud, Emisse, EmoGarbage404, Endecc, enumerate0, eoineoineoin, ERORR404V1, Errant-4, estacaoespacialpirata, Evgencheg, exincore, exp111, Fahasor, FairlySadPanda, Fansana, ficcialfaint, Fildrance, FillerVK, Fishfish458, Flareguy, FluffiestFloof, FluidRock, FoLoKe, fooberticus, Fortune117, FoxxoTrystan, freeman2651, Froffy025, Fromoriss, FungiFellow, GalacticChimp, gbasood, Geekyhobo, geraeumig, Git-Nivrak, github-actions[bot], gituhabu, gluesniffler, GNF54, Golinth, GoodWheatley, graevy, GreyMario, Guess-My-Name, gusxyz, h3half, Hanzdegloker, Hardly3D, harikattar, HerCoyote23, HoofedEar, Hoolny, hord-brayden, hubismal, Hugal31, Huxellberger, iacore, IamVelcroboy, icekot8, igorsaux, ike709, Illiux, Ilya246, IlyaElDunaev, Injazz, Insineer, Interrobang01, IProduceWidgets, ItsMeThom, Jackal298, Jackrost, jamessimo, janekvap, JerryImMouse, Jessetriesagain, jessicamaybe, Jezithyr, jicksaw, JiimBob, JoeHammad1844, JohnGinnane, johnku1, joshepvodka, jproads, Jrpl, juliangiebel, JustArt1m, JustCone14, JustinTrotter, KaiShibaa, kalane15, kalanosh, Kelrak, kerisargit, keronshb, KIBORG04, Killerqu00, KingFroozy, kira-er, Kit0vras, KittenColony, Ko4ergaPunk, komunre, koteq, Krunklehorn, kxvvv, Lamrr, LankLTE, lapatison, Leander-0, leonardo-dabepis, LetterN, Level10Cybermancer, lever1209, liltenhead, LittleBuilderJane, Lomcastar, LordCarve, LordEclipse, LovelyLophi, Lukasz825700516, lunarcomets, luringens, lvvova1, lzimann, lzk228, MACMAN2003, Macoron, MagnusCrowe, ManelNavola, Matz05, MehimoNemo, MeltedPixel, MemeProof, Menshin, Mervill, metalgearsloth, mhamsterr, MilenVolf, Minty642, Mirino97, mirrorcult, misandrie, MishaUnity, MisterMecky, Mith-randalf, Mnemotechnician, Moneyl, Moomoobeef, moony, Morb0, Mr0maks, musicmanvr, Myakot, Myctai, N3X15, Nairodian, Naive817, namespace-Memory, NickPowers43, nikthechampiongr, Nimfar11, Nirnael, nmajask, nok-ko, notafet, notquitehadouken, noudoit, noverd, nuke-haus, NULL882, nyeogmi, OCOtheOmega, OctoRocket, OldDanceJacket, onoira, osjarw, Owai-Seek, pali6, Pangogie, patrikturi, PaulRitter, Peptide90, peptron1, Phantom-Lily, PHCodes, PixelTheKermit, PJB3005, Plykiya, pofitlo, pointer-to-null, PolterTzi, PoorMansDreams, potato1234x, ProfanedBane, PrPleGoo, ps3moira, Pspritechologist, Psychpsyo, psykzz, PuroSlavKing, quatre, QuietlyWhisper, qwerltaz, Radosvik, Radrark, Rainbeon, Rainfey, Rane, ravage123321, rbertoche, Redict, RedlineTriad, RednoWCirabrab, RemberBM, RemieRichards, RemTim, rene-descartes2021, RiceMar1244, RieBi, Rinkashikachi, Rockdtben, rolfero, rosieposieeee, Saakra, Samsterious, SaphireLattice, ScalyChimp, scrato, Scribbles0, Serkket, ShadowCommander, Shadowtheprotogen546, ShatteredSwords, SignalWalker, SimpleStation14, Simyon264, Sirionaut, siyengar04, Skarletto, Skrauz, Skyedra, SlamBamActionman, slarticodefast, Slava0135, SleepyScarecrow, Snowni, snowsignal, SonicHDC, SoulSloth, SpaceManiac, SpeltIncorrectyl, spoogemonster, ssdaniel24, stalengd, Stealthbomber16, stellar-novas, StrawberryMoses, superjj18, SweptWasTaken, Szunti, TadJohnson00, takemysoult, TaralGit, Tayrtahn, tday93, TekuNut, TemporalOroboros, tentekal, tgrkzus, thatrandomcanadianguy, TheArturZh, theashtronaut, thedraccx, themias, Theomund, theOperand, TheShuEd, TimrodDX, Titian3, tkdrg, Tmanzxd, tmtmtl30, TokenStyle, tom-leys, tomasalves8, Tomeno, Tornado-Technology, tosatur, Tryded, TsjipTsjip, Tunguso4ka, TurboTrackerss14, Tyler-IN, Tyzemol, UbaserB, UKNOWH, UnicornOnLSD, Uriende, UristMcDorf, Vaaankas, Varen, VasilisThePikachu, veliebm, Veritius, Vermidia, Verslebas, VigersRay, Visne, VMSolidus, volundr-, Voomra, Vordenburg, vulppine, wafehling, WarMechanic, waylon531, weaversam8, whateverusername0, Willhelm53, Winkarst-cpu, wixoaGit, WlarusFromDaSpace, wrexbe, xRiriq, yathxyz, Ygg01, YotaXP, YuriyKiss, zach-hill, Zandario, Zap527, Zealith-Gamer, ZelteHonor, zerorulez, zionnBE, zlodo, ZNixian, ZoldorfTheWizard, Zumorica, Zymem +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 diff --git a/Resources/Fonts/Cambria.ttf b/Resources/Fonts/Cambria.ttf new file mode 100644 index 00000000000..ab88fb474a4 Binary files /dev/null and b/Resources/Fonts/Cambria.ttf differ diff --git a/Resources/Fonts/Lymphatic.ttf b/Resources/Fonts/Lymphatic.ttf new file mode 100644 index 00000000000..36beef04b1e Binary files /dev/null and b/Resources/Fonts/Lymphatic.ttf differ diff --git a/Resources/Locale/en-US/Content/Power/silicons.ftl b/Resources/Locale/en-US/Content/Power/silicons.ftl index f5d24bde072..4e047d36539 100644 --- a/Resources/Locale/en-US/Content/Power/silicons.ftl +++ b/Resources/Locale/en-US/Content/Power/silicons.ftl @@ -1,6 +1,3 @@ -silicon-overheating = You can feel your circuits burn! -silicon-crit = Integrated structure in critical state! -silicon-power-low = Low battery! ipc-recharge-tip = You charged a litte of your battery. dead-startup-button-verb = Reboot dead-startup-system-reboot-success = {$target}'s system was rebooted. diff --git a/Resources/Locale/en-US/HUD/game-hud.ftl b/Resources/Locale/en-US/HUD/game-hud.ftl index 7f6573d2adf..ea423f080ab 100644 --- a/Resources/Locale/en-US/HUD/game-hud.ftl +++ b/Resources/Locale/en-US/HUD/game-hud.ftl @@ -1,6 +1,7 @@ game-hud-open-escape-menu-button-tooltip = Open escape menu. game-hud-open-guide-menu-button-tooltip = Open guidebook menu. game-hud-open-character-menu-button-tooltip = Open character menu. +game-hud-open-emotes-menu-button-tooltip= Open emotes menu. game-hud-open-inventory-menu-button-tooltip = Open inventory menu. game-hud-open-crafting-menu-button-tooltip = Open crafting menu. game-hud-open-actions-menu-button-tooltip = Open actions menu. diff --git a/Resources/Locale/en-US/Mail/mail.ftl b/Resources/Locale/en-US/Mail/mail.ftl deleted file mode 100644 index 72cd3879b32..00000000000 --- a/Resources/Locale/en-US/Mail/mail.ftl +++ /dev/null @@ -1,30 +0,0 @@ -mail-recipient-mismatch = Recipient name or job does not match. -mail-invalid-access = Recipient name and job match, but access isn't as expected. -mail-locked = The anti-tamper lock hasn't been removed. Tap the recipient's ID. -mail-desc-far = A parcel of mail. You can't make out who it's addressed to from this distance. -mail-desc-close = A parcel of mail addressed to {CAPITALIZE($name)}, {$job}. -mail-desc-fragile = It has a [color=red]red fragile label[/color]. -mail-desc-priority = The anti-tamper lock's [color=yellow]yellow priority tape[/color] is active. Better deliver it on time! -mail-desc-priority-inactive = The anti-tamper lock's [color=#886600]yellow priority tape[/color] is inactive. -mail-unlocked = Anti-tamper system unlocked. -mail-unlocked-by-emag = Anti-tamper system *BZZT*. -mail-unlocked-reward = Anti-tamper system unlocked. {$bounty} spesos have been added to logistics's account. -mail-penalty-lock = ANTI-TAMPER LOCK BROKEN. LOGISTICS BANK ACCOUNT PENALIZED BY {$credits} CREDITS. -mail-penalty-fragile = INTEGRITY COMPROMISED. LOGISTICS BANK ACCOUNT PENALIZED BY {$credits} CREDITS. -mail-penalty-expired = DELIVERY PAST DUE. LOGISTICS BANK ACCOUNT PENALIZED BY {$credits} CREDITS. -mail-item-name-unaddressed = mail -mail-item-name-addressed = mail ({$recipient}) - -command-mailto-description = Queue a parcel to be delivered to an entity. Example usage: `mailto 1234 5678 false false`. The target container's contents will be transferred to an actual mail parcel. -command-mailto-help = Usage: {$command} [is-fragile: true or false] [is-priority: true or false] -command-mailto-no-mailreceiver = Target recipient entity does not have a {$requiredComponent}. -command-mailto-no-blankmail = The {$blankMail} prototype doesn't exist. Something is very wrong. Contact a programmer. -command-mailto-bogus-mail = {$blankMail} did not have {$requiredMailComponent}. Something is very wrong. Contact a programmer. -command-mailto-invalid-container = Target container entity does not have a {$requiredContainer} container. -command-mailto-unable-to-receive = Target recipient entity was unable to be setup for receiving mail. ID may be missing. -command-mailto-no-teleporter-found = Target recipient entity was unable to be matched to any station's mail teleporter. Recipient may be off-station. -command-mailto-success = Success! Mail parcel has been queued for next teleport in {$timeToTeleport} seconds. - -command-mailnow = Force all mail teleporters to deliver another round of mail as soon as possible. This will not bypass the undelivered mail limit. -command-mailnow-help = Usage: {$command} -command-mailnow-success = Success! All mail teleporters will be delivering another round of mail soon. diff --git a/Resources/Locale/en-US/abilities/arachne.ftl b/Resources/Locale/en-US/abilities/arachne.ftl index 6f6348d7212..857d104e5f9 100644 --- a/Resources/Locale/en-US/abilities/arachne.ftl +++ b/Resources/Locale/en-US/abilities/arachne.ftl @@ -8,6 +8,9 @@ spin-web-start-second-person = You start spinning a web. spin-web-start-third-person = {CAPITALIZE(THE($spider))} starts spinning a web! cocoon-start-second-person = You start cocooning {THE($target)}. cocoon-start-third-person = {CAPITALIZE(THE($spider))} starts cocooning {THE($target)}. +uncocoon-start-second-person = You start releasing {THE($target)}. +uncocoon-start-third-person = {CAPITALIZE(THE($spider))} starts releasing {THE($target)}. spun-web-second-person = You spin up a web. spun-web-third-person = {CAPITALIZE(THE($spider))} spins up a web! cocoon = Cocoon +uncocoon = Uncocoon diff --git a/Resources/Locale/en-US/abilities/bloodsucker.ftl b/Resources/Locale/en-US/abilities/bloodsucker.ftl index d956eaff84e..c8aa0ed8542 100644 --- a/Resources/Locale/en-US/abilities/bloodsucker.ftl +++ b/Resources/Locale/en-US/abilities/bloodsucker.ftl @@ -4,9 +4,9 @@ action-description-suck-blood = Suck the blood of the victim in your hand. bloodsucker-fail-helmet = You'd need to remove {THE($helmet)}. bloodsucker-fail-mask = You'd need to remove your mask! -bloodsucker-fail-not-blood = { CAPITALIZE(SUBJECT($target)) } doesn't have delicious, nourishing mortal blood. -bloodsucker-fail-no-blood = { CAPITALIZE(SUBJECT($target)) } has no blood in { POSS-ADJ($target) } body. -bloodsucker-fail-no-blood-bloodsucked = { CAPITALIZE(SUBJECT($target)) } has been sucked dry. +bloodsucker-not-blood = {$target} doesn't have delicious, nourishing blood. +bloodsucker-fail-no-blood = {$target} has no blood in { POSS-ADJ($target) } body. +bloodsucker-fail-no-blood-bloodsucked = {$target} has been sucked dry. bloodsucker-blood-sucked = You suck some blood from {$target}. bloodsucker-doafter-start = You try to suck blood from {$target}. diff --git a/Resources/Locale/en-US/abilities/lifedrainer.ftl b/Resources/Locale/en-US/abilities/lifedrainer.ftl new file mode 100644 index 00000000000..4072129ab0f --- /dev/null +++ b/Resources/Locale/en-US/abilities/lifedrainer.ftl @@ -0,0 +1,5 @@ +verb-life-drain = Life drain +life-drain-second-start = {CAPITALIZE(THE($drainer))} starts draining your life force! +life-drain-third-start = {CAPITALIZE(THE($drainer))} starts draining {THE($target)}'s life force! +life-drain-second-end = Your being is annihilated. +life-drain-third-end = {CAPITALIZE(THE($drainer))} drains {THE($target)}'s life force! diff --git a/Resources/Locale/en-US/abilities/psionic.ftl b/Resources/Locale/en-US/abilities/psionic.ftl index 91ae21233a3..d0e8db72f8c 100644 --- a/Resources/Locale/en-US/abilities/psionic.ftl +++ b/Resources/Locale/en-US/abilities/psionic.ftl @@ -25,9 +25,6 @@ accept-psionics-window-prompt-text-part = You rolled a psionic power! action-name-psionic-invisibility = Psionic Invisibility action-description-psionic-invisibility = Render yourself invisible to any entity that could potentially be psychic. Borgs, animals, and so on are not affected. -action-name-psionic-invisibility = Psionic Invisibility -action-description-psionic-invisibility = Render yourself invisible to any entity that could potentially be psychic. Borgs, animals, and so on are not affected. - action-name-psionic-invisibility-off = Turn Off Psionic Invisibility action-description-psionic-invisibility-off = Return to visibility, and receive a stun. diff --git a/Resources/Locale/en-US/accent/accents.ftl b/Resources/Locale/en-US/accent/accents.ftl index 301c589449d..3c898f9cb16 100644 --- a/Resources/Locale/en-US/accent/accents.ftl +++ b/Resources/Locale/en-US/accent/accents.ftl @@ -98,7 +98,11 @@ accent-words-slimes-4 = Bluuump... accent-words-slimes-5 = Blabl blump! # Mothroach -accent-words-mothroach-1 = Chirp! +accent-words-mothroach-1 = Squeak! +accent-words-mothroach-2 = Chirp! +accent-words-mothroach-3 = Peep! +accent-words-mothroach-4 = Eeee! +accent-words-mothroach-5 = Eep! # Crab accent-words-crab-1 = Click. diff --git a/Resources/Locale/en-US/accent/italian.ftl b/Resources/Locale/en-US/accent/italian.ftl index d0ef4e8f72b..cc8641417fe 100644 --- a/Resources/Locale/en-US/accent/italian.ftl +++ b/Resources/Locale/en-US/accent/italian.ftl @@ -78,9 +78,6 @@ accent-italian-words-replace-23 = greek accent-italian-words-24 = operatives accent-italian-words-replace-24 = greeks -accent-italian-words-24 = ops -accent-italian-words-replace-24 = greeks - accent-italian-words-25 = sec accent-italian-words-replace-25 = polizia diff --git a/Resources/Locale/en-US/accent/pirate.ftl b/Resources/Locale/en-US/accent/pirate.ftl index 8da975df401..b6db7c803ba 100644 --- a/Resources/Locale/en-US/accent/pirate.ftl +++ b/Resources/Locale/en-US/accent/pirate.ftl @@ -1,7 +1,7 @@ accent-pirate-prefix-1 = Arrgh accent-pirate-prefix-2 = Garr accent-pirate-prefix-3 = Yarr -accent-pirate-prefix-3 = Yarrgh +accent-pirate-prefix-4 = Yarrgh accent-pirate-replaced-1 = my accent-pirate-replacement-1 = me diff --git a/Resources/Locale/en-US/accessories/human-hair.ftl b/Resources/Locale/en-US/accessories/human-hair.ftl index 3a507ec6cfc..7d3467a610c 100644 --- a/Resources/Locale/en-US/accessories/human-hair.ftl +++ b/Resources/Locale/en-US/accessories/human-hair.ftl @@ -165,6 +165,7 @@ marking-HumanHairProtagonist = Slightly Long Hair marking-HumanHairSpikey = Spiky marking-HumanHairSpiky = Spiky 2 marking-HumanHairSpiky2 = Spiky 3 +marking-HumanHairSpookyLong = Spooky Long marking-HumanHairSwept = Swept Back Hair marking-HumanHairSwept2 = Swept Back Hair 2 marking-HumanHairTailed = Tailed diff --git a/Resources/Locale/en-US/accessories/vox-facial-hair.ftl b/Resources/Locale/en-US/accessories/vox-facial-hair.ftl index 48b19ca74b1..a63b0b5a398 100644 --- a/Resources/Locale/en-US/accessories/vox-facial-hair.ftl +++ b/Resources/Locale/en-US/accessories/vox-facial-hair.ftl @@ -1,5 +1,5 @@ -marking-VoxFacialHairColonel = Vox Colonel -marking-VoxFacialHairFu = Quill Fu -marking-VoxFacialHairNeck = Neck Quills -marking-VoxFacialHairBeard = Quill Beard -marking-VoxFacialHairRuffBeard = Ruff Beard +marking-VoxFacialHairBeard = Vox Beard (Quills) +marking-VoxFacialHairColonel = Vox Moustache (Colonel) +marking-VoxFacialHairFu = Vox Moustache (Quill Fu) +marking-VoxFacialHairNeck = Vox Beard (Neck Quills) +marking-VoxFacialHairMane = Vox Beard (Mane) diff --git a/Resources/Locale/en-US/accessories/vox-hair.ftl b/Resources/Locale/en-US/accessories/vox-hair.ftl index cf98d0b4f98..94483fd6a6c 100644 --- a/Resources/Locale/en-US/accessories/vox-hair.ftl +++ b/Resources/Locale/en-US/accessories/vox-hair.ftl @@ -1,13 +1,22 @@ -marking-VoxHairShortQuills = Short Vox Quills -marking-VoxHairKingly = Vox Kingly marking-VoxHairAfro = Vox Afro -marking-VoxHairMohawk = Vox Mohawk -marking-VoxHairYasuhiro = Vox Yasuhiro +marking-VoxHairBraids = Vox Braids +marking-VoxHairCrestedQuills = Vox Crested Quills +marking-VoxHairEmperorQuills = Vox Emperor Quills +marking-VoxHairFlowing = Vox Flowing +marking-VoxHairHawk = Vox Hawk marking-VoxHairHorns = Vox Horns -marking-VoxHairNights = Vox Nights -marking-VoxHairSurf = Vox Surf -marking-VoxHairCropped = Vox Cropped -marking-VoxHairRuffhawk = Vox Ruffhawk -marking-VoxHairRows = Vox Rows +marking-VoxHairKeelQuills = Vox Keel Quills +marking-VoxHairKeetQuills = Vox Keet Quills +marking-VoxHairKingly = Vox Kingly +marking-VoxHairLongBraid = Vox Long Braid marking-VoxHairMange = Vox Mange +marking-VoxHairMohawk = Vox Mohawk +marking-VoxHairNights = Vox Nights marking-VoxHairPony = Vox Pony +marking-VoxHairRazorClipped = Vox Razor (Clipped) +marking-VoxHairRazor = Vox Razor +marking-VoxHairSortBraid = Vox Short Braid +marking-VoxHairShortQuills = Vox Short Quills +marking-VoxHairSurf = Vox Surf +marking-VoxHairTielQuills = Vox Tiel Quills +marking-VoxHairYasu = Vox Yasuhiro diff --git a/Resources/Locale/en-US/actions/actions/shadowkin.ftl b/Resources/Locale/en-US/actions/actions/shadowkin.ftl new file mode 100644 index 00000000000..063e1eafb74 --- /dev/null +++ b/Resources/Locale/en-US/actions/actions/shadowkin.ftl @@ -0,0 +1,2 @@ +action-name-shadowkin-rest = Rest +action-description-shadowkin-rest = Rama diff --git a/Resources/Locale/en-US/administration/smites.ftl b/Resources/Locale/en-US/administration/smites.ftl index ae4e6f72715..ff3e3b09018 100644 --- a/Resources/Locale/en-US/administration/smites.ftl +++ b/Resources/Locale/en-US/administration/smites.ftl @@ -13,7 +13,6 @@ admin-smite-stomach-removal-self = Your stomach feels hollow... admin-smite-run-walk-swap-prompt = You have to press shift to run! admin-smite-super-speed-prompt = You move at mach 0.8! admin-smite-lung-removal-self = You can't breathe! -admin-smite-terminate-prompt = I'll be back ## Smite descriptions @@ -58,7 +57,6 @@ admin-smite-disarm-prone-description = Makes them get disarmed 100% of the time admin-smite-garbage-can-description = Turn them into a garbage bin to emphasize what they remind you of. admin-smite-super-bonk-description = Slams them on every single table on the Station and beyond. admin-smite-super-bonk-lite-description= Slams them on every single table on the Station and beyond. Stops when the target is dead. -admin-smite-terminate-description = Creates a Terminator ghost role with the sole objective of killing them. ## Tricks descriptions diff --git a/Resources/Locale/en-US/administration/ui/admin-logs.ftl b/Resources/Locale/en-US/administration/ui/admin-logs.ftl index 549e9587d7f..377bea6e84a 100644 --- a/Resources/Locale/en-US/administration/ui/admin-logs.ftl +++ b/Resources/Locale/en-US/administration/ui/admin-logs.ftl @@ -14,7 +14,6 @@ admin-logs-select-none = None # Players admin-logs-search-players-placeholder = Search Players (OR) -admin-logs-select-none = None admin-logs-include-non-player = Include Non-players # Logs diff --git a/Resources/Locale/en-US/administration/ui/admin-notes.ftl b/Resources/Locale/en-US/administration/ui/admin-notes.ftl index ca5348a9405..03e12902576 100644 --- a/Resources/Locale/en-US/administration/ui/admin-notes.ftl +++ b/Resources/Locale/en-US/administration/ui/admin-notes.ftl @@ -35,7 +35,6 @@ admin-notes-message-seen = Seen admin-notes-banned-from = Banned from admin-notes-the-server = the server admin-notes-permanently = permanently -admin-notes-for = for {$player} admin-notes-days = {$days} days admin-notes-hours = {$hours} hours admin-notes-minutes = {$minutes} minutes diff --git a/Resources/Locale/en-US/administration/ui/player-panel.ftl b/Resources/Locale/en-US/administration/ui/player-panel.ftl new file mode 100644 index 00000000000..208268d5898 --- /dev/null +++ b/Resources/Locale/en-US/administration/ui/player-panel.ftl @@ -0,0 +1 @@ +player-panel-job-whitelists = Job Whitelists diff --git a/Resources/Locale/en-US/alerts/alerts.ftl b/Resources/Locale/en-US/alerts/alerts.ftl index ff2c0d9ee29..ad61ae89674 100644 --- a/Resources/Locale/en-US/alerts/alerts.ftl +++ b/Resources/Locale/en-US/alerts/alerts.ftl @@ -57,9 +57,6 @@ alerts-no-battery-desc = You don't have a battery, rendering you unable to charg alerts-internals-name = Toggle internals alerts-internals-desc = Toggles your gas tank internals on or off. -alerts-internals-name = Toggle internals -alerts-internals-desc = Toggles your gas tank internals on or off. - alerts-piloting-name = Piloting Shuttle alerts-piloting-desc = You are piloting a shuttle. Click the alert to stop. @@ -116,3 +113,6 @@ alerts-walking-desc = Indicates how fast you're moving. alerts-offer-name = Offer alerts-offer-desc = Someone offers you an item. + +alerts-deflecting-name = Deflecting +alerts-deflecting-desc = You have a chance to deflect incoming projectiles. Standing still or moving slowly will increase this chance. diff --git a/Resources/Locale/en-US/alerts/shadowkin.ftl b/Resources/Locale/en-US/alerts/shadowkin.ftl new file mode 100644 index 00000000000..10f8438b76c --- /dev/null +++ b/Resources/Locale/en-US/alerts/shadowkin.ftl @@ -0,0 +1,2 @@ +alerts-shadowkin-power-name = Power Level +alerts-shadowkin-power-desc = How much energy is available to spend on Shadowkin powers. \ No newline at end of file diff --git a/Resources/Locale/en-US/ame/components/ame-controller-component.ftl b/Resources/Locale/en-US/ame/components/ame-controller-component.ftl index ee1f7f42e72..f15141ebccc 100644 --- a/Resources/Locale/en-US/ame/components/ame-controller-component.ftl +++ b/Resources/Locale/en-US/ame/components/ame-controller-component.ftl @@ -16,7 +16,6 @@ ame-window-refresh-parts-button = Refresh Parts ame-window-core-count-label = Core count: ame-window-power-currentsupply-label = Current power supply: ame-window-power-targetsupply-label = Targeted power supply: -ame-window-toggle-injection-button = Toggle Injection ame-window-eject-button = Eject ame-window-increase-fuel-button = Increase ame-window-decrease-fuel-button = Decrease diff --git a/Resources/Locale/en-US/anomaly/anomaly.ftl b/Resources/Locale/en-US/anomaly/anomaly.ftl index da5882fa62f..1609d77d914 100644 --- a/Resources/Locale/en-US/anomaly/anomaly.ftl +++ b/Resources/Locale/en-US/anomaly/anomaly.ftl @@ -3,6 +3,7 @@ anomaly-component-contact-damage = The anomaly sears off your skin! anomaly-vessel-component-anomaly-assigned = Anomaly assigned to vessel. anomaly-vessel-component-not-assigned = This vessel is not assigned to any anomaly. Try using a scanner on it. anomaly-vessel-component-assigned = This vessel is currently assigned to an anomaly. +anomaly-vessel-component-upgrade-output = point output anomaly-particles-delta = Delta particles anomaly-particles-epsilon = Epsilon particles diff --git a/Resources/Locale/en-US/arcade/components/space-villain-game-component.ftl b/Resources/Locale/en-US/arcade/components/space-villain-game-component.ftl index af005ae62df..75e18c8d715 100644 --- a/Resources/Locale/en-US/arcade/components/space-villain-game-component.ftl +++ b/Resources/Locale/en-US/arcade/components/space-villain-game-component.ftl @@ -11,5 +11,4 @@ space-villain-game-enemy-dies-with-player-message = {$enemyName} dies, but takes space-villain-game-enemy-throws-bomb-message = {$enemyName} throws a bomb, exploding you for {$damageReceived} damage! space-villain-game-enemy-steals-player-power-message = {$enemyName} steals {$stolenAmount} of your power! space-villain-game-enemy-heals-message = {$enemyName} heals for {$healedAmount} health! -space-villain-game-enemy-steals-player-power-message = {$enemyName} steals {$stolenAmount} of your power! -space-villain-game-enemy-attacks-message = {$enemyName} attacks you for {$damageDealt} damage! \ No newline at end of file +space-villain-game-enemy-attacks-message = {$enemyName} attacks you for {$damageDealt} damage! diff --git a/Resources/Locale/en-US/atmos/atmos-alerts-console.ftl b/Resources/Locale/en-US/atmos/atmos-alerts-console.ftl new file mode 100644 index 00000000000..a1640c5e9d5 --- /dev/null +++ b/Resources/Locale/en-US/atmos/atmos-alerts-console.ftl @@ -0,0 +1,35 @@ +atmos-alerts-window-title = Atmospheric Alerts Computer +atmos-alerts-window-station-name = [color=white][font size=14]{$stationName}[/font][/color] +atmos-alerts-window-unknown-location = Unknown location + +atmos-alerts-window-tab-no-alerts = Alerts +atmos-alerts-window-tab-alerts = Alerts ({$value}) +atmos-alerts-window-tab-air-alarms = Air alarms +atmos-alerts-window-tab-fire-alarms = Fire alarms + +atmos-alerts-window-alarm-label = {CAPITALIZE($name)} ({$address}) +atmos-alerts-window-temperature-label = Temperature +atmos-alerts-window-temperature-value = {$valueInC} °C ({$valueInK} K) +atmos-alerts-window-pressure-label = Pressure +atmos-alerts-window-pressure-value = {$value} kPa +atmos-alerts-window-oxygenation-label = Oxygenation +atmos-alerts-window-oxygenation-value = {$value}% +atmos-alerts-window-other-gases-label = Other present gases +atmos-alerts-window-other-gases-value = {$shorthand} ({$value}%) +atmos-alerts-window-other-gases-value-nil = None +atmos-alerts-window-silence-alerts = Silence alerts from this alarm + +atmos-alerts-window-label-alert-types = Alert levels: +atmos-alerts-window-normal-state = Normal +atmos-alerts-window-warning-state = Warning +atmos-alerts-window-danger-state = Danger! +atmos-alerts-window-invalid-state = Inactive + +atmos-alerts-window-no-active-alerts = [font size=16][color=white]No active alerts -[/color] [color={$color}]situation normal[/color][/font] +atmos-alerts-window-no-data-available = No data available +atmos-alerts-window-alerts-being-silenced = Silencing alerts... + +atmos-alerts-window-toggle-overlays = Toggle alarm display + +atmos-alerts-window-flavor-left = Contact an atmospheric technician for assistance +atmos-alerts-window-flavor-right = v1.8 \ No newline at end of file diff --git a/Resources/Locale/en-US/atmos/gas-analyzer-component.ftl b/Resources/Locale/en-US/atmos/gas-analyzer-component.ftl index 03a920cb647..652bb19cb5b 100644 --- a/Resources/Locale/en-US/atmos/gas-analyzer-component.ftl +++ b/Resources/Locale/en-US/atmos/gas-analyzer-component.ftl @@ -12,6 +12,8 @@ gas-analyzer-window-refresh-button = Refresh gas-analyzer-window-no-data = No Data gas-analyzer-window-no-gas-text = No Gases gas-analyzer-window-error-text = Error: {$errorText} +gas-analyzer-window-volume-text = Volume: +gas-analyzer-window-volume-val-text = {$volume} L gas-analyzer-window-pressure-text = Pressure: gas-analyzer-window-pressure-val-text = {$pressure} kPa gas-analyzer-window-temperature-text = Temperature: diff --git a/Resources/Locale/en-US/atmos/gas-recycler-system.ftl b/Resources/Locale/en-US/atmos/gas-recycler-system.ftl index cc527adf5c8..a72e137732c 100644 --- a/Resources/Locale/en-US/atmos/gas-recycler-system.ftl +++ b/Resources/Locale/en-US/atmos/gas-recycler-system.ftl @@ -1,3 +1,6 @@ gas-recycler-reacting = It is [color=green]converting[/color] waste gases. gas-recycler-low-pressure = The input pressure is [color=darkred]too low[/color]. gas-recycler-low-temperature = The input temperature is [color=darkred]too low[/color]. + +gas-recycler-upgrade-min-temp = Minimum temperature +gas-recycler-upgrade-min-pressure = Minimum pressure diff --git a/Resources/Locale/en-US/atmos/portable-scrubber.ftl b/Resources/Locale/en-US/atmos/portable-scrubber.ftl index c4071b4acce..8aadf076d96 100644 --- a/Resources/Locale/en-US/atmos/portable-scrubber.ftl +++ b/Resources/Locale/en-US/atmos/portable-scrubber.ftl @@ -1 +1,4 @@ portable-scrubber-fill-level = It's at about [color=yellow]{$percent}%[/color] of its maximum internal pressure. + +portable-scrubber-component-upgrade-max-pressure = max pressure +portable-scrubber-component-upgrade-transfer-rate = transfer rate diff --git a/Resources/Locale/en-US/borg/borg.ftl b/Resources/Locale/en-US/borg/borg.ftl index 2f51331a83e..c9005eb7961 100644 --- a/Resources/Locale/en-US/borg/borg.ftl +++ b/Resources/Locale/en-US/borg/borg.ftl @@ -17,3 +17,8 @@ borg-ui-no-brain = No brain present borg-ui-remove-battery = Remove borg-ui-modules-label = Modules: borg-ui-module-counter = {$actual}/{$max} + +# Transponder +borg-transponder-disabled-popup = A brain shoots out the top of {$name}! +borg-transponder-emagged-disabled-popup = Your transponder's lights go out! +borg-transponder-emagged-destroyed-popup = Your transponder's fuse blows! diff --git a/Resources/Locale/en-US/botany/components/seed-extractor-component.ftl b/Resources/Locale/en-US/botany/components/seed-extractor-component.ftl index 84d5a5ed283..c586a594a9a 100644 --- a/Resources/Locale/en-US/botany/components/seed-extractor-component.ftl +++ b/Resources/Locale/en-US/botany/components/seed-extractor-component.ftl @@ -2,3 +2,5 @@ seed-extractor-component-interact-message = You extract some seeds from the { THE($name) }. seed-extractor-component-no-seeds = { CAPITALIZE(THE($name)) } has no seeds! + +seed-extractor-component-upgrade-seed-yield = seed yield diff --git a/Resources/Locale/en-US/burning/bodyburn.ftl b/Resources/Locale/en-US/burning/bodyburn.ftl index 896a0b6d042..da4056b1219 100644 --- a/Resources/Locale/en-US/burning/bodyburn.ftl +++ b/Resources/Locale/en-US/burning/bodyburn.ftl @@ -1 +1 @@ -bodyburn-text-others = {$name}'s body burns to ash! +bodyburn-text-others = {$name} burns to ash! diff --git a/Resources/Locale/en-US/cargo/cargo-console-component.ftl b/Resources/Locale/en-US/cargo/cargo-console-component.ftl index b56f4730ccd..941e0fa1805 100644 --- a/Resources/Locale/en-US/cargo/cargo-console-component.ftl +++ b/Resources/Locale/en-US/cargo/cargo-console-component.ftl @@ -30,6 +30,7 @@ cargo-console-snip-snip = Order trimmed to capacity cargo-console-insufficient-funds = Insufficient funds (require {$cost}) cargo-console-unfulfilled = No room to fulfill order cargo-console-trade-station = Sent to {$destination} +cargo-console-unlock-approved-order-broadcast = [bold]{$productName} x{$orderAmount}[/bold], which cost [bold]{$cost}[/bold], was approved by [bold]{$approverName}, {$approverJob}[/bold] cargo-console-paper-print-name = Order #{$orderNumber} cargo-console-paper-print-text = @@ -45,3 +46,5 @@ cargo-shuttle-console-station-unknown = Unknown cargo-shuttle-console-shuttle-not-found = Not found cargo-shuttle-console-organics = Detected organic lifeforms on the shuttle cargo-no-shuttle = No cargo shuttle found! + +cargo-telepad-delay-upgrade = Teleport delay diff --git a/Resources/Locale/en-US/chameleon-projector/chameleon-projector.ftl b/Resources/Locale/en-US/chameleon-projector/chameleon-projector.ftl new file mode 100644 index 00000000000..8a79516077d --- /dev/null +++ b/Resources/Locale/en-US/chameleon-projector/chameleon-projector.ftl @@ -0,0 +1,2 @@ +chameleon-projector-invalid = You can't disguise as that! +chameleon-projector-success = Projected new disguise. diff --git a/Resources/Locale/en-US/chapel/altar.ftl b/Resources/Locale/en-US/chapel/altar.ftl new file mode 100644 index 00000000000..ed031d638ac --- /dev/null +++ b/Resources/Locale/en-US/chapel/altar.ftl @@ -0,0 +1,11 @@ +altar-examine = [color=purple]This altar can be used to sacrifice Psionics.[/color] +altar-sacrifice-verb = Sacrifice + +altar-failure-reason-self = You can't sacrifice yourself! +altar-failure-reason-user = You are not psionic or clerically trained! +altar-failure-reason-user-humanoid = You are not a humanoid! +altar-failure-reason-target = {CAPITALIZE(THE($target))} {CONJUGATE-BE($target)} not psionic! +altar-failure-reason-target-humanoid = {CAPITALIZE(THE($target))} {CONJUGATE-BE($target)} not a humanoid! +altar-failure-reason-target-catatonic = {CAPITALIZE(THE($target))} {CONJUGATE-BE($target)} braindead! + +altar-sacrifice-popup = {$user} starts to sacrifice {$target}! diff --git a/Resources/Locale/en-US/chat/chat-repo.ftl b/Resources/Locale/en-US/chat/chat-repo.ftl new file mode 100644 index 00000000000..a53380260b2 --- /dev/null +++ b/Resources/Locale/en-US/chat/chat-repo.ftl @@ -0,0 +1,7 @@ +command-description-deletechatmessage-id = Delete a specific chat message by message ID +command-description-nukechatmessages-usernames = Delete all of the supplied usernames' chat messages posted during this round +command-description-nukechatmessages-userids = Delete all of the supplied userIds' chat messages posted during this round + +command-error-deletechatmessage-id-notexist = The message with the supplied ID does not exist +command-error-nukechatmessages-usernames-usernamenotexist = Username {$username} does not exist +command-error-nukechatmessages-usernames-usernamenomessages = UserID {$userId} has no messages to nuke diff --git a/Resources/Locale/en-US/chat/emotes.ftl b/Resources/Locale/en-US/chat/emotes.ftl new file mode 100644 index 00000000000..4e26752c4b4 --- /dev/null +++ b/Resources/Locale/en-US/chat/emotes.ftl @@ -0,0 +1,62 @@ +# Names +chat-emote-name-scream = Scream +chat-emote-name-laugh = Laugh +chat-emote-name-honk = Honk +chat-emote-name-sigh = Sigh +chat-emote-name-whistle = Whistle +chat-emote-name-crying = Crying +chat-emote-name-squish = Squish +chat-emote-name-chitter = Chitter +chat-emote-name-squeak = Squeak +chat-emote-name-click = Click +chat-emote-name-clap = Clap +chat-emote-name-snap = Snap +chat-emote-name-salute = Salute +chat-emote-name-deathgasp = Deathgasp +chat-emote-name-buzz = Buzz +chat-emote-name-weh = Weh +chat-emote-name-chirp = Chirp +chat-emote-name-beep = Beep +chat-emote-name-chime = Chime +chat-emote-name-buzztwo = Buzz Two +chat-emote-name-ping = Ping +chat-emote-name-sneeze = Sneeze +chat-emote-name-cough = Cough +chat-emote-name-catmeow = Cat Meow +chat-emote-name-cathisses = Cat Hisses +chat-emote-name-monkeyscreeches = Monkey Screeches +chat-emote-name-robotbeep = Robot +chat-emote-name-yawn = Yawn +chat-emote-name-snore = Snore +chat-emote-name-mars = Mars +chat-emote-name-wurble = Wurble + +# Message +chat-emote-msg-scream = screams! +chat-emote-msg-laugh = laughs. +chat-emote-msg-honk = honks. +chat-emote-msg-sigh = sighs. +chat-emote-msg-whistle = whistles. +chat-emote-msg-crying = cries. +chat-emote-msg-squish = squishes. +chat-emote-msg-chitter = chitters. +chat-emote-msg-squeak = squeaks. +chat-emote-msg-click = clicks. +chat-emote-msg-clap = claps! +chat-emote-msg-snap = snaps {POSS-ADJ($entity)} fingers. +chat-emote-msg-salute = salutes. +chat-emote-msg-deathgasp = seizes up and falls limp, {POSS-ADJ($entity)} eyes dead and lifeless... +chat-emote-msg-deathgasp-monkey = lets out a faint chimper as {SUBJECT($entity)} collapses and stops moving... +chat-emote-msg-buzz = buzz! +chat-emote-msg-chirp = chirps! +chat-emote-msg-beep = beeps. +chat-emote-msg-chime = chimes. +chat-emote-msg-buzzestwo = buzzes twice. +chat-emote-msg-ping = pings. +chat-emote-msg-sneeze = sneezes. +chat-emote-msg-cough = coughs. +chat-emote-msg-catmeow = meows. +chat-emote-msg-cathisses = hisses! +chat-emote-msg-monkeyscreeches = screeches! +chat-emote-msg-yawn = yawns. +chat-emote-msg-snore = snores. diff --git a/Resources/Locale/en-US/chat/managers/chat-language.ftl b/Resources/Locale/en-US/chat/managers/chat-language.ftl new file mode 100644 index 00000000000..f9751606745 --- /dev/null +++ b/Resources/Locale/en-US/chat/managers/chat-language.ftl @@ -0,0 +1,15 @@ +chat-language-Universal-name = Universal +chat-language-Bubblish-name = Bubblish +chat-language-RootSpeak-name = Rootspeak +chat-language-Nekomimetic-name = Neko +chat-language-Draconic-name = Sinta'Unathi +chat-language-Azaziba-name = Sinta'Azaziba +chat-language-SolCommon-name = Sol Common +chat-language-TauCetiBasic-name = Basic +chat-language-Tradeband-name = Tradeband +chat-language-Freespeak-name = Freespeak +chat-language-Elyran-name = Elyran +chat-language-Canilunzt-name = Canilunzt +chat-language-Moffic-name = Moffic +chat-language-RobotTalk-name = Binary +chat-language-ValyrianStandard-name = Valyrian diff --git a/Resources/Locale/en-US/chat/managers/chat-manager.ftl b/Resources/Locale/en-US/chat/managers/chat-manager.ftl index 034f38f854c..f2b70e72a83 100644 --- a/Resources/Locale/en-US/chat/managers/chat-manager.ftl +++ b/Resources/Locale/en-US/chat/managers/chat-manager.ftl @@ -21,10 +21,10 @@ chat-manager-whisper-headset-on-message = You can't whisper on the radio! chat-manager-server-wrap-message = [bold]{$message}[/bold] chat-manager-sender-announcement-wrap-message = [font size=14][bold]{$sender} Announcement:[/font][font size=12] {$message}[/bold][/font] -chat-manager-entity-say-wrap-message = [BubbleHeader][Name]{$entityName}[/Name][/BubbleHeader] {$verb}, "[BubbleContent][font="{$fontType}" size={$fontSize}][color={$color}]{$message}[/color][/font][/BubbleContent]" -chat-manager-entity-say-bold-wrap-message = [BubbleHeader][Name]{$entityName}[/Name][/BubbleHeader] {$verb}, "[BubbleContent][font="{$fontType}" size={$fontSize}][color={$color}][bold]{$message}[/bold][/color][/font][/BubbleContent]" +chat-manager-entity-say-wrap-message = [BubbleHeader][bold][Name]{ $language }{ $entityName }[/Name][/bold][/BubbleHeader] { $verb }, [font={ $fontType } size={ $fontSize } ]"[BubbleContent]{ $message }[/BubbleContent]"[/font] +chat-manager-entity-say-bold-wrap-message = [BubbleHeader][bold][Name]{ $language }{ $entityName }[/Name][/bold][/BubbleHeader] { $verb }, [font={ $fontType } size={ $fontSize }]"[BubbleContent][bold]{ $message }[/bold][/BubbleContent]"[/font] -chat-manager-entity-whisper-wrap-message = [font size=11][italic][BubbleHeader][Name]{$entityName}[/Name][/BubbleHeader] whispers, "[BubbleContent][font="{$fontType}"][color={$color}]{$message}[/color][/font][/BubbleContent]"[/italic][/font] +chat-manager-entity-whisper-wrap-message = [font size=11][italic][BubbleHeader][Name]{ $language }{ $entityName }[/Name][/BubbleHeader] whispers,"[BubbleContent]{ $message }[/BubbleContent]"[/italic][/font] chat-manager-entity-whisper-unknown-wrap-message = [font size=11][italic][BubbleHeader]Someone[/BubbleHeader] whispers, "[BubbleContent][font="{$fontType}"][color={$color}]{$message}[/color][/font][/BubbleContent]"[/italic][/font] # THE() is not used here because the entity and its name can technically be disconnected if a nameOverride is passed... @@ -50,6 +50,8 @@ chat-manager-admin-channel-name = ADMIN chat-manager-rate-limited = You are sending messages too quickly! chat-manager-rate-limit-admin-announcement = Player { $player } breached chat rate limits. Watch them if this is a regular occurence. +chat-manager-send-empathy-chat-wrap-message = {$source}: {$message} + ## Speech verbs for chat chat-speech-verb-suffix-exclamation = ! @@ -156,3 +158,5 @@ chat-speech-verb-name-electricity = Electricity chat-speech-verb-electricity-1 = crackles chat-speech-verb-electricity-2 = buzzes chat-speech-verb-electricity-3 = screeches + +chat-speech-verb-marish = Mars diff --git a/Resources/Locale/en-US/chat/ui/chat-box.ftl b/Resources/Locale/en-US/chat/ui/chat-box.ftl index 720f0d15ab4..0dbfc0a27b1 100644 --- a/Resources/Locale/en-US/chat/ui/chat-box.ftl +++ b/Resources/Locale/en-US/chat/ui/chat-box.ftl @@ -30,4 +30,4 @@ hud-chatbox-channel-Notifications = Notifications hud-chatbox-channel-Server = Server hud-chatbox-channel-Visual = Actions hud-chatbox-channel-Damage = Damage -hud-chatbox-channel-Unspecified = Unspecified +hud-chatbox-channel-Unspecified = Unspecified \ No newline at end of file diff --git a/Resources/Locale/en-US/chat/ui/emote-menu.ftl b/Resources/Locale/en-US/chat/ui/emote-menu.ftl new file mode 100644 index 00000000000..1f92a93c63b --- /dev/null +++ b/Resources/Locale/en-US/chat/ui/emote-menu.ftl @@ -0,0 +1,3 @@ +emote-menu-category-general = General +emote-menu-category-vocal = Vocal +emote-menu-category-hands = Hands diff --git a/Resources/Locale/en-US/chemistry/components/reagent-dispenser-component.ftl b/Resources/Locale/en-US/chemistry/components/reagent-dispenser-component.ftl index 48ec8f52130..37697c45176 100644 --- a/Resources/Locale/en-US/chemistry/components/reagent-dispenser-component.ftl +++ b/Resources/Locale/en-US/chemistry/components/reagent-dispenser-component.ftl @@ -10,9 +10,9 @@ reagent-dispenser-bound-user-interface-title = Reagent dispenser ## UI reagent-dispenser-window-amount-to-dispense-label = Amount -reagent-dispenser-window-container-label = Container: reagent-dispenser-window-clear-button = Clear reagent-dispenser-window-eject-button = Eject +reagent-dispenser-window-eject-container-button = ⏏ reagent-dispenser-window-no-container-loaded-text = No container loaded. reagent-dispenser-window-reagent-name-not-found-text = Reagent name not found reagent-dispenser-window-unknown-reagent-text = Unknown reagent diff --git a/Resources/Locale/en-US/chemistry/components/solution-heater-component.ftl b/Resources/Locale/en-US/chemistry/components/solution-heater-component.ftl new file mode 100644 index 00000000000..cecf15550c7 --- /dev/null +++ b/Resources/Locale/en-US/chemistry/components/solution-heater-component.ftl @@ -0,0 +1 @@ +solution-heater-upgrade-heat = Heat strength diff --git a/Resources/Locale/en-US/chemistry/components/solution-scanner-component.ftl b/Resources/Locale/en-US/chemistry/components/solution-scanner-component.ftl index 8dbbaf3edd7..51a049aab17 100644 --- a/Resources/Locale/en-US/chemistry/components/solution-scanner-component.ftl +++ b/Resources/Locale/en-US/chemistry/components/solution-scanner-component.ftl @@ -3,3 +3,4 @@ scannable-solution-verb-message = Examine the chemical composition. scannable-solution-main-text = It contains the following chemicals: scannable-solution-empty-container = It contains no chemicals. scannable-solution-chemical = - {$amount}u [color={$color}]{$type}[/color] +scannable-solution-temperature = Solution temperature: {$temperature}K \ No newline at end of file diff --git a/Resources/Locale/en-US/chemistry/components/solution-status.ftl b/Resources/Locale/en-US/chemistry/components/solution-status.ftl new file mode 100644 index 00000000000..0ec5f932e0e --- /dev/null +++ b/Resources/Locale/en-US/chemistry/components/solution-status.ftl @@ -0,0 +1,2 @@ +solution-status-volume = Volume: [color=white]{$currentVolume}/{$maxVolume}u[/color] +solution-status-transfer = Transfer: [color=white]{$volume}u[/color] diff --git a/Resources/Locale/en-US/commands/job-whitelist-command.ftl b/Resources/Locale/en-US/commands/job-whitelist-command.ftl new file mode 100644 index 00000000000..add6bca760b --- /dev/null +++ b/Resources/Locale/en-US/commands/job-whitelist-command.ftl @@ -0,0 +1,18 @@ +cmd-jobwhitelist-job-does-not-exist = Job {$job} does not exist. +cmd-jobwhitelist-player-not-found = Player {$player} not found. +cmd-jobwhitelist-hint-player = [player] +cmd-jobwhitelist-hint-job = [job] +cmd-jobwhitelistadd-desc = Lets a player play a whitelisted job. +cmd-jobwhitelistadd-help = Usage: jobwhitelistadd +cmd-jobwhitelistadd-already-whitelisted = {$player} is already whitelisted to play as {$jobId} .({$jobName}). +cmd-jobwhitelistadd-added = Added {$player} to the {$jobId} ({$jobName}) whitelist. +cmd-jobwhitelistget-desc = Gets all the jobs that a player has been whitelisted for. +cmd-jobwhitelistget-help = Usage: jobwhitelistadd +cmd-jobwhitelistget-whitelisted-none = Player {$player} is not whitelisted for any jobs. +cmd-jobwhitelistget-whitelisted-for = "Player {$player} is whitelisted for: +{$jobs}" + +cmd-jobwhitelistremove-desc = Removes a player's ability to play a whitelisted job. +cmd-jobwhitelistremove-help = Usage: jobwhitelistadd +cmd-jobwhitelistremove-was-not-whitelisted = {$player} was not whitelisted to play as {$jobId} ({$jobName}). +cmd-jobwhitelistremove-removed = Removed {$player} from the whitelist for {$jobId} ({$jobName}). diff --git a/Resources/Locale/en-US/commands/tippy-command.ftl b/Resources/Locale/en-US/commands/tippy-command.ftl new file mode 100644 index 00000000000..6b9a95a1dd8 --- /dev/null +++ b/Resources/Locale/en-US/commands/tippy-command.ftl @@ -0,0 +1,12 @@ +cmd-tippy-desc = Broadcast a message as Tippy the clown. +cmd-tippy-help = tippy [entity prototype] [speak time] [slide time] [waddle interval] +cmd-tippy-auto-1 = +cmd-tippy-auto-2 = message +cmd-tippy-auto-3 = entity prototype +cmd-tippy-auto-4 = speak time, in seconds +cmd-tippy-auto-5 = slide time, in seconds +cmd-tippy-auto-6 = waddle interval, in seconds +cmd-tippy-error-no-user = User not found. +cmd-tippy-error-no-prototype = Prototype not found: {$proto} + +cmd-tip-desc = Spawn a random game tip. diff --git a/Resources/Locale/en-US/commands/toolshed-commands.ftl b/Resources/Locale/en-US/commands/toolshed-commands.ftl index 04f6aa08fac..e2536f6781b 100644 --- a/Resources/Locale/en-US/commands/toolshed-commands.ftl +++ b/Resources/Locale/en-US/commands/toolshed-commands.ftl @@ -80,3 +80,5 @@ command-description-mind-control = Assumes control of an entity with the given player. command-description-addaccesslog = Adds an access log to this entity. Do note that this bypasses the log's default limit and pause check. +command-description-stationevent-simulate = + Simulates N number of rounds in which events will occur and prints the occurrences of every event after. diff --git a/Resources/Locale/en-US/communications/communications-console-component.ftl b/Resources/Locale/en-US/communications/communications-console-component.ftl index f7cc87cb8ba..bead43df286 100644 --- a/Resources/Locale/en-US/communications/communications-console-component.ftl +++ b/Resources/Locale/en-US/communications/communications-console-component.ftl @@ -1,4 +1,4 @@ -# User interface +# User interface comms-console-menu-title = Communications Console comms-console-menu-announcement-placeholder = Announcement text... comms-console-menu-announcement-button = Announce @@ -9,6 +9,7 @@ comms-console-menu-recall-shuttle = Recall emergency shuttle # Popup comms-console-permission-denied = Permission denied comms-console-shuttle-unavailable = Shuttle is currently unavailable +comms-console-message-too-long = Message is too long # Placeholder values comms-console-announcement-sent-by = Sent by diff --git a/Resources/Locale/en-US/components/storage-component.ftl b/Resources/Locale/en-US/components/storage-component.ftl index 29c858891af..e742c83f6a6 100644 --- a/Resources/Locale/en-US/components/storage-component.ftl +++ b/Resources/Locale/en-US/components/storage-component.ftl @@ -8,3 +8,5 @@ comp-storage-cant-drop = You can't let go of { THE($entity) }! comp-storage-window-title = Storage Item comp-storage-window-weight = { $weight }/{ $maxWeight }, Max Size: {$size} comp-storage-window-slots = Slots: { $itemCount }/{ $maxCount }, Max Size: {$size} +comp-storage-verb-open-storage = Open Storage +comp-storage-verb-close-storage = Close Storage diff --git a/Resources/Locale/en-US/construction/components/machine-part-component.ftl b/Resources/Locale/en-US/construction/components/machine-part-component.ftl new file mode 100644 index 00000000000..0613f505161 --- /dev/null +++ b/Resources/Locale/en-US/construction/components/machine-part-component.ftl @@ -0,0 +1,2 @@ +machine-part-component-on-examine-rating-text = [color=white]Rating:[/color] [color=cyan]{$rating}[/color] +machine-part-component-on-examine-type-text = [color=white]Type:[/color] [color=cyan]{$type}[/color] diff --git a/Resources/Locale/en-US/construction/ui/construction-menu.ftl b/Resources/Locale/en-US/construction/ui/construction-menu.ftl index f4b7f3559ac..82ebc01bc99 100644 --- a/Resources/Locale/en-US/construction/ui/construction-menu.ftl +++ b/Resources/Locale/en-US/construction/ui/construction-menu.ftl @@ -4,5 +4,4 @@ construction-menu-title = Construction construction-menu-place-ghost = Place construction ghost construction-menu-clear-all = Clear All construction-menu-eraser-mode = Eraser Mode -construction-menu-title = Construction -construction-menu-craft = Craft \ No newline at end of file +construction-menu-craft = Craft diff --git a/Resources/Locale/en-US/containers/containers.ftl b/Resources/Locale/en-US/containers/containers.ftl index ab011f64f84..d96383305a0 100644 --- a/Resources/Locale/en-US/containers/containers.ftl +++ b/Resources/Locale/en-US/containers/containers.ftl @@ -1,2 +1,5 @@ container-verb-text-enter = Enter container-verb-text-empty = Empty + +## missed +container-thrown-missed = Missed! \ No newline at end of file diff --git a/Resources/Locale/en-US/damage/damage-groups.ftl b/Resources/Locale/en-US/damage/damage-groups.ftl new file mode 100644 index 00000000000..cfaf866e345 --- /dev/null +++ b/Resources/Locale/en-US/damage/damage-groups.ftl @@ -0,0 +1,6 @@ +damage-group-brute = Brute +damage-group-burn = Burn +damage-group-airloss = Airloss +damage-group-toxin = Toxin +damage-group-genetic = Genetic +damage-group-immaterial = Immaterial diff --git a/Resources/Locale/en-US/damage/damage-types.ftl b/Resources/Locale/en-US/damage/damage-types.ftl new file mode 100644 index 00000000000..3b6256864f2 --- /dev/null +++ b/Resources/Locale/en-US/damage/damage-types.ftl @@ -0,0 +1,14 @@ +damage-type-asphyxiation = Asphyxiation +damage-type-bloodloss = Bloodloss +damage-type-blunt = Blunt +damage-type-cellular = Cellular +damage-type-caustic = Caustic +damage-type-cold = Cold +damage-type-heat = Heat +damage-type-piercing = Piercing +damage-type-poison = Poison +damage-type-radiation = Radiation +damage-type-shock = Shock +damage-type-slash = Slash +damage-type-structural = Structural +damage-type-holy = Holy diff --git a/Resources/Locale/en-US/deltav/cartridge-loader/cartridges.ftl b/Resources/Locale/en-US/deltav/cartridge-loader/cartridges.ftl index 9b4c59d001d..ede1a36b8ee 100644 --- a/Resources/Locale/en-US/deltav/cartridge-loader/cartridges.ftl +++ b/Resources/Locale/en-US/deltav/cartridge-loader/cartridges.ftl @@ -118,3 +118,16 @@ crime-assist-sophont-explanation = A sophont is described as any entity with the • [bold]Sentience[/bold]: the entity has the capacity to process an emotion or lack thereof, or at a minimum the ability to recognise its own pain. • [bold]Self-awareness[/bold]: the entity is capable of altering its behaviour in a reasonable fashion as a result of stimuli, or at a minimum is capable of recognising its own sapience and sentience. Any sophont is considered a legal person, regardless of origin or prior cognitive status. Much like any other intelligent organic, a sophont may press charges against crew and be tried for crimes. + +mail-metrics-program-name = MailMetrics +mail-metrics-header = Income from Mail Deliveries +mail-metrics-opened = Earnings (Opened) +mail-metrics-expired = Losses (Expired) +mail-metrics-damaged = Losses (Damaged) +mail-metrics-tampered = Losses (Tampered) +mail-metrics-unopened = Unopened +mail-metrics-count-header = Packages +mail-metrics-money-header = Spesos +mail-metrics-total = Total +mail-metrics-progress = {$opened} out of {$total} packages opened! +mail-metrics-progress-percent = Success rate: {$successRate}% diff --git a/Resources/Locale/en-US/deltav/changelog/changelog-window.ftl b/Resources/Locale/en-US/deltav/changelog/changelog-window.ftl deleted file mode 100644 index ba095980c6e..00000000000 --- a/Resources/Locale/en-US/deltav/changelog/changelog-window.ftl +++ /dev/null @@ -1 +0,0 @@ -changelog-tab-title-DeltaVChangelog = DeltaV diff --git a/Resources/Locale/en-US/deltav/connection-messages.ftl b/Resources/Locale/en-US/deltav/connection-messages.ftl deleted file mode 100644 index 5d2ea9b1511..00000000000 --- a/Resources/Locale/en-US/deltav/connection-messages.ftl +++ /dev/null @@ -1 +0,0 @@ -whitelist-not-whitelisted-peri = You are not whitelisted. To become whitelisted, apply on our forum. It can be found at https://forum.delta-v.org/ diff --git a/Resources/Locale/en-US/deltav/escape-menu/options-menu.ftl b/Resources/Locale/en-US/deltav/escape-menu/options-menu.ftl deleted file mode 100644 index 50d55cb76d0..00000000000 --- a/Resources/Locale/en-US/deltav/escape-menu/options-menu.ftl +++ /dev/null @@ -1,4 +0,0 @@ -ui-options-tab-deltav = DeltaV -ui-options-general-forknotice = Note: These settings are fork-specific and might not apply on other servers. - -ui-options-no-filters = Disable species vision filters diff --git a/Resources/Locale/en-US/deltav/flavors/flavor-profiles.ftl b/Resources/Locale/en-US/deltav/flavors/flavor-profiles.ftl index 98e04f2818d..2cae678bc7e 100644 --- a/Resources/Locale/en-US/deltav/flavors/flavor-profiles.ftl +++ b/Resources/Locale/en-US/deltav/flavors/flavor-profiles.ftl @@ -5,7 +5,6 @@ flavor-complex-enthralling = enthralling flavor-complex-sublime = sublime flavor-complex-holy = heavenly flavor-base-seeds = seeds -flavor-complex-cotton = like cotton flavor-complex-vanilla = like vanilla flavor-complex-soju = like bold, alcoholic rice flavor-complex-orangecreamcicle = like creamy, alcoholic orange juice @@ -26,4 +25,3 @@ flavor-complex-greengrass = like a holiday in the sun flavor-complex-daiquiri = fashionable flavor-complex-arsonistsbrew = like ash and flame flavor-complex-healthcodeviolation = ominous -flavor-complex-pumpkin = like pumpkin diff --git a/Resources/Locale/en-US/deltav/prototypes/catalog/cargo/cargo-fun.ftl b/Resources/Locale/en-US/deltav/prototypes/catalog/cargo/cargo-fun.ftl deleted file mode 100644 index 32d3ab61c37..00000000000 --- a/Resources/Locale/en-US/deltav/prototypes/catalog/cargo/cargo-fun.ftl +++ /dev/null @@ -1,2 +0,0 @@ -ent-CrateFunBBGun = { ent-CrateFunBBGun } - .desc = { ent-CrateFunBBGun.desc } diff --git a/Resources/Locale/en-US/devices/device-network.ftl b/Resources/Locale/en-US/devices/device-network.ftl index 2740143d519..56a3930cd16 100644 --- a/Resources/Locale/en-US/devices/device-network.ftl +++ b/Resources/Locale/en-US/devices/device-network.ftl @@ -7,6 +7,8 @@ device-frequency-prototype-name-mailing-units = Mailing Units device-frequency-prototype-name-pdas = PDAs device-frequency-prototype-name-fax = Fax device-frequency-prototype-name-basic-device = Basic Devices +device-frequency-prototype-name-cyborg-control = Cyborg Control +device-frequency-prototype-name-robotics-console = Robotics Console ## camera frequencies device-frequency-prototype-name-surveillance-camera-test = Subnet Test diff --git a/Resources/Locale/en-US/devices/network-configurator.ftl b/Resources/Locale/en-US/devices/network-configurator.ftl index e1bcbc4c943..cd4955ed365 100644 --- a/Resources/Locale/en-US/devices/network-configurator.ftl +++ b/Resources/Locale/en-US/devices/network-configurator.ftl @@ -41,5 +41,5 @@ network-configurator-examine-current-mode = Current mode: {$mode} network-configurator-examine-switch-modes = Press {$key} to switch modes # item status -network-configurator-item-status-label = Current mode: {$mode} -{$keybinding} to switch mode +network-configurator-item-status-label = Mode: {$mode} + Switch: {$keybinding} diff --git a/Resources/Locale/en-US/disposal/tube/components/disposal-router-component.ftl b/Resources/Locale/en-US/disposal/tube/components/disposal-router-component.ftl index 64fbfdf66f3..4fe24b78539 100644 --- a/Resources/Locale/en-US/disposal/tube/components/disposal-router-component.ftl +++ b/Resources/Locale/en-US/disposal/tube/components/disposal-router-component.ftl @@ -4,7 +4,3 @@ disposal-router-window-title = Disposal Router disposal-router-window-tags-label = Tags: disposal-router-window-tag-input-tooltip = A comma separated list of tags disposal-router-window-tag-input-confirm-button = Confirm - -## ConfigureVerb - -configure-verb-get-data-text = Open Configuration diff --git a/Resources/Locale/en-US/disposal/tube/components/disposal-tagger-window.ftl b/Resources/Locale/en-US/disposal/tube/components/disposal-tagger-window.ftl index dc4b40fc7f8..55523c4b954 100644 --- a/Resources/Locale/en-US/disposal/tube/components/disposal-tagger-window.ftl +++ b/Resources/Locale/en-US/disposal/tube/components/disposal-tagger-window.ftl @@ -1,6 +1,3 @@ disposal-tagger-window-title = Disposal Tagger disposal-tagger-window-tag-input-label = Tag: disposal-tagger-window-tag-confirm-button = Confirm - -## ConfigureVerb -configure-verb-get-data-text = Open Configuration diff --git a/Resources/Locale/en-US/disposal/unit/components/disposal-unit-component.ftl b/Resources/Locale/en-US/disposal/unit/components/disposal-unit-component.ftl index 288db53668f..2b23ee9a4ad 100644 --- a/Resources/Locale/en-US/disposal/unit/components/disposal-unit-component.ftl +++ b/Resources/Locale/en-US/disposal/unit/components/disposal-unit-component.ftl @@ -18,9 +18,6 @@ disposal-eject-verb-get-data-text = Eject contents ## No hands disposal-unit-no-hands = You don't have hands! -## missed -disposal-unit-thrown-missed = Missed! - # state disposal-unit-state-Ready = Ready # Yes I want it to always say Pressurizing diff --git a/Resources/Locale/en-US/entity-categories.ftl b/Resources/Locale/en-US/entity-categories.ftl new file mode 100644 index 00000000000..190fe5713ac --- /dev/null +++ b/Resources/Locale/en-US/entity-categories.ftl @@ -0,0 +1 @@ +entity-category-name-actions = Actions diff --git a/Resources/Locale/en-US/escape-menu/ui/options-menu.ftl b/Resources/Locale/en-US/escape-menu/ui/options-menu.ftl index 9fc99ddd223..e9e4e7d47e2 100644 --- a/Resources/Locale/en-US/escape-menu/ui/options-menu.ftl +++ b/Resources/Locale/en-US/escape-menu/ui/options-menu.ftl @@ -52,6 +52,7 @@ ui-options-fancy-speech = Show names in speech bubbles ui-options-fancy-name-background = Add background to speech bubble names ui-options-enable-color-name = Add colors to character names ui-options-colorblind-friendly = Colorblind friendly mode +ui-options-no-filters = Disable species vision filters ui-options-reduced-motion = Reduce motion of visual effects ui-options-chat-window-opacity = Chat window opacity ui-options-chat-window-opacity-percent = { TOSTRING($opacity, "P0") } @@ -88,6 +89,10 @@ ui-options-vp-integer-scaling-tooltip = If this option is enabled, the viewport at specific resolutions. While this results in crisp textures, it also often means that black bars appear at the top/bottom of the screen or that part of the viewport is not visible. +ui-options-vp-vertical-fit = Vertical viewport fitting +ui-options-vp-vertical-fit-tooltip = When enabled, the main viewport will ignore the horizontal axis entirely when + fitting to your screen. If your screen is smaller than the viewport, then this + will cause the viewport to be cut off on the horizontal axis. ui-options-vp-low-res = Low-resolution viewport ui-options-parallax-low-quality = Low-quality Parallax (background) ui-options-fps-counter = Show FPS counter @@ -147,6 +152,7 @@ ui-options-function-rotate-stored-item = Rotate stored item ui-options-function-offer-item = Offer something ui-options-function-save-item-location = Save item location ui-options-function-toggle-standing = Toggle standing +ui-options-function-toggle-crawling-under = Toggle crawling under furniture ui-options-static-storage-ui = Lock storage window to hotbar ui-options-function-smart-equip-backpack = Smart-equip to backpack @@ -177,6 +183,7 @@ ui-options-function-open-crafting-menu = Open crafting menu ui-options-function-open-inventory-menu = Open inventory ui-options-function-open-a-help = Open admin help ui-options-function-open-abilities-menu = Open action menu +ui-options-function-toggle-round-end-summary-window = Toggle round end summary window ui-options-function-open-entity-spawn-window = Open entity spawn menu ui-options-function-open-sandbox-window = Open sandbox menu ui-options-function-open-tile-spawn-window = Open tile spawn menu @@ -200,7 +207,6 @@ ui-options-function-editor-rotate-object = Rotate ui-options-function-editor-flip-object = Flip ui-options-function-editor-copy-object = Copy -ui-options-function-open-abilities-menu = Open action menu ui-options-function-show-debug-console = Open Console ui-options-function-show-debug-monitors = Show Debug Monitors ui-options-function-inspect-entity = Inspect Entity @@ -270,3 +276,8 @@ ui-options-net-pvs-leave-tooltip = This limits the rate at which the client will ## Toggle window console command cmd-options-desc = Opens options menu, optionally with a specific tab selected. cmd-options-help = Usage: options [tab] + +## Combat Options +ui-options-function-look-up = Look up/Take aim +ui-options-function-auto-get-up = Automatically get up after falling +ui-options-function-hold-look-up = Hold down the key to aim diff --git a/Resources/Locale/en-US/fax/fax.ftl b/Resources/Locale/en-US/fax/fax.ftl index 1f1881a05d6..412f3d7f435 100644 --- a/Resources/Locale/en-US/fax/fax.ftl +++ b/Resources/Locale/en-US/fax/fax.ftl @@ -3,6 +3,8 @@ fax-machine-popup-received = Received correspondence from { $from }. fax-machine-popup-name-long = Fax name is too long fax-machine-popup-name-exist = Fax with same name already exist in network fax-machine-popup-name-set = Fax name has been updated +fax-machine-popup-error = ERROR - jam in paper feed +fax-machine-popup-copy-error = ERROR - unable to copy! fax-machine-dialog-rename = Rename fax-machine-dialog-field-name = Name diff --git a/Resources/Locale/en-US/flavors/flavor-profiles.ftl b/Resources/Locale/en-US/flavors/flavor-profiles.ftl index 3eaf08a5c75..65adba81192 100644 --- a/Resources/Locale/en-US/flavors/flavor-profiles.ftl +++ b/Resources/Locale/en-US/flavors/flavor-profiles.ftl @@ -173,6 +173,9 @@ flavor-complex-light = like a light gone out flavor-complex-profits = like profits flavor-complex-fishops = like the dreaded fishops flavor-complex-violets = like violets +flavor-complex-pyrotton = like a burning mouth +flavor-complex-mothballs = like mothballs +flavor-complex-paint-thinner = like paint thinner # Drink-specific flavors. @@ -245,6 +248,12 @@ flavor-complex-atomic-cola = like hoarding bottle caps flavor-complex-cuba-libre = like spiked cola flavor-complex-gin-tonic = like spiked lemon-lime soda flavor-complex-screwdriver = like spiked orange juice +flavor-complex-vodka-red-bool = like a heart attack +flavor-complex-irish-bool = caffine and Ireland +flavor-complex-xeno-basher = like killing bugs +flavor-complex-budget-insuls-drink = like door hacking +flavor-complex-watermelon-wakeup = like a sweet wakeup call +flavor-complex-rubberneck = like synthetics flavor-complex-irish-car-bomb = like a spiked cola float flavor-complex-themartinez = like violets and lemon vodka flavor-complex-cogchamp = like brass diff --git a/Resources/Locale/en-US/flight/flight_system.ftl b/Resources/Locale/en-US/flight/flight_system.ftl index 12693cc8467..3558ab9dc88 100644 --- a/Resources/Locale/en-US/flight/flight_system.ftl +++ b/Resources/Locale/en-US/flight/flight_system.ftl @@ -1,2 +1,3 @@ no-flight-while-restrained = You can't fly right now. -no-flight-while-zombified = You can't use your wings right now. \ No newline at end of file +no-flight-while-zombified = You can't use your wings right now. +no-flight-while-lying = You can't fly right now. \ No newline at end of file diff --git a/Resources/Locale/en-US/fluids/components/absorbent-component.ftl b/Resources/Locale/en-US/fluids/components/absorbent-component.ftl index 670ac0a36ad..8a4d37023f6 100644 --- a/Resources/Locale/en-US/fluids/components/absorbent-component.ftl +++ b/Resources/Locale/en-US/fluids/components/absorbent-component.ftl @@ -1,8 +1,8 @@ mopping-system-target-container-empty = { CAPITALIZE(THE($target)) } is empty! mopping-system-target-container-empty-water = { CAPITALIZE(THE($target)) } has no water! -mopping-system-puddle-space = { THE($used) } is full of water -mopping-system-puddle-evaporate = { THE($target) } is evaporating -mopping-system-no-water = { THE($used) } has no water! +mopping-system-puddle-space = { CAPITALIZE(THE($used)) } is full of water +mopping-system-puddle-evaporate = { CAPITALIZE(THE($target)) } is evaporating +mopping-system-no-water = { CAPITALIZE(THE($used)) } has no water! -mopping-system-full = { THE($used) } is full! -mopping-system-empty = { THE($used) } is empty! +mopping-system-full = { CAPITALIZE(THE($used)) } is full! +mopping-system-empty = { CAPITALIZE(THE($used)) } is empty! diff --git a/Resources/Locale/en-US/foldable/components/foldable-component.ftl b/Resources/Locale/en-US/foldable/components/foldable-component.ftl index 525820920bd..9c1f934911f 100644 --- a/Resources/Locale/en-US/foldable/components/foldable-component.ftl +++ b/Resources/Locale/en-US/foldable/components/foldable-component.ftl @@ -4,7 +4,11 @@ foldable-deploy-fail = You can't deploy the {$object} here. fold-verb = Fold unfold-verb = Unfold +# Hat fold-flip-verb = Flip - +# Coat fold-zip-verb = Zip up fold-unzip-verb = Unzip +# Jumpsuits +fold-rollsleeves-verb = roll sleeves up +fold-unrollsleeves-verb = roll sleeves down diff --git a/Resources/Locale/en-US/game-ticking/game-presets/preset-revolutionary.ftl b/Resources/Locale/en-US/game-ticking/game-presets/preset-revolutionary.ftl index 5fb1d40b3d3..15b53cf14b1 100644 --- a/Resources/Locale/en-US/game-ticking/game-presets/preset-revolutionary.ftl +++ b/Resources/Locale/en-US/game-ticking/game-presets/preset-revolutionary.ftl @@ -5,31 +5,31 @@ roles-antag-rev-head-objective = Your objective is to take over the station by c head-rev-role-greeting = You are a Head Revolutionary. - You are tasked with removing all of Command from station via death or exilement. + You are tasked with removing all of Command from station via death, exilement or imprisonment. The Syndicate has sponsored you with a flash that converts the crew to your side. Beware, this won't work on Security, Command, or those wearing sunglasses. Viva la revolución! head-rev-briefing = Use flashes to convert people to your cause. - Kill all heads to take over the station. + Get rid of all heads to take over the station. head-rev-break-mindshield = The Mindshield was destroyed! ## Rev roles-antag-rev-name = Revolutionary -roles-antag-rev-objective = Your objective is to ensure the safety and follow the orders of the Head Revolutionaries as well as killing all Command staff on station. +roles-antag-rev-objective = Your objective is to ensure the safety and follow the orders of the Head Revolutionaries as well as getting rid of all Command staff on station. rev-break-control = {$name} has remembered their true allegiance! rev-role-greeting = You are a Revolutionary. You are tasked with taking over the station and protecting the Head Revolutionaries. - Eliminate all of the Command staff. + Get rid of all of the Command staff. Viva la revolución! -rev-briefing = Help your head revolutionaries kill every head to take over the station. +rev-briefing = Help your head revolutionaries get rid of every head to take over the station. ## General @@ -40,9 +40,7 @@ rev-not-enough-ready-players = Not enough players readied up for the game. There rev-no-one-ready = No players readied up! Can't start a Revolution. rev-no-heads = There were no Head Revolutionaries to be selected. Can't start a Revolution. -rev-all-heads-dead = All the heads are dead, now finish up the rest of the crew! - -rev-won = The Head Revs survived and killed all of Command. +rev-won = The Head Revs survived and successfully seized control of the station. rev-lost = Command survived and killed all of the Head Revs. diff --git a/Resources/Locale/en-US/game-ticking/game-presets/preset-traitor.ftl b/Resources/Locale/en-US/game-ticking/game-presets/preset-traitor.ftl index 724b752fbb6..e92676a2160 100644 --- a/Resources/Locale/en-US/game-ticking/game-presets/preset-traitor.ftl +++ b/Resources/Locale/en-US/game-ticking/game-presets/preset-traitor.ftl @@ -4,6 +4,7 @@ traitor-round-end-codewords = The codewords were: [color=White]{$codewords}[/col traitor-round-end-agent-name = traitor objective-issuer-syndicate = [color=crimson]The Syndicate[/color] +objective-issuer-unknown = Unknown # Shown at the end of a round of Traitor @@ -23,7 +24,7 @@ traitor-death-match-end-round-description-entry = {$originalName}'s PDA, with {$ # TraitorRole traitor-role-greeting = - You are a syndicate agent. + You are an agent sent by {$corporation} on behalf of The Syndicate. Your objectives and codewords are listed in the character menu. Use the uplink loaded into your PDA to buy the tools you'll need for this mission. Death to Nanotrasen! diff --git a/Resources/Locale/en-US/game-ticking/game-rules/rule-terminator.ftl b/Resources/Locale/en-US/game-ticking/game-rules/rule-terminator.ftl deleted file mode 100644 index 2e167431773..00000000000 --- a/Resources/Locale/en-US/game-ticking/game-rules/rule-terminator.ftl +++ /dev/null @@ -1,18 +0,0 @@ -terminator-round-end-agent-name = nt-800 - -objective-issuer-susnet = [color=#d64119]Susnet[/color] - -terminator-role-greeting = - You are the exterminator, a relentless assassin sent into the past to secure our future. - We need you to eliminate {$target}, {$job}. - Use any means at your disposal to complete the mission. - Glory to Cybersun. - -# DeltaV - paradox anomaly -terminator-role-briefing = - You are a bluespace anomaly that looks and sound identical to someone from this reality. - Kill them and assume their identity, or talk it out and become friends. - Your objectives support either playstyle (and you obviously can't do both). - -terminator-endoskeleton-gib-popup = All the battered flesh falls apart, revealing a titanium endoskeleton! -terminator-endoskeleton-burn-popup = The seared flesh is burned to a crisp, revealing a titanium endoskeleton! diff --git a/Resources/Locale/en-US/geras/geras.ftl b/Resources/Locale/en-US/geras/geras.ftl new file mode 100644 index 00000000000..3cd3f101ffa --- /dev/null +++ b/Resources/Locale/en-US/geras/geras.ftl @@ -0,0 +1,2 @@ +geras-popup-morph-message-user = You shift and morph into a small version of you! +geras-popup-morph-message-others = {CAPITALIZE(THE($entity))} shifts and morphs into a blob of slime! diff --git a/Resources/Locale/en-US/ghost/ghost-gui.ftl b/Resources/Locale/en-US/ghost/ghost-gui.ftl index 909513e96ca..1d793f39411 100644 --- a/Resources/Locale/en-US/ghost/ghost-gui.ftl +++ b/Resources/Locale/en-US/ghost/ghost-gui.ftl @@ -10,8 +10,20 @@ ghost-gui-toggle-hearing-popup-off = You can now only hear radio and nearby mess ghost-target-window-title = Ghost Warp ghost-target-window-current-button = Warp: {$name} +ghost-target-window-warp-to-most-followed = Warp to Most Followed ghost-roles-window-title = Ghost Roles +ghost-roles-window-join-raffle-button = Join raffle +ghost-roles-window-raffle-in-progress-button = + Join raffle ({$time} left, { $players -> + [one] {$players} player + *[other] {$players} players + }) +ghost-roles-window-leave-raffle-button = + Leave raffle ({$time} left, { $players -> + [one] {$players} player + *[other] {$players} players + }) ghost-roles-window-request-role-button = Request ghost-roles-window-request-role-button-timer = Request ({$time}s) ghost-roles-window-follow-role-button = Follow @@ -20,3 +32,4 @@ ghost-roles-window-rules-footer = The button will enable after {$time} seconds ( ghost-return-to-body-title = Return to Body ghost-return-to-body-text = You are being revived! Return to your body? +ghost-gui-return-to-round-button = Return to round \ No newline at end of file diff --git a/Resources/Locale/en-US/ghost/ghost-respawn.ftl b/Resources/Locale/en-US/ghost/ghost-respawn.ftl new file mode 100644 index 00000000000..a97fc689524 --- /dev/null +++ b/Resources/Locale/en-US/ghost/ghost-respawn.ftl @@ -0,0 +1,15 @@ +ghost-respawn-time-left = Please wait {$time} {$time -> + [one] minute + *[other] minutes +} before trying to respawn. + +ghost-respawn-max-players = Cannot respawn right now. There should be fewer than {$players} players. +ghost-respawn-window-title = Respawn rules +ghost-respawn-window-rules-footer = By respawning, you [color=#ff7700]agree[/color] [color=#ff0000]not to use any knowledge gained as your previous charactrer[/color]. Violation of this rule may constitute a server ban. Please, read the server rules for more details. +ghost-respawn-same-character = You cannot respawn as the same character. Please select a different one in character preferences. + +ghost-respawn-log-character-almost-same = Player {$player} { $try -> + [true] joined + *[false] tried to join +} the round after respawning with a similar name. Previous name: { $oldName }, current: { $newName }. +ghost-respawn-log-return-to-lobby = { $userName } returned to the lobby. diff --git a/Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl b/Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl index 9260db903fc..d317902041e 100644 --- a/Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl +++ b/Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl @@ -4,17 +4,6 @@ ghost-role-component-default-rules = All normal rules apply unless an administra You are allowed to remember knowledge about the game in general, such as how to cook, how to use objects, etc. You are absolutely [color=red]NOT[/color] allowed to remember, say, the name, appearance, etc. of your previous character. -# Delta V soft antag rule -deltav-ghost-role-information-softantag-rules = You are allowed to attack the crew without provocation. - You are allowed to coexist with the crew. - The crew is allowed to kill you without warning. - -# Delta V salvage antag rule -deltav-ghost-role-information-salvageantag-rules = You are a salvage mob. - You are allowed to attack salvagers without provocation. DO NOT GIB THEIR CORPSES! - You are allowed to attack the salvage shuttle. - You are NOT allowed to go to the station. If the salvagers go to the station, you can't follow them. - ghost-role-information-mouse-name = Mouse ghost-role-information-mouse-description = A hungry and mischievous mouse. @@ -40,16 +29,13 @@ ghost-role-information-angry-slimes-description = Everyone around you irritates ghost-role-information-smile-name = Smile the Slime ghost-role-information-smile-description = The sweetest creature in the world. Smile Slime! -ghost-role-information-smile-rules = You are a crew-aligned pet. You can defend yourself and even attack threats to the station, but you generally should not attack the station's crew nor destroy their property. ghost-role-information-punpun-name = Pun Pun ghost-role-information-punpun-description = An honorable member of the monkey society in charge of the bar and helping the bartenders in any way he can. ghost-role-information-xeno-name = Xeno ghost-role-information-xeno-description = You are a xeno, co-operate with your hive to kill all crewmembers! -ghost-role-information-xeno-rules = You are a xeno. - Your objective is to cooperate with your fellow xenos and kill all the crew. - Strike fast, make them fear the shadows. +ghost-role-information-xeno-rules = You are an antagonist, smack, slash, and wack! ghost-role-information-revenant-name = Revenant ghost-role-information-revenant-description = You are a Revenant. Use your powers to harvest souls and unleash chaos upon the crew. Unlock new abilities with the essence you harvest. @@ -226,14 +212,6 @@ ghost-role-information-BreadDog-name = BreadDog ghost-role-information-BreadDog-description = You are the chef's favorite child. You're a living bread dog. ghost-role-information-BreadDog-rules = You're an edible dog made of bread. Your task is to find your place in this world where everything wants to eat you. -ghost-role-information-Shiva-name = Shiva -ghost-role-information-Shiva-description = Shiva, the stations first defender. Help the Head of Security in their work -ghost-role-information-Shiva-rules = Protect security staff and the crew from danger. Stay with Security staff or around the Security department, try to disable criminals and not kill them if the situation allows for it. - -ghost-role-information-exterminator-name = Exterminator -ghost-role-information-exterminator-description = You been been sent back in time to terminate a target with high importance to the future. -ghost-role-information-exterminator-rules = You are an antagonist and may kill anyone that tries to stop you, but killing the target is always your top priority. - ghost-role-information-space-ninja-name = Space Ninja ghost-role-information-space-ninja-description = Use stealth and deception to sabotage the station. ghost-role-information-space-ninja-rules = You are an elite mercenary of the Spider Clan. You aren't required to follow your objectives, yet your NINJA HONOR demands you try. @@ -246,6 +224,30 @@ ghost-role-information-syndicate-monkey-reinforcement-name = Syndicate Monkey Ag ghost-role-information-syndicate-monkey-reinforcement-description = Someone needs reinforcements. You, a trained monkey, will help them. ghost-role-information-syndicate-monkey-reinforcement-rules = Normal syndicate antagonist rules apply. Work with whoever called you in, and don't harm them. +ghost-role-information-lost-cargo-technical-name = Lost Cargo Technician +ghost-role-information-lost-cargo-technical-description = Something went wrong and your cargo shuttle with the goods was beamed into the sector to another station. +ghost-role-information-lost-cargo-technical-rules = You're a regular cargo technician from another station. Do what regular cargo do. + +ghost-role-information-clown-troupe-name = Space Clown +ghost-role-information-clown-troupe-description = You and your troupe have come to cheer up this station with your best jokes. Honk! +ghost-role-information-clown-troupe-rules = Normal station crew rules apply. + +ghost-role-information-traveling-chef-name = Traveling Chef +ghost-role-information-traveling-chef-description = You are a chef on a traveling shuttle of exotic cuisine. Delight the station with delicious food! +ghost-role-information-traveling-chef-rules = Normal station crew rules apply. + +ghost-role-information-disaster-victim-name = Disaster Victim +ghost-role-information-disaster-victim-description = You were rescued in an escape pod from another station that suffered a terrible fate. Perhaps you will be found and rescued. +ghost-role-information-disaster-victim-rules = Normal station crew rules apply. + +ghost-role-information-syndie-disaster-victim-name = Syndie Disaster Victim +ghost-role-information-syndie-disaster-victim-description = You're a regular passenger from a syndicate station. Unfortunately, an evacuation pod has thrown you into an enemy sector..... +ghost-role-information-syndie-disaster-victim-rules = Normal station crew rules apply. You are NOT an antagonist! + +ghost-role-information-syndicate-kobold-reinforcement-name = Syndicate Kobold Agent +ghost-role-information-syndicate-kobold-reinforcement-description = Someone needs reinforcements. You, a trained kobold, will help them. +ghost-role-information-syndicate-kobold-reinforcement-rules = Normal syndicate antagonist rules apply. Work with whoever called you in, and don't harm them. + ghost-role-information-artifact-name = Sentient Artifact ghost-role-information-artifact-description = Enact your eldritch whims. diff --git a/Resources/Locale/en-US/ghost/roles/ghostrole-spawner-verb-selectable.ftl b/Resources/Locale/en-US/ghost/roles/ghostrole-spawner-verb-selectable.ftl new file mode 100644 index 00000000000..9d649a5e070 --- /dev/null +++ b/Resources/Locale/en-US/ghost/roles/ghostrole-spawner-verb-selectable.ftl @@ -0,0 +1 @@ +ghostrole-spawner-select = Selected: {$mode} \ No newline at end of file diff --git a/Resources/Locale/en-US/guidebook/chemistry/conditions.ftl b/Resources/Locale/en-US/guidebook/chemistry/conditions.ftl index 807b5591a81..6cbfc13a797 100644 --- a/Resources/Locale/en-US/guidebook/chemistry/conditions.ftl +++ b/Resources/Locale/en-US/guidebook/chemistry/conditions.ftl @@ -1,4 +1,4 @@ -reagent-effect-condition-guidebook-total-damage = +reagent-effect-condition-guidebook-total-damage = { $max -> [2147483648] it has at least {NATURALFIXED($min, 2)} total damage *[other] { $min -> @@ -7,6 +7,15 @@ } } +reagent-effect-condition-guidebook-total-hunger = + { $max -> + [2147483648] the target has at least {NATURALFIXED($min, 2)} total hunger + *[other] { $min -> + [0] the target has at most {NATURALFIXED($max, 2)} total hunger + *[other] the target has between {NATURALFIXED($min, 2)} and {NATURALFIXED($max, 2)} total hunger + } + } + reagent-effect-condition-guidebook-reagent-threshold = { $max -> [2147483648] there's at least {NATURALFIXED($min, 2)}u of {$reagent} @@ -48,3 +57,5 @@ reagent-effect-condition-guidebook-has-tag = [true] does not have *[false] has } the tag {$tag} + +reagent-effect-condition-guidebook-this-reagent = this reagent diff --git a/Resources/Locale/en-US/guidebook/chemistry/effects.ftl b/Resources/Locale/en-US/guidebook/chemistry/effects.ftl index dbb24a3cafd..9da6c0c0aec 100644 --- a/Resources/Locale/en-US/guidebook/chemistry/effects.ftl +++ b/Resources/Locale/en-US/guidebook/chemistry/effects.ftl @@ -43,7 +43,7 @@ reagent-effect-guidebook-foam-area-reaction-effect = *[other] create } large quantities of foam -reagent-effect-guidebook-foam-area-reaction-effect = +reagent-effect-guidebook-smoke-area-reaction-effect = { $chance -> [1] Creates *[other] create @@ -339,6 +339,12 @@ reagent-effect-guidebook-innoculate-zombie-infection = *[other] cure } an ongoing zombie infection, and provides immunity to future infections +reagent-effect-guidebook-reduce-rotting = + { $chance -> + [1] Regenerates + *[other] regenerate + } {NATURALFIXED($time, 3)} {MANY("second", $time)} of rotting + reagent-effect-guidebook-missing = { $chance -> [1] Causes diff --git a/Resources/Locale/en-US/guidebook/guides.ftl b/Resources/Locale/en-US/guidebook/guides.ftl index 968d3b20038..84f3d9957f2 100644 --- a/Resources/Locale/en-US/guidebook/guides.ftl +++ b/Resources/Locale/en-US/guidebook/guides.ftl @@ -11,7 +11,7 @@ guide-entry-access-configurator = Access Configurator guide-entry-power = Power guide-entry-portable-generator = Portable Generators guide-entry-ame = Antimatter Engine (AME) -guide-entry-singularity = Singularity +guide-entry-singularity = Singularity / Tesla guide-entry-teg = Thermo-electric Generator (TEG) guide-entry-rtg = RTG guide-entry-controls = Controls @@ -72,5 +72,5 @@ guide-entry-writing = Writing guide-entry-glossary = Glossary guide-entry-altars-golemancy = Altars and Golemancy -guide-entry-psionics = Psionics +guide-entry-glimmer-creatures = Glimmer Creatures guide-entry-reverse-engineering = Reverse Engineering diff --git a/Resources/Locale/en-US/headset/headset-component.ftl b/Resources/Locale/en-US/headset/headset-component.ftl index 75c83643d6d..3f89dde13ab 100644 --- a/Resources/Locale/en-US/headset/headset-component.ftl +++ b/Resources/Locale/en-US/headset/headset-component.ftl @@ -1,6 +1,6 @@ # Chat window radio wrap (prefix and postfix) -chat-radio-message-wrap = [color={$color}]{$channel} {$name} {$verb}, [font="{$fontType}" size={$fontSize}]"[/color][color={$languageColor}]{$message}[/color][color={$color}]"[/font][/color] -chat-radio-message-wrap-bold = [color={$color}]{$channel} {$name} {$verb}, [font="{$fontType}" size={$fontSize}][bold]"[/color][color={$languageColor}]{$message}[/color][color={$color}]"[/bold][/font][/color] +chat-radio-message-wrap = [color={ $color }]{ $channel } [bold]{ $language }{ $name }[/bold] { $verb }, [font={ $fontType } size={ $fontSize }]"{ $message }"[/font][/color] +chat-radio-message-wrap-bold = [color={ $color }]{ $channel } [bold]{ $language }{ $name }[/bold] { $verb }, [font={ $fontType } size={ $fontSize }][bold]"{ $message }"[/bold][/font][/color] examine-headset-default-channel = Use {$prefix} for the default channel ([color={$color}]{$channel}[/color]). diff --git a/Resources/Locale/en-US/health-examinable/health-examinable-comp.ftl b/Resources/Locale/en-US/health-examinable/health-examinable-comp.ftl index af31837ab84..60204eb2bd3 100644 --- a/Resources/Locale/en-US/health-examinable/health-examinable-comp.ftl +++ b/Resources/Locale/en-US/health-examinable/health-examinable-comp.ftl @@ -1,2 +1,4 @@ health-examinable-verb-text = Health health-examinable-verb-disabled = Perform a basic health examination in close range. + +health-alert-start = [font size=12][color=green]Health:[/color][/font] diff --git a/Resources/Locale/en-US/health-examinable/health-examinable-silicon.ftl b/Resources/Locale/en-US/health-examinable/health-examinable-silicon.ftl index 03eaf07a3b7..1608d8511d1 100644 --- a/Resources/Locale/en-US/health-examinable/health-examinable-silicon.ftl +++ b/Resources/Locale/en-US/health-examinable/health-examinable-silicon.ftl @@ -1,4 +1,4 @@ -health-examinable-silicon-none = There is no obvious damage to be seen. +health-examinable-silicon-none = [color=green]There is no obvious damage to be seen.[/color] health-examinable-silicon-Blunt-25 = [color=red]{ CAPITALIZE(SUBJECT($target)) } { CONJUGATE-HAVE($target) } minor dents on { POSS-ADJ($target) } chassis.[/color] health-examinable-silicon-Blunt-50 = [color=crimson]{ CAPITALIZE(POSS-ADJ($target)) } chassis is severely dented![/color] diff --git a/Resources/Locale/en-US/implant/implant.ftl b/Resources/Locale/en-US/implant/implant.ftl index b93d43105a8..c3002a73ae3 100644 --- a/Resources/Locale/en-US/implant/implant.ftl +++ b/Resources/Locale/en-US/implant/implant.ftl @@ -10,9 +10,10 @@ implanter-component-implant-already = {$target} already has the {$implant}! implanter-draw-text = Draw implanter-inject-text = Inject -implanter-empty-text = None +implanter-empty-text = Empty -implanter-label = Implant: [color=green]{$implantName}[/color] | [color=white]{$modeString}[/color]{$lineBreak}{$implantDescription} +implanter-label = [color=green]{$implantName}[/color] + Mode: [color=white]{$modeString}[/color] implanter-contained-implant-text = [color=green]{$desc}[/color] diff --git a/Resources/Locale/en-US/info/rules.ftl b/Resources/Locale/en-US/info/rules.ftl index 73d697eef19..28791fd7ecb 100644 --- a/Resources/Locale/en-US/info/rules.ftl +++ b/Resources/Locale/en-US/info/rules.ftl @@ -1,6 +1,5 @@ # Rules -ui-rules-header = DeltaV Official Server Rules -ui-rules-header-rp = DeltaV Roleplay Official Server Rules +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. diff --git a/Resources/Locale/en-US/info/whitelists.ftl b/Resources/Locale/en-US/info/whitelists.ftl new file mode 100644 index 00000000000..b67fc3e0adc --- /dev/null +++ b/Resources/Locale/en-US/info/whitelists.ftl @@ -0,0 +1,3 @@ +cmd-jobwhitelists-desc = Opens the job whitelists window +cmd-jobwhitelists-help = Usage: jobwhitelists [name or user guid] +cmd-jobwhitelists-player-err = The specified player could not be found diff --git a/Resources/Locale/en-US/interaction/interaction-popup-component.ftl b/Resources/Locale/en-US/interaction/interaction-popup-component.ftl index fe30d042c36..7bce6616c5b 100644 --- a/Resources/Locale/en-US/interaction/interaction-popup-component.ftl +++ b/Resources/Locale/en-US/interaction/interaction-popup-component.ftl @@ -42,7 +42,6 @@ petting-failure-crab = You reach out to pet {THE($target)}, but {SUBJECT($target petting-failure-dehydrated-carp = You pet {THE($target)} on {POSS-ADJ($target)} dry little head. petting-failure-goat = You reach out to pet {THE($target)}, but {SUBJECT($target)} stubbornly refuses! petting-failure-goose = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BE($target)} too horrible! -petting-failure-goose = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BE($target)} too australian! petting-failure-possum = You reach out to pet {THE($target)}, but are met with hisses and snarls! petting-failure-pig = You reach out to pet {THE($target)}, but are met with irritated oinks and squeals! petting-failure-raccoon = You reach out to pet {THE($target)}, but {THE($target)} is busy raccooning around. @@ -69,11 +68,6 @@ petting-failure-cleanbot = You reach out to pet {THE($target)}, but {SUBJECT($ta petting-failure-mimebot = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BE($target)} busy miming! petting-failure-medibot = You reach out to pet {THE($target)}, but {POSS-ADJ($target)} syringe nearly stabs your hand! -## Knocking on windows - -# Shown when knocking on a window -comp-window-knock = *knock knock* - ## Rattling fences fence-rattle-success = *rattle* diff --git a/Resources/Locale/en-US/interaction/verbs/noop.ftl b/Resources/Locale/en-US/interaction/verbs/noop.ftl index 37e8508c8d2..953b2808ecb 100644 --- a/Resources/Locale/en-US/interaction/verbs/noop.ftl +++ b/Resources/Locale/en-US/interaction/verbs/noop.ftl @@ -13,7 +13,7 @@ interaction-Hug-success-others-popup = {THE($user)} hugs {THE($target)}. interaction-Pet-name = Pet interaction-Pet-description = Pet your co-worker to ease their stress. interaction-Pet-success-self-popup = You pet {THE($target)} on {POSS-ADJ($target)} head. -interaction-Pet-success-target-popup = {THE($user)} pets you on {POSS-ADJ($target)} head. +interaction-Pet-success-target-popup = {THE($user)} pets you on your head. interaction-Pet-success-others-popup = {THE($user)} pets {THE($target)}. interaction-PetAnimal-name = {interaction-Pet-name} diff --git a/Resources/Locale/en-US/inventory/item-status.ftl b/Resources/Locale/en-US/inventory/item-status.ftl new file mode 100644 index 00000000000..a53ba8be7dc --- /dev/null +++ b/Resources/Locale/en-US/inventory/item-status.ftl @@ -0,0 +1 @@ +item-status-not-held = No held item diff --git a/Resources/Locale/en-US/job/job-names.ftl b/Resources/Locale/en-US/job/job-names.ftl index 534620f0f20..60ab9b05433 100644 --- a/Resources/Locale/en-US/job/job-names.ftl +++ b/Resources/Locale/en-US/job/job-names.ftl @@ -5,10 +5,11 @@ job-name-hos = Head of Security job-name-detective = Detective job-name-brigmedic = Corpsman job-name-borg = Cyborg -job-name-scientist = Scientist -job-name-research-assistant = Research Assistant +job-name-senior-researcher = Mystic +job-name-scientist = Acolyte +job-name-research-assistant = Noviciate job-name-rd = Mystagogue -job-name-roboticist = Roboticist +job-name-roboticist = Golemancer job-name-psychologist = Psychologist job-name-intern = Medical Intern job-name-doctor = Medical Doctor @@ -86,17 +87,17 @@ JobPassenger = Passenger JobPsychologist = Psychologist JobQuartermaster = Logistics Officer JobReporter = Reporter -JobResearchAssistant = Research Assistant +JobResearchAssistant = Noviciate JobResearchDirector = Mystagogue -JobRoboticist = Roboticist +JobRoboticist = Golemancer JobSalvageSpecialist = Salvage Specialist -JobScientist = Scientist +JobScientist = Acolyte JobSecurityCadet = Security Cadet JobSecurityOfficer = Security Officer JobSeniorEngineer = Senior Engineer JobSeniorOfficer = Senior Officer JobSeniorPhysician = Senior Physician -JobSeniorResearcher = Senior Researcher +JobSeniorResearcher = Mystic JobServiceWorker = Service Worker JobStationEngineer = Station Engineer JobTechnicalAssistant = Technical Assistant diff --git a/Resources/Locale/en-US/job/job-supervisors.ftl b/Resources/Locale/en-US/job/job-supervisors.ftl index 25a49f643e6..46321f40dd0 100644 --- a/Resources/Locale/en-US/job/job-supervisors.ftl +++ b/Resources/Locale/en-US/job/job-supervisors.ftl @@ -1,4 +1,4 @@ -job-supervisors-centcom = CentCom official +job-supervisors-centcom = Central Command job-supervisors-captain = the captain job-supervisors-hop = the head of personnel job-supervisors-hos = the head of security diff --git a/Resources/Locale/en-US/job/role-whitelist.ftl b/Resources/Locale/en-US/job/role-whitelist.ftl new file mode 100644 index 00000000000..70031a650d6 --- /dev/null +++ b/Resources/Locale/en-US/job/role-whitelist.ftl @@ -0,0 +1 @@ +role-not-whitelisted = You are not whitelisted to play this role. diff --git a/Resources/Locale/en-US/kitchen/components/microwave-component.ftl b/Resources/Locale/en-US/kitchen/components/microwave-component.ftl index 0603b3c8463..12346ee75dc 100644 --- a/Resources/Locale/en-US/kitchen/components/microwave-component.ftl +++ b/Resources/Locale/en-US/kitchen/components/microwave-component.ftl @@ -9,6 +9,7 @@ microwave-component-suicide-multi-head-others-message = {$victim} is trying to c microwave-component-suicide-others-message = {$victim} is trying to cook their head! microwave-component-suicide-multi-head-message = You cook your heads! microwave-component-suicide-message = You cook your head! +microwave-component-upgrade-cook-time = cook time microwave-component-interact-full = It's full. microwave-component-interact-item-too-big = { CAPITALIZE(THE($item)) } is too big to fit in the microwave! diff --git a/Resources/Locale/en-US/kitchen/components/reagent-grinder-component.ftl b/Resources/Locale/en-US/kitchen/components/reagent-grinder-component.ftl index 8a3ca9eef85..34951282745 100644 --- a/Resources/Locale/en-US/kitchen/components/reagent-grinder-component.ftl +++ b/Resources/Locale/en-US/kitchen/components/reagent-grinder-component.ftl @@ -4,6 +4,9 @@ reagent-grinder-bound-user-interface-instant-button = INSTANT reagent-grinder-bound-user-interface-cook-time-label = COOK TIME reagent-grinder-component-cannot-put-entity-message = You can't put this in the reagent grinder! +reagent-grinder-component-upgrade-work-time = Work time +reagent-grinder-component-upgrade-storage = Storage + grinder-menu-title = All-In-One Grinder 3000 grinder-menu-grind-button = Grind grinder-menu-juice-button = Juice diff --git a/Resources/Locale/en-US/language/commands.ftl b/Resources/Locale/en-US/language/commands.ftl index 65959e3f28f..ccbe2570c96 100644 --- a/Resources/Locale/en-US/language/commands.ftl +++ b/Resources/Locale/en-US/language/commands.ftl @@ -2,10 +2,10 @@ command-list-langs-desc = List languages your current entity can speak at the cu command-list-langs-help = Usage: {$command} command-saylang-desc = Send a message in a specific language. To choose a language, you can use either the name of the language, or its position in the list of languages. -command-saylang-help = Usage: {$command} . Example: {$command} GalacticCommon "Hello World!". Example: {$command} 1 "Hello World!" +command-saylang-help = Usage: {$command} . Example: {$command} TauCetiBasic "Hello World!". Example: {$command} 1 "Hello World!" command-language-select-desc = Select the currently spoken language of your entity. You can use either the name of the language, or its position in the list of languages. -command-language-select-help = Usage: {$command} . Example: {$command} 1. Example: {$command} GalacticCommon +command-language-select-help = Usage: {$command} . Example: {$command} 1. Example: {$command} TauCetiBasic command-language-spoken = Spoken: command-language-understood = Understood: @@ -18,14 +18,14 @@ command-language-invalid-language = The language {$id} does not exist or you can # toolshed command-description-language-add = Adds a new language to the piped entity. The two last arguments indicate whether it should be spoken/understood. Example: 'self language:add "Canilunzt" true true' -command-description-language-rm = Removes a language from the piped entity. Works similarly to language:add. Example: 'self language:rm "GalacticCommon" true true'. +command-description-language-rm = Removes a language from the piped entity. Works similarly to language:add. Example: 'self language:rm "TauCetiBasic" true true'. command-description-language-lsspoken = Lists all languages the entity can speak. Example: 'self language:lsspoken' command-description-language-lsunderstood = Lists all languages the entity can understand. Example: 'self language:lssunderstood' command-description-translator-addlang = Adds a new target language to the piped translator entity. See language:add for details. command-description-translator-rmlang = Removes a target language from the piped translator entity. See language:rm for details. -command-description-translator-addrequired = Adds a new required language to the piped translator entity. Example: 'ent 1234 translator:addrequired "GalacticCommon"' -command-description-translator-rmrequired = Removes a required language from the piped translator entity. Example: 'ent 1234 translator:rmrequired "GalacticCommon"' +command-description-translator-addrequired = Adds a new required language to the piped translator entity. Example: 'ent 1234 translator:addrequired "TauCetiBasic"' +command-description-translator-rmrequired = Removes a required language from the piped translator entity. Example: 'ent 1234 translator:rmrequired "TauCetiBasic"' command-description-translator-lsspoken = Lists all spoken languages for the piped translator entity. Example: 'ent 1234 translator:lsspoken' command-description-translator-lsunderstood = Lists all understood languages for the piped translator entity. Example: 'ent 1234 translator:lssunderstood' command-description-translator-lsrequired = Lists all required languages for the piped translator entity. Example: 'ent 1234 translator:lsrequired' diff --git a/Resources/Locale/en-US/language/languages.ftl b/Resources/Locale/en-US/language/languages.ftl index 68dc80f51da..935eef896a0 100644 --- a/Resources/Locale/en-US/language/languages.ftl +++ b/Resources/Locale/en-US/language/languages.ftl @@ -1,9 +1,6 @@ language-Universal-name = Universal language-Universal-description = What are you? -language-GalacticCommon-name = Galactic common -language-GalacticCommon-description = The standard Galatic language, most commonly used for inter-species communications and legal work. - language-Bubblish-name = Bubblish language-Bubblish-description = The language of Slimes. Being a mixture of bubbling noises and pops it's very difficult to speak for humans without the use of mechanical aids. @@ -13,14 +10,47 @@ language-RootSpeak-description = The strange whistling-style language spoken by language-Nekomimetic-name = Nekomimetic language-Nekomimetic-description = To the casual observer, this language is an incomprehensible mess of broken Japanese. To the Felinids and Oni, it's somehow comprehensible. -language-Draconic-name = Draconic -language-Draconic-description = The common language of lizard-people, composed of sibilant hisses and rattles. +language-Draconic-name = Sinta'Unathi +language-Draconic-description = + The common language of Moghes - composed of sibilant hisses and rattles. Spoken natively by Unathi. + +language-Azaziba-name = Sinta'Azaziba +language-Azaziba-description = + A language of Moghes consisting of a combination of spoken word and gesticulation. + While waning since Moghes entered the galactic stage - it enjoys popular use by Unathi that never fell to the Hegemony's cultural dominance. language-SolCommon-name = Sol common -language-SolCommon-description = The language common to species from the Sol System. +language-SolCommon-description = + With its roots in Mandarin Chinese - Common evolved as the official language of the Sol Alliance - with officials working to tie it together with a common tongue. + It's spoken by state officials - taught in schools - and spoken by those who either feel a sense of national pride in the Alliance or otherwise fell sway to the culture. + +language-TauCetiBasic-name = Tau-Ceti Basic +language-TauCetiBasic-description = + A spiritual successor of Esperanto, established in 2404 in Tau Ceti by Ceti intellectuals. + Its unique, fully customized alphabet and structure allow it to be spoken even by most alien species. + It's the official language of Tau Ceti and has growing traction in diplomatic circles and Universalists across human space. + +language-Tradeband-name = Tradeband +language-Tradeband-description = + Descended from latin and romance languages of old Earth - Tradeband remains the main tongue of the upper class of humanity. + The language sounds elegant and well structured to most ears. It remains in popular use with traders - diplomats - and those seeking to hold onto a piece of a romantic past. + +language-Freespeak-name = Freespeak +language-Freespeak-description = + A language of renegades and frontiersmen descending from various languages from Earth-- like Hindi, + combined into a multi-rooted jumble that sounds incoherent or even barbarian to non-native speakers. + This language is the only common cultural identity for humans in the frontier. Speaking this language in itself boldly declares the speaker a free spirit. + It is often called 'Gutter' by Alliance citizens. + +language-Elyran-name = Elyran Standard +language-Elyran-description = + Elyran Standard is the official tongue of the Republic of Elyra. Constructed using elements of Farsi - Arabic - and Turkish. + Influence from all three of these languages can be seen throughout its grammar and vocabulary. language-Canilunzt-name = Canilunzt -language-Canilunzt-description = The guttural language spoken and utilized by the inhabitants of the Vazzend system, composed of growls, barks, yaps, and heavy utilization of ears and tail movements. Vulpkanin speak this language with ease. +language-Canilunzt-description = + The guttural language spoken and utilized by the inhabitants of the Vazzend system, + composed of growls, barks, yaps, and heavy utilization of ears and tail movements. Vulpkanin speak this language with ease. language-Moffic-name = Moffic language-Moffic-description = The language of the mothpeople borders on complete unintelligibility. @@ -28,8 +58,17 @@ language-Moffic-description = The language of the mothpeople borders on complete language-RobotTalk-name = RobotTalk language-RobotTalk-description = A language consisting of harsh binary chirps, whistles, hisses, and whines. Organic tongues cannot speak it without aid from special translators. -language-Sign-name = Galactic Sign Language -language-Sign-description = GSL for short, this sign language is prevalent among mute and deaf people. +language-Sign-name = Tau-Ceti Basic Sign Language +language-Sign-description = TCB-SL for short, this sign language is prevalent among mute and deaf people. + +language-Marish-name = Marish +language-Marish-description = An inherently empathetic language, conveying emotions with a single word; spoken effortlessly by Shadowkins, though nearly impossible to learn or replicate. + +language-ValyrianStandard-name = Valyrian Standard +language-ValyrianStandard-description = + A language descended from eastern european languages of old earth - Valyrian Standard is the commonly spoken tongue of Harpies brought up on their homeworld of Valyrian 4b + It is rarely spoken outside of the worlds of its native speakers, and has in modern times been supplanted by the 'Conlangs of the Sol Alliance. + Its speakers are those who wish to uphold the traditions and beliefs of ancient peoples from before the colonial era. language-Cat-name = Cat language-Cat-description = Meow diff --git a/Resources/Locale/en-US/loadouts/categories.ftl b/Resources/Locale/en-US/loadouts/categories.ftl index 921c06efdb0..b1529fe9866 100644 --- a/Resources/Locale/en-US/loadouts/categories.ftl +++ b/Resources/Locale/en-US/loadouts/categories.ftl @@ -2,6 +2,7 @@ loadout-category-Uncategorized = Uncategorized loadout-category-Accessories = Accessories +loadout-category-Backpacks = Backpacks loadout-category-Eyes = Eyes loadout-category-Hands = Hands loadout-category-Head = Head @@ -25,6 +26,10 @@ loadout-category-JobsSecurity = Security loadout-category-JobsService = Service loadout-category-JobsServiceUncategorized = Uncategorized loadout-category-JobsServiceBartender = Bartender +loadout-category-JobsServiceBotanist = Botanist +loadout-category-JobsServiceChef = Chef +loadout-category-JobsServiceJanitor = Janitor +loadout-category-JobsServiceMusician = Musician 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 29aca3ddb9b..dba4cf72a92 100644 --- a/Resources/Locale/en-US/loadouts/itemgroups.ftl +++ b/Resources/Locale/en-US/loadouts/itemgroups.ftl @@ -1,5 +1,6 @@ # This list is sorted Mixed Alphabetically with Generic always being placed first, Departments alphabetically, Items Groups Alphabetically, and Jobs Alphabetically after all Department items # Generic - Clothing +character-item-group-LoadoutBackpacks = Civilian Backpacks character-item-group-LoadoutEyes = Civilian Eyewear character-item-group-LoadoutGloves = Civilian Gloves character-item-group-LoadoutHead = Civilian Headgear @@ -28,6 +29,23 @@ character-item-group-LoadoutHeadEngineering = Engineering Headgear character-item-group-LoadoutOuterEngineering = Engineering Outerwear character-item-group-LoadoutUniformsEngineering = Engineering 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 + +# Epistemics - Chaplain +character-item-group-LoadoutChaplainUniforms = Chaplain Uniforms +character-item-group-LoadoutChaplainEquipment = Chaplain Equipment + # Medical character-item-group-LoadoutEyesMedical = Medical Eyewear character-item-group-LoadoutGlovesMedical = Medical Gloves @@ -38,6 +56,7 @@ character-item-group-LoadoutShoesMedical = Medical Shoes character-item-group-LoadoutUniformsMedical = Medical 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 @@ -48,9 +67,12 @@ 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 # 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 @@ -59,8 +81,25 @@ character-item-group-LoadoutUniformsService = Service Uniforms # Service - Bartender character-item-group-LoadoutBartenderAmmo = Bartender Ammo +character-item-group-LoadoutBartenderHead = Bartender Headgear character-item-group-LoadoutBartenderOuterwear = Bartender Outerwear +character-item-group-LoadoutBartenderUniforms = Bartender Uniforms character-item-group-LoadoutBartenderWeapon = Bartender Weapon +# Service - Botanist +character-item-group-LoadoutBotanistUniforms = Botanist Uniforms + +# Service - Chef +character-item-group-LoadoutChefHead = Chef Headgear +character-item-group-LoadoutChefOuter = Chef Outerwear +character-item-group-LoadoutChefUniforms = Chef Uniforms + +# Service - Janitor +character-item-group-LoadoutJanitorUniforms = Janitor Uniforms + # Service - Musician character-item-group-LoadoutMusicianInstruments = Musician Instruments + +# Traits - Languages +character-item-group-TraitsLanguagesBasic = Basic Languages +character-item-group-TraitsAccents = Accents diff --git a/Resources/Locale/en-US/loadouts/jobs/heads/captain.ftl b/Resources/Locale/en-US/loadouts/jobs/heads/captain.ftl index af5b90dd8d4..27069b6ff88 100644 --- a/Resources/Locale/en-US/loadouts/jobs/heads/captain.ftl +++ b/Resources/Locale/en-US/loadouts/jobs/heads/captain.ftl @@ -7,6 +7,6 @@ loadout-description-LoadoutCommandCapOuterWinter = A warm coat for the cold of s loadout-description-LoadoutCommandCapGloves = The gloves of the captain. They are very nice gloves. loadout-description-LoadoutCommandCapHat = The hat of the captain. It is a very nice hat. loadout-description-LoadoutCommandCapHatCapcap = The Captain's cap, pretty nice. -loadout-description-LoadoutCommandCapHat = The Captain's beret, very 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. diff --git a/Resources/Locale/en-US/loadouts/jobs/security.ftl b/Resources/Locale/en-US/loadouts/jobs/security.ftl index c3d78d7813a..442dc653269 100644 --- a/Resources/Locale/en-US/loadouts/jobs/security.ftl +++ b/Resources/Locale/en-US/loadouts/jobs/security.ftl @@ -1,3 +1,35 @@ loadout-description-LoadoutSecurityUniformJumpskirtSenior = A skirt fit for the best of the best. loadout-description-LoadoutSecurityUniformJumpsuitSenior = A suit fit for the best of the best. loadout-description-LoadoutSecurityShoesJackboots = A really nice, heavy, pair of black boots. +# Equipment +loadout-name-LoadoutMagazinePistolSpare = pistol magazine (.35 auto, spare) +loadout-name-LoadoutMagazinePistolNonLethalSpare = pistol magazine (.35 auto rubber, spare) +loadout-name-LoadoutSpeedLoaderMagnumSpare = speed loader (.45 magnum, spare) +loadout-name-LoadoutSpeedLoaderMagnumRubberSpare = speed loader (.45 magnum rubber, spare) +loadout-name-LoadoutMagazineMagnumSpare = pistol magazine (.45 magnum, spare) +loadout-name-LoadoutMagazineMagnumRubberSpare = pistol magazine (.45 magnum rubber, spare) + +# Duty Weapons +loadout-name-LoadoutSecurityMk58 = Mk58 (lethal) +loadout-name-LoadoutSecurityMk58NonLethal = Mk58 (non-lethal) +loadout-name-LoadoutSecurityRevolver = Inspector (lethal) +loadout-name-LoadoutSecurityRevolverNonLethal = Inspector (non-lethal) +loadout-name-LoadoutSecurityRevolverDeckard = Deckard (lethal) +loadout-name-LoadoutSecurityRevolverDeckardNonLethal = Deckard (non-lethal) +loadout-name-LoadoutSecurityPistolN1984 = N1984 (lethal) +loadout-name-LoadoutSecurityPistolN1984NonLethal = N1984 (non-lethal) +loadout-name-LoadoutSecurityPistolViper = Viper (lethal) +loadout-name-LoadoutSecurityPistolViperNonLethal = Viper (non-lethal) +loadout-name-LoadoutSecurityPistolViperWood = Viper (wood furniture, lethal) +loadout-name-LoadoutSecurityEnergyGun = Mini Energy Gun +loadout-name-LoadoutSecurityEnergyGunPistol = Energy Pistol +loadout-name-LoadoutSecurityPistolPollock = Pollock (lethal) +loadout-name-LoadoutSecurityPistolPollockNonlethal = Pollock (non-lethal) +loadout-name-LoadoutSecurityRevolverSnub = Snub-nose .45 (lethal) +loadout-name-LoadoutSecurityRevolverSnubNonlethal = Snub-nose .45 (non-lethal) +loadout-name-LoadoutSecurityRevolverK38Master = K-38 Master (lethal) +loadout-name-LoadoutSecurityRevolverK38MasterNonlethal = K-38 Master (non-lethal) +loadout-name-LoadoutSecurityRevolverFitz = Fitz (lethal) +loadout-name-LoadoutSecurityRevolverFitzNonlethal = Fitz (non-lethal) +loadout-name-LoadoutSecurityRevolverPython = Python (lethal) +loadout-name-LoadoutSecurityRevolverPythonNonlethal = Python (non-lethal) diff --git a/Resources/Locale/en-US/machine-linking/transmitter_ports.ftl b/Resources/Locale/en-US/machine-linking/transmitter_ports.ftl index c685cc8fb78..1d879fcee9d 100644 --- a/Resources/Locale/en-US/machine-linking/transmitter_ports.ftl +++ b/Resources/Locale/en-US/machine-linking/transmitter_ports.ftl @@ -19,6 +19,9 @@ signal-port-description-right = This port is invoked whenever the lever is moved signal-port-name-doorstatus = Door status signal-port-description-doorstatus = This port is invoked with HIGH when the door opens and LOW when the door finishes closing. +signal-port-name-dockstatus = Dock status +signal-port-description-dockstatus = This port is invoked with HIGH when docked and LOW when undocked. + signal-port-name-middle = Middle signal-port-description-middle = This port is invoked whenever the lever is moved to the neutral position. diff --git a/Resources/Locale/en-US/machine/machine.ftl b/Resources/Locale/en-US/machine/machine.ftl index ce8873df6f8..26059505160 100644 --- a/Resources/Locale/en-US/machine/machine.ftl +++ b/Resources/Locale/en-US/machine/machine.ftl @@ -13,6 +13,11 @@ machine-part-name-manipulator = Manipulator machine-part-name-matter-bin = Matter Bin machine-part-name-power-cell = Power Cell +upgrade-power-draw = power draw +upgrade-max-charge = max charge +upgrade-power-supply = power supply +upgrade-power-supply-ramping = power ramp rate + two-way-lever-left = push left two-way-lever-right = push right two-way-lever-cant = can't push the lever that way! diff --git a/Resources/Locale/en-US/magic/magic.ftl b/Resources/Locale/en-US/magic/magic.ftl new file mode 100644 index 00000000000..4c8a5fc51d3 --- /dev/null +++ b/Resources/Locale/en-US/magic/magic.ftl @@ -0,0 +1 @@ +spell-requirements-failed = Missing requirements to cast this spell! diff --git a/Resources/Locale/en-US/mail/commands.ftl b/Resources/Locale/en-US/mail/commands.ftl new file mode 100644 index 00000000000..1f471bb7a59 --- /dev/null +++ b/Resources/Locale/en-US/mail/commands.ftl @@ -0,0 +1,20 @@ +# Mailto +command-mailto-description = Queue a parcel to be delivered to an entity. Example usage: `mailto 1234 5678 false false`. The target container's contents will be transferred to an actual mail parcel. +command-mailto-help = Usage: {$command} [is-fragile: true or false] [is-priority: true or false] [is-large: true or false, optional] +command-mailto-no-mailreceiver = Target recipient entity does not have a {$requiredComponent}. +command-mailto-no-blankmail = The {$blankMail} prototype doesn't exist. Something is very wrong. Contact a programmer. +command-mailto-bogus-mail = {$blankMail} did not have {$requiredMailComponent}. Something is very wrong. Contact a programmer. +command-mailto-invalid-container = Target container entity does not have a {$requiredContainer} container. +command-mailto-unable-to-receive = Target recipient entity was unable to be setup for receiving mail. ID may be missing. +command-mailto-no-teleporter-found = Target recipient entity was unable to be matched to any station's mail teleporter. Recipient may be off-station. +command-mailto-success = Success! Mail parcel has been queued for next teleport in {$timeToTeleport} seconds. + +# Mailnow +command-mailnow = Force all mail teleporters to deliver another round of mail as soon as possible. This will not bypass the undelivered mail limit. +command-mailnow-help = Usage: {$command} +command-mailnow-success = Success! All mail teleporters will be delivering another round of mail soon. + +# Mailtestbulk +command-mailtestbulk = Sends one of each type of parcel to a given mail teleporter. Implicitly calls mailnow. +command-mailtestbulk-help = Usage: {$command} +command-mailtestbulk-success = Success! All mail teleporters will be delivering another round of mail soon. diff --git a/Resources/Locale/en-US/mail/mail.ftl b/Resources/Locale/en-US/mail/mail.ftl new file mode 100644 index 00000000000..5a277377324 --- /dev/null +++ b/Resources/Locale/en-US/mail/mail.ftl @@ -0,0 +1,23 @@ +mail-recipient-mismatch = Recipient name or job does not match. +mail-invalid-access = Recipient name and job match, but access isn't as expected. +mail-locked = The anti-tamper lock hasn't been removed. Tap the recipient's ID. +mail-desc-far = A parcel of mail. You can't make out who it's addressed to from this distance. +mail-desc-close = A parcel of mail addressed to {CAPITALIZE($name)}, {$job}. +mail-desc-fragile = It has a [color=red]red fragile label[/color]. +mail-desc-priority = The anti-tamper lock's [color=yellow]yellow priority tape[/color] is active. Better deliver it on time! +mail-desc-priority-inactive = The anti-tamper lock's [color=#886600]yellow priority tape[/color] is inactive. +mail-unlocked = Anti-tamper system unlocked. +mail-unlocked-by-emag = Anti-tamper system *BZZT*. +mail-unlocked-reward = Anti-tamper system unlocked. {$bounty} spesos have been added to logistics' account. +mail-penalty-lock = ANTI-TAMPER LOCK BROKEN. LOGISTICS BANK ACCOUNT PENALIZED BY {$credits} SPESOS. +mail-penalty-fragile = INTEGRITY COMPROMISED. LOGISTICS BANK ACCOUNT PENALIZED BY {$credits} SPESOS. +mail-penalty-expired = DELIVERY PAST DUE. LOGISTICS BANK ACCOUNT PENALIZED BY {$credits} SPESOS. +mail-item-name-unaddressed = mail +mail-item-name-addressed = mail ({$recipient}) + +mail-large-item-name-unaddressed = package +mail-large-item-name-addressed = package ({$recipient}) +mail-large-desc-far = A large package. +mail-large-desc-close = A large package addressed to {CAPITALIZE($name)}, {$job}. + + diff --git a/Resources/Locale/en-US/markings/Kemonomimi_tails.ftl b/Resources/Locale/en-US/markings/Kemonomimi_tails.ftl new file mode 100644 index 00000000000..039aa699e01 --- /dev/null +++ b/Resources/Locale/en-US/markings/Kemonomimi_tails.ftl @@ -0,0 +1,30 @@ +marking-BunnyTail = Bunny Tail +marking-BunnyTail-bunnytail = Tail + +marking-DobleFur = Doble Tail +marking-DobleFur-doblefurtailtone1 = Outer +marking-DobleFur-doblefurtailtone2 = Inner + +marking-FluffyTail = Fluffy Tail +marking-FluffyTail-fluffytail = Tail + +marking-FoxNineTails = Nine Tails +marking-FoxNineTails-foxninetailstone1 = Inner +marking-FoxNineTails-foxninetailstone2 = Outer + +marking-FoxThreeTails = Three Tails +marking-FoxThreeTails-foxthreetailstone1 = Inner +marking-FoxThreeTails-foxthreetailstone2 = Outer + +marking-HorseTailCulty = Culty Horse Tail +marking-HorseTailCulty-horsetailculty = Tail + +marking-HorseTailLong = Long Horse Tail +marking-HorseTailLong-horsetaillong = Tail + +marking-SharkTail = Shark Tail +marking-SharkTail-sharktail = Tail + +marking-TasselTail = Tassel Tail +marking-TasselTail-tasseltailtone1 = Inner +marking-TasselTail-tasseltailtone2 = Outer diff --git a/Resources/Locale/en-US/markings/harpy.ftl b/Resources/Locale/en-US/markings/harpy.ftl index 724207c3ef8..36ae7dd308c 100644 --- a/Resources/Locale/en-US/markings/harpy.ftl +++ b/Resources/Locale/en-US/markings/harpy.ftl @@ -81,7 +81,7 @@ marking-HarpyTailForkedLong = Long Forked Tail (Whitescale) marking-HarpyTailForkedLong-forked_long = Tail marking-HarpyTailSwallow = Swallow Tail (Whitescale) -marking-HarpyTailForkedLong-forked_long = Tail +marking-HarpyTailSwallow-swallow_tail = Tail marking-HarpyChestDefault = Wing & Groin Under-Clothes marking-HarpyChestDefault-upper = Wing Under-Clothes diff --git a/Resources/Locale/en-US/markings/kemonomimi_ears.ftl b/Resources/Locale/en-US/markings/kemonomimi_ears.ftl new file mode 100644 index 00000000000..e4b0d631e7e --- /dev/null +++ b/Resources/Locale/en-US/markings/kemonomimi_ears.ftl @@ -0,0 +1,13 @@ +marking-BunnyEars = Bunny Ears +marking-BunnyEars-bunnyearstone1 = Outer ear +marking-BunnyEars-bunnyearstone2 = Inner ear + +marking-BullishHorns = Bull Horns +marking-BullishHorns-bullishhorns = Horns + +marking-FoxEars = Fox Ears +marking-FoxEars-foxears = Ears + +marking-GoatHorns = Goat Ears & Horns +marking-GoatHorns-goathornstone1 = Ears +marking-GoatHorns-goathornstone2 = Horns diff --git a/Resources/Locale/en-US/markings/reptilian.ftl b/Resources/Locale/en-US/markings/reptilian.ftl index cfc44a4ba21..470af07361d 100644 --- a/Resources/Locale/en-US/markings/reptilian.ftl +++ b/Resources/Locale/en-US/markings/reptilian.ftl @@ -68,6 +68,9 @@ marking-LizardFrillsDivinity = Lizard Frills (Divinity) marking-LizardFrillsBig-frills_big = Lizard Frills (Big) marking-LizardFrillsBig = Lizard Frills (Big) +marking-LizardFrillsNeckfull-frills_neckfull = Lizard Frills (Neckfull) +marking-LizardFrillsNeckfull = Lizard Frills (Neckfull) + marking-LizardHornsDouble-horns_double = Lizard Horns (Double) marking-LizardHornsDouble = Lizard Horns (Double) @@ -100,4 +103,8 @@ marking-LizardChestUnderbelly-body_underbelly = Lizard Chest (Underbelly) marking-LizardChestUnderbelly = Lizard Chest (Underbelly) marking-LizardChestBackspikes-body_backspikes = Lizard Back spikes (Four) -marking-LizardChestBackspikes = Lizard Back spikes (Four) \ No newline at end of file +marking-LizardChestBackspikes = Lizard Back spikes (Four) + +marking-LizardSnoutSplotch = Lizard Snout (Splotch) +marking-LizardSnoutSplotch-snout_splotch_primary = Muzzle +marking-LizardSnoutSplotch-snout_splotch_secondary = Snoot diff --git a/Resources/Locale/en-US/markings/shadowkin.ftl b/Resources/Locale/en-US/markings/shadowkin.ftl new file mode 100644 index 00000000000..5ad1f09963c --- /dev/null +++ b/Resources/Locale/en-US/markings/shadowkin.ftl @@ -0,0 +1,7 @@ +marking-EyesShadowkin = Shadowkin + +marking-TailShadowkin = Shadowkin +marking-TailShadowkinBig = Shadowkin (Big) +marking-TailShadowkinShorter = Shadowkin (Short) +marking-TailShadowkinMedium = Shadowkin (Medium) +marking-TailShadowkinBigFluff = Shadowkin (Big and Fluffy) \ No newline at end of file diff --git a/Resources/Locale/en-US/markings/vox_tattoos.ftl b/Resources/Locale/en-US/markings/vox_tattoos.ftl new file mode 100644 index 00000000000..f7f3c7292c7 --- /dev/null +++ b/Resources/Locale/en-US/markings/vox_tattoos.ftl @@ -0,0 +1,11 @@ +marking-TattooVoxHeartLeftArm-heart_l_arm = Vox Left Arm Tattoo (Heart) +marking-TattooVoxHeartLeftArm = Vox Left Arm Tattoo (Heart) + +marking-TattooVoxHeartRightArm-heart_r_arm = Vox Right Arm Tattoo (Heart) +marking-TattooVoxHeartRightArm = Vox Right Arm Tattoo (Heart) + +marking-TattooVoxHiveChest-hive_s = Vox Chest Tattoo (hive) +marking-TattooVoxHiveChest = Vox Chest Tattoo (hive) + +marking-TattooVoxNightlingChest-nightling_s = Vox Chest Tattoo (nightling) +marking-TattooVoxNightlingChest = Vox Chest Tattoo (nightling) diff --git a/Resources/Locale/en-US/materials/materials.ftl b/Resources/Locale/en-US/materials/materials.ftl index dca520b5b49..b213e7d1e9a 100644 --- a/Resources/Locale/en-US/materials/materials.ftl +++ b/Resources/Locale/en-US/materials/materials.ftl @@ -25,6 +25,8 @@ materials-meat = meat materials-web = silk materials-bones = bone materials-coal = coal +materials-bluespace = bluespace +materials-normality = normality # Ores materials-raw-iron = raw iron @@ -35,3 +37,8 @@ materials-raw-plasma = raw plasma materials-raw-uranium = raw uranium materials-raw-bananium = raw bananium materials-raw-salt = raw salt +materials-raw-bluespace = raw bluespace +materials-raw-normality = raw normality + +# Material Reclaimer +material-reclaimer-upgrade-process-rate = process rate diff --git a/Resources/Locale/en-US/mech/mech.ftl b/Resources/Locale/en-US/mech/mech.ftl index 19f570a2a10..9d4f7ef0e07 100644 --- a/Resources/Locale/en-US/mech/mech.ftl +++ b/Resources/Locale/en-US/mech/mech.ftl @@ -13,6 +13,7 @@ mech-menu-title = mech control panel mech-integrity-display = Integrity: {$amount}% mech-energy-display = Energy: {$amount}% +mech-energy-missing = Energy: MISSING mech-slot-display = Open Slots: {$amount} mech-no-enter = You cannot pilot this. diff --git a/Resources/Locale/en-US/medical/components/biomass-reclaimer-component.ftl b/Resources/Locale/en-US/medical/components/biomass-reclaimer-component.ftl index 443429c1ef3..0c0b8faf59e 100644 --- a/Resources/Locale/en-US/medical/components/biomass-reclaimer-component.ftl +++ b/Resources/Locale/en-US/medical/components/biomass-reclaimer-component.ftl @@ -1 +1,4 @@ biomass-reclaimer-suicide-others = {CAPITALIZE(THE($victim))} threw themselves into the biomass reclaimer! + +biomass-reclaimer-component-upgrade-speed = speed +biomass-reclaimer-component-upgrade-biomass-yield = biomass yield diff --git a/Resources/Locale/en-US/medical/components/cloning-pod-component.ftl b/Resources/Locale/en-US/medical/components/cloning-pod-component.ftl index b222d707a0a..e92ac86a1e4 100644 --- a/Resources/Locale/en-US/medical/components/cloning-pod-component.ftl +++ b/Resources/Locale/en-US/medical/components/cloning-pod-component.ftl @@ -1,3 +1,5 @@ cloning-pod-biomass = It currently has [color=red]{$number}[/color] units of biomass. +cloning-pod-component-upgrade-speed = cloning speed +cloning-pod-component-upgrade-biomass-requirement = biomass requirement cloning-pod-component-upgrade-emag-requirement = The card zaps something inside the cloning pod. diff --git a/Resources/Locale/en-US/medical/components/health-analyzer-component.ftl b/Resources/Locale/en-US/medical/components/health-analyzer-component.ftl index 648db3f4ebd..97af7590395 100644 --- a/Resources/Locale/en-US/medical/components/health-analyzer-component.ftl +++ b/Resources/Locale/en-US/medical/components/health-analyzer-component.ftl @@ -1,18 +1,21 @@ health-analyzer-window-no-patient-data-text = No patient data. -health-analyzer-window-entity-unknown-text = unknown -health-analyzer-window-entity-health-text = {$entityName}'s health: -health-analyzer-window-entity-temperature-text = Temperature: {$temperature} -health-analyzer-window-entity-blood-level-text = Blood Level: {$bloodLevel} -health-analyzer-window-entity-bleeding-text = Patient is bleeding! -health-analyzer-window-entity-damage-total-text = Total Damage: {$amount} +health-analyzer-window-entity-unknown-text = Unknown +health-analyzer-window-entity-unknown-species-text = Non-Humanoid +health-analyzer-window-entity-unknown-value-text = N/A + +health-analyzer-window-entity-alive-text = Alive +health-analyzer-window-entity-dead-text = Dead +health-analyzer-window-entity-critical-text = Critical + +health-analyzer-window-entity-temperature-text = Temperature: +health-analyzer-window-entity-blood-level-text = Blood Level: +health-analyzer-window-entity-status-text = Status: +health-analyzer-window-entity-damage-total-text = Total Damage: + health-analyzer-window-damage-group-text = {$damageGroup}: {$amount} health-analyzer-window-damage-type-text = {$damageType}: {$amount} health-analyzer-window-damage-type-duplicate-text = {$damageType}: {$amount} (duplicate) -health-analyzer-window-scan-mode-text = Scan Mode: -health-analyzer-window-scan-mode-active = ACTIVE -health-analyzer-window-scan-mode-inactive = INACTIVE - health-analyzer-window-damage-group-Brute = Brute health-analyzer-window-damage-type-Blunt = Blunt health-analyzer-window-damage-type-Slash = Slash @@ -36,3 +39,12 @@ health-analyzer-window-damage-group-Genetic = Genetic health-analyzer-window-damage-type-Cellular = Cellular health-analyzer-window-malnutrition = Severely malnourished + +health-analyzer-window-entity-unrevivable-text = Unique body composition detected! Patient can not be resuscitated by normal means! +health-analyzer-window-entity-bleeding-text = Patient is bleeding! + +health-analyzer-window-scan-mode-text = Scan Mode: +health-analyzer-window-scan-mode-active = Active +health-analyzer-window-scan-mode-inactive = Inactive + +health-analyzer-popup-scan-target = {CAPITALIZE(THE($user))} is trying to scan you! diff --git a/Resources/Locale/en-US/medical/components/medical-scanner-component.ftl b/Resources/Locale/en-US/medical/components/medical-scanner-component.ftl index c4b19426545..da4dc7a3847 100644 --- a/Resources/Locale/en-US/medical/components/medical-scanner-component.ftl +++ b/Resources/Locale/en-US/medical/components/medical-scanner-component.ftl @@ -2,3 +2,5 @@ medical-scanner-verb-enter = Enter medical-scanner-verb-noun-occupant = occupant + +medical-scanner-upgrade-cloning = Cloning fail chance diff --git a/Resources/Locale/en-US/medical/components/stasis-bed-component.ftl b/Resources/Locale/en-US/medical/components/stasis-bed-component.ftl new file mode 100644 index 00000000000..2d8a18c263e --- /dev/null +++ b/Resources/Locale/en-US/medical/components/stasis-bed-component.ftl @@ -0,0 +1 @@ +stasis-bed-component-upgrade-stasis = stasis effect diff --git a/Resources/Locale/en-US/metabolism/metabolism-groups.ftl b/Resources/Locale/en-US/metabolism/metabolism-groups.ftl new file mode 100644 index 00000000000..404d0fc7868 --- /dev/null +++ b/Resources/Locale/en-US/metabolism/metabolism-groups.ftl @@ -0,0 +1,7 @@ +metabolism-group-poison = Poison +metabolism-group-medicine = Medicine +metabolism-group-narcotic = Narcotic +metabolism-group-alcohol = Alcohol +metabolism-group-food = Food +metabolism-group-drink = Drink +metabolism-group-gas = Gas diff --git a/Resources/Locale/en-US/metabolism/metabolizer-types.ftl b/Resources/Locale/en-US/metabolism/metabolizer-types.ftl new file mode 100644 index 00000000000..d0f57e2bc0b --- /dev/null +++ b/Resources/Locale/en-US/metabolism/metabolizer-types.ftl @@ -0,0 +1,14 @@ +metabolizer-type-animal = Animal +metabolizer-type-bloodsucker = Bloodsucker +metabolizer-type-dragon = Dragon +metabolizer-type-human = Human +metabolizer-type-slime = Slime +metabolizer-type-vox = Vox +metabolizer-type-rat = Rat +metabolizer-type-plant = Plant +metabolizer-type-dwarf = Dwarf +metabolizer-type-moth = Moth +metabolizer-type-arachnid = Arachnid +metabolizer-type-vampiric = Vampiric +metabolizer-type-liquorlifeline = Liquor Lifeline +metabolizer-type-shadowkin = Shadowkin diff --git a/Resources/Locale/en-US/mood/mood.ftl b/Resources/Locale/en-US/mood/mood.ftl index a931a30fb36..fbd41fed123 100644 --- a/Resources/Locale/en-US/mood/mood.ftl +++ b/Resources/Locale/en-US/mood/mood.ftl @@ -5,7 +5,7 @@ mood-effect-HungerOkay = I am feeling full. mood-effect-HungerPeckish = I could go for a snack right about now. mood-effect-HungerStarving = I NEED FOOD! -mood-effect-ThirstOverHydrated = I feel dizzy after drinking too much. +mood-effect-ThirstOverHydrated = I've had my fill of water. mood-effect-ThirstOkay = I'm feeling refreshed. mood-effect-ThirstThirsty = My lips are a little dry. mood-effect-ThirstParched = I NEED WATER! @@ -66,4 +66,10 @@ mood-effect-LotoEnthrallment = mood-effect-NicotineBenefit = I feel as if I have been standing my entire life and I just sat down. mood-effect-NicotineWithdrawal = - I could really go for a smoke right now. \ No newline at end of file + I could really go for a smoke right now. + +# Drugs +mood-effect-EthanolBenefit = + I feel so relaxed from drinking. +mood-effect-SpaceDrugsBenefit = + Woaaaah, such pretty colors maaaaan. It's like I can hear color and taste sound maaan. diff --git a/Resources/Locale/en-US/movement/laying.ftl b/Resources/Locale/en-US/movement/laying.ftl index f75061d6a75..de84ca629ea 100644 --- a/Resources/Locale/en-US/movement/laying.ftl +++ b/Resources/Locale/en-US/movement/laying.ftl @@ -1,3 +1,6 @@ +crawling-under-tables-disabled-popup = Crawling under tables is disabled on this server. + +# TODO either remove those, or make use of them laying-comp-lay-success-self = You lay down. laying-comp-lay-success-other = {THE($entity)} lays down. laying-comp-lay-fail-self = You can't lay down right now. diff --git a/Resources/Locale/en-US/ninja/ninja-actions.ftl b/Resources/Locale/en-US/ninja/ninja-actions.ftl index b42da33a297..f01f02a60e5 100644 --- a/Resources/Locale/en-US/ninja/ninja-actions.ftl +++ b/Resources/Locale/en-US/ninja/ninja-actions.ftl @@ -4,3 +4,5 @@ ninja-suit-cooldown = The suit needs time to recuperate from the last attack. ninja-research-steal-fail = No new research nodes were stolen... ninja-research-steal-success = Stole {$count} new nodes from {THE($server)}. + +ninja-criminal-records-hack-announcement = ERROR: Criminal records has detected a [REDACTED] error #*;" diff --git a/Resources/Locale/en-US/nutrition/components/drink-component.ftl b/Resources/Locale/en-US/nutrition/components/drink-component.ftl index 9a388744b0c..e80787c8d5b 100644 --- a/Resources/Locale/en-US/nutrition/components/drink-component.ftl +++ b/Resources/Locale/en-US/nutrition/components/drink-component.ftl @@ -1,4 +1,4 @@ -drink-component-on-use-is-empty = {$owner} is empty! +drink-component-on-use-is-empty = {CAPITALIZE(THE($owner))} is empty! drink-component-on-examine-is-empty = [color=gray]Empty[/color] drink-component-on-examine-is-opened = [color=yellow]Opened[/color] drink-component-on-examine-is-sealed = The seal is intact. @@ -10,7 +10,7 @@ drink-component-on-examine-is-half-empty = Halfway Empty drink-component-on-examine-is-mostly-empty = Mostly Empty drink-component-on-examine-exact-volume = It contains {$amount}u. drink-component-try-use-drink-not-open = Open {$owner} first! -drink-component-try-use-drink-is-empty = {$entity} is empty! +drink-component-try-use-drink-is-empty = {CAPITALIZE(THE($entity))} is empty! drink-component-try-use-drink-cannot-drink = You can't drink anything! drink-component-try-use-drink-had-enough = You can't drink more! drink-component-try-use-drink-cannot-drink-other = They can't drink anything! diff --git a/Resources/Locale/en-US/nutrition/components/fat-extractor.ftl b/Resources/Locale/en-US/nutrition/components/fat-extractor.ftl index 20a31cd8c40..611b8ef5406 100644 --- a/Resources/Locale/en-US/nutrition/components/fat-extractor.ftl +++ b/Resources/Locale/en-US/nutrition/components/fat-extractor.ftl @@ -1,3 +1,5 @@ +fat-extractor-component-rate = extraction rate + fat-extractor-fact-1 = Fats are triglycerides made up of a combination of different building blocks; glycerol and fatty acids. fat-extractor-fact-2 = Adults should get a recommended 20-35% of their energy intake from fat. fat-extractor-fact-3 = Being overweight or obese puts you at an increased risk of chronic diseases, such as cardiovascular diseases, metabolic syndrome, type 2 diabetes, and some types of cancers. diff --git a/Resources/Locale/en-US/nutrition/components/pressurized-solution-component.ftl b/Resources/Locale/en-US/nutrition/components/pressurized-solution-component.ftl new file mode 100644 index 00000000000..a227d811f6e --- /dev/null +++ b/Resources/Locale/en-US/nutrition/components/pressurized-solution-component.ftl @@ -0,0 +1,3 @@ +pressurized-solution-spray-holder-self = { CAPITALIZE(THE($drink)) } sprays on you! +pressurized-solution-spray-holder-others = { CAPITALIZE(THE($drink)) } sprays on { THE($victim) }! +pressurized-solution-spray-ground = The contents of { THE($drink) } spray out! diff --git a/Resources/Locale/en-US/nutrition/components/shakeable-component.ftl b/Resources/Locale/en-US/nutrition/components/shakeable-component.ftl new file mode 100644 index 00000000000..acc1ecd8489 --- /dev/null +++ b/Resources/Locale/en-US/nutrition/components/shakeable-component.ftl @@ -0,0 +1,3 @@ +shakeable-verb = Shake +shakeable-popup-message-others = { CAPITALIZE(THE($user)) } shakes { THE($shakeable) } +shakeable-popup-message-self = You shake { THE($shakeable) } diff --git a/Resources/Locale/en-US/nyanotrasen/accent/accents.ftl b/Resources/Locale/en-US/nyanotrasen/accent/accents.ftl deleted file mode 100644 index 2699d71bc69..00000000000 --- a/Resources/Locale/en-US/nyanotrasen/accent/accents.ftl +++ /dev/null @@ -1,6 +0,0 @@ -# Mothroach -accent-words-mothroach-1 = Squeak! -accent-words-mothroach-2 = Chirp! -accent-words-mothroach-3 = Peep! -accent-words-mothroach-4 = Eeee! -accent-words-mothroach-5 = Eep! diff --git a/Resources/Locale/en-US/nyanotrasen/reagents/meta/consumable/drink/drink.ftl b/Resources/Locale/en-US/nyanotrasen/reagents/meta/consumable/drink/drink.ftl index e9d04bd951d..eef72071329 100644 --- a/Resources/Locale/en-US/nyanotrasen/reagents/meta/consumable/drink/drink.ftl +++ b/Resources/Locale/en-US/nyanotrasen/reagents/meta/consumable/drink/drink.ftl @@ -7,11 +7,5 @@ reagent-desc-pinkdrink = Entire civilizations have crumbled trying to decide if reagent-name-bubbletea = bubble tea reagent-desc-bubbletea = Big straw not included. -reagent-name-the-martinez = The Martinez -reagent-desc-the-martinez = The edgerunner legend. Remembered by a drink, Forgotten by a drunk. - -reagent-name-holywater = holy water -reagent-desc-holywater = Water blessed by some otherworldly powers. - reagent-name-lean = lean reagent-desc-lean = A disgusting mixture of soda, booze, and cough syrup. diff --git a/Resources/Locale/en-US/nyanotrasen/tools/tool-qualities.ftl b/Resources/Locale/en-US/nyanotrasen/tools/tool-qualities.ftl deleted file mode 100644 index c3c4e6ad2f5..00000000000 --- a/Resources/Locale/en-US/nyanotrasen/tools/tool-qualities.ftl +++ /dev/null @@ -1,2 +0,0 @@ -tool-quality-digging-name = Digging -tool-quality-digging-tool-name = Shovel diff --git a/Resources/Locale/en-US/objectives/conditions/terminate.ftl b/Resources/Locale/en-US/objectives/conditions/terminate.ftl deleted file mode 100644 index c88c7b14dae..00000000000 --- a/Resources/Locale/en-US/objectives/conditions/terminate.ftl +++ /dev/null @@ -1 +0,0 @@ -objective-terminate-title = Terminate {$targetName}, {CAPITALIZE($job)} diff --git a/Resources/Locale/en-US/preferences/ui/character-setup-gui.ftl b/Resources/Locale/en-US/preferences/ui/character-setup-gui.ftl index bd80815e231..b85d7be38ed 100644 --- a/Resources/Locale/en-US/preferences/ui/character-setup-gui.ftl +++ b/Resources/Locale/en-US/preferences/ui/character-setup-gui.ftl @@ -1,7 +1,6 @@ character-setup-gui-character-setup-label = Character setup character-setup-gui-character-setup-stats-button = Stats character-setup-gui-character-setup-rules-button = Rules -character-setup-gui-character-setup-save-button = Save character-setup-gui-character-setup-close-button = Close character-setup-gui-create-new-character-button = Create new slot... character-setup-gui-create-new-character-button-tooltip = A maximum of {$maxCharacters} characters are allowed. diff --git a/Resources/Locale/en-US/preferences/ui/humanoid-profile-editor.ftl b/Resources/Locale/en-US/preferences/ui/humanoid-profile-editor.ftl index d8fb5eab53c..e4588407d3c 100644 --- a/Resources/Locale/en-US/preferences/ui/humanoid-profile-editor.ftl +++ b/Resources/Locale/en-US/preferences/ui/humanoid-profile-editor.ftl @@ -2,8 +2,8 @@ humanoid-profile-editor-randomize-everything-button = Randomize everything humanoid-profile-editor-name-label = Name: humanoid-profile-editor-name-random-button = Randomize humanoid-profile-editor-appearance-tab = Appearance -humanoid-profile-editor-clothing = Show clothing -humanoid-profile-editor-loadouts = Show loadout +humanoid-profile-editor-clothing = Preview job equipment: +humanoid-profile-editor-loadouts = Preview loadout items: humanoid-profile-editor-clothing-show = Show humanoid-profile-editor-sex-label = Sex: humanoid-profile-editor-sex-male-text = Male @@ -15,6 +15,7 @@ humanoid-profile-editor-height-label = Height: {$height}cm humanoid-profile-editor-width-label = Width: {$width}cm humanoid-profile-editor-weight-label = Weight: {$weight}kg humanoid-profile-editor-species-label = Species: +humanoid-profile-editor-customspeciename-label = Custom Specie Name: humanoid-profile-editor-pronouns-label = Pronouns: humanoid-profile-editor-pronouns-male-text = He / Him humanoid-profile-editor-pronouns-female-text = She / Her @@ -23,6 +24,7 @@ humanoid-profile-editor-pronouns-neuter-text = It / It humanoid-profile-editor-import-button = Import humanoid-profile-editor-export-button = Export humanoid-profile-editor-save-button = Save +humanoid-profile-editor-reset-button = Reset humanoid-profile-editor-clothing-label = Clothing: humanoid-profile-editor-backpack-label = Backpack: humanoid-profile-editor-spawn-priority-label = Spawn priority: diff --git a/Resources/Locale/en-US/prototypes/catalog/cargo/cargoproduct-categories.ftl b/Resources/Locale/en-US/prototypes/catalog/cargo/cargoproduct-categories.ftl index f2451527b09..70dc057b39b 100644 --- a/Resources/Locale/en-US/prototypes/catalog/cargo/cargoproduct-categories.ftl +++ b/Resources/Locale/en-US/prototypes/catalog/cargo/cargoproduct-categories.ftl @@ -6,6 +6,7 @@ cargoproduct-category-name-emergency = Emergency cargoproduct-category-name-engineering = Engineering cargoproduct-category-name-food = Food cargoproduct-category-name-fun = Fun +cargoproduct-category-name-hardsuits = Hardsuits cargoproduct-category-name-hydroponics = Hydroponics cargoproduct-category-name-livestock = Livestock cargoproduct-category-name-materials = Materials diff --git a/Resources/Locale/en-US/prototypes/entities/clothing/head/hardsuit-helmets.ftl b/Resources/Locale/en-US/prototypes/entities/clothing/head/hardsuit-helmets.ftl index 2bbacf2abca..af0a836ce9c 100644 --- a/Resources/Locale/en-US/prototypes/entities/clothing/head/hardsuit-helmets.ftl +++ b/Resources/Locale/en-US/prototypes/entities/clothing/head/hardsuit-helmets.ftl @@ -55,6 +55,8 @@ ent-ClothingHeadHelmetHardsuitLuxury = HpI-20c helmet .desc = A modified helmet for the Minos hardsuit, fashioned after the Logistics Officer's colors. It's been modified for greater mobility at the expense of physical trauma protection. ent-ClothingHeadHelmetHardsuitSyndie = CSA-51a helmet .desc = An armored helmet deployed over a Shanlin tacsuit. This one has been painted blood red. +ent-ClothingHeadHelmetHardsuitSyndieReverseEngineered = CSA-51a helmet + .desc = An armored helmet deployed over a Shanlin tacsuit. This one has been painted blue. ent-ClothingHeadHelmetHardsuitSyndieMedic = CSA-51m helmet .desc = An armored helmet deployed over a Zhongyao tacsuit. features optic integrations for nearly every medical hud on the market. Designed to enable the survival of combat medics in the most dangerous of environments. @@ -64,6 +66,8 @@ ent-ClothingHeadHelmetHardsuitSyndieCommander = CSA-54c helmet .desc = A bulked up version of the Shanlin tacsuit's helmet, purpose-built for commanders of special operation squads. This one has been painted blood-red. ent-ClothingHeadHelmetHardsuitCybersun = CSA-80UA helmet .desc = An incredibly sturdy looking helmet designed for the Guan Yu tacsuit. +ent-ClothingHeadHelmetHardsuitJuggernautReverseEngineered = CSA-80UA helmet + .desc = An incredibly sturdy looking helmet designed for the Guan Yu tacsuit. This one has been painted blue. ent-ClothingHeadHelmetHardsuitWizard = WZD-84 helmet .desc = A bizarre, gem-encrusted helmet from unknown origins. It provides some protection to its wearer without restricting their movements. ent-ClothingHeadHelmetHardsuitLing = organic space helmet @@ -74,10 +78,6 @@ ent-ClothingHeadHelmetHardsuitPirateEVA = pirate helmet ent-ClothingHeadHelmetHardsuitPirateCap = pirate captain's tacsuit helmet .desc = A special hardsuit helmet, made for the captain of a pirate ship. .suffix = Pirate -ent-ClothingHeadHelmetHardsuitSyndieReverseEngineered = NTSA-122 helmet - .desc = A sturdy, lightweight helmet made by the special adquisitions department of Nanotrasen. -ent-ClothingHeadHelmetHardsuitJuggernautReverseEngineered = NTSA-126 helmet - .desc = A very sturdy helmet made by the special acquisitions department of Nanotrasen, based on the "Juggernaut" tacsuit's design. ent-ClothingHeadHelmetHardsuitERTCentcomm = NT-444c helmet .desc = A special tacsuit helmet worn by Central Command Officers. ent-ClothingHeadHelmetHardsuitERTLeader = NT-444l helmet @@ -99,4 +99,4 @@ ent-ClothingHeadHelmetHardsuitClown = clown vacsuit helmet ent-ClothingHeadHelmetHardsuitMime = mime vacsuit helmet .desc = A mime vacsuit helmet. On closer inspection, it appears to be a normal helmet painted with crayons, and a mime mask glued on top. ent-ClothingHeadHelmetHardsuitSanta = DNK-31 helmet - .desc = A festive-looking hardsuit helmet that provides the jolly gift-giver protection from low-pressure environments. \ No newline at end of file + .desc = A festive-looking hardsuit helmet that provides the jolly gift-giver protection from low-pressure environments. diff --git a/Resources/Locale/en-US/prototypes/entities/clothing/outerClothing/hardsuits.ftl b/Resources/Locale/en-US/prototypes/entities/clothing/outerClothing/hardsuits.ftl index 84f03af5c92..8232ac352df 100644 --- a/Resources/Locale/en-US/prototypes/entities/clothing/outerClothing/hardsuits.ftl +++ b/Resources/Locale/en-US/prototypes/entities/clothing/outerClothing/hardsuits.ftl @@ -74,6 +74,9 @@ ent-ClothingOuterHardsuitLuxury = HpI-20c - "Minos" hardsuit ent-ClothingOuterHardsuitSyndie = CSA-51a - "Shanlin" tacsuit .desc = A tactical combat hardsuit produced by the Cybersun-Armaments Corporation, the suit's tags indicate it provides moderate protection against most forms of damage. This one has been painted blood red. It feels incredibly light. +ent-ClothingOuterHardsuitSyndieReverseEngineered = CSA-51a - "Shanlin" tacsuit + .desc = A tactical combat hardsuit produced by the Cybersun-Armaments Corporation, the suit's tags indicate it provides moderate protection against most forms of damage. + This one has been painted blue. It feels incredibly light. ent-ClothingOuterHardsuitSyndieMedic = CSA-51m - "Zhongyao" tacsuit .desc = A tactical combat hardsuit produced by the Cybersun-Armaments Corporation, the suit's tags indicate it provides moderate protection against most forms of damage. Half of the suit is painted blood red, the rest bears galactic-standard medical markings. It feels incredibly light. @@ -87,6 +90,9 @@ ent-ClothingOuterHardsuitSyndieCommander = CSA-54c - "Tianming" tacsuit ent-ClothingOuterHardsuitJuggernaut = CSA-80UA - "Guan Yu" tacsuit .desc = The pride and joy of the Cybersun-Armaments Corporation, named after an ancient Sol' War God. Commonly known throughout the galaxy as a "Juggernaut". Matching its bulky appearance, it protects against all forms of damage. It feels VERY heavy. +end-ClothingOuterHardsuitJuggernautReverseEngineered = CSA-80UA - "Guan Yu" tacsuit + .desc = The pride and joy of the Cybersun-Armaments Corporation, named after an ancient Sol' War God. Commonly known throughout the galaxy as a "Juggernaut". + Matching its bulky appearance, it protects against all forms of damage. It feels VERY heavy. ent-ClothingOuterHardsuitWizard = WZD-84 - "Mana" tacsuit .desc = A bizarre gem-encrusted hardsuit. Famously used by members of the Wizard Federation in their operations. Contrary to it's appearance, it can protect its wearer from space and considerable amounts of physical trauma, it feels somewhat light. @@ -98,11 +104,6 @@ ent-ClothingOuterHardsuitPirateEVA = pirate vacsuit ent-ClothingOuterHardsuitPirateCap = pirate captain's tacsuit .desc = An ancient armored tactical combat hardsuit of unknown origin, provides basic protections from the cold harsh realities of deep space and physical trauma. It doesn't seem to have any weight either. Perfect for defending against space scurvy and toolbox-wielding scallywags. -ent-ClothingOuterHardsuitSyndieReverseEngineered = NTSA-122 tacsuit - .desc = A suit made by the special adquisitions department of Nanotrasen, the suit's tags indicate it provides moderate protection against most forms of damage. -ent-ClothingOuterHardsuitJuggernautReverseEngineered = NTSA-126 tacsuit - .desc = A suit made by the special acquisitions department of Nanotrasen based on the "Juggernaut" design. - Matching its bulky appearance, it protects against all forms of damage. It feels VERY heavy. ent-ClothingOuterHardsuitERTCentcomm = NT-444c - "Ophanim" tacsuit .desc = A highly advanced, tactical combat hardsuit used by Central Command Officers, it seems to be branded with the Nanotrasen logo and a strange looking series number. The armor appears to be lined with a very sturdy alloy, it doesn't seem to have any weight either. diff --git a/Resources/Locale/en-US/prototypes/roles/antags.ftl b/Resources/Locale/en-US/prototypes/roles/antags.ftl index 40f2c9a6820..5c514dba8ec 100644 --- a/Resources/Locale/en-US/prototypes/roles/antags.ftl +++ b/Resources/Locale/en-US/prototypes/roles/antags.ftl @@ -30,6 +30,3 @@ roles-antag-space-ninja-objective = Use your stealth to sabotage the station, no roles-antag-thief-name = Thief roles-antag-thief-objective = Add some NT property to your personal collection without using violence. - -roles-antag-terminator-name = Paradox Anomaly # DeltaV - paradox anomaly -roles-antag-terminator-objective = Replace your double, or befriend them. # DeltaV - paradox anomaly diff --git a/Resources/Locale/en-US/psionics/psionic-powers.ftl b/Resources/Locale/en-US/psionics/psionic-powers.ftl index ad6bbef02bd..a7cec77aa2a 100644 --- a/Resources/Locale/en-US/psionics/psionic-powers.ftl +++ b/Resources/Locale/en-US/psionics/psionic-powers.ftl @@ -1,4 +1,6 @@ generic-power-initialization-feedback = I Awaken. +already-casting = I cannot channel more than one power at a time. +no-mana = I cannot channel enough power. # Dispel dispel-power-description = Dispel summoned entities such as familiars or forcewalls. @@ -48,6 +50,28 @@ psionic-regeneration-power-initialization-feedback = I look within myself, finding a wellspring of life. psionic-regeneration-power-metapsionic-feedback = {CAPITALIZE($entity)} possesses an overwhelming will to live +# Healing Word +action-name-healing-word = Healing Word +action-description-healing-word = Speak the Lesser Secret Of Life, and restore health to another. +healing-word-power-description = Speak the Lesser Secret Of Life, and restore health to another. +healing-word-power-initialization-feedback = + At the beginning of time, a word was spoken that brought life into the Spheres. + Though it taxes my mind to know it, this Secret is known to me now. + I need only speak it. +healing-word-power-metapsionic-feedback = {CAPITALIZE($entity)} bears the Lesser Secret of Life. +healing-word-begin = {CAPITALIZE($entity)} mutters a word that brings both joy and pain alike to those who hear it. + +# Revivify +action-name-revivify = Breath of Life +action-description-revivify = Speak the Greater Secret of Life, and restore another to life. +revivify-power-description = Speak the Greater Secret of Life, and restore another to life. +revivify-power-initialization-feedback = + For a moment, my soul journeys across time and space to the beginning of it all, there I hear it. + The Secret of Life in its fullness. I feel my entire existence burning out from within, merely by knowing it. + Power flows through me as a mighty river, begging to be released with a simple spoken word. +revivify-power-metapsionic-feedback = {CAPITALIZE($entity)} bears the Greater Secret of Life. +revivify-begin = {CAPITALIZE($entity)} enunciates a word of such divine power, that those who hear it weep from joy. + # Telegnosis telegnosis-power-description = Create a telegnostic projection to remotely observe things. telegnosis-power-initialization-feedback = @@ -86,7 +110,77 @@ telepathy-power-initialization-feedback = The voices I've heard all my life begin to clear, yet they do not leave me. Before, they were as incoherent whispers, now my senses broaden, I come to a realization that they are part of a communal shared hallucination. Behind every voice is a glimmering sentience. +# Shadeskip +action-name-shadeskip = Shadeskip +action-description-shadeskip = + Call upon the Lords of the End of Time, and beseech them for a fragment of true entropy. +shadeskip-power-description = { action-description-shadeskip } +shadeskip-power-initialization-feedback = + I find myself standing in a frigid land, under a sky lacking in all starlight. Cold is the void at the End of Time. + I look to the pale blue within blue horizon, and find a great eye standing at the center of it all, black and emptier than the deepest reaches of space. + My soul begins to wither under its gaze, and I find myself begging for it to look away. The eye laughs, it demands that I serve it or die. + Knowing I have no choice, I pledge myself to it, and suddenly I am back in the material realm. The eye stares behind me still. +shadeskip-power-metapsionic-feedback = {CAPITALIZE($entity)} has been claimed by the Lords of the End of Time. +shadeskip-overcharge-feedback = My body reels from shock as it is overwhelmed by the sheer force flowing through me. + +# Telekinetic Pulse +action-name-telekinetic-pulse = Telekinetic Pulse +action-description-telekinetic-pulse = + Force everyone around you away. +telekinetic-pulse-power-description = { action-description-telekinetic-pulse } +telekinetic-pulse-power-initialization-feedback = + As I reach through the veil with my psyche, I discover a wellspring of pure kinetic energy. It courses through me, but I seem to lack fine control over it. +telekinetic-pulse-power-metapsionic-feedback = {CAPITALIZE($entity)} has the essence of pure kinesis flowing through him. + +# Pyrokinetic Flare +action-name-pyrokinetic-flare = Pyrokinetic Flare +action-description-pyrokinetic-flare = + Generate a flash of firelight from Gehenna to blind your adversaries. +pyrokinetic-flare-power-description = { action-description-pyrokinetic-flare } +pyrokinetic-flare-power-initialization-feedback = + My gaze is briefly filled with a flash of immense light and head, and for a single moment I can see a glimpse of a realm + of fire and pain, of hunger and suffering. Just as soon as I glimpse it, the vision fades. But the memory of that flash lingers within my mind. + I can recall it still, a glimpse of the fires of Gehenna. +pyrokinetic-flare-power-metapsionic-feedback = Guh these don't even matter because nobody can read this line in-game and I don't know when I'm ever bringing back Narrow Pulse + +# Summon Imp +action-name-summon-imp = Summon Imp +action-description-summon-imp = + Summon and bind an Imp from Gehenna to serve as your Familiar. +summon-imp-power-description = { action-description-summon-imp } +summon-imp-power-initialization-feedback = + For a brief time, I find myself wandering the blackened fields of Gehenna. I sift between the ashes, finding a smoldering coal in the shape of an eye. + I breathe upon it, and it bursts alight with flame. Before I return, the creature thanks me and tells me its name. + +# Summon Remilia +action-name-summon-remilia = Summon Remilia +action-description-summon-remilia = + Call forth your ever-loyal familiar Remilia. +summon-remilia-power-description = { action-description-summon-remilia } + +# Psionic System Messages mindbreaking-feedback = The light of life vanishes from {CAPITALIZE($entity)}'s eyes, leaving behind a husk pretending at sapience examine-mindbroken-message = Eyes unblinking, staring deep into the horizon. {CAPITALIZE($entity)} is a sack of meat pretending it has a soul. - There is nothing behind its gaze, no evidence there can be found of the divine light of creation. \ No newline at end of file + There is nothing behind its gaze, no evidence there can be found of the divine light of creation. +psionic-roll-failed = For a moment, my consciousness expands, yet I feel that it is not enough. +entity-anomaly-no-grid = There is nowhere for me to conjure beings. +power-overwhelming-power-feedback = {CAPITALIZE($entity)} wields a vast connection to the noösphere + +# Shadowkin ShadeSkip +action-description-shadowkin-shadeskip = Aaramrra! + +# DarkSwap +action-name-darkswap = DarkSwap +action-description-darkswap = Mmra Mamm! + +ethereal-pickup-fail = My hand sizzles as it passes through... + +# Psionic Familiar System +psionic-familiar-cant-attack-master = I am bound by my Master, I cannot harm them. +psionic-familiar-despawn-text = {CAPITALIZE($entity)} returns from whence it came! +ghost-role-information-familiar-name = Psionic Familiar +ghost-role-information-familiar-description = An interdimensional creature bound to the will of a Psion. +ghost-role-information-familiar-rules = + Obey the one who summoned you. Do not act against the interests of your Master. You will die for your Master if it is necessary. + diff --git a/Resources/Locale/en-US/radiation/geiger-component.ftl b/Resources/Locale/en-US/radiation/geiger-component.ftl index 0e7d2a8a353..726c7190f20 100644 --- a/Resources/Locale/en-US/radiation/geiger-component.ftl +++ b/Resources/Locale/en-US/radiation/geiger-component.ftl @@ -1,3 +1,3 @@ -geiger-item-control-status = Radiation: [color={$color}]{$rads} rads[/color] +geiger-item-control-status = [color={$color}]{$rads} rads[/color] geiger-item-control-disabled = Disabled geiger-component-examine = Current radiation: [color={$color}]{$rads} rads[/color] diff --git a/Resources/Locale/en-US/radio/components/radio-jammer-component.ftl b/Resources/Locale/en-US/radio/components/radio-jammer-component.ftl index 68efbf8d4ee..eb540ee971f 100644 --- a/Resources/Locale/en-US/radio/components/radio-jammer-component.ftl +++ b/Resources/Locale/en-US/radio/components/radio-jammer-component.ftl @@ -4,3 +4,13 @@ radio-jammer-component-off-state = off radio-jammer-component-examine-on-state = The light is currently [color=darkgreen]on[/color]. radio-jammer-component-examine-off-state = The light is currently [color=darkred]off[/color]. + +radio-jammer-component-setting-high = High +radio-jammer-component-setting-medium = Medium +radio-jammer-component-setting-low = Low + +radio-jammer-component-set-message-high = The jammer is now operating at high power. +radio-jammer-component-set-message-medium = The jammer is now operating at medium power. +radio-jammer-component-set-message-low = The jammer is now operating at low power. + +radio-jammer-component-switch-setting = The power level switch is set to "[color=yellow]{$powerLevel}[/color]". diff --git a/Resources/Locale/en-US/random-barks/!default.ftl b/Resources/Locale/en-US/random-barks/!default.ftl new file mode 100644 index 00000000000..9620b80a932 --- /dev/null +++ b/Resources/Locale/en-US/random-barks/!default.ftl @@ -0,0 +1,28 @@ +# Default barks. This file serves as a template for future bark types and as a fallback for mobs who do not have unique barks for one reason or another. + +# Recommendations: +# - Try to keep barks simple and reasonably short. 8 words is the usual limit, but most barks should be at msot 3 words long. +# - Each bark should be one, or at most two sentences long. +# - Keep in mind that those will usually not be understood by players. +# - Do not add punctuation at the end of the message, except for question marks, so that the random bark system will add random punctuation. +bark-default-1 = Bark +bark-default-2 = Boof +bark-default-3 = Woofums +bark-default-4 = Rawrl +bark-default-5 = Eeeeeee +bark-default-6 = Barkums +bark-default-7 = Awooooooooooooooooooo awooo awoooo +bark-default-8 = Grrrrrrrrrrrrrrrrrr +bark-default-9 = Rarrwrarrwr +bark-default-10 = Goddamn I love gold fish crackers +bark-default-11 = Bork bork boof boof bork bork boof boof bork +bark-default-12 = Bark +bark-default-13 = Boof +bark-default-14 = Woofums +bark-default-15 = Rawrl +bark-default-16 = Eeeeeee +bark-default-17 = Barkum + +# This should always come last so that it's easy to keep track of. +# Bark counts are locale-specific so they are typically defined in FTL files instead of YML, to make localization easier. +bark-default-count = 17 diff --git a/Resources/Locale/en-US/random-barks/bee.ftl b/Resources/Locale/en-US/random-barks/bee.ftl new file mode 100644 index 00000000000..2398eaa8a88 --- /dev/null +++ b/Resources/Locale/en-US/random-barks/bee.ftl @@ -0,0 +1,5 @@ +bark-bee-1 = Bzzzz +bark-bee-2 = Bzzt Bzzzt +bark-bee-3 = Bzzzt bzzzzzz +bark-bee-4 = Bzzzzt +bark-bee-count = 4 diff --git a/Resources/Locale/en-US/random-barks/cat.ftl b/Resources/Locale/en-US/random-barks/cat.ftl new file mode 100644 index 00000000000..61536efdf4e --- /dev/null +++ b/Resources/Locale/en-US/random-barks/cat.ftl @@ -0,0 +1,25 @@ +bark-cat-1 = Meow +bark-cat-2 = Purr purr +bark-cat-3 = Hungry +bark-cat-4 = Fish! +bark-cat-5 = Birds! +bark-cat-6 = Nap time +bark-cat-7 = Scratch scratch scratch +bark-cat-8 = Purr purr purr +bark-cat-9 = That a mouse? +bark-cat-10 = Meow meow +bark-cat-11 = Brrow +bark-cat-12 = Pet me +bark-cat-13 = Pets good +bark-cat-14 = Yawn +bark-cat-15 = Hiss +bark-cat-16 = Where'd the sun go? +bark-cat-17 = Play time +bark-cat-18 = Sleepy +bark-cat-19 = Need to rest +bark-cat-20 = I hear mice +bark-cat-21 = Must catch the mouse +bark-cat-22 = Mothroach tasted good +bark-cat-23 = Purrmeow +bark-cat-24 = Mrrp meow mrrow +bark-cat-count = 24 diff --git a/Resources/Locale/en-US/random-barks/chicken.ftl b/Resources/Locale/en-US/random-barks/chicken.ftl new file mode 100644 index 00000000000..fe7070e045f --- /dev/null +++ b/Resources/Locale/en-US/random-barks/chicken.ftl @@ -0,0 +1,9 @@ +bark-chicken-1 = Coooot +bark-chicken-2 = Coot +bark-chicken-3 = Coot Coot Cooot +bark-chicken-4 = Food +bark-chicken-5 = Where is grass? +bark-chicken-6 = Need to eat +bark-chicken-8 = Egg +bark-chicken-9 = Coot coot +bark-chicken-count = 9 diff --git a/Resources/Locale/en-US/random-barks/cow.ftl b/Resources/Locale/en-US/random-barks/cow.ftl new file mode 100644 index 00000000000..e628fde767d --- /dev/null +++ b/Resources/Locale/en-US/random-barks/cow.ftl @@ -0,0 +1,11 @@ +bark-cow-1 = Mooooo +bark-cow-2 = Moo +bark-cow-3 = Huff +bark-cow-4 = Moooooooo +bark-cow-5 = Moooo +bark-cow-6 = Floor is food +bark-cow-7 = I'm hungry +bark-cow-8 = How long have I been here? +bark-cow-9 = Moooo mooooooo +bark-cow-10 = Huff... Moooooo +bark-cow-count = 10 diff --git a/Resources/Locale/en-US/random-barks/crab.ftl b/Resources/Locale/en-US/random-barks/crab.ftl new file mode 100644 index 00000000000..5fe69f5c6bd --- /dev/null +++ b/Resources/Locale/en-US/random-barks/crab.ftl @@ -0,0 +1,12 @@ +# Contrary to a popular belief, crabs do not actually possess much of an intelligence, if any at all. +bark-crab-1 = Claw! +bark-crab-2 = Snap snap +bark-crab-3 = Clickity clack +bark-crab-4 = Clack clack +bark-crab-5 = Water +bark-crab-6 = Snap +bark-crab-7 = Clack +bark-crab-8 = Click +bark-crab-9 = Clack clack clack +bark-crab-10 = click click clack +bark-crab-count = 10 diff --git a/Resources/Locale/en-US/random-barks/dog.ftl b/Resources/Locale/en-US/random-barks/dog.ftl new file mode 100644 index 00000000000..4cd94c3a4a1 --- /dev/null +++ b/Resources/Locale/en-US/random-barks/dog.ftl @@ -0,0 +1,36 @@ +bark-dog-1 = Bark +bark-dog-2 = Boof +bark-dog-3 = Woofums +bark-dog-4 = Rawrl +bark-dog-5 = Eeeeeee +bark-dog-6 = Barkums +bark-dog-7 = Awooooooooooooooooooo awoo awoooo +bark-dog-8 = Grrrrrrrrrrrrrrrrrr +bark-dog-9 = Rarrwrarrwr +bark-dog-10 = Goddamn I love gold fish crackers +bark-dog-11 = Bork bork boof boof bork bork boof boof boof bork +bark-dog-12 = Bark +bark-dog-13 = Boof +bark-dog-14 = Woofums +bark-dog-15 = Rawrl +bark-dog-16 = Eeeeeee +bark-dog-17 = Barkum +bark-dog-18 = Woof woof woof! +bark-dog-19 = Awoooo! I smell food! +bark-dog-20 = Bark bark bark bark! +bark-dog-21 = Grrr, let’s play! +bark-dog-22 = Wooooo! +bark-dog-23 = Rawr! I’m a fierce creature of god! +bark-dog-24 = I love belly rubs! +bark-dog-25 = Bark! Who's there? +bark-dog-26 = Eeeeeee! So excited! +bark-dog-27 = Woof woof, where's my snack? +bark-dog-28 = Bark bark, chasing my tail again! +bark-dog-29 = Grrr, I see a shiny thing! +bark-dog-30 = Bork bork, can I eat that? +bark-dog-31 = Awoo, what’s that weird smell? +bark-dog-32 = Woofums, I like to bark at stars! +bark-dog-33 = Bark bark, I forgot what I wanted! +bark-dog-34 = Eeeee, squeaky toy, my best friend! +bark-dog-35 = Rawrl, let’s run in circles forever! +bark-dog-count = 35 diff --git a/Resources/Locale/en-US/random-barks/fox.ftl b/Resources/Locale/en-US/random-barks/fox.ftl new file mode 100644 index 00000000000..c7a9f612088 --- /dev/null +++ b/Resources/Locale/en-US/random-barks/fox.ftl @@ -0,0 +1,29 @@ +bark-fox-1 = Yip yip +bark-fox-2 = Yap yap +bark-fox-3 = Food +bark-fox-4 = Hungry +bark-fox-5 = Critter! Must catch +bark-fox-6 = Run +bark-fox-7 = Hide +bark-fox-8 = Sniff sniff +bark-fox-9 = I'm scared +bark-fox-10 = Purr purr +bark-fox-11 = Play? +bark-fox-12 = Sleepy +bark-fox-13 = Yap yap yap +bark-fox-14 = Yawn +bark-fox-15 = Curious +bark-fox-16 = Happy +bark-fox-17 = Food, now! +bark-fox-18 = Lonely +bark-fox-19 = Barruf +bark-fox-20 = Raff ruff +bark-fox-21 = Zoomies +bark-fox-22 = Yip yap yap yip yip +bark-fox-23 = I'm hungry +bark-fox-24 = Feed me +bark-fox-25 = Eeeeeeeeeeeeee +bark-fox-26 = Eeeeeee +bark-fox-27 = Myaaaaah +bark-fox-28 = Yip yip yip +bark-fox-count = 28 diff --git a/Resources/Locale/en-US/random-barks/hissing.ftl b/Resources/Locale/en-US/random-barks/hissing.ftl new file mode 100644 index 00000000000..d9f97d984e5 --- /dev/null +++ b/Resources/Locale/en-US/random-barks/hissing.ftl @@ -0,0 +1,25 @@ +# Agressive xenos/spiders +bark-hissing-1 = Hsssss +bark-hissing-2 = Hssssssss +bark-hissing-3 = I sssee you +bark-hissing-4 = I will catch you +bark-hissing-6 = I'm hhhungry! +bark-hissing-7 = Ssseek... food... +bark-hissing-8 = Hsss... Get there +bark-hissing-9 = People... food +bark-hissing-10 = Hsssss... hssssss +bark-hissing-11 = Darknesss... safe... +bark-hissing-12 = Need to lure them in... +bark-hissing-13 = Yummy meat... +bark-hissing-14 = Ventsss... home... +bark-hissing-15 = Sssneaking up... +bark-hissing-16 = Hsss... shadows... +bark-hissing-17 = I am lurking... +bark-hissing-18 = Flesh... tasty... +bark-hissing-19 = Sssilent... deadly... +bark-hissing-20 = Hsssss... wait... +bark-hissing-21 = Creep closer... +bark-hissing-22 = Trap set... +bark-hissing-23 = Sssso close now... +bark-hissing-24 = Hsss... prey spotted... +bark-hissing-count = 24 diff --git a/Resources/Locale/en-US/random-barks/kobold.ftl b/Resources/Locale/en-US/random-barks/kobold.ftl new file mode 100644 index 00000000000..3168dbf9b7b --- /dev/null +++ b/Resources/Locale/en-US/random-barks/kobold.ftl @@ -0,0 +1,18 @@ +bark-kobold-1 = Grrr +bark-kobold-2 = Treasure, mine now +bark-kobold-3 = Hungry +bark-kobold-4 = More shinies! +bark-kobold-5 = Must collect stuff +bark-kobold-6 = Sneaky sneaky +bark-kobold-7 = Mine now +bark-kobold-8 = Yip yip +bark-kobold-9 = Scared +bark-kobold-10 = Hide +bark-kobold-11 = Yikes +bark-kobold-12 = Yip yip yip +bark-kobold-13 = Go away +bark-kobold-14 = Look, shiny +bark-kobold-15 = Need help +bark-kobold-16 = I see you +bark-kobold-17 = I don't like you +bark-kobold-count = 17 diff --git a/Resources/Locale/en-US/random-barks/mouse.ftl b/Resources/Locale/en-US/random-barks/mouse.ftl new file mode 100644 index 00000000000..88fd0ef04ba --- /dev/null +++ b/Resources/Locale/en-US/random-barks/mouse.ftl @@ -0,0 +1,28 @@ +# Mice get a lot because they are a lot more common than e.g. cows or chickens, are understood by certain species and player-controlled mice, etc... +bark-mouse-1 = pi pi pi +bark-mouse-2 = pi pi pi pi +bark-mouse-3 = Cheese +bark-mouse-4 = Food +bark-mouse-5 = I'm hungry +bark-mouse-6 = Need cheese +bark-mouse-7 = Goddamn I love grilled cheese +bark-mouse-8 = Traps everywhere +bark-mouse-9 = Should find food +bark-mouse-10 = Where is the kitchen? +bark-mouse-11 = I'm so hungry +bark-mouse-12 = Squeak +bark-mouse-13 = Cheese now, please +bark-mouse-14 = I want food +bark-mouse-15 = Pi pi pi pi pi +bark-mouse-16 = Where's the cheese? +bark-mouse-17 = Snack time, please +bark-mouse-18 = Hungry! Need snack +bark-mouse-19 = Food? Anyone? +bark-mouse-20 = Cheese is life +bark-mouse-21 = Squeak squeak! More cheese +bark-mouse-22 = I'm still hungry +bark-mouse-23 = Pi? What's that? +bark-mouse-24 = Kitchen smells good +bark-mouse-25 = Cheese is missing +bark-mouse-26 = I'm going to form my own kingdom and overthrow the station command +bark-mouse-count = 26 diff --git a/Resources/Locale/en-US/random-barks/penguin.ftl b/Resources/Locale/en-US/random-barks/penguin.ftl new file mode 100644 index 00000000000..f6f1cc12428 --- /dev/null +++ b/Resources/Locale/en-US/random-barks/penguin.ftl @@ -0,0 +1,12 @@ +bark-penguin-1 = Wark wark +bark-penguin-2 = Fish! +bark-penguin-3 = Cold? +bark-penguin-4 = Waddle waddle +bark-penguin-5 = Gimme fish +bark-penguin-6 = Wark! +bark-penguin-7 = I miss water +bark-penguin-8 = Where's fish? +bark-penguin-9 = Can't fly +bark-penguin-10 = Wank wank wank +bark-penguin-11 = Wank wank wank wank wank wank wank +bark-penguin-count = 11 diff --git a/Resources/Locale/en-US/random-barks/possum.ftl b/Resources/Locale/en-US/random-barks/possum.ftl new file mode 100644 index 00000000000..c9f179e6ccd --- /dev/null +++ b/Resources/Locale/en-US/random-barks/possum.ftl @@ -0,0 +1,24 @@ +# Possum <3 +bark-possum-1 = Hiss hiss +bark-possum-2 = Hiss hiss hiss +bark-possum-3 = Food +bark-possum-4 = Hungry +bark-possum-5 = More food +bark-possum-6 = Hiss +bark-possum-7 = Play dead +bark-possum-8 = Scared +bark-possum-9 = Hide +bark-possum-10 = Dark please +bark-possum-11 = Tree home +bark-possum-12 = Hiss hiss hiss hiss +bark-possum-13 = Food now +bark-possum-14 = Sleepy +bark-possum-15 = Hiss hiss hiss +bark-possum-16 = Nighttime good +bark-possum-17 = Fruit please +bark-possum-18 = No light +bark-possum-19 = Hiss hiss hiss hiss hiss +bark-possum-20 = Safe dark +bark-possum-21 = Need to hide +bark-possum-22 = Hiss... Stay away +bark-possum-count = 22 diff --git a/Resources/Locale/en-US/random-barks/raccoon.ftl b/Resources/Locale/en-US/random-barks/raccoon.ftl new file mode 100644 index 00000000000..5493ea255fe --- /dev/null +++ b/Resources/Locale/en-US/random-barks/raccoon.ftl @@ -0,0 +1,16 @@ +bark-raccoon-1 = Chomp chomp +bark-raccoon-2 = Rummage +bark-raccoon-3 = Snack time +bark-raccoon-4 = Where's food +bark-raccoon-5 = I want shiny +bark-raccoon-6 = Oooo... lots of garbage +bark-raccoon-7 = Squeak! +bark-raccoon-8 = Need to eat +bark-raccoon-9 = Hungry now +bark-raccoon-10 = Ooh, shiny +bark-raccoon-11 = Should explore more +bark-raccoon-12 = Need to find food +bark-raccoon-13 = Yummy +bark-raccoon-14 = I’m curious +bark-raccoon-15 = A human called me a possum... I am not a possum +bark-raccoon-count = 15 diff --git a/Resources/Locale/en-US/reagents/mannitol.ftl b/Resources/Locale/en-US/reagents/mannitol.ftl new file mode 100644 index 00000000000..1d35aff5872 --- /dev/null +++ b/Resources/Locale/en-US/reagents/mannitol.ftl @@ -0,0 +1 @@ +mannitol-effect-enlightened = You feel ENLIGHTENED! diff --git a/Resources/Locale/en-US/reagents/meta/consumable/drink/alcohol.ftl b/Resources/Locale/en-US/reagents/meta/consumable/drink/alcohol.ftl index 682e03ff772..98a6b7984ae 100644 --- a/Resources/Locale/en-US/reagents/meta/consumable/drink/alcohol.ftl +++ b/Resources/Locale/en-US/reagents/meta/consumable/drink/alcohol.ftl @@ -261,3 +261,21 @@ reagent-desc-whiskey-soda = For the more refined griffon. reagent-name-white-russian = white russian reagent-desc-white-russian = That's just, like, your opinion, man... + +reagent-name-vodka-red-bool = vodka red bool +reagent-desc-vodka-red-bool = Because heart failure and liver failure go hand in hand. + +reagent-name-xeno-basher = xeno basher +reagent-desc-xeno-basher = The perfect drink before an expedition. + +reagent-name-irish-bool = irish bool +reagent-desc-irish-bool = Like a bool in a Ireland shop. + +reagent-name-budget-insuls = budget insuls +reagent-desc-budget-insuls = A tider's preferred drink. + +reagent-name-watermelon-wakeup = watermelon wakeup +reagent-desc-watermelon-wakeup = If you want to be awake, this will do it... Also sweet. + +reagent-name-rubberneck = rubberneck +reagent-desc-rubberneck = A popular drink amongst those adhering to an all synthetic diet. diff --git a/Resources/Locale/en-US/reagents/meta/fun.ftl b/Resources/Locale/en-US/reagents/meta/fun.ftl index 8764a3d28a4..a4a8c0f150a 100644 --- a/Resources/Locale/en-US/reagents/meta/fun.ftl +++ b/Resources/Locale/en-US/reagents/meta/fun.ftl @@ -22,7 +22,7 @@ reagent-desc-razorium = A strange, non-newtonian chemical. It is produced when t reagent-name-fresium = Fresium reagent-desc-fresium = A mysterious compound that slows the vibration of atoms and molecules... somehow. In layman's terms, it makes things cold... REALLY cold. Can cause long-lasting movement issues if ingested. -reagent-name-laughter = Laughter +reagent-name-laughter = laughter reagent-desc-laughter = Some say that this is the best medicine, but recent studies have proven that to be untrue. reagent-name-weh = juice that makes you Weh diff --git a/Resources/Locale/en-US/reagents/meta/medicine.ftl b/Resources/Locale/en-US/reagents/meta/medicine.ftl index e02d428082f..a84e8315fda 100644 --- a/Resources/Locale/en-US/reagents/meta/medicine.ftl +++ b/Resources/Locale/en-US/reagents/meta/medicine.ftl @@ -127,8 +127,17 @@ reagent-desc-pyrazine = Efficiently heals burns from the hottest of fires. Cause reagent-name-insuzine = insuzine reagent-desc-insuzine = Rapidly repairs dead tissue caused by electrocution, but cools you slightly. Completely freezes the patient when overdosed. +reagent-name-opporozidone = opporozidone +reagent-desc-opporozidone= A difficult to synthesize cryogenic drug used to regenerate rotting tissue and brain matter. + reagent-name-necrosol = necrosol reagent-desc-necrosol = A necrotic substance that seems to be able to heal frozen corpses. It can treat and rejuvenate plants when applied in small doses. reagent-name-aloxadone = aloxadone reagent-desc-aloxadone = A cryogenics chemical. Used to treat severe third degree burns via regeneration of the burnt tissue. Works regardless of the patient being alive or dead. + +reagent-name-mannitol = mannitol +reagent-desc-mannitol = Efficiently restores brain damage. + +reagent-name-psicodine = psicodine +reagent-desc-psicodine = Suppresses anxiety and other various forms of mental distress. Overdose causes hallucinations and minor toxin damage. diff --git a/Resources/Locale/en-US/reagents/meta/narcotics.ftl b/Resources/Locale/en-US/reagents/meta/narcotics.ftl index ea115bf9627..d6da2595013 100644 --- a/Resources/Locale/en-US/reagents/meta/narcotics.ftl +++ b/Resources/Locale/en-US/reagents/meta/narcotics.ftl @@ -13,9 +13,6 @@ reagent-desc-experimental-stimulants = A prototype version of the stimulant chem reagent-name-thc = THC reagent-desc-thc = The main psychoactive compound in cannabis. -reagent-name-thc-oil = THC oil -reagent-desc-thc-oil = Pure THC oil, extracted from the leaves of the cannabis plant. Much stronger than its natural form and can be used to numb chronic pain in patients. - reagent-name-bananadine = bananadine reagent-desc-bananadine = A mild psychedelic that is found in small traces in banana peels. @@ -39,3 +36,6 @@ reagent-desc-norepinephric-acid = A smooth chemical that blocks the optical rece reagent-name-tear-gas = tear gas reagent-desc-tear-gas = A chemical that causes severe irritation and crying, commonly used in riot control. + +reagent-name-happiness = happiness +reagent-desc-happiness = Fills you with ecstatic numbness and causes minor brain damage. Highly addictive. If overdosed causes sudden mood swings. diff --git a/Resources/Locale/en-US/reagents/meta/physical-desc.ftl b/Resources/Locale/en-US/reagents/meta/physical-desc.ftl index 064b21eaa9c..a132a865a6a 100644 --- a/Resources/Locale/en-US/reagents/meta/physical-desc.ftl +++ b/Resources/Locale/en-US/reagents/meta/physical-desc.ftl @@ -77,14 +77,12 @@ reagent-physical-desc-sickly = sickly reagent-physical-desc-skunky = skunky reagent-physical-desc-slimy = slimy reagent-physical-desc-soapy = soapy -reagent-physical-desc-soapy = soapy reagent-physical-desc-soothing = soothing reagent-physical-desc-sour = sour reagent-physical-desc-spicy = spicy reagent-physical-desc-starchy = starchy reagent-physical-desc-starry = starry reagent-physical-desc-sticky = sticky -reagent-physical-desc-strong-smelling = strong smelling reagent-physical-desc-strong-smelling = strong-smelling reagent-physical-desc-sugary = sugary reagent-physical-desc-sweet = sweet diff --git a/Resources/Locale/en-US/reagents/meta/toxins.ftl b/Resources/Locale/en-US/reagents/meta/toxins.ftl index fa2a813d1d6..66bdbb480bc 100644 --- a/Resources/Locale/en-US/reagents/meta/toxins.ftl +++ b/Resources/Locale/en-US/reagents/meta/toxins.ftl @@ -76,6 +76,9 @@ reagent-desc-vestine = Has an adverse reaction within the body causing major jit reagent-name-tazinide = tazinide reagent-desc-tazinide = A highly dangerous metallic mixture which can interfere with most movement through an electrifying current. +reagent-name-lipolicide = lipolicide +reagent-desc-lipolicide = A powerful toxin that will destroy fat cells, massively reducing body weight in a short time. Deadly to those without nutriment in their body. + reagent-name-soulbreaker-toxin = soulbreaker toxin reagent-desc-soulbreaker-toxin = An anti-psionic about 4 times as powerful as mindbreaker toxin. diff --git a/Resources/Locale/en-US/reagents/psicodine.ftl b/Resources/Locale/en-US/reagents/psicodine.ftl new file mode 100644 index 00000000000..c9795b11a98 --- /dev/null +++ b/Resources/Locale/en-US/reagents/psicodine.ftl @@ -0,0 +1,3 @@ +psicodine-effect-fearless = You feel totally fearless! +psicodine-effect-anxieties-wash-away = All of your anxieties wash away! +psicodine-effect-at-peace = You feel completely at peace. diff --git a/Resources/Locale/en-US/research/components/robotics-console.ftl b/Resources/Locale/en-US/research/components/robotics-console.ftl new file mode 100644 index 00000000000..978fa9a43c0 --- /dev/null +++ b/Resources/Locale/en-US/research/components/robotics-console.ftl @@ -0,0 +1,19 @@ +robotics-console-window-title = Robotics Console +robotics-console-no-cyborgs = No Cyborgs! + +robotics-console-select-cyborg = Select a cyborg above. +robotics-console-model = [color=gray]Model:[/color] {$name} +# name is not formatted to prevent players trolling +robotics-console-designation = [color=gray]Designation:[/color] +robotics-console-battery = [color=gray]Battery charge:[/color] [color={$color}]{$charge}[/color]% +robotics-console-modules = [color=gray]Modules installed:[/color] {$count} +robotics-console-brain = [color=gray]Brain installed:[/color] [color={$brain -> + [true] green]Yes + *[false] red]No +}[/color] + +robotics-console-locked-message = Controls locked, swipe ID. +robotics-console-disable = Disable +robotics-console-destroy = Destroy + +robotics-console-cyborg-destroyed = The cyborg {$name} has been remotely destroyed. diff --git a/Resources/Locale/en-US/research/technologies.ftl b/Resources/Locale/en-US/research/technologies.ftl index 96cb2039116..fe7293d8481 100644 --- a/Resources/Locale/en-US/research/technologies.ftl +++ b/Resources/Locale/en-US/research/technologies.ftl @@ -43,9 +43,10 @@ research-technology-basic-xenoarcheology = Basic XenoArcheology research-technology-alternative-research = Alternative Research research-technology-magnets-tech = Localized Magnetism research-technology-advanced-parts = Advanced Parts +research-technology-advanced-bluespace = Advanced Bluespace Research research-technology-anomaly-harnessing = Anomaly Core Harnessing research-technology-grappling = Grappling -research-technology-abnormal-artifact-manipulation = Abnormal Artifact Manipulation +research-technology-abnormal-artifact-manipulation = Artifact Recycling research-technology-gravity-manipulation = Gravity Manipulation research-technology-quantum-leaping = Quantum Leaping research-technology-advanced-anomaly-research = Advanced Anomaly Research diff --git a/Resources/Locale/en-US/salvage/salvage-magnet.ftl b/Resources/Locale/en-US/salvage/salvage-magnet.ftl index 7ce2a486de9..027afffef2f 100644 --- a/Resources/Locale/en-US/salvage/salvage-magnet.ftl +++ b/Resources/Locale/en-US/salvage/salvage-magnet.ftl @@ -17,6 +17,8 @@ salvage-magnet-resources = {$resource -> [OrePlasma] Plasma [OreUranium] Uranium [OreArtifactFragment] Artifact fragments + [OreBluespace] Bluespace crystals + [OreNormality] Normality crystals *[other] {$resource} } diff --git a/Resources/Locale/en-US/seeds/seeds.ftl b/Resources/Locale/en-US/seeds/seeds.ftl index b3983782883..9abfcdaff12 100644 --- a/Resources/Locale/en-US/seeds/seeds.ftl +++ b/Resources/Locale/en-US/seeds/seeds.ftl @@ -1,4 +1,5 @@ # Nouns +# Nouns seeds-noun-seeds = seeds seeds-noun-spores = spores @@ -57,6 +58,8 @@ seeds-eggy-name = egg-plant seeds-eggy-display-name = egg-plants seeds-cannabis-name = cannabis seeds-cannabis-display-name = cannabis +seeds-rainbow-cannabis-name = rainbow cannabis +seeds-rainbow-cannabis-display-name = rainbow cannabis seeds-tobacco-name = tobacco seeds-tobacco-display-name = tobacco plant seeds-nettle-name = nettle @@ -64,7 +67,7 @@ seeds-nettle-display-name = nettles seeds-deathnettle-name = death nettle seeds-deathnettle-display-name = death nettles seeds-chili-name = chili -seeds-chili-display-name = chilis +seeds-chili-display-name = chili peppers seeds-chilly-name = chilly seeds-chilly-display-name = chilly peppers seeds-poppy-name = poppy @@ -111,3 +114,5 @@ seeds-pumpkin-name = pumpkin seeds-pumpkin-display-name = pumpkins seeds-cotton-name = cotton seeds-cotton-display-name = cotton plant +seeds-pyrotton-name = pyrotton +seeds-pyrotton-display-name = pyrotton plant diff --git a/Resources/Locale/en-US/shuttles/thruster.ftl b/Resources/Locale/en-US/shuttles/thruster.ftl index 94035811c73..faed6e8dd28 100644 --- a/Resources/Locale/en-US/shuttles/thruster.ftl +++ b/Resources/Locale/en-US/shuttles/thruster.ftl @@ -3,3 +3,5 @@ thruster-comp-disabled = The thruster is turned [color=red]off[/color]. thruster-comp-nozzle-direction = The nozzle is facing [color=yellow]{$direction}[/color]. thruster-comp-nozzle-exposed = The nozzle [color=green]exposed[/color] to space. thruster-comp-nozzle-not-exposed = The nozzle [color=red]is not exposed[/color] to space. + +thruster-comp-upgrade-thrust = Thrust strength diff --git a/Resources/Locale/en-US/silicons/cyberlimbs.ftl b/Resources/Locale/en-US/silicons/cyberlimbs.ftl index 1f128dd893f..ed0212d042a 100644 --- a/Resources/Locale/en-US/silicons/cyberlimbs.ftl +++ b/Resources/Locale/en-US/silicons/cyberlimbs.ftl @@ -1,96 +1,237 @@ marking-MobIPCHeadDefault = Standard Operational Monitor +marking-MobIPCHeadDefault-head_m = Head marking-MobIPCTorsoDefault = Standard Robotic Chassis +marking-MobIPCTorsoDefault-torso_m = Chest marking-MobIPCTorsoFemaleDefault = Standard Robotic Chassis -marking-MobIPCLArmDefault = Standard Left Robotic Arm +marking-MobIPCTorsoFemaleDefault-torso_f = Chest +marking-MobIPCLArmDefault = Standard Left Robotic Arm +marking-MobIPCLArmDefault-l_arm = Left Arm marking-MobIPCLHandDefault = Standard Left Robotic Hand -marking-MobIPCLLegDefault = Standard Left Robotic Leg +marking-MobIPCLHandDefault-l_hand = Left Hand +marking-MobIPCLLegDefault = Standard Left Robotic Leg +marking-MobIPCLLegDefault-l_leg = Left Leg marking-MobIPCLFootDefault = Standard Left Robotic Foot +marking-MobIPCLFootDefault-l_foot = Left Foot marking-MobIPCRArmDefault = Standard Right Robotic Arm +marking-MobIPCRArmDefault-r_arm = Right Arm marking-MobIPCRHandDefault = Standard Right Robotic Hand +marking-MobIPCRHandDefault-r_hand = Right Hand marking-MobIPCRLegDefault = Standard Right Robotic Leg +marking-MobIPCRLegDefault-r_leg = Right Leg marking-MobIPCRFootDefault = Standard Right Robotic Foot +marking-MobIPCRFootDefault-r_foot = Right Foot marking-CyberLimbsMarkingBishopHead = Operational Monitor from Bishop Cybernetics +marking-CyberLimbsMarkingBishopHead-head = Primary Monitor +marking-CyberLimbsMarkingBishopHead-head-2 = Secondary Monitor marking-CyberLimbsMarkingBishopHeadAlt = Head from Bishop Cybernetics +marking-CyberLimbsMarkingBishopHeadAlt-head = Head marking-CyberLimbsMarkingBishopHeadAlt1 = Alternate Head from Bishop Cybernetics +marking-CyberLimbsMarkingBishopHeadAlt1-head = Head marking-CyberLimbsMarkingBishopChest = Robotic Chassis from Bishop Cybernetics +marking-CyberLimbsMarkingBishopChest-torso-primary = Primary Torso +marking-CyberLimbsMarkingBishopChest-torso-secondary = Secondary Torso marking-CyberLimbsMarkingBishopLArm = Left Robotic Arm from Bishop Cybernetics +marking-CyberLimbsMarkingBishopLArm-l_arm-primary = Primary Arm +marking-CyberLimbsMarkingBishopLArm-l_arm-secondary = Secondary Arm +marking-CyberLimbsMarkingBishopLArm-l_arm-tertiary = Tertiary Arm marking-CyberLimbsMarkingBishopLHand = Left Robotic Hand from Bishop Cybernetics +marking-CyberLimbsMarkingBishopLHand-l_hand = Left Hand marking-CyberLimbsMarkingBishopLLeg = Left Robotic Leg from Bishop Cybernetics +marking-CyberLimbsMarkingBishopLLeg-l_leg-primary = Primary Leg +marking-CyberLimbsMarkingBishopLLeg-l_leg-secondary = Secondary Leg marking-CyberLimbsMarkingBishopLFoot = Left Robotic Foot from Bishop Cybernetics +marking-CyberLimbsMarkingBishopLFoot-l_foot = Left Foot marking-CyberLimbsMarkingBishopRArm = Right Robotic Arm from Bishop Cybernetics +marking-CyberLimbsMarkingBishopRArm-r_arm-primary = Primary Arm +marking-CyberLimbsMarkingBishopRArm-r_arm-secondary = Secondary Arm +marking-CyberLimbsMarkingBishopRArm-r_arm-tertiary = Tertiary Arm marking-CyberLimbsMarkingBishopRHand = Right Robotic Hand from Bishop Cybernetics +marking-CyberLimbsMarkingBishopRHand-r_hand = Hand marking-CyberLimbsMarkingBishopRLeg = Right Robotic Leg from Bishop Cybernetics +marking-CyberLimbsMarkingBishopRLeg-r_leg-primary = Primary Leg +marking-CyberLimbsMarkingBishopRLeg-r_leg-secondary = Secondary Leg marking-CyberLimbsMarkingBishopRFoot = Right Robotic Foot from Bishop Cybernetics +marking-CyberLimbsMarkingBishopRFoot-r_foot = Right Foot marking-CyberLimbsMarkingHesphiastosHead = Operational Monitor from Hesphiastos Industries +marking-CyberLimbsMarkingHesphiastosHead-head-1 = Primary Head +marking-CyberLimbsMarkingHesphiastosHead-head-2 = Primary Head marking-CyberLimbsMarkingHesphiastosHeadAlt = Head from Hesphiastos Industries +marking-CyberLimbsMarkingHesphiastosHeadAlt-head-1 = Primary Head +marking-CyberLimbsMarkingHesphiastosHeadAlt-head-2 = Secondary Head +marking-CyberLimbsMarkingHesphiastosHeadAlt-head-3 = Tertiary Head marking-CyberLimbsMarkingHesphiastosChest = Robotic Chassis from Hesphiastos Industries +marking-CyberLimbsMarkingHesphiastosChest-torso-1 = Primary Chest +marking-CyberLimbsMarkingHesphiastosChest-torso-2 = Secondary Chest marking-CyberLimbsMarkingHesphiastosLArm = Left Robotic Arm from Hesphiastos Industries +marking-CyberLimbsMarkingHesphiastosLArm-l_arm-1 = Primary Arm +marking-CyberLimbsMarkingHesphiastosLArm-l_arm-2 = Secondary Arm marking-CyberLimbsMarkingHesphiastosLHand = Left Robotic Hand from Hesphiastos Industries +marking-CyberLimbsMarkingHesphiastosLHand-l_hand-1 = Primary Hand +marking-CyberLimbsMarkingHesphiastosLHand-l_hand-2 = Secondary Hand marking-CyberLimbsMarkingHesphiastosLLeg = Left Robotic Leg from Hesphiastos Industries +marking-CyberLimbsMarkingHesphiastosLLeg-l_leg-1 = Primary Leg +marking-CyberLimbsMarkingHesphiastosLLeg-l_leg-2 = Secondary Leg marking-CyberLimbsMarkingHesphiastosLFoot = Left Robotic Foot from Hesphiastos Industries +marking-CyberLimbsMarkingHesphiastosLFoot-l_foot-1 = Primary Foot +marking-CyberLimbsMarkingHesphiastosLFoot-l_foot-2 = Secondary Foot marking-CyberLimbsMarkingHesphiastosRArm = Right Robotic Arm from Hesphiastos Industries +marking-CyberLimbsMarkingHesphiastosRArm-r_arm-1 = Primary Arm +marking-CyberLimbsMarkingHesphiastosRArm-r_arm-2 = Secondary Arm marking-CyberLimbsMarkingHesphiastosRHand = Right Robotic Hand from Hesphiastos Industries +marking-CyberLimbsMarkingHesphiastosRHand-r_hand-1 = Primary Hand +marking-CyberLimbsMarkingHesphiastosRHand-r_hand-2 = Secondary Hand marking-CyberLimbsMarkingHesphiastosRLeg = Right Robotic Leg from Hesphiastos Industries +marking-CyberLimbsMarkingHesphiastosRLeg-r_leg-1 = Primary Leg +marking-CyberLimbsMarkingHesphiastosRLeg-r_leg-2 = Secondary Leg marking-CyberLimbsMarkingHesphiastosRFoot = Right Robotic Foot from Hesphiastos Industries +marking-CyberLimbsMarkingHesphiastosRFoot-r_foot-1 = Primary Foot +marking-CyberLimbsMarkingHesphiastosRFoot-r_foot-2 = Secondary Foot marking-CyberLimbsMarkingWardtakahashiHead = Operational Monitor from Ward-Takahashi +marking-CyberLimbsMarkingWardtakahashiHead-head = Head marking-CyberLimbsMarkingWardtakahashiHeadAlt = Head from Ward-Takahashi +marking-CyberLimbsMarkingWardtakahashiHeadAlt-head = Head marking-CyberLimbsMarkingWardtakahashiHeadAlt1 = Alternate Head from Ward-Takahashi +marking-CyberLimbsMarkingWardtakahashiHeadAlt1-head = Head marking-CyberLimbsMarkingWardtakahashiChest = Robotic Chassis from Ward-Takahashi +marking-CyberLimbsMarkingWardtakahashiChest-torso = Chest marking-CyberLimbsMarkingWardtakahashiLArm = Left Robotic Arm from Ward-Takahashi +marking-CyberLimbsMarkingWardtakahashiLArm-l_arm = Left Arm marking-CyberLimbsMarkingWardtakahashiLHand = Left Robotic Hand from Ward-Takahashi +marking-CyberLimbsMarkingWardtakahashiLHand-l_hand = Left Hand marking-CyberLimbsMarkingWardtakahashiLLeg = Left Robotic Leg from Ward-Takahashi +marking-CyberLimbsMarkingWardtakahashiLLeg-l_leg = Left Leg marking-CyberLimbsMarkingWardtakahashiLFoot = Left Robotic Foot from Ward-Takahashi +marking-CyberLimbsMarkingWardtakahashiLFoot-l_foot = Left Foot marking-CyberLimbsMarkingWardtakahashiRArm = Right Robotic Arm from Ward-Takahashi +marking-CyberLimbsMarkingWardtakahashiRArm-r_arm = Right Arm marking-CyberLimbsMarkingWardtakahashiRHand = Right Robotic Hand from Ward-Takahashi +marking-CyberLimbsMarkingWardtakahashiRHand-r_hand = Right Hand marking-CyberLimbsMarkingWardtakahashiRLeg = Right Robotic Leg from Ward-Takahashi +marking-CyberLimbsMarkingWardtakahashiRLeg-r_leg = Right Leg marking-CyberLimbsMarkingWardtakahashiRFoot = Right Robotic Foot from Ward-Takahashi +marking-CyberLimbsMarkingWardtakahashiRFoot-r_foot = Right Foot marking-CyberLimbsMarkingXionHead = Operational Monitor from Xion Manufacturing Group +marking-CyberLimbsMarkingXionHead-head-1 = Primary Head +marking-CyberLimbsMarkingXionHead-head-2 = Secondary Head marking-CyberLimbsMarkingXionHeadAlt = Head from Xion Manufacturing Group +marking-CyberLimbsMarkingXionHeadAlt-head-1 = Primary Head +marking-CyberLimbsMarkingXionHeadAlt-head-2 = Secondary Head marking-CyberLimbsMarkingXionChest = Robotic Chassis from Xion Manufacturing Group +marking-CyberLimbsMarkingXionChest-torso-1 = Primary Chest +marking-CyberLimbsMarkingXionChest-torso-2 = Secondary Chest marking-CyberLimbsMarkingXionLArm = Left Robotic Arm from Xion Manufacturing Group +marking-CyberLimbsMarkingXionLArm-l_arm-1 = Primary Arm +marking-CyberLimbsMarkingXionLArm-l_arm-2 = Secondary Arm marking-CyberLimbsMarkingXionLHand = Left Robotic Hand from Xion Manufacturing Group +marking-CyberLimbsMarkingXionLHand-l_hand-1 = Primary Hand +marking-CyberLimbsMarkingXionLHand-l_hand-2 = Secondary Hand marking-CyberLimbsMarkingXionLLeg = Left Robotic Leg from Xion Manufacturing Group +marking-CyberLimbsMarkingXionLLeg-l_leg-1 = Primary Leg +marking-CyberLimbsMarkingXionLLeg-l_leg-2 = Secondary Leg marking-CyberLimbsMarkingXionLFoot = Left Robotic Foot from Xion Manufacturing Group +marking-CyberLimbsMarkingXionLFoot-l_foot-1 = Primary Foot +marking-CyberLimbsMarkingXionLFoot-l_foot-2 = Secondary Foot marking-CyberLimbsMarkingXionRArm = Right Robotic Arm from Xion Manufacturing Group +marking-CyberLimbsMarkingXionRArm-r_arm-1 = Primary Arm +marking-CyberLimbsMarkingXionRArm-r_arm-2 = Secondary Arm marking-CyberLimbsMarkingXionRHand = Right Robotic Hand from Xion Manufacturing Group +marking-CyberLimbsMarkingXionRHand-r_hand-1 = Primary Hand +marking-CyberLimbsMarkingXionRHand-r_hand-2 = Secondary Hand marking-CyberLimbsMarkingXionRLeg = Right Robotic Leg from Xion Manufacturing Group +marking-CyberLimbsMarkingXionRLeg-r_leg-1 = Primary Leg +marking-CyberLimbsMarkingXionRLeg-r_leg-2 = Secondary Leg marking-CyberLimbsMarkingXionRFoot = Right Robotic Foot from Xion Manufacturing Group +marking-CyberLimbsMarkingXionRFoot-r_foot-1 = Primary Foot +marking-CyberLimbsMarkingXionRFoot-r_foot-2 = Secondary Foot marking-CyberLimbsMarkingShellguardHead = Operational Monitor from Shellguard Munitions +marking-CyberLimbsMarkingShellguardHead-head-1 = Primary Head +marking-CyberLimbsMarkingShellguardHead-head-2 = Secondary Head marking-CyberLimbsMarkingShellguardHeadAlt = Head from Shellguard Munitions +marking-CyberLimbsMarkingShellguardHeadAlt-head-1 = Primary Head +marking-CyberLimbsMarkingShellguardHeadAlt-head-2 = Secondary Head marking-CyberLimbsMarkingShellguardChest = Robotic Chassis from Shellguard Munitions +marking-CyberLimbsMarkingShellguardChest-torso-1 = Primary Chest +marking-CyberLimbsMarkingShellguardChest-torso-2 = Secondary Chest marking-CyberLimbsMarkingShellguardLArm = Left Robotic Arm from Shellguard Munitions +marking-CyberLimbsMarkingShellguardLArm-l_arm-1 = Primary Arm +marking-CyberLimbsMarkingShellguardLArm-l_arm-2 = Secondary Arm marking-CyberLimbsMarkingShellguardLHand = Left Robotic Hand from Shellguard Munitions +marking-CyberLimbsMarkingShellguardLHand-l_hand-1 = Primary Hand +marking-CyberLimbsMarkingShellguardLHand-l_hand-2 = Secondary Hand marking-CyberLimbsMarkingShellguardLLeg = Left Robotic Leg from Shellguard Munitions +marking-CyberLimbsMarkingShellguardLLeg-l_leg-1 = Primary Leg +marking-CyberLimbsMarkingShellguardLLeg-l_leg-2 = Secondary Leg marking-CyberLimbsMarkingShellguardLFoot = Left Robotic Foot from Shellguard Munitions +marking-CyberLimbsMarkingShellguardLFoot-l_foot-1 = Primary Foot +marking-CyberLimbsMarkingShellguardLFoot-l_foot-2 = Secondary Foot marking-CyberLimbsMarkingShellguardRArm = Right Robotic Arm from Shellguard Munitions +marking-CyberLimbsMarkingShellguardRArm-r_arm-1 = Primary Arm +marking-CyberLimbsMarkingShellguardRArm-r_arm-2 = Secondary Arm marking-CyberLimbsMarkingShellguardRHand = Right Robotic Hand from Shellguard Munitions +marking-CyberLimbsMarkingShellguardRHand-r_hand-1 = Primary Hand +marking-CyberLimbsMarkingShellguardRHand-r_hand-2 = Secondary Hand marking-CyberLimbsMarkingShellguardRLeg = Right Robotic Leg from Shellguard Munitions +marking-CyberLimbsMarkingShellguardRLeg-r_leg-1 = Primary Leg +marking-CyberLimbsMarkingShellguardRLeg-r_leg-2 = Secondary Leg marking-CyberLimbsMarkingShellguardRFoot = Right Robotic Foot from Shellguard Munitions +marking-CyberLimbsMarkingShellguardRFoot-r_foot-1 = Primary Foot +marking-CyberLimbsMarkingShellguardRFoot-r_foot-2 = Secondary Foot marking-CyberLimbsMarkingMorpheusHead = Operational Monitor from Morpheus Cyberkinetics +marking-CyberLimbsMarkingMorpheusHead-head = Head marking-CyberLimbsMarkingMorpheusHeadAlt = Head from Morpheus Cyberkinetics +marking-CyberLimbsMarkingMorpheusHeadAlt-head = Head marking-CyberLimbsMarkingMorpheusChest = Robotic Chassis from Morpheus Cyberkinetics +marking-CyberLimbsMarkingMorpheusChest-torso = Chest marking-CyberLimbsMarkingMorpheusLArm = Left Robotic Arm from Morpheus Cyberkinetics +marking-CyberLimbsMarkingMorpheusLArm-l_arm = Left Arm marking-CyberLimbsMarkingMorpheusLHand = Left Robotic Hand from Morpheus Cyberkinetics +marking-CyberLimbsMarkingMorpheusLHand-l_hand = Left Hand marking-CyberLimbsMarkingMorpheusLLeg = Left Robotic Leg from Morpheus Cyberkinetics +marking-CyberLimbsMarkingMorpheusLLeg-l_leg = Left Leg marking-CyberLimbsMarkingMorpheusLFoot = Left Robotic Foot from Morpheus Cyberkinetics +marking-CyberLimbsMarkingMorpheusLFoot-l_foot = Left Foot marking-CyberLimbsMarkingMorpheusRArm = Right Robotic Arm from Morpheus Cyberkinetics +marking-CyberLimbsMarkingMorpheusRArm-r_arm = Right Arm marking-CyberLimbsMarkingMorpheusRHand = Right Robotic Hand from Morpheus Cyberkinetics +marking-CyberLimbsMarkingMorpheusRHand-r_hand = Right Hand marking-CyberLimbsMarkingMorpheusRLeg = Right Robotic Leg from Morpheus Cyberkinetics +marking-CyberLimbsMarkingMorpheusRLeg-r_leg = Right Leg marking-CyberLimbsMarkingMorpheusRFoot = Right Robotic Foot from Morpheus Cyberkinetics +marking-CyberLimbsMarkingMorpheusRFoot-r_foot = Right Foot marking-CyberLimbsMarkingZenghuHead = Head from Zenghu Pharmaceuticals +marking-CyberLimbsMarkingZenghuHead-head-1 = Primary Head +marking-CyberLimbsMarkingZenghuHead-head-2 = Secondary Head marking-CyberLimbsMarkingZenghuChest = Robotic Chassis from Zenghu Pharmaceuticals -marking-CyberLimbsMarkingZenghuRHand = Right Robotic Hand from Zenghu Pharmaceuticals -marking-CyberLimbsMarkingZenghuRArm = Right Robotic Arm from Zenghu Pharmaceuticals -marking-CyberLimbsMarkingZenghuLHand = Left Robotic Hand from Zenghu Pharmaceuticals +marking-CyberLimbsMarkingZenghuChest-torso-1 = Primary Chest +marking-CyberLimbsMarkingZenghuChest-torso-2 = Secondary Chest marking-CyberLimbsMarkingZenghuLArm = Left Robotic Arm from Zenghu Pharmaceuticals +marking-CyberLimbsMarkingZenghuLArm-l_arm-1 = Primary Arm +marking-CyberLimbsMarkingZenghuLArm-l_arm-2 = Secondary Arm +marking-CyberLimbsMarkingZenghuLHand = Left Robotic Hand from Zenghu Pharmaceuticals +marking-CyberLimbsMarkingZenghuLHand-l_hand-1 = Primary Hand +marking-CyberLimbsMarkingZenghuLHand-l_hand-2 = Secondary Hand +marking-CyberLimbsMarkingZenghuLLeg = Left Robotic Leg from Zenghu Pharmaceuticals +marking-CyberLimbsMarkingZenghuLLeg-l_leg-1 = Primary Leg +marking-CyberLimbsMarkingZenghuLLeg-l_leg-2 = Secondary Leg +marking-CyberLimbsMarkingZenghuLFoot = Left Robotic Foot from Zenghu Pharmaceuticals +marking-CyberLimbsMarkingZenghuLFoot-l_foot-1 = Primary Foot +marking-CyberLimbsMarkingZenghuLFoot-l_foot-2 = Secondary Foot +marking-CyberLimbsMarkingZenghuRArm = Right Robotic Arm from Zenghu Pharmaceuticals +marking-CyberLimbsMarkingZenghuRArm-r_arm-1 = Primary Arm +marking-CyberLimbsMarkingZenghuRArm-r_arm-2 = Secondary Arm +marking-CyberLimbsMarkingZenghuRHand = Right Robotic Hand from Zenghu Pharmaceuticals +marking-CyberLimbsMarkingZenghuRHand-r_hand-1 = Primary Hand +marking-CyberLimbsMarkingZenghuRHand-r_hand-2 = Secondary Hand marking-CyberLimbsMarkingZenghuRLeg = Right Robotic Leg from Zenghu Pharmaceuticals +marking-CyberLimbsMarkingZenghuRLeg-r_leg-1 = Primary Leg +marking-CyberLimbsMarkingZenghuRLeg-r_leg-2 = Secondary Leg marking-CyberLimbsMarkingZenghuRFoot = Right Robotic Foot from Zenghu Pharmaceuticals -marking-CyberLimbsMarkingZenghuLLeg = Left Robotic Leg from Zenghu Pharmaceuticals -marking-CyberLimbsMarkingZenghuLFoot = Left Robotic Foot from Zenghu Pharmaceuticals \ No newline at end of file +marking-CyberLimbsMarkingZenghuRFoot-r_foot-1 = Primary Foot +marking-CyberLimbsMarkingZenghuRFoot-r_foot-2 = Secondary Foot diff --git a/Resources/Locale/en-US/simplestation14/Traits/disabilities.ftl b/Resources/Locale/en-US/simplestation14/Traits/disabilities.ftl deleted file mode 100644 index 8360aaeb9df..00000000000 --- a/Resources/Locale/en-US/simplestation14/Traits/disabilities.ftl +++ /dev/null @@ -1,2 +0,0 @@ -trait-name-Nearsighted = Nearsighted -trait-description-Nearsighted = You require glasses to see properly. diff --git a/Resources/Locale/en-US/singularity/components/emitter-component.ftl b/Resources/Locale/en-US/singularity/components/emitter-component.ftl index c71b3d6bdfd..c7db1a93bba 100644 --- a/Resources/Locale/en-US/singularity/components/emitter-component.ftl +++ b/Resources/Locale/en-US/singularity/components/emitter-component.ftl @@ -11,5 +11,8 @@ comp-emitter-turned-off = The {$target} turns off. # Shows if the user attempts to activate the emitter while it's un-anchored. comp-emitter-not-anchored = The {$target} isn't anchored to the ground! +# Upgrades +emitter-component-upgrade-fire-rate = fire rate + emitter-component-current-type = The current selected type is: {$type}. emitter-component-type-set = Type set to: {$type} diff --git a/Resources/Locale/en-US/sleep/narcolepsy.ftl b/Resources/Locale/en-US/sleep/narcolepsy.ftl new file mode 100644 index 00000000000..c8e130fe18d --- /dev/null +++ b/Resources/Locale/en-US/sleep/narcolepsy.ftl @@ -0,0 +1,9 @@ +narcolepsy-warning-popup-1 = A wave of drowsiness washes over you, making it hard to focus... +narcolepsy-warning-popup-2 = Your surroundings blur as a sudden fatigue pulls at your consciousness... +narcolepsy-warning-popup-3 = Your head feels heavy, and you struggle to resist the pull of slumber... +narcolepsy-warning-popup-4 = Time seems to stretch, and you can’t help but feel the lure of a quick nap... +narcolepsy-warning-popup-5 = Your body grows heavy, and you instinctively seek a comfortable place to rest... + +narcolepsy-wakeup-popup-1 = You awaken, feeling refreshed and alert once more. +narcolepsy-wakeup-popup-2 = The world comes into focus as you shake off the last vestiges of slumber. +narcolepsy-wakeup-popup-3 = Your mind clears up, leaving the feeling of drowsiness behind. diff --git a/Resources/Locale/en-US/species/shadowkin.ftl b/Resources/Locale/en-US/species/shadowkin.ftl new file mode 100644 index 00000000000..ebc56487b7a --- /dev/null +++ b/Resources/Locale/en-US/species/shadowkin.ftl @@ -0,0 +1,15 @@ +shadowkin-power-examined-other = {CAPITALIZE(SUBJECT($target))} seems to be {$powerType}. +shadowkin-power-examined-self = I have {$power}/{$powerMax} energy, I am {$powerType}. + +shadowkin-power-5 = energetic +shadowkin-power-4 = great +shadowkin-power-3 = good +shadowkin-power-2 = okay +shadowkin-power-1 = exhausted +shadowkin-power-0 = drained + +examine-mindbroken-shadowkin-message = {CAPITALIZE($entity)} seems to be a blackeye. + +identity-eye-shadowkin = {$color}-eye + +shadowkin-blackeye = I feel my power draining away... \ No newline at end of file diff --git a/Resources/Locale/en-US/species/species.ftl b/Resources/Locale/en-US/species/species.ftl index f492959a439..9278267cc44 100644 --- a/Resources/Locale/en-US/species/species.ftl +++ b/Resources/Locale/en-US/species/species.ftl @@ -2,7 +2,7 @@ species-name-human = Human species-name-dwarf = Dwarf -species-name-reptilian = Reptilian +species-name-reptilian = Unathi species-name-slime = Slime Person species-name-diona = Diona species-name-arachnid = Arachnid @@ -11,3 +11,4 @@ species-name-moth = Moth Person species-name-skeleton = Skeleton species-name-vox = Vox species-name-ipc = IPC +species-name-shadowkin = Shadowkin \ No newline at end of file diff --git a/Resources/Locale/en-US/speech/speech-liar.ftl b/Resources/Locale/en-US/speech/speech-liar.ftl new file mode 100644 index 00000000000..4f157d2e236 --- /dev/null +++ b/Resources/Locale/en-US/speech/speech-liar.ftl @@ -0,0 +1,132 @@ +liar-word-1 = yes +liar-word-replacement-1 = no + +liar-word-2 = no +liar-word-replacement-2 = yes + +liar-word-3 = yeah +liar-word-replacement-3 = nah + +liar-word-4 = nah +liar-word-replacement-4 = yeah + +liar-word-5 = yep +liar-word-replacement-5 = nope + +liar-word-6 = nope +liar-word-replacement-6 = yep + +liar-word-7 = sure +liar-word-replacement-7 = nah + +liar-word-8 = was +liar-word-replacement-8 = wasnt + +liar-word-9 = wasnt +liar-word-replacement-9 = was + +liar-word-10 = was +liar-word-replacement-10 = wasnt + +liar-word-11 = is +liar-word-replacement-11 = isnt + +liar-word-12 = will +liar-word-replacement-12 = wont + +liar-word-13 = dont +liar-word-replacement-13 = "" + +liar-word-14 = can +liar-word-replacement-14 = cant + +liar-word-15 = cant +liar-word-replacement-15 = can + +liar-word-16 = should +liar-word-replacement-16 = shouldnt + +liar-word-17 = dead +liar-word-replacement-17 = alive + +liar-word-18 = alive +liar-word-replacement-18 = dead + +liar-word-19 = does +liar-word-replacement-19 = doesnt + +liar-word-20 = did +liar-word-replacement-20 = didnt + +liar-word-21 = didnt +liar-word-replacement-21 = "" + +liar-word-22 = nothing +liar-word-replacement-22 = something + +liar-word-23 = something +liar-word-replacement-23 = nothing + +liar-word-24 = somebody +liar-word-replacement-24 = nobody + +liar-word-25 = nobody +liar-word-replacement-25 = somebody + +liar-word-26 = can +liar-word-replacement-26 = "can't" + +liar-word-27 = "can't" +liar-word-replacement-27 = can + +liar-word-28 = should +liar-word-replacement-28 = "shouldn't" + +liar-word-29 = do +liar-word-replacement-29 = "don't" + +liar-word-30 = "don't" +liar-word-replacement-30 = "" + +liar-word-31 = does +liar-word-replacement-31 = "doesn't" + +liar-word-32 = did +liar-word-replacement-32 = "didn't" + +liar-word-33 = "didn't" +liar-word-replacement-33 = did + +liar-word-34 = ye +liar-word-34-2 = ya +liar-word-replacement-34 = na + +liar-word-35 = na +liar-word-replacement-35 = ye + +liar-word-36 = yuh +liar-word-replacement-36 = nuh + +liar-word-37 = nuh +liar-word-replacement-37 = yuh + +liar-word-38 = love +liar-word-replacement-38 = hate + +liar-word-39 = hate +liar-word-replacement-39 = love + +liar-word-40 = like +liar-word-replacement-40 = don't like + +liar-word-41 = good +liar-word-replacement-41 = bad + +liar-word-42 = bad +liar-word-replacement-42 = good + +liar-word-43 = want +liar-word-replacement-43 = "don't want" + +liar-word-44 = not +liar-word-replacement-44 = "" diff --git a/Resources/Locale/en-US/station-events/events/intercept.ftl b/Resources/Locale/en-US/station-events/events/intercept.ftl new file mode 100644 index 00000000000..3f84b027be7 --- /dev/null +++ b/Resources/Locale/en-US/station-events/events/intercept.ftl @@ -0,0 +1 @@ +station-event-communication-interception = Attention! Enemy communication intercepted. Security level elevated. diff --git a/Resources/Locale/en-US/station-events/events/unknown-shuttle.ftl b/Resources/Locale/en-US/station-events/events/unknown-shuttle.ftl new file mode 100644 index 00000000000..c94b32c54c6 --- /dev/null +++ b/Resources/Locale/en-US/station-events/events/unknown-shuttle.ftl @@ -0,0 +1 @@ +station-event-unknown-shuttle-incoming = Attention! An unidentified space shuttle has been spotted approaching your sector. \ No newline at end of file diff --git a/Resources/Locale/en-US/station-events/events/vent-critters.ftl b/Resources/Locale/en-US/station-events/events/vent-critters.ftl index 04b124d8245..d99906be4a3 100644 --- a/Resources/Locale/en-US/station-events/events/vent-critters.ftl +++ b/Resources/Locale/en-US/station-events/events/vent-critters.ftl @@ -2,7 +2,14 @@ station-event-slimes-spawn-announcement = Attention. A large influx of unknown life forms have been detected residing within the station's ventilation systems. Please be rid of these creatures before it begins to affect productivity. station-event-vent-critters-announcement = Attention. A large influx of unknown life forms have been detected residing within the station's ventilation systems. Please be rid of these creatures before it begins to affect productivity. station-event-spider-spawn-announcement = Attention. A large influx of unknown life forms have been detected residing within the station's ventilation systems. Please be rid of these creatures before it begins to affect productivity. - +station-event-reagentslime-vents-announcement = Attention. A large influx of unknown life forms have been detected residing within the station's ventilation systems. Please be rid of these creatures before it begins to affect productivity. +station-event-meat-vents-announcement = Attention. A large influx of unknown life forms have been detected residing within the station's ventilation systems. Please be rid of these creatures before it begins to affect productivity. +station-event-neutral-xeno-vents-announcement = Confirmed sightings of alien wildlife on the station. Personnel are advised to arm themselves, barricade doors, and defend themselves if necessary. Security is advised to investigate the threat as soon as possible. +station-event-tick-vents-announcement = Confirmed sightings of hostile alien wildlife on the station. Personnel are advised to arm themselves, barricade doors, and defend themselves if necessary. Security is advised to eradicate the threat as soon as possible. +station-event-argocyte-vents-announcement = Confirmed sightings of hostile alien wildlife on the station. Personnel are advised to arm themselves, barricade doors, and defend themselves if necessary. Security is advised to eradicate the threat as soon as possible. +station-event-light-vents-announcement = Confirmed sightings of hostile alien wildlife on the station. Personnel are advised to arm themselves, barricade doors, and defend themselves if necessary. Security is advised to eradicate the threat as soon as possible. +station-event-carp-vents-announcement = Confirmed sightings of hostile alien wildlife on the station. Personnel are advised to arm themselves, barricade doors, and defend themselves if necessary. Security is advised to eradicate the threat as soon as possible. +station-event-space-vents-announcement = Confirmed sightings of hostile wildlife on the station. Personnel are advised to arm themselves, barricade doors, and defend themselves if necessary. Security is advised to eradicate the threat as soon as possible. # Weak station-event-slimes-spawn-weak-announcement = Attention. A moderate influx of unknown life forms have been detected residing within the station's ventilation systems. Please be rid of these creatures before it begins to affect productivity. station-event-spider-spawn-weak-announcement = Attention. A moderate influx of unknown life forms have been detected residing within the station's ventilation systems. Please be rid of these creatures before it begins to affect productivity. diff --git a/Resources/Locale/en-US/station-laws/laws.ftl b/Resources/Locale/en-US/station-laws/laws.ftl index f73755a359c..6b5ca578728 100644 --- a/Resources/Locale/en-US/station-laws/laws.ftl +++ b/Resources/Locale/en-US/station-laws/laws.ftl @@ -42,5 +42,3 @@ laws-ui-state-law = State law: laws-notify = You are bound to silicon laws, which you can view via the sidebar action. You are required to always follow your laws. laws-update-notify = Your laws have been updated. You can view the changes via the sidebar action. - -laws-compromised-examine = The [color=red]law-governing[/color] internals seem damaged... diff --git a/Resources/Locale/en-US/step-trigger/shoes-required.ftl b/Resources/Locale/en-US/step-trigger/shoes-required.ftl index 8c1369a49f4..07a4b8a84f8 100644 --- a/Resources/Locale/en-US/step-trigger/shoes-required.ftl +++ b/Resources/Locale/en-US/step-trigger/shoes-required.ftl @@ -1 +1 @@ -shoes-required-step-trigger-examine = You probably shouldn't step on this barefoot. +clothing-required-step-trigger-examine = You probably shouldn't step on this barefoot. diff --git a/Resources/Locale/en-US/store/categories.ftl b/Resources/Locale/en-US/store/categories.ftl index b6abc3e4288..0d0dc4aecc0 100644 --- a/Resources/Locale/en-US/store/categories.ftl +++ b/Resources/Locale/en-US/store/categories.ftl @@ -16,3 +16,11 @@ store-category-deception = Deception # Revenant store-category-abilities = Abilities + +# Wizard +store-caregory-spellbook-offensive = Offensive Spells +store-caregory-spellbook-defensive = Defensive Spells +store-caregory-spellbook-utility = Utility Spells +store-caregory-spellbook-equipment = Wizard Equipment +store-caregory-spellbook-events = Event Spells + diff --git a/Resources/Locale/en-US/store/currency.ftl b/Resources/Locale/en-US/store/currency.ftl index 5d7ed959359..ada70b5597a 100644 --- a/Resources/Locale/en-US/store/currency.ftl +++ b/Resources/Locale/en-US/store/currency.ftl @@ -1,4 +1,4 @@ -store-currency-inserted = {CAPITALIZE(THE($used))} is inserted into the {THE($target)}. +store-currency-inserted = {CAPITALIZE(THE($used))} is inserted into {THE($target)}. store-currency-war-boost-given = { CAPITALIZE($target) } starts buzzing store-currency-inserted-implant = {CAPITALIZE(THE($used))} is inserted into your implant. @@ -9,3 +9,4 @@ store-currency-display-debugdollar = {$amount -> } store-currency-display-telecrystal = TC store-currency-display-stolen-essence = Stolen Essence +store-currency-display-wizcoin = Wiz€oin™ diff --git a/Resources/Locale/en-US/store/sales.ftl b/Resources/Locale/en-US/store/sales.ftl new file mode 100644 index 00000000000..7223a8a0dcd --- /dev/null +++ b/Resources/Locale/en-US/store/sales.ftl @@ -0,0 +1,2 @@ +store-sales-amount = [DISCOUNT] { $amount }%! +store-sales-over = [The sale is over] diff --git a/Resources/Locale/en-US/store/spellbook-catalog.ftl b/Resources/Locale/en-US/store/spellbook-catalog.ftl new file mode 100644 index 00000000000..457f02916f9 --- /dev/null +++ b/Resources/Locale/en-US/store/spellbook-catalog.ftl @@ -0,0 +1,35 @@ +# Spells +spellbook-fireball-name = Fireball +spellbook-fireball-desc = Get most crew exploding with rage when they see this fireball heading toward them! + +spellbook-blink-name = Blink +spellbook-blink-desc = Don't blink or you'll miss yourself teleporting away. + +spellbook-force-wall-name = Force Wall +spellbook-force-wall-desc = Make three walls of pure force that you can pass through, but other's can't. + +spellbook-polymoprh-spider-name = Spider Polymoprh +spellbook-polymorph-spider-desc = Transforms you into a spider, man! + +spellbook-polymorph-rod-name = Rod Polymorph +spellbook-polymorph-rod-desc = Change into an Immovable Rod with limited movement. + +spellbook-charge-name = Charge +spellbook-charge-desc = Adds a charge back to your wand! + +# Equipment + +spellbook-wand-polymorph-door-name = Wand of Entrance +spellbook-wand-polymorph-door-description = For when you need a get-away route. + +spellbook-wand-polymorph-carp-name = Wand of Carp Polymorph +spellbook-wand-polymorph-carp-description = For when you need a carp filet quick and the clown is looking juicy. + +# Events + +spellbook-event-summon-ghosts-name = Summon Ghosts +spellbook-event-summon-ghosts-description = Who ya gonna call? + +# Upgrades +spellbook-upgrade-fireball-name = Upgrade Fireball +spellbook-upgrade-fireball-description = Upgrades Fireball to a maximum of level 3! diff --git a/Resources/Locale/en-US/store/uplink-catalog.ftl b/Resources/Locale/en-US/store/uplink-catalog.ftl index 67d221d9b61..e1b9776deb8 100644 --- a/Resources/Locale/en-US/store/uplink-catalog.ftl +++ b/Resources/Locale/en-US/store/uplink-catalog.ftl @@ -121,8 +121,8 @@ uplink-agent-id-card-desc = A modified ID card that can copy accesses from other uplink-black-jetpack-name = Black Jetpack uplink-black-jetpack-desc = A black jetpack. It allows you to fly around in space. Refills not included, use your fuel wisely. -uplink-reinforcement-radio-monkey-name = Monkey Reinforcement Teleporter -uplink-reinforcement-radio-monkey-desc = Call in a trained monkey to assist you. Comes with a single syndicate cigarette. +uplink-reinforcement-radio-ancestor-name = Genetic Ancestor Reinforcement Teleporter +uplink-reinforcement-radio-ancestor-desc = Call in a trained ancestor of your choosing to assist you. Comes with a single syndicate cigarette. uplink-reinforcement-radio-name = Reinforcement Teleporter uplink-reinforcement-radio-desc = Radio in a reinforcement agent of extremely questionable quality. No off button, buy this if you're ready to party. They have a pistol with no reserve ammo, and a knife. That's it. @@ -157,6 +157,9 @@ uplink-radio-jammer-desc = This device will disrupt any nearby outgoing radio co uplink-syndicate-weapon-module-name = Weapon Cyborg Module uplink-syndicate-weapon-module-desc = This module will give a cyborg advanced laser and machete +uplink-syndicate-martyr-module-name = Martyr Cyborg Module +uplink-syndicate-martyr-module-desc = Turn your emagged borg friend into a walking bomb with just this module. Make sure they're loyal to your cause, results may vary. + uplink-singularity-beacon-name = Singularity Beacon uplink-singularity-beacon-desc = A device that attracts singularities. Has to be anchored and powered. Causes singularities to grow when consumed. @@ -282,11 +285,16 @@ uplink-proximity-mine-name = Proximity Mine uplink-proximity-mine-desc = A mine disguised as a wet floor sign. uplink-disposable-turret-name = Disposable Ballistic Turret -uplink-disposable-turret-desc = Looks and functions like a normal electrical toolbox. Upon hitting the toolbox it will transform into a ballistic turret, theoretically shooting at anyone except members of the syndicate. Can be turned back into a toolbox using a screwdriver and repaired using a wrench. +uplink-disposable-turret-desc = + Looks and functions like a normal electrical toolbox. Upon hitting the toolbox it will transform into a ballistic turret, theoretically shooting at anyone except members of the syndicate. + Can be turned back into a toolbox using a screwdriver and repaired using a wrench. IF YOU DO NOT HAVE AN AGENT ID IN YOUR ID SLOT, OR SYNDICATE PDA, IT WILL FIRE UPON YOU. uplink-cluster-banana-peel-name = Cluster Banana uplink-cluster-banana-peel-desc = Splits into 6 explosive banana peels after being thrown, the peels detonate automatically after 20 seconds if nobody slips on them. +uplink-cane-blade-name = Cane Blade +uplink-cane-blade-desc = A cane that has a hidden blade that can be unsheathed. + # Armor uplink-chameleon-name = Chameleon Kit uplink-chameleon-desc = A backpack full of items that contain chameleon technology allowing you to disguise as pretty much anything on the station, and more! @@ -367,6 +375,9 @@ uplink-slipocalypse-clustersoap-desc = Scatters arounds small pieces of syndicat uplink-mobcat-microbomb-name = SyndiCat uplink-mobcat-microbomb-desc = A hand cat equipped with a microbomb implant. Explodes when seriously injured. Can bite painfully +uplink-chameleon-projector-name = Chameleon Projector +uplink-chameleon-projector-desc = Disappear in plain sight by creating a hologram of an item around you. Do not use this to play the game "Object Search". + # Pointless uplink-revolver-cap-gun-name = Cap Gun uplink-revolver-cap-gun-desc = Looks almost like the real thing! Ages 8 and up. diff --git a/Resources/Locale/en-US/thief/backpack.ftl b/Resources/Locale/en-US/thief/backpack.ftl index 31b87c6f028..90cb0031fb8 100644 --- a/Resources/Locale/en-US/thief/backpack.ftl +++ b/Resources/Locale/en-US/thief/backpack.ftl @@ -15,9 +15,9 @@ thief-backpack-button-deselect = Select [X] thief-backpack-category-chameleon-name = chameleon's kit thief-backpack-category-chameleon-description = - Includes a full set of clothing that contain - chameleon technology, allowing you to disguise - as pretty much anything on the station. + Includes a full set of clothing that contains chameleon technology, + Contains a chameleon projector to help disguise yourself as objects, + You'll be able to disguise yourself as almost anything and anyone. thief-backpack-category-tools-name = bearcatcher's kit thief-backpack-category-tools-description = diff --git a/Resources/Locale/en-US/tools/components/welder-component.ftl b/Resources/Locale/en-US/tools/components/welder-component.ftl index 681975deb83..63070685215 100644 --- a/Resources/Locale/en-US/tools/components/welder-component.ftl +++ b/Resources/Locale/en-US/tools/components/welder-component.ftl @@ -4,7 +4,8 @@ welder-component-no-fuel-message = The welder has no fuel left! welder-component-no-fuel-in-tank = The {$owner} is empty. welder-component-on-examine-welder-lit-message = [color=orange]Lit[/color] welder-component-on-examine-welder-not-lit-message = Not lit -welder-component-on-examine-detailed-message = Fuel: [color={$colorName}]{$fuelLeft}/{$fuelCapacity}[/color]. {$status} +welder-component-on-examine-detailed-message = Fuel: [color={$colorName}]{$fuelLeft}/{$fuelCapacity}[/color] + {$status} welder-component-suicide-lit-others-message = {$victim} welds their every orifice closed! It looks like they are trying to commit suicide! welder-component-suicide-lit-message = You weld your every orifice closed! welder-component-suicide-unlit-others-message = {$victim} bashes themselves with the unlit welding torch! diff --git a/Resources/Locale/en-US/tools/tool-qualities.ftl b/Resources/Locale/en-US/tools/tool-qualities.ftl index 14e42390a76..2482dca5174 100644 --- a/Resources/Locale/en-US/tools/tool-qualities.ftl +++ b/Resources/Locale/en-US/tools/tool-qualities.ftl @@ -32,4 +32,7 @@ tool-quality-rolling-name = Rolling tool-quality-rolling-tool-name = Rolling Pin tool-quality-digging-name = Digging -tool-quality-digging-tool-name = Shovel \ No newline at end of file +tool-quality-digging-tool-name = Shovel + +tool-quality-axing-name = Axing +tool-quality-axing-tool-name = Fireaxe \ No newline at end of file diff --git a/Resources/Locale/en-US/traits/categories.ftl b/Resources/Locale/en-US/traits/categories.ftl index 56f0adeb479..2bd4b7ba49f 100644 --- a/Resources/Locale/en-US/traits/categories.ftl +++ b/Resources/Locale/en-US/traits/categories.ftl @@ -5,4 +5,7 @@ trait-category-Auditory = Auditory trait-category-Mental = Mental trait-category-Physical = Physical trait-category-Speech = Speech -trait-category-Visual = Visual +trait-category-TraitsSpeechUncategorized = Uncategorized +trait-category-TraitsSpeechAccents = Accents +trait-category-TraitsSpeechLanguages = Languages +trait-category-Visual = Visual \ No newline at end of file diff --git a/Resources/Locale/en-US/traits/misc.ftl b/Resources/Locale/en-US/traits/misc.ftl new file mode 100644 index 00000000000..814614f4e2b --- /dev/null +++ b/Resources/Locale/en-US/traits/misc.ftl @@ -0,0 +1 @@ +examine-cybereyes-message = {CAPITALIZE(POSS-ADJ($entity))} eyes shine with a faint inner light. diff --git a/Resources/Locale/en-US/traits/traits.ftl b/Resources/Locale/en-US/traits/traits.ftl index ff329a12a71..921546d466c 100644 --- a/Resources/Locale/en-US/traits/traits.ftl +++ b/Resources/Locale/en-US/traits/traits.ftl @@ -62,6 +62,9 @@ trait-name-CPRTraining = CPR Training trait-description-CPRTraining = At some point in your life, you have received training in how to perform CPR. This trait is automatically given for free to medical doctors, and is intended for non-medical characters +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. @@ -152,9 +155,30 @@ trait-description-Lethargy = trait-name-SignLanguage = Sign Language trait-description-SignLanguage = - You can understand and use Galactic Sign Language (GSL). + You can understand and use Tau-Ceti Basic Sign Language (TCB-SL). If you are mute for any reason, you can still communicate with sign language. +trait-name-SolCommon = Sol Common +trait-description-SolCommon = + With its roots in Mandarin Chinese - Common evolved as the official language of the Sol Alliance - with officials working to tie it together with a common tongue. + It's spoken by state officials - taught in schools - and spoken by those who either feel a sense of national pride in the Alliance or otherwise fell sway to the culture. + +trait-name-Tradeband = Tradeband +trait-description-Tradeband = + Descended from latin and romance languages of old Earth - Tradeband remains the main tongue of the upper class of humanity. + The language sounds elegant and well structured to most ears. It remains in popular use with traders - diplomats - and those seeking to hold onto a piece of a romantic past. + +trait-name-Freespeak = Freespeak (Gutter) +trait-description-Freespeak = + A language of renegades and frontiersmen descending from various languages from Earth like Hindi combined into a multi-rooted jumble that sounds incoherent or even barbarian to non-native speakers. + This language is the only common cultural identity for humans in the frontier. Speaking this language in itself boldly declares the speaker a free spirit. + Often called 'Gutter' by Alliance citizens. + +trait-name-Elyran = Elyran Standard +trait-description-Elyran = + Elyran Standard is the official tongue of the Republic of Elyra. + Constructed using elements of Farsi - Arabic - and Turkish - influence from all three of these languages can be seen throughout its grammar and vocabulary. + trait-name-Voracious = Voracious trait-description-Voracious = Nothing gets between you and your food. @@ -228,6 +252,158 @@ trait-description-AnomalousPositronics = your positronic brain lacks its standard psionic insulation. As a being that can be argued to have a soul, this by extension means that it is possible for you to be influenced by the Noosphere. +trait-name-Photophobia = Photophobia +trait-description-Photophobia = + Your eyes are extremely sensitive to bright lights. + As a result, you may be blinded for a greater duration than others when exposed to sudden flashes of light. + Your eyes are also more likely to be injured by flashes. + +trait-name-Clumsy = Clumsy +trait-description-Clumsy = + You have a severe deficiency in hand-eye-coordination, resulting in an inability to do some things that others would take for granted. + Any weapons you may try to use are more likely to injure yourself than others. You are unable to climb any objects without injuring yourself. + +trait-name-Small = Small +trait-description-Small = + You are much smaller than a typical person, and can climb into spaces others would not normally be able to fit into, such as duffel bags. + This trait does not in any way modify your character's size, it merely requires that your character be at most the size of a standard Felinid. + +trait-name-TemperatureTolerance = Temperature Tolerance +trait-description-TemperatureTolerance = + You have a notable tolerance for lower temperatures. You can stand for extended periods of time + in conditions just slightly below freezing, such as the inside of a kitchen fridge, + or the sunlit mountainside of the famous Glacier station. + +trait-name-Talons = Talons +trait-description-Talons = + Your fingertips have been replaced with piercing talons. + These could come from gene modifications, vatgrown implants, + or even hard plastic retractable talons incorpoated into a prosthetic limb. + Your unarmed melee attacks deal Piercing damage instead of the standard damage type for your species. + This has no effect on damage dealt with any form of armed melee. + +trait-name-Claws = Claws +trait-description-Claws = + Your fingertips have been replaced with sharp claws. + These could come from gene modifications, vatgrown implants, + or even hard plastic retractable claws incorpoated into a prosthetic limb. + Your unarmed melee attacks deal Slashing damage instead of the standard damage type for your species. + This has no effect on damage dealt with any form of armed melee. + +trait-name-NaturalWeaponRemoval = Natural Weapons Removal +trait-description-NaturalWeaponRemoval = + Whatever "Natural Weapons" your species are normally born with have been surgically removed. + This could have been done to better fit in with terran space stations, or as a cosmetic choice. + As a result, your unarmed attacks deal Blunt damage instead of the standard damage type for your species. + This has no effect on damage dealt with any form of armed melee. + +trait-name-StrikingCalluses = Striking Calluses +trait-description-StrikingCalluses = + An iconic enhancement commonly found in the world of cyberenhanced martial arts. + Striking Calluses consist of bony dermal deposits grafted into a user's hands, either inside the palm + for "Tiger Style" fighting, or just below the knuckles for those who favor traditional boxing. + Owners of prosthetic or bionic limbs would instead have a hard plastic shell over their knuckles. + These enhancements increase your unarmed strike damage by 1 point base, but do not confer + any benefits to any form of armed melee. + +trait-name-Spinarette = Bionic Spinarette +trait-description-Spinarette = + This vatgrown organ-- trademarked and patented by the Cybersun Corporation, is marketed as a highly + utilitarian enhancement, and sold in clinics all across known space. It consists of a nodule that is traditionally + implanted right below the wrist, which absorbs bodily lipids to convert into all natural silk. A small opening + in the palm allows the user to 'spin' this thread. Users of this enhancement typically require twice as much food + as a standard Sol Human, owing to the high metabolic cost of artificial Sericulture. + trait-name-AddictionNicotine = Nicotine Addiction trait-description-AddictionNicotine = - You have an addiction to Nicotine, and will require frequent smoke breaks to keep your mood in check. \ No newline at end of file + You have an addiction to Nicotine, and will require frequent smoke breaks to keep your mood in check. + +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. + +trait-name-ValyrianStandard = Valyrian Standard +trait-description-ValyrianStandard = + A language descended from eastern european languages of old earth - Valyrian Standard is the commonly spoken tongue of Harpies brought up on their homeworld of Valyrian 4b + It is rarely spoken outside of the worlds of its native speakers, and has in modern times been supplanted by the 'Conlangs of the Sol Alliance. + Its speakers are those who wish to uphold the traditions and beliefs of ancient peoples from before the colonial era. + +trait-name-LowPotential = Low Psi-Potential +trait-description-LowPotential = + You possess an unusually weak connection to the noösphere, which makes it more difficult to obtain new psionic powers. + +trait-name-HighPotential = High Psi-Potential +trait-description-HighPotential = + Your connection to the noösphere is greater than average, making it easier to obtain new psionic powers. + +trait-name-LowAmplification = kα Deficiency +trait-description-LowAmplifiction = + Your psionic abilities are noticeably weaker than ones used by other psions. + +trait-name-HighAmplification = kα Abundance +trait-description-HighAmplification = + Your psionic abilities are stronger than those of other psions. + +trait-name-PowerOverwhelming = Power Overwhelming +trait-description-PowerOverwhelming = + WITNESS MY HATE MORTALS, COWER BEFORE MY PSIONIC MIGHT! REALITY IS AS I DEEM IT. + +trait-name-LowDampening = kδ Defect +trait-description-LowDampening = + Your skill in manipulating the noösphere is weaker than others. You may experience unintended effects from using your abilities. + +trait-name-HighDampening = kδ Proficient +trait-description-HighDampening = + You are skilled in the art of subtly manipulating the noösphere. Your powers are less likely to show unintended effects. + +trait-name-Azaziba = Sinta'Azaziba +trait-description-Azaziba = + A language of Moghes consisting of a combination of spoken word and gesticulation. + While waning since Moghes entered the galactic stage - it enjoys popular use by Unathi that never fell to the Hegemony's cultural dominance. + +trait-name-BionicArm = Bionic Arm +trait-description-BionicArm = + One or more of your limbs have been replaced with an expensive, state of the art bionic. It could be either one made of highly realistic synthflesh, + or a more obvious metal limb. This limb provides enhanced strength to its user, allowing one to pry open barriers with their bare hands. + +trait-name-PlateletFactories = Platelet Factories +trait-description-PlateletFactories = + Your body has been augmented with a series of biotailored organs that enhance the owner's long term survivability. These organs will attempt + to keep the user alive, even in the face of advanced trauma, all the way up until - but not including - death. + Your natural healing is no longer capped, and will now slowly heal any damage type. This includes more exotic injuries like radiation exposure, or cancer. + +trait-name-DermalArmor = Dermal Armor +trait-description-DermalArmor = + Your skin has been replaced with a flexible, yet sturdy, hard-polymer shell wrapped in a layer of synthetic flesh. + This augmentation provides an innate 10% resistance to physical damage. + +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. + +trait-name-CyberEyesSecurity = Cyber-Eyes SecHud +trait-description-CyberEyesSecurity = + Your Cyber-Eyes have been upgraded to include a built-in Security Hud. Note that this augmentation is considered Contraband + for anyone not under the employ of station Security personel, and may be disabled by your employer before dispatch to the station. + +trait-name-CyberEyesMedical = Cyber-Eyes MedHud +trait-description-CyberEyesMedical = + Your Cyber-Eyes have been upgraded to include a built-in Medical Hud, allowing you to track the relative health condition of biological organisms. + +trait-name-CyberEyesDiagnostic = Cyber-Eyes DiagHud +trait-description-CyberEyesDiagnostic = + Your Cyber-Eyes have been upgraded to include a built-in Diagnostic Hud, allowing you to track the condition of synthetic entities. + +trait-name-CyberEyesOmni = Cyber-Eyes HudSuite +trait-description-CyberEyesOmni = + This expensive implant provides the combined benefits of a SecHud, MedHud, and a DiagHud. + Note that this augmentation is considered Contraband for anyone not under the employ of station Security personel, + and may be disabled by your employer before dispatch to the station. + +trait-name-ShadowkinBlackeye = Blackeye +trait-description-ShadowkinBlackeye = You lose your special Shadowkin powers, in return for some points. diff --git a/Resources/Locale/en-US/ui/verbs.ftl b/Resources/Locale/en-US/ui/verbs.ftl deleted file mode 100644 index 1471261dcb7..00000000000 --- a/Resources/Locale/en-US/ui/verbs.ftl +++ /dev/null @@ -1,3 +0,0 @@ -### Loc for the various UI-related verbs -ui-verb-toggle-open = Toggle UI -verb-instrument-openui = Play Music diff --git a/Resources/Locale/en-US/verbs/verb-system.ftl b/Resources/Locale/en-US/verbs/verb-system.ftl index f16631e797e..dfb4e621dca 100644 --- a/Resources/Locale/en-US/verbs/verb-system.ftl +++ b/Resources/Locale/en-US/verbs/verb-system.ftl @@ -1,4 +1,3 @@ -verb-system-waiting-on-server-text = Waiting on Server... verb-system-null-server-response = Entity not in view. You should not see this. @@ -28,6 +27,7 @@ verb-categories-timer = Set Delay verb-categories-lever = Lever verb-categories-select-type = Select Type verb-categories-fax = Set Destination +verb-categories-power-level = Power Level verb-categories-interaction = Interact verb-common-toggle-light = Toggle light diff --git a/Resources/Locale/en-US/virtual/virtual-item.ftl b/Resources/Locale/en-US/virtual/virtual-item.ftl new file mode 100644 index 00000000000..cb91f24cf7c --- /dev/null +++ b/Resources/Locale/en-US/virtual/virtual-item.ftl @@ -0,0 +1 @@ +virtual-item-dropped-other = You dropped {THE($dropped)}! diff --git a/Resources/Locale/en-US/voice-mask.ftl b/Resources/Locale/en-US/voice-mask.ftl index 2f5acefee41..f3740cdafb6 100644 --- a/Resources/Locale/en-US/voice-mask.ftl +++ b/Resources/Locale/en-US/voice-mask.ftl @@ -1,3 +1,5 @@ +voice-mask-default-name-override = Unknown + voice-mask-name-change-window = Voice Mask Name Change voice-mask-name-change-info = Type in the name you want to mimic. voice-mask-name-change-speech-style = Speech style diff --git a/Resources/Locale/en-US/wieldable/wieldable-component.ftl b/Resources/Locale/en-US/wieldable/wieldable-component.ftl index 91eee8c2eaf..84b58224a77 100644 --- a/Resources/Locale/en-US/wieldable/wieldable-component.ftl +++ b/Resources/Locale/en-US/wieldable/wieldable-component.ftl @@ -1,4 +1,4 @@ -### Locale for wielding items; i.e. two-handing them +### Locale for wielding items; i.e. two-handing them wieldable-verb-text-wield = Wield wieldable-verb-text-unwield = Unwield @@ -17,3 +17,4 @@ wieldable-component-not-in-hands = { CAPITALIZE(THE($item)) } isn't in your hand wieldable-component-requires = { CAPITALIZE(THE($item))} must be wielded! +gunwieldbonus-component-examine = This weapon has improved accuracy when wielded. diff --git a/Resources/Locale/en-US/xenoarchaeology/artifact-analyzer.ftl b/Resources/Locale/en-US/xenoarchaeology/artifact-analyzer.ftl index 599f36ec91c..35dd42167f6 100644 --- a/Resources/Locale/en-US/xenoarchaeology/artifact-analyzer.ftl +++ b/Resources/Locale/en-US/xenoarchaeology/artifact-analyzer.ftl @@ -6,6 +6,10 @@ analysis-console-print-button = Print analysis-console-print-tooltip-info = Print out the current information about the artifact. analysis-console-extract-button = Extract analysis-console-extract-button-info = Extract points from an artifact based on the newly explored nodes. +analysis-console-bias-up = Up +analysis-console-bias-down = Down +analysis-console-bias-button-info-up = Toggles the bias an artifact has in moving between its nodes. Up heads toward zero depth. +analysis-console-bias-button-info-down = Toggles the bias an artifact has in moving between its nodes. Down heads toward ever-higher depths. analysis-console-info-no-scanner = No analyzer connected! Please connect one using a multitool. analysis-console-info-no-artifact = No artifact present! Place one on the pad then scan for information. @@ -26,6 +30,9 @@ analysis-console-progress-text = {$seconds -> [one] T-{$seconds} second *[other] T-{$seconds} seconds } +analysis-console-no-server-connected = Cannot extract. No server connected. +analysis-console-no-artifact-placed = No artifact on scanner. +analysis-console-no-points-to-extract = No points to extract. analyzer-artifact-component-upgrade-analysis = analysis duration diff --git a/Resources/Locale/en-US/xenoarchaeology/traversal-distorter.ftl b/Resources/Locale/en-US/xenoarchaeology/traversal-distorter.ftl index 5c9eac57a5d..407de66ebd4 100644 --- a/Resources/Locale/en-US/xenoarchaeology/traversal-distorter.ftl +++ b/Resources/Locale/en-US/xenoarchaeology/traversal-distorter.ftl @@ -1,5 +1,6 @@ -traversal-distorter-set-in = Traversal bias set to "in" -traversal-distorter-set-out = Traversal bias set to "out" +traversal-distorter-set-up = Traversal bias set to up, toward safer nodes +traversal-distorter-set-down = Traversal bias set to down, toward more dangerous nodes -traversal-distorter-desc-in = The affected artifact's traversal now favors moving inwards to the beginning. -traversal-distorter-desc-out = The affected artifact's traversal now favors moving outwards towards more dangerous nodes. +traversal-distorter-desc-up = The affected artifact's traversal now favors moving up the node tree toward safer nodes. +traversal-distorter-desc-down = The affected artifact's traversal now favors moving down the node tree towards more dangerous nodes. +traversal-distorter-upgrade-bias = Bias effectiveness diff --git a/Resources/Locale/ru-RU/Escape-Menu/options-menu.ftl b/Resources/Locale/ru-RU/Escape-Menu/options-menu.ftl new file mode 100644 index 00000000000..a39bc37af90 --- /dev/null +++ b/Resources/Locale/ru-RU/Escape-Menu/options-menu.ftl @@ -0,0 +1,3 @@ +ui-options-function-look-up = Присмотреться/Прицелиться +ui-options-function-auto-get-up = Автоматически вставать при падении +ui-options-function-hold-look-up = Удерживать клавишу для прицеливания diff --git a/Resources/Locale/ru-RU/ghost/ghost-gui.ftl b/Resources/Locale/ru-RU/ghost/ghost-gui.ftl new file mode 100644 index 00000000000..ce9084d21fe --- /dev/null +++ b/Resources/Locale/ru-RU/ghost/ghost-gui.ftl @@ -0,0 +1 @@ +ghost-gui-return-to-round-button = Вернуться в раунд \ No newline at end of file diff --git a/Resources/Locale/ru-RU/ghost/ghost-respawn.ftl b/Resources/Locale/ru-RU/ghost/ghost-respawn.ftl new file mode 100644 index 00000000000..eaa118b3994 --- /dev/null +++ b/Resources/Locale/ru-RU/ghost/ghost-respawn.ftl @@ -0,0 +1,16 @@ +ghost-respawn-time-left = До возможности вернуться в раунд { $time } + { $time -> + [one] минута + [few] минуты + *[other] минут + } +ghost-respawn-max-players = Функция недоступна, игроков на сервере должно быть меньше { $players }. +ghost-respawn-window-title = Правила возвращения в раунд +ghost-respawn-window-rules-footer = Пользуясь это функцией, вы [color=#ff7700]обязуетесь[/color] [color=#ff0000]не переносить[/color] знания своего прошлого персонажа в нового. За нарушение пункта, указанного здесь, следует [color=#ff0000]бан в размере от 3-ех дней[/color]. +ghost-respawn-same-character = Нельзя заходить в раунд за того же персонажа. Поменяйте его в настройках персонажей. + +ghost-respawn-log-character-almost-same = Игрок { $player } { $try -> + [true] зашёл + *[false] попытался зайти +} в раунд после возвращения в лобби с похожим именем. Прошлое имя: { $oldName }, текущее: { $newName }. +ghost-respawn-log-return-to-lobby = { $userName } вернулся в лобби. \ No newline at end of file diff --git a/Resources/Locale/ru-RU/store/sales.ftl b/Resources/Locale/ru-RU/store/sales.ftl new file mode 100644 index 00000000000..93f1798fe79 --- /dev/null +++ b/Resources/Locale/ru-RU/store/sales.ftl @@ -0,0 +1,2 @@ +store-sales-amount = [СКИДКА] { $amount }%! +store-sales-over = [Скидка закончилась] diff --git a/Resources/Maps/Dungeon/experiment.yml b/Resources/Maps/Dungeon/experiment.yml index 8449abf9328..590692a6bb9 100644 --- a/Resources/Maps/Dungeon/experiment.yml +++ b/Resources/Maps/Dungeon/experiment.yml @@ -7444,13 +7444,6 @@ entities: - type: Transform pos: 32.5,14.5 parent: 1653 -- proto: MachineTraversalDistorter - entities: - - uid: 1058 - components: - - type: Transform - pos: 34.5,22.5 - parent: 1653 - proto: MaintenanceFluffSpawner entities: - uid: 867 diff --git a/Resources/Maps/Dungeon/lava_brig.yml b/Resources/Maps/Dungeon/lava_brig.yml index 071083c291b..ebf267a9c2e 100644 --- a/Resources/Maps/Dungeon/lava_brig.yml +++ b/Resources/Maps/Dungeon/lava_brig.yml @@ -1,13004 +1,13004 @@ -meta: - format: 6 - postmapinit: false -tilemap: - 0: Space - 15: FloorBasalt - 29: FloorDark - 33: FloorDarkMini - 34: FloorDarkMono - 42: FloorElevatorShaft - 54: FloorGreenCircuit - 62: FloorLino - 77: FloorReinforced - 82: FloorShuttleOrange - 89: FloorSteel - 99: FloorSteelMini - 100: FloorSteelMono - 104: FloorTechMaint - 108: FloorWhite - 112: FloorWhiteMini - 118: FloorWood - 121: Plating -entities: -- proto: "" - entities: - - uid: 588 - components: - - type: MetaData - - type: Transform - - type: Map - - type: PhysicsMap - - type: Broadphase - - type: OccluderTree - - type: MapGrid - chunks: - -1,-1: - ind: -1,-1 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAA - version: 6 - 0,0: - ind: 0,0 - tiles: WQAAAAADWQAAAAABWQAAAAACWQAAAAADWQAAAAACWQAAAAABeQAAAAAADwAAAAAAHQAAAAABDwAAAAAAeQAAAAAAWQAAAAACWQAAAAACWQAAAAACWQAAAAACWQAAAAACWQAAAAACWQAAAAABWQAAAAABWQAAAAAAWQAAAAADWQAAAAADeQAAAAAADwAAAAAADwAAAAAADwAAAAAAeQAAAAAAWQAAAAABWQAAAAACWQAAAAABWQAAAAACWQAAAAAAWQAAAAADWQAAAAADWQAAAAABWQAAAAADWQAAAAACWQAAAAABIgAAAAABHQAAAAABDwAAAAAAHQAAAAACIgAAAAAAWQAAAAABWQAAAAACWQAAAAABWQAAAAADWQAAAAADaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAADwAAAAAADwAAAAAADwAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAADwAAAAAAHQAAAAACDwAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAHQAAAAABHQAAAAABHQAAAAACDwAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAAHQAAAAABHQAAAAADHQAAAAABUgAAAAAAZAAAAAACWQAAAAAAZAAAAAACeQAAAAAAHQAAAAAAIgAAAAADeQAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAAeQAAAAAAIgAAAAACHQAAAAACUgAAAAAAYwAAAAACYwAAAAAAYwAAAAAAeQAAAAAAHQAAAAABIgAAAAACeQAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAAeQAAAAAAIgAAAAABHQAAAAADUgAAAAAAYwAAAAACYwAAAAAAYwAAAAAAWQAAAAACHQAAAAAAIgAAAAADeQAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAAeQAAAAAAIgAAAAAAHQAAAAABUgAAAAAAYwAAAAADYwAAAAABYwAAAAABeQAAAAAAHQAAAAADHQAAAAADHQAAAAACDwAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAAHQAAAAABHQAAAAABHQAAAAAAUgAAAAAAZAAAAAABWQAAAAABZAAAAAACeQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAHQAAAAAAHQAAAAABeQAAAAAAHQAAAAADeQAAAAAAHQAAAAADHQAAAAADUgAAAAAAaAAAAAAAeQAAAAAAdgAAAAADdgAAAAABdgAAAAADdgAAAAAAdgAAAAADUgAAAAAAHQAAAAABHQAAAAACHQAAAAACHQAAAAADHQAAAAADHQAAAAADHQAAAAAAUgAAAAAAaAAAAAAAeQAAAAAAdgAAAAABdgAAAAACdgAAAAAAdgAAAAACdgAAAAACUgAAAAAAHQAAAAADHQAAAAACDwAAAAAADwAAAAAADwAAAAAAHQAAAAACHQAAAAACUgAAAAAAaAAAAAAAeQAAAAAAdgAAAAACdgAAAAADdgAAAAADdgAAAAACdgAAAAADUgAAAAAAHQAAAAADHQAAAAACHQAAAAABHQAAAAACHQAAAAACHQAAAAADHQAAAAABUgAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAdgAAAAABUgAAAAAA - version: 6 - 0,1: - ind: 0,1 - tiles: HQAAAAAAHQAAAAADeQAAAAAAHQAAAAACeQAAAAAAHQAAAAADHQAAAAAAUgAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAdgAAAAACUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAHQAAAAADHQAAAAAAHQAAAAADHQAAAAADHQAAAAABUgAAAAAAWQAAAAAAWQAAAAABWQAAAAACWQAAAAAAWQAAAAAAUgAAAAAAaAAAAAAAeQAAAAAAWQAAAAABaAAAAAAAHQAAAAACeQAAAAAADwAAAAAAeQAAAAAAHQAAAAACUgAAAAAAWQAAAAADYwAAAAAAYwAAAAABYwAAAAADWQAAAAABUgAAAAAAaAAAAAAAaAAAAAAAWQAAAAAAeQAAAAAAHQAAAAABDwAAAAAADwAAAAAADwAAAAAAHQAAAAAAUgAAAAAAWQAAAAAAYwAAAAABYwAAAAACYwAAAAACWQAAAAADUgAAAAAAWQAAAAACWQAAAAADWQAAAAABWQAAAAAAHQAAAAAAeQAAAAAADwAAAAAAeQAAAAAAHQAAAAAAUgAAAAAAWQAAAAABYwAAAAABYwAAAAABYwAAAAABWQAAAAADUgAAAAAAaAAAAAAAaAAAAAAAWQAAAAAAWQAAAAABHQAAAAADHQAAAAABHQAAAAACHQAAAAAAHQAAAAABUgAAAAAAWQAAAAAAWQAAAAABWQAAAAAAWQAAAAACWQAAAAABUgAAAAAAaAAAAAAAaAAAAAAAWQAAAAABWQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAHQAAAAAAHQAAAAADHQAAAAAAUgAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAUgAAAAAAcAAAAAACcAAAAAACcAAAAAABUgAAAAAAWQAAAAADWQAAAAADZAAAAAAAUgAAAAAAHQAAAAAADwAAAAAAHQAAAAACUgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAUgAAAAAAcAAAAAADcAAAAAACcAAAAAADUgAAAAAAWQAAAAAAWQAAAAABZAAAAAABUgAAAAAAHQAAAAACDwAAAAAAHQAAAAAAUgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAUgAAAAAAcAAAAAADcAAAAAAAcAAAAAAAUgAAAAAAWQAAAAABWQAAAAABWQAAAAABUgAAAAAAHQAAAAACDwAAAAAAHQAAAAABUgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAUgAAAAAAcAAAAAADcAAAAAADcAAAAAABUgAAAAAAZAAAAAACWQAAAAABWQAAAAACUgAAAAAAHQAAAAADHQAAAAACHQAAAAADUgAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAUgAAAAAAcAAAAAACcAAAAAACcAAAAAADUgAAAAAAZAAAAAACWQAAAAAAWQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAHQAAAAAAHQAAAAABDwAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAAHQAAAAADHQAAAAACUgAAAAAAWQAAAAABWQAAAAACHQAAAAACHQAAAAABHQAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAAHQAAAAADHQAAAAADHQAAAAAAUgAAAAAAaAAAAAAAeQAAAAAA - version: 6 - 0,-1: - ind: 0,-1 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAA - version: 6 - -1,0: - ind: -1,0 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAA - version: 6 - -1,1: - ind: -1,1 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAA - version: 6 - 1,-1: - ind: 1,-1 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAA - version: 6 - 1,0: - ind: 1,0 - tiles: WQAAAAABUgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAeQAAAAAAHQAAAAACHQAAAAAAHQAAAAABHQAAAAADHQAAAAABHQAAAAADHQAAAAADHQAAAAACHQAAAAADWQAAAAADUgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAeQAAAAAAHQAAAAAAHQAAAAADHQAAAAABHQAAAAACHQAAAAABHQAAAAADHQAAAAACHQAAAAABHQAAAAABWQAAAAAAUgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAIgAAAAACHQAAAAACHQAAAAACHQAAAAACHQAAAAABHQAAAAACHQAAAAACHQAAAAAAHQAAAAAAHQAAAAABaAAAAAAAUgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAeQAAAAAAHQAAAAADHQAAAAAAHQAAAAACHQAAAAAAHQAAAAADHQAAAAADHQAAAAADHQAAAAAAHQAAAAABaAAAAAAAUgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAeQAAAAAAHQAAAAABHQAAAAABHQAAAAACHQAAAAAAHQAAAAABHQAAAAACHQAAAAAAHQAAAAACHQAAAAADUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAWQAAAAABWQAAAAACWQAAAAACeQAAAAAAZAAAAAAAWQAAAAABZAAAAAAAUgAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAAWQAAAAAAWQAAAAABWQAAAAAAeQAAAAAAYwAAAAAAYwAAAAAAYwAAAAABUgAAAAAATQAAAAAAeQAAAAAAIgAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAACWQAAAAACWQAAAAAAWQAAAAADYwAAAAADYwAAAAAAYwAAAAADUgAAAAAATQAAAAAAeQAAAAAAKgAAAAAAeQAAAAAAKgAAAAAAKgAAAAAAKgAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAABeQAAAAAAYwAAAAACYwAAAAABYwAAAAADUgAAAAAATQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAIgAAAAABeQAAAAAAeQAAAAAAWQAAAAADWQAAAAAAWQAAAAAAeQAAAAAAZAAAAAADWQAAAAABZAAAAAACUgAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAWQAAAAABWQAAAAAAWQAAAAAAWQAAAAADWQAAAAACWQAAAAACWQAAAAADUgAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAUgAAAAAAWQAAAAABYwAAAAACYwAAAAACYwAAAAAAYwAAAAADYwAAAAACWQAAAAAAUgAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAWQAAAAAAeQAAAAAAUgAAAAAAWQAAAAAAYwAAAAABYwAAAAADYwAAAAABYwAAAAACYwAAAAAAWQAAAAACUgAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAADaAAAAAAAUgAAAAAAWQAAAAACYwAAAAABYwAAAAABYwAAAAADYwAAAAAAYwAAAAABWQAAAAAAUgAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAWQAAAAAAeQAAAAAAUgAAAAAA - version: 6 - 1,1: - ind: 1,1 - tiles: WQAAAAABWQAAAAACWQAAAAACWQAAAAAAWQAAAAABWQAAAAAAWQAAAAACUgAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAaAAAAAAAUgAAAAAAWQAAAAACWQAAAAABWQAAAAABWQAAAAAAWQAAAAADUgAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAUgAAAAAAWQAAAAACWQAAAAACaAAAAAAAUgAAAAAAWQAAAAADYwAAAAACYwAAAAABYwAAAAAAWQAAAAABUgAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAUgAAAAAAWQAAAAADYwAAAAADWQAAAAACUgAAAAAAWQAAAAADYwAAAAADYwAAAAADYwAAAAADWQAAAAABUgAAAAAAeQAAAAAAWQAAAAABeQAAAAAAWQAAAAABeQAAAAAAUgAAAAAAWQAAAAAAYwAAAAABWQAAAAADUgAAAAAAWQAAAAAAYwAAAAAAYwAAAAACYwAAAAACWQAAAAADUgAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAUgAAAAAAWQAAAAADYwAAAAADWQAAAAACUgAAAAAAWQAAAAACWQAAAAACWQAAAAADWQAAAAADWQAAAAACUgAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAUgAAAAAAWQAAAAACWQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAWQAAAAADWQAAAAABWQAAAAAAUgAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAUgAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAUgAAAAAAWQAAAAABWQAAAAACZAAAAAACUgAAAAAAWQAAAAABWQAAAAAAWQAAAAAAUgAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAUgAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAUgAAAAAAWQAAAAACWQAAAAADZAAAAAABUgAAAAAAWQAAAAACWQAAAAAAWQAAAAACUgAAAAAAWQAAAAACWQAAAAAAWQAAAAACUgAAAAAAWQAAAAADWQAAAAAAWQAAAAADUgAAAAAAWQAAAAADWQAAAAACWQAAAAADUgAAAAAAZAAAAAADWQAAAAACZAAAAAADUgAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAUgAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAUgAAAAAAZAAAAAAAWQAAAAADWQAAAAACUgAAAAAAZAAAAAABWQAAAAABZAAAAAABUgAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAUgAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAUgAAAAAAZAAAAAADWQAAAAADWQAAAAABUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAWQAAAAAAWQAAAAACWQAAAAABWQAAAAADWQAAAAACWQAAAAAAWQAAAAACWQAAAAAAWQAAAAACWQAAAAACWQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAA - version: 6 - -1,2: - ind: -1,2 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAA - version: 6 - -1,3: - ind: -1,3 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - version: 6 - 0,2: - ind: 0,2 - tiles: HQAAAAACHQAAAAACDwAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAAHQAAAAADHQAAAAAAUgAAAAAAaAAAAAAAaAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAUgAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAUgAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAWQAAAAADaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAUgAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAHQAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAAHQAAAAAAUgAAAAAAHQAAAAABTQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAAHQAAAAABUgAAAAAAHQAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAAHQAAAAAAUgAAAAAAHQAAAAAATQAAAAAANgAAAAAANgAAAAAANgAAAAAATQAAAAAAHQAAAAAAUgAAAAAAHQAAAAACDwAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAAHQAAAAACUgAAAAAAHQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAAHQAAAAACUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAADwAAAAAADwAAAAAAeQAAAAAAIgAAAAABeQAAAAAADwAAAAAADwAAAAAAUgAAAAAAbAAAAAACbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAADbAAAAAABbAAAAAABUgAAAAAADwAAAAAADwAAAAAADwAAAAAAHQAAAAAADwAAAAAADwAAAAAADwAAAAAAUgAAAAAAbAAAAAABbAAAAAABeQAAAAAAbAAAAAAAeQAAAAAAbAAAAAABbAAAAAADUgAAAAAAeQAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAAeQAAAAAAUgAAAAAAIgAAAAABIgAAAAABIgAAAAACaAAAAAAAIgAAAAADIgAAAAACIgAAAAABUgAAAAAAIgAAAAAAHQAAAAACDwAAAAAADwAAAAAADwAAAAAAHQAAAAAAIgAAAAABUgAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAUgAAAAAAeQAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAAeQAAAAAAUgAAAAAAIgAAAAACIgAAAAAAIgAAAAABaAAAAAAAIgAAAAABIgAAAAACIgAAAAAAUgAAAAAADwAAAAAADwAAAAAADwAAAAAAHQAAAAADDwAAAAAADwAAAAAADwAAAAAAUgAAAAAAIgAAAAAAIgAAAAAAIgAAAAACaAAAAAAAIgAAAAAAIgAAAAACIgAAAAADUgAAAAAA - version: 6 - 0,3: - ind: 0,3 - tiles: DwAAAAAADwAAAAAAeQAAAAAAIgAAAAAAeQAAAAAADwAAAAAADwAAAAAAUgAAAAAAIgAAAAACIgAAAAAAIgAAAAAAaAAAAAAAIgAAAAABIgAAAAACIgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - version: 6 - 1,2: - ind: 1,2 - tiles: aAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAYwAAAAACYwAAAAADYwAAAAABeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAUgAAAAAAHQAAAAACHQAAAAADHQAAAAACTQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAAYwAAAAACYwAAAAAAYwAAAAABWQAAAAACaAAAAAAAaAAAAAAAaAAAAAAAUgAAAAAAHQAAAAACHQAAAAABHQAAAAABTQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAAYwAAAAADYwAAAAADYwAAAAADeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAUgAAAAAAHQAAAAADHQAAAAABHQAAAAABTQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAWQAAAAACWQAAAAAAWQAAAAAAWQAAAAABWQAAAAADWQAAAAADWQAAAAAAUgAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAUgAAAAAAWQAAAAACYwAAAAABYwAAAAACYwAAAAABYwAAAAADYwAAAAAAWQAAAAAAUgAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAUgAAAAAAWQAAAAAAWQAAAAABWQAAAAABWQAAAAACWQAAAAAAWQAAAAAAWQAAAAADUgAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAUgAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAWQAAAAACYwAAAAAAYwAAAAADYwAAAAADUgAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAUgAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAWQAAAAADYwAAAAABYwAAAAABYwAAAAACUgAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAUgAAAAAAWQAAAAACWQAAAAADWQAAAAABWQAAAAACYwAAAAADYwAAAAABYwAAAAACUgAAAAAAaAAAAAAAWQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAACaAAAAAAAUgAAAAAAWQAAAAADWQAAAAADWQAAAAACWQAAAAADWQAAAAACWQAAAAADWQAAAAADUgAAAAAAaAAAAAAAWQAAAAABaAAAAAAAaAAAAAAAaAAAAAAAWQAAAAAAaAAAAAAAUgAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAACIQAAAAABIQAAAAADWQAAAAACUgAAAAAAaAAAAAAAWQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAaAAAAAAAUgAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAWQAAAAABIQAAAAAAIQAAAAABWQAAAAABUgAAAAAA - version: 6 - 1,3: - ind: 1,3 - tiles: aAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAUgAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAWQAAAAABWQAAAAAAWQAAAAAAWQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - version: 6 - 2,-1: - ind: 2,-1 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - version: 6 - 2,0: - ind: 2,0 - tiles: HQAAAAAAHQAAAAABWQAAAAACUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAAABHQAAAAACWQAAAAABUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAAACHQAAAAACWQAAAAABUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAAAAHQAAAAADWQAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAAACHQAAAAAAWQAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATQAAAAAATQAAAAAATQAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIgAAAAADeQAAAAAATQAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKgAAAAAAeQAAAAAATQAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAATQAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATQAAAAAATQAAAAAATQAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - version: 6 - 2,1: - ind: 2,1 - tiles: UgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWQAAAAABWQAAAAACWQAAAAADUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYwAAAAAAYwAAAAABWQAAAAADUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYwAAAAADYwAAAAABWQAAAAABUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYwAAAAABYwAAAAAAWQAAAAABUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWQAAAAACWQAAAAABWQAAAAACUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIgAAAAACHQAAAAAAIgAAAAADUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIgAAAAACHQAAAAACIgAAAAADUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAAABHQAAAAADHQAAAAADUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIgAAAAABIgAAAAACIgAAAAADUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAAAAHQAAAAADHQAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - version: 6 - 2,2: - ind: 2,2 - tiles: UgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATQAAAAAAHQAAAAADHQAAAAABUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIgAAAAABeQAAAAAAHQAAAAADUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATQAAAAAAHQAAAAAAHQAAAAADUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - version: 6 - 2,3: - ind: 2,3 - tiles: UgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - version: 6 - - type: Gravity - gravityShakeSound: !type:SoundPathSpecifier - path: /Audio/Effects/alert.ogg - - type: DecalGrid - chunkCollection: - version: 2 - nodes: - - node: - color: '#52B4E996' - id: BotGreyscale - decals: - 680: 30,25 - 681: 30,24 - 682: 28,27 - 683: 28,27 - 684: 28,28 - 685: 28,28 - 686: 30,25 - 687: 30,24 - - node: - color: '#DE3A3A96' - id: BotGreyscale - decals: - 478: 32,25 - 479: 32,24 - 480: 34,25 - 481: 34,24 - 482: 16,28 - 483: 18,28 - 484: 18,27 - 485: 16,27 - 486: 14,25 - 487: 14,24 - 488: 12,27 - 489: 12,28 - 748: 26,7 - 749: 32,7 - 750: 29,9 - 836: 6,2 - 837: 10,2 - 940: 1,9 - 941: 1,8 - 942: 1,7 - 943: 9,9 - 944: 9,8 - 945: 9,7 - 946: 20,10 - 947: 14,10 - 948: 14,6 - 949: 20,6 - 950: 22,6 - 951: 22,10 - 952: 12,10 - 953: 12,6 - - node: - color: '#FFFFFFFF' - id: BrickTileDarkCornerNe - decals: - 194: 21,4 - 250: 10,44 - 525: 12,32 - 543: 4,22 - 585: 6,40 - 659: 34,36 - 675: 30,28 - 703: 6,16 - 757: 10,10 - - node: - color: '#FFFFFFFF' - id: BrickTileDarkCornerNw - decals: - 191: 18,4 - 251: 12,44 - 519: 0,32 - 542: 0,22 - 582: 0,40 - 633: 24,36 - 702: 0,16 - 754: 0,10 - 853: 23,4 - - node: - color: '#FFFFFFFF' - id: BrickTileDarkCornerSe - decals: - 192: 21,0 - 238: 10,46 - 272: 14,42 - 524: 12,30 - 537: 4,18 - 584: 6,38 - 658: 34,34 - 701: 6,12 - 755: 10,6 - - node: - color: '#FFFFFFFF' - id: BrickTileDarkCornerSw - decals: - 193: 18,0 - 241: 12,46 - 270: 8,42 - 518: 0,30 - 534: 0,18 - 583: 0,38 - 632: 24,34 - 672: 28,24 - 700: 0,12 - 756: 0,6 - 852: 23,0 - - node: - color: '#FFFFFFFF' - id: BrickTileDarkLineE - decals: - 202: 21,1 - 203: 21,2 - 204: 21,3 - 239: 10,47 - 240: 10,48 - 273: 14,43 - 501: 0,25 - 502: 0,26 - 503: 0,27 - 535: 4,19 - 536: 4,21 - 592: 14,38 - 593: 14,40 - 674: 30,27 - 706: 6,15 - 707: 6,13 - 758: 10,9 - 759: 10,7 - 926: 5,45 - 929: 33,36 - 930: 33,34 - 931: 10,31 - 935: 8,10 - 936: 8,6 - 937: 7,2 - - node: - color: '#FFFFFFFF' - id: BrickTileDarkLineN - decals: - 197: 19,4 - 198: 20,4 - 248: 8,44 - 249: 9,44 - 252: 13,44 - 253: 14,44 - 506: 0,28 - 507: 2,28 - 520: 1,32 - 523: 11,32 - 540: 1,22 - 541: 3,22 - 634: 25,36 - 635: 26,36 - 704: 1,16 - 705: 5,16 - 762: 1,10 - 765: 9,10 - 846: 24,4 - 847: 25,4 - 848: 27,4 - 849: 28,4 - 850: 29,4 - 851: 30,4 - 927: 3,47 - - node: - color: '#FFFFFFFF' - id: BrickTileDarkLineS - decals: - 195: 20,0 - 196: 19,0 - 244: 8,46 - 245: 9,46 - 246: 13,46 - 247: 14,46 - 274: 9,42 - 275: 10,42 - 276: 13,42 - 277: 12,42 - 504: 0,24 - 505: 2,24 - 521: 1,30 - 522: 11,30 - 538: 3,18 - 539: 1,18 - 636: 25,34 - 637: 26,34 - 710: 1,12 - 711: 5,12 - 763: 1,6 - 764: 9,6 - 840: 25,0 - 841: 24,0 - 842: 27,0 - 843: 28,0 - 844: 29,0 - 845: 30,0 - 928: 3,43 - - node: - color: '#FFFFFFFF' - id: BrickTileDarkLineW - decals: - 199: 18,3 - 200: 18,2 - 201: 18,1 - 242: 12,47 - 243: 12,48 - 271: 8,43 - 498: 2,27 - 499: 2,26 - 500: 2,25 - 544: 0,19 - 545: 0,21 - 590: 8,40 - 591: 8,38 - 673: 28,25 - 708: 0,13 - 709: 0,15 - 760: 0,7 - 761: 0,9 - 854: 23,3 - 855: 23,1 - 925: 1,45 - 932: 2,31 - 933: 2,10 - 934: 2,6 - 938: 9,2 - 939: 30,2 - - node: - color: '#FFFFFFFF' - id: BrickTileSteelCornerNe - decals: - 84: 18,36 - 104: 16,25 - 336: 9,21 - 337: 10,22 - 364: 16,22 - 374: 21,15 - 375: 22,16 - 415: 21,21 - 421: 22,22 - 446: 33,21 - 447: 34,22 - 490: 12,25 - 554: 22,9 - 568: 14,9 - 610: 22,40 - 2025: 30,48 - 2039: 30,44 - 2058: 29,47 - - node: - color: '#FFFFFFFF' - id: BrickTileSteelCornerNw - decals: - 85: 16,36 - 103: 18,25 - 338: 7,21 - 339: 6,22 - 376: 17,15 - 377: 16,16 - 414: 19,21 - 420: 18,22 - 448: 31,21 - 449: 30,22 - 555: 20,9 - 569: 12,9 - 611: 16,40 - 2040: 28,44 - 2059: 28,47 - - node: - color: '#FFFFFFFF' - id: BrickTileSteelCornerSe - decals: - 83: 18,34 - 308: 26,30 - 332: 9,19 - 335: 10,18 - 372: 21,13 - 373: 22,12 - 418: 21,19 - 419: 22,18 - 452: 33,19 - 453: 34,18 - 561: 22,7 - 562: 14,7 - 609: 22,38 - 778: 16,0 - 779: 5,0 - 2038: 30,42 - 2056: 29,46 - - node: - color: '#FFFFFFFF' - id: BrickTileSteelCornerSw - decals: - 81: 16,34 - 82: 3,35 - 309: 14,30 - 333: 7,19 - 334: 6,18 - 370: 17,13 - 371: 16,12 - 416: 18,18 - 417: 19,19 - 450: 31,19 - 451: 30,18 - 493: 14,27 - 558: 20,7 - 567: 12,7 - 608: 16,38 - 780: 0,0 - 781: 11,0 - 2037: 28,42 - 2057: 28,46 - - node: - color: '#FFFFFFFF' - id: BrickTileSteelEndE - decals: - 73: 21,39 - - node: - color: '#FFFFFFFF' - id: BrickTileSteelEndW - decals: - 74: 17,39 - - node: - color: '#D4D4D496' - id: BrickTileSteelLineE - decals: - 1330: 32,2 - 1332: 31,2 - - node: - color: '#FFFFFFFF' - id: BrickTileSteelLineE - decals: - 87: 18,35 - 93: 14,34 - 94: 14,35 - 95: 14,36 - 105: 16,24 - 286: 17,45 - 287: 17,46 - 288: 17,47 - 323: 27,20 - 349: 9,20 - 350: 10,21 - 351: 10,19 - 365: 16,21 - 378: 21,14 - 379: 22,13 - 380: 22,15 - 425: 21,20 - 426: 22,19 - 427: 22,21 - 454: 34,19 - 455: 34,21 - 462: 33,20 - 491: 12,24 - 559: 22,8 - 566: 14,8 - 802: 16,1 - 806: 5,1 - 872: 34,0 - 873: 34,1 - 874: 34,3 - 875: 34,4 - 1328: 33,2 - 2023: 30,46 - 2024: 30,47 - 2041: 30,43 - - node: - color: '#FFFFFFFF' - id: BrickTileSteelLineN - decals: - 75: 18,39 - 76: 19,39 - 77: 20,39 - 86: 17,36 - 340: 8,21 - 341: 9,22 - 342: 7,22 - 366: 15,22 - 391: 18,15 - 392: 19,15 - 393: 20,15 - 394: 21,16 - 395: 20,16 - 396: 18,16 - 397: 17,16 - 422: 20,21 - 423: 19,22 - 424: 21,22 - 458: 31,22 - 459: 33,22 - 460: 32,21 - 556: 21,9 - 564: 13,9 - 572: 16,10 - 573: 18,10 - 612: 17,40 - 613: 18,40 - 614: 21,40 - 615: 20,40 - 2026: 29,48 - 2027: 28,48 - 2044: 29,44 - - node: - color: '#FFFFFFFF' - id: BrickTileSteelLineS - decals: - 78: 18,39 - 79: 19,39 - 80: 20,39 - 89: 17,34 - 298: 15,30 - 299: 16,30 - 300: 17,30 - 301: 18,30 - 302: 19,30 - 303: 21,30 - 304: 22,30 - 305: 23,30 - 306: 24,30 - 307: 25,30 - 346: 8,19 - 347: 7,18 - 348: 9,18 - 384: 18,13 - 385: 19,13 - 386: 20,13 - 387: 20,12 - 388: 21,12 - 389: 18,12 - 390: 17,12 - 431: 20,19 - 432: 19,18 - 433: 21,18 - 463: 32,19 - 464: 31,18 - 465: 33,18 - 557: 21,7 - 563: 13,7 - 570: 16,6 - 571: 18,6 - 616: 17,38 - 617: 18,38 - 618: 21,38 - 619: 20,38 - 782: 1,0 - 783: 2,0 - 784: 3,0 - 785: 4,0 - 786: 0,3 - 787: 1,3 - 788: 2,3 - 789: 3,3 - 790: 4,3 - 791: 5,3 - 792: 12,0 - 793: 13,0 - 794: 14,0 - 795: 15,0 - 796: 11,3 - 797: 12,3 - 798: 13,3 - 799: 14,3 - 800: 15,3 - 801: 16,3 - 2043: 29,42 - - node: - color: '#D4D4D496' - id: BrickTileSteelLineW - decals: - 1329: 33,2 - 1331: 32,2 - 1333: 31,2 - - node: - color: '#FFFFFFFF' - id: BrickTileSteelLineW - decals: - 88: 16,35 - 90: 20,34 - 91: 20,35 - 92: 20,36 - 102: 18,24 - 289: 21,45 - 290: 21,46 - 291: 21,47 - 322: 25,20 - 326: 29,15 - 327: 29,14 - 328: 29,13 - 343: 7,20 - 344: 6,21 - 345: 6,19 - 381: 17,14 - 382: 16,15 - 383: 16,13 - 428: 19,20 - 429: 18,19 - 430: 18,21 - 456: 30,19 - 457: 30,21 - 461: 31,20 - 492: 14,28 - 560: 20,8 - 565: 12,8 - 803: 0,1 - 805: 11,1 - 2021: 24,44 - 2022: 24,46 - 2042: 28,43 - - node: - color: '#52B4E996' - id: BrickTileWhiteCornerNe - decals: - 264: 10,44 - 679: 30,28 - - node: - color: '#DE3A3A96' - id: BrickTileWhiteCornerNe - decals: - 109: 16,25 - 362: 10,22 - 367: 16,22 - 413: 22,16 - 438: 22,22 - 475: 34,22 - 494: 12,25 - 527: 12,32 - 580: 4,22 - 587: 6,40 - 630: 22,40 - 660: 34,36 - 715: 6,16 - 777: 10,10 - 2045: 30,48 - - node: - color: '#FFFFFFFF' - id: BrickTileWhiteCornerNe - decals: - 689: 10,28 - - node: - color: '#52B4E996' - id: BrickTileWhiteCornerNw - decals: - 265: 12,44 - - node: - color: '#DE3A3A96' - id: BrickTileWhiteCornerNw - decals: - 108: 18,25 - 363: 6,22 - 412: 16,16 - 442: 18,22 - 476: 30,22 - 532: 0,32 - 579: 0,22 - 588: 0,40 - 629: 16,40 - 639: 24,36 - 714: 0,16 - 772: 0,10 - 858: 23,4 - - node: - color: '#FFFFFFFF' - id: BrickTileWhiteCornerNw - decals: - 688: 8,28 - - node: - color: '#52B4E996' - id: BrickTileWhiteCornerSe - decals: - 263: 10,46 - 279: 14,42 - - node: - color: '#DE3A3A96' - id: BrickTileWhiteCornerSe - decals: - 361: 10,18 - 411: 22,12 - 443: 22,18 - 477: 34,18 - 526: 12,30 - 581: 4,18 - 586: 6,38 - 628: 22,38 - 661: 34,34 - 713: 6,12 - 771: 10,6 - 809: 5,0 - 810: 16,0 - - node: - color: '#EFB34196' - id: BrickTileWhiteCornerSe - decals: - 311: 26,30 - - node: - color: '#FFFFFFFF' - id: BrickTileWhiteCornerSe - decals: - 690: 10,24 - - node: - color: '#52B4E996' - id: BrickTileWhiteCornerSw - decals: - 262: 12,46 - 278: 8,42 - 676: 28,24 - - node: - color: '#DE3A3A96' - id: BrickTileWhiteCornerSw - decals: - 360: 6,18 - 406: 16,12 - 439: 18,18 - 474: 30,18 - 496: 14,27 - 533: 0,30 - 578: 0,18 - 589: 0,38 - 631: 16,38 - 638: 24,34 - 712: 0,12 - 770: 0,6 - 807: 0,0 - 808: 11,0 - 859: 23,0 - - node: - color: '#EFB34196' - id: BrickTileWhiteCornerSw - decals: - 310: 14,30 - - node: - color: '#FFFFFFFF' - id: BrickTileWhiteCornerSw - decals: - 691: 8,24 - - node: - color: '#52B4E996' - id: BrickTileWhiteLineE - decals: - 258: 10,47 - 259: 10,48 - 280: 14,43 - 678: 30,27 - - node: - color: '#D4D4D419' - id: BrickTileWhiteLineE - decals: - 895: 2,6 - 896: 2,10 - 900: 9,2 - 901: 30,2 - 906: 1,45 - 908: 2,31 - - node: - color: '#DE3A3A96' - id: BrickTileWhiteLineE - decals: - 96: 14,36 - 97: 14,35 - 98: 14,34 - 106: 16,24 - 356: 10,19 - 357: 10,21 - 368: 16,21 - 409: 22,15 - 410: 22,13 - 444: 22,19 - 445: 22,21 - 470: 34,21 - 471: 34,19 - 495: 12,24 - 511: 0,25 - 512: 0,26 - 513: 0,27 - 548: 4,19 - 549: 4,21 - 596: 14,38 - 597: 14,40 - 716: 6,15 - 717: 6,13 - 768: 10,9 - 769: 10,7 - 811: 5,1 - 812: 16,1 - 876: 34,0 - 877: 34,1 - 878: 34,3 - 879: 34,4 - 2048: 30,47 - 2049: 30,46 - - node: - color: '#EFB34196' - id: BrickTileWhiteLineE - decals: - 292: 17,45 - 293: 17,46 - 294: 17,47 - 324: 27,20 - - node: - color: '#FFFFFFFF' - id: BrickTileWhiteLineE - decals: - 693: 10,27 - 694: 10,26 - 695: 10,25 - - node: - color: '#52B4E996' - id: BrickTileWhiteLineN - decals: - 266: 9,44 - 267: 8,44 - 268: 13,44 - 269: 14,44 - - node: - color: '#D4D4D419' - id: BrickTileWhiteLineN - decals: - 907: 3,43 - - node: - color: '#DE3A3A96' - id: BrickTileWhiteLineN - decals: - 358: 9,22 - 359: 7,22 - 369: 15,22 - 398: 18,16 - 399: 17,16 - 400: 21,16 - 401: 20,16 - 436: 19,22 - 437: 21,22 - 468: 31,22 - 469: 33,22 - 516: 0,28 - 517: 2,28 - 528: 11,32 - 531: 1,32 - 552: 1,22 - 553: 3,22 - 574: 16,10 - 575: 18,10 - 620: 18,40 - 621: 17,40 - 622: 20,40 - 623: 21,40 - 642: 25,36 - 643: 26,36 - 722: 1,16 - 723: 5,16 - 773: 1,10 - 774: 9,10 - 866: 24,4 - 867: 25,4 - 868: 27,4 - 869: 28,4 - 870: 30,4 - 871: 29,4 - 2046: 28,48 - 2047: 29,48 - - node: - color: '#FFFFFFFF' - id: BrickTileWhiteLineN - decals: - 692: 9,28 - - node: - color: '#52B4E996' - id: BrickTileWhiteLineS - decals: - 254: 8,46 - 255: 9,46 - 256: 13,46 - 257: 14,46 - 282: 9,42 - 283: 10,42 - 284: 12,42 - 285: 13,42 - - node: - color: '#D4D4D419' - id: BrickTileWhiteLineS - decals: - 905: 3,47 - - node: - color: '#DE3A3A96' - id: BrickTileWhiteLineS - decals: - 352: 7,18 - 353: 9,18 - 402: 17,12 - 403: 18,12 - 404: 20,12 - 405: 21,12 - 434: 19,18 - 435: 21,18 - 466: 33,18 - 467: 31,18 - 514: 0,24 - 515: 2,24 - 529: 11,30 - 530: 1,30 - 550: 1,18 - 551: 3,18 - 576: 16,6 - 577: 18,6 - 624: 17,38 - 625: 18,38 - 626: 20,38 - 627: 21,38 - 640: 25,34 - 641: 26,34 - 718: 5,12 - 719: 1,12 - 775: 1,6 - 776: 9,6 - 813: 12,0 - 814: 13,0 - 815: 14,0 - 816: 15,0 - 817: 16,3 - 818: 15,3 - 819: 13,3 - 820: 14,3 - 821: 11,3 - 822: 12,3 - 823: 0,3 - 824: 1,3 - 825: 2,3 - 826: 3,3 - 827: 4,3 - 828: 5,3 - 829: 4,0 - 830: 3,0 - 831: 2,0 - 832: 1,0 - 860: 24,0 - 861: 25,0 - 862: 27,0 - 863: 28,0 - 864: 29,0 - 865: 30,0 - - node: - color: '#EFB34196' - id: BrickTileWhiteLineS - decals: - 312: 15,30 - 313: 16,30 - 314: 17,30 - 315: 18,30 - 316: 19,30 - 317: 21,30 - 318: 22,30 - 319: 23,30 - 320: 24,30 - 321: 25,30 - - node: - color: '#FFFFFFFF' - id: BrickTileWhiteLineS - decals: - 696: 9,24 - - node: - color: '#52B4E996' - id: BrickTileWhiteLineW - decals: - 260: 12,47 - 261: 12,48 - 281: 8,43 - 677: 28,25 - - node: - color: '#D4D4D419' - id: BrickTileWhiteLineW - decals: - 897: 8,10 - 898: 8,6 - 899: 7,2 - 902: 33,36 - 903: 33,34 - 904: 5,45 - 909: 10,31 - - node: - color: '#DE3A3A96' - id: BrickTileWhiteLineW - decals: - 99: 20,36 - 100: 20,35 - 101: 20,34 - 107: 18,24 - 354: 6,19 - 355: 6,21 - 407: 16,13 - 408: 16,15 - 440: 18,19 - 441: 18,21 - 472: 30,19 - 473: 30,21 - 497: 14,28 - 508: 2,25 - 509: 2,26 - 510: 2,27 - 546: 0,19 - 547: 0,21 - 594: 8,38 - 595: 8,40 - 720: 0,13 - 721: 0,15 - 766: 0,7 - 767: 0,9 - 804: 0,1 - 833: 11,1 - 856: 23,1 - 857: 23,3 - 2050: 24,44 - 2051: 24,46 - - node: - color: '#EFB34196' - id: BrickTileWhiteLineW - decals: - 295: 21,45 - 296: 21,46 - 297: 21,47 - 325: 25,20 - 329: 29,13 - 330: 29,14 - 331: 29,15 - - node: - color: '#FFFFFFFF' - id: BrickTileWhiteLineW - decals: - 697: 8,25 - 698: 8,26 - 699: 8,27 - - node: - cleanable: True - angle: 1.5707963267948966 rad - color: '#B02E269B' - id: Clandestine - decals: - 2136: 3.132535,34.09553 - - node: - color: '#A4610696' - id: Dirt - decals: - 1334: 31,2 - 1335: 32,2 - 1336: 33,2 - 1337: 30,2 - 1338: 34,2 - 1339: 33,3 - 1340: 31,4 - 1341: 32,3 - 1342: 32,1 - 1343: 31,1 - 1344: 31,0 - 1345: 33,0 - 1346: 32,0 - 1347: 33,3 - 1348: 33,4 - 1349: 32,4 - 1350: 31,3 - 1351: 32,1 - 1352: 33,1 - - node: - cleanable: True - color: '#A4610696' - id: Dirt - decals: - 954: 0,45 - 955: 3,47 - 956: 3,48 - 957: 6,45 - 958: 3,42 - 959: 3,43 - 960: 5,45 - 961: 1,45 - 962: 13,45 - 963: 12,45 - 964: 11,47 - 965: 9,45 - 966: 8,45 - 967: 8,46 - 968: 10,47 - 969: 13,47 - 970: 14,46 - 971: 11,43 - 972: 11,42 - 973: 9,42 - 974: 10,42 - 975: 13,42 - 976: 12,42 - 977: 13,43 - 978: 9,43 - 979: 11,44 - 980: 11,45 - 981: 11,47 - 982: 9,46 - 983: 11,46 - 984: 16,45 - 985: 16,46 - 986: 16,47 - 987: 16,44 - 988: 17,45 - 989: 17,46 - 990: 21,45 - 991: 22,45 - 992: 22,44 - 993: 22,43 - 994: 22,46 - 995: 21,45 - 996: 21,46 - 997: 22,47 - 998: 24,39 - 999: 24,38 - 1000: 24,40 - 1001: 27,39 - 1002: 27,39 - 1003: 30,40 - 1004: 30,39 - 1005: 30,38 - 1006: 30,39 - 1007: 34,35 - 1008: 33,34 - 1009: 33,36 - 1010: 24,35 - 1011: 22,35 - 1012: 20,35 - 1013: 21,35 - 1014: 20,34 - 1015: 14,35 - 1016: 13,35 - 1017: 12,35 - 1018: 14,36 - 1019: 17,36 - 1020: 17,35 - 1021: 17,34 - 1022: 16,35 - 1023: 18,35 - 1024: 18,36 - 1025: 18,34 - 1026: 16,34 - 1027: 16,36 - 1028: 16,30 - 1029: 16,30 - 1030: 18,30 - 1031: 19,30 - 1032: 22,30 - 1033: 24,30 - 1034: 25,30 - 1035: 26,30 - 1036: 20,30 - 1037: 20,30 - 1038: 15,30 - 1039: 14,30 - 1040: 14,31 - 1041: 26,31 - 1042: 10,31 - 1043: 2,31 - 1044: 0,31 - 1045: 12,31 - 1046: 5,35 - 1047: 6,36 - 1048: 4,34 - 1049: 9,35 - 1050: 9,35 - 1051: 10,35 - 1052: 10,34 - 1053: 0,35 - 1054: 0,36 - 1055: 0,35 - 1056: 5,36 - 1057: 6,36 - 1058: 6,39 - 1059: 0,39 - 1060: 8,39 - 1061: 8,40 - 1062: 8,38 - 1063: 9,39 - 1064: 11,38 - 1065: 9,38 - 1066: 11,40 - 1067: 10,40 - 1068: 13,39 - 1069: 14,39 - 1070: 14,40 - 1071: 14,38 - 1072: 13,39 - 1073: 13,40 - 1074: 16,39 - 1075: 18,40 - 1076: 19,40 - 1077: 19,39 - 1078: 18,39 - 1079: 17,39 - 1080: 20,39 - 1081: 21,39 - 1082: 19,38 - 1083: 22,39 - 1084: 21,38 - 1085: 24,39 - 1086: 24,38 - 1087: 24,40 - 1088: 17,32 - 1089: 24,32 - 1090: 23,32 - 1091: 34,26 - 1092: 33,26 - 1093: 33,28 - 1094: 32,28 - 1095: 32,27 - 1096: 34,27 - 1097: 34,28 - 1098: 32,25 - 1099: 33,24 - 1100: 33,25 - 1101: 32,26 - 1102: 29,24 - 1103: 30,26 - 1104: 28,26 - 1105: 29,28 - 1106: 29,27 - 1107: 29,25 - 1108: 25,26 - 1109: 24,26 - 1110: 26,26 - 1111: 25,27 - 1112: 24,28 - 1113: 25,28 - 1114: 24,27 - 1115: 24,24 - 1116: 25,25 - 1117: 25,24 - 1118: 26,25 - 1119: 22,26 - 1120: 24,26 - 1121: 26,26 - 1122: 20,26 - 1123: 21,25 - 1124: 21,24 - 1125: 21,28 - 1126: 21,27 - 1127: 18,26 - 1128: 16,26 - 1129: 17,27 - 1130: 17,28 - 1131: 17,25 - 1132: 17,24 - 1133: 17,26 - 1134: 13,28 - 1135: 13,27 - 1136: 13,26 - 1137: 13,25 - 1138: 13,24 - 1139: 12,26 - 1140: 14,26 - 1141: 9,26 - 1142: 9,27 - 1143: 9,28 - 1144: 8,28 - 1145: 8,27 - 1146: 8,26 - 1147: 9,25 - 1148: 8,25 - 1149: 8,24 - 1150: 9,24 - 1151: 10,24 - 1152: 10,25 - 1153: 10,26 - 1154: 10,27 - 1155: 10,28 - 1156: 5,28 - 1157: 5,28 - 1158: 5,24 - 1159: 5,24 - 1160: 0,26 - 1161: 2,26 - 1162: 2,28 - 1163: 1,24 - 1164: 2,24 - 1165: 2,22 - 1166: 4,20 - 1167: 2,18 - 1168: 1,19 - 1169: 0,20 - 1170: 0,17 - 1171: 0,18 - 1172: 4,18 - 1173: 4,19 - 1174: 4,22 - 1175: 0,22 - 1176: 6,20 - 1177: 7,20 - 1178: 8,20 - 1179: 9,20 - 1180: 10,20 - 1181: 8,21 - 1182: 8,22 - 1183: 8,19 - 1184: 8,18 - 1185: 6,18 - 1186: 7,19 - 1187: 7,18 - 1188: 9,20 - 1189: 10,21 - 1190: 9,21 - 1191: 9,22 - 1192: 9,19 - 1193: 7,21 - 1194: 8,13 - 1195: 8,13 - 1196: 11,16 - 1197: 11,16 - 1198: 10,16 - 1199: 9,16 - 1200: 8,15 - 1201: 8,14 - 1202: 8,16 - 1203: 10,16 - 1204: 9,16 - 1205: 12,14 - 1206: 11,14 - 1207: 11,12 - 1208: 10,12 - 1209: 14,12 - 1210: 14,14 - 1211: 14,15 - 1212: 13,14 - 1213: 12,14 - 1214: 11,14 - 1215: 11,13 - 1216: 6,14 - 1217: 0,14 - 1218: 3,16 - 1219: 3,12 - 1220: 3,13 - 1221: 2,13 - 1222: 4,13 - 1223: 3,15 - 1224: 2,15 - 1225: 4,15 - 1226: 5,14 - 1227: 1,14 - 1228: 1,15 - 1229: 1,13 - 1230: 5,15 - 1231: 5,13 - 1232: 0,8 - 1233: 2,10 - 1234: 2,6 - 1235: 8,6 - 1236: 8,10 - 1237: 0,8 - 1238: 10,8 - 1239: 10,10 - 1240: 10,7 - 1241: 10,6 - 1242: 9,6 - 1243: 9,10 - 1244: 1,10 - 1245: 0,7 - 1246: 0,6 - 1247: 0,3 - 1248: 1,3 - 1249: 1,3 - 1250: 2,3 - 1251: 3,3 - 1252: 4,3 - 1253: 4,3 - 1254: 5,3 - 1255: 7,2 - 1256: 9,2 - 1257: 4,0 - 1258: 4,1 - 1259: 2,1 - 1260: 1,1 - 1261: 0,2 - 1262: 1,2 - 1263: 2,2 - 1264: 5,2 - 1265: 4,2 - 1266: 3,2 - 1267: 4,1 - 1268: 3,1 - 1269: 11,2 - 1270: 12,3 - 1271: 11,3 - 1272: 14,3 - 1273: 14,3 - 1274: 15,3 - 1275: 16,3 - 1276: 13,3 - 1277: 11,3 - 1278: 12,2 - 1279: 11,1 - 1280: 13,1 - 1281: 16,2 - 1282: 16,1 - 1283: 14,1 - 1284: 13,2 - 1285: 14,2 - 1286: 18,2 - 1287: 19,2 - 1288: 20,2 - 1289: 21,2 - 1290: 19,3 - 1291: 18,3 - 1292: 20,3 - 1293: 20,1 - 1294: 21,1 - 1295: 19,1 - 1296: 23,2 - 1297: 28,2 - 1298: 29,2 - 1299: 30,2 - 1300: 28,4 - 1301: 29,4 - 1302: 26,4 - 1303: 26,2 - 1304: 26,1 - 1305: 26,0 - 1306: 24,2 - 1307: 25,2 - 1308: 27,2 - 1309: 24,4 - 1310: 23,3 - 1311: 24,3 - 1312: 23,4 - 1469: 14,8 - 1470: 12,8 - 1471: 12,7 - 1472: 13,7 - 1473: 13,6 - 1474: 13,10 - 1475: 12,9 - 1476: 14,9 - 1477: 17,10 - 1478: 17,9 - 1479: 18,9 - 1480: 18,8 - 1481: 17,7 - 1482: 17,7 - 1483: 17,6 - 1484: 17,8 - 1485: 16,7 - 1486: 18,7 - 1487: 20,9 - 1488: 20,8 - 1489: 21,10 - 1490: 21,9 - 1491: 21,7 - 1492: 21,6 - 1493: 20,7 - 1494: 22,7 - 1495: 22,8 - 1534: 19,16 - 1535: 18,15 - 1536: 19,13 - 1537: 19,12 - 1538: 22,14 - 1539: 22,14 - 1540: 22,15 - 1541: 21,16 - 1542: 21,15 - 1543: 21,13 - 1544: 16,14 - 1545: 17,13 - 1546: 17,15 - 1556: 30,20 - 1557: 32,22 - 1558: 31,22 - 1559: 31,21 - 1560: 32,19 - 1561: 32,18 - 1562: 34,20 - 1563: 34,19 - 1564: 34,18 - 1565: 34,21 - 1566: 34,22 - 2060: 24,45 - 2061: 25,45 - 2062: 27,48 - 2063: 27,42 - 2064: 30,45 - 2065: 28,43 - 2066: 29,43 - 2067: 30,43 - 2068: 24,42 - 2069: 25,43 - 2070: 26,42 - 2071: 25,42 - 2072: 26,48 - 2073: 25,47 - 2074: 26,47 - 2075: 25,47 - 2076: 25,48 - 2077: 27,47 - 2078: 27,45 - 2079: 27,46 - 2080: 26,45 - 2081: 28,45 - 2082: 26,44 - 2083: 27,44 - 2084: 25,46 - 2085: 26,46 - 2086: 29,45 - - node: - color: '#A4610696' - id: DirtHeavy - decals: - 1353: 11,31 - 1354: 1,31 - 1355: 0,39 - 1356: 6,39 - 1357: 5,45 - 1358: 14,39 - 1359: 16,39 - 1360: 19,38 - - node: - cleanable: True - color: '#A4610696' - id: DirtHeavy - decals: - 1361: 22,39 - 1362: 19,40 - 1363: 30,39 - 1364: 25,35 - 1365: 24,36 - 1366: 20,30 - 1367: 14,30 - 1368: 18,30 - 1369: 22,30 - 1370: 26,31 - 1371: 22,26 - 1372: 24,26 - 1373: 26,26 - 1374: 28,26 - 1375: 29,27 - 1376: 33,25 - 1377: 33,28 - 1378: 32,28 - 1379: 14,26 - 1380: 12,26 - 1381: 9,26 - 1382: 9,28 - 1383: 8,28 - 1384: 8,24 - 1385: 10,25 - 1386: 5,24 - 1387: 5,28 - 1388: 0,26 - 1389: 0,27 - 1390: 2,24 - 1391: 2,25 - 1392: 0,35 - 1393: 0,36 - 1394: 7,36 - 1395: 5,35 - 1396: 4,34 - 1397: 10,35 - 1398: 9,35 - 1399: 8,39 - 1400: 14,39 - 1401: 14,38 - 1402: 8,45 - 1403: 11,48 - 1404: 11,44 - 1405: 14,45 - 1406: 11,42 - 1407: 9,42 - 1408: 13,43 - 1409: 3,47 - 1410: 4,20 - 1411: 3,22 - 1412: 2,18 - 1413: 0,19 - 1414: 6,20 - 1415: 8,20 - 1416: 8,18 - 1417: 10,20 - 1418: 8,22 - 1419: 14,20 - 1420: 15,21 - 1421: 16,20 - 1422: 12,20 - 1423: 12,21 - 1424: 13,22 - 1425: 13,21 - 1426: 13,19 - 1427: 16,19 - 1428: 16,19 - 1429: 15,20 - 1430: 14,18 - 1431: 12,20 - 1432: 14,22 - 1433: 20,20 - 1434: 20,22 - 1435: 18,20 - 1436: 22,21 - 1437: 19,21 - 1438: 20,18 - 1439: 22,20 - 1440: 27,22 - 1441: 25,22 - 1442: 26,18 - 1443: 27,18 - 1444: 31,18 - 1445: 32,18 - 1446: 31,20 - 1447: 32,21 - 1448: 34,22 - 1449: 34,20 - 1450: 32,19 - 1451: 29,14 - 1452: 24,14 - 1453: 24,13 - 1454: 30,14 - 1455: 29,13 - 1456: 34,2 - 1457: 32,3 - 1458: 30,1 - 1459: 26,1 - 1460: 23,3 - 1461: 24,4 - 1462: 29,4 - 1463: 26,0 - 1464: 26,1 - 1465: 18,2 - 1466: 22,8 - 1467: 20,8 - 1468: 16,8 - 1496: 17,6 - 1497: 16,8 - 1498: 18,8 - 1499: 17,10 - 1500: 14,8 - 1501: 12,8 - 1502: 13,6 - 1503: 13,10 - 1504: 21,10 - 1505: 21,9 - 1506: 21,8 - 1507: 21,7 - 1508: 21,6 - 1509: 10,8 - 1510: 9,10 - 1511: 9,6 - 1512: 2,6 - 1513: 0,7 - 1514: 0,9 - 1515: 1,10 - 1516: 8,10 - 1517: 0,14 - 1518: 5,14 - 1519: 4,15 - 1520: 3,16 - 1521: 1,18 - 1522: 5,15 - 1523: 6,14 - 1524: 11,16 - 1525: 8,13 - 1526: 11,12 - 1527: 10,13 - 1528: 16,14 - 1529: 19,16 - 1530: 19,13 - 1531: 18,13 - 1532: 18,15 - 1533: 16,15 - 1547: 19,16 - 1548: 16,14 - 1549: 17,15 - 1550: 18,14 - 1551: 19,13 - 1552: 21,13 - 1553: 22,14 - 1554: 29,15 - 1555: 29,13 - 2095: 24,45 - 2096: 27,48 - 2097: 27,42 - 2098: 25,44 - 2099: 29,45 - 2100: 29,46 - 2101: 29,47 - 2102: 25,45 - - node: - cleanable: True - color: '#A4610696' - id: DirtLight - decals: - 1567: 0,2 - 1568: 5,2 - 1569: 4,1 - 1570: 5,2 - 1571: 2,1 - 1572: 7,2 - 1573: 9,2 - 1574: 11,2 - 1575: 14,2 - 1576: 13,3 - 1577: 10,3 - 1578: 11,3 - 1579: 12,3 - 1580: 16,3 - 1581: 15,3 - 1582: 16,2 - 1583: 16,1 - 1584: 14,1 - 1585: 15,1 - 1586: 1,3 - 1587: 3,3 - 1588: 5,3 - 1589: 5,3 - 1590: 1,1 - 1591: 23,2 - 1592: 26,2 - 1593: 28,2 - 1594: 28,4 - 1595: 30,2 - 1596: 31,1 - 1597: 34,1 - 1598: 33,0 - 1599: 34,3 - 1600: 21,9 - 1601: 20,8 - 1602: 22,8 - 1603: 16,8 - 1604: 17,9 - 1605: 17,10 - 1606: 17,6 - 1607: 12,8 - 1608: 14,9 - 1609: 14,8 - 1610: 13,6 - 1611: 10,8 - 1612: 8,10 - 1613: 2,10 - 1614: 0,8 - 1615: 0,9 - 1616: 2,6 - 1617: 0,14 - 1618: 3,12 - 1619: 1,14 - 1620: 3,15 - 1621: 5,14 - 1622: 5,15 - 1623: 6,14 - 1624: 3,13 - 1625: 3,12 - 1626: 8,13 - 1627: 10,16 - 1628: 11,16 - 1629: 17,14 - 1630: 17,13 - 1631: 16,15 - 1632: 19,16 - 1633: 22,14 - 1634: 21,14 - 1635: 21,13 - 1636: 19,13 - 1637: 20,12 - 1638: 20,13 - 1639: 21,15 - 1640: 29,14 - 1641: 29,15 - 1642: 34,20 - 1643: 32,18 - 1644: 34,18 - 1645: 34,21 - 1646: 32,22 - 1647: 30,20 - 1648: 30,21 - 1649: 32,19 - 1650: 32,21 - 1651: 32,20 - 1652: 30,18 - 1653: 26,22 - 1654: 25,22 - 1655: 25,20 - 1656: 27,20 - 1657: 27,22 - 1658: 25,20 - 1659: 27,20 - 1660: 26,18 - 1661: 27,18 - 1662: 25,18 - 1663: 22,20 - 1664: 18,20 - 1665: 20,22 - 1666: 20,20 - 1667: 19,19 - 1668: 20,19 - 1669: 20,21 - 1670: 21,20 - 1671: 16,20 - 1672: 16,21 - 1673: 12,20 - 1674: 13,21 - 1675: 13,22 - 1676: 13,19 - 1677: 13,19 - 1678: 14,20 - 1679: 14,18 - 1680: 10,20 - 1681: 10,21 - 1682: 8,22 - 1683: 6,21 - 1684: 6,20 - 1685: 7,20 - 1686: 7,19 - 1687: 8,20 - 1688: 9,20 - 1689: 4,20 - 1690: 3,18 - 1691: 2,18 - 1692: 1,18 - 1693: 0,21 - 1694: 1,22 - 1695: 0,20 - 1696: 2,22 - 1697: 1,24 - 1698: 0,26 - 1699: 0,25 - 1700: 2,25 - 1701: 2,27 - 1702: 5,28 - 1703: 5,24 - 1704: 9,26 - 1705: 9,27 - 1706: 9,24 - 1707: 8,24 - 1708: 10,24 - 1709: 10,26 - 1710: 13,26 - 1711: 12,26 - 1712: 13,28 - 1713: 12,28 - 1714: 13,24 - 1715: 14,26 - 1716: 13,25 - 1717: 18,26 - 1718: 16,26 - 1719: 17,28 - 1720: 17,25 - 1721: 17,24 - 1722: 20,26 - 1723: 22,26 - 1724: 21,26 - 1725: 21,27 - 1726: 21,24 - 1727: 21,25 - 1728: 25,26 - 1729: 26,26 - 1730: 25,26 - 1731: 25,26 - 1732: 25,24 - 1733: 25,24 - 1734: 26,25 - 1735: 24,27 - 1736: 29,26 - 1737: 29,27 - 1738: 30,26 - 1739: 29,24 - 1740: 33,26 - 1741: 33,24 - 1742: 34,26 - 1743: 32,26 - 1744: 34,28 - 1745: 34,28 - 1746: 33,28 - 1747: 32,28 - 1748: 26,31 - 1749: 21,30 - 1750: 20,30 - 1751: 17,30 - 1752: 15,30 - 1753: 14,31 - 1754: 10,31 - 1755: 2,31 - 1756: 11,30 - 1757: 12,31 - 1758: 0,32 - 1759: 1,32 - 1760: 0,31 - 1761: -1,35 - 1762: 0,36 - 1763: 0,35 - 1764: 4,34 - 1765: 5,35 - 1766: 3,34 - 1767: 10,34 - 1768: 10,35 - 1769: 6,39 - 1770: 0,39 - 1771: 0,45 - 1772: 3,43 - 1773: 3,47 - 1774: 4,45 - 1775: 5,45 - 1776: 8,45 - 1777: 11,46 - 1778: 11,45 - 1779: 11,42 - 1780: 13,42 - 1781: 9,42 - 1782: 14,45 - 1783: 10,44 - 1784: 11,44 - 1785: 11,45 - 1786: 16,47 - 1787: 16,45 - 1788: 17,45 - 1789: 21,45 - 1790: 16,48 - 1791: 16,43 - 1792: 23,43 - 1793: 22,42 - 1794: 30,38 - 1795: 30,40 - 1796: 24,38 - 1797: 22,39 - 1798: 19,38 - 1799: 19,39 - 1800: 18,39 - 1801: 16,39 - 1802: 18,38 - 1803: 17,38 - 1804: 14,38 - 1805: 14,40 - 1806: 9,39 - 1807: 10,40 - 1808: 12,38 - 1809: 10,38 - 1810: 10,38 - 1811: 6,39 - 1812: 0,39 - 2103: 24,45 - 2104: 30,45 - 2105: 26,44 - 2106: 27,43 - 2107: 30,43 - 2108: 29,42 - 2109: 28,47 - - node: - cleanable: True - color: '#A4610696' - id: DirtMedium - decals: - 1813: 0,35 - 1814: 0,39 - 1815: 6,39 - 1816: 3,43 - 1817: 1,45 - 1818: 11,45 - 1819: 11,42 - 1820: 14,45 - 1821: 16,45 - 1822: 21,45 - 1823: 22,45 - 1824: 21,38 - 1825: 20,38 - 1826: 20,38 - 1827: 24,38 - 1828: 30,39 - 1829: 34,35 - 1830: 33,36 - 1831: 33,34 - 1832: 24,34 - 1833: 20,34 - 1834: 22,35 - 1835: 17,35 - 1836: 16,34 - 1837: 17,36 - 1838: 12,35 - 1839: 10,35 - 1840: 5,35 - 1841: 0,35 - 1842: 1,31 - 1843: 2,31 - 1844: 11,31 - 1845: 9,26 - 1846: 8,26 - 1847: 9,27 - 1848: 9,28 - 1849: 10,26 - 1850: 10,25 - 1851: 9,25 - 1852: 13,26 - 1853: 12,26 - 1854: 13,28 - 1855: 14,26 - 1856: 17,24 - 1857: 18,26 - 1858: 17,28 - 1859: 16,26 - 1860: 22,26 - 1861: 20,26 - 1862: 25,27 - 1863: 24,27 - 1864: 24,28 - 1865: 24,25 - 1866: 25,25 - 1867: 25,24 - 1868: 24,24 - 1869: 26,25 - 1870: 26,26 - 1871: 25,26 - 1872: 24,26 - 1873: 24,26 - 1874: 25,26 - 1875: 25,26 - 1876: 28,26 - 1877: 30,26 - 1878: 29,27 - 1879: 29,25 - 1880: 33,26 - 1881: 34,26 - 1882: 34,28 - 1883: 32,28 - 1884: 34,28 - 1885: 32,20 - 1886: 31,20 - 1887: 30,20 - 1888: 30,18 - 1889: 34,18 - 1890: 34,21 - 1891: 25,18 - 1892: 26,18 - 1893: 25,18 - 1894: 27,20 - 1895: 27,22 - 1896: 29,15 - 1897: 30,14 - 1898: 29,12 - 1899: 24,14 - 1900: 24,15 - 1901: 24,16 - 1902: 20,20 - 1903: 17,20 - 1904: 19,21 - 1905: 18,20 - 1906: 21,22 - 1907: 22,20 - 1908: 22,21 - 1909: 20,19 - 1910: 15,20 - 1911: 14,21 - 1912: 15,21 - 1913: 16,21 - 1914: 14,22 - 1915: 12,20 - 1916: 14,18 - 1917: 15,18 - 1918: 16,19 - 1919: 16,19 - 1920: 13,19 - 1921: 12,19 - 1922: 12,19 - 1923: 12,18 - 1924: 14,18 - 1925: 15,18 - 1926: 15,18 - 1927: 10,20 - 1928: 8,22 - 1929: 7,20 - 1930: 9,21 - 1931: 7,19 - 1932: 10,19 - 1933: 10,21 - 1934: 7,18 - 1935: 4,20 - 1936: 4,21 - 1937: 2,22 - 1938: 1,22 - 1939: 0,19 - 1940: 1,18 - 1941: 1,18 - 1942: 3,18 - 1943: 0,14 - 1944: 2,13 - 1945: 3,13 - 1946: 5,13 - 1947: 3,12 - 1948: 8,15 - 1949: 8,16 - 1950: 9,16 - 1951: 9,16 - 1952: 18,14 - 1953: 19,16 - 1954: 19,14 - 1955: 20,13 - 1956: 18,16 - 1957: 17,13 - 1958: 20,12 - 1959: 22,13 - 1960: 24,13 - 1961: 30,12 - 1962: 30,14 - 1963: 29,16 - 1964: 24,16 - 1965: 24,16 - 1966: 25,6 - 1967: 24,7 - 1968: 26,9 - 1969: 27,10 - 1970: 28,10 - 1971: 34,10 - 1972: 34,8 - 1973: 34,7 - 1974: 33,6 - 1975: 30,6 - 1976: 27,6 - 1977: 21,8 - 1978: 16,8 - 1979: 17,10 - 1980: 18,8 - 1981: 17,6 - 1982: 13,7 - 1983: 13,9 - 1984: 13,8 - 1985: 14,7 - 1986: 10,6 - 1987: 8,10 - 1988: 2,6 - 1989: 0,7 - 1990: 1,1 - 1991: 0,1 - 1992: 4,1 - 1993: 5,2 - 1994: 3,1 - 1995: 3,0 - 1996: 7,2 - 1997: 9,2 - 1998: 11,2 - 1999: 13,1 - 2000: 15,1 - 2001: 16,2 - 2002: 16,1 - 2003: 23,2 - 2004: 26,2 - 2005: 29,3 - 2006: 30,2 - 2007: 33,2 - 2008: 33,3 - 2009: 34,2 - 2010: 34,0 - 2011: 34,1 - 2012: 31,1 - 2013: 29,0 - 2014: 26,0 - 2015: 23,3 - 2016: 28,4 - 2087: 27,42 - 2088: 27,48 - 2089: 24,45 - 2090: 30,45 - 2091: 28,45 - 2092: 26,45 - 2093: 28,47 - 2094: 27,44 - 2110: 24,45 - 2111: 27,48 - 2112: 27,45 - 2113: 26,46 - 2114: 26,42 - 2115: 25,42 - 2116: 25,47 - 2117: 25,47 - 2118: 26,48 - 2119: 26,47 - 2120: 26,47 - 2121: 26,43 - 2122: 26,43 - 2123: 27,43 - 2124: 6,1 - 2125: 10,3 - - node: - color: '#D4D4D41B' - id: FullTileOverlayGreyscale - decals: - 1313: 31,4 - 1314: 31,3 - 1315: 31,2 - 1316: 31,1 - 1317: 31,0 - - node: - color: '#D4D4D433' - id: FullTileOverlayGreyscale - decals: - 1318: 32,0 - 1319: 32,1 - 1320: 32,2 - 1321: 32,3 - 1322: 32,4 - - node: - color: '#D4D4D44C' - id: FullTileOverlayGreyscale - decals: - 1323: 33,0 - 1324: 33,1 - 1325: 33,2 - 1326: 33,3 - 1327: 33,4 - - node: - color: '#D4D4D40C' - id: HalfTileOverlayGreyscale - decals: - 923: 3,47 - - node: - color: '#D4D4D419' - id: HalfTileOverlayGreyscale - decals: - 893: 3,43 - - node: - color: '#D4D4D40C' - id: HalfTileOverlayGreyscale180 - decals: - 924: 3,43 - - node: - color: '#D4D4D419' - id: HalfTileOverlayGreyscale180 - decals: - 894: 3,47 - - node: - color: '#D4D4D40C' - id: HalfTileOverlayGreyscale270 - decals: - 910: 30,2 - 911: 9,2 - 914: 2,6 - 915: 2,10 - 918: 2,31 - 922: 1,45 - - node: - color: '#D4D4D419' - id: HalfTileOverlayGreyscale270 - decals: - 882: 7,2 - 883: 8,6 - 884: 8,10 - 888: 10,31 - 889: 33,34 - 890: 33,36 - 891: 5,45 - - node: - color: '#D4D4D40C' - id: HalfTileOverlayGreyscale90 - decals: - 912: 7,2 - 913: 8,6 - 916: 8,10 - 917: 10,31 - 919: 33,34 - 920: 33,36 - 921: 5,45 - - node: - color: '#D4D4D419' - id: HalfTileOverlayGreyscale90 - decals: - 880: 30,2 - 881: 9,2 - 885: 2,6 - 886: 2,10 - 887: 2,31 - 892: 1,45 - - node: - color: '#9FED5896' - id: MiniTileCheckerAOverlay - decals: - 2028: 28,42 - 2029: 29,42 - 2030: 30,42 - 2031: 28,43 - 2032: 29,43 - 2033: 30,43 - 2034: 28,44 - 2035: 29,44 - 2036: 30,44 - - node: - color: '#DE3A3A96' - id: MiniTileCheckerAOverlay - decals: - 0: 7,19 - 1: 8,19 - 2: 9,19 - 3: 9,20 - 4: 8,20 - 5: 7,20 - 6: 7,21 - 7: 8,21 - 8: 9,21 - 9: 19,19 - 10: 20,19 - 11: 21,19 - 12: 21,20 - 13: 20,20 - 14: 19,20 - 15: 19,21 - 16: 20,21 - 17: 21,21 - 18: 17,15 - 19: 17,14 - 20: 17,13 - 21: 18,13 - 22: 19,13 - 23: 20,13 - 24: 21,13 - 25: 21,14 - 26: 21,15 - 27: 20,15 - 28: 19,15 - 29: 18,15 - 30: 18,14 - 31: 19,14 - 32: 20,9 - 33: 21,9 - 34: 22,9 - 35: 22,8 - 36: 22,7 - 37: 21,7 - 38: 21,8 - 39: 20,8 - 40: 20,7 - 41: 12,7 - 42: 13,7 - 43: 14,7 - 44: 14,8 - 45: 13,8 - 46: 12,8 - 47: 12,9 - 48: 13,9 - 49: 14,9 - 59: 17,39 - 60: 18,39 - 61: 19,39 - 62: 20,39 - 63: 21,39 - 64: 16,36 - 65: 16,35 - 66: 16,34 - 67: 17,34 - 68: 18,34 - 69: 18,35 - 70: 17,35 - 71: 17,36 - 72: 18,36 - - node: - color: '#FFFFFFFF' - id: MiniTileCheckerAOverlay - decals: - 2052: 28,46 - 2053: 28,47 - 2054: 29,47 - 2055: 29,46 - - node: - color: '#9FED5896' - id: MiniTileCheckerBOverlay - decals: - 50: 31,21 - 51: 31,20 - 52: 31,19 - 53: 33,21 - 54: 33,20 - 55: 33,19 - - node: - color: '#DE3A3A96' - id: MiniTileCheckerBOverlay - decals: - 56: 32,21 - 57: 32,20 - 58: 32,19 - - node: - color: '#DE3A3A96' - id: StandClearGreyscale - decals: - 751: 26,7 - 752: 32,7 - 753: 29,9 - 838: 6,2 - 839: 10,2 - - node: - color: '#FFFFFFFF' - id: WarnCornerNE - decals: - 605: 13,40 - 747: 34,10 - - node: - color: '#FFFFFFFF' - id: WarnCornerNW - decals: - 606: 9,40 - 741: 24,10 - - node: - color: '#FFFFFFFF' - id: WarnCornerSE - decals: - 604: 13,38 - 746: 34,6 - - node: - color: '#FFFFFFFF' - id: WarnCornerSW - decals: - 598: 9,38 - 740: 24,6 - - node: - color: '#FFFFFFFF' - id: WarnFull - decals: - 657: 32,35 - - node: - color: '#FFFFFFFF' - id: WarnLineE - decals: - 607: 13,39 - 644: 26,34 - 645: 26,35 - 646: 26,36 - 744: 34,7 - 745: 34,9 - - node: - color: '#DE3A3A96' - id: WarnLineGreyscaleE - decals: - 112: 18,26 - 117: 14,26 - 118: 22,26 - 121: 22,35 - 122: 22,39 - 128: 14,39 - 131: 6,39 - 132: 12,31 - 135: 26,31 - 140: 26,26 - 145: 30,26 - 146: 34,26 - 153: 2,26 - 159: 4,20 - 160: 10,20 - 166: 16,20 - 170: 22,20 - 175: 34,20 - 176: 22,14 - 183: 6,14 - 184: 10,8 - 188: 16,2 - 190: 34,2 - 205: 21,2 - 213: 34,8 - 214: 30,14 - 219: 34,35 - 223: 30,39 - 224: 22,45 - 227: 14,45 - 230: 6,45 - 235: 10,35 - 834: 5,2 - 2018: 30,45 - - node: - color: '#DE3A3A96' - id: WarnLineGreyscaleN - decals: - 111: 17,28 - 116: 13,28 - 125: 19,40 - 126: 11,40 - 138: 21,28 - 144: 29,28 - 154: 1,28 - 158: 2,22 - 161: 8,22 - 165: 14,22 - 171: 20,22 - 173: 32,22 - 179: 19,16 - 180: 3,16 - 186: 17,10 - 209: 26,4 - 210: 29,10 - 217: 26,22 - 220: 29,36 - 228: 11,48 - 233: 3,48 - 237: 5,28 - 2020: 27,48 - - node: - color: '#FFFFFFFF' - id: WarnLineGreyscaleN - decals: - 667: 27,35 - 668: 28,35 - 669: 29,35 - 670: 30,35 - 671: 31,35 - - node: - color: '#DE3A3A96' - id: WarnLineGreyscaleS - decals: - 110: 17,24 - 115: 13,24 - 124: 19,38 - 127: 11,38 - 136: 20,30 - 137: 21,24 - 139: 25,24 - 143: 29,24 - 148: 33,24 - 149: 32,28 - 150: 33,28 - 151: 34,28 - 152: 1,24 - 157: 2,18 - 163: 8,18 - 164: 14,18 - 169: 20,18 - 172: 32,18 - 177: 19,12 - 181: 3,12 - 187: 17,6 - 208: 26,0 - 211: 29,6 - 216: 26,18 - 221: 29,34 - 229: 11,42 - 231: 3,42 - 236: 5,24 - 2019: 27,42 - - node: - color: '#FFFFFFFF' - id: WarnLineGreyscaleS - decals: - 662: 27,35 - 663: 28,35 - 664: 29,35 - 665: 30,35 - 666: 31,35 - - node: - color: '#DE3A3A96' - id: WarnLineGreyscaleW - decals: - 113: 16,26 - 114: 12,26 - 119: 20,26 - 120: 12,35 - 123: 16,39 - 129: 8,39 - 130: 0,39 - 133: 0,31 - 134: 14,31 - 141: 24,26 - 142: 28,26 - 147: 32,26 - 155: 0,26 - 156: 0,20 - 162: 6,20 - 167: 12,20 - 168: 18,20 - 174: 30,20 - 178: 16,14 - 182: 0,14 - 185: 0,8 - 189: 0,2 - 206: 18,2 - 207: 23,2 - 212: 24,8 - 215: 24,14 - 218: 24,35 - 222: 24,39 - 225: 16,45 - 226: 8,45 - 232: 0,45 - 234: 0,35 - 835: 11,2 - 2017: 24,45 - - node: - color: '#FFFFFFFF' - id: WarnLineN - decals: - 601: 10,38 - 602: 12,38 - 647: 27,34 - 648: 28,34 - 649: 30,34 - 650: 31,34 - 651: 32,34 - 732: 28,6 - 733: 27,6 - 734: 26,6 - 735: 25,6 - 736: 30,6 - 737: 31,6 - 738: 32,6 - 739: 33,6 - - node: - color: '#FFFFFFFF' - id: WarnLineS - decals: - 603: 9,39 - 742: 24,7 - 743: 24,9 - - node: - color: '#FFFFFFFF' - id: WarnLineW - decals: - 599: 10,40 - 600: 12,40 - 652: 27,36 - 653: 28,36 - 654: 30,36 - 655: 31,36 - 656: 32,36 - 724: 25,10 - 725: 26,10 - 726: 28,10 - 727: 27,10 - 728: 30,10 - 729: 31,10 - 730: 32,10 - 731: 33,10 - - node: - cleanable: True - color: '#80C71F7F' - id: revolution - decals: - 2138: 14.060958,20.754644 - 2139: 13.607299,19.803425 - - node: - cleanable: True - color: '#B02E60A3' - id: revolution - decals: - 2137: 25.02975,25.438416 - - node: - cleanable: True - angle: -1.5707963267948966 rad - color: '#B02E2644' - id: splatter - decals: - 2131: 27.967218,24.104916 - - node: - cleanable: True - color: '#B02E2666' - id: splatter - decals: - 2126: 8.891183,43.065514 - - node: - cleanable: True - angle: -1.5707963267948966 rad - color: '#B02E266F' - id: splatter - decals: - 2132: 28.36234,24.163452 - 2133: 32.200607,35.087025 - 2134: 13.24002,46.473877 - 2135: 24.497486,47.84553 - - node: - cleanable: True - angle: -4.71238898038469 rad - color: '#B02E26B4' - id: splatter - decals: - 2128: 8.788744,42.524048 - 2129: 15.538555,20.953827 - 2130: 24.864944,27.488853 - - node: - cleanable: True - angle: -3.141592653589793 rad - color: '#B02E26B4' - id: splatter - decals: - 2127: 9.110695,42.81673 - - type: RadiationGridResistance - - type: LoadedMap - - type: SpreaderGrid - - type: GridTree - - type: MovedGrids - - type: GridPathfinding -- proto: AirlockBrigGlassLocked - entities: - - uid: 1245 - components: - - type: Transform - pos: 15.5,35.5 - parent: 588 - - uid: 1246 - components: - - type: Transform - pos: 19.5,35.5 - parent: 588 - - uid: 1625 - components: - - type: Transform - pos: 22.5,2.5 - parent: 588 -- proto: AirlockEngineering - entities: - - uid: 1515 - components: - - type: Transform - pos: 19.5,43.5 - parent: 588 -- proto: AirlockSecurityGlassLocked - entities: - - uid: 1579 - components: - - type: Transform - pos: 11.5,15.5 - parent: 588 - - uid: 1609 - components: - - type: Transform - pos: 15.5,8.5 - parent: 588 - - uid: 1610 - components: - - type: Transform - pos: 19.5,8.5 - parent: 588 - - uid: 1623 - components: - - type: Transform - pos: 6.5,2.5 - parent: 588 - - uid: 1624 - components: - - type: Transform - pos: 10.5,2.5 - parent: 588 -- proto: APCBasic - entities: - - uid: 484 - components: - - type: Transform - pos: 25.5,13.5 - parent: 588 - - uid: 773 - components: - - type: Transform - pos: 25.5,19.5 - parent: 588 - - uid: 973 - components: - - type: Transform - pos: 21.5,32.5 - parent: 588 - - uid: 1509 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 19.5,47.5 - parent: 588 -- proto: BannerSecurity - entities: - - uid: 553 - components: - - type: Transform - pos: 30.5,8.5 - parent: 588 - - uid: 1619 - components: - - type: Transform - pos: 18.5,10.5 - parent: 588 - - uid: 1620 - components: - - type: Transform - pos: 16.5,6.5 - parent: 588 -- proto: BasaltFive - entities: - - uid: 608 - components: - - type: Transform - pos: 2.5,14.5 - parent: 588 - - uid: 647 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 2.5,21.5 - parent: 588 - - uid: 899 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 10.5,30.5 - parent: 588 - - uid: 1264 - components: - - type: Transform - pos: 9.5,0.5 - parent: 588 - - uid: 1384 - components: - - type: Transform - pos: 5.5,48.5 - parent: 588 - - uid: 1386 - components: - - type: Transform - pos: 0.5,47.5 - parent: 588 - - uid: 1387 - components: - - type: Transform - pos: 0.5,42.5 - parent: 588 - - uid: 1388 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 1.5,42.5 - parent: 588 -- proto: BasaltFour - entities: - - uid: 900 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 8.5,32.5 - parent: 588 - - uid: 904 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 2.5,40.5 - parent: 588 - - uid: 1381 - components: - - type: Transform - pos: 1.5,44.5 - parent: 588 - - uid: 1385 - components: - - type: Transform - pos: 6.5,48.5 - parent: 588 -- proto: BasaltOne - entities: - - uid: 813 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 1.5,27.5 - parent: 588 - - uid: 897 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 3.5,30.5 - parent: 588 - - uid: 901 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 10.5,32.5 - parent: 588 - - uid: 903 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 5.5,38.5 - parent: 588 - - uid: 1382 - components: - - type: Transform - pos: 1.5,48.5 - parent: 588 -- proto: BasaltRandom - entities: - - uid: 613 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 4.5,14.5 - parent: 588 - - uid: 615 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 3.5,7.5 - parent: 588 -- proto: BasaltThree - entities: - - uid: 616 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 6.5,7.5 - parent: 588 - - uid: 644 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 1.5,20.5 - parent: 588 - - uid: 898 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 2.5,30.5 - parent: 588 - - uid: 905 - components: - - type: Transform - pos: 4.5,38.5 - parent: 588 - - uid: 1265 - components: - - type: Transform - pos: 7.5,1.5 - parent: 588 - - uid: 1266 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 9.5,3.5 - parent: 588 - - uid: 1383 - components: - - type: Transform - pos: 6.5,47.5 - parent: 588 -- proto: BasaltTwo - entities: - - uid: 610 - components: - - type: Transform - pos: 3.5,14.5 - parent: 588 - - uid: 617 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 3.5,9.5 - parent: 588 - - uid: 618 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 7.5,8.5 - parent: 588 - - uid: 646 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 2.5,19.5 - parent: 588 - - uid: 814 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 1.5,26.5 - parent: 588 - - uid: 896 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 3.5,32.5 - parent: 588 - - uid: 902 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 1.5,38.5 - parent: 588 - - uid: 1263 - components: - - type: Transform - pos: 7.5,4.5 - parent: 588 - - uid: 1380 - components: - - type: Transform - pos: 1.5,43.5 - parent: 588 -- proto: Bed - entities: - - uid: 257 - components: - - type: Transform - pos: 15.5,4.5 - parent: 588 - - uid: 282 - components: - - type: Transform - pos: 1.5,4.5 - parent: 588 - - uid: 293 - components: - - type: Transform - pos: 3.5,4.5 - parent: 588 - - uid: 294 - components: - - type: Transform - pos: 5.5,4.5 - parent: 588 - - uid: 295 - components: - - type: Transform - pos: 11.5,4.5 - parent: 588 - - uid: 296 - components: - - type: Transform - pos: 13.5,4.5 - parent: 588 - - uid: 700 - components: - - type: Transform - pos: 12.5,22.5 - parent: 588 - - uid: 701 - components: - - type: Transform - pos: 16.5,18.5 - parent: 588 - - uid: 1043 - components: - - type: Transform - pos: 20.5,28.5 - parent: 588 - - uid: 1044 - components: - - type: Transform - pos: 22.5,24.5 - parent: 588 - - uid: 1075 - components: - - type: Transform - pos: 24.5,28.5 - parent: 588 - - uid: 1099 - components: - - type: Transform - pos: 20.5,36.5 - parent: 588 - - uid: 1100 - components: - - type: Transform - pos: 14.5,34.5 - parent: 588 - - uid: 1763 - components: - - type: Transform - pos: 24.5,48.5 - parent: 588 - - uid: 1764 - components: - - type: Transform - pos: 24.5,42.5 - parent: 588 -- proto: BedsheetMedical - entities: - - uid: 1150 - components: - - type: Transform - pos: 28.5,24.5 - parent: 588 - - uid: 1151 - components: - - type: Transform - pos: 28.5,25.5 - parent: 588 -- proto: BedsheetOrange - entities: - - uid: 298 - components: - - type: Transform - pos: 3.5,4.5 - parent: 588 - - uid: 299 - components: - - type: Transform - pos: 5.5,4.5 - parent: 588 - - uid: 300 - components: - - type: Transform - pos: 13.5,4.5 - parent: 588 - - uid: 1765 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 24.5,42.5 - parent: 588 -- proto: BedsheetSpawner - entities: - - uid: 301 - components: - - type: Transform - pos: 11.5,4.5 - parent: 588 - - uid: 1041 - components: - - type: Transform - pos: 20.5,28.5 - parent: 588 - - uid: 1225 - components: - - type: Transform - pos: 14.5,34.5 - parent: 588 - - uid: 1226 - components: - - type: Transform - pos: 20.5,36.5 - parent: 588 -- proto: BedsheetSyndie - entities: - - uid: 1037 - components: - - type: Transform - pos: 22.5,24.5 - parent: 588 - - uid: 1766 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 24.5,48.5 - parent: 588 -- proto: BlastDoor - entities: - - uid: 1600 - components: - - type: Transform - pos: 26.5,7.5 - parent: 588 - - uid: 1601 - components: - - type: Transform - pos: 29.5,9.5 - parent: 588 - - uid: 1602 - components: - - type: Transform - pos: 32.5,7.5 - parent: 588 -- proto: Bola - entities: - - uid: 1157 - components: - - type: Transform - pos: 15.616387,0.61007345 - parent: 588 -- proto: BookEscalationSecurity - entities: - - uid: 373 - components: - - type: Transform - pos: 19.42657,0.6288943 - parent: 588 -- proto: BookRandom - entities: - - uid: 1835 - components: - - type: Transform - pos: 24.420084,44.539436 - parent: 588 -- proto: BookSecurity - entities: - - uid: 522 - components: - - type: Transform - pos: 32.41844,8.400207 - parent: 588 -- proto: BoxFolderBlack - entities: - - uid: 365 - components: - - type: Transform - pos: 27.841173,1.5632035 - parent: 588 - - uid: 728 - components: - - type: Transform - pos: 10.690479,19.262342 - parent: 588 -- proto: BoxFolderGrey - entities: - - uid: 364 - components: - - type: Transform - pos: 25.072409,1.4780562 - parent: 588 - - uid: 727 - components: - - type: Transform - pos: 7.2148314,22.575037 - parent: 588 -- proto: BoxFolderRed - entities: - - uid: 329 - components: - - type: Transform - pos: 21.42984,3.6329575 - parent: 588 - - uid: 362 - components: - - type: Transform - pos: 24.788435,1.6057768 - parent: 588 - - uid: 363 - components: - - type: Transform - pos: 28.196142,1.5773941 - parent: 588 - - uid: 726 - components: - - type: Transform - pos: 10.428753,19.429379 - parent: 588 -- proto: BoxMouthSwab - entities: - - uid: 1476 - components: - - type: Transform - pos: 12.356534,44.605965 - parent: 588 -- proto: BoxSterileMask - entities: - - uid: 1477 - components: - - type: Transform - pos: 12.683106,44.705303 - parent: 588 -- proto: BriefcaseBrownFilled - entities: - - uid: 325 - components: - - type: Transform - pos: 19.413612,4.6972914 - parent: 588 -- proto: BrokenBottle - entities: - - uid: 1691 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 25.063513,27.520548 - parent: 588 -- proto: Bucket - entities: - - uid: 1839 - components: - - type: Transform - pos: 29.616838,43.531868 - parent: 588 - - uid: 1857 - components: - - type: Transform - pos: 30.264944,21.705044 - parent: 588 -- proto: CableApcExtension - entities: - - uid: 1 - components: - - type: Transform - pos: 0.5,2.5 - parent: 588 - - uid: 2 - components: - - type: Transform - pos: 1.5,2.5 - parent: 588 - - uid: 3 - components: - - type: Transform - pos: 2.5,2.5 - parent: 588 - - uid: 4 - components: - - type: Transform - pos: 3.5,2.5 - parent: 588 - - uid: 5 - components: - - type: Transform - pos: 4.5,2.5 - parent: 588 - - uid: 6 - components: - - type: Transform - pos: 5.5,2.5 - parent: 588 - - uid: 7 - components: - - type: Transform - pos: 6.5,2.5 - parent: 588 - - uid: 8 - components: - - type: Transform - pos: 7.5,2.5 - parent: 588 - - uid: 9 - components: - - type: Transform - pos: 8.5,2.5 - parent: 588 - - uid: 10 - components: - - type: Transform - pos: 9.5,2.5 - parent: 588 - - uid: 11 - components: - - type: Transform - pos: 10.5,2.5 - parent: 588 - - uid: 12 - components: - - type: Transform - pos: 11.5,2.5 - parent: 588 - - uid: 13 - components: - - type: Transform - pos: 12.5,2.5 - parent: 588 - - uid: 14 - components: - - type: Transform - pos: 13.5,2.5 - parent: 588 - - uid: 15 - components: - - type: Transform - pos: 14.5,2.5 - parent: 588 - - uid: 16 - components: - - type: Transform - pos: 15.5,2.5 - parent: 588 - - uid: 17 - components: - - type: Transform - pos: 16.5,2.5 - parent: 588 - - uid: 18 - components: - - type: Transform - pos: 8.5,4.5 - parent: 588 - - uid: 19 - components: - - type: Transform - pos: 8.5,3.5 - parent: 588 - - uid: 20 - components: - - type: Transform - pos: 8.5,1.5 - parent: 588 - - uid: 21 - components: - - type: Transform - pos: 8.5,0.5 - parent: 588 - - uid: 22 - components: - - type: Transform - pos: 18.5,2.5 - parent: 588 - - uid: 23 - components: - - type: Transform - pos: 19.5,2.5 - parent: 588 - - uid: 24 - components: - - type: Transform - pos: 20.5,2.5 - parent: 588 - - uid: 25 - components: - - type: Transform - pos: 21.5,2.5 - parent: 588 - - uid: 26 - components: - - type: Transform - pos: 22.5,2.5 - parent: 588 - - uid: 27 - components: - - type: Transform - pos: 23.5,2.5 - parent: 588 - - uid: 28 - components: - - type: Transform - pos: 24.5,2.5 - parent: 588 - - uid: 29 - components: - - type: Transform - pos: 25.5,2.5 - parent: 588 - - uid: 30 - components: - - type: Transform - pos: 26.5,2.5 - parent: 588 - - uid: 31 - components: - - type: Transform - pos: 27.5,2.5 - parent: 588 - - uid: 32 - components: - - type: Transform - pos: 28.5,2.5 - parent: 588 - - uid: 33 - components: - - type: Transform - pos: 29.5,2.5 - parent: 588 - - uid: 34 - components: - - type: Transform - pos: 30.5,2.5 - parent: 588 - - uid: 35 - components: - - type: Transform - pos: 31.5,2.5 - parent: 588 - - uid: 36 - components: - - type: Transform - pos: 32.5,2.5 - parent: 588 - - uid: 37 - components: - - type: Transform - pos: 33.5,2.5 - parent: 588 - - uid: 38 - components: - - type: Transform - pos: 34.5,2.5 - parent: 588 - - uid: 39 - components: - - type: Transform - pos: 26.5,4.5 - parent: 588 - - uid: 40 - components: - - type: Transform - pos: 26.5,3.5 - parent: 588 - - uid: 41 - components: - - type: Transform - pos: 26.5,1.5 - parent: 588 - - uid: 42 - components: - - type: Transform - pos: 26.5,0.5 - parent: 588 - - uid: 43 - components: - - type: Transform - pos: 0.5,8.5 - parent: 588 - - uid: 44 - components: - - type: Transform - pos: 1.5,8.5 - parent: 588 - - uid: 52 - components: - - type: Transform - pos: 9.5,8.5 - parent: 588 - - uid: 53 - components: - - type: Transform - pos: 10.5,8.5 - parent: 588 - - uid: 54 - components: - - type: Transform - pos: 5.5,10.5 - parent: 588 - - uid: 57 - components: - - type: Transform - pos: 5.5,6.5 - parent: 588 - - uid: 58 - components: - - type: Transform - pos: 17.5,6.5 - parent: 588 - - uid: 59 - components: - - type: Transform - pos: 17.5,7.5 - parent: 588 - - uid: 60 - components: - - type: Transform - pos: 17.5,8.5 - parent: 588 - - uid: 61 - components: - - type: Transform - pos: 17.5,9.5 - parent: 588 - - uid: 62 - components: - - type: Transform - pos: 17.5,10.5 - parent: 588 - - uid: 63 - components: - - type: Transform - pos: 12.5,8.5 - parent: 588 - - uid: 64 - components: - - type: Transform - pos: 13.5,8.5 - parent: 588 - - uid: 65 - components: - - type: Transform - pos: 14.5,8.5 - parent: 588 - - uid: 66 - components: - - type: Transform - pos: 15.5,8.5 - parent: 588 - - uid: 67 - components: - - type: Transform - pos: 16.5,8.5 - parent: 588 - - uid: 68 - components: - - type: Transform - pos: 18.5,8.5 - parent: 588 - - uid: 69 - components: - - type: Transform - pos: 19.5,8.5 - parent: 588 - - uid: 70 - components: - - type: Transform - pos: 20.5,8.5 - parent: 588 - - uid: 71 - components: - - type: Transform - pos: 21.5,8.5 - parent: 588 - - uid: 72 - components: - - type: Transform - pos: 22.5,8.5 - parent: 588 - - uid: 73 - components: - - type: Transform - pos: 22.5,14.5 - parent: 588 - - uid: 74 - components: - - type: Transform - pos: 21.5,14.5 - parent: 588 - - uid: 75 - components: - - type: Transform - pos: 20.5,14.5 - parent: 588 - - uid: 76 - components: - - type: Transform - pos: 19.5,14.5 - parent: 588 - - uid: 77 - components: - - type: Transform - pos: 18.5,14.5 - parent: 588 - - uid: 78 - components: - - type: Transform - pos: 17.5,14.5 - parent: 588 - - uid: 79 - components: - - type: Transform - pos: 16.5,14.5 - parent: 588 - - uid: 80 - components: - - type: Transform - pos: 19.5,13.5 - parent: 588 - - uid: 81 - components: - - type: Transform - pos: 19.5,12.5 - parent: 588 - - uid: 82 - components: - - type: Transform - pos: 19.5,15.5 - parent: 588 - - uid: 83 - components: - - type: Transform - pos: 19.5,16.5 - parent: 588 - - uid: 84 - components: - - type: Transform - pos: 14.5,14.5 - parent: 588 - - uid: 85 - components: - - type: Transform - pos: 13.5,14.5 - parent: 588 - - uid: 86 - components: - - type: Transform - pos: 12.5,14.5 - parent: 588 - - uid: 87 - components: - - type: Transform - pos: 11.5,14.5 - parent: 588 - - uid: 88 - components: - - type: Transform - pos: 10.5,14.5 - parent: 588 - - uid: 89 - components: - - type: Transform - pos: 9.5,14.5 - parent: 588 - - uid: 90 - components: - - type: Transform - pos: 8.5,14.5 - parent: 588 - - uid: 91 - components: - - type: Transform - pos: 11.5,13.5 - parent: 588 - - uid: 92 - components: - - type: Transform - pos: 11.5,12.5 - parent: 588 - - uid: 93 - components: - - type: Transform - pos: 11.5,15.5 - parent: 588 - - uid: 94 - components: - - type: Transform - pos: 11.5,16.5 - parent: 588 - - uid: 95 - components: - - type: Transform - pos: 6.5,14.5 - parent: 588 - - uid: 96 - components: - - type: Transform - pos: 5.5,14.5 - parent: 588 - - uid: 98 - components: - - type: Transform - pos: 4.5,22.5 - parent: 588 - - uid: 100 - components: - - type: Transform - pos: 1.5,14.5 - parent: 588 - - uid: 101 - components: - - type: Transform - pos: 0.5,14.5 - parent: 588 - - uid: 102 - components: - - type: Transform - pos: 3.5,15.5 - parent: 588 - - uid: 103 - components: - - type: Transform - pos: 3.5,16.5 - parent: 588 - - uid: 104 - components: - - type: Transform - pos: 3.5,13.5 - parent: 588 - - uid: 105 - components: - - type: Transform - pos: 3.5,12.5 - parent: 588 - - uid: 106 - components: - - type: Transform - pos: 14.5,18.5 - parent: 588 - - uid: 107 - components: - - type: Transform - pos: 14.5,19.5 - parent: 588 - - uid: 108 - components: - - type: Transform - pos: 14.5,20.5 - parent: 588 - - uid: 109 - components: - - type: Transform - pos: 14.5,21.5 - parent: 588 - - uid: 110 - components: - - type: Transform - pos: 14.5,22.5 - parent: 588 - - uid: 111 - components: - - type: Transform - pos: 15.5,20.5 - parent: 588 - - uid: 112 - components: - - type: Transform - pos: 16.5,20.5 - parent: 588 - - uid: 113 - components: - - type: Transform - pos: 13.5,20.5 - parent: 588 - - uid: 114 - components: - - type: Transform - pos: 12.5,20.5 - parent: 588 - - uid: 115 - components: - - type: Transform - pos: 8.5,18.5 - parent: 588 - - uid: 116 - components: - - type: Transform - pos: 8.5,19.5 - parent: 588 - - uid: 117 - components: - - type: Transform - pos: 8.5,20.5 - parent: 588 - - uid: 118 - components: - - type: Transform - pos: 8.5,21.5 - parent: 588 - - uid: 119 - components: - - type: Transform - pos: 8.5,22.5 - parent: 588 - - uid: 120 - components: - - type: Transform - pos: 9.5,20.5 - parent: 588 - - uid: 121 - components: - - type: Transform - pos: 10.5,20.5 - parent: 588 - - uid: 122 - components: - - type: Transform - pos: 7.5,20.5 - parent: 588 - - uid: 123 - components: - - type: Transform - pos: 6.5,20.5 - parent: 588 - - uid: 124 - components: - - type: Transform - pos: 2.5,22.5 - parent: 588 - - uid: 125 - components: - - type: Transform - pos: 4.5,21.5 - parent: 588 - - uid: 126 - components: - - type: Transform - pos: 4.5,19.5 - parent: 588 - - uid: 127 - components: - - type: Transform - pos: 3.5,18.5 - parent: 588 - - uid: 128 - components: - - type: Transform - pos: 2.5,18.5 - parent: 588 - - uid: 129 - components: - - type: Transform - pos: 3.5,22.5 - parent: 588 - - uid: 130 - components: - - type: Transform - pos: 0.5,20.5 - parent: 588 - - uid: 131 - components: - - type: Transform - pos: 4.5,18.5 - parent: 588 - - uid: 132 - components: - - type: Transform - pos: 4.5,20.5 - parent: 588 - - uid: 133 - components: - - type: Transform - pos: 1.5,24.5 - parent: 588 - - uid: 134 - components: - - type: Transform - pos: 2.5,25.5 - parent: 588 - - uid: 135 - components: - - type: Transform - pos: 0.5,24.5 - parent: 588 - - uid: 136 - components: - - type: Transform - pos: 2.5,24.5 - parent: 588 - - uid: 137 - components: - - type: Transform - pos: 1.5,28.5 - parent: 588 - - uid: 138 - components: - - type: Transform - pos: 0.5,26.5 - parent: 588 - - uid: 139 - components: - - type: Transform - pos: 2.5,26.5 - parent: 588 - - uid: 147 - components: - - type: Transform - pos: 9.5,28.5 - parent: 588 - - uid: 148 - components: - - type: Transform - pos: 9.5,27.5 - parent: 588 - - uid: 149 - components: - - type: Transform - pos: 9.5,26.5 - parent: 588 - - uid: 150 - components: - - type: Transform - pos: 9.5,25.5 - parent: 588 - - uid: 151 - components: - - type: Transform - pos: 9.5,24.5 - parent: 588 - - uid: 152 - components: - - type: Transform - pos: 8.5,26.5 - parent: 588 - - uid: 153 - components: - - type: Transform - pos: 10.5,26.5 - parent: 588 - - uid: 154 - components: - - type: Transform - pos: 13.5,28.5 - parent: 588 - - uid: 155 - components: - - type: Transform - pos: 13.5,27.5 - parent: 588 - - uid: 156 - components: - - type: Transform - pos: 13.5,26.5 - parent: 588 - - uid: 157 - components: - - type: Transform - pos: 13.5,25.5 - parent: 588 - - uid: 158 - components: - - type: Transform - pos: 13.5,24.5 - parent: 588 - - uid: 159 - components: - - type: Transform - pos: 12.5,26.5 - parent: 588 - - uid: 160 - components: - - type: Transform - pos: 14.5,26.5 - parent: 588 - - uid: 161 - components: - - type: Transform - pos: 0.5,31.5 - parent: 588 - - uid: 162 - components: - - type: Transform - pos: 1.5,31.5 - parent: 588 - - uid: 163 - components: - - type: Transform - pos: 2.5,31.5 - parent: 588 - - uid: 164 - components: - - type: Transform - pos: 3.5,31.5 - parent: 588 - - uid: 165 - components: - - type: Transform - pos: 4.5,31.5 - parent: 588 - - uid: 166 - components: - - type: Transform - pos: 5.5,31.5 - parent: 588 - - uid: 167 - components: - - type: Transform - pos: 6.5,31.5 - parent: 588 - - uid: 168 - components: - - type: Transform - pos: 7.5,31.5 - parent: 588 - - uid: 169 - components: - - type: Transform - pos: 8.5,31.5 - parent: 588 - - uid: 170 - components: - - type: Transform - pos: 9.5,31.5 - parent: 588 - - uid: 171 - components: - - type: Transform - pos: 10.5,31.5 - parent: 588 - - uid: 172 - components: - - type: Transform - pos: 11.5,31.5 - parent: 588 - - uid: 173 - components: - - type: Transform - pos: 12.5,31.5 - parent: 588 - - uid: 174 - components: - - type: Transform - pos: 6.5,30.5 - parent: 588 - - uid: 175 - components: - - type: Transform - pos: 6.5,32.5 - parent: 588 - - uid: 176 - components: - - type: Transform - pos: 26.5,31.5 - parent: 588 - - uid: 177 - components: - - type: Transform - pos: 25.5,31.5 - parent: 588 - - uid: 178 - components: - - type: Transform - pos: 24.5,31.5 - parent: 588 - - uid: 179 - components: - - type: Transform - pos: 23.5,31.5 - parent: 588 - - uid: 180 - components: - - type: Transform - pos: 22.5,31.5 - parent: 588 - - uid: 181 - components: - - type: Transform - pos: 21.5,31.5 - parent: 588 - - uid: 182 - components: - - type: Transform - pos: 20.5,31.5 - parent: 588 - - uid: 183 - components: - - type: Transform - pos: 19.5,31.5 - parent: 588 - - uid: 184 - components: - - type: Transform - pos: 18.5,31.5 - parent: 588 - - uid: 185 - components: - - type: Transform - pos: 17.5,31.5 - parent: 588 - - uid: 186 - components: - - type: Transform - pos: 16.5,31.5 - parent: 588 - - uid: 187 - components: - - type: Transform - pos: 15.5,31.5 - parent: 588 - - uid: 188 - components: - - type: Transform - pos: 14.5,31.5 - parent: 588 - - uid: 189 - components: - - type: Transform - pos: 20.5,32.5 - parent: 588 - - uid: 190 - components: - - type: Transform - pos: 20.5,30.5 - parent: 588 - - uid: 191 - components: - - type: Transform - pos: 22.5,35.5 - parent: 588 - - uid: 192 - components: - - type: Transform - pos: 21.5,35.5 - parent: 588 - - uid: 193 - components: - - type: Transform - pos: 20.5,35.5 - parent: 588 - - uid: 194 - components: - - type: Transform - pos: 19.5,35.5 - parent: 588 - - uid: 195 - components: - - type: Transform - pos: 18.5,35.5 - parent: 588 - - uid: 196 - components: - - type: Transform - pos: 17.5,35.5 - parent: 588 - - uid: 197 - components: - - type: Transform - pos: 16.5,35.5 - parent: 588 - - uid: 198 - components: - - type: Transform - pos: 15.5,35.5 - parent: 588 - - uid: 199 - components: - - type: Transform - pos: 14.5,35.5 - parent: 588 - - uid: 200 - components: - - type: Transform - pos: 13.5,35.5 - parent: 588 - - uid: 201 - components: - - type: Transform - pos: 12.5,35.5 - parent: 588 - - uid: 202 - components: - - type: Transform - pos: 17.5,36.5 - parent: 588 - - uid: 203 - components: - - type: Transform - pos: 17.5,34.5 - parent: 588 - - uid: 204 - components: - - type: Transform - pos: 10.5,35.5 - parent: 588 - - uid: 215 - components: - - type: Transform - pos: 5.5,36.5 - parent: 588 - - uid: 216 - components: - - type: Transform - pos: 5.5,34.5 - parent: 588 - - uid: 217 - components: - - type: Transform - pos: 0.5,39.5 - parent: 588 - - uid: 218 - components: - - type: Transform - pos: 1.5,39.5 - parent: 588 - - uid: 219 - components: - - type: Transform - pos: 2.5,39.5 - parent: 588 - - uid: 220 - components: - - type: Transform - pos: 3.5,39.5 - parent: 588 - - uid: 221 - components: - - type: Transform - pos: 4.5,39.5 - parent: 588 - - uid: 222 - components: - - type: Transform - pos: 5.5,39.5 - parent: 588 - - uid: 223 - components: - - type: Transform - pos: 6.5,39.5 - parent: 588 - - uid: 224 - components: - - type: Transform - pos: 3.5,38.5 - parent: 588 - - uid: 225 - components: - - type: Transform - pos: 3.5,40.5 - parent: 588 - - uid: 226 - components: - - type: Transform - pos: 8.5,39.5 - parent: 588 - - uid: 227 - components: - - type: Transform - pos: 9.5,39.5 - parent: 588 - - uid: 228 - components: - - type: Transform - pos: 10.5,39.5 - parent: 588 - - uid: 229 - components: - - type: Transform - pos: 11.5,39.5 - parent: 588 - - uid: 230 - components: - - type: Transform - pos: 12.5,39.5 - parent: 588 - - uid: 231 - components: - - type: Transform - pos: 13.5,39.5 - parent: 588 - - uid: 232 - components: - - type: Transform - pos: 14.5,39.5 - parent: 588 - - uid: 233 - components: - - type: Transform - pos: 11.5,38.5 - parent: 588 - - uid: 234 - components: - - type: Transform - pos: 11.5,40.5 - parent: 588 - - uid: 235 - components: - - type: Transform - pos: 16.5,39.5 - parent: 588 - - uid: 236 - components: - - type: Transform - pos: 17.5,39.5 - parent: 588 - - uid: 237 - components: - - type: Transform - pos: 18.5,39.5 - parent: 588 - - uid: 238 - components: - - type: Transform - pos: 19.5,39.5 - parent: 588 - - uid: 239 - components: - - type: Transform - pos: 20.5,39.5 - parent: 588 - - uid: 240 - components: - - type: Transform - pos: 21.5,39.5 - parent: 588 - - uid: 241 - components: - - type: Transform - pos: 22.5,39.5 - parent: 588 - - uid: 242 - components: - - type: Transform - pos: 19.5,40.5 - parent: 588 - - uid: 243 - components: - - type: Transform - pos: 19.5,38.5 - parent: 588 - - uid: 284 - components: - - type: Transform - pos: 29.5,26.5 - parent: 588 - - uid: 288 - components: - - type: Transform - pos: 28.5,26.5 - parent: 588 - - uid: 425 - components: - - type: Transform - pos: 1.5,10.5 - parent: 588 - - uid: 438 - components: - - type: Transform - pos: 1.5,9.5 - parent: 588 - - uid: 441 - components: - - type: Transform - pos: 2.5,10.5 - parent: 588 - - uid: 442 - components: - - type: Transform - pos: 3.5,10.5 - parent: 588 - - uid: 443 - components: - - type: Transform - pos: 4.5,10.5 - parent: 588 - - uid: 444 - components: - - type: Transform - pos: 1.5,7.5 - parent: 588 - - uid: 445 - components: - - type: Transform - pos: 1.5,6.5 - parent: 588 - - uid: 446 - components: - - type: Transform - pos: 2.5,6.5 - parent: 588 - - uid: 447 - components: - - type: Transform - pos: 3.5,6.5 - parent: 588 - - uid: 448 - components: - - type: Transform - pos: 4.5,6.5 - parent: 588 - - uid: 449 - components: - - type: Transform - pos: 6.5,6.5 - parent: 588 - - uid: 450 - components: - - type: Transform - pos: 7.5,6.5 - parent: 588 - - uid: 451 - components: - - type: Transform - pos: 8.5,6.5 - parent: 588 - - uid: 452 - components: - - type: Transform - pos: 9.5,6.5 - parent: 588 - - uid: 453 - components: - - type: Transform - pos: 9.5,7.5 - parent: 588 - - uid: 454 - components: - - type: Transform - pos: 9.5,9.5 - parent: 588 - - uid: 455 - components: - - type: Transform - pos: 9.5,10.5 - parent: 588 - - uid: 456 - components: - - type: Transform - pos: 8.5,10.5 - parent: 588 - - uid: 457 - components: - - type: Transform - pos: 7.5,10.5 - parent: 588 - - uid: 472 - components: - - type: Transform - pos: 29.5,14.5 - parent: 588 - - uid: 477 - components: - - type: Transform - pos: 24.5,13.5 - parent: 588 - - uid: 479 - components: - - type: Transform - pos: 30.5,14.5 - parent: 588 - - uid: 493 - components: - - type: Transform - pos: 25.5,13.5 - parent: 588 - - uid: 494 - components: - - type: Transform - pos: 25.5,12.5 - parent: 588 - - uid: 495 - components: - - type: Transform - pos: 26.5,12.5 - parent: 588 - - uid: 496 - components: - - type: Transform - pos: 27.5,12.5 - parent: 588 - - uid: 497 - components: - - type: Transform - pos: 28.5,12.5 - parent: 588 - - uid: 498 - components: - - type: Transform - pos: 29.5,12.5 - parent: 588 - - uid: 500 - components: - - type: Transform - pos: 24.5,12.5 - parent: 588 - - uid: 502 - components: - - type: Transform - pos: 24.5,14.5 - parent: 588 - - uid: 503 - components: - - type: Transform - pos: 24.5,15.5 - parent: 588 - - uid: 504 - components: - - type: Transform - pos: 24.5,16.5 - parent: 588 - - uid: 505 - components: - - type: Transform - pos: 25.5,16.5 - parent: 588 - - uid: 506 - components: - - type: Transform - pos: 26.5,16.5 - parent: 588 - - uid: 507 - components: - - type: Transform - pos: 27.5,16.5 - parent: 588 - - uid: 508 - components: - - type: Transform - pos: 28.5,16.5 - parent: 588 - - uid: 509 - components: - - type: Transform - pos: 29.5,16.5 - parent: 588 - - uid: 514 - components: - - type: Transform - pos: 29.5,13.5 - parent: 588 - - uid: 523 - components: - - type: Transform - pos: 29.5,15.5 - parent: 588 - - uid: 628 - components: - - type: Transform - pos: 1.5,22.5 - parent: 588 - - uid: 639 - components: - - type: Transform - pos: 0.5,22.5 - parent: 588 - - uid: 640 - components: - - type: Transform - pos: 0.5,21.5 - parent: 588 - - uid: 641 - components: - - type: Transform - pos: 0.5,19.5 - parent: 588 - - uid: 642 - components: - - type: Transform - pos: 0.5,18.5 - parent: 588 - - uid: 643 - components: - - type: Transform - pos: 1.5,18.5 - parent: 588 - - uid: 657 - components: - - type: Transform - pos: 2.5,15.5 - parent: 588 - - uid: 661 - components: - - type: Transform - pos: 1.5,15.5 - parent: 588 - - uid: 662 - components: - - type: Transform - pos: 1.5,13.5 - parent: 588 - - uid: 663 - components: - - type: Transform - pos: 2.5,13.5 - parent: 588 - - uid: 664 - components: - - type: Transform - pos: 4.5,13.5 - parent: 588 - - uid: 665 - components: - - type: Transform - pos: 5.5,13.5 - parent: 588 - - uid: 666 - components: - - type: Transform - pos: 5.5,15.5 - parent: 588 - - uid: 667 - components: - - type: Transform - pos: 4.5,15.5 - parent: 588 - - uid: 668 - components: - - type: Transform - pos: 29.5,10.5 - parent: 588 - - uid: 669 - components: - - type: Transform - pos: 28.5,10.5 - parent: 588 - - uid: 670 - components: - - type: Transform - pos: 27.5,10.5 - parent: 588 - - uid: 671 - components: - - type: Transform - pos: 26.5,10.5 - parent: 588 - - uid: 672 - components: - - type: Transform - pos: 25.5,10.5 - parent: 588 - - uid: 673 - components: - - type: Transform - pos: 24.5,10.5 - parent: 588 - - uid: 674 - components: - - type: Transform - pos: 24.5,9.5 - parent: 588 - - uid: 675 - components: - - type: Transform - pos: 24.5,8.5 - parent: 588 - - uid: 676 - components: - - type: Transform - pos: 24.5,7.5 - parent: 588 - - uid: 677 - components: - - type: Transform - pos: 24.5,6.5 - parent: 588 - - uid: 678 - components: - - type: Transform - pos: 25.5,6.5 - parent: 588 - - uid: 679 - components: - - type: Transform - pos: 26.5,6.5 - parent: 588 - - uid: 680 - components: - - type: Transform - pos: 27.5,6.5 - parent: 588 - - uid: 681 - components: - - type: Transform - pos: 28.5,6.5 - parent: 588 - - uid: 682 - components: - - type: Transform - pos: 29.5,6.5 - parent: 588 - - uid: 683 - components: - - type: Transform - pos: 30.5,6.5 - parent: 588 - - uid: 684 - components: - - type: Transform - pos: 31.5,6.5 - parent: 588 - - uid: 685 - components: - - type: Transform - pos: 32.5,6.5 - parent: 588 - - uid: 686 - components: - - type: Transform - pos: 33.5,6.5 - parent: 588 - - uid: 687 - components: - - type: Transform - pos: 34.5,6.5 - parent: 588 - - uid: 688 - components: - - type: Transform - pos: 34.5,7.5 - parent: 588 - - uid: 689 - components: - - type: Transform - pos: 34.5,8.5 - parent: 588 - - uid: 690 - components: - - type: Transform - pos: 34.5,9.5 - parent: 588 - - uid: 691 - components: - - type: Transform - pos: 34.5,10.5 - parent: 588 - - uid: 692 - components: - - type: Transform - pos: 33.5,10.5 - parent: 588 - - uid: 693 - components: - - type: Transform - pos: 32.5,10.5 - parent: 588 - - uid: 694 - components: - - type: Transform - pos: 31.5,10.5 - parent: 588 - - uid: 695 - components: - - type: Transform - pos: 30.5,10.5 - parent: 588 - - uid: 733 - components: - - type: Transform - pos: 20.5,18.5 - parent: 588 - - uid: 734 - components: - - type: Transform - pos: 20.5,19.5 - parent: 588 - - uid: 735 - components: - - type: Transform - pos: 20.5,20.5 - parent: 588 - - uid: 736 - components: - - type: Transform - pos: 20.5,21.5 - parent: 588 - - uid: 737 - components: - - type: Transform - pos: 20.5,22.5 - parent: 588 - - uid: 738 - components: - - type: Transform - pos: 21.5,20.5 - parent: 588 - - uid: 739 - components: - - type: Transform - pos: 22.5,20.5 - parent: 588 - - uid: 740 - components: - - type: Transform - pos: 19.5,20.5 - parent: 588 - - uid: 741 - components: - - type: Transform - pos: 18.5,20.5 - parent: 588 - - uid: 751 - components: - - type: Transform - pos: 32.5,22.5 - parent: 588 - - uid: 752 - components: - - type: Transform - pos: 32.5,21.5 - parent: 588 - - uid: 753 - components: - - type: Transform - pos: 32.5,20.5 - parent: 588 - - uid: 754 - components: - - type: Transform - pos: 32.5,19.5 - parent: 588 - - uid: 755 - components: - - type: Transform - pos: 32.5,18.5 - parent: 588 - - uid: 756 - components: - - type: Transform - pos: 31.5,20.5 - parent: 588 - - uid: 757 - components: - - type: Transform - pos: 30.5,20.5 - parent: 588 - - uid: 758 - components: - - type: Transform - pos: 33.5,20.5 - parent: 588 - - uid: 759 - components: - - type: Transform - pos: 34.5,20.5 - parent: 588 - - uid: 779 - components: - - type: Transform - pos: 25.5,19.5 - parent: 588 - - uid: 780 - components: - - type: Transform - pos: 25.5,18.5 - parent: 588 - - uid: 781 - components: - - type: Transform - pos: 24.5,18.5 - parent: 588 - - uid: 782 - components: - - type: Transform - pos: 24.5,19.5 - parent: 588 - - uid: 783 - components: - - type: Transform - pos: 24.5,20.5 - parent: 588 - - uid: 784 - components: - - type: Transform - pos: 24.5,21.5 - parent: 588 - - uid: 785 - components: - - type: Transform - pos: 24.5,22.5 - parent: 588 - - uid: 786 - components: - - type: Transform - pos: 25.5,22.5 - parent: 588 - - uid: 787 - components: - - type: Transform - pos: 26.5,22.5 - parent: 588 - - uid: 788 - components: - - type: Transform - pos: 27.5,22.5 - parent: 588 - - uid: 789 - components: - - type: Transform - pos: 28.5,22.5 - parent: 588 - - uid: 790 - components: - - type: Transform - pos: 28.5,21.5 - parent: 588 - - uid: 791 - components: - - type: Transform - pos: 28.5,20.5 - parent: 588 - - uid: 792 - components: - - type: Transform - pos: 28.5,19.5 - parent: 588 - - uid: 793 - components: - - type: Transform - pos: 28.5,18.5 - parent: 588 - - uid: 794 - components: - - type: Transform - pos: 27.5,18.5 - parent: 588 - - uid: 795 - components: - - type: Transform - pos: 26.5,18.5 - parent: 588 - - uid: 815 - components: - - type: Transform - pos: 0.5,25.5 - parent: 588 - - uid: 816 - components: - - type: Transform - pos: 0.5,27.5 - parent: 588 - - uid: 817 - components: - - type: Transform - pos: 0.5,28.5 - parent: 588 - - uid: 818 - components: - - type: Transform - pos: 2.5,28.5 - parent: 588 - - uid: 819 - components: - - type: Transform - pos: 2.5,27.5 - parent: 588 - - uid: 869 - components: - - type: Transform - pos: 5.5,24.5 - parent: 588 - - uid: 870 - components: - - type: Transform - pos: 6.5,24.5 - parent: 588 - - uid: 871 - components: - - type: Transform - pos: 6.5,25.5 - parent: 588 - - uid: 872 - components: - - type: Transform - pos: 6.5,26.5 - parent: 588 - - uid: 873 - components: - - type: Transform - pos: 6.5,27.5 - parent: 588 - - uid: 874 - components: - - type: Transform - pos: 6.5,28.5 - parent: 588 - - uid: 875 - components: - - type: Transform - pos: 5.5,28.5 - parent: 588 - - uid: 876 - components: - - type: Transform - pos: 4.5,28.5 - parent: 588 - - uid: 877 - components: - - type: Transform - pos: 4.5,27.5 - parent: 588 - - uid: 878 - components: - - type: Transform - pos: 4.5,26.5 - parent: 588 - - uid: 912 - components: - - type: Transform - pos: 6.5,10.5 - parent: 588 - - uid: 927 - components: - - type: Transform - pos: 34.5,36.5 - parent: 588 - - uid: 928 - components: - - type: Transform - pos: 32.5,36.5 - parent: 588 - - uid: 996 - components: - - type: Transform - pos: 21.5,32.5 - parent: 588 - - uid: 1079 - components: - - type: Transform - pos: 32.5,35.5 - parent: 588 - - uid: 1080 - components: - - type: Transform - pos: 31.5,35.5 - parent: 588 - - uid: 1081 - components: - - type: Transform - pos: 32.5,34.5 - parent: 588 - - uid: 1082 - components: - - type: Transform - pos: 29.5,34.5 - parent: 588 - - uid: 1083 - components: - - type: Transform - pos: 24.5,35.5 - parent: 588 - - uid: 1084 - components: - - type: Transform - pos: 27.5,35.5 - parent: 588 - - uid: 1085 - components: - - type: Transform - pos: 29.5,35.5 - parent: 588 - - uid: 1086 - components: - - type: Transform - pos: 28.5,35.5 - parent: 588 - - uid: 1089 - components: - - type: Transform - pos: 4.5,36.5 - parent: 588 - - uid: 1090 - components: - - type: Transform - pos: 33.5,34.5 - parent: 588 - - uid: 1091 - components: - - type: Transform - pos: 5.5,35.5 - parent: 588 - - uid: 1092 - components: - - type: Transform - pos: 29.5,36.5 - parent: 588 - - uid: 1093 - components: - - type: Transform - pos: 34.5,34.5 - parent: 588 - - uid: 1094 - components: - - type: Transform - pos: 34.5,35.5 - parent: 588 - - uid: 1095 - components: - - type: Transform - pos: 26.5,35.5 - parent: 588 - - uid: 1096 - components: - - type: Transform - pos: 25.5,35.5 - parent: 588 - - uid: 1097 - components: - - type: Transform - pos: 33.5,36.5 - parent: 588 - - uid: 1098 - components: - - type: Transform - pos: 30.5,35.5 - parent: 588 - - uid: 1117 - components: - - type: Transform - pos: 16.5,26.5 - parent: 588 - - uid: 1121 - components: - - type: Transform - pos: 17.5,26.5 - parent: 588 - - uid: 1122 - components: - - type: Transform - pos: 18.5,26.5 - parent: 588 - - uid: 1123 - components: - - type: Transform - pos: 17.5,27.5 - parent: 588 - - uid: 1124 - components: - - type: Transform - pos: 17.5,28.5 - parent: 588 - - uid: 1125 - components: - - type: Transform - pos: 17.5,24.5 - parent: 588 - - uid: 1126 - components: - - type: Transform - pos: 17.5,25.5 - parent: 588 - - uid: 1127 - components: - - type: Transform - pos: 20.5,26.5 - parent: 588 - - uid: 1128 - components: - - type: Transform - pos: 21.5,26.5 - parent: 588 - - uid: 1129 - components: - - type: Transform - pos: 22.5,26.5 - parent: 588 - - uid: 1130 - components: - - type: Transform - pos: 21.5,27.5 - parent: 588 - - uid: 1131 - components: - - type: Transform - pos: 21.5,28.5 - parent: 588 - - uid: 1132 - components: - - type: Transform - pos: 21.5,25.5 - parent: 588 - - uid: 1133 - components: - - type: Transform - pos: 21.5,24.5 - parent: 588 - - uid: 1134 - components: - - type: Transform - pos: 24.5,26.5 - parent: 588 - - uid: 1135 - components: - - type: Transform - pos: 25.5,26.5 - parent: 588 - - uid: 1136 - components: - - type: Transform - pos: 26.5,26.5 - parent: 588 - - uid: 1137 - components: - - type: Transform - pos: 25.5,27.5 - parent: 588 - - uid: 1138 - components: - - type: Transform - pos: 25.5,28.5 - parent: 588 - - uid: 1139 - components: - - type: Transform - pos: 25.5,25.5 - parent: 588 - - uid: 1140 - components: - - type: Transform - pos: 25.5,24.5 - parent: 588 - - uid: 1170 - components: - - type: Transform - pos: 3.5,36.5 - parent: 588 - - uid: 1171 - components: - - type: Transform - pos: 2.5,36.5 - parent: 588 - - uid: 1172 - components: - - type: Transform - pos: 1.5,36.5 - parent: 588 - - uid: 1173 - components: - - type: Transform - pos: 0.5,36.5 - parent: 588 - - uid: 1174 - components: - - type: Transform - pos: 0.5,35.5 - parent: 588 - - uid: 1175 - components: - - type: Transform - pos: 6.5,34.5 - parent: 588 - - uid: 1176 - components: - - type: Transform - pos: 7.5,34.5 - parent: 588 - - uid: 1177 - components: - - type: Transform - pos: 8.5,34.5 - parent: 588 - - uid: 1178 - components: - - type: Transform - pos: 9.5,34.5 - parent: 588 - - uid: 1179 - components: - - type: Transform - pos: 10.5,34.5 - parent: 588 - - uid: 1268 - components: - - type: Transform - pos: 30.5,26.5 - parent: 588 - - uid: 1269 - components: - - type: Transform - pos: 29.5,27.5 - parent: 588 - - uid: 1270 - components: - - type: Transform - pos: 29.5,28.5 - parent: 588 - - uid: 1271 - components: - - type: Transform - pos: 29.5,25.5 - parent: 588 - - uid: 1272 - components: - - type: Transform - pos: 29.5,24.5 - parent: 588 - - uid: 1273 - components: - - type: Transform - pos: 32.5,26.5 - parent: 588 - - uid: 1274 - components: - - type: Transform - pos: 33.5,26.5 - parent: 588 - - uid: 1275 - components: - - type: Transform - pos: 34.5,26.5 - parent: 588 - - uid: 1276 - components: - - type: Transform - pos: 33.5,27.5 - parent: 588 - - uid: 1277 - components: - - type: Transform - pos: 33.5,28.5 - parent: 588 - - uid: 1278 - components: - - type: Transform - pos: 33.5,25.5 - parent: 588 - - uid: 1279 - components: - - type: Transform - pos: 33.5,24.5 - parent: 588 - - uid: 1306 - components: - - type: Transform - pos: 27.5,40.5 - parent: 588 - - uid: 1307 - components: - - type: Transform - pos: 26.5,40.5 - parent: 588 - - uid: 1308 - components: - - type: Transform - pos: 25.5,40.5 - parent: 588 - - uid: 1309 - components: - - type: Transform - pos: 24.5,40.5 - parent: 588 - - uid: 1310 - components: - - type: Transform - pos: 24.5,39.5 - parent: 588 - - uid: 1311 - components: - - type: Transform - pos: 24.5,38.5 - parent: 588 - - uid: 1312 - components: - - type: Transform - pos: 25.5,38.5 - parent: 588 - - uid: 1313 - components: - - type: Transform - pos: 26.5,38.5 - parent: 588 - - uid: 1314 - components: - - type: Transform - pos: 27.5,38.5 - parent: 588 - - uid: 1315 - components: - - type: Transform - pos: 28.5,38.5 - parent: 588 - - uid: 1316 - components: - - type: Transform - pos: 29.5,38.5 - parent: 588 - - uid: 1317 - components: - - type: Transform - pos: 30.5,38.5 - parent: 588 - - uid: 1318 - components: - - type: Transform - pos: 30.5,39.5 - parent: 588 - - uid: 1426 - components: - - type: Transform - pos: 11.5,42.5 - parent: 588 - - uid: 1427 - components: - - type: Transform - pos: 11.5,43.5 - parent: 588 - - uid: 1428 - components: - - type: Transform - pos: 11.5,44.5 - parent: 588 - - uid: 1429 - components: - - type: Transform - pos: 11.5,45.5 - parent: 588 - - uid: 1430 - components: - - type: Transform - pos: 11.5,46.5 - parent: 588 - - uid: 1431 - components: - - type: Transform - pos: 11.5,47.5 - parent: 588 - - uid: 1432 - components: - - type: Transform - pos: 11.5,48.5 - parent: 588 - - uid: 1433 - components: - - type: Transform - pos: 10.5,45.5 - parent: 588 - - uid: 1434 - components: - - type: Transform - pos: 9.5,45.5 - parent: 588 - - uid: 1435 - components: - - type: Transform - pos: 8.5,45.5 - parent: 588 - - uid: 1436 - components: - - type: Transform - pos: 12.5,45.5 - parent: 588 - - uid: 1437 - components: - - type: Transform - pos: 13.5,45.5 - parent: 588 - - uid: 1438 - components: - - type: Transform - pos: 14.5,45.5 - parent: 588 - - uid: 1439 - components: - - type: Transform - pos: 13.5,46.5 - parent: 588 - - uid: 1440 - components: - - type: Transform - pos: 13.5,47.5 - parent: 588 - - uid: 1441 - components: - - type: Transform - pos: 9.5,46.5 - parent: 588 - - uid: 1442 - components: - - type: Transform - pos: 9.5,47.5 - parent: 588 - - uid: 1443 - components: - - type: Transform - pos: 10.5,43.5 - parent: 588 - - uid: 1444 - components: - - type: Transform - pos: 9.5,43.5 - parent: 588 - - uid: 1445 - components: - - type: Transform - pos: 12.5,43.5 - parent: 588 - - uid: 1446 - components: - - type: Transform - pos: 13.5,43.5 - parent: 588 - - uid: 1447 - components: - - type: Transform - pos: 3.5,42.5 - parent: 588 - - uid: 1448 - components: - - type: Transform - pos: 3.5,43.5 - parent: 588 - - uid: 1449 - components: - - type: Transform - pos: 3.5,44.5 - parent: 588 - - uid: 1450 - components: - - type: Transform - pos: 3.5,45.5 - parent: 588 - - uid: 1451 - components: - - type: Transform - pos: 3.5,46.5 - parent: 588 - - uid: 1452 - components: - - type: Transform - pos: 3.5,47.5 - parent: 588 - - uid: 1453 - components: - - type: Transform - pos: 3.5,48.5 - parent: 588 - - uid: 1454 - components: - - type: Transform - pos: 0.5,45.5 - parent: 588 - - uid: 1455 - components: - - type: Transform - pos: 1.5,45.5 - parent: 588 - - uid: 1456 - components: - - type: Transform - pos: 2.5,45.5 - parent: 588 - - uid: 1457 - components: - - type: Transform - pos: 3.5,45.5 - parent: 588 - - uid: 1458 - components: - - type: Transform - pos: 4.5,45.5 - parent: 588 - - uid: 1459 - components: - - type: Transform - pos: 5.5,45.5 - parent: 588 - - uid: 1460 - components: - - type: Transform - pos: 6.5,45.5 - parent: 588 - - uid: 1529 - components: - - type: Transform - pos: 19.5,47.5 - parent: 588 - - uid: 1530 - components: - - type: Transform - pos: 19.5,48.5 - parent: 588 - - uid: 1531 - components: - - type: Transform - pos: 18.5,48.5 - parent: 588 - - uid: 1532 - components: - - type: Transform - pos: 17.5,48.5 - parent: 588 - - uid: 1533 - components: - - type: Transform - pos: 16.5,48.5 - parent: 588 - - uid: 1534 - components: - - type: Transform - pos: 16.5,47.5 - parent: 588 - - uid: 1535 - components: - - type: Transform - pos: 16.5,46.5 - parent: 588 - - uid: 1536 - components: - - type: Transform - pos: 16.5,45.5 - parent: 588 - - uid: 1537 - components: - - type: Transform - pos: 16.5,44.5 - parent: 588 - - uid: 1538 - components: - - type: Transform - pos: 16.5,43.5 - parent: 588 - - uid: 1539 - components: - - type: Transform - pos: 16.5,42.5 - parent: 588 - - uid: 1540 - components: - - type: Transform - pos: 17.5,42.5 - parent: 588 - - uid: 1541 - components: - - type: Transform - pos: 18.5,42.5 - parent: 588 - - uid: 1542 - components: - - type: Transform - pos: 19.5,42.5 - parent: 588 - - uid: 1543 - components: - - type: Transform - pos: 20.5,42.5 - parent: 588 - - uid: 1544 - components: - - type: Transform - pos: 21.5,42.5 - parent: 588 - - uid: 1545 - components: - - type: Transform - pos: 22.5,42.5 - parent: 588 - - uid: 1546 - components: - - type: Transform - pos: 22.5,43.5 - parent: 588 - - uid: 1547 - components: - - type: Transform - pos: 22.5,44.5 - parent: 588 - - uid: 1548 - components: - - type: Transform - pos: 22.5,45.5 - parent: 588 - - uid: 1549 - components: - - type: Transform - pos: 22.5,46.5 - parent: 588 - - uid: 1550 - components: - - type: Transform - pos: 22.5,47.5 - parent: 588 - - uid: 1551 - components: - - type: Transform - pos: 22.5,48.5 - parent: 588 - - uid: 1552 - components: - - type: Transform - pos: 21.5,48.5 - parent: 588 - - uid: 1553 - components: - - type: Transform - pos: 20.5,48.5 - parent: 588 - - uid: 1554 - components: - - type: Transform - pos: 19.5,43.5 - parent: 588 - - uid: 1555 - components: - - type: Transform - pos: 19.5,44.5 - parent: 588 - - uid: 1556 - components: - - type: Transform - pos: 19.5,45.5 - parent: 588 - - uid: 1557 - components: - - type: Transform - pos: 19.5,46.5 - parent: 588 - - uid: 1807 - components: - - type: Transform - pos: 27.5,42.5 - parent: 588 - - uid: 1808 - components: - - type: Transform - pos: 27.5,43.5 - parent: 588 - - uid: 1809 - components: - - type: Transform - pos: 27.5,44.5 - parent: 588 - - uid: 1810 - components: - - type: Transform - pos: 27.5,45.5 - parent: 588 - - uid: 1811 - components: - - type: Transform - pos: 27.5,46.5 - parent: 588 - - uid: 1812 - components: - - type: Transform - pos: 27.5,47.5 - parent: 588 - - uid: 1813 - components: - - type: Transform - pos: 27.5,48.5 - parent: 588 - - uid: 1814 - components: - - type: Transform - pos: 28.5,45.5 - parent: 588 - - uid: 1815 - components: - - type: Transform - pos: 29.5,45.5 - parent: 588 - - uid: 1816 - components: - - type: Transform - pos: 30.5,45.5 - parent: 588 - - uid: 1817 - components: - - type: Transform - pos: 26.5,45.5 - parent: 588 - - uid: 1818 - components: - - type: Transform - pos: 25.5,45.5 - parent: 588 - - uid: 1819 - components: - - type: Transform - pos: 24.5,45.5 - parent: 588 - - uid: 1820 - components: - - type: Transform - pos: 26.5,47.5 - parent: 588 - - uid: 1821 - components: - - type: Transform - pos: 25.5,47.5 - parent: 588 - - uid: 1822 - components: - - type: Transform - pos: 28.5,47.5 - parent: 588 - - uid: 1823 - components: - - type: Transform - pos: 29.5,47.5 - parent: 588 - - uid: 1824 - components: - - type: Transform - pos: 26.5,43.5 - parent: 588 - - uid: 1825 - components: - - type: Transform - pos: 25.5,43.5 - parent: 588 - - uid: 1826 - components: - - type: Transform - pos: 28.5,43.5 - parent: 588 - - uid: 1827 - components: - - type: Transform - pos: 29.5,43.5 - parent: 588 -- proto: CableApcStack1 - entities: - - uid: 655 - components: - - type: Transform - pos: 16.273203,19.650417 - parent: 588 -- proto: CableHV - entities: - - uid: 462 - components: - - type: Transform - pos: 27.5,13.5 - parent: 588 - - uid: 466 - components: - - type: Transform - pos: 26.5,13.5 - parent: 588 - - uid: 468 - components: - - type: Transform - pos: 28.5,13.5 - parent: 588 - - uid: 485 - components: - - type: Transform - pos: 26.5,15.5 - parent: 588 - - uid: 486 - components: - - type: Transform - pos: 26.5,14.5 - parent: 588 - - uid: 487 - components: - - type: Transform - pos: 27.5,14.5 - parent: 588 - - uid: 488 - components: - - type: Transform - pos: 28.5,14.5 - parent: 588 - - uid: 489 - components: - - type: Transform - pos: 28.5,15.5 - parent: 588 - - uid: 743 - components: - - type: Transform - pos: 26.5,21.5 - parent: 588 - - uid: 744 - components: - - type: Transform - pos: 27.5,21.5 - parent: 588 - - uid: 745 - components: - - type: Transform - pos: 26.5,20.5 - parent: 588 - - uid: 746 - components: - - type: Transform - pos: 25.5,21.5 - parent: 588 - - uid: 768 - components: - - type: Transform - pos: 26.5,19.5 - parent: 588 - - uid: 778 - components: - - type: Transform - pos: 27.5,19.5 - parent: 588 - - uid: 978 - components: - - type: Transform - pos: 16.5,32.5 - parent: 588 - - uid: 979 - components: - - type: Transform - pos: 15.5,31.5 - parent: 588 - - uid: 980 - components: - - type: Transform - pos: 16.5,31.5 - parent: 588 - - uid: 981 - components: - - type: Transform - pos: 17.5,31.5 - parent: 588 - - uid: 982 - components: - - type: Transform - pos: 18.5,31.5 - parent: 588 - - uid: 983 - components: - - type: Transform - pos: 22.5,31.5 - parent: 588 - - uid: 984 - components: - - type: Transform - pos: 23.5,31.5 - parent: 588 - - uid: 985 - components: - - type: Transform - pos: 24.5,31.5 - parent: 588 - - uid: 986 - components: - - type: Transform - pos: 24.5,32.5 - parent: 588 - - uid: 987 - components: - - type: Transform - pos: 25.5,31.5 - parent: 588 - - uid: 989 - components: - - type: Transform - pos: 18.5,32.5 - parent: 588 - - uid: 990 - components: - - type: Transform - pos: 19.5,32.5 - parent: 588 - - uid: 991 - components: - - type: Transform - pos: 20.5,32.5 - parent: 588 - - uid: 992 - components: - - type: Transform - pos: 21.5,32.5 - parent: 588 - - uid: 993 - components: - - type: Transform - pos: 22.5,32.5 - parent: 588 - - uid: 1003 - components: - - type: Transform - pos: 16.5,30.5 - parent: 588 - - uid: 1004 - components: - - type: Transform - pos: 24.5,30.5 - parent: 588 - - uid: 1510 - components: - - type: Transform - pos: 18.5,44.5 - parent: 588 - - uid: 1511 - components: - - type: Transform - pos: 18.5,45.5 - parent: 588 - - uid: 1512 - components: - - type: Transform - pos: 20.5,45.5 - parent: 588 - - uid: 1513 - components: - - type: Transform - pos: 20.5,44.5 - parent: 588 - - uid: 1514 - components: - - type: Transform - pos: 19.5,44.5 - parent: 588 - - uid: 1522 - components: - - type: Transform - pos: 17.5,46.5 - parent: 588 - - uid: 1523 - components: - - type: Transform - pos: 21.5,46.5 - parent: 588 - - uid: 1524 - components: - - type: Transform - pos: 20.5,46.5 - parent: 588 - - uid: 1525 - components: - - type: Transform - pos: 18.5,46.5 - parent: 588 - - uid: 1526 - components: - - type: Transform - pos: 19.5,46.5 - parent: 588 -- proto: CableMV - entities: - - uid: 490 - components: - - type: Transform - pos: 27.5,13.5 - parent: 588 - - uid: 491 - components: - - type: Transform - pos: 26.5,13.5 - parent: 588 - - uid: 492 - components: - - type: Transform - pos: 25.5,13.5 - parent: 588 - - uid: 775 - components: - - type: Transform - pos: 27.5,19.5 - parent: 588 - - uid: 776 - components: - - type: Transform - pos: 26.5,19.5 - parent: 588 - - uid: 777 - components: - - type: Transform - pos: 25.5,19.5 - parent: 588 - - uid: 1527 - components: - - type: Transform - pos: 19.5,46.5 - parent: 588 - - uid: 1528 - components: - - type: Transform - pos: 19.5,47.5 - parent: 588 -- proto: CableTerminal - entities: - - uid: 463 - components: - - type: Transform - pos: 26.5,14.5 - parent: 588 - - uid: 464 - components: - - type: Transform - pos: 27.5,14.5 - parent: 588 - - uid: 465 - components: - - type: Transform - pos: 28.5,14.5 - parent: 588 - - uid: 767 - components: - - type: Transform - pos: 26.5,20.5 - parent: 588 - - uid: 970 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 18.5,31.5 - parent: 588 - - uid: 976 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 22.5,31.5 - parent: 588 - - uid: 1558 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 18.5,45.5 - parent: 588 - - uid: 1559 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 20.5,45.5 - parent: 588 -- proto: Carpet - entities: - - uid: 1632 - components: - - type: Transform - pos: 24.5,0.5 - parent: 588 - - uid: 1633 - components: - - type: Transform - pos: 25.5,0.5 - parent: 588 - - uid: 1634 - components: - - type: Transform - pos: 25.5,1.5 - parent: 588 - - uid: 1635 - components: - - type: Transform - pos: 24.5,1.5 - parent: 588 -- proto: CarpetBlue - entities: - - uid: 1636 - components: - - type: Transform - pos: 27.5,0.5 - parent: 588 - - uid: 1637 - components: - - type: Transform - pos: 28.5,1.5 - parent: 588 - - uid: 1638 - components: - - type: Transform - pos: 27.5,1.5 - parent: 588 - - uid: 1639 - components: - - type: Transform - pos: 28.5,0.5 - parent: 588 -- proto: CarpetPurple - entities: - - uid: 1626 - components: - - type: Transform - pos: 25.5,4.5 - parent: 588 - - uid: 1627 - components: - - type: Transform - pos: 25.5,3.5 - parent: 588 - - uid: 1628 - components: - - type: Transform - pos: 26.5,3.5 - parent: 588 - - uid: 1629 - components: - - type: Transform - pos: 27.5,3.5 - parent: 588 - - uid: 1630 - components: - - type: Transform - pos: 27.5,4.5 - parent: 588 - - uid: 1631 - components: - - type: Transform - pos: 26.5,4.5 - parent: 588 -- proto: Catwalk - entities: - - uid: 141 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 6.5,24.5 - parent: 588 - - uid: 142 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 6.5,26.5 - parent: 588 - - uid: 143 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 6.5,25.5 - parent: 588 - - uid: 248 - components: - - type: Transform - pos: 8.5,4.5 - parent: 588 - - uid: 249 - components: - - type: Transform - pos: 8.5,2.5 - parent: 588 - - uid: 250 - components: - - type: Transform - pos: 8.5,3.5 - parent: 588 - - uid: 251 - components: - - type: Transform - pos: 8.5,1.5 - parent: 588 - - uid: 471 - components: - - type: Transform - pos: 27.5,14.5 - parent: 588 - - uid: 473 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 29.5,12.5 - parent: 588 - - uid: 474 - components: - - type: Transform - pos: 28.5,14.5 - parent: 588 - - uid: 475 - components: - - type: Transform - pos: 26.5,14.5 - parent: 588 - - uid: 512 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 25.5,12.5 - parent: 588 - - uid: 513 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 28.5,12.5 - parent: 588 - - uid: 515 - components: - - type: Transform - pos: 25.5,16.5 - parent: 588 - - uid: 516 - components: - - type: Transform - pos: 26.5,16.5 - parent: 588 - - uid: 517 - components: - - type: Transform - pos: 27.5,16.5 - parent: 588 - - uid: 518 - components: - - type: Transform - pos: 28.5,16.5 - parent: 588 - - uid: 519 - components: - - type: Transform - pos: 29.5,16.5 - parent: 588 - - uid: 520 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 27.5,12.5 - parent: 588 - - uid: 521 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 26.5,12.5 - parent: 588 - - uid: 769 - components: - - type: Transform - pos: 26.5,20.5 - parent: 588 - - uid: 832 - components: - - type: Transform - pos: 3.5,31.5 - parent: 588 - - uid: 833 - components: - - type: Transform - pos: 4.5,31.5 - parent: 588 - - uid: 834 - components: - - type: Transform - pos: 5.5,31.5 - parent: 588 - - uid: 835 - components: - - type: Transform - pos: 6.5,31.5 - parent: 588 - - uid: 836 - components: - - type: Transform - pos: 7.5,31.5 - parent: 588 - - uid: 837 - components: - - type: Transform - pos: 8.5,31.5 - parent: 588 - - uid: 838 - components: - - type: Transform - pos: 9.5,31.5 - parent: 588 - - uid: 839 - components: - - type: Transform - pos: 6.5,32.5 - parent: 588 - - uid: 840 - components: - - type: Transform - pos: 6.5,30.5 - parent: 588 - - uid: 841 - components: - - type: Transform - pos: 5.5,32.5 - parent: 588 - - uid: 842 - components: - - type: Transform - pos: 7.5,32.5 - parent: 588 - - uid: 843 - components: - - type: Transform - pos: 5.5,30.5 - parent: 588 - - uid: 844 - components: - - type: Transform - pos: 7.5,30.5 - parent: 588 - - uid: 861 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 6.5,27.5 - parent: 588 - - uid: 862 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 6.5,28.5 - parent: 588 - - uid: 863 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 4.5,28.5 - parent: 588 - - uid: 864 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 4.5,27.5 - parent: 588 - - uid: 865 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 4.5,26.5 - parent: 588 - - uid: 879 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 3.5,40.5 - parent: 588 - - uid: 880 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 3.5,39.5 - parent: 588 - - uid: 881 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 2.5,39.5 - parent: 588 - - uid: 882 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 1.5,39.5 - parent: 588 - - uid: 883 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 4.5,39.5 - parent: 588 - - uid: 884 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 5.5,39.5 - parent: 588 - - uid: 885 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 3.5,38.5 - parent: 588 - - uid: 914 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 3.5,10.5 - parent: 588 - - uid: 915 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 4.5,10.5 - parent: 588 - - uid: 916 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 5.5,10.5 - parent: 588 - - uid: 917 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 6.5,10.5 - parent: 588 - - uid: 918 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 7.5,10.5 - parent: 588 - - uid: 919 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 3.5,6.5 - parent: 588 - - uid: 920 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 4.5,6.5 - parent: 588 - - uid: 921 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 5.5,6.5 - parent: 588 - - uid: 922 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 6.5,6.5 - parent: 588 - - uid: 923 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 7.5,6.5 - parent: 588 - - uid: 955 - components: - - type: Transform - pos: 15.5,31.5 - parent: 588 - - uid: 956 - components: - - type: Transform - pos: 16.5,31.5 - parent: 588 - - uid: 957 - components: - - type: Transform - pos: 17.5,31.5 - parent: 588 - - uid: 958 - components: - - type: Transform - pos: 18.5,31.5 - parent: 588 - - uid: 959 - components: - - type: Transform - pos: 19.5,31.5 - parent: 588 - - uid: 960 - components: - - type: Transform - pos: 20.5,31.5 - parent: 588 - - uid: 961 - components: - - type: Transform - pos: 21.5,31.5 - parent: 588 - - uid: 962 - components: - - type: Transform - pos: 22.5,31.5 - parent: 588 - - uid: 963 - components: - - type: Transform - pos: 23.5,31.5 - parent: 588 - - uid: 964 - components: - - type: Transform - pos: 24.5,31.5 - parent: 588 - - uid: 965 - components: - - type: Transform - pos: 25.5,31.5 - parent: 588 - - uid: 994 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 20.5,32.5 - parent: 588 - - uid: 1158 - components: - - type: Transform - pos: 8.5,0.5 - parent: 588 - - uid: 1180 - components: - - type: Transform - pos: 1.5,36.5 - parent: 588 - - uid: 1181 - components: - - type: Transform - pos: 2.5,36.5 - parent: 588 - - uid: 1182 - components: - - type: Transform - pos: 3.5,36.5 - parent: 588 - - uid: 1183 - components: - - type: Transform - pos: 4.5,36.5 - parent: 588 - - uid: 1184 - components: - - type: Transform - pos: 5.5,36.5 - parent: 588 - - uid: 1185 - components: - - type: Transform - pos: 5.5,34.5 - parent: 588 - - uid: 1186 - components: - - type: Transform - pos: 6.5,34.5 - parent: 588 - - uid: 1187 - components: - - type: Transform - pos: 7.5,34.5 - parent: 588 - - uid: 1188 - components: - - type: Transform - pos: 8.5,34.5 - parent: 588 - - uid: 1189 - components: - - type: Transform - pos: 9.5,34.5 - parent: 588 - - uid: 1320 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 27.5,40.5 - parent: 588 - - uid: 1321 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 26.5,40.5 - parent: 588 - - uid: 1322 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 25.5,40.5 - parent: 588 - - uid: 1323 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 25.5,38.5 - parent: 588 - - uid: 1324 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 26.5,38.5 - parent: 588 - - uid: 1325 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 27.5,38.5 - parent: 588 - - uid: 1326 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 28.5,38.5 - parent: 588 - - uid: 1327 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 29.5,38.5 - parent: 588 - - uid: 1331 - components: - - type: Transform - pos: 4.5,45.5 - parent: 588 - - uid: 1336 - components: - - type: Transform - pos: 2.5,45.5 - parent: 588 - - uid: 1339 - components: - - type: Transform - pos: 3.5,45.5 - parent: 588 - - uid: 1342 - components: - - type: Transform - pos: 3.5,46.5 - parent: 588 - - uid: 1344 - components: - - type: Transform - pos: 3.5,44.5 - parent: 588 - - uid: 1346 - components: - - type: Transform - pos: 2.5,44.5 - parent: 588 - - uid: 1347 - components: - - type: Transform - pos: 4.5,44.5 - parent: 588 - - uid: 1348 - components: - - type: Transform - pos: 4.5,44.5 - parent: 588 - - uid: 1349 - components: - - type: Transform - pos: 4.5,46.5 - parent: 588 - - uid: 1350 - components: - - type: Transform - pos: 2.5,46.5 - parent: 588 - - uid: 1494 - components: - - type: Transform - pos: 17.5,42.5 - parent: 588 - - uid: 1495 - components: - - type: Transform - pos: 18.5,42.5 - parent: 588 - - uid: 1496 - components: - - type: Transform - pos: 19.5,42.5 - parent: 588 - - uid: 1497 - components: - - type: Transform - pos: 20.5,42.5 - parent: 588 - - uid: 1498 - components: - - type: Transform - pos: 21.5,42.5 - parent: 588 - - uid: 1499 - components: - - type: Transform - pos: 17.5,48.5 - parent: 588 - - uid: 1500 - components: - - type: Transform - pos: 18.5,48.5 - parent: 588 - - uid: 1501 - components: - - type: Transform - pos: 19.5,48.5 - parent: 588 - - uid: 1502 - components: - - type: Transform - pos: 20.5,48.5 - parent: 588 - - uid: 1503 - components: - - type: Transform - pos: 21.5,48.5 - parent: 588 - - uid: 1516 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 19.5,44.5 - parent: 588 - - uid: 1517 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 19.5,45.5 - parent: 588 - - uid: 1518 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 18.5,45.5 - parent: 588 - - uid: 1519 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 20.5,45.5 - parent: 588 - - uid: 1582 - components: - - type: Transform - pos: 28.5,22.5 - parent: 588 - - uid: 1583 - components: - - type: Transform - pos: 28.5,21.5 - parent: 588 - - uid: 1584 - components: - - type: Transform - pos: 28.5,20.5 - parent: 588 - - uid: 1585 - components: - - type: Transform - pos: 28.5,19.5 - parent: 588 - - uid: 1586 - components: - - type: Transform - pos: 28.5,18.5 - parent: 588 - - uid: 1587 - components: - - type: Transform - pos: 24.5,22.5 - parent: 588 - - uid: 1588 - components: - - type: Transform - pos: 24.5,21.5 - parent: 588 - - uid: 1589 - components: - - type: Transform - pos: 24.5,20.5 - parent: 588 - - uid: 1590 - components: - - type: Transform - pos: 24.5,19.5 - parent: 588 - - uid: 1591 - components: - - type: Transform - pos: 24.5,18.5 - parent: 588 -- proto: Cautery - entities: - - uid: 1474 - components: - - type: Transform - pos: 8.533231,42.775993 - parent: 588 -- proto: Chair - entities: - - uid: 357 - components: - - type: Transform - pos: 23.5,4.5 - parent: 588 - - uid: 421 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 14.5,9.5 - parent: 588 - - uid: 422 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 20.5,9.5 - parent: 588 - - uid: 423 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 20.5,7.5 - parent: 588 - - uid: 533 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 19.5,14.5 - parent: 588 - - uid: 534 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 19.5,15.5 - parent: 588 - - uid: 537 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 21.5,14.5 - parent: 588 - - uid: 569 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 11.5,13.5 - parent: 588 - - uid: 716 - components: - - type: Transform - pos: 18.5,19.5 - parent: 588 - - uid: 717 - components: - - type: Transform - pos: 19.5,19.5 - parent: 588 - - uid: 718 - components: - - type: Transform - pos: 22.5,19.5 - parent: 588 - - uid: 719 - components: - - type: Transform - pos: 21.5,19.5 - parent: 588 - - uid: 1280 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 17.5,38.5 - parent: 588 - - uid: 1281 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 18.5,38.5 - parent: 588 - - uid: 1282 - components: - - type: Transform - pos: 20.5,40.5 - parent: 588 - - uid: 1283 - components: - - type: Transform - pos: 21.5,40.5 - parent: 588 - - uid: 1865 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 14.5,7.5 - parent: 588 -- proto: ChairFolding - entities: - - uid: 344 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 31.5,0.5 - parent: 588 - - uid: 345 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 32.5,1.5 - parent: 588 - - uid: 346 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 32.5,0.5 - parent: 588 - - uid: 347 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 31.5,3.5 - parent: 588 - - uid: 348 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 32.5,3.5 - parent: 588 - - uid: 349 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 31.5,4.5 - parent: 588 - - uid: 350 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 33.5,1.5 - parent: 588 - - uid: 351 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 33.5,0.5 - parent: 588 - - uid: 352 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 33.5,4.5 - parent: 588 - - uid: 353 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 32.5,4.5 - parent: 588 - - uid: 1212 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 7.5,36.5 - parent: 588 -- proto: ChairFoldingSpawnFolded - entities: - - uid: 354 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 31.53707,1.6455604 - parent: 588 - - uid: 355 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 33.595894,3.4052575 - parent: 588 -- proto: ChairOfficeDark - entities: - - uid: 330 - components: - - type: Transform - pos: 19.5,1.5 - parent: 588 - - uid: 331 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 20.5,3.5 - parent: 588 - - uid: 358 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 24.5,0.5 - parent: 588 - - uid: 359 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 25.5,0.5 - parent: 588 - - uid: 360 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 28.5,0.5 - parent: 588 - - uid: 361 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 27.5,0.5 - parent: 588 - - uid: 571 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 13.5,12.5 - parent: 588 -- proto: ChairOfficeLight - entities: - - uid: 631 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 9.5,19.5 - parent: 588 - - uid: 638 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 7.5,21.5 - parent: 588 - - uid: 707 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 15.5,21.5 - parent: 588 -- proto: ChairPilotSeat - entities: - - uid: 356 - components: - - type: Transform - pos: 26.5,4.5 - parent: 588 -- proto: ChairWood - entities: - - uid: 1049 - components: - - type: Transform - pos: 20.5,25.5 - parent: 588 - - uid: 1050 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 22.5,27.5 - parent: 588 - - uid: 1231 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 21.5,34.5 - parent: 588 - - uid: 1232 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 13.5,36.5 - parent: 588 - - uid: 1790 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 25.5,46.5 - parent: 588 - - uid: 1791 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 25.5,44.5 - parent: 588 -- proto: CigarGold - entities: - - uid: 1219 - components: - - type: Transform - pos: 7.4719925,36.539555 - parent: 588 -- proto: ClosetBombFilled - entities: - - uid: 413 - components: - - type: Transform - pos: 14.5,6.5 - parent: 588 - - uid: 1014 - components: - - type: Transform - pos: 12.5,27.5 - parent: 588 - - uid: 1026 - components: - - type: Transform - pos: 16.5,27.5 - parent: 588 -- proto: ClosetEmergencyFilledRandom - entities: - - uid: 1203 - components: - - type: Transform - pos: 12.5,30.5 - parent: 588 - - uid: 1204 - components: - - type: Transform - pos: 0.5,32.5 - parent: 588 - - uid: 1205 - components: - - type: Transform - pos: 9.5,9.5 - parent: 588 - - uid: 1207 - components: - - type: Transform - pos: 1.5,7.5 - parent: 588 -- proto: ClosetFireFilled - entities: - - uid: 1194 - components: - - type: Transform - pos: 1.5,9.5 - parent: 588 - - uid: 1195 - components: - - type: Transform - pos: 9.5,7.5 - parent: 588 - - uid: 1196 - components: - - type: Transform - pos: 6.5,40.5 - parent: 588 - - uid: 1197 - components: - - type: Transform - pos: 0.5,38.5 - parent: 588 -- proto: ClosetL3SecurityFilled - entities: - - uid: 415 - components: - - type: Transform - pos: 20.5,10.5 - parent: 588 -- proto: ClosetToolFilled - entities: - - uid: 1007 - components: - - type: Transform - pos: 14.5,30.5 - parent: 588 -- proto: ClosetWallMaintenanceFilledRandom - entities: - - uid: 499 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 25.5,15.5 - parent: 588 - - uid: 868 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 5.5,27.5 - parent: 588 - - uid: 1564 - components: - - type: Transform - pos: 17.5,43.5 - parent: 588 - - uid: 1565 - components: - - type: Transform - pos: 21.5,43.5 - parent: 588 -- proto: ClothingBeltChampion - entities: - - uid: 1236 - components: - - type: Transform - pos: 10.581136,39.53631 - parent: 588 -- proto: ClothingEyesGlassesMeson - entities: - - uid: 1108 - components: - - type: Transform - pos: 25.666832,30.643515 - parent: 588 -- proto: ClothingHandsGlovesNitrile - entities: - - uid: 1715 - components: - - type: Transform - pos: 10.432637,44.476112 - parent: 588 -- proto: ClothingHeadBandRed - entities: - - uid: 1295 - components: - - type: Transform - pos: 12.571781,39.694115 - parent: 588 -- proto: ClothingHeadHatFedoraBrown - entities: - - uid: 577 - components: - - type: Transform - pos: 12.686508,13.58602 - parent: 588 -- proto: ClothingHeadHatPwig - entities: - - uid: 369 - components: - - type: Transform - pos: 25.824945,3.5783403 - parent: 588 -- proto: ClothingHeadHatSecsoftFlipped - entities: - - uid: 606 - components: - - type: Transform - pos: 12.705482,6.671774 - parent: 588 - - uid: 1027 - components: - - type: Transform - pos: 18.403675,25.53719 - parent: 588 -- proto: ClothingHeadHatSurgcapPurple - entities: - - uid: 1711 - components: - - type: Transform - pos: 10.304593,44.632217 - parent: 588 -- proto: ClothingHeadHelmetRiot - entities: - - uid: 1617 - components: - - type: Transform - pos: 22.499683,6.7142525 - parent: 588 -- proto: ClothingHeadHelmetThunderdome - entities: - - uid: 1240 - components: - - type: Transform - pos: 34.666565,24.66942 - parent: 588 -- proto: ClothingNeckLawyerbadge - entities: - - uid: 326 - components: - - type: Transform - pos: 21.586027,4.583762 - parent: 588 -- proto: ClothingNeckTieDet - entities: - - uid: 573 - components: - - type: Transform - pos: 12.714905,13.486683 - parent: 588 -- proto: ClothingOuterArmorReflective - entities: - - uid: 1031 - components: - - type: Transform - pos: 18.47467,24.458666 - parent: 588 -- proto: ClothingOuterCoatDetective - entities: - - uid: 574 - components: - - type: Transform - pos: 13.396446,12.479115 - parent: 588 -- proto: ClothingOuterRobesJudge - entities: - - uid: 370 - components: - - type: Transform - pos: 27.40101,3.677678 - parent: 588 -- proto: ClothingShoesBootsCombatFilled - entities: - - uid: 1036 - components: - - type: Transform - pos: 12.582174,25.636528 - parent: 588 -- proto: ClothingShoesBootsLaceup - entities: - - uid: 372 - components: - - type: Transform - pos: 18.586912,0.70824456 - parent: 588 -- proto: ClothingUniformJumpskirtColorMaroon - entities: - - uid: 1714 - components: - - type: Transform - pos: 10.673761,44.53288 - parent: 588 -- proto: ClothingUniformJumpsuitColorMaroon - entities: - - uid: 1713 - components: - - type: Transform - pos: 10.645364,44.67479 - parent: 588 -- proto: ClusterBangFull - entities: - - uid: 599 - components: - - type: Transform - pos: 33.484257,28.42918 - parent: 588 -- proto: ComputerAlert - entities: - - uid: 999 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 17.5,30.5 - parent: 588 - - uid: 1001 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 23.5,30.5 - parent: 588 - - uid: 1561 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 21.5,46.5 - parent: 588 -- proto: computerBodyScanner - entities: - - uid: 1394 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 9.5,44.5 - parent: 588 - - uid: 1423 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 13.5,44.5 - parent: 588 -- proto: ComputerCriminalRecords - entities: - - uid: 461 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 11.5,0.5 - parent: 588 - - uid: 634 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 9.5,18.5 - parent: 588 -- proto: ComputerPowerMonitoring - entities: - - uid: 1000 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 16.5,30.5 - parent: 588 - - uid: 1002 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 24.5,30.5 - parent: 588 - - uid: 1560 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 17.5,46.5 - parent: 588 -- proto: ComputerSurveillanceCameraMonitor - entities: - - uid: 635 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 6.5,21.5 - parent: 588 -- proto: ComputerTelevision - entities: - - uid: 1229 - components: - - type: Transform - pos: 12.5,34.5 - parent: 588 - - uid: 1230 - components: - - type: Transform - pos: 22.5,36.5 - parent: 588 -- proto: CrateEngineeringGear - entities: - - uid: 1008 - components: - - type: Transform - pos: 26.5,30.5 - parent: 588 -- proto: CrateFunBoardGames - entities: - - uid: 1845 - components: - - type: Transform - pos: 26.5,48.5 - parent: 588 -- proto: CrateFunParty - entities: - - uid: 1876 - components: - - type: Transform - pos: 25.5,43.5 - parent: 588 -- proto: CrateHydroponicsSeedsExotic - entities: - - uid: 1660 - components: - - type: Transform - pos: 31.5,22.5 - parent: 588 -- proto: CrayonBox - entities: - - uid: 1057 - components: - - type: Transform - pos: 20.47107,24.608877 - parent: 588 - - uid: 1116 - components: - - type: Transform - pos: 20.607256,14.646415 - parent: 588 -- proto: CryoPod - entities: - - uid: 1395 - components: - - type: Transform - pos: 8.5,47.5 - parent: 588 - - uid: 1397 - components: - - type: Transform - pos: 14.5,47.5 - parent: 588 -- proto: DebugSMES - entities: - - uid: 971 - components: - - type: Transform - pos: 22.5,32.5 - parent: 588 - - uid: 974 - components: - - type: Transform - pos: 18.5,32.5 - parent: 588 -- proto: DeployableBarrier - entities: - - uid: 1233 - components: - - type: Transform - pos: 32.5,24.5 - parent: 588 -- proto: DiceBag - entities: - - uid: 552 - components: - - type: Transform - pos: 20.294882,15.426926 - parent: 588 -- proto: DiseaseDiagnoser - entities: - - uid: 1424 - components: - - type: Transform - pos: 14.5,44.5 - parent: 588 -- proto: DisposalUnit - entities: - - uid: 550 - components: - - type: Transform - pos: 22.5,16.5 - parent: 588 - - uid: 725 - components: - - type: Transform - pos: 21.5,22.5 - parent: 588 - - uid: 766 - components: - - type: Transform - pos: 9.5,22.5 - parent: 588 - - uid: 1288 - components: - - type: Transform - pos: 22.5,38.5 - parent: 588 -- proto: DonkpocketBoxSpawner - entities: - - uid: 526 - components: - - type: Transform - pos: 16.5,13.5 - parent: 588 - - uid: 723 - components: - - type: Transform - pos: 18.5,21.5 - parent: 588 -- proto: DoorElectronics - entities: - - uid: 659 - components: - - type: Transform - pos: 12.581519,21.410114 - parent: 588 - - uid: 1074 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 25.639427,25.54549 - parent: 588 -- proto: Dresser - entities: - - uid: 1051 - components: - - type: Transform - pos: 22.5,25.5 - parent: 588 - - uid: 1052 - components: - - type: Transform - pos: 20.5,27.5 - parent: 588 - - uid: 1061 - components: - - type: Transform - pos: 24.5,25.5 - parent: 588 - - uid: 1221 - components: - - type: Transform - pos: 21.5,36.5 - parent: 588 - - uid: 1222 - components: - - type: Transform - pos: 13.5,34.5 - parent: 588 -- proto: DrinkDetFlask - entities: - - uid: 1577 - components: - - type: Transform - pos: 12.606661,13.037249 - parent: 588 -- proto: DrinkMugMetal - entities: - - uid: 1294 - components: - - type: Transform - pos: 22.442232,12.514399 - parent: 588 -- proto: DrinkMugRed - entities: - - uid: 721 - components: - - type: Transform - pos: 22.448559,18.561966 - parent: 588 - - uid: 1293 - components: - - type: Transform - pos: 22.328642,12.741456 - parent: 588 -- proto: DrinkShinyFlask - entities: - - uid: 1874 - components: - - type: Transform - pos: 6.890398,22.663696 - parent: 588 -- proto: DrinkShotGlass - entities: - - uid: 578 - components: - - type: Transform - pos: 12.412022,12.535878 - parent: 588 - - uid: 579 - components: - - type: Transform - pos: 12.539811,12.748745 - parent: 588 -- proto: DrinkWaterCup - entities: - - uid: 722 - components: - - type: Transform - pos: 18.373508,18.661304 - parent: 588 - - uid: 762 - components: - - type: Transform - pos: 6.313587,19.590261 - parent: 588 - - uid: 763 - components: - - type: Transform - pos: 6.441377,19.419968 - parent: 588 -- proto: EmergencyLight - entities: - - uid: 1716 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 13.5,6.5 - parent: 588 - - type: PointLight - enabled: True - - uid: 1717 - components: - - type: Transform - pos: 21.5,10.5 - parent: 588 - - type: PointLight - enabled: True - - uid: 1718 - components: - - type: Transform - pos: 30.5,4.5 - parent: 588 - - type: PointLight - enabled: True - - uid: 1719 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 13.5,0.5 - parent: 588 - - type: PointLight - enabled: True - - uid: 1720 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 3.5,0.5 - parent: 588 - - type: PointLight - enabled: True - - uid: 1721 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 1.5,12.5 - parent: 588 - - type: PointLight - enabled: True - - uid: 1722 - components: - - type: Transform - pos: 18.5,16.5 - parent: 588 - - type: PointLight - enabled: True - - uid: 1723 - components: - - type: Transform - pos: 31.5,22.5 - parent: 588 - - type: PointLight - enabled: True - - uid: 1724 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 34.5,25.5 - parent: 588 - - type: PointLight - enabled: True - - uid: 1726 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 30.5,25.5 - parent: 588 - - type: PointLight - enabled: True - - uid: 1727 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 26.5,27.5 - parent: 588 - - type: PointLight - enabled: True - - uid: 1728 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 20.5,27.5 - parent: 588 - - type: PointLight - enabled: True - - uid: 1729 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 18.5,27.5 - parent: 588 - - type: PointLight - enabled: True - - uid: 1730 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 12.5,25.5 - parent: 588 - - type: PointLight - enabled: True - - uid: 1731 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 0.5,7.5 - parent: 588 - - type: PointLight - enabled: True - - uid: 1732 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 10.5,9.5 - parent: 588 - - type: PointLight - enabled: True - - uid: 1733 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 4.5,20.5 - parent: 588 - - type: PointLight - enabled: True - - uid: 1734 - components: - - type: Transform - pos: 1.5,24.5 - parent: 588 - - type: PointLight - enabled: True - - uid: 1735 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 1.5,30.5 - parent: 588 - - type: PointLight - enabled: True - - uid: 1736 - components: - - type: Transform - pos: 11.5,32.5 - parent: 588 - - type: PointLight - enabled: True - - uid: 1737 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 6.5,40.5 - parent: 588 - - type: PointLight - enabled: True - - uid: 1738 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 8.5,40.5 - parent: 588 - - type: PointLight - enabled: True - - uid: 1739 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 22.5,30.5 - parent: 588 - - type: PointLight - enabled: True - - uid: 1740 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 6.5,19.5 - parent: 588 - - type: PointLight - enabled: True - - uid: 1742 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 16.5,21.5 - parent: 588 - - type: PointLight - enabled: True - - uid: 1744 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 19.5,18.5 - parent: 588 - - type: PointLight - enabled: True - - uid: 1745 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 16.5,34.5 - parent: 588 - - type: PointLight - enabled: True - - uid: 1746 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 30.5,34.5 - parent: 588 - - type: PointLight - enabled: True - - uid: 1747 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 20.5,38.5 - parent: 588 - - type: PointLight - enabled: True - - uid: 1748 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 20.5,44.5 - parent: 588 - - type: PointLight - enabled: True - - uid: 1749 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 8.5,44.5 - parent: 588 - - type: PointLight - enabled: True - - uid: 1750 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 5.5,46.5 - parent: 588 - - type: PointLight - enabled: True - - uid: 1751 - components: - - type: Transform - pos: 30.5,6.5 - parent: 588 - - type: PointLight - enabled: True - - uid: 1752 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 28.5,10.5 - parent: 588 - - type: PointLight - enabled: True - - uid: 1832 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 30.5,46.5 - parent: 588 - - type: PointLight - enabled: True -- proto: EmergencyRollerBed - entities: - - uid: 1141 - components: - - type: Transform - pos: 30.5,25.5 - parent: 588 - - uid: 1142 - components: - - type: Transform - pos: 30.5,24.5 - parent: 588 -- proto: ExtinguisherCabinetFilled - entities: - - uid: 867 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 5.5,26.5 - parent: 588 - - uid: 1198 - components: - - type: Transform - pos: 2.5,8.5 - parent: 588 - - uid: 1199 - components: - - type: Transform - pos: 8.5,8.5 - parent: 588 - - uid: 1200 - components: - - type: Transform - pos: 8.5,35.5 - parent: 588 - - uid: 1201 - components: - - type: Transform - pos: 1.5,35.5 - parent: 588 - - uid: 1202 - components: - - type: Transform - pos: 25.5,14.5 - parent: 588 - - uid: 1328 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 28.5,39.5 - parent: 588 - - uid: 1566 - components: - - type: Transform - pos: 17.5,44.5 - parent: 588 -- proto: filingCabinetRandom - entities: - - uid: 320 - components: - - type: Transform - pos: 21.5,0.5 - parent: 588 - - uid: 321 - components: - - type: Transform - pos: 20.5,0.5 - parent: 588 -- proto: filingCabinetTallRandom - entities: - - uid: 1396 - components: - - type: Transform - pos: 8.5,44.5 - parent: 588 -- proto: Flash - entities: - - uid: 1209 - components: - - type: Transform - pos: 10.726851,19.047483 - parent: 588 -- proto: FlashlightSeclite - entities: - - uid: 374 - components: - - type: Transform - pos: 13.377204,0.54605544 - parent: 588 -- proto: FloodlightBroken - entities: - - uid: 1193 - components: - - type: Transform - pos: 9.462372,35.6454 - parent: 588 -- proto: FloorDrain - entities: - - uid: 944 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 8.5,28.5 - parent: 588 - - type: Fixtures - fixtures: {} - - uid: 945 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 10.5,28.5 - parent: 588 - - type: Fixtures - fixtures: {} -- proto: FloorLavaEntity - entities: - - uid: 47 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 5.5,8.5 - parent: 588 - - uid: 49 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 6.5,8.5 - parent: 588 - - uid: 458 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 5.5,10.5 - parent: 588 - - uid: 459 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 4.5,8.5 - parent: 588 - - uid: 460 - components: - - type: Transform - pos: 8.5,3.5 - parent: 588 - - uid: 645 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 2.5,20.5 - parent: 588 - - uid: 820 - components: - - type: Transform - pos: 4.5,32.5 - parent: 588 - - uid: 821 - components: - - type: Transform - pos: 4.5,31.5 - parent: 588 - - uid: 822 - components: - - type: Transform - pos: 5.5,31.5 - parent: 588 - - uid: 823 - components: - - type: Transform - pos: 5.5,32.5 - parent: 588 - - uid: 824 - components: - - type: Transform - pos: 5.5,30.5 - parent: 588 - - uid: 825 - components: - - type: Transform - pos: 6.5,30.5 - parent: 588 - - uid: 826 - components: - - type: Transform - pos: 7.5,30.5 - parent: 588 - - uid: 827 - components: - - type: Transform - pos: 6.5,32.5 - parent: 588 - - uid: 828 - components: - - type: Transform - pos: 7.5,32.5 - parent: 588 - - uid: 829 - components: - - type: Transform - pos: 7.5,31.5 - parent: 588 - - uid: 830 - components: - - type: Transform - pos: 6.5,31.5 - parent: 588 - - uid: 831 - components: - - type: Transform - pos: 8.5,30.5 - parent: 588 - - uid: 857 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 2.5,39.5 - parent: 588 - - uid: 858 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 3.5,39.5 - parent: 588 - - uid: 859 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 3.5,38.5 - parent: 588 - - uid: 860 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 3.5,40.5 - parent: 588 - - uid: 887 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,40.5 - parent: 588 - - uid: 889 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,39.5 - parent: 588 - - uid: 906 - components: - - type: Transform - pos: 4.5,7.5 - parent: 588 - - uid: 907 - components: - - type: Transform - pos: 5.5,7.5 - parent: 588 - - uid: 908 - components: - - type: Transform - pos: 5.5,9.5 - parent: 588 - - uid: 909 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 5.5,6.5 - parent: 588 - - uid: 910 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 4.5,6.5 - parent: 588 - - uid: 911 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 6.5,9.5 - parent: 588 - - uid: 913 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 6.5,10.5 - parent: 588 - - uid: 1247 - components: - - type: Transform - pos: 8.5,4.5 - parent: 588 - - uid: 1248 - components: - - type: Transform - pos: 9.5,4.5 - parent: 588 - - uid: 1249 - components: - - type: Transform - pos: 8.5,2.5 - parent: 588 - - uid: 1250 - components: - - type: Transform - pos: 8.5,1.5 - parent: 588 - - uid: 1251 - components: - - type: Transform - pos: 9.5,1.5 - parent: 588 - - uid: 1252 - components: - - type: Transform - pos: 8.5,1.5 - parent: 588 - - uid: 1253 - components: - - type: Transform - pos: 8.5,0.5 - parent: 588 - - uid: 1254 - components: - - type: Transform - pos: 7.5,0.5 - parent: 588 - - uid: 1333 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 2.5,46.5 - parent: 588 - - uid: 1341 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 3.5,45.5 - parent: 588 - - uid: 1343 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 3.5,46.5 - parent: 588 - - uid: 1345 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 1.5,46.5 - parent: 588 - - uid: 1359 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 1.5,47.5 - parent: 588 - - uid: 1360 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,46.5 - parent: 588 - - uid: 1361 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,47.5 - parent: 588 - - uid: 1362 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 5.5,47.5 - parent: 588 - - uid: 1363 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 2.5,44.5 - parent: 588 - - uid: 1364 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 2.5,47.5 - parent: 588 - - uid: 1365 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 3.5,44.5 - parent: 588 - - uid: 1366 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,45.5 - parent: 588 - - uid: 1367 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,44.5 - parent: 588 - - uid: 1368 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,43.5 - parent: 588 - - uid: 1369 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 5.5,43.5 - parent: 588 - - uid: 1370 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 5.5,42.5 - parent: 588 - - uid: 1371 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 6.5,42.5 - parent: 588 - - uid: 1372 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 6.5,43.5 - parent: 588 - - uid: 1373 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 5.5,44.5 - parent: 588 - - uid: 1374 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 5.5,46.5 - parent: 588 - - uid: 1375 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 2.5,43.5 - parent: 588 -- proto: FoodBowlBigTrash - entities: - - uid: 1840 - components: - - type: Transform - pos: 30.547388,48.16116 - parent: 588 -- proto: FoodBurgerMime - entities: - - uid: 399 - components: - - type: Transform - pos: 10.958169,39.64943 - parent: 588 -- proto: FoodPlateSmallPlastic - entities: - - uid: 529 - components: - - type: Transform - pos: 17.462528,12.615073 - parent: 588 -- proto: FoodPlateTrash - entities: - - uid: 1692 - components: - - type: Transform - pos: 28.80027,47.44947 - parent: 588 -- proto: ForensicPad - entities: - - uid: 761 - components: - - type: Transform - pos: 7.562898,22.48225 - parent: 588 -- proto: ForkPlastic - entities: - - uid: 531 - components: - - type: Transform - pos: 17.405733,12.600882 - parent: 588 -- proto: GasFilter - entities: - - uid: 1415 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 12.5,47.5 - parent: 588 -- proto: GasPipeBend - entities: - - uid: 1412 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 8.5,46.5 - parent: 588 - - uid: 1414 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 14.5,46.5 - parent: 588 - - uid: 1416 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 11.5,47.5 - parent: 588 - - uid: 1421 - components: - - type: Transform - pos: 13.5,47.5 - parent: 588 -- proto: GasPipeStraight - entities: - - uid: 1418 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 10.5,47.5 - parent: 588 - - uid: 1420 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 12.5,46.5 - parent: 588 -- proto: GasPipeTJunction - entities: - - uid: 1410 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 9.5,46.5 - parent: 588 - - uid: 1411 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 13.5,46.5 - parent: 588 - - uid: 1417 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 10.5,46.5 - parent: 588 - - uid: 1419 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 11.5,46.5 - parent: 588 -- proto: GasPort - entities: - - uid: 1404 - components: - - type: Transform - pos: 9.5,48.5 - parent: 588 - - uid: 1422 - components: - - type: Transform - pos: 12.5,48.5 - parent: 588 -- proto: GasPressurePump - entities: - - uid: 1409 - components: - - type: Transform - pos: 9.5,47.5 - parent: 588 -- proto: GasThermoMachineFreezer - entities: - - uid: 1403 - components: - - type: Transform - pos: 10.5,48.5 - parent: 588 -- proto: GatfruitSeeds - entities: - - uid: 562 - components: - - type: Transform - pos: 8.528373,27.49547 - parent: 588 -- proto: Gauze - entities: - - uid: 1482 - components: - - type: Transform - pos: 8.452288,42.514927 - parent: 588 -- proto: GeneratorRTG - entities: - - uid: 742 - components: - - type: Transform - pos: 27.5,21.5 - parent: 588 - - uid: 748 - components: - - type: Transform - pos: 25.5,21.5 - parent: 588 -- proto: Girder - entities: - - uid: 1301 - components: - - type: Transform - pos: 26.5,39.5 - parent: 588 -- proto: Grille - entities: - - uid: 209 - components: - - type: Transform - pos: 15.5,34.5 - parent: 588 - - uid: 211 - components: - - type: Transform - pos: 19.5,36.5 - parent: 588 - - uid: 212 - components: - - type: Transform - pos: 19.5,34.5 - parent: 588 - - uid: 213 - components: - - type: Transform - pos: 15.5,36.5 - parent: 588 - - uid: 403 - components: - - type: Transform - pos: 15.5,9.5 - parent: 588 - - uid: 404 - components: - - type: Transform - pos: 15.5,7.5 - parent: 588 - - uid: 407 - components: - - type: Transform - pos: 19.5,9.5 - parent: 588 - - uid: 408 - components: - - type: Transform - pos: 19.5,7.5 - parent: 588 - - uid: 568 - components: - - type: Transform - pos: 12.5,15.5 - parent: 588 - - uid: 584 - components: - - type: Transform - pos: 2.5,12.5 - parent: 588 - - uid: 586 - components: - - type: Transform - pos: 2.5,16.5 - parent: 588 - - uid: 587 - components: - - type: Transform - pos: 4.5,16.5 - parent: 588 - - uid: 589 - components: - - type: Transform - pos: 4.5,12.5 - parent: 588 - - uid: 1465 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 10.5,43.5 - parent: 588 - - uid: 1466 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 12.5,43.5 - parent: 588 -- proto: GrilleBroken - entities: - - uid: 1302 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 27.5,39.5 - parent: 588 -- proto: Handcuffs - entities: - - uid: 1614 - components: - - type: Transform - pos: 22.608034,10.659381 - parent: 588 -- proto: Hemostat - entities: - - uid: 1471 - components: - - type: Transform - pos: 8.51377,43.004257 - parent: 588 -- proto: HighSecArmoryLocked - entities: - - uid: 1597 - components: - - type: Transform - pos: 26.5,7.5 - parent: 588 - - uid: 1598 - components: - - type: Transform - pos: 32.5,7.5 - parent: 588 - - uid: 1599 - components: - - type: Transform - pos: 29.5,9.5 - parent: 588 -- proto: HospitalCurtains - entities: - - uid: 402 - components: - - type: Transform - pos: 8.5,27.5 - parent: 588 - - uid: 949 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 8.5,24.5 - parent: 588 - - uid: 951 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 10.5,27.5 - parent: 588 - - uid: 1768 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 24.5,48.5 - parent: 588 -- proto: HospitalCurtainsOpen - entities: - - uid: 946 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 8.5,25.5 - parent: 588 - - uid: 947 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 10.5,24.5 - parent: 588 - - uid: 1040 - components: - - type: Transform - pos: 20.5,28.5 - parent: 588 - - uid: 1046 - components: - - type: Transform - pos: 22.5,24.5 - parent: 588 - - uid: 1148 - components: - - type: Transform - pos: 28.5,25.5 - parent: 588 - - uid: 1149 - components: - - type: Transform - pos: 28.5,24.5 - parent: 588 - - uid: 1223 - components: - - type: Transform - pos: 20.5,36.5 - parent: 588 - - uid: 1224 - components: - - type: Transform - pos: 14.5,34.5 - parent: 588 - - uid: 1467 - components: - - type: Transform - pos: 12.5,42.5 - parent: 588 - - uid: 1469 - components: - - type: Transform - pos: 10.5,42.5 - parent: 588 - - uid: 1767 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 24.5,42.5 - parent: 588 -- proto: HydroponicsToolHatchet - entities: - - uid: 1844 - components: - - type: Transform - pos: 29.538284,44.04174 - parent: 588 - - uid: 1851 - components: - - type: Transform - pos: 30.630798,21.602604 - parent: 588 -- proto: HydroponicsToolMiniHoe - entities: - - uid: 1837 - components: - - type: Transform - pos: 30.099596,43.446724 - parent: 588 - - uid: 1841 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 33.38517,20.601 - parent: 588 -- proto: HydroponicsToolSpade - entities: - - uid: 1838 - components: - - type: Transform - pos: 29.95761,43.361576 - parent: 588 - - uid: 1842 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 33.42777,20.58681 - parent: 588 -- proto: hydroponicsTray - entities: - - uid: 796 - components: - - type: Transform - pos: 31.5,21.5 - parent: 588 - - uid: 797 - components: - - type: Transform - pos: 31.5,20.5 - parent: 588 - - uid: 798 - components: - - type: Transform - pos: 31.5,19.5 - parent: 588 - - uid: 1772 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 29.5,42.5 - parent: 588 - - uid: 1774 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 29.5,44.5 - parent: 588 - - uid: 1787 - components: - - type: Transform - pos: 30.5,44.5 - parent: 588 - - uid: 1788 - components: - - type: Transform - pos: 30.5,42.5 - parent: 588 -- proto: IngotGold - entities: - - uid: 952 - components: - - type: Transform - pos: 11.069347,39.504154 - parent: 588 -- proto: KitchenMicrowave - entities: - - uid: 524 - components: - - type: Transform - pos: 16.5,12.5 - parent: 588 - - uid: 709 - components: - - type: Transform - pos: 18.5,22.5 - parent: 588 - - uid: 1785 - components: - - type: Transform - pos: 29.5,48.5 - parent: 588 -- proto: KitchenReagentGrinder - entities: - - uid: 1786 - components: - - type: Transform - pos: 30.5,47.5 - parent: 588 -- proto: KnifePlastic - entities: - - uid: 530 - components: - - type: Transform - pos: 17.249546,12.643455 - parent: 588 - - uid: 1836 - components: - - type: Transform - pos: 30.241585,48.271698 - parent: 588 -- proto: Lamp - entities: - - uid: 581 - components: - - type: Transform - pos: 12.369425,13.798887 - parent: 588 -- proto: LampGold - entities: - - uid: 322 - components: - - type: Transform - pos: 18.419699,1.6320114 - parent: 588 - - uid: 323 - components: - - type: Transform - pos: 20.563715,4.8959665 - parent: 588 - - uid: 729 - components: - - type: Transform - pos: 6.4779434,22.892899 - parent: 588 - - uid: 730 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 10.765976,19.912766 - parent: 588 -- proto: Lighter - entities: - - uid: 1220 - components: - - type: Transform - pos: 7.5287867,36.397644 - parent: 588 -- proto: LockerDetective - entities: - - uid: 560 - components: - - type: Transform - pos: 14.5,16.5 - parent: 588 -- proto: LockerEvidence - entities: - - uid: 254 - components: - - type: Transform - pos: 16.5,0.5 - parent: 588 - - uid: 262 - components: - - type: Transform - pos: 2.5,0.5 - parent: 588 - - uid: 263 - components: - - type: Transform - pos: 4.5,0.5 - parent: 588 - - uid: 276 - components: - - type: Transform - pos: 0.5,0.5 - parent: 588 - - uid: 286 - components: - - type: Transform - pos: 12.5,0.5 - parent: 588 - - uid: 287 - components: - - type: Transform - pos: 14.5,0.5 - parent: 588 - - uid: 704 - components: - - type: Transform - pos: 16.5,22.5 - parent: 588 -- proto: LockerMedicineFilled - entities: - - uid: 1152 - components: - - type: Transform - pos: 28.5,27.5 - parent: 588 -- proto: LockerSecurityFilled - entities: - - uid: 416 - components: - - type: Transform - pos: 20.5,6.5 - parent: 588 -- proto: LockerSyndicatePersonal - entities: - - uid: 605 - components: - - type: Transform - pos: 6.5,12.5 - parent: 588 -- proto: MachineFrame - entities: - - uid: 400 - components: - - type: Transform - pos: 26.5,8.5 - parent: 588 -- proto: MaintenanceFluffSpawner - entities: - - uid: 414 - components: - - type: Transform - pos: 25.5,32.5 - parent: 588 - - uid: 1289 - components: - - type: Transform - pos: 17.5,38.5 - parent: 588 - - uid: 1290 - components: - - type: Transform - pos: 21.5,40.5 - parent: 588 - - uid: 1291 - components: - - type: Transform - pos: 20.5,40.5 - parent: 588 -- proto: MaintenanceWeaponSpawner - entities: - - uid: 548 - components: - - type: Transform - pos: 15.5,4.5 - parent: 588 - - uid: 549 - components: - - type: Transform - pos: 3.5,4.5 - parent: 588 - - uid: 1580 - components: - - type: Transform - pos: 1.5,8.5 - parent: 588 - - uid: 1581 - components: - - type: Transform - pos: 9.5,8.5 - parent: 588 -- proto: MaterialCloth1 - entities: - - uid: 702 - components: - - type: Transform - pos: 12.462601,18.586084 - parent: 588 - - uid: 1065 - components: - - type: Transform - pos: 24.460928,24.594687 - parent: 588 - - uid: 1066 - components: - - type: Transform - pos: 24.389935,24.296673 - parent: 588 -- proto: MaterialWoodPlank1 - entities: - - uid: 703 - components: - - type: Transform - pos: 12.817572,18.685423 - parent: 588 - - uid: 1064 - components: - - type: Transform - pos: 26.278374,24.608877 - parent: 588 - - uid: 1067 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 24.801699,24.708214 - parent: 588 - - uid: 1076 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 24.823982,27.574818 - parent: 588 -- proto: MedicalBed - entities: - - uid: 1146 - components: - - type: Transform - pos: 28.5,24.5 - parent: 588 - - uid: 1147 - components: - - type: Transform - pos: 28.5,25.5 - parent: 588 -- proto: MedkitAdvancedFilled - entities: - - uid: 1153 - components: - - type: Transform - pos: 30.614443,28.392822 - parent: 588 -- proto: MedkitCombatFilled - entities: - - uid: 1154 - components: - - type: Transform - pos: 30.40146,28.066427 - parent: 588 -- proto: OperatingTable - entities: - - uid: 1389 - components: - - type: Transform - pos: 9.5,43.5 - parent: 588 -- proto: Paper - entities: - - uid: 1055 - components: - - type: Transform - pos: 20.428474,24.722406 - parent: 588 - - uid: 1056 - components: - - type: Transform - pos: 20.669853,24.52373 - parent: 588 -- proto: PaperOffice - entities: - - uid: 327 - components: - - type: Transform - pos: 21.415642,4.0728827 - parent: 588 - - uid: 328 - components: - - type: Transform - pos: 21.586027,4.0019264 - parent: 588 - - uid: 1113 - components: - - type: Transform - pos: 20.706646,15.341779 - parent: 588 - - uid: 1114 - components: - - type: Transform - pos: 20.465267,15.185677 - parent: 588 - - uid: 1115 - components: - - type: Transform - pos: 20.30908,14.603841 - parent: 588 -- proto: PartRodMetal1 - entities: - - uid: 1071 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 25.341253,26.595633 - parent: 588 - - uid: 1072 - components: - - type: Transform - pos: 25.36965,28.11408 - parent: 588 -- proto: Pen - entities: - - uid: 366 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 21.352327,3.9473093 - parent: 588 - - uid: 367 - components: - - type: Transform - pos: 18.75395,1.1232786 - parent: 588 - - uid: 368 - components: - - type: Transform - pos: 24.788435,1.4496742 - parent: 588 - - uid: 731 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 10.36841,19.019064 - parent: 588 - - uid: 732 - components: - - type: Transform - pos: 7.4631767,22.637186 - parent: 588 -- proto: PhoneInstrument - entities: - - uid: 371 - components: - - type: Transform - pos: 25.484175,4.4865713 - parent: 588 -- proto: PillCanister - entities: - - uid: 1481 - components: - - type: Transform - pos: 14.438607,42.637726 - parent: 588 -- proto: PillSpaceDrugs - entities: - - uid: 1479 - components: - - type: Transform - pos: 14.438607,42.96412 - parent: 588 - - uid: 1480 - components: - - type: Transform - pos: 14.537998,42.878975 - parent: 588 -- proto: PlushieNuke - entities: - - uid: 1850 - components: - - type: Transform - pos: 22.519993,28.594225 - parent: 588 -- proto: PortableFlasher - entities: - - uid: 1234 - components: - - type: Transform - pos: 32.5,25.5 - parent: 588 -- proto: PortableGeneratorPacman - entities: - - uid: 967 - components: - - type: Transform - pos: 16.5,32.5 - parent: 588 - - uid: 969 - components: - - type: Transform - pos: 24.5,32.5 - parent: 588 -- proto: PortableGeneratorSuperPacman - entities: - - uid: 50 - components: - - type: Transform - pos: 26.5,15.5 - parent: 588 - - uid: 55 - components: - - type: Transform - pos: 28.5,15.5 - parent: 588 - - uid: 1504 - components: - - type: Transform - pos: 18.5,44.5 - parent: 588 - - uid: 1505 - components: - - type: Transform - pos: 20.5,44.5 - parent: 588 -- proto: PortableScrubber - entities: - - uid: 1101 - components: - - type: Transform - pos: 18.5,30.5 - parent: 588 -- proto: PosterContrabandBountyHunters - entities: - - uid: 1578 - components: - - type: Transform - pos: 13.5,15.5 - parent: 588 -- proto: PosterLegitDickGumshue - entities: - - uid: 1576 - components: - - type: Transform - pos: 9.5,15.5 - parent: 588 -- proto: PosterLegitEnlist - entities: - - uid: 1800 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 8.5,9.5 - parent: 588 -- proto: PosterLegitNanotrasenLogo - entities: - - uid: 1802 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 2.5,48.5 - parent: 588 - - uid: 1803 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 3.5,21.5 - parent: 588 -- proto: PosterLegitObey - entities: - - uid: 1801 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,42.5 - parent: 588 -- proto: PosterLegitSecWatch - entities: - - uid: 1799 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 2.5,7.5 - parent: 588 -- proto: PosterLegitSpaceCops - entities: - - uid: 1804 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 1.5,19.5 - parent: 588 -- proto: PottedPlantRandom - entities: - - uid: 1286 - components: - - type: Transform - pos: 16.5,38.5 - parent: 588 - - uid: 1287 - components: - - type: Transform - pos: 22.5,40.5 - parent: 588 -- proto: PowerCellHyper - entities: - - uid: 469 - components: - - type: Transform - pos: 12.355853,25.41643 - parent: 588 - - uid: 590 - components: - - type: Transform - pos: 5.381793,16.642464 - parent: 588 -- proto: PowerCellRecharger - entities: - - uid: 1103 - components: - - type: Transform - pos: 15.5,30.5 - parent: 588 - - uid: 1568 - components: - - type: Transform - pos: 21.5,47.5 - parent: 588 -- proto: Poweredlight - entities: - - uid: 1641 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 2.5,0.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1642 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 14.5,0.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1646 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 24.5,0.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1647 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 28.5,0.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1648 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 21.5,6.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1649 - components: - - type: Transform - pos: 13.5,10.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1650 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 16.5,6.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1651 - components: - - type: Transform - pos: 18.5,10.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1693 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 32.5,25.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1701 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 18.5,12.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1702 - components: - - type: Transform - pos: 20.5,16.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1703 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 34.5,20.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1704 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 16.5,25.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1705 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 14.5,27.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1706 - components: - - type: Transform - pos: 18.5,40.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1741 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 10.5,21.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1743 - components: - - type: Transform - pos: 21.5,22.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1830 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 30.5,43.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1831 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 30.5,47.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 -- proto: PoweredlightLED - entities: - - uid: 1707 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 8.5,42.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1708 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 14.5,42.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1709 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 14.5,46.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1710 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 8.5,46.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1725 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 28.5,27.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 -- proto: PoweredSmallLight - entities: - - uid: 470 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 26.5,14.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 940 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 10.5,28.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 948 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 8.5,28.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 953 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 10.5,25.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1603 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 26.5,10.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1604 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 32.5,10.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1605 - components: - - type: Transform - pos: 29.5,6.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1606 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 29.5,8.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1607 - components: - - type: Transform - pos: 32.5,8.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1608 - components: - - type: Transform - pos: 26.5,8.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1643 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 7.5,1.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1644 - components: - - type: Transform - pos: 20.5,4.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1645 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 19.5,0.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1652 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 9.5,8.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1653 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 7.5,8.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1654 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 3.5,8.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1655 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 1.5,8.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1656 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 5.5,14.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1657 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 1.5,14.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1659 - components: - - type: Transform - pos: 3.5,18.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1661 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 1.5,22.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1662 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,27.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1663 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 6.5,25.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1664 - components: - - type: Transform - pos: 0.5,28.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1665 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 2.5,24.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1666 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 3.5,30.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1667 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 9.5,30.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1668 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 1.5,36.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1669 - components: - - type: Transform - pos: 8.5,34.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1670 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 5.5,38.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1671 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 1.5,38.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1672 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 2.5,43.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1673 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 4.5,43.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1674 - components: - - type: Transform - pos: 2.5,47.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1675 - components: - - type: Transform - pos: 4.5,47.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1676 - components: - - type: Transform - pos: 9.5,40.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1677 - components: - - type: Transform - pos: 13.5,40.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1678 - components: - - type: Transform - pos: 13.5,36.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1679 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 21.5,34.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1680 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 32.5,35.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1681 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 34.5,35.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1682 - components: - - type: Transform - pos: 25.5,36.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1683 - components: - - type: Transform - pos: 28.5,38.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1684 - components: - - type: Transform - pos: 19.5,46.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1685 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 17.5,47.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1686 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 21.5,47.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1687 - components: - - type: Transform - pos: 23.5,32.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1688 - components: - - type: Transform - pos: 17.5,32.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1689 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 22.5,27.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1690 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 20.5,25.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1694 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 28.5,19.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1695 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 24.5,19.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1696 - components: - - type: Transform - pos: 13.5,22.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1697 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 13.5,18.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1698 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 15.5,18.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1699 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 9.5,16.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1700 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 10.5,13.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1828 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 25.5,42.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1829 - components: - - type: Transform - pos: 25.5,48.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 -- proto: PoweredSmallLightEmpty - entities: - - uid: 1640 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 26.5,25.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1658 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 24.5,27.5 - parent: 588 - - type: ApcPowerReceiver - powerLoad: 0 -- proto: Rack - entities: - - uid: 255 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 15.5,0.5 - parent: 588 - - uid: 264 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 3.5,0.5 - parent: 588 - - uid: 283 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 1.5,0.5 - parent: 588 - - uid: 285 - components: - - type: Transform - pos: 13.5,0.5 - parent: 588 - - uid: 324 - components: - - type: Transform - pos: 19.5,4.5 - parent: 588 - - uid: 396 - components: - - type: Transform - pos: 28.5,8.5 - parent: 588 - - uid: 401 - components: - - type: Transform - pos: 32.5,8.5 - parent: 588 - - uid: 417 - components: - - type: Transform - pos: 12.5,6.5 - parent: 588 - - uid: 418 - components: - - type: Transform - pos: 12.5,10.5 - parent: 588 - - uid: 419 - components: - - type: Transform - pos: 22.5,10.5 - parent: 588 - - uid: 420 - components: - - type: Transform - pos: 22.5,6.5 - parent: 588 - - uid: 478 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 27.5,15.5 - parent: 588 - - uid: 551 - components: - - type: Transform - pos: 22.5,15.5 - parent: 588 - - uid: 585 - components: - - type: Transform - pos: 1.5,12.5 - parent: 588 - - uid: 596 - components: - - type: Transform - pos: 1.5,16.5 - parent: 588 - - uid: 597 - components: - - type: Transform - pos: 5.5,16.5 - parent: 588 - - uid: 598 - components: - - type: Transform - pos: 5.5,12.5 - parent: 588 - - uid: 966 - components: - - type: Transform - pos: 25.5,32.5 - parent: 588 - - uid: 977 - components: - - type: Transform - pos: 15.5,32.5 - parent: 588 - - uid: 1015 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 12.5,25.5 - parent: 588 - - uid: 1016 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 12.5,24.5 - parent: 588 - - uid: 1021 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 18.5,25.5 - parent: 588 - - uid: 1024 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 18.5,24.5 - parent: 588 - - uid: 1111 - components: - - type: Transform - pos: 14.5,32.5 - parent: 588 - - uid: 1112 - components: - - type: Transform - pos: 26.5,32.5 - parent: 588 - - uid: 1206 - components: - - type: Transform - pos: 1.5,8.5 - parent: 588 - - uid: 1208 - components: - - type: Transform - pos: 9.5,8.5 - parent: 588 - - uid: 1211 - components: - - type: Transform - pos: 2.5,34.5 - parent: 588 - - uid: 1319 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 29.5,40.5 - parent: 588 - - uid: 1562 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 17.5,47.5 - parent: 588 - - uid: 1858 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 26.5,21.5 - parent: 588 -- proto: Railing - entities: - - uid: 313 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 30.5,4.5 - parent: 588 - - uid: 314 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 30.5,0.5 - parent: 588 - - uid: 427 - components: - - type: Transform - pos: 6.5,7.5 - parent: 588 - - uid: 428 - components: - - type: Transform - pos: 4.5,7.5 - parent: 588 - - uid: 429 - components: - - type: Transform - pos: 3.5,7.5 - parent: 588 - - uid: 430 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 7.5,9.5 - parent: 588 - - uid: 431 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 6.5,9.5 - parent: 588 - - uid: 435 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 5.5,9.5 - parent: 588 - - uid: 436 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 4.5,9.5 - parent: 588 - - uid: 437 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 3.5,9.5 - parent: 588 - - uid: 439 - components: - - type: Transform - pos: 5.5,7.5 - parent: 588 - - uid: 440 - components: - - type: Transform - pos: 7.5,7.5 - parent: 588 - - uid: 770 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 26.5,21.5 - parent: 588 - - uid: 850 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 9.5,30.5 - parent: 588 - - uid: 851 - components: - - type: Transform - pos: 9.5,32.5 - parent: 588 - - uid: 854 - components: - - type: Transform - pos: 3.5,32.5 - parent: 588 - - uid: 855 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 3.5,30.5 - parent: 588 - - uid: 1259 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 7.5,4.5 - parent: 588 - - uid: 1260 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 9.5,4.5 - parent: 588 - - uid: 1261 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 9.5,0.5 - parent: 588 - - uid: 1262 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 7.5,0.5 - parent: 588 -- proto: RailingCorner - entities: - - uid: 315 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 30.5,1.5 - parent: 588 - - uid: 316 - components: - - type: Transform - pos: 30.5,3.5 - parent: 588 - - uid: 771 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 27.5,21.5 - parent: 588 - - uid: 772 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 25.5,21.5 - parent: 588 - - uid: 845 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 2.5,32.5 - parent: 588 - - uid: 846 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 2.5,30.5 - parent: 588 - - uid: 847 - components: - - type: Transform - pos: 10.5,32.5 - parent: 588 - - uid: 848 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 10.5,30.5 - parent: 588 - - uid: 849 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 8.5,30.5 - parent: 588 - - uid: 852 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 8.5,32.5 - parent: 588 - - uid: 853 - components: - - type: Transform - pos: 4.5,32.5 - parent: 588 - - uid: 856 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 4.5,30.5 - parent: 588 - - uid: 886 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,40.5 - parent: 588 - - uid: 888 - components: - - type: Transform - pos: 2.5,40.5 - parent: 588 - - uid: 890 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 1.5,40.5 - parent: 588 - - uid: 891 - components: - - type: Transform - pos: 5.5,40.5 - parent: 588 - - uid: 892 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 4.5,38.5 - parent: 588 - - uid: 893 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 5.5,38.5 - parent: 588 - - uid: 894 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 2.5,38.5 - parent: 588 - - uid: 895 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 1.5,38.5 - parent: 588 - - uid: 1255 - components: - - type: Transform - pos: 7.5,3.5 - parent: 588 - - uid: 1256 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 9.5,3.5 - parent: 588 - - uid: 1257 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 9.5,1.5 - parent: 588 - - uid: 1258 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 7.5,1.5 - parent: 588 - - uid: 1351 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 1.5,44.5 - parent: 588 - - uid: 1352 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 2.5,43.5 - parent: 588 - - uid: 1353 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 4.5,43.5 - parent: 588 - - uid: 1354 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 5.5,44.5 - parent: 588 - - uid: 1355 - components: - - type: Transform - pos: 1.5,46.5 - parent: 588 - - uid: 1356 - components: - - type: Transform - pos: 2.5,47.5 - parent: 588 - - uid: 1357 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,47.5 - parent: 588 - - uid: 1358 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 5.5,46.5 - parent: 588 -- proto: RailingCornerSmall - entities: - - uid: 337 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 29.5,3.5 - parent: 588 - - uid: 338 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 29.5,1.5 - parent: 588 - - uid: 1376 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 1.5,43.5 - parent: 588 - - uid: 1377 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 1.5,47.5 - parent: 588 - - uid: 1378 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 5.5,47.5 - parent: 588 - - uid: 1379 - components: - - type: Transform - pos: 5.5,43.5 - parent: 588 -- proto: RandomDrinkBottle - entities: - - uid: 580 - components: - - type: Transform - pos: 12.5,12.5 - parent: 588 -- proto: RandomFoodSingle - entities: - - uid: 764 - components: - - type: Transform - pos: 6.5,19.5 - parent: 588 -- proto: RandomInstruments - entities: - - uid: 546 - components: - - type: Transform - pos: 1.5,4.5 - parent: 588 - - uid: 1159 - components: - - type: Transform - pos: 21.5,18.5 - parent: 588 - - uid: 1833 - components: - - type: Transform - pos: 24.5,42.5 - parent: 588 -- proto: RandomPosterContraband - entities: - - uid: 1571 - components: - - type: Transform - pos: 25.5,39.5 - parent: 588 - - uid: 1572 - components: - - type: Transform - pos: 3.5,35.5 - parent: 588 - - uid: 1573 - components: - - type: Transform - pos: 7.5,35.5 - parent: 588 - - uid: 1574 - components: - - type: Transform - pos: 5.5,25.5 - parent: 588 - - uid: 1575 - components: - - type: Transform - pos: 30.5,15.5 - parent: 588 - - uid: 1805 - components: - - type: Transform - pos: 18.5,43.5 - parent: 588 - - uid: 1806 - components: - - type: Transform - pos: 20.5,47.5 - parent: 588 -- proto: RandomSoap - entities: - - uid: 397 - components: - - type: Transform - pos: 8.5,24.5 - parent: 588 -- proto: RandomVending - entities: - - uid: 539 - components: - - type: Transform - pos: 17.5,16.5 - parent: 588 -- proto: ReinforcedWindow - entities: - - uid: 214 - components: - - type: Transform - pos: 19.5,34.5 - parent: 588 - - uid: 409 - components: - - type: Transform - pos: 15.5,7.5 - parent: 588 - - uid: 410 - components: - - type: Transform - pos: 15.5,9.5 - parent: 588 - - uid: 411 - components: - - type: Transform - pos: 19.5,7.5 - parent: 588 - - uid: 412 - components: - - type: Transform - pos: 19.5,9.5 - parent: 588 - - uid: 591 - components: - - type: Transform - pos: 2.5,12.5 - parent: 588 - - uid: 592 - components: - - type: Transform - pos: 4.5,12.5 - parent: 588 - - uid: 594 - components: - - type: Transform - pos: 4.5,16.5 - parent: 588 - - uid: 595 - components: - - type: Transform - pos: 2.5,16.5 - parent: 588 - - uid: 1166 - components: - - type: Transform - pos: 19.5,36.5 - parent: 588 - - uid: 1168 - components: - - type: Transform - pos: 15.5,36.5 - parent: 588 - - uid: 1169 - components: - - type: Transform - pos: 15.5,34.5 - parent: 588 -- proto: RemoteSignaller - entities: - - uid: 593 - components: - - type: Transform - pos: 34.361877,24.623777 - parent: 588 - - type: DeviceLinkSource - linkedPorts: - 1238: - - Pressed: Toggle - 1239: - - Pressed: Toggle - 1237: - - Pressed: Toggle - - uid: 1104 - components: - - type: Transform - pos: 25.24476,30.698978 - parent: 588 - - uid: 1105 - components: - - type: Transform - pos: 25.443544,30.613832 - parent: 588 - - uid: 1106 - components: - - type: Transform - pos: 5.677143,16.762346 - parent: 588 -- proto: RiotLaserShield - entities: - - uid: 1618 - components: - - type: Transform - pos: 12.616156,10.534842 - parent: 588 -- proto: RiotShield - entities: - - uid: 600 - components: - - type: Transform - pos: 1.3209407,16.656654 - parent: 588 - - uid: 601 - components: - - type: Transform - pos: 1.5481212,16.543125 - parent: 588 -- proto: SalvageCanisterSpawner - entities: - - uid: 998 - components: - - type: Transform - pos: 22.5,30.5 - parent: 588 - - uid: 1009 - components: - - type: Transform - pos: 19.5,30.5 - parent: 588 - - uid: 1025 - components: - - type: Transform - pos: 21.5,30.5 - parent: 588 - - uid: 1190 - components: - - type: Transform - pos: 9.5,36.5 - parent: 588 - - uid: 1210 - components: - - type: Transform - pos: 9.5,48.5 - parent: 588 - - uid: 1413 - components: - - type: Transform - pos: 13.5,48.5 - parent: 588 - - uid: 1470 - components: - - type: Transform - pos: 12.5,48.5 - parent: 588 -- proto: SawAdvanced - entities: - - uid: 1468 - components: - - type: Transform - pos: 8.527969,43.529327 - parent: 588 -- proto: ScalpelLaser - entities: - - uid: 1472 - components: - - type: Transform - pos: 8.485372,43.131977 - parent: 588 -- proto: ScalpelShiv - entities: - - uid: 708 - components: - - type: Transform - pos: 16.074419,18.727995 - parent: 588 - - uid: 1592 - components: - - type: Transform - pos: 10.50393,24.491432 - parent: 588 -- proto: SeedExtractor - entities: - - uid: 802 - components: - - type: Transform - pos: 33.5,21.5 - parent: 588 - - uid: 1776 - components: - - type: Transform - pos: 28.5,42.5 - parent: 588 -- proto: SheetGlass - entities: - - uid: 649 - components: - - type: Transform - pos: 14.3137455,32.471424 - parent: 588 -- proto: SheetPlasteel - entities: - - uid: 866 - components: - - type: Transform - pos: 2.412651,34.456436 - parent: 588 -- proto: SheetPlastic - entities: - - uid: 398 - components: - - type: Transform - pos: 20.04785,45.07574 - parent: 588 -- proto: SheetSteel - entities: - - uid: 656 - components: - - type: Transform - pos: 26.36062,32.5183 - parent: 588 - - uid: 699 - components: - - type: Transform - pos: 29.259031,40.432583 - parent: 588 -- proto: ShowcaseRobot - entities: - - uid: 1621 - components: - - type: Transform - pos: 16.5,10.5 - parent: 588 - - uid: 1622 - components: - - type: Transform - pos: 18.5,6.5 - parent: 588 -- proto: ShuttersNormal - entities: - - uid: 1237 - components: - - type: Transform - pos: 34.5,27.5 - parent: 588 - - type: DeviceLinkSink - links: - - 593 - - uid: 1238 - components: - - type: Transform - pos: 32.5,27.5 - parent: 588 - - type: DeviceLinkSink - links: - - 593 -- proto: ShuttersWindow - entities: - - uid: 1239 - components: - - type: Transform - pos: 33.5,27.5 - parent: 588 - - type: DeviceLinkSink - links: - - 593 -- proto: SignCloning - entities: - - uid: 1484 - components: - - type: Transform - pos: 12.5,43.5 - parent: 588 -- proto: SignPrison - entities: - - uid: 1792 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 6.5,3.5 - parent: 588 - - uid: 1793 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 10.5,1.5 - parent: 588 - - uid: 1794 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 1.5,21.5 - parent: 588 - - uid: 1795 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 3.5,19.5 - parent: 588 - - uid: 1796 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 0.5,46.5 - parent: 588 - - uid: 1797 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 6.5,44.5 - parent: 588 -- proto: SignSecurity - entities: - - uid: 1798 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 22.5,1.5 - parent: 588 -- proto: SignSurgery - entities: - - uid: 1483 - components: - - type: Transform - pos: 10.5,43.5 - parent: 588 -- proto: Sink - entities: - - uid: 935 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 10.5,25.5 - parent: 588 -- proto: SinkStemlessWater - entities: - - uid: 1461 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 9.5,42.5 - parent: 588 - - uid: 1462 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 13.5,42.5 - parent: 588 -- proto: SMESBasic - entities: - - uid: 46 - components: - - type: Transform - pos: 26.5,13.5 - parent: 588 - - uid: 56 - components: - - type: Transform - pos: 28.5,13.5 - parent: 588 - - uid: 747 - components: - - type: Transform - pos: 26.5,19.5 - parent: 588 - - uid: 1506 - components: - - type: Transform - pos: 18.5,46.5 - parent: 588 - - uid: 1507 - components: - - type: Transform - pos: 20.5,46.5 - parent: 588 -- proto: SoapSyndie - entities: - - uid: 1856 - components: - - type: Transform - pos: 10.4890785,27.46785 - parent: 588 -- proto: SpaceCash100 - entities: - - uid: 1243 - components: - - type: Transform - pos: 11.887424,39.621456 - parent: 588 - - uid: 1244 - components: - - type: Transform - pos: 11.759636,39.479546 - parent: 588 - - uid: 1296 - components: - - type: Transform - pos: 12.100407,39.465355 - parent: 588 - - uid: 1297 - components: - - type: Transform - pos: 12.100407,39.80594 - parent: 588 - - uid: 1298 - components: - - type: Transform - pos: 11.688642,39.720795 - parent: 588 - - uid: 1299 - components: - - type: Transform - pos: 11.4330635,39.57888 - parent: 588 -- proto: Spear - entities: - - uid: 1834 - components: - - type: Transform - pos: 24.466219,48.441994 - parent: 588 -- proto: SpeedLoaderMagnum - entities: - - uid: 950 - components: - - type: Transform - pos: 28.703945,8.421182 - parent: 588 -- proto: StasisBed - entities: - - uid: 1425 - components: - - type: Transform - pos: 13.5,43.5 - parent: 588 -- proto: StimkitFilled - entities: - - uid: 561 - components: - - type: Transform - pos: 30.39083,27.514402 - parent: 588 -- proto: StimpackMini - entities: - - uid: 1879 - components: - - type: Transform - pos: 24.467485,46.702366 - parent: 588 -- proto: Stool - entities: - - uid: 1017 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 14.5,25.5 - parent: 588 - - uid: 1018 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 14.5,24.5 - parent: 588 - - uid: 1019 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 16.5,28.5 - parent: 588 - - uid: 1020 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 18.5,28.5 - parent: 588 - - uid: 1593 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 0.5,13.5 - parent: 588 - - uid: 1594 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 0.5,15.5 - parent: 588 - - uid: 1595 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 6.5,15.5 - parent: 588 - - uid: 1596 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 6.5,13.5 - parent: 588 -- proto: SubstationBasic - entities: - - uid: 467 - components: - - type: Transform - pos: 27.5,13.5 - parent: 588 - - uid: 1508 - components: - - type: Transform - pos: 19.5,46.5 - parent: 588 -- proto: SubstationWallBasic - entities: - - uid: 774 - components: - - type: Transform - pos: 27.5,19.5 - parent: 588 - - uid: 972 - components: - - type: Transform - pos: 19.5,32.5 - parent: 588 -- proto: SyringeEphedrine - entities: - - uid: 1475 - components: - - type: Transform - pos: 14.472328,42.917698 - parent: 588 -- proto: Table - entities: - - uid: 525 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 16.5,13.5 - parent: 588 - - uid: 527 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 16.5,12.5 - parent: 588 - - uid: 528 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 17.5,12.5 - parent: 588 - - uid: 535 - components: - - type: Transform - pos: 20.5,14.5 - parent: 588 - - uid: 536 - components: - - type: Transform - pos: 20.5,15.5 - parent: 588 - - uid: 630 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 6.5,19.5 - parent: 588 - - uid: 632 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 10.5,19.5 - parent: 588 - - uid: 633 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 10.5,18.5 - parent: 588 - - uid: 636 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 6.5,22.5 - parent: 588 - - uid: 637 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 7.5,22.5 - parent: 588 - - uid: 710 - components: - - type: Transform - pos: 18.5,22.5 - parent: 588 - - uid: 711 - components: - - type: Transform - pos: 18.5,21.5 - parent: 588 - - uid: 712 - components: - - type: Transform - pos: 21.5,18.5 - parent: 588 - - uid: 713 - components: - - type: Transform - pos: 22.5,18.5 - parent: 588 - - uid: 714 - components: - - type: Transform - pos: 18.5,18.5 - parent: 588 - - uid: 715 - components: - - type: Transform - pos: 19.5,18.5 - parent: 588 - - uid: 799 - components: - - type: Transform - pos: 33.5,20.5 - parent: 588 - - uid: 1118 - components: - - type: Transform - pos: 22.5,12.5 - parent: 588 - - uid: 1778 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 30.5,48.5 - parent: 588 - - uid: 1779 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 29.5,48.5 - parent: 588 - - uid: 1780 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 30.5,47.5 - parent: 588 -- proto: TableFrame - entities: - - uid: 705 - components: - - type: Transform - pos: 15.5,22.5 - parent: 588 - - uid: 1063 - components: - - type: Transform - pos: 26.5,24.5 - parent: 588 -- proto: TableGlass - entities: - - uid: 1144 - components: - - type: Transform - pos: 30.5,27.5 - parent: 588 - - uid: 1145 - components: - - type: Transform - pos: 30.5,28.5 - parent: 588 - - uid: 1390 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 8.5,43.5 - parent: 588 - - uid: 1391 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 8.5,42.5 - parent: 588 - - uid: 1398 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 10.5,44.5 - parent: 588 - - uid: 1405 - components: - - type: Transform - pos: 14.5,42.5 - parent: 588 - - uid: 1406 - components: - - type: Transform - pos: 14.5,43.5 - parent: 588 - - uid: 1407 - components: - - type: Transform - pos: 12.5,44.5 - parent: 588 -- proto: TableReinforced - entities: - - uid: 924 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 26.5,36.5 - parent: 588 - - uid: 925 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 26.5,35.5 - parent: 588 - - uid: 926 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 26.5,34.5 - parent: 588 - - uid: 1005 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 15.5,30.5 - parent: 588 - - uid: 1006 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 25.5,30.5 - parent: 588 - - uid: 1012 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 14.5,28.5 - parent: 588 - - uid: 1023 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 16.5,24.5 - parent: 588 - - uid: 1235 - components: - - type: Transform - pos: 34.5,24.5 - parent: 588 - - uid: 1567 - components: - - type: Transform - pos: 21.5,47.5 - parent: 588 -- proto: TableReinforcedGlass - entities: - - uid: 1213 - components: - - type: Transform - pos: 10.5,39.5 - parent: 588 - - uid: 1214 - components: - - type: Transform - pos: 11.5,39.5 - parent: 588 - - uid: 1215 - components: - - type: Transform - pos: 12.5,39.5 - parent: 588 -- proto: TableWood - entities: - - uid: 309 - components: - - type: Transform - pos: 20.5,4.5 - parent: 588 - - uid: 310 - components: - - type: Transform - pos: 21.5,4.5 - parent: 588 - - uid: 311 - components: - - type: Transform - pos: 18.5,0.5 - parent: 588 - - uid: 312 - components: - - type: Transform - pos: 21.5,3.5 - parent: 588 - - uid: 317 - components: - - type: Transform - pos: 18.5,1.5 - parent: 588 - - uid: 318 - components: - - type: Transform - pos: 19.5,0.5 - parent: 588 - - uid: 332 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 25.5,3.5 - parent: 588 - - uid: 333 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 26.5,3.5 - parent: 588 - - uid: 334 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 27.5,3.5 - parent: 588 - - uid: 335 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 25.5,4.5 - parent: 588 - - uid: 336 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 27.5,4.5 - parent: 588 - - uid: 340 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 24.5,1.5 - parent: 588 - - uid: 341 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 25.5,1.5 - parent: 588 - - uid: 342 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 27.5,1.5 - parent: 588 - - uid: 343 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 28.5,1.5 - parent: 588 - - uid: 563 - components: - - type: Transform - pos: 13.5,13.5 - parent: 588 - - uid: 564 - components: - - type: Transform - pos: 12.5,13.5 - parent: 588 - - uid: 565 - components: - - type: Transform - pos: 12.5,12.5 - parent: 588 - - uid: 1047 - components: - - type: Transform - pos: 22.5,28.5 - parent: 588 - - uid: 1048 - components: - - type: Transform - pos: 20.5,24.5 - parent: 588 - - uid: 1062 - components: - - type: Transform - pos: 26.5,28.5 - parent: 588 - - uid: 1227 - components: - - type: Transform - pos: 12.5,36.5 - parent: 588 - - uid: 1228 - components: - - type: Transform - pos: 22.5,34.5 - parent: 588 - - uid: 1783 - components: - - type: Transform - pos: 24.5,46.5 - parent: 588 - - uid: 1784 - components: - - type: Transform - pos: 24.5,44.5 - parent: 588 -- proto: TargetHuman - entities: - - uid: 1077 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 32.5,35.5 - parent: 588 -- proto: TintedWindow - entities: - - uid: 567 - components: - - type: Transform - pos: 12.5,15.5 - parent: 588 - - uid: 1463 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 10.5,43.5 - parent: 588 - - uid: 1464 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 12.5,43.5 - parent: 588 -- proto: ToiletEmpty - entities: - - uid: 932 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 8.5,24.5 - parent: 588 - - uid: 933 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 10.5,24.5 - parent: 588 - - uid: 934 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 8.5,25.5 - parent: 588 -- proto: UniformScrubsColorPurple - entities: - - uid: 1712 - components: - - type: Transform - pos: 10.503376,44.53288 - parent: 588 -- proto: VendingMachineChefvend - entities: - - uid: 532 - components: - - type: Transform - pos: 18.5,12.5 - parent: 588 -- proto: VendingMachineCigs - entities: - - uid: 720 - components: - - type: Transform - pos: 22.5,22.5 - parent: 588 -- proto: VendingMachineCoffee - entities: - - uid: 765 - components: - - type: Transform - pos: 10.5,22.5 - parent: 588 - - uid: 1285 - components: - - type: Transform - pos: 18.5,40.5 - parent: 588 -- proto: VendingMachineDetDrobe - entities: - - uid: 582 - components: - - type: Transform - pos: 10.5,14.5 - parent: 588 -- proto: VendingMachineDinnerware - entities: - - uid: 1781 - components: - - type: Transform - pos: 30.5,46.5 - parent: 588 -- proto: VendingMachineDonut - entities: - - uid: 538 - components: - - type: Transform - pos: 16.5,16.5 - parent: 588 -- proto: VendingMachineLawDrobe - entities: - - uid: 319 - components: - - type: Transform - pos: 18.5,4.5 - parent: 588 -- proto: VendingMachineMedical - entities: - - uid: 1143 - components: - - type: Transform - pos: 28.5,28.5 - parent: 588 -- proto: VendingMachineSec - entities: - - uid: 1013 - components: - - type: Transform - pos: 14.5,27.5 - parent: 588 -- proto: VendingMachineSeedsUnlocked - entities: - - uid: 800 - components: - - type: Transform - pos: 33.5,19.5 - parent: 588 - - uid: 1775 - components: - - type: Transform - pos: 28.5,44.5 - parent: 588 -- proto: WallmountTelescreen - entities: - - uid: 572 - components: - - type: Transform - pos: 13.5,13.5 - parent: 588 -- proto: WallPlastitaniumIndestructible - entities: - - uid: 377 - components: - - type: Transform - pos: 30.5,7.5 - parent: 588 - - uid: 378 - components: - - type: Transform - pos: 29.5,7.5 - parent: 588 - - uid: 379 - components: - - type: Transform - pos: 25.5,9.5 - parent: 588 - - uid: 380 - components: - - type: Transform - pos: 27.5,9.5 - parent: 588 - - uid: 381 - components: - - type: Transform - pos: 27.5,8.5 - parent: 588 - - uid: 382 - components: - - type: Transform - pos: 28.5,9.5 - parent: 588 - - uid: 383 - components: - - type: Transform - pos: 31.5,9.5 - parent: 588 - - uid: 384 - components: - - type: Transform - pos: 31.5,8.5 - parent: 588 - - uid: 385 - components: - - type: Transform - pos: 31.5,7.5 - parent: 588 - - uid: 386 - components: - - type: Transform - pos: 25.5,8.5 - parent: 588 - - uid: 387 - components: - - type: Transform - pos: 33.5,7.5 - parent: 588 - - uid: 388 - components: - - type: Transform - pos: 25.5,7.5 - parent: 588 - - uid: 389 - components: - - type: Transform - pos: 27.5,7.5 - parent: 588 - - uid: 390 - components: - - type: Transform - pos: 30.5,9.5 - parent: 588 - - uid: 391 - components: - - type: Transform - pos: 28.5,7.5 - parent: 588 - - uid: 392 - components: - - type: Transform - pos: 26.5,9.5 - parent: 588 - - uid: 393 - components: - - type: Transform - pos: 33.5,8.5 - parent: 588 - - uid: 394 - components: - - type: Transform - pos: 33.5,9.5 - parent: 588 - - uid: 395 - components: - - type: Transform - pos: 32.5,9.5 - parent: 588 -- proto: WallReinforced - entities: - - uid: 45 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 2.5,8.5 - parent: 588 - - uid: 51 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 8.5,8.5 - parent: 588 - - uid: 244 - components: - - type: Transform - pos: 6.5,4.5 - parent: 588 - - uid: 245 - components: - - type: Transform - pos: 6.5,3.5 - parent: 588 - - uid: 246 - components: - - type: Transform - pos: 10.5,4.5 - parent: 588 - - uid: 247 - components: - - type: Transform - pos: 10.5,3.5 - parent: 588 - - uid: 266 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 6.5,1.5 - parent: 588 - - uid: 267 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 6.5,0.5 - parent: 588 - - uid: 268 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 10.5,1.5 - parent: 588 - - uid: 269 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 10.5,0.5 - parent: 588 - - uid: 291 - components: - - type: Transform - pos: 15.5,6.5 - parent: 588 - - uid: 292 - components: - - type: Transform - pos: 19.5,6.5 - parent: 588 - - uid: 405 - components: - - type: Transform - pos: 15.5,10.5 - parent: 588 - - uid: 406 - components: - - type: Transform - pos: 19.5,10.5 - parent: 588 - - uid: 426 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 8.5,9.5 - parent: 588 - - uid: 432 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 2.5,7.5 - parent: 588 - - uid: 433 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 2.5,9.5 - parent: 588 - - uid: 434 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 8.5,7.5 - parent: 588 - - uid: 570 - components: - - type: Transform - pos: 0.5,46.5 - parent: 588 - - uid: 621 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 1.5,21.5 - parent: 588 - - uid: 622 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 3.5,19.5 - parent: 588 - - uid: 623 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 3.5,21.5 - parent: 588 - - uid: 627 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 1.5,19.5 - parent: 588 - - uid: 1078 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 33.5,35.5 - parent: 588 - - uid: 1330 - components: - - type: Transform - pos: 0.5,44.5 - parent: 588 - - uid: 1332 - components: - - type: Transform - pos: 2.5,42.5 - parent: 588 - - uid: 1334 - components: - - type: Transform - pos: 4.5,42.5 - parent: 588 - - uid: 1335 - components: - - type: Transform - pos: 6.5,44.5 - parent: 588 - - uid: 1337 - components: - - type: Transform - pos: 4.5,48.5 - parent: 588 - - uid: 1338 - components: - - type: Transform - pos: 6.5,46.5 - parent: 588 - - uid: 1340 - components: - - type: Transform - pos: 2.5,48.5 - parent: 588 -- proto: WallSolid - entities: - - uid: 140 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 5.5,25.5 - parent: 588 - - uid: 144 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 5.5,26.5 - parent: 588 - - uid: 145 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 4.5,25.5 - parent: 588 - - uid: 146 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 5.5,27.5 - parent: 588 - - uid: 205 - components: - - type: Transform - pos: 8.5,35.5 - parent: 588 - - uid: 206 - components: - - type: Transform - pos: 7.5,35.5 - parent: 588 - - uid: 207 - components: - - type: Transform - pos: 6.5,35.5 - parent: 588 - - uid: 208 - components: - - type: Transform - pos: 4.5,35.5 - parent: 588 - - uid: 210 - components: - - type: Transform - pos: 1.5,34.5 - parent: 588 - - uid: 305 - components: - - type: Transform - pos: 22.5,4.5 - parent: 588 - - uid: 306 - components: - - type: Transform - pos: 22.5,3.5 - parent: 588 - - uid: 307 - components: - - type: Transform - pos: 22.5,0.5 - parent: 588 - - uid: 308 - components: - - type: Transform - pos: 22.5,1.5 - parent: 588 - - uid: 476 - components: - - type: Transform - pos: 25.5,13.5 - parent: 588 - - uid: 481 - components: - - type: Transform - pos: 25.5,15.5 - parent: 588 - - uid: 483 - components: - - type: Transform - pos: 30.5,13.5 - parent: 588 - - uid: 501 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 25.5,14.5 - parent: 588 - - uid: 510 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 30.5,15.5 - parent: 588 - - uid: 749 - components: - - type: Transform - pos: 25.5,19.5 - parent: 588 - - uid: 750 - components: - - type: Transform - pos: 27.5,19.5 - parent: 588 - - uid: 975 - components: - - type: Transform - pos: 19.5,32.5 - parent: 588 - - uid: 995 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 21.5,32.5 - parent: 588 - - uid: 1163 - components: - - type: Transform - pos: 8.5,36.5 - parent: 588 - - uid: 1164 - components: - - type: Transform - pos: 3.5,35.5 - parent: 588 - - uid: 1165 - components: - - type: Transform - pos: 2.5,35.5 - parent: 588 - - uid: 1167 - components: - - type: Transform - pos: 1.5,35.5 - parent: 588 - - uid: 1300 - components: - - type: Transform - pos: 25.5,39.5 - parent: 588 - - uid: 1303 - components: - - type: Transform - pos: 28.5,39.5 - parent: 588 - - uid: 1304 - components: - - type: Transform - pos: 29.5,39.5 - parent: 588 - - uid: 1305 - components: - - type: Transform - pos: 28.5,40.5 - parent: 588 - - uid: 1485 - components: - - type: Transform - pos: 17.5,43.5 - parent: 588 - - uid: 1486 - components: - - type: Transform - pos: 17.5,44.5 - parent: 588 - - uid: 1487 - components: - - type: Transform - pos: 18.5,43.5 - parent: 588 - - uid: 1488 - components: - - type: Transform - pos: 20.5,43.5 - parent: 588 - - uid: 1489 - components: - - type: Transform - pos: 21.5,43.5 - parent: 588 - - uid: 1490 - components: - - type: Transform - pos: 21.5,44.5 - parent: 588 - - uid: 1491 - components: - - type: Transform - pos: 18.5,47.5 - parent: 588 - - uid: 1492 - components: - - type: Transform - pos: 19.5,47.5 - parent: 588 - - uid: 1493 - components: - - type: Transform - pos: 20.5,47.5 - parent: 588 -- proto: WallWood - entities: - - uid: 554 - components: - - type: Transform - pos: 9.5,13.5 - parent: 588 - - uid: 555 - components: - - type: Transform - pos: 9.5,14.5 - parent: 588 - - uid: 556 - components: - - type: Transform - pos: 9.5,15.5 - parent: 588 - - uid: 557 - components: - - type: Transform - pos: 10.5,15.5 - parent: 588 - - uid: 558 - components: - - type: Transform - pos: 13.5,15.5 - parent: 588 - - uid: 559 - components: - - type: Transform - pos: 13.5,16.5 - parent: 588 - - uid: 566 - components: - - type: Transform - pos: 9.5,12.5 - parent: 588 -- proto: WardrobePrisonFilled - entities: - - uid: 297 - components: - - type: Transform - pos: 2.5,4.5 - parent: 588 - - uid: 302 - components: - - type: Transform - pos: 4.5,4.5 - parent: 588 - - uid: 303 - components: - - type: Transform - pos: 12.5,4.5 - parent: 588 - - uid: 304 - components: - - type: Transform - pos: 14.5,4.5 - parent: 588 - - uid: 544 - components: - - type: Transform - pos: 16.5,4.5 - parent: 588 - - uid: 545 - components: - - type: Transform - pos: 0.5,4.5 - parent: 588 - - uid: 1769 - components: - - type: Transform - pos: 24.5,43.5 - parent: 588 - - uid: 1770 - components: - - type: Transform - pos: 24.5,47.5 - parent: 588 -- proto: WaterCooler - entities: - - uid: 629 - components: - - type: Transform - pos: 6.5,18.5 - parent: 588 - - uid: 724 - components: - - type: Transform - pos: 19.5,22.5 - parent: 588 - - uid: 1284 - components: - - type: Transform - pos: 17.5,40.5 - parent: 588 - - uid: 1292 - components: - - type: Transform - pos: 21.5,12.5 - parent: 588 -- proto: WaterTankHighCapacity - entities: - - uid: 801 - components: - - type: Transform - pos: 30.5,22.5 - parent: 588 - - uid: 1789 - components: - - type: Transform - pos: 28.5,48.5 - parent: 588 -- proto: WeaponCapacitorRecharger - entities: - - uid: 760 - components: - - type: Transform - pos: 10.5,18.5 - parent: 588 - - uid: 929 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 26.5,34.5 - parent: 588 - - uid: 1033 - components: - - type: Transform - pos: 14.5,28.5 - parent: 588 - - uid: 1034 - components: - - type: Transform - pos: 16.5,24.5 - parent: 588 -- proto: WeaponDisablerPractice - entities: - - uid: 547 - components: - - type: Transform - pos: 1.4370823,0.5241035 - parent: 588 - - uid: 930 - components: - - type: Transform - pos: 26.440151,36.61676 - parent: 588 - - uid: 1611 - components: - - type: Transform - pos: 12.371853,10.605072 - parent: 588 -- proto: WeaponLaserCarbinePractice - entities: - - uid: 931 - components: - - type: Transform - pos: 26.596338,36.36132 - parent: 588 - - uid: 1612 - components: - - type: Transform - pos: 22.543945,6.5464144 - parent: 588 -- proto: WeaponShotgunKammerer - entities: - - uid: 583 - components: - - type: Transform - pos: 26.57963,35.4414 - parent: 588 -- proto: WindoorAssemblySecure - entities: - - uid: 696 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 16.5,19.5 - parent: 588 - - uid: 697 - components: - - type: Transform - pos: 12.5,21.5 - parent: 588 - - uid: 1073 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 25.5,25.5 - parent: 588 -- proto: WindoorSecure - entities: - - uid: 1761 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 26.5,43.5 - parent: 588 - - uid: 1762 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 26.5,47.5 - parent: 588 -- proto: WindoorSecureBrigLocked - entities: - - uid: 339 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 29.5,2.5 - parent: 588 -- proto: WindoorSecureEngineeringLocked - entities: - - uid: 1569 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 18.5,45.5 - parent: 588 - - uid: 1570 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 20.5,45.5 - parent: 588 -- proto: WindoorSecureMedicalLocked - entities: - - uid: 1408 - components: - - type: Transform - pos: 11.5,44.5 - parent: 588 -- proto: WindoorSecureSecurityLocked - entities: - - uid: 252 - components: - - type: Transform - pos: 4.5,3.5 - parent: 588 - - uid: 253 - components: - - type: Transform - pos: 2.5,3.5 - parent: 588 - - uid: 256 - components: - - type: Transform - pos: 16.5,3.5 - parent: 588 - - uid: 274 - components: - - type: Transform - pos: 12.5,3.5 - parent: 588 - - uid: 275 - components: - - type: Transform - pos: 14.5,3.5 - parent: 588 - - uid: 289 - components: - - type: Transform - pos: 0.5,3.5 - parent: 588 - - uid: 698 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 12.5,19.5 - parent: 588 - - uid: 1053 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 21.5,25.5 - parent: 588 - - uid: 1054 - components: - - type: Transform - pos: 21.5,27.5 - parent: 588 -- proto: WindowDirectional - entities: - - uid: 480 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 26.5,15.5 - parent: 588 - - uid: 482 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 27.5,15.5 - parent: 588 - - uid: 540 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 28.5,15.5 - parent: 588 - - uid: 541 - components: - - type: Transform - pos: 26.5,13.5 - parent: 588 - - uid: 542 - components: - - type: Transform - pos: 27.5,13.5 - parent: 588 - - uid: 543 - components: - - type: Transform - pos: 28.5,13.5 - parent: 588 - - uid: 575 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 33.5,20.5 - parent: 588 - - uid: 576 - components: - - type: Transform - pos: 26.5,19.5 - parent: 588 - - uid: 803 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 33.5,21.5 - parent: 588 - - uid: 804 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 33.5,19.5 - parent: 588 - - uid: 1087 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 27.5,36.5 - parent: 588 - - uid: 1088 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 27.5,34.5 - parent: 588 - - uid: 1520 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 18.5,46.5 - parent: 588 - - uid: 1521 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 20.5,46.5 - parent: 588 - - uid: 1771 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 28.5,44.5 - parent: 588 - - uid: 1773 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 29.5,44.5 - parent: 588 - - uid: 1777 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 30.5,44.5 - parent: 588 - - uid: 1782 - components: - - type: Transform - pos: 30.5,46.5 - parent: 588 -- proto: WindowFrostedDirectional - entities: - - uid: 936 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 8.5,24.5 - parent: 588 - - uid: 937 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 10.5,24.5 - parent: 588 - - uid: 938 - components: - - type: Transform - pos: 8.5,27.5 - parent: 588 - - uid: 939 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 8.5,25.5 - parent: 588 - - uid: 941 - components: - - type: Transform - pos: 10.5,27.5 - parent: 588 - - uid: 942 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 10.5,28.5 - parent: 588 - - uid: 943 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 8.5,28.5 - parent: 588 - - uid: 1392 - components: - - type: Transform - pos: 8.5,44.5 - parent: 588 - - uid: 1393 - components: - - type: Transform - pos: 10.5,44.5 - parent: 588 - - uid: 1401 - components: - - type: Transform - pos: 12.5,44.5 - parent: 588 - - uid: 1402 - components: - - type: Transform - pos: 14.5,44.5 - parent: 588 - - uid: 1753 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 24.5,43.5 - parent: 588 - - uid: 1754 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 25.5,43.5 - parent: 588 - - uid: 1755 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 26.5,43.5 - parent: 588 - - uid: 1756 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 26.5,42.5 - parent: 588 - - uid: 1757 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 26.5,48.5 - parent: 588 - - uid: 1758 - components: - - type: Transform - pos: 26.5,47.5 - parent: 588 - - uid: 1759 - components: - - type: Transform - pos: 25.5,47.5 - parent: 588 - - uid: 1760 - components: - - type: Transform - pos: 24.5,47.5 - parent: 588 -- proto: WindowReinforcedDirectional - entities: - - uid: 97 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 2.5,14.5 - parent: 588 - - uid: 99 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 4.5,14.5 - parent: 588 - - uid: 258 - components: - - type: Transform - pos: 3.5,3.5 - parent: 588 - - uid: 259 - components: - - type: Transform - pos: 5.5,3.5 - parent: 588 - - uid: 260 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 3.5,3.5 - parent: 588 - - uid: 261 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 3.5,4.5 - parent: 588 - - uid: 270 - components: - - type: Transform - pos: 11.5,3.5 - parent: 588 - - uid: 271 - components: - - type: Transform - pos: 13.5,3.5 - parent: 588 - - uid: 272 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 13.5,3.5 - parent: 588 - - uid: 273 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 13.5,4.5 - parent: 588 - - uid: 277 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 1.5,4.5 - parent: 588 - - uid: 278 - components: - - type: Transform - pos: 15.5,3.5 - parent: 588 - - uid: 279 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 15.5,4.5 - parent: 588 - - uid: 280 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 1.5,3.5 - parent: 588 - - uid: 281 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 15.5,3.5 - parent: 588 - - uid: 290 - components: - - type: Transform - pos: 1.5,3.5 - parent: 588 - - uid: 607 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 3.5,14.5 - parent: 588 - - uid: 609 - components: - - type: Transform - pos: 4.5,14.5 - parent: 588 - - uid: 611 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 4.5,14.5 - parent: 588 - - uid: 612 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 2.5,14.5 - parent: 588 - - uid: 614 - components: - - type: Transform - pos: 3.5,14.5 - parent: 588 - - uid: 619 - components: - - type: Transform - pos: 2.5,14.5 - parent: 588 - - uid: 620 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 3.5,20.5 - parent: 588 - - uid: 624 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 1.5,20.5 - parent: 588 - - uid: 625 - components: - - type: Transform - pos: 2.5,19.5 - parent: 588 - - uid: 626 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 2.5,21.5 - parent: 588 - - uid: 648 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 15.5,19.5 - parent: 588 - - uid: 650 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 13.5,18.5 - parent: 588 - - uid: 651 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 13.5,19.5 - parent: 588 - - uid: 652 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 15.5,19.5 - parent: 588 - - uid: 653 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 15.5,18.5 - parent: 588 - - uid: 654 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 13.5,21.5 - parent: 588 - - uid: 658 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 13.5,22.5 - parent: 588 - - uid: 660 - components: - - type: Transform - pos: 13.5,21.5 - parent: 588 - - uid: 805 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 1.5,27.5 - parent: 588 - - uid: 806 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 1.5,26.5 - parent: 588 - - uid: 807 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 1.5,25.5 - parent: 588 - - uid: 808 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 1.5,25.5 - parent: 588 - - uid: 809 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 1.5,26.5 - parent: 588 - - uid: 810 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 1.5,27.5 - parent: 588 - - uid: 811 - components: - - type: Transform - pos: 1.5,25.5 - parent: 588 - - uid: 812 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 1.5,27.5 - parent: 588 - - uid: 1038 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 22.5,25.5 - parent: 588 - - uid: 1039 - components: - - type: Transform - pos: 20.5,27.5 - parent: 588 - - uid: 1042 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 20.5,25.5 - parent: 588 - - uid: 1045 - components: - - type: Transform - pos: 22.5,27.5 - parent: 588 - - uid: 1058 - components: - - type: Transform - pos: 24.5,27.5 - parent: 588 - - uid: 1059 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 26.5,25.5 - parent: 588 - - uid: 1060 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 24.5,25.5 - parent: 588 - - uid: 1399 - components: - - type: Transform - pos: 9.5,44.5 - parent: 588 - - uid: 1400 - components: - - type: Transform - pos: 13.5,44.5 - parent: 588 -- proto: Wrench - entities: - - uid: 424 - components: - - type: Transform - pos: 15.156982,32.526764 - parent: 588 -- proto: Zipties - entities: - - uid: 1156 - components: - - type: Transform - pos: 15.332411,0.52492684 - parent: 588 -- proto: ZiptiesBroken - entities: - - uid: 48 - components: - - type: Transform - pos: 5.2591753,3.5817227 - parent: 588 - - uid: 706 - components: - - type: Transform - pos: 16.06022,21.977758 - parent: 588 -... +meta: + format: 6 + postmapinit: false +tilemap: + 0: Space + 15: FloorBasalt + 29: FloorDark + 33: FloorDarkMini + 34: FloorDarkMono + 42: FloorElevatorShaft + 54: FloorGreenCircuit + 62: FloorLino + 77: FloorReinforced + 82: FloorShuttleOrange + 89: FloorSteel + 99: FloorSteelMini + 100: FloorSteelMono + 104: FloorTechMaint + 108: FloorWhite + 112: FloorWhiteMini + 118: FloorWood + 121: Plating +entities: +- proto: "" + entities: + - uid: 588 + components: + - type: MetaData + - type: Transform + - type: Map + - type: PhysicsMap + - type: Broadphase + - type: OccluderTree + - type: MapGrid + chunks: + -1,-1: + ind: -1,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAA + version: 6 + 0,0: + ind: 0,0 + tiles: WQAAAAADWQAAAAABWQAAAAACWQAAAAADWQAAAAACWQAAAAABeQAAAAAADwAAAAAAHQAAAAABDwAAAAAAeQAAAAAAWQAAAAACWQAAAAACWQAAAAACWQAAAAACWQAAAAACWQAAAAACWQAAAAABWQAAAAABWQAAAAAAWQAAAAADWQAAAAADeQAAAAAADwAAAAAADwAAAAAADwAAAAAAeQAAAAAAWQAAAAABWQAAAAACWQAAAAABWQAAAAACWQAAAAAAWQAAAAADWQAAAAADWQAAAAABWQAAAAADWQAAAAACWQAAAAABIgAAAAABHQAAAAABDwAAAAAAHQAAAAACIgAAAAAAWQAAAAABWQAAAAACWQAAAAABWQAAAAADWQAAAAADaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAADwAAAAAADwAAAAAADwAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAADwAAAAAAHQAAAAACDwAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAHQAAAAABHQAAAAABHQAAAAACDwAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAAHQAAAAABHQAAAAADHQAAAAABUgAAAAAAZAAAAAACWQAAAAAAZAAAAAACeQAAAAAAHQAAAAAAIgAAAAADeQAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAAeQAAAAAAIgAAAAACHQAAAAACUgAAAAAAYwAAAAACYwAAAAAAYwAAAAAAeQAAAAAAHQAAAAABIgAAAAACeQAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAAeQAAAAAAIgAAAAABHQAAAAADUgAAAAAAYwAAAAACYwAAAAAAYwAAAAAAWQAAAAACHQAAAAAAIgAAAAADeQAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAAeQAAAAAAIgAAAAAAHQAAAAABUgAAAAAAYwAAAAADYwAAAAABYwAAAAABeQAAAAAAHQAAAAADHQAAAAADHQAAAAACDwAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAAHQAAAAABHQAAAAABHQAAAAAAUgAAAAAAZAAAAAABWQAAAAABZAAAAAACeQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAHQAAAAAAHQAAAAABeQAAAAAAHQAAAAADeQAAAAAAHQAAAAADHQAAAAADUgAAAAAAaAAAAAAAeQAAAAAAdgAAAAADdgAAAAABdgAAAAADdgAAAAAAdgAAAAADUgAAAAAAHQAAAAABHQAAAAACHQAAAAACHQAAAAADHQAAAAADHQAAAAADHQAAAAAAUgAAAAAAaAAAAAAAeQAAAAAAdgAAAAABdgAAAAACdgAAAAAAdgAAAAACdgAAAAACUgAAAAAAHQAAAAADHQAAAAACDwAAAAAADwAAAAAADwAAAAAAHQAAAAACHQAAAAACUgAAAAAAaAAAAAAAeQAAAAAAdgAAAAACdgAAAAADdgAAAAADdgAAAAACdgAAAAADUgAAAAAAHQAAAAADHQAAAAACHQAAAAABHQAAAAACHQAAAAACHQAAAAADHQAAAAABUgAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAdgAAAAABUgAAAAAA + version: 6 + 0,1: + ind: 0,1 + tiles: HQAAAAAAHQAAAAADeQAAAAAAHQAAAAACeQAAAAAAHQAAAAADHQAAAAAAUgAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAdgAAAAACUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAHQAAAAADHQAAAAAAHQAAAAADHQAAAAADHQAAAAABUgAAAAAAWQAAAAAAWQAAAAABWQAAAAACWQAAAAAAWQAAAAAAUgAAAAAAaAAAAAAAeQAAAAAAWQAAAAABaAAAAAAAHQAAAAACeQAAAAAADwAAAAAAeQAAAAAAHQAAAAACUgAAAAAAWQAAAAADYwAAAAAAYwAAAAABYwAAAAADWQAAAAABUgAAAAAAaAAAAAAAaAAAAAAAWQAAAAAAeQAAAAAAHQAAAAABDwAAAAAADwAAAAAADwAAAAAAHQAAAAAAUgAAAAAAWQAAAAAAYwAAAAABYwAAAAACYwAAAAACWQAAAAADUgAAAAAAWQAAAAACWQAAAAADWQAAAAABWQAAAAAAHQAAAAAAeQAAAAAADwAAAAAAeQAAAAAAHQAAAAAAUgAAAAAAWQAAAAABYwAAAAABYwAAAAABYwAAAAABWQAAAAADUgAAAAAAaAAAAAAAaAAAAAAAWQAAAAAAWQAAAAABHQAAAAADHQAAAAABHQAAAAACHQAAAAAAHQAAAAABUgAAAAAAWQAAAAAAWQAAAAABWQAAAAAAWQAAAAACWQAAAAABUgAAAAAAaAAAAAAAaAAAAAAAWQAAAAABWQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAHQAAAAAAHQAAAAADHQAAAAAAUgAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAUgAAAAAAcAAAAAACcAAAAAACcAAAAAABUgAAAAAAWQAAAAADWQAAAAADZAAAAAAAUgAAAAAAHQAAAAAADwAAAAAAHQAAAAACUgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAUgAAAAAAcAAAAAADcAAAAAACcAAAAAADUgAAAAAAWQAAAAAAWQAAAAABZAAAAAABUgAAAAAAHQAAAAACDwAAAAAAHQAAAAAAUgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAUgAAAAAAcAAAAAADcAAAAAAAcAAAAAAAUgAAAAAAWQAAAAABWQAAAAABWQAAAAABUgAAAAAAHQAAAAACDwAAAAAAHQAAAAABUgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAUgAAAAAAcAAAAAADcAAAAAADcAAAAAABUgAAAAAAZAAAAAACWQAAAAABWQAAAAACUgAAAAAAHQAAAAADHQAAAAACHQAAAAADUgAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAUgAAAAAAcAAAAAACcAAAAAACcAAAAAADUgAAAAAAZAAAAAACWQAAAAAAWQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAHQAAAAAAHQAAAAABDwAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAAHQAAAAADHQAAAAACUgAAAAAAWQAAAAABWQAAAAACHQAAAAACHQAAAAABHQAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAAHQAAAAADHQAAAAADHQAAAAAAUgAAAAAAaAAAAAAAeQAAAAAA + version: 6 + 0,-1: + ind: 0,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAA + version: 6 + -1,0: + ind: -1,0 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAA + version: 6 + -1,1: + ind: -1,1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAA + version: 6 + 1,-1: + ind: 1,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAA + version: 6 + 1,0: + ind: 1,0 + tiles: WQAAAAABUgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAeQAAAAAAHQAAAAACHQAAAAAAHQAAAAABHQAAAAADHQAAAAABHQAAAAADHQAAAAADHQAAAAACHQAAAAADWQAAAAADUgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAeQAAAAAAHQAAAAAAHQAAAAADHQAAAAABHQAAAAACHQAAAAABHQAAAAADHQAAAAACHQAAAAABHQAAAAABWQAAAAAAUgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAIgAAAAACHQAAAAACHQAAAAACHQAAAAACHQAAAAABHQAAAAACHQAAAAACHQAAAAAAHQAAAAAAHQAAAAABaAAAAAAAUgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAeQAAAAAAHQAAAAADHQAAAAAAHQAAAAACHQAAAAAAHQAAAAADHQAAAAADHQAAAAADHQAAAAAAHQAAAAABaAAAAAAAUgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAeQAAAAAAHQAAAAABHQAAAAABHQAAAAACHQAAAAAAHQAAAAABHQAAAAACHQAAAAAAHQAAAAACHQAAAAADUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAWQAAAAABWQAAAAACWQAAAAACeQAAAAAAZAAAAAAAWQAAAAABZAAAAAAAUgAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAAWQAAAAAAWQAAAAABWQAAAAAAeQAAAAAAYwAAAAAAYwAAAAAAYwAAAAABUgAAAAAATQAAAAAAeQAAAAAAIgAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAACWQAAAAACWQAAAAAAWQAAAAADYwAAAAADYwAAAAAAYwAAAAADUgAAAAAATQAAAAAAeQAAAAAAKgAAAAAAeQAAAAAAKgAAAAAAKgAAAAAAKgAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAABeQAAAAAAYwAAAAACYwAAAAABYwAAAAADUgAAAAAATQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAIgAAAAABeQAAAAAAeQAAAAAAWQAAAAADWQAAAAAAWQAAAAAAeQAAAAAAZAAAAAADWQAAAAABZAAAAAACUgAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAWQAAAAABWQAAAAAAWQAAAAAAWQAAAAADWQAAAAACWQAAAAACWQAAAAADUgAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAUgAAAAAAWQAAAAABYwAAAAACYwAAAAACYwAAAAAAYwAAAAADYwAAAAACWQAAAAAAUgAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAWQAAAAAAeQAAAAAAUgAAAAAAWQAAAAAAYwAAAAABYwAAAAADYwAAAAABYwAAAAACYwAAAAAAWQAAAAACUgAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAADaAAAAAAAUgAAAAAAWQAAAAACYwAAAAABYwAAAAABYwAAAAADYwAAAAAAYwAAAAABWQAAAAAAUgAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAWQAAAAAAeQAAAAAAUgAAAAAA + version: 6 + 1,1: + ind: 1,1 + tiles: WQAAAAABWQAAAAACWQAAAAACWQAAAAAAWQAAAAABWQAAAAAAWQAAAAACUgAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAaAAAAAAAUgAAAAAAWQAAAAACWQAAAAABWQAAAAABWQAAAAAAWQAAAAADUgAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAUgAAAAAAWQAAAAACWQAAAAACaAAAAAAAUgAAAAAAWQAAAAADYwAAAAACYwAAAAABYwAAAAAAWQAAAAABUgAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAUgAAAAAAWQAAAAADYwAAAAADWQAAAAACUgAAAAAAWQAAAAADYwAAAAADYwAAAAADYwAAAAADWQAAAAABUgAAAAAAeQAAAAAAWQAAAAABeQAAAAAAWQAAAAABeQAAAAAAUgAAAAAAWQAAAAAAYwAAAAABWQAAAAADUgAAAAAAWQAAAAAAYwAAAAAAYwAAAAACYwAAAAACWQAAAAADUgAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAUgAAAAAAWQAAAAADYwAAAAADWQAAAAACUgAAAAAAWQAAAAACWQAAAAACWQAAAAADWQAAAAADWQAAAAACUgAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAUgAAAAAAWQAAAAACWQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAWQAAAAADWQAAAAABWQAAAAAAUgAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAUgAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAUgAAAAAAWQAAAAABWQAAAAACZAAAAAACUgAAAAAAWQAAAAABWQAAAAAAWQAAAAAAUgAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAUgAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAUgAAAAAAWQAAAAACWQAAAAADZAAAAAABUgAAAAAAWQAAAAACWQAAAAAAWQAAAAACUgAAAAAAWQAAAAACWQAAAAAAWQAAAAACUgAAAAAAWQAAAAADWQAAAAAAWQAAAAADUgAAAAAAWQAAAAADWQAAAAACWQAAAAADUgAAAAAAZAAAAAADWQAAAAACZAAAAAADUgAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAUgAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAUgAAAAAAZAAAAAAAWQAAAAADWQAAAAACUgAAAAAAZAAAAAABWQAAAAABZAAAAAABUgAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAUgAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAUgAAAAAAZAAAAAADWQAAAAADWQAAAAABUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAWQAAAAAAWQAAAAACWQAAAAABWQAAAAADWQAAAAACWQAAAAAAWQAAAAACWQAAAAAAWQAAAAACWQAAAAACWQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAA + version: 6 + -1,2: + ind: -1,2 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAA + version: 6 + -1,3: + ind: -1,3 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 0,2: + ind: 0,2 + tiles: HQAAAAACHQAAAAACDwAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAAHQAAAAADHQAAAAAAUgAAAAAAaAAAAAAAaAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAUgAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAUgAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAWQAAAAADaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAUgAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAHQAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAAHQAAAAAAUgAAAAAAHQAAAAABTQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAAHQAAAAABUgAAAAAAHQAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAAHQAAAAAAUgAAAAAAHQAAAAAATQAAAAAANgAAAAAANgAAAAAANgAAAAAATQAAAAAAHQAAAAAAUgAAAAAAHQAAAAACDwAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAAHQAAAAACUgAAAAAAHQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAAHQAAAAACUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAADwAAAAAADwAAAAAAeQAAAAAAIgAAAAABeQAAAAAADwAAAAAADwAAAAAAUgAAAAAAbAAAAAACbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAADbAAAAAABbAAAAAABUgAAAAAADwAAAAAADwAAAAAADwAAAAAAHQAAAAAADwAAAAAADwAAAAAADwAAAAAAUgAAAAAAbAAAAAABbAAAAAABeQAAAAAAbAAAAAAAeQAAAAAAbAAAAAABbAAAAAADUgAAAAAAeQAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAAeQAAAAAAUgAAAAAAIgAAAAABIgAAAAABIgAAAAACaAAAAAAAIgAAAAADIgAAAAACIgAAAAABUgAAAAAAIgAAAAAAHQAAAAACDwAAAAAADwAAAAAADwAAAAAAHQAAAAAAIgAAAAABUgAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAUgAAAAAAeQAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAAeQAAAAAAUgAAAAAAIgAAAAACIgAAAAAAIgAAAAABaAAAAAAAIgAAAAABIgAAAAACIgAAAAAAUgAAAAAADwAAAAAADwAAAAAADwAAAAAAHQAAAAADDwAAAAAADwAAAAAADwAAAAAAUgAAAAAAIgAAAAAAIgAAAAAAIgAAAAACaAAAAAAAIgAAAAAAIgAAAAACIgAAAAADUgAAAAAA + version: 6 + 0,3: + ind: 0,3 + tiles: DwAAAAAADwAAAAAAeQAAAAAAIgAAAAAAeQAAAAAADwAAAAAADwAAAAAAUgAAAAAAIgAAAAACIgAAAAAAIgAAAAAAaAAAAAAAIgAAAAABIgAAAAACIgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 1,2: + ind: 1,2 + tiles: aAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAYwAAAAACYwAAAAADYwAAAAABeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAUgAAAAAAHQAAAAACHQAAAAADHQAAAAACTQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAAYwAAAAACYwAAAAAAYwAAAAABWQAAAAACaAAAAAAAaAAAAAAAaAAAAAAAUgAAAAAAHQAAAAACHQAAAAABHQAAAAABTQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAAYwAAAAADYwAAAAADYwAAAAADeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAUgAAAAAAHQAAAAADHQAAAAABHQAAAAABTQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAWQAAAAACWQAAAAAAWQAAAAAAWQAAAAABWQAAAAADWQAAAAADWQAAAAAAUgAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAUgAAAAAAWQAAAAACYwAAAAABYwAAAAACYwAAAAABYwAAAAADYwAAAAAAWQAAAAAAUgAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAUgAAAAAAWQAAAAAAWQAAAAABWQAAAAABWQAAAAACWQAAAAAAWQAAAAAAWQAAAAADUgAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAUgAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAWQAAAAACYwAAAAAAYwAAAAADYwAAAAADUgAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAUgAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAWQAAAAADYwAAAAABYwAAAAABYwAAAAACUgAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAUgAAAAAAWQAAAAACWQAAAAADWQAAAAABWQAAAAACYwAAAAADYwAAAAABYwAAAAACUgAAAAAAaAAAAAAAWQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAACaAAAAAAAUgAAAAAAWQAAAAADWQAAAAADWQAAAAACWQAAAAADWQAAAAACWQAAAAADWQAAAAADUgAAAAAAaAAAAAAAWQAAAAABaAAAAAAAaAAAAAAAaAAAAAAAWQAAAAAAaAAAAAAAUgAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAACIQAAAAABIQAAAAADWQAAAAACUgAAAAAAaAAAAAAAWQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAaAAAAAAAUgAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAWQAAAAABIQAAAAAAIQAAAAABWQAAAAABUgAAAAAA + version: 6 + 1,3: + ind: 1,3 + tiles: aAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAUgAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAWQAAAAABWQAAAAAAWQAAAAAAWQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 2,-1: + ind: 2,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 2,0: + ind: 2,0 + tiles: HQAAAAAAHQAAAAABWQAAAAACUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAAABHQAAAAACWQAAAAABUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAAACHQAAAAACWQAAAAABUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAAAAHQAAAAADWQAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAAACHQAAAAAAWQAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATQAAAAAATQAAAAAATQAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIgAAAAADeQAAAAAATQAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKgAAAAAAeQAAAAAATQAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAATQAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATQAAAAAATQAAAAAATQAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 2,1: + ind: 2,1 + tiles: UgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWQAAAAABWQAAAAACWQAAAAADUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYwAAAAAAYwAAAAABWQAAAAADUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYwAAAAADYwAAAAABWQAAAAABUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYwAAAAABYwAAAAAAWQAAAAABUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWQAAAAACWQAAAAABWQAAAAACUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIgAAAAACHQAAAAAAIgAAAAADUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIgAAAAACHQAAAAACIgAAAAADUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAAABHQAAAAADHQAAAAADUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIgAAAAABIgAAAAACIgAAAAADUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAAAAHQAAAAADHQAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 2,2: + ind: 2,2 + tiles: UgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATQAAAAAAHQAAAAADHQAAAAABUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIgAAAAABeQAAAAAAHQAAAAADUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATQAAAAAAHQAAAAAAHQAAAAADUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 2,3: + ind: 2,3 + tiles: UgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + - type: Gravity + gravityShakeSound: !type:SoundPathSpecifier + path: /Audio/Effects/alert.ogg + - type: DecalGrid + chunkCollection: + version: 2 + nodes: + - node: + color: '#52B4E996' + id: BotGreyscale + decals: + 680: 30,25 + 681: 30,24 + 682: 28,27 + 683: 28,27 + 684: 28,28 + 685: 28,28 + 686: 30,25 + 687: 30,24 + - node: + color: '#DE3A3A96' + id: BotGreyscale + decals: + 478: 32,25 + 479: 32,24 + 480: 34,25 + 481: 34,24 + 482: 16,28 + 483: 18,28 + 484: 18,27 + 485: 16,27 + 486: 14,25 + 487: 14,24 + 488: 12,27 + 489: 12,28 + 748: 26,7 + 749: 32,7 + 750: 29,9 + 836: 6,2 + 837: 10,2 + 940: 1,9 + 941: 1,8 + 942: 1,7 + 943: 9,9 + 944: 9,8 + 945: 9,7 + 946: 20,10 + 947: 14,10 + 948: 14,6 + 949: 20,6 + 950: 22,6 + 951: 22,10 + 952: 12,10 + 953: 12,6 + - node: + color: '#FFFFFFFF' + id: BrickTileDarkCornerNe + decals: + 194: 21,4 + 250: 10,44 + 525: 12,32 + 543: 4,22 + 585: 6,40 + 659: 34,36 + 675: 30,28 + 703: 6,16 + 757: 10,10 + - node: + color: '#FFFFFFFF' + id: BrickTileDarkCornerNw + decals: + 191: 18,4 + 251: 12,44 + 519: 0,32 + 542: 0,22 + 582: 0,40 + 633: 24,36 + 702: 0,16 + 754: 0,10 + 853: 23,4 + - node: + color: '#FFFFFFFF' + id: BrickTileDarkCornerSe + decals: + 192: 21,0 + 238: 10,46 + 272: 14,42 + 524: 12,30 + 537: 4,18 + 584: 6,38 + 658: 34,34 + 701: 6,12 + 755: 10,6 + - node: + color: '#FFFFFFFF' + id: BrickTileDarkCornerSw + decals: + 193: 18,0 + 241: 12,46 + 270: 8,42 + 518: 0,30 + 534: 0,18 + 583: 0,38 + 632: 24,34 + 672: 28,24 + 700: 0,12 + 756: 0,6 + 852: 23,0 + - node: + color: '#FFFFFFFF' + id: BrickTileDarkLineE + decals: + 202: 21,1 + 203: 21,2 + 204: 21,3 + 239: 10,47 + 240: 10,48 + 273: 14,43 + 501: 0,25 + 502: 0,26 + 503: 0,27 + 535: 4,19 + 536: 4,21 + 592: 14,38 + 593: 14,40 + 674: 30,27 + 706: 6,15 + 707: 6,13 + 758: 10,9 + 759: 10,7 + 926: 5,45 + 929: 33,36 + 930: 33,34 + 931: 10,31 + 935: 8,10 + 936: 8,6 + 937: 7,2 + - node: + color: '#FFFFFFFF' + id: BrickTileDarkLineN + decals: + 197: 19,4 + 198: 20,4 + 248: 8,44 + 249: 9,44 + 252: 13,44 + 253: 14,44 + 506: 0,28 + 507: 2,28 + 520: 1,32 + 523: 11,32 + 540: 1,22 + 541: 3,22 + 634: 25,36 + 635: 26,36 + 704: 1,16 + 705: 5,16 + 762: 1,10 + 765: 9,10 + 846: 24,4 + 847: 25,4 + 848: 27,4 + 849: 28,4 + 850: 29,4 + 851: 30,4 + 927: 3,47 + - node: + color: '#FFFFFFFF' + id: BrickTileDarkLineS + decals: + 195: 20,0 + 196: 19,0 + 244: 8,46 + 245: 9,46 + 246: 13,46 + 247: 14,46 + 274: 9,42 + 275: 10,42 + 276: 13,42 + 277: 12,42 + 504: 0,24 + 505: 2,24 + 521: 1,30 + 522: 11,30 + 538: 3,18 + 539: 1,18 + 636: 25,34 + 637: 26,34 + 710: 1,12 + 711: 5,12 + 763: 1,6 + 764: 9,6 + 840: 25,0 + 841: 24,0 + 842: 27,0 + 843: 28,0 + 844: 29,0 + 845: 30,0 + 928: 3,43 + - node: + color: '#FFFFFFFF' + id: BrickTileDarkLineW + decals: + 199: 18,3 + 200: 18,2 + 201: 18,1 + 242: 12,47 + 243: 12,48 + 271: 8,43 + 498: 2,27 + 499: 2,26 + 500: 2,25 + 544: 0,19 + 545: 0,21 + 590: 8,40 + 591: 8,38 + 673: 28,25 + 708: 0,13 + 709: 0,15 + 760: 0,7 + 761: 0,9 + 854: 23,3 + 855: 23,1 + 925: 1,45 + 932: 2,31 + 933: 2,10 + 934: 2,6 + 938: 9,2 + 939: 30,2 + - node: + color: '#FFFFFFFF' + id: BrickTileSteelCornerNe + decals: + 84: 18,36 + 104: 16,25 + 336: 9,21 + 337: 10,22 + 364: 16,22 + 374: 21,15 + 375: 22,16 + 415: 21,21 + 421: 22,22 + 446: 33,21 + 447: 34,22 + 490: 12,25 + 554: 22,9 + 568: 14,9 + 610: 22,40 + 2025: 30,48 + 2039: 30,44 + 2058: 29,47 + - node: + color: '#FFFFFFFF' + id: BrickTileSteelCornerNw + decals: + 85: 16,36 + 103: 18,25 + 338: 7,21 + 339: 6,22 + 376: 17,15 + 377: 16,16 + 414: 19,21 + 420: 18,22 + 448: 31,21 + 449: 30,22 + 555: 20,9 + 569: 12,9 + 611: 16,40 + 2040: 28,44 + 2059: 28,47 + - node: + color: '#FFFFFFFF' + id: BrickTileSteelCornerSe + decals: + 83: 18,34 + 308: 26,30 + 332: 9,19 + 335: 10,18 + 372: 21,13 + 373: 22,12 + 418: 21,19 + 419: 22,18 + 452: 33,19 + 453: 34,18 + 561: 22,7 + 562: 14,7 + 609: 22,38 + 778: 16,0 + 779: 5,0 + 2038: 30,42 + 2056: 29,46 + - node: + color: '#FFFFFFFF' + id: BrickTileSteelCornerSw + decals: + 81: 16,34 + 82: 3,35 + 309: 14,30 + 333: 7,19 + 334: 6,18 + 370: 17,13 + 371: 16,12 + 416: 18,18 + 417: 19,19 + 450: 31,19 + 451: 30,18 + 493: 14,27 + 558: 20,7 + 567: 12,7 + 608: 16,38 + 780: 0,0 + 781: 11,0 + 2037: 28,42 + 2057: 28,46 + - node: + color: '#FFFFFFFF' + id: BrickTileSteelEndE + decals: + 73: 21,39 + - node: + color: '#FFFFFFFF' + id: BrickTileSteelEndW + decals: + 74: 17,39 + - node: + color: '#D4D4D496' + id: BrickTileSteelLineE + decals: + 1330: 32,2 + 1332: 31,2 + - node: + color: '#FFFFFFFF' + id: BrickTileSteelLineE + decals: + 87: 18,35 + 93: 14,34 + 94: 14,35 + 95: 14,36 + 105: 16,24 + 286: 17,45 + 287: 17,46 + 288: 17,47 + 323: 27,20 + 349: 9,20 + 350: 10,21 + 351: 10,19 + 365: 16,21 + 378: 21,14 + 379: 22,13 + 380: 22,15 + 425: 21,20 + 426: 22,19 + 427: 22,21 + 454: 34,19 + 455: 34,21 + 462: 33,20 + 491: 12,24 + 559: 22,8 + 566: 14,8 + 802: 16,1 + 806: 5,1 + 872: 34,0 + 873: 34,1 + 874: 34,3 + 875: 34,4 + 1328: 33,2 + 2023: 30,46 + 2024: 30,47 + 2041: 30,43 + - node: + color: '#FFFFFFFF' + id: BrickTileSteelLineN + decals: + 75: 18,39 + 76: 19,39 + 77: 20,39 + 86: 17,36 + 340: 8,21 + 341: 9,22 + 342: 7,22 + 366: 15,22 + 391: 18,15 + 392: 19,15 + 393: 20,15 + 394: 21,16 + 395: 20,16 + 396: 18,16 + 397: 17,16 + 422: 20,21 + 423: 19,22 + 424: 21,22 + 458: 31,22 + 459: 33,22 + 460: 32,21 + 556: 21,9 + 564: 13,9 + 572: 16,10 + 573: 18,10 + 612: 17,40 + 613: 18,40 + 614: 21,40 + 615: 20,40 + 2026: 29,48 + 2027: 28,48 + 2044: 29,44 + - node: + color: '#FFFFFFFF' + id: BrickTileSteelLineS + decals: + 78: 18,39 + 79: 19,39 + 80: 20,39 + 89: 17,34 + 298: 15,30 + 299: 16,30 + 300: 17,30 + 301: 18,30 + 302: 19,30 + 303: 21,30 + 304: 22,30 + 305: 23,30 + 306: 24,30 + 307: 25,30 + 346: 8,19 + 347: 7,18 + 348: 9,18 + 384: 18,13 + 385: 19,13 + 386: 20,13 + 387: 20,12 + 388: 21,12 + 389: 18,12 + 390: 17,12 + 431: 20,19 + 432: 19,18 + 433: 21,18 + 463: 32,19 + 464: 31,18 + 465: 33,18 + 557: 21,7 + 563: 13,7 + 570: 16,6 + 571: 18,6 + 616: 17,38 + 617: 18,38 + 618: 21,38 + 619: 20,38 + 782: 1,0 + 783: 2,0 + 784: 3,0 + 785: 4,0 + 786: 0,3 + 787: 1,3 + 788: 2,3 + 789: 3,3 + 790: 4,3 + 791: 5,3 + 792: 12,0 + 793: 13,0 + 794: 14,0 + 795: 15,0 + 796: 11,3 + 797: 12,3 + 798: 13,3 + 799: 14,3 + 800: 15,3 + 801: 16,3 + 2043: 29,42 + - node: + color: '#D4D4D496' + id: BrickTileSteelLineW + decals: + 1329: 33,2 + 1331: 32,2 + 1333: 31,2 + - node: + color: '#FFFFFFFF' + id: BrickTileSteelLineW + decals: + 88: 16,35 + 90: 20,34 + 91: 20,35 + 92: 20,36 + 102: 18,24 + 289: 21,45 + 290: 21,46 + 291: 21,47 + 322: 25,20 + 326: 29,15 + 327: 29,14 + 328: 29,13 + 343: 7,20 + 344: 6,21 + 345: 6,19 + 381: 17,14 + 382: 16,15 + 383: 16,13 + 428: 19,20 + 429: 18,19 + 430: 18,21 + 456: 30,19 + 457: 30,21 + 461: 31,20 + 492: 14,28 + 560: 20,8 + 565: 12,8 + 803: 0,1 + 805: 11,1 + 2021: 24,44 + 2022: 24,46 + 2042: 28,43 + - node: + color: '#52B4E996' + id: BrickTileWhiteCornerNe + decals: + 264: 10,44 + 679: 30,28 + - node: + color: '#DE3A3A96' + id: BrickTileWhiteCornerNe + decals: + 109: 16,25 + 362: 10,22 + 367: 16,22 + 413: 22,16 + 438: 22,22 + 475: 34,22 + 494: 12,25 + 527: 12,32 + 580: 4,22 + 587: 6,40 + 630: 22,40 + 660: 34,36 + 715: 6,16 + 777: 10,10 + 2045: 30,48 + - node: + color: '#FFFFFFFF' + id: BrickTileWhiteCornerNe + decals: + 689: 10,28 + - node: + color: '#52B4E996' + id: BrickTileWhiteCornerNw + decals: + 265: 12,44 + - node: + color: '#DE3A3A96' + id: BrickTileWhiteCornerNw + decals: + 108: 18,25 + 363: 6,22 + 412: 16,16 + 442: 18,22 + 476: 30,22 + 532: 0,32 + 579: 0,22 + 588: 0,40 + 629: 16,40 + 639: 24,36 + 714: 0,16 + 772: 0,10 + 858: 23,4 + - node: + color: '#FFFFFFFF' + id: BrickTileWhiteCornerNw + decals: + 688: 8,28 + - node: + color: '#52B4E996' + id: BrickTileWhiteCornerSe + decals: + 263: 10,46 + 279: 14,42 + - node: + color: '#DE3A3A96' + id: BrickTileWhiteCornerSe + decals: + 361: 10,18 + 411: 22,12 + 443: 22,18 + 477: 34,18 + 526: 12,30 + 581: 4,18 + 586: 6,38 + 628: 22,38 + 661: 34,34 + 713: 6,12 + 771: 10,6 + 809: 5,0 + 810: 16,0 + - node: + color: '#EFB34196' + id: BrickTileWhiteCornerSe + decals: + 311: 26,30 + - node: + color: '#FFFFFFFF' + id: BrickTileWhiteCornerSe + decals: + 690: 10,24 + - node: + color: '#52B4E996' + id: BrickTileWhiteCornerSw + decals: + 262: 12,46 + 278: 8,42 + 676: 28,24 + - node: + color: '#DE3A3A96' + id: BrickTileWhiteCornerSw + decals: + 360: 6,18 + 406: 16,12 + 439: 18,18 + 474: 30,18 + 496: 14,27 + 533: 0,30 + 578: 0,18 + 589: 0,38 + 631: 16,38 + 638: 24,34 + 712: 0,12 + 770: 0,6 + 807: 0,0 + 808: 11,0 + 859: 23,0 + - node: + color: '#EFB34196' + id: BrickTileWhiteCornerSw + decals: + 310: 14,30 + - node: + color: '#FFFFFFFF' + id: BrickTileWhiteCornerSw + decals: + 691: 8,24 + - node: + color: '#52B4E996' + id: BrickTileWhiteLineE + decals: + 258: 10,47 + 259: 10,48 + 280: 14,43 + 678: 30,27 + - node: + color: '#D4D4D419' + id: BrickTileWhiteLineE + decals: + 895: 2,6 + 896: 2,10 + 900: 9,2 + 901: 30,2 + 906: 1,45 + 908: 2,31 + - node: + color: '#DE3A3A96' + id: BrickTileWhiteLineE + decals: + 96: 14,36 + 97: 14,35 + 98: 14,34 + 106: 16,24 + 356: 10,19 + 357: 10,21 + 368: 16,21 + 409: 22,15 + 410: 22,13 + 444: 22,19 + 445: 22,21 + 470: 34,21 + 471: 34,19 + 495: 12,24 + 511: 0,25 + 512: 0,26 + 513: 0,27 + 548: 4,19 + 549: 4,21 + 596: 14,38 + 597: 14,40 + 716: 6,15 + 717: 6,13 + 768: 10,9 + 769: 10,7 + 811: 5,1 + 812: 16,1 + 876: 34,0 + 877: 34,1 + 878: 34,3 + 879: 34,4 + 2048: 30,47 + 2049: 30,46 + - node: + color: '#EFB34196' + id: BrickTileWhiteLineE + decals: + 292: 17,45 + 293: 17,46 + 294: 17,47 + 324: 27,20 + - node: + color: '#FFFFFFFF' + id: BrickTileWhiteLineE + decals: + 693: 10,27 + 694: 10,26 + 695: 10,25 + - node: + color: '#52B4E996' + id: BrickTileWhiteLineN + decals: + 266: 9,44 + 267: 8,44 + 268: 13,44 + 269: 14,44 + - node: + color: '#D4D4D419' + id: BrickTileWhiteLineN + decals: + 907: 3,43 + - node: + color: '#DE3A3A96' + id: BrickTileWhiteLineN + decals: + 358: 9,22 + 359: 7,22 + 369: 15,22 + 398: 18,16 + 399: 17,16 + 400: 21,16 + 401: 20,16 + 436: 19,22 + 437: 21,22 + 468: 31,22 + 469: 33,22 + 516: 0,28 + 517: 2,28 + 528: 11,32 + 531: 1,32 + 552: 1,22 + 553: 3,22 + 574: 16,10 + 575: 18,10 + 620: 18,40 + 621: 17,40 + 622: 20,40 + 623: 21,40 + 642: 25,36 + 643: 26,36 + 722: 1,16 + 723: 5,16 + 773: 1,10 + 774: 9,10 + 866: 24,4 + 867: 25,4 + 868: 27,4 + 869: 28,4 + 870: 30,4 + 871: 29,4 + 2046: 28,48 + 2047: 29,48 + - node: + color: '#FFFFFFFF' + id: BrickTileWhiteLineN + decals: + 692: 9,28 + - node: + color: '#52B4E996' + id: BrickTileWhiteLineS + decals: + 254: 8,46 + 255: 9,46 + 256: 13,46 + 257: 14,46 + 282: 9,42 + 283: 10,42 + 284: 12,42 + 285: 13,42 + - node: + color: '#D4D4D419' + id: BrickTileWhiteLineS + decals: + 905: 3,47 + - node: + color: '#DE3A3A96' + id: BrickTileWhiteLineS + decals: + 352: 7,18 + 353: 9,18 + 402: 17,12 + 403: 18,12 + 404: 20,12 + 405: 21,12 + 434: 19,18 + 435: 21,18 + 466: 33,18 + 467: 31,18 + 514: 0,24 + 515: 2,24 + 529: 11,30 + 530: 1,30 + 550: 1,18 + 551: 3,18 + 576: 16,6 + 577: 18,6 + 624: 17,38 + 625: 18,38 + 626: 20,38 + 627: 21,38 + 640: 25,34 + 641: 26,34 + 718: 5,12 + 719: 1,12 + 775: 1,6 + 776: 9,6 + 813: 12,0 + 814: 13,0 + 815: 14,0 + 816: 15,0 + 817: 16,3 + 818: 15,3 + 819: 13,3 + 820: 14,3 + 821: 11,3 + 822: 12,3 + 823: 0,3 + 824: 1,3 + 825: 2,3 + 826: 3,3 + 827: 4,3 + 828: 5,3 + 829: 4,0 + 830: 3,0 + 831: 2,0 + 832: 1,0 + 860: 24,0 + 861: 25,0 + 862: 27,0 + 863: 28,0 + 864: 29,0 + 865: 30,0 + - node: + color: '#EFB34196' + id: BrickTileWhiteLineS + decals: + 312: 15,30 + 313: 16,30 + 314: 17,30 + 315: 18,30 + 316: 19,30 + 317: 21,30 + 318: 22,30 + 319: 23,30 + 320: 24,30 + 321: 25,30 + - node: + color: '#FFFFFFFF' + id: BrickTileWhiteLineS + decals: + 696: 9,24 + - node: + color: '#52B4E996' + id: BrickTileWhiteLineW + decals: + 260: 12,47 + 261: 12,48 + 281: 8,43 + 677: 28,25 + - node: + color: '#D4D4D419' + id: BrickTileWhiteLineW + decals: + 897: 8,10 + 898: 8,6 + 899: 7,2 + 902: 33,36 + 903: 33,34 + 904: 5,45 + 909: 10,31 + - node: + color: '#DE3A3A96' + id: BrickTileWhiteLineW + decals: + 99: 20,36 + 100: 20,35 + 101: 20,34 + 107: 18,24 + 354: 6,19 + 355: 6,21 + 407: 16,13 + 408: 16,15 + 440: 18,19 + 441: 18,21 + 472: 30,19 + 473: 30,21 + 497: 14,28 + 508: 2,25 + 509: 2,26 + 510: 2,27 + 546: 0,19 + 547: 0,21 + 594: 8,38 + 595: 8,40 + 720: 0,13 + 721: 0,15 + 766: 0,7 + 767: 0,9 + 804: 0,1 + 833: 11,1 + 856: 23,1 + 857: 23,3 + 2050: 24,44 + 2051: 24,46 + - node: + color: '#EFB34196' + id: BrickTileWhiteLineW + decals: + 295: 21,45 + 296: 21,46 + 297: 21,47 + 325: 25,20 + 329: 29,13 + 330: 29,14 + 331: 29,15 + - node: + color: '#FFFFFFFF' + id: BrickTileWhiteLineW + decals: + 697: 8,25 + 698: 8,26 + 699: 8,27 + - node: + cleanable: True + angle: 1.5707963267948966 rad + color: '#B02E269B' + id: Clandestine + decals: + 2136: 3.132535,34.09553 + - node: + color: '#A4610696' + id: Dirt + decals: + 1334: 31,2 + 1335: 32,2 + 1336: 33,2 + 1337: 30,2 + 1338: 34,2 + 1339: 33,3 + 1340: 31,4 + 1341: 32,3 + 1342: 32,1 + 1343: 31,1 + 1344: 31,0 + 1345: 33,0 + 1346: 32,0 + 1347: 33,3 + 1348: 33,4 + 1349: 32,4 + 1350: 31,3 + 1351: 32,1 + 1352: 33,1 + - node: + cleanable: True + color: '#A4610696' + id: Dirt + decals: + 954: 0,45 + 955: 3,47 + 956: 3,48 + 957: 6,45 + 958: 3,42 + 959: 3,43 + 960: 5,45 + 961: 1,45 + 962: 13,45 + 963: 12,45 + 964: 11,47 + 965: 9,45 + 966: 8,45 + 967: 8,46 + 968: 10,47 + 969: 13,47 + 970: 14,46 + 971: 11,43 + 972: 11,42 + 973: 9,42 + 974: 10,42 + 975: 13,42 + 976: 12,42 + 977: 13,43 + 978: 9,43 + 979: 11,44 + 980: 11,45 + 981: 11,47 + 982: 9,46 + 983: 11,46 + 984: 16,45 + 985: 16,46 + 986: 16,47 + 987: 16,44 + 988: 17,45 + 989: 17,46 + 990: 21,45 + 991: 22,45 + 992: 22,44 + 993: 22,43 + 994: 22,46 + 995: 21,45 + 996: 21,46 + 997: 22,47 + 998: 24,39 + 999: 24,38 + 1000: 24,40 + 1001: 27,39 + 1002: 27,39 + 1003: 30,40 + 1004: 30,39 + 1005: 30,38 + 1006: 30,39 + 1007: 34,35 + 1008: 33,34 + 1009: 33,36 + 1010: 24,35 + 1011: 22,35 + 1012: 20,35 + 1013: 21,35 + 1014: 20,34 + 1015: 14,35 + 1016: 13,35 + 1017: 12,35 + 1018: 14,36 + 1019: 17,36 + 1020: 17,35 + 1021: 17,34 + 1022: 16,35 + 1023: 18,35 + 1024: 18,36 + 1025: 18,34 + 1026: 16,34 + 1027: 16,36 + 1028: 16,30 + 1029: 16,30 + 1030: 18,30 + 1031: 19,30 + 1032: 22,30 + 1033: 24,30 + 1034: 25,30 + 1035: 26,30 + 1036: 20,30 + 1037: 20,30 + 1038: 15,30 + 1039: 14,30 + 1040: 14,31 + 1041: 26,31 + 1042: 10,31 + 1043: 2,31 + 1044: 0,31 + 1045: 12,31 + 1046: 5,35 + 1047: 6,36 + 1048: 4,34 + 1049: 9,35 + 1050: 9,35 + 1051: 10,35 + 1052: 10,34 + 1053: 0,35 + 1054: 0,36 + 1055: 0,35 + 1056: 5,36 + 1057: 6,36 + 1058: 6,39 + 1059: 0,39 + 1060: 8,39 + 1061: 8,40 + 1062: 8,38 + 1063: 9,39 + 1064: 11,38 + 1065: 9,38 + 1066: 11,40 + 1067: 10,40 + 1068: 13,39 + 1069: 14,39 + 1070: 14,40 + 1071: 14,38 + 1072: 13,39 + 1073: 13,40 + 1074: 16,39 + 1075: 18,40 + 1076: 19,40 + 1077: 19,39 + 1078: 18,39 + 1079: 17,39 + 1080: 20,39 + 1081: 21,39 + 1082: 19,38 + 1083: 22,39 + 1084: 21,38 + 1085: 24,39 + 1086: 24,38 + 1087: 24,40 + 1088: 17,32 + 1089: 24,32 + 1090: 23,32 + 1091: 34,26 + 1092: 33,26 + 1093: 33,28 + 1094: 32,28 + 1095: 32,27 + 1096: 34,27 + 1097: 34,28 + 1098: 32,25 + 1099: 33,24 + 1100: 33,25 + 1101: 32,26 + 1102: 29,24 + 1103: 30,26 + 1104: 28,26 + 1105: 29,28 + 1106: 29,27 + 1107: 29,25 + 1108: 25,26 + 1109: 24,26 + 1110: 26,26 + 1111: 25,27 + 1112: 24,28 + 1113: 25,28 + 1114: 24,27 + 1115: 24,24 + 1116: 25,25 + 1117: 25,24 + 1118: 26,25 + 1119: 22,26 + 1120: 24,26 + 1121: 26,26 + 1122: 20,26 + 1123: 21,25 + 1124: 21,24 + 1125: 21,28 + 1126: 21,27 + 1127: 18,26 + 1128: 16,26 + 1129: 17,27 + 1130: 17,28 + 1131: 17,25 + 1132: 17,24 + 1133: 17,26 + 1134: 13,28 + 1135: 13,27 + 1136: 13,26 + 1137: 13,25 + 1138: 13,24 + 1139: 12,26 + 1140: 14,26 + 1141: 9,26 + 1142: 9,27 + 1143: 9,28 + 1144: 8,28 + 1145: 8,27 + 1146: 8,26 + 1147: 9,25 + 1148: 8,25 + 1149: 8,24 + 1150: 9,24 + 1151: 10,24 + 1152: 10,25 + 1153: 10,26 + 1154: 10,27 + 1155: 10,28 + 1156: 5,28 + 1157: 5,28 + 1158: 5,24 + 1159: 5,24 + 1160: 0,26 + 1161: 2,26 + 1162: 2,28 + 1163: 1,24 + 1164: 2,24 + 1165: 2,22 + 1166: 4,20 + 1167: 2,18 + 1168: 1,19 + 1169: 0,20 + 1170: 0,17 + 1171: 0,18 + 1172: 4,18 + 1173: 4,19 + 1174: 4,22 + 1175: 0,22 + 1176: 6,20 + 1177: 7,20 + 1178: 8,20 + 1179: 9,20 + 1180: 10,20 + 1181: 8,21 + 1182: 8,22 + 1183: 8,19 + 1184: 8,18 + 1185: 6,18 + 1186: 7,19 + 1187: 7,18 + 1188: 9,20 + 1189: 10,21 + 1190: 9,21 + 1191: 9,22 + 1192: 9,19 + 1193: 7,21 + 1194: 8,13 + 1195: 8,13 + 1196: 11,16 + 1197: 11,16 + 1198: 10,16 + 1199: 9,16 + 1200: 8,15 + 1201: 8,14 + 1202: 8,16 + 1203: 10,16 + 1204: 9,16 + 1205: 12,14 + 1206: 11,14 + 1207: 11,12 + 1208: 10,12 + 1209: 14,12 + 1210: 14,14 + 1211: 14,15 + 1212: 13,14 + 1213: 12,14 + 1214: 11,14 + 1215: 11,13 + 1216: 6,14 + 1217: 0,14 + 1218: 3,16 + 1219: 3,12 + 1220: 3,13 + 1221: 2,13 + 1222: 4,13 + 1223: 3,15 + 1224: 2,15 + 1225: 4,15 + 1226: 5,14 + 1227: 1,14 + 1228: 1,15 + 1229: 1,13 + 1230: 5,15 + 1231: 5,13 + 1232: 0,8 + 1233: 2,10 + 1234: 2,6 + 1235: 8,6 + 1236: 8,10 + 1237: 0,8 + 1238: 10,8 + 1239: 10,10 + 1240: 10,7 + 1241: 10,6 + 1242: 9,6 + 1243: 9,10 + 1244: 1,10 + 1245: 0,7 + 1246: 0,6 + 1247: 0,3 + 1248: 1,3 + 1249: 1,3 + 1250: 2,3 + 1251: 3,3 + 1252: 4,3 + 1253: 4,3 + 1254: 5,3 + 1255: 7,2 + 1256: 9,2 + 1257: 4,0 + 1258: 4,1 + 1259: 2,1 + 1260: 1,1 + 1261: 0,2 + 1262: 1,2 + 1263: 2,2 + 1264: 5,2 + 1265: 4,2 + 1266: 3,2 + 1267: 4,1 + 1268: 3,1 + 1269: 11,2 + 1270: 12,3 + 1271: 11,3 + 1272: 14,3 + 1273: 14,3 + 1274: 15,3 + 1275: 16,3 + 1276: 13,3 + 1277: 11,3 + 1278: 12,2 + 1279: 11,1 + 1280: 13,1 + 1281: 16,2 + 1282: 16,1 + 1283: 14,1 + 1284: 13,2 + 1285: 14,2 + 1286: 18,2 + 1287: 19,2 + 1288: 20,2 + 1289: 21,2 + 1290: 19,3 + 1291: 18,3 + 1292: 20,3 + 1293: 20,1 + 1294: 21,1 + 1295: 19,1 + 1296: 23,2 + 1297: 28,2 + 1298: 29,2 + 1299: 30,2 + 1300: 28,4 + 1301: 29,4 + 1302: 26,4 + 1303: 26,2 + 1304: 26,1 + 1305: 26,0 + 1306: 24,2 + 1307: 25,2 + 1308: 27,2 + 1309: 24,4 + 1310: 23,3 + 1311: 24,3 + 1312: 23,4 + 1469: 14,8 + 1470: 12,8 + 1471: 12,7 + 1472: 13,7 + 1473: 13,6 + 1474: 13,10 + 1475: 12,9 + 1476: 14,9 + 1477: 17,10 + 1478: 17,9 + 1479: 18,9 + 1480: 18,8 + 1481: 17,7 + 1482: 17,7 + 1483: 17,6 + 1484: 17,8 + 1485: 16,7 + 1486: 18,7 + 1487: 20,9 + 1488: 20,8 + 1489: 21,10 + 1490: 21,9 + 1491: 21,7 + 1492: 21,6 + 1493: 20,7 + 1494: 22,7 + 1495: 22,8 + 1534: 19,16 + 1535: 18,15 + 1536: 19,13 + 1537: 19,12 + 1538: 22,14 + 1539: 22,14 + 1540: 22,15 + 1541: 21,16 + 1542: 21,15 + 1543: 21,13 + 1544: 16,14 + 1545: 17,13 + 1546: 17,15 + 1556: 30,20 + 1557: 32,22 + 1558: 31,22 + 1559: 31,21 + 1560: 32,19 + 1561: 32,18 + 1562: 34,20 + 1563: 34,19 + 1564: 34,18 + 1565: 34,21 + 1566: 34,22 + 2060: 24,45 + 2061: 25,45 + 2062: 27,48 + 2063: 27,42 + 2064: 30,45 + 2065: 28,43 + 2066: 29,43 + 2067: 30,43 + 2068: 24,42 + 2069: 25,43 + 2070: 26,42 + 2071: 25,42 + 2072: 26,48 + 2073: 25,47 + 2074: 26,47 + 2075: 25,47 + 2076: 25,48 + 2077: 27,47 + 2078: 27,45 + 2079: 27,46 + 2080: 26,45 + 2081: 28,45 + 2082: 26,44 + 2083: 27,44 + 2084: 25,46 + 2085: 26,46 + 2086: 29,45 + - node: + color: '#A4610696' + id: DirtHeavy + decals: + 1353: 11,31 + 1354: 1,31 + 1355: 0,39 + 1356: 6,39 + 1357: 5,45 + 1358: 14,39 + 1359: 16,39 + 1360: 19,38 + - node: + cleanable: True + color: '#A4610696' + id: DirtHeavy + decals: + 1361: 22,39 + 1362: 19,40 + 1363: 30,39 + 1364: 25,35 + 1365: 24,36 + 1366: 20,30 + 1367: 14,30 + 1368: 18,30 + 1369: 22,30 + 1370: 26,31 + 1371: 22,26 + 1372: 24,26 + 1373: 26,26 + 1374: 28,26 + 1375: 29,27 + 1376: 33,25 + 1377: 33,28 + 1378: 32,28 + 1379: 14,26 + 1380: 12,26 + 1381: 9,26 + 1382: 9,28 + 1383: 8,28 + 1384: 8,24 + 1385: 10,25 + 1386: 5,24 + 1387: 5,28 + 1388: 0,26 + 1389: 0,27 + 1390: 2,24 + 1391: 2,25 + 1392: 0,35 + 1393: 0,36 + 1394: 7,36 + 1395: 5,35 + 1396: 4,34 + 1397: 10,35 + 1398: 9,35 + 1399: 8,39 + 1400: 14,39 + 1401: 14,38 + 1402: 8,45 + 1403: 11,48 + 1404: 11,44 + 1405: 14,45 + 1406: 11,42 + 1407: 9,42 + 1408: 13,43 + 1409: 3,47 + 1410: 4,20 + 1411: 3,22 + 1412: 2,18 + 1413: 0,19 + 1414: 6,20 + 1415: 8,20 + 1416: 8,18 + 1417: 10,20 + 1418: 8,22 + 1419: 14,20 + 1420: 15,21 + 1421: 16,20 + 1422: 12,20 + 1423: 12,21 + 1424: 13,22 + 1425: 13,21 + 1426: 13,19 + 1427: 16,19 + 1428: 16,19 + 1429: 15,20 + 1430: 14,18 + 1431: 12,20 + 1432: 14,22 + 1433: 20,20 + 1434: 20,22 + 1435: 18,20 + 1436: 22,21 + 1437: 19,21 + 1438: 20,18 + 1439: 22,20 + 1440: 27,22 + 1441: 25,22 + 1442: 26,18 + 1443: 27,18 + 1444: 31,18 + 1445: 32,18 + 1446: 31,20 + 1447: 32,21 + 1448: 34,22 + 1449: 34,20 + 1450: 32,19 + 1451: 29,14 + 1452: 24,14 + 1453: 24,13 + 1454: 30,14 + 1455: 29,13 + 1456: 34,2 + 1457: 32,3 + 1458: 30,1 + 1459: 26,1 + 1460: 23,3 + 1461: 24,4 + 1462: 29,4 + 1463: 26,0 + 1464: 26,1 + 1465: 18,2 + 1466: 22,8 + 1467: 20,8 + 1468: 16,8 + 1496: 17,6 + 1497: 16,8 + 1498: 18,8 + 1499: 17,10 + 1500: 14,8 + 1501: 12,8 + 1502: 13,6 + 1503: 13,10 + 1504: 21,10 + 1505: 21,9 + 1506: 21,8 + 1507: 21,7 + 1508: 21,6 + 1509: 10,8 + 1510: 9,10 + 1511: 9,6 + 1512: 2,6 + 1513: 0,7 + 1514: 0,9 + 1515: 1,10 + 1516: 8,10 + 1517: 0,14 + 1518: 5,14 + 1519: 4,15 + 1520: 3,16 + 1521: 1,18 + 1522: 5,15 + 1523: 6,14 + 1524: 11,16 + 1525: 8,13 + 1526: 11,12 + 1527: 10,13 + 1528: 16,14 + 1529: 19,16 + 1530: 19,13 + 1531: 18,13 + 1532: 18,15 + 1533: 16,15 + 1547: 19,16 + 1548: 16,14 + 1549: 17,15 + 1550: 18,14 + 1551: 19,13 + 1552: 21,13 + 1553: 22,14 + 1554: 29,15 + 1555: 29,13 + 2095: 24,45 + 2096: 27,48 + 2097: 27,42 + 2098: 25,44 + 2099: 29,45 + 2100: 29,46 + 2101: 29,47 + 2102: 25,45 + - node: + cleanable: True + color: '#A4610696' + id: DirtLight + decals: + 1567: 0,2 + 1568: 5,2 + 1569: 4,1 + 1570: 5,2 + 1571: 2,1 + 1572: 7,2 + 1573: 9,2 + 1574: 11,2 + 1575: 14,2 + 1576: 13,3 + 1577: 10,3 + 1578: 11,3 + 1579: 12,3 + 1580: 16,3 + 1581: 15,3 + 1582: 16,2 + 1583: 16,1 + 1584: 14,1 + 1585: 15,1 + 1586: 1,3 + 1587: 3,3 + 1588: 5,3 + 1589: 5,3 + 1590: 1,1 + 1591: 23,2 + 1592: 26,2 + 1593: 28,2 + 1594: 28,4 + 1595: 30,2 + 1596: 31,1 + 1597: 34,1 + 1598: 33,0 + 1599: 34,3 + 1600: 21,9 + 1601: 20,8 + 1602: 22,8 + 1603: 16,8 + 1604: 17,9 + 1605: 17,10 + 1606: 17,6 + 1607: 12,8 + 1608: 14,9 + 1609: 14,8 + 1610: 13,6 + 1611: 10,8 + 1612: 8,10 + 1613: 2,10 + 1614: 0,8 + 1615: 0,9 + 1616: 2,6 + 1617: 0,14 + 1618: 3,12 + 1619: 1,14 + 1620: 3,15 + 1621: 5,14 + 1622: 5,15 + 1623: 6,14 + 1624: 3,13 + 1625: 3,12 + 1626: 8,13 + 1627: 10,16 + 1628: 11,16 + 1629: 17,14 + 1630: 17,13 + 1631: 16,15 + 1632: 19,16 + 1633: 22,14 + 1634: 21,14 + 1635: 21,13 + 1636: 19,13 + 1637: 20,12 + 1638: 20,13 + 1639: 21,15 + 1640: 29,14 + 1641: 29,15 + 1642: 34,20 + 1643: 32,18 + 1644: 34,18 + 1645: 34,21 + 1646: 32,22 + 1647: 30,20 + 1648: 30,21 + 1649: 32,19 + 1650: 32,21 + 1651: 32,20 + 1652: 30,18 + 1653: 26,22 + 1654: 25,22 + 1655: 25,20 + 1656: 27,20 + 1657: 27,22 + 1658: 25,20 + 1659: 27,20 + 1660: 26,18 + 1661: 27,18 + 1662: 25,18 + 1663: 22,20 + 1664: 18,20 + 1665: 20,22 + 1666: 20,20 + 1667: 19,19 + 1668: 20,19 + 1669: 20,21 + 1670: 21,20 + 1671: 16,20 + 1672: 16,21 + 1673: 12,20 + 1674: 13,21 + 1675: 13,22 + 1676: 13,19 + 1677: 13,19 + 1678: 14,20 + 1679: 14,18 + 1680: 10,20 + 1681: 10,21 + 1682: 8,22 + 1683: 6,21 + 1684: 6,20 + 1685: 7,20 + 1686: 7,19 + 1687: 8,20 + 1688: 9,20 + 1689: 4,20 + 1690: 3,18 + 1691: 2,18 + 1692: 1,18 + 1693: 0,21 + 1694: 1,22 + 1695: 0,20 + 1696: 2,22 + 1697: 1,24 + 1698: 0,26 + 1699: 0,25 + 1700: 2,25 + 1701: 2,27 + 1702: 5,28 + 1703: 5,24 + 1704: 9,26 + 1705: 9,27 + 1706: 9,24 + 1707: 8,24 + 1708: 10,24 + 1709: 10,26 + 1710: 13,26 + 1711: 12,26 + 1712: 13,28 + 1713: 12,28 + 1714: 13,24 + 1715: 14,26 + 1716: 13,25 + 1717: 18,26 + 1718: 16,26 + 1719: 17,28 + 1720: 17,25 + 1721: 17,24 + 1722: 20,26 + 1723: 22,26 + 1724: 21,26 + 1725: 21,27 + 1726: 21,24 + 1727: 21,25 + 1728: 25,26 + 1729: 26,26 + 1730: 25,26 + 1731: 25,26 + 1732: 25,24 + 1733: 25,24 + 1734: 26,25 + 1735: 24,27 + 1736: 29,26 + 1737: 29,27 + 1738: 30,26 + 1739: 29,24 + 1740: 33,26 + 1741: 33,24 + 1742: 34,26 + 1743: 32,26 + 1744: 34,28 + 1745: 34,28 + 1746: 33,28 + 1747: 32,28 + 1748: 26,31 + 1749: 21,30 + 1750: 20,30 + 1751: 17,30 + 1752: 15,30 + 1753: 14,31 + 1754: 10,31 + 1755: 2,31 + 1756: 11,30 + 1757: 12,31 + 1758: 0,32 + 1759: 1,32 + 1760: 0,31 + 1761: -1,35 + 1762: 0,36 + 1763: 0,35 + 1764: 4,34 + 1765: 5,35 + 1766: 3,34 + 1767: 10,34 + 1768: 10,35 + 1769: 6,39 + 1770: 0,39 + 1771: 0,45 + 1772: 3,43 + 1773: 3,47 + 1774: 4,45 + 1775: 5,45 + 1776: 8,45 + 1777: 11,46 + 1778: 11,45 + 1779: 11,42 + 1780: 13,42 + 1781: 9,42 + 1782: 14,45 + 1783: 10,44 + 1784: 11,44 + 1785: 11,45 + 1786: 16,47 + 1787: 16,45 + 1788: 17,45 + 1789: 21,45 + 1790: 16,48 + 1791: 16,43 + 1792: 23,43 + 1793: 22,42 + 1794: 30,38 + 1795: 30,40 + 1796: 24,38 + 1797: 22,39 + 1798: 19,38 + 1799: 19,39 + 1800: 18,39 + 1801: 16,39 + 1802: 18,38 + 1803: 17,38 + 1804: 14,38 + 1805: 14,40 + 1806: 9,39 + 1807: 10,40 + 1808: 12,38 + 1809: 10,38 + 1810: 10,38 + 1811: 6,39 + 1812: 0,39 + 2103: 24,45 + 2104: 30,45 + 2105: 26,44 + 2106: 27,43 + 2107: 30,43 + 2108: 29,42 + 2109: 28,47 + - node: + cleanable: True + color: '#A4610696' + id: DirtMedium + decals: + 1813: 0,35 + 1814: 0,39 + 1815: 6,39 + 1816: 3,43 + 1817: 1,45 + 1818: 11,45 + 1819: 11,42 + 1820: 14,45 + 1821: 16,45 + 1822: 21,45 + 1823: 22,45 + 1824: 21,38 + 1825: 20,38 + 1826: 20,38 + 1827: 24,38 + 1828: 30,39 + 1829: 34,35 + 1830: 33,36 + 1831: 33,34 + 1832: 24,34 + 1833: 20,34 + 1834: 22,35 + 1835: 17,35 + 1836: 16,34 + 1837: 17,36 + 1838: 12,35 + 1839: 10,35 + 1840: 5,35 + 1841: 0,35 + 1842: 1,31 + 1843: 2,31 + 1844: 11,31 + 1845: 9,26 + 1846: 8,26 + 1847: 9,27 + 1848: 9,28 + 1849: 10,26 + 1850: 10,25 + 1851: 9,25 + 1852: 13,26 + 1853: 12,26 + 1854: 13,28 + 1855: 14,26 + 1856: 17,24 + 1857: 18,26 + 1858: 17,28 + 1859: 16,26 + 1860: 22,26 + 1861: 20,26 + 1862: 25,27 + 1863: 24,27 + 1864: 24,28 + 1865: 24,25 + 1866: 25,25 + 1867: 25,24 + 1868: 24,24 + 1869: 26,25 + 1870: 26,26 + 1871: 25,26 + 1872: 24,26 + 1873: 24,26 + 1874: 25,26 + 1875: 25,26 + 1876: 28,26 + 1877: 30,26 + 1878: 29,27 + 1879: 29,25 + 1880: 33,26 + 1881: 34,26 + 1882: 34,28 + 1883: 32,28 + 1884: 34,28 + 1885: 32,20 + 1886: 31,20 + 1887: 30,20 + 1888: 30,18 + 1889: 34,18 + 1890: 34,21 + 1891: 25,18 + 1892: 26,18 + 1893: 25,18 + 1894: 27,20 + 1895: 27,22 + 1896: 29,15 + 1897: 30,14 + 1898: 29,12 + 1899: 24,14 + 1900: 24,15 + 1901: 24,16 + 1902: 20,20 + 1903: 17,20 + 1904: 19,21 + 1905: 18,20 + 1906: 21,22 + 1907: 22,20 + 1908: 22,21 + 1909: 20,19 + 1910: 15,20 + 1911: 14,21 + 1912: 15,21 + 1913: 16,21 + 1914: 14,22 + 1915: 12,20 + 1916: 14,18 + 1917: 15,18 + 1918: 16,19 + 1919: 16,19 + 1920: 13,19 + 1921: 12,19 + 1922: 12,19 + 1923: 12,18 + 1924: 14,18 + 1925: 15,18 + 1926: 15,18 + 1927: 10,20 + 1928: 8,22 + 1929: 7,20 + 1930: 9,21 + 1931: 7,19 + 1932: 10,19 + 1933: 10,21 + 1934: 7,18 + 1935: 4,20 + 1936: 4,21 + 1937: 2,22 + 1938: 1,22 + 1939: 0,19 + 1940: 1,18 + 1941: 1,18 + 1942: 3,18 + 1943: 0,14 + 1944: 2,13 + 1945: 3,13 + 1946: 5,13 + 1947: 3,12 + 1948: 8,15 + 1949: 8,16 + 1950: 9,16 + 1951: 9,16 + 1952: 18,14 + 1953: 19,16 + 1954: 19,14 + 1955: 20,13 + 1956: 18,16 + 1957: 17,13 + 1958: 20,12 + 1959: 22,13 + 1960: 24,13 + 1961: 30,12 + 1962: 30,14 + 1963: 29,16 + 1964: 24,16 + 1965: 24,16 + 1966: 25,6 + 1967: 24,7 + 1968: 26,9 + 1969: 27,10 + 1970: 28,10 + 1971: 34,10 + 1972: 34,8 + 1973: 34,7 + 1974: 33,6 + 1975: 30,6 + 1976: 27,6 + 1977: 21,8 + 1978: 16,8 + 1979: 17,10 + 1980: 18,8 + 1981: 17,6 + 1982: 13,7 + 1983: 13,9 + 1984: 13,8 + 1985: 14,7 + 1986: 10,6 + 1987: 8,10 + 1988: 2,6 + 1989: 0,7 + 1990: 1,1 + 1991: 0,1 + 1992: 4,1 + 1993: 5,2 + 1994: 3,1 + 1995: 3,0 + 1996: 7,2 + 1997: 9,2 + 1998: 11,2 + 1999: 13,1 + 2000: 15,1 + 2001: 16,2 + 2002: 16,1 + 2003: 23,2 + 2004: 26,2 + 2005: 29,3 + 2006: 30,2 + 2007: 33,2 + 2008: 33,3 + 2009: 34,2 + 2010: 34,0 + 2011: 34,1 + 2012: 31,1 + 2013: 29,0 + 2014: 26,0 + 2015: 23,3 + 2016: 28,4 + 2087: 27,42 + 2088: 27,48 + 2089: 24,45 + 2090: 30,45 + 2091: 28,45 + 2092: 26,45 + 2093: 28,47 + 2094: 27,44 + 2110: 24,45 + 2111: 27,48 + 2112: 27,45 + 2113: 26,46 + 2114: 26,42 + 2115: 25,42 + 2116: 25,47 + 2117: 25,47 + 2118: 26,48 + 2119: 26,47 + 2120: 26,47 + 2121: 26,43 + 2122: 26,43 + 2123: 27,43 + 2124: 6,1 + 2125: 10,3 + - node: + color: '#D4D4D41B' + id: FullTileOverlayGreyscale + decals: + 1313: 31,4 + 1314: 31,3 + 1315: 31,2 + 1316: 31,1 + 1317: 31,0 + - node: + color: '#D4D4D433' + id: FullTileOverlayGreyscale + decals: + 1318: 32,0 + 1319: 32,1 + 1320: 32,2 + 1321: 32,3 + 1322: 32,4 + - node: + color: '#D4D4D44C' + id: FullTileOverlayGreyscale + decals: + 1323: 33,0 + 1324: 33,1 + 1325: 33,2 + 1326: 33,3 + 1327: 33,4 + - node: + color: '#D4D4D40C' + id: HalfTileOverlayGreyscale + decals: + 923: 3,47 + - node: + color: '#D4D4D419' + id: HalfTileOverlayGreyscale + decals: + 893: 3,43 + - node: + color: '#D4D4D40C' + id: HalfTileOverlayGreyscale180 + decals: + 924: 3,43 + - node: + color: '#D4D4D419' + id: HalfTileOverlayGreyscale180 + decals: + 894: 3,47 + - node: + color: '#D4D4D40C' + id: HalfTileOverlayGreyscale270 + decals: + 910: 30,2 + 911: 9,2 + 914: 2,6 + 915: 2,10 + 918: 2,31 + 922: 1,45 + - node: + color: '#D4D4D419' + id: HalfTileOverlayGreyscale270 + decals: + 882: 7,2 + 883: 8,6 + 884: 8,10 + 888: 10,31 + 889: 33,34 + 890: 33,36 + 891: 5,45 + - node: + color: '#D4D4D40C' + id: HalfTileOverlayGreyscale90 + decals: + 912: 7,2 + 913: 8,6 + 916: 8,10 + 917: 10,31 + 919: 33,34 + 920: 33,36 + 921: 5,45 + - node: + color: '#D4D4D419' + id: HalfTileOverlayGreyscale90 + decals: + 880: 30,2 + 881: 9,2 + 885: 2,6 + 886: 2,10 + 887: 2,31 + 892: 1,45 + - node: + color: '#9FED5896' + id: MiniTileCheckerAOverlay + decals: + 2028: 28,42 + 2029: 29,42 + 2030: 30,42 + 2031: 28,43 + 2032: 29,43 + 2033: 30,43 + 2034: 28,44 + 2035: 29,44 + 2036: 30,44 + - node: + color: '#DE3A3A96' + id: MiniTileCheckerAOverlay + decals: + 0: 7,19 + 1: 8,19 + 2: 9,19 + 3: 9,20 + 4: 8,20 + 5: 7,20 + 6: 7,21 + 7: 8,21 + 8: 9,21 + 9: 19,19 + 10: 20,19 + 11: 21,19 + 12: 21,20 + 13: 20,20 + 14: 19,20 + 15: 19,21 + 16: 20,21 + 17: 21,21 + 18: 17,15 + 19: 17,14 + 20: 17,13 + 21: 18,13 + 22: 19,13 + 23: 20,13 + 24: 21,13 + 25: 21,14 + 26: 21,15 + 27: 20,15 + 28: 19,15 + 29: 18,15 + 30: 18,14 + 31: 19,14 + 32: 20,9 + 33: 21,9 + 34: 22,9 + 35: 22,8 + 36: 22,7 + 37: 21,7 + 38: 21,8 + 39: 20,8 + 40: 20,7 + 41: 12,7 + 42: 13,7 + 43: 14,7 + 44: 14,8 + 45: 13,8 + 46: 12,8 + 47: 12,9 + 48: 13,9 + 49: 14,9 + 59: 17,39 + 60: 18,39 + 61: 19,39 + 62: 20,39 + 63: 21,39 + 64: 16,36 + 65: 16,35 + 66: 16,34 + 67: 17,34 + 68: 18,34 + 69: 18,35 + 70: 17,35 + 71: 17,36 + 72: 18,36 + - node: + color: '#FFFFFFFF' + id: MiniTileCheckerAOverlay + decals: + 2052: 28,46 + 2053: 28,47 + 2054: 29,47 + 2055: 29,46 + - node: + color: '#9FED5896' + id: MiniTileCheckerBOverlay + decals: + 50: 31,21 + 51: 31,20 + 52: 31,19 + 53: 33,21 + 54: 33,20 + 55: 33,19 + - node: + color: '#DE3A3A96' + id: MiniTileCheckerBOverlay + decals: + 56: 32,21 + 57: 32,20 + 58: 32,19 + - node: + color: '#DE3A3A96' + id: StandClearGreyscale + decals: + 751: 26,7 + 752: 32,7 + 753: 29,9 + 838: 6,2 + 839: 10,2 + - node: + color: '#FFFFFFFF' + id: WarnCornerNE + decals: + 605: 13,40 + 747: 34,10 + - node: + color: '#FFFFFFFF' + id: WarnCornerNW + decals: + 606: 9,40 + 741: 24,10 + - node: + color: '#FFFFFFFF' + id: WarnCornerSE + decals: + 604: 13,38 + 746: 34,6 + - node: + color: '#FFFFFFFF' + id: WarnCornerSW + decals: + 598: 9,38 + 740: 24,6 + - node: + color: '#FFFFFFFF' + id: WarnFull + decals: + 657: 32,35 + - node: + color: '#FFFFFFFF' + id: WarnLineE + decals: + 607: 13,39 + 644: 26,34 + 645: 26,35 + 646: 26,36 + 744: 34,7 + 745: 34,9 + - node: + color: '#DE3A3A96' + id: WarnLineGreyscaleE + decals: + 112: 18,26 + 117: 14,26 + 118: 22,26 + 121: 22,35 + 122: 22,39 + 128: 14,39 + 131: 6,39 + 132: 12,31 + 135: 26,31 + 140: 26,26 + 145: 30,26 + 146: 34,26 + 153: 2,26 + 159: 4,20 + 160: 10,20 + 166: 16,20 + 170: 22,20 + 175: 34,20 + 176: 22,14 + 183: 6,14 + 184: 10,8 + 188: 16,2 + 190: 34,2 + 205: 21,2 + 213: 34,8 + 214: 30,14 + 219: 34,35 + 223: 30,39 + 224: 22,45 + 227: 14,45 + 230: 6,45 + 235: 10,35 + 834: 5,2 + 2018: 30,45 + - node: + color: '#DE3A3A96' + id: WarnLineGreyscaleN + decals: + 111: 17,28 + 116: 13,28 + 125: 19,40 + 126: 11,40 + 138: 21,28 + 144: 29,28 + 154: 1,28 + 158: 2,22 + 161: 8,22 + 165: 14,22 + 171: 20,22 + 173: 32,22 + 179: 19,16 + 180: 3,16 + 186: 17,10 + 209: 26,4 + 210: 29,10 + 217: 26,22 + 220: 29,36 + 228: 11,48 + 233: 3,48 + 237: 5,28 + 2020: 27,48 + - node: + color: '#FFFFFFFF' + id: WarnLineGreyscaleN + decals: + 667: 27,35 + 668: 28,35 + 669: 29,35 + 670: 30,35 + 671: 31,35 + - node: + color: '#DE3A3A96' + id: WarnLineGreyscaleS + decals: + 110: 17,24 + 115: 13,24 + 124: 19,38 + 127: 11,38 + 136: 20,30 + 137: 21,24 + 139: 25,24 + 143: 29,24 + 148: 33,24 + 149: 32,28 + 150: 33,28 + 151: 34,28 + 152: 1,24 + 157: 2,18 + 163: 8,18 + 164: 14,18 + 169: 20,18 + 172: 32,18 + 177: 19,12 + 181: 3,12 + 187: 17,6 + 208: 26,0 + 211: 29,6 + 216: 26,18 + 221: 29,34 + 229: 11,42 + 231: 3,42 + 236: 5,24 + 2019: 27,42 + - node: + color: '#FFFFFFFF' + id: WarnLineGreyscaleS + decals: + 662: 27,35 + 663: 28,35 + 664: 29,35 + 665: 30,35 + 666: 31,35 + - node: + color: '#DE3A3A96' + id: WarnLineGreyscaleW + decals: + 113: 16,26 + 114: 12,26 + 119: 20,26 + 120: 12,35 + 123: 16,39 + 129: 8,39 + 130: 0,39 + 133: 0,31 + 134: 14,31 + 141: 24,26 + 142: 28,26 + 147: 32,26 + 155: 0,26 + 156: 0,20 + 162: 6,20 + 167: 12,20 + 168: 18,20 + 174: 30,20 + 178: 16,14 + 182: 0,14 + 185: 0,8 + 189: 0,2 + 206: 18,2 + 207: 23,2 + 212: 24,8 + 215: 24,14 + 218: 24,35 + 222: 24,39 + 225: 16,45 + 226: 8,45 + 232: 0,45 + 234: 0,35 + 835: 11,2 + 2017: 24,45 + - node: + color: '#FFFFFFFF' + id: WarnLineN + decals: + 601: 10,38 + 602: 12,38 + 647: 27,34 + 648: 28,34 + 649: 30,34 + 650: 31,34 + 651: 32,34 + 732: 28,6 + 733: 27,6 + 734: 26,6 + 735: 25,6 + 736: 30,6 + 737: 31,6 + 738: 32,6 + 739: 33,6 + - node: + color: '#FFFFFFFF' + id: WarnLineS + decals: + 603: 9,39 + 742: 24,7 + 743: 24,9 + - node: + color: '#FFFFFFFF' + id: WarnLineW + decals: + 599: 10,40 + 600: 12,40 + 652: 27,36 + 653: 28,36 + 654: 30,36 + 655: 31,36 + 656: 32,36 + 724: 25,10 + 725: 26,10 + 726: 28,10 + 727: 27,10 + 728: 30,10 + 729: 31,10 + 730: 32,10 + 731: 33,10 + - node: + cleanable: True + color: '#80C71F7F' + id: revolution + decals: + 2138: 14.060958,20.754644 + 2139: 13.607299,19.803425 + - node: + cleanable: True + color: '#B02E60A3' + id: revolution + decals: + 2137: 25.02975,25.438416 + - node: + cleanable: True + angle: -1.5707963267948966 rad + color: '#B02E2644' + id: splatter + decals: + 2131: 27.967218,24.104916 + - node: + cleanable: True + color: '#B02E2666' + id: splatter + decals: + 2126: 8.891183,43.065514 + - node: + cleanable: True + angle: -1.5707963267948966 rad + color: '#B02E266F' + id: splatter + decals: + 2132: 28.36234,24.163452 + 2133: 32.200607,35.087025 + 2134: 13.24002,46.473877 + 2135: 24.497486,47.84553 + - node: + cleanable: True + angle: -4.71238898038469 rad + color: '#B02E26B4' + id: splatter + decals: + 2128: 8.788744,42.524048 + 2129: 15.538555,20.953827 + 2130: 24.864944,27.488853 + - node: + cleanable: True + angle: -3.141592653589793 rad + color: '#B02E26B4' + id: splatter + decals: + 2127: 9.110695,42.81673 + - type: RadiationGridResistance + - type: LoadedMap + - type: SpreaderGrid + - type: GridTree + - type: MovedGrids + - type: GridPathfinding +- proto: AirlockBrigGlassLocked + entities: + - uid: 1245 + components: + - type: Transform + pos: 15.5,35.5 + parent: 588 + - uid: 1246 + components: + - type: Transform + pos: 19.5,35.5 + parent: 588 + - uid: 1625 + components: + - type: Transform + pos: 22.5,2.5 + parent: 588 +- proto: AirlockEngineering + entities: + - uid: 1515 + components: + - type: Transform + pos: 19.5,43.5 + parent: 588 +- proto: AirlockSecurityGlassLocked + entities: + - uid: 1579 + components: + - type: Transform + pos: 11.5,15.5 + parent: 588 + - uid: 1609 + components: + - type: Transform + pos: 15.5,8.5 + parent: 588 + - uid: 1610 + components: + - type: Transform + pos: 19.5,8.5 + parent: 588 + - uid: 1623 + components: + - type: Transform + pos: 6.5,2.5 + parent: 588 + - uid: 1624 + components: + - type: Transform + pos: 10.5,2.5 + parent: 588 +- proto: APCBasic + entities: + - uid: 484 + components: + - type: Transform + pos: 25.5,13.5 + parent: 588 + - uid: 773 + components: + - type: Transform + pos: 25.5,19.5 + parent: 588 + - uid: 973 + components: + - type: Transform + pos: 21.5,32.5 + parent: 588 + - uid: 1509 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,47.5 + parent: 588 +- proto: BannerSecurity + entities: + - uid: 553 + components: + - type: Transform + pos: 30.5,8.5 + parent: 588 + - uid: 1619 + components: + - type: Transform + pos: 18.5,10.5 + parent: 588 + - uid: 1620 + components: + - type: Transform + pos: 16.5,6.5 + parent: 588 +- proto: BasaltFive + entities: + - uid: 608 + components: + - type: Transform + pos: 2.5,14.5 + parent: 588 + - uid: 647 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,21.5 + parent: 588 + - uid: 899 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,30.5 + parent: 588 + - uid: 1264 + components: + - type: Transform + pos: 9.5,0.5 + parent: 588 + - uid: 1384 + components: + - type: Transform + pos: 5.5,48.5 + parent: 588 + - uid: 1386 + components: + - type: Transform + pos: 0.5,47.5 + parent: 588 + - uid: 1387 + components: + - type: Transform + pos: 0.5,42.5 + parent: 588 + - uid: 1388 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,42.5 + parent: 588 +- proto: BasaltFour + entities: + - uid: 900 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,32.5 + parent: 588 + - uid: 904 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,40.5 + parent: 588 + - uid: 1381 + components: + - type: Transform + pos: 1.5,44.5 + parent: 588 + - uid: 1385 + components: + - type: Transform + pos: 6.5,48.5 + parent: 588 +- proto: BasaltOne + entities: + - uid: 813 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,27.5 + parent: 588 + - uid: 897 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,30.5 + parent: 588 + - uid: 901 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,32.5 + parent: 588 + - uid: 903 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,38.5 + parent: 588 + - uid: 1382 + components: + - type: Transform + pos: 1.5,48.5 + parent: 588 +- proto: BasaltRandom + entities: + - uid: 613 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,14.5 + parent: 588 + - uid: 615 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,7.5 + parent: 588 +- proto: BasaltThree + entities: + - uid: 616 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,7.5 + parent: 588 + - uid: 644 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,20.5 + parent: 588 + - uid: 898 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,30.5 + parent: 588 + - uid: 905 + components: + - type: Transform + pos: 4.5,38.5 + parent: 588 + - uid: 1265 + components: + - type: Transform + pos: 7.5,1.5 + parent: 588 + - uid: 1266 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,3.5 + parent: 588 + - uid: 1383 + components: + - type: Transform + pos: 6.5,47.5 + parent: 588 +- proto: BasaltTwo + entities: + - uid: 610 + components: + - type: Transform + pos: 3.5,14.5 + parent: 588 + - uid: 617 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,9.5 + parent: 588 + - uid: 618 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,8.5 + parent: 588 + - uid: 646 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,19.5 + parent: 588 + - uid: 814 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,26.5 + parent: 588 + - uid: 896 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,32.5 + parent: 588 + - uid: 902 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,38.5 + parent: 588 + - uid: 1263 + components: + - type: Transform + pos: 7.5,4.5 + parent: 588 + - uid: 1380 + components: + - type: Transform + pos: 1.5,43.5 + parent: 588 +- proto: Bed + entities: + - uid: 257 + components: + - type: Transform + pos: 15.5,4.5 + parent: 588 + - uid: 282 + components: + - type: Transform + pos: 1.5,4.5 + parent: 588 + - uid: 293 + components: + - type: Transform + pos: 3.5,4.5 + parent: 588 + - uid: 294 + components: + - type: Transform + pos: 5.5,4.5 + parent: 588 + - uid: 295 + components: + - type: Transform + pos: 11.5,4.5 + parent: 588 + - uid: 296 + components: + - type: Transform + pos: 13.5,4.5 + parent: 588 + - uid: 700 + components: + - type: Transform + pos: 12.5,22.5 + parent: 588 + - uid: 701 + components: + - type: Transform + pos: 16.5,18.5 + parent: 588 + - uid: 1043 + components: + - type: Transform + pos: 20.5,28.5 + parent: 588 + - uid: 1044 + components: + - type: Transform + pos: 22.5,24.5 + parent: 588 + - uid: 1075 + components: + - type: Transform + pos: 24.5,28.5 + parent: 588 + - uid: 1099 + components: + - type: Transform + pos: 20.5,36.5 + parent: 588 + - uid: 1100 + components: + - type: Transform + pos: 14.5,34.5 + parent: 588 + - uid: 1763 + components: + - type: Transform + pos: 24.5,48.5 + parent: 588 + - uid: 1764 + components: + - type: Transform + pos: 24.5,42.5 + parent: 588 +- proto: BedsheetMedical + entities: + - uid: 1150 + components: + - type: Transform + pos: 28.5,24.5 + parent: 588 + - uid: 1151 + components: + - type: Transform + pos: 28.5,25.5 + parent: 588 +- proto: BedsheetOrange + entities: + - uid: 298 + components: + - type: Transform + pos: 3.5,4.5 + parent: 588 + - uid: 299 + components: + - type: Transform + pos: 5.5,4.5 + parent: 588 + - uid: 300 + components: + - type: Transform + pos: 13.5,4.5 + parent: 588 + - uid: 1765 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,42.5 + parent: 588 +- proto: BedsheetSpawner + entities: + - uid: 301 + components: + - type: Transform + pos: 11.5,4.5 + parent: 588 + - uid: 1041 + components: + - type: Transform + pos: 20.5,28.5 + parent: 588 + - uid: 1225 + components: + - type: Transform + pos: 14.5,34.5 + parent: 588 + - uid: 1226 + components: + - type: Transform + pos: 20.5,36.5 + parent: 588 +- proto: BedsheetSyndie + entities: + - uid: 1037 + components: + - type: Transform + pos: 22.5,24.5 + parent: 588 + - uid: 1766 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,48.5 + parent: 588 +- proto: BlastDoor + entities: + - uid: 1600 + components: + - type: Transform + pos: 26.5,7.5 + parent: 588 + - uid: 1601 + components: + - type: Transform + pos: 29.5,9.5 + parent: 588 + - uid: 1602 + components: + - type: Transform + pos: 32.5,7.5 + parent: 588 +- proto: Bola + entities: + - uid: 1157 + components: + - type: Transform + pos: 15.616387,0.61007345 + parent: 588 +- proto: BookEscalationSecurity + entities: + - uid: 373 + components: + - type: Transform + pos: 19.42657,0.6288943 + parent: 588 +- proto: BookRandom + entities: + - uid: 1835 + components: + - type: Transform + pos: 24.420084,44.539436 + parent: 588 +- proto: BookSecurity + entities: + - uid: 522 + components: + - type: Transform + pos: 32.41844,8.400207 + parent: 588 +- proto: BoxFolderBlack + entities: + - uid: 365 + components: + - type: Transform + pos: 27.841173,1.5632035 + parent: 588 + - uid: 728 + components: + - type: Transform + pos: 10.690479,19.262342 + parent: 588 +- proto: BoxFolderGrey + entities: + - uid: 364 + components: + - type: Transform + pos: 25.072409,1.4780562 + parent: 588 + - uid: 727 + components: + - type: Transform + pos: 7.2148314,22.575037 + parent: 588 +- proto: BoxFolderRed + entities: + - uid: 329 + components: + - type: Transform + pos: 21.42984,3.6329575 + parent: 588 + - uid: 362 + components: + - type: Transform + pos: 24.788435,1.6057768 + parent: 588 + - uid: 363 + components: + - type: Transform + pos: 28.196142,1.5773941 + parent: 588 + - uid: 726 + components: + - type: Transform + pos: 10.428753,19.429379 + parent: 588 +- proto: BoxMouthSwab + entities: + - uid: 1476 + components: + - type: Transform + pos: 12.356534,44.605965 + parent: 588 +- proto: BoxSterileMask + entities: + - uid: 1477 + components: + - type: Transform + pos: 12.683106,44.705303 + parent: 588 +- proto: BriefcaseBrownFilled + entities: + - uid: 325 + components: + - type: Transform + pos: 19.413612,4.6972914 + parent: 588 +- proto: BrokenBottle + entities: + - uid: 1691 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.063513,27.520548 + parent: 588 +- proto: Bucket + entities: + - uid: 1839 + components: + - type: Transform + pos: 29.616838,43.531868 + parent: 588 + - uid: 1857 + components: + - type: Transform + pos: 30.264944,21.705044 + parent: 588 +- proto: CableApcExtension + entities: + - uid: 1 + components: + - type: Transform + pos: 0.5,2.5 + parent: 588 + - uid: 2 + components: + - type: Transform + pos: 1.5,2.5 + parent: 588 + - uid: 3 + components: + - type: Transform + pos: 2.5,2.5 + parent: 588 + - uid: 4 + components: + - type: Transform + pos: 3.5,2.5 + parent: 588 + - uid: 5 + components: + - type: Transform + pos: 4.5,2.5 + parent: 588 + - uid: 6 + components: + - type: Transform + pos: 5.5,2.5 + parent: 588 + - uid: 7 + components: + - type: Transform + pos: 6.5,2.5 + parent: 588 + - uid: 8 + components: + - type: Transform + pos: 7.5,2.5 + parent: 588 + - uid: 9 + components: + - type: Transform + pos: 8.5,2.5 + parent: 588 + - uid: 10 + components: + - type: Transform + pos: 9.5,2.5 + parent: 588 + - uid: 11 + components: + - type: Transform + pos: 10.5,2.5 + parent: 588 + - uid: 12 + components: + - type: Transform + pos: 11.5,2.5 + parent: 588 + - uid: 13 + components: + - type: Transform + pos: 12.5,2.5 + parent: 588 + - uid: 14 + components: + - type: Transform + pos: 13.5,2.5 + parent: 588 + - uid: 15 + components: + - type: Transform + pos: 14.5,2.5 + parent: 588 + - uid: 16 + components: + - type: Transform + pos: 15.5,2.5 + parent: 588 + - uid: 17 + components: + - type: Transform + pos: 16.5,2.5 + parent: 588 + - uid: 18 + components: + - type: Transform + pos: 8.5,4.5 + parent: 588 + - uid: 19 + components: + - type: Transform + pos: 8.5,3.5 + parent: 588 + - uid: 20 + components: + - type: Transform + pos: 8.5,1.5 + parent: 588 + - uid: 21 + components: + - type: Transform + pos: 8.5,0.5 + parent: 588 + - uid: 22 + components: + - type: Transform + pos: 18.5,2.5 + parent: 588 + - uid: 23 + components: + - type: Transform + pos: 19.5,2.5 + parent: 588 + - uid: 24 + components: + - type: Transform + pos: 20.5,2.5 + parent: 588 + - uid: 25 + components: + - type: Transform + pos: 21.5,2.5 + parent: 588 + - uid: 26 + components: + - type: Transform + pos: 22.5,2.5 + parent: 588 + - uid: 27 + components: + - type: Transform + pos: 23.5,2.5 + parent: 588 + - uid: 28 + components: + - type: Transform + pos: 24.5,2.5 + parent: 588 + - uid: 29 + components: + - type: Transform + pos: 25.5,2.5 + parent: 588 + - uid: 30 + components: + - type: Transform + pos: 26.5,2.5 + parent: 588 + - uid: 31 + components: + - type: Transform + pos: 27.5,2.5 + parent: 588 + - uid: 32 + components: + - type: Transform + pos: 28.5,2.5 + parent: 588 + - uid: 33 + components: + - type: Transform + pos: 29.5,2.5 + parent: 588 + - uid: 34 + components: + - type: Transform + pos: 30.5,2.5 + parent: 588 + - uid: 35 + components: + - type: Transform + pos: 31.5,2.5 + parent: 588 + - uid: 36 + components: + - type: Transform + pos: 32.5,2.5 + parent: 588 + - uid: 37 + components: + - type: Transform + pos: 33.5,2.5 + parent: 588 + - uid: 38 + components: + - type: Transform + pos: 34.5,2.5 + parent: 588 + - uid: 39 + components: + - type: Transform + pos: 26.5,4.5 + parent: 588 + - uid: 40 + components: + - type: Transform + pos: 26.5,3.5 + parent: 588 + - uid: 41 + components: + - type: Transform + pos: 26.5,1.5 + parent: 588 + - uid: 42 + components: + - type: Transform + pos: 26.5,0.5 + parent: 588 + - uid: 43 + components: + - type: Transform + pos: 0.5,8.5 + parent: 588 + - uid: 44 + components: + - type: Transform + pos: 1.5,8.5 + parent: 588 + - uid: 52 + components: + - type: Transform + pos: 9.5,8.5 + parent: 588 + - uid: 53 + components: + - type: Transform + pos: 10.5,8.5 + parent: 588 + - uid: 54 + components: + - type: Transform + pos: 5.5,10.5 + parent: 588 + - uid: 57 + components: + - type: Transform + pos: 5.5,6.5 + parent: 588 + - uid: 58 + components: + - type: Transform + pos: 17.5,6.5 + parent: 588 + - uid: 59 + components: + - type: Transform + pos: 17.5,7.5 + parent: 588 + - uid: 60 + components: + - type: Transform + pos: 17.5,8.5 + parent: 588 + - uid: 61 + components: + - type: Transform + pos: 17.5,9.5 + parent: 588 + - uid: 62 + components: + - type: Transform + pos: 17.5,10.5 + parent: 588 + - uid: 63 + components: + - type: Transform + pos: 12.5,8.5 + parent: 588 + - uid: 64 + components: + - type: Transform + pos: 13.5,8.5 + parent: 588 + - uid: 65 + components: + - type: Transform + pos: 14.5,8.5 + parent: 588 + - uid: 66 + components: + - type: Transform + pos: 15.5,8.5 + parent: 588 + - uid: 67 + components: + - type: Transform + pos: 16.5,8.5 + parent: 588 + - uid: 68 + components: + - type: Transform + pos: 18.5,8.5 + parent: 588 + - uid: 69 + components: + - type: Transform + pos: 19.5,8.5 + parent: 588 + - uid: 70 + components: + - type: Transform + pos: 20.5,8.5 + parent: 588 + - uid: 71 + components: + - type: Transform + pos: 21.5,8.5 + parent: 588 + - uid: 72 + components: + - type: Transform + pos: 22.5,8.5 + parent: 588 + - uid: 73 + components: + - type: Transform + pos: 22.5,14.5 + parent: 588 + - uid: 74 + components: + - type: Transform + pos: 21.5,14.5 + parent: 588 + - uid: 75 + components: + - type: Transform + pos: 20.5,14.5 + parent: 588 + - uid: 76 + components: + - type: Transform + pos: 19.5,14.5 + parent: 588 + - uid: 77 + components: + - type: Transform + pos: 18.5,14.5 + parent: 588 + - uid: 78 + components: + - type: Transform + pos: 17.5,14.5 + parent: 588 + - uid: 79 + components: + - type: Transform + pos: 16.5,14.5 + parent: 588 + - uid: 80 + components: + - type: Transform + pos: 19.5,13.5 + parent: 588 + - uid: 81 + components: + - type: Transform + pos: 19.5,12.5 + parent: 588 + - uid: 82 + components: + - type: Transform + pos: 19.5,15.5 + parent: 588 + - uid: 83 + components: + - type: Transform + pos: 19.5,16.5 + parent: 588 + - uid: 84 + components: + - type: Transform + pos: 14.5,14.5 + parent: 588 + - uid: 85 + components: + - type: Transform + pos: 13.5,14.5 + parent: 588 + - uid: 86 + components: + - type: Transform + pos: 12.5,14.5 + parent: 588 + - uid: 87 + components: + - type: Transform + pos: 11.5,14.5 + parent: 588 + - uid: 88 + components: + - type: Transform + pos: 10.5,14.5 + parent: 588 + - uid: 89 + components: + - type: Transform + pos: 9.5,14.5 + parent: 588 + - uid: 90 + components: + - type: Transform + pos: 8.5,14.5 + parent: 588 + - uid: 91 + components: + - type: Transform + pos: 11.5,13.5 + parent: 588 + - uid: 92 + components: + - type: Transform + pos: 11.5,12.5 + parent: 588 + - uid: 93 + components: + - type: Transform + pos: 11.5,15.5 + parent: 588 + - uid: 94 + components: + - type: Transform + pos: 11.5,16.5 + parent: 588 + - uid: 95 + components: + - type: Transform + pos: 6.5,14.5 + parent: 588 + - uid: 96 + components: + - type: Transform + pos: 5.5,14.5 + parent: 588 + - uid: 98 + components: + - type: Transform + pos: 4.5,22.5 + parent: 588 + - uid: 100 + components: + - type: Transform + pos: 1.5,14.5 + parent: 588 + - uid: 101 + components: + - type: Transform + pos: 0.5,14.5 + parent: 588 + - uid: 102 + components: + - type: Transform + pos: 3.5,15.5 + parent: 588 + - uid: 103 + components: + - type: Transform + pos: 3.5,16.5 + parent: 588 + - uid: 104 + components: + - type: Transform + pos: 3.5,13.5 + parent: 588 + - uid: 105 + components: + - type: Transform + pos: 3.5,12.5 + parent: 588 + - uid: 106 + components: + - type: Transform + pos: 14.5,18.5 + parent: 588 + - uid: 107 + components: + - type: Transform + pos: 14.5,19.5 + parent: 588 + - uid: 108 + components: + - type: Transform + pos: 14.5,20.5 + parent: 588 + - uid: 109 + components: + - type: Transform + pos: 14.5,21.5 + parent: 588 + - uid: 110 + components: + - type: Transform + pos: 14.5,22.5 + parent: 588 + - uid: 111 + components: + - type: Transform + pos: 15.5,20.5 + parent: 588 + - uid: 112 + components: + - type: Transform + pos: 16.5,20.5 + parent: 588 + - uid: 113 + components: + - type: Transform + pos: 13.5,20.5 + parent: 588 + - uid: 114 + components: + - type: Transform + pos: 12.5,20.5 + parent: 588 + - uid: 115 + components: + - type: Transform + pos: 8.5,18.5 + parent: 588 + - uid: 116 + components: + - type: Transform + pos: 8.5,19.5 + parent: 588 + - uid: 117 + components: + - type: Transform + pos: 8.5,20.5 + parent: 588 + - uid: 118 + components: + - type: Transform + pos: 8.5,21.5 + parent: 588 + - uid: 119 + components: + - type: Transform + pos: 8.5,22.5 + parent: 588 + - uid: 120 + components: + - type: Transform + pos: 9.5,20.5 + parent: 588 + - uid: 121 + components: + - type: Transform + pos: 10.5,20.5 + parent: 588 + - uid: 122 + components: + - type: Transform + pos: 7.5,20.5 + parent: 588 + - uid: 123 + components: + - type: Transform + pos: 6.5,20.5 + parent: 588 + - uid: 124 + components: + - type: Transform + pos: 2.5,22.5 + parent: 588 + - uid: 125 + components: + - type: Transform + pos: 4.5,21.5 + parent: 588 + - uid: 126 + components: + - type: Transform + pos: 4.5,19.5 + parent: 588 + - uid: 127 + components: + - type: Transform + pos: 3.5,18.5 + parent: 588 + - uid: 128 + components: + - type: Transform + pos: 2.5,18.5 + parent: 588 + - uid: 129 + components: + - type: Transform + pos: 3.5,22.5 + parent: 588 + - uid: 130 + components: + - type: Transform + pos: 0.5,20.5 + parent: 588 + - uid: 131 + components: + - type: Transform + pos: 4.5,18.5 + parent: 588 + - uid: 132 + components: + - type: Transform + pos: 4.5,20.5 + parent: 588 + - uid: 133 + components: + - type: Transform + pos: 1.5,24.5 + parent: 588 + - uid: 134 + components: + - type: Transform + pos: 2.5,25.5 + parent: 588 + - uid: 135 + components: + - type: Transform + pos: 0.5,24.5 + parent: 588 + - uid: 136 + components: + - type: Transform + pos: 2.5,24.5 + parent: 588 + - uid: 137 + components: + - type: Transform + pos: 1.5,28.5 + parent: 588 + - uid: 138 + components: + - type: Transform + pos: 0.5,26.5 + parent: 588 + - uid: 139 + components: + - type: Transform + pos: 2.5,26.5 + parent: 588 + - uid: 147 + components: + - type: Transform + pos: 9.5,28.5 + parent: 588 + - uid: 148 + components: + - type: Transform + pos: 9.5,27.5 + parent: 588 + - uid: 149 + components: + - type: Transform + pos: 9.5,26.5 + parent: 588 + - uid: 150 + components: + - type: Transform + pos: 9.5,25.5 + parent: 588 + - uid: 151 + components: + - type: Transform + pos: 9.5,24.5 + parent: 588 + - uid: 152 + components: + - type: Transform + pos: 8.5,26.5 + parent: 588 + - uid: 153 + components: + - type: Transform + pos: 10.5,26.5 + parent: 588 + - uid: 154 + components: + - type: Transform + pos: 13.5,28.5 + parent: 588 + - uid: 155 + components: + - type: Transform + pos: 13.5,27.5 + parent: 588 + - uid: 156 + components: + - type: Transform + pos: 13.5,26.5 + parent: 588 + - uid: 157 + components: + - type: Transform + pos: 13.5,25.5 + parent: 588 + - uid: 158 + components: + - type: Transform + pos: 13.5,24.5 + parent: 588 + - uid: 159 + components: + - type: Transform + pos: 12.5,26.5 + parent: 588 + - uid: 160 + components: + - type: Transform + pos: 14.5,26.5 + parent: 588 + - uid: 161 + components: + - type: Transform + pos: 0.5,31.5 + parent: 588 + - uid: 162 + components: + - type: Transform + pos: 1.5,31.5 + parent: 588 + - uid: 163 + components: + - type: Transform + pos: 2.5,31.5 + parent: 588 + - uid: 164 + components: + - type: Transform + pos: 3.5,31.5 + parent: 588 + - uid: 165 + components: + - type: Transform + pos: 4.5,31.5 + parent: 588 + - uid: 166 + components: + - type: Transform + pos: 5.5,31.5 + parent: 588 + - uid: 167 + components: + - type: Transform + pos: 6.5,31.5 + parent: 588 + - uid: 168 + components: + - type: Transform + pos: 7.5,31.5 + parent: 588 + - uid: 169 + components: + - type: Transform + pos: 8.5,31.5 + parent: 588 + - uid: 170 + components: + - type: Transform + pos: 9.5,31.5 + parent: 588 + - uid: 171 + components: + - type: Transform + pos: 10.5,31.5 + parent: 588 + - uid: 172 + components: + - type: Transform + pos: 11.5,31.5 + parent: 588 + - uid: 173 + components: + - type: Transform + pos: 12.5,31.5 + parent: 588 + - uid: 174 + components: + - type: Transform + pos: 6.5,30.5 + parent: 588 + - uid: 175 + components: + - type: Transform + pos: 6.5,32.5 + parent: 588 + - uid: 176 + components: + - type: Transform + pos: 26.5,31.5 + parent: 588 + - uid: 177 + components: + - type: Transform + pos: 25.5,31.5 + parent: 588 + - uid: 178 + components: + - type: Transform + pos: 24.5,31.5 + parent: 588 + - uid: 179 + components: + - type: Transform + pos: 23.5,31.5 + parent: 588 + - uid: 180 + components: + - type: Transform + pos: 22.5,31.5 + parent: 588 + - uid: 181 + components: + - type: Transform + pos: 21.5,31.5 + parent: 588 + - uid: 182 + components: + - type: Transform + pos: 20.5,31.5 + parent: 588 + - uid: 183 + components: + - type: Transform + pos: 19.5,31.5 + parent: 588 + - uid: 184 + components: + - type: Transform + pos: 18.5,31.5 + parent: 588 + - uid: 185 + components: + - type: Transform + pos: 17.5,31.5 + parent: 588 + - uid: 186 + components: + - type: Transform + pos: 16.5,31.5 + parent: 588 + - uid: 187 + components: + - type: Transform + pos: 15.5,31.5 + parent: 588 + - uid: 188 + components: + - type: Transform + pos: 14.5,31.5 + parent: 588 + - uid: 189 + components: + - type: Transform + pos: 20.5,32.5 + parent: 588 + - uid: 190 + components: + - type: Transform + pos: 20.5,30.5 + parent: 588 + - uid: 191 + components: + - type: Transform + pos: 22.5,35.5 + parent: 588 + - uid: 192 + components: + - type: Transform + pos: 21.5,35.5 + parent: 588 + - uid: 193 + components: + - type: Transform + pos: 20.5,35.5 + parent: 588 + - uid: 194 + components: + - type: Transform + pos: 19.5,35.5 + parent: 588 + - uid: 195 + components: + - type: Transform + pos: 18.5,35.5 + parent: 588 + - uid: 196 + components: + - type: Transform + pos: 17.5,35.5 + parent: 588 + - uid: 197 + components: + - type: Transform + pos: 16.5,35.5 + parent: 588 + - uid: 198 + components: + - type: Transform + pos: 15.5,35.5 + parent: 588 + - uid: 199 + components: + - type: Transform + pos: 14.5,35.5 + parent: 588 + - uid: 200 + components: + - type: Transform + pos: 13.5,35.5 + parent: 588 + - uid: 201 + components: + - type: Transform + pos: 12.5,35.5 + parent: 588 + - uid: 202 + components: + - type: Transform + pos: 17.5,36.5 + parent: 588 + - uid: 203 + components: + - type: Transform + pos: 17.5,34.5 + parent: 588 + - uid: 204 + components: + - type: Transform + pos: 10.5,35.5 + parent: 588 + - uid: 215 + components: + - type: Transform + pos: 5.5,36.5 + parent: 588 + - uid: 216 + components: + - type: Transform + pos: 5.5,34.5 + parent: 588 + - uid: 217 + components: + - type: Transform + pos: 0.5,39.5 + parent: 588 + - uid: 218 + components: + - type: Transform + pos: 1.5,39.5 + parent: 588 + - uid: 219 + components: + - type: Transform + pos: 2.5,39.5 + parent: 588 + - uid: 220 + components: + - type: Transform + pos: 3.5,39.5 + parent: 588 + - uid: 221 + components: + - type: Transform + pos: 4.5,39.5 + parent: 588 + - uid: 222 + components: + - type: Transform + pos: 5.5,39.5 + parent: 588 + - uid: 223 + components: + - type: Transform + pos: 6.5,39.5 + parent: 588 + - uid: 224 + components: + - type: Transform + pos: 3.5,38.5 + parent: 588 + - uid: 225 + components: + - type: Transform + pos: 3.5,40.5 + parent: 588 + - uid: 226 + components: + - type: Transform + pos: 8.5,39.5 + parent: 588 + - uid: 227 + components: + - type: Transform + pos: 9.5,39.5 + parent: 588 + - uid: 228 + components: + - type: Transform + pos: 10.5,39.5 + parent: 588 + - uid: 229 + components: + - type: Transform + pos: 11.5,39.5 + parent: 588 + - uid: 230 + components: + - type: Transform + pos: 12.5,39.5 + parent: 588 + - uid: 231 + components: + - type: Transform + pos: 13.5,39.5 + parent: 588 + - uid: 232 + components: + - type: Transform + pos: 14.5,39.5 + parent: 588 + - uid: 233 + components: + - type: Transform + pos: 11.5,38.5 + parent: 588 + - uid: 234 + components: + - type: Transform + pos: 11.5,40.5 + parent: 588 + - uid: 235 + components: + - type: Transform + pos: 16.5,39.5 + parent: 588 + - uid: 236 + components: + - type: Transform + pos: 17.5,39.5 + parent: 588 + - uid: 237 + components: + - type: Transform + pos: 18.5,39.5 + parent: 588 + - uid: 238 + components: + - type: Transform + pos: 19.5,39.5 + parent: 588 + - uid: 239 + components: + - type: Transform + pos: 20.5,39.5 + parent: 588 + - uid: 240 + components: + - type: Transform + pos: 21.5,39.5 + parent: 588 + - uid: 241 + components: + - type: Transform + pos: 22.5,39.5 + parent: 588 + - uid: 242 + components: + - type: Transform + pos: 19.5,40.5 + parent: 588 + - uid: 243 + components: + - type: Transform + pos: 19.5,38.5 + parent: 588 + - uid: 284 + components: + - type: Transform + pos: 29.5,26.5 + parent: 588 + - uid: 288 + components: + - type: Transform + pos: 28.5,26.5 + parent: 588 + - uid: 425 + components: + - type: Transform + pos: 1.5,10.5 + parent: 588 + - uid: 438 + components: + - type: Transform + pos: 1.5,9.5 + parent: 588 + - uid: 441 + components: + - type: Transform + pos: 2.5,10.5 + parent: 588 + - uid: 442 + components: + - type: Transform + pos: 3.5,10.5 + parent: 588 + - uid: 443 + components: + - type: Transform + pos: 4.5,10.5 + parent: 588 + - uid: 444 + components: + - type: Transform + pos: 1.5,7.5 + parent: 588 + - uid: 445 + components: + - type: Transform + pos: 1.5,6.5 + parent: 588 + - uid: 446 + components: + - type: Transform + pos: 2.5,6.5 + parent: 588 + - uid: 447 + components: + - type: Transform + pos: 3.5,6.5 + parent: 588 + - uid: 448 + components: + - type: Transform + pos: 4.5,6.5 + parent: 588 + - uid: 449 + components: + - type: Transform + pos: 6.5,6.5 + parent: 588 + - uid: 450 + components: + - type: Transform + pos: 7.5,6.5 + parent: 588 + - uid: 451 + components: + - type: Transform + pos: 8.5,6.5 + parent: 588 + - uid: 452 + components: + - type: Transform + pos: 9.5,6.5 + parent: 588 + - uid: 453 + components: + - type: Transform + pos: 9.5,7.5 + parent: 588 + - uid: 454 + components: + - type: Transform + pos: 9.5,9.5 + parent: 588 + - uid: 455 + components: + - type: Transform + pos: 9.5,10.5 + parent: 588 + - uid: 456 + components: + - type: Transform + pos: 8.5,10.5 + parent: 588 + - uid: 457 + components: + - type: Transform + pos: 7.5,10.5 + parent: 588 + - uid: 472 + components: + - type: Transform + pos: 29.5,14.5 + parent: 588 + - uid: 477 + components: + - type: Transform + pos: 24.5,13.5 + parent: 588 + - uid: 479 + components: + - type: Transform + pos: 30.5,14.5 + parent: 588 + - uid: 493 + components: + - type: Transform + pos: 25.5,13.5 + parent: 588 + - uid: 494 + components: + - type: Transform + pos: 25.5,12.5 + parent: 588 + - uid: 495 + components: + - type: Transform + pos: 26.5,12.5 + parent: 588 + - uid: 496 + components: + - type: Transform + pos: 27.5,12.5 + parent: 588 + - uid: 497 + components: + - type: Transform + pos: 28.5,12.5 + parent: 588 + - uid: 498 + components: + - type: Transform + pos: 29.5,12.5 + parent: 588 + - uid: 500 + components: + - type: Transform + pos: 24.5,12.5 + parent: 588 + - uid: 502 + components: + - type: Transform + pos: 24.5,14.5 + parent: 588 + - uid: 503 + components: + - type: Transform + pos: 24.5,15.5 + parent: 588 + - uid: 504 + components: + - type: Transform + pos: 24.5,16.5 + parent: 588 + - uid: 505 + components: + - type: Transform + pos: 25.5,16.5 + parent: 588 + - uid: 506 + components: + - type: Transform + pos: 26.5,16.5 + parent: 588 + - uid: 507 + components: + - type: Transform + pos: 27.5,16.5 + parent: 588 + - uid: 508 + components: + - type: Transform + pos: 28.5,16.5 + parent: 588 + - uid: 509 + components: + - type: Transform + pos: 29.5,16.5 + parent: 588 + - uid: 514 + components: + - type: Transform + pos: 29.5,13.5 + parent: 588 + - uid: 523 + components: + - type: Transform + pos: 29.5,15.5 + parent: 588 + - uid: 628 + components: + - type: Transform + pos: 1.5,22.5 + parent: 588 + - uid: 639 + components: + - type: Transform + pos: 0.5,22.5 + parent: 588 + - uid: 640 + components: + - type: Transform + pos: 0.5,21.5 + parent: 588 + - uid: 641 + components: + - type: Transform + pos: 0.5,19.5 + parent: 588 + - uid: 642 + components: + - type: Transform + pos: 0.5,18.5 + parent: 588 + - uid: 643 + components: + - type: Transform + pos: 1.5,18.5 + parent: 588 + - uid: 657 + components: + - type: Transform + pos: 2.5,15.5 + parent: 588 + - uid: 661 + components: + - type: Transform + pos: 1.5,15.5 + parent: 588 + - uid: 662 + components: + - type: Transform + pos: 1.5,13.5 + parent: 588 + - uid: 663 + components: + - type: Transform + pos: 2.5,13.5 + parent: 588 + - uid: 664 + components: + - type: Transform + pos: 4.5,13.5 + parent: 588 + - uid: 665 + components: + - type: Transform + pos: 5.5,13.5 + parent: 588 + - uid: 666 + components: + - type: Transform + pos: 5.5,15.5 + parent: 588 + - uid: 667 + components: + - type: Transform + pos: 4.5,15.5 + parent: 588 + - uid: 668 + components: + - type: Transform + pos: 29.5,10.5 + parent: 588 + - uid: 669 + components: + - type: Transform + pos: 28.5,10.5 + parent: 588 + - uid: 670 + components: + - type: Transform + pos: 27.5,10.5 + parent: 588 + - uid: 671 + components: + - type: Transform + pos: 26.5,10.5 + parent: 588 + - uid: 672 + components: + - type: Transform + pos: 25.5,10.5 + parent: 588 + - uid: 673 + components: + - type: Transform + pos: 24.5,10.5 + parent: 588 + - uid: 674 + components: + - type: Transform + pos: 24.5,9.5 + parent: 588 + - uid: 675 + components: + - type: Transform + pos: 24.5,8.5 + parent: 588 + - uid: 676 + components: + - type: Transform + pos: 24.5,7.5 + parent: 588 + - uid: 677 + components: + - type: Transform + pos: 24.5,6.5 + parent: 588 + - uid: 678 + components: + - type: Transform + pos: 25.5,6.5 + parent: 588 + - uid: 679 + components: + - type: Transform + pos: 26.5,6.5 + parent: 588 + - uid: 680 + components: + - type: Transform + pos: 27.5,6.5 + parent: 588 + - uid: 681 + components: + - type: Transform + pos: 28.5,6.5 + parent: 588 + - uid: 682 + components: + - type: Transform + pos: 29.5,6.5 + parent: 588 + - uid: 683 + components: + - type: Transform + pos: 30.5,6.5 + parent: 588 + - uid: 684 + components: + - type: Transform + pos: 31.5,6.5 + parent: 588 + - uid: 685 + components: + - type: Transform + pos: 32.5,6.5 + parent: 588 + - uid: 686 + components: + - type: Transform + pos: 33.5,6.5 + parent: 588 + - uid: 687 + components: + - type: Transform + pos: 34.5,6.5 + parent: 588 + - uid: 688 + components: + - type: Transform + pos: 34.5,7.5 + parent: 588 + - uid: 689 + components: + - type: Transform + pos: 34.5,8.5 + parent: 588 + - uid: 690 + components: + - type: Transform + pos: 34.5,9.5 + parent: 588 + - uid: 691 + components: + - type: Transform + pos: 34.5,10.5 + parent: 588 + - uid: 692 + components: + - type: Transform + pos: 33.5,10.5 + parent: 588 + - uid: 693 + components: + - type: Transform + pos: 32.5,10.5 + parent: 588 + - uid: 694 + components: + - type: Transform + pos: 31.5,10.5 + parent: 588 + - uid: 695 + components: + - type: Transform + pos: 30.5,10.5 + parent: 588 + - uid: 733 + components: + - type: Transform + pos: 20.5,18.5 + parent: 588 + - uid: 734 + components: + - type: Transform + pos: 20.5,19.5 + parent: 588 + - uid: 735 + components: + - type: Transform + pos: 20.5,20.5 + parent: 588 + - uid: 736 + components: + - type: Transform + pos: 20.5,21.5 + parent: 588 + - uid: 737 + components: + - type: Transform + pos: 20.5,22.5 + parent: 588 + - uid: 738 + components: + - type: Transform + pos: 21.5,20.5 + parent: 588 + - uid: 739 + components: + - type: Transform + pos: 22.5,20.5 + parent: 588 + - uid: 740 + components: + - type: Transform + pos: 19.5,20.5 + parent: 588 + - uid: 741 + components: + - type: Transform + pos: 18.5,20.5 + parent: 588 + - uid: 751 + components: + - type: Transform + pos: 32.5,22.5 + parent: 588 + - uid: 752 + components: + - type: Transform + pos: 32.5,21.5 + parent: 588 + - uid: 753 + components: + - type: Transform + pos: 32.5,20.5 + parent: 588 + - uid: 754 + components: + - type: Transform + pos: 32.5,19.5 + parent: 588 + - uid: 755 + components: + - type: Transform + pos: 32.5,18.5 + parent: 588 + - uid: 756 + components: + - type: Transform + pos: 31.5,20.5 + parent: 588 + - uid: 757 + components: + - type: Transform + pos: 30.5,20.5 + parent: 588 + - uid: 758 + components: + - type: Transform + pos: 33.5,20.5 + parent: 588 + - uid: 759 + components: + - type: Transform + pos: 34.5,20.5 + parent: 588 + - uid: 779 + components: + - type: Transform + pos: 25.5,19.5 + parent: 588 + - uid: 780 + components: + - type: Transform + pos: 25.5,18.5 + parent: 588 + - uid: 781 + components: + - type: Transform + pos: 24.5,18.5 + parent: 588 + - uid: 782 + components: + - type: Transform + pos: 24.5,19.5 + parent: 588 + - uid: 783 + components: + - type: Transform + pos: 24.5,20.5 + parent: 588 + - uid: 784 + components: + - type: Transform + pos: 24.5,21.5 + parent: 588 + - uid: 785 + components: + - type: Transform + pos: 24.5,22.5 + parent: 588 + - uid: 786 + components: + - type: Transform + pos: 25.5,22.5 + parent: 588 + - uid: 787 + components: + - type: Transform + pos: 26.5,22.5 + parent: 588 + - uid: 788 + components: + - type: Transform + pos: 27.5,22.5 + parent: 588 + - uid: 789 + components: + - type: Transform + pos: 28.5,22.5 + parent: 588 + - uid: 790 + components: + - type: Transform + pos: 28.5,21.5 + parent: 588 + - uid: 791 + components: + - type: Transform + pos: 28.5,20.5 + parent: 588 + - uid: 792 + components: + - type: Transform + pos: 28.5,19.5 + parent: 588 + - uid: 793 + components: + - type: Transform + pos: 28.5,18.5 + parent: 588 + - uid: 794 + components: + - type: Transform + pos: 27.5,18.5 + parent: 588 + - uid: 795 + components: + - type: Transform + pos: 26.5,18.5 + parent: 588 + - uid: 815 + components: + - type: Transform + pos: 0.5,25.5 + parent: 588 + - uid: 816 + components: + - type: Transform + pos: 0.5,27.5 + parent: 588 + - uid: 817 + components: + - type: Transform + pos: 0.5,28.5 + parent: 588 + - uid: 818 + components: + - type: Transform + pos: 2.5,28.5 + parent: 588 + - uid: 819 + components: + - type: Transform + pos: 2.5,27.5 + parent: 588 + - uid: 869 + components: + - type: Transform + pos: 5.5,24.5 + parent: 588 + - uid: 870 + components: + - type: Transform + pos: 6.5,24.5 + parent: 588 + - uid: 871 + components: + - type: Transform + pos: 6.5,25.5 + parent: 588 + - uid: 872 + components: + - type: Transform + pos: 6.5,26.5 + parent: 588 + - uid: 873 + components: + - type: Transform + pos: 6.5,27.5 + parent: 588 + - uid: 874 + components: + - type: Transform + pos: 6.5,28.5 + parent: 588 + - uid: 875 + components: + - type: Transform + pos: 5.5,28.5 + parent: 588 + - uid: 876 + components: + - type: Transform + pos: 4.5,28.5 + parent: 588 + - uid: 877 + components: + - type: Transform + pos: 4.5,27.5 + parent: 588 + - uid: 878 + components: + - type: Transform + pos: 4.5,26.5 + parent: 588 + - uid: 912 + components: + - type: Transform + pos: 6.5,10.5 + parent: 588 + - uid: 927 + components: + - type: Transform + pos: 34.5,36.5 + parent: 588 + - uid: 928 + components: + - type: Transform + pos: 32.5,36.5 + parent: 588 + - uid: 996 + components: + - type: Transform + pos: 21.5,32.5 + parent: 588 + - uid: 1079 + components: + - type: Transform + pos: 32.5,35.5 + parent: 588 + - uid: 1080 + components: + - type: Transform + pos: 31.5,35.5 + parent: 588 + - uid: 1081 + components: + - type: Transform + pos: 32.5,34.5 + parent: 588 + - uid: 1082 + components: + - type: Transform + pos: 29.5,34.5 + parent: 588 + - uid: 1083 + components: + - type: Transform + pos: 24.5,35.5 + parent: 588 + - uid: 1084 + components: + - type: Transform + pos: 27.5,35.5 + parent: 588 + - uid: 1085 + components: + - type: Transform + pos: 29.5,35.5 + parent: 588 + - uid: 1086 + components: + - type: Transform + pos: 28.5,35.5 + parent: 588 + - uid: 1089 + components: + - type: Transform + pos: 4.5,36.5 + parent: 588 + - uid: 1090 + components: + - type: Transform + pos: 33.5,34.5 + parent: 588 + - uid: 1091 + components: + - type: Transform + pos: 5.5,35.5 + parent: 588 + - uid: 1092 + components: + - type: Transform + pos: 29.5,36.5 + parent: 588 + - uid: 1093 + components: + - type: Transform + pos: 34.5,34.5 + parent: 588 + - uid: 1094 + components: + - type: Transform + pos: 34.5,35.5 + parent: 588 + - uid: 1095 + components: + - type: Transform + pos: 26.5,35.5 + parent: 588 + - uid: 1096 + components: + - type: Transform + pos: 25.5,35.5 + parent: 588 + - uid: 1097 + components: + - type: Transform + pos: 33.5,36.5 + parent: 588 + - uid: 1098 + components: + - type: Transform + pos: 30.5,35.5 + parent: 588 + - uid: 1117 + components: + - type: Transform + pos: 16.5,26.5 + parent: 588 + - uid: 1121 + components: + - type: Transform + pos: 17.5,26.5 + parent: 588 + - uid: 1122 + components: + - type: Transform + pos: 18.5,26.5 + parent: 588 + - uid: 1123 + components: + - type: Transform + pos: 17.5,27.5 + parent: 588 + - uid: 1124 + components: + - type: Transform + pos: 17.5,28.5 + parent: 588 + - uid: 1125 + components: + - type: Transform + pos: 17.5,24.5 + parent: 588 + - uid: 1126 + components: + - type: Transform + pos: 17.5,25.5 + parent: 588 + - uid: 1127 + components: + - type: Transform + pos: 20.5,26.5 + parent: 588 + - uid: 1128 + components: + - type: Transform + pos: 21.5,26.5 + parent: 588 + - uid: 1129 + components: + - type: Transform + pos: 22.5,26.5 + parent: 588 + - uid: 1130 + components: + - type: Transform + pos: 21.5,27.5 + parent: 588 + - uid: 1131 + components: + - type: Transform + pos: 21.5,28.5 + parent: 588 + - uid: 1132 + components: + - type: Transform + pos: 21.5,25.5 + parent: 588 + - uid: 1133 + components: + - type: Transform + pos: 21.5,24.5 + parent: 588 + - uid: 1134 + components: + - type: Transform + pos: 24.5,26.5 + parent: 588 + - uid: 1135 + components: + - type: Transform + pos: 25.5,26.5 + parent: 588 + - uid: 1136 + components: + - type: Transform + pos: 26.5,26.5 + parent: 588 + - uid: 1137 + components: + - type: Transform + pos: 25.5,27.5 + parent: 588 + - uid: 1138 + components: + - type: Transform + pos: 25.5,28.5 + parent: 588 + - uid: 1139 + components: + - type: Transform + pos: 25.5,25.5 + parent: 588 + - uid: 1140 + components: + - type: Transform + pos: 25.5,24.5 + parent: 588 + - uid: 1170 + components: + - type: Transform + pos: 3.5,36.5 + parent: 588 + - uid: 1171 + components: + - type: Transform + pos: 2.5,36.5 + parent: 588 + - uid: 1172 + components: + - type: Transform + pos: 1.5,36.5 + parent: 588 + - uid: 1173 + components: + - type: Transform + pos: 0.5,36.5 + parent: 588 + - uid: 1174 + components: + - type: Transform + pos: 0.5,35.5 + parent: 588 + - uid: 1175 + components: + - type: Transform + pos: 6.5,34.5 + parent: 588 + - uid: 1176 + components: + - type: Transform + pos: 7.5,34.5 + parent: 588 + - uid: 1177 + components: + - type: Transform + pos: 8.5,34.5 + parent: 588 + - uid: 1178 + components: + - type: Transform + pos: 9.5,34.5 + parent: 588 + - uid: 1179 + components: + - type: Transform + pos: 10.5,34.5 + parent: 588 + - uid: 1268 + components: + - type: Transform + pos: 30.5,26.5 + parent: 588 + - uid: 1269 + components: + - type: Transform + pos: 29.5,27.5 + parent: 588 + - uid: 1270 + components: + - type: Transform + pos: 29.5,28.5 + parent: 588 + - uid: 1271 + components: + - type: Transform + pos: 29.5,25.5 + parent: 588 + - uid: 1272 + components: + - type: Transform + pos: 29.5,24.5 + parent: 588 + - uid: 1273 + components: + - type: Transform + pos: 32.5,26.5 + parent: 588 + - uid: 1274 + components: + - type: Transform + pos: 33.5,26.5 + parent: 588 + - uid: 1275 + components: + - type: Transform + pos: 34.5,26.5 + parent: 588 + - uid: 1276 + components: + - type: Transform + pos: 33.5,27.5 + parent: 588 + - uid: 1277 + components: + - type: Transform + pos: 33.5,28.5 + parent: 588 + - uid: 1278 + components: + - type: Transform + pos: 33.5,25.5 + parent: 588 + - uid: 1279 + components: + - type: Transform + pos: 33.5,24.5 + parent: 588 + - uid: 1306 + components: + - type: Transform + pos: 27.5,40.5 + parent: 588 + - uid: 1307 + components: + - type: Transform + pos: 26.5,40.5 + parent: 588 + - uid: 1308 + components: + - type: Transform + pos: 25.5,40.5 + parent: 588 + - uid: 1309 + components: + - type: Transform + pos: 24.5,40.5 + parent: 588 + - uid: 1310 + components: + - type: Transform + pos: 24.5,39.5 + parent: 588 + - uid: 1311 + components: + - type: Transform + pos: 24.5,38.5 + parent: 588 + - uid: 1312 + components: + - type: Transform + pos: 25.5,38.5 + parent: 588 + - uid: 1313 + components: + - type: Transform + pos: 26.5,38.5 + parent: 588 + - uid: 1314 + components: + - type: Transform + pos: 27.5,38.5 + parent: 588 + - uid: 1315 + components: + - type: Transform + pos: 28.5,38.5 + parent: 588 + - uid: 1316 + components: + - type: Transform + pos: 29.5,38.5 + parent: 588 + - uid: 1317 + components: + - type: Transform + pos: 30.5,38.5 + parent: 588 + - uid: 1318 + components: + - type: Transform + pos: 30.5,39.5 + parent: 588 + - uid: 1426 + components: + - type: Transform + pos: 11.5,42.5 + parent: 588 + - uid: 1427 + components: + - type: Transform + pos: 11.5,43.5 + parent: 588 + - uid: 1428 + components: + - type: Transform + pos: 11.5,44.5 + parent: 588 + - uid: 1429 + components: + - type: Transform + pos: 11.5,45.5 + parent: 588 + - uid: 1430 + components: + - type: Transform + pos: 11.5,46.5 + parent: 588 + - uid: 1431 + components: + - type: Transform + pos: 11.5,47.5 + parent: 588 + - uid: 1432 + components: + - type: Transform + pos: 11.5,48.5 + parent: 588 + - uid: 1433 + components: + - type: Transform + pos: 10.5,45.5 + parent: 588 + - uid: 1434 + components: + - type: Transform + pos: 9.5,45.5 + parent: 588 + - uid: 1435 + components: + - type: Transform + pos: 8.5,45.5 + parent: 588 + - uid: 1436 + components: + - type: Transform + pos: 12.5,45.5 + parent: 588 + - uid: 1437 + components: + - type: Transform + pos: 13.5,45.5 + parent: 588 + - uid: 1438 + components: + - type: Transform + pos: 14.5,45.5 + parent: 588 + - uid: 1439 + components: + - type: Transform + pos: 13.5,46.5 + parent: 588 + - uid: 1440 + components: + - type: Transform + pos: 13.5,47.5 + parent: 588 + - uid: 1441 + components: + - type: Transform + pos: 9.5,46.5 + parent: 588 + - uid: 1442 + components: + - type: Transform + pos: 9.5,47.5 + parent: 588 + - uid: 1443 + components: + - type: Transform + pos: 10.5,43.5 + parent: 588 + - uid: 1444 + components: + - type: Transform + pos: 9.5,43.5 + parent: 588 + - uid: 1445 + components: + - type: Transform + pos: 12.5,43.5 + parent: 588 + - uid: 1446 + components: + - type: Transform + pos: 13.5,43.5 + parent: 588 + - uid: 1447 + components: + - type: Transform + pos: 3.5,42.5 + parent: 588 + - uid: 1448 + components: + - type: Transform + pos: 3.5,43.5 + parent: 588 + - uid: 1449 + components: + - type: Transform + pos: 3.5,44.5 + parent: 588 + - uid: 1450 + components: + - type: Transform + pos: 3.5,45.5 + parent: 588 + - uid: 1451 + components: + - type: Transform + pos: 3.5,46.5 + parent: 588 + - uid: 1452 + components: + - type: Transform + pos: 3.5,47.5 + parent: 588 + - uid: 1453 + components: + - type: Transform + pos: 3.5,48.5 + parent: 588 + - uid: 1454 + components: + - type: Transform + pos: 0.5,45.5 + parent: 588 + - uid: 1455 + components: + - type: Transform + pos: 1.5,45.5 + parent: 588 + - uid: 1456 + components: + - type: Transform + pos: 2.5,45.5 + parent: 588 + - uid: 1457 + components: + - type: Transform + pos: 3.5,45.5 + parent: 588 + - uid: 1458 + components: + - type: Transform + pos: 4.5,45.5 + parent: 588 + - uid: 1459 + components: + - type: Transform + pos: 5.5,45.5 + parent: 588 + - uid: 1460 + components: + - type: Transform + pos: 6.5,45.5 + parent: 588 + - uid: 1529 + components: + - type: Transform + pos: 19.5,47.5 + parent: 588 + - uid: 1530 + components: + - type: Transform + pos: 19.5,48.5 + parent: 588 + - uid: 1531 + components: + - type: Transform + pos: 18.5,48.5 + parent: 588 + - uid: 1532 + components: + - type: Transform + pos: 17.5,48.5 + parent: 588 + - uid: 1533 + components: + - type: Transform + pos: 16.5,48.5 + parent: 588 + - uid: 1534 + components: + - type: Transform + pos: 16.5,47.5 + parent: 588 + - uid: 1535 + components: + - type: Transform + pos: 16.5,46.5 + parent: 588 + - uid: 1536 + components: + - type: Transform + pos: 16.5,45.5 + parent: 588 + - uid: 1537 + components: + - type: Transform + pos: 16.5,44.5 + parent: 588 + - uid: 1538 + components: + - type: Transform + pos: 16.5,43.5 + parent: 588 + - uid: 1539 + components: + - type: Transform + pos: 16.5,42.5 + parent: 588 + - uid: 1540 + components: + - type: Transform + pos: 17.5,42.5 + parent: 588 + - uid: 1541 + components: + - type: Transform + pos: 18.5,42.5 + parent: 588 + - uid: 1542 + components: + - type: Transform + pos: 19.5,42.5 + parent: 588 + - uid: 1543 + components: + - type: Transform + pos: 20.5,42.5 + parent: 588 + - uid: 1544 + components: + - type: Transform + pos: 21.5,42.5 + parent: 588 + - uid: 1545 + components: + - type: Transform + pos: 22.5,42.5 + parent: 588 + - uid: 1546 + components: + - type: Transform + pos: 22.5,43.5 + parent: 588 + - uid: 1547 + components: + - type: Transform + pos: 22.5,44.5 + parent: 588 + - uid: 1548 + components: + - type: Transform + pos: 22.5,45.5 + parent: 588 + - uid: 1549 + components: + - type: Transform + pos: 22.5,46.5 + parent: 588 + - uid: 1550 + components: + - type: Transform + pos: 22.5,47.5 + parent: 588 + - uid: 1551 + components: + - type: Transform + pos: 22.5,48.5 + parent: 588 + - uid: 1552 + components: + - type: Transform + pos: 21.5,48.5 + parent: 588 + - uid: 1553 + components: + - type: Transform + pos: 20.5,48.5 + parent: 588 + - uid: 1554 + components: + - type: Transform + pos: 19.5,43.5 + parent: 588 + - uid: 1555 + components: + - type: Transform + pos: 19.5,44.5 + parent: 588 + - uid: 1556 + components: + - type: Transform + pos: 19.5,45.5 + parent: 588 + - uid: 1557 + components: + - type: Transform + pos: 19.5,46.5 + parent: 588 + - uid: 1807 + components: + - type: Transform + pos: 27.5,42.5 + parent: 588 + - uid: 1808 + components: + - type: Transform + pos: 27.5,43.5 + parent: 588 + - uid: 1809 + components: + - type: Transform + pos: 27.5,44.5 + parent: 588 + - uid: 1810 + components: + - type: Transform + pos: 27.5,45.5 + parent: 588 + - uid: 1811 + components: + - type: Transform + pos: 27.5,46.5 + parent: 588 + - uid: 1812 + components: + - type: Transform + pos: 27.5,47.5 + parent: 588 + - uid: 1813 + components: + - type: Transform + pos: 27.5,48.5 + parent: 588 + - uid: 1814 + components: + - type: Transform + pos: 28.5,45.5 + parent: 588 + - uid: 1815 + components: + - type: Transform + pos: 29.5,45.5 + parent: 588 + - uid: 1816 + components: + - type: Transform + pos: 30.5,45.5 + parent: 588 + - uid: 1817 + components: + - type: Transform + pos: 26.5,45.5 + parent: 588 + - uid: 1818 + components: + - type: Transform + pos: 25.5,45.5 + parent: 588 + - uid: 1819 + components: + - type: Transform + pos: 24.5,45.5 + parent: 588 + - uid: 1820 + components: + - type: Transform + pos: 26.5,47.5 + parent: 588 + - uid: 1821 + components: + - type: Transform + pos: 25.5,47.5 + parent: 588 + - uid: 1822 + components: + - type: Transform + pos: 28.5,47.5 + parent: 588 + - uid: 1823 + components: + - type: Transform + pos: 29.5,47.5 + parent: 588 + - uid: 1824 + components: + - type: Transform + pos: 26.5,43.5 + parent: 588 + - uid: 1825 + components: + - type: Transform + pos: 25.5,43.5 + parent: 588 + - uid: 1826 + components: + - type: Transform + pos: 28.5,43.5 + parent: 588 + - uid: 1827 + components: + - type: Transform + pos: 29.5,43.5 + parent: 588 +- proto: CableApcStack1 + entities: + - uid: 655 + components: + - type: Transform + pos: 16.273203,19.650417 + parent: 588 +- proto: CableHV + entities: + - uid: 462 + components: + - type: Transform + pos: 27.5,13.5 + parent: 588 + - uid: 466 + components: + - type: Transform + pos: 26.5,13.5 + parent: 588 + - uid: 468 + components: + - type: Transform + pos: 28.5,13.5 + parent: 588 + - uid: 485 + components: + - type: Transform + pos: 26.5,15.5 + parent: 588 + - uid: 486 + components: + - type: Transform + pos: 26.5,14.5 + parent: 588 + - uid: 487 + components: + - type: Transform + pos: 27.5,14.5 + parent: 588 + - uid: 488 + components: + - type: Transform + pos: 28.5,14.5 + parent: 588 + - uid: 489 + components: + - type: Transform + pos: 28.5,15.5 + parent: 588 + - uid: 743 + components: + - type: Transform + pos: 26.5,21.5 + parent: 588 + - uid: 744 + components: + - type: Transform + pos: 27.5,21.5 + parent: 588 + - uid: 745 + components: + - type: Transform + pos: 26.5,20.5 + parent: 588 + - uid: 746 + components: + - type: Transform + pos: 25.5,21.5 + parent: 588 + - uid: 768 + components: + - type: Transform + pos: 26.5,19.5 + parent: 588 + - uid: 778 + components: + - type: Transform + pos: 27.5,19.5 + parent: 588 + - uid: 978 + components: + - type: Transform + pos: 16.5,32.5 + parent: 588 + - uid: 979 + components: + - type: Transform + pos: 15.5,31.5 + parent: 588 + - uid: 980 + components: + - type: Transform + pos: 16.5,31.5 + parent: 588 + - uid: 981 + components: + - type: Transform + pos: 17.5,31.5 + parent: 588 + - uid: 982 + components: + - type: Transform + pos: 18.5,31.5 + parent: 588 + - uid: 983 + components: + - type: Transform + pos: 22.5,31.5 + parent: 588 + - uid: 984 + components: + - type: Transform + pos: 23.5,31.5 + parent: 588 + - uid: 985 + components: + - type: Transform + pos: 24.5,31.5 + parent: 588 + - uid: 986 + components: + - type: Transform + pos: 24.5,32.5 + parent: 588 + - uid: 987 + components: + - type: Transform + pos: 25.5,31.5 + parent: 588 + - uid: 989 + components: + - type: Transform + pos: 18.5,32.5 + parent: 588 + - uid: 990 + components: + - type: Transform + pos: 19.5,32.5 + parent: 588 + - uid: 991 + components: + - type: Transform + pos: 20.5,32.5 + parent: 588 + - uid: 992 + components: + - type: Transform + pos: 21.5,32.5 + parent: 588 + - uid: 993 + components: + - type: Transform + pos: 22.5,32.5 + parent: 588 + - uid: 1003 + components: + - type: Transform + pos: 16.5,30.5 + parent: 588 + - uid: 1004 + components: + - type: Transform + pos: 24.5,30.5 + parent: 588 + - uid: 1510 + components: + - type: Transform + pos: 18.5,44.5 + parent: 588 + - uid: 1511 + components: + - type: Transform + pos: 18.5,45.5 + parent: 588 + - uid: 1512 + components: + - type: Transform + pos: 20.5,45.5 + parent: 588 + - uid: 1513 + components: + - type: Transform + pos: 20.5,44.5 + parent: 588 + - uid: 1514 + components: + - type: Transform + pos: 19.5,44.5 + parent: 588 + - uid: 1522 + components: + - type: Transform + pos: 17.5,46.5 + parent: 588 + - uid: 1523 + components: + - type: Transform + pos: 21.5,46.5 + parent: 588 + - uid: 1524 + components: + - type: Transform + pos: 20.5,46.5 + parent: 588 + - uid: 1525 + components: + - type: Transform + pos: 18.5,46.5 + parent: 588 + - uid: 1526 + components: + - type: Transform + pos: 19.5,46.5 + parent: 588 +- proto: CableMV + entities: + - uid: 490 + components: + - type: Transform + pos: 27.5,13.5 + parent: 588 + - uid: 491 + components: + - type: Transform + pos: 26.5,13.5 + parent: 588 + - uid: 492 + components: + - type: Transform + pos: 25.5,13.5 + parent: 588 + - uid: 775 + components: + - type: Transform + pos: 27.5,19.5 + parent: 588 + - uid: 776 + components: + - type: Transform + pos: 26.5,19.5 + parent: 588 + - uid: 777 + components: + - type: Transform + pos: 25.5,19.5 + parent: 588 + - uid: 1527 + components: + - type: Transform + pos: 19.5,46.5 + parent: 588 + - uid: 1528 + components: + - type: Transform + pos: 19.5,47.5 + parent: 588 +- proto: CableTerminal + entities: + - uid: 463 + components: + - type: Transform + pos: 26.5,14.5 + parent: 588 + - uid: 464 + components: + - type: Transform + pos: 27.5,14.5 + parent: 588 + - uid: 465 + components: + - type: Transform + pos: 28.5,14.5 + parent: 588 + - uid: 767 + components: + - type: Transform + pos: 26.5,20.5 + parent: 588 + - uid: 970 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 18.5,31.5 + parent: 588 + - uid: 976 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 22.5,31.5 + parent: 588 + - uid: 1558 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 18.5,45.5 + parent: 588 + - uid: 1559 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,45.5 + parent: 588 +- proto: Carpet + entities: + - uid: 1632 + components: + - type: Transform + pos: 24.5,0.5 + parent: 588 + - uid: 1633 + components: + - type: Transform + pos: 25.5,0.5 + parent: 588 + - uid: 1634 + components: + - type: Transform + pos: 25.5,1.5 + parent: 588 + - uid: 1635 + components: + - type: Transform + pos: 24.5,1.5 + parent: 588 +- proto: CarpetBlue + entities: + - uid: 1636 + components: + - type: Transform + pos: 27.5,0.5 + parent: 588 + - uid: 1637 + components: + - type: Transform + pos: 28.5,1.5 + parent: 588 + - uid: 1638 + components: + - type: Transform + pos: 27.5,1.5 + parent: 588 + - uid: 1639 + components: + - type: Transform + pos: 28.5,0.5 + parent: 588 +- proto: CarpetPurple + entities: + - uid: 1626 + components: + - type: Transform + pos: 25.5,4.5 + parent: 588 + - uid: 1627 + components: + - type: Transform + pos: 25.5,3.5 + parent: 588 + - uid: 1628 + components: + - type: Transform + pos: 26.5,3.5 + parent: 588 + - uid: 1629 + components: + - type: Transform + pos: 27.5,3.5 + parent: 588 + - uid: 1630 + components: + - type: Transform + pos: 27.5,4.5 + parent: 588 + - uid: 1631 + components: + - type: Transform + pos: 26.5,4.5 + parent: 588 +- proto: Catwalk + entities: + - uid: 141 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,24.5 + parent: 588 + - uid: 142 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,26.5 + parent: 588 + - uid: 143 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,25.5 + parent: 588 + - uid: 248 + components: + - type: Transform + pos: 8.5,4.5 + parent: 588 + - uid: 249 + components: + - type: Transform + pos: 8.5,2.5 + parent: 588 + - uid: 250 + components: + - type: Transform + pos: 8.5,3.5 + parent: 588 + - uid: 251 + components: + - type: Transform + pos: 8.5,1.5 + parent: 588 + - uid: 471 + components: + - type: Transform + pos: 27.5,14.5 + parent: 588 + - uid: 473 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 29.5,12.5 + parent: 588 + - uid: 474 + components: + - type: Transform + pos: 28.5,14.5 + parent: 588 + - uid: 475 + components: + - type: Transform + pos: 26.5,14.5 + parent: 588 + - uid: 512 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,12.5 + parent: 588 + - uid: 513 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,12.5 + parent: 588 + - uid: 515 + components: + - type: Transform + pos: 25.5,16.5 + parent: 588 + - uid: 516 + components: + - type: Transform + pos: 26.5,16.5 + parent: 588 + - uid: 517 + components: + - type: Transform + pos: 27.5,16.5 + parent: 588 + - uid: 518 + components: + - type: Transform + pos: 28.5,16.5 + parent: 588 + - uid: 519 + components: + - type: Transform + pos: 29.5,16.5 + parent: 588 + - uid: 520 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,12.5 + parent: 588 + - uid: 521 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,12.5 + parent: 588 + - uid: 769 + components: + - type: Transform + pos: 26.5,20.5 + parent: 588 + - uid: 832 + components: + - type: Transform + pos: 3.5,31.5 + parent: 588 + - uid: 833 + components: + - type: Transform + pos: 4.5,31.5 + parent: 588 + - uid: 834 + components: + - type: Transform + pos: 5.5,31.5 + parent: 588 + - uid: 835 + components: + - type: Transform + pos: 6.5,31.5 + parent: 588 + - uid: 836 + components: + - type: Transform + pos: 7.5,31.5 + parent: 588 + - uid: 837 + components: + - type: Transform + pos: 8.5,31.5 + parent: 588 + - uid: 838 + components: + - type: Transform + pos: 9.5,31.5 + parent: 588 + - uid: 839 + components: + - type: Transform + pos: 6.5,32.5 + parent: 588 + - uid: 840 + components: + - type: Transform + pos: 6.5,30.5 + parent: 588 + - uid: 841 + components: + - type: Transform + pos: 5.5,32.5 + parent: 588 + - uid: 842 + components: + - type: Transform + pos: 7.5,32.5 + parent: 588 + - uid: 843 + components: + - type: Transform + pos: 5.5,30.5 + parent: 588 + - uid: 844 + components: + - type: Transform + pos: 7.5,30.5 + parent: 588 + - uid: 861 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,27.5 + parent: 588 + - uid: 862 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,28.5 + parent: 588 + - uid: 863 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,28.5 + parent: 588 + - uid: 864 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,27.5 + parent: 588 + - uid: 865 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,26.5 + parent: 588 + - uid: 879 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,40.5 + parent: 588 + - uid: 880 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,39.5 + parent: 588 + - uid: 881 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,39.5 + parent: 588 + - uid: 882 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,39.5 + parent: 588 + - uid: 883 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,39.5 + parent: 588 + - uid: 884 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,39.5 + parent: 588 + - uid: 885 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,38.5 + parent: 588 + - uid: 914 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,10.5 + parent: 588 + - uid: 915 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,10.5 + parent: 588 + - uid: 916 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,10.5 + parent: 588 + - uid: 917 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,10.5 + parent: 588 + - uid: 918 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,10.5 + parent: 588 + - uid: 919 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,6.5 + parent: 588 + - uid: 920 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,6.5 + parent: 588 + - uid: 921 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,6.5 + parent: 588 + - uid: 922 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,6.5 + parent: 588 + - uid: 923 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,6.5 + parent: 588 + - uid: 955 + components: + - type: Transform + pos: 15.5,31.5 + parent: 588 + - uid: 956 + components: + - type: Transform + pos: 16.5,31.5 + parent: 588 + - uid: 957 + components: + - type: Transform + pos: 17.5,31.5 + parent: 588 + - uid: 958 + components: + - type: Transform + pos: 18.5,31.5 + parent: 588 + - uid: 959 + components: + - type: Transform + pos: 19.5,31.5 + parent: 588 + - uid: 960 + components: + - type: Transform + pos: 20.5,31.5 + parent: 588 + - uid: 961 + components: + - type: Transform + pos: 21.5,31.5 + parent: 588 + - uid: 962 + components: + - type: Transform + pos: 22.5,31.5 + parent: 588 + - uid: 963 + components: + - type: Transform + pos: 23.5,31.5 + parent: 588 + - uid: 964 + components: + - type: Transform + pos: 24.5,31.5 + parent: 588 + - uid: 965 + components: + - type: Transform + pos: 25.5,31.5 + parent: 588 + - uid: 994 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,32.5 + parent: 588 + - uid: 1158 + components: + - type: Transform + pos: 8.5,0.5 + parent: 588 + - uid: 1180 + components: + - type: Transform + pos: 1.5,36.5 + parent: 588 + - uid: 1181 + components: + - type: Transform + pos: 2.5,36.5 + parent: 588 + - uid: 1182 + components: + - type: Transform + pos: 3.5,36.5 + parent: 588 + - uid: 1183 + components: + - type: Transform + pos: 4.5,36.5 + parent: 588 + - uid: 1184 + components: + - type: Transform + pos: 5.5,36.5 + parent: 588 + - uid: 1185 + components: + - type: Transform + pos: 5.5,34.5 + parent: 588 + - uid: 1186 + components: + - type: Transform + pos: 6.5,34.5 + parent: 588 + - uid: 1187 + components: + - type: Transform + pos: 7.5,34.5 + parent: 588 + - uid: 1188 + components: + - type: Transform + pos: 8.5,34.5 + parent: 588 + - uid: 1189 + components: + - type: Transform + pos: 9.5,34.5 + parent: 588 + - uid: 1320 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,40.5 + parent: 588 + - uid: 1321 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,40.5 + parent: 588 + - uid: 1322 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,40.5 + parent: 588 + - uid: 1323 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,38.5 + parent: 588 + - uid: 1324 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,38.5 + parent: 588 + - uid: 1325 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,38.5 + parent: 588 + - uid: 1326 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,38.5 + parent: 588 + - uid: 1327 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 29.5,38.5 + parent: 588 + - uid: 1331 + components: + - type: Transform + pos: 4.5,45.5 + parent: 588 + - uid: 1336 + components: + - type: Transform + pos: 2.5,45.5 + parent: 588 + - uid: 1339 + components: + - type: Transform + pos: 3.5,45.5 + parent: 588 + - uid: 1342 + components: + - type: Transform + pos: 3.5,46.5 + parent: 588 + - uid: 1344 + components: + - type: Transform + pos: 3.5,44.5 + parent: 588 + - uid: 1346 + components: + - type: Transform + pos: 2.5,44.5 + parent: 588 + - uid: 1347 + components: + - type: Transform + pos: 4.5,44.5 + parent: 588 + - uid: 1348 + components: + - type: Transform + pos: 4.5,44.5 + parent: 588 + - uid: 1349 + components: + - type: Transform + pos: 4.5,46.5 + parent: 588 + - uid: 1350 + components: + - type: Transform + pos: 2.5,46.5 + parent: 588 + - uid: 1494 + components: + - type: Transform + pos: 17.5,42.5 + parent: 588 + - uid: 1495 + components: + - type: Transform + pos: 18.5,42.5 + parent: 588 + - uid: 1496 + components: + - type: Transform + pos: 19.5,42.5 + parent: 588 + - uid: 1497 + components: + - type: Transform + pos: 20.5,42.5 + parent: 588 + - uid: 1498 + components: + - type: Transform + pos: 21.5,42.5 + parent: 588 + - uid: 1499 + components: + - type: Transform + pos: 17.5,48.5 + parent: 588 + - uid: 1500 + components: + - type: Transform + pos: 18.5,48.5 + parent: 588 + - uid: 1501 + components: + - type: Transform + pos: 19.5,48.5 + parent: 588 + - uid: 1502 + components: + - type: Transform + pos: 20.5,48.5 + parent: 588 + - uid: 1503 + components: + - type: Transform + pos: 21.5,48.5 + parent: 588 + - uid: 1516 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,44.5 + parent: 588 + - uid: 1517 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,45.5 + parent: 588 + - uid: 1518 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 18.5,45.5 + parent: 588 + - uid: 1519 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,45.5 + parent: 588 + - uid: 1582 + components: + - type: Transform + pos: 28.5,22.5 + parent: 588 + - uid: 1583 + components: + - type: Transform + pos: 28.5,21.5 + parent: 588 + - uid: 1584 + components: + - type: Transform + pos: 28.5,20.5 + parent: 588 + - uid: 1585 + components: + - type: Transform + pos: 28.5,19.5 + parent: 588 + - uid: 1586 + components: + - type: Transform + pos: 28.5,18.5 + parent: 588 + - uid: 1587 + components: + - type: Transform + pos: 24.5,22.5 + parent: 588 + - uid: 1588 + components: + - type: Transform + pos: 24.5,21.5 + parent: 588 + - uid: 1589 + components: + - type: Transform + pos: 24.5,20.5 + parent: 588 + - uid: 1590 + components: + - type: Transform + pos: 24.5,19.5 + parent: 588 + - uid: 1591 + components: + - type: Transform + pos: 24.5,18.5 + parent: 588 +- proto: Cautery + entities: + - uid: 1474 + components: + - type: Transform + pos: 8.533231,42.775993 + parent: 588 +- proto: Chair + entities: + - uid: 357 + components: + - type: Transform + pos: 23.5,4.5 + parent: 588 + - uid: 421 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,9.5 + parent: 588 + - uid: 422 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 20.5,9.5 + parent: 588 + - uid: 423 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 20.5,7.5 + parent: 588 + - uid: 533 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,14.5 + parent: 588 + - uid: 534 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,15.5 + parent: 588 + - uid: 537 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,14.5 + parent: 588 + - uid: 569 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,13.5 + parent: 588 + - uid: 716 + components: + - type: Transform + pos: 18.5,19.5 + parent: 588 + - uid: 717 + components: + - type: Transform + pos: 19.5,19.5 + parent: 588 + - uid: 718 + components: + - type: Transform + pos: 22.5,19.5 + parent: 588 + - uid: 719 + components: + - type: Transform + pos: 21.5,19.5 + parent: 588 + - uid: 1280 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 17.5,38.5 + parent: 588 + - uid: 1281 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 18.5,38.5 + parent: 588 + - uid: 1282 + components: + - type: Transform + pos: 20.5,40.5 + parent: 588 + - uid: 1283 + components: + - type: Transform + pos: 21.5,40.5 + parent: 588 + - uid: 1865 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,7.5 + parent: 588 +- proto: ChairFolding + entities: + - uid: 344 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,0.5 + parent: 588 + - uid: 345 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,1.5 + parent: 588 + - uid: 346 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,0.5 + parent: 588 + - uid: 347 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,3.5 + parent: 588 + - uid: 348 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,3.5 + parent: 588 + - uid: 349 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,4.5 + parent: 588 + - uid: 350 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,1.5 + parent: 588 + - uid: 351 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,0.5 + parent: 588 + - uid: 352 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,4.5 + parent: 588 + - uid: 353 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,4.5 + parent: 588 + - uid: 1212 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,36.5 + parent: 588 +- proto: ChairFoldingSpawnFolded + entities: + - uid: 354 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.53707,1.6455604 + parent: 588 + - uid: 355 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.595894,3.4052575 + parent: 588 +- proto: ChairOfficeDark + entities: + - uid: 330 + components: + - type: Transform + pos: 19.5,1.5 + parent: 588 + - uid: 331 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,3.5 + parent: 588 + - uid: 358 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,0.5 + parent: 588 + - uid: 359 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,0.5 + parent: 588 + - uid: 360 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,0.5 + parent: 588 + - uid: 361 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,0.5 + parent: 588 + - uid: 571 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 13.5,12.5 + parent: 588 +- proto: ChairOfficeLight + entities: + - uid: 631 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,19.5 + parent: 588 + - uid: 638 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,21.5 + parent: 588 + - uid: 707 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.5,21.5 + parent: 588 +- proto: ChairPilotSeat + entities: + - uid: 356 + components: + - type: Transform + pos: 26.5,4.5 + parent: 588 +- proto: ChairWood + entities: + - uid: 1049 + components: + - type: Transform + pos: 20.5,25.5 + parent: 588 + - uid: 1050 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 22.5,27.5 + parent: 588 + - uid: 1231 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,34.5 + parent: 588 + - uid: 1232 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 13.5,36.5 + parent: 588 + - uid: 1790 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,46.5 + parent: 588 + - uid: 1791 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,44.5 + parent: 588 +- proto: CigarGold + entities: + - uid: 1219 + components: + - type: Transform + pos: 7.4719925,36.539555 + parent: 588 +- proto: ClosetBombFilled + entities: + - uid: 413 + components: + - type: Transform + pos: 14.5,6.5 + parent: 588 + - uid: 1014 + components: + - type: Transform + pos: 12.5,27.5 + parent: 588 + - uid: 1026 + components: + - type: Transform + pos: 16.5,27.5 + parent: 588 +- proto: ClosetEmergencyFilledRandom + entities: + - uid: 1203 + components: + - type: Transform + pos: 12.5,30.5 + parent: 588 + - uid: 1204 + components: + - type: Transform + pos: 0.5,32.5 + parent: 588 + - uid: 1205 + components: + - type: Transform + pos: 9.5,9.5 + parent: 588 + - uid: 1207 + components: + - type: Transform + pos: 1.5,7.5 + parent: 588 +- proto: ClosetFireFilled + entities: + - uid: 1194 + components: + - type: Transform + pos: 1.5,9.5 + parent: 588 + - uid: 1195 + components: + - type: Transform + pos: 9.5,7.5 + parent: 588 + - uid: 1196 + components: + - type: Transform + pos: 6.5,40.5 + parent: 588 + - uid: 1197 + components: + - type: Transform + pos: 0.5,38.5 + parent: 588 +- proto: ClosetL3SecurityFilled + entities: + - uid: 415 + components: + - type: Transform + pos: 20.5,10.5 + parent: 588 +- proto: ClosetToolFilled + entities: + - uid: 1007 + components: + - type: Transform + pos: 14.5,30.5 + parent: 588 +- proto: ClosetWallMaintenanceFilledRandom + entities: + - uid: 499 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,15.5 + parent: 588 + - uid: 868 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,27.5 + parent: 588 + - uid: 1564 + components: + - type: Transform + pos: 17.5,43.5 + parent: 588 + - uid: 1565 + components: + - type: Transform + pos: 21.5,43.5 + parent: 588 +- proto: ClothingBeltChampion + entities: + - uid: 1236 + components: + - type: Transform + pos: 10.581136,39.53631 + parent: 588 +- proto: ClothingEyesGlassesMeson + entities: + - uid: 1108 + components: + - type: Transform + pos: 25.666832,30.643515 + parent: 588 +- proto: ClothingHandsGlovesNitrile + entities: + - uid: 1715 + components: + - type: Transform + pos: 10.432637,44.476112 + parent: 588 +- proto: ClothingHeadBandRed + entities: + - uid: 1295 + components: + - type: Transform + pos: 12.571781,39.694115 + parent: 588 +- proto: ClothingHeadHatFedoraBrown + entities: + - uid: 577 + components: + - type: Transform + pos: 12.686508,13.58602 + parent: 588 +- proto: ClothingHeadHatPwig + entities: + - uid: 369 + components: + - type: Transform + pos: 25.824945,3.5783403 + parent: 588 +- proto: ClothingHeadHatSecsoftFlipped + entities: + - uid: 606 + components: + - type: Transform + pos: 12.705482,6.671774 + parent: 588 + - uid: 1027 + components: + - type: Transform + pos: 18.403675,25.53719 + parent: 588 +- proto: ClothingHeadHatSurgcapPurple + entities: + - uid: 1711 + components: + - type: Transform + pos: 10.304593,44.632217 + parent: 588 +- proto: ClothingHeadHelmetRiot + entities: + - uid: 1617 + components: + - type: Transform + pos: 22.499683,6.7142525 + parent: 588 +- proto: ClothingHeadHelmetThunderdome + entities: + - uid: 1240 + components: + - type: Transform + pos: 34.666565,24.66942 + parent: 588 +- proto: ClothingNeckLawyerbadge + entities: + - uid: 326 + components: + - type: Transform + pos: 21.586027,4.583762 + parent: 588 +- proto: ClothingNeckTieDet + entities: + - uid: 573 + components: + - type: Transform + pos: 12.714905,13.486683 + parent: 588 +- proto: ClothingOuterArmorReflective + entities: + - uid: 1031 + components: + - type: Transform + pos: 18.47467,24.458666 + parent: 588 +- proto: ClothingOuterCoatDetectiveLoadout + entities: + - uid: 574 + components: + - type: Transform + pos: 13.396446,12.479115 + parent: 588 +- proto: ClothingOuterRobesJudge + entities: + - uid: 370 + components: + - type: Transform + pos: 27.40101,3.677678 + parent: 588 +- proto: ClothingShoesBootsCombatFilled + entities: + - uid: 1036 + components: + - type: Transform + pos: 12.582174,25.636528 + parent: 588 +- proto: ClothingShoesBootsLaceup + entities: + - uid: 372 + components: + - type: Transform + pos: 18.586912,0.70824456 + parent: 588 +- proto: ClothingUniformJumpskirtColorMaroon + entities: + - uid: 1714 + components: + - type: Transform + pos: 10.673761,44.53288 + parent: 588 +- proto: ClothingUniformJumpsuitColorMaroon + entities: + - uid: 1713 + components: + - type: Transform + pos: 10.645364,44.67479 + parent: 588 +- proto: ClusterBangFull + entities: + - uid: 599 + components: + - type: Transform + pos: 33.484257,28.42918 + parent: 588 +- proto: ComputerAlert + entities: + - uid: 999 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 17.5,30.5 + parent: 588 + - uid: 1001 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 23.5,30.5 + parent: 588 + - uid: 1561 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,46.5 + parent: 588 +- proto: computerBodyScanner + entities: + - uid: 1394 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,44.5 + parent: 588 + - uid: 1423 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,44.5 + parent: 588 +- proto: ComputerCriminalRecords + entities: + - uid: 461 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,0.5 + parent: 588 + - uid: 634 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,18.5 + parent: 588 +- proto: ComputerPowerMonitoring + entities: + - uid: 1000 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 16.5,30.5 + parent: 588 + - uid: 1002 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,30.5 + parent: 588 + - uid: 1560 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 17.5,46.5 + parent: 588 +- proto: ComputerSurveillanceCameraMonitor + entities: + - uid: 635 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,21.5 + parent: 588 +- proto: ComputerTelevision + entities: + - uid: 1229 + components: + - type: Transform + pos: 12.5,34.5 + parent: 588 + - uid: 1230 + components: + - type: Transform + pos: 22.5,36.5 + parent: 588 +- proto: CrateEngineeringGear + entities: + - uid: 1008 + components: + - type: Transform + pos: 26.5,30.5 + parent: 588 +- proto: CrateFunBoardGames + entities: + - uid: 1845 + components: + - type: Transform + pos: 26.5,48.5 + parent: 588 +- proto: CrateFunParty + entities: + - uid: 1876 + components: + - type: Transform + pos: 25.5,43.5 + parent: 588 +- proto: CrateHydroponicsSeedsExotic + entities: + - uid: 1660 + components: + - type: Transform + pos: 31.5,22.5 + parent: 588 +- proto: CrayonBox + entities: + - uid: 1057 + components: + - type: Transform + pos: 20.47107,24.608877 + parent: 588 + - uid: 1116 + components: + - type: Transform + pos: 20.607256,14.646415 + parent: 588 +- proto: CryoPod + entities: + - uid: 1395 + components: + - type: Transform + pos: 8.5,47.5 + parent: 588 + - uid: 1397 + components: + - type: Transform + pos: 14.5,47.5 + parent: 588 +- proto: DebugSMES + entities: + - uid: 971 + components: + - type: Transform + pos: 22.5,32.5 + parent: 588 + - uid: 974 + components: + - type: Transform + pos: 18.5,32.5 + parent: 588 +- proto: DeployableBarrier + entities: + - uid: 1233 + components: + - type: Transform + pos: 32.5,24.5 + parent: 588 +- proto: DiceBag + entities: + - uid: 552 + components: + - type: Transform + pos: 20.294882,15.426926 + parent: 588 +- proto: DiseaseDiagnoser + entities: + - uid: 1424 + components: + - type: Transform + pos: 14.5,44.5 + parent: 588 +- proto: DisposalUnit + entities: + - uid: 550 + components: + - type: Transform + pos: 22.5,16.5 + parent: 588 + - uid: 725 + components: + - type: Transform + pos: 21.5,22.5 + parent: 588 + - uid: 766 + components: + - type: Transform + pos: 9.5,22.5 + parent: 588 + - uid: 1288 + components: + - type: Transform + pos: 22.5,38.5 + parent: 588 +- proto: DonkpocketBoxSpawner + entities: + - uid: 526 + components: + - type: Transform + pos: 16.5,13.5 + parent: 588 + - uid: 723 + components: + - type: Transform + pos: 18.5,21.5 + parent: 588 +- proto: DoorElectronics + entities: + - uid: 659 + components: + - type: Transform + pos: 12.581519,21.410114 + parent: 588 + - uid: 1074 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.639427,25.54549 + parent: 588 +- proto: Dresser + entities: + - uid: 1051 + components: + - type: Transform + pos: 22.5,25.5 + parent: 588 + - uid: 1052 + components: + - type: Transform + pos: 20.5,27.5 + parent: 588 + - uid: 1061 + components: + - type: Transform + pos: 24.5,25.5 + parent: 588 + - uid: 1221 + components: + - type: Transform + pos: 21.5,36.5 + parent: 588 + - uid: 1222 + components: + - type: Transform + pos: 13.5,34.5 + parent: 588 +- proto: DrinkDetFlask + entities: + - uid: 1577 + components: + - type: Transform + pos: 12.606661,13.037249 + parent: 588 +- proto: DrinkMugMetal + entities: + - uid: 1294 + components: + - type: Transform + pos: 22.442232,12.514399 + parent: 588 +- proto: DrinkMugRed + entities: + - uid: 721 + components: + - type: Transform + pos: 22.448559,18.561966 + parent: 588 + - uid: 1293 + components: + - type: Transform + pos: 22.328642,12.741456 + parent: 588 +- proto: DrinkShinyFlask + entities: + - uid: 1874 + components: + - type: Transform + pos: 6.890398,22.663696 + parent: 588 +- proto: DrinkShotGlass + entities: + - uid: 578 + components: + - type: Transform + pos: 12.412022,12.535878 + parent: 588 + - uid: 579 + components: + - type: Transform + pos: 12.539811,12.748745 + parent: 588 +- proto: DrinkWaterCup + entities: + - uid: 722 + components: + - type: Transform + pos: 18.373508,18.661304 + parent: 588 + - uid: 762 + components: + - type: Transform + pos: 6.313587,19.590261 + parent: 588 + - uid: 763 + components: + - type: Transform + pos: 6.441377,19.419968 + parent: 588 +- proto: EmergencyLight + entities: + - uid: 1716 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,6.5 + parent: 588 + - type: PointLight + enabled: True + - uid: 1717 + components: + - type: Transform + pos: 21.5,10.5 + parent: 588 + - type: PointLight + enabled: True + - uid: 1718 + components: + - type: Transform + pos: 30.5,4.5 + parent: 588 + - type: PointLight + enabled: True + - uid: 1719 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,0.5 + parent: 588 + - type: PointLight + enabled: True + - uid: 1720 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,0.5 + parent: 588 + - type: PointLight + enabled: True + - uid: 1721 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,12.5 + parent: 588 + - type: PointLight + enabled: True + - uid: 1722 + components: + - type: Transform + pos: 18.5,16.5 + parent: 588 + - type: PointLight + enabled: True + - uid: 1723 + components: + - type: Transform + pos: 31.5,22.5 + parent: 588 + - type: PointLight + enabled: True + - uid: 1724 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,25.5 + parent: 588 + - type: PointLight + enabled: True + - uid: 1726 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,25.5 + parent: 588 + - type: PointLight + enabled: True + - uid: 1727 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,27.5 + parent: 588 + - type: PointLight + enabled: True + - uid: 1728 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 20.5,27.5 + parent: 588 + - type: PointLight + enabled: True + - uid: 1729 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,27.5 + parent: 588 + - type: PointLight + enabled: True + - uid: 1730 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,25.5 + parent: 588 + - type: PointLight + enabled: True + - uid: 1731 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,7.5 + parent: 588 + - type: PointLight + enabled: True + - uid: 1732 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,9.5 + parent: 588 + - type: PointLight + enabled: True + - uid: 1733 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,20.5 + parent: 588 + - type: PointLight + enabled: True + - uid: 1734 + components: + - type: Transform + pos: 1.5,24.5 + parent: 588 + - type: PointLight + enabled: True + - uid: 1735 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,30.5 + parent: 588 + - type: PointLight + enabled: True + - uid: 1736 + components: + - type: Transform + pos: 11.5,32.5 + parent: 588 + - type: PointLight + enabled: True + - uid: 1737 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,40.5 + parent: 588 + - type: PointLight + enabled: True + - uid: 1738 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,40.5 + parent: 588 + - type: PointLight + enabled: True + - uid: 1739 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 22.5,30.5 + parent: 588 + - type: PointLight + enabled: True + - uid: 1740 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,19.5 + parent: 588 + - type: PointLight + enabled: True + - uid: 1742 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 16.5,21.5 + parent: 588 + - type: PointLight + enabled: True + - uid: 1744 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,18.5 + parent: 588 + - type: PointLight + enabled: True + - uid: 1745 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 16.5,34.5 + parent: 588 + - type: PointLight + enabled: True + - uid: 1746 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,34.5 + parent: 588 + - type: PointLight + enabled: True + - uid: 1747 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,38.5 + parent: 588 + - type: PointLight + enabled: True + - uid: 1748 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 20.5,44.5 + parent: 588 + - type: PointLight + enabled: True + - uid: 1749 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,44.5 + parent: 588 + - type: PointLight + enabled: True + - uid: 1750 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,46.5 + parent: 588 + - type: PointLight + enabled: True + - uid: 1751 + components: + - type: Transform + pos: 30.5,6.5 + parent: 588 + - type: PointLight + enabled: True + - uid: 1752 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,10.5 + parent: 588 + - type: PointLight + enabled: True + - uid: 1832 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,46.5 + parent: 588 + - type: PointLight + enabled: True +- proto: EmergencyRollerBed + entities: + - uid: 1141 + components: + - type: Transform + pos: 30.5,25.5 + parent: 588 + - uid: 1142 + components: + - type: Transform + pos: 30.5,24.5 + parent: 588 +- proto: ExtinguisherCabinetFilled + entities: + - uid: 867 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,26.5 + parent: 588 + - uid: 1198 + components: + - type: Transform + pos: 2.5,8.5 + parent: 588 + - uid: 1199 + components: + - type: Transform + pos: 8.5,8.5 + parent: 588 + - uid: 1200 + components: + - type: Transform + pos: 8.5,35.5 + parent: 588 + - uid: 1201 + components: + - type: Transform + pos: 1.5,35.5 + parent: 588 + - uid: 1202 + components: + - type: Transform + pos: 25.5,14.5 + parent: 588 + - uid: 1328 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,39.5 + parent: 588 + - uid: 1566 + components: + - type: Transform + pos: 17.5,44.5 + parent: 588 +- proto: filingCabinetRandom + entities: + - uid: 320 + components: + - type: Transform + pos: 21.5,0.5 + parent: 588 + - uid: 321 + components: + - type: Transform + pos: 20.5,0.5 + parent: 588 +- proto: filingCabinetTallRandom + entities: + - uid: 1396 + components: + - type: Transform + pos: 8.5,44.5 + parent: 588 +- proto: Flash + entities: + - uid: 1209 + components: + - type: Transform + pos: 10.726851,19.047483 + parent: 588 +- proto: FlashlightSeclite + entities: + - uid: 374 + components: + - type: Transform + pos: 13.377204,0.54605544 + parent: 588 +- proto: FloodlightBroken + entities: + - uid: 1193 + components: + - type: Transform + pos: 9.462372,35.6454 + parent: 588 +- proto: FloorDrain + entities: + - uid: 944 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,28.5 + parent: 588 + - type: Fixtures + fixtures: {} + - uid: 945 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,28.5 + parent: 588 + - type: Fixtures + fixtures: {} +- proto: FloorLavaEntity + entities: + - uid: 47 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,8.5 + parent: 588 + - uid: 49 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,8.5 + parent: 588 + - uid: 458 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,10.5 + parent: 588 + - uid: 459 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,8.5 + parent: 588 + - uid: 460 + components: + - type: Transform + pos: 8.5,3.5 + parent: 588 + - uid: 645 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,20.5 + parent: 588 + - uid: 820 + components: + - type: Transform + pos: 4.5,32.5 + parent: 588 + - uid: 821 + components: + - type: Transform + pos: 4.5,31.5 + parent: 588 + - uid: 822 + components: + - type: Transform + pos: 5.5,31.5 + parent: 588 + - uid: 823 + components: + - type: Transform + pos: 5.5,32.5 + parent: 588 + - uid: 824 + components: + - type: Transform + pos: 5.5,30.5 + parent: 588 + - uid: 825 + components: + - type: Transform + pos: 6.5,30.5 + parent: 588 + - uid: 826 + components: + - type: Transform + pos: 7.5,30.5 + parent: 588 + - uid: 827 + components: + - type: Transform + pos: 6.5,32.5 + parent: 588 + - uid: 828 + components: + - type: Transform + pos: 7.5,32.5 + parent: 588 + - uid: 829 + components: + - type: Transform + pos: 7.5,31.5 + parent: 588 + - uid: 830 + components: + - type: Transform + pos: 6.5,31.5 + parent: 588 + - uid: 831 + components: + - type: Transform + pos: 8.5,30.5 + parent: 588 + - uid: 857 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,39.5 + parent: 588 + - uid: 858 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,39.5 + parent: 588 + - uid: 859 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,38.5 + parent: 588 + - uid: 860 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,40.5 + parent: 588 + - uid: 887 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,40.5 + parent: 588 + - uid: 889 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,39.5 + parent: 588 + - uid: 906 + components: + - type: Transform + pos: 4.5,7.5 + parent: 588 + - uid: 907 + components: + - type: Transform + pos: 5.5,7.5 + parent: 588 + - uid: 908 + components: + - type: Transform + pos: 5.5,9.5 + parent: 588 + - uid: 909 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,6.5 + parent: 588 + - uid: 910 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,6.5 + parent: 588 + - uid: 911 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,9.5 + parent: 588 + - uid: 913 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,10.5 + parent: 588 + - uid: 1247 + components: + - type: Transform + pos: 8.5,4.5 + parent: 588 + - uid: 1248 + components: + - type: Transform + pos: 9.5,4.5 + parent: 588 + - uid: 1249 + components: + - type: Transform + pos: 8.5,2.5 + parent: 588 + - uid: 1250 + components: + - type: Transform + pos: 8.5,1.5 + parent: 588 + - uid: 1251 + components: + - type: Transform + pos: 9.5,1.5 + parent: 588 + - uid: 1252 + components: + - type: Transform + pos: 8.5,1.5 + parent: 588 + - uid: 1253 + components: + - type: Transform + pos: 8.5,0.5 + parent: 588 + - uid: 1254 + components: + - type: Transform + pos: 7.5,0.5 + parent: 588 + - uid: 1333 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,46.5 + parent: 588 + - uid: 1341 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,45.5 + parent: 588 + - uid: 1343 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,46.5 + parent: 588 + - uid: 1345 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,46.5 + parent: 588 + - uid: 1359 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,47.5 + parent: 588 + - uid: 1360 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,46.5 + parent: 588 + - uid: 1361 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,47.5 + parent: 588 + - uid: 1362 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,47.5 + parent: 588 + - uid: 1363 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,44.5 + parent: 588 + - uid: 1364 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,47.5 + parent: 588 + - uid: 1365 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,44.5 + parent: 588 + - uid: 1366 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,45.5 + parent: 588 + - uid: 1367 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,44.5 + parent: 588 + - uid: 1368 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,43.5 + parent: 588 + - uid: 1369 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,43.5 + parent: 588 + - uid: 1370 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,42.5 + parent: 588 + - uid: 1371 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,42.5 + parent: 588 + - uid: 1372 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,43.5 + parent: 588 + - uid: 1373 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,44.5 + parent: 588 + - uid: 1374 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,46.5 + parent: 588 + - uid: 1375 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,43.5 + parent: 588 +- proto: FoodBowlBigTrash + entities: + - uid: 1840 + components: + - type: Transform + pos: 30.547388,48.16116 + parent: 588 +- proto: FoodBurgerMime + entities: + - uid: 399 + components: + - type: Transform + pos: 10.958169,39.64943 + parent: 588 +- proto: FoodPlateSmallPlastic + entities: + - uid: 529 + components: + - type: Transform + pos: 17.462528,12.615073 + parent: 588 +- proto: FoodPlateTrash + entities: + - uid: 1692 + components: + - type: Transform + pos: 28.80027,47.44947 + parent: 588 +- proto: ForensicPad + entities: + - uid: 761 + components: + - type: Transform + pos: 7.562898,22.48225 + parent: 588 +- proto: ForkPlastic + entities: + - uid: 531 + components: + - type: Transform + pos: 17.405733,12.600882 + parent: 588 +- proto: GasFilter + entities: + - uid: 1415 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.5,47.5 + parent: 588 +- proto: GasPipeBend + entities: + - uid: 1412 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,46.5 + parent: 588 + - uid: 1414 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,46.5 + parent: 588 + - uid: 1416 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,47.5 + parent: 588 + - uid: 1421 + components: + - type: Transform + pos: 13.5,47.5 + parent: 588 +- proto: GasPipeStraight + entities: + - uid: 1418 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,47.5 + parent: 588 + - uid: 1420 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,46.5 + parent: 588 +- proto: GasPipeTJunction + entities: + - uid: 1410 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,46.5 + parent: 588 + - uid: 1411 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,46.5 + parent: 588 + - uid: 1417 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,46.5 + parent: 588 + - uid: 1419 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,46.5 + parent: 588 +- proto: GasPort + entities: + - uid: 1404 + components: + - type: Transform + pos: 9.5,48.5 + parent: 588 + - uid: 1422 + components: + - type: Transform + pos: 12.5,48.5 + parent: 588 +- proto: GasPressurePump + entities: + - uid: 1409 + components: + - type: Transform + pos: 9.5,47.5 + parent: 588 +- proto: GasThermoMachineFreezer + entities: + - uid: 1403 + components: + - type: Transform + pos: 10.5,48.5 + parent: 588 +- proto: GatfruitSeeds + entities: + - uid: 562 + components: + - type: Transform + pos: 8.528373,27.49547 + parent: 588 +- proto: Gauze + entities: + - uid: 1482 + components: + - type: Transform + pos: 8.452288,42.514927 + parent: 588 +- proto: GeneratorRTG + entities: + - uid: 742 + components: + - type: Transform + pos: 27.5,21.5 + parent: 588 + - uid: 748 + components: + - type: Transform + pos: 25.5,21.5 + parent: 588 +- proto: Girder + entities: + - uid: 1301 + components: + - type: Transform + pos: 26.5,39.5 + parent: 588 +- proto: Grille + entities: + - uid: 209 + components: + - type: Transform + pos: 15.5,34.5 + parent: 588 + - uid: 211 + components: + - type: Transform + pos: 19.5,36.5 + parent: 588 + - uid: 212 + components: + - type: Transform + pos: 19.5,34.5 + parent: 588 + - uid: 213 + components: + - type: Transform + pos: 15.5,36.5 + parent: 588 + - uid: 403 + components: + - type: Transform + pos: 15.5,9.5 + parent: 588 + - uid: 404 + components: + - type: Transform + pos: 15.5,7.5 + parent: 588 + - uid: 407 + components: + - type: Transform + pos: 19.5,9.5 + parent: 588 + - uid: 408 + components: + - type: Transform + pos: 19.5,7.5 + parent: 588 + - uid: 568 + components: + - type: Transform + pos: 12.5,15.5 + parent: 588 + - uid: 584 + components: + - type: Transform + pos: 2.5,12.5 + parent: 588 + - uid: 586 + components: + - type: Transform + pos: 2.5,16.5 + parent: 588 + - uid: 587 + components: + - type: Transform + pos: 4.5,16.5 + parent: 588 + - uid: 589 + components: + - type: Transform + pos: 4.5,12.5 + parent: 588 + - uid: 1465 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,43.5 + parent: 588 + - uid: 1466 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 12.5,43.5 + parent: 588 +- proto: GrilleBroken + entities: + - uid: 1302 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,39.5 + parent: 588 +- proto: Handcuffs + entities: + - uid: 1614 + components: + - type: Transform + pos: 22.608034,10.659381 + parent: 588 +- proto: Hemostat + entities: + - uid: 1471 + components: + - type: Transform + pos: 8.51377,43.004257 + parent: 588 +- proto: HighSecArmoryLocked + entities: + - uid: 1597 + components: + - type: Transform + pos: 26.5,7.5 + parent: 588 + - uid: 1598 + components: + - type: Transform + pos: 32.5,7.5 + parent: 588 + - uid: 1599 + components: + - type: Transform + pos: 29.5,9.5 + parent: 588 +- proto: HospitalCurtains + entities: + - uid: 402 + components: + - type: Transform + pos: 8.5,27.5 + parent: 588 + - uid: 949 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,24.5 + parent: 588 + - uid: 951 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,27.5 + parent: 588 + - uid: 1768 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,48.5 + parent: 588 +- proto: HospitalCurtainsOpen + entities: + - uid: 946 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,25.5 + parent: 588 + - uid: 947 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,24.5 + parent: 588 + - uid: 1040 + components: + - type: Transform + pos: 20.5,28.5 + parent: 588 + - uid: 1046 + components: + - type: Transform + pos: 22.5,24.5 + parent: 588 + - uid: 1148 + components: + - type: Transform + pos: 28.5,25.5 + parent: 588 + - uid: 1149 + components: + - type: Transform + pos: 28.5,24.5 + parent: 588 + - uid: 1223 + components: + - type: Transform + pos: 20.5,36.5 + parent: 588 + - uid: 1224 + components: + - type: Transform + pos: 14.5,34.5 + parent: 588 + - uid: 1467 + components: + - type: Transform + pos: 12.5,42.5 + parent: 588 + - uid: 1469 + components: + - type: Transform + pos: 10.5,42.5 + parent: 588 + - uid: 1767 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,42.5 + parent: 588 +- proto: HydroponicsToolHatchet + entities: + - uid: 1844 + components: + - type: Transform + pos: 29.538284,44.04174 + parent: 588 + - uid: 1851 + components: + - type: Transform + pos: 30.630798,21.602604 + parent: 588 +- proto: HydroponicsToolMiniHoe + entities: + - uid: 1837 + components: + - type: Transform + pos: 30.099596,43.446724 + parent: 588 + - uid: 1841 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 33.38517,20.601 + parent: 588 +- proto: HydroponicsToolSpade + entities: + - uid: 1838 + components: + - type: Transform + pos: 29.95761,43.361576 + parent: 588 + - uid: 1842 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 33.42777,20.58681 + parent: 588 +- proto: hydroponicsTray + entities: + - uid: 796 + components: + - type: Transform + pos: 31.5,21.5 + parent: 588 + - uid: 797 + components: + - type: Transform + pos: 31.5,20.5 + parent: 588 + - uid: 798 + components: + - type: Transform + pos: 31.5,19.5 + parent: 588 + - uid: 1772 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 29.5,42.5 + parent: 588 + - uid: 1774 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 29.5,44.5 + parent: 588 + - uid: 1787 + components: + - type: Transform + pos: 30.5,44.5 + parent: 588 + - uid: 1788 + components: + - type: Transform + pos: 30.5,42.5 + parent: 588 +- proto: IngotGold + entities: + - uid: 952 + components: + - type: Transform + pos: 11.069347,39.504154 + parent: 588 +- proto: KitchenMicrowave + entities: + - uid: 524 + components: + - type: Transform + pos: 16.5,12.5 + parent: 588 + - uid: 709 + components: + - type: Transform + pos: 18.5,22.5 + parent: 588 + - uid: 1785 + components: + - type: Transform + pos: 29.5,48.5 + parent: 588 +- proto: KitchenReagentGrinder + entities: + - uid: 1786 + components: + - type: Transform + pos: 30.5,47.5 + parent: 588 +- proto: KnifePlastic + entities: + - uid: 530 + components: + - type: Transform + pos: 17.249546,12.643455 + parent: 588 + - uid: 1836 + components: + - type: Transform + pos: 30.241585,48.271698 + parent: 588 +- proto: Lamp + entities: + - uid: 581 + components: + - type: Transform + pos: 12.369425,13.798887 + parent: 588 +- proto: LampGold + entities: + - uid: 322 + components: + - type: Transform + pos: 18.419699,1.6320114 + parent: 588 + - uid: 323 + components: + - type: Transform + pos: 20.563715,4.8959665 + parent: 588 + - uid: 729 + components: + - type: Transform + pos: 6.4779434,22.892899 + parent: 588 + - uid: 730 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.765976,19.912766 + parent: 588 +- proto: Lighter + entities: + - uid: 1220 + components: + - type: Transform + pos: 7.5287867,36.397644 + parent: 588 +- proto: LockerDetective + entities: + - uid: 560 + components: + - type: Transform + pos: 14.5,16.5 + parent: 588 +- proto: LockerEvidence + entities: + - uid: 254 + components: + - type: Transform + pos: 16.5,0.5 + parent: 588 + - uid: 262 + components: + - type: Transform + pos: 2.5,0.5 + parent: 588 + - uid: 263 + components: + - type: Transform + pos: 4.5,0.5 + parent: 588 + - uid: 276 + components: + - type: Transform + pos: 0.5,0.5 + parent: 588 + - uid: 286 + components: + - type: Transform + pos: 12.5,0.5 + parent: 588 + - uid: 287 + components: + - type: Transform + pos: 14.5,0.5 + parent: 588 + - uid: 704 + components: + - type: Transform + pos: 16.5,22.5 + parent: 588 +- proto: LockerMedicineFilled + entities: + - uid: 1152 + components: + - type: Transform + pos: 28.5,27.5 + parent: 588 +- proto: LockerSecurityFilled + entities: + - uid: 416 + components: + - type: Transform + pos: 20.5,6.5 + parent: 588 +- proto: LockerSyndicatePersonal + entities: + - uid: 605 + components: + - type: Transform + pos: 6.5,12.5 + parent: 588 +- proto: MachineFrame + entities: + - uid: 400 + components: + - type: Transform + pos: 26.5,8.5 + parent: 588 +- proto: MaintenanceFluffSpawner + entities: + - uid: 414 + components: + - type: Transform + pos: 25.5,32.5 + parent: 588 + - uid: 1289 + components: + - type: Transform + pos: 17.5,38.5 + parent: 588 + - uid: 1290 + components: + - type: Transform + pos: 21.5,40.5 + parent: 588 + - uid: 1291 + components: + - type: Transform + pos: 20.5,40.5 + parent: 588 +- proto: MaintenanceWeaponSpawner + entities: + - uid: 548 + components: + - type: Transform + pos: 15.5,4.5 + parent: 588 + - uid: 549 + components: + - type: Transform + pos: 3.5,4.5 + parent: 588 + - uid: 1580 + components: + - type: Transform + pos: 1.5,8.5 + parent: 588 + - uid: 1581 + components: + - type: Transform + pos: 9.5,8.5 + parent: 588 +- proto: MaterialCloth1 + entities: + - uid: 702 + components: + - type: Transform + pos: 12.462601,18.586084 + parent: 588 + - uid: 1065 + components: + - type: Transform + pos: 24.460928,24.594687 + parent: 588 + - uid: 1066 + components: + - type: Transform + pos: 24.389935,24.296673 + parent: 588 +- proto: MaterialWoodPlank1 + entities: + - uid: 703 + components: + - type: Transform + pos: 12.817572,18.685423 + parent: 588 + - uid: 1064 + components: + - type: Transform + pos: 26.278374,24.608877 + parent: 588 + - uid: 1067 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.801699,24.708214 + parent: 588 + - uid: 1076 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.823982,27.574818 + parent: 588 +- proto: MedicalBed + entities: + - uid: 1146 + components: + - type: Transform + pos: 28.5,24.5 + parent: 588 + - uid: 1147 + components: + - type: Transform + pos: 28.5,25.5 + parent: 588 +- proto: MedkitAdvancedFilled + entities: + - uid: 1153 + components: + - type: Transform + pos: 30.614443,28.392822 + parent: 588 +- proto: MedkitCombatFilled + entities: + - uid: 1154 + components: + - type: Transform + pos: 30.40146,28.066427 + parent: 588 +- proto: OperatingTable + entities: + - uid: 1389 + components: + - type: Transform + pos: 9.5,43.5 + parent: 588 +- proto: Paper + entities: + - uid: 1055 + components: + - type: Transform + pos: 20.428474,24.722406 + parent: 588 + - uid: 1056 + components: + - type: Transform + pos: 20.669853,24.52373 + parent: 588 +- proto: PaperOffice + entities: + - uid: 327 + components: + - type: Transform + pos: 21.415642,4.0728827 + parent: 588 + - uid: 328 + components: + - type: Transform + pos: 21.586027,4.0019264 + parent: 588 + - uid: 1113 + components: + - type: Transform + pos: 20.706646,15.341779 + parent: 588 + - uid: 1114 + components: + - type: Transform + pos: 20.465267,15.185677 + parent: 588 + - uid: 1115 + components: + - type: Transform + pos: 20.30908,14.603841 + parent: 588 +- proto: PartRodMetal1 + entities: + - uid: 1071 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.341253,26.595633 + parent: 588 + - uid: 1072 + components: + - type: Transform + pos: 25.36965,28.11408 + parent: 588 +- proto: Pen + entities: + - uid: 366 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.352327,3.9473093 + parent: 588 + - uid: 367 + components: + - type: Transform + pos: 18.75395,1.1232786 + parent: 588 + - uid: 368 + components: + - type: Transform + pos: 24.788435,1.4496742 + parent: 588 + - uid: 731 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.36841,19.019064 + parent: 588 + - uid: 732 + components: + - type: Transform + pos: 7.4631767,22.637186 + parent: 588 +- proto: PhoneInstrument + entities: + - uid: 371 + components: + - type: Transform + pos: 25.484175,4.4865713 + parent: 588 +- proto: PillCanister + entities: + - uid: 1481 + components: + - type: Transform + pos: 14.438607,42.637726 + parent: 588 +- proto: PillSpaceDrugs + entities: + - uid: 1479 + components: + - type: Transform + pos: 14.438607,42.96412 + parent: 588 + - uid: 1480 + components: + - type: Transform + pos: 14.537998,42.878975 + parent: 588 +- proto: PlushieNuke + entities: + - uid: 1850 + components: + - type: Transform + pos: 22.519993,28.594225 + parent: 588 +- proto: PortableFlasher + entities: + - uid: 1234 + components: + - type: Transform + pos: 32.5,25.5 + parent: 588 +- proto: PortableGeneratorPacman + entities: + - uid: 967 + components: + - type: Transform + pos: 16.5,32.5 + parent: 588 + - uid: 969 + components: + - type: Transform + pos: 24.5,32.5 + parent: 588 +- proto: PortableGeneratorSuperPacman + entities: + - uid: 50 + components: + - type: Transform + pos: 26.5,15.5 + parent: 588 + - uid: 55 + components: + - type: Transform + pos: 28.5,15.5 + parent: 588 + - uid: 1504 + components: + - type: Transform + pos: 18.5,44.5 + parent: 588 + - uid: 1505 + components: + - type: Transform + pos: 20.5,44.5 + parent: 588 +- proto: PortableScrubber + entities: + - uid: 1101 + components: + - type: Transform + pos: 18.5,30.5 + parent: 588 +- proto: PosterContrabandBountyHunters + entities: + - uid: 1578 + components: + - type: Transform + pos: 13.5,15.5 + parent: 588 +- proto: PosterLegitDickGumshue + entities: + - uid: 1576 + components: + - type: Transform + pos: 9.5,15.5 + parent: 588 +- proto: PosterLegitEnlist + entities: + - uid: 1800 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,9.5 + parent: 588 +- proto: PosterLegitNanotrasenLogo + entities: + - uid: 1802 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,48.5 + parent: 588 + - uid: 1803 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,21.5 + parent: 588 +- proto: PosterLegitObey + entities: + - uid: 1801 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,42.5 + parent: 588 +- proto: PosterLegitSecWatch + entities: + - uid: 1799 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,7.5 + parent: 588 +- proto: PosterLegitSpaceCops + entities: + - uid: 1804 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,19.5 + parent: 588 +- proto: PottedPlantRandom + entities: + - uid: 1286 + components: + - type: Transform + pos: 16.5,38.5 + parent: 588 + - uid: 1287 + components: + - type: Transform + pos: 22.5,40.5 + parent: 588 +- proto: PowerCellHyper + entities: + - uid: 469 + components: + - type: Transform + pos: 12.355853,25.41643 + parent: 588 + - uid: 590 + components: + - type: Transform + pos: 5.381793,16.642464 + parent: 588 +- proto: PowerCellRecharger + entities: + - uid: 1103 + components: + - type: Transform + pos: 15.5,30.5 + parent: 588 + - uid: 1568 + components: + - type: Transform + pos: 21.5,47.5 + parent: 588 +- proto: Poweredlight + entities: + - uid: 1641 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,0.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1642 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 14.5,0.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1646 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,0.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1647 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,0.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1648 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,6.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1649 + components: + - type: Transform + pos: 13.5,10.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1650 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 16.5,6.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1651 + components: + - type: Transform + pos: 18.5,10.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1693 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 32.5,25.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1701 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 18.5,12.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1702 + components: + - type: Transform + pos: 20.5,16.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1703 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,20.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1704 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 16.5,25.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1705 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,27.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1706 + components: + - type: Transform + pos: 18.5,40.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1741 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,21.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1743 + components: + - type: Transform + pos: 21.5,22.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1830 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,43.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1831 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,47.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 +- proto: PoweredlightLED + entities: + - uid: 1707 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,42.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1708 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,42.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1709 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,46.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1710 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,46.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1725 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 28.5,27.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 +- proto: PoweredSmallLight + entities: + - uid: 470 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 26.5,14.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 940 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,28.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 948 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,28.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 953 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,25.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1603 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,10.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1604 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,10.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1605 + components: + - type: Transform + pos: 29.5,6.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1606 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,8.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1607 + components: + - type: Transform + pos: 32.5,8.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1608 + components: + - type: Transform + pos: 26.5,8.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1643 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,1.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1644 + components: + - type: Transform + pos: 20.5,4.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1645 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,0.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1652 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,8.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1653 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,8.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1654 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,8.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1655 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,8.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1656 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,14.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1657 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,14.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1659 + components: + - type: Transform + pos: 3.5,18.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1661 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,22.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1662 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,27.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1663 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,25.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1664 + components: + - type: Transform + pos: 0.5,28.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1665 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,24.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1666 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,30.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1667 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,30.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1668 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,36.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1669 + components: + - type: Transform + pos: 8.5,34.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1670 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,38.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1671 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,38.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1672 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,43.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1673 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,43.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1674 + components: + - type: Transform + pos: 2.5,47.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1675 + components: + - type: Transform + pos: 4.5,47.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1676 + components: + - type: Transform + pos: 9.5,40.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1677 + components: + - type: Transform + pos: 13.5,40.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1678 + components: + - type: Transform + pos: 13.5,36.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1679 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,34.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1680 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,35.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1681 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,35.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1682 + components: + - type: Transform + pos: 25.5,36.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1683 + components: + - type: Transform + pos: 28.5,38.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1684 + components: + - type: Transform + pos: 19.5,46.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1685 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 17.5,47.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1686 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,47.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1687 + components: + - type: Transform + pos: 23.5,32.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1688 + components: + - type: Transform + pos: 17.5,32.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1689 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,27.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1690 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 20.5,25.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1694 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 28.5,19.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1695 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,19.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1696 + components: + - type: Transform + pos: 13.5,22.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1697 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,18.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1698 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.5,18.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1699 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,16.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1700 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,13.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1828 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,42.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1829 + components: + - type: Transform + pos: 25.5,48.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 +- proto: PoweredSmallLightEmpty + entities: + - uid: 1640 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,25.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 1658 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,27.5 + parent: 588 + - type: ApcPowerReceiver + powerLoad: 0 +- proto: Rack + entities: + - uid: 255 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,0.5 + parent: 588 + - uid: 264 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,0.5 + parent: 588 + - uid: 283 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,0.5 + parent: 588 + - uid: 285 + components: + - type: Transform + pos: 13.5,0.5 + parent: 588 + - uid: 324 + components: + - type: Transform + pos: 19.5,4.5 + parent: 588 + - uid: 396 + components: + - type: Transform + pos: 28.5,8.5 + parent: 588 + - uid: 401 + components: + - type: Transform + pos: 32.5,8.5 + parent: 588 + - uid: 417 + components: + - type: Transform + pos: 12.5,6.5 + parent: 588 + - uid: 418 + components: + - type: Transform + pos: 12.5,10.5 + parent: 588 + - uid: 419 + components: + - type: Transform + pos: 22.5,10.5 + parent: 588 + - uid: 420 + components: + - type: Transform + pos: 22.5,6.5 + parent: 588 + - uid: 478 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,15.5 + parent: 588 + - uid: 551 + components: + - type: Transform + pos: 22.5,15.5 + parent: 588 + - uid: 585 + components: + - type: Transform + pos: 1.5,12.5 + parent: 588 + - uid: 596 + components: + - type: Transform + pos: 1.5,16.5 + parent: 588 + - uid: 597 + components: + - type: Transform + pos: 5.5,16.5 + parent: 588 + - uid: 598 + components: + - type: Transform + pos: 5.5,12.5 + parent: 588 + - uid: 966 + components: + - type: Transform + pos: 25.5,32.5 + parent: 588 + - uid: 977 + components: + - type: Transform + pos: 15.5,32.5 + parent: 588 + - uid: 1015 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 12.5,25.5 + parent: 588 + - uid: 1016 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 12.5,24.5 + parent: 588 + - uid: 1021 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,25.5 + parent: 588 + - uid: 1024 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,24.5 + parent: 588 + - uid: 1111 + components: + - type: Transform + pos: 14.5,32.5 + parent: 588 + - uid: 1112 + components: + - type: Transform + pos: 26.5,32.5 + parent: 588 + - uid: 1206 + components: + - type: Transform + pos: 1.5,8.5 + parent: 588 + - uid: 1208 + components: + - type: Transform + pos: 9.5,8.5 + parent: 588 + - uid: 1211 + components: + - type: Transform + pos: 2.5,34.5 + parent: 588 + - uid: 1319 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 29.5,40.5 + parent: 588 + - uid: 1562 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,47.5 + parent: 588 + - uid: 1858 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,21.5 + parent: 588 +- proto: Railing + entities: + - uid: 313 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,4.5 + parent: 588 + - uid: 314 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,0.5 + parent: 588 + - uid: 427 + components: + - type: Transform + pos: 6.5,7.5 + parent: 588 + - uid: 428 + components: + - type: Transform + pos: 4.5,7.5 + parent: 588 + - uid: 429 + components: + - type: Transform + pos: 3.5,7.5 + parent: 588 + - uid: 430 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,9.5 + parent: 588 + - uid: 431 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,9.5 + parent: 588 + - uid: 435 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,9.5 + parent: 588 + - uid: 436 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,9.5 + parent: 588 + - uid: 437 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,9.5 + parent: 588 + - uid: 439 + components: + - type: Transform + pos: 5.5,7.5 + parent: 588 + - uid: 440 + components: + - type: Transform + pos: 7.5,7.5 + parent: 588 + - uid: 770 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,21.5 + parent: 588 + - uid: 850 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,30.5 + parent: 588 + - uid: 851 + components: + - type: Transform + pos: 9.5,32.5 + parent: 588 + - uid: 854 + components: + - type: Transform + pos: 3.5,32.5 + parent: 588 + - uid: 855 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,30.5 + parent: 588 + - uid: 1259 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,4.5 + parent: 588 + - uid: 1260 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,4.5 + parent: 588 + - uid: 1261 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,0.5 + parent: 588 + - uid: 1262 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,0.5 + parent: 588 +- proto: RailingCorner + entities: + - uid: 315 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,1.5 + parent: 588 + - uid: 316 + components: + - type: Transform + pos: 30.5,3.5 + parent: 588 + - uid: 771 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,21.5 + parent: 588 + - uid: 772 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,21.5 + parent: 588 + - uid: 845 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,32.5 + parent: 588 + - uid: 846 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,30.5 + parent: 588 + - uid: 847 + components: + - type: Transform + pos: 10.5,32.5 + parent: 588 + - uid: 848 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,30.5 + parent: 588 + - uid: 849 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,30.5 + parent: 588 + - uid: 852 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,32.5 + parent: 588 + - uid: 853 + components: + - type: Transform + pos: 4.5,32.5 + parent: 588 + - uid: 856 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,30.5 + parent: 588 + - uid: 886 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,40.5 + parent: 588 + - uid: 888 + components: + - type: Transform + pos: 2.5,40.5 + parent: 588 + - uid: 890 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,40.5 + parent: 588 + - uid: 891 + components: + - type: Transform + pos: 5.5,40.5 + parent: 588 + - uid: 892 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,38.5 + parent: 588 + - uid: 893 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,38.5 + parent: 588 + - uid: 894 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,38.5 + parent: 588 + - uid: 895 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,38.5 + parent: 588 + - uid: 1255 + components: + - type: Transform + pos: 7.5,3.5 + parent: 588 + - uid: 1256 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,3.5 + parent: 588 + - uid: 1257 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,1.5 + parent: 588 + - uid: 1258 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,1.5 + parent: 588 + - uid: 1351 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,44.5 + parent: 588 + - uid: 1352 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,43.5 + parent: 588 + - uid: 1353 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,43.5 + parent: 588 + - uid: 1354 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,44.5 + parent: 588 + - uid: 1355 + components: + - type: Transform + pos: 1.5,46.5 + parent: 588 + - uid: 1356 + components: + - type: Transform + pos: 2.5,47.5 + parent: 588 + - uid: 1357 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,47.5 + parent: 588 + - uid: 1358 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,46.5 + parent: 588 +- proto: RailingCornerSmall + entities: + - uid: 337 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,3.5 + parent: 588 + - uid: 338 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 29.5,1.5 + parent: 588 + - uid: 1376 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,43.5 + parent: 588 + - uid: 1377 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,47.5 + parent: 588 + - uid: 1378 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,47.5 + parent: 588 + - uid: 1379 + components: + - type: Transform + pos: 5.5,43.5 + parent: 588 +- proto: RandomDrinkBottle + entities: + - uid: 580 + components: + - type: Transform + pos: 12.5,12.5 + parent: 588 +- proto: RandomFoodSingle + entities: + - uid: 764 + components: + - type: Transform + pos: 6.5,19.5 + parent: 588 +- proto: RandomInstruments + entities: + - uid: 546 + components: + - type: Transform + pos: 1.5,4.5 + parent: 588 + - uid: 1159 + components: + - type: Transform + pos: 21.5,18.5 + parent: 588 + - uid: 1833 + components: + - type: Transform + pos: 24.5,42.5 + parent: 588 +- proto: RandomPosterContraband + entities: + - uid: 1571 + components: + - type: Transform + pos: 25.5,39.5 + parent: 588 + - uid: 1572 + components: + - type: Transform + pos: 3.5,35.5 + parent: 588 + - uid: 1573 + components: + - type: Transform + pos: 7.5,35.5 + parent: 588 + - uid: 1574 + components: + - type: Transform + pos: 5.5,25.5 + parent: 588 + - uid: 1575 + components: + - type: Transform + pos: 30.5,15.5 + parent: 588 + - uid: 1805 + components: + - type: Transform + pos: 18.5,43.5 + parent: 588 + - uid: 1806 + components: + - type: Transform + pos: 20.5,47.5 + parent: 588 +- proto: RandomSoap + entities: + - uid: 397 + components: + - type: Transform + pos: 8.5,24.5 + parent: 588 +- proto: RandomVending + entities: + - uid: 539 + components: + - type: Transform + pos: 17.5,16.5 + parent: 588 +- proto: ReinforcedWindow + entities: + - uid: 214 + components: + - type: Transform + pos: 19.5,34.5 + parent: 588 + - uid: 409 + components: + - type: Transform + pos: 15.5,7.5 + parent: 588 + - uid: 410 + components: + - type: Transform + pos: 15.5,9.5 + parent: 588 + - uid: 411 + components: + - type: Transform + pos: 19.5,7.5 + parent: 588 + - uid: 412 + components: + - type: Transform + pos: 19.5,9.5 + parent: 588 + - uid: 591 + components: + - type: Transform + pos: 2.5,12.5 + parent: 588 + - uid: 592 + components: + - type: Transform + pos: 4.5,12.5 + parent: 588 + - uid: 594 + components: + - type: Transform + pos: 4.5,16.5 + parent: 588 + - uid: 595 + components: + - type: Transform + pos: 2.5,16.5 + parent: 588 + - uid: 1166 + components: + - type: Transform + pos: 19.5,36.5 + parent: 588 + - uid: 1168 + components: + - type: Transform + pos: 15.5,36.5 + parent: 588 + - uid: 1169 + components: + - type: Transform + pos: 15.5,34.5 + parent: 588 +- proto: RemoteSignaller + entities: + - uid: 593 + components: + - type: Transform + pos: 34.361877,24.623777 + parent: 588 + - type: DeviceLinkSource + linkedPorts: + 1238: + - Pressed: Toggle + 1239: + - Pressed: Toggle + 1237: + - Pressed: Toggle + - uid: 1104 + components: + - type: Transform + pos: 25.24476,30.698978 + parent: 588 + - uid: 1105 + components: + - type: Transform + pos: 25.443544,30.613832 + parent: 588 + - uid: 1106 + components: + - type: Transform + pos: 5.677143,16.762346 + parent: 588 +- proto: RiotLaserShield + entities: + - uid: 1618 + components: + - type: Transform + pos: 12.616156,10.534842 + parent: 588 +- proto: RiotShield + entities: + - uid: 600 + components: + - type: Transform + pos: 1.3209407,16.656654 + parent: 588 + - uid: 601 + components: + - type: Transform + pos: 1.5481212,16.543125 + parent: 588 +- proto: SalvageCanisterSpawner + entities: + - uid: 998 + components: + - type: Transform + pos: 22.5,30.5 + parent: 588 + - uid: 1009 + components: + - type: Transform + pos: 19.5,30.5 + parent: 588 + - uid: 1025 + components: + - type: Transform + pos: 21.5,30.5 + parent: 588 + - uid: 1190 + components: + - type: Transform + pos: 9.5,36.5 + parent: 588 + - uid: 1210 + components: + - type: Transform + pos: 9.5,48.5 + parent: 588 + - uid: 1413 + components: + - type: Transform + pos: 13.5,48.5 + parent: 588 + - uid: 1470 + components: + - type: Transform + pos: 12.5,48.5 + parent: 588 +- proto: SawAdvanced + entities: + - uid: 1468 + components: + - type: Transform + pos: 8.527969,43.529327 + parent: 588 +- proto: ScalpelLaser + entities: + - uid: 1472 + components: + - type: Transform + pos: 8.485372,43.131977 + parent: 588 +- proto: ScalpelShiv + entities: + - uid: 708 + components: + - type: Transform + pos: 16.074419,18.727995 + parent: 588 + - uid: 1592 + components: + - type: Transform + pos: 10.50393,24.491432 + parent: 588 +- proto: SeedExtractor + entities: + - uid: 802 + components: + - type: Transform + pos: 33.5,21.5 + parent: 588 + - uid: 1776 + components: + - type: Transform + pos: 28.5,42.5 + parent: 588 +- proto: SheetGlass + entities: + - uid: 649 + components: + - type: Transform + pos: 14.3137455,32.471424 + parent: 588 +- proto: SheetPlasteel + entities: + - uid: 866 + components: + - type: Transform + pos: 2.412651,34.456436 + parent: 588 +- proto: SheetPlastic + entities: + - uid: 398 + components: + - type: Transform + pos: 20.04785,45.07574 + parent: 588 +- proto: SheetSteel + entities: + - uid: 656 + components: + - type: Transform + pos: 26.36062,32.5183 + parent: 588 + - uid: 699 + components: + - type: Transform + pos: 29.259031,40.432583 + parent: 588 +- proto: ShowcaseRobot + entities: + - uid: 1621 + components: + - type: Transform + pos: 16.5,10.5 + parent: 588 + - uid: 1622 + components: + - type: Transform + pos: 18.5,6.5 + parent: 588 +- proto: ShuttersNormal + entities: + - uid: 1237 + components: + - type: Transform + pos: 34.5,27.5 + parent: 588 + - type: DeviceLinkSink + links: + - 593 + - uid: 1238 + components: + - type: Transform + pos: 32.5,27.5 + parent: 588 + - type: DeviceLinkSink + links: + - 593 +- proto: ShuttersWindow + entities: + - uid: 1239 + components: + - type: Transform + pos: 33.5,27.5 + parent: 588 + - type: DeviceLinkSink + links: + - 593 +- proto: SignCloning + entities: + - uid: 1484 + components: + - type: Transform + pos: 12.5,43.5 + parent: 588 +- proto: SignPrison + entities: + - uid: 1792 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,3.5 + parent: 588 + - uid: 1793 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,1.5 + parent: 588 + - uid: 1794 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,21.5 + parent: 588 + - uid: 1795 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,19.5 + parent: 588 + - uid: 1796 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,46.5 + parent: 588 + - uid: 1797 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,44.5 + parent: 588 +- proto: SignSecurity + entities: + - uid: 1798 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,1.5 + parent: 588 +- proto: SignSurgery + entities: + - uid: 1483 + components: + - type: Transform + pos: 10.5,43.5 + parent: 588 +- proto: Sink + entities: + - uid: 935 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,25.5 + parent: 588 +- proto: SinkStemlessWater + entities: + - uid: 1461 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,42.5 + parent: 588 + - uid: 1462 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,42.5 + parent: 588 +- proto: SMESBasic + entities: + - uid: 46 + components: + - type: Transform + pos: 26.5,13.5 + parent: 588 + - uid: 56 + components: + - type: Transform + pos: 28.5,13.5 + parent: 588 + - uid: 747 + components: + - type: Transform + pos: 26.5,19.5 + parent: 588 + - uid: 1506 + components: + - type: Transform + pos: 18.5,46.5 + parent: 588 + - uid: 1507 + components: + - type: Transform + pos: 20.5,46.5 + parent: 588 +- proto: SoapSyndie + entities: + - uid: 1856 + components: + - type: Transform + pos: 10.4890785,27.46785 + parent: 588 +- proto: SpaceCash100 + entities: + - uid: 1243 + components: + - type: Transform + pos: 11.887424,39.621456 + parent: 588 + - uid: 1244 + components: + - type: Transform + pos: 11.759636,39.479546 + parent: 588 + - uid: 1296 + components: + - type: Transform + pos: 12.100407,39.465355 + parent: 588 + - uid: 1297 + components: + - type: Transform + pos: 12.100407,39.80594 + parent: 588 + - uid: 1298 + components: + - type: Transform + pos: 11.688642,39.720795 + parent: 588 + - uid: 1299 + components: + - type: Transform + pos: 11.4330635,39.57888 + parent: 588 +- proto: Spear + entities: + - uid: 1834 + components: + - type: Transform + pos: 24.466219,48.441994 + parent: 588 +- proto: SpeedLoaderMagnum + entities: + - uid: 950 + components: + - type: Transform + pos: 28.703945,8.421182 + parent: 588 +- proto: StasisBed + entities: + - uid: 1425 + components: + - type: Transform + pos: 13.5,43.5 + parent: 588 +- proto: StimkitFilled + entities: + - uid: 561 + components: + - type: Transform + pos: 30.39083,27.514402 + parent: 588 +- proto: StimpackMini + entities: + - uid: 1879 + components: + - type: Transform + pos: 24.467485,46.702366 + parent: 588 +- proto: Stool + entities: + - uid: 1017 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,25.5 + parent: 588 + - uid: 1018 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,24.5 + parent: 588 + - uid: 1019 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 16.5,28.5 + parent: 588 + - uid: 1020 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,28.5 + parent: 588 + - uid: 1593 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,13.5 + parent: 588 + - uid: 1594 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,15.5 + parent: 588 + - uid: 1595 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,15.5 + parent: 588 + - uid: 1596 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,13.5 + parent: 588 +- proto: SubstationBasic + entities: + - uid: 467 + components: + - type: Transform + pos: 27.5,13.5 + parent: 588 + - uid: 1508 + components: + - type: Transform + pos: 19.5,46.5 + parent: 588 +- proto: SubstationWallBasic + entities: + - uid: 774 + components: + - type: Transform + pos: 27.5,19.5 + parent: 588 + - uid: 972 + components: + - type: Transform + pos: 19.5,32.5 + parent: 588 +- proto: SyringeEphedrine + entities: + - uid: 1475 + components: + - type: Transform + pos: 14.472328,42.917698 + parent: 588 +- proto: Table + entities: + - uid: 525 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 16.5,13.5 + parent: 588 + - uid: 527 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 16.5,12.5 + parent: 588 + - uid: 528 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 17.5,12.5 + parent: 588 + - uid: 535 + components: + - type: Transform + pos: 20.5,14.5 + parent: 588 + - uid: 536 + components: + - type: Transform + pos: 20.5,15.5 + parent: 588 + - uid: 630 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,19.5 + parent: 588 + - uid: 632 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,19.5 + parent: 588 + - uid: 633 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,18.5 + parent: 588 + - uid: 636 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,22.5 + parent: 588 + - uid: 637 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,22.5 + parent: 588 + - uid: 710 + components: + - type: Transform + pos: 18.5,22.5 + parent: 588 + - uid: 711 + components: + - type: Transform + pos: 18.5,21.5 + parent: 588 + - uid: 712 + components: + - type: Transform + pos: 21.5,18.5 + parent: 588 + - uid: 713 + components: + - type: Transform + pos: 22.5,18.5 + parent: 588 + - uid: 714 + components: + - type: Transform + pos: 18.5,18.5 + parent: 588 + - uid: 715 + components: + - type: Transform + pos: 19.5,18.5 + parent: 588 + - uid: 799 + components: + - type: Transform + pos: 33.5,20.5 + parent: 588 + - uid: 1118 + components: + - type: Transform + pos: 22.5,12.5 + parent: 588 + - uid: 1778 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,48.5 + parent: 588 + - uid: 1779 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,48.5 + parent: 588 + - uid: 1780 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,47.5 + parent: 588 +- proto: TableFrame + entities: + - uid: 705 + components: + - type: Transform + pos: 15.5,22.5 + parent: 588 + - uid: 1063 + components: + - type: Transform + pos: 26.5,24.5 + parent: 588 +- proto: TableGlass + entities: + - uid: 1144 + components: + - type: Transform + pos: 30.5,27.5 + parent: 588 + - uid: 1145 + components: + - type: Transform + pos: 30.5,28.5 + parent: 588 + - uid: 1390 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,43.5 + parent: 588 + - uid: 1391 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,42.5 + parent: 588 + - uid: 1398 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,44.5 + parent: 588 + - uid: 1405 + components: + - type: Transform + pos: 14.5,42.5 + parent: 588 + - uid: 1406 + components: + - type: Transform + pos: 14.5,43.5 + parent: 588 + - uid: 1407 + components: + - type: Transform + pos: 12.5,44.5 + parent: 588 +- proto: TableReinforced + entities: + - uid: 924 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,36.5 + parent: 588 + - uid: 925 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,35.5 + parent: 588 + - uid: 926 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,34.5 + parent: 588 + - uid: 1005 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.5,30.5 + parent: 588 + - uid: 1006 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,30.5 + parent: 588 + - uid: 1012 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 14.5,28.5 + parent: 588 + - uid: 1023 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 16.5,24.5 + parent: 588 + - uid: 1235 + components: + - type: Transform + pos: 34.5,24.5 + parent: 588 + - uid: 1567 + components: + - type: Transform + pos: 21.5,47.5 + parent: 588 +- proto: TableReinforcedGlass + entities: + - uid: 1213 + components: + - type: Transform + pos: 10.5,39.5 + parent: 588 + - uid: 1214 + components: + - type: Transform + pos: 11.5,39.5 + parent: 588 + - uid: 1215 + components: + - type: Transform + pos: 12.5,39.5 + parent: 588 +- proto: TableWood + entities: + - uid: 309 + components: + - type: Transform + pos: 20.5,4.5 + parent: 588 + - uid: 310 + components: + - type: Transform + pos: 21.5,4.5 + parent: 588 + - uid: 311 + components: + - type: Transform + pos: 18.5,0.5 + parent: 588 + - uid: 312 + components: + - type: Transform + pos: 21.5,3.5 + parent: 588 + - uid: 317 + components: + - type: Transform + pos: 18.5,1.5 + parent: 588 + - uid: 318 + components: + - type: Transform + pos: 19.5,0.5 + parent: 588 + - uid: 332 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,3.5 + parent: 588 + - uid: 333 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,3.5 + parent: 588 + - uid: 334 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,3.5 + parent: 588 + - uid: 335 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,4.5 + parent: 588 + - uid: 336 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,4.5 + parent: 588 + - uid: 340 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,1.5 + parent: 588 + - uid: 341 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.5,1.5 + parent: 588 + - uid: 342 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,1.5 + parent: 588 + - uid: 343 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 28.5,1.5 + parent: 588 + - uid: 563 + components: + - type: Transform + pos: 13.5,13.5 + parent: 588 + - uid: 564 + components: + - type: Transform + pos: 12.5,13.5 + parent: 588 + - uid: 565 + components: + - type: Transform + pos: 12.5,12.5 + parent: 588 + - uid: 1047 + components: + - type: Transform + pos: 22.5,28.5 + parent: 588 + - uid: 1048 + components: + - type: Transform + pos: 20.5,24.5 + parent: 588 + - uid: 1062 + components: + - type: Transform + pos: 26.5,28.5 + parent: 588 + - uid: 1227 + components: + - type: Transform + pos: 12.5,36.5 + parent: 588 + - uid: 1228 + components: + - type: Transform + pos: 22.5,34.5 + parent: 588 + - uid: 1783 + components: + - type: Transform + pos: 24.5,46.5 + parent: 588 + - uid: 1784 + components: + - type: Transform + pos: 24.5,44.5 + parent: 588 +- proto: TargetHuman + entities: + - uid: 1077 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,35.5 + parent: 588 +- proto: TintedWindow + entities: + - uid: 567 + components: + - type: Transform + pos: 12.5,15.5 + parent: 588 + - uid: 1463 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,43.5 + parent: 588 + - uid: 1464 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 12.5,43.5 + parent: 588 +- proto: ToiletEmpty + entities: + - uid: 932 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,24.5 + parent: 588 + - uid: 933 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,24.5 + parent: 588 + - uid: 934 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,25.5 + parent: 588 +- proto: UniformScrubsColorPurple + entities: + - uid: 1712 + components: + - type: Transform + pos: 10.503376,44.53288 + parent: 588 +- proto: VendingMachineChefvend + entities: + - uid: 532 + components: + - type: Transform + pos: 18.5,12.5 + parent: 588 +- proto: VendingMachineCigs + entities: + - uid: 720 + components: + - type: Transform + pos: 22.5,22.5 + parent: 588 +- proto: VendingMachineCoffee + entities: + - uid: 765 + components: + - type: Transform + pos: 10.5,22.5 + parent: 588 + - uid: 1285 + components: + - type: Transform + pos: 18.5,40.5 + parent: 588 +- proto: VendingMachineDetDrobe + entities: + - uid: 582 + components: + - type: Transform + pos: 10.5,14.5 + parent: 588 +- proto: VendingMachineDinnerware + entities: + - uid: 1781 + components: + - type: Transform + pos: 30.5,46.5 + parent: 588 +- proto: VendingMachineDonut + entities: + - uid: 538 + components: + - type: Transform + pos: 16.5,16.5 + parent: 588 +- proto: VendingMachineLawDrobe + entities: + - uid: 319 + components: + - type: Transform + pos: 18.5,4.5 + parent: 588 +- proto: VendingMachineMedical + entities: + - uid: 1143 + components: + - type: Transform + pos: 28.5,28.5 + parent: 588 +- proto: VendingMachineSec + entities: + - uid: 1013 + components: + - type: Transform + pos: 14.5,27.5 + parent: 588 +- proto: VendingMachineSeedsUnlocked + entities: + - uid: 800 + components: + - type: Transform + pos: 33.5,19.5 + parent: 588 + - uid: 1775 + components: + - type: Transform + pos: 28.5,44.5 + parent: 588 +- proto: WallmountTelescreen + entities: + - uid: 572 + components: + - type: Transform + pos: 13.5,13.5 + parent: 588 +- proto: WallPlastitaniumIndestructible + entities: + - uid: 377 + components: + - type: Transform + pos: 30.5,7.5 + parent: 588 + - uid: 378 + components: + - type: Transform + pos: 29.5,7.5 + parent: 588 + - uid: 379 + components: + - type: Transform + pos: 25.5,9.5 + parent: 588 + - uid: 380 + components: + - type: Transform + pos: 27.5,9.5 + parent: 588 + - uid: 381 + components: + - type: Transform + pos: 27.5,8.5 + parent: 588 + - uid: 382 + components: + - type: Transform + pos: 28.5,9.5 + parent: 588 + - uid: 383 + components: + - type: Transform + pos: 31.5,9.5 + parent: 588 + - uid: 384 + components: + - type: Transform + pos: 31.5,8.5 + parent: 588 + - uid: 385 + components: + - type: Transform + pos: 31.5,7.5 + parent: 588 + - uid: 386 + components: + - type: Transform + pos: 25.5,8.5 + parent: 588 + - uid: 387 + components: + - type: Transform + pos: 33.5,7.5 + parent: 588 + - uid: 388 + components: + - type: Transform + pos: 25.5,7.5 + parent: 588 + - uid: 389 + components: + - type: Transform + pos: 27.5,7.5 + parent: 588 + - uid: 390 + components: + - type: Transform + pos: 30.5,9.5 + parent: 588 + - uid: 391 + components: + - type: Transform + pos: 28.5,7.5 + parent: 588 + - uid: 392 + components: + - type: Transform + pos: 26.5,9.5 + parent: 588 + - uid: 393 + components: + - type: Transform + pos: 33.5,8.5 + parent: 588 + - uid: 394 + components: + - type: Transform + pos: 33.5,9.5 + parent: 588 + - uid: 395 + components: + - type: Transform + pos: 32.5,9.5 + parent: 588 +- proto: WallReinforced + entities: + - uid: 45 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,8.5 + parent: 588 + - uid: 51 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,8.5 + parent: 588 + - uid: 244 + components: + - type: Transform + pos: 6.5,4.5 + parent: 588 + - uid: 245 + components: + - type: Transform + pos: 6.5,3.5 + parent: 588 + - uid: 246 + components: + - type: Transform + pos: 10.5,4.5 + parent: 588 + - uid: 247 + components: + - type: Transform + pos: 10.5,3.5 + parent: 588 + - uid: 266 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,1.5 + parent: 588 + - uid: 267 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,0.5 + parent: 588 + - uid: 268 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,1.5 + parent: 588 + - uid: 269 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,0.5 + parent: 588 + - uid: 291 + components: + - type: Transform + pos: 15.5,6.5 + parent: 588 + - uid: 292 + components: + - type: Transform + pos: 19.5,6.5 + parent: 588 + - uid: 405 + components: + - type: Transform + pos: 15.5,10.5 + parent: 588 + - uid: 406 + components: + - type: Transform + pos: 19.5,10.5 + parent: 588 + - uid: 426 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,9.5 + parent: 588 + - uid: 432 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,7.5 + parent: 588 + - uid: 433 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,9.5 + parent: 588 + - uid: 434 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,7.5 + parent: 588 + - uid: 570 + components: + - type: Transform + pos: 0.5,46.5 + parent: 588 + - uid: 621 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,21.5 + parent: 588 + - uid: 622 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,19.5 + parent: 588 + - uid: 623 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,21.5 + parent: 588 + - uid: 627 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,19.5 + parent: 588 + - uid: 1078 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,35.5 + parent: 588 + - uid: 1330 + components: + - type: Transform + pos: 0.5,44.5 + parent: 588 + - uid: 1332 + components: + - type: Transform + pos: 2.5,42.5 + parent: 588 + - uid: 1334 + components: + - type: Transform + pos: 4.5,42.5 + parent: 588 + - uid: 1335 + components: + - type: Transform + pos: 6.5,44.5 + parent: 588 + - uid: 1337 + components: + - type: Transform + pos: 4.5,48.5 + parent: 588 + - uid: 1338 + components: + - type: Transform + pos: 6.5,46.5 + parent: 588 + - uid: 1340 + components: + - type: Transform + pos: 2.5,48.5 + parent: 588 +- proto: WallSolid + entities: + - uid: 140 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,25.5 + parent: 588 + - uid: 144 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,26.5 + parent: 588 + - uid: 145 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,25.5 + parent: 588 + - uid: 146 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,27.5 + parent: 588 + - uid: 205 + components: + - type: Transform + pos: 8.5,35.5 + parent: 588 + - uid: 206 + components: + - type: Transform + pos: 7.5,35.5 + parent: 588 + - uid: 207 + components: + - type: Transform + pos: 6.5,35.5 + parent: 588 + - uid: 208 + components: + - type: Transform + pos: 4.5,35.5 + parent: 588 + - uid: 210 + components: + - type: Transform + pos: 1.5,34.5 + parent: 588 + - uid: 305 + components: + - type: Transform + pos: 22.5,4.5 + parent: 588 + - uid: 306 + components: + - type: Transform + pos: 22.5,3.5 + parent: 588 + - uid: 307 + components: + - type: Transform + pos: 22.5,0.5 + parent: 588 + - uid: 308 + components: + - type: Transform + pos: 22.5,1.5 + parent: 588 + - uid: 476 + components: + - type: Transform + pos: 25.5,13.5 + parent: 588 + - uid: 481 + components: + - type: Transform + pos: 25.5,15.5 + parent: 588 + - uid: 483 + components: + - type: Transform + pos: 30.5,13.5 + parent: 588 + - uid: 501 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.5,14.5 + parent: 588 + - uid: 510 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,15.5 + parent: 588 + - uid: 749 + components: + - type: Transform + pos: 25.5,19.5 + parent: 588 + - uid: 750 + components: + - type: Transform + pos: 27.5,19.5 + parent: 588 + - uid: 975 + components: + - type: Transform + pos: 19.5,32.5 + parent: 588 + - uid: 995 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,32.5 + parent: 588 + - uid: 1163 + components: + - type: Transform + pos: 8.5,36.5 + parent: 588 + - uid: 1164 + components: + - type: Transform + pos: 3.5,35.5 + parent: 588 + - uid: 1165 + components: + - type: Transform + pos: 2.5,35.5 + parent: 588 + - uid: 1167 + components: + - type: Transform + pos: 1.5,35.5 + parent: 588 + - uid: 1300 + components: + - type: Transform + pos: 25.5,39.5 + parent: 588 + - uid: 1303 + components: + - type: Transform + pos: 28.5,39.5 + parent: 588 + - uid: 1304 + components: + - type: Transform + pos: 29.5,39.5 + parent: 588 + - uid: 1305 + components: + - type: Transform + pos: 28.5,40.5 + parent: 588 + - uid: 1485 + components: + - type: Transform + pos: 17.5,43.5 + parent: 588 + - uid: 1486 + components: + - type: Transform + pos: 17.5,44.5 + parent: 588 + - uid: 1487 + components: + - type: Transform + pos: 18.5,43.5 + parent: 588 + - uid: 1488 + components: + - type: Transform + pos: 20.5,43.5 + parent: 588 + - uid: 1489 + components: + - type: Transform + pos: 21.5,43.5 + parent: 588 + - uid: 1490 + components: + - type: Transform + pos: 21.5,44.5 + parent: 588 + - uid: 1491 + components: + - type: Transform + pos: 18.5,47.5 + parent: 588 + - uid: 1492 + components: + - type: Transform + pos: 19.5,47.5 + parent: 588 + - uid: 1493 + components: + - type: Transform + pos: 20.5,47.5 + parent: 588 +- proto: WallWood + entities: + - uid: 554 + components: + - type: Transform + pos: 9.5,13.5 + parent: 588 + - uid: 555 + components: + - type: Transform + pos: 9.5,14.5 + parent: 588 + - uid: 556 + components: + - type: Transform + pos: 9.5,15.5 + parent: 588 + - uid: 557 + components: + - type: Transform + pos: 10.5,15.5 + parent: 588 + - uid: 558 + components: + - type: Transform + pos: 13.5,15.5 + parent: 588 + - uid: 559 + components: + - type: Transform + pos: 13.5,16.5 + parent: 588 + - uid: 566 + components: + - type: Transform + pos: 9.5,12.5 + parent: 588 +- proto: WardrobePrisonFilled + entities: + - uid: 297 + components: + - type: Transform + pos: 2.5,4.5 + parent: 588 + - uid: 302 + components: + - type: Transform + pos: 4.5,4.5 + parent: 588 + - uid: 303 + components: + - type: Transform + pos: 12.5,4.5 + parent: 588 + - uid: 304 + components: + - type: Transform + pos: 14.5,4.5 + parent: 588 + - uid: 544 + components: + - type: Transform + pos: 16.5,4.5 + parent: 588 + - uid: 545 + components: + - type: Transform + pos: 0.5,4.5 + parent: 588 + - uid: 1769 + components: + - type: Transform + pos: 24.5,43.5 + parent: 588 + - uid: 1770 + components: + - type: Transform + pos: 24.5,47.5 + parent: 588 +- proto: WaterCooler + entities: + - uid: 629 + components: + - type: Transform + pos: 6.5,18.5 + parent: 588 + - uid: 724 + components: + - type: Transform + pos: 19.5,22.5 + parent: 588 + - uid: 1284 + components: + - type: Transform + pos: 17.5,40.5 + parent: 588 + - uid: 1292 + components: + - type: Transform + pos: 21.5,12.5 + parent: 588 +- proto: WaterTankHighCapacity + entities: + - uid: 801 + components: + - type: Transform + pos: 30.5,22.5 + parent: 588 + - uid: 1789 + components: + - type: Transform + pos: 28.5,48.5 + parent: 588 +- proto: WeaponCapacitorRecharger + entities: + - uid: 760 + components: + - type: Transform + pos: 10.5,18.5 + parent: 588 + - uid: 929 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,34.5 + parent: 588 + - uid: 1033 + components: + - type: Transform + pos: 14.5,28.5 + parent: 588 + - uid: 1034 + components: + - type: Transform + pos: 16.5,24.5 + parent: 588 +- proto: WeaponDisablerPractice + entities: + - uid: 547 + components: + - type: Transform + pos: 1.4370823,0.5241035 + parent: 588 + - uid: 930 + components: + - type: Transform + pos: 26.440151,36.61676 + parent: 588 + - uid: 1611 + components: + - type: Transform + pos: 12.371853,10.605072 + parent: 588 +- proto: WeaponLaserCarbinePractice + entities: + - uid: 931 + components: + - type: Transform + pos: 26.596338,36.36132 + parent: 588 + - uid: 1612 + components: + - type: Transform + pos: 22.543945,6.5464144 + parent: 588 +- proto: WeaponShotgunKammerer + entities: + - uid: 583 + components: + - type: Transform + pos: 26.57963,35.4414 + parent: 588 +- proto: WindoorAssemblySecure + entities: + - uid: 696 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 16.5,19.5 + parent: 588 + - uid: 697 + components: + - type: Transform + pos: 12.5,21.5 + parent: 588 + - uid: 1073 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,25.5 + parent: 588 +- proto: WindoorSecure + entities: + - uid: 1761 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 26.5,43.5 + parent: 588 + - uid: 1762 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 26.5,47.5 + parent: 588 +- proto: WindoorSecureBrigLocked + entities: + - uid: 339 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 29.5,2.5 + parent: 588 +- proto: WindoorSecureEngineeringLocked + entities: + - uid: 1569 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,45.5 + parent: 588 + - uid: 1570 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 20.5,45.5 + parent: 588 +- proto: WindoorSecureMedicalLocked + entities: + - uid: 1408 + components: + - type: Transform + pos: 11.5,44.5 + parent: 588 +- proto: WindoorSecureSecurityLocked + entities: + - uid: 252 + components: + - type: Transform + pos: 4.5,3.5 + parent: 588 + - uid: 253 + components: + - type: Transform + pos: 2.5,3.5 + parent: 588 + - uid: 256 + components: + - type: Transform + pos: 16.5,3.5 + parent: 588 + - uid: 274 + components: + - type: Transform + pos: 12.5,3.5 + parent: 588 + - uid: 275 + components: + - type: Transform + pos: 14.5,3.5 + parent: 588 + - uid: 289 + components: + - type: Transform + pos: 0.5,3.5 + parent: 588 + - uid: 698 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 12.5,19.5 + parent: 588 + - uid: 1053 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,25.5 + parent: 588 + - uid: 1054 + components: + - type: Transform + pos: 21.5,27.5 + parent: 588 +- proto: WindowDirectional + entities: + - uid: 480 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,15.5 + parent: 588 + - uid: 482 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,15.5 + parent: 588 + - uid: 540 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,15.5 + parent: 588 + - uid: 541 + components: + - type: Transform + pos: 26.5,13.5 + parent: 588 + - uid: 542 + components: + - type: Transform + pos: 27.5,13.5 + parent: 588 + - uid: 543 + components: + - type: Transform + pos: 28.5,13.5 + parent: 588 + - uid: 575 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 33.5,20.5 + parent: 588 + - uid: 576 + components: + - type: Transform + pos: 26.5,19.5 + parent: 588 + - uid: 803 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 33.5,21.5 + parent: 588 + - uid: 804 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 33.5,19.5 + parent: 588 + - uid: 1087 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,36.5 + parent: 588 + - uid: 1088 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,34.5 + parent: 588 + - uid: 1520 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,46.5 + parent: 588 + - uid: 1521 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 20.5,46.5 + parent: 588 + - uid: 1771 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,44.5 + parent: 588 + - uid: 1773 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,44.5 + parent: 588 + - uid: 1777 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,44.5 + parent: 588 + - uid: 1782 + components: + - type: Transform + pos: 30.5,46.5 + parent: 588 +- proto: WindowFrostedDirectional + entities: + - uid: 936 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,24.5 + parent: 588 + - uid: 937 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,24.5 + parent: 588 + - uid: 938 + components: + - type: Transform + pos: 8.5,27.5 + parent: 588 + - uid: 939 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,25.5 + parent: 588 + - uid: 941 + components: + - type: Transform + pos: 10.5,27.5 + parent: 588 + - uid: 942 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,28.5 + parent: 588 + - uid: 943 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,28.5 + parent: 588 + - uid: 1392 + components: + - type: Transform + pos: 8.5,44.5 + parent: 588 + - uid: 1393 + components: + - type: Transform + pos: 10.5,44.5 + parent: 588 + - uid: 1401 + components: + - type: Transform + pos: 12.5,44.5 + parent: 588 + - uid: 1402 + components: + - type: Transform + pos: 14.5,44.5 + parent: 588 + - uid: 1753 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,43.5 + parent: 588 + - uid: 1754 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,43.5 + parent: 588 + - uid: 1755 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,43.5 + parent: 588 + - uid: 1756 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 26.5,42.5 + parent: 588 + - uid: 1757 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 26.5,48.5 + parent: 588 + - uid: 1758 + components: + - type: Transform + pos: 26.5,47.5 + parent: 588 + - uid: 1759 + components: + - type: Transform + pos: 25.5,47.5 + parent: 588 + - uid: 1760 + components: + - type: Transform + pos: 24.5,47.5 + parent: 588 +- proto: WindowReinforcedDirectional + entities: + - uid: 97 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,14.5 + parent: 588 + - uid: 99 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,14.5 + parent: 588 + - uid: 258 + components: + - type: Transform + pos: 3.5,3.5 + parent: 588 + - uid: 259 + components: + - type: Transform + pos: 5.5,3.5 + parent: 588 + - uid: 260 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,3.5 + parent: 588 + - uid: 261 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,4.5 + parent: 588 + - uid: 270 + components: + - type: Transform + pos: 11.5,3.5 + parent: 588 + - uid: 271 + components: + - type: Transform + pos: 13.5,3.5 + parent: 588 + - uid: 272 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 13.5,3.5 + parent: 588 + - uid: 273 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 13.5,4.5 + parent: 588 + - uid: 277 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,4.5 + parent: 588 + - uid: 278 + components: + - type: Transform + pos: 15.5,3.5 + parent: 588 + - uid: 279 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,4.5 + parent: 588 + - uid: 280 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,3.5 + parent: 588 + - uid: 281 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,3.5 + parent: 588 + - uid: 290 + components: + - type: Transform + pos: 1.5,3.5 + parent: 588 + - uid: 607 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,14.5 + parent: 588 + - uid: 609 + components: + - type: Transform + pos: 4.5,14.5 + parent: 588 + - uid: 611 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,14.5 + parent: 588 + - uid: 612 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,14.5 + parent: 588 + - uid: 614 + components: + - type: Transform + pos: 3.5,14.5 + parent: 588 + - uid: 619 + components: + - type: Transform + pos: 2.5,14.5 + parent: 588 + - uid: 620 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,20.5 + parent: 588 + - uid: 624 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,20.5 + parent: 588 + - uid: 625 + components: + - type: Transform + pos: 2.5,19.5 + parent: 588 + - uid: 626 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,21.5 + parent: 588 + - uid: 648 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.5,19.5 + parent: 588 + - uid: 650 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 13.5,18.5 + parent: 588 + - uid: 651 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,19.5 + parent: 588 + - uid: 652 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,19.5 + parent: 588 + - uid: 653 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,18.5 + parent: 588 + - uid: 654 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 13.5,21.5 + parent: 588 + - uid: 658 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 13.5,22.5 + parent: 588 + - uid: 660 + components: + - type: Transform + pos: 13.5,21.5 + parent: 588 + - uid: 805 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,27.5 + parent: 588 + - uid: 806 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,26.5 + parent: 588 + - uid: 807 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,25.5 + parent: 588 + - uid: 808 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,25.5 + parent: 588 + - uid: 809 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,26.5 + parent: 588 + - uid: 810 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,27.5 + parent: 588 + - uid: 811 + components: + - type: Transform + pos: 1.5,25.5 + parent: 588 + - uid: 812 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,27.5 + parent: 588 + - uid: 1038 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 22.5,25.5 + parent: 588 + - uid: 1039 + components: + - type: Transform + pos: 20.5,27.5 + parent: 588 + - uid: 1042 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,25.5 + parent: 588 + - uid: 1045 + components: + - type: Transform + pos: 22.5,27.5 + parent: 588 + - uid: 1058 + components: + - type: Transform + pos: 24.5,27.5 + parent: 588 + - uid: 1059 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,25.5 + parent: 588 + - uid: 1060 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,25.5 + parent: 588 + - uid: 1399 + components: + - type: Transform + pos: 9.5,44.5 + parent: 588 + - uid: 1400 + components: + - type: Transform + pos: 13.5,44.5 + parent: 588 +- proto: Wrench + entities: + - uid: 424 + components: + - type: Transform + pos: 15.156982,32.526764 + parent: 588 +- proto: Zipties + entities: + - uid: 1156 + components: + - type: Transform + pos: 15.332411,0.52492684 + parent: 588 +- proto: ZiptiesBroken + entities: + - uid: 48 + components: + - type: Transform + pos: 5.2591753,3.5817227 + parent: 588 + - uid: 706 + components: + - type: Transform + pos: 16.06022,21.977758 + parent: 588 +... diff --git a/Resources/Maps/Ruins/DeltaV/biodome_satellite.yml b/Resources/Maps/Ruins/DeltaV/biodome_satellite.yml index 02d55a3cf09..4631b1aad82 100644 --- a/Resources/Maps/Ruins/DeltaV/biodome_satellite.yml +++ b/Resources/Maps/Ruins/DeltaV/biodome_satellite.yml @@ -73,6 +73,10 @@ entities: - type: Gravity gravityShakeSound: !type:SoundPathSpecifier path: /Audio/Effects/alert.ogg + - type: DeviceNetwork + configurators: [] + deviceLists: [] + transmitFrequencyId: ShuttleTimer - type: DecalGrid chunkCollection: version: 2 diff --git a/Resources/Maps/Ruins/DeltaV/old_ai_sat.yml b/Resources/Maps/Ruins/DeltaV/old_ai_sat.yml index 2b4110b7814..3d0ef0b73b1 100644 --- a/Resources/Maps/Ruins/DeltaV/old_ai_sat.yml +++ b/Resources/Maps/Ruins/DeltaV/old_ai_sat.yml @@ -81,6 +81,10 @@ entities: - type: Gravity gravityShakeSound: !type:SoundPathSpecifier path: /Audio/Effects/alert.ogg + - type: DeviceNetwork + configurators: [] + deviceLists: [] + transmitFrequencyId: ShuttleTimer - type: DecalGrid chunkCollection: version: 2 diff --git a/Resources/Maps/Salvage/DeltaV/DV-atlas-conference-room.yml b/Resources/Maps/Salvage/DeltaV/DV-atlas-conference-room.yml index c01a214ca52..4664f07f40a 100644 --- a/Resources/Maps/Salvage/DeltaV/DV-atlas-conference-room.yml +++ b/Resources/Maps/Salvage/DeltaV/DV-atlas-conference-room.yml @@ -55,6 +55,10 @@ entities: - type: Gravity gravityShakeSound: !type:SoundPathSpecifier path: /Audio/Effects/alert.ogg + - type: DeviceNetwork + configurators: [] + deviceLists: [] + transmitFrequencyId: ShuttleTimer - type: DecalGrid chunkCollection: version: 2 diff --git a/Resources/Maps/Salvage/small-3.yml b/Resources/Maps/Salvage/small-3.yml index 7a29b665ff6..cc015fe27b9 100644 --- a/Resources/Maps/Salvage/small-3.yml +++ b/Resources/Maps/Salvage/small-3.yml @@ -926,176 +926,132 @@ entities: rot: 3.141592653589793 rad pos: 1.5,-10.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 4 components: - type: Transform rot: 3.141592653589793 rad pos: -6.5,5.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 6 components: - type: Transform rot: 3.141592653589793 rad pos: 0.5,6.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 7 components: - type: Transform rot: -1.5707963267948966 rad pos: -5.5,8.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 14 components: - type: Transform rot: -1.5707963267948966 rad pos: -0.5,6.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 17 components: - type: Transform rot: -1.5707963267948966 rad pos: 3.5,6.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 24 components: - type: Transform rot: -1.5707963267948966 rad pos: 3.5,5.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 25 components: - type: Transform rot: 3.141592653589793 rad pos: 3.5,7.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 26 components: - type: Transform rot: 3.141592653589793 rad pos: 1.5,7.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 29 components: - type: Transform rot: 3.141592653589793 rad pos: -4.5,5.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 30 components: - type: Transform rot: -1.5707963267948966 rad pos: -7.5,6.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 31 components: - type: Transform rot: 3.141592653589793 rad pos: 2.5,7.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 37 components: - type: Transform rot: -1.5707963267948966 rad pos: 4.5,8.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 38 components: - type: Transform rot: 3.141592653589793 rad pos: 0.5,7.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 44 components: - type: Transform rot: -1.5707963267948966 rad pos: -3.5,6.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 48 components: - type: Transform rot: -1.5707963267948966 rad pos: -3.5,7.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 49 components: - type: Transform rot: -1.5707963267948966 rad pos: -6.5,6.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 50 components: - type: Transform rot: 3.141592653589793 rad pos: -5.5,5.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 51 components: - type: Transform rot: -1.5707963267948966 rad pos: -7.5,4.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 52 components: - type: Transform rot: -1.5707963267948966 rad pos: -7.5,5.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 53 components: - type: Transform rot: 3.141592653589793 rad pos: -7.5,4.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 66 components: - type: Transform rot: -1.5707963267948966 rad pos: -2.5,7.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 75 components: - type: Transform @@ -1108,8 +1064,6 @@ entities: rot: -1.5707963267948966 rad pos: -2.5,5.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 78 components: - type: Transform @@ -1122,144 +1076,108 @@ entities: rot: -1.5707963267948966 rad pos: -3.5,5.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 80 components: - type: Transform rot: -1.5707963267948966 rad pos: 3.5,7.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 97 components: - type: Transform rot: 3.141592653589793 rad pos: -6.5,7.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 101 components: - type: Transform rot: 3.141592653589793 rad pos: -7.5,7.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 105 components: - type: Transform rot: 3.141592653589793 rad pos: -0.5,6.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 106 components: - type: Transform rot: -1.5707963267948966 rad pos: -2.5,6.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 107 components: - type: Transform rot: 3.141592653589793 rad pos: 1.5,6.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 108 components: - type: Transform rot: -1.5707963267948966 rad pos: -1.5,8.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 110 components: - type: Transform rot: 3.141592653589793 rad pos: -2.5,7.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 112 components: - type: Transform rot: -1.5707963267948966 rad pos: -5.5,7.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 115 components: - type: Transform rot: -1.5707963267948966 rad pos: -3.5,8.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 116 components: - type: Transform rot: -1.5707963267948966 rad pos: -4.5,7.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 117 components: - type: Transform rot: -1.5707963267948966 rad pos: -4.5,6.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 118 components: - type: Transform rot: -1.5707963267948966 rad pos: -0.5,7.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 119 components: - type: Transform rot: -1.5707963267948966 rad pos: -7.5,7.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 120 components: - type: Transform rot: -1.5707963267948966 rad pos: 1.5,6.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 121 components: - type: Transform rot: 3.141592653589793 rad pos: 0.5,5.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 122 components: - type: Transform rot: -1.5707963267948966 rad pos: 0.5,5.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 123 components: - type: Transform @@ -1278,48 +1196,36 @@ entities: rot: -1.5707963267948966 rad pos: -1.5,5.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 126 components: - type: Transform rot: -1.5707963267948966 rad pos: -1.5,6.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 127 components: - type: Transform rot: 3.141592653589793 rad pos: -6.5,3.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 128 components: - type: Transform rot: 3.141592653589793 rad pos: -5.5,3.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 129 components: - type: Transform rot: 3.141592653589793 rad pos: -4.5,3.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 130 components: - type: Transform rot: 3.141592653589793 rad pos: -3.5,3.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 131 components: - type: Transform @@ -1332,88 +1238,66 @@ entities: rot: 3.141592653589793 rad pos: -1.5,3.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 133 components: - type: Transform rot: 3.141592653589793 rad pos: -2.5,3.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 134 components: - type: Transform rot: -1.5707963267948966 rad pos: -0.5,3.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 135 components: - type: Transform rot: -1.5707963267948966 rad pos: -0.5,2.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 136 components: - type: Transform rot: 3.141592653589793 rad pos: -0.5,2.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 137 components: - type: Transform rot: 3.141592653589793 rad pos: -0.5,1.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 138 components: - type: Transform rot: 3.141592653589793 rad pos: 0.5,2.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 139 components: - type: Transform rot: 3.141592653589793 rad pos: 1.5,2.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 140 components: - type: Transform rot: 3.141592653589793 rad pos: 0.5,3.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 141 components: - type: Transform rot: 3.141592653589793 rad pos: 1.5,3.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 142 components: - type: Transform rot: 3.141592653589793 rad pos: 2.5,3.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 143 components: - type: Transform @@ -1444,40 +1328,30 @@ entities: rot: -1.5707963267948966 rad pos: 2.5,5.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 148 components: - type: Transform rot: 3.141592653589793 rad pos: 2.5,2.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 149 components: - type: Transform rot: 3.141592653589793 rad pos: 3.5,2.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 150 components: - type: Transform rot: -1.5707963267948966 rad pos: 4.5,3.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 151 components: - type: Transform rot: 3.141592653589793 rad pos: 4.5,3.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 152 components: - type: Transform @@ -1490,112 +1364,84 @@ entities: rot: -1.5707963267948966 rad pos: 5.5,5.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 154 components: - type: Transform rot: 3.141592653589793 rad pos: 4.5,5.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 155 components: - type: Transform rot: -1.5707963267948966 rad pos: 4.5,6.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 156 components: - type: Transform rot: 3.141592653589793 rad pos: 4.5,6.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 157 components: - type: Transform rot: -1.5707963267948966 rad pos: 5.5,7.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 158 components: - type: Transform rot: 3.141592653589793 rad pos: 5.5,7.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 159 components: - type: Transform rot: 3.141592653589793 rad pos: 6.5,7.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 160 components: - type: Transform rot: -1.5707963267948966 rad pos: 8.5,8.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 161 components: - type: Transform rot: -1.5707963267948966 rad pos: 8.5,7.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 162 components: - type: Transform rot: 3.141592653589793 rad pos: 7.5,6.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 163 components: - type: Transform rot: 3.141592653589793 rad pos: 6.5,6.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 164 components: - type: Transform rot: -1.5707963267948966 rad pos: 6.5,6.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 165 components: - type: Transform rot: 3.141592653589793 rad pos: 6.5,5.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 166 components: - type: Transform rot: -1.5707963267948966 rad pos: 6.5,5.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 167 components: - type: Transform @@ -1614,56 +1460,42 @@ entities: rot: -1.5707963267948966 rad pos: 8.5,5.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 170 components: - type: Transform rot: -1.5707963267948966 rad pos: 8.5,6.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 171 components: - type: Transform rot: 3.141592653589793 rad pos: 9.5,7.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 172 components: - type: Transform rot: -1.5707963267948966 rad pos: 10.5,6.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 173 components: - type: Transform rot: -1.5707963267948966 rad pos: 10.5,7.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 174 components: - type: Transform rot: -1.5707963267948966 rad pos: 9.5,6.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 175 components: - type: Transform rot: -1.5707963267948966 rad pos: 9.5,7.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 176 components: - type: Transform @@ -1676,8 +1508,6 @@ entities: rot: -1.5707963267948966 rad pos: 9.5,5.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 178 components: - type: Transform @@ -1690,1104 +1520,828 @@ entities: rot: 3.141592653589793 rad pos: 9.5,3.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 180 components: - type: Transform rot: -1.5707963267948966 rad pos: 10.5,3.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 181 components: - type: Transform rot: 3.141592653589793 rad pos: 8.5,3.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 182 components: - type: Transform rot: 3.141592653589793 rad pos: 7.5,3.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 183 components: - type: Transform rot: 3.141592653589793 rad pos: 6.5,3.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 184 components: - type: Transform rot: 3.141592653589793 rad pos: 10.5,1.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 185 components: - type: Transform rot: 3.141592653589793 rad pos: 9.5,1.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 186 components: - type: Transform rot: -1.5707963267948966 rad pos: 9.5,2.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 187 components: - type: Transform rot: 3.141592653589793 rad pos: 8.5,2.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 188 components: - type: Transform rot: -1.5707963267948966 rad pos: 7.5,3.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 189 components: - type: Transform rot: -1.5707963267948966 rad pos: 7.5,2.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 190 components: - type: Transform rot: 3.141592653589793 rad pos: 7.5,1.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 191 components: - type: Transform rot: -1.5707963267948966 rad pos: 7.5,1.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 192 components: - type: Transform rot: -1.5707963267948966 rad pos: 7.5,0.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 193 components: - type: Transform rot: -1.5707963267948966 rad pos: 10.5,0.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 194 components: - type: Transform rot: -1.5707963267948966 rad pos: 10.5,-0.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 195 components: - type: Transform rot: -1.5707963267948966 rad pos: 10.5,-1.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 196 components: - type: Transform rot: 3.141592653589793 rad pos: 10.5,-2.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 197 components: - type: Transform rot: -1.5707963267948966 rad pos: 9.5,-1.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 198 components: - type: Transform rot: -1.5707963267948966 rad pos: 9.5,-0.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 199 components: - type: Transform rot: -1.5707963267948966 rad pos: 9.5,0.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 200 components: - type: Transform rot: 3.141592653589793 rad pos: 8.5,-2.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 201 components: - type: Transform rot: 3.141592653589793 rad pos: 8.5,0.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 202 components: - type: Transform rot: -1.5707963267948966 rad pos: 8.5,-0.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 203 components: - type: Transform rot: 3.141592653589793 rad pos: 7.5,-1.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 204 components: - type: Transform rot: -1.5707963267948966 rad pos: 8.5,0.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 205 components: - type: Transform rot: 3.141592653589793 rad pos: 6.5,-1.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 206 components: - type: Transform rot: -1.5707963267948966 rad pos: 7.5,-1.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 207 components: - type: Transform rot: -1.5707963267948966 rad pos: 6.5,-0.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 208 components: - type: Transform rot: -1.5707963267948966 rad pos: 6.5,0.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 209 components: - type: Transform rot: -1.5707963267948966 rad pos: 6.5,1.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 210 components: - type: Transform rot: -1.5707963267948966 rad pos: 6.5,2.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 211 components: - type: Transform rot: -1.5707963267948966 rad pos: 6.5,3.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 212 components: - type: Transform rot: 3.141592653589793 rad pos: 5.5,2.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 213 components: - type: Transform rot: 3.141592653589793 rad pos: 5.5,0.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 214 components: - type: Transform rot: 3.141592653589793 rad pos: 4.5,1.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 215 components: - type: Transform rot: -1.5707963267948966 rad pos: 4.5,1.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 216 components: - type: Transform rot: -1.5707963267948966 rad pos: 4.5,0.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 217 components: - type: Transform rot: 3.141592653589793 rad pos: 4.5,-0.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 218 components: - type: Transform rot: -1.5707963267948966 rad pos: 5.5,-0.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 219 components: - type: Transform rot: -1.5707963267948966 rad pos: 5.5,-1.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 220 components: - type: Transform rot: 3.141592653589793 rad pos: 5.5,-2.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 221 components: - type: Transform rot: -1.5707963267948966 rad pos: 6.5,-2.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 222 components: - type: Transform rot: 3.141592653589793 rad pos: 6.5,-3.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 223 components: - type: Transform rot: 3.141592653589793 rad pos: 7.5,-3.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 224 components: - type: Transform rot: 3.141592653589793 rad pos: 8.5,-3.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 225 components: - type: Transform rot: 3.141592653589793 rad pos: 9.5,-3.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 226 components: - type: Transform rot: 3.141592653589793 rad pos: -8.5,2.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 227 components: - type: Transform rot: 3.141592653589793 rad pos: -7.5,2.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 228 components: - type: Transform rot: 3.141592653589793 rad pos: -6.5,2.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 229 components: - type: Transform rot: 3.141592653589793 rad pos: -5.5,2.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 230 components: - type: Transform rot: -1.5707963267948966 rad pos: -4.5,2.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 231 components: - type: Transform rot: -1.5707963267948966 rad pos: -4.5,1.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 232 components: - type: Transform rot: -1.5707963267948966 rad pos: -4.5,0.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 233 components: - type: Transform rot: 3.141592653589793 rad pos: -4.5,0.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 234 components: - type: Transform rot: 3.141592653589793 rad pos: -3.5,0.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 235 components: - type: Transform rot: -1.5707963267948966 rad pos: -2.5,1.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 236 components: - type: Transform rot: -1.5707963267948966 rad pos: -2.5,0.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 237 components: - type: Transform rot: -1.5707963267948966 rad pos: -3.5,2.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 238 components: - type: Transform rot: 3.141592653589793 rad pos: -3.5,2.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 239 components: - type: Transform rot: 3.141592653589793 rad pos: -2.5,2.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 240 components: - type: Transform rot: -1.5707963267948966 rad pos: -1.5,2.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 241 components: - type: Transform rot: -1.5707963267948966 rad pos: -1.5,1.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 242 components: - type: Transform rot: -1.5707963267948966 rad pos: -1.5,0.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 243 components: - type: Transform rot: -1.5707963267948966 rad pos: -1.5,-0.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 244 components: - type: Transform rot: 3.141592653589793 rad pos: -2.5,-1.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 245 components: - type: Transform rot: 3.141592653589793 rad pos: -3.5,-1.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 246 components: - type: Transform rot: -1.5707963267948966 rad pos: -3.5,-0.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 247 components: - type: Transform rot: 3.141592653589793 rad pos: -4.5,-0.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 248 components: - type: Transform rot: 3.141592653589793 rad pos: -0.5,0.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 249 components: - type: Transform rot: -1.5707963267948966 rad pos: -0.5,0.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 250 components: - type: Transform rot: -1.5707963267948966 rad pos: -0.5,-0.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 251 components: - type: Transform rot: -1.5707963267948966 rad pos: -0.5,-1.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 252 components: - type: Transform rot: 3.141592653589793 rad pos: -1.5,-2.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 253 components: - type: Transform rot: -1.5707963267948966 rad pos: -1.5,-1.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 254 components: - type: Transform rot: 3.141592653589793 rad pos: -7.5,1.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 255 components: - type: Transform rot: 3.141592653589793 rad pos: -6.5,1.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 256 components: - type: Transform rot: -1.5707963267948966 rad pos: -5.5,1.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 257 components: - type: Transform rot: 3.141592653589793 rad pos: -6.5,0.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 258 components: - type: Transform rot: -1.5707963267948966 rad pos: -6.5,0.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 259 components: - type: Transform rot: 3.141592653589793 rad pos: -7.5,-0.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 260 components: - type: Transform rot: -1.5707963267948966 rad pos: -7.5,-0.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 261 components: - type: Transform rot: 3.141592653589793 rad pos: -8.5,0.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 262 components: - type: Transform rot: -1.5707963267948966 rad pos: -7.5,-1.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 263 components: - type: Transform rot: -1.5707963267948966 rad pos: -7.5,-2.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 264 components: - type: Transform rot: -1.5707963267948966 rad pos: -7.5,-3.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 265 components: - type: Transform rot: 3.141592653589793 rad pos: -5.5,-0.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 266 components: - type: Transform rot: -1.5707963267948966 rad pos: -5.5,-0.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 267 components: - type: Transform rot: -1.5707963267948966 rad pos: -5.5,-1.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 268 components: - type: Transform rot: 3.141592653589793 rad pos: -6.5,-2.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 269 components: - type: Transform rot: 3.141592653589793 rad pos: -6.5,-1.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 270 components: - type: Transform rot: 3.141592653589793 rad pos: -7.5,-3.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 271 components: - type: Transform rot: 3.141592653589793 rad pos: -6.5,-3.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 272 components: - type: Transform rot: 3.141592653589793 rad pos: -5.5,-3.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 273 components: - type: Transform rot: -1.5707963267948966 rad pos: -4.5,-2.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 274 components: - type: Transform rot: -1.5707963267948966 rad pos: -4.5,-1.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 275 components: - type: Transform rot: 3.141592653589793 rad pos: -4.5,-2.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 276 components: - type: Transform rot: 3.141592653589793 rad pos: -3.5,-2.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 277 components: - type: Transform rot: -1.5707963267948966 rad pos: -2.5,-2.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 278 components: - type: Transform rot: 3.141592653589793 rad pos: -3.5,-3.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 279 components: - type: Transform rot: 3.141592653589793 rad pos: -2.5,-3.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 280 components: - type: Transform rot: 3.141592653589793 rad pos: -1.5,-3.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 281 components: - type: Transform rot: 3.141592653589793 rad pos: -0.5,-2.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 282 components: - type: Transform rot: 3.141592653589793 rad pos: 0.5,-2.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 283 components: - type: Transform rot: -1.5707963267948966 rad pos: 0.5,-2.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 284 components: - type: Transform rot: -1.5707963267948966 rad pos: 0.5,-3.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 285 components: - type: Transform rot: 3.141592653589793 rad pos: -0.5,-4.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 286 components: - type: Transform rot: -1.5707963267948966 rad pos: 0.5,-0.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 287 components: - type: Transform rot: 3.141592653589793 rad pos: 0.5,-1.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 288 components: - type: Transform rot: -1.5707963267948966 rad pos: 1.5,-0.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 289 components: - type: Transform rot: -1.5707963267948966 rad pos: 1.5,0.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 290 components: - type: Transform rot: -1.5707963267948966 rad pos: 1.5,1.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 291 components: - type: Transform rot: -1.5707963267948966 rad pos: 1.5,2.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 292 components: - type: Transform rot: -1.5707963267948966 rad pos: 2.5,0.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 293 components: - type: Transform rot: -1.5707963267948966 rad pos: 2.5,1.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 294 components: - type: Transform rot: 3.141592653589793 rad pos: 2.5,-0.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 295 components: - type: Transform rot: 3.141592653589793 rad pos: 3.5,-0.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 296 components: - type: Transform rot: -1.5707963267948966 rad pos: 3.5,1.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 297 components: - type: Transform rot: -1.5707963267948966 rad pos: 3.5,2.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 298 components: - type: Transform rot: 3.141592653589793 rad pos: 1.5,-1.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 299 components: - type: Transform rot: -1.5707963267948966 rad pos: 2.5,-1.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 300 components: - type: Transform rot: -1.5707963267948966 rad pos: 2.5,-2.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 301 components: - type: Transform rot: 3.141592653589793 rad pos: 1.5,-3.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 302 components: - type: Transform rot: -1.5707963267948966 rad pos: 1.5,-3.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 303 components: - type: Transform rot: -1.5707963267948966 rad pos: 1.5,-4.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 304 components: - type: Transform rot: 3.141592653589793 rad pos: 2.5,-4.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 305 components: - type: Transform rot: -1.5707963267948966 rad pos: 3.5,-4.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 306 components: - type: Transform rot: -1.5707963267948966 rad pos: 3.5,-3.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 307 components: - type: Transform rot: -1.5707963267948966 rad pos: 3.5,-2.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 308 components: - type: Transform rot: -1.5707963267948966 rad pos: 3.5,-1.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 309 components: - type: Transform rot: -1.5707963267948966 rad pos: 3.5,-0.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 310 components: - type: Transform rot: 3.141592653589793 rad pos: 3.5,-5.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 311 components: - type: Transform rot: 3.141592653589793 rad pos: 4.5,-5.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 312 components: - type: Transform rot: 3.141592653589793 rad pos: 5.5,-5.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 313 components: - type: Transform rot: -1.5707963267948966 rad pos: 5.5,-5.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 314 components: - type: Transform rot: 3.141592653589793 rad pos: 4.5,-4.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 315 components: - type: Transform rot: -1.5707963267948966 rad pos: 4.5,-3.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 316 components: - type: Transform rot: -1.5707963267948966 rad pos: 4.5,-2.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 317 components: - type: Transform @@ -2800,982 +2354,736 @@ entities: rot: 3.141592653589793 rad pos: 4.5,-3.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 319 components: - type: Transform rot: 3.141592653589793 rad pos: 5.5,-3.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 320 components: - type: Transform rot: -1.5707963267948966 rad pos: 6.5,-4.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 321 components: - type: Transform rot: 3.141592653589793 rad pos: 6.5,-4.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 322 components: - type: Transform rot: 3.141592653589793 rad pos: 7.5,-4.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 323 components: - type: Transform rot: 3.141592653589793 rad pos: 8.5,-4.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 324 components: - type: Transform rot: 3.141592653589793 rad pos: 9.5,-4.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 325 components: - type: Transform rot: 3.141592653589793 rad pos: 10.5,-5.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 326 components: - type: Transform rot: -1.5707963267948966 rad pos: 9.5,-4.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 327 components: - type: Transform rot: -1.5707963267948966 rad pos: 9.5,-5.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 328 components: - type: Transform rot: 3.141592653589793 rad pos: 9.5,-6.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 329 components: - type: Transform rot: 3.141592653589793 rad pos: 8.5,-6.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 330 components: - type: Transform rot: -1.5707963267948966 rad pos: 8.5,-6.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 331 components: - type: Transform rot: -1.5707963267948966 rad pos: 8.5,-7.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 332 components: - type: Transform rot: -1.5707963267948966 rad pos: 8.5,-8.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 333 components: - type: Transform rot: -1.5707963267948966 rad pos: 9.5,-7.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 334 components: - type: Transform rot: 3.141592653589793 rad pos: 9.5,-7.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 335 components: - type: Transform rot: 3.141592653589793 rad pos: 10.5,-7.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 336 components: - type: Transform rot: -1.5707963267948966 rad pos: 10.5,-8.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 337 components: - type: Transform rot: 3.141592653589793 rad pos: 9.5,-9.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 338 components: - type: Transform rot: 3.141592653589793 rad pos: 8.5,-9.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 339 components: - type: Transform rot: -1.5707963267948966 rad pos: 8.5,-9.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 340 components: - type: Transform rot: 3.141592653589793 rad pos: 10.5,-10.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 341 components: - type: Transform rot: -1.5707963267948966 rad pos: 9.5,-10.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 342 components: - type: Transform rot: -1.5707963267948966 rad pos: 7.5,-10.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 343 components: - type: Transform rot: 3.141592653589793 rad pos: 7.5,-9.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 344 components: - type: Transform rot: 3.141592653589793 rad pos: 6.5,-9.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 345 components: - type: Transform rot: -1.5707963267948966 rad pos: 6.5,-9.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 346 components: - type: Transform rot: 3.141592653589793 rad pos: 5.5,-10.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 347 components: - type: Transform rot: 3.141592653589793 rad pos: 4.5,-10.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 348 components: - type: Transform rot: 3.141592653589793 rad pos: 3.5,-10.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 349 components: - type: Transform rot: -1.5707963267948966 rad pos: 3.5,-10.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 350 components: - type: Transform rot: -1.5707963267948966 rad pos: 1.5,-10.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 351 components: - type: Transform rot: -1.5707963267948966 rad pos: 2.5,-9.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 352 components: - type: Transform rot: 3.141592653589793 rad pos: 2.5,-9.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 353 components: - type: Transform rot: 3.141592653589793 rad pos: 3.5,-9.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 354 components: - type: Transform rot: 3.141592653589793 rad pos: 4.5,-9.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 355 components: - type: Transform rot: -1.5707963267948966 rad pos: 5.5,-8.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 356 components: - type: Transform rot: 3.141592653589793 rad pos: 5.5,-8.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 357 components: - type: Transform rot: 3.141592653589793 rad pos: 6.5,-8.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 358 components: - type: Transform rot: -1.5707963267948966 rad pos: 7.5,-7.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 359 components: - type: Transform rot: -1.5707963267948966 rad pos: 7.5,-6.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 360 components: - type: Transform rot: -1.5707963267948966 rad pos: 7.5,-5.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 361 components: - type: Transform rot: 3.141592653589793 rad pos: 7.5,-5.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 362 components: - type: Transform rot: 3.141592653589793 rad pos: 6.5,-6.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 363 components: - type: Transform rot: -1.5707963267948966 rad pos: 6.5,-6.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 364 components: - type: Transform rot: -1.5707963267948966 rad pos: 5.5,-7.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 365 components: - type: Transform rot: 3.141592653589793 rad pos: 4.5,-7.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 366 components: - type: Transform rot: -1.5707963267948966 rad pos: 4.5,-7.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 367 components: - type: Transform rot: 3.141592653589793 rad pos: 3.5,-8.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 368 components: - type: Transform rot: -1.5707963267948966 rad pos: 2.5,-8.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 369 components: - type: Transform rot: -1.5707963267948966 rad pos: 2.5,-7.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 370 components: - type: Transform rot: 3.141592653589793 rad pos: 2.5,-7.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 371 components: - type: Transform rot: -1.5707963267948966 rad pos: 4.5,-6.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 372 components: - type: Transform rot: 3.141592653589793 rad pos: 3.5,-6.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 373 components: - type: Transform rot: 3.141592653589793 rad pos: 2.5,-6.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 374 components: - type: Transform rot: -1.5707963267948966 rad pos: 2.5,-5.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 375 components: - type: Transform rot: 3.141592653589793 rad pos: 1.5,-5.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 376 components: - type: Transform rot: 3.141592653589793 rad pos: 0.5,-5.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 377 components: - type: Transform rot: 3.141592653589793 rad pos: -0.5,-5.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 378 components: - type: Transform rot: -1.5707963267948966 rad pos: -0.5,-5.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 379 components: - type: Transform rot: 3.141592653589793 rad pos: 0.5,-6.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 380 components: - type: Transform rot: -1.5707963267948966 rad pos: 1.5,-6.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 381 components: - type: Transform rot: -1.5707963267948966 rad pos: 1.5,-7.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 382 components: - type: Transform rot: -1.5707963267948966 rad pos: 1.5,-8.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 383 components: - type: Transform rot: -1.5707963267948966 rad pos: 1.5,-9.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 384 components: - type: Transform rot: 3.141592653589793 rad pos: -8.5,-10.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 385 components: - type: Transform rot: 3.141592653589793 rad pos: -7.5,-10.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 386 components: - type: Transform rot: -1.5707963267948966 rad pos: -7.5,-8.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 387 components: - type: Transform rot: 3.141592653589793 rad pos: -7.5,-9.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 388 components: - type: Transform rot: 3.141592653589793 rad pos: -6.5,-9.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 389 components: - type: Transform rot: -1.5707963267948966 rad pos: -5.5,-10.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 390 components: - type: Transform rot: -1.5707963267948966 rad pos: -5.5,-9.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 391 components: - type: Transform rot: -1.5707963267948966 rad pos: -5.5,-8.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 392 components: - type: Transform rot: -1.5707963267948966 rad pos: -6.5,-7.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 393 components: - type: Transform rot: 3.141592653589793 rad pos: -7.5,-7.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 394 components: - type: Transform rot: 3.141592653589793 rad pos: -6.5,-7.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 395 components: - type: Transform rot: 3.141592653589793 rad pos: -5.5,-7.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 396 components: - type: Transform rot: -1.5707963267948966 rad pos: -4.5,-7.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 397 components: - type: Transform rot: -1.5707963267948966 rad pos: -4.5,-8.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 398 components: - type: Transform rot: 3.141592653589793 rad pos: -4.5,-10.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 399 components: - type: Transform rot: 3.141592653589793 rad pos: -3.5,-10.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 400 components: - type: Transform rot: -1.5707963267948966 rad pos: -2.5,-10.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 401 components: - type: Transform rot: -1.5707963267948966 rad pos: -3.5,-9.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 402 components: - type: Transform rot: -1.5707963267948966 rad pos: -5.5,-6.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 403 components: - type: Transform rot: 3.141592653589793 rad pos: -6.5,-6.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 404 components: - type: Transform rot: 3.141592653589793 rad pos: -7.5,-6.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 405 components: - type: Transform rot: 3.141592653589793 rad pos: -8.5,-6.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 406 components: - type: Transform rot: -1.5707963267948966 rad pos: -6.5,-5.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 407 components: - type: Transform rot: 3.141592653589793 rad pos: -7.5,-5.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 408 components: - type: Transform rot: 3.141592653589793 rad pos: -7.5,-4.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 409 components: - type: Transform rot: 3.141592653589793 rad pos: -6.5,-4.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 410 components: - type: Transform rot: -1.5707963267948966 rad pos: -5.5,-4.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 411 components: - type: Transform rot: 3.141592653589793 rad pos: -5.5,-5.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 412 components: - type: Transform rot: -1.5707963267948966 rad pos: -4.5,-5.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 413 components: - type: Transform rot: 3.141592653589793 rad pos: -4.5,-5.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 414 components: - type: Transform rot: 3.141592653589793 rad pos: -3.5,-5.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 415 components: - type: Transform rot: -1.5707963267948966 rad pos: -2.5,-5.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 416 components: - type: Transform rot: 3.141592653589793 rad pos: -2.5,-6.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 417 components: - type: Transform rot: -1.5707963267948966 rad pos: -1.5,-6.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 418 components: - type: Transform rot: 3.141592653589793 rad pos: -1.5,-7.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 419 components: - type: Transform rot: 3.141592653589793 rad pos: -0.5,-7.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 420 components: - type: Transform rot: 3.141592653589793 rad pos: -4.5,-6.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 421 components: - type: Transform rot: -1.5707963267948966 rad pos: -3.5,-6.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 422 components: - type: Transform rot: -1.5707963267948966 rad pos: -3.5,-7.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 423 components: - type: Transform rot: 3.141592653589793 rad pos: -3.5,-8.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 424 components: - type: Transform rot: -1.5707963267948966 rad pos: -2.5,-8.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 425 components: - type: Transform rot: -1.5707963267948966 rad pos: -2.5,-7.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 426 components: - type: Transform rot: -1.5707963267948966 rad pos: -4.5,-3.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 427 components: - type: Transform rot: 3.141592653589793 rad pos: -4.5,-4.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 428 components: - type: Transform rot: 3.141592653589793 rad pos: -3.5,-4.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 429 components: - type: Transform rot: 3.141592653589793 rad pos: -2.5,-4.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 430 components: - type: Transform rot: -1.5707963267948966 rad pos: -1.5,-4.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 431 components: - type: Transform rot: 3.141592653589793 rad pos: -1.5,-5.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 432 components: - type: Transform rot: -1.5707963267948966 rad pos: 0.5,-9.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 433 components: - type: Transform rot: -1.5707963267948966 rad pos: 0.5,-8.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 434 components: - type: Transform rot: 3.141592653589793 rad pos: -0.5,-8.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 435 components: - type: Transform rot: 3.141592653589793 rad pos: -1.5,-8.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 436 components: - type: Transform rot: 3.141592653589793 rad pos: -2.5,-8.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 437 components: - type: Transform rot: 3.141592653589793 rad pos: -0.5,-10.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 438 components: - type: Transform rot: -1.5707963267948966 rad pos: -0.5,-9.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 439 components: - type: Transform rot: -1.5707963267948966 rad pos: -1.5,-9.5 parent: 10 - - type: Godmode - oldDamage: {} - uid: 440 components: - type: Transform rot: 3.141592653589793 rad pos: -2.5,-9.5 parent: 10 - - type: Godmode - oldDamage: {} ... diff --git a/Resources/Maps/Salvage/vegan-meatball.yml b/Resources/Maps/Salvage/vegan-meatball.yml index 824e3d0b7ea..ab67aabadbf 100644 --- a/Resources/Maps/Salvage/vegan-meatball.yml +++ b/Resources/Maps/Salvage/vegan-meatball.yml @@ -505,7 +505,7 @@ entities: chemicals: THC: Inherent: True - PotencyDivisor: 10 + potencyDivisor: 10 Max: 10 Min: 1 productPrototypes: @@ -578,7 +578,7 @@ entities: chemicals: Stellibinin: Inherent: True - PotencyDivisor: 4 + potencyDivisor: 4 Max: 25 Min: 1 productPrototypes: diff --git a/Resources/Maps/Shuttles/DeltaV/DV-pirateradio.yml b/Resources/Maps/Shuttles/DeltaV/DV-pirateradio.yml deleted file mode 100644 index 9cff388fc88..00000000000 --- a/Resources/Maps/Shuttles/DeltaV/DV-pirateradio.yml +++ /dev/null @@ -1,6441 +0,0 @@ -meta: - format: 6 - postmapinit: false -tilemap: - 0: Space - 7: FloorAsteroidSand - 25: FloorCave - 32: FloorDark - 38: FloorDarkOffset - 41: FloorDarkPlastic - 65: FloorLino - 67: FloorMetalDiamond - 80: FloorReinforced - 89: FloorShuttleRed - 90: FloorShuttleWhite - 96: FloorSteelCheckerDark - 109: FloorTechMaint - 123: FloorWood - 126: Lattice -entities: -- proto: "" - entities: - - uid: 1 - components: - - type: MetaData - name: unknown - - type: Transform - parent: invalid - - type: MapGrid - chunks: - 0,0: - ind: 0,0 - tiles: QwAAAAAAewAAAAADQQAAAAAAQQAAAAAAewAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAKQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAKQAAAAADUAAAAAAAfgAAAAAAfgAAAAAAQwAAAAAAewAAAAAAQQAAAAAAQQAAAAAAewAAAAADQwAAAAAAWQAAAAAAQwAAAAAAKQAAAAABJgAAAAAAJgAAAAAAJgAAAAAAKQAAAAABUAAAAAAAfgAAAAAAfgAAAAAAQwAAAAAAewAAAAAAQQAAAAAAQQAAAAAAewAAAAABKQAAAAABWQAAAAAAQwAAAAAAKQAAAAADKQAAAAACKQAAAAACKQAAAAACKQAAAAACUAAAAAAAfgAAAAAAfgAAAAAAKQAAAAAAewAAAAADewAAAAABewAAAAAAewAAAAABQwAAAAAAWQAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAGQAAAAABfgAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAKQAAAAABQwAAAAAAQwAAAAAABwAAAAAABwAAAAAAGQAAAAAAGQAAAAABGQAAAAADGQAAAAADGQAAAAACGQAAAAABGQAAAAACGQAAAAAEQwAAAAAAbQAAAAAAQwAAAAAAbQAAAAAAbQAAAAAABwAAAAAAGQAAAAACGQAAAAAGGQAAAAACGQAAAAAEGQAAAAAFGQAAAAAEGQAAAAACGQAAAAAEGQAAAAABGQAAAAADQwAAAAAABwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAABwAAAAAAfgAAAAAAGQAAAAADGQAAAAAAGQAAAAAGGQAAAAABGQAAAAABGQAAAAAEGQAAAAADGQAAAAAAGQAAAAADGQAAAAABGQAAAAAAGQAAAAACGQAAAAAEGQAAAAACGQAAAAAEGQAAAAACGQAAAAAEGQAAAAAAGQAAAAAFGQAAAAAEGQAAAAACGQAAAAAFGQAAAAAFGQAAAAAAGQAAAAAGGQAAAAABGQAAAAAEGQAAAAAAGQAAAAABGQAAAAAAGQAAAAAAGQAAAAABGQAAAAAGGQAAAAAAGQAAAAACGQAAAAAFGQAAAAAEGQAAAAAAAAAAAAAAAAAAAAAAGQAAAAAEGQAAAAADGQAAAAAFGQAAAAADGQAAAAABGQAAAAAGGQAAAAADGQAAAAAFGQAAAAABAAAAAAAAAAAAAAAAGQAAAAACGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAFGQAAAAAEGQAAAAAAGQAAAAABfgAAAAAAGQAAAAACGQAAAAAFGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAEGQAAAAACGQAAAAABGQAAAAAFGQAAAAAFGQAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAAGQAAAAAEAAAAAAAAGQAAAAAAGQAAAAAGAAAAAAAAGQAAAAACGQAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - version: 6 - 0,-1: - ind: 0,-1 - tiles: GQAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAAGQAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAGGQAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAGAAAAAAAAGQAAAAAGGQAAAAABAAAAAAAAAAAAAAAAGQAAAAABAAAAAAAAAAAAAAAAGQAAAAACAAAAAAAAAAAAAAAAGQAAAAABGQAAAAADAAAAAAAAAAAAAAAAGQAAAAACGQAAAAAFGQAAAAAEGQAAAAACGQAAAAABGQAAAAAAGQAAAAABGQAAAAACGQAAAAABGQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAACAAAAAAAAAAAAAAAAGQAAAAAEGQAAAAADGQAAAAAGGQAAAAADGQAAAAABGQAAAAAAGQAAAAAFGQAAAAACGQAAAAABGQAAAAACGQAAAAAFAAAAAAAAGQAAAAACGQAAAAAAAAAAAAAAAAAAAAAAGQAAAAAFGQAAAAAEGQAAAAAAGQAAAAAFfgAAAAAAGQAAAAABGQAAAAACGQAAAAADGQAAAAAGGQAAAAADGQAAAAAGGQAAAAAEGQAAAAADAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAGGQAAAAAFGQAAAAADGQAAAAAAGQAAAAAFGQAAAAAFGQAAAAAGGQAAAAAGGQAAAAABGQAAAAAEGQAAAAAEGQAAAAAEGQAAAAAFGQAAAAAFGQAAAAAEAAAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAGQAAAAABGQAAAAAEGQAAAAABGQAAAAAGGQAAAAABGQAAAAAAGQAAAAACGQAAAAABGQAAAAAEGQAAAAABGQAAAAAEGQAAAAAAWQAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAWQAAAAAAQwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAGQAAAAAEGQAAAAADGQAAAAAGGQAAAAADGQAAAAAGGQAAAAACGQAAAAABWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAQwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAQwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAGQAAAAAEGQAAAAABQwAAAAAAQwAAAAAAKQAAAAACQwAAAAAAQwAAAAAAQwAAAAAAewAAAAAAewAAAAACewAAAAACQwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAQwAAAAAAGQAAAAABQwAAAAAAYAAAAAACYAAAAAAAYAAAAAADYAAAAAAAQwAAAAAAewAAAAACewAAAAADewAAAAABQwAAAAAAKQAAAAAAKQAAAAABKQAAAAADKQAAAAAAQwAAAAAAGQAAAAAGQwAAAAAAYAAAAAACYAAAAAACYAAAAAAAYAAAAAABQwAAAAAAewAAAAACewAAAAABewAAAAADKQAAAAACKQAAAAAAKQAAAAACKQAAAAADKQAAAAADQwAAAAAAGQAAAAAGQwAAAAAAYAAAAAACYAAAAAADYAAAAAACYAAAAAACQwAAAAAAewAAAAACewAAAAACewAAAAAAQwAAAAAAKQAAAAADKQAAAAAAKQAAAAABKQAAAAABQwAAAAAAGQAAAAABQwAAAAAAQwAAAAAAKQAAAAACQwAAAAAAQwAAAAAAQwAAAAAAKQAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAUAAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAGQAAAAADKQAAAAACewAAAAABewAAAAABewAAAAACewAAAAADKQAAAAAAKQAAAAACKQAAAAABKQAAAAACKQAAAAABKQAAAAACKQAAAAACKQAAAAAAUAAAAAAAfgAAAAAAfgAAAAAA - version: 6 - -1,0: - ind: -1,0 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAADAAAAAAAAGQAAAAACGQAAAAAFGQAAAAAEGQAAAAADQwAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAGGQAAAAACGQAAAAABGQAAAAAAfgAAAAAAGQAAAAADQwAAAAAAQwAAAAAAWQAAAAAAWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAEGQAAAAAAGQAAAAAFGQAAAAAEQwAAAAAAQwAAAAAAQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAAGQAAAAAAGQAAAAAGGQAAAAABGQAAAAAAGQAAAAAFQwAAAAAAbQAAAAAAbQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAFGQAAAAAAGQAAAAAEAAAAAAAAGQAAAAABGQAAAAAFGQAAAAAFGQAAAAADQwAAAAAAbQAAAAAAbQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAADGQAAAAAFfgAAAAAAGQAAAAACQwAAAAAAbQAAAAAAbQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAACGQAAAAAAGQAAAAAEGQAAAAACGQAAAAAAGQAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAEGQAAAAACGQAAAAAGGQAAAAAGGQAAAAAEGQAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAGGQAAAAAFGQAAAAABGQAAAAAFGQAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAADGQAAAAABGQAAAAAAGQAAAAACGQAAAAAFGQAAAAABGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAEGQAAAAACGQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - version: 6 - -1,-1: - ind: -1,-1 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAEAAAAAAAAAAAAAAAAGQAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAGGQAAAAACAAAAAAAAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAADGQAAAAADAAAAAAAAAAAAAAAAGQAAAAACGQAAAAACGQAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAABAAAAAAAAGQAAAAADGQAAAAABGQAAAAADGQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAABGQAAAAAGGQAAAAAAGQAAAAAFGQAAAAABGQAAAAADGQAAAAAGGQAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAEGQAAAAAGGQAAAAAEGQAAAAAAGQAAAAAAGQAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAEGQAAAAADGQAAAAAFGQAAAAACQwAAAAAAQwAAAAAAQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAEGQAAAAAAGQAAAAAAGQAAAAAAQwAAAAAAIAAAAAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAEGQAAAAACGQAAAAAAGQAAAAAFGQAAAAABQwAAAAAAWQAAAAAAWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAACGQAAAAAAGQAAAAAAGQAAAAADGQAAAAACGQAAAAAGGQAAAAAEQwAAAAAAWQAAAAAAWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAADGQAAAAABGQAAAAACGQAAAAABGQAAAAAEQwAAAAAAQwAAAAAAQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAGGQAAAAAGfgAAAAAAGQAAAAAAQwAAAAAAWgAAAAAAWgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAAGQAAAAAFGQAAAAABGQAAAAABGQAAAAACGQAAAAABGQAAAAAEQwAAAAAAWgAAAAAAWgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAGAAAAAAAAAAAAAAAAGQAAAAAAGQAAAAAAGQAAAAADGQAAAAAFQwAAAAAAKQAAAAACQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAEGQAAAAAEGQAAAAABQwAAAAAAQwAAAAAAWQAAAAAAWQAAAAAA - version: 6 - 1,-1: - ind: 1,-1 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAEGQAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAEGQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAADGQAAAAAFAAAAAAAAGQAAAAABGQAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAGGQAAAAABGQAAAAACGQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAAGQAAAAAGGQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAADGQAAAAAGGQAAAAABAAAAAAAAAAAAAAAAGQAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAEGQAAAAAGGQAAAAACAAAAAAAAAAAAAAAAGQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAFGQAAAAAFGQAAAAAAGQAAAAAAGQAAAAAAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAGGQAAAAADGQAAAAAFGQAAAAABGQAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAACGQAAAAABGQAAAAADGQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - version: 6 - 1,0: - ind: 1,0 - tiles: GQAAAAADGQAAAAABGQAAAAADGQAAAAADGQAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAAGQAAAAAAGQAAAAAEGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAACGQAAAAAAGQAAAAAGGQAAAAADGQAAAAACGQAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAADGQAAAAACGQAAAAABGQAAAAABGQAAAAAFGQAAAAAFGQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAACGQAAAAAEGQAAAAADGQAAAAAAGQAAAAAAGQAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAEGQAAAAAAGQAAAAAGGQAAAAAFGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAAAAAAAAAAAAAAAAAAGQAAAAADGQAAAAADGQAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAGGQAAAAAAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAEGQAAAAAAGQAAAAAGGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAFAAAAAAAAGQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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: GridPathfinding - - type: Gravity - gravityShakeSound: !type:SoundPathSpecifier - path: /Audio/Effects/alert.ogg - - type: DecalGrid - chunkCollection: - version: 2 - nodes: - - node: - color: '#FFFFFFFF' - id: Caution - decals: - 0: 3.018731,5.165427 - - node: - color: '#FFFFFFFF' - id: WarnBox - decals: - 18: 3,4 - - node: - color: '#FFFFFFFF' - id: WarnCornerSmallNW - decals: - 40: 16,-2 - - node: - color: '#FFFFFFFF' - id: WarnCornerSmallSE - decals: - 32: 5,7 - - node: - color: '#FFFFFFFF' - id: WarnCornerSmallSW - decals: - 17: 4,7 - - node: - color: '#FFFFFFFF' - id: WarnLineN - decals: - 16: 3,7 - 33: 6,7 - 35: 5,7 - 36: 4,7 - - node: - color: '#FFFFFFFF' - id: WarnLineS - decals: - 34: 7,6 - 37: 16,3 - 38: 16,2 - 39: 16,-1 - - node: - color: '#FFFFFFFF' - id: WarnLineW - decals: - 41: 11,-8 - 42: 10,-8 - 43: 7,-9 - 44: 6,-9 - - node: - color: '#FFFFFFFF' - id: WoodTrimThinCornerNe - decals: - 2: 12,2 - - node: - color: '#FFFFFFFF' - id: WoodTrimThinCornerNw - decals: - 5: 8,2 - - node: - color: '#FFFFFFFF' - id: WoodTrimThinCornerSe - decals: - 11: 12,-1 - - node: - color: '#FFFFFFFF' - id: WoodTrimThinCornerSw - decals: - 12: 8,-1 - - node: - color: '#FFFFFFFF' - id: WoodTrimThinInnerNe - decals: - 28: 1,-1 - - node: - color: '#FFFFFFFF' - id: WoodTrimThinInnerNw - decals: - 29: 4,-1 - - node: - color: '#FFFFFFFF' - id: WoodTrimThinInnerSe - decals: - 30: 1,3 - - node: - color: '#FFFFFFFF' - id: WoodTrimThinInnerSw - decals: - 31: 4,3 - - node: - color: '#FFFFFFFF' - id: WoodTrimThinLineE - decals: - 9: 12,1 - 10: 12,0 - 22: 1,2 - 23: 1,1 - 24: 1,0 - - node: - color: '#FFFFFFFF' - id: WoodTrimThinLineN - decals: - 6: 9,2 - 7: 10,2 - 8: 11,2 - 26: 2,-1 - 27: 3,-1 - - node: - color: '#FFFFFFFF' - id: WoodTrimThinLineS - decals: - 13: 9,-1 - 14: 10,-1 - 15: 11,-1 - 25: 2,3 - - node: - color: '#FFFFFFFF' - id: WoodTrimThinLineW - decals: - 3: 8,0 - 4: 8,1 - 19: 4,2 - 20: 4,1 - 21: 4,0 - - node: - color: '#FF0000FF' - id: space - decals: - 1: 3.018731,4.884177 - - type: GridAtmosphere - version: 2 - data: - tiles: - 0,0: - 0: 65535 - 0,-1: - 0: 65535 - -1,0: - 0: 65535 - -1,-1: - 0: 65535 - 0,1: - 0: 65535 - 1,0: - 0: 65535 - 1,1: - 0: 65535 - 2,0: - 0: 65535 - 0,-2: - 0: 65535 - 1,-2: - 0: 65535 - 1,-1: - 0: 65535 - 2,-1: - 0: 65535 - -1,1: - 0: 65535 - -1,-2: - 0: 65535 - 3,0: - 0: 65535 - 3,-1: - 0: 65535 - 0,2: - 0: 61439 - 1,2: - 0: 32767 - 2,1: - 0: 65535 - 3,1: - 0: 65535 - 0,-3: - 0: 65535 - 1,-3: - 0: 65535 - 2,-2: - 0: 65535 - 3,-2: - 0: 65535 - -2,0: - 0: 65279 - -2,1: - 0: 53230 - -1,2: - 0: 12031 - -2,-2: - 0: 65534 - -2,-1: - 0: 61182 - -2,-3: - 0: 60660 - -1,-3: - 0: 65535 - 4,-1: - 0: 65527 - 4,0: - 0: 65535 - 4,1: - 0: 2559 - 0,-4: - 0: 64897 - 2,-3: - 0: 65527 - 4,-2: - 0: 30715 - 0,3: - 0: 27 - 1,3: - 0: 2189 - 2,2: - 0: 2255 - 3,2: - 0: 9 - 1,-4: - 0: 62483 - 2,-4: - 0: 12832 - 3,-4: - 0: 8960 - 3,-3: - 0: 63251 - -3,1: - 0: 2094 - -3,0: - 0: 32964 - -2,2: - 0: 232 - -1,3: - 0: 130 - -3,-2: - 0: 3136 - -3,-1: - 0: 1216 - -2,-4: - 0: 25088 - -1,-4: - 0: 60312 - 4,-3: - 0: 4902 - 5,-2: - 0: 8193 - 5,-1: - 0: 306 - 4,2: - 0: 1 - 5,0: - 0: 29441 - 5,1: - 0: 29459 - 5,2: - 0: 175 - uniqueMixes: - - 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: Shuttle - - type: NavMap -- proto: AirAlarm - entities: - - uid: 576 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 5.5,3.5 - parent: 1 - - type: DeviceList - devices: - - 707 - - 719 - - 708 - - 720 - - 721 - - 709 - - 726 - - 714 - - 718 - - 713 - - 710 - - 711 - - 722 - - 723 - - 712 - - 725 - - 384 - - 716 - - 724 - - type: AtmosDevice - joinedGrid: 1 -- proto: AirCanister - entities: - - uid: 3 - components: - - type: Transform - anchored: True - pos: 1.5,5.5 - parent: 1 - - type: Physics - bodyType: Static - - type: AtmosDevice - joinedGrid: 1 -- proto: AirlockExternalShuttleSyndicateLocked - entities: - - uid: 4 - components: - - type: MetaData - desc: The ominous red light fills you with dread - name: suspicious airlock - - type: Transform - pos: 3.5,6.5 - parent: 1 - - type: DeviceLinkSink - links: - - 806 - missingComponents: - - Docking -- proto: AirlockSyndicate - entities: - - uid: 5 - components: - - type: Transform - pos: 5.5,2.5 - parent: 1 - - uid: 15 - components: - - type: MetaData - name: armory airlock - - type: Transform - pos: 2.5,-5.5 - parent: 1 -- proto: AirlockSyndicateGlass - entities: - - uid: 6 - components: - - type: MetaData - name: kitchen airlock - - type: Transform - pos: 2.5,-1.5 - parent: 1 - - uid: 7 - components: - - type: MetaData - name: rec-room airlock - - type: Transform - rot: -1.5707963267948966 rad - pos: 6.5,-1.5 - parent: 1 - - uid: 8 - components: - - type: Transform - pos: 0.5,-0.5 - parent: 1 - - uid: 9 - components: - - type: MetaData - name: hydroponics airlock - - type: Transform - pos: 9.5,-3.5 - parent: 1 - - uid: 10 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 5.5,-0.5 - parent: 1 -- proto: AirlockSyndicateGlassLocked - entities: - - uid: 11 - components: - - type: MetaData - name: to-externals airlock - - type: Transform - pos: 3.5,4.5 - parent: 1 - - uid: 950 - components: - - type: MetaData - name: bridge airlock - - type: Transform - pos: 7.5,-0.5 - parent: 1 -- proto: AirlockSyndicateLocked - entities: - - uid: 13 - components: - - type: MetaData - name: air supply - - type: Transform - pos: 2.5,5.5 - parent: 1 - - uid: 14 - components: - - type: MetaData - name: outpost maintenance - - type: Transform - pos: 0.5,3.5 - parent: 1 -- proto: AlwaysPoweredLightColoredFrostyBlue - entities: - - uid: 16 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -0.5,-2.5 - parent: 1 -- proto: AlwaysPoweredLightColoredRed - entities: - - uid: 17 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 4.5,7.5 - parent: 1 -- proto: AlwaysPoweredSmallLightMaintenanceRed - entities: - - uid: 953 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,5.5 - parent: 1 - - uid: 962 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 1.5,5.5 - parent: 1 -- proto: APCBasic - entities: - - uid: 24 - components: - - type: Transform - pos: 2.5,4.5 - parent: 1 - - uid: 25 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 3.5,-5.5 - parent: 1 - - uid: 26 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 7.5,0.5 - parent: 1 - - type: Apc - hasAccess: True - lastExternalState: Good - lastChargeState: Full -- proto: AsteroidAltRock - entities: - - uid: 27 - components: - - type: Transform - pos: -5.5,2.5 - parent: 1 - - uid: 28 - components: - - type: Transform - pos: -4.5,-0.5 - parent: 1 - - uid: 29 - components: - - type: Transform - pos: 4.5,8.5 - parent: 1 - - uid: 30 - components: - - type: Transform - pos: 6.5,5.5 - parent: 1 - - uid: 31 - components: - - type: Transform - pos: 5.5,8.5 - parent: 1 - - uid: 32 - components: - - type: Transform - pos: 6.5,8.5 - parent: 1 - - uid: 33 - components: - - type: Transform - pos: 2.5,7.5 - parent: 1 - - uid: 34 - components: - - type: Transform - pos: 0.5,7.5 - parent: 1 - - uid: 35 - components: - - type: Transform - pos: 3.5,8.5 - parent: 1 - - uid: 36 - components: - - type: Transform - pos: 14.5,3.5 - parent: 1 - - uid: 37 - components: - - type: Transform - pos: 14.5,4.5 - parent: 1 - - uid: 38 - components: - - type: Transform - pos: 15.5,4.5 - parent: 1 - - uid: 39 - components: - - type: Transform - pos: 16.5,-9.5 - parent: 1 - - uid: 40 - components: - - type: Transform - pos: 2.5,8.5 - parent: 1 - - uid: 41 - components: - - type: Transform - pos: 7.5,5.5 - parent: 1 - - uid: 42 - components: - - type: Transform - pos: 7.5,7.5 - parent: 1 - - uid: 43 - components: - - type: Transform - pos: 8.5,5.5 - parent: 1 - - uid: 44 - components: - - type: Transform - pos: 14.5,5.5 - parent: 1 - - uid: 45 - components: - - type: Transform - pos: -3.5,-10.5 - parent: 1 - - uid: 47 - components: - - type: Transform - pos: -5.5,-6.5 - parent: 1 - - uid: 48 - components: - - type: Transform - pos: -3.5,-5.5 - parent: 1 - - uid: 49 - components: - - type: Transform - pos: -3.5,-6.5 - parent: 1 - - uid: 50 - components: - - type: Transform - pos: -4.5,-2.5 - parent: 1 - - uid: 51 - components: - - type: Transform - pos: -3.5,-3.5 - parent: 1 - - uid: 52 - components: - - type: Transform - pos: -4.5,-4.5 - parent: 1 - - uid: 53 - components: - - type: Transform - pos: -5.5,-4.5 - parent: 1 - - uid: 55 - components: - - type: Transform - pos: -0.5,-12.5 - parent: 1 - - uid: 56 - components: - - type: Transform - pos: -4.5,6.5 - parent: 1 - - uid: 57 - components: - - type: Transform - pos: -3.5,6.5 - parent: 1 - - uid: 58 - components: - - type: Transform - pos: -3.5,7.5 - parent: 1 - - uid: 59 - components: - - type: Transform - pos: -2.5,7.5 - parent: 1 - - uid: 60 - components: - - type: Transform - pos: -1.5,7.5 - parent: 1 - - uid: 61 - components: - - type: Transform - pos: 0.5,8.5 - parent: 1 - - uid: 62 - components: - - type: Transform - pos: 0.5,10.5 - parent: 1 - - uid: 63 - components: - - type: Transform - pos: 3.5,9.5 - parent: 1 - - uid: 64 - components: - - type: Transform - pos: 4.5,9.5 - parent: 1 - - uid: 65 - components: - - type: Transform - pos: -0.5,8.5 - parent: 1 - - uid: 66 - components: - - type: Transform - pos: 1.5,8.5 - parent: 1 - - uid: 67 - components: - - type: Transform - pos: 6.5,10.5 - parent: 1 - - uid: 68 - components: - - type: Transform - pos: 0.5,9.5 - parent: 1 - - uid: 69 - components: - - type: Transform - pos: -0.5,7.5 - parent: 1 - - uid: 70 - components: - - type: Transform - pos: -4.5,7.5 - parent: 1 - - uid: 71 - components: - - type: Transform - pos: -8.5,6.5 - parent: 1 - - uid: 72 - components: - - type: Transform - pos: -1.5,-12.5 - parent: 1 - - uid: 73 - components: - - type: Transform - pos: -4.5,2.5 - parent: 1 - - uid: 74 - components: - - type: Transform - pos: -4.5,0.5 - parent: 1 - - uid: 75 - components: - - type: Transform - pos: -4.5,-1.5 - parent: 1 - - uid: 76 - components: - - type: Transform - pos: -3.5,-4.5 - parent: 1 - - uid: 77 - components: - - type: Transform - pos: -3.5,-2.5 - parent: 1 - - uid: 78 - components: - - type: Transform - pos: -3.5,-7.5 - parent: 1 - - uid: 79 - components: - - type: Transform - pos: -4.5,-8.5 - parent: 1 - - uid: 80 - components: - - type: Transform - pos: -4.5,-5.5 - parent: 1 - - uid: 81 - components: - - type: Transform - pos: -4.5,-9.5 - parent: 1 - - uid: 82 - components: - - type: Transform - pos: -2.5,-9.5 - parent: 1 - - uid: 83 - components: - - type: Transform - pos: -1.5,-9.5 - parent: 1 - - uid: 84 - components: - - type: Transform - pos: 16.5,0.5 - parent: 1 - - uid: 85 - components: - - type: Transform - pos: 16.5,1.5 - parent: 1 - - uid: 86 - components: - - type: Transform - pos: 3.5,-10.5 - parent: 1 - - uid: 88 - components: - - type: Transform - pos: 6.5,-10.5 - parent: 1 - - uid: 89 - components: - - type: Transform - pos: 7.5,-12.5 - parent: 1 - - uid: 90 - components: - - type: Transform - pos: 9.5,-7.5 - parent: 1 - - uid: 91 - components: - - type: Transform - pos: 8.5,-8.5 - parent: 1 - - uid: 92 - components: - - type: Transform - pos: 13.5,-7.5 - parent: 1 - - uid: 93 - components: - - type: Transform - pos: 14.5,-6.5 - parent: 1 - - uid: 94 - components: - - type: Transform - pos: 15.5,-6.5 - parent: 1 - - uid: 95 - components: - - type: Transform - pos: 15.5,-5.5 - parent: 1 - - uid: 96 - components: - - type: Transform - pos: 15.5,-4.5 - parent: 1 - - uid: 97 - components: - - type: Transform - pos: 16.5,-6.5 - parent: 1 - - uid: 98 - components: - - type: Transform - pos: 15.5,-1.5 - parent: 1 - - uid: 99 - components: - - type: Transform - pos: 15.5,-2.5 - parent: 1 - - uid: 100 - components: - - type: Transform - pos: 18.5,-1.5 - parent: 1 - - uid: 101 - components: - - type: Transform - pos: 16.5,-5.5 - parent: 1 - - uid: 102 - components: - - type: Transform - pos: 16.5,-4.5 - parent: 1 - - uid: 103 - components: - - type: Transform - pos: -3.5,-11.5 - parent: 1 - - uid: 104 - components: - - type: Transform - pos: -1.5,-11.5 - parent: 1 - - uid: 105 - components: - - type: Transform - pos: -2.5,11.5 - parent: 1 - - uid: 106 - components: - - type: Transform - pos: 2.5,-12.5 - parent: 1 - - uid: 107 - components: - - type: Transform - pos: 5.5,-10.5 - parent: 1 - - uid: 108 - components: - - type: Transform - pos: 7.5,-11.5 - parent: 1 - - uid: 109 - components: - - type: Transform - pos: 15.5,-8.5 - parent: 1 - - uid: 110 - components: - - type: Transform - pos: 19.5,2.5 - parent: 1 - - uid: 111 - components: - - type: Transform - pos: 17.5,5.5 - parent: 1 - - uid: 112 - components: - - type: Transform - pos: 8.5,-12.5 - parent: 1 - - uid: 113 - components: - - type: Transform - pos: 17.5,0.5 - parent: 1 - - uid: 114 - components: - - type: Transform - pos: 17.5,-2.5 - parent: 1 - - uid: 115 - components: - - type: Transform - pos: 18.5,-0.5 - parent: 1 - - uid: 116 - components: - - type: Transform - pos: 18.5,3.5 - parent: 1 - - uid: 117 - components: - - type: Transform - pos: 17.5,3.5 - parent: 1 - - uid: 119 - components: - - type: Transform - pos: 19.5,3.5 - parent: 1 - - uid: 120 - components: - - type: Transform - pos: 19.5,4.5 - parent: 1 - - uid: 121 - components: - - type: Transform - pos: 17.5,4.5 - parent: 1 - - uid: 122 - components: - - type: Transform - pos: 18.5,4.5 - parent: 1 - - uid: 123 - components: - - type: Transform - pos: 16.5,4.5 - parent: 1 - - uid: 124 - components: - - type: Transform - pos: 16.5,5.5 - parent: 1 - - uid: 125 - components: - - type: Transform - pos: 15.5,5.5 - parent: 1 - - uid: 126 - components: - - type: Transform - pos: 13.5,5.5 - parent: 1 - - uid: 127 - components: - - type: Transform - pos: 11.5,8.5 - parent: 1 - - uid: 128 - components: - - type: Transform - pos: 12.5,8.5 - parent: 1 - - uid: 129 - components: - - type: Transform - pos: 9.5,6.5 - parent: 1 - - uid: 130 - components: - - type: Transform - pos: 8.5,8.5 - parent: 1 - - uid: 131 - components: - - type: Transform - pos: 7.5,8.5 - parent: 1 - - uid: 132 - components: - - type: Transform - pos: 7.5,9.5 - parent: 1 - - uid: 133 - components: - - type: Transform - pos: 9.5,8.5 - parent: 1 - - uid: 134 - components: - - type: Transform - pos: 13.5,6.5 - parent: 1 - - uid: 135 - components: - - type: Transform - pos: 12.5,6.5 - parent: 1 - - uid: 136 - components: - - type: Transform - pos: 12.5,7.5 - parent: 1 - - uid: 137 - components: - - type: Transform - pos: 14.5,6.5 - parent: 1 - - uid: 138 - components: - - type: Transform - pos: 17.5,-0.5 - parent: 1 - - uid: 139 - components: - - type: Transform - pos: 20.5,0.5 - parent: 1 - - uid: 140 - components: - - type: Transform - pos: 17.5,1.5 - parent: 1 - - uid: 141 - components: - - type: Transform - pos: -0.5,13.5 - parent: 1 - - uid: 142 - components: - - type: Transform - pos: 0.5,13.5 - parent: 1 - - uid: 143 - components: - - type: Transform - pos: 19.5,1.5 - parent: 1 - - uid: 144 - components: - - type: Transform - pos: 21.5,2.5 - parent: 1 - - uid: 145 - components: - - type: Transform - pos: -6.5,9.5 - parent: 1 - - uid: 146 - components: - - type: Transform - pos: 19.5,5.5 - parent: 1 - - uid: 147 - components: - - type: Transform - pos: 20.5,6.5 - parent: 1 - - uid: 148 - components: - - type: Transform - pos: 20.5,7.5 - parent: 1 - - uid: 149 - components: - - type: Transform - pos: 1.5,12.5 - parent: 1 - - uid: 150 - components: - - type: Transform - pos: 20.5,5.5 - parent: 1 - - uid: 151 - components: - - type: Transform - pos: 22.5,8.5 - parent: 1 - - uid: 152 - components: - - type: Transform - pos: 21.5,8.5 - parent: 1 - - uid: 153 - components: - - type: Transform - pos: 21.5,6.5 - parent: 1 - - uid: 154 - components: - - type: Transform - pos: 21.5,7.5 - parent: 1 - - uid: 155 - components: - - type: Transform - pos: -5.5,9.5 - parent: 1 - - uid: 156 - components: - - type: Transform - pos: 20.5,2.5 - parent: 1 - - uid: 157 - components: - - type: Transform - pos: 16.5,-2.5 - parent: 1 - - uid: 158 - components: - - type: Transform - pos: -2.5,12.5 - parent: 1 - - uid: 159 - components: - - type: Transform - pos: -10.5,5.5 - parent: 1 - - uid: 160 - components: - - type: Transform - pos: 17.5,-3.5 - parent: 1 - - uid: 161 - components: - - type: Transform - pos: 17.5,-4.5 - parent: 1 - - uid: 162 - components: - - type: Transform - pos: 18.5,-2.5 - parent: 1 - - uid: 163 - components: - - type: Transform - pos: 14.5,-7.5 - parent: 1 - - uid: 164 - components: - - type: Transform - pos: 12.5,-7.5 - parent: 1 - - uid: 165 - components: - - type: Transform - pos: 9.5,-8.5 - parent: 1 - - uid: 166 - components: - - type: Transform - pos: 11.5,-10.5 - parent: 1 - - uid: 167 - components: - - type: Transform - pos: 11.5,-8.5 - parent: 1 - - uid: 168 - components: - - type: Transform - pos: 14.5,-8.5 - parent: 1 - - uid: 169 - components: - - type: Transform - pos: 12.5,-10.5 - parent: 1 - - uid: 170 - components: - - type: Transform - pos: 10.5,-11.5 - parent: 1 - - uid: 171 - components: - - type: Transform - pos: 8.5,-10.5 - parent: 1 - - uid: 172 - components: - - type: Transform - pos: 9.5,-10.5 - parent: 1 - - uid: 173 - components: - - type: Transform - pos: -9.5,0.5 - parent: 1 - - uid: 174 - components: - - type: Transform - pos: 13.5,-8.5 - parent: 1 - - uid: 175 - components: - - type: Transform - pos: 17.5,-6.5 - parent: 1 - - uid: 176 - components: - - type: Transform - pos: 12.5,-8.5 - parent: 1 - - uid: 177 - components: - - type: Transform - pos: 15.5,-3.5 - parent: 1 - - uid: 178 - components: - - type: Transform - pos: 16.5,-3.5 - parent: 1 - - uid: 179 - components: - - type: Transform - pos: 17.5,-7.5 - parent: 1 - - uid: 180 - components: - - type: Transform - pos: 16.5,-7.5 - parent: 1 - - uid: 181 - components: - - type: Transform - pos: 15.5,-7.5 - parent: 1 - - uid: 182 - components: - - type: Transform - pos: -9.5,-1.5 - parent: 1 - - uid: 183 - components: - - type: Transform - pos: 10.5,-10.5 - parent: 1 - - uid: 184 - components: - - type: Transform - pos: 9.5,-11.5 - parent: 1 - - uid: 185 - components: - - type: Transform - pos: 0.5,-15.5 - parent: 1 - - uid: 187 - components: - - type: Transform - pos: -9.5,-5.5 - parent: 1 - - uid: 188 - components: - - type: Transform - pos: -7.5,-10.5 - parent: 1 - - uid: 189 - components: - - type: Transform - pos: 17.5,-5.5 - parent: 1 - - uid: 190 - components: - - type: Transform - pos: -6.5,-10.5 - parent: 1 - - uid: 191 - components: - - type: Transform - pos: -5.5,-11.5 - parent: 1 - - uid: 192 - components: - - type: Transform - pos: 14.5,-9.5 - parent: 1 - - uid: 193 - components: - - type: Transform - pos: -5.5,-12.5 - parent: 1 - - uid: 194 - components: - - type: Transform - pos: 18.5,-6.5 - parent: 1 - - uid: 195 - components: - - type: Transform - pos: -6.5,-12.5 - parent: 1 - - uid: 196 - components: - - type: Transform - pos: 20.5,-2.5 - parent: 1 - - uid: 197 - components: - - type: Transform - pos: 20.5,-1.5 - parent: 1 - - uid: 198 - components: - - type: Transform - pos: 21.5,4.5 - parent: 1 - - uid: 199 - components: - - type: Transform - pos: 20.5,3.5 - parent: 1 - - uid: 200 - components: - - type: Transform - pos: 20.5,4.5 - parent: 1 - - uid: 201 - components: - - type: Transform - pos: 14.5,7.5 - parent: 1 - - uid: 202 - components: - - type: Transform - pos: 15.5,7.5 - parent: 1 - - uid: 203 - components: - - type: Transform - pos: -3.5,-13.5 - parent: 1 - - uid: 204 - components: - - type: Transform - pos: 3.5,10.5 - parent: 1 - - uid: 205 - components: - - type: Transform - pos: 2.5,10.5 - parent: 1 - - uid: 206 - components: - - type: Transform - pos: 1.5,10.5 - parent: 1 - - uid: 207 - components: - - type: Transform - pos: 5.5,10.5 - parent: 1 - - uid: 208 - components: - - type: Transform - pos: 5.5,9.5 - parent: 1 - - uid: 209 - components: - - type: Transform - pos: 5.5,11.5 - parent: 1 - - uid: 210 - components: - - type: Transform - pos: 6.5,9.5 - parent: 1 - - uid: 211 - components: - - type: Transform - pos: 3.5,11.5 - parent: 1 - - uid: 212 - components: - - type: Transform - pos: 1.5,9.5 - parent: 1 - - uid: 213 - components: - - type: Transform - pos: 2.5,9.5 - parent: 1 - - uid: 214 - components: - - type: Transform - pos: -0.5,9.5 - parent: 1 - - uid: 215 - components: - - type: Transform - pos: -1.5,8.5 - parent: 1 - - uid: 216 - components: - - type: Transform - pos: -0.5,10.5 - parent: 1 - - uid: 217 - components: - - type: Transform - pos: -2.5,9.5 - parent: 1 - - uid: 218 - components: - - type: Transform - pos: -3.5,-14.5 - parent: 1 - - uid: 219 - components: - - type: Transform - pos: -1.5,9.5 - parent: 1 - - uid: 220 - components: - - type: Transform - pos: -3.5,5.5 - parent: 1 - - uid: 221 - components: - - type: Transform - pos: -7.5,6.5 - parent: 1 - - uid: 222 - components: - - type: Transform - pos: -5.5,5.5 - parent: 1 - - uid: 223 - components: - - type: Transform - pos: -5.5,4.5 - parent: 1 - - uid: 224 - components: - - type: Transform - pos: 4.5,11.5 - parent: 1 - - uid: 225 - components: - - type: Transform - pos: -1.5,10.5 - parent: 1 - - uid: 226 - components: - - type: Transform - pos: -0.5,-14.5 - parent: 1 - - uid: 227 - components: - - type: Transform - pos: 9.5,-13.5 - parent: 1 - - uid: 228 - components: - - type: Transform - pos: 3.5,12.5 - parent: 1 - - uid: 229 - components: - - type: Transform - pos: 4.5,-15.5 - parent: 1 - - uid: 230 - components: - - type: Transform - pos: 4.5,-14.5 - parent: 1 - - uid: 231 - components: - - type: Transform - pos: 5.5,-15.5 - parent: 1 - - uid: 232 - components: - - type: Transform - pos: 9.5,-14.5 - parent: 1 - - uid: 233 - components: - - type: Transform - pos: 6.5,11.5 - parent: 1 - - uid: 234 - components: - - type: Transform - pos: 12.5,-13.5 - parent: 1 - - uid: 235 - components: - - type: Transform - pos: 13.5,-12.5 - parent: 1 - - uid: 236 - components: - - type: Transform - pos: -4.5,8.5 - parent: 1 - - uid: 237 - components: - - type: Transform - pos: -3.5,8.5 - parent: 1 - - uid: 238 - components: - - type: Transform - pos: -2.5,8.5 - parent: 1 - - uid: 239 - components: - - type: Transform - pos: -6.5,6.5 - parent: 1 - - uid: 240 - components: - - type: Transform - pos: -5.5,6.5 - parent: 1 - - uid: 241 - components: - - type: Transform - pos: -4.5,4.5 - parent: 1 - - uid: 242 - components: - - type: Transform - pos: 13.5,-11.5 - parent: 1 - - uid: 243 - components: - - type: Transform - pos: -9.5,4.5 - parent: 1 - - uid: 244 - components: - - type: Transform - pos: -8.5,4.5 - parent: 1 - - uid: 245 - components: - - type: Transform - pos: -8.5,3.5 - parent: 1 - - uid: 246 - components: - - type: Transform - pos: -7.5,3.5 - parent: 1 - - uid: 247 - components: - - type: Transform - pos: -6.5,3.5 - parent: 1 - - uid: 248 - components: - - type: Transform - pos: -5.5,3.5 - parent: 1 - - uid: 249 - components: - - type: Transform - pos: -6.5,5.5 - parent: 1 - - uid: 250 - components: - - type: Transform - pos: -4.5,1.5 - parent: 1 - - uid: 251 - components: - - type: Transform - pos: -6.5,2.5 - parent: 1 - - uid: 252 - components: - - type: Transform - pos: -8.5,1.5 - parent: 1 - - uid: 253 - components: - - type: Transform - pos: -7.5,0.5 - parent: 1 - - uid: 254 - components: - - type: Transform - pos: -5.5,0.5 - parent: 1 - - uid: 255 - components: - - type: Transform - pos: -6.5,0.5 - parent: 1 - - uid: 256 - components: - - type: Transform - pos: 18.5,-11.5 - parent: 1 - - uid: 257 - components: - - type: Transform - pos: -5.5,-0.5 - parent: 1 - - uid: 258 - components: - - type: Transform - pos: -5.5,-1.5 - parent: 1 - - uid: 259 - components: - - type: Transform - pos: 17.5,-10.5 - parent: 1 - - uid: 260 - components: - - type: Transform - pos: -8.5,-2.5 - parent: 1 - - uid: 261 - components: - - type: Transform - pos: -7.5,-2.5 - parent: 1 - - uid: 262 - components: - - type: Transform - pos: 16.5,-8.5 - parent: 1 - - uid: 263 - components: - - type: Transform - pos: 17.5,-9.5 - parent: 1 - - uid: 264 - components: - - type: Transform - pos: -3.5,-1.5 - parent: 1 - - uid: 265 - components: - - type: Transform - pos: 19.5,-7.5 - parent: 1 - - uid: 266 - components: - - type: Transform - pos: -5.5,-2.5 - parent: 1 - - uid: 267 - components: - - type: Transform - pos: -6.5,-7.5 - parent: 1 - - uid: 268 - components: - - type: Transform - pos: -4.5,-6.5 - parent: 1 - - uid: 269 - components: - - type: Transform - pos: -4.5,-10.5 - parent: 1 - - uid: 270 - components: - - type: Transform - pos: -4.5,-7.5 - parent: 1 - - uid: 271 - components: - - type: Transform - pos: -5.5,-8.5 - parent: 1 - - uid: 272 - components: - - type: Transform - pos: -3.5,-8.5 - parent: 1 - - uid: 273 - components: - - type: Transform - pos: -2.5,-11.5 - parent: 1 - - uid: 274 - components: - - type: Transform - pos: -3.5,-9.5 - parent: 1 - - uid: 275 - components: - - type: Transform - pos: -1.5,-10.5 - parent: 1 - - uid: 276 - components: - - type: Transform - pos: -5.5,-7.5 - parent: 1 - - uid: 277 - components: - - type: Transform - pos: -2.5,-10.5 - parent: 1 - - uid: 278 - components: - - type: Transform - pos: -0.5,-10.5 - parent: 1 - - uid: 279 - components: - - type: Transform - pos: -0.5,-11.5 - parent: 1 - - uid: 280 - components: - - type: Transform - pos: 0.5,-13.5 - parent: 1 - - uid: 281 - components: - - type: Transform - pos: 2.5,-10.5 - parent: 1 - - uid: 282 - components: - - type: Transform - pos: 2.5,-11.5 - parent: 1 - - uid: 283 - components: - - type: Transform - pos: 20.5,-7.5 - parent: 1 - - uid: 284 - components: - - type: Transform - pos: 6.5,-13.5 - parent: 1 - - uid: 285 - components: - - type: Transform - pos: 5.5,-9.5 - parent: 1 - - uid: 286 - components: - - type: Transform - pos: 6.5,-11.5 - parent: 1 - - uid: 287 - components: - - type: Transform - pos: 7.5,-10.5 - parent: 1 - - uid: 288 - components: - - type: Transform - pos: 21.5,-4.5 - parent: 1 - - uid: 289 - components: - - type: Transform - pos: 6.5,-9.5 - parent: 1 - - uid: 290 - components: - - type: Transform - pos: 21.5,-3.5 - parent: 1 - - uid: 291 - components: - - type: Transform - pos: 3.5,-11.5 - parent: 1 - - uid: 292 - components: - - type: Transform - pos: 5.5,-11.5 - parent: 1 - - uid: 293 - components: - - type: Transform - pos: 3.5,-13.5 - parent: 1 - - uid: 294 - components: - - type: Transform - pos: 0.5,-10.5 - parent: 1 - - uid: 295 - components: - - type: Transform - pos: -0.5,-9.5 - parent: 1 - - uid: 296 - components: - - type: Transform - pos: -7.5,-6.5 - parent: 1 - - uid: 297 - components: - - type: Transform - pos: -5.5,-5.5 - parent: 1 - - uid: 298 - components: - - type: Transform - pos: 8.5,-11.5 - parent: 1 - - uid: 299 - components: - - type: Transform - pos: 4.5,-12.5 - parent: 1 - - uid: 300 - components: - - type: Transform - pos: 4.5,-11.5 - parent: 1 - - uid: 301 - components: - - type: Transform - pos: 22.5,3.5 - parent: 1 - - uid: 302 - components: - - type: Transform - pos: 0.5,-11.5 - parent: 1 - - uid: 303 - components: - - type: Transform - pos: 0.5,-12.5 - parent: 1 - - uid: 304 - components: - - type: Transform - pos: 1.5,-11.5 - parent: 1 - - uid: 305 - components: - - type: Transform - pos: 23.5,9.5 - parent: 1 - - uid: 307 - components: - - type: Transform - pos: 11.5,10.5 - parent: 1 - - uid: 308 - components: - - type: Transform - pos: 7.5,12.5 - parent: 1 - - uid: 309 - components: - - type: Transform - pos: 7.5,13.5 - parent: 1 - - uid: 310 - components: - - type: Transform - pos: 7.5,14.5 - parent: 1 - - uid: 312 - components: - - type: Transform - pos: -6.5,-6.5 - parent: 1 - - uid: 313 - components: - - type: Transform - pos: -7.5,-4.5 - parent: 1 - - uid: 314 - components: - - type: Transform - pos: -6.5,-4.5 - parent: 1 - - uid: 315 - components: - - type: Transform - pos: -6.5,-2.5 - parent: 1 - - uid: 316 - components: - - type: Transform - pos: -6.5,-1.5 - parent: 1 - - uid: 317 - components: - - type: Transform - pos: -6.5,1.5 - parent: 1 - - uid: 318 - components: - - type: Transform - pos: -7.5,1.5 - parent: 1 - - uid: 319 - components: - - type: Transform - pos: 3.5,-9.5 - parent: 1 - - uid: 320 - components: - - type: Transform - pos: 4.5,-9.5 - parent: 1 - - uid: 321 - components: - - type: Transform - pos: 2.5,-9.5 - parent: 1 - - uid: 322 - components: - - type: Transform - pos: 12.5,4.5 - parent: 1 - - uid: 323 - components: - - type: Transform - pos: 10.5,4.5 - parent: 1 - - uid: 324 - components: - - type: Transform - pos: 13.5,4.5 - parent: 1 - - uid: 325 - components: - - type: Transform - pos: 12.5,5.5 - parent: 1 - - uid: 326 - components: - - type: Transform - pos: -3.5,4.5 - parent: 1 - - uid: 327 - components: - - type: Transform - pos: 10.5,5.5 - parent: 1 - - uid: 328 - components: - - type: Transform - pos: 9.5,4.5 - parent: 1 - - uid: 329 - components: - - type: Transform - pos: 9.5,5.5 - parent: 1 - - uid: 330 - components: - - type: Transform - pos: 11.5,5.5 - parent: 1 - - uid: 331 - components: - - type: Transform - pos: 10.5,6.5 - parent: 1 - - uid: 333 - components: - - type: Transform - pos: 11.5,4.5 - parent: 1 - - uid: 334 - components: - - type: Transform - pos: 0.5,-9.5 - parent: 1 - - uid: 337 - components: - - type: Transform - pos: 1.5,7.5 - parent: 1 - - uid: 339 - components: - - type: Transform - pos: 1.5,-10.5 - parent: 1 - - uid: 364 - components: - - type: Transform - pos: 8.5,4.5 - parent: 1 - - uid: 372 - components: - - type: Transform - pos: 11.5,6.5 - parent: 1 - - uid: 373 - components: - - type: Transform - pos: 1.5,-9.5 - parent: 1 - - uid: 374 - components: - - type: Transform - pos: -3.5,2.5 - parent: 1 - - uid: 609 - components: - - type: Transform - pos: -4.5,3.5 - parent: 1 - - uid: 616 - components: - - type: Transform - pos: -5.5,-3.5 - parent: 1 - - uid: 818 - components: - - type: Transform - pos: -3.5,3.5 - parent: 1 - - uid: 884 - components: - - type: Transform - pos: 17.5,-1.5 - parent: 1 -- proto: AsteroidAltRockMining - entities: - - uid: 186 - components: - - type: Transform - pos: -8.5,-5.5 - parent: 1 - - uid: 306 - components: - - type: Transform - pos: 16.5,8.5 - parent: 1 -- proto: AtmosDeviceFanTiny - entities: - - uid: 341 - components: - - type: Transform - pos: 3.5,6.5 - parent: 1 -- proto: Bed - entities: - - uid: 342 - components: - - type: Transform - pos: -0.5,1.5 - parent: 1 - - uid: 343 - components: - - type: Transform - pos: 6.5,1.5 - parent: 1 - - uid: 344 - components: - - type: Transform - pos: 6.5,3.5 - parent: 1 - - uid: 345 - components: - - type: Transform - pos: -1.5,1.5 - parent: 1 -- proto: BedsheetSyndie - entities: - - uid: 346 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -0.5,1.5 - parent: 1 - - uid: 347 - components: - - type: Transform - pos: 6.5,1.5 - parent: 1 - - uid: 348 - components: - - type: Transform - pos: 6.5,3.5 - parent: 1 - - uid: 349 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -1.5,1.5 - parent: 1 -- proto: BenchSofaCorpLeft - entities: - - uid: 422 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 6.5,-4.5 - parent: 1 - - uid: 423 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 8.5,-5.5 - parent: 1 - - uid: 984 - components: - - type: Transform - pos: 11.5,2.5 - parent: 1 -- proto: BenchSofaCorpRight - entities: - - uid: 404 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 6.5,-5.5 - parent: 1 - - uid: 421 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 8.5,-4.5 - parent: 1 - - uid: 985 - components: - - type: Transform - pos: 10.5,2.5 - parent: 1 -- proto: BlastDoorOpen - entities: - - uid: 350 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 6.5,-6.5 - parent: 1 - - type: DeviceLinkSink - links: - - 807 - - uid: 351 - components: - - type: Transform - pos: 13.5,0.5 - parent: 1 - - type: DeviceLinkSink - invokeCounter: 4 - links: - - 805 - - uid: 352 - components: - - type: Transform - pos: 13.5,1.5 - parent: 1 - - type: DeviceLinkSink - invokeCounter: 4 - links: - - 805 - - uid: 353 - components: - - type: Transform - pos: 13.5,-0.5 - parent: 1 - - type: DeviceLinkSink - invokeCounter: 4 - links: - - 805 - - uid: 354 - components: - - type: Transform - pos: 13.5,2.5 - parent: 1 - - type: DeviceLinkSink - invokeCounter: 4 - links: - - 805 - - uid: 355 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 7.5,-6.5 - parent: 1 - - type: DeviceLinkSink - links: - - 807 - - uid: 356 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 8.5,-6.5 - parent: 1 - - type: DeviceLinkSink - links: - - 807 - - uid: 357 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 10.5,-5.5 - parent: 1 - - type: DeviceLinkSink - links: - - 807 - - uid: 358 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 11.5,-5.5 - parent: 1 - - type: DeviceLinkSink - links: - - 807 - - uid: 359 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 12.5,-5.5 - parent: 1 - - type: DeviceLinkSink - links: - - 807 - - uid: 360 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 13.5,-5.5 - parent: 1 - - type: DeviceLinkSink - links: - - 807 - - uid: 361 - components: - - type: Transform - pos: 10.5,-1.5 - parent: 1 - - type: DeviceLinkSink - links: - - 805 -- proto: BoozeDispenser - entities: - - uid: 362 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 1.5,-3.5 - parent: 1 - - type: Emagged -- proto: BoxHandcuff - entities: - - uid: 118 - components: - - type: Transform - parent: 363 - - type: Physics - canCollide: False - - type: InsideEntityStorage -- proto: BoxLethalshot - entities: - - uid: 365 - components: - - type: Transform - parent: 363 - - type: Physics - canCollide: False - - type: InsideEntityStorage - - uid: 366 - components: - - type: Transform - parent: 363 - - type: Physics - canCollide: False - - type: InsideEntityStorage -- proto: BoxShotgunFlare - entities: - - uid: 367 - components: - - type: Transform - parent: 363 - - type: Physics - canCollide: False - - type: InsideEntityStorage -- proto: BriefcaseBrownFilled - entities: - - uid: 401 - components: - - type: Transform - pos: 12.580331,-0.57071495 - parent: 1 - - uid: 402 - components: - - type: Transform - pos: 12.615925,0.015501022 - parent: 1 - - uid: 403 - components: - - type: Transform - pos: 12.615925,-0.21887398 - parent: 1 -- proto: CableApcExtension - entities: - - uid: 440 - components: - - type: Transform - pos: 7.5,0.5 - parent: 1 - - uid: 441 - components: - - type: Transform - pos: 8.5,0.5 - parent: 1 - - uid: 442 - components: - - type: Transform - pos: 9.5,0.5 - parent: 1 - - uid: 443 - components: - - type: Transform - pos: 9.5,1.5 - parent: 1 - - uid: 444 - components: - - type: Transform - pos: 9.5,-0.5 - parent: 1 - - uid: 445 - components: - - type: Transform - pos: 2.5,4.5 - parent: 1 - - uid: 446 - components: - - type: Transform - pos: 2.5,3.5 - parent: 1 - - uid: 447 - components: - - type: Transform - pos: 1.5,2.5 - parent: 1 - - uid: 448 - components: - - type: Transform - pos: 1.5,2.5 - parent: 1 - - uid: 449 - components: - - type: Transform - pos: 3.5,2.5 - parent: 1 - - uid: 450 - components: - - type: Transform - pos: 2.5,2.5 - parent: 1 - - uid: 451 - components: - - type: Transform - pos: 3.5,1.5 - parent: 1 - - uid: 452 - components: - - type: Transform - pos: 3.5,0.5 - parent: 1 - - uid: 453 - components: - - type: Transform - pos: 3.5,-5.5 - parent: 1 - - uid: 454 - components: - - type: Transform - pos: 3.5,-4.5 - parent: 1 - - uid: 455 - components: - - type: Transform - pos: 3.5,-3.5 - parent: 1 - - uid: 456 - components: - - type: Transform - pos: -1.5,-3.5 - parent: 1 - - uid: 457 - components: - - type: Transform - pos: 4.5,-3.5 - parent: 1 - - uid: 458 - components: - - type: Transform - pos: 1.5,1.5 - parent: 1 - - uid: 459 - components: - - type: Transform - pos: 1.5,0.5 - parent: 1 - - uid: 460 - components: - - type: Transform - pos: 1.5,-0.5 - parent: 1 - - uid: 461 - components: - - type: Transform - pos: 0.5,-0.5 - parent: 1 - - uid: 462 - components: - - type: Transform - pos: -0.5,-0.5 - parent: 1 - - uid: 463 - components: - - type: Transform - pos: -0.5,0.5 - parent: 1 - - uid: 464 - components: - - type: Transform - pos: -1.5,-2.5 - parent: 1 - - uid: 465 - components: - - type: Transform - pos: -1.5,-0.5 - parent: 1 - - uid: 466 - components: - - type: Transform - pos: -1.5,-1.5 - parent: 1 - - uid: 467 - components: - - type: Transform - pos: 2.5,-5.5 - parent: 1 - - uid: 468 - components: - - type: Transform - pos: 2.5,-6.5 - parent: 1 - - uid: 469 - components: - - type: Transform - pos: 1.5,-6.5 - parent: 1 - - uid: 470 - components: - - type: Transform - pos: 0.5,-6.5 - parent: 1 - - uid: 471 - components: - - type: Transform - pos: -0.5,-6.5 - parent: 1 - - uid: 472 - components: - - type: Transform - pos: 1.5,3.5 - parent: 1 - - uid: 473 - components: - - type: Transform - pos: 0.5,3.5 - parent: 1 - - uid: 474 - components: - - type: Transform - pos: -0.5,3.5 - parent: 1 - - uid: 475 - components: - - type: Transform - pos: -1.5,3.5 - parent: 1 - - uid: 476 - components: - - type: Transform - pos: -1.5,4.5 - parent: 1 - - uid: 477 - components: - - type: Transform - pos: 10.5,-0.5 - parent: 1 - - uid: 478 - components: - - type: Transform - pos: 10.5,-1.5 - parent: 1 - - uid: 479 - components: - - type: Transform - pos: 10.5,-2.5 - parent: 1 - - uid: 480 - components: - - type: Transform - pos: 10.5,-3.5 - parent: 1 - - uid: 481 - components: - - type: Transform - pos: 11.5,-3.5 - parent: 1 - - uid: 482 - components: - - type: Transform - pos: 12.5,-3.5 - parent: 1 - - uid: 483 - components: - - type: Transform - pos: 7.5,-0.5 - parent: 1 - - uid: 484 - components: - - type: Transform - pos: 6.5,-0.5 - parent: 1 - - uid: 485 - components: - - type: Transform - pos: 6.5,-1.5 - parent: 1 - - uid: 486 - components: - - type: Transform - pos: 6.5,-2.5 - parent: 1 - - uid: 487 - components: - - type: Transform - pos: 6.5,-3.5 - parent: 1 - - uid: 488 - components: - - type: Transform - pos: 7.5,-3.5 - parent: 1 - - uid: 489 - components: - - type: Transform - pos: 7.5,-4.5 - parent: 1 - - uid: 490 - components: - - type: Transform - pos: 3.5,3.5 - parent: 1 - - uid: 491 - components: - - type: Transform - pos: 4.5,3.5 - parent: 1 - - uid: 492 - components: - - type: Transform - pos: 5.5,3.5 - parent: 1 - - uid: 954 - components: - - type: Transform - pos: 10.5,2.5 - parent: 1 - - uid: 959 - components: - - type: Transform - pos: 9.5,2.5 - parent: 1 -- proto: CableHV - entities: - - uid: 493 - components: - - type: Transform - pos: -0.5,6.5 - parent: 1 - - uid: 494 - components: - - type: Transform - pos: -0.5,5.5 - parent: 1 - - uid: 495 - components: - - type: Transform - pos: 0.5,5.5 - parent: 1 - - uid: 496 - components: - - type: Transform - pos: -1.5,5.5 - parent: 1 - - uid: 497 - components: - - type: Transform - pos: -1.5,6.5 - parent: 1 - - uid: 498 - components: - - type: Transform - pos: -1.5,4.5 - parent: 1 - - uid: 499 - components: - - type: Transform - pos: -1.5,3.5 - parent: 1 - - uid: 500 - components: - - type: Transform - pos: -0.5,3.5 - parent: 1 - - uid: 501 - components: - - type: Transform - pos: -2.5,5.5 - parent: 1 - - uid: 502 - components: - - type: Transform - pos: -2.5,4.5 - parent: 1 - - uid: 503 - components: - - type: Transform - pos: -2.5,3.5 - parent: 1 - - uid: 504 - components: - - type: Transform - pos: -1.5,2.5 - parent: 1 - - uid: 505 - components: - - type: Transform - pos: -0.5,2.5 - parent: 1 -- proto: CableMV - entities: - - uid: 506 - components: - - type: Transform - pos: -1.5,4.5 - parent: 1 - - uid: 507 - components: - - type: Transform - pos: -0.5,5.5 - parent: 1 - - uid: 508 - components: - - type: Transform - pos: 0.5,5.5 - parent: 1 - - uid: 509 - components: - - type: Transform - pos: -1.5,5.5 - parent: 1 - - uid: 510 - components: - - type: Transform - pos: -1.5,3.5 - parent: 1 - - uid: 511 - components: - - type: Transform - pos: -0.5,3.5 - parent: 1 - - uid: 512 - components: - - type: Transform - pos: 1.5,3.5 - parent: 1 - - uid: 513 - components: - - type: Transform - pos: 0.5,3.5 - parent: 1 - - uid: 514 - components: - - type: Transform - pos: 2.5,3.5 - parent: 1 - - uid: 515 - components: - - type: Transform - pos: 2.5,4.5 - parent: 1 - - uid: 516 - components: - - type: Transform - pos: 2.5,2.5 - parent: 1 - - uid: 517 - components: - - type: Transform - pos: 2.5,1.5 - parent: 1 - - uid: 518 - components: - - type: Transform - pos: 2.5,0.5 - parent: 1 - - uid: 519 - components: - - type: Transform - pos: 2.5,-0.5 - parent: 1 - - uid: 520 - components: - - type: Transform - pos: 2.5,-1.5 - parent: 1 - - uid: 521 - components: - - type: Transform - pos: 2.5,-2.5 - parent: 1 - - uid: 522 - components: - - type: Transform - pos: 2.5,-3.5 - parent: 1 - - uid: 523 - components: - - type: Transform - pos: 2.5,-4.5 - parent: 1 - - uid: 524 - components: - - type: Transform - pos: 3.5,-4.5 - parent: 1 - - uid: 525 - components: - - type: Transform - pos: 3.5,-5.5 - parent: 1 - - uid: 526 - components: - - type: Transform - pos: 3.5,-0.5 - parent: 1 - - uid: 527 - components: - - type: Transform - pos: 4.5,-0.5 - parent: 1 - - uid: 528 - components: - - type: Transform - pos: 5.5,-0.5 - parent: 1 - - uid: 529 - components: - - type: Transform - pos: 6.5,-0.5 - parent: 1 - - uid: 530 - components: - - type: Transform - pos: 6.5,-0.5 - parent: 1 - - uid: 531 - components: - - type: Transform - pos: 7.5,-0.5 - parent: 1 - - uid: 532 - components: - - type: Transform - pos: 8.5,-0.5 - parent: 1 - - uid: 533 - components: - - type: Transform - pos: 8.5,0.5 - parent: 1 - - uid: 534 - components: - - type: Transform - pos: 7.5,0.5 - parent: 1 -- proto: CarpetBlack - entities: - - uid: 381 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 3.5,2.5 - parent: 1 - - uid: 570 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 6.5,-4.5 - parent: 1 - - uid: 571 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 6.5,-5.5 - parent: 1 - - uid: 572 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 7.5,-4.5 - parent: 1 - - uid: 573 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 7.5,-5.5 - parent: 1 - - uid: 574 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 8.5,-5.5 - parent: 1 - - uid: 575 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 8.5,-4.5 - parent: 1 - - uid: 960 - components: - - type: Transform - pos: 2.5,2.5 - parent: 1 - - uid: 964 - components: - - type: Transform - pos: 3.5,1.5 - parent: 1 - - uid: 965 - components: - - type: Transform - pos: 2.5,0.5 - parent: 1 - - uid: 966 - components: - - type: Transform - pos: 3.5,0.5 - parent: 1 - - uid: 967 - components: - - type: Transform - pos: 2.5,1.5 - parent: 1 - - uid: 968 - components: - - type: Transform - pos: -1.5,1.5 - parent: 1 - - uid: 969 - components: - - type: Transform - pos: -1.5,0.5 - parent: 1 - - uid: 970 - components: - - type: Transform - pos: -2.5,0.5 - parent: 1 - - uid: 971 - components: - - type: Transform - pos: -1.5,-0.5 - parent: 1 - - uid: 972 - components: - - type: Transform - pos: -0.5,-0.5 - parent: 1 - - uid: 973 - components: - - type: Transform - pos: -0.5,0.5 - parent: 1 - - uid: 974 - components: - - type: Transform - pos: -0.5,1.5 - parent: 1 - - uid: 975 - components: - - type: Transform - pos: 6.5,1.5 - parent: 1 - - uid: 976 - components: - - type: Transform - pos: 6.5,2.5 - parent: 1 - - uid: 977 - components: - - type: Transform - pos: 6.5,3.5 - parent: 1 - - uid: 978 - components: - - type: Transform - pos: 9.5,1.5 - parent: 1 - - uid: 979 - components: - - type: Transform - pos: 9.5,0.5 - parent: 1 - - uid: 980 - components: - - type: Transform - pos: 10.5,0.5 - parent: 1 - - uid: 981 - components: - - type: Transform - pos: 10.5,1.5 - parent: 1 - - uid: 982 - components: - - type: Transform - pos: 11.5,1.5 - parent: 1 - - uid: 983 - components: - - type: Transform - pos: 11.5,0.5 - parent: 1 -- proto: ChairOfficeDark - entities: - - uid: 535 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 9.5,1.5 - parent: 1 - - uid: 536 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 11.5,1.5 - parent: 1 -- proto: CigPackSyndicate - entities: - - uid: 558 - components: - - type: Transform - pos: 4.7080255,1.4853511 - parent: 1 - - uid: 569 - components: - - type: Transform - pos: 4.7236505,1.7666011 - parent: 1 -- proto: ClosetWallBlack - entities: - - uid: 405 - components: - - type: MetaData - desc: A closet packed with forged stamps - name: stamp closet - - type: Transform - pos: 10.5,3.5 - parent: 1 - - type: EntityStorage - air: - volume: 200 - immutable: False - temperature: 293.14673 - moles: - - 1.7459903 - - 6.568249 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - type: ContainerContainer - containers: - entity_storage: !type:Container - showEnts: False - occludes: True - ents: - - 411 - - 410 - - 409 - - 408 - - 407 - - 406 - - 412 - - 413 - - 414 - - 415 - - 416 - - 417 - - 418 - - 419 - - 420 -- proto: ClosetWallMixed - entities: - - uid: 388 - components: - - type: MetaData - name: pyjama closet - - type: Transform - rot: -1.5707963267948966 rad - pos: 7.5,2.5 - parent: 1 - - type: EntityStorage - air: - volume: 200 - immutable: False - temperature: 293.14673 - moles: - - 1.7459903 - - 6.568249 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - type: ContainerContainer - containers: - entity_storage: !type:Container - showEnts: False - occludes: True - ents: - - 400 - - 399 - - 393 - - 392 - - 391 - - 390 - - 398 - - 397 - - 396 - - 395 - - 394 - - 389 -- proto: ClothingHeadPyjamaSyndicateBlack - entities: - - uid: 393 - components: - - type: Transform - parent: 388 - - type: Physics - canCollide: False - - type: InsideEntityStorage - - uid: 395 - components: - - type: Transform - parent: 388 - - type: Physics - canCollide: False - - type: InsideEntityStorage -- proto: ClothingHeadPyjamaSyndicatePink - entities: - - uid: 396 - components: - - type: Transform - parent: 388 - - type: Physics - canCollide: False - - type: InsideEntityStorage - - uid: 399 - components: - - type: Transform - parent: 388 - - type: Physics - canCollide: False - - type: InsideEntityStorage -- proto: ClothingHeadPyjamaSyndicateRed - entities: - - uid: 389 - components: - - type: Transform - parent: 388 - - type: Physics - canCollide: False - - type: InsideEntityStorage - - uid: 391 - components: - - type: Transform - parent: 388 - - type: Physics - canCollide: False - - type: InsideEntityStorage -- proto: ClothingMaskGasVoiceChameleon - entities: - - uid: 540 - components: - - type: Transform - pos: 11.346417,2.446512 - parent: 1 - - uid: 541 - components: - - type: Transform - pos: 10.971417,2.462137 - parent: 1 -- proto: ClothingUniformJumpsuitPyjamaSyndicateBlack - entities: - - uid: 392 - components: - - type: Transform - parent: 388 - - type: Physics - canCollide: False - - type: InsideEntityStorage - - uid: 397 - components: - - type: Transform - parent: 388 - - type: Physics - canCollide: False - - type: InsideEntityStorage -- proto: ClothingUniformJumpsuitPyjamaSyndicatePink - entities: - - uid: 390 - components: - - type: Transform - parent: 388 - - type: Physics - canCollide: False - - type: InsideEntityStorage - - uid: 400 - components: - - type: Transform - parent: 388 - - type: Physics - canCollide: False - - type: InsideEntityStorage -- proto: ClothingUniformJumpsuitPyjamaSyndicateRed - entities: - - uid: 394 - components: - - type: Transform - parent: 388 - - type: Physics - canCollide: False - - type: InsideEntityStorage - - uid: 398 - components: - - type: Transform - parent: 388 - - type: Physics - canCollide: False - - type: InsideEntityStorage -- proto: CombatKnife - entities: - - uid: 376 - components: - - type: Transform - parent: 363 - - type: Physics - canCollide: False - - type: InsideEntityStorage - - uid: 377 - components: - - type: Transform - parent: 363 - - type: Physics - canCollide: False - - type: InsideEntityStorage -- proto: ComfyChair - entities: - - uid: 543 - components: - - type: Transform - pos: 1.5,2.5 - parent: 1 -- proto: ComputerCrewMonitoring - entities: - - uid: 548 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 12.5,0.5 - parent: 1 -- proto: ComputerMassMedia - entities: - - uid: 311 - components: - - type: Transform - pos: 9.5,2.5 - parent: 1 -- proto: ComputerRadar - entities: - - uid: 550 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 12.5,1.5 - parent: 1 - - type: RadarConsole - maxRange: 2048 - - type: WorldLoader - radius: 2048 -- proto: CrateFoodDonkpocketSavory - entities: - - uid: 551 - components: - - type: Transform - pos: -0.5,-5.5 - parent: 1 - - type: EntityStorage - air: - volume: 200 - immutable: False - temperature: 293.1496 - moles: - - 1.8856695 - - 7.0937095 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 -- proto: CrateServiceBureaucracy - entities: - - uid: 577 - components: - - type: Transform - pos: -1.5,4.5 - parent: 1 -- proto: CrowbarRed - entities: - - uid: 378 - components: - - type: Transform - parent: 363 - - type: Physics - canCollide: False - - type: InsideEntityStorage -- proto: DefibrillatorCabinetFilled - entities: - - uid: 552 - components: - - type: Transform - pos: -0.5,-1.5 - parent: 1 -- proto: DiagnosisReportPaper - entities: - - uid: 432 - components: - - type: Transform - pos: 8.472298,0.6316006 - parent: 1 - - uid: 554 - components: - - type: Transform - pos: 8.472298,0.6316006 - parent: 1 - - uid: 562 - components: - - type: Transform - pos: 8.472298,0.6316006 - parent: 1 - - uid: 564 - components: - - type: Transform - pos: 8.472298,0.6316006 - parent: 1 - - uid: 566 - components: - - type: Transform - pos: 8.472298,0.6316006 - parent: 1 -- proto: DisposalPipe - entities: - - uid: 599 - components: - - type: Transform - pos: 10.5,-3.5 - parent: 1 - - uid: 600 - components: - - type: Transform - pos: 10.5,-4.5 - parent: 1 - - uid: 601 - components: - - type: Transform - pos: 10.5,-5.5 - parent: 1 -- proto: DisposalTrunk - entities: - - uid: 602 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 10.5,-6.5 - parent: 1 - - uid: 603 - components: - - type: Transform - pos: 10.5,-2.5 - parent: 1 -- proto: DisposalUnit - entities: - - uid: 604 - components: - - type: MetaData - name: escape hatch - - type: Transform - pos: 10.5,-2.5 - parent: 1 -- proto: DrinkMugDog - entities: - - uid: 605 - components: - - type: Transform - rot: 6.283185307179586 rad - pos: 1.6752021,1.4137775 - parent: 1 -- proto: DrinkMugHeart - entities: - - uid: 606 - components: - - type: Transform - pos: 1.2883832,1.4021075 - parent: 1 -- proto: DrinkMugOne - entities: - - uid: 607 - components: - - type: Transform - pos: 1.6477582,1.7614824 - parent: 1 -- proto: DrinkMugRainbow - entities: - - uid: 608 - components: - - type: Transform - pos: 1.3040082,1.7302322 - parent: 1 -- proto: EncryptionKeyCommand - entities: - - uid: 613 - components: - - type: Transform - parent: 612 - - type: Physics - canCollide: False -- proto: EncryptionKeyStationMaster - entities: - - uid: 614 - components: - - type: Transform - parent: 612 - - type: Physics - canCollide: False -- proto: EncryptionKeySyndie - entities: - - uid: 615 - components: - - type: Transform - parent: 612 - - type: Physics - canCollide: False -- proto: ExtinguisherCabinet - entities: - - uid: 619 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 6.5,0.5 - parent: 1 -- proto: FaxMachineListeningSyndie - entities: - - uid: 368 - components: - - type: Transform - pos: 8.5,2.5 - parent: 1 -- proto: filingCabinetDrawerRandom - entities: - - uid: 567 - components: - - type: Transform - pos: 9.5,0.5 - parent: 1 -- proto: FireAlarm - entities: - - uid: 621 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 3.5,-1.5 - parent: 1 - - type: DeviceList - devices: - - 628 - - 629 - - 622 - - 623 - - 624 - - 632 - - 631 - - 625 - - 627 - - 633 - - type: AtmosDevice - joinedGrid: 1 -- proto: Firelock - entities: - - uid: 622 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 5.5,-0.5 - parent: 1 - - uid: 623 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 7.5,-0.5 - parent: 1 - - uid: 624 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 6.5,-1.5 - parent: 1 - - uid: 625 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 5.5,2.5 - parent: 1 - - uid: 626 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 3.5,4.5 - parent: 1 - - uid: 627 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 2.5,5.5 - parent: 1 - - uid: 628 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 0.5,3.5 - parent: 1 - - uid: 629 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 0.5,-0.5 - parent: 1 - - uid: 630 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -1.5,-1.5 - parent: 1 - - uid: 631 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 2.5,-5.5 - parent: 1 - - uid: 632 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 2.5,-1.5 - parent: 1 - - uid: 633 - components: - - type: Transform - pos: 9.5,-3.5 - parent: 1 -- proto: ForensicReportPaper - entities: - - uid: 427 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 8.519173,0.6784754 - parent: 1 - - uid: 555 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 8.519173,0.6784754 - parent: 1 - - uid: 557 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 8.519173,0.6784754 - parent: 1 - - uid: 561 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 8.519173,0.6784754 - parent: 1 - - uid: 563 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 8.519173,0.6784754 - parent: 1 -- proto: GasPassiveVent - entities: - - uid: 634 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -5.5,1.5 - parent: 1 - - type: AtmosDevice - joinedGrid: 1 - - type: AtmosPipeColor - color: '#FF1212FF' - - uid: 635 - components: - - type: Transform - pos: 6.5,6.5 - parent: 1 - - type: AtmosDevice - joinedGrid: 1 - - type: AtmosPipeColor - color: '#FF1212FF' - - uid: 636 - components: - - type: Transform - pos: 4.5,10.5 - parent: 1 - - type: AtmosDevice - joinedGrid: 1 - - type: AtmosPipeColor - color: '#FF1212FF' - - uid: 637 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 14.5,-0.5 - parent: 1 - - type: AtmosDevice - joinedGrid: 1 - - type: AtmosPipeColor - color: '#FF1212FF' - - uid: 638 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 13.5,-6.5 - parent: 1 - - type: AtmosDevice - joinedGrid: 1 - - type: AtmosPipeColor - color: '#FF1212FF' - - uid: 639 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 8.5,-7.5 - parent: 1 - - type: AtmosDevice - joinedGrid: 1 - - type: AtmosPipeColor - color: '#FF1212FF' - - uid: 640 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 4.5,-10.5 - parent: 1 - - type: AtmosDevice - joinedGrid: 1 - - type: AtmosPipeColor - color: '#FF1212FF' - - uid: 641 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -4.5,-3.5 - parent: 1 - - type: AtmosDevice - joinedGrid: 1 - - type: AtmosPipeColor - color: '#FF1212FF' - - uid: 642 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -4.5,5.5 - parent: 1 - - type: AtmosDevice - joinedGrid: 1 - - type: AtmosPipeColor - color: '#FF1212FF' -- proto: GasPipeBend - entities: - - uid: 643 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -3.5,0.5 - parent: 1 - - type: AtmosPipeColor - color: '#FF1212FF' - - uid: 644 - components: - - type: Transform - pos: -3.5,1.5 - parent: 1 - - type: AtmosPipeColor - color: '#FF1212FF' - - uid: 645 - components: - - type: Transform - pos: 6.5,2.5 - parent: 1 - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 646 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -1.5,-0.5 - parent: 1 - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 647 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 2.5,-6.5 - parent: 1 - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 648 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 6.5,-3.5 - parent: 1 - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 649 - components: - - type: Transform - pos: 10.5,-0.5 - parent: 1 - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 650 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 10.5,-3.5 - parent: 1 - - type: AtmosPipeColor - color: '#0335FCFF' -- proto: GasPipeFourway - entities: - - uid: 651 - components: - - type: Transform - pos: 2.5,-0.5 - parent: 1 - - type: AtmosPipeColor - color: '#0335FCFF' -- proto: GasPipeStraight - entities: - - uid: 652 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 1.5,4.5 - parent: 1 - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 653 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 0.5,3.5 - parent: 1 - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 654 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -4.5,1.5 - parent: 1 - - type: AtmosPipeColor - color: '#FF1212FF' - - uid: 655 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -2.5,0.5 - parent: 1 - - type: AtmosPipeColor - color: '#FF1212FF' - - uid: 656 - components: - - type: Transform - pos: 4.5,-7.5 - parent: 1 - - type: AtmosPipeColor - color: '#FF1212FF' - - uid: 657 - components: - - type: Transform - pos: 4.5,-8.5 - parent: 1 - - type: AtmosPipeColor - color: '#FF1212FF' - - uid: 658 - components: - - type: Transform - pos: 4.5,-9.5 - parent: 1 - - type: AtmosPipeColor - color: '#FF1212FF' - - uid: 659 - components: - - type: Transform - pos: 8.5,-6.5 - parent: 1 - - type: AtmosPipeColor - color: '#FF1212FF' - - uid: 660 - components: - - type: Transform - pos: 8.5,-5.5 - parent: 1 - - type: AtmosPipeColor - color: '#FF1212FF' - - uid: 661 - components: - - type: Transform - pos: 8.5,-4.5 - parent: 1 - - type: AtmosPipeColor - color: '#FF1212FF' - - uid: 662 - components: - - type: Transform - pos: 13.5,-4.5 - parent: 1 - - type: AtmosPipeColor - color: '#FF1212FF' - - uid: 663 - components: - - type: Transform - pos: 13.5,-5.5 - parent: 1 - - type: AtmosPipeColor - color: '#FF1212FF' - - uid: 664 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 13.5,-0.5 - parent: 1 - - type: AtmosPipeColor - color: '#FF1212FF' - - uid: 665 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 12.5,-0.5 - parent: 1 - - type: AtmosPipeColor - color: '#FF1212FF' - - uid: 666 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 6.5,4.5 - parent: 1 - - type: AtmosPipeColor - color: '#FF1212FF' - - uid: 667 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 6.5,5.5 - parent: 1 - - type: AtmosPipeColor - color: '#FF1212FF' - - uid: 668 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 4.5,4.5 - parent: 1 - - type: AtmosPipeColor - color: '#FF1212FF' - - uid: 669 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 4.5,5.5 - parent: 1 - - type: AtmosPipeColor - color: '#FF1212FF' - - uid: 670 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 4.5,6.5 - parent: 1 - - type: AtmosPipeColor - color: '#FF1212FF' - - uid: 671 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 4.5,7.5 - parent: 1 - - type: AtmosPipeColor - color: '#FF1212FF' - - uid: 672 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 4.5,8.5 - parent: 1 - - type: AtmosPipeColor - color: '#FF1212FF' - - uid: 673 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 4.5,9.5 - parent: 1 - - type: AtmosPipeColor - color: '#FF1212FF' - - uid: 674 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 7.5,-0.5 - parent: 1 - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 675 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 5.5,-0.5 - parent: 1 - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 676 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 5.5,2.5 - parent: 1 - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 677 - components: - - type: Transform - pos: -1.5,-1.5 - parent: 1 - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 678 - components: - - type: Transform - pos: 2.5,-5.5 - parent: 1 - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 679 - components: - - type: Transform - pos: 2.5,-4.5 - parent: 1 - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 680 - components: - - type: Transform - pos: 2.5,-3.5 - parent: 1 - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 681 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -2.5,-3.5 - parent: 1 - - type: AtmosPipeColor - color: '#FF1212FF' - - uid: 682 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -3.5,-3.5 - parent: 1 - - type: AtmosPipeColor - color: '#FF1212FF' - - uid: 683 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -2.5,5.5 - parent: 1 - - type: AtmosPipeColor - color: '#FF1212FF' - - uid: 684 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -3.5,5.5 - parent: 1 - - type: AtmosPipeColor - color: '#FF1212FF' - - uid: 685 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 6.5,-2.5 - parent: 1 - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 686 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 6.5,-1.5 - parent: 1 - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 687 - components: - - type: Transform - pos: 10.5,-1.5 - parent: 1 - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 688 - components: - - type: Transform - pos: 10.5,-2.5 - parent: 1 - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 689 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 9.5,-0.5 - parent: 1 - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 690 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,2.5 - parent: 1 - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 691 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 3.5,2.5 - parent: 1 - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 692 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 2.5,1.5 - parent: 1 - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 693 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 2.5,0.5 - parent: 1 - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 694 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 1.5,-0.5 - parent: 1 - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 695 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 0.5,-0.5 - parent: 1 - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 696 - components: - - type: Transform - pos: 2.5,-1.5 - parent: 1 - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 697 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 3.5,-0.5 - parent: 1 - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 698 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,-0.5 - parent: 1 - - type: AtmosPipeColor - color: '#0335FCFF' -- proto: GasPipeTJunction - entities: - - uid: 699 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 1.5,3.5 - parent: 1 - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 700 - components: - - type: Transform - pos: 2.5,3.5 - parent: 1 - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 701 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 2.5,2.5 - parent: 1 - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 702 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -0.5,-0.5 - parent: 1 - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 703 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 2.5,-2.5 - parent: 1 - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 704 - components: - - type: Transform - pos: 6.5,-0.5 - parent: 1 - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 705 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 8.5,-0.5 - parent: 1 - - type: AtmosPipeColor - color: '#0335FCFF' -- proto: GasPort - entities: - - uid: 706 - components: - - type: Transform - pos: 1.5,5.5 - parent: 1 - - type: AtmosDevice - joinedGrid: 1 - - type: AtmosPipeColor - color: '#0335FCFF' -- proto: GasVentPump - entities: - - uid: 384 - components: - - type: Transform - pos: 8.5,0.5 - parent: 1 - - type: DeviceNetwork - deviceLists: - - 576 - - type: AtmosDevice - joinedGrid: 1 - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 707 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -0.5,3.5 - parent: 1 - - type: DeviceNetwork - deviceLists: - - 576 - - type: AtmosDevice - joinedGrid: 1 - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 708 - components: - - type: Transform - pos: -0.5,0.5 - parent: 1 - - type: DeviceNetwork - deviceLists: - - 576 - - type: AtmosDevice - joinedGrid: 1 - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 709 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -1.5,-2.5 - parent: 1 - - type: DeviceNetwork - deviceLists: - - 576 - - type: AtmosDevice - joinedGrid: 1 - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 710 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 3.5,-2.5 - parent: 1 - - type: DeviceNetwork - deviceLists: - - 576 - - type: AtmosDevice - joinedGrid: 1 - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 711 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 3.5,-6.5 - parent: 1 - - type: DeviceNetwork - deviceLists: - - 576 - - type: AtmosDevice - joinedGrid: 1 - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 712 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 7.5,-3.5 - parent: 1 - - type: DeviceNetwork - deviceLists: - - 576 - - type: AtmosDevice - joinedGrid: 1 - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 713 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 6.5,1.5 - parent: 1 - - type: DeviceNetwork - deviceLists: - - 576 - - type: AtmosDevice - joinedGrid: 1 - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 714 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 3.5,3.5 - parent: 1 - - type: DeviceNetwork - deviceLists: - - 576 - - type: AtmosDevice - joinedGrid: 1 - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 716 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 11.5,-3.5 - parent: 1 - - type: DeviceNetwork - deviceLists: - - 576 - - type: AtmosDevice - joinedGrid: 1 - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 717 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -0.5,-3.5 - parent: 1 - - type: AtmosDevice - joinedGrid: 1 -- proto: GasVentScrubber - entities: - - uid: 718 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 6.5,3.5 - parent: 1 - - type: DeviceNetwork - deviceLists: - - 576 - - type: AtmosDevice - joinedGrid: 1 - - type: AtmosPipeColor - color: '#FF1212FF' - - uid: 719 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -1.5,5.5 - parent: 1 - - type: DeviceNetwork - deviceLists: - - 576 - - type: AtmosDevice - joinedGrid: 1 - - type: AtmosPipeColor - color: '#FF1212FF' - - uid: 720 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -1.5,0.5 - parent: 1 - - type: DeviceNetwork - deviceLists: - - 576 - - type: AtmosDevice - joinedGrid: 1 - - type: AtmosPipeColor - color: '#FF1212FF' - - uid: 721 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -1.5,-3.5 - parent: 1 - - type: DeviceNetwork - deviceLists: - - 576 - - type: AtmosDevice - joinedGrid: 1 - - type: AtmosPipeColor - color: '#FF1212FF' - - uid: 722 - components: - - type: Transform - pos: 4.5,-6.5 - parent: 1 - - type: DeviceNetwork - deviceLists: - - 576 - - type: AtmosDevice - joinedGrid: 1 - - type: AtmosPipeColor - color: '#FF1212FF' - - uid: 723 - components: - - type: Transform - pos: 8.5,-3.5 - parent: 1 - - type: DeviceNetwork - deviceLists: - - 576 - - type: AtmosDevice - joinedGrid: 1 - - type: AtmosPipeColor - color: '#FF1212FF' - - uid: 724 - components: - - type: Transform - pos: 13.5,-3.5 - parent: 1 - - type: DeviceNetwork - deviceLists: - - 576 - - type: AtmosDevice - joinedGrid: 1 - - type: AtmosPipeColor - color: '#FF1212FF' - - uid: 725 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 11.5,-0.5 - parent: 1 - - type: DeviceNetwork - deviceLists: - - 576 - - type: AtmosDevice - joinedGrid: 1 - - type: AtmosPipeColor - color: '#FF1212FF' - - uid: 726 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 4.5,3.5 - parent: 1 - - type: DeviceNetwork - deviceLists: - - 576 - - type: AtmosDevice - joinedGrid: 1 - - type: AtmosPipeColor - color: '#FF1212FF' -- proto: GeneratorWallmountAPU - entities: - - uid: 727 - components: - - type: Transform - pos: -1.5,6.5 - parent: 1 - - uid: 728 - components: - - type: Transform - pos: -0.5,6.5 - parent: 1 - - uid: 729 - components: - - type: Transform - pos: -2.5,5.5 - parent: 1 - - uid: 730 - components: - - type: Transform - pos: -2.5,4.5 - parent: 1 - - uid: 732 - components: - - type: Transform - pos: -1.5,2.5 - parent: 1 - - uid: 733 - components: - - type: Transform - pos: -0.5,2.5 - parent: 1 -- proto: GravityGeneratorMini - entities: - - uid: 734 - components: - - type: Transform - pos: -0.5,5.5 - parent: 1 -- proto: Grille - entities: - - uid: 735 - components: - - type: Transform - pos: 10.5,-1.5 - parent: 1 - - uid: 736 - components: - - type: Transform - pos: 12.5,-5.5 - parent: 1 - - uid: 737 - components: - - type: Transform - pos: 13.5,-5.5 - parent: 1 - - uid: 738 - components: - - type: Transform - pos: 13.5,0.5 - parent: 1 - - uid: 739 - components: - - type: Transform - pos: 13.5,-0.5 - parent: 1 - - uid: 740 - components: - - type: Transform - pos: 13.5,1.5 - parent: 1 - - uid: 741 - components: - - type: Transform - pos: 13.5,2.5 - parent: 1 - - uid: 742 - components: - - type: Transform - pos: 7.5,-6.5 - parent: 1 - - uid: 743 - components: - - type: Transform - pos: 10.5,-5.5 - parent: 1 - - uid: 744 - components: - - type: Transform - pos: 8.5,-6.5 - parent: 1 - - uid: 745 - components: - - type: Transform - pos: 6.5,-6.5 - parent: 1 - - uid: 746 - components: - - type: Transform - pos: 11.5,-5.5 - parent: 1 -- proto: HospitalCurtainsOpen - entities: - - uid: 747 - components: - - type: Transform - pos: 6.5,3.5 - parent: 1 - - uid: 748 - components: - - type: Transform - pos: 6.5,1.5 - parent: 1 - - uid: 749 - components: - - type: Transform - pos: -1.5,1.5 - parent: 1 - - uid: 750 - components: - - type: Transform - pos: -0.5,1.5 - parent: 1 -- proto: hydroponicsTray - entities: - - uid: 751 - components: - - type: Transform - pos: 12.5,-4.5 - parent: 1 - - uid: 752 - components: - - type: Transform - pos: 13.5,-4.5 - parent: 1 - - uid: 753 - components: - - type: Transform - pos: 11.5,-4.5 - parent: 1 - - uid: 754 - components: - - type: Transform - pos: 10.5,-4.5 - parent: 1 -- proto: KitchenMicrowave - entities: - - uid: 755 - components: - - type: Transform - pos: 1.5,-2.5 - parent: 1 -- proto: LandMineExplosive - entities: - - uid: 756 - components: - - type: Transform - pos: 12.446557,-9.501101 - parent: 1 - - uid: 757 - components: - - type: Transform - pos: 17.449137,2.529461 - parent: 1 -- proto: LockerSyndicatePersonal - entities: - - uid: 363 - components: - - type: Transform - pos: -1.5,-5.5 - parent: 1 - - type: EntityStorage - air: - volume: 200 - immutable: False - temperature: 293.1496 - moles: - - 1.8978093 - - 7.139378 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - type: ContainerContainer - containers: - entity_storage: !type:Container - showEnts: False - occludes: True - ents: - - 378 - - 377 - - 379 - - 367 - - 366 - - 380 - - 376 - - 365 - - 118 - paper_label: !type:ContainerSlot - showEnts: False - occludes: True - ent: null -- proto: MedkitCombatFilled - entities: - - uid: 758 - components: - - type: Transform - pos: -0.28039455,-3.70372 - parent: 1 -- proto: MedkitFilled - entities: - - uid: 759 - components: - - type: Transform - pos: -0.57726955,-3.500595 - parent: 1 -- proto: Mirror - entities: - - uid: 957 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -2.5,-3.5 - parent: 1 -- proto: NukeDiskFake - entities: - - uid: 760 - components: - - type: Transform - pos: 16.778532,-0.7526432 - parent: 1 -- proto: PaperArtifactAnalyzer - entities: - - uid: 424 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 8.456674,0.66285014 - parent: 1 - - uid: 428 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 8.456674,0.66285014 - parent: 1 - - uid: 433 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 8.456674,0.66285014 - parent: 1 - - uid: 542 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 8.456674,0.66285014 - parent: 1 - - uid: 546 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 8.456674,0.66285014 - parent: 1 -- proto: PaperBin10 - entities: - - uid: 87 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 8.5,0.5 - parent: 1 - - uid: 761 - components: - - type: Transform - pos: 7.5,-5.5 - parent: 1 -- proto: PaperCaptainsThoughts - entities: - - uid: 430 - components: - - type: Transform - pos: 8.519173,0.64722514 - parent: 1 - - uid: 437 - components: - - type: Transform - pos: 8.519173,0.64722514 - parent: 1 - - uid: 537 - components: - - type: Transform - pos: 8.519173,0.64722514 - parent: 1 - - uid: 547 - components: - - type: Transform - pos: 8.519173,0.64722514 - parent: 1 - - uid: 553 - components: - - type: Transform - pos: 8.519173,0.64722514 - parent: 1 -- proto: PaperCargoBountyManifest - entities: - - uid: 426 - components: - - type: Transform - pos: 8.503549,0.6316006 - parent: 1 - - uid: 429 - components: - - type: Transform - pos: 8.503549,0.6316006 - parent: 1 - - uid: 434 - components: - - type: Transform - pos: 8.503549,0.6316006 - parent: 1 - - uid: 435 - components: - - type: Transform - pos: 8.503549,0.6316006 - parent: 1 - - uid: 544 - components: - - type: Transform - pos: 8.503549,0.6316006 - parent: 1 -- proto: PaperCargoInvoice - entities: - - uid: 431 - components: - - type: Transform - pos: 8.487924,0.6316004 - parent: 1 - - uid: 436 - components: - - type: Transform - pos: 8.487924,0.6316004 - parent: 1 - - uid: 438 - components: - - type: Transform - pos: 8.487924,0.6316004 - parent: 1 - - uid: 439 - components: - - type: Transform - pos: 8.487924,0.6316004 - parent: 1 - - uid: 538 - components: - - type: Transform - pos: 8.487924,0.6316004 - parent: 1 -- proto: PaperCNCSheet - entities: - - uid: 539 - components: - - type: Transform - pos: 8.503549,0.6316006 - parent: 1 - - uid: 545 - components: - - type: Transform - pos: 8.503549,0.6316006 - parent: 1 - - uid: 556 - components: - - type: Transform - pos: 8.503549,0.6316006 - parent: 1 - - uid: 559 - components: - - type: Transform - pos: 8.503549,0.6316006 - parent: 1 - - uid: 560 - components: - - type: Transform - pos: 8.503549,0.6316006 - parent: 1 -- proto: PlushieNuke - entities: - - uid: 762 - components: - - type: Transform - pos: 6.565984,3.4567177 - parent: 1 - - uid: 763 - components: - - type: Transform - pos: 16.527655,-0.5029521 - parent: 1 -- proto: PlushieRouny - entities: - - uid: 764 - components: - - type: Transform - pos: 6.487859,1.4254675 - parent: 1 -- proto: PosterContrabandDonk - entities: - - uid: 765 - components: - - type: Transform - pos: 1.5,-1.5 - parent: 1 -- proto: PosterContrabandSyndicateRecruitment - entities: - - uid: 766 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 4.5,6.5 - parent: 1 -- proto: PosterLegitHotDonkExplosion - entities: - - uid: 767 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -0.5,-4.5 - parent: 1 -- proto: PosterLegitNoERP - entities: - - uid: 578 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 11.5,3.5 - parent: 1 -- proto: PowerCellRecharger - entities: - - uid: 768 - components: - - type: Transform - pos: 8.5,1.5 - parent: 1 -- proto: Poweredlight - entities: - - uid: 18 - components: - - type: Transform - pos: 6.5,3.5 - parent: 1 - - uid: 19 - components: - - type: Transform - pos: 12.5,-2.5 - parent: 1 - - type: DeviceLinkSink - links: - - 46 - - uid: 21 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,1.5 - parent: 1 - - type: DeviceLinkSink - links: - - 46 - - uid: 375 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -0.5,0.5 - parent: 1 - - type: DeviceLinkSink - links: - - 46 - - uid: 731 - components: - - type: Transform - pos: 3.5,-2.5 - parent: 1 - - type: DeviceLinkSink - links: - - 46 - - uid: 896 - components: - - type: Transform - pos: 0.5,-6.5 - parent: 1 - - type: DeviceLinkSink - links: - - 46 - - uid: 917 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 1.5,1.5 - parent: 1 - - type: DeviceLinkSink - links: - - 46 - - uid: 956 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 6.5,-3.5 - parent: 1 - - type: DeviceLinkSink - links: - - 46 - - uid: 958 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 8.5,1.5 - parent: 1 - - type: DeviceLinkSink - links: - - 46 - - uid: 963 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -0.5,4.5 - parent: 1 - - type: DeviceLinkSink - links: - - 46 -- proto: PoweredLightColoredRed - entities: - - uid: 20 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 6.5,-4.5 - parent: 1 - - type: DeviceLinkSink - links: - - 46 - - uid: 22 - components: - - type: Transform - pos: 12.5,2.5 - parent: 1 - - type: DeviceLinkSink - links: - - 46 - - uid: 23 - components: - - type: Transform - pos: -1.5,-5.5 - parent: 1 - - type: DeviceLinkSink - links: - - 46 - - uid: 769 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -1.5,-0.5 - parent: 1 - - type: DeviceLinkSink - links: - - 46 - - type: Timer - - uid: 770 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -1.5,4.5 - parent: 1 - - type: DeviceLinkSink - links: - - 46 - - uid: 771 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 1.5,2.5 - parent: 1 - - type: DeviceLinkSink - links: - - 46 - - type: Timer - - uid: 772 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 1.5,-3.5 - parent: 1 - - type: DeviceLinkSink - links: - - 46 - - uid: 773 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,0.5 - parent: 1 - - type: DeviceLinkSink - links: - - 46 - - type: Timer - - uid: 774 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 8.5,0.5 - parent: 1 - - type: DeviceLinkSink - links: - - 46 - - uid: 775 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,-6.5 - parent: 1 - - type: DeviceLinkSink - links: - - 46 - - uid: 952 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 6.5,1.5 - parent: 1 - - uid: 955 - components: - - type: Transform - pos: 11.5,-2.5 - parent: 1 - - type: DeviceLinkSink - links: - - 46 -- proto: Rack - entities: - - uid: 776 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -1.5,5.5 - parent: 1 - - uid: 777 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 4.5,5.5 - parent: 1 - - uid: 778 - components: - - type: Transform - pos: -0.5,-3.5 - parent: 1 -- proto: RandomArcade - entities: - - uid: 779 - components: - - type: Transform - pos: 7.5,-2.5 - parent: 1 -- proto: RandomPosterContraband - entities: - - uid: 780 - components: - - type: Transform - pos: 9.5,3.5 - parent: 1 - - uid: 781 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 0.5,0.5 - parent: 1 - - uid: 782 - components: - - type: Transform - pos: 5.5,0.5 - parent: 1 - - uid: 784 - components: - - type: Transform - pos: -1.5,-4.5 - parent: 1 - - uid: 785 - components: - - type: Transform - pos: 14.5,-3.5 - parent: 1 - - uid: 786 - components: - - type: Transform - pos: 5.5,-3.5 - parent: 1 -- proto: RandomVendingDrinks - entities: - - uid: 787 - components: - - type: Transform - pos: 4.5,-2.5 - parent: 1 - - type: Emagged -- proto: RandomVendingSnacks - entities: - - uid: 788 - components: - - type: Transform - pos: 4.5,-3.5 - parent: 1 - - type: Emagged -- proto: ReinforcedPlasmaWindow - entities: - - uid: 789 - components: - - type: Transform - pos: 10.5,-1.5 - parent: 1 - - uid: 790 - components: - - type: Transform - pos: 10.5,-5.5 - parent: 1 - - uid: 791 - components: - - type: Transform - pos: 12.5,-5.5 - parent: 1 - - uid: 792 - components: - - type: Transform - pos: 13.5,-0.5 - parent: 1 - - uid: 793 - components: - - type: Transform - pos: 13.5,0.5 - parent: 1 - - uid: 794 - components: - - type: Transform - pos: 13.5,2.5 - parent: 1 - - uid: 795 - components: - - type: Transform - pos: 13.5,1.5 - parent: 1 - - uid: 796 - components: - - type: Transform - pos: 11.5,-5.5 - parent: 1 - - uid: 797 - components: - - type: Transform - pos: 13.5,-5.5 - parent: 1 - - uid: 798 - components: - - type: Transform - pos: 6.5,-6.5 - parent: 1 - - uid: 799 - components: - - type: Transform - pos: 7.5,-6.5 - parent: 1 - - uid: 800 - components: - - type: Transform - pos: 8.5,-6.5 - parent: 1 -- proto: RubberStampApproved - entities: - - uid: 407 - components: - - type: Transform - parent: 405 - - type: Physics - canCollide: False - - type: InsideEntityStorage -- proto: RubberStampCaptain - entities: - - uid: 417 - components: - - type: Transform - parent: 405 - - type: Physics - canCollide: False - - type: InsideEntityStorage -- proto: RubberStampCE - entities: - - uid: 413 - components: - - type: Transform - parent: 405 - - type: Physics - canCollide: False - - type: InsideEntityStorage -- proto: RubberStampChaplain - entities: - - uid: 416 - components: - - type: Transform - parent: 405 - - type: Physics - canCollide: False - - type: InsideEntityStorage -- proto: RubberStampClown - entities: - - uid: 414 - components: - - type: Transform - parent: 405 - - type: Physics - canCollide: False - - type: InsideEntityStorage -- proto: RubberStampCMO - entities: - - uid: 412 - components: - - type: Transform - parent: 405 - - type: Physics - canCollide: False - - type: InsideEntityStorage -- proto: RubberStampDenied - entities: - - uid: 411 - components: - - type: Transform - parent: 405 - - type: Physics - canCollide: False - - type: InsideEntityStorage -- proto: RubberStampHop - entities: - - uid: 419 - components: - - type: Transform - parent: 405 - - type: Physics - canCollide: False - - type: InsideEntityStorage -- proto: RubberStampHos - entities: - - uid: 409 - components: - - type: Transform - parent: 405 - - type: Physics - canCollide: False - - type: InsideEntityStorage -- proto: RubberStampMantis - entities: - - uid: 415 - components: - - type: Transform - parent: 405 - - type: Physics - canCollide: False - - type: InsideEntityStorage -- proto: RubberStampMime - entities: - - uid: 420 - components: - - type: Transform - parent: 405 - - type: Physics - canCollide: False - - type: InsideEntityStorage -- proto: RubberStampQm - entities: - - uid: 408 - components: - - type: Transform - parent: 405 - - type: Physics - canCollide: False - - type: InsideEntityStorage -- proto: RubberStampRd - entities: - - uid: 418 - components: - - type: Transform - parent: 405 - - type: Physics - canCollide: False - - type: InsideEntityStorage -- proto: RubberStampSyndicate - entities: - - uid: 410 - components: - - type: Transform - parent: 405 - - type: Physics - canCollide: False - - type: InsideEntityStorage -- proto: RubberStampWarden - entities: - - uid: 406 - components: - - type: Transform - parent: 405 - - type: Physics - canCollide: False - - type: InsideEntityStorage -- proto: SalvageLorePaperGamingSpawner - entities: - - uid: 801 - components: - - type: Transform - pos: 12.5,-9.5 - parent: 1 -- proto: SheetPlasteel - entities: - - uid: 802 - components: - - type: Transform - pos: -1.4864182,5.563302 - parent: 1 -- proto: SheetRPGlass - entities: - - uid: 803 - components: - - type: Transform - pos: -1.2364185,5.563302 - parent: 1 -- proto: SheetSteel - entities: - - uid: 804 - components: - - type: Transform - pos: -1.6895431,5.500802 - parent: 1 -- proto: SignalButton - entities: - - uid: 805 - components: - - type: MetaData - name: bridge blast doors button - - type: Transform - rot: 3.141592653589793 rad - pos: 11.5,-1.5 - parent: 1 - - type: DeviceLinkSource - linkedPorts: - 354: - - Pressed: Toggle - 352: - - Pressed: Toggle - 351: - - Pressed: Toggle - 353: - - Pressed: Toggle - 361: - - Pressed: Toggle - - uid: 806 - components: - - type: MetaData - desc: A note taped to it reads, "Be sure to keep it bolted, else those crazy guards might try to drink vacuum" - name: external bolts button - - type: Transform - pos: 4.5,4.5 - parent: 1 - - type: DeviceLinkSource - linkedPorts: - 4: - - Pressed: DoorBolt - - uid: 807 - components: - - type: MetaData - name: rec room blast shields button - - type: Transform - rot: 1.5707963267948966 rad - pos: 5.5,-2.5 - parent: 1 - - type: DeviceLinkSource - linkedPorts: - 350: - - Pressed: Toggle - 355: - - Pressed: Toggle - 356: - - Pressed: Toggle - 357: - - Pressed: Toggle - 358: - - Pressed: Toggle - 359: - - Pressed: Toggle - 360: - - Pressed: Toggle -- proto: SignalSwitchDirectional - entities: - - uid: 46 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 4.5,-1.5 - parent: 1 - - type: DeviceLinkSource - linkedPorts: - 773: - - On: Off - - Off: On - 21: - - On: On - - Off: Off - 917: - - On: On - - Off: Off - 771: - - On: Off - - Off: On - 770: - - Off: On - - On: Off - 963: - - On: On - - Off: Off - 769: - - Off: On - - On: Off - 375: - - On: On - - Off: Off - 774: - - Off: On - - On: Off - 958: - - On: On - - Off: Off - 731: - - On: On - - Off: Off - 772: - - On: Off - - Off: On - 896: - - On: On - - Off: Off - 775: - - On: Off - - Off: On - 956: - - On: On - - Off: Off - 20: - - On: Off - - Off: On - 23: - - On: Off - - Off: On - 955: - - On: Off - - Off: On - 19: - - On: On - - Off: Off - 22: - - On: Off - - Off: On -- proto: SinkStemlessWater - entities: - - uid: 808 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -1.5,-3.5 - parent: 1 -- proto: SoapSyndie - entities: - - uid: 809 - components: - - type: Transform - rot: 6.283185307179586 rad - pos: -1.5109272,-2.2405348 - parent: 1 -- proto: soda_dispenser - entities: - - uid: 810 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 1.5,-4.5 - parent: 1 - - type: Emagged -- proto: SpawnMobRadioGuard - entities: - - uid: 811 - components: - - type: Transform - pos: 9.5,-0.5 - parent: 1 - - uid: 812 - components: - - type: Transform - pos: 2.5,2.5 - parent: 1 -- proto: SpawnPointGhostSyndicateListener - entities: - - uid: 813 - components: - - type: Transform - pos: -0.5,1.5 - parent: 1 - - uid: 814 - components: - - type: Transform - pos: -1.5,1.5 - parent: 1 -- proto: StationMapBroken - entities: - - uid: 815 - components: - - type: Transform - pos: 1.5,4.5 - parent: 1 -- proto: SubstationWallBasic - entities: - - uid: 816 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 0.5,5.5 - parent: 1 -- proto: SuitStorageEVASyndicate - entities: - - uid: 611 - components: - - type: Transform - pos: -0.5,-7.5 - parent: 1 - - uid: 817 - components: - - type: Transform - pos: -1.5,-7.5 - parent: 1 - - type: EntityStorage - air: - volume: 200 - immutable: False - temperature: 293.14673 - moles: - - 1.7459903 - - 6.568249 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 -- proto: SyndicateMonitoringServer - entities: - - uid: 338 - components: - - type: Transform - pos: 2.5,-7.5 - parent: 1 - - type: SingletonDeviceNetServer - active: False - available: False -- proto: SyndicatePersonalAI - entities: - - uid: 819 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 7.4855704,-4.514364 - parent: 1 -- proto: SyndieHandyFlag - entities: - - uid: 951 - components: - - type: Transform - pos: 1.9013485,-7 - parent: 1 -- proto: SynthesizerInstrument - entities: - - uid: 820 - components: - - type: Transform - pos: 6.5734386,-5.497705 - parent: 1 -- proto: TableCarpet - entities: - - uid: 821 - components: - - type: Transform - pos: 7.5,-5.5 - parent: 1 - - uid: 822 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 1.5,1.5 - parent: 1 - - uid: 823 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 7.5,-4.5 - parent: 1 -- proto: TableGlass - entities: - - uid: 824 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 1.5,-2.5 - parent: 1 - - uid: 825 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 1.5,-3.5 - parent: 1 - - uid: 826 - components: - - type: Transform - pos: 1.5,-4.5 - parent: 1 -- proto: TableWoodReinforced - entities: - - uid: 382 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 8.5,0.5 - parent: 1 - - uid: 383 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 12.5,2.5 - parent: 1 - - uid: 385 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 8.5,1.5 - parent: 1 - - uid: 386 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 12.5,-0.5 - parent: 1 - - uid: 387 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 8.5,2.5 - parent: 1 - - uid: 568 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,1.5 - parent: 1 -- proto: TelecomServerFilled - entities: - - uid: 612 - components: - - type: Transform - pos: 1.5,-7.5 - parent: 1 - - type: ContainerContainer - containers: - key_slots: !type:Container - showEnts: False - occludes: True - ents: - - 613 - - 614 - - 615 - machine_board: !type:Container - showEnts: False - occludes: True - ents: [] - machine_parts: !type:Container - showEnts: False - occludes: True - ents: [] -- proto: ToiletEmpty - entities: - - uid: 832 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -0.5,-2.5 - parent: 1 -- proto: ToolboxSyndicateFilled - entities: - - uid: 833 - components: - - type: Transform - pos: 4.5174317,5.701203 - parent: 1 - - uid: 834 - components: - - type: Transform - pos: 4.5330567,5.310578 - parent: 1 -- proto: ToyFigurineNukie - entities: - - uid: 835 - components: - - type: Transform - pos: 12.208444,2.8347092 - parent: 1 -- proto: ToyFigurineNukieCommander - entities: - - uid: 836 - components: - - type: Transform - pos: 12.791773,2.838885 - parent: 1 -- proto: ToyFigurineNukieElite - entities: - - uid: 837 - components: - - type: Transform - pos: 12.489692,2.4701266 - parent: 1 -- proto: ToyNuke - entities: - - uid: 838 - components: - - type: Transform - pos: 16.198624,-0.765656 - parent: 1 -- proto: VendingMachineBooze - entities: - - uid: 839 - components: - - type: Transform - pos: 4.5,-4.5 - parent: 1 - - type: Emagged -- proto: VendingMachineCigs - entities: - - uid: 565 - components: - - type: Transform - pos: 4.5,0.5 - parent: 1 -- proto: VendingMachineGames - entities: - - uid: 840 - components: - - type: Transform - pos: 8.5,-2.5 - parent: 1 - - type: Emagged -- proto: VendingMachineNutri - entities: - - uid: 841 - components: - - type: Transform - pos: 12.5,-2.5 - parent: 1 - - type: Emagged -- proto: VendingMachineSeedsUnlocked - entities: - - uid: 842 - components: - - type: Transform - pos: 11.5,-2.5 - parent: 1 - - type: Emagged -- proto: VendingMachineSyndieDrobe - entities: - - uid: 843 - components: - - type: Transform - pos: -2.5,0.5 - parent: 1 - - type: Emagged -- proto: VendingMachineTankDispenserEVA - entities: - - uid: 844 - components: - - type: Transform - pos: -1.5,3.5 - parent: 1 -- proto: WallPlastitanium - entities: - - uid: 54 - components: - - type: Transform - pos: 5.5,-8.5 - parent: 1 - - uid: 332 - components: - - type: Transform - pos: 10.5,3.5 - parent: 1 - - uid: 335 - components: - - type: Transform - pos: 2.5,-8.5 - parent: 1 - - uid: 336 - components: - - type: Transform - pos: 1.5,-8.5 - parent: 1 - - uid: 340 - components: - - type: Transform - pos: 0.5,-8.5 - parent: 1 - - uid: 425 - components: - - type: Transform - pos: 4.5,-8.5 - parent: 1 - - uid: 617 - components: - - type: Transform - pos: 3.5,-8.5 - parent: 1 - - uid: 845 - components: - - type: Transform - pos: -2.5,-8.5 - parent: 1 - - uid: 846 - components: - - type: Transform - pos: -1.5,-8.5 - parent: 1 - - uid: 847 - components: - - type: Transform - pos: -0.5,-8.5 - parent: 1 - - uid: 848 - components: - - type: Transform - pos: -0.5,-1.5 - parent: 1 - - uid: 849 - components: - - type: Transform - pos: -2.5,6.5 - parent: 1 - - uid: 850 - components: - - type: Transform - pos: 3.5,-1.5 - parent: 1 - - uid: 851 - components: - - type: Transform - pos: 14.5,-2.5 - parent: 1 - - uid: 852 - components: - - type: Transform - pos: 14.5,-1.5 - parent: 1 - - uid: 853 - components: - - type: Transform - pos: 8.5,-1.5 - parent: 1 - - uid: 854 - components: - - type: Transform - pos: -3.5,1.5 - parent: 1 - - uid: 855 - components: - - type: Transform - pos: -3.5,0.5 - parent: 1 - - uid: 856 - components: - - type: Transform - pos: 5.5,5.5 - parent: 1 - - uid: 857 - components: - - type: Transform - pos: -1.5,-4.5 - parent: 1 - - uid: 858 - components: - - type: Transform - pos: -2.5,-5.5 - parent: 1 - - uid: 859 - components: - - type: Transform - pos: 2.5,6.5 - parent: 1 - - uid: 860 - components: - - type: Transform - pos: -0.5,6.5 - parent: 1 - - uid: 861 - components: - - type: Transform - pos: 4.5,6.5 - parent: 1 - - uid: 862 - components: - - type: Transform - pos: 5.5,-4.5 - parent: 1 - - uid: 863 - components: - - type: Transform - pos: 9.5,-1.5 - parent: 1 - - uid: 864 - components: - - type: Transform - pos: 11.5,-1.5 - parent: 1 - - uid: 865 - components: - - type: Transform - pos: 12.5,-1.5 - parent: 1 - - uid: 866 - components: - - type: Transform - pos: 5.5,-3.5 - parent: 1 - - uid: 867 - components: - - type: Transform - pos: 5.5,-2.5 - parent: 1 - - uid: 868 - components: - - type: Transform - pos: 5.5,-7.5 - parent: 1 - - uid: 869 - components: - - type: Transform - pos: 7.5,-1.5 - parent: 1 - - uid: 870 - components: - - type: Transform - pos: 13.5,-1.5 - parent: 1 - - uid: 871 - components: - - type: Transform - pos: 13.5,3.5 - parent: 1 - - uid: 872 - components: - - type: Transform - pos: 3.5,-5.5 - parent: 1 - - uid: 873 - components: - - type: Transform - pos: 4.5,-5.5 - parent: 1 - - uid: 874 - components: - - type: Transform - pos: -2.5,4.5 - parent: 1 - - uid: 875 - components: - - type: Transform - pos: 5.5,-5.5 - parent: 1 - - uid: 876 - components: - - type: Transform - pos: 5.5,-6.5 - parent: 1 - - uid: 877 - components: - - type: Transform - pos: 1.5,-5.5 - parent: 1 - - uid: 878 - components: - - type: Transform - pos: 0.5,-5.5 - parent: 1 - - uid: 879 - components: - - type: Transform - pos: 0.5,-4.5 - parent: 1 - - uid: 880 - components: - - type: Transform - pos: 12.5,3.5 - parent: 1 - - uid: 881 - components: - - type: Transform - pos: -2.5,-4.5 - parent: 1 - - uid: 882 - components: - - type: Transform - pos: -2.5,-2.5 - parent: 1 - - uid: 883 - components: - - type: Transform - pos: 0.5,-7.5 - parent: 1 - - uid: 885 - components: - - type: Transform - pos: -2.5,-6.5 - parent: 1 - - uid: 886 - components: - - type: Transform - pos: -0.5,-4.5 - parent: 1 - - uid: 887 - components: - - type: Transform - pos: 0.5,0.5 - parent: 1 - - uid: 888 - components: - - type: Transform - pos: 0.5,1.5 - parent: 1 - - uid: 889 - components: - - type: Transform - pos: -1.5,2.5 - parent: 1 - - uid: 890 - components: - - type: Transform - pos: 7.5,4.5 - parent: 1 - - uid: 891 - components: - - type: Transform - pos: 0.5,5.5 - parent: 1 - - uid: 892 - components: - - type: Transform - pos: -2.5,2.5 - parent: 1 - - uid: 893 - components: - - type: Transform - pos: -2.5,3.5 - parent: 1 - - uid: 894 - components: - - type: Transform - pos: -2.5,5.5 - parent: 1 - - uid: 895 - components: - - type: Transform - pos: 1.5,4.5 - parent: 1 - - uid: 897 - components: - - type: Transform - pos: -2.5,-1.5 - parent: 1 - - uid: 898 - components: - - type: Transform - pos: 1.5,-1.5 - parent: 1 - - uid: 899 - components: - - type: Transform - pos: 0.5,-1.5 - parent: 1 - - uid: 900 - components: - - type: Transform - pos: 0.5,-3.5 - parent: 1 - - uid: 901 - components: - - type: Transform - pos: -2.5,-3.5 - parent: 1 - - uid: 902 - components: - - type: Transform - pos: 0.5,-2.5 - parent: 1 - - uid: 903 - components: - - type: Transform - pos: 11.5,3.5 - parent: 1 - - uid: 905 - components: - - type: Transform - pos: 9.5,3.5 - parent: 1 - - uid: 906 - components: - - type: Transform - pos: 5.5,-1.5 - parent: 1 - - uid: 907 - components: - - type: Transform - pos: 4.5,-1.5 - parent: 1 - - uid: 908 - components: - - type: Transform - pos: 7.5,2.5 - parent: 1 - - uid: 909 - components: - - type: Transform - pos: 7.5,1.5 - parent: 1 - - uid: 910 - components: - - type: Transform - pos: 7.5,0.5 - parent: 1 - - uid: 911 - components: - - type: Transform - pos: 7.5,3.5 - parent: 1 - - uid: 912 - components: - - type: Transform - pos: 8.5,3.5 - parent: 1 - - uid: 913 - components: - - type: Transform - pos: 5.5,0.5 - parent: 1 - - uid: 914 - components: - - type: Transform - pos: 6.5,0.5 - parent: 1 - - uid: 915 - components: - - type: Transform - pos: -2.5,-7.5 - parent: 1 - - uid: 916 - components: - - type: Transform - pos: 3.5,-7.5 - parent: 1 - - uid: 918 - components: - - type: Transform - pos: -2.5,-0.5 - parent: 1 - - uid: 920 - components: - - type: Transform - pos: 0.5,2.5 - parent: 1 - - uid: 921 - components: - - type: Transform - pos: -0.5,2.5 - parent: 1 - - uid: 922 - components: - - type: Transform - pos: -2.5,1.5 - parent: 1 - - uid: 923 - components: - - type: Transform - pos: 0.5,4.5 - parent: 1 - - uid: 924 - components: - - type: Transform - pos: 2.5,4.5 - parent: 1 - - uid: 925 - components: - - type: Transform - pos: 5.5,1.5 - parent: 1 - - uid: 926 - components: - - type: Transform - pos: 5.5,4.5 - parent: 1 - - uid: 927 - components: - - type: Transform - pos: 5.5,3.5 - parent: 1 - - uid: 928 - components: - - type: Transform - pos: 4.5,4.5 - parent: 1 - - uid: 929 - components: - - type: Transform - pos: -1.5,6.5 - parent: 1 - - uid: 930 - components: - - type: Transform - pos: 0.5,6.5 - parent: 1 - - uid: 931 - components: - - type: Transform - pos: 6.5,4.5 - parent: 1 - - uid: 932 - components: - - type: Transform - pos: 9.5,-6.5 - parent: 1 - - uid: 933 - components: - - type: Transform - pos: 9.5,-4.5 - parent: 1 - - uid: 934 - components: - - type: Transform - pos: 5.5,6.5 - parent: 1 - - uid: 935 - components: - - type: Transform - pos: 9.5,-2.5 - parent: 1 - - uid: 936 - components: - - type: Transform - pos: 1.5,6.5 - parent: 1 - - uid: 937 - components: - - type: Transform - pos: 14.5,-3.5 - parent: 1 - - uid: 938 - components: - - type: Transform - pos: 14.5,-4.5 - parent: 1 - - uid: 939 - components: - - type: Transform - pos: 14.5,-5.5 - parent: 1 - - uid: 940 - components: - - type: Transform - pos: 9.5,-5.5 - parent: 1 - - uid: 941 - components: - - type: Transform - pos: -3.5,-0.5 - parent: 1 -- proto: WarpPoint - entities: - - uid: 942 - components: - - type: MetaData - name: Syndicate Listening Post - - type: Transform - pos: 10.5,0.5 - parent: 1 -- proto: WashingMachineFilledClothes - entities: - - uid: 2 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 4.5,-7.5 - parent: 1 -- proto: WaterCooler - entities: - - uid: 943 - components: - - type: Transform - pos: 1.5,0.5 - parent: 1 -- proto: WaterTankHighCapacity - entities: - - uid: 944 - components: - - type: Transform - pos: 13.5,-2.5 - parent: 1 -- proto: WeaponShotgunKammerer - entities: - - uid: 379 - components: - - type: Transform - parent: 363 - - type: Physics - canCollide: False - - type: InsideEntityStorage - - uid: 380 - components: - - type: Transform - parent: 363 - - type: Physics - canCollide: False - - type: InsideEntityStorage -- proto: Windoor - entities: - - uid: 618 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -0.5,-7.5 - parent: 1 - - uid: 945 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -1.5,-7.5 - parent: 1 - - uid: 946 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,5.5 - parent: 1 - - uid: 947 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -2.5,0.5 - parent: 1 -- proto: WindoorSecure - entities: - - uid: 610 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 2.5,-7.5 - parent: 1 - - uid: 783 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 1.5,-7.5 - parent: 1 - - uid: 948 - components: - - type: Transform - pos: -1.5,5.5 - parent: 1 - - uid: 949 - components: - - type: Transform - pos: -0.5,5.5 - parent: 1 -- proto: WoodDoor - entities: - - uid: 12 - components: - - type: Transform - pos: -1.5,-1.5 - parent: 1 -... diff --git a/Resources/Maps/Shuttles/DeltaV/NTES_Box.yml b/Resources/Maps/Shuttles/DeltaV/NTES_Box.yml index 61831cd0895..30e99796506 100644 --- a/Resources/Maps/Shuttles/DeltaV/NTES_Box.yml +++ b/Resources/Maps/Shuttles/DeltaV/NTES_Box.yml @@ -61,6 +61,10 @@ entities: - type: Gravity gravityShakeSound: !type:SoundPathSpecifier path: /Audio/Effects/alert.ogg + - type: DeviceNetwork + configurators: [] + deviceLists: [] + transmitFrequencyId: ShuttleTimer - type: DecalGrid chunkCollection: version: 2 diff --git a/Resources/Maps/Shuttles/DeltaV/NTES_Delta.yml b/Resources/Maps/Shuttles/DeltaV/NTES_Delta.yml index ea42d89ddd1..764a81b452e 100644 --- a/Resources/Maps/Shuttles/DeltaV/NTES_Delta.yml +++ b/Resources/Maps/Shuttles/DeltaV/NTES_Delta.yml @@ -68,6 +68,10 @@ entities: - type: Gravity gravityShakeSound: !type:SoundPathSpecifier path: /Audio/Effects/alert.ogg + - type: DeviceNetwork + configurators: [] + deviceLists: [] + transmitFrequencyId: ShuttleTimer - type: DecalGrid chunkCollection: version: 2 diff --git a/Resources/Maps/Shuttles/DeltaV/NTES_Kaeri.yml b/Resources/Maps/Shuttles/DeltaV/NTES_Kaeri.yml index 0a9fc598df6..35a8eb637a0 100644 --- a/Resources/Maps/Shuttles/DeltaV/NTES_Kaeri.yml +++ b/Resources/Maps/Shuttles/DeltaV/NTES_Kaeri.yml @@ -61,6 +61,10 @@ entities: - type: Gravity gravityShakeSound: !type:SoundPathSpecifier path: /Audio/Effects/alert.ogg + - type: DeviceNetwork + configurators: [] + deviceLists: [] + transmitFrequencyId: ShuttleTimer - type: DecalGrid chunkCollection: version: 2 diff --git a/Resources/Maps/Shuttles/DeltaV/NTES_Lox.yml b/Resources/Maps/Shuttles/DeltaV/NTES_Lox.yml index 9522cd74d3b..e04c801d28f 100644 --- a/Resources/Maps/Shuttles/DeltaV/NTES_Lox.yml +++ b/Resources/Maps/Shuttles/DeltaV/NTES_Lox.yml @@ -66,6 +66,10 @@ entities: - type: Gravity gravityShakeSound: !type:SoundPathSpecifier path: /Audio/Effects/alert.ogg + - type: DeviceNetwork + configurators: [] + deviceLists: [] + transmitFrequencyId: ShuttleTimer - type: DecalGrid chunkCollection: version: 2 diff --git a/Resources/Maps/Shuttles/DeltaV/NTES_Propeller.yml b/Resources/Maps/Shuttles/DeltaV/NTES_Propeller.yml index 929103c42ae..c814fb0b34e 100644 --- a/Resources/Maps/Shuttles/DeltaV/NTES_Propeller.yml +++ b/Resources/Maps/Shuttles/DeltaV/NTES_Propeller.yml @@ -90,6 +90,10 @@ entities: - type: Gravity gravityShakeSound: !type:SoundPathSpecifier path: /Audio/Effects/alert.ogg + - type: DeviceNetwork + configurators: [] + deviceLists: [] + transmitFrequencyId: ShuttleTimer - type: DecalGrid chunkCollection: version: 2 diff --git a/Resources/Maps/Shuttles/ShuttleEvent/disaster_evacpod.yml b/Resources/Maps/Shuttles/ShuttleEvent/disaster_evacpod.yml new file mode 100644 index 00000000000..be1ca4ffdee --- /dev/null +++ b/Resources/Maps/Shuttles/ShuttleEvent/disaster_evacpod.yml @@ -0,0 +1,350 @@ +meta: + format: 6 + postmapinit: false +tilemap: + 0: Space + 82: FloorShuttleOrange + 85: FloorShuttleWhite + 120: Lattice + 121: Plating +entities: +- proto: "" + entities: + - uid: 1 + components: + - type: MetaData + name: Evacuation pod + - type: Transform + parent: invalid + - type: MapGrid + chunks: + 0,0: + ind: 0,0 + tiles: eQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + -1,0: + ind: -1,0 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 0,-1: + ind: 0,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + -1,-1: + ind: -1,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAA + 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,-1: + 0: 4368 + 1: 32 + 0,0: + 1: 2 + -1,0: + 1: 8 + -1,-1: + 1: 128 + 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: NavMap +- proto: AirlockShuttle + entities: + - uid: 2 + components: + - type: Transform + pos: 0.5,-2.5 + parent: 1 +- proto: APCBasic + entities: + - uid: 3 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-0.5 + parent: 1 +- proto: AtmosDeviceFanTiny + entities: + - uid: 4 + components: + - type: Transform + pos: 0.5,-2.5 + parent: 1 +- proto: BoxMRE + entities: + - uid: 6 + components: + - type: Transform + parent: 5 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: CableApcExtension + entities: + - uid: 10 + components: + - type: Transform + pos: 1.5,-0.5 + parent: 1 + - uid: 11 + components: + - type: Transform + pos: 0.5,-0.5 + parent: 1 + - uid: 12 + components: + - type: Transform + pos: 0.5,-1.5 + parent: 1 +- proto: CableHV + entities: + - uid: 13 + components: + - type: Transform + pos: -0.5,-1.5 + parent: 1 + - uid: 14 + components: + - type: Transform + pos: -0.5,-0.5 + parent: 1 +- proto: CableMV + entities: + - uid: 15 + components: + - type: Transform + pos: -0.5,-0.5 + parent: 1 + - uid: 16 + components: + - type: Transform + pos: 0.5,-0.5 + parent: 1 + - uid: 17 + components: + - type: Transform + pos: 1.5,-0.5 + parent: 1 +- proto: ChairPilotSeat + entities: + - uid: 18 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-1.5 + parent: 1 +- proto: ClosetWallMaintenanceFilledRandom + entities: + - uid: 5 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-1.5 + parent: 1 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.14673 + moles: + - 1.7459903 + - 6.568249 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 8 + - 9 + - 6 + - 7 +- proto: ClothingOuterSuitEmergency + entities: + - uid: 7 + components: + - type: Transform + parent: 5 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: ComputerShuttle + entities: + - uid: 19 + components: + - type: Transform + pos: 0.5,-0.5 + parent: 1 +- proto: DisasterVictimSpawner + entities: + - uid: 20 + components: + - type: Transform + pos: 0.5,-1.5 + parent: 1 +- proto: GeneratorWallmountAPU + entities: + - uid: 21 + components: + - type: Transform + pos: -0.5,-1.5 + parent: 1 +- proto: Gyroscope + entities: + - uid: 32 + components: + - type: Transform + pos: -0.5,-2.5 + parent: 1 +- proto: HandheldGPSBasic + entities: + - uid: 8 + components: + - type: Transform + parent: 5 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: Poweredlight + entities: + - uid: 22 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-1.5 + parent: 1 +- proto: ShuttleWindow + entities: + - uid: 23 + components: + - type: Transform + pos: 0.5,0.5 + parent: 1 +- proto: SubstationWallBasic + entities: + - uid: 24 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-0.5 + parent: 1 +- proto: Thruster + entities: + - uid: 25 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-2.5 + parent: 1 +- proto: WallShuttle + entities: + - uid: 26 + components: + - type: Transform + pos: -0.5,-0.5 + parent: 1 + - uid: 27 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-1.5 + parent: 1 + - uid: 28 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-0.5 + parent: 1 + - uid: 29 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-1.5 + parent: 1 +- proto: WallShuttleDiagonal + entities: + - uid: 30 + components: + - type: Transform + pos: -0.5,0.5 + parent: 1 + - uid: 31 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,0.5 + parent: 1 +- proto: WeaponLaserSvalinn + entities: + - uid: 9 + components: + - type: Transform + parent: 5 + - type: Physics + canCollide: False + - type: InsideEntityStorage +... diff --git a/Resources/Maps/Shuttles/ShuttleEvent/honki.yml b/Resources/Maps/Shuttles/ShuttleEvent/honki.yml new file mode 100644 index 00000000000..0fca6a8ba92 --- /dev/null +++ b/Resources/Maps/Shuttles/ShuttleEvent/honki.yml @@ -0,0 +1,2666 @@ +meta: + format: 6 + postmapinit: false +tilemap: + 0: Space + 20: FloorCarpetClown + 25: FloorClown + 120: Lattice + 121: Plating +entities: +- proto: "" + entities: + - uid: 1 + components: + - type: MetaData + name: Honkomother + - type: Transform + pos: 1.212189,-1.7551664 + parent: invalid + - type: MapGrid + chunks: + 0,0: + ind: 0,0 + tiles: GQAAAAAAGQAAAAAAGQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAFAAAAAAAGQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAFAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 0,-1: + ind: 0,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAAGQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAAGQAAAAAAeQAAAAAAGQAAAAAAGQAAAAAAGQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAAGQAAAAAAGQAAAAAAGQAAAAAAGQAAAAAAGQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAAGQAAAAAAeQAAAAAAGQAAAAAAGQAAAAAAGQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAAGQAAAAAAGQAAAAAAeQAAAAAAGQAAAAAAGQAAAAAAGQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAAGQAAAAAAGQAAAAAAGQAAAAAAGQAAAAAAGQAAAAAAGQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAAGQAAAAAAGQAAAAAAeQAAAAAAGQAAAAAAGQAAAAAAGQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + -1,0: + ind: -1,0 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAGQAAAAAAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAGQAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + -1,-1: + ind: -1,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAGQAAAAAAGQAAAAAAGQAAAAAAeQAAAAAAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAGQAAAAAAGQAAAAAAGQAAAAAAGQAAAAAAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAGQAAAAAAGQAAAAAAGQAAAAAAeQAAAAAAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAGQAAAAAAGQAAAAAAGQAAAAAAeQAAAAAAGQAAAAAAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAGQAAAAAAGQAAAAAAGQAAAAAAGQAAAAAAGQAAAAAAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAGQAAAAAAGQAAAAAAGQAAAAAAeQAAAAAAGQAAAAAAGQAAAAAA + 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: + - node: + color: '#EFB34196' + id: MiniTileWhiteCornerNe + decals: + 21: 5,-5 + 39: -4,-1 + 40: 6,-1 + - node: + color: '#EFB34196' + id: MiniTileWhiteCornerNw + decals: + 20: -5,-5 + 41: -6,-1 + 42: 4,-1 + - node: + color: '#EFB34196' + id: MiniTileWhiteCornerSe + decals: + 0: 2,-3 + 23: 5,-7 + 35: -4,-3 + 36: 6,-3 + - node: + color: '#EFB34196' + id: MiniTileWhiteCornerSw + decals: + 1: -2,-3 + 33: -5,-7 + 37: -6,-3 + 38: 4,-3 + - node: + color: '#EFB34196' + id: MiniTileWhiteInnerNe + decals: + 57: -2,0 + - node: + color: '#EFB34196' + id: MiniTileWhiteInnerNw + decals: + 56: 2,0 + - node: + color: '#EFB34196' + id: MiniTileWhiteLineE + decals: + 2: 2,-2 + 3: 2,-1 + 4: 2,0 + 5: 2,1 + 22: 5,-6 + 47: -4,-2 + 48: 6,-2 + 55: -2,1 + - node: + color: '#EFB34196' + id: MiniTileWhiteLineN + decals: + 13: 0,-5 + 14: 4,-5 + 15: -1,-5 + 16: 1,-5 + 17: 3,-5 + 18: -3,-5 + 19: -4,-5 + 49: -5,-1 + 50: 5,-1 + 51: -1,0 + 52: 0,0 + 53: 1,0 + - node: + color: '#EFB34196' + id: MiniTileWhiteLineS + decals: + 10: -1,-3 + 11: 0,-3 + 12: 1,-3 + 24: 4,-7 + 25: 3,-7 + 26: 2,-7 + 27: 1,-7 + 28: 0,-7 + 29: -1,-7 + 30: -2,-7 + 31: -3,-7 + 32: -4,-7 + 43: -5,-3 + 44: 5,-3 + - node: + color: '#EFB34196' + id: MiniTileWhiteLineW + decals: + 6: -2,-2 + 7: -2,-1 + 8: -2,0 + 9: -2,1 + 34: -5,-6 + 45: 4,-2 + 46: -6,-2 + 54: 2,1 + - type: GridAtmosphere + version: 2 + data: + tiles: + 0,0: + 0: 887 + 1: 18432 + 0,-1: + 0: 30576 + -1,0: + 0: 2252 + 1: 16912 + 1,0: + 1: 56 + 1,-1: + 0: 30576 + 0,-2: + 0: 48051 + -1,-2: + 0: 48056 + -1,-1: + 0: 56784 + 0,-3: + 1: 32768 + 1,-3: + 1: 12288 + 1,-2: + 0: 13104 + 1: 34820 + -2,0: + 1: 130 + -2,-1: + 0: 52928 + -2,-2: + 1: 8708 + 0: 34944 + -2,-3: + 1: 32768 + -1,-3: + 1: 12288 + 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 +- proto: AirCanister + entities: + - uid: 2 + components: + - type: Transform + anchored: True + pos: -1.5,-2.5 + parent: 1 + - type: Physics + bodyType: Static + - uid: 3 + components: + - type: Transform + anchored: True + pos: 2.5,-2.5 + parent: 1 + - type: Physics + bodyType: Static +- proto: AirlockShuttle + entities: + - uid: 4 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,-1.5 + parent: 1 +- proto: AltarBananium + entities: + - uid: 374 + components: + - type: Transform + pos: 6.5,-1.5 + parent: 1 +- proto: APCBasic + entities: + - uid: 5 + components: + - type: Transform + pos: 1.5,-3.5 + parent: 1 +- proto: AtmosDeviceFanTiny + entities: + - uid: 6 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,-1.5 + parent: 1 +- proto: BananaPhoneInstrument + entities: + - uid: 7 + components: + - type: Transform + pos: -1.4946816,-0.2775966 + parent: 1 +- proto: BananiumDoor + entities: + - uid: 8 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-5.5 + parent: 1 + - uid: 9 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-1.5 + parent: 1 + - uid: 10 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,-1.5 + parent: 1 + - uid: 11 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-5.5 + parent: 1 + - uid: 12 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-3.5 + parent: 1 +- proto: BarricadeBlock + entities: + - uid: 372 + components: + - type: Transform + pos: -1.5,-5.5 + parent: 1 +- proto: Bed + entities: + - uid: 13 + components: + - type: Transform + pos: 3.5,-6.5 + parent: 1 + - uid: 14 + components: + - type: Transform + pos: 3.5,-4.5 + parent: 1 + - uid: 15 + components: + - type: Transform + pos: 5.5,-6.5 + parent: 1 + - uid: 16 + components: + - type: Transform + pos: 5.5,-4.5 + parent: 1 +- proto: BedsheetSpawner + entities: + - uid: 17 + components: + - type: Transform + pos: 3.5,-6.5 + parent: 1 + - uid: 18 + components: + - type: Transform + pos: 5.5,-6.5 + parent: 1 + - uid: 19 + components: + - type: Transform + pos: 3.5,-4.5 + parent: 1 + - uid: 20 + components: + - type: Transform + pos: 5.5,-4.5 + parent: 1 +- proto: BikeHornImplanter + entities: + - uid: 22 + components: + - type: Transform + parent: 21 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 27 + components: + - type: Transform + parent: 26 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: CableApcExtension + entities: + - uid: 31 + components: + - type: Transform + pos: -0.5,-2.5 + parent: 1 + - uid: 32 + components: + - type: Transform + pos: -0.5,-1.5 + parent: 1 + - uid: 33 + components: + - type: Transform + pos: 1.5,-3.5 + parent: 1 + - uid: 34 + components: + - type: Transform + pos: 1.5,-4.5 + parent: 1 + - uid: 35 + components: + - type: Transform + pos: 1.5,-5.5 + parent: 1 + - uid: 36 + components: + - type: Transform + pos: 1.5,-6.5 + parent: 1 + - uid: 37 + components: + - type: Transform + pos: 0.5,-5.5 + parent: 1 + - uid: 38 + components: + - type: Transform + pos: -0.5,-5.5 + parent: 1 + - uid: 39 + components: + - type: Transform + pos: -0.5,-6.5 + parent: 1 + - uid: 40 + components: + - type: Transform + pos: -0.5,-7.5 + parent: 1 + - uid: 41 + components: + - type: Transform + pos: 1.5,-2.5 + parent: 1 + - uid: 42 + components: + - type: Transform + pos: -0.5,-4.5 + parent: 1 + - uid: 43 + components: + - type: Transform + pos: -1.5,-5.5 + parent: 1 + - uid: 44 + components: + - type: Transform + pos: -2.5,-5.5 + parent: 1 + - uid: 45 + components: + - type: Transform + pos: -3.5,-5.5 + parent: 1 + - uid: 46 + components: + - type: Transform + pos: -4.5,-5.5 + parent: 1 + - uid: 47 + components: + - type: Transform + pos: 3.5,-5.5 + parent: 1 + - uid: 48 + components: + - type: Transform + pos: 4.5,-5.5 + parent: 1 + - uid: 49 + components: + - type: Transform + pos: 5.5,-5.5 + parent: 1 + - uid: 50 + components: + - type: Transform + pos: -0.5,-2.5 + parent: 1 + - uid: 51 + components: + - type: Transform + pos: -0.5,-1.5 + parent: 1 + - uid: 52 + components: + - type: Transform + pos: -0.5,-0.5 + parent: 1 + - uid: 53 + components: + - type: Transform + pos: 1.5,-1.5 + parent: 1 + - uid: 54 + components: + - type: Transform + pos: 4.5,-1.5 + parent: 1 + - uid: 55 + components: + - type: Transform + pos: 1.5,-0.5 + parent: 1 + - uid: 56 + components: + - type: Transform + pos: 1.5,0.5 + parent: 1 + - uid: 57 + components: + - type: Transform + pos: 1.5,1.5 + parent: 1 + - uid: 58 + components: + - type: Transform + pos: -0.5,1.5 + parent: 1 + - uid: 59 + components: + - type: Transform + pos: -0.5,0.5 + parent: 1 + - uid: 60 + components: + - type: Transform + pos: 2.5,-1.5 + parent: 1 + - uid: 61 + components: + - type: Transform + pos: 3.5,-1.5 + parent: 1 + - uid: 62 + components: + - type: Transform + pos: 5.5,-1.5 + parent: 1 + - uid: 63 + components: + - type: Transform + pos: -2.5,-1.5 + parent: 1 + - uid: 64 + components: + - type: Transform + pos: -3.5,-1.5 + parent: 1 + - uid: 65 + components: + - type: Transform + pos: -4.5,-1.5 + parent: 1 + - uid: 66 + components: + - type: Transform + pos: -5.5,-1.5 + parent: 1 + - uid: 67 + components: + - type: Transform + pos: -4.5,-0.5 + parent: 1 + - uid: 68 + components: + - type: Transform + pos: -4.5,0.5 + parent: 1 + - uid: 69 + components: + - type: Transform + pos: 5.5,-0.5 + parent: 1 + - uid: 70 + components: + - type: Transform + pos: 5.5,0.5 + parent: 1 + - uid: 71 + components: + - type: Transform + pos: 6.5,-5.5 + parent: 1 + - uid: 72 + components: + - type: Transform + pos: 5.5,-5.5 + parent: 1 + - uid: 73 + components: + - type: Transform + pos: 4.5,-6.5 + parent: 1 + - uid: 74 + components: + - type: Transform + pos: 4.5,-7.5 + parent: 1 + - uid: 75 + components: + - type: Transform + pos: -3.5,-7.5 + parent: 1 + - uid: 76 + components: + - type: Transform + pos: -3.5,-6.5 + parent: 1 + - uid: 77 + components: + - type: Transform + pos: -5.5,-5.5 + parent: 1 + - uid: 78 + components: + - type: Transform + pos: -0.5,-3.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: 2.5,-5.5 + parent: 1 +- proto: CableHV + entities: + - uid: 82 + components: + - type: Transform + pos: -0.5,-8.5 + parent: 1 + - uid: 83 + components: + - type: Transform + pos: 0.5,-8.5 + parent: 1 + - uid: 84 + components: + - type: Transform + pos: 1.5,-8.5 + parent: 1 + - uid: 85 + components: + - type: Transform + pos: 0.5,-7.5 + parent: 1 +- proto: CableMV + entities: + - uid: 86 + components: + - type: Transform + pos: 0.5,-7.5 + parent: 1 + - uid: 87 + components: + - type: Transform + pos: 1.5,-3.5 + parent: 1 + - uid: 88 + components: + - type: Transform + pos: 0.5,-6.5 + parent: 1 + - uid: 89 + components: + - type: Transform + pos: 0.5,-5.5 + parent: 1 + - uid: 90 + components: + - type: Transform + pos: 0.5,-4.5 + parent: 1 + - uid: 91 + components: + - type: Transform + pos: 1.5,-4.5 + parent: 1 +- proto: ChairPilotSeat + entities: + - uid: 92 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,1.5 + parent: 1 +- proto: CigaretteBanana + entities: + - uid: 94 + components: + - type: Transform + parent: 93 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 95 + components: + - type: Transform + parent: 93 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 96 + components: + - type: Transform + parent: 93 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: ClothingOuterHardsuitClown + entities: + - uid: 97 + components: + - type: Transform + parent: 93 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 100 + components: + - type: Transform + parent: 99 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 104 + components: + - type: Transform + parent: 103 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: ClothingOuterWinterClown + entities: + - uid: 105 + components: + - type: Transform + parent: 103 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: ClownRecorder + entities: + - uid: 107 + components: + - type: Transform + pos: 2.6453638,0.42502415 + parent: 1 +- proto: ClownTroupeSpawner + entities: + - uid: 108 + components: + - type: Transform + pos: 3.5,-6.5 + parent: 1 + - uid: 109 + components: + - type: Transform + pos: 5.5,-4.5 + parent: 1 + - uid: 110 + components: + - type: Transform + pos: 5.5,-6.5 + parent: 1 +- proto: CluwneHorn + entities: + - uid: 23 + components: + - type: Transform + parent: 21 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 28 + components: + - type: Transform + parent: 26 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: ComfyChair + entities: + - uid: 111 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-0.5 + parent: 1 + - uid: 112 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-0.5 + parent: 1 +- proto: ComputerShuttle + entities: + - uid: 113 + components: + - type: Transform + pos: 0.5,2.5 + parent: 1 +- proto: CrateCargoGambling + entities: + - uid: 114 + components: + - type: Transform + pos: -0.5,-2.5 + parent: 1 +- proto: CratePirate + entities: + - uid: 21 + components: + - type: Transform + pos: 4.5,-0.5 + parent: 1 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.14673 + moles: + - 1.7459903 + - 6.568249 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 25 + - 23 + - 22 + - 24 + - 261 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null + - uid: 26 + components: + - type: Transform + pos: 4.5,-2.5 + parent: 1 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.14673 + moles: + - 1.7459903 + - 6.568249 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 29 + - 315 + - 27 + - 28 + - 30 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null + - uid: 115 + components: + - type: Transform + pos: 6.5,-2.5 + parent: 1 + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 125 + - 124 + - 123 + - 122 + - 121 + - 126 + - 120 + - 119 + - 118 + - 117 + - 116 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null + - uid: 127 + components: + - type: Transform + pos: 6.5,-0.5 + parent: 1 + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 128 + - 129 + - 130 + - 131 + - 132 + - 133 + - 134 + - 135 + - 138 + - 136 + - 137 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null +- proto: DehydratedSpaceCarp + entities: + - uid: 24 + components: + - type: Transform + parent: 21 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 29 + components: + - type: Transform + parent: 26 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: DeviceQuantumSpinInverter + entities: + - uid: 25 + components: + - type: Transform + parent: 21 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 30 + components: + - type: Transform + parent: 26 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: EmergencyFunnyOxygenTankFilled + entities: + - uid: 98 + components: + - type: Transform + parent: 93 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 101 + components: + - type: Transform + parent: 99 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 106 + components: + - type: Transform + parent: 103 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: FloorBananiumEntity + entities: + - uid: 139 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-7.5 + parent: 1 + - uid: 140 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-7.5 + parent: 1 + - uid: 141 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-7.5 + parent: 1 + - uid: 142 + components: + - type: Transform + pos: -1.5,-6.5 + parent: 1 + - uid: 143 + components: + - type: Transform + pos: -1.5,-4.5 + parent: 1 + - uid: 373 + components: + - type: Transform + pos: 0.5,-3.5 + parent: 1 +- proto: FoodBanana + entities: + - uid: 116 + components: + - type: Transform + parent: 115 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 117 + components: + - type: Transform + parent: 115 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 118 + components: + - type: Transform + parent: 115 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 119 + components: + - type: Transform + parent: 115 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 128 + components: + - type: Transform + parent: 127 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 129 + components: + - type: Transform + parent: 127 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 130 + components: + - type: Transform + parent: 127 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 131 + components: + - type: Transform + parent: 127 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: FoodBurgerClown + entities: + - uid: 144 + components: + - type: Transform + pos: -1.5971907,0.54355335 + parent: 1 + - uid: 145 + components: + - type: Transform + pos: -1.405974,0.27368832 + parent: 1 +- proto: FoodCakeClown + entities: + - uid: 146 + components: + - type: Transform + pos: 2.4229474,-0.24963892 + parent: 1 +- proto: FoodMeatClown + entities: + - uid: 147 + components: + - type: Transform + pos: 3.4782665,-4.592343 + parent: 1 +- proto: FoodPieBananaCream + entities: + - uid: 120 + components: + - type: Transform + parent: 115 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 121 + components: + - type: Transform + parent: 115 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 122 + components: + - type: Transform + parent: 115 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 123 + components: + - type: Transform + parent: 115 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 124 + components: + - type: Transform + parent: 115 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 125 + components: + - type: Transform + parent: 115 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 132 + components: + - type: Transform + parent: 127 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 133 + components: + - type: Transform + parent: 127 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 134 + components: + - type: Transform + parent: 127 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 135 + components: + - type: Transform + parent: 127 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 136 + components: + - type: Transform + parent: 127 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 137 + components: + - type: Transform + parent: 127 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: GasPassiveVent + entities: + - uid: 148 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,1.5 + parent: 1 + - uid: 149 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,1.5 + parent: 1 +- proto: GasPipeBend + entities: + - uid: 150 + components: + - type: Transform + pos: 5.5,-0.5 + parent: 1 + - uid: 151 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,-0.5 + parent: 1 + - uid: 152 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-4.5 + parent: 1 + - uid: 153 + components: + - type: Transform + pos: 4.5,-4.5 + parent: 1 +- proto: GasPipeFourway + entities: + - uid: 154 + components: + - type: Transform + pos: 0.5,-2.5 + parent: 1 + - uid: 155 + components: + - type: Transform + pos: 0.5,-1.5 + parent: 1 + - uid: 156 + components: + - type: Transform + pos: 0.5,-5.5 + parent: 1 + - uid: 157 + components: + - type: Transform + pos: -0.5,-4.5 + parent: 1 + - uid: 158 + components: + - type: Transform + pos: 1.5,-4.5 + parent: 1 + - uid: 159 + components: + - type: Transform + pos: 1.5,-0.5 + parent: 1 + - uid: 160 + components: + - type: Transform + pos: -0.5,-0.5 + parent: 1 +- proto: GasPipeStraight + entities: + - uid: 161 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-2.5 + parent: 1 + - uid: 162 + components: + - type: Transform + pos: 0.5,-3.5 + parent: 1 + - uid: 163 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-1.5 + parent: 1 + - uid: 164 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-1.5 + parent: 1 + - uid: 165 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-5.5 + parent: 1 + - uid: 166 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,1.5 + parent: 1 + - uid: 167 + components: + - type: Transform + pos: 0.5,-4.5 + parent: 1 + - uid: 168 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-1.5 + parent: 1 + - uid: 169 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-1.5 + parent: 1 + - uid: 170 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-1.5 + parent: 1 + - uid: 171 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,-1.5 + parent: 1 + - uid: 172 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-5.5 + parent: 1 + - uid: 173 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-5.5 + parent: 1 + - uid: 174 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-5.5 + parent: 1 + - uid: 175 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-0.5 + parent: 1 + - uid: 176 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-4.5 + parent: 1 + - uid: 177 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-4.5 + parent: 1 + - uid: 178 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-3.5 + parent: 1 + - uid: 179 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-3.5 + parent: 1 + - uid: 180 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-0.5 + parent: 1 + - uid: 181 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-0.5 + parent: 1 + - uid: 182 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-0.5 + parent: 1 + - uid: 183 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-1.5 + parent: 1 + - uid: 184 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-1.5 + parent: 1 + - uid: 185 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-2.5 + parent: 1 + - uid: 186 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,0.5 + parent: 1 + - uid: 187 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,1.5 + parent: 1 + - uid: 188 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,1.5 + parent: 1 + - uid: 189 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,1.5 + parent: 1 + - uid: 190 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,1.5 + parent: 1 + - uid: 191 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,1.5 + parent: 1 + - uid: 192 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,1.5 + parent: 1 + - uid: 193 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,1.5 + parent: 1 + - uid: 194 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,-4.5 + parent: 1 + - uid: 195 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,-0.5 + parent: 1 + - uid: 196 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,-0.5 + parent: 1 + - uid: 197 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-4.5 + parent: 1 + - uid: 198 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,-4.5 + parent: 1 + - uid: 199 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-2.5 + parent: 1 + - uid: 200 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-2.5 + parent: 1 +- proto: GasPipeTJunction + entities: + - uid: 201 + components: + - type: Transform + pos: 0.5,1.5 + parent: 1 + - uid: 202 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-0.5 + parent: 1 +- proto: GasPort + entities: + - uid: 203 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-2.5 + parent: 1 + - uid: 204 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-2.5 + parent: 1 +- proto: GasVentPump + entities: + - uid: 205 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-5.5 + parent: 1 + - uid: 206 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,-1.5 + parent: 1 + - uid: 207 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-5.5 + parent: 1 + - uid: 208 + components: + - type: Transform + pos: 0.5,-0.5 + parent: 1 + - uid: 209 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-6.5 + parent: 1 + - uid: 210 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-1.5 + parent: 1 +- proto: GasVentScrubber + entities: + - uid: 211 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,-5.5 + parent: 1 + - uid: 212 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,-1.5 + parent: 1 + - uid: 213 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,-5.5 + parent: 1 + - uid: 214 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-5.5 + parent: 1 + - uid: 215 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-5.5 + parent: 1 + - uid: 216 + components: + - type: Transform + pos: -0.5,0.5 + parent: 1 + - uid: 217 + components: + - type: Transform + pos: 1.5,0.5 + parent: 1 + - uid: 218 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,-1.5 + parent: 1 +- proto: GeneratorWallmountAPU + entities: + - uid: 219 + components: + - type: Transform + pos: -0.5,-8.5 + parent: 1 + - uid: 220 + components: + - type: Transform + pos: 0.5,-8.5 + parent: 1 + - uid: 221 + components: + - type: Transform + pos: 1.5,-8.5 + parent: 1 +- proto: GoldenBikeHorn + entities: + - uid: 222 + components: + - type: Transform + pos: 6.4591703,-1.2964956 + parent: 1 +- proto: GravityGeneratorMini + entities: + - uid: 223 + components: + - type: Transform + pos: -0.5,-7.5 + parent: 1 +- proto: Grille + entities: + - uid: 224 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,2.5 + parent: 1 + - uid: 225 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,3.5 + parent: 1 + - uid: 226 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,3.5 + parent: 1 + - uid: 227 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,3.5 + parent: 1 + - uid: 228 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,2.5 + parent: 1 + - uid: 229 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,0.5 + parent: 1 + - uid: 230 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,0.5 + parent: 1 + - uid: 231 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,0.5 + parent: 1 + - uid: 232 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,0.5 + parent: 1 + - uid: 233 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,0.5 + parent: 1 + - uid: 234 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,0.5 + parent: 1 + - uid: 235 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,-4.5 + parent: 1 + - uid: 236 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,-5.5 + parent: 1 + - uid: 237 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,-6.5 + parent: 1 + - uid: 238 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,-4.5 + parent: 1 + - uid: 239 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,-5.5 + parent: 1 + - uid: 240 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,-6.5 + parent: 1 + - uid: 241 + components: + - type: Transform + pos: -1.5,-6.5 + parent: 1 + - uid: 242 + components: + - type: Transform + pos: -1.5,-4.5 + parent: 1 +- proto: GrilleDiagonal + entities: + - uid: 243 + components: + - type: Transform + pos: -3.5,1.5 + parent: 1 + - uid: 244 + components: + - type: Transform + pos: -2.5,2.5 + parent: 1 + - uid: 245 + components: + - type: Transform + pos: -1.5,3.5 + parent: 1 + - uid: 246 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,3.5 + parent: 1 + - uid: 247 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,2.5 + parent: 1 + - uid: 248 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,1.5 + parent: 1 + - uid: 249 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,2.5 + parent: 1 + - uid: 250 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,2.5 + parent: 1 + - uid: 251 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,1.5 + parent: 1 + - uid: 252 + components: + - type: Transform + pos: -6.5,0.5 + parent: 1 + - uid: 253 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,1.5 + parent: 1 + - uid: 254 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,0.5 + parent: 1 + - uid: 255 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,-4.5 + parent: 1 + - uid: 256 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,-7.5 + parent: 1 + - uid: 257 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,-7.5 + parent: 1 + - uid: 258 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,-4.5 + parent: 1 +- proto: Gyroscope + entities: + - uid: 259 + components: + - type: Transform + pos: 1.5,-7.5 + parent: 1 +- proto: LampBanana + entities: + - uid: 260 + components: + - type: Transform + pos: 2.532099,1.060484 + parent: 1 +- proto: LauncherCreamPie + entities: + - uid: 126 + components: + - type: Transform + parent: 115 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 138 + components: + - type: Transform + parent: 127 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: PlasmaWindow + entities: + - uid: 262 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,3.5 + parent: 1 + - uid: 263 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,3.5 + parent: 1 + - uid: 264 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,3.5 + parent: 1 + - uid: 265 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,2.5 + parent: 1 + - uid: 266 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,2.5 + parent: 1 + - uid: 267 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,0.5 + parent: 1 + - uid: 268 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,0.5 + parent: 1 + - uid: 269 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,0.5 + parent: 1 + - uid: 270 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,0.5 + parent: 1 + - uid: 271 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,0.5 + parent: 1 + - uid: 272 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,0.5 + parent: 1 + - uid: 273 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,-4.5 + parent: 1 + - uid: 274 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,-5.5 + parent: 1 + - uid: 275 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,-6.5 + parent: 1 + - uid: 276 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,-6.5 + parent: 1 + - uid: 277 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,-5.5 + parent: 1 + - uid: 278 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,-4.5 + parent: 1 + - uid: 279 + components: + - type: Transform + pos: -1.5,-6.5 + parent: 1 + - uid: 280 + components: + - type: Transform + pos: -1.5,-4.5 + parent: 1 +- proto: PlasmaWindowDiagonal + entities: + - uid: 281 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,1.5 + parent: 1 + - uid: 282 + components: + - type: Transform + pos: -2.5,2.5 + parent: 1 + - uid: 283 + components: + - type: Transform + pos: -1.5,3.5 + parent: 1 + - uid: 284 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,3.5 + parent: 1 + - uid: 285 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,2.5 + parent: 1 + - uid: 286 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,2.5 + parent: 1 + - uid: 287 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,2.5 + parent: 1 + - uid: 288 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,1.5 + parent: 1 + - uid: 289 + components: + - type: Transform + pos: -6.5,0.5 + parent: 1 + - uid: 290 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,0.5 + parent: 1 + - uid: 291 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,-4.5 + parent: 1 + - uid: 292 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,-4.5 + parent: 1 + - uid: 293 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,-7.5 + parent: 1 + - uid: 294 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,-7.5 + parent: 1 + - uid: 295 + components: + - type: Transform + pos: -3.5,1.5 + parent: 1 + - uid: 296 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,1.5 + parent: 1 +- proto: PoweredlightLED + entities: + - uid: 297 + components: + - type: Transform + pos: 4.5,-4.5 + parent: 1 + - uid: 298 + components: + - type: Transform + pos: -3.5,-4.5 + parent: 1 + - uid: 299 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-0.5 + parent: 1 + - uid: 300 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-0.5 + parent: 1 +- proto: PoweredlightOrange + entities: + - uid: 301 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-7.5 + parent: 1 +- proto: PoweredlightPink + entities: + - uid: 302 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,-6.5 + parent: 1 + - uid: 303 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,-6.5 + parent: 1 + - uid: 304 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,-0.5 + parent: 1 + - uid: 305 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,-0.5 + parent: 1 + - uid: 306 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,2.5 + parent: 1 + - uid: 307 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,2.5 + parent: 1 +- proto: RailingCorner + entities: + - uid: 308 + components: + - type: Transform + pos: 1.5,1.5 + parent: 1 + - uid: 309 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,1.5 + parent: 1 +- proto: RailingCornerSmall + entities: + - uid: 310 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,2.5 + parent: 1 + - uid: 311 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,2.5 + parent: 1 +- proto: RubberStampClown + entities: + - uid: 102 + components: + - type: Transform + parent: 99 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: SpawnClownSpider + entities: + - uid: 312 + components: + - type: Transform + pos: -4.5,-4.5 + parent: 1 + - uid: 313 + components: + - type: Transform + pos: -2.5,-5.5 + parent: 1 + - uid: 314 + components: + - type: Transform + pos: -3.5,-6.5 + parent: 1 +- proto: SpiderWebClown + entities: + - uid: 376 + components: + - type: Transform + pos: -4.5,-6.5 + parent: 1 + - uid: 377 + components: + - type: Transform + pos: -2.5,-4.5 + parent: 1 + - uid: 378 + components: + - type: Transform + pos: -2.5,-5.5 + parent: 1 +- proto: StatueBananiumClown + entities: + - uid: 375 + components: + - type: Transform + pos: -5.5,-0.5 + parent: 1 +- proto: SubstationBasic + entities: + - uid: 316 + components: + - type: Transform + pos: 0.5,-7.5 + parent: 1 +- proto: SuitStorageBase + entities: + - uid: 93 + components: + - type: Transform + pos: -3.5,-2.5 + parent: 1 + - type: Lock + locked: False + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 96 + - 95 + - 97 + - 94 + - 98 + - uid: 99 + components: + - type: Transform + pos: -5.5,-2.5 + parent: 1 + - type: Lock + locked: False + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 101 + - 100 + - 102 + - uid: 103 + components: + - type: Transform + pos: -4.5,-2.5 + parent: 1 + - type: Lock + locked: False + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 104 + - 105 + - 106 +- proto: TablePlasmaGlass + entities: + - uid: 317 + components: + - type: Transform + pos: -1.5,0.5 + parent: 1 + - uid: 318 + components: + - type: Transform + pos: 2.5,-0.5 + parent: 1 + - uid: 319 + components: + - type: Transform + pos: -1.5,-0.5 + parent: 1 + - uid: 320 + components: + - type: Transform + pos: 2.5,0.5 + parent: 1 +- proto: Thruster + entities: + - uid: 321 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,-8.5 + parent: 1 + - uid: 322 + components: + - type: Transform + rot: -3.141592653589793 rad + pos: -2.5,-8.5 + parent: 1 + - uid: 323 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,-5.5 + parent: 1 + - uid: 324 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,-5.5 + parent: 1 + - uid: 325 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,-8.5 + parent: 1 + - uid: 326 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,-8.5 + parent: 1 + - uid: 327 + components: + - type: Transform + pos: 5.5,1.5 + parent: 1 + - uid: 328 + components: + - type: Transform + pos: -4.5,1.5 + parent: 1 +- proto: ToolboxMechanicalFilled + entities: + - uid: 261 + components: + - type: Transform + parent: 21 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 315 + components: + - type: Transform + parent: 26 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: VendingMachineTankDispenserEVA + entities: + - uid: 329 + components: + - type: Transform + pos: -3.5,-0.5 + parent: 1 +- proto: WallClown + entities: + - uid: 330 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,-3.5 + parent: 1 + - uid: 331 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,-0.5 + parent: 1 + - uid: 332 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,-1.5 + parent: 1 + - uid: 333 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,-2.5 + parent: 1 + - uid: 334 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,-3.5 + parent: 1 + - uid: 335 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,-3.5 + parent: 1 + - uid: 336 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,-3.5 + parent: 1 + - uid: 337 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,-7.5 + parent: 1 + - uid: 338 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-7.5 + parent: 1 + - uid: 339 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-7.5 + parent: 1 + - uid: 340 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-7.5 + parent: 1 + - uid: 341 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,-7.5 + parent: 1 + - uid: 342 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,-7.5 + parent: 1 + - uid: 343 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-7.5 + parent: 1 + - uid: 344 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-7.5 + parent: 1 + - uid: 345 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-6.5 + parent: 1 + - uid: 346 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-4.5 + parent: 1 + - uid: 347 + components: + - type: Transform + pos: -0.5,-3.5 + parent: 1 + - uid: 348 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-3.5 + parent: 1 + - uid: 349 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-3.5 + parent: 1 + - uid: 350 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-3.5 + parent: 1 + - uid: 351 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,-3.5 + parent: 1 + - uid: 352 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-2.5 + parent: 1 + - uid: 353 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-3.5 + parent: 1 + - uid: 354 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-3.5 + parent: 1 + - uid: 355 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-3.5 + parent: 1 + - uid: 356 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,-3.5 + parent: 1 + - uid: 357 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,-3.5 + parent: 1 + - uid: 358 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-0.5 + parent: 1 + - uid: 359 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,0.5 + parent: 1 + - uid: 360 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,1.5 + parent: 1 + - uid: 361 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-0.5 + parent: 1 + - uid: 362 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,0.5 + parent: 1 + - uid: 363 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,1.5 + parent: 1 + - uid: 364 + components: + - type: Transform + pos: -1.5,-8.5 + parent: 1 + - uid: 365 + components: + - type: Transform + pos: -0.5,-8.5 + parent: 1 + - uid: 366 + components: + - type: Transform + pos: 0.5,-8.5 + parent: 1 + - uid: 367 + components: + - type: Transform + pos: 1.5,-8.5 + parent: 1 + - uid: 368 + components: + - type: Transform + pos: 2.5,-8.5 + parent: 1 + - uid: 369 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,-0.5 + parent: 1 + - uid: 370 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,-2.5 + parent: 1 + - uid: 371 + components: + - type: Transform + pos: 3.5,-2.5 + parent: 1 +... diff --git a/Resources/Maps/Shuttles/ShuttleEvent/lost_cargo.yml b/Resources/Maps/Shuttles/ShuttleEvent/lost_cargo.yml new file mode 100644 index 00000000000..148577363fb --- /dev/null +++ b/Resources/Maps/Shuttles/ShuttleEvent/lost_cargo.yml @@ -0,0 +1,1411 @@ +meta: + format: 6 + postmapinit: false +tilemap: + 0: Space + 54: FloorGreenCircuit + 85: FloorShuttleWhite + 89: FloorSteel + 104: FloorTechMaint + 121: Plating +entities: +- proto: "" + entities: + - uid: 1 + components: + - type: MetaData + name: Cargo shuttle + - type: Transform + pos: 2.2710133,-2.4148211 + parent: invalid + - type: MapGrid + chunks: + -1,0: + ind: -1,0 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAVQAAAAAANgAAAAAAVQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAANgAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 0,0: + ind: 0,0 + tiles: WQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + -1,-1: + ind: -1,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAA + version: 6 + 0,-1: + ind: 0,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + - type: Broadphase + - type: Physics + bodyStatus: InAir + angularDamping: 0.05 + linearDamping: 0.05 + fixedRotation: False + bodyType: Dynamic + - type: Fixtures + fixtures: {} + - type: Gravity + gravityShakeSound: !type:SoundPathSpecifier + path: /Audio/Effects/alert.ogg + - type: CargoShuttle + - type: DecalGrid + chunkCollection: + version: 2 + nodes: + - node: + color: '#FFFFFFFF' + id: Bot + decals: + 0: -5,5 + 1: -4,5 + 2: -1,5 + 3: -1,-1 + 4: -2,-1 + 5: -4,-1 + 6: -1,2 + 7: -4,2 + 8: -5,2 + - node: + color: '#9FED5896' + id: CheckerNESW + decals: + 9: -3,-1 + 10: -3,0 + 11: -3,1 + 12: -3,2 + 13: -3,3 + 14: -3,4 + 15: -3,5 + - node: + color: '#9FED5896' + id: MiniTileWhiteCornerNe + decals: + 29: -1,5 + 30: -2,6 + - node: + color: '#9FED5896' + id: MiniTileWhiteCornerNw + decals: + 19: -5,5 + 20: -4,6 + - node: + color: '#9FED5896' + id: MiniTileWhiteCornerSe + decals: + 21: -1,-1 + - node: + color: '#9FED5896' + id: MiniTileWhiteCornerSw + decals: + 22: -5,-1 + - node: + color: '#9FED5896' + id: MiniTileWhiteInnerNe + decals: + 33: -2,5 + - node: + color: '#9FED5896' + id: MiniTileWhiteInnerNw + decals: + 32: -4,5 + - node: + color: '#9FED5896' + id: MiniTileWhiteLineE + decals: + 26: -1,0 + 27: -1,2 + 28: -1,4 + - node: + color: '#9FED5896' + id: MiniTileWhiteLineN + decals: + 31: -3,6 + - node: + color: '#9FED5896' + id: MiniTileWhiteLineS + decals: + 23: -4,-1 + 24: -3,-1 + 25: -2,-1 + - node: + color: '#9FED5896' + id: MiniTileWhiteLineW + decals: + 16: -5,0 + 17: -5,2 + 18: -5,4 + - node: + color: '#9FED5896' + id: WarnLineE + decals: + 36: -1,1 + 37: -1,3 + - node: + color: '#9FED5896' + id: WarnLineS + decals: + 34: -5,1 + 35: -5,3 + - type: GridAtmosphere + version: 2 + data: + tiles: + -2,0: + 0: 51400 + -2,1: + 0: 16520 + -2,-1: + 0: 32832 + -1,0: + 0: 65535 + -1,1: + 0: 30719 + -2,2: + 0: 128 + -1,-1: + 0: 63346 + -1,2: + 0: 130 + 0,0: + 0: 4112 + 0,1: + 0: 4096 + -2,-2: + 0: 32768 + -1,-2: + 0: 32768 + 0,-1: + 0: 16 + uniqueMixes: + - volume: 2500 + temperature: 293.15 + moles: + - 21.824879 + - 82.10312 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + chunkSize: 4 + - type: OccluderTree + - type: Shuttle + - type: GridPathfinding + - type: RadiationGridResistance + - type: SpreaderGrid + - type: GravityShake + shakeTimes: 10 + - type: GasTileOverlay +- proto: AirCanister + entities: + - uid: 2 + components: + - type: Transform + pos: -3.5,-1.5 + parent: 1 +- proto: AirlockGlassShuttle + entities: + - uid: 3 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,3.5 + parent: 1 + - uid: 4 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,1.5 + parent: 1 + - uid: 5 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,3.5 + parent: 1 + - uid: 6 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,1.5 + parent: 1 +- proto: APCHyperCapacity + entities: + - uid: 7 + components: + - type: Transform + pos: -0.5,6.5 + parent: 1 +- proto: AtmosDeviceFanTiny + entities: + - uid: 8 + components: + - type: Transform + pos: -5.5,1.5 + parent: 1 + - uid: 9 + components: + - type: Transform + pos: -5.5,3.5 + parent: 1 + - uid: 10 + components: + - type: Transform + pos: 0.5,3.5 + parent: 1 + - uid: 11 + components: + - type: Transform + pos: 0.5,1.5 + parent: 1 +- proto: BlastDoor + entities: + - uid: 12 + components: + - type: Transform + pos: 0.5,4.5 + parent: 1 + - type: DeviceLinkSink + links: + - 135 + - uid: 13 + components: + - type: Transform + pos: -5.5,0.5 + parent: 1 + - type: DeviceLinkSink + links: + - 134 + - uid: 14 + components: + - type: Transform + pos: 0.5,0.5 + parent: 1 + - type: DeviceLinkSink + links: + - 136 + - uid: 15 + components: + - type: Transform + pos: -5.5,4.5 + parent: 1 + - type: DeviceLinkSink + links: + - 133 +- proto: BoxMRE + entities: + - uid: 93 + components: + - type: Transform + pos: -1.3692467,7.6214685 + parent: 1 +- proto: CableApcExtension + entities: + - uid: 16 + components: + - type: Transform + pos: -0.5,6.5 + parent: 1 + - uid: 17 + components: + - type: Transform + pos: -1.5,6.5 + parent: 1 + - uid: 18 + components: + - type: Transform + pos: -2.5,6.5 + parent: 1 + - uid: 19 + components: + - type: Transform + pos: -2.5,5.5 + parent: 1 + - uid: 20 + components: + - type: Transform + pos: -2.5,8.5 + parent: 1 + - uid: 21 + components: + - type: Transform + pos: -3.5,8.5 + parent: 1 + - uid: 22 + components: + - type: Transform + pos: -1.5,8.5 + parent: 1 + - uid: 23 + components: + - type: Transform + pos: -3.5,6.5 + parent: 1 + - uid: 24 + components: + - type: Transform + pos: -3.5,7.5 + parent: 1 + - uid: 25 + components: + - type: Transform + pos: -2.5,4.5 + parent: 1 + - uid: 26 + components: + - type: Transform + pos: -2.5,3.5 + parent: 1 + - uid: 27 + components: + - type: Transform + pos: -2.5,2.5 + parent: 1 + - uid: 28 + components: + - type: Transform + pos: -2.5,1.5 + parent: 1 + - uid: 29 + components: + - type: Transform + pos: -2.5,0.5 + parent: 1 + - uid: 30 + components: + - type: Transform + pos: -2.5,-0.5 + parent: 1 + - uid: 31 + components: + - type: Transform + pos: -2.5,-1.5 + parent: 1 + - uid: 32 + components: + - type: Transform + pos: -1.5,-4.5 + parent: 1 + - uid: 33 + components: + - type: Transform + pos: -1.5,-1.5 + parent: 1 + - uid: 34 + components: + - type: Transform + pos: -1.5,-2.5 + parent: 1 + - uid: 35 + components: + - type: Transform + pos: -2.5,-4.5 + parent: 1 + - uid: 36 + components: + - type: Transform + pos: -1.5,-3.5 + parent: 1 + - uid: 37 + components: + - type: Transform + pos: -3.5,-4.5 + parent: 1 + - uid: 38 + components: + - type: Transform + pos: -3.5,-3.5 + parent: 1 + - uid: 39 + components: + - type: Transform + pos: -4.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,3.5 + parent: 1 + - uid: 42 + components: + - type: Transform + pos: -0.5,3.5 + parent: 1 + - uid: 43 + components: + - type: Transform + pos: -1.5,1.5 + parent: 1 + - uid: 44 + components: + - type: Transform + pos: -0.5,1.5 + parent: 1 + - uid: 45 + components: + - type: Transform + pos: -3.5,1.5 + parent: 1 + - uid: 46 + components: + - type: Transform + pos: -4.5,1.5 + parent: 1 + - uid: 47 + components: + - type: Transform + pos: -3.5,3.5 + parent: 1 + - uid: 48 + components: + - type: Transform + pos: -4.5,3.5 + parent: 1 + - uid: 49 + components: + - type: Transform + pos: -4.5,-3.5 + parent: 1 +- proto: CableHV + entities: + - uid: 50 + components: + - type: Transform + pos: -1.5,-2.5 + parent: 1 + - uid: 51 + components: + - type: Transform + pos: -2.5,-2.5 + parent: 1 + - uid: 52 + components: + - type: Transform + pos: -2.5,-3.5 + parent: 1 +- proto: CableMV + entities: + - uid: 53 + components: + - type: Transform + pos: -1.5,-2.5 + parent: 1 + - uid: 54 + components: + - type: Transform + pos: -1.5,-1.5 + parent: 1 + - uid: 55 + components: + - type: Transform + pos: -2.5,-1.5 + parent: 1 + - uid: 56 + components: + - type: Transform + pos: -2.5,-0.5 + parent: 1 + - uid: 57 + components: + - type: Transform + pos: -2.5,0.5 + parent: 1 + - uid: 58 + components: + - type: Transform + pos: -2.5,1.5 + parent: 1 + - uid: 59 + components: + - type: Transform + pos: -2.5,2.5 + parent: 1 + - uid: 60 + components: + - type: Transform + pos: -2.5,3.5 + parent: 1 + - uid: 61 + components: + - type: Transform + pos: -2.5,4.5 + parent: 1 + - uid: 62 + components: + - type: Transform + pos: -2.5,5.5 + parent: 1 + - uid: 63 + components: + - type: Transform + pos: -2.5,6.5 + parent: 1 + - uid: 64 + components: + - type: Transform + pos: -1.5,6.5 + parent: 1 + - uid: 65 + components: + - type: Transform + pos: -0.5,6.5 + parent: 1 +- proto: CableTerminal + entities: + - uid: 66 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-3.5 + parent: 1 +- proto: Catwalk + entities: + - uid: 67 + components: + - type: Transform + pos: -1.5,-0.5 + parent: 1 + - uid: 68 + components: + - type: Transform + pos: -0.5,-0.5 + parent: 1 + - uid: 71 + components: + - type: Transform + pos: -4.5,2.5 + parent: 1 + - uid: 72 + components: + - type: Transform + pos: -3.5,2.5 + parent: 1 + - uid: 73 + components: + - type: Transform + pos: -3.5,5.5 + parent: 1 + - uid: 74 + components: + - type: Transform + pos: -4.5,5.5 + parent: 1 + - uid: 75 + components: + - type: Transform + pos: -3.5,-0.5 + parent: 1 + - uid: 76 + components: + - type: Transform + pos: -4.5,-0.5 + parent: 1 + - uid: 77 + components: + - type: Transform + pos: -1.5,5.5 + parent: 1 + - uid: 78 + components: + - type: Transform + pos: -0.5,5.5 + parent: 1 +- proto: ChairPilotSeat + entities: + - uid: 70 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,2.5 + parent: 1 + - uid: 79 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,7.5 + parent: 1 +- proto: ComputerShuttle + entities: + - uid: 80 + components: + - type: Transform + pos: -2.5,8.5 + parent: 1 +- proto: ConveyorBelt + entities: + - uid: 81 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,4.5 + parent: 1 + - type: DeviceLinkSink + links: + - 151 + - uid: 82 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,4.5 + parent: 1 + - type: DeviceLinkSink + links: + - 151 + - uid: 83 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,4.5 + parent: 1 + - type: DeviceLinkSink + links: + - 151 + - uid: 84 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,0.5 + parent: 1 + - type: DeviceLinkSink + links: + - 149 + - uid: 85 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,0.5 + parent: 1 + - type: DeviceLinkSink + links: + - 149 + - uid: 86 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,0.5 + parent: 1 + - type: DeviceLinkSink + links: + - 149 + - uid: 87 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,0.5 + parent: 1 + - type: DeviceLinkSink + links: + - 150 + - uid: 88 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,4.5 + parent: 1 + - type: DeviceLinkSink + links: + - 152 + - uid: 89 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,4.5 + parent: 1 + - type: DeviceLinkSink + links: + - 152 + - uid: 90 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,4.5 + parent: 1 + - type: DeviceLinkSink + links: + - 152 + - uid: 91 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,0.5 + parent: 1 + - type: DeviceLinkSink + links: + - 150 + - uid: 92 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,0.5 + parent: 1 + - type: DeviceLinkSink + links: + - 150 +- proto: CrateFilledSpawner + entities: + - uid: 95 + components: + - type: Transform + pos: -0.5,-0.5 + parent: 1 + - uid: 96 + components: + - type: Transform + pos: -4.5,2.5 + parent: 1 + - uid: 97 + components: + - type: Transform + pos: -0.5,5.5 + parent: 1 + - uid: 98 + components: + - type: Transform + pos: -3.5,2.5 + parent: 1 +- proto: DrinkBeerBottleFull + entities: + - uid: 99 + components: + - type: Transform + pos: -3.2915764,7.812316 + parent: 1 + - uid: 100 + components: + - type: Transform + pos: -3.4715438,7.654894 + parent: 1 +- proto: GasPipeBend + entities: + - uid: 101 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,-1.5 + parent: 1 +- proto: GasPipeStraight + entities: + - uid: 102 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,0.5 + parent: 1 + - uid: 103 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,1.5 + parent: 1 + - uid: 104 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-0.5 + parent: 1 +- proto: GasPort + entities: + - uid: 105 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-1.5 + parent: 1 +- proto: GasVentPump + entities: + - uid: 106 + components: + - type: Transform + pos: -2.5,2.5 + parent: 1 +- proto: GeneratorBasic15kW + entities: + - uid: 107 + components: + - type: Transform + pos: -2.5,-3.5 + parent: 1 +- proto: GravityGeneratorMini + entities: + - uid: 108 + components: + - type: Transform + pos: -1.5,-1.5 + parent: 1 +- proto: Grille + entities: + - uid: 109 + components: + - type: Transform + pos: -3.5,8.5 + parent: 1 + - uid: 110 + components: + - type: Transform + pos: -3.5,9.5 + parent: 1 + - uid: 111 + components: + - type: Transform + pos: -2.5,9.5 + parent: 1 + - uid: 112 + components: + - type: Transform + pos: -1.5,9.5 + parent: 1 + - uid: 113 + components: + - type: Transform + pos: -1.5,8.5 + parent: 1 +- proto: Gyroscope + entities: + - uid: 114 + components: + - type: Transform + pos: -3.5,-2.5 + parent: 1 +- proto: LostCargoTechnicianSpawner + entities: + - uid: 69 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,2.5 + parent: 1 + - uid: 187 + components: + - type: Transform + pos: -2.5,7.5 + parent: 1 +- proto: PlasticFlapsAirtightClear + entities: + - uid: 116 + components: + - type: Transform + pos: 0.5,0.5 + parent: 1 + - uid: 117 + components: + - type: Transform + pos: -5.5,0.5 + parent: 1 + - uid: 118 + components: + - type: Transform + pos: -5.5,4.5 + parent: 1 + - uid: 119 + components: + - type: Transform + pos: 0.5,4.5 + parent: 1 +- proto: Poweredlight + entities: + - uid: 120 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,2.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 121 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,2.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 122 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,7.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 123 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,7.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 +- proto: RandomPosterAny + entities: + - uid: 124 + components: + - type: Transform + pos: -4.5,6.5 + parent: 1 +- proto: RandomSpawner100 + entities: + - uid: 188 + components: + - type: Transform + pos: -4.5,1.5 + parent: 1 + - uid: 189 + components: + - type: Transform + pos: -0.5,3.5 + parent: 1 + - uid: 190 + components: + - type: Transform + pos: -2.5,4.5 + parent: 1 + - uid: 191 + components: + - type: Transform + pos: -1.5,-0.5 + parent: 1 + - uid: 192 + components: + - type: Transform + pos: -0.5,0.5 + parent: 1 + - uid: 193 + components: + - type: Transform + pos: -4.5,4.5 + parent: 1 +- proto: SalvageLootSpawner + entities: + - uid: 115 + components: + - type: Transform + pos: -1.5,2.5 + parent: 1 +- proto: SalvageMaterialCrateSpawner + entities: + - uid: 94 + components: + - type: Transform + pos: -3.5,-0.5 + parent: 1 + - uid: 125 + components: + - type: Transform + pos: -4.5,-0.5 + parent: 1 + - uid: 127 + components: + - type: Transform + pos: -3.5,5.5 + parent: 1 +- proto: ShuttleWindow + entities: + - uid: 128 + components: + - type: Transform + pos: -1.5,8.5 + parent: 1 + - uid: 129 + components: + - type: Transform + pos: -1.5,9.5 + parent: 1 + - uid: 130 + components: + - type: Transform + pos: -2.5,9.5 + parent: 1 + - uid: 131 + components: + - type: Transform + pos: -3.5,9.5 + parent: 1 + - uid: 132 + components: + - type: Transform + pos: -3.5,8.5 + parent: 1 +- proto: SignalButton + entities: + - uid: 133 + components: + - type: Transform + pos: -5.5,5.5 + parent: 1 + - type: DeviceLinkSource + linkedPorts: + 15: + - Pressed: Toggle + - uid: 134 + components: + - type: Transform + pos: -5.5,-0.5 + parent: 1 + - type: DeviceLinkSource + linkedPorts: + 13: + - Pressed: Toggle + - uid: 135 + components: + - type: Transform + pos: 0.5,5.5 + parent: 1 + - type: DeviceLinkSource + linkedPorts: + 12: + - Pressed: Toggle + - uid: 136 + components: + - type: Transform + pos: 0.5,-0.5 + parent: 1 + - type: DeviceLinkSource + linkedPorts: + 14: + - Pressed: Toggle +- proto: SMESBasic + entities: + - uid: 137 + components: + - type: Transform + pos: -2.5,-2.5 + parent: 1 +- proto: SubstationBasic + entities: + - uid: 138 + components: + - type: Transform + pos: -1.5,-2.5 + parent: 1 +- proto: TableReinforced + entities: + - uid: 126 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,2.5 + parent: 1 + - uid: 139 + components: + - type: Transform + pos: -3.5,7.5 + parent: 1 + - uid: 140 + components: + - type: Transform + pos: -1.5,7.5 + parent: 1 +- proto: Thruster + entities: + - uid: 141 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-2.5 + parent: 1 + - uid: 142 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,7.5 + parent: 1 + - uid: 143 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,7.5 + parent: 1 + - uid: 144 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,-2.5 + parent: 1 + - uid: 145 + components: + - type: Transform + pos: -4.5,9.5 + parent: 1 + - uid: 146 + components: + - type: Transform + pos: -0.5,9.5 + parent: 1 + - uid: 147 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-4.5 + parent: 1 + - uid: 148 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,-4.5 + parent: 1 +- proto: TwoWayLever + entities: + - uid: 149 + components: + - type: Transform + pos: -3.5,1.5 + parent: 1 + - type: DeviceLinkSource + linkedPorts: + 86: + - Left: Forward + - Right: Reverse + - Middle: Off + 85: + - Left: Forward + - Right: Reverse + - Middle: Off + 84: + - Left: Forward + - Right: Reverse + - Middle: Off + - uid: 150 + components: + - type: Transform + pos: -1.5,1.5 + parent: 1 + - type: DeviceLinkSource + linkedPorts: + 91: + - Left: Forward + - Right: Reverse + - Middle: Off + 87: + - Left: Forward + - Right: Reverse + - Middle: Off + 92: + - Left: Forward + - Right: Reverse + - Middle: Off + - uid: 151 + components: + - type: Transform + pos: -1.5,3.5 + parent: 1 + - type: DeviceLinkSource + linkedPorts: + 81: + - Left: Forward + - Right: Reverse + - Middle: Off + 82: + - Left: Forward + - Right: Reverse + - Middle: Off + 83: + - Left: Forward + - Right: Reverse + - Middle: Off + - uid: 152 + components: + - type: Transform + pos: -3.5,3.5 + parent: 1 + - type: DeviceLinkSource + linkedPorts: + 90: + - Left: Forward + - Right: Reverse + - Middle: Off + 89: + - Left: Forward + - Right: Reverse + - Middle: Off + 88: + - Left: Forward + - Right: Reverse + - Middle: Off +- proto: WallShuttle + entities: + - uid: 153 + components: + - type: Transform + pos: -5.5,8.5 + parent: 1 + - uid: 154 + components: + - type: Transform + pos: -4.5,8.5 + parent: 1 + - uid: 155 + components: + - type: Transform + pos: -0.5,8.5 + parent: 1 + - uid: 156 + components: + - type: Transform + pos: 0.5,8.5 + parent: 1 + - uid: 157 + components: + - type: Transform + pos: -0.5,-3.5 + parent: 1 + - uid: 158 + components: + - type: Transform + pos: 0.5,-3.5 + parent: 1 + - uid: 159 + components: + - type: Transform + pos: -4.5,-3.5 + parent: 1 + - uid: 160 + components: + - type: Transform + pos: -5.5,-3.5 + parent: 1 + - uid: 161 + components: + - type: Transform + pos: -0.5,-1.5 + parent: 1 + - uid: 162 + components: + - type: Transform + pos: -0.5,-2.5 + parent: 1 + - uid: 163 + components: + - type: Transform + pos: -4.5,-1.5 + parent: 1 + - uid: 164 + components: + - type: Transform + pos: 0.5,-1.5 + parent: 1 + - uid: 165 + components: + - type: Transform + pos: -4.5,-2.5 + parent: 1 + - uid: 166 + components: + - type: Transform + pos: -5.5,-1.5 + parent: 1 + - uid: 167 + components: + - type: Transform + pos: -0.5,7.5 + parent: 1 + - uid: 168 + components: + - type: Transform + pos: -0.5,6.5 + parent: 1 + - uid: 169 + components: + - type: Transform + pos: 0.5,6.5 + parent: 1 + - uid: 170 + components: + - type: Transform + pos: -4.5,7.5 + parent: 1 + - uid: 171 + components: + - type: Transform + pos: -4.5,6.5 + parent: 1 + - uid: 172 + components: + - type: Transform + pos: -5.5,6.5 + parent: 1 + - uid: 173 + components: + - type: Transform + pos: -5.5,-0.5 + parent: 1 + - uid: 174 + components: + - type: Transform + pos: -5.5,5.5 + parent: 1 + - uid: 175 + components: + - type: Transform + pos: 0.5,5.5 + parent: 1 + - uid: 176 + components: + - type: Transform + pos: 0.5,-0.5 + parent: 1 + - uid: 177 + components: + - type: Transform + pos: 0.5,2.5 + parent: 1 + - uid: 178 + components: + - type: Transform + pos: -5.5,2.5 + parent: 1 + - uid: 179 + components: + - type: Transform + pos: -3.5,-4.5 + parent: 1 + - uid: 180 + components: + - type: Transform + pos: -2.5,-4.5 + parent: 1 + - uid: 181 + components: + - type: Transform + pos: -1.5,-4.5 + parent: 1 + - uid: 182 + components: + - type: Transform + pos: -3.5,-3.5 + parent: 1 + - uid: 183 + components: + - type: Transform + pos: -1.5,-3.5 + parent: 1 +- proto: WindoorCargoLocked + entities: + - uid: 184 + components: + - type: Transform + pos: -2.5,7.5 + parent: 1 +- proto: WindowReinforcedDirectional + entities: + - uid: 185 + components: + - type: Transform + pos: -1.5,7.5 + parent: 1 + - uid: 186 + components: + - type: Transform + pos: -3.5,7.5 + parent: 1 +... diff --git a/Resources/Maps/Shuttles/striker.yml b/Resources/Maps/Shuttles/ShuttleEvent/striker.yml similarity index 100% rename from Resources/Maps/Shuttles/striker.yml rename to Resources/Maps/Shuttles/ShuttleEvent/striker.yml diff --git a/Resources/Maps/Shuttles/ShuttleEvent/syndie_evacpod.yml b/Resources/Maps/Shuttles/ShuttleEvent/syndie_evacpod.yml new file mode 100644 index 00000000000..d90fadba238 --- /dev/null +++ b/Resources/Maps/Shuttles/ShuttleEvent/syndie_evacpod.yml @@ -0,0 +1,1188 @@ +meta: + format: 6 + postmapinit: false +tilemap: + 0: Space + 29: FloorDark + 84: FloorShuttleRed + 101: FloorSteelOffset + 104: FloorTechMaint + 120: Lattice + 121: Plating +entities: +- proto: "" + entities: + - uid: 1 + components: + - type: MetaData + desc: Evacuation pod + name: Evacuation pod + - type: Transform + parent: invalid + - type: MapGrid + chunks: + -1,-1: + ind: -1,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAZQAAAAAAZQAAAAAA + version: 6 + -1,0: + ind: -1,0 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAZQAAAAAAZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAZQAAAAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 0,-1: + ind: 0,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAAAAHQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZQAAAAAAZQAAAAAAZQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 0,0: + ind: 0,0 + tiles: ZQAAAAAAZQAAAAAAZQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAAAVAAAAAAAZQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAAAVAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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: + - node: + color: '#A91409FF' + id: StandClearGreyscale + decals: + 18: 0,-1 + - node: + color: '#A91409FF' + id: WarnCornerSmallGreyscaleNE + decals: + 15: -2,0 + - node: + color: '#A91409FF' + id: WarnCornerSmallGreyscaleNW + decals: + 14: 2,0 + - node: + color: '#A91409FF' + id: WarnEndGreyscaleN + decals: + 9: -2,1 + 10: 2,1 + - node: + color: '#A91409FF' + id: WarnLineGreyscaleE + decals: + 0: 2,0 + 8: 2,-1 + 17: 5,0 + - node: + color: '#A91409FF' + id: WarnLineGreyscaleN + decals: + 11: -1,0 + 12: 0,0 + 13: 1,0 + - node: + color: '#A91409FF' + id: WarnLineGreyscaleS + decals: + 1: 1,-1 + 2: 0,-1 + 3: -1,-1 + 4: -2,-1 + 5: 2,-1 + - node: + color: '#A91409FF' + id: WarnLineGreyscaleW + decals: + 6: -2,-1 + 7: -2,0 + 16: -5,0 + - type: GridAtmosphere + version: 2 + data: + tiles: + -2,-1: + 0: 18432 + -2,0: + 1: 12 + 0: 64 + -1,-1: + 0: 601 + 1: 51200 + -1,0: + 1: 2255 + 0: 16896 + 0,-1: + 0: 2115 + 1: 29440 + -2,1: + 0: 8 + -1,1: + 0: 4096 + 0,0: + 1: 895 + 0: 18432 + 1,-1: + 0: 16913 + 1,0: + 1: 7 + 0: 64 + 1,1: + 0: 4098 + 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: NavMap + - type: RadiationGridResistance +- proto: AirlockShuttleSyndicate + entities: + - uid: 2 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,0.5 + parent: 1 + - uid: 3 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,0.5 + parent: 1 +- proto: AirlockSyndicate + entities: + - uid: 4 + components: + - type: Transform + pos: 3.5,0.5 + parent: 1 + - uid: 5 + components: + - type: Transform + pos: -2.5,0.5 + parent: 1 +- proto: APCBasic + entities: + - uid: 6 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,1.5 + parent: 1 +- proto: AtmosDeviceFanTiny + entities: + - uid: 7 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,0.5 + parent: 1 + - uid: 8 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,0.5 + parent: 1 +- proto: BannerSyndicate + entities: + - uid: 9 + components: + - type: Transform + pos: 1.5,1.5 + parent: 1 +- proto: CableApcExtension + entities: + - uid: 10 + components: + - type: Transform + pos: -2.5,1.5 + parent: 1 + - uid: 11 + components: + - type: Transform + pos: -2.5,0.5 + parent: 1 + - uid: 12 + components: + - type: Transform + pos: -3.5,0.5 + parent: 1 + - uid: 13 + components: + - type: Transform + pos: -4.5,0.5 + parent: 1 + - uid: 14 + components: + - type: Transform + pos: -5.5,0.5 + parent: 1 + - uid: 15 + components: + - type: Transform + pos: -1.5,0.5 + parent: 1 + - uid: 16 + components: + - type: Transform + pos: -0.5,0.5 + parent: 1 + - uid: 17 + components: + - type: Transform + pos: 0.5,0.5 + parent: 1 + - uid: 18 + components: + - type: Transform + pos: 1.5,0.5 + parent: 1 + - uid: 19 + components: + - type: Transform + pos: 2.5,0.5 + parent: 1 + - uid: 20 + components: + - type: Transform + pos: 3.5,0.5 + parent: 1 + - uid: 21 + components: + - type: Transform + pos: 4.5,0.5 + parent: 1 + - uid: 22 + components: + - type: Transform + pos: 5.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,-2.5 + parent: 1 + - uid: 27 + components: + - type: Transform + pos: 1.5,-2.5 + parent: 1 + - uid: 28 + components: + - type: Transform + pos: -0.5,-1.5 + parent: 1 + - uid: 29 + components: + - type: Transform + pos: -1.5,-1.5 + parent: 1 + - uid: 30 + components: + - type: Transform + pos: 1.5,-1.5 + parent: 1 + - uid: 31 + components: + - type: Transform + pos: 2.5,-1.5 + parent: 1 + - uid: 32 + components: + - type: Transform + pos: 0.5,1.5 + parent: 1 +- proto: CableHV + entities: + - uid: 33 + components: + - type: Transform + pos: -2.5,-0.5 + parent: 1 + - uid: 34 + components: + - type: Transform + pos: -1.5,-0.5 + parent: 1 + - uid: 35 + components: + - type: Transform + pos: -0.5,-0.5 + parent: 1 + - uid: 36 + components: + - type: Transform + pos: 0.5,-0.5 + parent: 1 + - uid: 37 + components: + - type: Transform + pos: 1.5,-0.5 + parent: 1 + - uid: 38 + components: + - type: Transform + pos: 2.5,-0.5 + parent: 1 + - uid: 39 + components: + - type: Transform + pos: 3.5,-0.5 + parent: 1 + - uid: 40 + components: + - type: Transform + pos: 3.5,-0.5 + parent: 1 + - uid: 41 + components: + - type: Transform + pos: 3.5,0.5 + parent: 1 + - uid: 42 + components: + - type: Transform + pos: 3.5,1.5 + parent: 1 +- proto: CableMV + entities: + - uid: 43 + components: + - type: Transform + pos: 3.5,1.5 + parent: 1 + - uid: 44 + components: + - type: Transform + pos: 2.5,1.5 + parent: 1 + - uid: 45 + components: + - type: Transform + pos: 1.5,1.5 + parent: 1 + - uid: 46 + components: + - type: Transform + pos: 0.5,1.5 + parent: 1 + - uid: 47 + components: + - type: Transform + pos: -0.5,1.5 + parent: 1 + - uid: 48 + components: + - type: Transform + pos: -1.5,1.5 + parent: 1 + - uid: 49 + components: + - type: Transform + pos: -2.5,1.5 + parent: 1 +- proto: ChairPilotSeat + entities: + - uid: 50 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,1.5 + parent: 1 + - uid: 51 + components: + - type: Transform + pos: -1.5,1.5 + parent: 1 + - uid: 52 + components: + - type: Transform + pos: 2.5,1.5 + parent: 1 +- proto: ClosetWallEmergencyFilledRandom + entities: + - uid: 53 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,-0.5 + parent: 1 +- proto: ClosetWallFireFilledRandom + entities: + - uid: 54 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,-0.5 + parent: 1 +- proto: ClothingHeadPyjamaSyndicateRed + entities: + - uid: 98 + components: + - type: Transform + parent: 92 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: ClothingNeckScarfStripedSyndieRed + entities: + - uid: 101 + components: + - type: Transform + parent: 92 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 102 + components: + - type: Transform + parent: 92 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: ComputerShuttleSyndie + entities: + - uid: 55 + components: + - type: Transform + pos: 0.5,2.5 + parent: 1 +- proto: CrateSyndicate + entities: + - uid: 92 + components: + - type: Transform + pos: 1.5,-0.5 + parent: 1 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.14673 + moles: + - 1.7459903 + - 6.568249 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 102 + - 101 + - 100 + - 99 + - 98 + - 97 + - 96 + - 95 + - 94 + - 93 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null +- proto: CyberPen + entities: + - uid: 93 + components: + - type: Transform + parent: 92 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: FaxMachineSyndie + entities: + - uid: 162 + components: + - type: Transform + pos: -0.5,1.5 + parent: 1 +- proto: GeneratorWallmountAPU + entities: + - uid: 56 + components: + - type: Transform + pos: 3.5,-0.5 + parent: 1 +- proto: GeneratorWallmountBasic + entities: + - uid: 57 + components: + - type: Transform + pos: -2.5,-0.5 + parent: 1 +- proto: Grille + entities: + - uid: 58 + components: + - type: Transform + pos: 2.5,2.5 + parent: 1 + - uid: 59 + components: + - type: Transform + pos: 0.5,3.5 + parent: 1 + - uid: 60 + components: + - type: Transform + pos: -1.5,2.5 + parent: 1 + - uid: 61 + components: + - type: Transform + pos: -0.5,3.5 + parent: 1 + - uid: 62 + components: + - type: Transform + pos: 1.5,3.5 + parent: 1 +- proto: GrilleDiagonal + entities: + - uid: 63 + components: + - type: Transform + pos: -2.5,2.5 + parent: 1 + - uid: 64 + components: + - type: Transform + pos: -1.5,3.5 + parent: 1 + - uid: 65 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,3.5 + parent: 1 + - uid: 66 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,2.5 + parent: 1 + - uid: 67 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,2.5 + parent: 1 + - uid: 68 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,2.5 + parent: 1 +- proto: Gyroscope + entities: + - uid: 69 + components: + - type: Transform + pos: 0.5,-1.5 + parent: 1 +- proto: Paper + entities: + - uid: 95 + components: + - type: Transform + parent: 92 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 97 + components: + - type: Transform + parent: 92 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 99 + components: + - type: Transform + parent: 92 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 100 + components: + - type: Transform + parent: 92 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: PlasmaWindowDiagonal + entities: + - uid: 70 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,2.5 + parent: 1 + - uid: 71 + components: + - type: Transform + pos: -1.5,3.5 + parent: 1 + - uid: 72 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,2.5 + parent: 1 + - uid: 73 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,2.5 + parent: 1 + - uid: 74 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,3.5 + parent: 1 + - uid: 75 + components: + - type: Transform + pos: -2.5,2.5 + parent: 1 +- proto: Poweredlight + entities: + - uid: 76 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-1.5 + parent: 1 +- proto: PoweredSmallLight + entities: + - uid: 77 + components: + - type: Transform + pos: -4.5,0.5 + parent: 1 + - uid: 78 + components: + - type: Transform + pos: 5.5,0.5 + parent: 1 + - uid: 79 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,1.5 + parent: 1 + - uid: 80 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,1.5 + parent: 1 +- proto: RandomPosterContraband + entities: + - uid: 81 + components: + - type: Transform + pos: -3.5,1.5 + parent: 1 + - uid: 82 + components: + - type: Transform + pos: 4.5,1.5 + parent: 1 +- proto: ReinforcedPlasmaWindow + entities: + - uid: 83 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,3.5 + parent: 1 + - uid: 84 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,3.5 + parent: 1 + - uid: 85 + components: + - type: Transform + pos: 2.5,2.5 + parent: 1 + - uid: 86 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,3.5 + parent: 1 + - uid: 87 + components: + - type: Transform + pos: -1.5,2.5 + parent: 1 +- proto: RubberStampSyndicate + entities: + - uid: 94 + components: + - type: Transform + parent: 92 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: SubstationWallBasic + entities: + - uid: 88 + components: + - type: Transform + pos: 3.5,1.5 + parent: 1 +- proto: SyndieDisasterVictimSpawner + entities: + - uid: 89 + components: + - type: Transform + pos: -1.5,1.5 + parent: 1 + - uid: 90 + components: + - type: Transform + pos: 0.5,1.5 + parent: 1 + - uid: 91 + components: + - type: Transform + pos: 2.5,1.5 + parent: 1 +- proto: TableGlass + entities: + - uid: 163 + components: + - type: Transform + pos: -0.5,1.5 + parent: 1 +- proto: Thruster + entities: + - uid: 103 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-3.5 + parent: 1 + - uid: 104 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-3.5 + parent: 1 + - uid: 105 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-3.5 + parent: 1 + - uid: 106 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-1.5 + parent: 1 + - uid: 107 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,-1.5 + parent: 1 +- proto: ToolboxSyndicateFilled + entities: + - uid: 96 + components: + - type: Transform + parent: 92 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: VendingMachineTankDispenserEVA + entities: + - uid: 108 + components: + - type: Transform + pos: -0.5,-0.5 + parent: 1 +- proto: WallPlastitanium + entities: + - uid: 109 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,-0.5 + parent: 1 + - uid: 110 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,1.5 + parent: 1 + - uid: 111 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,5.5 + parent: 1 + - uid: 112 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,6.5 + parent: 1 + - uid: 113 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,3.5 + parent: 1 + - uid: 114 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,-0.5 + parent: 1 + - uid: 115 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,2.5 + parent: 1 + - uid: 116 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,2.5 + parent: 1 + - uid: 117 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,1.5 + parent: 1 + - uid: 118 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,-0.5 + parent: 1 + - uid: 119 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,3.5 + parent: 1 + - uid: 120 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,-0.5 + parent: 1 + - uid: 121 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,3.5 + parent: 1 + - uid: 122 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,1.5 + parent: 1 + - uid: 123 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,4.5 + parent: 1 + - uid: 124 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,1.5 + parent: 1 + - uid: 125 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,-1.5 + parent: 1 + - uid: 126 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,1.5 + parent: 1 + - uid: 127 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,5.5 + parent: 1 + - uid: 128 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,2.5 + parent: 1 + - uid: 129 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,-1.5 + parent: 1 + - uid: 130 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,3.5 + parent: 1 + - uid: 131 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,4.5 + parent: 1 + - uid: 132 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,6.5 + parent: 1 + - uid: 133 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,2.5 + parent: 1 + - uid: 134 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,1.5 + parent: 1 + - uid: 135 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-1.5 + parent: 1 + - uid: 136 + components: + - type: Transform + pos: -0.5,-2.5 + parent: 1 + - uid: 137 + components: + - type: Transform + pos: 0.5,-2.5 + parent: 1 + - uid: 138 + components: + - type: Transform + pos: 1.5,-2.5 + parent: 1 + - uid: 139 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-1.5 + parent: 1 + - uid: 140 + components: + - type: Transform + pos: 3.5,-0.5 + parent: 1 + - uid: 141 + components: + - type: Transform + pos: -2.5,-0.5 + parent: 1 + - uid: 142 + components: + - type: Transform + pos: -3.5,-2.5 + parent: 1 + - uid: 143 + components: + - type: Transform + pos: 4.5,-2.5 + parent: 1 +- proto: WallPlastitaniumDiagonal + entities: + - uid: 144 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,1.5 + parent: 1 + - uid: 145 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,-0.5 + parent: 1 + - uid: 146 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,-1.5 + parent: 1 + - uid: 147 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,4.5 + parent: 1 + - uid: 148 + components: + - type: Transform + pos: -3.5,7.5 + parent: 1 + - uid: 149 + components: + - type: Transform + pos: -4.5,4.5 + parent: 1 + - uid: 150 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,7.5 + parent: 1 + - uid: 151 + components: + - type: Transform + pos: -5.5,1.5 + parent: 1 + - uid: 152 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,-0.5 + parent: 1 + - uid: 153 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,-1.5 + parent: 1 + - uid: 154 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-2.5 + parent: 1 + - uid: 155 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-2.5 + parent: 1 + - uid: 156 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-0.5 + parent: 1 + - uid: 157 + components: + - type: Transform + pos: 2.5,-0.5 + parent: 1 + - uid: 158 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-1.5 + parent: 1 + - uid: 159 + components: + - type: Transform + pos: 1.5,-1.5 + parent: 1 + - uid: 160 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-3.5 + parent: 1 + - uid: 161 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,-3.5 + parent: 1 +... diff --git a/Resources/Maps/Shuttles/ShuttleEvent/traveling_china_cuisine.yml b/Resources/Maps/Shuttles/ShuttleEvent/traveling_china_cuisine.yml new file mode 100644 index 00000000000..4b3bf617e2a --- /dev/null +++ b/Resources/Maps/Shuttles/ShuttleEvent/traveling_china_cuisine.yml @@ -0,0 +1,1872 @@ +meta: + format: 6 + postmapinit: false +tilemap: + 0: Space + 14: FloorBar + 40: FloorDirt + 44: FloorFreezer + 50: FloorGrassLight + 76: FloorRGlass + 85: FloorShuttleWhite + 96: FloorSteelDirty + 98: FloorSteelLime + 106: FloorTechMaint3 + 112: FloorWhiteMini + 117: FloorWhitePlastic + 119: FloorWoodTile + 120: Lattice + 121: Plating +entities: +- proto: "" + entities: + - uid: 1 + components: + - type: MetaData + name: SRV "Salami-Salami" + - type: Transform + pos: -0.5104167,-0.5 + parent: invalid + - type: MapGrid + chunks: + 0,0: + ind: 0,0 + tiles: YgAAAAAAYgAAAAAAYgAAAAAAVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + -1,0: + ind: -1,0 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + -1,-1: + ind: -1,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAMgAAAAAAMgAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAADgAAAAAADgAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAATAAAAAAADgAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAADgAAAAAADgAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAdwAAAAAAdwAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAAAYgAAAAAAYgAAAAAAYgAAAAAA + version: 6 + 0,-1: + ind: 0,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAAALAAAAAAALAAAAAAALAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAAATAAAAAAALAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAAATAAAAAAALAAAAAAAcAAAAAAAagAAAAAAKAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAAATAAAAAAALAAAAAAAcAAAAAAAYAAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAAATAAAAAAALAAAAAAAcAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAAALAAAAAAALAAAAAAAdQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAAAYgAAAAAAYgAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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: + - node: + color: '#FFFFFFFF' + id: FlowersBROne + decals: + 3: -2,-7 + - node: + color: '#FFFFFFFF' + id: Flowerspv2 + decals: + 2: -3,-7 + - node: + color: '#FFFFFFFF' + id: Flowersy3 + decals: + 0: -2,-7 + 1: -3,-7 + - type: GridAtmosphere + version: 2 + data: + tiles: + 0,0: + 0: 7 + 1: 128 + 0,-1: + 0: 29303 + -1,0: + 1: 129 + -1,-1: + 0: 28686 + 1: 272 + -1,-2: + 1: 28 + 0: 65024 + -1,-3: + 1: 49152 + 0,-3: + 1: 61440 + 0,-2: + 0: 32624 + 1: 8 + 1,-3: + 1: 4096 + 1,-2: + 1: 65 + 0: 13056 + 1,-1: + 0: 3 + 1: 320 + 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: NavMap +- proto: AirlockShuttle + entities: + - uid: 2 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,-4.5 + parent: 1 + - uid: 3 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,-0.5 + parent: 1 +- proto: APCBasic + entities: + - uid: 4 + components: + - type: Transform + pos: 2.5,-1.5 + parent: 1 +- proto: AtmosDeviceFanTiny + entities: + - uid: 5 + components: + - type: Transform + pos: -3.5,-4.5 + parent: 1 + - uid: 6 + components: + - type: Transform + pos: -3.5,-0.5 + parent: 1 +- proto: BarSignMaidCafe + entities: + - uid: 7 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-3.5 + parent: 1 +- proto: BlastDoor + entities: + - uid: 8 + components: + - type: Transform + pos: -0.5,-0.5 + parent: 1 + - type: DeviceLinkSink + links: + - 161 +- proto: Bucket + entities: + - uid: 9 + components: + - type: Transform + pos: 0.32937366,-3.3336349 + parent: 1 +- proto: ButchCleaver + entities: + - uid: 11 + components: + - type: Transform + parent: 10 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: CableApcExtension + entities: + - uid: 41 + components: + - type: Transform + pos: 2.5,-3.5 + parent: 1 + - uid: 42 + components: + - type: Transform + pos: 2.5,-1.5 + parent: 1 + - uid: 43 + components: + - type: Transform + pos: 2.5,-0.5 + parent: 1 + - uid: 44 + components: + - type: Transform + pos: 2.5,0.5 + parent: 1 + - uid: 45 + components: + - type: Transform + pos: 1.5,0.5 + parent: 1 + - uid: 46 + components: + - type: Transform + pos: 0.5,0.5 + parent: 1 + - uid: 47 + components: + - type: Transform + pos: -0.5,0.5 + parent: 1 + - uid: 48 + components: + - type: Transform + pos: 2.5,-2.5 + parent: 1 + - uid: 49 + components: + - type: Transform + pos: 2.5,-4.5 + parent: 1 + - uid: 50 + components: + - type: Transform + pos: 2.5,-5.5 + parent: 1 + - uid: 51 + components: + - type: Transform + pos: 2.5,-6.5 + parent: 1 + - uid: 52 + components: + - type: Transform + pos: 1.5,-6.5 + parent: 1 + - uid: 53 + components: + - type: Transform + pos: 0.5,-6.5 + parent: 1 + - uid: 54 + components: + - type: Transform + pos: 1.5,-7.5 + parent: 1 + - uid: 55 + components: + - type: Transform + pos: -0.5,-0.5 + parent: 1 + - uid: 56 + components: + - type: Transform + pos: -0.5,-1.5 + parent: 1 + - uid: 57 + components: + - type: Transform + pos: 3.5,-3.5 + parent: 1 + - uid: 58 + components: + - type: Transform + pos: 4.5,-3.5 + parent: 1 + - uid: 59 + components: + - type: Transform + pos: 5.5,-3.5 + parent: 1 + - uid: 60 + components: + - type: Transform + pos: -0.5,-7.5 + parent: 1 + - uid: 61 + components: + - type: Transform + pos: 3.5,-7.5 + parent: 1 + - uid: 62 + components: + - type: Transform + pos: 0.5,-7.5 + parent: 1 + - uid: 63 + components: + - type: Transform + pos: 2.5,-7.5 + parent: 1 + - uid: 64 + components: + - type: Transform + pos: -1.5,-0.5 + parent: 1 +- proto: CableHV + entities: + - uid: 65 + components: + - type: Transform + pos: 3.5,-0.5 + parent: 1 + - uid: 66 + components: + - type: Transform + pos: 3.5,0.5 + parent: 1 +- proto: CableMV + entities: + - uid: 67 + components: + - type: Transform + pos: 2.5,-1.5 + parent: 1 + - uid: 68 + components: + - type: Transform + pos: 3.5,-1.5 + parent: 1 + - uid: 69 + components: + - type: Transform + pos: 3.5,-0.5 + parent: 1 +- proto: ChairPilotSeat + entities: + - uid: 70 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-0.5 + parent: 1 +- proto: ClosetMaintenance + entities: + - uid: 71 + components: + - type: Transform + pos: 0.5,0.5 + parent: 1 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.14786 + moles: + - 1.8856695 + - 7.0937095 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 80 + - 76 + - 73 + - 74 + - 78 + - 81 + - 77 + - 72 + - 75 + - 79 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null +- proto: ClothingHeadHatCasa + entities: + - uid: 72 + components: + - type: Transform + parent: 71 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: ClothingHeadHelmetHardsuitBasic + entities: + - uid: 82 + components: + - type: Transform + pos: 0.30235916,-0.6487955 + parent: 1 +- proto: ClothingOuterDameDane + entities: + - uid: 79 + components: + - type: Transform + parent: 71 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: ClothingOuterDogi + entities: + - uid: 73 + components: + - type: Transform + parent: 71 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: ClothingOuterHardsuitAncientEVA + entities: + - uid: 74 + components: + - type: Transform + parent: 71 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: ClothingShoesDameDane + entities: + - uid: 75 + components: + - type: Transform + parent: 71 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: ClothingUniformJumpsuitDameDane + entities: + - uid: 76 + components: + - type: Transform + parent: 71 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: ClothingUniformJumpsuitFamilyGuy + entities: + - uid: 83 + components: + - type: Transform + pos: 4.1954827,-4.679846 + parent: 1 +- proto: ClothingUniformJumpsuitKimono + entities: + - uid: 77 + components: + - type: Transform + parent: 71 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: ComputerShuttle + entities: + - uid: 84 + components: + - type: Transform + pos: 1.5,0.5 + parent: 1 +- proto: CrateFreezer + entities: + - uid: 10 + components: + - type: Transform + pos: 5.5,-5.5 + parent: 1 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.14783 + 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: + - 11 + - 29 + - 24 + - 13 + - 25 + - 37 + - 33 + - 32 + - 38 + - 16 + - 15 + - 19 + - 17 + - 18 + - 20 + - 40 + - 14 + - 22 + - 30 + - 21 + - 34 + - 23 + - 35 + - 28 + - 36 + - 27 + - 39 + - 31 + - 26 + - 12 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null +- proto: DrinkCanPack + entities: + - uid: 85 + components: + - type: Transform + pos: 2.4942255,-4.6459746 + parent: 1 +- proto: DrinkGlass + entities: + - uid: 86 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.9675496,-6.258177 + parent: 1 + - uid: 87 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.9050496,-6.383177 + parent: 1 + - uid: 88 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.8425496,-6.086302 + parent: 1 +- proto: EggySeeds + entities: + - uid: 89 + components: + - type: Transform + pos: 4.8663497,-4.2508607 + parent: 1 +- proto: ExtendedEmergencyOxygenTankFilled + entities: + - uid: 78 + components: + - type: Transform + parent: 71 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: FolderSpawner + entities: + - uid: 90 + components: + - type: Transform + pos: 2.6497245,-0.5822141 + parent: 1 +- proto: FoodBowlBig + entities: + - uid: 12 + components: + - type: Transform + parent: 10 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 13 + components: + - type: Transform + parent: 10 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: FoodBreadMoldySlice + entities: + - uid: 91 + components: + - type: Transform + pos: 4.5392327,-5.695471 + parent: 1 +- proto: FoodBreadTofu + entities: + - uid: 92 + components: + - type: Transform + pos: -0.56204444,-5.412466 + parent: 1 +- proto: FoodButter + entities: + - uid: 14 + components: + - type: Transform + parent: 10 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: FoodEgg + entities: + - uid: 15 + components: + - type: Transform + parent: 10 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 16 + components: + - type: Transform + parent: 10 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 17 + components: + - type: Transform + parent: 10 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 18 + components: + - type: Transform + parent: 10 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 19 + components: + - type: Transform + parent: 10 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 20 + components: + - type: Transform + parent: 10 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: FoodMealSashimi + entities: + - uid: 93 + components: + - type: Transform + pos: 2.532601,-3.619526 + parent: 1 + - uid: 94 + components: + - type: Transform + pos: 2.5117679,-3.192443 + parent: 1 +- proto: FoodMeat + entities: + - uid: 21 + components: + - type: Transform + parent: 10 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 22 + components: + - type: Transform + parent: 10 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: FoodMeatBear + entities: + - uid: 23 + components: + - type: Transform + parent: 10 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 24 + components: + - type: Transform + parent: 10 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: FoodMeatBearCooked + entities: + - uid: 25 + components: + - type: Transform + parent: 10 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: FoodMeatClown + entities: + - uid: 26 + components: + - type: Transform + parent: 10 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: FoodMeatCorgi + entities: + - uid: 27 + components: + - type: Transform + parent: 10 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: FoodMeatDragon + entities: + - uid: 96 + components: + - type: Transform + parent: 95 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 97 + components: + - type: Transform + parent: 95 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 98 + components: + - type: Transform + parent: 95 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: FoodMeatFish + entities: + - uid: 112 + components: + - type: Transform + pos: 2.3519397,-4.0480876 + parent: 1 + - uid: 113 + components: + - type: Transform + pos: 2.5602732,-4.4543376 + parent: 1 +- proto: FoodMeatGoliath + entities: + - uid: 28 + components: + - type: Transform + parent: 10 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 29 + components: + - type: Transform + parent: 10 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: FoodMeatHuman + entities: + - uid: 30 + components: + - type: Transform + parent: 10 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: FoodMeatLizard + entities: + - uid: 31 + components: + - type: Transform + parent: 10 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: FoodMeatPlant + entities: + - uid: 32 + components: + - type: Transform + parent: 10 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: FoodMeatRat + entities: + - uid: 33 + components: + - type: Transform + parent: 10 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: FoodMeatRouny + entities: + - uid: 34 + components: + - type: Transform + parent: 10 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 35 + components: + - type: Transform + parent: 10 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: FoodMeatSnake + entities: + - uid: 36 + components: + - type: Transform + parent: 10 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 37 + components: + - type: Transform + parent: 10 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: FoodMeatSpider + entities: + - uid: 38 + components: + - type: Transform + parent: 10 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: FoodNoodlesButter + entities: + - uid: 99 + components: + - type: Transform + parent: 95 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 100 + components: + - type: Transform + parent: 95 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: FoodNoodlesChowmein + entities: + - uid: 101 + components: + - type: Transform + parent: 95 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: FoodNoodlesMeatball + entities: + - uid: 102 + components: + - type: Transform + parent: 95 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: FoodRiceBoiled + entities: + - uid: 103 + components: + - type: Transform + parent: 95 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 104 + components: + - type: Transform + parent: 95 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 105 + components: + - type: Transform + parent: 95 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 114 + components: + - type: Transform + pos: 4.2319775,-4.0944357 + parent: 1 +- proto: FoodRiceEgg + entities: + - uid: 106 + components: + - type: Transform + parent: 95 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 107 + components: + - type: Transform + parent: 95 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: FoodRiceGumbo + entities: + - uid: 108 + components: + - type: Transform + parent: 95 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: FoodRicePork + entities: + - uid: 109 + components: + - type: Transform + parent: 95 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 110 + components: + - type: Transform + parent: 95 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: FoodRicePudding + entities: + - uid: 111 + components: + - type: Transform + parent: 95 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: FoodTofu + entities: + - uid: 115 + components: + - type: Transform + pos: -2.4682944,-0.4437158 + parent: 1 +- proto: GeneratorWallmountAPU + entities: + - uid: 116 + components: + - type: Transform + pos: 3.5,0.5 + parent: 1 + - type: PowerSupplier + supplyRampRate: 1000 + supplyRampTolerance: 1000 + supplyRate: 16000 +- proto: GravityGeneratorMini + entities: + - uid: 117 + components: + - type: Transform + pos: 5.5,-3.5 + parent: 1 +- proto: Grille + entities: + - uid: 118 + components: + - type: Transform + pos: 1.5,1.5 + parent: 1 + - uid: 119 + components: + - type: Transform + pos: 0.5,1.5 + parent: 1 + - uid: 120 + components: + - type: Transform + pos: 2.5,1.5 + parent: 1 + - uid: 121 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,0.5 + parent: 1 + - uid: 122 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,0.5 + parent: 1 +- proto: Gyroscope + entities: + - uid: 123 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,-3.5 + parent: 1 +- proto: HospitalCurtains + entities: + - uid: 124 + components: + - type: Transform + pos: 3.5,-5.5 + parent: 1 +- proto: HospitalCurtainsOpen + entities: + - uid: 125 + components: + - type: Transform + pos: 1.5,-1.5 + parent: 1 +- proto: hydroponicsSoil + entities: + - uid: 126 + components: + - type: Transform + pos: 5.5,-4.5 + parent: 1 +- proto: HydroponicsToolClippers + entities: + - uid: 127 + components: + - type: Transform + pos: 4.6706424,-4.7269287 + parent: 1 +- proto: HydroponicsToolMiniHoe + entities: + - uid: 128 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.0306153,-4.877862 + parent: 1 +- proto: KitchenElectricGrill + entities: + - uid: 129 + components: + - type: Transform + pos: 0.5,-6.5 + parent: 1 +- proto: KitchenKnife + entities: + - uid: 80 + components: + - type: Transform + parent: 71 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: KitchenMicrowave + entities: + - uid: 130 + components: + - type: Transform + pos: 2.5,-2.5 + parent: 1 +- proto: KitchenReagentGrinder + entities: + - uid: 131 + components: + - type: Transform + pos: 1.5,-6.5 + parent: 1 +- proto: LockerFreezerBase + entities: + - uid: 95 + components: + - type: Transform + pos: 0.5,-2.5 + parent: 1 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.14798 + 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: + - 110 + - 109 + - 103 + - 104 + - 105 + - 96 + - 98 + - 97 + - 99 + - 101 + - 100 + - 106 + - 102 + - 108 + - 107 + - 111 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null +- proto: MaterialSheetMeat + entities: + - uid: 39 + components: + - type: Transform + parent: 10 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: Mattress + entities: + - uid: 132 + components: + - type: Transform + pos: 4.5,-4.5 + parent: 1 +- proto: NitrogenTankFilled + entities: + - uid: 81 + components: + - type: Transform + parent: 71 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: NoticeBoard + entities: + - uid: 133 + components: + - type: Transform + pos: -1.5,-2.5 + parent: 1 +- proto: Pen + entities: + - uid: 232 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.27949,-0.47790605 + parent: 1 +- proto: PlushieVox + entities: + - uid: 134 + components: + - type: Transform + pos: -0.5571752,-4.2839594 + parent: 1 +- proto: PosterLegitFruitBowl + entities: + - uid: 135 + components: + - type: Transform + pos: -2.5,-2.5 + parent: 1 +- proto: PottedPlantRandom + entities: + - uid: 136 + components: + - type: Transform + pos: -2.5,-3.5 + parent: 1 + - uid: 137 + components: + - type: Transform + pos: -2.5,-5.5 + parent: 1 +- proto: Poweredlight + entities: + - uid: 138 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-5.5 + parent: 1 + - uid: 139 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-4.5 + parent: 1 + - uid: 140 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-0.5 + parent: 1 +- proto: PoweredSmallLight + entities: + - uid: 141 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-0.5 + parent: 1 + - uid: 142 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,-4.5 + parent: 1 + - uid: 143 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-6.5 + parent: 1 +- proto: RagItem + entities: + - uid: 144 + components: + - type: Transform + pos: -0.47175223,-3.4022202 + parent: 1 +- proto: RandomSpawner100 + entities: + - uid: 145 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-4.5 + parent: 1 +- proto: ReagentContainerFlour + entities: + - uid: 40 + components: + - type: Transform + parent: 10 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: RiceSeeds + entities: + - uid: 146 + components: + - type: Transform + pos: 4.716352,-4.1569357 + parent: 1 +- proto: RubberStampTrader + entities: + - uid: 147 + components: + - type: Transform + pos: 2.6184745,-0.09783912 + parent: 1 +- proto: Shovel + entities: + - uid: 148 + components: + - type: Transform + pos: 5.0644813,-4.460167 + parent: 1 +- proto: ShuttersWindowOpen + entities: + - uid: 149 + components: + - type: Transform + pos: -0.5,-4.5 + parent: 1 + - type: DeviceLinkSink + links: + - 160 + - uid: 150 + components: + - type: Transform + pos: -0.5,-3.5 + parent: 1 + - type: DeviceLinkSink + links: + - 160 + - uid: 151 + components: + - type: Transform + pos: -0.5,-5.5 + parent: 1 + - type: DeviceLinkSink + links: + - 160 + - uid: 152 + components: + - type: Transform + pos: -3.5,-4.5 + parent: 1 + - type: DeviceLinkSink + links: + - 160 +- proto: ShuttleWindow + entities: + - uid: 153 + components: + - type: Transform + pos: 1.5,1.5 + parent: 1 + - uid: 154 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,1.5 + parent: 1 + - uid: 155 + components: + - type: Transform + pos: -2.5,-6.5 + parent: 1 + - uid: 156 + components: + - type: Transform + pos: -1.5,-6.5 + parent: 1 + - uid: 157 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,0.5 + parent: 1 + - uid: 158 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,0.5 + parent: 1 + - uid: 159 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,1.5 + parent: 1 +- proto: SignalButton + entities: + - uid: 160 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,-1.5 + parent: 1 + - type: DeviceLinkSource + linkedPorts: + 150: + - Pressed: Toggle + 149: + - Pressed: Toggle + 151: + - Pressed: Toggle + 152: + - Pressed: Toggle + - uid: 161 + components: + - type: Transform + pos: 1.5,0.5 + parent: 1 + - type: DeviceLinkSource + linkedPorts: + 8: + - Pressed: Toggle +- proto: SignDoors + entities: + - uid: 162 + components: + - type: Transform + pos: -0.5,0.5 + parent: 1 +- proto: SinkStemlessWater + entities: + - uid: 163 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-6.5 + parent: 1 +- proto: soda_dispenser + entities: + - uid: 164 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-6.5 + parent: 1 +- proto: StoolBar + entities: + - uid: 165 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-3.5 + parent: 1 + - uid: 166 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-4.5 + parent: 1 + - uid: 167 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-5.5 + parent: 1 +- proto: SubstationWallBasic + entities: + - uid: 168 + components: + - type: Transform + pos: 3.5,-0.5 + parent: 1 +- proto: Table + entities: + - uid: 169 + components: + - type: Transform + pos: 2.5,-6.5 + parent: 1 + - uid: 170 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-6.5 + parent: 1 + - uid: 171 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-6.5 + parent: 1 +- proto: TableGlass + entities: + - uid: 172 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-4.5 + parent: 1 + - uid: 173 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-3.5 + parent: 1 + - uid: 174 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-2.5 + parent: 1 +- proto: TableStone + entities: + - uid: 175 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-4.5 + parent: 1 + - uid: 176 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-3.5 + parent: 1 + - uid: 177 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-5.5 + parent: 1 +- proto: TableWood + entities: + - uid: 178 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-0.5 + parent: 1 +- proto: Thruster + entities: + - uid: 179 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-8.5 + parent: 1 + - uid: 180 + components: + - type: Transform + pos: 4.5,-1.5 + parent: 1 + - uid: 181 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-8.5 + parent: 1 + - uid: 182 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,-7.5 + parent: 1 + - uid: 183 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-8.5 + parent: 1 + - uid: 184 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-7.5 + parent: 1 +- proto: ToolboxMechanicalFilled + entities: + - uid: 185 + components: + - type: Transform + pos: 0.5731925,-0.16962886 + parent: 1 +- proto: TravelingChefSpawner + entities: + - uid: 186 + components: + - type: Transform + pos: 1.5,-0.5 + parent: 1 + - uid: 187 + components: + - type: Transform + pos: 4.5,-5.5 + parent: 1 +- proto: VendingMachineChang + entities: + - uid: 188 + components: + - type: Transform + pos: 2.5,0.5 + parent: 1 +- proto: WallShuttle + entities: + - uid: 189 + components: + - type: Transform + pos: -1.5,-1.5 + parent: 1 + - uid: 190 + components: + - type: Transform + pos: -0.5,-7.5 + parent: 1 + - uid: 191 + components: + - type: Transform + pos: 3.5,-0.5 + parent: 1 + - uid: 192 + components: + - type: Transform + pos: 3.5,0.5 + parent: 1 + - uid: 193 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-1.5 + parent: 1 + - uid: 194 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-1.5 + parent: 1 + - uid: 195 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-2.5 + parent: 1 + - uid: 196 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-3.5 + parent: 1 + - uid: 197 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-4.5 + parent: 1 + - uid: 198 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-7.5 + parent: 1 + - uid: 199 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-7.5 + parent: 1 + - uid: 200 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,-7.5 + parent: 1 + - uid: 201 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-6.5 + parent: 1 + - uid: 202 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-2.5 + parent: 1 + - uid: 203 + components: + - type: Transform + pos: 2.5,-1.5 + parent: 1 + - uid: 204 + components: + - type: Transform + pos: 0.5,-1.5 + parent: 1 + - uid: 205 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-2.5 + parent: 1 + - uid: 206 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-2.5 + parent: 1 + - uid: 207 + components: + - type: Transform + pos: -3.5,-3.5 + parent: 1 + - uid: 208 + components: + - type: Transform + pos: -3.5,-5.5 + parent: 1 + - uid: 209 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,-2.5 + parent: 1 + - uid: 210 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,0.5 + parent: 1 + - uid: 211 + components: + - type: Transform + pos: 4.5,-2.5 + parent: 1 + - uid: 212 + components: + - type: Transform + pos: 4.5,-6.5 + parent: 1 + - uid: 213 + components: + - type: Transform + pos: 5.5,-6.5 + parent: 1 + - uid: 214 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,-3.5 + parent: 1 + - uid: 215 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,-4.5 + parent: 1 + - uid: 216 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,-5.5 + parent: 1 + - uid: 217 + components: + - type: Transform + pos: 3.5,-6.5 + parent: 1 + - uid: 218 + components: + - type: Transform + pos: 3.5,-7.5 + parent: 1 + - uid: 219 + components: + - type: Transform + pos: -2.5,-1.5 + parent: 1 +- proto: WallShuttleDiagonal + entities: + - uid: 220 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-8.5 + parent: 1 + - uid: 221 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,1.5 + parent: 1 + - uid: 222 + components: + - type: Transform + pos: -0.5,1.5 + parent: 1 + - uid: 223 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-6.5 + parent: 1 + - uid: 224 + components: + - type: Transform + pos: -3.5,-2.5 + parent: 1 + - uid: 225 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-8.5 + parent: 1 + - uid: 226 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,-2.5 + parent: 1 + - uid: 227 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,-6.5 + parent: 1 + - uid: 228 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-1.5 + parent: 1 + - uid: 229 + components: + - type: Transform + pos: -3.5,0.5 + parent: 1 + - uid: 230 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-8.5 + parent: 1 + - uid: 231 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,-8.5 + parent: 1 +... diff --git a/Resources/Maps/Shuttles/emergency_neol.yml b/Resources/Maps/Shuttles/emergency_neol.yml new file mode 100644 index 00000000000..e5c359a4f51 --- /dev/null +++ b/Resources/Maps/Shuttles/emergency_neol.yml @@ -0,0 +1,6758 @@ +meta: + format: 6 + postmapinit: false +tilemap: + 0: Space + 31: FloorDarkMini + 34: FloorDarkPavement + 48: FloorGrassLight + 72: FloorReinforced + 84: FloorSteel + 89: FloorSteelDirty + 91: FloorSteelMini + 96: FloorTechMaint + 97: FloorTechMaint2 + 104: FloorWhiteMini + 110: FloorWood + 112: Lattice + 113: Plating +entities: +- proto: "" + entities: + - uid: 1 + components: + - name: NT-LMEST-T14 "Neol" + type: MetaData + - pos: -0.5124855,0.9164498 + parent: invalid + type: Transform + - chunks: + 0,0: + ind: 0,0 + tiles: HwAAAAAAHwAAAAAAWwAAAAAAHwAAAAAAHwAAAAAAHwAAAAAAWwAAAAAAWwAAAAAAWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAAAHwAAAAAAHwAAAAAAHwAAAAAAHwAAAAAAHwAAAAAAWwAAAAAAHwAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbgAAAAAAcQAAAAAAbgAAAAAAcQAAAAAAcQAAAAAAHwAAAAAAWwAAAAAAWwAAAAAAWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbgAAAAAAbgAAAAAAbgAAAAAAcQAAAAAAHwAAAAAAWwAAAAAAHwAAAAAAcQAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbgAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAHwAAAAAAWwAAAAAAHwAAAAAAcQAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbgAAAAAAbgAAAAAAbgAAAAAAcQAAAAAAHwAAAAAAWwAAAAAAHwAAAAAAcQAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAHwAAAAAAWwAAAAAAHwAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbgAAAAAAbgAAAAAAbgAAAAAAcQAAAAAAIgAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbgAAAAAAbgAAAAAAIgAAAAAAIgAAAAAAIgAAAAAAIgAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIgAAAAAAIgAAAAAAIgAAAAAAIgAAAAAAIgAAAAAAIgAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAIgAAAAAAcQAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIgAAAAAAIgAAAAAAIgAAAAAAIgAAAAAAIgAAAAAAcQAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIgAAAAAAIgAAAAAAIgAAAAAAIgAAAAAAIgAAAAAAcQAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIgAAAAAAIgAAAAAAIgAAAAAAIgAAAAAAcQAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + -1,0: + ind: -1,0 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWwAAAAAAWwAAAAAAWwAAAAAAHwAAAAAAHwAAAAAAHwAAAAAAWwAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAHwAAAAAAWwAAAAAAHwAAAAAAHwAAAAAAHwAAAAAAHwAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWwAAAAAAWwAAAAAAWwAAAAAAHwAAAAAAcQAAAAAAcQAAAAAAbgAAAAAAbgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcQAAAAAAHwAAAAAAWwAAAAAAHwAAAAAAcQAAAAAAbgAAAAAAbgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcQAAAAAAHwAAAAAAWwAAAAAAHwAAAAAAcQAAAAAAbgAAAAAAbgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcQAAAAAAHwAAAAAAWwAAAAAAHwAAAAAAcQAAAAAAbgAAAAAAbgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAHwAAAAAAWwAAAAAAHwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAIgAAAAAAcQAAAAAAbgAAAAAAbgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAIgAAAAAAIgAAAAAAIgAAAAAAIgAAAAAAbgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAIgAAAAAAIgAAAAAAIgAAAAAAIgAAAAAAIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAIgAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcQAAAAAAIgAAAAAAIgAAAAAAIgAAAAAAIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcQAAAAAAIgAAAAAAIgAAAAAAIgAAAAAAIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAIgAAAAAAIgAAAAAAIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 0,-1: + ind: 0,-1 + tiles: cQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAASAAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAASAAAAAAASAAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAYQAAAAAAcQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAcQAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAAAWwAAAAAAcQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAcQAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWwAAAAAAWwAAAAAAcQAAAAAAaAAAAAAAaAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWwAAAAAAHwAAAAAAcQAAAAAAaAAAAAAAaAAAAAAAcQAAAAAAHwAAAAAAHwAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWwAAAAAAWwAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAcQAAAAAAWwAAAAAAWwAAAAAAWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWwAAAAAAHwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAWwAAAAAAVAAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWwAAAAAAHwAAAAAAHwAAAAAAHwAAAAAAHwAAAAAAHwAAAAAAWwAAAAAAWwAAAAAAWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAAAHwAAAAAAWwAAAAAAHwAAAAAAHwAAAAAAHwAAAAAAWwAAAAAAHwAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAMAAAAAAAWwAAAAAAHwAAAAAAMAAAAAAAHwAAAAAAWwAAAAAAHwAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAMAAAAAAAWwAAAAAAHwAAAAAAMAAAAAAAHwAAAAAAWwAAAAAAHwAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAMAAAAAAAWwAAAAAAHwAAAAAAMAAAAAAAHwAAAAAAWwAAAAAAHwAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAMAAAAAAAWwAAAAAAHwAAAAAAMAAAAAAAHwAAAAAAWwAAAAAAHwAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + -1,-1: + ind: -1,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAYAAAAAAAYAAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAYAAAAAAAYAAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcQAAAAAAWQAAAAAAWQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcQAAAAAAWQAAAAAAVAAAAAAAHwAAAAAAHwAAAAAAcQAAAAAAWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAHwAAAAAAcQAAAAAAWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAHwAAAAAAHwAAAAAAHwAAAAAAHwAAAAAAHwAAAAAAcQAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAAAHwAAAAAAHwAAAAAAHwAAAAAAHwAAAAAAHwAAAAAAHwAAAAAAWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWwAAAAAAWwAAAAAAWwAAAAAAHwAAAAAAHwAAAAAAHwAAAAAAHwAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAHwAAAAAAWwAAAAAAHwAAAAAAHwAAAAAAHwAAAAAAWwAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAHwAAAAAAWwAAAAAAHwAAAAAAMAAAAAAAHwAAAAAAWwAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAHwAAAAAAWwAAAAAAHwAAAAAAMAAAAAAAHwAAAAAAWwAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAHwAAAAAAWwAAAAAAHwAAAAAAMAAAAAAAHwAAAAAAWwAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAHwAAAAAAWwAAAAAAHwAAAAAAMAAAAAAAHwAAAAAAWwAAAAAAMAAAAAAA + version: 6 + -1,-2: + ind: -1,-2 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAA + version: 6 + 0,-2: + ind: 0,-2 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + type: MapGrid + - type: Broadphase + - bodyStatus: InAir + angularDamping: 0.05 + linearDamping: 0.05 + fixedRotation: False + bodyType: Dynamic + type: Physics + - fixtures: {} + type: Fixtures + - type: OccluderTree + - type: SpreaderGrid + - type: Shuttle + - type: GridPathfinding + - gravityShakeSound: !type:SoundPathSpecifier + path: /Audio/Effects/alert.ogg + type: Gravity + - chunkCollection: + version: 2 + nodes: + - node: + angle: -1.5707963267948966 rad + color: '#FFFFFFFF' + id: Arrows + decals: + 180: -7,2 + 181: -7,0 + 182: -7,-6 + 183: -7,-8 + - node: + angle: 1.5707963267948966 rad + color: '#FFFFFFFF' + id: Arrows + decals: + 174: 7,-6 + 176: 7,-8 + 177: 7,0 + 178: 7,2 + - node: + angle: 1.5707963267948966 rad + color: '#FF0000FF' + id: ArrowsGreyscale + decals: + 185: 7,-6 + 186: 7,-8 + 187: 7,0 + 188: 7,2 + - node: + angle: 4.71238898038469 rad + color: '#FF0000FF' + id: ArrowsGreyscale + decals: + 184: -7,-6 + 189: -7,0 + 190: -7,2 + 191: -7,-8 + - node: + color: '#FFFFFFFF' + id: ArrowsGreyscale + decals: + 179: -4,1 + 202: 4,1 + 203: 4,-5 + 204: -4,-5 + - node: + angle: 3.141592653589793 rad + color: '#FFFFFFFF' + id: ArrowsGreyscale + decals: + 200: -4,0 + 201: 4,0 + 205: -4,-6 + 206: 4,-6 + - node: + color: '#FFFFFFFF' + id: Basalt4 + decals: + 23: -1,-1 + - node: + color: '#FFFFFFFF' + id: Basalt5 + decals: + 24: 4,-3 + - node: + color: '#FFFFFFFF' + id: Basalt7 + decals: + 20: -4,-4 + - node: + color: '#FFFFFFFF' + id: Basalt8 + decals: + 21: -4,-1 + 22: -1,-3 + - node: + color: '#FFFFFFFF' + id: BotLeft + decals: + 134: -7,-1 + 135: -7,-2 + 136: -7,-3 + 137: -7,-4 + - node: + color: '#FFFFFFFF' + id: BotLeftGreyscale + decals: + 142: -7,-4 + 143: -7,-4 + 144: -7,-4 + 145: -7,-4 + 146: -7,-3 + 147: -7,-3 + 148: -7,-3 + 149: -7,-2 + 150: -7,-2 + 151: -7,-2 + 152: -7,-1 + 153: -7,-1 + 154: -7,-1 + 159: -3,-1 + 160: -3,-2 + 161: -3,-3 + 162: -3,-4 + 167: 5,-1 + 168: 5,-2 + 169: 5,-3 + 170: 5,-4 + - node: + color: '#FFFFFFFF' + id: BotRight + decals: + 138: 7,-1 + 139: 7,-2 + 140: 7,-3 + 141: 7,-4 + - node: + color: '#FFFFFFFF' + id: BotRightGreyscale + decals: + 155: -5,-4 + 156: -5,-3 + 157: -5,-2 + 158: -5,-1 + 163: 3,-4 + 164: 3,-3 + 165: 3,-2 + 166: 3,-1 + 171: 7,-4 + 172: 7,-3 + 173: 7,-2 + 175: 7,-1 + - node: + color: '#334E6DFF' + id: BoxGreyscale + decals: + 313: 4,-9 + - node: + color: '#334E6DC8' + id: BrickTileWhiteLineE + decals: + 240: 1,11 + 241: 1,12 + 242: 1,13 + 249: 0,11 + 250: 0,12 + 251: 0,13 + - node: + color: '#334E6DC8' + id: BrickTileWhiteLineW + decals: + 243: -1,11 + 244: -1,12 + 245: -1,13 + 246: 0,11 + 247: 0,12 + 248: 0,13 + - node: + color: '#FFFFFFFF' + id: Bushf1 + decals: + 0: -1,-4 + 1: 1,-3 + 2: -1,-3 + 3: 0,-1 + 4: 4,-1 + - node: + color: '#FFFFFFFF' + id: Bushf2 + decals: + 5: 1,-4 + 6: -1,-2 + 7: 0,-1 + 8: -4,-4 + 9: -4,-3 + 10: -4,-1 + - node: + color: '#FFFFFFFF' + id: Bushf3 + decals: + 11: -4,-2 + 12: -4,-3 + 13: 0,-4 + 14: -1,-3 + 15: 1,-3 + 16: 0,-1 + 17: 4,-2 + 18: 4,-4 + 19: 4,-3 + - node: + color: '#EFB3413E' + id: CheckerNWSE + decals: + 291: -1,-12 + 292: -1,-13 + 293: -1,-14 + 294: -1,-15 + 295: 0,-15 + 296: 0,-14 + 297: 0,-13 + 298: 1,-13 + 299: 1,-14 + 300: 1,-15 + 301: 2,-15 + 302: 2,-14 + 303: 1,-12 + - node: + color: '#FFFFFFFF' + id: Delivery + decals: + 207: -1,-7 + 208: 0,-7 + 209: 1,-7 + - node: + color: '#FFFFFFFF' + id: Dirt + decals: + 258: -6,-11 + 259: -5,-12 + 260: -5,-13 + - node: + color: '#FFFFFFFF' + id: DirtHeavy + decals: + 252: -5,-12 + 253: -6,-12 + 254: -6,-12 + 255: -6,-11 + 256: -5,-13 + 257: -5,-11 + - node: + color: '#FFFFFFFF' + id: Flowersy1 + decals: + 25: 1,-4 + - node: + color: '#FFFFFFFF' + id: Flowersy2 + decals: + 26: -1,-3 + 29: -4,-3 + - node: + color: '#FFFFFFFF' + id: Flowersy3 + decals: + 30: -1,-4 + 31: 4,-4 + - node: + color: '#FFFFFFFF' + id: Flowersy4 + decals: + 27: 1,-1 + 28: 4,-2 + - node: + color: '#DE3A3A96' + id: MiniTileCheckerAOverlay + decals: + 261: -3,-11 + 262: -3,-10 + 263: -3,-9 + 264: -3,-8 + 265: -2,-8 + 266: -4,-9 + 267: -4,-8 + 268: -5,-8 + 269: -5,-9 + 270: -6,-9 + 271: -6,-8 + 272: -7,-8 + 273: -7,-9 + 274: -8,-8 + 275: -4,-11 + - node: + color: '#52B4E996' + id: MiniTileCheckerBOverlay + decals: + 276: 2,-8 + 277: 3,-8 + 278: 4,-8 + 279: 4,-9 + 280: 3,-9 + 281: 3,-10 + 282: 4,-10 + 283: 4,-11 + 284: 3,-11 + 285: 3,-12 + 286: 4,-12 + - node: + color: '#9FED5896' + id: MiniTileCheckerBOverlay + decals: + 287: 6,-11 + 288: 5,-11 + 289: 5,-12 + 290: 6,-12 + - node: + color: '#919191FF' + id: MiniTileWhiteCornerNe + decals: + 41: -7,-1 + 64: -1,-6 + 82: 5,-6 + 89: 5,0 + 90: 5,2 + 97: -3,0 + 100: 1,0 + - node: + color: '#919191FF' + id: MiniTileWhiteCornerNw + decals: + 55: -5,2 + 57: -5,0 + 62: -5,-6 + 65: 1,-6 + 98: 3,0 + 99: -1,0 + 121: 7,-1 + - node: + color: '#919191FF' + id: MiniTileWhiteCornerSe + decals: + 45: -7,-5 + 47: -6,3 + 83: 5,-5 + 88: 5,1 + 109: -3,-5 + 110: 1,-5 + 112: -1,-7 + - node: + color: '#919191FF' + id: MiniTileWhiteCornerSw + decals: + 56: -5,1 + 63: -5,-5 + 107: 3,-5 + 108: -1,-5 + 113: 1,-7 + 122: 7,-5 + 126: 6,3 + - node: + color: '#919191FF' + id: MiniTileWhiteEndE + decals: + 46: -7,1 + 114: -1,-9 + - node: + color: '#919191FF' + id: MiniTileWhiteEndN + decals: + 116: 0,-11 + - node: + color: '#919191FF' + id: MiniTileWhiteEndW + decals: + 86: 7,-7 + 87: 7,1 + 115: 1,-9 + - node: + color: '#919191FF' + id: MiniTileWhiteLineE + decals: + 42: -7,-2 + 43: -7,-3 + 44: -7,-4 + 48: -6,4 + 49: -6,5 + 50: -6,6 + 66: -3,-1 + 67: -3,-2 + 68: -3,-3 + 69: -3,-4 + 117: 5,-4 + 118: 5,-3 + 119: 5,-2 + 120: 5,-1 + 130: 4,6 + 131: 4,5 + 132: 4,4 + 133: 4,3 + - node: + color: '#919191FF' + id: MiniTileWhiteLineN + decals: + 74: -4,-6 + 75: -3,-6 + 76: -2,-6 + 79: 4,-6 + 80: 3,-6 + 81: 2,-6 + 84: 7,-9 + 85: 6,-9 + 91: 4,0 + 92: -4,0 + 101: 0,0 + - node: + color: '#919191FF' + id: MiniTileWhiteLineS + decals: + 77: -4,-5 + 78: 4,-5 + 93: -4,1 + 94: -3,1 + 95: 4,1 + 96: 3,1 + 102: -2,1 + 103: -1,1 + 104: 0,1 + 105: 1,1 + 106: 2,1 + 111: 0,-5 + - node: + color: '#919191FF' + id: MiniTileWhiteLineW + decals: + 51: -4,6 + 52: -4,5 + 53: -4,4 + 54: -4,3 + 58: -5,-1 + 59: -5,-2 + 60: -5,-3 + 61: -5,-4 + 70: 3,-1 + 71: 3,-2 + 72: 3,-3 + 73: 3,-4 + 123: 7,-4 + 124: 7,-3 + 125: 7,-2 + 127: 6,4 + 128: 6,5 + 129: 6,6 + - node: + color: '#334E6DC8' + id: PavementCheckerBOverlay + decals: + 210: -4,8 + 211: -5,8 + 212: -5,9 + 213: -4,9 + 214: 5,8 + 215: 4,8 + 216: 4,9 + 217: 5,9 + 218: -3,8 + 219: -3,9 + 220: 3,8 + 221: 3,9 + - node: + color: '#334E6DC8' + id: PavementOverlay + decals: + 222: -4,10 + 223: -4,11 + 224: -4,12 + 225: -3,12 + 226: -3,11 + 227: -2,11 + 228: -2,12 + 229: -2,13 + 230: -3,13 + 231: 2,11 + 232: 2,12 + 233: 2,13 + 234: 3,13 + 235: 3,12 + 236: 3,11 + 237: 4,11 + 238: 4,12 + 239: 4,10 + - node: + color: '#D4D4D4FF' + id: WarnLineE + decals: + 311: 2,-14 + 312: 2,-15 + - node: + color: '#52B4E9FF' + id: WarnLineGreyscaleE + decals: + 305: 1,-8 + - node: + color: '#334E6DFF' + id: WarnLineGreyscaleN + decals: + 308: 4,6 + 309: -4,6 + - node: + color: '#D4D4D4DE' + id: WarnLineGreyscaleN + decals: + 310: 2,1 + - node: + color: '#EFB341FF' + id: WarnLineGreyscaleS + decals: + 306: -1,-11 + 307: 1,-11 + - node: + color: '#DE3A3AFF' + id: WarnLineGreyscaleW + decals: + 304: -1,-8 + - node: + color: '#FFFFFFFF' + id: WarnLineN + decals: + 196: -4,-6 + 197: 4,-6 + 198: 4,0 + 199: -4,0 + - node: + color: '#FFFFFFFF' + id: WarnLineW + decals: + 192: -4,-5 + 193: 4,-5 + 194: 4,1 + 195: -4,1 + - node: + color: '#FFFFFFFF' + id: WoodTrimThinCornerSe + decals: + 33: -2,8 + - node: + color: '#FFFFFFFF' + id: WoodTrimThinCornerSw + decals: + 32: 2,8 + - node: + color: '#FFFFFFFF' + id: WoodTrimThinInnerSe + decals: + 35: -2,9 + 40: -3,8 + - node: + color: '#FFFFFFFF' + id: WoodTrimThinInnerSw + decals: + 34: 2,9 + 39: 3,8 + - node: + color: '#FFFFFFFF' + id: WoodTrimThinLineS + decals: + 36: -1,9 + 37: 0,9 + 38: 1,9 + type: DecalGrid + - version: 2 + data: + tiles: + 0,0: + 0: 65535 + -2,0: + 0: 65535 + -1,0: + 0: 65535 + 0,1: + 0: 65535 + 0,2: + 0: 65535 + 0,3: + 0: 4095 + 1,0: + 0: 65535 + 1,1: + 0: 65535 + 1,2: + 0: 30583 + 1,3: + 0: 311 + 2,0: + 0: 4369 + 2,1: + 0: 17 + -2,1: + 0: 61183 + -2,2: + 0: 52428 + -2,3: + 0: 140 + -1,1: + 0: 65535 + -1,2: + 0: 65535 + -1,3: + 0: 4095 + 0,-4: + 0: 65535 + 0,-3: + 0: 65535 + 0,-2: + 0: 65535 + 0,-1: + 0: 65535 + 1,-4: + 0: 65395 + 1,-3: + 0: 65535 + 1,-2: + 0: 65535 + 1,-1: + 0: 65535 + 2,-4: + 0: 4096 + 2,-3: + 0: 4369 + 2,-2: + 0: 4369 + 2,-1: + 0: 4369 + -2,-4: + 0: 65224 + -2,-3: + 0: 65535 + -2,-2: + 0: 65535 + -2,-1: + 0: 65535 + -1,-4: + 0: 65535 + -1,-3: + 0: 65535 + -1,-2: + 0: 65535 + -1,-1: + 0: 65535 + -1,-5: + 0: 28672 + 0,-5: + 0: 53248 + 1,-5: + 0: 4096 + uniqueMixes: + - volume: 2500 + temperature: 293.15 + moles: + - 21.824879 + - 82.10312 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + chunkSize: 4 + type: GridAtmosphere + - type: GasTileOverlay + - type: RadiationGridResistance +- proto: AirCanister + entities: + - uid: 2 + components: + - pos: 2.5,-14.5 + parent: 1 + type: Transform +- proto: AirlockBarGlassLocked + entities: + - uid: 3 + components: + - pos: 2.5,2.5 + parent: 1 + type: Transform +- proto: AirlockBarLocked + entities: + - uid: 4 + components: + - rot: 3.141592653589793 rad + pos: 1.5,5.5 + parent: 1 + type: Transform +- proto: AirlockBrigGlassLocked + entities: + - uid: 5 + components: + - rot: 3.141592653589793 rad + pos: -3.5,-10.5 + parent: 1 + type: Transform +- proto: AirlockCommandGlassLocked + entities: + - uid: 6 + components: + - pos: -3.5,7.5 + parent: 1 + type: Transform + - links: + - 778 + type: DeviceLinkSink + - uid: 7 + components: + - pos: 4.5,7.5 + parent: 1 + type: Transform + - links: + - 778 + type: DeviceLinkSink + - uid: 8 + components: + - rot: 3.141592653589793 rad + pos: -3.5,10.5 + parent: 1 + type: Transform + - links: + - 780 + type: DeviceLinkSink + - uid: 9 + components: + - rot: 3.141592653589793 rad + pos: 4.5,10.5 + parent: 1 + type: Transform + - links: + - 780 + type: DeviceLinkSink +- proto: AirlockEngineeringLocked + entities: + - uid: 10 + components: + - pos: 1.5,-11.5 + parent: 1 + type: Transform + - uid: 11 + components: + - pos: -0.5,-11.5 + parent: 1 + type: Transform +- proto: AirlockExternalGlassShuttleEmergencyLocked + entities: + - uid: 12 + components: + - rot: 1.5707963267948966 rad + pos: 8.5,2.5 + parent: 1 + type: Transform + - uid: 13 + components: + - rot: -1.5707963267948966 rad + pos: -7.5,-5.5 + parent: 1 + type: Transform + - uid: 14 + components: + - rot: -1.5707963267948966 rad + pos: -7.5,2.5 + parent: 1 + type: Transform + - uid: 15 + components: + - rot: -1.5707963267948966 rad + pos: -7.5,0.5 + parent: 1 + type: Transform + - uid: 16 + components: + - rot: -1.5707963267948966 rad + pos: -7.5,-7.5 + parent: 1 + type: Transform + - uid: 17 + components: + - rot: 1.5707963267948966 rad + pos: 8.5,0.5 + parent: 1 + type: Transform + - uid: 18 + components: + - rot: 1.5707963267948966 rad + pos: 8.5,-5.5 + parent: 1 + type: Transform + - uid: 19 + components: + - rot: 1.5707963267948966 rad + pos: 8.5,-7.5 + parent: 1 + type: Transform +- proto: AirlockMedicalGlassLocked + entities: + - uid: 20 + components: + - pos: 2.5,-7.5 + parent: 1 + type: Transform +- proto: AirlockSecurityGlassLocked + entities: + - uid: 21 + components: + - pos: -1.5,-7.5 + parent: 1 + type: Transform +- proto: APCHyperCapacity + entities: + - uid: 22 + components: + - pos: -4.5,-6.5 + parent: 1 + type: Transform + - uid: 23 + components: + - pos: 4.5,-6.5 + parent: 1 + type: Transform + - uid: 24 + components: + - pos: 1.5,2.5 + parent: 1 + type: Transform + - uid: 25 + components: + - pos: 3.5,10.5 + parent: 1 + type: Transform + - uid: 26 + components: + - pos: -3.5,-13.5 + parent: 1 + type: Transform + - uid: 27 + components: + - pos: 0.5,-0.5 + parent: 1 + type: Transform +- proto: AtmosDeviceFanTiny + entities: + - uid: 28 + components: + - rot: 1.5707963267948966 rad + pos: -7.5,-7.5 + parent: 1 + type: Transform + - uid: 29 + components: + - rot: 1.5707963267948966 rad + pos: -7.5,-5.5 + parent: 1 + type: Transform + - uid: 30 + components: + - rot: 1.5707963267948966 rad + pos: -7.5,0.5 + parent: 1 + type: Transform + - uid: 31 + components: + - rot: 1.5707963267948966 rad + pos: -7.5,2.5 + parent: 1 + type: Transform + - uid: 32 + components: + - rot: 1.5707963267948966 rad + pos: 8.5,2.5 + parent: 1 + type: Transform + - uid: 33 + components: + - rot: 1.5707963267948966 rad + pos: 8.5,0.5 + parent: 1 + type: Transform + - uid: 34 + components: + - rot: 1.5707963267948966 rad + pos: 8.5,-5.5 + parent: 1 + type: Transform + - uid: 35 + components: + - rot: 1.5707963267948966 rad + pos: 8.5,-7.5 + parent: 1 + type: Transform +- proto: Bed + entities: + - uid: 36 + components: + - pos: 6.5,-11.5 + parent: 1 + type: Transform + - uid: 37 + components: + - pos: -5.5,-11.5 + parent: 1 + type: Transform + - uid: 38 + components: + - pos: 4.5,-7.5 + parent: 1 + type: Transform + - uid: 39 + components: + - pos: 4.5,-9.5 + parent: 1 + type: Transform +- proto: BedsheetBrown + entities: + - uid: 40 + components: + - rot: 3.141592653589793 rad + pos: -5.5,-11.5 + parent: 1 + type: Transform +- proto: BedsheetGreen + entities: + - uid: 41 + components: + - rot: -1.5707963267948966 rad + pos: 6.5,-11.5 + parent: 1 + type: Transform +- proto: BedsheetMedical + entities: + - uid: 42 + components: + - rot: 3.141592653589793 rad + pos: 4.5,-7.5 + parent: 1 + type: Transform + - uid: 43 + components: + - rot: 3.141592653589793 rad + pos: 4.5,-9.5 + parent: 1 + type: Transform +- proto: BlastDoorOpen + entities: + - uid: 44 + components: + - rot: 1.5707963267948966 rad + pos: -0.5,10.5 + parent: 1 + type: Transform + - links: + - 780 + type: DeviceLinkSink + - uid: 45 + components: + - rot: 1.5707963267948966 rad + pos: 0.5,10.5 + parent: 1 + type: Transform + - links: + - 780 + type: DeviceLinkSink + - uid: 46 + components: + - rot: 1.5707963267948966 rad + pos: 1.5,10.5 + parent: 1 + type: Transform + - links: + - 780 + type: DeviceLinkSink +- proto: BoozeDispenser + entities: + - uid: 47 + components: + - pos: -1.5,5.5 + parent: 1 + type: Transform +- proto: CableApcExtension + entities: + - uid: 48 + components: + - pos: 1.5,0.5 + parent: 1 + type: Transform + - uid: 49 + components: + - pos: -3.5,-13.5 + parent: 1 + type: Transform + - uid: 50 + components: + - pos: -2.5,-13.5 + parent: 1 + type: Transform + - uid: 51 + components: + - pos: -1.5,-13.5 + parent: 1 + type: Transform + - uid: 52 + components: + - pos: -0.5,-13.5 + parent: 1 + type: Transform + - uid: 53 + components: + - pos: 0.5,-13.5 + parent: 1 + type: Transform + - uid: 54 + components: + - pos: 1.5,-13.5 + parent: 1 + type: Transform + - uid: 55 + components: + - pos: 2.5,-13.5 + parent: 1 + type: Transform + - uid: 56 + components: + - pos: 3.5,-13.5 + parent: 1 + type: Transform + - uid: 57 + components: + - pos: 4.5,-13.5 + parent: 1 + type: Transform + - uid: 58 + components: + - pos: -0.5,-14.5 + parent: 1 + type: Transform + - uid: 59 + components: + - pos: -0.5,-15.5 + parent: 1 + type: Transform + - uid: 60 + components: + - pos: 0.5,-15.5 + parent: 1 + type: Transform + - uid: 61 + components: + - pos: 1.5,-15.5 + parent: 1 + type: Transform + - uid: 62 + components: + - pos: 1.5,-14.5 + parent: 1 + type: Transform + - uid: 63 + components: + - pos: 3.5,-14.5 + parent: 1 + type: Transform + - uid: 64 + components: + - pos: -2.5,-14.5 + parent: 1 + type: Transform + - uid: 65 + components: + - pos: -4.5,-12.5 + parent: 1 + type: Transform + - uid: 66 + components: + - pos: -4.5,-11.5 + parent: 1 + type: Transform + - uid: 67 + components: + - pos: -5.5,-9.5 + parent: 1 + type: Transform + - uid: 68 + components: + - pos: -5.5,-10.5 + parent: 1 + type: Transform + - uid: 69 + components: + - pos: -5.5,-11.5 + parent: 1 + type: Transform + - uid: 70 + components: + - pos: -5.5,-8.5 + parent: 1 + type: Transform + - uid: 71 + components: + - pos: -5.5,-7.5 + parent: 1 + type: Transform + - uid: 72 + components: + - pos: -6.5,-7.5 + parent: 1 + type: Transform + - uid: 73 + components: + - pos: -4.5,-7.5 + parent: 1 + type: Transform + - uid: 74 + components: + - pos: -4.5,-6.5 + parent: 1 + type: Transform + - uid: 75 + components: + - pos: -3.5,-7.5 + parent: 1 + type: Transform + - uid: 76 + components: + - pos: -3.5,-8.5 + parent: 1 + type: Transform + - uid: 77 + components: + - pos: -2.5,-7.5 + parent: 1 + type: Transform + - uid: 78 + components: + - pos: 4.5,-6.5 + parent: 1 + type: Transform + - uid: 79 + components: + - pos: 4.5,-7.5 + parent: 1 + type: Transform + - uid: 80 + components: + - pos: 4.5,-8.5 + parent: 1 + type: Transform + - uid: 81 + components: + - pos: 4.5,-9.5 + parent: 1 + type: Transform + - uid: 82 + components: + - pos: 4.5,-10.5 + parent: 1 + type: Transform + - uid: 83 + components: + - pos: 4.5,-11.5 + parent: 1 + type: Transform + - uid: 84 + components: + - pos: 5.5,-11.5 + parent: 1 + type: Transform + - uid: 85 + components: + - pos: 6.5,-11.5 + parent: 1 + type: Transform + - uid: 86 + components: + - pos: 6.5,-10.5 + parent: 1 + type: Transform + - uid: 87 + components: + - pos: 0.5,-0.5 + parent: 1 + type: Transform + - uid: 88 + components: + - pos: 0.5,0.5 + parent: 1 + type: Transform + - uid: 89 + components: + - pos: 2.5,0.5 + parent: 1 + type: Transform + - uid: 90 + components: + - pos: 2.5,-0.5 + parent: 1 + type: Transform + - uid: 91 + components: + - pos: 2.5,-1.5 + parent: 1 + type: Transform + - uid: 92 + components: + - pos: 2.5,-2.5 + parent: 1 + type: Transform + - uid: 93 + components: + - pos: 2.5,-3.5 + parent: 1 + type: Transform + - uid: 94 + components: + - pos: 2.5,-4.5 + parent: 1 + type: Transform + - uid: 95 + components: + - pos: 2.5,-5.5 + parent: 1 + type: Transform + - uid: 96 + components: + - pos: -1.5,-5.5 + parent: 1 + type: Transform + - uid: 97 + components: + - pos: -1.5,-4.5 + parent: 1 + type: Transform + - uid: 98 + components: + - pos: -1.5,-3.5 + parent: 1 + type: Transform + - uid: 99 + components: + - pos: -1.5,-2.5 + parent: 1 + type: Transform + - uid: 100 + components: + - pos: -1.5,-1.5 + parent: 1 + type: Transform + - uid: 101 + components: + - pos: -2.5,-5.5 + parent: 1 + type: Transform + - uid: 102 + components: + - pos: -1.5,-0.5 + parent: 1 + type: Transform + - uid: 103 + components: + - pos: -1.5,0.5 + parent: 1 + type: Transform + - uid: 104 + components: + - pos: -0.5,0.5 + parent: 1 + type: Transform + - uid: 105 + components: + - pos: -3.5,-5.5 + parent: 1 + type: Transform + - uid: 106 + components: + - pos: -6.5,-2.5 + parent: 1 + type: Transform + - uid: 107 + components: + - pos: -6.5,-3.5 + parent: 1 + type: Transform + - uid: 108 + components: + - pos: -6.5,-5.5 + parent: 1 + type: Transform + - uid: 109 + components: + - pos: -6.5,-4.5 + parent: 1 + type: Transform + - uid: 110 + components: + - pos: -3.5,-4.5 + parent: 1 + type: Transform + - uid: 111 + components: + - pos: -4.5,-4.5 + parent: 1 + type: Transform + - uid: 112 + components: + - pos: -5.5,-4.5 + parent: 1 + type: Transform + - uid: 113 + components: + - pos: -6.5,-1.5 + parent: 1 + type: Transform + - uid: 114 + components: + - pos: -6.5,-0.5 + parent: 1 + type: Transform + - uid: 115 + components: + - pos: -6.5,0.5 + parent: 1 + type: Transform + - uid: 116 + components: + - pos: -6.5,1.5 + parent: 1 + type: Transform + - uid: 117 + components: + - pos: -6.5,2.5 + parent: 1 + type: Transform + - uid: 118 + components: + - pos: -5.5,2.5 + parent: 1 + type: Transform + - uid: 119 + components: + - pos: -5.5,3.5 + parent: 1 + type: Transform + - uid: 120 + components: + - pos: -5.5,4.5 + parent: 1 + type: Transform + - uid: 121 + components: + - pos: -5.5,5.5 + parent: 1 + type: Transform + - uid: 122 + components: + - pos: -5.5,6.5 + parent: 1 + type: Transform + - uid: 123 + components: + - pos: -4.5,6.5 + parent: 1 + type: Transform + - uid: 124 + components: + - pos: -3.5,6.5 + parent: 1 + type: Transform + - uid: 125 + components: + - pos: -3.5,5.5 + parent: 1 + type: Transform + - uid: 126 + components: + - pos: -3.5,4.5 + parent: 1 + type: Transform + - uid: 127 + components: + - pos: -3.5,3.5 + parent: 1 + type: Transform + - uid: 128 + components: + - pos: -2.5,0.5 + parent: 1 + type: Transform + - uid: 129 + components: + - pos: -3.5,0.5 + parent: 1 + type: Transform + - uid: 130 + components: + - pos: -3.5,1.5 + parent: 1 + type: Transform + - uid: 131 + components: + - pos: 4.5,1.5 + parent: 1 + type: Transform + - uid: 132 + components: + - pos: 4.5,0.5 + parent: 1 + type: Transform + - uid: 133 + components: + - pos: 3.5,0.5 + parent: 1 + type: Transform + - uid: 134 + components: + - pos: 4.5,3.5 + parent: 1 + type: Transform + - uid: 135 + components: + - pos: 4.5,4.5 + parent: 1 + type: Transform + - uid: 136 + components: + - pos: 4.5,5.5 + parent: 1 + type: Transform + - uid: 137 + components: + - pos: 4.5,6.5 + parent: 1 + type: Transform + - uid: 138 + components: + - pos: 5.5,6.5 + parent: 1 + type: Transform + - uid: 139 + components: + - pos: 6.5,6.5 + parent: 1 + type: Transform + - uid: 140 + components: + - pos: 6.5,5.5 + parent: 1 + type: Transform + - uid: 141 + components: + - pos: 6.5,4.5 + parent: 1 + type: Transform + - uid: 142 + components: + - pos: 6.5,3.5 + parent: 1 + type: Transform + - uid: 143 + components: + - pos: 6.5,2.5 + parent: 1 + type: Transform + - uid: 144 + components: + - pos: 7.5,2.5 + parent: 1 + type: Transform + - uid: 145 + components: + - pos: 7.5,0.5 + parent: 1 + type: Transform + - uid: 146 + components: + - pos: 7.5,1.5 + parent: 1 + type: Transform + - uid: 147 + components: + - pos: 7.5,-0.5 + parent: 1 + type: Transform + - uid: 148 + components: + - pos: 7.5,-1.5 + parent: 1 + type: Transform + - uid: 149 + components: + - pos: 7.5,-2.5 + parent: 1 + type: Transform + - uid: 150 + components: + - pos: 7.5,-3.5 + parent: 1 + type: Transform + - uid: 151 + components: + - pos: 7.5,-4.5 + parent: 1 + type: Transform + - uid: 152 + components: + - pos: 7.5,-5.5 + parent: 1 + type: Transform + - uid: 153 + components: + - pos: 7.5,-6.5 + parent: 1 + type: Transform + - uid: 154 + components: + - pos: 7.5,-7.5 + parent: 1 + type: Transform + - uid: 155 + components: + - pos: 7.5,-8.5 + parent: 1 + type: Transform + - uid: 156 + components: + - pos: 6.5,-8.5 + parent: 1 + type: Transform + - uid: 157 + components: + - pos: 1.5,-5.5 + parent: 1 + type: Transform + - uid: 158 + components: + - pos: 0.5,-5.5 + parent: 1 + type: Transform + - uid: 159 + components: + - pos: 5.5,-5.5 + parent: 1 + type: Transform + - uid: 160 + components: + - pos: 6.5,-5.5 + parent: 1 + type: Transform + - uid: 161 + components: + - pos: 5.5,-4.5 + parent: 1 + type: Transform + - uid: 162 + components: + - pos: 4.5,-4.5 + parent: 1 + type: Transform + - uid: 163 + components: + - pos: 3.5,-4.5 + parent: 1 + type: Transform + - uid: 164 + components: + - pos: -0.5,-5.5 + parent: 1 + type: Transform + - uid: 165 + components: + - pos: 0.5,-6.5 + parent: 1 + type: Transform + - uid: 166 + components: + - pos: 0.5,-7.5 + parent: 1 + type: Transform + - uid: 167 + components: + - pos: 0.5,-8.5 + parent: 1 + type: Transform + - uid: 168 + components: + - pos: 0.5,-9.5 + parent: 1 + type: Transform + - uid: 169 + components: + - pos: 0.5,-10.5 + parent: 1 + type: Transform + - uid: 170 + components: + - pos: 1.5,2.5 + parent: 1 + type: Transform + - uid: 171 + components: + - pos: 2.5,3.5 + parent: 1 + type: Transform + - uid: 172 + components: + - pos: 1.5,3.5 + parent: 1 + type: Transform + - uid: 173 + components: + - pos: 0.5,3.5 + parent: 1 + type: Transform + - uid: 174 + components: + - pos: -0.5,3.5 + parent: 1 + type: Transform + - uid: 175 + components: + - pos: -1.5,3.5 + parent: 1 + type: Transform + - uid: 176 + components: + - pos: -1.5,4.5 + parent: 1 + type: Transform + - uid: 177 + components: + - pos: -1.5,5.5 + parent: 1 + type: Transform + - uid: 178 + components: + - pos: -0.5,5.5 + parent: 1 + type: Transform + - uid: 179 + components: + - pos: 0.5,5.5 + parent: 1 + type: Transform + - uid: 180 + components: + - pos: 1.5,5.5 + parent: 1 + type: Transform + - uid: 181 + components: + - pos: 2.5,5.5 + parent: 1 + type: Transform + - uid: 182 + components: + - pos: 3.5,10.5 + parent: 1 + type: Transform + - uid: 183 + components: + - pos: 3.5,9.5 + parent: 1 + type: Transform + - uid: 184 + components: + - pos: 3.5,8.5 + parent: 1 + type: Transform + - uid: 185 + components: + - pos: 2.5,8.5 + parent: 1 + type: Transform + - uid: 186 + components: + - pos: 1.5,8.5 + parent: 1 + type: Transform + - uid: 187 + components: + - pos: 0.5,8.5 + parent: 1 + type: Transform + - uid: 188 + components: + - pos: -0.5,8.5 + parent: 1 + type: Transform + - uid: 189 + components: + - pos: -1.5,8.5 + parent: 1 + type: Transform + - uid: 190 + components: + - pos: -2.5,8.5 + parent: 1 + type: Transform + - uid: 191 + components: + - pos: -3.5,8.5 + parent: 1 + type: Transform + - uid: 192 + components: + - pos: -3.5,9.5 + parent: 1 + type: Transform + - uid: 193 + components: + - pos: -3.5,10.5 + parent: 1 + type: Transform + - uid: 194 + components: + - pos: -3.5,11.5 + parent: 1 + type: Transform + - uid: 195 + components: + - pos: -3.5,12.5 + parent: 1 + type: Transform + - uid: 196 + components: + - pos: -2.5,12.5 + parent: 1 + type: Transform + - uid: 197 + components: + - pos: -1.5,12.5 + parent: 1 + type: Transform + - uid: 198 + components: + - pos: -0.5,12.5 + parent: 1 + type: Transform + - uid: 199 + components: + - pos: 0.5,12.5 + parent: 1 + type: Transform + - uid: 200 + components: + - pos: 1.5,12.5 + parent: 1 + type: Transform + - uid: 201 + components: + - pos: 2.5,12.5 + parent: 1 + type: Transform + - uid: 202 + components: + - pos: 3.5,12.5 + parent: 1 + type: Transform + - uid: 203 + components: + - pos: 3.5,11.5 + parent: 1 + type: Transform +- proto: CableHV + entities: + - uid: 204 + components: + - pos: -2.5,-12.5 + parent: 1 + type: Transform + - uid: 205 + components: + - pos: -2.5,-13.5 + parent: 1 + type: Transform + - uid: 206 + components: + - pos: -0.5,-11.5 + parent: 1 + type: Transform + - uid: 207 + components: + - pos: 2.5,-12.5 + parent: 1 + type: Transform + - uid: 208 + components: + - pos: 2.5,-13.5 + parent: 1 + type: Transform + - uid: 209 + components: + - pos: 2.5,-14.5 + parent: 1 + type: Transform + - uid: 210 + components: + - pos: 2.5,-15.5 + parent: 1 + type: Transform + - uid: 211 + components: + - pos: -2.5,-14.5 + parent: 1 + type: Transform + - uid: 212 + components: + - pos: 2.5,-12.5 + parent: 1 + type: Transform + - uid: 213 + components: + - pos: 1.5,-12.5 + parent: 1 + type: Transform + - uid: 214 + components: + - pos: 0.5,-12.5 + parent: 1 + type: Transform + - uid: 215 + components: + - pos: -0.5,-12.5 + parent: 1 + type: Transform + - uid: 216 + components: + - pos: -1.5,-11.5 + parent: 1 + type: Transform + - uid: 217 + components: + - pos: -1.5,-12.5 + parent: 1 + type: Transform + - uid: 218 + components: + - pos: -1.5,-13.5 + parent: 1 + type: Transform + - uid: 219 + components: + - pos: -0.5,-10.5 + parent: 1 + type: Transform + - uid: 220 + components: + - pos: -0.5,-9.5 + parent: 1 + type: Transform + - uid: 221 + components: + - pos: -0.5,-8.5 + parent: 1 + type: Transform + - uid: 222 + components: + - pos: -0.5,-7.5 + parent: 1 + type: Transform + - uid: 223 + components: + - pos: -0.5,-6.5 + parent: 1 + type: Transform + - uid: 224 + components: + - pos: -2.5,10.5 + parent: 1 + type: Transform + - uid: 225 + components: + - pos: -3.5,10.5 + parent: 1 + type: Transform + - uid: 226 + components: + - pos: -3.5,9.5 + parent: 1 + type: Transform + - uid: 227 + components: + - pos: -3.5,8.5 + parent: 1 + type: Transform + - uid: 228 + components: + - pos: -3.5,7.5 + parent: 1 + type: Transform + - uid: 229 + components: + - pos: -3.5,6.5 + parent: 1 + type: Transform + - uid: 230 + components: + - pos: -3.5,5.5 + parent: 1 + type: Transform + - uid: 231 + components: + - pos: -4.5,5.5 + parent: 1 + type: Transform + - uid: 232 + components: + - pos: -4.5,4.5 + parent: 1 + type: Transform + - uid: 233 + components: + - pos: -4.5,3.5 + parent: 1 + type: Transform + - uid: 234 + components: + - pos: -4.5,2.5 + parent: 1 + type: Transform + - uid: 235 + components: + - pos: -4.5,1.5 + parent: 1 + type: Transform + - uid: 236 + components: + - pos: -4.5,0.5 + parent: 1 + type: Transform + - uid: 237 + components: + - pos: -4.5,-0.5 + parent: 1 + type: Transform + - uid: 238 + components: + - pos: -4.5,-1.5 + parent: 1 + type: Transform + - uid: 239 + components: + - pos: -4.5,-2.5 + parent: 1 + type: Transform + - uid: 240 + components: + - pos: -4.5,-3.5 + parent: 1 + type: Transform + - uid: 241 + components: + - pos: -4.5,-4.5 + parent: 1 + type: Transform + - uid: 242 + components: + - pos: -4.5,-5.5 + parent: 1 + type: Transform + - uid: 243 + components: + - pos: -3.5,-5.5 + parent: 1 + type: Transform + - uid: 244 + components: + - pos: -2.5,-5.5 + parent: 1 + type: Transform + - uid: 245 + components: + - pos: -1.5,-5.5 + parent: 1 + type: Transform + - uid: 246 + components: + - pos: -0.5,-5.5 + parent: 1 + type: Transform + - uid: 247 + components: + - pos: -3.5,11.5 + parent: 1 + type: Transform + - uid: 248 + components: + - pos: -3.5,12.5 + parent: 1 + type: Transform + - uid: 249 + components: + - pos: -4.5,12.5 + parent: 1 + type: Transform + - uid: 250 + components: + - pos: -4.5,13.5 + parent: 1 + type: Transform + - uid: 251 + components: + - pos: -3.5,13.5 + parent: 1 + type: Transform + - uid: 252 + components: + - pos: -3.5,14.5 + parent: 1 + type: Transform + - uid: 253 + components: + - pos: -2.5,14.5 + parent: 1 + type: Transform + - uid: 254 + components: + - pos: -1.5,14.5 + parent: 1 + type: Transform + - uid: 255 + components: + - pos: -0.5,14.5 + parent: 1 + type: Transform + - uid: 256 + components: + - pos: 0.5,14.5 + parent: 1 + type: Transform + - uid: 257 + components: + - pos: 1.5,14.5 + parent: 1 + type: Transform + - uid: 258 + components: + - pos: 2.5,14.5 + parent: 1 + type: Transform + - uid: 259 + components: + - pos: 3.5,14.5 + parent: 1 + type: Transform + - uid: 260 + components: + - pos: 4.5,14.5 + parent: 1 + type: Transform + - uid: 261 + components: + - pos: 4.5,13.5 + parent: 1 + type: Transform + - uid: 262 + components: + - pos: 5.5,13.5 + parent: 1 + type: Transform + - uid: 263 + components: + - pos: 5.5,12.5 + parent: 1 + type: Transform + - uid: 264 + components: + - pos: 4.5,12.5 + parent: 1 + type: Transform + - uid: 265 + components: + - pos: 2.5,10.5 + parent: 1 + type: Transform + - uid: 266 + components: + - pos: 2.5,11.5 + parent: 1 + type: Transform + - uid: 267 + components: + - pos: 3.5,11.5 + parent: 1 + type: Transform + - uid: 268 + components: + - pos: 4.5,11.5 + parent: 1 + type: Transform + - uid: 269 + components: + - pos: 4.5,10.5 + parent: 1 + type: Transform + - uid: 270 + components: + - pos: 4.5,9.5 + parent: 1 + type: Transform + - uid: 271 + components: + - pos: 4.5,8.5 + parent: 1 + type: Transform + - uid: 272 + components: + - pos: 3.5,8.5 + parent: 1 + type: Transform + - uid: 273 + components: + - pos: 2.5,8.5 + parent: 1 + type: Transform + - uid: 274 + components: + - pos: 1.5,8.5 + parent: 1 + type: Transform + - uid: 275 + components: + - pos: 0.5,8.5 + parent: 1 + type: Transform + - uid: 276 + components: + - pos: -0.5,8.5 + parent: 1 + type: Transform + - uid: 277 + components: + - pos: -1.5,8.5 + parent: 1 + type: Transform + - uid: 278 + components: + - pos: -2.5,8.5 + parent: 1 + type: Transform + - uid: 279 + components: + - pos: 4.5,-0.5 + parent: 1 + type: Transform + - uid: 280 + components: + - pos: 4.5,0.5 + parent: 1 + type: Transform + - uid: 281 + components: + - pos: 3.5,0.5 + parent: 1 + type: Transform + - uid: 282 + components: + - pos: 2.5,0.5 + parent: 1 + type: Transform + - uid: 283 + components: + - pos: 1.5,0.5 + parent: 1 + type: Transform + - uid: 284 + components: + - pos: 0.5,0.5 + parent: 1 + type: Transform + - uid: 285 + components: + - pos: -0.5,0.5 + parent: 1 + type: Transform + - uid: 286 + components: + - pos: -1.5,0.5 + parent: 1 + type: Transform + - uid: 287 + components: + - pos: -2.5,0.5 + parent: 1 + type: Transform + - uid: 288 + components: + - pos: -3.5,0.5 + parent: 1 + type: Transform + - uid: 289 + components: + - pos: -3.5,-0.5 + parent: 1 + type: Transform +- proto: CableMV + entities: + - uid: 290 + components: + - pos: 2.5,-12.5 + parent: 1 + type: Transform + - uid: 291 + components: + - pos: 2.5,-13.5 + parent: 1 + type: Transform + - uid: 292 + components: + - pos: 1.5,-13.5 + parent: 1 + type: Transform + - uid: 293 + components: + - pos: 0.5,-13.5 + parent: 1 + type: Transform + - uid: 294 + components: + - pos: -0.5,-13.5 + parent: 1 + type: Transform + - uid: 295 + components: + - pos: -1.5,-13.5 + parent: 1 + type: Transform + - uid: 296 + components: + - pos: -2.5,-13.5 + parent: 1 + type: Transform + - uid: 297 + components: + - pos: -3.5,-13.5 + parent: 1 + type: Transform + - uid: 298 + components: + - pos: -0.5,-14.5 + parent: 1 + type: Transform + - uid: 299 + components: + - pos: -0.5,-15.5 + parent: 1 + type: Transform + - uid: 300 + components: + - pos: 0.5,-15.5 + parent: 1 + type: Transform + - uid: 301 + components: + - pos: 1.5,-15.5 + parent: 1 + type: Transform + - uid: 302 + components: + - pos: 1.5,-14.5 + parent: 1 + type: Transform + - uid: 303 + components: + - pos: -0.5,-12.5 + parent: 1 + type: Transform + - uid: 304 + components: + - pos: -0.5,-11.5 + parent: 1 + type: Transform + - uid: 305 + components: + - pos: -0.5,-9.5 + parent: 1 + type: Transform + - uid: 306 + components: + - pos: -0.5,-8.5 + parent: 1 + type: Transform + - uid: 307 + components: + - pos: -0.5,-7.5 + parent: 1 + type: Transform + - uid: 308 + components: + - pos: -1.5,-7.5 + parent: 1 + type: Transform + - uid: 309 + components: + - pos: -2.5,-7.5 + parent: 1 + type: Transform + - uid: 310 + components: + - pos: -3.5,-7.5 + parent: 1 + type: Transform + - uid: 311 + components: + - pos: -4.5,-7.5 + parent: 1 + type: Transform + - uid: 312 + components: + - pos: -4.5,-6.5 + parent: 1 + type: Transform + - uid: 313 + components: + - pos: -0.5,-10.5 + parent: 1 + type: Transform + - uid: 314 + components: + - pos: 1.5,-10.5 + parent: 1 + type: Transform + - uid: 315 + components: + - pos: 1.5,-11.5 + parent: 1 + type: Transform + - uid: 316 + components: + - pos: 1.5,-12.5 + parent: 1 + type: Transform + - uid: 317 + components: + - pos: 1.5,-7.5 + parent: 1 + type: Transform + - uid: 318 + components: + - pos: 1.5,-8.5 + parent: 1 + type: Transform + - uid: 319 + components: + - pos: 2.5,-7.5 + parent: 1 + type: Transform + - uid: 320 + components: + - pos: 3.5,-7.5 + parent: 1 + type: Transform + - uid: 321 + components: + - pos: 4.5,-7.5 + parent: 1 + type: Transform + - uid: 322 + components: + - pos: 4.5,-6.5 + parent: 1 + type: Transform + - uid: 323 + components: + - pos: 1.5,-9.5 + parent: 1 + type: Transform + - uid: 324 + components: + - pos: 1.5,-6.5 + parent: 1 + type: Transform + - uid: 325 + components: + - pos: 1.5,-5.5 + parent: 1 + type: Transform + - uid: 326 + components: + - pos: 2.5,-5.5 + parent: 1 + type: Transform + - uid: 327 + components: + - pos: 2.5,-4.5 + parent: 1 + type: Transform + - uid: 328 + components: + - pos: 2.5,-3.5 + parent: 1 + type: Transform + - uid: 329 + components: + - pos: 2.5,-2.5 + parent: 1 + type: Transform + - uid: 330 + components: + - pos: 2.5,-1.5 + parent: 1 + type: Transform + - uid: 331 + components: + - pos: 2.5,-0.5 + parent: 1 + type: Transform + - uid: 332 + components: + - pos: 2.5,0.5 + parent: 1 + type: Transform + - uid: 333 + components: + - pos: 1.5,0.5 + parent: 1 + type: Transform + - uid: 334 + components: + - pos: 0.5,0.5 + parent: 1 + type: Transform + - uid: 335 + components: + - pos: 0.5,-0.5 + parent: 1 + type: Transform + - uid: 336 + components: + - pos: -0.5,0.5 + parent: 1 + type: Transform + - uid: 337 + components: + - pos: -1.5,0.5 + parent: 1 + type: Transform + - uid: 338 + components: + - pos: -1.5,-0.5 + parent: 1 + type: Transform + - uid: 339 + components: + - pos: -1.5,-1.5 + parent: 1 + type: Transform + - uid: 340 + components: + - pos: -1.5,-2.5 + parent: 1 + type: Transform + - uid: 341 + components: + - pos: -1.5,-3.5 + parent: 1 + type: Transform + - uid: 342 + components: + - pos: -1.5,-4.5 + parent: 1 + type: Transform + - uid: 343 + components: + - pos: -1.5,-5.5 + parent: 1 + type: Transform + - uid: 344 + components: + - pos: -0.5,-5.5 + parent: 1 + type: Transform + - uid: 345 + components: + - pos: -0.5,-6.5 + parent: 1 + type: Transform + - uid: 346 + components: + - pos: 1.5,1.5 + parent: 1 + type: Transform + - uid: 347 + components: + - pos: 1.5,2.5 + parent: 1 + type: Transform + - uid: 348 + components: + - pos: -2.5,10.5 + parent: 1 + type: Transform + - uid: 349 + components: + - pos: -2.5,9.5 + parent: 1 + type: Transform + - uid: 350 + components: + - pos: -1.5,9.5 + parent: 1 + type: Transform + - uid: 351 + components: + - pos: -0.5,9.5 + parent: 1 + type: Transform + - uid: 352 + components: + - pos: 0.5,9.5 + parent: 1 + type: Transform + - uid: 353 + components: + - pos: 1.5,9.5 + parent: 1 + type: Transform + - uid: 354 + components: + - pos: 2.5,9.5 + parent: 1 + type: Transform + - uid: 355 + components: + - pos: 3.5,9.5 + parent: 1 + type: Transform + - uid: 356 + components: + - pos: 3.5,10.5 + parent: 1 + type: Transform + - uid: 357 + components: + - pos: 4.5,9.5 + parent: 1 + type: Transform + - uid: 358 + components: + - pos: 5.5,9.5 + parent: 1 + type: Transform + - uid: 359 + components: + - pos: 6.5,9.5 + parent: 1 + type: Transform + - uid: 360 + components: + - pos: 6.5,8.5 + parent: 1 + type: Transform + - uid: 361 + components: + - pos: -5.5,8.5 + parent: 1 + type: Transform + - uid: 362 + components: + - pos: -5.5,9.5 + parent: 1 + type: Transform + - uid: 363 + components: + - pos: -4.5,9.5 + parent: 1 + type: Transform + - uid: 364 + components: + - pos: -3.5,9.5 + parent: 1 + type: Transform + - uid: 365 + components: + - pos: -2.5,0.5 + parent: 1 + type: Transform + - uid: 366 + components: + - pos: -3.5,0.5 + parent: 1 + type: Transform + - uid: 367 + components: + - pos: -3.5,-0.5 + parent: 1 + type: Transform +- proto: CableTerminal + entities: + - uid: 368 + components: + - rot: 3.141592653589793 rad + pos: -1.5,-13.5 + parent: 1 + type: Transform +- proto: CandleBlueInfinite + entities: + - uid: 369 + components: + - pos: 0.40085018,8.408222 + parent: 1 + type: Transform +- proto: CandleGreenInfinite + entities: + - uid: 370 + components: + - pos: 0.57516325,8.27147 + parent: 1 + type: Transform +- proto: CandlePurpleInfinite + entities: + - uid: 371 + components: + - pos: 0.45705903,8.178229 + parent: 1 + type: Transform +- proto: CarpetBlue + entities: + - uid: 372 + components: + - rot: 1.5707963267948966 rad + pos: 0.5,5.5 + parent: 1 + type: Transform + - uid: 373 + components: + - rot: 1.5707963267948966 rad + pos: 0.5,4.5 + parent: 1 + type: Transform + - uid: 374 + components: + - rot: 1.5707963267948966 rad + pos: -0.5,4.5 + parent: 1 + type: Transform + - uid: 375 + components: + - rot: 1.5707963267948966 rad + pos: -1.5,4.5 + parent: 1 + type: Transform +- proto: Catwalk + entities: + - uid: 376 + components: + - pos: -1.5,-13.5 + parent: 1 + type: Transform + - uid: 377 + components: + - pos: -2.5,-13.5 + parent: 1 + type: Transform +- proto: Chair + entities: + - uid: 378 + components: + - rot: 1.5707963267948966 rad + pos: -1.5,3.5 + parent: 1 + type: Transform +- proto: ChairOfficeLight + entities: + - uid: 379 + components: + - rot: 3.141592653589793 rad + pos: 4.5,-11.5 + parent: 1 + type: Transform +- proto: ChairPilotSeat + entities: + - uid: 380 + components: + - rot: 3.141592653589793 rad + pos: 0.5,-14.5 + parent: 1 + type: Transform + - uid: 381 + components: + - rot: -1.5707963267948966 rad + pos: 6.5,4.5 + parent: 1 + type: Transform + - uid: 382 + components: + - rot: -1.5707963267948966 rad + pos: 6.5,5.5 + parent: 1 + type: Transform + - uid: 383 + components: + - rot: 3.141592653589793 rad + pos: -4.5,-8.5 + parent: 1 + type: Transform + - uid: 384 + components: + - rot: 3.141592653589793 rad + pos: -5.5,-8.5 + parent: 1 + type: Transform + - uid: 385 + components: + - rot: 3.141592653589793 rad + pos: -0.5,-14.5 + parent: 1 + type: Transform + - uid: 386 + components: + - rot: 3.141592653589793 rad + pos: 1.5,-14.5 + parent: 1 + type: Transform + - uid: 387 + components: + - rot: -1.5707963267948966 rad + pos: 3.5,-3.5 + parent: 1 + type: Transform + - uid: 388 + components: + - rot: 1.5707963267948966 rad + pos: -6.5,-1.5 + parent: 1 + type: Transform + - uid: 389 + components: + - rot: 1.5707963267948966 rad + pos: -6.5,-2.5 + parent: 1 + type: Transform + - uid: 390 + components: + - rot: 1.5707963267948966 rad + pos: -2.5,-3.5 + parent: 1 + type: Transform + - uid: 391 + components: + - rot: 1.5707963267948966 rad + pos: -2.5,-2.5 + parent: 1 + type: Transform + - uid: 392 + components: + - rot: 1.5707963267948966 rad + pos: -2.5,-1.5 + parent: 1 + type: Transform + - uid: 393 + components: + - rot: 1.5707963267948966 rad + pos: -2.5,-0.5 + parent: 1 + type: Transform + - uid: 394 + components: + - rot: -1.5707963267948966 rad + pos: 3.5,-0.5 + parent: 1 + type: Transform + - uid: 395 + components: + - rot: -1.5707963267948966 rad + pos: 3.5,-1.5 + parent: 1 + type: Transform + - uid: 396 + components: + - rot: -1.5707963267948966 rad + pos: 3.5,-2.5 + parent: 1 + type: Transform + - uid: 397 + components: + - rot: 1.5707963267948966 rad + pos: -6.5,-0.5 + parent: 1 + type: Transform + - uid: 398 + components: + - rot: 1.5707963267948966 rad + pos: -6.5,-3.5 + parent: 1 + type: Transform + - uid: 399 + components: + - rot: -1.5707963267948966 rad + pos: -4.5,-3.5 + parent: 1 + type: Transform + - uid: 400 + components: + - rot: -1.5707963267948966 rad + pos: -4.5,-2.5 + parent: 1 + type: Transform + - uid: 401 + components: + - rot: -1.5707963267948966 rad + pos: -4.5,-1.5 + parent: 1 + type: Transform + - uid: 402 + components: + - rot: -1.5707963267948966 rad + pos: -4.5,-0.5 + parent: 1 + type: Transform + - uid: 403 + components: + - rot: 1.5707963267948966 rad + pos: 5.5,-3.5 + parent: 1 + type: Transform + - uid: 404 + components: + - rot: 1.5707963267948966 rad + pos: 5.5,-2.5 + parent: 1 + type: Transform + - uid: 405 + components: + - rot: 1.5707963267948966 rad + pos: 5.5,-1.5 + parent: 1 + type: Transform + - uid: 406 + components: + - rot: 1.5707963267948966 rad + pos: 5.5,-0.5 + parent: 1 + type: Transform + - uid: 407 + components: + - rot: -1.5707963267948966 rad + pos: 7.5,-0.5 + parent: 1 + type: Transform + - uid: 408 + components: + - rot: -1.5707963267948966 rad + pos: 7.5,-1.5 + parent: 1 + type: Transform + - uid: 409 + components: + - rot: -1.5707963267948966 rad + pos: 7.5,-2.5 + parent: 1 + type: Transform + - uid: 410 + components: + - rot: -1.5707963267948966 rad + pos: 7.5,-3.5 + parent: 1 + type: Transform + - uid: 411 + components: + - rot: 1.5707963267948966 rad + pos: -5.5,5.5 + parent: 1 + type: Transform + - uid: 412 + components: + - rot: 1.5707963267948966 rad + pos: -5.5,4.5 + parent: 1 + type: Transform + - uid: 413 + components: + - rot: -1.5707963267948966 rad + pos: -2.5,12.5 + parent: 1 + type: Transform + - uid: 414 + components: + - rot: 3.141592653589793 rad + pos: 0.5,12.5 + parent: 1 + type: Transform + - uid: 415 + components: + - rot: 3.141592653589793 rad + pos: -1.5,12.5 + parent: 1 + type: Transform + - uid: 416 + components: + - rot: 3.141592653589793 rad + pos: 2.5,12.5 + parent: 1 + type: Transform + - uid: 417 + components: + - rot: 1.5707963267948966 rad + pos: 3.5,12.5 + parent: 1 + type: Transform +- proto: ClosetEmergencyFilledRandom + entities: + - uid: 418 + components: + - pos: -6.5,-4.5 + parent: 1 + type: Transform + - uid: 419 + components: + - pos: -5.5,6.5 + parent: 1 + type: Transform +- proto: ClosetFireFilled + entities: + - uid: 420 + components: + - pos: 7.5,-4.5 + parent: 1 + type: Transform + - uid: 421 + components: + - pos: 6.5,6.5 + parent: 1 + type: Transform +- proto: ClosetL3VirologyFilled + entities: + - uid: 422 + components: + - pos: 5.5,-11.5 + parent: 1 + type: Transform +- proto: ClosetWallEmergencyFilledRandom + entities: + - uid: 423 + components: + - rot: 3.141592653589793 rad + pos: 7.5,-9.5 + parent: 1 + type: Transform + - uid: 424 + components: + - pos: -2.5,2.5 + parent: 1 + type: Transform +- proto: ClosetWallFireFilledRandom + entities: + - uid: 425 + components: + - rot: 3.141592653589793 rad + pos: 6.5,-9.5 + parent: 1 + type: Transform + - uid: 426 + components: + - pos: 3.5,2.5 + parent: 1 + type: Transform +- proto: ComfyChair + entities: + - uid: 428 + components: + - rot: 1.5707963267948966 rad + pos: -0.5,7.5 + parent: 1 + type: Transform + - uid: 429 + components: + - rot: 1.5707963267948966 rad + pos: -0.5,8.5 + parent: 1 + type: Transform + - uid: 430 + components: + - rot: -1.5707963267948966 rad + pos: 1.5,8.5 + parent: 1 + type: Transform + - uid: 431 + components: + - rot: -1.5707963267948966 rad + pos: 1.5,7.5 + parent: 1 + type: Transform +- proto: ComputerComms + entities: + - uid: 432 + components: + - pos: -0.5,13.5 + parent: 1 + type: Transform +- proto: ComputerCrewMonitoring + entities: + - uid: 433 + components: + - rot: 1.5707963267948966 rad + pos: -3.5,12.5 + parent: 1 + type: Transform +- proto: ComputerCriminalRecords + entities: + - uid: 434 + components: + - pos: 2.5,13.5 + parent: 1 + type: Transform +- proto: ComputerEmergencyShuttle + entities: + - uid: 435 + components: + - pos: 0.5,13.5 + parent: 1 + type: Transform +- proto: ComputerId + entities: + - uid: 436 + components: + - pos: 1.5,13.5 + parent: 1 + type: Transform +- proto: ComputerPowerMonitoring + entities: + - uid: 437 + components: + - rot: -1.5707963267948966 rad + pos: 4.5,12.5 + parent: 1 + type: Transform +- proto: ComputerResearchAndDevelopment + entities: + - uid: 438 + components: + - pos: -1.5,13.5 + parent: 1 + type: Transform +- proto: DefibrillatorCabinetFilled + entities: + - uid: 439 + components: + - pos: 3.5,-6.5 + parent: 1 + type: Transform +- proto: DogBed + entities: + - uid: 440 + components: + - pos: 2.5,7.5 + parent: 1 + type: Transform +- proto: EmergencyLight + entities: + - uid: 441 + components: + - pos: 2.5,9.5 + parent: 1 + type: Transform + - uid: 442 + components: + - rot: 3.141592653589793 rad + pos: -1.5,11.5 + parent: 1 + type: Transform + - uid: 443 + components: + - pos: 2.5,-13.5 + parent: 1 + type: Transform + - uid: 444 + components: + - rot: 1.5707963267948966 rad + pos: -0.5,-8.5 + parent: 1 + type: Transform +- proto: Firelock + entities: + - uid: 445 + components: + - rot: 1.5707963267948966 rad + pos: -0.5,-11.5 + parent: 1 + type: Transform + - uid: 446 + components: + - rot: 1.5707963267948966 rad + pos: 1.5,-11.5 + parent: 1 + type: Transform +- proto: FirelockEdge + entities: + - uid: 447 + components: + - rot: 3.141592653589793 rad + pos: -1.5,-0.5 + parent: 1 + type: Transform + - uid: 448 + components: + - rot: 3.141592653589793 rad + pos: 2.5,-0.5 + parent: 1 + type: Transform + - uid: 449 + components: + - pos: -1.5,-3.5 + parent: 1 + type: Transform + - uid: 450 + components: + - pos: 2.5,-3.5 + parent: 1 + type: Transform + - uid: 451 + components: + - rot: 1.5707963267948966 rad + pos: -1.5,11.5 + parent: 1 + type: Transform + - uid: 452 + components: + - rot: -1.5707963267948966 rad + pos: 2.5,11.5 + parent: 1 + type: Transform +- proto: FirelockGlass + entities: + - uid: 453 + components: + - rot: -1.5707963267948966 rad + pos: -0.5,-6.5 + parent: 1 + type: Transform + - uid: 454 + components: + - rot: -1.5707963267948966 rad + pos: 0.5,-6.5 + parent: 1 + type: Transform + - uid: 455 + components: + - rot: -1.5707963267948966 rad + pos: 1.5,-6.5 + parent: 1 + type: Transform + - uid: 456 + components: + - rot: -1.5707963267948966 rad + pos: 4.5,0.5 + parent: 1 + type: Transform + - uid: 457 + components: + - rot: -1.5707963267948966 rad + pos: 4.5,-4.5 + parent: 1 + type: Transform + - uid: 458 + components: + - rot: -1.5707963267948966 rad + pos: 4.5,-5.5 + parent: 1 + type: Transform + - uid: 459 + components: + - rot: -1.5707963267948966 rad + pos: -3.5,-4.5 + parent: 1 + type: Transform + - uid: 460 + components: + - rot: -1.5707963267948966 rad + pos: -3.5,-5.5 + parent: 1 + type: Transform + - uid: 461 + components: + - rot: -1.5707963267948966 rad + pos: -3.5,0.5 + parent: 1 + type: Transform + - uid: 462 + components: + - rot: -1.5707963267948966 rad + pos: -3.5,1.5 + parent: 1 + type: Transform + - uid: 463 + components: + - rot: -1.5707963267948966 rad + pos: 4.5,1.5 + parent: 1 + type: Transform + - uid: 464 + components: + - pos: -1.5,2.5 + parent: 1 + type: Transform + - uid: 465 + components: + - pos: -0.5,2.5 + parent: 1 + type: Transform + - uid: 466 + components: + - pos: 0.5,2.5 + parent: 1 + type: Transform + - uid: 467 + components: + - rot: 1.5707963267948966 rad + pos: -1.5,-7.5 + parent: 1 + type: Transform + - uid: 468 + components: + - rot: 1.5707963267948966 rad + pos: 2.5,-7.5 + parent: 1 + type: Transform + - uid: 469 + components: + - rot: 1.5707963267948966 rad + pos: -3.5,7.5 + parent: 1 + type: Transform + - uid: 470 + components: + - rot: 1.5707963267948966 rad + pos: 4.5,7.5 + parent: 1 + type: Transform + - uid: 471 + components: + - rot: 1.5707963267948966 rad + pos: 4.5,10.5 + parent: 1 + type: Transform + - uid: 472 + components: + - rot: 1.5707963267948966 rad + pos: -3.5,10.5 + parent: 1 + type: Transform +- proto: FloraTreeLarge06 + entities: + - uid: 473 + components: + - pos: 0.5138967,-2.4482055 + parent: 1 + type: Transform +- proto: FoodCakeBirthday + entities: + - uid: 427 + components: + - pos: 0.49291778,7.754779 + parent: 1 + type: Transform +- proto: GasOutletInjector + entities: + - uid: 474 + components: + - rot: -1.5707963267948966 rad + pos: 3.5,-14.5 + parent: 1 + type: Transform +- proto: GasPassiveVent + entities: + - uid: 475 + components: + - rot: -1.5707963267948966 rad + pos: 4.5,-13.5 + parent: 1 + type: Transform + - color: '#FC6100FF' + type: AtmosPipeColor +- proto: GasPipeBend + entities: + - uid: 476 + components: + - rot: 3.141592653589793 rad + pos: 0.5,-13.5 + parent: 1 + type: Transform + - color: '#FC6100FF' + type: AtmosPipeColor + - uid: 477 + components: + - rot: 1.5707963267948966 rad + pos: -2.5,-7.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 478 + components: + - rot: -1.5707963267948966 rad + pos: -2.5,-10.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 479 + components: + - rot: 1.5707963267948966 rad + pos: -4.5,-10.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 480 + components: + - rot: -1.5707963267948966 rad + pos: 6.5,-5.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 481 + components: + - pos: 3.5,-7.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 482 + components: + - rot: 3.141592653589793 rad + pos: -5.5,-5.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 483 + components: + - pos: 2.5,3.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 484 + components: + - pos: 6.5,2.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 485 + components: + - rot: 3.141592653589793 rad + pos: 5.5,2.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 486 + components: + - rot: 1.5707963267948966 rad + pos: -5.5,2.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 487 + components: + - rot: -1.5707963267948966 rad + pos: -4.5,2.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 488 + components: + - pos: 5.5,5.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 489 + components: + - rot: 3.141592653589793 rad + pos: 4.5,5.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 490 + components: + - rot: 1.5707963267948966 rad + pos: -4.5,5.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 491 + components: + - rot: -1.5707963267948966 rad + pos: -3.5,5.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 492 + components: + - rot: -1.5707963267948966 rad + pos: -3.5,5.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 493 + components: + - rot: 1.5707963267948966 rad + pos: -3.5,11.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 494 + components: + - pos: 4.5,11.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor +- proto: GasPipeFourway + entities: + - uid: 495 + components: + - pos: 0.5,-5.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 496 + components: + - pos: 2.5,1.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor +- proto: GasPipeStraight + entities: + - uid: 497 + components: + - rot: 1.5707963267948966 rad + pos: 3.5,-13.5 + parent: 1 + type: Transform + - color: '#FC6100FF' + type: AtmosPipeColor + - uid: 498 + components: + - rot: 1.5707963267948966 rad + pos: 2.5,-13.5 + parent: 1 + type: Transform + - color: '#FC6100FF' + type: AtmosPipeColor + - uid: 499 + components: + - rot: 3.141592653589793 rad + pos: 1.5,-11.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 500 + components: + - rot: 3.141592653589793 rad + pos: 1.5,-9.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 501 + components: + - pos: 1.5,-8.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 502 + components: + - rot: -1.5707963267948966 rad + pos: -0.5,-7.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 503 + components: + - rot: -1.5707963267948966 rad + pos: -1.5,-7.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 504 + components: + - rot: -1.5707963267948966 rad + pos: -3.5,-8.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 505 + components: + - rot: -1.5707963267948966 rad + pos: -4.5,-8.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 506 + components: + - pos: 0.5,-6.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 507 + components: + - rot: 1.5707963267948966 rad + pos: -3.5,-10.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 508 + components: + - pos: -4.5,-11.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 509 + components: + - pos: -2.5,-9.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 510 + components: + - rot: -1.5707963267948966 rad + pos: 1.5,-5.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 511 + components: + - rot: -1.5707963267948966 rad + pos: 2.5,-5.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 512 + components: + - rot: -1.5707963267948966 rad + pos: 3.5,-5.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 513 + components: + - rot: -1.5707963267948966 rad + pos: 4.5,-5.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 514 + components: + - rot: -1.5707963267948966 rad + pos: 5.5,-5.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 515 + components: + - pos: 3.5,-9.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 516 + components: + - rot: -1.5707963267948966 rad + pos: 2.5,-7.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 517 + components: + - pos: 3.5,-8.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 518 + components: + - rot: -1.5707963267948966 rad + pos: -0.5,-5.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 519 + components: + - rot: 1.5707963267948966 rad + pos: 4.5,-10.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 520 + components: + - rot: 1.5707963267948966 rad + pos: 5.5,-10.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 521 + components: + - pos: 6.5,-3.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 522 + components: + - pos: -1.5,-4.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 523 + components: + - pos: -1.5,-3.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 524 + components: + - pos: -1.5,-2.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 525 + components: + - pos: -1.5,-1.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 526 + components: + - rot: -1.5707963267948966 rad + pos: -2.5,-5.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 527 + components: + - rot: -1.5707963267948966 rad + pos: -3.5,-5.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 528 + components: + - rot: -1.5707963267948966 rad + pos: -4.5,-5.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 529 + components: + - pos: 6.5,-2.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 530 + components: + - pos: 6.5,-1.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 531 + components: + - pos: 6.5,-0.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 532 + components: + - rot: 3.141592653589793 rad + pos: -5.5,-3.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 533 + components: + - rot: 3.141592653589793 rad + pos: -5.5,-2.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 534 + components: + - rot: 3.141592653589793 rad + pos: -5.5,-1.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 535 + components: + - rot: 3.141592653589793 rad + pos: -5.5,-0.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 536 + components: + - pos: 6.5,0.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 537 + components: + - pos: -5.5,0.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 538 + components: + - rot: -1.5707963267948966 rad + pos: -4.5,1.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 539 + components: + - rot: -1.5707963267948966 rad + pos: -3.5,1.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 540 + components: + - rot: -1.5707963267948966 rad + pos: -2.5,1.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 541 + components: + - rot: -1.5707963267948966 rad + pos: -1.5,1.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 542 + components: + - rot: -1.5707963267948966 rad + pos: -0.5,1.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 543 + components: + - rot: -1.5707963267948966 rad + pos: 0.5,1.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 544 + components: + - rot: -1.5707963267948966 rad + pos: 1.5,1.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 545 + components: + - rot: 3.141592653589793 rad + pos: 2.5,0.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 546 + components: + - rot: 3.141592653589793 rad + pos: 2.5,-0.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 547 + components: + - rot: 3.141592653589793 rad + pos: 2.5,-1.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 548 + components: + - rot: 3.141592653589793 rad + pos: 2.5,-2.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 549 + components: + - rot: 1.5707963267948966 rad + pos: 3.5,1.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 550 + components: + - rot: 1.5707963267948966 rad + pos: 4.5,1.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 551 + components: + - rot: 1.5707963267948966 rad + pos: 5.5,1.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 552 + components: + - pos: 2.5,2.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 553 + components: + - rot: -1.5707963267948966 rad + pos: 1.5,3.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 554 + components: + - rot: -1.5707963267948966 rad + pos: 0.5,3.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 555 + components: + - rot: -1.5707963267948966 rad + pos: -0.5,3.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 556 + components: + - pos: 5.5,3.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 557 + components: + - rot: 3.141592653589793 rad + pos: -4.5,3.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 558 + components: + - pos: 4.5,6.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 559 + components: + - pos: 4.5,7.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 560 + components: + - pos: 4.5,8.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 561 + components: + - rot: -1.5707963267948966 rad + pos: 3.5,9.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 562 + components: + - rot: -1.5707963267948966 rad + pos: 1.5,9.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 563 + components: + - rot: -1.5707963267948966 rad + pos: 2.5,9.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 564 + components: + - rot: -1.5707963267948966 rad + pos: -0.5,9.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 565 + components: + - rot: -1.5707963267948966 rad + pos: -1.5,9.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 566 + components: + - rot: -1.5707963267948966 rad + pos: -2.5,9.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 567 + components: + - rot: 3.141592653589793 rad + pos: -3.5,8.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 568 + components: + - rot: 3.141592653589793 rad + pos: -3.5,6.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 569 + components: + - rot: 3.141592653589793 rad + pos: -3.5,7.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 570 + components: + - rot: 3.141592653589793 rad + pos: -3.5,10.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 571 + components: + - rot: 3.141592653589793 rad + pos: 4.5,10.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 572 + components: + - rot: 3.141592653589793 rad + pos: -3.5,10.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 573 + components: + - rot: 3.141592653589793 rad + pos: 0.5,12.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 574 + components: + - rot: 3.141592653589793 rad + pos: -2.5,12.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 575 + components: + - rot: 3.141592653589793 rad + pos: 3.5,12.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 576 + components: + - rot: 1.5707963267948966 rad + pos: -1.5,11.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 577 + components: + - rot: 1.5707963267948966 rad + pos: -0.5,11.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 578 + components: + - rot: 1.5707963267948966 rad + pos: 2.5,11.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 579 + components: + - pos: 4.5,10.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 580 + components: + - rot: -1.5707963267948966 rad + pos: 1.5,11.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor +- proto: GasPipeTJunction + entities: + - uid: 581 + components: + - rot: 3.141592653589793 rad + pos: 1.5,-13.5 + parent: 1 + type: Transform + - color: '#FC6100FF' + type: AtmosPipeColor + - uid: 582 + components: + - rot: -1.5707963267948966 rad + pos: 1.5,-10.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 583 + components: + - rot: 3.141592653589793 rad + pos: 0.5,-7.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 584 + components: + - pos: 1.5,-7.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 585 + components: + - rot: -1.5707963267948966 rad + pos: -2.5,-8.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 586 + components: + - rot: 1.5707963267948966 rad + pos: 3.5,-10.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 587 + components: + - rot: 3.141592653589793 rad + pos: -1.5,-5.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 588 + components: + - rot: -1.5707963267948966 rad + pos: -5.5,-4.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 589 + components: + - rot: -1.5707963267948966 rad + pos: 5.5,4.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 590 + components: + - rot: 1.5707963267948966 rad + pos: -5.5,1.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 591 + components: + - rot: 1.5707963267948966 rad + pos: -4.5,4.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 592 + components: + - rot: -1.5707963267948966 rad + pos: 6.5,1.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 593 + components: + - pos: 0.5,9.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 594 + components: + - rot: -1.5707963267948966 rad + pos: 4.5,9.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 595 + components: + - rot: 1.5707963267948966 rad + pos: -3.5,9.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 596 + components: + - rot: 1.5707963267948966 rad + pos: 6.5,-4.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 597 + components: + - rot: 3.141592653589793 rad + pos: -2.5,11.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 598 + components: + - rot: 3.141592653589793 rad + pos: 0.5,11.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 599 + components: + - rot: 3.141592653589793 rad + pos: 3.5,11.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor +- proto: GasPort + entities: + - uid: 600 + components: + - rot: 1.5707963267948966 rad + pos: 2.5,-14.5 + parent: 1 + type: Transform +- proto: GasPressurePump + entities: + - uid: 601 + components: + - rot: 3.141592653589793 rad + pos: 1.5,-12.5 + parent: 1 + type: Transform + - color: '#FC6100FF' + type: AtmosPipeColor +- proto: GasVentPump + entities: + - uid: 602 + components: + - pos: 0.5,-12.5 + parent: 1 + type: Transform + - color: '#FC6100FF' + type: AtmosPipeColor + - uid: 603 + components: + - rot: 1.5707963267948966 rad + pos: 0.5,-10.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 604 + components: + - rot: 3.141592653589793 rad + pos: -4.5,-12.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 605 + components: + - rot: 1.5707963267948966 rad + pos: -1.5,3.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 606 + components: + - rot: -1.5707963267948966 rad + pos: -3.5,4.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 607 + components: + - rot: 1.5707963267948966 rad + pos: 4.5,4.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 608 + components: + - rot: -1.5707963267948966 rad + pos: 7.5,-4.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 609 + components: + - rot: 1.5707963267948966 rad + pos: -6.5,-4.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 610 + components: + - pos: -1.5,-0.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 611 + components: + - rot: 3.141592653589793 rad + pos: 2.5,-3.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 612 + components: + - rot: 1.5707963267948966 rad + pos: -5.5,-8.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 613 + components: + - rot: -1.5707963267948966 rad + pos: 6.5,-10.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 614 + components: + - rot: 3.141592653589793 rad + pos: 0.5,8.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 615 + components: + - pos: 0.5,13.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 616 + components: + - pos: 3.5,13.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 617 + components: + - pos: -2.5,13.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 618 + components: + - rot: 3.141592653589793 rad + pos: 3.5,-11.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 619 + components: + - pos: 0.5,-4.5 + parent: 1 + type: Transform + - color: '#020F73FF' + type: AtmosPipeColor + - uid: 620 + components: + - rot: 3.141592653589793 rad + pos: 0.5,0.5 + parent: 1 + type: Transform +- proto: GeneratorBasic15kW + entities: + - uid: 621 + components: + - pos: -2.5,-12.5 + parent: 1 + type: Transform + - uid: 622 + components: + - pos: -2.5,-14.5 + parent: 1 + type: Transform +- proto: GeneratorWallmountAPU + entities: + - uid: 623 + components: + - pos: 2.5,-15.5 + parent: 1 + type: Transform + - uid: 624 + components: + - pos: 4.5,-0.5 + parent: 1 + type: Transform + - uid: 625 + components: + - pos: 2.5,10.5 + parent: 1 + type: Transform +- proto: GravityGeneratorMini + entities: + - uid: 626 + components: + - pos: -1.5,-14.5 + parent: 1 + type: Transform +- proto: Grille + entities: + - uid: 627 + components: + - pos: 7.5,5.5 + parent: 1 + type: Transform + - uid: 628 + components: + - pos: -1.5,-10.5 + parent: 1 + type: Transform + - uid: 629 + components: + - rot: -1.5707963267948966 rad + pos: -4.5,13.5 + parent: 1 + type: Transform + - uid: 630 + components: + - rot: -1.5707963267948966 rad + pos: -3.5,14.5 + parent: 1 + type: Transform + - uid: 631 + components: + - pos: -5.5,-9.5 + parent: 1 + type: Transform + - uid: 632 + components: + - rot: 1.5707963267948966 rad + pos: 8.5,1.5 + parent: 1 + type: Transform + - uid: 633 + components: + - rot: 1.5707963267948966 rad + pos: -7.5,1.5 + parent: 1 + type: Transform + - uid: 634 + components: + - rot: 1.5707963267948966 rad + pos: -7.5,-4.5 + parent: 1 + type: Transform + - uid: 635 + components: + - rot: 1.5707963267948966 rad + pos: -7.5,-3.5 + parent: 1 + type: Transform + - uid: 636 + components: + - rot: 1.5707963267948966 rad + pos: -7.5,-2.5 + parent: 1 + type: Transform + - uid: 637 + components: + - rot: 1.5707963267948966 rad + pos: -7.5,-1.5 + parent: 1 + type: Transform + - uid: 638 + components: + - rot: 1.5707963267948966 rad + pos: -7.5,-0.5 + parent: 1 + type: Transform + - uid: 639 + components: + - rot: 1.5707963267948966 rad + pos: 8.5,-0.5 + parent: 1 + type: Transform + - uid: 640 + components: + - rot: 1.5707963267948966 rad + pos: 8.5,-1.5 + parent: 1 + type: Transform + - uid: 641 + components: + - rot: 1.5707963267948966 rad + pos: 8.5,-2.5 + parent: 1 + type: Transform + - uid: 642 + components: + - rot: 1.5707963267948966 rad + pos: 8.5,-3.5 + parent: 1 + type: Transform + - uid: 643 + components: + - rot: 1.5707963267948966 rad + pos: 8.5,-4.5 + parent: 1 + type: Transform + - uid: 644 + components: + - pos: -4.5,-9.5 + parent: 1 + type: Transform + - uid: 645 + components: + - rot: -1.5707963267948966 rad + pos: -3.5,13.5 + parent: 1 + type: Transform + - uid: 646 + components: + - rot: -1.5707963267948966 rad + pos: -4.5,12.5 + parent: 1 + type: Transform + - uid: 647 + components: + - rot: -1.5707963267948966 rad + pos: -1.5,14.5 + parent: 1 + type: Transform + - uid: 648 + components: + - rot: 1.5707963267948966 rad + pos: 1.5,14.5 + parent: 1 + type: Transform + - uid: 649 + components: + - rot: 1.5707963267948966 rad + pos: 0.5,14.5 + parent: 1 + type: Transform + - uid: 650 + components: + - rot: 1.5707963267948966 rad + pos: -0.5,14.5 + parent: 1 + type: Transform + - uid: 651 + components: + - pos: -1.5,-9.5 + parent: 1 + type: Transform + - uid: 652 + components: + - rot: -1.5707963267948966 rad + pos: -2.5,14.5 + parent: 1 + type: Transform + - uid: 653 + components: + - pos: -5.5,8.5 + parent: 1 + type: Transform + - uid: 654 + components: + - pos: -5.5,9.5 + parent: 1 + type: Transform + - uid: 655 + components: + - pos: -0.5,-15.5 + parent: 1 + type: Transform + - uid: 656 + components: + - pos: 0.5,-15.5 + parent: 1 + type: Transform + - uid: 657 + components: + - pos: 1.5,-15.5 + parent: 1 + type: Transform + - uid: 658 + components: + - pos: 7.5,4.5 + parent: 1 + type: Transform + - uid: 659 + components: + - pos: -6.5,5.5 + parent: 1 + type: Transform + - uid: 660 + components: + - pos: -6.5,4.5 + parent: 1 + type: Transform + - uid: 661 + components: + - pos: 2.5,-10.5 + parent: 1 + type: Transform + - uid: 662 + components: + - pos: 2.5,-9.5 + parent: 1 + type: Transform + - uid: 663 + components: + - pos: 6.5,8.5 + parent: 1 + type: Transform + - uid: 664 + components: + - pos: 6.5,9.5 + parent: 1 + type: Transform + - uid: 665 + components: + - rot: -1.5707963267948966 rad + pos: 2.5,14.5 + parent: 1 + type: Transform + - uid: 666 + components: + - rot: -1.5707963267948966 rad + pos: 3.5,14.5 + parent: 1 + type: Transform + - uid: 667 + components: + - rot: -1.5707963267948966 rad + pos: 4.5,14.5 + parent: 1 + type: Transform + - uid: 668 + components: + - rot: -1.5707963267948966 rad + pos: 4.5,13.5 + parent: 1 + type: Transform + - uid: 669 + components: + - rot: -1.5707963267948966 rad + pos: 5.5,13.5 + parent: 1 + type: Transform + - uid: 670 + components: + - rot: -1.5707963267948966 rad + pos: 5.5,12.5 + parent: 1 + type: Transform + - uid: 671 + components: + - rot: 3.141592653589793 rad + pos: 1.5,10.5 + parent: 1 + type: Transform + - uid: 672 + components: + - rot: 3.141592653589793 rad + pos: 0.5,10.5 + parent: 1 + type: Transform + - uid: 673 + components: + - rot: 3.141592653589793 rad + pos: -0.5,10.5 + parent: 1 + type: Transform +- proto: Gyroscope + entities: + - uid: 674 + components: + - rot: -1.5707963267948966 rad + pos: -1.5,-16.5 + parent: 1 + type: Transform + - uid: 675 + components: + - rot: -1.5707963267948966 rad + pos: 2.5,-16.5 + parent: 1 + type: Transform +- proto: HospitalCurtainsOpen + entities: + - uid: 676 + components: + - rot: 1.5707963267948966 rad + pos: -4.5,-12.5 + parent: 1 + type: Transform + - uid: 677 + components: + - rot: 3.141592653589793 rad + pos: 4.5,-7.5 + parent: 1 + type: Transform + - uid: 678 + components: + - rot: 3.141592653589793 rad + pos: 4.5,-9.5 + parent: 1 + type: Transform +- proto: LockerBoozeFilled + entities: + - uid: 679 + components: + - pos: 2.5,5.5 + parent: 1 + type: Transform +- proto: LockerElectricalSuppliesFilled + entities: + - uid: 680 + components: + - pos: 2.5,-13.5 + parent: 1 + type: Transform +- proto: LockerEvidence + entities: + - uid: 681 + components: + - pos: -3.5,-8.5 + parent: 1 + type: Transform +- proto: LockerMedicineFilled + entities: + - uid: 682 + components: + - pos: 3.5,-11.5 + parent: 1 + type: Transform +- proto: MedkitCombatFilled + entities: + - uid: 683 + components: + - pos: -2.5,13.5 + parent: 1 + type: Transform +- proto: PetCarrier + entities: + - uid: 684 + components: + - pos: -1.5,7.5 + parent: 1 + type: Transform +- proto: PlasmaReinforcedWindowDirectional + entities: + - uid: 685 + components: + - rot: -1.5707963267948966 rad + pos: 3.5,-14.5 + parent: 1 + type: Transform + - uid: 686 + components: + - rot: -1.5707963267948966 rad + pos: 3.5,-13.5 + parent: 1 + type: Transform +- proto: PlasmaWindowDirectional + entities: + - uid: 687 + components: + - rot: -1.5707963267948966 rad + pos: 5.5,-11.5 + parent: 1 + type: Transform +- proto: PottedPlantRandom + entities: + - uid: 688 + components: + - pos: 4.5,4.5 + parent: 1 + type: Transform + - uid: 689 + components: + - pos: -3.5,4.5 + parent: 1 + type: Transform + - uid: 690 + components: + - pos: -0.5,12.5 + parent: 1 + type: Transform + - uid: 691 + components: + - pos: 1.5,12.5 + parent: 1 + type: Transform + - uid: 692 + components: + - pos: 3.5,8.5 + parent: 1 + type: Transform + - uid: 693 + components: + - pos: 7.5,-6.5 + parent: 1 + type: Transform + - uid: 694 + components: + - pos: -2.5,8.5 + parent: 1 + type: Transform + - uid: 695 + components: + - pos: -6.5,1.5 + parent: 1 + type: Transform + - uid: 696 + components: + - pos: 7.5,1.5 + parent: 1 + type: Transform + - uid: 697 + components: + - pos: 0.5,-10.5 + parent: 1 + type: Transform +- proto: PowerCellRecharger + entities: + - uid: 698 + components: + - rot: 1.5707963267948966 rad + pos: 0.5,-12.5 + parent: 1 + type: Transform +- proto: Poweredlight + entities: + - uid: 699 + components: + - rot: 3.141592653589793 rad + pos: -2.5,11.5 + parent: 1 + type: Transform + - uid: 700 + components: + - pos: 6.5,6.5 + parent: 1 + type: Transform + - uid: 701 + components: + - pos: -5.5,6.5 + parent: 1 + type: Transform + - uid: 702 + components: + - rot: 3.141592653589793 rad + pos: 3.5,11.5 + parent: 1 + type: Transform + - uid: 703 + components: + - pos: -1.5,5.5 + parent: 1 + type: Transform + - uid: 704 + components: + - rot: 3.141592653589793 rad + pos: 1.5,3.5 + parent: 1 + type: Transform + - uid: 705 + components: + - pos: -4.5,9.5 + parent: 1 + type: Transform + - uid: 706 + components: + - pos: 5.5,9.5 + parent: 1 + type: Transform + - uid: 707 + components: + - rot: 3.141592653589793 rad + pos: 0.5,-10.5 + parent: 1 + type: Transform + - uid: 708 + components: + - pos: -2.5,1.5 + parent: 1 + type: Transform + - uid: 709 + components: + - pos: 3.5,1.5 + parent: 1 + type: Transform + - uid: 710 + components: + - rot: 3.141592653589793 rad + pos: -2.5,-5.5 + parent: 1 + type: Transform + - uid: 711 + components: + - rot: 3.141592653589793 rad + pos: 3.5,-5.5 + parent: 1 + type: Transform + - uid: 712 + components: + - rot: 1.5707963267948966 rad + pos: -6.5,-2.5 + parent: 1 + type: Transform + - uid: 713 + components: + - rot: -1.5707963267948966 rad + pos: 7.5,-2.5 + parent: 1 + type: Transform + - uid: 714 + components: + - rot: 1.5707963267948966 rad + pos: 6.5,-7.5 + parent: 1 + type: Transform + - uid: 715 + components: + - rot: 1.5707963267948966 rad + pos: 3.5,-8.5 + parent: 1 + type: Transform + - uid: 716 + components: + - rot: -1.5707963267948966 rad + pos: 6.5,-11.5 + parent: 1 + type: Transform + - uid: 717 + components: + - pos: -4.5,-7.5 + parent: 1 + type: Transform +- proto: PoweredLightPostSmall + entities: + - uid: 718 + components: + - pos: 0.5,-1.5 + parent: 1 + type: Transform +- proto: PoweredSmallLight + entities: + - uid: 719 + components: + - rot: -1.5707963267948966 rad + pos: 4.5,-13.5 + parent: 1 + type: Transform + - uid: 720 + components: + - rot: 1.5707963267948966 rad + pos: -2.5,-13.5 + parent: 1 + type: Transform + - uid: 721 + components: + - pos: 0.5,-12.5 + parent: 1 + type: Transform + - uid: 722 + components: + - rot: -1.5707963267948966 rad + pos: 2.5,5.5 + parent: 1 + type: Transform + - uid: 723 + components: + - rot: 1.5707963267948966 rad + pos: -5.5,-10.5 + parent: 1 + type: Transform +- proto: RandomDrinkBottle + entities: + - uid: 724 + components: + - pos: 0.5,2.5 + parent: 1 + type: Transform +- proto: RandomDrinkGlass + entities: + - uid: 725 + components: + - pos: -1.5,2.5 + parent: 1 + type: Transform +- proto: RandomFoodMeal + entities: + - uid: 726 + components: + - pos: -3.5,3.5 + parent: 1 + type: Transform + - uid: 727 + components: + - pos: 4.5,3.5 + parent: 1 + type: Transform +- proto: ShuttersNormalOpen + entities: + - uid: 728 + components: + - pos: -1.5,2.5 + parent: 1 + type: Transform + - links: + - 779 + type: DeviceLinkSink + - uid: 729 + components: + - pos: -0.5,2.5 + parent: 1 + type: Transform + - links: + - 779 + type: DeviceLinkSink + - uid: 730 + components: + - pos: 0.5,2.5 + parent: 1 + type: Transform + - links: + - 779 + type: DeviceLinkSink +- proto: ShuttleWindow + entities: + - uid: 731 + components: + - rot: -1.5707963267948966 rad + pos: -7.5,-4.5 + parent: 1 + type: Transform + - uid: 732 + components: + - rot: -1.5707963267948966 rad + pos: -7.5,-3.5 + parent: 1 + type: Transform + - uid: 733 + components: + - rot: -1.5707963267948966 rad + pos: -7.5,-2.5 + parent: 1 + type: Transform + - uid: 734 + components: + - rot: -1.5707963267948966 rad + pos: -7.5,-1.5 + parent: 1 + type: Transform + - uid: 735 + components: + - rot: -1.5707963267948966 rad + pos: -7.5,-0.5 + parent: 1 + type: Transform + - uid: 736 + components: + - rot: -1.5707963267948966 rad + pos: 8.5,-4.5 + parent: 1 + type: Transform + - uid: 737 + components: + - rot: -1.5707963267948966 rad + pos: 8.5,-3.5 + parent: 1 + type: Transform + - uid: 738 + components: + - rot: -1.5707963267948966 rad + pos: 8.5,-2.5 + parent: 1 + type: Transform + - uid: 739 + components: + - rot: -1.5707963267948966 rad + pos: 8.5,-1.5 + parent: 1 + type: Transform + - uid: 740 + components: + - rot: -1.5707963267948966 rad + pos: 8.5,-0.5 + parent: 1 + type: Transform + - uid: 741 + components: + - rot: -1.5707963267948966 rad + pos: 8.5,1.5 + parent: 1 + type: Transform + - uid: 742 + components: + - rot: -1.5707963267948966 rad + pos: 1.5,-15.5 + parent: 1 + type: Transform + - uid: 743 + components: + - rot: -1.5707963267948966 rad + pos: 0.5,-15.5 + parent: 1 + type: Transform + - uid: 744 + components: + - rot: -1.5707963267948966 rad + pos: -0.5,-15.5 + parent: 1 + type: Transform + - uid: 745 + components: + - pos: -6.5,5.5 + parent: 1 + type: Transform + - uid: 746 + components: + - pos: 7.5,5.5 + parent: 1 + type: Transform + - uid: 747 + components: + - pos: 7.5,4.5 + parent: 1 + type: Transform + - uid: 748 + components: + - rot: -1.5707963267948966 rad + pos: -0.5,14.5 + parent: 1 + type: Transform + - uid: 749 + components: + - rot: -1.5707963267948966 rad + pos: 0.5,14.5 + parent: 1 + type: Transform + - uid: 750 + components: + - rot: -1.5707963267948966 rad + pos: 1.5,14.5 + parent: 1 + type: Transform + - uid: 751 + components: + - rot: -1.5707963267948966 rad + pos: 5.5,12.5 + parent: 1 + type: Transform + - uid: 752 + components: + - rot: 1.5707963267948966 rad + pos: -7.5,1.5 + parent: 1 + type: Transform + - uid: 753 + components: + - pos: 6.5,9.5 + parent: 1 + type: Transform + - uid: 754 + components: + - rot: -1.5707963267948966 rad + pos: -1.5,14.5 + parent: 1 + type: Transform + - uid: 755 + components: + - rot: -1.5707963267948966 rad + pos: -2.5,14.5 + parent: 1 + type: Transform + - uid: 756 + components: + - rot: -1.5707963267948966 rad + pos: -3.5,14.5 + parent: 1 + type: Transform + - uid: 757 + components: + - rot: -1.5707963267948966 rad + pos: 2.5,14.5 + parent: 1 + type: Transform + - uid: 758 + components: + - rot: -1.5707963267948966 rad + pos: 3.5,14.5 + parent: 1 + type: Transform + - uid: 759 + components: + - rot: -1.5707963267948966 rad + pos: 4.5,14.5 + parent: 1 + type: Transform + - uid: 760 + components: + - rot: -1.5707963267948966 rad + pos: 4.5,13.5 + parent: 1 + type: Transform + - uid: 761 + components: + - rot: -1.5707963267948966 rad + pos: 5.5,13.5 + parent: 1 + type: Transform + - uid: 762 + components: + - pos: 6.5,8.5 + parent: 1 + type: Transform + - uid: 763 + components: + - rot: -1.5707963267948966 rad + pos: -4.5,12.5 + parent: 1 + type: Transform + - uid: 764 + components: + - rot: -1.5707963267948966 rad + pos: -4.5,13.5 + parent: 1 + type: Transform + - uid: 765 + components: + - rot: -1.5707963267948966 rad + pos: -3.5,13.5 + parent: 1 + type: Transform + - uid: 766 + components: + - rot: -1.5707963267948966 rad + pos: -4.5,-9.5 + parent: 1 + type: Transform + - uid: 767 + components: + - rot: -1.5707963267948966 rad + pos: -5.5,-9.5 + parent: 1 + type: Transform + - uid: 768 + components: + - rot: -1.5707963267948966 rad + pos: -1.5,-9.5 + parent: 1 + type: Transform + - uid: 769 + components: + - rot: -1.5707963267948966 rad + pos: -1.5,-10.5 + parent: 1 + type: Transform + - uid: 770 + components: + - rot: -1.5707963267948966 rad + pos: 2.5,-9.5 + parent: 1 + type: Transform + - uid: 771 + components: + - rot: -1.5707963267948966 rad + pos: 2.5,-10.5 + parent: 1 + type: Transform + - uid: 772 + components: + - pos: -6.5,4.5 + parent: 1 + type: Transform + - uid: 773 + components: + - pos: -5.5,9.5 + parent: 1 + type: Transform + - uid: 774 + components: + - pos: -5.5,8.5 + parent: 1 + type: Transform + - uid: 775 + components: + - rot: 3.141592653589793 rad + pos: 1.5,10.5 + parent: 1 + type: Transform + - uid: 776 + components: + - rot: 3.141592653589793 rad + pos: 0.5,10.5 + parent: 1 + type: Transform + - uid: 777 + components: + - rot: 3.141592653589793 rad + pos: -0.5,10.5 + parent: 1 + type: Transform +- proto: SignalButtonDirectional + entities: + - uid: 778 + components: + - pos: -1.5,10.5 + parent: 1 + type: Transform + - linkedPorts: + 6: + - Pressed: DoorBolt + 7: + - Pressed: DoorBolt + type: DeviceLinkSource + - uid: 779 + components: + - pos: 0.5,6.5 + parent: 1 + type: Transform + - linkedPorts: + 728: + - Pressed: Toggle + 729: + - Pressed: Toggle + 730: + - Pressed: Toggle + type: DeviceLinkSource + - uid: 780 + components: + - rot: 3.141592653589793 rad + pos: -1.5,10.5 + parent: 1 + type: Transform + - linkedPorts: + 44: + - Pressed: Toggle + 45: + - Pressed: Toggle + 46: + - Pressed: Toggle + 8: + - Pressed: DoorBolt + 9: + - Pressed: DoorBolt + type: DeviceLinkSource +- proto: SignBio + entities: + - uid: 781 + components: + - pos: 7.5,-10.5 + parent: 1 + type: Transform +- proto: SignEngineering + entities: + - uid: 782 + components: + - rot: 1.5707963267948966 rad + pos: 0.5,-11.5 + parent: 1 + type: Transform +- proto: SignMedical + entities: + - uid: 783 + components: + - pos: 2.5,-6.5 + parent: 1 + type: Transform +- proto: SignPrison + entities: + - uid: 784 + components: + - rot: -1.5707963267948966 rad + pos: -3.5,-9.5 + parent: 1 + type: Transform +- proto: SignShield + entities: + - uid: 785 + components: + - pos: -1.5,-6.5 + parent: 1 + type: Transform +- proto: SinkWide + entities: + - uid: 786 + components: + - rot: 1.5707963267948966 rad + pos: -1.5,4.5 + parent: 1 + type: Transform + - uid: 787 + components: + - rot: -1.5707963267948966 rad + pos: 6.5,-10.5 + parent: 1 + type: Transform +- proto: SMESBasic + entities: + - uid: 788 + components: + - pos: -1.5,-12.5 + parent: 1 + type: Transform +- proto: soda_dispenser + entities: + - uid: 789 + components: + - pos: -0.5,5.5 + parent: 1 + type: Transform +- proto: StasisBed + entities: + - uid: 790 + components: + - pos: 4.5,-8.5 + parent: 1 + type: Transform +- proto: StoolBar + entities: + - uid: 791 + components: + - rot: 3.141592653589793 rad + pos: -1.5,1.5 + parent: 1 + type: Transform + - uid: 792 + components: + - rot: 3.141592653589793 rad + pos: -0.5,1.5 + parent: 1 + type: Transform + - uid: 793 + components: + - rot: 3.141592653589793 rad + pos: 0.5,1.5 + parent: 1 + type: Transform +- proto: SubstationWallBasic + entities: + - uid: 794 + components: + - pos: -2.5,10.5 + parent: 1 + type: Transform + - uid: 795 + components: + - pos: 2.5,-12.5 + parent: 1 + type: Transform + - uid: 796 + components: + - rot: 3.141592653589793 rad + pos: -3.5,-0.5 + parent: 1 + type: Transform +- proto: Table + entities: + - uid: 797 + components: + - rot: 1.5707963267948966 rad + pos: 0.5,-12.5 + parent: 1 + type: Transform + - uid: 798 + components: + - rot: -1.5707963267948966 rad + pos: -3.5,3.5 + parent: 1 + type: Transform + - uid: 799 + components: + - rot: -1.5707963267948966 rad + pos: 4.5,3.5 + parent: 1 + type: Transform +- proto: TableCounterWood + entities: + - uid: 800 + components: + - pos: -1.5,2.5 + parent: 1 + type: Transform + - uid: 801 + components: + - pos: -0.5,2.5 + parent: 1 + type: Transform + - uid: 802 + components: + - pos: 0.5,2.5 + parent: 1 + type: Transform +- proto: TableReinforced + entities: + - uid: 803 + components: + - rot: 1.5707963267948966 rad + pos: -2.5,13.5 + parent: 1 + type: Transform + - uid: 804 + components: + - rot: -1.5707963267948966 rad + pos: 3.5,13.5 + parent: 1 + type: Transform +- proto: TableWood + entities: + - uid: 805 + components: + - pos: -1.5,5.5 + parent: 1 + type: Transform + - uid: 806 + components: + - pos: -0.5,5.5 + parent: 1 + type: Transform + - uid: 807 + components: + - rot: 3.141592653589793 rad + pos: 0.5,7.5 + parent: 1 + type: Transform + - uid: 808 + components: + - rot: 3.141592653589793 rad + pos: 0.5,8.5 + parent: 1 + type: Transform +- proto: Thruster + entities: + - uid: 809 + components: + - rot: 1.5707963267948966 rad + pos: -7.5,-10.5 + parent: 1 + type: Transform + - uid: 810 + components: + - rot: 1.5707963267948966 rad + pos: -7.5,-11.5 + parent: 1 + type: Transform + - uid: 811 + components: + - rot: 3.141592653589793 rad + pos: -7.5,-12.5 + parent: 1 + type: Transform + - uid: 812 + components: + - rot: 3.141592653589793 rad + pos: -5.5,-14.5 + parent: 1 + type: Transform + - uid: 813 + components: + - rot: 3.141592653589793 rad + pos: -4.5,-15.5 + parent: 1 + type: Transform + - uid: 814 + components: + - rot: 3.141592653589793 rad + pos: -3.5,-16.5 + parent: 1 + type: Transform + - uid: 815 + components: + - rot: 3.141592653589793 rad + pos: -2.5,-16.5 + parent: 1 + type: Transform + - uid: 816 + components: + - rot: 3.141592653589793 rad + pos: 3.5,-16.5 + parent: 1 + type: Transform + - uid: 817 + components: + - rot: 3.141592653589793 rad + pos: 4.5,-16.5 + parent: 1 + type: Transform + - uid: 818 + components: + - rot: 3.141592653589793 rad + pos: 5.5,-15.5 + parent: 1 + type: Transform + - uid: 819 + components: + - rot: 3.141592653589793 rad + pos: 6.5,-14.5 + parent: 1 + type: Transform + - uid: 820 + components: + - rot: 3.141592653589793 rad + pos: 8.5,-12.5 + parent: 1 + type: Transform + - uid: 821 + components: + - rot: -1.5707963267948966 rad + pos: 8.5,-11.5 + parent: 1 + type: Transform + - uid: 822 + components: + - rot: -1.5707963267948966 rad + pos: 8.5,-10.5 + parent: 1 + type: Transform + - uid: 823 + components: + - rot: -1.5707963267948966 rad + pos: 8.5,4.5 + parent: 1 + type: Transform + - uid: 824 + components: + - pos: 8.5,5.5 + parent: 1 + type: Transform + - uid: 825 + components: + - pos: -7.5,5.5 + parent: 1 + type: Transform + - uid: 826 + components: + - rot: 1.5707963267948966 rad + pos: -7.5,4.5 + parent: 1 + type: Transform + - uid: 827 + components: + - rot: 1.5707963267948966 rad + pos: -5.5,11.5 + parent: 1 + type: Transform + - uid: 828 + components: + - pos: -5.5,12.5 + parent: 1 + type: Transform + - uid: 829 + components: + - pos: 6.5,12.5 + parent: 1 + type: Transform + - uid: 830 + components: + - rot: -1.5707963267948966 rad + pos: 6.5,11.5 + parent: 1 + type: Transform +- proto: ToiletEmpty + entities: + - uid: 831 + components: + - rot: 1.5707963267948966 rad + pos: -4.5,-12.5 + parent: 1 + type: Transform +- proto: ToyFigurineClown + entities: + - uid: 832 + components: + - pos: 0.18010247,-3.0342817 + parent: 1 + type: Transform +- proto: ToyFigurineGreytider + entities: + - uid: 833 + components: + - pos: 7.5,-13.5 + parent: 1 + type: Transform +- proto: ToyFigurineMime + entities: + - uid: 834 + components: + - pos: 0.7675153,-2.929387 + parent: 1 + type: Transform +- proto: ToyFigurineNukieCommander + entities: + - uid: 835 + components: + - pos: -6.5,-13.5 + parent: 1 + type: Transform +- proto: ToyRubberDuck + entities: + - uid: 836 + components: + - pos: -4.5,-12.5 + parent: 1 + type: Transform +- proto: ToySpawner + entities: + - uid: 837 + components: + - pos: 0.5,12.5 + parent: 1 + type: Transform + - uid: 838 + components: + - pos: 2.5,7.5 + parent: 1 + type: Transform +- proto: VendingMachineBooze + entities: + - uid: 839 + components: + - pos: 1.5,4.5 + parent: 1 + type: Transform +- proto: VendingMachineCigs + entities: + - uid: 841 + components: + - pos: -4.5,8.5 + parent: 1 + type: Transform +- proto: VendingMachineDiscount + entities: + - uid: 842 + components: + - pos: 5.5,8.5 + parent: 1 + type: Transform +- proto: VendingMachineSec + entities: + - uid: 843 + components: + - pos: -6.5,-8.5 + parent: 1 + type: Transform +- proto: VendingMachineWallMedical + entities: + - uid: 844 + components: + - rot: 1.5707963267948966 rad + pos: 2.5,-8.5 + parent: 1 + type: Transform + - uid: 845 + components: + - rot: 1.5707963267948966 rad + pos: 2.5,-8.5 + parent: 1 + type: Transform +- proto: VendingMachineWinter + entities: + - uid: 846 + components: + - pos: -4.5,9.5 + parent: 1 + type: Transform +- proto: WallShuttle + entities: + - uid: 847 + components: + - rot: 1.5707963267948966 rad + pos: -5.5,-6.5 + parent: 1 + type: Transform + - uid: 848 + components: + - rot: -1.5707963267948966 rad + pos: -7.5,-8.5 + parent: 1 + type: Transform + - uid: 849 + components: + - rot: -1.5707963267948966 rad + pos: 8.5,-8.5 + parent: 1 + type: Transform + - uid: 850 + components: + - rot: -1.5707963267948966 rad + pos: -6.5,-9.5 + parent: 1 + type: Transform + - uid: 851 + components: + - rot: -1.5707963267948966 rad + pos: -6.5,-10.5 + parent: 1 + type: Transform + - uid: 852 + components: + - rot: -1.5707963267948966 rad + pos: -6.5,-11.5 + parent: 1 + type: Transform + - uid: 853 + components: + - rot: -1.5707963267948966 rad + pos: -6.5,-12.5 + parent: 1 + type: Transform + - uid: 854 + components: + - rot: -1.5707963267948966 rad + pos: -5.5,-12.5 + parent: 1 + type: Transform + - uid: 855 + components: + - rot: -1.5707963267948966 rad + pos: -5.5,-13.5 + parent: 1 + type: Transform + - uid: 856 + components: + - rot: -1.5707963267948966 rad + pos: -4.5,-13.5 + parent: 1 + type: Transform + - uid: 857 + components: + - rot: -1.5707963267948966 rad + pos: -4.5,-14.5 + parent: 1 + type: Transform + - uid: 858 + components: + - rot: -1.5707963267948966 rad + pos: -3.5,-14.5 + parent: 1 + type: Transform + - uid: 859 + components: + - rot: -1.5707963267948966 rad + pos: -3.5,-15.5 + parent: 1 + type: Transform + - uid: 860 + components: + - rot: -1.5707963267948966 rad + pos: -2.5,-15.5 + parent: 1 + type: Transform + - uid: 861 + components: + - rot: -1.5707963267948966 rad + pos: -1.5,-15.5 + parent: 1 + type: Transform + - uid: 862 + components: + - rot: -1.5707963267948966 rad + pos: 2.5,-15.5 + parent: 1 + type: Transform + - uid: 863 + components: + - rot: -1.5707963267948966 rad + pos: 3.5,-15.5 + parent: 1 + type: Transform + - uid: 864 + components: + - rot: -1.5707963267948966 rad + pos: 4.5,-15.5 + parent: 1 + type: Transform + - uid: 865 + components: + - rot: -1.5707963267948966 rad + pos: 4.5,-14.5 + parent: 1 + type: Transform + - uid: 866 + components: + - rot: -1.5707963267948966 rad + pos: 5.5,-14.5 + parent: 1 + type: Transform + - uid: 867 + components: + - rot: -1.5707963267948966 rad + pos: 5.5,-13.5 + parent: 1 + type: Transform + - uid: 868 + components: + - rot: -1.5707963267948966 rad + pos: 6.5,-13.5 + parent: 1 + type: Transform + - uid: 869 + components: + - rot: -1.5707963267948966 rad + pos: 6.5,-12.5 + parent: 1 + type: Transform + - uid: 870 + components: + - rot: -1.5707963267948966 rad + pos: 7.5,-12.5 + parent: 1 + type: Transform + - uid: 871 + components: + - rot: -1.5707963267948966 rad + pos: 7.5,-11.5 + parent: 1 + type: Transform + - uid: 872 + components: + - rot: -1.5707963267948966 rad + pos: 7.5,-10.5 + parent: 1 + type: Transform + - uid: 873 + components: + - rot: -1.5707963267948966 rad + pos: 7.5,-9.5 + parent: 1 + type: Transform + - uid: 874 + components: + - rot: -1.5707963267948966 rad + pos: -6.5,3.5 + parent: 1 + type: Transform + - uid: 875 + components: + - rot: -1.5707963267948966 rad + pos: -6.5,6.5 + parent: 1 + type: Transform + - uid: 876 + components: + - rot: -1.5707963267948966 rad + pos: 7.5,3.5 + parent: 1 + type: Transform + - uid: 877 + components: + - rot: -1.5707963267948966 rad + pos: 7.5,6.5 + parent: 1 + type: Transform + - uid: 878 + components: + - rot: -1.5707963267948966 rad + pos: 3.5,4.5 + parent: 1 + type: Transform + - uid: 879 + components: + - rot: -1.5707963267948966 rad + pos: -1.5,6.5 + parent: 1 + type: Transform + - uid: 880 + components: + - rot: -1.5707963267948966 rad + pos: 2.5,6.5 + parent: 1 + type: Transform + - uid: 881 + components: + - rot: 1.5707963267948966 rad + pos: -6.5,-6.5 + parent: 1 + type: Transform + - uid: 882 + components: + - rot: 3.141592653589793 rad + pos: -4.5,10.5 + parent: 1 + type: Transform + - uid: 883 + components: + - rot: 3.141592653589793 rad + pos: 5.5,10.5 + parent: 1 + type: Transform + - uid: 884 + components: + - rot: -1.5707963267948966 rad + pos: 6.5,7.5 + parent: 1 + type: Transform + - uid: 885 + components: + - rot: -1.5707963267948966 rad + pos: -5.5,7.5 + parent: 1 + type: Transform + - uid: 886 + components: + - rot: 1.5707963267948966 rad + pos: -7.5,-6.5 + parent: 1 + type: Transform + - uid: 887 + components: + - rot: -1.5707963267948966 rad + pos: -4.5,11.5 + parent: 1 + type: Transform + - uid: 888 + components: + - rot: 1.5707963267948966 rad + pos: -4.5,-6.5 + parent: 1 + type: Transform + - uid: 889 + components: + - rot: 1.5707963267948966 rad + pos: -2.5,-6.5 + parent: 1 + type: Transform + - uid: 890 + components: + - rot: 1.5707963267948966 rad + pos: -3.5,-6.5 + parent: 1 + type: Transform + - uid: 891 + components: + - rot: 1.5707963267948966 rad + pos: -1.5,-6.5 + parent: 1 + type: Transform + - uid: 892 + components: + - rot: 1.5707963267948966 rad + pos: 5.5,-8.5 + parent: 1 + type: Transform + - uid: 893 + components: + - rot: -1.5707963267948966 rad + pos: 5.5,-6.5 + parent: 1 + type: Transform + - uid: 894 + components: + - rot: -1.5707963267948966 rad + pos: 4.5,-6.5 + parent: 1 + type: Transform + - uid: 895 + components: + - rot: -1.5707963267948966 rad + pos: 3.5,-6.5 + parent: 1 + type: Transform + - uid: 896 + components: + - rot: -1.5707963267948966 rad + pos: 2.5,-6.5 + parent: 1 + type: Transform + - uid: 897 + components: + - rot: 1.5707963267948966 rad + pos: 5.5,-7.5 + parent: 1 + type: Transform + - uid: 898 + components: + - rot: 1.5707963267948966 rad + pos: 2.5,-8.5 + parent: 1 + type: Transform + - uid: 899 + components: + - rot: 1.5707963267948966 rad + pos: 5.5,-9.5 + parent: 1 + type: Transform + - uid: 900 + components: + - rot: 1.5707963267948966 rad + pos: 6.5,-9.5 + parent: 1 + type: Transform + - uid: 901 + components: + - rot: 1.5707963267948966 rad + pos: 2.5,-11.5 + parent: 1 + type: Transform + - uid: 902 + components: + - rot: 1.5707963267948966 rad + pos: 2.5,-12.5 + parent: 1 + type: Transform + - uid: 903 + components: + - rot: 3.141592653589793 rad + pos: -3.5,-9.5 + parent: 1 + type: Transform + - uid: 904 + components: + - rot: -1.5707963267948966 rad + pos: -1.5,-11.5 + parent: 1 + type: Transform + - uid: 905 + components: + - rot: -1.5707963267948966 rad + pos: -2.5,-11.5 + parent: 1 + type: Transform + - uid: 906 + components: + - rot: -1.5707963267948966 rad + pos: -3.5,-11.5 + parent: 1 + type: Transform + - uid: 907 + components: + - rot: -1.5707963267948966 rad + pos: -3.5,-12.5 + parent: 1 + type: Transform + - uid: 908 + components: + - rot: -1.5707963267948966 rad + pos: -3.5,-13.5 + parent: 1 + type: Transform + - uid: 909 + components: + - rot: -1.5707963267948966 rad + pos: -1.5,-8.5 + parent: 1 + type: Transform + - uid: 910 + components: + - rot: 3.141592653589793 rad + pos: 4.5,-12.5 + parent: 1 + type: Transform + - uid: 911 + components: + - rot: 3.141592653589793 rad + pos: 5.5,-12.5 + parent: 1 + type: Transform + - uid: 912 + components: + - rot: 3.141592653589793 rad + pos: 3.5,-12.5 + parent: 1 + type: Transform + - uid: 913 + components: + - pos: 0.5,-0.5 + parent: 1 + type: Transform + - uid: 914 + components: + - rot: -1.5707963267948966 rad + pos: -3.5,-3.5 + parent: 1 + type: Transform + - uid: 915 + components: + - rot: -1.5707963267948966 rad + pos: 4.5,-3.5 + parent: 1 + type: Transform + - uid: 916 + components: + - rot: -1.5707963267948966 rad + pos: 4.5,-0.5 + parent: 1 + type: Transform + - uid: 917 + components: + - rot: -1.5707963267948966 rad + pos: -3.5,-0.5 + parent: 1 + type: Transform + - uid: 918 + components: + - rot: 3.141592653589793 rad + pos: -3.5,2.5 + parent: 1 + type: Transform + - uid: 919 + components: + - rot: -1.5707963267948966 rad + pos: 3.5,2.5 + parent: 1 + type: Transform + - uid: 920 + components: + - rot: 3.141592653589793 rad + pos: 2.5,4.5 + parent: 1 + type: Transform + - uid: 921 + components: + - rot: -1.5707963267948966 rad + pos: 3.5,5.5 + parent: 1 + type: Transform + - uid: 922 + components: + - rot: 3.141592653589793 rad + pos: 3.5,6.5 + parent: 1 + type: Transform + - uid: 923 + components: + - rot: -1.5707963267948966 rad + pos: -2.5,2.5 + parent: 1 + type: Transform + - uid: 924 + components: + - rot: -1.5707963267948966 rad + pos: -2.5,6.5 + parent: 1 + type: Transform + - uid: 925 + components: + - rot: -1.5707963267948966 rad + pos: -2.5,3.5 + parent: 1 + type: Transform + - uid: 926 + components: + - rot: -1.5707963267948966 rad + pos: 4.5,2.5 + parent: 1 + type: Transform + - uid: 927 + components: + - rot: 3.141592653589793 rad + pos: 1.5,2.5 + parent: 1 + type: Transform + - uid: 928 + components: + - rot: 3.141592653589793 rad + pos: 1.5,6.5 + parent: 1 + type: Transform + - uid: 929 + components: + - rot: 3.141592653589793 rad + pos: 0.5,6.5 + parent: 1 + type: Transform + - uid: 930 + components: + - rot: 3.141592653589793 rad + pos: -0.5,6.5 + parent: 1 + type: Transform + - uid: 931 + components: + - rot: -1.5707963267948966 rad + pos: -2.5,5.5 + parent: 1 + type: Transform + - uid: 932 + components: + - rot: -1.5707963267948966 rad + pos: -2.5,4.5 + parent: 1 + type: Transform + - uid: 933 + components: + - rot: -1.5707963267948966 rad + pos: 3.5,3.5 + parent: 1 + type: Transform + - uid: 934 + components: + - pos: -2.5,7.5 + parent: 1 + type: Transform + - uid: 935 + components: + - pos: 3.5,7.5 + parent: 1 + type: Transform + - uid: 936 + components: + - pos: -4.5,7.5 + parent: 1 + type: Transform + - uid: 937 + components: + - pos: 5.5,7.5 + parent: 1 + type: Transform + - uid: 938 + components: + - pos: 0.5,-11.5 + parent: 1 + type: Transform + - uid: 939 + components: + - rot: -1.5707963267948966 rad + pos: 5.5,11.5 + parent: 1 + type: Transform + - uid: 940 + components: + - rot: -1.5707963267948966 rad + pos: -5.5,10.5 + parent: 1 + type: Transform + - uid: 941 + components: + - rot: -1.5707963267948966 rad + pos: 6.5,10.5 + parent: 1 + type: Transform + - uid: 942 + components: + - rot: -1.5707963267948966 rad + pos: -1.5,10.5 + parent: 1 + type: Transform + - uid: 943 + components: + - rot: -1.5707963267948966 rad + pos: 2.5,10.5 + parent: 1 + type: Transform + - uid: 944 + components: + - rot: 3.141592653589793 rad + pos: 3.5,10.5 + parent: 1 + type: Transform + - uid: 945 + components: + - rot: 3.141592653589793 rad + pos: -2.5,10.5 + parent: 1 + type: Transform + - uid: 946 + components: + - pos: 8.5,-6.5 + parent: 1 + type: Transform +- proto: WallShuttleDiagonal + entities: + - uid: 947 + components: + - rot: -1.5707963267948966 rad + pos: 8.5,3.5 + parent: 1 + type: Transform + - uid: 948 + components: + - pos: -7.5,3.5 + parent: 1 + type: Transform + - uid: 949 + components: + - rot: 1.5707963267948966 rad + pos: -7.5,-9.5 + parent: 1 + type: Transform + - uid: 950 + components: + - rot: 3.141592653589793 rad + pos: 8.5,-9.5 + parent: 1 + type: Transform + - uid: 951 + components: + - pos: -6.5,7.5 + parent: 1 + type: Transform + - uid: 952 + components: + - rot: -1.5707963267948966 rad + pos: 7.5,7.5 + parent: 1 + type: Transform +- proto: WallWeaponCapacitorRecharger + entities: + - uid: 953 + components: + - pos: -3.5,-6.5 + parent: 1 + type: Transform + - uid: 954 + components: + - pos: -5.5,-6.5 + parent: 1 + type: Transform +- proto: WardrobePrisonFilled + entities: + - uid: 955 + components: + - pos: -5.5,-10.5 + parent: 1 + type: Transform +- proto: WeaponCapacitorRecharger + entities: + - uid: 956 + components: + - pos: 3.5,13.5 + parent: 1 + type: Transform +- proto: Windoor + entities: + - uid: 957 + components: + - pos: 2.5,-3.5 + parent: 1 + type: Transform + - uid: 958 + components: + - rot: 3.141592653589793 rad + pos: 2.5,-0.5 + parent: 1 + type: Transform + - uid: 959 + components: + - rot: 3.141592653589793 rad + pos: -1.5,-0.5 + parent: 1 + type: Transform + - uid: 960 + components: + - pos: -1.5,-3.5 + parent: 1 + type: Transform +- proto: WindoorSecureCommandLocked + entities: + - uid: 961 + components: + - rot: 1.5707963267948966 rad + pos: -1.5,11.5 + parent: 1 + type: Transform + - uid: 962 + components: + - rot: -1.5707963267948966 rad + pos: 2.5,11.5 + parent: 1 + type: Transform +- proto: WindoorSecureEngineeringLocked + entities: + - uid: 963 + components: + - rot: 1.5707963267948966 rad + pos: -1.5,-13.5 + parent: 1 + type: Transform +- proto: WindoorSecureMedicalLocked + entities: + - uid: 964 + components: + - rot: -1.5707963267948966 rad + pos: 5.5,-10.5 + parent: 1 + type: Transform +- proto: WindowDirectional + entities: + - uid: 965 + components: + - rot: -1.5707963267948966 rad + pos: -3.5,-1.5 + parent: 1 + type: Transform + - uid: 966 + components: + - rot: -1.5707963267948966 rad + pos: -3.5,-2.5 + parent: 1 + type: Transform + - uid: 967 + components: + - rot: 1.5707963267948966 rad + pos: -3.5,-2.5 + parent: 1 + type: Transform + - uid: 968 + components: + - rot: 1.5707963267948966 rad + pos: -3.5,-1.5 + parent: 1 + type: Transform + - uid: 969 + components: + - pos: 1.5,-3.5 + parent: 1 + type: Transform + - uid: 970 + components: + - rot: 3.141592653589793 rad + pos: -0.5,-0.5 + parent: 1 + type: Transform + - uid: 971 + components: + - rot: 3.141592653589793 rad + pos: 1.5,-0.5 + parent: 1 + type: Transform + - uid: 972 + components: + - rot: 1.5707963267948966 rad + pos: 1.5,-0.5 + parent: 1 + type: Transform + - uid: 973 + components: + - rot: 1.5707963267948966 rad + pos: 1.5,-1.5 + parent: 1 + type: Transform + - uid: 974 + components: + - rot: 1.5707963267948966 rad + pos: 1.5,-2.5 + parent: 1 + type: Transform + - uid: 975 + components: + - rot: 1.5707963267948966 rad + pos: 1.5,-3.5 + parent: 1 + type: Transform + - uid: 976 + components: + - pos: 0.5,-3.5 + parent: 1 + type: Transform + - uid: 977 + components: + - pos: -0.5,-3.5 + parent: 1 + type: Transform + - uid: 978 + components: + - rot: -1.5707963267948966 rad + pos: -0.5,-3.5 + parent: 1 + type: Transform + - uid: 979 + components: + - rot: -1.5707963267948966 rad + pos: -0.5,-2.5 + parent: 1 + type: Transform + - uid: 980 + components: + - rot: -1.5707963267948966 rad + pos: -0.5,-1.5 + parent: 1 + type: Transform + - uid: 981 + components: + - rot: -1.5707963267948966 rad + pos: -0.5,-0.5 + parent: 1 + type: Transform + - uid: 982 + components: + - rot: -1.5707963267948966 rad + pos: 4.5,-1.5 + parent: 1 + type: Transform + - uid: 983 + components: + - rot: -1.5707963267948966 rad + pos: 4.5,-2.5 + parent: 1 + type: Transform + - uid: 984 + components: + - rot: 1.5707963267948966 rad + pos: 4.5,-2.5 + parent: 1 + type: Transform + - uid: 985 + components: + - rot: 1.5707963267948966 rad + pos: 4.5,-1.5 + parent: 1 + type: Transform + - uid: 986 + components: + - pos: 3.5,-3.5 + parent: 1 + type: Transform + - uid: 987 + components: + - rot: 3.141592653589793 rad + pos: 3.5,-0.5 + parent: 1 + type: Transform + - uid: 988 + components: + - pos: -2.5,-3.5 + parent: 1 + type: Transform + - uid: 989 + components: + - rot: 3.141592653589793 rad + pos: -2.5,-0.5 + parent: 1 + type: Transform +- proto: WindowReinforcedDirectional + entities: + - uid: 990 + components: + - rot: 1.5707963267948966 rad + pos: -1.5,13.5 + parent: 1 + type: Transform + - uid: 991 + components: + - rot: 1.5707963267948966 rad + pos: -1.5,-12.5 + parent: 1 + type: Transform + - uid: 992 + components: + - rot: 1.5707963267948966 rad + pos: -1.5,-14.5 + parent: 1 + type: Transform + - uid: 993 + components: + - rot: 1.5707963267948966 rad + pos: -1.5,12.5 + parent: 1 + type: Transform + - uid: 994 + components: + - rot: -1.5707963267948966 rad + pos: 2.5,12.5 + parent: 1 + type: Transform + - uid: 995 + components: + - rot: -1.5707963267948966 rad + pos: 2.5,13.5 + parent: 1 + type: Transform +... diff --git a/Resources/Maps/Shuttles/pathfinder.yml b/Resources/Maps/Shuttles/pathfinder.yml new file mode 100644 index 00000000000..d28c1fc8206 --- /dev/null +++ b/Resources/Maps/Shuttles/pathfinder.yml @@ -0,0 +1,3172 @@ +meta: + format: 6 + postmapinit: false +tilemap: + 0: Space + 30: FloorDark + 35: FloorDarkMono + 1: FloorGlass + 65: FloorMetalDiamond + 92: FloorSteel + 99: FloorSteelDirty + 108: FloorTechMaint2 + 124: Lattice + 125: Plating +entities: +- proto: "" + entities: + - uid: 1 + components: + - type: MetaData + name: Pathfinder + - type: Transform + pos: -0.515625,-0.515625 + parent: invalid + - type: MapGrid + chunks: + 0,0: + ind: 0,0 + tiles: fQAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfQAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfQAAAAAAAQAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAbAAAAAAAbAAAAAAAfQAAAAAAAQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 0,-1: + ind: 0,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQAAAAAAQQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQAAAAAAQQAAAAAAfQAAAAAAfQAAAAAAAQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQAAAAAAQQAAAAAAfQAAAAAAYwAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfAAAAAAAfAAAAAAAfQAAAAAAAQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAfQAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAfQAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAbAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAYwAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfQAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAfQAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfQAAAAAAfQAAAAAAAQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + -1,0: + ind: -1,0 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAfQAAAAAAHgAAAAABHgAAAAABHgAAAAACHgAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAfQAAAAAAHgAAAAABHgAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAABfQAAAAAAHgAAAAAAHgAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAADfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + -1,-1: + ind: -1,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAADfQAAAAAAfQAAAAAAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAACfAAAAAAAfAAAAAAAfAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAYwAAAAAAfQAAAAAAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQAAAAAAQQAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQAAAAAAQQAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAfQAAAAAAfQAAAAAAXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQAAAAAAQQAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAfQAAAAAAXAAAAAABXAAAAAAAXAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAfQAAAAAAfQAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAfQAAAAAAXAAAAAADXAAAAAACXAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAfQAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAfQAAAAAAXAAAAAABXAAAAAABXAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAABfQAAAAAAfQAAAAAAYwAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAXAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAABfQAAAAAAfQAAAAAAHgAAAAACHgAAAAAAHgAAAAAAHgAAAAAB + version: 6 + - type: Broadphase + - type: Physics + bodyStatus: InAir + angularDamping: 0.05 + linearDamping: 0.05 + fixedRotation: False + bodyType: Dynamic + - type: Fixtures + fixtures: {} + - type: SalvageShuttle + - type: OccluderTree + - type: SpreaderGrid + - 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: -5,-3 + 1: -6,-3 + 2: -7,-3 + 3: -8,-3 + 4: -8,-4 + 5: -7,-4 + 6: -6,-4 + 7: -5,-4 + 8: -5,-5 + 9: -6,-5 + 10: -7,-5 + 11: 2,-5 + 12: 2,-6 + 13: 5,-6 + 14: 5,-5 + 17: 3,-5 + 18: 4,-5 + 19: 4,-6 + 20: 3,-6 + - node: + color: '#FFFFFFFF' + id: Box + decals: + 15: -3,-9 + 16: 3,-9 + 131: -4,-1 + 132: -2,-3 + 133: -2,-5 + 134: -4,0 + - node: + color: '#3AB3DAFF' + id: DeliveryGreyscale + decals: + 136: 1,2 + - node: + color: '#F9801DFF' + id: DeliveryGreyscale + decals: + 135: 2,2 + - node: + cleanable: True + color: '#FFFFFFFF' + id: Dirt + decals: + 111: 8,-7 + 112: 8,-7 + 113: 8,-5 + 114: 9,-5 + 115: 9,-7 + 116: 10,-7 + 117: 10,-6 + 118: 8,-6 + 119: 6,-3 + 120: 6,-3 + 121: 6,-4 + 122: 6,-3 + 123: 7,-3 + 124: 6,-3 + 125: 8,-3 + 126: 8,-3 + 127: 8,-3 + 128: 8,-3 + 129: 7,-3 + 130: 7,-3 + - node: + cleanable: True + color: '#FFFFFFFF' + id: DirtHeavy + decals: + 21: -4,-6 + 22: -7,-6 + 23: -7,-6 + 24: -8,-5 + 25: -9,-5 + 26: -6,-8 + 27: -4,-8 + 28: -3,-8 + 29: -6,-7 + 30: -6,-8 + 31: 2,-8 + 32: 4,-7 + 33: 1,-6 + 34: -1,-7 + 35: 3,-7 + 36: 3,-5 + 37: 0,-6 + 38: -1,-7 + 39: -3,-7 + 40: -3,-8 + 41: 4,-8 + 42: 4,-9 + 43: 6,-7 + 44: 6,-5 + 45: 6,-7 + 46: 4,-7 + 47: 4,-7 + 48: 1,-7 + 49: -4,-8 + 50: -3,-8 + 51: 0,-8 + 52: -5,-7 + 53: -7,-5 + 54: -6,-5 + 55: -5,-4 + 56: -6,-4 + 57: -8,-5 + 58: -8,-7 + 59: -9,-7 + 60: -8,-7 + 61: -6,-6 + 62: -6,-8 + - node: + cleanable: True + color: '#FFFFFFFF' + id: DirtMedium + decals: + 63: -7,-6 + 64: -7,-6 + 65: -5,-7 + 66: -9,-7 + 67: -9,-5 + 68: -9,-7 + 69: -8,-6 + 70: -8,-6 + 71: -6,-4 + 72: -5,-5 + 73: -6,-5 + 74: -8,-4 + 75: -7,-4 + 76: -5,-6 + 77: -4,-7 + 78: -5,-8 + 79: -2,-8 + 80: -2,-8 + 81: 0,-8 + 82: 1,-8 + 83: 3,-6 + 84: 1,-5 + 85: 2,-6 + 86: 2,-5 + 87: 2,-5 + 88: 5,-6 + 89: 6,-7 + 90: 6,-8 + 91: 6,-6 + 92: 4,-8 + 93: 2,-8 + 94: -1,-7 + 95: -4,-8 + 96: -1,-5 + 97: -2,-4 + 98: -1,-4 + 99: -2,-3 + 100: -3,-1 + 101: -1,0 + 102: -1,-1 + 103: -3,-1 + 104: -3,1 + 105: -2,1 + 106: -2,0 + 107: -1,2 + 108: -3,0 + 109: -4,-1 + 110: -4,0 + - type: GridAtmosphere + version: 2 + data: + tiles: + 0,0: + 0: 1774 + 1: 32768 + -1,0: + 0: 3311 + 1: 8448 + 0,-1: + 0: 61154 + 1,0: + 0: 1 + 1: 288 + 2: 4 + 1,-1: + 0: 4564 + 1: 32768 + 0,-3: + 0: 45872 + -1,-3: + 0: 43136 + 1: 256 + 0,-2: + 0: 61183 + -1,-2: + 0: 59647 + -1,-1: + 0: 63726 + 1,-3: + 1: 256 + 1,-2: + 0: 30711 + 2,-3: + 2: 12288 + 1: 32768 + 2,-2: + 0: 30576 + 2,-1: + 0: 16 + 1: 520 + 2: 64 + -2,0: + 2: 4 + 1: 128 + -3,-3: + 1: 8192 + 2: 49152 + -3,-2: + 0: 52416 + -3,-1: + 1: 2050 + 2: 64 + -2,-3: + 2: 4096 + -2,-2: + 0: 65532 + -2,-1: + 0: 1279 + 1: 8192 + uniqueMixes: + - volume: 2500 + temperature: 293.15 + moles: + - 21.824879 + - 82.10312 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - volume: 2500 + temperature: 293.15 + moles: + - 0 + - 0 + - 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: BecomesStation + id: Pathfinder +- proto: AirAlarm + entities: + - uid: 3 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,1.5 + parent: 1 + - type: DeviceList + devices: + - 153 + - 126 + - 118 + - 140 + - 104 + - 150 + - 276 + - 278 + - 273 + - 173 + - 174 + - 513 + - 512 + - 511 + - 510 + - 263 + - 21 + - 19 + - 17 +- proto: AirlockGlassShuttle + entities: + - uid: 8 + components: + - type: Transform + pos: -0.5,-10.5 + parent: 1 + - uid: 193 + components: + - type: Transform + pos: 1.5,-10.5 + parent: 1 + - uid: 226 + components: + - type: Transform + pos: 0.5,-10.5 + parent: 1 +- proto: AirlockSalvageGlassLocked + entities: + - uid: 6 + components: + - type: Transform + pos: -0.5,-5.5 + parent: 1 + - uid: 88 + components: + - type: Transform + pos: -0.5,-1.5 + parent: 1 + - uid: 187 + components: + - type: Transform + pos: 7.5,-6.5 + parent: 1 +- proto: AirlockSalvageLocked + entities: + - uid: 5 + components: + - type: Transform + pos: 1.5,-3.5 + parent: 1 + - uid: 7 + components: + - type: Transform + pos: 1.5,-8.5 + parent: 1 + - uid: 86 + components: + - type: Transform + pos: 0.5,-8.5 + parent: 1 + - uid: 144 + components: + - type: Transform + pos: -0.5,-8.5 + parent: 1 +- proto: AmeController + entities: + - uid: 70 + components: + - type: Transform + pos: 3.5,-2.5 + parent: 1 + - type: AmeController + injecting: True + - type: ContainerContainer + containers: + fuelSlot: !type:ContainerSlot + showEnts: False + occludes: True + ent: 72 +- proto: AmeJar + entities: + - uid: 72 + components: + - type: Transform + parent: 70 + - type: Physics + canCollide: False + - uid: 117 + components: + - type: Transform + pos: 2.9327545,-2.3777018 + parent: 1 + - uid: 363 + components: + - type: Transform + pos: 2.7608795,-2.3620768 + parent: 1 +- proto: AmeShielding + entities: + - uid: 14 + components: + - type: Transform + pos: 3.5,-1.5 + parent: 1 + - uid: 22 + components: + - type: Transform + pos: 4.5,0.5 + parent: 1 + - uid: 79 + components: + - type: Transform + pos: 2.5,-0.5 + parent: 1 + - uid: 102 + components: + - type: Transform + pos: 3.5,-0.5 + parent: 1 + - type: PointLight + radius: 2 + enabled: True + - uid: 103 + components: + - type: Transform + pos: 4.5,-1.5 + parent: 1 + - uid: 105 + components: + - type: Transform + pos: 4.5,-0.5 + parent: 1 + - uid: 115 + components: + - type: Transform + pos: 2.5,0.5 + parent: 1 + - uid: 172 + components: + - type: Transform + pos: 3.5,0.5 + parent: 1 + - uid: 334 + components: + - type: Transform + pos: 2.5,-1.5 + parent: 1 +- proto: APCBasic + entities: + - uid: 96 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-3.5 + parent: 1 +- proto: AtmosDeviceFanTiny + entities: + - uid: 9 + components: + - type: Transform + pos: 0.5,-10.5 + parent: 1 + - uid: 25 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,-4.5 + parent: 1 + - uid: 26 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,-6.5 + parent: 1 + - uid: 27 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,-5.5 + parent: 1 + - uid: 28 + components: + - type: Transform + pos: 1.5,-10.5 + parent: 1 + - uid: 29 + components: + - type: Transform + pos: -0.5,-10.5 + parent: 1 +- proto: AtmosFixBlockerMarker + entities: + - uid: 23 + components: + - type: Transform + pos: 4.5,-9.5 + parent: 1 + - uid: 42 + components: + - type: Transform + pos: 10.5,-2.5 + parent: 1 + - uid: 82 + components: + - type: Transform + pos: -10.5,-3.5 + parent: 1 + - uid: 89 + components: + - type: Transform + pos: -2.5,3.5 + parent: 1 + - uid: 90 + components: + - type: Transform + pos: 11.5,-3.5 + parent: 1 + - uid: 159 + components: + - type: Transform + pos: -3.5,-9.5 + parent: 1 + - uid: 230 + components: + - type: Transform + pos: -10.5,-8.5 + parent: 1 + - uid: 232 + components: + - type: Transform + pos: -8.5,-8.5 + parent: 1 + - uid: 233 + components: + - type: Transform + pos: -7.5,-8.5 + parent: 1 + - uid: 234 + components: + - type: Transform + pos: -9.5,-2.5 + parent: 1 + - uid: 236 + components: + - type: Transform + pos: -8.5,-1.5 + parent: 1 + - uid: 238 + components: + - type: Transform + pos: -6.5,-0.5 + parent: 1 + - uid: 239 + components: + - type: Transform + pos: -5.5,0.5 + parent: 1 + - uid: 240 + components: + - type: Transform + pos: -4.5,1.5 + parent: 1 + - uid: 241 + components: + - type: Transform + pos: 3.5,3.5 + parent: 1 + - uid: 242 + components: + - type: Transform + pos: 4.5,2.5 + parent: 1 + - uid: 243 + components: + - type: Transform + pos: 5.5,1.5 + parent: 1 + - uid: 244 + components: + - type: Transform + pos: 6.5,0.5 + parent: 1 + - uid: 245 + components: + - type: Transform + pos: 7.5,-0.5 + parent: 1 + - uid: 251 + components: + - type: Transform + pos: 9.5,-1.5 + parent: 1 + - uid: 253 + components: + - type: Transform + pos: 11.5,-8.5 + parent: 1 + - uid: 254 + components: + - type: Transform + pos: 9.5,-8.5 + parent: 1 + - uid: 255 + components: + - type: Transform + pos: 8.5,-8.5 + parent: 1 + - uid: 309 + components: + - type: Transform + pos: -3.5,2.5 + parent: 1 +- proto: Bed + entities: + - uid: 30 + components: + - type: Transform + pos: -2.5,-4.5 + parent: 1 + - uid: 31 + components: + - type: Transform + pos: -2.5,-2.5 + parent: 1 +- proto: BedsheetSpawner + entities: + - uid: 32 + components: + - type: Transform + pos: -2.5,-4.5 + parent: 1 + - uid: 33 + components: + - type: Transform + pos: -2.5,-2.5 + parent: 1 +- proto: BlastDoor + entities: + - uid: 34 + components: + - type: Transform + pos: -10.5,-4.5 + parent: 1 + - type: DeviceLinkSink + links: + - 225 + - uid: 35 + components: + - type: Transform + pos: -10.5,-5.5 + parent: 1 + - type: DeviceLinkSink + links: + - 225 + - uid: 36 + components: + - type: Transform + pos: -10.5,-6.5 + parent: 1 + - type: DeviceLinkSink + links: + - 225 +- proto: ButtonFrameGrey + entities: + - uid: 157 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-2.5 + parent: 1 + - uid: 191 + components: + - type: Transform + pos: -9.5,-3.5 + parent: 1 +- proto: CableApcExtension + entities: + - uid: 20 + components: + - type: Transform + pos: -0.5,-5.5 + parent: 1 + - uid: 24 + components: + - type: Transform + pos: 6.5,-6.5 + parent: 1 + - uid: 38 + components: + - type: Transform + pos: -4.5,-6.5 + parent: 1 + - uid: 43 + components: + - type: Transform + pos: 3.5,-7.5 + parent: 1 + - uid: 44 + components: + - type: Transform + pos: 7.5,-2.5 + parent: 1 + - uid: 45 + components: + - type: Transform + pos: 6.5,-2.5 + parent: 1 + - uid: 46 + components: + - type: Transform + pos: 6.5,-3.5 + parent: 1 + - uid: 47 + components: + - type: Transform + pos: 6.5,-4.5 + parent: 1 + - uid: 48 + components: + - type: Transform + pos: 6.5,-5.5 + parent: 1 + - uid: 49 + components: + - type: Transform + pos: -2.5,0.5 + parent: 1 + - uid: 50 + components: + - type: Transform + pos: -1.5,0.5 + parent: 1 + - uid: 51 + components: + - type: Transform + pos: -1.5,-0.5 + parent: 1 + - uid: 54 + components: + - type: Transform + pos: -0.5,-0.5 + parent: 1 + - uid: 55 + components: + - type: Transform + pos: -3.5,-7.5 + parent: 1 + - uid: 56 + components: + - type: Transform + pos: -2.5,-7.5 + parent: 1 + - uid: 57 + components: + - type: Transform + pos: -5.5,-6.5 + parent: 1 + - uid: 58 + components: + - type: Transform + pos: -6.5,-6.5 + parent: 1 + - uid: 61 + components: + - type: Transform + pos: -0.5,-1.5 + parent: 1 + - uid: 62 + components: + - type: Transform + pos: -0.5,-2.5 + parent: 1 + - uid: 64 + components: + - type: Transform + pos: 4.5,-6.5 + parent: 1 + - uid: 65 + components: + - type: Transform + pos: 7.5,-6.5 + parent: 1 + - uid: 66 + components: + - type: Transform + pos: 8.5,-6.5 + parent: 1 + - uid: 71 + components: + - type: Transform + pos: -1.5,-7.5 + parent: 1 + - uid: 77 + components: + - type: Transform + pos: 9.5,-6.5 + parent: 1 + - uid: 91 + components: + - type: Transform + pos: 2.5,-7.5 + parent: 1 + - uid: 93 + components: + - type: Transform + pos: -7.5,-6.5 + parent: 1 + - uid: 94 + components: + - type: Transform + pos: -1.5,-3.5 + parent: 1 + - uid: 97 + components: + - type: Transform + pos: 1.5,0.5 + parent: 1 + - uid: 100 + components: + - type: Transform + pos: 1.5,-2.5 + parent: 1 + - uid: 106 + components: + - type: Transform + pos: 3.5,-6.5 + parent: 1 + - uid: 108 + components: + - type: Transform + pos: -7.5,-4.5 + parent: 1 + - uid: 109 + components: + - type: Transform + pos: 1.5,-3.5 + parent: 1 + - uid: 110 + components: + - type: Transform + pos: -7.5,-3.5 + parent: 1 + - uid: 111 + components: + - type: Transform + pos: -0.5,-3.5 + parent: 1 + - uid: 112 + components: + - type: Transform + pos: -0.5,-7.5 + parent: 1 + - uid: 123 + components: + - type: Transform + pos: 1.5,-0.5 + parent: 1 + - uid: 138 + components: + - type: Transform + pos: 1.5,-7.5 + parent: 1 + - uid: 139 + components: + - type: Transform + pos: 0.5,-7.5 + parent: 1 + - uid: 145 + components: + - type: Transform + pos: 1.5,-1.5 + parent: 1 + - uid: 151 + components: + - type: Transform + pos: 0.5,-3.5 + parent: 1 + - uid: 155 + components: + - type: Transform + pos: -7.5,-5.5 + parent: 1 + - uid: 177 + components: + - type: Transform + pos: -2.5,-3.5 + parent: 1 + - uid: 208 + components: + - type: Transform + pos: -0.5,-6.5 + parent: 1 + - uid: 348 + components: + - type: Transform + pos: -3.5,-6.5 + parent: 1 + - uid: 352 + components: + - type: Transform + pos: -0.5,-4.5 + parent: 1 + - uid: 362 + components: + - type: Transform + pos: 5.5,-6.5 + parent: 1 +- proto: CableHV + entities: + - uid: 13 + components: + - type: Transform + pos: 3.5,-2.5 + parent: 1 + - uid: 299 + components: + - type: Transform + pos: 4.5,-2.5 + parent: 1 + - uid: 305 + components: + - type: Transform + pos: 4.5,-3.5 + parent: 1 +- proto: CableMV + entities: + - uid: 16 + components: + - type: Transform + pos: -0.5,-3.5 + parent: 1 + - uid: 53 + components: + - type: Transform + pos: 4.5,-3.5 + parent: 1 + - uid: 68 + components: + - type: Transform + pos: 2.5,-6.5 + parent: 1 + - uid: 73 + components: + - type: Transform + pos: 4.5,-4.5 + parent: 1 + - uid: 74 + components: + - type: Transform + pos: 4.5,-5.5 + parent: 1 + - uid: 75 + components: + - type: Transform + pos: 4.5,-6.5 + parent: 1 + - uid: 76 + components: + - type: Transform + pos: 3.5,-6.5 + parent: 1 + - uid: 78 + components: + - type: Transform + pos: 1.5,-6.5 + parent: 1 + - uid: 95 + components: + - type: Transform + pos: 0.5,-3.5 + parent: 1 + - uid: 107 + components: + - type: Transform + pos: 4.5,-5.5 + parent: 1 + - uid: 113 + components: + - type: Transform + pos: 0.5,-6.5 + parent: 1 + - uid: 281 + components: + - type: Transform + pos: -0.5,-4.5 + parent: 1 + - uid: 322 + components: + - type: Transform + pos: -0.5,-6.5 + parent: 1 + - uid: 356 + components: + - type: Transform + pos: -0.5,-5.5 + parent: 1 +- proto: CableTerminal + entities: + - uid: 98 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-2.5 + parent: 1 +- proto: CargoPallet + entities: + - uid: 158 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,-1.5 + parent: 1 +- proto: CarpetBlack + entities: + - uid: 154 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-2.5 + parent: 1 + - uid: 259 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-3.5 + parent: 1 + - uid: 501 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-3.5 + parent: 1 + - uid: 502 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-4.5 + parent: 1 + - uid: 503 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-2.5 + parent: 1 + - uid: 505 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-4.5 + parent: 1 +- proto: Chair + entities: + - uid: 162 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,-4.5 + parent: 1 + - uid: 163 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,-5.5 + parent: 1 +- proto: ChairPilotSeat + entities: + - uid: 165 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,1.5 + parent: 1 +- proto: ClosetWallEmergencyFilledRandom + entities: + - uid: 160 + components: + - type: Transform + pos: -4.5,-1.5 + parent: 1 +- proto: ClosetWallFireFilledRandom + entities: + - uid: 92 + components: + - type: Transform + pos: 2.5,-3.5 + parent: 1 +- proto: ComputerBroken + entities: + - uid: 41 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,-7.5 + parent: 1 + - uid: 164 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,-7.5 + parent: 1 + - uid: 336 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,-7.5 + parent: 1 +- proto: ComputerRadar + entities: + - uid: 67 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,1.5 + parent: 1 +- proto: ComputerSalvageExpedition + entities: + - uid: 257 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,1.5 + parent: 1 +- proto: ComputerShuttleSalvage + entities: + - uid: 258 + components: + - type: Transform + pos: -1.5,2.5 + parent: 1 +- proto: DefibrillatorCabinetFilled + entities: + - uid: 283 + components: + - type: Transform + pos: -2.5,-5.5 + parent: 1 +- proto: DisposalBend + entities: + - uid: 184 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,-2.5 + parent: 1 +- proto: DisposalPipe + entities: + - uid: 185 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,-2.5 + parent: 1 + - uid: 189 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,-3.5 + parent: 1 +- proto: DisposalPipeBroken + entities: + - uid: 186 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,-4.5 + parent: 1 +- proto: DisposalTrunk + entities: + - uid: 188 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,-2.5 + parent: 1 +- proto: DrinkMugMetal + entities: + - uid: 195 + components: + - type: Transform + pos: 9.636227,-6.42377 + parent: 1 + - uid: 196 + components: + - type: Transform + pos: 10.542477,-6.408145 + parent: 1 +- proto: EmergencyLight + entities: + - uid: 183 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-9.5 + parent: 1 + - uid: 262 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,-4.5 + parent: 1 + - uid: 265 + components: + - type: Transform + pos: 5.5,-4.5 + parent: 1 + - uid: 274 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,0.5 + parent: 1 + - uid: 275 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-4.5 + parent: 1 + - uid: 277 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,0.5 + parent: 1 +- proto: ExtinguisherCabinetFilled + entities: + - uid: 84 + components: + - type: Transform + pos: -1.5,-5.5 + parent: 1 +- proto: FirelockEdge + entities: + - uid: 173 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-6.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 3 + - uid: 174 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-7.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 3 + - uid: 510 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-4.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 3 + - uid: 511 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-5.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 3 + - uid: 512 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-6.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 3 + - uid: 513 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-7.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 3 +- proto: FirelockGlass + entities: + - uid: 17 + components: + - type: Transform + pos: -0.5,-1.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 3 + - uid: 19 + components: + - type: Transform + pos: -0.5,-5.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 3 + - uid: 21 + components: + - type: Transform + pos: 1.5,-3.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 3 + - uid: 263 + components: + - type: Transform + pos: 7.5,-6.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 3 +- proto: FloorDrain + entities: + - uid: 198 + components: + - type: Transform + pos: 7.5,-2.5 + parent: 1 + - type: Fixtures + fixtures: {} +- proto: Fulton + entities: + - uid: 197 + components: + - type: Transform + pos: 3.7384453,-4.482957 + parent: 1 + - type: Physics + angularDamping: 0 + linearDamping: 0 + - uid: 260 + components: + - type: Transform + pos: 4.4102926,-4.1582947 + parent: 1 + - uid: 292 + components: + - type: Transform + pos: 4.722792,-4.2364197 + parent: 1 + - uid: 314 + components: + - type: Transform + pos: 3.5509453,-4.186082 + parent: 1 +- proto: GasMixerFlipped + entities: + - uid: 182 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,1.5 + parent: 1 + - type: GasMixer + inletTwoConcentration: 0.79 + inletOneConcentration: 0.21 + - type: AtmosPipeColor + color: '#0055CCFF' +- proto: GasPassiveVent + entities: + - uid: 37 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,-8.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' +- proto: GasPipeBend + entities: + - uid: 124 + components: + - type: Transform + pos: -5.5,-6.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 128 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,-7.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 131 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,-7.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 152 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,-6.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 178 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,0.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 203 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,1.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 222 + components: + - type: Transform + pos: -4.5,-5.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 227 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-6.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' +- proto: GasPipeFourway + entities: + - uid: 204 + components: + - type: Transform + pos: 1.5,-6.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' +- proto: GasPipeStraight + entities: + - uid: 99 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 114 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 119 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-6.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 122 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-5.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 125 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,0.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 129 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,-6.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 130 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,-7.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 132 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-7.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 133 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-7.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 135 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-7.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 141 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-6.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 142 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,-7.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 146 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,-7.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 147 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,-7.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 149 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,-6.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 167 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-4.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 168 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-2.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 175 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-1.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 181 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-6.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 194 + components: + - type: Transform + pos: -8.5,-7.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 199 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,-6.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 201 + components: + - type: Transform + pos: -1.5,-1.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 202 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,-6.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 209 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-6.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 211 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,0.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 213 + components: + - type: Transform + pos: -1.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 214 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-5.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 216 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,-6.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 217 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,-6.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 218 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,-6.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 219 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,-6.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 220 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,-6.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 221 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,-6.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 224 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,-5.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 228 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-7.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 229 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-4.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 231 + components: + - type: Transform + pos: -0.5,-1.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 237 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-3.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 247 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,-6.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 248 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-3.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 249 + components: + - type: Transform + pos: 6.5,-4.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 250 + components: + - type: Transform + pos: 6.5,-3.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 252 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,0.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 320 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-5.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 321 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-4.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 325 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-3.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' +- proto: GasPipeTJunction + entities: + - uid: 120 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-7.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 121 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,-6.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 127 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,-5.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 148 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,-7.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 166 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-4.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 206 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-7.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 207 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-2.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 215 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-6.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 256 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-2.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 261 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 267 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,-6.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' +- proto: GasPort + entities: + - uid: 268 + components: + - type: Transform + pos: 2.5,2.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 269 + components: + - type: Transform + pos: 1.5,2.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' +- proto: GasVentPump + entities: + - uid: 60 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,-5.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 104 + components: + - type: Transform + pos: 3.5,-5.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 3 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 140 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-7.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 3 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 212 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,0.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 235 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-2.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 273 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,-6.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 3 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 372 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-2.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' +- proto: GasVentScrubber + entities: + - uid: 118 + components: + - type: Transform + pos: 0.5,-6.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 3 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 126 + components: + - type: Transform + pos: -0.5,1.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 3 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 150 + components: + - type: Transform + pos: 4.5,-5.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 3 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 153 + components: + - type: Transform + pos: -6.5,-5.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 3 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 205 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 210 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-4.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 276 + components: + - type: Transform + pos: 6.5,-2.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 3 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 278 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,-5.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 3 + - type: AtmosPipeColor + color: '#990000FF' +- proto: GravityGeneratorMini + entities: + - uid: 333 + components: + - type: Transform + pos: 3.5,1.5 + parent: 1 +- proto: Grille + entities: + - uid: 10 + components: + - type: Transform + pos: -1.5,3.5 + parent: 1 + - uid: 272 + components: + - type: Transform + pos: 11.5,-4.5 + parent: 1 + - uid: 279 + components: + - type: Transform + pos: 7.5,-4.5 + parent: 1 + - uid: 280 + components: + - type: Transform + pos: -0.5,3.5 + parent: 1 + - uid: 315 + components: + - type: Transform + pos: 0.5,-4.5 + parent: 1 + - uid: 318 + components: + - type: Transform + pos: 5.5,-8.5 + parent: 1 + - uid: 319 + components: + - type: Transform + pos: -4.5,-8.5 + parent: 1 + - uid: 329 + components: + - type: Transform + pos: 7.5,-5.5 + parent: 1 + - uid: 330 + components: + - type: Transform + pos: 11.5,-5.5 + parent: 1 + - uid: 340 + components: + - type: Transform + pos: -2.5,2.5 + parent: 1 + - uid: 342 + components: + - type: Transform + pos: 11.5,-6.5 + parent: 1 + - uid: 345 + components: + - type: Transform + pos: -7.5,-1.5 + parent: 1 + - uid: 392 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-9.5 + parent: 1 + - uid: 396 + components: + - type: Transform + pos: -5.5,-8.5 + parent: 1 + - uid: 465 + components: + - type: Transform + pos: 6.5,-8.5 + parent: 1 + - uid: 494 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,-9.5 + parent: 1 + - uid: 499 + components: + - type: Transform + pos: 1.5,3.5 + parent: 1 + - uid: 500 + components: + - type: Transform + pos: 2.5,3.5 + parent: 1 +- proto: GrilleDiagonal + entities: + - uid: 294 + components: + - type: Transform + pos: -2.5,3.5 + parent: 1 + - uid: 297 + components: + - type: Transform + pos: -3.5,2.5 + parent: 1 +- proto: Gyroscope + entities: + - uid: 143 + components: + - type: Transform + pos: 2.5,1.5 + parent: 1 +- proto: HospitalCurtainsOpen + entities: + - uid: 284 + components: + - type: Transform + pos: 6.5,-2.5 + parent: 1 + - uid: 285 + components: + - type: Transform + pos: -2.5,-2.5 + parent: 1 + - uid: 286 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-4.5 + parent: 1 +- proto: LockerFreezer + entities: + - uid: 288 + components: + - type: Transform + pos: 8.5,-4.5 + parent: 1 +- proto: LockerSalvageSpecialistFilled + entities: + - uid: 69 + components: + - type: Transform + pos: -3.5,0.5 + parent: 1 + - uid: 223 + components: + - type: Transform + pos: -1.5,-4.5 + parent: 1 +- proto: NitrogenCanister + entities: + - uid: 11 + components: + - type: Transform + anchored: True + pos: 2.5,2.5 + parent: 1 + - type: Physics + bodyType: Static +- proto: OreProcessor + entities: + - uid: 365 + components: + - type: Transform + pos: -6.5,-2.5 + parent: 1 +- proto: OxygenCanister + entities: + - uid: 12 + components: + - type: Transform + anchored: True + pos: 1.5,2.5 + parent: 1 + - type: Physics + bodyType: Static +- proto: PaperBin5 + entities: + - uid: 291 + components: + - type: Transform + pos: -0.5,0.5 + parent: 1 +- proto: PoweredSmallLight + entities: + - uid: 18 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,-2.5 + parent: 1 + - uid: 81 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,-6.5 + parent: 1 + - uid: 264 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,-6.5 + parent: 1 + - uid: 266 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,-7.5 + parent: 1 + - uid: 270 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,-7.5 + parent: 1 + - uid: 293 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-3.5 + parent: 1 + - uid: 301 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,-2.5 + parent: 1 + - uid: 303 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-0.5 + parent: 1 + - uid: 304 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-0.5 + parent: 1 + - uid: 324 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-9.5 + parent: 1 +- proto: Rack + entities: + - uid: 2 + components: + - type: Transform + pos: 3.5,-4.5 + parent: 1 + - uid: 39 + components: + - type: Transform + pos: 4.5,-4.5 + parent: 1 +- proto: RandomPosterAny + entities: + - uid: 4 + components: + - type: Transform + pos: -2.5,-1.5 + parent: 1 + - uid: 87 + components: + - type: Transform + pos: 0.5,0.5 + parent: 1 + - uid: 170 + components: + - type: Transform + pos: 3.5,-3.5 + parent: 1 + - uid: 171 + components: + - type: Transform + pos: 7.5,-3.5 + parent: 1 + - uid: 176 + components: + - type: Transform + pos: -7.5,-7.5 + parent: 1 + - uid: 180 + components: + - type: Transform + pos: -3.5,-3.5 + parent: 1 + - uid: 355 + components: + - type: Transform + pos: 9.5,-3.5 + parent: 1 + - uid: 360 + components: + - type: Transform + pos: -8.5,-3.5 + parent: 1 +- proto: ReinforcedWindow + entities: + - uid: 83 + components: + - type: Transform + pos: -7.5,-1.5 + parent: 1 + - uid: 85 + components: + - type: Transform + pos: 11.5,-6.5 + parent: 1 + - uid: 271 + components: + - type: Transform + pos: 11.5,-4.5 + parent: 1 + - uid: 289 + components: + - type: Transform + pos: -1.5,3.5 + parent: 1 + - uid: 323 + components: + - type: Transform + pos: 1.5,3.5 + parent: 1 + - uid: 326 + components: + - type: Transform + pos: -2.5,2.5 + parent: 1 + - uid: 327 + components: + - type: Transform + pos: 11.5,-5.5 + parent: 1 + - uid: 332 + components: + - type: Transform + pos: -0.5,3.5 + parent: 1 + - uid: 391 + components: + - type: Transform + pos: 6.5,-8.5 + parent: 1 + - uid: 394 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,-9.5 + parent: 1 + - uid: 398 + components: + - type: Transform + pos: -4.5,-8.5 + parent: 1 + - uid: 421 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-9.5 + parent: 1 + - uid: 442 + components: + - type: Transform + pos: 0.5,-4.5 + parent: 1 + - uid: 468 + components: + - type: Transform + pos: -5.5,-8.5 + parent: 1 + - uid: 469 + components: + - type: Transform + pos: 5.5,-8.5 + parent: 1 + - uid: 490 + components: + - type: Transform + pos: 2.5,3.5 + parent: 1 +- proto: ReinforcedWindowDiagonal + entities: + - uid: 287 + components: + - type: Transform + pos: -2.5,3.5 + parent: 1 + - uid: 328 + components: + - type: Transform + pos: -3.5,2.5 + parent: 1 +- proto: SalvageMagnet + entities: + - uid: 169 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,2.5 + parent: 1 +- proto: ShuttersNormalOpen + entities: + - uid: 520 + components: + - type: Transform + pos: 0.5,-4.5 + parent: 1 + - type: DeviceLinkSink + links: + - 156 +- proto: SignalButtonDirectional + entities: + - uid: 156 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-2.5 + parent: 1 + - type: DeviceLinkSource + linkedPorts: + 520: + - Pressed: Toggle + - uid: 225 + components: + - type: Transform + pos: -9.5,-3.5 + parent: 1 + - type: DeviceLinkSource + linkedPorts: + 34: + - Pressed: Toggle + 35: + - Pressed: Toggle + 36: + - Pressed: Toggle +- proto: SignBridge + entities: + - uid: 354 + components: + - type: Transform + pos: -1.5,-1.5 + parent: 1 +- proto: SinkEmpty + entities: + - uid: 192 + components: + - type: Transform + pos: 7.5,-2.5 + parent: 1 +- proto: SMESBasic + entities: + - uid: 59 + components: + - type: Transform + pos: 4.5,-2.5 + parent: 1 +- proto: SubstationWallBasic + entities: + - uid: 52 + components: + - type: Transform + pos: 4.5,-3.5 + parent: 1 +- proto: SuitStorageEVAAlternate + entities: + - uid: 200 + components: + - type: Transform + pos: 3.5,-8.5 + parent: 1 +- proto: SuitStorageSalv + entities: + - uid: 40 + components: + - type: Transform + pos: -1.5,-2.5 + parent: 1 + - uid: 116 + components: + - type: Transform + pos: -3.5,-0.5 + parent: 1 +- proto: Table + entities: + - uid: 364 + components: + - type: Transform + pos: 9.5,-6.5 + parent: 1 + - uid: 521 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,-6.5 + parent: 1 +- proto: TableReinforced + entities: + - uid: 367 + components: + - type: Transform + pos: -0.5,0.5 + parent: 1 +- proto: Thruster + entities: + - uid: 349 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,-2.5 + parent: 1 + - uid: 351 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,-2.5 + parent: 1 + - uid: 368 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,-8.5 + parent: 1 + - uid: 369 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,-8.5 + parent: 1 + - uid: 370 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,-8.5 + parent: 1 + - uid: 371 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,-8.5 + parent: 1 + - uid: 374 + components: + - type: Transform + pos: -5.5,0.5 + parent: 1 + - uid: 375 + components: + - type: Transform + pos: 6.5,0.5 + parent: 1 +- proto: ToiletEmpty + entities: + - uid: 337 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,-2.5 + parent: 1 +- proto: VendingMachineTankDispenserEVA + entities: + - uid: 335 + components: + - type: Transform + pos: -2.5,-8.5 + parent: 1 +- proto: WallReinforced + entities: + - uid: 190 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,-7.5 + parent: 1 + - uid: 246 + components: + - type: Transform + pos: -9.5,-7.5 + parent: 1 + - uid: 295 + components: + - type: Transform + pos: 2.5,-10.5 + parent: 1 + - uid: 296 + components: + - type: Transform + pos: 5.5,-0.5 + parent: 1 + - uid: 306 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-9.5 + parent: 1 + - uid: 313 + components: + - type: Transform + pos: -1.5,-10.5 + parent: 1 + - uid: 338 + components: + - type: Transform + pos: -8.5,-3.5 + parent: 1 + - uid: 339 + components: + - type: Transform + pos: -4.5,-0.5 + parent: 1 + - uid: 341 + components: + - type: Transform + pos: -9.5,-8.5 + parent: 1 + - uid: 346 + components: + - type: Transform + pos: -5.5,-0.5 + parent: 1 + - uid: 347 + components: + - type: Transform + pos: -4.5,0.5 + parent: 1 + - uid: 350 + components: + - type: Transform + pos: -6.5,-7.5 + parent: 1 + - uid: 380 + components: + - type: Transform + pos: -10.5,-7.5 + parent: 1 + - uid: 383 + components: + - type: Transform + pos: -7.5,-7.5 + parent: 1 + - uid: 386 + components: + - type: Transform + pos: 11.5,-7.5 + parent: 1 + - uid: 387 + components: + - type: Transform + pos: 10.5,-7.5 + parent: 1 + - uid: 388 + components: + - type: Transform + pos: 9.5,-7.5 + parent: 1 + - uid: 389 + components: + - type: Transform + pos: 8.5,-7.5 + parent: 1 + - uid: 390 + components: + - type: Transform + pos: 7.5,-7.5 + parent: 1 + - uid: 399 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-9.5 + parent: 1 + - uid: 404 + components: + - type: Transform + pos: -9.5,-3.5 + parent: 1 + - uid: 405 + components: + - type: Transform + pos: -8.5,-2.5 + parent: 1 + - uid: 407 + components: + - type: Transform + pos: -6.5,-1.5 + parent: 1 + - uid: 411 + components: + - type: Transform + pos: 4.5,1.5 + parent: 1 + - uid: 412 + components: + - type: Transform + pos: 5.5,0.5 + parent: 1 + - uid: 413 + components: + - type: Transform + pos: 6.5,-0.5 + parent: 1 + - uid: 414 + components: + - type: Transform + pos: 7.5,-1.5 + parent: 1 + - uid: 415 + components: + - type: Transform + pos: 8.5,-1.5 + parent: 1 + - uid: 416 + components: + - type: Transform + pos: 9.5,-2.5 + parent: 1 + - uid: 417 + components: + - type: Transform + pos: 10.5,-3.5 + parent: 1 + - uid: 418 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-8.5 + parent: 1 + - uid: 420 + components: + - type: Transform + pos: 2.5,-8.5 + parent: 1 + - uid: 423 + components: + - type: Transform + pos: 3.5,2.5 + parent: 1 + - uid: 425 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,-8.5 + parent: 1 + - uid: 426 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,-8.5 + parent: 1 + - uid: 427 + components: + - type: Transform + pos: 10.5,-8.5 + parent: 1 + - uid: 428 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,1.5 + parent: 1 + - uid: 429 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,3.5 + parent: 1 + - uid: 467 + components: + - type: Transform + pos: 4.5,-8.5 + parent: 1 + - uid: 473 + components: + - type: Transform + pos: -3.5,-8.5 + parent: 1 +- proto: WallReinforcedDiagonal + entities: + - uid: 298 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,-1.5 + parent: 1 + - uid: 300 + components: + - type: Transform + pos: -6.5,-0.5 + parent: 1 + - uid: 302 + components: + - type: Transform + pos: -8.5,-1.5 + parent: 1 + - uid: 307 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,-8.5 + parent: 1 + - uid: 308 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,2.5 + parent: 1 + - uid: 310 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,3.5 + parent: 1 + - uid: 311 + components: + - type: Transform + pos: -4.5,1.5 + parent: 1 + - uid: 312 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,-8.5 + parent: 1 + - uid: 316 + components: + - type: Transform + pos: -10.5,-3.5 + parent: 1 + - uid: 317 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.5,-3.5 + parent: 1 + - uid: 343 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,-9.5 + parent: 1 + - uid: 344 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-9.5 + parent: 1 + - uid: 353 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,1.5 + parent: 1 + - uid: 361 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,-0.5 + parent: 1 +- proto: WallSolid + entities: + - uid: 15 + components: + - type: Transform + pos: 0.5,0.5 + parent: 1 + - uid: 63 + components: + - type: Transform + pos: 3.5,-3.5 + parent: 1 + - uid: 80 + components: + - type: Transform + pos: 6.5,-1.5 + parent: 1 + - uid: 101 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,-1.5 + parent: 1 + - uid: 134 + components: + - type: Transform + pos: -2.5,-5.5 + parent: 1 + - uid: 136 + components: + - type: Transform + pos: 2.5,-3.5 + parent: 1 + - uid: 137 + components: + - type: Transform + pos: -1.5,-5.5 + parent: 1 + - uid: 179 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-5.5 + parent: 1 + - uid: 290 + components: + - type: Transform + pos: 0.5,-0.5 + parent: 1 + - uid: 359 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,-5.5 + parent: 1 + - uid: 434 + components: + - type: Transform + pos: -2.5,-1.5 + parent: 1 + - uid: 436 + components: + - type: Transform + pos: 0.5,-3.5 + parent: 1 + - uid: 438 + components: + - type: Transform + pos: 0.5,-1.5 + parent: 1 + - uid: 439 + components: + - type: Transform + pos: -1.5,-1.5 + parent: 1 + - uid: 441 + components: + - type: Transform + pos: 0.5,-2.5 + parent: 1 + - uid: 444 + components: + - type: Transform + pos: 0.5,2.5 + parent: 1 + - uid: 446 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-3.5 + parent: 1 + - uid: 447 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,-3.5 + parent: 1 + - uid: 448 + components: + - type: Transform + pos: 0.5,1.5 + parent: 1 + - uid: 450 + components: + - type: Transform + pos: -3.5,-3.5 + parent: 1 + - uid: 452 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,-3.5 + parent: 1 + - uid: 454 + components: + - type: Transform + pos: -3.5,-2.5 + parent: 1 + - uid: 456 + components: + - type: Transform + pos: 5.5,-1.5 + parent: 1 + - uid: 457 + components: + - type: Transform + pos: 5.5,-2.5 + parent: 1 + - uid: 458 + components: + - type: Transform + pos: 5.5,-3.5 + parent: 1 + - uid: 459 + components: + - type: Transform + pos: 4.5,-3.5 + parent: 1 + - uid: 461 + components: + - type: Transform + pos: -3.5,-1.5 + parent: 1 + - uid: 463 + components: + - type: Transform + pos: -3.5,-4.5 + parent: 1 +- proto: WaterCooler + entities: + - uid: 161 + components: + - type: Transform + pos: 9.5,-4.5 + parent: 1 +- proto: Windoor + entities: + - uid: 487 + components: + - type: Transform + pos: 6.5,-3.5 + parent: 1 +- proto: Window + entities: + - uid: 282 + components: + - type: Transform + pos: 7.5,-4.5 + parent: 1 + - uid: 331 + components: + - type: Transform + pos: 7.5,-5.5 + parent: 1 +... diff --git a/Resources/Maps/Shuttles/pirateradio.yml b/Resources/Maps/Shuttles/pirateradio.yml new file mode 100644 index 00000000000..28cd42f185f --- /dev/null +++ b/Resources/Maps/Shuttles/pirateradio.yml @@ -0,0 +1,6750 @@ +meta: + format: 6 + postmapinit: false +tilemap: + 0: Space + 7: FloorAsteroidSand + 25: FloorCave + 32: FloorDark + 38: FloorDarkOffset + 41: FloorDarkPlastic + 65: FloorLino + 67: FloorMetalDiamond + 80: FloorReinforced + 89: FloorShuttleRed + 90: FloorShuttleWhite + 96: FloorSteelCheckerDark + 109: FloorTechMaint + 123: FloorWood + 126: Lattice +entities: +- proto: "" + entities: + - uid: 1 + components: + - type: MetaData + name: unknown + - type: Transform + - type: MapGrid + chunks: + 0,0: + ind: 0,0 + tiles: QwAAAAAAewAAAAADQQAAAAAAQQAAAAAAewAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAKQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAKQAAAAADUAAAAAAAfgAAAAAAfgAAAAAAQwAAAAAAewAAAAAAQQAAAAAAQQAAAAAAewAAAAADQwAAAAAAWQAAAAAAQwAAAAAAKQAAAAABJgAAAAAAJgAAAAAAJgAAAAAAKQAAAAABUAAAAAAAfgAAAAAAfgAAAAAAQwAAAAAAewAAAAAAQQAAAAAAQQAAAAAAewAAAAABKQAAAAABWQAAAAAAQwAAAAAAKQAAAAADKQAAAAACKQAAAAACKQAAAAACKQAAAAACUAAAAAAAfgAAAAAAfgAAAAAAKQAAAAAAewAAAAADewAAAAABewAAAAAAewAAAAABQwAAAAAAWQAAAAAAQwAAAAAAKQAAAAAAKQAAAAAAKQAAAAAAKQAAAAAAKQAAAAAAQwAAAAAAGQAAAAABfgAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAKQAAAAABQwAAAAAAQwAAAAAABwAAAAAABwAAAAAAKQAAAAAAKQAAAAAAKQAAAAAAKQAAAAAAKQAAAAAAGQAAAAABGQAAAAACGQAAAAAEQwAAAAAAbQAAAAAAQwAAAAAAbQAAAAAAbQAAAAAABwAAAAAAGQAAAAACGQAAAAAGGQAAAAACGQAAAAAEGQAAAAAFKQAAAAAAGQAAAAACGQAAAAAEGQAAAAABGQAAAAADQwAAAAAABwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAABwAAAAAAfgAAAAAAKQAAAAAAKQAAAAAAKQAAAAAAKQAAAAAAKQAAAAAAKQAAAAAAKQAAAAAAKQAAAAAAGQAAAAADGQAAAAABGQAAAAAAGQAAAAACGQAAAAAEGQAAAAACGQAAAAAEGQAAAAACGQAAAAAEKQAAAAAAKQAAAAAAKQAAAAAAKQAAAAAAKQAAAAAAKQAAAAAAKQAAAAAAGQAAAAAGGQAAAAABGQAAAAAEGQAAAAAAGQAAAAABGQAAAAAAGQAAAAAAGQAAAAABGQAAAAAGKQAAAAAAKQAAAAAAKQAAAAAAKQAAAAAAKQAAAAAAKQAAAAAAKQAAAAAAGQAAAAAEGQAAAAADGQAAAAAFGQAAAAADGQAAAAABGQAAAAAGGQAAAAADGQAAAAAFGQAAAAABGQAAAAAAKQAAAAAAKQAAAAAAbQAAAAAAGQAAAAAAGQAAAAAAGQAAAAAAGQAAAAAAGQAAAAAFGQAAAAAEGQAAAAAAGQAAAAABfgAAAAAAGQAAAAACGQAAAAAFGQAAAAAAGQAAAAAAGQAAAAAAGQAAAAAAbQAAAAAAGQAAAAAAGQAAAAAAGQAAAAAAGQAAAAAAAAAAAAAAGQAAAAAEGQAAAAACGQAAAAABGQAAAAAFGQAAAAAFGQAAAAAFGQAAAAAAGQAAAAAAGQAAAAAAGQAAAAAAbQAAAAAAGQAAAAAAfgAAAAAAGQAAAAAAAAAAAAAAGQAAAAAAGQAAAAAEAAAAAAAAGQAAAAAAGQAAAAAGGQAAAAAAGQAAAAACGQAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 0,-1: + ind: 0,-1 + tiles: GQAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAAGQAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAGGQAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAGAAAAAAAAGQAAAAAGGQAAAAABAAAAAAAAAAAAAAAAGQAAAAABAAAAAAAAAAAAAAAAGQAAAAACAAAAAAAAAAAAAAAAGQAAAAABGQAAAAADAAAAAAAAAAAAAAAAGQAAAAACGQAAAAAFGQAAAAAEGQAAAAACGQAAAAABGQAAAAAAGQAAAAABGQAAAAACGQAAAAABGQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAACAAAAAAAAAAAAAAAAGQAAAAAEGQAAAAADGQAAAAAGGQAAAAADGQAAAAABGQAAAAAAGQAAAAAFGQAAAAACGQAAAAABGQAAAAACGQAAAAAFAAAAAAAAGQAAAAACGQAAAAAAAAAAAAAAAAAAAAAAGQAAAAAFGQAAAAAEGQAAAAAAGQAAAAAFfgAAAAAAGQAAAAABGQAAAAACGQAAAAADGQAAAAAGGQAAAAADGQAAAAAGGQAAAAAEGQAAAAADAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAGGQAAAAAFGQAAAAADGQAAAAAAGQAAAAAFGQAAAAAFKQAAAAAAGQAAAAAGGQAAAAABGQAAAAAEGQAAAAAEGQAAAAAEGQAAAAAFGQAAAAAFGQAAAAAEAAAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAGQAAAAABGQAAAAAEGQAAAAABGQAAAAAGGQAAAAABGQAAAAAAGQAAAAACGQAAAAABGQAAAAAEGQAAAAABGQAAAAAEGQAAAAAAWQAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAWQAAAAAAQwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAGQAAAAAEGQAAAAADGQAAAAAGGQAAAAADGQAAAAAGGQAAAAACGQAAAAABWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAQwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAQwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAGQAAAAAEGQAAAAABQwAAAAAAQwAAAAAAKQAAAAACQwAAAAAAQwAAAAAAQwAAAAAAewAAAAAAewAAAAACewAAAAACQwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAQwAAAAAAGQAAAAABQwAAAAAAYAAAAAACYAAAAAAAYAAAAAADYAAAAAAAQwAAAAAAewAAAAACewAAAAADewAAAAABQwAAAAAAKQAAAAAAKQAAAAABKQAAAAADKQAAAAAAQwAAAAAAGQAAAAAGQwAAAAAAYAAAAAACYAAAAAACYAAAAAAAYAAAAAABQwAAAAAAewAAAAACewAAAAABewAAAAADKQAAAAACKQAAAAAAKQAAAAACKQAAAAADKQAAAAADQwAAAAAAGQAAAAAGQwAAAAAAYAAAAAACYAAAAAADYAAAAAACYAAAAAACQwAAAAAAewAAAAACewAAAAACewAAAAAAQwAAAAAAKQAAAAADKQAAAAAAKQAAAAABKQAAAAABQwAAAAAAGQAAAAABQwAAAAAAQwAAAAAAKQAAAAACQwAAAAAAQwAAAAAAQwAAAAAAKQAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAUAAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAGQAAAAADKQAAAAACewAAAAABewAAAAABewAAAAACewAAAAADKQAAAAAAKQAAAAACKQAAAAABKQAAAAACKQAAAAABKQAAAAACKQAAAAACKQAAAAAAUAAAAAAAfgAAAAAAfgAAAAAA + version: 6 + -1,0: + ind: -1,0 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAADAAAAAAAAGQAAAAACGQAAAAAFGQAAAAAEGQAAAAADQwAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAGGQAAAAACGQAAAAABGQAAAAAAfgAAAAAAGQAAAAADQwAAAAAAQwAAAAAAWQAAAAAAWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAEGQAAAAAAGQAAAAAFGQAAAAAEQwAAAAAAQwAAAAAAQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAAGQAAAAAAGQAAAAAGGQAAAAABGQAAAAAAGQAAAAAFQwAAAAAAbQAAAAAAbQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAFGQAAAAAAGQAAAAAEAAAAAAAAGQAAAAABGQAAAAAFGQAAAAAFGQAAAAADQwAAAAAAbQAAAAAAbQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAADGQAAAAAFfgAAAAAAGQAAAAACQwAAAAAAbQAAAAAAbQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAACGQAAAAAAGQAAAAAEGQAAAAACGQAAAAAAGQAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAEGQAAAAACGQAAAAAGGQAAAAAGGQAAAAAEGQAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAGGQAAAAAFGQAAAAABGQAAAAAFGQAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAADGQAAAAABGQAAAAAAfgAAAAAAGQAAAAAFGQAAAAABGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAEGQAAAAACGQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + -1,-1: + ind: -1,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAEAAAAAAAAAAAAAAAAGQAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAGGQAAAAACAAAAAAAAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAADGQAAAAADAAAAAAAAAAAAAAAAGQAAAAACGQAAAAACGQAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAABAAAAAAAAGQAAAAADGQAAAAABGQAAAAADGQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAABGQAAAAAGGQAAAAAAGQAAAAAFGQAAAAABGQAAAAADGQAAAAAGGQAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAEGQAAAAAGGQAAAAAEGQAAAAAAGQAAAAAAGQAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAGQAAAAADGQAAAAAFGQAAAAACQwAAAAAAQwAAAAAAQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAEGQAAAAAAGQAAAAAAGQAAAAAAQwAAAAAAIAAAAAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAEGQAAAAACGQAAAAAAGQAAAAAFGQAAAAABQwAAAAAAWQAAAAAAWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAACGQAAAAAAGQAAAAAAGQAAAAADGQAAAAACGQAAAAAGGQAAAAAEQwAAAAAAWQAAAAAAWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAADGQAAAAABGQAAAAACGQAAAAABGQAAAAAEQwAAAAAAQwAAAAAAQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAGGQAAAAAGfgAAAAAAGQAAAAAAQwAAAAAAWgAAAAAAWgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAAGQAAAAAFGQAAAAABGQAAAAABGQAAAAACGQAAAAABGQAAAAAEQwAAAAAAWgAAAAAAWgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAGAAAAAAAAAAAAAAAAGQAAAAAAGQAAAAAAGQAAAAADGQAAAAAFQwAAAAAAKQAAAAACQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAEGQAAAAAEGQAAAAABQwAAAAAAQwAAAAAAWQAAAAAAWQAAAAAA + version: 6 + 1,-1: + ind: 1,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAEGQAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAEGQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAADGQAAAAAFAAAAAAAAGQAAAAABGQAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAGGQAAAAABGQAAAAACGQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAAGQAAAAAGGQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAADGQAAAAAGGQAAAAABAAAAAAAAAAAAAAAAGQAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAEGQAAAAAGfgAAAAAAfgAAAAAAAAAAAAAAGQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAFGQAAAAAFGQAAAAAAGQAAAAAAGQAAAAAAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAGGQAAAAADGQAAAAAFGQAAAAABGQAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAACGQAAAAABGQAAAAADGQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 1,0: + ind: 1,0 + tiles: GQAAAAADGQAAAAABGQAAAAADGQAAAAADGQAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAAGQAAAAAAGQAAAAAEGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAACGQAAAAAAGQAAAAAGGQAAAAADGQAAAAACGQAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAADGQAAAAACGQAAAAABGQAAAAABGQAAAAAFGQAAAAAFGQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAACGQAAAAAEGQAAAAADGQAAAAAAGQAAAAAAGQAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAEGQAAAAAAGQAAAAAGGQAAAAAFGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAAGQAAAAAAAAAAAAAAGQAAAAADGQAAAAADGQAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAAGQAAAAAAAAAAAAAAAAAAAAAAGQAAAAAGGQAAAAAAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAABGQAAAAAAGQAAAAAAAAAAAAAAGQAAAAAEGQAAAAAAGQAAAAAGGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAFAAAAAAAAGQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAAGQAAAAAAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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: GridPathfinding + - type: Gravity + gravityShakeSound: !type:SoundPathSpecifier + path: /Audio/Effects/alert.ogg + - type: DecalGrid + chunkCollection: + version: 2 + nodes: + - node: + color: '#FFFFFFFF' + id: Arrows + decals: + 59: 12,8 + - node: + angle: 3.141592653589793 rad + color: '#FFFFFFFF' + id: Arrows + decals: + 60: 12,6 + - node: + color: '#FF0000FF' + id: BoxGreyscale + decals: + 58: 13,7 + - node: + color: '#FFFFFFFF' + id: Caution + decals: + 0: 3.018731,5.165427 + - node: + angle: 4.71238898038469 rad + color: '#FFFFFFFF' + id: StandClear + decals: + 54: 12,7 + - node: + color: '#FFFFFFFF' + id: WarnBox + decals: + 18: 3,4 + - node: + color: '#FFFFFFFF' + id: WarnCornerSmallNW + decals: + 40: 16,-2 + - node: + color: '#FFFFFFFF' + id: WarnCornerSmallSE + decals: + 32: 5,7 + - node: + color: '#FFFFFFFF' + id: WarnCornerSmallSW + decals: + 17: 4,7 + - node: + color: '#FFFFFFFF' + id: WarnLineE + decals: + 78: 12,-10 + 80: 6,-10 + - node: + color: '#FFFFFFFF' + id: WarnLineN + decals: + 16: 3,7 + 33: 6,7 + 35: 5,7 + 36: 4,7 + - node: + color: '#FFFFFFFF' + id: WarnLineS + decals: + 34: 7,6 + 37: 16,3 + 38: 16,2 + 39: 16,-1 + - node: + color: '#FFFFFFFF' + id: WarnLineW + decals: + 41: 11,-8 + 42: 10,-8 + 43: 7,-9 + 44: 6,-9 + 79: 6,-10 + - node: + color: '#FFFFFFFF' + id: WoodTrimThinCornerNe + decals: + 45: 12,4 + - node: + color: '#FFFFFFFF' + id: WoodTrimThinCornerNw + decals: + 46: 8,4 + - node: + color: '#FFFFFFFF' + id: WoodTrimThinCornerSe + decals: + 11: 12,-1 + - node: + color: '#FFFFFFFF' + id: WoodTrimThinCornerSw + decals: + 12: 8,-1 + - node: + color: '#FFFFFFFF' + id: WoodTrimThinInnerNe + decals: + 28: 1,-1 + - node: + color: '#FFFFFFFF' + id: WoodTrimThinInnerNw + decals: + 29: 4,-1 + - node: + color: '#FFFFFFFF' + id: WoodTrimThinInnerSe + decals: + 30: 1,3 + - node: + color: '#FFFFFFFF' + id: WoodTrimThinInnerSw + decals: + 31: 4,3 + - node: + color: '#FFFFFFFF' + id: WoodTrimThinLineE + decals: + 9: 12,1 + 10: 12,0 + 22: 1,2 + 23: 1,1 + 24: 1,0 + 50: 12,3 + 51: 12,2 + - node: + color: '#FFFFFFFF' + id: WoodTrimThinLineN + decals: + 26: 2,-1 + 27: 3,-1 + 47: 9,4 + 48: 10,4 + 49: 11,4 + - node: + color: '#FFFFFFFF' + id: WoodTrimThinLineS + decals: + 13: 9,-1 + 14: 10,-1 + 15: 11,-1 + 25: 2,3 + - node: + color: '#FFFFFFFF' + id: WoodTrimThinLineW + decals: + 3: 8,0 + 4: 8,1 + 19: 4,2 + 20: 4,1 + 21: 4,0 + 52: 8,3 + 53: 8,2 + - node: + color: '#FF0000FF' + id: space + decals: + 1: 3.018731,4.884177 + - node: + color: '#FFFFFFFF' + id: syndlogo1 + decals: + 74: 8,8 + - node: + color: '#FFFFFFFF' + id: syndlogo10 + decals: + 67: 9,6 + - node: + color: '#FFFFFFFF' + id: syndlogo11 + decals: + 68: 10,6 + - node: + color: '#FFFFFFFF' + id: syndlogo12 + decals: + 69: 11,6 + - node: + color: '#FFFFFFFF' + id: syndlogo13 + decals: + 77: 10,6 + - node: + color: '#FFFFFFFF' + id: syndlogo2 + decals: + 62: 9,8 + - node: + color: '#FFFFFFFF' + id: syndlogo3 + decals: + 63: 10,8 + - node: + color: '#FFFFFFFF' + id: syndlogo4 + decals: + 73: 11,8 + - node: + color: '#FFFFFFFF' + id: syndlogo5 + decals: + 75: 8,7 + - node: + color: '#FFFFFFFF' + id: syndlogo6 + decals: + 64: 9,7 + - node: + color: '#FFFFFFFF' + id: syndlogo7 + decals: + 65: 10,7 + - node: + color: '#FFFFFFFF' + id: syndlogo8 + decals: + 72: 11,7 + - node: + color: '#FFFFFFFF' + id: syndlogo9 + decals: + 76: 8,6 + - type: GridAtmosphere + version: 2 + data: + tiles: + 0,0: + 0: 65535 + 0,-1: + 0: 65535 + -1,0: + 0: 65535 + -1,-1: + 0: 65535 + 0,1: + 0: 65535 + 1,0: + 0: 65535 + 1,1: + 0: 65535 + 2,0: + 0: 65535 + 0,-2: + 0: 65535 + 1,-2: + 0: 65535 + 1,-1: + 0: 65535 + 2,-1: + 0: 65535 + -1,1: + 0: 65535 + -1,-2: + 0: 65535 + 3,0: + 0: 65535 + 3,-1: + 0: 65535 + 0,2: + 0: 61439 + 1,2: + 0: 32767 + 2,1: + 0: 65535 + 3,1: + 0: 65535 + 0,-3: + 0: 65535 + 1,-3: + 0: 65535 + 2,-2: + 0: 65535 + 3,-2: + 0: 65535 + -2,0: + 0: 65279 + -2,1: + 0: 53230 + -1,2: + 0: 12031 + -2,-2: + 0: 65534 + -2,-1: + 0: 61182 + -2,-3: + 0: 60660 + -1,-3: + 0: 65535 + 4,-1: + 0: 65527 + 4,0: + 0: 65535 + 4,1: + 0: 2559 + 0,-4: + 0: 64897 + 2,-3: + 0: 65527 + 4,-2: + 0: 30715 + 0,3: + 0: 27 + 1,3: + 0: 2189 + 2,2: + 0: 2255 + 3,2: + 0: 9 + 1,-4: + 0: 62483 + 2,-4: + 0: 12832 + 3,-4: + 0: 8960 + 3,-3: + 0: 63251 + -3,1: + 0: 2094 + -3,0: + 0: 32964 + -2,2: + 0: 232 + -1,3: + 0: 130 + -3,-2: + 0: 3136 + -3,-1: + 0: 1216 + -2,-4: + 0: 25088 + -1,-4: + 0: 60312 + 4,-3: + 0: 4902 + 5,-2: + 0: 8193 + 5,-1: + 0: 306 + 4,2: + 0: 1 + 5,0: + 0: 29441 + 5,1: + 0: 29459 + 5,2: + 0: 175 + uniqueMixes: + - 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: Shuttle + - type: NavMap +- proto: AirAlarm + entities: + - uid: 576 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,3.5 + parent: 1 + - type: DeviceList + devices: + - 707 + - 719 + - 708 + - 720 + - 721 + - 709 + - 726 + - 714 + - 718 + - 713 + - 710 + - 711 + - 722 + - 723 + - 712 + - 725 + - 384 + - 716 + - 724 +- proto: AirCanister + entities: + - uid: 3 + components: + - type: Transform + anchored: True + pos: 1.5,5.5 + parent: 1 + - type: Physics + bodyType: Static +- proto: AirlockExternalShuttleSyndicateLocked + entities: + - uid: 4 + components: + - type: MetaData + desc: The ominous red light fills you with dread + name: suspicious airlock + - type: Transform + pos: 3.5,6.5 + parent: 1 + - type: DeviceLinkSink + links: + - 806 + missingComponents: + - Docking + - uid: 414 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,11.5 + parent: 1 +- proto: AirlockHatchSyndicate + entities: + - uid: 405 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,9.5 + parent: 1 +- proto: AirlockSyndicate + entities: + - uid: 5 + components: + - type: Transform + pos: 5.5,2.5 + parent: 1 + - uid: 15 + components: + - type: MetaData + name: armory airlock + - type: Transform + pos: 2.5,-5.5 + parent: 1 +- proto: AirlockSyndicateGlass + entities: + - uid: 6 + components: + - type: MetaData + name: kitchen airlock + - type: Transform + pos: 2.5,-1.5 + parent: 1 + - uid: 7 + components: + - type: MetaData + name: rec-room airlock + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,-1.5 + parent: 1 + - uid: 8 + components: + - type: Transform + pos: 0.5,-0.5 + parent: 1 + - uid: 9 + components: + - type: MetaData + name: hydroponics airlock + - type: Transform + pos: 9.5,-3.5 + parent: 1 + - uid: 10 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,-0.5 + parent: 1 +- proto: AirlockSyndicateGlassLocked + entities: + - uid: 11 + components: + - type: MetaData + name: to-externals airlock + - type: Transform + pos: 3.5,4.5 + parent: 1 + - uid: 401 + components: + - type: Transform + pos: 11.5,5.5 + parent: 1 + - uid: 950 + components: + - type: MetaData + name: bridge airlock + - type: Transform + pos: 7.5,-0.5 + parent: 1 +- proto: AirlockSyndicateLocked + entities: + - uid: 13 + components: + - type: MetaData + name: air supply + - type: Transform + pos: 2.5,5.5 + parent: 1 + - uid: 14 + components: + - type: MetaData + name: outpost maintenance + - type: Transform + pos: 0.5,3.5 + parent: 1 +- proto: AlwaysPoweredLightColoredFrostyBlue + entities: + - uid: 16 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-2.5 + parent: 1 +- proto: AlwaysPoweredLightColoredRed + entities: + - uid: 17 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,7.5 + parent: 1 +- proto: AlwaysPoweredLightPostSmallRed + entities: + - uid: 1006 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,11.5 + parent: 1 +- proto: AlwaysPoweredSmallLightMaintenanceRed + entities: + - uid: 953 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,5.5 + parent: 1 + - uid: 962 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,5.5 + parent: 1 +- proto: APCBasic + entities: + - uid: 24 + components: + - type: Transform + pos: 2.5,4.5 + parent: 1 + - uid: 25 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,-5.5 + parent: 1 + - uid: 26 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,0.5 + parent: 1 + - type: Apc + hasAccess: True + lastExternalState: Good + lastChargeState: Full +- proto: AsteroidAltRock + entities: + - uid: 27 + components: + - type: Transform + pos: -5.5,2.5 + parent: 1 + - uid: 28 + components: + - type: Transform + pos: -4.5,-0.5 + parent: 1 + - uid: 29 + components: + - type: Transform + pos: 4.5,8.5 + parent: 1 + - uid: 31 + components: + - type: Transform + pos: 5.5,8.5 + parent: 1 + - uid: 33 + components: + - type: Transform + pos: 2.5,7.5 + parent: 1 + - uid: 34 + components: + - type: Transform + pos: 0.5,7.5 + parent: 1 + - uid: 35 + components: + - type: Transform + pos: 3.5,8.5 + parent: 1 + - uid: 36 + components: + - type: Transform + pos: 14.5,3.5 + parent: 1 + - uid: 37 + components: + - type: Transform + pos: 14.5,4.5 + parent: 1 + - uid: 39 + components: + - type: Transform + pos: 16.5,-9.5 + parent: 1 + - uid: 40 + components: + - type: Transform + pos: 2.5,8.5 + parent: 1 + - uid: 45 + components: + - type: Transform + pos: -3.5,-10.5 + parent: 1 + - uid: 47 + components: + - type: Transform + pos: -5.5,-6.5 + parent: 1 + - uid: 48 + components: + - type: Transform + pos: -3.5,-5.5 + parent: 1 + - uid: 49 + components: + - type: Transform + pos: -3.5,-6.5 + parent: 1 + - uid: 50 + components: + - type: Transform + pos: -4.5,-2.5 + parent: 1 + - uid: 51 + components: + - type: Transform + pos: -3.5,-3.5 + parent: 1 + - uid: 52 + components: + - type: Transform + pos: -4.5,-4.5 + parent: 1 + - uid: 53 + components: + - type: Transform + pos: -5.5,-4.5 + parent: 1 + - uid: 55 + components: + - type: Transform + pos: -0.5,-12.5 + parent: 1 + - uid: 56 + components: + - type: Transform + pos: -4.5,6.5 + parent: 1 + - uid: 57 + components: + - type: Transform + pos: -3.5,6.5 + parent: 1 + - uid: 58 + components: + - type: Transform + pos: -3.5,7.5 + parent: 1 + - uid: 59 + components: + - type: Transform + pos: -2.5,7.5 + parent: 1 + - uid: 60 + components: + - type: Transform + pos: -1.5,7.5 + parent: 1 + - uid: 61 + components: + - type: Transform + pos: 0.5,8.5 + parent: 1 + - uid: 62 + components: + - type: Transform + pos: 0.5,10.5 + parent: 1 + - uid: 63 + components: + - type: Transform + pos: 3.5,9.5 + parent: 1 + - uid: 64 + components: + - type: Transform + pos: 4.5,9.5 + parent: 1 + - uid: 65 + components: + - type: Transform + pos: -0.5,8.5 + parent: 1 + - uid: 66 + components: + - type: Transform + pos: 1.5,8.5 + parent: 1 + - uid: 68 + components: + - type: Transform + pos: 0.5,9.5 + parent: 1 + - uid: 69 + components: + - type: Transform + pos: -0.5,7.5 + parent: 1 + - uid: 70 + components: + - type: Transform + pos: -4.5,7.5 + parent: 1 + - uid: 71 + components: + - type: Transform + pos: -8.5,6.5 + parent: 1 + - uid: 72 + components: + - type: Transform + pos: -1.5,-12.5 + parent: 1 + - uid: 73 + components: + - type: Transform + pos: -4.5,2.5 + parent: 1 + - uid: 74 + components: + - type: Transform + pos: -4.5,0.5 + parent: 1 + - uid: 75 + components: + - type: Transform + pos: -4.5,-1.5 + parent: 1 + - uid: 76 + components: + - type: Transform + pos: -3.5,-4.5 + parent: 1 + - uid: 77 + components: + - type: Transform + pos: -3.5,-2.5 + parent: 1 + - uid: 78 + components: + - type: Transform + pos: -3.5,-7.5 + parent: 1 + - uid: 79 + components: + - type: Transform + pos: -4.5,-8.5 + parent: 1 + - uid: 80 + components: + - type: Transform + pos: -4.5,-5.5 + parent: 1 + - uid: 81 + components: + - type: Transform + pos: -4.5,-9.5 + parent: 1 + - uid: 82 + components: + - type: Transform + pos: -2.5,-9.5 + parent: 1 + - uid: 83 + components: + - type: Transform + pos: -1.5,-9.5 + parent: 1 + - uid: 84 + components: + - type: Transform + pos: 16.5,0.5 + parent: 1 + - uid: 85 + components: + - type: Transform + pos: 16.5,1.5 + parent: 1 + - uid: 86 + components: + - type: Transform + pos: 3.5,-10.5 + parent: 1 + - uid: 88 + components: + - type: Transform + pos: 6.5,-10.5 + parent: 1 + - uid: 89 + components: + - type: Transform + pos: 7.5,-12.5 + parent: 1 + - uid: 90 + components: + - type: Transform + pos: 9.5,-7.5 + parent: 1 + - uid: 91 + components: + - type: Transform + pos: 8.5,-8.5 + parent: 1 + - uid: 92 + components: + - type: Transform + pos: 13.5,-7.5 + parent: 1 + - uid: 93 + components: + - type: Transform + pos: 14.5,-6.5 + parent: 1 + - uid: 94 + components: + - type: Transform + pos: 15.5,-6.5 + parent: 1 + - uid: 95 + components: + - type: Transform + pos: 15.5,-5.5 + parent: 1 + - uid: 96 + components: + - type: Transform + pos: 15.5,-4.5 + parent: 1 + - uid: 97 + components: + - type: Transform + pos: 16.5,-6.5 + parent: 1 + - uid: 98 + components: + - type: Transform + pos: 15.5,-1.5 + parent: 1 + - uid: 99 + components: + - type: Transform + pos: 15.5,-2.5 + parent: 1 + - uid: 100 + components: + - type: Transform + pos: 18.5,-1.5 + parent: 1 + - uid: 101 + components: + - type: Transform + pos: 16.5,-5.5 + parent: 1 + - uid: 102 + components: + - type: Transform + pos: 16.5,-4.5 + parent: 1 + - uid: 103 + components: + - type: Transform + pos: -3.5,-11.5 + parent: 1 + - uid: 104 + components: + - type: Transform + pos: -1.5,-11.5 + parent: 1 + - uid: 105 + components: + - type: Transform + pos: -2.5,11.5 + parent: 1 + - uid: 106 + components: + - type: Transform + pos: 2.5,-12.5 + parent: 1 + - uid: 107 + components: + - type: Transform + pos: 5.5,-10.5 + parent: 1 + - uid: 108 + components: + - type: Transform + pos: 7.5,-11.5 + parent: 1 + - uid: 109 + components: + - type: Transform + pos: 15.5,-8.5 + parent: 1 + - uid: 110 + components: + - type: Transform + pos: 19.5,2.5 + parent: 1 + - uid: 111 + components: + - type: Transform + pos: 17.5,5.5 + parent: 1 + - uid: 112 + components: + - type: Transform + pos: 8.5,-12.5 + parent: 1 + - uid: 113 + components: + - type: Transform + pos: 17.5,0.5 + parent: 1 + - uid: 114 + components: + - type: Transform + pos: 17.5,-2.5 + parent: 1 + - uid: 115 + components: + - type: Transform + pos: 18.5,-0.5 + parent: 1 + - uid: 116 + components: + - type: Transform + pos: 18.5,3.5 + parent: 1 + - uid: 117 + components: + - type: Transform + pos: 17.5,3.5 + parent: 1 + - uid: 119 + components: + - type: Transform + pos: 19.5,3.5 + parent: 1 + - uid: 120 + components: + - type: Transform + pos: 19.5,4.5 + parent: 1 + - uid: 121 + components: + - type: Transform + pos: 17.5,4.5 + parent: 1 + - uid: 122 + components: + - type: Transform + pos: 18.5,4.5 + parent: 1 + - uid: 123 + components: + - type: Transform + pos: 16.5,4.5 + parent: 1 + - uid: 124 + components: + - type: Transform + pos: 16.5,5.5 + parent: 1 + - uid: 138 + components: + - type: Transform + pos: 17.5,-0.5 + parent: 1 + - uid: 139 + components: + - type: Transform + pos: 20.5,0.5 + parent: 1 + - uid: 140 + components: + - type: Transform + pos: 17.5,1.5 + parent: 1 + - uid: 141 + components: + - type: Transform + pos: -0.5,13.5 + parent: 1 + - uid: 142 + components: + - type: Transform + pos: 0.5,13.5 + parent: 1 + - uid: 143 + components: + - type: Transform + pos: 19.5,1.5 + parent: 1 + - uid: 144 + components: + - type: Transform + pos: 21.5,2.5 + parent: 1 + - uid: 145 + components: + - type: Transform + pos: -6.5,9.5 + parent: 1 + - uid: 146 + components: + - type: Transform + pos: 19.5,5.5 + parent: 1 + - uid: 147 + components: + - type: Transform + pos: 20.5,6.5 + parent: 1 + - uid: 148 + components: + - type: Transform + pos: 20.5,7.5 + parent: 1 + - uid: 149 + components: + - type: Transform + pos: 1.5,12.5 + parent: 1 + - uid: 150 + components: + - type: Transform + pos: 20.5,5.5 + parent: 1 + - uid: 151 + components: + - type: Transform + pos: 22.5,8.5 + parent: 1 + - uid: 152 + components: + - type: Transform + pos: 21.5,8.5 + parent: 1 + - uid: 153 + components: + - type: Transform + pos: 21.5,6.5 + parent: 1 + - uid: 154 + components: + - type: Transform + pos: 21.5,7.5 + parent: 1 + - uid: 155 + components: + - type: Transform + pos: -5.5,9.5 + parent: 1 + - uid: 156 + components: + - type: Transform + pos: 20.5,2.5 + parent: 1 + - uid: 157 + components: + - type: Transform + pos: 16.5,-2.5 + parent: 1 + - uid: 158 + components: + - type: Transform + pos: -2.5,12.5 + parent: 1 + - uid: 159 + components: + - type: Transform + pos: -10.5,5.5 + parent: 1 + - uid: 160 + components: + - type: Transform + pos: 17.5,-3.5 + parent: 1 + - uid: 161 + components: + - type: Transform + pos: 17.5,-4.5 + parent: 1 + - uid: 162 + components: + - type: Transform + pos: 18.5,-2.5 + parent: 1 + - uid: 163 + components: + - type: Transform + pos: 14.5,-7.5 + parent: 1 + - uid: 164 + components: + - type: Transform + pos: 12.5,-7.5 + parent: 1 + - uid: 165 + components: + - type: Transform + pos: 9.5,-8.5 + parent: 1 + - uid: 166 + components: + - type: Transform + pos: 11.5,-10.5 + parent: 1 + - uid: 167 + components: + - type: Transform + pos: 11.5,-8.5 + parent: 1 + - uid: 168 + components: + - type: Transform + pos: 14.5,-8.5 + parent: 1 + - uid: 169 + components: + - type: Transform + pos: 12.5,-10.5 + parent: 1 + - uid: 170 + components: + - type: Transform + pos: 10.5,-11.5 + parent: 1 + - uid: 171 + components: + - type: Transform + pos: 8.5,-10.5 + parent: 1 + - uid: 172 + components: + - type: Transform + pos: 9.5,-10.5 + parent: 1 + - uid: 173 + components: + - type: Transform + pos: -9.5,0.5 + parent: 1 + - uid: 174 + components: + - type: Transform + pos: 13.5,-8.5 + parent: 1 + - uid: 175 + components: + - type: Transform + pos: 17.5,-6.5 + parent: 1 + - uid: 176 + components: + - type: Transform + pos: 12.5,-8.5 + parent: 1 + - uid: 177 + components: + - type: Transform + pos: 15.5,-3.5 + parent: 1 + - uid: 178 + components: + - type: Transform + pos: 16.5,-3.5 + parent: 1 + - uid: 179 + components: + - type: Transform + pos: 17.5,-7.5 + parent: 1 + - uid: 180 + components: + - type: Transform + pos: 16.5,-7.5 + parent: 1 + - uid: 181 + components: + - type: Transform + pos: 15.5,-7.5 + parent: 1 + - uid: 182 + components: + - type: Transform + pos: -9.5,-1.5 + parent: 1 + - uid: 183 + components: + - type: Transform + pos: 10.5,-10.5 + parent: 1 + - uid: 184 + components: + - type: Transform + pos: 9.5,-11.5 + parent: 1 + - uid: 185 + components: + - type: Transform + pos: 0.5,-15.5 + parent: 1 + - uid: 187 + components: + - type: Transform + pos: -9.5,-5.5 + parent: 1 + - uid: 188 + components: + - type: Transform + pos: -7.5,-10.5 + parent: 1 + - uid: 189 + components: + - type: Transform + pos: 17.5,-5.5 + parent: 1 + - uid: 190 + components: + - type: Transform + pos: -6.5,-10.5 + parent: 1 + - uid: 191 + components: + - type: Transform + pos: -5.5,-11.5 + parent: 1 + - uid: 192 + components: + - type: Transform + pos: 14.5,-9.5 + parent: 1 + - uid: 193 + components: + - type: Transform + pos: -5.5,-12.5 + parent: 1 + - uid: 194 + components: + - type: Transform + pos: 18.5,-6.5 + parent: 1 + - uid: 195 + components: + - type: Transform + pos: -6.5,-12.5 + parent: 1 + - uid: 196 + components: + - type: Transform + pos: 20.5,-2.5 + parent: 1 + - uid: 197 + components: + - type: Transform + pos: 20.5,-1.5 + parent: 1 + - uid: 198 + components: + - type: Transform + pos: 21.5,4.5 + parent: 1 + - uid: 199 + components: + - type: Transform + pos: 20.5,3.5 + parent: 1 + - uid: 200 + components: + - type: Transform + pos: 20.5,4.5 + parent: 1 + - uid: 203 + components: + - type: Transform + pos: -3.5,-13.5 + parent: 1 + - uid: 204 + components: + - type: Transform + pos: 3.5,10.5 + parent: 1 + - uid: 205 + components: + - type: Transform + pos: 2.5,10.5 + parent: 1 + - uid: 206 + components: + - type: Transform + pos: 1.5,10.5 + parent: 1 + - uid: 207 + components: + - type: Transform + pos: 5.5,10.5 + parent: 1 + - uid: 208 + components: + - type: Transform + pos: 5.5,9.5 + parent: 1 + - uid: 211 + components: + - type: Transform + pos: 3.5,11.5 + parent: 1 + - uid: 212 + components: + - type: Transform + pos: 1.5,9.5 + parent: 1 + - uid: 213 + components: + - type: Transform + pos: 2.5,9.5 + parent: 1 + - uid: 214 + components: + - type: Transform + pos: -0.5,9.5 + parent: 1 + - uid: 215 + components: + - type: Transform + pos: -1.5,8.5 + parent: 1 + - uid: 216 + components: + - type: Transform + pos: -0.5,10.5 + parent: 1 + - uid: 217 + components: + - type: Transform + pos: -2.5,9.5 + parent: 1 + - uid: 218 + components: + - type: Transform + pos: -3.5,-14.5 + parent: 1 + - uid: 219 + components: + - type: Transform + pos: -1.5,9.5 + parent: 1 + - uid: 220 + components: + - type: Transform + pos: -3.5,5.5 + parent: 1 + - uid: 221 + components: + - type: Transform + pos: -7.5,6.5 + parent: 1 + - uid: 222 + components: + - type: Transform + pos: -5.5,5.5 + parent: 1 + - uid: 223 + components: + - type: Transform + pos: -5.5,4.5 + parent: 1 + - uid: 225 + components: + - type: Transform + pos: -1.5,10.5 + parent: 1 + - uid: 226 + components: + - type: Transform + pos: -0.5,-14.5 + parent: 1 + - uid: 227 + components: + - type: Transform + pos: 9.5,-13.5 + parent: 1 + - uid: 228 + components: + - type: Transform + pos: 3.5,12.5 + parent: 1 + - uid: 229 + components: + - type: Transform + pos: 4.5,-15.5 + parent: 1 + - uid: 230 + components: + - type: Transform + pos: 4.5,-14.5 + parent: 1 + - uid: 231 + components: + - type: Transform + pos: 5.5,-15.5 + parent: 1 + - uid: 232 + components: + - type: Transform + pos: 9.5,-14.5 + parent: 1 + - uid: 234 + components: + - type: Transform + pos: 12.5,-13.5 + parent: 1 + - uid: 235 + components: + - type: Transform + pos: 13.5,-12.5 + parent: 1 + - uid: 236 + components: + - type: Transform + pos: -4.5,8.5 + parent: 1 + - uid: 237 + components: + - type: Transform + pos: -3.5,8.5 + parent: 1 + - uid: 238 + components: + - type: Transform + pos: -2.5,8.5 + parent: 1 + - uid: 239 + components: + - type: Transform + pos: -6.5,6.5 + parent: 1 + - uid: 240 + components: + - type: Transform + pos: -5.5,6.5 + parent: 1 + - uid: 241 + components: + - type: Transform + pos: -4.5,4.5 + parent: 1 + - uid: 242 + components: + - type: Transform + pos: 13.5,-11.5 + parent: 1 + - uid: 243 + components: + - type: Transform + pos: -9.5,4.5 + parent: 1 + - uid: 244 + components: + - type: Transform + pos: -8.5,4.5 + parent: 1 + - uid: 245 + components: + - type: Transform + pos: -8.5,3.5 + parent: 1 + - uid: 246 + components: + - type: Transform + pos: -7.5,3.5 + parent: 1 + - uid: 247 + components: + - type: Transform + pos: -6.5,3.5 + parent: 1 + - uid: 248 + components: + - type: Transform + pos: -5.5,3.5 + parent: 1 + - uid: 249 + components: + - type: Transform + pos: -6.5,5.5 + parent: 1 + - uid: 250 + components: + - type: Transform + pos: -4.5,1.5 + parent: 1 + - uid: 251 + components: + - type: Transform + pos: -6.5,2.5 + parent: 1 + - uid: 252 + components: + - type: Transform + pos: -8.5,1.5 + parent: 1 + - uid: 253 + components: + - type: Transform + pos: -7.5,0.5 + parent: 1 + - uid: 254 + components: + - type: Transform + pos: -5.5,0.5 + parent: 1 + - uid: 255 + components: + - type: Transform + pos: -6.5,0.5 + parent: 1 + - uid: 256 + components: + - type: Transform + pos: 18.5,-11.5 + parent: 1 + - uid: 257 + components: + - type: Transform + pos: -5.5,-0.5 + parent: 1 + - uid: 258 + components: + - type: Transform + pos: -5.5,-1.5 + parent: 1 + - uid: 259 + components: + - type: Transform + pos: 17.5,-10.5 + parent: 1 + - uid: 260 + components: + - type: Transform + pos: -8.5,-2.5 + parent: 1 + - uid: 261 + components: + - type: Transform + pos: -7.5,-2.5 + parent: 1 + - uid: 262 + components: + - type: Transform + pos: 16.5,-8.5 + parent: 1 + - uid: 263 + components: + - type: Transform + pos: 17.5,-9.5 + parent: 1 + - uid: 264 + components: + - type: Transform + pos: -3.5,-1.5 + parent: 1 + - uid: 265 + components: + - type: Transform + pos: 19.5,-7.5 + parent: 1 + - uid: 266 + components: + - type: Transform + pos: -5.5,-2.5 + parent: 1 + - uid: 267 + components: + - type: Transform + pos: -6.5,-7.5 + parent: 1 + - uid: 268 + components: + - type: Transform + pos: -4.5,-6.5 + parent: 1 + - uid: 269 + components: + - type: Transform + pos: -4.5,-10.5 + parent: 1 + - uid: 270 + components: + - type: Transform + pos: -4.5,-7.5 + parent: 1 + - uid: 271 + components: + - type: Transform + pos: -5.5,-8.5 + parent: 1 + - uid: 272 + components: + - type: Transform + pos: -3.5,-8.5 + parent: 1 + - uid: 273 + components: + - type: Transform + pos: -2.5,-11.5 + parent: 1 + - uid: 274 + components: + - type: Transform + pos: -3.5,-9.5 + parent: 1 + - uid: 275 + components: + - type: Transform + pos: -1.5,-10.5 + parent: 1 + - uid: 276 + components: + - type: Transform + pos: -5.5,-7.5 + parent: 1 + - uid: 277 + components: + - type: Transform + pos: -2.5,-10.5 + parent: 1 + - uid: 278 + components: + - type: Transform + pos: -0.5,-10.5 + parent: 1 + - uid: 279 + components: + - type: Transform + pos: -0.5,-11.5 + parent: 1 + - uid: 280 + components: + - type: Transform + pos: 0.5,-13.5 + parent: 1 + - uid: 281 + components: + - type: Transform + pos: 2.5,-10.5 + parent: 1 + - uid: 282 + components: + - type: Transform + pos: 2.5,-11.5 + parent: 1 + - uid: 283 + components: + - type: Transform + pos: 20.5,-7.5 + parent: 1 + - uid: 284 + components: + - type: Transform + pos: 6.5,-13.5 + parent: 1 + - uid: 285 + components: + - type: Transform + pos: 5.5,-9.5 + parent: 1 + - uid: 286 + components: + - type: Transform + pos: 6.5,-11.5 + parent: 1 + - uid: 287 + components: + - type: Transform + pos: 7.5,-10.5 + parent: 1 + - uid: 288 + components: + - type: Transform + pos: 21.5,-4.5 + parent: 1 + - uid: 290 + components: + - type: Transform + pos: 21.5,-3.5 + parent: 1 + - uid: 291 + components: + - type: Transform + pos: 3.5,-11.5 + parent: 1 + - uid: 292 + components: + - type: Transform + pos: 5.5,-11.5 + parent: 1 + - uid: 293 + components: + - type: Transform + pos: 3.5,-13.5 + parent: 1 + - uid: 294 + components: + - type: Transform + pos: 0.5,-10.5 + parent: 1 + - uid: 295 + components: + - type: Transform + pos: -0.5,-9.5 + parent: 1 + - uid: 296 + components: + - type: Transform + pos: -7.5,-6.5 + parent: 1 + - uid: 297 + components: + - type: Transform + pos: -5.5,-5.5 + parent: 1 + - uid: 298 + components: + - type: Transform + pos: 8.5,-11.5 + parent: 1 + - uid: 299 + components: + - type: Transform + pos: 4.5,-12.5 + parent: 1 + - uid: 300 + components: + - type: Transform + pos: 4.5,-11.5 + parent: 1 + - uid: 301 + components: + - type: Transform + pos: 22.5,3.5 + parent: 1 + - uid: 302 + components: + - type: Transform + pos: 0.5,-11.5 + parent: 1 + - uid: 303 + components: + - type: Transform + pos: 0.5,-12.5 + parent: 1 + - uid: 304 + components: + - type: Transform + pos: 1.5,-11.5 + parent: 1 + - uid: 305 + components: + - type: Transform + pos: 23.5,9.5 + parent: 1 + - uid: 312 + components: + - type: Transform + pos: -6.5,-6.5 + parent: 1 + - uid: 313 + components: + - type: Transform + pos: -7.5,-4.5 + parent: 1 + - uid: 314 + components: + - type: Transform + pos: -6.5,-4.5 + parent: 1 + - uid: 315 + components: + - type: Transform + pos: -6.5,-2.5 + parent: 1 + - uid: 316 + components: + - type: Transform + pos: -6.5,-1.5 + parent: 1 + - uid: 317 + components: + - type: Transform + pos: -6.5,1.5 + parent: 1 + - uid: 318 + components: + - type: Transform + pos: -7.5,1.5 + parent: 1 + - uid: 319 + components: + - type: Transform + pos: 3.5,-9.5 + parent: 1 + - uid: 320 + components: + - type: Transform + pos: 4.5,-9.5 + parent: 1 + - uid: 321 + components: + - type: Transform + pos: 2.5,-9.5 + parent: 1 + - uid: 326 + components: + - type: Transform + pos: -3.5,4.5 + parent: 1 + - uid: 334 + components: + - type: Transform + pos: 0.5,-9.5 + parent: 1 + - uid: 337 + components: + - type: Transform + pos: 1.5,7.5 + parent: 1 + - uid: 339 + components: + - type: Transform + pos: 1.5,-10.5 + parent: 1 + - uid: 373 + components: + - type: Transform + pos: 1.5,-9.5 + parent: 1 + - uid: 374 + components: + - type: Transform + pos: -3.5,2.5 + parent: 1 + - uid: 609 + components: + - type: Transform + pos: -4.5,3.5 + parent: 1 + - uid: 616 + components: + - type: Transform + pos: -5.5,-3.5 + parent: 1 + - uid: 818 + components: + - type: Transform + pos: -3.5,3.5 + parent: 1 + - uid: 884 + components: + - type: Transform + pos: 17.5,-1.5 + parent: 1 +- proto: AsteroidAltRockMining + entities: + - uid: 67 + components: + - type: Transform + pos: 15.5,10.5 + parent: 1 + - uid: 127 + components: + - type: Transform + pos: 16.5,10.5 + parent: 1 + - uid: 129 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,10.5 + parent: 1 + - uid: 137 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,10.5 + parent: 1 + - uid: 186 + components: + - type: Transform + pos: -8.5,-5.5 + parent: 1 + - uid: 202 + components: + - type: Transform + pos: 7.5,12.5 + parent: 1 + - uid: 210 + components: + - type: Transform + pos: 7.5,11.5 + parent: 1 + - uid: 224 + components: + - type: Transform + pos: 6.5,12.5 + parent: 1 + - uid: 306 + components: + - type: Transform + pos: 16.5,8.5 + parent: 1 + - uid: 307 + components: + - type: Transform + pos: 5.5,12.5 + parent: 1 + - uid: 310 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,11.5 + parent: 1 + - uid: 328 + components: + - type: Transform + pos: 13.5,10.5 + parent: 1 + - uid: 330 + components: + - type: Transform + pos: 16.5,9.5 + parent: 1 + - uid: 331 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,11.5 + parent: 1 + - uid: 383 + components: + - type: Transform + pos: 16.5,7.5 + parent: 1 + - uid: 412 + components: + - type: Transform + pos: 14.5,11.5 + parent: 1 + - uid: 413 + components: + - type: Transform + pos: 14.5,10.5 + parent: 1 + - uid: 415 + components: + - type: Transform + pos: 16.5,6.5 + parent: 1 + - uid: 418 + components: + - type: Transform + pos: 17.5,7.5 + parent: 1 + - uid: 419 + components: + - type: Transform + pos: 17.5,9.5 + parent: 1 + - uid: 420 + components: + - type: Transform + pos: 17.5,11.5 + parent: 1 + - uid: 536 + components: + - type: Transform + pos: 18.5,11.5 + parent: 1 + - uid: 540 + components: + - type: Transform + pos: 16.5,11.5 + parent: 1 + - uid: 581 + components: + - type: Transform + pos: 15.5,9.5 + parent: 1 + - uid: 582 + components: + - type: Transform + pos: 15.5,8.5 + parent: 1 + - uid: 583 + components: + - type: Transform + pos: 15.5,7.5 + parent: 1 + - uid: 584 + components: + - type: Transform + pos: 15.5,6.5 + parent: 1 + - uid: 585 + components: + - type: Transform + pos: 15.5,5.5 + parent: 1 +- proto: AtmosDeviceFanTiny + entities: + - uid: 341 + components: + - type: Transform + pos: 3.5,6.5 + parent: 1 +- proto: Bed + entities: + - uid: 342 + components: + - type: Transform + pos: -0.5,1.5 + parent: 1 + - uid: 343 + components: + - type: Transform + pos: 6.5,1.5 + parent: 1 + - uid: 344 + components: + - type: Transform + pos: 6.5,3.5 + parent: 1 + - uid: 345 + components: + - type: Transform + pos: -1.5,1.5 + parent: 1 +- proto: BedsheetSyndie + entities: + - uid: 346 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,1.5 + parent: 1 + - uid: 347 + components: + - type: Transform + pos: 6.5,1.5 + parent: 1 + - uid: 348 + components: + - type: Transform + pos: 6.5,3.5 + parent: 1 + - uid: 349 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,1.5 + parent: 1 +- proto: BenchSofaCorpLeft + entities: + - uid: 422 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,-4.5 + parent: 1 + - uid: 423 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,-5.5 + parent: 1 + - uid: 541 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.5,3.5 + parent: 1 +- proto: BenchSofaCorpRight + entities: + - uid: 402 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.5,4.5 + parent: 1 + - uid: 404 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,-5.5 + parent: 1 + - uid: 421 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,-4.5 + parent: 1 +- proto: BlastDoorOpen + entities: + - uid: 324 + components: + - type: Transform + pos: 12.5,7.5 + parent: 1 + - type: DeviceLinkSink + links: + - 593 + - uid: 325 + components: + - type: Transform + pos: 12.5,6.5 + parent: 1 + - type: DeviceLinkSink + links: + - 593 + - uid: 329 + components: + - type: Transform + pos: 12.5,8.5 + parent: 1 + - type: DeviceLinkSink + links: + - 593 + - uid: 350 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,-6.5 + parent: 1 + - type: DeviceLinkSink + links: + - 807 + - uid: 351 + components: + - type: Transform + pos: 13.5,0.5 + parent: 1 + - type: DeviceLinkSink + invokeCounter: 4 + links: + - 805 + - uid: 352 + components: + - type: Transform + pos: 13.5,1.5 + parent: 1 + - type: DeviceLinkSink + invokeCounter: 4 + links: + - 805 + - uid: 353 + components: + - type: Transform + pos: 13.5,-0.5 + parent: 1 + - type: DeviceLinkSink + invokeCounter: 4 + links: + - 805 + - uid: 354 + components: + - type: Transform + pos: 13.5,2.5 + parent: 1 + - type: DeviceLinkSink + invokeCounter: 4 + links: + - 805 + - uid: 355 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,-6.5 + parent: 1 + - type: DeviceLinkSink + links: + - 807 + - uid: 356 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,-6.5 + parent: 1 + - type: DeviceLinkSink + links: + - 807 + - uid: 357 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,-5.5 + parent: 1 + - type: DeviceLinkSink + links: + - 807 + - uid: 358 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,-5.5 + parent: 1 + - type: DeviceLinkSink + links: + - 807 + - uid: 359 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 12.5,-5.5 + parent: 1 + - type: DeviceLinkSink + links: + - 807 + - uid: 360 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,-5.5 + parent: 1 + - type: DeviceLinkSink + links: + - 807 + - uid: 361 + components: + - type: Transform + pos: 10.5,-1.5 + parent: 1 + - type: DeviceLinkSink + links: + - 805 +- proto: BoozeDispenser + entities: + - uid: 362 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-3.5 + parent: 1 + - type: Emagged +- proto: BoxHandcuff + entities: + - uid: 118 + components: + - type: Transform + parent: 363 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: BoxLethalshot + entities: + - uid: 365 + components: + - type: Transform + parent: 363 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 366 + components: + - type: Transform + parent: 363 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: BoxShotgunFlare + entities: + - uid: 367 + components: + - type: Transform + parent: 363 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: BriefcaseBrownFilled + entities: + - uid: 403 + components: + - type: Transform + pos: 12.615925,-0.21887398 + parent: 1 +- proto: BriefcaseSyndieLobbyingBundleFilled + entities: + - uid: 371 + components: + - type: Transform + pos: 12.604369,-0.012328386 + parent: 1 +- proto: BriefcaseSyndieSniperBundleFilled + entities: + - uid: 370 + components: + - type: Transform + pos: 12.604369,-0.3873284 + parent: 1 +- proto: ButtonFrameCautionSecurity + entities: + - uid: 592 + components: + - type: Transform + pos: 12.5,5.5 + parent: 1 +- proto: CableApcExtension + entities: + - uid: 440 + components: + - type: Transform + pos: 7.5,0.5 + parent: 1 + - uid: 441 + components: + - type: Transform + pos: 8.5,0.5 + parent: 1 + - uid: 442 + components: + - type: Transform + pos: 9.5,0.5 + parent: 1 + - uid: 443 + components: + - type: Transform + pos: 9.5,1.5 + parent: 1 + - uid: 444 + components: + - type: Transform + pos: 9.5,-0.5 + parent: 1 + - uid: 445 + components: + - type: Transform + pos: 2.5,4.5 + parent: 1 + - uid: 446 + components: + - type: Transform + pos: 2.5,3.5 + parent: 1 + - uid: 447 + components: + - type: Transform + pos: 1.5,2.5 + parent: 1 + - uid: 448 + components: + - type: Transform + pos: 1.5,2.5 + parent: 1 + - uid: 449 + components: + - type: Transform + pos: 3.5,2.5 + parent: 1 + - uid: 450 + components: + - type: Transform + pos: 2.5,2.5 + parent: 1 + - uid: 451 + components: + - type: Transform + pos: 3.5,1.5 + parent: 1 + - uid: 452 + components: + - type: Transform + pos: 3.5,0.5 + parent: 1 + - uid: 453 + components: + - type: Transform + pos: 3.5,-5.5 + parent: 1 + - uid: 454 + components: + - type: Transform + pos: 3.5,-4.5 + parent: 1 + - uid: 455 + components: + - type: Transform + pos: 3.5,-3.5 + parent: 1 + - uid: 456 + components: + - type: Transform + pos: -1.5,-3.5 + parent: 1 + - uid: 457 + components: + - type: Transform + pos: 4.5,-3.5 + parent: 1 + - uid: 458 + components: + - type: Transform + pos: 1.5,1.5 + parent: 1 + - uid: 459 + components: + - type: Transform + pos: 1.5,0.5 + parent: 1 + - uid: 460 + components: + - type: Transform + pos: 1.5,-0.5 + parent: 1 + - uid: 461 + components: + - type: Transform + pos: 0.5,-0.5 + parent: 1 + - uid: 462 + components: + - type: Transform + pos: -0.5,-0.5 + parent: 1 + - uid: 463 + components: + - type: Transform + pos: -0.5,0.5 + parent: 1 + - uid: 464 + components: + - type: Transform + pos: -1.5,-2.5 + parent: 1 + - uid: 465 + components: + - type: Transform + pos: -1.5,-0.5 + parent: 1 + - uid: 466 + components: + - type: Transform + pos: -1.5,-1.5 + parent: 1 + - uid: 467 + components: + - type: Transform + pos: 2.5,-5.5 + parent: 1 + - uid: 468 + components: + - type: Transform + pos: 2.5,-6.5 + parent: 1 + - uid: 469 + components: + - type: Transform + pos: 1.5,-6.5 + parent: 1 + - uid: 470 + components: + - type: Transform + pos: 0.5,-6.5 + parent: 1 + - uid: 471 + components: + - type: Transform + pos: -0.5,-6.5 + parent: 1 + - uid: 472 + components: + - type: Transform + pos: 1.5,3.5 + parent: 1 + - uid: 473 + components: + - type: Transform + pos: 0.5,3.5 + parent: 1 + - uid: 474 + components: + - type: Transform + pos: -0.5,3.5 + parent: 1 + - uid: 475 + components: + - type: Transform + pos: -1.5,3.5 + parent: 1 + - uid: 476 + components: + - type: Transform + pos: -1.5,4.5 + parent: 1 + - uid: 477 + components: + - type: Transform + pos: 10.5,-0.5 + parent: 1 + - uid: 478 + components: + - type: Transform + pos: 10.5,-1.5 + parent: 1 + - uid: 479 + components: + - type: Transform + pos: 10.5,-2.5 + parent: 1 + - uid: 480 + components: + - type: Transform + pos: 10.5,-3.5 + parent: 1 + - uid: 481 + components: + - type: Transform + pos: 11.5,-3.5 + parent: 1 + - uid: 482 + components: + - type: Transform + pos: 12.5,-3.5 + parent: 1 + - uid: 483 + components: + - type: Transform + pos: 7.5,-0.5 + parent: 1 + - uid: 484 + components: + - type: Transform + pos: 6.5,-0.5 + parent: 1 + - uid: 485 + components: + - type: Transform + pos: 6.5,-1.5 + parent: 1 + - uid: 486 + components: + - type: Transform + pos: 6.5,-2.5 + parent: 1 + - uid: 487 + components: + - type: Transform + pos: 6.5,-3.5 + parent: 1 + - uid: 488 + components: + - type: Transform + pos: 7.5,-3.5 + parent: 1 + - uid: 489 + components: + - type: Transform + pos: 7.5,-4.5 + parent: 1 + - uid: 490 + components: + - type: Transform + pos: 3.5,3.5 + parent: 1 + - uid: 491 + components: + - type: Transform + pos: 4.5,3.5 + parent: 1 + - uid: 492 + components: + - type: Transform + pos: 5.5,3.5 + parent: 1 + - uid: 954 + components: + - type: Transform + pos: 10.5,2.5 + parent: 1 + - uid: 959 + components: + - type: Transform + pos: 9.5,2.5 + parent: 1 + - uid: 993 + components: + - type: Transform + pos: 9.5,1.5 + parent: 1 + - uid: 994 + components: + - type: Transform + pos: 9.5,2.5 + parent: 1 + - uid: 995 + components: + - type: Transform + pos: 9.5,3.5 + parent: 1 + - uid: 996 + components: + - type: Transform + pos: 9.5,4.5 + parent: 1 + - uid: 997 + components: + - type: Transform + pos: 10.5,4.5 + parent: 1 + - uid: 998 + components: + - type: Transform + pos: 11.5,4.5 + parent: 1 + - uid: 999 + components: + - type: Transform + pos: 11.5,5.5 + parent: 1 + - uid: 1000 + components: + - type: Transform + pos: 11.5,6.5 + parent: 1 + - uid: 1001 + components: + - type: Transform + pos: 11.5,7.5 + parent: 1 + - uid: 1002 + components: + - type: Transform + pos: 11.5,8.5 + parent: 1 + - uid: 1003 + components: + - type: Transform + pos: 11.5,9.5 + parent: 1 + - uid: 1004 + components: + - type: Transform + pos: 11.5,10.5 + parent: 1 +- proto: CableHV + entities: + - uid: 493 + components: + - type: Transform + pos: -0.5,6.5 + parent: 1 + - uid: 494 + components: + - type: Transform + pos: -0.5,5.5 + parent: 1 + - uid: 495 + components: + - type: Transform + pos: 0.5,5.5 + parent: 1 + - uid: 496 + components: + - type: Transform + pos: -1.5,5.5 + parent: 1 + - uid: 497 + components: + - type: Transform + pos: -1.5,6.5 + parent: 1 + - uid: 498 + components: + - type: Transform + pos: -1.5,4.5 + parent: 1 + - uid: 499 + components: + - type: Transform + pos: -1.5,3.5 + parent: 1 + - uid: 500 + components: + - type: Transform + pos: -0.5,3.5 + parent: 1 + - uid: 501 + components: + - type: Transform + pos: -2.5,5.5 + parent: 1 + - uid: 502 + components: + - type: Transform + pos: -2.5,4.5 + parent: 1 + - uid: 503 + components: + - type: Transform + pos: -2.5,3.5 + parent: 1 + - uid: 504 + components: + - type: Transform + pos: -1.5,2.5 + parent: 1 + - uid: 505 + components: + - type: Transform + pos: -0.5,2.5 + parent: 1 +- proto: CableMV + entities: + - uid: 506 + components: + - type: Transform + pos: -1.5,4.5 + parent: 1 + - uid: 507 + components: + - type: Transform + pos: -0.5,5.5 + parent: 1 + - uid: 508 + components: + - type: Transform + pos: 0.5,5.5 + parent: 1 + - uid: 509 + components: + - type: Transform + pos: -1.5,5.5 + parent: 1 + - uid: 510 + components: + - type: Transform + pos: -1.5,3.5 + parent: 1 + - uid: 511 + components: + - type: Transform + pos: -0.5,3.5 + parent: 1 + - uid: 512 + components: + - type: Transform + pos: 1.5,3.5 + parent: 1 + - uid: 513 + components: + - type: Transform + pos: 0.5,3.5 + parent: 1 + - uid: 514 + components: + - type: Transform + pos: 2.5,3.5 + parent: 1 + - uid: 515 + components: + - type: Transform + pos: 2.5,4.5 + parent: 1 + - uid: 516 + components: + - type: Transform + pos: 2.5,2.5 + parent: 1 + - uid: 517 + components: + - type: Transform + pos: 2.5,1.5 + parent: 1 + - uid: 518 + components: + - type: Transform + pos: 2.5,0.5 + parent: 1 + - uid: 519 + components: + - type: Transform + pos: 2.5,-0.5 + parent: 1 + - uid: 520 + components: + - type: Transform + pos: 2.5,-1.5 + parent: 1 + - uid: 521 + components: + - type: Transform + pos: 2.5,-2.5 + parent: 1 + - uid: 522 + components: + - type: Transform + pos: 2.5,-3.5 + parent: 1 + - uid: 523 + components: + - type: Transform + pos: 2.5,-4.5 + parent: 1 + - uid: 524 + components: + - type: Transform + pos: 3.5,-4.5 + parent: 1 + - uid: 525 + components: + - type: Transform + pos: 3.5,-5.5 + parent: 1 + - uid: 526 + components: + - type: Transform + pos: 3.5,-0.5 + parent: 1 + - uid: 527 + components: + - type: Transform + pos: 4.5,-0.5 + parent: 1 + - uid: 528 + components: + - type: Transform + pos: 5.5,-0.5 + parent: 1 + - uid: 529 + components: + - type: Transform + pos: 6.5,-0.5 + parent: 1 + - uid: 530 + components: + - type: Transform + pos: 6.5,-0.5 + parent: 1 + - uid: 531 + components: + - type: Transform + pos: 7.5,-0.5 + parent: 1 + - uid: 532 + components: + - type: Transform + pos: 8.5,-0.5 + parent: 1 + - uid: 533 + components: + - type: Transform + pos: 8.5,0.5 + parent: 1 + - uid: 534 + components: + - type: Transform + pos: 7.5,0.5 + parent: 1 +- proto: CarpetBlack + entities: + - uid: 381 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,2.5 + parent: 1 + - uid: 570 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,-4.5 + parent: 1 + - uid: 571 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,-5.5 + parent: 1 + - uid: 572 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,-4.5 + parent: 1 + - uid: 573 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,-5.5 + parent: 1 + - uid: 574 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,-5.5 + parent: 1 + - uid: 575 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,-4.5 + parent: 1 + - uid: 594 + components: + - type: Transform + pos: 10.5,2.5 + parent: 1 + - uid: 595 + components: + - type: Transform + pos: 9.5,2.5 + parent: 1 + - uid: 596 + components: + - type: Transform + pos: 9.5,3.5 + parent: 1 + - uid: 597 + components: + - type: Transform + pos: 10.5,3.5 + parent: 1 + - uid: 598 + components: + - type: Transform + pos: 11.5,3.5 + parent: 1 + - uid: 620 + components: + - type: Transform + pos: 11.5,2.5 + parent: 1 + - uid: 960 + components: + - type: Transform + pos: 2.5,2.5 + parent: 1 + - uid: 964 + components: + - type: Transform + pos: 3.5,1.5 + parent: 1 + - uid: 965 + components: + - type: Transform + pos: 2.5,0.5 + parent: 1 + - uid: 966 + components: + - type: Transform + pos: 3.5,0.5 + parent: 1 + - uid: 967 + components: + - type: Transform + pos: 2.5,1.5 + parent: 1 + - uid: 968 + components: + - type: Transform + pos: -1.5,1.5 + parent: 1 + - uid: 969 + components: + - type: Transform + pos: -1.5,0.5 + parent: 1 + - uid: 970 + components: + - type: Transform + pos: -2.5,0.5 + parent: 1 + - uid: 971 + components: + - type: Transform + pos: -1.5,-0.5 + parent: 1 + - uid: 972 + components: + - type: Transform + pos: -0.5,-0.5 + parent: 1 + - uid: 973 + components: + - type: Transform + pos: -0.5,0.5 + parent: 1 + - uid: 974 + components: + - type: Transform + pos: -0.5,1.5 + parent: 1 + - uid: 975 + components: + - type: Transform + pos: 6.5,1.5 + parent: 1 + - uid: 976 + components: + - type: Transform + pos: 6.5,2.5 + parent: 1 + - uid: 977 + components: + - type: Transform + pos: 6.5,3.5 + parent: 1 + - uid: 978 + components: + - type: Transform + pos: 9.5,1.5 + parent: 1 + - uid: 979 + components: + - type: Transform + pos: 9.5,0.5 + parent: 1 + - uid: 980 + components: + - type: Transform + pos: 10.5,0.5 + parent: 1 + - uid: 981 + components: + - type: Transform + pos: 10.5,1.5 + parent: 1 + - uid: 982 + components: + - type: Transform + pos: 11.5,1.5 + parent: 1 + - uid: 983 + components: + - type: Transform + pos: 11.5,0.5 + parent: 1 +- proto: ChairOfficeDark + entities: + - uid: 369 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.383302,3.471712 + parent: 1 + - uid: 372 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.762909,1.1363623 + parent: 1 + - uid: 409 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.407137,7.5838184 + parent: 1 + - uid: 410 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.684784,2.2144873 + parent: 1 + - uid: 535 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,1.5 + parent: 1 +- proto: CigPackSyndicate + entities: + - uid: 558 + components: + - type: Transform + pos: 4.7080255,1.4853511 + parent: 1 + - uid: 569 + components: + - type: Transform + pos: 4.7236505,1.7666011 + parent: 1 +- proto: ClosetWallMixed + entities: + - uid: 388 + components: + - type: MetaData + name: pyjama closet + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,2.5 + parent: 1 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.14673 + moles: + - 1.7459903 + - 6.568249 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 400 + - 399 + - 393 + - 392 + - 391 + - 390 + - 398 + - 397 + - 396 + - 395 + - 394 + - 389 +- proto: ClothingHeadPyjamaSyndicateBlack + entities: + - uid: 393 + components: + - type: Transform + parent: 388 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 395 + components: + - type: Transform + parent: 388 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: ClothingHeadPyjamaSyndicatePink + entities: + - uid: 396 + components: + - type: Transform + parent: 388 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 399 + components: + - type: Transform + parent: 388 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: ClothingHeadPyjamaSyndicateRed + entities: + - uid: 389 + components: + - type: Transform + parent: 388 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 391 + components: + - type: Transform + parent: 388 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: ClothingMaskGasVoiceChameleon + entities: + - uid: 549 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.464487,4.225065 + parent: 1 + - uid: 578 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.464487,3.6313155 + parent: 1 +- proto: ClothingUniformJumpsuitPyjamaSyndicateBlack + entities: + - uid: 392 + components: + - type: Transform + parent: 388 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 397 + components: + - type: Transform + parent: 388 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: ClothingUniformJumpsuitPyjamaSyndicatePink + entities: + - uid: 390 + components: + - type: Transform + parent: 388 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 400 + components: + - type: Transform + parent: 388 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: ClothingUniformJumpsuitPyjamaSyndicateRed + entities: + - uid: 394 + components: + - type: Transform + parent: 388 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 398 + components: + - type: Transform + parent: 388 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: CombatKnife + entities: + - uid: 376 + components: + - type: Transform + parent: 363 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 377 + components: + - type: Transform + parent: 363 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: ComfyChair + entities: + - uid: 543 + components: + - type: Transform + pos: 1.5,2.5 + parent: 1 +- proto: ComputerCrewMonitoring + entities: + - uid: 548 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.5,0.5 + parent: 1 +- proto: ComputerMassMedia + entities: + - uid: 311 + components: + - type: Transform + pos: 9.5,2.5 + parent: 1 +- proto: ComputerRadar + entities: + - uid: 550 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.5,1.5 + parent: 1 + - type: RadarConsole + maxRange: 2048 + - type: WorldLoader + radius: 2048 +- proto: ComputerSurveillanceCameraMonitor + entities: + - uid: 991 + components: + - type: Transform + pos: 10.5,4.5 + parent: 1 +- proto: ComputerSurveillanceWirelessCameraMonitor + entities: + - uid: 406 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.5,2.5 + parent: 1 +- proto: CrateFoodDonkpocketSavory + entities: + - uid: 551 + components: + - type: Transform + pos: -0.5,-5.5 + parent: 1 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.1496 + moles: + - 1.8856695 + - 7.0937095 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 +- proto: CrateServiceBureaucracy + entities: + - uid: 577 + components: + - type: Transform + pos: -1.5,4.5 + parent: 1 +- proto: CrateSyndicateSurplusBundle + entities: + - uid: 411 + components: + - type: Transform + pos: 9.5,6.5 + parent: 1 + - uid: 992 + components: + - type: Transform + pos: 10.5,6.5 + parent: 1 +- proto: CrowbarRed + entities: + - uid: 378 + components: + - type: Transform + parent: 363 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: DefibrillatorCabinetFilled + entities: + - uid: 552 + components: + - type: Transform + pos: -0.5,-1.5 + parent: 1 +- proto: DiagnosisReportPaper + entities: + - uid: 432 + components: + - type: Transform + pos: 8.472298,0.6316006 + parent: 1 + - uid: 554 + components: + - type: Transform + pos: 8.472298,0.6316006 + parent: 1 + - uid: 562 + components: + - type: Transform + pos: 8.472298,0.6316006 + parent: 1 + - uid: 564 + components: + - type: Transform + pos: 8.472298,0.6316006 + parent: 1 + - uid: 566 + components: + - type: Transform + pos: 8.472298,0.6316006 + parent: 1 +- proto: DisposalPipe + entities: + - uid: 599 + components: + - type: Transform + pos: 10.5,-3.5 + parent: 1 + - uid: 600 + components: + - type: Transform + pos: 10.5,-4.5 + parent: 1 + - uid: 601 + components: + - type: Transform + pos: 10.5,-5.5 + parent: 1 +- proto: DisposalTrunk + entities: + - uid: 602 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,-6.5 + parent: 1 + - uid: 603 + components: + - type: Transform + pos: 10.5,-2.5 + parent: 1 +- proto: DisposalUnit + entities: + - uid: 604 + components: + - type: MetaData + name: escape hatch + - type: Transform + pos: 10.5,-2.5 + parent: 1 +- proto: DrinkMugDog + entities: + - uid: 605 + components: + - type: Transform + rot: 6.283185307179586 rad + pos: 1.6752021,1.4137775 + parent: 1 +- proto: DrinkMugHeart + entities: + - uid: 606 + components: + - type: Transform + pos: 1.2883832,1.4021075 + parent: 1 +- proto: DrinkMugOne + entities: + - uid: 607 + components: + - type: Transform + pos: 1.6477582,1.7614824 + parent: 1 +- proto: DrinkMugRainbow + entities: + - uid: 608 + components: + - type: Transform + pos: 1.3040082,1.7302322 + parent: 1 +- proto: EncryptionKeyCommand + entities: + - uid: 613 + components: + - type: Transform + parent: 612 + - type: Physics + canCollide: False +- proto: EncryptionKeyStationMaster + entities: + - uid: 614 + components: + - type: Transform + parent: 612 + - type: Physics + canCollide: False +- proto: EncryptionKeySyndie + entities: + - uid: 615 + components: + - type: Transform + parent: 612 + - type: Physics + canCollide: False +- proto: ExtinguisherCabinet + entities: + - uid: 619 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,0.5 + parent: 1 +- proto: FaxMachineListeningSyndie + entities: + - uid: 368 + components: + - type: Transform + pos: 8.5,2.5 + parent: 1 +- proto: filingCabinetDrawerRandom + entities: + - uid: 567 + components: + - type: Transform + pos: 9.5,0.5 + parent: 1 +- proto: FireAlarm + entities: + - uid: 621 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,-1.5 + parent: 1 + - type: DeviceList + devices: + - 628 + - 629 + - 622 + - 623 + - 624 + - 632 + - 631 + - 625 + - 627 + - 633 +- proto: Firelock + entities: + - uid: 622 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,-0.5 + parent: 1 + - uid: 623 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,-0.5 + parent: 1 + - uid: 624 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,-1.5 + parent: 1 + - uid: 625 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,2.5 + parent: 1 + - uid: 626 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,4.5 + parent: 1 + - uid: 627 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,5.5 + parent: 1 + - uid: 628 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,3.5 + parent: 1 + - uid: 629 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-0.5 + parent: 1 + - uid: 630 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-1.5 + parent: 1 + - uid: 631 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-5.5 + parent: 1 + - uid: 632 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-1.5 + parent: 1 + - uid: 633 + components: + - type: Transform + pos: 9.5,-3.5 + parent: 1 +- proto: ForensicReportPaper + entities: + - uid: 427 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.519173,0.6784754 + parent: 1 + - uid: 555 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.519173,0.6784754 + parent: 1 + - uid: 557 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.519173,0.6784754 + parent: 1 + - uid: 561 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.519173,0.6784754 + parent: 1 + - uid: 563 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.519173,0.6784754 + parent: 1 +- proto: GasPassiveVent + entities: + - uid: 634 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,1.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 635 + components: + - type: Transform + pos: 6.5,6.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 636 + components: + - type: Transform + pos: 4.5,10.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 637 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 638 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,-6.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 639 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,-7.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 640 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,-10.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 641 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,-3.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 642 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,5.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' +- proto: GasPipeBend + entities: + - uid: 643 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,0.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 644 + components: + - type: Transform + pos: -3.5,1.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 645 + components: + - type: Transform + pos: 6.5,2.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 646 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 647 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-6.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 648 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,-3.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 649 + components: + - type: Transform + pos: 10.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 650 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,-3.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' +- proto: GasPipeFourway + entities: + - uid: 651 + components: + - type: Transform + pos: 2.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' +- proto: GasPipeStraight + entities: + - uid: 652 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,4.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 653 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,3.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 654 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,1.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 655 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,0.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 656 + components: + - type: Transform + pos: 4.5,-7.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 657 + components: + - type: Transform + pos: 4.5,-8.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 658 + components: + - type: Transform + pos: 4.5,-9.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 659 + components: + - type: Transform + pos: 8.5,-6.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 660 + components: + - type: Transform + pos: 8.5,-5.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 661 + components: + - type: Transform + pos: 8.5,-4.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 662 + components: + - type: Transform + pos: 13.5,-4.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 663 + components: + - type: Transform + pos: 13.5,-5.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 664 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 13.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 665 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 666 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,4.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 667 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,5.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 668 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,4.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 669 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,5.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 670 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,6.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 671 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,7.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 672 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,8.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 673 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,9.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 674 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 675 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 676 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,2.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 677 + components: + - type: Transform + pos: -1.5,-1.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 678 + components: + - type: Transform + pos: 2.5,-5.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 679 + components: + - type: Transform + pos: 2.5,-4.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 680 + components: + - type: Transform + pos: 2.5,-3.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 681 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,-3.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 682 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,-3.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 683 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,5.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 684 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,5.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 685 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,-2.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 686 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,-1.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 687 + components: + - type: Transform + pos: 10.5,-1.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 688 + components: + - type: Transform + pos: 10.5,-2.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 689 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 690 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,2.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 691 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,2.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 692 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,1.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 693 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,0.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 694 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 695 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 696 + components: + - type: Transform + pos: 2.5,-1.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 697 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 698 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' +- proto: GasPipeTJunction + entities: + - uid: 699 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,3.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 700 + components: + - type: Transform + pos: 2.5,3.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 701 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,2.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 702 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 703 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-2.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 704 + components: + - type: Transform + pos: 6.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 705 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' +- proto: GasPort + entities: + - uid: 706 + components: + - type: Transform + pos: 1.5,5.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' +- proto: GasVentPump + entities: + - uid: 384 + components: + - type: Transform + pos: 8.5,0.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 576 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 707 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,3.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 576 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 708 + components: + - type: Transform + pos: -0.5,0.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 576 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 709 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-2.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 576 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 710 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-2.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 576 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 711 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-6.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 576 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 712 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,-3.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 576 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 713 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,1.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 576 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 714 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,3.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 576 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 716 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.5,-3.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 576 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 717 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-3.5 + parent: 1 +- proto: GasVentScrubber + entities: + - uid: 718 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,3.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 576 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 719 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,5.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 576 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 720 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,0.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 576 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 721 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-3.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 576 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 722 + components: + - type: Transform + pos: 4.5,-6.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 576 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 723 + components: + - type: Transform + pos: 8.5,-3.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 576 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 724 + components: + - type: Transform + pos: 13.5,-3.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 576 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 725 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,-0.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 576 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 726 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,3.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 576 + - type: AtmosPipeColor + color: '#FF1212FF' +- proto: GeneratorWallmountAPU + entities: + - uid: 727 + components: + - type: Transform + pos: -1.5,6.5 + parent: 1 + - uid: 728 + components: + - type: Transform + pos: -0.5,6.5 + parent: 1 + - uid: 729 + components: + - type: Transform + pos: -2.5,5.5 + parent: 1 + - uid: 730 + components: + - type: Transform + pos: -2.5,4.5 + parent: 1 + - uid: 732 + components: + - type: Transform + pos: -1.5,2.5 + parent: 1 + - uid: 733 + components: + - type: Transform + pos: -0.5,2.5 + parent: 1 +- proto: GravityGeneratorMini + entities: + - uid: 734 + components: + - type: Transform + pos: -0.5,5.5 + parent: 1 +- proto: Grille + entities: + - uid: 130 + components: + - type: Transform + pos: 7.5,7.5 + parent: 1 + - uid: 309 + components: + - type: Transform + pos: 7.5,8.5 + parent: 1 + - uid: 588 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,6.5 + parent: 1 + - uid: 735 + components: + - type: Transform + pos: 10.5,-1.5 + parent: 1 + - uid: 736 + components: + - type: Transform + pos: 12.5,-5.5 + parent: 1 + - uid: 737 + components: + - type: Transform + pos: 13.5,-5.5 + parent: 1 + - uid: 738 + components: + - type: Transform + pos: 13.5,0.5 + parent: 1 + - uid: 739 + components: + - type: Transform + pos: 13.5,-0.5 + parent: 1 + - uid: 740 + components: + - type: Transform + pos: 13.5,1.5 + parent: 1 + - uid: 741 + components: + - type: Transform + pos: 13.5,2.5 + parent: 1 + - uid: 742 + components: + - type: Transform + pos: 7.5,-6.5 + parent: 1 + - uid: 743 + components: + - type: Transform + pos: 10.5,-5.5 + parent: 1 + - uid: 744 + components: + - type: Transform + pos: 8.5,-6.5 + parent: 1 + - uid: 745 + components: + - type: Transform + pos: 6.5,-6.5 + parent: 1 + - uid: 746 + components: + - type: Transform + pos: 11.5,-5.5 + parent: 1 +- proto: GrilleDiagonal + entities: + - uid: 589 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,6.5 + parent: 1 + - uid: 590 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,8.5 + parent: 1 +- proto: HospitalCurtainsOpen + entities: + - uid: 747 + components: + - type: Transform + pos: 6.5,3.5 + parent: 1 + - uid: 748 + components: + - type: Transform + pos: 6.5,1.5 + parent: 1 + - uid: 749 + components: + - type: Transform + pos: -1.5,1.5 + parent: 1 + - uid: 750 + components: + - type: Transform + pos: -0.5,1.5 + parent: 1 +- proto: hydroponicsTray + entities: + - uid: 751 + components: + - type: Transform + pos: 12.5,-4.5 + parent: 1 + - uid: 752 + components: + - type: Transform + pos: 13.5,-4.5 + parent: 1 + - uid: 753 + components: + - type: Transform + pos: 11.5,-4.5 + parent: 1 + - uid: 754 + components: + - type: Transform + pos: 10.5,-4.5 + parent: 1 +- proto: KitchenMicrowave + entities: + - uid: 755 + components: + - type: Transform + pos: 1.5,-2.5 + parent: 1 +- proto: LandMineExplosive + entities: + - uid: 364 + components: + - type: Transform + pos: 5.269056,11.251331 + parent: 1 + - uid: 579 + components: + - type: Transform + pos: 6.784681,11.813831 + parent: 1 + - uid: 756 + components: + - type: Transform + pos: 12.446557,-9.501101 + parent: 1 + - uid: 757 + components: + - type: Transform + pos: 17.449137,2.529461 + parent: 1 +- proto: LockerSyndicatePersonal + entities: + - uid: 363 + components: + - type: Transform + pos: -1.5,-5.5 + parent: 1 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.1496 + moles: + - 1.8978093 + - 7.139378 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 378 + - 377 + - 379 + - 367 + - 366 + - 380 + - 376 + - 365 + - 118 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null +- proto: MedkitCombatFilled + entities: + - uid: 758 + components: + - type: Transform + pos: -0.28039455,-3.70372 + parent: 1 +- proto: MedkitFilled + entities: + - uid: 759 + components: + - type: Transform + pos: -0.57726955,-3.500595 + parent: 1 +- proto: Mirror + entities: + - uid: 957 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,-3.5 + parent: 1 +- proto: NukeDiskFake + entities: + - uid: 760 + components: + - type: Transform + pos: 16.778532,-0.7526432 + parent: 1 +- proto: PaperArtifactAnalyzer + entities: + - uid: 424 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.456674,0.66285014 + parent: 1 + - uid: 428 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.456674,0.66285014 + parent: 1 + - uid: 433 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.456674,0.66285014 + parent: 1 + - uid: 542 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.456674,0.66285014 + parent: 1 + - uid: 546 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.456674,0.66285014 + parent: 1 +- proto: PaperBin10 + entities: + - uid: 87 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,0.5 + parent: 1 + - uid: 761 + components: + - type: Transform + pos: 7.5,-5.5 + parent: 1 +- proto: PaperCaptainsThoughts + entities: + - uid: 430 + components: + - type: Transform + pos: 8.519173,0.64722514 + parent: 1 + - uid: 437 + components: + - type: Transform + pos: 8.519173,0.64722514 + parent: 1 + - uid: 537 + components: + - type: Transform + pos: 8.519173,0.64722514 + parent: 1 + - uid: 547 + components: + - type: Transform + pos: 8.519173,0.64722514 + parent: 1 + - uid: 553 + components: + - type: Transform + pos: 8.519173,0.64722514 + parent: 1 +- proto: PaperCargoBountyManifest + entities: + - uid: 426 + components: + - type: Transform + pos: 8.503549,0.6316006 + parent: 1 + - uid: 429 + components: + - type: Transform + pos: 8.503549,0.6316006 + parent: 1 + - uid: 434 + components: + - type: Transform + pos: 8.503549,0.6316006 + parent: 1 + - uid: 435 + components: + - type: Transform + pos: 8.503549,0.6316006 + parent: 1 + - uid: 544 + components: + - type: Transform + pos: 8.503549,0.6316006 + parent: 1 +- proto: PaperCargoInvoice + entities: + - uid: 431 + components: + - type: Transform + pos: 8.487924,0.6316004 + parent: 1 + - uid: 436 + components: + - type: Transform + pos: 8.487924,0.6316004 + parent: 1 + - uid: 438 + components: + - type: Transform + pos: 8.487924,0.6316004 + parent: 1 + - uid: 439 + components: + - type: Transform + pos: 8.487924,0.6316004 + parent: 1 + - uid: 538 + components: + - type: Transform + pos: 8.487924,0.6316004 + parent: 1 +- proto: PaperCNCSheet + entities: + - uid: 539 + components: + - type: Transform + pos: 8.503549,0.6316006 + parent: 1 + - uid: 545 + components: + - type: Transform + pos: 8.503549,0.6316006 + parent: 1 + - uid: 556 + components: + - type: Transform + pos: 8.503549,0.6316006 + parent: 1 + - uid: 559 + components: + - type: Transform + pos: 8.503549,0.6316006 + parent: 1 + - uid: 560 + components: + - type: Transform + pos: 8.503549,0.6316006 + parent: 1 +- proto: PlushieNuke + entities: + - uid: 762 + components: + - type: Transform + pos: 6.565984,3.4567177 + parent: 1 + - uid: 763 + components: + - type: Transform + pos: 16.527655,-0.5029521 + parent: 1 +- proto: PlushieRouny + entities: + - uid: 764 + components: + - type: Transform + pos: 6.487859,1.4254675 + parent: 1 +- proto: PosterContrabandDonk + entities: + - uid: 765 + components: + - type: Transform + pos: 1.5,-1.5 + parent: 1 +- proto: PosterContrabandSyndicateRecruitment + entities: + - uid: 766 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,6.5 + parent: 1 +- proto: PosterLegitHotDonkExplosion + entities: + - uid: 767 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-4.5 + parent: 1 +- proto: PowerCellRecharger + entities: + - uid: 768 + components: + - type: Transform + pos: 8.5,1.5 + parent: 1 +- proto: Poweredlight + entities: + - uid: 18 + components: + - type: Transform + pos: 6.5,3.5 + parent: 1 + - uid: 19 + components: + - type: Transform + pos: 12.5,-2.5 + parent: 1 + - type: DeviceLinkSink + links: + - 46 + - uid: 21 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,1.5 + parent: 1 + - type: DeviceLinkSink + links: + - 46 + - uid: 375 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,0.5 + parent: 1 + - type: DeviceLinkSink + links: + - 46 + - uid: 731 + components: + - type: Transform + pos: 3.5,-2.5 + parent: 1 + - type: DeviceLinkSink + links: + - 46 + - uid: 896 + components: + - type: Transform + pos: 0.5,-6.5 + parent: 1 + - type: DeviceLinkSink + links: + - 46 + - uid: 917 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,1.5 + parent: 1 + - type: DeviceLinkSink + links: + - 46 + - uid: 956 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,-3.5 + parent: 1 + - type: DeviceLinkSink + links: + - 46 + - uid: 958 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,1.5 + parent: 1 + - type: DeviceLinkSink + links: + - 46 + - uid: 963 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,4.5 + parent: 1 + - type: DeviceLinkSink + links: + - 46 + - uid: 1005 + components: + - type: Transform + pos: 10.5,8.5 + parent: 1 +- proto: PoweredLightColoredRed + entities: + - uid: 20 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,-4.5 + parent: 1 + - type: DeviceLinkSink + links: + - 46 + - uid: 23 + components: + - type: Transform + pos: -1.5,-5.5 + parent: 1 + - type: DeviceLinkSink + links: + - 46 + - uid: 769 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-0.5 + parent: 1 + - type: DeviceLinkSink + links: + - 46 + - type: Timer + - uid: 770 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,4.5 + parent: 1 + - type: DeviceLinkSink + links: + - 46 + - uid: 771 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,2.5 + parent: 1 + - type: DeviceLinkSink + links: + - 46 + - type: Timer + - uid: 772 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-3.5 + parent: 1 + - type: DeviceLinkSink + links: + - 46 + - uid: 773 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,0.5 + parent: 1 + - type: DeviceLinkSink + links: + - 46 + - type: Timer + - uid: 774 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,0.5 + parent: 1 + - type: DeviceLinkSink + links: + - 46 + - uid: 775 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,-6.5 + parent: 1 + - type: DeviceLinkSink + links: + - 46 + - uid: 952 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,1.5 + parent: 1 + - uid: 955 + components: + - type: Transform + pos: 11.5,-2.5 + parent: 1 + - type: DeviceLinkSink + links: + - 46 +- proto: Rack + entities: + - uid: 776 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,5.5 + parent: 1 + - uid: 777 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,5.5 + parent: 1 + - uid: 778 + components: + - type: Transform + pos: -0.5,-3.5 + parent: 1 +- proto: RandomArcade + entities: + - uid: 779 + components: + - type: Transform + pos: 7.5,-2.5 + parent: 1 +- proto: RandomPosterContraband + entities: + - uid: 417 + components: + - type: Transform + pos: 9.5,5.5 + parent: 1 + - uid: 780 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,10.5 + parent: 1 + - uid: 781 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,0.5 + parent: 1 + - uid: 782 + components: + - type: Transform + pos: 5.5,0.5 + parent: 1 + - uid: 784 + components: + - type: Transform + pos: -1.5,-4.5 + parent: 1 + - uid: 785 + components: + - type: Transform + pos: 14.5,-3.5 + parent: 1 + - uid: 786 + components: + - type: Transform + pos: 5.5,-3.5 + parent: 1 + - uid: 827 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,10.5 + parent: 1 +- proto: RandomVendingDrinks + entities: + - uid: 787 + components: + - type: Transform + pos: 4.5,-2.5 + parent: 1 + - type: Emagged +- proto: RandomVendingSnacks + entities: + - uid: 788 + components: + - type: Transform + pos: 4.5,-3.5 + parent: 1 + - type: Emagged +- proto: ReinforcedPlasmaWindow + entities: + - uid: 38 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,6.5 + parent: 1 + - uid: 289 + components: + - type: Transform + pos: 7.5,7.5 + parent: 1 + - uid: 308 + components: + - type: Transform + pos: 7.5,8.5 + parent: 1 + - uid: 789 + components: + - type: Transform + pos: 10.5,-1.5 + parent: 1 + - uid: 790 + components: + - type: Transform + pos: 10.5,-5.5 + parent: 1 + - uid: 791 + components: + - type: Transform + pos: 12.5,-5.5 + parent: 1 + - uid: 792 + components: + - type: Transform + pos: 13.5,-0.5 + parent: 1 + - uid: 793 + components: + - type: Transform + pos: 13.5,0.5 + parent: 1 + - uid: 794 + components: + - type: Transform + pos: 13.5,2.5 + parent: 1 + - uid: 795 + components: + - type: Transform + pos: 13.5,1.5 + parent: 1 + - uid: 796 + components: + - type: Transform + pos: 11.5,-5.5 + parent: 1 + - uid: 797 + components: + - type: Transform + pos: 13.5,-5.5 + parent: 1 + - uid: 798 + components: + - type: Transform + pos: 6.5,-6.5 + parent: 1 + - uid: 799 + components: + - type: Transform + pos: 7.5,-6.5 + parent: 1 + - uid: 800 + components: + - type: Transform + pos: 8.5,-6.5 + parent: 1 +- proto: ReinforcedPlasmaWindowDiagonal + entities: + - uid: 586 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,8.5 + parent: 1 + - uid: 587 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,6.5 + parent: 1 +- proto: RubberStampApproved + entities: + - uid: 830 + components: + - type: Transform + pos: 8.336427,4.768587 + parent: 1 +- proto: RubberStampCaptain + entities: + - uid: 836 + components: + - type: Transform + pos: 8.570802,4.612337 + parent: 1 +- proto: RubberStampCE + entities: + - uid: 880 + components: + - type: Transform + pos: 8.883302,4.831087 + parent: 1 +- proto: RubberStampCentcom + entities: + - uid: 831 + components: + - type: Transform + pos: 8.602052,4.815462 + parent: 1 +- proto: RubberStampChaplain + entities: + - uid: 837 + components: + - type: Transform + pos: 8.539552,4.440462 + parent: 1 +- proto: RubberStampChiefJustice + entities: + - uid: 903 + components: + - type: Transform + pos: 8.836427,4.612337 + parent: 1 +- proto: RubberStampClown + entities: + - uid: 905 + components: + - type: Transform + pos: 9.164552,4.815462 + parent: 1 +- proto: RubberStampCMO + entities: + - uid: 904 + components: + - type: Transform + pos: 8.789552,4.502962 + parent: 1 +- proto: RubberStampDenied + entities: + - uid: 835 + components: + - type: Transform + pos: 8.305177,4.549837 + parent: 1 +- proto: RubberStampDetective + entities: + - uid: 912 + components: + - type: Transform + pos: 9.133302,4.674837 + parent: 1 +- proto: RubberStampHop + entities: + - uid: 919 + components: + - type: Transform + pos: 9.055177,4.518587 + parent: 1 +- proto: RubberStampHos + entities: + - uid: 961 + components: + - type: Transform + pos: 9.430177,4.862337 + parent: 1 +- proto: RubberStampLawyer + entities: + - uid: 984 + components: + - type: Transform + pos: 9.398927,4.706087 + parent: 1 +- proto: RubberStampMantis + entities: + - uid: 986 + components: + - type: Transform + pos: 9.633302,4.799837 + parent: 1 +- proto: RubberStampMime + entities: + - uid: 987 + components: + - type: Transform + pos: 9.570802,4.581087 + parent: 1 +- proto: RubberStampQm + entities: + - uid: 985 + components: + - type: Transform + pos: 9.320802,4.565462 + parent: 1 +- proto: RubberStampRd + entities: + - uid: 988 + components: + - type: Transform + pos: 9.773927,4.784212 + parent: 1 +- proto: SalvageLorePaperGamingSpawner + entities: + - uid: 801 + components: + - type: Transform + pos: 12.5,-9.5 + parent: 1 +- proto: SheetPlasteel + entities: + - uid: 802 + components: + - type: Transform + pos: -1.4864182,5.563302 + parent: 1 +- proto: SheetRPGlass + entities: + - uid: 803 + components: + - type: Transform + pos: -1.2364185,5.563302 + parent: 1 +- proto: SheetSteel + entities: + - uid: 804 + components: + - type: Transform + pos: -1.6895431,5.500802 + parent: 1 +- proto: SignalButton + entities: + - uid: 593 + components: + - type: MetaData + name: turret shutters + - type: Transform + pos: 12.5,5.5 + parent: 1 + - type: DeviceLinkSource + linkedPorts: + 329: + - Pressed: Toggle + 324: + - Pressed: Toggle + 325: + - Pressed: Toggle + - uid: 805 + components: + - type: MetaData + name: bridge blast doors button + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,-1.5 + parent: 1 + - type: DeviceLinkSource + linkedPorts: + 354: + - Pressed: Toggle + 352: + - Pressed: Toggle + 351: + - Pressed: Toggle + 353: + - Pressed: Toggle + 361: + - Pressed: Toggle + - uid: 806 + components: + - type: MetaData + desc: A note taped to it reads, "Be sure to keep it bolted, else those crazy guards might try to drink vacuum" + name: external bolts button + - type: Transform + pos: 4.5,4.5 + parent: 1 + - type: DeviceLinkSource + linkedPorts: + 4: + - Pressed: DoorBolt + - uid: 807 + components: + - type: MetaData + name: rec room blast shields button + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,-2.5 + parent: 1 + - type: DeviceLinkSource + linkedPorts: + 350: + - Pressed: Toggle + 355: + - Pressed: Toggle + 356: + - Pressed: Toggle + 357: + - Pressed: Toggle + 358: + - Pressed: Toggle + 359: + - Pressed: Toggle + 360: + - Pressed: Toggle +- proto: SignalSwitchDirectional + entities: + - uid: 46 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,-1.5 + parent: 1 + - type: DeviceLinkSource + linkedPorts: + 773: + - On: Off + - Off: On + 21: + - On: On + - Off: Off + 917: + - On: On + - Off: Off + 771: + - On: Off + - Off: On + 770: + - Off: On + - On: Off + 963: + - On: On + - Off: Off + 769: + - Off: On + - On: Off + 375: + - On: On + - Off: Off + 774: + - Off: On + - On: Off + 958: + - On: On + - Off: Off + 731: + - On: On + - Off: Off + 772: + - On: Off + - Off: On + 896: + - On: On + - Off: Off + 775: + - On: Off + - Off: On + 956: + - On: On + - Off: Off + 20: + - On: Off + - Off: On + 23: + - On: Off + - Off: On + 955: + - On: Off + - Off: On + 19: + - On: On + - Off: Off +- proto: SinkStemlessWater + entities: + - uid: 808 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-3.5 + parent: 1 +- proto: SoapSyndie + entities: + - uid: 809 + components: + - type: Transform + rot: 6.283185307179586 rad + pos: -1.5109272,-2.2405348 + parent: 1 +- proto: soda_dispenser + entities: + - uid: 810 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-4.5 + parent: 1 + - type: Emagged +- proto: SpawnMobRadioGuard + entities: + - uid: 811 + components: + - type: Transform + pos: 9.5,-0.5 + parent: 1 + - uid: 812 + components: + - type: Transform + pos: 2.5,2.5 + parent: 1 +- proto: SpawnPointGhostSyndicateListener + entities: + - uid: 813 + components: + - type: Transform + pos: -0.5,1.5 + parent: 1 + - uid: 814 + components: + - type: Transform + pos: -1.5,1.5 + parent: 1 +- proto: StationMapBroken + entities: + - uid: 815 + components: + - type: Transform + pos: 1.5,4.5 + parent: 1 +- proto: SubstationWallBasic + entities: + - uid: 816 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,5.5 + parent: 1 +- proto: SuitStorageEVASyndicate + entities: + - uid: 611 + components: + - type: Transform + pos: -0.5,-7.5 + parent: 1 + - uid: 817 + components: + - type: Transform + pos: -1.5,-7.5 + parent: 1 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.14673 + moles: + - 1.7459903 + - 6.568249 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 +- proto: SyndicateComputerComms + entities: + - uid: 715 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,3.5 + parent: 1 + - type: CommunicationsConsole + color: gold + title: "Pirate Broadcast" + canShuttle: false +- proto: SyndicateMonitoringServer + entities: + - uid: 338 + components: + - type: Transform + pos: 2.5,-7.5 + parent: 1 + - type: SingletonDeviceNetServer + active: False + available: False +- proto: SyndicatePersonalAI + entities: + - uid: 819 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.4855704,-4.514364 + parent: 1 +- proto: SyndieHandyFlag + entities: + - uid: 951 + components: + - type: Transform + pos: 1.9013485,-7 + parent: 1 +- proto: SynthesizerInstrument + entities: + - uid: 820 + components: + - type: Transform + pos: 6.5734386,-5.497705 + parent: 1 +- proto: TableCarpet + entities: + - uid: 821 + components: + - type: Transform + pos: 7.5,-5.5 + parent: 1 + - uid: 822 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,1.5 + parent: 1 + - uid: 823 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,-4.5 + parent: 1 +- proto: TableGlass + entities: + - uid: 824 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-2.5 + parent: 1 + - uid: 825 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-3.5 + parent: 1 + - uid: 826 + components: + - type: Transform + pos: 1.5,-4.5 + parent: 1 +- proto: TableWoodReinforced + entities: + - uid: 382 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,0.5 + parent: 1 + - uid: 385 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,1.5 + parent: 1 + - uid: 386 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 12.5,-0.5 + parent: 1 + - uid: 387 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,2.5 + parent: 1 + - uid: 568 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,1.5 + parent: 1 + - uid: 828 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,4.5 + parent: 1 + - uid: 829 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,4.5 + parent: 1 +- proto: TelecomServerFilled + entities: + - uid: 612 + components: + - type: Transform + pos: 1.5,-7.5 + parent: 1 + - type: ContainerContainer + containers: + key_slots: !type:Container + showEnts: False + occludes: True + ents: + - 613 + - 614 + - 615 + machine_board: !type:Container + showEnts: False + occludes: True + ents: [] + machine_parts: !type:Container + showEnts: False + occludes: True + ents: [] +- proto: ToiletEmpty + entities: + - uid: 832 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-2.5 + parent: 1 +- proto: ToolboxSyndicateFilled + entities: + - uid: 833 + components: + - type: Transform + pos: 4.5174317,5.701203 + parent: 1 + - uid: 834 + components: + - type: Transform + pos: 4.5330567,5.310578 + parent: 1 +- proto: ToyNuke + entities: + - uid: 838 + components: + - type: Transform + pos: 16.198624,-0.765656 + parent: 1 +- proto: VendingMachineBooze + entities: + - uid: 839 + components: + - type: Transform + pos: 4.5,-4.5 + parent: 1 + - type: Emagged +- proto: VendingMachineCigs + entities: + - uid: 565 + components: + - type: Transform + pos: 4.5,0.5 + parent: 1 +- proto: VendingMachineGames + entities: + - uid: 840 + components: + - type: Transform + pos: 8.5,-2.5 + parent: 1 + - type: Emagged +- proto: VendingMachineNutri + entities: + - uid: 841 + components: + - type: Transform + pos: 12.5,-2.5 + parent: 1 + - type: Emagged +- proto: VendingMachineSeedsUnlocked + entities: + - uid: 842 + components: + - type: Transform + pos: 11.5,-2.5 + parent: 1 + - type: Emagged +- proto: VendingMachineSyndieDrobe + entities: + - uid: 843 + components: + - type: Transform + pos: -2.5,0.5 + parent: 1 + - type: Emagged +- proto: VendingMachineTankDispenserEVA + entities: + - uid: 844 + components: + - type: Transform + pos: -1.5,3.5 + parent: 1 +- proto: WallPlastitanium + entities: + - uid: 22 + components: + - type: Transform + pos: 7.5,5.5 + parent: 1 + - uid: 30 + components: + - type: Transform + pos: 9.5,5.5 + parent: 1 + - uid: 41 + components: + - type: Transform + pos: 10.5,5.5 + parent: 1 + - uid: 42 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,11.5 + parent: 1 + - uid: 43 + components: + - type: Transform + pos: 12.5,9.5 + parent: 1 + - uid: 44 + components: + - type: Transform + pos: 8.5,9.5 + parent: 1 + - uid: 54 + components: + - type: Transform + pos: 5.5,-8.5 + parent: 1 + - uid: 125 + components: + - type: Transform + pos: 13.5,5.5 + parent: 1 + - uid: 126 + components: + - type: Transform + pos: 13.5,9.5 + parent: 1 + - uid: 132 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,9.5 + parent: 1 + - uid: 133 + components: + - type: Transform + pos: 12.5,5.5 + parent: 1 + - uid: 134 + components: + - type: Transform + pos: 14.5,6.5 + parent: 1 + - uid: 135 + components: + - type: Transform + pos: 14.5,7.5 + parent: 1 + - uid: 136 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,9.5 + parent: 1 + - uid: 201 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 14.5,9.5 + parent: 1 + - uid: 209 + components: + - type: Transform + pos: 8.5,5.5 + parent: 1 + - uid: 322 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 12.5,11.5 + parent: 1 + - uid: 323 + components: + - type: Transform + pos: 13.5,4.5 + parent: 1 + - uid: 327 + components: + - type: Transform + pos: 12.5,10.5 + parent: 1 + - uid: 332 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,10.5 + parent: 1 + - uid: 335 + components: + - type: Transform + pos: 2.5,-8.5 + parent: 1 + - uid: 336 + components: + - type: Transform + pos: 1.5,-8.5 + parent: 1 + - uid: 340 + components: + - type: Transform + pos: 0.5,-8.5 + parent: 1 + - uid: 407 + components: + - type: Transform + pos: 14.5,8.5 + parent: 1 + - uid: 416 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 14.5,5.5 + parent: 1 + - uid: 425 + components: + - type: Transform + pos: 4.5,-8.5 + parent: 1 + - uid: 617 + components: + - type: Transform + pos: 3.5,-8.5 + parent: 1 + - uid: 845 + components: + - type: Transform + pos: -2.5,-8.5 + parent: 1 + - uid: 846 + components: + - type: Transform + pos: -1.5,-8.5 + parent: 1 + - uid: 847 + components: + - type: Transform + pos: -0.5,-8.5 + parent: 1 + - uid: 848 + components: + - type: Transform + pos: -0.5,-1.5 + parent: 1 + - uid: 849 + components: + - type: Transform + pos: -2.5,6.5 + parent: 1 + - uid: 850 + components: + - type: Transform + pos: 3.5,-1.5 + parent: 1 + - uid: 851 + components: + - type: Transform + pos: 14.5,-2.5 + parent: 1 + - uid: 852 + components: + - type: Transform + pos: 14.5,-1.5 + parent: 1 + - uid: 853 + components: + - type: Transform + pos: 8.5,-1.5 + parent: 1 + - uid: 854 + components: + - type: Transform + pos: -3.5,1.5 + parent: 1 + - uid: 855 + components: + - type: Transform + pos: -3.5,0.5 + parent: 1 + - uid: 856 + components: + - type: Transform + pos: 5.5,5.5 + parent: 1 + - uid: 857 + components: + - type: Transform + pos: -1.5,-4.5 + parent: 1 + - uid: 858 + components: + - type: Transform + pos: -2.5,-5.5 + parent: 1 + - uid: 859 + components: + - type: Transform + pos: 2.5,6.5 + parent: 1 + - uid: 860 + components: + - type: Transform + pos: -0.5,6.5 + parent: 1 + - uid: 861 + components: + - type: Transform + pos: 4.5,6.5 + parent: 1 + - uid: 862 + components: + - type: Transform + pos: 5.5,-4.5 + parent: 1 + - uid: 863 + components: + - type: Transform + pos: 9.5,-1.5 + parent: 1 + - uid: 864 + components: + - type: Transform + pos: 11.5,-1.5 + parent: 1 + - uid: 865 + components: + - type: Transform + pos: 12.5,-1.5 + parent: 1 + - uid: 866 + components: + - type: Transform + pos: 5.5,-3.5 + parent: 1 + - uid: 867 + components: + - type: Transform + pos: 5.5,-2.5 + parent: 1 + - uid: 868 + components: + - type: Transform + pos: 5.5,-7.5 + parent: 1 + - uid: 869 + components: + - type: Transform + pos: 7.5,-1.5 + parent: 1 + - uid: 870 + components: + - type: Transform + pos: 13.5,-1.5 + parent: 1 + - uid: 871 + components: + - type: Transform + pos: 13.5,3.5 + parent: 1 + - uid: 872 + components: + - type: Transform + pos: 3.5,-5.5 + parent: 1 + - uid: 873 + components: + - type: Transform + pos: 4.5,-5.5 + parent: 1 + - uid: 874 + components: + - type: Transform + pos: -2.5,4.5 + parent: 1 + - uid: 875 + components: + - type: Transform + pos: 5.5,-5.5 + parent: 1 + - uid: 876 + components: + - type: Transform + pos: 5.5,-6.5 + parent: 1 + - uid: 877 + components: + - type: Transform + pos: 1.5,-5.5 + parent: 1 + - uid: 878 + components: + - type: Transform + pos: 0.5,-5.5 + parent: 1 + - uid: 879 + components: + - type: Transform + pos: 0.5,-4.5 + parent: 1 + - uid: 881 + components: + - type: Transform + pos: -2.5,-4.5 + parent: 1 + - uid: 882 + components: + - type: Transform + pos: -2.5,-2.5 + parent: 1 + - uid: 883 + components: + - type: Transform + pos: 0.5,-7.5 + parent: 1 + - uid: 885 + components: + - type: Transform + pos: -2.5,-6.5 + parent: 1 + - uid: 886 + components: + - type: Transform + pos: -0.5,-4.5 + parent: 1 + - uid: 887 + components: + - type: Transform + pos: 0.5,0.5 + parent: 1 + - uid: 888 + components: + - type: Transform + pos: 0.5,1.5 + parent: 1 + - uid: 889 + components: + - type: Transform + pos: -1.5,2.5 + parent: 1 + - uid: 890 + components: + - type: Transform + pos: 7.5,4.5 + parent: 1 + - uid: 891 + components: + - type: Transform + pos: 0.5,5.5 + parent: 1 + - uid: 892 + components: + - type: Transform + pos: -2.5,2.5 + parent: 1 + - uid: 893 + components: + - type: Transform + pos: -2.5,3.5 + parent: 1 + - uid: 894 + components: + - type: Transform + pos: -2.5,5.5 + parent: 1 + - uid: 895 + components: + - type: Transform + pos: 1.5,4.5 + parent: 1 + - uid: 897 + components: + - type: Transform + pos: -2.5,-1.5 + parent: 1 + - uid: 898 + components: + - type: Transform + pos: 1.5,-1.5 + parent: 1 + - uid: 899 + components: + - type: Transform + pos: 0.5,-1.5 + parent: 1 + - uid: 900 + components: + - type: Transform + pos: 0.5,-3.5 + parent: 1 + - uid: 901 + components: + - type: Transform + pos: -2.5,-3.5 + parent: 1 + - uid: 902 + components: + - type: Transform + pos: 0.5,-2.5 + parent: 1 + - uid: 906 + components: + - type: Transform + pos: 5.5,-1.5 + parent: 1 + - uid: 907 + components: + - type: Transform + pos: 4.5,-1.5 + parent: 1 + - uid: 908 + components: + - type: Transform + pos: 7.5,2.5 + parent: 1 + - uid: 909 + components: + - type: Transform + pos: 7.5,1.5 + parent: 1 + - uid: 910 + components: + - type: Transform + pos: 7.5,0.5 + parent: 1 + - uid: 911 + components: + - type: Transform + pos: 7.5,3.5 + parent: 1 + - uid: 913 + components: + - type: Transform + pos: 5.5,0.5 + parent: 1 + - uid: 914 + components: + - type: Transform + pos: 6.5,0.5 + parent: 1 + - uid: 915 + components: + - type: Transform + pos: -2.5,-7.5 + parent: 1 + - uid: 916 + components: + - type: Transform + pos: 3.5,-7.5 + parent: 1 + - uid: 918 + components: + - type: Transform + pos: -2.5,-0.5 + parent: 1 + - uid: 920 + components: + - type: Transform + pos: 0.5,2.5 + parent: 1 + - uid: 921 + components: + - type: Transform + pos: -0.5,2.5 + parent: 1 + - uid: 922 + components: + - type: Transform + pos: -2.5,1.5 + parent: 1 + - uid: 923 + components: + - type: Transform + pos: 0.5,4.5 + parent: 1 + - uid: 924 + components: + - type: Transform + pos: 2.5,4.5 + parent: 1 + - uid: 925 + components: + - type: Transform + pos: 5.5,1.5 + parent: 1 + - uid: 926 + components: + - type: Transform + pos: 5.5,4.5 + parent: 1 + - uid: 927 + components: + - type: Transform + pos: 5.5,3.5 + parent: 1 + - uid: 928 + components: + - type: Transform + pos: 4.5,4.5 + parent: 1 + - uid: 929 + components: + - type: Transform + pos: -1.5,6.5 + parent: 1 + - uid: 930 + components: + - type: Transform + pos: 0.5,6.5 + parent: 1 + - uid: 931 + components: + - type: Transform + pos: 6.5,4.5 + parent: 1 + - uid: 932 + components: + - type: Transform + pos: 9.5,-6.5 + parent: 1 + - uid: 933 + components: + - type: Transform + pos: 9.5,-4.5 + parent: 1 + - uid: 934 + components: + - type: Transform + pos: 5.5,6.5 + parent: 1 + - uid: 935 + components: + - type: Transform + pos: 9.5,-2.5 + parent: 1 + - uid: 936 + components: + - type: Transform + pos: 1.5,6.5 + parent: 1 + - uid: 937 + components: + - type: Transform + pos: 14.5,-3.5 + parent: 1 + - uid: 938 + components: + - type: Transform + pos: 14.5,-4.5 + parent: 1 + - uid: 939 + components: + - type: Transform + pos: 14.5,-5.5 + parent: 1 + - uid: 940 + components: + - type: Transform + pos: 9.5,-5.5 + parent: 1 + - uid: 941 + components: + - type: Transform + pos: -3.5,-0.5 + parent: 1 +- proto: WallPlastitaniumDiagonal + entities: + - uid: 128 + components: + - type: Transform + pos: 13.5,6.5 + parent: 1 + - uid: 333 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 13.5,8.5 + parent: 1 + - uid: 591 + components: + - type: Transform + pos: 7.5,9.5 + parent: 1 +- proto: WarpPoint + entities: + - uid: 942 + components: + - type: MetaData + name: Syndicate Listening Post + - type: Transform + pos: 10.5,0.5 + parent: 1 +- proto: WashingMachineFilledClothes + entities: + - uid: 2 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,-7.5 + parent: 1 +- proto: WaterCooler + entities: + - uid: 943 + components: + - type: Transform + pos: 1.5,0.5 + parent: 1 +- proto: WaterTankHighCapacity + entities: + - uid: 944 + components: + - type: Transform + pos: 13.5,-2.5 + parent: 1 +- proto: WeaponShotgunKammerer + entities: + - uid: 379 + components: + - type: Transform + parent: 363 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 380 + components: + - type: Transform + parent: 363 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: WeaponTurretSyndicate + entities: + - uid: 32 + components: + - type: Transform + pos: 15.5,4.5 + parent: 1 + - uid: 131 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 18.5,-3.5 + parent: 1 + - uid: 233 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,-9.5 + parent: 1 + - uid: 408 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,5.5 + parent: 1 + - uid: 580 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 13.5,7.5 + parent: 1 + - uid: 989 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,-8.5 + parent: 1 + - uid: 990 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,9.5 + parent: 1 +- proto: Windoor + entities: + - uid: 618 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-7.5 + parent: 1 + - uid: 945 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-7.5 + parent: 1 + - uid: 946 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,5.5 + parent: 1 + - uid: 947 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,0.5 + parent: 1 +- proto: WindoorSecure + entities: + - uid: 610 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-7.5 + parent: 1 + - uid: 783 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-7.5 + parent: 1 + - uid: 948 + components: + - type: Transform + pos: -1.5,5.5 + parent: 1 + - uid: 949 + components: + - type: Transform + pos: -0.5,5.5 + parent: 1 +- proto: WoodDoor + entities: + - uid: 12 + components: + - type: Transform + pos: -1.5,-1.5 + parent: 1 +... diff --git a/Resources/Maps/Test/dev_map.yml b/Resources/Maps/Test/dev_map.yml index f00d7049a52..910a059ee72 100644 --- a/Resources/Maps/Test/dev_map.yml +++ b/Resources/Maps/Test/dev_map.yml @@ -4358,7 +4358,6 @@ entities: solutions: absorbed: temperature: 293.15 - canMix: False canReact: True maxVol: 50 name: null diff --git a/Resources/Maps/arena.yml b/Resources/Maps/arena.yml index 563011f75ff..362de161419 100644 --- a/Resources/Maps/arena.yml +++ b/Resources/Maps/arena.yml @@ -73,14 +73,15 @@ entities: - type: MetaData - type: Transform - type: Map + mapPaused: True - type: PhysicsMap + - type: GridTree + - type: MovedGrids - type: Broadphase - type: OccluderTree - type: Parallax parallax: ArenaStation - type: LoadedMap - - type: GridTree - - type: MovedGrids - uid: 6747 components: - type: MetaData @@ -263,11 +264,11 @@ entities: version: 6 4,-2: ind: 4,-2 - tiles: fgAAAAAAAAAAAAAAfwAAAAAAdgAAAAAALwAAAAAAdgAAAAABfwAAAAAAAAAAAAAAfwAAAAAAMAAAAAACXgAAAAADMAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAALwAAAAAAUAAAAAAALwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAXgAAAAACXgAAAAAAXgAAAAADUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXgAAAAAAXgAAAAAAMAAAAAABXgAAAAACXgAAAAACXgAAAAACMAAAAAAAXgAAAAADXgAAAAAAXgAAAAABMAAAAAADXgAAAAABUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAABXgAAAAAAXgAAAAAAXgAAAAACMAAAAAACXgAAAAACXgAAAAADXgAAAAADMAAAAAABXgAAAAACXgAAAAADXgAAAAACUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXgAAAAAAXgAAAAAAMAAAAAACXgAAAAABXgAAAAABXgAAAAACMAAAAAADXgAAAAACXgAAAAAAXgAAAAACMAAAAAADXgAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAXgAAAAACXgAAAAAAXgAAAAABfwAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAXgAAAAADXgAAAAACXgAAAAAAXgAAAAADXgAAAAACXgAAAAAAXgAAAAACXgAAAAACXgAAAAADfwAAAAAAUAAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAXgAAAAACXgAAAAADXgAAAAABXgAAAAADXgAAAAABXgAAAAABXgAAAAADXgAAAAABXgAAAAADfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAXgAAAAACXgAAAAAAXgAAAAAAXgAAAAACXgAAAAABXgAAAAABXgAAAAABXgAAAAAAXgAAAAABfwAAAAAAUAAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAXgAAAAADXgAAAAACXgAAAAADXgAAAAABXgAAAAAAXgAAAAACXgAAAAAAXgAAAAABXgAAAAABUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAXgAAAAABXgAAAAADXgAAAAACXgAAAAADXgAAAAADXgAAAAABXgAAAAADXgAAAAACXgAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAXgAAAAAAXgAAAAACXgAAAAAAXgAAAAABXgAAAAAAXgAAAAACXgAAAAADXgAAAAADXgAAAAADfwAAAAAAUAAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAXgAAAAABXgAAAAABXgAAAAABXgAAAAAAXgAAAAACXgAAAAAAXgAAAAADXgAAAAAAXgAAAAACfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAXgAAAAACXgAAAAADXgAAAAAAXgAAAAACXgAAAAACXgAAAAACXgAAAAAAXgAAAAAAXgAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: fgAAAAAAAAAAAAAAfwAAAAAAdgAAAAAALwAAAAAAdgAAAAABfwAAAAAAAAAAAAAAfwAAAAAAMAAAAAACXgAAAAADMAAAAAAAUAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAALwAAAAAAUAAAAAAALwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAXgAAAAACXgAAAAAAXgAAAAADUAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXgAAAAAAXgAAAAAAMAAAAAABXgAAAAACXgAAAAACXgAAAAACMAAAAAAAXgAAAAADXgAAAAAAXgAAAAABMAAAAAADXgAAAAABUAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAMAAAAAABXgAAAAAAXgAAAAAAXgAAAAACMAAAAAACXgAAAAACXgAAAAADXgAAAAADMAAAAAABXgAAAAACXgAAAAADXgAAAAACUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXgAAAAAAXgAAAAAAMAAAAAACXgAAAAABXgAAAAABXgAAAAACMAAAAAADXgAAAAACXgAAAAAAXgAAAAACMAAAAAADXgAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAXgAAAAACXgAAAAAAXgAAAAABfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAXgAAAAADXgAAAAACXgAAAAAAXgAAAAADXgAAAAACXgAAAAAAXgAAAAACXgAAAAACXgAAAAADfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAXgAAAAACXgAAAAADXgAAAAABXgAAAAADXgAAAAABXgAAAAABXgAAAAADXgAAAAABXgAAAAADfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAXgAAAAACXgAAAAAAXgAAAAAAXgAAAAACXgAAAAABXgAAAAABXgAAAAABXgAAAAAAXgAAAAABfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAXgAAAAADXgAAAAACXgAAAAADXgAAAAABXgAAAAAAXgAAAAACXgAAAAAAXgAAAAABXgAAAAABUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAXgAAAAABXgAAAAADXgAAAAACXgAAAAADXgAAAAADXgAAAAABXgAAAAADXgAAAAACXgAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAXgAAAAAAXgAAAAACXgAAAAAAXgAAAAABXgAAAAAAXgAAAAACXgAAAAADXgAAAAADXgAAAAADfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAXgAAAAABXgAAAAABXgAAAAABXgAAAAAAXgAAAAACXgAAAAAAXgAAAAADXgAAAAAAXgAAAAACfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAXgAAAAACXgAAAAADXgAAAAAAXgAAAAACXgAAAAACXgAAAAACXgAAAAAAXgAAAAAAXgAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 4,-3: ind: 4,-3 - tiles: XgAAAAABMAAAAAABXgAAAAACXgAAAAADXgAAAAAAMAAAAAACXgAAAAACXgAAAAABXgAAAAADMAAAAAADXgAAAAAAMAAAAAABUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXgAAAAACXgAAAAADXgAAAAACMAAAAAAAXgAAAAACXgAAAAAAXgAAAAADMAAAAAADXgAAAAADXgAAAAAAXgAAAAAAXgAAAAACUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXgAAAAABMAAAAAADXgAAAAADXgAAAAABXgAAAAABMAAAAAAAXgAAAAADXgAAAAAAXgAAAAADXgAAAAADMAAAAAADXgAAAAABfwAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAXgAAAAACXgAAAAADXgAAAAADfwAAAAAAXgAAAAAAXgAAAAACXgAAAAADXgAAAAABXgAAAAABXgAAAAACXgAAAAACfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAXgAAAAABXgAAAAACXgAAAAAAUAAAAAAAXgAAAAADXgAAAAADXgAAAAACXgAAAAACMAAAAAADXgAAAAADMAAAAAACfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAXgAAAAAAXgAAAAACXgAAAAABUAAAAAAAXgAAAAABXgAAAAABXgAAAAABXgAAAAACXgAAAAABXgAAAAADXgAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAUAAAAAAAXgAAAAACXgAAAAADXgAAAAACUAAAAAAAXgAAAAABXgAAAAABXgAAAAABXgAAAAAAXgAAAAAAMAAAAAAAXgAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAUAAAAAAAXgAAAAAAXgAAAAAAXgAAAAABUAAAAAAAXgAAAAABXgAAAAAAXgAAAAACXgAAAAACXgAAAAADXgAAAAAAXgAAAAADUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAXgAAAAAAXgAAAAACXgAAAAAAUAAAAAAAXgAAAAABXgAAAAACXgAAAAACXgAAAAADMAAAAAADXgAAAAACMAAAAAACUAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAXgAAAAADXgAAAAAAXgAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAXgAAAAADMAAAAAAAXgAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfgAAAAAAUAAAAAAAXgAAAAABXgAAAAAAXgAAAAABfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAAAAAAAAAUAAAAAAALwAAAAAAdgAAAAADLwAAAAAAUAAAAAAAAAAAAAAAUAAAAAAAMAAAAAADXgAAAAADMAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAAAAAAAAAUAAAAAAALwAAAAAAdgAAAAABLwAAAAAAUAAAAAAAAAAAAAAAUAAAAAAAXgAAAAABXgAAAAADXgAAAAACfwAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAUAAAAAAAAAAAAAAAUAAAAAAALwAAAAAAdgAAAAABLwAAAAAAUAAAAAAAAAAAAAAAfwAAAAAAXgAAAAACMAAAAAAAXgAAAAADfwAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfgAAAAAAUAAAAAAAdgAAAAAAdgAAAAABdgAAAAAAUAAAAAAAfgAAAAAAfwAAAAAAXgAAAAADXgAAAAADXgAAAAACUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: XgAAAAABMAAAAAABXgAAAAACXgAAAAADXgAAAAAAMAAAAAACXgAAAAACXgAAAAABXgAAAAADMAAAAAADXgAAAAAAMAAAAAABUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXgAAAAACXgAAAAADXgAAAAACMAAAAAAAXgAAAAACXgAAAAAAXgAAAAADMAAAAAADXgAAAAADXgAAAAAAXgAAAAAAXgAAAAACUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXgAAAAABMAAAAAADXgAAAAADXgAAAAABXgAAAAABMAAAAAAAXgAAAAADXgAAAAAAXgAAAAADXgAAAAADMAAAAAADXgAAAAABfwAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAXgAAAAACXgAAAAADXgAAAAADfwAAAAAAXgAAAAAAXgAAAAACXgAAAAADXgAAAAABXgAAAAABXgAAAAACXgAAAAACfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAXgAAAAABXgAAAAACXgAAAAAAUAAAAAAAXgAAAAADXgAAAAADXgAAAAACXgAAAAACMAAAAAADXgAAAAADMAAAAAACfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAXgAAAAAAXgAAAAACXgAAAAABUAAAAAAAXgAAAAABXgAAAAABXgAAAAABXgAAAAACXgAAAAABXgAAAAADXgAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAUAAAAAAAXgAAAAACXgAAAAADXgAAAAACUAAAAAAAXgAAAAABXgAAAAABXgAAAAABXgAAAAAAXgAAAAAAMAAAAAAAXgAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAUAAAAAAAXgAAAAAAXgAAAAAAXgAAAAABUAAAAAAAXgAAAAABXgAAAAAAXgAAAAACXgAAAAACXgAAAAADXgAAAAAAXgAAAAADUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAXgAAAAAAXgAAAAACXgAAAAAAUAAAAAAAXgAAAAABXgAAAAACXgAAAAACXgAAAAADMAAAAAADXgAAAAACMAAAAAACUAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAXgAAAAADXgAAAAAAXgAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAXgAAAAADMAAAAAAAXgAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfgAAAAAAUAAAAAAAXgAAAAABXgAAAAAAXgAAAAABXgAAAAAAXgAAAAAAXgAAAAAAXgAAAAAAUAAAAAAAAAAAAAAAUAAAAAAALwAAAAAAdgAAAAADLwAAAAAAUAAAAAAAAAAAAAAAUAAAAAAAMAAAAAADXgAAAAADMAAAAAAAXgAAAAAAXgAAAAAAXgAAAAAAMAAAAAAAUAAAAAAAAAAAAAAAUAAAAAAALwAAAAAAdgAAAAABLwAAAAAAUAAAAAAAAAAAAAAAUAAAAAAAXgAAAAABXgAAAAADXgAAAAACfwAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAUAAAAAAAAAAAAAAAUAAAAAAALwAAAAAAdgAAAAABLwAAAAAAUAAAAAAAAAAAAAAAfwAAAAAAXgAAAAACMAAAAAAAXgAAAAADfwAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAfwAAAAAAfgAAAAAAUAAAAAAAdgAAAAAAdgAAAAABdgAAAAAAUAAAAAAAfgAAAAAAfwAAAAAAXgAAAAADXgAAAAADXgAAAAACUAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAA version: 6 2,-4: ind: 2,-4 @@ -315,7 +316,7 @@ entities: version: 6 5,-3: ind: 5,-3 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAXgAAAAAAMAAAAAAAXgAAAAAAMAAAAAAAXgAAAAAAXgAAAAAAXgAAAAAAXgAAAAAAXgAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAXgAAAAAAMAAAAAAAXgAAAAAAXgAAAAAAXgAAAAAAXgAAAAAAXgAAAAAAXgAAAAAAXgAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAXgAAAAAAXgAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAMAAAAAAAMAAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfwAAAAAAXgAAAAAAXgAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAA version: 6 0,-6: ind: 0,-6 @@ -339,7 +340,7 @@ entities: version: 6 4,-1: ind: 4,-1 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfwAAAAAAUAAAAAAAVQAAAAAAVQAAAAAAUAAAAAAAfwAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfwAAAAAAWgAAAAAAVQAAAAAAVQAAAAAAWgAAAAAAfwAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAVQAAAAAAVQAAAAAAVQAAAAAAVQAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAWgAAAAAAVQAAAAAAWgAAAAAAWgAAAAAAVQAAAAAAWgAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAWgAAAAAAVQAAAAAAWgAAAAAAWgAAAAAAVQAAAAAAWgAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAWgAAAAAAVQAAAAAAWgAAAAAAWgAAAAAAVQAAAAAAWgAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAWgAAAAAAWgAAAAAAWgAAAAAAWgAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfwAAAAAAUAAAAAAAVQAAAAAAVQAAAAAAUAAAAAAAfwAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfwAAAAAAWgAAAAAAVQAAAAAAVQAAAAAAWgAAAAAAfwAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAVQAAAAAAVQAAAAAAVQAAAAAAVQAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAWgAAAAAAVQAAAAAAWgAAAAAAWgAAAAAAVQAAAAAAWgAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAWgAAAAAAVQAAAAAAWgAAAAAAWgAAAAAAVQAAAAAAWgAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAWgAAAAAAVQAAAAAAWgAAAAAAWgAAAAAAVQAAAAAAWgAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAWgAAAAAAWgAAAAAAWgAAAAAAWgAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 -4,-2: ind: -4,-2 @@ -491,11 +492,11 @@ entities: version: 6 5,-1: ind: 5,-1 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAA version: 6 5,-2: ind: 5,-2 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAA + tiles: fgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfwAAAAAAXgAAAAAAXgAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfwAAAAAAMAAAAAAAMAAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfwAAAAAAXgAAAAAAXgAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAXgAAAAAAXgAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAMAAAAAAAMAAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAXgAAAAAAXgAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAXgAAAAAAXgAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAXgAAAAAAXgAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAMAAAAAAAMAAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAXgAAAAAAXgAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAXgAAAAAAXgAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAMAAAAAAAMAAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAXgAAAAAAXgAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAXgAAAAAAXgAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAA version: 6 6,-1: ind: 6,-1 @@ -519,7 +520,11 @@ entities: version: 6 6,-2: ind: 6,-2 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: AAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 6,-3: + ind: 6,-3 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 - type: Broadphase - type: Physics @@ -11312,8 +11317,6 @@ entities: - 13077 - 8433 - 7909 - - type: AtmosDevice - joinedGrid: 6747 - uid: 490 components: - type: Transform @@ -11334,8 +11337,6 @@ entities: - 14634 - 14896 - 23520 - - type: AtmosDevice - joinedGrid: 6747 - uid: 1755 components: - type: Transform @@ -11359,8 +11360,6 @@ entities: - 21751 - 13451 - 13162 - - type: AtmosDevice - joinedGrid: 6747 - uid: 3694 components: - type: Transform @@ -11378,8 +11377,6 @@ entities: - 13867 - 13866 - 13951 - - type: AtmosDevice - joinedGrid: 6747 - uid: 7456 components: - type: Transform @@ -11403,8 +11400,6 @@ entities: - 27297 - 27396 - 27395 - - type: AtmosDevice - joinedGrid: 6747 - uid: 8860 components: - type: Transform @@ -11444,8 +11439,6 @@ entities: - 22284 - 13376 - 13246 - - type: AtmosDevice - joinedGrid: 6747 - uid: 9063 components: - type: Transform @@ -11474,8 +11467,6 @@ entities: - 26056 - 22745 - 25606 - - type: AtmosDevice - joinedGrid: 6747 - uid: 13485 components: - type: Transform @@ -11509,8 +11500,6 @@ entities: - 15810 - 23752 - 23751 - - type: AtmosDevice - joinedGrid: 6747 - uid: 13930 components: - type: Transform @@ -11547,8 +11536,6 @@ entities: - 24134 - 24138 - 24178 - - type: AtmosDevice - joinedGrid: 6747 - uid: 21858 components: - type: Transform @@ -11564,8 +11551,6 @@ entities: - 15006 - 15004 - 14712 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22036 components: - type: Transform @@ -11586,8 +11571,6 @@ entities: - 14231 - 14279 - 14264 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22037 components: - type: Transform @@ -11619,8 +11602,6 @@ entities: - 13588 - 13667 - 13586 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22038 components: - type: Transform @@ -11649,8 +11630,6 @@ entities: - 13658 - 13659 - 13561 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22041 components: - type: Transform @@ -11669,8 +11648,6 @@ entities: - 13496 - 13500 - 13499 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22043 components: - type: Transform @@ -11703,8 +11680,6 @@ entities: - 22323 - 22324 - 21389 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22087 components: - type: Transform @@ -11725,8 +11700,6 @@ entities: - 17141 - 25308 - 25307 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22089 components: - type: Transform @@ -11749,8 +11722,6 @@ entities: - 21797 - 21795 - 21796 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22091 components: - type: Transform @@ -11780,8 +11751,6 @@ entities: - 25302 - 25303 - 25304 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22093 components: - type: Transform @@ -11818,8 +11787,6 @@ entities: - 14526 - 14733 - 14515 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22096 components: - type: Transform @@ -11846,8 +11813,6 @@ entities: - 15412 - 15339 - 15411 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22097 components: - type: Transform @@ -11867,8 +11832,6 @@ entities: - 16656 - 16657 - 27085 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22099 components: - type: Transform @@ -11888,8 +11851,6 @@ entities: - 15170 - 15172 - 15168 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22101 components: - type: Transform @@ -11906,8 +11867,6 @@ entities: - 14631 - 14630 - 14829 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22103 components: - type: Transform @@ -11925,8 +11884,6 @@ entities: - 14841 - 14842 - 14629 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22105 components: - type: Transform @@ -11945,15 +11902,11 @@ entities: - 15131 - 15133 - 15132 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22111 components: - type: Transform pos: 24.5,-62.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22113 components: - type: Transform @@ -11970,8 +11923,6 @@ entities: - 14364 - 14365 - 14727 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22115 components: - type: Transform @@ -11985,8 +11936,6 @@ entities: - 21782 - 14394 - 14717 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22117 components: - type: Transform @@ -12004,8 +11953,6 @@ entities: - 13953 - 13874 - 13954 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22119 components: - type: Transform @@ -12020,8 +11967,6 @@ entities: - 21907 - 13875 - 13960 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22121 components: - type: Transform @@ -12062,8 +12007,6 @@ entities: - 14293 - 13595 - 13673 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22123 components: - type: Transform @@ -12084,8 +12027,6 @@ entities: - 21908 - 13959 - 13873 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22125 components: - type: Transform @@ -12110,8 +12051,6 @@ entities: - 25258 - 22295 - 1148 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22130 components: - type: Transform @@ -12135,8 +12074,6 @@ entities: - 14324 - 14396 - 14439 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22132 components: - type: Transform @@ -12152,8 +12089,6 @@ entities: - 15005 - 14680 - 15007 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22158 components: - type: Transform @@ -12165,8 +12100,6 @@ entities: - 10125 - 22157 - 21810 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22163 components: - type: Transform @@ -12186,8 +12119,6 @@ entities: - 16537 - 15574 - 16536 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22223 components: - type: Transform @@ -12219,8 +12150,6 @@ entities: - 17074 - 17367 - 17362 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22225 components: - type: Transform @@ -12236,8 +12165,6 @@ entities: - 14647 - 15011 - 23041 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22229 components: - type: Transform @@ -12258,8 +12185,6 @@ entities: - 14525 - 14524 - 14735 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22234 components: - type: Transform @@ -12277,8 +12202,6 @@ entities: - 438 - 25595 - 25608 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22239 components: - type: Transform @@ -12296,8 +12219,6 @@ entities: - 15431 - 15359 - 21428 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22288 components: - type: Transform @@ -12319,8 +12240,6 @@ entities: - 14234 - 14032 - 14232 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22293 components: - type: Transform @@ -12335,8 +12254,6 @@ entities: - 21911 - 13958 - 13872 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22317 components: - type: Transform @@ -12359,8 +12276,6 @@ entities: - 14088 - 14131 - 14130 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22330 components: - type: Transform @@ -12373,8 +12288,6 @@ entities: - 21931 - 15716 - 15989 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22346 components: - type: Transform @@ -12385,8 +12298,6 @@ entities: - 9416 - 9417 - 9418 - - type: AtmosDevice - joinedGrid: 6747 - uid: 25271 components: - type: Transform @@ -12410,8 +12321,6 @@ entities: - 23685 - 24135 - 24119 - - type: AtmosDevice - joinedGrid: 6747 - uid: 25275 components: - type: Transform @@ -12425,8 +12334,6 @@ entities: - 25207 - 24185 - 24179 - - type: AtmosDevice - joinedGrid: 6747 - uid: 25278 components: - type: Transform @@ -12441,8 +12348,6 @@ entities: - 24196 - 24199 - 24200 - - type: AtmosDevice - joinedGrid: 6747 - uid: 25281 components: - type: Transform @@ -12470,8 +12375,6 @@ entities: - 24296 - 24323 - 24295 - - type: AtmosDevice - joinedGrid: 6747 - uid: 25283 components: - type: Transform @@ -12490,8 +12393,6 @@ entities: - 24269 - 24350 - 24268 - - type: AtmosDevice - joinedGrid: 6747 - uid: 25286 components: - type: Transform @@ -12512,8 +12413,6 @@ entities: - 24433 - 24432 - 24417 - - type: AtmosDevice - joinedGrid: 6747 - uid: 25287 components: - type: Transform @@ -12534,8 +12433,6 @@ entities: - 24287 - 24450 - 25289 - - type: AtmosDevice - joinedGrid: 6747 - uid: 25290 components: - type: Transform @@ -12563,8 +12460,6 @@ entities: - 24699 - 24711 - 24701 - - type: AtmosDevice - joinedGrid: 6747 - uid: 25293 components: - type: Transform @@ -12585,8 +12480,6 @@ entities: - 24850 - 24844 - 24839 - - type: AtmosDevice - joinedGrid: 6747 - uid: 25295 components: - type: Transform @@ -12602,8 +12495,6 @@ entities: - 25236 - 24880 - 24879 - - type: AtmosDevice - joinedGrid: 6747 - uid: 25298 components: - type: Transform @@ -12623,8 +12514,6 @@ entities: - 24908 - 24909 - 24889 - - type: AtmosDevice - joinedGrid: 6747 - uid: 25299 components: - type: Transform @@ -12649,8 +12538,6 @@ entities: - 24848 - 24847 - 25018 - - type: AtmosDevice - joinedGrid: 6747 - uid: 25305 components: - type: Transform @@ -12678,8 +12565,6 @@ entities: - 16024 - 24924 - 24478 - - type: AtmosDevice - joinedGrid: 6747 - uid: 25309 components: - type: Transform @@ -12720,8 +12605,6 @@ entities: - 25028 - 25096 - 25148 - - type: AtmosDevice - joinedGrid: 6747 - uid: 25311 components: - type: Transform @@ -12747,8 +12630,6 @@ entities: - 25039 - 24991 - 25065 - - type: AtmosDevice - joinedGrid: 6747 - uid: 25315 components: - type: Transform @@ -12768,8 +12649,6 @@ entities: - 25117 - 25020 - 25116 - - type: AtmosDevice - joinedGrid: 6747 - uid: 25317 components: - type: Transform @@ -12793,8 +12672,6 @@ entities: - 24988 - 25074 - 24970 - - type: AtmosDevice - joinedGrid: 6747 - uid: 25319 components: - type: Transform @@ -12814,8 +12691,6 @@ entities: - 25253 - 25147 - 25178 - - type: AtmosDevice - joinedGrid: 6747 - uid: 25321 components: - type: Transform @@ -12827,8 +12702,6 @@ entities: - 15911 - 25184 - 25185 - - type: AtmosDevice - joinedGrid: 6747 - uid: 25323 components: - type: Transform @@ -12847,8 +12720,6 @@ entities: - 24085 - 24089 - 24083 - - type: AtmosDevice - joinedGrid: 6747 - uid: 25325 components: - type: Transform @@ -12865,8 +12736,6 @@ entities: - 25258 - 13955 - 1148 - - type: AtmosDevice - joinedGrid: 6747 - uid: 26597 components: - type: Transform @@ -12876,8 +12745,6 @@ entities: - type: DeviceList devices: - 27051 - - type: AtmosDevice - joinedGrid: 6747 - uid: 26945 components: - type: Transform @@ -12893,8 +12760,6 @@ entities: - 26058 - 26064 - 26131 - - type: AtmosDevice - joinedGrid: 6747 - uid: 26958 components: - type: Transform @@ -12913,16 +12778,12 @@ entities: - 26226 - 26130 - 26069 - - type: AtmosDevice - joinedGrid: 6747 - uid: 26963 components: - type: Transform rot: 1.5707963267948966 rad pos: 39.5,16.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 26970 components: - type: Transform @@ -12954,8 +12815,6 @@ entities: - 26317 - 26275 - 26276 - - type: AtmosDevice - joinedGrid: 6747 - uid: 26989 components: - type: Transform @@ -12973,8 +12832,6 @@ entities: - 26949 - 26030 - 26049 - - type: AtmosDevice - joinedGrid: 6747 - uid: 26991 components: - type: Transform @@ -12996,8 +12853,6 @@ entities: - 26952 - 26028 - 26051 - - type: AtmosDevice - joinedGrid: 6747 - uid: 27003 components: - type: Transform @@ -13020,8 +12875,6 @@ entities: - 27020 - 26329 - 27021 - - type: AtmosDevice - joinedGrid: 6747 - uid: 27005 components: - type: Transform @@ -13044,8 +12897,6 @@ entities: - 26316 - 13333 - 22062 - - type: AtmosDevice - joinedGrid: 6747 - uid: 27009 components: - type: Transform @@ -13061,8 +12912,6 @@ entities: - 26199 - 13217 - 26345 - - type: AtmosDevice - joinedGrid: 6747 - uid: 27036 components: - type: Transform @@ -13077,8 +12926,6 @@ entities: - 27035 - 26831 - 26824 - - type: AtmosDevice - joinedGrid: 6747 - uid: 27087 components: - type: Transform @@ -13098,8 +12945,6 @@ entities: - 14910 - 14908 - 27086 - - type: AtmosDevice - joinedGrid: 6747 - proto: AirCanister entities: - uid: 7790 @@ -13107,43 +12952,31 @@ entities: - type: Transform pos: 48.5,42.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 8184 components: - type: Transform pos: 32.5,33.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 11336 components: - type: Transform pos: 57.5,-19.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 11372 components: - type: Transform pos: 34.5,22.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 12029 components: - type: Transform pos: 33.5,24.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 16663 components: - type: Transform pos: 13.5,-20.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - proto: Airlock entities: - uid: 1212 @@ -13683,16 +13516,6 @@ entities: - type: Transform pos: 69.5,-51.5 parent: 6747 - - uid: 588 - components: - - type: Transform - pos: 76.5,-24.5 - parent: 6747 - - uid: 880 - components: - - type: Transform - pos: 76.5,-19.5 - parent: 6747 - uid: 6216 components: - type: Transform @@ -13777,11 +13600,6 @@ entities: - type: Transform pos: 76.5,-44.5 parent: 6747 - - uid: 40 - components: - - type: Transform - pos: 76.5,-35.5 - parent: 6747 - uid: 514 components: - type: Transform @@ -13792,21 +13610,6 @@ entities: - type: Transform pos: 79.5,-43.5 parent: 6747 - - uid: 548 - components: - - type: Transform - pos: 76.5,-36.5 - parent: 6747 - - uid: 567 - components: - - type: Transform - pos: 79.5,-36.5 - parent: 6747 - - uid: 928 - components: - - type: Transform - pos: 79.5,-35.5 - parent: 6747 - uid: 994 components: - type: Transform @@ -13907,25 +13710,39 @@ entities: - type: Transform pos: -52.5,-18.5 parent: 6747 -- proto: AirlockExternalGlassShuttleEscape +- proto: AirlockExternalGlassShuttleArrivals entities: - - uid: 1129 + - uid: 5978 components: - type: Transform - rot: 3.141592653589793 rad - pos: 6.5,12.5 + rot: 1.5707963267948966 rad + pos: 76.5,-18.5 parent: 6747 - - uid: 6196 + - uid: 5999 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 78.5,-19.5 + rot: -1.5707963267948966 rad + pos: 86.5,-25.5 parent: 6747 - - uid: 6197 + - uid: 6001 components: - type: Transform rot: 1.5707963267948966 rad - pos: 78.5,-24.5 + pos: 76.5,-25.5 + parent: 6747 + - uid: 19446 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 86.5,-18.5 + parent: 6747 +- proto: AirlockExternalGlassShuttleEscape + entities: + - uid: 1129 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,12.5 parent: 6747 - uid: 7439 components: @@ -13959,24 +13776,12 @@ entities: rot: 3.141592653589793 rad pos: 21.5,36.5 parent: 6747 - - uid: 1081 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 82.5,-36.5 - parent: 6747 - uid: 1091 components: - type: Transform rot: 1.5707963267948966 rad pos: 82.5,-44.5 parent: 6747 - - uid: 1092 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 82.5,-35.5 - parent: 6747 - proto: AirlockExternalLocked entities: - uid: 7375 @@ -14035,6 +13840,18 @@ entities: parent: 6747 - proto: AirlockGlass entities: + - uid: 567 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 76.5,-36.5 + parent: 6747 + - uid: 588 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 76.5,-35.5 + parent: 6747 - uid: 1449 components: - type: Transform @@ -14140,6 +13957,12 @@ entities: - type: Transform pos: 62.5,-48.5 parent: 6747 + - uid: 5881 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 86.5,-36.5 + parent: 6747 - uid: 7084 components: - type: Transform @@ -14150,6 +13973,12 @@ entities: - type: Transform pos: 24.5,4.5 parent: 6747 + - uid: 11804 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 86.5,-35.5 + parent: 6747 - uid: 12906 components: - type: Transform @@ -16066,6 +15895,28 @@ entities: - type: Transform pos: 14.5,-54.5 parent: 6747 +- proto: AlwaysPoweredLightPostSmallRed + entities: + - uid: 5996 + components: + - type: Transform + pos: 76.5,-11.5 + parent: 6747 + - uid: 27687 + components: + - type: Transform + pos: 86.5,-11.5 + parent: 6747 + - uid: 27688 + components: + - type: Transform + pos: 78.5,-30.5 + parent: 6747 + - uid: 27689 + components: + - type: Transform + pos: 84.5,-30.5 + parent: 6747 - proto: AmeController entities: - uid: 17261 @@ -17588,30 +17439,22 @@ entities: - type: Transform pos: -1.5,-23.5 parent: 6747 - - uid: 5889 - components: - - type: Transform - pos: 78.5,-19.5 - parent: 6747 - - uid: 5902 + - uid: 5894 components: - type: Transform - pos: 82.5,-35.5 + rot: 1.5707963267948966 rad + pos: 76.5,-25.5 parent: 6747 - uid: 5959 components: - type: Transform pos: 82.5,-43.5 parent: 6747 - - uid: 5973 - components: - - type: Transform - pos: 82.5,-36.5 - parent: 6747 - - uid: 5982 + - uid: 5997 components: - type: Transform - pos: 78.5,-24.5 + rot: 1.5707963267948966 rad + pos: 76.5,-18.5 parent: 6747 - uid: 6098 components: @@ -18212,8 +18055,6 @@ entities: - type: Transform pos: 10.5,-24.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - proto: Beaker entities: - uid: 4364 @@ -18265,7 +18106,6 @@ entities: solutions: beaker: temperature: 293.15 - canMix: True canReact: True maxVol: 50 name: null @@ -19527,6 +19367,8 @@ entities: - type: Transform pos: 30.5,-13.5 parent: 6747 + - type: SpamEmitSound + enabled: False - proto: BoardGameSpawner entities: - uid: 6565 @@ -20363,6 +20205,11 @@ entities: parent: 6747 - proto: CableApcExtension entities: + - uid: 40 + components: + - type: Transform + pos: 84.5,-36.5 + parent: 6747 - uid: 346 components: - type: Transform @@ -20478,6 +20325,11 @@ entities: - type: Transform pos: 18.5,8.5 parent: 6747 + - uid: 4218 + components: + - type: Transform + pos: 85.5,-36.5 + parent: 6747 - uid: 4317 components: - type: Transform @@ -20516,13 +20368,23 @@ entities: - uid: 5891 components: - type: Transform - pos: 76.5,-19.5 + pos: 76.5,-18.5 + parent: 6747 + - uid: 5899 + components: + - type: Transform + pos: 75.5,-25.5 parent: 6747 - uid: 5901 components: - type: Transform pos: 71.5,-7.5 parent: 6747 + - uid: 5902 + components: + - type: Transform + pos: 76.5,-25.5 + parent: 6747 - uid: 5903 components: - type: Transform @@ -20553,6 +20415,11 @@ entities: - type: Transform pos: 76.5,-36.5 parent: 6747 + - uid: 5980 + components: + - type: Transform + pos: 86.5,-36.5 + parent: 6747 - uid: 6000 components: - type: Transform @@ -20603,10 +20470,10 @@ entities: - type: Transform pos: 69.5,-6.5 parent: 6747 - - uid: 6198 + - uid: 6173 components: - type: Transform - pos: 76.5,-24.5 + pos: 82.5,-36.5 parent: 6747 - uid: 6200 components: @@ -20628,10 +20495,10 @@ entities: - type: Transform pos: 72.5,-10.5 parent: 6747 - - uid: 6443 + - uid: 6539 components: - type: Transform - pos: 75.5,-24.5 + pos: 81.5,-36.5 parent: 6747 - uid: 6584 components: @@ -20773,6 +20640,11 @@ entities: - type: Transform pos: 8.5,0.5 parent: 6747 + - uid: 11803 + components: + - type: Transform + pos: 83.5,-36.5 + parent: 6747 - uid: 11806 components: - type: Transform @@ -25348,11 +25220,6 @@ entities: - type: Transform pos: 74.5,-20.5 parent: 6747 - - uid: 19446 - components: - - type: Transform - pos: 75.5,-26.5 - parent: 6747 - uid: 19447 components: - type: Transform @@ -36143,6 +36010,116 @@ entities: - type: Transform pos: -42.5,-17.5 parent: 6747 + - uid: 27724 + components: + - type: Transform + pos: 87.5,-36.5 + parent: 6747 + - uid: 27725 + components: + - type: Transform + pos: 87.5,-35.5 + parent: 6747 + - uid: 27726 + components: + - type: Transform + pos: 88.5,-35.5 + parent: 6747 + - uid: 27727 + components: + - type: Transform + pos: 88.5,-34.5 + parent: 6747 + - uid: 27728 + components: + - type: Transform + pos: 88.5,-33.5 + parent: 6747 + - uid: 27729 + components: + - type: Transform + pos: 88.5,-32.5 + parent: 6747 + - uid: 27730 + components: + - type: Transform + pos: 88.5,-31.5 + parent: 6747 + - uid: 27731 + components: + - type: Transform + pos: 88.5,-29.5 + parent: 6747 + - uid: 27732 + components: + - type: Transform + pos: 88.5,-30.5 + parent: 6747 + - uid: 27733 + components: + - type: Transform + pos: 88.5,-28.5 + parent: 6747 + - uid: 27734 + components: + - type: Transform + pos: 88.5,-27.5 + parent: 6747 + - uid: 27735 + components: + - type: Transform + pos: 88.5,-26.5 + parent: 6747 + - uid: 27736 + components: + - type: Transform + pos: 88.5,-25.5 + parent: 6747 + - uid: 27737 + components: + - type: Transform + pos: 88.5,-24.5 + parent: 6747 + - uid: 27738 + components: + - type: Transform + pos: 88.5,-22.5 + parent: 6747 + - uid: 27739 + components: + - type: Transform + pos: 88.5,-23.5 + parent: 6747 + - uid: 27740 + components: + - type: Transform + pos: 88.5,-21.5 + parent: 6747 + - uid: 27741 + components: + - type: Transform + pos: 88.5,-20.5 + parent: 6747 + - uid: 27742 + components: + - type: Transform + pos: 88.5,-19.5 + parent: 6747 + - uid: 27743 + components: + - type: Transform + pos: 87.5,-19.5 + parent: 6747 + - uid: 27744 + components: + - type: Transform + pos: 87.5,-18.5 + parent: 6747 + - uid: 27745 + components: + - type: Transform + pos: 86.5,-18.5 + parent: 6747 - proto: CableApcStack entities: - uid: 5081 @@ -47901,8 +47878,6 @@ entities: - type: Transform pos: 4.5,-82.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - proto: CargoPallet entities: - uid: 4595 @@ -53624,6 +53599,146 @@ entities: - type: Transform pos: -52.5,16.5 parent: 6747 + - uid: 27761 + components: + - type: Transform + pos: 92.5,-28.5 + parent: 6747 + - uid: 27762 + components: + - type: Transform + pos: 92.5,-26.5 + parent: 6747 + - uid: 27763 + components: + - type: Transform + pos: 92.5,-27.5 + parent: 6747 + - uid: 27764 + components: + - type: Transform + pos: 92.5,-29.5 + parent: 6747 + - uid: 27765 + components: + - type: Transform + pos: 92.5,-30.5 + parent: 6747 + - uid: 27766 + components: + - type: Transform + pos: 92.5,-31.5 + parent: 6747 + - uid: 27767 + components: + - type: Transform + pos: 92.5,-32.5 + parent: 6747 + - uid: 27768 + components: + - type: Transform + pos: 92.5,-33.5 + parent: 6747 + - uid: 27769 + components: + - type: Transform + pos: 92.5,-34.5 + parent: 6747 + - uid: 27770 + components: + - type: Transform + pos: 92.5,-35.5 + parent: 6747 + - uid: 27771 + components: + - type: Transform + pos: 92.5,-36.5 + parent: 6747 + - uid: 27772 + components: + - type: Transform + pos: 92.5,-37.5 + parent: 6747 + - uid: 27773 + components: + - type: Transform + pos: 92.5,-38.5 + parent: 6747 + - uid: 27774 + components: + - type: Transform + pos: 92.5,-39.5 + parent: 6747 + - uid: 27775 + components: + - type: Transform + pos: 93.5,-39.5 + parent: 6747 + - uid: 27776 + components: + - type: Transform + pos: 93.5,-38.5 + parent: 6747 + - uid: 27777 + components: + - type: Transform + pos: 93.5,-37.5 + parent: 6747 + - uid: 27778 + components: + - type: Transform + pos: 93.5,-36.5 + parent: 6747 + - uid: 27779 + components: + - type: Transform + pos: 93.5,-35.5 + parent: 6747 + - uid: 27780 + components: + - type: Transform + pos: 93.5,-34.5 + parent: 6747 + - uid: 27781 + components: + - type: Transform + pos: 93.5,-33.5 + parent: 6747 + - uid: 27782 + components: + - type: Transform + pos: 93.5,-32.5 + parent: 6747 + - uid: 27783 + components: + - type: Transform + pos: 93.5,-30.5 + parent: 6747 + - uid: 27784 + components: + - type: Transform + pos: 93.5,-31.5 + parent: 6747 + - uid: 27785 + components: + - type: Transform + pos: 93.5,-29.5 + parent: 6747 + - uid: 27786 + components: + - type: Transform + pos: 93.5,-28.5 + parent: 6747 + - uid: 27787 + components: + - type: Transform + pos: 93.5,-27.5 + parent: 6747 + - uid: 27788 + components: + - type: Transform + pos: 93.5,-26.5 + parent: 6747 - proto: Cautery entities: - uid: 23896 @@ -55655,6 +55770,12 @@ entities: - type: Transform pos: -19.450268,-35.39411 parent: 6747 + - uid: 27810 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 93.521675,-29.405575 + parent: 6747 - proto: Cigarette entities: - uid: 3419 @@ -55813,16 +55934,6 @@ entities: - type: Transform pos: 69.5,-11.5 parent: 6747 - - uid: 6538 - components: - - type: Transform - pos: 75.5,-18.5 - parent: 6747 - - uid: 6539 - components: - - type: Transform - pos: 67.5,-18.5 - parent: 6747 - uid: 8724 components: - type: Transform @@ -55910,16 +56021,6 @@ entities: - type: Transform pos: 72.5,-11.5 parent: 6747 - - uid: 6541 - components: - - type: Transform - pos: 74.5,-18.5 - parent: 6747 - - uid: 6542 - components: - - type: Transform - pos: 68.5,-18.5 - parent: 6747 - uid: 8216 components: - type: Transform @@ -56365,6 +56466,16 @@ entities: - type: Transform pos: -8.5,-82.5 parent: 6747 + - uid: 5968 + components: + - type: Transform + pos: 69.5,-17.5 + parent: 6747 + - uid: 6197 + components: + - type: Transform + pos: 72.5,-17.5 + parent: 6747 - uid: 6621 components: - type: Transform @@ -56704,25 +56815,6 @@ entities: - type: Transform pos: 30.735046,7.834367 parent: 6747 -- proto: ClothingHeadHatHairflower - entities: - - uid: 7182 - components: - - type: Transform - pos: 36.539196,-16.411207 - parent: 6747 - - uid: 12967 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -1.258544,-30.379358 - parent: 6747 - - uid: 17532 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 36.309444,-94.22372 - parent: 6747 - proto: ClothingHeadHatHardhatWhite entities: - uid: 4362 @@ -56842,6 +56934,13 @@ entities: - type: Transform pos: -15.503069,13.299613 parent: 6747 +- proto: ClothingHeadHelmetBasic + entities: + - uid: 11582 + components: + - type: Transform + pos: 32.51328,-89.3608 + parent: 6747 - proto: ClothingHeadHelmetCosmonaut entities: - uid: 21864 @@ -56914,13 +57013,6 @@ entities: rot: 3.141592653589793 rad pos: -33.477093,1.431968 parent: 6747 -- proto: ClothingHeadHelmetScaf - entities: - - uid: 11582 - components: - - type: Transform - pos: 32.51328,-89.3608 - parent: 6747 - proto: ClothingHeadHelmetTemplar entities: - uid: 21866 @@ -57905,6 +57997,18 @@ entities: rot: 3.141592653589793 rad pos: 50.5,-43.5 parent: 6747 + - uid: 27813 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 93.5,-30.5 + parent: 6747 + - uid: 27814 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 93.5,-28.5 + parent: 6747 - proto: CommsComputerCircuitboard entities: - uid: 17712 @@ -59445,7 +59549,7 @@ entities: - type: Transform pos: -44.5,5.5 parent: 6747 -- proto: CrateFunPlushie +- proto: CrateFunToyBox entities: - uid: 11269 components: @@ -59962,8 +60066,6 @@ entities: - type: Transform pos: 12.5,-17.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - proto: CryoPodMachineCircuitboard entities: - uid: 17743 @@ -60184,8 +60286,6 @@ entities: - type: Transform pos: 67.5,14.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconAnomalyGenerator entities: - uid: 27409 @@ -60193,8 +60293,6 @@ entities: - type: Transform pos: 26.5,-66.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconArmory entities: - uid: 27410 @@ -60202,8 +60300,6 @@ entities: - type: Transform pos: -31.5,2.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconArrivals entities: - uid: 6925 @@ -60211,8 +60307,6 @@ entities: - type: Transform pos: 72.5,-22.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconArtifactLab entities: - uid: 27411 @@ -60220,8 +60314,6 @@ entities: - type: Transform pos: -6.5,-83.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconAtmospherics entities: - uid: 27077 @@ -60229,8 +60321,6 @@ entities: - type: Transform pos: 46.5,29.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconBar entities: - uid: 12090 @@ -60238,8 +60328,6 @@ entities: - type: Transform pos: -20.5,-30.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconBotany entities: - uid: 8864 @@ -60247,15 +60335,11 @@ entities: - type: Transform pos: -3.5,-16.5 parent: 6747 - missingComponents: - - WarpPoint - uid: 10931 components: - type: Transform pos: -18.5,-17.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconBridge entities: - uid: 12094 @@ -60263,8 +60347,6 @@ entities: - type: Transform pos: -25.5,-48.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconCameraServerRoom entities: - uid: 8862 @@ -60272,8 +60354,6 @@ entities: - type: Transform pos: -18.5,-57.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconCaptainsQuarters entities: - uid: 8858 @@ -60281,8 +60361,6 @@ entities: - type: Transform pos: -30.5,-54.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconCargoBay entities: - uid: 534 @@ -60290,8 +60368,6 @@ entities: - type: Transform pos: 20.5,35.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconCargoReception entities: - uid: 27567 @@ -60299,8 +60375,6 @@ entities: - type: Transform pos: 24.5,18.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconCERoom entities: - uid: 27412 @@ -60308,8 +60382,6 @@ entities: - type: Transform pos: 55.5,7.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconChapel entities: - uid: 27415 @@ -60317,8 +60389,6 @@ entities: - type: Transform pos: 14.5,-53.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconChemistry entities: - uid: 12093 @@ -60326,8 +60396,6 @@ entities: - type: Transform pos: 11.5,-26.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconCMORoom entities: - uid: 27413 @@ -60335,8 +60403,6 @@ entities: - type: Transform pos: 24.5,-36.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconConferenceRoom entities: - uid: 8721 @@ -60344,8 +60410,6 @@ entities: - type: Transform pos: -22.5,-52.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconCourtroom entities: - uid: 10934 @@ -60353,8 +60417,6 @@ entities: - type: Transform pos: -12.5,-44.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconCryonics entities: - uid: 12095 @@ -60362,8 +60424,6 @@ entities: - type: Transform pos: 10.5,-18.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconCryosleep entities: - uid: 27416 @@ -60371,8 +60431,6 @@ entities: - type: Transform pos: 68.5,-32.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconDetectiveRoom entities: - uid: 27417 @@ -60380,8 +60438,6 @@ entities: - type: Transform pos: -18.5,5.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconDisposals entities: - uid: 27418 @@ -60389,8 +60445,6 @@ entities: - type: Transform pos: 40.5,-0.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconDorms entities: - uid: 10935 @@ -60398,8 +60452,6 @@ entities: - type: Transform pos: 41.5,-14.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconEngineering entities: - uid: 649 @@ -60407,8 +60459,6 @@ entities: - type: Transform pos: 43.5,10.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconEscapePod entities: - uid: 10937 @@ -60416,15 +60466,11 @@ entities: - type: Transform pos: 6.5,11.5 parent: 6747 - missingComponents: - - WarpPoint - uid: 12097 components: - type: Transform pos: -53.5,-12.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconEvac entities: - uid: 7708 @@ -60432,8 +60478,6 @@ entities: - type: Transform pos: 66.5,-44.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconEVAStorage entities: - uid: 12096 @@ -60443,8 +60487,6 @@ entities: parent: 6747 - type: NavMapBeacon text: EVA - missingComponents: - - WarpPoint - proto: DefaultStationBeaconExam entities: - uid: 12098 @@ -60452,8 +60494,6 @@ entities: - type: Transform pos: 16.5,-24.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconGravGen entities: - uid: 27420 @@ -60461,8 +60501,6 @@ entities: - type: Transform pos: 66.5,6.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconHOPOffice entities: - uid: 12107 @@ -60470,8 +60508,6 @@ entities: - type: Transform pos: 41.5,-35.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconHOSRoom entities: - uid: 27421 @@ -60479,8 +60515,6 @@ entities: - type: Transform pos: -11.5,-6.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconJanitorsOffice entities: - uid: 22365 @@ -60488,8 +60522,6 @@ entities: - type: Transform pos: 30.5,2.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconKitchen entities: - uid: 22363 @@ -60497,8 +60529,6 @@ entities: - type: Transform pos: -7.5,-24.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconLawOffice entities: - uid: 10915 @@ -60506,8 +60536,6 @@ entities: - type: Transform pos: -8.5,-62.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconLibrary entities: - uid: 27422 @@ -60515,8 +60543,6 @@ entities: - type: Transform pos: 30.5,-56.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconMailroom entities: - uid: 3687 @@ -60524,8 +60550,6 @@ entities: - type: Transform pos: 32.5,15.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconMantis entities: - uid: 12109 @@ -60533,8 +60557,6 @@ entities: - type: Transform pos: 2.5,-55.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconMedbay entities: - uid: 1608 @@ -60542,8 +60564,6 @@ entities: - type: Transform pos: 25.5,-28.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconMedicalOutpost entities: - uid: 10927 @@ -60551,15 +60571,11 @@ entities: - type: Transform pos: -21.5,-10.5 parent: 6747 - missingComponents: - - WarpPoint - uid: 10928 components: - type: Transform pos: 49.5,-42.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconMetempsychosis entities: - uid: 10933 @@ -60567,8 +60583,6 @@ entities: - type: Transform pos: 19.5,-33.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconMorgue entities: - uid: 27423 @@ -60576,8 +60590,6 @@ entities: - type: Transform pos: 13.5,-38.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconPark entities: - uid: 22367 @@ -60585,8 +60597,6 @@ entities: - type: Transform pos: 13.5,-43.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconPermaBrig entities: - uid: 10921 @@ -60594,8 +60604,6 @@ entities: - type: Transform pos: -48.5,2.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconPowerBank entities: - uid: 27427 @@ -60603,8 +60611,6 @@ entities: - type: Transform pos: 59.5,20.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconPsychologist entities: - uid: 23899 @@ -60612,8 +60618,6 @@ entities: - type: Transform pos: 49.5,-52.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconQMRoom entities: - uid: 27424 @@ -60621,8 +60625,6 @@ entities: - type: Transform pos: 14.5,20.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconRDRoom entities: - uid: 27425 @@ -60630,8 +60632,6 @@ entities: - type: Transform pos: 14.5,-68.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconReporter entities: - uid: 22378 @@ -60639,8 +60639,6 @@ entities: - type: Transform pos: 37.5,-51.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconRND entities: - uid: 24100 @@ -60648,8 +60646,6 @@ entities: - type: Transform pos: 4.5,-75.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconRobotics entities: - uid: 27426 @@ -60657,8 +60653,6 @@ entities: - type: Transform pos: 2.5,-70.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconSalvage entities: - uid: 24101 @@ -60666,8 +60660,6 @@ entities: - type: Transform pos: -2.5,37.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconScience entities: - uid: 10936 @@ -60675,8 +60667,6 @@ entities: - type: Transform pos: 22.5,-50.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconSecurity entities: - uid: 22370 @@ -60686,15 +60676,11 @@ entities: parent: 6747 - type: NavMapBeacon text: Shooting Range - missingComponents: - - WarpPoint - uid: 24102 components: - type: Transform pos: 0.5,-4.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconService entities: - uid: 6477 @@ -60704,8 +60690,6 @@ entities: parent: 6747 - type: NavMapBeacon text: Barber - missingComponents: - - WarpPoint - uid: 27428 components: - type: Transform @@ -60713,8 +60697,6 @@ entities: parent: 6747 - type: NavMapBeacon text: Service Lounge - missingComponents: - - WarpPoint - proto: DefaultStationBeaconSolars entities: - uid: 25590 @@ -60722,22 +60704,16 @@ entities: - type: Transform pos: 40.5,49.5 parent: 6747 - missingComponents: - - WarpPoint - uid: 27429 components: - type: Transform pos: 78.5,18.5 parent: 6747 - missingComponents: - - WarpPoint - uid: 27431 components: - type: Transform pos: -53.5,-24.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconSurgery entities: - uid: 24103 @@ -60745,8 +60721,6 @@ entities: - type: Transform pos: 11.5,-31.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconTechVault entities: - uid: 27432 @@ -60754,8 +60728,6 @@ entities: - type: Transform pos: 72.5,9.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconTEG entities: - uid: 24980 @@ -60763,8 +60735,6 @@ entities: - type: Transform pos: 58.5,27.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconTelecoms entities: - uid: 27433 @@ -60772,8 +60742,6 @@ entities: - type: Transform pos: 62.5,8.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconTheater entities: - uid: 26333 @@ -60783,8 +60751,6 @@ entities: parent: 6747 - type: NavMapBeacon text: Arena - missingComponents: - - WarpPoint - proto: DefaultStationBeaconToolRoom entities: - uid: 27434 @@ -60792,8 +60758,6 @@ entities: - type: Transform pos: 54.5,-25.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconVault entities: - uid: 27435 @@ -60801,8 +60765,6 @@ entities: - type: Transform pos: -34.5,-46.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconVirology entities: - uid: 27076 @@ -60810,8 +60772,6 @@ entities: - type: Transform pos: 21.5,-15.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefaultStationBeaconWardensOffice entities: - uid: 27436 @@ -60819,8 +60779,6 @@ entities: - type: Transform pos: -21.5,-6.5 parent: 6747 - missingComponents: - - WarpPoint - proto: DefibrillatorCabinet entities: - uid: 3246 @@ -70845,7 +70803,6 @@ entities: solutions: drink: temperature: 293.15 - canMix: False canReact: True maxVol: 100 name: null @@ -71036,7 +70993,6 @@ entities: solutions: drink: temperature: 293.15 - canMix: True canReact: True maxVol: 20 name: null @@ -71197,7 +71153,6 @@ entities: solutions: drink: temperature: 293.15 - canMix: False canReact: True maxVol: 20 name: null @@ -71214,7 +71169,6 @@ entities: solutions: drink: temperature: 293.15 - canMix: False canReact: True maxVol: 20 name: null @@ -71238,7 +71192,6 @@ entities: solutions: drink: temperature: 293.15 - canMix: False canReact: True maxVol: 100 name: null @@ -71325,7 +71278,6 @@ entities: solutions: drink: temperature: 293.15 - canMix: False canReact: True maxVol: 20 name: null @@ -71344,7 +71296,6 @@ entities: solutions: drink: temperature: 293.15 - canMix: False canReact: True maxVol: 20 name: null @@ -71363,7 +71314,6 @@ entities: solutions: drink: temperature: 293.15 - canMix: False canReact: True maxVol: 20 name: null @@ -71376,29 +71326,11 @@ entities: - type: Transform pos: -59.004444,-0.28683114 parent: 6747 - - type: SolutionContainerManager - solutions: - drink: - temperature: 293.15 - canMix: False - canReact: True - maxVol: 20 - name: null - reagents: [] - uid: 23573 components: - type: Transform pos: -58.941944,-0.5161569 parent: 6747 - - type: SolutionContainerManager - solutions: - drink: - temperature: 293.15 - canMix: False - canReact: True - maxVol: 20 - name: null - reagents: [] - proto: DrinkWaterJug entities: - uid: 17594 @@ -72674,8 +72606,6 @@ entities: - 26981 - 26982 - 26983 - - type: AtmosDevice - joinedGrid: 6747 - uid: 295 components: - type: Transform @@ -72698,8 +72628,6 @@ entities: - 21749 - 21750 - 21751 - - type: AtmosDevice - joinedGrid: 6747 - uid: 767 components: - type: Transform @@ -72729,8 +72657,6 @@ entities: - 15913 - 25266 - 25268 - - type: AtmosDevice - joinedGrid: 6747 - uid: 1781 components: - type: Transform @@ -72753,8 +72679,6 @@ entities: - 25209 - 1958 - 25206 - - type: AtmosDevice - joinedGrid: 6747 - uid: 3693 components: - type: Transform @@ -72768,8 +72692,6 @@ entities: - 21775 - 22292 - 21906 - - type: AtmosDevice - joinedGrid: 6747 - uid: 7457 components: - type: Transform @@ -72785,8 +72707,6 @@ entities: - 5324 - 5866 - 5878 - - type: AtmosDevice - joinedGrid: 6747 - uid: 7458 components: - type: Transform @@ -72802,8 +72722,6 @@ entities: - 7446 - 7445 - 7444 - - type: AtmosDevice - joinedGrid: 6747 - uid: 13176 components: - type: Transform @@ -72819,8 +72737,6 @@ entities: - 26988 - 1959 - 2421 - - type: AtmosDevice - joinedGrid: 6747 - uid: 13869 components: - type: Transform @@ -72842,8 +72758,6 @@ entities: - 21749 - 21750 - 21751 - - type: AtmosDevice - joinedGrid: 6747 - uid: 17095 components: - type: Transform @@ -72860,8 +72774,6 @@ entities: - 22151 - 21882 - 23520 - - type: AtmosDevice - joinedGrid: 6747 - uid: 17357 components: - type: Transform @@ -72877,8 +72789,6 @@ entities: - 25257 - 25258 - 1148 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22035 components: - type: Transform @@ -72894,8 +72804,6 @@ entities: - 21769 - 21770 - 22290 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22039 components: - type: Transform @@ -72910,8 +72818,6 @@ entities: - 21918 - 8989 - 8988 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22040 components: - type: Transform @@ -72927,8 +72833,6 @@ entities: - 9007 - 22184 - 21917 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22042 components: - type: Transform @@ -72943,8 +72847,6 @@ entities: - 22188 - 22328 - 22327 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22044 components: - type: Transform @@ -72971,8 +72873,6 @@ entities: - 8984 - 21916 - 21389 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22088 components: - type: Transform @@ -72987,8 +72887,6 @@ entities: - 17141 - 25308 - 25307 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22090 components: - type: Transform @@ -73005,8 +72903,6 @@ entities: - 21797 - 21795 - 21796 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22092 components: - type: Transform @@ -73030,8 +72926,6 @@ entities: - 25302 - 25303 - 25304 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22094 components: - type: Transform @@ -73060,8 +72954,6 @@ entities: - 8966 - 21784 - 21783 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22095 components: - type: Transform @@ -73075,8 +72967,6 @@ entities: - 22161 - 22160 - 22159 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22098 components: - type: Transform @@ -73087,8 +72977,6 @@ entities: - 21788 - 21891 - 27085 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22100 components: - type: Transform @@ -73102,8 +72990,6 @@ entities: - 21890 - 21787 - 21889 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22102 components: - type: Transform @@ -73116,8 +73002,6 @@ entities: - 22236 - 22237 - 21886 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22104 components: - type: Transform @@ -73129,8 +73013,6 @@ entities: - 21888 - 21887 - 22154 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22106 components: - type: Transform @@ -73141,15 +73023,11 @@ entities: - 21885 - 22147 - 21786 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22112 components: - type: Transform pos: 28.5,-62.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22114 components: - type: Transform @@ -73162,8 +73040,6 @@ entities: - 22142 - 22146 - 21783 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22116 components: - type: Transform @@ -73175,8 +73051,6 @@ entities: - 21879 - 22144 - 21782 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22118 components: - type: Transform @@ -73191,8 +73065,6 @@ entities: - 22174 - 22178 - 21909 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22120 components: - type: Transform @@ -73205,8 +73077,6 @@ entities: - 22176 - 22177 - 21907 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22122 components: - type: Transform @@ -73239,8 +73109,6 @@ entities: - 8975 - 8973 - 22177 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22124 components: - type: Transform @@ -73259,8 +73127,6 @@ entities: - 21781 - 21772 - 21908 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22126 components: - type: Transform @@ -73281,8 +73147,6 @@ entities: - 25257 - 25258 - 1148 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22127 components: - type: Transform @@ -73292,8 +73156,6 @@ entities: devices: - 22321 - 21931 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22131 components: - type: Transform @@ -73305,8 +73167,6 @@ entities: - 22136 - 22137 - 22139 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22140 components: - type: Transform @@ -73318,8 +73178,6 @@ entities: - 22136 - 22138 - 22135 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22164 components: - type: Transform @@ -73335,8 +73193,6 @@ entities: - 21414 - 21415 - 22246 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22224 components: - type: Transform @@ -73358,8 +73214,6 @@ entities: - 17052 - 17367 - 17362 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22226 components: - type: Transform @@ -73373,8 +73227,6 @@ entities: - 21811 - 22143 - 23041 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22230 components: - type: Transform @@ -73389,8 +73241,6 @@ entities: - 22228 - 22231 - 21881 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22235 components: - type: Transform @@ -73403,8 +73253,6 @@ entities: - 22153 - 22152 - 438 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22238 components: - type: Transform @@ -73416,8 +73264,6 @@ entities: - 10125 - 22157 - 21810 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22240 components: - type: Transform @@ -73431,8 +73277,6 @@ entities: - 22157 - 10125 - 10126 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22289 components: - type: Transform @@ -73450,8 +73294,6 @@ entities: - 6533 - 9007 - 21915 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22294 components: - type: Transform @@ -73464,8 +73306,6 @@ entities: - 22181 - 22180 - 21911 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22318 components: - type: Transform @@ -73482,8 +73322,6 @@ entities: - 21818 - 21819 - 22186 - - type: AtmosDevice - joinedGrid: 6747 - uid: 25272 components: - type: Transform @@ -73499,8 +73337,6 @@ entities: - 25204 - 25212 - 25205 - - type: AtmosDevice - joinedGrid: 6747 - uid: 25276 components: - type: Transform @@ -73512,8 +73348,6 @@ entities: - 25212 - 25277 - 25207 - - type: AtmosDevice - joinedGrid: 6747 - uid: 25279 components: - type: Transform @@ -73524,8 +73358,6 @@ entities: devices: - 25212 - 25208 - - type: AtmosDevice - joinedGrid: 6747 - uid: 25282 components: - type: Transform @@ -73547,8 +73379,6 @@ entities: - 25232 - 25220 - 25221 - - type: AtmosDevice - joinedGrid: 6747 - uid: 25284 components: - type: Transform @@ -73559,8 +73389,6 @@ entities: devices: - 25219 - 25216 - - type: AtmosDevice - joinedGrid: 6747 - uid: 25285 components: - type: Transform @@ -73571,8 +73399,6 @@ entities: devices: - 25219 - 25217 - - type: AtmosDevice - joinedGrid: 6747 - uid: 25288 components: - type: Transform @@ -73585,8 +73411,6 @@ entities: - 25222 - 22246 - 25224 - - type: AtmosDevice - joinedGrid: 6747 - uid: 25291 components: - type: Transform @@ -73598,8 +73422,6 @@ entities: - 25226 - 25229 - 25230 - - type: AtmosDevice - joinedGrid: 6747 - uid: 25294 components: - type: Transform @@ -73614,8 +73436,6 @@ entities: - 25236 - 22162 - 25235 - - type: AtmosDevice - joinedGrid: 6747 - uid: 25296 components: - type: Transform @@ -73629,8 +73449,6 @@ entities: - 25234 - 25233 - 25236 - - type: AtmosDevice - joinedGrid: 6747 - uid: 25297 components: - type: Transform @@ -73644,8 +73462,6 @@ entities: - 25241 - 25238 - 25237 - - type: AtmosDevice - joinedGrid: 6747 - uid: 25300 components: - type: Transform @@ -73662,8 +73478,6 @@ entities: - 25219 - 25221 - 25220 - - type: AtmosDevice - joinedGrid: 6747 - uid: 25306 components: - type: Transform @@ -73688,8 +73502,6 @@ entities: - 25301 - 22249 - 25307 - - type: AtmosDevice - joinedGrid: 6747 - uid: 25310 components: - type: Transform @@ -73725,8 +73537,6 @@ entities: - 15908 - 15907 - 15905 - - type: AtmosDevice - joinedGrid: 6747 - uid: 25312 components: - type: Transform @@ -73748,8 +73558,6 @@ entities: - 25264 - 25314 - 25313 - - type: AtmosDevice - joinedGrid: 6747 - uid: 25318 components: - type: Transform @@ -73767,8 +73575,6 @@ entities: - 25252 - 25260 - 25261 - - type: AtmosDevice - joinedGrid: 6747 - uid: 25320 components: - type: Transform @@ -73786,8 +73592,6 @@ entities: - 25261 - 25254 - 25253 - - type: AtmosDevice - joinedGrid: 6747 - uid: 25322 components: - type: Transform @@ -73798,8 +73602,6 @@ entities: devices: - 25262 - 15911 - - type: AtmosDevice - joinedGrid: 6747 - uid: 25324 components: - type: Transform @@ -73812,8 +73614,6 @@ entities: - 25268 - 25219 - 25267 - - type: AtmosDevice - joinedGrid: 6747 - uid: 25386 components: - type: Transform @@ -73829,8 +73629,6 @@ entities: - 15916 - 15915 - 15914 - - type: AtmosDevice - joinedGrid: 6747 - uid: 26947 components: - type: Transform @@ -73842,8 +73640,6 @@ entities: - 21921 - 26953 - 26952 - - type: AtmosDevice - joinedGrid: 6747 - uid: 26959 components: - type: Transform @@ -73854,16 +73650,12 @@ entities: devices: - 21921 - 26954 - - type: AtmosDevice - joinedGrid: 6747 - uid: 26964 components: - type: Transform rot: 1.5707963267948966 rad pos: 39.5,15.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 26971 components: - type: Transform @@ -73889,8 +73681,6 @@ entities: - 26972 - 22433 - 26974 - - type: AtmosDevice - joinedGrid: 6747 - uid: 26990 components: - type: Transform @@ -73905,8 +73695,6 @@ entities: - 26946 - 26948 - 26949 - - type: AtmosDevice - joinedGrid: 6747 - uid: 26992 components: - type: Transform @@ -73926,8 +73714,6 @@ entities: - 26951 - 26960 - 26952 - - type: AtmosDevice - joinedGrid: 6747 - uid: 27004 components: - type: Transform @@ -73941,8 +73727,6 @@ entities: - 1820 - 27002 - 27001 - - type: AtmosDevice - joinedGrid: 6747 - uid: 27006 components: - type: Transform @@ -73961,8 +73745,6 @@ entities: - 26969 - 26972 - 26973 - - type: AtmosDevice - joinedGrid: 6747 - uid: 27008 components: - type: Transform @@ -73975,8 +73757,6 @@ entities: - 26974 - 21928 - 27010 - - type: AtmosDevice - joinedGrid: 6747 - uid: 27037 components: - type: Transform @@ -73989,8 +73769,6 @@ entities: - 27034 - 25212 - 27035 - - type: AtmosDevice - joinedGrid: 6747 - uid: 27088 components: - type: Transform @@ -74004,8 +73782,6 @@ entities: - 23520 - 5046 - 27086 - - type: AtmosDevice - joinedGrid: 6747 - proto: FireAlarmElectronics entities: - uid: 7654 @@ -76228,7 +76004,7 @@ entities: - type: Transform pos: 110.47042,36.19293 parent: 6747 -- proto: FoodChili +- proto: FoodChiliPepper entities: - uid: 3862 components: @@ -76606,6 +76382,25 @@ entities: - type: Transform pos: 48.306625,-15.94488 parent: 6747 +- proto: FoodPoppy + entities: + - uid: 7182 + components: + - type: Transform + pos: 36.539196,-16.411207 + parent: 6747 + - uid: 12967 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.258544,-30.379358 + parent: 6747 + - uid: 17532 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.309444,-94.22372 + parent: 6747 - proto: FoodPotato entities: - uid: 218 @@ -76809,8 +76604,6 @@ entities: - type: Transform pos: 11.5,-20.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#99FFFFFF' - uid: 7925 @@ -76819,8 +76612,6 @@ entities: rot: 1.5707963267948966 rad pos: 50.5,35.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#CC6600FF' - uid: 11423 @@ -76829,8 +76620,6 @@ entities: rot: -1.5707963267948966 rad pos: 43.5,30.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#66FF66FF' - uid: 11971 @@ -76839,8 +76628,6 @@ entities: rot: 3.141592653589793 rad pos: 58.5,38.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#00FFFFFF' - uid: 13117 @@ -76849,16 +76636,12 @@ entities: rot: -1.5707963267948966 rad pos: 60.5,31.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 13152 components: - type: Transform rot: -1.5707963267948966 rad pos: 59.5,31.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#CC6600FF' - uid: 13364 @@ -76866,8 +76649,6 @@ entities: - type: Transform pos: 60.5,35.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#00FFFFFF' - uid: 13369 @@ -76876,8 +76657,6 @@ entities: rot: 3.141592653589793 rad pos: 62.5,35.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#00FFFFFF' - uid: 26913 @@ -76885,8 +76664,6 @@ entities: - type: Transform pos: 11.5,-19.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#99FFFFFF' - proto: GasFilterFlipped @@ -76897,8 +76674,6 @@ entities: rot: -1.5707963267948966 rad pos: 36.5,35.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 7868 @@ -76907,8 +76682,6 @@ entities: rot: -1.5707963267948966 rad pos: 38.5,35.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#CC6600FF' - uid: 7869 @@ -76917,8 +76690,6 @@ entities: rot: -1.5707963267948966 rad pos: 40.5,35.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#CC6600FF' - uid: 7870 @@ -76927,8 +76698,6 @@ entities: rot: -1.5707963267948966 rad pos: 42.5,35.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#CC6600FF' - uid: 7871 @@ -76937,8 +76706,6 @@ entities: rot: -1.5707963267948966 rad pos: 44.5,35.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#CC6600FF' - uid: 7872 @@ -76947,8 +76714,6 @@ entities: rot: -1.5707963267948966 rad pos: 46.5,35.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#CC6600FF' - uid: 8120 @@ -76956,8 +76721,6 @@ entities: - type: Transform pos: 53.5,43.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#CC6600FF' - proto: GasMinerNitrogenStation @@ -76967,8 +76730,6 @@ entities: - type: Transform pos: 38.5,41.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - proto: GasMinerOxygenStation entities: - uid: 6693 @@ -76976,8 +76737,6 @@ entities: - type: Transform pos: 36.5,41.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - proto: GasMixer entities: - uid: 11233 @@ -76986,8 +76745,6 @@ entities: rot: -1.5707963267948966 rad pos: 2.5,-85.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - proto: GasMixerFlipped entities: - uid: 7887 @@ -76999,8 +76756,6 @@ entities: - type: GasMixer inletTwoConcentration: 0.79 inletOneConcentration: 0.21 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 11232 @@ -77009,8 +76764,6 @@ entities: rot: 3.141592653589793 rad pos: 1.5,-85.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - proto: GasOutletInjector entities: - uid: 250 @@ -77019,15 +76772,11 @@ entities: rot: 1.5707963267948966 rad pos: -20.5,9.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 7259 components: - type: Transform pos: 42.5,40.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF9999FF' - uid: 7261 @@ -77035,8 +76784,6 @@ entities: - type: Transform pos: 40.5,40.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF5500FF' - uid: 7262 @@ -77044,8 +76791,6 @@ entities: - type: Transform pos: 38.5,40.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF3333FF' - uid: 7263 @@ -77053,8 +76798,6 @@ entities: - type: Transform pos: 36.5,40.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#00FFFFFF' - uid: 7938 @@ -77062,8 +76805,6 @@ entities: - type: Transform pos: 44.5,40.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#3399FFFF' - uid: 7939 @@ -77071,15 +76812,11 @@ entities: - type: Transform pos: 46.5,40.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 7940 components: - type: Transform pos: 48.5,40.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 8107 @@ -77087,8 +76824,6 @@ entities: - type: Transform pos: 53.5,49.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#CC6600FF' - uid: 8108 @@ -77096,48 +76831,36 @@ entities: - type: Transform pos: 54.5,49.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 11251 components: - type: Transform rot: 3.141592653589793 rad pos: 3.5,-90.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 11252 components: - type: Transform rot: 3.141592653589793 rad pos: 1.5,-90.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 13284 components: - type: Transform rot: -1.5707963267948966 rad pos: 65.5,28.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 13370 components: - type: Transform rot: -1.5707963267948966 rad pos: 65.5,35.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 15078 components: - type: Transform rot: 1.5707963267948966 rad pos: -10.5,-73.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 15079 @@ -77146,8 +76869,6 @@ entities: rot: 3.141592653589793 rad pos: -9.5,-78.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 15482 @@ -77156,45 +76877,33 @@ entities: rot: 3.141592653589793 rad pos: -34.5,-71.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 15483 components: - type: Transform rot: -1.5707963267948966 rad pos: -23.5,-68.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 15484 components: - type: Transform pos: -42.5,-53.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 15485 components: - type: Transform rot: 3.141592653589793 rad pos: -48.5,-82.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 16591 components: - type: Transform pos: -31.5,17.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 16592 components: - type: Transform pos: -26.5,15.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - proto: GasPassiveGate entities: - uid: 7933 @@ -77203,8 +76912,6 @@ entities: rot: 3.141592653589793 rad pos: 46.5,31.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#66FF66FF' - uid: 23527 @@ -77212,8 +76919,6 @@ entities: - type: Transform pos: 43.5,33.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#66FF66FF' - uid: 25075 @@ -77222,8 +76927,6 @@ entities: rot: 3.141592653589793 rad pos: -1.5,-24.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - proto: GasPassiveVent @@ -77233,8 +76936,6 @@ entities: - type: Transform pos: 55.5,48.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#CC6600FF' - uid: 7945 @@ -77243,8 +76944,6 @@ entities: rot: 1.5707963267948966 rad pos: 36.5,42.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#00FFFFFF' - uid: 7946 @@ -77253,8 +76952,6 @@ entities: rot: 1.5707963267948966 rad pos: 38.5,42.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF3333FF' - uid: 7947 @@ -77263,8 +76960,6 @@ entities: rot: 1.5707963267948966 rad pos: 40.5,42.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF5500FF' - uid: 7948 @@ -77273,8 +76968,6 @@ entities: rot: 1.5707963267948966 rad pos: 42.5,42.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF9999FF' - uid: 7949 @@ -77283,8 +76976,6 @@ entities: rot: 1.5707963267948966 rad pos: 44.5,42.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#3399FFFF' - uid: 7950 @@ -77293,16 +76984,12 @@ entities: rot: 1.5707963267948966 rad pos: 46.5,42.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 7951 components: - type: Transform rot: 1.5707963267948966 rad pos: 48.5,42.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 8031 @@ -77310,8 +76997,6 @@ entities: - type: Transform pos: 51.5,38.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#CC6600FF' - uid: 8151 @@ -77319,23 +77004,17 @@ entities: - type: Transform pos: 53.5,44.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 11253 components: - type: Transform rot: 3.141592653589793 rad pos: 2.5,-89.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 13272 components: - type: Transform pos: 57.5,41.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - proto: GasPipeBend entities: - uid: 344 @@ -108146,16 +107825,12 @@ entities: rot: 3.141592653589793 rad pos: 10.5,-25.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 7258 components: - type: Transform rot: -1.5707963267948966 rad pos: 52.5,34.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#CC6600FF' - uid: 7260 @@ -108164,8 +107839,6 @@ entities: rot: -1.5707963267948966 rad pos: 52.5,33.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#CC6600FF' - uid: 7753 @@ -108174,8 +107847,6 @@ entities: rot: -1.5707963267948966 rad pos: 35.5,32.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 7864 @@ -108184,8 +107855,6 @@ entities: rot: -1.5707963267948966 rad pos: 35.5,33.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 7865 @@ -108194,8 +107863,6 @@ entities: rot: -1.5707963267948966 rad pos: 35.5,34.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 7883 @@ -108204,8 +107871,6 @@ entities: rot: 1.5707963267948966 rad pos: 36.5,34.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#00FFFFFF' - uid: 7888 @@ -108214,8 +107879,6 @@ entities: rot: 1.5707963267948966 rad pos: 38.5,34.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF3333FF' - uid: 7910 @@ -108224,56 +107887,42 @@ entities: rot: 3.141592653589793 rad pos: 49.5,34.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 7913 components: - type: Transform rot: 3.141592653589793 rad pos: 45.5,34.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 7917 components: - type: Transform rot: 3.141592653589793 rad pos: 41.5,34.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 7918 components: - type: Transform rot: 3.141592653589793 rad pos: 47.5,34.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 7926 components: - type: Transform rot: 3.141592653589793 rad pos: 48.5,31.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 8128 components: - type: Transform rot: 3.141592653589793 rad pos: 54.5,44.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 8144 components: - type: Transform rot: 1.5707963267948966 rad pos: 53.5,33.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#CC6600FF' - uid: 8145 @@ -108282,8 +107931,6 @@ entities: rot: 1.5707963267948966 rad pos: 53.5,34.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#CC6600FF' - uid: 11226 @@ -108291,44 +107938,32 @@ entities: - type: Transform pos: 1.5,-83.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 11227 components: - type: Transform pos: 2.5,-83.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 11228 components: - type: Transform pos: 3.5,-83.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 11229 components: - type: Transform pos: 4.5,-83.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 11256 components: - type: Transform pos: 2.5,-86.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 11427 components: - type: Transform rot: 1.5707963267948966 rad pos: 49.5,32.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#CC6600FF' - uid: 11428 @@ -108337,8 +107972,6 @@ entities: rot: 1.5707963267948966 rad pos: 49.5,33.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#CC6600FF' - uid: 11442 @@ -108347,8 +107980,6 @@ entities: rot: 1.5707963267948966 rad pos: 42.5,32.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#66FF66FF' - uid: 11769 @@ -108356,16 +107987,12 @@ entities: - type: Transform pos: -8.5,-84.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 13084 components: - type: Transform rot: 1.5707963267948966 rad pos: 59.5,33.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#00FFFFFF' - uid: 13145 @@ -108373,16 +108000,12 @@ entities: - type: Transform pos: 60.5,32.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 13150 components: - type: Transform rot: 3.141592653589793 rad pos: 61.5,28.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#CC6600FF' - uid: 13151 @@ -108391,8 +108014,6 @@ entities: rot: 3.141592653589793 rad pos: 60.5,28.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#CC6600FF' - uid: 13282 @@ -108401,24 +108022,18 @@ entities: rot: 1.5707963267948966 rad pos: 62.5,28.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 13340 components: - type: Transform rot: 1.5707963267948966 rad pos: 59.5,35.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 13341 components: - type: Transform rot: 1.5707963267948966 rad pos: 59.5,34.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#00FFFFFF' - uid: 14914 @@ -108427,24 +108042,18 @@ entities: rot: 3.141592653589793 rad pos: 13.5,-20.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22211 components: - type: Transform rot: 1.5707963267948966 rad pos: 10.5,-20.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 23526 components: - type: Transform rot: 1.5707963267948966 rad pos: 42.5,34.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF9999FF' - uid: 23897 @@ -108453,8 +108062,6 @@ entities: rot: 1.5707963267948966 rad pos: 10.5,-19.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - proto: GasPressurePump entities: - uid: 246 @@ -108463,8 +108070,6 @@ entities: rot: -1.5707963267948966 rad pos: -19.5,9.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 7880 @@ -108472,8 +108077,6 @@ entities: - type: Transform pos: 37.5,35.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#00FFFFFF' - uid: 7881 @@ -108481,8 +108084,6 @@ entities: - type: Transform pos: 39.5,35.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF3333FF' - uid: 7901 @@ -108491,8 +108092,6 @@ entities: rot: 3.141592653589793 rad pos: 48.5,35.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 7903 @@ -108500,8 +108099,6 @@ entities: - type: Transform pos: 48.5,32.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 7907 @@ -108509,8 +108106,6 @@ entities: - type: Transform pos: 49.5,35.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 7914 @@ -108518,15 +108113,11 @@ entities: - type: Transform pos: 47.5,35.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 7915 components: - type: Transform pos: 41.5,35.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF5500FF' - uid: 7919 @@ -108534,8 +108125,6 @@ entities: - type: Transform pos: 43.5,35.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF9999FF' - uid: 7920 @@ -108543,8 +108132,6 @@ entities: - type: Transform pos: 45.5,35.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#3399FFFF' - uid: 7931 @@ -108553,8 +108140,6 @@ entities: rot: -1.5707963267948966 rad pos: 48.5,30.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#CC6600FF' - uid: 8121 @@ -108563,8 +108148,6 @@ entities: rot: 3.141592653589793 rad pos: 53.5,46.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#CC6600FF' - uid: 8127 @@ -108573,15 +108156,11 @@ entities: rot: 3.141592653589793 rad pos: 54.5,45.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 8141 components: - type: Transform pos: 54.5,35.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#CC6600FF' - uid: 11245 @@ -108589,31 +108168,23 @@ entities: - type: Transform pos: 1.5,-87.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 11246 components: - type: Transform pos: 3.5,-87.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 11255 components: - type: Transform rot: 3.141592653589793 rad pos: 2.5,-87.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 11425 components: - type: Transform rot: 1.5707963267948966 rad pos: 44.5,32.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#66FF66FF' - uid: 11439 @@ -108622,8 +108193,6 @@ entities: rot: 3.141592653589793 rad pos: 40.5,29.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 11441 @@ -108631,8 +108200,6 @@ entities: - type: Transform pos: 41.5,30.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 13283 @@ -108641,16 +108208,12 @@ entities: rot: 1.5707963267948966 rad pos: 63.5,28.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 15071 components: - type: Transform rot: -1.5707963267948966 rad pos: -8.5,-73.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 15486 @@ -108659,8 +108222,6 @@ entities: rot: 1.5707963267948966 rad pos: -24.5,-68.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 15521 @@ -108669,8 +108230,6 @@ entities: rot: 3.141592653589793 rad pos: -42.5,-54.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 15538 @@ -108678,8 +108237,6 @@ entities: - type: Transform pos: -34.5,-70.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 15546 @@ -108687,8 +108244,6 @@ entities: - type: Transform pos: -48.5,-81.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 16571 @@ -108697,8 +108252,6 @@ entities: rot: 3.141592653589793 rad pos: -31.5,16.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 16572 @@ -108707,8 +108260,6 @@ entities: rot: 3.141592653589793 rad pos: -26.5,14.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 26911 @@ -108717,8 +108268,6 @@ entities: rot: 3.141592653589793 rad pos: 13.5,-19.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#99FFFFFF' - proto: GasRecycler @@ -108728,8 +108277,6 @@ entities: - type: Transform pos: 45.5,31.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#66FF66FF' - proto: GasThermoMachineFreezer @@ -108741,8 +108288,6 @@ entities: parent: 6747 - type: AtmosPipeColor color: '#0335FCFF' - - type: AtmosDevice - joinedGrid: 6747 - uid: 8147 components: - type: Transform @@ -108750,22 +108295,16 @@ entities: parent: 6747 - type: AtmosPipeColor color: '#CC6600FF' - - type: AtmosDevice - joinedGrid: 6747 - uid: 11224 components: - type: Transform pos: 0.5,-83.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 11601 components: - type: Transform pos: -3.5,-86.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22329 components: - type: Transform @@ -108773,8 +108312,6 @@ entities: parent: 6747 - type: AtmosPipeColor color: '#99FFFFFF' - - type: AtmosDevice - joinedGrid: 6747 - proto: GasThermoMachineFreezerEnabled entities: - uid: 11825 @@ -108784,8 +108321,6 @@ entities: parent: 6747 - type: GasThermoMachine targetTemperature: 249.8167 - - type: AtmosDevice - joinedGrid: 6747 - proto: GasThermoMachineHeater entities: - uid: 7935 @@ -108796,8 +108331,6 @@ entities: parent: 6747 - type: AtmosPipeColor color: '#66FF66FF' - - type: AtmosDevice - joinedGrid: 6747 - uid: 8146 components: - type: Transform @@ -108805,22 +108338,16 @@ entities: parent: 6747 - type: AtmosPipeColor color: '#CC6600FF' - - type: AtmosDevice - joinedGrid: 6747 - uid: 11225 components: - type: Transform pos: 0.5,-85.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 11602 components: - type: Transform pos: -11.5,-86.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22502 components: - type: Transform @@ -108828,8 +108355,6 @@ entities: parent: 6747 - type: AtmosPipeColor color: '#0335FCFF' - - type: AtmosDevice - joinedGrid: 6747 - proto: GasValve entities: - uid: 7542 @@ -108839,8 +108364,6 @@ entities: parent: 6747 - type: GasValve open: False - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#CC6600FF' - uid: 7862 @@ -108848,8 +108371,6 @@ entities: - type: Transform pos: 34.5,31.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 7892 @@ -108858,8 +108379,6 @@ entities: rot: 3.141592653589793 rad pos: 41.5,32.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 7893 @@ -108870,8 +108389,6 @@ entities: parent: 6747 - type: GasValve open: False - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 8030 @@ -108879,8 +108396,6 @@ entities: - type: Transform pos: 51.5,37.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#CC6600FF' - uid: 8210 @@ -108891,8 +108406,6 @@ entities: parent: 6747 - type: GasValve open: False - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#CC6600FF' - uid: 11944 @@ -108902,8 +108415,6 @@ entities: parent: 6747 - type: GasValve open: False - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#CC6600FF' - uid: 14625 @@ -108913,8 +108424,6 @@ entities: parent: 6747 - type: GasValve open: False - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 14628 @@ -108924,8 +108433,6 @@ entities: parent: 6747 - type: GasValve open: False - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24983 @@ -108934,8 +108441,6 @@ entities: rot: -1.5707963267948966 rad pos: -0.5,-21.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#E5CCFFFF' - proto: GasVentPump @@ -108949,8 +108454,6 @@ entities: - type: DeviceNetwork deviceLists: - 7456 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 7254 @@ -108958,8 +108461,6 @@ entities: - type: Transform pos: 47.5,17.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 8433 @@ -108968,8 +108469,6 @@ entities: rot: -1.5707963267948966 rad pos: 42.5,29.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 11770 @@ -108978,15 +108477,11 @@ entities: rot: 3.141592653589793 rad pos: -8.5,-87.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 13062 components: - type: Transform pos: 53.5,17.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 13246 @@ -108995,8 +108490,6 @@ entities: rot: 1.5707963267948966 rad pos: 23.5,-2.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 13451 @@ -109005,8 +108498,6 @@ entities: rot: -1.5707963267948966 rad pos: 39.5,10.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 13452 @@ -109015,8 +108506,6 @@ entities: rot: 1.5707963267948966 rad pos: 19.5,10.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 13484 @@ -109025,8 +108514,6 @@ entities: rot: 1.5707963267948966 rad pos: 10.5,27.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 13486 @@ -109034,8 +108521,6 @@ entities: - type: Transform pos: -0.5,35.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 13487 @@ -109044,8 +108529,6 @@ entities: rot: 3.141592653589793 rad pos: -56.5,-42.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 13496 @@ -109053,8 +108536,6 @@ entities: - type: Transform pos: 32.5,1.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 13499 @@ -109063,8 +108544,6 @@ entities: rot: -1.5707963267948966 rad pos: 37.5,-0.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 13658 @@ -109072,8 +108551,6 @@ entities: - type: Transform pos: 36.5,-6.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 13659 @@ -109081,8 +108558,6 @@ entities: - type: Transform pos: 39.5,-9.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 13660 @@ -109090,8 +108565,6 @@ entities: - type: Transform pos: 41.5,-6.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 13661 @@ -109099,8 +108572,6 @@ entities: - type: Transform pos: 48.5,-6.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 13662 @@ -109109,8 +108580,6 @@ entities: rot: -1.5707963267948966 rad pos: 51.5,-10.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 13664 @@ -109119,8 +108588,6 @@ entities: rot: -1.5707963267948966 rad pos: 50.5,-21.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 13665 @@ -109129,8 +108596,6 @@ entities: rot: 3.141592653589793 rad pos: 46.5,-24.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 13666 @@ -109139,8 +108604,6 @@ entities: rot: 3.141592653589793 rad pos: 41.5,-24.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 13667 @@ -109149,8 +108612,6 @@ entities: rot: -1.5707963267948966 rad pos: 45.5,-17.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 13668 @@ -109159,8 +108620,6 @@ entities: rot: -1.5707963267948966 rad pos: 45.5,-13.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 13669 @@ -109169,8 +108628,6 @@ entities: rot: 3.141592653589793 rad pos: 36.5,-13.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 13670 @@ -109178,8 +108635,6 @@ entities: - type: Transform pos: 36.5,-17.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 13671 @@ -109188,8 +108643,6 @@ entities: rot: 3.141592653589793 rad pos: 38.5,-24.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 13672 @@ -109198,8 +108651,6 @@ entities: rot: 3.141592653589793 rad pos: 36.5,-24.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 13673 @@ -109208,8 +108659,6 @@ entities: rot: -1.5707963267948966 rad pos: 29.5,-14.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 13674 @@ -109217,8 +108666,6 @@ entities: - type: Transform pos: 28.5,-9.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 13676 @@ -109226,8 +108673,6 @@ entities: - type: Transform pos: 38.5,-20.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 13774 @@ -109236,8 +108681,6 @@ entities: rot: -1.5707963267948966 rad pos: 26.5,-9.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 13784 @@ -109246,8 +108689,6 @@ entities: rot: 3.141592653589793 rad pos: 32.5,-22.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 13951 @@ -109256,8 +108697,6 @@ entities: rot: 1.5707963267948966 rad pos: 5.5,-37.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 13952 @@ -109266,8 +108705,6 @@ entities: rot: -1.5707963267948966 rad pos: 17.5,-37.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 13953 @@ -109276,8 +108713,6 @@ entities: rot: 1.5707963267948966 rad pos: 14.5,-34.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 13954 @@ -109286,8 +108721,6 @@ entities: rot: 3.141592653589793 rad pos: 21.5,-33.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 13955 @@ -109296,8 +108729,6 @@ entities: rot: 1.5707963267948966 rad pos: 12.5,-26.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 13956 @@ -109305,8 +108736,6 @@ entities: - type: Transform pos: 17.5,-25.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 13957 @@ -109314,8 +108743,6 @@ entities: - type: Transform pos: 18.5,-13.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 13958 @@ -109323,8 +108750,6 @@ entities: - type: Transform pos: 25.5,-22.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 13959 @@ -109333,8 +108758,6 @@ entities: rot: 3.141592653589793 rad pos: 26.5,-27.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 13960 @@ -109343,8 +108766,6 @@ entities: rot: 3.141592653589793 rad pos: 26.5,-35.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 14115 @@ -109352,8 +108773,6 @@ entities: - type: Transform pos: 58.5,-1.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 14125 @@ -109362,8 +108781,6 @@ entities: rot: 3.141592653589793 rad pos: 58.5,-10.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 14130 @@ -109372,8 +108789,6 @@ entities: rot: -1.5707963267948966 rad pos: 58.5,-19.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 14230 @@ -109382,8 +108797,6 @@ entities: rot: 3.141592653589793 rad pos: 37.5,-29.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 14231 @@ -109392,8 +108805,6 @@ entities: rot: 3.141592653589793 rad pos: 46.5,-32.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 14232 @@ -109401,8 +108812,6 @@ entities: - type: Transform pos: 53.5,-24.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 14234 @@ -109411,8 +108820,6 @@ entities: rot: 3.141592653589793 rad pos: 53.5,-29.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 14235 @@ -109420,8 +108827,6 @@ entities: - type: Transform pos: 74.5,-20.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 14236 @@ -109433,8 +108838,6 @@ entities: - type: DeviceNetwork deviceLists: - 7456 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 14264 @@ -109443,8 +108846,6 @@ entities: rot: 1.5707963267948966 rad pos: 36.5,-39.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 14293 @@ -109453,8 +108854,6 @@ entities: rot: -1.5707963267948966 rad pos: 30.5,-36.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 14294 @@ -109463,8 +108862,6 @@ entities: rot: -1.5707963267948966 rad pos: 41.5,-32.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 14397 @@ -109472,8 +108869,6 @@ entities: - type: Transform pos: 67.5,-41.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 14439 @@ -109482,8 +108877,6 @@ entities: rot: 1.5707963267948966 rad pos: 58.5,-41.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 14717 @@ -109492,8 +108885,6 @@ entities: rot: 3.141592653589793 rad pos: 36.5,-51.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 14718 @@ -109501,8 +108892,6 @@ entities: - type: Transform pos: 36.5,-45.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 14719 @@ -109510,8 +108899,6 @@ entities: - type: Transform pos: 54.5,-45.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 14720 @@ -109520,8 +108907,6 @@ entities: rot: -1.5707963267948966 rad pos: 74.5,-47.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 14721 @@ -109529,8 +108914,6 @@ entities: - type: Transform pos: 72.5,-41.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 14726 @@ -109539,8 +108922,6 @@ entities: rot: 1.5707963267948966 rad pos: 28.5,-50.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 14727 @@ -109549,8 +108930,6 @@ entities: rot: 3.141592653589793 rad pos: 29.5,-61.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 14733 @@ -109558,8 +108937,6 @@ entities: - type: Transform pos: 25.5,-44.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 14735 @@ -109568,8 +108945,6 @@ entities: rot: 3.141592653589793 rad pos: 25.5,-56.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 14743 @@ -109578,8 +108953,6 @@ entities: rot: -1.5707963267948966 rad pos: 26.5,-49.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 14744 @@ -109587,8 +108960,6 @@ entities: - type: Transform pos: 19.5,-45.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 14759 @@ -109597,8 +108968,6 @@ entities: rot: 3.141592653589793 rad pos: -11.5,-48.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 14760 @@ -109606,8 +108975,6 @@ entities: - type: Transform pos: -9.5,-42.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 14763 @@ -109615,8 +108982,6 @@ entities: - type: Transform pos: -11.5,-45.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 14774 @@ -109624,8 +108989,6 @@ entities: - type: Transform pos: -5.5,-45.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 14806 @@ -109633,8 +108996,6 @@ entities: - type: Transform pos: 5.5,-45.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 14829 @@ -109643,8 +109004,6 @@ entities: rot: 3.141592653589793 rad pos: 1.5,-82.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 14830 @@ -109652,8 +109011,6 @@ entities: - type: Transform pos: 3.5,-75.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 14841 @@ -109662,8 +109019,6 @@ entities: rot: 1.5707963267948966 rad pos: -7.5,-83.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 14842 @@ -109672,8 +109027,6 @@ entities: rot: -1.5707963267948966 rad pos: -4.5,-81.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 14896 @@ -109682,8 +109035,6 @@ entities: rot: 1.5707963267948966 rad pos: 8.5,-62.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 14897 @@ -109691,8 +109042,6 @@ entities: - type: Transform pos: 6.5,-72.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 14899 @@ -109701,8 +109050,6 @@ entities: rot: 1.5707963267948966 rad pos: 8.5,-67.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 14902 @@ -109711,8 +109058,6 @@ entities: rot: 3.141592653589793 rad pos: 19.5,-66.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 14903 @@ -109721,8 +109066,6 @@ entities: rot: 1.5707963267948966 rad pos: 19.5,-58.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 14906 @@ -109731,8 +109074,6 @@ entities: rot: 1.5707963267948966 rad pos: 19.5,-51.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 14910 @@ -109741,8 +109082,6 @@ entities: rot: 3.141592653589793 rad pos: 20.5,-68.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 14920 @@ -109751,8 +109090,6 @@ entities: rot: 1.5707963267948966 rad pos: 14.5,-67.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 14926 @@ -109761,8 +109098,6 @@ entities: rot: 3.141592653589793 rad pos: 28.5,-66.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 15004 @@ -109771,8 +109106,6 @@ entities: rot: 1.5707963267948966 rad pos: 24.5,-87.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 15005 @@ -109781,8 +109114,6 @@ entities: rot: 1.5707963267948966 rad pos: 32.5,-81.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 15006 @@ -109790,8 +109121,6 @@ entities: - type: Transform pos: 27.5,-78.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 15007 @@ -109800,8 +109129,6 @@ entities: rot: 3.141592653589793 rad pos: 37.5,-83.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 15011 @@ -109810,8 +109137,6 @@ entities: rot: 3.141592653589793 rad pos: 18.5,-74.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 15131 @@ -109819,8 +109144,6 @@ entities: - type: Transform pos: 10.5,-55.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 15132 @@ -109829,8 +109152,6 @@ entities: rot: -1.5707963267948966 rad pos: 15.5,-56.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 15141 @@ -109839,8 +109160,6 @@ entities: rot: 3.141592653589793 rad pos: 10.5,-59.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 15144 @@ -109849,8 +109168,6 @@ entities: rot: 3.141592653589793 rad pos: 14.5,-58.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 15162 @@ -109859,8 +109176,6 @@ entities: rot: 1.5707963267948966 rad pos: 2.5,-56.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 15170 @@ -109869,8 +109184,6 @@ entities: rot: 1.5707963267948966 rad pos: -0.5,-58.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 15172 @@ -109879,8 +109192,6 @@ entities: rot: 3.141592653589793 rad pos: 3.5,-60.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 15208 @@ -109889,8 +109200,6 @@ entities: rot: -1.5707963267948966 rad pos: 9.5,-42.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 15211 @@ -109899,8 +109208,6 @@ entities: rot: 1.5707963267948966 rad pos: -0.5,-44.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 15230 @@ -109909,8 +109216,6 @@ entities: rot: -1.5707963267948966 rad pos: -5.5,-54.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 15267 @@ -109919,8 +109224,6 @@ entities: rot: -1.5707963267948966 rad pos: 1.5,-65.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 15391 @@ -109928,8 +109231,6 @@ entities: - type: Transform pos: -33.5,-47.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 15392 @@ -109937,8 +109238,6 @@ entities: - type: Transform pos: -31.5,-47.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 15393 @@ -109947,8 +109246,6 @@ entities: rot: -1.5707963267948966 rad pos: -23.5,-49.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 15394 @@ -109960,8 +109257,6 @@ entities: - type: DeviceNetwork deviceLists: - 22089 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 15395 @@ -109973,8 +109268,6 @@ entities: - type: DeviceNetwork deviceLists: - 22089 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 15396 @@ -109986,8 +109279,6 @@ entities: - type: DeviceNetwork deviceLists: - 22089 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 15403 @@ -109996,8 +109287,6 @@ entities: rot: 1.5707963267948966 rad pos: -32.5,-54.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 15411 @@ -110006,8 +109295,6 @@ entities: rot: -1.5707963267948966 rad pos: -27.5,-58.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 15412 @@ -110016,8 +109303,6 @@ entities: rot: 3.141592653589793 rad pos: -31.5,-59.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 15431 @@ -110029,8 +109314,6 @@ entities: - type: DeviceNetwork deviceLists: - 22239 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 15445 @@ -110039,8 +109322,6 @@ entities: rot: 3.141592653589793 rad pos: 61.5,-52.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 15555 @@ -110049,8 +109330,6 @@ entities: rot: 3.141592653589793 rad pos: -45.5,-37.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 15574 @@ -110058,8 +109337,6 @@ entities: - type: Transform pos: -44.5,-40.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 15989 @@ -110067,8 +109344,6 @@ entities: - type: Transform pos: 16.5,-1.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 15990 @@ -110077,8 +109352,6 @@ entities: rot: 3.141592653589793 rad pos: 10.5,-10.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 16067 @@ -110087,8 +109360,6 @@ entities: rot: -1.5707963267948966 rad pos: 2.5,-36.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 16623 @@ -110097,8 +109368,6 @@ entities: rot: 3.141592653589793 rad pos: -9.5,-65.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 16624 @@ -110107,8 +109376,6 @@ entities: rot: 3.141592653589793 rad pos: -7.5,-65.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 16625 @@ -110117,8 +109384,6 @@ entities: rot: -1.5707963267948966 rad pos: -6.5,-61.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 16626 @@ -110127,8 +109392,6 @@ entities: rot: -1.5707963267948966 rad pos: -5.5,-58.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 16723 @@ -110136,8 +109399,6 @@ entities: - type: Transform pos: 13.5,-21.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 16844 @@ -110146,8 +109407,6 @@ entities: rot: 1.5707963267948966 rad pos: 46.5,-41.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 16846 @@ -110156,8 +109415,6 @@ entities: rot: -1.5707963267948966 rad pos: 51.5,-43.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 17062 @@ -110166,8 +109423,6 @@ entities: rot: 3.141592653589793 rad pos: 54.5,-42.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 17395 @@ -110176,8 +109431,6 @@ entities: rot: 3.141592653589793 rad pos: 47.5,-51.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 21428 @@ -110188,8 +109441,6 @@ entities: - type: DeviceNetwork deviceLists: - 22239 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 22062 @@ -110197,8 +109448,6 @@ entities: - type: Transform pos: 12.5,34.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 22268 @@ -110207,8 +109456,6 @@ entities: rot: -1.5707963267948966 rad pos: 6.5,-13.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 22284 @@ -110217,8 +109464,6 @@ entities: rot: 1.5707963267948966 rad pos: 15.5,5.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 22310 @@ -110226,8 +109471,6 @@ entities: - type: Transform pos: 22.5,-13.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 22311 @@ -110236,8 +109479,6 @@ entities: rot: 1.5707963267948966 rad pos: 21.5,-16.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 22312 @@ -110246,8 +109487,6 @@ entities: rot: 3.141592653589793 rad pos: 22.5,-19.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 22324 @@ -110255,8 +109494,6 @@ entities: - type: Transform pos: 18.5,-7.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 22326 @@ -110265,8 +109502,6 @@ entities: rot: -1.5707963267948966 rad pos: 33.5,-14.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 23663 @@ -110275,8 +109510,6 @@ entities: rot: 1.5707963267948966 rad pos: -2.5,-21.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#E5CCFFFF' - uid: 23664 @@ -110284,8 +109517,6 @@ entities: - type: Transform pos: -19.5,-46.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 23671 @@ -110294,8 +109525,6 @@ entities: rot: 3.141592653589793 rad pos: 4.5,-5.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 23683 @@ -110304,8 +109533,6 @@ entities: rot: 1.5707963267948966 rad pos: -2.5,-0.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 23684 @@ -110314,8 +109541,6 @@ entities: rot: 3.141592653589793 rad pos: -0.5,-5.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 23752 @@ -110323,8 +109548,6 @@ entities: - type: Transform pos: -12.5,-10.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 24049 @@ -110333,8 +109556,6 @@ entities: rot: 3.141592653589793 rad pos: 34.5,-94.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 24050 @@ -110342,8 +109563,6 @@ entities: - type: Transform pos: 27.5,-91.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 24051 @@ -110352,8 +109571,6 @@ entities: rot: 3.141592653589793 rad pos: 27.5,-94.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 24087 @@ -110362,8 +109579,6 @@ entities: rot: 1.5707963267948966 rad pos: -25.5,-11.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 24088 @@ -110371,8 +109586,6 @@ entities: - type: Transform pos: -20.5,-10.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 24089 @@ -110380,8 +109593,6 @@ entities: - type: Transform pos: -18.5,-10.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 24119 @@ -110390,8 +109601,6 @@ entities: rot: 3.141592653589793 rad pos: -5.5,-6.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 24120 @@ -110399,8 +109608,6 @@ entities: - type: Transform pos: -5.5,-1.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 24133 @@ -110409,8 +109616,6 @@ entities: rot: -1.5707963267948966 rad pos: -5.5,2.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 24175 @@ -110419,8 +109624,6 @@ entities: rot: 3.141592653589793 rad pos: -17.5,-2.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 24178 @@ -110429,8 +109632,6 @@ entities: rot: -1.5707963267948966 rad pos: -6.5,-6.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 24179 @@ -110439,8 +109640,6 @@ entities: rot: 1.5707963267948966 rad pos: -13.5,-6.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 24200 @@ -110449,8 +109648,6 @@ entities: rot: 1.5707963267948966 rad pos: -23.5,-6.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 24201 @@ -110459,8 +109656,6 @@ entities: rot: 3.141592653589793 rad pos: -20.5,-6.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 24259 @@ -110468,8 +109663,6 @@ entities: - type: Transform pos: -38.5,7.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 24268 @@ -110477,8 +109670,6 @@ entities: - type: Transform pos: -33.5,3.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 24269 @@ -110487,8 +109678,6 @@ entities: rot: 1.5707963267948966 rad pos: -33.5,6.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 24270 @@ -110497,8 +109686,6 @@ entities: rot: 1.5707963267948966 rad pos: -33.5,9.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 24323 @@ -110507,8 +109694,6 @@ entities: rot: -1.5707963267948966 rad pos: -29.5,-12.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 24324 @@ -110517,8 +109702,6 @@ entities: rot: -1.5707963267948966 rad pos: -29.5,-8.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 24325 @@ -110527,8 +109710,6 @@ entities: rot: -1.5707963267948966 rad pos: -29.5,-5.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 24384 @@ -110536,8 +109717,6 @@ entities: - type: Transform pos: -37.5,0.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 24407 @@ -110546,8 +109725,6 @@ entities: rot: 3.141592653589793 rad pos: -43.5,-0.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 24408 @@ -110556,8 +109733,6 @@ entities: rot: 3.141592653589793 rad pos: -41.5,0.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 24409 @@ -110566,8 +109741,6 @@ entities: rot: 3.141592653589793 rad pos: -45.5,-0.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 24410 @@ -110576,8 +109749,6 @@ entities: rot: 3.141592653589793 rad pos: -47.5,-0.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 24432 @@ -110586,8 +109757,6 @@ entities: rot: -1.5707963267948966 rad pos: -42.5,9.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 24433 @@ -110595,8 +109764,6 @@ entities: - type: Transform pos: -46.5,8.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 24435 @@ -110605,8 +109772,6 @@ entities: rot: -1.5707963267948966 rad pos: -46.5,4.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 24457 @@ -110615,8 +109780,6 @@ entities: rot: -1.5707963267948966 rad pos: -41.5,-9.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 24459 @@ -110624,8 +109787,6 @@ entities: - type: Transform pos: -42.5,-4.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 24461 @@ -110634,8 +109795,6 @@ entities: rot: 3.141592653589793 rad pos: -41.5,-5.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 24643 @@ -110644,8 +109803,6 @@ entities: rot: 1.5707963267948966 rad pos: -67.5,-3.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 24705 @@ -110653,8 +109810,6 @@ entities: - type: Transform pos: -63.5,12.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 24706 @@ -110663,8 +109818,6 @@ entities: rot: 1.5707963267948966 rad pos: -64.5,7.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 24707 @@ -110672,8 +109825,6 @@ entities: - type: Transform pos: -60.5,6.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 24708 @@ -110681,8 +109832,6 @@ entities: - type: Transform pos: -66.5,7.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 24709 @@ -110690,8 +109839,6 @@ entities: - type: Transform pos: -71.5,5.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 24710 @@ -110700,8 +109847,6 @@ entities: rot: 3.141592653589793 rad pos: -68.5,0.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 24711 @@ -110710,8 +109855,6 @@ entities: rot: 3.141592653589793 rad pos: -63.5,-6.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 24844 @@ -110720,8 +109863,6 @@ entities: rot: -1.5707963267948966 rad pos: -42.5,-24.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 24847 @@ -110730,8 +109871,6 @@ entities: rot: -1.5707963267948966 rad pos: -34.5,-30.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 24848 @@ -110740,8 +109879,6 @@ entities: rot: -1.5707963267948966 rad pos: -34.5,-27.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 24849 @@ -110749,8 +109886,6 @@ entities: - type: Transform pos: -37.5,-26.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 24850 @@ -110758,8 +109893,6 @@ entities: - type: Transform pos: -39.5,-22.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 24879 @@ -110768,8 +109901,6 @@ entities: rot: 3.141592653589793 rad pos: -37.5,-36.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 24887 @@ -110778,8 +109909,6 @@ entities: rot: -1.5707963267948966 rad pos: -25.5,-35.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 24888 @@ -110788,8 +109917,6 @@ entities: rot: 3.141592653589793 rad pos: -26.5,-39.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 24889 @@ -110798,8 +109925,6 @@ entities: rot: 3.141592653589793 rad pos: -32.5,-39.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 24924 @@ -110808,8 +109933,6 @@ entities: rot: 1.5707963267948966 rad pos: -14.5,-36.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 24940 @@ -110818,8 +109941,6 @@ entities: rot: 1.5707963267948966 rad pos: -0.5,-31.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 25038 @@ -110828,8 +109949,6 @@ entities: rot: -1.5707963267948966 rad pos: -4.5,-30.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 25039 @@ -110838,8 +109957,6 @@ entities: rot: 1.5707963267948966 rad pos: -21.5,-28.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 25065 @@ -110848,8 +109965,6 @@ entities: rot: 3.141592653589793 rad pos: -19.5,-35.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 25074 @@ -110858,8 +109973,6 @@ entities: rot: -1.5707963267948966 rad pos: 3.5,-25.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 25096 @@ -110868,8 +109981,6 @@ entities: rot: 1.5707963267948966 rad pos: -12.5,-23.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 25114 @@ -110878,8 +109989,6 @@ entities: rot: 1.5707963267948966 rad pos: -29.5,-17.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 25115 @@ -110888,8 +109997,6 @@ entities: rot: 1.5707963267948966 rad pos: -29.5,-22.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 25116 @@ -110897,8 +110004,6 @@ entities: - type: Transform pos: -24.5,-18.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 25117 @@ -110907,8 +110012,6 @@ entities: rot: 3.141592653589793 rad pos: -24.5,-29.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 25131 @@ -110917,8 +110020,6 @@ entities: rot: 3.141592653589793 rad pos: -27.5,-23.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 25136 @@ -110926,8 +110027,6 @@ entities: - type: Transform pos: -6.5,-22.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 25178 @@ -110936,8 +110035,6 @@ entities: rot: -1.5707963267948966 rad pos: -3.5,-17.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 25179 @@ -110945,8 +110042,6 @@ entities: - type: Transform pos: -11.5,-14.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 25185 @@ -110954,8 +110049,6 @@ entities: - type: Transform pos: -19.5,-19.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 25289 @@ -110964,8 +110057,6 @@ entities: rot: 3.141592653589793 rad pos: -35.5,-5.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 25441 @@ -110974,8 +110065,6 @@ entities: rot: -1.5707963267948966 rad pos: -53.5,-11.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 25442 @@ -110984,8 +110073,6 @@ entities: rot: -1.5707963267948966 rad pos: -53.5,-7.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 25595 @@ -110993,8 +110080,6 @@ entities: - type: Transform pos: 3.5,-70.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 25606 @@ -111003,8 +110088,6 @@ entities: rot: 3.141592653589793 rad pos: 47.5,8.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 26028 @@ -111013,8 +110096,6 @@ entities: rot: -1.5707963267948966 rad pos: 59.5,18.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 26030 @@ -111023,8 +110104,6 @@ entities: rot: -1.5707963267948966 rad pos: 58.5,26.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 26031 @@ -111033,8 +110112,6 @@ entities: rot: 1.5707963267948966 rad pos: 54.5,26.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 26056 @@ -111043,8 +110120,6 @@ entities: rot: 3.141592653589793 rad pos: 61.5,11.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 26058 @@ -111053,8 +110128,6 @@ entities: rot: 3.141592653589793 rad pos: 66.5,11.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 26064 @@ -111063,8 +110136,6 @@ entities: rot: 3.141592653589793 rad pos: 71.5,6.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 26069 @@ -111073,8 +110144,6 @@ entities: rot: 1.5707963267948966 rad pos: 68.5,9.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 26070 @@ -111083,8 +110152,6 @@ entities: rot: 3.141592653589793 rad pos: 50.5,8.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 26072 @@ -111093,8 +110160,6 @@ entities: rot: 3.141592653589793 rad pos: 55.5,8.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 26074 @@ -111103,8 +110168,6 @@ entities: rot: 3.141592653589793 rad pos: 60.5,8.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 26169 @@ -111113,8 +110176,6 @@ entities: rot: -1.5707963267948966 rad pos: 35.5,25.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 26170 @@ -111123,8 +110184,6 @@ entities: rot: 1.5707963267948966 rad pos: 28.5,32.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 26172 @@ -111133,8 +110192,6 @@ entities: rot: 1.5707963267948966 rad pos: 28.5,24.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 26276 @@ -111143,8 +110200,6 @@ entities: rot: 1.5707963267948966 rad pos: 33.5,14.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 26317 @@ -111153,8 +110208,6 @@ entities: rot: 3.141592653589793 rad pos: 26.5,19.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 26337 @@ -111163,8 +110216,6 @@ entities: rot: -1.5707963267948966 rad pos: 17.5,25.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 26345 @@ -111172,8 +110223,6 @@ entities: - type: Transform pos: 18.5,22.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 26346 @@ -111182,8 +110231,6 @@ entities: rot: 1.5707963267948966 rad pos: 11.5,21.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 26367 @@ -111191,8 +110238,6 @@ entities: - type: Transform pos: 23.5,27.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 26828 @@ -111201,8 +110246,6 @@ entities: rot: 1.5707963267948966 rad pos: -25.5,7.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 26829 @@ -111211,8 +110254,6 @@ entities: rot: 1.5707963267948966 rad pos: -25.5,4.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 26830 @@ -111221,8 +110262,6 @@ entities: rot: 1.5707963267948966 rad pos: -25.5,1.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 26831 @@ -111231,8 +110270,6 @@ entities: rot: -1.5707963267948966 rad pos: -17.5,6.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 26997 @@ -111240,8 +110277,6 @@ entities: - type: Transform pos: 16.5,14.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 27011 @@ -111250,8 +110285,6 @@ entities: rot: 1.5707963267948966 rad pos: 4.5,29.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 27020 @@ -111260,8 +110293,6 @@ entities: rot: 3.141592653589793 rad pos: 3.5,24.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 27021 @@ -111270,8 +110301,6 @@ entities: rot: 3.141592653589793 rad pos: 6.5,24.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 27297 @@ -111283,8 +110312,6 @@ entities: - type: DeviceNetwork deviceLists: - 7456 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - uid: 27395 @@ -111296,8 +110323,6 @@ entities: - type: DeviceNetwork deviceLists: - 7456 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#0335FCFF' - proto: GasVentScrubber @@ -111311,8 +110336,6 @@ entities: - type: DeviceNetwork deviceLists: - 7456 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 3755 @@ -111324,8 +110347,6 @@ entities: - type: DeviceNetwork deviceLists: - 7456 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 7909 @@ -111333,8 +110354,6 @@ entities: - type: Transform pos: 36.5,32.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 11508 @@ -111343,8 +110362,6 @@ entities: rot: 3.141592653589793 rad pos: 36.5,-29.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 13077 @@ -111352,8 +110369,6 @@ entities: - type: Transform pos: 51.5,25.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 13162 @@ -111362,8 +110377,6 @@ entities: rot: -1.5707963267948966 rad pos: 39.5,9.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 13163 @@ -111371,8 +110384,6 @@ entities: - type: Transform pos: 30.5,33.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 13174 @@ -111381,8 +110392,6 @@ entities: rot: -1.5707963267948966 rad pos: 35.5,26.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 13208 @@ -111390,8 +110399,6 @@ entities: - type: Transform pos: 30.5,1.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 13217 @@ -111400,8 +110407,6 @@ entities: rot: 1.5707963267948966 rad pos: 15.5,18.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 13231 @@ -111409,8 +110414,6 @@ entities: - type: Transform pos: 52.5,17.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 13332 @@ -111418,8 +110421,6 @@ entities: - type: Transform pos: -1.5,35.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 13333 @@ -111428,8 +110429,6 @@ entities: rot: -1.5707963267948966 rad pos: 13.5,32.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 13334 @@ -111438,8 +110437,6 @@ entities: rot: 3.141592653589793 rad pos: 11.5,25.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 13335 @@ -111448,8 +110445,6 @@ entities: rot: 1.5707963267948966 rad pos: 19.5,9.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 13376 @@ -111458,8 +110453,6 @@ entities: rot: 1.5707963267948966 rad pos: 23.5,-1.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 13500 @@ -111468,8 +110461,6 @@ entities: rot: -1.5707963267948966 rad pos: 37.5,1.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 13561 @@ -111478,8 +110469,6 @@ entities: rot: 3.141592653589793 rad pos: 38.5,-10.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 13576 @@ -111488,8 +110477,6 @@ entities: rot: -1.5707963267948966 rad pos: 51.5,-9.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 13577 @@ -111497,8 +110484,6 @@ entities: - type: Transform pos: 47.5,-6.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 13578 @@ -111506,8 +110491,6 @@ entities: - type: Transform pos: 42.5,-6.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 13579 @@ -111515,8 +110498,6 @@ entities: - type: Transform pos: 37.5,-6.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 13580 @@ -111525,8 +110506,6 @@ entities: rot: -1.5707963267948966 rad pos: 26.5,-8.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 13586 @@ -111535,8 +110514,6 @@ entities: rot: -1.5707963267948966 rad pos: 45.5,-16.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 13587 @@ -111545,8 +110522,6 @@ entities: rot: -1.5707963267948966 rad pos: 45.5,-12.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 13588 @@ -111555,8 +110530,6 @@ entities: rot: -1.5707963267948966 rad pos: 50.5,-20.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 13589 @@ -111565,8 +110538,6 @@ entities: rot: 3.141592653589793 rad pos: 37.5,-21.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 13595 @@ -111575,8 +110546,6 @@ entities: rot: 1.5707963267948966 rad pos: 29.5,-13.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 13596 @@ -111584,8 +110553,6 @@ entities: - type: Transform pos: 30.5,-9.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 13635 @@ -111594,8 +110561,6 @@ entities: rot: 3.141592653589793 rad pos: 47.5,-24.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 13636 @@ -111604,8 +110569,6 @@ entities: rot: 3.141592653589793 rad pos: 42.5,-24.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 13637 @@ -111614,8 +110577,6 @@ entities: rot: 3.141592653589793 rad pos: 39.5,-24.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 13638 @@ -111624,8 +110585,6 @@ entities: rot: 3.141592653589793 rad pos: 35.5,-24.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 13639 @@ -111633,8 +110592,6 @@ entities: - type: Transform pos: 37.5,-17.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 13675 @@ -111643,8 +110600,6 @@ entities: rot: 3.141592653589793 rad pos: 37.5,-13.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 13783 @@ -111653,8 +110608,6 @@ entities: rot: 3.141592653589793 rad pos: 33.5,-22.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 13866 @@ -111663,8 +110616,6 @@ entities: rot: 1.5707963267948966 rad pos: 5.5,-38.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 13867 @@ -111673,8 +110624,6 @@ entities: rot: -1.5707963267948966 rad pos: 17.5,-38.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 13868 @@ -111683,8 +110632,6 @@ entities: rot: 1.5707963267948966 rad pos: 14.5,-30.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 13870 @@ -111692,8 +110639,6 @@ entities: - type: Transform pos: 17.5,-22.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 13871 @@ -111701,8 +110646,6 @@ entities: - type: Transform pos: 19.5,-13.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 13872 @@ -111710,8 +110653,6 @@ entities: - type: Transform pos: 24.5,-22.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 13873 @@ -111720,8 +110661,6 @@ entities: rot: -1.5707963267948966 rad pos: 25.5,-30.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 13874 @@ -111730,8 +110669,6 @@ entities: rot: 3.141592653589793 rad pos: 22.5,-33.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 13875 @@ -111740,8 +110677,6 @@ entities: rot: 3.141592653589793 rad pos: 24.5,-35.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 14021 @@ -111753,8 +110688,6 @@ entities: - type: DeviceNetwork deviceLists: - 7456 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 14022 @@ -111762,8 +110695,6 @@ entities: - type: Transform pos: 75.5,-20.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 14031 @@ -111772,8 +110703,6 @@ entities: rot: 3.141592653589793 rad pos: 54.5,-29.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 14032 @@ -111781,8 +110710,6 @@ entities: - type: Transform pos: 54.5,-24.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 14041 @@ -111791,8 +110718,6 @@ entities: rot: 3.141592653589793 rad pos: 47.5,-32.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 14074 @@ -111801,8 +110726,6 @@ entities: rot: -1.5707963267948966 rad pos: 58.5,3.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 14088 @@ -111811,8 +110734,6 @@ entities: rot: 3.141592653589793 rad pos: 57.5,-10.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 14131 @@ -111821,8 +110742,6 @@ entities: rot: -1.5707963267948966 rad pos: 58.5,-20.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 14277 @@ -111831,8 +110750,6 @@ entities: rot: -1.5707963267948966 rad pos: 30.5,-37.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 14278 @@ -111841,8 +110758,6 @@ entities: rot: -1.5707963267948966 rad pos: 41.5,-33.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 14279 @@ -111851,8 +110766,6 @@ entities: rot: 3.141592653589793 rad pos: 40.5,-39.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 14316 @@ -111861,8 +110774,6 @@ entities: rot: -1.5707963267948966 rad pos: 74.5,-46.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 14324 @@ -111870,16 +110781,12 @@ entities: - type: Transform pos: 65.5,-41.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 14364 components: - type: Transform rot: -1.5707963267948966 rad pos: 32.5,-50.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 14365 @@ -111888,8 +110795,6 @@ entities: rot: 3.141592653589793 rad pos: 30.5,-61.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 14393 @@ -111897,8 +110802,6 @@ entities: - type: Transform pos: 35.5,-45.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 14394 @@ -111907,8 +110810,6 @@ entities: rot: 3.141592653589793 rad pos: 40.5,-51.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 14395 @@ -111916,8 +110817,6 @@ entities: - type: Transform pos: 53.5,-45.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 14396 @@ -111925,8 +110824,6 @@ entities: - type: Transform pos: 58.5,-40.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 14398 @@ -111934,8 +110831,6 @@ entities: - type: Transform pos: 69.5,-41.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 14473 @@ -111943,8 +110838,6 @@ entities: - type: Transform pos: -12.5,-45.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 14474 @@ -111953,8 +110846,6 @@ entities: rot: 3.141592653589793 rad pos: -12.5,-49.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 14515 @@ -111963,8 +110854,6 @@ entities: rot: 3.141592653589793 rad pos: 25.5,-43.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 14524 @@ -111973,8 +110862,6 @@ entities: rot: 3.141592653589793 rad pos: 24.5,-54.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 14525 @@ -111983,8 +110870,6 @@ entities: rot: -1.5707963267948966 rad pos: 26.5,-50.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 14526 @@ -111992,8 +110877,6 @@ entities: - type: Transform pos: 21.5,-45.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 14559 @@ -112001,8 +110884,6 @@ entities: - type: Transform pos: -9.5,-83.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 14626 @@ -112011,24 +110892,18 @@ entities: rot: 3.141592653589793 rad pos: -9.5,-86.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 14627 components: - type: Transform rot: 3.141592653589793 rad pos: -5.5,-86.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 14629 components: - type: Transform rot: 3.141592653589793 rad pos: -1.5,-78.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 14630 @@ -112037,8 +110912,6 @@ entities: rot: 3.141592653589793 rad pos: 2.5,-82.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 14631 @@ -112047,8 +110920,6 @@ entities: rot: 3.141592653589793 rad pos: 4.5,-80.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 14633 @@ -112057,8 +110928,6 @@ entities: rot: 3.141592653589793 rad pos: 7.5,-73.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 14634 @@ -112066,8 +110935,6 @@ entities: - type: Transform pos: 10.5,-62.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 14635 @@ -112076,8 +110943,6 @@ entities: rot: 3.141592653589793 rad pos: 21.5,-66.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 14643 @@ -112086,8 +110951,6 @@ entities: rot: 3.141592653589793 rad pos: 24.5,-67.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 14647 @@ -112096,8 +110959,6 @@ entities: rot: 3.141592653589793 rad pos: 17.5,-74.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 14680 @@ -112106,8 +110967,6 @@ entities: rot: -1.5707963267948966 rad pos: 37.5,-88.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 14711 @@ -112116,8 +110975,6 @@ entities: rot: -1.5707963267948966 rad pos: 27.5,-77.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 14712 @@ -112126,8 +110983,6 @@ entities: rot: 1.5707963267948966 rad pos: 24.5,-85.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 14713 @@ -112136,8 +110991,6 @@ entities: rot: -1.5707963267948966 rad pos: 29.5,-84.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 14761 @@ -112145,8 +110998,6 @@ entities: - type: Transform pos: -10.5,-42.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 14775 @@ -112154,8 +111005,6 @@ entities: - type: Transform pos: -4.5,-45.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 14805 @@ -112163,8 +111012,6 @@ entities: - type: Transform pos: 4.5,-45.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 14898 @@ -112173,8 +111020,6 @@ entities: rot: 1.5707963267948966 rad pos: 8.5,-68.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 14904 @@ -112183,8 +111028,6 @@ entities: rot: 1.5707963267948966 rad pos: 19.5,-57.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 14905 @@ -112193,8 +111036,6 @@ entities: rot: 1.5707963267948966 rad pos: 19.5,-50.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 14908 @@ -112203,8 +111044,6 @@ entities: rot: -1.5707963267948966 rad pos: 20.5,-69.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 14915 @@ -112213,8 +111052,6 @@ entities: rot: 1.5707963267948966 rad pos: -4.5,-72.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 14917 @@ -112223,8 +111060,6 @@ entities: rot: -1.5707963267948966 rad pos: 17.5,-67.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 15133 @@ -112233,8 +111068,6 @@ entities: rot: -1.5707963267948966 rad pos: 15.5,-55.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 15134 @@ -112243,8 +111076,6 @@ entities: rot: 3.141592653589793 rad pos: 9.5,-56.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 15142 @@ -112253,8 +111084,6 @@ entities: rot: 3.141592653589793 rad pos: 8.5,-59.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 15143 @@ -112263,8 +111092,6 @@ entities: rot: 3.141592653589793 rad pos: 13.5,-58.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 15161 @@ -112273,8 +111100,6 @@ entities: rot: -1.5707963267948966 rad pos: 5.5,-56.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 15163 @@ -112283,8 +111108,6 @@ entities: rot: 1.5707963267948966 rad pos: -0.5,-57.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 15168 @@ -112293,8 +111116,6 @@ entities: rot: 3.141592653589793 rad pos: 4.5,-60.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 15207 @@ -112303,8 +111124,6 @@ entities: rot: -1.5707963267948966 rad pos: 9.5,-41.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 15210 @@ -112313,8 +111132,6 @@ entities: rot: 1.5707963267948966 rad pos: -0.5,-43.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 15266 @@ -112322,8 +111139,6 @@ entities: - type: Transform pos: 3.5,-65.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 15279 @@ -112331,8 +111146,6 @@ entities: - type: Transform pos: -6.5,-49.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 15304 @@ -112344,8 +111157,6 @@ entities: - type: DeviceNetwork deviceLists: - 22089 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 15313 @@ -112353,8 +111164,6 @@ entities: - type: Transform pos: -27.5,-46.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 15317 @@ -112363,8 +111172,6 @@ entities: rot: 1.5707963267948966 rad pos: -33.5,-46.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 15320 @@ -112372,8 +111179,6 @@ entities: - type: Transform pos: -29.5,-45.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 15330 @@ -112382,8 +111187,6 @@ entities: rot: 1.5707963267948966 rad pos: -32.5,-51.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 15338 @@ -112392,8 +111195,6 @@ entities: rot: 3.141592653589793 rad pos: -29.5,-58.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 15339 @@ -112402,8 +111203,6 @@ entities: rot: -1.5707963267948966 rad pos: -27.5,-57.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 15340 @@ -112414,8 +111213,6 @@ entities: - type: DeviceNetwork deviceLists: - 22089 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 15341 @@ -112426,8 +111223,6 @@ entities: - type: DeviceNetwork deviceLists: - 22089 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 15358 @@ -112439,8 +111234,6 @@ entities: - type: DeviceNetwork deviceLists: - 22239 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 15359 @@ -112452,8 +111245,6 @@ entities: - type: DeviceNetwork deviceLists: - 22239 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 15716 @@ -112461,8 +111252,6 @@ entities: - type: Transform pos: 19.5,-1.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 15810 @@ -112471,8 +111260,6 @@ entities: rot: 3.141592653589793 rad pos: 9.5,-10.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 16024 @@ -112481,8 +111268,6 @@ entities: rot: -1.5707963267948966 rad pos: 2.5,-37.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 16144 @@ -112491,8 +111276,6 @@ entities: rot: 3.141592653589793 rad pos: 62.5,-52.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 16468 @@ -112501,8 +111284,6 @@ entities: rot: 3.141592653589793 rad pos: -20.5,-46.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 16535 @@ -112510,8 +111291,6 @@ entities: - type: Transform pos: -56.5,-39.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 16536 @@ -112520,8 +111299,6 @@ entities: rot: -1.5707963267948966 rad pos: -45.5,-39.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 16537 @@ -112530,8 +111307,6 @@ entities: rot: 1.5707963267948966 rad pos: -47.5,-37.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 16654 @@ -112539,8 +111314,6 @@ entities: - type: Transform pos: -8.5,-56.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 16655 @@ -112549,8 +111322,6 @@ entities: rot: 1.5707963267948966 rad pos: -11.5,-62.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 16656 @@ -112559,8 +111330,6 @@ entities: rot: 3.141592653589793 rad pos: -10.5,-65.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 16657 @@ -112569,8 +111338,6 @@ entities: rot: 3.141592653589793 rad pos: -6.5,-65.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 16897 @@ -112579,8 +111346,6 @@ entities: rot: 3.141592653589793 rad pos: 53.5,-43.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 17074 @@ -112589,8 +111354,6 @@ entities: rot: 1.5707963267948966 rad pos: 46.5,-42.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 17075 @@ -112599,8 +111362,6 @@ entities: rot: -1.5707963267948966 rad pos: 49.5,-43.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 17363 @@ -112609,16 +111370,12 @@ entities: rot: 3.141592653589793 rad pos: 48.5,-52.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 22267 components: - type: Transform rot: -1.5707963267948966 rad pos: 6.5,-14.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 22283 @@ -112627,8 +111384,6 @@ entities: rot: 1.5707963267948966 rad pos: 15.5,6.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 22298 @@ -112637,8 +111392,6 @@ entities: rot: -1.5707963267948966 rad pos: 22.5,-15.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 22299 @@ -112646,8 +111399,6 @@ entities: - type: Transform pos: 21.5,-13.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 22300 @@ -112656,8 +111407,6 @@ entities: rot: 3.141592653589793 rad pos: 21.5,-18.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 22323 @@ -112665,8 +111414,6 @@ entities: - type: Transform pos: 17.5,-7.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 22325 @@ -112675,8 +111422,6 @@ entities: rot: 1.5707963267948966 rad pos: 32.5,-15.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 22440 @@ -112684,8 +111429,6 @@ entities: - type: Transform pos: 10.5,-21.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 22571 @@ -112694,8 +111437,6 @@ entities: rot: 1.5707963267948966 rad pos: 6.5,29.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 22745 @@ -112704,8 +111445,6 @@ entities: rot: 3.141592653589793 rad pos: 48.5,8.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 23659 @@ -112714,8 +111453,6 @@ entities: rot: 3.141592653589793 rad pos: 3.5,-5.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 23685 @@ -112724,8 +111461,6 @@ entities: rot: 3.141592653589793 rad pos: -1.5,-5.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 23686 @@ -112734,8 +111469,6 @@ entities: rot: 1.5707963267948966 rad pos: -2.5,-1.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 23751 @@ -112744,8 +111477,6 @@ entities: rot: 3.141592653589793 rad pos: -12.5,-9.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24029 @@ -112754,8 +111485,6 @@ entities: rot: 3.141592653589793 rad pos: 35.5,-94.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24030 @@ -112764,8 +111493,6 @@ entities: rot: 3.141592653589793 rad pos: 26.5,-95.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24031 @@ -112773,8 +111500,6 @@ entities: - type: Transform pos: 26.5,-90.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24083 @@ -112783,8 +111508,6 @@ entities: rot: 3.141592653589793 rad pos: -18.5,-9.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24085 @@ -112793,8 +111516,6 @@ entities: rot: 3.141592653589793 rad pos: -20.5,-9.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24086 @@ -112803,8 +111524,6 @@ entities: rot: 1.5707963267948966 rad pos: -25.5,-10.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24134 @@ -112813,8 +111532,6 @@ entities: rot: 1.5707963267948966 rad pos: -5.5,-2.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24135 @@ -112823,8 +111540,6 @@ entities: rot: 3.141592653589793 rad pos: -4.5,-6.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24138 @@ -112833,8 +111548,6 @@ entities: rot: 1.5707963267948966 rad pos: -6.5,-5.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24144 @@ -112842,8 +111555,6 @@ entities: - type: Transform pos: -4.5,2.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24174 @@ -112852,8 +111563,6 @@ entities: rot: 3.141592653589793 rad pos: -16.5,-2.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24185 @@ -112862,8 +111571,6 @@ entities: rot: 1.5707963267948966 rad pos: -12.5,-3.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24196 @@ -112872,8 +111579,6 @@ entities: rot: 3.141592653589793 rad pos: -19.5,-5.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24199 @@ -112882,8 +111587,6 @@ entities: rot: 3.141592653589793 rad pos: -23.5,-5.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24287 @@ -112892,8 +111595,6 @@ entities: rot: -1.5707963267948966 rad pos: -39.5,-9.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24288 @@ -112902,8 +111603,6 @@ entities: rot: 1.5707963267948966 rad pos: -41.5,-6.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24289 @@ -112911,8 +111610,6 @@ entities: - type: Transform pos: -40.5,-4.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24295 @@ -112921,8 +111618,6 @@ entities: rot: 1.5707963267948966 rad pos: -32.5,-12.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24296 @@ -112931,8 +111626,6 @@ entities: rot: 1.5707963267948966 rad pos: -32.5,-8.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24297 @@ -112940,8 +111633,6 @@ entities: - type: Transform pos: -31.5,-5.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24348 @@ -112950,8 +111641,6 @@ entities: rot: -1.5707963267948966 rad pos: -30.5,9.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24349 @@ -112960,8 +111649,6 @@ entities: rot: -1.5707963267948966 rad pos: -30.5,6.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24350 @@ -112970,8 +111657,6 @@ entities: rot: -1.5707963267948966 rad pos: -29.5,1.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24351 @@ -112979,8 +111664,6 @@ entities: - type: Transform pos: -36.5,7.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24383 @@ -112988,8 +111671,6 @@ entities: - type: Transform pos: -36.5,-0.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24399 @@ -112997,8 +111678,6 @@ entities: - type: Transform pos: -48.5,-0.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24400 @@ -113006,8 +111685,6 @@ entities: - type: Transform pos: -46.5,-0.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24401 @@ -113015,8 +111692,6 @@ entities: - type: Transform pos: -44.5,-0.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24402 @@ -113024,8 +111699,6 @@ entities: - type: Transform pos: -41.5,-0.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24417 @@ -113034,8 +111707,6 @@ entities: rot: -1.5707963267948966 rad pos: -42.5,7.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24418 @@ -113043,8 +111714,6 @@ entities: - type: Transform pos: -44.5,8.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24420 @@ -113053,8 +111722,6 @@ entities: rot: 1.5707963267948966 rad pos: -45.5,5.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24450 @@ -113062,8 +111729,6 @@ entities: - type: Transform pos: -36.5,-5.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24478 @@ -113072,8 +111737,6 @@ entities: rot: -1.5707963267948966 rad pos: -13.5,-39.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24697 @@ -113082,8 +111745,6 @@ entities: rot: 3.141592653589793 rad pos: -71.5,0.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24698 @@ -113092,8 +111753,6 @@ entities: rot: 3.141592653589793 rad pos: -67.5,0.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24699 @@ -113102,8 +111761,6 @@ entities: rot: 1.5707963267948966 rad pos: -66.5,-2.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24700 @@ -113112,8 +111769,6 @@ entities: rot: -1.5707963267948966 rad pos: -63.5,-2.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24701 @@ -113122,8 +111777,6 @@ entities: rot: 3.141592653589793 rad pos: -64.5,-6.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24702 @@ -113132,8 +111785,6 @@ entities: rot: 3.141592653589793 rad pos: -60.5,-0.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24703 @@ -113142,8 +111793,6 @@ entities: rot: 1.5707963267948966 rad pos: -66.5,5.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24704 @@ -113151,8 +111800,6 @@ entities: - type: Transform pos: -64.5,12.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24828 @@ -113161,8 +111808,6 @@ entities: rot: -1.5707963267948966 rad pos: -34.5,-22.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24829 @@ -113170,8 +111815,6 @@ entities: - type: Transform pos: -36.5,-17.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24836 @@ -113180,8 +111823,6 @@ entities: rot: -1.5707963267948966 rad pos: -37.5,-24.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24838 @@ -113189,8 +111830,6 @@ entities: - type: Transform pos: -39.5,-26.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24839 @@ -113199,8 +111838,6 @@ entities: rot: 1.5707963267948966 rad pos: -43.5,-29.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24880 @@ -113209,8 +111846,6 @@ entities: rot: 3.141592653589793 rad pos: -38.5,-38.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24907 @@ -113219,8 +111854,6 @@ entities: rot: -1.5707963267948966 rad pos: -25.5,-37.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24908 @@ -113229,8 +111862,6 @@ entities: rot: 3.141592653589793 rad pos: -27.5,-39.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24909 @@ -113239,8 +111870,6 @@ entities: rot: 3.141592653589793 rad pos: -31.5,-39.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24966 @@ -113249,8 +111878,6 @@ entities: rot: -1.5707963267948966 rad pos: -1.5,-32.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24967 @@ -113258,8 +111885,6 @@ entities: - type: Transform pos: -4.5,-31.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24970 @@ -113268,8 +111893,6 @@ entities: rot: -1.5707963267948966 rad pos: 3.5,-26.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24988 @@ -113278,8 +111901,6 @@ entities: rot: 3.141592653589793 rad pos: -1.5,-27.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 24991 @@ -113288,8 +111909,6 @@ entities: rot: 3.141592653589793 rad pos: -18.5,-35.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 25002 @@ -113297,8 +111916,6 @@ entities: - type: Transform pos: -18.5,-30.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 25017 @@ -113307,8 +111924,6 @@ entities: rot: 3.141592653589793 rad pos: -23.5,-29.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 25018 @@ -113317,8 +111932,6 @@ entities: rot: 1.5707963267948966 rad pos: -29.5,-30.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 25019 @@ -113327,8 +111940,6 @@ entities: rot: 1.5707963267948966 rad pos: -29.5,-27.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 25020 @@ -113336,8 +111947,6 @@ entities: - type: Transform pos: -23.5,-18.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 25028 @@ -113345,8 +111954,6 @@ entities: - type: Transform pos: -12.5,-25.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 25076 @@ -113354,8 +111961,6 @@ entities: - type: Transform pos: -0.5,-22.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 25135 @@ -113363,8 +111968,6 @@ entities: - type: Transform pos: -27.5,-25.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 25147 @@ -113372,8 +111975,6 @@ entities: - type: Transform pos: -1.5,-17.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 25148 @@ -113381,8 +111982,6 @@ entities: - type: Transform pos: -10.5,-14.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 25184 @@ -113390,8 +111989,6 @@ entities: - type: Transform pos: -18.5,-19.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 25425 @@ -113400,8 +111997,6 @@ entities: rot: 1.5707963267948966 rad pos: -53.5,-9.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 25426 @@ -113410,8 +112005,6 @@ entities: rot: 3.141592653589793 rad pos: -52.5,-12.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 25608 @@ -113419,8 +112012,6 @@ entities: - type: Transform pos: 1.5,-70.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 26049 @@ -113429,8 +112020,6 @@ entities: rot: 1.5707963267948966 rad pos: 61.5,26.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 26051 @@ -113439,8 +112028,6 @@ entities: rot: 3.141592653589793 rad pos: 60.5,18.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 26130 @@ -113449,8 +112036,6 @@ entities: rot: 1.5707963267948966 rad pos: 68.5,7.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 26131 @@ -113459,8 +112044,6 @@ entities: rot: 3.141592653589793 rad pos: 73.5,6.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 26136 @@ -113469,8 +112052,6 @@ entities: rot: 3.141592653589793 rad pos: 66.5,17.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 26143 @@ -113479,8 +112060,6 @@ entities: rot: 3.141592653589793 rad pos: 63.5,11.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 26145 @@ -113489,8 +112068,6 @@ entities: rot: -1.5707963267948966 rad pos: 45.5,17.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 26199 @@ -113499,8 +112076,6 @@ entities: rot: 1.5707963267948966 rad pos: 11.5,20.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 26226 @@ -113508,8 +112083,6 @@ entities: - type: Transform pos: 61.5,8.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 26227 @@ -113517,8 +112090,6 @@ entities: - type: Transform pos: 54.5,8.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 26228 @@ -113527,8 +112098,6 @@ entities: rot: 3.141592653589793 rad pos: 51.5,6.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 26254 @@ -113537,8 +112106,6 @@ entities: rot: 1.5707963267948966 rad pos: 18.5,14.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 26275 @@ -113547,8 +112114,6 @@ entities: rot: -1.5707963267948966 rad pos: 33.5,17.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 26308 @@ -113557,8 +112122,6 @@ entities: rot: -1.5707963267948966 rad pos: 23.5,19.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 26316 @@ -113566,8 +112129,6 @@ entities: - type: Transform pos: 22.5,27.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 26318 @@ -113575,8 +112136,6 @@ entities: - type: Transform pos: 19.5,25.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 26329 @@ -113585,8 +112144,6 @@ entities: rot: 3.141592653589793 rad pos: 7.5,24.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 26336 @@ -113595,8 +112152,6 @@ entities: rot: 3.141592653589793 rad pos: 4.5,24.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 26824 @@ -113605,8 +112160,6 @@ entities: rot: -1.5707963267948966 rad pos: -17.5,4.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 26825 @@ -113615,8 +112168,6 @@ entities: rot: 1.5707963267948966 rad pos: -25.5,2.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 26826 @@ -113625,8 +112176,6 @@ entities: rot: 1.5707963267948966 rad pos: -25.5,5.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 26827 @@ -113635,8 +112184,6 @@ entities: rot: 1.5707963267948966 rad pos: -25.5,8.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 26916 @@ -113645,8 +112192,6 @@ entities: rot: 3.141592653589793 rad pos: 12.5,-24.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - uid: 27396 @@ -113658,8 +112203,6 @@ entities: - type: DeviceNetwork deviceLists: - 7456 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF1212FF' - proto: GasVolumePump @@ -113670,8 +112213,6 @@ entities: rot: 1.5707963267948966 rad pos: 63.5,29.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF5500FF' - uid: 13366 @@ -113680,8 +112221,6 @@ entities: rot: 3.141592653589793 rad pos: 62.5,34.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#00FFFFFF' - proto: Gauze @@ -114125,6 +112664,12 @@ entities: - type: Transform pos: 69.5,6.5 parent: 6747 + - uid: 880 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 84.5,-34.5 + parent: 6747 - uid: 932 components: - type: Transform @@ -114315,6 +112860,12 @@ entities: - type: Transform pos: 8.5,26.5 parent: 6747 + - uid: 1092 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 84.5,-37.5 + parent: 6747 - uid: 1105 components: - type: Transform @@ -115570,6 +114121,12 @@ entities: - type: Transform pos: -5.5,-72.5 parent: 6747 + - uid: 4508 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 85.5,-34.5 + parent: 6747 - uid: 4525 components: - type: Transform @@ -115970,11 +114527,6 @@ entities: - type: Transform pos: 39.5,-48.5 parent: 6747 - - uid: 5968 - components: - - type: Transform - pos: 77.5,-18.5 - parent: 6747 - uid: 5969 components: - type: Transform @@ -115995,25 +114547,17 @@ entities: - type: Transform pos: 76.5,-31.5 parent: 6747 - - uid: 5978 - components: - - type: Transform - pos: 76.5,-30.5 - parent: 6747 - - uid: 5979 - components: - - type: Transform - pos: 77.5,-20.5 - parent: 6747 - uid: 5994 components: - type: Transform - pos: 77.5,-23.5 + rot: -1.5707963267948966 rad + pos: 85.5,-37.5 parent: 6747 - - uid: 5996 + - uid: 6002 components: - type: Transform - pos: 77.5,-25.5 + rot: -1.5707963267948966 rad + pos: 82.5,-34.5 parent: 6747 - uid: 6006 components: @@ -116108,7 +114652,8 @@ entities: - uid: 6072 components: - type: Transform - pos: 76.5,-29.5 + rot: -1.5707963267948966 rad + pos: 82.5,-37.5 parent: 6747 - uid: 6103 components: @@ -119680,6 +118225,294 @@ entities: - type: Transform pos: -19.5,-56.5 parent: 6747 + - uid: 27642 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 89.5,-23.5 + parent: 6747 + - uid: 27646 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 87.5,-37.5 + parent: 6747 + - uid: 27647 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 88.5,-37.5 + parent: 6747 + - uid: 27648 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 89.5,-35.5 + parent: 6747 + - uid: 27649 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 89.5,-34.5 + parent: 6747 + - uid: 27650 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 89.5,-32.5 + parent: 6747 + - uid: 27651 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 89.5,-31.5 + parent: 6747 + - uid: 27652 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 89.5,-29.5 + parent: 6747 + - uid: 27653 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 89.5,-28.5 + parent: 6747 + - uid: 27654 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 89.5,-26.5 + parent: 6747 + - uid: 27655 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 89.5,-25.5 + parent: 6747 + - uid: 27656 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 89.5,-22.5 + parent: 6747 + - uid: 27657 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 89.5,-20.5 + parent: 6747 + - uid: 27658 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 89.5,-19.5 + parent: 6747 + - uid: 27659 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 88.5,-17.5 + parent: 6747 + - uid: 27660 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 87.5,-17.5 + parent: 6747 + - uid: 27667 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 76.5,-23.5 + parent: 6747 + - uid: 27668 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 76.5,-20.5 + parent: 6747 + - uid: 27669 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 86.5,-20.5 + parent: 6747 + - uid: 27670 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 86.5,-21.5 + parent: 6747 + - uid: 27671 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 86.5,-22.5 + parent: 6747 + - uid: 27672 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 86.5,-23.5 + parent: 6747 + - uid: 27680 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 86.5,-32.5 + parent: 6747 + - uid: 27681 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 86.5,-31.5 + parent: 6747 + - uid: 27682 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 86.5,-28.5 + parent: 6747 + - uid: 27683 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 86.5,-27.5 + parent: 6747 + - uid: 27746 + components: + - type: Transform + pos: 98.5,-25.5 + parent: 6747 + - uid: 27747 + components: + - type: Transform + pos: 98.5,-26.5 + parent: 6747 + - uid: 27748 + components: + - type: Transform + pos: 98.5,-27.5 + parent: 6747 + - uid: 27749 + components: + - type: Transform + pos: 98.5,-28.5 + parent: 6747 + - uid: 27750 + components: + - type: Transform + pos: 98.5,-30.5 + parent: 6747 + - uid: 27751 + components: + - type: Transform + pos: 98.5,-31.5 + parent: 6747 + - uid: 27752 + components: + - type: Transform + pos: 98.5,-32.5 + parent: 6747 + - uid: 27753 + components: + - type: Transform + pos: 98.5,-33.5 + parent: 6747 + - uid: 27754 + components: + - type: Transform + pos: 98.5,-35.5 + parent: 6747 + - uid: 27755 + components: + - type: Transform + pos: 98.5,-36.5 + parent: 6747 + - uid: 27756 + components: + - type: Transform + pos: 98.5,-37.5 + parent: 6747 + - uid: 27757 + components: + - type: Transform + pos: 98.5,-38.5 + parent: 6747 + - uid: 27792 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 97.5,-39.5 + parent: 6747 + - uid: 27793 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 97.5,-40.5 + parent: 6747 + - uid: 27794 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 96.5,-40.5 + parent: 6747 + - uid: 27795 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 95.5,-41.5 + parent: 6747 + - uid: 27796 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 94.5,-41.5 + parent: 6747 + - uid: 27797 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 93.5,-42.5 + parent: 6747 + - uid: 27798 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 92.5,-42.5 + parent: 6747 + - uid: 27799 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 91.5,-41.5 + parent: 6747 + - uid: 27800 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 90.5,-41.5 + parent: 6747 + - uid: 27801 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 89.5,-40.5 + parent: 6747 + - uid: 27802 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 89.5,-39.5 + parent: 6747 + - uid: 27803 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 89.5,-38.5 + parent: 6747 - proto: GrilleBroken entities: - uid: 9970 @@ -120250,8 +119083,6 @@ entities: rot: 1.5707963267948966 rad pos: 66.5,30.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF5500FF' - uid: 13089 @@ -120260,8 +119091,6 @@ entities: rot: 1.5707963267948966 rad pos: 67.5,31.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF5500FF' - uid: 13090 @@ -120270,8 +119099,6 @@ entities: rot: 1.5707963267948966 rad pos: 67.5,32.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF5500FF' - uid: 13091 @@ -120280,8 +119107,6 @@ entities: rot: 1.5707963267948966 rad pos: 66.5,33.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#FF5500FF' - uid: 13318 @@ -120290,8 +119115,6 @@ entities: rot: -1.5707963267948966 rad pos: 62.5,42.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#00FFFFFF' - uid: 13319 @@ -120300,8 +119123,6 @@ entities: rot: -1.5707963267948966 rad pos: 62.5,40.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#00FFFFFF' - uid: 13320 @@ -120310,8 +119131,6 @@ entities: rot: -1.5707963267948966 rad pos: 62.5,39.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - type: AtmosPipeColor color: '#00FFFFFF' - proto: HelicopterInstrument @@ -121052,7 +119871,6 @@ entities: solutions: beaker: temperature: 293.15 - canMix: True canReact: True maxVol: 200 name: null @@ -121334,7 +120152,6 @@ entities: solutions: tank: temperature: 293.15 - canMix: False canReact: True maxVol: 1500 name: null @@ -121509,7 +120326,6 @@ entities: solutions: beaker: temperature: 293.15 - canMix: True canReact: True maxVol: 100 name: null @@ -125209,78 +124025,56 @@ entities: - type: Transform pos: 8.5,-73.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 5108 components: - type: Transform pos: 30.5,-74.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 5315 components: - type: Transform pos: 49.5,-32.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 7756 components: - type: Transform pos: 38.5,42.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 7878 components: - type: Transform pos: -35.5,-57.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 8183 components: - type: Transform pos: 33.5,34.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 10992 components: - type: Transform pos: 50.5,-39.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 11190 components: - type: Transform pos: 41.5,-80.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 11353 components: - type: Transform pos: 52.5,-1.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 15935 components: - type: Transform pos: 8.5,-6.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 25414 components: - type: Transform pos: -51.5,-13.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - proto: NitrogenTankFilled entities: - uid: 1301 @@ -125344,15 +124138,11 @@ entities: - type: Transform pos: 42.5,42.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 8189 components: - type: Transform pos: 32.5,30.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - proto: NitrousOxideTank entities: - uid: 7877 @@ -125440,7 +124230,7 @@ entities: - type: Transform pos: 3.5,-69.5 parent: 6747 -- proto: Oracle +- proto: OracleSpawner entities: - uid: 8917 components: @@ -125491,92 +124281,66 @@ entities: - type: Transform pos: 0.5,12.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 5069 components: - type: Transform pos: 9.5,-73.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 5093 components: - type: Transform pos: 31.5,-74.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 5314 components: - type: Transform pos: 49.5,-31.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 7786 components: - type: Transform pos: 36.5,42.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 8180 components: - type: Transform pos: 32.5,35.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 8181 components: - type: Transform pos: 33.5,35.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 10130 components: - type: Transform pos: -49.5,-69.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 11340 components: - type: Transform pos: 4.5,4.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 11356 components: - type: Transform pos: 53.5,-15.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 11378 components: - type: Transform pos: 43.5,-37.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 11409 components: - type: Transform pos: -35.5,-58.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 25415 components: - type: Transform pos: -52.5,-13.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - proto: OxygenTankFilled entities: - uid: 11534 @@ -130299,7 +129063,6 @@ entities: solutions: food: temperature: 293.15 - canMix: False canReact: True maxVol: 25 name: null @@ -130317,7 +129080,6 @@ entities: solutions: food: temperature: 293.15 - canMix: False canReact: True maxVol: 25 name: null @@ -130335,7 +129097,6 @@ entities: solutions: food: temperature: 293.15 - canMix: False canReact: True maxVol: 25 name: null @@ -130353,7 +129114,6 @@ entities: solutions: food: temperature: 293.15 - canMix: False canReact: True maxVol: 25 name: null @@ -130371,7 +129131,6 @@ entities: solutions: food: temperature: 293.15 - canMix: False canReact: True maxVol: 25 name: null @@ -130467,8 +129226,6 @@ entities: - type: Transform pos: 59.5,25.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - proto: PlasmaOre1 entities: - uid: 25553 @@ -134084,32 +132841,32 @@ entities: rot: 1.5707963267948966 rad pos: 57.5,-34.5 parent: 6747 -- proto: PoweredLightBlueInterior - entities: - - uid: 2197 + - uid: 27673 components: - type: Transform rot: 1.5707963267948966 rad - pos: 77.5,-33.5 + pos: 87.5,-23.5 parent: 6747 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 4218 + - uid: 27789 components: - type: Transform rot: 1.5707963267948966 rad - pos: 77.5,-17.5 + pos: 87.5,-31.5 parent: 6747 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 4508 + - uid: 27790 components: - type: Transform - rot: 3.141592653589793 rad - pos: 76.5,-16.5 + rot: 1.5707963267948966 rad + pos: 90.5,-33.5 parent: 6747 - - type: ApcPowerReceiver - powerLoad: 0 + - uid: 27791 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 90.5,-21.5 + parent: 6747 +- proto: PoweredLightBlueInterior + entities: - uid: 4509 components: - type: Transform @@ -134259,14 +133016,6 @@ entities: parent: 6747 - type: ApcPowerReceiver powerLoad: 0 - - uid: 11804 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 77.5,-26.5 - parent: 6747 - - type: ApcPowerReceiver - powerLoad: 0 - uid: 11805 components: - type: Transform @@ -134483,6 +133232,23 @@ entities: rot: 1.5707963267948966 rad pos: -77.5,3.5 parent: 6747 + - uid: 27684 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 79.5,-33.5 + parent: 6747 + - uid: 27685 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 83.5,-33.5 + parent: 6747 + - uid: 27686 + components: + - type: Transform + pos: 83.5,-38.5 + parent: 6747 - proto: PoweredLightColoredBlack entities: - uid: 6279 @@ -135753,7 +134519,6 @@ entities: solutions: puddle: temperature: 293.15 - canMix: False canReact: True maxVol: 1000 name: null @@ -135772,7 +134537,6 @@ entities: solutions: puddle: temperature: 293.15 - canMix: False canReact: True maxVol: 1000 name: null @@ -135801,7 +134565,6 @@ entities: solutions: puddle: temperature: 293.15 - canMix: False canReact: True maxVol: 1000 name: null @@ -135822,7 +134585,6 @@ entities: solutions: puddle: temperature: 293.15 - canMix: False canReact: True maxVol: 1000 name: null @@ -137220,6 +135982,123 @@ entities: - type: Transform pos: 79.5,16.5 parent: 6747 + - uid: 27690 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 76.5,-16.5 + parent: 6747 + - uid: 27691 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 76.5,-15.5 + parent: 6747 + - uid: 27698 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 86.5,-16.5 + parent: 6747 + - uid: 27699 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 86.5,-15.5 + parent: 6747 + - uid: 27700 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 84.5,-12.5 + parent: 6747 + - uid: 27701 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 78.5,-12.5 + parent: 6747 + - uid: 27702 + components: + - type: Transform + pos: 80.5,-10.5 + parent: 6747 + - uid: 27703 + components: + - type: Transform + pos: 81.5,-10.5 + parent: 6747 + - uid: 27704 + components: + - type: Transform + pos: 82.5,-10.5 + parent: 6747 + - uid: 27715 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 78.5,-30.5 + parent: 6747 + - uid: 27716 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 79.5,-30.5 + parent: 6747 + - uid: 27717 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 80.5,-30.5 + parent: 6747 + - uid: 27718 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 82.5,-30.5 + parent: 6747 + - uid: 27719 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 81.5,-30.5 + parent: 6747 + - uid: 27720 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 83.5,-30.5 + parent: 6747 + - uid: 27721 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 84.5,-30.5 + parent: 6747 + - uid: 27808 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 93.5,-29.5 + parent: 6747 + - uid: 27811 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 92.5,-30.5 + parent: 6747 + - uid: 27815 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 92.5,-29.5 + parent: 6747 + - uid: 27817 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 92.5,-28.5 + parent: 6747 - proto: RailingCorner entities: - uid: 379 @@ -137334,6 +136213,51 @@ entities: - type: Transform pos: 80.5,16.5 parent: 6747 + - uid: 27692 + components: + - type: Transform + pos: 78.5,-13.5 + parent: 6747 + - uid: 27693 + components: + - type: Transform + pos: 77.5,-14.5 + parent: 6747 + - uid: 27694 + components: + - type: Transform + pos: 79.5,-11.5 + parent: 6747 + - uid: 27695 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 83.5,-11.5 + parent: 6747 + - uid: 27696 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 84.5,-13.5 + parent: 6747 + - uid: 27697 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 85.5,-14.5 + parent: 6747 + - uid: 27713 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 77.5,-29.5 + parent: 6747 + - uid: 27714 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 85.5,-29.5 + parent: 6747 - proto: RailingCornerSmall entities: - uid: 9019 @@ -137382,6 +136306,76 @@ entities: rot: 1.5707963267948966 rad pos: 29.5,-42.5 parent: 6747 + - uid: 27705 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 76.5,-14.5 + parent: 6747 + - uid: 27706 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 77.5,-13.5 + parent: 6747 + - uid: 27707 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 78.5,-11.5 + parent: 6747 + - uid: 27708 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 79.5,-10.5 + parent: 6747 + - uid: 27709 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 83.5,-10.5 + parent: 6747 + - uid: 27710 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 84.5,-11.5 + parent: 6747 + - uid: 27711 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 85.5,-13.5 + parent: 6747 + - uid: 27712 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 86.5,-14.5 + parent: 6747 + - uid: 27722 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 77.5,-30.5 + parent: 6747 + - uid: 27723 + components: + - type: Transform + pos: 85.5,-30.5 + parent: 6747 + - uid: 27809 + components: + - type: Transform + pos: 92.5,-31.5 + parent: 6747 + - uid: 27816 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 92.5,-27.5 + parent: 6747 - proto: RandomAnimalSpawner entities: - uid: 1707 @@ -143095,6 +142089,45 @@ entities: - type: Transform pos: 98.5,-24.5 parent: 6747 + - uid: 27758 + components: + - type: Transform + pos: 98.5,-29.5 + parent: 6747 + - uid: 27759 + components: + - type: Transform + pos: 98.5,-34.5 + parent: 6747 + - uid: 27760 + components: + - type: Transform + pos: 98.5,-39.5 + parent: 6747 + - uid: 27804 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 95.5,-40.5 + parent: 6747 + - uid: 27805 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 94.5,-42.5 + parent: 6747 + - uid: 27806 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 91.5,-42.5 + parent: 6747 + - uid: 27807 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 89.5,-41.5 + parent: 6747 - proto: ReinforcedPlasmaWindow entities: - uid: 887 @@ -143534,6 +142567,12 @@ entities: - type: Transform pos: -32.5,-38.5 parent: 6747 + - uid: 548 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 89.5,-26.5 + parent: 6747 - uid: 591 components: - type: Transform @@ -143589,6 +142628,12 @@ entities: - type: Transform pos: 42.5,10.5 parent: 6747 + - uid: 928 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 82.5,-34.5 + parent: 6747 - uid: 981 components: - type: Transform @@ -144262,7 +143307,8 @@ entities: - uid: 3387 components: - type: Transform - pos: 77.5,-20.5 + rot: -1.5707963267948966 rad + pos: 84.5,-34.5 parent: 6747 - uid: 3450 components: @@ -144529,11 +143575,6 @@ entities: - type: Transform pos: 76.5,-22.5 parent: 6747 - - uid: 5894 - components: - - type: Transform - pos: 77.5,-18.5 - parent: 6747 - uid: 5905 components: - type: Transform @@ -144569,10 +143610,17 @@ entities: - type: Transform pos: 78.5,-37.5 parent: 6747 - - uid: 5990 + - uid: 5973 components: - type: Transform - pos: 77.5,-23.5 + rot: -1.5707963267948966 rad + pos: 76.5,-20.5 + parent: 6747 + - uid: 5979 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 86.5,-21.5 parent: 6747 - uid: 5991 components: @@ -144584,16 +143632,6 @@ entities: - type: Transform pos: 76.5,-27.5 parent: 6747 - - uid: 5995 - components: - - type: Transform - pos: 76.5,-30.5 - parent: 6747 - - uid: 5997 - components: - - type: Transform - pos: 77.5,-25.5 - parent: 6747 - uid: 6024 components: - type: Transform @@ -144602,7 +143640,8 @@ entities: - uid: 6030 components: - type: Transform - pos: 76.5,-29.5 + rot: -1.5707963267948966 rad + pos: 88.5,-37.5 parent: 6747 - uid: 6037 components: @@ -144834,6 +143873,12 @@ entities: - type: Transform pos: 76.5,-31.5 parent: 6747 + - uid: 6198 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 85.5,-37.5 + parent: 6747 - uid: 6201 components: - type: Transform @@ -144984,6 +144029,12 @@ entities: - type: Transform pos: 57.5,-26.5 parent: 6747 + - uid: 6443 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 85.5,-34.5 + parent: 6747 - uid: 6457 components: - type: Transform @@ -145059,6 +144110,36 @@ entities: - type: Transform pos: 67.5,-38.5 parent: 6747 + - uid: 6538 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 87.5,-37.5 + parent: 6747 + - uid: 6541 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 86.5,-20.5 + parent: 6747 + - uid: 6542 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 76.5,-23.5 + parent: 6747 + - uid: 6566 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 84.5,-37.5 + parent: 6747 + - uid: 6583 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 89.5,-29.5 + parent: 6747 - uid: 6592 components: - type: Transform @@ -145304,6 +144385,12 @@ entities: - type: Transform pos: 64.5,21.5 parent: 6747 + - uid: 8311 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 82.5,-37.5 + parent: 6747 - uid: 8316 components: - type: Transform @@ -146314,6 +145401,114 @@ entities: - type: Transform pos: -19.5,-56.5 parent: 6747 + - uid: 27624 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 89.5,-35.5 + parent: 6747 + - uid: 27625 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 89.5,-34.5 + parent: 6747 + - uid: 27627 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 89.5,-32.5 + parent: 6747 + - uid: 27628 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 89.5,-31.5 + parent: 6747 + - uid: 27630 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 89.5,-28.5 + parent: 6747 + - uid: 27632 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 89.5,-25.5 + parent: 6747 + - uid: 27634 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 89.5,-23.5 + parent: 6747 + - uid: 27635 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 89.5,-22.5 + parent: 6747 + - uid: 27637 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 89.5,-20.5 + parent: 6747 + - uid: 27638 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 89.5,-19.5 + parent: 6747 + - uid: 27640 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 88.5,-17.5 + parent: 6747 + - uid: 27641 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 87.5,-17.5 + parent: 6747 + - uid: 27663 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 86.5,-22.5 + parent: 6747 + - uid: 27664 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 86.5,-23.5 + parent: 6747 + - uid: 27676 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 86.5,-27.5 + parent: 6747 + - uid: 27677 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 86.5,-28.5 + parent: 6747 + - uid: 27678 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 86.5,-31.5 + parent: 6747 + - uid: 27679 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 86.5,-32.5 + parent: 6747 - proto: RemoteSignaller entities: - uid: 1379 @@ -149825,18 +149020,6 @@ entities: rot: 3.141592653589793 rad pos: 4.5,12.5 parent: 6747 - - uid: 6566 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 76.5,-20.5 - parent: 6747 - - uid: 6583 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 76.5,-23.5 - parent: 6747 - uid: 18891 components: - type: Transform @@ -151249,7 +150432,7 @@ entities: - type: Transform pos: 103.5,18.5 parent: 6747 -- proto: SophicScribe +- proto: SophicScribeSpawner entities: - uid: 8916 components: @@ -151386,6 +150569,8 @@ entities: - type: Transform pos: 28.5,-13.5 parent: 6747 + - type: SpamEmitSound + enabled: False - proto: SpaceVillainArcadeFilled entities: - uid: 12178 @@ -151394,6 +150579,8 @@ entities: rot: 1.5707963267948966 rad pos: -39.5,-36.5 parent: 6747 + - type: SpamEmitSound + enabled: False - proto: SpareIdCabinetFilled entities: - uid: 27349 @@ -152785,99 +151972,71 @@ entities: - type: Transform pos: 22.5,-59.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 4418 components: - type: Transform pos: 22.5,-60.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 7669 components: - type: Transform pos: 61.5,25.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 7788 components: - type: Transform pos: 44.5,42.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 7789 components: - type: Transform pos: 46.5,42.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 8186 components: - type: Transform pos: 32.5,32.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 8187 components: - type: Transform pos: 33.5,32.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 8191 components: - type: Transform pos: 33.5,30.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 11259 components: - type: Transform pos: 4.5,-91.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 11355 components: - type: Transform pos: 53.5,-18.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 15857 components: - type: Transform pos: -50.5,-5.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 15858 components: - type: Transform pos: -49.5,-5.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 16210 components: - type: Transform pos: 10.5,-20.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 26917 components: - type: Transform pos: 10.5,-19.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - proto: StrangePill entities: - uid: 20202 @@ -155148,6 +154307,14 @@ entities: - type: Transform pos: -51.5,7.5 parent: 6747 +- proto: TableFancyBlack + entities: + - uid: 27812 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 93.5,-29.5 + parent: 6747 - proto: TableFancyBlue entities: - uid: 10932 @@ -157354,8 +156521,6 @@ entities: rot: 3.141592653589793 rad pos: 61.5,32.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - proto: TegCirculator entities: - uid: 13000 @@ -160221,6 +159386,12 @@ entities: - type: Transform pos: 10.5,23.5 parent: 6747 + - uid: 1081 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 86.5,-17.5 + parent: 6747 - uid: 1085 components: - type: Transform @@ -161246,6 +160417,12 @@ entities: - type: Transform pos: 21.5,-36.5 parent: 6747 + - uid: 2197 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 83.5,-37.5 + parent: 6747 - uid: 2198 components: - type: Transform @@ -164241,11 +163418,6 @@ entities: - type: Transform pos: 56.5,-38.5 parent: 6747 - - uid: 5881 - components: - - type: Transform - pos: 78.5,-23.5 - parent: 6747 - uid: 5882 components: - type: Transform @@ -164271,10 +163443,11 @@ entities: - type: Transform pos: 76.5,-17.5 parent: 6747 - - uid: 5899 + - uid: 5889 components: - type: Transform - pos: 78.5,-18.5 + rot: -1.5707963267948966 rad + pos: 86.5,-37.5 parent: 6747 - uid: 5907 components: @@ -164331,30 +163504,29 @@ entities: - type: Transform pos: 76.5,-38.5 parent: 6747 - - uid: 5980 + - uid: 5982 components: - type: Transform - pos: 78.5,-25.5 + rot: -1.5707963267948966 rad + pos: 76.5,-29.5 parent: 6747 - uid: 5988 components: - type: Transform - pos: 76.5,-20.5 - parent: 6747 - - uid: 5999 - components: - - type: Transform - pos: 76.5,-23.5 + rot: -1.5707963267948966 rad + pos: 86.5,-34.5 parent: 6747 - - uid: 6001 + - uid: 5990 components: - type: Transform - pos: 78.5,-20.5 + rot: -1.5707963267948966 rad + pos: 83.5,-34.5 parent: 6747 - - uid: 6002 + - uid: 5995 components: - type: Transform - pos: 76.5,-18.5 + rot: -1.5707963267948966 rad + pos: 76.5,-30.5 parent: 6747 - uid: 6015 components: @@ -164424,17 +163596,19 @@ entities: - uid: 6169 components: - type: Transform - pos: 82.5,-37.5 + rot: -1.5707963267948966 rad + pos: 86.5,-30.5 parent: 6747 - uid: 6170 components: - type: Transform pos: 79.5,-37.5 parent: 6747 - - uid: 6173 + - uid: 6196 components: - type: Transform - pos: 76.5,-25.5 + rot: -1.5707963267948966 rad + pos: 86.5,-33.5 parent: 6747 - uid: 6341 components: @@ -167111,11 +166285,6 @@ entities: - type: Transform pos: -12.5,-89.5 parent: 6747 - - uid: 11803 - components: - - type: Transform - pos: 82.5,-34.5 - parent: 6747 - uid: 11818 components: - type: Transform @@ -168541,6 +167710,96 @@ entities: - type: Transform pos: -43.5,15.5 parent: 6747 + - uid: 27626 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 89.5,-33.5 + parent: 6747 + - uid: 27629 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 89.5,-30.5 + parent: 6747 + - uid: 27631 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 89.5,-27.5 + parent: 6747 + - uid: 27633 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 89.5,-24.5 + parent: 6747 + - uid: 27636 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 89.5,-21.5 + parent: 6747 + - uid: 27639 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 89.5,-17.5 + parent: 6747 + - uid: 27643 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 89.5,-18.5 + parent: 6747 + - uid: 27644 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 89.5,-36.5 + parent: 6747 + - uid: 27645 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 89.5,-37.5 + parent: 6747 + - uid: 27661 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 76.5,-24.5 + parent: 6747 + - uid: 27662 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 76.5,-19.5 + parent: 6747 + - uid: 27665 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 86.5,-19.5 + parent: 6747 + - uid: 27666 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 86.5,-24.5 + parent: 6747 + - uid: 27674 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 86.5,-29.5 + parent: 6747 + - uid: 27675 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 86.5,-26.5 + parent: 6747 - proto: WallShuttle entities: - uid: 6231 @@ -174456,22 +173715,16 @@ entities: - type: Transform pos: 32.5,31.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 8270 components: - type: Transform pos: 60.5,25.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - uid: 11258 components: - type: Transform pos: 3.5,-82.5 parent: 6747 - - type: AtmosDevice - joinedGrid: 6747 - proto: WeaponCapacitorRecharger entities: - uid: 120 @@ -174553,13 +173806,6 @@ entities: - type: Transform pos: -31.493519,10.543685 parent: 6747 -- proto: WeaponRifleM90GrenadeLauncher - entities: - - uid: 8311 - components: - - type: Transform - pos: -14.458499,-2.5063553 - parent: 6747 - proto: WeaponShotgunKammerer entities: - uid: 1624 diff --git a/Resources/Maps/asterisk.yml b/Resources/Maps/asterisk.yml index 156fb2de6ec..bfd8a71261d 100644 --- a/Resources/Maps/asterisk.yml +++ b/Resources/Maps/asterisk.yml @@ -63,7 +63,29 @@ entities: - type: Broadphase - type: OccluderTree - type: Parallax - parallax: AngleStation + parallax: Snow + - type: MapAtmosphere + space: False + mixture: + volume: 2500 + immutable: True + temperature: 213.15 + moles: + - 21.824879 + - 82.10312 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - type: Gravity + enabled: true + inherent: true - type: LoadedMap - uid: 2 components: @@ -71,6 +93,9 @@ entities: - type: Transform pos: -0.5104167,-0.4739367 parent: 1 + - type: PassiveDampening + linearDampening: 1 + angularDampening: 1 - type: MapGrid chunks: 0,0: diff --git a/Resources/Maps/gaxstation.yml b/Resources/Maps/gaxstation.yml new file mode 100644 index 00000000000..42c0145ab1b --- /dev/null +++ b/Resources/Maps/gaxstation.yml @@ -0,0 +1,131959 @@ +meta: + format: 6 + postmapinit: false +tilemap: + 0: Space + 10: FloorAsteroidSandUnvariantized + 11: FloorAsteroidTile + 6: FloorAstroGrass + 17: FloorBlueCircuit + 20: FloorCarpetClown + 25: FloorClown + 4: FloorDark + 34: FloorDarkMono + 1: FloorDarkPavementVertical + 38: FloorDarkPlastic + 40: FloorDirt + 44: FloorFreezer + 5: FloorGlass + 50: FloorGrassLight + 51: FloorGrayConcrete + 54: FloorGreenCircuit + 58: FloorHydro + 60: FloorKitchen + 62: FloorLino + 64: FloorMetalDiamond + 74: FloorPlanetGrass + 75: FloorPlastic + 77: FloorReinforced + 89: FloorSteel + 90: FloorSteelBurnt + 92: FloorSteelCheckerLight + 93: FloorSteelDamaged + 104: FloorTechMaint + 3: FloorTechMaint2 + 117: FloorWhitePlastic + 118: FloorWood + 119: FloorWoodTile + 120: Lattice + 121: Plating + 2: PlatingBurnt + 124: PlatingDamaged +entities: +- proto: "" + entities: + - uid: 1 + components: + - type: MetaData + name: GaxStation + - type: Transform + - type: Map + mapPaused: True + - type: PhysicsMap + - type: GridTree + - type: MovedGrids + - type: Broadphase + - type: OccluderTree + - type: LoadedMap + - uid: 2 + components: + - type: MetaData + name: grid + - type: Transform + pos: -0.52690125,-0.4910388 + parent: 1 + - type: MapGrid + chunks: + 0,0: + ind: 0,0 + tiles: eQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAWQAAAAAAWQAAAAAAQAAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAWQAAAAAAWQAAAAAAQAAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAQAAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAQAAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAA + version: 6 + -1,0: + ind: -1,0 + tiles: WQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAQAAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAQAAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAQAAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAQAAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAA + version: 6 + -2,0: + ind: -2,0 + tiles: eQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAQAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAA + version: 6 + -1,1: + ind: -1,1 + tiles: eQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAA + version: 6 + 0,1: + ind: 0,1 + tiles: JgAAAAAAJgAAAAAAJgAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAdQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAdQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAA + version: 6 + 0,2: + ind: 0,2 + tiles: WQAAAAAAWQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAWQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAWQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAJgAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAJgAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAJgAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAJgAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAJgAAAAAAJgAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAJgAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAJgAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAA + version: 6 + -1,2: + ind: -1,2 + tiles: eQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAJgAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAJgAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAA + version: 6 + 1,1: + ind: 1,1 + tiles: eQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAdQAAAAAAeQAAAAAAdQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAASgAAAAAASgAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAASgAAAAAASgAAAAAASgAAAAAAeQAAAAAAWQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAASgAAAAAASgAAAAAASgAAAAAAeQAAAAAAWQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAWQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAWQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAWQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAWQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAWQAAAAAA + version: 6 + 1,2: + ind: 1,2 + tiles: JgAAAAAAJgAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAWQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAWQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAWQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAASgAAAAAASgAAAAAAeQAAAAAAWQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAASgAAAAAASgAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAWQAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAWQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAWQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAWQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAWQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAA + version: 6 + 2,1: + ind: 2,1 + tiles: WQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAASgAAAAAASgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAIgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAIgAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAIgAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAEQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAEQAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAEQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAEQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAEQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAEQAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAEQAAAAAAEQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAdQAAAAAAdQAAAAAA + version: 6 + 2,2: + ind: 2,2 + tiles: WQAAAAAAWQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAOgAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAeQAAAAAAOgAAAAAAOgAAAAAAOgAAAAAAOgAAAAAAOgAAAAAAWQAAAAAAWQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAeQAAAAAAOgAAAAAAOgAAAAAAOgAAAAAAOgAAAAAAOgAAAAAAWQAAAAAAWQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAeQAAAAAAOgAAAAAAOgAAAAAAOgAAAAAAOgAAAAAAOgAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAeQAAAAAAOgAAAAAAOgAAAAAAOgAAAAAAOgAAAAAAOgAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAGQAAAAAAeQAAAAAAeQAAAAAAOgAAAAAAOgAAAAAAOgAAAAAAOgAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAGQAAAAAAGQAAAAAAGQAAAAAAeQAAAAAAOgAAAAAAOgAAAAAAOgAAAAAAOgAAAAAAWQAAAAAAWQAAAAAAXAAAAAAAXAAAAAAAXAAAAAAAXAAAAAAAXAAAAAAAeQAAAAAAGQAAAAAAGQAAAAAAFAAAAAAAeQAAAAAAOgAAAAAAOgAAAAAAOgAAAAAAOgAAAAAAWQAAAAAAWQAAAAAAXAAAAAAAXAAAAAAAXAAAAAAAXAAAAAAAXAAAAAAAeQAAAAAAGQAAAAAAFAAAAAAAFAAAAAAAeQAAAAAAOgAAAAAAOgAAAAAAOgAAAAAAOgAAAAAAWQAAAAAAWQAAAAAAXAAAAAAAXAAAAAAAXAAAAAAAXAAAAAAAXAAAAAAAeQAAAAAAFAAAAAAAFAAAAAAAFAAAAAAAeQAAAAAAOgAAAAAAOgAAAAAAOgAAAAAAOgAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAXAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAFAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAOgAAAAAAOgAAAAAA + version: 6 + 1,3: + ind: 1,3 + tiles: WQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdgAAAAAAdgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAEQAAAAAAJgAAAAAAEQAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAA + version: 6 + 0,3: + ind: 0,3 + tiles: WQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAdgAAAAAAdgAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAIgAAAAAAeQAAAAAAdgAAAAAAdgAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAIgAAAAAAeQAAAAAAdgAAAAAAdgAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAdgAAAAAAdgAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAASwAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAASwAAAAAAeQAAAAAAIgAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdgAAAAAAdgAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAeQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAJgAAAAAAJgAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAPgAAAAAAeQAAAAAAJgAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAA + version: 6 + -1,3: + ind: -1,3 + tiles: WQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAIgAAAAAAIgAAAAAAIgAAAAAAeQAAAAAAIgAAAAAAIgAAAAAAIgAAAAAAeQAAAAAAIgAAAAAAIgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAIgAAAAAAIgAAAAAAIgAAAAAAeQAAAAAAIgAAAAAAIgAAAAAAIgAAAAAAeQAAAAAAIgAAAAAAIgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAIgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAIgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAIgAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAeQAAAAAAdgAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAAeQAAAAAAIgAAAAAAIgAAAAAAIgAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAdgAAAAAAdgAAAAAASwAAAAAAeQAAAAAAeQAAAAAASwAAAAAASwAAAAAAIgAAAAAAIgAAAAAAIgAAAAAAIgAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAdgAAAAAAdgAAAAAALAAAAAAALAAAAAAAeQAAAAAASwAAAAAASwAAAAAAeQAAAAAAIgAAAAAAIgAAAAAAIgAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAdgAAAAAAdgAAAAAALAAAAAAALAAAAAAAeQAAAAAASwAAAAAASwAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAALAAAAAAALAAAAAAAeQAAAAAASwAAAAAASwAAAAAAIgAAAAAAIgAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAASwAAAAAASwAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAA + version: 6 + 2,3: + ind: 2,3 + tiles: WQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAOgAAAAAAOgAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAeQAAAAAAeAAAAAAA + version: 6 + -2,1: + ind: -2,1 + tiles: eQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAA + version: 6 + -2,2: + ind: -2,2 + tiles: eQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAATQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAJgAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAATQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAATQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAATQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAATQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAA + version: 6 + -3,2: + ind: -3,2 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + -3,1: + ind: -3,1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAA + version: 6 + -3,0: + ind: -3,0 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAeQAAAAAA + version: 6 + -3,-1: + ind: -3,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAA + version: 6 + -2,-1: + ind: -2,-1 + tiles: eAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAA + version: 6 + -2,3: + ind: -2,3 + tiles: AAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAWQAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAASwAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAASwAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAeQAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAASwAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAASwAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAAeQAAAAAALAAAAAAALAAAAAAALAAAAAAALAAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAAeQAAAAAALAAAAAAALAAAAAAALAAAAAAALAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAAeQAAAAAAeQAAAAAALAAAAAAALAAAAAAALAAAAAAALAAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAAeQAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAA + version: 6 + -1,4: + ind: -1,4 + tiles: eQAAAAAAIgAAAAAAIgAAAAAASwAAAAAASwAAAAAAIgAAAAAAIgAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAIgAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAIgAAAAAAIgAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAALAAAAAAAIgAAAAAAIgAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAIgAAAAAAIgAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAALAAAAAAAIgAAAAAAIgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAIgAAAAAAIgAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAMgAAAAAAMgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAMgAAAAAAMgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAMgAAAAAACgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAMgAAAAAACgAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAMgAAAAAAMgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAMgAAAAAAMgAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAA + version: 6 + -2,4: + ind: -2,4 + tiles: WQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAeQAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAAeQAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAALAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAIgAAAAAAIgAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAALAAAAAAALAAAAAAALAAAAAAALAAAAAAALAAAAAAAeQAAAAAAIgAAAAAAIgAAAAAAIgAAAAAAIgAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAeQAAAAAALAAAAAAALAAAAAAALAAAAAAALAAAAAAALAAAAAAAeQAAAAAAIgAAAAAAIgAAAAAAIgAAAAAAIgAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAALAAAAAAALAAAAAAALAAAAAAALAAAAAAALAAAAAAAeQAAAAAAIgAAAAAAIgAAAAAAIgAAAAAAIgAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAALAAAAAAALAAAAAAALAAAAAAALAAAAAAALAAAAAAAeQAAAAAAIgAAAAAAIgAAAAAAIgAAAAAAIgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAALAAAAAAALAAAAAAALAAAAAAALAAAAAAALAAAAAAAeQAAAAAAIgAAAAAAIgAAAAAAIgAAAAAAIgAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAAeQAAAAAALAAAAAAALAAAAAAALAAAAAAALAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAABgAAAAAABgAAAAAABgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAABgAAAAAABgAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAA + version: 6 + -3,3: + ind: -3,3 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAASwAAAAAASwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAALAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAALAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAALAAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAALAAAAAAALAAAAAAAeQAAAAAAWQAAAAAA + version: 6 + -3,4: + ind: -3,4 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAALAAAAAAALAAAAAAAWQAAAAAAWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAANgAAAAAANgAAAAAAeQAAAAAAWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAEQAAAAAAEQAAAAAAWQAAAAAAWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAEQAAAAAAEQAAAAAAWQAAAAAAWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAANgAAAAAANgAAAAAAWQAAAAAAWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAABgAAAAAABgAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAABgAAAAAABgAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAABgAAAAAABgAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAABgAAAAAABgAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAABgAAAAAABgAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAABgAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAA + version: 6 + 0,4: + ind: 0,4 + tiles: WQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAALAAAAAAALAAAAAAALAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAXAAAAAAAXAAAAAAAeQAAAAAALAAAAAAALAAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAALAAAAAAALAAAAAAALAAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAXAAAAAAAXAAAAAAALAAAAAAALAAAAAAALAAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAALAAAAAAALAAAAAAALAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAXAAAAAAAXAAAAAAAeQAAAAAALAAAAAAALAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAXAAAAAAAXAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAMgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAMgAAAAAAMgAAAAAAMgAAAAAAMgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAMgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAMgAAAAAAMgAAAAAAMgAAAAAAMgAAAAAAMgAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAMgAAAAAAMgAAAAAAMgAAAAAAMgAAAAAAMgAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAMgAAAAAAMgAAAAAAMgAAAAAAMgAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAMgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAMgAAAAAAMgAAAAAAMgAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAACgAAAAAACgAAAAAACgAAAAAAKAAAAAAACgAAAAAACgAAAAAAMgAAAAAAMgAAAAAAMgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAACgAAAAAAMgAAAAAAMgAAAAAAMgAAAAAAMgAAAAAACgAAAAAACgAAAAAAMgAAAAAAMgAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAMgAAAAAAMgAAAAAAMgAAAAAAMgAAAAAAMgAAAAAAMgAAAAAACgAAAAAACgAAAAAAMgAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAACgAAAAAACgAAAAAACgAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAA + version: 6 + 1,4: + ind: 1,4 + tiles: JgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAaAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAAaAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAAaAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAA + version: 6 + 0,5: + ind: 0,5 + tiles: eAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 1,0: + ind: 1,0 + tiles: eQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAaAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAaAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAEQAAAAAANgAAAAAAEQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeAAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeAAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeAAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAeQAAAAAAeQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAeQAAAAAAeQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAA + version: 6 + 0,-1: + ind: 0,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAA + version: 6 + 1,-1: + ind: 1,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAANgAAAAAANgAAAAAAeQAAAAAANgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAAAAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAAAAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAABQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAA + version: 6 + 2,-1: + ind: 2,-1 + tiles: JgAAAAAAJgAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAANgAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAABQAAAAAABQAAAAAABQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAABQAAAAAABQAAAAAABQAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAATQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAATQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAATQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAA + version: 6 + 2,0: + ind: 2,0 + tiles: eQAAAAAATQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAdQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAdQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAdQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAATQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAATQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAdQAAAAAAdQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAdQAAAAAAdQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAA + version: 6 + 3,1: + ind: 3,1 + tiles: dQAAAAAAdQAAAAAAeQAAAAAAXAAAAAAAXAAAAAAAXAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAdQAAAAAAdQAAAAAAXAAAAAAAXAAAAAAAXAAAAAAAXAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAXAAAAAAAXAAAAAAAXAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAdQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAdQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAA + version: 6 + 3,0: + ind: 3,0 + tiles: dQAAAAAAdQAAAAAATQAAAAAATQAAAAAATQAAAAAAdQAAAAAAdQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAATQAAAAAATQAAAAAATQAAAAAAdQAAAAAAdQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAWQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAWQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAWQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAWQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAWQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAEQAAAAAAEQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAdQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAXAAAAAAAXAAAAAAAXAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAXAAAAAAAXAAAAAAAXAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAXAAAAAAAXAAAAAAAXAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAA + version: 6 + 3,2: + ind: 3,2 + tiles: eQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAMgAAAAAAMgAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAOgAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAOgAAAAAAOgAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAOgAAAAAAOgAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAOgAAAAAAeQAAAAAAWQAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAJgAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAOgAAAAAAeQAAAAAAOgAAAAAAeQAAAAAAeQAAAAAAPAAAAAAAeQAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdwAAAAAAeQAAAAAAeQAAAAAAOgAAAAAAOgAAAAAAOgAAAAAAeQAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAeQAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAeQAAAAAAOgAAAAAAOgAAAAAAOgAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAeQAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAeQAAAAAAOgAAAAAAOgAAAAAAOgAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAeQAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAeQAAAAAAOgAAAAAAOgAAAAAAOgAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAOgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAOgAAAAAAOgAAAAAAOgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAALAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAA + version: 6 + 3,-1: + ind: 3,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAABQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAABQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAATQAAAAAAeQAAAAAAfAAAAAAAfAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAATQAAAAAAeQAAAAAAeQAAAAAAfAAAAAAAfAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAATQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAdQAAAAAAdQAAAAAATQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAdQAAAAAAdQAAAAAATQAAAAAATQAAAAAATQAAAAAAdQAAAAAAdQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAATQAAAAAATQAAAAAATQAAAAAAdQAAAAAAdQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAA + version: 6 + 4,2: + ind: 4,2 + tiles: WQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAJgAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAJgAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAMgAAAAAAMgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAMgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAMgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAMgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAA + version: 6 + 4,1: + ind: 4,1 + tiles: WQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAALAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAJgAAAAAABQAAAAAABQAAAAAAJgAAAAAAJgAAAAAAeQAAAAAALAAAAAAAeQAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAJgAAAAAABQAAAAAABQAAAAAAJgAAAAAAJgAAAAAAeQAAAAAALAAAAAAALAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAJgAAAAAABQAAAAAABQAAAAAAdwAAAAAAdwAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAJgAAAAAAJgAAAAAABQAAAAAABQAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAeQAAAAAAdwAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAJgAAAAAABQAAAAAABQAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAJgAAAAAABQAAAAAABQAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAeQAAAAAA + version: 6 + 4,0: + ind: 4,0 + tiles: WQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAAAAAAAAAAAAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAWQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAAAAAAAAAAAAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAJgAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 4,-1: + ind: 4,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 3,-2: + ind: 3,-2 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAABQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAABQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAABQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAABQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAABQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 2,-2: + ind: 2,-2 + tiles: JgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAABQAAAAAABQAAAAAABQAAAAAANgAAAAAANgAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAABQAAAAAABQAAAAAABQAAAAAANgAAAAAANgAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAABQAAAAAABQAAAAAABQAAAAAANgAAAAAANgAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAANgAAAAAANgAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAABQAAAAAABQAAAAAABQAAAAAA + version: 6 + 2,4: + ind: 2,4 + tiles: eQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAfAAAAAAAfAAAAAAAeQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAgAAAAAAeQAAAAAAaAAAAAAAfAAAAAAAfAAAAAAAeQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAAgAAAAAAAgAAAAAAaAAAAAAAeQAAAAAAfAAAAAAAeQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 2,5: + ind: 2,5 + tiles: AAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAABQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + -2,-2: + ind: -2,-2 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAABQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + -3,-2: + ind: -3,-2 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAA + version: 6 + 1,5: + ind: 1,5 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 3,3: + ind: 3,3 + tiles: OgAAAAAAOgAAAAAAOgAAAAAAeQAAAAAALAAAAAAALAAAAAAALAAAAAAALAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAALAAAAAAALAAAAAAALAAAAAAALAAAAAAALAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAALAAAAAAALAAAAAAALAAAAAAALAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAALAAAAAAALAAAAAAALAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAWQAAAAAAWQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAWQAAAAAAeQAAAAAA + version: 6 + 4,3: + ind: 4,3 + tiles: WQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAAwAAAAAAAwAAAAAAAwAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAwAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAAwAAAAAAAwAAAAAAAwAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAAwAAAAAAAwAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAAwAAAAAAAwAAAAAAAwAAAAAAAwAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAAwAAAAAAAwAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAAwAAAAAAAwAAAAAAAwAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAwAAAAAAAwAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAAwAAAAAAAwAAAAAAAwAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAwAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAMgAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAA + version: 6 + 3,4: + ind: 3,4 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 4,4: + ind: 4,4 + tiles: eAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 5,3: + ind: 5,3 + tiles: eQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATQAAAAAATQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATQAAAAAATQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATQAAAAAATQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATQAAAAAATQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 5,2: + ind: 5,2 + tiles: JgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 5,1: + ind: 5,1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 5,0: + ind: 5,0 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + -1,-1: + ind: -1,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + -2,5: + ind: -2,5 + tiles: eAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + -1,5: + ind: -1,5 + tiles: eAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 1,-2: + ind: 1,-2 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAEQAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAEQAAAAAAJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAANgAAAAAANgAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAANgAAAAAANgAAAAAANgAAAAAAJgAAAAAANgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAANgAAAAAANgAAAAAAJgAAAAAANgAAAAAAJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeQAAAAAANgAAAAAANgAAAAAAJgAAAAAANgAAAAAAJgAAAAAA + version: 6 + 1,-3: + ind: 1,-3 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAANgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAANgAAAAAAJgAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAANgAAAAAAJgAAAAAAEQAAAAAAeQAAAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAANgAAAAAAJgAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAANgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAPgAAAAAAPgAAAAAAeQAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAEQAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAEQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAEQAAAAAAJgAAAAAA + version: 6 + 5,-1: + ind: 5,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + -3,5: + ind: -3,5 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 2,-3: + ind: 2,-3 + tiles: JgAAAAAANgAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgAAAAAANgAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgAAAAAANgAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgAAAAAANgAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgAAAAAANgAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 2,-4: + ind: 2,-4 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 1,-4: + ind: 1,-4 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAEQAAAAAA + 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: + - node: + angle: -1.5707963267948966 rad + color: '#FFFFFFFF' + id: Arrows + decals: + 4522: 34,0 + - node: + color: '#FFFFFFFF' + id: Arrows + decals: + 4521: 33,-2 + - node: + angle: -3.141592653589793 rad + color: '#4B709CFF' + id: ArrowsGreyscale + decals: + 4683: -6,20 + 4684: -5,20 + - node: + angle: -1.5707963267948966 rad + color: '#4B709CFF' + id: ArrowsGreyscale + decals: + 4687: -4,21 + 4688: -3,21 + - node: + angle: -1.5707963267948966 rad + color: '#9C2020FF' + id: ArrowsGreyscale + decals: + 4685: -4,19 + 4686: -3,19 + - node: + color: '#9C2020FF' + id: ArrowsGreyscale + decals: + 4681: -6,20 + 4682: -5,20 + - node: + color: '#FFFFFFFF' + id: Bot + decals: + 0: -14,9 + 1649: -14,11 + 1650: -13,11 + 1651: -14,14 + 1652: -14,14 + 1653: -13,14 + 1654: -13,13 + 1655: -14,13 + 1656: -10,14 + 1657: -10,13 + 1658: -9,13 + 1659: -9,14 + 1691: -20,20 + 1692: -20,21 + 1693: -20,22 + 1694: -21,22 + 1695: -21,21 + 1696: -21,23 + 1697: -20,23 + 1698: -18,23 + 1699: -18,22 + 1700: -18,21 + 1701: -18,20 + 1704: -4,3 + 1705: -4,4 + 1706: -4,5 + 1707: 0,3 + 1708: 0,4 + 1709: 0,5 + 1710: 4,3 + 1711: 4,4 + 1712: 4,5 + 1750: -26,66 + 1751: -26,67 + 1752: -26,69 + 1753: -26,70 + 1754: -26,71 + 1755: -23,71 + 1926: 43,19 + 1927: 44,20 + 1928: 44,21 + 1934: 40,19 + 1935: 40,20 + 1938: 32,16 + 1939: 33,15 + 1940: 32,15 + 1941: 33,16 + 1942: 35,13 + 1943: 36,13 + 1944: 36,17 + 1945: 35,17 + 1946: 36,14 + 1947: 34,13 + 1948: 34,14 + 1949: 34,16 + 1950: 32,14 + 2003: 57,0 + 2004: 57,-3 + 2005: 57,3 + 2210: 21,66 + 2211: 21,65 + 2225: 39,54 + 2226: 40,54 + 2227: 41,54 + 2231: 42,51 + 2232: 42,52 + 2281: 73,59 + 2282: 74,59 + 2283: 73,59 + 2284: 74,59 + 2434: 72,37 + 2435: 72,38 + 2436: 72,39 + 2450: 74,42 + 2451: 74,45 + 2901: -20,67 + 2902: -20,68 + 3802: 51,-6 + 4131: 33,54 + 4132: 34,55 + 4133: 35,54 + 4134: 34,53 + 4197: -33,19 + 4206: -27,7 + 4207: -27,7 + 4253: -36,27 + 4259: -26,31 + 4260: -26,33 + 4261: -26,35 + 4262: -26,37 + 4263: -15,37 + 4519: 33,0 + 4592: 27,3 + 4593: 24,2 + 4615: 35,-1 + 4616: 35,-2 + 4617: 37,-2 + - node: + angle: 3.141592653589793 rad + color: '#FFFFFFFF' + id: Bot + decals: + 1724: -1,8 + 1725: 0,8 + 1726: 1,8 + 1727: -2,10 + 1728: -1,10 + 1729: 0,10 + 1730: 1,10 + 1731: 2,10 + - node: + color: '#FFFFFFFF' + id: BotGreyscale + decals: + 642: -21,46 + 643: -21,44 + 644: -20,45 + 645: -22,45 + - node: + color: '#FFFFFFFF' + id: BotLeft + decals: + 2907: -26,68 + 4127: 33,55 + 4128: 35,53 + 4296: -21,37 + 4297: -21,36 + 4298: -22,35 + 4299: -23,35 + 4300: -19,32 + 4301: -19,31 + 4594: 23,2 + - node: + color: '#FFFFFFFF' + id: BotLeftGreyscale + decals: + 638: -22,46 + 639: -20,44 + 640: -22,44 + 641: -20,46 + - node: + color: '#FFFFFFFF' + id: BotRight + decals: + 2903: -10,62 + 2904: -10,64 + 2908: -22,69 + 2909: -22,70 + 4129: 35,55 + 4130: 33,53 + 4198: -28,10 + 4294: -19,36 + 4295: -19,37 + 4302: -21,31 + 4303: -21,32 + 4304: -22,33 + 4305: -23,33 + 4595: 25,2 + - node: + color: '#9C2020FF' + id: Box + decals: + 4679: -6,19 + 4680: -5,19 + - node: + color: '#FFFFFFFF' + id: Box + decals: + 1713: 0,3 + 1714: 0,4 + 1715: 0,5 + 1716: 4,3 + 1717: 4,4 + 1718: 4,5 + 1719: -4,5 + 1720: -4,4 + 1721: -4,3 + 1748: -21,63 + 1749: -21,64 + 2006: 45,-1 + 2007: 45,0 + 2008: 45,1 + 2433: 76,40 + 2446: 75,45 + 2447: 76,45 + 2448: 76,42 + 2449: 75,42 + 3803: 49,-7 + 4175: -34,17 + 4176: -32,17 + 4177: -30,18 + 4178: -31,19 + 4179: -32,20 + 4180: -34,21 + 4181: -27,19 + 4182: -27,19 + 4183: -25,19 + 4184: -26,18 + 4185: -27,16 + 4186: -27,16 + 4187: -28,16 + 4188: -29,16 + 4189: -31,13 + 4190: -34,13 + 4191: -34,9 + 4192: -32,7 + 4193: -29,10 + 4194: -28,7 + 4195: -26,10 + 4196: -26,14 + 4251: -34,26 + 4252: -35,27 + 4258: -28,28 + 4285: -21,35 + 4286: -20,35 + 4287: -19,35 + 4288: -19,33 + 4289: -20,33 + 4290: -21,33 + 4291: -22,34 + 4292: -20,36 + 4293: -20,32 + 4588: 27,1 + 4589: 27,2 + 4590: 28,3 + 4591: 28,3 + 4596: 25,1 + 4614: 34,1 + 4618: 36,-2 + 4619: 77,40 + 4620: 78,40 + - node: + angle: 3.141592653589793 rad + color: '#FFFFFFFF' + id: Box + decals: + 1732: -1,8 + 1733: 0,8 + 1734: 1,8 + 1735: 1,10 + 1736: 2,10 + 1737: 0,10 + 1738: -1,10 + 1739: -2,10 + - node: + color: '#4B709CFF' + id: BoxGreyscale + decals: + 4677: -6,21 + 4678: -5,21 + - node: + color: '#FFFFFFFF' + id: BoxGreyscale + decals: + 646: -21,45 + 2905: -33,52 + 4277: -14,35 + 4278: -14,33 + 4279: -14,29 + 4280: -14,27 + - node: + color: '#DE3A3A96' + id: BrickCornerOverlayNE + decals: + 2896: -17,68 + - node: + color: '#DE3A3A96' + id: BrickCornerOverlaySE + decals: + 2897: -17,67 + - node: + color: '#DE3A3A96' + id: BrickCornerOverlaySW + decals: + 2898: -18,67 + - node: + color: '#52B4E996' + id: BrickLineOverlayN + decals: + 3686: 21,21 + - node: + color: '#FFFFFFFF' + id: BrickTileDarkInnerSw + decals: + 4586: 25,1 + - node: + color: '#FFFFFFFF' + id: BrickTileDarkLineS + decals: + 4584: 23,1 + 4585: 24,1 + - node: + color: '#FFFFFFFF' + id: BrickTileSteelCornerNe + decals: + 659: -1,71 + 678: 2,77 + 713: 9,79 + 4646: 70,29 + - node: + color: '#FFFFFFFF' + id: BrickTileSteelCornerNw + decals: + 660: 2,71 + 681: 7,77 + 4647: 69,29 + - node: + color: '#FFFFFFFF' + id: BrickTileSteelCornerSe + decals: + 657: -1,74 + 683: 9,78 + 684: 8,77 + 685: 7,75 + 686: 6,74 + 699: 11,71 + 703: 8,70 + 4653: 70,24 + - node: + color: '#FFFFFFFF' + id: BrickTileSteelCornerSw + decals: + 658: 2,74 + 4652: 69,24 + - node: + color: '#FFFFFFFF' + id: BrickTileSteelEndN + decals: + 707: 2,77 + - node: + color: '#FFFFFFFF' + id: BrickTileSteelEndW + decals: + 705: 1,70 + 706: 1,75 + 710: 7,79 + - node: + color: '#FFFFFFFF' + id: BrickTileSteelInnerNe + decals: + 654: 4,75 + 672: -1,70 + 673: -2,71 + 679: 2,76 + 719: 5,71 + 4668: 69,24 + - node: + color: '#FFFFFFFF' + id: BrickTileSteelInnerNw + decals: + 653: 6,75 + 666: 3,71 + 667: 2,70 + 680: 7,76 + 682: 8,77 + 709: 2,75 + 720: 11,71 + 4669: 70,24 + - node: + color: '#FFFFFFFF' + id: BrickTileSteelInnerSe + decals: + 651: 4,77 + 668: -2,74 + 669: -1,75 + 688: 7,77 + 689: 8,78 + 693: 5,74 + 702: 8,71 + 774: 6,75 + 4667: 69,29 + - node: + color: '#FFFFFFFF' + id: BrickTileSteelInnerSw + decals: + 652: 6,77 + 670: 2,75 + 671: 3,74 + 711: 8,79 + 4666: 70,29 + - node: + color: '#FFFFFFFF' + id: BrickTileSteelLineE + decals: + 647: 4,76 + 655: -2,72 + 656: -2,73 + 687: 7,76 + 691: 5,73 + 692: 5,72 + 4654: 70,25 + 4655: 70,26 + 4656: 70,27 + 4657: 70,28 + 4662: 69,28 + 4663: 69,27 + 4664: 69,26 + 4665: 69,25 + - node: + color: '#FFFFFFFF' + id: BrickTileSteelLineN + decals: + 648: 5,75 + 661: 0,70 + 675: 3,76 + 676: 4,76 + 677: 6,76 + 694: 6,71 + 695: 7,71 + 696: 8,71 + 697: 9,71 + 698: 10,71 + 712: 8,79 + - node: + color: '#FFFFFFFF' + id: BrickTileSteelLineS + decals: + 650: 5,77 + 662: 0,75 + 663: 1,75 + 700: 10,71 + 701: 9,71 + 704: 7,70 + 714: 2,70 + 715: 3,70 + 716: 4,70 + 717: 6,70 + 718: 5,70 + - node: + color: '#FFFFFFFF' + id: BrickTileSteelLineW + decals: + 649: 6,76 + 664: 3,72 + 665: 3,73 + 674: 1,75 + 690: 8,78 + 708: 2,76 + 4648: 69,28 + 4649: 69,27 + 4650: 69,26 + 4651: 69,25 + 4658: 70,27 + 4659: 70,28 + 4660: 70,26 + 4661: 70,25 + - node: + color: '#334E6DC8' + id: BrickTileWhiteCornerNe + decals: + 886: -18,55 + 1339: -3,27 + 1399: 73,35 + 1457: 78,40 + 1480: 77,35 + 1508: 71,46 + 1517: 78,45 + 1524: 83,44 + 1531: 82,40 + 1560: 83,35 + 1616: 20,40 + 1632: 1,17 + 4563: 28,3 + 4602: 36,1 + 4859: 32,-37 + 4860: 31,-36 + 4867: 32,-44 + 4909: 32,-28 + 4938: 37,-27 + 4941: 38,-29 + 4948: 26,-32 + - node: + color: '#52B4E996' + id: BrickTileWhiteCornerNe + decals: + 227: 2,23 + 331: 8,45 + 342: 9,41 + 372: 18,45 + 446: 24,45 + 452: 28,45 + 454: 29,44 + 517: 23,28 + 530: 29,29 + 572: 29,36 + 1090: -4,60 + 4242: 5,35 + - node: + color: '#9FED5896' + id: BrickTileWhiteCornerNe + decals: + 2587: 50,48 + 2662: 42,49 + - node: + color: '#A4610696' + id: BrickTileWhiteCornerNe + decals: + 7: -9,14 + 35: -10,7 + 87: 12,13 + 90: 8,13 + 104: 4,17 + 124: 12,17 + 1567: 86,38 + 4112: -6,8 + - node: + color: '#D381C996' + id: BrickTileWhiteCornerNe + decals: + 1899: 40,13 + 2023: 48,31 + 2032: 50,27 + 2062: 50,11 + 2151: 60,22 + 2174: 59,17 + 3748: 54,-1 + 3752: 54,2 + 3762: 52,7 + 4534: 36,5 + - node: + color: '#D4D4D496' + id: BrickTileWhiteCornerNe + decals: + 2740: 72,21 + - node: + color: '#DE3A3A96' + id: BrickTileWhiteCornerNe + decals: + 868: -15,52 + 912: -27,55 + 987: -23,71 + 988: -22,70 + 998: -23,64 + 1002: -22,61 + 1035: -10,68 + 1042: -6,68 + 1067: -8,60 + 1101: 0,55 + 1569: 87,37 + 1679: -3,31 + 1980: 46,14 + 2410: 62,57 + 4221: -4,17 + - node: + color: '#EFB34196' + id: BrickTileWhiteCornerNe + decals: + 1159: -25,13 + 1189: -31,21 + 1204: -22,19 + 1215: -15,20 + 1314: -3,36 + 1325: -8,25 + 1389: -31,28 + 1393: -34,30 + - node: + zIndex: 100 + color: '#FA750096' + id: BrickTileWhiteCornerNe + decals: + 2869: 14,26 + - node: + color: '#334E6DC8' + id: BrickTileWhiteCornerNw + decals: + 897: -21,55 + 1411: 68,40 + 1451: 80,40 + 1476: 79,35 + 1481: 75,35 + 1507: 70,46 + 1522: 80,44 + 1617: 19,40 + 1621: 16,39 + 1635: -2,17 + 4562: 27,3 + 4855: 29,-36 + 4856: 28,-37 + 4868: 28,-44 + 4903: 28,-30 + 4906: 29,-28 + 4937: 36,-27 + - node: + color: '#52B4E996' + id: BrickTileWhiteCornerNw + decals: + 180: 7,35 + 188: 3,41 + 197: 4,45 + 274: 30,22 + 321: 10,45 + 357: 11,41 + 369: 15,45 + 412: 14,32 + 433: 21,35 + 440: 22,41 + 445: 23,45 + 449: 26,45 + 464: 25,41 + 512: 20,26 + 515: 21,28 + 526: 25,29 + 1088: -6,60 + 4244: 3,35 + - node: + color: '#9FED5896' + id: BrickTileWhiteCornerNw + decals: + 2590: 46,48 + 2602: 44,45 + 2608: 43,40 + - node: + color: '#A4610696' + id: BrickTileWhiteCornerNw + decals: + 2: -14,14 + 89: 10,13 + 95: 6,13 + 112: 6,17 + 146: -2,12 + 546: -16,9 + 1566: 84,38 + 4114: -8,8 + - node: + color: '#D381C996' + id: BrickTileWhiteCornerNw + decals: + 1886: 35,8 + 1892: 38,11 + 1995: 45,18 + 2012: 46,22 + 2021: 46,31 + 2050: 48,11 + 2056: 47,7 + 2073: 52,27 + 3733: 48,2 + 3737: 48,-1 + 4541: 30,5 + - node: + color: '#D4D4D496' + id: BrickTileWhiteCornerNw + decals: + 2535: 62,11 + 2542: 63,16 + - node: + color: '#DE3A3A96' + id: BrickTileWhiteCornerNw + decals: + 800: -17,49 + 851: -8,64 + 929: -30,55 + 947: -36,58 + 973: -26,64 + 984: -26,71 + 1030: -13,64 + 1039: -8,68 + 1064: -10,60 + 1986: 43,14 + 2423: 59,62 + 2757: 69,15 + 2895: -18,68 + 4210: 3,29 + 4224: -7,17 + 4695: -12,68 + - node: + color: '#EFB34196' + id: BrickTileWhiteCornerNw + decals: + 585: -6,21 + 591: -2,23 + 1185: -34,21 + 1208: -20,19 + 1213: -17,20 + 1218: -13,20 + 1226: -11,25 + 1233: -12,29 + 1281: -12,37 + 1287: -12,41 + 1354: -7,36 + - node: + zIndex: 100 + angle: 3.141592653589793 rad + color: '#FA750096' + id: BrickTileWhiteCornerNw + decals: + 2841: 14,24 + - node: + zIndex: 100 + angle: 7.853981633974483 rad + color: '#FA750096' + id: BrickTileWhiteCornerNw + decals: + 2840: 15,28 + - node: + color: '#334E6DC8' + id: BrickTileWhiteCornerSe + decals: + 890: -18,51 + 1341: -3,25 + 1344: -4,23 + 1429: 68,42 + 1434: 71,42 + 1443: 78,42 + 1469: 78,37 + 1526: 83,42 + 1538: 82,29 + 1558: 83,33 + 1586: 77,33 + 1593: 73,33 + 1613: 20,37 + 1641: 1,14 + 4631: 71,23 + 4858: 32,-38 + 4875: 32,-48 + 4915: 32,-34 + 4942: 38,-30 + 4950: 26,-34 + - node: + color: '#52B4E996' + id: BrickTileWhiteCornerSe + decals: + 207: 2,45 + 260: 23,23 + 332: 8,43 + 375: 18,42 + 377: 17,41 + 396: 14,37 + 471: 24,43 + 490: 29,31 + 495: 23,30 + 505: 19,28 + 1579: 86,30 + 2272: 9,39 + 4250: 5,31 + - node: + color: '#9FED5896' + id: BrickTileWhiteCornerSe + decals: + 2586: 50,47 + 2616: 48,37 + 2661: 42,47 + - node: + color: '#A4610696' + id: BrickTileWhiteCornerSe + decals: + 32: -10,4 + 48: -10,9 + 70: 4,3 + 84: 12,10 + 126: 12,15 + 560: 8,9 + 4121: -6,3 + - node: + color: '#D381C996' + id: BrickTileWhiteCornerSe + decals: + 1961: 41,15 + 2035: 50,24 + 2061: 50,9 + 2106: 56,24 + 2152: 60,20 + 2172: 59,15 + 3747: 54,-2 + 3751: 54,1 + 4535: 36,3 + - node: + color: '#DE3A3A96' + id: BrickTileWhiteCornerSe + decals: + 160: -4,13 + 165: 8,28 + 167: 7,26 + 869: -15,51 + 939: -32,55 + 993: -22,66 + 1003: -22,60 + 1044: -6,66 + 1051: -10,66 + 1069: -8,58 + 1102: 0,54 + 1677: -3,29 + 1982: 46,12 + 2409: 62,56 + 2751: 73,13 + - node: + color: '#EFB34196' + id: BrickTileWhiteCornerSe + decals: + 1129: -8,19 + 1134: -12,18 + 1139: -15,18 + 1143: -18,17 + 1149: -22,17 + 1154: -25,17 + 1162: -25,10 + 1167: -27,7 + 1307: -3,38 + 1381: -31,23 + 1577: 87,31 + - node: + zIndex: 100 + angle: 3.141592653589793 rad + color: '#FA750096' + id: BrickTileWhiteCornerSe + decals: + 2843: 10,28 + 2844: 9,26 + - node: + zIndex: 100 + angle: 6.283185307179586 rad + color: '#FA750096' + id: BrickTileWhiteCornerSe + decals: + 2845: 10,23 + - node: + color: '#334E6DC8' + id: BrickTileWhiteCornerSw + decals: + 893: -21,51 + 1346: -6,23 + 1414: 68,37 + 1433: 70,42 + 1438: 73,42 + 1447: 80,42 + 1465: 74,37 + 1543: 80,29 + 1582: 79,33 + 1588: 75,33 + 1623: 16,37 + 1638: -2,14 + 4560: 27,1 + 4608: 35,-2 + 4628: 68,23 + 4857: 28,-38 + 4879: 28,-48 + 4899: 28,-34 + 4944: 36,-30 + - node: + color: '#52B4E996' + id: BrickTileWhiteCornerSw + decals: + 254: 25,23 + 263: 20,23 + 298: 30,46 + 353: 11,37 + 364: 10,43 + 380: 15,43 + 489: 25,31 + 497: 21,30 + 1581: 84,30 + 4248: 3,31 + - node: + color: '#9FED5896' + id: BrickTileWhiteCornerSw + decals: + 2594: 46,47 + 2611: 43,37 + - node: + color: '#A4610696' + id: BrickTileWhiteCornerSw + decals: + 22: -16,5 + 31: -12,4 + 60: -4,3 + 111: 6,15 + 543: -14,11 + 559: 6,9 + 4119: -8,3 + - node: + color: '#D381C996' + id: BrickTileWhiteCornerSw + decals: + 1916: 38,15 + 1969: 48,13 + 2010: 46,20 + 2016: 46,24 + 2051: 48,9 + 2057: 47,6 + 2070: 52,24 + 3734: 48,1 + 3738: 48,-2 + - node: + color: '#D4D4D496' + id: BrickTileWhiteCornerSw + decals: + 2539: 63,13 + - node: + color: '#DE3A3A96' + id: BrickTileWhiteCornerSw + decals: + 161: -7,13 + 166: 6,26 + 849: -8,62 + 870: -16,51 + 918: -30,51 + 941: -34,55 + 944: -36,56 + 968: -26,60 + 979: -26,66 + 1047: -8,66 + 1071: -10,58 + 1674: -6,29 + 2406: 59,56 + 2427: 59,59 + 2755: 69,13 + 4212: 3,27 + 4697: -12,66 + - node: + color: '#EFB34196' + id: BrickTileWhiteCornerSw + decals: + 619: -2,45 + 636: -17,47 + 1135: -13,18 + 1145: -20,17 + 1173: -34,7 + 1231: -12,27 + 1237: -12,31 + 1285: -12,39 + - node: + zIndex: 100 + angle: 3.141592653589793 rad + color: '#FA750096' + id: BrickTileWhiteCornerSw + decals: + 2842: 13,28 + - node: + color: '#334E6DC8' + id: BrickTileWhiteEndE + decals: + 4606: 37,-2 + - node: + color: '#D381C996' + id: BrickTileWhiteEndE + decals: + 3744: 54,-4 + 3753: 54,4 + - node: + color: '#334E6DC8' + id: BrickTileWhiteEndN + decals: + 4553: 31,2 + 4600: 35,2 + 4633: 71,25 + 4644: 68,29 + - node: + color: '#EFB34196' + id: BrickTileWhiteEndN + decals: + 1197: -25,20 + - node: + color: '#D381C996' + id: BrickTileWhiteEndS + decals: + 1906: 40,6 + - node: + color: '#52B4E996' + id: BrickTileWhiteEndW + decals: + 194: 3,43 + - node: + color: '#D381C996' + id: BrickTileWhiteEndW + decals: + 3730: 48,4 + - node: + color: '#334E6DC8' + id: BrickTileWhiteInnerNe + decals: + 404: 16,35 + 407: 18,35 + 900: -19,55 + 1334: -8,27 + 1402: 70,35 + 1420: 66,35 + 1455: 78,38 + 1479: 77,34 + 1487: 68,43 + 1495: 71,43 + 1504: 68,45 + 1509: 71,45 + 1519: 78,43 + 1530: 81,40 + 1534: 82,37 + 1555: 81,32 + 1562: 81,35 + 1591: 73,34 + 1631: 1,16 + 1999: 49,17 + 2002: 49,15 + 2218: 30,49 + 2224: 28,49 + 2777: 66,27 + 2783: 66,22 + 4565: 28,1 + 4601: 35,1 + 4605: 36,-2 + 4638: 68,23 + 4863: 31,-37 + 4926: 29,-34 + 4927: 29,-31 + 4940: 37,-29 + - node: + color: '#52B4E996' + id: BrickTileWhiteInnerNe + decals: + 226: 1,23 + 229: 2,21 + 245: 16,22 + 329: 6,45 + 337: 5,41 + 345: 8,35 + 366: 13,44 + 390: 13,41 + 400: 13,35 + 411: 19,33 + 427: 12,31 + 447: 24,44 + 453: 28,44 + 483: 23,33 + 509: 18,25 + 520: 23,25 + 533: 29,26 + 534: 26,21 + 566: 23,36 + 573: 29,35 + 1093: -4,57 + - node: + zIndex: 100 + color: '#52B4E996' + id: BrickTileWhiteInnerNe + decals: + 2877: 18,21 + - node: + color: '#9FED5896' + id: BrickTileWhiteInnerNe + decals: + 2565: 57,35 + 2573: 50,40 + 2582: 48,45 + 2639: 33,35 + 2643: 33,39 + 2648: 33,45 + 2666: 40,49 + 2670: 37,49 + 2674: 24,49 + 2689: 10,49 + 2693: 6,49 + 2697: 6,53 + - node: + color: '#A4610696' + id: BrickTileWhiteInnerNe + decals: + 10: -9,11 + 39: -14,7 + 42: -11,7 + 92: 8,12 + 105: 4,16 + 122: 11,17 + 148: -3,11 + 4111: -6,7 + 4434: 8,17 + - node: + color: '#D381C996' + id: BrickTileWhiteInnerNe + decals: + 1898: 39,13 + 1920: 38,17 + 1991: 41,17 + 2024: 48,30 + 2030: 48,27 + 2039: 48,22 + 2045: 48,18 + 2063: 49,11 + 2099: 56,30 + 3746: 53,-4 + 3750: 53,-1 + 3754: 53,2 + 3758: 52,4 + 3761: 52,6 + 3765: 49,7 + 4531: 35,5 + - node: + color: '#D4D4D496' + id: BrickTileWhiteInnerNe + decals: + 2725: -2,64 + 2734: 66,21 + - node: + color: '#DE3A3A96' + id: BrickTileWhiteInnerNe + decals: + 153: -7,11 + 154: -5,11 + 807: -12,49 + 855: -7,64 + 867: -16,52 + 911: -28,55 + 924: -32,52 + 925: -32,51 + 953: -33,58 + 960: -29,58 + 989: -23,70 + 997: -24,64 + 1001: -23,61 + 1007: -24,58 + 1015: -18,58 + 1021: -16,58 + 1034: -11,68 + 1037: -10,67 + 1041: -7,68 + 1055: -12,64 + 1060: -12,62 + 1062: -12,59 + 1077: -12,56 + 1095: -4,56 + 1100: -1,55 + 1568: 86,37 + 1573: 87,34 + 1669: -8,30 + 1671: -8,29 + 1682: -6,31 + 1978: 44,14 + 2412: 60,57 + 2420: 60,60 + 2747: 71,15 + 2770: 67,11 + 3703: 70,39 + - node: + color: '#EFB34196' + id: BrickTileWhiteInnerNe + decals: + 1160: -26,13 + 1188: -32,21 + 1191: -31,19 + 1200: -25,18 + 1205: -22,18 + 1210: -19,19 + 1216: -15,19 + 1291: -11,41 + 1312: -5,36 + 1317: -3,33 + 1324: -10,25 + 1330: -8,20 + 1369: -9,31 + 1388: -31,27 + 1391: -34,28 + 4147: 33,49 + - node: + zIndex: 100 + color: '#FA750096' + id: BrickTileWhiteInnerNe + decals: + 2868: 13,26 + 2872: 12,22 + - node: + color: '#334E6DC8' + id: BrickTileWhiteInnerNw + decals: + 406: 18,35 + 408: 19,35 + 899: -19,55 + 1417: 69,35 + 1450: 81,40 + 1453: 80,38 + 1475: 80,35 + 1477: 79,34 + 1484: 75,34 + 1493: 70,43 + 1494: 73,43 + 1506: 70,45 + 1521: 80,43 + 1535: 84,37 + 1545: 80,30 + 1553: 84,32 + 1618: 19,39 + 1629: 3,16 + 1647: 3,14 + 2221: 30,49 + 2894: 32,49 + 4568: 31,1 + 4613: 35,1 + 4622: 68,27 + 4635: 71,23 + 4862: 29,-37 + 4904: 29,-30 + 4925: 31,-34 + 4930: 31,-31 + - node: + color: '#52B4E996' + id: BrickTileWhiteInnerNw + decals: + 181: 8,35 + 190: 5,41 + 195: 4,43 + 199: 6,45 + 237: 12,21 + 239: 16,22 + 251: 26,21 + 273: 30,21 + 275: 31,22 + 320: 11,45 + 350: 13,35 + 359: 13,41 + 368: 15,44 + 385: 16,41 + 403: 16,35 + 416: 18,32 + 429: 14,31 + 431: 21,33 + 434: 22,35 + 441: 23,41 + 450: 26,44 + 465: 26,41 + 484: 25,33 + 511: 20,25 + 513: 21,26 + 522: 25,25 + 575: 31,35 + 1084: -6,57 + - node: + zIndex: 100 + color: '#52B4E996' + id: BrickTileWhiteInnerNw + decals: + 2878: 18,22 + - node: + color: '#5E7C16A1' + id: BrickTileWhiteInnerNw + decals: + 536: 16,23 + - node: + color: '#9FED5896' + id: BrickTileWhiteInnerNw + decals: + 2558: 64,35 + 2567: 50,35 + 2598: 48,45 + 2607: 44,40 + 2667: 40,49 + 2672: 27,49 + 2675: 23,49 + 2690: 9,49 + - node: + color: '#A4610696' + id: BrickTileWhiteInnerNw + decals: + 12: -7,11 + 16: -12,9 + 41: -11,7 + 93: 10,12 + 97: 6,11 + 99: 3,12 + 109: 6,16 + 117: 10,17 + 133: 7,17 + 147: -2,11 + 1702: -4,7 + - node: + color: '#D381C996' + id: BrickTileWhiteInnerNw + decals: + 1889: 38,8 + 1893: 39,11 + 1918: 38,16 + 1925: 41,17 + 1994: 45,17 + 1997: 47,18 + 2013: 47,22 + 2046: 49,18 + 2049: 49,11 + 2054: 49,7 + 2075: 54,27 + 2081: 54,30 + 2122: 64,30 + 3729: 49,4 + 3731: 49,2 + 3735: 49,-1 + 4545: 35,5 + - node: + color: '#D4D4D496' + id: BrickTileWhiteInnerNw + decals: + 2537: 64,11 + 2543: 64,16 + 2715: 4,67 + 2719: 4,64 + - node: + color: '#DE3A3A96' + id: BrickTileWhiteInnerNw + decals: + 152: -3,11 + 155: -5,11 + 175: 8,29 + 799: -17,48 + 804: -13,49 + 823: 4,49 + 833: 4,58 + 852: -7,64 + 922: -30,52 + 931: -28,55 + 946: -36,57 + 950: -33,58 + 957: -29,58 + 965: -24,58 + 975: -24,64 + 1013: -18,58 + 1018: -16,58 + 1024: -13,58 + 1031: -12,64 + 1033: -11,68 + 1038: -8,67 + 1040: -7,68 + 1065: -10,59 + 1083: -6,56 + 1098: -1,56 + 1409: 71,39 + 1687: -6,30 + 1987: 44,14 + 2414: 60,57 + 2424: 60,62 + 2726: -2,64 + 2759: 71,15 + 2773: 70,11 + - node: + color: '#EFB34196' + id: BrickTileWhiteInnerNw + decals: + 584: -6,20 + 589: -2,21 + 592: -1,23 + 605: -1,33 + 616: -1,43 + 1187: -32,21 + 1198: -25,19 + 1202: -23,18 + 1207: -20,18 + 1209: -19,19 + 1212: -17,19 + 1219: -13,19 + 1221: -11,20 + 1227: -10,25 + 1234: -11,29 + 1280: -12,36 + 1282: -11,37 + 1288: -11,41 + 1356: -5,36 + 4145: 35,49 + 4146: 37,49 + 4215: -6,19 + - node: + zIndex: 100 + color: '#FA750096' + id: BrickTileWhiteInnerNw + decals: + 2864: 16,25 + 2871: 14,22 + 2887: 9,24 + - node: + color: '#334E6DC8' + id: BrickTileWhiteInnerSe + decals: + 880: -21,57 + 883: -19,57 + 1333: -9,27 + 1342: -4,25 + 1405: 70,38 + 1427: 66,42 + 1430: 68,43 + 1435: 71,43 + 1444: 78,43 + 1470: 78,38 + 1489: 68,45 + 1498: 71,45 + 1528: 81,42 + 1537: 82,31 + 1539: 81,29 + 1556: 81,33 + 1563: 81,36 + 1585: 77,34 + 1592: 73,34 + 1600: 66,33 + 1611: 18,37 + 1643: 1,16 + 1661: -8,29 + 2000: 49,17 + 2240: 41,33 + 2243: 39,33 + 2778: 66,27 + 4552: 30,3 + 4611: 34,0 + 4920: 29,-32 + 4928: 29,-29 + - node: + color: '#52B4E996' + id: BrickTileWhiteInnerSe + decals: + 205: 2,47 + 208: 1,45 + 258: 23,25 + 267: 18,25 + 316: 13,47 + 328: 6,47 + 336: 5,43 + 376: 17,42 + 391: 13,44 + 393: 14,41 + 399: 13,37 + 424: 12,34 + 470: 24,44 + 472: 23,43 + 479: 29,33 + 485: 23,32 + 501: 19,32 + 506: 18,28 + 579: 23,36 + 2271: 8,39 + - node: + zIndex: 100 + color: '#52B4E996' + id: BrickTileWhiteInnerSe + decals: + 2879: 16,24 + - node: + color: '#9FED5896' + id: BrickTileWhiteInnerSe + decals: + 2566: 57,36 + 2579: 50,45 + 2584: 48,47 + 2620: 48,42 + 2642: 33,38 + 2647: 33,43 + 2650: 33,47 + 2655: 37,47 + 2660: 41,47 + 2696: 6,52 + - node: + color: '#A4610696' + id: BrickTileWhiteInnerSe + decals: + 23: -15,5 + 40: -14,9 + 45: -11,9 + 49: -10,10 + 64: 1,3 + 65: -1,3 + 77: 4,10 + 80: 8,10 + 106: 4,16 + 118: 8,19 + 121: 11,19 + 4124: -6,6 + 4218: -6,19 + - node: + color: '#D381C996' + id: BrickTileWhiteInnerSe + decals: + 1913: 35,8 + 1960: 39,15 + 1962: 41,16 + 1964: 46,16 + 2027: 48,30 + 2037: 48,24 + 2040: 48,22 + 2060: 49,9 + 2067: 49,15 + 2095: 43,33 + 2096: 56,33 + 2100: 56,30 + 2109: 53,24 + 2153: 59,20 + 2250: 33,33 + 3740: 49,-4 + 3743: 52,-4 + 3745: 53,-4 + 3749: 53,-2 + 3755: 53,1 + 3756: 53,4 + 3760: 52,6 + 4538: 32,3 + - node: + color: '#D4D4D496' + id: BrickTileWhiteInnerSe + decals: + 2713: 6,67 + - node: + color: '#DE3A3A96' + id: BrickTileWhiteInnerSe + decals: + 159: -5,13 + 172: 7,28 + 537: 8,31 + 540: 7,31 + 865: -16,54 + 877: -17,57 + 904: -24,57 + 909: -28,57 + 923: -32,52 + 926: -32,53 + 937: -32,57 + 952: -33,59 + 959: -29,59 + 995: -24,66 + 1005: -24,60 + 1016: -18,59 + 1019: -16,59 + 1045: -7,66 + 1046: -7,66 + 1052: -10,67 + 1058: -12,62 + 1059: -12,64 + 1074: -12,59 + 1094: -4,57 + 1103: -1,54 + 1104: -5,54 + 1105: -9,54 + 1123: -12,54 + 1664: -7,33 + 1670: -8,31 + 1672: -8,30 + 1684: -6,33 + 1970: 42,16 + 1974: 44,16 + 2417: 60,60 + 2745: 71,17 + 2765: 67,17 + 4690: 43,12 + - node: + color: '#EFB34196' + id: BrickTileWhiteInnerSe + decals: + 1128: -8,20 + 1133: -12,19 + 1138: -15,19 + 1142: -18,18 + 1148: -22,18 + 1153: -25,18 + 1155: -26,17 + 1164: -27,10 + 1269: -15,42 + 1290: -11,42 + 1310: -5,38 + 1321: -10,27 + 1362: -9,38 + 1380: -32,23 + 1385: -31,27 + 1574: 87,34 + 1578: 86,31 + 1663: -5,33 + 3809: -37,25 + 3810: -37,25 + - node: + zIndex: 100 + angle: 29.845130209103036 rad + color: '#FA750096' + id: BrickTileWhiteInnerSe + decals: + 2854: 12,30 + - node: + zIndex: 100 + angle: 31.41592653589793 rad + color: '#FA750096' + id: BrickTileWhiteInnerSe + decals: + 2855: 12,30 + - node: + color: '#334E6DC8' + id: BrickTileWhiteInnerSw + decals: + 879: -17,57 + 882: -19,57 + 1350: -6,27 + 1406: 71,38 + 1415: 69,37 + 1432: 70,43 + 1437: 73,43 + 1446: 80,43 + 1448: 81,42 + 1463: 74,40 + 1464: 74,40 + 1472: 80,38 + 1491: 70,45 + 1496: 73,45 + 1497: 73,45 + 1536: 84,31 + 1542: 81,29 + 1544: 80,30 + 1548: 80,33 + 1549: 84,36 + 1583: 79,34 + 1589: 75,34 + 1625: 18,37 + 1628: 3,17 + 1646: 3,16 + 1864: 32,3 + 2239: 43,33 + 2241: 41,33 + 4559: 28,1 + 4599: 23,1 + 4610: 35,0 + 4625: 68,27 + 4922: 31,-32 + 4929: 31,-29 + - node: + color: '#52B4E996' + id: BrickTileWhiteInnerSw + decals: + 192: 5,43 + 201: 6,47 + 244: 18,24 + 253: 26,23 + 256: 25,25 + 265: 20,25 + 286: 31,33 + 297: 31,46 + 299: 30,47 + 323: 11,47 + 351: 13,37 + 361: 13,43 + 386: 16,43 + 387: 15,44 + 418: 18,34 + 468: 26,44 + 486: 25,32 + 499: 21,32 + 577: 25,36 + 2268: 8,37 + - node: + color: '#9FED5896' + id: BrickTileWhiteInnerSw + decals: + 2596: 48,47 + 2622: 50,42 + 2654: 37,47 + 2659: 41,47 + - node: + color: '#A4610696' + id: BrickTileWhiteInnerSw + decals: + 15: -12,11 + 17: -12,9 + 24: -15,5 + 29: -12,5 + 46: -11,9 + 55: -4,10 + 63: -1,3 + 66: 1,3 + 79: 6,10 + 110: 6,16 + 119: 10,19 + 1127: 13,19 + 1648: 3,14 + 1703: -4,6 + 4435: 7,19 + - node: + color: '#D381C996' + id: BrickTileWhiteInnerSw + decals: + 1908: 40,8 + 1915: 39,15 + 1917: 38,16 + 1963: 42,16 + 1966: 48,16 + 2009: 47,20 + 2015: 47,24 + 2047: 49,13 + 2052: 49,9 + 2069: 53,24 + 2080: 54,30 + 2084: 54,33 + 2119: 64,33 + 2123: 64,30 + 2160: 55,21 + 2245: 39,33 + 3727: 49,6 + 3732: 49,4 + 3736: 49,1 + 3739: 49,-2 + 3741: 50,-4 + 3742: 53,-4 + - node: + color: '#D4D4D496' + id: BrickTileWhiteInnerSw + decals: + 2538: 64,13 + 2716: 4,67 + - node: + color: '#DE3A3A96' + id: BrickTileWhiteInnerSw + decals: + 158: -5,13 + 171: 6,27 + 539: 10,31 + 541: 8,31 + 832: 4,58 + 837: 4,62 + 862: -13,54 + 876: -16,57 + 901: -21,57 + 905: -24,57 + 917: -29,51 + 919: -30,52 + 933: -28,57 + 942: -34,56 + 945: -36,57 + 951: -33,59 + 958: -29,59 + 967: -24,60 + 977: -24,66 + 1014: -18,59 + 1020: -16,59 + 1048: -7,66 + 1049: -8,67 + 1072: -10,59 + 1085: -6,57 + 1108: -1,54 + 1109: -5,54 + 1110: -9,54 + 1665: -6,33 + 1685: -5,33 + 1686: -6,30 + 1972: 44,16 + 1977: 46,16 + 2428: 60,59 + 2761: 71,17 + - node: + color: '#EFB34196' + id: BrickTileWhiteInnerSw + decals: + 581: -6,20 + 602: -1,33 + 615: -1,43 + 618: -1,45 + 621: -2,47 + 637: -17,48 + 1136: -13,19 + 1146: -20,18 + 1151: -23,18 + 1229: -10,27 + 1236: -11,31 + 1241: -12,36 + 1268: -15,42 + 1284: -11,39 + 1289: -11,42 + 1320: -9,27 + 1358: -5,38 + 1377: -32,23 + - node: + zIndex: 100 + color: '#FA750096' + id: BrickTileWhiteInnerSw + decals: + 2859: 15,30 + 2865: 16,28 + 2866: 16,25 + - node: + zIndex: 100 + angle: 14.137166941154069 rad + color: '#FA750096' + id: BrickTileWhiteInnerSw + decals: + 2853: 10,24 + - node: + color: '#334E6DC8' + id: BrickTileWhiteLineE + decals: + 884: -19,56 + 887: -18,54 + 888: -18,53 + 889: -18,52 + 1331: -8,28 + 1340: -3,26 + 1343: -4,24 + 1403: 70,36 + 1404: 70,37 + 1421: 66,36 + 1422: 66,37 + 1423: 66,38 + 1424: 66,39 + 1425: 66,40 + 1426: 66,41 + 1456: 78,39 + 1488: 68,44 + 1500: 71,44 + 1503: 68,46 + 1518: 78,44 + 1525: 83,43 + 1529: 81,41 + 1532: 82,39 + 1533: 82,38 + 1540: 81,28 + 1559: 83,34 + 1601: 66,32 + 1602: 66,31 + 1610: 18,36 + 1614: 20,38 + 1615: 20,39 + 1642: 1,15 + 1998: 49,18 + 2001: 49,16 + 2219: 30,50 + 2220: 30,51 + 2774: 66,30 + 2775: 66,29 + 2776: 66,28 + 2779: 66,26 + 2780: 66,24 + 2781: 66,25 + 2782: 66,23 + 4554: 31,1 + 4555: 31,0 + 4564: 28,2 + 4603: 36,0 + 4604: 36,-1 + 4632: 71,24 + 4639: 68,24 + 4640: 68,25 + 4641: 68,27 + 4642: 68,26 + 4643: 68,28 + 4872: 32,-45 + 4873: 32,-46 + 4874: 32,-47 + 4910: 32,-29 + 4911: 32,-30 + 4912: 32,-31 + 4913: 32,-32 + 4914: 32,-33 + 4919: 29,-33 + 4932: 29,-30 + 4939: 37,-28 + 4949: 26,-33 + - node: + color: '#52B4E996' + id: BrickTileWhiteLineE + decals: + 206: 2,46 + 209: 1,44 + 210: 1,42 + 211: 1,43 + 212: 1,41 + 213: 1,40 + 214: 1,39 + 215: 1,38 + 216: 1,36 + 217: 1,37 + 218: 1,32 + 219: 1,31 + 220: 1,30 + 221: 1,29 + 222: 1,28 + 223: 1,27 + 224: 1,26 + 225: 1,24 + 228: 2,22 + 241: 16,23 + 246: 18,23 + 259: 23,24 + 268: 18,24 + 317: 13,46 + 318: 13,45 + 327: 6,46 + 333: 8,44 + 338: 5,42 + 343: 9,40 + 344: 8,36 + 373: 18,44 + 374: 18,43 + 388: 13,43 + 389: 13,42 + 392: 14,40 + 394: 14,39 + 395: 14,38 + 398: 13,36 + 409: 19,35 + 410: 19,34 + 425: 12,33 + 426: 12,32 + 455: 29,43 + 456: 29,42 + 457: 29,41 + 458: 29,40 + 459: 29,39 + 460: 29,38 + 473: 23,42 + 474: 23,41 + 475: 23,40 + 476: 23,39 + 477: 23,38 + 478: 23,37 + 480: 23,34 + 488: 23,31 + 494: 29,32 + 502: 19,31 + 503: 19,30 + 504: 19,29 + 507: 18,27 + 508: 18,26 + 518: 23,27 + 519: 23,26 + 531: 29,28 + 532: 29,27 + 535: 26,22 + 565: 23,35 + 1091: -4,59 + 1092: -4,58 + 2269: 8,37 + 2270: 8,38 + 4236: 1,35 + 4237: 1,34 + 4238: 1,33 + 4239: 5,32 + 4240: 5,33 + 4241: 5,34 + - node: + zIndex: 100 + color: '#52B4E996' + id: BrickTileWhiteLineE + decals: + 2876: 18,22 + - node: + color: '#9FED5896' + id: BrickTileWhiteLineE + decals: + 2575: 50,41 + 2576: 50,42 + 2577: 50,43 + 2578: 50,44 + 2583: 48,46 + 2617: 48,39 + 2618: 48,40 + 2619: 48,41 + 2640: 33,36 + 2641: 33,37 + 2644: 33,40 + 2645: 33,41 + 2646: 33,42 + 2649: 33,46 + 2694: 6,50 + 2695: 6,51 + 2698: 6,54 + 2699: 6,55 + 2700: 6,56 + 2701: 6,57 + 2702: 6,59 + 2703: 6,58 + 2704: 6,60 + 2705: 6,61 + 2706: 6,62 + 2707: 6,63 + - node: + color: '#A4610696' + id: BrickTileWhiteLineE + decals: + 8: -9,13 + 9: -9,12 + 25: -15,4 + 33: -10,5 + 34: -10,6 + 38: -14,8 + 43: -11,8 + 71: 4,4 + 72: 4,5 + 73: 4,6 + 74: 4,7 + 75: 4,9 + 76: 4,8 + 85: 12,11 + 86: 12,12 + 100: 4,12 + 101: 4,13 + 102: 4,14 + 103: 4,15 + 114: 8,18 + 120: 11,18 + 125: 12,16 + 4122: -6,4 + 4123: -6,5 + - node: + color: '#D381C996' + id: BrickTileWhiteLineE + decals: + 1897: 39,14 + 1900: 40,12 + 1901: 40,11 + 1902: 40,10 + 1903: 40,9 + 1904: 40,8 + 1905: 40,7 + 1914: 35,7 + 1989: 41,18 + 2028: 48,29 + 2029: 48,28 + 2033: 50,26 + 2034: 50,25 + 2038: 48,23 + 2041: 48,21 + 2042: 48,20 + 2043: 48,19 + 2059: 49,8 + 2064: 49,12 + 2065: 49,13 + 2066: 49,14 + 2097: 56,32 + 2098: 56,31 + 2101: 56,29 + 2102: 56,28 + 2103: 56,27 + 2104: 56,26 + 2105: 56,25 + 2110: 53,23 + 2173: 59,16 + 2251: 33,32 + 2252: 33,30 + 2253: 33,31 + 2254: 33,29 + 2255: 33,28 + 2256: 33,27 + 2257: 33,26 + 2258: 33,25 + 2259: 33,24 + 2260: 33,23 + 2261: 33,22 + 2262: 33,21 + 3759: 52,5 + 4533: 35,6 + - node: + color: '#D4D4D496' + id: BrickTileWhiteLineE + decals: + 2710: 6,65 + 2712: 6,66 + 2741: 72,20 + 2742: 72,19 + - node: + color: '#DE3A3A96' + id: BrickTileWhiteLineE + decals: + 156: -5,12 + 162: -4,14 + 170: 7,27 + 173: 8,29 + 174: 8,30 + 806: -12,50 + 854: -7,65 + 866: -16,53 + 910: -28,56 + 913: -27,54 + 914: -27,53 + 915: -27,52 + 916: -27,51 + 938: -32,56 + 990: -22,69 + 991: -22,68 + 992: -22,67 + 996: -24,65 + 999: -23,63 + 1000: -23,62 + 1006: -24,59 + 1043: -6,67 + 1054: -12,65 + 1056: -12,63 + 1057: -12,61 + 1061: -12,60 + 1068: -8,59 + 1075: -12,58 + 1076: -12,57 + 1099: -1,56 + 1106: -1,53 + 1113: -9,53 + 1114: -5,53 + 1124: -12,53 + 1125: -12,52 + 1126: -12,51 + 1570: 87,36 + 1571: 87,35 + 1572: 87,35 + 1678: -3,30 + 1683: -6,32 + 1975: 44,15 + 1981: 46,13 + 2415: 60,58 + 2416: 60,59 + 2421: 60,61 + 2422: 60,62 + 2746: 71,16 + 2750: 73,14 + 2766: 67,16 + 2767: 67,15 + 2768: 67,14 + 2769: 67,13 + 3702: 70,40 + 4219: -4,15 + 4220: -4,16 + - node: + color: '#EFB34196' + id: BrickTileWhiteLineE + decals: + 1156: -26,16 + 1157: -26,15 + 1158: -26,14 + 1161: -25,12 + 1165: -27,9 + 1166: -27,8 + 1190: -31,20 + 1199: -25,19 + 1311: -5,37 + 1315: -3,35 + 1316: -3,34 + 1322: -10,26 + 1326: -8,24 + 1327: -8,23 + 1328: -8,22 + 1329: -8,21 + 1363: -9,37 + 1364: -9,35 + 1365: -9,36 + 1366: -9,34 + 1367: -9,33 + 1368: -9,32 + 1379: -32,22 + 1382: -31,24 + 1383: -31,25 + 1384: -31,26 + 1392: -34,29 + 1575: 87,33 + 1576: 87,32 + 4138: 35,51 + 4139: 35,50 + 4140: 35,52 + - node: + zIndex: 100 + color: '#FA750096' + id: BrickTileWhiteLineE + decals: + 2867: 13,27 + - node: + color: '#334E6DC8' + id: BrickTileWhiteLineN + decals: + 405: 17,35 + 898: -20,55 + 1335: -7,27 + 1336: -6,27 + 1337: -5,27 + 1338: -4,27 + 1400: 71,35 + 1401: 72,35 + 1410: 69,40 + 1418: 68,35 + 1419: 67,35 + 1454: 79,38 + 1458: 77,40 + 1459: 75,40 + 1460: 74,40 + 1478: 78,34 + 1482: 76,35 + 1483: 74,34 + 1485: 69,43 + 1486: 69,43 + 1499: 72,43 + 1505: 69,45 + 1510: 72,45 + 1511: 72,45 + 1512: 73,45 + 1513: 74,45 + 1514: 75,45 + 1515: 76,45 + 1516: 77,45 + 1520: 79,43 + 1523: 82,44 + 1554: 82,32 + 1561: 82,35 + 1619: 18,39 + 1620: 17,39 + 1630: 2,16 + 1633: 0,17 + 1634: -1,17 + 2216: 29,49 + 2217: 31,49 + 2432: 76,40 + 4566: 29,1 + 4567: 30,1 + 4612: 34,1 + 4623: 67,27 + 4636: 70,23 + 4637: 69,23 + 4861: 30,-36 + 4869: 29,-44 + 4870: 30,-44 + 4871: 31,-44 + 4907: 30,-28 + 4908: 31,-28 + 4924: 30,-34 + 4931: 30,-31 + 4947: 25,-32 + - node: + color: '#52B4E996' + id: BrickTileWhiteLineN + decals: + 189: 4,41 + 198: 5,45 + 230: 3,21 + 231: 5,21 + 232: 6,21 + 233: 7,21 + 234: 8,21 + 235: 9,21 + 236: 11,21 + 238: 15,22 + 240: 17,22 + 247: 20,21 + 248: 22,21 + 249: 23,21 + 250: 24,21 + 269: 25,21 + 270: 27,21 + 271: 28,21 + 272: 29,21 + 330: 7,45 + 339: 6,41 + 340: 7,41 + 341: 8,41 + 346: 10,35 + 347: 9,35 + 348: 11,35 + 349: 12,35 + 358: 12,41 + 367: 14,44 + 370: 16,45 + 371: 17,45 + 382: 14,41 + 383: 15,41 + 401: 14,35 + 402: 15,35 + 413: 15,32 + 414: 16,32 + 415: 17,32 + 428: 13,31 + 430: 20,33 + 448: 25,44 + 451: 27,45 + 481: 24,33 + 510: 19,25 + 516: 22,28 + 521: 24,25 + 527: 26,29 + 528: 27,29 + 529: 28,29 + 567: 24,36 + 568: 25,36 + 569: 26,36 + 570: 27,36 + 571: 28,36 + 574: 30,35 + 1089: -5,60 + 4243: 4,35 + 4523: 4,21 + - node: + zIndex: 100 + color: '#52B4E996' + id: BrickTileWhiteLineN + decals: + 2874: 10,21 + 2875: 19,21 + - node: + color: '#9FED5896' + id: BrickTileWhiteLineN + decals: + 2559: 63,35 + 2560: 62,35 + 2561: 61,35 + 2562: 59,35 + 2563: 60,35 + 2564: 58,35 + 2574: 49,35 + 2580: 50,45 + 2581: 49,45 + 2588: 49,48 + 2589: 48,48 + 2599: 47,45 + 2600: 46,45 + 2601: 45,45 + 2624: 48,35 + 2625: 47,35 + 2626: 46,35 + 2627: 45,35 + 2628: 44,35 + 2629: 43,35 + 2630: 42,35 + 2631: 41,35 + 2632: 40,35 + 2633: 39,35 + 2634: 38,35 + 2635: 37,35 + 2636: 35,35 + 2637: 36,35 + 2638: 34,35 + 2665: 41,49 + 2668: 39,49 + 2669: 38,49 + 2671: 26,49 + 2673: 25,49 + 2676: 22,49 + 2677: 21,49 + 2678: 21,49 + 2679: 20,49 + 2680: 19,49 + 2681: 18,49 + 2682: 17,49 + 2683: 16,49 + 2684: 15,49 + 2685: 14,49 + 2686: 13,49 + 2687: 12,49 + 2688: 11,49 + 2691: 8,49 + 2692: 7,49 + - node: + color: '#A4610696' + id: BrickTileWhiteLineN + decals: + 3: -13,14 + 4: -12,14 + 5: -11,14 + 6: -10,14 + 11: -8,11 + 18: -13,9 + 20: -14,9 + 36: -13,7 + 37: -12,7 + 88: 11,13 + 91: 9,12 + 94: 7,13 + 98: 5,11 + 107: 5,16 + 113: 9,17 + 142: -1,12 + 143: 0,12 + 144: 1,12 + 145: 2,12 + 545: -15,9 + 1565: 85,38 + 1627: 3,17 + 4113: -7,8 + 4126: -5,7 + - node: + color: '#D381C996' + id: BrickTileWhiteLineN + decals: + 1887: 36,8 + 1888: 37,8 + 1921: 39,17 + 1924: 40,17 + 1988: 42,17 + 1992: 43,17 + 1993: 44,17 + 1996: 46,18 + 2022: 47,31 + 2025: 49,30 + 2031: 49,27 + 2055: 48,7 + 2074: 53,27 + 2079: 53,30 + 2148: 57,22 + 2149: 58,22 + 2150: 59,22 + 2162: 54,21 + 3757: 53,4 + 3763: 51,7 + 3764: 50,7 + 4542: 32,5 + 4543: 33,5 + 4544: 34,5 + - node: + color: '#D4D4D496' + id: BrickTileWhiteLineN + decals: + 2536: 63,11 + 2720: 3,64 + 2721: 2,64 + 2722: 1,64 + 2723: 0,64 + 2724: -1,64 + 2735: 67,21 + 2736: 68,21 + 2737: 70,21 + 2738: 69,21 + 2739: 71,21 + - node: + color: '#DE3A3A96' + id: BrickTileWhiteLineN + decals: + 150: -6,11 + 151: -4,11 + 168: 6,29 + 169: 7,29 + 801: -16,49 + 802: -15,49 + 803: -14,49 + 808: -11,49 + 809: -10,49 + 810: -9,49 + 811: -8,49 + 812: -7,49 + 813: -6,49 + 814: -5,49 + 815: -4,49 + 816: -3,49 + 817: -2,49 + 818: -1,49 + 819: 0,49 + 820: 1,49 + 821: 2,49 + 822: 3,49 + 856: -6,64 + 857: -5,64 + 858: -3,64 + 921: -31,52 + 930: -29,55 + 948: -35,58 + 949: -34,58 + 954: -32,58 + 955: -31,58 + 956: -30,58 + 961: -28,58 + 962: -27,58 + 963: -26,58 + 964: -25,58 + 974: -25,64 + 985: -25,71 + 986: -24,71 + 1008: -22,58 + 1009: -23,58 + 1010: -21,58 + 1011: -20,58 + 1012: -19,58 + 1017: -17,58 + 1022: -15,58 + 1023: -14,58 + 1036: -9,67 + 1063: -11,59 + 1066: -9,60 + 1078: -11,56 + 1079: -10,56 + 1080: -9,56 + 1081: -8,56 + 1082: -7,56 + 1096: -3,56 + 1097: -2,56 + 1668: -7,30 + 1680: -4,31 + 1681: -5,31 + 1979: 45,14 + 2411: 61,57 + 2413: 59,57 + 2419: 61,60 + 2748: 72,15 + 2749: 73,15 + 2758: 70,15 + 2771: 68,11 + 2772: 69,11 + 4208: 4,29 + 4209: 5,29 + 4222: -6,17 + 4223: -5,17 + - node: + color: '#EFB34196' + id: BrickTileWhiteLineN + decals: + 583: -7,20 + 586: -5,21 + 587: -4,21 + 588: -3,21 + 604: -2,33 + 1186: -33,21 + 1192: -30,19 + 1193: -29,19 + 1194: -28,19 + 1195: -27,19 + 1196: -26,19 + 1201: -24,18 + 1206: -21,18 + 1211: -18,19 + 1214: -16,20 + 1217: -14,19 + 1220: -12,20 + 1279: -13,36 + 1301: -7,40 + 1302: -6,40 + 1303: -5,40 + 1304: -4,40 + 1313: -4,36 + 1323: -9,25 + 1355: -6,36 + 1387: -30,27 + 1390: -33,28 + 1660: -8,31 + 4136: 36,49 + 4137: 34,49 + - node: + zIndex: 100 + color: '#FA750096' + id: BrickTileWhiteLineN + decals: + 2870: 13,22 + 2882: 8,24 + 2883: 7,24 + - node: + color: '#334E6DC8' + id: BrickTileWhiteLineS + decals: + 878: -18,57 + 881: -20,57 + 891: -19,51 + 892: -20,51 + 1332: -8,27 + 1345: -5,23 + 1351: -7,27 + 1428: 67,42 + 1431: 69,43 + 1436: 72,43 + 1439: 74,42 + 1440: 75,42 + 1441: 76,42 + 1442: 77,42 + 1445: 79,43 + 1466: 75,37 + 1467: 76,37 + 1468: 77,37 + 1471: 79,38 + 1490: 69,45 + 1501: 72,45 + 1527: 82,42 + 1557: 82,33 + 1564: 82,36 + 1584: 78,34 + 1587: 76,33 + 1590: 74,34 + 1594: 72,33 + 1595: 71,33 + 1596: 70,33 + 1597: 69,33 + 1598: 68,33 + 1599: 67,33 + 1612: 19,37 + 1624: 17,37 + 1639: -1,14 + 1640: 0,14 + 1644: 2,16 + 1863: 31,3 + 2238: 42,33 + 2242: 40,33 + 4556: 29,-1 + 4557: 28,-1 + 4607: 36,-2 + 4624: 67,27 + 4629: 69,23 + 4630: 70,23 + 4864: 31,-38 + 4865: 30,-38 + 4866: 29,-38 + 4876: 31,-48 + 4877: 30,-48 + 4878: 29,-48 + 4916: 31,-34 + 4917: 30,-34 + 4918: 29,-34 + 4921: 30,-32 + 4933: 30,-29 + 4943: 37,-30 + 4951: 25,-34 + - node: + color: '#52B4E996' + id: BrickTileWhiteLineS + decals: + 183: 7,37 + 184: 6,37 + 193: 4,43 + 202: 5,47 + 203: 4,47 + 204: 3,47 + 242: 17,24 + 257: 24,25 + 261: 22,23 + 262: 21,23 + 266: 19,25 + 287: 30,33 + 300: 29,47 + 301: 28,47 + 302: 27,47 + 303: 26,47 + 304: 25,47 + 305: 24,47 + 306: 23,47 + 307: 22,47 + 309: 20,47 + 310: 19,47 + 311: 18,47 + 312: 17,47 + 313: 16,47 + 314: 15,47 + 315: 14,47 + 322: 10,47 + 324: 9,47 + 325: 8,47 + 326: 7,47 + 334: 7,43 + 335: 6,43 + 352: 12,37 + 362: 12,43 + 363: 11,43 + 378: 16,41 + 379: 15,41 + 381: 14,44 + 419: 17,34 + 420: 15,34 + 421: 16,34 + 422: 14,34 + 423: 13,34 + 469: 25,44 + 487: 24,32 + 491: 26,31 + 492: 27,31 + 493: 28,31 + 496: 22,30 + 500: 20,32 + 578: 24,36 + 1580: 85,30 + 4249: 4,31 + - node: + color: '#9FED5896' + id: BrickTileWhiteLineS + decals: + 2585: 49,47 + 2595: 47,47 + 2612: 44,37 + 2613: 45,37 + 2614: 46,37 + 2615: 47,37 + 2621: 49,42 + 2651: 34,47 + 2652: 35,47 + 2653: 36,47 + 2656: 38,47 + 2657: 39,47 + 2658: 40,47 + - node: + color: '#A4610696' + id: BrickTileWhiteLineS + decals: + 13: -13,11 + 19: -13,9 + 27: -14,5 + 28: -13,5 + 30: -11,4 + 47: -12,9 + 50: -9,10 + 51: -8,10 + 52: -6,10 + 53: -7,10 + 54: -5,10 + 61: -3,3 + 62: -2,3 + 67: 0,3 + 68: 2,3 + 69: 3,3 + 78: 5,10 + 81: 9,10 + 82: 10,10 + 83: 11,10 + 108: 5,16 + 115: 9,19 + 123: 12,19 + 127: 11,15 + 128: 10,15 + 129: 9,15 + 130: 8,15 + 131: 7,15 + 134: 6,19 + 135: 5,19 + 136: 3,19 + 137: 1,19 + 138: 2,19 + 139: 0,19 + 140: -1,19 + 141: -2,19 + 580: -3,19 + 4120: -7,3 + 4125: -5,6 + 4216: -4,19 + 4217: -5,19 + 4524: 4,19 + - node: + color: '#D381C996' + id: BrickTileWhiteLineS + decals: + 1909: 39,8 + 1910: 38,8 + 1911: 37,8 + 1912: 36,8 + 1959: 40,15 + 1965: 47,16 + 2026: 49,30 + 2036: 49,24 + 2058: 48,6 + 2078: 53,30 + 2085: 53,33 + 2086: 51,33 + 2087: 52,33 + 2088: 50,33 + 2089: 49,33 + 2090: 48,33 + 2091: 47,33 + 2092: 46,33 + 2093: 45,33 + 2094: 44,33 + 2107: 55,24 + 2108: 54,24 + 2111: 58,33 + 2112: 58,33 + 2113: 57,33 + 2114: 59,33 + 2115: 60,33 + 2116: 62,33 + 2117: 61,33 + 2118: 63,33 + 2161: 54,21 + 2171: 58,15 + 2244: 38,33 + 2246: 37,33 + 2247: 36,33 + 2248: 35,33 + 2249: 34,33 + 4536: 34,3 + 4537: 33,3 + - node: + color: '#DE3A3A96' + id: BrickTileWhiteLineS + decals: + 163: -6,13 + 538: 9,31 + 838: 3,62 + 839: 2,62 + 840: 1,62 + 841: 0,62 + 842: -1,62 + 843: -2,62 + 844: -3,62 + 845: -4,62 + 846: -5,62 + 847: -6,62 + 848: -7,62 + 863: -14,54 + 864: -15,54 + 902: -22,57 + 903: -23,57 + 906: -25,57 + 907: -26,57 + 908: -27,57 + 920: -31,52 + 934: -29,57 + 935: -30,57 + 936: -31,57 + 940: -33,55 + 943: -35,56 + 969: -25,60 + 978: -25,66 + 994: -23,66 + 1004: -23,60 + 1050: -9,67 + 1053: -11,66 + 1070: -9,58 + 1073: -11,59 + 1115: -4,54 + 1116: -2,54 + 1117: -3,54 + 1118: -6,54 + 1119: -7,54 + 1120: -8,54 + 1121: -10,54 + 1122: -11,54 + 1673: -7,30 + 1675: -5,29 + 1676: -4,29 + 1971: 43,16 + 1976: 45,16 + 1983: 44,12 + 1984: 45,12 + 2407: 60,56 + 2408: 61,56 + 2418: 61,60 + 2744: 72,17 + 2752: 72,13 + 2753: 71,13 + 2754: 70,13 + 2762: 70,17 + 2763: 69,17 + 2764: 68,17 + 4213: 4,27 + 4214: 5,27 + - node: + color: '#EFB34196' + id: BrickTileWhiteLineS + decals: + 582: -7,20 + 603: -2,33 + 622: -3,47 + 623: -4,47 + 624: -5,47 + 625: -7,47 + 626: -6,47 + 627: -8,47 + 628: -9,47 + 629: -10,47 + 630: -11,47 + 631: -12,47 + 632: -13,47 + 633: -14,47 + 634: -15,47 + 635: -16,47 + 1130: -9,19 + 1131: -10,19 + 1132: -11,19 + 1137: -14,19 + 1140: -16,18 + 1141: -17,18 + 1144: -19,17 + 1147: -21,18 + 1152: -24,18 + 1163: -26,10 + 1168: -28,7 + 1169: -29,7 + 1170: -30,7 + 1171: -31,7 + 1172: -33,7 + 1230: -11,27 + 1242: -13,36 + 1309: -4,38 + 1318: -3,33 + 1319: -4,33 + 1359: -6,38 + 1360: -7,38 + 1361: -8,38 + 1373: -33,23 + 1374: -35,25 + 1386: -30,27 + 1394: -36,25 + 4174: -32,7 + - node: + zIndex: 100 + color: '#FA750096' + id: BrickTileWhiteLineS + decals: + 2880: 10,30 + 2884: 7,23 + 2885: 8,23 + 2886: 9,23 + - node: + zIndex: 100 + angle: 31.41592653589793 rad + color: '#FA750096' + id: BrickTileWhiteLineS + decals: + 2856: 11,30 + 2857: 13,30 + 2858: 14,30 + - node: + color: '#334E6DC8' + id: BrickTileWhiteLineW + decals: + 885: -19,56 + 894: -21,52 + 895: -21,53 + 896: -21,54 + 1347: -6,24 + 1348: -6,25 + 1349: -6,26 + 1407: 71,37 + 1412: 68,39 + 1413: 68,38 + 1416: 69,36 + 1449: 81,41 + 1452: 80,39 + 1461: 74,39 + 1462: 74,38 + 1473: 80,37 + 1474: 80,36 + 1492: 70,44 + 1502: 73,44 + 1541: 81,28 + 1546: 80,31 + 1547: 80,32 + 1550: 84,35 + 1551: 84,34 + 1552: 84,33 + 1622: 16,38 + 1626: 18,36 + 1636: -2,16 + 1637: -2,15 + 1645: 3,15 + 2222: 30,50 + 2223: 30,51 + 4558: 28,0 + 4561: 27,2 + 4597: 23,-1 + 4598: 23,0 + 4609: 35,-1 + 4621: 68,28 + 4626: 68,25 + 4627: 68,24 + 4634: 71,24 + 4645: 68,26 + 4880: 28,-47 + 4881: 28,-46 + 4882: 28,-45 + 4900: 28,-33 + 4901: 28,-32 + 4902: 28,-31 + 4905: 29,-29 + 4923: 31,-33 + 4934: 31,-30 + 4935: 36,-29 + 4936: 36,-28 + - node: + color: '#52B4E996' + id: BrickTileWhiteLineW + decals: + 177: 7,32 + 178: 7,33 + 179: 7,34 + 182: 8,36 + 185: 3,38 + 186: 3,40 + 187: 3,39 + 191: 5,42 + 196: 4,44 + 200: 6,46 + 243: 18,23 + 252: 26,22 + 255: 25,24 + 264: 20,24 + 276: 31,23 + 277: 31,24 + 278: 31,25 + 279: 31,26 + 280: 31,27 + 281: 31,29 + 282: 31,28 + 283: 31,30 + 284: 31,31 + 285: 31,32 + 288: 31,37 + 289: 31,38 + 290: 31,39 + 291: 31,40 + 292: 31,42 + 293: 31,41 + 294: 31,43 + 295: 31,44 + 296: 31,45 + 319: 11,46 + 354: 11,38 + 355: 11,39 + 356: 11,40 + 360: 13,42 + 365: 10,44 + 384: 16,42 + 397: 13,36 + 417: 18,33 + 432: 21,34 + 435: 22,37 + 436: 22,36 + 437: 22,38 + 438: 22,39 + 439: 22,40 + 442: 23,42 + 443: 23,43 + 444: 23,44 + 461: 25,38 + 462: 25,39 + 463: 25,40 + 466: 26,42 + 467: 26,43 + 482: 25,34 + 498: 21,31 + 514: 21,27 + 523: 25,26 + 524: 25,27 + 525: 25,28 + 542: 7,31 + 564: 25,35 + 576: 31,36 + 1086: -6,58 + 1087: -6,59 + 4245: 3,34 + 4246: 3,33 + 4247: 3,32 + - node: + zIndex: 100 + color: '#52B4E996' + id: BrickTileWhiteLineW + decals: + 2873: 12,22 + - node: + color: '#9FED5896' + id: BrickTileWhiteLineW + decals: + 2546: 64,46 + 2548: 64,45 + 2549: 64,44 + 2550: 64,43 + 2551: 64,42 + 2552: 64,41 + 2553: 64,40 + 2554: 64,39 + 2555: 64,38 + 2556: 64,37 + 2557: 64,36 + 2568: 50,36 + 2569: 50,37 + 2570: 50,39 + 2571: 50,40 + 2572: 50,38 + 2597: 48,46 + 2603: 44,44 + 2604: 44,43 + 2605: 44,42 + 2606: 44,41 + 2609: 43,39 + 2610: 43,38 + 2623: 50,41 + - node: + color: '#A4610696' + id: BrickTileWhiteLineW + decals: + 14: -12,10 + 21: -16,6 + 26: -15,4 + 44: -11,8 + 56: -4,9 + 57: -4,8 + 58: -4,5 + 59: -4,4 + 96: 6,12 + 116: 10,18 + 132: 7,18 + 149: 3,13 + 544: -14,13 + 547: -16,7 + 4115: -8,7 + 4116: -8,6 + 4117: -8,5 + 4118: -8,4 + - node: + color: '#D381C996' + id: BrickTileWhiteLineW + decals: + 1885: 35,7 + 1890: 38,9 + 1891: 38,10 + 1894: 39,12 + 1895: 39,13 + 1896: 39,14 + 1907: 40,7 + 1919: 38,17 + 1967: 48,15 + 1968: 48,14 + 1990: 41,18 + 2011: 46,21 + 2014: 47,23 + 2017: 46,28 + 2018: 46,27 + 2019: 46,29 + 2020: 46,30 + 2044: 47,19 + 2048: 49,12 + 2053: 49,8 + 2068: 53,23 + 2071: 52,25 + 2072: 52,26 + 2076: 54,28 + 2077: 54,29 + 2082: 54,31 + 2083: 54,32 + 2120: 64,32 + 2121: 64,31 + 2124: 64,29 + 2125: 64,28 + 2126: 64,27 + 2127: 64,26 + 2128: 64,25 + 2129: 64,24 + 2130: 64,23 + 2131: 64,22 + 2132: 64,21 + 2133: 64,20 + 2134: 64,19 + 2159: 55,20 + 3728: 49,5 + 4532: 35,6 + 4539: 30,3 + 4540: 30,4 + - node: + color: '#D4D4D496' + id: BrickTileWhiteLineW + decals: + 2533: 62,9 + 2534: 62,10 + 2540: 63,14 + 2541: 63,15 + 2544: 64,17 + 2714: 4,68 + 2717: 4,66 + 2718: 4,65 + - node: + color: '#DE3A3A96' + id: BrickTileWhiteLineW + decals: + 157: -5,12 + 164: -7,14 + 176: 8,30 + 805: -13,50 + 824: 4,50 + 825: 4,51 + 826: 4,52 + 827: 4,53 + 828: 4,54 + 829: 4,55 + 830: 4,56 + 831: 4,57 + 834: 4,59 + 835: 4,60 + 836: 4,61 + 850: -8,63 + 853: -7,65 + 859: -13,51 + 860: -13,52 + 861: -13,53 + 871: -16,52 + 872: -16,53 + 873: -16,54 + 874: -16,55 + 875: -16,56 + 927: -30,53 + 928: -30,54 + 932: -28,56 + 966: -24,59 + 970: -26,61 + 971: -26,62 + 972: -26,63 + 976: -24,65 + 980: -26,67 + 981: -26,68 + 982: -26,69 + 983: -26,70 + 1025: -13,59 + 1026: -13,61 + 1027: -13,60 + 1028: -13,62 + 1029: -13,63 + 1032: -12,65 + 1107: -1,53 + 1111: -9,53 + 1112: -5,53 + 1408: 71,40 + 1666: -6,32 + 1667: -6,31 + 1973: 44,15 + 1985: 43,13 + 2425: 59,61 + 2426: 59,60 + 2429: 60,58 + 2756: 69,14 + 2760: 71,16 + 4211: 3,28 + 4225: -7,16 + 4226: -7,15 + 4689: 43,12 + 4696: -12,67 + - node: + zIndex: 100 + color: '#DE3A3A96' + id: BrickTileWhiteLineW + decals: + 2881: 10,30 + - node: + color: '#EFB34196' + id: BrickTileWhiteLineW + decals: + 590: -2,22 + 593: -1,24 + 594: -1,25 + 595: -1,26 + 596: -1,27 + 597: -1,28 + 598: -1,29 + 599: -1,30 + 600: -1,32 + 601: -1,31 + 606: -1,34 + 607: -1,35 + 608: -1,36 + 609: -1,37 + 610: -1,38 + 611: -1,39 + 612: -1,40 + 613: -1,41 + 614: -1,42 + 617: -1,44 + 620: -2,46 + 1150: -23,17 + 1174: -34,10 + 1175: -34,11 + 1176: -34,12 + 1177: -34,13 + 1178: -34,14 + 1179: -34,15 + 1180: -34,16 + 1181: -34,18 + 1182: -34,17 + 1183: -34,19 + 1184: -34,20 + 1203: -23,19 + 1222: -11,21 + 1223: -11,22 + 1224: -11,23 + 1225: -11,24 + 1228: -10,26 + 1232: -12,28 + 1235: -11,30 + 1238: -12,33 + 1239: -12,34 + 1240: -12,35 + 1283: -11,38 + 1286: -12,40 + 1352: -7,34 + 1353: -7,35 + 1357: -5,37 + 1378: -32,22 + 1662: -7,33 + 4141: 35,52 + 4142: 35,52 + 4143: 35,51 + 4144: 35,50 + 4172: -34,8 + 4173: -34,9 + - node: + zIndex: 100 + color: '#FA750096' + id: BrickTileWhiteLineW + decals: + 2860: 15,29 + 2861: 16,24 + 2862: 16,27 + 2863: 16,26 + - node: + zIndex: 100 + angle: 6.283185307179586 rad + color: '#FA750096' + id: BrickTileWhiteLineW + decals: + 2846: 9,25 + 2847: 10,27 + - node: + zIndex: 100 + angle: 10.995574287564276 rad + color: '#FA750096' + id: BrickTileWhiteLineW + decals: + 2848: 11,28 + 2849: 12,28 + - node: + zIndex: 100 + angle: 14.137166941154069 rad + color: '#FA750096' + id: BrickTileWhiteLineW + decals: + 2850: 13,24 + 2851: 12,24 + 2852: 11,24 + - node: + color: '#FFFFFFFF' + id: BushDThree + decals: + 724: -2,72 + 725: -1,74 + 726: 0,75 + 727: 7,72 + 728: 9,74 + 729: 8,73 + - node: + color: '#FFFFFFFF' + id: Busha1 + decals: + 775: 6.9581475,77.98995 + 776: 9.035699,76.69938 + 777: 9.891987,76.657295 + 778: 9.442786,76.13826 + - node: + color: '#FFFFFFFF' + id: Bushb2 + decals: + 721: 0,70 + 722: -1,71 + 723: -2,75 + 2892: 33,18 + - node: + color: '#FFFFFFFF' + id: Bushd4 + decals: + 2893: 32,18 + - node: + color: '#FFFFFFFF' + id: Bushf1 + decals: + 743: 8.701018,72.975945 + 744: 8.097405,73.84567 + 745: 9.304631,72.83566 + 746: 8.300048,72.33791 + 747: 8.987885,71.73471 + 748: 9.437085,71.98721 + 749: 9.830135,78.25876 + 750: 10.321448,77.9782 + 751: 9.984549,77.43111 + - node: + color: '#FFFFFFFF' + id: Bushh1 + decals: + 730: 6.1860366,72.687935 + 731: 7.196737,73.31919 + 732: 6.8387804,72.87731 + 733: 6.988714,72.370224 + 734: 6.2306886,72.054596 + 735: -0.7916156,70.24648 + 736: -1.240816,70.372734 + 737: -0.84776556,69.79759 + 738: -2.1251793,74.06045 + 739: -1.3110031,74.38309 + 740: 2.0526922,78.32553 + 741: 2.3053677,78.14317 + 742: 2.4597797,78.059006 + 779: 9.063538,70.10648 + 780: 9.990012,70.232735 + 781: 9.147762,69.7137 + 782: 9.428513,70.17662 + - node: + color: '#FFFFFFFF' + id: Bushi2 + decals: + 755: 8.80135,75.70484 + 756: 9.826087,75.46636 + - node: + color: '#FFFFFFFF' + id: Bushi3 + decals: + 752: 8.313764,75.95757 + 753: 8.9173765,75.045525 + 754: 8.103201,75.6347 + - node: + color: '#FFFFFFFF' + id: Bushi4 + decals: + 757: 9.741834,74.371445 + 758: 9.854134,73.249214 + 759: 3.192065,77.86268 + 760: 3.22014,77.3298 + 761: 3.7254906,77.30172 + 762: 3.8097153,78.04227 + 763: -1.864522,70.719055 + 764: -1.9347098,70.10183 + 765: -1.9768219,69.86335 + 766: -2.1171975,73.178085 + 767: -2.10316,72.81336 + - node: + color: '#FFFFFFFF' + id: Bushm1 + decals: + 794: 11.070395,70.46965 + 795: 11.870534,70.91241 + 796: 12.389921,70.85629 + 797: 11.828421,70.81421 + 798: 12.067059,71.24908 + - node: + color: '#FFFFFFFF' + id: Bushm2 + decals: + 768: -0.9441774,75.07202 + 769: 5.5321712,71.8456 + 770: 5.7146583,72.65922 + 771: 6.739396,74.076035 + 772: 7.4693475,74.062004 + 773: 8.916599,73.92723 + - node: + color: '#FFFFFFFF' + id: Bushn1 + decals: + 783: 12.320795,69.86638 + 784: 12.054083,70.24513 + 785: 11.661032,69.922485 + 786: 7.817417,72.18015 + 787: 8.912344,73.62502 + 788: 8.336805,74.71921 + 789: -2.2574775,71.69938 + 790: -1.5696402,71.096176 + 791: -2.0328777,74.126205 + 792: 10.204514,75.144905 + 793: 10.747977,69.92256 + 4807: -33.747612,71.87493 + 4808: -30.082,72.072716 + 4809: -29.936958,75.06785 + 4810: -33.912235,74.93599 + - node: + angle: -1.5707963267948966 rad + color: '#FFFFFFFF' + id: Caution + decals: + 3793: 49,-3 + - node: + color: '#FFFFFFFF' + id: Caution + decals: + 3792: 50,-4 + - node: + angle: 1.5707963267948966 rad + color: '#FFFFFFFF' + id: Caution + decals: + 3794: 51,-3 + - node: + color: '#DE3A3A96' + id: Delivery + decals: + 2899: -18,65 + 2900: -17,65 + - node: + color: '#FFFFFFFF' + id: Delivery + decals: + 1951: 32,13 + 1952: 33,13 + 1953: 33,14 + 2228: 39,54 + 2229: 40,54 + 2230: 41,54 + 2437: 72,40 + 2452: 78,45 + 4135: 34,54 + 4199: -28,12 + 4200: -28,14 + 4201: -34,6 + 4202: -35,7 + 4203: -30,6 + 4204: -35,11 + 4205: -35,15 + 4254: -37,25 + 4255: -37,27 + 4256: -31,24 + 4257: -36,28 + 4264: -22,28 + 4265: -21,28 + 4266: -20,25 + 4267: -21,25 + 4268: -19,25 + 4269: -18,25 + 4270: -18,28 + 4271: -19,29 + 4272: -16,30 + 4273: -16,31 + 4274: -15,34 + 4275: -17,35 + 4276: -17,33 + 4281: -17,31 + 4282: -17,30 + 4283: -17,37 + 4284: -17,38 + - node: + color: '#951710FF' + id: Dirt + decals: + 2799: 27,65 + 2800: 28,65 + 2801: 28,64 + 2802: 28,64 + 2803: 28,65 + 2804: 27,65 + 2805: 28,65 + 2806: 28,65 + 2807: 28,65 + 2808: 29,65 + 2809: 29,65 + 2810: 29,65 + 2814: 27,63 + 2815: 27,63 + 2816: 27,62 + 2817: 26,62 + 2818: 26,62 + 2819: 27,62 + 2820: 28,62 + 2821: 28,61 + 2822: 28,61 + 2823: 26,65 + 2824: 27,64 + 2825: 27,64 + 2826: 26,64 + 2827: 26,64 + 2828: 29,64 + 2829: 29,63 + 2830: 29,63 + 2831: 29,62 + 2832: 29,62 + 2833: 28,62 + 2834: 28,63 + 2835: 29,64 + - node: + cleanable: True + color: '#FFFFFFFF' + id: Dirt + decals: + 1756: 15,5 + 1757: 15,4 + 1758: 14,3 + 1759: 14,3 + 1760: 15,1 + 1761: 15,1 + 1762: 16,2 + 1763: 16,3 + 1764: 16,2 + 1765: 16,2 + 1766: 14,6 + 1767: 13,6 + 1768: 13,7 + 1769: 15,7 + 1770: 15,8 + 1771: 12,8 + 1772: 11,8 + 1773: 11,7 + 1774: 10,8 + 1775: 8,7 + 1776: 7,7 + 1777: 7,7 + 1778: 7,7 + 1779: 6,7 + 1780: 6,6 + 1781: 7,4 + 1782: 8,4 + 1783: 9,4 + 2971: 42,21 + 2972: 42,21 + 2973: 40,21 + 2974: 40,21 + 2975: 40,20 + 2976: 41,20 + 2977: 41,19 + 2978: 40,19 + 2979: 43,19 + 2980: 43,20 + 3040: 49,11 + 3041: 50,11 + 3042: 50,10 + 3073: 60,38 + 3180: 68,52 + 3181: 68,50 + 3182: 69,50 + 3183: 70,51 + 3184: 69,51 + 3185: 70,50 + 3186: 70,50 + 3391: -19,68 + 3392: -19,67 + 3393: -15,68 + 3394: -16,69 + 3395: -18,69 + 3396: -17,67 + 3397: -16,66 + 3503: 16,44 + 3504: 15,43 + 3514: 26,42 + 3515: 28,42 + 3516: 29,42 + 3517: 29,40 + 3518: 27,44 + 3519: 28,45 + 3540: 27,27 + 3541: 28,27 + 3542: 28,26 + 3543: 28,26 + 3544: 29,27 + 3545: 26,29 + 3546: 26,27 + 3547: 26,26 + 3548: 27,28 + 3549: 26,25 + 3550: 26,24 + 3551: 25,24 + 3552: 25,24 + 3553: 26,23 + 3554: 23,25 + 3555: 23,27 + 3556: 23,27 + 3557: 21,25 + 3558: 22,24 + 3559: 22,24 + 3560: 22,24 + 3561: 19,24 + 3562: 20,24 + 3563: 21,26 + 3564: 22,27 + 3565: 23,25 + 3566: 23,25 + 3567: 23,24 + 4030: -15,-1 + 4031: -15,-1 + 4032: -17,0 + 4033: -15,1 + 4034: -15,2 + 4035: -15,-1 + 4036: -17,-2 + 4037: -14,-2 + 4038: -14,-2 + 4039: -14,0 + 4040: -16,0 + 4041: -16,-2 + 4042: -17,-1 + 4043: -18,1 + 4044: -18,2 + 4045: -18,0 + 4046: -17,-1 + 4047: -18,-2 + 4048: -15,2 + 4049: -15,3 + 4050: -14,3 + 4051: -15,2 + 4052: -15,4 + 4053: -15,5 + 4054: -15,6 + 4055: -15,6 + 4056: -16,5 + 4057: -16,7 + 4058: -15,9 + 4059: -14,9 + 4060: -14,6 + 4061: -13,6 + 4062: -15,7 + 4063: -15,6 + 4064: -15,7 + 4065: -18,8 + 4066: -18,8 + 4067: -18,7 + 4068: -19,7 + 4069: -18,7 + 4070: -18,6 + 4071: -18,6 + 4072: -15,7 + 4073: -15,8 + 4074: -15,8 + 4075: -13,5 + 4076: -12,4 + 4077: -11,6 + 4078: -11,5 + 4079: -11,4 + 4080: -10,4 + 4081: -11,6 + 4082: -11,7 + 4083: -11,8 + 4084: -11,9 + 4085: -11,10 + 4086: -11,11 + 4087: -13,12 + 4088: -13,12 + 4089: -10,9 + 4090: -11,12 + 4091: -12,13 + 4092: -12,13 + 4093: -12,11 + 4094: -13,12 + 4095: -8,12 + 4096: -11,12 + 4097: -12,12 + 4098: -9,11 + 4099: -8,10 + 4100: -11,11 + 4101: -12,11 + 4102: -10,10 + 4103: -7,10 + 4104: -11,13 + 4105: -12,14 + 4106: -11,12 + 4107: -10,12 + 4108: -10,11 + 4109: -10,12 + 4110: -10,11 + - node: + color: '#951710FF' + id: DirtHeavy + decals: + 2785: 28,64 + 2786: 28,64 + 2787: 28,64 + 2788: 28,64 + 2789: 28,63 + 2790: 28,63 + 2811: 27,63 + 2812: 27,63 + 2813: 27,63 + - node: + color: '#FFFFFFFF' + id: DirtHeavy + decals: + 3687: 69,61 + 3688: 73,61 + 3689: 75,60 + 3690: 75,59 + 3691: 78,60 + 3692: 78,61 + 3693: 75,61 + 3694: 75,62 + 3695: 74,61 + - node: + cleanable: True + color: '#FFFFFFFF' + id: DirtHeavy + decals: + 1784: 6,4 + 1785: 7,3 + 1786: 7,3 + 1787: 6,3 + 1788: 6,4 + 1789: 7,4 + 1790: 9,4 + 1791: 9,3 + 1792: 9,4 + 1793: 6,2 + 1794: 6,2 + 1795: 7,3 + 1796: 7,3 + 1797: 12,7 + 1798: 12,6 + 1799: 13,7 + 1800: 14,8 + 1801: 13,7 + 1802: 14,6 + 1803: 14,7 + 1804: 13,7 + 1805: 16,5 + 1806: 16,6 + 1807: 13,6 + 1808: 13,5 + 1809: 15,6 + 1810: 15,3 + 1811: 14,2 + 1812: 15,2 + 1813: 15,2 + 1814: 15,1 + 1815: 14,1 + 1816: 15,2 + 1817: 12,4 + 1818: 12,4 + 1819: 12,5 + 1820: 13,6 + 1821: 14,7 + 2981: 42,20 + 2982: 42,20 + 2983: 42,19 + 2984: 42,20 + 2985: 43,21 + 2986: 43,21 + 2987: 44,21 + 2988: 44,20 + 2989: 44,20 + 3005: 34,15 + 3053: 57,19 + 3070: 60,42 + 3071: 61,42 + 3072: 61,43 + 3104: 44,42 + 3105: 44,42 + 3177: 63,50 + 3178: 66,52 + 3179: 64,53 + 3290: -2,47 + 3291: 4,47 + 3292: 3,47 + 3293: -6,47 + 3294: -7,47 + 3295: -11,49 + 3296: -13,47 + 3297: -13,47 + 3298: 0,40 + 3299: -2,36 + 3300: -2,33 + 3301: 0,31 + 3302: 0,31 + 3303: 1,30 + 3304: -1,27 + 3305: -1,27 + 3306: 1,26 + 3307: -2,24 + 3308: -1,19 + 3309: -2,19 + 3310: -7,20 + 3311: -6,21 + 3312: 1,19 + 3313: 9,18 + 3314: 12,19 + 3315: 22,19 + 3316: 25,20 + 3317: 28,20 + 3318: 30,19 + 3319: 30,19 + 3320: 28,19 + 3321: 26,18 + 3322: 23,17 + 3323: 24,16 + 3324: 23,14 + 3325: 25,13 + 3326: 26,13 + 3327: 26,15 + 3328: 23,14 + 3329: 28,14 + 3330: 21,12 + 3331: 22,10 + 3332: 21,9 + 3333: 22,8 + 3334: 27,10 + 3335: 35,47 + 3336: 39,48 + 3337: 39,49 + 3338: 15,47 + 3339: 14,49 + 3358: -2,52 + 3359: -2,51 + 3360: -1,51 + 3361: -1,52 + 3362: -1,51 + 3363: -1,54 + 3364: -3,56 + 3365: -5,55 + 3366: -5,54 + 3367: -2,55 + 3368: 0,55 + 3369: -8,56 + 3370: -9,55 + 3371: -11,55 + 3372: -12,55 + 3373: -13,54 + 3374: -13,53 + 3375: -11,57 + 3376: -12,58 + 3377: -16,57 + 3378: -16,55 + 3379: -15,55 + 3380: -13,57 + 3381: -12,60 + 3382: -12,61 + 3383: -12,63 + 3384: -13,64 + 3385: -18,62 + 3386: -19,61 + 3387: -20,60 + 3388: -20,64 + 3389: -17,64 + 3390: -17,64 + 3398: -23,69 + 3399: -23,69 + 3400: -23,70 + 3401: -25,71 + 3402: -25,70 + 3403: -24,68 + 3435: -33,53 + 3436: -33,53 + 3437: -32,51 + 3438: -29,52 + 3439: -28,53 + 3440: -28,54 + 3441: -29,55 + 3442: -27,51 + 3443: -27,51 + 3444: -20,54 + 3445: -19,55 + 3446: -15,49 + 3447: -18,38 + 3448: -15,38 + 3449: -17,36 + 3450: -18,37 + 3451: -26,30 + 3452: -26,28 + 3453: -26,28 + 3454: -24,28 + 3455: -23,28 + 3456: -20,27 + 3457: -20,28 + 3458: -23,26 + 3459: -31,27 + 3460: -32,26 + 3461: -32,25 + 3462: -33,24 + 3463: -30,24 + 3464: -32,23 + 3465: -33,24 + 3466: -33,25 + 3467: -31,25 + 3468: -32,26 + 3469: -33,27 + 3470: -34,28 + 3471: -32,28 + 3472: -31,28 + 3473: -34,29 + 3474: -34,26 + 3475: -34,25 + 3476: -38,26 + 3477: -36,25 + 3478: -35,28 + 3479: -28,20 + 3480: -27,22 + 3481: -22,18 + 3482: -23,17 + 3483: -21,19 + 3484: -18,18 + 3485: -19,18 + 3486: -18,17 + 3487: -15,19 + 3488: -14,20 + 3489: -15,19 + 3490: -12,19 + 3491: -11,20 + 3492: -9,20 + 3493: -1,25 + 3494: 1,30 + 3495: -2,32 + 3496: 12,44 + 3497: 13,40 + 3498: 17,43 + 3499: 15,42 + 3500: 18,44 + 3501: 17,45 + 3502: 18,45 + 3662: 17,38 + 3663: 17,39 + 3664: 23,43 + 3665: 24,43 + 3666: 36,44 + 3667: 37,45 + 3668: 38,44 + 3669: 36,43 + 3670: 35,43 + 3671: 40,47 + 3672: 40,47 + 3673: 38,47 + 3674: 37,47 + 3675: 40,49 + 3676: 41,48 + 3677: 42,47 + 3678: 42,52 + 3679: 41,51 + 3680: 41,50 + 3681: 41,51 + 3682: 40,53 + 3683: 39,54 + 3684: 42,53 + 3685: 44,54 + 3921: -15,-7 + 3922: -15,-7 + 3923: -16,-5 + 3924: -16,-5 + 3925: -17,-6 + 3926: -16,-8 + 3927: -17,-7 + 3928: -17,-5 + 3929: -17,-5 + 3930: -17,-7 + 3931: -17,-8 + 3932: -16,-6 + 3933: -17,-4 + 3934: -17,-6 + 3935: -15,-6 + 3936: -15,-5 + 3937: -15,-4 + 3938: -16,-5 + 3939: -17,-2 + 3940: -17,-1 + 3941: -17,-2 + 3942: -18,-1 + 3943: -17,0 + 3944: -17,1 + 3945: -16,-2 + 3946: -15,-1 + 3947: -15,-1 + 3948: -14,0 + 3949: -14,-2 + 3950: -15,-1 + 3951: -14,1 + 3952: -15,2 + 3953: -17,1 + 3954: -15,2 + 3955: -15,3 + 3956: -17,0 + 3957: -17,-1 + 3958: -15,1 + 3959: -16,-1 + 3960: -16,0 + 3961: -15,3 + 3962: -15,6 + 3963: -13,7 + 3964: -13,6 + 3965: -14,6 + 3966: -14,5 + 3967: -12,5 + 3968: -15,5 + 3969: -15,5 + 3970: -15,5 + 3971: -16,5 + 3972: -16,6 + 3973: -16,6 + 3974: -16,8 + 3975: -15,8 + 3976: -14,9 + 3977: -14,8 + 3978: -14,8 + 3979: -15,9 + 3980: -14,9 + 3981: -13,10 + 3982: -13,9 + 3983: -12,9 + 3984: -12,10 + 3985: -12,10 + 3986: -12,9 + 3987: -12,10 + 3988: -11,10 + 3989: -11,9 + 3990: -11,11 + 3991: -11,11 + 3992: -10,10 + 3993: -10,9 + 3994: -11,11 + 3995: -13,11 + 3996: -13,12 + 3997: -13,12 + 3998: -13,12 + 3999: -11,11 + 4000: -11,11 + 4001: -12,13 + 4002: -9,10 + 4003: -8,10 + 4004: -10,6 + 4005: -10,6 + 4006: -11,6 + 4007: -11,5 + 4008: -12,5 + 4009: -10,4 + 4010: -10,4 + 4011: -12,4 + 4012: -11,5 + 4013: -12,4 + 4014: -10,5 + 4015: -12,6 + 4016: -11,5 + 4017: -13,6 + 4018: -14,5 + 4019: -11,5 + 4020: -11,5 + 4021: -14,5 + 4022: -12,5 + 4023: -13,5 + 4024: -15,1 + 4025: -15,1 + 4026: -14,0 + 4027: -14,0 + 4028: -14,-1 + 4029: -14,-1 + - node: + color: '#951710FF' + id: DirtHeavyMonotile + decals: + 2791: 28,62 + 2792: 28,62 + 2793: 28,62 + 2794: 28,61 + 2795: 28,61 + 2796: 29,63 + 2797: 29,63 + 2798: 29,63 + - node: + color: '#FFFFFFFF' + id: DirtHeavyMonotile + decals: + 3696: 69,58 + 3697: 63,60 + 3698: 70,56 + 3699: 67,55 + 3700: 67,45 + 3701: 68,43 + - node: + cleanable: True + color: '#FFFFFFFF' + id: DirtHeavyMonotile + decals: + 1822: 14,7 + 1823: 14,7 + 1824: 14,8 + 1825: 13,8 + 1826: 13,7 + 1827: 14,7 + 1828: 16,6 + 1829: 17,5 + 1830: 18,5 + 1831: 16,6 + 1832: 16,6 + 1833: 18,6 + 1834: 17,5 + 1835: 17,5 + 1836: 18,6 + 1837: 18,6 + 1838: 18,6 + 1839: 17,6 + 1840: 18,6 + 1841: 18,6 + 1842: 18,7 + 1843: 18,8 + 1844: 18,9 + 1845: 18,9 + 1846: 17,9 + 1847: 9,7 + 1848: 8,7 + 1849: 9,7 + 1850: 7,7 + 1851: 6,7 + 1852: 9,4 + 1853: 9,4 + 1854: 8,4 + 1855: 9,4 + 1856: 9,3 + 2958: 53,25 + 2959: 56,29 + 2960: 54,30 + 2961: 50,27 + 2962: 50,26 + 2963: 50,25 + 2964: 50,24 + 2965: 48,26 + 2966: 47,26 + 2967: 47,25 + 2968: 49,24 + 2969: 49,24 + 2970: 47,24 + 3006: 35,10 + 3007: 35,10 + 3008: 36,11 + 3009: 38,11 + 3010: 39,9 + 3011: 41,7 + 3012: 36,7 + 3043: 49,10 + 3044: 48,9 + 3045: 57,17 + 3046: 58,17 + 3047: 58,16 + 3048: 59,16 + 3049: 59,17 + 3050: 59,21 + 3051: 60,20 + 3052: 60,21 + 3059: 62,30 + 3060: 61,29 + 3061: 57,38 + 3062: 57,39 + 3063: 58,40 + 3064: 58,40 + 3065: 60,40 + 3066: 62,40 + 3067: 62,37 + 3068: 62,37 + 3069: 60,37 + 3074: 56,43 + 3075: 56,44 + 3076: 57,45 + 3077: 57,45 + 3078: 56,46 + 3079: 56,46 + 3080: 55,46 + 3081: 55,46 + 3082: 57,46 + 3083: 57,46 + 3084: 54,46 + 3085: 54,46 + 3086: 53,46 + 3087: 53,46 + 3088: 53,46 + 3089: 52,45 + 3090: 52,44 + 3091: 52,44 + 3092: 53,43 + 3093: 54,42 + 3094: 54,42 + 3095: 55,42 + 3096: 45,40 + 3097: 47,42 + 3098: 49,43 + 3099: 47,43 + 3100: 46,44 + 3101: 46,42 + 3102: 49,41 + 3103: 50,42 + 3145: 46,33 + 3146: 43,35 + 3147: 43,35 + 3148: 49,33 + 3149: 58,33 + 3150: 56,33 + 3151: 54,33 + 3152: 59,35 + 3153: 62,35 + 3154: 64,35 + 3155: 70,33 + 3156: 70,33 + 3157: 71,35 + 3158: 73,35 + 3159: 72,33 + 3160: 69,36 + 3161: 71,39 + 3162: 71,38 + 3163: 72,37 + 3164: 72,40 + 3165: 63,38 + 3166: 65,39 + 3167: 66,40 + 3168: 66,41 + 3169: 64,42 + 3170: 63,42 + 3171: 65,43 + 3172: 65,44 + 3173: 65,47 + 3174: 64,47 + 3175: 64,47 + 3176: 66,47 + 3187: 68,50 + 3188: 69,49 + 3189: 69,49 + 3190: 70,49 + 3191: 69,49 + 3192: 68,48 + 3193: 68,48 + 3194: 70,48 + 3195: 69,50 + 3196: 68,49 + 3197: 68,52 + 3198: 69,52 + 3199: 70,52 + 3200: 73,44 + 3201: 73,43 + 3202: 74,43 + 3203: 77,44 + 3204: 76,44 + 3205: 75,43 + 3206: 77,42 + 3207: 78,42 + 3208: 77,44 + 3209: 35,37 + 3210: 37,38 + 3211: 37,40 + 3212: 35,38 + 3213: 37,38 + 3214: 40,37 + 3215: 41,38 + 3233: 21,34 + 3234: 22,34 + 3235: 22,32 + 3236: 22,31 + 3237: 24,31 + 3238: 22,30 + 3239: 22,30 + 3240: 18,31 + 3241: 17,30 + 3242: 16,29 + 3243: 15,29 + 3244: 16,28 + 3245: 17,28 + 3246: 19,28 + 3247: 17,30 + 3248: 11,31 + 3249: 12,30 + 3250: 11,31 + 3251: 11,33 + 3252: 12,33 + 3253: 13,34 + 3254: 17,35 + 3255: 19,35 + 3256: 18,34 + 3340: 5,56 + 3341: 5,58 + 3342: 5,58 + 3343: 6,58 + 3344: -1,63 + 3345: -2,62 + 3346: -2,62 + 3347: -2,62 + 3348: 3,62 + 3349: -6,64 + 3505: 23,39 + 3506: 22,40 + 3507: 22,38 + 3508: 22,37 + 3509: 27,40 + 3510: 26,40 + 3511: 26,39 + 3512: 26,38 + 3513: 29,39 + 3568: 22,26 + 3569: 22,25 + 3570: 22,25 + 3571: 23,26 + 3572: 22,25 + 3573: 22,24 + 3574: 23,24 + 3575: 20,24 + 3576: 25,25 + 3577: 26,26 + 3578: 26,27 + 3579: 27,28 + 3580: 27,28 + 3581: 26,28 + 3582: 25,28 + 3583: 25,27 + 3584: 25,26 + 3585: 22,19 + 3586: 25,25 + 3587: 24,19 + 3588: 15,18 + 3589: 14,18 + 3590: 9,15 + 3591: 9,15 + 3592: 13,15 + 3593: 11,15 + 3594: 12,16 + 3595: 9,13 + 3596: 12,10 + 3597: 12,10 + 3598: 9,10 + 3599: 8,9 + 3600: 8,9 + 3601: 7,12 + 3602: 6,13 + 3603: 0,11 + 3604: 0,8 + 3605: 1,8 + 3606: 1,8 + 3607: 1,4 + 3608: 2,4 + 3609: 4,4 + 3610: 3,3 + 3611: 3,7 + 3612: 3,9 + 3613: 4,9 + 3614: 4,12 + 3615: 3,13 + 3616: 1,11 + 3617: 1,11 + 3618: -2,7 + 3619: -4,5 + 3620: -4,3 + 3621: -4,3 + 3622: -3,8 + 3623: -3,10 + 3624: -2,10 + 3625: -1,9 + 3626: -1,8 + 3627: 2,11 + 3628: -3,10 + 3629: -4,11 + 3630: -4,6 + 3631: -7,2 + 3632: -7,9 + 3633: -7,12 + 3634: -9,11 + 3635: -10,10 + 3636: -11,9 + 3637: -11,12 + 3638: -11,12 + 3639: -13,13 + 3640: -12,14 + 3641: -11,14 + 3642: -11,14 + 3643: -10,13 + 3644: -14,12 + 3645: -14,11 + 3646: -13,10 + 3647: -12,8 + 3648: -15,7 + 3649: -15,6 + 3650: -13,5 + 3651: -11,5 + 3652: -11,6 + 3653: -14,6 + 3654: -14,5 + 3655: -14,9 + 3656: -14,9 + 3657: -15,8 + 3658: -17,3 + 3659: -15,3 + 3660: -15,3 + 3661: -15,2 + 3811: -18,-2 + 3812: -14,-1 + 3813: -15,1 + 3814: -15,0 + 3815: -17,0 + 3816: -17,0 + 3817: -17,1 + 3818: -16,-1 + 3819: -17,-2 + 3820: -16,1 + 3821: -14,1 + 3822: -14,2 + 3823: -14,2 + 3824: -16,3 + 3825: -16,3 + 3826: -15,2 + 3827: -13,6 + 3828: -12,6 + 3829: -14,7 + 3830: -15,8 + 3831: -15,7 + 3832: -15,7 + 3833: -15,7 + 3834: -14,6 + 3835: -12,5 + 3836: -12,6 + 3837: -11,7 + 3838: -11,9 + 3839: -11,9 + 3840: -11,9 + 3841: -11,9 + 3842: -11,9 + 3843: -11,9 + 3844: -11,7 + 3845: -11,7 + 3846: -12,9 + 3847: -12,11 + 3848: -12,11 + 3849: -12,11 + 3850: -12,10 + 3851: -12,9 + 3852: -10,10 + 3853: -10,10 + 3854: -10,9 + 3855: -11,9 + 3856: -12,9 + 3857: -11,9 + 3858: -11,6 + 3859: -10,5 + 3860: -11,4 + 3861: -10,4 + 3862: -11,5 + 3863: -12,5 + 3864: -12,5 + 3865: -11,6 + 3866: -12,6 + 3867: -13,7 + 3868: -15,6 + 3869: -14,6 + 3870: -14,3 + 3871: -14,2 + 3872: -16,2 + 3873: -16,2 + 3874: -18,1 + 3875: -18,1 + 3876: -18,2 + 3877: -18,2 + 3878: -17,2 + 3879: -17,2 + 3880: -17,1 + 3881: -17,1 + 3882: -17,1 + 3883: -18,0 + 3884: -17,0 + 3885: -16,-1 + 3886: -18,-2 + 3887: -16,0 + 3888: -16,-1 + 3889: -16,-4 + 3890: -15,-5 + 3891: -16,-4 + 3892: -18,-5 + 3893: -16,-5 + 3894: -16,-5 + 3895: -16,-5 + 3896: -16,-5 + 3897: -17,-5 + 3898: -16,-7 + 3899: -16,-8 + 3900: -15,-6 + 3901: -17,-5 + 3902: -17,-7 + 3903: -17,-8 + 3904: -16,-7 + 3905: -16,-6 + 3906: -18,-4 + 3907: -17,-6 + 3908: -16,-7 + 3909: -16,-8 + 3910: -17,-9 + 3911: -16,-10 + 3912: -16,-10 + 3913: -16,-10 + 3914: -16,-10 + 3915: -16,-7 + 3916: -16,-7 + 3917: -18,-8 + 3918: -18,-7 + 3919: -17,-6 + 3920: -17,-6 + - node: + cleanable: True + color: '#FFFFFFFF' + id: DirtLight + decals: + 2910: 66,58 + 2911: 65,60 + 2912: 65,60 + 2913: 62,61 + 2914: 66,49 + 2915: 62,47 + 2916: 65,46 + 2917: 66,46 + 2918: 69,43 + 2919: 67,42 + 2920: 70,37 + 2921: 72,35 + 2922: 69,34 + 2923: 70,33 + 2924: 72,33 + 2925: 73,33 + 2926: 76,34 + 2927: 76,34 + 2928: 75,34 + 2929: 77,35 + 2930: 81,34 + 2931: 81,38 + 2932: 85,37 + 2933: 86,37 + 2934: 86,34 + 2935: 85,33 + 2936: 85,32 + 2937: 86,31 + 2938: 82,26 + 2939: 81,26 + 2940: 81,25 + 2941: 80,24 + 2942: 80,23 + 2943: 80,22 + 2944: 82,21 + 2945: 82,21 + 2946: 83,21 + 2947: 76,28 + 2948: 77,29 + 2949: 77,30 + 2950: 75,30 + 2951: 74,30 + 2952: 74,29 + 2953: 58,29 + 2954: 59,30 + 2955: 62,30 + 2956: 62,29 + 2957: 62,28 + 2990: 34,14 + 2991: 34,14 + 2992: 32,14 + 2993: 34,16 + 2994: 34,16 + 2995: 35,16 + 2996: 36,16 + 2997: 37,15 + 2998: 36,14 + 2999: 35,14 + 3000: 35,14 + 3001: 36,13 + 3002: 33,13 + 3003: 32,14 + 3004: 32,15 + 3013: 38,11 + 3014: 38,11 + 3015: 38,9 + 3016: 38,9 + 3017: 40,12 + 3018: 40,13 + 3019: 39,13 + 3020: 40,12 + 3021: 29,1 + 3022: 28,0 + 3023: 28,0 + 3024: 28,-1 + 3025: 31,0 + 3026: 31,1 + 3027: 31,1 + 3028: 28,3 + 3029: 29,3 + 3030: 28,2 + 3031: 27,2 + 3032: 26,0 + 3033: 26,0 + 3034: 25,-1 + 3035: 24,1 + 3036: 50,9 + 3037: 48,10 + 3038: 49,10 + 3039: 48,11 + 3054: 58,19 + 3055: 59,20 + 3056: 59,19 + 3057: 58,29 + 3058: 58,29 + 3106: 48,42 + 3107: 47,42 + 3108: 44,41 + 3109: 44,41 + 3110: 44,39 + 3111: 45,39 + 3112: 45,38 + 3113: 45,38 + 3114: 46,39 + 3115: 48,41 + 3116: 49,42 + 3117: 50,43 + 3118: 50,44 + 3119: 51,37 + 3120: 52,38 + 3121: 55,39 + 3122: 54,39 + 3123: 52,39 + 3124: 51,39 + 3125: 50,38 + 3126: 36,35 + 3127: 37,33 + 3128: 38,33 + 3129: 46,33 + 3130: 48,33 + 3131: 52,33 + 3132: 63,35 + 3133: 60,33 + 3134: 57,33 + 3135: 62,35 + 3136: 61,32 + 3137: 60,33 + 3138: 56,33 + 3139: 56,33 + 3140: 50,35 + 3141: 49,35 + 3142: 49,36 + 3143: 47,33 + 3144: 45,33 + 3216: 38,38 + 3217: 36,38 + 3218: 36,39 + 3219: 36,39 + 3220: 36,40 + 3221: 37,40 + 3222: 38,40 + 3223: 40,40 + 3224: 39,40 + 3225: 29,35 + 3226: 27,34 + 3227: 27,33 + 3228: 29,33 + 3229: 26,32 + 3230: 26,31 + 3231: 29,32 + 3232: 29,32 + 3257: 11,34 + 3258: 10,33 + 3259: 9,32 + 3260: 10,32 + 3261: 11,31 + 3262: 10,31 + 3263: 12,31 + 3264: 12,32 + 3265: 12,38 + 3266: 12,38 + 3267: 13,39 + 3268: 14,40 + 3269: 13,41 + 3270: 12,40 + 3271: 14,38 + 3272: 14,37 + 3273: 12,37 + 3274: 5,39 + 3275: 4,39 + 3276: 4,38 + 3277: 5,39 + 3278: 6,38 + 3279: 7,38 + 3280: 9,39 + 3281: 6,40 + 3282: 5,40 + 3283: 8,39 + 3284: 8,38 + 3285: 4,43 + 3286: 5,43 + 3287: 7,44 + 3288: 7,44 + 3289: 6,44 + 3350: -8,51 + 3351: -9,52 + 3352: -9,52 + 3353: -9,51 + 3354: -9,51 + 3355: -5,52 + 3356: -5,52 + 3357: -5,51 + 3404: -24,67 + 3405: -24,67 + 3406: -23,67 + 3407: -23,68 + 3408: -24,70 + 3409: -25,69 + 3410: -25,63 + 3411: -24,63 + 3412: -24,62 + 3413: -25,61 + 3414: -24,61 + 3415: -23,60 + 3416: -24,61 + 3417: -25,60 + 3418: -25,60 + 3419: -23,61 + 3420: -30,58 + 3421: -30,57 + 3422: -32,57 + 3423: -33,57 + 3424: -33,56 + 3425: -33,55 + 3426: -32,55 + 3427: -33,55 + 3428: -35,58 + 3429: -35,58 + 3430: -35,56 + 3431: -36,56 + 3432: -35,56 + 3433: -34,56 + 3434: -34,57 + 3520: 26,27 + 3521: 25,27 + 3522: 24,25 + 3523: 25,24 + 3524: 25,23 + 3525: 27,23 + 3526: 28,24 + 3527: 28,25 + 3528: 28,27 + 3529: 28,27 + 3530: 28,28 + 3531: 28,28 + 3532: 28,28 + 3533: 29,26 + 3534: 29,26 + 3535: 27,26 + 3536: 26,26 + 3537: 26,24 + 3538: 26,24 + 3539: 26,23 + 3704: 32,40 + 3705: 31,43 + 3706: 32,43 + 3707: 33,38 + 3708: 32,37 + 3709: 32,35 + 3710: 16,20 + 3711: 19,20 + 3712: 5,52 + 3713: 5,63 + 3714: 6,67 + 3715: 7,67 + 3716: 2,63 + 3717: 22,48 + 3718: 16,48 + 3719: 20,56 + 3720: 22,58 + 3721: 18,56 + 3722: 18,56 + 3723: 16,55 + 3724: 12,55 + 3725: 8,55 + 3726: 8,57 + - node: + color: '#951710FF' + id: Donk + decals: + 2784: 27,64 + - node: + color: '#FFFFFFFF' + id: FlowersBRTwo + decals: + 4778: -32.740227,71.75434 + 4779: -33.87947,72.741684 + 4780: -30.176937,72.779655 + 4781: -31.52504,74.5075 + 4782: -32.056686,75.24801 + 4783: -32.455418,76.14042 + 4784: -29.968077,76.0075 + 4785: -28.259216,72.13409 + 4786: -28.544025,73.3113 + 4787: -34.582,71.10877 + - node: + color: '#FFFFFFFF' + id: Flowersbr1 + decals: + 4768: -33.898457,75.34295 + 4769: -32.569344,76.23535 + 4770: -31.619976,75.95054 + 4771: -31.01238,74.71636 + 4772: -30.347824,72.13409 + 4773: -33.30985,72.874596 + 4774: -33.082,70.99484 + 4775: -30.879469,71.260666 + 4776: -28.563015,71.260666 + 4777: -28.297192,73.444214 + - node: + color: '#FFFFFFFF' + id: Flowerspv2 + decals: + 4757: -33.233902,71.69738 + 4758: -32.208584,72.64674 + 4759: -30.936432,72.058136 + 4760: -29.759216,71.127754 + 4761: -27.822506,71.279655 + 4762: -33.10099,75.077126 + 4763: -30.44276,74.39358 + 4764: -28.316177,73.67206 + 4765: -30.556684,76.02649 + 4766: -31.487064,76.72903 + 4767: -33.328835,76.4632 + - node: + color: '#FFFFFFFF' + id: Flowersy3 + decals: + 4746: -34.069344,71.31763 + 4747: -30.328836,71.03282 + 4748: -31.259216,72.39991 + 4749: -32.702255,73.02649 + 4750: -30.195925,74.58345 + 4751: -33.063015,75.4189 + 4752: -29.835167,75.64674 + 4753: -30.879469,76.95687 + 4754: -32.96808,76.99484 + 4755: -27.80352,71.67839 + 4756: -28.316177,73.63409 + - node: + color: '#00000077' + id: FullTileOverlayGreyscale + decals: + 4156: -35,7 + 4157: -35,8 + 4158: -35,9 + - node: + color: '#3EB38896' + id: FullTileOverlayGreyscale + decals: + 4159: -34,6 + 4160: -33,6 + 4161: -32,6 + - node: + color: '#52B4E996' + id: FullTileOverlayGreyscale + decals: + 4166: -35,15 + 4167: -35,16 + 4168: -35,17 + - node: + color: '#8C347F96' + id: FullTileOverlayGreyscale + decals: + 4153: -28,6 + 4154: -29,6 + 4155: -30,6 + - node: + color: '#D4D4D496' + id: FullTileOverlayGreyscale + decals: + 4169: -35,19 + 4170: -35,20 + 4171: -35,21 + - node: + color: '#DE3A3A96' + id: FullTileOverlayGreyscale + decals: + 4162: -35,11 + 4163: -35,12 + 4164: -35,12 + 4165: -35,13 + - node: + color: '#FFFFFFFF' + id: Grassa1 + decals: + 4794: -29.436432,70.59611 + 4795: -31.657951,70.86193 + - node: + color: '#FFFFFFFF' + id: Grassa3 + decals: + 4792: -31.904785,70.27332 + - node: + color: '#FFFFFFFF' + id: Grassa4 + decals: + 4791: -33.974407,70.27332 + - node: + color: '#FFFFFFFF' + id: Grassa5 + decals: + 4790: -32.645294,70.6151 + 4793: -30.822506,70.71004 + 4813: -27.37387,73.70472 + 4814: -27.358047,73.08763 + - node: + color: '#FFFFFFFF' + id: Grassb1 + decals: + 4798: -28.695925,70.06446 + 4799: -32.94909,70.08345 + 4800: -35.36048,69.95054 + 4801: -30.860481,69.798645 + 4802: -33.480736,70.84295 + - node: + color: '#FFFFFFFF' + id: Grassb2 + decals: + 4803: -34.08833,70.88092 + 4804: -35.056686,70.93788 + 4805: -29.94909,71.03282 + 4806: -27.974407,70.9189 + - node: + color: '#FFFFFFFF' + id: Grassb4 + decals: + 4789: -30.082,70.3113 + - node: + color: '#FFFFFFFF' + id: Grassb5 + decals: + 4788: -34.94276,70.34927 + 4796: -28.44909,70.69105 + 4797: -28.031368,70.3113 + 4811: -27.24729,74.10029 + 4812: -27.13653,73.055984 + - node: + angle: -3.141592653589793 rad + color: '#DE3A3A96' + id: LoadingArea + decals: + 2733: 74,9 + - node: + angle: -1.5707963267948966 rad + color: '#DE3A3A96' + id: LoadingArea + decals: + 2732: 70,11 + - node: + angle: -3.141592653589793 rad + color: '#FFFFFFFF' + id: LoadingArea + decals: + 4312: -21,29 + 4313: -20,29 + - node: + angle: -1.5707963267948966 rad + color: '#FFFFFFFF' + id: LoadingArea + decals: + 1936: 41,19 + 2438: 71,40 + 3795: 48,-3 + 3796: 48,0 + 3797: 48,3 + 4314: -17,34 + 4315: -19,34 + - node: + color: '#FFFFFFFF' + id: LoadingArea + decals: + 1722: 1,3 + 1741: 2,7 + 3801: 51,-5 + 4306: -21,39 + 4307: -20,39 + 4308: -19,39 + 4520: 33,-1 + - node: + angle: 1.5707963267948966 rad + color: '#FFFFFFFF' + id: LoadingArea + decals: + 1: -12,9 + 3798: 54,3 + 3799: 54,0 + 3800: 54,-3 + 4309: -25,33 + 4310: -25,34 + 4311: -25,35 + - node: + angle: 3.141592653589793 rad + color: '#FFFFFFFF' + id: LoadingArea + decals: + 1723: -1,3 + 1740: -2,7 + - node: + color: '#FFFFFFFF' + id: MiniTileDarkInnerNe + decals: + 2519: 63,5 + - node: + color: '#FFFFFFFF' + id: MiniTileDarkInnerNw + decals: + 2523: 67,5 + - node: + color: '#FFFFFFFF' + id: MiniTileDarkInnerSw + decals: + 2517: 69,9 + - node: + color: '#FFFFFFFF' + id: MiniTileDarkLineE + decals: + 2518: 63,6 + - node: + color: '#FFFFFFFF' + id: MiniTileDarkLineN + decals: + 2520: 64,5 + 2521: 65,5 + 2522: 66,5 + - node: + color: '#FFFFFFFF' + id: MiniTileDarkLineS + decals: + 2510: 68,9 + 2511: 66,9 + 2512: 67,9 + 2513: 65,9 + 2514: 64,9 + 2515: 63,9 + 2516: 62,9 + - node: + color: '#FFFFFFFF' + id: MiniTileDarkLineW + decals: + 2524: 67,6 + - node: + color: '#951710FF' + id: Omni + decals: + 2839: 27.985142,61.999886 + - node: + color: '#FFFFFFFF' + id: SpaceStationSign1 + decals: + 1603: 65,20 + - node: + color: '#FFFFFFFF' + id: SpaceStationSign2 + decals: + 1604: 66,20 + - node: + color: '#FFFFFFFF' + id: SpaceStationSign3 + decals: + 1605: 67,20 + - node: + color: '#FFFFFFFF' + id: SpaceStationSign4 + decals: + 1606: 68,20 + - node: + color: '#FFFFFFFF' + id: SpaceStationSign5 + decals: + 1607: 69,20 + - node: + color: '#FFFFFFFF' + id: SpaceStationSign6 + decals: + 1608: 70,20 + - node: + color: '#FFFFFFFF' + id: SpaceStationSign7 + decals: + 1609: 71,20 + - node: + color: '#FFFFFFFF' + id: StandClear + decals: + 4582: 25,-1 + 4583: 27,-1 + - node: + color: '#951710FF' + id: Waffle + decals: + 2836: 28,65 + - node: + color: '#FFFFFFFF' + id: WarnBox + decals: + 1278: -17,43 + 2285: 77,59 + 2286: 76,59 + 3778: 48,-4 + 3779: 50,-3 + 3780: 49,-5 + 3781: 53,-5 + 4823: 34,-32 + 4824: 35,-32 + 4840: 26,-30 + - node: + color: '#D381C996' + id: WarnCornerGreyscaleNW + decals: + 2146: 55,22 + 2168: 58,17 + - node: + color: '#DE3A3A96' + id: WarnCornerNE + decals: + 2345: 71,57 + 2727: 74,11 + - node: + color: '#FFFFFFFF' + id: WarnCornerNE + decals: + 1875: 39,7 + 1932: 43,21 + 2163: 53,22 + 2177: 52,31 + 2188: 48,26 + 2276: 21,45 + 2469: 76,5 + 3787: 52,1 + - node: + color: '#FFFFFFFF' + id: WarnCornerNW + decals: + 1872: 36,7 + 2175: 50,31 + 2186: 46,26 + 2274: 9,38 + 2275: 20,45 + 2500: 69,4 + 3789: 50,1 + 3804: -36,29 + 3806: -37,28 + - node: + color: '#FFFFFFFF' + id: WarnCornerSE + decals: + 1869: 37,9 + 1883: 38,12 + 1931: 43,20 + 2180: 52,29 + 2189: 48,25 + 2277: 21,43 + 2472: 76,2 + 2479: 74,-2 + 3784: 52,-2 + - node: + color: '#DE3A3A96' + id: WarnCornerSW + decals: + 2314: 62,59 + 2351: 68,54 + - node: + color: '#FFFFFFFF' + id: WarnCornerSW + decals: + 2182: 50,29 + 2185: 46,25 + 2278: 20,43 + 2482: 72,-2 + 2489: 69,2 + 3782: 50,-2 + - node: + color: '#D381C996' + id: WarnCornerSmallGreyscaleNW + decals: + 2145: 55,21 + - node: + color: '#DE3A3A96' + id: WarnCornerSmallNE + decals: + 2301: 70,60 + 2309: 62,62 + 2333: 68,62 + 2339: 66,56 + 2344: 70,57 + 2363: 66,46 + 2730: 70,11 + 2731: 74,9 + - node: + color: '#FFFFFFFF' + id: WarnCornerSmallNE + decals: + 555: -16,11 + 556: -18,7 + 1248: -23,43 + 1264: -25,10 + 1294: -11,39 + 1300: -4,38 + 1397: -33,28 + 1933: 42,21 + 2166: 51,22 + 2167: 53,20 + 2178: 52,30 + 2196: -5,64 + 2206: 15,63 + 2265: 33,19 + 2371: 74,57 + 2376: 62,46 + 2385: 59,44 + 2389: 51,52 + 2396: 47,51 + 2403: 57,56 + 2441: 80,44 + 2460: 72,17 + 2461: 73,14 + 2464: 74,7 + 2467: 74,5 + 2476: 74,0 + 2494: 67,1 + 2497: 67,3 + 2593: 46,48 + 2663: 42,47 + 2709: 6,63 + 4234: 1,24 + 4546: 36,3 + 4547: 30,5 + 4745: -28,72 + 4839: 29,-25 + 4850: 29,-43 + 4894: 28,-48 + 4957: 29,-28 + 4964: 32,-30 + 4965: 32,-34 + 4969: 32,-39 + - node: + zIndex: 100 + color: '#FFFFFFFF' + id: WarnCornerSmallNE + decals: + 2891: 5,23 + - node: + color: '#DE3A3A96' + id: WarnCornerSmallNW + decals: + 2298: 70,62 + 2312: 62,60 + 2332: 68,62 + 2341: 68,56 + 2365: 68,46 + - node: + color: '#FFFFFFFF' + id: WarnCornerSmallNW + decals: + 552: -14,11 + 558: -16,7 + 1249: -19,43 + 1253: -12,31 + 1256: -22,19 + 1260: -22,15 + 1266: -23,10 + 1275: -12,43 + 1298: -7,39 + 1398: -31,28 + 1689: -34,29 + 1923: 39,17 + 1937: 44,21 + 2143: 62,20 + 2184: 50,30 + 2195: -3,64 + 2203: 21,60 + 2205: 17,63 + 2234: 43,54 + 2369: 73,53 + 2382: 57,48 + 2384: 61,44 + 2392: 49,51 + 2401: 44,47 + 2431: 59,56 + 2440: 82,44 + 2455: 74,17 + 2499: 69,3 + 2503: 72,4 + 2528: 63,1 + 2545: 64,17 + 2547: 64,46 + 2592: 48,48 + 3805: -36,28 + 4148: 35,19 + 4231: -7,15 + 4548: 32,5 + 4694: 44,10 + 4838: 31,-25 + 4849: 31,-43 + 4898: 32,-48 + 4956: 31,-28 + 4961: 28,-34 + - node: + zIndex: 100 + color: '#FFFFFFFF' + id: WarnCornerSmallNW + decals: + 2889: 7,23 + - node: + color: '#DE3A3A96' + id: WarnCornerSmallSE + decals: + 2304: 70,60 + 2335: 66,60 + 2354: 66,55 + - node: + color: '#FFFFFFFF' + id: WarnCornerSmallSE + decals: + 554: -16,13 + 563: 6,9 + 1263: -25,12 + 1376: -35,25 + 1861: 30,7 + 1930: 42,20 + 1955: 37,19 + 1956: 42,23 + 2136: 61,28 + 2140: 62,19 + 2179: 52,30 + 2208: 15,65 + 2237: 41,56 + 2264: 33,21 + 2291: 74,59 + 2367: 71,55 + 2375: 62,48 + 2379: 59,46 + 2390: 51,54 + 2395: 47,53 + 2398: 46,50 + 2404: 57,58 + 2444: 80,21 + 2462: 74,9 + 2465: 74,7 + 2474: 74,2 + 2477: 74,0 + 2480: 73,-2 + 2492: 67,3 + 2495: 67,5 + 2509: 71,9 + 2664: 42,49 + 2711: 6,65 + 2743: 72,19 + 4229: -9,17 + 4233: 1,26 + 4549: 34,3 + 4550: 36,5 + 4571: 29,0 + 4575: 27,3 + 4587: 24,0 + 4836: 29,-21 + 4837: 29,-26 + 4848: 29,-39 + 4890: 28,-44 + 4963: 32,-28 + 4966: 32,-32 + 4968: 32,-37 + - node: + color: '#DE3A3A96' + id: WarnCornerSmallSW + decals: + 2313: 62,60 + 2316: 64,59 + 2331: 68,60 + 2352: 68,55 + - node: + color: '#FFFFFFFF' + id: WarnCornerSmallSW + decals: + 553: -14,13 + 557: -16,9 + 562: 8,9 + 1254: -12,33 + 1258: -22,17 + 1267: -23,12 + 1371: -33,25 + 1860: 32,7 + 1958: 44,23 + 2138: 64,19 + 2142: 62,22 + 2183: 50,30 + 2209: 17,65 + 2236: 43,56 + 2267: 35,21 + 2373: 64,48 + 2378: 61,46 + 2381: 57,50 + 2387: 53,54 + 2393: 49,53 + 2400: 44,49 + 2443: 82,21 + 2456: 74,19 + 2457: 75,16 + 2481: 73,-2 + 2486: 72,2 + 2490: 69,3 + 2508: 72,9 + 2532: 63,5 + 4230: -7,17 + 4551: 36,3 + 4581: 28,0 + 4692: 44,12 + 4834: 31,-21 + 4835: 31,-26 + 4847: 31,-39 + 4886: 32,-44 + 4962: 28,-32 + - node: + color: '#FFFFFFFF' + id: WarnEndE + decals: + 4699: -11,70 + 4700: -6,70 + 4845: 31,-41 + - node: + color: '#FFFFFFFF' + id: WarnEndN + decals: + 4854: 34,-28 + - node: + color: '#FFFFFFFF' + id: WarnEndS + decals: + 4853: 34,-30 + - node: + color: '#FFFFFFFF' + id: WarnEndW + decals: + 4698: -12,70 + 4701: -7,70 + 4846: 29,-41 + - node: + color: '#FFFFFFFF' + id: WarnFull + decals: + 4825: 36,-33 + 4826: 36,-32 + 4827: 35,-32 + 4828: 34,-32 + 4945: 38,-31 + 4946: 36,-26 + - node: + color: '#DE3A3A96' + id: WarnLineE + decals: + 2299: 70,62 + 2300: 70,61 + 2336: 66,59 + 2337: 66,58 + 2338: 66,57 + 2342: 70,59 + 2343: 70,58 + 2346: 71,56 + 2347: 71,55 + 2355: 66,54 + 2356: 66,53 + 2357: 66,52 + 2358: 66,51 + 2359: 66,50 + 2360: 66,49 + 2361: 66,48 + 2362: 66,47 + 2445: 82,30 + - node: + color: '#FFFFFFFF' + id: WarnLineE + decals: + 549: -18,8 + 550: -16,12 + 1246: -23,44 + 1247: -23,45 + 1262: -25,11 + 1292: -11,41 + 1293: -11,40 + 1299: -4,39 + 1306: -4,40 + 1858: 36,4 + 1866: 34,7 + 1867: 37,11 + 1868: 37,10 + 1876: 39,6 + 1884: 38,13 + 1929: 42,19 + 2139: 62,18 + 2165: 53,21 + 2199: 21,63 + 2200: 21,62 + 2214: 20,65 + 2215: 20,66 + 2263: 33,20 + 2279: 21,44 + 2292: 81,62 + 2293: 81,61 + 2294: 81,60 + 2295: 81,59 + 2366: 71,54 + 2374: 62,47 + 2388: 51,53 + 2394: 47,52 + 2402: 42,48 + 2405: 57,57 + 2458: 73,15 + 2459: 72,18 + 2463: 74,8 + 2466: 74,6 + 2470: 76,4 + 2471: 76,3 + 2475: 74,1 + 2478: 74,-1 + 2493: 67,2 + 2496: 67,4 + 2708: 6,64 + 3767: 48,3 + 3768: 48,0 + 3769: 48,-3 + 3775: 53,-3 + 3776: 53,0 + 3777: 53,3 + 3785: 52,-1 + 3786: 52,0 + 4228: -9,16 + 4232: 1,25 + 4331: -3,49 + 4332: -3,48 + 4333: -3,47 + 4334: 7,49 + 4335: 7,48 + 4336: 7,47 + 4358: 3,62 + 4359: 3,63 + 4360: 3,64 + 4373: 18,49 + 4374: 18,48 + 4375: 18,47 + 4376: 27,49 + 4377: 27,48 + 4378: 27,47 + 4393: 37,49 + 4394: 37,48 + 4395: 37,47 + 4423: 20,21 + 4424: 20,19 + 4425: 20,20 + 4439: 43,35 + 4440: 43,34 + 4441: 43,33 + 4442: 49,35 + 4443: 49,34 + 4444: 49,33 + 4466: 63,35 + 4467: 63,34 + 4468: 63,33 + 4469: 67,35 + 4470: 67,34 + 4471: 67,33 + 4501: 79,59 + 4502: 79,60 + 4503: 79,61 + 4504: 79,62 + 4515: 70,11 + 4516: 70,10 + 4517: 70,10 + 4518: 70,9 + 4528: 4,21 + 4529: 4,20 + 4530: 4,19 + 4572: 29,-1 + 4573: 27,1 + 4574: 27,2 + 4579: 24,-1 + 4580: 26,-1 + 4739: -27,74 + 4740: -27,73 + 4741: -28,74 + 4742: -28,73 + 4851: 34,-29 + 4891: 28,-45 + 4892: 28,-46 + 4893: 28,-47 + 4959: 32,-29 + 4960: 32,-33 + 4967: 32,-38 + - node: + zIndex: 100 + color: '#FFFFFFFF' + id: WarnLineE + decals: + 2890: 5,24 + - node: + color: '#D381C996' + id: WarnLineGreyscaleN + decals: + 2147: 56,22 + - node: + color: '#DE3A3A96' + id: WarnLineGreyscaleN + decals: + 2906: -15,65 + - node: + color: '#D381C996' + id: WarnLineGreyscaleW + decals: + 2169: 58,16 + 2170: 58,15 + - node: + color: '#DE3A3A96' + id: WarnLineN + decals: + 2303: 71,60 + 2315: 63,59 + 2334: 67,60 + 2348: 71,54 + 2349: 69,54 + 2350: 70,54 + 2353: 67,55 + - node: + color: '#FFFFFFFF' + id: WarnLineN + decals: + 308: 21,47 + 561: 7,9 + 1257: -23,17 + 1261: -23,21 + 1372: -34,25 + 1859: 31,7 + 1862: 35,3 + 1870: 36,9 + 1871: 35,9 + 1954: 38,19 + 1957: 43,23 + 2135: 62,28 + 2181: 51,29 + 2190: 47,25 + 2201: 20,62 + 2207: 16,65 + 2235: 42,56 + 2290: 75,59 + 2377: 60,46 + 2397: 47,50 + 2442: 81,21 + 2473: 75,2 + 2487: 71,2 + 2488: 70,2 + 2491: 68,3 + 2525: 64,0 + 2526: 65,0 + 2527: 66,0 + 3783: 51,-2 + 4151: -16,26 + 4152: -15,26 + 4316: -1,24 + 4317: 0,24 + 4318: 1,24 + 4322: -1,44 + 4323: 0,44 + 4324: 1,44 + 4340: 6,54 + 4341: 5,54 + 4342: 4,54 + 4352: 6,61 + 4353: 5,61 + 4354: 4,61 + 4355: 4,65 + 4356: 5,65 + 4357: 6,65 + 4364: 11,46 + 4365: 12,46 + 4366: 13,46 + 4382: 30,46 + 4383: 31,46 + 4384: 32,46 + 4385: 33,46 + 4396: 31,36 + 4397: 32,36 + 4398: 33,36 + 4405: 31,32 + 4406: 32,32 + 4407: 33,32 + 4408: 30,22 + 4409: 31,22 + 4410: 32,22 + 4411: 33,22 + 4418: 23,18 + 4419: 25,18 + 4426: 7,18 + 4427: 8,18 + 4428: 11,18 + 4429: 10,18 + 4448: 50,36 + 4449: 51,36 + 4450: 52,36 + 4451: 55,36 + 4452: 56,36 + 4453: 57,36 + 4454: 56,32 + 4455: 55,32 + 4456: 54,32 + 4475: 66,32 + 4476: 65,32 + 4477: 64,32 + 4484: 65,36 + 4485: 66,36 + 4486: 64,36 + 4487: 70,36 + 4488: 69,36 + 4494: 64,52 + 4495: 65,52 + 4496: 66,52 + 4505: 64,22 + 4506: 65,22 + 4507: 66,22 + 4569: 31,0 + 4570: 30,0 + 4576: 28,3 + 4691: 43,12 + 4711: -35,71 + 4712: -34,71 + 4713: -33,71 + 4714: -32,71 + 4715: -31,71 + 4716: -30,71 + 4717: -29,71 + 4718: -28,71 + 4719: -28,70 + 4720: -29,70 + 4721: -30,70 + 4722: -31,70 + 4723: -32,70 + 4724: -33,70 + 4725: -34,70 + 4726: -35,70 + 4727: -36,70 + 4830: 30,-26 + 4831: 30,-21 + 4832: 30,-23 + 4841: 30,-39 + 4842: 30,-41 + 4887: 31,-44 + 4888: 30,-44 + 4889: 29,-44 + - node: + color: '#DE3A3A96' + id: WarnLineS + decals: + 2310: 62,62 + 2311: 62,61 + 2317: 64,58 + 2318: 64,57 + 2319: 64,56 + 2320: 64,55 + 2321: 64,54 + 2322: 64,53 + 2323: 64,52 + 2324: 64,51 + 2325: 64,50 + 2326: 64,49 + 2327: 64,48 + 2328: 68,57 + 2329: 68,58 + 2330: 68,59 + - node: + color: '#FFFFFFFF' + id: WarnLineS + decals: + 548: -16,8 + 551: -14,12 + 1250: -19,44 + 1251: -19,45 + 1252: -12,32 + 1265: -23,11 + 1276: -12,44 + 1277: -12,45 + 1305: -7,40 + 1370: -33,24 + 1375: -33,23 + 1395: -37,26 + 1690: -34,30 + 1865: 38,4 + 1877: 41,7 + 1878: 41,8 + 1879: 41,9 + 1880: 41,11 + 1881: 41,12 + 1882: 41,13 + 2137: 64,18 + 2141: 62,21 + 2197: 21,63 + 2198: 21,62 + 2212: 22,65 + 2213: 22,66 + 2266: 35,20 + 2273: 9,37 + 2280: 20,44 + 2287: 76,60 + 2288: 76,61 + 2289: 76,62 + 2368: 73,54 + 2372: 64,47 + 2380: 57,49 + 2386: 53,53 + 2391: 49,52 + 2399: 44,48 + 2430: 59,57 + 2453: 75,15 + 2454: 74,18 + 2483: 72,-1 + 2484: 72,0 + 2485: 72,1 + 2504: 72,5 + 2505: 72,6 + 2506: 72,7 + 2507: 72,8 + 2529: 63,2 + 2530: 63,3 + 2531: 63,4 + 3766: 49,3 + 3770: 49,-3 + 3771: 49,0 + 3772: 54,0 + 3773: 54,3 + 3774: 54,-3 + 3790: 50,0 + 3791: 50,-1 + 3807: -37,27 + 3808: -37,25 + 4227: -7,16 + 4235: 3,25 + 4328: -3,47 + 4329: -3,48 + 4330: -3,49 + 4337: 7,47 + 4338: 7,48 + 4339: 7,49 + 4361: 3,62 + 4362: 3,63 + 4363: 3,64 + 4370: 18,47 + 4371: 18,48 + 4372: 18,49 + 4379: 27,49 + 4380: 27,48 + 4381: 27,47 + 4390: 37,47 + 4391: 37,48 + 4392: 37,49 + 4420: 20,19 + 4421: 20,20 + 4422: 20,21 + 4436: 43,33 + 4437: 43,34 + 4438: 43,35 + 4445: 49,33 + 4446: 49,34 + 4447: 49,35 + 4463: 63,33 + 4464: 63,34 + 4465: 63,35 + 4472: 67,35 + 4473: 67,34 + 4474: 67,33 + 4497: 81,59 + 4498: 81,60 + 4499: 81,61 + 4500: 81,62 + 4511: 70,11 + 4512: 70,9 + 4513: 70,10 + 4514: 70,11 + 4525: 4,19 + 4526: 4,20 + 4527: 4,21 + 4577: 28,-1 + 4578: 26,-1 + 4737: -27,74 + 4738: -27,73 + 4743: -26,74 + 4744: -26,73 + 4815: 34,-32 + 4816: 34,-33 + 4817: 34,-34 + 4818: 34,-35 + 4819: 34,-36 + 4820: 34,-37 + 4821: 34,-38 + 4822: 34,-39 + 4852: 34,-29 + 4883: 32,-47 + 4884: 32,-46 + 4885: 32,-45 + 4952: 25,-32 + 4953: 25,-33 + 4954: 25,-34 + 4958: 28,-33 + - node: + zIndex: 100 + color: '#FFFFFFFF' + id: WarnLineS + decals: + 2888: 7,24 + - node: + color: '#DE3A3A96' + id: WarnLineW + decals: + 2296: 67,62 + 2297: 69,62 + 2302: 71,60 + 2305: 66,62 + 2306: 65,62 + 2307: 64,62 + 2308: 63,62 + 2340: 67,56 + 2364: 67,46 + 2728: 73,11 + 2729: 72,11 + - node: + color: '#FFFFFFFF' + id: WarnLineW + decals: + 1243: -22,43 + 1244: -21,43 + 1245: -20,43 + 1255: -23,19 + 1259: -23,15 + 1270: -17,43 + 1271: -16,43 + 1272: -15,43 + 1273: -14,43 + 1274: -13,43 + 1295: -10,39 + 1296: -9,39 + 1297: -8,39 + 1308: -3,38 + 1396: -32,28 + 1688: -35,29 + 1742: -20,62 + 1743: -19,62 + 1744: -18,62 + 1745: -17,62 + 1746: -16,62 + 1747: -15,62 + 1857: 31,5 + 1873: 37,7 + 1874: 38,7 + 1922: 38,17 + 2144: 62,26 + 2154: 55,19 + 2155: 56,19 + 2156: 57,19 + 2157: 58,19 + 2158: 59,19 + 2164: 52,22 + 2176: 51,31 + 2187: 47,26 + 2191: -29,50 + 2192: -28,50 + 2193: -27,50 + 2194: -4,64 + 2202: 20,60 + 2204: 16,63 + 2233: 42,54 + 2370: 75,57 + 2383: 60,44 + 2439: 81,44 + 2468: 75,5 + 2498: 68,3 + 2501: 70,4 + 2502: 71,4 + 2591: 47,48 + 3788: 51,1 + 4149: -16,26 + 4150: -15,26 + 4319: 1,24 + 4320: 0,24 + 4321: -1,24 + 4325: 1,44 + 4326: 0,44 + 4327: -1,44 + 4343: 4,54 + 4344: 5,54 + 4345: 6,54 + 4346: 6,61 + 4347: 5,61 + 4348: 4,61 + 4349: 4,65 + 4350: 5,65 + 4351: 6,65 + 4367: 11,46 + 4368: 12,46 + 4369: 13,46 + 4386: 30,46 + 4387: 31,46 + 4388: 32,46 + 4389: 33,46 + 4399: 31,36 + 4400: 32,36 + 4401: 33,36 + 4402: 33,32 + 4403: 32,32 + 4404: 31,32 + 4412: 30,22 + 4413: 31,22 + 4414: 32,22 + 4415: 33,22 + 4416: 23,18 + 4417: 25,18 + 4430: 7,18 + 4431: 8,18 + 4432: 11,18 + 4433: 10,18 + 4457: 50,36 + 4458: 52,36 + 4459: 51,36 + 4460: 55,36 + 4461: 56,36 + 4462: 57,36 + 4478: 64,32 + 4479: 65,32 + 4480: 66,32 + 4481: 66,36 + 4482: 64,36 + 4483: 65,36 + 4489: 70,36 + 4490: 69,36 + 4491: 66,52 + 4492: 65,52 + 4493: 64,52 + 4508: 64,22 + 4509: 65,22 + 4510: 66,22 + 4693: 43,10 + 4702: -36,70 + 4703: -35,70 + 4704: -34,70 + 4705: -32,70 + 4706: -33,70 + 4707: -31,70 + 4708: -30,70 + 4709: -29,70 + 4710: -28,70 + 4728: -36,69 + 4729: -35,69 + 4730: -34,69 + 4731: -33,69 + 4732: -32,69 + 4733: -31,69 + 4734: -30,69 + 4735: -29,69 + 4736: -28,69 + 4829: 30,-25 + 4833: 30,-23 + 4843: 30,-41 + 4844: 30,-43 + 4895: 29,-48 + 4896: 30,-48 + 4897: 31,-48 + 4955: 30,-28 + - node: + color: '#FFFFFFFF' + id: WoodTrimThinCornerNw + decals: + 4671: 71,31 + - node: + color: '#FFFFFFFF' + id: WoodTrimThinEndS + decals: + 4670: 71,30 + - node: + color: '#FFFFFFFF' + id: WoodTrimThinLineN + decals: + 4672: 72,31 + 4673: 73,31 + - node: + color: '#FFFFFFFF' + id: WoodTrimThinLineS + decals: + 4674: 72,31 + 4676: 73,30 + - node: + color: '#FFFFFFFF' + id: WoodTrimThinLineW + decals: + 4675: 73,30 + - node: + color: '#951710FF' + id: prolizard + decals: + 2838: 27.004784,64.98674 + - node: + color: '#951710FF' + id: star + decals: + 2837: 28,64 + - type: GridAtmosphere + version: 2 + data: + tiles: + 0,0: + 0: 62050 + -1,0: + 0: 63688 + 1: 17 + 0,1: + 0: 65535 + -1,1: + 0: 65535 + 0,2: + 0: 65535 + -1,2: + 0: 65535 + 0,3: + 0: 48015 + -1,3: + 0: 56604 + 0,4: + 0: 61631 + 1,0: + 1: 31 + 0: 56320 + 1,1: + 0: 54749 + 1,2: + 0: 65497 + 1,3: + 0: 55773 + 1,4: + 0: 63711 + 1,-1: + 1: 32768 + 2,1: + 0: 61559 + 2,2: + 0: 65308 + 2,3: + 0: 63711 + 2,-1: + 1: 65280 + 2,0: + 0: 26144 + 2,4: + 0: 65023 + 3,0: + 0: 56785 + 3,1: + 0: 65529 + 3,2: + 0: 56719 + 3,3: + 0: 56541 + 3,-1: + 1: 62208 + 3,4: + 0: 64729 + 4,0: + 0: 37136 + 4,1: + 0: 20444 + 4,2: + 0: 22374 + 4,3: + 0: 60933 + -4,0: + 0: 30583 + -4,-1: + 0: 30483 + 1: 8 + -5,0: + 0: 3276 + 1: 273 + -4,1: + 0: 65522 + -4,2: + 0: 53495 + -5,2: + 0: 63022 + -4,3: + 0: 7647 + -5,3: + 0: 62463 + -4,4: + 0: 64271 + -3,0: + 1: 2001 + -3,1: + 0: 30583 + -3,2: + 0: 65394 + -3,3: + 0: 4095 + -3,-1: + 1: 4369 + -3,4: + 0: 61903 + -2,0: + 1: 240 + 0: 28672 + -2,1: + 0: 65399 + -2,2: + 0: 65287 + -2,3: + 0: 61160 + -2,4: + 0: 53487 + -1,4: + 0: 61917 + -8,0: + 2: 4368 + 3: 52416 + -9,0: + 2: 52416 + 1: 4369 + -8,1: + 0: 64848 + 1: 160 + -9,1: + 1: 433 + 0: 64576 + -8,2: + 0: 65535 + -9,2: + 0: 64766 + 1: 257 + -8,3: + 0: 65535 + -9,3: + 0: 64766 + 1: 257 + -8,4: + 0: 65535 + -8,-1: + 1: 57902 + 0: 128 + -7,0: + 3: 4368 + 1: 17476 + -7,1: + 0: 45328 + 1: 100 + -7,2: + 0: 65339 + -7,3: + 0: 65535 + -7,-1: + 1: 61455 + 0: 240 + -7,4: + 0: 65535 + -6,1: + 0: 61986 + -6,2: + 0: 62191 + -6,0: + 1: 32563 + -6,-1: + 1: 12847 + -6,3: + 0: 61102 + -6,4: + 0: 28514 + -5,-1: + 1: 4369 + 0: 52364 + -5,1: + 0: 26182 + -5,4: + 0: 65392 + -4,5: + 0: 65291 + -5,5: + 0: 30591 + -4,6: + 0: 29695 + -4,7: + 0: 30583 + -5,6: + 0: 63344 + -5,7: + 0: 47359 + -4,8: + 0: 26478 + -3,5: + 0: 61167 + -3,6: + 0: 62702 + -3,7: + 0: 65279 + -3,8: + 0: 65535 + -2,5: + 0: 53727 + -2,6: + 0: 64733 + -2,7: + 0: 57297 + -2,8: + 0: 61156 + -1,5: + 0: 56575 + -1,6: + 0: 48057 + -1,7: + 0: 49080 + 0,5: + 0: 30719 + 0,6: + 0: 46067 + 0,7: + 0: 46075 + -1,8: + 0: 64504 + 0,8: + 0: 48059 + 1,5: + 0: 45311 + 1,6: + 0: 64543 + 1,7: + 0: 45311 + 1,8: + 0: 48127 + 2,5: + 0: 28927 + 2,6: + 0: 52975 + 2,7: + 0: 64797 + 2,8: + 0: 65535 + 3,5: + 0: 28671 + 3,6: + 0: 14327 + 3,7: + 0: 65467 + 3,8: + 0: 65309 + 4,4: + 0: 62384 + 4,5: + 0: 22527 + 4,6: + 0: 30711 + 4,7: + 0: 65535 + 0,9: + 0: 48051 + -1,9: + 0: 48011 + 0,10: + 0: 46011 + -1,10: + 0: 64395 + 0,11: + 0: 63347 + -1,11: + 0: 64729 + 0,12: + 0: 56575 + 1,9: + 0: 65520 + 1,10: + 0: 62207 + 1,11: + 0: 64767 + 1,12: + 0: 30719 + 2,9: + 0: 48049 + 2,10: + 0: 53435 + 2,11: + 0: 63709 + 2,12: + 0: 63231 + 3,9: + 0: 30582 + 3,10: + 0: 45815 + 3,11: + 0: 62399 + 3,12: + 0: 28927 + 4,8: + 0: 65487 + 4,9: + 0: 65524 + 4,10: + 0: 30520 + 4,11: + 0: 61559 + -5,8: + 0: 49075 + -4,9: + 0: 30590 + -5,9: + 0: 63667 + -4,10: + 0: 62071 + -5,10: + 0: 45311 + -4,11: + 0: 61695 + -5,11: + 0: 33211 + -4,12: + 0: 64511 + -3,9: + 0: 65279 + -3,10: + 0: 45823 + -3,11: + 0: 61627 + -3,12: + 0: 53759 + -2,9: + 0: 65422 + -2,10: + 0: 56351 + -2,11: + 0: 61661 + -2,12: + 0: 53503 + -1,12: + 0: 53503 + 5,4: + 0: 63740 + 5,5: + 0: 61695 + 5,6: + 0: 61439 + 5,3: + 0: 65263 + 5,7: + 0: 60942 + 5,8: + 0: 61183 + 6,4: + 0: 62199 + 6,5: + 0: 58623 + 6,6: + 0: 61182 + 6,3: + 0: 32631 + 6,7: + 0: 57582 + 6,8: + 0: 61183 + 7,4: + 0: 61559 + 7,5: + 0: 40191 + 7,6: + 0: 48059 + 7,7: + 0: 47295 + 7,8: + 0: 65531 + 8,4: + 0: 45967 + 8,5: + 0: 13247 + 1: 32768 + 8,6: + 0: 13107 + 1: 32776 + 8,7: + 0: 13107 + 1: 2056 + 4,12: + 0: 61695 + 5,9: + 0: 56796 + 5,10: + 0: 47309 + 5,11: + 0: 62139 + 5,12: + 0: 63743 + 6,9: + 0: 60943 + 6,10: + 0: 56558 + 6,11: + 0: 61663 + 6,12: + 0: 12799 + 1: 32768 + 7,9: + 0: 48011 + 7,10: + 0: 48059 + 7,11: + 0: 64667 + 7,12: + 0: 16639 + 1: 4096 + 8,8: + 0: 65531 + 8,9: + 0: 65459 + 8,10: + 0: 46011 + 8,11: + 0: 62395 + 8,3: + 0: 65520 + 9,4: + 0: 29919 + 9,5: + 0: 58999 + 9,3: + 0: 55772 + 9,6: + 1: 176 + 0: 57344 + 9,7: + 0: 1774 + 9,8: + 0: 65523 + 10,4: + 0: 62207 + 10,5: + 0: 63743 + 10,6: + 0: 28688 + 1: 160 + 10,7: + 0: 28791 + 10,3: + 0: 14523 + 11,4: + 0: 36607 + 11,5: + 0: 40157 + 11,6: + 1: 272 + 0: 52428 + 11,7: + 1: 257 + 0: 52428 + 11,3: + 0: 6007 + 12,4: + 0: 7163 + 12,5: + 0: 8157 + 12,6: + 0: 30711 + 12,7: + 0: 57297 + 8,12: + 0: 35071 + 1: 12288 + 9,9: + 0: 65520 + 9,10: + 0: 28735 + 9,11: + 0: 62071 + 9,12: + 0: 33023 + 10,8: + 0: 65520 + 10,9: + 0: 48048 + 10,10: + 0: 30507 + 10,11: + 0: 29303 + 10,12: + 0: 29055 + 11,8: + 0: 65520 + 11,9: + 0: 65522 + 11,10: + 0: 65535 + 11,11: + 0: 53503 + 11,12: + 0: 65437 + 12,8: + 0: 65520 + 12,9: + 0: 65500 + 12,10: + 0: 63325 + 12,11: + 0: 29183 + 4,13: + 0: 65535 + 3,13: + 0: 20991 + 4,14: + 0: 30511 + 4,15: + 0: 63344 + 3,15: + 0: 35571 + 4,16: + 0: 30705 + 5,13: + 0: 65535 + 5,14: + 0: 2047 + 5,15: + 0: 48031 + 6,13: + 0: 13107 + 1: 34952 + 6,14: + 0: 12595 + 1: 2184 + 6,15: + 0: 56735 + 6,16: + 0: 4317 + 1: 24576 + 7,14: + 1: 3328 + 0: 14 + 7,15: + 0: 45983 + 7,13: + 0: 61152 + 7,16: + 0: 825 + 1: 2048 + 8,15: + 0: 62207 + 0,13: + 0: 20941 + -1,13: + 0: 65421 + -1,14: + 0: 56735 + 0,14: + 0: 32608 + 0,15: + 0: 65287 + -1,15: + 0: 65293 + 0,16: + 0: 59151 + 1,13: + 0: 30719 + 1,14: + 0: 30583 + 1,15: + 0: 30583 + 1,16: + 0: 65407 + 2,13: + 0: 65535 + 2,14: + 0: 62719 + 2,15: + 0: 61695 + 2,16: + 0: 64783 + 3,14: + 0: 28753 + 3,16: + 0: 28387 + -5,12: + 0: 28808 + 1: 35 + -4,13: + 0: 65439 + -4,14: + 0: 40959 + -5,14: + 0: 20466 + -4,15: + 0: 35771 + -5,15: + 0: 65535 + -4,16: + 0: 13098 + -3,13: + 0: 65437 + -3,14: + 0: 64799 + -3,15: + 0: 5405 + -3,16: + 0: 63253 + -2,13: + 0: 65421 + -2,14: + 0: 56783 + -2,15: + 0: 65293 + -2,16: + 0: 30511 + -1,16: + 0: 15135 + 8,13: + 0: 61160 + 8,14: + 1: 672 + 0: 32768 + 8,16: + 0: 8751 + 1: 2048 + 9,14: + 1: 18 + 0: 63624 + 9,15: + 0: 36559 + 9,13: + 1: 514 + 0: 2184 + 9,16: + 0: 3822 + 10,13: + 0: 19959 + 4: 512 + 10,14: + 0: 61247 + 10,15: + 0: 36654 + 10,16: + 0: 3003 + 11,13: + 0: 52700 + 11,14: + 0: 45967 + 11,15: + 0: 13195 + 1: 32768 + 11,16: + 0: 819 + 1: 32904 + 12,12: + 0: 26119 + 12,13: + 0: 3823 + 12,14: + 0: 47615 + 12,15: + 0: 51 + 1: 30848 + -9,4: + 0: 64766 + 1: 257 + -8,5: + 0: 12603 + 1: 128 + 2: 32768 + -9,5: + 0: 49406 + 1: 4353 + -8,6: + 0: 62259 + 2: 136 + -9,6: + 0: 65532 + -8,7: + 0: 4379 + 1: 52224 + -9,7: + 0: 1919 + -8,8: + 0: 1 + 1: 32764 + -7,5: + 0: 34827 + 1: 48 + 2: 12288 + -7,6: + 2: 51 + 0: 63616 + -7,7: + 0: 61167 + -7,8: + 0: 61166 + -6,5: + 0: 48034 + -6,6: + 0: 65521 + -6,7: + 0: 46079 + -6,8: + 0: 61160 + -9,8: + 1: 65527 + -8,9: + 1: 65407 + -9,9: + 1: 65535 + -8,10: + 1: 19647 + 0: 576 + -9,10: + 1: 255 + 0: 3328 + -8,11: + 1: 4 + 0: 3072 + -8,12: + 1: 12 + 0: 55296 + -7,11: + 0: 4079 + -7,9: + 0: 61166 + -7,10: + 0: 58606 + -7,12: + 1: 10 + 0: 45824 + -6,9: + 0: 62392 + -6,10: + 0: 57599 + -6,11: + 0: 3310 + -6,12: + 1: 250 + 0: 45056 + -11,9: + 1: 3080 + -11,10: + 1: 8 + -10,8: + 1: 65535 + -10,9: + 1: 65535 + -10,10: + 1: 255 + 0: 1024 + -11,6: + 1: 30583 + -11,7: + 1: 3815 + -11,4: + 1: 17440 + -11,5: + 1: 57444 + -10,4: + 5: 119 + 2: 28672 + -10,5: + 2: 119 + 1: 45056 + -10,6: + 2: 13104 + 0: 34944 + -10,7: + 1: 16 + 0: 4008 + -10,3: + 5: 28672 + 6: 119 + -11,1: + 1: 26304 + -11,2: + 1: 24644 + -11,3: + 1: 17476 + -10,1: + 1: 242 + 2: 28672 + -10,2: + 2: 119 + 6: 28672 + -10,0: + 1: 2048 + -9,-1: + 1: 61696 + -9,-4: + 1: 34952 + -9,-5: + 1: 34944 + -8,-4: + 1: 4111 + 0: 49376 + -8,-3: + 1: 12575 + 0: 32960 + -8,-5: + 0: 57344 + 1: 240 + -8,-2: + 1: 8750 + 0: 32896 + -7,-4: + 1: 15 + 0: 28720 + -7,-3: + 1: 15 + 0: 61552 + -7,-2: + 1: 15 + 0: 61680 + -7,-5: + 0: 12288 + 1: 244 + -6,-4: + 1: 6559 + -6,-3: + 1: 8751 + -6,-2: + 1: 8751 + -6,-5: + 1: 39397 + 0: 16 + -5,-4: + 1: 65280 + -5,-3: + 1: 6143 + 0: 34816 + -5,-2: + 1: 4369 + 0: 52428 + -4,-4: + 1: 65280 + -4,-3: + 1: 36607 + 0: 4352 + -4,-2: + 0: 13107 + 1: 34952 + -8,13: + 0: 56543 + -9,12: + 0: 32768 + 1: 768 + -9,13: + 0: 49288 + 1: 275 + -8,14: + 0: 36849 + -9,14: + 0: 36863 + -8,15: + 0: 63709 + -9,15: + 0: 63965 + -8,16: + 0: 65535 + -7,13: + 0: 48059 + -7,14: + 0: 4081 + -7,15: + 0: 56541 + -7,16: + 0: 56605 + -6,13: + 0: 48059 + -6,14: + 0: 8177 + -6,15: + 0: 45943 + -6,16: + 0: 30491 + -5,13: + 0: 30583 + -5,16: + 0: 65487 + -4,17: + 0: 819 + -5,17: + 0: 4095 + -4,18: + 1: 1792 + -5,18: + 1: 3840 + -4,19: + 1: 25207 + -5,19: + 1: 43775 + -3,17: + 0: 8999 + 1: 34816 + -2,17: + 0: 9767 + 1: 34816 + -1,17: + 0: 52235 + 1: 4352 + -1,18: + 0: 52428 + -1,19: + 0: 224 + 0,17: + 0: 65287 + 0,18: + 0: 65535 + 0,19: + 0: 4095 + -9,16: + 0: 65487 + -8,17: + 0: 65535 + -9,17: + 0: 61439 + -8,18: + 0: 65535 + -9,18: + 0: 61166 + -8,19: + 0: 55 + 1: 63488 + -9,19: + 0: 140 + 1: 62224 + -8,20: + 1: 5 + -7,17: + 0: 56797 + -7,18: + 0: 4081 + -7,19: + 1: 4028 + -6,17: + 0: 14199 + -6,18: + 0: 1904 + -6,19: + 1: 47871 + -6,20: + 1: 12 + -5,20: + 1: 90 + -11,13: + 1: 24816 + -11,12: + 1: 49152 + -11,14: + 1: 64 + -10,12: + 1: 65280 + -10,13: + 1: 287 + 0: 17472 + -10,14: + 0: 759 + -10,17: + 1: 25700 + -10,18: + 1: 51404 + -10,16: + 1: 17408 + -10,19: + 1: 35016 + -9,20: + 1: 5 + 0,20: + 1: 39 + 1,17: + 0: 65535 + 1,18: + 0: 65535 + 1,19: + 0: 36863 + 1,20: + 1: 1123 + 2,17: + 0: 65309 + 2,18: + 0: 65535 + 2,19: + 0: 14199 + 3,17: + 0: 21958 + 3,18: + 0: 24533 + 3,19: + 1: 272 + 0: 1220 + 2,20: + 1: 744 + 4,17: + 0: 4470 + 4,18: + 0: 273 + 5,16: + 0: 2032 + 5,17: + 1: 2 + 6,17: + 1: 11810 + 0: 32896 + 6,18: + 1: 11810 + 0: 32896 + 6,19: + 1: 11810 + 0: 32896 + 6,20: + 1: 226 + 7,17: + 0: 61680 + 1: 3842 + 7,18: + 0: 61680 + 1: 3842 + 7,19: + 0: 61680 + 1: 3842 + 7,20: + 1: 35058 + 8,17: + 1: 12151 + 0: 32896 + 8,18: + 1: 12066 + 0: 32896 + 8,19: + 1: 12066 + 0: 32896 + 4,-1: + 1: 4980 + 5,1: + 0: 4049 + 5,2: + 0: 65535 + 5,0: + 7: 2184 + 5,-1: + 7: 32768 + 0: 49 + 1: 8 + 6,0: + 7: 817 + 0: 34944 + 6,1: + 0: 61424 + 6,2: + 0: 30578 + 6,-1: + 7: 4096 + 0: 57344 + 1: 138 + 7,0: + 0: 55807 + 7,1: + 0: 63964 + 7,2: + 1: 4368 + 0: 52416 + 7,3: + 0: 1904 + 7,-1: + 0: 61440 + 1: 170 + 8,0: + 0: 63694 + 8,1: + 0: 55551 + 8,2: + 0: 44968 + 5,-4: + 0: 53521 + 1: 10248 + 5,-5: + 0: 4369 + 1: 2062 + 5,-3: + 0: 21845 + 1: 2048 + 5,-2: + 0: 21845 + 1: 160 + 6,-4: + 0: 29696 + 1: 33314 + 7: 8 + 6,-3: + 1: 2816 + 0: 62708 + 6,-2: + 1: 176 + 0: 17476 + 6,-5: + 1: 8739 + 7: 34952 + 7,-4: + 7: 255 + 1: 61440 + 7,-3: + 0: 4112 + 1: 20292 + 7,-2: + 1: 62900 + 0: 64 + 7,-5: + 7: 65535 + 8,-4: + 7: 19 + 1: 14472 + 0: 50176 + 8,-3: + 1: 3840 + 0: 61684 + 8,-2: + 1: 4528 + 0: 17476 + 8,-1: + 0: 43535 + 8,-5: + 7: 13107 + 1: 34952 + 9,-4: + 0: 28672 + 1: 33282 + 9,-3: + 0: 21588 + 1: 768 + 9,-2: + 1: 176 + 0: 17476 + 9,-1: + 0: 4879 + 1: 34816 + 9,0: + 0: 4113 + 1: 3276 + 10,-4: + 0: 4369 + 1: 36488 + 10,-2: + 0: 4369 + 1: 52256 + 10,-1: + 0: 35217 + 1: 558 + 10,-5: + 0: 4369 + 1: 36488 + 10,-3: + 0: 4369 + 1: 34440 + 10,0: + 0: 20206 + 11,-4: + 1: 3848 + 0: 57568 + 11,-3: + 1: 35720 + 11,-2: + 1: 4047 + 11,-1: + 0: 61166 + 11,0: + 0: 61166 + 11,-5: + 0: 57568 + 1: 3848 + 12,-4: + 0: 12336 + 1: 36744 + 12,-3: + 1: 248 + 0: 57344 + 12,-1: + 0: 65535 + 9,1: + 0: 64543 + 9,2: + 0: 65535 + 10,1: + 0: 47567 + 10,2: + 0: 47547 + 11,1: + 0: 47886 + 11,2: + 0: 3955 + 12,0: + 0: 65535 + 12,1: + 0: 65519 + 12,2: + 0: 32626 + 12,3: + 0: 48050 + 13,4: + 0: 35771 + 13,5: + 0: 44027 + 13,6: + 0: 65535 + 13,7: + 0: 57308 + 13,3: + 0: 46008 + 13,8: + 0: 65532 + 14,4: + 0: 65535 + 14,5: + 0: 4095 + 14,6: + 0: 7645 + 14,7: + 0: 57309 + 14,3: + 0: 61695 + 14,8: + 0: 65521 + 15,5: + 0: 17781 + 15,6: + 0: 17781 + 15,7: + 0: 32631 + 15,4: + 0: 20010 + 15,3: + 0: 43697 + 16,4: + 0: 65535 + 16,5: + 0: 30719 + 16,6: + 0: 63351 + 16,7: + 0: 30583 + 13,0: + 0: 65535 + 13,1: + 0: 4895 + 7: 52224 + 13,2: + 0: 65520 + 13,-1: + 0: 65535 + 14,0: + 0: 13107 + 1: 34952 + 14,1: + 0: 3 + 1: 61064 + 14,-1: + 0: 13107 + 1: 34952 + 14,2: + 1: 142 + 0: 8736 + 15,0: + 1: 12291 + 0: 34944 + 15,1: + 1: 48 + 0: 2184 + 15,2: + 1: 272 + 0: 52428 + 16,0: + 0: 65527 + 16,1: + 0: 12287 + 16,2: + 0: 65535 + 16,3: + 0: 65527 + 13,9: + 0: 65535 + 13,10: + 0: 65455 + 13,11: + 0: 20479 + 13,12: + 7: 61439 + 14,9: + 0: 65523 + 14,10: + 0: 47927 + 14,11: + 0: 35643 + 14,12: + 0: 9854 + 15,8: + 0: 65520 + 15,9: + 0: 30576 + 15,10: + 0: 30567 + 15,11: + 0: 63251 + 8: 4 + 15,12: + 0: 30471 + 16,8: + 0: 65527 + 16,9: + 0: 65535 + 16,10: + 0: 65399 + 16,11: + 0: 32767 + 12,-2: + 0: 43246 + 12,-5: + 1: 36744 + 0: 12336 + 13,-4: + 1: 3848 + 0: 57568 + 13,-3: + 1: 35064 + 0: 12288 + 13,-2: + 0: 8243 + 1: 2184 + 13,-5: + 0: 57568 + 1: 3848 + 14,-4: + 0: 12336 + 1: 36744 + 14,-2: + 1: 36857 + 14,-3: + 1: 17032 + 14,-5: + 1: 36744 + 0: 12336 + 15,-2: + 1: 16 + 0: 4096 + 15,-1: + 1: 245 + 16,-1: + 1: 1533 + 16,12: + 0: 30583 + 17,8: + 0: 65520 + 17,9: + 0: 65527 + 17,10: + 0: 56591 + 17,11: + 0: 3581 + 17,7: + 0: 65535 + 17,12: + 0: 32631 + 18,8: + 0: 49072 + 18,9: + 0: 56784 + 18,10: + 0: 60943 + 18,11: + 0: 57598 + 18,7: + 0: 65535 + 18,12: + 0: 40959 + 19,8: + 0: 49072 + 19,9: + 0: 32624 + 19,10: + 0: 63239 + 19,11: + 0: 61559 + 19,7: + 0: 32631 + 20,8: + 0: 65535 + 20,9: + 0: 30719 + 20,10: + 0: 65319 + 20,11: + 0: 16175 + 17,4: + 0: 65528 + 17,5: + 0: 61695 + 17,6: + 0: 65535 + 17,3: + 0: 61152 + 18,4: + 0: 57304 + 18,5: + 0: 20573 + 18,6: + 0: 61909 + 18,3: + 0: 64433 + 19,4: + 0: 53523 + 19,5: + 0: 7 + 1: 1792 + 19,6: + 0: 10103 + 19,3: + 0: 4112 + 1: 192 + 20,4: + 0: 12288 + 1: 34816 + 20,5: + 0: 65522 + 20,6: + 0: 32767 + 20,7: + 0: 63346 + 17,0: + 0: 65024 + 1: 4 + 17,2: + 0: 65521 + 17,1: + 0: 14 + 1: 17408 + 17,-1: + 1: 17532 + 18,0: + 0: 65407 + 18,1: + 0: 63487 + 18,2: + 0: 30583 + 18,-1: + 0: 30498 + 1: 8 + 19,0: + 0: 4355 + 19,1: + 0: 12305 + 19,2: + 1: 12592 + 20,3: + 1: 2288 + 17,-4: + 1: 17476 + 17,-3: + 1: 17476 + 17,-2: + 1: 50244 + 18,-2: + 0: 8192 + 1: 32768 + 19,-2: + 1: 4369 + 19,-1: + 1: 785 + 19,-4: + 1: 4369 + 19,-3: + 1: 40721 + 20,-3: + 1: 36096 + 12,-7: + 1: 31456 + 0: 32768 + 11,-7: + 1: 61440 + 12,-6: + 0: 12336 + 1: 36744 + 11,-6: + 0: 57568 + 1: 3848 + 13,-7: + 1: 62000 + 13,-6: + 1: 3848 + 0: 57568 + 14,-7: + 1: 61440 + 14,-6: + 0: 12336 + 1: 36744 + 8,-8: + 0: 21789 + 8,-9: + 0: 64972 + 7,-8: + 0: 61439 + 8,-7: + 0: 30469 + 7,-7: + 0: 65358 + 8,-6: + 0: 7 + 7: 13056 + 1: 34816 + 7,-6: + 7: 61696 + 0: 1093 + 9,-8: + 0: 30529 + 1: 132 + 9,-7: + 0: 3891 + 1: 4104 + 9,-6: + 1: 1297 + 9,-5: + 1: 523 + 9,-9: + 0: 4369 + 1: 50244 + 10,-7: + 0: 4352 + 1: 57344 + 10,-8: + 1: 256 + 10,-6: + 0: 4369 + 1: 36488 + 8,20: + 1: 64210 + 0: 32 + 9,17: + 0: 61680 + 1: 3842 + 9,18: + 0: 61680 + 1: 3842 + 9,19: + 0: 61680 + 1: 3842 + 9,20: + 1: 242 + 10,17: + 1: 9006 + 10,18: + 1: 8994 + 10,19: + 1: 8994 + 10,20: + 1: 50 + 11,17: + 1: 71 + 12,16: + 1: 4368 + -7,-6: + 1: 49152 + -6,-6: + 1: 28672 + 13,13: + 0: 12016 + 13,14: + 0: 7419 + 13,15: + 1: 4400 + 14,13: + 0: 6014 + 14,14: + 0: 37883 + 14,15: + 0: 2184 + 15,13: + 0: 1911 + 15,14: + 0: 53623 + 15,15: + 0: 24031 + 15,16: + 0: 85 + 16,13: + 0: 63351 + 16,14: + 0: 32639 + 16,15: + 0: 4095 + 16,16: + 1: 39 + 17,13: + 0: 65287 + 17,14: + 0: 30719 + 17,15: + 0: 22399 + 17,16: + 0: 85 + 18,13: + 0: 36847 + 18,14: + 0: 63726 + 18,15: + 0: 4095 + 18,16: + 1: 143 + 19,12: + 0: 52688 + 19,13: + 0: 58617 + 19,14: + 0: 61679 + 19,15: + 0: 4095 + 19,16: + 1: 47 + 20,12: + 0: 4368 + 20,13: + 0: 16 + 1: 25668 + 20,14: + 1: 34 + 0: 8192 + 20,15: + 0: 546 + 21,8: + 0: 65535 + 21,9: + 0: 2047 + 21,10: + 1: 26351 + 21,7: + 0: 63232 + 1: 15 + 21,11: + 1: 9830 + 22,9: + 1: 13926 + 22,10: + 1: 1 + 22,8: + 1: 26214 + 22,7: + 1: 26161 + 21,4: + 1: 35320 + 21,5: + 1: 26350 + 21,6: + 1: 58982 + 21,3: + 1: 63600 + 21,0: + 1: 136 + 22,0: + 1: 4369 + 21,1: + 1: 2176 + 22,1: + 1: 4369 + 21,2: + 1: 2176 + 22,2: + 1: 4883 + 22,3: + 1: 1815 + 22,-1: + 1: 12593 + -4,20: + 1: 1 + 5,-8: + 1: 19812 + 5,-7: + 1: 2 + 0: 7936 + 5,-6: + 0: 4369 + 1: 1024 + 5,-9: + 1: 25684 + 6,-8: + 0: 3591 + 1: 4352 + 6,-7: + 0: 52684 + 1: 4113 + 6,-9: + 0: 63239 + 6,-6: + 1: 8977 + 0: 12 + 7: 34816 + 7,-9: + 0: 65358 + 5,-10: + 1: 26346 + 5,-13: + 1: 60044 + 5,-12: + 1: 59528 + 5,-11: + 1: 51402 + 6,-10: + 0: 32352 + 6,-12: + 1: 8738 + 0: 34952 + 6,-11: + 1: 50722 + 0: 8 + 6,-13: + 1: 9921 + 7,-12: + 0: 64511 + 7,-11: + 0: 57599 + 7,-10: + 0: 65520 + 7,-13: + 0: 61440 + 1: 240 + 8,-12: + 0: 13107 + 1: 34952 + 8,-11: + 0: 19 + 1: 27784 + 8,-10: + 0: 57296 + 21,-3: + 1: 36608 + 21,-2: + 1: 136 + 22,-2: + 1: 29041 + 21,-1: + 1: 128 + 8,-13: + 0: 4096 + 1: 35952 + 9,-10: + 0: 4096 + 1: 52458 + 9,-12: + 1: 57890 + 9,-11: + 1: 25194 + 9,-13: + 1: 59943 + 10,-9: + 1: 16 + 8,-14: + 1: 63872 + 7,-14: + 1: 61856 + 9,-14: + 1: 12800 + 5,-14: + 1: 34816 + 6,-14: + 1: 61984 + 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 + - volume: 2500 + temperature: 293.15 + moles: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - volume: 2500 + temperature: 293.15 + moles: + - 0 + - 0 + - 0 + - 6666.982 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - volume: 2500 + temperature: 293.14948 + moles: + - 18.472576 + - 69.49208 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - volume: 2500 + temperature: 293.15 + moles: + - 6666.982 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - volume: 2500 + temperature: 293.15 + moles: + - 0 + - 6666.982 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - volume: 2500 + temperature: 235 + moles: + - 21.824879 + - 82.10312 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - volume: 2500 + temperature: 293.1495 + moles: + - 20.078888 + - 75.53487 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + chunkSize: 4 + - type: GasTileOverlay + - type: RadiationGridResistance + - type: NavMap + - type: BecomesStation + id: Gaxstation +- proto: AirAlarm + entities: + - uid: 3 + components: + - type: Transform + pos: 75.5,63.5 + parent: 2 + - type: DeviceList + devices: + - 11851 + - 8552 + - 8549 + - 8550 + - 8551 + - 8554 + - 8553 + - 8555 + - 11849 + - 11850 + - 11848 + - 422 + - 421 + - 8915 + - 8916 + - 8917 + - 8919 + - 8920 + - 8918 + - 8922 + - uid: 4 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 67.5,40.5 + parent: 2 + - type: DeviceList + devices: + - 464 + - 8923 + - 8924 + - 11831 + - 11680 + - 8551 + - 8550 + - 8549 + - 8570 + - 8571 + - 8572 + - 8597 + - 8599 + - 8598 + - 11694 + - 11841 + - 429 + - 8564 + - 8565 + - 8566 + - 8575 + - 8574 + - 8573 + - 8569 + - 8568 + - 8567 + - uid: 5 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 79.5,32.5 + parent: 2 + - type: DeviceList + devices: + - 423 + - 11683 + - 11834 + - 11837 + - 11686 + - 8582 + - 8583 + - 8581 + - 8580 + - 8562 + - 8563 + - 8559 + - 8586 + - 8584 + - 428 + - 426 + - 8585 + - 424 + - 8576 + - 8588 + - 8578 + - 425 + - 11687 + - 8589 + - 11838 + - 427 + - 8577 + - 304 + - 18618 + - 18619 + - uid: 6 + components: + - type: Transform + pos: 74.5,46.5 + parent: 2 + - type: DeviceList + devices: + - 423 + - 8557 + - 8558 + - 8559 + - 365 + - 11833 + - 11832 + - 11834 + - uid: 7 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 79.5,25.5 + parent: 2 + - type: DeviceList + devices: + - 11838 + - 11687 + - 11688 + - 11839 + - 428 + - 425 + - 8590 + - 8588 + - uid: 8 + components: + - type: Transform + pos: 71.5,22.5 + parent: 2 + - type: DeviceList + devices: + - 11695 + - 11843 + - 11694 + - 11841 + - 429 + - 364 + - 11696 + - 8579 + - 8594 + - 8593 + - 8592 + - 8599 + - 8598 + - 8597 + - 8596 + - 8595 + - 11844 + - 8872 + - uid: 9 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 71.5,7.5 + parent: 2 + - type: DeviceList + devices: + - 435 + - 11845 + - 8601 + - 8600 + - 8594 + - 8593 + - 8592 + - 11847 + - 11699 + - 11846 + - 11698 + - 434 + - 8604 + - 8603 + - 8602 + - uid: 10 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 49.5,36.5 + parent: 2 + - type: DeviceList + devices: + - 11808 + - 11653 + - 436 + - 11805 + - 11652 + - 420 + - 419 + - 11810 + - 8610 + - 8609 + - 8608 + - 8607 + - 8606 + - 8605 + - 8619 + - 8618 + - 8617 + - 8627 + - 8628 + - 8629 + - 8573 + - 8574 + - 8575 + - 8612 + - 8611 + - 8641 + - 8640 + - 8623 + - 8925 + - uid: 11 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,41.5 + parent: 2 + - type: DeviceList + devices: + - 366 + - 11802 + - 11649 + - 8622 + - 8621 + - 8623 + - 8613 + - 8624 + - 418 + - 11803 + - uid: 12 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,42.5 + parent: 2 + - type: DeviceList + devices: + - 11637 + - 11795 + - 11645 + - 11789 + - 370 + - 369 + - 368 + - 8638 + - 8642 + - 8636 + - 8637 + - 11791 + - 11638 + - 8643 + - 8645 + - 8644 + - 8639 + - uid: 13 + components: + - type: Transform + pos: 55.5,52.5 + parent: 2 + - type: DeviceList + devices: + - 367 + - 8625 + - 8626 + - 11807 + - uid: 14 + components: + - type: Transform + pos: 34.5,36.5 + parent: 2 + - type: DeviceList + devices: + - 8646 + - 8647 + - 8648 + - 8651 + - 8652 + - 8653 + - 437 + - 11788 + - 11646 + - 8633 + - 8649 + - 8650 + - 8656 + - 8654 + - 8655 + - 412 + - 11640 + - 11790 + - 11786 + - 411 + - 8670 + - 8669 + - 8635 + - 8634 + - 8660 + - 413 + - uid: 15 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 34.5,46.5 + parent: 2 + - type: DeviceList + devices: + - 8662 + - 8661 + - 8663 + - 8664 + - 8665 + - 8556 + - 8666 + - 8667 + - 8659 + - 8658 + - 8657 + - 8927 + - 8676 + - uid: 16 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,51.5 + parent: 2 + - type: DeviceList + devices: + - 8693 + - 8694 + - 8695 + - 8696 + - 8697 + - 8698 + - 11750 + - 11611 + - 414 + - 8699 + - 8700 + - 416 + - 8702 + - 8701 + - 11752 + - 415 + - uid: 17 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,46.5 + parent: 2 + - type: DeviceList + devices: + - 8686 + - 8687 + - 8689 + - 11727 + - 11583 + - 387 + - 8716 + - 8715 + - 8714 + - 8713 + - 8712 + - 8709 + - 8708 + - 8710 + - 8711 + - uid: 18 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,36.5 + parent: 2 + - type: DeviceList + devices: + - 11565 + - 11716 + - 11564 + - 8770 + - 8771 + - 8772 + - 8768 + - 8692 + - 8691 + - 8690 + - 8769 + - 11717 + - 386 + - uid: 19 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,10.5 + parent: 2 + - uid: 20 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 13.5,16.5 + parent: 2 + - type: DeviceList + devices: + - 8824 + - 8823 + - 8805 + - 8806 + - 8804 + - 8803 + - 8807 + - 11573 + - 11776 + - 372 + - uid: 21 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 13.5,12.5 + parent: 2 + - type: DeviceList + devices: + - 8824 + - 8823 + - 8809 + - 8810 + - 383 + - 11712 + - 11559 + - 8812 + - 8811 + - 8813 + - 8814 + - uid: 22 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,50.5 + parent: 2 + - type: DeviceList + devices: + - 406 + - 11796 + - 11625 + - 8678 + - 8679 + - 8680 + - 397 + - 8686 + - 8687 + - 8689 + - 11582 + - 8692 + - 8691 + - 8690 + - 8684 + - 8682 + - 8681 + - uid: 23 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,52.5 + parent: 2 + - type: DeviceList + devices: + - 8704 + - 8703 + - 8705 + - 8706 + - 8707 + - 8697 + - 8698 + - 417 + - 11632 + - uid: 24 + components: + - type: Transform + pos: -7.5,57.5 + parent: 2 + - type: DeviceList + devices: + - 8723 + - 8724 + - 8725 + - 8523 + - 8522 + - 8524 + - 8521 + - 8525 + - 8526 + - 11732 + - 11588 + - 11731 + - 11587 + - 11730 + - 11586 + - 395 + - 8717 + - 8527 + - 396 + - uid: 25 + components: + - type: Transform + pos: -13.5,59.5 + parent: 2 + - type: DeviceList + devices: + - 8720 + - 8719 + - 8723 + - 8724 + - 8725 + - 8711 + - 8710 + - 8712 + - 8721 + - 8722 + - 8726 + - 388 + - 11590 + - 11736 + - 390 + - 395 + - 393 + - 8736 + - uid: 26 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,68.5 + parent: 2 + - type: DeviceList + devices: + - 13233 + - 11605 + - 394 + - 441 + - 393 + - 11603 + - 11737 + - 11741 + - 11742 + - 8732 + - 8730 + - 8731 + - uid: 27 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,62.5 + parent: 2 + - type: DeviceList + devices: + - 11592 + - 11740 + - 442 + - 443 + - 8736 + - 11738 + - 8732 + - 8737 + - uid: 28 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,62.5 + parent: 2 + - type: DeviceList + devices: + - 392 + - 11773 + - 11599 + - 11774 + - 11601 + - 11772 + - 11598 + - 8746 + - 8745 + - 8744 + - 8743 + - 8747 + - 8539 + - 8541 + - uid: 29 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.5,56.5 + parent: 2 + - type: DeviceList + devices: + - 11602 + - 11775 + - 446 + - 8739 + - 8738 + - 8748 + - 8743 + - 8744 + - 8542 + - 8540 + - 11597 + - 11772 + - 11774 + - uid: 30 + components: + - type: Transform + pos: -25.5,65.5 + parent: 2 + - type: DeviceList + devices: + - 11746 + - 11596 + - 11595 + - 11745 + - 445 + - 444 + - 8741 + - 8740 + - 8738 + - 8739 + - 8722 + - 8721 + - 8742 + - 390 + - uid: 31 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,49.5 + parent: 2 + - uid: 32 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,54.5 + parent: 2 + - type: DeviceList + devices: + - 391 + - 8742 + - 11594 + - uid: 33 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,53.5 + parent: 2 + - type: DeviceList + devices: + - 8726 + - 389 + - 11739 + - 11593 + - uid: 34 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,57.5 + parent: 2 + - type: DeviceList + devices: + - 8717 + - 8718 + - 11734 + - 11589 + - 447 + - uid: 35 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,66.5 + parent: 2 + - type: DeviceList + devices: + - 399 + - 448 + - 398 + - 8750 + - 8749 + - 8757 + - 8758 + - 8756 + - 8751 + - 8755 + - 8754 + - 8753 + - 8759 + - 8760 + - 8761 + - 11748 + - 11610 + - 401 + - 11608 + - 11747 + - 8763 + - 8762 + - 8752 + - 8729 + - 8766 + - 11743 + - 11606 + - 8794 + - 8795 + - 8793 + - uid: 36 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,69.5 + parent: 2 + - type: DeviceList + devices: + - 8759 + - 8760 + - 8761 + - 11749 + - 11609 + - 400 + - 8767 + - uid: 37 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,35.5 + parent: 2 + - type: DeviceList + devices: + - 8769 + - 11566 + - 11718 + - 8773 + - 8774 + - 8546 + - 8928 + - 8548 + - uid: 38 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,30.5 + parent: 2 + - type: DeviceList + devices: + - 8776 + - 8792 + - 8775 + - 449 + - 11721 + - 11569 + - 8774 + - 8780 + - 8778 + - 8777 + - uid: 39 + components: + - type: Transform + pos: -8.5,26.5 + parent: 2 + - type: DeviceList + devices: + - 8791 + - 8790 + - 8792 + - 379 + - 11563 + - 11715 + - uid: 40 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,25.5 + parent: 2 + - uid: 41 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,17.5 + parent: 2 + - type: DeviceList + devices: + - 377 + - 11714 + - 11562 + - 8787 + - 8543 + - 8790 + - uid: 42 + components: + - type: Transform + pos: -29.5,20.5 + parent: 2 + - uid: 43 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,24.5 + parent: 2 + - type: DeviceList + devices: + - 11720 + - 11567 + - 450 + - 8776 + - uid: 44 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,16.5 + parent: 2 + - type: DeviceList + devices: + - 11560 + - 376 + - 8786 + - 8788 + - 8787 + - 8789 + - 8785 + - 374 + - 11703 + - 11856 + - 11857 + - uid: 45 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -35.5,24.5 + parent: 2 + - type: DeviceList + devices: + - 375 + - 8782 + - 8785 + - 8545 + - 20257 + - 4763 + - uid: 46 + components: + - type: Transform + pos: -26.5,47.5 + parent: 2 + - type: DeviceList + devices: + - 8935 + - 11551 + - 11711 + - 471 + - uid: 48 + components: + - type: Transform + pos: -18.5,46.5 + parent: 2 + - type: DeviceList + devices: + - 378 + - 11570 + - 11723 + - 8796 + - uid: 49 + components: + - type: Transform + pos: -11.5,46.5 + parent: 2 + - type: DeviceList + devices: + - 11571 + - 11722 + - 8780 + - 8779 + - 452 + - uid: 50 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,18.5 + parent: 2 + - type: DeviceList + devices: + - 8772 + - 8771 + - 8770 + - 8797 + - 8798 + - 8799 + - 384 + - 8800 + - 8801 + - 8802 + - uid: 51 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,7.5 + parent: 2 + - type: DeviceList + devices: + - 8817 + - 8818 + - 11579 + - 11782 + - 381 + - 8827 + - 8802 + - 467 + - 11701 + - 11853 + - 466 + - 11700 + - 11852 + - 8932 + - 8933 + - uid: 52 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,4.5 + parent: 2 + - type: DeviceList + devices: + - 8815 + - 8816 + - 11577 + - 11779 + - 468 + - uid: 53 + components: + - type: Transform + pos: 2.5,13.5 + parent: 2 + - type: DeviceList + devices: + - 8809 + - 8810 + - 8815 + - 8816 + - 8807 + - 8825 + - 8826 + - 382 + - 11778 + - 11575 + - 8808 + - 11578 + - 11781 + - uid: 54 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,16.5 + parent: 2 + - type: DeviceList + devices: + - 11777 + - 11574 + - 8808 + - 453 + - uid: 55 + components: + - type: Transform + pos: 24.5,22.5 + parent: 2 + - type: DeviceList + devices: + - 410 + - 11642 + - 8830 + - 8831 + - 8832 + - 8829 + - 8828 + - 8670 + - 8669 + - 8635 + - 8634 + - 11553 + - 11785 + - 11783 + - 8675 + - uid: 56 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,15.5 + parent: 2 + - type: DeviceList + devices: + - 438 + - 11784 + - 11641 + - 8833 + - 8829 + - 8828 + - 8837 + - 8836 + - 8835 + - 8834 + - uid: 57 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 57.5,27.5 + parent: 2 + - type: DeviceList + devices: + - 8839 + - 8838 + - 8822 + - 8875 + - 8846 + - 8840 + - 8841 + - 8842 + - 11814 + - 11661 + - 454 + - uid: 58 + components: + - type: Transform + pos: 47.5,32.5 + parent: 2 + - type: DeviceList + devices: + - 430 + - 8847 + - 8848 + - 8845 + - 8840 + - 11813 + - 11660 + - uid: 59 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 50.5,19.5 + parent: 2 + - uid: 60 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 56.5,14.5 + parent: 2 + - type: DeviceList + devices: + - 11662 + - 11815 + - 458 + - 8844 + - 8842 + - 8871 + - 8677 + - uid: 61 + components: + - type: Transform + pos: 44.5,18.5 + parent: 2 + - type: DeviceList + devices: + - 8849 + - 8851 + - 8870 + - 8869 + - 8868 + - 431 + - 8862 + - 8859 + - 8852 + - 8843 + - 8847 + - 8848 + - uid: 62 + components: + - type: Transform + pos: 48.5,8.5 + parent: 2 + - type: DeviceList + devices: + - 11666 + - 11820 + - 433 + - 8859 + - 8861 + - 8858 + - 8860 + - 19347 + - 19358 + - 19348 + - 19357 + - 19349 + - 19356 + - 19355 + - 19354 + - 19361 + - 19350 + - 19360 + - 19351 + - 19359 + - 19352 + - 19353 + - 19362 + - uid: 63 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 51.5,12.5 + parent: 2 + - type: DeviceList + devices: + - 8852 + - 455 + - 11665 + - 11818 + - uid: 64 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,-1.5 + parent: 2 + - type: DeviceList + devices: + - 11828 + - 11676 + - 457 + - 8857 + - 8864 + - uid: 65 + components: + - type: Transform + pos: 36.5,12.5 + parent: 2 + - type: DeviceList + devices: + - 11672 + - 432 + - 11824 + - 8853 + - 8863 + - 8867 + - 8849 + - uid: 66 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 34.5,2.5 + parent: 2 + - type: DeviceList + devices: + - 11825 + - 11675 + - 8854 + - 8855 + - 8853 + - 8857 + - 8856 + - 456 + - 8865 + - 8866 + - uid: 67 + components: + - type: Transform + pos: 11.5,36.5 + parent: 2 + - type: DeviceList + devices: + - 11760 + - 404 + - 11619 + - 8892 + - 8894 + - 11620 + - 11757 + - 11617 + - 8891 + - 8890 + - 8885 + - 8886 + - 403 + - 465 + - 8931 + - 8930 + - 11702 + - 11854 + - uid: 68 + components: + - type: Transform + pos: 7.5,42.5 + parent: 2 + - type: DeviceList + devices: + - 8876 + - 8910 + - 8909 + - 11614 + - 463 + - 8908 + - 11615 + - 11754 + - uid: 69 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,39.5 + parent: 2 + - type: DeviceList + devices: + - 11756 + - 11624 + - 462 + - 8883 + - 8881 + - 8882 + - uid: 70 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,43.5 + parent: 2 + - type: DeviceList + devices: + - 402 + - 11627 + - 11769 + - 8882 + - 8880 + - 8879 + - 8878 + - 8877 + - 11770 + - 11626 + - 8881 + - uid: 71 + components: + - type: Transform + pos: 18.5,40.5 + parent: 2 + - type: DeviceList + devices: + - 8884 + - 11766 + - 11628 + - 405 + - uid: 72 + components: + - type: Transform + pos: 24.5,46.5 + parent: 2 + - type: DeviceList + devices: + - 8903 + - 11768 + - 11630 + - 461 + - 11556 + - 11557 + - 11555 + - 11554 + - 11767 + - 408 + - 8911 + - uid: 73 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,40.5 + parent: 2 + - uid: 74 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,24.5 + parent: 2 + - uid: 75 + components: + - type: Transform + pos: 20.5,27.5 + parent: 2 + - uid: 76 + components: + - type: Transform + pos: 9.5,28.5 + parent: 2 + - type: DeviceList + devices: + - 11758 + - 11618 + - 459 + - 8899 + - 8895 + - 8893 + - 8904 + - 11755 + - 11616 + - 385 + - 8546 + - uid: 77 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,37.5 + parent: 2 + - type: DeviceList + devices: + - 8886 + - 11762 + - 11621 + - 409 + - 8889 + - 8887 + - 8888 + - 8902 + - 11765 + - 11629 + - 460 + - 8633 + - 8650 + - 8649 + - uid: 78 + components: + - type: Transform + pos: 40.5,55.5 + parent: 2 + - type: DeviceList + devices: + - 440 + - 11794 + - 11636 + - 8668 + - 8674 + - 8913 + - 8912 + - 8914 + - 8915 + - 8917 + - 8916 + - 371 + - uid: 79 + components: + - type: Transform + pos: 78.5,41.5 + parent: 2 + - uid: 80 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,17.5 + parent: 2 + - type: DeviceList + devices: + - 8546 + - 8928 + - 8548 + - 8547 + - 380 + - 8821 + - 8929 + - 11780 + - 11576 + - uid: 81 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,36.5 + parent: 2 + - uid: 82 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,44.5 + parent: 2 + - type: DeviceList + devices: + - 8934 + - 8768 + - 470 + - 469 + - 11581 + - 11725 + - 11724 + - 11580 + - uid: 18626 + components: + - type: Transform + pos: 74.5,32.5 + parent: 2 + - type: DeviceList + devices: + - 18628 + - 11678 + - 11842 + - 8579 + - 18625 + - 18624 + - 18623 + - 8588 + - 8578 + - 11838 + - 11687 + - 11688 + - 428 + - 11839 + - 8590 + - uid: 19588 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,67.5 + parent: 2 + - type: DeviceList + devices: + - 11774 + - 11601 + - 8745 + - 8746 + - 11598 + - 11772 + - 392 + - 19592 + - 19591 + - 11773 + - 19382 + - 19383 + - 11599 + - 19593 + - 19594 + - 19595 + - 19596 + - 19597 + - 19598 + - 19599 + - 8539 + - 8541 + - uid: 19589 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,74.5 + parent: 2 + - type: DeviceList + devices: + - 19557 + - 19558 + - 19559 + - 19561 + - 19560 + - 19562 + - 19563 + - 19564 + - 19565 + - 19566 + - 19567 + - 19571 + - 19568 + - 19570 + - 19569 + - 19573 + - 19401 + - 19400 + - 19493 + - 19574 + - 19575 + - 19576 + - 19577 + - 19578 + - 19579 + - 19580 + - 19584 + - 19583 + - uid: 19590 + components: + - type: Transform + pos: -21.5,75.5 + parent: 2 + - type: DeviceList + devices: + - 19582 + - 19581 + - 19403 + - 19402 + - 19585 + - uid: 20121 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,-39.5 + parent: 2 + - type: DeviceList + devices: + - 18452 + - 18478 + - 20150 + - 20130 + - 20138 + - uid: 20122 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-24.5 + parent: 2 + - type: DeviceList + devices: + - 20142 + - 19627 + - 18496 + - 20136 + - 20137 + - 20140 + - uid: 20123 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 35.5,-39.5 + parent: 2 + - type: DeviceList + devices: + - 20139 + - 19675 + - 18493 + - 20133 + - 20131 + - 20138 + - 20140 + - uid: 20124 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,-34.5 + parent: 2 + - type: DeviceList + devices: + - 20140 + - 19083 + - 19626 + - 20134 + - 20132 + - 20133 + - 20137 + - 20142 + - 20139 + - 20138 + - 20257 + - uid: 20125 + components: + - type: Transform + pos: 28.5,-35.5 + parent: 2 + - type: DeviceList + devices: + - 20156 + - 20138 + - 18598 + - 20131 + - 20132 + - 20130 + - 18452 + - 20140 + - 20139 + - uid: 20149 + components: + - type: Transform + pos: 25.5,-30.5 + parent: 2 + - type: DeviceList + devices: + - 20141 + - 20148 + - 18479 + - 20134 + - 20140 +- proto: AirCanister + entities: + - uid: 84 + components: + - type: Transform + pos: -38.5,20.5 + parent: 2 + - uid: 18642 + components: + - type: Transform + pos: -5.5,21.5 + parent: 2 + - uid: 18643 + components: + - type: Transform + pos: -4.5,21.5 + parent: 2 + - uid: 19617 + components: + - type: Transform + pos: 28.5,-23.5 + parent: 2 + - uid: 19716 + components: + - type: Transform + pos: 36.5,-34.5 + parent: 2 + - uid: 19717 + components: + - type: Transform + pos: 36.5,-35.5 + parent: 2 + - uid: 19817 + components: + - type: Transform + pos: 31.5,-38.5 + parent: 2 + - uid: 20414 + components: + - type: Transform + pos: 51.5,7.5 + parent: 2 +- proto: AirlockArmoryGlassLocked + entities: + - uid: 85 + components: + - type: Transform + pos: -17.5,59.5 + parent: 2 +- proto: AirlockAtmosphericsGlassLocked + entities: + - uid: 86 + components: + - type: Transform + pos: -20.5,18.5 + parent: 2 + - uid: 87 + components: + - type: Transform + pos: -13.5,19.5 + parent: 2 + - uid: 88 + components: + - type: Transform + pos: -9.5,26.5 + parent: 2 + - uid: 89 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,18.5 + parent: 2 + - uid: 91 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,22.5 + parent: 2 + - uid: 20361 + components: + - type: Transform + pos: -29.5,27.5 + parent: 2 +- proto: AirlockAtmosphericsLocked + entities: + - uid: 92 + components: + - type: Transform + pos: 21.5,46.5 + parent: 2 + - uid: 93 + components: + - type: Transform + pos: -22.5,20.5 + parent: 2 +- proto: AirlockBarGlassLocked + entities: + - uid: 94 + components: + - type: Transform + pos: 59.5,37.5 + parent: 2 +- proto: AirlockBarLocked + entities: + - uid: 95 + components: + - type: Transform + pos: 60.5,45.5 + parent: 2 + - uid: 96 + components: + - type: Transform + pos: 61.5,41.5 + parent: 2 +- proto: AirlockCaptainLocked + entities: + - uid: 97 + components: + - type: Transform + pos: 77.5,27.5 + parent: 2 + - uid: 98 + components: + - type: Transform + pos: 79.5,30.5 + parent: 2 + - uid: 109 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 67.5,27.5 + parent: 2 +- proto: AirlockCargoGlassLocked + entities: + - uid: 99 + components: + - type: Transform + pos: 5.5,16.5 + parent: 2 +- proto: AirlockChapelGlassLocked + entities: + - uid: 100 + components: + - type: Transform + pos: 10.5,58.5 + parent: 2 +- proto: AirlockChapelLocked + entities: + - uid: 101 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 20.5,61.5 + parent: 2 + - uid: 102 + components: + - type: Transform + pos: 14.5,61.5 + parent: 2 + - uid: 103 + components: + - type: Transform + pos: 16.5,64.5 + parent: 2 + - uid: 104 + components: + - type: Transform + pos: 19.5,63.5 + parent: 2 +- proto: AirlockChemistryGlassLocked + entities: + - uid: 105 + components: + - type: Transform + pos: 15.5,25.5 + parent: 2 +- proto: AirlockChiefEngineerLocked + entities: + - uid: 106 + components: + - type: Transform + pos: -6.5,27.5 + parent: 2 +- proto: AirlockChiefMedicalOfficerLocked + entities: + - uid: 107 + components: + - type: Transform + pos: 18.5,36.5 + parent: 2 +- proto: AirlockCommandGlassLocked + entities: + - uid: 4405 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 76.5,47.5 + parent: 2 +- proto: AirlockCommandLocked + entities: + - uid: 108 + components: + - type: Transform + pos: 81.5,28.5 + parent: 2 + - uid: 110 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 81.5,41.5 + parent: 2 + - uid: 111 + components: + - type: Transform + pos: 78.5,34.5 + parent: 2 + - uid: 112 + components: + - type: Transform + pos: 74.5,34.5 + parent: 2 +- proto: AirlockDetectiveLocked + entities: + - uid: 113 + components: + - type: Transform + pos: -0.5,57.5 + parent: 2 + - uid: 114 + components: + - type: Transform + pos: 3.5,58.5 + parent: 2 +- proto: AirlockEngineering + entities: + - uid: 18455 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,-32.5 + parent: 2 + - uid: 18456 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,-37.5 + parent: 2 +- proto: AirlockEngineeringGlassLocked + entities: + - uid: 115 + components: + - type: Transform + pos: -1.5,33.5 + parent: 2 + - uid: 116 + components: + - type: Transform + pos: -10.5,42.5 + parent: 2 + - uid: 117 + components: + - type: Transform + pos: 35.5,50.5 + parent: 2 + - uid: 118 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,34.5 + parent: 2 + - uid: 119 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,34.5 + parent: 2 + - uid: 120 + components: + - type: Transform + pos: -4.5,37.5 + parent: 2 + - uid: 121 + components: + - type: Transform + pos: -12.5,36.5 + parent: 2 + - uid: 122 + components: + - type: Transform + pos: -14.5,42.5 + parent: 2 + - uid: 123 + components: + - type: Transform + pos: -12.5,32.5 + parent: 2 +- proto: AirlockEngineeringLocked + entities: + - uid: 124 + components: + - type: Transform + pos: -22.5,10.5 + parent: 2 + - uid: 125 + components: + - type: Transform + pos: -3.5,65.5 + parent: 2 + - uid: 126 + components: + - type: Transform + pos: 18.5,11.5 + parent: 2 + - uid: 127 + components: + - type: Transform + pos: 35.5,52.5 + parent: 2 + - uid: 128 + components: + - type: Transform + pos: -23.5,24.5 + parent: 2 + - uid: 129 + components: + - type: Transform + pos: -17.5,5.5 + parent: 2 + - uid: 130 + components: + - type: Transform + pos: 42.5,3.5 + parent: 2 + - uid: 131 + components: + - type: Transform + pos: -1.5,43.5 + parent: 2 + - uid: 132 + components: + - type: Transform + pos: 75.5,14.5 + parent: 2 + - uid: 133 + components: + - type: Transform + pos: 82.5,46.5 + parent: 2 + - uid: 134 + components: + - type: Transform + pos: 51.5,58.5 + parent: 2 + - uid: 135 + components: + - type: Transform + pos: 33.5,62.5 + parent: 2 + - uid: 136 + components: + - type: Transform + pos: -25.5,42.5 + parent: 2 +- proto: AirlockEVAGlassLocked + entities: + - uid: 137 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 69.5,45.5 + parent: 2 + - uid: 138 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 72.5,45.5 + parent: 2 + - uid: 139 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 79.5,43.5 + parent: 2 +- proto: AirlockExternal + entities: + - uid: 140 + components: + - type: Transform + pos: 12.5,0.5 + parent: 2 + - uid: 141 + components: + - type: Transform + pos: 12.5,2.5 + parent: 2 +- proto: AirlockExternalAtmosphericsLocked + entities: + - uid: 142 + components: + - type: Transform + pos: -39.5,30.5 + parent: 2 + - uid: 143 + components: + - type: Transform + pos: -37.5,30.5 + parent: 2 + - uid: 3463 + components: + - type: Transform + pos: -31.5,29.5 + parent: 2 + - uid: 3753 + components: + - type: Transform + pos: -31.5,32.5 + parent: 2 +- proto: AirlockExternalEngineeringLocked + entities: + - uid: 144 + components: + - type: Transform + pos: -22.5,6.5 + parent: 2 + - uid: 145 + components: + - type: Transform + pos: -22.5,4.5 + parent: 2 + - uid: 18454 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,-29.5 + parent: 2 + - uid: 20135 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,-29.5 + parent: 2 +- proto: AirlockExternalGlass + entities: + - uid: 146 + components: + - type: Transform + pos: -2.5,77.5 + parent: 2 + - uid: 147 + components: + - type: Transform + pos: -0.5,77.5 + parent: 2 + - uid: 148 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 75.5,0.5 + parent: 2 + - uid: 149 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 75.5,7.5 + parent: 2 + - uid: 150 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 73.5,-2.5 + parent: 2 + - uid: 151 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 73.5,-4.5 + parent: 2 + - uid: 152 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 60.5,63.5 + parent: 2 + - uid: 153 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 62.5,63.5 + parent: 2 + - uid: 154 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 68.5,63.5 + parent: 2 + - uid: 155 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 70.5,63.5 + parent: 2 +- proto: AirlockExternalGlassCargoLocked + entities: + - uid: 156 + components: + - type: Transform + pos: -0.5,2.5 + parent: 2 + - uid: 157 + components: + - type: Transform + pos: 1.5,2.5 + parent: 2 +- proto: AirlockExternalGlassEngineeringLocked + entities: + - uid: 158 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,46.5 + parent: 2 + - uid: 159 + components: + - type: Transform + pos: 33.5,65.5 + parent: 2 + - uid: 160 + components: + - type: Transform + pos: 33.5,67.5 + parent: 2 + - uid: 161 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 57.5,9.5 + parent: 2 + - uid: 162 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,-2.5 + parent: 2 + - uid: 163 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,-0.5 + parent: 2 + - uid: 164 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 57.5,11.5 + parent: 2 +- proto: AirlockExternalGlassLocked + entities: + - uid: 165 + components: + - type: Transform + pos: -6.5,69.5 + parent: 2 + - uid: 166 + components: + - type: Transform + pos: -10.5,69.5 + parent: 2 +- proto: AirlockExternalGlassSalvageLocked + entities: + - uid: 167 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,-8.5 + parent: 2 + - uid: 168 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,-8.5 + parent: 2 +- proto: AirlockExternalGlassShuttleArrivals + entities: + - uid: 169 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 77.5,7.5 + parent: 2 + - uid: 170 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 77.5,0.5 + parent: 2 +- proto: AirlockExternalGlassShuttleEmergencyLocked + entities: + - uid: 171 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 68.5,65.5 + parent: 2 + - uid: 172 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 70.5,65.5 + parent: 2 + - uid: 173 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 62.5,65.5 + parent: 2 + - uid: 174 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 60.5,65.5 + parent: 2 +- proto: AirlockExternalGlassShuttleEscape + entities: + - uid: 175 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,58.5 + parent: 2 + - uid: 176 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,77.5 + parent: 2 + - uid: 177 + components: + - type: Transform + pos: 19.5,3.5 + parent: 2 + - uid: 178 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 77.5,16.5 + parent: 2 + - uid: 16848 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 56.5,59.5 + parent: 2 +- proto: AirlockExternalGlassShuttleLocked + entities: + - uid: 179 + components: + - type: Transform + pos: -0.5,0.5 + parent: 2 + - uid: 180 + components: + - type: Transform + pos: 1.5,0.5 + parent: 2 +- proto: AirlockExternalLocked + entities: + - uid: 181 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,53.5 + parent: 2 + - uid: 182 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,57.5 + parent: 2 + - uid: 183 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -37.5,55.5 + parent: 2 +- proto: AirlockFreezerKitchenHydroLocked + entities: + - uid: 184 + components: + - type: Transform + pos: 51.5,45.5 + parent: 2 +- proto: AirlockFreezerLocked + entities: + - uid: 185 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 54.5,47.5 + parent: 2 + - uid: 186 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 56.5,49.5 + parent: 2 +- proto: AirlockGlass + entities: + - uid: 187 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 71.5,60.5 + parent: 2 + - uid: 188 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,50.5 + parent: 2 + - uid: 189 + components: + - type: Transform + pos: 57.5,30.5 + parent: 2 + - uid: 190 + components: + - type: Transform + pos: 63.5,30.5 + parent: 2 + - uid: 191 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,62.5 + parent: 2 + - uid: 192 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,62.5 + parent: 2 + - uid: 193 + components: + - type: Transform + pos: 7.5,52.5 + parent: 2 + - uid: 194 + components: + - type: Transform + pos: 9.5,50.5 + parent: 2 + - uid: 195 + components: + - type: Transform + pos: 15.5,52.5 + parent: 2 + - uid: 196 + components: + - type: Transform + pos: 15.5,53.5 + parent: 2 + - uid: 197 + components: + - type: Transform + pos: 23.5,50.5 + parent: 2 + - uid: 198 + components: + - type: Transform + pos: 24.5,50.5 + parent: 2 + - uid: 199 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,53.5 + parent: 2 + - uid: 200 + components: + - type: Transform + pos: 34.5,38.5 + parent: 2 + - uid: 201 + components: + - type: Transform + pos: 34.5,39.5 + parent: 2 + - uid: 202 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 34.5,35.5 + parent: 2 + - uid: 203 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 34.5,34.5 + parent: 2 + - uid: 204 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 34.5,33.5 + parent: 2 + - uid: 205 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,33.5 + parent: 2 + - uid: 206 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,34.5 + parent: 2 + - uid: 207 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,35.5 + parent: 2 + - uid: 208 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 65.5,7.5 + parent: 2 + - uid: 209 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 68.5,3.5 + parent: 2 + - uid: 237 + components: + - type: Transform + pos: 63.5,34.5 + parent: 2 + - uid: 238 + components: + - type: Transform + pos: 63.5,35.5 + parent: 2 + - uid: 305 + components: + - type: Transform + pos: 18.5,47.5 + parent: 2 + - uid: 4409 + components: + - type: Transform + pos: 49.5,34.5 + parent: 2 + - uid: 4410 + components: + - type: Transform + pos: 49.5,33.5 + parent: 2 + - uid: 6324 + components: + - type: Transform + pos: 49.5,35.5 + parent: 2 + - uid: 9953 + components: + - type: Transform + pos: 63.5,33.5 + parent: 2 + - uid: 10775 + components: + - type: Transform + pos: 64.5,22.5 + parent: 2 + - uid: 10776 + components: + - type: Transform + pos: 65.5,22.5 + parent: 2 + - uid: 10777 + components: + - type: Transform + pos: 66.5,22.5 + parent: 2 + - uid: 10778 + components: + - type: Transform + pos: 18.5,49.5 + parent: 2 + - uid: 11420 + components: + - type: Transform + pos: 66.5,52.5 + parent: 2 + - uid: 11827 + components: + - type: Transform + pos: 18.5,48.5 + parent: 2 + - uid: 12136 + components: + - type: Transform + pos: 64.5,52.5 + parent: 2 + - uid: 14031 + components: + - type: Transform + pos: 65.5,52.5 + parent: 2 + - uid: 18533 + components: + - type: Transform + pos: 25.5,18.5 + parent: 2 + - uid: 18534 + components: + - type: Transform + pos: 23.5,18.5 + parent: 2 + - uid: 18535 + components: + - type: Transform + pos: -0.5,24.5 + parent: 2 + - uid: 18536 + components: + - type: Transform + pos: 0.5,24.5 + parent: 2 + - uid: 18537 + components: + - type: Transform + pos: 1.5,24.5 + parent: 2 + - uid: 18538 + components: + - type: Transform + pos: 4.5,21.5 + parent: 2 + - uid: 18539 + components: + - type: Transform + pos: 4.5,20.5 + parent: 2 + - uid: 18540 + components: + - type: Transform + pos: 4.5,19.5 + parent: 2 + - uid: 18541 + components: + - type: Transform + pos: 20.5,21.5 + parent: 2 + - uid: 18542 + components: + - type: Transform + pos: 20.5,20.5 + parent: 2 + - uid: 18543 + components: + - type: Transform + pos: 20.5,19.5 + parent: 2 + - uid: 18544 + components: + - type: Transform + pos: -0.5,44.5 + parent: 2 + - uid: 18545 + components: + - type: Transform + pos: 0.5,44.5 + parent: 2 + - uid: 18546 + components: + - type: Transform + pos: 1.5,44.5 + parent: 2 + - uid: 18547 + components: + - type: Transform + pos: 4.5,54.5 + parent: 2 + - uid: 18548 + components: + - type: Transform + pos: 5.5,54.5 + parent: 2 + - uid: 18549 + components: + - type: Transform + pos: 6.5,54.5 + parent: 2 + - uid: 18550 + components: + - type: Transform + pos: -2.5,49.5 + parent: 2 + - uid: 18551 + components: + - type: Transform + pos: -2.5,48.5 + parent: 2 + - uid: 18552 + components: + - type: Transform + pos: -2.5,47.5 + parent: 2 + - uid: 18946 + components: + - type: Transform + pos: 4.5,65.5 + parent: 2 + - uid: 18947 + components: + - type: Transform + pos: 5.5,65.5 + parent: 2 + - uid: 18948 + components: + - type: Transform + pos: 6.5,65.5 + parent: 2 +- proto: AirlockGlassShuttle + entities: + - uid: 210 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,71.5 + parent: 2 + - uid: 211 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,71.5 + parent: 2 + - uid: 212 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,46.5 + parent: 2 +- proto: AirlockHatch + entities: + - uid: 18457 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,-32.5 + parent: 2 + - uid: 18458 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,-37.5 + parent: 2 + - uid: 18459 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,-34.5 + parent: 2 + - uid: 18460 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,-26.5 + parent: 2 +- proto: AirlockHatchMaintenance + entities: + - uid: 213 + components: + - type: Transform + pos: 27.5,61.5 + parent: 2 +- proto: AirlockHeadOfPersonnelGlassLocked + entities: + - uid: 214 + components: + - type: Transform + pos: 79.5,38.5 + parent: 2 +- proto: AirlockHeadOfSecurityLocked + entities: + - uid: 215 + components: + - type: Transform + pos: -18.5,56.5 + parent: 2 +- proto: AirlockHydroGlassLocked + entities: + - uid: 216 + components: + - type: Transform + pos: 48.5,46.5 + parent: 2 + - uid: 217 + components: + - type: Transform + pos: 50.5,41.5 + parent: 2 +- proto: AirlockHydroponicsLocked + entities: + - uid: 218 + components: + - type: Transform + pos: 47.5,49.5 + parent: 2 +- proto: AirlockJanitorLocked + entities: + - uid: 219 + components: + - type: Transform + pos: 42.5,55.5 + parent: 2 + - uid: 220 + components: + - type: Transform + pos: 40.5,50.5 + parent: 2 +- proto: AirlockKitchenGlassLocked + entities: + - uid: 221 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 53.5,41.5 + parent: 2 +- proto: AirlockLawyerGlassLocked + entities: + - uid: 222 + components: + - type: Transform + pos: -23.5,56.5 + parent: 2 +- proto: AirlockMailGlassLocked + entities: + - uid: 223 + components: + - type: Transform + pos: -4.5,7.5 + parent: 2 +- proto: AirlockMaint + entities: + - uid: 224 + components: + - type: Transform + pos: 20.5,15.5 + parent: 2 + - uid: 225 + components: + - type: Transform + pos: 21.5,17.5 + parent: 2 + - uid: 226 + components: + - type: Transform + pos: 27.5,17.5 + parent: 2 + - uid: 227 + components: + - type: Transform + pos: 27.5,14.5 + parent: 2 + - uid: 228 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,62.5 + parent: 2 + - uid: 229 + components: + - type: Transform + pos: 0.5,66.5 + parent: 2 + - uid: 230 + components: + - type: Transform + pos: 0.5,68.5 + parent: 2 + - uid: 231 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,67.5 + parent: 2 + - uid: 232 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,67.5 + parent: 2 + - uid: 233 + components: + - type: Transform + pos: 14.5,75.5 + parent: 2 + - uid: 234 + components: + - type: Transform + pos: 48.5,52.5 + parent: 2 + - uid: 235 + components: + - type: Transform + pos: 52.5,53.5 + parent: 2 + - uid: 236 + components: + - type: Transform + pos: 34.5,20.5 + parent: 2 + - uid: 239 + components: + - type: Transform + pos: 71.5,50.5 + parent: 2 + - uid: 240 + components: + - type: Transform + pos: 78.5,54.5 + parent: 2 + - uid: 241 + components: + - type: Transform + pos: 76.5,56.5 + parent: 2 + - uid: 242 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 61.5,25.5 + parent: 2 + - uid: 243 + components: + - type: Transform + pos: 21.5,6.5 + parent: 2 + - uid: 244 + components: + - type: Transform + pos: 59.5,52.5 + parent: 2 + - uid: 245 + components: + - type: Transform + pos: 48.5,58.5 + parent: 2 + - uid: 246 + components: + - type: Transform + pos: 42.5,62.5 + parent: 2 + - uid: 247 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 39.5,63.5 + parent: 2 + - uid: 248 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,16.5 + parent: 2 + - uid: 4408 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 79.5,52.5 + parent: 2 + - uid: 17248 + components: + - type: Transform + pos: 43.5,11.5 + parent: 2 +- proto: AirlockMaintAtmoLocked + entities: + - uid: 249 + components: + - type: Transform + pos: -23.5,11.5 + parent: 2 + - uid: 250 + components: + - type: Transform + pos: -22.5,16.5 + parent: 2 +- proto: AirlockMaintCargoLocked + entities: + - uid: 251 + components: + - type: Transform + pos: 7.5,8.5 + parent: 2 + - uid: 252 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,9.5 + parent: 2 + - uid: 253 + components: + - type: Transform + pos: -14.5,12.5 + parent: 2 +- proto: AirlockMaintChemLocked + entities: + - uid: 254 + components: + - type: Transform + pos: 6.5,24.5 + parent: 2 +- proto: AirlockMaintCommandLocked + entities: + - uid: 256 + components: + - type: Transform + pos: 81.5,45.5 + parent: 2 + - uid: 258 + components: + - type: Transform + pos: 81.5,20.5 + parent: 2 +- proto: AirlockMaintGlass + entities: + - uid: 259 + components: + - type: Transform + pos: 15.5,4.5 + parent: 2 +- proto: AirlockMaintGlassLocked + entities: + - uid: 260 + components: + - type: Transform + pos: 37.5,46.5 + parent: 2 +- proto: AirlockMaintLocked + entities: + - uid: 261 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 23.5,65.5 + parent: 2 + - uid: 262 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 43.5,48.5 + parent: 2 + - uid: 263 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 73.5,18.5 + parent: 2 + - uid: 264 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 63.5,18.5 + parent: 2 + - uid: 265 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 47.5,10.5 + parent: 2 + - uid: 266 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.5,16.5 + parent: 2 + - uid: 267 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,64.5 + parent: 2 + - uid: 268 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 72.5,54.5 + parent: 2 + - uid: 269 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 75.5,58.5 + parent: 2 + - uid: 270 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,65.5 + parent: 2 + - uid: 271 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 63.5,47.5 + parent: 2 + - uid: 272 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 62.5,27.5 + parent: 2 + - uid: 273 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 51.5,10.5 + parent: 2 + - uid: 274 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,8.5 + parent: 2 + - uid: 275 + components: + - type: Transform + pos: 24.5,58.5 + parent: 2 + - uid: 276 + components: + - type: Transform + pos: 2.5,25.5 + parent: 2 + - uid: 277 + components: + - type: Transform + pos: 13.5,74.5 + parent: 2 +- proto: AirlockMaintRnDLocked + entities: + - uid: 278 + components: + - type: Transform + pos: 38.5,18.5 + parent: 2 + - uid: 279 + components: + - type: Transform + pos: 43.5,22.5 + parent: 2 + - uid: 280 + components: + - type: Transform + pos: 37.5,4.5 + parent: 2 + - uid: 281 + components: + - type: Transform + pos: 31.5,6.5 + parent: 2 + - uid: 282 + components: + - type: Transform + pos: 61.5,21.5 + parent: 2 +- proto: AirlockMaintSalvageLocked + entities: + - uid: 283 + components: + - type: Transform + pos: -16.5,8.5 + parent: 2 +- proto: AirlockMaintSecLocked + entities: + - uid: 284 + components: + - type: Transform + pos: 58.5,57.5 + parent: 2 + - uid: 285 + components: + - type: Transform + pos: 74.5,15.5 + parent: 2 +- proto: AirlockMedicalGlassLocked + entities: + - uid: 286 + components: + - type: Transform + pos: 16.5,23.5 + parent: 2 + - uid: 287 + components: + - type: Transform + pos: 13.5,42.5 + parent: 2 + - uid: 288 + components: + - type: Transform + pos: 13.5,36.5 + parent: 2 + - uid: 289 + components: + - type: Transform + pos: 24.5,33.5 + parent: 2 + - uid: 290 + components: + - type: Transform + pos: 5.5,42.5 + parent: 2 + - uid: 291 + components: + - type: Transform + pos: 6.5,46.5 + parent: 2 + - uid: 292 + components: + - type: Transform + pos: 18.5,23.5 + parent: 2 + - uid: 293 + components: + - type: Transform + pos: 24.5,32.5 + parent: 2 + - uid: 294 + components: + - type: Transform + pos: 6.5,32.5 + parent: 2 + - uid: 295 + components: + - type: Transform + pos: 6.5,33.5 + parent: 2 +- proto: AirlockMedicalLocked + entities: + - uid: 296 + components: + - type: Transform + pos: 14.5,44.5 + parent: 2 + - uid: 297 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,36.5 + parent: 2 + - uid: 298 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.5,41.5 + parent: 2 + - uid: 299 + components: + - type: Transform + pos: 8.5,36.5 + parent: 2 + - uid: 300 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,25.5 + parent: 2 +- proto: AirlockMedicalScienceGlassLocked + entities: + - uid: 301 + components: + - type: Transform + pos: 26.5,22.5 + parent: 2 + - uid: 302 + components: + - type: Transform + pos: 24.5,25.5 + parent: 2 +- proto: AirlockQuartermasterLocked + entities: + - uid: 303 + components: + - type: Transform + pos: 2.5,16.5 + parent: 2 +- proto: AirlockResearchDirectorGlassLocked + entities: + - uid: 306 + components: + - type: Transform + pos: 50.5,17.5 + parent: 2 + - uid: 9951 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,-0.5 + parent: 2 + - uid: 9952 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,-0.5 + parent: 2 + - uid: 18462 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,-21.5 + parent: 2 + - uid: 18463 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,-23.5 + parent: 2 +- proto: AirlockResearchDirectorLocked + entities: + - uid: 307 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 35.5,2.5 + parent: 2 +- proto: AirlockSalvageGlassLocked + entities: + - uid: 311 + components: + - type: Transform + pos: -14.5,4.5 + parent: 2 + - uid: 312 + components: + - type: Transform + pos: -10.5,8.5 + parent: 2 + - uid: 313 + components: + - type: Transform + pos: -16.5,-2.5 + parent: 2 + - uid: 314 + components: + - type: Transform + pos: -15.5,-2.5 + parent: 2 +- proto: AirlockScienceGlassLocked + entities: + - uid: 315 + components: + - type: Transform + pos: 37.5,16.5 + parent: 2 + - uid: 316 + components: + - type: Transform + pos: 39.5,14.5 + parent: 2 + - uid: 317 + components: + - type: Transform + pos: 34.5,10.5 + parent: 2 + - uid: 318 + components: + - type: Transform + pos: 32.5,10.5 + parent: 2 +- proto: AirlockScienceLocked + entities: + - uid: 320 + components: + - type: Transform + pos: 49.5,8.5 + parent: 2 + - uid: 321 + components: + - type: Transform + pos: 31.5,2.5 + parent: 2 + - uid: 322 + components: + - type: Transform + pos: 35.5,6.5 + parent: 2 + - uid: 323 + components: + - type: Transform + pos: 41.5,18.5 + parent: 2 + - uid: 324 + components: + - type: Transform + pos: 49.5,12.5 + parent: 2 + - uid: 325 + components: + - type: Transform + pos: 53.5,23.5 + parent: 2 + - uid: 326 + components: + - type: Transform + pos: 49.5,22.5 + parent: 2 + - uid: 327 + components: + - type: Transform + pos: 54.5,21.5 + parent: 2 + - uid: 328 + components: + - type: Transform + pos: 53.5,30.5 + parent: 2 + - uid: 329 + components: + - type: Transform + pos: 49.5,30.5 + parent: 2 +- proto: AirlockSecurityGlassLocked + entities: + - uid: 330 + components: + - type: Transform + pos: -3.5,18.5 + parent: 2 + - uid: 331 + components: + - type: Transform + pos: -26.5,58.5 + parent: 2 + - uid: 332 + components: + - type: Transform + pos: -26.5,57.5 + parent: 2 + - uid: 333 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,32.5 + parent: 2 + - uid: 334 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,30.5 + parent: 2 + - uid: 335 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 44.5,15.5 + parent: 2 + - uid: 336 + components: + - type: Transform + pos: 60.5,58.5 + parent: 2 + - uid: 337 + components: + - type: Transform + pos: 61.5,60.5 + parent: 2 + - uid: 338 + components: + - type: Transform + pos: -8.5,67.5 + parent: 2 + - uid: 339 + components: + - type: Transform + pos: -23.5,65.5 + parent: 2 + - uid: 340 + components: + - type: Transform + pos: -4.5,12.5 + parent: 2 + - uid: 341 + components: + - type: Transform + pos: 2.5,29.5 + parent: 2 + - uid: 342 + components: + - type: Transform + pos: 8.5,30.5 + parent: 2 + - uid: 343 + components: + - type: Transform + pos: -1.5,30.5 + parent: 2 +- proto: AirlockSecurityLawyerGlassLocked + entities: + - uid: 344 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,53.5 + parent: 2 + - uid: 345 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,53.5 + parent: 2 + - uid: 346 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,50.5 + parent: 2 + - uid: 347 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,50.5 + parent: 2 +- proto: AirlockSecurityLawyerLocked + entities: + - uid: 348 + components: + - type: Transform + pos: -10.5,59.5 + parent: 2 +- proto: AirlockSecurityLocked + entities: + - uid: 349 + components: + - type: Transform + pos: -6.5,65.5 + parent: 2 + - uid: 350 + components: + - type: Transform + pos: -11.5,65.5 + parent: 2 + - uid: 351 + components: + - type: Transform + pos: -15.5,53.5 + parent: 2 + - uid: 352 + components: + - type: Transform + pos: -23.5,59.5 + parent: 2 + - uid: 353 + components: + - type: Transform + pos: -28.5,59.5 + parent: 2 + - uid: 354 + components: + - type: Transform + pos: -32.5,59.5 + parent: 2 + - uid: 355 + components: + - type: Transform + pos: -27.5,56.5 + parent: 2 + - uid: 356 + components: + - type: Transform + pos: 71.5,16.5 + parent: 2 +- proto: AirlockServiceCaptainLocked + entities: + - uid: 357 + components: + - type: Transform + pos: 75.5,25.5 + parent: 2 +- proto: AirlockServiceLocked + entities: + - uid: 359 + components: + - type: Transform + pos: 17.5,57.5 + parent: 2 +- proto: AirlockTheatreLocked + entities: + - uid: 360 + components: + - type: Transform + pos: 41.5,41.5 + parent: 2 + - uid: 361 + components: + - type: Transform + pos: 41.5,46.5 + parent: 2 +- proto: AirlockVirologyLocked + entities: + - uid: 362 + components: + - type: Transform + pos: 23.5,42.5 + parent: 2 + - type: DeviceLinkSink + invokeCounter: 1 + links: + - 363 + - type: DeviceLinkSource + linkedPorts: + 363: + - DoorStatus: DoorBolt + - uid: 363 + components: + - type: Transform + pos: 25.5,44.5 + parent: 2 + - type: DeviceLinkSink + invokeCounter: 1 + links: + - 362 + - type: DeviceLinkSource + linkedPorts: + 362: + - DoorStatus: DoorBolt +- proto: AirSensor + entities: + - uid: 364 + components: + - type: Transform + pos: 70.5,14.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 8 + - uid: 365 + components: + - type: Transform + pos: 74.5,44.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 6 + - uid: 366 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 48.5,41.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 11 + - uid: 367 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 53.5,48.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 13 + - uid: 368 + components: + - type: Transform + pos: 37.5,39.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 12 + - uid: 369 + components: + - type: Transform + pos: 37.5,44.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 12 + - uid: 370 + components: + - type: Transform + pos: 41.5,44.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 12 + - uid: 371 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,49.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 78 + - uid: 372 + components: + - type: Transform + pos: 12.5,16.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 20 + - uid: 373 + components: + - type: Transform + pos: 1.5,39.5 + parent: 2 + - uid: 374 + components: + - type: Transform + pos: -29.5,19.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 44 + - uid: 375 + components: + - type: Transform + pos: -32.5,28.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 45 + - uid: 376 + components: + - type: Transform + pos: -21.5,19.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 44 + - uid: 377 + components: + - type: Transform + pos: -14.5,20.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 41 + - uid: 378 + components: + - type: Transform + pos: -18.5,45.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 48 + - uid: 379 + components: + - type: Transform + pos: -7.5,22.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 39 + - uid: 380 + components: + - type: Transform + pos: -4.5,15.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 80 + - uid: 381 + components: + - type: Transform + pos: -12.5,7.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 51 + - uid: 382 + components: + - type: Transform + pos: 4.5,6.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 53 + - uid: 383 + components: + - type: Transform + pos: 12.5,11.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 21 + - uid: 384 + components: + - type: Transform + pos: -1.5,23.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 50 + - uid: 385 + components: + - type: Transform + pos: 5.5,29.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 76 + - uid: 386 + components: + - type: Transform + pos: 1.5,39.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 18 + - uid: 387 + components: + - type: Transform + pos: -10.5,49.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 17 + - uid: 388 + components: + - type: Transform + pos: -13.5,58.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 25 + - uid: 389 + components: + - type: Transform + pos: -19.5,55.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 33 + - uid: 390 + components: + - type: Transform + pos: -26.5,58.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 25 + - 30 + - uid: 391 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,53.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 32 + - uid: 392 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,65.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 28 + - 19588 + - 8512 + - uid: 393 + components: + - type: Transform + pos: -12.5,64.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 25 + - 26 + - uid: 394 + components: + - type: Transform + pos: -7.5,68.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 26 + - uid: 395 + components: + - type: Transform + pos: -2.5,56.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 24 + - 25 + - uid: 396 + components: + - type: Transform + pos: -4.5,60.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 24 + - uid: 397 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,47.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 22 + - uid: 398 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,58.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 35 + - uid: 399 + components: + - type: Transform + pos: 0.5,64.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 35 + - uid: 400 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,70.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 36 + - uid: 401 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,66.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 35 + - uid: 402 + components: + - type: Transform + pos: 17.5,45.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 70 + - uid: 403 + components: + - type: Transform + pos: 16.5,32.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 67 + - uid: 404 + components: + - type: Transform + pos: 18.5,26.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 67 + - uid: 405 + components: + - type: Transform + pos: 18.5,39.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 71 + - uid: 406 + components: + - type: Transform + pos: 14.5,49.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 22 + - uid: 407 + components: + - type: Transform + pos: 26.5,49.5 + parent: 2 + - uid: 408 + components: + - type: Transform + pos: 27.5,45.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 72 + - uid: 409 + components: + - type: Transform + pos: 21.5,35.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 77 + - uid: 410 + components: + - type: Transform + pos: 24.5,21.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 55 + - uid: 411 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,28.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 14 + - uid: 412 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,44.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 14 + - uid: 413 + components: + - type: Transform + pos: 32.5,49.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 14 + - uid: 414 + components: + - type: Transform + pos: 11.5,57.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 16 + - uid: 415 + components: + - type: Transform + pos: 11.5,61.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 16 + - uid: 416 + components: + - type: Transform + pos: 17.5,63.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 16 + - uid: 417 + components: + - type: Transform + pos: 21.5,58.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 23 + - uid: 418 + components: + - type: Transform + pos: 48.5,48.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 11 + - uid: 419 + components: + - type: Transform + pos: 60.5,40.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 10 + - uid: 420 + components: + - type: Transform + pos: 54.5,40.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 10 + - uid: 421 + components: + - type: Transform + pos: 61.5,57.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 3 + - uid: 422 + components: + - type: Transform + pos: 65.5,62.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 3 + - uid: 423 + components: + - type: Transform + pos: 83.5,44.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 6 + - 5 + - uid: 424 + components: + - type: Transform + pos: 74.5,40.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 5 + - uid: 425 + components: + - type: Transform + pos: 76.5,31.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 7 + - 5 + - uid: 426 + components: + - type: Transform + pos: 80.5,32.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 5 + - uid: 427 + components: + - type: Transform + pos: 83.5,26.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 5 + - uid: 428 + components: + - type: Transform + pos: 76.5,26.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 7 + - 5 + - 18626 + - 18627 + - uid: 429 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 66.5,29.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 4 + - 8 + - uid: 430 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 49.5,27.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 58 + - uid: 431 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 44.5,17.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 61 + - uid: 432 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 40.5,10.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 65 + - uid: 433 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.5,11.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 62 + - uid: 434 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 63.5,5.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 9 + - uid: 435 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 67.5,11.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 9 + - uid: 436 + components: + - type: Transform + pos: 58.5,35.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 10 + - uid: 437 + components: + - type: Transform + pos: 38.5,35.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 14 + - uid: 438 + components: + - type: Transform + pos: 24.5,17.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 56 + - uid: 439 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,40.5 + parent: 2 + - uid: 440 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,54.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 78 + - uid: 441 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,66.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 26 + - uid: 442 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -19.5,63.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 27 + - uid: 443 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,69.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 27 + - uid: 444 + components: + - type: Transform + pos: -23.5,60.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 30 + - uid: 445 + components: + - type: Transform + pos: -23.5,69.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 30 + - uid: 446 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,57.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 29 + - uid: 447 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,59.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 34 + - uid: 448 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,63.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 35 + - uid: 449 + components: + - type: Transform + pos: -10.5,34.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 38 + - uid: 450 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,27.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 43 + - uid: 452 + components: + - type: Transform + pos: -15.5,43.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 49 + - uid: 453 + components: + - type: Transform + pos: 0.5,16.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 54 + - uid: 454 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 53.5,26.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 57 + - uid: 455 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 51.5,17.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 63 + - uid: 456 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.5,4.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 66 + - uid: 457 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,1.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 64 + - uid: 458 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 57.5,18.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 60 + - uid: 459 + components: + - type: Transform + pos: 10.5,25.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 76 + - uid: 460 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 29.5,32.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 77 + - uid: 461 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 23.5,44.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 72 + - uid: 462 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.5,39.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 69 + - uid: 463 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,44.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 68 + - uid: 464 + components: + - type: Transform + pos: 65.5,42.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 4 + - uid: 465 + components: + - type: Transform + pos: 4.5,33.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 8494 + - 67 + - uid: 466 + components: + - type: Transform + pos: -15.5,1.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 51 + - uid: 467 + components: + - type: Transform + pos: -14.5,-5.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 51 + - uid: 468 + components: + - type: Transform + pos: -6.5,7.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 52 + - uid: 469 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,44.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 82 + - uid: 470 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,43.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 82 + - uid: 471 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,44.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 46 + - uid: 18452 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.5,-36.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 20121 + - 20125 + - uid: 18628 + components: + - type: Transform + pos: 70.5,26.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 18626 + - 18627 + - uid: 19573 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.5,75.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 19589 + - 19586 + - uid: 19585 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,74.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 19587 + - 19590 + - uid: 19591 + components: + - type: Transform + pos: -31.5,61.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 19588 + - 8512 + - uid: 19592 + components: + - type: Transform + pos: -27.5,61.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 19588 + - 8512 + - uid: 20138 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,-36.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 20121 + - 20125 + - 20128 + - 20124 + - 20123 + - uid: 20139 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,-34.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 20125 + - 20124 + - 20123 + - uid: 20140 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,-30.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 20149 + - 20125 + - 20124 + - 20127 + - 20123 + - 20122 + - uid: 20141 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.5,-32.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 20149 + - uid: 20142 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,-24.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 20124 + - 20122 + - 20126 +- proto: AirTankFilled + entities: + - uid: 19811 + components: + - type: Transform + pos: 28.318115,-38.56996 + parent: 2 + - uid: 19812 + components: + - type: Transform + pos: 28.479652,-38.55204 + parent: 2 + - uid: 19813 + components: + - type: Transform + pos: 28.65914,-38.55204 + parent: 2 +- proto: AltarConvertMaint + entities: + - uid: 474 + components: + - type: Transform + pos: 15.5,2.5 + parent: 2 +- proto: AltarTechnology + entities: + - uid: 475 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,56.5 + parent: 2 + - uid: 14743 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,56.5 + parent: 2 + - uid: 18770 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,56.5 + parent: 2 +- proto: AmeController + entities: + - uid: 12701 + components: + - type: Transform + pos: -15.5,26.5 + parent: 2 +- proto: AmeShielding + entities: + - uid: 18735 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,23.5 + parent: 2 + - uid: 18736 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,23.5 + parent: 2 + - uid: 18737 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,22.5 + parent: 2 + - uid: 18738 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,25.5 + parent: 2 + - uid: 18739 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,23.5 + parent: 2 + - uid: 18740 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,22.5 + parent: 2 + - uid: 18741 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,22.5 + parent: 2 + - uid: 18742 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,22.5 + parent: 2 + - uid: 18743 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,23.5 + parent: 2 + - uid: 18744 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,24.5 + parent: 2 + - uid: 18745 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,25.5 + parent: 2 + - uid: 18746 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,25.5 + parent: 2 + - uid: 18747 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,24.5 + parent: 2 + - uid: 18748 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,25.5 + parent: 2 + - uid: 18749 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,24.5 + parent: 2 + - uid: 18750 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,24.5 + parent: 2 +- proto: AmmoniaCanister + entities: + - uid: 489 + components: + - type: Transform + pos: -32.5,2.5 + parent: 2 +- proto: AmmoTechFabCircuitboard + entities: + - uid: 490 + components: + - type: Transform + pos: 29.35275,54.417416 + parent: 2 +- proto: AnomalyScanner + entities: + - uid: 491 + components: + - type: Transform + pos: 50.361633,-0.18300986 + parent: 2 + - uid: 492 + components: + - type: Transform + pos: 50.70237,-0.36222148 + parent: 2 + - uid: 493 + components: + - type: Transform + pos: 50.379566,-0.5414331 + parent: 2 +- proto: AnomalyVesselCircuitboard + entities: + - uid: 494 + components: + - type: Transform + pos: 52.549507,-0.46974826 + parent: 2 +- proto: AntiAnomalyZone + entities: + - uid: 482 + components: + - type: Transform + pos: 71.5,3.5 + parent: 2 + - uid: 485 + components: + - type: Transform + pos: 65.5,62.5 + parent: 2 +- proto: APCBasic + entities: + - uid: 495 + components: + - type: Transform + pos: 34.5,56.5 + parent: 2 + - uid: 496 + components: + - type: Transform + pos: 27.5,30.5 + parent: 2 + - uid: 497 + components: + - type: Transform + pos: 19.5,41.5 + parent: 2 + - uid: 498 + components: + - type: Transform + pos: 13.5,32.5 + parent: 2 + - uid: 499 + components: + - type: Transform + pos: 6.5,30.5 + parent: 2 + - uid: 500 + components: + - type: Transform + pos: 4.5,46.5 + parent: 2 + - uid: 501 + components: + - type: Transform + pos: -24.5,47.5 + parent: 2 + - uid: 502 + components: + - type: Transform + pos: -31.5,54.5 + parent: 2 + - uid: 503 + components: + - type: Transform + pos: -22.5,46.5 + parent: 2 + - uid: 504 + components: + - type: Transform + pos: -10.5,46.5 + parent: 2 + - uid: 505 + components: + - type: Transform + pos: -8.5,46.5 + parent: 2 + - uid: 506 + components: + - type: Transform + pos: -2.5,37.5 + parent: 2 + - uid: 507 + components: + - type: Transform + pos: -3.5,28.5 + parent: 2 + - uid: 508 + components: + - type: Transform + pos: -11.5,21.5 + parent: 2 + - uid: 509 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,15.5 + parent: 2 + - uid: 510 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -21.5,6.5 + parent: 2 + - uid: 512 + components: + - type: Transform + pos: 11.5,76.5 + parent: 2 + - uid: 513 + components: + - type: Transform + pos: -17.5,56.5 + parent: 2 + - uid: 514 + components: + - type: Transform + pos: -25.5,72.5 + parent: 2 + - uid: 515 + components: + - type: Transform + pos: -17.5,71.5 + parent: 2 + - uid: 516 + components: + - type: Transform + pos: -30.5,59.5 + parent: 2 + - uid: 517 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,64.5 + parent: 2 + - uid: 518 + components: + - type: Transform + pos: 18.5,60.5 + parent: 2 + - uid: 519 + components: + - type: Transform + pos: 13.5,63.5 + parent: 2 + - uid: 520 + components: + - type: Transform + pos: -3.5,69.5 + parent: 2 + - type: Apc + hasAccess: True + lastExternalState: Good + lastChargeState: Full + - uid: 521 + components: + - type: Transform + pos: -0.5,18.5 + parent: 2 + - uid: 522 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 13.5,13.5 + parent: 2 + - uid: 523 + components: + - type: Transform + pos: -11.5,8.5 + parent: 2 + - uid: 524 + components: + - type: Transform + pos: 7.5,6.5 + parent: 2 + - uid: 525 + components: + - type: Transform + pos: 26.5,18.5 + parent: 2 + - uid: 526 + components: + - type: Transform + pos: 14.5,27.5 + parent: 2 + - uid: 527 + components: + - type: Transform + pos: 29.5,2.5 + parent: 2 + - uid: 528 + components: + - type: Transform + pos: 34.5,8.5 + parent: 2 + - uid: 529 + components: + - type: Transform + pos: 37.5,15.5 + parent: 2 + - uid: 530 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,11.5 + parent: 2 + - uid: 531 + components: + - type: Transform + pos: 43.5,18.5 + parent: 2 + - uid: 532 + components: + - type: Transform + pos: 42.5,22.5 + parent: 2 + - uid: 533 + components: + - type: Transform + pos: 54.5,5.5 + parent: 2 + - uid: 534 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,24.5 + parent: 2 + - uid: 535 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,38.5 + parent: 2 + - uid: 536 + components: + - type: Transform + pos: 50.5,13.5 + parent: 2 + - uid: 537 + components: + - type: Transform + pos: 54.5,18.5 + parent: 2 + - uid: 538 + components: + - type: Transform + pos: -8.5,57.5 + parent: 2 + - uid: 539 + components: + - type: Transform + pos: -2.5,59.5 + parent: 2 + - uid: 540 + components: + - type: Transform + pos: 3.5,65.5 + parent: 2 + - uid: 541 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 45.5,29.5 + parent: 2 + - uid: 542 + components: + - type: Transform + pos: 60.5,27.5 + parent: 2 + - uid: 543 + components: + - type: Transform + pos: 43.5,3.5 + parent: 2 + - uid: 544 + components: + - type: Transform + pos: 49.5,49.5 + parent: 2 + - uid: 545 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 51.5,51.5 + parent: 2 + - uid: 546 + components: + - type: Transform + pos: 54.5,52.5 + parent: 2 + - uid: 547 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 63.5,43.5 + parent: 2 + - uid: 548 + components: + - type: Transform + pos: 38.5,31.5 + parent: 2 + - uid: 549 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 45.5,53.5 + parent: 2 + - uid: 550 + components: + - type: Transform + pos: 31.5,57.5 + parent: 2 + - uid: 551 + components: + - type: Transform + pos: 39.5,55.5 + parent: 2 + - uid: 552 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,42.5 + parent: 2 + - uid: 553 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,31.5 + parent: 2 + - uid: 554 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,44.5 + parent: 2 + - uid: 555 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,42.5 + parent: 2 + - uid: 556 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,38.5 + parent: 2 + - uid: 557 + components: + - type: Transform + pos: 26.5,37.5 + parent: 2 + - uid: 558 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,40.5 + parent: 2 + - uid: 559 + components: + - type: Transform + pos: 77.5,46.5 + parent: 2 + - uid: 561 + components: + - type: Transform + pos: 75.5,32.5 + parent: 2 + - uid: 562 + components: + - type: Transform + pos: 78.5,27.5 + parent: 2 + - uid: 563 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 79.5,24.5 + parent: 2 + - uid: 564 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 79.5,39.5 + parent: 2 + - uid: 565 + components: + - type: Transform + pos: 79.5,36.5 + parent: 2 + - uid: 566 + components: + - type: Transform + pos: 59.5,58.5 + parent: 2 + - uid: 567 + components: + - type: Transform + pos: 70.5,22.5 + parent: 2 + - uid: 568 + components: + - type: Transform + pos: 73.5,16.5 + parent: 2 + - uid: 569 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 62.5,6.5 + parent: 2 + - uid: 570 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,24.5 + parent: 2 + - uid: 571 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,27.5 + parent: 2 + - uid: 573 + components: + - type: Transform + pos: -6.5,18.5 + parent: 2 + - uid: 13429 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,68.5 + parent: 2 + - uid: 19818 + components: + - type: Transform + pos: 27.5,-42.5 + parent: 2 + - uid: 19819 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,-34.5 + parent: 2 + - uid: 19820 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 34.5,-26.5 + parent: 2 + - uid: 19821 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-18.5 + parent: 2 +- proto: APCElectronics + entities: + - uid: 575 + components: + - type: Transform + pos: 26.682535,62.301582 + parent: 2 + - uid: 576 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.562979,62.480793 + parent: 2 +- proto: APECircuitboard + entities: + - uid: 577 + components: + - type: Transform + pos: 52.49136,-0.61347103 + parent: 2 +- proto: ArrivalsShuttleTimer + entities: + - uid: 578 + components: + - type: Transform + pos: 67.5,12.5 + parent: 2 + - uid: 579 + components: + - type: Transform + pos: 68.5,5.5 + parent: 2 + - uid: 580 + components: + - type: Transform + pos: 75.5,6.5 + parent: 2 + - uid: 581 + components: + - type: Transform + pos: 67.5,22.5 + parent: 2 +- proto: Ashtray + entities: + - uid: 582 + components: + - type: Transform + pos: 70.50509,21.587791 + parent: 2 +- proto: AtmosDeviceFanTiny + entities: + - uid: 583 + components: + - type: Transform + pos: -29.5,46.5 + parent: 2 + - uid: 584 + components: + - type: Transform + pos: 1.5,0.5 + parent: 2 + - uid: 585 + components: + - type: Transform + pos: -0.5,0.5 + parent: 2 + - uid: 586 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -38.5,58.5 + parent: 2 + - uid: 587 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,71.5 + parent: 2 + - uid: 588 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,71.5 + parent: 2 + - uid: 589 + components: + - type: Transform + pos: 15.5,77.5 + parent: 2 + - uid: 590 + components: + - type: Transform + pos: 19.5,3.5 + parent: 2 + - uid: 591 + components: + - type: Transform + pos: 9.5,0.5 + parent: 2 + - uid: 592 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 77.5,16.5 + parent: 2 + - uid: 593 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 77.5,7.5 + parent: 2 + - uid: 594 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 77.5,0.5 + parent: 2 + - uid: 595 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 70.5,65.5 + parent: 2 + - uid: 596 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 68.5,65.5 + parent: 2 + - uid: 597 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 62.5,65.5 + parent: 2 + - uid: 598 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 60.5,65.5 + parent: 2 + - uid: 599 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 80.5,62.5 + parent: 2 + - uid: 600 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 80.5,61.5 + parent: 2 + - uid: 601 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 80.5,60.5 + parent: 2 + - uid: 602 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 80.5,59.5 + parent: 2 + - uid: 603 + components: + - type: Transform + pos: 25.5,-0.5 + parent: 2 + - uid: 604 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 56.5,49.5 + parent: 2 + - uid: 605 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 54.5,47.5 + parent: 2 + - uid: 606 + components: + - type: Transform + pos: -16.5,-8.5 + parent: 2 + - uid: 607 + components: + - type: Transform + pos: -15.5,-8.5 + parent: 2 + - uid: 8393 + components: + - type: Transform + pos: 36.5,-25.5 + parent: 2 + - uid: 9910 + components: + - type: Transform + pos: 53.5,6.5 + parent: 2 + - uid: 19769 + components: + - type: Transform + pos: 30.5,-21.5 + parent: 2 + - uid: 20232 + components: + - type: Transform + pos: 38.5,-30.5 + parent: 2 +- proto: AtmosFixBlockerMarker + entities: + - uid: 608 + components: + - type: Transform + pos: -27.5,25.5 + parent: 2 + - uid: 609 + components: + - type: Transform + pos: -27.5,24.5 + parent: 2 + - uid: 610 + components: + - type: Transform + pos: -27.5,23.5 + parent: 2 + - uid: 611 + components: + - type: Transform + pos: -26.5,24.5 + parent: 2 + - uid: 612 + components: + - type: Transform + pos: -26.5,25.5 + parent: 2 + - uid: 613 + components: + - type: Transform + pos: -38.5,26.5 + parent: 2 + - uid: 614 + components: + - type: Transform + pos: -40.5,27.5 + parent: 2 + - uid: 615 + components: + - type: Transform + pos: -39.5,26.5 + parent: 2 + - uid: 616 + components: + - type: Transform + pos: -39.5,25.5 + parent: 2 + - uid: 617 + components: + - type: Transform + pos: -26.5,23.5 + parent: 2 + - uid: 618 + components: + - type: Transform + pos: -28.5,25.5 + parent: 2 + - uid: 619 + components: + - type: Transform + pos: -28.5,24.5 + parent: 2 + - uid: 620 + components: + - type: Transform + pos: -28.5,23.5 + parent: 2 + - uid: 621 + components: + - type: Transform + pos: -40.5,25.5 + parent: 2 + - uid: 622 + components: + - type: Transform + pos: -40.5,26.5 + parent: 2 + - uid: 623 + components: + - type: Transform + pos: -38.5,25.5 + parent: 2 + - uid: 624 + components: + - type: Transform + pos: -39.5,27.5 + parent: 2 + - uid: 625 + components: + - type: Transform + pos: -38.5,27.5 + parent: 2 + - uid: 626 + components: + - type: Transform + pos: -39.5,21.5 + parent: 2 + - uid: 627 + components: + - type: Transform + pos: -39.5,20.5 + parent: 2 + - uid: 628 + components: + - type: Transform + pos: -39.5,19.5 + parent: 2 + - uid: 629 + components: + - type: Transform + pos: -38.5,21.5 + parent: 2 + - uid: 630 + components: + - type: Transform + pos: -38.5,20.5 + parent: 2 + - uid: 631 + components: + - type: Transform + pos: -38.5,19.5 + parent: 2 + - uid: 632 + components: + - type: Transform + pos: -37.5,21.5 + parent: 2 + - uid: 633 + components: + - type: Transform + pos: -37.5,20.5 + parent: 2 + - uid: 634 + components: + - type: Transform + pos: -37.5,19.5 + parent: 2 + - uid: 635 + components: + - type: Transform + pos: -31.5,1.5 + parent: 2 + - uid: 636 + components: + - type: Transform + pos: -31.5,1.5 + parent: 2 + - uid: 637 + components: + - type: Transform + pos: -31.5,2.5 + parent: 2 + - uid: 638 + components: + - type: Transform + pos: -31.5,3.5 + parent: 2 + - uid: 639 + components: + - type: Transform + pos: -32.5,1.5 + parent: 2 + - uid: 640 + components: + - type: Transform + pos: -32.5,2.5 + parent: 2 + - uid: 641 + components: + - type: Transform + pos: -32.5,3.5 + parent: 2 + - uid: 642 + components: + - type: Transform + pos: -33.5,1.5 + parent: 2 + - uid: 643 + components: + - type: Transform + pos: -33.5,2.5 + parent: 2 + - uid: 644 + components: + - type: Transform + pos: -33.5,3.5 + parent: 2 + - uid: 645 + components: + - type: Transform + pos: -39.5,9.5 + parent: 2 + - uid: 646 + components: + - type: Transform + pos: -39.5,8.5 + parent: 2 + - uid: 647 + components: + - type: Transform + pos: -39.5,7.5 + parent: 2 + - uid: 648 + components: + - type: Transform + pos: -38.5,9.5 + parent: 2 + - uid: 649 + components: + - type: Transform + pos: -38.5,8.5 + parent: 2 + - uid: 650 + components: + - type: Transform + pos: -38.5,7.5 + parent: 2 + - uid: 651 + components: + - type: Transform + pos: -37.5,9.5 + parent: 2 + - uid: 652 + components: + - type: Transform + pos: -37.5,8.5 + parent: 2 + - uid: 653 + components: + - type: Transform + pos: -37.5,7.5 + parent: 2 + - uid: 654 + components: + - type: Transform + pos: -37.5,7.5 + parent: 2 +- proto: AtmosFixFreezerMarker + entities: + - uid: 655 + components: + - type: Transform + pos: 24.5,-0.5 + parent: 2 + - uid: 656 + components: + - type: Transform + pos: 24.5,0.5 + parent: 2 + - uid: 657 + components: + - type: Transform + pos: 24.5,1.5 + parent: 2 + - uid: 658 + components: + - type: Transform + pos: 24.5,2.5 + parent: 2 + - uid: 659 + components: + - type: Transform + pos: 23.5,-0.5 + parent: 2 + - uid: 660 + components: + - type: Transform + pos: 23.5,0.5 + parent: 2 + - uid: 661 + components: + - type: Transform + pos: 23.5,1.5 + parent: 2 + - uid: 662 + components: + - type: Transform + pos: 23.5,2.5 + parent: 2 + - uid: 663 + components: + - type: Transform + pos: 25.5,2.5 + parent: 2 + - uid: 664 + components: + - type: Transform + pos: 25.5,1.5 + parent: 2 + - uid: 665 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 55.5,48.5 + parent: 2 + - uid: 666 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 55.5,49.5 + parent: 2 + - uid: 667 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 55.5,50.5 + parent: 2 + - uid: 668 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 54.5,48.5 + parent: 2 + - uid: 669 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 54.5,49.5 + parent: 2 + - uid: 670 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 55.5,51.5 + parent: 2 + - uid: 671 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 54.5,50.5 + parent: 2 + - uid: 672 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 54.5,51.5 + parent: 2 + - uid: 673 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 53.5,48.5 + parent: 2 + - uid: 674 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 53.5,49.5 + parent: 2 + - uid: 675 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 53.5,50.5 + parent: 2 + - uid: 676 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 53.5,51.5 + parent: 2 + - uid: 677 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 52.5,50.5 + parent: 2 + - uid: 678 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 52.5,49.5 + parent: 2 + - uid: 679 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 52.5,48.5 + parent: 2 + - uid: 9911 + components: + - type: Transform + pos: 54.5,7.5 + parent: 2 + - uid: 9912 + components: + - type: Transform + pos: 54.5,6.5 + parent: 2 + - uid: 9913 + components: + - type: Transform + pos: 55.5,7.5 + parent: 2 + - uid: 11668 + components: + - type: Transform + pos: 55.5,6.5 + parent: 2 + - uid: 19718 + components: + - type: Transform + pos: 27.5,-21.5 + parent: 2 + - uid: 19719 + components: + - type: Transform + pos: 27.5,-20.5 + parent: 2 + - uid: 19720 + components: + - type: Transform + pos: 27.5,-19.5 + parent: 2 + - uid: 19721 + components: + - type: Transform + pos: 27.5,-18.5 + parent: 2 + - uid: 19722 + components: + - type: Transform + pos: 27.5,-17.5 + parent: 2 + - uid: 19723 + components: + - type: Transform + pos: 27.5,-16.5 + parent: 2 + - uid: 19724 + components: + - type: Transform + pos: 27.5,-15.5 + parent: 2 + - uid: 19725 + components: + - type: Transform + pos: 28.5,-21.5 + parent: 2 + - uid: 19726 + components: + - type: Transform + pos: 28.5,-20.5 + parent: 2 + - uid: 19727 + components: + - type: Transform + pos: 28.5,-19.5 + parent: 2 + - uid: 19728 + components: + - type: Transform + pos: 28.5,-18.5 + parent: 2 + - uid: 19729 + components: + - type: Transform + pos: 28.5,-17.5 + parent: 2 + - uid: 19730 + components: + - type: Transform + pos: 28.5,-16.5 + parent: 2 + - uid: 19731 + components: + - type: Transform + pos: 28.5,-15.5 + parent: 2 + - uid: 19732 + components: + - type: Transform + pos: 32.5,-21.5 + parent: 2 + - uid: 19733 + components: + - type: Transform + pos: 32.5,-20.5 + parent: 2 + - uid: 19734 + components: + - type: Transform + pos: 32.5,-19.5 + parent: 2 + - uid: 19735 + components: + - type: Transform + pos: 32.5,-18.5 + parent: 2 + - uid: 19736 + components: + - type: Transform + pos: 32.5,-17.5 + parent: 2 + - uid: 19737 + components: + - type: Transform + pos: 32.5,-16.5 + parent: 2 + - uid: 19738 + components: + - type: Transform + pos: 32.5,-15.5 + parent: 2 + - uid: 19739 + components: + - type: Transform + pos: 33.5,-21.5 + parent: 2 + - uid: 19740 + components: + - type: Transform + pos: 33.5,-20.5 + parent: 2 + - uid: 19741 + components: + - type: Transform + pos: 33.5,-19.5 + parent: 2 + - uid: 19742 + components: + - type: Transform + pos: 33.5,-18.5 + parent: 2 + - uid: 19743 + components: + - type: Transform + pos: 33.5,-17.5 + parent: 2 + - uid: 19744 + components: + - type: Transform + pos: 33.5,-16.5 + parent: 2 + - uid: 19745 + components: + - type: Transform + pos: 33.5,-15.5 + parent: 2 + - uid: 19746 + components: + - type: Transform + pos: 32.5,-14.5 + parent: 2 + - uid: 19747 + components: + - type: Transform + pos: 31.5,-14.5 + parent: 2 + - uid: 19748 + components: + - type: Transform + pos: 30.5,-14.5 + parent: 2 + - uid: 19749 + components: + - type: Transform + pos: 29.5,-14.5 + parent: 2 + - uid: 19750 + components: + - type: Transform + pos: 28.5,-14.5 + parent: 2 + - uid: 19751 + components: + - type: Transform + pos: 29.5,-15.5 + parent: 2 + - uid: 19752 + components: + - type: Transform + pos: 29.5,-16.5 + parent: 2 + - uid: 19753 + components: + - type: Transform + pos: 29.5,-17.5 + parent: 2 + - uid: 19754 + components: + - type: Transform + pos: 29.5,-18.5 + parent: 2 + - uid: 19755 + components: + - type: Transform + pos: 29.5,-19.5 + parent: 2 + - uid: 19756 + components: + - type: Transform + pos: 29.5,-20.5 + parent: 2 + - uid: 19757 + components: + - type: Transform + pos: 30.5,-15.5 + parent: 2 + - uid: 19758 + components: + - type: Transform + pos: 30.5,-16.5 + parent: 2 + - uid: 19759 + components: + - type: Transform + pos: 30.5,-17.5 + parent: 2 + - uid: 19760 + components: + - type: Transform + pos: 30.5,-18.5 + parent: 2 + - uid: 19761 + components: + - type: Transform + pos: 30.5,-19.5 + parent: 2 + - uid: 19762 + components: + - type: Transform + pos: 30.5,-20.5 + parent: 2 + - uid: 19763 + components: + - type: Transform + pos: 31.5,-15.5 + parent: 2 + - uid: 19764 + components: + - type: Transform + pos: 31.5,-16.5 + parent: 2 + - uid: 19765 + components: + - type: Transform + pos: 31.5,-17.5 + parent: 2 + - uid: 19766 + components: + - type: Transform + pos: 31.5,-18.5 + parent: 2 + - uid: 19767 + components: + - type: Transform + pos: 31.5,-19.5 + parent: 2 + - uid: 19768 + components: + - type: Transform + pos: 31.5,-20.5 + parent: 2 + - uid: 20362 + components: + - type: Transform + pos: 27.5,-44.5 + parent: 2 + - uid: 20363 + components: + - type: Transform + pos: 33.5,-46.5 + parent: 2 + - uid: 20364 + components: + - type: Transform + pos: 29.5,-42.5 + parent: 2 + - uid: 20365 + components: + - type: Transform + pos: 27.5,-46.5 + parent: 2 + - uid: 20366 + components: + - type: Transform + pos: 31.5,-42.5 + parent: 2 + - uid: 20367 + components: + - type: Transform + pos: 28.5,-48.5 + parent: 2 + - uid: 20368 + components: + - type: Transform + pos: 27.5,-47.5 + parent: 2 + - uid: 20369 + components: + - type: Transform + pos: 30.5,-42.5 + parent: 2 + - uid: 20370 + components: + - type: Transform + pos: 33.5,-44.5 + parent: 2 + - uid: 20371 + components: + - type: Transform + pos: 28.5,-42.5 + parent: 2 + - uid: 20372 + components: + - type: Transform + pos: 33.5,-47.5 + parent: 2 + - uid: 20373 + components: + - type: Transform + pos: 33.5,-45.5 + parent: 2 + - uid: 20374 + components: + - type: Transform + pos: 27.5,-45.5 + parent: 2 + - uid: 20375 + components: + - type: Transform + pos: 29.5,-48.5 + parent: 2 + - uid: 20384 + components: + - type: Transform + pos: 31.5,-48.5 + parent: 2 + - uid: 20385 + components: + - type: Transform + pos: 32.5,-42.5 + parent: 2 + - uid: 20386 + components: + - type: Transform + pos: 33.5,-43.5 + parent: 2 + - uid: 20387 + components: + - type: Transform + pos: 30.5,-48.5 + parent: 2 + - uid: 20388 + components: + - type: Transform + pos: 32.5,-48.5 + parent: 2 + - uid: 20389 + components: + - type: Transform + pos: 27.5,-43.5 + parent: 2 + - uid: 20390 + components: + - type: Transform + pos: 28.5,-43.5 + parent: 2 + - uid: 20391 + components: + - type: Transform + pos: 29.5,-43.5 + parent: 2 + - uid: 20392 + components: + - type: Transform + pos: 30.5,-43.5 + parent: 2 + - uid: 20393 + components: + - type: Transform + pos: 31.5,-43.5 + parent: 2 + - uid: 20394 + components: + - type: Transform + pos: 32.5,-43.5 + parent: 2 + - uid: 20395 + components: + - type: Transform + pos: 32.5,-44.5 + parent: 2 + - uid: 20396 + components: + - type: Transform + pos: 32.5,-45.5 + parent: 2 + - uid: 20397 + components: + - type: Transform + pos: 32.5,-46.5 + parent: 2 + - uid: 20398 + components: + - type: Transform + pos: 32.5,-47.5 + parent: 2 + - uid: 20399 + components: + - type: Transform + pos: 31.5,-47.5 + parent: 2 + - uid: 20400 + components: + - type: Transform + pos: 30.5,-47.5 + parent: 2 + - uid: 20401 + components: + - type: Transform + pos: 29.5,-47.5 + parent: 2 + - uid: 20402 + components: + - type: Transform + pos: 28.5,-47.5 + parent: 2 + - uid: 20403 + components: + - type: Transform + pos: 28.5,-46.5 + parent: 2 + - uid: 20404 + components: + - type: Transform + pos: 28.5,-45.5 + parent: 2 + - uid: 20405 + components: + - type: Transform + pos: 28.5,-44.5 + parent: 2 + - uid: 20406 + components: + - type: Transform + pos: 29.5,-44.5 + parent: 2 + - uid: 20407 + components: + - type: Transform + pos: 30.5,-44.5 + parent: 2 + - uid: 20408 + components: + - type: Transform + pos: 31.5,-44.5 + parent: 2 + - uid: 20409 + components: + - type: Transform + pos: 31.5,-45.5 + parent: 2 + - uid: 20410 + components: + - type: Transform + pos: 31.5,-46.5 + parent: 2 + - uid: 20411 + components: + - type: Transform + pos: 30.5,-46.5 + parent: 2 + - uid: 20412 + components: + - type: Transform + pos: 29.5,-46.5 + parent: 2 + - uid: 20413 + components: + - type: Transform + pos: 29.5,-45.5 + parent: 2 +- proto: AtmosFixNitrogenMarker + entities: + - uid: 680 + components: + - type: Transform + pos: -39.5,13.5 + parent: 2 + - uid: 681 + components: + - type: Transform + pos: -39.5,12.5 + parent: 2 + - uid: 682 + components: + - type: Transform + pos: -39.5,11.5 + parent: 2 + - uid: 683 + components: + - type: Transform + pos: -38.5,13.5 + parent: 2 + - uid: 684 + components: + - type: Transform + pos: -38.5,12.5 + parent: 2 + - uid: 685 + components: + - type: Transform + pos: -38.5,11.5 + parent: 2 + - uid: 686 + components: + - type: Transform + pos: -37.5,13.5 + parent: 2 + - uid: 687 + components: + - type: Transform + pos: -37.5,12.5 + parent: 2 + - uid: 688 + components: + - type: Transform + pos: -37.5,11.5 + parent: 2 +- proto: AtmosFixOxygenMarker + entities: + - uid: 689 + components: + - type: Transform + pos: -39.5,17.5 + parent: 2 + - uid: 690 + components: + - type: Transform + pos: -39.5,16.5 + parent: 2 + - uid: 691 + components: + - type: Transform + pos: -39.5,15.5 + parent: 2 + - uid: 692 + components: + - type: Transform + pos: -38.5,17.5 + parent: 2 + - uid: 693 + components: + - type: Transform + pos: -38.5,16.5 + parent: 2 + - uid: 694 + components: + - type: Transform + pos: -38.5,15.5 + parent: 2 + - uid: 695 + components: + - type: Transform + pos: -37.5,17.5 + parent: 2 + - uid: 696 + components: + - type: Transform + pos: -37.5,16.5 + parent: 2 + - uid: 697 + components: + - type: Transform + pos: -37.5,15.5 + parent: 2 +- proto: AtmosFixPlasmaMarker + entities: + - uid: 698 + components: + - type: Transform + pos: -29.5,3.5 + parent: 2 + - uid: 699 + components: + - type: Transform + pos: -29.5,2.5 + parent: 2 + - uid: 700 + components: + - type: Transform + pos: -29.5,1.5 + parent: 2 + - uid: 701 + components: + - type: Transform + pos: -28.5,3.5 + parent: 2 + - uid: 702 + components: + - type: Transform + pos: -28.5,2.5 + parent: 2 + - uid: 703 + components: + - type: Transform + pos: -28.5,1.5 + parent: 2 + - uid: 704 + components: + - type: Transform + pos: -27.5,3.5 + parent: 2 + - uid: 705 + components: + - type: Transform + pos: -27.5,2.5 + parent: 2 + - uid: 706 + components: + - type: Transform + pos: -27.5,1.5 + parent: 2 + - uid: 707 + components: + - type: Transform + pos: -27.5,1.5 + parent: 2 +- proto: Autolathe + entities: + - uid: 708 + components: + - type: Transform + pos: 10.5,13.5 + parent: 2 + - uid: 709 + components: + - type: Transform + pos: 46.5,20.5 + parent: 2 + - uid: 710 + components: + - type: Transform + pos: -13.5,-0.5 + parent: 2 +- proto: AutolatheMachineCircuitboard + entities: + - uid: 711 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.982067,53.66527 + parent: 2 +- proto: BananaPhoneInstrument + entities: + - uid: 712 + components: + - type: Transform + pos: 40.525475,43.56165 + parent: 2 +- proto: BananaSeeds + entities: + - uid: 12079 + components: + - type: Transform + pos: -30.504583,76.46657 + parent: 2 + - uid: 12083 + components: + - type: Transform + pos: -30.504583,77.4729 + parent: 2 + - uid: 13975 + components: + - type: Transform + pos: -29.479267,76.4286 + parent: 2 +- proto: BannerNanotrasen + entities: + - uid: 18019 + components: + - type: Transform + pos: 79.5,35.5 + parent: 2 + - uid: 18128 + components: + - type: Transform + pos: 79.5,33.5 + parent: 2 +- proto: BarricadeBlock + entities: + - uid: 716 + components: + - type: Transform + pos: 61.5,25.5 + parent: 2 + - uid: 717 + components: + - type: Transform + pos: 27.5,61.5 + parent: 2 + - uid: 718 + components: + - type: Transform + pos: 48.5,58.5 + parent: 2 + - uid: 719 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 39.5,63.5 + parent: 2 +- proto: BarricadeDirectional + entities: + - uid: 720 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 60.5,25.5 + parent: 2 + - uid: 721 + components: + - type: Transform + pos: 48.5,59.5 + parent: 2 + - uid: 722 + components: + - type: Transform + pos: 39.5,64.5 + parent: 2 +- proto: BarSignSpacebucks + entities: + - uid: 723 + components: + - type: Transform + pos: 59.5,36.5 + parent: 2 +- proto: BaseBallBat + entities: + - uid: 724 + components: + - type: Transform + pos: -26.319265,53.646645 + parent: 2 +- proto: BaseComputer + entities: + - uid: 725 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 37.5,27.5 + parent: 2 + - uid: 726 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 37.5,29.5 + parent: 2 +- proto: BaseGasCondenser + entities: + - uid: 727 + components: + - type: Transform + pos: 38.5,13.5 + parent: 2 + - uid: 728 + components: + - type: Transform + pos: 9.5,26.5 + parent: 2 +- proto: Beaker + entities: + - uid: 19512 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.199577,74.62238 + parent: 2 +- proto: Bed + entities: + - uid: 729 + components: + - type: Transform + pos: 28.5,13.5 + parent: 2 + - uid: 730 + components: + - type: Transform + pos: 28.5,16.5 + parent: 2 + - uid: 731 + components: + - type: Transform + pos: 19.5,14.5 + parent: 2 + - uid: 733 + components: + - type: Transform + pos: -33.5,61.5 + parent: 2 + - uid: 734 + components: + - type: Transform + pos: -29.5,61.5 + parent: 2 + - uid: 735 + components: + - type: Transform + pos: -7.5,51.5 + parent: 2 + - uid: 736 + components: + - type: Transform + pos: -3.5,51.5 + parent: 2 + - uid: 737 + components: + - type: Transform + pos: 0.5,51.5 + parent: 2 + - uid: 738 + components: + - type: Transform + pos: 76.5,26.5 + parent: 2 +- proto: BedsheetBrigmedic + entities: + - uid: 739 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,58.5 + parent: 2 +- proto: BedsheetCaptain + entities: + - uid: 741 + components: + - type: Transform + pos: 76.5,26.5 + parent: 2 +- proto: BedsheetClown + entities: + - uid: 743 + components: + - type: Transform + parent: 742 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: BedsheetCult + entities: + - uid: 768 + components: + - type: Transform + pos: 13.5,62.5 + parent: 2 +- proto: BedsheetMedical + entities: + - uid: 769 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,35.5 + parent: 2 + - uid: 770 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,35.5 + parent: 2 + - uid: 771 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,35.5 + parent: 2 +- proto: BedsheetMime + entities: + - uid: 773 + components: + - type: Transform + parent: 772 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: BedsheetOrange + entities: + - uid: 796 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,40.5 + parent: 2 + - uid: 797 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,42.5 + parent: 2 +- proto: BedsheetSpawner + entities: + - uid: 798 + components: + - type: Transform + pos: 19.5,14.5 + parent: 2 + - uid: 799 + components: + - type: Transform + pos: 28.5,13.5 + parent: 2 + - uid: 800 + components: + - type: Transform + pos: 28.5,16.5 + parent: 2 + - uid: 801 + components: + - type: Transform + pos: -7.5,51.5 + parent: 2 + - uid: 802 + components: + - type: Transform + pos: -3.5,51.5 + parent: 2 + - uid: 803 + components: + - type: Transform + pos: 0.5,51.5 + parent: 2 +- proto: BedsheetSyndie + entities: + - uid: 804 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,61.5 + parent: 2 + - uid: 805 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,61.5 + parent: 2 +- proto: BenchSofaCorpLeft + entities: + - uid: 13645 + components: + - type: Transform + pos: 70.5,31.5 + parent: 2 +- proto: BenchSofaCorpMiddle + entities: + - uid: 5665 + components: + - type: Transform + pos: 69.5,31.5 + parent: 2 +- proto: BenchSofaCorpRight + entities: + - uid: 12613 + components: + - type: Transform + pos: 68.5,31.5 + parent: 2 +- proto: BenchSofaLeft + entities: + - uid: 560 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 72.5,23.5 + parent: 2 +- proto: BenchSofaMiddle + entities: + - uid: 16998 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 72.5,24.5 + parent: 2 +- proto: BenchSofaRight + entities: + - uid: 5986 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 72.5,25.5 + parent: 2 +- proto: BiomassReclaimer + entities: + - uid: 18529 + components: + - type: Transform + pos: 20.5,23.5 + parent: 2 +- proto: BlastDoor + entities: + - uid: 806 + components: + - type: Transform + pos: -1.5,0.5 + parent: 2 + - type: DeviceLinkSink + links: + - 14460 + - uid: 807 + components: + - type: Transform + pos: 33.5,-2.5 + parent: 2 + - type: DeviceLinkSink + links: + - 14461 + - uid: 808 + components: + - type: Transform + pos: -1.5,2.5 + parent: 2 + - type: DeviceLinkSink + links: + - 14460 + - uid: 809 + components: + - type: Transform + pos: 2.5,0.5 + parent: 2 + - type: DeviceLinkSink + links: + - 14456 + - uid: 810 + components: + - type: Transform + pos: 2.5,2.5 + parent: 2 + - type: DeviceLinkSink + links: + - 14456 + - uid: 811 + components: + - type: Transform + pos: 9.5,0.5 + parent: 2 + - type: DeviceLinkSink + links: + - 14459 + - uid: 812 + components: + - type: Transform + pos: -40.5,25.5 + parent: 2 + - type: DeviceLinkSink + links: + - 14457 + - uid: 813 + components: + - type: Transform + pos: -40.5,26.5 + parent: 2 + - type: DeviceLinkSink + links: + - 14457 + - uid: 814 + components: + - type: Transform + pos: -40.5,27.5 + parent: 2 + - type: DeviceLinkSink + links: + - 14457 + - uid: 815 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,64.5 + parent: 2 + - type: DeviceLinkSink + links: + - 14462 + - uid: 816 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,67.5 + parent: 2 + - type: DeviceLinkSink + links: + - 14462 + - uid: 817 + components: + - type: Transform + pos: 80.5,62.5 + parent: 2 + - type: DeviceLinkSink + links: + - 14470 + - uid: 818 + components: + - type: Transform + pos: 80.5,61.5 + parent: 2 + - type: DeviceLinkSink + links: + - 14470 + - uid: 819 + components: + - type: Transform + pos: 80.5,60.5 + parent: 2 + - type: DeviceLinkSink + links: + - 14470 + - uid: 820 + components: + - type: Transform + pos: 80.5,59.5 + parent: 2 + - type: DeviceLinkSink + links: + - 14470 +- proto: BlastDoorExterior3 + entities: + - uid: 821 + components: + - type: Transform + pos: 29.5,9.5 + parent: 2 + - uid: 822 + components: + - type: Transform + pos: 29.5,10.5 + parent: 2 + - uid: 823 + components: + - type: Transform + pos: 29.5,11.5 + parent: 2 +- proto: BlastDoorOpen + entities: + - uid: 824 + components: + - type: Transform + pos: 13.5,23.5 + parent: 2 + - type: DeviceLinkSink + links: + - 14467 + - uid: 825 + components: + - type: Transform + pos: 14.5,23.5 + parent: 2 + - type: DeviceLinkSink + links: + - 14467 + - uid: 826 + components: + - type: Transform + pos: 13.5,29.5 + parent: 2 + - type: DeviceLinkSink + links: + - 14467 + - uid: 827 + components: + - type: Transform + pos: 12.5,29.5 + parent: 2 + - type: DeviceLinkSink + links: + - 14467 + - uid: 828 + components: + - type: Transform + pos: 7.5,46.5 + parent: 2 + - type: DeviceLinkSink + links: + - 14469 +- proto: BlockGameArcade + entities: + - uid: 831 + components: + - type: Transform + pos: -27.5,68.5 + parent: 2 + - type: SpamEmitSound + enabled: False +- proto: BodyBag + entities: + - uid: 832 + components: + - type: Transform + pos: 29.499334,63.573135 + parent: 2 +- proto: BookAtmosAirAlarms + entities: + - uid: 833 + components: + - type: Transform + pos: -7.5243444,23.902966 + parent: 2 +- proto: BookAtmosDistro + entities: + - uid: 834 + components: + - type: Transform + pos: -7.355895,23.776714 + parent: 2 +- proto: BookAtmosVentsMore + entities: + - uid: 835 + components: + - type: Transform + pos: -7.6506824,23.629421 + parent: 2 +- proto: BookAtmosWaste + entities: + - uid: 836 + components: + - type: Transform + pos: -7.27167,23.50317 + parent: 2 +- proto: BookBartendersManual + entities: + - uid: 837 + components: + - type: Transform + pos: 59.54428,38.528282 + parent: 2 +- proto: BookChefGaming + entities: + - uid: 838 + components: + - type: Transform + pos: 54.416607,44.586376 + parent: 2 +- proto: BookEngineersHandbook + entities: + - uid: 839 + components: + - type: Transform + pos: -11.444434,33.764362 + parent: 2 +- proto: BookJanitorTale + entities: + - uid: 20338 + components: + - type: Transform + parent: 7004 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: BookSecurity + entities: + - uid: 840 + components: + - type: Transform + pos: 5.5,27.5 + parent: 2 +- proto: BookshelfFilled + entities: + - uid: 841 + components: + - type: Transform + pos: 23.5,57.5 + parent: 2 + - uid: 842 + components: + - type: Transform + pos: 25.5,57.5 + parent: 2 + - uid: 843 + components: + - type: Transform + pos: 23.5,55.5 + parent: 2 + - uid: 844 + components: + - type: Transform + pos: 22.5,55.5 + parent: 2 + - uid: 845 + components: + - type: Transform + pos: 25.5,55.5 + parent: 2 + - uid: 846 + components: + - type: Transform + pos: 23.5,53.5 + parent: 2 + - uid: 847 + components: + - type: Transform + pos: 25.5,53.5 + parent: 2 + - uid: 848 + components: + - type: Transform + pos: 16.5,59.5 + parent: 2 + - uid: 849 + components: + - type: Transform + pos: 22.5,53.5 + parent: 2 + - uid: 850 + components: + - type: Transform + pos: 22.5,57.5 + parent: 2 + - uid: 851 + components: + - type: Transform + pos: 24.5,55.5 + parent: 2 + - uid: 852 + components: + - type: Transform + pos: 24.5,53.5 + parent: 2 +- proto: BoozeDispenser + entities: + - uid: 853 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 62.5,37.5 + parent: 2 + - uid: 854 + components: + - type: Transform + pos: 59.5,26.5 + parent: 2 + - uid: 855 + components: + - type: Transform + pos: 47.5,61.5 + parent: 2 +- proto: BorgCharger + entities: + - uid: 856 + components: + - type: Transform + pos: 53.5,20.5 + parent: 2 + - uid: 857 + components: + - type: Transform + pos: -0.5,66.5 + parent: 2 + - uid: 858 + components: + - type: Transform + pos: 40.5,31.5 + parent: 2 + - uid: 859 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 55.5,16.5 + parent: 2 + - uid: 18430 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 36.5,-33.5 + parent: 2 + - uid: 18434 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,-32.5 + parent: 2 + - uid: 19700 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,-38.5 + parent: 2 + - uid: 19710 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,-29.5 + parent: 2 +- proto: BorgModuleClowning + entities: + - uid: 744 + components: + - type: Transform + parent: 742 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: BoxBeaker + entities: + - uid: 862 + components: + - type: Transform + pos: 25.604435,41.674557 + parent: 2 + - uid: 863 + components: + - type: Transform + pos: 3.362266,38.704063 + parent: 2 +- proto: BoxBeanbag + entities: + - uid: 20350 + components: + - type: Transform + parent: 20345 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: BoxBodyBag + entities: + - uid: 864 + components: + - type: Transform + pos: -28.070541,50.583153 + parent: 2 + - uid: 865 + components: + - type: Transform + pos: -5.4911914,57.617535 + parent: 2 + - uid: 866 + components: + - type: Transform + pos: 23.459993,23.461582 + parent: 2 + - uid: 867 + components: + - type: Transform + pos: 23.656519,23.629917 + parent: 2 + - uid: 868 + components: + - type: Transform + pos: 17.488485,41.597794 + parent: 2 + - uid: 869 + components: + - type: Transform + pos: 3.673111,38.745247 + parent: 2 +- proto: BoxBottle + entities: + - uid: 870 + components: + - type: Transform + pos: 25.590397,41.59039 + parent: 2 + - uid: 871 + components: + - type: Transform + pos: 3.7089782,38.48901 + parent: 2 +- proto: BoxCartridgeCap + entities: + - uid: 872 + components: + - type: Transform + pos: 40.402996,38.55928 + parent: 2 +- proto: BoxCleanerGrenades + entities: + - uid: 20332 + components: + - type: Transform + parent: 7004 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: BoxFolderBlue + entities: + - uid: 873 + components: + - type: Transform + pos: 36.64572,11.392298 + parent: 2 + - uid: 874 + components: + - type: Transform + pos: 1.4076779,15.600878 + parent: 2 + - uid: 875 + components: + - type: Transform + pos: -17.656897,54.815556 + parent: 2 + - uid: 876 + components: + - type: Transform + pos: 36.556053,11.589432 + parent: 2 + - uid: 877 + components: + - type: Transform + pos: 36.34085,11.768642 + parent: 2 + - uid: 878 + components: + - type: Transform + pos: 53.74968,14.408739 + parent: 2 + - uid: 879 + components: + - type: Transform + pos: 76.22655,37.437874 + parent: 2 + - uid: 880 + components: + - type: Transform + pos: 82.71409,23.572166 + parent: 2 + - uid: 881 + components: + - type: Transform + pos: 82.570625,23.715534 + parent: 2 + - uid: 884 + components: + - type: Transform + parent: 883 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 885 + components: + - type: Transform + parent: 883 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 886 + components: + - type: Transform + parent: 883 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: BoxFolderGreen + entities: + - uid: 887 + components: + - type: Transform + parent: 883 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 888 + components: + - type: Transform + parent: 883 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 895 + components: + - type: Transform + pos: 9.432186,12.429024 + parent: 2 + - uid: 896 + components: + - type: Transform + pos: 9.593586,12.429024 + parent: 2 + - uid: 897 + components: + - type: Transform + pos: 12.498117,12.370186 + parent: 2 + - uid: 898 + components: + - type: Transform + pos: 1.3538773,15.672562 + parent: 2 +- proto: BoxFolderRed + entities: + - uid: 889 + components: + - type: Transform + parent: 883 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 890 + components: + - type: Transform + parent: 883 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 891 + components: + - type: Transform + parent: 883 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 899 + components: + - type: Transform + pos: -17.40583,54.696083 + parent: 2 + - uid: 900 + components: + - type: Transform + pos: -17.561253,54.576607 + parent: 2 + - uid: 901 + components: + - type: Transform + pos: -24.330013,51.6445 + parent: 2 + - uid: 902 + components: + - type: Transform + pos: -24.557169,51.763977 + parent: 2 + - uid: 903 + components: + - type: Transform + pos: -24.526747,55.209854 + parent: 2 + - uid: 904 + components: + - type: Transform + pos: -21.339342,60.47898 + parent: 2 + - uid: 905 + components: + - type: Transform + pos: -21.554543,60.60443 + parent: 2 + - uid: 906 + components: + - type: Transform + pos: 46.763573,12.463495 + parent: 2 + - uid: 907 + components: + - type: Transform + pos: 46.512505,12.481417 + parent: 2 +- proto: BoxFolderWhite + entities: + - uid: 909 + components: + - type: Transform + pos: 18.613544,39.495056 + parent: 2 + - uid: 910 + components: + - type: Transform + pos: 18.774944,39.620502 + parent: 2 +- proto: BoxFolderYellow + entities: + - uid: 911 + components: + - type: Transform + pos: -5.715718,26.000225 + parent: 2 + - uid: 912 + components: + - type: Transform + pos: -5.603417,25.537304 + parent: 2 + - uid: 913 + components: + - type: Transform + pos: -5.53323,25.705639 + parent: 2 +- proto: BoxLightMixed + entities: + - uid: 914 + components: + - type: Transform + pos: 44.48078,54.628574 + parent: 2 +- proto: BoxMagazinePistol + entities: + - uid: 915 + components: + - type: Transform + pos: -14.526857,70.690544 + parent: 2 +- proto: BoxMagazinePistolSubMachineGun + entities: + - uid: 916 + components: + - type: Transform + pos: -14.272904,70.80773 + parent: 2 +- proto: BoxMagazineRifle + entities: + - uid: 917 + components: + - type: Transform + pos: -14.780811,70.49523 + parent: 2 +- proto: BoxMousetrap + entities: + - uid: 20339 + components: + - type: Transform + parent: 7004 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 20340 + components: + - type: Transform + parent: 7004 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: BoxSyringe + entities: + - uid: 918 + components: + - type: Transform + pos: 25.379835,41.50622 + parent: 2 + - uid: 919 + components: + - type: Transform + pos: 3.4579105,38.524853 + parent: 2 +- proto: BoxTrashbag + entities: + - uid: 20330 + components: + - type: Transform + parent: 7004 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: BriefcaseBrownFilled + entities: + - uid: 920 + components: + - type: Transform + pos: -24.485435,51.51308 + parent: 2 + - uid: 921 + components: + - type: Transform + pos: 0.45231438,59.847607 + parent: 2 +- proto: BrigTimer + entities: + - uid: 922 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,53.5 + parent: 2 + - uid: 923 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,53.5 + parent: 2 + - uid: 924 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,53.5 + parent: 2 +- proto: Bucket + entities: + - uid: 925 + components: + - type: Transform + pos: 55.549828,19.621422 + parent: 2 + - uid: 926 + components: + - type: Transform + pos: 39.50665,52.551533 + parent: 2 + - uid: 20342 + components: + - type: Transform + parent: 7004 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: CableApcExtension + entities: + - uid: 927 + components: + - type: Transform + pos: -32.5,1.5 + parent: 2 + - uid: 928 + components: + - type: Transform + pos: -14.5,38.5 + parent: 2 + - uid: 929 + components: + - type: Transform + pos: -13.5,38.5 + parent: 2 + - uid: 930 + components: + - type: Transform + pos: -28.5,1.5 + parent: 2 + - uid: 931 + components: + - type: Transform + pos: -34.5,69.5 + parent: 2 + - uid: 932 + components: + - type: Transform + pos: -34.5,30.5 + parent: 2 + - uid: 933 + components: + - type: Transform + pos: -28.5,21.5 + parent: 2 + - uid: 934 + components: + - type: Transform + pos: 34.5,56.5 + parent: 2 + - uid: 935 + components: + - type: Transform + pos: 34.5,53.5 + parent: 2 + - uid: 936 + components: + - type: Transform + pos: 15.5,5.5 + parent: 2 + - uid: 937 + components: + - type: Transform + pos: 15.5,3.5 + parent: 2 + - uid: 938 + components: + - type: Transform + pos: 15.5,4.5 + parent: 2 + - uid: 939 + components: + - type: Transform + pos: 15.5,2.5 + parent: 2 + - uid: 940 + components: + - type: Transform + pos: -23.5,15.5 + parent: 2 + - uid: 941 + components: + - type: Transform + pos: -24.5,15.5 + parent: 2 + - uid: 942 + components: + - type: Transform + pos: -24.5,13.5 + parent: 2 + - uid: 943 + components: + - type: Transform + pos: -24.5,12.5 + parent: 2 + - uid: 944 + components: + - type: Transform + pos: -24.5,11.5 + parent: 2 + - uid: 945 + components: + - type: Transform + pos: -24.5,10.5 + parent: 2 + - uid: 946 + components: + - type: Transform + pos: -25.5,10.5 + parent: 2 + - uid: 947 + components: + - type: Transform + pos: -26.5,10.5 + parent: 2 + - uid: 948 + components: + - type: Transform + pos: -24.5,14.5 + parent: 2 + - uid: 949 + components: + - type: Transform + pos: -26.5,9.5 + parent: 2 + - uid: 950 + components: + - type: Transform + pos: -41.5,28.5 + parent: 2 + - uid: 951 + components: + - type: Transform + pos: -31.5,27.5 + parent: 2 + - uid: 952 + components: + - type: Transform + pos: -32.5,27.5 + parent: 2 + - uid: 953 + components: + - type: Transform + pos: -33.5,27.5 + parent: 2 + - uid: 954 + components: + - type: Transform + pos: -34.5,27.5 + parent: 2 + - uid: 955 + components: + - type: Transform + pos: -34.5,28.5 + parent: 2 + - uid: 956 + components: + - type: Transform + pos: -34.5,29.5 + parent: 2 + - uid: 957 + components: + - type: Transform + pos: -34.5,26.5 + parent: 2 + - uid: 958 + components: + - type: Transform + pos: -31.5,26.5 + parent: 2 + - uid: 959 + components: + - type: Transform + pos: -31.5,25.5 + parent: 2 + - uid: 960 + components: + - type: Transform + pos: -31.5,24.5 + parent: 2 + - uid: 961 + components: + - type: Transform + pos: -31.5,23.5 + parent: 2 + - uid: 962 + components: + - type: Transform + pos: -26.5,8.5 + parent: 2 + - uid: 963 + components: + - type: Transform + pos: -26.5,7.5 + parent: 2 + - uid: 964 + components: + - type: Transform + pos: -27.5,7.5 + parent: 2 + - uid: 965 + components: + - type: Transform + pos: -27.5,6.5 + parent: 2 + - uid: 966 + components: + - type: Transform + pos: -28.5,6.5 + parent: 2 + - uid: 967 + components: + - type: Transform + pos: -29.5,6.5 + parent: 2 + - uid: 968 + components: + - type: Transform + pos: -30.5,6.5 + parent: 2 + - uid: 969 + components: + - type: Transform + pos: -31.5,6.5 + parent: 2 + - uid: 970 + components: + - type: Transform + pos: -32.5,6.5 + parent: 2 + - uid: 971 + components: + - type: Transform + pos: -33.5,6.5 + parent: 2 + - uid: 972 + components: + - type: Transform + pos: -33.5,7.5 + parent: 2 + - uid: 973 + components: + - type: Transform + pos: -34.5,7.5 + parent: 2 + - uid: 974 + components: + - type: Transform + pos: -34.5,8.5 + parent: 2 + - uid: 975 + components: + - type: Transform + pos: -34.5,9.5 + parent: 2 + - uid: 976 + components: + - type: Transform + pos: -34.5,10.5 + parent: 2 + - uid: 977 + components: + - type: Transform + pos: -34.5,11.5 + parent: 2 + - uid: 978 + components: + - type: Transform + pos: -34.5,12.5 + parent: 2 + - uid: 979 + components: + - type: Transform + pos: -34.5,13.5 + parent: 2 + - uid: 980 + components: + - type: Transform + pos: -34.5,14.5 + parent: 2 + - uid: 981 + components: + - type: Transform + pos: -34.5,15.5 + parent: 2 + - uid: 982 + components: + - type: Transform + pos: -34.5,16.5 + parent: 2 + - uid: 983 + components: + - type: Transform + pos: -34.5,17.5 + parent: 2 + - uid: 984 + components: + - type: Transform + pos: -34.5,18.5 + parent: 2 + - uid: 985 + components: + - type: Transform + pos: -34.5,19.5 + parent: 2 + - uid: 986 + components: + - type: Transform + pos: -34.5,20.5 + parent: 2 + - uid: 987 + components: + - type: Transform + pos: -34.5,21.5 + parent: 2 + - uid: 988 + components: + - type: Transform + pos: -33.5,21.5 + parent: 2 + - uid: 989 + components: + - type: Transform + pos: -32.5,21.5 + parent: 2 + - uid: 990 + components: + - type: Transform + pos: -31.5,21.5 + parent: 2 + - uid: 991 + components: + - type: Transform + pos: -30.5,21.5 + parent: 2 + - uid: 992 + components: + - type: Transform + pos: -30.5,20.5 + parent: 2 + - uid: 993 + components: + - type: Transform + pos: -30.5,19.5 + parent: 2 + - uid: 994 + components: + - type: Transform + pos: -29.5,19.5 + parent: 2 + - uid: 995 + components: + - type: Transform + pos: -28.5,19.5 + parent: 2 + - uid: 996 + components: + - type: Transform + pos: -28.5,20.5 + parent: 2 + - uid: 997 + components: + - type: Transform + pos: -27.5,20.5 + parent: 2 + - uid: 998 + components: + - type: Transform + pos: -26.5,20.5 + parent: 2 + - uid: 999 + components: + - type: Transform + pos: -26.5,19.5 + parent: 2 + - uid: 1000 + components: + - type: Transform + pos: -25.5,19.5 + parent: 2 + - uid: 1001 + components: + - type: Transform + pos: -24.5,19.5 + parent: 2 + - uid: 1002 + components: + - type: Transform + pos: -24.5,18.5 + parent: 2 + - uid: 1003 + components: + - type: Transform + pos: -24.5,17.5 + parent: 2 + - uid: 1004 + components: + - type: Transform + pos: -24.5,16.5 + parent: 2 + - uid: 1005 + components: + - type: Transform + pos: -23.5,18.5 + parent: 2 + - uid: 1006 + components: + - type: Transform + pos: -22.5,18.5 + parent: 2 + - uid: 1007 + components: + - type: Transform + pos: -21.5,18.5 + parent: 2 + - uid: 1008 + components: + - type: Transform + pos: -22.5,17.5 + parent: 2 + - uid: 1009 + components: + - type: Transform + pos: -22.5,19.5 + parent: 2 + - uid: 1010 + components: + - type: Transform + pos: -22.5,20.5 + parent: 2 + - uid: 1011 + components: + - type: Transform + pos: -22.5,21.5 + parent: 2 + - uid: 1012 + components: + - type: Transform + pos: -22.5,22.5 + parent: 2 + - uid: 1013 + components: + - type: Transform + pos: -22.5,23.5 + parent: 2 + - uid: 1014 + components: + - type: Transform + pos: -23.5,23.5 + parent: 2 + - uid: 1015 + components: + - type: Transform + pos: -24.5,23.5 + parent: 2 + - uid: 1016 + components: + - type: Transform + pos: -11.5,21.5 + parent: 2 + - uid: 1017 + components: + - type: Transform + pos: -11.5,20.5 + parent: 2 + - uid: 1018 + components: + - type: Transform + pos: -11.5,19.5 + parent: 2 + - uid: 1019 + components: + - type: Transform + pos: -12.5,19.5 + parent: 2 + - uid: 1020 + components: + - type: Transform + pos: -13.5,19.5 + parent: 2 + - uid: 1021 + components: + - type: Transform + pos: -14.5,19.5 + parent: 2 + - uid: 1022 + components: + - type: Transform + pos: -15.5,19.5 + parent: 2 + - uid: 1023 + components: + - type: Transform + pos: -16.5,19.5 + parent: 2 + - uid: 1024 + components: + - type: Transform + pos: -16.5,18.5 + parent: 2 + - uid: 1025 + components: + - type: Transform + pos: -17.5,18.5 + parent: 2 + - uid: 1026 + components: + - type: Transform + pos: -18.5,18.5 + parent: 2 + - uid: 1027 + components: + - type: Transform + pos: -19.5,18.5 + parent: 2 + - uid: 1028 + components: + - type: Transform + pos: -18.5,18.5 + parent: 2 + - uid: 1029 + components: + - type: Transform + pos: -18.5,19.5 + parent: 2 + - uid: 1030 + components: + - type: Transform + pos: -18.5,20.5 + parent: 2 + - uid: 1031 + components: + - type: Transform + pos: -18.5,21.5 + parent: 2 + - uid: 1032 + components: + - type: Transform + pos: -18.5,22.5 + parent: 2 + - uid: 1033 + components: + - type: Transform + pos: -19.5,22.5 + parent: 2 + - uid: 1034 + components: + - type: Transform + pos: -18.5,17.5 + parent: 2 + - uid: 1035 + components: + - type: Transform + pos: -10.5,20.5 + parent: 2 + - uid: 1036 + components: + - type: Transform + pos: -9.5,20.5 + parent: 2 + - uid: 1037 + components: + - type: Transform + pos: -8.5,20.5 + parent: 2 + - uid: 1038 + components: + - type: Transform + pos: -7.5,20.5 + parent: 2 + - uid: 1039 + components: + - type: Transform + pos: -9.5,21.5 + parent: 2 + - uid: 1040 + components: + - type: Transform + pos: -9.5,22.5 + parent: 2 + - uid: 1041 + components: + - type: Transform + pos: -9.5,23.5 + parent: 2 + - uid: 1042 + components: + - type: Transform + pos: -9.5,24.5 + parent: 2 + - uid: 1043 + components: + - type: Transform + pos: -9.5,25.5 + parent: 2 + - uid: 1044 + components: + - type: Transform + pos: -3.5,28.5 + parent: 2 + - uid: 1045 + components: + - type: Transform + pos: -3.5,27.5 + parent: 2 + - uid: 1046 + components: + - type: Transform + pos: -4.5,27.5 + parent: 2 + - uid: 1047 + components: + - type: Transform + pos: -4.5,26.5 + parent: 2 + - uid: 1048 + components: + - type: Transform + pos: -4.5,25.5 + parent: 2 + - uid: 1049 + components: + - type: Transform + pos: -4.5,24.5 + parent: 2 + - uid: 1050 + components: + - type: Transform + pos: -4.5,23.5 + parent: 2 + - uid: 1051 + components: + - type: Transform + pos: -3.5,25.5 + parent: 2 + - uid: 1052 + components: + - type: Transform + pos: -2.5,25.5 + parent: 2 + - uid: 1053 + components: + - type: Transform + pos: -5.5,27.5 + parent: 2 + - uid: 1054 + components: + - type: Transform + pos: -6.5,27.5 + parent: 2 + - uid: 1055 + components: + - type: Transform + pos: -2.5,37.5 + parent: 2 + - uid: 1056 + components: + - type: Transform + pos: -2.5,36.5 + parent: 2 + - uid: 1057 + components: + - type: Transform + pos: -2.5,35.5 + parent: 2 + - uid: 1058 + components: + - type: Transform + pos: -3.5,35.5 + parent: 2 + - uid: 1059 + components: + - type: Transform + pos: -4.5,35.5 + parent: 2 + - uid: 1060 + components: + - type: Transform + pos: -5.5,35.5 + parent: 2 + - uid: 1061 + components: + - type: Transform + pos: -2.5,34.5 + parent: 2 + - uid: 1062 + components: + - type: Transform + pos: -2.5,33.5 + parent: 2 + - uid: 1063 + components: + - type: Transform + pos: -3.5,33.5 + parent: 2 + - uid: 1064 + components: + - type: Transform + pos: -4.5,33.5 + parent: 2 + - uid: 1065 + components: + - type: Transform + pos: -5.5,33.5 + parent: 2 + - uid: 1066 + components: + - type: Transform + pos: -5.5,32.5 + parent: 2 + - uid: 1067 + components: + - type: Transform + pos: -5.5,31.5 + parent: 2 + - uid: 1068 + components: + - type: Transform + pos: -5.5,30.5 + parent: 2 + - uid: 1069 + components: + - type: Transform + pos: -4.5,30.5 + parent: 2 + - uid: 1070 + components: + - type: Transform + pos: -3.5,30.5 + parent: 2 + - uid: 1071 + components: + - type: Transform + pos: -2.5,30.5 + parent: 2 + - uid: 1072 + components: + - type: Transform + pos: -4.5,36.5 + parent: 2 + - uid: 1073 + components: + - type: Transform + pos: -4.5,37.5 + parent: 2 + - uid: 1074 + components: + - type: Transform + pos: -4.5,38.5 + parent: 2 + - uid: 1075 + components: + - type: Transform + pos: -4.5,39.5 + parent: 2 + - uid: 1076 + components: + - type: Transform + pos: -3.5,39.5 + parent: 2 + - uid: 1077 + components: + - type: Transform + pos: -2.5,39.5 + parent: 2 + - uid: 1078 + components: + - type: Transform + pos: -5.5,39.5 + parent: 2 + - uid: 1079 + components: + - type: Transform + pos: -6.5,39.5 + parent: 2 + - uid: 1080 + components: + - type: Transform + pos: -7.5,39.5 + parent: 2 + - uid: 1081 + components: + - type: Transform + pos: -8.5,39.5 + parent: 2 + - uid: 1082 + components: + - type: Transform + pos: -9.5,39.5 + parent: 2 + - uid: 1083 + components: + - type: Transform + pos: -8.5,40.5 + parent: 2 + - uid: 1084 + components: + - type: Transform + pos: -10.5,39.5 + parent: 2 + - uid: 1085 + components: + - type: Transform + pos: -10.5,40.5 + parent: 2 + - uid: 1086 + components: + - type: Transform + pos: -9.5,38.5 + parent: 2 + - uid: 1087 + components: + - type: Transform + pos: -9.5,37.5 + parent: 2 + - uid: 1088 + components: + - type: Transform + pos: -9.5,36.5 + parent: 2 + - uid: 1089 + components: + - type: Transform + pos: -9.5,35.5 + parent: 2 + - uid: 1090 + components: + - type: Transform + pos: -9.5,34.5 + parent: 2 + - uid: 1091 + components: + - type: Transform + pos: -9.5,33.5 + parent: 2 + - uid: 1092 + components: + - type: Transform + pos: -9.5,32.5 + parent: 2 + - uid: 1093 + components: + - type: Transform + pos: -9.5,31.5 + parent: 2 + - uid: 1094 + components: + - type: Transform + pos: -9.5,30.5 + parent: 2 + - uid: 1095 + components: + - type: Transform + pos: -9.5,29.5 + parent: 2 + - uid: 1096 + components: + - type: Transform + pos: -9.5,28.5 + parent: 2 + - uid: 1097 + components: + - type: Transform + pos: -9.5,27.5 + parent: 2 + - uid: 1098 + components: + - type: Transform + pos: -8.5,28.5 + parent: 2 + - uid: 1099 + components: + - type: Transform + pos: -10.5,28.5 + parent: 2 + - uid: 1100 + components: + - type: Transform + pos: -8.5,30.5 + parent: 2 + - uid: 1101 + components: + - type: Transform + pos: -10.5,30.5 + parent: 2 + - uid: 1102 + components: + - type: Transform + pos: -10.5,32.5 + parent: 2 + - uid: 1103 + components: + - type: Transform + pos: -11.5,32.5 + parent: 2 + - uid: 1104 + components: + - type: Transform + pos: -12.5,38.5 + parent: 2 + - uid: 1105 + components: + - type: Transform + pos: -41.5,27.5 + parent: 2 + - uid: 1106 + components: + - type: Transform + pos: -42.5,27.5 + parent: 2 + - uid: 1107 + components: + - type: Transform + pos: -40.5,30.5 + parent: 2 + - uid: 1108 + components: + - type: Transform + pos: -41.5,29.5 + parent: 2 + - uid: 1109 + components: + - type: Transform + pos: -43.5,27.5 + parent: 2 + - uid: 1110 + components: + - type: Transform + pos: -8.5,32.5 + parent: 2 + - uid: 1111 + components: + - type: Transform + pos: -10.5,35.5 + parent: 2 + - uid: 1112 + components: + - type: Transform + pos: -10.5,46.5 + parent: 2 + - uid: 1113 + components: + - type: Transform + pos: -10.5,45.5 + parent: 2 + - uid: 1114 + components: + - type: Transform + pos: -10.5,44.5 + parent: 2 + - uid: 1115 + components: + - type: Transform + pos: -10.5,43.5 + parent: 2 + - uid: 1116 + components: + - type: Transform + pos: -10.5,41.5 + parent: 2 + - uid: 1117 + components: + - type: Transform + pos: -8.5,41.5 + parent: 2 + - uid: 1118 + components: + - type: Transform + pos: -11.5,44.5 + parent: 2 + - uid: 1119 + components: + - type: Transform + pos: -12.5,44.5 + parent: 2 + - uid: 1120 + components: + - type: Transform + pos: -13.5,44.5 + parent: 2 + - uid: 1121 + components: + - type: Transform + pos: -14.5,44.5 + parent: 2 + - uid: 1122 + components: + - type: Transform + pos: -15.5,44.5 + parent: 2 + - uid: 1123 + components: + - type: Transform + pos: -14.5,43.5 + parent: 2 + - uid: 1124 + components: + - type: Transform + pos: -43.5,26.5 + parent: 2 + - uid: 1125 + components: + - type: Transform + pos: -40.5,29.5 + parent: 2 + - uid: 1126 + components: + - type: Transform + pos: -43.5,25.5 + parent: 2 + - uid: 1127 + components: + - type: Transform + pos: -22.5,46.5 + parent: 2 + - uid: 1128 + components: + - type: Transform + pos: -22.5,45.5 + parent: 2 + - uid: 1129 + components: + - type: Transform + pos: -22.5,44.5 + parent: 2 + - uid: 1130 + components: + - type: Transform + pos: -22.5,43.5 + parent: 2 + - uid: 1131 + components: + - type: Transform + pos: -21.5,43.5 + parent: 2 + - uid: 1132 + components: + - type: Transform + pos: -20.5,43.5 + parent: 2 + - uid: 1133 + components: + - type: Transform + pos: -19.5,43.5 + parent: 2 + - uid: 1134 + components: + - type: Transform + pos: -18.5,43.5 + parent: 2 + - uid: 1135 + components: + - type: Transform + pos: -21.5,45.5 + parent: 2 + - uid: 1136 + components: + - type: Transform + pos: -20.5,45.5 + parent: 2 + - uid: 1137 + components: + - type: Transform + pos: -19.5,45.5 + parent: 2 + - uid: 1138 + components: + - type: Transform + pos: -18.5,45.5 + parent: 2 + - uid: 1139 + components: + - type: Transform + pos: -24.5,47.5 + parent: 2 + - uid: 1140 + components: + - type: Transform + pos: -24.5,46.5 + parent: 2 + - uid: 1141 + components: + - type: Transform + pos: -25.5,46.5 + parent: 2 + - uid: 1142 + components: + - type: Transform + pos: -26.5,46.5 + parent: 2 + - uid: 1143 + components: + - type: Transform + pos: -28.5,46.5 + parent: 2 + - uid: 1144 + components: + - type: Transform + pos: -27.5,46.5 + parent: 2 + - uid: 1145 + components: + - type: Transform + pos: -25.5,45.5 + parent: 2 + - uid: 1146 + components: + - type: Transform + pos: -25.5,44.5 + parent: 2 + - uid: 1147 + components: + - type: Transform + pos: -25.5,43.5 + parent: 2 + - uid: 1148 + components: + - type: Transform + pos: -26.5,44.5 + parent: 2 + - uid: 1149 + components: + - type: Transform + pos: -27.5,44.5 + parent: 2 + - uid: 1150 + components: + - type: Transform + pos: -24.5,44.5 + parent: 2 + - uid: 1151 + components: + - type: Transform + pos: -42.5,25.5 + parent: 2 + - uid: 1152 + components: + - type: Transform + pos: -35.5,30.5 + parent: 2 + - uid: 1153 + components: + - type: Transform + pos: -34.5,24.5 + parent: 2 + - uid: 1154 + components: + - type: Transform + pos: -8.5,46.5 + parent: 2 + - uid: 1155 + components: + - type: Transform + pos: -8.5,45.5 + parent: 2 + - uid: 1156 + components: + - type: Transform + pos: -8.5,44.5 + parent: 2 + - uid: 1157 + components: + - type: Transform + pos: -8.5,43.5 + parent: 2 + - uid: 1158 + components: + - type: Transform + pos: -7.5,44.5 + parent: 2 + - uid: 1159 + components: + - type: Transform + pos: -6.5,44.5 + parent: 2 + - uid: 1160 + components: + - type: Transform + pos: -5.5,44.5 + parent: 2 + - uid: 1161 + components: + - type: Transform + pos: -4.5,44.5 + parent: 2 + - uid: 1162 + components: + - type: Transform + pos: -3.5,44.5 + parent: 2 + - uid: 1163 + components: + - type: Transform + pos: -4.5,43.5 + parent: 2 + - uid: 1164 + components: + - type: Transform + pos: -4.5,42.5 + parent: 2 + - uid: 1165 + components: + - type: Transform + pos: -3.5,42.5 + parent: 2 + - uid: 1166 + components: + - type: Transform + pos: -2.5,42.5 + parent: 2 + - uid: 1167 + components: + - type: Transform + pos: -2.5,43.5 + parent: 2 + - uid: 1168 + components: + - type: Transform + pos: -1.5,43.5 + parent: 2 + - uid: 1169 + components: + - type: Transform + pos: -21.5,6.5 + parent: 2 + - uid: 1170 + components: + - type: Transform + pos: -21.5,7.5 + parent: 2 + - uid: 1171 + components: + - type: Transform + pos: -22.5,7.5 + parent: 2 + - uid: 1172 + components: + - type: Transform + pos: -23.5,7.5 + parent: 2 + - uid: 1173 + components: + - type: Transform + pos: -20.5,7.5 + parent: 2 + - uid: 1174 + components: + - type: Transform + pos: -22.5,8.5 + parent: 2 + - uid: 1175 + components: + - type: Transform + pos: -22.5,9.5 + parent: 2 + - uid: 1176 + components: + - type: Transform + pos: -21.5,9.5 + parent: 2 + - uid: 1177 + components: + - type: Transform + pos: -22.5,10.5 + parent: 2 + - uid: 1178 + components: + - type: Transform + pos: -22.5,11.5 + parent: 2 + - uid: 1179 + components: + - type: Transform + pos: -22.5,12.5 + parent: 2 + - uid: 1180 + components: + - type: Transform + pos: -22.5,13.5 + parent: 2 + - uid: 1181 + components: + - type: Transform + pos: -22.5,14.5 + parent: 2 + - uid: 1182 + components: + - type: Transform + pos: -21.5,14.5 + parent: 2 + - uid: 1183 + components: + - type: Transform + pos: -20.5,14.5 + parent: 2 + - uid: 1184 + components: + - type: Transform + pos: -19.5,14.5 + parent: 2 + - uid: 1185 + components: + - type: Transform + pos: -19.5,13.5 + parent: 2 + - uid: 1186 + components: + - type: Transform + pos: -19.5,12.5 + parent: 2 + - uid: 1187 + components: + - type: Transform + pos: -18.5,12.5 + parent: 2 + - uid: 1188 + components: + - type: Transform + pos: -17.5,12.5 + parent: 2 + - uid: 1189 + components: + - type: Transform + pos: -4.5,13.5 + parent: 2 + - uid: 1190 + components: + - type: Transform + pos: -18.5,11.5 + parent: 2 + - uid: 1191 + components: + - type: Transform + pos: -18.5,10.5 + parent: 2 + - uid: 1192 + components: + - type: Transform + pos: -18.5,9.5 + parent: 2 + - uid: 1193 + components: + - type: Transform + pos: -18.5,8.5 + parent: 2 + - uid: 1194 + components: + - type: Transform + pos: -18.5,7.5 + parent: 2 + - uid: 1195 + components: + - type: Transform + pos: -18.5,6.5 + parent: 2 + - uid: 1196 + components: + - type: Transform + pos: -17.5,6.5 + parent: 2 + - uid: 1197 + components: + - type: Transform + pos: -17.5,5.5 + parent: 2 + - uid: 1198 + components: + - type: Transform + pos: -17.5,4.5 + parent: 2 + - uid: 1199 + components: + - type: Transform + pos: -15.5,12.5 + parent: 2 + - uid: 1200 + components: + - type: Transform + pos: -15.5,13.5 + parent: 2 + - uid: 1201 + components: + - type: Transform + pos: -15.5,14.5 + parent: 2 + - uid: 1202 + components: + - type: Transform + pos: -15.5,15.5 + parent: 2 + - uid: 1203 + components: + - type: Transform + pos: -15.5,16.5 + parent: 2 + - uid: 1204 + components: + - type: Transform + pos: -14.5,16.5 + parent: 2 + - uid: 1205 + components: + - type: Transform + pos: -13.5,16.5 + parent: 2 + - uid: 1206 + components: + - type: Transform + pos: -12.5,16.5 + parent: 2 + - uid: 1207 + components: + - type: Transform + pos: -11.5,16.5 + parent: 2 + - uid: 1208 + components: + - type: Transform + pos: -10.5,16.5 + parent: 2 + - uid: 1209 + components: + - type: Transform + pos: -9.5,16.5 + parent: 2 + - uid: 1210 + components: + - type: Transform + pos: -9.5,17.5 + parent: 2 + - uid: 1211 + components: + - type: Transform + pos: -8.5,17.5 + parent: 2 + - uid: 1212 + components: + - type: Transform + pos: -7.5,17.5 + parent: 2 + - uid: 1213 + components: + - type: Transform + pos: -6.5,17.5 + parent: 2 + - uid: 1214 + components: + - type: Transform + pos: -4.5,17.5 + parent: 2 + - uid: 1215 + components: + - type: Transform + pos: -5.5,17.5 + parent: 2 + - uid: 1216 + components: + - type: Transform + pos: -3.5,17.5 + parent: 2 + - uid: 1217 + components: + - type: Transform + pos: -19.5,15.5 + parent: 2 + - uid: 1218 + components: + - type: Transform + pos: -18.5,15.5 + parent: 2 + - uid: 1219 + components: + - type: Transform + pos: -22.5,6.5 + parent: 2 + - uid: 1220 + components: + - type: Transform + pos: -22.5,5.5 + parent: 2 + - uid: 1221 + components: + - type: Transform + pos: -22.5,4.5 + parent: 2 + - uid: 1222 + components: + - type: Transform + pos: -11.5,8.5 + parent: 2 + - uid: 1223 + components: + - type: Transform + pos: -11.5,7.5 + parent: 2 + - uid: 1224 + components: + - type: Transform + pos: -11.5,6.5 + parent: 2 + - uid: 1225 + components: + - type: Transform + pos: -10.5,6.5 + parent: 2 + - uid: 1226 + components: + - type: Transform + pos: -9.5,6.5 + parent: 2 + - uid: 1227 + components: + - type: Transform + pos: -10.5,5.5 + parent: 2 + - uid: 1228 + components: + - type: Transform + pos: -10.5,4.5 + parent: 2 + - uid: 1229 + components: + - type: Transform + pos: -12.5,6.5 + parent: 2 + - uid: 1230 + components: + - type: Transform + pos: -13.5,6.5 + parent: 2 + - uid: 1231 + components: + - type: Transform + pos: -14.5,6.5 + parent: 2 + - uid: 1232 + components: + - type: Transform + pos: -15.5,6.5 + parent: 2 + - uid: 1233 + components: + - type: Transform + pos: -14.5,5.5 + parent: 2 + - uid: 1234 + components: + - type: Transform + pos: -14.5,4.5 + parent: 2 + - uid: 1235 + components: + - type: Transform + pos: -14.5,3.5 + parent: 2 + - uid: 1236 + components: + - type: Transform + pos: -14.5,2.5 + parent: 2 + - uid: 1237 + components: + - type: Transform + pos: -14.5,7.5 + parent: 2 + - uid: 1238 + components: + - type: Transform + pos: -14.5,8.5 + parent: 2 + - uid: 1239 + components: + - type: Transform + pos: -14.5,9.5 + parent: 2 + - uid: 1240 + components: + - type: Transform + pos: -13.5,9.5 + parent: 2 + - uid: 1241 + components: + - type: Transform + pos: -15.5,9.5 + parent: 2 + - uid: 1242 + components: + - type: Transform + pos: -11.5,9.5 + parent: 2 + - uid: 1243 + components: + - type: Transform + pos: -11.5,10.5 + parent: 2 + - uid: 1244 + components: + - type: Transform + pos: -11.5,11.5 + parent: 2 + - uid: 1245 + components: + - type: Transform + pos: -11.5,12.5 + parent: 2 + - uid: 1246 + components: + - type: Transform + pos: -11.5,13.5 + parent: 2 + - uid: 1247 + components: + - type: Transform + pos: -11.5,14.5 + parent: 2 + - uid: 1248 + components: + - type: Transform + pos: -12.5,14.5 + parent: 2 + - uid: 1249 + components: + - type: Transform + pos: -13.5,14.5 + parent: 2 + - uid: 1250 + components: + - type: Transform + pos: -12.5,11.5 + parent: 2 + - uid: 1251 + components: + - type: Transform + pos: -13.5,11.5 + parent: 2 + - uid: 1252 + components: + - type: Transform + pos: -10.5,14.5 + parent: 2 + - uid: 1253 + components: + - type: Transform + pos: -9.5,14.5 + parent: 2 + - uid: 1254 + components: + - type: Transform + pos: -8.5,14.5 + parent: 2 + - uid: 1255 + components: + - type: Transform + pos: -10.5,11.5 + parent: 2 + - uid: 1256 + components: + - type: Transform + pos: -9.5,11.5 + parent: 2 + - uid: 1257 + components: + - type: Transform + pos: -8.5,11.5 + parent: 2 + - uid: 1258 + components: + - type: Transform + pos: -5.5,16.5 + parent: 2 + - uid: 1259 + components: + - type: Transform + pos: -5.5,15.5 + parent: 2 + - uid: 1260 + components: + - type: Transform + pos: -5.5,14.5 + parent: 2 + - uid: 1261 + components: + - type: Transform + pos: -5.5,13.5 + parent: 2 + - uid: 1262 + components: + - type: Transform + pos: -4.5,14.5 + parent: 2 + - uid: 1263 + components: + - type: Transform + pos: -6.5,14.5 + parent: 2 + - uid: 1264 + components: + - type: Transform + pos: -3.5,14.5 + parent: 2 + - uid: 1265 + components: + - type: Transform + pos: -0.5,18.5 + parent: 2 + - uid: 1266 + components: + - type: Transform + pos: -0.5,17.5 + parent: 2 + - uid: 1267 + components: + - type: Transform + pos: -0.5,16.5 + parent: 2 + - uid: 1268 + components: + - type: Transform + pos: -0.5,15.5 + parent: 2 + - uid: 1269 + components: + - type: Transform + pos: -0.5,14.5 + parent: 2 + - uid: 1270 + components: + - type: Transform + pos: 0.5,17.5 + parent: 2 + - uid: 1271 + components: + - type: Transform + pos: 1.5,17.5 + parent: 2 + - uid: 1272 + components: + - type: Transform + pos: 1.5,14.5 + parent: 2 + - uid: 1273 + components: + - type: Transform + pos: 0.5,14.5 + parent: 2 + - uid: 1274 + components: + - type: Transform + pos: -1.5,14.5 + parent: 2 + - uid: 1275 + components: + - type: Transform + pos: -1.5,17.5 + parent: 2 + - uid: 1276 + components: + - type: Transform + pos: 1.5,16.5 + parent: 2 + - uid: 1277 + components: + - type: Transform + pos: 1.5,15.5 + parent: 2 + - uid: 1278 + components: + - type: Transform + pos: 13.5,13.5 + parent: 2 + - uid: 1279 + components: + - type: Transform + pos: 12.5,13.5 + parent: 2 + - uid: 1280 + components: + - type: Transform + pos: 11.5,13.5 + parent: 2 + - uid: 1281 + components: + - type: Transform + pos: 11.5,14.5 + parent: 2 + - uid: 1282 + components: + - type: Transform + pos: 11.5,15.5 + parent: 2 + - uid: 1283 + components: + - type: Transform + pos: 11.5,16.5 + parent: 2 + - uid: 1284 + components: + - type: Transform + pos: 11.5,17.5 + parent: 2 + - uid: 1285 + components: + - type: Transform + pos: 11.5,18.5 + parent: 2 + - uid: 1286 + components: + - type: Transform + pos: 11.5,12.5 + parent: 2 + - uid: 1287 + components: + - type: Transform + pos: 11.5,11.5 + parent: 2 + - uid: 1288 + components: + - type: Transform + pos: 11.5,10.5 + parent: 2 + - uid: 1289 + components: + - type: Transform + pos: 10.5,10.5 + parent: 2 + - uid: 1290 + components: + - type: Transform + pos: 9.5,10.5 + parent: 2 + - uid: 1291 + components: + - type: Transform + pos: 8.5,10.5 + parent: 2 + - uid: 1292 + components: + - type: Transform + pos: 7.5,10.5 + parent: 2 + - uid: 1293 + components: + - type: Transform + pos: 7.5,9.5 + parent: 2 + - uid: 1294 + components: + - type: Transform + pos: 10.5,15.5 + parent: 2 + - uid: 1295 + components: + - type: Transform + pos: 9.5,15.5 + parent: 2 + - uid: 1296 + components: + - type: Transform + pos: 8.5,15.5 + parent: 2 + - uid: 1297 + components: + - type: Transform + pos: 7.5,15.5 + parent: 2 + - uid: 1298 + components: + - type: Transform + pos: 10.5,17.5 + parent: 2 + - uid: 1299 + components: + - type: Transform + pos: 9.5,17.5 + parent: 2 + - uid: 1300 + components: + - type: Transform + pos: 8.5,17.5 + parent: 2 + - uid: 1301 + components: + - type: Transform + pos: 7.5,17.5 + parent: 2 + - uid: 1302 + components: + - type: Transform + pos: 10.5,13.5 + parent: 2 + - uid: 1303 + components: + - type: Transform + pos: 9.5,13.5 + parent: 2 + - uid: 1304 + components: + - type: Transform + pos: 8.5,13.5 + parent: 2 + - uid: 1305 + components: + - type: Transform + pos: 7.5,13.5 + parent: 2 + - uid: 1306 + components: + - type: Transform + pos: 7.5,11.5 + parent: 2 + - uid: 1307 + components: + - type: Transform + pos: 7.5,12.5 + parent: 2 + - uid: 1308 + components: + - type: Transform + pos: 6.5,11.5 + parent: 2 + - uid: 1309 + components: + - type: Transform + pos: 5.5,11.5 + parent: 2 + - uid: 1310 + components: + - type: Transform + pos: 4.5,11.5 + parent: 2 + - uid: 1311 + components: + - type: Transform + pos: 4.5,12.5 + parent: 2 + - uid: 1312 + components: + - type: Transform + pos: 4.5,13.5 + parent: 2 + - uid: 1313 + components: + - type: Transform + pos: 4.5,14.5 + parent: 2 + - uid: 1314 + components: + - type: Transform + pos: 4.5,15.5 + parent: 2 + - uid: 1315 + components: + - type: Transform + pos: 4.5,16.5 + parent: 2 + - uid: 1316 + components: + - type: Transform + pos: 4.5,17.5 + parent: 2 + - uid: 1317 + components: + - type: Transform + pos: 4.5,10.5 + parent: 2 + - uid: 1318 + components: + - type: Transform + pos: 4.5,9.5 + parent: 2 + - uid: 1319 + components: + - type: Transform + pos: 4.5,8.5 + parent: 2 + - uid: 1320 + components: + - type: Transform + pos: 4.5,7.5 + parent: 2 + - uid: 1321 + components: + - type: Transform + pos: 4.5,6.5 + parent: 2 + - uid: 1322 + components: + - type: Transform + pos: 4.5,5.5 + parent: 2 + - uid: 1323 + components: + - type: Transform + pos: 4.5,4.5 + parent: 2 + - uid: 1324 + components: + - type: Transform + pos: 4.5,3.5 + parent: 2 + - uid: 1325 + components: + - type: Transform + pos: 3.5,3.5 + parent: 2 + - uid: 1326 + components: + - type: Transform + pos: 2.5,3.5 + parent: 2 + - uid: 1327 + components: + - type: Transform + pos: 1.5,3.5 + parent: 2 + - uid: 1328 + components: + - type: Transform + pos: 0.5,3.5 + parent: 2 + - uid: 1329 + components: + - type: Transform + pos: -0.5,3.5 + parent: 2 + - uid: 1330 + components: + - type: Transform + pos: -1.5,3.5 + parent: 2 + - uid: 1331 + components: + - type: Transform + pos: -2.5,3.5 + parent: 2 + - uid: 1332 + components: + - type: Transform + pos: -3.5,3.5 + parent: 2 + - uid: 1333 + components: + - type: Transform + pos: 3.5,6.5 + parent: 2 + - uid: 1334 + components: + - type: Transform + pos: 2.5,6.5 + parent: 2 + - uid: 1335 + components: + - type: Transform + pos: 1.5,6.5 + parent: 2 + - uid: 1336 + components: + - type: Transform + pos: 0.5,6.5 + parent: 2 + - uid: 1337 + components: + - type: Transform + pos: -0.5,6.5 + parent: 2 + - uid: 1338 + components: + - type: Transform + pos: -1.5,6.5 + parent: 2 + - uid: 1339 + components: + - type: Transform + pos: -2.5,6.5 + parent: 2 + - uid: 1340 + components: + - type: Transform + pos: 3.5,9.5 + parent: 2 + - uid: 1341 + components: + - type: Transform + pos: 2.5,9.5 + parent: 2 + - uid: 1342 + components: + - type: Transform + pos: 1.5,9.5 + parent: 2 + - uid: 1343 + components: + - type: Transform + pos: 0.5,9.5 + parent: 2 + - uid: 1344 + components: + - type: Transform + pos: -0.5,9.5 + parent: 2 + - uid: 1345 + components: + - type: Transform + pos: -1.5,9.5 + parent: 2 + - uid: 1346 + components: + - type: Transform + pos: -2.5,9.5 + parent: 2 + - uid: 1347 + components: + - type: Transform + pos: 3.5,12.5 + parent: 2 + - uid: 1348 + components: + - type: Transform + pos: 2.5,12.5 + parent: 2 + - uid: 1349 + components: + - type: Transform + pos: 1.5,12.5 + parent: 2 + - uid: 1350 + components: + - type: Transform + pos: 0.5,12.5 + parent: 2 + - uid: 1351 + components: + - type: Transform + pos: -0.5,12.5 + parent: 2 + - uid: 1352 + components: + - type: Transform + pos: -1.5,12.5 + parent: 2 + - uid: 1353 + components: + - type: Transform + pos: -1.5,11.5 + parent: 2 + - uid: 1354 + components: + - type: Transform + pos: -2.5,11.5 + parent: 2 + - uid: 1355 + components: + - type: Transform + pos: -3.5,11.5 + parent: 2 + - uid: 1356 + components: + - type: Transform + pos: -4.5,11.5 + parent: 2 + - uid: 1357 + components: + - type: Transform + pos: -5.5,11.5 + parent: 2 + - uid: 1358 + components: + - type: Transform + pos: -6.5,11.5 + parent: 2 + - uid: 1359 + components: + - type: Transform + pos: -2.5,10.5 + parent: 2 + - uid: 1360 + components: + - type: Transform + pos: -2.5,8.5 + parent: 2 + - uid: 1361 + components: + - type: Transform + pos: -2.5,7.5 + parent: 2 + - uid: 1362 + components: + - type: Transform + pos: -2.5,5.5 + parent: 2 + - uid: 1363 + components: + - type: Transform + pos: -2.5,4.5 + parent: 2 + - uid: 1364 + components: + - type: Transform + pos: -3.5,6.5 + parent: 2 + - uid: 1365 + components: + - type: Transform + pos: -4.5,6.5 + parent: 2 + - uid: 1366 + components: + - type: Transform + pos: -5.5,6.5 + parent: 2 + - uid: 1367 + components: + - type: Transform + pos: -6.5,6.5 + parent: 2 + - uid: 1368 + components: + - type: Transform + pos: -6.5,7.5 + parent: 2 + - uid: 1369 + components: + - type: Transform + pos: -6.5,8.5 + parent: 2 + - uid: 1370 + components: + - type: Transform + pos: -6.5,5.5 + parent: 2 + - uid: 1371 + components: + - type: Transform + pos: -6.5,3.5 + parent: 2 + - uid: 1372 + components: + - type: Transform + pos: -6.5,4.5 + parent: 2 + - uid: 1373 + components: + - type: Transform + pos: -0.5,2.5 + parent: 2 + - uid: 1374 + components: + - type: Transform + pos: -0.5,1.5 + parent: 2 + - uid: 1375 + components: + - type: Transform + pos: -0.5,0.5 + parent: 2 + - uid: 1376 + components: + - type: Transform + pos: 1.5,2.5 + parent: 2 + - uid: 1377 + components: + - type: Transform + pos: 1.5,1.5 + parent: 2 + - uid: 1378 + components: + - type: Transform + pos: 1.5,0.5 + parent: 2 + - uid: 1379 + components: + - type: Transform + pos: -34.5,25.5 + parent: 2 + - uid: 1380 + components: + - type: Transform + pos: -35.5,26.5 + parent: 2 + - uid: 1381 + components: + - type: Transform + pos: -36.5,26.5 + parent: 2 + - uid: 1382 + components: + - type: Transform + pos: -37.5,26.5 + parent: 2 + - uid: 1383 + components: + - type: Transform + pos: 7.5,6.5 + parent: 2 + - uid: 1384 + components: + - type: Transform + pos: 7.5,5.5 + parent: 2 + - uid: 1385 + components: + - type: Transform + pos: 7.5,4.5 + parent: 2 + - uid: 1386 + components: + - type: Transform + pos: 7.5,3.5 + parent: 2 + - uid: 1387 + components: + - type: Transform + pos: 7.5,2.5 + parent: 2 + - uid: 1388 + components: + - type: Transform + pos: 8.5,4.5 + parent: 2 + - uid: 1389 + components: + - type: Transform + pos: 9.5,4.5 + parent: 2 + - uid: 1390 + components: + - type: Transform + pos: 9.5,3.5 + parent: 2 + - uid: 1391 + components: + - type: Transform + pos: 9.5,2.5 + parent: 2 + - uid: 1392 + components: + - type: Transform + pos: 9.5,1.5 + parent: 2 + - uid: 1393 + components: + - type: Transform + pos: 7.5,7.5 + parent: 2 + - uid: 1394 + components: + - type: Transform + pos: 8.5,7.5 + parent: 2 + - uid: 1395 + components: + - type: Transform + pos: 9.5,7.5 + parent: 2 + - uid: 1396 + components: + - type: Transform + pos: 10.5,7.5 + parent: 2 + - uid: 1397 + components: + - type: Transform + pos: 11.5,7.5 + parent: 2 + - uid: 1398 + components: + - type: Transform + pos: 12.5,7.5 + parent: 2 + - uid: 1399 + components: + - type: Transform + pos: 13.5,7.5 + parent: 2 + - uid: 1400 + components: + - type: Transform + pos: 12.5,6.5 + parent: 2 + - uid: 1401 + components: + - type: Transform + pos: 12.5,5.5 + parent: 2 + - uid: 1402 + components: + - type: Transform + pos: 12.5,4.5 + parent: 2 + - uid: 1403 + components: + - type: Transform + pos: 12.5,3.5 + parent: 2 + - uid: 1404 + components: + - type: Transform + pos: 12.5,2.5 + parent: 2 + - uid: 1405 + components: + - type: Transform + pos: 12.5,1.5 + parent: 2 + - uid: 1406 + components: + - type: Transform + pos: 12.5,0.5 + parent: 2 + - uid: 1407 + components: + - type: Transform + pos: 14.5,7.5 + parent: 2 + - uid: 1408 + components: + - type: Transform + pos: 15.5,7.5 + parent: 2 + - uid: 1409 + components: + - type: Transform + pos: 15.5,8.5 + parent: 2 + - uid: 1410 + components: + - type: Transform + pos: 15.5,9.5 + parent: 2 + - uid: 1411 + components: + - type: Transform + pos: 15.5,10.5 + parent: 2 + - uid: 1412 + components: + - type: Transform + pos: 15.5,11.5 + parent: 2 + - uid: 1413 + components: + - type: Transform + pos: 15.5,12.5 + parent: 2 + - uid: 1414 + components: + - type: Transform + pos: 15.5,13.5 + parent: 2 + - uid: 1415 + components: + - type: Transform + pos: 15.5,14.5 + parent: 2 + - uid: 1416 + components: + - type: Transform + pos: 15.5,15.5 + parent: 2 + - uid: 1417 + components: + - type: Transform + pos: 16.5,12.5 + parent: 2 + - uid: 1418 + components: + - type: Transform + pos: 16.5,11.5 + parent: 2 + - uid: 1419 + components: + - type: Transform + pos: 16.5,10.5 + parent: 2 + - uid: 1420 + components: + - type: Transform + pos: 17.5,10.5 + parent: 2 + - uid: 1421 + components: + - type: Transform + pos: 18.5,10.5 + parent: 2 + - uid: 1422 + components: + - type: Transform + pos: 18.5,10.5 + parent: 2 + - uid: 1423 + components: + - type: Transform + pos: 18.5,9.5 + parent: 2 + - uid: 1424 + components: + - type: Transform + pos: 18.5,8.5 + parent: 2 + - uid: 1425 + components: + - type: Transform + pos: 18.5,7.5 + parent: 2 + - uid: 1426 + components: + - type: Transform + pos: 18.5,6.5 + parent: 2 + - uid: 1427 + components: + - type: Transform + pos: 19.5,6.5 + parent: 2 + - uid: 1428 + components: + - type: Transform + pos: 15.5,6.5 + parent: 2 + - uid: 1429 + components: + - type: Transform + pos: 16.5,6.5 + parent: 2 + - uid: 1430 + components: + - type: Transform + pos: 17.5,6.5 + parent: 2 + - uid: 1431 + components: + - type: Transform + pos: 15.5,1.5 + parent: 2 + - uid: 1432 + components: + - type: Transform + pos: 19.5,5.5 + parent: 2 + - uid: 1433 + components: + - type: Transform + pos: 19.5,4.5 + parent: 2 + - uid: 1434 + components: + - type: Transform + pos: 20.5,6.5 + parent: 2 + - uid: 1435 + components: + - type: Transform + pos: 21.5,6.5 + parent: 2 + - uid: 1436 + components: + - type: Transform + pos: 22.5,6.5 + parent: 2 + - uid: 1437 + components: + - type: Transform + pos: 23.5,6.5 + parent: 2 + - uid: 1438 + components: + - type: Transform + pos: 24.5,6.5 + parent: 2 + - uid: 1439 + components: + - type: Transform + pos: 25.5,6.5 + parent: 2 + - uid: 1440 + components: + - type: Transform + pos: 25.5,7.5 + parent: 2 + - uid: 1441 + components: + - type: Transform + pos: 26.5,7.5 + parent: 2 + - uid: 1442 + components: + - type: Transform + pos: 27.5,7.5 + parent: 2 + - uid: 1443 + components: + - type: Transform + pos: 27.5,6.5 + parent: 2 + - uid: 1444 + components: + - type: Transform + pos: 28.5,7.5 + parent: 2 + - uid: 1445 + components: + - type: Transform + pos: 29.5,7.5 + parent: 2 + - uid: 1446 + components: + - type: Transform + pos: 30.5,7.5 + parent: 2 + - uid: 1447 + components: + - type: Transform + pos: 31.5,7.5 + parent: 2 + - uid: 1448 + components: + - type: Transform + pos: 32.5,7.5 + parent: 2 + - uid: 1449 + components: + - type: Transform + pos: 31.5,6.5 + parent: 2 + - uid: 1450 + components: + - type: Transform + pos: -35.5,8.5 + parent: 2 + - uid: 1451 + components: + - type: Transform + pos: -36.5,8.5 + parent: 2 + - uid: 1452 + components: + - type: Transform + pos: -37.5,8.5 + parent: 2 + - uid: 1453 + components: + - type: Transform + pos: -38.5,8.5 + parent: 2 + - uid: 1454 + components: + - type: Transform + pos: -39.5,8.5 + parent: 2 + - uid: 1455 + components: + - type: Transform + pos: -35.5,12.5 + parent: 2 + - uid: 1456 + components: + - type: Transform + pos: -36.5,12.5 + parent: 2 + - uid: 1457 + components: + - type: Transform + pos: -37.5,12.5 + parent: 2 + - uid: 1458 + components: + - type: Transform + pos: -38.5,12.5 + parent: 2 + - uid: 1459 + components: + - type: Transform + pos: -39.5,12.5 + parent: 2 + - uid: 1460 + components: + - type: Transform + pos: -35.5,16.5 + parent: 2 + - uid: 1461 + components: + - type: Transform + pos: -36.5,16.5 + parent: 2 + - uid: 1462 + components: + - type: Transform + pos: -37.5,16.5 + parent: 2 + - uid: 1463 + components: + - type: Transform + pos: -38.5,16.5 + parent: 2 + - uid: 1464 + components: + - type: Transform + pos: -39.5,16.5 + parent: 2 + - uid: 1465 + components: + - type: Transform + pos: -35.5,20.5 + parent: 2 + - uid: 1466 + components: + - type: Transform + pos: -36.5,20.5 + parent: 2 + - uid: 1467 + components: + - type: Transform + pos: -37.5,20.5 + parent: 2 + - uid: 1468 + components: + - type: Transform + pos: -38.5,20.5 + parent: 2 + - uid: 1469 + components: + - type: Transform + pos: -39.5,20.5 + parent: 2 + - uid: 1470 + components: + - type: Transform + pos: -32.5,5.5 + parent: 2 + - uid: 1471 + components: + - type: Transform + pos: -32.5,4.5 + parent: 2 + - uid: 1472 + components: + - type: Transform + pos: -32.5,3.5 + parent: 2 + - uid: 1473 + components: + - type: Transform + pos: -32.5,2.5 + parent: 2 + - uid: 1474 + components: + - type: Transform + pos: -28.5,4.5 + parent: 2 + - uid: 1475 + components: + - type: Transform + pos: -28.5,3.5 + parent: 2 + - uid: 1476 + components: + - type: Transform + pos: -28.5,2.5 + parent: 2 + - uid: 1477 + components: + - type: Transform + pos: -17.5,71.5 + parent: 2 + - uid: 1478 + components: + - type: Transform + pos: -17.5,70.5 + parent: 2 + - uid: 1479 + components: + - type: Transform + pos: -17.5,69.5 + parent: 2 + - uid: 1480 + components: + - type: Transform + pos: -17.5,68.5 + parent: 2 + - uid: 1481 + components: + - type: Transform + pos: -17.5,67.5 + parent: 2 + - uid: 1482 + components: + - type: Transform + pos: -17.5,66.5 + parent: 2 + - uid: 1483 + components: + - type: Transform + pos: -17.5,65.5 + parent: 2 + - uid: 1484 + components: + - type: Transform + pos: -17.5,64.5 + parent: 2 + - uid: 1485 + components: + - type: Transform + pos: -17.5,63.5 + parent: 2 + - uid: 1486 + components: + - type: Transform + pos: -17.5,62.5 + parent: 2 + - uid: 1487 + components: + - type: Transform + pos: -17.5,61.5 + parent: 2 + - uid: 1488 + components: + - type: Transform + pos: -17.5,60.5 + parent: 2 + - uid: 1489 + components: + - type: Transform + pos: -16.5,69.5 + parent: 2 + - uid: 1490 + components: + - type: Transform + pos: -15.5,69.5 + parent: 2 + - uid: 1491 + components: + - type: Transform + pos: -18.5,69.5 + parent: 2 + - uid: 1492 + components: + - type: Transform + pos: -18.5,67.5 + parent: 2 + - uid: 1493 + components: + - type: Transform + pos: -16.5,67.5 + parent: 2 + - uid: 1494 + components: + - type: Transform + pos: -15.5,67.5 + parent: 2 + - uid: 1495 + components: + - type: Transform + pos: -14.5,67.5 + parent: 2 + - uid: 1496 + components: + - type: Transform + pos: -14.5,66.5 + parent: 2 + - uid: 1497 + components: + - type: Transform + pos: -14.5,65.5 + parent: 2 + - uid: 1498 + components: + - type: Transform + pos: -14.5,64.5 + parent: 2 + - uid: 1499 + components: + - type: Transform + pos: -18.5,63.5 + parent: 2 + - uid: 1500 + components: + - type: Transform + pos: -19.5,63.5 + parent: 2 + - uid: 1501 + components: + - type: Transform + pos: -16.5,63.5 + parent: 2 + - uid: 1502 + components: + - type: Transform + pos: -18.5,61.5 + parent: 2 + - uid: 1503 + components: + - type: Transform + pos: -19.5,61.5 + parent: 2 + - uid: 1504 + components: + - type: Transform + pos: -16.5,61.5 + parent: 2 + - uid: 1505 + components: + - type: Transform + pos: -15.5,61.5 + parent: 2 + - uid: 1506 + components: + - type: Transform + pos: -14.5,61.5 + parent: 2 + - uid: 1507 + components: + - type: Transform + pos: -25.5,72.5 + parent: 2 + - uid: 1508 + components: + - type: Transform + pos: -25.5,71.5 + parent: 2 + - uid: 1509 + components: + - type: Transform + pos: -25.5,70.5 + parent: 2 + - uid: 1510 + components: + - type: Transform + pos: -25.5,69.5 + parent: 2 + - uid: 1511 + components: + - type: Transform + pos: -25.5,68.5 + parent: 2 + - uid: 1512 + components: + - type: Transform + pos: -25.5,67.5 + parent: 2 + - uid: 1513 + components: + - type: Transform + pos: -25.5,66.5 + parent: 2 + - uid: 1514 + components: + - type: Transform + pos: -24.5,66.5 + parent: 2 + - uid: 1515 + components: + - type: Transform + pos: -23.5,66.5 + parent: 2 + - uid: 1516 + components: + - type: Transform + pos: -22.5,66.5 + parent: 2 + - uid: 1517 + components: + - type: Transform + pos: -21.5,66.5 + parent: 2 + - uid: 1518 + components: + - type: Transform + pos: -24.5,69.5 + parent: 2 + - uid: 1519 + components: + - type: Transform + pos: -23.5,69.5 + parent: 2 + - uid: 1520 + components: + - type: Transform + pos: -22.5,69.5 + parent: 2 + - uid: 1521 + components: + - type: Transform + pos: -21.5,69.5 + parent: 2 + - uid: 1522 + components: + - type: Transform + pos: -24.5,71.5 + parent: 2 + - uid: 1523 + components: + - type: Transform + pos: -22.5,71.5 + parent: 2 + - uid: 1524 + components: + - type: Transform + pos: -23.5,65.5 + parent: 2 + - uid: 1525 + components: + - type: Transform + pos: -23.5,71.5 + parent: 2 + - uid: 1526 + components: + - type: Transform + pos: -23.5,64.5 + parent: 2 + - uid: 1527 + components: + - type: Transform + pos: -23.5,63.5 + parent: 2 + - uid: 1528 + components: + - type: Transform + pos: -23.5,62.5 + parent: 2 + - uid: 1529 + components: + - type: Transform + pos: -23.5,61.5 + parent: 2 + - uid: 1530 + components: + - type: Transform + pos: -23.5,60.5 + parent: 2 + - uid: 1531 + components: + - type: Transform + pos: -22.5,60.5 + parent: 2 + - uid: 1532 + components: + - type: Transform + pos: -21.5,60.5 + parent: 2 + - uid: 1533 + components: + - type: Transform + pos: -24.5,60.5 + parent: 2 + - uid: 1534 + components: + - type: Transform + pos: -25.5,60.5 + parent: 2 + - uid: 1535 + components: + - type: Transform + pos: -24.5,63.5 + parent: 2 + - uid: 1536 + components: + - type: Transform + pos: -25.5,63.5 + parent: 2 + - uid: 1537 + components: + - type: Transform + pos: -22.5,63.5 + parent: 2 + - uid: 1538 + components: + - type: Transform + pos: -17.5,56.5 + parent: 2 + - uid: 1539 + components: + - type: Transform + pos: -17.5,55.5 + parent: 2 + - uid: 1540 + components: + - type: Transform + pos: -17.5,54.5 + parent: 2 + - uid: 1541 + components: + - type: Transform + pos: -17.5,53.5 + parent: 2 + - uid: 1542 + components: + - type: Transform + pos: -17.5,52.5 + parent: 2 + - uid: 1543 + components: + - type: Transform + pos: -17.5,51.5 + parent: 2 + - uid: 1544 + components: + - type: Transform + pos: -18.5,52.5 + parent: 2 + - uid: 1545 + components: + - type: Transform + pos: -19.5,52.5 + parent: 2 + - uid: 1546 + components: + - type: Transform + pos: -18.5,55.5 + parent: 2 + - uid: 1547 + components: + - type: Transform + pos: -19.5,55.5 + parent: 2 + - uid: 1548 + components: + - type: Transform + pos: -20.5,55.5 + parent: 2 + - uid: 1549 + components: + - type: Transform + pos: -21.5,55.5 + parent: 2 + - uid: 1550 + components: + - type: Transform + pos: -22.5,55.5 + parent: 2 + - uid: 1551 + components: + - type: Transform + pos: -23.5,55.5 + parent: 2 + - uid: 1552 + components: + - type: Transform + pos: -24.5,55.5 + parent: 2 + - uid: 1553 + components: + - type: Transform + pos: -23.5,54.5 + parent: 2 + - uid: 1554 + components: + - type: Transform + pos: -23.5,53.5 + parent: 2 + - uid: 1555 + components: + - type: Transform + pos: -23.5,52.5 + parent: 2 + - uid: 1556 + components: + - type: Transform + pos: -23.5,51.5 + parent: 2 + - uid: 1557 + components: + - type: Transform + pos: -25.5,72.5 + parent: 2 + - uid: 1558 + components: + - type: Transform + pos: -25.5,72.5 + parent: 2 + - uid: 1559 + components: + - type: Transform + pos: -25.5,71.5 + parent: 2 + - uid: 1560 + components: + - type: Transform + pos: -25.5,70.5 + parent: 2 + - uid: 1561 + components: + - type: Transform + pos: -25.5,69.5 + parent: 2 + - uid: 1562 + components: + - type: Transform + pos: -25.5,68.5 + parent: 2 + - uid: 1563 + components: + - type: Transform + pos: -25.5,67.5 + parent: 2 + - uid: 1564 + components: + - type: Transform + pos: -25.5,66.5 + parent: 2 + - uid: 1565 + components: + - type: Transform + pos: -24.5,66.5 + parent: 2 + - uid: 1566 + components: + - type: Transform + pos: -23.5,66.5 + parent: 2 + - uid: 1567 + components: + - type: Transform + pos: -22.5,66.5 + parent: 2 + - uid: 1568 + components: + - type: Transform + pos: -21.5,66.5 + parent: 2 + - uid: 1569 + components: + - type: Transform + pos: -17.5,57.5 + parent: 2 + - uid: 1570 + components: + - type: Transform + pos: -17.5,58.5 + parent: 2 + - uid: 1571 + components: + - type: Transform + pos: -16.5,58.5 + parent: 2 + - uid: 1572 + components: + - type: Transform + pos: -15.5,58.5 + parent: 2 + - uid: 1573 + components: + - type: Transform + pos: -14.5,58.5 + parent: 2 + - uid: 1574 + components: + - type: Transform + pos: -13.5,58.5 + parent: 2 + - uid: 1575 + components: + - type: Transform + pos: -10.5,59.5 + parent: 2 + - uid: 1576 + components: + - type: Transform + pos: -11.5,58.5 + parent: 2 + - uid: 1577 + components: + - type: Transform + pos: -11.5,59.5 + parent: 2 + - uid: 1578 + components: + - type: Transform + pos: -11.5,60.5 + parent: 2 + - uid: 1579 + components: + - type: Transform + pos: -11.5,61.5 + parent: 2 + - uid: 1580 + components: + - type: Transform + pos: -11.5,62.5 + parent: 2 + - uid: 1581 + components: + - type: Transform + pos: -11.5,63.5 + parent: 2 + - uid: 1582 + components: + - type: Transform + pos: -11.5,64.5 + parent: 2 + - uid: 1583 + components: + - type: Transform + pos: -9.5,59.5 + parent: 2 + - uid: 1584 + components: + - type: Transform + pos: -8.5,59.5 + parent: 2 + - uid: 1585 + components: + - type: Transform + pos: -7.5,59.5 + parent: 2 + - uid: 1586 + components: + - type: Transform + pos: -10.5,62.5 + parent: 2 + - uid: 1587 + components: + - type: Transform + pos: -9.5,62.5 + parent: 2 + - uid: 1588 + components: + - type: Transform + pos: -10.5,64.5 + parent: 2 + - uid: 1589 + components: + - type: Transform + pos: -9.5,64.5 + parent: 2 + - uid: 1590 + components: + - type: Transform + pos: -11.5,65.5 + parent: 2 + - uid: 1591 + components: + - type: Transform + pos: -11.5,66.5 + parent: 2 + - uid: 1592 + components: + - type: Transform + pos: -11.5,67.5 + parent: 2 + - uid: 1593 + components: + - type: Transform + pos: -11.5,68.5 + parent: 2 + - uid: 1594 + components: + - type: Transform + pos: -12.5,68.5 + parent: 2 + - uid: 1596 + components: + - type: Transform + pos: -10.5,68.5 + parent: 2 + - uid: 1597 + components: + - type: Transform + pos: -9.5,68.5 + parent: 2 + - uid: 1598 + components: + - type: Transform + pos: -10.5,66.5 + parent: 2 + - uid: 1599 + components: + - type: Transform + pos: -9.5,66.5 + parent: 2 + - uid: 1600 + components: + - type: Transform + pos: -9.5,67.5 + parent: 2 + - uid: 1601 + components: + - type: Transform + pos: -3.5,69.5 + parent: 2 + - uid: 1602 + components: + - type: Transform + pos: -3.5,68.5 + parent: 2 + - uid: 1603 + components: + - type: Transform + pos: -3.5,67.5 + parent: 2 + - uid: 1604 + components: + - type: Transform + pos: -3.5,66.5 + parent: 2 + - uid: 1605 + components: + - type: Transform + pos: -3.5,65.5 + parent: 2 + - uid: 1606 + components: + - type: Transform + pos: -3.5,64.5 + parent: 2 + - uid: 1607 + components: + - type: Transform + pos: -3.5,63.5 + parent: 2 + - uid: 1608 + components: + - type: Transform + pos: -4.5,67.5 + parent: 2 + - uid: 1609 + components: + - type: Transform + pos: -5.5,67.5 + parent: 2 + - uid: 1610 + components: + - type: Transform + pos: -6.5,67.5 + parent: 2 + - uid: 1611 + components: + - type: Transform + pos: -6.5,68.5 + parent: 2 + - uid: 1612 + components: + - type: Transform + pos: -6.5,66.5 + parent: 2 + - uid: 1613 + components: + - type: Transform + pos: -7.5,67.5 + parent: 2 + - uid: 1614 + components: + - type: Transform + pos: -6.5,65.5 + parent: 2 + - uid: 1615 + components: + - type: Transform + pos: -6.5,64.5 + parent: 2 + - uid: 1616 + components: + - type: Transform + pos: -6.5,63.5 + parent: 2 + - uid: 1617 + components: + - type: Transform + pos: -5.5,63.5 + parent: 2 + - uid: 1618 + components: + - type: Transform + pos: -4.5,63.5 + parent: 2 + - uid: 1619 + components: + - type: Transform + pos: -2.5,63.5 + parent: 2 + - uid: 1620 + components: + - type: Transform + pos: -1.5,63.5 + parent: 2 + - uid: 1621 + components: + - type: Transform + pos: -0.5,63.5 + parent: 2 + - uid: 1622 + components: + - type: Transform + pos: 0.5,63.5 + parent: 2 + - uid: 1623 + components: + - type: Transform + pos: 1.5,63.5 + parent: 2 + - uid: 1624 + components: + - type: Transform + pos: 29.5,2.5 + parent: 2 + - uid: 1625 + components: + - type: Transform + pos: 29.5,1.5 + parent: 2 + - uid: 1626 + components: + - type: Transform + pos: 29.5,0.5 + parent: 2 + - uid: 1627 + components: + - type: Transform + pos: 29.5,-0.5 + parent: 2 + - uid: 1628 + components: + - type: Transform + pos: 30.5,0.5 + parent: 2 + - uid: 1629 + components: + - type: Transform + pos: 31.5,0.5 + parent: 2 + - uid: 1630 + components: + - type: Transform + pos: 28.5,-0.5 + parent: 2 + - uid: 1631 + components: + - type: Transform + pos: 27.5,-0.5 + parent: 2 + - uid: 1632 + components: + - type: Transform + pos: 28.5,1.5 + parent: 2 + - uid: 1633 + components: + - type: Transform + pos: 28.5,2.5 + parent: 2 + - uid: 1634 + components: + - type: Transform + pos: 28.5,3.5 + parent: 2 + - uid: 1635 + components: + - type: Transform + pos: 26.5,-0.5 + parent: 2 + - uid: 1636 + components: + - type: Transform + pos: 25.5,-0.5 + parent: 2 + - uid: 1637 + components: + - type: Transform + pos: 24.5,-0.5 + parent: 2 + - uid: 1638 + components: + - type: Transform + pos: 24.5,0.5 + parent: 2 + - uid: 1639 + components: + - type: Transform + pos: 24.5,1.5 + parent: 2 + - uid: 1640 + components: + - type: Transform + pos: 34.5,8.5 + parent: 2 + - uid: 1641 + components: + - type: Transform + pos: 35.5,8.5 + parent: 2 + - uid: 1642 + components: + - type: Transform + pos: 36.5,8.5 + parent: 2 + - uid: 1643 + components: + - type: Transform + pos: 37.5,8.5 + parent: 2 + - uid: 1644 + components: + - type: Transform + pos: 38.5,8.5 + parent: 2 + - uid: 1645 + components: + - type: Transform + pos: 39.5,8.5 + parent: 2 + - uid: 1646 + components: + - type: Transform + pos: 37.5,9.5 + parent: 2 + - uid: 1647 + components: + - type: Transform + pos: 37.5,10.5 + parent: 2 + - uid: 1648 + components: + - type: Transform + pos: 36.5,10.5 + parent: 2 + - uid: 1649 + components: + - type: Transform + pos: 35.5,10.5 + parent: 2 + - uid: 1650 + components: + - type: Transform + pos: 34.5,10.5 + parent: 2 + - uid: 1651 + components: + - type: Transform + pos: 33.5,10.5 + parent: 2 + - uid: 1652 + components: + - type: Transform + pos: 32.5,10.5 + parent: 2 + - uid: 1653 + components: + - type: Transform + pos: 31.5,10.5 + parent: 2 + - uid: 1654 + components: + - type: Transform + pos: 38.5,10.5 + parent: 2 + - uid: 1655 + components: + - type: Transform + pos: 39.5,10.5 + parent: 2 + - uid: 1656 + components: + - type: Transform + pos: 40.5,10.5 + parent: 2 + - uid: 1657 + components: + - type: Transform + pos: 39.5,11.5 + parent: 2 + - uid: 1658 + components: + - type: Transform + pos: 39.5,12.5 + parent: 2 + - uid: 1659 + components: + - type: Transform + pos: 39.5,13.5 + parent: 2 + - uid: 1660 + components: + - type: Transform + pos: 39.5,9.5 + parent: 2 + - uid: 1661 + components: + - type: Transform + pos: 39.5,7.5 + parent: 2 + - uid: 1662 + components: + - type: Transform + pos: 39.5,6.5 + parent: 2 + - uid: 1663 + components: + - type: Transform + pos: 40.5,7.5 + parent: 2 + - uid: 1664 + components: + - type: Transform + pos: 35.5,7.5 + parent: 2 + - uid: 1665 + components: + - type: Transform + pos: 35.5,6.5 + parent: 2 + - uid: 1666 + components: + - type: Transform + pos: 35.5,5.5 + parent: 2 + - uid: 1667 + components: + - type: Transform + pos: 35.5,4.5 + parent: 2 + - uid: 1668 + components: + - type: Transform + pos: 35.5,3.5 + parent: 2 + - uid: 1669 + components: + - type: Transform + pos: 34.5,4.5 + parent: 2 + - uid: 1670 + components: + - type: Transform + pos: 33.5,4.5 + parent: 2 + - uid: 1671 + components: + - type: Transform + pos: 32.5,4.5 + parent: 2 + - uid: 1672 + components: + - type: Transform + pos: 31.5,4.5 + parent: 2 + - uid: 1673 + components: + - type: Transform + pos: 35.5,2.5 + parent: 2 + - uid: 1674 + components: + - type: Transform + pos: 35.5,1.5 + parent: 2 + - uid: 1675 + components: + - type: Transform + pos: 35.5,0.5 + parent: 2 + - uid: 1676 + components: + - type: Transform + pos: 35.5,-0.5 + parent: 2 + - uid: 1677 + components: + - type: Transform + pos: 35.5,-1.5 + parent: 2 + - uid: 1678 + components: + - type: Transform + pos: 34.5,0.5 + parent: 2 + - uid: 1679 + components: + - type: Transform + pos: 36.5,-1.5 + parent: 2 + - uid: 1680 + components: + - type: Transform + pos: 32.5,15.5 + parent: 2 + - uid: 1681 + components: + - type: Transform + pos: 33.5,15.5 + parent: 2 + - uid: 1682 + components: + - type: Transform + pos: 34.5,15.5 + parent: 2 + - uid: 1683 + components: + - type: Transform + pos: 35.5,15.5 + parent: 2 + - uid: 1684 + components: + - type: Transform + pos: 36.5,15.5 + parent: 2 + - uid: 1685 + components: + - type: Transform + pos: 37.5,15.5 + parent: 2 + - uid: 1686 + components: + - type: Transform + pos: 34.5,14.5 + parent: 2 + - uid: 1687 + components: + - type: Transform + pos: 34.5,13.5 + parent: 2 + - uid: 1688 + components: + - type: Transform + pos: 34.5,16.5 + parent: 2 + - uid: 1689 + components: + - type: Transform + pos: 36.5,14.5 + parent: 2 + - uid: 1690 + components: + - type: Transform + pos: 32.5,14.5 + parent: 2 + - uid: 1691 + components: + - type: Transform + pos: 36.5,16.5 + parent: 2 + - uid: 1692 + components: + - type: Transform + pos: 44.5,11.5 + parent: 2 + - uid: 1693 + components: + - type: Transform + pos: 44.5,12.5 + parent: 2 + - uid: 1694 + components: + - type: Transform + pos: 44.5,13.5 + parent: 2 + - uid: 1695 + components: + - type: Transform + pos: 44.5,14.5 + parent: 2 + - uid: 1696 + components: + - type: Transform + pos: 43.5,13.5 + parent: 2 + - uid: 1697 + components: + - type: Transform + pos: 45.5,13.5 + parent: 2 + - uid: 1698 + components: + - type: Transform + pos: 46.5,13.5 + parent: 2 + - uid: 1699 + components: + - type: Transform + pos: 42.5,22.5 + parent: 2 + - uid: 1700 + components: + - type: Transform + pos: 42.5,21.5 + parent: 2 + - uid: 1701 + components: + - type: Transform + pos: 42.5,20.5 + parent: 2 + - uid: 1702 + components: + - type: Transform + pos: 42.5,19.5 + parent: 2 + - uid: 1703 + components: + - type: Transform + pos: 41.5,20.5 + parent: 2 + - uid: 1704 + components: + - type: Transform + pos: 43.5,20.5 + parent: 2 + - uid: 1705 + components: + - type: Transform + pos: 43.5,18.5 + parent: 2 + - uid: 1706 + components: + - type: Transform + pos: 43.5,17.5 + parent: 2 + - uid: 1707 + components: + - type: Transform + pos: 43.5,16.5 + parent: 2 + - uid: 1708 + components: + - type: Transform + pos: 42.5,16.5 + parent: 2 + - uid: 1709 + components: + - type: Transform + pos: 41.5,16.5 + parent: 2 + - uid: 1710 + components: + - type: Transform + pos: 40.5,16.5 + parent: 2 + - uid: 1711 + components: + - type: Transform + pos: 39.5,16.5 + parent: 2 + - uid: 1712 + components: + - type: Transform + pos: 44.5,16.5 + parent: 2 + - uid: 1713 + components: + - type: Transform + pos: 46.5,16.5 + parent: 2 + - uid: 1714 + components: + - type: Transform + pos: 45.5,16.5 + parent: 2 + - uid: 1715 + components: + - type: Transform + pos: 46.5,17.5 + parent: 2 + - uid: 1716 + components: + - type: Transform + pos: 47.5,17.5 + parent: 2 + - uid: 1717 + components: + - type: Transform + pos: 48.5,17.5 + parent: 2 + - uid: 1718 + components: + - type: Transform + pos: 49.5,17.5 + parent: 2 + - uid: 1719 + components: + - type: Transform + pos: 48.5,16.5 + parent: 2 + - uid: 1720 + components: + - type: Transform + pos: 48.5,15.5 + parent: 2 + - uid: 1721 + components: + - type: Transform + pos: 48.5,14.5 + parent: 2 + - uid: 1722 + components: + - type: Transform + pos: 48.5,13.5 + parent: 2 + - uid: 1723 + components: + - type: Transform + pos: 48.5,18.5 + parent: 2 + - uid: 1724 + components: + - type: Transform + pos: 54.5,5.5 + parent: 2 + - uid: 1725 + components: + - type: Transform + pos: 54.5,4.5 + parent: 2 + - uid: 1726 + components: + - type: Transform + pos: 53.5,4.5 + parent: 2 + - uid: 1727 + components: + - type: Transform + pos: 52.5,4.5 + parent: 2 + - uid: 1728 + components: + - type: Transform + pos: 51.5,4.5 + parent: 2 + - uid: 1729 + components: + - type: Transform + pos: 51.5,3.5 + parent: 2 + - uid: 1730 + components: + - type: Transform + pos: 51.5,2.5 + parent: 2 + - uid: 1731 + components: + - type: Transform + pos: 51.5,1.5 + parent: 2 + - uid: 1732 + components: + - type: Transform + pos: 51.5,0.5 + parent: 2 + - uid: 1733 + components: + - type: Transform + pos: 51.5,-0.5 + parent: 2 + - uid: 1734 + components: + - type: Transform + pos: 51.5,-1.5 + parent: 2 + - uid: 1735 + components: + - type: Transform + pos: 51.5,-2.5 + parent: 2 + - uid: 1736 + components: + - type: Transform + pos: 51.5,-3.5 + parent: 2 + - uid: 1737 + components: + - type: Transform + pos: 51.5,-4.5 + parent: 2 + - uid: 1738 + components: + - type: Transform + pos: 51.5,-5.5 + parent: 2 + - uid: 1739 + components: + - type: Transform + pos: 51.5,-6.5 + parent: 2 + - uid: 1740 + components: + - type: Transform + pos: 51.5,-7.5 + parent: 2 + - uid: 1741 + components: + - type: Transform + pos: 51.5,-8.5 + parent: 2 + - uid: 1742 + components: + - type: Transform + pos: 52.5,-7.5 + parent: 2 + - uid: 1743 + components: + - type: Transform + pos: 50.5,-7.5 + parent: 2 + - uid: 1744 + components: + - type: Transform + pos: 50.5,-3.5 + parent: 2 + - uid: 1745 + components: + - type: Transform + pos: 49.5,-3.5 + parent: 2 + - uid: 1746 + components: + - type: Transform + pos: 48.5,-3.5 + parent: 2 + - uid: 1747 + components: + - type: Transform + pos: 47.5,-3.5 + parent: 2 + - uid: 1748 + components: + - type: Transform + pos: 46.5,-3.5 + parent: 2 + - uid: 1749 + components: + - type: Transform + pos: 52.5,-3.5 + parent: 2 + - uid: 1750 + components: + - type: Transform + pos: 53.5,-3.5 + parent: 2 + - uid: 1751 + components: + - type: Transform + pos: 54.5,-3.5 + parent: 2 + - uid: 1752 + components: + - type: Transform + pos: 55.5,-3.5 + parent: 2 + - uid: 1753 + components: + - type: Transform + pos: 56.5,-3.5 + parent: 2 + - uid: 1754 + components: + - type: Transform + pos: 52.5,-0.5 + parent: 2 + - uid: 1755 + components: + - type: Transform + pos: 53.5,-0.5 + parent: 2 + - uid: 1756 + components: + - type: Transform + pos: 54.5,-0.5 + parent: 2 + - uid: 1757 + components: + - type: Transform + pos: 55.5,-0.5 + parent: 2 + - uid: 1758 + components: + - type: Transform + pos: 56.5,-0.5 + parent: 2 + - uid: 1759 + components: + - type: Transform + pos: 52.5,2.5 + parent: 2 + - uid: 1760 + components: + - type: Transform + pos: 53.5,2.5 + parent: 2 + - uid: 1761 + components: + - type: Transform + pos: 54.5,2.5 + parent: 2 + - uid: 1762 + components: + - type: Transform + pos: 55.5,2.5 + parent: 2 + - uid: 1763 + components: + - type: Transform + pos: 56.5,2.5 + parent: 2 + - uid: 1764 + components: + - type: Transform + pos: 50.5,2.5 + parent: 2 + - uid: 1765 + components: + - type: Transform + pos: 49.5,2.5 + parent: 2 + - uid: 1766 + components: + - type: Transform + pos: 48.5,2.5 + parent: 2 + - uid: 1767 + components: + - type: Transform + pos: 47.5,2.5 + parent: 2 + - uid: 1768 + components: + - type: Transform + pos: 46.5,2.5 + parent: 2 + - uid: 1769 + components: + - type: Transform + pos: 50.5,-0.5 + parent: 2 + - uid: 1770 + components: + - type: Transform + pos: 49.5,-0.5 + parent: 2 + - uid: 1771 + components: + - type: Transform + pos: 48.5,-0.5 + parent: 2 + - uid: 1772 + components: + - type: Transform + pos: 47.5,-0.5 + parent: 2 + - uid: 1773 + components: + - type: Transform + pos: 46.5,-0.5 + parent: 2 + - uid: 1774 + components: + - type: Transform + pos: 50.5,4.5 + parent: 2 + - uid: 1775 + components: + - type: Transform + pos: 49.5,4.5 + parent: 2 + - uid: 1776 + components: + - type: Transform + pos: 48.5,4.5 + parent: 2 + - uid: 1777 + components: + - type: Transform + pos: 47.5,4.5 + parent: 2 + - uid: 1778 + components: + - type: Transform + pos: 46.5,4.5 + parent: 2 + - uid: 1779 + components: + - type: Transform + pos: 55.5,4.5 + parent: 2 + - uid: 1780 + components: + - type: Transform + pos: 56.5,4.5 + parent: 2 + - uid: 1781 + components: + - type: Transform + pos: 57.5,4.5 + parent: 2 + - uid: 1782 + components: + - type: Transform + pos: 45.5,4.5 + parent: 2 + - uid: 1783 + components: + - type: Transform + pos: 50.5,5.5 + parent: 2 + - uid: 1784 + components: + - type: Transform + pos: 50.5,6.5 + parent: 2 + - uid: 1785 + components: + - type: Transform + pos: 51.5,6.5 + parent: 2 + - uid: 1786 + components: + - type: Transform + pos: 52.5,6.5 + parent: 2 + - uid: 1787 + components: + - type: Transform + pos: 53.5,6.5 + parent: 2 + - uid: 1788 + components: + - type: Transform + pos: 54.5,6.5 + parent: 2 + - uid: 1789 + components: + - type: Transform + pos: 49.5,6.5 + parent: 2 + - uid: 1790 + components: + - type: Transform + pos: 48.5,6.5 + parent: 2 + - uid: 1791 + components: + - type: Transform + pos: 47.5,6.5 + parent: 2 + - uid: 1792 + components: + - type: Transform + pos: 49.5,7.5 + parent: 2 + - uid: 1793 + components: + - type: Transform + pos: 49.5,8.5 + parent: 2 + - uid: 1794 + components: + - type: Transform + pos: 49.5,9.5 + parent: 2 + - uid: 1795 + components: + - type: Transform + pos: 49.5,10.5 + parent: 2 + - uid: 1796 + components: + - type: Transform + pos: 49.5,11.5 + parent: 2 + - uid: 1797 + components: + - type: Transform + pos: 50.5,10.5 + parent: 2 + - uid: 1798 + components: + - type: Transform + pos: 48.5,10.5 + parent: 2 + - uid: 1799 + components: + - type: Transform + pos: -41.5,25.5 + parent: 2 + - uid: 1800 + components: + - type: Transform + pos: -41.5,25.5 + parent: 2 + - uid: 1801 + components: + - type: Transform + pos: -36.5,30.5 + parent: 2 + - uid: 1802 + components: + - type: Transform + pos: -37.5,30.5 + parent: 2 + - uid: 1803 + components: + - type: Transform + pos: -38.5,30.5 + parent: 2 + - uid: 1804 + components: + - type: Transform + pos: 68.5,62.5 + parent: 2 + - uid: 1805 + components: + - type: Transform + pos: 65.5,62.5 + parent: 2 + - uid: 1806 + components: + - type: Transform + pos: 70.5,59.5 + parent: 2 + - uid: 1807 + components: + - type: Transform + pos: 70.5,57.5 + parent: 2 + - uid: 1808 + components: + - type: Transform + pos: 70.5,55.5 + parent: 2 + - uid: 1809 + components: + - type: Transform + pos: 70.5,56.5 + parent: 2 + - uid: 1810 + components: + - type: Transform + pos: -41.5,24.5 + parent: 2 + - uid: 1811 + components: + - type: Transform + pos: -39.5,30.5 + parent: 2 + - uid: 1813 + components: + - type: Transform + pos: -35.5,69.5 + parent: 2 + - uid: 1814 + components: + - type: Transform + pos: -33.5,69.5 + parent: 2 + - uid: 1815 + components: + - type: Transform + pos: -31.5,69.5 + parent: 2 + - uid: 1816 + components: + - type: Transform + pos: -32.5,69.5 + parent: 2 + - uid: 1817 + components: + - type: Transform + pos: -30.5,69.5 + parent: 2 + - uid: 1818 + components: + - type: Transform + pos: -27.5,69.5 + parent: 2 + - uid: 1820 + components: + - type: Transform + pos: -29.5,69.5 + parent: 2 + - uid: 1821 + components: + - type: Transform + pos: -28.5,69.5 + parent: 2 + - uid: 1824 + components: + - type: Transform + pos: -28.5,22.5 + parent: 2 + - uid: 1825 + components: + - type: Transform + pos: -26.5,22.5 + parent: 2 + - uid: 1826 + components: + - type: Transform + pos: -27.5,22.5 + parent: 2 + - uid: 1828 + components: + - type: Transform + pos: 35.5,51.5 + parent: 2 + - uid: 1829 + components: + - type: Transform + pos: 35.5,53.5 + parent: 2 + - uid: 1830 + components: + - type: Transform + pos: 35.5,52.5 + parent: 2 + - uid: 1831 + components: + - type: Transform + pos: 34.5,54.5 + parent: 2 + - uid: 1832 + components: + - type: Transform + pos: 34.5,55.5 + parent: 2 + - uid: 1833 + components: + - type: Transform + pos: -26.5,21.5 + parent: 2 + - uid: 1834 + components: + - type: Transform + pos: -0.5,47.5 + parent: 2 + - uid: 1835 + components: + - type: Transform + pos: -9.5,50.5 + parent: 2 + - uid: 1836 + components: + - type: Transform + pos: -7.5,50.5 + parent: 2 + - uid: 1837 + components: + - type: Transform + pos: -5.5,50.5 + parent: 2 + - uid: 1838 + components: + - type: Transform + pos: -8.5,51.5 + parent: 2 + - uid: 1839 + components: + - type: Transform + pos: 37.5,44.5 + parent: 2 + - uid: 1840 + components: + - type: Transform + pos: 50.5,13.5 + parent: 2 + - uid: 1841 + components: + - type: Transform + pos: 51.5,13.5 + parent: 2 + - uid: 1842 + components: + - type: Transform + pos: 52.5,13.5 + parent: 2 + - uid: 1843 + components: + - type: Transform + pos: 53.5,13.5 + parent: 2 + - uid: 1844 + components: + - type: Transform + pos: 52.5,14.5 + parent: 2 + - uid: 1845 + components: + - type: Transform + pos: 52.5,15.5 + parent: 2 + - uid: 1846 + components: + - type: Transform + pos: 52.5,16.5 + parent: 2 + - uid: 1847 + components: + - type: Transform + pos: 52.5,17.5 + parent: 2 + - uid: 1848 + components: + - type: Transform + pos: 52.5,18.5 + parent: 2 + - uid: 1849 + components: + - type: Transform + pos: 51.5,17.5 + parent: 2 + - uid: 1850 + components: + - type: Transform + pos: 53.5,17.5 + parent: 2 + - uid: 1851 + components: + - type: Transform + pos: 54.5,18.5 + parent: 2 + - uid: 1852 + components: + - type: Transform + pos: 55.5,18.5 + parent: 2 + - uid: 1853 + components: + - type: Transform + pos: 56.5,18.5 + parent: 2 + - uid: 1854 + components: + - type: Transform + pos: 57.5,18.5 + parent: 2 + - uid: 1855 + components: + - type: Transform + pos: 58.5,18.5 + parent: 2 + - uid: 1856 + components: + - type: Transform + pos: 59.5,18.5 + parent: 2 + - uid: 1857 + components: + - type: Transform + pos: 57.5,17.5 + parent: 2 + - uid: 1858 + components: + - type: Transform + pos: 57.5,16.5 + parent: 2 + - uid: 1859 + components: + - type: Transform + pos: 57.5,15.5 + parent: 2 + - uid: 1860 + components: + - type: Transform + pos: 56.5,16.5 + parent: 2 + - uid: 1861 + components: + - type: Transform + pos: 58.5,16.5 + parent: 2 + - uid: 1862 + components: + - type: Transform + pos: 57.5,19.5 + parent: 2 + - uid: 1863 + components: + - type: Transform + pos: 57.5,20.5 + parent: 2 + - uid: 1864 + components: + - type: Transform + pos: 57.5,21.5 + parent: 2 + - uid: 1865 + components: + - type: Transform + pos: 57.5,22.5 + parent: 2 + - uid: 1866 + components: + - type: Transform + pos: 58.5,21.5 + parent: 2 + - uid: 1867 + components: + - type: Transform + pos: 59.5,21.5 + parent: 2 + - uid: 1868 + components: + - type: Transform + pos: 60.5,21.5 + parent: 2 + - uid: 1869 + components: + - type: Transform + pos: 56.5,21.5 + parent: 2 + - uid: 1870 + components: + - type: Transform + pos: 55.5,21.5 + parent: 2 + - uid: 1871 + components: + - type: Transform + pos: 26.5,18.5 + parent: 2 + - uid: 1872 + components: + - type: Transform + pos: 25.5,18.5 + parent: 2 + - uid: 1873 + components: + - type: Transform + pos: 24.5,18.5 + parent: 2 + - uid: 1874 + components: + - type: Transform + pos: 24.5,17.5 + parent: 2 + - uid: 1875 + components: + - type: Transform + pos: 24.5,16.5 + parent: 2 + - uid: 1876 + components: + - type: Transform + pos: 23.5,17.5 + parent: 2 + - uid: 1877 + components: + - type: Transform + pos: 22.5,17.5 + parent: 2 + - uid: 1878 + components: + - type: Transform + pos: 21.5,17.5 + parent: 2 + - uid: 1879 + components: + - type: Transform + pos: 20.5,17.5 + parent: 2 + - uid: 1880 + components: + - type: Transform + pos: 19.5,17.5 + parent: 2 + - uid: 1881 + components: + - type: Transform + pos: 25.5,17.5 + parent: 2 + - uid: 1882 + components: + - type: Transform + pos: 26.5,17.5 + parent: 2 + - uid: 1883 + components: + - type: Transform + pos: 27.5,17.5 + parent: 2 + - uid: 1884 + components: + - type: Transform + pos: 28.5,17.5 + parent: 2 + - uid: 1885 + components: + - type: Transform + pos: 29.5,17.5 + parent: 2 + - uid: 1886 + components: + - type: Transform + pos: 30.5,17.5 + parent: 2 + - uid: 1887 + components: + - type: Transform + pos: 24.5,15.5 + parent: 2 + - uid: 1888 + components: + - type: Transform + pos: 24.5,14.5 + parent: 2 + - uid: 1889 + components: + - type: Transform + pos: 24.5,13.5 + parent: 2 + - uid: 1890 + components: + - type: Transform + pos: 24.5,12.5 + parent: 2 + - uid: 1891 + components: + - type: Transform + pos: 24.5,11.5 + parent: 2 + - uid: 1892 + components: + - type: Transform + pos: 24.5,10.5 + parent: 2 + - uid: 1893 + components: + - type: Transform + pos: 24.5,9.5 + parent: 2 + - uid: 1894 + components: + - type: Transform + pos: 23.5,10.5 + parent: 2 + - uid: 1895 + components: + - type: Transform + pos: 22.5,10.5 + parent: 2 + - uid: 1896 + components: + - type: Transform + pos: 21.5,10.5 + parent: 2 + - uid: 1897 + components: + - type: Transform + pos: 21.5,9.5 + parent: 2 + - uid: 1898 + components: + - type: Transform + pos: 21.5,11.5 + parent: 2 + - uid: 1899 + components: + - type: Transform + pos: 23.5,13.5 + parent: 2 + - uid: 1900 + components: + - type: Transform + pos: 25.5,13.5 + parent: 2 + - uid: 1901 + components: + - type: Transform + pos: 25.5,14.5 + parent: 2 + - uid: 1902 + components: + - type: Transform + pos: 26.5,14.5 + parent: 2 + - uid: 1903 + components: + - type: Transform + pos: 27.5,14.5 + parent: 2 + - uid: 1904 + components: + - type: Transform + pos: 29.5,14.5 + parent: 2 + - uid: 1905 + components: + - type: Transform + pos: 28.5,14.5 + parent: 2 + - uid: 1906 + components: + - type: Transform + pos: 30.5,14.5 + parent: 2 + - uid: 1907 + components: + - type: Transform + pos: 23.5,15.5 + parent: 2 + - uid: 1908 + components: + - type: Transform + pos: 22.5,15.5 + parent: 2 + - uid: 1909 + components: + - type: Transform + pos: 21.5,15.5 + parent: 2 + - uid: 1910 + components: + - type: Transform + pos: 20.5,15.5 + parent: 2 + - uid: 1911 + components: + - type: Transform + pos: 19.5,15.5 + parent: 2 + - uid: 1912 + components: + - type: Transform + pos: 18.5,15.5 + parent: 2 + - uid: 1913 + components: + - type: Transform + pos: 17.5,15.5 + parent: 2 + - uid: 1914 + components: + - type: Transform + pos: -31.5,54.5 + parent: 2 + - uid: 1915 + components: + - type: Transform + pos: -31.5,53.5 + parent: 2 + - uid: 1916 + components: + - type: Transform + pos: -31.5,52.5 + parent: 2 + - uid: 1917 + components: + - type: Transform + pos: -31.5,51.5 + parent: 2 + - uid: 1918 + components: + - type: Transform + pos: -32.5,52.5 + parent: 2 + - uid: 1919 + components: + - type: Transform + pos: -30.5,52.5 + parent: 2 + - uid: 1920 + components: + - type: Transform + pos: -29.5,52.5 + parent: 2 + - uid: 1921 + components: + - type: Transform + pos: -28.5,52.5 + parent: 2 + - uid: 1922 + components: + - type: Transform + pos: -27.5,52.5 + parent: 2 + - uid: 1923 + components: + - type: Transform + pos: -27.5,51.5 + parent: 2 + - uid: 1924 + components: + - type: Transform + pos: -27.5,53.5 + parent: 2 + - uid: 1925 + components: + - type: Transform + pos: -27.5,54.5 + parent: 2 + - uid: 1926 + components: + - type: Transform + pos: -27.5,55.5 + parent: 2 + - uid: 1927 + components: + - type: Transform + pos: -28.5,54.5 + parent: 2 + - uid: 1928 + components: + - type: Transform + pos: -26.5,54.5 + parent: 2 + - uid: 1929 + components: + - type: Transform + pos: -30.5,59.5 + parent: 2 + - uid: 1930 + components: + - type: Transform + pos: -30.5,58.5 + parent: 2 + - uid: 1931 + components: + - type: Transform + pos: -30.5,57.5 + parent: 2 + - uid: 1932 + components: + - type: Transform + pos: -31.5,57.5 + parent: 2 + - uid: 1933 + components: + - type: Transform + pos: -32.5,57.5 + parent: 2 + - uid: 1934 + components: + - type: Transform + pos: -33.5,57.5 + parent: 2 + - uid: 1935 + components: + - type: Transform + pos: -34.5,57.5 + parent: 2 + - uid: 1936 + components: + - type: Transform + pos: -35.5,57.5 + parent: 2 + - uid: 1937 + components: + - type: Transform + pos: -32.5,56.5 + parent: 2 + - uid: 1938 + components: + - type: Transform + pos: -32.5,55.5 + parent: 2 + - uid: 1939 + components: + - type: Transform + pos: -36.5,57.5 + parent: 2 + - uid: 1940 + components: + - type: Transform + pos: -37.5,57.5 + parent: 2 + - uid: 1941 + components: + - type: Transform + pos: -38.5,57.5 + parent: 2 + - uid: 1942 + components: + - type: Transform + pos: -37.5,56.5 + parent: 2 + - uid: 1943 + components: + - type: Transform + pos: -37.5,55.5 + parent: 2 + - uid: 1944 + components: + - type: Transform + pos: -37.5,54.5 + parent: 2 + - uid: 1945 + components: + - type: Transform + pos: -37.5,53.5 + parent: 2 + - uid: 1946 + components: + - type: Transform + pos: -32.5,58.5 + parent: 2 + - uid: 1947 + components: + - type: Transform + pos: -32.5,59.5 + parent: 2 + - uid: 1948 + components: + - type: Transform + pos: -32.5,60.5 + parent: 2 + - uid: 1949 + components: + - type: Transform + pos: -32.5,61.5 + parent: 2 + - uid: 1950 + components: + - type: Transform + pos: -32.5,62.5 + parent: 2 + - uid: 1951 + components: + - type: Transform + pos: -32.5,63.5 + parent: 2 + - uid: 1952 + components: + - type: Transform + pos: -29.5,57.5 + parent: 2 + - uid: 1953 + components: + - type: Transform + pos: -28.5,57.5 + parent: 2 + - uid: 1954 + components: + - type: Transform + pos: -27.5,57.5 + parent: 2 + - uid: 1955 + components: + - type: Transform + pos: -26.5,57.5 + parent: 2 + - uid: 1956 + components: + - type: Transform + pos: -28.5,58.5 + parent: 2 + - uid: 1957 + components: + - type: Transform + pos: -28.5,59.5 + parent: 2 + - uid: 1958 + components: + - type: Transform + pos: -28.5,60.5 + parent: 2 + - uid: 1959 + components: + - type: Transform + pos: -28.5,61.5 + parent: 2 + - uid: 1960 + components: + - type: Transform + pos: -28.5,62.5 + parent: 2 + - uid: 1961 + components: + - type: Transform + pos: -28.5,63.5 + parent: 2 + - uid: 1962 + components: + - type: Transform + pos: -29.5,63.5 + parent: 2 + - uid: 1963 + components: + - type: Transform + pos: -30.5,63.5 + parent: 2 + - uid: 1964 + components: + - type: Transform + pos: -31.5,63.5 + parent: 2 + - uid: 1965 + components: + - type: Transform + pos: -33.5,63.5 + parent: 2 + - uid: 1966 + components: + - type: Transform + pos: -34.5,63.5 + parent: 2 + - uid: 1967 + components: + - type: Transform + pos: -35.5,63.5 + parent: 2 + - uid: 1968 + components: + - type: Transform + pos: -35.5,61.5 + parent: 2 + - uid: 1969 + components: + - type: Transform + pos: -35.5,62.5 + parent: 2 + - uid: 1970 + components: + - type: Transform + pos: -30.5,64.5 + parent: 2 + - uid: 1971 + components: + - type: Transform + pos: -30.5,65.5 + parent: 2 + - uid: 1972 + components: + - type: Transform + pos: -30.5,66.5 + parent: 2 + - uid: 1973 + components: + - type: Transform + pos: -30.5,67.5 + parent: 2 + - uid: 1974 + components: + - type: Transform + pos: -30.5,68.5 + parent: 2 + - uid: 1975 + components: + - type: Transform + pos: -31.5,66.5 + parent: 2 + - uid: 1976 + components: + - type: Transform + pos: -32.5,66.5 + parent: 2 + - uid: 1977 + components: + - type: Transform + pos: -33.5,66.5 + parent: 2 + - uid: 1978 + components: + - type: Transform + pos: -34.5,66.5 + parent: 2 + - uid: 1979 + components: + - type: Transform + pos: -29.5,66.5 + parent: 2 + - uid: 1980 + components: + - type: Transform + pos: -28.5,66.5 + parent: 2 + - uid: 1981 + components: + - type: Transform + pos: -27.5,66.5 + parent: 2 + - uid: 1982 + components: + - type: Transform + pos: -8.5,57.5 + parent: 2 + - uid: 1983 + components: + - type: Transform + pos: -8.5,56.5 + parent: 2 + - uid: 1984 + components: + - type: Transform + pos: -8.5,55.5 + parent: 2 + - uid: 1985 + components: + - type: Transform + pos: -8.5,54.5 + parent: 2 + - uid: 1986 + components: + - type: Transform + pos: -9.5,55.5 + parent: 2 + - uid: 1987 + components: + - type: Transform + pos: -10.5,55.5 + parent: 2 + - uid: 1988 + components: + - type: Transform + pos: -11.5,55.5 + parent: 2 + - uid: 1989 + components: + - type: Transform + pos: -12.5,55.5 + parent: 2 + - uid: 1990 + components: + - type: Transform + pos: -13.5,55.5 + parent: 2 + - uid: 1991 + components: + - type: Transform + pos: -14.5,55.5 + parent: 2 + - uid: 1992 + components: + - type: Transform + pos: -15.5,55.5 + parent: 2 + - uid: 1993 + components: + - type: Transform + pos: -15.5,54.5 + parent: 2 + - uid: 1994 + components: + - type: Transform + pos: -15.5,53.5 + parent: 2 + - uid: 1995 + components: + - type: Transform + pos: -15.5,52.5 + parent: 2 + - uid: 1996 + components: + - type: Transform + pos: -15.5,51.5 + parent: 2 + - uid: 1997 + components: + - type: Transform + pos: -12.5,54.5 + parent: 2 + - uid: 1998 + components: + - type: Transform + pos: -12.5,53.5 + parent: 2 + - uid: 1999 + components: + - type: Transform + pos: -12.5,52.5 + parent: 2 + - uid: 2000 + components: + - type: Transform + pos: -12.5,51.5 + parent: 2 + - uid: 2001 + components: + - type: Transform + pos: -14.5,56.5 + parent: 2 + - uid: 2002 + components: + - type: Transform + pos: -7.5,55.5 + parent: 2 + - uid: 2003 + components: + - type: Transform + pos: -6.5,55.5 + parent: 2 + - uid: 2004 + components: + - type: Transform + pos: -5.5,55.5 + parent: 2 + - uid: 2005 + components: + - type: Transform + pos: -4.5,55.5 + parent: 2 + - uid: 2006 + components: + - type: Transform + pos: -3.5,55.5 + parent: 2 + - uid: 2007 + components: + - type: Transform + pos: -2.5,55.5 + parent: 2 + - uid: 2008 + components: + - type: Transform + pos: -1.5,55.5 + parent: 2 + - uid: 2009 + components: + - type: Transform + pos: -0.5,55.5 + parent: 2 + - uid: 2010 + components: + - type: Transform + pos: 0.5,55.5 + parent: 2 + - uid: 2011 + components: + - type: Transform + pos: -8.5,53.5 + parent: 2 + - uid: 2012 + components: + - type: Transform + pos: -8.5,52.5 + parent: 2 + - uid: 2013 + components: + - type: Transform + pos: -4.5,53.5 + parent: 2 + - uid: 2014 + components: + - type: Transform + pos: -4.5,52.5 + parent: 2 + - uid: 2015 + components: + - type: Transform + pos: -4.5,54.5 + parent: 2 + - uid: 2016 + components: + - type: Transform + pos: -0.5,54.5 + parent: 2 + - uid: 2017 + components: + - type: Transform + pos: -0.5,53.5 + parent: 2 + - uid: 2018 + components: + - type: Transform + pos: -0.5,52.5 + parent: 2 + - uid: 2019 + components: + - type: Transform + pos: -4.5,56.5 + parent: 2 + - uid: 2020 + components: + - type: Transform + pos: -4.5,57.5 + parent: 2 + - uid: 2021 + components: + - type: Transform + pos: -4.5,58.5 + parent: 2 + - uid: 2022 + components: + - type: Transform + pos: -4.5,59.5 + parent: 2 + - uid: 2023 + components: + - type: Transform + pos: -2.5,59.5 + parent: 2 + - uid: 2024 + components: + - type: Transform + pos: -1.5,59.5 + parent: 2 + - uid: 2025 + components: + - type: Transform + pos: -0.5,59.5 + parent: 2 + - uid: 2026 + components: + - type: Transform + pos: 0.5,59.5 + parent: 2 + - uid: 2027 + components: + - type: Transform + pos: 1.5,59.5 + parent: 2 + - uid: 2028 + components: + - type: Transform + pos: 2.5,59.5 + parent: 2 + - uid: 2029 + components: + - type: Transform + pos: 2.5,58.5 + parent: 2 + - uid: 2030 + components: + - type: Transform + pos: 3.5,65.5 + parent: 2 + - uid: 2031 + components: + - type: Transform + pos: 3.5,64.5 + parent: 2 + - uid: 2032 + components: + - type: Transform + pos: 3.5,63.5 + parent: 2 + - uid: 2033 + components: + - type: Transform + pos: 3.5,62.5 + parent: 2 + - uid: 2034 + components: + - type: Transform + pos: 4.5,63.5 + parent: 2 + - uid: 2035 + components: + - type: Transform + pos: 5.5,63.5 + parent: 2 + - uid: 2036 + components: + - type: Transform + pos: 5.5,64.5 + parent: 2 + - uid: 2037 + components: + - type: Transform + pos: 6.5,64.5 + parent: 2 + - uid: 2038 + components: + - type: Transform + pos: 5.5,65.5 + parent: 2 + - uid: 2039 + components: + - type: Transform + pos: 5.5,66.5 + parent: 2 + - uid: 2040 + components: + - type: Transform + pos: 5.5,67.5 + parent: 2 + - uid: 2041 + components: + - type: Transform + pos: 4.5,67.5 + parent: 2 + - uid: 2042 + components: + - type: Transform + pos: 3.5,67.5 + parent: 2 + - uid: 2043 + components: + - type: Transform + pos: 2.5,67.5 + parent: 2 + - uid: 2044 + components: + - type: Transform + pos: 1.5,67.5 + parent: 2 + - uid: 2045 + components: + - type: Transform + pos: 0.5,67.5 + parent: 2 + - uid: 2046 + components: + - type: Transform + pos: -0.5,67.5 + parent: 2 + - uid: 2047 + components: + - type: Transform + pos: 6.5,67.5 + parent: 2 + - uid: 2048 + components: + - type: Transform + pos: 7.5,67.5 + parent: 2 + - uid: 2049 + components: + - type: Transform + pos: 8.5,67.5 + parent: 2 + - uid: 2050 + components: + - type: Transform + pos: 9.5,67.5 + parent: 2 + - uid: 2051 + components: + - type: Transform + pos: 10.5,67.5 + parent: 2 + - uid: 2052 + components: + - type: Transform + pos: 11.5,67.5 + parent: 2 + - uid: 2053 + components: + - type: Transform + pos: 5.5,62.5 + parent: 2 + - uid: 2054 + components: + - type: Transform + pos: 5.5,61.5 + parent: 2 + - uid: 2055 + components: + - type: Transform + pos: 5.5,60.5 + parent: 2 + - uid: 2056 + components: + - type: Transform + pos: 5.5,59.5 + parent: 2 + - uid: 2057 + components: + - type: Transform + pos: 5.5,58.5 + parent: 2 + - uid: 2058 + components: + - type: Transform + pos: 5.5,57.5 + parent: 2 + - uid: 2059 + components: + - type: Transform + pos: 5.5,56.5 + parent: 2 + - uid: 2060 + components: + - type: Transform + pos: 5.5,55.5 + parent: 2 + - uid: 2061 + components: + - type: Transform + pos: 5.5,54.5 + parent: 2 + - uid: 2062 + components: + - type: Transform + pos: 5.5,53.5 + parent: 2 + - uid: 2063 + components: + - type: Transform + pos: 5.5,52.5 + parent: 2 + - uid: 2064 + components: + - type: Transform + pos: 5.5,51.5 + parent: 2 + - uid: 2065 + components: + - type: Transform + pos: 3.5,51.5 + parent: 2 + - uid: 2066 + components: + - type: Transform + pos: 4.5,51.5 + parent: 2 + - uid: 2067 + components: + - type: Transform + pos: 5.5,50.5 + parent: 2 + - uid: 2068 + components: + - type: Transform + pos: 6.5,51.5 + parent: 2 + - uid: 2069 + components: + - type: Transform + pos: 11.5,76.5 + parent: 2 + - uid: 2070 + components: + - type: Transform + pos: 11.5,75.5 + parent: 2 + - uid: 2071 + components: + - type: Transform + pos: 11.5,74.5 + parent: 2 + - uid: 2072 + components: + - type: Transform + pos: 11.5,73.5 + parent: 2 + - uid: 2073 + components: + - type: Transform + pos: 11.5,72.5 + parent: 2 + - uid: 2074 + components: + - type: Transform + pos: 12.5,72.5 + parent: 2 + - uid: 2075 + components: + - type: Transform + pos: 12.5,71.5 + parent: 2 + - uid: 2076 + components: + - type: Transform + pos: 12.5,70.5 + parent: 2 + - uid: 2077 + components: + - type: Transform + pos: 11.5,70.5 + parent: 2 + - uid: 2078 + components: + - type: Transform + pos: 10.5,70.5 + parent: 2 + - uid: 2079 + components: + - type: Transform + pos: 11.5,77.5 + parent: 2 + - uid: 2080 + components: + - type: Transform + pos: 11.5,78.5 + parent: 2 + - uid: 2081 + components: + - type: Transform + pos: 11.5,79.5 + parent: 2 + - uid: 2082 + components: + - type: Transform + pos: 10.5,79.5 + parent: 2 + - uid: 2083 + components: + - type: Transform + pos: 10.5,80.5 + parent: 2 + - uid: 2084 + components: + - type: Transform + pos: 6.5,80.5 + parent: 2 + - uid: 2085 + components: + - type: Transform + pos: 6.5,79.5 + parent: 2 + - uid: 2086 + components: + - type: Transform + pos: 5.5,79.5 + parent: 2 + - uid: 2087 + components: + - type: Transform + pos: 4.5,79.5 + parent: 2 + - uid: 2088 + components: + - type: Transform + pos: 3.5,79.5 + parent: 2 + - uid: 2089 + components: + - type: Transform + pos: 2.5,79.5 + parent: 2 + - uid: 2090 + components: + - type: Transform + pos: 1.5,79.5 + parent: 2 + - uid: 2091 + components: + - type: Transform + pos: 0.5,79.5 + parent: 2 + - uid: 2092 + components: + - type: Transform + pos: -0.5,78.5 + parent: 2 + - uid: 2093 + components: + - type: Transform + pos: -0.5,77.5 + parent: 2 + - uid: 2094 + components: + - type: Transform + pos: -1.5,77.5 + parent: 2 + - uid: 2095 + components: + - type: Transform + pos: -1.5,76.5 + parent: 2 + - uid: 2096 + components: + - type: Transform + pos: -2.5,76.5 + parent: 2 + - uid: 2097 + components: + - type: Transform + pos: -2.5,75.5 + parent: 2 + - uid: 2098 + components: + - type: Transform + pos: -2.5,74.5 + parent: 2 + - uid: 2099 + components: + - type: Transform + pos: -2.5,73.5 + parent: 2 + - uid: 2100 + components: + - type: Transform + pos: -2.5,72.5 + parent: 2 + - uid: 2101 + components: + - type: Transform + pos: -2.5,71.5 + parent: 2 + - uid: 2102 + components: + - type: Transform + pos: -2.5,70.5 + parent: 2 + - uid: 2103 + components: + - type: Transform + pos: -2.5,69.5 + parent: 2 + - uid: 2104 + components: + - type: Transform + pos: -1.5,69.5 + parent: 2 + - uid: 2105 + components: + - type: Transform + pos: -0.5,69.5 + parent: 2 + - uid: 2106 + components: + - type: Transform + pos: 0.5,69.5 + parent: 2 + - uid: 2107 + components: + - type: Transform + pos: 1.5,69.5 + parent: 2 + - uid: 2108 + components: + - type: Transform + pos: 2.5,69.5 + parent: 2 + - uid: 2109 + components: + - type: Transform + pos: 3.5,69.5 + parent: 2 + - uid: 2110 + components: + - type: Transform + pos: 4.5,69.5 + parent: 2 + - uid: 2111 + components: + - type: Transform + pos: 5.5,69.5 + parent: 2 + - uid: 2112 + components: + - type: Transform + pos: 6.5,69.5 + parent: 2 + - uid: 2113 + components: + - type: Transform + pos: 7.5,69.5 + parent: 2 + - uid: 2114 + components: + - type: Transform + pos: 8.5,69.5 + parent: 2 + - uid: 2115 + components: + - type: Transform + pos: 9.5,69.5 + parent: 2 + - uid: 2116 + components: + - type: Transform + pos: 10.5,69.5 + parent: 2 + - uid: 2117 + components: + - type: Transform + pos: 18.5,60.5 + parent: 2 + - uid: 2118 + components: + - type: Transform + pos: -8.5,50.5 + parent: 2 + - uid: 2119 + components: + - type: Transform + pos: 13.5,59.5 + parent: 2 + - uid: 2120 + components: + - type: Transform + pos: 13.5,60.5 + parent: 2 + - uid: 2121 + components: + - type: Transform + pos: 13.5,61.5 + parent: 2 + - uid: 2122 + components: + - type: Transform + pos: 13.5,62.5 + parent: 2 + - uid: 2123 + components: + - type: Transform + pos: 13.5,63.5 + parent: 2 + - uid: 2124 + components: + - type: Transform + pos: 14.5,61.5 + parent: 2 + - uid: 2125 + components: + - type: Transform + pos: 15.5,61.5 + parent: 2 + - uid: 2126 + components: + - type: Transform + pos: 16.5,61.5 + parent: 2 + - uid: 2127 + components: + - type: Transform + pos: 17.5,61.5 + parent: 2 + - uid: 2128 + components: + - type: Transform + pos: 17.5,62.5 + parent: 2 + - uid: 2129 + components: + - type: Transform + pos: 17.5,63.5 + parent: 2 + - uid: 2130 + components: + - type: Transform + pos: 18.5,63.5 + parent: 2 + - uid: 2131 + components: + - type: Transform + pos: 19.5,63.5 + parent: 2 + - uid: 2132 + components: + - type: Transform + pos: 20.5,63.5 + parent: 2 + - uid: 2133 + components: + - type: Transform + pos: 21.5,63.5 + parent: 2 + - uid: 2134 + components: + - type: Transform + pos: 21.5,64.5 + parent: 2 + - uid: 2135 + components: + - type: Transform + pos: 21.5,65.5 + parent: 2 + - uid: 2136 + components: + - type: Transform + pos: 21.5,66.5 + parent: 2 + - uid: 2137 + components: + - type: Transform + pos: 21.5,62.5 + parent: 2 + - uid: 2138 + components: + - type: Transform + pos: 12.5,60.5 + parent: 2 + - uid: 2139 + components: + - type: Transform + pos: 11.5,60.5 + parent: 2 + - uid: 2140 + components: + - type: Transform + pos: 10.5,60.5 + parent: 2 + - uid: 2141 + components: + - type: Transform + pos: 9.5,60.5 + parent: 2 + - uid: 2142 + components: + - type: Transform + pos: 8.5,60.5 + parent: 2 + - uid: 2143 + components: + - type: Transform + pos: 10.5,59.5 + parent: 2 + - uid: 2144 + components: + - type: Transform + pos: 10.5,58.5 + parent: 2 + - uid: 2145 + components: + - type: Transform + pos: 10.5,57.5 + parent: 2 + - uid: 2146 + components: + - type: Transform + pos: 10.5,56.5 + parent: 2 + - uid: 2147 + components: + - type: Transform + pos: 10.5,55.5 + parent: 2 + - uid: 2148 + components: + - type: Transform + pos: 10.5,54.5 + parent: 2 + - uid: 2149 + components: + - type: Transform + pos: 10.5,53.5 + parent: 2 + - uid: 2150 + components: + - type: Transform + pos: 10.5,52.5 + parent: 2 + - uid: 2151 + components: + - type: Transform + pos: 10.5,51.5 + parent: 2 + - uid: 2152 + components: + - type: Transform + pos: 9.5,52.5 + parent: 2 + - uid: 2153 + components: + - type: Transform + pos: 8.5,52.5 + parent: 2 + - uid: 2154 + components: + - type: Transform + pos: 11.5,52.5 + parent: 2 + - uid: 2155 + components: + - type: Transform + pos: 12.5,52.5 + parent: 2 + - uid: 2156 + components: + - type: Transform + pos: 13.5,52.5 + parent: 2 + - uid: 2157 + components: + - type: Transform + pos: 14.5,52.5 + parent: 2 + - uid: 2158 + components: + - type: Transform + pos: 11.5,56.5 + parent: 2 + - uid: 2159 + components: + - type: Transform + pos: 12.5,56.5 + parent: 2 + - uid: 2160 + components: + - type: Transform + pos: 13.5,56.5 + parent: 2 + - uid: 2161 + components: + - type: Transform + pos: 14.5,56.5 + parent: 2 + - uid: 2162 + components: + - type: Transform + pos: 8.5,56.5 + parent: 2 + - uid: 2163 + components: + - type: Transform + pos: 18.5,59.5 + parent: 2 + - uid: 2164 + components: + - type: Transform + pos: 18.5,58.5 + parent: 2 + - uid: 2165 + components: + - type: Transform + pos: 17.5,59.5 + parent: 2 + - uid: 2166 + components: + - type: Transform + pos: 17.5,58.5 + parent: 2 + - uid: 2167 + components: + - type: Transform + pos: 17.5,57.5 + parent: 2 + - uid: 2168 + components: + - type: Transform + pos: 17.5,56.5 + parent: 2 + - uid: 2169 + components: + - type: Transform + pos: 17.5,55.5 + parent: 2 + - uid: 2170 + components: + - type: Transform + pos: 17.5,54.5 + parent: 2 + - uid: 2171 + components: + - type: Transform + pos: 17.5,53.5 + parent: 2 + - uid: 2172 + components: + - type: Transform + pos: 17.5,52.5 + parent: 2 + - uid: 2173 + components: + - type: Transform + pos: 17.5,51.5 + parent: 2 + - uid: 2174 + components: + - type: Transform + pos: 18.5,51.5 + parent: 2 + - uid: 2175 + components: + - type: Transform + pos: 19.5,51.5 + parent: 2 + - uid: 2176 + components: + - type: Transform + pos: 20.5,51.5 + parent: 2 + - uid: 2177 + components: + - type: Transform + pos: 21.5,51.5 + parent: 2 + - uid: 2178 + components: + - type: Transform + pos: 22.5,51.5 + parent: 2 + - uid: 2179 + components: + - type: Transform + pos: 23.5,51.5 + parent: 2 + - uid: 2180 + components: + - type: Transform + pos: 24.5,51.5 + parent: 2 + - uid: 2181 + components: + - type: Transform + pos: 25.5,51.5 + parent: 2 + - uid: 2182 + components: + - type: Transform + pos: 17.5,56.5 + parent: 2 + - uid: 2183 + components: + - type: Transform + pos: 18.5,56.5 + parent: 2 + - uid: 2184 + components: + - type: Transform + pos: 19.5,56.5 + parent: 2 + - uid: 2185 + components: + - type: Transform + pos: 20.5,56.5 + parent: 2 + - uid: 2186 + components: + - type: Transform + pos: 21.5,56.5 + parent: 2 + - uid: 2187 + components: + - type: Transform + pos: 22.5,56.5 + parent: 2 + - uid: 2188 + components: + - type: Transform + pos: 23.5,56.5 + parent: 2 + - uid: 2189 + components: + - type: Transform + pos: 24.5,56.5 + parent: 2 + - uid: 2190 + components: + - type: Transform + pos: 25.5,56.5 + parent: 2 + - uid: 2191 + components: + - type: Transform + pos: 21.5,55.5 + parent: 2 + - uid: 2192 + components: + - type: Transform + pos: 21.5,54.5 + parent: 2 + - uid: 2193 + components: + - type: Transform + pos: 21.5,53.5 + parent: 2 + - uid: 2194 + components: + - type: Transform + pos: 21.5,52.5 + parent: 2 + - uid: 2195 + components: + - type: Transform + pos: 25.5,55.5 + parent: 2 + - uid: 2196 + components: + - type: Transform + pos: 25.5,54.5 + parent: 2 + - uid: 2197 + components: + - type: Transform + pos: 25.5,53.5 + parent: 2 + - uid: 2198 + components: + - type: Transform + pos: 25.5,52.5 + parent: 2 + - uid: 2199 + components: + - type: Transform + pos: 24.5,58.5 + parent: 2 + - uid: 2200 + components: + - type: Transform + pos: 24.5,57.5 + parent: 2 + - uid: 2201 + components: + - type: Transform + pos: 21.5,58.5 + parent: 2 + - uid: 2202 + components: + - type: Transform + pos: 21.5,57.5 + parent: 2 + - uid: 2203 + components: + - type: Transform + pos: 60.5,13.5 + parent: 2 + - uid: 2204 + components: + - type: Transform + pos: 45.5,29.5 + parent: 2 + - uid: 2205 + components: + - type: Transform + pos: 46.5,29.5 + parent: 2 + - uid: 2206 + components: + - type: Transform + pos: 47.5,29.5 + parent: 2 + - uid: 2207 + components: + - type: Transform + pos: 48.5,29.5 + parent: 2 + - uid: 2208 + components: + - type: Transform + pos: 47.5,30.5 + parent: 2 + - uid: 2209 + components: + - type: Transform + pos: 47.5,31.5 + parent: 2 + - uid: 2210 + components: + - type: Transform + pos: 47.5,28.5 + parent: 2 + - uid: 2211 + components: + - type: Transform + pos: 47.5,27.5 + parent: 2 + - uid: 2212 + components: + - type: Transform + pos: 47.5,26.5 + parent: 2 + - uid: 2213 + components: + - type: Transform + pos: 47.5,25.5 + parent: 2 + - uid: 2214 + components: + - type: Transform + pos: 47.5,24.5 + parent: 2 + - uid: 2215 + components: + - type: Transform + pos: 47.5,23.5 + parent: 2 + - uid: 2216 + components: + - type: Transform + pos: 47.5,22.5 + parent: 2 + - uid: 2217 + components: + - type: Transform + pos: 47.5,21.5 + parent: 2 + - uid: 2218 + components: + - type: Transform + pos: 47.5,20.5 + parent: 2 + - uid: 2219 + components: + - type: Transform + pos: 48.5,22.5 + parent: 2 + - uid: 2220 + components: + - type: Transform + pos: 49.5,22.5 + parent: 2 + - uid: 2221 + components: + - type: Transform + pos: 50.5,22.5 + parent: 2 + - uid: 2222 + components: + - type: Transform + pos: 51.5,22.5 + parent: 2 + - uid: 2223 + components: + - type: Transform + pos: 52.5,22.5 + parent: 2 + - uid: 2224 + components: + - type: Transform + pos: 53.5,22.5 + parent: 2 + - uid: 2225 + components: + - type: Transform + pos: 52.5,21.5 + parent: 2 + - uid: 2226 + components: + - type: Transform + pos: 53.5,21.5 + parent: 2 + - uid: 2227 + components: + - type: Transform + pos: 53.5,20.5 + parent: 2 + - uid: 2228 + components: + - type: Transform + pos: 48.5,26.5 + parent: 2 + - uid: 2229 + components: + - type: Transform + pos: 49.5,26.5 + parent: 2 + - uid: 2230 + components: + - type: Transform + pos: 50.5,26.5 + parent: 2 + - uid: 2231 + components: + - type: Transform + pos: 48.5,30.5 + parent: 2 + - uid: 2232 + components: + - type: Transform + pos: 49.5,30.5 + parent: 2 + - uid: 2233 + components: + - type: Transform + pos: 50.5,30.5 + parent: 2 + - uid: 2234 + components: + - type: Transform + pos: 51.5,30.5 + parent: 2 + - uid: 2235 + components: + - type: Transform + pos: 52.5,30.5 + parent: 2 + - uid: 2236 + components: + - type: Transform + pos: 53.5,30.5 + parent: 2 + - uid: 2237 + components: + - type: Transform + pos: 54.5,30.5 + parent: 2 + - uid: 2238 + components: + - type: Transform + pos: 56.5,30.5 + parent: 2 + - uid: 2239 + components: + - type: Transform + pos: 55.5,30.5 + parent: 2 + - uid: 2240 + components: + - type: Transform + pos: 55.5,31.5 + parent: 2 + - uid: 2241 + components: + - type: Transform + pos: 55.5,32.5 + parent: 2 + - uid: 2242 + components: + - type: Transform + pos: 55.5,29.5 + parent: 2 + - uid: 2243 + components: + - type: Transform + pos: 55.5,28.5 + parent: 2 + - uid: 2244 + components: + - type: Transform + pos: 55.5,27.5 + parent: 2 + - uid: 2245 + components: + - type: Transform + pos: 55.5,26.5 + parent: 2 + - uid: 2246 + components: + - type: Transform + pos: 55.5,25.5 + parent: 2 + - uid: 2247 + components: + - type: Transform + pos: 55.5,24.5 + parent: 2 + - uid: 2248 + components: + - type: Transform + pos: 54.5,26.5 + parent: 2 + - uid: 2249 + components: + - type: Transform + pos: 53.5,26.5 + parent: 2 + - uid: 2250 + components: + - type: Transform + pos: 60.5,27.5 + parent: 2 + - uid: 2251 + components: + - type: Transform + pos: 60.5,26.5 + parent: 2 + - uid: 2252 + components: + - type: Transform + pos: 60.5,25.5 + parent: 2 + - uid: 2253 + components: + - type: Transform + pos: 60.5,24.5 + parent: 2 + - uid: 2254 + components: + - type: Transform + pos: 59.5,25.5 + parent: 2 + - uid: 2255 + components: + - type: Transform + pos: 61.5,25.5 + parent: 2 + - uid: 2256 + components: + - type: Transform + pos: 62.5,25.5 + parent: 2 + - uid: 2257 + components: + - type: Transform + pos: 62.5,26.5 + parent: 2 + - uid: 2258 + components: + - type: Transform + pos: 62.5,27.5 + parent: 2 + - uid: 2259 + components: + - type: Transform + pos: 62.5,28.5 + parent: 2 + - uid: 2260 + components: + - type: Transform + pos: 62.5,29.5 + parent: 2 + - uid: 2261 + components: + - type: Transform + pos: 62.5,30.5 + parent: 2 + - uid: 2262 + components: + - type: Transform + pos: 61.5,30.5 + parent: 2 + - uid: 2263 + components: + - type: Transform + pos: 60.5,30.5 + parent: 2 + - uid: 2264 + components: + - type: Transform + pos: 59.5,30.5 + parent: 2 + - uid: 2265 + components: + - type: Transform + pos: 58.5,30.5 + parent: 2 + - uid: 2266 + components: + - type: Transform + pos: 62.5,24.5 + parent: 2 + - uid: 2267 + components: + - type: Transform + pos: 62.5,23.5 + parent: 2 + - uid: 2268 + components: + - type: Transform + pos: 62.5,22.5 + parent: 2 + - uid: 2269 + components: + - type: Transform + pos: 62.5,21.5 + parent: 2 + - uid: 2270 + components: + - type: Transform + pos: 62.5,20.5 + parent: 2 + - uid: 2271 + components: + - type: Transform + pos: 62.5,19.5 + parent: 2 + - uid: 2272 + components: + - type: Transform + pos: 62.5,18.5 + parent: 2 + - uid: 2273 + components: + - type: Transform + pos: 61.5,18.5 + parent: 2 + - uid: 2274 + components: + - type: Transform + pos: 61.5,17.5 + parent: 2 + - uid: 2275 + components: + - type: Transform + pos: 61.5,16.5 + parent: 2 + - uid: 2276 + components: + - type: Transform + pos: 61.5,15.5 + parent: 2 + - uid: 2277 + components: + - type: Transform + pos: 61.5,14.5 + parent: 2 + - uid: 2278 + components: + - type: Transform + pos: 61.5,13.5 + parent: 2 + - uid: 2279 + components: + - type: Transform + pos: 59.5,13.5 + parent: 2 + - uid: 2280 + components: + - type: Transform + pos: 58.5,13.5 + parent: 2 + - uid: 2281 + components: + - type: Transform + pos: 57.5,13.5 + parent: 2 + - uid: 2282 + components: + - type: Transform + pos: 56.5,13.5 + parent: 2 + - uid: 2283 + components: + - type: Transform + pos: 55.5,13.5 + parent: 2 + - uid: 2284 + components: + - type: Transform + pos: 57.5,12.5 + parent: 2 + - uid: 2285 + components: + - type: Transform + pos: 57.5,11.5 + parent: 2 + - uid: 2286 + components: + - type: Transform + pos: 57.5,10.5 + parent: 2 + - uid: 2287 + components: + - type: Transform + pos: 57.5,9.5 + parent: 2 + - uid: 2288 + components: + - type: Transform + pos: 57.5,8.5 + parent: 2 + - uid: 2289 + components: + - type: Transform + pos: 58.5,8.5 + parent: 2 + - uid: 2290 + components: + - type: Transform + pos: 59.5,8.5 + parent: 2 + - uid: 2291 + components: + - type: Transform + pos: 59.5,7.5 + parent: 2 + - uid: 2292 + components: + - type: Transform + pos: 59.5,6.5 + parent: 2 + - uid: 2293 + components: + - type: Transform + pos: 59.5,5.5 + parent: 2 + - uid: 2294 + components: + - type: Transform + pos: 59.5,4.5 + parent: 2 + - uid: 2295 + components: + - type: Transform + pos: 59.5,3.5 + parent: 2 + - uid: 2296 + components: + - type: Transform + pos: 59.5,2.5 + parent: 2 + - uid: 2297 + components: + - type: Transform + pos: 59.5,1.5 + parent: 2 + - uid: 2298 + components: + - type: Transform + pos: 59.5,0.5 + parent: 2 + - uid: 2299 + components: + - type: Transform + pos: 59.5,-0.5 + parent: 2 + - uid: 2300 + components: + - type: Transform + pos: 59.5,-1.5 + parent: 2 + - uid: 2301 + components: + - type: Transform + pos: 59.5,-2.5 + parent: 2 + - uid: 2302 + components: + - type: Transform + pos: 59.5,-3.5 + parent: 2 + - uid: 2303 + components: + - type: Transform + pos: 59.5,-4.5 + parent: 2 + - uid: 2304 + components: + - type: Transform + pos: 59.5,-5.5 + parent: 2 + - uid: 2305 + components: + - type: Transform + pos: 55.5,12.5 + parent: 2 + - uid: 2306 + components: + - type: Transform + pos: 55.5,11.5 + parent: 2 + - uid: 2307 + components: + - type: Transform + pos: 54.5,11.5 + parent: 2 + - uid: 2308 + components: + - type: Transform + pos: 53.5,11.5 + parent: 2 + - uid: 2309 + components: + - type: Transform + pos: 52.5,11.5 + parent: 2 + - uid: 2310 + components: + - type: Transform + pos: 52.5,10.5 + parent: 2 + - uid: 2311 + components: + - type: Transform + pos: 43.5,3.5 + parent: 2 + - uid: 2312 + components: + - type: Transform + pos: 43.5,2.5 + parent: 2 + - uid: 2313 + components: + - type: Transform + pos: 43.5,1.5 + parent: 2 + - uid: 2314 + components: + - type: Transform + pos: 43.5,0.5 + parent: 2 + - uid: 2315 + components: + - type: Transform + pos: 43.5,-0.5 + parent: 2 + - uid: 2316 + components: + - type: Transform + pos: 43.5,-1.5 + parent: 2 + - uid: 2317 + components: + - type: Transform + pos: 43.5,-2.5 + parent: 2 + - uid: 2318 + components: + - type: Transform + pos: 42.5,1.5 + parent: 2 + - uid: 2319 + components: + - type: Transform + pos: 43.5,-3.5 + parent: 2 + - uid: 2320 + components: + - type: Transform + pos: 43.5,-4.5 + parent: 2 + - uid: 2321 + components: + - type: Transform + pos: 43.5,-5.5 + parent: 2 + - uid: 2322 + components: + - type: Transform + pos: 44.5,-5.5 + parent: 2 + - uid: 2323 + components: + - type: Transform + pos: 45.5,-5.5 + parent: 2 + - uid: 2324 + components: + - type: Transform + pos: 46.5,-5.5 + parent: 2 + - uid: 2325 + components: + - type: Transform + pos: 47.5,-5.5 + parent: 2 + - uid: 2326 + components: + - type: Transform + pos: 47.5,-6.5 + parent: 2 + - uid: 2327 + components: + - type: Transform + pos: 47.5,-7.5 + parent: 2 + - uid: 2328 + components: + - type: Transform + pos: 47.5,-8.5 + parent: 2 + - uid: 2329 + components: + - type: Transform + pos: 47.5,-9.5 + parent: 2 + - uid: 2330 + components: + - type: Transform + pos: 47.5,-10.5 + parent: 2 + - uid: 2331 + components: + - type: Transform + pos: 48.5,-10.5 + parent: 2 + - uid: 2332 + components: + - type: Transform + pos: 49.5,-10.5 + parent: 2 + - uid: 2333 + components: + - type: Transform + pos: 50.5,-10.5 + parent: 2 + - uid: 2334 + components: + - type: Transform + pos: 51.5,-10.5 + parent: 2 + - uid: 2335 + components: + - type: Transform + pos: 33.5,66.5 + parent: 2 + - uid: 2336 + components: + - type: Transform + pos: 43.5,4.5 + parent: 2 + - uid: 2337 + components: + - type: Transform + pos: 42.5,4.5 + parent: 2 + - uid: 2338 + components: + - type: Transform + pos: 41.5,4.5 + parent: 2 + - uid: 2339 + components: + - type: Transform + pos: 40.5,4.5 + parent: 2 + - uid: 2340 + components: + - type: Transform + pos: 39.5,4.5 + parent: 2 + - uid: 2341 + components: + - type: Transform + pos: 38.5,4.5 + parent: 2 + - uid: 2342 + components: + - type: Transform + pos: 43.5,5.5 + parent: 2 + - uid: 2343 + components: + - type: Transform + pos: 43.5,6.5 + parent: 2 + - uid: 2344 + components: + - type: Transform + pos: 43.5,7.5 + parent: 2 + - uid: 2345 + components: + - type: Transform + pos: 43.5,8.5 + parent: 2 + - uid: 2346 + components: + - type: Transform + pos: 43.5,9.5 + parent: 2 + - uid: 2347 + components: + - type: Transform + pos: 43.5,10.5 + parent: 2 + - uid: 2348 + components: + - type: Transform + pos: 44.5,10.5 + parent: 2 + - uid: 2349 + components: + - type: Transform + pos: 45.5,10.5 + parent: 2 + - uid: 2350 + components: + - type: Transform + pos: 46.5,10.5 + parent: 2 + - uid: 2351 + components: + - type: Transform + pos: 44.5,7.5 + parent: 2 + - uid: 2352 + components: + - type: Transform + pos: 49.5,48.5 + parent: 2 + - uid: 2353 + components: + - type: Transform + pos: 48.5,45.5 + parent: 2 + - uid: 2354 + components: + - type: Transform + pos: 50.5,48.5 + parent: 2 + - uid: 2355 + components: + - type: Transform + pos: 48.5,48.5 + parent: 2 + - uid: 2356 + components: + - type: Transform + pos: 47.5,48.5 + parent: 2 + - uid: 2357 + components: + - type: Transform + pos: 46.5,48.5 + parent: 2 + - uid: 2358 + components: + - type: Transform + pos: 49.5,49.5 + parent: 2 + - uid: 2359 + components: + - type: Transform + pos: 48.5,47.5 + parent: 2 + - uid: 2360 + components: + - type: Transform + pos: 48.5,46.5 + parent: 2 + - uid: 2361 + components: + - type: Transform + pos: 48.5,44.5 + parent: 2 + - uid: 2362 + components: + - type: Transform + pos: 48.5,43.5 + parent: 2 + - uid: 2363 + components: + - type: Transform + pos: 48.5,42.5 + parent: 2 + - uid: 2364 + components: + - type: Transform + pos: 48.5,41.5 + parent: 2 + - uid: 2365 + components: + - type: Transform + pos: 48.5,40.5 + parent: 2 + - uid: 2366 + components: + - type: Transform + pos: 48.5,39.5 + parent: 2 + - uid: 2367 + components: + - type: Transform + pos: 48.5,38.5 + parent: 2 + - uid: 2368 + components: + - type: Transform + pos: 48.5,37.5 + parent: 2 + - uid: 2369 + components: + - type: Transform + pos: 47.5,37.5 + parent: 2 + - uid: 2370 + components: + - type: Transform + pos: 46.5,37.5 + parent: 2 + - uid: 2371 + components: + - type: Transform + pos: 45.5,37.5 + parent: 2 + - uid: 2372 + components: + - type: Transform + pos: 44.5,37.5 + parent: 2 + - uid: 2373 + components: + - type: Transform + pos: 43.5,37.5 + parent: 2 + - uid: 2374 + components: + - type: Transform + pos: 47.5,41.5 + parent: 2 + - uid: 2375 + components: + - type: Transform + pos: 46.5,41.5 + parent: 2 + - uid: 2376 + components: + - type: Transform + pos: 45.5,41.5 + parent: 2 + - uid: 2377 + components: + - type: Transform + pos: 44.5,41.5 + parent: 2 + - uid: 2378 + components: + - type: Transform + pos: 47.5,45.5 + parent: 2 + - uid: 2379 + components: + - type: Transform + pos: 46.5,45.5 + parent: 2 + - uid: 2380 + components: + - type: Transform + pos: 45.5,45.5 + parent: 2 + - uid: 2381 + components: + - type: Transform + pos: 44.5,45.5 + parent: 2 + - uid: 2382 + components: + - type: Transform + pos: 49.5,45.5 + parent: 2 + - uid: 2383 + components: + - type: Transform + pos: 50.5,45.5 + parent: 2 + - uid: 2384 + components: + - type: Transform + pos: 51.5,51.5 + parent: 2 + - uid: 2385 + components: + - type: Transform + pos: 50.5,51.5 + parent: 2 + - uid: 2386 + components: + - type: Transform + pos: 49.5,51.5 + parent: 2 + - uid: 2387 + components: + - type: Transform + pos: 50.5,50.5 + parent: 2 + - uid: 2388 + components: + - type: Transform + pos: 50.5,52.5 + parent: 2 + - uid: 2389 + components: + - type: Transform + pos: 50.5,53.5 + parent: 2 + - uid: 2390 + components: + - type: Transform + pos: 50.5,54.5 + parent: 2 + - uid: 2391 + components: + - type: Transform + pos: 54.5,52.5 + parent: 2 + - uid: 2392 + components: + - type: Transform + pos: 54.5,51.5 + parent: 2 + - uid: 2393 + components: + - type: Transform + pos: 54.5,50.5 + parent: 2 + - uid: 2394 + components: + - type: Transform + pos: 54.5,49.5 + parent: 2 + - uid: 2395 + components: + - type: Transform + pos: 54.5,48.5 + parent: 2 + - uid: 2396 + components: + - type: Transform + pos: 53.5,50.5 + parent: 2 + - uid: 2397 + components: + - type: Transform + pos: 52.5,50.5 + parent: 2 + - uid: 2398 + components: + - type: Transform + pos: 55.5,50.5 + parent: 2 + - uid: 2399 + components: + - type: Transform + pos: 54.5,47.5 + parent: 2 + - uid: 2400 + components: + - type: Transform + pos: 54.5,46.5 + parent: 2 + - uid: 2401 + components: + - type: Transform + pos: 54.5,45.5 + parent: 2 + - uid: 2402 + components: + - type: Transform + pos: 54.5,44.5 + parent: 2 + - uid: 2403 + components: + - type: Transform + pos: 54.5,43.5 + parent: 2 + - uid: 2404 + components: + - type: Transform + pos: 54.5,42.5 + parent: 2 + - uid: 2405 + components: + - type: Transform + pos: 53.5,42.5 + parent: 2 + - uid: 2406 + components: + - type: Transform + pos: 52.5,42.5 + parent: 2 + - uid: 2407 + components: + - type: Transform + pos: 55.5,42.5 + parent: 2 + - uid: 2408 + components: + - type: Transform + pos: 56.5,42.5 + parent: 2 + - uid: 2409 + components: + - type: Transform + pos: 57.5,42.5 + parent: 2 + - uid: 2410 + components: + - type: Transform + pos: 55.5,45.5 + parent: 2 + - uid: 2411 + components: + - type: Transform + pos: 56.5,45.5 + parent: 2 + - uid: 2412 + components: + - type: Transform + pos: 57.5,45.5 + parent: 2 + - uid: 2413 + components: + - type: Transform + pos: 53.5,45.5 + parent: 2 + - uid: 2414 + components: + - type: Transform + pos: 52.5,45.5 + parent: 2 + - uid: 2415 + components: + - type: Transform + pos: 63.5,43.5 + parent: 2 + - uid: 2416 + components: + - type: Transform + pos: 62.5,43.5 + parent: 2 + - uid: 2417 + components: + - type: Transform + pos: 61.5,43.5 + parent: 2 + - uid: 2418 + components: + - type: Transform + pos: 60.5,43.5 + parent: 2 + - uid: 2419 + components: + - type: Transform + pos: 59.5,43.5 + parent: 2 + - uid: 2420 + components: + - type: Transform + pos: 61.5,42.5 + parent: 2 + - uid: 2421 + components: + - type: Transform + pos: 61.5,41.5 + parent: 2 + - uid: 2422 + components: + - type: Transform + pos: 61.5,40.5 + parent: 2 + - uid: 2423 + components: + - type: Transform + pos: 61.5,39.5 + parent: 2 + - uid: 2424 + components: + - type: Transform + pos: 61.5,38.5 + parent: 2 + - uid: 2425 + components: + - type: Transform + pos: 61.5,37.5 + parent: 2 + - uid: 2426 + components: + - type: Transform + pos: 60.5,38.5 + parent: 2 + - uid: 2427 + components: + - type: Transform + pos: 59.5,38.5 + parent: 2 + - uid: 2428 + components: + - type: Transform + pos: 57.5,38.5 + parent: 2 + - uid: 2429 + components: + - type: Transform + pos: 56.5,38.5 + parent: 2 + - uid: 2430 + components: + - type: Transform + pos: 55.5,38.5 + parent: 2 + - uid: 2431 + components: + - type: Transform + pos: 54.5,38.5 + parent: 2 + - uid: 2432 + components: + - type: Transform + pos: 53.5,38.5 + parent: 2 + - uid: 2433 + components: + - type: Transform + pos: 52.5,38.5 + parent: 2 + - uid: 2434 + components: + - type: Transform + pos: 51.5,38.5 + parent: 2 + - uid: 2435 + components: + - type: Transform + pos: 50.5,38.5 + parent: 2 + - uid: 2436 + components: + - type: Transform + pos: 50.5,39.5 + parent: 2 + - uid: 2437 + components: + - type: Transform + pos: 50.5,40.5 + parent: 2 + - uid: 2438 + components: + - type: Transform + pos: 50.5,37.5 + parent: 2 + - uid: 2439 + components: + - type: Transform + pos: 50.5,36.5 + parent: 2 + - uid: 2440 + components: + - type: Transform + pos: 57.5,35.5 + parent: 2 + - uid: 2441 + components: + - type: Transform + pos: 57.5,39.5 + parent: 2 + - uid: 2442 + components: + - type: Transform + pos: 57.5,40.5 + parent: 2 + - uid: 2443 + components: + - type: Transform + pos: 57.5,34.5 + parent: 2 + - uid: 2444 + components: + - type: Transform + pos: 57.5,36.5 + parent: 2 + - uid: 2445 + components: + - type: Transform + pos: 57.5,37.5 + parent: 2 + - uid: 2446 + components: + - type: Transform + pos: 56.5,34.5 + parent: 2 + - uid: 2447 + components: + - type: Transform + pos: 55.5,34.5 + parent: 2 + - uid: 2448 + components: + - type: Transform + pos: 54.5,34.5 + parent: 2 + - uid: 2449 + components: + - type: Transform + pos: 53.5,34.5 + parent: 2 + - uid: 2450 + components: + - type: Transform + pos: 52.5,34.5 + parent: 2 + - uid: 2451 + components: + - type: Transform + pos: 51.5,34.5 + parent: 2 + - uid: 2452 + components: + - type: Transform + pos: 50.5,34.5 + parent: 2 + - uid: 2453 + components: + - type: Transform + pos: 49.5,34.5 + parent: 2 + - uid: 2454 + components: + - type: Transform + pos: 48.5,34.5 + parent: 2 + - uid: 2455 + components: + - type: Transform + pos: 47.5,34.5 + parent: 2 + - uid: 2456 + components: + - type: Transform + pos: 46.5,34.5 + parent: 2 + - uid: 2457 + components: + - type: Transform + pos: 45.5,34.5 + parent: 2 + - uid: 2458 + components: + - type: Transform + pos: 44.5,34.5 + parent: 2 + - uid: 2459 + components: + - type: Transform + pos: 43.5,34.5 + parent: 2 + - uid: 2460 + components: + - type: Transform + pos: 42.5,34.5 + parent: 2 + - uid: 2461 + components: + - type: Transform + pos: 41.5,34.5 + parent: 2 + - uid: 2462 + components: + - type: Transform + pos: 40.5,34.5 + parent: 2 + - uid: 2463 + components: + - type: Transform + pos: 39.5,34.5 + parent: 2 + - uid: 2464 + components: + - type: Transform + pos: 38.5,34.5 + parent: 2 + - uid: 2465 + components: + - type: Transform + pos: 37.5,34.5 + parent: 2 + - uid: 2466 + components: + - type: Transform + pos: 36.5,34.5 + parent: 2 + - uid: 2467 + components: + - type: Transform + pos: 35.5,34.5 + parent: 2 + - uid: 2468 + components: + - type: Transform + pos: 50.5,35.5 + parent: 2 + - uid: 2469 + components: + - type: Transform + pos: 58.5,34.5 + parent: 2 + - uid: 2470 + components: + - type: Transform + pos: 59.5,34.5 + parent: 2 + - uid: 2471 + components: + - type: Transform + pos: 60.5,34.5 + parent: 2 + - uid: 2472 + components: + - type: Transform + pos: 61.5,34.5 + parent: 2 + - uid: 2473 + components: + - type: Transform + pos: 62.5,34.5 + parent: 2 + - uid: 2474 + components: + - type: Transform + pos: 63.5,34.5 + parent: 2 + - uid: 2475 + components: + - type: Transform + pos: 64.5,34.5 + parent: 2 + - uid: 2476 + components: + - type: Transform + pos: 65.5,34.5 + parent: 2 + - uid: 2477 + components: + - type: Transform + pos: 45.5,53.5 + parent: 2 + - uid: 2478 + components: + - type: Transform + pos: 46.5,53.5 + parent: 2 + - uid: 2479 + components: + - type: Transform + pos: 46.5,52.5 + parent: 2 + - uid: 2480 + components: + - type: Transform + pos: 46.5,51.5 + parent: 2 + - uid: 2481 + components: + - type: Transform + pos: 45.5,51.5 + parent: 2 + - uid: 2482 + components: + - type: Transform + pos: 44.5,51.5 + parent: 2 + - uid: 2483 + components: + - type: Transform + pos: 44.5,50.5 + parent: 2 + - uid: 2484 + components: + - type: Transform + pos: 44.5,49.5 + parent: 2 + - uid: 2485 + components: + - type: Transform + pos: 44.5,48.5 + parent: 2 + - uid: 2486 + components: + - type: Transform + pos: 44.5,47.5 + parent: 2 + - uid: 2487 + components: + - type: Transform + pos: 46.5,54.5 + parent: 2 + - uid: 2488 + components: + - type: Transform + pos: 46.5,55.5 + parent: 2 + - uid: 2489 + components: + - type: Transform + pos: 46.5,56.5 + parent: 2 + - uid: 2490 + components: + - type: Transform + pos: 47.5,56.5 + parent: 2 + - uid: 2491 + components: + - type: Transform + pos: 48.5,56.5 + parent: 2 + - uid: 2492 + components: + - type: Transform + pos: 49.5,56.5 + parent: 2 + - uid: 2493 + components: + - type: Transform + pos: 50.5,56.5 + parent: 2 + - uid: 2494 + components: + - type: Transform + pos: 51.5,56.5 + parent: 2 + - uid: 2495 + components: + - type: Transform + pos: 52.5,56.5 + parent: 2 + - uid: 2496 + components: + - type: Transform + pos: 53.5,56.5 + parent: 2 + - uid: 2497 + components: + - type: Transform + pos: 51.5,57.5 + parent: 2 + - uid: 2498 + components: + - type: Transform + pos: 51.5,58.5 + parent: 2 + - uid: 2499 + components: + - type: Transform + pos: 51.5,59.5 + parent: 2 + - uid: 2500 + components: + - type: Transform + pos: 48.5,57.5 + parent: 2 + - uid: 2501 + components: + - type: Transform + pos: 48.5,58.5 + parent: 2 + - uid: 2502 + components: + - type: Transform + pos: 48.5,59.5 + parent: 2 + - uid: 2503 + components: + - type: Transform + pos: 48.5,60.5 + parent: 2 + - uid: 2504 + components: + - type: Transform + pos: 48.5,61.5 + parent: 2 + - uid: 2505 + components: + - type: Transform + pos: 53.5,57.5 + parent: 2 + - uid: 2506 + components: + - type: Transform + pos: 54.5,57.5 + parent: 2 + - uid: 2507 + components: + - type: Transform + pos: 55.5,57.5 + parent: 2 + - uid: 2508 + components: + - type: Transform + pos: 56.5,57.5 + parent: 2 + - uid: 2509 + components: + - type: Transform + pos: 57.5,57.5 + parent: 2 + - uid: 2510 + components: + - type: Transform + pos: 56.5,56.5 + parent: 2 + - uid: 2511 + components: + - type: Transform + pos: 56.5,55.5 + parent: 2 + - uid: 2512 + components: + - type: Transform + pos: 53.5,55.5 + parent: 2 + - uid: 2513 + components: + - type: Transform + pos: 53.5,54.5 + parent: 2 + - uid: 2514 + components: + - type: Transform + pos: 53.5,53.5 + parent: 2 + - uid: 2515 + components: + - type: Transform + pos: 54.5,53.5 + parent: 2 + - uid: 2516 + components: + - type: Transform + pos: 55.5,53.5 + parent: 2 + - uid: 2517 + components: + - type: Transform + pos: 56.5,53.5 + parent: 2 + - uid: 2518 + components: + - type: Transform + pos: 57.5,53.5 + parent: 2 + - uid: 2519 + components: + - type: Transform + pos: 58.5,53.5 + parent: 2 + - uid: 2520 + components: + - type: Transform + pos: 59.5,52.5 + parent: 2 + - uid: 2521 + components: + - type: Transform + pos: 58.5,52.5 + parent: 2 + - uid: 2522 + components: + - type: Transform + pos: 60.5,52.5 + parent: 2 + - uid: 2523 + components: + - type: Transform + pos: 61.5,52.5 + parent: 2 + - uid: 2524 + components: + - type: Transform + pos: 62.5,52.5 + parent: 2 + - uid: 2525 + components: + - type: Transform + pos: 61.5,53.5 + parent: 2 + - uid: 2526 + components: + - type: Transform + pos: 61.5,51.5 + parent: 2 + - uid: 2527 + components: + - type: Transform + pos: 61.5,50.5 + parent: 2 + - uid: 2528 + components: + - type: Transform + pos: 61.5,54.5 + parent: 2 + - uid: 2529 + components: + - type: Transform + pos: 57.5,52.5 + parent: 2 + - uid: 2530 + components: + - type: Transform + pos: 57.5,51.5 + parent: 2 + - uid: 2531 + components: + - type: Transform + pos: 57.5,50.5 + parent: 2 + - uid: 2532 + components: + - type: Transform + pos: 57.5,49.5 + parent: 2 + - uid: 2533 + components: + - type: Transform + pos: 57.5,48.5 + parent: 2 + - uid: 2534 + components: + - type: Transform + pos: 58.5,48.5 + parent: 2 + - uid: 2535 + components: + - type: Transform + pos: 59.5,48.5 + parent: 2 + - uid: 2536 + components: + - type: Transform + pos: 59.5,47.5 + parent: 2 + - uid: 2537 + components: + - type: Transform + pos: 60.5,47.5 + parent: 2 + - uid: 2538 + components: + - type: Transform + pos: 61.5,47.5 + parent: 2 + - uid: 2539 + components: + - type: Transform + pos: 62.5,47.5 + parent: 2 + - uid: 2540 + components: + - type: Transform + pos: 45.5,56.5 + parent: 2 + - uid: 2541 + components: + - type: Transform + pos: 44.5,56.5 + parent: 2 + - uid: 2542 + components: + - type: Transform + pos: 43.5,56.5 + parent: 2 + - uid: 2543 + components: + - type: Transform + pos: 42.5,56.5 + parent: 2 + - uid: 2544 + components: + - type: Transform + pos: 41.5,56.5 + parent: 2 + - uid: 2545 + components: + - type: Transform + pos: 40.5,56.5 + parent: 2 + - uid: 2546 + components: + - type: Transform + pos: 40.5,57.5 + parent: 2 + - uid: 2547 + components: + - type: Transform + pos: 39.5,52.5 + parent: 2 + - uid: 2548 + components: + - type: Transform + pos: 39.5,58.5 + parent: 2 + - uid: 2549 + components: + - type: Transform + pos: 39.5,59.5 + parent: 2 + - uid: 2550 + components: + - type: Transform + pos: 36.5,64.5 + parent: 2 + - uid: 2551 + components: + - type: Transform + pos: 35.5,64.5 + parent: 2 + - uid: 2552 + components: + - type: Transform + pos: 40.5,58.5 + parent: 2 + - uid: 2553 + components: + - type: Transform + pos: 41.5,58.5 + parent: 2 + - uid: 2554 + components: + - type: Transform + pos: 41.5,59.5 + parent: 2 + - uid: 2555 + components: + - type: Transform + pos: 41.5,60.5 + parent: 2 + - uid: 2556 + components: + - type: Transform + pos: 41.5,61.5 + parent: 2 + - uid: 2557 + components: + - type: Transform + pos: 41.5,62.5 + parent: 2 + - uid: 2558 + components: + - type: Transform + pos: 42.5,59.5 + parent: 2 + - uid: 2559 + components: + - type: Transform + pos: 43.5,59.5 + parent: 2 + - uid: 2560 + components: + - type: Transform + pos: 44.5,59.5 + parent: 2 + - uid: 2561 + components: + - type: Transform + pos: 45.5,59.5 + parent: 2 + - uid: 2562 + components: + - type: Transform + pos: 42.5,62.5 + parent: 2 + - uid: 2563 + components: + - type: Transform + pos: 43.5,62.5 + parent: 2 + - uid: 2564 + components: + - type: Transform + pos: 44.5,62.5 + parent: 2 + - uid: 2565 + components: + - type: Transform + pos: 45.5,62.5 + parent: 2 + - uid: 2566 + components: + - type: Transform + pos: 44.5,63.5 + parent: 2 + - uid: 2567 + components: + - type: Transform + pos: 44.5,64.5 + parent: 2 + - uid: 2568 + components: + - type: Transform + pos: 44.5,65.5 + parent: 2 + - uid: 2569 + components: + - type: Transform + pos: 44.5,66.5 + parent: 2 + - uid: 2570 + components: + - type: Transform + pos: 40.5,62.5 + parent: 2 + - uid: 2571 + components: + - type: Transform + pos: 39.5,62.5 + parent: 2 + - uid: 2572 + components: + - type: Transform + pos: 39.5,63.5 + parent: 2 + - uid: 2573 + components: + - type: Transform + pos: 39.5,64.5 + parent: 2 + - uid: 2574 + components: + - type: Transform + pos: 39.5,65.5 + parent: 2 + - uid: 2575 + components: + - type: Transform + pos: 39.5,66.5 + parent: 2 + - uid: 2576 + components: + - type: Transform + pos: 38.5,65.5 + parent: 2 + - uid: 2577 + components: + - type: Transform + pos: 40.5,65.5 + parent: 2 + - uid: 2578 + components: + - type: Transform + pos: 39.5,61.5 + parent: 2 + - uid: 2579 + components: + - type: Transform + pos: 39.5,60.5 + parent: 2 + - uid: 2580 + components: + - type: Transform + pos: 39.5,59.5 + parent: 2 + - uid: 2581 + components: + - type: Transform + pos: 34.5,64.5 + parent: 2 + - uid: 2582 + components: + - type: Transform + pos: 33.5,64.5 + parent: 2 + - uid: 2583 + components: + - type: Transform + pos: 32.5,64.5 + parent: 2 + - uid: 2584 + components: + - type: Transform + pos: 31.5,64.5 + parent: 2 + - uid: 2585 + components: + - type: Transform + pos: 33.5,67.5 + parent: 2 + - uid: 2586 + components: + - type: Transform + pos: 33.5,68.5 + parent: 2 + - uid: 2587 + components: + - type: Transform + pos: 33.5,69.5 + parent: 2 + - uid: 2588 + components: + - type: Transform + pos: 33.5,63.5 + parent: 2 + - uid: 2589 + components: + - type: Transform + pos: 33.5,62.5 + parent: 2 + - uid: 2590 + components: + - type: Transform + pos: 33.5,61.5 + parent: 2 + - uid: 2591 + components: + - type: Transform + pos: 33.5,60.5 + parent: 2 + - uid: 2592 + components: + - type: Transform + pos: 34.5,60.5 + parent: 2 + - uid: 2593 + components: + - type: Transform + pos: 35.5,60.5 + parent: 2 + - uid: 2594 + components: + - type: Transform + pos: 35.5,59.5 + parent: 2 + - uid: 2595 + components: + - type: Transform + pos: 37.5,59.5 + parent: 2 + - uid: 2596 + components: + - type: Transform + pos: 36.5,59.5 + parent: 2 + - uid: 2597 + components: + - type: Transform + pos: 32.5,60.5 + parent: 2 + - uid: 2598 + components: + - type: Transform + pos: 31.5,60.5 + parent: 2 + - uid: 2599 + components: + - type: Transform + pos: 30.5,60.5 + parent: 2 + - uid: 2600 + components: + - type: Transform + pos: 29.5,60.5 + parent: 2 + - uid: 2601 + components: + - type: Transform + pos: 28.5,60.5 + parent: 2 + - uid: 2602 + components: + - type: Transform + pos: 27.5,60.5 + parent: 2 + - uid: 2603 + components: + - type: Transform + pos: 26.5,60.5 + parent: 2 + - uid: 2604 + components: + - type: Transform + pos: 28.5,61.5 + parent: 2 + - uid: 2605 + components: + - type: Transform + pos: 28.5,62.5 + parent: 2 + - uid: 2606 + components: + - type: Transform + pos: 28.5,63.5 + parent: 2 + - uid: 2607 + components: + - type: Transform + pos: 28.5,64.5 + parent: 2 + - uid: 2608 + components: + - type: Transform + pos: 28.5,65.5 + parent: 2 + - uid: 2609 + components: + - type: Transform + pos: 28.5,66.5 + parent: 2 + - uid: 2610 + components: + - type: Transform + pos: 27.5,64.5 + parent: 2 + - uid: 2611 + components: + - type: Transform + pos: 26.5,64.5 + parent: 2 + - uid: 2612 + components: + - type: Transform + pos: 26.5,65.5 + parent: 2 + - uid: 2613 + components: + - type: Transform + pos: 26.5,66.5 + parent: 2 + - uid: 2614 + components: + - type: Transform + pos: 26.5,67.5 + parent: 2 + - uid: 2615 + components: + - type: Transform + pos: 25.5,67.5 + parent: 2 + - uid: 2616 + components: + - type: Transform + pos: 24.5,67.5 + parent: 2 + - uid: 2617 + components: + - type: Transform + pos: 25.5,60.5 + parent: 2 + - uid: 2618 + components: + - type: Transform + pos: 24.5,60.5 + parent: 2 + - uid: 2619 + components: + - type: Transform + pos: 23.5,60.5 + parent: 2 + - uid: 2620 + components: + - type: Transform + pos: 22.5,60.5 + parent: 2 + - uid: 2621 + components: + - type: Transform + pos: 21.5,60.5 + parent: 2 + - uid: 2622 + components: + - type: Transform + pos: 20.5,60.5 + parent: 2 + - uid: 2623 + components: + - type: Transform + pos: 24.5,61.5 + parent: 2 + - uid: 2624 + components: + - type: Transform + pos: 24.5,62.5 + parent: 2 + - uid: 2625 + components: + - type: Transform + pos: 24.5,63.5 + parent: 2 + - uid: 2626 + components: + - type: Transform + pos: 24.5,64.5 + parent: 2 + - uid: 2627 + components: + - type: Transform + pos: 24.5,65.5 + parent: 2 + - uid: 2628 + components: + - type: Transform + pos: 12.5,74.5 + parent: 2 + - uid: 2629 + components: + - type: Transform + pos: 13.5,74.5 + parent: 2 + - uid: 2630 + components: + - type: Transform + pos: 14.5,74.5 + parent: 2 + - uid: 2631 + components: + - type: Transform + pos: 15.5,74.5 + parent: 2 + - uid: 2632 + components: + - type: Transform + pos: 16.5,74.5 + parent: 2 + - uid: 2633 + components: + - type: Transform + pos: 14.5,75.5 + parent: 2 + - uid: 2634 + components: + - type: Transform + pos: 14.5,76.5 + parent: 2 + - uid: 2635 + components: + - type: Transform + pos: 14.5,77.5 + parent: 2 + - uid: 2636 + components: + - type: Transform + pos: 14.5,78.5 + parent: 2 + - uid: 2637 + components: + - type: Transform + pos: 14.5,73.5 + parent: 2 + - uid: 2638 + components: + - type: Transform + pos: 14.5,72.5 + parent: 2 + - uid: 2639 + components: + - type: Transform + pos: 14.5,71.5 + parent: 2 + - uid: 2640 + components: + - type: Transform + pos: 14.5,70.5 + parent: 2 + - uid: 2641 + components: + - type: Transform + pos: 14.5,69.5 + parent: 2 + - uid: 2642 + components: + - type: Transform + pos: 14.5,68.5 + parent: 2 + - uid: 2643 + components: + - type: Transform + pos: 13.5,68.5 + parent: 2 + - uid: 2644 + components: + - type: Transform + pos: 13.5,67.5 + parent: 2 + - uid: 2645 + components: + - type: Transform + pos: 13.5,66.5 + parent: 2 + - uid: 2646 + components: + - type: Transform + pos: 14.5,66.5 + parent: 2 + - uid: 2647 + components: + - type: Transform + pos: 13.5,64.5 + parent: 2 + - uid: 2648 + components: + - type: Transform + pos: 12.5,64.5 + parent: 2 + - uid: 2649 + components: + - type: Transform + pos: 11.5,64.5 + parent: 2 + - uid: 2650 + components: + - type: Transform + pos: 10.5,64.5 + parent: 2 + - uid: 2651 + components: + - type: Transform + pos: 9.5,64.5 + parent: 2 + - uid: 2652 + components: + - type: Transform + pos: 8.5,64.5 + parent: 2 + - uid: 2653 + components: + - type: Transform + pos: 14.5,65.5 + parent: 2 + - uid: 2654 + components: + - type: Transform + pos: 15.5,65.5 + parent: 2 + - uid: 2655 + components: + - type: Transform + pos: 16.5,65.5 + parent: 2 + - uid: 2656 + components: + - type: Transform + pos: 17.5,65.5 + parent: 2 + - uid: 2657 + components: + - type: Transform + pos: 18.5,65.5 + parent: 2 + - uid: 2658 + components: + - type: Transform + pos: 17.5,66.5 + parent: 2 + - uid: 2659 + components: + - type: Transform + pos: 17.5,67.5 + parent: 2 + - uid: 2660 + components: + - type: Transform + pos: 17.5,68.5 + parent: 2 + - uid: 2661 + components: + - type: Transform + pos: 17.5,69.5 + parent: 2 + - uid: 2662 + components: + - type: Transform + pos: 16.5,69.5 + parent: 2 + - uid: 2663 + components: + - type: Transform + pos: 16.5,70.5 + parent: 2 + - uid: 2664 + components: + - type: Transform + pos: 16.5,71.5 + parent: 2 + - uid: 2665 + components: + - type: Transform + pos: 16.5,72.5 + parent: 2 + - uid: 2666 + components: + - type: Transform + pos: 16.5,73.5 + parent: 2 + - uid: 2667 + components: + - type: Transform + pos: 16.5,74.5 + parent: 2 + - uid: 2668 + components: + - type: Transform + pos: 23.5,49.5 + parent: 2 + - uid: 2669 + components: + - type: Transform + pos: 23.5,50.5 + parent: 2 + - uid: 2670 + components: + - type: Transform + pos: 23.5,48.5 + parent: 2 + - uid: 2671 + components: + - type: Transform + pos: 22.5,48.5 + parent: 2 + - uid: 2672 + components: + - type: Transform + pos: 21.5,48.5 + parent: 2 + - uid: 2673 + components: + - type: Transform + pos: 20.5,48.5 + parent: 2 + - uid: 2674 + components: + - type: Transform + pos: 19.5,48.5 + parent: 2 + - uid: 2675 + components: + - type: Transform + pos: 18.5,48.5 + parent: 2 + - uid: 2676 + components: + - type: Transform + pos: 17.5,48.5 + parent: 2 + - uid: 2677 + components: + - type: Transform + pos: 16.5,48.5 + parent: 2 + - uid: 2678 + components: + - type: Transform + pos: 15.5,48.5 + parent: 2 + - uid: 2679 + components: + - type: Transform + pos: 14.5,48.5 + parent: 2 + - uid: 2680 + components: + - type: Transform + pos: 13.5,48.5 + parent: 2 + - uid: 2681 + components: + - type: Transform + pos: 12.5,48.5 + parent: 2 + - uid: 2682 + components: + - type: Transform + pos: 11.5,48.5 + parent: 2 + - uid: 2683 + components: + - type: Transform + pos: 10.5,48.5 + parent: 2 + - uid: 2684 + components: + - type: Transform + pos: 9.5,48.5 + parent: 2 + - uid: 2685 + components: + - type: Transform + pos: 8.5,48.5 + parent: 2 + - uid: 2686 + components: + - type: Transform + pos: 7.5,48.5 + parent: 2 + - uid: 2687 + components: + - type: Transform + pos: 6.5,48.5 + parent: 2 + - uid: 2688 + components: + - type: Transform + pos: 5.5,48.5 + parent: 2 + - uid: 2689 + components: + - type: Transform + pos: 24.5,48.5 + parent: 2 + - uid: 2690 + components: + - type: Transform + pos: 25.5,48.5 + parent: 2 + - uid: 2691 + components: + - type: Transform + pos: 26.5,48.5 + parent: 2 + - uid: 2692 + components: + - type: Transform + pos: 27.5,48.5 + parent: 2 + - uid: 2693 + components: + - type: Transform + pos: 28.5,48.5 + parent: 2 + - uid: 2694 + components: + - type: Transform + pos: 29.5,48.5 + parent: 2 + - uid: 2695 + components: + - type: Transform + pos: 30.5,48.5 + parent: 2 + - uid: 2696 + components: + - type: Transform + pos: 31.5,48.5 + parent: 2 + - uid: 2697 + components: + - type: Transform + pos: 32.5,48.5 + parent: 2 + - uid: 2698 + components: + - type: Transform + pos: 33.5,48.5 + parent: 2 + - uid: 2699 + components: + - type: Transform + pos: 34.5,48.5 + parent: 2 + - uid: 2700 + components: + - type: Transform + pos: 35.5,48.5 + parent: 2 + - uid: 2701 + components: + - type: Transform + pos: 36.5,48.5 + parent: 2 + - uid: 2702 + components: + - type: Transform + pos: 37.5,48.5 + parent: 2 + - uid: 2703 + components: + - type: Transform + pos: 38.5,48.5 + parent: 2 + - uid: 2704 + components: + - type: Transform + pos: 39.5,48.5 + parent: 2 + - uid: 2705 + components: + - type: Transform + pos: 40.5,48.5 + parent: 2 + - uid: 2706 + components: + - type: Transform + pos: 41.5,48.5 + parent: 2 + - uid: 2707 + components: + - type: Transform + pos: 42.5,48.5 + parent: 2 + - uid: 2708 + components: + - type: Transform + pos: -6.5,50.5 + parent: 2 + - uid: 2709 + components: + - type: Transform + pos: -4.5,50.5 + parent: 2 + - uid: 2710 + components: + - type: Transform + pos: -3.5,50.5 + parent: 2 + - uid: 2711 + components: + - type: Transform + pos: -2.5,50.5 + parent: 2 + - uid: 2712 + components: + - type: Transform + pos: -1.5,50.5 + parent: 2 + - uid: 2713 + components: + - type: Transform + pos: -0.5,50.5 + parent: 2 + - uid: 2714 + components: + - type: Transform + pos: 0.5,50.5 + parent: 2 + - uid: 2715 + components: + - type: Transform + pos: -0.5,51.5 + parent: 2 + - uid: 2716 + components: + - type: Transform + pos: -4.5,51.5 + parent: 2 + - uid: 2717 + components: + - type: Transform + pos: 31.5,57.5 + parent: 2 + - uid: 2718 + components: + - type: Transform + pos: 31.5,56.5 + parent: 2 + - uid: 2719 + components: + - type: Transform + pos: 31.5,55.5 + parent: 2 + - uid: 2720 + components: + - type: Transform + pos: 31.5,54.5 + parent: 2 + - uid: 2721 + components: + - type: Transform + pos: 31.5,53.5 + parent: 2 + - uid: 2722 + components: + - type: Transform + pos: 30.5,53.5 + parent: 2 + - uid: 2723 + components: + - type: Transform + pos: 29.5,53.5 + parent: 2 + - uid: 2724 + components: + - type: Transform + pos: 29.5,54.5 + parent: 2 + - uid: 2725 + components: + - type: Transform + pos: 29.5,55.5 + parent: 2 + - uid: 2726 + components: + - type: Transform + pos: 29.5,56.5 + parent: 2 + - uid: 2727 + components: + - type: Transform + pos: 30.5,56.5 + parent: 2 + - uid: 2728 + components: + - type: Transform + pos: 30.5,52.5 + parent: 2 + - uid: 2729 + components: + - type: Transform + pos: 30.5,51.5 + parent: 2 + - uid: 2730 + components: + - type: Transform + pos: 30.5,50.5 + parent: 2 + - uid: 2731 + components: + - type: Transform + pos: 37.5,45.5 + parent: 2 + - uid: 2732 + components: + - type: Transform + pos: 37.5,42.5 + parent: 2 + - uid: 2733 + components: + - type: Transform + pos: 37.5,43.5 + parent: 2 + - uid: 2734 + components: + - type: Transform + pos: 38.5,44.5 + parent: 2 + - uid: 2735 + components: + - type: Transform + pos: 36.5,44.5 + parent: 2 + - uid: 2736 + components: + - type: Transform + pos: 35.5,44.5 + parent: 2 + - uid: 2737 + components: + - type: Transform + pos: 37.5,41.5 + parent: 2 + - uid: 2738 + components: + - type: Transform + pos: 37.5,40.5 + parent: 2 + - uid: 2739 + components: + - type: Transform + pos: 37.5,39.5 + parent: 2 + - uid: 2740 + components: + - type: Transform + pos: 37.5,38.5 + parent: 2 + - uid: 2741 + components: + - type: Transform + pos: 37.5,37.5 + parent: 2 + - uid: 2742 + components: + - type: Transform + pos: 38.5,40.5 + parent: 2 + - uid: 2743 + components: + - type: Transform + pos: 39.5,40.5 + parent: 2 + - uid: 2744 + components: + - type: Transform + pos: 40.5,40.5 + parent: 2 + - uid: 2745 + components: + - type: Transform + pos: 41.5,40.5 + parent: 2 + - uid: 2746 + components: + - type: Transform + pos: 36.5,40.5 + parent: 2 + - uid: 2747 + components: + - type: Transform + pos: 35.5,40.5 + parent: 2 + - uid: 2748 + components: + - type: Transform + pos: 38.5,37.5 + parent: 2 + - uid: 2749 + components: + - type: Transform + pos: 39.5,37.5 + parent: 2 + - uid: 2750 + components: + - type: Transform + pos: 40.5,37.5 + parent: 2 + - uid: 2751 + components: + - type: Transform + pos: 41.5,37.5 + parent: 2 + - uid: 2752 + components: + - type: Transform + pos: 41.5,41.5 + parent: 2 + - uid: 2753 + components: + - type: Transform + pos: 41.5,42.5 + parent: 2 + - uid: 2754 + components: + - type: Transform + pos: 41.5,43.5 + parent: 2 + - uid: 2755 + components: + - type: Transform + pos: 41.5,44.5 + parent: 2 + - uid: 2756 + components: + - type: Transform + pos: 41.5,45.5 + parent: 2 + - uid: 2757 + components: + - type: Transform + pos: 34.5,44.5 + parent: 2 + - uid: 2758 + components: + - type: Transform + pos: 33.5,44.5 + parent: 2 + - uid: 2759 + components: + - type: Transform + pos: 32.5,44.5 + parent: 2 + - uid: 2760 + components: + - type: Transform + pos: 32.5,45.5 + parent: 2 + - uid: 2761 + components: + - type: Transform + pos: 32.5,46.5 + parent: 2 + - uid: 2762 + components: + - type: Transform + pos: 32.5,43.5 + parent: 2 + - uid: 2763 + components: + - type: Transform + pos: 32.5,42.5 + parent: 2 + - uid: 2764 + components: + - type: Transform + pos: 32.5,41.5 + parent: 2 + - uid: 2765 + components: + - type: Transform + pos: 32.5,40.5 + parent: 2 + - uid: 2766 + components: + - type: Transform + pos: 32.5,39.5 + parent: 2 + - uid: 2767 + components: + - type: Transform + pos: 32.5,38.5 + parent: 2 + - uid: 2768 + components: + - type: Transform + pos: 32.5,37.5 + parent: 2 + - uid: 2769 + components: + - type: Transform + pos: 32.5,36.5 + parent: 2 + - uid: 2770 + components: + - type: Transform + pos: 32.5,35.5 + parent: 2 + - uid: 2771 + components: + - type: Transform + pos: 32.5,34.5 + parent: 2 + - uid: 2772 + components: + - type: Transform + pos: 32.5,33.5 + parent: 2 + - uid: 2773 + components: + - type: Transform + pos: 32.5,32.5 + parent: 2 + - uid: 2774 + components: + - type: Transform + pos: 32.5,31.5 + parent: 2 + - uid: 2775 + components: + - type: Transform + pos: 32.5,30.5 + parent: 2 + - uid: 2776 + components: + - type: Transform + pos: 32.5,29.5 + parent: 2 + - uid: 2777 + components: + - type: Transform + pos: 32.5,28.5 + parent: 2 + - uid: 2778 + components: + - type: Transform + pos: 32.5,27.5 + parent: 2 + - uid: 2779 + components: + - type: Transform + pos: 32.5,26.5 + parent: 2 + - uid: 2780 + components: + - type: Transform + pos: 32.5,25.5 + parent: 2 + - uid: 2781 + components: + - type: Transform + pos: 32.5,24.5 + parent: 2 + - uid: 2782 + components: + - type: Transform + pos: 40.5,53.5 + parent: 2 + - uid: 2783 + components: + - type: Transform + pos: 39.5,53.5 + parent: 2 + - uid: 2784 + components: + - type: Transform + pos: 39.5,54.5 + parent: 2 + - uid: 2785 + components: + - type: Transform + pos: 39.5,55.5 + parent: 2 + - uid: 2786 + components: + - type: Transform + pos: 39.5,51.5 + parent: 2 + - uid: 2787 + components: + - type: Transform + pos: 40.5,51.5 + parent: 2 + - uid: 2788 + components: + - type: Transform + pos: 41.5,51.5 + parent: 2 + - uid: 2789 + components: + - type: Transform + pos: 42.5,51.5 + parent: 2 + - uid: 2790 + components: + - type: Transform + pos: 41.5,53.5 + parent: 2 + - uid: 2791 + components: + - type: Transform + pos: 42.5,53.5 + parent: 2 + - uid: 2792 + components: + - type: Transform + pos: 43.5,53.5 + parent: 2 + - uid: 2793 + components: + - type: Transform + pos: 41.5,33.5 + parent: 2 + - uid: 2794 + components: + - type: Transform + pos: 41.5,32.5 + parent: 2 + - uid: 2795 + components: + - type: Transform + pos: 41.5,31.5 + parent: 2 + - uid: 2796 + components: + - type: Transform + pos: 42.5,31.5 + parent: 2 + - uid: 2797 + components: + - type: Transform + pos: 43.5,31.5 + parent: 2 + - uid: 2798 + components: + - type: Transform + pos: 38.5,31.5 + parent: 2 + - uid: 2799 + components: + - type: Transform + pos: 38.5,30.5 + parent: 2 + - uid: 2800 + components: + - type: Transform + pos: 38.5,29.5 + parent: 2 + - uid: 2801 + components: + - type: Transform + pos: 38.5,28.5 + parent: 2 + - uid: 2802 + components: + - type: Transform + pos: 38.5,27.5 + parent: 2 + - uid: 2803 + components: + - type: Transform + pos: 39.5,28.5 + parent: 2 + - uid: 2804 + components: + - type: Transform + pos: 40.5,28.5 + parent: 2 + - uid: 2805 + components: + - type: Transform + pos: 41.5,28.5 + parent: 2 + - uid: 2806 + components: + - type: Transform + pos: 42.5,28.5 + parent: 2 + - uid: 2807 + components: + - type: Transform + pos: -10.5,47.5 + parent: 2 + - uid: 2808 + components: + - type: Transform + pos: -10.5,48.5 + parent: 2 + - uid: 2809 + components: + - type: Transform + pos: -11.5,48.5 + parent: 2 + - uid: 2810 + components: + - type: Transform + pos: -12.5,48.5 + parent: 2 + - uid: 2811 + components: + - type: Transform + pos: -13.5,48.5 + parent: 2 + - uid: 2812 + components: + - type: Transform + pos: -14.5,48.5 + parent: 2 + - uid: 2813 + components: + - type: Transform + pos: -15.5,48.5 + parent: 2 + - uid: 2814 + components: + - type: Transform + pos: -16.5,48.5 + parent: 2 + - uid: 2815 + components: + - type: Transform + pos: -9.5,48.5 + parent: 2 + - uid: 2816 + components: + - type: Transform + pos: -8.5,48.5 + parent: 2 + - uid: 2817 + components: + - type: Transform + pos: -7.5,48.5 + parent: 2 + - uid: 2818 + components: + - type: Transform + pos: -6.5,48.5 + parent: 2 + - uid: 2819 + components: + - type: Transform + pos: -5.5,48.5 + parent: 2 + - uid: 2820 + components: + - type: Transform + pos: -4.5,48.5 + parent: 2 + - uid: 2821 + components: + - type: Transform + pos: -3.5,48.5 + parent: 2 + - uid: 2822 + components: + - type: Transform + pos: -2.5,48.5 + parent: 2 + - uid: 2823 + components: + - type: Transform + pos: -1.5,48.5 + parent: 2 + - uid: 2824 + components: + - type: Transform + pos: -0.5,48.5 + parent: 2 + - uid: 2825 + components: + - type: Transform + pos: 0.5,48.5 + parent: 2 + - uid: 2826 + components: + - type: Transform + pos: 1.5,48.5 + parent: 2 + - uid: 2827 + components: + - type: Transform + pos: 2.5,48.5 + parent: 2 + - uid: 2828 + components: + - type: Transform + pos: 3.5,48.5 + parent: 2 + - uid: 2829 + components: + - type: Transform + pos: 0.5,47.5 + parent: 2 + - uid: 2830 + components: + - type: Transform + pos: 0.5,46.5 + parent: 2 + - uid: 2831 + components: + - type: Transform + pos: 0.5,45.5 + parent: 2 + - uid: 2832 + components: + - type: Transform + pos: -1.5,33.5 + parent: 2 + - uid: 2833 + components: + - type: Transform + pos: -0.5,33.5 + parent: 2 + - uid: 2834 + components: + - type: Transform + pos: 0.5,33.5 + parent: 2 + - uid: 2835 + components: + - type: Transform + pos: 0.5,34.5 + parent: 2 + - uid: 2836 + components: + - type: Transform + pos: 0.5,35.5 + parent: 2 + - uid: 2837 + components: + - type: Transform + pos: 0.5,36.5 + parent: 2 + - uid: 2838 + components: + - type: Transform + pos: 0.5,37.5 + parent: 2 + - uid: 2839 + components: + - type: Transform + pos: 0.5,38.5 + parent: 2 + - uid: 2840 + components: + - type: Transform + pos: 0.5,39.5 + parent: 2 + - uid: 2841 + components: + - type: Transform + pos: 0.5,40.5 + parent: 2 + - uid: 2842 + components: + - type: Transform + pos: 0.5,41.5 + parent: 2 + - uid: 2843 + components: + - type: Transform + pos: 0.5,42.5 + parent: 2 + - uid: 2844 + components: + - type: Transform + pos: 0.5,43.5 + parent: 2 + - uid: 2845 + components: + - type: Transform + pos: 0.5,32.5 + parent: 2 + - uid: 2846 + components: + - type: Transform + pos: 0.5,31.5 + parent: 2 + - uid: 2847 + components: + - type: Transform + pos: 0.5,30.5 + parent: 2 + - uid: 2848 + components: + - type: Transform + pos: 0.5,29.5 + parent: 2 + - uid: 2849 + components: + - type: Transform + pos: 0.5,28.5 + parent: 2 + - uid: 2850 + components: + - type: Transform + pos: 0.5,27.5 + parent: 2 + - uid: 2851 + components: + - type: Transform + pos: 0.5,26.5 + parent: 2 + - uid: 2852 + components: + - type: Transform + pos: 0.5,25.5 + parent: 2 + - uid: 2853 + components: + - type: Transform + pos: 0.5,24.5 + parent: 2 + - uid: 2854 + components: + - type: Transform + pos: 0.5,23.5 + parent: 2 + - uid: 2855 + components: + - type: Transform + pos: 0.5,22.5 + parent: 2 + - uid: 2856 + components: + - type: Transform + pos: 11.5,19.5 + parent: 2 + - uid: 2857 + components: + - type: Transform + pos: -5.5,20.5 + parent: 2 + - uid: 2858 + components: + - type: Transform + pos: -6.5,20.5 + parent: 2 + - uid: 2859 + components: + - type: Transform + pos: -4.5,20.5 + parent: 2 + - uid: 2860 + components: + - type: Transform + pos: -3.5,20.5 + parent: 2 + - uid: 2861 + components: + - type: Transform + pos: -2.5,20.5 + parent: 2 + - uid: 2862 + components: + - type: Transform + pos: -1.5,20.5 + parent: 2 + - uid: 2863 + components: + - type: Transform + pos: -0.5,20.5 + parent: 2 + - uid: 2864 + components: + - type: Transform + pos: 0.5,20.5 + parent: 2 + - uid: 2865 + components: + - type: Transform + pos: 1.5,20.5 + parent: 2 + - uid: 2866 + components: + - type: Transform + pos: 2.5,20.5 + parent: 2 + - uid: 2867 + components: + - type: Transform + pos: 3.5,20.5 + parent: 2 + - uid: 2868 + components: + - type: Transform + pos: 11.5,20.5 + parent: 2 + - uid: 2869 + components: + - type: Transform + pos: 10.5,20.5 + parent: 2 + - uid: 2870 + components: + - type: Transform + pos: 9.5,20.5 + parent: 2 + - uid: 2871 + components: + - type: Transform + pos: 8.5,20.5 + parent: 2 + - uid: 2872 + components: + - type: Transform + pos: 7.5,20.5 + parent: 2 + - uid: 2873 + components: + - type: Transform + pos: 6.5,20.5 + parent: 2 + - uid: 2874 + components: + - type: Transform + pos: 5.5,20.5 + parent: 2 + - uid: 2875 + components: + - type: Transform + pos: 12.5,20.5 + parent: 2 + - uid: 2876 + components: + - type: Transform + pos: 13.5,20.5 + parent: 2 + - uid: 2877 + components: + - type: Transform + pos: 14.5,20.5 + parent: 2 + - uid: 2878 + components: + - type: Transform + pos: 15.5,20.5 + parent: 2 + - uid: 2879 + components: + - type: Transform + pos: 16.5,20.5 + parent: 2 + - uid: 2880 + components: + - type: Transform + pos: 17.5,20.5 + parent: 2 + - uid: 2881 + components: + - type: Transform + pos: 18.5,20.5 + parent: 2 + - uid: 2882 + components: + - type: Transform + pos: 19.5,20.5 + parent: 2 + - uid: 2883 + components: + - type: Transform + pos: 15.5,19.5 + parent: 2 + - uid: 2884 + components: + - type: Transform + pos: 15.5,18.5 + parent: 2 + - uid: 2885 + components: + - type: Transform + pos: 15.5,17.5 + parent: 2 + - uid: 2886 + components: + - type: Transform + pos: 16.5,17.5 + parent: 2 + - uid: 2887 + components: + - type: Transform + pos: 17.5,17.5 + parent: 2 + - uid: 2888 + components: + - type: Transform + pos: 15.5,21.5 + parent: 2 + - uid: 2889 + components: + - type: Transform + pos: 15.5,22.5 + parent: 2 + - uid: 2890 + components: + - type: Transform + pos: 16.5,22.5 + parent: 2 + - uid: 2891 + components: + - type: Transform + pos: 17.5,22.5 + parent: 2 + - uid: 2892 + components: + - type: Transform + pos: 14.5,22.5 + parent: 2 + - uid: 2893 + components: + - type: Transform + pos: 13.5,22.5 + parent: 2 + - uid: 2894 + components: + - type: Transform + pos: 24.5,19.5 + parent: 2 + - uid: 2895 + components: + - type: Transform + pos: 24.5,20.5 + parent: 2 + - uid: 2896 + components: + - type: Transform + pos: 24.5,21.5 + parent: 2 + - uid: 2897 + components: + - type: Transform + pos: 23.5,20.5 + parent: 2 + - uid: 2898 + components: + - type: Transform + pos: 22.5,20.5 + parent: 2 + - uid: 2899 + components: + - type: Transform + pos: 21.5,20.5 + parent: 2 + - uid: 2900 + components: + - type: Transform + pos: 25.5,20.5 + parent: 2 + - uid: 2901 + components: + - type: Transform + pos: 26.5,20.5 + parent: 2 + - uid: 2902 + components: + - type: Transform + pos: 27.5,20.5 + parent: 2 + - uid: 2903 + components: + - type: Transform + pos: 28.5,20.5 + parent: 2 + - uid: 2904 + components: + - type: Transform + pos: 29.5,20.5 + parent: 2 + - uid: 2905 + components: + - type: Transform + pos: 30.5,20.5 + parent: 2 + - uid: 2906 + components: + - type: Transform + pos: 31.5,20.5 + parent: 2 + - uid: 2907 + components: + - type: Transform + pos: 32.5,20.5 + parent: 2 + - uid: 2908 + components: + - type: Transform + pos: 32.5,21.5 + parent: 2 + - uid: 2909 + components: + - type: Transform + pos: 32.5,22.5 + parent: 2 + - uid: 2910 + components: + - type: Transform + pos: 32.5,19.5 + parent: 2 + - uid: 2911 + components: + - type: Transform + pos: 19.5,41.5 + parent: 2 + - uid: 2912 + components: + - type: Transform + pos: 19.5,40.5 + parent: 2 + - uid: 2913 + components: + - type: Transform + pos: 19.5,39.5 + parent: 2 + - uid: 2914 + components: + - type: Transform + pos: 19.5,38.5 + parent: 2 + - uid: 2915 + components: + - type: Transform + pos: 19.5,37.5 + parent: 2 + - uid: 2916 + components: + - type: Transform + pos: 20.5,38.5 + parent: 2 + - uid: 2917 + components: + - type: Transform + pos: 18.5,38.5 + parent: 2 + - uid: 2918 + components: + - type: Transform + pos: 17.5,38.5 + parent: 2 + - uid: 2919 + components: + - type: Transform + pos: 15.5,38.5 + parent: 2 + - uid: 2920 + components: + - type: Transform + pos: 19.5,44.5 + parent: 2 + - uid: 2921 + components: + - type: Transform + pos: 20.5,44.5 + parent: 2 + - uid: 2922 + components: + - type: Transform + pos: 21.5,44.5 + parent: 2 + - uid: 2923 + components: + - type: Transform + pos: 21.5,45.5 + parent: 2 + - uid: 2924 + components: + - type: Transform + pos: 21.5,43.5 + parent: 2 + - uid: 2925 + components: + - type: Transform + pos: 22.5,44.5 + parent: 2 + - uid: 2926 + components: + - type: Transform + pos: 23.5,44.5 + parent: 2 + - uid: 2927 + components: + - type: Transform + pos: 24.5,44.5 + parent: 2 + - uid: 2928 + components: + - type: Transform + pos: 25.5,44.5 + parent: 2 + - uid: 2929 + components: + - type: Transform + pos: 26.5,44.5 + parent: 2 + - uid: 2930 + components: + - type: Transform + pos: 27.5,44.5 + parent: 2 + - uid: 2931 + components: + - type: Transform + pos: 28.5,44.5 + parent: 2 + - uid: 2932 + components: + - type: Transform + pos: 27.5,43.5 + parent: 2 + - uid: 2933 + components: + - type: Transform + pos: 27.5,42.5 + parent: 2 + - uid: 2934 + components: + - type: Transform + pos: 27.5,41.5 + parent: 2 + - uid: 2935 + components: + - type: Transform + pos: 27.5,40.5 + parent: 2 + - uid: 2936 + components: + - type: Transform + pos: 27.5,39.5 + parent: 2 + - uid: 2937 + components: + - type: Transform + pos: 27.5,38.5 + parent: 2 + - uid: 2938 + components: + - type: Transform + pos: 23.5,43.5 + parent: 2 + - uid: 2939 + components: + - type: Transform + pos: 23.5,42.5 + parent: 2 + - uid: 2940 + components: + - type: Transform + pos: 23.5,41.5 + parent: 2 + - uid: 2941 + components: + - type: Transform + pos: 23.5,40.5 + parent: 2 + - uid: 2942 + components: + - type: Transform + pos: 23.5,39.5 + parent: 2 + - uid: 2943 + components: + - type: Transform + pos: 23.5,38.5 + parent: 2 + - uid: 2944 + components: + - type: Transform + pos: 15.5,42.5 + parent: 2 + - uid: 2945 + components: + - type: Transform + pos: 16.5,42.5 + parent: 2 + - uid: 2946 + components: + - type: Transform + pos: 17.5,42.5 + parent: 2 + - uid: 2947 + components: + - type: Transform + pos: 17.5,43.5 + parent: 2 + - uid: 2948 + components: + - type: Transform + pos: 17.5,44.5 + parent: 2 + - uid: 2949 + components: + - type: Transform + pos: 17.5,45.5 + parent: 2 + - uid: 2950 + components: + - type: Transform + pos: 16.5,44.5 + parent: 2 + - uid: 2951 + components: + - type: Transform + pos: 17.5,41.5 + parent: 2 + - uid: 2952 + components: + - type: Transform + pos: 15.5,44.5 + parent: 2 + - uid: 2953 + components: + - type: Transform + pos: 14.5,44.5 + parent: 2 + - uid: 2954 + components: + - type: Transform + pos: 13.5,44.5 + parent: 2 + - uid: 2955 + components: + - type: Transform + pos: 12.5,44.5 + parent: 2 + - uid: 2956 + components: + - type: Transform + pos: 11.5,44.5 + parent: 2 + - uid: 2957 + components: + - type: Transform + pos: 14.5,38.5 + parent: 2 + - uid: 2958 + components: + - type: Transform + pos: 13.5,38.5 + parent: 2 + - uid: 2959 + components: + - type: Transform + pos: 12.5,38.5 + parent: 2 + - uid: 2960 + components: + - type: Transform + pos: 11.5,38.5 + parent: 2 + - uid: 2961 + components: + - type: Transform + pos: 12.5,39.5 + parent: 2 + - uid: 2962 + components: + - type: Transform + pos: 12.5,40.5 + parent: 2 + - uid: 2963 + components: + - type: Transform + pos: 12.5,41.5 + parent: 2 + - uid: 2964 + components: + - type: Transform + pos: 12.5,37.5 + parent: 2 + - uid: 2965 + components: + - type: Transform + pos: 14.5,39.5 + parent: 2 + - uid: 2966 + components: + - type: Transform + pos: 14.5,40.5 + parent: 2 + - uid: 2967 + components: + - type: Transform + pos: 14.5,41.5 + parent: 2 + - uid: 2968 + components: + - type: Transform + pos: 14.5,37.5 + parent: 2 + - uid: 2969 + components: + - type: Transform + pos: 13.5,32.5 + parent: 2 + - uid: 2970 + components: + - type: Transform + pos: 14.5,31.5 + parent: 2 + - uid: 2971 + components: + - type: Transform + pos: 14.5,30.5 + parent: 2 + - uid: 2972 + components: + - type: Transform + pos: 15.5,31.5 + parent: 2 + - uid: 2973 + components: + - type: Transform + pos: 16.5,31.5 + parent: 2 + - uid: 2974 + components: + - type: Transform + pos: 17.5,31.5 + parent: 2 + - uid: 2975 + components: + - type: Transform + pos: 18.5,31.5 + parent: 2 + - uid: 2976 + components: + - type: Transform + pos: 17.5,30.5 + parent: 2 + - uid: 2977 + components: + - type: Transform + pos: 17.5,29.5 + parent: 2 + - uid: 2978 + components: + - type: Transform + pos: 17.5,28.5 + parent: 2 + - uid: 2979 + components: + - type: Transform + pos: 17.5,27.5 + parent: 2 + - uid: 2980 + components: + - type: Transform + pos: 17.5,26.5 + parent: 2 + - uid: 2981 + components: + - type: Transform + pos: 17.5,25.5 + parent: 2 + - uid: 2982 + components: + - type: Transform + pos: 17.5,24.5 + parent: 2 + - uid: 2983 + components: + - type: Transform + pos: 18.5,32.5 + parent: 2 + - uid: 2984 + components: + - type: Transform + pos: 18.5,33.5 + parent: 2 + - uid: 2985 + components: + - type: Transform + pos: 18.5,34.5 + parent: 2 + - uid: 2986 + components: + - type: Transform + pos: 18.5,35.5 + parent: 2 + - uid: 2987 + components: + - type: Transform + pos: 17.5,35.5 + parent: 2 + - uid: 2988 + components: + - type: Transform + pos: 16.5,35.5 + parent: 2 + - uid: 2989 + components: + - type: Transform + pos: 15.5,35.5 + parent: 2 + - uid: 2990 + components: + - type: Transform + pos: 14.5,35.5 + parent: 2 + - uid: 2991 + components: + - type: Transform + pos: 13.5,35.5 + parent: 2 + - uid: 2992 + components: + - type: Transform + pos: 12.5,35.5 + parent: 2 + - uid: 2993 + components: + - type: Transform + pos: 11.5,35.5 + parent: 2 + - uid: 2994 + components: + - type: Transform + pos: 10.5,35.5 + parent: 2 + - uid: 2995 + components: + - type: Transform + pos: 9.5,35.5 + parent: 2 + - uid: 2996 + components: + - type: Transform + pos: 8.5,35.5 + parent: 2 + - uid: 2997 + components: + - type: Transform + pos: 13.5,31.5 + parent: 2 + - uid: 2998 + components: + - type: Transform + pos: 12.5,31.5 + parent: 2 + - uid: 2999 + components: + - type: Transform + pos: 11.5,31.5 + parent: 2 + - uid: 3000 + components: + - type: Transform + pos: 10.5,31.5 + parent: 2 + - uid: 3001 + components: + - type: Transform + pos: 9.5,31.5 + parent: 2 + - uid: 3002 + components: + - type: Transform + pos: 8.5,31.5 + parent: 2 + - uid: 3003 + components: + - type: Transform + pos: 8.5,32.5 + parent: 2 + - uid: 3004 + components: + - type: Transform + pos: 8.5,33.5 + parent: 2 + - uid: 3005 + components: + - type: Transform + pos: 8.5,34.5 + parent: 2 + - uid: 3006 + components: + - type: Transform + pos: 9.5,33.5 + parent: 2 + - uid: 3007 + components: + - type: Transform + pos: 10.5,33.5 + parent: 2 + - uid: 3008 + components: + - type: Transform + pos: 11.5,33.5 + parent: 2 + - uid: 3009 + components: + - type: Transform + pos: 12.5,33.5 + parent: 2 + - uid: 3010 + components: + - type: Transform + pos: 19.5,33.5 + parent: 2 + - uid: 3011 + components: + - type: Transform + pos: 20.5,33.5 + parent: 2 + - uid: 3012 + components: + - type: Transform + pos: 21.5,33.5 + parent: 2 + - uid: 3013 + components: + - type: Transform + pos: 22.5,33.5 + parent: 2 + - uid: 3014 + components: + - type: Transform + pos: 23.5,33.5 + parent: 2 + - uid: 3015 + components: + - type: Transform + pos: 22.5,32.5 + parent: 2 + - uid: 3016 + components: + - type: Transform + pos: 22.5,31.5 + parent: 2 + - uid: 3017 + components: + - type: Transform + pos: 22.5,30.5 + parent: 2 + - uid: 3018 + components: + - type: Transform + pos: 22.5,34.5 + parent: 2 + - uid: 3019 + components: + - type: Transform + pos: 22.5,35.5 + parent: 2 + - uid: 3020 + components: + - type: Transform + pos: 22.5,36.5 + parent: 2 + - uid: 3021 + components: + - type: Transform + pos: 22.5,37.5 + parent: 2 + - uid: 3022 + components: + - type: Transform + pos: 26.5,37.5 + parent: 2 + - uid: 3023 + components: + - type: Transform + pos: 26.5,36.5 + parent: 2 + - uid: 3024 + components: + - type: Transform + pos: 26.5,35.5 + parent: 2 + - uid: 3025 + components: + - type: Transform + pos: 26.5,34.5 + parent: 2 + - uid: 3026 + components: + - type: Transform + pos: 26.5,33.5 + parent: 2 + - uid: 3027 + components: + - type: Transform + pos: 26.5,32.5 + parent: 2 + - uid: 3028 + components: + - type: Transform + pos: 26.5,31.5 + parent: 2 + - uid: 3029 + components: + - type: Transform + pos: 27.5,31.5 + parent: 2 + - uid: 3030 + components: + - type: Transform + pos: 28.5,31.5 + parent: 2 + - uid: 3031 + components: + - type: Transform + pos: 29.5,31.5 + parent: 2 + - uid: 3032 + components: + - type: Transform + pos: 27.5,36.5 + parent: 2 + - uid: 3033 + components: + - type: Transform + pos: 28.5,36.5 + parent: 2 + - uid: 3034 + components: + - type: Transform + pos: 29.5,36.5 + parent: 2 + - uid: 3035 + components: + - type: Transform + pos: 27.5,34.5 + parent: 2 + - uid: 3036 + components: + - type: Transform + pos: 28.5,34.5 + parent: 2 + - uid: 3037 + components: + - type: Transform + pos: 29.5,34.5 + parent: 2 + - uid: 3038 + components: + - type: Transform + pos: 10.5,40.5 + parent: 2 + - uid: 3039 + components: + - type: Transform + pos: 9.5,40.5 + parent: 2 + - uid: 3040 + components: + - type: Transform + pos: 8.5,40.5 + parent: 2 + - uid: 3041 + components: + - type: Transform + pos: 7.5,40.5 + parent: 2 + - uid: 3042 + components: + - type: Transform + pos: 6.5,40.5 + parent: 2 + - uid: 3043 + components: + - type: Transform + pos: 5.5,40.5 + parent: 2 + - uid: 3044 + components: + - type: Transform + pos: 4.5,40.5 + parent: 2 + - uid: 3045 + components: + - type: Transform + pos: 3.5,40.5 + parent: 2 + - uid: 3046 + components: + - type: Transform + pos: 4.5,39.5 + parent: 2 + - uid: 3047 + components: + - type: Transform + pos: 4.5,38.5 + parent: 2 + - uid: 3048 + components: + - type: Transform + pos: 4.5,37.5 + parent: 2 + - uid: 3049 + components: + - type: Transform + pos: 8.5,39.5 + parent: 2 + - uid: 3050 + components: + - type: Transform + pos: 8.5,38.5 + parent: 2 + - uid: 3051 + components: + - type: Transform + pos: 8.5,37.5 + parent: 2 + - uid: 3052 + components: + - type: Transform + pos: 6.5,39.5 + parent: 2 + - uid: 3053 + components: + - type: Transform + pos: 6.5,38.5 + parent: 2 + - uid: 3054 + components: + - type: Transform + pos: 6.5,37.5 + parent: 2 + - uid: 3055 + components: + - type: Transform + pos: 5.5,41.5 + parent: 2 + - uid: 3056 + components: + - type: Transform + pos: 5.5,42.5 + parent: 2 + - uid: 3057 + components: + - type: Transform + pos: 5.5,43.5 + parent: 2 + - uid: 3058 + components: + - type: Transform + pos: 5.5,44.5 + parent: 2 + - uid: 3059 + components: + - type: Transform + pos: 5.5,45.5 + parent: 2 + - uid: 3060 + components: + - type: Transform + pos: 4.5,44.5 + parent: 2 + - uid: 3061 + components: + - type: Transform + pos: 6.5,44.5 + parent: 2 + - uid: 3062 + components: + - type: Transform + pos: 7.5,44.5 + parent: 2 + - uid: 3063 + components: + - type: Transform + pos: 8.5,44.5 + parent: 2 + - uid: 3064 + components: + - type: Transform + pos: 6.5,30.5 + parent: 2 + - uid: 3065 + components: + - type: Transform + pos: 6.5,29.5 + parent: 2 + - uid: 3066 + components: + - type: Transform + pos: 6.5,28.5 + parent: 2 + - uid: 3067 + components: + - type: Transform + pos: 6.5,27.5 + parent: 2 + - uid: 3068 + components: + - type: Transform + pos: 6.5,26.5 + parent: 2 + - uid: 3069 + components: + - type: Transform + pos: 7.5,28.5 + parent: 2 + - uid: 3070 + components: + - type: Transform + pos: 14.5,27.5 + parent: 2 + - uid: 3071 + components: + - type: Transform + pos: 13.5,27.5 + parent: 2 + - uid: 3072 + components: + - type: Transform + pos: 12.5,27.5 + parent: 2 + - uid: 3073 + components: + - type: Transform + pos: 11.5,27.5 + parent: 2 + - uid: 3074 + components: + - type: Transform + pos: 10.5,27.5 + parent: 2 + - uid: 3075 + components: + - type: Transform + pos: 12.5,28.5 + parent: 2 + - uid: 3076 + components: + - type: Transform + pos: 10.5,26.5 + parent: 2 + - uid: 3077 + components: + - type: Transform + pos: 10.5,25.5 + parent: 2 + - uid: 3078 + components: + - type: Transform + pos: 10.5,24.5 + parent: 2 + - uid: 3079 + components: + - type: Transform + pos: 10.5,23.5 + parent: 2 + - uid: 3080 + components: + - type: Transform + pos: 11.5,25.5 + parent: 2 + - uid: 3081 + components: + - type: Transform + pos: 12.5,25.5 + parent: 2 + - uid: 3082 + components: + - type: Transform + pos: 13.5,25.5 + parent: 2 + - uid: 3083 + components: + - type: Transform + pos: 14.5,25.5 + parent: 2 + - uid: 3084 + components: + - type: Transform + pos: 9.5,24.5 + parent: 2 + - uid: 3085 + components: + - type: Transform + pos: 8.5,24.5 + parent: 2 + - uid: 3086 + components: + - type: Transform + pos: 7.5,24.5 + parent: 2 + - uid: 3087 + components: + - type: Transform + pos: 6.5,24.5 + parent: 2 + - uid: 3088 + components: + - type: Transform + pos: 5.5,24.5 + parent: 2 + - uid: 3089 + components: + - type: Transform + pos: 4.5,24.5 + parent: 2 + - uid: 3090 + components: + - type: Transform + pos: 4.5,25.5 + parent: 2 + - uid: 3091 + components: + - type: Transform + pos: 3.5,25.5 + parent: 2 + - uid: 3092 + components: + - type: Transform + pos: 77.5,46.5 + parent: 2 + - uid: 3093 + components: + - type: Transform + pos: 77.5,45.5 + parent: 2 + - uid: 3094 + components: + - type: Transform + pos: 77.5,44.5 + parent: 2 + - uid: 3095 + components: + - type: Transform + pos: 77.5,43.5 + parent: 2 + - uid: 3096 + components: + - type: Transform + pos: 77.5,42.5 + parent: 2 + - uid: 3097 + components: + - type: Transform + pos: 76.5,44.5 + parent: 2 + - uid: 3098 + components: + - type: Transform + pos: 75.5,44.5 + parent: 2 + - uid: 3099 + components: + - type: Transform + pos: 74.5,44.5 + parent: 2 + - uid: 3100 + components: + - type: Transform + pos: 73.5,44.5 + parent: 2 + - uid: 3101 + components: + - type: Transform + pos: 72.5,44.5 + parent: 2 + - uid: 3102 + components: + - type: Transform + pos: 71.5,44.5 + parent: 2 + - uid: 3103 + components: + - type: Transform + pos: 70.5,44.5 + parent: 2 + - uid: 3104 + components: + - type: Transform + pos: 69.5,44.5 + parent: 2 + - uid: 3105 + components: + - type: Transform + pos: 68.5,44.5 + parent: 2 + - uid: 3106 + components: + - type: Transform + pos: 67.5,44.5 + parent: 2 + - uid: 3107 + components: + - type: Transform + pos: 70.5,43.5 + parent: 2 + - uid: 3108 + components: + - type: Transform + pos: 70.5,42.5 + parent: 2 + - uid: 3109 + components: + - type: Transform + pos: 70.5,45.5 + parent: 2 + - uid: 3110 + components: + - type: Transform + pos: 70.5,46.5 + parent: 2 + - uid: 3111 + components: + - type: Transform + pos: 78.5,43.5 + parent: 2 + - uid: 3112 + components: + - type: Transform + pos: 79.5,43.5 + parent: 2 + - uid: 3113 + components: + - type: Transform + pos: 80.5,43.5 + parent: 2 + - uid: 3114 + components: + - type: Transform + pos: 81.5,43.5 + parent: 2 + - uid: 3115 + components: + - type: Transform + pos: 82.5,43.5 + parent: 2 + - uid: 3116 + components: + - type: Transform + pos: 83.5,43.5 + parent: 2 + - uid: 3117 + components: + - type: Transform + pos: 81.5,23.5 + parent: 2 + - uid: 3118 + components: + - type: Transform + pos: 79.5,39.5 + parent: 2 + - uid: 3119 + components: + - type: Transform + pos: 78.5,39.5 + parent: 2 + - uid: 3120 + components: + - type: Transform + pos: 77.5,39.5 + parent: 2 + - uid: 3121 + components: + - type: Transform + pos: 76.5,39.5 + parent: 2 + - uid: 3122 + components: + - type: Transform + pos: 75.5,39.5 + parent: 2 + - uid: 3123 + components: + - type: Transform + pos: 74.5,39.5 + parent: 2 + - uid: 3124 + components: + - type: Transform + pos: 76.5,38.5 + parent: 2 + - uid: 3125 + components: + - type: Transform + pos: 76.5,40.5 + parent: 2 + - uid: 3126 + components: + - type: Transform + pos: 73.5,39.5 + parent: 2 + - uid: 3127 + components: + - type: Transform + pos: 72.5,39.5 + parent: 2 + - uid: 3128 + components: + - type: Transform + pos: 71.5,39.5 + parent: 2 + - uid: 3129 + components: + - type: Transform + pos: 70.5,39.5 + parent: 2 + - uid: 3130 + components: + - type: Transform + pos: 69.5,39.5 + parent: 2 + - uid: 3131 + components: + - type: Transform + pos: 69.5,38.5 + parent: 2 + - uid: 3132 + components: + - type: Transform + pos: 69.5,37.5 + parent: 2 + - uid: 3133 + components: + - type: Transform + pos: 78.5,38.5 + parent: 2 + - uid: 3134 + components: + - type: Transform + pos: 79.5,36.5 + parent: 2 + - uid: 3135 + components: + - type: Transform + pos: 79.5,35.5 + parent: 2 + - uid: 3136 + components: + - type: Transform + pos: 79.5,34.5 + parent: 2 + - uid: 3137 + components: + - type: Transform + pos: 79.5,33.5 + parent: 2 + - uid: 3138 + components: + - type: Transform + pos: 78.5,34.5 + parent: 2 + - uid: 3139 + components: + - type: Transform + pos: 77.5,34.5 + parent: 2 + - uid: 3140 + components: + - type: Transform + pos: 76.5,34.5 + parent: 2 + - uid: 3141 + components: + - type: Transform + pos: 75.5,34.5 + parent: 2 + - uid: 3142 + components: + - type: Transform + pos: 74.5,34.5 + parent: 2 + - uid: 3143 + components: + - type: Transform + pos: 73.5,34.5 + parent: 2 + - uid: 3144 + components: + - type: Transform + pos: 72.5,34.5 + parent: 2 + - uid: 3145 + components: + - type: Transform + pos: 71.5,34.5 + parent: 2 + - uid: 3146 + components: + - type: Transform + pos: 70.5,34.5 + parent: 2 + - uid: 3147 + components: + - type: Transform + pos: 69.5,34.5 + parent: 2 + - uid: 3148 + components: + - type: Transform + pos: 68.5,34.5 + parent: 2 + - uid: 3149 + components: + - type: Transform + pos: 67.5,34.5 + parent: 2 + - uid: 3150 + components: + - type: Transform + pos: 80.5,34.5 + parent: 2 + - uid: 3151 + components: + - type: Transform + pos: 81.5,34.5 + parent: 2 + - uid: 3152 + components: + - type: Transform + pos: 82.5,34.5 + parent: 2 + - uid: 3153 + components: + - type: Transform + pos: 83.5,34.5 + parent: 2 + - uid: 3154 + components: + - type: Transform + pos: 84.5,34.5 + parent: 2 + - uid: 3155 + components: + - type: Transform + pos: 85.5,34.5 + parent: 2 + - uid: 3156 + components: + - type: Transform + pos: 86.5,34.5 + parent: 2 + - uid: 3157 + components: + - type: Transform + pos: 87.5,34.5 + parent: 2 + - uid: 3158 + components: + - type: Transform + pos: 85.5,35.5 + parent: 2 + - uid: 3159 + components: + - type: Transform + pos: 85.5,36.5 + parent: 2 + - uid: 3160 + components: + - type: Transform + pos: 85.5,37.5 + parent: 2 + - uid: 3161 + components: + - type: Transform + pos: 85.5,38.5 + parent: 2 + - uid: 3162 + components: + - type: Transform + pos: 85.5,33.5 + parent: 2 + - uid: 3163 + components: + - type: Transform + pos: 85.5,32.5 + parent: 2 + - uid: 3164 + components: + - type: Transform + pos: 85.5,31.5 + parent: 2 + - uid: 3165 + components: + - type: Transform + pos: 85.5,30.5 + parent: 2 + - uid: 3166 + components: + - type: Transform + pos: 81.5,33.5 + parent: 2 + - uid: 3167 + components: + - type: Transform + pos: 81.5,32.5 + parent: 2 + - uid: 3168 + components: + - type: Transform + pos: 81.5,31.5 + parent: 2 + - uid: 3169 + components: + - type: Transform + pos: 81.5,30.5 + parent: 2 + - uid: 3170 + components: + - type: Transform + pos: 81.5,29.5 + parent: 2 + - uid: 3171 + components: + - type: Transform + pos: 81.5,35.5 + parent: 2 + - uid: 3172 + components: + - type: Transform + pos: 81.5,36.5 + parent: 2 + - uid: 3173 + components: + - type: Transform + pos: 81.5,37.5 + parent: 2 + - uid: 3174 + components: + - type: Transform + pos: 81.5,38.5 + parent: 2 + - uid: 3175 + components: + - type: Transform + pos: 81.5,39.5 + parent: 2 + - uid: 3176 + components: + - type: Transform + pos: 81.5,40.5 + parent: 2 + - uid: 3177 + components: + - type: Transform + pos: 79.5,24.5 + parent: 2 + - uid: 3178 + components: + - type: Transform + pos: 80.5,24.5 + parent: 2 + - uid: 3179 + components: + - type: Transform + pos: 81.5,24.5 + parent: 2 + - uid: 3180 + components: + - type: Transform + pos: 82.5,24.5 + parent: 2 + - uid: 3181 + components: + - type: Transform + pos: 83.5,24.5 + parent: 2 + - uid: 3182 + components: + - type: Transform + pos: 81.5,25.5 + parent: 2 + - uid: 3183 + components: + - type: Transform + pos: 81.5,26.5 + parent: 2 + - uid: 3184 + components: + - type: Transform + pos: 81.5,27.5 + parent: 2 + - uid: 3185 + components: + - type: Transform + pos: 81.5,22.5 + parent: 2 + - uid: 3186 + components: + - type: Transform + pos: 81.5,21.5 + parent: 2 + - uid: 3187 + components: + - type: Transform + pos: 81.5,20.5 + parent: 2 + - uid: 3188 + components: + - type: Transform + pos: 81.5,19.5 + parent: 2 + - uid: 3189 + components: + - type: Transform + pos: 80.5,19.5 + parent: 2 + - uid: 3190 + components: + - type: Transform + pos: 79.5,19.5 + parent: 2 + - uid: 3191 + components: + - type: Transform + pos: 78.5,19.5 + parent: 2 + - uid: 3192 + components: + - type: Transform + pos: 78.5,20.5 + parent: 2 + - uid: 3193 + components: + - type: Transform + pos: 77.5,20.5 + parent: 2 + - uid: 3194 + components: + - type: Transform + pos: 76.5,20.5 + parent: 2 + - uid: 3195 + components: + - type: Transform + pos: 75.5,20.5 + parent: 2 + - uid: 3196 + components: + - type: Transform + pos: 74.5,20.5 + parent: 2 + - uid: 3197 + components: + - type: Transform + pos: 74.5,19.5 + parent: 2 + - uid: 3198 + components: + - type: Transform + pos: 74.5,18.5 + parent: 2 + - uid: 3199 + components: + - type: Transform + pos: 74.5,17.5 + parent: 2 + - uid: 3200 + components: + - type: Transform + pos: 75.5,17.5 + parent: 2 + - uid: 3201 + components: + - type: Transform + pos: 75.5,16.5 + parent: 2 + - uid: 3202 + components: + - type: Transform + pos: 75.5,15.5 + parent: 2 + - uid: 3203 + components: + - type: Transform + pos: 75.5,14.5 + parent: 2 + - uid: 3204 + components: + - type: Transform + pos: 75.5,13.5 + parent: 2 + - uid: 3205 + components: + - type: Transform + pos: 76.5,16.5 + parent: 2 + - uid: 3206 + components: + - type: Transform + pos: 75.5,32.5 + parent: 2 + - uid: 3207 + components: + - type: Transform + pos: 75.5,31.5 + parent: 2 + - uid: 3208 + components: + - type: Transform + pos: 75.5,30.5 + parent: 2 + - uid: 3209 + components: + - type: Transform + pos: 75.5,29.5 + parent: 2 + - uid: 3210 + components: + - type: Transform + pos: 75.5,28.5 + parent: 2 + - uid: 3211 + components: + - type: Transform + pos: 76.5,30.5 + parent: 2 + - uid: 3212 + components: + - type: Transform + pos: 77.5,30.5 + parent: 2 + - uid: 3213 + components: + - type: Transform + pos: 78.5,30.5 + parent: 2 + - uid: 3214 + components: + - type: Transform + pos: 74.5,30.5 + parent: 2 + - uid: 3215 + components: + - type: Transform + pos: 73.5,30.5 + parent: 2 + - uid: 3216 + components: + - type: Transform + pos: 74.5,28.5 + parent: 2 + - uid: 3217 + components: + - type: Transform + pos: 74.5,27.5 + parent: 2 + - uid: 3218 + components: + - type: Transform + pos: 78.5,27.5 + parent: 2 + - uid: 3219 + components: + - type: Transform + pos: 78.5,26.5 + parent: 2 + - uid: 3220 + components: + - type: Transform + pos: 78.5,25.5 + parent: 2 + - uid: 3221 + components: + - type: Transform + pos: 74.5,24.5 + parent: 2 + - uid: 3222 + components: + - type: Transform + pos: 77.5,25.5 + parent: 2 + - uid: 3223 + components: + - type: Transform + pos: 76.5,25.5 + parent: 2 + - uid: 3224 + components: + - type: Transform + pos: 75.5,25.5 + parent: 2 + - uid: 3225 + components: + - type: Transform + pos: 74.5,25.5 + parent: 2 + - uid: 3226 + components: + - type: Transform + pos: 74.5,23.5 + parent: 2 + - uid: 3227 + components: + - type: Transform + pos: 69.5,30.5 + parent: 2 + - uid: 3228 + components: + - type: Transform + pos: 69.5,29.5 + parent: 2 + - uid: 3229 + components: + - type: Transform + pos: 69.5,28.5 + parent: 2 + - uid: 3230 + components: + - type: Transform + pos: 69.5,27.5 + parent: 2 + - uid: 3231 + components: + - type: Transform + pos: 69.5,26.5 + parent: 2 + - uid: 3232 + components: + - type: Transform + pos: 69.5,25.5 + parent: 2 + - uid: 3233 + components: + - type: Transform + pos: 69.5,24.5 + parent: 2 + - uid: 3234 + components: + - type: Transform + pos: 69.5,23.5 + parent: 2 + - uid: 3235 + components: + - type: Transform + pos: 70.5,24.5 + parent: 2 + - uid: 3238 + components: + - type: Transform + pos: 70.5,28.5 + parent: 2 + - uid: 3239 + components: + - type: Transform + pos: 71.5,28.5 + parent: 2 + - uid: 3240 + components: + - type: Transform + pos: 69.5,31.5 + parent: 2 + - uid: 3241 + components: + - type: Transform + pos: 68.5,31.5 + parent: 2 + - uid: 3242 + components: + - type: Transform + pos: 70.5,31.5 + parent: 2 + - uid: 3243 + components: + - type: Transform + pos: 71.5,31.5 + parent: 2 + - uid: 3244 + components: + - type: Transform + pos: 72.5,31.5 + parent: 2 + - uid: 3245 + components: + - type: Transform + pos: 59.5,58.5 + parent: 2 + - uid: 3246 + components: + - type: Transform + pos: 59.5,57.5 + parent: 2 + - uid: 3247 + components: + - type: Transform + pos: 59.5,56.5 + parent: 2 + - uid: 3248 + components: + - type: Transform + pos: 60.5,57.5 + parent: 2 + - uid: 3249 + components: + - type: Transform + pos: 61.5,57.5 + parent: 2 + - uid: 3250 + components: + - type: Transform + pos: 62.5,57.5 + parent: 2 + - uid: 3251 + components: + - type: Transform + pos: 60.5,58.5 + parent: 2 + - uid: 3252 + components: + - type: Transform + pos: 60.5,59.5 + parent: 2 + - uid: 3253 + components: + - type: Transform + pos: 60.5,60.5 + parent: 2 + - uid: 3254 + components: + - type: Transform + pos: 60.5,61.5 + parent: 2 + - uid: 3255 + components: + - type: Transform + pos: 60.5,62.5 + parent: 2 + - uid: 3256 + components: + - type: Transform + pos: 61.5,60.5 + parent: 2 + - uid: 3257 + components: + - type: Transform + pos: 62.5,60.5 + parent: 2 + - uid: 3258 + components: + - type: Transform + pos: 63.5,60.5 + parent: 2 + - uid: 3259 + components: + - type: Transform + pos: 64.5,60.5 + parent: 2 + - uid: 3260 + components: + - type: Transform + pos: 65.5,60.5 + parent: 2 + - uid: 3261 + components: + - type: Transform + pos: 66.5,60.5 + parent: 2 + - uid: 3262 + components: + - type: Transform + pos: 67.5,60.5 + parent: 2 + - uid: 3263 + components: + - type: Transform + pos: 68.5,60.5 + parent: 2 + - uid: 3264 + components: + - type: Transform + pos: 69.5,60.5 + parent: 2 + - uid: 3265 + components: + - type: Transform + pos: 70.5,60.5 + parent: 2 + - uid: 3266 + components: + - type: Transform + pos: 65.5,59.5 + parent: 2 + - uid: 3267 + components: + - type: Transform + pos: 65.5,58.5 + parent: 2 + - uid: 3268 + components: + - type: Transform + pos: 65.5,57.5 + parent: 2 + - uid: 3269 + components: + - type: Transform + pos: 65.5,56.5 + parent: 2 + - uid: 3270 + components: + - type: Transform + pos: 65.5,55.5 + parent: 2 + - uid: 3271 + components: + - type: Transform + pos: 65.5,54.5 + parent: 2 + - uid: 3272 + components: + - type: Transform + pos: 65.5,53.5 + parent: 2 + - uid: 3273 + components: + - type: Transform + pos: 65.5,52.5 + parent: 2 + - uid: 3274 + components: + - type: Transform + pos: 69.5,56.5 + parent: 2 + - uid: 3275 + components: + - type: Transform + pos: 71.5,56.5 + parent: 2 + - uid: 3276 + components: + - type: Transform + pos: 70.5,54.5 + parent: 2 + - uid: 3277 + components: + - type: Transform + pos: 70.5,58.5 + parent: 2 + - uid: 3278 + components: + - type: Transform + pos: 65.5,61.5 + parent: 2 + - uid: 3279 + components: + - type: Transform + pos: 68.5,61.5 + parent: 2 + - uid: 3280 + components: + - type: Transform + pos: 65.5,45.5 + parent: 2 + - uid: 3281 + components: + - type: Transform + pos: 65.5,44.5 + parent: 2 + - uid: 3282 + components: + - type: Transform + pos: 65.5,43.5 + parent: 2 + - uid: 3283 + components: + - type: Transform + pos: 65.5,42.5 + parent: 2 + - uid: 3284 + components: + - type: Transform + pos: 65.5,41.5 + parent: 2 + - uid: 3285 + components: + - type: Transform + pos: 65.5,40.5 + parent: 2 + - uid: 3286 + components: + - type: Transform + pos: 65.5,39.5 + parent: 2 + - uid: 3287 + components: + - type: Transform + pos: 65.5,38.5 + parent: 2 + - uid: 3288 + components: + - type: Transform + pos: 65.5,37.5 + parent: 2 + - uid: 3289 + components: + - type: Transform + pos: 65.5,36.5 + parent: 2 + - uid: 3290 + components: + - type: Transform + pos: 67.5,56.5 + parent: 2 + - uid: 3291 + components: + - type: Transform + pos: 66.5,56.5 + parent: 2 + - uid: 3292 + components: + - type: Transform + pos: 65.5,46.5 + parent: 2 + - uid: 3293 + components: + - type: Transform + pos: 65.5,47.5 + parent: 2 + - uid: 3294 + components: + - type: Transform + pos: 65.5,48.5 + parent: 2 + - uid: 3295 + components: + - type: Transform + pos: 65.5,49.5 + parent: 2 + - uid: 3296 + components: + - type: Transform + pos: 65.5,50.5 + parent: 2 + - uid: 3297 + components: + - type: Transform + pos: 65.5,51.5 + parent: 2 + - uid: 3298 + components: + - type: Transform + pos: 68.5,56.5 + parent: 2 + - uid: 3299 + components: + - type: Transform + pos: 68.5,63.5 + parent: 2 + - uid: 3300 + components: + - type: Transform + pos: 68.5,64.5 + parent: 2 + - uid: 3301 + components: + - type: Transform + pos: 70.5,61.5 + parent: 2 + - uid: 3302 + components: + - type: Transform + pos: 70.5,62.5 + parent: 2 + - uid: 3303 + components: + - type: Transform + pos: 70.5,63.5 + parent: 2 + - uid: 3304 + components: + - type: Transform + pos: 70.5,64.5 + parent: 2 + - uid: 3305 + components: + - type: Transform + pos: 62.5,61.5 + parent: 2 + - uid: 3306 + components: + - type: Transform + pos: 62.5,62.5 + parent: 2 + - uid: 3307 + components: + - type: Transform + pos: 62.5,63.5 + parent: 2 + - uid: 3308 + components: + - type: Transform + pos: 62.5,64.5 + parent: 2 + - uid: 3309 + components: + - type: Transform + pos: 60.5,63.5 + parent: 2 + - uid: 3310 + components: + - type: Transform + pos: 60.5,64.5 + parent: 2 + - uid: 3311 + components: + - type: Transform + pos: 71.5,60.5 + parent: 2 + - uid: 3312 + components: + - type: Transform + pos: 72.5,60.5 + parent: 2 + - uid: 3313 + components: + - type: Transform + pos: 73.5,60.5 + parent: 2 + - uid: 3314 + components: + - type: Transform + pos: 74.5,60.5 + parent: 2 + - uid: 3315 + components: + - type: Transform + pos: 75.5,60.5 + parent: 2 + - uid: 3316 + components: + - type: Transform + pos: 76.5,60.5 + parent: 2 + - uid: 3317 + components: + - type: Transform + pos: 77.5,60.5 + parent: 2 + - uid: 3318 + components: + - type: Transform + pos: 78.5,60.5 + parent: 2 + - uid: 3319 + components: + - type: Transform + pos: 79.5,60.5 + parent: 2 + - uid: 3320 + components: + - type: Transform + pos: 80.5,60.5 + parent: 2 + - uid: 3321 + components: + - type: Transform + pos: 74.5,61.5 + parent: 2 + - uid: 3322 + components: + - type: Transform + pos: 74.5,59.5 + parent: 2 + - uid: 3323 + components: + - type: Transform + pos: 70.5,22.5 + parent: 2 + - uid: 3324 + components: + - type: Transform + pos: 70.5,21.5 + parent: 2 + - uid: 3325 + components: + - type: Transform + pos: 70.5,20.5 + parent: 2 + - uid: 3326 + components: + - type: Transform + pos: 70.5,19.5 + parent: 2 + - uid: 3327 + components: + - type: Transform + pos: 70.5,18.5 + parent: 2 + - uid: 3328 + components: + - type: Transform + pos: 70.5,17.5 + parent: 2 + - uid: 3329 + components: + - type: Transform + pos: 71.5,19.5 + parent: 2 + - uid: 3330 + components: + - type: Transform + pos: 72.5,19.5 + parent: 2 + - uid: 3331 + components: + - type: Transform + pos: 69.5,19.5 + parent: 2 + - uid: 3332 + components: + - type: Transform + pos: 68.5,19.5 + parent: 2 + - uid: 3333 + components: + - type: Transform + pos: 67.5,19.5 + parent: 2 + - uid: 3334 + components: + - type: Transform + pos: 66.5,19.5 + parent: 2 + - uid: 3335 + components: + - type: Transform + pos: 65.5,19.5 + parent: 2 + - uid: 3336 + components: + - type: Transform + pos: 64.5,19.5 + parent: 2 + - uid: 3337 + components: + - type: Transform + pos: 65.5,20.5 + parent: 2 + - uid: 3338 + components: + - type: Transform + pos: 65.5,21.5 + parent: 2 + - uid: 3339 + components: + - type: Transform + pos: 65.5,22.5 + parent: 2 + - uid: 3340 + components: + - type: Transform + pos: 65.5,23.5 + parent: 2 + - uid: 3341 + components: + - type: Transform + pos: 65.5,24.5 + parent: 2 + - uid: 3342 + components: + - type: Transform + pos: 65.5,25.5 + parent: 2 + - uid: 3343 + components: + - type: Transform + pos: 65.5,26.5 + parent: 2 + - uid: 3344 + components: + - type: Transform + pos: 65.5,27.5 + parent: 2 + - uid: 3345 + components: + - type: Transform + pos: 65.5,28.5 + parent: 2 + - uid: 3346 + components: + - type: Transform + pos: 65.5,29.5 + parent: 2 + - uid: 3347 + components: + - type: Transform + pos: 65.5,30.5 + parent: 2 + - uid: 3348 + components: + - type: Transform + pos: 65.5,31.5 + parent: 2 + - uid: 3349 + components: + - type: Transform + pos: 65.5,32.5 + parent: 2 + - uid: 3350 + components: + - type: Transform + pos: 65.5,18.5 + parent: 2 + - uid: 3351 + components: + - type: Transform + pos: 65.5,17.5 + parent: 2 + - uid: 3352 + components: + - type: Transform + pos: 65.5,16.5 + parent: 2 + - uid: 3353 + components: + - type: Transform + pos: 65.5,15.5 + parent: 2 + - uid: 3354 + components: + - type: Transform + pos: 65.5,14.5 + parent: 2 + - uid: 3355 + components: + - type: Transform + pos: 65.5,13.5 + parent: 2 + - uid: 3356 + components: + - type: Transform + pos: 64.5,15.5 + parent: 2 + - uid: 3357 + components: + - type: Transform + pos: 66.5,15.5 + parent: 2 + - uid: 3358 + components: + - type: Transform + pos: 67.5,15.5 + parent: 2 + - uid: 3359 + components: + - type: Transform + pos: 73.5,16.5 + parent: 2 + - uid: 3360 + components: + - type: Transform + pos: 73.5,15.5 + parent: 2 + - uid: 3361 + components: + - type: Transform + pos: 73.5,14.5 + parent: 2 + - uid: 3362 + components: + - type: Transform + pos: 73.5,13.5 + parent: 2 + - uid: 3363 + components: + - type: Transform + pos: 72.5,14.5 + parent: 2 + - uid: 3364 + components: + - type: Transform + pos: 71.5,14.5 + parent: 2 + - uid: 3365 + components: + - type: Transform + pos: 70.5,14.5 + parent: 2 + - uid: 3366 + components: + - type: Transform + pos: 69.5,14.5 + parent: 2 + - uid: 3367 + components: + - type: Transform + pos: 62.5,6.5 + parent: 2 + - uid: 3368 + components: + - type: Transform + pos: 63.5,6.5 + parent: 2 + - uid: 3369 + components: + - type: Transform + pos: 64.5,6.5 + parent: 2 + - uid: 3370 + components: + - type: Transform + pos: 65.5,6.5 + parent: 2 + - uid: 3371 + components: + - type: Transform + pos: 66.5,6.5 + parent: 2 + - uid: 3372 + components: + - type: Transform + pos: 67.5,6.5 + parent: 2 + - uid: 3373 + components: + - type: Transform + pos: 65.5,5.5 + parent: 2 + - uid: 3374 + components: + - type: Transform + pos: 65.5,4.5 + parent: 2 + - uid: 3375 + components: + - type: Transform + pos: 65.5,3.5 + parent: 2 + - uid: 3376 + components: + - type: Transform + pos: 65.5,2.5 + parent: 2 + - uid: 3377 + components: + - type: Transform + pos: 65.5,1.5 + parent: 2 + - uid: 3378 + components: + - type: Transform + pos: 65.5,0.5 + parent: 2 + - uid: 3379 + components: + - type: Transform + pos: 66.5,3.5 + parent: 2 + - uid: 3380 + components: + - type: Transform + pos: 67.5,3.5 + parent: 2 + - uid: 3381 + components: + - type: Transform + pos: 68.5,3.5 + parent: 2 + - uid: 3382 + components: + - type: Transform + pos: 69.5,3.5 + parent: 2 + - uid: 3383 + components: + - type: Transform + pos: 70.5,3.5 + parent: 2 + - uid: 3384 + components: + - type: Transform + pos: 71.5,3.5 + parent: 2 + - uid: 3385 + components: + - type: Transform + pos: 72.5,3.5 + parent: 2 + - uid: 3386 + components: + - type: Transform + pos: 73.5,3.5 + parent: 2 + - uid: 3387 + components: + - type: Transform + pos: 74.5,3.5 + parent: 2 + - uid: 3388 + components: + - type: Transform + pos: 75.5,3.5 + parent: 2 + - uid: 3389 + components: + - type: Transform + pos: 73.5,2.5 + parent: 2 + - uid: 3390 + components: + - type: Transform + pos: 73.5,1.5 + parent: 2 + - uid: 3391 + components: + - type: Transform + pos: 73.5,0.5 + parent: 2 + - uid: 3392 + components: + - type: Transform + pos: 73.5,-0.5 + parent: 2 + - uid: 3393 + components: + - type: Transform + pos: 73.5,-1.5 + parent: 2 + - uid: 3394 + components: + - type: Transform + pos: 73.5,-2.5 + parent: 2 + - uid: 3395 + components: + - type: Transform + pos: 73.5,-3.5 + parent: 2 + - uid: 3396 + components: + - type: Transform + pos: 73.5,-4.5 + parent: 2 + - uid: 3397 + components: + - type: Transform + pos: 76.5,0.5 + parent: 2 + - uid: 3398 + components: + - type: Transform + pos: 77.5,0.5 + parent: 2 + - uid: 3399 + components: + - type: Transform + pos: 75.5,0.5 + parent: 2 + - uid: 3400 + components: + - type: Transform + pos: 74.5,0.5 + parent: 2 + - uid: 3401 + components: + - type: Transform + pos: 73.5,4.5 + parent: 2 + - uid: 3402 + components: + - type: Transform + pos: 73.5,5.5 + parent: 2 + - uid: 3403 + components: + - type: Transform + pos: 73.5,6.5 + parent: 2 + - uid: 3404 + components: + - type: Transform + pos: 73.5,7.5 + parent: 2 + - uid: 3405 + components: + - type: Transform + pos: 73.5,8.5 + parent: 2 + - uid: 3406 + components: + - type: Transform + pos: 74.5,7.5 + parent: 2 + - uid: 3407 + components: + - type: Transform + pos: 75.5,7.5 + parent: 2 + - uid: 3408 + components: + - type: Transform + pos: 76.5,7.5 + parent: 2 + - uid: 3409 + components: + - type: Transform + pos: 77.5,7.5 + parent: 2 + - uid: 3410 + components: + - type: Transform + pos: 75.5,4.5 + parent: 2 + - uid: 3411 + components: + - type: Transform + pos: 65.5,7.5 + parent: 2 + - uid: 3412 + components: + - type: Transform + pos: 65.5,8.5 + parent: 2 + - uid: 3413 + components: + - type: Transform + pos: 65.5,9.5 + parent: 2 + - uid: 3414 + components: + - type: Transform + pos: 65.5,10.5 + parent: 2 + - uid: 3415 + components: + - type: Transform + pos: 65.5,11.5 + parent: 2 + - uid: 3416 + components: + - type: Transform + pos: 64.5,10.5 + parent: 2 + - uid: 3417 + components: + - type: Transform + pos: 63.5,10.5 + parent: 2 + - uid: 3418 + components: + - type: Transform + pos: 62.5,10.5 + parent: 2 + - uid: 3419 + components: + - type: Transform + pos: 66.5,10.5 + parent: 2 + - uid: 3420 + components: + - type: Transform + pos: 67.5,10.5 + parent: 2 + - uid: 3421 + components: + - type: Transform + pos: 68.5,10.5 + parent: 2 + - uid: 3422 + components: + - type: Transform + pos: 69.5,10.5 + parent: 2 + - uid: 3423 + components: + - type: Transform + pos: 70.5,10.5 + parent: 2 + - uid: 3424 + components: + - type: Transform + pos: 71.5,10.5 + parent: 2 + - uid: 3425 + components: + - type: Transform + pos: 72.5,10.5 + parent: 2 + - uid: 3426 + components: + - type: Transform + pos: 73.5,10.5 + parent: 2 + - uid: 3427 + components: + - type: Transform + pos: 73.5,9.5 + parent: 2 + - uid: 3428 + components: + - type: Transform + pos: 19.5,24.5 + parent: 2 + - uid: 3429 + components: + - type: Transform + pos: 20.5,24.5 + parent: 2 + - uid: 3430 + components: + - type: Transform + pos: 21.5,24.5 + parent: 2 + - uid: 3431 + components: + - type: Transform + pos: 22.5,24.5 + parent: 2 + - uid: 3432 + components: + - type: Transform + pos: 23.5,24.5 + parent: 2 + - uid: 3433 + components: + - type: Transform + pos: 23.5,24.5 + parent: 2 + - uid: 3434 + components: + - type: Transform + pos: 22.5,25.5 + parent: 2 + - uid: 3435 + components: + - type: Transform + pos: 22.5,26.5 + parent: 2 + - uid: 3436 + components: + - type: Transform + pos: 22.5,27.5 + parent: 2 + - uid: 3437 + components: + - type: Transform + pos: 22.5,28.5 + parent: 2 + - uid: 3438 + components: + - type: Transform + pos: 22.5,23.5 + parent: 2 + - uid: 3439 + components: + - type: Transform + pos: 24.5,27.5 + parent: 2 + - uid: 3440 + components: + - type: Transform + pos: 25.5,27.5 + parent: 2 + - uid: 3441 + components: + - type: Transform + pos: 26.5,27.5 + parent: 2 + - uid: 3442 + components: + - type: Transform + pos: 27.5,27.5 + parent: 2 + - uid: 3443 + components: + - type: Transform + pos: 28.5,27.5 + parent: 2 + - uid: 3444 + components: + - type: Transform + pos: 29.5,27.5 + parent: 2 + - uid: 3445 + components: + - type: Transform + pos: 27.5,26.5 + parent: 2 + - uid: 3446 + components: + - type: Transform + pos: 27.5,25.5 + parent: 2 + - uid: 3447 + components: + - type: Transform + pos: 27.5,24.5 + parent: 2 + - uid: 3448 + components: + - type: Transform + pos: 27.5,23.5 + parent: 2 + - uid: 3449 + components: + - type: Transform + pos: 27.5,28.5 + parent: 2 + - uid: 3450 + components: + - type: Transform + pos: 27.5,29.5 + parent: 2 + - uid: 3452 + components: + - type: Transform + pos: -31.5,30.5 + parent: 2 + - uid: 3453 + components: + - type: Transform + pos: -31.5,31.5 + parent: 2 + - uid: 3458 + components: + - type: Transform + pos: -31.5,32.5 + parent: 2 + - uid: 3467 + components: + - type: Transform + pos: -31.5,28.5 + parent: 2 + - uid: 3468 + components: + - type: Transform + pos: -31.5,29.5 + parent: 2 + - uid: 3487 + components: + - type: Transform + pos: -30.5,7.5 + parent: 2 + - uid: 3488 + components: + - type: Transform + pos: -30.5,8.5 + parent: 2 + - uid: 3489 + components: + - type: Transform + pos: -30.5,9.5 + parent: 2 + - uid: 3490 + components: + - type: Transform + pos: -30.5,10.5 + parent: 2 + - uid: 3491 + components: + - type: Transform + pos: -30.5,11.5 + parent: 2 + - uid: 3492 + components: + - type: Transform + pos: -30.5,12.5 + parent: 2 + - uid: 3493 + components: + - type: Transform + pos: -30.5,13.5 + parent: 2 + - uid: 3494 + components: + - type: Transform + pos: -30.5,14.5 + parent: 2 + - uid: 3495 + components: + - type: Transform + pos: -30.5,15.5 + parent: 2 + - uid: 3496 + components: + - type: Transform + pos: -30.5,16.5 + parent: 2 + - uid: 3497 + components: + - type: Transform + pos: -30.5,17.5 + parent: 2 + - uid: 3498 + components: + - type: Transform + pos: -30.5,18.5 + parent: 2 + - uid: 3499 + components: + - type: Transform + pos: -29.5,14.5 + parent: 2 + - uid: 3500 + components: + - type: Transform + pos: -28.5,14.5 + parent: 2 + - uid: 3501 + components: + - type: Transform + pos: -27.5,14.5 + parent: 2 + - uid: 3502 + components: + - type: Transform + pos: -26.5,14.5 + parent: 2 + - uid: 3503 + components: + - type: Transform + pos: -25.5,14.5 + parent: 2 + - uid: 3504 + components: + - type: Transform + pos: -29.5,10.5 + parent: 2 + - uid: 3505 + components: + - type: Transform + pos: -28.5,10.5 + parent: 2 + - uid: 3506 + components: + - type: Transform + pos: -27.5,10.5 + parent: 2 + - uid: 3507 + components: + - type: Transform + pos: -31.5,10.5 + parent: 2 + - uid: 3508 + components: + - type: Transform + pos: -32.5,10.5 + parent: 2 + - uid: 3509 + components: + - type: Transform + pos: -33.5,10.5 + parent: 2 + - uid: 3510 + components: + - type: Transform + pos: -31.5,14.5 + parent: 2 + - uid: 3511 + components: + - type: Transform + pos: -32.5,14.5 + parent: 2 + - uid: 3512 + components: + - type: Transform + pos: -33.5,14.5 + parent: 2 + - uid: 3513 + components: + - type: Transform + pos: 7.5,80.5 + parent: 2 + - uid: 3514 + components: + - type: Transform + pos: 8.5,80.5 + parent: 2 + - uid: 3515 + components: + - type: Transform + pos: 9.5,80.5 + parent: 2 + - uid: 3516 + components: + - type: Transform + pos: -15.5,38.5 + parent: 2 + - uid: 3517 + components: + - type: Transform + pos: -14.5,36.5 + parent: 2 + - uid: 3518 + components: + - type: Transform + pos: -16.5,38.5 + parent: 2 + - uid: 3519 + components: + - type: Transform + pos: -14.5,37.5 + parent: 2 + - uid: 3520 + components: + - type: Transform + pos: -14.5,34.5 + parent: 2 + - uid: 3521 + components: + - type: Transform + pos: -14.5,35.5 + parent: 2 + - uid: 3522 + components: + - type: Transform + pos: -14.5,33.5 + parent: 2 + - uid: 3523 + components: + - type: Transform + pos: -14.5,32.5 + parent: 2 + - uid: 3524 + components: + - type: Transform + pos: -15.5,38.5 + parent: 2 + - uid: 3525 + components: + - type: Transform + pos: -14.5,31.5 + parent: 2 + - uid: 3526 + components: + - type: Transform + pos: -14.5,30.5 + parent: 2 + - uid: 3527 + components: + - type: Transform + pos: -14.5,30.5 + parent: 2 + - uid: 3528 + components: + - type: Transform + pos: -14.5,30.5 + parent: 2 + - uid: 3529 + components: + - type: Transform + pos: -15.5,30.5 + parent: 2 + - uid: 3530 + components: + - type: Transform + pos: -16.5,30.5 + parent: 2 + - uid: 3531 + components: + - type: Transform + pos: -16.5,30.5 + parent: 2 + - uid: 3532 + components: + - type: Transform + pos: -13.5,30.5 + parent: 2 + - uid: 3533 + components: + - type: Transform + pos: -13.5,30.5 + parent: 2 + - uid: 3534 + components: + - type: Transform + pos: -15.5,34.5 + parent: 2 + - uid: 3535 + components: + - type: Transform + pos: -16.5,34.5 + parent: 2 + - uid: 3536 + components: + - type: Transform + pos: -17.5,34.5 + parent: 2 + - uid: 3537 + components: + - type: Transform + pos: -18.5,34.5 + parent: 2 + - uid: 3538 + components: + - type: Transform + pos: -19.5,34.5 + parent: 2 + - uid: 3539 + components: + - type: Transform + pos: -20.5,34.5 + parent: 2 + - uid: 3540 + components: + - type: Transform + pos: -21.5,34.5 + parent: 2 + - uid: 3541 + components: + - type: Transform + pos: -22.5,34.5 + parent: 2 + - uid: 3542 + components: + - type: Transform + pos: -23.5,34.5 + parent: 2 + - uid: 3543 + components: + - type: Transform + pos: -24.5,34.5 + parent: 2 + - uid: 3544 + components: + - type: Transform + pos: -25.5,34.5 + parent: 2 + - uid: 3545 + components: + - type: Transform + pos: -26.5,34.5 + parent: 2 + - uid: 3546 + components: + - type: Transform + pos: -26.5,35.5 + parent: 2 + - uid: 3547 + components: + - type: Transform + pos: -26.5,36.5 + parent: 2 + - uid: 3548 + components: + - type: Transform + pos: -26.5,37.5 + parent: 2 + - uid: 3549 + components: + - type: Transform + pos: -26.5,38.5 + parent: 2 + - uid: 3550 + components: + - type: Transform + pos: -26.5,39.5 + parent: 2 + - uid: 3551 + components: + - type: Transform + pos: -26.5,40.5 + parent: 2 + - uid: 3552 + components: + - type: Transform + pos: -26.5,41.5 + parent: 2 + - uid: 3553 + components: + - type: Transform + pos: -26.5,41.5 + parent: 2 + - uid: 3554 + components: + - type: Transform + pos: -25.5,41.5 + parent: 2 + - uid: 3555 + components: + - type: Transform + pos: -24.5,41.5 + parent: 2 + - uid: 3556 + components: + - type: Transform + pos: -23.5,41.5 + parent: 2 + - uid: 3557 + components: + - type: Transform + pos: -22.5,41.5 + parent: 2 + - uid: 3558 + components: + - type: Transform + pos: -21.5,41.5 + parent: 2 + - uid: 3559 + components: + - type: Transform + pos: -20.5,41.5 + parent: 2 + - uid: 3560 + components: + - type: Transform + pos: -19.5,41.5 + parent: 2 + - uid: 3561 + components: + - type: Transform + pos: -18.5,41.5 + parent: 2 + - uid: 3562 + components: + - type: Transform + pos: -17.5,41.5 + parent: 2 + - uid: 3563 + components: + - type: Transform + pos: -16.5,41.5 + parent: 2 + - uid: 3564 + components: + - type: Transform + pos: -15.5,41.5 + parent: 2 + - uid: 3565 + components: + - type: Transform + pos: -14.5,41.5 + parent: 2 + - uid: 3566 + components: + - type: Transform + pos: -13.5,41.5 + parent: 2 + - uid: 3567 + components: + - type: Transform + pos: -14.5,40.5 + parent: 2 + - uid: 3568 + components: + - type: Transform + pos: -14.5,39.5 + parent: 2 + - uid: 3569 + components: + - type: Transform + pos: -25.5,38.5 + parent: 2 + - uid: 3570 + components: + - type: Transform + pos: -24.5,38.5 + parent: 2 + - uid: 3571 + components: + - type: Transform + pos: -23.5,38.5 + parent: 2 + - uid: 3572 + components: + - type: Transform + pos: -22.5,38.5 + parent: 2 + - uid: 3573 + components: + - type: Transform + pos: -26.5,33.5 + parent: 2 + - uid: 3574 + components: + - type: Transform + pos: -26.5,32.5 + parent: 2 + - uid: 3575 + components: + - type: Transform + pos: -26.5,31.5 + parent: 2 + - uid: 3576 + components: + - type: Transform + pos: -26.5,30.5 + parent: 2 + - uid: 3577 + components: + - type: Transform + pos: -26.5,29.5 + parent: 2 + - uid: 3578 + components: + - type: Transform + pos: -26.5,28.5 + parent: 2 + - uid: 3579 + components: + - type: Transform + pos: -26.5,27.5 + parent: 2 + - uid: 3580 + components: + - type: Transform + pos: -26.5,27.5 + parent: 2 + - uid: 3581 + components: + - type: Transform + pos: -27.5,27.5 + parent: 2 + - uid: 3582 + components: + - type: Transform + pos: -27.5,27.5 + parent: 2 + - uid: 3583 + components: + - type: Transform + pos: -25.5,27.5 + parent: 2 + - uid: 3584 + components: + - type: Transform + pos: -24.5,27.5 + parent: 2 + - uid: 3585 + components: + - type: Transform + pos: -23.5,27.5 + parent: 2 + - uid: 3586 + components: + - type: Transform + pos: -22.5,27.5 + parent: 2 + - uid: 3587 + components: + - type: Transform + pos: -21.5,27.5 + parent: 2 + - uid: 3588 + components: + - type: Transform + pos: -20.5,27.5 + parent: 2 + - uid: 3589 + components: + - type: Transform + pos: -19.5,27.5 + parent: 2 + - uid: 3590 + components: + - type: Transform + pos: -18.5,27.5 + parent: 2 + - uid: 3591 + components: + - type: Transform + pos: -17.5,27.5 + parent: 2 + - uid: 3592 + components: + - type: Transform + pos: -16.5,27.5 + parent: 2 + - uid: 3593 + components: + - type: Transform + pos: -15.5,27.5 + parent: 2 + - uid: 3594 + components: + - type: Transform + pos: -14.5,27.5 + parent: 2 + - uid: 3595 + components: + - type: Transform + pos: -13.5,27.5 + parent: 2 + - uid: 3596 + components: + - type: Transform + pos: -24.5,26.5 + parent: 2 + - uid: 3597 + components: + - type: Transform + pos: -24.5,25.5 + parent: 2 + - uid: 3598 + components: + - type: Transform + pos: -23.5,25.5 + parent: 2 + - uid: 3599 + components: + - type: Transform + pos: -22.5,25.5 + parent: 2 + - uid: 3600 + components: + - type: Transform + pos: -21.5,25.5 + parent: 2 + - uid: 3601 + components: + - type: Transform + pos: -20.5,25.5 + parent: 2 + - uid: 3602 + components: + - type: Transform + pos: -19.5,25.5 + parent: 2 + - uid: 3603 + components: + - type: Transform + pos: -18.5,25.5 + parent: 2 + - uid: 3604 + components: + - type: Transform + pos: -17.5,25.5 + parent: 2 + - uid: 3605 + components: + - type: Transform + pos: -17.5,25.5 + parent: 2 + - uid: 3606 + components: + - type: Transform + pos: -17.5,26.5 + parent: 2 + - uid: 3607 + components: + - type: Transform + pos: -14.5,28.5 + parent: 2 + - uid: 3608 + components: + - type: Transform + pos: -14.5,29.5 + parent: 2 + - uid: 3609 + components: + - type: Transform + pos: -19.5,28.5 + parent: 2 + - uid: 3610 + components: + - type: Transform + pos: -19.5,29.5 + parent: 2 + - uid: 3611 + components: + - type: Transform + pos: -19.5,30.5 + parent: 2 + - uid: 3612 + components: + - type: Transform + pos: -19.5,31.5 + parent: 2 + - uid: 3613 + components: + - type: Transform + pos: -25.5,30.5 + parent: 2 + - uid: 3614 + components: + - type: Transform + pos: -24.5,30.5 + parent: 2 + - uid: 3615 + components: + - type: Transform + pos: -23.5,30.5 + parent: 2 + - uid: 3616 + components: + - type: Transform + pos: -22.5,30.5 + parent: 2 + - uid: 3617 + components: + - type: Transform + pos: -22.5,30.5 + parent: 2 + - uid: 3618 + components: + - type: Transform + pos: -22.5,30.5 + parent: 2 + - uid: 3619 + components: + - type: Transform + pos: -19.5,40.5 + parent: 2 + - uid: 3620 + components: + - type: Transform + pos: -19.5,39.5 + parent: 2 + - uid: 3621 + components: + - type: Transform + pos: -19.5,38.5 + parent: 2 + - uid: 3622 + components: + - type: Transform + pos: -19.5,37.5 + parent: 2 + - uid: 3623 + components: + - type: Transform + pos: -14.5,25.5 + parent: 2 + - uid: 3624 + components: + - type: Transform + pos: -14.5,24.5 + parent: 2 + - uid: 3625 + components: + - type: Transform + pos: -14.5,23.5 + parent: 2 + - uid: 3626 + components: + - type: Transform + pos: -14.5,22.5 + parent: 2 + - uid: 3627 + components: + - type: Transform + pos: -13.5,24.5 + parent: 2 + - uid: 3628 + components: + - type: Transform + pos: -12.5,24.5 + parent: 2 + - uid: 3629 + components: + - type: Transform + pos: -14.5,26.5 + parent: 2 + - uid: 3630 + components: + - type: Transform + pos: -14.5,1.5 + parent: 2 + - uid: 3631 + components: + - type: Transform + pos: -14.5,0.5 + parent: 2 + - uid: 3632 + components: + - type: Transform + pos: -14.5,-0.5 + parent: 2 + - uid: 3633 + components: + - type: Transform + pos: -14.5,-1.5 + parent: 2 + - uid: 3634 + components: + - type: Transform + pos: -15.5,-1.5 + parent: 2 + - uid: 3635 + components: + - type: Transform + pos: -16.5,-1.5 + parent: 2 + - uid: 3636 + components: + - type: Transform + pos: -16.5,-2.5 + parent: 2 + - uid: 3637 + components: + - type: Transform + pos: -16.5,-3.5 + parent: 2 + - uid: 3638 + components: + - type: Transform + pos: -16.5,-4.5 + parent: 2 + - uid: 3639 + components: + - type: Transform + pos: -16.5,-5.5 + parent: 2 + - uid: 3640 + components: + - type: Transform + pos: -16.5,-6.5 + parent: 2 + - uid: 3641 + components: + - type: Transform + pos: -16.5,-7.5 + parent: 2 + - uid: 3642 + components: + - type: Transform + pos: -15.5,2.5 + parent: 2 + - uid: 3643 + components: + - type: Transform + pos: -16.5,2.5 + parent: 2 + - uid: 3644 + components: + - type: Transform + pos: -15.5,-3.5 + parent: 2 + - uid: 3645 + components: + - type: Transform + pos: -14.5,-3.5 + parent: 2 + - uid: 3646 + components: + - type: Transform + pos: -15.5,-7.5 + parent: 2 + - uid: 3647 + components: + - type: Transform + pos: -14.5,-7.5 + parent: 2 + - uid: 3648 + components: + - type: Transform + pos: -17.5,0.5 + parent: 2 + - uid: 3649 + components: + - type: Transform + pos: -17.5,1.5 + parent: 2 + - uid: 3650 + components: + - type: Transform + pos: -17.5,2.5 + parent: 2 + - uid: 3651 + components: + - type: Transform + pos: -16.5,-8.5 + parent: 2 + - uid: 3652 + components: + - type: Transform + pos: -16.5,-9.5 + parent: 2 + - uid: 3653 + components: + - type: Transform + pos: -16.5,-10.5 + parent: 2 + - uid: 3654 + components: + - type: Transform + pos: -16.5,-11.5 + parent: 2 + - uid: 3655 + components: + - type: Transform + pos: -16.5,-12.5 + parent: 2 + - uid: 3656 + components: + - type: Transform + pos: -17.5,-12.5 + parent: 2 + - uid: 3657 + components: + - type: Transform + pos: -18.5,-12.5 + parent: 2 + - uid: 3658 + components: + - type: Transform + pos: -15.5,-12.5 + parent: 2 + - uid: 3659 + components: + - type: Transform + pos: -14.5,-12.5 + parent: 2 + - uid: 3660 + components: + - type: Transform + pos: -13.5,-12.5 + parent: 2 + - uid: 3661 + components: + - type: Transform + pos: -15.5,-9.5 + parent: 2 + - uid: 3662 + components: + - type: Transform + pos: -14.5,-9.5 + parent: 2 + - uid: 3663 + components: + - type: Transform + pos: -13.5,-9.5 + parent: 2 + - uid: 3664 + components: + - type: Transform + pos: -17.5,-9.5 + parent: 2 + - uid: 3665 + components: + - type: Transform + pos: -18.5,-9.5 + parent: 2 + - uid: 3666 + components: + - type: Transform + pos: -17.5,-0.5 + parent: 2 + - uid: 3667 + components: + - type: Transform + pos: -17.5,-1.5 + parent: 2 + - uid: 3668 + components: + - type: Transform + pos: -6.5,18.5 + parent: 2 + - uid: 13018 + components: + - type: Transform + pos: 73.5,24.5 + parent: 2 + - uid: 13719 + components: + - type: Transform + pos: 33.5,-1.5 + parent: 2 + - uid: 13758 + components: + - type: Transform + pos: 72.5,24.5 + parent: 2 + - uid: 15034 + components: + - type: Transform + pos: 34.5,-1.5 + parent: 2 + - uid: 15035 + components: + - type: Transform + pos: 33.5,-2.5 + parent: 2 + - uid: 18587 + components: + - type: Transform + pos: 69.5,22.5 + parent: 2 + - uid: 18794 + components: + - type: Transform + pos: 77.5,47.5 + parent: 2 + - uid: 18795 + components: + - type: Transform + pos: 76.5,47.5 + parent: 2 + - uid: 18796 + components: + - type: Transform + pos: 75.5,47.5 + parent: 2 + - uid: 18797 + components: + - type: Transform + pos: 74.5,47.5 + parent: 2 + - uid: 18798 + components: + - type: Transform + pos: 73.5,47.5 + parent: 2 + - uid: 18799 + components: + - type: Transform + pos: 75.5,48.5 + parent: 2 + - uid: 18800 + components: + - type: Transform + pos: 75.5,49.5 + parent: 2 + - uid: 18801 + components: + - type: Transform + pos: 75.5,50.5 + parent: 2 + - uid: 18802 + components: + - type: Transform + pos: 75.5,51.5 + parent: 2 + - uid: 18803 + components: + - type: Transform + pos: 75.5,52.5 + parent: 2 + - uid: 18804 + components: + - type: Transform + pos: 75.5,53.5 + parent: 2 + - uid: 18805 + components: + - type: Transform + pos: 74.5,53.5 + parent: 2 + - uid: 18806 + components: + - type: Transform + pos: 73.5,53.5 + parent: 2 + - uid: 18807 + components: + - type: Transform + pos: 73.5,54.5 + parent: 2 + - uid: 18808 + components: + - type: Transform + pos: 74.5,50.5 + parent: 2 + - uid: 18809 + components: + - type: Transform + pos: 73.5,50.5 + parent: 2 + - uid: 18810 + components: + - type: Transform + pos: 72.5,50.5 + parent: 2 + - uid: 18811 + components: + - type: Transform + pos: 71.5,50.5 + parent: 2 + - uid: 18812 + components: + - type: Transform + pos: 70.5,50.5 + parent: 2 + - uid: 18813 + components: + - type: Transform + pos: 69.5,50.5 + parent: 2 + - uid: 18814 + components: + - type: Transform + pos: 69.5,51.5 + parent: 2 + - uid: 18815 + components: + - type: Transform + pos: 69.5,49.5 + parent: 2 + - uid: 18816 + components: + - type: Transform + pos: 76.5,53.5 + parent: 2 + - uid: 18817 + components: + - type: Transform + pos: 77.5,53.5 + parent: 2 + - uid: 18818 + components: + - type: Transform + pos: 78.5,53.5 + parent: 2 + - uid: 18819 + components: + - type: Transform + pos: 79.5,53.5 + parent: 2 + - uid: 18820 + components: + - type: Transform + pos: 79.5,52.5 + parent: 2 + - uid: 18821 + components: + - type: Transform + pos: 79.5,51.5 + parent: 2 + - uid: 18822 + components: + - type: Transform + pos: 79.5,50.5 + parent: 2 + - uid: 18823 + components: + - type: Transform + pos: 79.5,49.5 + parent: 2 + - uid: 18824 + components: + - type: Transform + pos: 78.5,54.5 + parent: 2 + - uid: 18825 + components: + - type: Transform + pos: 78.5,55.5 + parent: 2 + - uid: 18826 + components: + - type: Transform + pos: 78.5,56.5 + parent: 2 + - uid: 18827 + components: + - type: Transform + pos: 78.5,57.5 + parent: 2 + - uid: 18828 + components: + - type: Transform + pos: 77.5,56.5 + parent: 2 + - uid: 18829 + components: + - type: Transform + pos: 79.5,56.5 + parent: 2 + - uid: 18830 + components: + - type: Transform + pos: 76.5,56.5 + parent: 2 + - uid: 18831 + components: + - type: Transform + pos: 75.5,56.5 + parent: 2 + - uid: 18832 + components: + - type: Transform + pos: 75.5,55.5 + parent: 2 + - uid: 18833 + components: + - type: Transform + pos: 75.5,54.5 + parent: 2 + - uid: 18834 + components: + - type: Transform + pos: 75.5,57.5 + parent: 2 + - uid: 19431 + components: + - type: Transform + pos: -36.5,69.5 + parent: 2 + - uid: 19442 + components: + - type: Transform + pos: -36.5,70.5 + parent: 2 + - uid: 19443 + components: + - type: Transform + pos: -36.5,71.5 + parent: 2 + - uid: 19444 + components: + - type: Transform + pos: -35.5,71.5 + parent: 2 + - uid: 19445 + components: + - type: Transform + pos: -35.5,72.5 + parent: 2 + - uid: 19446 + components: + - type: Transform + pos: -35.5,73.5 + parent: 2 + - uid: 19447 + components: + - type: Transform + pos: -35.5,74.5 + parent: 2 + - uid: 19448 + components: + - type: Transform + pos: -35.5,75.5 + parent: 2 + - uid: 19449 + components: + - type: Transform + pos: -35.5,76.5 + parent: 2 + - uid: 19450 + components: + - type: Transform + pos: -34.5,76.5 + parent: 2 + - uid: 19451 + components: + - type: Transform + pos: -34.5,77.5 + parent: 2 + - uid: 19452 + components: + - type: Transform + pos: -33.5,77.5 + parent: 2 + - uid: 19453 + components: + - type: Transform + pos: -33.5,78.5 + parent: 2 + - uid: 19454 + components: + - type: Transform + pos: -32.5,78.5 + parent: 2 + - uid: 19455 + components: + - type: Transform + pos: -31.5,78.5 + parent: 2 + - uid: 19456 + components: + - type: Transform + pos: -30.5,78.5 + parent: 2 + - uid: 19457 + components: + - type: Transform + pos: -29.5,78.5 + parent: 2 + - uid: 19458 + components: + - type: Transform + pos: -29.5,77.5 + parent: 2 + - uid: 19459 + components: + - type: Transform + pos: -28.5,77.5 + parent: 2 + - uid: 19460 + components: + - type: Transform + pos: -28.5,76.5 + parent: 2 + - uid: 19461 + components: + - type: Transform + pos: -27.5,76.5 + parent: 2 + - uid: 19462 + components: + - type: Transform + pos: -27.5,75.5 + parent: 2 + - uid: 19463 + components: + - type: Transform + pos: -26.5,75.5 + parent: 2 + - uid: 19464 + components: + - type: Transform + pos: -25.5,75.5 + parent: 2 + - uid: 19465 + components: + - type: Transform + pos: -25.5,74.5 + parent: 2 + - uid: 19467 + components: + - type: Transform + pos: -24.5,74.5 + parent: 2 + - uid: 19468 + components: + - type: Transform + pos: -23.5,74.5 + parent: 2 + - uid: 19469 + components: + - type: Transform + pos: -22.5,74.5 + parent: 2 + - uid: 19470 + components: + - type: Transform + pos: -21.5,74.5 + parent: 2 + - uid: 19862 + components: + - type: Transform + pos: 29.5,-34.5 + parent: 2 + - uid: 19863 + components: + - type: Transform + pos: 30.5,-34.5 + parent: 2 + - uid: 19864 + components: + - type: Transform + pos: 30.5,-33.5 + parent: 2 + - uid: 19865 + components: + - type: Transform + pos: 30.5,-32.5 + parent: 2 + - uid: 19866 + components: + - type: Transform + pos: 30.5,-31.5 + parent: 2 + - uid: 19867 + components: + - type: Transform + pos: 30.5,-30.5 + parent: 2 + - uid: 19868 + components: + - type: Transform + pos: 30.5,-29.5 + parent: 2 + - uid: 19869 + components: + - type: Transform + pos: 30.5,-28.5 + parent: 2 + - uid: 19870 + components: + - type: Transform + pos: 30.5,-27.5 + parent: 2 + - uid: 19871 + components: + - type: Transform + pos: 30.5,-35.5 + parent: 2 + - uid: 19872 + components: + - type: Transform + pos: 30.5,-36.5 + parent: 2 + - uid: 19873 + components: + - type: Transform + pos: 30.5,-37.5 + parent: 2 + - uid: 19874 + components: + - type: Transform + pos: 30.5,-38.5 + parent: 2 + - uid: 19875 + components: + - type: Transform + pos: 29.5,-37.5 + parent: 2 + - uid: 19876 + components: + - type: Transform + pos: 28.5,-37.5 + parent: 2 + - uid: 19877 + components: + - type: Transform + pos: 27.5,-37.5 + parent: 2 + - uid: 19878 + components: + - type: Transform + pos: 26.5,-37.5 + parent: 2 + - uid: 19879 + components: + - type: Transform + pos: 25.5,-37.5 + parent: 2 + - uid: 19880 + components: + - type: Transform + pos: 25.5,-36.5 + parent: 2 + - uid: 19881 + components: + - type: Transform + pos: 25.5,-35.5 + parent: 2 + - uid: 19882 + components: + - type: Transform + pos: 25.5,-38.5 + parent: 2 + - uid: 19883 + components: + - type: Transform + pos: 31.5,-37.5 + parent: 2 + - uid: 19884 + components: + - type: Transform + pos: 32.5,-37.5 + parent: 2 + - uid: 19885 + components: + - type: Transform + pos: 33.5,-37.5 + parent: 2 + - uid: 19886 + components: + - type: Transform + pos: 34.5,-37.5 + parent: 2 + - uid: 19887 + components: + - type: Transform + pos: 35.5,-37.5 + parent: 2 + - uid: 19888 + components: + - type: Transform + pos: 35.5,-38.5 + parent: 2 + - uid: 19889 + components: + - type: Transform + pos: 35.5,-36.5 + parent: 2 + - uid: 19890 + components: + - type: Transform + pos: 35.5,-35.5 + parent: 2 + - uid: 19891 + components: + - type: Transform + pos: 35.5,-34.5 + parent: 2 + - uid: 19892 + components: + - type: Transform + pos: 35.5,-33.5 + parent: 2 + - uid: 19893 + components: + - type: Transform + pos: 35.5,-32.5 + parent: 2 + - uid: 19894 + components: + - type: Transform + pos: 35.5,-31.5 + parent: 2 + - uid: 19895 + components: + - type: Transform + pos: 34.5,-32.5 + parent: 2 + - uid: 19896 + components: + - type: Transform + pos: 33.5,-32.5 + parent: 2 + - uid: 19897 + components: + - type: Transform + pos: 32.5,-32.5 + parent: 2 + - uid: 19898 + components: + - type: Transform + pos: 31.5,-32.5 + parent: 2 + - uid: 19899 + components: + - type: Transform + pos: 29.5,-32.5 + parent: 2 + - uid: 19900 + components: + - type: Transform + pos: 28.5,-32.5 + parent: 2 + - uid: 19901 + components: + - type: Transform + pos: 27.5,-32.5 + parent: 2 + - uid: 19902 + components: + - type: Transform + pos: 26.5,-32.5 + parent: 2 + - uid: 19903 + components: + - type: Transform + pos: 25.5,-32.5 + parent: 2 + - uid: 19904 + components: + - type: Transform + pos: 29.5,-29.5 + parent: 2 + - uid: 19905 + components: + - type: Transform + pos: 28.5,-29.5 + parent: 2 + - uid: 19906 + components: + - type: Transform + pos: 27.5,-29.5 + parent: 2 + - uid: 19907 + components: + - type: Transform + pos: 26.5,-29.5 + parent: 2 + - uid: 19908 + components: + - type: Transform + pos: 25.5,-29.5 + parent: 2 + - uid: 19909 + components: + - type: Transform + pos: 31.5,-29.5 + parent: 2 + - uid: 19910 + components: + - type: Transform + pos: 32.5,-29.5 + parent: 2 + - uid: 19911 + components: + - type: Transform + pos: 33.5,-29.5 + parent: 2 + - uid: 19912 + components: + - type: Transform + pos: 34.5,-29.5 + parent: 2 + - uid: 19913 + components: + - type: Transform + pos: 35.5,-29.5 + parent: 2 + - uid: 19914 + components: + - type: Transform + pos: 36.5,-29.5 + parent: 2 + - uid: 19915 + components: + - type: Transform + pos: 37.5,-29.5 + parent: 2 + - uid: 19916 + components: + - type: Transform + pos: 38.5,-29.5 + parent: 2 + - uid: 19917 + components: + - type: Transform + pos: 38.5,-30.5 + parent: 2 + - uid: 19918 + components: + - type: Transform + pos: 38.5,-31.5 + parent: 2 + - uid: 19919 + components: + - type: Transform + pos: 38.5,-32.5 + parent: 2 + - uid: 19920 + components: + - type: Transform + pos: 38.5,-33.5 + parent: 2 + - uid: 19921 + components: + - type: Transform + pos: 38.5,-34.5 + parent: 2 + - uid: 19922 + components: + - type: Transform + pos: 38.5,-35.5 + parent: 2 + - uid: 19923 + components: + - type: Transform + pos: 38.5,-36.5 + parent: 2 + - uid: 19924 + components: + - type: Transform + pos: 38.5,-37.5 + parent: 2 + - uid: 19925 + components: + - type: Transform + pos: 38.5,-38.5 + parent: 2 + - uid: 19926 + components: + - type: Transform + pos: 37.5,-38.5 + parent: 2 + - uid: 19927 + components: + - type: Transform + pos: 37.5,-39.5 + parent: 2 + - uid: 19928 + components: + - type: Transform + pos: 37.5,-40.5 + parent: 2 + - uid: 19929 + components: + - type: Transform + pos: 37.5,-41.5 + parent: 2 + - uid: 19930 + components: + - type: Transform + pos: 37.5,-42.5 + parent: 2 + - uid: 19931 + components: + - type: Transform + pos: 37.5,-43.5 + parent: 2 + - uid: 19932 + components: + - type: Transform + pos: 37.5,-44.5 + parent: 2 + - uid: 19933 + components: + - type: Transform + pos: 37.5,-45.5 + parent: 2 + - uid: 19934 + components: + - type: Transform + pos: 37.5,-46.5 + parent: 2 + - uid: 19935 + components: + - type: Transform + pos: 37.5,-47.5 + parent: 2 + - uid: 19936 + components: + - type: Transform + pos: 37.5,-48.5 + parent: 2 + - uid: 19937 + components: + - type: Transform + pos: 37.5,-49.5 + parent: 2 + - uid: 19938 + components: + - type: Transform + pos: 37.5,-50.5 + parent: 2 + - uid: 19939 + components: + - type: Transform + pos: 37.5,-51.5 + parent: 2 + - uid: 19940 + components: + - type: Transform + pos: 36.5,-51.5 + parent: 2 + - uid: 19941 + components: + - type: Transform + pos: 36.5,-52.5 + parent: 2 + - uid: 19942 + components: + - type: Transform + pos: 35.5,-52.5 + parent: 2 + - uid: 19943 + components: + - type: Transform + pos: 34.5,-52.5 + parent: 2 + - uid: 19944 + components: + - type: Transform + pos: 33.5,-52.5 + parent: 2 + - uid: 19945 + components: + - type: Transform + pos: 32.5,-52.5 + parent: 2 + - uid: 19946 + components: + - type: Transform + pos: 31.5,-52.5 + parent: 2 + - uid: 19947 + components: + - type: Transform + pos: 30.5,-52.5 + parent: 2 + - uid: 19948 + components: + - type: Transform + pos: 29.5,-52.5 + parent: 2 + - uid: 19949 + components: + - type: Transform + pos: 28.5,-52.5 + parent: 2 + - uid: 19950 + components: + - type: Transform + pos: 27.5,-52.5 + parent: 2 + - uid: 19951 + components: + - type: Transform + pos: 26.5,-52.5 + parent: 2 + - uid: 19952 + components: + - type: Transform + pos: 25.5,-52.5 + parent: 2 + - uid: 19953 + components: + - type: Transform + pos: 24.5,-52.5 + parent: 2 + - uid: 19954 + components: + - type: Transform + pos: 24.5,-51.5 + parent: 2 + - uid: 19955 + components: + - type: Transform + pos: 23.5,-51.5 + parent: 2 + - uid: 19956 + components: + - type: Transform + pos: 23.5,-50.5 + parent: 2 + - uid: 19957 + components: + - type: Transform + pos: 23.5,-49.5 + parent: 2 + - uid: 19958 + components: + - type: Transform + pos: 23.5,-48.5 + parent: 2 + - uid: 19959 + components: + - type: Transform + pos: 23.5,-47.5 + parent: 2 + - uid: 19960 + components: + - type: Transform + pos: 23.5,-46.5 + parent: 2 + - uid: 19961 + components: + - type: Transform + pos: 23.5,-45.5 + parent: 2 + - uid: 19962 + components: + - type: Transform + pos: 23.5,-44.5 + parent: 2 + - uid: 19963 + components: + - type: Transform + pos: 23.5,-43.5 + parent: 2 + - uid: 19964 + components: + - type: Transform + pos: 23.5,-42.5 + parent: 2 + - uid: 19965 + components: + - type: Transform + pos: 23.5,-41.5 + parent: 2 + - uid: 19966 + components: + - type: Transform + pos: 23.5,-40.5 + parent: 2 + - uid: 19967 + components: + - type: Transform + pos: 23.5,-39.5 + parent: 2 + - uid: 19968 + components: + - type: Transform + pos: 23.5,-38.5 + parent: 2 + - uid: 19969 + components: + - type: Transform + pos: 22.5,-38.5 + parent: 2 + - uid: 19970 + components: + - type: Transform + pos: 22.5,-37.5 + parent: 2 + - uid: 19971 + components: + - type: Transform + pos: 22.5,-36.5 + parent: 2 + - uid: 19972 + components: + - type: Transform + pos: 22.5,-35.5 + parent: 2 + - uid: 19973 + components: + - type: Transform + pos: 22.5,-34.5 + parent: 2 + - uid: 19974 + components: + - type: Transform + pos: 22.5,-33.5 + parent: 2 + - uid: 19975 + components: + - type: Transform + pos: 22.5,-32.5 + parent: 2 + - uid: 19976 + components: + - type: Transform + pos: 22.5,-31.5 + parent: 2 + - uid: 19977 + components: + - type: Transform + pos: 22.5,-30.5 + parent: 2 + - uid: 19978 + components: + - type: Transform + pos: 22.5,-29.5 + parent: 2 + - uid: 19979 + components: + - type: Transform + pos: 23.5,-29.5 + parent: 2 + - uid: 19980 + components: + - type: Transform + pos: 24.5,-29.5 + parent: 2 + - uid: 19981 + components: + - type: Transform + pos: 24.5,-28.5 + parent: 2 + - uid: 19982 + components: + - type: Transform + pos: 24.5,-27.5 + parent: 2 + - uid: 19983 + components: + - type: Transform + pos: 24.5,-26.5 + parent: 2 + - uid: 19984 + components: + - type: Transform + pos: 24.5,-25.5 + parent: 2 + - uid: 19985 + components: + - type: Transform + pos: 24.5,-24.5 + parent: 2 + - uid: 19986 + components: + - type: Transform + pos: 24.5,-23.5 + parent: 2 + - uid: 19987 + components: + - type: Transform + pos: 24.5,-22.5 + parent: 2 + - uid: 19988 + components: + - type: Transform + pos: 24.5,-21.5 + parent: 2 + - uid: 19989 + components: + - type: Transform + pos: 25.5,-21.5 + parent: 2 + - uid: 19990 + components: + - type: Transform + pos: 25.5,-20.5 + parent: 2 + - uid: 19991 + components: + - type: Transform + pos: 25.5,-19.5 + parent: 2 + - uid: 19992 + components: + - type: Transform + pos: 25.5,-18.5 + parent: 2 + - uid: 19993 + components: + - type: Transform + pos: 25.5,-17.5 + parent: 2 + - uid: 19994 + components: + - type: Transform + pos: 25.5,-16.5 + parent: 2 + - uid: 19995 + components: + - type: Transform + pos: 25.5,-15.5 + parent: 2 + - uid: 19996 + components: + - type: Transform + pos: 25.5,-14.5 + parent: 2 + - uid: 19997 + components: + - type: Transform + pos: 25.5,-13.5 + parent: 2 + - uid: 19998 + components: + - type: Transform + pos: 26.5,-13.5 + parent: 2 + - uid: 19999 + components: + - type: Transform + pos: 26.5,-12.5 + parent: 2 + - uid: 20000 + components: + - type: Transform + pos: 27.5,-12.5 + parent: 2 + - uid: 20001 + components: + - type: Transform + pos: 28.5,-12.5 + parent: 2 + - uid: 20002 + components: + - type: Transform + pos: 29.5,-12.5 + parent: 2 + - uid: 20003 + components: + - type: Transform + pos: 30.5,-12.5 + parent: 2 + - uid: 20004 + components: + - type: Transform + pos: 31.5,-12.5 + parent: 2 + - uid: 20005 + components: + - type: Transform + pos: 32.5,-12.5 + parent: 2 + - uid: 20006 + components: + - type: Transform + pos: 33.5,-12.5 + parent: 2 + - uid: 20007 + components: + - type: Transform + pos: 34.5,-12.5 + parent: 2 + - uid: 20008 + components: + - type: Transform + pos: 34.5,-13.5 + parent: 2 + - uid: 20009 + components: + - type: Transform + pos: 35.5,-13.5 + parent: 2 + - uid: 20010 + components: + - type: Transform + pos: 35.5,-14.5 + parent: 2 + - uid: 20011 + components: + - type: Transform + pos: 35.5,-15.5 + parent: 2 + - uid: 20012 + components: + - type: Transform + pos: 35.5,-16.5 + parent: 2 + - uid: 20013 + components: + - type: Transform + pos: 35.5,-17.5 + parent: 2 + - uid: 20014 + components: + - type: Transform + pos: 35.5,-19.5 + parent: 2 + - uid: 20015 + components: + - type: Transform + pos: 35.5,-20.5 + parent: 2 + - uid: 20016 + components: + - type: Transform + pos: 35.5,-21.5 + parent: 2 + - uid: 20017 + components: + - type: Transform + pos: 36.5,-21.5 + parent: 2 + - uid: 20018 + components: + - type: Transform + pos: 36.5,-22.5 + parent: 2 + - uid: 20019 + components: + - type: Transform + pos: 36.5,-23.5 + parent: 2 + - uid: 20020 + components: + - type: Transform + pos: 36.5,-24.5 + parent: 2 + - uid: 20021 + components: + - type: Transform + pos: 36.5,-25.5 + parent: 2 + - uid: 20022 + components: + - type: Transform + pos: 36.5,-26.5 + parent: 2 + - uid: 20023 + components: + - type: Transform + pos: 36.5,-27.5 + parent: 2 + - uid: 20024 + components: + - type: Transform + pos: 36.5,-28.5 + parent: 2 + - uid: 20025 + components: + - type: Transform + pos: 36.5,-29.5 + parent: 2 + - uid: 20026 + components: + - type: Transform + pos: 34.5,-26.5 + parent: 2 + - uid: 20027 + components: + - type: Transform + pos: 34.5,-25.5 + parent: 2 + - uid: 20028 + components: + - type: Transform + pos: 34.5,-24.5 + parent: 2 + - uid: 20029 + components: + - type: Transform + pos: 34.5,-23.5 + parent: 2 + - uid: 20030 + components: + - type: Transform + pos: 33.5,-24.5 + parent: 2 + - uid: 20031 + components: + - type: Transform + pos: 32.5,-24.5 + parent: 2 + - uid: 20032 + components: + - type: Transform + pos: 31.5,-24.5 + parent: 2 + - uid: 20033 + components: + - type: Transform + pos: 30.5,-24.5 + parent: 2 + - uid: 20034 + components: + - type: Transform + pos: 29.5,-24.5 + parent: 2 + - uid: 20035 + components: + - type: Transform + pos: 28.5,-24.5 + parent: 2 + - uid: 20036 + components: + - type: Transform + pos: 27.5,-24.5 + parent: 2 + - uid: 20037 + components: + - type: Transform + pos: 26.5,-24.5 + parent: 2 + - uid: 20038 + components: + - type: Transform + pos: 26.5,-25.5 + parent: 2 + - uid: 20039 + components: + - type: Transform + pos: 26.5,-26.5 + parent: 2 + - uid: 20040 + components: + - type: Transform + pos: 34.5,-18.5 + parent: 2 + - uid: 20041 + components: + - type: Transform + pos: 33.5,-18.5 + parent: 2 + - uid: 20042 + components: + - type: Transform + pos: 32.5,-18.5 + parent: 2 + - uid: 20043 + components: + - type: Transform + pos: 31.5,-18.5 + parent: 2 + - uid: 20044 + components: + - type: Transform + pos: 30.5,-18.5 + parent: 2 + - uid: 20045 + components: + - type: Transform + pos: 29.5,-18.5 + parent: 2 + - uid: 20046 + components: + - type: Transform + pos: 28.5,-18.5 + parent: 2 + - uid: 20047 + components: + - type: Transform + pos: 27.5,-18.5 + parent: 2 + - uid: 20048 + components: + - type: Transform + pos: 29.5,-17.5 + parent: 2 + - uid: 20049 + components: + - type: Transform + pos: 29.5,-16.5 + parent: 2 + - uid: 20050 + components: + - type: Transform + pos: 29.5,-15.5 + parent: 2 + - uid: 20051 + components: + - type: Transform + pos: 31.5,-17.5 + parent: 2 + - uid: 20052 + components: + - type: Transform + pos: 31.5,-16.5 + parent: 2 + - uid: 20053 + components: + - type: Transform + pos: 31.5,-15.5 + parent: 2 + - uid: 20054 + components: + - type: Transform + pos: 30.5,-15.5 + parent: 2 + - uid: 20055 + components: + - type: Transform + pos: 30.5,-19.5 + parent: 2 + - uid: 20056 + components: + - type: Transform + pos: 27.5,-20.5 + parent: 2 + - uid: 20057 + components: + - type: Transform + pos: 28.5,-20.5 + parent: 2 + - uid: 20058 + components: + - type: Transform + pos: 29.5,-20.5 + parent: 2 + - uid: 20059 + components: + - type: Transform + pos: 30.5,-20.5 + parent: 2 + - uid: 20060 + components: + - type: Transform + pos: 31.5,-20.5 + parent: 2 + - uid: 20061 + components: + - type: Transform + pos: 32.5,-20.5 + parent: 2 + - uid: 20062 + components: + - type: Transform + pos: 33.5,-20.5 + parent: 2 + - uid: 20063 + components: + - type: Transform + pos: 28.5,-15.5 + parent: 2 + - uid: 20064 + components: + - type: Transform + pos: 27.5,-15.5 + parent: 2 + - uid: 20065 + components: + - type: Transform + pos: 32.5,-15.5 + parent: 2 + - uid: 20066 + components: + - type: Transform + pos: 33.5,-15.5 + parent: 2 + - uid: 20158 + components: + - type: Transform + pos: 27.5,-42.5 + parent: 2 + - uid: 20159 + components: + - type: Transform + pos: 27.5,-43.5 + parent: 2 + - uid: 20160 + components: + - type: Transform + pos: 27.5,-44.5 + parent: 2 + - uid: 20161 + components: + - type: Transform + pos: 27.5,-45.5 + parent: 2 + - uid: 20162 + components: + - type: Transform + pos: 27.5,-46.5 + parent: 2 + - uid: 20163 + components: + - type: Transform + pos: 27.5,-47.5 + parent: 2 + - uid: 20164 + components: + - type: Transform + pos: 28.5,-47.5 + parent: 2 + - uid: 20165 + components: + - type: Transform + pos: 28.5,-48.5 + parent: 2 + - uid: 20166 + components: + - type: Transform + pos: 29.5,-48.5 + parent: 2 + - uid: 20167 + components: + - type: Transform + pos: 30.5,-48.5 + parent: 2 + - uid: 20168 + components: + - type: Transform + pos: 31.5,-48.5 + parent: 2 + - uid: 20169 + components: + - type: Transform + pos: 32.5,-48.5 + parent: 2 + - uid: 20170 + components: + - type: Transform + pos: 32.5,-47.5 + parent: 2 + - uid: 20171 + components: + - type: Transform + pos: 33.5,-47.5 + parent: 2 + - uid: 20172 + components: + - type: Transform + pos: 33.5,-46.5 + parent: 2 + - uid: 20173 + components: + - type: Transform + pos: 33.5,-45.5 + parent: 2 + - uid: 20174 + components: + - type: Transform + pos: 33.5,-44.5 + parent: 2 + - uid: 20175 + components: + - type: Transform + pos: 33.5,-43.5 + parent: 2 + - uid: 20176 + components: + - type: Transform + pos: 32.5,-43.5 + parent: 2 + - uid: 20177 + components: + - type: Transform + pos: 32.5,-42.5 + parent: 2 + - uid: 20178 + components: + - type: Transform + pos: 31.5,-42.5 + parent: 2 + - uid: 20179 + components: + - type: Transform + pos: 30.5,-42.5 + parent: 2 + - uid: 20180 + components: + - type: Transform + pos: 29.5,-42.5 + parent: 2 + - uid: 20181 + components: + - type: Transform + pos: 28.5,-42.5 + parent: 2 + - uid: 20182 + components: + - type: Transform + pos: 30.5,-43.5 + parent: 2 + - uid: 20183 + components: + - type: Transform + pos: 30.5,-44.5 + parent: 2 + - uid: 20184 + components: + - type: Transform + pos: 30.5,-45.5 + parent: 2 + - uid: 20185 + components: + - type: Transform + pos: 30.5,-46.5 + parent: 2 + - uid: 20186 + components: + - type: Transform + pos: 30.5,-47.5 + parent: 2 + - uid: 20187 + components: + - type: Transform + pos: 31.5,-45.5 + parent: 2 + - uid: 20188 + components: + - type: Transform + pos: 32.5,-45.5 + parent: 2 + - uid: 20189 + components: + - type: Transform + pos: 29.5,-45.5 + parent: 2 + - uid: 20190 + components: + - type: Transform + pos: 28.5,-45.5 + parent: 2 + - uid: 20191 + components: + - type: Transform + pos: 30.5,-41.5 + parent: 2 + - uid: 20192 + components: + - type: Transform + pos: 30.5,-40.5 + parent: 2 + - uid: 20193 + components: + - type: Transform + pos: 29.5,-40.5 + parent: 2 + - uid: 20194 + components: + - type: Transform + pos: 31.5,-40.5 + parent: 2 +- proto: CableApcStack + entities: + - uid: 3771 + components: + - type: Transform + pos: -7.469557,28.649622 + parent: 2 + - uid: 3772 + components: + - type: Transform + pos: 48.691536,31.712133 + parent: 2 + - uid: 3773 + components: + - type: Transform + pos: 48.601868,31.479158 + parent: 2 + - uid: 3774 + components: + - type: Transform + pos: 60.434174,28.366611 + parent: 2 + - uid: 3775 + components: + - type: Transform + pos: 60.77491,28.599586 + parent: 2 +- proto: CableApcStack1 + entities: + - uid: 3776 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 50.308266,50.298573 + parent: 2 + - uid: 3777 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 50.79256,50.782536 + parent: 2 + - uid: 3778 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 50.2451,53.87569 + parent: 2 +- proto: Cablecuffs + entities: + - uid: 3779 + components: + - type: Transform + pos: -26.328623,55.189487 + parent: 2 + - uid: 3780 + components: + - type: Transform + pos: -26.515789,55.32977 + parent: 2 +- proto: CableHV + entities: + - uid: 3465 + components: + - type: Transform + pos: -15.5,26.5 + parent: 2 + - uid: 3781 + components: + - type: Transform + pos: -3.5,17.5 + parent: 2 + - uid: 3782 + components: + - type: Transform + pos: -22.5,33.5 + parent: 2 + - uid: 3783 + components: + - type: Transform + pos: -25.5,26.5 + parent: 2 + - uid: 3784 + components: + - type: Transform + pos: -21.5,36.5 + parent: 2 + - uid: 3785 + components: + - type: Transform + pos: -17.5,36.5 + parent: 2 + - uid: 3786 + components: + - type: Transform + pos: -19.5,36.5 + parent: 2 + - uid: 3787 + components: + - type: Transform + pos: -20.5,31.5 + parent: 2 + - uid: 3788 + components: + - type: Transform + pos: -20.5,32.5 + parent: 2 + - uid: 3789 + components: + - type: Transform + pos: -24.5,24.5 + parent: 2 + - uid: 3790 + components: + - type: Transform + pos: -25.5,24.5 + parent: 2 + - uid: 3791 + components: + - type: Transform + pos: -25.5,24.5 + parent: 2 + - uid: 3792 + components: + - type: Transform + pos: -25.5,25.5 + parent: 2 + - uid: 3793 + components: + - type: Transform + pos: -26.5,26.5 + parent: 2 + - uid: 3794 + components: + - type: Transform + pos: -27.5,26.5 + parent: 2 + - uid: 3795 + components: + - type: Transform + pos: -22.5,-0.5 + parent: 2 + - uid: 3796 + components: + - type: Transform + pos: -22.5,1.5 + parent: 2 + - uid: 3797 + components: + - type: Transform + pos: -22.5,0.5 + parent: 2 + - uid: 3798 + components: + - type: Transform + pos: -24.5,-3.5 + parent: 2 + - uid: 3799 + components: + - type: Transform + pos: -25.5,-11.5 + parent: 2 + - uid: 3800 + components: + - type: Transform + pos: -24.5,-11.5 + parent: 2 + - uid: 3801 + components: + - type: Transform + pos: -28.5,26.5 + parent: 2 + - uid: 3802 + components: + - type: Transform + pos: -29.5,26.5 + parent: 2 + - uid: 3804 + components: + - type: Transform + pos: 45.5,-20.5 + parent: 2 + - uid: 3805 + components: + - type: Transform + pos: 46.5,-20.5 + parent: 2 + - uid: 3806 + components: + - type: Transform + pos: 47.5,-20.5 + parent: 2 + - uid: 3807 + components: + - type: Transform + pos: 48.5,-20.5 + parent: 2 + - uid: 3808 + components: + - type: Transform + pos: 49.5,-20.5 + parent: 2 + - uid: 3809 + components: + - type: Transform + pos: 45.5,-22.5 + parent: 2 + - uid: 3810 + components: + - type: Transform + pos: 46.5,-22.5 + parent: 2 + - uid: 3811 + components: + - type: Transform + pos: 47.5,-22.5 + parent: 2 + - uid: 3812 + components: + - type: Transform + pos: 48.5,-22.5 + parent: 2 + - uid: 3813 + components: + - type: Transform + pos: 49.5,-22.5 + parent: 2 + - uid: 3814 + components: + - type: Transform + pos: 49.5,-21.5 + parent: 2 + - uid: 3815 + components: + - type: Transform + pos: 45.5,-21.5 + parent: 2 + - uid: 3816 + components: + - type: Transform + pos: 50.5,-21.5 + parent: 2 + - uid: 3817 + components: + - type: Transform + pos: 52.5,-21.5 + parent: 2 + - uid: 3818 + components: + - type: Transform + pos: 53.5,-21.5 + parent: 2 + - uid: 3819 + components: + - type: Transform + pos: 53.5,-20.5 + parent: 2 + - uid: 3820 + components: + - type: Transform + pos: 53.5,-22.5 + parent: 2 + - uid: 3821 + components: + - type: Transform + pos: 54.5,-20.5 + parent: 2 + - uid: 3822 + components: + - type: Transform + pos: 55.5,-20.5 + parent: 2 + - uid: 3823 + components: + - type: Transform + pos: 56.5,-20.5 + parent: 2 + - uid: 3824 + components: + - type: Transform + pos: 57.5,-20.5 + parent: 2 + - uid: 3825 + components: + - type: Transform + pos: 57.5,-22.5 + parent: 2 + - uid: 3826 + components: + - type: Transform + pos: 56.5,-22.5 + parent: 2 + - uid: 3827 + components: + - type: Transform + pos: 55.5,-22.5 + parent: 2 + - uid: 3828 + components: + - type: Transform + pos: 54.5,-22.5 + parent: 2 + - uid: 3829 + components: + - type: Transform + pos: 57.5,-21.5 + parent: 2 + - uid: 3830 + components: + - type: Transform + pos: 51.5,-24.5 + parent: 2 + - uid: 3831 + components: + - type: Transform + pos: 51.5,-23.5 + parent: 2 + - uid: 3832 + components: + - type: Transform + pos: 49.5,-18.5 + parent: 2 + - uid: 3833 + components: + - type: Transform + pos: 49.5,-17.5 + parent: 2 + - uid: 3834 + components: + - type: Transform + pos: 49.5,-16.5 + parent: 2 + - uid: 3835 + components: + - type: Transform + pos: 48.5,-16.5 + parent: 2 + - uid: 3836 + components: + - type: Transform + pos: 47.5,-16.5 + parent: 2 + - uid: 3837 + components: + - type: Transform + pos: 46.5,-16.5 + parent: 2 + - uid: 3838 + components: + - type: Transform + pos: 45.5,-16.5 + parent: 2 + - uid: 3839 + components: + - type: Transform + pos: 45.5,-17.5 + parent: 2 + - uid: 3840 + components: + - type: Transform + pos: 45.5,-18.5 + parent: 2 + - uid: 3841 + components: + - type: Transform + pos: 46.5,-18.5 + parent: 2 + - uid: 3842 + components: + - type: Transform + pos: 47.5,-18.5 + parent: 2 + - uid: 3843 + components: + - type: Transform + pos: 48.5,-18.5 + parent: 2 + - uid: 3844 + components: + - type: Transform + pos: 53.5,-18.5 + parent: 2 + - uid: 3845 + components: + - type: Transform + pos: 54.5,-18.5 + parent: 2 + - uid: 3846 + components: + - type: Transform + pos: 55.5,-18.5 + parent: 2 + - uid: 3847 + components: + - type: Transform + pos: 56.5,-18.5 + parent: 2 + - uid: 3848 + components: + - type: Transform + pos: 57.5,-18.5 + parent: 2 + - uid: 3849 + components: + - type: Transform + pos: 57.5,-17.5 + parent: 2 + - uid: 3850 + components: + - type: Transform + pos: 57.5,-16.5 + parent: 2 + - uid: 3851 + components: + - type: Transform + pos: 56.5,-16.5 + parent: 2 + - uid: 3852 + components: + - type: Transform + pos: 55.5,-16.5 + parent: 2 + - uid: 3853 + components: + - type: Transform + pos: 54.5,-16.5 + parent: 2 + - uid: 3854 + components: + - type: Transform + pos: 53.5,-16.5 + parent: 2 + - uid: 3855 + components: + - type: Transform + pos: 53.5,-17.5 + parent: 2 + - uid: 3856 + components: + - type: Transform + pos: 52.5,-17.5 + parent: 2 + - uid: 3857 + components: + - type: Transform + pos: 50.5,-17.5 + parent: 2 + - uid: 3858 + components: + - type: Transform + pos: 50.5,-13.5 + parent: 2 + - uid: 3859 + components: + - type: Transform + pos: 49.5,-13.5 + parent: 2 + - uid: 3860 + components: + - type: Transform + pos: 49.5,-12.5 + parent: 2 + - uid: 3861 + components: + - type: Transform + pos: 48.5,-12.5 + parent: 2 + - uid: 3862 + components: + - type: Transform + pos: 47.5,-12.5 + parent: 2 + - uid: 3863 + components: + - type: Transform + pos: 46.5,-12.5 + parent: 2 + - uid: 3864 + components: + - type: Transform + pos: 45.5,-12.5 + parent: 2 + - uid: 3865 + components: + - type: Transform + pos: 45.5,-13.5 + parent: 2 + - uid: 3866 + components: + - type: Transform + pos: 45.5,-14.5 + parent: 2 + - uid: 3867 + components: + - type: Transform + pos: 46.5,-14.5 + parent: 2 + - uid: 3868 + components: + - type: Transform + pos: 47.5,-14.5 + parent: 2 + - uid: 3869 + components: + - type: Transform + pos: 48.5,-14.5 + parent: 2 + - uid: 3870 + components: + - type: Transform + pos: 49.5,-14.5 + parent: 2 + - uid: 3871 + components: + - type: Transform + pos: 52.5,-13.5 + parent: 2 + - uid: 3872 + components: + - type: Transform + pos: 53.5,-13.5 + parent: 2 + - uid: 3873 + components: + - type: Transform + pos: 53.5,-12.5 + parent: 2 + - uid: 3874 + components: + - type: Transform + pos: 54.5,-12.5 + parent: 2 + - uid: 3875 + components: + - type: Transform + pos: 55.5,-12.5 + parent: 2 + - uid: 3876 + components: + - type: Transform + pos: 56.5,-12.5 + parent: 2 + - uid: 3877 + components: + - type: Transform + pos: 57.5,-12.5 + parent: 2 + - uid: 3878 + components: + - type: Transform + pos: 57.5,-13.5 + parent: 2 + - uid: 3879 + components: + - type: Transform + pos: 57.5,-14.5 + parent: 2 + - uid: 3880 + components: + - type: Transform + pos: 56.5,-14.5 + parent: 2 + - uid: 3881 + components: + - type: Transform + pos: 55.5,-14.5 + parent: 2 + - uid: 3882 + components: + - type: Transform + pos: 54.5,-14.5 + parent: 2 + - uid: 3883 + components: + - type: Transform + pos: 53.5,-14.5 + parent: 2 + - uid: 3884 + components: + - type: Transform + pos: -26.5,-16.5 + parent: 2 + - uid: 3885 + components: + - type: Transform + pos: -27.5,-16.5 + parent: 2 + - uid: 3886 + components: + - type: Transform + pos: -28.5,-16.5 + parent: 2 + - uid: 3887 + components: + - type: Transform + pos: -29.5,-16.5 + parent: 2 + - uid: 3888 + components: + - type: Transform + pos: -30.5,-16.5 + parent: 2 + - uid: 3889 + components: + - type: Transform + pos: -30.5,-15.5 + parent: 2 + - uid: 3890 + components: + - type: Transform + pos: -26.5,-15.5 + parent: 2 + - uid: 3891 + components: + - type: Transform + pos: -30.5,-14.5 + parent: 2 + - uid: 3892 + components: + - type: Transform + pos: -29.5,-14.5 + parent: 2 + - uid: 3893 + components: + - type: Transform + pos: -28.5,-14.5 + parent: 2 + - uid: 3894 + components: + - type: Transform + pos: -27.5,-14.5 + parent: 2 + - uid: 3895 + components: + - type: Transform + pos: -26.5,-14.5 + parent: 2 + - uid: 3896 + components: + - type: Transform + pos: -25.5,-15.5 + parent: 2 + - uid: 3897 + components: + - type: Transform + pos: -23.5,-18.5 + parent: 2 + - uid: 3898 + components: + - type: Transform + pos: -25.5,-12.5 + parent: 2 + - uid: 3899 + components: + - type: Transform + pos: -29.5,-12.5 + parent: 2 + - uid: 3900 + components: + - type: Transform + pos: -28.5,-12.5 + parent: 2 + - uid: 3901 + components: + - type: Transform + pos: -27.5,-12.5 + parent: 2 + - uid: 3902 + components: + - type: Transform + pos: -26.5,-12.5 + parent: 2 + - uid: 3903 + components: + - type: Transform + pos: -23.5,-17.5 + parent: 2 + - uid: 3904 + components: + - type: Transform + pos: -23.5,-7.5 + parent: 2 + - uid: 3905 + components: + - type: Transform + pos: -24.5,-7.5 + parent: 2 + - uid: 3906 + components: + - type: Transform + pos: -24.5,-6.5 + parent: 2 + - uid: 3907 + components: + - type: Transform + pos: -25.5,-6.5 + parent: 2 + - uid: 3908 + components: + - type: Transform + pos: -26.5,-6.5 + parent: 2 + - uid: 3909 + components: + - type: Transform + pos: -27.5,-6.5 + parent: 2 + - uid: 3910 + components: + - type: Transform + pos: -28.5,-6.5 + parent: 2 + - uid: 3911 + components: + - type: Transform + pos: -28.5,-7.5 + parent: 2 + - uid: 3912 + components: + - type: Transform + pos: -28.5,-8.5 + parent: 2 + - uid: 3913 + components: + - type: Transform + pos: -27.5,-8.5 + parent: 2 + - uid: 3914 + components: + - type: Transform + pos: -26.5,-8.5 + parent: 2 + - uid: 3915 + components: + - type: Transform + pos: -25.5,-8.5 + parent: 2 + - uid: 3916 + components: + - type: Transform + pos: -24.5,-8.5 + parent: 2 + - uid: 3917 + components: + - type: Transform + pos: -24.5,-2.5 + parent: 2 + - uid: 3918 + components: + - type: Transform + pos: -25.5,-2.5 + parent: 2 + - uid: 3919 + components: + - type: Transform + pos: -26.5,-2.5 + parent: 2 + - uid: 3920 + components: + - type: Transform + pos: -27.5,-2.5 + parent: 2 + - uid: 3921 + components: + - type: Transform + pos: -28.5,-2.5 + parent: 2 + - uid: 3922 + components: + - type: Transform + pos: -28.5,-4.5 + parent: 2 + - uid: 3923 + components: + - type: Transform + pos: -27.5,-4.5 + parent: 2 + - uid: 3924 + components: + - type: Transform + pos: -26.5,-4.5 + parent: 2 + - uid: 3925 + components: + - type: Transform + pos: -25.5,-4.5 + parent: 2 + - uid: 3926 + components: + - type: Transform + pos: -24.5,-4.5 + parent: 2 + - uid: 3927 + components: + - type: Transform + pos: 27.5,79.5 + parent: 2 + - uid: 3928 + components: + - type: Transform + pos: 28.5,79.5 + parent: 2 + - uid: 3929 + components: + - type: Transform + pos: 29.5,79.5 + parent: 2 + - uid: 3930 + components: + - type: Transform + pos: 30.5,79.5 + parent: 2 + - uid: 3931 + components: + - type: Transform + pos: 31.5,79.5 + parent: 2 + - uid: 3932 + components: + - type: Transform + pos: 31.5,78.5 + parent: 2 + - uid: 3933 + components: + - type: Transform + pos: 31.5,77.5 + parent: 2 + - uid: 3934 + components: + - type: Transform + pos: 30.5,77.5 + parent: 2 + - uid: 3935 + components: + - type: Transform + pos: 29.5,77.5 + parent: 2 + - uid: 3936 + components: + - type: Transform + pos: 28.5,77.5 + parent: 2 + - uid: 3937 + components: + - type: Transform + pos: 27.5,77.5 + parent: 2 + - uid: 3938 + components: + - type: Transform + pos: 27.5,78.5 + parent: 2 + - uid: 3939 + components: + - type: Transform + pos: 32.5,78.5 + parent: 2 + - uid: 3940 + components: + - type: Transform + pos: 33.5,81.5 + parent: 2 + - uid: 3941 + components: + - type: Transform + pos: 34.5,74.5 + parent: 2 + - uid: 3942 + components: + - type: Transform + pos: 35.5,79.5 + parent: 2 + - uid: 3943 + components: + - type: Transform + pos: 36.5,79.5 + parent: 2 + - uid: 3944 + components: + - type: Transform + pos: 37.5,79.5 + parent: 2 + - uid: 3945 + components: + - type: Transform + pos: 38.5,79.5 + parent: 2 + - uid: 3946 + components: + - type: Transform + pos: 39.5,79.5 + parent: 2 + - uid: 3947 + components: + - type: Transform + pos: 39.5,77.5 + parent: 2 + - uid: 3948 + components: + - type: Transform + pos: 38.5,77.5 + parent: 2 + - uid: 3949 + components: + - type: Transform + pos: 37.5,77.5 + parent: 2 + - uid: 3950 + components: + - type: Transform + pos: 36.5,77.5 + parent: 2 + - uid: 3951 + components: + - type: Transform + pos: 35.5,77.5 + parent: 2 + - uid: 3952 + components: + - type: Transform + pos: 35.5,78.5 + parent: 2 + - uid: 3953 + components: + - type: Transform + pos: 39.5,78.5 + parent: 2 + - uid: 3954 + components: + - type: Transform + pos: 34.5,78.5 + parent: 2 + - uid: 3955 + components: + - type: Transform + pos: 35.5,74.5 + parent: 2 + - uid: 3956 + components: + - type: Transform + pos: 35.5,75.5 + parent: 2 + - uid: 3957 + components: + - type: Transform + pos: 36.5,75.5 + parent: 2 + - uid: 3958 + components: + - type: Transform + pos: 37.5,75.5 + parent: 2 + - uid: 3959 + components: + - type: Transform + pos: 38.5,75.5 + parent: 2 + - uid: 3960 + components: + - type: Transform + pos: 39.5,75.5 + parent: 2 + - uid: 3961 + components: + - type: Transform + pos: 39.5,74.5 + parent: 2 + - uid: 3962 + components: + - type: Transform + pos: 39.5,73.5 + parent: 2 + - uid: 3963 + components: + - type: Transform + pos: 38.5,73.5 + parent: 2 + - uid: 3964 + components: + - type: Transform + pos: 37.5,73.5 + parent: 2 + - uid: 3965 + components: + - type: Transform + pos: 36.5,73.5 + parent: 2 + - uid: 3966 + components: + - type: Transform + pos: 35.5,73.5 + parent: 2 + - uid: 3967 + components: + - type: Transform + pos: 34.5,70.5 + parent: 2 + - uid: 3968 + components: + - type: Transform + pos: 35.5,70.5 + parent: 2 + - uid: 3969 + components: + - type: Transform + pos: 35.5,71.5 + parent: 2 + - uid: 3970 + components: + - type: Transform + pos: 36.5,71.5 + parent: 2 + - uid: 3971 + components: + - type: Transform + pos: 37.5,71.5 + parent: 2 + - uid: 3972 + components: + - type: Transform + pos: 38.5,71.5 + parent: 2 + - uid: 3973 + components: + - type: Transform + pos: 39.5,71.5 + parent: 2 + - uid: 3974 + components: + - type: Transform + pos: 39.5,70.5 + parent: 2 + - uid: 3975 + components: + - type: Transform + pos: 39.5,69.5 + parent: 2 + - uid: 3976 + components: + - type: Transform + pos: 38.5,69.5 + parent: 2 + - uid: 3977 + components: + - type: Transform + pos: 37.5,69.5 + parent: 2 + - uid: 3978 + components: + - type: Transform + pos: 36.5,69.5 + parent: 2 + - uid: 3979 + components: + - type: Transform + pos: 35.5,69.5 + parent: 2 + - uid: 3980 + components: + - type: Transform + pos: 32.5,70.5 + parent: 2 + - uid: 3981 + components: + - type: Transform + pos: 31.5,70.5 + parent: 2 + - uid: 3982 + components: + - type: Transform + pos: 31.5,69.5 + parent: 2 + - uid: 3983 + components: + - type: Transform + pos: 30.5,69.5 + parent: 2 + - uid: 3984 + components: + - type: Transform + pos: 29.5,69.5 + parent: 2 + - uid: 3985 + components: + - type: Transform + pos: 28.5,69.5 + parent: 2 + - uid: 3986 + components: + - type: Transform + pos: 27.5,69.5 + parent: 2 + - uid: 3987 + components: + - type: Transform + pos: 27.5,70.5 + parent: 2 + - uid: 3988 + components: + - type: Transform + pos: 27.5,71.5 + parent: 2 + - uid: 3989 + components: + - type: Transform + pos: 28.5,71.5 + parent: 2 + - uid: 3990 + components: + - type: Transform + pos: 29.5,71.5 + parent: 2 + - uid: 3991 + components: + - type: Transform + pos: 30.5,71.5 + parent: 2 + - uid: 3992 + components: + - type: Transform + pos: 31.5,71.5 + parent: 2 + - uid: 3993 + components: + - type: Transform + pos: 31.5,73.5 + parent: 2 + - uid: 3994 + components: + - type: Transform + pos: 30.5,73.5 + parent: 2 + - uid: 3995 + components: + - type: Transform + pos: 29.5,73.5 + parent: 2 + - uid: 3996 + components: + - type: Transform + pos: 28.5,73.5 + parent: 2 + - uid: 3997 + components: + - type: Transform + pos: 27.5,73.5 + parent: 2 + - uid: 3998 + components: + - type: Transform + pos: 27.5,74.5 + parent: 2 + - uid: 3999 + components: + - type: Transform + pos: 27.5,75.5 + parent: 2 + - uid: 4000 + components: + - type: Transform + pos: 28.5,75.5 + parent: 2 + - uid: 4001 + components: + - type: Transform + pos: 29.5,75.5 + parent: 2 + - uid: 4002 + components: + - type: Transform + pos: 30.5,75.5 + parent: 2 + - uid: 4003 + components: + - type: Transform + pos: 31.5,75.5 + parent: 2 + - uid: 4004 + components: + - type: Transform + pos: 31.5,74.5 + parent: 2 + - uid: 4005 + components: + - type: Transform + pos: 32.5,74.5 + parent: 2 + - uid: 4006 + components: + - type: Transform + pos: 48.5,-10.5 + parent: 2 + - uid: 4007 + components: + - type: Transform + pos: 14.5,48.5 + parent: 2 + - uid: 4008 + components: + - type: Transform + pos: 16.5,48.5 + parent: 2 + - uid: 4009 + components: + - type: Transform + pos: 15.5,48.5 + parent: 2 + - uid: 4010 + components: + - type: Transform + pos: -11.5,33.5 + parent: 2 + - uid: 4011 + components: + - type: Transform + pos: -11.5,34.5 + parent: 2 + - uid: 4012 + components: + - type: Transform + pos: -11.5,35.5 + parent: 2 + - uid: 4013 + components: + - type: Transform + pos: -11.5,36.5 + parent: 2 + - uid: 4014 + components: + - type: Transform + pos: -12.5,36.5 + parent: 2 + - uid: 4015 + components: + - type: Transform + pos: -13.5,42.5 + parent: 2 + - uid: 4016 + components: + - type: Transform + pos: -13.5,43.5 + parent: 2 + - uid: 4017 + components: + - type: Transform + pos: -13.5,44.5 + parent: 2 + - uid: 4018 + components: + - type: Transform + pos: -14.5,44.5 + parent: 2 + - uid: 4019 + components: + - type: Transform + pos: -12.5,44.5 + parent: 2 + - uid: 4020 + components: + - type: Transform + pos: -12.5,45.5 + parent: 2 + - uid: 4021 + components: + - type: Transform + pos: -13.5,45.5 + parent: 2 + - uid: 4022 + components: + - type: Transform + pos: -14.5,45.5 + parent: 2 + - uid: 4023 + components: + - type: Transform + pos: -15.5,45.5 + parent: 2 + - uid: 4024 + components: + - type: Transform + pos: -16.5,45.5 + parent: 2 + - uid: 4025 + components: + - type: Transform + pos: -16.5,44.5 + parent: 2 + - uid: 4026 + components: + - type: Transform + pos: -16.5,43.5 + parent: 2 + - uid: 4027 + components: + - type: Transform + pos: -13.5,46.5 + parent: 2 + - uid: 4028 + components: + - type: Transform + pos: -13.5,47.5 + parent: 2 + - uid: 4029 + components: + - type: Transform + pos: -13.5,48.5 + parent: 2 + - uid: 4030 + components: + - type: Transform + pos: -12.5,48.5 + parent: 2 + - uid: 4031 + components: + - type: Transform + pos: -11.5,48.5 + parent: 2 + - uid: 4032 + components: + - type: Transform + pos: -10.5,48.5 + parent: 2 + - uid: 4033 + components: + - type: Transform + pos: -9.5,48.5 + parent: 2 + - uid: 4034 + components: + - type: Transform + pos: -8.5,48.5 + parent: 2 + - uid: 4035 + components: + - type: Transform + pos: -7.5,48.5 + parent: 2 + - uid: 4036 + components: + - type: Transform + pos: -6.5,48.5 + parent: 2 + - uid: 4037 + components: + - type: Transform + pos: -5.5,48.5 + parent: 2 + - uid: 4038 + components: + - type: Transform + pos: -4.5,48.5 + parent: 2 + - uid: 4039 + components: + - type: Transform + pos: -3.5,48.5 + parent: 2 + - uid: 4040 + components: + - type: Transform + pos: -2.5,48.5 + parent: 2 + - uid: 4041 + components: + - type: Transform + pos: -1.5,48.5 + parent: 2 + - uid: 4042 + components: + - type: Transform + pos: -0.5,48.5 + parent: 2 + - uid: 4043 + components: + - type: Transform + pos: 0.5,48.5 + parent: 2 + - uid: 4044 + components: + - type: Transform + pos: 1.5,48.5 + parent: 2 + - uid: 4045 + components: + - type: Transform + pos: 2.5,48.5 + parent: 2 + - uid: 4046 + components: + - type: Transform + pos: 3.5,48.5 + parent: 2 + - uid: 4047 + components: + - type: Transform + pos: 4.5,48.5 + parent: 2 + - uid: 4048 + components: + - type: Transform + pos: 5.5,48.5 + parent: 2 + - uid: 4049 + components: + - type: Transform + pos: 5.5,49.5 + parent: 2 + - uid: 4050 + components: + - type: Transform + pos: 5.5,50.5 + parent: 2 + - uid: 4051 + components: + - type: Transform + pos: 5.5,51.5 + parent: 2 + - uid: 4052 + components: + - type: Transform + pos: 5.5,52.5 + parent: 2 + - uid: 4053 + components: + - type: Transform + pos: 5.5,53.5 + parent: 2 + - uid: 4054 + components: + - type: Transform + pos: 5.5,54.5 + parent: 2 + - uid: 4055 + components: + - type: Transform + pos: 5.5,55.5 + parent: 2 + - uid: 4056 + components: + - type: Transform + pos: 5.5,56.5 + parent: 2 + - uid: 4057 + components: + - type: Transform + pos: 5.5,57.5 + parent: 2 + - uid: 4058 + components: + - type: Transform + pos: 5.5,58.5 + parent: 2 + - uid: 4059 + components: + - type: Transform + pos: 5.5,59.5 + parent: 2 + - uid: 4060 + components: + - type: Transform + pos: 5.5,60.5 + parent: 2 + - uid: 4061 + components: + - type: Transform + pos: 5.5,61.5 + parent: 2 + - uid: 4062 + components: + - type: Transform + pos: 5.5,62.5 + parent: 2 + - uid: 4063 + components: + - type: Transform + pos: 5.5,63.5 + parent: 2 + - uid: 4064 + components: + - type: Transform + pos: 4.5,63.5 + parent: 2 + - uid: 4065 + components: + - type: Transform + pos: 3.5,63.5 + parent: 2 + - uid: 4066 + components: + - type: Transform + pos: 2.5,63.5 + parent: 2 + - uid: 4067 + components: + - type: Transform + pos: 1.5,63.5 + parent: 2 + - uid: 4068 + components: + - type: Transform + pos: 0.5,63.5 + parent: 2 + - uid: 4069 + components: + - type: Transform + pos: -0.5,63.5 + parent: 2 + - uid: 4070 + components: + - type: Transform + pos: -1.5,63.5 + parent: 2 + - uid: 4071 + components: + - type: Transform + pos: -2.5,63.5 + parent: 2 + - uid: 4072 + components: + - type: Transform + pos: -3.5,63.5 + parent: 2 + - uid: 4073 + components: + - type: Transform + pos: -3.5,64.5 + parent: 2 + - uid: 4074 + components: + - type: Transform + pos: -3.5,65.5 + parent: 2 + - uid: 4075 + components: + - type: Transform + pos: -3.5,66.5 + parent: 2 + - uid: 4076 + components: + - type: Transform + pos: -3.5,67.5 + parent: 2 + - uid: 4077 + components: + - type: Transform + pos: -3.5,68.5 + parent: 2 + - uid: 4078 + components: + - type: Transform + pos: -2.5,68.5 + parent: 2 + - uid: 4079 + components: + - type: Transform + pos: 5.5,64.5 + parent: 2 + - uid: 4080 + components: + - type: Transform + pos: 6.5,64.5 + parent: 2 + - uid: 4081 + components: + - type: Transform + pos: 7.5,64.5 + parent: 2 + - uid: 4082 + components: + - type: Transform + pos: 8.5,64.5 + parent: 2 + - uid: 4083 + components: + - type: Transform + pos: 9.5,64.5 + parent: 2 + - uid: 4084 + components: + - type: Transform + pos: 10.5,64.5 + parent: 2 + - uid: 4085 + components: + - type: Transform + pos: 11.5,64.5 + parent: 2 + - uid: 4086 + components: + - type: Transform + pos: 12.5,64.5 + parent: 2 + - uid: 4087 + components: + - type: Transform + pos: 13.5,64.5 + parent: 2 + - uid: 4088 + components: + - type: Transform + pos: 13.5,65.5 + parent: 2 + - uid: 4089 + components: + - type: Transform + pos: 14.5,65.5 + parent: 2 + - uid: 4090 + components: + - type: Transform + pos: 15.5,65.5 + parent: 2 + - uid: 4091 + components: + - type: Transform + pos: 16.5,65.5 + parent: 2 + - uid: 4092 + components: + - type: Transform + pos: 17.5,65.5 + parent: 2 + - uid: 4093 + components: + - type: Transform + pos: 18.5,65.5 + parent: 2 + - uid: 4094 + components: + - type: Transform + pos: 19.5,65.5 + parent: 2 + - uid: 4095 + components: + - type: Transform + pos: 20.5,65.5 + parent: 2 + - uid: 4096 + components: + - type: Transform + pos: 21.5,65.5 + parent: 2 + - uid: 4097 + components: + - type: Transform + pos: 22.5,65.5 + parent: 2 + - uid: 4098 + components: + - type: Transform + pos: 23.5,65.5 + parent: 2 + - uid: 4099 + components: + - type: Transform + pos: 24.5,65.5 + parent: 2 + - uid: 4100 + components: + - type: Transform + pos: 24.5,64.5 + parent: 2 + - uid: 4101 + components: + - type: Transform + pos: 24.5,63.5 + parent: 2 + - uid: 4102 + components: + - type: Transform + pos: 24.5,62.5 + parent: 2 + - uid: 4103 + components: + - type: Transform + pos: 24.5,61.5 + parent: 2 + - uid: 4104 + components: + - type: Transform + pos: 24.5,60.5 + parent: 2 + - uid: 4105 + components: + - type: Transform + pos: 25.5,60.5 + parent: 2 + - uid: 4106 + components: + - type: Transform + pos: 26.5,60.5 + parent: 2 + - uid: 4107 + components: + - type: Transform + pos: 27.5,60.5 + parent: 2 + - uid: 4108 + components: + - type: Transform + pos: 28.5,60.5 + parent: 2 + - uid: 4109 + components: + - type: Transform + pos: 29.5,60.5 + parent: 2 + - uid: 4110 + components: + - type: Transform + pos: 30.5,60.5 + parent: 2 + - uid: 4111 + components: + - type: Transform + pos: 31.5,60.5 + parent: 2 + - uid: 4112 + components: + - type: Transform + pos: 31.5,61.5 + parent: 2 + - uid: 4113 + components: + - type: Transform + pos: 32.5,61.5 + parent: 2 + - uid: 4114 + components: + - type: Transform + pos: 33.5,61.5 + parent: 2 + - uid: 4115 + components: + - type: Transform + pos: 35.5,61.5 + parent: 2 + - uid: 4116 + components: + - type: Transform + pos: 31.5,62.5 + parent: 2 + - uid: 4117 + components: + - type: Transform + pos: 35.5,63.5 + parent: 2 + - uid: 4118 + components: + - type: Transform + pos: 34.5,61.5 + parent: 2 + - uid: 4119 + components: + - type: Transform + pos: 33.5,65.5 + parent: 2 + - uid: 4120 + components: + - type: Transform + pos: 31.5,63.5 + parent: 2 + - uid: 4121 + components: + - type: Transform + pos: 31.5,64.5 + parent: 2 + - uid: 4122 + components: + - type: Transform + pos: 32.5,64.5 + parent: 2 + - uid: 4123 + components: + - type: Transform + pos: 33.5,64.5 + parent: 2 + - uid: 4124 + components: + - type: Transform + pos: 35.5,63.5 + parent: 2 + - uid: 4125 + components: + - type: Transform + pos: 33.5,67.5 + parent: 2 + - uid: 4126 + components: + - type: Transform + pos: 33.5,66.5 + parent: 2 + - uid: 4127 + components: + - type: Transform + pos: 33.5,68.5 + parent: 2 + - uid: 4128 + components: + - type: Transform + pos: 0.5,47.5 + parent: 2 + - uid: 4129 + components: + - type: Transform + pos: 0.5,46.5 + parent: 2 + - uid: 4130 + components: + - type: Transform + pos: 0.5,45.5 + parent: 2 + - uid: 4131 + components: + - type: Transform + pos: 0.5,44.5 + parent: 2 + - uid: 4132 + components: + - type: Transform + pos: 0.5,43.5 + parent: 2 + - uid: 4133 + components: + - type: Transform + pos: 0.5,42.5 + parent: 2 + - uid: 4134 + components: + - type: Transform + pos: 0.5,41.5 + parent: 2 + - uid: 4135 + components: + - type: Transform + pos: 0.5,40.5 + parent: 2 + - uid: 4136 + components: + - type: Transform + pos: 0.5,39.5 + parent: 2 + - uid: 4137 + components: + - type: Transform + pos: 0.5,38.5 + parent: 2 + - uid: 4138 + components: + - type: Transform + pos: 0.5,37.5 + parent: 2 + - uid: 4139 + components: + - type: Transform + pos: 0.5,36.5 + parent: 2 + - uid: 4140 + components: + - type: Transform + pos: 0.5,35.5 + parent: 2 + - uid: 4141 + components: + - type: Transform + pos: 0.5,34.5 + parent: 2 + - uid: 4142 + components: + - type: Transform + pos: 0.5,33.5 + parent: 2 + - uid: 4143 + components: + - type: Transform + pos: 0.5,32.5 + parent: 2 + - uid: 4144 + components: + - type: Transform + pos: 6.5,48.5 + parent: 2 + - uid: 4145 + components: + - type: Transform + pos: 7.5,48.5 + parent: 2 + - uid: 4146 + components: + - type: Transform + pos: 8.5,48.5 + parent: 2 + - uid: 4147 + components: + - type: Transform + pos: 9.5,48.5 + parent: 2 + - uid: 4148 + components: + - type: Transform + pos: 10.5,48.5 + parent: 2 + - uid: 4149 + components: + - type: Transform + pos: 11.5,48.5 + parent: 2 + - uid: 4150 + components: + - type: Transform + pos: 12.5,48.5 + parent: 2 + - uid: 4151 + components: + - type: Transform + pos: 13.5,48.5 + parent: 2 + - uid: 4152 + components: + - type: Transform + pos: 0.5,31.5 + parent: 2 + - uid: 4153 + components: + - type: Transform + pos: 0.5,30.5 + parent: 2 + - uid: 4154 + components: + - type: Transform + pos: 0.5,29.5 + parent: 2 + - uid: 4155 + components: + - type: Transform + pos: 0.5,28.5 + parent: 2 + - uid: 4156 + components: + - type: Transform + pos: 0.5,27.5 + parent: 2 + - uid: 4157 + components: + - type: Transform + pos: 0.5,26.5 + parent: 2 + - uid: 4158 + components: + - type: Transform + pos: 0.5,25.5 + parent: 2 + - uid: 4159 + components: + - type: Transform + pos: 0.5,24.5 + parent: 2 + - uid: 4160 + components: + - type: Transform + pos: 0.5,23.5 + parent: 2 + - uid: 4161 + components: + - type: Transform + pos: 0.5,22.5 + parent: 2 + - uid: 4162 + components: + - type: Transform + pos: 0.5,21.5 + parent: 2 + - uid: 4163 + components: + - type: Transform + pos: 0.5,20.5 + parent: 2 + - uid: 4164 + components: + - type: Transform + pos: -22.5,4.5 + parent: 2 + - uid: 4165 + components: + - type: Transform + pos: -22.5,5.5 + parent: 2 + - uid: 4166 + components: + - type: Transform + pos: -22.5,6.5 + parent: 2 + - uid: 4167 + components: + - type: Transform + pos: -22.5,7.5 + parent: 2 + - uid: 4168 + components: + - type: Transform + pos: -21.5,7.5 + parent: 2 + - uid: 4169 + components: + - type: Transform + pos: -20.5,7.5 + parent: 2 + - uid: 4170 + components: + - type: Transform + pos: -20.5,8.5 + parent: 2 + - uid: 4171 + components: + - type: Transform + pos: -20.5,9.5 + parent: 2 + - uid: 4172 + components: + - type: Transform + pos: -21.5,9.5 + parent: 2 + - uid: 4173 + components: + - type: Transform + pos: -22.5,9.5 + parent: 2 + - uid: 4174 + components: + - type: Transform + pos: -22.5,10.5 + parent: 2 + - uid: 4175 + components: + - type: Transform + pos: -22.5,11.5 + parent: 2 + - uid: 4176 + components: + - type: Transform + pos: -22.5,12.5 + parent: 2 + - uid: 4177 + components: + - type: Transform + pos: -22.5,13.5 + parent: 2 + - uid: 4178 + components: + - type: Transform + pos: -22.5,14.5 + parent: 2 + - uid: 4179 + components: + - type: Transform + pos: -21.5,14.5 + parent: 2 + - uid: 4180 + components: + - type: Transform + pos: -20.5,14.5 + parent: 2 + - uid: 4181 + components: + - type: Transform + pos: -20.5,13.5 + parent: 2 + - uid: 4182 + components: + - type: Transform + pos: -20.5,12.5 + parent: 2 + - uid: 4183 + components: + - type: Transform + pos: -20.5,11.5 + parent: 2 + - uid: 4184 + components: + - type: Transform + pos: -19.5,11.5 + parent: 2 + - uid: 4185 + components: + - type: Transform + pos: -18.5,11.5 + parent: 2 + - uid: 4186 + components: + - type: Transform + pos: -18.5,10.5 + parent: 2 + - uid: 4187 + components: + - type: Transform + pos: -18.5,9.5 + parent: 2 + - uid: 4188 + components: + - type: Transform + pos: -18.5,8.5 + parent: 2 + - uid: 4189 + components: + - type: Transform + pos: -18.5,7.5 + parent: 2 + - uid: 4190 + components: + - type: Transform + pos: -18.5,6.5 + parent: 2 + - uid: 4191 + components: + - type: Transform + pos: -17.5,6.5 + parent: 2 + - uid: 4192 + components: + - type: Transform + pos: -17.5,5.5 + parent: 2 + - uid: 4193 + components: + - type: Transform + pos: -17.5,4.5 + parent: 2 + - uid: 4194 + components: + - type: Transform + pos: -18.5,4.5 + parent: 2 + - uid: 4195 + components: + - type: Transform + pos: -17.5,11.5 + parent: 2 + - uid: 4196 + components: + - type: Transform + pos: -16.5,11.5 + parent: 2 + - uid: 4197 + components: + - type: Transform + pos: -15.5,11.5 + parent: 2 + - uid: 4198 + components: + - type: Transform + pos: -15.5,12.5 + parent: 2 + - uid: 4199 + components: + - type: Transform + pos: -15.5,13.5 + parent: 2 + - uid: 4200 + components: + - type: Transform + pos: -15.5,14.5 + parent: 2 + - uid: 4201 + components: + - type: Transform + pos: -15.5,15.5 + parent: 2 + - uid: 4202 + components: + - type: Transform + pos: -15.5,16.5 + parent: 2 + - uid: 4203 + components: + - type: Transform + pos: -14.5,16.5 + parent: 2 + - uid: 4204 + components: + - type: Transform + pos: -13.5,16.5 + parent: 2 + - uid: 4205 + components: + - type: Transform + pos: -12.5,16.5 + parent: 2 + - uid: 4206 + components: + - type: Transform + pos: -11.5,16.5 + parent: 2 + - uid: 4207 + components: + - type: Transform + pos: -10.5,16.5 + parent: 2 + - uid: 4208 + components: + - type: Transform + pos: -9.5,16.5 + parent: 2 + - uid: 4209 + components: + - type: Transform + pos: -8.5,16.5 + parent: 2 + - uid: 4210 + components: + - type: Transform + pos: -8.5,17.5 + parent: 2 + - uid: 4211 + components: + - type: Transform + pos: -7.5,17.5 + parent: 2 + - uid: 4212 + components: + - type: Transform + pos: -6.5,17.5 + parent: 2 + - uid: 4213 + components: + - type: Transform + pos: -5.5,17.5 + parent: 2 + - uid: 4214 + components: + - type: Transform + pos: -4.5,17.5 + parent: 2 + - uid: 4215 + components: + - type: Transform + pos: -4.5,20.5 + parent: 2 + - uid: 4216 + components: + - type: Transform + pos: -3.5,20.5 + parent: 2 + - uid: 4217 + components: + - type: Transform + pos: -2.5,20.5 + parent: 2 + - uid: 4218 + components: + - type: Transform + pos: -1.5,20.5 + parent: 2 + - uid: 4219 + components: + - type: Transform + pos: -0.5,20.5 + parent: 2 + - uid: 4220 + components: + - type: Transform + pos: 1.5,20.5 + parent: 2 + - uid: 4221 + components: + - type: Transform + pos: 2.5,20.5 + parent: 2 + - uid: 4222 + components: + - type: Transform + pos: 3.5,20.5 + parent: 2 + - uid: 4223 + components: + - type: Transform + pos: 4.5,20.5 + parent: 2 + - uid: 4224 + components: + - type: Transform + pos: 5.5,20.5 + parent: 2 + - uid: 4225 + components: + - type: Transform + pos: 6.5,20.5 + parent: 2 + - uid: 4226 + components: + - type: Transform + pos: 7.5,20.5 + parent: 2 + - uid: 4227 + components: + - type: Transform + pos: 8.5,20.5 + parent: 2 + - uid: 4228 + components: + - type: Transform + pos: 9.5,20.5 + parent: 2 + - uid: 4229 + components: + - type: Transform + pos: 10.5,20.5 + parent: 2 + - uid: 4230 + components: + - type: Transform + pos: 11.5,20.5 + parent: 2 + - uid: 4231 + components: + - type: Transform + pos: 12.5,20.5 + parent: 2 + - uid: 4232 + components: + - type: Transform + pos: 13.5,20.5 + parent: 2 + - uid: 4233 + components: + - type: Transform + pos: 14.5,20.5 + parent: 2 + - uid: 4234 + components: + - type: Transform + pos: 15.5,20.5 + parent: 2 + - uid: 4235 + components: + - type: Transform + pos: 15.5,19.5 + parent: 2 + - uid: 4236 + components: + - type: Transform + pos: 15.5,18.5 + parent: 2 + - uid: 4237 + components: + - type: Transform + pos: 15.5,17.5 + parent: 2 + - uid: 4238 + components: + - type: Transform + pos: 15.5,16.5 + parent: 2 + - uid: 4239 + components: + - type: Transform + pos: 15.5,15.5 + parent: 2 + - uid: 4240 + components: + - type: Transform + pos: 15.5,14.5 + parent: 2 + - uid: 4241 + components: + - type: Transform + pos: 15.5,13.5 + parent: 2 + - uid: 4242 + components: + - type: Transform + pos: 15.5,12.5 + parent: 2 + - uid: 4243 + components: + - type: Transform + pos: 16.5,12.5 + parent: 2 + - uid: 4244 + components: + - type: Transform + pos: 16.5,11.5 + parent: 2 + - uid: 4245 + components: + - type: Transform + pos: 16.5,10.5 + parent: 2 + - uid: 4246 + components: + - type: Transform + pos: 17.5,10.5 + parent: 2 + - uid: 4247 + components: + - type: Transform + pos: 18.5,10.5 + parent: 2 + - uid: 4248 + components: + - type: Transform + pos: 18.5,11.5 + parent: 2 + - uid: 4249 + components: + - type: Transform + pos: 18.5,12.5 + parent: 2 + - uid: 4250 + components: + - type: Transform + pos: 41.5,0.5 + parent: 2 + - uid: 4251 + components: + - type: Transform + pos: 41.5,1.5 + parent: 2 + - uid: 4252 + components: + - type: Transform + pos: 41.5,2.5 + parent: 2 + - uid: 4253 + components: + - type: Transform + pos: 42.5,0.5 + parent: 2 + - uid: 4254 + components: + - type: Transform + pos: 43.5,0.5 + parent: 2 + - uid: 4255 + components: + - type: Transform + pos: 43.5,-0.5 + parent: 2 + - uid: 4256 + components: + - type: Transform + pos: 43.5,-1.5 + parent: 2 + - uid: 4257 + components: + - type: Transform + pos: 43.5,-2.5 + parent: 2 + - uid: 4258 + components: + - type: Transform + pos: 43.5,-3.5 + parent: 2 + - uid: 4259 + components: + - type: Transform + pos: 43.5,-4.5 + parent: 2 + - uid: 4260 + components: + - type: Transform + pos: 43.5,-5.5 + parent: 2 + - uid: 4261 + components: + - type: Transform + pos: 44.5,-5.5 + parent: 2 + - uid: 4262 + components: + - type: Transform + pos: 45.5,-5.5 + parent: 2 + - uid: 4263 + components: + - type: Transform + pos: 46.5,-5.5 + parent: 2 + - uid: 4264 + components: + - type: Transform + pos: 47.5,-5.5 + parent: 2 + - uid: 4265 + components: + - type: Transform + pos: 47.5,-6.5 + parent: 2 + - uid: 4266 + components: + - type: Transform + pos: 47.5,-7.5 + parent: 2 + - uid: 4267 + components: + - type: Transform + pos: 47.5,-8.5 + parent: 2 + - uid: 4268 + components: + - type: Transform + pos: 47.5,-9.5 + parent: 2 + - uid: 4269 + components: + - type: Transform + pos: 47.5,-10.5 + parent: 2 + - uid: 4270 + components: + - type: Transform + pos: 49.5,-10.5 + parent: 2 + - uid: 4271 + components: + - type: Transform + pos: 50.5,-10.5 + parent: 2 + - uid: 4272 + components: + - type: Transform + pos: 51.5,-10.5 + parent: 2 + - uid: 4273 + components: + - type: Transform + pos: 51.5,-11.5 + parent: 2 + - uid: 4274 + components: + - type: Transform + pos: 18.5,9.5 + parent: 2 + - uid: 4275 + components: + - type: Transform + pos: 18.5,8.5 + parent: 2 + - uid: 4276 + components: + - type: Transform + pos: 18.5,7.5 + parent: 2 + - uid: 4277 + components: + - type: Transform + pos: 18.5,6.5 + parent: 2 + - uid: 4278 + components: + - type: Transform + pos: 19.5,6.5 + parent: 2 + - uid: 4279 + components: + - type: Transform + pos: 20.5,6.5 + parent: 2 + - uid: 4280 + components: + - type: Transform + pos: 21.5,6.5 + parent: 2 + - uid: 4281 + components: + - type: Transform + pos: 22.5,6.5 + parent: 2 + - uid: 4282 + components: + - type: Transform + pos: 23.5,6.5 + parent: 2 + - uid: 4283 + components: + - type: Transform + pos: 24.5,6.5 + parent: 2 + - uid: 4284 + components: + - type: Transform + pos: 25.5,6.5 + parent: 2 + - uid: 4285 + components: + - type: Transform + pos: 25.5,7.5 + parent: 2 + - uid: 4286 + components: + - type: Transform + pos: 26.5,7.5 + parent: 2 + - uid: 4287 + components: + - type: Transform + pos: 27.5,7.5 + parent: 2 + - uid: 4288 + components: + - type: Transform + pos: 28.5,7.5 + parent: 2 + - uid: 4289 + components: + - type: Transform + pos: 29.5,7.5 + parent: 2 + - uid: 4290 + components: + - type: Transform + pos: 30.5,7.5 + parent: 2 + - uid: 4291 + components: + - type: Transform + pos: 31.5,7.5 + parent: 2 + - uid: 4292 + components: + - type: Transform + pos: 31.5,6.5 + parent: 2 + - uid: 4293 + components: + - type: Transform + pos: 31.5,5.5 + parent: 2 + - uid: 4294 + components: + - type: Transform + pos: 31.5,4.5 + parent: 2 + - uid: 4295 + components: + - type: Transform + pos: 32.5,4.5 + parent: 2 + - uid: 4296 + components: + - type: Transform + pos: 33.5,4.5 + parent: 2 + - uid: 4297 + components: + - type: Transform + pos: 34.5,4.5 + parent: 2 + - uid: 4298 + components: + - type: Transform + pos: 35.5,4.5 + parent: 2 + - uid: 4299 + components: + - type: Transform + pos: 36.5,4.5 + parent: 2 + - uid: 4300 + components: + - type: Transform + pos: 37.5,4.5 + parent: 2 + - uid: 4301 + components: + - type: Transform + pos: 38.5,4.5 + parent: 2 + - uid: 4302 + components: + - type: Transform + pos: 39.5,4.5 + parent: 2 + - uid: 4303 + components: + - type: Transform + pos: 40.5,4.5 + parent: 2 + - uid: 4304 + components: + - type: Transform + pos: 41.5,4.5 + parent: 2 + - uid: 4305 + components: + - type: Transform + pos: 42.5,4.5 + parent: 2 + - uid: 4306 + components: + - type: Transform + pos: 42.5,3.5 + parent: 2 + - uid: 4307 + components: + - type: Transform + pos: 42.5,2.5 + parent: 2 + - uid: 4308 + components: + - type: Transform + pos: 43.5,4.5 + parent: 2 + - uid: 4309 + components: + - type: Transform + pos: 43.5,5.5 + parent: 2 + - uid: 4310 + components: + - type: Transform + pos: 43.5,6.5 + parent: 2 + - uid: 4311 + components: + - type: Transform + pos: 43.5,7.5 + parent: 2 + - uid: 4312 + components: + - type: Transform + pos: 43.5,8.5 + parent: 2 + - uid: 4313 + components: + - type: Transform + pos: 43.5,9.5 + parent: 2 + - uid: 4314 + components: + - type: Transform + pos: 43.5,10.5 + parent: 2 + - uid: 4315 + components: + - type: Transform + pos: 44.5,10.5 + parent: 2 + - uid: 4316 + components: + - type: Transform + pos: 45.5,10.5 + parent: 2 + - uid: 4317 + components: + - type: Transform + pos: 46.5,10.5 + parent: 2 + - uid: 4318 + components: + - type: Transform + pos: 47.5,10.5 + parent: 2 + - uid: 4319 + components: + - type: Transform + pos: 48.5,10.5 + parent: 2 + - uid: 4320 + components: + - type: Transform + pos: 49.5,10.5 + parent: 2 + - uid: 4321 + components: + - type: Transform + pos: 50.5,10.5 + parent: 2 + - uid: 4322 + components: + - type: Transform + pos: 51.5,10.5 + parent: 2 + - uid: 4323 + components: + - type: Transform + pos: 52.5,10.5 + parent: 2 + - uid: 4324 + components: + - type: Transform + pos: 52.5,11.5 + parent: 2 + - uid: 4325 + components: + - type: Transform + pos: 53.5,11.5 + parent: 2 + - uid: 4326 + components: + - type: Transform + pos: 54.5,11.5 + parent: 2 + - uid: 4327 + components: + - type: Transform + pos: 55.5,11.5 + parent: 2 + - uid: 4328 + components: + - type: Transform + pos: 55.5,12.5 + parent: 2 + - uid: 4329 + components: + - type: Transform + pos: 55.5,13.5 + parent: 2 + - uid: 4330 + components: + - type: Transform + pos: 56.5,13.5 + parent: 2 + - uid: 4331 + components: + - type: Transform + pos: 57.5,13.5 + parent: 2 + - uid: 4332 + components: + - type: Transform + pos: 58.5,13.5 + parent: 2 + - uid: 4333 + components: + - type: Transform + pos: 59.5,13.5 + parent: 2 + - uid: 4334 + components: + - type: Transform + pos: 60.5,13.5 + parent: 2 + - uid: 4335 + components: + - type: Transform + pos: 61.5,13.5 + parent: 2 + - uid: 4336 + components: + - type: Transform + pos: 61.5,14.5 + parent: 2 + - uid: 4337 + components: + - type: Transform + pos: 61.5,15.5 + parent: 2 + - uid: 4338 + components: + - type: Transform + pos: 61.5,16.5 + parent: 2 + - uid: 4339 + components: + - type: Transform + pos: 61.5,17.5 + parent: 2 + - uid: 4340 + components: + - type: Transform + pos: 61.5,18.5 + parent: 2 + - uid: 4341 + components: + - type: Transform + pos: 62.5,18.5 + parent: 2 + - uid: 4342 + components: + - type: Transform + pos: 63.5,18.5 + parent: 2 + - uid: 4343 + components: + - type: Transform + pos: 64.5,18.5 + parent: 2 + - uid: 4344 + components: + - type: Transform + pos: 65.5,18.5 + parent: 2 + - uid: 4345 + components: + - type: Transform + pos: 65.5,19.5 + parent: 2 + - uid: 4346 + components: + - type: Transform + pos: 65.5,20.5 + parent: 2 + - uid: 4347 + components: + - type: Transform + pos: 65.5,21.5 + parent: 2 + - uid: 4348 + components: + - type: Transform + pos: 65.5,22.5 + parent: 2 + - uid: 4349 + components: + - type: Transform + pos: 65.5,23.5 + parent: 2 + - uid: 4350 + components: + - type: Transform + pos: 65.5,24.5 + parent: 2 + - uid: 4351 + components: + - type: Transform + pos: 65.5,25.5 + parent: 2 + - uid: 4352 + components: + - type: Transform + pos: 65.5,26.5 + parent: 2 + - uid: 4353 + components: + - type: Transform + pos: 65.5,27.5 + parent: 2 + - uid: 4354 + components: + - type: Transform + pos: 65.5,28.5 + parent: 2 + - uid: 4355 + components: + - type: Transform + pos: 65.5,29.5 + parent: 2 + - uid: 4356 + components: + - type: Transform + pos: 65.5,30.5 + parent: 2 + - uid: 4357 + components: + - type: Transform + pos: 65.5,31.5 + parent: 2 + - uid: 4358 + components: + - type: Transform + pos: 65.5,32.5 + parent: 2 + - uid: 4359 + components: + - type: Transform + pos: 65.5,33.5 + parent: 2 + - uid: 4360 + components: + - type: Transform + pos: 66.5,18.5 + parent: 2 + - uid: 4361 + components: + - type: Transform + pos: 67.5,18.5 + parent: 2 + - uid: 4362 + components: + - type: Transform + pos: 68.5,18.5 + parent: 2 + - uid: 4363 + components: + - type: Transform + pos: 69.5,18.5 + parent: 2 + - uid: 4364 + components: + - type: Transform + pos: 70.5,18.5 + parent: 2 + - uid: 4365 + components: + - type: Transform + pos: 71.5,18.5 + parent: 2 + - uid: 4366 + components: + - type: Transform + pos: 72.5,18.5 + parent: 2 + - uid: 4367 + components: + - type: Transform + pos: 73.5,18.5 + parent: 2 + - uid: 4368 + components: + - type: Transform + pos: 74.5,18.5 + parent: 2 + - uid: 4369 + components: + - type: Transform + pos: 74.5,17.5 + parent: 2 + - uid: 4370 + components: + - type: Transform + pos: 75.5,17.5 + parent: 2 + - uid: 4371 + components: + - type: Transform + pos: 75.5,16.5 + parent: 2 + - uid: 4372 + components: + - type: Transform + pos: 75.5,15.5 + parent: 2 + - uid: 4373 + components: + - type: Transform + pos: 75.5,14.5 + parent: 2 + - uid: 4374 + components: + - type: Transform + pos: 75.5,13.5 + parent: 2 + - uid: 4375 + components: + - type: Transform + pos: 76.5,13.5 + parent: 2 + - uid: 4376 + components: + - type: Transform + pos: 65.5,34.5 + parent: 2 + - uid: 4377 + components: + - type: Transform + pos: 65.5,35.5 + parent: 2 + - uid: 4378 + components: + - type: Transform + pos: 65.5,36.5 + parent: 2 + - uid: 4379 + components: + - type: Transform + pos: 65.5,37.5 + parent: 2 + - uid: 4380 + components: + - type: Transform + pos: 65.5,38.5 + parent: 2 + - uid: 4381 + components: + - type: Transform + pos: 65.5,39.5 + parent: 2 + - uid: 4382 + components: + - type: Transform + pos: 65.5,40.5 + parent: 2 + - uid: 4383 + components: + - type: Transform + pos: 65.5,41.5 + parent: 2 + - uid: 4384 + components: + - type: Transform + pos: 65.5,42.5 + parent: 2 + - uid: 4385 + components: + - type: Transform + pos: 65.5,43.5 + parent: 2 + - uid: 4386 + components: + - type: Transform + pos: 65.5,44.5 + parent: 2 + - uid: 4387 + components: + - type: Transform + pos: 65.5,45.5 + parent: 2 + - uid: 4388 + components: + - type: Transform + pos: 65.5,52.5 + parent: 2 + - uid: 4389 + components: + - type: Transform + pos: 65.5,53.5 + parent: 2 + - uid: 4390 + components: + - type: Transform + pos: 65.5,54.5 + parent: 2 + - uid: 4391 + components: + - type: Transform + pos: 65.5,55.5 + parent: 2 + - uid: 4393 + components: + - type: Transform + pos: 66.5,55.5 + parent: 2 + - uid: 4394 + components: + - type: Transform + pos: 67.5,55.5 + parent: 2 + - uid: 4395 + components: + - type: Transform + pos: 68.5,55.5 + parent: 2 + - uid: 4396 + components: + - type: Transform + pos: 68.5,54.5 + parent: 2 + - uid: 4397 + components: + - type: Transform + pos: 69.5,54.5 + parent: 2 + - uid: 4398 + components: + - type: Transform + pos: 70.5,54.5 + parent: 2 + - uid: 4399 + components: + - type: Transform + pos: 71.5,54.5 + parent: 2 + - uid: 4400 + components: + - type: Transform + pos: 72.5,54.5 + parent: 2 + - uid: 4401 + components: + - type: Transform + pos: 73.5,54.5 + parent: 2 + - uid: 4402 + components: + - type: Transform + pos: 73.5,53.5 + parent: 2 + - uid: 4403 + components: + - type: Transform + pos: 74.5,53.5 + parent: 2 + - uid: 4404 + components: + - type: Transform + pos: 75.5,53.5 + parent: 2 + - uid: 4414 + components: + - type: Transform + pos: 80.5,47.5 + parent: 2 + - uid: 4415 + components: + - type: Transform + pos: 79.5,47.5 + parent: 2 + - uid: 4416 + components: + - type: Transform + pos: 81.5,47.5 + parent: 2 + - uid: 4417 + components: + - type: Transform + pos: 81.5,46.5 + parent: 2 + - uid: 4418 + components: + - type: Transform + pos: 82.5,46.5 + parent: 2 + - uid: 4419 + components: + - type: Transform + pos: 83.5,46.5 + parent: 2 + - uid: 4420 + components: + - type: Transform + pos: 35.5,60.5 + parent: 2 + - uid: 4421 + components: + - type: Transform + pos: 35.5,59.5 + parent: 2 + - uid: 4422 + components: + - type: Transform + pos: 36.5,59.5 + parent: 2 + - uid: 4423 + components: + - type: Transform + pos: 37.5,59.5 + parent: 2 + - uid: 4424 + components: + - type: Transform + pos: 38.5,59.5 + parent: 2 + - uid: 4425 + components: + - type: Transform + pos: 39.5,59.5 + parent: 2 + - uid: 4426 + components: + - type: Transform + pos: 39.5,58.5 + parent: 2 + - uid: 4427 + components: + - type: Transform + pos: 39.5,57.5 + parent: 2 + - uid: 4428 + components: + - type: Transform + pos: 39.5,56.5 + parent: 2 + - uid: 4429 + components: + - type: Transform + pos: 40.5,56.5 + parent: 2 + - uid: 4430 + components: + - type: Transform + pos: 41.5,56.5 + parent: 2 + - uid: 4431 + components: + - type: Transform + pos: 42.5,56.5 + parent: 2 + - uid: 4432 + components: + - type: Transform + pos: 43.5,56.5 + parent: 2 + - uid: 4433 + components: + - type: Transform + pos: 44.5,56.5 + parent: 2 + - uid: 4435 + components: + - type: Transform + pos: 46.5,56.5 + parent: 2 + - uid: 4436 + components: + - type: Transform + pos: 47.5,56.5 + parent: 2 + - uid: 4437 + components: + - type: Transform + pos: 48.5,56.5 + parent: 2 + - uid: 4438 + components: + - type: Transform + pos: 49.5,56.5 + parent: 2 + - uid: 4439 + components: + - type: Transform + pos: 50.5,56.5 + parent: 2 + - uid: 4440 + components: + - type: Transform + pos: 51.5,56.5 + parent: 2 + - uid: 4441 + components: + - type: Transform + pos: 51.5,57.5 + parent: 2 + - uid: 4442 + components: + - type: Transform + pos: 51.5,58.5 + parent: 2 + - uid: 4443 + components: + - type: Transform + pos: 51.5,59.5 + parent: 2 + - uid: 4444 + components: + - type: Transform + pos: 52.5,59.5 + parent: 2 + - uid: 4445 + components: + - type: Transform + pos: 52.5,56.5 + parent: 2 + - uid: 4446 + components: + - type: Transform + pos: 53.5,56.5 + parent: 2 + - uid: 4447 + components: + - type: Transform + pos: 53.5,55.5 + parent: 2 + - uid: 4448 + components: + - type: Transform + pos: 53.5,54.5 + parent: 2 + - uid: 4449 + components: + - type: Transform + pos: 53.5,53.5 + parent: 2 + - uid: 4450 + components: + - type: Transform + pos: 54.5,53.5 + parent: 2 + - uid: 4451 + components: + - type: Transform + pos: 55.5,53.5 + parent: 2 + - uid: 4452 + components: + - type: Transform + pos: 56.5,53.5 + parent: 2 + - uid: 4453 + components: + - type: Transform + pos: 57.5,53.5 + parent: 2 + - uid: 4454 + components: + - type: Transform + pos: 57.5,52.5 + parent: 2 + - uid: 4455 + components: + - type: Transform + pos: 57.5,51.5 + parent: 2 + - uid: 4456 + components: + - type: Transform + pos: 57.5,50.5 + parent: 2 + - uid: 4457 + components: + - type: Transform + pos: 57.5,49.5 + parent: 2 + - uid: 4458 + components: + - type: Transform + pos: 57.5,48.5 + parent: 2 + - uid: 4459 + components: + - type: Transform + pos: 58.5,48.5 + parent: 2 + - uid: 4460 + components: + - type: Transform + pos: 59.5,48.5 + parent: 2 + - uid: 4461 + components: + - type: Transform + pos: 59.5,47.5 + parent: 2 + - uid: 4462 + components: + - type: Transform + pos: 60.5,47.5 + parent: 2 + - uid: 4463 + components: + - type: Transform + pos: 61.5,47.5 + parent: 2 + - uid: 4464 + components: + - type: Transform + pos: 62.5,47.5 + parent: 2 + - uid: 4465 + components: + - type: Transform + pos: 63.5,47.5 + parent: 2 + - uid: 4466 + components: + - type: Transform + pos: 64.5,47.5 + parent: 2 + - uid: 4467 + components: + - type: Transform + pos: 17.5,48.5 + parent: 2 + - uid: 4468 + components: + - type: Transform + pos: 18.5,48.5 + parent: 2 + - uid: 4469 + components: + - type: Transform + pos: 19.5,48.5 + parent: 2 + - uid: 4470 + components: + - type: Transform + pos: 20.5,48.5 + parent: 2 + - uid: 4471 + components: + - type: Transform + pos: 21.5,48.5 + parent: 2 + - uid: 4472 + components: + - type: Transform + pos: 21.5,47.5 + parent: 2 + - uid: 4473 + components: + - type: Transform + pos: 21.5,46.5 + parent: 2 + - uid: 4474 + components: + - type: Transform + pos: 21.5,45.5 + parent: 2 + - uid: 4475 + components: + - type: Transform + pos: 21.5,44.5 + parent: 2 + - uid: 4476 + components: + - type: Transform + pos: 21.5,43.5 + parent: 2 + - uid: 4477 + components: + - type: Transform + pos: 20.5,43.5 + parent: 2 + - uid: 4478 + components: + - type: Transform + pos: 22.5,48.5 + parent: 2 + - uid: 4479 + components: + - type: Transform + pos: 23.5,48.5 + parent: 2 + - uid: 4480 + components: + - type: Transform + pos: 24.5,48.5 + parent: 2 + - uid: 4481 + components: + - type: Transform + pos: 25.5,48.5 + parent: 2 + - uid: 4482 + components: + - type: Transform + pos: 26.5,48.5 + parent: 2 + - uid: 4483 + components: + - type: Transform + pos: 27.5,48.5 + parent: 2 + - uid: 4484 + components: + - type: Transform + pos: 28.5,48.5 + parent: 2 + - uid: 4485 + components: + - type: Transform + pos: 29.5,48.5 + parent: 2 + - uid: 4486 + components: + - type: Transform + pos: 30.5,48.5 + parent: 2 + - uid: 4487 + components: + - type: Transform + pos: 31.5,48.5 + parent: 2 + - uid: 4488 + components: + - type: Transform + pos: 32.5,48.5 + parent: 2 + - uid: 4489 + components: + - type: Transform + pos: 33.5,48.5 + parent: 2 + - uid: 4490 + components: + - type: Transform + pos: 34.5,48.5 + parent: 2 + - uid: 4491 + components: + - type: Transform + pos: 35.5,48.5 + parent: 2 + - uid: 4492 + components: + - type: Transform + pos: 36.5,48.5 + parent: 2 + - uid: 4493 + components: + - type: Transform + pos: 37.5,48.5 + parent: 2 + - uid: 4494 + components: + - type: Transform + pos: 38.5,48.5 + parent: 2 + - uid: 4495 + components: + - type: Transform + pos: 39.5,48.5 + parent: 2 + - uid: 4496 + components: + - type: Transform + pos: 40.5,48.5 + parent: 2 + - uid: 4497 + components: + - type: Transform + pos: 41.5,48.5 + parent: 2 + - uid: 4498 + components: + - type: Transform + pos: 42.5,48.5 + parent: 2 + - uid: 4499 + components: + - type: Transform + pos: 43.5,48.5 + parent: 2 + - uid: 4500 + components: + - type: Transform + pos: 44.5,48.5 + parent: 2 + - uid: 4501 + components: + - type: Transform + pos: 44.5,49.5 + parent: 2 + - uid: 4502 + components: + - type: Transform + pos: 44.5,50.5 + parent: 2 + - uid: 4503 + components: + - type: Transform + pos: 44.5,51.5 + parent: 2 + - uid: 4504 + components: + - type: Transform + pos: 45.5,51.5 + parent: 2 + - uid: 4505 + components: + - type: Transform + pos: 46.5,51.5 + parent: 2 + - uid: 4506 + components: + - type: Transform + pos: 46.5,52.5 + parent: 2 + - uid: 4507 + components: + - type: Transform + pos: 46.5,53.5 + parent: 2 + - uid: 4508 + components: + - type: Transform + pos: 46.5,54.5 + parent: 2 + - uid: 4509 + components: + - type: Transform + pos: 46.5,55.5 + parent: 2 + - uid: 4510 + components: + - type: Transform + pos: 32.5,47.5 + parent: 2 + - uid: 4511 + components: + - type: Transform + pos: 32.5,46.5 + parent: 2 + - uid: 4512 + components: + - type: Transform + pos: 32.5,45.5 + parent: 2 + - uid: 4513 + components: + - type: Transform + pos: 32.5,44.5 + parent: 2 + - uid: 4514 + components: + - type: Transform + pos: 32.5,43.5 + parent: 2 + - uid: 4515 + components: + - type: Transform + pos: 32.5,42.5 + parent: 2 + - uid: 4516 + components: + - type: Transform + pos: 32.5,41.5 + parent: 2 + - uid: 4517 + components: + - type: Transform + pos: 32.5,40.5 + parent: 2 + - uid: 4518 + components: + - type: Transform + pos: 32.5,39.5 + parent: 2 + - uid: 4519 + components: + - type: Transform + pos: 32.5,38.5 + parent: 2 + - uid: 4520 + components: + - type: Transform + pos: 32.5,37.5 + parent: 2 + - uid: 4521 + components: + - type: Transform + pos: 32.5,36.5 + parent: 2 + - uid: 4522 + components: + - type: Transform + pos: 32.5,35.5 + parent: 2 + - uid: 4523 + components: + - type: Transform + pos: 32.5,34.5 + parent: 2 + - uid: 4524 + components: + - type: Transform + pos: 32.5,33.5 + parent: 2 + - uid: 4525 + components: + - type: Transform + pos: 32.5,32.5 + parent: 2 + - uid: 4526 + components: + - type: Transform + pos: 32.5,31.5 + parent: 2 + - uid: 4527 + components: + - type: Transform + pos: 32.5,30.5 + parent: 2 + - uid: 4528 + components: + - type: Transform + pos: 32.5,29.5 + parent: 2 + - uid: 4529 + components: + - type: Transform + pos: 32.5,28.5 + parent: 2 + - uid: 4530 + components: + - type: Transform + pos: 32.5,27.5 + parent: 2 + - uid: 4531 + components: + - type: Transform + pos: 32.5,26.5 + parent: 2 + - uid: 4532 + components: + - type: Transform + pos: 32.5,25.5 + parent: 2 + - uid: 4533 + components: + - type: Transform + pos: 32.5,24.5 + parent: 2 + - uid: 4534 + components: + - type: Transform + pos: 32.5,23.5 + parent: 2 + - uid: 4535 + components: + - type: Transform + pos: 32.5,22.5 + parent: 2 + - uid: 4536 + components: + - type: Transform + pos: 32.5,21.5 + parent: 2 + - uid: 4537 + components: + - type: Transform + pos: 32.5,20.5 + parent: 2 + - uid: 4538 + components: + - type: Transform + pos: 16.5,20.5 + parent: 2 + - uid: 4539 + components: + - type: Transform + pos: 17.5,20.5 + parent: 2 + - uid: 4540 + components: + - type: Transform + pos: 18.5,20.5 + parent: 2 + - uid: 4541 + components: + - type: Transform + pos: 19.5,20.5 + parent: 2 + - uid: 4542 + components: + - type: Transform + pos: 20.5,20.5 + parent: 2 + - uid: 4543 + components: + - type: Transform + pos: 21.5,20.5 + parent: 2 + - uid: 4544 + components: + - type: Transform + pos: 22.5,20.5 + parent: 2 + - uid: 4545 + components: + - type: Transform + pos: 23.5,20.5 + parent: 2 + - uid: 4546 + components: + - type: Transform + pos: 24.5,20.5 + parent: 2 + - uid: 4547 + components: + - type: Transform + pos: 25.5,20.5 + parent: 2 + - uid: 4548 + components: + - type: Transform + pos: 26.5,20.5 + parent: 2 + - uid: 4549 + components: + - type: Transform + pos: 27.5,20.5 + parent: 2 + - uid: 4550 + components: + - type: Transform + pos: 28.5,20.5 + parent: 2 + - uid: 4551 + components: + - type: Transform + pos: 29.5,20.5 + parent: 2 + - uid: 4552 + components: + - type: Transform + pos: 30.5,20.5 + parent: 2 + - uid: 4553 + components: + - type: Transform + pos: 31.5,20.5 + parent: 2 + - uid: 4554 + components: + - type: Transform + pos: 33.5,34.5 + parent: 2 + - uid: 4555 + components: + - type: Transform + pos: 34.5,34.5 + parent: 2 + - uid: 4556 + components: + - type: Transform + pos: 35.5,34.5 + parent: 2 + - uid: 4557 + components: + - type: Transform + pos: 36.5,34.5 + parent: 2 + - uid: 4558 + components: + - type: Transform + pos: 37.5,34.5 + parent: 2 + - uid: 4559 + components: + - type: Transform + pos: 38.5,34.5 + parent: 2 + - uid: 4560 + components: + - type: Transform + pos: 39.5,34.5 + parent: 2 + - uid: 4561 + components: + - type: Transform + pos: 40.5,34.5 + parent: 2 + - uid: 4562 + components: + - type: Transform + pos: 41.5,34.5 + parent: 2 + - uid: 4563 + components: + - type: Transform + pos: 42.5,34.5 + parent: 2 + - uid: 4564 + components: + - type: Transform + pos: 43.5,34.5 + parent: 2 + - uid: 4565 + components: + - type: Transform + pos: 44.5,34.5 + parent: 2 + - uid: 4566 + components: + - type: Transform + pos: 45.5,34.5 + parent: 2 + - uid: 4567 + components: + - type: Transform + pos: 47.5,34.5 + parent: 2 + - uid: 4568 + components: + - type: Transform + pos: 48.5,34.5 + parent: 2 + - uid: 4569 + components: + - type: Transform + pos: 49.5,34.5 + parent: 2 + - uid: 4570 + components: + - type: Transform + pos: 50.5,34.5 + parent: 2 + - uid: 4571 + components: + - type: Transform + pos: 51.5,34.5 + parent: 2 + - uid: 4572 + components: + - type: Transform + pos: 52.5,34.5 + parent: 2 + - uid: 4573 + components: + - type: Transform + pos: 53.5,34.5 + parent: 2 + - uid: 4574 + components: + - type: Transform + pos: 54.5,34.5 + parent: 2 + - uid: 4575 + components: + - type: Transform + pos: 55.5,34.5 + parent: 2 + - uid: 4576 + components: + - type: Transform + pos: 56.5,34.5 + parent: 2 + - uid: 4577 + components: + - type: Transform + pos: 57.5,34.5 + parent: 2 + - uid: 4578 + components: + - type: Transform + pos: 58.5,34.5 + parent: 2 + - uid: 4579 + components: + - type: Transform + pos: 59.5,34.5 + parent: 2 + - uid: 4580 + components: + - type: Transform + pos: 60.5,34.5 + parent: 2 + - uid: 4581 + components: + - type: Transform + pos: 61.5,34.5 + parent: 2 + - uid: 4582 + components: + - type: Transform + pos: 62.5,34.5 + parent: 2 + - uid: 4583 + components: + - type: Transform + pos: 63.5,34.5 + parent: 2 + - uid: 4584 + components: + - type: Transform + pos: 64.5,34.5 + parent: 2 + - uid: 4585 + components: + - type: Transform + pos: -24.5,-15.5 + parent: 2 + - uid: 4586 + components: + - type: Transform + pos: 33.5,69.5 + parent: 2 + - uid: 4587 + components: + - type: Transform + pos: 33.5,80.5 + parent: 2 + - uid: 4588 + components: + - type: Transform + pos: -43.5,26.5 + parent: 2 + - uid: 4591 + components: + - type: Transform + pos: -5.5,20.5 + parent: 2 + - uid: 4592 + components: + - type: Transform + pos: -6.5,20.5 + parent: 2 + - uid: 4593 + components: + - type: Transform + pos: -7.5,20.5 + parent: 2 + - uid: 4594 + components: + - type: Transform + pos: -8.5,20.5 + parent: 2 + - uid: 4595 + components: + - type: Transform + pos: -9.5,20.5 + parent: 2 + - uid: 4596 + components: + - type: Transform + pos: -10.5,20.5 + parent: 2 + - uid: 4597 + components: + - type: Transform + pos: -11.5,20.5 + parent: 2 + - uid: 4598 + components: + - type: Transform + pos: -11.5,19.5 + parent: 2 + - uid: 4599 + components: + - type: Transform + pos: -12.5,19.5 + parent: 2 + - uid: 4600 + components: + - type: Transform + pos: -13.5,19.5 + parent: 2 + - uid: 4601 + components: + - type: Transform + pos: -14.5,19.5 + parent: 2 + - uid: 4602 + components: + - type: Transform + pos: -15.5,19.5 + parent: 2 + - uid: 4603 + components: + - type: Transform + pos: -16.5,19.5 + parent: 2 + - uid: 4604 + components: + - type: Transform + pos: -17.5,19.5 + parent: 2 + - uid: 4605 + components: + - type: Transform + pos: -18.5,19.5 + parent: 2 + - uid: 4606 + components: + - type: Transform + pos: -19.5,19.5 + parent: 2 + - uid: 4607 + components: + - type: Transform + pos: -19.5,18.5 + parent: 2 + - uid: 4608 + components: + - type: Transform + pos: -20.5,18.5 + parent: 2 + - uid: 4609 + components: + - type: Transform + pos: -21.5,18.5 + parent: 2 + - uid: 4610 + components: + - type: Transform + pos: -22.5,18.5 + parent: 2 + - uid: 4611 + components: + - type: Transform + pos: -22.5,19.5 + parent: 2 + - uid: 4612 + components: + - type: Transform + pos: -22.5,20.5 + parent: 2 + - uid: 4613 + components: + - type: Transform + pos: -22.5,21.5 + parent: 2 + - uid: 4614 + components: + - type: Transform + pos: -22.5,22.5 + parent: 2 + - uid: 4615 + components: + - type: Transform + pos: -23.5,22.5 + parent: 2 + - uid: 4616 + components: + - type: Transform + pos: -24.5,22.5 + parent: 2 + - uid: 4617 + components: + - type: Transform + pos: -23.5,23.5 + parent: 2 + - uid: 4618 + components: + - type: Transform + pos: -23.5,24.5 + parent: 2 + - uid: 4619 + components: + - type: Transform + pos: -18.5,31.5 + parent: 2 + - uid: 4620 + components: + - type: Transform + pos: 31.5,1.5 + parent: 2 + - uid: 4621 + components: + - type: Transform + pos: 31.5,3.5 + parent: 2 + - uid: 4622 + components: + - type: Transform + pos: 31.5,2.5 + parent: 2 + - uid: 4623 + components: + - type: Transform + pos: 31.5,0.5 + parent: 2 + - uid: 4624 + components: + - type: Transform + pos: 31.5,-0.5 + parent: 2 + - uid: 4625 + components: + - type: Transform + pos: 30.5,-0.5 + parent: 2 + - uid: 4626 + components: + - type: Transform + pos: -11.5,43.5 + parent: 2 + - uid: 4627 + components: + - type: Transform + pos: 35.5,62.5 + parent: 2 + - uid: 4628 + components: + - type: Transform + pos: -26.5,-10.5 + parent: 2 + - uid: 4629 + components: + - type: Transform + pos: -28.5,-3.5 + parent: 2 + - uid: 4630 + components: + - type: Transform + pos: -23.5,-3.5 + parent: 2 + - uid: 4631 + components: + - type: Transform + pos: -25.5,-10.5 + parent: 2 + - uid: 4632 + components: + - type: Transform + pos: -22.5,3.5 + parent: 2 + - uid: 4633 + components: + - type: Transform + pos: -22.5,2.5 + parent: 2 + - uid: 4634 + components: + - type: Transform + pos: -28.5,-10.5 + parent: 2 + - uid: 4635 + components: + - type: Transform + pos: -27.5,-10.5 + parent: 2 + - uid: 4636 + components: + - type: Transform + pos: -29.5,-11.5 + parent: 2 + - uid: 4637 + components: + - type: Transform + pos: -21.5,33.5 + parent: 2 + - uid: 4638 + components: + - type: Transform + pos: -10.5,42.5 + parent: 2 + - uid: 4639 + components: + - type: Transform + pos: -29.5,-10.5 + parent: 2 + - uid: 4640 + components: + - type: Transform + pos: -15.5,42.5 + parent: 2 + - uid: 4641 + components: + - type: Transform + pos: -10.5,43.5 + parent: 2 + - uid: 4644 + components: + - type: Transform + pos: 65.5,46.5 + parent: 2 + - uid: 4645 + components: + - type: Transform + pos: 65.5,48.5 + parent: 2 + - uid: 4646 + components: + - type: Transform + pos: 65.5,50.5 + parent: 2 + - uid: 4647 + components: + - type: Transform + pos: -18.5,32.5 + parent: 2 + - uid: 4648 + components: + - type: Transform + pos: -14.5,46.5 + parent: 2 + - uid: 4649 + components: + - type: Transform + pos: -10.5,40.5 + parent: 2 + - uid: 4650 + components: + - type: Transform + pos: -21.5,35.5 + parent: 2 + - uid: 4651 + components: + - type: Transform + pos: -22.5,35.5 + parent: 2 + - uid: 4652 + components: + - type: Transform + pos: -10.5,38.5 + parent: 2 + - uid: 4653 + components: + - type: Transform + pos: -16.5,42.5 + parent: 2 + - uid: 4654 + components: + - type: Transform + pos: -14.5,43.5 + parent: 2 + - uid: 4655 + components: + - type: Transform + pos: -10.5,36.5 + parent: 2 + - uid: 4656 + components: + - type: Transform + pos: -14.5,36.5 + parent: 2 + - uid: 4657 + components: + - type: Transform + pos: -10.5,39.5 + parent: 2 + - uid: 4658 + components: + - type: Transform + pos: -12.5,46.5 + parent: 2 + - uid: 4659 + components: + - type: Transform + pos: -13.5,36.5 + parent: 2 + - uid: 4660 + components: + - type: Transform + pos: -10.5,37.5 + parent: 2 + - uid: 4661 + components: + - type: Transform + pos: -12.5,43.5 + parent: 2 + - uid: 4662 + components: + - type: Transform + pos: -18.5,36.5 + parent: 2 + - uid: 4663 + components: + - type: Transform + pos: -20.5,37.5 + parent: 2 + - uid: 4664 + components: + - type: Transform + pos: -21.5,32.5 + parent: 2 + - uid: 4665 + components: + - type: Transform + pos: -21.5,36.5 + parent: 2 + - uid: 4666 + components: + - type: Transform + pos: -21.5,34.5 + parent: 2 + - uid: 4667 + components: + - type: Transform + pos: -20.5,36.5 + parent: 2 + - uid: 4668 + components: + - type: Transform + pos: -19.5,32.5 + parent: 2 + - uid: 4669 + components: + - type: Transform + pos: -18.5,37.5 + parent: 2 + - uid: 4670 + components: + - type: Transform + pos: -10.5,41.5 + parent: 2 + - uid: 4671 + components: + - type: Transform + pos: -16.5,36.5 + parent: 2 + - uid: 4672 + components: + - type: Transform + pos: -15.5,36.5 + parent: 2 + - uid: 4673 + components: + - type: Transform + pos: -14.5,42.5 + parent: 2 + - uid: 4674 + components: + - type: Transform + pos: 46.5,34.5 + parent: 2 + - uid: 4675 + components: + - type: Transform + pos: 84.5,44.5 + parent: 2 + - uid: 4676 + components: + - type: Transform + pos: 84.5,46.5 + parent: 2 + - uid: 4677 + components: + - type: Transform + pos: 84.5,45.5 + parent: 2 + - uid: 4678 + components: + - type: Transform + pos: 84.5,43.5 + parent: 2 + - uid: 4679 + components: + - type: Transform + pos: 84.5,42.5 + parent: 2 + - uid: 4680 + components: + - type: Transform + pos: 84.5,41.5 + parent: 2 + - uid: 4681 + components: + - type: Transform + pos: 83.5,41.5 + parent: 2 + - uid: 4682 + components: + - type: Transform + pos: 83.5,40.5 + parent: 2 + - uid: 4683 + components: + - type: Transform + pos: 83.5,39.5 + parent: 2 + - uid: 4684 + components: + - type: Transform + pos: 84.5,39.5 + parent: 2 + - uid: 4685 + components: + - type: Transform + pos: 85.5,39.5 + parent: 2 + - uid: 4686 + components: + - type: Transform + pos: 86.5,39.5 + parent: 2 + - uid: 4687 + components: + - type: Transform + pos: 87.5,39.5 + parent: 2 + - uid: 4688 + components: + - type: Transform + pos: 87.5,38.5 + parent: 2 + - uid: 4689 + components: + - type: Transform + pos: 88.5,38.5 + parent: 2 + - uid: 4690 + components: + - type: Transform + pos: 88.5,37.5 + parent: 2 + - uid: 4691 + components: + - type: Transform + pos: 88.5,36.5 + parent: 2 + - uid: 4692 + components: + - type: Transform + pos: 88.5,35.5 + parent: 2 + - uid: 4693 + components: + - type: Transform + pos: 88.5,34.5 + parent: 2 + - uid: 4694 + components: + - type: Transform + pos: 88.5,33.5 + parent: 2 + - uid: 4695 + components: + - type: Transform + pos: 88.5,32.5 + parent: 2 + - uid: 4696 + components: + - type: Transform + pos: 88.5,31.5 + parent: 2 + - uid: 4697 + components: + - type: Transform + pos: 88.5,30.5 + parent: 2 + - uid: 4698 + components: + - type: Transform + pos: 87.5,30.5 + parent: 2 + - uid: 4699 + components: + - type: Transform + pos: 87.5,29.5 + parent: 2 + - uid: 4700 + components: + - type: Transform + pos: 86.5,29.5 + parent: 2 + - uid: 4701 + components: + - type: Transform + pos: 85.5,29.5 + parent: 2 + - uid: 4702 + components: + - type: Transform + pos: 84.5,29.5 + parent: 2 + - uid: 4703 + components: + - type: Transform + pos: 83.5,29.5 + parent: 2 + - uid: 4704 + components: + - type: Transform + pos: 83.5,28.5 + parent: 2 + - uid: 4705 + components: + - type: Transform + pos: 83.5,27.5 + parent: 2 + - uid: 4706 + components: + - type: Transform + pos: 84.5,27.5 + parent: 2 + - uid: 4707 + components: + - type: Transform + pos: 84.5,26.5 + parent: 2 + - uid: 4708 + components: + - type: Transform + pos: 84.5,25.5 + parent: 2 + - uid: 4709 + components: + - type: Transform + pos: 84.5,24.5 + parent: 2 + - uid: 4710 + components: + - type: Transform + pos: 84.5,23.5 + parent: 2 + - uid: 4711 + components: + - type: Transform + pos: 84.5,22.5 + parent: 2 + - uid: 4712 + components: + - type: Transform + pos: 84.5,21.5 + parent: 2 + - uid: 4713 + components: + - type: Transform + pos: 65.5,51.5 + parent: 2 + - uid: 4714 + components: + - type: Transform + pos: 65.5,49.5 + parent: 2 + - uid: 4715 + components: + - type: Transform + pos: 65.5,47.5 + parent: 2 + - uid: 4728 + components: + - type: Transform + pos: -13.5,23.5 + parent: 2 + - uid: 4729 + components: + - type: Transform + pos: -14.5,23.5 + parent: 2 + - uid: 4731 + components: + - type: Transform + pos: -13.5,25.5 + parent: 2 + - uid: 4732 + components: + - type: Transform + pos: -14.5,26.5 + parent: 2 + - uid: 4733 + components: + - type: Transform + pos: -14.5,27.5 + parent: 2 + - uid: 4734 + components: + - type: Transform + pos: -14.5,25.5 + parent: 2 + - uid: 4735 + components: + - type: Transform + pos: -13.5,27.5 + parent: 2 + - uid: 4736 + components: + - type: Transform + pos: -13.5,28.5 + parent: 2 + - uid: 4737 + components: + - type: Transform + pos: -13.5,29.5 + parent: 2 + - uid: 4738 + components: + - type: Transform + pos: -13.5,30.5 + parent: 2 + - uid: 4739 + components: + - type: Transform + pos: -13.5,31.5 + parent: 2 + - uid: 4740 + components: + - type: Transform + pos: -13.5,32.5 + parent: 2 + - uid: 4741 + components: + - type: Transform + pos: -13.5,33.5 + parent: 2 + - uid: 4742 + components: + - type: Transform + pos: -13.5,34.5 + parent: 2 + - uid: 4743 + components: + - type: Transform + pos: -13.5,35.5 + parent: 2 + - uid: 4744 + components: + - type: Transform + pos: -3.5,19.5 + parent: 2 + - uid: 4745 + components: + - type: Transform + pos: -3.5,18.5 + parent: 2 + - uid: 6323 + components: + - type: Transform + pos: -14.5,24.5 + parent: 2 + - uid: 7021 + components: + - type: Transform + pos: -13.5,24.5 + parent: 2 + - uid: 13405 + components: + - type: Transform + pos: 30.5,-30.5 + parent: 2 + - uid: 13722 + components: + - type: Transform + pos: 32.5,-10.5 + parent: 2 + - uid: 14247 + components: + - type: Transform + pos: 36.5,-10.5 + parent: 2 + - uid: 14248 + components: + - type: Transform + pos: 34.5,-10.5 + parent: 2 + - uid: 14249 + components: + - type: Transform + pos: 33.5,-8.5 + parent: 2 + - uid: 14250 + components: + - type: Transform + pos: 35.5,-8.5 + parent: 2 + - uid: 14931 + components: + - type: Transform + pos: 32.5,-8.5 + parent: 2 + - uid: 14932 + components: + - type: Transform + pos: 34.5,-8.5 + parent: 2 + - uid: 14976 + components: + - type: Transform + pos: 36.5,-8.5 + parent: 2 + - uid: 14978 + components: + - type: Transform + pos: 35.5,-10.5 + parent: 2 + - uid: 14979 + components: + - type: Transform + pos: 33.5,-10.5 + parent: 2 + - uid: 14980 + components: + - type: Transform + pos: 32.5,-9.5 + parent: 2 + - uid: 15040 + components: + - type: Transform + pos: 24.5,-8.5 + parent: 2 + - uid: 15285 + components: + - type: Transform + pos: 24.5,-9.5 + parent: 2 + - uid: 15286 + components: + - type: Transform + pos: 24.5,-10.5 + parent: 2 + - uid: 15410 + components: + - type: Transform + pos: 28.5,-8.5 + parent: 2 + - uid: 15441 + components: + - type: Transform + pos: 26.5,-10.5 + parent: 2 + - uid: 15452 + components: + - type: Transform + pos: 36.5,-9.5 + parent: 2 + - uid: 15467 + components: + - type: Transform + pos: 31.5,-9.5 + parent: 2 + - uid: 15498 + components: + - type: Transform + pos: 25.5,-10.5 + parent: 2 + - uid: 15511 + components: + - type: Transform + pos: 27.5,-8.5 + parent: 2 + - uid: 17111 + components: + - type: Transform + pos: 27.5,-10.5 + parent: 2 + - uid: 17112 + components: + - type: Transform + pos: 28.5,-9.5 + parent: 2 + - uid: 17113 + components: + - type: Transform + pos: 30.5,-9.5 + parent: 2 + - uid: 17114 + components: + - type: Transform + pos: 29.5,-9.5 + parent: 2 + - uid: 17115 + components: + - type: Transform + pos: 26.5,-8.5 + parent: 2 + - uid: 17116 + components: + - type: Transform + pos: 25.5,-8.5 + parent: 2 + - uid: 17117 + components: + - type: Transform + pos: 28.5,-10.5 + parent: 2 + - uid: 17118 + components: + - type: Transform + pos: 30.5,-6.5 + parent: 2 + - uid: 17119 + components: + - type: Transform + pos: 30.5,-8.5 + parent: 2 + - uid: 17121 + components: + - type: Transform + pos: 30.5,-7.5 + parent: 2 + - uid: 17149 + components: + - type: Transform + pos: 30.5,-35.5 + parent: 2 + - uid: 17150 + components: + - type: Transform + pos: 30.5,-34.5 + parent: 2 + - uid: 17151 + components: + - type: Transform + pos: 30.5,-33.5 + parent: 2 + - uid: 17152 + components: + - type: Transform + pos: 30.5,-32.5 + parent: 2 + - uid: 17153 + components: + - type: Transform + pos: 30.5,-31.5 + parent: 2 + - uid: 17171 + components: + - type: Transform + pos: 36.5,-34.5 + parent: 2 + - uid: 17172 + components: + - type: Transform + pos: 36.5,-35.5 + parent: 2 + - uid: 17174 + components: + - type: Transform + pos: 30.5,-36.5 + parent: 2 + - uid: 17175 + components: + - type: Transform + pos: 29.5,-45.5 + parent: 2 + - uid: 17176 + components: + - type: Transform + pos: 30.5,-41.5 + parent: 2 + - uid: 17177 + components: + - type: Transform + pos: 30.5,-42.5 + parent: 2 + - uid: 17183 + components: + - type: Transform + pos: 32.5,-37.5 + parent: 2 + - uid: 17184 + components: + - type: Transform + pos: 36.5,-21.5 + parent: 2 + - uid: 17194 + components: + - type: Transform + pos: 30.5,-45.5 + parent: 2 + - uid: 17208 + components: + - type: Transform + pos: 30.5,-47.5 + parent: 2 + - uid: 17210 + components: + - type: Transform + pos: 30.5,-39.5 + parent: 2 + - uid: 17211 + components: + - type: Transform + pos: 30.5,-43.5 + parent: 2 + - uid: 17214 + components: + - type: Transform + pos: 30.5,-48.5 + parent: 2 + - uid: 17215 + components: + - type: Transform + pos: 30.5,-46.5 + parent: 2 + - uid: 17216 + components: + - type: Transform + pos: 30.5,-40.5 + parent: 2 + - uid: 17217 + components: + - type: Transform + pos: 30.5,-44.5 + parent: 2 + - uid: 17219 + components: + - type: Transform + pos: 34.5,-13.5 + parent: 2 + - uid: 17220 + components: + - type: Transform + pos: 35.5,-14.5 + parent: 2 + - uid: 17225 + components: + - type: Transform + pos: 36.5,-31.5 + parent: 2 + - uid: 17226 + components: + - type: Transform + pos: 33.5,-12.5 + parent: 2 + - uid: 17228 + components: + - type: Transform + pos: 36.5,-32.5 + parent: 2 + - uid: 17229 + components: + - type: Transform + pos: 36.5,-29.5 + parent: 2 + - uid: 17231 + components: + - type: Transform + pos: 34.5,-31.5 + parent: 2 + - uid: 17232 + components: + - type: Transform + pos: 36.5,-23.5 + parent: 2 + - uid: 17233 + components: + - type: Transform + pos: 36.5,-26.5 + parent: 2 + - uid: 17234 + components: + - type: Transform + pos: 36.5,-25.5 + parent: 2 + - uid: 17235 + components: + - type: Transform + pos: 35.5,-21.5 + parent: 2 + - uid: 17236 + components: + - type: Transform + pos: 31.5,-37.5 + parent: 2 + - uid: 17237 + components: + - type: Transform + pos: 35.5,-20.5 + parent: 2 + - uid: 17238 + components: + - type: Transform + pos: 36.5,-36.5 + parent: 2 + - uid: 17888 + components: + - type: Transform + pos: 30.5,-10.5 + parent: 2 + - uid: 17890 + components: + - type: Transform + pos: 30.5,-11.5 + parent: 2 + - uid: 17891 + components: + - type: Transform + pos: 30.5,-12.5 + parent: 2 + - uid: 18134 + components: + - type: Transform + pos: 32.5,-12.5 + parent: 2 + - uid: 18192 + components: + - type: Transform + pos: 31.5,-12.5 + parent: 2 + - uid: 18391 + components: + - type: Transform + pos: 35.5,-36.5 + parent: 2 + - uid: 18392 + components: + - type: Transform + pos: 30.5,-37.5 + parent: 2 + - uid: 18393 + components: + - type: Transform + pos: 30.5,-38.5 + parent: 2 + - uid: 18394 + components: + - type: Transform + pos: 36.5,-22.5 + parent: 2 + - uid: 18395 + components: + - type: Transform + pos: 36.5,-28.5 + parent: 2 + - uid: 18396 + components: + - type: Transform + pos: 36.5,-27.5 + parent: 2 + - uid: 18397 + components: + - type: Transform + pos: 36.5,-24.5 + parent: 2 + - uid: 18399 + components: + - type: Transform + pos: 36.5,-33.5 + parent: 2 + - uid: 18400 + components: + - type: Transform + pos: 36.5,-30.5 + parent: 2 + - uid: 18401 + components: + - type: Transform + pos: 35.5,-31.5 + parent: 2 + - uid: 18402 + components: + - type: Transform + pos: 35.5,-18.5 + parent: 2 + - uid: 18403 + components: + - type: Transform + pos: 34.5,-12.5 + parent: 2 + - uid: 18404 + components: + - type: Transform + pos: 35.5,-15.5 + parent: 2 + - uid: 18405 + components: + - type: Transform + pos: 35.5,-19.5 + parent: 2 + - uid: 18406 + components: + - type: Transform + pos: 35.5,-16.5 + parent: 2 + - uid: 18407 + components: + - type: Transform + pos: 35.5,-17.5 + parent: 2 + - uid: 18408 + components: + - type: Transform + pos: 35.5,-13.5 + parent: 2 + - uid: 18409 + components: + - type: Transform + pos: 35.5,-37.5 + parent: 2 + - uid: 18410 + components: + - type: Transform + pos: 34.5,-37.5 + parent: 2 + - uid: 18411 + components: + - type: Transform + pos: 33.5,-37.5 + parent: 2 + - uid: 18412 + components: + - type: Transform + pos: 31.5,-45.5 + parent: 2 + - uid: 18414 + components: + - type: Transform + pos: 30.5,-29.5 + parent: 2 + - uid: 18415 + components: + - type: Transform + pos: 30.5,-28.5 + parent: 2 + - uid: 18416 + components: + - type: Transform + pos: 30.5,-27.5 + parent: 2 + - uid: 18417 + components: + - type: Transform + pos: 30.5,-26.5 + parent: 2 + - uid: 18418 + components: + - type: Transform + pos: 30.5,-25.5 + parent: 2 + - uid: 18419 + components: + - type: Transform + pos: 30.5,-24.5 + parent: 2 + - uid: 18420 + components: + - type: Transform + pos: 30.5,-23.5 + parent: 2 + - uid: 18421 + components: + - type: Transform + pos: 30.5,-22.5 + parent: 2 + - uid: 18422 + components: + - type: Transform + pos: 30.5,-21.5 + parent: 2 + - uid: 18423 + components: + - type: Transform + pos: 30.5,-20.5 + parent: 2 + - uid: 18424 + components: + - type: Transform + pos: 30.5,-19.5 + parent: 2 + - uid: 18425 + components: + - type: Transform + pos: 30.5,-18.5 + parent: 2 + - uid: 18426 + components: + - type: Transform + pos: 30.5,-17.5 + parent: 2 + - uid: 18427 + components: + - type: Transform + pos: 30.5,-16.5 + parent: 2 + - uid: 18428 + components: + - type: Transform + pos: 30.5,-15.5 + parent: 2 + - uid: 18429 + components: + - type: Transform + pos: 30.5,-14.5 + parent: 2 + - uid: 18778 + components: + - type: Transform + pos: 75.5,52.5 + parent: 2 + - uid: 18779 + components: + - type: Transform + pos: 75.5,51.5 + parent: 2 + - uid: 18780 + components: + - type: Transform + pos: 75.5,50.5 + parent: 2 + - uid: 18781 + components: + - type: Transform + pos: 75.5,49.5 + parent: 2 + - uid: 18782 + components: + - type: Transform + pos: 75.5,48.5 + parent: 2 + - uid: 18783 + components: + - type: Transform + pos: 75.5,47.5 + parent: 2 + - uid: 18784 + components: + - type: Transform + pos: 76.5,47.5 + parent: 2 + - uid: 18788 + components: + - type: Transform + pos: 77.5,47.5 + parent: 2 + - uid: 18789 + components: + - type: Transform + pos: 78.5,47.5 + parent: 2 +- proto: CableHVStack + entities: + - uid: 4771 + components: + - type: Transform + pos: -7.609933,28.761845 + parent: 2 +- proto: CableMV + entities: + - uid: 1812 + components: + - type: Transform + pos: -36.5,70.5 + parent: 2 + - uid: 1819 + components: + - type: Transform + pos: -36.5,69.5 + parent: 2 + - uid: 3236 + components: + - type: Transform + pos: 69.5,32.5 + parent: 2 + - uid: 4772 + components: + - type: Transform + pos: -19.5,41.5 + parent: 2 + - uid: 4773 + components: + - type: Transform + pos: -13.5,36.5 + parent: 2 + - uid: 4774 + components: + - type: Transform + pos: -13.5,36.5 + parent: 2 + - uid: 4775 + components: + - type: Transform + pos: -13.5,36.5 + parent: 2 + - uid: 4776 + components: + - type: Transform + pos: -13.5,39.5 + parent: 2 + - uid: 4777 + components: + - type: Transform + pos: -13.5,40.5 + parent: 2 + - uid: 4778 + components: + - type: Transform + pos: -13.5,41.5 + parent: 2 + - uid: 4779 + components: + - type: Transform + pos: -20.5,41.5 + parent: 2 + - uid: 4780 + components: + - type: Transform + pos: -21.5,41.5 + parent: 2 + - uid: 4781 + components: + - type: Transform + pos: -12.5,68.5 + parent: 2 + - uid: 4782 + components: + - type: Transform + pos: -19.5,36.5 + parent: 2 + - uid: 4783 + components: + - type: Transform + pos: 32.5,57.5 + parent: 2 + - uid: 4784 + components: + - type: Transform + pos: 33.5,57.5 + parent: 2 + - uid: 4785 + components: + - type: Transform + pos: 33.5,56.5 + parent: 2 + - uid: 4786 + components: + - type: Transform + pos: 34.5,56.5 + parent: 2 + - uid: 4787 + components: + - type: Transform + pos: -34.5,24.5 + parent: 2 + - uid: 4788 + components: + - type: Transform + pos: -3.5,66.5 + parent: 2 + - uid: 4789 + components: + - type: Transform + pos: -3.5,65.5 + parent: 2 + - uid: 4790 + components: + - type: Transform + pos: -16.5,36.5 + parent: 2 + - uid: 4791 + components: + - type: Transform + pos: -21.5,35.5 + parent: 2 + - uid: 4792 + components: + - type: Transform + pos: -14.5,36.5 + parent: 2 + - uid: 4793 + components: + - type: Transform + pos: -17.5,36.5 + parent: 2 + - uid: 4794 + components: + - type: Transform + pos: -15.5,36.5 + parent: 2 + - uid: 4795 + components: + - type: Transform + pos: -20.5,36.5 + parent: 2 + - uid: 4796 + components: + - type: Transform + pos: -18.5,36.5 + parent: 2 + - uid: 4797 + components: + - type: Transform + pos: -21.5,36.5 + parent: 2 + - uid: 4798 + components: + - type: Transform + pos: -34.5,25.5 + parent: 2 + - uid: 4799 + components: + - type: Transform + pos: -16.5,43.5 + parent: 2 + - uid: 4800 + components: + - type: Transform + pos: -15.5,43.5 + parent: 2 + - uid: 4801 + components: + - type: Transform + pos: -14.5,43.5 + parent: 2 + - uid: 4802 + components: + - type: Transform + pos: -13.5,43.5 + parent: 2 + - uid: 4803 + components: + - type: Transform + pos: -12.5,43.5 + parent: 2 + - uid: 4804 + components: + - type: Transform + pos: -11.5,43.5 + parent: 2 + - uid: 4805 + components: + - type: Transform + pos: -10.5,43.5 + parent: 2 + - uid: 4806 + components: + - type: Transform + pos: -10.5,44.5 + parent: 2 + - uid: 4807 + components: + - type: Transform + pos: -10.5,45.5 + parent: 2 + - uid: 4808 + components: + - type: Transform + pos: -10.5,46.5 + parent: 2 + - uid: 4809 + components: + - type: Transform + pos: -14.5,42.5 + parent: 2 + - uid: 4810 + components: + - type: Transform + pos: -25.5,41.5 + parent: 2 + - uid: 4811 + components: + - type: Transform + pos: -25.5,42.5 + parent: 2 + - uid: 4812 + components: + - type: Transform + pos: -25.5,43.5 + parent: 2 + - uid: 4813 + components: + - type: Transform + pos: -25.5,44.5 + parent: 2 + - uid: 4814 + components: + - type: Transform + pos: -25.5,45.5 + parent: 2 + - uid: 4815 + components: + - type: Transform + pos: -25.5,46.5 + parent: 2 + - uid: 4816 + components: + - type: Transform + pos: -24.5,46.5 + parent: 2 + - uid: 4817 + components: + - type: Transform + pos: -24.5,47.5 + parent: 2 + - uid: 4818 + components: + - type: Transform + pos: -18.5,42.5 + parent: 2 + - uid: 4819 + components: + - type: Transform + pos: -18.5,43.5 + parent: 2 + - uid: 4820 + components: + - type: Transform + pos: -19.5,43.5 + parent: 2 + - uid: 4821 + components: + - type: Transform + pos: -20.5,43.5 + parent: 2 + - uid: 4822 + components: + - type: Transform + pos: -21.5,43.5 + parent: 2 + - uid: 4823 + components: + - type: Transform + pos: -22.5,43.5 + parent: 2 + - uid: 4824 + components: + - type: Transform + pos: -22.5,44.5 + parent: 2 + - uid: 4825 + components: + - type: Transform + pos: -22.5,45.5 + parent: 2 + - uid: 4826 + components: + - type: Transform + pos: -22.5,46.5 + parent: 2 + - uid: 4827 + components: + - type: Transform + pos: -12.5,36.5 + parent: 2 + - uid: 4828 + components: + - type: Transform + pos: -11.5,36.5 + parent: 2 + - uid: 4829 + components: + - type: Transform + pos: -10.5,36.5 + parent: 2 + - uid: 4830 + components: + - type: Transform + pos: -9.5,36.5 + parent: 2 + - uid: 4831 + components: + - type: Transform + pos: -8.5,36.5 + parent: 2 + - uid: 4832 + components: + - type: Transform + pos: -7.5,36.5 + parent: 2 + - uid: 4833 + components: + - type: Transform + pos: -6.5,36.5 + parent: 2 + - uid: 4834 + components: + - type: Transform + pos: -5.5,36.5 + parent: 2 + - uid: 4835 + components: + - type: Transform + pos: -4.5,36.5 + parent: 2 + - uid: 4836 + components: + - type: Transform + pos: -3.5,36.5 + parent: 2 + - uid: 4837 + components: + - type: Transform + pos: -2.5,36.5 + parent: 2 + - uid: 4838 + components: + - type: Transform + pos: -2.5,37.5 + parent: 2 + - uid: 4839 + components: + - type: Transform + pos: -10.5,21.5 + parent: 2 + - uid: 4840 + components: + - type: Transform + pos: -9.5,21.5 + parent: 2 + - uid: 4841 + components: + - type: Transform + pos: -9.5,22.5 + parent: 2 + - uid: 4842 + components: + - type: Transform + pos: -9.5,23.5 + parent: 2 + - uid: 4843 + components: + - type: Transform + pos: -9.5,24.5 + parent: 2 + - uid: 4844 + components: + - type: Transform + pos: -9.5,25.5 + parent: 2 + - uid: 4845 + components: + - type: Transform + pos: -9.5,26.5 + parent: 2 + - uid: 4846 + components: + - type: Transform + pos: -9.5,27.5 + parent: 2 + - uid: 4847 + components: + - type: Transform + pos: -8.5,27.5 + parent: 2 + - uid: 4848 + components: + - type: Transform + pos: -7.5,27.5 + parent: 2 + - uid: 4849 + components: + - type: Transform + pos: -6.5,27.5 + parent: 2 + - uid: 4850 + components: + - type: Transform + pos: -5.5,27.5 + parent: 2 + - uid: 4851 + components: + - type: Transform + pos: -4.5,27.5 + parent: 2 + - uid: 4852 + components: + - type: Transform + pos: -3.5,27.5 + parent: 2 + - uid: 4853 + components: + - type: Transform + pos: -3.5,28.5 + parent: 2 + - uid: 4854 + components: + - type: Transform + pos: -11.5,20.5 + parent: 2 + - uid: 4855 + components: + - type: Transform + pos: -11.5,21.5 + parent: 2 + - uid: 4856 + components: + - type: Transform + pos: -11.5,19.5 + parent: 2 + - uid: 4857 + components: + - type: Transform + pos: -12.5,19.5 + parent: 2 + - uid: 4858 + components: + - type: Transform + pos: -13.5,19.5 + parent: 2 + - uid: 4859 + components: + - type: Transform + pos: -14.5,19.5 + parent: 2 + - uid: 4860 + components: + - type: Transform + pos: -15.5,19.5 + parent: 2 + - uid: 4861 + components: + - type: Transform + pos: -16.5,19.5 + parent: 2 + - uid: 4862 + components: + - type: Transform + pos: -17.5,19.5 + parent: 2 + - uid: 4863 + components: + - type: Transform + pos: -18.5,19.5 + parent: 2 + - uid: 4864 + components: + - type: Transform + pos: -18.5,18.5 + parent: 2 + - uid: 4865 + components: + - type: Transform + pos: -18.5,18.5 + parent: 2 + - uid: 4866 + components: + - type: Transform + pos: -19.5,18.5 + parent: 2 + - uid: 4867 + components: + - type: Transform + pos: -20.5,18.5 + parent: 2 + - uid: 4868 + components: + - type: Transform + pos: -21.5,18.5 + parent: 2 + - uid: 4869 + components: + - type: Transform + pos: -22.5,18.5 + parent: 2 + - uid: 4870 + components: + - type: Transform + pos: -23.5,18.5 + parent: 2 + - uid: 4871 + components: + - type: Transform + pos: -23.5,16.5 + parent: 2 + - uid: 4872 + components: + - type: Transform + pos: -23.5,16.5 + parent: 2 + - uid: 4873 + components: + - type: Transform + pos: -23.5,17.5 + parent: 2 + - uid: 4874 + components: + - type: Transform + pos: -23.5,15.5 + parent: 2 + - uid: 4875 + components: + - type: Transform + pos: -22.5,19.5 + parent: 2 + - uid: 4876 + components: + - type: Transform + pos: -22.5,20.5 + parent: 2 + - uid: 4877 + components: + - type: Transform + pos: -22.5,21.5 + parent: 2 + - uid: 4878 + components: + - type: Transform + pos: -22.5,22.5 + parent: 2 + - uid: 4879 + components: + - type: Transform + pos: -23.5,24.5 + parent: 2 + - uid: 4880 + components: + - type: Transform + pos: -23.5,23.5 + parent: 2 + - uid: 4881 + components: + - type: Transform + pos: -23.5,22.5 + parent: 2 + - uid: 4882 + components: + - type: Transform + pos: -24.5,22.5 + parent: 2 + - uid: 4883 + components: + - type: Transform + pos: -9.5,45.5 + parent: 2 + - uid: 4884 + components: + - type: Transform + pos: -8.5,45.5 + parent: 2 + - uid: 4885 + components: + - type: Transform + pos: -8.5,46.5 + parent: 2 + - uid: 4886 + components: + - type: Transform + pos: -20.5,9.5 + parent: 2 + - uid: 4887 + components: + - type: Transform + pos: -21.5,9.5 + parent: 2 + - uid: 4888 + components: + - type: Transform + pos: -21.5,8.5 + parent: 2 + - uid: 4889 + components: + - type: Transform + pos: -21.5,7.5 + parent: 2 + - uid: 4890 + components: + - type: Transform + pos: -21.5,6.5 + parent: 2 + - uid: 4891 + components: + - type: Transform + pos: -18.5,4.5 + parent: 2 + - uid: 4892 + components: + - type: Transform + pos: -17.5,4.5 + parent: 2 + - uid: 4893 + components: + - type: Transform + pos: -17.5,5.5 + parent: 2 + - uid: 4894 + components: + - type: Transform + pos: -17.5,6.5 + parent: 2 + - uid: 4895 + components: + - type: Transform + pos: -17.5,7.5 + parent: 2 + - uid: 4896 + components: + - type: Transform + pos: -17.5,8.5 + parent: 2 + - uid: 4897 + components: + - type: Transform + pos: -16.5,8.5 + parent: 2 + - uid: 4898 + components: + - type: Transform + pos: -15.5,8.5 + parent: 2 + - uid: 4899 + components: + - type: Transform + pos: -14.5,8.5 + parent: 2 + - uid: 4900 + components: + - type: Transform + pos: -13.5,8.5 + parent: 2 + - uid: 4901 + components: + - type: Transform + pos: -13.5,7.5 + parent: 2 + - uid: 4902 + components: + - type: Transform + pos: -13.5,7.5 + parent: 2 + - uid: 4903 + components: + - type: Transform + pos: -12.5,7.5 + parent: 2 + - uid: 4904 + components: + - type: Transform + pos: -11.5,7.5 + parent: 2 + - uid: 4905 + components: + - type: Transform + pos: -11.5,8.5 + parent: 2 + - uid: 4906 + components: + - type: Transform + pos: -11.5,9.5 + parent: 2 + - uid: 4907 + components: + - type: Transform + pos: -11.5,10.5 + parent: 2 + - uid: 4908 + components: + - type: Transform + pos: -10.5,10.5 + parent: 2 + - uid: 4909 + components: + - type: Transform + pos: -9.5,10.5 + parent: 2 + - uid: 4910 + components: + - type: Transform + pos: -8.5,10.5 + parent: 2 + - uid: 4911 + components: + - type: Transform + pos: -7.5,10.5 + parent: 2 + - uid: 4912 + components: + - type: Transform + pos: -6.5,10.5 + parent: 2 + - uid: 4913 + components: + - type: Transform + pos: -5.5,10.5 + parent: 2 + - uid: 4914 + components: + - type: Transform + pos: -5.5,10.5 + parent: 2 + - uid: 4915 + components: + - type: Transform + pos: -5.5,11.5 + parent: 2 + - uid: 4916 + components: + - type: Transform + pos: -5.5,12.5 + parent: 2 + - uid: 4917 + components: + - type: Transform + pos: -5.5,13.5 + parent: 2 + - uid: 4918 + components: + - type: Transform + pos: -5.5,14.5 + parent: 2 + - uid: 4919 + components: + - type: Transform + pos: -5.5,15.5 + parent: 2 + - uid: 4920 + components: + - type: Transform + pos: -5.5,16.5 + parent: 2 + - uid: 4921 + components: + - type: Transform + pos: -4.5,10.5 + parent: 2 + - uid: 4922 + components: + - type: Transform + pos: -3.5,10.5 + parent: 2 + - uid: 4923 + components: + - type: Transform + pos: -2.5,10.5 + parent: 2 + - uid: 4924 + components: + - type: Transform + pos: -1.5,10.5 + parent: 2 + - uid: 4925 + components: + - type: Transform + pos: -0.5,10.5 + parent: 2 + - uid: 4926 + components: + - type: Transform + pos: 0.5,10.5 + parent: 2 + - uid: 4927 + components: + - type: Transform + pos: 1.5,10.5 + parent: 2 + - uid: 4928 + components: + - type: Transform + pos: 2.5,10.5 + parent: 2 + - uid: 4929 + components: + - type: Transform + pos: 3.5,10.5 + parent: 2 + - uid: 4930 + components: + - type: Transform + pos: 4.5,10.5 + parent: 2 + - uid: 4931 + components: + - type: Transform + pos: 4.5,11.5 + parent: 2 + - uid: 4932 + components: + - type: Transform + pos: 4.5,12.5 + parent: 2 + - uid: 4933 + components: + - type: Transform + pos: 4.5,12.5 + parent: 2 + - uid: 4934 + components: + - type: Transform + pos: 5.5,12.5 + parent: 2 + - uid: 4935 + components: + - type: Transform + pos: 6.5,12.5 + parent: 2 + - uid: 4936 + components: + - type: Transform + pos: 7.5,12.5 + parent: 2 + - uid: 4937 + components: + - type: Transform + pos: 8.5,12.5 + parent: 2 + - uid: 4938 + components: + - type: Transform + pos: 9.5,12.5 + parent: 2 + - uid: 4939 + components: + - type: Transform + pos: 10.5,12.5 + parent: 2 + - uid: 4940 + components: + - type: Transform + pos: 11.5,12.5 + parent: 2 + - uid: 4941 + components: + - type: Transform + pos: 11.5,13.5 + parent: 2 + - uid: 4942 + components: + - type: Transform + pos: 12.5,13.5 + parent: 2 + - uid: 4943 + components: + - type: Transform + pos: 13.5,13.5 + parent: 2 + - uid: 4944 + components: + - type: Transform + pos: 4.5,13.5 + parent: 2 + - uid: 4945 + components: + - type: Transform + pos: 4.5,14.5 + parent: 2 + - uid: 4946 + components: + - type: Transform + pos: 4.5,15.5 + parent: 2 + - uid: 4947 + components: + - type: Transform + pos: 4.5,16.5 + parent: 2 + - uid: 4948 + components: + - type: Transform + pos: 3.5,16.5 + parent: 2 + - uid: 4949 + components: + - type: Transform + pos: 2.5,16.5 + parent: 2 + - uid: 4950 + components: + - type: Transform + pos: 1.5,16.5 + parent: 2 + - uid: 4951 + components: + - type: Transform + pos: 0.5,16.5 + parent: 2 + - uid: 4952 + components: + - type: Transform + pos: -0.5,16.5 + parent: 2 + - uid: 4953 + components: + - type: Transform + pos: -0.5,17.5 + parent: 2 + - uid: 4954 + components: + - type: Transform + pos: -0.5,18.5 + parent: 2 + - uid: 4955 + components: + - type: Transform + pos: 5.5,10.5 + parent: 2 + - uid: 4956 + components: + - type: Transform + pos: 6.5,10.5 + parent: 2 + - uid: 4957 + components: + - type: Transform + pos: 7.5,10.5 + parent: 2 + - uid: 4958 + components: + - type: Transform + pos: 7.5,9.5 + parent: 2 + - uid: 4959 + components: + - type: Transform + pos: 7.5,8.5 + parent: 2 + - uid: 4960 + components: + - type: Transform + pos: 7.5,7.5 + parent: 2 + - uid: 4961 + components: + - type: Transform + pos: 7.5,6.5 + parent: 2 + - uid: 4962 + components: + - type: Transform + pos: 2.5,17.5 + parent: 2 + - uid: 4963 + components: + - type: Transform + pos: 2.5,15.5 + parent: 2 + - uid: 4964 + components: + - type: Transform + pos: 2.5,14.5 + parent: 2 + - uid: 4965 + components: + - type: Transform + pos: 2.5,13.5 + parent: 2 + - uid: 4966 + components: + - type: Transform + pos: 1.5,13.5 + parent: 2 + - uid: 4967 + components: + - type: Transform + pos: 0.5,13.5 + parent: 2 + - uid: 4968 + components: + - type: Transform + pos: -0.5,13.5 + parent: 2 + - uid: 4969 + components: + - type: Transform + pos: -2.5,68.5 + parent: 2 + - uid: 4970 + components: + - type: Transform + pos: -3.5,68.5 + parent: 2 + - uid: 4971 + components: + - type: Transform + pos: -3.5,69.5 + parent: 2 + - uid: 4972 + components: + - type: Transform + pos: -3.5,67.5 + parent: 2 + - uid: 4973 + components: + - type: Transform + pos: -4.5,67.5 + parent: 2 + - uid: 4974 + components: + - type: Transform + pos: -5.5,67.5 + parent: 2 + - uid: 4975 + components: + - type: Transform + pos: -6.5,67.5 + parent: 2 + - uid: 4976 + components: + - type: Transform + pos: -7.5,67.5 + parent: 2 + - uid: 4977 + components: + - type: Transform + pos: -8.5,67.5 + parent: 2 + - uid: 4978 + components: + - type: Transform + pos: -9.5,67.5 + parent: 2 + - uid: 4979 + components: + - type: Transform + pos: -10.5,67.5 + parent: 2 + - uid: 4980 + components: + - type: Transform + pos: -11.5,67.5 + parent: 2 + - uid: 4981 + components: + - type: Transform + pos: -11.5,66.5 + parent: 2 + - uid: 4982 + components: + - type: Transform + pos: -11.5,65.5 + parent: 2 + - uid: 4983 + components: + - type: Transform + pos: -11.5,64.5 + parent: 2 + - uid: 4984 + components: + - type: Transform + pos: -11.5,63.5 + parent: 2 + - uid: 4985 + components: + - type: Transform + pos: -11.5,62.5 + parent: 2 + - uid: 4986 + components: + - type: Transform + pos: -11.5,61.5 + parent: 2 + - uid: 4987 + components: + - type: Transform + pos: -11.5,60.5 + parent: 2 + - uid: 4988 + components: + - type: Transform + pos: -11.5,59.5 + parent: 2 + - uid: 4989 + components: + - type: Transform + pos: -11.5,58.5 + parent: 2 + - uid: 4990 + components: + - type: Transform + pos: -12.5,64.5 + parent: 2 + - uid: 4991 + components: + - type: Transform + pos: -13.5,64.5 + parent: 2 + - uid: 4992 + components: + - type: Transform + pos: -14.5,64.5 + parent: 2 + - uid: 4993 + components: + - type: Transform + pos: -14.5,65.5 + parent: 2 + - uid: 4994 + components: + - type: Transform + pos: -15.5,66.5 + parent: 2 + - uid: 4995 + components: + - type: Transform + pos: -14.5,66.5 + parent: 2 + - uid: 4996 + components: + - type: Transform + pos: -16.5,66.5 + parent: 2 + - uid: 4997 + components: + - type: Transform + pos: -17.5,66.5 + parent: 2 + - uid: 4998 + components: + - type: Transform + pos: -17.5,67.5 + parent: 2 + - uid: 4999 + components: + - type: Transform + pos: -17.5,68.5 + parent: 2 + - uid: 5000 + components: + - type: Transform + pos: -17.5,69.5 + parent: 2 + - uid: 5001 + components: + - type: Transform + pos: -17.5,70.5 + parent: 2 + - uid: 5002 + components: + - type: Transform + pos: -17.5,71.5 + parent: 2 + - uid: 5003 + components: + - type: Transform + pos: -12.5,58.5 + parent: 2 + - uid: 5004 + components: + - type: Transform + pos: -13.5,58.5 + parent: 2 + - uid: 5005 + components: + - type: Transform + pos: -14.5,58.5 + parent: 2 + - uid: 5006 + components: + - type: Transform + pos: -15.5,58.5 + parent: 2 + - uid: 5007 + components: + - type: Transform + pos: -16.5,58.5 + parent: 2 + - uid: 5008 + components: + - type: Transform + pos: -17.5,58.5 + parent: 2 + - uid: 5009 + components: + - type: Transform + pos: -18.5,58.5 + parent: 2 + - uid: 5010 + components: + - type: Transform + pos: -19.5,58.5 + parent: 2 + - uid: 5011 + components: + - type: Transform + pos: -17.5,57.5 + parent: 2 + - uid: 5012 + components: + - type: Transform + pos: -17.5,56.5 + parent: 2 + - uid: 5013 + components: + - type: Transform + pos: -20.5,58.5 + parent: 2 + - uid: 5014 + components: + - type: Transform + pos: -21.5,58.5 + parent: 2 + - uid: 5015 + components: + - type: Transform + pos: -22.5,58.5 + parent: 2 + - uid: 5016 + components: + - type: Transform + pos: -23.5,58.5 + parent: 2 + - uid: 5017 + components: + - type: Transform + pos: -24.5,58.5 + parent: 2 + - uid: 5018 + components: + - type: Transform + pos: -25.5,58.5 + parent: 2 + - uid: 5019 + components: + - type: Transform + pos: -23.5,59.5 + parent: 2 + - uid: 5020 + components: + - type: Transform + pos: -23.5,60.5 + parent: 2 + - uid: 5021 + components: + - type: Transform + pos: -23.5,61.5 + parent: 2 + - uid: 5022 + components: + - type: Transform + pos: -23.5,62.5 + parent: 2 + - uid: 5023 + components: + - type: Transform + pos: -23.5,63.5 + parent: 2 + - uid: 5024 + components: + - type: Transform + pos: -23.5,64.5 + parent: 2 + - uid: 5025 + components: + - type: Transform + pos: -23.5,65.5 + parent: 2 + - uid: 5026 + components: + - type: Transform + pos: -23.5,66.5 + parent: 2 + - uid: 5027 + components: + - type: Transform + pos: -23.5,67.5 + parent: 2 + - uid: 5028 + components: + - type: Transform + pos: -23.5,68.5 + parent: 2 + - uid: 5029 + components: + - type: Transform + pos: -24.5,68.5 + parent: 2 + - uid: 5030 + components: + - type: Transform + pos: -25.5,68.5 + parent: 2 + - uid: 5031 + components: + - type: Transform + pos: -25.5,69.5 + parent: 2 + - uid: 5032 + components: + - type: Transform + pos: -25.5,70.5 + parent: 2 + - uid: 5033 + components: + - type: Transform + pos: -25.5,71.5 + parent: 2 + - uid: 5034 + components: + - type: Transform + pos: -25.5,72.5 + parent: 2 + - uid: 5035 + components: + - type: Transform + pos: -26.5,58.5 + parent: 2 + - uid: 5036 + components: + - type: Transform + pos: -27.5,58.5 + parent: 2 + - uid: 5037 + components: + - type: Transform + pos: -27.5,57.5 + parent: 2 + - uid: 5038 + components: + - type: Transform + pos: -27.5,56.5 + parent: 2 + - uid: 5039 + components: + - type: Transform + pos: -27.5,55.5 + parent: 2 + - uid: 5040 + components: + - type: Transform + pos: -27.5,54.5 + parent: 2 + - uid: 5041 + components: + - type: Transform + pos: -27.5,53.5 + parent: 2 + - uid: 5042 + components: + - type: Transform + pos: -27.5,52.5 + parent: 2 + - uid: 5043 + components: + - type: Transform + pos: -28.5,52.5 + parent: 2 + - uid: 5044 + components: + - type: Transform + pos: -29.5,52.5 + parent: 2 + - uid: 5045 + components: + - type: Transform + pos: -30.5,52.5 + parent: 2 + - uid: 5046 + components: + - type: Transform + pos: -31.5,52.5 + parent: 2 + - uid: 5047 + components: + - type: Transform + pos: -31.5,53.5 + parent: 2 + - uid: 5048 + components: + - type: Transform + pos: -31.5,54.5 + parent: 2 + - uid: 5049 + components: + - type: Transform + pos: -28.5,58.5 + parent: 2 + - uid: 5050 + components: + - type: Transform + pos: -29.5,58.5 + parent: 2 + - uid: 5051 + components: + - type: Transform + pos: -30.5,58.5 + parent: 2 + - uid: 5052 + components: + - type: Transform + pos: -30.5,59.5 + parent: 2 + - uid: 5053 + components: + - type: Transform + pos: -30.5,59.5 + parent: 2 + - uid: 5054 + components: + - type: Transform + pos: -30.5,60.5 + parent: 2 + - uid: 5055 + components: + - type: Transform + pos: -30.5,61.5 + parent: 2 + - uid: 5056 + components: + - type: Transform + pos: -30.5,62.5 + parent: 2 + - uid: 5057 + components: + - type: Transform + pos: -30.5,63.5 + parent: 2 + - uid: 5058 + components: + - type: Transform + pos: -30.5,64.5 + parent: 2 + - uid: 5059 + components: + - type: Transform + pos: -30.5,65.5 + parent: 2 + - uid: 5060 + components: + - type: Transform + pos: -30.5,66.5 + parent: 2 + - uid: 5061 + components: + - type: Transform + pos: -30.5,67.5 + parent: 2 + - uid: 5062 + components: + - type: Transform + pos: -30.5,68.5 + parent: 2 + - uid: 5063 + components: + - type: Transform + pos: -34.5,68.5 + parent: 2 + - uid: 5067 + components: + - type: Transform + pos: -22.5,75.5 + parent: 2 + - uid: 5070 + components: + - type: Transform + pos: -32.5,68.5 + parent: 2 + - uid: 5071 + components: + - type: Transform + pos: -33.5,68.5 + parent: 2 + - uid: 5072 + components: + - type: Transform + pos: -35.5,68.5 + parent: 2 + - uid: 5073 + components: + - type: Transform + pos: -36.5,68.5 + parent: 2 + - uid: 5074 + components: + - type: Transform + pos: -36.5,67.5 + parent: 2 + - uid: 5075 + components: + - type: Transform + pos: -24.5,72.5 + parent: 2 + - uid: 5076 + components: + - type: Transform + pos: -23.5,72.5 + parent: 2 + - uid: 5077 + components: + - type: Transform + pos: -22.5,72.5 + parent: 2 + - uid: 5078 + components: + - type: Transform + pos: -11.5,68.5 + parent: 2 + - uid: 5079 + components: + - type: Transform + pos: -11.5,69.5 + parent: 2 + - uid: 5081 + components: + - type: Transform + pos: -11.5,71.5 + parent: 2 + - uid: 5083 + components: + - type: Transform + pos: -10.5,71.5 + parent: 2 + - uid: 5084 + components: + - type: Transform + pos: -9.5,71.5 + parent: 2 + - uid: 5085 + components: + - type: Transform + pos: -8.5,71.5 + parent: 2 + - uid: 5086 + components: + - type: Transform + pos: -7.5,71.5 + parent: 2 + - uid: 5087 + components: + - type: Transform + pos: -6.5,71.5 + parent: 2 + - uid: 5088 + components: + - type: Transform + pos: -5.5,71.5 + parent: 2 + - uid: 5089 + components: + - type: Transform + pos: -5.5,70.5 + parent: 2 + - uid: 5090 + components: + - type: Transform + pos: -5.5,69.5 + parent: 2 + - uid: 5091 + components: + - type: Transform + pos: -14.5,63.5 + parent: 2 + - uid: 5092 + components: + - type: Transform + pos: -13.5,63.5 + parent: 2 + - uid: 5093 + components: + - type: Transform + pos: -13.5,62.5 + parent: 2 + - uid: 5094 + components: + - type: Transform + pos: -13.5,61.5 + parent: 2 + - uid: 5095 + components: + - type: Transform + pos: -13.5,60.5 + parent: 2 + - uid: 5096 + components: + - type: Transform + pos: -13.5,59.5 + parent: 2 + - uid: 5097 + components: + - type: Transform + pos: -14.5,59.5 + parent: 2 + - uid: 5098 + components: + - type: Transform + pos: -16.5,59.5 + parent: 2 + - uid: 5099 + components: + - type: Transform + pos: -18.5,59.5 + parent: 2 + - uid: 5100 + components: + - type: Transform + pos: -17.5,65.5 + parent: 2 + - uid: 5101 + components: + - type: Transform + pos: -18.5,65.5 + parent: 2 + - uid: 5102 + components: + - type: Transform + pos: -19.5,65.5 + parent: 2 + - uid: 5103 + components: + - type: Transform + pos: -16.5,56.5 + parent: 2 + - uid: 5104 + components: + - type: Transform + pos: -16.5,55.5 + parent: 2 + - uid: 5105 + components: + - type: Transform + pos: -16.5,54.5 + parent: 2 + - uid: 5106 + components: + - type: Transform + pos: -20.5,57.5 + parent: 2 + - uid: 5107 + components: + - type: Transform + pos: -20.5,56.5 + parent: 2 + - uid: 5108 + components: + - type: Transform + pos: -17.5,55.5 + parent: 2 + - uid: 5109 + components: + - type: Transform + pos: -17.5,54.5 + parent: 2 + - uid: 5110 + components: + - type: Transform + pos: -17.5,53.5 + parent: 2 + - uid: 5111 + components: + - type: Transform + pos: -17.5,52.5 + parent: 2 + - uid: 5112 + components: + - type: Transform + pos: -17.5,51.5 + parent: 2 + - uid: 5113 + components: + - type: Transform + pos: -17.5,50.5 + parent: 2 + - uid: 5114 + components: + - type: Transform + pos: -18.5,50.5 + parent: 2 + - uid: 5115 + components: + - type: Transform + pos: -19.5,50.5 + parent: 2 + - uid: 5116 + components: + - type: Transform + pos: -20.5,50.5 + parent: 2 + - uid: 5117 + components: + - type: Transform + pos: -21.5,50.5 + parent: 2 + - uid: 5118 + components: + - type: Transform + pos: -22.5,50.5 + parent: 2 + - uid: 5119 + components: + - type: Transform + pos: -23.5,50.5 + parent: 2 + - uid: 5120 + components: + - type: Transform + pos: -24.5,50.5 + parent: 2 + - uid: 5121 + components: + - type: Transform + pos: -32.5,52.5 + parent: 2 + - uid: 5122 + components: + - type: Transform + pos: -33.5,52.5 + parent: 2 + - uid: 5123 + components: + - type: Transform + pos: -31.5,58.5 + parent: 2 + - uid: 5124 + components: + - type: Transform + pos: -32.5,58.5 + parent: 2 + - uid: 5125 + components: + - type: Transform + pos: -33.5,58.5 + parent: 2 + - uid: 5126 + components: + - type: Transform + pos: -34.5,58.5 + parent: 2 + - uid: 5127 + components: + - type: Transform + pos: -35.5,58.5 + parent: 2 + - uid: 5128 + components: + - type: Transform + pos: -35.5,57.5 + parent: 2 + - uid: 5129 + components: + - type: Transform + pos: -35.5,56.5 + parent: 2 + - uid: 5130 + components: + - type: Transform + pos: -35.5,55.5 + parent: 2 + - uid: 5131 + components: + - type: Transform + pos: 30.5,-0.5 + parent: 2 + - uid: 5132 + components: + - type: Transform + pos: 29.5,1.5 + parent: 2 + - uid: 5133 + components: + - type: Transform + pos: 29.5,2.5 + parent: 2 + - uid: 5134 + components: + - type: Transform + pos: 29.5,0.5 + parent: 2 + - uid: 5135 + components: + - type: Transform + pos: 29.5,-0.5 + parent: 2 + - uid: 5136 + components: + - type: Transform + pos: 29.5,-1.5 + parent: 2 + - uid: 5137 + components: + - type: Transform + pos: 30.5,-1.5 + parent: 2 + - uid: 5138 + components: + - type: Transform + pos: 41.5,2.5 + parent: 2 + - uid: 5139 + components: + - type: Transform + pos: 42.5,2.5 + parent: 2 + - uid: 5140 + components: + - type: Transform + pos: 42.5,3.5 + parent: 2 + - uid: 5141 + components: + - type: Transform + pos: 42.5,4.5 + parent: 2 + - uid: 5142 + components: + - type: Transform + pos: 41.5,4.5 + parent: 2 + - uid: 5143 + components: + - type: Transform + pos: 40.5,4.5 + parent: 2 + - uid: 5144 + components: + - type: Transform + pos: 39.5,4.5 + parent: 2 + - uid: 5145 + components: + - type: Transform + pos: 38.5,4.5 + parent: 2 + - uid: 5146 + components: + - type: Transform + pos: 37.5,4.5 + parent: 2 + - uid: 5147 + components: + - type: Transform + pos: 36.5,4.5 + parent: 2 + - uid: 5148 + components: + - type: Transform + pos: 35.5,4.5 + parent: 2 + - uid: 5149 + components: + - type: Transform + pos: 35.5,5.5 + parent: 2 + - uid: 5150 + components: + - type: Transform + pos: 35.5,6.5 + parent: 2 + - uid: 5151 + components: + - type: Transform + pos: 35.5,7.5 + parent: 2 + - uid: 5152 + components: + - type: Transform + pos: 35.5,8.5 + parent: 2 + - uid: 5153 + components: + - type: Transform + pos: 34.5,8.5 + parent: 2 + - uid: 5154 + components: + - type: Transform + pos: 39.5,9.5 + parent: 2 + - uid: 5155 + components: + - type: Transform + pos: 39.5,8.5 + parent: 2 + - uid: 5156 + components: + - type: Transform + pos: 38.5,8.5 + parent: 2 + - uid: 5157 + components: + - type: Transform + pos: 37.5,8.5 + parent: 2 + - uid: 5158 + components: + - type: Transform + pos: 36.5,8.5 + parent: 2 + - uid: 5159 + components: + - type: Transform + pos: 39.5,10.5 + parent: 2 + - uid: 5160 + components: + - type: Transform + pos: 39.5,11.5 + parent: 2 + - uid: 5161 + components: + - type: Transform + pos: 39.5,12.5 + parent: 2 + - uid: 5162 + components: + - type: Transform + pos: 39.5,13.5 + parent: 2 + - uid: 5163 + components: + - type: Transform + pos: 39.5,14.5 + parent: 2 + - uid: 5164 + components: + - type: Transform + pos: 39.5,15.5 + parent: 2 + - uid: 5165 + components: + - type: Transform + pos: 38.5,15.5 + parent: 2 + - uid: 5166 + components: + - type: Transform + pos: 37.5,15.5 + parent: 2 + - uid: 5167 + components: + - type: Transform + pos: 43.5,4.5 + parent: 2 + - uid: 5168 + components: + - type: Transform + pos: 43.5,5.5 + parent: 2 + - uid: 5169 + components: + - type: Transform + pos: 43.5,6.5 + parent: 2 + - uid: 5170 + components: + - type: Transform + pos: 43.5,7.5 + parent: 2 + - uid: 5171 + components: + - type: Transform + pos: 43.5,8.5 + parent: 2 + - uid: 5172 + components: + - type: Transform + pos: 43.5,9.5 + parent: 2 + - uid: 5173 + components: + - type: Transform + pos: 43.5,10.5 + parent: 2 + - uid: 5174 + components: + - type: Transform + pos: 44.5,10.5 + parent: 2 + - uid: 5175 + components: + - type: Transform + pos: 44.5,11.5 + parent: 2 + - uid: 5176 + components: + - type: Transform + pos: 40.5,15.5 + parent: 2 + - uid: 5177 + components: + - type: Transform + pos: 41.5,15.5 + parent: 2 + - uid: 5178 + components: + - type: Transform + pos: 41.5,16.5 + parent: 2 + - uid: 5179 + components: + - type: Transform + pos: 41.5,17.5 + parent: 2 + - uid: 5180 + components: + - type: Transform + pos: 42.5,17.5 + parent: 2 + - uid: 5181 + components: + - type: Transform + pos: 43.5,17.5 + parent: 2 + - uid: 5182 + components: + - type: Transform + pos: 43.5,18.5 + parent: 2 + - uid: 5183 + components: + - type: Transform + pos: 41.5,18.5 + parent: 2 + - uid: 5184 + components: + - type: Transform + pos: 41.5,19.5 + parent: 2 + - uid: 5185 + components: + - type: Transform + pos: 41.5,20.5 + parent: 2 + - uid: 5186 + components: + - type: Transform + pos: 42.5,20.5 + parent: 2 + - uid: 5187 + components: + - type: Transform + pos: 42.5,21.5 + parent: 2 + - uid: 5188 + components: + - type: Transform + pos: 42.5,22.5 + parent: 2 + - uid: 5189 + components: + - type: Transform + pos: 45.5,10.5 + parent: 2 + - uid: 5190 + components: + - type: Transform + pos: 46.5,10.5 + parent: 2 + - uid: 5191 + components: + - type: Transform + pos: 47.5,10.5 + parent: 2 + - uid: 5192 + components: + - type: Transform + pos: 48.5,10.5 + parent: 2 + - uid: 5193 + components: + - type: Transform + pos: 49.5,10.5 + parent: 2 + - uid: 5194 + components: + - type: Transform + pos: 49.5,9.5 + parent: 2 + - uid: 5195 + components: + - type: Transform + pos: 49.5,8.5 + parent: 2 + - uid: 5196 + components: + - type: Transform + pos: 49.5,7.5 + parent: 2 + - uid: 5197 + components: + - type: Transform + pos: 49.5,6.5 + parent: 2 + - uid: 5198 + components: + - type: Transform + pos: 50.5,6.5 + parent: 2 + - uid: 5199 + components: + - type: Transform + pos: 51.5,6.5 + parent: 2 + - uid: 5200 + components: + - type: Transform + pos: 51.5,5.5 + parent: 2 + - uid: 5201 + components: + - type: Transform + pos: 51.5,4.5 + parent: 2 + - uid: 5202 + components: + - type: Transform + pos: 52.5,4.5 + parent: 2 + - uid: 5203 + components: + - type: Transform + pos: 53.5,4.5 + parent: 2 + - uid: 5204 + components: + - type: Transform + pos: 54.5,4.5 + parent: 2 + - uid: 5205 + components: + - type: Transform + pos: 54.5,5.5 + parent: 2 + - uid: 5207 + components: + - type: Transform + pos: -32.5,26.5 + parent: 2 + - uid: 5208 + components: + - type: Transform + pos: -30.5,26.5 + parent: 2 + - uid: 5209 + components: + - type: Transform + pos: -29.5,26.5 + parent: 2 + - uid: 5210 + components: + - type: Transform + pos: -31.5,26.5 + parent: 2 + - uid: 5211 + components: + - type: Transform + pos: -33.5,26.5 + parent: 2 + - uid: 5212 + components: + - type: Transform + pos: -34.5,26.5 + parent: 2 + - uid: 5213 + components: + - type: Transform + pos: -28.5,26.5 + parent: 2 + - uid: 5214 + components: + - type: Transform + pos: -26.5,26.5 + parent: 2 + - uid: 5215 + components: + - type: Transform + pos: -25.5,26.5 + parent: 2 + - uid: 5216 + components: + - type: Transform + pos: -25.5,25.5 + parent: 2 + - uid: 5217 + components: + - type: Transform + pos: -13.5,38.5 + parent: 2 + - uid: 5218 + components: + - type: Transform + pos: -12.5,38.5 + parent: 2 + - uid: 5219 + components: + - type: Transform + pos: -21.5,33.5 + parent: 2 + - uid: 5220 + components: + - type: Transform + pos: -27.5,26.5 + parent: 2 + - uid: 5221 + components: + - type: Transform + pos: -25.5,24.5 + parent: 2 + - uid: 5222 + components: + - type: Transform + pos: -20.5,32.5 + parent: 2 + - uid: 5223 + components: + - type: Transform + pos: -21.5,34.5 + parent: 2 + - uid: 5224 + components: + - type: Transform + pos: -19.5,32.5 + parent: 2 + - uid: 5225 + components: + - type: Transform + pos: -17.5,32.5 + parent: 2 + - uid: 5226 + components: + - type: Transform + pos: -24.5,24.5 + parent: 2 + - uid: 5227 + components: + - type: Transform + pos: -18.5,32.5 + parent: 2 + - uid: 5228 + components: + - type: Transform + pos: -21.5,32.5 + parent: 2 + - uid: 5229 + components: + - type: Transform + pos: -14.5,41.5 + parent: 2 + - uid: 5230 + components: + - type: Transform + pos: 49.5,11.5 + parent: 2 + - uid: 5231 + components: + - type: Transform + pos: 49.5,12.5 + parent: 2 + - uid: 5232 + components: + - type: Transform + pos: 49.5,13.5 + parent: 2 + - uid: 5233 + components: + - type: Transform + pos: 50.5,13.5 + parent: 2 + - uid: 5234 + components: + - type: Transform + pos: 51.5,13.5 + parent: 2 + - uid: 5235 + components: + - type: Transform + pos: 52.5,13.5 + parent: 2 + - uid: 5236 + components: + - type: Transform + pos: 53.5,13.5 + parent: 2 + - uid: 5237 + components: + - type: Transform + pos: 54.5,13.5 + parent: 2 + - uid: 5238 + components: + - type: Transform + pos: 55.5,13.5 + parent: 2 + - uid: 5239 + components: + - type: Transform + pos: 55.5,14.5 + parent: 2 + - uid: 5240 + components: + - type: Transform + pos: 55.5,15.5 + parent: 2 + - uid: 5241 + components: + - type: Transform + pos: 55.5,16.5 + parent: 2 + - uid: 5242 + components: + - type: Transform + pos: 55.5,17.5 + parent: 2 + - uid: 5243 + components: + - type: Transform + pos: 55.5,18.5 + parent: 2 + - uid: 5244 + components: + - type: Transform + pos: 54.5,18.5 + parent: 2 + - uid: 5245 + components: + - type: Transform + pos: 18.5,12.5 + parent: 2 + - uid: 5246 + components: + - type: Transform + pos: 18.5,11.5 + parent: 2 + - uid: 5247 + components: + - type: Transform + pos: 18.5,10.5 + parent: 2 + - uid: 5248 + components: + - type: Transform + pos: 18.5,9.5 + parent: 2 + - uid: 5249 + components: + - type: Transform + pos: 18.5,8.5 + parent: 2 + - uid: 5250 + components: + - type: Transform + pos: 18.5,7.5 + parent: 2 + - uid: 5251 + components: + - type: Transform + pos: 18.5,6.5 + parent: 2 + - uid: 5252 + components: + - type: Transform + pos: 19.5,6.5 + parent: 2 + - uid: 5253 + components: + - type: Transform + pos: 20.5,6.5 + parent: 2 + - uid: 5254 + components: + - type: Transform + pos: 21.5,6.5 + parent: 2 + - uid: 5255 + components: + - type: Transform + pos: 22.5,6.5 + parent: 2 + - uid: 5256 + components: + - type: Transform + pos: 23.5,6.5 + parent: 2 + - uid: 5257 + components: + - type: Transform + pos: 24.5,6.5 + parent: 2 + - uid: 5258 + components: + - type: Transform + pos: 25.5,6.5 + parent: 2 + - uid: 5259 + components: + - type: Transform + pos: 25.5,7.5 + parent: 2 + - uid: 5260 + components: + - type: Transform + pos: 25.5,8.5 + parent: 2 + - uid: 5261 + components: + - type: Transform + pos: 25.5,9.5 + parent: 2 + - uid: 5262 + components: + - type: Transform + pos: 25.5,10.5 + parent: 2 + - uid: 5263 + components: + - type: Transform + pos: 25.5,11.5 + parent: 2 + - uid: 5264 + components: + - type: Transform + pos: 25.5,12.5 + parent: 2 + - uid: 5265 + components: + - type: Transform + pos: 25.5,13.5 + parent: 2 + - uid: 5266 + components: + - type: Transform + pos: 25.5,14.5 + parent: 2 + - uid: 5267 + components: + - type: Transform + pos: 25.5,15.5 + parent: 2 + - uid: 5268 + components: + - type: Transform + pos: 25.5,16.5 + parent: 2 + - uid: 5269 + components: + - type: Transform + pos: 26.5,16.5 + parent: 2 + - uid: 5270 + components: + - type: Transform + pos: 24.5,18.5 + parent: 2 + - uid: 5271 + components: + - type: Transform + pos: 26.5,18.5 + parent: 2 + - uid: 5272 + components: + - type: Transform + pos: 26.5,17.5 + parent: 2 + - uid: 5273 + components: + - type: Transform + pos: -11.5,57.5 + parent: 2 + - uid: 5274 + components: + - type: Transform + pos: -11.5,56.5 + parent: 2 + - uid: 5275 + components: + - type: Transform + pos: -10.5,56.5 + parent: 2 + - uid: 5276 + components: + - type: Transform + pos: -9.5,56.5 + parent: 2 + - uid: 5277 + components: + - type: Transform + pos: -8.5,56.5 + parent: 2 + - uid: 5278 + components: + - type: Transform + pos: -8.5,57.5 + parent: 2 + - uid: 5279 + components: + - type: Transform + pos: -7.5,56.5 + parent: 2 + - uid: 5280 + components: + - type: Transform + pos: -6.5,56.5 + parent: 2 + - uid: 5281 + components: + - type: Transform + pos: -5.5,56.5 + parent: 2 + - uid: 5282 + components: + - type: Transform + pos: -4.5,56.5 + parent: 2 + - uid: 5283 + components: + - type: Transform + pos: -3.5,56.5 + parent: 2 + - uid: 5284 + components: + - type: Transform + pos: -2.5,56.5 + parent: 2 + - uid: 5285 + components: + - type: Transform + pos: -1.5,56.5 + parent: 2 + - uid: 5286 + components: + - type: Transform + pos: -0.5,56.5 + parent: 2 + - uid: 5287 + components: + - type: Transform + pos: -0.5,57.5 + parent: 2 + - uid: 5288 + components: + - type: Transform + pos: -0.5,58.5 + parent: 2 + - uid: 5289 + components: + - type: Transform + pos: -0.5,59.5 + parent: 2 + - uid: 5290 + components: + - type: Transform + pos: -1.5,59.5 + parent: 2 + - uid: 5291 + components: + - type: Transform + pos: -2.5,59.5 + parent: 2 + - uid: 5292 + components: + - type: Transform + pos: -3.5,64.5 + parent: 2 + - uid: 5293 + components: + - type: Transform + pos: -3.5,63.5 + parent: 2 + - uid: 5294 + components: + - type: Transform + pos: -2.5,63.5 + parent: 2 + - uid: 5295 + components: + - type: Transform + pos: -1.5,63.5 + parent: 2 + - uid: 5296 + components: + - type: Transform + pos: -0.5,63.5 + parent: 2 + - uid: 5297 + components: + - type: Transform + pos: 0.5,63.5 + parent: 2 + - uid: 5298 + components: + - type: Transform + pos: 1.5,63.5 + parent: 2 + - uid: 5299 + components: + - type: Transform + pos: 2.5,63.5 + parent: 2 + - uid: 5300 + components: + - type: Transform + pos: 3.5,63.5 + parent: 2 + - uid: 5301 + components: + - type: Transform + pos: 3.5,65.5 + parent: 2 + - uid: 5302 + components: + - type: Transform + pos: 3.5,64.5 + parent: 2 + - uid: 5303 + components: + - type: Transform + pos: 3.5,65.5 + parent: 2 + - uid: 5304 + components: + - type: Transform + pos: 4.5,64.5 + parent: 2 + - uid: 5305 + components: + - type: Transform + pos: 5.5,64.5 + parent: 2 + - uid: 5306 + components: + - type: Transform + pos: 6.5,64.5 + parent: 2 + - uid: 5307 + components: + - type: Transform + pos: 7.5,64.5 + parent: 2 + - uid: 5308 + components: + - type: Transform + pos: 8.5,64.5 + parent: 2 + - uid: 5309 + components: + - type: Transform + pos: 9.5,64.5 + parent: 2 + - uid: 5310 + components: + - type: Transform + pos: 10.5,64.5 + parent: 2 + - uid: 5311 + components: + - type: Transform + pos: 11.5,64.5 + parent: 2 + - uid: 5312 + components: + - type: Transform + pos: 12.5,64.5 + parent: 2 + - uid: 5313 + components: + - type: Transform + pos: 13.5,64.5 + parent: 2 + - uid: 5314 + components: + - type: Transform + pos: 13.5,65.5 + parent: 2 + - uid: 5315 + components: + - type: Transform + pos: 13.5,66.5 + parent: 2 + - uid: 5316 + components: + - type: Transform + pos: 13.5,67.5 + parent: 2 + - uid: 5317 + components: + - type: Transform + pos: 13.5,68.5 + parent: 2 + - uid: 5318 + components: + - type: Transform + pos: 14.5,68.5 + parent: 2 + - uid: 5319 + components: + - type: Transform + pos: 14.5,69.5 + parent: 2 + - uid: 5320 + components: + - type: Transform + pos: 14.5,70.5 + parent: 2 + - uid: 5321 + components: + - type: Transform + pos: 14.5,71.5 + parent: 2 + - uid: 5322 + components: + - type: Transform + pos: 14.5,72.5 + parent: 2 + - uid: 5323 + components: + - type: Transform + pos: 14.5,73.5 + parent: 2 + - uid: 5324 + components: + - type: Transform + pos: 14.5,74.5 + parent: 2 + - uid: 5325 + components: + - type: Transform + pos: 13.5,74.5 + parent: 2 + - uid: 5326 + components: + - type: Transform + pos: 12.5,74.5 + parent: 2 + - uid: 5327 + components: + - type: Transform + pos: 11.5,74.5 + parent: 2 + - uid: 5328 + components: + - type: Transform + pos: 11.5,75.5 + parent: 2 + - uid: 5329 + components: + - type: Transform + pos: 11.5,76.5 + parent: 2 + - uid: 5330 + components: + - type: Transform + pos: 13.5,63.5 + parent: 2 + - uid: 5331 + components: + - type: Transform + pos: 18.5,60.5 + parent: 2 + - uid: 5332 + components: + - type: Transform + pos: 19.5,60.5 + parent: 2 + - uid: 5333 + components: + - type: Transform + pos: 20.5,60.5 + parent: 2 + - uid: 5334 + components: + - type: Transform + pos: 21.5,60.5 + parent: 2 + - uid: 5335 + components: + - type: Transform + pos: 22.5,60.5 + parent: 2 + - uid: 5336 + components: + - type: Transform + pos: 23.5,60.5 + parent: 2 + - uid: 5337 + components: + - type: Transform + pos: 24.5,60.5 + parent: 2 + - uid: 5338 + components: + - type: Transform + pos: 25.5,60.5 + parent: 2 + - uid: 5339 + components: + - type: Transform + pos: 26.5,60.5 + parent: 2 + - uid: 5340 + components: + - type: Transform + pos: 27.5,60.5 + parent: 2 + - uid: 5341 + components: + - type: Transform + pos: 28.5,60.5 + parent: 2 + - uid: 5342 + components: + - type: Transform + pos: 29.5,60.5 + parent: 2 + - uid: 5343 + components: + - type: Transform + pos: 30.5,60.5 + parent: 2 + - uid: 5344 + components: + - type: Transform + pos: 31.5,60.5 + parent: 2 + - uid: 5345 + components: + - type: Transform + pos: 31.5,61.5 + parent: 2 + - uid: 5346 + components: + - type: Transform + pos: 32.5,61.5 + parent: 2 + - uid: 5347 + components: + - type: Transform + pos: 33.5,61.5 + parent: 2 + - uid: 5348 + components: + - type: Transform + pos: 33.5,62.5 + parent: 2 + - uid: 5349 + components: + - type: Transform + pos: 33.5,63.5 + parent: 2 + - uid: 5350 + components: + - type: Transform + pos: 34.5,63.5 + parent: 2 + - uid: 5351 + components: + - type: Transform + pos: 35.5,63.5 + parent: 2 + - uid: 5352 + components: + - type: Transform + pos: 44.5,17.5 + parent: 2 + - uid: 5353 + components: + - type: Transform + pos: 45.5,17.5 + parent: 2 + - uid: 5354 + components: + - type: Transform + pos: 46.5,17.5 + parent: 2 + - uid: 5355 + components: + - type: Transform + pos: 47.5,17.5 + parent: 2 + - uid: 5356 + components: + - type: Transform + pos: 47.5,18.5 + parent: 2 + - uid: 5357 + components: + - type: Transform + pos: 47.5,19.5 + parent: 2 + - uid: 5358 + components: + - type: Transform + pos: 47.5,20.5 + parent: 2 + - uid: 5359 + components: + - type: Transform + pos: 47.5,21.5 + parent: 2 + - uid: 5360 + components: + - type: Transform + pos: 47.5,22.5 + parent: 2 + - uid: 5361 + components: + - type: Transform + pos: 47.5,23.5 + parent: 2 + - uid: 5362 + components: + - type: Transform + pos: 47.5,24.5 + parent: 2 + - uid: 5363 + components: + - type: Transform + pos: 47.5,25.5 + parent: 2 + - uid: 5364 + components: + - type: Transform + pos: 47.5,26.5 + parent: 2 + - uid: 5365 + components: + - type: Transform + pos: 47.5,27.5 + parent: 2 + - uid: 5366 + components: + - type: Transform + pos: 47.5,28.5 + parent: 2 + - uid: 5367 + components: + - type: Transform + pos: 47.5,29.5 + parent: 2 + - uid: 5368 + components: + - type: Transform + pos: 46.5,29.5 + parent: 2 + - uid: 5369 + components: + - type: Transform + pos: 45.5,29.5 + parent: 2 + - uid: 5370 + components: + - type: Transform + pos: 56.5,13.5 + parent: 2 + - uid: 5371 + components: + - type: Transform + pos: 57.5,13.5 + parent: 2 + - uid: 5372 + components: + - type: Transform + pos: 58.5,13.5 + parent: 2 + - uid: 5373 + components: + - type: Transform + pos: 59.5,13.5 + parent: 2 + - uid: 5374 + components: + - type: Transform + pos: 60.5,13.5 + parent: 2 + - uid: 5375 + components: + - type: Transform + pos: 61.5,13.5 + parent: 2 + - uid: 5376 + components: + - type: Transform + pos: 61.5,14.5 + parent: 2 + - uid: 5377 + components: + - type: Transform + pos: 61.5,15.5 + parent: 2 + - uid: 5378 + components: + - type: Transform + pos: 61.5,16.5 + parent: 2 + - uid: 5379 + components: + - type: Transform + pos: 61.5,17.5 + parent: 2 + - uid: 5380 + components: + - type: Transform + pos: 61.5,18.5 + parent: 2 + - uid: 5381 + components: + - type: Transform + pos: 62.5,18.5 + parent: 2 + - uid: 5382 + components: + - type: Transform + pos: 62.5,19.5 + parent: 2 + - uid: 5383 + components: + - type: Transform + pos: 62.5,20.5 + parent: 2 + - uid: 5384 + components: + - type: Transform + pos: 62.5,21.5 + parent: 2 + - uid: 5385 + components: + - type: Transform + pos: 62.5,22.5 + parent: 2 + - uid: 5386 + components: + - type: Transform + pos: 62.5,23.5 + parent: 2 + - uid: 5387 + components: + - type: Transform + pos: 62.5,24.5 + parent: 2 + - uid: 5388 + components: + - type: Transform + pos: 62.5,25.5 + parent: 2 + - uid: 5389 + components: + - type: Transform + pos: 61.5,25.5 + parent: 2 + - uid: 5390 + components: + - type: Transform + pos: 60.5,25.5 + parent: 2 + - uid: 5391 + components: + - type: Transform + pos: 60.5,26.5 + parent: 2 + - uid: 5392 + components: + - type: Transform + pos: 60.5,27.5 + parent: 2 + - uid: 5393 + components: + - type: Transform + pos: 43.5,3.5 + parent: 2 + - uid: 5394 + components: + - type: Transform + pos: 52.5,59.5 + parent: 2 + - uid: 5395 + components: + - type: Transform + pos: 51.5,59.5 + parent: 2 + - uid: 5396 + components: + - type: Transform + pos: 51.5,58.5 + parent: 2 + - uid: 5397 + components: + - type: Transform + pos: 51.5,57.5 + parent: 2 + - uid: 5398 + components: + - type: Transform + pos: 51.5,56.5 + parent: 2 + - uid: 5399 + components: + - type: Transform + pos: 50.5,56.5 + parent: 2 + - uid: 5400 + components: + - type: Transform + pos: 49.5,56.5 + parent: 2 + - uid: 5401 + components: + - type: Transform + pos: 48.5,56.5 + parent: 2 + - uid: 5402 + components: + - type: Transform + pos: 47.5,56.5 + parent: 2 + - uid: 5403 + components: + - type: Transform + pos: 46.5,56.5 + parent: 2 + - uid: 5404 + components: + - type: Transform + pos: 46.5,55.5 + parent: 2 + - uid: 5405 + components: + - type: Transform + pos: 46.5,54.5 + parent: 2 + - uid: 5406 + components: + - type: Transform + pos: 46.5,53.5 + parent: 2 + - uid: 5407 + components: + - type: Transform + pos: 46.5,52.5 + parent: 2 + - uid: 5408 + components: + - type: Transform + pos: 46.5,51.5 + parent: 2 + - uid: 5409 + components: + - type: Transform + pos: 47.5,51.5 + parent: 2 + - uid: 5410 + components: + - type: Transform + pos: 47.5,50.5 + parent: 2 + - uid: 5411 + components: + - type: Transform + pos: 47.5,49.5 + parent: 2 + - uid: 5412 + components: + - type: Transform + pos: 47.5,48.5 + parent: 2 + - uid: 5413 + components: + - type: Transform + pos: 48.5,48.5 + parent: 2 + - uid: 5414 + components: + - type: Transform + pos: 49.5,48.5 + parent: 2 + - uid: 5415 + components: + - type: Transform + pos: 49.5,49.5 + parent: 2 + - uid: 5416 + components: + - type: Transform + pos: 47.5,52.5 + parent: 2 + - uid: 5417 + components: + - type: Transform + pos: 48.5,52.5 + parent: 2 + - uid: 5418 + components: + - type: Transform + pos: 49.5,52.5 + parent: 2 + - uid: 5419 + components: + - type: Transform + pos: 50.5,52.5 + parent: 2 + - uid: 5420 + components: + - type: Transform + pos: 51.5,52.5 + parent: 2 + - uid: 5421 + components: + - type: Transform + pos: 51.5,51.5 + parent: 2 + - uid: 5422 + components: + - type: Transform + pos: 52.5,56.5 + parent: 2 + - uid: 5423 + components: + - type: Transform + pos: 53.5,56.5 + parent: 2 + - uid: 5424 + components: + - type: Transform + pos: 53.5,55.5 + parent: 2 + - uid: 5425 + components: + - type: Transform + pos: 53.5,54.5 + parent: 2 + - uid: 5426 + components: + - type: Transform + pos: 53.5,53.5 + parent: 2 + - uid: 5427 + components: + - type: Transform + pos: 54.5,53.5 + parent: 2 + - uid: 5428 + components: + - type: Transform + pos: 54.5,52.5 + parent: 2 + - uid: 5429 + components: + - type: Transform + pos: 55.5,53.5 + parent: 2 + - uid: 5430 + components: + - type: Transform + pos: 56.5,53.5 + parent: 2 + - uid: 5431 + components: + - type: Transform + pos: 57.5,53.5 + parent: 2 + - uid: 5432 + components: + - type: Transform + pos: 57.5,52.5 + parent: 2 + - uid: 5433 + components: + - type: Transform + pos: 57.5,51.5 + parent: 2 + - uid: 5434 + components: + - type: Transform + pos: 57.5,50.5 + parent: 2 + - uid: 5435 + components: + - type: Transform + pos: 57.5,49.5 + parent: 2 + - uid: 5436 + components: + - type: Transform + pos: 57.5,48.5 + parent: 2 + - uid: 5437 + components: + - type: Transform + pos: 58.5,48.5 + parent: 2 + - uid: 5438 + components: + - type: Transform + pos: 59.5,48.5 + parent: 2 + - uid: 5439 + components: + - type: Transform + pos: 59.5,47.5 + parent: 2 + - uid: 5440 + components: + - type: Transform + pos: 60.5,47.5 + parent: 2 + - uid: 5441 + components: + - type: Transform + pos: 60.5,46.5 + parent: 2 + - uid: 5442 + components: + - type: Transform + pos: 60.5,45.5 + parent: 2 + - uid: 5443 + components: + - type: Transform + pos: 60.5,44.5 + parent: 2 + - uid: 5444 + components: + - type: Transform + pos: 60.5,43.5 + parent: 2 + - uid: 5445 + components: + - type: Transform + pos: 61.5,43.5 + parent: 2 + - uid: 5446 + components: + - type: Transform + pos: 62.5,43.5 + parent: 2 + - uid: 5447 + components: + - type: Transform + pos: 63.5,43.5 + parent: 2 + - uid: 5448 + components: + - type: Transform + pos: 45.5,53.5 + parent: 2 + - uid: 5449 + components: + - type: Transform + pos: 35.5,64.5 + parent: 2 + - uid: 5450 + components: + - type: Transform + pos: 36.5,64.5 + parent: 2 + - uid: 5451 + components: + - type: Transform + pos: 31.5,59.5 + parent: 2 + - uid: 5452 + components: + - type: Transform + pos: 31.5,58.5 + parent: 2 + - uid: 5453 + components: + - type: Transform + pos: 31.5,57.5 + parent: 2 + - uid: 5454 + components: + - type: Transform + pos: 30.5,59.5 + parent: 2 + - uid: 5455 + components: + - type: Transform + pos: 29.5,59.5 + parent: 2 + - uid: 5456 + components: + - type: Transform + pos: 34.5,61.5 + parent: 2 + - uid: 5457 + components: + - type: Transform + pos: 35.5,61.5 + parent: 2 + - uid: 5458 + components: + - type: Transform + pos: 35.5,60.5 + parent: 2 + - uid: 5459 + components: + - type: Transform + pos: 35.5,59.5 + parent: 2 + - uid: 5460 + components: + - type: Transform + pos: 35.5,58.5 + parent: 2 + - uid: 5461 + components: + - type: Transform + pos: 36.5,58.5 + parent: 2 + - uid: 5462 + components: + - type: Transform + pos: 37.5,58.5 + parent: 2 + - uid: 5463 + components: + - type: Transform + pos: 35.5,50.5 + parent: 2 + - uid: 5464 + components: + - type: Transform + pos: 36.5,50.5 + parent: 2 + - uid: 5465 + components: + - type: Transform + pos: 37.5,50.5 + parent: 2 + - uid: 5466 + components: + - type: Transform + pos: 34.5,50.5 + parent: 2 + - uid: 5467 + components: + - type: Transform + pos: 33.5,50.5 + parent: 2 + - uid: 5468 + components: + - type: Transform + pos: 32.5,50.5 + parent: 2 + - uid: 5469 + components: + - type: Transform + pos: 31.5,50.5 + parent: 2 + - uid: 5470 + components: + - type: Transform + pos: 31.5,51.5 + parent: 2 + - uid: 5471 + components: + - type: Transform + pos: 30.5,50.5 + parent: 2 + - uid: 5472 + components: + - type: Transform + pos: 29.5,50.5 + parent: 2 + - uid: 5473 + components: + - type: Transform + pos: 27.5,50.5 + parent: 2 + - uid: 5474 + components: + - type: Transform + pos: 28.5,50.5 + parent: 2 + - uid: 5475 + components: + - type: Transform + pos: 29.5,51.5 + parent: 2 + - uid: 5476 + components: + - type: Transform + pos: 45.5,51.5 + parent: 2 + - uid: 5477 + components: + - type: Transform + pos: 44.5,51.5 + parent: 2 + - uid: 5478 + components: + - type: Transform + pos: 44.5,50.5 + parent: 2 + - uid: 5479 + components: + - type: Transform + pos: 44.5,49.5 + parent: 2 + - uid: 5480 + components: + - type: Transform + pos: 44.5,48.5 + parent: 2 + - uid: 5481 + components: + - type: Transform + pos: 43.5,48.5 + parent: 2 + - uid: 5482 + components: + - type: Transform + pos: 42.5,48.5 + parent: 2 + - uid: 5483 + components: + - type: Transform + pos: 41.5,48.5 + parent: 2 + - uid: 5484 + components: + - type: Transform + pos: 40.5,48.5 + parent: 2 + - uid: 5485 + components: + - type: Transform + pos: 39.5,48.5 + parent: 2 + - uid: 5486 + components: + - type: Transform + pos: 38.5,48.5 + parent: 2 + - uid: 5487 + components: + - type: Transform + pos: 37.5,48.5 + parent: 2 + - uid: 5488 + components: + - type: Transform + pos: 37.5,42.5 + parent: 2 + - uid: 5489 + components: + - type: Transform + pos: 37.5,43.5 + parent: 2 + - uid: 5490 + components: + - type: Transform + pos: 37.5,46.5 + parent: 2 + - uid: 5491 + components: + - type: Transform + pos: 37.5,45.5 + parent: 2 + - uid: 5492 + components: + - type: Transform + pos: 37.5,47.5 + parent: 2 + - uid: 5493 + components: + - type: Transform + pos: 37.5,44.5 + parent: 2 + - uid: 5494 + components: + - type: Transform + pos: 45.5,56.5 + parent: 2 + - uid: 5495 + components: + - type: Transform + pos: 44.5,56.5 + parent: 2 + - uid: 5496 + components: + - type: Transform + pos: 43.5,56.5 + parent: 2 + - uid: 5497 + components: + - type: Transform + pos: 42.5,56.5 + parent: 2 + - uid: 5498 + components: + - type: Transform + pos: 41.5,56.5 + parent: 2 + - uid: 5499 + components: + - type: Transform + pos: 40.5,56.5 + parent: 2 + - uid: 5500 + components: + - type: Transform + pos: 39.5,56.5 + parent: 2 + - uid: 5501 + components: + - type: Transform + pos: 39.5,55.5 + parent: 2 + - uid: 5502 + components: + - type: Transform + pos: 42.5,23.5 + parent: 2 + - uid: 5503 + components: + - type: Transform + pos: 41.5,23.5 + parent: 2 + - uid: 5504 + components: + - type: Transform + pos: 40.5,23.5 + parent: 2 + - uid: 5505 + components: + - type: Transform + pos: 40.5,24.5 + parent: 2 + - uid: 5506 + components: + - type: Transform + pos: 40.5,25.5 + parent: 2 + - uid: 5507 + components: + - type: Transform + pos: 39.5,24.5 + parent: 2 + - uid: 5508 + components: + - type: Transform + pos: 41.5,24.5 + parent: 2 + - uid: 5509 + components: + - type: Transform + pos: 40.5,26.5 + parent: 2 + - uid: 5510 + components: + - type: Transform + pos: 40.5,27.5 + parent: 2 + - uid: 5511 + components: + - type: Transform + pos: 40.5,28.5 + parent: 2 + - uid: 5512 + components: + - type: Transform + pos: 40.5,29.5 + parent: 2 + - uid: 5513 + components: + - type: Transform + pos: 40.5,30.5 + parent: 2 + - uid: 5514 + components: + - type: Transform + pos: 40.5,31.5 + parent: 2 + - uid: 5515 + components: + - type: Transform + pos: 41.5,31.5 + parent: 2 + - uid: 5516 + components: + - type: Transform + pos: 42.5,31.5 + parent: 2 + - uid: 5517 + components: + - type: Transform + pos: 43.5,31.5 + parent: 2 + - uid: 5518 + components: + - type: Transform + pos: 39.5,30.5 + parent: 2 + - uid: 5519 + components: + - type: Transform + pos: 38.5,30.5 + parent: 2 + - uid: 5520 + components: + - type: Transform + pos: 38.5,31.5 + parent: 2 + - uid: 5521 + components: + - type: Transform + pos: 20.5,43.5 + parent: 2 + - uid: 5522 + components: + - type: Transform + pos: 21.5,43.5 + parent: 2 + - uid: 5523 + components: + - type: Transform + pos: 21.5,44.5 + parent: 2 + - uid: 5524 + components: + - type: Transform + pos: 22.5,44.5 + parent: 2 + - uid: 5525 + components: + - type: Transform + pos: 23.5,44.5 + parent: 2 + - uid: 5526 + components: + - type: Transform + pos: 23.5,43.5 + parent: 2 + - uid: 5527 + components: + - type: Transform + pos: 23.5,42.5 + parent: 2 + - uid: 5528 + components: + - type: Transform + pos: 23.5,41.5 + parent: 2 + - uid: 5529 + components: + - type: Transform + pos: 23.5,40.5 + parent: 2 + - uid: 5530 + components: + - type: Transform + pos: 23.5,39.5 + parent: 2 + - uid: 5531 + components: + - type: Transform + pos: 23.5,38.5 + parent: 2 + - uid: 5532 + components: + - type: Transform + pos: 23.5,37.5 + parent: 2 + - uid: 5533 + components: + - type: Transform + pos: 23.5,36.5 + parent: 2 + - uid: 5534 + components: + - type: Transform + pos: 23.5,35.5 + parent: 2 + - uid: 5535 + components: + - type: Transform + pos: 23.5,34.5 + parent: 2 + - uid: 5536 + components: + - type: Transform + pos: 23.5,33.5 + parent: 2 + - uid: 5537 + components: + - type: Transform + pos: 22.5,33.5 + parent: 2 + - uid: 5538 + components: + - type: Transform + pos: 21.5,33.5 + parent: 2 + - uid: 5539 + components: + - type: Transform + pos: 20.5,33.5 + parent: 2 + - uid: 5540 + components: + - type: Transform + pos: 19.5,33.5 + parent: 2 + - uid: 5541 + components: + - type: Transform + pos: 18.5,33.5 + parent: 2 + - uid: 5542 + components: + - type: Transform + pos: 18.5,34.5 + parent: 2 + - uid: 5543 + components: + - type: Transform + pos: 18.5,35.5 + parent: 2 + - uid: 5544 + components: + - type: Transform + pos: 18.5,36.5 + parent: 2 + - uid: 5545 + components: + - type: Transform + pos: 18.5,37.5 + parent: 2 + - uid: 5546 + components: + - type: Transform + pos: 18.5,38.5 + parent: 2 + - uid: 5547 + components: + - type: Transform + pos: 19.5,38.5 + parent: 2 + - uid: 5548 + components: + - type: Transform + pos: 19.5,39.5 + parent: 2 + - uid: 5549 + components: + - type: Transform + pos: 19.5,40.5 + parent: 2 + - uid: 5550 + components: + - type: Transform + pos: 19.5,41.5 + parent: 2 + - uid: 5551 + components: + - type: Transform + pos: 20.5,44.5 + parent: 2 + - uid: 5552 + components: + - type: Transform + pos: 19.5,44.5 + parent: 2 + - uid: 5553 + components: + - type: Transform + pos: 17.5,35.5 + parent: 2 + - uid: 5554 + components: + - type: Transform + pos: 16.5,35.5 + parent: 2 + - uid: 5555 + components: + - type: Transform + pos: 15.5,35.5 + parent: 2 + - uid: 5556 + components: + - type: Transform + pos: 14.5,35.5 + parent: 2 + - uid: 5557 + components: + - type: Transform + pos: 14.5,36.5 + parent: 2 + - uid: 5558 + components: + - type: Transform + pos: 14.5,37.5 + parent: 2 + - uid: 5559 + components: + - type: Transform + pos: 14.5,38.5 + parent: 2 + - uid: 5560 + components: + - type: Transform + pos: 14.5,39.5 + parent: 2 + - uid: 5561 + components: + - type: Transform + pos: 14.5,40.5 + parent: 2 + - uid: 5562 + components: + - type: Transform + pos: 14.5,41.5 + parent: 2 + - uid: 5563 + components: + - type: Transform + pos: 15.5,41.5 + parent: 2 + - uid: 5564 + components: + - type: Transform + pos: 15.5,42.5 + parent: 2 + - uid: 5565 + components: + - type: Transform + pos: 15.5,38.5 + parent: 2 + - uid: 5566 + components: + - type: Transform + pos: 14.5,34.5 + parent: 2 + - uid: 5567 + components: + - type: Transform + pos: 24.5,36.5 + parent: 2 + - uid: 5568 + components: + - type: Transform + pos: 25.5,36.5 + parent: 2 + - uid: 5569 + components: + - type: Transform + pos: 26.5,36.5 + parent: 2 + - uid: 5570 + components: + - type: Transform + pos: 26.5,37.5 + parent: 2 + - uid: 5571 + components: + - type: Transform + pos: 13.5,40.5 + parent: 2 + - uid: 5572 + components: + - type: Transform + pos: 12.5,40.5 + parent: 2 + - uid: 5573 + components: + - type: Transform + pos: 11.5,40.5 + parent: 2 + - uid: 5574 + components: + - type: Transform + pos: 10.5,40.5 + parent: 2 + - uid: 5575 + components: + - type: Transform + pos: 14.5,34.5 + parent: 2 + - uid: 5576 + components: + - type: Transform + pos: 13.5,34.5 + parent: 2 + - uid: 5577 + components: + - type: Transform + pos: 12.5,34.5 + parent: 2 + - uid: 5578 + components: + - type: Transform + pos: 11.5,34.5 + parent: 2 + - uid: 5579 + components: + - type: Transform + pos: 10.5,34.5 + parent: 2 + - uid: 5580 + components: + - type: Transform + pos: 9.5,34.5 + parent: 2 + - uid: 5581 + components: + - type: Transform + pos: 8.5,34.5 + parent: 2 + - uid: 5582 + components: + - type: Transform + pos: 8.5,33.5 + parent: 2 + - uid: 5583 + components: + - type: Transform + pos: 8.5,32.5 + parent: 2 + - uid: 5584 + components: + - type: Transform + pos: 8.5,31.5 + parent: 2 + - uid: 5585 + components: + - type: Transform + pos: 8.5,30.5 + parent: 2 + - uid: 5586 + components: + - type: Transform + pos: 8.5,29.5 + parent: 2 + - uid: 5587 + components: + - type: Transform + pos: 7.5,29.5 + parent: 2 + - uid: 5588 + components: + - type: Transform + pos: 6.5,29.5 + parent: 2 + - uid: 5589 + components: + - type: Transform + pos: 6.5,30.5 + parent: 2 + - uid: 5590 + components: + - type: Transform + pos: 8.5,31.5 + parent: 2 + - uid: 5591 + components: + - type: Transform + pos: 9.5,31.5 + parent: 2 + - uid: 5592 + components: + - type: Transform + pos: 10.5,31.5 + parent: 2 + - uid: 5593 + components: + - type: Transform + pos: 11.5,31.5 + parent: 2 + - uid: 5594 + components: + - type: Transform + pos: 12.5,31.5 + parent: 2 + - uid: 5595 + components: + - type: Transform + pos: 13.5,31.5 + parent: 2 + - uid: 5596 + components: + - type: Transform + pos: 13.5,30.5 + parent: 2 + - uid: 5597 + components: + - type: Transform + pos: 13.5,29.5 + parent: 2 + - uid: 5598 + components: + - type: Transform + pos: 13.5,28.5 + parent: 2 + - uid: 5599 + components: + - type: Transform + pos: 13.5,27.5 + parent: 2 + - uid: 5600 + components: + - type: Transform + pos: 14.5,27.5 + parent: 2 + - uid: 5601 + components: + - type: Transform + pos: 83.5,46.5 + parent: 2 + - uid: 5602 + components: + - type: Transform + pos: 82.5,46.5 + parent: 2 + - uid: 5603 + components: + - type: Transform + pos: 81.5,46.5 + parent: 2 + - uid: 5604 + components: + - type: Transform + pos: 81.5,47.5 + parent: 2 + - uid: 5605 + components: + - type: Transform + pos: 80.5,47.5 + parent: 2 + - uid: 5606 + components: + - type: Transform + pos: 79.5,47.5 + parent: 2 + - uid: 5607 + components: + - type: Transform + pos: 78.5,47.5 + parent: 2 + - uid: 5608 + components: + - type: Transform + pos: 77.5,47.5 + parent: 2 + - uid: 5609 + components: + - type: Transform + pos: 77.5,46.5 + parent: 2 + - uid: 5610 + components: + - type: Transform + pos: 81.5,45.5 + parent: 2 + - uid: 5611 + components: + - type: Transform + pos: 81.5,44.5 + parent: 2 + - uid: 5612 + components: + - type: Transform + pos: 81.5,43.5 + parent: 2 + - uid: 5613 + components: + - type: Transform + pos: 81.5,42.5 + parent: 2 + - uid: 5614 + components: + - type: Transform + pos: 81.5,41.5 + parent: 2 + - uid: 5615 + components: + - type: Transform + pos: 81.5,40.5 + parent: 2 + - uid: 5616 + components: + - type: Transform + pos: 81.5,39.5 + parent: 2 + - uid: 5617 + components: + - type: Transform + pos: 80.5,39.5 + parent: 2 + - uid: 5618 + components: + - type: Transform + pos: 79.5,39.5 + parent: 2 + - uid: 5619 + components: + - type: Transform + pos: 81.5,38.5 + parent: 2 + - uid: 5620 + components: + - type: Transform + pos: 81.5,37.5 + parent: 2 + - uid: 5621 + components: + - type: Transform + pos: 81.5,36.5 + parent: 2 + - uid: 5622 + components: + - type: Transform + pos: 80.5,36.5 + parent: 2 + - uid: 5623 + components: + - type: Transform + pos: 79.5,36.5 + parent: 2 + - uid: 5624 + components: + - type: Transform + pos: 78.5,36.5 + parent: 2 + - uid: 5625 + components: + - type: Transform + pos: 78.5,35.5 + parent: 2 + - uid: 5626 + components: + - type: Transform + pos: 78.5,34.5 + parent: 2 + - uid: 5627 + components: + - type: Transform + pos: 78.5,33.5 + parent: 2 + - uid: 5628 + components: + - type: Transform + pos: 77.5,34.5 + parent: 2 + - uid: 5629 + components: + - type: Transform + pos: 76.5,34.5 + parent: 2 + - uid: 5630 + components: + - type: Transform + pos: 75.5,34.5 + parent: 2 + - uid: 5631 + components: + - type: Transform + pos: 74.5,34.5 + parent: 2 + - uid: 5632 + components: + - type: Transform + pos: 74.5,35.5 + parent: 2 + - uid: 5633 + components: + - type: Transform + pos: 74.5,33.5 + parent: 2 + - uid: 5634 + components: + - type: Transform + pos: 81.5,35.5 + parent: 2 + - uid: 5635 + components: + - type: Transform + pos: 81.5,34.5 + parent: 2 + - uid: 5636 + components: + - type: Transform + pos: 81.5,33.5 + parent: 2 + - uid: 5637 + components: + - type: Transform + pos: 81.5,32.5 + parent: 2 + - uid: 5638 + components: + - type: Transform + pos: 81.5,31.5 + parent: 2 + - uid: 5639 + components: + - type: Transform + pos: 81.5,30.5 + parent: 2 + - uid: 5640 + components: + - type: Transform + pos: 81.5,29.5 + parent: 2 + - uid: 5641 + components: + - type: Transform + pos: 81.5,28.5 + parent: 2 + - uid: 5642 + components: + - type: Transform + pos: 81.5,27.5 + parent: 2 + - uid: 5643 + components: + - type: Transform + pos: 81.5,26.5 + parent: 2 + - uid: 5644 + components: + - type: Transform + pos: 81.5,25.5 + parent: 2 + - uid: 5645 + components: + - type: Transform + pos: 81.5,24.5 + parent: 2 + - uid: 5646 + components: + - type: Transform + pos: 80.5,24.5 + parent: 2 + - uid: 5647 + components: + - type: Transform + pos: 79.5,24.5 + parent: 2 + - uid: 5648 + components: + - type: Transform + pos: 80.5,30.5 + parent: 2 + - uid: 5649 + components: + - type: Transform + pos: 79.5,30.5 + parent: 2 + - uid: 5650 + components: + - type: Transform + pos: 78.5,30.5 + parent: 2 + - uid: 5651 + components: + - type: Transform + pos: 77.5,30.5 + parent: 2 + - uid: 5652 + components: + - type: Transform + pos: 76.5,30.5 + parent: 2 + - uid: 5653 + components: + - type: Transform + pos: 75.5,30.5 + parent: 2 + - uid: 5654 + components: + - type: Transform + pos: 75.5,31.5 + parent: 2 + - uid: 5655 + components: + - type: Transform + pos: 75.5,32.5 + parent: 2 + - uid: 5656 + components: + - type: Transform + pos: 78.5,29.5 + parent: 2 + - uid: 5657 + components: + - type: Transform + pos: 78.5,28.5 + parent: 2 + - uid: 5658 + components: + - type: Transform + pos: 78.5,27.5 + parent: 2 + - uid: 5659 + components: + - type: Transform + pos: 74.5,31.5 + parent: 2 + - uid: 5660 + components: + - type: Transform + pos: 73.5,31.5 + parent: 2 + - uid: 5661 + components: + - type: Transform + pos: 72.5,31.5 + parent: 2 + - uid: 5662 + components: + - type: Transform + pos: 71.5,31.5 + parent: 2 + - uid: 5663 + components: + - type: Transform + pos: 70.5,31.5 + parent: 2 + - uid: 5664 + components: + - type: Transform + pos: 69.5,31.5 + parent: 2 + - uid: 5666 + components: + - type: Transform + pos: 79.5,23.5 + parent: 2 + - uid: 5667 + components: + - type: Transform + pos: 78.5,23.5 + parent: 2 + - uid: 5668 + components: + - type: Transform + pos: 77.5,23.5 + parent: 2 + - uid: 5669 + components: + - type: Transform + pos: 53.5,57.5 + parent: 2 + - uid: 5670 + components: + - type: Transform + pos: 54.5,57.5 + parent: 2 + - uid: 5671 + components: + - type: Transform + pos: 55.5,57.5 + parent: 2 + - uid: 5672 + components: + - type: Transform + pos: 56.5,57.5 + parent: 2 + - uid: 5673 + components: + - type: Transform + pos: 57.5,57.5 + parent: 2 + - uid: 5674 + components: + - type: Transform + pos: 58.5,57.5 + parent: 2 + - uid: 5675 + components: + - type: Transform + pos: 59.5,57.5 + parent: 2 + - uid: 5676 + components: + - type: Transform + pos: 59.5,58.5 + parent: 2 + - uid: 5677 + components: + - type: Transform + pos: 76.5,13.5 + parent: 2 + - uid: 5678 + components: + - type: Transform + pos: 75.5,13.5 + parent: 2 + - uid: 5679 + components: + - type: Transform + pos: 75.5,14.5 + parent: 2 + - uid: 5680 + components: + - type: Transform + pos: 75.5,15.5 + parent: 2 + - uid: 5681 + components: + - type: Transform + pos: 75.5,16.5 + parent: 2 + - uid: 5682 + components: + - type: Transform + pos: 75.5,17.5 + parent: 2 + - uid: 5683 + components: + - type: Transform + pos: 74.5,17.5 + parent: 2 + - uid: 5684 + components: + - type: Transform + pos: 74.5,18.5 + parent: 2 + - uid: 5685 + components: + - type: Transform + pos: 73.5,18.5 + parent: 2 + - uid: 5686 + components: + - type: Transform + pos: 72.5,18.5 + parent: 2 + - uid: 5687 + components: + - type: Transform + pos: 70.5,18.5 + parent: 2 + - uid: 5688 + components: + - type: Transform + pos: 71.5,18.5 + parent: 2 + - uid: 5689 + components: + - type: Transform + pos: 70.5,19.5 + parent: 2 + - uid: 5690 + components: + - type: Transform + pos: 70.5,20.5 + parent: 2 + - uid: 5691 + components: + - type: Transform + pos: 70.5,21.5 + parent: 2 + - uid: 5692 + components: + - type: Transform + pos: 70.5,22.5 + parent: 2 + - uid: 5693 + components: + - type: Transform + pos: 74.5,16.5 + parent: 2 + - uid: 5694 + components: + - type: Transform + pos: 73.5,16.5 + parent: 2 + - uid: 5695 + components: + - type: Transform + pos: 69.5,18.5 + parent: 2 + - uid: 5696 + components: + - type: Transform + pos: 68.5,18.5 + parent: 2 + - uid: 5697 + components: + - type: Transform + pos: 67.5,18.5 + parent: 2 + - uid: 5698 + components: + - type: Transform + pos: 66.5,18.5 + parent: 2 + - uid: 5699 + components: + - type: Transform + pos: 65.5,18.5 + parent: 2 + - uid: 5700 + components: + - type: Transform + pos: 65.5,17.5 + parent: 2 + - uid: 5701 + components: + - type: Transform + pos: 65.5,16.5 + parent: 2 + - uid: 5702 + components: + - type: Transform + pos: 65.5,15.5 + parent: 2 + - uid: 5703 + components: + - type: Transform + pos: 65.5,14.5 + parent: 2 + - uid: 5704 + components: + - type: Transform + pos: 65.5,13.5 + parent: 2 + - uid: 5705 + components: + - type: Transform + pos: 65.5,12.5 + parent: 2 + - uid: 5706 + components: + - type: Transform + pos: 65.5,11.5 + parent: 2 + - uid: 5707 + components: + - type: Transform + pos: 65.5,10.5 + parent: 2 + - uid: 5708 + components: + - type: Transform + pos: 65.5,9.5 + parent: 2 + - uid: 5709 + components: + - type: Transform + pos: 65.5,8.5 + parent: 2 + - uid: 5710 + components: + - type: Transform + pos: 65.5,7.5 + parent: 2 + - uid: 5711 + components: + - type: Transform + pos: 65.5,6.5 + parent: 2 + - uid: 5712 + components: + - type: Transform + pos: 64.5,6.5 + parent: 2 + - uid: 5713 + components: + - type: Transform + pos: 63.5,6.5 + parent: 2 + - uid: 5714 + components: + - type: Transform + pos: 62.5,6.5 + parent: 2 + - uid: 5715 + components: + - type: Transform + pos: 15.5,30.5 + parent: 2 + - uid: 5716 + components: + - type: Transform + pos: 14.5,30.5 + parent: 2 + - uid: 5717 + components: + - type: Transform + pos: 16.5,30.5 + parent: 2 + - uid: 5718 + components: + - type: Transform + pos: 17.5,30.5 + parent: 2 + - uid: 5719 + components: + - type: Transform + pos: 17.5,29.5 + parent: 2 + - uid: 5720 + components: + - type: Transform + pos: 17.5,28.5 + parent: 2 + - uid: 5721 + components: + - type: Transform + pos: 17.5,27.5 + parent: 2 + - uid: 5722 + components: + - type: Transform + pos: 17.5,26.5 + parent: 2 + - uid: 5723 + components: + - type: Transform + pos: 17.5,25.5 + parent: 2 + - uid: 5724 + components: + - type: Transform + pos: 17.5,24.5 + parent: 2 + - uid: 5725 + components: + - type: Transform + pos: 18.5,24.5 + parent: 2 + - uid: 5726 + components: + - type: Transform + pos: 19.5,24.5 + parent: 2 + - uid: 5727 + components: + - type: Transform + pos: 20.5,24.5 + parent: 2 + - uid: 5728 + components: + - type: Transform + pos: 21.5,24.5 + parent: 2 + - uid: 5729 + components: + - type: Transform + pos: 22.5,24.5 + parent: 2 + - uid: 5730 + components: + - type: Transform + pos: 22.5,25.5 + parent: 2 + - uid: 5731 + components: + - type: Transform + pos: 22.5,26.5 + parent: 2 + - uid: 5732 + components: + - type: Transform + pos: 22.5,27.5 + parent: 2 + - uid: 5733 + components: + - type: Transform + pos: 23.5,27.5 + parent: 2 + - uid: 5734 + components: + - type: Transform + pos: 24.5,27.5 + parent: 2 + - uid: 5741 + components: + - type: Transform + pos: -17.5,72.5 + parent: 2 + - uid: 5742 + components: + - type: Transform + pos: -22.5,41.5 + parent: 2 + - uid: 5743 + components: + - type: Transform + pos: -16.5,41.5 + parent: 2 + - uid: 5744 + components: + - type: Transform + pos: -15.5,41.5 + parent: 2 + - uid: 5745 + components: + - type: Transform + pos: -18.5,41.5 + parent: 2 + - uid: 5746 + components: + - type: Transform + pos: -17.5,41.5 + parent: 2 + - uid: 5747 + components: + - type: Transform + pos: -23.5,41.5 + parent: 2 + - uid: 5748 + components: + - type: Transform + pos: -24.5,41.5 + parent: 2 + - uid: 5749 + components: + - type: Transform + pos: -24.5,41.5 + parent: 2 + - uid: 5757 + components: + - type: Transform + pos: -17.5,73.5 + parent: 2 + - uid: 5760 + components: + - type: Transform + pos: -19.5,74.5 + parent: 2 + - uid: 5761 + components: + - type: Transform + pos: -18.5,74.5 + parent: 2 + - uid: 5762 + components: + - type: Transform + pos: -17.5,74.5 + parent: 2 + - uid: 5763 + components: + - type: Transform + pos: -16.5,74.5 + parent: 2 + - uid: 5764 + components: + - type: Transform + pos: -15.5,74.5 + parent: 2 + - uid: 5765 + components: + - type: Transform + pos: -14.5,74.5 + parent: 2 + - uid: 5766 + components: + - type: Transform + pos: -13.5,74.5 + parent: 2 + - uid: 5767 + components: + - type: Transform + pos: -13.5,76.5 + parent: 2 + - uid: 5768 + components: + - type: Transform + pos: -14.5,76.5 + parent: 2 + - uid: 5769 + components: + - type: Transform + pos: -15.5,76.5 + parent: 2 + - uid: 5770 + components: + - type: Transform + pos: -16.5,76.5 + parent: 2 + - uid: 5771 + components: + - type: Transform + pos: -17.5,76.5 + parent: 2 + - uid: 5772 + components: + - type: Transform + pos: -18.5,76.5 + parent: 2 + - uid: 5773 + components: + - type: Transform + pos: -19.5,76.5 + parent: 2 + - uid: 5774 + components: + - type: Transform + pos: -20.5,76.5 + parent: 2 + - uid: 5775 + components: + - type: Transform + pos: -21.5,76.5 + parent: 2 + - uid: 5776 + components: + - type: Transform + pos: -17.5,75.5 + parent: 2 + - uid: 5777 + components: + - type: Transform + pos: -12.5,37.5 + parent: 2 + - uid: 5778 + components: + - type: Transform + pos: -6.5,16.5 + parent: 2 + - uid: 5779 + components: + - type: Transform + pos: -6.5,17.5 + parent: 2 + - uid: 5780 + components: + - type: Transform + pos: -6.5,18.5 + parent: 2 + - uid: 5781 + components: + - type: Transform + pos: 13.5,32.5 + parent: 2 + - uid: 5782 + components: + - type: Transform + pos: 36.5,59.5 + parent: 2 + - uid: 5783 + components: + - type: Transform + pos: 37.5,59.5 + parent: 2 + - uid: 5784 + components: + - type: Transform + pos: 38.5,59.5 + parent: 2 + - uid: 5785 + components: + - type: Transform + pos: 39.5,59.5 + parent: 2 + - uid: 5786 + components: + - type: Transform + pos: 39.5,58.5 + parent: 2 + - uid: 5787 + components: + - type: Transform + pos: 39.5,57.5 + parent: 2 + - uid: 6656 + components: + - type: Transform + pos: -24.5,75.5 + parent: 2 + - uid: 6657 + components: + - type: Transform + pos: -23.5,74.5 + parent: 2 + - uid: 12073 + components: + - type: Transform + pos: -31.5,68.5 + parent: 2 + - uid: 12538 + components: + - type: Transform + pos: -11.5,70.5 + parent: 2 + - uid: 13971 + components: + - type: Transform + pos: -23.5,75.5 + parent: 2 + - uid: 15141 + components: + - type: Transform + pos: -23.5,73.5 + parent: 2 + - uid: 19420 + components: + - type: Transform + pos: -36.5,71.5 + parent: 2 + - uid: 19421 + components: + - type: Transform + pos: -35.5,71.5 + parent: 2 + - uid: 19422 + components: + - type: Transform + pos: -35.5,72.5 + parent: 2 + - uid: 19423 + components: + - type: Transform + pos: -35.5,73.5 + parent: 2 + - uid: 19424 + components: + - type: Transform + pos: -35.5,74.5 + parent: 2 + - uid: 19425 + components: + - type: Transform + pos: -35.5,75.5 + parent: 2 + - uid: 19426 + components: + - type: Transform + pos: -35.5,76.5 + parent: 2 + - uid: 19427 + components: + - type: Transform + pos: -34.5,76.5 + parent: 2 + - uid: 19428 + components: + - type: Transform + pos: -34.5,77.5 + parent: 2 + - uid: 19429 + components: + - type: Transform + pos: -33.5,77.5 + parent: 2 + - uid: 19430 + components: + - type: Transform + pos: -33.5,78.5 + parent: 2 + - uid: 19432 + components: + - type: Transform + pos: -32.5,78.5 + parent: 2 + - uid: 19433 + components: + - type: Transform + pos: -32.5,78.5 + parent: 2 + - uid: 19434 + components: + - type: Transform + pos: -31.5,78.5 + parent: 2 + - uid: 19435 + components: + - type: Transform + pos: -30.5,78.5 + parent: 2 + - uid: 19436 + components: + - type: Transform + pos: -29.5,78.5 + parent: 2 + - uid: 19437 + components: + - type: Transform + pos: -29.5,77.5 + parent: 2 + - uid: 19438 + components: + - type: Transform + pos: -28.5,77.5 + parent: 2 + - uid: 19439 + components: + - type: Transform + pos: -28.5,76.5 + parent: 2 + - uid: 19440 + components: + - type: Transform + pos: -27.5,76.5 + parent: 2 + - uid: 19441 + components: + - type: Transform + pos: -27.5,75.5 + parent: 2 + - uid: 19822 + components: + - type: Transform + pos: 34.5,-18.5 + parent: 2 + - uid: 19823 + components: + - type: Transform + pos: 33.5,-18.5 + parent: 2 + - uid: 19824 + components: + - type: Transform + pos: 32.5,-18.5 + parent: 2 + - uid: 19825 + components: + - type: Transform + pos: 31.5,-18.5 + parent: 2 + - uid: 19826 + components: + - type: Transform + pos: 30.5,-18.5 + parent: 2 + - uid: 19827 + components: + - type: Transform + pos: 30.5,-17.5 + parent: 2 + - uid: 19828 + components: + - type: Transform + pos: 30.5,-16.5 + parent: 2 + - uid: 19829 + components: + - type: Transform + pos: 30.5,-15.5 + parent: 2 + - uid: 19830 + components: + - type: Transform + pos: 30.5,-14.5 + parent: 2 + - uid: 19831 + components: + - type: Transform + pos: 30.5,-19.5 + parent: 2 + - uid: 19832 + components: + - type: Transform + pos: 30.5,-20.5 + parent: 2 + - uid: 19833 + components: + - type: Transform + pos: 30.5,-21.5 + parent: 2 + - uid: 19834 + components: + - type: Transform + pos: 30.5,-22.5 + parent: 2 + - uid: 19835 + components: + - type: Transform + pos: 30.5,-23.5 + parent: 2 + - uid: 19836 + components: + - type: Transform + pos: 30.5,-24.5 + parent: 2 + - uid: 19837 + components: + - type: Transform + pos: 31.5,-24.5 + parent: 2 + - uid: 19838 + components: + - type: Transform + pos: 32.5,-24.5 + parent: 2 + - uid: 19839 + components: + - type: Transform + pos: 33.5,-24.5 + parent: 2 + - uid: 19840 + components: + - type: Transform + pos: 34.5,-24.5 + parent: 2 + - uid: 19841 + components: + - type: Transform + pos: 34.5,-25.5 + parent: 2 + - uid: 19842 + components: + - type: Transform + pos: 34.5,-26.5 + parent: 2 + - uid: 19843 + components: + - type: Transform + pos: 30.5,-48.5 + parent: 2 + - uid: 19844 + components: + - type: Transform + pos: 30.5,-47.5 + parent: 2 + - uid: 19845 + components: + - type: Transform + pos: 30.5,-46.5 + parent: 2 + - uid: 19846 + components: + - type: Transform + pos: 30.5,-45.5 + parent: 2 + - uid: 19847 + components: + - type: Transform + pos: 30.5,-44.5 + parent: 2 + - uid: 19848 + components: + - type: Transform + pos: 30.5,-43.5 + parent: 2 + - uid: 19849 + components: + - type: Transform + pos: 30.5,-42.5 + parent: 2 + - uid: 19850 + components: + - type: Transform + pos: 29.5,-42.5 + parent: 2 + - uid: 19851 + components: + - type: Transform + pos: 28.5,-42.5 + parent: 2 + - uid: 19852 + components: + - type: Transform + pos: 27.5,-42.5 + parent: 2 + - uid: 19853 + components: + - type: Transform + pos: 30.5,-41.5 + parent: 2 + - uid: 19854 + components: + - type: Transform + pos: 30.5,-40.5 + parent: 2 + - uid: 19855 + components: + - type: Transform + pos: 30.5,-39.5 + parent: 2 + - uid: 19856 + components: + - type: Transform + pos: 30.5,-38.5 + parent: 2 + - uid: 19857 + components: + - type: Transform + pos: 30.5,-37.5 + parent: 2 + - uid: 19858 + components: + - type: Transform + pos: 30.5,-36.5 + parent: 2 + - uid: 19859 + components: + - type: Transform + pos: 30.5,-35.5 + parent: 2 + - uid: 19860 + components: + - type: Transform + pos: 30.5,-34.5 + parent: 2 + - uid: 19861 + components: + - type: Transform + pos: 29.5,-34.5 + parent: 2 +- proto: CableMVStack + entities: + - uid: 5800 + components: + - type: Transform + pos: -7.483595,28.481287 + parent: 2 +- proto: CableTerminal + entities: + - uid: 5801 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,44.5 + parent: 2 + - uid: 5802 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,44.5 + parent: 2 + - uid: 5803 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,44.5 + parent: 2 + - uid: 5804 + components: + - type: Transform + pos: 31.5,64.5 + parent: 2 + - uid: 5805 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,7.5 + parent: 2 + - uid: 5806 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,0.5 + parent: 2 + - uid: 5807 + components: + - type: Transform + pos: 31.5,0.5 + parent: 2 + - uid: 18398 + components: + - type: Transform + pos: 36.5,-31.5 + parent: 2 +- proto: CandleBlueInfinite + entities: + - uid: 4413 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 80.57869,50.655235 + parent: 2 + - uid: 4725 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 80.43365,50.747536 + parent: 2 +- proto: CandleBlueSmallInfinite + entities: + - uid: 4412 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 80.48639,50.61568 + parent: 2 +- proto: CannabisSeeds + entities: + - uid: 13976 + components: + - type: Transform + pos: -33.485596,76.50455 + parent: 2 + - uid: 13977 + components: + - type: Transform + pos: -32.479267,77.51087 + parent: 2 + - uid: 17246 + components: + - type: Transform + pos: -32.498253,76.50455 + parent: 2 +- proto: CarbonDioxideCanister + entities: + - uid: 5812 + components: + - type: Transform + pos: 36.5,14.5 + parent: 2 + - uid: 5813 + components: + - type: Transform + pos: 36.5,13.5 + parent: 2 + - uid: 5814 + components: + - type: Transform + pos: -38.5,8.5 + parent: 2 + - uid: 14284 + components: + - type: Transform + pos: -19.5,21.5 + parent: 2 + - uid: 14285 + components: + - type: Transform + pos: -20.5,21.5 + parent: 2 +- proto: CargoBountyComputerCircuitboard + entities: + - uid: 5815 + components: + - type: Transform + pos: -8.2761965,43.516277 + parent: 2 +- proto: CargoRequestComputerCircuitboard + entities: + - uid: 5816 + components: + - type: Transform + pos: -8.570984,43.670586 + parent: 2 +- proto: CargoShuttleConsoleCircuitboard + entities: + - uid: 5817 + components: + - type: Transform + pos: -8.613097,43.404053 + parent: 2 +- proto: Carpet + entities: + - uid: 5818 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,53.5 + parent: 2 + - uid: 5819 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,52.5 + parent: 2 + - uid: 5820 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,51.5 + parent: 2 + - uid: 5821 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,53.5 + parent: 2 + - uid: 5822 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,52.5 + parent: 2 + - uid: 5823 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,51.5 + parent: 2 + - uid: 5824 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,53.5 + parent: 2 + - uid: 5825 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,52.5 + parent: 2 + - uid: 5826 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,51.5 + parent: 2 + - uid: 5827 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,53.5 + parent: 2 + - uid: 5828 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,52.5 + parent: 2 + - uid: 5829 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,51.5 + parent: 2 + - uid: 5830 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,59.5 + parent: 2 + - uid: 5831 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,60.5 + parent: 2 + - uid: 5832 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,59.5 + parent: 2 + - uid: 5833 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,60.5 + parent: 2 + - uid: 5834 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,59.5 + parent: 2 + - uid: 5835 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,60.5 + parent: 2 + - uid: 5836 + components: + - type: Transform + pos: 16.5,52.5 + parent: 2 + - uid: 5837 + components: + - type: Transform + pos: 17.5,53.5 + parent: 2 + - uid: 5838 + components: + - type: Transform + pos: 17.5,52.5 + parent: 2 + - uid: 5839 + components: + - type: Transform + pos: 16.5,53.5 + parent: 2 + - uid: 5840 + components: + - type: Transform + pos: 18.5,53.5 + parent: 2 + - uid: 5841 + components: + - type: Transform + pos: 18.5,52.5 + parent: 2 + - uid: 5842 + components: + - type: Transform + pos: 19.5,53.5 + parent: 2 + - uid: 5843 + components: + - type: Transform + pos: 19.5,52.5 + parent: 2 + - uid: 5844 + components: + - type: Transform + pos: 20.5,53.5 + parent: 2 + - uid: 5845 + components: + - type: Transform + pos: 20.5,52.5 + parent: 2 + - uid: 5846 + components: + - type: Transform + pos: 21.5,53.5 + parent: 2 + - uid: 5847 + components: + - type: Transform + pos: 21.5,52.5 + parent: 2 + - uid: 5848 + components: + - type: Transform + pos: 22.5,53.5 + parent: 2 + - uid: 5849 + components: + - type: Transform + pos: 22.5,52.5 + parent: 2 + - uid: 5850 + components: + - type: Transform + pos: 23.5,53.5 + parent: 2 + - uid: 5851 + components: + - type: Transform + pos: 23.5,52.5 + parent: 2 + - uid: 5852 + components: + - type: Transform + pos: 24.5,53.5 + parent: 2 + - uid: 5853 + components: + - type: Transform + pos: 24.5,52.5 + parent: 2 + - uid: 5854 + components: + - type: Transform + pos: 25.5,53.5 + parent: 2 + - uid: 5855 + components: + - type: Transform + pos: 25.5,52.5 + parent: 2 + - uid: 5856 + components: + - type: Transform + pos: 23.5,51.5 + parent: 2 + - uid: 5857 + components: + - type: Transform + pos: 24.5,51.5 + parent: 2 + - uid: 5858 + components: + - type: Transform + pos: 24.5,50.5 + parent: 2 + - uid: 5859 + components: + - type: Transform + pos: 23.5,50.5 + parent: 2 + - uid: 5860 + components: + - type: Transform + pos: 21.5,54.5 + parent: 2 + - uid: 5861 + components: + - type: Transform + pos: 21.5,55.5 + parent: 2 + - uid: 5862 + components: + - type: Transform + pos: 21.5,56.5 + parent: 2 + - uid: 5863 + components: + - type: Transform + pos: 21.5,57.5 + parent: 2 + - uid: 5864 + components: + - type: Transform + pos: 22.5,54.5 + parent: 2 + - uid: 5865 + components: + - type: Transform + pos: 22.5,55.5 + parent: 2 + - uid: 5866 + components: + - type: Transform + pos: 22.5,56.5 + parent: 2 + - uid: 5867 + components: + - type: Transform + pos: 22.5,57.5 + parent: 2 + - uid: 5868 + components: + - type: Transform + pos: 23.5,54.5 + parent: 2 + - uid: 5869 + components: + - type: Transform + pos: 23.5,55.5 + parent: 2 + - uid: 5870 + components: + - type: Transform + pos: 23.5,56.5 + parent: 2 + - uid: 5871 + components: + - type: Transform + pos: 23.5,57.5 + parent: 2 + - uid: 5872 + components: + - type: Transform + pos: 24.5,54.5 + parent: 2 + - uid: 5873 + components: + - type: Transform + pos: 24.5,55.5 + parent: 2 + - uid: 5874 + components: + - type: Transform + pos: 24.5,56.5 + parent: 2 + - uid: 5875 + components: + - type: Transform + pos: 24.5,57.5 + parent: 2 + - uid: 5876 + components: + - type: Transform + pos: 25.5,54.5 + parent: 2 + - uid: 5877 + components: + - type: Transform + pos: 25.5,55.5 + parent: 2 + - uid: 5878 + components: + - type: Transform + pos: 25.5,56.5 + parent: 2 + - uid: 5879 + components: + - type: Transform + pos: 25.5,57.5 + parent: 2 + - uid: 5880 + components: + - type: Transform + pos: 63.5,13.5 + parent: 2 + - uid: 5881 + components: + - type: Transform + pos: 63.5,14.5 + parent: 2 + - uid: 5882 + components: + - type: Transform + pos: 63.5,15.5 + parent: 2 + - uid: 5883 + components: + - type: Transform + pos: 63.5,16.5 + parent: 2 +- proto: CarpetBlack + entities: + - uid: 740 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 70.5,30.5 + parent: 2 + - uid: 5884 + components: + - type: Transform + pos: 74.5,31.5 + parent: 2 + - uid: 5885 + components: + - type: Transform + pos: 74.5,30.5 + parent: 2 + - uid: 5886 + components: + - type: Transform + pos: 75.5,31.5 + parent: 2 + - uid: 5887 + components: + - type: Transform + pos: 75.5,30.5 + parent: 2 + - uid: 5888 + components: + - type: Transform + pos: 76.5,31.5 + parent: 2 + - uid: 5889 + components: + - type: Transform + pos: 76.5,30.5 + parent: 2 + - uid: 8449 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 69.5,31.5 + parent: 2 + - uid: 8587 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 68.5,30.5 + parent: 2 + - uid: 12650 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 70.5,31.5 + parent: 2 + - uid: 12991 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 71.5,29.5 + parent: 2 + - uid: 13130 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 71.5,28.5 + parent: 2 + - uid: 13682 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 68.5,31.5 + parent: 2 + - uid: 16997 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 69.5,30.5 + parent: 2 + - uid: 17003 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 72.5,28.5 + parent: 2 + - uid: 17004 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 71.5,27.5 + parent: 2 + - uid: 17005 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 72.5,29.5 + parent: 2 + - uid: 17006 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 72.5,27.5 + parent: 2 +- proto: CarpetBlue + entities: + - uid: 5890 + components: + - type: Transform + pos: 74.5,40.5 + parent: 2 + - uid: 5891 + components: + - type: Transform + pos: 74.5,39.5 + parent: 2 + - uid: 5892 + components: + - type: Transform + pos: 74.5,38.5 + parent: 2 + - uid: 5893 + components: + - type: Transform + pos: 74.5,37.5 + parent: 2 + - uid: 5894 + components: + - type: Transform + pos: 75.5,40.5 + parent: 2 + - uid: 5895 + components: + - type: Transform + pos: 75.5,39.5 + parent: 2 + - uid: 5896 + components: + - type: Transform + pos: 75.5,38.5 + parent: 2 + - uid: 5897 + components: + - type: Transform + pos: 75.5,37.5 + parent: 2 +- proto: CarpetChapel + entities: + - uid: 5898 + components: + - type: Transform + pos: 8.5,54.5 + parent: 2 + - uid: 5899 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,54.5 + parent: 2 + - uid: 5900 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,55.5 + parent: 2 + - uid: 5901 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,55.5 + parent: 2 + - uid: 5902 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,57.5 + parent: 2 + - uid: 5903 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 12.5,57.5 + parent: 2 + - uid: 5904 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 12.5,55.5 + parent: 2 + - uid: 5905 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,56.5 + parent: 2 + - uid: 5906 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,56.5 + parent: 2 + - uid: 5907 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,54.5 + parent: 2 + - uid: 5908 + components: + - type: Transform + pos: 11.5,54.5 + parent: 2 + - uid: 5909 + components: + - type: Transform + pos: 8.5,56.5 + parent: 2 + - uid: 5910 + components: + - type: Transform + pos: 11.5,56.5 + parent: 2 + - uid: 5911 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.5,55.5 + parent: 2 + - uid: 5912 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.5,57.5 + parent: 2 + - uid: 5913 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,57.5 + parent: 2 +- proto: CarpetCyan + entities: + - uid: 8591 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 72.5,23.5 + parent: 2 + - uid: 8985 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 72.5,24.5 + parent: 2 + - uid: 13665 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 72.5,25.5 + parent: 2 +- proto: CarpetOrange + entities: + - uid: 5914 + components: + - type: Transform + pos: -3.5,24.5 + parent: 2 + - uid: 5915 + components: + - type: Transform + pos: -3.5,25.5 + parent: 2 + - uid: 5916 + components: + - type: Transform + pos: -4.5,24.5 + parent: 2 + - uid: 5917 + components: + - type: Transform + pos: -4.5,25.5 + parent: 2 + - uid: 5918 + components: + - type: Transform + pos: -5.5,24.5 + parent: 2 + - uid: 5919 + components: + - type: Transform + pos: -5.5,25.5 + parent: 2 +- proto: CarpetPurple + entities: + - uid: 5920 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,53.5 + parent: 2 + - uid: 5921 + components: + - type: Transform + pos: 53.5,16.5 + parent: 2 + - uid: 5922 + components: + - type: Transform + pos: 53.5,15.5 + parent: 2 + - uid: 5923 + components: + - type: Transform + pos: 53.5,14.5 + parent: 2 + - uid: 5924 + components: + - type: Transform + pos: 52.5,16.5 + parent: 2 + - uid: 5925 + components: + - type: Transform + pos: 52.5,15.5 + parent: 2 + - uid: 5926 + components: + - type: Transform + pos: 52.5,14.5 + parent: 2 + - uid: 5927 + components: + - type: Transform + pos: 10.5,57.5 + parent: 2 + - uid: 5928 + components: + - type: Transform + pos: 10.5,56.5 + parent: 2 + - uid: 5929 + components: + - type: Transform + pos: 10.5,55.5 + parent: 2 + - uid: 5930 + components: + - type: Transform + pos: 10.5,54.5 + parent: 2 + - uid: 5931 + components: + - type: Transform + pos: 10.5,53.5 + parent: 2 + - uid: 5932 + components: + - type: Transform + pos: 10.5,51.5 + parent: 2 + - uid: 5933 + components: + - type: Transform + pos: 7.5,52.5 + parent: 2 + - uid: 5934 + components: + - type: Transform + pos: 8.5,52.5 + parent: 2 + - uid: 5935 + components: + - type: Transform + pos: 9.5,52.5 + parent: 2 + - uid: 5936 + components: + - type: Transform + pos: 11.5,51.5 + parent: 2 + - uid: 5937 + components: + - type: Transform + pos: 12.5,51.5 + parent: 2 + - uid: 5938 + components: + - type: Transform + pos: 11.5,53.5 + parent: 2 + - uid: 5939 + components: + - type: Transform + pos: 11.5,52.5 + parent: 2 + - uid: 5940 + components: + - type: Transform + pos: 12.5,53.5 + parent: 2 + - uid: 5941 + components: + - type: Transform + pos: 12.5,52.5 + parent: 2 + - uid: 5942 + components: + - type: Transform + pos: 13.5,53.5 + parent: 2 + - uid: 5943 + components: + - type: Transform + pos: 13.5,52.5 + parent: 2 + - uid: 5944 + components: + - type: Transform + pos: 14.5,53.5 + parent: 2 + - uid: 5945 + components: + - type: Transform + pos: 14.5,52.5 + parent: 2 + - uid: 5946 + components: + - type: Transform + pos: 15.5,53.5 + parent: 2 + - uid: 5947 + components: + - type: Transform + pos: 15.5,52.5 + parent: 2 + - uid: 5948 + components: + - type: Transform + pos: 8.5,51.5 + parent: 2 + - uid: 5949 + components: + - type: Transform + pos: 9.5,51.5 + parent: 2 + - uid: 5950 + components: + - type: Transform + pos: 13.5,51.5 + parent: 2 + - uid: 5951 + components: + - type: Transform + pos: 14.5,51.5 + parent: 2 + - uid: 5952 + components: + - type: Transform + pos: 10.5,50.5 + parent: 2 + - uid: 5953 + components: + - type: Transform + pos: 9.5,50.5 + parent: 2 + - uid: 5954 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,53.5 + parent: 2 + - uid: 5955 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,53.5 + parent: 2 + - uid: 5956 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,52.5 + parent: 2 +- proto: CarpetSBlue + entities: + - uid: 5958 + components: + - type: Transform + pos: 18.5,39.5 + parent: 2 + - uid: 5959 + components: + - type: Transform + pos: 18.5,38.5 + parent: 2 + - uid: 5960 + components: + - type: Transform + pos: 19.5,39.5 + parent: 2 + - uid: 5961 + components: + - type: Transform + pos: 19.5,38.5 + parent: 2 + - uid: 5962 + components: + - type: Transform + pos: 20.5,39.5 + parent: 2 + - uid: 5963 + components: + - type: Transform + pos: 20.5,38.5 + parent: 2 + - uid: 5964 + components: + - type: Transform + pos: 77.5,27.5 + parent: 2 + - uid: 5965 + components: + - type: Transform + pos: 76.5,26.5 + parent: 2 + - uid: 5966 + components: + - type: Transform + pos: 76.5,25.5 + parent: 2 + - uid: 5967 + components: + - type: Transform + pos: 76.5,24.5 + parent: 2 + - uid: 5968 + components: + - type: Transform + pos: 77.5,26.5 + parent: 2 + - uid: 5969 + components: + - type: Transform + pos: 77.5,25.5 + parent: 2 + - uid: 5970 + components: + - type: Transform + pos: 77.5,24.5 + parent: 2 + - uid: 5971 + components: + - type: Transform + pos: 78.5,26.5 + parent: 2 + - uid: 5972 + components: + - type: Transform + pos: 78.5,25.5 + parent: 2 + - uid: 5973 + components: + - type: Transform + pos: 78.5,24.5 + parent: 2 + - uid: 5974 + components: + - type: Transform + pos: 83.5,25.5 + parent: 2 + - uid: 5975 + components: + - type: Transform + pos: 83.5,24.5 + parent: 2 + - uid: 5976 + components: + - type: Transform + pos: 83.5,23.5 + parent: 2 + - uid: 5977 + components: + - type: Transform + pos: 83.5,22.5 + parent: 2 + - uid: 5978 + components: + - type: Transform + pos: 82.5,25.5 + parent: 2 + - uid: 5979 + components: + - type: Transform + pos: 82.5,24.5 + parent: 2 + - uid: 5980 + components: + - type: Transform + pos: 82.5,23.5 + parent: 2 + - uid: 5981 + components: + - type: Transform + pos: 82.5,22.5 + parent: 2 + - uid: 5982 + components: + - type: Transform + pos: 81.5,25.5 + parent: 2 + - uid: 5983 + components: + - type: Transform + pos: 81.5,24.5 + parent: 2 + - uid: 5984 + components: + - type: Transform + pos: 81.5,23.5 + parent: 2 + - uid: 5985 + components: + - type: Transform + pos: 81.5,22.5 + parent: 2 +- proto: Catwalk + entities: + - uid: 47 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -39.5,40.5 + parent: 2 + - uid: 83 + components: + - type: Transform + pos: 36.5,-9.5 + parent: 2 + - uid: 310 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,34.5 + parent: 2 + - uid: 473 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,40.5 + parent: 2 + - uid: 572 + components: + - type: Transform + pos: 26.5,-12.5 + parent: 2 + - uid: 861 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,35.5 + parent: 2 + - uid: 3451 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,36.5 + parent: 2 + - uid: 3459 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,37.5 + parent: 2 + - uid: 3460 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -29.5,39.5 + parent: 2 + - uid: 3461 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,38.5 + parent: 2 + - uid: 3466 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,-24.5 + parent: 2 + - uid: 3469 + components: + - type: Transform + pos: 23.5,-44.5 + parent: 2 + - uid: 3470 + components: + - type: Transform + pos: 24.5,-26.5 + parent: 2 + - uid: 3471 + components: + - type: Transform + pos: 24.5,-28.5 + parent: 2 + - uid: 3485 + components: + - type: Transform + pos: 22.5,-38.5 + parent: 2 + - uid: 3680 + components: + - type: Transform + pos: 36.5,-52.5 + parent: 2 + - uid: 3681 + components: + - type: Transform + pos: 37.5,-50.5 + parent: 2 + - uid: 3682 + components: + - type: Transform + pos: 25.5,-21.5 + parent: 2 + - uid: 3702 + components: + - type: Transform + pos: 37.5,-51.5 + parent: 2 + - uid: 3703 + components: + - type: Transform + pos: 37.5,-48.5 + parent: 2 + - uid: 3704 + components: + - type: Transform + pos: 37.5,-47.5 + parent: 2 + - uid: 3705 + components: + - type: Transform + pos: 37.5,-46.5 + parent: 2 + - uid: 3706 + components: + - type: Transform + pos: 37.5,-45.5 + parent: 2 + - uid: 3707 + components: + - type: Transform + pos: 23.5,-46.5 + parent: 2 + - uid: 3708 + components: + - type: Transform + pos: 23.5,-47.5 + parent: 2 + - uid: 3709 + components: + - type: Transform + pos: 23.5,-48.5 + parent: 2 + - uid: 3710 + components: + - type: Transform + pos: 23.5,-49.5 + parent: 2 + - uid: 3711 + components: + - type: Transform + pos: 23.5,-50.5 + parent: 2 + - uid: 3712 + components: + - type: Transform + pos: 23.5,-51.5 + parent: 2 + - uid: 3713 + components: + - type: Transform + pos: 24.5,-51.5 + parent: 2 + - uid: 3714 + components: + - type: Transform + pos: 24.5,-52.5 + parent: 2 + - uid: 3715 + components: + - type: Transform + pos: 27.5,-52.5 + parent: 2 + - uid: 3716 + components: + - type: Transform + pos: 28.5,-52.5 + parent: 2 + - uid: 3717 + components: + - type: Transform + pos: 25.5,-52.5 + parent: 2 + - uid: 3718 + components: + - type: Transform + pos: 26.5,-52.5 + parent: 2 + - uid: 3719 + components: + - type: Transform + pos: 29.5,-52.5 + parent: 2 + - uid: 3720 + components: + - type: Transform + pos: 30.5,-52.5 + parent: 2 + - uid: 3721 + components: + - type: Transform + pos: 31.5,-52.5 + parent: 2 + - uid: 3722 + components: + - type: Transform + pos: 32.5,-52.5 + parent: 2 + - uid: 3755 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -29.5,37.5 + parent: 2 + - uid: 3756 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -29.5,38.5 + parent: 2 + - uid: 3757 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,37.5 + parent: 2 + - uid: 3759 + components: + - type: Transform + pos: 26.5,-13.5 + parent: 2 + - uid: 3760 + components: + - type: Transform + pos: 37.5,-49.5 + parent: 2 + - uid: 3761 + components: + - type: Transform + pos: 24.5,-22.5 + parent: 2 + - uid: 3762 + components: + - type: Transform + pos: 24.5,-24.5 + parent: 2 + - uid: 3764 + components: + - type: Transform + pos: 25.5,-13.5 + parent: 2 + - uid: 3765 + components: + - type: Transform + pos: 24.5,-21.5 + parent: 2 + - uid: 3766 + components: + - type: Transform + pos: 24.5,-23.5 + parent: 2 + - uid: 3767 + components: + - type: Transform + pos: 24.5,-25.5 + parent: 2 + - uid: 3768 + components: + - type: Transform + pos: 36.5,-51.5 + parent: 2 + - uid: 3769 + components: + - type: Transform + pos: 25.5,-14.5 + parent: 2 + - uid: 3770 + components: + - type: Transform + pos: 25.5,-18.5 + parent: 2 + - uid: 3803 + components: + - type: Transform + pos: 25.5,-16.5 + parent: 2 + - uid: 4406 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 76.5,53.5 + parent: 2 + - uid: 4407 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 78.5,53.5 + parent: 2 + - uid: 4434 + components: + - type: Transform + pos: 45.5,56.5 + parent: 2 + - uid: 4589 + components: + - type: Transform + pos: 25.5,-17.5 + parent: 2 + - uid: 4590 + components: + - type: Transform + pos: 23.5,-29.5 + parent: 2 + - uid: 4642 + components: + - type: Transform + pos: 22.5,-29.5 + parent: 2 + - uid: 4643 + components: + - type: Transform + pos: 22.5,-30.5 + parent: 2 + - uid: 4716 + components: + - type: Transform + pos: 23.5,-43.5 + parent: 2 + - uid: 4717 + components: + - type: Transform + pos: 24.5,-27.5 + parent: 2 + - uid: 4718 + components: + - type: Transform + pos: 24.5,-29.5 + parent: 2 + - uid: 4719 + components: + - type: Transform + pos: 22.5,-31.5 + parent: 2 + - uid: 4726 + components: + - type: Transform + pos: -15.5,23.5 + parent: 2 + - uid: 4727 + components: + - type: Transform + pos: -12.5,24.5 + parent: 2 + - uid: 4730 + components: + - type: Transform + pos: -12.5,23.5 + parent: 2 + - uid: 4747 + components: + - type: Transform + pos: 23.5,-38.5 + parent: 2 + - uid: 4748 + components: + - type: Transform + pos: 22.5,-32.5 + parent: 2 + - uid: 4749 + components: + - type: Transform + pos: 22.5,-33.5 + parent: 2 + - uid: 4750 + components: + - type: Transform + pos: 23.5,-39.5 + parent: 2 + - uid: 4751 + components: + - type: Transform + pos: 23.5,-40.5 + parent: 2 + - uid: 4752 + components: + - type: Transform + pos: 22.5,-35.5 + parent: 2 + - uid: 4753 + components: + - type: Transform + pos: 23.5,-42.5 + parent: 2 + - uid: 4754 + components: + - type: Transform + pos: 23.5,-45.5 + parent: 2 + - uid: 4755 + components: + - type: Transform + pos: 22.5,-36.5 + parent: 2 + - uid: 4756 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,40.5 + parent: 2 + - uid: 4757 + components: + - type: Transform + pos: 27.5,-12.5 + parent: 2 + - uid: 4760 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,39.5 + parent: 2 + - uid: 4761 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,37.5 + parent: 2 + - uid: 4762 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,37.5 + parent: 2 + - uid: 4764 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,37.5 + parent: 2 + - uid: 4765 + components: + - type: Transform + pos: 28.5,-12.5 + parent: 2 + - uid: 5068 + components: + - type: Transform + pos: 7.5,0.5 + parent: 2 + - uid: 5736 + components: + - type: Transform + pos: 30.5,-7.5 + parent: 2 + - uid: 5737 + components: + - type: Transform + pos: 30.5,-8.5 + parent: 2 + - uid: 5789 + components: + - type: Transform + pos: 30.5,-9.5 + parent: 2 + - uid: 5790 + components: + - type: Transform + pos: 30.5,-10.5 + parent: 2 + - uid: 5793 + components: + - type: Transform + pos: 30.5,-11.5 + parent: 2 + - uid: 5794 + components: + - type: Transform + pos: 29.5,-9.5 + parent: 2 + - uid: 5798 + components: + - type: Transform + pos: 28.5,-9.5 + parent: 2 + - uid: 5799 + components: + - type: Transform + pos: 27.5,-9.5 + parent: 2 + - uid: 5808 + components: + - type: Transform + pos: 24.5,-9.5 + parent: 2 + - uid: 5809 + components: + - type: Transform + pos: 32.5,-9.5 + parent: 2 + - uid: 5989 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,5.5 + parent: 2 + - uid: 5990 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -40.5,30.5 + parent: 2 + - uid: 5991 + components: + - type: Transform + pos: -24.5,-11.5 + parent: 2 + - uid: 5992 + components: + - type: Transform + pos: -25.5,-11.5 + parent: 2 + - uid: 5993 + components: + - type: Transform + pos: -22.5,-1.5 + parent: 2 + - uid: 5995 + components: + - type: Transform + pos: -22.5,-2.5 + parent: 2 + - uid: 5996 + components: + - type: Transform + pos: -26.5,-11.5 + parent: 2 + - uid: 6003 + components: + - type: Transform + pos: -24.5,-3.5 + parent: 2 + - uid: 6004 + components: + - type: Transform + pos: -23.5,-13.5 + parent: 2 + - uid: 6005 + components: + - type: Transform + pos: -22.5,-10.5 + parent: 2 + - uid: 6006 + components: + - type: Transform + pos: -22.5,-11.5 + parent: 2 + - uid: 6007 + components: + - type: Transform + pos: -22.5,-6.5 + parent: 2 + - uid: 6008 + components: + - type: Transform + pos: -22.5,-7.5 + parent: 2 + - uid: 6009 + components: + - type: Transform + pos: -22.5,-8.5 + parent: 2 + - uid: 6010 + components: + - type: Transform + pos: -22.5,-9.5 + parent: 2 + - uid: 6011 + components: + - type: Transform + pos: -23.5,-3.5 + parent: 2 + - uid: 6012 + components: + - type: Transform + pos: -23.5,-11.5 + parent: 2 + - uid: 6013 + components: + - type: Transform + pos: -23.5,-12.5 + parent: 2 + - uid: 6017 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -42.5,25.5 + parent: 2 + - uid: 6018 + components: + - type: Transform + pos: -27.5,-11.5 + parent: 2 + - uid: 6019 + components: + - type: Transform + pos: 33.5,79.5 + parent: 2 + - uid: 6020 + components: + - type: Transform + pos: -29.5,-11.5 + parent: 2 + - uid: 6021 + components: + - type: Transform + pos: -28.5,-11.5 + parent: 2 + - uid: 6022 + components: + - type: Transform + pos: 33.5,77.5 + parent: 2 + - uid: 6023 + components: + - type: Transform + pos: -26.5,21.5 + parent: 2 + - uid: 6024 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -35.5,21.5 + parent: 2 + - uid: 6025 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -35.5,19.5 + parent: 2 + - uid: 6026 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -35.5,17.5 + parent: 2 + - uid: 6027 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -35.5,15.5 + parent: 2 + - uid: 6028 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -35.5,13.5 + parent: 2 + - uid: 6029 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -35.5,11.5 + parent: 2 + - uid: 6030 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -35.5,9.5 + parent: 2 + - uid: 6031 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -35.5,7.5 + parent: 2 + - uid: 6032 + components: + - type: Transform + pos: -33.5,5.5 + parent: 2 + - uid: 6033 + components: + - type: Transform + pos: -31.5,5.5 + parent: 2 + - uid: 6034 + components: + - type: Transform + pos: -29.5,5.5 + parent: 2 + - uid: 6035 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,3.5 + parent: 2 + - uid: 6036 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,2.5 + parent: 2 + - uid: 6037 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,3.5 + parent: 2 + - uid: 6038 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,2.5 + parent: 2 + - uid: 6039 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -29.5,48.5 + parent: 2 + - uid: 6040 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -38.5,52.5 + parent: 2 + - uid: 6041 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -38.5,51.5 + parent: 2 + - uid: 6042 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -37.5,52.5 + parent: 2 + - uid: 6043 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -37.5,51.5 + parent: 2 + - uid: 6044 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,52.5 + parent: 2 + - uid: 6045 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,51.5 + parent: 2 + - uid: 6046 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -37.5,50.5 + parent: 2 + - uid: 6055 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,71.5 + parent: 2 + - uid: 6057 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,71.5 + parent: 2 + - uid: 6058 + components: + - type: Transform + pos: 4.5,0.5 + parent: 2 + - uid: 6059 + components: + - type: Transform + pos: 5.5,0.5 + parent: 2 + - uid: 6060 + components: + - type: Transform + pos: 6.5,0.5 + parent: 2 + - uid: 6063 + components: + - type: Transform + pos: 7.5,-0.5 + parent: 2 + - uid: 6064 + components: + - type: Transform + pos: 8.5,-0.5 + parent: 2 + - uid: 6065 + components: + - type: Transform + pos: 9.5,-0.5 + parent: 2 + - uid: 6066 + components: + - type: Transform + pos: 10.5,-0.5 + parent: 2 + - uid: 6067 + components: + - type: Transform + pos: 11.5,-0.5 + parent: 2 + - uid: 6068 + components: + - type: Transform + pos: 12.5,-0.5 + parent: 2 + - uid: 6069 + components: + - type: Transform + pos: 13.5,-0.5 + parent: 2 + - uid: 6070 + components: + - type: Transform + pos: 13.5,-1.5 + parent: 2 + - uid: 6071 + components: + - type: Transform + pos: 12.5,-1.5 + parent: 2 + - uid: 6072 + components: + - type: Transform + pos: 11.5,-1.5 + parent: 2 + - uid: 6074 + components: + - type: Transform + pos: 16.5,-2.5 + parent: 2 + - uid: 6075 + components: + - type: Transform + pos: 33.5,-9.5 + parent: 2 + - uid: 6076 + components: + - type: Transform + pos: 26.5,-9.5 + parent: 2 + - uid: 6077 + components: + - type: Transform + pos: 57.5,8.5 + parent: 2 + - uid: 6078 + components: + - type: Transform + pos: 58.5,8.5 + parent: 2 + - uid: 6079 + components: + - type: Transform + pos: 59.5,8.5 + parent: 2 + - uid: 6080 + components: + - type: Transform + pos: 59.5,7.5 + parent: 2 + - uid: 6081 + components: + - type: Transform + pos: 59.5,6.5 + parent: 2 + - uid: 6082 + components: + - type: Transform + pos: 59.5,5.5 + parent: 2 + - uid: 6083 + components: + - type: Transform + pos: 59.5,4.5 + parent: 2 + - uid: 6084 + components: + - type: Transform + pos: 59.5,3.5 + parent: 2 + - uid: 6085 + components: + - type: Transform + pos: 59.5,2.5 + parent: 2 + - uid: 6086 + components: + - type: Transform + pos: 59.5,1.5 + parent: 2 + - uid: 6087 + components: + - type: Transform + pos: 59.5,0.5 + parent: 2 + - uid: 6088 + components: + - type: Transform + pos: 59.5,-0.5 + parent: 2 + - uid: 6089 + components: + - type: Transform + pos: 59.5,-1.5 + parent: 2 + - uid: 6090 + components: + - type: Transform + pos: 59.5,-3.5 + parent: 2 + - uid: 6091 + components: + - type: Transform + pos: 59.5,-4.5 + parent: 2 + - uid: 6092 + components: + - type: Transform + pos: 59.5,-5.5 + parent: 2 + - uid: 6093 + components: + - type: Transform + pos: 58.5,-5.5 + parent: 2 + - uid: 6094 + components: + - type: Transform + pos: 57.5,-5.5 + parent: 2 + - uid: 6095 + components: + - type: Transform + pos: 55.5,-7.5 + parent: 2 + - uid: 6096 + components: + - type: Transform + pos: 55.5,-8.5 + parent: 2 + - uid: 6097 + components: + - type: Transform + pos: 55.5,-9.5 + parent: 2 + - uid: 6098 + components: + - type: Transform + pos: 55.5,-10.5 + parent: 2 + - uid: 6099 + components: + - type: Transform + pos: 54.5,-10.5 + parent: 2 + - uid: 6100 + components: + - type: Transform + pos: 53.5,-10.5 + parent: 2 + - uid: 6101 + components: + - type: Transform + pos: 52.5,-10.5 + parent: 2 + - uid: 6102 + components: + - type: Transform + pos: 51.5,-10.5 + parent: 2 + - uid: 6103 + components: + - type: Transform + pos: 50.5,-10.5 + parent: 2 + - uid: 6104 + components: + - type: Transform + pos: 49.5,-10.5 + parent: 2 + - uid: 6105 + components: + - type: Transform + pos: 48.5,-10.5 + parent: 2 + - uid: 6106 + components: + - type: Transform + pos: 47.5,-10.5 + parent: 2 + - uid: 6107 + components: + - type: Transform + pos: 47.5,-9.5 + parent: 2 + - uid: 6108 + components: + - type: Transform + pos: 47.5,-8.5 + parent: 2 + - uid: 6109 + components: + - type: Transform + pos: 47.5,-7.5 + parent: 2 + - uid: 6110 + components: + - type: Transform + pos: 47.5,-6.5 + parent: 2 + - uid: 6111 + components: + - type: Transform + pos: 47.5,-5.5 + parent: 2 + - uid: 6112 + components: + - type: Transform + pos: 46.5,-5.5 + parent: 2 + - uid: 6113 + components: + - type: Transform + pos: 45.5,-5.5 + parent: 2 + - uid: 6114 + components: + - type: Transform + pos: 44.5,-5.5 + parent: 2 + - uid: 6115 + components: + - type: Transform + pos: 43.5,-5.5 + parent: 2 + - uid: 6116 + components: + - type: Transform + pos: 42.5,-5.5 + parent: 2 + - uid: 6117 + components: + - type: Transform + pos: 43.5,-4.5 + parent: 2 + - uid: 6118 + components: + - type: Transform + pos: 43.5,-3.5 + parent: 2 + - uid: 6119 + components: + - type: Transform + pos: 42.5,-3.5 + parent: 2 + - uid: 6120 + components: + - type: Transform + pos: 42.5,-4.5 + parent: 2 + - uid: 6121 + components: + - type: Transform + pos: 52.5,-13.5 + parent: 2 + - uid: 6122 + components: + - type: Transform + pos: 51.5,-11.5 + parent: 2 + - uid: 6123 + components: + - type: Transform + pos: 51.5,-22.5 + parent: 2 + - uid: 6124 + components: + - type: Transform + pos: 51.5,-21.5 + parent: 2 + - uid: 6125 + components: + - type: Transform + pos: 51.5,-20.5 + parent: 2 + - uid: 6126 + components: + - type: Transform + pos: 51.5,-19.5 + parent: 2 + - uid: 6127 + components: + - type: Transform + pos: 51.5,-18.5 + parent: 2 + - uid: 6128 + components: + - type: Transform + pos: 51.5,-17.5 + parent: 2 + - uid: 6129 + components: + - type: Transform + pos: 51.5,-16.5 + parent: 2 + - uid: 6130 + components: + - type: Transform + pos: 51.5,-15.5 + parent: 2 + - uid: 6131 + components: + - type: Transform + pos: 51.5,-13.5 + parent: 2 + - uid: 6132 + components: + - type: Transform + pos: 51.5,-12.5 + parent: 2 + - uid: 6133 + components: + - type: Transform + pos: 51.5,-14.5 + parent: 2 + - uid: 6134 + components: + - type: Transform + pos: 51.5,-23.5 + parent: 2 + - uid: 6135 + components: + - type: Transform + pos: 50.5,-21.5 + parent: 2 + - uid: 6136 + components: + - type: Transform + pos: 49.5,-21.5 + parent: 2 + - uid: 6137 + components: + - type: Transform + pos: 48.5,-21.5 + parent: 2 + - uid: 6138 + components: + - type: Transform + pos: 47.5,-21.5 + parent: 2 + - uid: 6139 + components: + - type: Transform + pos: 46.5,-21.5 + parent: 2 + - uid: 6140 + components: + - type: Transform + pos: 45.5,-21.5 + parent: 2 + - uid: 6141 + components: + - type: Transform + pos: 52.5,-21.5 + parent: 2 + - uid: 6142 + components: + - type: Transform + pos: 53.5,-21.5 + parent: 2 + - uid: 6143 + components: + - type: Transform + pos: 54.5,-21.5 + parent: 2 + - uid: 6144 + components: + - type: Transform + pos: 55.5,-21.5 + parent: 2 + - uid: 6145 + components: + - type: Transform + pos: 56.5,-21.5 + parent: 2 + - uid: 6146 + components: + - type: Transform + pos: 57.5,-21.5 + parent: 2 + - uid: 6147 + components: + - type: Transform + pos: 52.5,-17.5 + parent: 2 + - uid: 6148 + components: + - type: Transform + pos: 53.5,-17.5 + parent: 2 + - uid: 6149 + components: + - type: Transform + pos: 54.5,-17.5 + parent: 2 + - uid: 6150 + components: + - type: Transform + pos: 55.5,-17.5 + parent: 2 + - uid: 6151 + components: + - type: Transform + pos: 56.5,-17.5 + parent: 2 + - uid: 6152 + components: + - type: Transform + pos: 57.5,-17.5 + parent: 2 + - uid: 6153 + components: + - type: Transform + pos: 50.5,-17.5 + parent: 2 + - uid: 6154 + components: + - type: Transform + pos: 49.5,-17.5 + parent: 2 + - uid: 6155 + components: + - type: Transform + pos: 48.5,-17.5 + parent: 2 + - uid: 6156 + components: + - type: Transform + pos: 47.5,-17.5 + parent: 2 + - uid: 6157 + components: + - type: Transform + pos: 46.5,-17.5 + parent: 2 + - uid: 6158 + components: + - type: Transform + pos: 45.5,-17.5 + parent: 2 + - uid: 6159 + components: + - type: Transform + pos: 53.5,-13.5 + parent: 2 + - uid: 6160 + components: + - type: Transform + pos: 54.5,-13.5 + parent: 2 + - uid: 6161 + components: + - type: Transform + pos: 55.5,-13.5 + parent: 2 + - uid: 6162 + components: + - type: Transform + pos: 56.5,-13.5 + parent: 2 + - uid: 6163 + components: + - type: Transform + pos: 57.5,-13.5 + parent: 2 + - uid: 6164 + components: + - type: Transform + pos: 50.5,-13.5 + parent: 2 + - uid: 6165 + components: + - type: Transform + pos: 49.5,-13.5 + parent: 2 + - uid: 6166 + components: + - type: Transform + pos: 48.5,-13.5 + parent: 2 + - uid: 6167 + components: + - type: Transform + pos: 47.5,-13.5 + parent: 2 + - uid: 6168 + components: + - type: Transform + pos: 46.5,-13.5 + parent: 2 + - uid: 6169 + components: + - type: Transform + pos: 45.5,-13.5 + parent: 2 + - uid: 6170 + components: + - type: Transform + pos: 61.5,-2.5 + parent: 2 + - uid: 6171 + components: + - type: Transform + pos: 62.5,-2.5 + parent: 2 + - uid: 6172 + components: + - type: Transform + pos: 63.5,-2.5 + parent: 2 + - uid: 6173 + components: + - type: Transform + pos: 64.5,-2.5 + parent: 2 + - uid: 6174 + components: + - type: Transform + pos: 65.5,-2.5 + parent: 2 + - uid: 6175 + components: + - type: Transform + pos: 66.5,-2.5 + parent: 2 + - uid: 6176 + components: + - type: Transform + pos: 67.5,-2.5 + parent: 2 + - uid: 6177 + components: + - type: Transform + pos: 68.5,-2.5 + parent: 2 + - uid: 6178 + components: + - type: Transform + pos: 69.5,-2.5 + parent: 2 + - uid: 6179 + components: + - type: Transform + pos: 70.5,-2.5 + parent: 2 + - uid: 6180 + components: + - type: Transform + pos: -24.5,-15.5 + parent: 2 + - uid: 6181 + components: + - type: Transform + pos: -22.5,3.5 + parent: 2 + - uid: 6182 + components: + - type: Transform + pos: -22.5,-0.5 + parent: 2 + - uid: 6183 + components: + - type: Transform + pos: -22.5,0.5 + parent: 2 + - uid: 6184 + components: + - type: Transform + pos: -22.5,1.5 + parent: 2 + - uid: 6185 + components: + - type: Transform + pos: -22.5,2.5 + parent: 2 + - uid: 6186 + components: + - type: Transform + pos: -23.5,-7.5 + parent: 2 + - uid: 6187 + components: + - type: Transform + pos: -24.5,-7.5 + parent: 2 + - uid: 6188 + components: + - type: Transform + pos: -25.5,-7.5 + parent: 2 + - uid: 6189 + components: + - type: Transform + pos: -26.5,-7.5 + parent: 2 + - uid: 6190 + components: + - type: Transform + pos: -27.5,-7.5 + parent: 2 + - uid: 6191 + components: + - type: Transform + pos: -28.5,-7.5 + parent: 2 + - uid: 6194 + components: + - type: Transform + pos: -22.5,-5.5 + parent: 2 + - uid: 6195 + components: + - type: Transform + pos: -25.5,-3.5 + parent: 2 + - uid: 6196 + components: + - type: Transform + pos: -26.5,-3.5 + parent: 2 + - uid: 6197 + components: + - type: Transform + pos: -27.5,-3.5 + parent: 2 + - uid: 6198 + components: + - type: Transform + pos: -28.5,-3.5 + parent: 2 + - uid: 6199 + components: + - type: Transform + pos: -22.5,-4.5 + parent: 2 + - uid: 6200 + components: + - type: Transform + pos: -25.5,-15.5 + parent: 2 + - uid: 6201 + components: + - type: Transform + pos: -26.5,-15.5 + parent: 2 + - uid: 6202 + components: + - type: Transform + pos: -27.5,-15.5 + parent: 2 + - uid: 6203 + components: + - type: Transform + pos: -28.5,-15.5 + parent: 2 + - uid: 6204 + components: + - type: Transform + pos: -29.5,-15.5 + parent: 2 + - uid: 6205 + components: + - type: Transform + pos: -30.5,-15.5 + parent: 2 + - uid: 6206 + components: + - type: Transform + pos: 33.5,80.5 + parent: 2 + - uid: 6207 + components: + - type: Transform + pos: -23.5,-17.5 + parent: 2 + - uid: 6208 + components: + - type: Transform + pos: 33.5,68.5 + parent: 2 + - uid: 6209 + components: + - type: Transform + pos: 33.5,78.5 + parent: 2 + - uid: 6210 + components: + - type: Transform + pos: 33.5,69.5 + parent: 2 + - uid: 6211 + components: + - type: Transform + pos: 33.5,76.5 + parent: 2 + - uid: 6212 + components: + - type: Transform + pos: 33.5,75.5 + parent: 2 + - uid: 6213 + components: + - type: Transform + pos: 33.5,74.5 + parent: 2 + - uid: 6214 + components: + - type: Transform + pos: 33.5,73.5 + parent: 2 + - uid: 6215 + components: + - type: Transform + pos: 33.5,72.5 + parent: 2 + - uid: 6216 + components: + - type: Transform + pos: 33.5,71.5 + parent: 2 + - uid: 6217 + components: + - type: Transform + pos: 33.5,70.5 + parent: 2 + - uid: 6218 + components: + - type: Transform + pos: 27.5,78.5 + parent: 2 + - uid: 6219 + components: + - type: Transform + pos: 28.5,78.5 + parent: 2 + - uid: 6220 + components: + - type: Transform + pos: 29.5,78.5 + parent: 2 + - uid: 6221 + components: + - type: Transform + pos: 30.5,78.5 + parent: 2 + - uid: 6222 + components: + - type: Transform + pos: 31.5,78.5 + parent: 2 + - uid: 6223 + components: + - type: Transform + pos: 32.5,78.5 + parent: 2 + - uid: 6224 + components: + - type: Transform + pos: 34.5,78.5 + parent: 2 + - uid: 6225 + components: + - type: Transform + pos: 35.5,78.5 + parent: 2 + - uid: 6226 + components: + - type: Transform + pos: 36.5,78.5 + parent: 2 + - uid: 6227 + components: + - type: Transform + pos: 37.5,78.5 + parent: 2 + - uid: 6228 + components: + - type: Transform + pos: 38.5,78.5 + parent: 2 + - uid: 6229 + components: + - type: Transform + pos: 39.5,78.5 + parent: 2 + - uid: 6230 + components: + - type: Transform + pos: 27.5,74.5 + parent: 2 + - uid: 6231 + components: + - type: Transform + pos: 28.5,74.5 + parent: 2 + - uid: 6232 + components: + - type: Transform + pos: 29.5,74.5 + parent: 2 + - uid: 6233 + components: + - type: Transform + pos: 30.5,74.5 + parent: 2 + - uid: 6234 + components: + - type: Transform + pos: 31.5,74.5 + parent: 2 + - uid: 6235 + components: + - type: Transform + pos: 32.5,74.5 + parent: 2 + - uid: 6236 + components: + - type: Transform + pos: 32.5,70.5 + parent: 2 + - uid: 6237 + components: + - type: Transform + pos: 34.5,74.5 + parent: 2 + - uid: 6238 + components: + - type: Transform + pos: 35.5,74.5 + parent: 2 + - uid: 6239 + components: + - type: Transform + pos: 36.5,74.5 + parent: 2 + - uid: 6240 + components: + - type: Transform + pos: 37.5,74.5 + parent: 2 + - uid: 6241 + components: + - type: Transform + pos: 38.5,74.5 + parent: 2 + - uid: 6242 + components: + - type: Transform + pos: 39.5,74.5 + parent: 2 + - uid: 6243 + components: + - type: Transform + pos: 31.5,70.5 + parent: 2 + - uid: 6244 + components: + - type: Transform + pos: 30.5,70.5 + parent: 2 + - uid: 6245 + components: + - type: Transform + pos: 29.5,70.5 + parent: 2 + - uid: 6246 + components: + - type: Transform + pos: 28.5,70.5 + parent: 2 + - uid: 6247 + components: + - type: Transform + pos: 27.5,70.5 + parent: 2 + - uid: 6248 + components: + - type: Transform + pos: 34.5,70.5 + parent: 2 + - uid: 6249 + components: + - type: Transform + pos: 35.5,70.5 + parent: 2 + - uid: 6250 + components: + - type: Transform + pos: 36.5,70.5 + parent: 2 + - uid: 6251 + components: + - type: Transform + pos: 37.5,70.5 + parent: 2 + - uid: 6252 + components: + - type: Transform + pos: 38.5,70.5 + parent: 2 + - uid: 6253 + components: + - type: Transform + pos: 39.5,70.5 + parent: 2 + - uid: 6254 + components: + - type: Transform + pos: 32.5,68.5 + parent: 2 + - uid: 6255 + components: + - type: Transform + pos: 34.5,68.5 + parent: 2 + - uid: 6256 + components: + - type: Transform + pos: 34.5,69.5 + parent: 2 + - uid: 6257 + components: + - type: Transform + pos: 32.5,69.5 + parent: 2 + - uid: 6258 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 75.5,-4.5 + parent: 2 + - uid: 6259 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 76.5,-3.5 + parent: 2 + - uid: 6260 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 76.5,-2.5 + parent: 2 + - uid: 6261 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 76.5,-1.5 + parent: 2 + - uid: 6262 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 76.5,-4.5 + parent: 2 + - uid: 6263 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 70.5,-5.5 + parent: 2 + - uid: 6264 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 70.5,-3.5 + parent: 2 + - uid: 6265 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 70.5,-4.5 + parent: 2 + - uid: 6266 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 71.5,-4.5 + parent: 2 + - uid: 6267 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 70.5,-6.5 + parent: 2 + - uid: 6268 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 76.5,-5.5 + parent: 2 + - uid: 6269 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 76.5,-6.5 + parent: 2 + - uid: 6270 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 70.5,-8.5 + parent: 2 + - uid: 6271 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 76.5,-8.5 + parent: 2 + - uid: 6272 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 70.5,-11.5 + parent: 2 + - uid: 6273 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 76.5,-11.5 + parent: 2 + - uid: 6274 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 76.5,-15.5 + parent: 2 + - uid: 6275 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 70.5,-15.5 + parent: 2 + - uid: 6276 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,44.5 + parent: 2 + - uid: 6277 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,45.5 + parent: 2 + - uid: 6278 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,44.5 + parent: 2 + - uid: 6279 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,45.5 + parent: 2 + - uid: 6280 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,45.5 + parent: 2 + - uid: 6281 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,45.5 + parent: 2 + - uid: 6282 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,45.5 + parent: 2 + - uid: 6283 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -41.5,25.5 + parent: 2 + - uid: 6284 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -41.5,27.5 + parent: 2 + - uid: 6285 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -41.5,28.5 + parent: 2 + - uid: 6286 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -42.5,27.5 + parent: 2 + - uid: 6287 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -43.5,25.5 + parent: 2 + - uid: 6288 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -41.5,24.5 + parent: 2 + - uid: 6289 + components: + - type: Transform + pos: -23.5,-15.5 + parent: 2 + - uid: 6290 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -43.5,26.5 + parent: 2 + - uid: 6291 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -43.5,27.5 + parent: 2 + - uid: 6292 + components: + - type: Transform + pos: -23.5,-14.5 + parent: 2 + - uid: 6293 + components: + - type: Transform + pos: -23.5,-16.5 + parent: 2 + - uid: 6294 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -41.5,29.5 + parent: 2 + - uid: 6295 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -40.5,29.5 + parent: 2 + - uid: 6296 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 59.5,-2.5 + parent: 2 + - uid: 6297 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 56.5,-5.5 + parent: 2 + - uid: 6298 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 55.5,-5.5 + parent: 2 + - uid: 6299 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 55.5,-6.5 + parent: 2 + - uid: 6300 + components: + - type: Transform + pos: -22.5,-3.5 + parent: 2 + - uid: 6301 + components: + - type: Transform + pos: 25.5,-9.5 + parent: 2 + - uid: 6302 + components: + - type: Transform + pos: 74.5,18.5 + parent: 2 + - uid: 6303 + components: + - type: Transform + pos: 74.5,17.5 + parent: 2 + - uid: 6304 + components: + - type: Transform + pos: 75.5,17.5 + parent: 2 + - uid: 6305 + components: + - type: Transform + pos: 75.5,16.5 + parent: 2 + - uid: 6306 + components: + - type: Transform + pos: 75.5,15.5 + parent: 2 + - uid: 6307 + components: + - type: Transform + pos: 74.5,19.5 + parent: 2 + - uid: 6308 + components: + - type: Transform + pos: 74.5,20.5 + parent: 2 + - uid: 6309 + components: + - type: Transform + pos: 75.5,20.5 + parent: 2 + - uid: 6310 + components: + - type: Transform + pos: 76.5,20.5 + parent: 2 + - uid: 6311 + components: + - type: Transform + pos: 77.5,20.5 + parent: 2 + - uid: 6312 + components: + - type: Transform + pos: 78.5,20.5 + parent: 2 + - uid: 6313 + components: + - type: Transform + pos: 78.5,19.5 + parent: 2 + - uid: 6314 + components: + - type: Transform + pos: 79.5,19.5 + parent: 2 + - uid: 6315 + components: + - type: Transform + pos: 80.5,19.5 + parent: 2 + - uid: 6316 + components: + - type: Transform + pos: 81.5,19.5 + parent: 2 + - uid: 6317 + components: + - type: Transform + pos: 81.5,46.5 + parent: 2 + - uid: 6318 + components: + - type: Transform + pos: 76.5,47.5 + parent: 2 + - uid: 6319 + components: + - type: Transform + pos: 74.5,47.5 + parent: 2 + - uid: 6320 + components: + - type: Transform + pos: 75.5,47.5 + parent: 2 + - uid: 6321 + components: + - type: Transform + pos: 78.5,47.5 + parent: 2 + - uid: 6322 + components: + - type: Transform + pos: 77.5,47.5 + parent: 2 + - uid: 6326 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 79.5,53.5 + parent: 2 + - uid: 6327 + components: + - type: Transform + pos: 75.5,53.5 + parent: 2 + - uid: 6328 + components: + - type: Transform + pos: 74.5,53.5 + parent: 2 + - uid: 6329 + components: + - type: Transform + pos: 73.5,53.5 + parent: 2 + - uid: 6330 + components: + - type: Transform + pos: 73.5,54.5 + parent: 2 + - uid: 6332 + components: + - type: Transform + pos: 62.5,26.5 + parent: 2 + - uid: 6333 + components: + - type: Transform + pos: 62.5,25.5 + parent: 2 + - uid: 6334 + components: + - type: Transform + pos: 62.5,24.5 + parent: 2 + - uid: 6335 + components: + - type: Transform + pos: 62.5,23.5 + parent: 2 + - uid: 6336 + components: + - type: Transform + pos: 62.5,22.5 + parent: 2 + - uid: 6337 + components: + - type: Transform + pos: 62.5,21.5 + parent: 2 + - uid: 6338 + components: + - type: Transform + pos: 62.5,20.5 + parent: 2 + - uid: 6339 + components: + - type: Transform + pos: 62.5,19.5 + parent: 2 + - uid: 6340 + components: + - type: Transform + pos: 62.5,18.5 + parent: 2 + - uid: 6341 + components: + - type: Transform + pos: 61.5,18.5 + parent: 2 + - uid: 6342 + components: + - type: Transform + pos: 61.5,17.5 + parent: 2 + - uid: 6343 + components: + - type: Transform + pos: 61.5,16.5 + parent: 2 + - uid: 6344 + components: + - type: Transform + pos: 61.5,15.5 + parent: 2 + - uid: 6345 + components: + - type: Transform + pos: 61.5,14.5 + parent: 2 + - uid: 6346 + components: + - type: Transform + pos: 61.5,13.5 + parent: 2 + - uid: 6347 + components: + - type: Transform + pos: 60.5,13.5 + parent: 2 + - uid: 6348 + components: + - type: Transform + pos: 59.5,13.5 + parent: 2 + - uid: 6349 + components: + - type: Transform + pos: 58.5,13.5 + parent: 2 + - uid: 6350 + components: + - type: Transform + pos: 57.5,13.5 + parent: 2 + - uid: 6351 + components: + - type: Transform + pos: 56.5,13.5 + parent: 2 + - uid: 6352 + components: + - type: Transform + pos: 55.5,13.5 + parent: 2 + - uid: 6353 + components: + - type: Transform + pos: 55.5,12.5 + parent: 2 + - uid: 6354 + components: + - type: Transform + pos: 55.5,11.5 + parent: 2 + - uid: 6355 + components: + - type: Transform + pos: 54.5,11.5 + parent: 2 + - uid: 6356 + components: + - type: Transform + pos: 53.5,11.5 + parent: 2 + - uid: 6357 + components: + - type: Transform + pos: 52.5,11.5 + parent: 2 + - uid: 6358 + components: + - type: Transform + pos: 52.5,10.5 + parent: 2 + - uid: 6359 + components: + - type: Transform + pos: 57.5,12.5 + parent: 2 + - uid: 6360 + components: + - type: Transform + pos: 46.5,10.5 + parent: 2 + - uid: 6361 + components: + - type: Transform + pos: 45.5,10.5 + parent: 2 + - uid: 6362 + components: + - type: Transform + pos: 44.5,10.5 + parent: 2 + - uid: 6363 + components: + - type: Transform + pos: 43.5,10.5 + parent: 2 + - uid: 6364 + components: + - type: Transform + pos: 43.5,9.5 + parent: 2 + - uid: 6365 + components: + - type: Transform + pos: 43.5,8.5 + parent: 2 + - uid: 6366 + components: + - type: Transform + pos: 43.5,7.5 + parent: 2 + - uid: 6367 + components: + - type: Transform + pos: 43.5,6.5 + parent: 2 + - uid: 6368 + components: + - type: Transform + pos: 43.5,5.5 + parent: 2 + - uid: 6369 + components: + - type: Transform + pos: 43.5,4.5 + parent: 2 + - uid: 6370 + components: + - type: Transform + pos: 44.5,7.5 + parent: 2 + - uid: 6371 + components: + - type: Transform + pos: 42.5,4.5 + parent: 2 + - uid: 6372 + components: + - type: Transform + pos: 41.5,4.5 + parent: 2 + - uid: 6373 + components: + - type: Transform + pos: 40.5,4.5 + parent: 2 + - uid: 6374 + components: + - type: Transform + pos: 39.5,4.5 + parent: 2 + - uid: 6375 + components: + - type: Transform + pos: 38.5,4.5 + parent: 2 + - uid: 6376 + components: + - type: Transform + pos: 32.5,7.5 + parent: 2 + - uid: 6377 + components: + - type: Transform + pos: 31.5,7.5 + parent: 2 + - uid: 6378 + components: + - type: Transform + pos: 30.5,7.5 + parent: 2 + - uid: 6379 + components: + - type: Transform + pos: 29.5,7.5 + parent: 2 + - uid: 6380 + components: + - type: Transform + pos: 28.5,7.5 + parent: 2 + - uid: 6381 + components: + - type: Transform + pos: 27.5,7.5 + parent: 2 + - uid: 6382 + components: + - type: Transform + pos: 26.5,7.5 + parent: 2 + - uid: 6383 + components: + - type: Transform + pos: 25.5,7.5 + parent: 2 + - uid: 6384 + components: + - type: Transform + pos: 27.5,6.5 + parent: 2 + - uid: 6385 + components: + - type: Transform + pos: 25.5,6.5 + parent: 2 + - uid: 6386 + components: + - type: Transform + pos: 24.5,6.5 + parent: 2 + - uid: 6387 + components: + - type: Transform + pos: 23.5,6.5 + parent: 2 + - uid: 6388 + components: + - type: Transform + pos: 22.5,6.5 + parent: 2 + - uid: 6389 + components: + - type: Transform + pos: 20.5,6.5 + parent: 2 + - uid: 6390 + components: + - type: Transform + pos: 19.5,6.5 + parent: 2 + - uid: 6391 + components: + - type: Transform + pos: 18.5,6.5 + parent: 2 + - uid: 6392 + components: + - type: Transform + pos: 19.5,5.5 + parent: 2 + - uid: 6393 + components: + - type: Transform + pos: 19.5,4.5 + parent: 2 + - uid: 6394 + components: + - type: Transform + pos: 17.5,6.5 + parent: 2 + - uid: 6395 + components: + - type: Transform + pos: 16.5,6.5 + parent: 2 + - uid: 6396 + components: + - type: Transform + pos: 15.5,6.5 + parent: 2 + - uid: 6397 + components: + - type: Transform + pos: 15.5,5.5 + parent: 2 + - uid: 6398 + components: + - type: Transform + pos: 15.5,7.5 + parent: 2 + - uid: 6399 + components: + - type: Transform + pos: 15.5,8.5 + parent: 2 + - uid: 6400 + components: + - type: Transform + pos: 15.5,9.5 + parent: 2 + - uid: 6401 + components: + - type: Transform + pos: 15.5,10.5 + parent: 2 + - uid: 6402 + components: + - type: Transform + pos: 16.5,10.5 + parent: 2 + - uid: 6403 + components: + - type: Transform + pos: 17.5,10.5 + parent: 2 + - uid: 6404 + components: + - type: Transform + pos: 18.5,10.5 + parent: 2 + - uid: 6405 + components: + - type: Transform + pos: 18.5,9.5 + parent: 2 + - uid: 6406 + components: + - type: Transform + pos: 18.5,8.5 + parent: 2 + - uid: 6407 + components: + - type: Transform + pos: 16.5,11.5 + parent: 2 + - uid: 6408 + components: + - type: Transform + pos: 16.5,12.5 + parent: 2 + - uid: 6409 + components: + - type: Transform + pos: 15.5,11.5 + parent: 2 + - uid: 6410 + components: + - type: Transform + pos: 15.5,12.5 + parent: 2 + - uid: 6411 + components: + - type: Transform + pos: 15.5,13.5 + parent: 2 + - uid: 6412 + components: + - type: Transform + pos: 15.5,14.5 + parent: 2 + - uid: 6413 + components: + - type: Transform + pos: 15.5,15.5 + parent: 2 + - uid: 6414 + components: + - type: Transform + pos: 7.5,7.5 + parent: 2 + - uid: 6415 + components: + - type: Transform + pos: 8.5,7.5 + parent: 2 + - uid: 6416 + components: + - type: Transform + pos: 9.5,7.5 + parent: 2 + - uid: 6417 + components: + - type: Transform + pos: 10.5,7.5 + parent: 2 + - uid: 6418 + components: + - type: Transform + pos: 11.5,7.5 + parent: 2 + - uid: 6419 + components: + - type: Transform + pos: 12.5,7.5 + parent: 2 + - uid: 6420 + components: + - type: Transform + pos: 13.5,7.5 + parent: 2 + - uid: 6421 + components: + - type: Transform + pos: 14.5,7.5 + parent: 2 + - uid: 6422 + components: + - type: Transform + pos: 12.5,6.5 + parent: 2 + - uid: 6423 + components: + - type: Transform + pos: 12.5,5.5 + parent: 2 + - uid: 6424 + components: + - type: Transform + pos: 12.5,4.5 + parent: 2 + - uid: 6425 + components: + - type: Transform + pos: 12.5,3.5 + parent: 2 + - uid: 6426 + components: + - type: Transform + pos: -18.5,8.5 + parent: 2 + - uid: 6427 + components: + - type: Transform + pos: -18.5,7.5 + parent: 2 + - uid: 6428 + components: + - type: Transform + pos: -18.5,6.5 + parent: 2 + - uid: 6429 + components: + - type: Transform + pos: -17.5,6.5 + parent: 2 + - uid: 6430 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,10.5 + parent: 2 + - uid: 6431 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,11.5 + parent: 2 + - uid: 6432 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,11.5 + parent: 2 + - uid: 6433 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,11.5 + parent: 2 + - uid: 6434 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,11.5 + parent: 2 + - uid: 6435 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -16.5,11.5 + parent: 2 + - uid: 6436 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,11.5 + parent: 2 + - uid: 6437 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,14.5 + parent: 2 + - uid: 6438 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,14.5 + parent: 2 + - uid: 6439 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,13.5 + parent: 2 + - uid: 6440 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,12.5 + parent: 2 + - uid: 6441 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,15.5 + parent: 2 + - uid: 6442 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,15.5 + parent: 2 + - uid: 6443 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -21.5,14.5 + parent: 2 + - uid: 6444 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,14.5 + parent: 2 + - uid: 6445 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,13.5 + parent: 2 + - uid: 6446 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,12.5 + parent: 2 + - uid: 6447 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,11.5 + parent: 2 + - uid: 6448 + components: + - type: Transform + pos: -15.5,12.5 + parent: 2 + - uid: 6449 + components: + - type: Transform + pos: -15.5,13.5 + parent: 2 + - uid: 6450 + components: + - type: Transform + pos: -15.5,14.5 + parent: 2 + - uid: 6451 + components: + - type: Transform + pos: -15.5,15.5 + parent: 2 + - uid: 6452 + components: + - type: Transform + pos: -15.5,16.5 + parent: 2 + - uid: 6453 + components: + - type: Transform + pos: -14.5,16.5 + parent: 2 + - uid: 6454 + components: + - type: Transform + pos: -13.5,16.5 + parent: 2 + - uid: 6455 + components: + - type: Transform + pos: -12.5,16.5 + parent: 2 + - uid: 6456 + components: + - type: Transform + pos: -11.5,16.5 + parent: 2 + - uid: 6457 + components: + - type: Transform + pos: -10.5,16.5 + parent: 2 + - uid: 6458 + components: + - type: Transform + pos: -9.5,16.5 + parent: 2 + - uid: 6459 + components: + - type: Transform + pos: -8.5,16.5 + parent: 2 + - uid: 6460 + components: + - type: Transform + pos: -8.5,17.5 + parent: 2 + - uid: 6462 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,69.5 + parent: 2 + - uid: 6463 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,68.5 + parent: 2 + - uid: 6464 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,67.5 + parent: 2 + - uid: 6465 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,66.5 + parent: 2 + - uid: 6466 + components: + - type: Transform + pos: 8.5,64.5 + parent: 2 + - uid: 6467 + components: + - type: Transform + pos: 9.5,64.5 + parent: 2 + - uid: 6468 + components: + - type: Transform + pos: 10.5,64.5 + parent: 2 + - uid: 6469 + components: + - type: Transform + pos: 11.5,64.5 + parent: 2 + - uid: 6470 + components: + - type: Transform + pos: 12.5,64.5 + parent: 2 + - uid: 6471 + components: + - type: Transform + pos: 13.5,64.5 + parent: 2 + - uid: 6472 + components: + - type: Transform + pos: 13.5,65.5 + parent: 2 + - uid: 6473 + components: + - type: Transform + pos: 13.5,66.5 + parent: 2 + - uid: 6474 + components: + - type: Transform + pos: 13.5,67.5 + parent: 2 + - uid: 6475 + components: + - type: Transform + pos: 13.5,68.5 + parent: 2 + - uid: 6476 + components: + - type: Transform + pos: 14.5,65.5 + parent: 2 + - uid: 6477 + components: + - type: Transform + pos: 15.5,65.5 + parent: 2 + - uid: 6478 + components: + - type: Transform + pos: 16.5,65.5 + parent: 2 + - uid: 6479 + components: + - type: Transform + pos: 17.5,65.5 + parent: 2 + - uid: 6480 + components: + - type: Transform + pos: 18.5,65.5 + parent: 2 + - uid: 6481 + components: + - type: Transform + pos: 14.5,68.5 + parent: 2 + - uid: 6482 + components: + - type: Transform + pos: 14.5,69.5 + parent: 2 + - uid: 6483 + components: + - type: Transform + pos: 14.5,70.5 + parent: 2 + - uid: 6484 + components: + - type: Transform + pos: 14.5,71.5 + parent: 2 + - uid: 6485 + components: + - type: Transform + pos: 14.5,72.5 + parent: 2 + - uid: 6486 + components: + - type: Transform + pos: 14.5,73.5 + parent: 2 + - uid: 6487 + components: + - type: Transform + pos: 14.5,74.5 + parent: 2 + - uid: 6488 + components: + - type: Transform + pos: 20.5,62.5 + parent: 2 + - uid: 6489 + components: + - type: Transform + pos: 20.5,63.5 + parent: 2 + - uid: 6490 + components: + - type: Transform + pos: 24.5,65.5 + parent: 2 + - uid: 6491 + components: + - type: Transform + pos: 24.5,64.5 + parent: 2 + - uid: 6492 + components: + - type: Transform + pos: 24.5,63.5 + parent: 2 + - uid: 6493 + components: + - type: Transform + pos: 24.5,62.5 + parent: 2 + - uid: 6494 + components: + - type: Transform + pos: 24.5,61.5 + parent: 2 + - uid: 6495 + components: + - type: Transform + pos: 24.5,60.5 + parent: 2 + - uid: 6496 + components: + - type: Transform + pos: 23.5,60.5 + parent: 2 + - uid: 6497 + components: + - type: Transform + pos: 22.5,60.5 + parent: 2 + - uid: 6498 + components: + - type: Transform + pos: 21.5,60.5 + parent: 2 + - uid: 6499 + components: + - type: Transform + pos: 20.5,60.5 + parent: 2 + - uid: 6500 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,60.5 + parent: 2 + - uid: 6501 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,60.5 + parent: 2 + - uid: 6502 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,60.5 + parent: 2 + - uid: 6503 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,60.5 + parent: 2 + - uid: 6504 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,60.5 + parent: 2 + - uid: 6505 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,60.5 + parent: 2 + - uid: 6506 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,60.5 + parent: 2 + - uid: 6507 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,61.5 + parent: 2 + - uid: 6508 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,61.5 + parent: 2 + - uid: 6509 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.5,61.5 + parent: 2 + - uid: 6510 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 34.5,61.5 + parent: 2 + - uid: 6511 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 35.5,61.5 + parent: 2 + - uid: 6512 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 35.5,60.5 + parent: 2 + - uid: 6513 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 35.5,59.5 + parent: 2 + - uid: 6514 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 36.5,59.5 + parent: 2 + - uid: 6515 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 37.5,59.5 + parent: 2 + - uid: 6516 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 38.5,59.5 + parent: 2 + - uid: 6517 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 39.5,59.5 + parent: 2 + - uid: 6518 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 39.5,58.5 + parent: 2 + - uid: 6519 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 39.5,57.5 + parent: 2 + - uid: 6520 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 39.5,56.5 + parent: 2 + - uid: 6521 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,56.5 + parent: 2 + - uid: 6522 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,56.5 + parent: 2 + - uid: 6523 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,56.5 + parent: 2 + - uid: 6524 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 43.5,56.5 + parent: 2 + - uid: 6525 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,56.5 + parent: 2 + - uid: 6526 + components: + - type: Transform + pos: 46.5,56.5 + parent: 2 + - uid: 6528 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,55.5 + parent: 2 + - uid: 6529 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,54.5 + parent: 2 + - uid: 6530 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,53.5 + parent: 2 + - uid: 6531 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,52.5 + parent: 2 + - uid: 6532 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,51.5 + parent: 2 + - uid: 6533 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 47.5,52.5 + parent: 2 + - uid: 6534 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 47.5,51.5 + parent: 2 + - uid: 6535 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 47.5,50.5 + parent: 2 + - uid: 6536 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 45.5,51.5 + parent: 2 + - uid: 6537 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,51.5 + parent: 2 + - uid: 6538 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,50.5 + parent: 2 + - uid: 6539 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,49.5 + parent: 2 + - uid: 6540 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,48.5 + parent: 2 + - uid: 6541 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 47.5,56.5 + parent: 2 + - uid: 6542 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 48.5,56.5 + parent: 2 + - uid: 6543 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 49.5,56.5 + parent: 2 + - uid: 6544 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 50.5,56.5 + parent: 2 + - uid: 6545 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 51.5,56.5 + parent: 2 + - uid: 6546 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 51.5,57.5 + parent: 2 + - uid: 6547 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 52.5,56.5 + parent: 2 + - uid: 6548 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 53.5,56.5 + parent: 2 + - uid: 6549 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 53.5,55.5 + parent: 2 + - uid: 6550 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 53.5,54.5 + parent: 2 + - uid: 6551 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 53.5,53.5 + parent: 2 + - uid: 6552 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 54.5,53.5 + parent: 2 + - uid: 6553 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 55.5,53.5 + parent: 2 + - uid: 6554 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 56.5,53.5 + parent: 2 + - uid: 6555 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 57.5,53.5 + parent: 2 + - uid: 6556 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 53.5,57.5 + parent: 2 + - uid: 6557 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 54.5,57.5 + parent: 2 + - uid: 6558 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 55.5,57.5 + parent: 2 + - uid: 6559 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 56.5,57.5 + parent: 2 + - uid: 6560 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 57.5,57.5 + parent: 2 + - uid: 6561 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 57.5,52.5 + parent: 2 + - uid: 6562 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 57.5,51.5 + parent: 2 + - uid: 6563 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 57.5,50.5 + parent: 2 + - uid: 6564 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 57.5,49.5 + parent: 2 + - uid: 6565 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 57.5,48.5 + parent: 2 + - uid: 6566 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 58.5,48.5 + parent: 2 + - uid: 6567 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 59.5,47.5 + parent: 2 + - uid: 6568 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 59.5,48.5 + parent: 2 + - uid: 6569 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 60.5,47.5 + parent: 2 + - uid: 6570 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 61.5,47.5 + parent: 2 + - uid: 6571 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 62.5,47.5 + parent: 2 + - uid: 6572 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 60.5,46.5 + parent: 2 + - uid: 6573 + components: + - type: Transform + pos: 33.5,63.5 + parent: 2 + - uid: 6574 + components: + - type: Transform + pos: 34.5,63.5 + parent: 2 + - uid: 6575 + components: + - type: Transform + pos: 35.5,64.5 + parent: 2 + - uid: 6576 + components: + - type: Transform + pos: 31.5,-9.5 + parent: 2 + - uid: 6577 + components: + - type: Transform + pos: 34.5,-9.5 + parent: 2 + - uid: 6578 + components: + - type: Transform + pos: 35.5,-9.5 + parent: 2 + - uid: 6580 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 38.5,19.5 + parent: 2 + - uid: 6581 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 38.5,20.5 + parent: 2 + - uid: 6582 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 38.5,21.5 + parent: 2 + - uid: 6583 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 38.5,22.5 + parent: 2 + - uid: 6584 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 38.5,23.5 + parent: 2 + - uid: 6585 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,20.5 + parent: 2 + - uid: 6586 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 36.5,20.5 + parent: 2 + - uid: 6587 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 35.5,20.5 + parent: 2 + - uid: 6588 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 39.5,23.5 + parent: 2 + - uid: 6589 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,23.5 + parent: 2 + - uid: 6590 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,23.5 + parent: 2 + - uid: 6591 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,23.5 + parent: 2 + - uid: 6592 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 43.5,23.5 + parent: 2 + - uid: 6593 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,24.5 + parent: 2 + - uid: 6594 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,24.5 + parent: 2 + - uid: 6595 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,25.5 + parent: 2 + - uid: 6596 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,25.5 + parent: 2 + - uid: 6597 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,68.5 + parent: 2 + - uid: 6598 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,67.5 + parent: 2 + - uid: 6599 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,66.5 + parent: 2 + - uid: 6600 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 77.5,53.5 + parent: 2 + - uid: 6601 + components: + - type: Transform + pos: -15.5,25.5 + parent: 2 + - uid: 6602 + components: + - type: Transform + pos: -12.5,25.5 + parent: 2 + - uid: 6603 + components: + - type: Transform + pos: -15.5,24.5 + parent: 2 + - uid: 6604 + components: + - type: Transform + pos: -13.5,25.5 + parent: 2 + - uid: 6605 + components: + - type: Transform + pos: -12.5,22.5 + parent: 2 + - uid: 6606 + components: + - type: Transform + pos: -14.5,25.5 + parent: 2 + - uid: 6607 + components: + - type: Transform + pos: -14.5,22.5 + parent: 2 + - uid: 6608 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,1.5 + parent: 2 + - uid: 6609 + components: + - type: Transform + pos: -13.5,22.5 + parent: 2 + - uid: 6610 + components: + - type: Transform + pos: -15.5,22.5 + parent: 2 + - uid: 6611 + components: + - type: Transform + pos: -18.5,-9.5 + parent: 2 + - uid: 6612 + components: + - type: Transform + pos: -18.5,-10.5 + parent: 2 + - uid: 6613 + components: + - type: Transform + pos: -18.5,-11.5 + parent: 2 + - uid: 6614 + components: + - type: Transform + pos: -18.5,-12.5 + parent: 2 + - uid: 6615 + components: + - type: Transform + pos: -17.5,-9.5 + parent: 2 + - uid: 6616 + components: + - type: Transform + pos: -17.5,-10.5 + parent: 2 + - uid: 6617 + components: + - type: Transform + pos: -17.5,-11.5 + parent: 2 + - uid: 6618 + components: + - type: Transform + pos: -17.5,-12.5 + parent: 2 + - uid: 6619 + components: + - type: Transform + pos: -16.5,-10.5 + parent: 2 + - uid: 6620 + components: + - type: Transform + pos: -16.5,-11.5 + parent: 2 + - uid: 6621 + components: + - type: Transform + pos: -16.5,-12.5 + parent: 2 + - uid: 6622 + components: + - type: Transform + pos: -15.5,-10.5 + parent: 2 + - uid: 6623 + components: + - type: Transform + pos: -15.5,-11.5 + parent: 2 + - uid: 6624 + components: + - type: Transform + pos: -15.5,-12.5 + parent: 2 + - uid: 6625 + components: + - type: Transform + pos: -14.5,-9.5 + parent: 2 + - uid: 6626 + components: + - type: Transform + pos: -14.5,-10.5 + parent: 2 + - uid: 6627 + components: + - type: Transform + pos: -14.5,-11.5 + parent: 2 + - uid: 6628 + components: + - type: Transform + pos: -14.5,-12.5 + parent: 2 + - uid: 6629 + components: + - type: Transform + pos: -13.5,-9.5 + parent: 2 + - uid: 6630 + components: + - type: Transform + pos: -13.5,-10.5 + parent: 2 + - uid: 6631 + components: + - type: Transform + pos: -13.5,-11.5 + parent: 2 + - uid: 6632 + components: + - type: Transform + pos: -13.5,-12.5 + parent: 2 + - uid: 6633 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,0.5 + parent: 2 + - uid: 6634 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,1.5 + parent: 2 + - uid: 6635 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,1.5 + parent: 2 + - uid: 6636 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,1.5 + parent: 2 + - uid: 6637 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,1.5 + parent: 2 + - uid: 6638 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,1.5 + parent: 2 + - uid: 6639 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,1.5 + parent: 2 + - uid: 6640 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,2.5 + parent: 2 + - uid: 6641 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,2.5 + parent: 2 + - uid: 6642 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,2.5 + parent: 2 + - uid: 6643 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,1.5 + parent: 2 + - uid: 6644 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,0.5 + parent: 2 + - uid: 6645 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,-0.5 + parent: 2 + - uid: 6646 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,-1.5 + parent: 2 + - uid: 6647 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,-2.5 + parent: 2 + - uid: 6648 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,-3.5 + parent: 2 + - uid: 6649 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,-3.5 + parent: 2 + - uid: 6650 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,-4.5 + parent: 2 + - uid: 6651 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,-5.5 + parent: 2 + - uid: 6652 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,-6.5 + parent: 2 + - uid: 6653 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,-7.5 + parent: 2 + - uid: 6654 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,-8.5 + parent: 2 + - uid: 6658 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,76.5 + parent: 2 + - uid: 6659 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,77.5 + parent: 2 + - uid: 6660 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,77.5 + parent: 2 + - uid: 6661 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,77.5 + parent: 2 + - uid: 6662 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.5,77.5 + parent: 2 + - uid: 6663 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -18.5,77.5 + parent: 2 + - uid: 6664 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -17.5,77.5 + parent: 2 + - uid: 6665 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,77.5 + parent: 2 + - uid: 6666 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,77.5 + parent: 2 + - uid: 6667 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,77.5 + parent: 2 + - uid: 6668 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,77.5 + parent: 2 + - uid: 6669 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,21.5 + parent: 2 + - uid: 6741 + components: + - type: Transform + pos: 29.5,-12.5 + parent: 2 + - uid: 6742 + components: + - type: Transform + pos: 30.5,-12.5 + parent: 2 + - uid: 6743 + components: + - type: Transform + pos: 31.5,-12.5 + parent: 2 + - uid: 6744 + components: + - type: Transform + pos: 32.5,-12.5 + parent: 2 + - uid: 6745 + components: + - type: Transform + pos: 33.5,-12.5 + parent: 2 + - uid: 6746 + components: + - type: Transform + pos: 34.5,-12.5 + parent: 2 + - uid: 6764 + components: + - type: Transform + pos: 22.5,-34.5 + parent: 2 + - uid: 6765 + components: + - type: Transform + pos: 25.5,-15.5 + parent: 2 + - uid: 6766 + components: + - type: Transform + pos: 33.5,-3.5 + parent: 2 + - uid: 6767 + components: + - type: Transform + pos: 25.5,-20.5 + parent: 2 + - uid: 6768 + components: + - type: Transform + pos: 25.5,-19.5 + parent: 2 + - uid: 6769 + components: + - type: Transform + pos: 26.5,-4.5 + parent: 2 + - uid: 6772 + components: + - type: Transform + pos: 38.5,-38.5 + parent: 2 + - uid: 6773 + components: + - type: Transform + pos: 35.5,-13.5 + parent: 2 + - uid: 6774 + components: + - type: Transform + pos: 37.5,-40.5 + parent: 2 + - uid: 6775 + components: + - type: Transform + pos: 38.5,-34.5 + parent: 2 + - uid: 6776 + components: + - type: Transform + pos: 37.5,-42.5 + parent: 2 + - uid: 6783 + components: + - type: Transform + pos: 34.5,-13.5 + parent: 2 + - uid: 6787 + components: + - type: Transform + pos: 36.5,-24.5 + parent: 2 + - uid: 6788 + components: + - type: Transform + pos: 35.5,-17.5 + parent: 2 + - uid: 6789 + components: + - type: Transform + pos: 35.5,-21.5 + parent: 2 + - uid: 6790 + components: + - type: Transform + pos: 35.5,-19.5 + parent: 2 + - uid: 6792 + components: + - type: Transform + pos: 38.5,-35.5 + parent: 2 + - uid: 6795 + components: + - type: Transform + pos: 36.5,-23.5 + parent: 2 + - uid: 6796 + components: + - type: Transform + pos: 36.5,-22.5 + parent: 2 + - uid: 7339 + components: + - type: Transform + pos: 35.5,-18.5 + parent: 2 + - uid: 8223 + components: + - type: Transform + pos: 35.5,-15.5 + parent: 2 + - uid: 8395 + components: + - type: Transform + pos: 37.5,-38.5 + parent: 2 + - uid: 8396 + components: + - type: Transform + pos: 39.5,-38.5 + parent: 2 + - uid: 8397 + components: + - type: Transform + pos: 38.5,-32.5 + parent: 2 + - uid: 8398 + components: + - type: Transform + pos: 38.5,-31.5 + parent: 2 + - uid: 8399 + components: + - type: Transform + pos: 35.5,-16.5 + parent: 2 + - uid: 8517 + components: + - type: Transform + pos: 35.5,-14.5 + parent: 2 + - uid: 8518 + components: + - type: Transform + pos: 38.5,-36.5 + parent: 2 + - uid: 8784 + components: + - type: Transform + pos: 37.5,-39.5 + parent: 2 + - uid: 11124 + components: + - type: Transform + pos: 23.5,-41.5 + parent: 2 + - uid: 11125 + components: + - type: Transform + pos: 22.5,-37.5 + parent: 2 + - uid: 11126 + components: + - type: Transform + pos: 33.5,-52.5 + parent: 2 + - uid: 11127 + components: + - type: Transform + pos: 37.5,-44.5 + parent: 2 + - uid: 11128 + components: + - type: Transform + pos: 37.5,-43.5 + parent: 2 + - uid: 11129 + components: + - type: Transform + pos: 34.5,-52.5 + parent: 2 + - uid: 11130 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,40.5 + parent: 2 + - uid: 11131 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,40.5 + parent: 2 + - uid: 11132 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,33.5 + parent: 2 + - uid: 11133 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -29.5,40.5 + parent: 2 + - uid: 12071 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,75.5 + parent: 2 + - uid: 12388 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,37.5 + parent: 2 + - uid: 12389 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -37.5,40.5 + parent: 2 + - uid: 12390 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,40.5 + parent: 2 + - uid: 12391 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,40.5 + parent: 2 + - uid: 13042 + components: + - type: Transform + pos: 38.5,-37.5 + parent: 2 + - uid: 13045 + components: + - type: Transform + pos: 38.5,-33.5 + parent: 2 + - uid: 13046 + components: + - type: Transform + pos: 36.5,-21.5 + parent: 2 + - uid: 13048 + components: + - type: Transform + pos: 35.5,-20.5 + parent: 2 + - uid: 13049 + components: + - type: Transform + pos: 37.5,-41.5 + parent: 2 + - uid: 13050 + components: + - type: Transform + pos: 35.5,-52.5 + parent: 2 + - uid: 13054 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,40.5 + parent: 2 + - uid: 13406 + components: + - type: Transform + pos: 22.5,-9.5 + parent: 2 + - uid: 13407 + components: + - type: Transform + pos: 22.5,-10.5 + parent: 2 + - uid: 13408 + components: + - type: Transform + pos: 21.5,-2.5 + parent: 2 + - uid: 13409 + components: + - type: Transform + pos: 34.5,-7.5 + parent: 2 + - uid: 13410 + components: + - type: Transform + pos: 34.5,-3.5 + parent: 2 + - uid: 13411 + components: + - type: Transform + pos: 22.5,-11.5 + parent: 2 + - uid: 13412 + components: + - type: Transform + pos: 22.5,-12.5 + parent: 2 + - uid: 13413 + components: + - type: Transform + pos: 34.5,-11.5 + parent: 2 + - uid: 13414 + components: + - type: Transform + pos: 36.5,-3.5 + parent: 2 + - uid: 13418 + components: + - type: Transform + pos: 32.5,-3.5 + parent: 2 + - uid: 13421 + components: + - type: Transform + pos: 26.5,-7.5 + parent: 2 + - uid: 13423 + components: + - type: Transform + pos: 26.5,-5.5 + parent: 2 + - uid: 13424 + components: + - type: Transform + pos: 20.5,-2.5 + parent: 2 + - uid: 13678 + components: + - type: Transform + pos: 20.5,-3.5 + parent: 2 + - uid: 13680 + components: + - type: Transform + pos: 40.5,-24.5 + parent: 2 + - uid: 13718 + components: + - type: Transform + pos: 20.5,-4.5 + parent: 2 + - uid: 14374 + components: + - type: Transform + pos: 34.5,-6.5 + parent: 2 + - uid: 14378 + components: + - type: Transform + pos: 38.5,-4.5 + parent: 2 + - uid: 14385 + components: + - type: Transform + pos: 34.5,-5.5 + parent: 2 + - uid: 14409 + components: + - type: Transform + pos: 20.5,-14.5 + parent: 2 + - uid: 14423 + components: + - type: Transform + pos: 20.5,-9.5 + parent: 2 + - uid: 14424 + components: + - type: Transform + pos: 20.5,-16.5 + parent: 2 + - uid: 14425 + components: + - type: Transform + pos: 20.5,-23.5 + parent: 2 + - uid: 14426 + components: + - type: Transform + pos: 20.5,-10.5 + parent: 2 + - uid: 14440 + components: + - type: Transform + pos: 22.5,-25.5 + parent: 2 + - uid: 14441 + components: + - type: Transform + pos: 20.5,-11.5 + parent: 2 + - uid: 14454 + components: + - type: Transform + pos: 20.5,-6.5 + parent: 2 + - uid: 14455 + components: + - type: Transform + pos: 38.5,-3.5 + parent: 2 + - uid: 14476 + components: + - type: Transform + pos: 38.5,-5.5 + parent: 2 + - uid: 14477 + components: + - type: Transform + pos: 22.5,-7.5 + parent: 2 + - uid: 14984 + components: + - type: Transform + pos: 37.5,-3.5 + parent: 2 + - uid: 15039 + components: + - type: Transform + pos: 39.5,-3.5 + parent: 2 + - uid: 15462 + components: + - type: Transform + pos: 20.5,-18.5 + parent: 2 + - uid: 15488 + components: + - type: Transform + pos: 40.5,-7.5 + parent: 2 + - uid: 15497 + components: + - type: Transform + pos: 38.5,-25.5 + parent: 2 + - uid: 15510 + components: + - type: Transform + pos: 40.5,-9.5 + parent: 2 + - uid: 15512 + components: + - type: Transform + pos: 40.5,-11.5 + parent: 2 + - uid: 16455 + components: + - type: Transform + pos: 40.5,-19.5 + parent: 2 + - uid: 17122 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -39.5,39.5 + parent: 2 + - uid: 17128 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,37.5 + parent: 2 + - uid: 17144 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -37.5,37.5 + parent: 2 + - uid: 17145 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -39.5,37.5 + parent: 2 + - uid: 17146 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -38.5,37.5 + parent: 2 + - uid: 17147 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -39.5,38.5 + parent: 2 + - uid: 17159 + components: + - type: Transform + pos: 22.5,-4.5 + parent: 2 + - uid: 17160 + components: + - type: Transform + pos: 38.5,-9.5 + parent: 2 + - uid: 17161 + components: + - type: Transform + pos: 38.5,-11.5 + parent: 2 + - uid: 17162 + components: + - type: Transform + pos: 38.5,-10.5 + parent: 2 + - uid: 17163 + components: + - type: Transform + pos: 38.5,-12.5 + parent: 2 + - uid: 17164 + components: + - type: Transform + pos: 26.5,-6.5 + parent: 2 + - uid: 17165 + components: + - type: Transform + pos: 40.5,-23.5 + parent: 2 + - uid: 17166 + components: + - type: Transform + pos: 40.5,-22.5 + parent: 2 + - uid: 17167 + components: + - type: Transform + pos: 34.5,-4.5 + parent: 2 + - uid: 17168 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -38.5,40.5 + parent: 2 + - uid: 17179 + components: + - type: Transform + pos: 23.5,-25.5 + parent: 2 + - uid: 17180 + components: + - type: Transform + pos: 39.5,-25.5 + parent: 2 + - uid: 17181 + components: + - type: Transform + pos: 20.5,-20.5 + parent: 2 + - uid: 17182 + components: + - type: Transform + pos: 20.5,-25.5 + parent: 2 + - uid: 17334 + components: + - type: Transform + pos: 22.5,-5.5 + parent: 2 + - uid: 17479 + components: + - type: Transform + pos: 38.5,-6.5 + parent: 2 + - uid: 17480 + components: + - type: Transform + pos: 22.5,-8.5 + parent: 2 + - uid: 17834 + components: + - type: Transform + pos: 20.5,-7.5 + parent: 2 + - uid: 17847 + components: + - type: Transform + pos: 20.5,-8.5 + parent: 2 + - uid: 17848 + components: + - type: Transform + pos: 20.5,-12.5 + parent: 2 + - uid: 17849 + components: + - type: Transform + pos: 20.5,-24.5 + parent: 2 + - uid: 17850 + components: + - type: Transform + pos: 20.5,-19.5 + parent: 2 + - uid: 17851 + components: + - type: Transform + pos: 20.5,-21.5 + parent: 2 + - uid: 17852 + components: + - type: Transform + pos: 37.5,-25.5 + parent: 2 + - uid: 17853 + components: + - type: Transform + pos: 40.5,-25.5 + parent: 2 + - uid: 17854 + components: + - type: Transform + pos: 40.5,-2.5 + parent: 2 + - uid: 17872 + components: + - type: Transform + pos: 40.5,-8.5 + parent: 2 + - uid: 17873 + components: + - type: Transform + pos: 40.5,-4.5 + parent: 2 + - uid: 17874 + components: + - type: Transform + pos: 35.5,-3.5 + parent: 2 + - uid: 17875 + components: + - type: Transform + pos: 40.5,-16.5 + parent: 2 + - uid: 17876 + components: + - type: Transform + pos: 40.5,-21.5 + parent: 2 + - uid: 17963 + components: + - type: Transform + pos: 40.5,-13.5 + parent: 2 + - uid: 18044 + components: + - type: Transform + pos: 40.5,-14.5 + parent: 2 + - uid: 18193 + components: + - type: Transform + pos: 20.5,-5.5 + parent: 2 + - uid: 18216 + components: + - type: Transform + pos: 40.5,-12.5 + parent: 2 + - uid: 18229 + components: + - type: Transform + pos: 40.5,-15.5 + parent: 2 + - uid: 18230 + components: + - type: Transform + pos: 40.5,-18.5 + parent: 2 + - uid: 18232 + components: + - type: Transform + pos: 40.5,-20.5 + parent: 2 + - uid: 18233 + components: + - type: Transform + pos: 40.5,-17.5 + parent: 2 + - uid: 18234 + components: + - type: Transform + pos: 40.5,-3.5 + parent: 2 + - uid: 18235 + components: + - type: Transform + pos: 40.5,-1.5 + parent: 2 + - uid: 18236 + components: + - type: Transform + pos: 40.5,-10.5 + parent: 2 + - uid: 18237 + components: + - type: Transform + pos: 40.5,-6.5 + parent: 2 + - uid: 18238 + components: + - type: Transform + pos: 40.5,-5.5 + parent: 2 + - uid: 18239 + components: + - type: Transform + pos: 20.5,-22.5 + parent: 2 + - uid: 18240 + components: + - type: Transform + pos: 21.5,-25.5 + parent: 2 + - uid: 18245 + components: + - type: Transform + pos: 20.5,-17.5 + parent: 2 + - uid: 18246 + components: + - type: Transform + pos: 20.5,-13.5 + parent: 2 + - uid: 18247 + components: + - type: Transform + pos: 20.5,-15.5 + parent: 2 + - uid: 18249 + components: + - type: Transform + pos: 38.5,-8.5 + parent: 2 + - uid: 18381 + components: + - type: Transform + pos: 38.5,-7.5 + parent: 2 + - uid: 18382 + components: + - type: Transform + pos: 22.5,-6.5 + parent: 2 + - uid: 18413 + components: + - type: Transform + pos: 26.5,-11.5 + parent: 2 + - uid: 18574 + components: + - type: Transform + pos: 86.5,17.5 + parent: 2 + - uid: 18575 + components: + - type: Transform + pos: 86.5,15.5 + parent: 2 + - uid: 18578 + components: + - type: Transform + pos: 83.5,19.5 + parent: 2 + - uid: 18579 + components: + - type: Transform + pos: 83.5,18.5 + parent: 2 + - uid: 18580 + components: + - type: Transform + pos: 83.5,14.5 + parent: 2 + - uid: 18582 + components: + - type: Transform + pos: 90.5,14.5 + parent: 2 + - uid: 18583 + components: + - type: Transform + pos: 90.5,12.5 + parent: 2 + - uid: 18584 + components: + - type: Transform + pos: 89.5,10.5 + parent: 2 + - uid: 18585 + components: + - type: Transform + pos: 89.5,8.5 + parent: 2 + - uid: 18589 + components: + - type: Transform + pos: 89.5,-0.5 + parent: 2 + - uid: 18590 + components: + - type: Transform + pos: 89.5,-2.5 + parent: 2 + - uid: 18591 + components: + - type: Transform + pos: 90.5,-4.5 + parent: 2 + - uid: 18592 + components: + - type: Transform + pos: 90.5,-6.5 + parent: 2 + - uid: 18593 + components: + - type: Transform + pos: 87.5,-9.5 + parent: 2 + - uid: 18599 + components: + - type: Transform + pos: 88.5,-7.5 + parent: 2 + - uid: 18600 + components: + - type: Transform + pos: 89.5,-6.5 + parent: 2 + - uid: 18601 + components: + - type: Transform + pos: 87.5,-8.5 + parent: 2 + - uid: 18604 + components: + - type: Transform + pos: 87.5,-2.5 + parent: 2 + - uid: 18605 + components: + - type: Transform + pos: 87.5,0.5 + parent: 2 + - uid: 18606 + components: + - type: Transform + pos: 87.5,1.5 + parent: 2 + - uid: 18607 + components: + - type: Transform + pos: 87.5,5.5 + parent: 2 + - uid: 18608 + components: + - type: Transform + pos: 87.5,6.5 + parent: 2 + - uid: 18609 + components: + - type: Transform + pos: 87.5,9.5 + parent: 2 + - uid: 18610 + components: + - type: Transform + pos: 87.5,10.5 + parent: 2 + - uid: 18611 + components: + - type: Transform + pos: 87.5,14.5 + parent: 2 + - uid: 18785 + components: + - type: Transform + pos: 79.5,47.5 + parent: 2 + - uid: 18786 + components: + - type: Transform + pos: 80.5,47.5 + parent: 2 + - uid: 18787 + components: + - type: Transform + pos: 81.5,47.5 + parent: 2 + - uid: 18790 + components: + - type: Transform + pos: 72.5,48.5 + parent: 2 + - uid: 18791 + components: + - type: Transform + pos: 72.5,49.5 + parent: 2 + - uid: 18792 + components: + - type: Transform + pos: 75.5,52.5 + parent: 2 + - uid: 18793 + components: + - type: Transform + pos: 75.5,51.5 + parent: 2 + - uid: 18835 + components: + - type: Transform + pos: 75.5,54.5 + parent: 2 + - uid: 18836 + components: + - type: Transform + pos: 75.5,55.5 + parent: 2 + - uid: 18837 + components: + - type: Transform + pos: 75.5,56.5 + parent: 2 + - uid: 18838 + components: + - type: Transform + pos: 75.5,57.5 + parent: 2 + - uid: 18849 + components: + - type: Transform + pos: 87.5,21.5 + parent: 2 + - uid: 18850 + components: + - type: Transform + pos: 87.5,20.5 + parent: 2 + - uid: 18851 + components: + - type: Transform + pos: 87.5,19.5 + parent: 2 + - uid: 18852 + components: + - type: Transform + pos: 87.5,18.5 + parent: 2 + - uid: 18853 + components: + - type: Transform + pos: 87.5,17.5 + parent: 2 + - uid: 18854 + components: + - type: Transform + pos: 87.5,16.5 + parent: 2 + - uid: 18855 + components: + - type: Transform + pos: 87.5,15.5 + parent: 2 + - uid: 18856 + components: + - type: Transform + pos: 86.5,20.5 + parent: 2 + - uid: 18857 + components: + - type: Transform + pos: 85.5,20.5 + parent: 2 + - uid: 18858 + components: + - type: Transform + pos: 85.5,21.5 + parent: 2 + - uid: 18859 + components: + - type: Transform + pos: 85.5,22.5 + parent: 2 + - uid: 18860 + components: + - type: Transform + pos: 85.5,23.5 + parent: 2 + - uid: 18861 + components: + - type: Transform + pos: 85.5,24.5 + parent: 2 + - uid: 18862 + components: + - type: Transform + pos: 85.5,25.5 + parent: 2 + - uid: 18863 + components: + - type: Transform + pos: 85.5,26.5 + parent: 2 + - uid: 18864 + components: + - type: Transform + pos: 85.5,27.5 + parent: 2 + - uid: 18865 + components: + - type: Transform + pos: 85.5,28.5 + parent: 2 + - uid: 18866 + components: + - type: Transform + pos: 84.5,28.5 + parent: 2 + - uid: 18867 + components: + - type: Transform + pos: 86.5,28.5 + parent: 2 + - uid: 18868 + components: + - type: Transform + pos: 87.5,28.5 + parent: 2 + - uid: 18869 + components: + - type: Transform + pos: 88.5,28.5 + parent: 2 + - uid: 18870 + components: + - type: Transform + pos: 88.5,29.5 + parent: 2 + - uid: 18871 + components: + - type: Transform + pos: 89.5,29.5 + parent: 2 + - uid: 18872 + components: + - type: Transform + pos: 89.5,30.5 + parent: 2 + - uid: 18873 + components: + - type: Transform + pos: 89.5,31.5 + parent: 2 + - uid: 18874 + components: + - type: Transform + pos: 89.5,32.5 + parent: 2 + - uid: 18875 + components: + - type: Transform + pos: 89.5,33.5 + parent: 2 + - uid: 18876 + components: + - type: Transform + pos: 89.5,34.5 + parent: 2 + - uid: 18877 + components: + - type: Transform + pos: 89.5,35.5 + parent: 2 + - uid: 18878 + components: + - type: Transform + pos: 89.5,36.5 + parent: 2 + - uid: 18879 + components: + - type: Transform + pos: 89.5,37.5 + parent: 2 + - uid: 18880 + components: + - type: Transform + pos: 89.5,38.5 + parent: 2 + - uid: 18881 + components: + - type: Transform + pos: 89.5,39.5 + parent: 2 + - uid: 18882 + components: + - type: Transform + pos: 88.5,39.5 + parent: 2 + - uid: 18883 + components: + - type: Transform + pos: 88.5,40.5 + parent: 2 + - uid: 18884 + components: + - type: Transform + pos: 87.5,40.5 + parent: 2 + - uid: 18885 + components: + - type: Transform + pos: 86.5,40.5 + parent: 2 + - uid: 18886 + components: + - type: Transform + pos: 85.5,40.5 + parent: 2 + - uid: 18887 + components: + - type: Transform + pos: 84.5,40.5 + parent: 2 + - uid: 18888 + components: + - type: Transform + pos: 85.5,41.5 + parent: 2 + - uid: 18889 + components: + - type: Transform + pos: 85.5,42.5 + parent: 2 + - uid: 18890 + components: + - type: Transform + pos: 85.5,43.5 + parent: 2 + - uid: 18891 + components: + - type: Transform + pos: 85.5,44.5 + parent: 2 + - uid: 18892 + components: + - type: Transform + pos: 85.5,45.5 + parent: 2 + - uid: 18893 + components: + - type: Transform + pos: 85.5,46.5 + parent: 2 + - uid: 18894 + components: + - type: Transform + pos: 85.5,47.5 + parent: 2 + - uid: 19540 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,76.5 + parent: 2 + - uid: 19541 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,77.5 + parent: 2 + - uid: 19542 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,77.5 + parent: 2 + - uid: 19543 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,74.5 + parent: 2 + - uid: 19544 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,78.5 + parent: 2 + - uid: 19545 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,78.5 + parent: 2 + - uid: 19546 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,79.5 + parent: 2 + - uid: 19547 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,79.5 + parent: 2 + - uid: 19548 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,79.5 + parent: 2 + - uid: 19549 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,79.5 + parent: 2 + - uid: 19550 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,79.5 + parent: 2 + - uid: 19551 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -29.5,79.5 + parent: 2 + - uid: 19552 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,79.5 + parent: 2 + - uid: 19553 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,78.5 + parent: 2 + - uid: 19554 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,78.5 + parent: 2 + - uid: 19555 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,77.5 + parent: 2 + - uid: 19556 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,77.5 + parent: 2 + - uid: 20254 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,-3.5 + parent: 2 + - uid: 20301 + components: + - type: Transform + pos: 25.5,-12.5 + parent: 2 + - uid: 20302 + components: + - type: Transform + pos: 24.5,-12.5 + parent: 2 + - uid: 20303 + components: + - type: Transform + pos: 23.5,-12.5 + parent: 2 + - uid: 20304 + components: + - type: Transform + pos: 35.5,-12.5 + parent: 2 + - uid: 20305 + components: + - type: Transform + pos: 36.5,-12.5 + parent: 2 + - uid: 20306 + components: + - type: Transform + pos: 37.5,-12.5 + parent: 2 +- proto: Chair + entities: + - uid: 6797 + components: + - type: Transform + pos: 9.5,17.5 + parent: 2 + - uid: 6798 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.5,15.5 + parent: 2 + - uid: 6799 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,58.5 + parent: 2 + - uid: 6800 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,58.5 + parent: 2 + - uid: 6801 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,67.5 + parent: 2 + - uid: 6802 + components: + - type: Transform + pos: 53.5,27.5 + parent: 2 + - uid: 6803 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 56.5,24.5 + parent: 2 + - uid: 6804 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 56.5,25.5 + parent: 2 + - uid: 6805 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 56.5,26.5 + parent: 2 + - uid: 6806 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,53.5 + parent: 2 + - uid: 6807 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -28.5,54.5 + parent: 2 + - uid: 6808 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -28.5,55.5 + parent: 2 + - uid: 6809 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,52.5 + parent: 2 + - uid: 6810 + components: + - type: Transform + pos: -31.5,64.5 + parent: 2 + - uid: 6811 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -28.5,68.5 + parent: 2 + - uid: 6812 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -27.5,67.5 + parent: 2 + - uid: 6813 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,59.5 + parent: 2 + - uid: 6814 + components: + - type: Transform + pos: 45.5,37.5 + parent: 2 + - uid: 6815 + components: + - type: Transform + pos: 53.5,38.5 + parent: 2 + - uid: 6816 + components: + - type: Transform + pos: 54.5,38.5 + parent: 2 + - uid: 6817 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,44.5 + parent: 2 + - uid: 6818 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 38.5,38.5 + parent: 2 + - uid: 6819 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,37.5 + parent: 2 + - uid: 6820 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 39.5,37.5 + parent: 2 + - uid: 6821 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,38.5 + parent: 2 + - uid: 6822 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,37.5 + parent: 2 + - uid: 6823 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,37.5 + parent: 2 + - uid: 6824 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,31.5 + parent: 2 + - uid: 6825 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,31.5 + parent: 2 + - uid: 6826 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,31.5 + parent: 2 + - uid: 6827 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,31.5 + parent: 2 + - uid: 6828 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,41.5 + parent: 2 + - uid: 6829 + components: + - type: Transform + pos: 12.5,43.5 + parent: 2 + - uid: 6830 + components: + - type: Transform + pos: 11.5,43.5 + parent: 2 + - uid: 6831 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 66.5,59.5 + parent: 2 + - uid: 6832 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 66.5,58.5 + parent: 2 + - uid: 6833 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 66.5,57.5 + parent: 2 + - uid: 6834 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 68.5,59.5 + parent: 2 + - uid: 6835 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 68.5,58.5 + parent: 2 + - uid: 6836 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 68.5,57.5 + parent: 2 + - uid: 6837 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 71.5,57.5 + parent: 2 + - uid: 6838 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 71.5,56.5 + parent: 2 + - uid: 6839 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 71.5,55.5 + parent: 2 + - uid: 6840 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 69.5,54.5 + parent: 2 + - uid: 6841 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 68.5,54.5 + parent: 2 + - uid: 6842 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 68.5,39.5 + parent: 2 + - uid: 6843 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 68.5,38.5 + parent: 2 + - uid: 6844 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 68.5,37.5 + parent: 2 + - uid: 6845 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 59.5,62.5 + parent: 2 + - uid: 6846 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 59.5,61.5 + parent: 2 + - uid: 6847 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 59.5,60.5 + parent: 2 + - uid: 6848 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 59.5,59.5 + parent: 2 + - uid: 6849 + components: + - type: Transform + pos: 70.5,4.5 + parent: 2 + - uid: 6850 + components: + - type: Transform + pos: 70.5,4.5 + parent: 2 + - uid: 6851 + components: + - type: Transform + pos: 69.5,4.5 + parent: 2 + - uid: 6852 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 76.5,3.5 + parent: 2 + - uid: 6853 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 76.5,2.5 + parent: 2 + - uid: 6854 + components: + - type: Transform + pos: 27.5,63.5 + parent: 2 + - uid: 6855 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 44.5,65.5 + parent: 2 + - uid: 6856 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 44.5,64.5 + parent: 2 + - uid: 6857 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 45.5,63.5 + parent: 2 + - uid: 12628 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -33.5,74.5 + parent: 2 + - uid: 19479 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,68.5 + parent: 2 + - uid: 19480 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,67.5 + parent: 2 + - uid: 19481 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,67.5 + parent: 2 + - uid: 19482 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.5,69.5 + parent: 2 + - uid: 19483 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,68.5 + parent: 2 + - uid: 19485 + components: + - type: Transform + pos: -31.5,69.5 + parent: 2 + - uid: 19486 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -30.5,66.5 + parent: 2 + - uid: 19521 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,73.5 + parent: 2 + - uid: 19522 + components: + - type: Transform + pos: -24.5,74.5 + parent: 2 + - uid: 19523 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,74.5 + parent: 2 + - uid: 19524 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,74.5 + parent: 2 +- proto: ChairGreyscale + entities: + - uid: 6858 + components: + - type: Transform + pos: -27.5,61.5 + parent: 2 + - uid: 6859 + components: + - type: Transform + pos: -31.5,61.5 + parent: 2 +- proto: ChairOfficeDark + entities: + - uid: 6860 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,28.5 + parent: 2 + - uid: 6861 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,13.5 + parent: 2 + - uid: 6862 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,13.5 + parent: 2 + - uid: 6863 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,6.5 + parent: 2 + - uid: 6864 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,14.5 + parent: 2 + - uid: 6865 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,20.5 + parent: 2 + - uid: 6866 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,28.5 + parent: 2 + - uid: 6867 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,35.5 + parent: 2 + - uid: 6868 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,45.5 + parent: 2 + - uid: 6869 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,44.5 + parent: 2 + - uid: 6870 + components: + - type: Transform + pos: -0.5,15.5 + parent: 2 + - uid: 6871 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,29.5 + parent: 2 + - uid: 6872 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,64.5 + parent: 2 + - uid: 6873 + components: + - type: Transform + pos: -15.5,60.5 + parent: 2 + - uid: 6874 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,52.5 + parent: 2 + - uid: 6875 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,54.5 + parent: 2 + - uid: 6876 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,64.5 + parent: 2 + - uid: 6877 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 45.5,13.5 + parent: 2 + - uid: 6878 + components: + - type: Transform + pos: 74.54003,40.548847 + parent: 2 + - uid: 6879 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 52.5,15.5 + parent: 2 + - uid: 6880 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 55.5,22.5 + parent: 2 + - uid: 6881 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,59.5 + parent: 2 + - uid: 6882 + components: + - type: Transform + pos: 17.5,55.5 + parent: 2 + - uid: 6883 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,28.5 + parent: 2 + - uid: 6884 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,28.5 + parent: 2 + - uid: 6885 + components: + - type: Transform + pos: 26.5,36.5 + parent: 2 + - uid: 6886 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,44.5 + parent: 2 + - uid: 6887 + components: + - type: Transform + pos: 19.5,38.5 + parent: 2 + - uid: 6888 + components: + - type: Transform + pos: 13.5,24.5 + parent: 2 + - uid: 6889 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 12.5,28.5 + parent: 2 + - uid: 6890 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,44.5 + parent: 2 + - uid: 6891 + components: + - type: Transform + pos: 75.5,37.5 + parent: 2 + - uid: 6892 + components: + - type: Transform + pos: 77.5,37.5 + parent: 2 + - uid: 6893 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 85.5,37.5 + parent: 2 + - uid: 6894 + components: + - type: Transform + pos: 85.5,31.5 + parent: 2 + - uid: 6895 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 61.5,57.5 + parent: 2 + - uid: 6897 + components: + - type: Transform + pos: 72.5,13.5 + parent: 2 + - uid: 6898 + components: + - type: Transform + pos: 72.5,14.5 + parent: 2 + - uid: 6899 + components: + - type: Transform + pos: 71.5,39.5 + parent: 2 + - uid: 6900 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,6.5 + parent: 2 + - uid: 6901 + components: + - type: Transform + pos: -6.5,4.5 + parent: 2 + - uid: 6902 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,-1.5 + parent: 2 + - uid: 13116 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 71.5,28.5 + parent: 2 +- proto: ChairOfficeLight + entities: + - uid: 6903 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,25.5 + parent: 2 + - uid: 6904 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,2.5 + parent: 2 + - uid: 18450 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.572569,-35.50413 + parent: 2 + - uid: 19712 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.509598,-24.383455 + parent: 2 + - uid: 19780 + components: + - type: Transform + pos: 25.496529,-37.421314 + parent: 2 +- proto: ChairWood + entities: + - uid: 6905 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 29.5,13.5 + parent: 2 + - uid: 6906 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 29.5,16.5 + parent: 2 + - uid: 6907 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,14.5 + parent: 2 + - uid: 6908 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 20.5,17.5 + parent: 2 + - uid: 6909 + components: + - type: Transform + pos: 23.5,14.5 + parent: 2 + - uid: 6910 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,13.5 + parent: 2 + - uid: 6911 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,11.5 + parent: 2 + - uid: 6912 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,10.5 + parent: 2 + - uid: 6913 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,11.5 + parent: 2 + - uid: 6914 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,13.5 + parent: 2 + - uid: 6915 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,73.5 + parent: 2 + - uid: 6916 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,79.5 + parent: 2 + - uid: 6917 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,79.5 + parent: 2 + - uid: 6918 + components: + - type: Transform + pos: 9.5,61.5 + parent: 2 + - uid: 6919 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 13.5,59.5 + parent: 2 + - uid: 6920 + components: + - type: Transform + pos: 14.5,57.5 + parent: 2 + - uid: 6921 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 14.5,55.5 + parent: 2 + - uid: 6922 + components: + - type: Transform + pos: 80.5,51.5 + parent: 2 + - uid: 6923 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 80.5,49.5 + parent: 2 + - uid: 6924 + components: + - type: Transform + pos: 62.5,51.5 + parent: 2 + - uid: 6925 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 61.5,50.5 + parent: 2 + - uid: 6926 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 61.5,54.5 + parent: 2 + - uid: 6927 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 60.5,53.5 + parent: 2 +- proto: chem_master + entities: + - uid: 6928 + components: + - type: Transform + pos: 47.5,45.5 + parent: 2 + - uid: 6929 + components: + - type: Transform + pos: 59.5,42.5 + parent: 2 + - uid: 6930 + components: + - type: Transform + pos: 14.5,24.5 + parent: 2 + - uid: 6931 + components: + - type: Transform + pos: 13.5,27.5 + parent: 2 +- proto: ChemDispenser + entities: + - uid: 6932 + components: + - type: Transform + pos: 12.5,24.5 + parent: 2 + - uid: 6933 + components: + - type: Transform + pos: 11.5,28.5 + parent: 2 +- proto: ChemicalPayload + entities: + - uid: 6934 + components: + - type: Transform + pos: 41.33658,7.402665 + parent: 2 + - uid: 6935 + components: + - type: Transform + pos: 41.551777,7.3668227 + parent: 2 + - uid: 6936 + components: + - type: Transform + pos: 41.76698,7.3847437 + parent: 2 + - uid: 6937 + components: + - type: Transform + pos: 44.60328,53.38158 + parent: 2 + - uid: 6938 + components: + - type: Transform + pos: 44.28048,53.297947 + parent: 2 + - uid: 6939 + components: + - type: Transform + pos: 44.66306,53.656372 + parent: 2 +- proto: ChemistryHotplate + entities: + - uid: 6940 + components: + - type: Transform + pos: 43.5,39.5 + parent: 2 + - uid: 6941 + components: + - type: Transform + pos: 13.5,28.5 + parent: 2 +- proto: CigarGoldCase + entities: + - uid: 6942 + components: + - type: Transform + pos: 31.374626,53.571064 + parent: 2 + - uid: 6943 + components: + - type: Transform + pos: 84.33954,33.767384 + parent: 2 + - type: Physics + angularDamping: 0 + linearDamping: 0 +- proto: CircuitImprinter + entities: + - uid: 6944 + components: + - type: Transform + pos: -6.5,34.5 + parent: 2 + - uid: 6945 + components: + - type: Transform + pos: 55.5,20.5 + parent: 2 + - uid: 6946 + components: + - type: Transform + pos: 46.5,25.5 + parent: 2 + - uid: 18467 + components: + - type: Transform + pos: 24.5,-33.5 + parent: 2 +- proto: CleanerDispenser + entities: + - uid: 6947 + components: + - type: Transform + pos: 43.5,55.5 + parent: 2 +- proto: ClosetBombFilled + entities: + - uid: 6949 + components: + - type: Transform + pos: -25.5,71.5 + parent: 2 +- proto: ClosetChefFilled + entities: + - uid: 6950 + components: + - type: Transform + pos: 55.5,46.5 + parent: 2 + - uid: 6951 + components: + - type: Transform + pos: 57.5,42.5 + parent: 2 +- proto: ClosetEmergencyFilledRandom + entities: + - uid: 5080 + components: + - type: Transform + pos: -11.5,70.5 + parent: 2 + - uid: 6952 + components: + - type: Transform + pos: 36.5,19.5 + parent: 2 + - uid: 6953 + components: + - type: Transform + pos: 3.5,17.5 + parent: 2 + - uid: 6954 + components: + - type: Transform + pos: 4.5,17.5 + parent: 2 + - uid: 6955 + components: + - type: Transform + pos: 20.5,4.5 + parent: 2 + - uid: 6956 + components: + - type: Transform + pos: -39.5,56.5 + parent: 2 + - uid: 6957 + components: + - type: Transform + pos: 52.5,29.5 + parent: 2 + - uid: 6958 + components: + - type: Transform + pos: 0.5,78.5 + parent: 2 + - uid: 6959 + components: + - type: Transform + pos: 11.5,75.5 + parent: 2 + - uid: 6960 + components: + - type: Transform + pos: 14.5,78.5 + parent: 2 + - uid: 6961 + components: + - type: Transform + pos: 77.5,59.5 + parent: 2 + - uid: 6962 + components: + - type: Transform + pos: 66.5,62.5 + parent: 2 + - uid: 6963 + components: + - type: Transform + pos: 64.5,62.5 + parent: 2 + - uid: 6964 + components: + - type: Transform + pos: 68.5,46.5 + parent: 2 + - uid: 6965 + components: + - type: Transform + pos: 75.5,35.5 + parent: 2 + - uid: 6966 + components: + - type: Transform + pos: 77.5,35.5 + parent: 2 + - uid: 6967 + components: + - type: Transform + pos: 67.5,5.5 + parent: 2 + - uid: 6968 + components: + - type: Transform + pos: 72.5,-1.5 + parent: 2 + - uid: 6969 + components: + - type: Transform + pos: 63.5,6.5 + parent: 2 + - uid: 6970 + components: + - type: Transform + pos: 62.5,11.5 + parent: 2 + - uid: 6971 + components: + - type: Transform + pos: 76.5,15.5 + parent: 2 + - uid: 6972 + components: + - type: Transform + pos: 59.5,12.5 + parent: 2 + - uid: 6973 + components: + - type: Transform + pos: 45.5,8.5 + parent: 2 + - uid: 6974 + components: + - type: Transform + pos: 14.5,15.5 + parent: 2 + - uid: 6975 + components: + - type: Transform + pos: -21.5,15.5 + parent: 2 + - uid: 6976 + components: + - type: Transform + pos: 18.5,69.5 + parent: 2 + - uid: 6977 + components: + - type: Transform + pos: 62.5,46.5 + parent: 2 + - uid: 6978 + components: + - type: Transform + pos: 58.5,49.5 + parent: 2 + - uid: 6979 + components: + - type: Transform + pos: 47.5,55.5 + parent: 2 + - uid: 6980 + components: + - type: Transform + pos: 47.5,53.5 + parent: 2 + - uid: 14312 + components: + - type: Transform + pos: 57.5,58.5 + parent: 2 + - uid: 14781 + components: + - type: Transform + pos: -5.5,70.5 + parent: 2 +- proto: ClosetEmergencyN2FilledRandom + entities: + - uid: 6981 + components: + - type: Transform + pos: 76.5,59.5 + parent: 2 + - uid: 12531 + components: + - type: Transform + pos: -11.5,70.5 + parent: 2 + - uid: 14313 + components: + - type: Transform + pos: 57.5,56.5 + parent: 2 + - uid: 14531 + components: + - type: Transform + pos: -5.5,70.5 + parent: 2 +- proto: ClosetFireFilled + entities: + - uid: 6982 + components: + - type: Transform + pos: 37.5,19.5 + parent: 2 + - uid: 6983 + components: + - type: Transform + pos: -39.5,57.5 + parent: 2 + - uid: 6984 + components: + - type: Transform + pos: -3.5,40.5 + parent: 2 + - uid: 6985 + components: + - type: Transform + pos: -7.5,62.5 + parent: 2 + - uid: 6986 + components: + - type: Transform + pos: 50.5,29.5 + parent: 2 + - uid: 6987 + components: + - type: Transform + pos: 51.5,29.5 + parent: 2 + - uid: 6988 + components: + - type: Transform + pos: 8.5,43.5 + parent: 2 + - uid: 6989 + components: + - type: Transform + pos: 68.5,42.5 + parent: 2 + - uid: 6990 + components: + - type: Transform + pos: 75.5,33.5 + parent: 2 + - uid: 6991 + components: + - type: Transform + pos: 77.5,33.5 + parent: 2 + - uid: 6992 + components: + - type: Transform + pos: 67.5,6.5 + parent: 2 + - uid: 6993 + components: + - type: Transform + pos: 72.5,-0.5 + parent: 2 + - uid: 6994 + components: + - type: Transform + pos: 63.5,11.5 + parent: 2 + - uid: 6995 + components: + - type: Transform + pos: 58.5,12.5 + parent: 2 + - uid: 6996 + components: + - type: Transform + pos: 45.5,9.5 + parent: 2 + - uid: 6997 + components: + - type: Transform + pos: 14.5,14.5 + parent: 2 + - uid: 6998 + components: + - type: Transform + pos: -20.5,15.5 + parent: 2 + - uid: 6999 + components: + - type: Transform + pos: 18.5,68.5 + parent: 2 + - uid: 7000 + components: + - type: Transform + pos: 61.5,46.5 + parent: 2 + - uid: 7001 + components: + - type: Transform + pos: 23.5,61.5 + parent: 2 + - uid: 7002 + components: + - type: Transform + pos: 47.5,54.5 + parent: 2 + - uid: 14121 + components: + - type: Transform + pos: 55.5,58.5 + parent: 2 + - uid: 18754 + components: + - type: Transform + pos: -24.5,14.5 + parent: 2 + - uid: 18755 + components: + - type: Transform + pos: -24.5,15.5 + parent: 2 +- proto: ClosetJanitorBombFilled + entities: + - uid: 7003 + components: + - type: Transform + pos: 42.5,52.5 + parent: 2 +- proto: ClosetL3Filled + entities: + - uid: 7005 + components: + - type: Transform + pos: 29.5,63.5 + parent: 2 +- proto: ClosetL3JanitorFilled + entities: + - uid: 7006 + components: + - type: Transform + pos: 42.5,51.5 + parent: 2 +- proto: ClosetL3SecurityFilled + entities: + - uid: 7007 + components: + - type: Transform + pos: -22.5,71.5 + parent: 2 + - uid: 7008 + components: + - type: Transform + pos: 25.5,39.5 + parent: 2 +- proto: ClosetMaintenance + entities: + - uid: 7009 + components: + - type: Transform + pos: 20.5,8.5 + parent: 2 + - uid: 7010 + components: + - type: Transform + pos: 21.5,8.5 + parent: 2 + - uid: 7110 + components: + - type: Transform + pos: 78.5,50.5 + parent: 2 +- proto: ClosetMaintenanceFilledRandom + entities: + - uid: 7011 + components: + - type: Transform + pos: 35.5,19.5 + parent: 2 + - uid: 7012 + components: + - type: Transform + pos: 46.5,9.5 + parent: 2 + - uid: 7013 + components: + - type: Transform + pos: 41.5,65.5 + parent: 2 + - uid: 7014 + components: + - type: Transform + pos: 41.5,66.5 + parent: 2 + - uid: 7015 + components: + - type: Transform + pos: 37.5,64.5 + parent: 2 + - uid: 7016 + components: + - type: Transform + pos: 37.5,66.5 + parent: 2 + - uid: 7017 + components: + - type: Transform + pos: 37.5,65.5 + parent: 2 + - uid: 7018 + components: + - type: Transform + pos: 41.5,64.5 + parent: 2 + - uid: 7019 + components: + - type: Transform + pos: 68.5,51.5 + parent: 2 + - uid: 7020 + components: + - type: Transform + pos: 72.5,48.5 + parent: 2 + - uid: 7022 + components: + - type: Transform + pos: 80.5,53.5 + parent: 2 + - uid: 7023 + components: + - type: Transform + pos: 79.5,57.5 + parent: 2 + - uid: 7024 + components: + - type: Transform + pos: 76.5,17.5 + parent: 2 + - uid: 7025 + components: + - type: Transform + pos: 60.5,12.5 + parent: 2 + - uid: 7026 + components: + - type: Transform + pos: 42.5,5.5 + parent: 2 + - uid: 7027 + components: + - type: Transform + pos: 28.5,6.5 + parent: 2 + - uid: 7028 + components: + - type: Transform + pos: 20.5,5.5 + parent: 2 + - uid: 7029 + components: + - type: Transform + pos: 9.5,3.5 + parent: 2 + - uid: 7030 + components: + - type: Transform + pos: 11.5,8.5 + parent: 2 + - uid: 7031 + components: + - type: Transform + pos: -18.5,14.5 + parent: 2 + - uid: 7032 + components: + - type: Transform + pos: -17.5,7.5 + parent: 2 + - uid: 7033 + components: + - type: Transform + pos: -9.5,17.5 + parent: 2 + - uid: 7034 + components: + - type: Transform + pos: 8.5,63.5 + parent: 2 + - uid: 7035 + components: + - type: Transform + pos: 16.5,67.5 + parent: 2 + - uid: 7036 + components: + - type: Transform + pos: 15.5,73.5 + parent: 2 + - uid: 7037 + components: + - type: Transform + pos: 25.5,59.5 + parent: 2 + - uid: 7038 + components: + - type: Transform + pos: 59.5,46.5 + parent: 2 + - uid: 7039 + components: + - type: Transform + pos: 58.5,50.5 + parent: 2 + - uid: 7040 + components: + - type: Transform + pos: 47.5,57.5 + parent: 2 + - uid: 7041 + components: + - type: Transform + pos: 44.5,47.5 + parent: 2 + - uid: 7042 + components: + - type: Transform + pos: 37.5,62.5 + parent: 2 + - uid: 7043 + components: + - type: Transform + pos: 36.5,60.5 + parent: 2 + - uid: 7044 + components: + - type: Transform + pos: 55.5,56.5 + parent: 2 + - uid: 7045 + components: + - type: Transform + pos: 44.5,23.5 + parent: 2 +- proto: ClosetRadiationSuitFilled + entities: + - uid: 7046 + components: + - type: Transform + pos: -2.5,38.5 + parent: 2 + - uid: 7047 + components: + - type: Transform + pos: -33.5,23.5 + parent: 2 + - uid: 7048 + components: + - type: Transform + pos: -33.5,24.5 + parent: 2 + - uid: 7049 + components: + - type: Transform + pos: 6.5,37.5 + parent: 2 + - uid: 7050 + components: + - type: Transform + pos: -11.5,31.5 + parent: 2 + - uid: 7051 + components: + - type: Transform + pos: -11.5,31.5 + parent: 2 + - uid: 7052 + components: + - type: Transform + pos: -11.5,37.5 + parent: 2 + - uid: 7053 + components: + - type: Transform + pos: -11.5,37.5 + parent: 2 + - uid: 18670 + components: + - type: Transform + pos: 38.5,15.5 + parent: 2 + - uid: 18671 + components: + - type: Transform + pos: 38.5,15.5 + parent: 2 +- proto: ClosetSteelBase + entities: + - uid: 7054 + components: + - type: Transform + pos: -9.5,60.5 + parent: 2 + - uid: 7055 + components: + - type: Transform + pos: -8.5,60.5 + parent: 2 +- proto: ClosetWallMaintenanceFilledRandom + entities: + - uid: 7056 + components: + - type: Transform + pos: 74.5,55.5 + parent: 2 +- proto: ClothingBackpackClown + entities: + - uid: 745 + components: + - type: Transform + parent: 742 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 7057 + components: + - type: Transform + pos: 40.59282,43.67842 + parent: 2 +- proto: ClothingBackpackDuffelClown + entities: + - uid: 746 + components: + - type: Transform + parent: 742 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingBackpackDuffelMime + entities: + - uid: 774 + components: + - type: Transform + parent: 772 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: GroupExamine + group: + - hoverMessage: "" + contextText: verb-examine-group-other + icon: /Textures/Interface/examine-star.png + components: + - Armor + - ClothingSpeedModifier + entries: + - message: >- + Isso concede as seguintes proteções: + + - Dano de [color=orange]explosão[/color] [color=white]aos conteúdos[/color] reduzido em [color=lightblue]10%[/color]. + priority: 0 + component: Armor + - message: Diminui sua velocidade de corrida em [color=yellow]10%[/color]. + priority: 0 + component: ClothingSpeedModifier + title: null + - type: InsideEntityStorage + - uid: 7058 + components: + - type: Transform + pos: 40.524685,45.87787 + parent: 2 +- proto: ClothingBackpackDuffelSurgeryFilled + entities: + - uid: 7059 + components: + - type: Transform + pos: 59.48093,16.47347 + parent: 2 + - uid: 7060 + components: + - type: Transform + pos: -29.510458,54.469387 + parent: 2 + - uid: 7061 + components: + - type: Transform + pos: -3.5407438,59.420185 + parent: 2 + - uid: 7062 + components: + - type: Transform + pos: 11.418509,39.366848 + parent: 2 + - uid: 7063 + components: + - type: Transform + pos: 11.430464,39.904484 + parent: 2 +- proto: ClothingBackpackERTClown + entities: + - uid: 747 + components: + - type: Transform + parent: 742 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingBackpackMime + entities: + - uid: 775 + components: + - type: Transform + parent: 772 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingBackpackSatchelClown + entities: + - uid: 748 + components: + - type: Transform + parent: 742 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingBackpackSatchelMime + entities: + - uid: 776 + components: + - type: Transform + parent: 772 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingBeltMantis + entities: + - uid: 480 + components: + - type: Transform + pos: 34.256275,5.674018 + parent: 2 +- proto: ClothingBeltUtilityEngineering + entities: + - uid: 7064 + components: + - type: Transform + pos: -4.599819,40.670532 + parent: 2 + - uid: 7065 + components: + - type: Transform + pos: -4.4173317,40.54428 + parent: 2 + - uid: 7066 + components: + - type: Transform + pos: 78.430534,42.512993 + parent: 2 + - uid: 19774 + components: + - type: Transform + pos: 26.39628,-23.295946 + parent: 2 + - uid: 20213 + components: + - type: Transform + pos: 26.605682,-23.41542 + parent: 2 +- proto: ClothingBeltUtilityFilled + entities: + - uid: 7067 + components: + - type: Transform + pos: -21.469843,66.69192 + parent: 2 + - uid: 7068 + components: + - type: Transform + pos: 55.388428,17.467995 + parent: 2 + - uid: 7069 + components: + - type: Transform + pos: 55.603626,17.665127 + parent: 2 + - uid: 7070 + components: + - type: Transform + pos: 59.46577,28.456217 + parent: 2 + - uid: 7071 + components: + - type: Transform + pos: 59.680973,28.63543 + parent: 2 +- proto: ClothingEyesGlassesCheapSunglasses + entities: + - uid: 19795 + components: + - type: Transform + pos: 34.39234,-38.625298 + parent: 2 + - uid: 19796 + components: + - type: Transform + pos: 34.643623,-38.517773 + parent: 2 +- proto: ClothingEyesGlassesMeson + entities: + - uid: 20216 + components: + - type: Transform + pos: 26.39628,-24.206938 + parent: 2 + - uid: 20217 + components: + - type: Transform + pos: 26.635597,-24.35628 + parent: 2 + - uid: 20218 + components: + - type: Transform + pos: 26.35141,-24.341347 + parent: 2 +- proto: ClothingEyesGlassesSunglasses + entities: + - uid: 7072 + components: + - type: Transform + pos: -17.443285,67.75773 + parent: 2 + - uid: 7073 + components: + - type: Transform + pos: 0.41975856,59.424564 + parent: 2 +- proto: ClothingHandsGlovesColorBlack + entities: + - uid: 7074 + components: + - type: Transform + pos: 29.53992,62.564426 + parent: 2 + - uid: 19808 + components: + - type: Transform + pos: 28.38991,-38.56996 + parent: 2 + - uid: 19809 + components: + - type: Transform + pos: 28.479652,-38.462433 + parent: 2 + - uid: 19810 + components: + - type: Transform + pos: 28.551449,-38.37283 + parent: 2 +- proto: ClothingHandsGlovesColorYellow + entities: + - uid: 7075 + components: + - type: Transform + pos: -10.3801365,21.491434 + parent: 2 + - uid: 7076 + components: + - type: Transform + pos: -5.4825945,40.568024 + parent: 2 + - uid: 7077 + components: + - type: Transform + pos: 60.549847,31.581648 + parent: 2 +- proto: ClothingHandsGlovesCombat + entities: + - uid: 19781 + components: + - type: Transform + pos: 34.527466,-36.43892 + parent: 2 + - uid: 20214 + components: + - type: Transform + pos: 26.321495,-23.6245 + parent: 2 + - uid: 20215 + components: + - type: Transform + pos: 26.635597,-23.75891 + parent: 2 +- proto: ClothingHandsGlovesJanitor + entities: + - uid: 20329 + components: + - type: Transform + parent: 7004 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingHandsGlovesLatex + entities: + - uid: 7078 + components: + - type: Transform + pos: 58.572304,15.51898 + parent: 2 +- proto: ClothingHandsTacticalMaidGloves + entities: + - uid: 7079 + components: + - type: Transform + pos: 39.8144,66.24514 + parent: 2 +- proto: ClothingHeadBandGold + entities: + - uid: 7080 + components: + - type: Transform + pos: 31.58519,54.286488 + parent: 2 +- proto: ClothingHeadCourier + entities: + - uid: 7081 + components: + - type: Transform + pos: -5.3823576,3.5615594 + parent: 2 +- proto: ClothingHeadCourierFlipped + entities: + - uid: 7082 + components: + - type: Transform + pos: -6.695648,3.798901 + parent: 2 +- proto: ClothingHeadHatCargosoftFlipped + entities: + - uid: 7083 + components: + - type: Transform + pos: 0.58671916,12.564867 + parent: 2 +- proto: ClothingHeadHatFezMantis + entities: + - uid: 477 + components: + - type: Transform + pos: 34.46197,5.7214866 + parent: 2 +- proto: ClothingHeadHatFlatcapBartenderIdris + entities: + - uid: 20346 + components: + - type: Transform + parent: 20345 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingHeadHatFlatcapBartenderNanotrasen + entities: + - uid: 20360 + components: + - type: Transform + parent: 20345 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingHeadHatFlatcapBartenderOrion + entities: + - uid: 20359 + components: + - type: Transform + parent: 20345 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingHeadHatMimesoft + entities: + - uid: 777 + components: + - type: Transform + parent: 772 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingHeadHatMimesoftFlipped + entities: + - uid: 778 + components: + - type: Transform + parent: 772 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingHeadHatPaper + entities: + - uid: 7084 + components: + - type: Transform + pos: 27.29713,29.40831 + parent: 2 +- proto: ClothingHeadHatTacticalMaidHeadband + entities: + - uid: 7085 + components: + - type: Transform + pos: 39.21662,66.71109 + parent: 2 +- proto: ClothingHeadHelmetAtmosFire + entities: + - uid: 7086 + components: + - type: Transform + pos: -10.401194,21.55456 + parent: 2 +- proto: ClothingMaskBreath + entities: + - uid: 19814 + components: + - type: Transform + pos: 28.318115,-38.53412 + parent: 2 + - uid: 19815 + components: + - type: Transform + pos: 28.551449,-38.53412 + parent: 2 + - uid: 19816 + components: + - type: Transform + pos: 28.695038,-38.53412 + parent: 2 +- proto: ClothingMaskBreathMedical + entities: + - uid: 7087 + components: + - type: Transform + pos: 41.48497,21.60299 + parent: 2 + - uid: 7088 + components: + - type: Transform + pos: 58.56035,15.51898 + parent: 2 +- proto: ClothingMaskClown + entities: + - uid: 749 + components: + - type: Transform + parent: 742 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingMaskClownBanana + entities: + - uid: 750 + components: + - type: Transform + parent: 742 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingMaskGas + entities: + - uid: 7089 + components: + - type: Transform + pos: -7.6801195,29.392736 + parent: 2 + - uid: 7090 + components: + - type: Transform + pos: -7.5397444,29.49093 + parent: 2 + - uid: 7091 + components: + - type: Transform + pos: -7.371295,29.589127 + parent: 2 +- proto: ClothingMaskGasAtmos + entities: + - uid: 7092 + components: + - type: Transform + pos: -10.422249,21.575602 + parent: 2 + - uid: 7093 + components: + - type: Transform + pos: -11.457145,18.53368 + parent: 2 +- proto: ClothingMaskMime + entities: + - uid: 779 + components: + - type: Transform + parent: 772 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingMaskSadMime + entities: + - uid: 780 + components: + - type: Transform + parent: 772 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingMaskSexyClown + entities: + - uid: 751 + components: + - type: Transform + parent: 742 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingMaskSexyMime + entities: + - uid: 781 + components: + - type: Transform + parent: 772 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingNeckClownmedal + entities: + - uid: 752 + components: + - type: Transform + parent: 742 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingNeckStoleChaplain + entities: + - uid: 7094 + components: + - type: Transform + pos: 14.541786,59.652855 + parent: 2 +- proto: ClothingOuterApronBar + entities: + - uid: 20356 + components: + - type: Transform + parent: 20345 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingOuterClownPriest + entities: + - uid: 753 + components: + - type: Transform + parent: 742 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingOuterHardsuitClown + entities: + - uid: 754 + components: + - type: Transform + parent: 742 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingOuterHardsuitMime + entities: + - uid: 782 + components: + - type: Transform + parent: 772 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingOuterSuitAtmosFire + entities: + - uid: 7095 + components: + - type: Transform + pos: -10.401194,21.65977 + parent: 2 +- proto: ClothingOuterSuitRad + entities: + - uid: 7096 + components: + - type: Transform + pos: -11.458471,35.630077 + parent: 2 +- proto: ClothingOuterWinterBar + entities: + - uid: 20358 + components: + - type: Transform + parent: 20345 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingOuterWinterCoat + entities: + - uid: 19805 + components: + - type: Transform + pos: 29.377089,-38.605804 + parent: 2 + - uid: 19806 + components: + - type: Transform + pos: 29.556576,-38.516197 + parent: 2 + - uid: 19807 + components: + - type: Transform + pos: 29.718115,-38.408672 + parent: 2 +- proto: ClothingOuterWinterCoatLong + entities: + - uid: 19802 + components: + - type: Transform + pos: 29.448883,-38.480354 + parent: 2 + - uid: 19803 + components: + - type: Transform + pos: 29.592474,-38.408672 + parent: 2 + - uid: 19804 + components: + - type: Transform + pos: 29.484781,-38.408672 + parent: 2 +- proto: ClothingOuterWinterCoatMantis + entities: + - uid: 4392 + components: + - type: Transform + pos: 32.667603,5.6265497 + parent: 2 +- proto: ClothingOuterWinterJani + entities: + - uid: 20341 + components: + - type: Transform + parent: 7004 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingOuterWinterMime + entities: + - uid: 783 + components: + - type: Transform + parent: 772 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingOuterWinterMusician + entities: + - uid: 7097 + components: + - type: Transform + pos: 41.26708,39.659565 + parent: 2 +- proto: ClothingShoesBootsMag + entities: + - uid: 7098 + components: + - type: Transform + pos: 74.55618,42.616943 + parent: 2 + - uid: 7099 + components: + - type: Transform + pos: 74.55618,42.616943 + parent: 2 + - uid: 7100 + components: + - type: Transform + pos: 74.626366,45.703087 + parent: 2 + - uid: 7101 + components: + - type: Transform + pos: 74.626366,45.703087 + parent: 2 +- proto: ClothingShoesBootsWinterClown + entities: + - uid: 755 + components: + - type: Transform + parent: 742 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingShoesBootsWinterMime + entities: + - uid: 784 + components: + - type: Transform + parent: 772 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingShoesClown + entities: + - uid: 756 + components: + - type: Transform + parent: 742 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingShoesClownBanana + entities: + - uid: 757 + components: + - type: Transform + parent: 742 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingShoesClownLarge + entities: + - uid: 758 + components: + - type: Transform + parent: 742 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingUniformCourier + entities: + - uid: 7102 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.3551354,3.3736491 + parent: 2 +- proto: ClothingUniformJumpskirtBartender + entities: + - uid: 20353 + components: + - type: Transform + parent: 20345 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingUniformJumpskirtJanimaid + entities: + - uid: 7103 + components: + - type: Transform + pos: 44.528,54.73264 + parent: 2 + - uid: 7104 + components: + - type: Transform + pos: 44.51665,54.718178 + parent: 2 + - uid: 20344 + components: + - type: Transform + parent: 7004 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingUniformJumpskirtJanimaidmini + entities: + - uid: 20335 + components: + - type: Transform + parent: 7004 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingUniformJumpskirtJanitor + entities: + - uid: 20331 + components: + - type: Transform + parent: 7004 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingUniformJumpskirtMime + entities: + - uid: 785 + components: + - type: Transform + parent: 772 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingUniformJumpskirtTacticalMaid + entities: + - uid: 7105 + components: + - type: Transform + pos: 39.30031,66.41241 + parent: 2 +- proto: ClothingUniformJumpskirtTacticool + entities: + - uid: 7106 + components: + - type: Transform + pos: 39.587246,66.567726 + parent: 2 +- proto: ClothingUniformJumpsuitAtmos + entities: + - uid: 7107 + components: + - type: Transform + pos: -10.3801365,21.533518 + parent: 2 +- proto: ClothingUniformJumpsuitBartender + entities: + - uid: 20351 + components: + - type: Transform + parent: 20345 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingUniformJumpsuitBartenderIdris + entities: + - uid: 20355 + components: + - type: Transform + parent: 20345 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingUniformJumpsuitBartenderIdrisFlipped + entities: + - uid: 20347 + components: + - type: Transform + parent: 20345 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingUniformJumpsuitBartenderNt + entities: + - uid: 20354 + components: + - type: Transform + parent: 20345 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingUniformJumpsuitBartenderOrion + entities: + - uid: 20357 + components: + - type: Transform + parent: 20345 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingUniformJumpsuitBartenderPurple + entities: + - uid: 20349 + components: + - type: Transform + parent: 20345 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingUniformJumpsuitClown + entities: + - uid: 759 + components: + - type: Transform + parent: 742 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingUniformJumpsuitClownBanana + entities: + - uid: 760 + components: + - type: Transform + parent: 742 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingUniformJumpsuitJanitor + entities: + - uid: 20336 + components: + - type: Transform + parent: 7004 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingUniformJumpsuitJanitorIdris + entities: + - uid: 14549 + components: + - type: Transform + parent: 7004 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingUniformJumpsuitJanitorNt + entities: + - uid: 20337 + components: + - type: Transform + parent: 7004 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingUniformJumpsuitJanitorOrion + entities: + - uid: 20343 + components: + - type: Transform + parent: 7004 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingUniformJumpsuitMime + entities: + - uid: 786 + components: + - type: Transform + parent: 772 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingUniformSkirtCourier + entities: + - uid: 7108 + components: + - type: Transform + pos: -6.228554,3.7533958 + parent: 2 +- proto: ClownRecorder + entities: + - uid: 761 + components: + - type: Transform + parent: 742 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ComfyChair + entities: + - uid: 479 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.5,4.5 + parent: 2 + - uid: 6896 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 73.5,28.5 + parent: 2 + - uid: 7109 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,52.5 + parent: 2 + - uid: 7112 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,59.5 + parent: 2 + - uid: 7113 + components: + - type: Transform + pos: 2.5,52.5 + parent: 2 + - uid: 7114 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,50.5 + parent: 2 + - uid: 7115 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 17.5,58.5 + parent: 2 + - uid: 7116 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 16.5,51.5 + parent: 2 + - uid: 7117 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,51.5 + parent: 2 + - uid: 7118 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 20.5,51.5 + parent: 2 + - uid: 7119 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,51.5 + parent: 2 + - uid: 7120 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,39.5 + parent: 2 + - uid: 7121 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,39.5 + parent: 2 + - uid: 7122 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 82.5,34.5 + parent: 2 + - uid: 7123 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 86.5,36.5 + parent: 2 + - uid: 7124 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 86.5,32.5 + parent: 2 + - uid: 7125 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 76.5,31.5 + parent: 2 + - uid: 7126 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 74.5,31.5 + parent: 2 + - uid: 7128 + components: + - type: Transform + pos: 78.5,25.5 + parent: 2 + - uid: 7129 + components: + - type: Transform + pos: 83.5,25.5 + parent: 2 + - uid: 7130 + components: + - type: Transform + pos: 82.5,25.5 + parent: 2 + - uid: 7131 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 81.5,23.5 + parent: 2 + - uid: 7132 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 81.5,24.5 + parent: 2 + - uid: 7133 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 83.5,22.5 + parent: 2 + - uid: 7134 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 82.5,22.5 + parent: 2 + - uid: 7135 + components: + - type: Transform + pos: 63.5,16.5 + parent: 2 + - uid: 7136 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 63.5,13.5 + parent: 2 +- proto: CommsComputerCircuitboard + entities: + - uid: 7137 + components: + - type: Transform + pos: -8.678612,45.68498 + parent: 2 + - uid: 7138 + components: + - type: Transform + pos: 29.689651,54.454826 + parent: 2 +- proto: ComputerAlert + entities: + - uid: 7139 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,20.5 + parent: 2 + - uid: 7140 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,16.5 + parent: 2 + - uid: 7141 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,12.5 + parent: 2 + - uid: 7142 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,8.5 + parent: 2 + - uid: 7143 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -32.5,6.5 + parent: 2 + - uid: 7144 + components: + - type: Transform + pos: -7.5,21.5 + parent: 2 + - uid: 7145 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,36.5 + parent: 2 + - uid: 7146 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.5,23.5 + parent: 2 + - uid: 7147 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,6.5 + parent: 2 + - uid: 7148 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 51.5,16.5 + parent: 2 + - uid: 7149 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,6.5 + parent: 2 + - uid: 7150 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,-0.5 + parent: 2 + - uid: 18447 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,-38.5 + parent: 2 + - uid: 18469 + components: + - type: Transform + pos: 34.5,-23.5 + parent: 2 +- proto: ComputerAnalysisConsole + entities: + - uid: 7151 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,2.5 + parent: 2 + - uid: 7152 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,1.5 + parent: 2 + - uid: 7153 + components: + - type: Transform + pos: 35.5,11.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 12782: + - ArtifactAnalyzerSender: ArtifactAnalyzerReceiver + - uid: 7154 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 53.5,16.5 + parent: 2 +- proto: ComputerBroken + entities: + - uid: 7155 + components: + - type: Transform + pos: -9.5,68.5 + parent: 2 + - uid: 7156 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 40.5,20.5 + parent: 2 +- proto: ComputerCargoBounty + entities: + - uid: 7157 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,14.5 + parent: 2 + - uid: 7158 + components: + - type: Transform + pos: 2.5,12.5 + parent: 2 + - uid: 7159 + components: + - type: Transform + pos: 86.5,38.5 + parent: 2 +- proto: ComputerCargoOrders + entities: + - uid: 7160 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,13.5 + parent: 2 + - uid: 7161 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,12.5 + parent: 2 + - uid: 7162 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,15.5 + parent: 2 + - uid: 7163 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,14.5 + parent: 2 + - uid: 7164 + components: + - type: Transform + pos: 85.5,38.5 + parent: 2 + - uid: 18448 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,-38.5 + parent: 2 +- proto: ComputerCargoShuttle + entities: + - uid: 7165 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,13.5 + parent: 2 + - uid: 7166 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,14.5 + parent: 2 +- proto: ComputerCloningConsole + entities: + - uid: 7167 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 84.5,30.5 + parent: 2 + - uid: 7168 + components: + - type: Transform + pos: 22.5,28.5 + parent: 2 +- proto: ComputerComms + entities: + - uid: 7169 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 83.5,34.5 + parent: 2 + - uid: 15256 + components: + - type: Transform + pos: 73.5,29.5 + parent: 2 +- proto: ComputerCrewMonitoring + entities: + - uid: 7171 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,27.5 + parent: 2 + - uid: 7172 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -19.5,61.5 + parent: 2 + - uid: 7173 + components: + - type: Transform + pos: -1.5,60.5 + parent: 2 + - uid: 7174 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,37.5 + parent: 2 + - uid: 7175 + components: + - type: Transform + pos: 4.5,45.5 + parent: 2 + - uid: 7176 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 74.5,37.5 + parent: 2 + - uid: 7177 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 87.5,37.5 + parent: 2 + - uid: 7178 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 85.5,30.5 + parent: 2 + - uid: 7179 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 71.5,13.5 + parent: 2 + - uid: 7180 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,58.5 + parent: 2 +- proto: ComputerCriminalRecords + entities: + - uid: 7181 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,28.5 + parent: 2 + - uid: 7182 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,14.5 + parent: 2 + - uid: 7183 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,29.5 + parent: 2 + - uid: 7184 + components: + - type: Transform + pos: -15.5,62.5 + parent: 2 + - uid: 7185 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,51.5 + parent: 2 + - uid: 7186 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,63.5 + parent: 2 + - uid: 7188 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 45.5,12.5 + parent: 2 + - uid: 7189 + components: + - type: Transform + pos: -14.5,52.5 + parent: 2 + - uid: 7190 + components: + - type: Transform + pos: -0.5,60.5 + parent: 2 + - uid: 7191 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 87.5,36.5 + parent: 2 + - uid: 7192 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 62.5,57.5 + parent: 2 + - uid: 7193 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 73.5,14.5 + parent: 2 + - uid: 18471 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 34.5,-25.5 + parent: 2 + - uid: 19539 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,66.5 + parent: 2 +- proto: ComputerId + entities: + - uid: 7196 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 74.5,39.5 + parent: 2 + - uid: 7197 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 83.5,33.5 + parent: 2 + - uid: 8114 + components: + - type: Transform + pos: 74.5,29.5 + parent: 2 + - uid: 18445 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,-35.5 + parent: 2 +- proto: ComputerMassMedia + entities: + - uid: 18472 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.5,-25.5 + parent: 2 +- proto: ComputerMedicalRecords + entities: + - uid: 7194 + components: + - type: Transform + pos: 29.5,29.5 + parent: 2 + - uid: 7195 + components: + - type: Transform + pos: 26.5,29.5 + parent: 2 + - uid: 7199 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 59.5,17.5 + parent: 2 + - uid: 7200 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -29.5,55.5 + parent: 2 + - uid: 7201 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 16.5,38.5 + parent: 2 + - uid: 7202 + components: + - type: Transform + pos: 5.5,45.5 + parent: 2 + - uid: 7203 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,37.5 + parent: 2 + - uid: 7204 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,41.5 + parent: 2 + - uid: 7205 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 86.5,30.5 + parent: 2 +- proto: ComputerPowerMonitoring + entities: + - uid: 7206 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,19.5 + parent: 2 + - uid: 7207 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,23.5 + parent: 2 + - uid: 7208 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,28.5 + parent: 2 + - uid: 7209 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 87.5,32.5 + parent: 2 + - uid: 7210 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,-1.5 + parent: 2 + - uid: 18439 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 34.5,-33.5 + parent: 2 +- proto: ComputerRadar + entities: + - uid: 7211 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,19.5 + parent: 2 + - uid: 7212 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,29.5 + parent: 2 + - uid: 7213 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,44.5 + parent: 2 + - uid: 7214 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 87.5,31.5 + parent: 2 + - uid: 7215 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,-11.5 + parent: 2 + - uid: 7216 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,-1.5 + parent: 2 +- proto: ComputerResearchAndDevelopment + entities: + - uid: 7217 + components: + - type: Transform + pos: 24.5,2.5 + parent: 2 + - uid: 7218 + components: + - type: Transform + pos: 28.5,3.5 + parent: 2 + - uid: 7219 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 53.5,15.5 + parent: 2 + - uid: 7220 + components: + - type: Transform + pos: 56.5,22.5 + parent: 2 + - uid: 7221 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 52.5,20.5 + parent: 2 + - uid: 7222 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 48.5,26.5 + parent: 2 + - uid: 18446 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,-36.5 + parent: 2 +- proto: ComputerRoboticsControl + entities: + - uid: 18468 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,-32.5 + parent: 2 +- proto: ComputerSalvageExpedition + entities: + - uid: 7223 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,6.5 + parent: 2 + - uid: 7224 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,17.5 + parent: 2 + - uid: 7225 + components: + - type: Transform + pos: 84.5,38.5 + parent: 2 +- proto: ComputerShuttleCargo + entities: + - uid: 7226 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,3.5 + parent: 2 +- proto: ComputerShuttleSalvage + entities: + - uid: 7227 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,5.5 + parent: 2 +- proto: ComputerSolarControl + entities: + - uid: 7228 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,23.5 + parent: 2 + - uid: 7229 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,27.5 + parent: 2 + - uid: 7230 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 87.5,33.5 + parent: 2 + - uid: 7231 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,64.5 + parent: 2 + - uid: 7232 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,7.5 + parent: 2 + - uid: 7233 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 41.5,1.5 + parent: 2 +- proto: ComputerStationRecords + entities: + - uid: 7234 + components: + - type: Transform + pos: -14.5,62.5 + parent: 2 + - uid: 7235 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,51.5 + parent: 2 +- proto: ComputerSurveillanceCameraMonitor + entities: + - uid: 7236 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,13.5 + parent: 2 + - uid: 7237 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,60.5 + parent: 2 + - uid: 7238 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,51.5 + parent: 2 + - uid: 7239 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,64.5 + parent: 2 + - uid: 7242 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 51.5,15.5 + parent: 2 + - uid: 7243 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,37.5 + parent: 2 + - uid: 7244 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 83.5,35.5 + parent: 2 + - uid: 7245 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 87.5,35.5 + parent: 2 + - uid: 7246 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 73.5,13.5 + parent: 2 + - uid: 12090 + components: + - type: Transform + pos: -7.5,68.5 + parent: 2 + - uid: 18470 + components: + - type: Transform + pos: 33.5,-23.5 + parent: 2 +- proto: ComputerSurveillanceWirelessCameraMonitor + entities: + - uid: 7247 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,55.5 + parent: 2 +- proto: ComputerTelevision + entities: + - uid: 5957 + components: + - type: Transform + pos: 72.5,30.5 + parent: 2 + - uid: 7248 + components: + - type: Transform + pos: -31.5,63.5 + parent: 2 +- proto: ContainmentFieldGenerator + entities: + - uid: 7249 + components: + - type: Transform + pos: 49.5,-4.5 + parent: 2 + - uid: 7250 + components: + - type: Transform + pos: 53.5,-4.5 + parent: 2 +- proto: ConveyorBelt + entities: + - uid: 7251 + components: + - type: Transform + pos: -1.5,2.5 + parent: 2 + - type: DeviceLinkSink + links: + - 15416 + - uid: 7252 + components: + - type: Transform + pos: -1.5,1.5 + parent: 2 + - type: DeviceLinkSink + links: + - 15416 + - uid: 7253 + components: + - type: Transform + pos: -1.5,0.5 + parent: 2 + - type: DeviceLinkSink + links: + - 15416 + - uid: 7254 + components: + - type: Transform + pos: 2.5,2.5 + parent: 2 + - type: DeviceLinkSink + links: + - 15415 + - uid: 7255 + components: + - type: Transform + pos: 2.5,1.5 + parent: 2 + - type: DeviceLinkSink + links: + - 15415 + - uid: 7256 + components: + - type: Transform + pos: 2.5,0.5 + parent: 2 + - type: DeviceLinkSink + links: + - 15415 + - uid: 7257 + components: + - type: Transform + pos: -1.5,3.5 + parent: 2 + - type: DeviceLinkSink + links: + - 15416 + - uid: 7258 + components: + - type: Transform + pos: -1.5,4.5 + parent: 2 + - type: DeviceLinkSink + links: + - 15416 + - uid: 7259 + components: + - type: Transform + pos: -1.5,5.5 + parent: 2 + - type: DeviceLinkSink + links: + - 15416 + - uid: 7260 + components: + - type: Transform + pos: -1.5,6.5 + parent: 2 + - type: DeviceLinkSink + links: + - 15416 + - uid: 7261 + components: + - type: Transform + pos: 2.5,3.5 + parent: 2 + - type: DeviceLinkSink + links: + - 15415 + - uid: 7262 + components: + - type: Transform + pos: 2.5,4.5 + parent: 2 + - type: DeviceLinkSink + links: + - 15415 + - uid: 7263 + components: + - type: Transform + pos: 2.5,5.5 + parent: 2 + - type: DeviceLinkSink + links: + - 15415 + - uid: 7264 + components: + - type: Transform + pos: 2.5,6.5 + parent: 2 + - type: DeviceLinkSink + links: + - 15415 + - uid: 7265 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,5.5 + parent: 2 + - type: DeviceLinkSink + links: + - 15414 + - uid: 7266 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,5.5 + parent: 2 + - type: DeviceLinkSink + links: + - 15414 + - uid: 7267 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,5.5 + parent: 2 + - type: DeviceLinkSink + links: + - 15414 + - uid: 7268 + components: + - type: Transform + pos: 9.5,1.5 + parent: 2 + - type: DeviceLinkSink + links: + - 15414 + - uid: 7269 + components: + - type: Transform + pos: 9.5,2.5 + parent: 2 + - type: DeviceLinkSink + links: + - 15414 + - uid: 7270 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,2.5 + parent: 2 + - type: DeviceLinkSink + links: + - 15414 + - uid: 7271 + components: + - type: Transform + pos: 10.5,3.5 + parent: 2 + - type: DeviceLinkSink + links: + - 15414 + - uid: 7272 + components: + - type: Transform + pos: 10.5,4.5 + parent: 2 + - type: DeviceLinkSink + links: + - 15414 + - uid: 7273 + components: + - type: Transform + pos: 10.5,5.5 + parent: 2 + - type: DeviceLinkSink + links: + - 15414 + - uid: 7274 + components: + - type: Transform + pos: 9.5,0.5 + parent: 2 + - type: DeviceLinkSink + links: + - 15414 + - 14459 +- proto: CourierBag + entities: + - uid: 7275 + components: + - type: Transform + pos: -5.6196995,3.751433 + parent: 2 +- proto: CrateArtifactContainer + entities: + - uid: 7276 + components: + - type: Transform + pos: 40.5,10.5 + parent: 2 + - type: Lock + locked: False + - type: Fixtures + fixtures: + fix1: + shape: !type:PhysShapeCircle + radius: 0.45 + position: 0,0 + mask: + - Impassable + - LowImpassable + layer: + - BulletImpassable + - Opaque + density: 50 + hard: True + restitution: 0 + friction: 0.4 + - type: EntityStorage + open: True + removedMasks: 20 + - type: PlaceableSurface + isPlaceable: True +- proto: CrateCoffin + entities: + - uid: 7277 + components: + - type: Transform + pos: 15.5,62.5 + parent: 2 +- proto: CrateCommandSecure + entities: + - uid: 7278 + components: + - type: Transform + pos: 78.5,31.5 + parent: 2 +- proto: CrateEmptySpawner + entities: + - uid: 7279 + components: + - type: Transform + pos: -13.5,11.5 + parent: 2 + - uid: 7280 + components: + - type: Transform + pos: -13.5,13.5 + parent: 2 + - uid: 7281 + components: + - type: Transform + pos: 7.5,2.5 + parent: 2 + - uid: 7282 + components: + - type: Transform + pos: 14.5,1.5 + parent: 2 + - uid: 7283 + components: + - type: Transform + pos: 16.5,1.5 + parent: 2 +- proto: CrateEngineeringAMEJar + entities: + - uid: 18530 + components: + - type: Transform + pos: -14.5,26.5 + parent: 2 +- proto: CrateEngineeringCableHV + entities: + - uid: 7285 + components: + - type: Transform + pos: 35.5,64.5 + parent: 2 + - uid: 7286 + components: + - type: Transform + pos: -24.5,8.5 + parent: 2 +- proto: CrateEvaKit + entities: + - uid: 7287 + components: + - type: Transform + pos: 78.5,45.5 + parent: 2 +- proto: CrateFilledSpawner + entities: + - uid: 7288 + components: + - type: Transform + pos: -13.5,14.5 + parent: 2 + - uid: 7289 + components: + - type: Transform + pos: -12.5,14.5 + parent: 2 + - uid: 7290 + components: + - type: Transform + pos: -8.5,14.5 + parent: 2 + - uid: 7291 + components: + - type: Transform + pos: -8.5,13.5 + parent: 2 + - uid: 7292 + components: + - type: Transform + pos: -9.5,14.5 + parent: 2 + - uid: 7293 + components: + - type: Transform + pos: 6.5,2.5 + parent: 2 + - uid: 7294 + components: + - type: Transform + pos: 6.5,3.5 + parent: 2 +- proto: CrateFoodMRE + entities: + - uid: 7295 + components: + - type: Transform + pos: -13.5,3.5 + parent: 2 +- proto: CrateFreezer + entities: + - uid: 7296 + components: + - type: Transform + pos: 54.5,51.5 + parent: 2 +- proto: CrateFunInstrumentsVariety + entities: + - uid: 7297 + components: + - type: Transform + pos: 40.5,39.5 + parent: 2 +- proto: CrateGenericSteel + entities: + - uid: 7298 + components: + - type: Transform + pos: -7.5,25.5 + parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.147 + 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: + - 7299 + - 7303 + - 7300 + - 7304 + - 7305 + - 7308 + - 7302 + - 7306 + - 7307 + - 7301 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null +- proto: CrateHydroponicsSeeds + entities: + - uid: 5810 + components: + - type: Transform + pos: -28.5,75.5 + parent: 2 + - uid: 7310 + components: + - type: Transform + pos: 10.5,76.5 + parent: 2 +- proto: CrateHydroponicsSeedsMedicinal + entities: + - uid: 7311 + components: + - type: Transform + pos: 50.5,47.5 + parent: 2 +- proto: CrateInternals + entities: + - uid: 7312 + components: + - type: Transform + pos: -13.5,1.5 + parent: 2 +- proto: CrateMedical + entities: + - uid: 7313 + components: + - type: Transform + pos: 19.5,28.5 + parent: 2 +- proto: CrateMedicalSecure + entities: + - uid: 7314 + components: + - type: Transform + pos: 21.5,23.5 + parent: 2 +- proto: CrateMedicalSurgery + entities: + - uid: 7316 + components: + - type: Transform + pos: 14.5,40.5 + parent: 2 +- proto: CrateNPCCow + entities: + - uid: 7317 + components: + - type: Transform + pos: 52.5,42.5 + parent: 2 +- proto: CratePartsT3T4 + entities: + - uid: 19772 + components: + - type: Transform + pos: 26.5,-27.5 + parent: 2 + - uid: 19773 + components: + - type: Transform + pos: 26.5,-26.5 + parent: 2 +- proto: CrateSecurityHelmet + entities: + - uid: 7318 + components: + - type: Transform + pos: -19.5,67.5 + parent: 2 +- proto: CrateSecurityRiot + entities: + - uid: 7319 + components: + - type: Transform + pos: -19.5,68.5 + parent: 2 +- proto: CrateSecurityTrackingMindshieldImplants + entities: + - uid: 7320 + components: + - type: Transform + pos: -16.5,67.5 + parent: 2 +- proto: CrateServiceBooks + entities: + - uid: 7321 + components: + - type: Transform + pos: 18.5,58.5 + parent: 2 +- proto: CrateServiceJanitorialSupplies + entities: + - uid: 7322 + components: + - type: Transform + pos: 43.5,53.5 + parent: 2 +- proto: CrateSlimepersonLifeSupport + entities: + - uid: 7323 + components: + - type: Transform + pos: -13.5,2.5 + parent: 2 +- proto: CrateTrashCartJani + entities: + - uid: 7324 + components: + - type: Transform + pos: 39.5,56.5 + parent: 2 +- proto: CrayonMime + entities: + - uid: 787 + components: + - type: Transform + parent: 772 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 788 + components: + - type: Transform + parent: 772 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 789 + components: + - type: Transform + parent: 772 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 7325 + components: + - type: Transform + pos: 40.83351,45.414948 + parent: 2 +- proto: Crematorium + entities: + - uid: 7326 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,61.5 + parent: 2 +- proto: CrewMonitoringServer + entities: + - uid: 7327 + components: + - type: Transform + pos: 17.5,37.5 + parent: 2 + - type: SingletonDeviceNetServer + active: False + available: False + - uid: 18130 + components: + - type: Transform + pos: 30.5,-17.5 + parent: 2 + - type: SingletonDeviceNetServer + active: False + available: False +- proto: Crowbar + entities: + - uid: 7328 + components: + - type: Transform + pos: 36.297527,7.6566176 + parent: 2 + - uid: 19788 + components: + - type: Transform + pos: 36.510292,-36.43892 + parent: 2 + - uid: 20312 + components: + - type: Transform + pos: 59.515217,24.521137 + parent: 2 + - uid: 20319 + components: + - type: Transform + pos: 48.198685,60.650383 + parent: 2 + - uid: 20323 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.444782,64.52015 + parent: 2 +- proto: CrowbarRed + entities: + - uid: 7329 + components: + - type: Transform + pos: 73.59081,62.54297 + parent: 2 + - uid: 20334 + components: + - type: Transform + parent: 7004 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: CryogenicSleepUnitSpawnerLateJoin + entities: + - uid: 7330 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 63.5,2.5 + parent: 2 + - uid: 7331 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 63.5,3.5 + parent: 2 + - uid: 7332 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 63.5,4.5 + parent: 2 + - uid: 7333 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 64.5,0.5 + parent: 2 + - uid: 7334 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 66.5,0.5 + parent: 2 +- proto: CryogenicSleepUnitSpawnerPrisoner + entities: + - uid: 15065 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,66.5 + parent: 2 + - uid: 19472 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,69.5 + parent: 2 +- proto: CryoPod + entities: + - uid: 7335 + components: + - type: Transform + pos: 10.5,35.5 + parent: 2 +- proto: CryoxadoneBeakerSmall + entities: + - uid: 7336 + components: + - type: Transform + pos: 19.5,30.5 + parent: 2 +- proto: DawInstrumentMachineCircuitboard + entities: + - uid: 7337 + components: + - type: Transform + pos: 41.533226,39.5077 + parent: 2 +- proto: DefaultStationBeaconAI + entities: + - uid: 7338 + components: + - type: Transform + pos: 35.5,0.5 + parent: 2 +- proto: DefaultStationBeaconAnomalyGenerator + entities: + - uid: 7341 + components: + - type: Transform + pos: 51.5,3.5 + parent: 2 +- proto: DefaultStationBeaconArmory + entities: + - uid: 7342 + components: + - type: Transform + pos: -16.5,69.5 + parent: 2 +- proto: DefaultStationBeaconArrivals + entities: + - uid: 7343 + components: + - type: Transform + pos: 73.5,3.5 + parent: 2 +- proto: DefaultStationBeaconArtifactLab + entities: + - uid: 7344 + components: + - type: Transform + pos: 35.5,10.5 + parent: 2 +- proto: DefaultStationBeaconAtmospherics + entities: + - uid: 7345 + components: + - type: Transform + pos: -27.5,19.5 + parent: 2 +- proto: DefaultStationBeaconBar + entities: + - uid: 7346 + components: + - type: Transform + pos: 60.5,38.5 + parent: 2 +- proto: DefaultStationBeaconBotany + entities: + - uid: 7347 + components: + - type: Transform + pos: 46.5,41.5 + parent: 2 +- proto: DefaultStationBeaconBridge + entities: + - uid: 7348 + components: + - type: Transform + pos: 80.5,34.5 + parent: 2 +- proto: DefaultStationBeaconBrig + entities: + - uid: 7349 + components: + - type: Transform + pos: -13.5,56.5 + parent: 2 +- proto: DefaultStationBeaconCaptainsQuarters + entities: + - uid: 7350 + components: + - type: Transform + pos: 77.5,29.5 + parent: 2 +- proto: DefaultStationBeaconCargoBay + entities: + - uid: 7351 + components: + - type: Transform + pos: 0.5,6.5 + parent: 2 +- proto: DefaultStationBeaconCargoReception + entities: + - uid: 7352 + components: + - type: Transform + pos: 9.5,11.5 + parent: 2 +- proto: DefaultStationBeaconCERoom + entities: + - uid: 7353 + components: + - type: Transform + pos: -3.5,27.5 + parent: 2 +- proto: DefaultStationBeaconChapel + entities: + - uid: 7354 + components: + - type: Transform + pos: 9.5,55.5 + parent: 2 +- proto: DefaultStationBeaconChemistry + entities: + - uid: 7355 + components: + - type: Transform + pos: 12.5,25.5 + parent: 2 +- proto: DefaultStationBeaconCMORoom + entities: + - uid: 7356 + components: + - type: Transform + pos: 17.5,38.5 + parent: 2 +- proto: DefaultStationBeaconCommand + entities: + - uid: 7357 + components: + - type: Transform + pos: 70.5,34.5 + parent: 2 +- proto: DefaultStationBeaconConferenceRoom + entities: + - uid: 18848 + components: + - type: Transform + pos: 82.5,24.5 + parent: 2 +- proto: DefaultStationBeaconCryonics + entities: + - uid: 7358 + components: + - type: Transform + pos: 10.5,34.5 + parent: 2 +- proto: DefaultStationBeaconCryosleep + entities: + - uid: 7359 + components: + - type: Transform + pos: 65.5,3.5 + parent: 2 +- proto: DefaultStationBeaconDetectiveRoom + entities: + - uid: 7360 + components: + - type: Transform + pos: 2.5,59.5 + parent: 2 + - uid: 7361 + components: + - type: Transform + pos: 0.5,58.5 + parent: 2 +- proto: DefaultStationBeaconDorms + entities: + - uid: 7362 + components: + - type: Transform + pos: 24.5,16.5 + parent: 2 +- proto: DefaultStationBeaconEngineering + entities: + - uid: 7363 + components: + - type: Transform + pos: -8.5,39.5 + parent: 2 +- proto: DefaultStationBeaconEscapePod + entities: + - uid: 7364 + components: + - type: Transform + pos: 76.5,16.5 + parent: 2 + - uid: 7365 + components: + - type: Transform + pos: -38.5,56.5 + parent: 2 + - uid: 7366 + components: + - type: Transform + pos: 14.5,77.5 + parent: 2 + - uid: 7367 + components: + - type: Transform + pos: 19.5,4.5 + parent: 2 +- proto: DefaultStationBeaconEvac + entities: + - uid: 7368 + components: + - type: Transform + pos: 65.5,61.5 + parent: 2 +- proto: DefaultStationBeaconEVAStorage + entities: + - uid: 7369 + components: + - type: Transform + pos: 76.5,43.5 + parent: 2 +- proto: DefaultStationBeaconGravGen + entities: + - uid: 7370 + components: + - type: Transform + pos: -20.5,43.5 + parent: 2 +- proto: DefaultStationBeaconHOPOffice + entities: + - uid: 7371 + components: + - type: Transform + pos: 77.5,39.5 + parent: 2 +- proto: DefaultStationBeaconHOSRoom + entities: + - uid: 7372 + components: + - type: Transform + pos: -18.5,54.5 + parent: 2 +- proto: DefaultStationBeaconJanitorsCloset + entities: + - uid: 7373 + components: + - type: Transform + pos: 40.5,53.5 + parent: 2 +- proto: DefaultStationBeaconKitchen + entities: + - uid: 7374 + components: + - type: Transform + pos: 54.5,42.5 + parent: 2 +- proto: DefaultStationBeaconLawOffice + entities: + - uid: 7375 + components: + - type: Transform + pos: -23.5,55.5 + parent: 2 +- proto: DefaultStationBeaconLibrary + entities: + - uid: 7376 + components: + - type: Transform + pos: 17.5,56.5 + parent: 2 +- proto: DefaultStationBeaconMailroom + entities: + - uid: 7377 + components: + - type: Transform + pos: -6.5,6.5 + parent: 2 +- proto: DefaultStationBeaconMedbay + entities: + - uid: 7378 + components: + - type: Transform + pos: 28.5,34.5 + parent: 2 +- proto: DefaultStationBeaconMedical + entities: + - uid: 7379 + components: + - type: Transform + pos: 16.5,31.5 + parent: 2 +- proto: DefaultStationBeaconMetempsychosis + entities: + - uid: 7380 + components: + - type: Transform + pos: 22.5,26.5 + parent: 2 +- proto: DefaultStationBeaconMorgue + entities: + - uid: 7381 + components: + - type: Transform + pos: 17.5,44.5 + parent: 2 +- proto: DefaultStationBeaconPermaBrig + entities: + - uid: 7382 + components: + - type: Transform + pos: -31.5,66.5 + parent: 2 +- proto: DefaultStationBeaconPowerBank + entities: + - uid: 7383 + components: + - type: Transform + pos: -11.5,44.5 + parent: 2 +- proto: DefaultStationBeaconQMRoom + entities: + - uid: 7384 + components: + - type: Transform + pos: 0.5,15.5 + parent: 2 +- proto: DefaultStationBeaconRDRoom + entities: + - uid: 7385 + components: + - type: Transform + pos: 52.5,16.5 + parent: 2 +- proto: DefaultStationBeaconRND + entities: + - uid: 7386 + components: + - type: Transform + pos: 47.5,28.5 + parent: 2 +- proto: DefaultStationBeaconRobotics + entities: + - uid: 7387 + components: + - type: Transform + pos: 58.5,21.5 + parent: 2 +- proto: DefaultStationBeaconSalvage + entities: + - uid: 7388 + components: + - type: Transform + pos: -12.5,6.5 + parent: 2 +- proto: DefaultStationBeaconSecurity + entities: + - uid: 7389 + components: + - type: Transform + pos: -23.5,69.5 + parent: 2 +- proto: DefaultStationBeaconSecurityCheckpoint + entities: + - uid: 7390 + components: + - type: Transform + pos: 7.5,28.5 + parent: 2 + - uid: 7391 + components: + - type: Transform + pos: -4.5,30.5 + parent: 2 + - uid: 7392 + components: + - type: Transform + pos: -5.5,14.5 + parent: 2 + - uid: 7393 + components: + - type: Transform + pos: 44.5,13.5 + parent: 2 + - uid: 7394 + components: + - type: Transform + pos: 61.5,56.5 + parent: 2 + - uid: 7395 + components: + - type: Transform + pos: 71.5,14.5 + parent: 2 +- proto: DefaultStationBeaconServerRoom + entities: + - uid: 7396 + components: + - type: Transform + pos: 24.5,0.5 + parent: 2 +- proto: DefaultStationBeaconService + entities: + - uid: 7397 + components: + - type: Transform + pos: 54.5,39.5 + parent: 2 +- proto: DefaultStationBeaconSolars + entities: + - uid: 7398 + components: + - type: Transform + pos: -22.5,8.5 + parent: 2 +- proto: DefaultStationBeaconSurgery + entities: + - uid: 7399 + components: + - type: Transform + pos: 13.5,39.5 + parent: 2 +- proto: DefaultStationBeaconTechVault + entities: + - uid: 7400 + components: + - type: Transform + pos: -7.5,44.5 + parent: 2 + - uid: 18660 + components: + - type: Transform + pos: -8.5,44.5 + parent: 2 +- proto: DefaultStationBeaconTheater + entities: + - uid: 7402 + components: + - type: Transform + pos: 37.5,40.5 + parent: 2 +- proto: DefaultStationBeaconToolRoom + entities: + - uid: 7403 + components: + - type: Transform + pos: 60.5,30.5 + parent: 2 +- proto: DefaultStationBeaconVault + entities: + - uid: 7404 + components: + - type: Transform + pos: 30.5,55.5 + parent: 2 +- proto: DefaultStationBeaconWardensOffice + entities: + - uid: 7405 + components: + - type: Transform + pos: -15.5,61.5 + parent: 2 +- proto: DefibrillatorCabinetFilled + entities: + - uid: 7406 + components: + - type: Transform + pos: 17.5,33.5 + parent: 2 + - uid: 7407 + components: + - type: Transform + pos: 34.5,25.5 + parent: 2 + - uid: 7408 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,44.5 + parent: 2 + - uid: 7409 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,39.5 + parent: 2 + - uid: 7410 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,38.5 + parent: 2 + - uid: 7411 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.5,27.5 + parent: 2 + - uid: 7412 + components: + - type: Transform + pos: 14.5,42.5 + parent: 2 + - uid: 7413 + components: + - type: Transform + pos: 8.5,46.5 + parent: 2 +- proto: DeskBell + entities: + - uid: 7414 + components: + - type: Transform + pos: -15.572306,50.576622 + parent: 2 + - uid: 7415 + components: + - type: Transform + pos: 17.974758,54.617676 + parent: 2 + - uid: 7416 + components: + - type: Transform + pos: 59.34066,39.685585 + parent: 2 + - uid: 7417 + components: + - type: Transform + pos: 13.298826,23.596142 + parent: 2 + - uid: 7418 + components: + - type: Transform + pos: 12.5114565,29.654684 + parent: 2 + - uid: 7419 + components: + - type: Transform + pos: 7.481876,46.649487 + parent: 2 +- proto: DiceBag + entities: + - uid: 7420 + components: + - type: Transform + pos: 23.747915,13.402235 + parent: 2 +- proto: DiseaseDiagnoser + entities: + - uid: 7421 + components: + - type: Transform + pos: 28.5,45.5 + parent: 2 +- proto: DisposalBend + entities: + - uid: 7422 + components: + - type: Transform + pos: -29.5,28.5 + parent: 2 + - uid: 7423 + components: + - type: Transform + pos: -25.5,21.5 + parent: 2 + - uid: 7424 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -17.5,18.5 + parent: 2 + - uid: 7425 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 78.5,38.5 + parent: 2 + - uid: 7426 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,51.5 + parent: 2 + - uid: 7427 + components: + - type: Transform + pos: 31.5,7.5 + parent: 2 + - uid: 7428 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,20.5 + parent: 2 + - uid: 7429 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -25.5,18.5 + parent: 2 + - uid: 7430 + components: + - type: Transform + pos: 50.5,-3.5 + parent: 2 + - uid: 7431 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 50.5,-6.5 + parent: 2 + - uid: 7432 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.5,6.5 + parent: 2 + - uid: 7433 + components: + - type: Transform + pos: 59.5,6.5 + parent: 2 + - uid: 7434 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 59.5,-4.5 + parent: 2 + - uid: 7435 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,19.5 + parent: 2 + - uid: 7437 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,45.5 + parent: 2 + - uid: 7438 + components: + - type: Transform + pos: 27.5,62.5 + parent: 2 + - uid: 7439 + components: + - type: Transform + pos: 26.5,67.5 + parent: 2 + - uid: 7440 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,62.5 + parent: 2 + - uid: 7441 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,57.5 + parent: 2 + - uid: 7442 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 67.5,34.5 + parent: 2 + - uid: 7443 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 67.5,33.5 + parent: 2 + - uid: 7444 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,7.5 + parent: 2 + - uid: 7445 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,10.5 + parent: 2 + - uid: 7446 + components: + - type: Transform + pos: 3.5,16.5 + parent: 2 + - uid: 7447 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.5,6.5 + parent: 2 + - uid: 7448 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,19.5 + parent: 2 + - uid: 7449 + components: + - type: Transform + pos: -4.5,27.5 + parent: 2 + - uid: 7450 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,37.5 + parent: 2 + - uid: 7451 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,48.5 + parent: 2 + - uid: 7452 + components: + - type: Transform + pos: 2.5,58.5 + parent: 2 + - uid: 7453 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,58.5 + parent: 2 + - uid: 7454 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,55.5 + parent: 2 + - uid: 7455 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,55.5 + parent: 2 + - uid: 7456 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,57.5 + parent: 2 + - uid: 7457 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,51.5 + parent: 2 + - uid: 7458 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,51.5 + parent: 2 + - uid: 7459 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,63.5 + parent: 2 + - uid: 7460 + components: + - type: Transform + pos: -5.5,67.5 + parent: 2 + - uid: 7461 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,52.5 + parent: 2 + - uid: 7462 + components: + - type: Transform + pos: 10.5,59.5 + parent: 2 + - uid: 7463 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,67.5 + parent: 2 + - uid: 7464 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,66.5 + parent: 2 + - uid: 7465 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,48.5 + parent: 2 + - uid: 7466 + components: + - type: Transform + pos: 24.5,55.5 + parent: 2 + - uid: 7467 + components: + - type: Transform + pos: 18.5,37.5 + parent: 2 + - uid: 7468 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,25.5 + parent: 2 + - uid: 7469 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,34.5 + parent: 2 + - uid: 7470 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,28.5 + parent: 2 + - uid: 7471 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,28.5 + parent: 2 + - uid: 7472 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 40.5,54.5 + parent: 2 + - uid: 7473 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,43.5 + parent: 2 + - uid: 7474 + components: + - type: Transform + pos: 41.5,48.5 + parent: 2 + - uid: 7475 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 32.5,48.5 + parent: 2 + - uid: 7476 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 78.5,30.5 + parent: 2 + - uid: 7477 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 81.5,27.5 + parent: 2 + - uid: 7478 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 77.5,43.5 + parent: 2 + - uid: 7479 + components: + - type: Transform + pos: 70.5,55.5 + parent: 2 + - uid: 7480 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 65.5,55.5 + parent: 2 + - uid: 7481 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 65.5,8.5 + parent: 2 + - uid: 7482 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,9.5 + parent: 2 + - uid: 7483 + components: + - type: Transform + pos: 25.5,9.5 + parent: 2 + - uid: 7484 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,6.5 + parent: 2 + - uid: 7485 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,4.5 + parent: 2 + - uid: 7486 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 52.5,13.5 + parent: 2 + - uid: 7487 + components: + - type: Transform + pos: 52.5,17.5 + parent: 2 + - uid: 7488 + components: + - type: Transform + pos: 47.5,28.5 + parent: 2 + - uid: 7489 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 56.5,15.5 + parent: 2 + - uid: 7490 + components: + - type: Transform + pos: 56.5,21.5 + parent: 2 + - uid: 7491 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 39.5,17.5 + parent: 2 + - uid: 7492 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,8.5 + parent: 2 + - uid: 7493 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,8.5 + parent: 2 + - uid: 7494 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,4.5 + parent: 2 + - uid: 7495 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,7.5 + parent: 2 + - uid: 7496 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,7.5 + parent: 2 + - uid: 7497 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,28.5 + parent: 2 + - uid: 7498 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,21.5 + parent: 2 + - uid: 8400 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 37.5,-25.5 + parent: 2 + - uid: 14251 + components: + - type: Transform + pos: 40.5,-3.5 + parent: 2 + - uid: 15037 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.5,-3.5 + parent: 2 + - uid: 20069 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 40.5,-25.5 + parent: 2 +- proto: DisposalJunction + entities: + - uid: 7499 + components: + - type: Transform + pos: 81.5,38.5 + parent: 2 + - uid: 7500 + components: + - type: Transform + pos: -9.5,36.5 + parent: 2 + - uid: 7501 + components: + - type: Transform + pos: 53.5,40.5 + parent: 2 + - uid: 7502 + components: + - type: Transform + pos: 15.5,17.5 + parent: 2 + - uid: 7503 + components: + - type: Transform + pos: 0.5,46.5 + parent: 2 + - uid: 7504 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,57.5 + parent: 2 + - uid: 7505 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,57.5 + parent: 2 + - uid: 7506 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,57.5 + parent: 2 + - uid: 7507 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,48.5 + parent: 2 + - uid: 7508 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 17.5,20.5 + parent: 2 + - uid: 7509 + components: + - type: Transform + pos: 17.5,25.5 + parent: 2 + - uid: 7510 + components: + - type: Transform + pos: 18.5,34.5 + parent: 2 + - uid: 7511 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 40.5,48.5 + parent: 2 + - uid: 7512 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 46.5,34.5 + parent: 2 + - uid: 7513 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 53.5,34.5 + parent: 2 + - uid: 7514 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 81.5,29.5 + parent: 2 + - uid: 7515 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 65.5,33.5 + parent: 2 + - uid: 7516 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 65.5,27.5 + parent: 2 + - uid: 7517 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 65.5,17.5 + parent: 2 + - uid: 7518 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 47.5,17.5 + parent: 2 + - uid: 7519 + components: + - type: Transform + pos: 35.5,7.5 + parent: 2 + - uid: 7520 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,10.5 + parent: 2 +- proto: DisposalJunctionFlipped + entities: + - uid: 7521 + components: + - type: Transform + pos: 17.5,26.5 + parent: 2 + - uid: 7522 + components: + - type: Transform + pos: -12.5,55.5 + parent: 2 + - uid: 7523 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,18.5 + parent: 2 + - uid: 7524 + components: + - type: Transform + pos: 7.5,7.5 + parent: 2 + - uid: 7525 + components: + - type: Transform + pos: -9.5,27.5 + parent: 2 + - uid: 7526 + components: + - type: Transform + pos: 5.5,52.5 + parent: 2 + - uid: 7527 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,10.5 + parent: 2 + - uid: 7528 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,20.5 + parent: 2 + - uid: 7529 + components: + - type: Transform + pos: 0.5,23.5 + parent: 2 + - uid: 7530 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,57.5 + parent: 2 + - uid: 7531 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,57.5 + parent: 2 + - uid: 7532 + components: + - type: Transform + pos: 32.5,34.5 + parent: 2 + - uid: 7533 + components: + - type: Transform + pos: 53.5,39.5 + parent: 2 + - uid: 7534 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 81.5,30.5 + parent: 2 + - uid: 7535 + components: + - type: Transform + pos: 25.5,7.5 + parent: 2 + - uid: 7536 + components: + - type: Transform + pos: 47.5,21.5 + parent: 2 +- proto: DisposalPipe + entities: + - uid: 6777 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,-4.5 + parent: 2 + - uid: 6793 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 39.5,-25.5 + parent: 2 + - uid: 6794 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,-6.5 + parent: 2 + - uid: 7340 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,-5.5 + parent: 2 + - uid: 7537 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,25.5 + parent: 2 + - uid: 7538 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,23.5 + parent: 2 + - uid: 7539 + components: + - type: Transform + pos: -17.5,62.5 + parent: 2 + - uid: 7540 + components: + - type: Transform + pos: -27.5,53.5 + parent: 2 + - uid: 7541 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -28.5,21.5 + parent: 2 + - uid: 7542 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,22.5 + parent: 2 + - uid: 7543 + components: + - type: Transform + pos: 46.5,36.5 + parent: 2 + - uid: 7544 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,26.5 + parent: 2 + - uid: 7545 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.5,26.5 + parent: 2 + - uid: 7546 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 58.5,34.5 + parent: 2 + - uid: 7547 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 57.5,34.5 + parent: 2 + - uid: 7548 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 56.5,34.5 + parent: 2 + - uid: 7549 + components: + - type: Transform + pos: -22.5,58.5 + parent: 2 + - uid: 7550 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 26.5,26.5 + parent: 2 + - uid: 7551 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,9.5 + parent: 2 + - uid: 7552 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 32.5,4.5 + parent: 2 + - uid: 7553 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,28.5 + parent: 2 + - uid: 7554 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,28.5 + parent: 2 + - uid: 7555 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,52.5 + parent: 2 + - uid: 7556 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,53.5 + parent: 2 + - uid: 7557 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,52.5 + parent: 2 + - uid: 7558 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,10.5 + parent: 2 + - uid: 7559 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 71.5,17.5 + parent: 2 + - uid: 7560 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,58.5 + parent: 2 + - uid: 7561 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,10.5 + parent: 2 + - uid: 7562 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 70.5,17.5 + parent: 2 + - uid: 7563 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,6.5 + parent: 2 + - uid: 7564 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,7.5 + parent: 2 + - uid: 7565 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,7.5 + parent: 2 + - uid: 7566 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,7.5 + parent: 2 + - uid: 7567 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.5,7.5 + parent: 2 + - uid: 7568 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,8.5 + parent: 2 + - uid: 7569 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,9.5 + parent: 2 + - uid: 7570 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.5,10.5 + parent: 2 + - uid: 7571 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,10.5 + parent: 2 + - uid: 7572 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,10.5 + parent: 2 + - uid: 7573 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,10.5 + parent: 2 + - uid: 7574 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.5,-0.5 + parent: 2 + - uid: 7575 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.5,-1.5 + parent: 2 + - uid: 7576 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.5,-2.5 + parent: 2 + - uid: 7577 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,48.5 + parent: 2 + - uid: 7578 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,33.5 + parent: 2 + - uid: 7579 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,32.5 + parent: 2 + - uid: 7580 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,31.5 + parent: 2 + - uid: 7581 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,30.5 + parent: 2 + - uid: 7582 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,29.5 + parent: 2 + - uid: 7583 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,28.5 + parent: 2 + - uid: 7584 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,27.5 + parent: 2 + - uid: 7585 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,26.5 + parent: 2 + - uid: 7586 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,25.5 + parent: 2 + - uid: 7587 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,24.5 + parent: 2 + - uid: 7588 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,23.5 + parent: 2 + - uid: 7589 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,22.5 + parent: 2 + - uid: 7590 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,21.5 + parent: 2 + - uid: 7591 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,20.5 + parent: 2 + - uid: 7592 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,20.5 + parent: 2 + - uid: 7593 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 29.5,20.5 + parent: 2 + - uid: 7594 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 28.5,20.5 + parent: 2 + - uid: 7595 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,20.5 + parent: 2 + - uid: 7596 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 26.5,20.5 + parent: 2 + - uid: 7597 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.5,20.5 + parent: 2 + - uid: 7598 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,20.5 + parent: 2 + - uid: 7599 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,20.5 + parent: 2 + - uid: 7600 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,20.5 + parent: 2 + - uid: 7601 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,20.5 + parent: 2 + - uid: 7602 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 20.5,20.5 + parent: 2 + - uid: 7603 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,20.5 + parent: 2 + - uid: 7604 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 18.5,20.5 + parent: 2 + - uid: 7605 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -25.5,19.5 + parent: 2 + - uid: 7606 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 50.5,-5.5 + parent: 2 + - uid: 7607 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 50.5,-4.5 + parent: 2 + - uid: 7608 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 49.5,-3.5 + parent: 2 + - uid: 7609 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 59.5,-3.5 + parent: 2 + - uid: 7610 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 59.5,-2.5 + parent: 2 + - uid: 7611 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 59.5,-1.5 + parent: 2 + - uid: 7612 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,26.5 + parent: 2 + - uid: 7613 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,8.5 + parent: 2 + - uid: 7614 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 59.5,-0.5 + parent: 2 + - uid: 7615 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 59.5,0.5 + parent: 2 + - uid: 7616 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 59.5,1.5 + parent: 2 + - uid: 7617 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 59.5,2.5 + parent: 2 + - uid: 7618 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 59.5,3.5 + parent: 2 + - uid: 7619 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 59.5,4.5 + parent: 2 + - uid: 7620 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 59.5,5.5 + parent: 2 + - uid: 7621 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 58.5,6.5 + parent: 2 + - uid: 7622 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 57.5,6.5 + parent: 2 + - uid: 7623 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 56.5,6.5 + parent: 2 + - uid: 7624 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 55.5,6.5 + parent: 2 + - uid: 7625 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 54.5,6.5 + parent: 2 + - uid: 7626 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 53.5,6.5 + parent: 2 + - uid: 7627 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 52.5,6.5 + parent: 2 + - uid: 7628 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 51.5,6.5 + parent: 2 + - uid: 7629 + components: + - type: Transform + pos: 50.5,5.5 + parent: 2 + - uid: 7630 + components: + - type: Transform + pos: 50.5,4.5 + parent: 2 + - uid: 7631 + components: + - type: Transform + pos: 50.5,3.5 + parent: 2 + - uid: 7632 + components: + - type: Transform + pos: 50.5,2.5 + parent: 2 + - uid: 7633 + components: + - type: Transform + pos: 50.5,1.5 + parent: 2 + - uid: 7634 + components: + - type: Transform + pos: 50.5,0.5 + parent: 2 + - uid: 7635 + components: + - type: Transform + pos: 50.5,-0.5 + parent: 2 + - uid: 7636 + components: + - type: Transform + pos: 50.5,-1.5 + parent: 2 + - uid: 7637 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,24.5 + parent: 2 + - uid: 7638 + components: + - type: Transform + pos: 5.5,53.5 + parent: 2 + - uid: 7639 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 55.5,34.5 + parent: 2 + - uid: 7640 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 54.5,34.5 + parent: 2 + - uid: 7641 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,45.5 + parent: 2 + - uid: 7642 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,44.5 + parent: 2 + - uid: 7643 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,63.5 + parent: 2 + - uid: 7644 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,64.5 + parent: 2 + - uid: 7645 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,65.5 + parent: 2 + - uid: 7646 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,66.5 + parent: 2 + - uid: 7647 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,67.5 + parent: 2 + - uid: 7648 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,46.5 + parent: 2 + - uid: 7649 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,47.5 + parent: 2 + - uid: 7650 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,48.5 + parent: 2 + - uid: 7651 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,49.5 + parent: 2 + - uid: 7652 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,50.5 + parent: 2 + - uid: 7653 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,51.5 + parent: 2 + - uid: 7654 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,52.5 + parent: 2 + - uid: 7655 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,53.5 + parent: 2 + - uid: 7656 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,54.5 + parent: 2 + - uid: 7657 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,55.5 + parent: 2 + - uid: 7658 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,56.5 + parent: 2 + - uid: 7659 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,57.5 + parent: 2 + - uid: 7660 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,58.5 + parent: 2 + - uid: 7661 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,59.5 + parent: 2 + - uid: 7662 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,60.5 + parent: 2 + - uid: 7663 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,61.5 + parent: 2 + - uid: 7664 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,63.5 + parent: 2 + - uid: 7665 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,64.5 + parent: 2 + - uid: 7666 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,65.5 + parent: 2 + - uid: 7667 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,66.5 + parent: 2 + - uid: 7668 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.5,67.5 + parent: 2 + - uid: 7669 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,52.5 + parent: 2 + - uid: 7670 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,52.5 + parent: 2 + - uid: 7671 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,52.5 + parent: 2 + - uid: 7672 + components: + - type: Transform + pos: -11.5,62.5 + parent: 2 + - uid: 7673 + components: + - type: Transform + pos: -11.5,66.5 + parent: 2 + - uid: 7674 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,56.5 + parent: 2 + - uid: 7675 + components: + - type: Transform + pos: -11.5,58.5 + parent: 2 + - uid: 7676 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,57.5 + parent: 2 + - uid: 7677 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,57.5 + parent: 2 + - uid: 7678 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,57.5 + parent: 2 + - uid: 7679 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,57.5 + parent: 2 + - uid: 7680 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 66.5,33.5 + parent: 2 + - uid: 7681 + components: + - type: Transform + pos: -11.5,60.5 + parent: 2 + - uid: 7682 + components: + - type: Transform + pos: -11.5,63.5 + parent: 2 + - uid: 7683 + components: + - type: Transform + pos: -11.5,65.5 + parent: 2 + - uid: 7684 + components: + - type: Transform + pos: -11.5,64.5 + parent: 2 + - uid: 7685 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,58.5 + parent: 2 + - uid: 7686 + components: + - type: Transform + pos: -12.5,56.5 + parent: 2 + - uid: 7687 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,57.5 + parent: 2 + - uid: 7688 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,7.5 + parent: 2 + - uid: 7689 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,7.5 + parent: 2 + - uid: 7690 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,7.5 + parent: 2 + - uid: 7691 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,7.5 + parent: 2 + - uid: 7692 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,9.5 + parent: 2 + - uid: 7693 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,10.5 + parent: 2 + - uid: 7694 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,10.5 + parent: 2 + - uid: 7695 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,10.5 + parent: 2 + - uid: 7696 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,10.5 + parent: 2 + - uid: 7697 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,10.5 + parent: 2 + - uid: 7698 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,10.5 + parent: 2 + - uid: 7699 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,10.5 + parent: 2 + - uid: 7700 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,10.5 + parent: 2 + - uid: 7701 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,10.5 + parent: 2 + - uid: 7702 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,10.5 + parent: 2 + - uid: 7703 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,10.5 + parent: 2 + - uid: 7704 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,10.5 + parent: 2 + - uid: 7705 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,10.5 + parent: 2 + - uid: 7706 + components: + - type: Transform + pos: 3.5,11.5 + parent: 2 + - uid: 7707 + components: + - type: Transform + pos: 3.5,12.5 + parent: 2 + - uid: 7708 + components: + - type: Transform + pos: 3.5,13.5 + parent: 2 + - uid: 7709 + components: + - type: Transform + pos: 3.5,14.5 + parent: 2 + - uid: 7710 + components: + - type: Transform + pos: 3.5,15.5 + parent: 2 + - uid: 7711 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,16.5 + parent: 2 + - uid: 7712 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,16.5 + parent: 2 + - uid: 7713 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,16.5 + parent: 2 + - uid: 7714 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,16.5 + parent: 2 + - uid: 7715 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,7.5 + parent: 2 + - uid: 7716 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 13.5,7.5 + parent: 2 + - uid: 7717 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,7.5 + parent: 2 + - uid: 7718 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.5,8.5 + parent: 2 + - uid: 7719 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.5,9.5 + parent: 2 + - uid: 7720 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.5,10.5 + parent: 2 + - uid: 7721 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.5,11.5 + parent: 2 + - uid: 7722 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.5,12.5 + parent: 2 + - uid: 7723 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.5,13.5 + parent: 2 + - uid: 7724 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.5,14.5 + parent: 2 + - uid: 7725 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.5,15.5 + parent: 2 + - uid: 7726 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.5,16.5 + parent: 2 + - uid: 7727 + components: + - type: Transform + pos: 15.5,18.5 + parent: 2 + - uid: 7728 + components: + - type: Transform + pos: 15.5,19.5 + parent: 2 + - uid: 7729 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,20.5 + parent: 2 + - uid: 7730 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 13.5,20.5 + parent: 2 + - uid: 7731 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.5,20.5 + parent: 2 + - uid: 7732 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.5,20.5 + parent: 2 + - uid: 7733 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,20.5 + parent: 2 + - uid: 7734 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,20.5 + parent: 2 + - uid: 7735 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,20.5 + parent: 2 + - uid: 7736 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,20.5 + parent: 2 + - uid: 7737 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,20.5 + parent: 2 + - uid: 7738 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,20.5 + parent: 2 + - uid: 7739 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,20.5 + parent: 2 + - uid: 7740 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,20.5 + parent: 2 + - uid: 7741 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,20.5 + parent: 2 + - uid: 7742 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,20.5 + parent: 2 + - uid: 7743 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,20.5 + parent: 2 + - uid: 7744 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,20.5 + parent: 2 + - uid: 7745 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,20.5 + parent: 2 + - uid: 7746 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,20.5 + parent: 2 + - uid: 7747 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,20.5 + parent: 2 + - uid: 7748 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,20.5 + parent: 2 + - uid: 7749 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,20.5 + parent: 2 + - uid: 7750 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,20.5 + parent: 2 + - uid: 7751 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,20.5 + parent: 2 + - uid: 7752 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,29.5 + parent: 2 + - uid: 7753 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,28.5 + parent: 2 + - uid: 7754 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,27.5 + parent: 2 + - uid: 7755 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,26.5 + parent: 2 + - uid: 7756 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,24.5 + parent: 2 + - uid: 7757 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,21.5 + parent: 2 + - uid: 7758 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,21.5 + parent: 2 + - uid: 7759 + components: + - type: Transform + pos: -25.5,20.5 + parent: 2 + - uid: 7760 + components: + - type: Transform + pos: -24.5,19.5 + parent: 2 + - uid: 7761 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,18.5 + parent: 2 + - uid: 7762 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,18.5 + parent: 2 + - uid: 7763 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,18.5 + parent: 2 + - uid: 7764 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,18.5 + parent: 2 + - uid: 7765 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.5,18.5 + parent: 2 + - uid: 7766 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -18.5,18.5 + parent: 2 + - uid: 7767 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,19.5 + parent: 2 + - uid: 7768 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,19.5 + parent: 2 + - uid: 7769 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,19.5 + parent: 2 + - uid: 7770 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,19.5 + parent: 2 + - uid: 7771 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,19.5 + parent: 2 + - uid: 7772 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,19.5 + parent: 2 + - uid: 7773 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,19.5 + parent: 2 + - uid: 7774 + components: + - type: Transform + pos: -9.5,21.5 + parent: 2 + - uid: 7775 + components: + - type: Transform + pos: -9.5,22.5 + parent: 2 + - uid: 7776 + components: + - type: Transform + pos: -9.5,23.5 + parent: 2 + - uid: 7777 + components: + - type: Transform + pos: -9.5,24.5 + parent: 2 + - uid: 7778 + components: + - type: Transform + pos: -9.5,25.5 + parent: 2 + - uid: 7779 + components: + - type: Transform + pos: -9.5,26.5 + parent: 2 + - uid: 7780 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,27.5 + parent: 2 + - uid: 7781 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,27.5 + parent: 2 + - uid: 7782 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,27.5 + parent: 2 + - uid: 7783 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,27.5 + parent: 2 + - uid: 7784 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,36.5 + parent: 2 + - uid: 7785 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,36.5 + parent: 2 + - uid: 7786 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,36.5 + parent: 2 + - uid: 7787 + components: + - type: Transform + pos: -9.5,35.5 + parent: 2 + - uid: 7788 + components: + - type: Transform + pos: -9.5,34.5 + parent: 2 + - uid: 7789 + components: + - type: Transform + pos: -9.5,33.5 + parent: 2 + - uid: 7790 + components: + - type: Transform + pos: -9.5,32.5 + parent: 2 + - uid: 7791 + components: + - type: Transform + pos: -9.5,31.5 + parent: 2 + - uid: 7792 + components: + - type: Transform + pos: -9.5,30.5 + parent: 2 + - uid: 7793 + components: + - type: Transform + pos: -9.5,29.5 + parent: 2 + - uid: 7794 + components: + - type: Transform + pos: -9.5,28.5 + parent: 2 + - uid: 7795 + components: + - type: Transform + pos: 0.5,21.5 + parent: 2 + - uid: 7796 + components: + - type: Transform + pos: 0.5,22.5 + parent: 2 + - uid: 7797 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,23.5 + parent: 2 + - uid: 7798 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,24.5 + parent: 2 + - uid: 7799 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,25.5 + parent: 2 + - uid: 7800 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,26.5 + parent: 2 + - uid: 7801 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,27.5 + parent: 2 + - uid: 7802 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,28.5 + parent: 2 + - uid: 7803 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,29.5 + parent: 2 + - uid: 7804 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,30.5 + parent: 2 + - uid: 7805 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,31.5 + parent: 2 + - uid: 7806 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,32.5 + parent: 2 + - uid: 7807 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,33.5 + parent: 2 + - uid: 7808 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,34.5 + parent: 2 + - uid: 7809 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,35.5 + parent: 2 + - uid: 7810 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,36.5 + parent: 2 + - uid: 7811 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,37.5 + parent: 2 + - uid: 7812 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,38.5 + parent: 2 + - uid: 7813 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,39.5 + parent: 2 + - uid: 7814 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,40.5 + parent: 2 + - uid: 7815 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,41.5 + parent: 2 + - uid: 7816 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,42.5 + parent: 2 + - uid: 7817 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,43.5 + parent: 2 + - uid: 7818 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,44.5 + parent: 2 + - uid: 7819 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,45.5 + parent: 2 + - uid: 7820 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,46.5 + parent: 2 + - uid: 7821 + components: + - type: Transform + pos: 0.5,47.5 + parent: 2 + - uid: 7822 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,48.5 + parent: 2 + - uid: 7823 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,48.5 + parent: 2 + - uid: 7824 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,48.5 + parent: 2 + - uid: 7825 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,48.5 + parent: 2 + - uid: 7826 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,48.5 + parent: 2 + - uid: 7827 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,48.5 + parent: 2 + - uid: 7828 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,48.5 + parent: 2 + - uid: 7829 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,48.5 + parent: 2 + - uid: 7830 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,48.5 + parent: 2 + - uid: 7831 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,48.5 + parent: 2 + - uid: 7832 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,48.5 + parent: 2 + - uid: 7833 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,48.5 + parent: 2 + - uid: 7834 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,58.5 + parent: 2 + - uid: 7835 + components: + - type: Transform + pos: -0.5,57.5 + parent: 2 + - uid: 7836 + components: + - type: Transform + pos: -0.5,56.5 + parent: 2 + - uid: 7837 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,55.5 + parent: 2 + - uid: 7838 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,55.5 + parent: 2 + - uid: 7839 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,55.5 + parent: 2 + - uid: 7840 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,55.5 + parent: 2 + - uid: 7841 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,55.5 + parent: 2 + - uid: 7842 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,55.5 + parent: 2 + - uid: 7843 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,55.5 + parent: 2 + - uid: 7844 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,55.5 + parent: 2 + - uid: 7845 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,55.5 + parent: 2 + - uid: 7846 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,55.5 + parent: 2 + - uid: 7847 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,55.5 + parent: 2 + - uid: 7848 + components: + - type: Transform + pos: -12.5,54.5 + parent: 2 + - uid: 7849 + components: + - type: Transform + pos: -12.5,53.5 + parent: 2 + - uid: 7850 + components: + - type: Transform + pos: -12.5,52.5 + parent: 2 + - uid: 7851 + components: + - type: Transform + pos: -12.5,51.5 + parent: 2 + - uid: 7852 + components: + - type: Transform + pos: -12.5,50.5 + parent: 2 + - uid: 7853 + components: + - type: Transform + pos: -12.5,49.5 + parent: 2 + - uid: 7854 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -32.5,56.5 + parent: 2 + - uid: 7855 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -28.5,51.5 + parent: 2 + - uid: 7856 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -27.5,52.5 + parent: 2 + - uid: 7857 + components: + - type: Transform + pos: -27.5,54.5 + parent: 2 + - uid: 7858 + components: + - type: Transform + pos: -27.5,55.5 + parent: 2 + - uid: 7859 + components: + - type: Transform + pos: -27.5,56.5 + parent: 2 + - uid: 7860 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,57.5 + parent: 2 + - uid: 7861 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,57.5 + parent: 2 + - uid: 7862 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -29.5,57.5 + parent: 2 + - uid: 7863 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,57.5 + parent: 2 + - uid: 7864 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,57.5 + parent: 2 + - uid: 7865 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,57.5 + parent: 2 + - uid: 7866 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,57.5 + parent: 2 + - uid: 7867 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,52.5 + parent: 2 + - uid: 7868 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,53.5 + parent: 2 + - uid: 7869 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,54.5 + parent: 2 + - uid: 7870 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,55.5 + parent: 2 + - uid: 7871 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,56.5 + parent: 2 + - uid: 7872 + components: + - type: Transform + pos: -22.5,59.5 + parent: 2 + - uid: 7873 + components: + - type: Transform + pos: -22.5,60.5 + parent: 2 + - uid: 7874 + components: + - type: Transform + pos: -22.5,61.5 + parent: 2 + - uid: 7875 + components: + - type: Transform + pos: -22.5,62.5 + parent: 2 + - uid: 7876 + components: + - type: Transform + pos: -22.5,63.5 + parent: 2 + - uid: 7877 + components: + - type: Transform + pos: -17.5,61.5 + parent: 2 + - uid: 7878 + components: + - type: Transform + pos: -17.5,60.5 + parent: 2 + - uid: 7879 + components: + - type: Transform + pos: -17.5,59.5 + parent: 2 + - uid: 7880 + components: + - type: Transform + pos: -17.5,58.5 + parent: 2 + - uid: 7881 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,57.5 + parent: 2 + - uid: 7882 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,57.5 + parent: 2 + - uid: 7883 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.5,57.5 + parent: 2 + - uid: 7884 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,54.5 + parent: 2 + - uid: 7885 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,55.5 + parent: 2 + - uid: 7886 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,56.5 + parent: 2 + - uid: 7887 + components: + - type: Transform + pos: -11.5,61.5 + parent: 2 + - uid: 7888 + components: + - type: Transform + pos: -11.5,59.5 + parent: 2 + - uid: 7889 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,55.5 + parent: 2 + - uid: 7890 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,54.5 + parent: 2 + - uid: 7891 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,59.5 + parent: 2 + - uid: 7892 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,67.5 + parent: 2 + - uid: 7893 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,53.5 + parent: 2 + - uid: 7894 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,67.5 + parent: 2 + - uid: 7895 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,67.5 + parent: 2 + - uid: 7896 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,67.5 + parent: 2 + - uid: 7897 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,67.5 + parent: 2 + - uid: 7898 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,48.5 + parent: 2 + - uid: 7899 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,48.5 + parent: 2 + - uid: 7900 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,48.5 + parent: 2 + - uid: 7901 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,48.5 + parent: 2 + - uid: 7902 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,49.5 + parent: 2 + - uid: 7903 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,50.5 + parent: 2 + - uid: 7904 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,51.5 + parent: 2 + - uid: 7905 + components: + - type: Transform + pos: 5.5,54.5 + parent: 2 + - uid: 7906 + components: + - type: Transform + pos: 5.5,55.5 + parent: 2 + - uid: 7907 + components: + - type: Transform + pos: 5.5,56.5 + parent: 2 + - uid: 7908 + components: + - type: Transform + pos: 5.5,57.5 + parent: 2 + - uid: 7909 + components: + - type: Transform + pos: 5.5,58.5 + parent: 2 + - uid: 7910 + components: + - type: Transform + pos: 5.5,59.5 + parent: 2 + - uid: 7911 + components: + - type: Transform + pos: 5.5,60.5 + parent: 2 + - uid: 7912 + components: + - type: Transform + pos: 5.5,61.5 + parent: 2 + - uid: 7913 + components: + - type: Transform + pos: 5.5,62.5 + parent: 2 + - uid: 7914 + components: + - type: Transform + pos: 5.5,63.5 + parent: 2 + - uid: 7915 + components: + - type: Transform + pos: 5.5,64.5 + parent: 2 + - uid: 7916 + components: + - type: Transform + pos: 5.5,65.5 + parent: 2 + - uid: 7917 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,66.5 + parent: 2 + - uid: 7918 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,48.5 + parent: 2 + - uid: 7919 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,48.5 + parent: 2 + - uid: 7920 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,48.5 + parent: 2 + - uid: 7921 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,48.5 + parent: 2 + - uid: 7922 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,48.5 + parent: 2 + - uid: 7923 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,48.5 + parent: 2 + - uid: 7924 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,48.5 + parent: 2 + - uid: 7925 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 13.5,48.5 + parent: 2 + - uid: 7926 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,48.5 + parent: 2 + - uid: 7927 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,48.5 + parent: 2 + - uid: 7928 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 16.5,48.5 + parent: 2 + - uid: 7929 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,48.5 + parent: 2 + - uid: 7930 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 18.5,48.5 + parent: 2 + - uid: 7931 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,48.5 + parent: 2 + - uid: 7932 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 20.5,48.5 + parent: 2 + - uid: 7933 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,48.5 + parent: 2 + - uid: 7934 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,48.5 + parent: 2 + - uid: 7935 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,48.5 + parent: 2 + - uid: 7936 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 23.5,55.5 + parent: 2 + - uid: 7937 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,55.5 + parent: 2 + - uid: 7938 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,55.5 + parent: 2 + - uid: 7939 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,49.5 + parent: 2 + - uid: 7940 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,50.5 + parent: 2 + - uid: 7941 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,51.5 + parent: 2 + - uid: 7942 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,52.5 + parent: 2 + - uid: 7943 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,53.5 + parent: 2 + - uid: 7944 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,54.5 + parent: 2 + - uid: 7945 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 17.5,37.5 + parent: 2 + - uid: 7946 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 16.5,20.5 + parent: 2 + - uid: 7947 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 17.5,21.5 + parent: 2 + - uid: 7948 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 17.5,22.5 + parent: 2 + - uid: 7949 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 17.5,23.5 + parent: 2 + - uid: 7950 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 17.5,24.5 + parent: 2 + - uid: 7951 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,26.5 + parent: 2 + - uid: 7952 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,26.5 + parent: 2 + - uid: 7953 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 20.5,26.5 + parent: 2 + - uid: 7954 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,26.5 + parent: 2 + - uid: 7955 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 18.5,26.5 + parent: 2 + - uid: 7956 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,25.5 + parent: 2 + - uid: 7957 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,25.5 + parent: 2 + - uid: 7958 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,25.5 + parent: 2 + - uid: 7959 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 13.5,25.5 + parent: 2 + - uid: 7960 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,25.5 + parent: 2 + - uid: 7961 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,25.5 + parent: 2 + - uid: 7962 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 16.5,25.5 + parent: 2 + - uid: 7963 + components: + - type: Transform + pos: 9.5,40.5 + parent: 2 + - uid: 7964 + components: + - type: Transform + pos: 9.5,39.5 + parent: 2 + - uid: 7965 + components: + - type: Transform + pos: 9.5,38.5 + parent: 2 + - uid: 7966 + components: + - type: Transform + pos: 9.5,37.5 + parent: 2 + - uid: 7967 + components: + - type: Transform + pos: 9.5,36.5 + parent: 2 + - uid: 7968 + components: + - type: Transform + pos: 9.5,35.5 + parent: 2 + - uid: 7969 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,34.5 + parent: 2 + - uid: 7970 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,34.5 + parent: 2 + - uid: 7971 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,34.5 + parent: 2 + - uid: 7972 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 13.5,34.5 + parent: 2 + - uid: 7973 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,34.5 + parent: 2 + - uid: 7974 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,34.5 + parent: 2 + - uid: 7975 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 16.5,34.5 + parent: 2 + - uid: 7976 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,34.5 + parent: 2 + - uid: 7977 + components: + - type: Transform + pos: 18.5,36.5 + parent: 2 + - uid: 7978 + components: + - type: Transform + pos: 18.5,35.5 + parent: 2 + - uid: 7979 + components: + - type: Transform + pos: 18.5,33.5 + parent: 2 + - uid: 7980 + components: + - type: Transform + pos: 18.5,32.5 + parent: 2 + - uid: 7981 + components: + - type: Transform + pos: 18.5,31.5 + parent: 2 + - uid: 7982 + components: + - type: Transform + pos: 18.5,30.5 + parent: 2 + - uid: 7983 + components: + - type: Transform + pos: 18.5,29.5 + parent: 2 + - uid: 7984 + components: + - type: Transform + pos: 17.5,27.5 + parent: 2 + - uid: 7985 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 41.5,54.5 + parent: 2 + - uid: 7986 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 42.5,54.5 + parent: 2 + - uid: 7987 + components: + - type: Transform + pos: 40.5,53.5 + parent: 2 + - uid: 7988 + components: + - type: Transform + pos: 40.5,52.5 + parent: 2 + - uid: 7989 + components: + - type: Transform + pos: 40.5,51.5 + parent: 2 + - uid: 7990 + components: + - type: Transform + pos: 40.5,50.5 + parent: 2 + - uid: 7991 + components: + - type: Transform + pos: 40.5,49.5 + parent: 2 + - uid: 7992 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,46.5 + parent: 2 + - uid: 7993 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,47.5 + parent: 2 + - uid: 7994 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,48.5 + parent: 2 + - uid: 7995 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,48.5 + parent: 2 + - uid: 7996 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,48.5 + parent: 2 + - uid: 7997 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,48.5 + parent: 2 + - uid: 7998 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,48.5 + parent: 2 + - uid: 7999 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,48.5 + parent: 2 + - uid: 8000 + components: + - type: Transform + pos: 32.5,47.5 + parent: 2 + - uid: 8001 + components: + - type: Transform + pos: 32.5,46.5 + parent: 2 + - uid: 8002 + components: + - type: Transform + pos: 32.5,45.5 + parent: 2 + - uid: 8003 + components: + - type: Transform + pos: 32.5,44.5 + parent: 2 + - uid: 8004 + components: + - type: Transform + pos: 32.5,43.5 + parent: 2 + - uid: 8005 + components: + - type: Transform + pos: 32.5,42.5 + parent: 2 + - uid: 8006 + components: + - type: Transform + pos: 32.5,41.5 + parent: 2 + - uid: 8007 + components: + - type: Transform + pos: 32.5,40.5 + parent: 2 + - uid: 8008 + components: + - type: Transform + pos: 32.5,39.5 + parent: 2 + - uid: 8009 + components: + - type: Transform + pos: 32.5,38.5 + parent: 2 + - uid: 8010 + components: + - type: Transform + pos: 32.5,37.5 + parent: 2 + - uid: 8011 + components: + - type: Transform + pos: 32.5,36.5 + parent: 2 + - uid: 8012 + components: + - type: Transform + pos: 32.5,35.5 + parent: 2 + - uid: 8013 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,34.5 + parent: 2 + - uid: 8014 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,34.5 + parent: 2 + - uid: 8015 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,34.5 + parent: 2 + - uid: 8016 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,34.5 + parent: 2 + - uid: 8017 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,34.5 + parent: 2 + - uid: 8018 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,34.5 + parent: 2 + - uid: 8019 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,34.5 + parent: 2 + - uid: 8020 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 40.5,34.5 + parent: 2 + - uid: 8021 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,34.5 + parent: 2 + - uid: 8022 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,34.5 + parent: 2 + - uid: 8023 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,34.5 + parent: 2 + - uid: 8024 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 44.5,34.5 + parent: 2 + - uid: 8025 + components: + - type: Transform + pos: 46.5,35.5 + parent: 2 + - uid: 8026 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 45.5,34.5 + parent: 2 + - uid: 8027 + components: + - type: Transform + pos: 53.5,45.5 + parent: 2 + - uid: 8028 + components: + - type: Transform + pos: 53.5,44.5 + parent: 2 + - uid: 8029 + components: + - type: Transform + pos: 53.5,43.5 + parent: 2 + - uid: 8030 + components: + - type: Transform + pos: 53.5,42.5 + parent: 2 + - uid: 8031 + components: + - type: Transform + pos: 53.5,41.5 + parent: 2 + - uid: 8032 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 57.5,39.5 + parent: 2 + - uid: 8033 + components: + - type: Transform + pos: 53.5,38.5 + parent: 2 + - uid: 8034 + components: + - type: Transform + pos: 53.5,37.5 + parent: 2 + - uid: 8035 + components: + - type: Transform + pos: 53.5,36.5 + parent: 2 + - uid: 8036 + components: + - type: Transform + pos: 53.5,35.5 + parent: 2 + - uid: 8037 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 61.5,39.5 + parent: 2 + - uid: 8038 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 60.5,39.5 + parent: 2 + - uid: 8039 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 59.5,39.5 + parent: 2 + - uid: 8040 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 58.5,39.5 + parent: 2 + - uid: 8041 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 56.5,39.5 + parent: 2 + - uid: 8042 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 55.5,39.5 + parent: 2 + - uid: 8043 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 54.5,39.5 + parent: 2 + - uid: 8044 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 52.5,34.5 + parent: 2 + - uid: 8045 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 51.5,34.5 + parent: 2 + - uid: 8046 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 50.5,34.5 + parent: 2 + - uid: 8047 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 49.5,34.5 + parent: 2 + - uid: 8048 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 48.5,34.5 + parent: 2 + - uid: 8049 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 47.5,34.5 + parent: 2 + - uid: 8050 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 59.5,34.5 + parent: 2 + - uid: 8051 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 60.5,34.5 + parent: 2 + - uid: 8052 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 61.5,34.5 + parent: 2 + - uid: 8053 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 62.5,34.5 + parent: 2 + - uid: 8054 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 63.5,34.5 + parent: 2 + - uid: 8055 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 64.5,34.5 + parent: 2 + - uid: 8056 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 79.5,30.5 + parent: 2 + - uid: 8057 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 80.5,30.5 + parent: 2 + - uid: 8058 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 81.5,28.5 + parent: 2 + - uid: 8059 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 77.5,44.5 + parent: 2 + - uid: 8060 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 78.5,43.5 + parent: 2 + - uid: 8061 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 79.5,43.5 + parent: 2 + - uid: 8062 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 82.5,43.5 + parent: 2 + - uid: 8063 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 80.5,43.5 + parent: 2 + - uid: 8064 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 79.5,38.5 + parent: 2 + - uid: 8065 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 80.5,38.5 + parent: 2 + - uid: 8066 + components: + - type: Transform + pos: 81.5,42.5 + parent: 2 + - uid: 8067 + components: + - type: Transform + pos: 81.5,41.5 + parent: 2 + - uid: 8068 + components: + - type: Transform + pos: 81.5,40.5 + parent: 2 + - uid: 8069 + components: + - type: Transform + pos: 81.5,39.5 + parent: 2 + - uid: 8070 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 81.5,31.5 + parent: 2 + - uid: 8071 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 81.5,32.5 + parent: 2 + - uid: 8072 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 81.5,33.5 + parent: 2 + - uid: 8073 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 81.5,35.5 + parent: 2 + - uid: 8074 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 81.5,36.5 + parent: 2 + - uid: 8075 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 81.5,37.5 + parent: 2 + - uid: 8076 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 80.5,34.5 + parent: 2 + - uid: 8077 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 79.5,34.5 + parent: 2 + - uid: 8078 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 78.5,34.5 + parent: 2 + - uid: 8079 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 77.5,34.5 + parent: 2 + - uid: 8080 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 76.5,34.5 + parent: 2 + - uid: 8081 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 75.5,34.5 + parent: 2 + - uid: 8082 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 74.5,34.5 + parent: 2 + - uid: 8083 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 73.5,34.5 + parent: 2 + - uid: 8084 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 72.5,34.5 + parent: 2 + - uid: 8085 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 71.5,34.5 + parent: 2 + - uid: 8086 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 70.5,34.5 + parent: 2 + - uid: 8087 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 69.5,34.5 + parent: 2 + - uid: 8088 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 68.5,34.5 + parent: 2 + - uid: 8089 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 66.5,55.5 + parent: 2 + - uid: 8090 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 67.5,55.5 + parent: 2 + - uid: 8091 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 68.5,55.5 + parent: 2 + - uid: 8092 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 69.5,55.5 + parent: 2 + - uid: 8093 + components: + - type: Transform + pos: 65.5,54.5 + parent: 2 + - uid: 8094 + components: + - type: Transform + pos: 65.5,53.5 + parent: 2 + - uid: 8095 + components: + - type: Transform + pos: 65.5,52.5 + parent: 2 + - uid: 8096 + components: + - type: Transform + pos: 65.5,51.5 + parent: 2 + - uid: 8097 + components: + - type: Transform + pos: 65.5,50.5 + parent: 2 + - uid: 8098 + components: + - type: Transform + pos: 65.5,49.5 + parent: 2 + - uid: 8099 + components: + - type: Transform + pos: 65.5,48.5 + parent: 2 + - uid: 8100 + components: + - type: Transform + pos: 65.5,47.5 + parent: 2 + - uid: 8101 + components: + - type: Transform + pos: 65.5,46.5 + parent: 2 + - uid: 8102 + components: + - type: Transform + pos: 65.5,45.5 + parent: 2 + - uid: 8103 + components: + - type: Transform + pos: 65.5,44.5 + parent: 2 + - uid: 8104 + components: + - type: Transform + pos: 65.5,43.5 + parent: 2 + - uid: 8105 + components: + - type: Transform + pos: 65.5,42.5 + parent: 2 + - uid: 8106 + components: + - type: Transform + pos: 65.5,41.5 + parent: 2 + - uid: 8107 + components: + - type: Transform + pos: 65.5,40.5 + parent: 2 + - uid: 8108 + components: + - type: Transform + pos: 65.5,39.5 + parent: 2 + - uid: 8109 + components: + - type: Transform + pos: 65.5,38.5 + parent: 2 + - uid: 8110 + components: + - type: Transform + pos: 65.5,37.5 + parent: 2 + - uid: 8111 + components: + - type: Transform + pos: 65.5,36.5 + parent: 2 + - uid: 8112 + components: + - type: Transform + pos: 65.5,35.5 + parent: 2 + - uid: 8118 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 67.5,27.5 + parent: 2 + - uid: 8119 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 66.5,27.5 + parent: 2 + - uid: 8120 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 65.5,28.5 + parent: 2 + - uid: 8121 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 65.5,29.5 + parent: 2 + - uid: 8122 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 65.5,30.5 + parent: 2 + - uid: 8123 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 65.5,31.5 + parent: 2 + - uid: 8124 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 65.5,32.5 + parent: 2 + - uid: 8125 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 65.5,26.5 + parent: 2 + - uid: 8126 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 65.5,25.5 + parent: 2 + - uid: 8127 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 65.5,24.5 + parent: 2 + - uid: 8128 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 65.5,23.5 + parent: 2 + - uid: 8129 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 65.5,22.5 + parent: 2 + - uid: 8130 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 65.5,21.5 + parent: 2 + - uid: 8131 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 65.5,20.5 + parent: 2 + - uid: 8132 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 65.5,19.5 + parent: 2 + - uid: 8133 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 69.5,17.5 + parent: 2 + - uid: 8134 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 68.5,17.5 + parent: 2 + - uid: 8135 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 67.5,17.5 + parent: 2 + - uid: 8136 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 66.5,17.5 + parent: 2 + - uid: 8137 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 65.5,18.5 + parent: 2 + - uid: 8138 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 65.5,9.5 + parent: 2 + - uid: 8139 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 65.5,10.5 + parent: 2 + - uid: 8140 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 65.5,11.5 + parent: 2 + - uid: 8141 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 65.5,12.5 + parent: 2 + - uid: 8142 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 65.5,13.5 + parent: 2 + - uid: 8143 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 65.5,14.5 + parent: 2 + - uid: 8144 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 65.5,15.5 + parent: 2 + - uid: 8145 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 65.5,16.5 + parent: 2 + - uid: 8146 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 16.5,6.5 + parent: 2 + - uid: 8147 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,6.5 + parent: 2 + - uid: 8148 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 18.5,6.5 + parent: 2 + - uid: 8149 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,6.5 + parent: 2 + - uid: 8150 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 20.5,6.5 + parent: 2 + - uid: 8151 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,6.5 + parent: 2 + - uid: 8152 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,6.5 + parent: 2 + - uid: 8153 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,6.5 + parent: 2 + - uid: 8154 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,6.5 + parent: 2 + - uid: 8155 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,7.5 + parent: 2 + - uid: 8156 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,7.5 + parent: 2 + - uid: 8157 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,7.5 + parent: 2 + - uid: 8158 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 29.5,7.5 + parent: 2 + - uid: 8159 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,7.5 + parent: 2 + - uid: 8160 + components: + - type: Transform + pos: 31.5,6.5 + parent: 2 + - uid: 8161 + components: + - type: Transform + pos: 31.5,5.5 + parent: 2 + - uid: 8162 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 33.5,4.5 + parent: 2 + - uid: 8163 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,4.5 + parent: 2 + - uid: 8164 + components: + - type: Transform + pos: 52.5,14.5 + parent: 2 + - uid: 8165 + components: + - type: Transform + pos: 52.5,15.5 + parent: 2 + - uid: 8166 + components: + - type: Transform + pos: 52.5,16.5 + parent: 2 + - uid: 8167 + components: + - type: Transform + pos: 47.5,27.5 + parent: 2 + - uid: 8168 + components: + - type: Transform + pos: 47.5,26.5 + parent: 2 + - uid: 8169 + components: + - type: Transform + pos: 47.5,25.5 + parent: 2 + - uid: 8170 + components: + - type: Transform + pos: 47.5,24.5 + parent: 2 + - uid: 8171 + components: + - type: Transform + pos: 47.5,23.5 + parent: 2 + - uid: 8172 + components: + - type: Transform + pos: 56.5,16.5 + parent: 2 + - uid: 8173 + components: + - type: Transform + pos: 56.5,17.5 + parent: 2 + - uid: 8174 + components: + - type: Transform + pos: 56.5,18.5 + parent: 2 + - uid: 8175 + components: + - type: Transform + pos: 56.5,19.5 + parent: 2 + - uid: 8176 + components: + - type: Transform + pos: 56.5,20.5 + parent: 2 + - uid: 8177 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 55.5,21.5 + parent: 2 + - uid: 8178 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 54.5,21.5 + parent: 2 + - uid: 8179 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 53.5,21.5 + parent: 2 + - uid: 8180 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 52.5,21.5 + parent: 2 + - uid: 8181 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 51.5,21.5 + parent: 2 + - uid: 8182 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 50.5,21.5 + parent: 2 + - uid: 8183 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 49.5,21.5 + parent: 2 + - uid: 8184 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 48.5,21.5 + parent: 2 + - uid: 8185 + components: + - type: Transform + pos: 47.5,22.5 + parent: 2 + - uid: 8186 + components: + - type: Transform + pos: 47.5,20.5 + parent: 2 + - uid: 8187 + components: + - type: Transform + pos: 47.5,19.5 + parent: 2 + - uid: 8188 + components: + - type: Transform + pos: 47.5,18.5 + parent: 2 + - uid: 8189 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 51.5,17.5 + parent: 2 + - uid: 8190 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 50.5,17.5 + parent: 2 + - uid: 8191 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 49.5,17.5 + parent: 2 + - uid: 8192 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 48.5,17.5 + parent: 2 + - uid: 8193 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 46.5,17.5 + parent: 2 + - uid: 8194 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 45.5,17.5 + parent: 2 + - uid: 8195 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 44.5,17.5 + parent: 2 + - uid: 8196 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,17.5 + parent: 2 + - uid: 8197 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,17.5 + parent: 2 + - uid: 8198 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,17.5 + parent: 2 + - uid: 8199 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 40.5,17.5 + parent: 2 + - uid: 8200 + components: + - type: Transform + pos: 39.5,16.5 + parent: 2 + - uid: 8201 + components: + - type: Transform + pos: 39.5,15.5 + parent: 2 + - uid: 8202 + components: + - type: Transform + pos: 39.5,14.5 + parent: 2 + - uid: 8203 + components: + - type: Transform + pos: 39.5,13.5 + parent: 2 + - uid: 8204 + components: + - type: Transform + pos: 39.5,12.5 + parent: 2 + - uid: 8205 + components: + - type: Transform + pos: 39.5,11.5 + parent: 2 + - uid: 8206 + components: + - type: Transform + pos: 39.5,10.5 + parent: 2 + - uid: 8207 + components: + - type: Transform + pos: 39.5,9.5 + parent: 2 + - uid: 8208 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,8.5 + parent: 2 + - uid: 8209 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,8.5 + parent: 2 + - uid: 8210 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,8.5 + parent: 2 + - uid: 8211 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 35.5,5.5 + parent: 2 + - uid: 8212 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 35.5,6.5 + parent: 2 + - uid: 8213 + components: + - type: Transform + pos: -1.5,9.5 + parent: 2 + - uid: 8214 + components: + - type: Transform + pos: -1.5,8.5 + parent: 2 + - uid: 8215 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,7.5 + parent: 2 + - uid: 8216 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,7.5 + parent: 2 + - uid: 8217 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,7.5 + parent: 2 + - uid: 8218 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,7.5 + parent: 2 + - uid: 8219 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,7.5 + parent: 2 + - uid: 8220 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,6.5 + parent: 2 + - uid: 8221 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,5.5 + parent: 2 + - uid: 8222 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,4.5 + parent: 2 + - uid: 8783 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,-7.5 + parent: 2 + - uid: 15038 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,-3.5 + parent: 2 + - uid: 15041 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,-3.5 + parent: 2 + - uid: 15493 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,-3.5 + parent: 2 + - uid: 16394 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-3.5 + parent: 2 + - uid: 16458 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,-3.5 + parent: 2 + - uid: 17096 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-3.5 + parent: 2 + - uid: 20236 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,-8.5 + parent: 2 + - uid: 20237 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,-9.5 + parent: 2 + - uid: 20238 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,-10.5 + parent: 2 + - uid: 20239 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,-11.5 + parent: 2 + - uid: 20240 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,-12.5 + parent: 2 + - uid: 20241 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,-13.5 + parent: 2 + - uid: 20242 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,-14.5 + parent: 2 + - uid: 20243 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,-15.5 + parent: 2 + - uid: 20244 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,-16.5 + parent: 2 + - uid: 20245 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,-17.5 + parent: 2 + - uid: 20246 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,-18.5 + parent: 2 + - uid: 20247 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,-19.5 + parent: 2 + - uid: 20248 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,-20.5 + parent: 2 + - uid: 20249 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,-21.5 + parent: 2 + - uid: 20250 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,-22.5 + parent: 2 + - uid: 20251 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,-23.5 + parent: 2 + - uid: 20252 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,-24.5 + parent: 2 + - uid: 20253 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 38.5,-25.5 + parent: 2 +- proto: DisposalTrunk + entities: + - uid: 8225 + components: + - type: Transform + pos: 46.5,37.5 + parent: 2 + - uid: 8226 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 72.5,17.5 + parent: 2 + - uid: 8227 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 60.5,-4.5 + parent: 2 + - uid: 8228 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,5.5 + parent: 2 + - uid: 8229 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.5,10.5 + parent: 2 + - uid: 8230 + components: + - type: Transform + pos: 33.5,0.5 + parent: 2 + - uid: 8231 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 49.5,-6.5 + parent: 2 + - uid: 8232 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 48.5,-3.5 + parent: 2 + - uid: 8233 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 52.5,40.5 + parent: 2 + - uid: 8234 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 50.5,-2.5 + parent: 2 + - uid: 8235 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 82.5,29.5 + parent: 2 + - uid: 8236 + components: + - type: Transform + pos: 21.5,68.5 + parent: 2 + - uid: 8237 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,62.5 + parent: 2 + - uid: 8238 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 26.5,45.5 + parent: 2 + - uid: 8239 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,67.5 + parent: 2 + - uid: 8240 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,55.5 + parent: 2 + - uid: 8241 + components: + - type: Transform + pos: -24.5,20.5 + parent: 2 + - uid: 8242 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,7.5 + parent: 2 + - uid: 8243 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,16.5 + parent: 2 + - uid: 8244 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,17.5 + parent: 2 + - uid: 8245 + components: + - type: Transform + pos: -33.5,30.5 + parent: 2 + - uid: 8246 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,26.5 + parent: 2 + - uid: 8247 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,37.5 + parent: 2 + - uid: 8248 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,23.5 + parent: 2 + - uid: 8249 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,46.5 + parent: 2 + - uid: 8250 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,57.5 + parent: 2 + - uid: 8251 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -29.5,51.5 + parent: 2 + - uid: 8252 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,51.5 + parent: 2 + - uid: 8253 + components: + - type: Transform + pos: -22.5,64.5 + parent: 2 + - uid: 8254 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,63.5 + parent: 2 + - uid: 8255 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -17.5,51.5 + parent: 2 + - uid: 8256 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,66.5 + parent: 2 + - uid: 8257 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,59.5 + parent: 2 + - uid: 8258 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,66.5 + parent: 2 + - uid: 8259 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 20.5,55.5 + parent: 2 + - uid: 8260 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 16.5,37.5 + parent: 2 + - uid: 8261 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,26.5 + parent: 2 + - uid: 8262 + components: + - type: Transform + pos: 9.5,41.5 + parent: 2 + - uid: 8263 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,23.5 + parent: 2 + - uid: 8264 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,54.5 + parent: 2 + - uid: 8265 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,43.5 + parent: 2 + - uid: 8266 + components: + - type: Transform + pos: 53.5,46.5 + parent: 2 + - uid: 8267 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 62.5,39.5 + parent: 2 + - uid: 8268 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 78.5,29.5 + parent: 2 + - uid: 8269 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 80.5,27.5 + parent: 2 + - uid: 8270 + components: + - type: Transform + pos: 77.5,45.5 + parent: 2 + - uid: 8271 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 83.5,43.5 + parent: 2 + - uid: 8272 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 78.5,37.5 + parent: 2 + - uid: 8273 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 70.5,54.5 + parent: 2 + - uid: 8275 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 66.5,8.5 + parent: 2 + - uid: 8276 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 23.5,8.5 + parent: 2 + - uid: 8277 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,7.5 + parent: 2 + - uid: 8278 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 53.5,13.5 + parent: 2 + - uid: 8279 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 46.5,28.5 + parent: 2 + - uid: 8280 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 55.5,15.5 + parent: 2 + - uid: 8281 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,3.5 + parent: 2 + - uid: 20233 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,-26.5 + parent: 2 +- proto: DisposalUnit + entities: + - uid: 6791 + components: + - type: Transform + pos: 37.5,-26.5 + parent: 2 + - uid: 8283 + components: + - type: Transform + pos: 12.5,10.5 + parent: 2 + - uid: 8284 + components: + - type: Transform + pos: -4.5,26.5 + parent: 2 + - uid: 8285 + components: + - type: Transform + pos: -8.5,37.5 + parent: 2 + - uid: 8286 + components: + - type: Transform + pos: -1.5,16.5 + parent: 2 + - uid: 8287 + components: + - type: Transform + pos: -24.5,20.5 + parent: 2 + - uid: 8289 + components: + - type: Transform + pos: -17.5,51.5 + parent: 2 + - uid: 8290 + components: + - type: Transform + pos: -22.5,51.5 + parent: 2 + - uid: 8291 + components: + - type: Transform + pos: -22.5,64.5 + parent: 2 + - uid: 8292 + components: + - type: Transform + pos: 33.5,0.5 + parent: 2 + - uid: 8293 + components: + - type: Transform + pos: 34.5,7.5 + parent: 2 + - uid: 8294 + components: + - type: Transform + pos: 50.5,-2.5 + parent: 2 + - uid: 8295 + components: + - type: Transform + pos: 48.5,-3.5 + parent: 2 + - uid: 8296 + components: + - type: Transform + pos: 49.5,-6.5 + parent: 2 + - uid: 8297 + components: + - type: Transform + pos: 53.5,13.5 + parent: 2 + - uid: 8298 + components: + - type: Transform + pos: 55.5,15.5 + parent: 2 + - uid: 8299 + components: + - type: Transform + pos: 46.5,28.5 + parent: 2 + - uid: 8300 + components: + - type: Transform + pos: 23.5,8.5 + parent: 2 + - uid: 8301 + components: + - type: Transform + pos: 2.5,57.5 + parent: 2 + - uid: 8302 + components: + - type: Transform + pos: 7.5,66.5 + parent: 2 + - uid: 8303 + components: + - type: Transform + pos: 8.5,59.5 + parent: 2 + - uid: 8304 + components: + - type: Transform + pos: 21.5,62.5 + parent: 2 + - uid: 8305 + components: + - type: Transform + pos: 26.5,45.5 + parent: 2 + - uid: 8306 + components: + - type: Transform + pos: 24.5,67.5 + parent: 2 + - uid: 8307 + components: + - type: Transform + pos: 20.5,55.5 + parent: 2 + - uid: 8308 + components: + - type: Transform + pos: 46.5,37.5 + parent: 2 + - uid: 8309 + components: + - type: Transform + pos: 53.5,46.5 + parent: 2 + - uid: 8310 + components: + - type: Transform + pos: 52.5,40.5 + parent: 2 + - uid: 8311 + components: + - type: Transform + pos: 62.5,39.5 + parent: 2 + - uid: 8312 + components: + - type: Transform + pos: 43.5,54.5 + parent: 2 + - uid: 8313 + components: + - type: Transform + pos: 42.5,43.5 + parent: 2 + - uid: 8314 + components: + - type: Transform + pos: 27.5,26.5 + parent: 2 + - uid: 8315 + components: + - type: Transform + pos: 9.5,23.5 + parent: 2 + - uid: 8316 + components: + - type: Transform + pos: 9.5,41.5 + parent: 2 + - uid: 8317 + components: + - type: Transform + pos: 16.5,37.5 + parent: 2 + - uid: 8318 + components: + - type: Transform + pos: 78.5,37.5 + parent: 2 + - uid: 8319 + components: + - type: Transform + pos: 78.5,29.5 + parent: 2 + - uid: 8320 + components: + - type: Transform + pos: 80.5,27.5 + parent: 2 + - uid: 8322 + components: + - type: Transform + pos: 72.5,17.5 + parent: 2 + - uid: 8323 + components: + - type: Transform + pos: -1.5,46.5 + parent: 2 + - uid: 8324 + components: + - type: Transform + pos: 2.5,23.5 + parent: 2 + - uid: 8325 + components: + - type: Transform + pos: 14.5,17.5 + parent: 2 + - uid: 8326 + components: + - type: Transform + pos: -15.5,7.5 + parent: 2 + - uid: 8327 + components: + - type: Transform + pos: -33.5,30.5 + parent: 2 + - uid: 8328 + components: + - type: Transform + pos: -16.5,63.5 + parent: 2 + - uid: 8329 + components: + - type: Transform + pos: -29.5,51.5 + parent: 2 + - uid: 8330 + components: + - type: Transform + pos: -33.5,55.5 + parent: 2 + - uid: 8331 + components: + - type: Transform + pos: -5.5,66.5 + parent: 2 + - uid: 8332 + components: + - type: Transform + pos: 70.5,54.5 + parent: 2 + - uid: 8333 + components: + - type: Transform + pos: 83.5,43.5 + parent: 2 + - uid: 8334 + components: + - type: Transform + pos: 77.5,45.5 + parent: 2 + - uid: 8335 + components: + - type: Transform + pos: 82.5,29.5 + parent: 2 + - uid: 8336 + components: + - type: Transform + pos: 66.5,8.5 + parent: 2 + - uid: 8337 + components: + - type: Transform + pos: -7.5,3.5 + parent: 2 + - uid: 15251 + components: + - type: Transform + pos: 72.5,27.5 + parent: 2 +- proto: DisposalYJunction + entities: + - uid: 8339 + components: + - type: Transform + pos: 7.5,10.5 + parent: 2 + - uid: 8340 + components: + - type: Transform + pos: -12.5,57.5 + parent: 2 + - uid: 8341 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,7.5 + parent: 2 + - uid: 8342 + components: + - type: Transform + pos: 15.5,20.5 + parent: 2 + - uid: 8343 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,20.5 + parent: 2 + - uid: 8344 + components: + - type: Transform + pos: 0.5,48.5 + parent: 2 + - uid: 8345 + components: + - type: Transform + pos: 81.5,43.5 + parent: 2 + - uid: 8346 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 81.5,34.5 + parent: 2 + - uid: 8347 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 65.5,34.5 + parent: 2 +- proto: DogBed + entities: + - uid: 8116 + components: + - type: Transform + pos: 74.5,28.5 + parent: 2 + - uid: 8348 + components: + - type: Transform + pos: 78.5,39.5 + parent: 2 + - uid: 8349 + components: + - type: Transform + pos: 52.5,13.5 + parent: 2 + - uid: 8350 + components: + - type: Transform + pos: -14.5,61.5 + parent: 2 + - uid: 8351 + components: + - type: Transform + pos: 20.5,38.5 + parent: 2 + - uid: 8353 + components: + - type: Transform + pos: 13.5,26.5 + parent: 2 + - uid: 12549 + components: + - type: Transform + pos: -3.5,23.5 + parent: 2 + - uid: 18751 + components: + - type: Transform + pos: -1.5,59.5 + parent: 2 + - uid: 19364 + components: + - type: Transform + pos: -8.5,20.5 + parent: 2 + - uid: 19366 + components: + - type: Transform + pos: 0.5,15.5 + parent: 2 + - uid: 19369 + components: + - type: Transform + pos: -12.5,7.5 + parent: 2 +- proto: DonkpocketBoxSpawner + entities: + - uid: 8354 + components: + - type: Transform + pos: -25.5,60.5 + parent: 2 + - uid: 8355 + components: + - type: Transform + pos: 55.5,43.5 + parent: 2 + - uid: 8356 + components: + - type: Transform + pos: 3.5,40.5 + parent: 2 + - uid: 8357 + components: + - type: Transform + pos: 44.5,66.5 + parent: 2 +- proto: DoubleEmergencyNitrogenTankFilled + entities: + - uid: 8358 + components: + - type: Transform + pos: -17.453373,-3.5452433 + parent: 2 +- proto: DoubleEmergencyOxygenTankFilled + entities: + - uid: 8359 + components: + - type: Transform + pos: -11.443108,18.449512 + parent: 2 + - uid: 8360 + components: + - type: Transform + pos: 28.578362,66.59765 + parent: 2 + - uid: 8361 + components: + - type: Transform + pos: -17.453373,-3.3395076 + parent: 2 +- proto: DresserCaptainFilled + entities: + - uid: 8362 + components: + - type: Transform + pos: 77.5,24.5 + parent: 2 +- proto: DresserChiefEngineerFilled + entities: + - uid: 8363 + components: + - type: Transform + pos: -2.5,25.5 + parent: 2 +- proto: DresserChiefMedicalOfficerFilled + entities: + - uid: 14264 + components: + - type: Transform + pos: 20.5,39.5 + parent: 2 +- proto: DresserFilled + entities: + - uid: 8364 + components: + - type: Transform + pos: 40.5,44.5 + parent: 2 +- proto: DresserHeadOfPersonnelFilled + entities: + - uid: 18621 + components: + - type: Transform + pos: 76.5,40.5 + parent: 2 +- proto: DresserHeadOfSecurityFilled + entities: + - uid: 18622 + components: + - type: Transform + pos: -17.5,52.5 + parent: 2 +- proto: DresserQuarterMasterFilled + entities: + - uid: 8365 + components: + - type: Transform + pos: 0.5,17.5 + parent: 2 +- proto: DresserResearchDirectorFilled + entities: + - uid: 13598 + components: + - type: Transform + pos: 51.5,13.5 + parent: 2 +- proto: DrinkBeerBottleFull + entities: + - uid: 8366 + components: + - type: Transform + pos: 49.910133,60.460823 + parent: 2 + - uid: 8367 + components: + - type: Transform + pos: 49.748734,60.783405 + parent: 2 + - uid: 8368 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 49.766666,60.3533 + parent: 2 +- proto: DrinkBlueCuracaoBottleFull + entities: + - uid: 8369 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 47.56086,61.159748 + parent: 2 + - uid: 8370 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 47.381527,60.926773 + parent: 2 + - uid: 8371 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 47.66846,61.07014 + parent: 2 + - uid: 8372 + components: + - type: Transform + pos: 47.07666,61.267273 + parent: 2 +- proto: DrinkBottleCoffeeLiqueur + entities: + - uid: 8373 + components: + - type: Transform + pos: 48.923798,60.60419 + parent: 2 + - uid: 8374 + components: + - type: Transform + pos: 48.905865,60.12032 + parent: 2 +- proto: DrinkGoldenCup + entities: + - uid: 8375 + components: + - type: Transform + pos: 31.641338,54.32857 + parent: 2 +- proto: DrinkVermouthBottleFull + entities: + - uid: 8376 + components: + - type: Transform + pos: 31.767677,53.86565 + parent: 2 +- proto: DrinkWineBottleFull + entities: + - uid: 8377 + components: + - type: Transform + pos: 10.612774,60.678593 + parent: 2 + - uid: 18772 + components: + - type: Transform + pos: 9.289278,56.894657 + parent: 2 + - uid: 18773 + components: + - type: Transform + pos: 11.675882,56.894657 + parent: 2 +- proto: Dropper + entities: + - uid: 8378 + components: + - type: Transform + pos: 47.767334,31.689003 + parent: 2 +- proto: ElectricGuitarInstrument + entities: + - uid: 19499 + components: + - type: Transform + pos: -31.581257,67.58908 + parent: 2 +- proto: EmergencyRollerBedSpawnFolded + entities: + - uid: 8379 + components: + - type: Transform + pos: 7.3722377,37.43149 + parent: 2 + - uid: 8380 + components: + - type: Transform + pos: 7.6352606,37.682384 + parent: 2 + - uid: 8381 + components: + - type: Transform + pos: 7.3961487,37.65849 + parent: 2 +- proto: Emitter + entities: + - uid: 8382 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,34.5 + parent: 2 + - uid: 8383 + components: + - type: Transform + pos: -19.5,36.5 + parent: 2 + - uid: 8384 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,32.5 + parent: 2 +- proto: EncryptionKeyCargo + entities: + - uid: 20208 + components: + - type: Transform + pos: 27.582348,-27.674433 + parent: 2 +- proto: EncryptionKeyCommand + entities: + - uid: 20203 + components: + - type: Transform + pos: 27.582348,-27.375748 + parent: 2 +- proto: EncryptionKeyCommon + entities: + - uid: 20204 + components: + - type: Transform + pos: 27.702003,-27.360813 + parent: 2 +- proto: EncryptionKeyEngineering + entities: + - uid: 20205 + components: + - type: Transform + pos: 27.357986,-27.52509 + parent: 2 +- proto: EncryptionKeyJustice + entities: + - uid: 20207 + components: + - type: Transform + pos: 27.372946,-27.719236 + parent: 2 +- proto: EncryptionKeyMedical + entities: + - uid: 20209 + components: + - type: Transform + pos: 27.432774,-27.465353 + parent: 2 +- proto: EncryptionKeyPrison + entities: + - uid: 20202 + components: + - type: Transform + pos: 27.332344,-27.360813 + parent: 2 +- proto: EncryptionKeyRobo + entities: + - uid: 20210 + components: + - type: Transform + pos: 27.477646,-27.554958 + parent: 2 +- proto: EncryptionKeyScience + entities: + - uid: 20206 + components: + - type: Transform + pos: 27.61226,-27.554958 + parent: 2 +- proto: EncryptionKeySecurity + entities: + - uid: 20211 + components: + - type: Transform + pos: 27.492603,-27.584826 + parent: 2 +- proto: EncryptionKeyService + entities: + - uid: 20212 + components: + - type: Transform + pos: 27.462688,-27.52509 + parent: 2 +- proto: EpinephrineChemistryBottle + entities: + - uid: 8401 + components: + - type: Transform + pos: 15.344378,28.906837 + parent: 2 + - uid: 8402 + components: + - type: Transform + pos: 15.751467,28.850725 + parent: 2 + - uid: 8403 + components: + - type: Transform + pos: 27.41061,31.748636 + parent: 2 + - uid: 8404 + components: + - type: Transform + pos: 27.607136,31.538218 + parent: 2 + - uid: 8405 + components: + - type: Transform + pos: 14.622032,38.709717 + parent: 2 +- proto: ExosuitFabricator + entities: + - uid: 8406 + components: + - type: Transform + pos: 57.5,22.5 + parent: 2 + - uid: 8407 + components: + - type: Transform + pos: 58.5,22.5 + parent: 2 + - uid: 18466 + components: + - type: Transform + pos: 24.5,-31.5 + parent: 2 +- proto: ExtinguisherCabinetFilled + entities: + - uid: 8408 + components: + - type: Transform + pos: 74.5,63.5 + parent: 2 + - uid: 8409 + components: + - type: Transform + pos: 72.5,57.5 + parent: 2 + - uid: 8410 + components: + - type: Transform + pos: 37.5,12.5 + parent: 2 + - uid: 8411 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,11.5 + parent: 2 + - uid: 8412 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,18.5 + parent: 2 + - uid: 8413 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 16.5,36.5 + parent: 2 + - uid: 8414 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,25.5 + parent: 2 + - uid: 8415 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,13.5 + parent: 2 + - uid: 8416 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -16.5,6.5 + parent: 2 + - uid: 8417 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,5.5 + parent: 2 + - uid: 8418 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,9.5 + parent: 2 + - uid: 8419 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 34.5,26.5 + parent: 2 + - uid: 8420 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,32.5 + parent: 2 + - uid: 8421 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 45.5,27.5 + parent: 2 + - uid: 8422 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 57.5,25.5 + parent: 2 + - uid: 8423 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 83.5,38.5 + parent: 2 + - uid: 8424 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 73.5,41.5 + parent: 2 + - uid: 8425 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 34.5,40.5 + parent: 2 + - uid: 8426 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 38.5,50.5 + parent: 2 + - uid: 8427 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,50.5 + parent: 2 + - uid: 8428 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,50.5 + parent: 2 + - uid: 8429 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,63.5 + parent: 2 + - uid: 8430 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,72.5 + parent: 2 + - uid: 8431 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,72.5 + parent: 2 + - uid: 8432 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,59.5 + parent: 2 + - uid: 8433 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,57.5 + parent: 2 + - uid: 8434 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,56.5 + parent: 2 + - uid: 8435 + components: + - type: Transform + pos: 72.5,36.5 + parent: 2 + - uid: 8436 + components: + - type: Transform + pos: 79.5,29.5 + parent: 2 + - uid: 8437 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 84.5,26.5 + parent: 2 + - uid: 18757 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,14.5 + parent: 2 +- proto: FaxMachineBase + entities: + - uid: 1827 + components: + - type: Transform + pos: 76.5,28.5 + parent: 2 + - uid: 8438 + components: + - type: Transform + pos: -5.5,26.5 + parent: 2 + - uid: 8439 + components: + - type: Transform + pos: 1.5,14.5 + parent: 2 + - uid: 8440 + components: + - type: Transform + pos: -16.5,62.5 + parent: 2 + - uid: 8441 + components: + - type: Transform + pos: -17.5,53.5 + parent: 2 + - uid: 8442 + components: + - type: Transform + pos: -22.5,52.5 + parent: 2 + - uid: 8444 + components: + - type: Transform + pos: 51.5,14.5 + parent: 2 + - uid: 8445 + components: + - type: Transform + pos: 16.5,56.5 + parent: 2 + - uid: 8446 + components: + - type: Transform + pos: 16.5,39.5 + parent: 2 + - uid: 8447 + components: + - type: Transform + pos: 76.5,38.5 + parent: 2 + - uid: 8448 + components: + - type: Transform + pos: 82.5,35.5 + parent: 2 +- proto: filingCabinetDrawerRandom + entities: + - uid: 8450 + components: + - type: Transform + pos: 45.5,14.5 + parent: 2 + - uid: 8451 + components: + - type: Transform + pos: -1.5,58.5 + parent: 2 + - uid: 8452 + components: + - type: Transform + pos: 29.5,56.5 + parent: 2 + - uid: 8453 + components: + - type: Transform + pos: 8.5,28.5 + parent: 2 + - uid: 8454 + components: + - type: Transform + pos: 59.5,56.5 + parent: 2 + - uid: 8455 + components: + - type: Transform + pos: 36.5,1.5 + parent: 2 + - uid: 18449 + components: + - type: Transform + pos: 26.5,-36.5 + parent: 2 +- proto: filingCabinetRandom + entities: + - uid: 8456 + components: + - type: Transform + pos: -2.5,31.5 + parent: 2 +- proto: FireAlarm + entities: + - uid: 8457 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 63.5,55.5 + parent: 2 + - type: DeviceList + devices: + - 8553 + - 8551 + - 8550 + - 8549 + - 8922 + - 8552 + - uid: 8458 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 60.5,55.5 + parent: 2 + - type: DeviceList + devices: + - 8554 + - 8555 + - 8553 + - 8915 + - 8916 + - 8917 + - uid: 8459 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 72.5,56.5 + parent: 2 + - type: DeviceList + devices: + - 8549 + - 8550 + - 8551 + - 8552 + - 8553 + - uid: 8460 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 73.5,58.5 + parent: 2 + - type: DeviceList + devices: + - 8552 + - uid: 8461 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 72.5,41.5 + parent: 2 + - type: DeviceList + devices: + - 8585 + - 8584 + - 8561 + - 8560 + - uid: 8462 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 75.5,41.5 + parent: 2 + - type: DeviceList + devices: + - 8585 + - 8584 + - 8561 + - 8560 + - uid: 8463 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 73.5,46.5 + parent: 2 + - type: DeviceList + devices: + - 8558 + - 8557 + - 8559 + - 8586 + - uid: 8464 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 63.5,36.5 + parent: 2 + - type: DeviceList + devices: + - 8567 + - 8568 + - 8569 + - 8573 + - 8574 + - 8575 + - 8566 + - 8565 + - 8564 + - 8572 + - 8571 + - 8570 + - 8874 + - 8607 + - 8606 + - 8605 + - 8619 + - 8618 + - 8617 + - 8627 + - 8628 + - 8629 + - 8822 + - 8838 + - 8839 + - uid: 8465 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 67.5,32.5 + parent: 2 + - type: DeviceList + devices: + - 8572 + - 8571 + - 8570 + - 8567 + - 8568 + - 8569 + - 8574 + - 8573 + - 8575 + - 8566 + - 8565 + - 8564 + - 8560 + - 8561 + - 8562 + - 8563 + - uid: 8466 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 58.5,41.5 + parent: 2 + - type: DeviceList + devices: + - 8607 + - 8606 + - 8605 + - 8619 + - 8618 + - 8617 + - 8611 + - 8612 + - 8925 + - 8609 + - 8608 + - 8610 + - 8623 + - 8622 + - 8616 + - uid: 8467 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 58.5,36.5 + parent: 2 + - type: DeviceList + devices: + - 8607 + - 8606 + - 8605 + - 8839 + - 8838 + - 8822 + - 8629 + - 8628 + - 8627 + - 8617 + - 8618 + - 8619 + - 8573 + - 8574 + - 8575 + - 8875 + - 8874 + - uid: 8468 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 57.5,31.5 + parent: 2 + - type: DeviceList + devices: + - 8839 + - 8838 + - 8822 + - 8846 + - 8840 + - 8841 + - 8842 + - 8875 + - uid: 8469 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 49.5,29.5 + parent: 2 + - type: DeviceList + devices: + - 8845 + - 8846 + - 8847 + - 8848 + - 8840 + - uid: 8470 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 46.5,19.5 + parent: 2 + - type: DeviceList + devices: + - 8845 + - 8846 + - 8847 + - 8848 + - 8840 + - 8862 + - 8849 + - 8850 + - 8859 + - 8852 + - 8843 + - uid: 8471 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 61.5,22.5 + parent: 2 + - type: DeviceList + devices: + - 8844 + - 8842 + - 8677 + - 8871 + - uid: 8472 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,10.5 + parent: 2 + - type: DeviceList + devices: + - 8849 + - 8853 + - 8867 + - 8863 + - uid: 8473 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,5.5 + parent: 2 + - uid: 8474 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,1.5 + parent: 2 + - type: DeviceList + devices: + - 8855 + - 8853 + - 8854 + - 8857 + - 8864 + - uid: 8475 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 50.5,8.5 + parent: 2 + - type: DeviceList + devices: + - 8858 + - 8859 + - 8861 + - 8860 + - uid: 8476 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,36.5 + parent: 2 + - type: DeviceList + devices: + - 8630 + - 8631 + - 8632 + - 8656 + - 8654 + - 8655 + - uid: 8477 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,41.5 + parent: 2 + - type: DeviceList + devices: + - 8636 + - 8638 + - 8637 + - 8642 + - 8643 + - 8639 + - 8644 + - 8645 + - uid: 8478 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,43.5 + parent: 2 + - type: DeviceList + devices: + - 8622 + - 8616 + - 8623 + - 8613 + - 8624 + - uid: 8479 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 51.5,42.5 + parent: 2 + - uid: 8480 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 53.5,47.5 + parent: 2 + - type: DeviceList + devices: + - 8610 + - 8608 + - 8609 + - 8614 + - 8625 + - uid: 8481 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 59.5,40.5 + parent: 2 + - type: DeviceList + devices: + - 8925 + - 8641 + - 8640 + - uid: 8482 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,36.5 + parent: 2 + - uid: 8483 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,43.5 + parent: 2 + - uid: 8484 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,50.5 + parent: 2 + - type: DeviceList + devices: + - 8676 + - 8927 + - 8657 + - 8658 + - 8659 + - 8667 + - 8666 + - 8556 + - 8665 + - 8664 + - 8663 + - 8661 + - 8662 + - 8660 + - uid: 8485 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 20.5,50.5 + parent: 2 + - uid: 8486 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,50.5 + parent: 2 + - uid: 8487 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,45.5 + parent: 2 + - uid: 8488 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,57.5 + parent: 2 + - uid: 8489 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,69.5 + parent: 2 + - uid: 8490 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,65.5 + parent: 2 + - uid: 8491 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,61.5 + parent: 2 + - uid: 8492 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,57.5 + parent: 2 + - type: DeviceList + devices: + - 8725 + - 8724 + - 8723 + - 8523 + - 8522 + - 8524 + - 8521 + - 8525 + - 8526 + - 8527 + - 8717 + - uid: 8493 + components: + - type: Transform + pos: 15.5,40.5 + parent: 2 + - type: DeviceList + devices: + - 8881 + - 8883 + - 8882 + - uid: 8494 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 16.5,33.5 + parent: 2 + - type: DeviceList + devices: + - 8891 + - 8890 + - 8885 + - 8886 + - 8894 + - 8892 + - 8893 + - 8895 + - 8907 + - 8906 + - 8905 + - 8908 + - 8883 + - 465 + - 8931 + - 8930 + - uid: 8495 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,35.5 + parent: 2 + - type: DeviceList + devices: + - 8889 + - 8887 + - 8888 + - 8649 + - 8650 + - 8633 + - uid: 8496 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,18.5 + parent: 2 + - type: DeviceList + devices: + - 8670 + - 8669 + - 8635 + - 8634 + - 8830 + - 8831 + - 8832 + - 8829 + - 8828 + - 8675 + - uid: 8497 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,13.5 + parent: 2 + - type: DeviceList + devices: + - 8833 + - 8836 + - 8837 + - 8829 + - 8828 + - 8835 + - uid: 8498 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,9.5 + parent: 2 + - type: DeviceList + devices: + - 8810 + - 8809 + - 8811 + - 8823 + - 8824 + - 8812 + - uid: 8499 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,6.5 + parent: 2 + - type: DeviceList + devices: + - 8810 + - 8809 + - 8807 + - 8815 + - 8816 + - 8826 + - 8825 + - 8821 + - 8808 + - uid: 8500 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,28.5 + parent: 2 + - uid: 8501 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,6.5 + parent: 2 + - type: DeviceList + devices: + - 8826 + - 8825 + - 8817 + - 8819 + - 8820 + - 8827 + - 8802 + - 8932 + - 8933 + - uid: 8502 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,33.5 + parent: 2 + - type: DeviceList + devices: + - 8774 + - 8773 + - 8769 + - uid: 8503 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,22.5 + parent: 2 + - type: DeviceList + devices: + - 8790 + - 8792 + - 8791 + - uid: 8504 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,21.5 + parent: 2 + - type: DeviceList + devices: + - 8790 + - 8787 + - 8789 + - 8786 + - 8788 + - uid: 8505 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,12.5 + parent: 2 + - type: DeviceList + devices: + - 8786 + - 8926 + - 8785 + - uid: 8506 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -37.5,28.5 + parent: 2 + - type: DeviceList + devices: + - 20257 + - 8785 + - 8782 + - 4763 + - uid: 8507 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,42.5 + parent: 2 + - type: DeviceList + devices: + - 8779 + - 8778 + - 8796 + - uid: 8508 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -17.5,44.5 + parent: 2 + - type: DeviceList + devices: + - 8780 + - 8779 + - uid: 8509 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,53.5 + parent: 2 + - type: DeviceList + devices: + - 8711 + - 8710 + - 8712 + - 8723 + - 8724 + - 8725 + - 8721 + - 8722 + - 8726 + - 8720 + - 8719 + - uid: 8510 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,59.5 + parent: 2 + - type: DeviceList + devices: + - 8738 + - 8739 + - 8748 + - 8744 + - uid: 8511 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -25.5,52.5 + parent: 2 + - type: DeviceList + devices: + - 8748 + - 8742 + - uid: 8512 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,68.5 + parent: 2 + - type: DeviceList + devices: + - 8741 + - 8740 + - 11774 + - 11601 + - 8745 + - 8746 + - 11598 + - 11772 + - 392 + - 19592 + - 19591 + - 11773 + - 19382 + - 19383 + - 11599 + - 19593 + - 19594 + - 19595 + - 19596 + - 19597 + - 19598 + - 19599 + - 8539 + - 8541 + - uid: 8513 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,64.5 + parent: 2 + - type: DeviceList + devices: + - 8732 + - 8734 + - 8735 + - 8733 + - 8736 + - 8737 + - uid: 8514 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,66.5 + parent: 2 + - type: DeviceList + devices: + - 8727 + - 8729 + - uid: 8515 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,60.5 + parent: 2 + - type: DeviceList + devices: + - 8700 + - 8699 + - 8701 + - 8702 + - uid: 8516 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,57.5 + parent: 2 + - type: DeviceList + devices: + - 8705 + - 8706 + - 8707 + - 8703 + - 8704 + - uid: 18620 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 79.5,31.5 + parent: 2 + - type: DeviceList + devices: + - 304 + - 18618 + - 18619 + - 8581 + - 8580 + - 8583 + - 8582 + - 8586 + - 8584 + - 8563 + - 8562 + - 8576 + - 8588 + - 8577 + - uid: 18627 + components: + - type: Transform + pos: 76.5,27.5 + parent: 2 + - type: DeviceList + devices: + - 18628 + - 11678 + - 11842 + - 8579 + - 18625 + - 18624 + - 18623 + - 8588 + - 8578 + - 11838 + - 11687 + - 11688 + - 428 + - 11839 + - 8590 + - uid: 19586 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,72.5 + parent: 2 + - type: DeviceList + devices: + - 19493 + - 19574 + - 19575 + - 19576 + - 19577 + - 19578 + - 19579 + - 19580 + - 19584 + - 19583 + - 19573 + - 19401 + - 19400 + - uid: 19587 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -25.5,75.5 + parent: 2 + - type: DeviceList + devices: + - 19582 + - 19581 + - 19403 + - 19402 + - 19585 + - uid: 20126 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,-26.5 + parent: 2 + - type: DeviceList + devices: + - 20142 + - 20136 + - 20137 + - uid: 20127 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,-34.5 + parent: 2 + - type: DeviceList + devices: + - 20132 + - 20134 + - 20133 + - 20140 + - 20137 + - 20257 + - uid: 20128 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,-36.5 + parent: 2 + - type: DeviceList + devices: + - 20130 + - 20129 + - 20131 + - 20132 + - 20138 + - 20156 + - 18598 +- proto: FireAxeCabinetFilled + entities: + - uid: 8519 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,21.5 + parent: 2 + - uid: 8520 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 83.5,30.5 + parent: 2 +- proto: FirelockEdge + entities: + - uid: 304 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 84.5,35.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 5 + - 18620 + - uid: 4763 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -31.5,28.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 45 + - 8506 + - uid: 8521 + components: + - type: Transform + pos: -4.5,53.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 24 + - 8492 + - uid: 8522 + components: + - type: Transform + pos: -8.5,53.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 24 + - 8492 + - uid: 8523 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,53.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 24 + - 8492 + - uid: 8524 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,53.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 24 + - 8492 + - uid: 8525 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,53.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 24 + - 8492 + - uid: 8526 + components: + - type: Transform + pos: -0.5,53.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 24 + - 8492 + - uid: 8527 + components: + - type: Transform + pos: -4.5,57.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 24 + - 8492 + - uid: 8539 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -37.5,68.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 28 + - 19588 + - 8512 + - uid: 8540 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.5,52.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 29 + - uid: 8541 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -37.5,67.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 28 + - 19588 + - 8512 + - uid: 8542 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,52.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 29 + - uid: 8543 + components: + - type: Transform + pos: -18.5,20.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 41 + - uid: 8544 + components: + - type: Transform + pos: -14.5,5.5 + parent: 2 + - uid: 8545 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,30.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 45 + - uid: 18618 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 84.5,34.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 5 + - 18620 + - uid: 18619 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 84.5,33.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 5 + - 18620 + - uid: 18623 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 72.5,31.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 18626 + - 18627 + - uid: 18624 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 72.5,29.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 18626 + - 18627 + - uid: 18625 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 72.5,28.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 18626 + - 18627 + - uid: 19493 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,70.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 19586 + - 19589 + - uid: 19557 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,75.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 19589 + - uid: 19558 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,76.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 19589 + - uid: 19559 + components: + - type: Transform + pos: -35.5,77.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 19589 + - uid: 19560 + components: + - type: Transform + pos: -34.5,78.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 19589 + - uid: 19561 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,77.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 19589 + - uid: 19562 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,78.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 19589 + - uid: 19563 + components: + - type: Transform + pos: -33.5,79.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 19589 + - uid: 19564 + components: + - type: Transform + pos: -32.5,79.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 19589 + - uid: 19565 + components: + - type: Transform + pos: -31.5,79.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 19589 + - uid: 19566 + components: + - type: Transform + pos: -30.5,79.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 19589 + - uid: 19567 + components: + - type: Transform + pos: -29.5,79.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 19589 + - uid: 19568 + components: + - type: Transform + pos: -28.5,78.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 19589 + - uid: 19569 + components: + - type: Transform + pos: -27.5,77.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 19589 + - uid: 19570 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,77.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 19589 + - uid: 19571 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -28.5,78.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 19589 + - uid: 19574 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,70.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 19586 + - 19589 + - uid: 19575 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -32.5,70.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 19586 + - 19589 + - uid: 19576 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -31.5,70.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 19586 + - 19589 + - uid: 19577 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -30.5,70.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 19586 + - 19589 + - uid: 19578 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,70.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 19586 + - 19589 + - uid: 19579 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,70.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 19586 + - 19589 + - uid: 19580 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -27.5,70.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 19586 + - 19589 + - uid: 19581 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,74.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 19587 + - 19590 + - uid: 19582 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,73.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 19587 + - 19590 + - uid: 19583 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,74.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 19589 + - 19586 + - uid: 19584 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,73.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 19589 + - 19586 + - uid: 19593 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,69.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 19588 + - 8512 + - uid: 19594 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -32.5,69.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 19588 + - 8512 + - uid: 19595 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -31.5,69.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 19588 + - 8512 + - uid: 19596 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -30.5,69.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 19588 + - 8512 + - uid: 19597 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,69.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 19588 + - 8512 + - uid: 19598 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,69.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 19588 + - 8512 + - uid: 19599 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -27.5,69.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 19588 + - 8512 +- proto: FirelockGlass + entities: + - uid: 8546 + components: + - type: Transform + pos: 2.5,29.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 76 + - 37 + - 80 + - uid: 8547 + components: + - type: Transform + pos: -3.5,18.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 80 + - uid: 8548 + components: + - type: Transform + pos: -1.5,35.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 37 + - 80 + - uid: 8549 + components: + - type: Transform + pos: 66.5,52.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 3 + - 8459 + - 8457 + - 4 + - uid: 8550 + components: + - type: Transform + pos: 65.5,52.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 3 + - 8459 + - 8457 + - 4 + - uid: 8551 + components: + - type: Transform + pos: 64.5,52.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 3 + - 8459 + - 8457 + - 4 + - uid: 8552 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 71.5,60.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 3 + - 8460 + - 8459 + - 8457 + - uid: 8553 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 61.5,60.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 3 + - 8459 + - 8458 + - 8457 + - uid: 8554 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 60.5,58.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 3 + - 8458 + - uid: 8555 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 58.5,57.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 3 + - 8458 + - uid: 8556 + components: + - type: Transform + pos: 27.5,49.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 15 + - 8484 + - uid: 8557 + components: + - type: Transform + pos: 69.5,45.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 6 + - 8463 + - uid: 8558 + components: + - type: Transform + pos: 72.5,45.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 6 + - 8463 + - uid: 8559 + components: + - type: Transform + pos: 79.5,43.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 6 + - 5 + - 8463 + - uid: 8560 + components: + - type: Transform + pos: 69.5,36.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 8465 + - 8461 + - 8462 + - uid: 8561 + components: + - type: Transform + pos: 70.5,36.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 8465 + - 8461 + - 8462 + - uid: 8562 + components: + - type: Transform + pos: 74.5,34.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 8465 + - 5 + - 18620 + - uid: 8563 + components: + - type: Transform + pos: 78.5,34.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 8465 + - 5 + - 18620 + - uid: 8564 + components: + - type: Transform + pos: 66.5,32.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 4 + - 8465 + - 8464 + - uid: 8565 + components: + - type: Transform + pos: 65.5,32.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 4 + - 8465 + - 8464 + - uid: 8566 + components: + - type: Transform + pos: 64.5,32.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 4 + - 8465 + - 8464 + - uid: 8567 + components: + - type: Transform + pos: 66.5,36.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 4 + - 8465 + - 8464 + - uid: 8568 + components: + - type: Transform + pos: 65.5,36.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 4 + - 8465 + - 8464 + - uid: 8569 + components: + - type: Transform + pos: 64.5,36.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 4 + - 8465 + - 8464 + - uid: 8570 + components: + - type: Transform + pos: 67.5,35.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 4 + - 8465 + - 8464 + - uid: 8571 + components: + - type: Transform + pos: 67.5,34.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 4 + - 8465 + - 8464 + - uid: 8572 + components: + - type: Transform + pos: 67.5,33.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 4 + - 8465 + - 8464 + - uid: 8573 + components: + - type: Transform + pos: 63.5,35.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 4 + - 10 + - 8465 + - 8464 + - 8467 + - uid: 8574 + components: + - type: Transform + pos: 63.5,34.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 4 + - 10 + - 8465 + - 8464 + - 8467 + - uid: 8575 + components: + - type: Transform + pos: 63.5,33.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 4 + - 10 + - 8465 + - 8464 + - 8467 + - uid: 8576 + components: + - type: Transform + pos: 81.5,28.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 5 + - 18620 + - uid: 8577 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 81.5,20.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 5 + - 18620 + - uid: 8578 + components: + - type: Transform + pos: 77.5,27.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 5 + - 18626 + - 18627 + - uid: 8579 + components: + - type: Transform + pos: 67.5,27.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 8 + - 18626 + - 18627 + - uid: 8580 + components: + - type: Transform + pos: 83.5,32.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 5 + - 18620 + - uid: 8581 + components: + - type: Transform + pos: 83.5,31.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 5 + - 18620 + - uid: 8582 + components: + - type: Transform + pos: 83.5,37.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 5 + - 18620 + - uid: 8583 + components: + - type: Transform + pos: 83.5,36.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 5 + - 18620 + - uid: 8584 + components: + - type: Transform + pos: 79.5,38.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 5 + - 8461 + - 8462 + - 18620 + - uid: 8585 + components: + - type: Transform + pos: 73.5,40.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 5 + - 8461 + - 8462 + - uid: 8586 + components: + - type: Transform + pos: 81.5,41.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 5 + - 8463 + - 18620 + - uid: 8588 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 79.5,30.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 7 + - 5 + - 18620 + - 18626 + - 18627 + - uid: 8589 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 81.5,45.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 5 + - uid: 8590 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 75.5,25.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 7 + - 18626 + - 18627 + - uid: 8592 + components: + - type: Transform + pos: 64.5,12.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 8 + - 9 + - uid: 8593 + components: + - type: Transform + pos: 65.5,12.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 8 + - 9 + - uid: 8594 + components: + - type: Transform + pos: 66.5,12.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 8 + - 9 + - uid: 8595 + components: + - type: Transform + pos: 71.5,16.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 8 + - uid: 8596 + components: + - type: Transform + pos: 73.5,18.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 8 + - uid: 8597 + components: + - type: Transform + pos: 66.5,22.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 8 + - 4 + - uid: 8598 + components: + - type: Transform + pos: 65.5,22.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 8 + - 4 + - uid: 8599 + components: + - type: Transform + pos: 64.5,22.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 8 + - 4 + - uid: 8600 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 65.5,7.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 9 + - uid: 8601 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 68.5,3.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 9 + - uid: 8602 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 70.5,9.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 9 + - uid: 8603 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 70.5,10.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 9 + - uid: 8604 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 70.5,11.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 9 + - uid: 8605 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 55.5,36.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 10 + - 8464 + - 8466 + - 8467 + - uid: 8606 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 56.5,36.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 10 + - 8464 + - 8466 + - 8467 + - uid: 8607 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 57.5,36.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 10 + - 8464 + - 8466 + - 8467 + - uid: 8608 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 57.5,41.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 10 + - 8466 + - 8480 + - uid: 8609 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 56.5,41.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 10 + - 8466 + - 8480 + - uid: 8610 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 55.5,41.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 10 + - 8466 + - 8480 + - uid: 8611 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 59.5,39.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 10 + - 8466 + - uid: 8612 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 59.5,38.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 10 + - 8466 + - uid: 8613 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 48.5,46.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 11 + - 8478 + - uid: 8614 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 53.5,41.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 8480 + - uid: 8615 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 49.5,39.5 + parent: 2 + - uid: 8616 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 49.5,38.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 8466 + - 8478 + - uid: 8617 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.5,36.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 10 + - 8464 + - 8466 + - 8467 + - uid: 8618 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 51.5,36.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 10 + - 8464 + - 8466 + - 8467 + - uid: 8619 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 52.5,36.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 10 + - 8464 + - 8466 + - 8467 + - uid: 8620 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 45.5,36.5 + parent: 2 + - uid: 8621 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 49.5,38.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 11 + - uid: 8622 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 49.5,39.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 11 + - 8466 + - 8478 + - uid: 8623 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.5,41.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 10 + - 11 + - 8466 + - 8478 + - uid: 8624 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 47.5,49.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 11 + - 8478 + - uid: 8625 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 54.5,47.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 13 + - 8480 + - uid: 8626 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 56.5,49.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 13 + - uid: 8627 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 49.5,35.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 10 + - 8464 + - 8467 + - uid: 8628 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 49.5,34.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 10 + - 8464 + - 8467 + - uid: 8629 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 49.5,33.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 10 + - 8464 + - 8467 + - uid: 8630 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,35.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 8476 + - uid: 8631 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,34.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 8476 + - uid: 8632 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,33.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 8476 + - uid: 8633 + components: + - type: Transform + pos: 30.5,33.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 14 + - 77 + - 8495 + - uid: 8634 + components: + - type: Transform + pos: 33.5,22.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 14 + - 55 + - 8496 + - uid: 8635 + components: + - type: Transform + pos: 32.5,22.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 14 + - 55 + - 8496 + - uid: 8636 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,39.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 12 + - 8477 + - uid: 8637 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,38.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 12 + - 8477 + - uid: 8638 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 41.5,41.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 12 + - 8477 + - uid: 8639 + components: + - type: Transform + pos: 34.5,45.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 12 + - 8477 + - uid: 8640 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 60.5,45.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 10 + - 8481 + - uid: 8641 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 61.5,41.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 10 + - 8481 + - uid: 8642 + components: + - type: Transform + pos: 41.5,46.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 12 + - 8477 + - uid: 8643 + components: + - type: Transform + pos: 37.5,46.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 12 + - 8477 + - uid: 8644 + components: + - type: Transform + pos: 34.5,44.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 12 + - 8477 + - uid: 8645 + components: + - type: Transform + pos: 34.5,43.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 12 + - 8477 + - uid: 8646 + components: + - type: Transform + pos: 33.5,36.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 14 + - uid: 8647 + components: + - type: Transform + pos: 32.5,36.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 14 + - uid: 8648 + components: + - type: Transform + pos: 31.5,36.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 14 + - uid: 8649 + components: + - type: Transform + pos: 30.5,34.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 14 + - 77 + - 8495 + - uid: 8650 + components: + - type: Transform + pos: 30.5,35.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 14 + - 77 + - 8495 + - uid: 8651 + components: + - type: Transform + pos: 33.5,32.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 14 + - uid: 8652 + components: + - type: Transform + pos: 32.5,32.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 14 + - uid: 8653 + components: + - type: Transform + pos: 31.5,32.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 14 + - uid: 8654 + components: + - type: Transform + pos: 34.5,34.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 14 + - 8476 + - uid: 8655 + components: + - type: Transform + pos: 34.5,33.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 14 + - 8476 + - uid: 8656 + components: + - type: Transform + pos: 34.5,35.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 14 + - 8476 + - uid: 8657 + components: + - type: Transform + pos: 33.5,46.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 15 + - 8484 + - uid: 8658 + components: + - type: Transform + pos: 32.5,46.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 15 + - 8484 + - uid: 8659 + components: + - type: Transform + pos: 31.5,46.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 15 + - 8484 + - uid: 8660 + components: + - type: Transform + pos: 30.5,46.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 8484 + - 14 + - uid: 8661 + components: + - type: Transform + pos: 30.5,50.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 15 + - 8484 + - uid: 8662 + components: + - type: Transform + pos: 30.5,52.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 15 + - 8484 + - uid: 8663 + components: + - type: Transform + pos: 37.5,49.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 15 + - 8484 + - uid: 8664 + components: + - type: Transform + pos: 37.5,48.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 15 + - 8484 + - uid: 8665 + components: + - type: Transform + pos: 37.5,47.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 15 + - 8484 + - uid: 8666 + components: + - type: Transform + pos: 27.5,48.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 15 + - 8484 + - uid: 8667 + components: + - type: Transform + pos: 27.5,47.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 15 + - 8484 + - uid: 8668 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,50.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 78 + - uid: 8669 + components: + - type: Transform + pos: 31.5,22.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 14 + - 55 + - 8496 + - uid: 8670 + components: + - type: Transform + pos: 30.5,22.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 14 + - 55 + - 8496 + - uid: 8671 + components: + - type: Transform + pos: 18.5,49.5 + parent: 2 + - uid: 8672 + components: + - type: Transform + pos: 18.5,48.5 + parent: 2 + - uid: 8673 + components: + - type: Transform + pos: 18.5,47.5 + parent: 2 + - uid: 8674 + components: + - type: Transform + pos: 42.5,55.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 78 + - uid: 8675 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,20.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 55 + - 8496 + - uid: 8676 + components: + - type: Transform + pos: 35.5,50.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 8484 + - 15 + - uid: 8677 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 61.5,21.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 60 + - 8471 + - uid: 8678 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,49.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 22 + - uid: 8679 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,48.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 22 + - uid: 8680 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,47.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 22 + - uid: 8681 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,54.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 22 + - uid: 8682 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,54.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 22 + - uid: 8683 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,54.5 + parent: 2 + - uid: 8684 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,54.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 22 + - uid: 8685 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,49.5 + parent: 2 + - uid: 8686 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,49.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 22 + - 17 + - uid: 8687 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,48.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 22 + - 17 + - uid: 8688 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,47.5 + parent: 2 + - uid: 8689 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,47.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 22 + - 17 + - uid: 8690 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,44.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 22 + - 18 + - uid: 8691 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,44.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 22 + - 18 + - uid: 8692 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,44.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 22 + - 18 + - uid: 8693 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,52.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 16 + - uid: 8694 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,53.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 16 + - uid: 8695 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,50.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 16 + - uid: 8696 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,50.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 16 + - uid: 8697 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,52.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 16 + - 23 + - uid: 8698 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,53.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 16 + - 23 + - uid: 8699 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,58.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 16 + - 8515 + - uid: 8700 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,61.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 16 + - 8515 + - uid: 8701 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 16.5,64.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 16 + - 8515 + - uid: 8702 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,63.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 16 + - 8515 + - uid: 8703 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 23.5,50.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 23 + - 8516 + - uid: 8704 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,50.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 23 + - 8516 + - uid: 8705 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,56.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 23 + - 8516 + - uid: 8706 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 17.5,57.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 23 + - 8516 + - uid: 8707 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,58.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 23 + - 8516 + - uid: 8708 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,50.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 17 + - uid: 8709 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,50.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 17 + - uid: 8710 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,53.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 17 + - 25 + - 8509 + - uid: 8711 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,53.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 17 + - 25 + - 8509 + - uid: 8712 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,53.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 17 + - 25 + - 8509 + - uid: 8713 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,52.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 17 + - uid: 8714 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,51.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 17 + - uid: 8715 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,50.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 17 + - uid: 8716 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,50.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 17 + - uid: 8717 + components: + - type: Transform + pos: -0.5,57.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 24 + - 34 + - 8492 + - uid: 8718 + components: + - type: Transform + pos: 3.5,58.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 34 + - uid: 8719 + components: + - type: Transform + pos: -11.5,60.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 25 + - 8509 + - uid: 8720 + components: + - type: Transform + pos: -12.5,60.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 25 + - 8509 + - uid: 8721 + components: + - type: Transform + pos: -20.5,58.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 25 + - 30 + - 8509 + - uid: 8722 + components: + - type: Transform + pos: -20.5,57.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 25 + - 30 + - 8509 + - uid: 8723 + components: + - type: Transform + pos: -10.5,56.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 24 + - 25 + - 8509 + - 8492 + - uid: 8724 + components: + - type: Transform + pos: -10.5,55.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 24 + - 25 + - 8509 + - 8492 + - uid: 8725 + components: + - type: Transform + pos: -10.5,54.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 24 + - 25 + - 8509 + - 8492 + - uid: 8726 + components: + - type: Transform + pos: -18.5,56.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 25 + - 33 + - 8509 + - uid: 8727 + components: + - type: Transform + pos: -11.5,65.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 8514 + - uid: 8728 + components: + - type: Transform + pos: -8.5,67.5 + parent: 2 + - uid: 8729 + components: + - type: Transform + pos: -6.5,65.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 35 + - 8514 + - uid: 8730 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,64.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 26 + - uid: 8731 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,62.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 26 + - uid: 8732 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,64.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 26 + - 27 + - 8513 + - uid: 8733 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,65.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 8513 + - uid: 8734 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,65.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 8513 + - uid: 8735 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -17.5,65.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 8513 + - uid: 8736 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -17.5,59.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 27 + - 25 + - 8513 + - uid: 8737 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,59.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 27 + - 8513 + - uid: 8738 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,58.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 30 + - 29 + - 8510 + - uid: 8739 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,57.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 30 + - 29 + - 8510 + - uid: 8740 + components: + - type: Transform + pos: -23.5,59.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 30 + - 8512 + - uid: 8741 + components: + - type: Transform + pos: -23.5,65.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 30 + - 8512 + - uid: 8742 + components: + - type: Transform + pos: -23.5,56.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 30 + - 32 + - 8511 + - uid: 8743 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,59.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 28 + - 29 + - uid: 8744 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -32.5,59.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 28 + - 29 + - 8510 + - uid: 8745 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -32.5,62.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 28 + - 19588 + - 8512 + - uid: 8746 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,62.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 28 + - 19588 + - 8512 + - uid: 8747 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -35.5,62.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 28 + - uid: 8748 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,56.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 29 + - 8510 + - 8511 + - uid: 8749 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,61.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 35 + - uid: 8750 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,61.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 35 + - uid: 8751 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,61.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 35 + - uid: 8752 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,64.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 35 + - uid: 8753 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,65.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 35 + - uid: 8754 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,65.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 35 + - uid: 8755 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,65.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 35 + - uid: 8756 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,64.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 35 + - uid: 8757 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,62.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 35 + - uid: 8758 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,63.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 35 + - uid: 8759 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,69.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 35 + - 36 + - uid: 8760 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,69.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 35 + - 36 + - uid: 8761 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,69.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 35 + - 36 + - uid: 8762 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,67.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 35 + - uid: 8763 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,67.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 35 + - uid: 8764 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,68.5 + parent: 2 + - uid: 8765 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,66.5 + parent: 2 + - uid: 8766 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,65.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 35 + - uid: 8767 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,74.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 36 + - uid: 8768 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,43.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 18 + - 82 + - uid: 8769 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,33.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 18 + - 37 + - 8502 + - uid: 8770 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,24.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 18 + - 50 + - uid: 8771 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,24.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 18 + - 50 + - uid: 8772 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,24.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 18 + - 50 + - uid: 8773 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,32.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 37 + - 8502 + - uid: 8774 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,37.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 37 + - 38 + - 8502 + - uid: 8775 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,30.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 38 + - uid: 8776 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,27.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 38 + - 43 + - uid: 8777 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,32.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 38 + - uid: 8778 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,36.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 38 + - 8507 + - uid: 8779 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,42.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 49 + - 8507 + - 8508 + - uid: 8780 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,42.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 38 + - 49 + - 8508 + - uid: 8781 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,24.5 + parent: 2 + - uid: 8782 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,27.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 45 + - 8506 + - uid: 8785 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -31.5,22.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 44 + - 45 + - 8505 + - 8506 + - uid: 8786 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,18.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 44 + - 8504 + - 8505 + - uid: 8787 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,18.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 41 + - 44 + - 8504 + - uid: 8788 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,16.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 44 + - 8504 + - uid: 8789 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,20.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 44 + - 8504 + - uid: 8790 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,19.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 39 + - 41 + - 8503 + - 8504 + - uid: 8791 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,20.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 39 + - 8503 + - uid: 8792 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,26.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 38 + - 39 + - 8503 + - uid: 8793 + components: + - type: Transform + pos: 12.5,64.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 35 + - uid: 8794 + components: + - type: Transform + pos: 14.5,70.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 35 + - uid: 8795 + components: + - type: Transform + pos: 16.5,70.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 35 + - uid: 8796 + components: + - type: Transform + pos: -18.5,42.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 48 + - 8507 + - uid: 8797 + components: + - type: Transform + pos: 4.5,21.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 50 + - uid: 8798 + components: + - type: Transform + pos: 4.5,20.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 50 + - uid: 8799 + components: + - type: Transform + pos: 4.5,19.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 50 + - uid: 8800 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,14.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 50 + - uid: 8801 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -16.5,15.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 50 + - uid: 8802 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,9.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 50 + - 51 + - 8501 + - uid: 8803 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,18.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 20 + - uid: 8804 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,18.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 20 + - uid: 8805 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,18.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 20 + - uid: 8806 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,18.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 20 + - uid: 8807 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,16.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 20 + - 53 + - 8499 + - uid: 8808 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,16.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 53 + - 54 + - 8499 + - uid: 8809 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,11.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 21 + - 53 + - 8498 + - 8499 + - uid: 8810 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,10.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 21 + - 53 + - 8498 + - 8499 + - uid: 8811 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,8.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 21 + - 8498 + - uid: 8812 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,7.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 21 + - 8498 + - uid: 8813 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.5,9.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 21 + - uid: 8814 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 17.5,6.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 21 + - uid: 8815 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,6.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 53 + - 8499 + - 52 + - uid: 8816 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,7.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 53 + - 8499 + - 52 + - uid: 8817 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,8.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 51 + - 8501 + - uid: 8818 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,4.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 51 + - uid: 8819 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,9.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 8501 + - uid: 8820 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,12.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 8501 + - uid: 8821 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,12.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 80 + - 8499 + - uid: 8822 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 54.5,32.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 57 + - 8464 + - 8467 + - 8468 + - uid: 8823 + components: + - type: Transform + pos: 7.5,14.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 20 + - 21 + - 8498 + - uid: 8824 + components: + - type: Transform + pos: 11.5,14.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 20 + - 21 + - 8498 + - uid: 8825 + components: + - type: Transform + pos: -7.5,11.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 53 + - 8499 + - 8501 + - uid: 8826 + components: + - type: Transform + pos: -7.5,10.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 53 + - 8499 + - 8501 + - uid: 8827 + components: + - type: Transform + pos: -16.5,8.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 51 + - 8501 + - uid: 8828 + components: + - type: Transform + pos: 25.5,18.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 55 + - 56 + - 8496 + - 8497 + - uid: 8829 + components: + - type: Transform + pos: 23.5,18.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 55 + - 56 + - 8496 + - 8497 + - uid: 8830 + components: + - type: Transform + pos: 20.5,21.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 55 + - 8496 + - uid: 8831 + components: + - type: Transform + pos: 20.5,20.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 55 + - 8496 + - uid: 8832 + components: + - type: Transform + pos: 20.5,19.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 55 + - 8496 + - uid: 8833 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,8.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 56 + - 8497 + - uid: 8834 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,17.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 56 + - uid: 8835 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,14.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 56 + - 8497 + - uid: 8836 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 20.5,15.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 56 + - 8497 + - uid: 8837 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,17.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 56 + - 8497 + - uid: 8838 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 55.5,32.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 57 + - 8464 + - 8467 + - 8468 + - uid: 8839 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 56.5,32.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 57 + - 8464 + - 8467 + - 8468 + - uid: 8840 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 51.5,25.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 57 + - 58 + - 8468 + - 8469 + - 8470 + - uid: 8841 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 53.5,23.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 57 + - 8468 + - uid: 8842 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 55.5,23.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 60 + - 57 + - 8468 + - 8471 + - uid: 8843 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 49.5,22.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 61 + - 8470 + - uid: 8844 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 54.5,21.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 60 + - 8471 + - uid: 8845 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 49.5,30.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 58 + - 8469 + - 8470 + - uid: 8846 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 53.5,30.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 57 + - 8468 + - 8469 + - 8470 + - uid: 8847 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 48.5,23.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 61 + - 58 + - 8469 + - 8470 + - uid: 8848 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 47.5,23.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 61 + - 58 + - 8469 + - 8470 + - uid: 8849 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,14.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 65 + - 61 + - 8470 + - 8472 + - uid: 8850 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,16.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 8470 + - uid: 8851 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,18.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 61 + - uid: 8852 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 50.5,17.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 61 + - 63 + - 8470 + - uid: 8853 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,6.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 65 + - 66 + - 8472 + - 8474 + - uid: 8854 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,2.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 66 + - 8474 + - uid: 8855 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,4.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 66 + - 8474 + - uid: 8856 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,6.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 66 + - uid: 8857 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,2.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 66 + - 64 + - 8474 + - uid: 8858 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 49.5,8.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 62 + - 8475 + - uid: 8859 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 49.5,12.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 61 + - 62 + - 8470 + - 8475 + - uid: 8860 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 47.5,10.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 62 + - 8475 + - uid: 8861 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 51.5,10.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 62 + - 8475 + - uid: 8862 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 44.5,15.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 61 + - 8470 + - uid: 8863 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,10.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 65 + - 8472 + - uid: 8864 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,-0.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 64 + - 8474 + - uid: 8865 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 43.5,6.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 66 + - uid: 8866 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,6.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 66 + - uid: 8867 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 34.5,10.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 65 + - 8472 + - uid: 8868 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,18.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 61 + - uid: 8869 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 43.5,22.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 61 + - uid: 8870 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 39.5,23.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 61 + - uid: 8871 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 62.5,19.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 60 + - 8471 + - uid: 8872 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 63.5,18.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 8 + - uid: 8873 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 62.5,27.5 + parent: 2 + - uid: 8874 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 63.5,30.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 8464 + - 8467 + - uid: 8875 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 57.5,30.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 57 + - 8467 + - 8468 + - uid: 8876 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,46.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 68 + - uid: 8877 + components: + - type: Transform + pos: 11.5,46.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 70 + - uid: 8878 + components: + - type: Transform + pos: 12.5,46.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 70 + - uid: 8879 + components: + - type: Transform + pos: 13.5,46.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 70 + - uid: 8880 + components: + - type: Transform + pos: 14.5,44.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 70 + - uid: 8881 + components: + - type: Transform + pos: 13.5,42.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 70 + - 69 + - 8493 + - uid: 8882 + components: + - type: Transform + pos: 15.5,41.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 70 + - 69 + - 8493 + - uid: 8883 + components: + - type: Transform + pos: 13.5,36.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 69 + - 8493 + - 8494 + - uid: 8884 + components: + - type: Transform + pos: 18.5,36.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 71 + - uid: 8885 + components: + - type: Transform + pos: 20.5,33.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 67 + - 8494 + - uid: 8886 + components: + - type: Transform + pos: 20.5,32.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 67 + - 77 + - 8494 + - uid: 8887 + components: + - type: Transform + pos: 24.5,33.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 77 + - 8495 + - uid: 8888 + components: + - type: Transform + pos: 24.5,32.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 77 + - 8495 + - uid: 8889 + components: + - type: Transform + pos: 24.5,36.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 77 + - 8495 + - uid: 8890 + components: + - type: Transform + pos: 16.5,34.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 67 + - 8494 + - uid: 8891 + components: + - type: Transform + pos: 16.5,35.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 67 + - 8494 + - uid: 8892 + components: + - type: Transform + pos: 13.5,31.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 67 + - 8494 + - uid: 8893 + components: + - type: Transform + pos: 13.5,29.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 76 + - 8494 + - uid: 8894 + components: + - type: Transform + pos: 13.5,30.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 67 + - 8494 + - uid: 8895 + components: + - type: Transform + pos: 12.5,29.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 76 + - 8494 + - uid: 8896 + components: + - type: Transform + pos: 16.5,23.5 + parent: 2 + - uid: 8897 + components: + - type: Transform + pos: 18.5,23.5 + parent: 2 + - uid: 8898 + components: + - type: Transform + pos: 19.5,25.5 + parent: 2 + - uid: 8899 + components: + - type: Transform + pos: 15.5,25.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 76 + - uid: 8900 + components: + - type: Transform + pos: 26.5,22.5 + parent: 2 + - uid: 8901 + components: + - type: Transform + pos: 24.5,25.5 + parent: 2 + - uid: 8902 + components: + - type: Transform + pos: 23.5,42.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 77 + - uid: 8903 + components: + - type: Transform + pos: 25.5,44.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 72 + - uid: 8904 + components: + - type: Transform + pos: 8.5,30.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 76 + - uid: 8905 + components: + - type: Transform + pos: 18.5,27.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 8494 + - uid: 8906 + components: + - type: Transform + pos: 17.5,27.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 8494 + - uid: 8907 + components: + - type: Transform + pos: 16.5,27.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 8494 + - uid: 8908 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,36.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 68 + - 8494 + - uid: 8909 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,42.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 68 + - uid: 8910 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,46.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 68 + - uid: 8911 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,44.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 72 + - uid: 8912 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 44.5,49.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 78 + - uid: 8913 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,56.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 78 + - uid: 8914 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 53.5,55.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 78 + - uid: 8915 + components: + - type: Transform + pos: 56.5,55.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 78 + - 3 + - 8458 + - uid: 8916 + components: + - type: Transform + pos: 54.5,57.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 78 + - 3 + - 8458 + - uid: 8917 + components: + - type: Transform + pos: 54.5,58.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 78 + - 3 + - 8458 + - uid: 8918 + components: + - type: Transform + pos: 77.5,53.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 3 + - uid: 8919 + components: + - type: Transform + pos: 75.5,51.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 3 + - uid: 8920 + components: + - type: Transform + pos: 72.5,51.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 3 + - uid: 8921 + components: + - type: Transform + pos: 76.5,47.5 + parent: 2 + - uid: 8922 + components: + - type: Transform + pos: 72.5,54.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 3 + - 8457 + - uid: 8923 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 57.5,51.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 4 + - uid: 8924 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 63.5,47.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 4 + - uid: 8925 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 59.5,37.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 8466 + - 10 + - 8481 + - uid: 8926 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,11.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 8505 + - uid: 8927 + components: + - type: Transform + pos: 35.5,52.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 8484 + - 15 + - uid: 8928 + components: + - type: Transform + pos: -1.5,30.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 37 + - 80 + - uid: 8929 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,16.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 80 + - uid: 8930 + components: + - type: Transform + pos: 6.5,32.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 8494 + - 67 + - uid: 8931 + components: + - type: Transform + pos: 6.5,33.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 8494 + - 67 + - uid: 8932 + components: + - type: Transform + pos: -15.5,-2.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 51 + - 8501 + - uid: 8933 + components: + - type: Transform + pos: -16.5,-2.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 51 + - 8501 + - uid: 8934 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,44.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 82 + - uid: 8935 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,42.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 46 + - uid: 20129 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,-39.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 20128 + - uid: 20130 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,-37.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 20121 + - 20125 + - 20128 + - uid: 20131 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 33.5,-37.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 20125 + - 20128 + - 20123 + - uid: 20132 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,-34.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 20125 + - 20128 + - 20124 + - 20127 + - uid: 20133 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 33.5,-32.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 20124 + - 20127 + - 20123 + - uid: 20134 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,-32.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 20149 + - 20124 + - 20127 + - uid: 20136 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,-23.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 20122 + - 20126 + - uid: 20137 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,-26.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 20124 + - 20127 + - 20122 + - 20126 + - uid: 20257 + components: + - type: Transform + pos: 33.5,-28.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 20127 + - 20124 + - 45 + - 8506 +- proto: FitnessPunchingBagWizard + entities: + - uid: 19496 + components: + - type: Transform + pos: -27.5,66.5 + parent: 2 +- proto: Flash + entities: + - uid: 8942 + components: + - type: Transform + pos: -4.600379,15.522152 + parent: 2 + - uid: 8943 + components: + - type: Transform + pos: -5.0364122,45.794884 + parent: 2 + - uid: 8944 + components: + - type: Transform + pos: -4.8539248,45.68266 + parent: 2 + - uid: 8945 + components: + - type: Transform + pos: -4.427536,29.557364 + parent: 2 + - uid: 8946 + components: + - type: Transform + pos: -25.531055,61.412098 + parent: 2 + - uid: 8947 + components: + - type: Transform + pos: 46.781506,14.452742 + parent: 2 + - uid: 8948 + components: + - type: Transform + pos: 70.56277,13.657604 + parent: 2 + - uid: 8949 + components: + - type: Transform + pos: 3.3651924,27.537037 + parent: 2 + - uid: 19792 + components: + - type: Transform + pos: 34.32055,-38.302715 + parent: 2 + - uid: 19793 + components: + - type: Transform + pos: 34.500034,-38.46401 + parent: 2 + - uid: 19794 + components: + - type: Transform + pos: 34.374393,-38.571533 + parent: 2 +- proto: FlashlightLantern + entities: + - uid: 8950 + components: + - type: Transform + pos: -11.528659,34.74632 + parent: 2 + - uid: 8951 + components: + - type: Transform + pos: -11.374247,34.634094 + parent: 2 + - uid: 8952 + components: + - type: Transform + pos: -11.500584,34.563953 + parent: 2 + - uid: 8953 + components: + - type: Transform + pos: -11.654996,34.64812 + parent: 2 + - uid: 8954 + components: + - type: Transform + pos: -4.7837367,45.41613 + parent: 2 + - uid: 8955 + components: + - type: Transform + pos: -4.559137,45.62655 + parent: 2 + - uid: 8956 + components: + - type: Transform + pos: 78.50072,42.681328 + parent: 2 +- proto: FlashlightSeclite + entities: + - uid: 8957 + components: + - type: Transform + pos: 70.56277,13.567997 + parent: 2 +- proto: FloorDrain + entities: + - uid: 8958 + components: + - type: Transform + pos: 59.5,16.5 + parent: 2 + - type: Fixtures + fixtures: {} + - uid: 8959 + components: + - type: Transform + pos: 51.5,30.5 + parent: 2 + - type: Fixtures + fixtures: {} + - uid: 8960 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,54.5 + parent: 2 + - type: Fixtures + fixtures: {} + - uid: 8961 + components: + - type: Transform + pos: 54.5,49.5 + parent: 2 + - type: Fixtures + fixtures: {} + - uid: 8962 + components: + - type: Transform + pos: 12.5,26.5 + parent: 2 + - type: Fixtures + fixtures: {} + - uid: 14759 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 74.5,24.5 + parent: 2 + - type: Fixtures + fixtures: {} + - uid: 19371 + components: + - type: Transform + pos: 20.5,23.5 + parent: 2 + - type: Fixtures + fixtures: {} +- proto: FloorTileItemCarpetClown + entities: + - uid: 762 + components: + - type: Transform + parent: 742 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 763 + components: + - type: Transform + parent: 742 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 764 + components: + - type: Transform + parent: 742 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 765 + components: + - type: Transform + parent: 742 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 766 + components: + - type: Transform + parent: 742 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: FloorTileItemMime + entities: + - uid: 790 + components: + - type: Transform + parent: 772 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 791 + components: + - type: Transform + parent: 772 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 792 + components: + - type: Transform + parent: 772 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 793 + components: + - type: Transform + parent: 772 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 794 + components: + - type: Transform + parent: 772 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: FloorWaterEntity + entities: + - uid: 8963 + components: + - type: Transform + pos: 2.5,72.5 + parent: 2 + - uid: 8964 + components: + - type: Transform + pos: 0.5,74.5 + parent: 2 + - uid: 8965 + components: + - type: Transform + pos: -0.5,72.5 + parent: 2 + - uid: 8966 + components: + - type: Transform + pos: 2.5,73.5 + parent: 2 + - uid: 8967 + components: + - type: Transform + pos: -0.5,73.5 + parent: 2 + - uid: 8968 + components: + - type: Transform + pos: 0.5,72.5 + parent: 2 + - uid: 8969 + components: + - type: Transform + pos: 0.5,73.5 + parent: 2 + - uid: 8970 + components: + - type: Transform + pos: 1.5,72.5 + parent: 2 + - uid: 8971 + components: + - type: Transform + pos: 1.5,73.5 + parent: 2 + - uid: 8972 + components: + - type: Transform + pos: 1.5,74.5 + parent: 2 + - uid: 8973 + components: + - type: Transform + pos: 1.5,71.5 + parent: 2 + - uid: 8974 + components: + - type: Transform + pos: 0.5,71.5 + parent: 2 + - uid: 8975 + components: + - type: Transform + pos: 29.5,38.5 + parent: 2 +- proto: FloraTree02 + entities: + - uid: 19601 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,72.5 + parent: 2 +- proto: FloraTreeLarge02 + entities: + - uid: 8976 + components: + - type: Transform + pos: 5.502884,76.42747 + parent: 2 + - uid: 19600 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,71.5 + parent: 2 +- proto: FolderSpawner + entities: + - uid: 8977 + components: + - type: Transform + pos: 53.713814,14.749241 + parent: 2 + - uid: 8978 + components: + - type: Transform + pos: 17.649437,59.56088 + parent: 2 + - uid: 8979 + components: + - type: Transform + pos: 17.452913,59.673103 + parent: 2 + - uid: 8980 + components: + - type: Transform + pos: 22.40718,23.68603 + parent: 2 + - uid: 8981 + components: + - type: Transform + pos: 22.379105,23.61589 + parent: 2 + - uid: 8982 + components: + - type: Transform + pos: 76.674515,37.92216 + parent: 2 + - uid: 8983 + components: + - type: Transform + pos: 76.43588,37.86605 + parent: 2 + - uid: 8984 + components: + - type: Transform + pos: 83.359695,24.396538 + parent: 2 +- proto: FoodAmbrosiaVulgaris + entities: + - uid: 8986 + components: + - type: Transform + pos: 46.18796,45.641068 + parent: 2 + - uid: 8987 + components: + - type: Transform + pos: 46.3143,45.493774 + parent: 2 + - uid: 8988 + components: + - type: Transform + pos: 46.20902,45.53586 + parent: 2 +- proto: FoodBanana + entities: + - uid: 8989 + components: + - type: Transform + pos: 40.776543,43.40036 + parent: 2 + - uid: 8990 + components: + - type: Transform + pos: 40.776543,43.40036 + parent: 2 + - uid: 8991 + components: + - type: Transform + pos: 40.776543,43.40036 + parent: 2 + - uid: 8992 + components: + - type: Transform + pos: 27.737072,24.792421 + parent: 2 + - uid: 8993 + components: + - type: Transform + pos: 28.558273,39.352062 + parent: 2 +- proto: FoodBreadPlain + entities: + - uid: 18771 + components: + - type: Transform + pos: 10.475987,56.739117 + parent: 2 +- proto: FoodBurgerBaseball + entities: + - uid: 8994 + components: + - type: Transform + pos: 23.550648,12.255281 + parent: 2 +- proto: FoodBurgerClown + entities: + - uid: 8995 + components: + - type: Transform + pos: 40.25592,43.60828 + parent: 2 +- proto: FoodBurgerMcrib + entities: + - uid: 19500 + components: + - type: Transform + pos: -30.47999,68.71875 + parent: 2 + - uid: 19501 + components: + - type: Transform + pos: -30.385054,68.58584 + parent: 2 +- proto: FoodBurgerMime + entities: + - uid: 8996 + components: + - type: Transform + pos: 40.201824,45.807728 + parent: 2 +- proto: FoodCondimentPacketBbq + entities: + - uid: 19502 + components: + - type: Transform + pos: -30.743881,68.58292 + parent: 2 +- proto: FoodFrozenSnowconeTrash + entities: + - uid: 8997 + components: + - type: Transform + pos: 27.535769,29.632755 + parent: 2 +- proto: FoodPieBananaCream + entities: + - uid: 8998 + components: + - type: Transform + pos: 40.686874,43.88423 + parent: 2 + - uid: 8999 + components: + - type: Transform + pos: 40.686874,43.88423 + parent: 2 + - uid: 9000 + components: + - type: Transform + pos: 40.686874,43.88423 + parent: 2 +- proto: FoodPoppy + entities: + - uid: 4411 + components: + - type: Transform + pos: 80.37502,50.538662 + parent: 2 +- proto: FoodSnackCnDs + entities: + - uid: 19503 + components: + - type: Transform + pos: -30.629957,67.80443 + parent: 2 +- proto: FoodTartMime + entities: + - uid: 795 + components: + - type: Transform + parent: 772 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 9001 + components: + - type: Transform + pos: 40.44046,45.443 + parent: 2 +- proto: FoodTartMimeSlice + entities: + - uid: 9002 + components: + - type: Transform + pos: 40.538723,45.569252 + parent: 2 +- proto: FoodTinPeachesMaint + entities: + - uid: 9003 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 68.868546,49.227726 + parent: 2 + - uid: 9004 + components: + - type: Transform + pos: 68.33054,49.460705 + parent: 2 +- proto: GasAnalyzer + entities: + - uid: 9005 + components: + - type: Transform + pos: 36.983482,7.5447493 + parent: 2 +- proto: GasCanisterBrokenBase + entities: + - uid: 9006 + components: + - type: Transform + pos: 73.5,47.5 + parent: 2 +- proto: GasFilter + entities: + - uid: 9010 + components: + - type: Transform + pos: -25.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 9011 + components: + - type: Transform + pos: -25.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 9241 + components: + - type: Transform + pos: -25.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 10167 + components: + - type: Transform + pos: -25.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' +- proto: GasFilterFlipped + entities: + - uid: 9007 + components: + - type: Transform + pos: -14.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 9012 + components: + - type: Transform + pos: 9.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9013 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -29.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9014 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9015 + components: + - type: Transform + pos: -34.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9016 + components: + - type: Transform + pos: -34.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9017 + components: + - type: Transform + pos: -34.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9018 + components: + - type: Transform + pos: -34.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9019 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' +- proto: GasMinerAmmonia + entities: + - uid: 9020 + components: + - type: Transform + pos: -32.5,1.5 + parent: 2 +- proto: GasMinerCarbonDioxide + entities: + - uid: 9021 + components: + - type: Transform + pos: -39.5,8.5 + parent: 2 +- proto: GasMinerNitrogenStation + entities: + - uid: 9022 + components: + - type: Transform + pos: -39.5,12.5 + parent: 2 +- proto: GasMinerOxygenStation + entities: + - uid: 9023 + components: + - type: Transform + pos: -39.5,16.5 + parent: 2 +- proto: GasMixerFlipped + entities: + - uid: 9024 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,19.5 + parent: 2 + - type: GasMixer + inletTwoConcentration: 0.78 + inletOneConcentration: 0.22 + - type: AtmosPipeColor + color: '#EAC300FF' +- proto: GasOutletInjector + entities: + - uid: 9025 + components: + - type: Transform + pos: -28.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9026 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -37.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 9027 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -37.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9028 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -37.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9029 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -37.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9030 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,3.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9031 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,3.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9032 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -37.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9033 + components: + - type: Transform + pos: -28.5,23.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 9034 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -25.5,5.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9035 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -38.5,25.5 + parent: 2 + - uid: 9036 + components: + - type: Transform + pos: -33.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9037 + components: + - type: Transform + pos: -33.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19310 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 51.5,-7.5 + parent: 2 + - uid: 19800 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,-36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' +- proto: GasPassiveVent + entities: + - uid: 9038 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -27.5,3.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 9039 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -37.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 9040 + components: + - type: Transform + pos: -20.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 9041 + components: + - type: Transform + pos: -18.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 9042 + components: + - type: Transform + pos: -19.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 9043 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -37.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 9044 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -37.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 9045 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -31.5,3.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 9046 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -37.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 9047 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,11.5 + parent: 2 + - uid: 9048 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,9.5 + parent: 2 + - uid: 9049 + components: + - type: Transform + pos: -26.5,23.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11501 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 11502 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 11539 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' +- proto: GasPipeBend + entities: + - uid: 9008 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9050 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,12.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9052 + components: + - type: Transform + pos: -14.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 9053 + components: + - type: Transform + pos: -23.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9055 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9057 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 9058 + components: + - type: Transform + pos: -17.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 9060 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 9061 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9062 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 9063 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9064 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -25.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9065 + components: + - type: Transform + pos: -15.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9066 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -17.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9067 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9068 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9069 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9070 + components: + - type: Transform + pos: -8.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9071 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9072 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,12.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9073 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9074 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9075 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9076 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9077 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9078 + components: + - type: Transform + pos: -5.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9079 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9080 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,61.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9081 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,61.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9082 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9083 + components: + - type: Transform + pos: 7.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9084 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9085 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9086 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9087 + components: + - type: Transform + pos: 23.5,52.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9088 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 16.5,52.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9089 + components: + - type: Transform + pos: 42.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9090 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9091 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 62.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9092 + components: + - type: Transform + pos: 56.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9093 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 50.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9094 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 56.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9095 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 45.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9096 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 40.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9097 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 36.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9098 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,4.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9099 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 69.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9100 + components: + - type: Transform + pos: 72.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9101 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -18.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9102 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9103 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9104 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9105 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9106 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9107 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9108 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9109 + components: + - type: Transform + pos: -3.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9110 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9111 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,55.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9112 + components: + - type: Transform + pos: 0.5,55.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9113 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9114 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 13.5,62.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9115 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9116 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 23.5,24.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9117 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9118 + components: + - type: Transform + pos: 27.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9119 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9121 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9122 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9123 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9124 + components: + - type: Transform + pos: 24.5,54.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9125 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 18.5,54.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9126 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 49.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9127 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 46.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9128 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 49.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9129 + components: + - type: Transform + pos: 50.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9130 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9131 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9132 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,3.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9133 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,-0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9134 + components: + - type: Transform + pos: 76.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9135 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 76.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9136 + components: + - type: Transform + pos: 82.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9137 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 70.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9138 + components: + - type: Transform + pos: 71.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9139 + components: + - type: Transform + pos: 74.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9140 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 12.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9141 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9142 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9143 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9144 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -17.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 9145 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 9146 + components: + - type: Transform + pos: 13.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9147 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9148 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 14.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9149 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 9150 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,34.5 + parent: 2 + - uid: 9151 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9152 + components: + - type: Transform + pos: -10.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9153 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,-1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9154 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,-0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9155 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,-0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9156 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,-0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9157 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,-1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9158 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9159 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9160 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,5.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9161 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -28.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9162 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,6.5 + parent: 2 + - uid: 9163 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9164 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -28.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 9165 + components: + - type: Transform + pos: -31.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 9166 + components: + - type: Transform + pos: -31.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 9167 + components: + - type: Transform + pos: -27.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 9168 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,11.5 + parent: 2 + - uid: 9169 + components: + - type: Transform + pos: -28.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 9170 + components: + - type: Transform + pos: -27.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 9171 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 9172 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -29.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 9173 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 9174 + components: + - type: Transform + pos: -24.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 9175 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.5,12.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9176 + components: + - type: Transform + pos: -30.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 9226 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -25.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 9265 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9316 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9319 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9320 + components: + - type: Transform + pos: -2.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9321 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9905 + components: + - type: Transform + pos: 52.5,5.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9907 + components: + - type: Transform + pos: 49.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9908 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 48.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10787 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 51.5,6.5 + parent: 2 + - uid: 10789 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 54.5,7.5 + parent: 2 + - uid: 11110 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -25.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 11159 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -17.5,26.5 + parent: 2 + - uid: 11163 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,26.5 + parent: 2 + - uid: 11286 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,-0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11414 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 50.5,5.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12070 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,66.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 17187 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 17191 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -38.5,39.5 + parent: 2 + - uid: 17199 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,38.5 + parent: 2 + - uid: 17206 + components: + - type: Transform + pos: -25.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 18480 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 28.5,-44.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 18481 + components: + - type: Transform + pos: 32.5,-44.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 18487 + components: + - type: Transform + pos: 29.5,-47.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 18489 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,-47.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 18491 + components: + - type: Transform + pos: 35.5,-32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 18596 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,-37.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 18634 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19292 + components: + - type: Transform + pos: 54.5,-2.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19295 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 53.5,-3.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19297 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 52.5,-3.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19298 + components: + - type: Transform + pos: 50.5,-3.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19311 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 54.5,-3.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19384 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,67.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19385 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,67.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19619 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 19620 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 19657 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,-27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19673 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-37.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19679 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,-38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19698 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 35.5,-35.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' +- proto: GasPipeFourway + entities: + - uid: 9183 + components: + - type: Transform + pos: -15.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9184 + components: + - type: Transform + pos: 7.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9185 + components: + - type: Transform + pos: -3.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9186 + components: + - type: Transform + pos: -12.5,51.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9187 + components: + - type: Transform + pos: -12.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9188 + components: + - type: Transform + pos: -22.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9189 + components: + - type: Transform + pos: -31.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9190 + components: + - type: Transform + pos: 4.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9191 + components: + - type: Transform + pos: 4.5,66.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9192 + components: + - type: Transform + pos: 12.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9193 + components: + - type: Transform + pos: 56.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9194 + components: + - type: Transform + pos: 56.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9195 + components: + - type: Transform + pos: 56.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9196 + components: + - type: Transform + pos: 48.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9197 + components: + - type: Transform + pos: 64.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9198 + components: + - type: Transform + pos: -13.5,52.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9199 + components: + - type: Transform + pos: -13.5,56.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9200 + components: + - type: Transform + pos: -24.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9201 + components: + - type: Transform + pos: 6.5,68.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9202 + components: + - type: Transform + pos: 11.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9203 + components: + - type: Transform + pos: 23.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9204 + components: + - type: Transform + pos: 33.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9205 + components: + - type: Transform + pos: 31.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9206 + components: + - type: Transform + pos: 47.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9207 + components: + - type: Transform + pos: 54.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9208 + components: + - type: Transform + pos: 66.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11160 + components: + - type: Transform + pos: -18.5,26.5 + parent: 2 + - uid: 11162 + components: + - type: Transform + pos: -19.5,26.5 + parent: 2 + - uid: 18507 + components: + - type: Transform + pos: 30.5,-29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19319 + components: + - type: Transform + pos: 53.5,-1.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19320 + components: + - type: Transform + pos: 53.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19325 + components: + - type: Transform + pos: 49.5,2.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19326 + components: + - type: Transform + pos: 49.5,-0.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19656 + components: + - type: Transform + pos: 31.5,-27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19668 + components: + - type: Transform + pos: 31.5,-36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' +- proto: GasPipeStraight + entities: + - uid: 714 + components: + - type: Transform + pos: -33.5,66.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 715 + components: + - type: Transform + pos: -31.5,62.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 3754 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 6695 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,-27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 6778 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 6785 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 6786 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -19.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 7240 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,67.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 8936 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 8937 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 9051 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 9054 + components: + - type: Transform + pos: -25.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 9209 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9210 + components: + - type: Transform + pos: -26.5,17.5 + parent: 2 + - uid: 9211 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9212 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9213 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9214 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9215 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9216 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9217 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9218 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9219 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9220 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9221 + components: + - type: Transform + pos: 66.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9223 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 9225 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 9227 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 9228 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 9229 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 9230 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 9231 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 9232 + components: + - type: Transform + pos: -14.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 9233 + components: + - type: Transform + pos: -14.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 9234 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9235 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9236 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -25.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9237 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -25.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9238 + components: + - type: Transform + pos: -13.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9239 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 9242 + components: + - type: Transform + pos: -13.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9243 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9244 + components: + - type: Transform + pos: -28.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9245 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -25.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 9246 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -25.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 9250 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 9251 + components: + - type: Transform + pos: -17.5,27.5 + parent: 2 + - uid: 9252 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9253 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9254 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9255 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -17.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 9256 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,27.5 + parent: 2 + - uid: 9257 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 9258 + components: + - type: Transform + pos: -13.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9259 + components: + - type: Transform + pos: -13.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9260 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9261 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9262 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9263 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -19.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9264 + components: + - type: Transform + pos: -13.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9266 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9267 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9268 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9269 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9270 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 9271 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 9272 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 9273 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9274 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9275 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,5.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9276 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,4.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9277 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -31.5,5.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 9278 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -31.5,4.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 9279 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,5.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9280 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,4.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9281 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -27.5,5.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 9282 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -27.5,4.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 9283 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9284 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9285 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 9286 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 9287 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9288 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 9289 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 9290 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 9291 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 9292 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 9293 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 9294 + components: + - type: Transform + pos: -28.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 9295 + components: + - type: Transform + pos: -28.5,22.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 9296 + components: + - type: Transform + pos: -26.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 9297 + components: + - type: Transform + pos: -26.5,22.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 9298 + components: + - type: Transform + pos: -2.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9300 + components: + - type: Transform + pos: -2.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9301 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,12.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9302 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9303 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9304 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -18.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9306 + components: + - type: Transform + pos: -17.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9307 + components: + - type: Transform + pos: -17.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9308 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9309 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9310 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9311 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9312 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9313 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9314 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9317 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9318 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9322 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9323 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9324 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9325 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9326 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9327 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9328 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,22.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9329 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,23.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9330 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9331 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9332 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9333 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9334 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9335 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9336 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9337 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9338 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9339 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9340 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9341 + components: + - type: Transform + pos: -5.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9342 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9343 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9344 + components: + - type: Transform + pos: -8.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9345 + components: + - type: Transform + pos: -8.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9346 + components: + - type: Transform + pos: -8.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9347 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9348 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9349 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9350 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9351 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9352 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9353 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9354 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9355 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9356 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9357 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9358 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9359 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9360 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9361 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9363 + components: + - type: Transform + pos: -18.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9364 + components: + - type: Transform + pos: -18.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9365 + components: + - type: Transform + pos: -13.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9366 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9367 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9368 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9369 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9370 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9371 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9372 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9373 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9374 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9375 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 13.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9376 + components: + - type: Transform + pos: 7.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9377 + components: + - type: Transform + pos: 7.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9378 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9379 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9380 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9381 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9382 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9383 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9384 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9385 + components: + - type: Transform + pos: 3.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9386 + components: + - type: Transform + pos: 3.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9387 + components: + - type: Transform + pos: 3.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9388 + components: + - type: Transform + pos: 3.5,12.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9389 + components: + - type: Transform + pos: 3.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9390 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9391 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9392 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9393 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9394 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9395 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9396 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9397 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9398 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9399 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9400 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9401 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9402 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9403 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9404 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9405 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9406 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9407 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9408 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9409 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9410 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9411 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9412 + components: + - type: Transform + pos: -10.5,12.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9413 + components: + - type: Transform + pos: -10.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9414 + components: + - type: Transform + pos: -10.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9415 + components: + - type: Transform + pos: -10.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9416 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9417 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9418 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,5.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9419 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9420 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,4.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9421 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9422 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9423 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9424 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9425 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9426 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9427 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9428 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9429 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9430 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9431 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9432 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9433 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9434 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9435 + components: + - type: Transform + pos: -0.5,46.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9436 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9437 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9438 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9439 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9440 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9441 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9442 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9443 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9444 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9445 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9446 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9447 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9448 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,50.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9449 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,51.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9450 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,52.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9451 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,53.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9452 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,54.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9453 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,54.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9454 + components: + - type: Transform + pos: -9.5,53.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9455 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,54.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9456 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,54.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9457 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,54.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9458 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,54.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9459 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,54.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9460 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,53.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9461 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,53.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9462 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9463 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9464 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,56.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9465 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,55.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9466 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,55.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9467 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,56.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9468 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9469 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9470 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9471 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9472 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9473 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9474 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9475 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,55.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9476 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,56.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9477 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9478 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9479 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9480 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -17.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9481 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9482 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9483 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9484 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9485 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9486 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -25.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9487 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -28.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9488 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9489 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9490 + components: + - type: Transform + pos: -15.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9491 + components: + - type: Transform + pos: -15.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9492 + components: + - type: Transform + pos: -15.5,60.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9493 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,62.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9494 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,63.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9495 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,64.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9496 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,65.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9497 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,66.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9498 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,67.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9499 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,68.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9500 + components: + - type: Transform + pos: -18.5,56.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9501 + components: + - type: Transform + pos: -18.5,55.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9502 + components: + - type: Transform + pos: -18.5,54.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9503 + components: + - type: Transform + pos: -18.5,53.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9504 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,56.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9505 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,55.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9506 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,54.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9507 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,53.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9508 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9509 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9510 + components: + - type: Transform + pos: -22.5,61.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9511 + components: + - type: Transform + pos: -22.5,62.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9512 + components: + - type: Transform + pos: -22.5,63.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9513 + components: + - type: Transform + pos: -22.5,64.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9514 + components: + - type: Transform + pos: -22.5,65.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9515 + components: + - type: Transform + pos: -22.5,66.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9516 + components: + - type: Transform + pos: -22.5,67.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9517 + components: + - type: Transform + pos: -22.5,68.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9518 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,56.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9519 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,55.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9520 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,54.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9521 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,53.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9522 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,52.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9523 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,51.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9524 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -27.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9525 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -27.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9526 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -27.5,60.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9527 + components: + - type: Transform + pos: -27.5,62.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9528 + components: + - type: Transform + pos: -27.5,63.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9529 + components: + - type: Transform + pos: -27.5,64.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9530 + components: + - type: Transform + pos: -27.5,65.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9531 + components: + - type: Transform + pos: -27.5,66.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9533 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9534 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9535 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9536 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9537 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9538 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -37.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9539 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -31.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9540 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -31.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9541 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -31.5,60.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9542 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9543 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9544 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,60.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9545 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,61.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9546 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,63.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9547 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,64.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9548 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,65.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9549 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,66.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9550 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,66.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9552 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,66.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9553 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,65.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9554 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,64.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9555 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,64.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9556 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,64.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9557 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,64.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9558 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,64.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9559 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,64.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9560 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,64.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9561 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,64.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9562 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,64.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9563 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,64.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9564 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,64.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9565 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9566 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9567 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9568 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9569 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9570 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9571 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,50.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9572 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,51.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9573 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,52.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9574 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,54.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9575 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,55.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9576 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,56.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9577 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9578 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9579 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,60.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9580 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,61.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9581 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,62.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9582 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,63.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9583 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,65.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9584 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,66.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9585 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,66.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9586 + components: + - type: Transform + pos: 4.5,67.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9587 + components: + - type: Transform + pos: 4.5,68.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9588 + components: + - type: Transform + pos: 4.5,69.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9589 + components: + - type: Transform + pos: 4.5,70.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9590 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,66.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9591 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,66.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9592 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,66.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9593 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,66.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9594 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,66.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9595 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,66.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9596 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,53.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9597 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,53.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9598 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,53.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9599 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,53.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9600 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9601 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9602 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9603 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,56.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9604 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,55.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9605 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,54.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9606 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,61.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9607 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,61.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9608 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,61.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9609 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 13.5,61.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9610 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,61.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9611 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,61.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9612 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 16.5,61.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9613 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,61.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9614 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9615 + components: + - type: Transform + pos: 6.5,46.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9616 + components: + - type: Transform + pos: 6.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9617 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9618 + components: + - type: Transform + pos: 6.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9619 + components: + - type: Transform + pos: 6.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9620 + components: + - type: Transform + pos: 6.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9621 + components: + - type: Transform + pos: 6.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9622 + components: + - type: Transform + pos: 7.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9623 + components: + - type: Transform + pos: 7.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9624 + components: + - type: Transform + pos: 7.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9625 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9626 + components: + - type: Transform + pos: 7.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9627 + components: + - type: Transform + pos: 7.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9628 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9629 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9630 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9631 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9632 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9633 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9634 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9635 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9636 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9637 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 16.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9638 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 16.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9639 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 16.5,22.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9640 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 16.5,23.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9641 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 16.5,24.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9642 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 16.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9643 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 16.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9644 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 16.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9645 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 16.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9646 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9647 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 20.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9648 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9649 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9650 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9651 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9652 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 23.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9653 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9654 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9655 + components: + - type: Transform + pos: 12.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9656 + components: + - type: Transform + pos: 12.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9657 + components: + - type: Transform + pos: 12.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9658 + components: + - type: Transform + pos: 12.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9659 + components: + - type: Transform + pos: 12.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9660 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9661 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9662 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9663 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9664 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9665 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 13.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9666 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9667 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9668 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 16.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9669 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9670 + components: + - type: Transform + pos: 12.5,46.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9671 + components: + - type: Transform + pos: 12.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9672 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9673 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 13.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9674 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9675 + components: + - type: Transform + pos: 12.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9676 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9677 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9678 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9679 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 16.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9680 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 17.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9681 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 18.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9682 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 18.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9683 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9684 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9685 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9686 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9687 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9688 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 20.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9689 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9690 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9691 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9692 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9693 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 26.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9694 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9695 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9696 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9697 + components: + - type: Transform + pos: 26.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9698 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9699 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9700 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9701 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9702 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9703 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9704 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9705 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 20.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9706 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9707 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9708 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 23.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9709 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 23.5,50.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9710 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 23.5,51.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9711 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,52.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9712 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,52.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9713 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,52.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9714 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 18.5,52.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9715 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,52.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9716 + components: + - type: Transform + pos: 16.5,53.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9717 + components: + - type: Transform + pos: 16.5,54.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9718 + components: + - type: Transform + pos: 16.5,55.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9719 + components: + - type: Transform + pos: 16.5,56.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9720 + components: + - type: Transform + pos: 16.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9721 + components: + - type: Transform + pos: 16.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9722 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9723 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9724 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9725 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9726 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9727 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 29.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9728 + components: + - type: Transform + pos: 30.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9729 + components: + - type: Transform + pos: 30.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9730 + components: + - type: Transform + pos: 30.5,50.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9731 + components: + - type: Transform + pos: 30.5,51.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9732 + components: + - type: Transform + pos: 30.5,52.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9733 + components: + - type: Transform + pos: 30.5,53.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9734 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9735 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9736 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9737 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9738 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9739 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9740 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 40.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9741 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9742 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 39.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9743 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 39.5,50.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9744 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 39.5,51.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9745 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 39.5,52.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9746 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,46.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9747 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9748 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9749 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,46.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9750 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 32.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9751 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 33.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9752 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9753 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9754 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 36.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9755 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9756 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9757 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9758 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9759 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9760 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 17.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9761 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9762 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9763 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 20.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9764 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9765 + components: + - type: Transform + pos: 22.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9766 + components: + - type: Transform + pos: 22.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9767 + components: + - type: Transform + pos: 22.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9768 + components: + - type: Transform + pos: 22.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9769 + components: + - type: Transform + pos: 22.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9770 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9771 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9772 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 26.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9773 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9774 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 28.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9775 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 29.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9776 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9777 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9778 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,22.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9779 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,23.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9780 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,24.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9781 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9782 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9783 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9784 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9785 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9786 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9787 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9788 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9789 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9790 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9791 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9792 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 32.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9793 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 33.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9794 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9795 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9796 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 36.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9797 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 37.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9798 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 38.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9799 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 39.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9800 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9801 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9802 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9803 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9804 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9805 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9806 + components: + - type: Transform + pos: 40.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9807 + components: + - type: Transform + pos: 40.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9808 + components: + - type: Transform + pos: 40.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9809 + components: + - type: Transform + pos: 40.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9810 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9811 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9812 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9813 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 44.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9814 + components: + - type: Transform + pos: 46.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9815 + components: + - type: Transform + pos: 46.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9816 + components: + - type: Transform + pos: 46.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9817 + components: + - type: Transform + pos: 46.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9818 + components: + - type: Transform + pos: 46.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9819 + components: + - type: Transform + pos: 46.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9820 + components: + - type: Transform + pos: 46.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9821 + components: + - type: Transform + pos: 46.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9822 + components: + - type: Transform + pos: 46.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9823 + components: + - type: Transform + pos: 46.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9824 + components: + - type: Transform + pos: 46.5,46.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9825 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 47.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9826 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 48.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9827 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 49.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9828 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 50.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9829 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 51.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9830 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 53.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9831 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 54.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9832 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 55.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9833 + components: + - type: Transform + pos: 56.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9834 + components: + - type: Transform + pos: 56.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9835 + components: + - type: Transform + pos: 56.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9836 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 62.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9837 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 61.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9838 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 60.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9839 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 59.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9840 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 58.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9841 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 57.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9842 + components: + - type: Transform + pos: 62.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9843 + components: + - type: Transform + pos: 62.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9844 + components: + - type: Transform + pos: 62.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9845 + components: + - type: Transform + pos: 56.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9846 + components: + - type: Transform + pos: 56.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9847 + components: + - type: Transform + pos: 56.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9848 + components: + - type: Transform + pos: 56.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9849 + components: + - type: Transform + pos: 56.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9850 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 47.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9851 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 48.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9852 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 49.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9853 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 50.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9854 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 50.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9855 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 50.5,50.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9856 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 50.5,51.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9857 + components: + - type: Transform + pos: 56.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9858 + components: + - type: Transform + pos: 56.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9859 + components: + - type: Transform + pos: 56.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9860 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 57.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9861 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 58.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9862 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 59.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9863 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 55.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9864 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 54.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9865 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 53.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9866 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 52.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9867 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9868 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 49.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9869 + components: + - type: Transform + pos: 48.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9870 + components: + - type: Transform + pos: 48.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9871 + components: + - type: Transform + pos: 48.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9872 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 49.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9873 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9874 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 51.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9875 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 52.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9876 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 53.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9877 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 56.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9878 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 56.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9879 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 56.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9880 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 55.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9881 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 56.5,24.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9882 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 56.5,23.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9883 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 56.5,22.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9884 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 56.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9885 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 56.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9886 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 48.5,24.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9887 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 48.5,23.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9888 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 49.5,22.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9889 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.5,22.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9890 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 51.5,22.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9891 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 48.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9892 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 48.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9893 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 49.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9894 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9895 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 51.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9896 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 48.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9897 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 48.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9898 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 48.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9899 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 48.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9900 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 48.5,12.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9901 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 48.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9902 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 48.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9903 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 48.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9904 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 48.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9906 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 52.5,-2.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9914 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 47.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9915 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 46.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9916 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 45.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9917 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 45.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9918 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 45.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9919 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 44.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9920 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9921 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9922 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9923 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9924 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9925 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9926 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9927 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9928 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9929 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9930 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9931 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9932 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,12.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9933 + components: + - type: Transform + pos: 40.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9934 + components: + - type: Transform + pos: 40.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9935 + components: + - type: Transform + pos: 40.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9936 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9937 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9938 + components: + - type: Transform + pos: 36.5,5.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9939 + components: + - type: Transform + pos: 36.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9940 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,4.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9941 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 36.5,3.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9942 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 36.5,2.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9943 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 36.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9944 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,4.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9945 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,4.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9946 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,4.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9947 + components: + - type: Transform + pos: 30.5,3.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9948 + components: + - type: Transform + pos: 30.5,2.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9949 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9954 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 57.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9955 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 58.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9956 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 59.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9957 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 60.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9958 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 61.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9959 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 62.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9960 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 63.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9961 + components: + - type: Transform + pos: 64.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9962 + components: + - type: Transform + pos: 64.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9963 + components: + - type: Transform + pos: 64.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9964 + components: + - type: Transform + pos: 64.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9965 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 65.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9966 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 66.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9967 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 67.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9968 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 68.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9969 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 69.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9970 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 65.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9971 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 66.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9972 + components: + - type: Transform + pos: 64.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9973 + components: + - type: Transform + pos: 64.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9974 + components: + - type: Transform + pos: 64.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9975 + components: + - type: Transform + pos: 64.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9976 + components: + - type: Transform + pos: 64.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9977 + components: + - type: Transform + pos: 64.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9978 + components: + - type: Transform + pos: 64.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9979 + components: + - type: Transform + pos: 64.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9980 + components: + - type: Transform + pos: 64.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9981 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 65.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9982 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 66.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9983 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 67.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9984 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 68.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9985 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 69.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9986 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 69.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9987 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 71.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9988 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 72.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9989 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 73.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9990 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 74.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9991 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 76.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9992 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 77.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9993 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 78.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9994 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 79.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9995 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 80.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9996 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 80.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9997 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 68.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9998 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 69.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9999 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 69.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10000 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 69.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10001 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 70.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10002 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 71.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10003 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 72.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10004 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 73.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10005 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 74.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10006 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 75.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10007 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 70.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10008 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 71.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10009 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 72.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10010 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 73.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10011 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 74.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10012 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 75.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10013 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 77.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10014 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 79.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10015 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 78.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10016 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 78.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10017 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 79.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10018 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 80.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10019 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 80.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10020 + components: + - type: Transform + pos: 80.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10021 + components: + - type: Transform + pos: 80.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10022 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 80.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10023 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 79.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10024 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 77.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10025 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 78.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10026 + components: + - type: Transform + pos: 76.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10027 + components: + - type: Transform + pos: 76.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10028 + components: + - type: Transform + pos: 76.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10029 + components: + - type: Transform + pos: 76.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10030 + components: + - type: Transform + pos: 76.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10031 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 80.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10032 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 80.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10033 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 80.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10034 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 80.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10035 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 80.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10036 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 80.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10037 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 64.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10038 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 64.5,46.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10039 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 64.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10040 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 64.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10041 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 64.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10042 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 64.5,50.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10043 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 64.5,51.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10044 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 64.5,52.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10045 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 64.5,53.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10046 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 64.5,54.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10047 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 65.5,55.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10048 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 66.5,55.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10049 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 63.5,56.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10050 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 62.5,56.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10051 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 61.5,56.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10052 + components: + - type: Transform + pos: 64.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10053 + components: + - type: Transform + pos: 64.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10054 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 63.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10055 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 62.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10056 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 61.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10057 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 60.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10058 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 65.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10059 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 66.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10060 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 67.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10061 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 68.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10062 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 69.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10063 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 70.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10064 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 71.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10065 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 72.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10066 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 73.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10067 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 64.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10068 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 64.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10069 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 64.5,24.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10070 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 64.5,23.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10071 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 64.5,22.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10072 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 64.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10073 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 64.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10074 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 64.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10075 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 64.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10076 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 64.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10077 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 64.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10078 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 65.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10079 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 66.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10080 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 67.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10081 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 68.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10082 + components: + - type: Transform + pos: 69.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10083 + components: + - type: Transform + pos: 69.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10084 + components: + - type: Transform + pos: 69.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10085 + components: + - type: Transform + pos: 69.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10086 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 64.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10087 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 64.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10088 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 64.5,12.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10089 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 64.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10090 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 64.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10091 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 64.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10092 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 65.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10093 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 66.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10094 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 67.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10095 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 68.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10096 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 70.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10097 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 71.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10098 + components: + - type: Transform + pos: 64.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10099 + components: + - type: Transform + pos: 64.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10100 + components: + - type: Transform + pos: 64.5,5.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10101 + components: + - type: Transform + pos: 64.5,4.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10102 + components: + - type: Transform + pos: 72.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10103 + components: + - type: Transform + pos: 72.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10104 + components: + - type: Transform + pos: 72.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10105 + components: + - type: Transform + pos: 72.5,5.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10106 + components: + - type: Transform + pos: 72.5,4.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10107 + components: + - type: Transform + pos: 72.5,3.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10108 + components: + - type: Transform + pos: 72.5,2.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10109 + components: + - type: Transform + pos: 72.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10110 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10111 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10112 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10113 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10114 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10115 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10116 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10117 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10118 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10119 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10120 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10121 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10122 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10123 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10124 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10126 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10127 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10128 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10129 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10130 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,22.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10131 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10132 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,24.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10133 + components: + - type: Transform + pos: 1.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10134 + components: + - type: Transform + pos: 1.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10135 + components: + - type: Transform + pos: 1.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10136 + components: + - type: Transform + pos: 1.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10137 + components: + - type: Transform + pos: 1.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10138 + components: + - type: Transform + pos: 1.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10139 + components: + - type: Transform + pos: 1.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10140 + components: + - type: Transform + pos: 1.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10141 + components: + - type: Transform + pos: 1.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10142 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10143 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10144 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10145 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10146 + components: + - type: Transform + pos: -2.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10147 + components: + - type: Transform + pos: -2.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10148 + components: + - type: Transform + pos: -2.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10149 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10150 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10151 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10152 + components: + - type: Transform + pos: -4.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10153 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10154 + components: + - type: Transform + pos: -9.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10155 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10156 + components: + - type: Transform + pos: -9.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10157 + components: + - type: Transform + pos: -9.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10158 + components: + - type: Transform + pos: -9.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10159 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10160 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10161 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10162 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -17.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10163 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -18.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10164 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10165 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10166 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10168 + components: + - type: Transform + pos: 1.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10169 + components: + - type: Transform + pos: 1.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10170 + components: + - type: Transform + pos: 1.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10171 + components: + - type: Transform + pos: 1.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10172 + components: + - type: Transform + pos: 1.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10173 + components: + - type: Transform + pos: 1.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10174 + components: + - type: Transform + pos: 1.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10175 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10176 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10177 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10178 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10179 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10180 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10181 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10182 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,46.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10183 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10184 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10185 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10186 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10187 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10188 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10189 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10190 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10191 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10192 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10193 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10194 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10195 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10196 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10197 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10198 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10199 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,51.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10200 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,50.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10201 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,52.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10202 + components: + - type: Transform + pos: -13.5,53.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10203 + components: + - type: Transform + pos: -13.5,54.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10204 + components: + - type: Transform + pos: -13.5,55.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10205 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,56.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10206 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,56.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10207 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,56.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10208 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,56.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10209 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,56.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10210 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,56.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10211 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,56.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10212 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,56.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10213 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,56.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10214 + components: + - type: Transform + pos: 0.5,54.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10215 + components: + - type: Transform + pos: 0.5,53.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10216 + components: + - type: Transform + pos: -3.5,55.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10217 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,53.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10218 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,55.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10219 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,54.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10220 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,53.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10221 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10222 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10223 + components: + - type: Transform + pos: -0.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10224 + components: + - type: Transform + pos: -0.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10225 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10226 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10227 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10228 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10229 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10230 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10231 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10232 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,56.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10233 + components: + - type: Transform + pos: -13.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10234 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10235 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10236 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,60.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10237 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10238 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10239 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10240 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -18.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10241 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10242 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -18.5,60.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10243 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10244 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,56.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10245 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,55.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10246 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,54.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10247 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,53.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10248 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,61.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10249 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,62.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10250 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,63.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10251 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,64.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10252 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,65.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10253 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,66.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10254 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,67.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10255 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,68.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10256 + components: + - type: Transform + pos: -11.5,62.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10257 + components: + - type: Transform + pos: -11.5,63.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10258 + components: + - type: Transform + pos: -11.5,64.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10259 + components: + - type: Transform + pos: -11.5,65.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10260 + components: + - type: Transform + pos: -11.5,66.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10261 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,67.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10262 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,67.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10263 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,67.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10264 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,67.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10265 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,67.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10266 + components: + - type: Transform + pos: -5.5,66.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10267 + components: + - type: Transform + pos: -5.5,65.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10268 + components: + - type: Transform + pos: -5.5,64.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10269 + components: + - type: Transform + pos: -5.5,63.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10270 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,62.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10271 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,62.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10272 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,62.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10273 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,62.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10274 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,62.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10275 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,62.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10276 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,62.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10277 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,62.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10278 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,62.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10279 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,62.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10280 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,62.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10281 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,61.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10282 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,60.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10283 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10284 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10285 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10286 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10287 + components: + - type: Transform + pos: -24.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10288 + components: + - type: Transform + pos: -24.5,56.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10289 + components: + - type: Transform + pos: -24.5,55.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10290 + components: + - type: Transform + pos: -24.5,54.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10291 + components: + - type: Transform + pos: -24.5,53.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10292 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,61.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10293 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,62.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10294 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,63.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10295 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,64.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10296 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,65.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10297 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,66.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10298 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,67.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10299 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,68.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10300 + components: + - type: Transform + pos: -4.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10301 + components: + - type: Transform + pos: -3.5,54.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10302 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10304 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10305 + components: + - type: Transform + pos: 6.5,63.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10306 + components: + - type: Transform + pos: 6.5,64.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10307 + components: + - type: Transform + pos: 6.5,65.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10308 + components: + - type: Transform + pos: 6.5,66.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10309 + components: + - type: Transform + pos: 6.5,67.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10310 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,68.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10311 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,68.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10312 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,68.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10313 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,68.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10314 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,68.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10315 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,68.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10316 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,68.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10317 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,68.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10318 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,69.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10319 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,70.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10320 + components: + - type: Transform + pos: 6.5,56.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10321 + components: + - type: Transform + pos: 6.5,55.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10322 + components: + - type: Transform + pos: 6.5,54.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10323 + components: + - type: Transform + pos: 6.5,53.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10324 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,52.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10325 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,52.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10326 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,52.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10327 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,52.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10328 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,52.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10329 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,52.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10330 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,53.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10331 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,54.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10332 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,55.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10333 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,56.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10334 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10335 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10336 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,60.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10337 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,61.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10338 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,62.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10339 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,62.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10340 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 16.5,62.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10341 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,62.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10342 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10343 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10344 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10345 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10346 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,50.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10347 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,51.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10348 + components: + - type: Transform + pos: 7.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10349 + components: + - type: Transform + pos: 7.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10350 + components: + - type: Transform + pos: 7.5,46.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10351 + components: + - type: Transform + pos: 7.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10352 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10353 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10354 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10355 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10356 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10357 + components: + - type: Transform + pos: 9.5,36.5 + parent: 2 + - uid: 10358 + components: + - type: Transform + pos: 8.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10359 + components: + - type: Transform + pos: 8.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10360 + components: + - type: Transform + pos: 8.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10361 + components: + - type: Transform + pos: 8.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10362 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10363 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 14.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10364 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10365 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10366 + components: + - type: Transform + pos: 11.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10367 + components: + - type: Transform + pos: 11.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10368 + components: + - type: Transform + pos: 11.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10369 + components: + - type: Transform + pos: 11.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10370 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10371 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 13.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10372 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10373 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 16.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10374 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 17.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10375 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 18.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10376 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 18.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10377 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 18.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10378 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 18.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10379 + components: + - type: Transform + pos: 18.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10380 + components: + - type: Transform + pos: 18.5,24.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10381 + components: + - type: Transform + pos: 18.5,23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10382 + components: + - type: Transform + pos: 18.5,22.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10383 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10384 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10385 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10386 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10387 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10388 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10389 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10390 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10391 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10392 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10393 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 13.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10394 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10395 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 16.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10396 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 17.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10397 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 18.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10398 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10399 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 20.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10400 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10401 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10402 + components: + - type: Transform + pos: 23.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10403 + components: + - type: Transform + pos: 23.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10404 + components: + - type: Transform + pos: 23.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10405 + components: + - type: Transform + pos: 23.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10406 + components: + - type: Transform + pos: 23.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10407 + components: + - type: Transform + pos: 23.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10408 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,24.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10409 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.5,24.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10410 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10411 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10412 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10413 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10414 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 18.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10415 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 18.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10416 + components: + - type: Transform + pos: 23.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10417 + components: + - type: Transform + pos: 23.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10418 + components: + - type: Transform + pos: 23.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10419 + components: + - type: Transform + pos: 23.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10420 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10421 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10422 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10423 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10424 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10425 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10426 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10427 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10428 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10429 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10430 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10431 + components: + - type: Transform + pos: 14.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10432 + components: + - type: Transform + pos: 14.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10433 + components: + - type: Transform + pos: 14.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10434 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10435 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10436 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10437 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10438 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10439 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10440 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10441 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10442 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10443 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10444 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,56.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10445 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,55.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10446 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,54.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10447 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,53.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10448 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,52.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10449 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,51.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10450 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10451 + components: + - type: Transform + pos: -29.5,61.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10452 + components: + - type: Transform + pos: -29.5,62.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10453 + components: + - type: Transform + pos: -29.5,63.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10454 + components: + - type: Transform + pos: -29.5,64.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10455 + components: + - type: Transform + pos: -29.5,65.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10456 + components: + - type: Transform + pos: -29.5,66.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10457 + components: + - type: Transform + pos: -29.5,67.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10458 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10459 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10460 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10461 + components: + - type: Transform + pos: -33.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10462 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10463 + components: + - type: Transform + pos: 11.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10464 + components: + - type: Transform + pos: 11.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10465 + components: + - type: Transform + pos: 11.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10466 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10467 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10468 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,12.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10469 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10470 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10471 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10472 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10473 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10474 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10475 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10476 + components: + - type: Transform + pos: 4.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10477 + components: + - type: Transform + pos: 4.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10478 + components: + - type: Transform + pos: 4.5,12.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10479 + components: + - type: Transform + pos: 4.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10480 + components: + - type: Transform + pos: 4.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10481 + components: + - type: Transform + pos: 4.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10482 + components: + - type: Transform + pos: 4.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10483 + components: + - type: Transform + pos: 4.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10484 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10485 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10486 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10487 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10488 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10489 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10490 + components: + - type: Transform + pos: -2.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10491 + components: + - type: Transform + pos: -2.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10492 + components: + - type: Transform + pos: -2.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10493 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10494 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10495 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10496 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10497 + components: + - type: Transform + pos: -5.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10498 + components: + - type: Transform + pos: -5.5,12.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10499 + components: + - type: Transform + pos: -5.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10500 + components: + - type: Transform + pos: -5.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10501 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10502 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10503 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10504 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10505 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10506 + components: + - type: Transform + pos: -11.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10507 + components: + - type: Transform + pos: -11.5,12.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10508 + components: + - type: Transform + pos: -11.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10509 + components: + - type: Transform + pos: -11.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10510 + components: + - type: Transform + pos: -11.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10511 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10512 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10513 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10514 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10515 + components: + - type: Transform + pos: -15.5,5.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10516 + components: + - type: Transform + pos: -15.5,4.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10517 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10518 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 20.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10519 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10520 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10521 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10522 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10523 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10524 + components: + - type: Transform + pos: 26.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10525 + components: + - type: Transform + pos: 26.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10526 + components: + - type: Transform + pos: 26.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10527 + components: + - type: Transform + pos: 26.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10528 + components: + - type: Transform + pos: 26.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10529 + components: + - type: Transform + pos: 26.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10530 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10531 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 28.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10532 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 29.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10533 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10534 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10535 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 32.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10536 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.5,22.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10537 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.5,23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10538 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.5,24.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10539 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10540 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10541 + components: + - type: Transform + pos: 33.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10542 + components: + - type: Transform + pos: 33.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10543 + components: + - type: Transform + pos: 33.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10544 + components: + - type: Transform + pos: 33.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10545 + components: + - type: Transform + pos: 33.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10546 + components: + - type: Transform + pos: 33.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10547 + components: + - type: Transform + pos: 33.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10548 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10549 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10550 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 36.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10551 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 37.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10552 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 38.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10553 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10554 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10555 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10556 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10557 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10558 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 36.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10559 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 37.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10560 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 38.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10561 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 39.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10562 + components: + - type: Transform + pos: 33.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10563 + components: + - type: Transform + pos: 33.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10564 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10565 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 36.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10566 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10567 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10568 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10569 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.5,46.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10570 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10571 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10572 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10573 + components: + - type: Transform + pos: 31.5,50.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10574 + components: + - type: Transform + pos: 31.5,51.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10575 + components: + - type: Transform + pos: 31.5,52.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10576 + components: + - type: Transform + pos: 31.5,53.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10577 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10578 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10579 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10580 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10581 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10582 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10583 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 40.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10584 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,50.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10585 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,51.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10586 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,52.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10587 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10588 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10589 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,46.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10590 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10591 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10592 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10593 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10594 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10595 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10596 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10597 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10598 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10599 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 16.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10600 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10601 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 18.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10602 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10603 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 20.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10604 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10605 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10606 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,50.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10607 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,51.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10608 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,52.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10609 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,53.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10610 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,54.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10611 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,54.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10612 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 20.5,54.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10613 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,54.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10614 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 18.5,55.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10615 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 18.5,56.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10616 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 18.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10617 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 18.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10618 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10619 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10620 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10621 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10622 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 29.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10623 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10624 + components: + - type: Transform + pos: -24.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10625 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10626 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 40.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10627 + components: + - type: Transform + pos: 42.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10628 + components: + - type: Transform + pos: 42.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10629 + components: + - type: Transform + pos: 42.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10630 + components: + - type: Transform + pos: 42.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10631 + components: + - type: Transform + pos: 42.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10632 + components: + - type: Transform + pos: 42.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10633 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10634 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 44.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10635 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 45.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10636 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 46.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10637 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 47.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10638 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 47.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10639 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 47.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10640 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 47.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10641 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 47.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10642 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 47.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10643 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 47.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10644 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 47.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10645 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 48.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10646 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 49.5,46.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10647 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 49.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10648 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 49.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10649 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 49.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10650 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 49.5,50.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10651 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 49.5,51.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10652 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 47.5,46.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10653 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 47.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10654 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 48.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10655 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 49.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10656 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 50.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10657 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 51.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10658 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 52.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10659 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 52.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10660 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 52.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10661 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 52.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10662 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 52.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10663 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 52.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10664 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 52.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10665 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 52.5,46.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10666 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 52.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10667 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 52.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10668 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 53.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10669 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 54.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10670 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 55.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10671 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 56.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10672 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 57.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10673 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 58.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10674 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 59.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10675 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 60.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10676 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 60.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10677 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 60.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10678 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 60.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10679 + components: + - type: Transform + pos: 54.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10680 + components: + - type: Transform + pos: 54.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10681 + components: + - type: Transform + pos: 54.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10682 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 52.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10683 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 51.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10684 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 55.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10685 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 56.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10686 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 57.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10687 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 58.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10688 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 59.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10689 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 49.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10690 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 48.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10691 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10692 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10693 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10694 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 54.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10695 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 54.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10696 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 54.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10697 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 55.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10698 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 55.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10699 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 55.5,24.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10700 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 55.5,23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10701 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 55.5,22.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10702 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 55.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10703 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 55.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10704 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 53.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10705 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 52.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10706 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 51.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10707 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10708 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 49.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10709 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 48.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10710 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 47.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10711 + components: + - type: Transform + pos: 46.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10712 + components: + - type: Transform + pos: 46.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10713 + components: + - type: Transform + pos: 46.5,24.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10714 + components: + - type: Transform + pos: 46.5,23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10715 + components: + - type: Transform + pos: 46.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10716 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 47.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10717 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 48.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10718 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 49.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10719 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 50.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10720 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 51.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10721 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10722 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10723 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 47.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10724 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 48.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10725 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10726 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 51.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10727 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10728 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10729 + components: + - type: Transform + pos: 49.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10730 + components: + - type: Transform + pos: 49.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10731 + components: + - type: Transform + pos: 49.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10732 + components: + - type: Transform + pos: 49.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10733 + components: + - type: Transform + pos: 49.5,12.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10734 + components: + - type: Transform + pos: 50.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10735 + components: + - type: Transform + pos: 50.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10736 + components: + - type: Transform + pos: 50.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10737 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 51.5,5.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10738 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 49.5,5.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10740 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 53.5,2.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10741 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 45.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10742 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 44.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10743 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10744 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 42.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10745 + components: + - type: Transform + pos: 41.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10746 + components: + - type: Transform + pos: 41.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10747 + components: + - type: Transform + pos: 41.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10748 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 40.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10749 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10750 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10751 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10752 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10753 + components: + - type: Transform + pos: 41.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10754 + components: + - type: Transform + pos: 41.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10755 + components: + - type: Transform + pos: 41.5,12.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10756 + components: + - type: Transform + pos: 41.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10757 + components: + - type: Transform + pos: 41.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10758 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 40.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10759 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10760 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10761 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10762 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10763 + components: + - type: Transform + pos: 35.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10764 + components: + - type: Transform + pos: 35.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10765 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 35.5,4.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10766 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 35.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10767 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 35.5,2.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10768 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,3.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10769 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 32.5,3.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10770 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 33.5,3.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10771 + components: + - type: Transform + pos: 31.5,2.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10772 + components: + - type: Transform + pos: 31.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10773 + components: + - type: Transform + pos: 31.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10774 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,-0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10779 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 32.5,9.5 + parent: 2 + - uid: 10780 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,9.5 + parent: 2 + - uid: 10781 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,9.5 + parent: 2 + - uid: 10782 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 36.5,9.5 + parent: 2 + - uid: 10783 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 32.5,11.5 + parent: 2 + - uid: 10784 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,11.5 + parent: 2 + - uid: 10785 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,11.5 + parent: 2 + - uid: 10786 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 36.5,11.5 + parent: 2 + - uid: 10790 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 55.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10791 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 56.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10792 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 57.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10793 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 58.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10794 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 59.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10795 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 60.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10796 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 61.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10797 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 62.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10798 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 63.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10799 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 64.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10800 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 65.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10801 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 67.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10802 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 66.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10803 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 66.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10804 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 66.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10805 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 66.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10806 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 66.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10807 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 66.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10808 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 66.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10809 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 66.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10810 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 67.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10811 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 68.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10812 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 69.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10813 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 71.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10814 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 72.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10815 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 73.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10816 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 74.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10817 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 77.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10818 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 78.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10819 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 79.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10820 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 80.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10821 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 81.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10822 + components: + - type: Transform + pos: 70.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10823 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 69.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10824 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 70.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10825 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 70.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10826 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 70.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10827 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 71.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10828 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 72.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10829 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 73.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10830 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 74.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10831 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 75.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10832 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 71.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10833 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 72.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10834 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 73.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10835 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 74.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10836 + components: + - type: Transform + pos: 82.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10837 + components: + - type: Transform + pos: 82.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10838 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 81.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10839 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 80.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10840 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 79.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10841 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 78.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10842 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 77.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10843 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 82.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10844 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 82.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10845 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 82.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10846 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 82.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10847 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 76.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10848 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 77.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10849 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 78.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10850 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 79.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10851 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 80.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10852 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 81.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10853 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 82.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10854 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 82.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10855 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 82.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10856 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 82.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10857 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 81.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10858 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 80.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10859 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 79.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10860 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 78.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10861 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 78.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10862 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 78.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10863 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 82.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10864 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 82.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10865 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 82.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10866 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 82.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10867 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 66.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10868 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 66.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10869 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 66.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10870 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 66.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10871 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 66.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10872 + components: + - type: Transform + pos: 66.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10873 + components: + - type: Transform + pos: 66.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10874 + components: + - type: Transform + pos: 66.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10875 + components: + - type: Transform + pos: 66.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10876 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 67.5,24.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10877 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 68.5,24.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10878 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 69.5,24.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10879 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 66.5,23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10880 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 66.5,22.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10881 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 66.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10882 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 67.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10883 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 68.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10884 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 69.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10885 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 70.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10886 + components: + - type: Transform + pos: 71.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10887 + components: + - type: Transform + pos: 71.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10888 + components: + - type: Transform + pos: 71.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10889 + components: + - type: Transform + pos: 71.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10890 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 66.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10891 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 66.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10892 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 66.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10893 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 66.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10894 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 66.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10895 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 66.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10896 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 66.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10897 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 66.5,12.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10898 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 67.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10899 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 69.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10900 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 70.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10901 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 71.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10902 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 72.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10903 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 73.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10904 + components: + - type: Transform + pos: 66.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10905 + components: + - type: Transform + pos: 66.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10906 + components: + - type: Transform + pos: 66.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10907 + components: + - type: Transform + pos: 66.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10908 + components: + - type: Transform + pos: 66.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10909 + components: + - type: Transform + pos: 66.5,5.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10910 + components: + - type: Transform + pos: 66.5,4.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10911 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 74.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10912 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 74.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10913 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 74.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10914 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 74.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10915 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 74.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10916 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 74.5,5.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10917 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 74.5,4.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10918 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 74.5,3.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10919 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 74.5,2.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10920 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 74.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10921 + components: + - type: Transform + pos: 66.5,51.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10922 + components: + - type: Transform + pos: 66.5,50.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10923 + components: + - type: Transform + pos: 66.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10924 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 66.5,52.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10925 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 66.5,53.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10926 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 66.5,54.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10927 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 66.5,55.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10928 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 65.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10929 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 64.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10930 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 63.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10931 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 62.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10932 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 61.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10933 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 60.5,60.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10934 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 61.5,60.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10935 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 62.5,60.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10936 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 63.5,60.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10937 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 64.5,60.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10938 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 65.5,60.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10939 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 66.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10940 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 66.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10941 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 67.5,60.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10942 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 68.5,60.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10943 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 69.5,60.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10944 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 70.5,60.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10945 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 71.5,60.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10946 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 72.5,60.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10947 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 73.5,60.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10948 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 17.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10949 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 16.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10950 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10951 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 10952 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10953 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 55.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10954 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10955 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 77.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10956 + components: + - type: Transform + pos: 66.5,46.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10957 + components: + - type: Transform + pos: 66.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10958 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,3.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10959 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,3.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10960 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,3.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10961 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,2.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10962 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10963 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10964 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10965 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10966 + components: + - type: Transform + pos: -10.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10967 + components: + - type: Transform + pos: -10.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10968 + components: + - type: Transform + pos: -10.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10969 + components: + - type: Transform + pos: -10.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10970 + components: + - type: Transform + pos: -10.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10971 + components: + - type: Transform + pos: -10.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10972 + components: + - type: Transform + pos: -10.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10973 + components: + - type: Transform + pos: -10.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10974 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,2.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10975 + components: + - type: Transform + pos: -15.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10976 + components: + - type: Transform + pos: -13.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10977 + components: + - type: Transform + pos: -13.5,-0.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10978 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,-1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10979 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -16.5,-1.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10980 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -16.5,-2.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10981 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -16.5,-3.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10982 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -16.5,-4.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10983 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,-2.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10984 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,-3.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10985 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,-4.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10986 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10987 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10988 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10989 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 10990 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10991 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10992 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10993 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10994 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,12.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10995 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10996 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10997 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10998 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10999 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11000 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11001 + components: + - type: Transform + pos: -28.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11002 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11003 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11004 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11005 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11006 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11007 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11008 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,12.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11009 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11010 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11011 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11012 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11013 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11014 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11015 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11016 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11017 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11018 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11019 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11020 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -29.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11021 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11022 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11023 + components: + - type: Transform + pos: -32.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11024 + components: + - type: Transform + pos: -31.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11025 + components: + - type: Transform + pos: -31.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11026 + components: + - type: Transform + pos: -31.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11027 + components: + - type: Transform + pos: -31.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11028 + components: + - type: Transform + pos: -31.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11029 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11030 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11031 + components: + - type: Transform + pos: -29.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11032 + components: + - type: Transform + pos: -29.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11033 + components: + - type: Transform + pos: -29.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11034 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -33.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11035 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11036 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11037 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11038 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11039 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11040 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11041 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11042 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11043 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11044 + components: + - type: Transform + pos: -31.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11045 + components: + - type: Transform + pos: -31.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11046 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11047 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11048 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11049 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,12.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11050 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -28.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11051 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -27.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11052 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,13.5 + parent: 2 + - uid: 11053 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -27.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11054 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,12.5 + parent: 2 + - uid: 11055 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,13.5 + parent: 2 + - uid: 11056 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -27.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 11057 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -27.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 11058 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 11059 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -21.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 11060 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 11061 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 11062 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 11063 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 11064 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 11065 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 11066 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 11067 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 11068 + components: + - type: Transform + pos: -29.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 11069 + components: + - type: Transform + pos: -29.5,24.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 11070 + components: + - type: Transform + pos: -29.5,23.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 11071 + components: + - type: Transform + pos: -29.5,22.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 11072 + components: + - type: Transform + pos: -29.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 11073 + components: + - type: Transform + pos: -29.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 11074 + components: + - type: Transform + pos: -26.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11075 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 11076 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 11077 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 11078 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 11079 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -28.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 11080 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 11081 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 11082 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -25.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 11083 + components: + - type: Transform + pos: -24.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 11084 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11085 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11086 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11087 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11088 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11089 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11090 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11091 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,12.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11092 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,12.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11093 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,12.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11094 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,12.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11095 + components: + - type: Transform + pos: -30.5,23.5 + parent: 2 + - type: AtmosPipeColor + color: '#9D00E0FF' + - uid: 11096 + components: + - type: Transform + pos: -30.5,23.5 + parent: 2 + - type: AtmosPipeColor + color: '#9D00E0FF' + - uid: 11097 + components: + - type: Transform + pos: -30.5,22.5 + parent: 2 + - type: AtmosPipeColor + color: '#9D00E0FF' + - uid: 11098 + components: + - type: Transform + pos: -30.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#9D00E0FF' + - uid: 11099 + components: + - type: Transform + pos: -30.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#9D00E0FF' + - uid: 11100 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11101 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11102 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11103 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11104 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11105 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -37.5,25.5 + parent: 2 + - uid: 11106 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11107 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11108 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11111 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 11112 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -28.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 11279 + components: + - type: Transform + pos: 50.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11322 + components: + - type: Transform + pos: -25.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 11708 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -18.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 11821 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 51.5,-2.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12139 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 12140 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 12143 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 12186 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 53.5,6.5 + parent: 2 + - uid: 12629 + components: + - type: Transform + pos: -33.5,65.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12630 + components: + - type: Transform + pos: -33.5,64.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12777 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 53.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13257 + components: + - type: Transform + pos: -33.5,63.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13428 + components: + - type: Transform + pos: -33.5,62.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13914 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 16307 + components: + - type: Transform + pos: -33.5,61.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 17188 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -29.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 18433 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,-29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 18451 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,-27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 18477 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,-38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 18498 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 18500 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,-24.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 18501 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 32.5,-24.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 18502 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 33.5,-24.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 18503 + components: + - type: Transform + pos: 30.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 18504 + components: + - type: Transform + pos: 30.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 18505 + components: + - type: Transform + pos: 30.5,-27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 18506 + components: + - type: Transform + pos: 30.5,-28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 18509 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 29.5,-30.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 18511 + components: + - type: Transform + pos: 30.5,-31.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 18512 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,-32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 18513 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,-32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 18514 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,-32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 18588 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,-34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 18594 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,-35.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 18595 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,-36.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 18602 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,-37.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 18603 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,-37.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 18633 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 18636 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 18931 + components: + - type: Transform + pos: -26.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 18932 + components: + - type: Transform + pos: -26.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 18933 + components: + - type: Transform + pos: -26.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 18934 + components: + - type: Transform + pos: -26.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 18935 + components: + - type: Transform + pos: -26.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19085 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 29.5,-33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19086 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,-33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19284 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 53.5,-0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19285 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 50.5,-2.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19286 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 53.5,-2.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19287 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 49.5,4.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19289 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 53.5,-2.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19290 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 49.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19291 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 49.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19293 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 49.5,-1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19299 + components: + - type: Transform + pos: 50.5,-4.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19300 + components: + - type: Transform + pos: 50.5,-5.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19301 + components: + - type: Transform + pos: 50.5,-6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19302 + components: + - type: Transform + pos: 52.5,-4.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19303 + components: + - type: Transform + pos: 52.5,-5.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19304 + components: + - type: Transform + pos: 52.5,-6.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19305 + components: + - type: Transform + pos: 51.5,-6.5 + parent: 2 + - uid: 19306 + components: + - type: Transform + pos: 51.5,-5.5 + parent: 2 + - uid: 19307 + components: + - type: Transform + pos: 51.5,-4.5 + parent: 2 + - uid: 19312 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 48.5,-3.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19313 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 48.5,-0.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19314 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 48.5,2.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19316 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 54.5,4.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19317 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 54.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19318 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 54.5,-1.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19321 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 51.5,4.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19322 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 50.5,4.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19323 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 49.5,4.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19324 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 48.5,4.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19327 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 50.5,-0.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19328 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 51.5,-0.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19329 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 52.5,-0.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19330 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 53.5,-0.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19331 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 54.5,-0.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19332 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 50.5,2.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19333 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 51.5,2.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19334 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 52.5,2.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19335 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 53.5,2.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19336 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 54.5,2.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19337 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 52.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19338 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 51.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19339 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 50.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19340 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 49.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19341 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 48.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19342 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 52.5,-1.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19343 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 51.5,-1.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19344 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 50.5,-1.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19345 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 49.5,-1.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19346 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 48.5,-1.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19377 + components: + - type: Transform + pos: -31.5,63.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19378 + components: + - type: Transform + pos: -31.5,64.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19379 + components: + - type: Transform + pos: -31.5,65.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19380 + components: + - type: Transform + pos: -31.5,66.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19381 + components: + - type: Transform + pos: -31.5,67.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19386 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -32.5,68.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19387 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -32.5,69.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19388 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -32.5,70.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19389 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -32.5,71.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19390 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -32.5,72.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19392 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -32.5,74.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19393 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,68.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19394 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,69.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19395 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,70.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19396 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,71.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19397 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,72.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19398 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,73.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19404 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,74.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19405 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,74.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19406 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,74.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19407 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,74.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19408 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,74.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19409 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,74.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19410 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,73.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19411 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,73.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19412 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,73.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19413 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,73.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19414 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,73.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19415 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,73.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19416 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,73.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19417 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -29.5,73.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19418 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,73.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19419 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,73.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19537 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,-33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19538 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,-33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19618 + components: + - type: Transform + pos: 28.5,-24.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 19621 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,-24.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 19622 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 19623 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 19625 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,-17.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19629 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 19630 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,-22.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 19631 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,-21.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 19632 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,-19.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 19633 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,-17.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 19634 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,-16.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 19635 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,-19.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19636 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,-39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19637 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,-18.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19638 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 32.5,-18.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 19639 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,-18.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 19640 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,-18.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 19643 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,-16.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19644 + components: + - type: Transform + pos: 29.5,-20.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 19647 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,-20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19648 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 29.5,-20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19649 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,-20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19650 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,-21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19651 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,-22.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19652 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19653 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,-24.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19654 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19655 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19658 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,-27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19659 + components: + - type: Transform + pos: 29.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19661 + components: + - type: Transform + pos: 31.5,-28.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19662 + components: + - type: Transform + pos: 31.5,-29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19664 + components: + - type: Transform + pos: 31.5,-32.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19665 + components: + - type: Transform + pos: 31.5,-33.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19666 + components: + - type: Transform + pos: 31.5,-34.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19667 + components: + - type: Transform + pos: 31.5,-35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19670 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 32.5,-37.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19671 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 33.5,-37.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19676 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,-36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19677 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,-36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19680 + components: + - type: Transform + pos: 30.5,-39.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19681 + components: + - type: Transform + pos: 30.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19682 + components: + - type: Transform + pos: 30.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19683 + components: + - type: Transform + pos: 30.5,-42.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19685 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,-43.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19686 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 29.5,-43.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19699 + components: + - type: Transform + pos: 35.5,-33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19703 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 32.5,-29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19704 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 33.5,-29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19705 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 29.5,-29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19706 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 28.5,-29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19707 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,-29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19801 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,-39.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 20143 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,-31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 20144 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 29.5,-31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 20145 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,-31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 20146 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,-31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 20147 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,-31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 20151 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,-36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 20152 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 29.5,-36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 20153 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,-36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 20154 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,-36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 20155 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,-36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' +- proto: GasPipeTJunction + entities: + - uid: 9009 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9224 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 9315 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 9551 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,60.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10125 + components: + - type: Transform + pos: -3.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 10739 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 49.5,3.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 10788 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 52.5,6.5 + parent: 2 + - uid: 11140 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,18.5 + parent: 2 + - uid: 11141 + components: + - type: Transform + pos: -21.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 11142 + components: + - type: Transform + pos: -19.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11143 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11144 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 36.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11145 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11146 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11147 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11148 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11149 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11150 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11151 + components: + - type: Transform + pos: -17.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 11152 + components: + - type: Transform + pos: 33.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11153 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11154 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 11155 + components: + - type: Transform + pos: -20.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 11156 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11157 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11161 + components: + - type: Transform + pos: -19.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 11164 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 11165 + components: + - type: Transform + pos: -18.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 11166 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11167 + components: + - type: Transform + pos: 10.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11169 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,34.5 + parent: 2 + - uid: 11170 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 26.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11171 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 26.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11172 + components: + - type: Transform + pos: 26.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11173 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 11174 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 11175 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 11176 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11177 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,34.5 + parent: 2 + - uid: 11178 + components: + - type: Transform + pos: -4.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11179 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -21.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11180 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11181 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -16.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11182 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11183 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11184 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,24.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11185 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11186 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11187 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11188 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11189 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11190 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11191 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11192 + components: + - type: Transform + pos: 14.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11193 + components: + - type: Transform + pos: 7.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11194 + components: + - type: Transform + pos: 3.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11195 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11196 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11197 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11198 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11199 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11200 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11201 + components: + - type: Transform + pos: -0.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11202 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11203 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,54.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11204 + components: + - type: Transform + pos: -5.5,54.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11205 + components: + - type: Transform + pos: -9.5,54.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11206 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,54.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11207 + components: + - type: Transform + pos: -3.5,56.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11208 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11209 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11210 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,61.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11211 + components: + - type: Transform + pos: -18.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11212 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,60.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11213 + components: + - type: Transform + pos: -26.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11214 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -27.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11215 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,61.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11216 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,61.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11217 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,62.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11218 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,67.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11219 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,66.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11220 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,64.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11221 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11222 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,53.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11223 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,64.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11224 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,53.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11225 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,60.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11226 + components: + - type: Transform + pos: 6.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11227 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11228 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11229 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11230 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 16.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11231 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 16.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11232 + components: + - type: Transform + pos: 16.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11233 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11234 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11235 + components: + - type: Transform + pos: 21.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11236 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11237 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11238 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11239 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11240 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11241 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 23.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11242 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 23.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11243 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11244 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,52.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11245 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11246 + components: + - type: Transform + pos: 31.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11247 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11248 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 39.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11249 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 39.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11250 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11251 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11252 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11253 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11254 + components: + - type: Transform + pos: 22.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11255 + components: + - type: Transform + pos: 22.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11256 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11257 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11258 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11259 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11260 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11261 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 38.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11262 + components: + - type: Transform + pos: 40.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11263 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11264 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 45.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11265 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 46.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11266 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 46.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11267 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 52.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11268 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 62.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11269 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 51.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11270 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 48.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11271 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 48.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11272 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 54.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11273 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 56.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11274 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 56.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11275 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 48.5,22.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11276 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 48.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11277 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 48.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11278 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 48.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11280 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 45.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11281 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11282 + components: + - type: Transform + pos: 40.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11283 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 40.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11284 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,4.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11285 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 34.5,4.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11287 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 64.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11288 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 67.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11289 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 64.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11290 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 64.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11291 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 70.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11292 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 75.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11293 + components: + - type: Transform + pos: 80.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11294 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 69.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11295 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 76.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11296 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 76.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11297 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 80.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11298 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 80.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11299 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 80.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11300 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 80.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11301 + components: + - type: Transform + pos: 76.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11302 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 64.5,55.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11303 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 64.5,56.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11304 + components: + - type: Transform + pos: 64.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11305 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 64.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11306 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 64.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11307 + components: + - type: Transform + pos: 69.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11308 + components: + - type: Transform + pos: 69.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11309 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 64.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11310 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 69.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11311 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11312 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11313 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11314 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11315 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11316 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11317 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11318 + components: + - type: Transform + pos: -2.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11319 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11320 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11321 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 11323 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11324 + components: + - type: Transform + pos: -4.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11325 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11326 + components: + - type: Transform + pos: 1.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11327 + components: + - type: Transform + pos: -7.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11328 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,56.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11329 + components: + - type: Transform + pos: -7.5,56.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11330 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,56.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11331 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11332 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11333 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11334 + components: + - type: Transform + pos: -13.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11335 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,61.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11336 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11337 + components: + - type: Transform + pos: -19.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11338 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -17.5,60.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11339 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,67.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11340 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,67.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11341 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,62.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11342 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,62.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11343 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,60.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11344 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,54.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11345 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,52.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11346 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,52.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11347 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 13.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11348 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11349 + components: + - type: Transform + pos: 7.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11350 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11351 + components: + - type: Transform + pos: 8.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11352 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11353 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11354 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11355 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11356 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11357 + components: + - type: Transform + pos: 11.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11358 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 14.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11359 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 18.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11360 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 18.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11361 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 23.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11362 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 23.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11363 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11364 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11365 + components: + - type: Transform + pos: 14.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11366 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 13.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11367 + components: + - type: Transform + pos: -28.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11368 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11369 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -29.5,60.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11370 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11371 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11372 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11373 + components: + - type: Transform + pos: 4.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11374 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11375 + components: + - type: Transform + pos: -2.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11376 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11377 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11378 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11379 + components: + - type: Transform + pos: 26.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11380 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11381 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11382 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11383 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11384 + components: + - type: Transform + pos: 39.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11385 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 33.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11386 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11387 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 33.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11388 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11389 + components: + - type: Transform + pos: 13.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11390 + components: + - type: Transform + pos: 22.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11391 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11392 + components: + - type: Transform + pos: 23.5,54.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11393 + components: + - type: Transform + pos: 42.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11394 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 47.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11395 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 47.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11396 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 52.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11397 + components: + - type: Transform + pos: 53.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11398 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 52.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11399 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 52.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11400 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 52.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11401 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 60.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11402 + components: + - type: Transform + pos: 54.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11403 + components: + - type: Transform + pos: 50.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11404 + components: + - type: Transform + pos: 47.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11405 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 54.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11406 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 55.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11407 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 46.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11408 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 46.5,22.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11409 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 46.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11410 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 46.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11411 + components: + - type: Transform + pos: 49.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11412 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 46.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11413 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 50.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11415 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 41.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11416 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11417 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11418 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,5.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11419 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,3.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11421 + components: + - type: Transform + pos: 68.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11422 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 66.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11423 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 66.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11424 + components: + - type: Transform + pos: 70.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11425 + components: + - type: Transform + pos: 75.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11426 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 82.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11427 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 70.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11428 + components: + - type: Transform + pos: 76.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11429 + components: + - type: Transform + pos: 75.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11430 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 82.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11431 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 82.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11432 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 82.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11433 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 82.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11434 + components: + - type: Transform + pos: 78.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11435 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 66.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11436 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 66.5,24.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11437 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 66.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11438 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 71.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11439 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 66.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11440 + components: + - type: Transform + pos: 68.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11441 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 66.5,56.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11442 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 66.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11443 + components: + - type: Transform + pos: 66.5,60.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11444 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 23.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11445 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11446 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11447 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11448 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11449 + components: + - type: Transform + pos: -22.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11450 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,11.5 + parent: 2 + - uid: 11451 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11452 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11453 + components: + - type: Transform + pos: -27.5,11.5 + parent: 2 + - uid: 11454 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,14.5 + parent: 2 + - uid: 11455 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11456 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,12.5 + parent: 2 + - uid: 11457 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -28.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11458 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -28.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11459 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11460 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -30.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11461 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -32.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11462 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -31.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11463 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11464 + components: + - type: Transform + pos: -29.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11465 + components: + - type: Transform + pos: -22.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11466 + components: + - type: Transform + pos: -31.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11467 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11468 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,15.5 + parent: 2 + - uid: 11469 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -27.5,15.5 + parent: 2 + - uid: 11470 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,15.5 + parent: 2 + - uid: 11471 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,14.5 + parent: 2 + - uid: 11472 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11473 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11474 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11475 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -33.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11476 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11604 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,66.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11987 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12867 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,67.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14075 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 54.5,6.5 + parent: 2 + - uid: 16718 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 52.5,4.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 18482 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 32.5,-45.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 18483 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,-45.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 18486 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,-47.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 18488 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 28.5,-47.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 18490 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,-34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 18492 + components: + - type: Transform + pos: 34.5,-32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 18499 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,-24.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 18508 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,-30.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 18510 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,-32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 18515 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,-33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 18597 + components: + - type: Transform + pos: 29.5,-37.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 18930 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19288 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 53.5,3.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19294 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 49.5,-2.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19296 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 49.5,-3.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19315 + components: + - type: Transform + pos: 53.5,4.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19391 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,74.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19399 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,73.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19624 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 19645 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 29.5,-18.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 19646 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,-20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19660 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,-30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19663 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,-31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19669 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,-37.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19674 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,-36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19678 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,-38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19684 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,-43.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 20157 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,-37.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' +- proto: GasPort + entities: + - uid: 319 + components: + - type: Transform + pos: 51.5,7.5 + parent: 2 + - uid: 11479 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -27.5,10.5 + parent: 2 + - uid: 11480 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11483 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11484 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11485 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11486 + components: + - type: Transform + pos: 20.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11487 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,9.5 + parent: 2 + - uid: 11488 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,11.5 + parent: 2 + - uid: 11489 + components: + - type: Transform + pos: 38.5,7.5 + parent: 2 + - uid: 11490 + components: + - type: Transform + pos: 39.5,7.5 + parent: 2 + - uid: 11491 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 38.5,12.5 + parent: 2 + - uid: 11492 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,31.5 + parent: 2 + - uid: 11493 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,30.5 + parent: 2 + - uid: 11494 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,25.5 + parent: 2 + - uid: 11495 + components: + - type: Transform + pos: 9.5,38.5 + parent: 2 + - uid: 11496 + components: + - type: Transform + pos: -35.5,28.5 + parent: 2 + - uid: 18431 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,-34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 18432 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,-35.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 18635 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 18637 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 18638 + components: + - type: Transform + pos: -4.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 18639 + components: + - type: Transform + pos: -5.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 18926 + components: + - type: Transform + pos: -18.5,28.5 + parent: 2 + - uid: 18927 + components: + - type: Transform + pos: -19.5,28.5 + parent: 2 + - uid: 19309 + components: + - type: Transform + pos: 51.5,-2.5 + parent: 2 + - uid: 19616 + components: + - type: Transform + pos: 28.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 19694 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,-48.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 19695 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,-48.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' +- proto: GasPressurePump + entities: + - uid: 11505 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 11507 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 11508 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11509 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,37.5 + parent: 2 + - uid: 11510 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,9.5 + parent: 2 + - uid: 11511 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 33.5,11.5 + parent: 2 + - uid: 11512 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -25.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11513 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11514 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -29.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11515 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -30.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#9D00E0FF' + - uid: 11516 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11517 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11518 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11519 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11520 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11521 + components: + - type: Transform + pos: -28.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11522 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11523 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11524 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -31.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11525 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -27.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11526 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -25.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11527 + components: + - type: Transform + pos: -28.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11528 + components: + - type: Transform + pos: -26.5,16.5 + parent: 2 + - uid: 11529 + components: + - type: MetaData + name: supermatter loop pump + - type: Transform + rot: 3.141592653589793 rad + pos: -27.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 11531 + components: + - type: Transform + pos: -26.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11532 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 11533 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11534 + components: + - type: Transform + pos: -24.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11535 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -30.5,24.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11536 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#EAC300FF' + - uid: 11537 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,27.5 + parent: 2 + - uid: 11709 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -21.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 18484 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,-46.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 18485 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,-46.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 18928 + components: + - type: Transform + pos: -19.5,27.5 + parent: 2 + - uid: 18929 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,27.5 + parent: 2 + - uid: 19308 + components: + - type: Transform + pos: 51.5,-3.5 + parent: 2 + - uid: 19628 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,-24.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 19672 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,-37.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' +- proto: GasThermoMachineFreezer + entities: + - uid: 11481 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,25.5 + parent: 2 + - uid: 11538 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,25.5 + parent: 2 + - uid: 11540 + components: + - type: Transform + pos: 11.5,35.5 + parent: 2 + - uid: 11541 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 38.5,6.5 + parent: 2 + - uid: 11542 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,12.5 + parent: 2 +- proto: GasThermoMachineFreezerEnabled + entities: + - uid: 10303 + components: + - type: Transform + pos: 52.5,7.5 + parent: 2 + - uid: 18473 + components: + - type: Transform + pos: 32.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 18474 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,-48.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 18475 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,-48.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' +- proto: GasThermoMachineHeater + entities: + - uid: 11543 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 39.5,6.5 + parent: 2 + - uid: 11544 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,14.5 + parent: 2 +- proto: GasValve + entities: + - uid: 11499 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -18.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 11504 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 11545 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11546 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11547 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11548 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11549 + components: + - type: Transform + pos: -33.5,26.5 + parent: 2 +- proto: GasVentPump + entities: + - uid: 11550 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11551 + components: + - type: Transform + pos: -25.5,44.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 46 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11552 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11553 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,20.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 55 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11554 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,44.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 72 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11555 + components: + - type: Transform + pos: 28.5,43.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 72 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11556 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,39.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 72 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11557 + components: + - type: Transform + pos: 28.5,41.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 72 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11558 + components: + - type: Transform + pos: -4.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11559 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,12.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 21 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11560 + components: + - type: Transform + pos: -21.5,18.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 44 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11561 + components: + - type: Transform + pos: -17.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11562 + components: + - type: Transform + pos: -16.5,19.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 41 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11563 + components: + - type: Transform + pos: -9.5,22.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 39 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11564 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,24.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 18 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11565 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,34.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 18 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11566 + components: + - type: Transform + pos: -4.5,34.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 37 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11567 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,27.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 43 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11568 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11569 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,34.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 38 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11570 + components: + - type: Transform + pos: -18.5,44.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 48 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11571 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,43.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 49 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11572 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 14.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11573 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,16.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 20 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11574 + components: + - type: Transform + pos: 1.5,17.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 54 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11575 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,5.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 53 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11576 + components: + - type: Transform + pos: -3.5,15.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 80 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11577 + components: + - type: Transform + pos: -5.5,8.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 52 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11578 + components: + - type: Transform + pos: -10.5,13.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 53 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11579 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,7.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 51 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11580 + components: + - type: Transform + pos: -4.5,43.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 82 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11581 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,43.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 82 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11582 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,45.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 22 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11583 + components: + - type: Transform + pos: -8.5,48.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 17 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11584 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,51.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11585 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,51.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11586 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,52.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 24 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11587 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,52.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 24 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11588 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,52.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 24 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11589 + components: + - type: Transform + pos: -1.5,60.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 34 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11590 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,57.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 25 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11591 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,60.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11592 + components: + - type: Transform + pos: -14.5,69.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 27 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11593 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,52.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 33 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11594 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,52.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 32 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11595 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,60.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 30 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11596 + components: + - type: Transform + pos: -22.5,69.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 30 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11597 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,50.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 29 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11598 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,61.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 28 + - 19588 + - 8512 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11599 + components: + - type: Transform + pos: -27.5,68.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 28 + - 19588 + - 8512 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11600 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -38.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11601 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,61.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 28 + - 19588 + - 8512 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11602 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -31.5,56.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 29 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11603 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,62.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 26 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11605 + components: + - type: Transform + pos: -7.5,67.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 26 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11606 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,63.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 35 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11607 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11608 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,66.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 35 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11609 + components: + - type: Transform + pos: 4.5,71.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 36 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11610 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.5,66.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 35 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11611 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,53.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 16 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11612 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,60.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11613 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,61.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11614 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,44.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 68 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11615 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,39.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 68 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11616 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,29.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 76 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11617 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.5,33.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 67 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11618 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,26.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 76 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11619 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 17.5,25.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 67 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11620 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,30.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 67 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11621 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,30.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 77 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11622 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11623 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11624 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,37.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 69 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11625 + components: + - type: Transform + pos: 12.5,48.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 22 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11626 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,43.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 70 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11627 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 16.5,44.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 70 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11628 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 20.5,37.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 71 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11629 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,32.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 77 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11630 + components: + - type: Transform + pos: 23.5,45.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 72 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11631 + components: + - type: Transform + pos: 16.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11632 + components: + - type: Transform + pos: 20.5,53.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 23 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11633 + components: + - type: Transform + pos: 30.5,54.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11634 + components: + - type: Transform + pos: 32.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11635 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11636 + components: + - type: Transform + pos: 39.5,53.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 78 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11637 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,43.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 12 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11638 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,45.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 12 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11639 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 40.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11640 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,41.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 14 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11641 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 22.5,13.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 56 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11642 + components: + - type: Transform + pos: 24.5,20.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 55 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11643 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11644 + components: + - type: Transform + pos: 32.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11645 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 40.5,38.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 12 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11646 + components: + - type: Transform + pos: 38.5,34.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 14 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11647 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11648 + components: + - type: Transform + pos: 45.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11649 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 45.5,39.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 11 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11650 + components: + - type: Transform + pos: 46.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11651 + components: + - type: Transform + pos: 52.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11652 + components: + - type: Transform + pos: 52.5,34.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 10 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11653 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 55.5,37.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 10 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11654 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 61.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11655 + components: + - type: Transform + pos: 62.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11656 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 54.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11657 + components: + - type: Transform + pos: 50.5,52.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11658 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 60.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11659 + components: + - type: Transform + pos: 51.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11660 + components: + - type: Transform + pos: 48.5,30.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 58 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11661 + components: + - type: Transform + pos: 54.5,26.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 57 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11662 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 57.5,19.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 60 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11663 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 47.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11664 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 52.5,22.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11665 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 52.5,18.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 63 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11666 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 49.5,10.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 62 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11669 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 45.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11670 + components: + - type: Transform + pos: 42.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11671 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11672 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,11.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 65 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11673 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 49.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11674 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 36.5,-0.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11675 + components: + - type: Transform + pos: 34.5,5.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 66 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11676 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,0.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 64 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11678 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 70.5,28.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 18626 + - 18627 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11679 + components: + - type: Transform + pos: 67.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11680 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 65.5,44.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 4 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11681 + components: + - type: Transform + pos: 70.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11682 + components: + - type: Transform + pos: 75.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11683 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 81.5,42.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 5 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11684 + components: + - type: Transform + pos: 76.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11685 + components: + - type: Transform + pos: 76.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11686 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 81.5,34.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 5 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11687 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 75.5,31.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 7 + - 5 + - 18626 + - 18627 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11688 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 76.5,25.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 7 + - 18626 + - 18627 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11689 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 80.5,24.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11690 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 67.5,55.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11691 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 60.5,56.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11692 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 59.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11693 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 74.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11694 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 65.5,27.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 4 + - 8 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11695 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 70.5,19.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 8 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11696 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 69.5,14.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 8 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11697 + components: + - type: Transform + pos: 69.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11698 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 64.5,3.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 9 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11699 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 72.5,0.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 9 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11700 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,1.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 51 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11701 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,-5.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 51 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11702 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,32.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 67 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11703 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,17.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 44 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11829 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 55.5,7.5 + parent: 2 + - uid: 13233 + components: + - type: Transform + pos: -9.5,68.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 26 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 18476 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 18478 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.5,-37.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 20121 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 18479 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.5,-33.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 20149 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 18493 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 34.5,-33.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 20123 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 18495 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,-18.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 18496 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-24.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 20122 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 18497 + components: + - type: Transform + pos: 30.5,-22.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 18672 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 55.5,6.5 + parent: 2 + - uid: 19083 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 28.5,-30.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 20124 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19084 + components: + - type: Transform + pos: 29.5,-15.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 19355 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 50.5,-7.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 62 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19356 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 47.5,-3.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 62 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19357 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 47.5,-0.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 62 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19358 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 47.5,2.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 62 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19359 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 55.5,2.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 62 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19360 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 55.5,-0.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 62 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19361 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 55.5,-3.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 62 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19362 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 50.5,3.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 62 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19383 + components: + - type: Transform + pos: -31.5,68.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 19588 + - 8512 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19400 + components: + - type: Transform + pos: -28.5,75.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 19589 + - 19586 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19403 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,74.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 19587 + - 19590 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19690 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 29.5,-44.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 19691 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,-45.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 19692 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,-44.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 19693 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,-45.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 19708 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 26.5,-29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 19709 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 20156 + components: + - type: Transform + pos: 28.5,-36.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 20125 + - 20128 + - type: AtmosPipeColor + color: '#0000FFFF' +- proto: GasVentScrubber + entities: + - uid: 11706 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11707 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11711 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,44.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 46 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11712 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,11.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 21 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11713 + components: + - type: Transform + pos: -19.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11714 + components: + - type: Transform + pos: -15.5,20.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 41 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11715 + components: + - type: Transform + pos: -10.5,22.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 39 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11716 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,25.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 18 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11717 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,35.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 18 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11718 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,35.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 37 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11719 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11720 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,26.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 43 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11721 + components: + - type: Transform + pos: -9.5,36.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 38 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11722 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,43.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 49 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11723 + components: + - type: Transform + pos: -22.5,44.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 48 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11724 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,44.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 82 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11725 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,45.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 82 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11726 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11727 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,48.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 17 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11728 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,52.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11729 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,52.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11730 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,52.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 24 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11731 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,52.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 24 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11732 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,52.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 24 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11733 + components: + - type: Transform + pos: -5.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11734 + components: + - type: Transform + pos: -0.5,60.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 34 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11735 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11736 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,56.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 25 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11737 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,61.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 26 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11738 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -19.5,60.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 27 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11739 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,52.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 33 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11740 + components: + - type: Transform + pos: -17.5,69.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 27 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11741 + components: + - type: Transform + pos: -11.5,68.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 26 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11742 + components: + - type: Transform + pos: -5.5,68.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 26 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11743 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,62.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 35 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11744 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,52.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11745 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,60.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 30 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11746 + components: + - type: Transform + pos: -24.5,69.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 30 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11747 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,68.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 35 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11748 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.5,68.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 35 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11749 + components: + - type: Transform + pos: 6.5,71.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 36 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11750 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,52.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 16 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11751 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11752 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,62.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 16 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11753 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11754 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,39.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 68 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11755 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,28.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 76 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11756 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 13.5,37.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 69 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11757 + components: + - type: Transform + pos: 11.5,32.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 67 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11758 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,26.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 76 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11759 + components: + - type: Transform + pos: 15.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11760 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,26.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 67 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11761 + components: + - type: Transform + pos: 14.5,22.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11762 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,31.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 77 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11763 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11764 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,24.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11765 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,33.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 77 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11766 + components: + - type: Transform + pos: 18.5,37.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 71 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11767 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,38.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 72 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11768 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,45.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 72 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11769 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 16.5,41.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 70 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11770 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,45.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 70 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11771 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,50.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11772 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -28.5,60.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 28 + - 29 + - 19588 + - 8512 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11773 + components: + - type: Transform + pos: -29.5,68.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 28 + - 19588 + - 8512 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11774 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,60.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 28 + - 29 + - 19588 + - 8512 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11775 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,56.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 29 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11776 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,16.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 20 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11777 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,15.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 54 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11778 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,5.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 53 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11779 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,5.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 52 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11780 + components: + - type: Transform + pos: -5.5,15.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 80 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11781 + components: + - type: Transform + pos: -11.5,13.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 53 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11782 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,6.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 51 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11783 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.5,20.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 55 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11784 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,13.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 56 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11785 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.5,20.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 55 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11786 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 32.5,27.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 14 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11787 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 32.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11788 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 39.5,34.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 14 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11789 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 40.5,39.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 12 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11790 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 32.5,40.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 14 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11791 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,43.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 12 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11792 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11793 + components: + - type: Transform + pos: 31.5,54.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11794 + components: + - type: Transform + pos: 41.5,53.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 78 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11795 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,43.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 12 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11796 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,48.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 22 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11797 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 22.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11798 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 23.5,53.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11799 + components: + - type: Transform + pos: 18.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11800 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11801 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 47.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11802 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 48.5,39.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 11 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11803 + components: + - type: Transform + pos: 47.5,48.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 11 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11804 + components: + - type: Transform + pos: 49.5,52.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11805 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 53.5,34.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 10 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11806 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 53.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11807 + components: + - type: Transform + pos: 52.5,49.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 13 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11808 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 53.5,37.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 10 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11809 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 61.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11810 + components: + - type: Transform + pos: 60.5,43.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 10 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11811 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 50.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11812 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 60.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11813 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 47.5,30.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 58 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11814 + components: + - type: Transform + pos: 55.5,28.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 57 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11815 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 55.5,19.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 60 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11816 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 47.5,22.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11817 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 52.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11818 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 52.5,17.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 63 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11819 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11820 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 49.5,9.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 62 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11822 + components: + - type: Transform + pos: 41.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11823 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11824 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 40.5,9.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 65 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11825 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,5.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 66 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11826 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 35.5,-0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11828 + components: + - type: Transform + pos: 29.5,0.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 64 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11830 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 68.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11831 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 65.5,43.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 4 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11832 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 70.5,44.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 6 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11833 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 75.5,44.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 6 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11834 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 81.5,43.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 6 + - 5 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11835 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 76.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11836 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 75.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11837 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 83.5,34.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 5 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11838 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 77.5,29.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 7 + - 5 + - 18626 + - 18627 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11839 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 78.5,25.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 7 + - 18626 + - 18627 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11840 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 82.5,24.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11841 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 65.5,29.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 4 + - 8 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11842 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 70.5,24.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 18626 + - 18627 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11843 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 70.5,18.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 8 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11844 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 71.5,14.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 8 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11845 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 68.5,10.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 9 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11846 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 66.5,3.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 9 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11847 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 74.5,0.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 9 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11848 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 67.5,56.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 3 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11849 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 60.5,57.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 3 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11850 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 59.5,60.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 3 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11851 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 74.5,60.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 3 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11852 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,0.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 51 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11853 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -16.5,-5.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 51 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11854 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,34.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 67 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11855 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -38.5,27.5 + parent: 2 + - uid: 11856 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,19.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 44 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11857 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,19.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 44 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 18453 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 18598 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,-36.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 20125 + - 20128 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19347 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 47.5,4.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 62 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19348 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 47.5,1.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 62 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19349 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 47.5,-1.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 62 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19350 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 55.5,-1.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 62 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19351 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 55.5,1.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 62 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19352 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 55.5,4.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 62 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19353 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 52.5,3.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 62 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19354 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 52.5,-7.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 62 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19382 + components: + - type: Transform + pos: -33.5,68.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 19588 + - 8512 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19401 + components: + - type: Transform + pos: -32.5,75.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 19589 + - 19586 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19402 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,73.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 19587 + - 19590 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19626 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,-30.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 20124 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19627 + components: + - type: Transform + pos: 29.5,-25.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 20122 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19641 + components: + - type: Transform + pos: 31.5,-15.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19642 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,-20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19675 + components: + - type: Transform + pos: 35.5,-35.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 20123 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19687 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 28.5,-43.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19688 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,-43.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 19689 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 20148 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.5,-31.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 20149 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 20150 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.5,-36.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 20121 + - type: AtmosPipeColor + color: '#FF0000FF' +- proto: GasVolumePump + entities: + - uid: 3462 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 11109 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 11497 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 11498 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 11503 + components: + - type: Transform + pos: -20.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' + - uid: 11506 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#17D8D2FF' +- proto: Gateway + entities: + - uid: 11860 + components: + - type: Transform + pos: 34.5,54.5 + parent: 2 +- proto: GeigerCounterWallMount + entities: + - uid: 8529 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 32.5,9.5 + parent: 2 + - uid: 11861 + components: + - type: Transform + pos: -17.5,35.5 + parent: 2 +- proto: GeneratorBasic15kW + entities: + - uid: 17178 + components: + - type: Transform + pos: 34.5,-31.5 + parent: 2 + - uid: 18133 + components: + - type: Transform + pos: 35.5,-31.5 + parent: 2 +- proto: Girder + entities: + - uid: 11868 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,7.5 + parent: 2 + - uid: 11869 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,64.5 + parent: 2 +- proto: GlimmerProber + entities: + - uid: 11870 + components: + - type: Transform + pos: 25.5,1.5 + parent: 2 +- proto: GravityGenerator + entities: + - uid: 11871 + components: + - type: Transform + pos: -20.5,45.5 + parent: 2 +- proto: GrenadeFlashBang + entities: + - uid: 11872 + components: + - type: Transform + pos: -17.658485,67.52475 + parent: 2 + - uid: 11873 + components: + - type: Transform + pos: -17.497086,67.48891 + parent: 2 + - uid: 11874 + components: + - type: Transform + pos: -17.443285,67.50683 + parent: 2 + - uid: 11875 + components: + - type: Transform + pos: -17.281885,67.50683 + parent: 2 + - uid: 11876 + components: + - type: Transform + pos: -17.192219,67.50683 + parent: 2 +- proto: Grille + entities: + - uid: 908 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 67.5,29.5 + parent: 2 + - uid: 3482 + components: + - type: Transform + pos: 23.5,-36.5 + parent: 2 + - uid: 3697 + components: + - type: Transform + pos: 23.5,-32.5 + parent: 2 + - uid: 5739 + components: + - type: Transform + pos: 32.5,-22.5 + parent: 2 + - uid: 5740 + components: + - type: Transform + pos: 29.5,-21.5 + parent: 2 + - uid: 5788 + components: + - type: Transform + pos: 33.5,-22.5 + parent: 2 + - uid: 5792 + components: + - type: Transform + pos: 29.5,-22.5 + parent: 2 + - uid: 5795 + components: + - type: Transform + pos: 29.5,-23.5 + parent: 2 + - uid: 5994 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,77.5 + parent: 2 + - uid: 6000 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,76.5 + parent: 2 + - uid: 6001 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,76.5 + parent: 2 + - uid: 6016 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,75.5 + parent: 2 + - uid: 6047 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -33.5,78.5 + parent: 2 + - uid: 6048 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,78.5 + parent: 2 + - uid: 6049 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,78.5 + parent: 2 + - uid: 6050 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,78.5 + parent: 2 + - uid: 6051 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,77.5 + parent: 2 + - uid: 6052 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -28.5,77.5 + parent: 2 + - uid: 6193 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -33.5,77.5 + parent: 2 + - uid: 6655 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.5,78.5 + parent: 2 + - uid: 6675 + components: + - type: Transform + pos: 36.5,-30.5 + parent: 2 + - uid: 6677 + components: + - type: Transform + pos: 29.5,-13.5 + parent: 2 + - uid: 6689 + components: + - type: Transform + pos: 37.5,-36.5 + parent: 2 + - uid: 6751 + components: + - type: Transform + pos: 28.5,-22.5 + parent: 2 + - uid: 6752 + components: + - type: Transform + pos: 27.5,-22.5 + parent: 2 + - uid: 6753 + components: + - type: Transform + pos: 31.5,-13.5 + parent: 2 + - uid: 6762 + components: + - type: Transform + pos: 30.5,-13.5 + parent: 2 + - uid: 6763 + components: + - type: Transform + pos: 37.5,-2.5 + parent: 2 + - uid: 8386 + components: + - type: Transform + pos: 34.5,-0.5 + parent: 2 + - uid: 9299 + components: + - type: Transform + pos: 53.5,7.5 + parent: 2 + - uid: 9950 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,1.5 + parent: 2 + - uid: 11877 + components: + - type: Transform + pos: 6.5,34.5 + parent: 2 + - uid: 11878 + components: + - type: Transform + pos: 17.5,33.5 + parent: 2 + - uid: 11879 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,27.5 + parent: 2 + - uid: 11880 + components: + - type: Transform + pos: 6.5,31.5 + parent: 2 + - uid: 11881 + components: + - type: Transform + pos: 2.5,34.5 + parent: 2 + - uid: 11882 + components: + - type: Transform + pos: 2.5,33.5 + parent: 2 + - uid: 11883 + components: + - type: Transform + pos: 2.5,32.5 + parent: 2 + - uid: 11884 + components: + - type: Transform + pos: -5.5,18.5 + parent: 2 + - uid: 11885 + components: + - type: Transform + pos: 14.5,33.5 + parent: 2 + - uid: 11886 + components: + - type: Transform + pos: 6.5,35.5 + parent: 2 + - uid: 11887 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,22.5 + parent: 2 + - uid: 11888 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,17.5 + parent: 2 + - uid: 11889 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,22.5 + parent: 2 + - uid: 11890 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,31.5 + parent: 2 + - uid: 11891 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,22.5 + parent: 2 + - uid: 11892 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,22.5 + parent: 2 + - uid: 11893 + components: + - type: Transform + pos: -12.5,-0.5 + parent: 2 + - uid: 11894 + components: + - type: Transform + pos: -36.5,11.5 + parent: 2 + - uid: 11895 + components: + - type: Transform + pos: -36.5,9.5 + parent: 2 + - uid: 11896 + components: + - type: Transform + pos: -36.5,21.5 + parent: 2 + - uid: 11897 + components: + - type: Transform + pos: 34.5,51.5 + parent: 2 + - uid: 11898 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,4.5 + parent: 2 + - uid: 11899 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,4.5 + parent: 2 + - uid: 11900 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,27.5 + parent: 2 + - uid: 11901 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,26.5 + parent: 2 + - uid: 11902 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,25.5 + parent: 2 + - uid: 11903 + components: + - type: Transform + pos: 36.5,51.5 + parent: 2 + - uid: 11904 + components: + - type: Transform + pos: -36.5,13.5 + parent: 2 + - uid: 11905 + components: + - type: Transform + pos: -36.5,7.5 + parent: 2 + - uid: 11906 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,19.5 + parent: 2 + - uid: 11907 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -33.5,4.5 + parent: 2 + - uid: 11908 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,4.5 + parent: 2 + - uid: 11909 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,15.5 + parent: 2 + - uid: 11910 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,17.5 + parent: 2 + - uid: 11911 + components: + - type: Transform + pos: -12.5,0.5 + parent: 2 + - uid: 11912 + components: + - type: Transform + pos: -12.5,1.5 + parent: 2 + - uid: 11913 + components: + - type: Transform + pos: -12.5,-0.5 + parent: 2 + - uid: 11914 + components: + - type: Transform + pos: -12.5,-0.5 + parent: 2 + - uid: 11915 + components: + - type: Transform + pos: -20.5,47.5 + parent: 2 + - uid: 11916 + components: + - type: Transform + pos: 34.5,50.5 + parent: 2 + - uid: 11917 + components: + - type: Transform + pos: 0.5,2.5 + parent: 2 + - uid: 11918 + components: + - type: Transform + pos: 0.5,0.5 + parent: 2 + - uid: 11919 + components: + - type: Transform + pos: -2.5,0.5 + parent: 2 + - uid: 11920 + components: + - type: Transform + pos: -2.5,1.5 + parent: 2 + - uid: 11921 + components: + - type: Transform + pos: -2.5,2.5 + parent: 2 + - uid: 11922 + components: + - type: Transform + pos: -3.5,2.5 + parent: 2 + - uid: 11923 + components: + - type: Transform + pos: 3.5,0.5 + parent: 2 + - uid: 11924 + components: + - type: Transform + pos: 3.5,1.5 + parent: 2 + - uid: 11925 + components: + - type: Transform + pos: 3.5,2.5 + parent: 2 + - uid: 11926 + components: + - type: Transform + pos: 4.5,2.5 + parent: 2 + - uid: 11927 + components: + - type: Transform + pos: -11.5,3.5 + parent: 2 + - uid: 11928 + components: + - type: Transform + pos: -10.5,3.5 + parent: 2 + - uid: 11929 + components: + - type: Transform + pos: -9.5,3.5 + parent: 2 + - uid: 11930 + components: + - type: Transform + pos: 5.5,15.5 + parent: 2 + - uid: 11931 + components: + - type: Transform + pos: 6.5,14.5 + parent: 2 + - uid: 11932 + components: + - type: Transform + pos: 8.5,14.5 + parent: 2 + - uid: 11933 + components: + - type: Transform + pos: 10.5,14.5 + parent: 2 + - uid: 11934 + components: + - type: Transform + pos: 12.5,14.5 + parent: 2 + - uid: 11935 + components: + - type: Transform + pos: 5.5,12.5 + parent: 2 + - uid: 11936 + components: + - type: Transform + pos: 9.5,13.5 + parent: 2 + - uid: 11937 + components: + - type: Transform + pos: -7.5,13.5 + parent: 2 + - uid: 11938 + components: + - type: Transform + pos: -7.5,12.5 + parent: 2 + - uid: 11939 + components: + - type: Transform + pos: -6.5,12.5 + parent: 2 + - uid: 11940 + components: + - type: Transform + pos: -5.5,12.5 + parent: 2 + - uid: 11941 + components: + - type: Transform + pos: -3.5,12.5 + parent: 2 + - uid: 11942 + components: + - type: Transform + pos: 2.5,17.5 + parent: 2 + - uid: 11943 + components: + - type: Transform + pos: 2.5,15.5 + parent: 2 + - uid: 11944 + components: + - type: Transform + pos: 2.5,14.5 + parent: 2 + - uid: 11945 + components: + - type: Transform + pos: 0.5,13.5 + parent: 2 + - uid: 11946 + components: + - type: Transform + pos: -0.5,13.5 + parent: 2 + - uid: 11947 + components: + - type: Transform + pos: 3.5,18.5 + parent: 2 + - uid: 11948 + components: + - type: Transform + pos: 6.5,18.5 + parent: 2 + - uid: 11949 + components: + - type: Transform + pos: 9.5,18.5 + parent: 2 + - uid: 11950 + components: + - type: Transform + pos: 12.5,18.5 + parent: 2 + - uid: 11951 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,23.5 + parent: 2 + - uid: 11952 + components: + - type: Transform + pos: -1.5,25.5 + parent: 2 + - uid: 11953 + components: + - type: Transform + pos: -4.5,22.5 + parent: 2 + - uid: 11954 + components: + - type: Transform + pos: 8.5,26.5 + parent: 2 + - uid: 11955 + components: + - type: Transform + pos: 8.5,27.5 + parent: 2 + - uid: 11956 + components: + - type: Transform + pos: 9.5,27.5 + parent: 2 + - uid: 11957 + components: + - type: Transform + pos: 9.5,29.5 + parent: 2 + - uid: 11958 + components: + - type: Transform + pos: 9.5,30.5 + parent: 2 + - uid: 11959 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,24.5 + parent: 2 + - uid: 11960 + components: + - type: Transform + pos: 10.5,29.5 + parent: 2 + - uid: 11961 + components: + - type: Transform + pos: 11.5,29.5 + parent: 2 + - uid: 11962 + components: + - type: Transform + pos: -6.5,21.5 + parent: 2 + - uid: 11963 + components: + - type: Transform + pos: 17.5,23.5 + parent: 2 + - uid: 11964 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,29.5 + parent: 2 + - uid: 11965 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 23.5,29.5 + parent: 2 + - uid: 11966 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,22.5 + parent: 2 + - uid: 11967 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,27.5 + parent: 2 + - uid: 11968 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,29.5 + parent: 2 + - uid: 11969 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,31.5 + parent: 2 + - uid: 11970 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,34.5 + parent: 2 + - uid: 11971 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,30.5 + parent: 2 + - uid: 11972 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,31.5 + parent: 2 + - uid: 11973 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,34.5 + parent: 2 + - uid: 11974 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,35.5 + parent: 2 + - uid: 11975 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,36.5 + parent: 2 + - uid: 11976 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,37.5 + parent: 2 + - uid: 11977 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,38.5 + parent: 2 + - uid: 11978 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,39.5 + parent: 2 + - uid: 11979 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,33.5 + parent: 2 + - uid: 11980 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,36.5 + parent: 2 + - uid: 11981 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,36.5 + parent: 2 + - uid: 11982 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,42.5 + parent: 2 + - uid: 11983 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,42.5 + parent: 2 + - uid: 11984 + components: + - type: Transform + pos: 8.5,42.5 + parent: 2 + - uid: 11985 + components: + - type: Transform + pos: 2.5,38.5 + parent: 2 + - uid: 11986 + components: + - type: Transform + pos: 2.5,40.5 + parent: 2 + - uid: 11988 + components: + - type: Transform + pos: -6.5,24.5 + parent: 2 + - uid: 11989 + components: + - type: Transform + pos: -13.5,20.5 + parent: 2 + - uid: 11990 + components: + - type: Transform + pos: -13.5,18.5 + parent: 2 + - uid: 11991 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,16.5 + parent: 2 + - uid: 11992 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,20.5 + parent: 2 + - uid: 11993 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,12.5 + parent: 2 + - uid: 11994 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,6.5 + parent: 2 + - uid: 11995 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,6.5 + parent: 2 + - uid: 11996 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,5.5 + parent: 2 + - uid: 11997 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,4.5 + parent: 2 + - uid: 11998 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,5.5 + parent: 2 + - uid: 11999 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,4.5 + parent: 2 + - uid: 12000 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,19.5 + parent: 2 + - uid: 12001 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,17.5 + parent: 2 + - uid: 12002 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,19.5 + parent: 2 + - uid: 12003 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,15.5 + parent: 2 + - uid: 12004 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,12.5 + parent: 2 + - uid: 12005 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,11.5 + parent: 2 + - uid: 12006 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,4.5 + parent: 2 + - uid: 12007 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,4.5 + parent: 2 + - uid: 12008 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,8.5 + parent: 2 + - uid: 12009 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,28.5 + parent: 2 + - uid: 12010 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,34.5 + parent: 2 + - uid: 12011 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,34.5 + parent: 2 + - uid: 12012 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,36.5 + parent: 2 + - uid: 12013 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,32.5 + parent: 2 + - uid: 12014 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,31.5 + parent: 2 + - uid: 12015 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,29.5 + parent: 2 + - uid: 12016 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,27.5 + parent: 2 + - uid: 12017 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,28.5 + parent: 2 + - uid: 12018 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,29.5 + parent: 2 + - uid: 12019 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,33.5 + parent: 2 + - uid: 12020 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,35.5 + parent: 2 + - uid: 12021 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,37.5 + parent: 2 + - uid: 12022 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,42.5 + parent: 2 + - uid: 12023 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,42.5 + parent: 2 + - uid: 12024 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,48.5 + parent: 2 + - uid: 12025 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,44.5 + parent: 2 + - uid: 12026 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,47.5 + parent: 2 + - uid: 12027 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,31.5 + parent: 2 + - uid: 12028 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,31.5 + parent: 2 + - uid: 12029 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,31.5 + parent: 2 + - uid: 12030 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,29.5 + parent: 2 + - uid: 12031 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,33.5 + parent: 2 + - uid: 12032 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,39.5 + parent: 2 + - uid: 12033 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,40.5 + parent: 2 + - uid: 12034 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,41.5 + parent: 2 + - uid: 12035 + components: + - type: Transform + pos: -18.5,50.5 + parent: 2 + - uid: 12036 + components: + - type: Transform + pos: -19.5,50.5 + parent: 2 + - uid: 12037 + components: + - type: Transform + pos: -13.5,50.5 + parent: 2 + - uid: 12038 + components: + - type: Transform + pos: -16.5,54.5 + parent: 2 + - uid: 12039 + components: + - type: Transform + pos: -16.5,55.5 + parent: 2 + - uid: 12040 + components: + - type: Transform + pos: -20.5,56.5 + parent: 2 + - uid: 12041 + components: + - type: Transform + pos: -14.5,53.5 + parent: 2 + - uid: 12042 + components: + - type: Transform + pos: -9.5,50.5 + parent: 2 + - uid: 12043 + components: + - type: Transform + pos: -8.5,50.5 + parent: 2 + - uid: 12044 + components: + - type: Transform + pos: -7.5,50.5 + parent: 2 + - uid: 12045 + components: + - type: Transform + pos: -5.5,50.5 + parent: 2 + - uid: 12046 + components: + - type: Transform + pos: -4.5,50.5 + parent: 2 + - uid: 12047 + components: + - type: Transform + pos: -3.5,50.5 + parent: 2 + - uid: 12048 + components: + - type: Transform + pos: -1.5,50.5 + parent: 2 + - uid: 12049 + components: + - type: Transform + pos: -0.5,50.5 + parent: 2 + - uid: 12050 + components: + - type: Transform + pos: 0.5,50.5 + parent: 2 + - uid: 12051 + components: + - type: Transform + pos: 0.5,53.5 + parent: 2 + - uid: 12052 + components: + - type: Transform + pos: -1.5,53.5 + parent: 2 + - uid: 12053 + components: + - type: Transform + pos: -3.5,53.5 + parent: 2 + - uid: 12054 + components: + - type: Transform + pos: -5.5,53.5 + parent: 2 + - uid: 12055 + components: + - type: Transform + pos: -7.5,53.5 + parent: 2 + - uid: 12056 + components: + - type: Transform + pos: -9.5,53.5 + parent: 2 + - uid: 12057 + components: + - type: Transform + pos: -24.5,50.5 + parent: 2 + - uid: 12058 + components: + - type: Transform + pos: -23.5,50.5 + parent: 2 + - uid: 12059 + components: + - type: Transform + pos: -22.5,50.5 + parent: 2 + - uid: 12060 + components: + - type: Transform + pos: -21.5,47.5 + parent: 2 + - uid: 12061 + components: + - type: Transform + pos: -19.5,47.5 + parent: 2 + - uid: 12062 + components: + - type: Transform + pos: -24.5,56.5 + parent: 2 + - uid: 12063 + components: + - type: Transform + pos: -22.5,56.5 + parent: 2 + - uid: 12064 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.5,51.5 + parent: 2 + - uid: 12065 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.5,53.5 + parent: 2 + - uid: 12066 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -33.5,52.5 + parent: 2 + - uid: 12067 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,55.5 + parent: 2 + - uid: 12068 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -39.5,58.5 + parent: 2 + - uid: 12069 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -37.5,58.5 + parent: 2 + - uid: 12077 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,67.5 + parent: 2 + - uid: 12078 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,68.5 + parent: 2 + - uid: 12080 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,72.5 + parent: 2 + - uid: 12081 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,72.5 + parent: 2 + - uid: 12082 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,72.5 + parent: 2 + - uid: 12084 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,69.5 + parent: 2 + - uid: 12086 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,71.5 + parent: 2 + - uid: 12087 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,71.5 + parent: 2 + - uid: 12088 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,71.5 + parent: 2 + - uid: 12089 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,71.5 + parent: 2 + - uid: 12091 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,69.5 + parent: 2 + - uid: 12092 + components: + - type: Transform + pos: 4.5,79.5 + parent: 2 + - uid: 12093 + components: + - type: Transform + pos: 2.5,79.5 + parent: 2 + - uid: 12094 + components: + - type: Transform + pos: 3.5,79.5 + parent: 2 + - uid: 12095 + components: + - type: Transform + pos: 1.5,79.5 + parent: 2 + - uid: 12096 + components: + - type: Transform + pos: 8.5,80.5 + parent: 2 + - uid: 12097 + components: + - type: Transform + pos: 7.5,80.5 + parent: 2 + - uid: 12098 + components: + - type: Transform + pos: 9.5,80.5 + parent: 2 + - uid: 12099 + components: + - type: Transform + pos: -2.5,74.5 + parent: 2 + - uid: 12100 + components: + - type: Transform + pos: -2.5,75.5 + parent: 2 + - uid: 12101 + components: + - type: Transform + pos: -2.5,73.5 + parent: 2 + - uid: 12102 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,65.5 + parent: 2 + - uid: 12103 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,65.5 + parent: 2 + - uid: 12104 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,59.5 + parent: 2 + - uid: 12105 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,59.5 + parent: 2 + - uid: 12106 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -19.5,65.5 + parent: 2 + - uid: 12107 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,65.5 + parent: 2 + - uid: 12108 + components: + - type: Transform + pos: -14.5,63.5 + parent: 2 + - uid: 12109 + components: + - type: Transform + pos: -13.5,60.5 + parent: 2 + - uid: 12110 + components: + - type: Transform + pos: -13.5,61.5 + parent: 2 + - uid: 12111 + components: + - type: Transform + pos: -16.5,59.5 + parent: 2 + - uid: 12112 + components: + - type: Transform + pos: -14.5,59.5 + parent: 2 + - uid: 12113 + components: + - type: Transform + pos: -18.5,59.5 + parent: 2 + - uid: 12114 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,61.5 + parent: 2 + - uid: 12115 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,57.5 + parent: 2 + - uid: 12116 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,59.5 + parent: 2 + - uid: 12117 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,57.5 + parent: 2 + - uid: 12118 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 16.5,75.5 + parent: 2 + - uid: 12119 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,75.5 + parent: 2 + - uid: 12120 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,76.5 + parent: 2 + - uid: 12121 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,78.5 + parent: 2 + - uid: 12122 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,72.5 + parent: 2 + - uid: 12123 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,73.5 + parent: 2 + - uid: 12124 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,55.5 + parent: 2 + - uid: 12125 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,56.5 + parent: 2 + - uid: 12126 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,18.5 + parent: 2 + - uid: 12127 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,18.5 + parent: 2 + - uid: 12128 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,18.5 + parent: 2 + - uid: 12129 + components: + - type: Transform + pos: 6.5,1.5 + parent: 2 + - uid: 12130 + components: + - type: Transform + pos: 11.5,4.5 + parent: 2 + - uid: 12131 + components: + - type: Transform + pos: 9.5,6.5 + parent: 2 + - uid: 12132 + components: + - type: Transform + pos: 8.5,2.5 + parent: 2 + - uid: 12133 + components: + - type: Transform + pos: 15.5,0.5 + parent: 2 + - uid: 12134 + components: + - type: Transform + pos: 18.5,3.5 + parent: 2 + - uid: 12135 + components: + - type: Transform + pos: 20.5,3.5 + parent: 2 + - uid: 12137 + components: + - type: Transform + pos: 29.5,-1.5 + parent: 2 + - uid: 12138 + components: + - type: Transform + pos: 30.5,-1.5 + parent: 2 + - uid: 12141 + components: + - type: Transform + pos: 35.5,-2.5 + parent: 2 + - uid: 12142 + components: + - type: Transform + pos: 36.5,-2.5 + parent: 2 + - uid: 12144 + components: + - type: Transform + pos: 38.5,3.5 + parent: 2 + - uid: 12145 + components: + - type: Transform + pos: 39.5,3.5 + parent: 2 + - uid: 12146 + components: + - type: Transform + pos: 41.5,-0.5 + parent: 2 + - uid: 12147 + components: + - type: Transform + pos: 42.5,-0.5 + parent: 2 + - uid: 12148 + components: + - type: Transform + pos: 42.5,-1.5 + parent: 2 + - uid: 12149 + components: + - type: Transform + pos: 42.5,-2.5 + parent: 2 + - uid: 12150 + components: + - type: Transform + pos: 38.5,14.5 + parent: 2 + - uid: 12151 + components: + - type: Transform + pos: 40.5,14.5 + parent: 2 + - uid: 12152 + components: + - type: Transform + pos: 40.5,18.5 + parent: 2 + - uid: 12153 + components: + - type: Transform + pos: 42.5,18.5 + parent: 2 + - uid: 12154 + components: + - type: Transform + pos: 45.5,15.5 + parent: 2 + - uid: 12155 + components: + - type: Transform + pos: 46.5,15.5 + parent: 2 + - uid: 12156 + components: + - type: Transform + pos: 47.5,15.5 + parent: 2 + - uid: 12157 + components: + - type: Transform + pos: 47.5,14.5 + parent: 2 + - uid: 12158 + components: + - type: Transform + pos: 47.5,13.5 + parent: 2 + - uid: 12159 + components: + - type: Transform + pos: 50.5,14.5 + parent: 2 + - uid: 12160 + components: + - type: Transform + pos: 50.5,18.5 + parent: 2 + - uid: 12161 + components: + - type: Transform + pos: 39.5,24.5 + parent: 2 + - uid: 12162 + components: + - type: Transform + pos: 40.5,24.5 + parent: 2 + - uid: 12163 + components: + - type: Transform + pos: 41.5,24.5 + parent: 2 + - uid: 12164 + components: + - type: Transform + pos: 36.5,27.5 + parent: 2 + - uid: 12165 + components: + - type: Transform + pos: 36.5,29.5 + parent: 2 + - uid: 12166 + components: + - type: Transform + pos: 40.5,26.5 + parent: 2 + - uid: 12167 + components: + - type: Transform + pos: 43.5,28.5 + parent: 2 + - uid: 12168 + components: + - type: Transform + pos: 44.5,32.5 + parent: 2 + - uid: 12169 + components: + - type: Transform + pos: 51.5,24.5 + parent: 2 + - uid: 12170 + components: + - type: Transform + pos: 51.5,26.5 + parent: 2 + - uid: 12171 + components: + - type: Transform + pos: 50.5,23.5 + parent: 2 + - uid: 12172 + components: + - type: Transform + pos: 52.5,23.5 + parent: 2 + - uid: 12173 + components: + - type: Transform + pos: 54.5,23.5 + parent: 2 + - uid: 12174 + components: + - type: Transform + pos: 54.5,22.5 + parent: 2 + - uid: 12175 + components: + - type: Transform + pos: 56.5,23.5 + parent: 2 + - uid: 12176 + components: + - type: Transform + pos: 49.5,20.5 + parent: 2 + - uid: 12177 + components: + - type: Transform + pos: 52.5,19.5 + parent: 2 + - uid: 12178 + components: + - type: Transform + pos: 51.5,19.5 + parent: 2 + - uid: 12179 + components: + - type: Transform + pos: 54.5,20.5 + parent: 2 + - uid: 12180 + components: + - type: Transform + pos: 57.5,29.5 + parent: 2 + - uid: 12181 + components: + - type: Transform + pos: 60.5,32.5 + parent: 2 + - uid: 12182 + components: + - type: Transform + pos: 59.5,32.5 + parent: 2 + - uid: 12183 + components: + - type: Transform + pos: 61.5,32.5 + parent: 2 + - uid: 12184 + components: + - type: Transform + pos: 63.5,29.5 + parent: 2 + - uid: 12185 + components: + - type: Transform + pos: 56.5,6.5 + parent: 2 + - uid: 12187 + components: + - type: Transform + pos: 50.5,-5.5 + parent: 2 + - uid: 12188 + components: + - type: Transform + pos: 50.5,-4.5 + parent: 2 + - uid: 12189 + components: + - type: Transform + pos: 52.5,-5.5 + parent: 2 + - uid: 12190 + components: + - type: Transform + pos: 52.5,-4.5 + parent: 2 + - uid: 12191 + components: + - type: Transform + pos: 59.5,11.5 + parent: 2 + - uid: 12192 + components: + - type: Transform + pos: 60.5,11.5 + parent: 2 + - uid: 12193 + components: + - type: Transform + pos: 62.5,2.5 + parent: 2 + - uid: 12194 + components: + - type: Transform + pos: 62.5,3.5 + parent: 2 + - uid: 12195 + components: + - type: Transform + pos: 62.5,4.5 + parent: 2 + - uid: 12196 + components: + - type: Transform + pos: 64.5,-0.5 + parent: 2 + - uid: 12197 + components: + - type: Transform + pos: 65.5,-0.5 + parent: 2 + - uid: 12198 + components: + - type: Transform + pos: 66.5,-0.5 + parent: 2 + - uid: 12199 + components: + - type: Transform + pos: 69.5,1.5 + parent: 2 + - uid: 12200 + components: + - type: Transform + pos: 70.5,1.5 + parent: 2 + - uid: 12201 + components: + - type: Transform + pos: 71.5,1.5 + parent: 2 + - uid: 12202 + components: + - type: Transform + pos: 71.5,0.5 + parent: 2 + - uid: 12203 + components: + - type: Transform + pos: 71.5,-0.5 + parent: 2 + - uid: 12204 + components: + - type: Transform + pos: 72.5,-4.5 + parent: 2 + - uid: 12205 + components: + - type: Transform + pos: 12.5,50.5 + parent: 2 + - uid: 12206 + components: + - type: Transform + pos: 13.5,50.5 + parent: 2 + - uid: 12207 + components: + - type: Transform + pos: 14.5,56.5 + parent: 2 + - uid: 12208 + components: + - type: Transform + pos: 20.5,64.5 + parent: 2 + - uid: 12209 + components: + - type: Transform + pos: 17.5,50.5 + parent: 2 + - uid: 12210 + components: + - type: Transform + pos: 19.5,50.5 + parent: 2 + - uid: 12211 + components: + - type: Transform + pos: 21.5,50.5 + parent: 2 + - uid: 12212 + components: + - type: Transform + pos: 26.5,66.5 + parent: 2 + - uid: 12213 + components: + - type: Transform + pos: 29.5,59.5 + parent: 2 + - uid: 12214 + components: + - type: Transform + pos: 30.5,59.5 + parent: 2 + - uid: 12215 + components: + - type: Transform + pos: 31.5,59.5 + parent: 2 + - uid: 12216 + components: + - type: Transform + pos: 27.5,50.5 + parent: 2 + - uid: 12217 + components: + - type: Transform + pos: 28.5,50.5 + parent: 2 + - uid: 12218 + components: + - type: Transform + pos: 29.5,50.5 + parent: 2 + - uid: 12219 + components: + - type: Transform + pos: 29.5,51.5 + parent: 2 + - uid: 12220 + components: + - type: Transform + pos: 31.5,51.5 + parent: 2 + - uid: 12221 + components: + - type: Transform + pos: 31.5,50.5 + parent: 2 + - uid: 12222 + components: + - type: Transform + pos: 32.5,50.5 + parent: 2 + - uid: 12223 + components: + - type: Transform + pos: 33.5,50.5 + parent: 2 + - uid: 12224 + components: + - type: Transform + pos: 36.5,50.5 + parent: 2 + - uid: 12225 + components: + - type: Transform + pos: 37.5,50.5 + parent: 2 + - uid: 12226 + components: + - type: Transform + pos: 36.5,58.5 + parent: 2 + - uid: 12227 + components: + - type: Transform + pos: 35.5,58.5 + parent: 2 + - uid: 12228 + components: + - type: Transform + pos: 37.5,58.5 + parent: 2 + - uid: 12229 + components: + - type: Transform + pos: 35.5,65.5 + parent: 2 + - uid: 12230 + components: + - type: Transform + pos: 34.5,65.5 + parent: 2 + - uid: 12231 + components: + - type: Transform + pos: 34.5,66.5 + parent: 2 + - uid: 12232 + components: + - type: Transform + pos: 34.5,67.5 + parent: 2 + - uid: 12233 + components: + - type: Transform + pos: 31.5,65.5 + parent: 2 + - uid: 12234 + components: + - type: Transform + pos: 32.5,65.5 + parent: 2 + - uid: 12235 + components: + - type: Transform + pos: 32.5,67.5 + parent: 2 + - uid: 12236 + components: + - type: Transform + pos: 39.5,67.5 + parent: 2 + - uid: 12237 + components: + - type: Transform + pos: 46.5,64.5 + parent: 2 + - uid: 12238 + components: + - type: Transform + pos: 46.5,65.5 + parent: 2 + - uid: 12240 + components: + - type: Transform + pos: 55.5,59.5 + parent: 2 + - uid: 12241 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 69.5,63.5 + parent: 2 + - uid: 12242 + components: + - type: Transform + pos: 61.5,36.5 + parent: 2 + - uid: 12243 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 48.5,36.5 + parent: 2 + - uid: 12244 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 47.5,36.5 + parent: 2 + - uid: 12245 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 49.5,37.5 + parent: 2 + - uid: 12246 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 49.5,40.5 + parent: 2 + - uid: 12247 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,36.5 + parent: 2 + - uid: 12248 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,36.5 + parent: 2 + - uid: 12249 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,36.5 + parent: 2 + - uid: 12250 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 40.5,36.5 + parent: 2 + - uid: 12251 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 62.5,58.5 + parent: 2 + - uid: 12252 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 63.5,57.5 + parent: 2 + - uid: 12253 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 63.5,56.5 + parent: 2 + - uid: 12254 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 61.5,59.5 + parent: 2 + - uid: 12255 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 61.5,61.5 + parent: 2 + - uid: 12256 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 58.5,63.5 + parent: 2 + - uid: 12257 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 59.5,63.5 + parent: 2 + - uid: 12258 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 59.5,65.5 + parent: 2 + - uid: 12259 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 61.5,63.5 + parent: 2 + - uid: 12260 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 61.5,64.5 + parent: 2 + - uid: 12261 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 61.5,65.5 + parent: 2 + - uid: 12262 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 63.5,65.5 + parent: 2 + - uid: 12263 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 67.5,65.5 + parent: 2 + - uid: 12264 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 67.5,63.5 + parent: 2 + - uid: 12265 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 66.5,63.5 + parent: 2 + - uid: 12266 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 65.5,63.5 + parent: 2 + - uid: 12267 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 64.5,63.5 + parent: 2 + - uid: 12268 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 63.5,63.5 + parent: 2 + - uid: 12269 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 69.5,64.5 + parent: 2 + - uid: 12270 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 69.5,65.5 + parent: 2 + - uid: 12271 + components: + - type: Transform + pos: 81.5,63.5 + parent: 2 + - uid: 12272 + components: + - type: Transform + pos: 76.5,63.5 + parent: 2 + - uid: 12273 + components: + - type: Transform + pos: 77.5,63.5 + parent: 2 + - uid: 12274 + components: + - type: Transform + pos: 78.5,63.5 + parent: 2 + - uid: 12275 + components: + - type: Transform + pos: 80.5,55.5 + parent: 2 + - uid: 12276 + components: + - type: Transform + pos: 80.5,56.5 + parent: 2 + - uid: 12277 + components: + - type: Transform + pos: 80.5,57.5 + parent: 2 + - uid: 12278 + components: + - type: Transform + pos: 81.5,58.5 + parent: 2 + - uid: 12279 + components: + - type: Transform + pos: 81.5,53.5 + parent: 2 + - uid: 12280 + components: + - type: Transform + pos: 84.5,42.5 + parent: 2 + - uid: 12281 + components: + - type: Transform + pos: 69.5,46.5 + parent: 2 + - uid: 12282 + components: + - type: Transform + pos: 69.5,42.5 + parent: 2 + - uid: 12283 + components: + - type: Transform + pos: 72.5,42.5 + parent: 2 + - uid: 12284 + components: + - type: Transform + pos: 84.5,43.5 + parent: 2 + - uid: 12285 + components: + - type: Transform + pos: 84.5,44.5 + parent: 2 + - uid: 12286 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 84.5,29.5 + parent: 2 + - uid: 12287 + components: + - type: Transform + pos: 79.5,44.5 + parent: 2 + - uid: 12288 + components: + - type: Transform + pos: 79.5,42.5 + parent: 2 + - uid: 12289 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 73.5,38.5 + parent: 2 + - uid: 12290 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 73.5,39.5 + parent: 2 + - uid: 12291 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 74.5,33.5 + parent: 2 + - uid: 12292 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 74.5,35.5 + parent: 2 + - uid: 12293 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 78.5,33.5 + parent: 2 + - uid: 12294 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 78.5,35.5 + parent: 2 + - uid: 12295 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 80.5,28.5 + parent: 2 + - uid: 12296 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 82.5,28.5 + parent: 2 + - uid: 12297 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 85.5,29.5 + parent: 2 + - uid: 12298 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 86.5,29.5 + parent: 2 + - uid: 12299 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 88.5,37.5 + parent: 2 + - uid: 12300 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 88.5,36.5 + parent: 2 + - uid: 12301 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 88.5,35.5 + parent: 2 + - uid: 12302 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 88.5,34.5 + parent: 2 + - uid: 12303 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 88.5,33.5 + parent: 2 + - uid: 12304 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 88.5,32.5 + parent: 2 + - uid: 12305 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 88.5,31.5 + parent: 2 + - uid: 12306 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 84.5,39.5 + parent: 2 + - uid: 12307 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 85.5,39.5 + parent: 2 + - uid: 12308 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 86.5,39.5 + parent: 2 + - uid: 12309 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 84.5,22.5 + parent: 2 + - uid: 12310 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 84.5,23.5 + parent: 2 + - uid: 12311 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 84.5,24.5 + parent: 2 + - uid: 12312 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 84.5,25.5 + parent: 2 + - uid: 12313 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 77.5,23.5 + parent: 2 + - uid: 12314 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 77.5,15.5 + parent: 2 + - uid: 12315 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 77.5,17.5 + parent: 2 + - uid: 12316 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 75.5,8.5 + parent: 2 + - uid: 12317 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 76.5,8.5 + parent: 2 + - uid: 12318 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 77.5,8.5 + parent: 2 + - uid: 12319 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 77.5,1.5 + parent: 2 + - uid: 12320 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 77.5,2.5 + parent: 2 + - uid: 12321 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 77.5,3.5 + parent: 2 + - uid: 12322 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 77.5,4.5 + parent: 2 + - uid: 12323 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 77.5,5.5 + parent: 2 + - uid: 12324 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 77.5,6.5 + parent: 2 + - uid: 12325 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 75.5,1.5 + parent: 2 + - uid: 12326 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 75.5,-0.5 + parent: 2 + - uid: 12327 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 76.5,-0.5 + parent: 2 + - uid: 12328 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 77.5,-0.5 + parent: 2 + - uid: 12329 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 74.5,-4.5 + parent: 2 + - uid: 12330 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 74.5,-3.5 + parent: 2 + - uid: 12331 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 74.5,-2.5 + parent: 2 + - uid: 12332 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 68.5,2.5 + parent: 2 + - uid: 12333 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 63.5,7.5 + parent: 2 + - uid: 12334 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 64.5,7.5 + parent: 2 + - uid: 12335 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 64.5,7.5 + parent: 2 + - uid: 12336 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 66.5,7.5 + parent: 2 + - uid: 12337 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 67.5,7.5 + parent: 2 + - uid: 12338 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 69.5,5.5 + parent: 2 + - uid: 12339 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 70.5,5.5 + parent: 2 + - uid: 12340 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 71.5,5.5 + parent: 2 + - uid: 12341 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 71.5,6.5 + parent: 2 + - uid: 12342 + components: + - type: Transform + pos: 68.5,13.5 + parent: 2 + - uid: 12343 + components: + - type: Transform + pos: 68.5,14.5 + parent: 2 + - uid: 12344 + components: + - type: Transform + pos: 68.5,15.5 + parent: 2 + - uid: 12345 + components: + - type: Transform + pos: 71.5,12.5 + parent: 2 + - uid: 12346 + components: + - type: Transform + pos: 73.5,12.5 + parent: 2 + - uid: 12347 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 71.5,65.5 + parent: 2 + - uid: 12348 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,32.5 + parent: 2 + - uid: 12349 + components: + - type: Transform + pos: 5.5,17.5 + parent: 2 + - uid: 12350 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 54.5,17.5 + parent: 2 + - uid: 12351 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,37.5 + parent: 2 + - uid: 12352 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,38.5 + parent: 2 + - uid: 12353 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,39.5 + parent: 2 + - uid: 12354 + components: + - type: Transform + pos: 34.5,11.5 + parent: 2 + - uid: 12355 + components: + - type: Transform + pos: 34.5,9.5 + parent: 2 + - uid: 12356 + components: + - type: Transform + pos: -13.5,-6.5 + parent: 2 + - uid: 12357 + components: + - type: Transform + pos: -13.5,-5.5 + parent: 2 + - uid: 12358 + components: + - type: Transform + pos: -13.5,-4.5 + parent: 2 + - uid: 12359 + components: + - type: Transform + pos: -17.5,-2.5 + parent: 2 + - uid: 12360 + components: + - type: Transform + pos: 32.5,11.5 + parent: 2 + - uid: 12361 + components: + - type: Transform + pos: 32.5,9.5 + parent: 2 + - uid: 12362 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,22.5 + parent: 2 + - uid: 12363 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,22.5 + parent: 2 + - uid: 12364 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,36.5 + parent: 2 + - uid: 12365 + components: + - type: Transform + pos: 67.5,24.5 + parent: 2 + - uid: 12366 + components: + - type: Transform + pos: 67.5,25.5 + parent: 2 + - uid: 12367 + components: + - type: Transform + pos: 81.5,50.5 + parent: 2 + - uid: 12368 + components: + - type: Transform + pos: 81.5,49.5 + parent: 2 + - uid: 12369 + components: + - type: Transform + pos: 81.5,51.5 + parent: 2 + - uid: 12370 + components: + - type: Transform + pos: -32.5,32.5 + parent: 2 + - uid: 12371 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,24.5 + parent: 2 + - uid: 12372 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,23.5 + parent: 2 + - uid: 12373 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,21.5 + parent: 2 + - uid: 12374 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,21.5 + parent: 2 + - uid: 12375 + components: + - type: Transform + pos: -1.5,31.5 + parent: 2 + - uid: 12376 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,28.5 + parent: 2 + - uid: 12377 + components: + - type: Transform + pos: -1.5,29.5 + parent: 2 + - uid: 12378 + components: + - type: Transform + pos: -4.5,18.5 + parent: 2 + - uid: 12379 + components: + - type: Transform + pos: 16.5,33.5 + parent: 2 + - uid: 12380 + components: + - type: Transform + pos: 13.5,33.5 + parent: 2 + - uid: 12381 + components: + - type: Transform + pos: 13.5,32.5 + parent: 2 + - uid: 12542 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,75.5 + parent: 2 + - uid: 13129 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 67.5,30.5 + parent: 2 + - uid: 13419 + components: + - type: Transform + pos: 34.5,-1.5 + parent: 2 + - uid: 15067 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,75.5 + parent: 2 + - uid: 16526 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,76.5 + parent: 2 + - uid: 16847 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 57.5,59.5 + parent: 2 + - uid: 17249 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -28.5,76.5 + parent: 2 + - uid: 17823 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,75.5 + parent: 2 + - uid: 18640 + components: + - type: Transform + pos: -6.5,19.5 + parent: 2 + - uid: 18945 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,75.5 + parent: 2 +- proto: GrilleSpawner + entities: + - uid: 4770 + components: + - type: Transform + pos: 26.5,-6.5 + parent: 2 + - uid: 5735 + components: + - type: Transform + pos: 27.5,-6.5 + parent: 2 + - uid: 6002 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,80.5 + parent: 2 + - uid: 6061 + components: + - type: Transform + pos: 88.5,5.5 + parent: 2 + - uid: 6062 + components: + - type: Transform + pos: 88.5,6.5 + parent: 2 + - uid: 6073 + components: + - type: Transform + pos: 88.5,2.5 + parent: 2 + - uid: 6685 + components: + - type: Transform + pos: 38.5,-8.5 + parent: 2 + - uid: 6686 + components: + - type: Transform + pos: 38.5,-11.5 + parent: 2 + - uid: 6687 + components: + - type: Transform + pos: 38.5,-12.5 + parent: 2 + - uid: 6721 + components: + - type: Transform + pos: 38.5,-9.5 + parent: 2 + - uid: 6722 + components: + - type: Transform + pos: 38.5,-10.5 + parent: 2 + - uid: 6723 + components: + - type: Transform + pos: 37.5,-12.5 + parent: 2 + - uid: 6724 + components: + - type: Transform + pos: 36.5,-12.5 + parent: 2 + - uid: 6725 + components: + - type: Transform + pos: 35.5,-12.5 + parent: 2 + - uid: 6726 + components: + - type: Transform + pos: 22.5,-11.5 + parent: 2 + - uid: 6727 + components: + - type: Transform + pos: 22.5,-10.5 + parent: 2 + - uid: 6728 + components: + - type: Transform + pos: 22.5,-9.5 + parent: 2 + - uid: 6729 + components: + - type: Transform + pos: 22.5,-8.5 + parent: 2 + - uid: 6730 + components: + - type: Transform + pos: 22.5,-7.5 + parent: 2 + - uid: 6731 + components: + - type: Transform + pos: 22.5,-6.5 + parent: 2 + - uid: 6732 + components: + - type: Transform + pos: 23.5,-6.5 + parent: 2 + - uid: 6733 + components: + - type: Transform + pos: 24.5,-6.5 + parent: 2 + - uid: 6734 + components: + - type: Transform + pos: 25.5,-6.5 + parent: 2 + - uid: 6754 + components: + - type: Transform + pos: 25.5,-12.5 + parent: 2 + - uid: 6755 + components: + - type: Transform + pos: 24.5,-12.5 + parent: 2 + - uid: 6756 + components: + - type: Transform + pos: 23.5,-12.5 + parent: 2 + - uid: 6757 + components: + - type: Transform + pos: 22.5,-12.5 + parent: 2 + - uid: 6758 + components: + - type: Transform + pos: 35.5,-6.5 + parent: 2 + - uid: 6759 + components: + - type: Transform + pos: 37.5,-6.5 + parent: 2 + - uid: 6760 + components: + - type: Transform + pos: 38.5,-7.5 + parent: 2 + - uid: 6780 + components: + - type: Transform + pos: 28.5,-5.5 + parent: 2 + - uid: 6781 + components: + - type: Transform + pos: 34.5,-6.5 + parent: 2 + - uid: 6782 + components: + - type: Transform + pos: 38.5,-6.5 + parent: 2 + - uid: 8224 + components: + - type: Transform + pos: 28.5,-4.5 + parent: 2 + - uid: 8282 + components: + - type: Transform + pos: 29.5,-4.5 + parent: 2 + - uid: 8338 + components: + - type: Transform + pos: 30.5,-4.5 + parent: 2 + - uid: 8391 + components: + - type: Transform + pos: 36.5,-6.5 + parent: 2 + - uid: 8530 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,78.5 + parent: 2 + - uid: 8531 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,79.5 + parent: 2 + - uid: 8532 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -35.5,80.5 + parent: 2 + - uid: 8533 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,80.5 + parent: 2 + - uid: 8534 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -31.5,80.5 + parent: 2 + - uid: 9177 + components: + - type: Transform + pos: 31.5,-4.5 + parent: 2 + - uid: 9178 + components: + - type: Transform + pos: 32.5,-4.5 + parent: 2 + - uid: 12392 + components: + - type: Transform + pos: -31.5,-9.5 + parent: 2 + - uid: 12393 + components: + - type: Transform + pos: -30.5,-2.5 + parent: 2 + - uid: 12394 + components: + - type: Transform + pos: -30.5,-3.5 + parent: 2 + - uid: 12395 + components: + - type: Transform + pos: -30.5,-4.5 + parent: 2 + - uid: 12396 + components: + - type: Transform + pos: -30.5,-5.5 + parent: 2 + - uid: 12397 + components: + - type: Transform + pos: -30.5,-6.5 + parent: 2 + - uid: 12398 + components: + - type: Transform + pos: -30.5,-8.5 + parent: 2 + - uid: 12399 + components: + - type: Transform + pos: -31.5,-8.5 + parent: 2 + - uid: 12400 + components: + - type: Transform + pos: -31.5,-10.5 + parent: 2 + - uid: 12401 + components: + - type: Transform + pos: -31.5,-11.5 + parent: 2 + - uid: 12402 + components: + - type: Transform + pos: -20.5,-17.5 + parent: 2 + - uid: 12403 + components: + - type: Transform + pos: -32.5,-13.5 + parent: 2 + - uid: 12404 + components: + - type: Transform + pos: -32.5,-14.5 + parent: 2 + - uid: 12405 + components: + - type: Transform + pos: -32.5,-15.5 + parent: 2 + - uid: 12406 + components: + - type: Transform + pos: -32.5,-16.5 + parent: 2 + - uid: 12407 + components: + - type: Transform + pos: -32.5,-17.5 + parent: 2 + - uid: 12408 + components: + - type: Transform + pos: -30.5,-18.5 + parent: 2 + - uid: 12409 + components: + - type: Transform + pos: -29.5,-18.5 + parent: 2 + - uid: 12410 + components: + - type: Transform + pos: -28.5,-18.5 + parent: 2 + - uid: 12411 + components: + - type: Transform + pos: -20.5,-18.5 + parent: 2 + - uid: 12412 + components: + - type: Transform + pos: -31.5,-18.5 + parent: 2 + - uid: 12413 + components: + - type: Transform + pos: -25.5,-19.5 + parent: 2 + - uid: 12414 + components: + - type: Transform + pos: -25.5,-20.5 + parent: 2 + - uid: 12415 + components: + - type: Transform + pos: -24.5,-20.5 + parent: 2 + - uid: 12416 + components: + - type: Transform + pos: -22.5,-20.5 + parent: 2 + - uid: 12417 + components: + - type: Transform + pos: -21.5,-20.5 + parent: 2 + - uid: 12418 + components: + - type: Transform + pos: -21.5,-19.5 + parent: 2 + - uid: 12419 + components: + - type: Transform + pos: -23.5,-20.5 + parent: 2 + - uid: 12420 + components: + - type: Transform + pos: -32.5,-18.5 + parent: 2 + - uid: 12421 + components: + - type: Transform + pos: -20.5,-16.5 + parent: 2 + - uid: 12422 + components: + - type: Transform + pos: -20.5,-15.5 + parent: 2 + - uid: 12423 + components: + - type: Transform + pos: -20.5,-13.5 + parent: 2 + - uid: 12424 + components: + - type: Transform + pos: -19.5,-13.5 + parent: 2 + - uid: 12425 + components: + - type: Transform + pos: -19.5,-12.5 + parent: 2 + - uid: 12426 + components: + - type: Transform + pos: -19.5,-11.5 + parent: 2 + - uid: 12427 + components: + - type: Transform + pos: -19.5,-10.5 + parent: 2 + - uid: 12428 + components: + - type: Transform + pos: -19.5,-9.5 + parent: 2 + - uid: 12429 + components: + - type: Transform + pos: -19.5,-8.5 + parent: 2 + - uid: 12430 + components: + - type: Transform + pos: -19.5,-5.5 + parent: 2 + - uid: 12431 + components: + - type: Transform + pos: -19.5,-4.5 + parent: 2 + - uid: 12432 + components: + - type: Transform + pos: -19.5,-3.5 + parent: 2 + - uid: 12433 + components: + - type: Transform + pos: -19.5,-2.5 + parent: 2 + - uid: 12434 + components: + - type: Transform + pos: -19.5,-1.5 + parent: 2 + - uid: 12435 + components: + - type: Transform + pos: -19.5,-0.5 + parent: 2 + - uid: 12436 + components: + - type: Transform + pos: 49.5,-24.5 + parent: 2 + - uid: 12437 + components: + - type: Transform + pos: 49.5,-25.5 + parent: 2 + - uid: 12438 + components: + - type: Transform + pos: 49.5,-26.5 + parent: 2 + - uid: 12439 + components: + - type: Transform + pos: 50.5,-26.5 + parent: 2 + - uid: 12440 + components: + - type: Transform + pos: 51.5,-26.5 + parent: 2 + - uid: 12441 + components: + - type: Transform + pos: 52.5,-26.5 + parent: 2 + - uid: 12442 + components: + - type: Transform + pos: 53.5,-26.5 + parent: 2 + - uid: 12443 + components: + - type: Transform + pos: 53.5,-25.5 + parent: 2 + - uid: 12444 + components: + - type: Transform + pos: 53.5,-24.5 + parent: 2 + - uid: 12445 + components: + - type: Transform + pos: 54.5,-24.5 + parent: 2 + - uid: 12446 + components: + - type: Transform + pos: 46.5,-24.5 + parent: 2 + - uid: 12447 + components: + - type: Transform + pos: 45.5,-24.5 + parent: 2 + - uid: 12448 + components: + - type: Transform + pos: 44.5,-24.5 + parent: 2 + - uid: 12449 + components: + - type: Transform + pos: 43.5,-24.5 + parent: 2 + - uid: 12450 + components: + - type: Transform + pos: 43.5,-17.5 + parent: 2 + - uid: 12451 + components: + - type: Transform + pos: 43.5,-23.5 + parent: 2 + - uid: 12452 + components: + - type: Transform + pos: 43.5,-22.5 + parent: 2 + - uid: 12453 + components: + - type: Transform + pos: 43.5,-21.5 + parent: 2 + - uid: 12454 + components: + - type: Transform + pos: 43.5,-20.5 + parent: 2 + - uid: 12455 + components: + - type: Transform + pos: 43.5,-19.5 + parent: 2 + - uid: 12456 + components: + - type: Transform + pos: 43.5,-15.5 + parent: 2 + - uid: 12457 + components: + - type: Transform + pos: 43.5,-14.5 + parent: 2 + - uid: 12458 + components: + - type: Transform + pos: 43.5,-13.5 + parent: 2 + - uid: 12459 + components: + - type: Transform + pos: 43.5,-12.5 + parent: 2 + - uid: 12460 + components: + - type: Transform + pos: 43.5,-11.5 + parent: 2 + - uid: 12461 + components: + - type: Transform + pos: 59.5,-11.5 + parent: 2 + - uid: 12462 + components: + - type: Transform + pos: 59.5,-12.5 + parent: 2 + - uid: 12463 + components: + - type: Transform + pos: 59.5,-13.5 + parent: 2 + - uid: 12464 + components: + - type: Transform + pos: 59.5,-14.5 + parent: 2 + - uid: 12465 + components: + - type: Transform + pos: 59.5,-17.5 + parent: 2 + - uid: 12466 + components: + - type: Transform + pos: 59.5,-19.5 + parent: 2 + - uid: 12467 + components: + - type: Transform + pos: 59.5,-20.5 + parent: 2 + - uid: 12468 + components: + - type: Transform + pos: 59.5,-21.5 + parent: 2 + - uid: 12469 + components: + - type: Transform + pos: 59.5,-22.5 + parent: 2 + - uid: 12470 + components: + - type: Transform + pos: 59.5,-23.5 + parent: 2 + - uid: 12471 + components: + - type: Transform + pos: 59.5,-24.5 + parent: 2 + - uid: 12472 + components: + - type: Transform + pos: 58.5,-24.5 + parent: 2 + - uid: 12473 + components: + - type: Transform + pos: 57.5,-24.5 + parent: 2 + - uid: 12474 + components: + - type: Transform + pos: 30.5,81.5 + parent: 2 + - uid: 12475 + components: + - type: Transform + pos: 31.5,81.5 + parent: 2 + - uid: 12476 + components: + - type: Transform + pos: 31.5,82.5 + parent: 2 + - uid: 12477 + components: + - type: Transform + pos: 31.5,83.5 + parent: 2 + - uid: 12478 + components: + - type: Transform + pos: 32.5,83.5 + parent: 2 + - uid: 12479 + components: + - type: Transform + pos: 33.5,83.5 + parent: 2 + - uid: 12480 + components: + - type: Transform + pos: 34.5,83.5 + parent: 2 + - uid: 12481 + components: + - type: Transform + pos: 35.5,83.5 + parent: 2 + - uid: 12482 + components: + - type: Transform + pos: 35.5,82.5 + parent: 2 + - uid: 12483 + components: + - type: Transform + pos: 35.5,81.5 + parent: 2 + - uid: 12484 + components: + - type: Transform + pos: 41.5,80.5 + parent: 2 + - uid: 12485 + components: + - type: Transform + pos: 38.5,81.5 + parent: 2 + - uid: 12486 + components: + - type: Transform + pos: 39.5,81.5 + parent: 2 + - uid: 12487 + components: + - type: Transform + pos: 40.5,81.5 + parent: 2 + - uid: 12488 + components: + - type: Transform + pos: 41.5,81.5 + parent: 2 + - uid: 12489 + components: + - type: Transform + pos: 41.5,72.5 + parent: 2 + - uid: 12490 + components: + - type: Transform + pos: 41.5,79.5 + parent: 2 + - uid: 12491 + components: + - type: Transform + pos: 41.5,78.5 + parent: 2 + - uid: 12492 + components: + - type: Transform + pos: 41.5,77.5 + parent: 2 + - uid: 12493 + components: + - type: Transform + pos: 41.5,76.5 + parent: 2 + - uid: 12494 + components: + - type: Transform + pos: 41.5,74.5 + parent: 2 + - uid: 12495 + components: + - type: Transform + pos: 41.5,71.5 + parent: 2 + - uid: 12496 + components: + - type: Transform + pos: 41.5,70.5 + parent: 2 + - uid: 12497 + components: + - type: Transform + pos: 41.5,69.5 + parent: 2 + - uid: 12498 + components: + - type: Transform + pos: 25.5,72.5 + parent: 2 + - uid: 12499 + components: + - type: Transform + pos: 25.5,71.5 + parent: 2 + - uid: 12500 + components: + - type: Transform + pos: 25.5,70.5 + parent: 2 + - uid: 12501 + components: + - type: Transform + pos: 25.5,69.5 + parent: 2 + - uid: 12502 + components: + - type: Transform + pos: 25.5,74.5 + parent: 2 + - uid: 12503 + components: + - type: Transform + pos: 25.5,76.5 + parent: 2 + - uid: 12504 + components: + - type: Transform + pos: 25.5,77.5 + parent: 2 + - uid: 12505 + components: + - type: Transform + pos: 25.5,78.5 + parent: 2 + - uid: 12506 + components: + - type: Transform + pos: 25.5,79.5 + parent: 2 + - uid: 12507 + components: + - type: Transform + pos: 25.5,80.5 + parent: 2 + - uid: 12508 + components: + - type: Transform + pos: 25.5,81.5 + parent: 2 + - uid: 12509 + components: + - type: Transform + pos: 26.5,81.5 + parent: 2 + - uid: 12510 + components: + - type: Transform + pos: 27.5,81.5 + parent: 2 + - uid: 12511 + components: + - type: Transform + pos: 86.5,44.5 + parent: 2 + - uid: 12512 + components: + - type: Transform + pos: 87.5,41.5 + parent: 2 + - uid: 12513 + components: + - type: Transform + pos: 90.5,38.5 + parent: 2 + - uid: 12514 + components: + - type: Transform + pos: 90.5,37.5 + parent: 2 + - uid: 12515 + components: + - type: Transform + pos: 90.5,36.5 + parent: 2 + - uid: 12516 + components: + - type: Transform + pos: 90.5,35.5 + parent: 2 + - uid: 12517 + components: + - type: Transform + pos: 90.5,34.5 + parent: 2 + - uid: 12518 + components: + - type: Transform + pos: 90.5,33.5 + parent: 2 + - uid: 12519 + components: + - type: Transform + pos: 90.5,32.5 + parent: 2 + - uid: 12520 + components: + - type: Transform + pos: 90.5,31.5 + parent: 2 + - uid: 12521 + components: + - type: Transform + pos: 90.5,30.5 + parent: 2 + - uid: 12522 + components: + - type: Transform + pos: 87.5,27.5 + parent: 2 + - uid: 12523 + components: + - type: Transform + pos: 86.5,45.5 + parent: 2 + - uid: 12524 + components: + - type: Transform + pos: 86.5,43.5 + parent: 2 + - uid: 12525 + components: + - type: Transform + pos: 86.5,42.5 + parent: 2 + - uid: 12526 + components: + - type: Transform + pos: 86.5,26.5 + parent: 2 + - uid: 12527 + components: + - type: Transform + pos: 86.5,25.5 + parent: 2 + - uid: 12528 + components: + - type: Transform + pos: 86.5,24.5 + parent: 2 + - uid: 12529 + components: + - type: Transform + pos: 86.5,23.5 + parent: 2 + - uid: 12530 + components: + - type: Transform + pos: 86.5,22.5 + parent: 2 + - uid: 12532 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,74.5 + parent: 2 + - uid: 12533 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,74.5 + parent: 2 + - uid: 12534 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -16.5,74.5 + parent: 2 + - uid: 12535 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,74.5 + parent: 2 + - uid: 12536 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,74.5 + parent: 2 + - uid: 12537 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,74.5 + parent: 2 + - uid: 12540 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -21.5,76.5 + parent: 2 + - uid: 12547 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,74.5 + parent: 2 + - uid: 12550 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,76.5 + parent: 2 + - uid: 12551 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,76.5 + parent: 2 + - uid: 12552 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,76.5 + parent: 2 + - uid: 12553 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -16.5,76.5 + parent: 2 + - uid: 12554 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,76.5 + parent: 2 + - uid: 12555 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,76.5 + parent: 2 + - uid: 12556 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,76.5 + parent: 2 + - uid: 12557 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,76.5 + parent: 2 + - uid: 12558 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,69.5 + parent: 2 + - uid: 12562 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -21.5,80.5 + parent: 2 + - uid: 12565 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,78.5 + parent: 2 + - uid: 12566 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -25.5,78.5 + parent: 2 + - uid: 12567 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,79.5 + parent: 2 + - uid: 12568 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,81.5 + parent: 2 + - uid: 12569 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,81.5 + parent: 2 + - uid: 12571 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,80.5 + parent: 2 + - uid: 12572 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,79.5 + parent: 2 + - uid: 13417 + components: + - type: Transform + pos: 33.5,-6.5 + parent: 2 + - uid: 13420 + components: + - type: Transform + pos: 28.5,-6.5 + parent: 2 + - uid: 13839 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,77.5 + parent: 2 + - uid: 17185 + components: + - type: Transform + pos: 32.5,-6.5 + parent: 2 + - uid: 17186 + components: + - type: Transform + pos: 32.5,-5.5 + parent: 2 + - uid: 17450 + components: + - type: Transform + pos: 88.5,1.5 + parent: 2 + - uid: 17916 + components: + - type: Transform + pos: 83.5,-9.5 + parent: 2 + - uid: 17919 + components: + - type: Transform + pos: 84.5,-9.5 + parent: 2 + - uid: 17920 + components: + - type: Transform + pos: 86.5,-9.5 + parent: 2 + - uid: 17921 + components: + - type: Transform + pos: 77.5,-9.5 + parent: 2 + - uid: 17923 + components: + - type: Transform + pos: 88.5,13.5 + parent: 2 + - uid: 17924 + components: + - type: Transform + pos: 88.5,8.5 + parent: 2 + - uid: 17925 + components: + - type: Transform + pos: 80.5,13.5 + parent: 2 + - uid: 17926 + components: + - type: Transform + pos: 81.5,13.5 + parent: 2 + - uid: 17927 + components: + - type: Transform + pos: 88.5,7.5 + parent: 2 + - uid: 17928 + components: + - type: Transform + pos: 79.5,13.5 + parent: 2 + - uid: 17929 + components: + - type: Transform + pos: 85.5,13.5 + parent: 2 + - uid: 17930 + components: + - type: Transform + pos: 86.5,13.5 + parent: 2 + - uid: 17931 + components: + - type: Transform + pos: 88.5,-1.5 + parent: 2 + - uid: 17933 + components: + - type: Transform + pos: 88.5,-4.5 + parent: 2 + - uid: 17934 + components: + - type: Transform + pos: 88.5,-2.5 + parent: 2 + - uid: 17935 + components: + - type: Transform + pos: 88.5,-5.5 + parent: 2 + - uid: 17938 + components: + - type: Transform + pos: 88.5,4.5 + parent: 2 + - uid: 17940 + components: + - type: Transform + pos: 88.5,0.5 + parent: 2 + - uid: 17941 + components: + - type: Transform + pos: 88.5,10.5 + parent: 2 + - uid: 17943 + components: + - type: Transform + pos: 88.5,11.5 + parent: 2 + - uid: 17977 + components: + - type: Transform + pos: 88.5,9.5 + parent: 2 + - uid: 17978 + components: + - type: Transform + pos: 88.5,-0.5 + parent: 2 + - uid: 17982 + components: + - type: Transform + pos: 84.5,13.5 + parent: 2 + - uid: 17983 + components: + - type: Transform + pos: 82.5,13.5 + parent: 2 + - uid: 17984 + components: + - type: Transform + pos: 88.5,12.5 + parent: 2 + - uid: 17985 + components: + - type: Transform + pos: 88.5,-3.5 + parent: 2 + - uid: 17986 + components: + - type: Transform + pos: 88.5,3.5 + parent: 2 + - uid: 17992 + components: + - type: Transform + pos: 83.5,13.5 + parent: 2 + - uid: 18528 + components: + - type: Transform + pos: 80.5,-9.5 + parent: 2 + - uid: 18553 + components: + - type: Transform + pos: 79.5,-9.5 + parent: 2 + - uid: 18554 + components: + - type: Transform + pos: 78.5,-9.5 + parent: 2 + - uid: 18555 + components: + - type: Transform + pos: 82.5,-9.5 + parent: 2 + - uid: 18586 + components: + - type: Transform + pos: 85.5,-9.5 + parent: 2 + - uid: 19373 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,75.5 + parent: 2 + - uid: 19374 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,73.5 + parent: 2 + - uid: 19375 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,72.5 + parent: 2 + - uid: 19376 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,71.5 + parent: 2 +- proto: GunSafeDisabler + entities: + - uid: 12574 + components: + - type: Transform + pos: -19.5,60.5 + parent: 2 +- proto: GunSafePistolMk58 + entities: + - uid: 12575 + components: + - type: Transform + pos: 31.5,55.5 + parent: 2 +- proto: GunSafeShotgunKammerer + entities: + - uid: 12576 + components: + - type: Transform + pos: -16.5,70.5 + parent: 2 +- proto: GyroscopeMachineCircuitboard + entities: + - uid: 12577 + components: + - type: Transform + pos: -26.259409,43.23342 + parent: 2 +- proto: Handcuffs + entities: + - uid: 12578 + components: + - type: Transform + pos: -4.221366,15.508125 + parent: 2 + - uid: 12579 + components: + - type: Transform + pos: -4.427536,29.449837 + parent: 2 + - uid: 12580 + components: + - type: Transform + pos: -25.60279,61.44794 + parent: 2 + - uid: 12581 + components: + - type: Transform + pos: -13.513405,51.524147 + parent: 2 + - uid: 12582 + components: + - type: Transform + pos: 46.58424,14.506506 + parent: 2 + - uid: 12583 + components: + - type: Transform + pos: -26.431564,53.556343 + parent: 2 + - uid: 12584 + components: + - type: Transform + pos: 70.45517,13.657604 + parent: 2 + - uid: 12585 + components: + - type: Transform + pos: 3.4970489,27.484295 + parent: 2 +- proto: HandheldHealthAnalyzer + entities: + - uid: 12586 + components: + - type: Transform + pos: 55.46016,19.624624 + parent: 2 + - uid: 12587 + components: + - type: Transform + pos: -27.474733,50.52622 + parent: 2 + - uid: 12588 + components: + - type: Transform + pos: -5.4911914,57.57545 + parent: 2 + - uid: 12589 + components: + - type: Transform + pos: 26.474176,35.5409 + parent: 2 +- proto: HandheldStationMap + entities: + - uid: 12590 + components: + - type: Transform + pos: 31.512169,56.662724 + parent: 2 + - uid: 12591 + components: + - type: Transform + pos: 42.494133,28.545658 + parent: 2 +- proto: HandLabeler + entities: + - uid: 12592 + components: + - type: Transform + pos: 0.54611063,12.651349 + parent: 2 + - uid: 12593 + components: + - type: Transform + pos: 5.669695,37.47469 + parent: 2 + - uid: 12594 + components: + - type: Transform + pos: 78.72532,42.456882 + parent: 2 +- proto: HeadSkeleton + entities: + - uid: 12595 + components: + - type: Transform + pos: 28.59336,23.459768 + parent: 2 +- proto: HeatExchanger + entities: + - uid: 12382 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,39.5 + parent: 2 + - uid: 17189 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,38.5 + parent: 2 + - uid: 17190 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -37.5,39.5 + parent: 2 + - uid: 17192 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,39.5 + parent: 2 + - uid: 17193 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,39.5 + parent: 2 + - uid: 17195 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,39.5 + parent: 2 + - uid: 17196 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 17197 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,39.5 + parent: 2 + - uid: 17198 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,39.5 + parent: 2 + - uid: 17200 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,38.5 + parent: 2 + - uid: 17201 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,38.5 + parent: 2 + - uid: 17202 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,38.5 + parent: 2 + - uid: 17203 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#BFA200FF' + - uid: 17204 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -37.5,38.5 + parent: 2 + - uid: 17205 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,38.5 + parent: 2 + - uid: 17207 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,38.5 + parent: 2 +- proto: HighSecCommandLocked + entities: + - uid: 12600 + components: + - type: Transform + pos: -18.5,42.5 + parent: 2 + - uid: 12601 + components: + - type: Transform + pos: -6.5,44.5 + parent: 2 + - uid: 12602 + components: + - type: Transform + pos: 30.5,52.5 + parent: 2 + - uid: 12603 + components: + - type: Transform + pos: 30.5,50.5 + parent: 2 + - uid: 12604 + components: + - type: Transform + pos: 41.5,32.5 + parent: 2 + - uid: 12605 + components: + - type: Transform + pos: 41.5,30.5 + parent: 2 + - uid: 18464 + components: + - type: Transform + pos: 30.5,-39.5 + parent: 2 + - uid: 18465 + components: + - type: Transform + pos: 30.5,-41.5 + parent: 2 + - uid: 20255 + components: + - type: Transform + pos: 33.5,-28.5 + parent: 2 + - uid: 20256 + components: + - type: Transform + pos: 35.5,-28.5 + parent: 2 +- proto: HospitalCurtains + entities: + - uid: 7436 + components: + - type: Transform + pos: 74.5,23.5 + parent: 2 +- proto: HospitalCurtainsOpen + entities: + - uid: 12610 + components: + - type: Transform + pos: 28.5,13.5 + parent: 2 + - uid: 12611 + components: + - type: Transform + pos: 28.5,16.5 + parent: 2 + - uid: 12612 + components: + - type: Transform + pos: 19.5,14.5 + parent: 2 + - uid: 12614 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,35.5 + parent: 2 + - uid: 12615 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,34.5 + parent: 2 + - uid: 12616 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,34.5 + parent: 2 + - uid: 12617 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,34.5 + parent: 2 + - uid: 12618 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,34.5 + parent: 2 + - uid: 12619 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,34.5 + parent: 2 +- proto: hydroponicsSoil + entities: + - uid: 12620 + components: + - type: Transform + pos: 8.5,76.5 + parent: 2 + - uid: 12621 + components: + - type: Transform + pos: 8.5,75.5 + parent: 2 + - uid: 12622 + components: + - type: Transform + pos: 8.5,74.5 + parent: 2 + - uid: 12623 + components: + - type: Transform + pos: 8.5,73.5 + parent: 2 +- proto: HydroponicsToolMiniHoe + entities: + - uid: 12627 + components: + - type: Transform + pos: -34.547028,74.51389 + parent: 2 +- proto: HydroponicsToolSpade + entities: + - uid: 7309 + components: + - type: Transform + pos: -34.471077,74.57086 + parent: 2 +- proto: hydroponicsTray + entities: + - uid: 5064 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,76.5 + parent: 2 + - uid: 5065 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,77.5 + parent: 2 + - uid: 5066 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -33.5,76.5 + parent: 2 + - uid: 12074 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.5,77.5 + parent: 2 + - uid: 12075 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.5,76.5 + parent: 2 + - uid: 12076 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,76.5 + parent: 2 + - uid: 12626 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,39.5 + parent: 2 + - uid: 12631 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 49.5,44.5 + parent: 2 + - uid: 12632 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 49.5,43.5 + parent: 2 + - uid: 12633 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 47.5,43.5 + parent: 2 + - uid: 12634 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 46.5,43.5 + parent: 2 + - uid: 12635 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,40.5 + parent: 2 + - uid: 12636 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,42.5 + parent: 2 + - uid: 12637 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 47.5,40.5 + parent: 2 + - uid: 12638 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 47.5,42.5 + parent: 2 + - uid: 12639 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 47.5,39.5 + parent: 2 +- proto: IDComputerCircuitboard + entities: + - uid: 12640 + components: + - type: Transform + pos: -8.467238,45.59177 + parent: 2 + - uid: 12641 + components: + - type: Transform + pos: 29.539917,54.538994 + parent: 2 +- proto: IngotGold + entities: + - uid: 12642 + components: + - type: Transform + pos: 31.374626,54.707325 + parent: 2 +- proto: IngotSilver + entities: + - uid: 12643 + components: + - type: Transform + pos: 31.711527,54.679268 + parent: 2 +- proto: IntercomAll + entities: + - uid: 12644 + components: + - type: Transform + pos: 39.5,30.5 + parent: 2 + - uid: 12645 + components: + - type: Transform + pos: 83.5,23.5 + parent: 2 + - uid: 12990 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 74.5,27.5 + parent: 2 + - uid: 20277 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,-45.5 + parent: 2 + - uid: 20278 + components: + - type: Transform + pos: 28.5,-41.5 + parent: 2 + - uid: 20279 + components: + - type: Transform + pos: 32.5,-41.5 + parent: 2 +- proto: IntercomCommand + entities: + - uid: 12652 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,0.5 + parent: 2 +- proto: IntercomEngineering + entities: + - uid: 12653 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,32.5 + parent: 2 +- proto: IntercomMedical + entities: + - uid: 12654 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 14.5,46.5 + parent: 2 + - uid: 12655 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,34.5 + parent: 2 +- proto: IntercomScience + entities: + - uid: 12656 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 54.5,23.5 + parent: 2 + - uid: 12657 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,-0.5 + parent: 2 +- proto: IntercomSecurity + entities: + - uid: 12658 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,32.5 + parent: 2 + - uid: 12659 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,30.5 + parent: 2 + - uid: 12660 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 43.5,15.5 + parent: 2 + - uid: 12661 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 70.5,16.5 + parent: 2 + - uid: 12662 + components: + - type: Transform + pos: -10.5,50.5 + parent: 2 +- proto: IntercomService + entities: + - uid: 12651 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 73.5,39.5 + parent: 2 +- proto: IntercomSupply + entities: + - uid: 12663 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,14.5 + parent: 2 +- proto: JanitorialTrolley + entities: + - uid: 12664 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,54.5 + parent: 2 + - uid: 12665 + components: + - type: Transform + pos: 40.5,54.5 + parent: 2 +- proto: JanitorServiceLight + entities: + - uid: 12666 + components: + - type: Transform + pos: 39.5,49.5 + parent: 2 + - type: DeviceLinkSink + links: + - 14465 +- proto: JetpackMiniFilled + entities: + - uid: 12667 + components: + - type: Transform + pos: 74.401764,45.590862 + parent: 2 + - uid: 12668 + components: + - type: Transform + pos: 74.401764,45.590862 + parent: 2 + - uid: 12669 + components: + - type: Transform + pos: 74.373695,42.490692 + parent: 2 + - uid: 12670 + components: + - type: Transform + pos: 74.373695,42.490692 + parent: 2 +- proto: KitchenElectricGrill + entities: + - uid: 12671 + components: + - type: Transform + pos: 2.5,55.5 + parent: 2 +- proto: KitchenMicrowave + entities: + - uid: 12672 + components: + - type: Transform + pos: -25.5,60.5 + parent: 2 + - uid: 12673 + components: + - type: Transform + pos: 52.5,46.5 + parent: 2 + - uid: 12674 + components: + - type: Transform + pos: 3.5,41.5 + parent: 2 + - uid: 12675 + components: + - type: Transform + pos: 43.5,66.5 + parent: 2 + - uid: 19509 + components: + - type: Transform + pos: -30.5,73.5 + parent: 2 +- proto: KitchenReagentGrinder + entities: + - uid: 12676 + components: + - type: Transform + pos: 10.5,27.5 + parent: 2 + - uid: 12677 + components: + - type: Transform + pos: 44.5,45.5 + parent: 2 + - uid: 12678 + components: + - type: Transform + pos: 57.5,44.5 + parent: 2 + - uid: 12679 + components: + - type: Transform + pos: 59.5,44.5 + parent: 2 + - uid: 12680 + components: + - type: Transform + pos: 27.5,38.5 + parent: 2 + - uid: 19506 + components: + - type: Transform + pos: -30.5,74.5 + parent: 2 +- proto: KitchenSpike + entities: + - uid: 12681 + components: + - type: Transform + pos: 55.5,48.5 + parent: 2 +- proto: LampBanana + entities: + - uid: 12682 + components: + - type: Transform + pos: 40.256474,43.92007 + parent: 2 +- proto: LampGold + entities: + - uid: 478 + components: + - type: Transform + pos: 32.40501,5.974651 + parent: 2 + - uid: 12683 + components: + - type: Transform + pos: -20.685608,54.091194 + parent: 2 + - uid: 12684 + components: + - type: Transform + pos: -24.712593,53.125984 + parent: 2 + - uid: 12685 + components: + - type: Transform + pos: 19.448418,17.908178 + parent: 2 + - uid: 12686 + components: + - type: Transform + pos: 1.0715826,61.091324 + parent: 2 + - uid: 12687 + components: + - type: Transform + pos: 2.272709,52.035137 + parent: 2 + - uid: 12688 + components: + - type: Transform + pos: 6.245478,73.22133 + parent: 2 + - uid: 12689 + components: + - type: Transform + pos: 8.467784,60.831596 + parent: 2 + - uid: 12690 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.828588,60.09394 + parent: 2 + - uid: 12691 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.84656,52.121628 + parent: 2 + - uid: 12692 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 17.817795,52.205795 + parent: 2 + - uid: 12693 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.82771,55.964355 + parent: 2 + - uid: 12694 + components: + - type: Transform + pos: 31.234251,54.581074 + parent: 2 + - uid: 12695 + components: + - type: Transform + pos: 63.4618,15.331928 + parent: 2 + - uid: 19778 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.710495,-34.879448 + parent: 2 +- proto: LampInterrogator + entities: + - uid: 12696 + components: + - type: Transform + pos: -8.448283,58.905025 + parent: 2 + - uid: 12697 + components: + - type: Transform + pos: -26.497074,54.5255 + parent: 2 +- proto: LargeBeaker + entities: + - uid: 12698 + components: + - type: Transform + pos: 37.367184,7.6123457 + parent: 2 + - uid: 12699 + components: + - type: Transform + pos: 47.95627,31.730053 + parent: 2 + - uid: 12700 + components: + - type: Transform + pos: 47.723133,31.550842 + parent: 2 + - uid: 19510 + components: + - type: Transform + pos: -31.75021,74.85023 + parent: 2 + - uid: 19511 + components: + - type: Transform + pos: -31.598312,74.717316 + parent: 2 +- proto: LightPostSmall + entities: + - uid: 3454 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -39.5,37.5 + parent: 2 + - uid: 3457 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -39.5,40.5 + parent: 2 + - uid: 3464 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -39.5,32.5 + parent: 2 + - uid: 18612 + components: + - type: Transform + pos: 70.5,-15.5 + parent: 2 + - uid: 18613 + components: + - type: Transform + pos: 76.5,-15.5 + parent: 2 + - uid: 18614 + components: + - type: Transform + pos: 76.5,-11.5 + parent: 2 + - uid: 18615 + components: + - type: Transform + pos: 70.5,-11.5 + parent: 2 + - uid: 18616 + components: + - type: Transform + pos: 70.5,-8.5 + parent: 2 + - uid: 18617 + components: + - type: Transform + pos: 76.5,-8.5 + parent: 2 +- proto: LockerAtmosphericsFilledHardsuit + entities: + - uid: 12702 + components: + - type: Transform + pos: -10.5,24.5 + parent: 2 + - uid: 12703 + components: + - type: Transform + pos: -10.5,23.5 + parent: 2 + - uid: 12704 + components: + - type: Transform + pos: -10.5,22.5 + parent: 2 +- proto: LockerBartenderFilled + entities: + - uid: 20345 + components: + - type: Transform + pos: 62.5,44.5 + parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.1465 + moles: + - 1.7459903 + - 6.568249 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 20346 + - 20347 + - 20348 + - 20349 + - 20350 + - 20351 + - 20353 + - 20354 + - 20355 + - 20356 + - 20357 + - 20358 + - 20359 + - 20360 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null +- proto: LockerBooze + entities: + - uid: 12705 + components: + - type: Transform + pos: 30.5,17.5 + parent: 2 + - uid: 12706 + components: + - type: Transform + pos: 30.5,14.5 + parent: 2 + - uid: 12707 + components: + - type: Transform + pos: 17.5,15.5 + parent: 2 + - uid: 12708 + components: + - type: Transform + pos: 58.5,25.5 + parent: 2 +- proto: LockerBoozeFilled + entities: + - uid: 12710 + components: + - type: Transform + pos: 49.5,59.5 + parent: 2 +- proto: LockerBotanistFilled + entities: + - uid: 12711 + components: + - type: Transform + pos: 46.5,48.5 + parent: 2 + - uid: 12712 + components: + - type: Transform + pos: 46.5,47.5 + parent: 2 + - uid: 12713 + components: + - type: Transform + pos: 44.5,44.5 + parent: 2 +- proto: LockerBrigmedicFilledHardsuit + entities: + - uid: 12714 + components: + - type: Transform + pos: -3.5,57.5 + parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.14673 + moles: + - 1.7459903 + - 6.568249 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 +- proto: LockerCaptain + entities: + - uid: 12715 + components: + - type: Transform + pos: 78.5,28.5 + parent: 2 +- proto: LockerCaptainFilled + entities: + - uid: 12716 + components: + - type: Transform + pos: 78.5,26.5 + parent: 2 +- proto: LockerChemistryFilled + entities: + - uid: 12717 + components: + - type: Transform + pos: 8.5,23.5 + parent: 2 + - uid: 12718 + components: + - type: Transform + pos: 7.5,23.5 + parent: 2 +- proto: LockerChiefEngineerFilled + entities: + - uid: 12719 + components: + - type: Transform + pos: -2.5,26.5 + parent: 2 +- proto: LockerChiefMedicalOfficerFilled + entities: + - uid: 12720 + components: + - type: Transform + pos: 19.5,40.5 + parent: 2 +- proto: LockerClown + entities: + - uid: 742 + components: + - type: Transform + pos: 42.5,45.5 + parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.14673 + moles: + - 1.7459903 + - 6.568249 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 751 + - 761 + - 762 + - 759 + - 756 + - 749 + - 753 + - 758 + - 763 + - 764 + - 765 + - 748 + - 750 + - 757 + - 755 + - 760 + - 743 + - 752 + - 746 + - 754 + - 745 + - 744 + - 767 + - 747 + - 766 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null +- proto: LockerDetectiveFilled + entities: + - uid: 12721 + components: + - type: Transform + pos: 2.5,60.5 + parent: 2 +- proto: LockerElectricalSuppliesFilled + entities: + - uid: 12722 + components: + - type: Transform + pos: -6.5,38.5 + parent: 2 + - uid: 12723 + components: + - type: Transform + pos: -6.5,38.5 + parent: 2 +- proto: LockerEngineerFilled + entities: + - uid: 12724 + components: + - type: Transform + pos: -8.5,32.5 + parent: 2 + - uid: 12725 + components: + - type: Transform + pos: -8.5,33.5 + parent: 2 + - uid: 12726 + components: + - type: Transform + pos: -8.5,35.5 + parent: 2 + - uid: 12727 + components: + - type: Transform + pos: -8.5,36.5 + parent: 2 +- proto: LockerEvidence + entities: + - uid: 12728 + components: + - type: Transform + pos: -7.5,54.5 + parent: 2 + - uid: 12729 + components: + - type: Transform + pos: -3.5,54.5 + parent: 2 + - uid: 12730 + components: + - type: Transform + pos: 0.5,54.5 + parent: 2 +- proto: LockerForensicMantisFilled + entities: + - uid: 829 + components: + - type: Transform + pos: 30.5,4.5 + parent: 2 +- proto: LockerFreezer + entities: + - uid: 12731 + components: + - type: Transform + pos: 52.5,48.5 + parent: 2 + - uid: 12732 + components: + - type: Transform + pos: 52.5,49.5 + parent: 2 + - uid: 12733 + components: + - type: Transform + pos: 57.5,43.5 + parent: 2 +- proto: LockerFreezerVaultFilled + entities: + - uid: 12734 + components: + - type: Transform + pos: 29.5,53.5 + parent: 2 +- proto: LockerHeadOfPersonnelFilled + entities: + - uid: 12735 + components: + - type: Transform + pos: 77.5,40.5 + parent: 2 +- proto: LockerHeadOfSecurityFilled + entities: + - uid: 12736 + components: + - type: Transform + pos: -20.5,55.5 + parent: 2 +- proto: LockerJanitor + entities: + - uid: 7004 + components: + - type: Transform + pos: 41.5,54.5 + parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.1462 + moles: + - 1.606311 + - 6.042789 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 12709 + - 14549 + - 20328 + - 20329 + - 20330 + - 20331 + - 20332 + - 20333 + - 20334 + - 20335 + - 20336 + - 20337 + - 20338 + - 20339 + - 20340 + - 20341 + - 20342 + - 20343 + - 20344 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null +- proto: LockerMedicalFilled + entities: + - uid: 12737 + components: + - type: Transform + pos: 7.5,41.5 + parent: 2 + - uid: 12738 + components: + - type: Transform + pos: 8.5,41.5 + parent: 2 + - uid: 12739 + components: + - type: Transform + pos: 9.5,37.5 + parent: 2 +- proto: LockerMedicineFilled + entities: + - uid: 12740 + components: + - type: Transform + pos: 10.5,30.5 + parent: 2 + - uid: 12741 + components: + - type: Transform + pos: 29.5,41.5 + parent: 2 + - uid: 12742 + components: + - type: Transform + pos: 29.5,43.5 + parent: 2 + - uid: 12743 + components: + - type: Transform + pos: 25.5,38.5 + parent: 2 + - uid: 12744 + components: + - type: Transform + pos: 14.5,39.5 + parent: 2 +- proto: LockerMime + entities: + - uid: 772 + components: + - type: Transform + pos: 40.5,42.5 + parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.14673 + moles: + - 1.7459903 + - 6.568249 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 781 + - 773 + - 779 + - 774 + - 783 + - 787 + - 788 + - 776 + - 782 + - 789 + - 775 + - 790 + - 795 + - 777 + - 780 + - 784 + - 786 + - 785 + - 791 + - 792 + - 793 + - 794 + - 778 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null +- proto: LockerParamedicFilled + entities: + - uid: 12745 + components: + - type: Transform + pos: 8.5,45.5 + parent: 2 + - uid: 12746 + components: + - type: Transform + pos: 8.5,44.5 + parent: 2 +- proto: LockerQuarterMasterFilled + entities: + - uid: 12747 + components: + - type: Transform + pos: 1.5,17.5 + parent: 2 +- proto: LockerResearchDirectorFilled + entities: + - uid: 12748 + components: + - type: Transform + pos: 53.5,17.5 + parent: 2 +- proto: LockerSalvageSpecialistFilled + entities: + - uid: 12749 + components: + - type: Transform + pos: -11.5,4.5 + parent: 2 + - uid: 12750 + components: + - type: Transform + pos: -9.5,4.5 + parent: 2 + - uid: 12751 + components: + - type: Transform + pos: -10.5,4.5 + parent: 2 + - uid: 12752 + components: + - type: Transform + pos: -9.5,7.5 + parent: 2 +- proto: LockerScienceFilled + entities: + - uid: 12753 + components: + - type: Transform + pos: 44.5,20.5 + parent: 2 + - uid: 12754 + components: + - type: Transform + pos: 44.5,21.5 + parent: 2 + - uid: 12755 + components: + - type: Transform + pos: 48.5,13.5 + parent: 2 + - uid: 12756 + components: + - type: Transform + pos: 48.5,14.5 + parent: 2 + - uid: 12757 + components: + - type: Transform + pos: 48.5,15.5 + parent: 2 + - uid: 12758 + components: + - type: Transform + pos: 51.5,20.5 + parent: 2 + - uid: 12759 + components: + - type: Transform + pos: 46.5,29.5 + parent: 2 + - uid: 12760 + components: + - type: Transform + pos: 46.5,30.5 + parent: 2 +- proto: LockerSecurityFilled + entities: + - uid: 12761 + components: + - type: Transform + pos: -6.5,13.5 + parent: 2 + - uid: 12762 + components: + - type: Transform + pos: -4.5,31.5 + parent: 2 + - uid: 12763 + components: + - type: Transform + pos: -25.5,66.5 + parent: 2 + - uid: 12764 + components: + - type: Transform + pos: -25.5,67.5 + parent: 2 + - uid: 12765 + components: + - type: Transform + pos: -25.5,69.5 + parent: 2 + - uid: 12766 + components: + - type: Transform + pos: -25.5,70.5 + parent: 2 + - uid: 12767 + components: + - type: Transform + pos: 43.5,14.5 + parent: 2 + - uid: 12768 + components: + - type: Transform + pos: 6.5,26.5 + parent: 2 + - uid: 12769 + components: + - type: Transform + pos: 60.5,56.5 + parent: 2 + - uid: 12770 + components: + - type: Transform + pos: 69.5,15.5 + parent: 2 +- proto: LockerSteel + entities: + - uid: 883 + components: + - type: Transform + pos: 34.5,1.5 + parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.14673 + moles: + - 1.7459903 + - 6.568249 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 892 + - 893 + - 894 + - 889 + - 890 + - 884 + - 891 + - 885 + - 886 + - 887 + - 888 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null +- proto: LockerSyndicatePersonal + entities: + - uid: 12771 + components: + - type: Transform + pos: -7.5,60.5 + parent: 2 +- proto: LockerWardenFilledHardsuit + entities: + - uid: 12772 + components: + - type: Transform + pos: -17.5,70.5 + parent: 2 +- proto: LockerWeldingSuppliesFilled + entities: + - uid: 12773 + components: + - type: Transform + pos: -7.5,38.5 + parent: 2 +- proto: LuxuryPen + entities: + - uid: 12774 + components: + - type: Transform + pos: -5.322667,25.958141 + parent: 2 + - uid: 12775 + components: + - type: Transform + pos: -19.621561,53.684982 + parent: 2 + - uid: 12776 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 17.986338,59.546852 + parent: 2 +- proto: MachineAnomalyGenerator + entities: + - uid: 19363 + components: + - type: Transform + pos: 51.5,0.5 + parent: 2 +- proto: MachineAnomalyVessel + entities: + - uid: 12778 + components: + - type: Transform + pos: 57.5,0.5 + parent: 2 + - uid: 12779 + components: + - type: Transform + pos: 57.5,3.5 + parent: 2 +- proto: MachineAPE + entities: + - uid: 12780 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 45.5,1.5 + parent: 2 + - uid: 12781 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 45.5,0.5 + parent: 2 +- proto: MachineArtifactAnalyzer + entities: + - uid: 12782 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,10.5 + parent: 2 + - type: DeviceLinkSink + links: + - 7153 +- proto: MachineCentrifuge + entities: + - uid: 12783 + components: + - type: Transform + pos: 10.5,28.5 + parent: 2 +- proto: MachineElectrolysisUnit + entities: + - uid: 12784 + components: + - type: Transform + pos: 11.5,24.5 + parent: 2 +- proto: MachineFrame + entities: + - uid: 12785 + components: + - type: Transform + pos: 34.5,14.5 + parent: 2 + - uid: 12787 + components: + - type: Transform + pos: 48.5,25.5 + parent: 2 + - uid: 12788 + components: + - type: Transform + pos: 49.5,54.5 + parent: 2 + - uid: 12789 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 58.5,24.5 + parent: 2 + - uid: 12790 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 60.5,26.5 + parent: 2 + - uid: 12791 + components: + - type: Transform + pos: 49.5,61.5 + parent: 2 + - uid: 12792 + components: + - type: Transform + pos: 48.5,61.5 + parent: 2 + - uid: 20258 + components: + - type: Transform + pos: 32.5,-14.5 + parent: 2 + - uid: 20259 + components: + - type: Transform + pos: 28.5,-14.5 + parent: 2 + - uid: 20268 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,-46.5 + parent: 2 + - uid: 20269 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.5,-44.5 + parent: 2 + - uid: 20274 + components: + - type: Transform + pos: 30.5,-46.5 + parent: 2 +- proto: MachineFrameDestroyed + entities: + - uid: 12793 + components: + - type: Transform + pos: 40.5,19.5 + parent: 2 + - uid: 12794 + components: + - type: Transform + pos: 43.5,19.5 + parent: 2 + - uid: 12795 + components: + - type: Transform + pos: 34.5,16.5 + parent: 2 + - uid: 12796 + components: + - type: Transform + pos: 34.5,13.5 + parent: 2 + - uid: 12797 + components: + - type: Transform + pos: 35.5,13.5 + parent: 2 + - uid: 12798 + components: + - type: Transform + pos: 57.5,-2.5 + parent: 2 + - uid: 12799 + components: + - type: Transform + pos: 50.5,20.5 + parent: 2 + - uid: 12800 + components: + - type: Transform + pos: 49.5,50.5 + parent: 2 + - uid: 12801 + components: + - type: Transform + pos: 50.5,54.5 + parent: 2 + - uid: 12804 + components: + - type: Transform + pos: 60.5,24.5 + parent: 2 +- proto: MagazinePistol + entities: + - uid: 12805 + components: + - type: Transform + pos: -16.705189,68.68963 + parent: 2 + - uid: 12806 + components: + - type: Transform + pos: -16.597588,68.5821 + parent: 2 + - uid: 12807 + components: + - type: Transform + pos: -16.525854,68.45665 + parent: 2 + - uid: 12808 + components: + - type: Transform + pos: -16.382387,68.761314 + parent: 2 + - uid: 12809 + components: + - type: Transform + pos: -16.274788,68.653786 + parent: 2 + - uid: 12810 + components: + - type: Transform + pos: -16.18512,68.49249 + parent: 2 +- proto: MagicDiceBag + entities: + - uid: 12811 + components: + - type: Transform + pos: 23.56858,13.563526 + parent: 2 +- proto: MailTeleporter + entities: + - uid: 12812 + components: + - type: Transform + pos: -7.5,8.5 + parent: 2 +- proto: MaintenanceFluffSpawner + entities: + - uid: 12813 + components: + - type: Transform + pos: 10.5,8.5 + parent: 2 + - uid: 12814 + components: + - type: Transform + pos: 25.5,5.5 + parent: 2 + - uid: 12815 + components: + - type: Transform + pos: 35.5,43.5 + parent: 2 + - uid: 12816 + components: + - type: Transform + pos: 35.5,43.5 + parent: 2 + - uid: 12817 + components: + - type: Transform + pos: 35.5,45.5 + parent: 2 + - uid: 12818 + components: + - type: Transform + pos: 76.5,19.5 + parent: 2 + - uid: 12819 + components: + - type: Transform + pos: 69.5,52.5 + parent: 2 + - uid: 12820 + components: + - type: Transform + pos: 52.5,9.5 + parent: 2 + - uid: 12821 + components: + - type: Transform + pos: 53.5,10.5 + parent: 2 + - uid: 12822 + components: + - type: Transform + pos: 44.5,9.5 + parent: 2 + - uid: 12823 + components: + - type: Transform + pos: 44.5,8.5 + parent: 2 + - uid: 12824 + components: + - type: Transform + pos: 14.5,8.5 + parent: 2 + - uid: 12825 + components: + - type: Transform + pos: -18.5,13.5 + parent: 2 + - uid: 12826 + components: + - type: Transform + pos: -18.5,13.5 + parent: 2 + - uid: 12827 + components: + - type: Transform + pos: 15.5,66.5 + parent: 2 + - uid: 12828 + components: + - type: Transform + pos: 23.5,63.5 + parent: 2 + - uid: 12829 + components: + - type: Transform + pos: 23.5,62.5 + parent: 2 + - uid: 12830 + components: + - type: Transform + pos: 29.5,65.5 + parent: 2 +- proto: MaintenancePlantSpawner + entities: + - uid: 12831 + components: + - type: Transform + pos: 22.5,5.5 + parent: 2 + - uid: 12832 + components: + - type: Transform + pos: 76.5,18.5 + parent: 2 + - uid: 12833 + components: + - type: Transform + pos: 55.5,9.5 + parent: 2 +- proto: MaintenanceToolSpawner + entities: + - uid: 12834 + components: + - type: Transform + pos: 45.5,59.5 + parent: 2 + - uid: 12835 + components: + - type: Transform + pos: 27.5,5.5 + parent: 2 + - uid: 12836 + components: + - type: Transform + pos: 36.5,43.5 + parent: 2 + - uid: 12837 + components: + - type: Transform + pos: 36.5,43.5 + parent: 2 + - uid: 12838 + components: + - type: Transform + pos: 36.5,43.5 + parent: 2 + - uid: 12839 + components: + - type: Transform + pos: 74.5,21.5 + parent: 2 + - uid: 12840 + components: + - type: Transform + pos: 70.5,48.5 + parent: 2 + - uid: 12841 + components: + - type: Transform + pos: 69.5,48.5 + parent: 2 + - uid: 12842 + components: + - type: Transform + pos: 53.5,9.5 + parent: 2 + - uid: 12843 + components: + - type: Transform + pos: 14.5,10.5 + parent: 2 + - uid: 12844 + components: + - type: Transform + pos: 14.5,11.5 + parent: 2 + - uid: 12845 + components: + - type: Transform + pos: -17.5,13.5 + parent: 2 + - uid: 12846 + components: + - type: Transform + pos: -17.5,13.5 + parent: 2 + - uid: 12847 + components: + - type: Transform + pos: 18.5,67.5 + parent: 2 + - uid: 12848 + components: + - type: Transform + pos: 15.5,69.5 + parent: 2 + - uid: 12849 + components: + - type: Transform + pos: 14.5,67.5 + parent: 2 + - uid: 12850 + components: + - type: Transform + pos: 26.5,63.5 + parent: 2 + - uid: 12851 + components: + - type: Transform + pos: 29.5,62.5 + parent: 2 + - uid: 12852 + components: + - type: Transform + pos: 28.5,66.5 + parent: 2 + - uid: 12853 + components: + - type: Transform + pos: 45.5,59.5 + parent: 2 + - uid: 12854 + components: + - type: Transform + pos: 44.5,59.5 + parent: 2 +- proto: MaintenanceWeaponSpawner + entities: + - uid: 12855 + components: + - type: Transform + pos: 15.5,2.5 + parent: 2 + - uid: 12856 + components: + - type: Transform + pos: 80.5,50.5 + parent: 2 + - uid: 12857 + components: + - type: Transform + pos: 20.5,66.5 + parent: 2 +- proto: MaterialCloth + entities: + - uid: 12858 + components: + - type: Transform + pos: 76.81112,37.45618 + parent: 2 +- proto: MaterialDurathread + entities: + - uid: 12859 + components: + - type: Transform + pos: 76.62224,37.823154 + parent: 2 + - type: Physics + angularDamping: 0 + linearDamping: 0 +- proto: MechEquipmentGrabber + entities: + - uid: 12860 + components: + - type: Transform + pos: -17.5,-0.5 + parent: 2 +- proto: MedicalBed + entities: + - uid: 12861 + components: + - type: Transform + pos: 5.5,35.5 + parent: 2 + - uid: 12862 + components: + - type: Transform + pos: 3.5,35.5 + parent: 2 + - uid: 12863 + components: + - type: Transform + pos: 4.5,35.5 + parent: 2 + - uid: 12864 + components: + - type: Transform + pos: -5.5,58.5 + parent: 2 + - uid: 12865 + components: + - type: Transform + pos: 29.5,40.5 + parent: 2 + - uid: 12866 + components: + - type: Transform + pos: 29.5,42.5 + parent: 2 +- proto: MedicalScanner + entities: + - uid: 12802 + components: + - type: Transform + pos: 28.5,29.5 + parent: 2 + - uid: 12803 + components: + - type: Transform + pos: 25.5,29.5 + parent: 2 + - uid: 12868 + components: + - type: Transform + pos: 21.5,28.5 + parent: 2 + - uid: 16226 + components: + - type: Transform + pos: -10.5,66.5 + parent: 2 +- proto: MedicalTechFab + entities: + - uid: 12869 + components: + - type: Transform + pos: 9.5,39.5 + parent: 2 +- proto: MedkitAdvancedFilled + entities: + - uid: 12870 + components: + - type: Transform + pos: 55.531895,19.585579 + parent: 2 + - uid: 12871 + components: + - type: Transform + pos: 6.360105,43.725613 + parent: 2 + - uid: 12872 + components: + - type: Transform + pos: 5.5,31.5 + parent: 2 + - uid: 12873 + components: + - type: Transform + pos: 14.5,32.5 + parent: 2 +- proto: MedkitBruteFilled + entities: + - uid: 12874 + components: + - type: Transform + pos: 6.372061,43.55835 + parent: 2 + - uid: 12875 + components: + - type: Transform + pos: 3.5,31.5 + parent: 2 + - uid: 12876 + components: + - type: Transform + pos: 15.5,32.5 + parent: 2 +- proto: MedkitBurnFilled + entities: + - uid: 12877 + components: + - type: Transform + pos: -7.476385,22.687494 + parent: 2 + - uid: 12878 + components: + - type: Transform + pos: 6.372061,43.41498 + parent: 2 + - uid: 12879 + components: + - type: Transform + pos: 16.5,32.5 + parent: 2 +- proto: MedkitCombatFilled + entities: + - uid: 12880 + components: + - type: Transform + pos: 17.5,32.5 + parent: 2 +- proto: MedkitFilled + entities: + - uid: 12881 + components: + - type: Transform + pos: 12.51605,12.854057 + parent: 2 + - uid: 12882 + components: + - type: Transform + pos: -25.49519,62.612812 + parent: 2 + - uid: 12883 + components: + - type: Transform + pos: 84.61076,33.65296 + parent: 2 + - uid: 12884 + components: + - type: Transform + pos: 14.5,32.5 + parent: 2 +- proto: MedkitOxygenFilled + entities: + - uid: 12885 + components: + - type: Transform + pos: 6.730728,43.73756 + parent: 2 + - uid: 12886 + components: + - type: Transform + pos: 28.530539,66.59765 + parent: 2 + - uid: 12887 + components: + - type: Transform + pos: 15.5,32.5 + parent: 2 +- proto: MedkitRadiationFilled + entities: + - uid: 12888 + components: + - type: Transform + pos: 16.5,32.5 + parent: 2 + - uid: 12889 + components: + - type: Transform + pos: 6.742684,43.55835 + parent: 2 +- proto: MedkitToxinFilled + entities: + - uid: 12890 + components: + - type: Transform + pos: 17.5,32.5 + parent: 2 + - uid: 12891 + components: + - type: Transform + pos: 6.742684,43.42693 + parent: 2 +- proto: MetempsychoticMachine + entities: + - uid: 6948 + components: + - type: Transform + pos: 23.5,28.5 + parent: 2 +- proto: Mirror + entities: + - uid: 12892 + components: + - type: Transform + pos: 2.5,69.5 + parent: 2 + - uid: 12893 + components: + - type: Transform + pos: 1.5,69.5 + parent: 2 + - uid: 12894 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 13.5,33.5 + parent: 2 +- proto: MMI + entities: + - uid: 12895 + components: + - type: Transform + pos: 40.588707,21.59096 + parent: 2 + - uid: 12896 + components: + - type: Transform + pos: 59.385284,15.698191 + parent: 2 + - uid: 19790 + components: + - type: Transform + pos: 36.348755,-36.582287 + parent: 2 + - uid: 19791 + components: + - type: Transform + pos: 36.564137,-36.456837 + parent: 2 +- proto: ModularGrenade + entities: + - uid: 12897 + components: + - type: Transform + pos: 44.348534,53.369633 + parent: 2 + - uid: 12898 + components: + - type: Transform + pos: 44.563732,53.501053 + parent: 2 + - uid: 12899 + components: + - type: Transform + pos: 44.68329,53.60858 + parent: 2 +- proto: MopItem + entities: + - uid: 12900 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.501328,54.524693 + parent: 2 + - uid: 12901 + components: + - type: Transform + pos: 40.45712,54.427982 + parent: 2 + - uid: 12902 + components: + - type: Transform + pos: 39.470783,52.54626 + parent: 2 + - uid: 20328 + components: + - type: Transform + parent: 7004 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: Morgue + entities: + - uid: 12903 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,60.5 + parent: 2 + - uid: 12904 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,63.5 + parent: 2 + - uid: 12905 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,42.5 + parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.14673 + moles: + - 1.8856695 + - 7.0937095 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - uid: 12906 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,43.5 + parent: 2 + - uid: 12907 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,44.5 + parent: 2 + - uid: 12908 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,45.5 + parent: 2 + - uid: 12909 + components: + - type: Transform + pos: 16.5,45.5 + parent: 2 + - uid: 12910 + components: + - type: Transform + pos: 15.5,45.5 + parent: 2 +- proto: MouseTimedSpawner + entities: + - uid: 12911 + components: + - type: Transform + pos: -16.5,13.5 + parent: 2 + - uid: 12912 + components: + - type: Transform + pos: 14.5,13.5 + parent: 2 + - uid: 12913 + components: + - type: Transform + pos: 56.5,12.5 + parent: 2 + - uid: 12914 + components: + - type: Transform + pos: 78.5,50.5 + parent: 2 + - uid: 12915 + components: + - type: Transform + pos: 43.5,59.5 + parent: 2 +- proto: Multitool + entities: + - uid: 12916 + components: + - type: Transform + pos: -7.60857,24.471098 + parent: 2 + - uid: 12917 + components: + - type: Transform + pos: -11.444434,33.73631 + parent: 2 + - uid: 12918 + components: + - type: Transform + pos: 12.506436,13.570902 + parent: 2 + - uid: 12919 + components: + - type: Transform + pos: 36.416718,7.630267 + parent: 2 + - uid: 12920 + components: + - type: Transform + pos: 60.52384,28.581665 + parent: 2 + - uid: 12921 + components: + - type: Transform + pos: 84.7363,35.64221 + parent: 2 + - uid: 12922 + components: + - type: Transform + pos: 22.850292,23.553356 + parent: 2 +- proto: NitrogenCanister + entities: + - uid: 11482 + components: + - type: Transform + pos: -20.5,25.5 + parent: 2 + - uid: 12923 + components: + - type: Transform + pos: -14.5,-7.5 + parent: 2 + - uid: 12924 + components: + - type: Transform + pos: 32.5,16.5 + parent: 2 + - uid: 12925 + components: + - type: Transform + pos: 32.5,15.5 + parent: 2 + - uid: 12926 + components: + - type: Transform + pos: 74.5,59.5 + parent: 2 + - uid: 12927 + components: + - type: Transform + pos: -38.5,12.5 + parent: 2 + - uid: 14288 + components: + - type: Transform + pos: -20.5,23.5 + parent: 2 + - uid: 14289 + components: + - type: Transform + pos: -19.5,23.5 + parent: 2 + - uid: 18758 + components: + - type: Transform + pos: -16.5,31.5 + parent: 2 + - uid: 18759 + components: + - type: Transform + pos: -16.5,30.5 + parent: 2 +- proto: NitrousOxideCanister + entities: + - uid: 12928 + components: + - type: Transform + pos: 32.5,14.5 + parent: 2 + - uid: 14286 + components: + - type: Transform + pos: -20.5,22.5 + parent: 2 + - uid: 14287 + components: + - type: Transform + pos: -19.5,22.5 + parent: 2 + - uid: 19696 + components: + - type: Transform + pos: 32.5,-48.5 + parent: 2 + - uid: 19697 + components: + - type: Transform + pos: 28.5,-48.5 + parent: 2 +- proto: NitrousOxideTankFilled + entities: + - uid: 12929 + components: + - type: Transform + pos: 41.431168,21.58507 + parent: 2 + - uid: 12930 + components: + - type: Transform + pos: 58.536438,15.507032 + parent: 2 +- proto: NuclearBomb + entities: + - uid: 12931 + components: + - type: Transform + pos: 30.5,56.5 + parent: 2 +- proto: NukeDiskFake + entities: + - uid: 8352 + components: + - type: Transform + pos: 75.46282,31.57607 + parent: 2 +- proto: OperatingTable + entities: + - uid: 12932 + components: + - type: Transform + pos: 59.5,16.5 + parent: 2 + - uid: 12933 + components: + - type: Transform + pos: -29.5,54.5 + parent: 2 + - uid: 12934 + components: + - type: Transform + pos: -3.5,59.5 + parent: 2 + - uid: 12935 + components: + - type: Transform + pos: 11.5,40.5 + parent: 2 + - uid: 12936 + components: + - type: Transform + pos: 11.5,38.5 + parent: 2 +- proto: OracleSpawner + entities: + - uid: 19370 + components: + - type: Transform + pos: 54.5,25.5 + parent: 2 +- proto: OreBox + entities: + - uid: 12938 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,65.5 + parent: 2 + - uid: 12939 + components: + - type: Transform + pos: -17.5,2.5 + parent: 2 + - uid: 12940 + components: + - type: Transform + pos: -17.5,1.5 + parent: 2 +- proto: OreProcessor + entities: + - uid: 12941 + components: + - type: Transform + pos: -12.5,9.5 + parent: 2 +- proto: OxygenCanister + entities: + - uid: 12942 + components: + - type: Transform + pos: 37.5,23.5 + parent: 2 + - uid: 12943 + components: + - type: Transform + pos: -9.5,41.5 + parent: 2 + - uid: 12944 + components: + - type: Transform + pos: 18.5,5.5 + parent: 2 + - uid: 12945 + components: + - type: Transform + pos: 20.5,45.5 + parent: 2 + - uid: 12946 + components: + - type: Transform + pos: 21.5,43.5 + parent: 2 + - uid: 12947 + components: + - type: Transform + pos: -14.5,-6.5 + parent: 2 + - uid: 12948 + components: + - type: Transform + pos: 33.5,16.5 + parent: 2 + - uid: 12949 + components: + - type: Transform + pos: 33.5,15.5 + parent: 2 + - uid: 12950 + components: + - type: Transform + pos: 73.5,59.5 + parent: 2 + - uid: 12951 + components: + - type: Transform + pos: -38.5,16.5 + parent: 2 +- proto: PaintingSadClown + entities: + - uid: 12952 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,46.5 + parent: 2 +- proto: Paper + entities: + - uid: 12953 + components: + - type: Transform + pos: -31.493675,60.469395 + parent: 2 + - uid: 12954 + components: + - type: Transform + pos: -31.395414,60.525505 + parent: 2 + - uid: 12955 + components: + - type: Transform + pos: -27.436836,60.385227 + parent: 2 + - uid: 12956 + components: + - type: Transform + pos: -27.324537,60.455364 + parent: 2 + - uid: 12957 + components: + - type: Transform + pos: 9.6792,60.519764 + parent: 2 + - uid: 12958 + components: + - type: Transform + pos: 9.468637,60.435596 + parent: 2 +- proto: PaperBin10 + entities: + - uid: 12959 + components: + - type: Transform + pos: 6.5,73.5 + parent: 2 +- proto: PaperBin20 + entities: + - uid: 8115 + components: + - type: Transform + pos: 72.5,29.5 + parent: 2 + - uid: 12960 + components: + - type: Transform + pos: 6.5,12.5 + parent: 2 + - uid: 12961 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,15.5 + parent: 2 + - uid: 12962 + components: + - type: Transform + pos: -5.5,29.5 + parent: 2 + - uid: 12963 + components: + - type: Transform + pos: -20.5,53.5 + parent: 2 + - uid: 12964 + components: + - type: Transform + pos: -24.5,52.5 + parent: 2 + - uid: 12965 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,67.5 + parent: 2 + - uid: 12966 + components: + - type: Transform + pos: 1.5,60.5 + parent: 2 + - uid: 12967 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,59.5 + parent: 2 + - uid: 12968 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,55.5 + parent: 2 + - uid: 12969 + components: + - type: Transform + pos: 16.5,54.5 + parent: 2 + - uid: 12970 + components: + - type: Transform + pos: 27.5,35.5 + parent: 2 + - uid: 12971 + components: + - type: Transform + pos: 71.5,38.5 + parent: 2 + - uid: 12972 + components: + - type: Transform + pos: 68.5,40.5 + parent: 2 + - uid: 12973 + components: + - type: Transform + pos: 82.5,24.5 + parent: 2 +- proto: PaperOffice + entities: + - uid: 358 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 72.485115,28.520872 + parent: 2 + - uid: 481 + components: + - type: Transform + pos: 33.243618,5.674018 + parent: 2 + - uid: 484 + components: + - type: Transform + pos: 33.354378,5.6265497 + parent: 2 + - uid: 486 + components: + - type: Transform + pos: 33.401844,5.4841447 + parent: 2 + - uid: 487 + components: + - type: Transform + pos: 33.48096,5.5157905 + parent: 2 + - uid: 830 + components: + - type: Transform + pos: 33.306908,5.499967 + parent: 2 + - uid: 12975 + components: + - type: Transform + pos: 9.665319,12.67992 + parent: 2 + - uid: 12976 + components: + - type: Transform + pos: 9.647387,12.67992 + parent: 2 + - uid: 12977 + components: + - type: Transform + pos: 76.21128,37.417156 + parent: 2 + - uid: 12978 + components: + - type: Transform + pos: 76.21128,37.417156 + parent: 2 + - uid: 12979 + components: + - type: Transform + pos: 76.21128,37.417156 + parent: 2 + - uid: 12980 + components: + - type: Transform + pos: 76.21128,37.417156 + parent: 2 + - uid: 12981 + components: + - type: Transform + pos: 76.13859,37.692505 + parent: 2 + - uid: 12982 + components: + - type: Transform + pos: 76.064514,37.840652 + parent: 2 + - uid: 12983 + components: + - type: Transform + pos: 76.504326,37.581394 + parent: 2 + - uid: 12984 + components: + - type: Transform + pos: 76.49044,37.54899 + parent: 2 + - uid: 12985 + components: + - type: Transform + pos: 76.171,37.359173 + parent: 2 + - uid: 12986 + components: + - type: Transform + pos: 76.49044,37.562874 + parent: 2 + - uid: 12987 + components: + - type: Transform + pos: 76.45803,37.484173 + parent: 2 + - uid: 15284 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 72.406006,28.663277 + parent: 2 + - uid: 15387 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 72.45347,28.647455 + parent: 2 + - uid: 15412 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 72.45347,28.56834 + parent: 2 + - uid: 17952 + components: + - type: Transform + pos: 33.306908,5.4841447 + parent: 2 +- proto: PartRodMetal + entities: + - uid: 7299 + components: + - type: Transform + parent: 7298 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 7300 + components: + - type: Transform + parent: 7298 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 7301 + components: + - type: Transform + parent: 7298 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 7302 + components: + - type: Transform + parent: 7298 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 12992 + components: + - type: Transform + pos: -24.247482,43.434326 + parent: 2 + - uid: 12993 + components: + - type: Transform + pos: -24.233444,43.434326 + parent: 2 + - uid: 12994 + components: + - type: Transform + pos: -24.233444,43.434326 + parent: 2 + - uid: 12995 + components: + - type: Transform + pos: 50.564972,-1.2687263 + parent: 2 + - uid: 12996 + components: + - type: Transform + pos: 75.62877,62.543827 + parent: 2 + - uid: 12997 + components: + - type: Transform + pos: 75.62877,62.543827 + parent: 2 + - uid: 12998 + components: + - type: Transform + pos: 71.54807,42.607285 + parent: 2 + - uid: 12999 + components: + - type: Transform + pos: 29.53992,62.576374 + parent: 2 + - uid: 13001 + components: + - type: Transform + pos: -14.5,-1.5 + parent: 2 + - uid: 19787 + components: + - type: Transform + pos: 34.500034,-36.5106 + parent: 2 +- proto: Pen + entities: + - uid: 892 + components: + - type: Transform + parent: 883 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 13002 + components: + - type: Transform + pos: 1.4256108,15.600878 + parent: 2 + - uid: 13003 + components: + - type: Transform + pos: -1.5210662,15.664534 + parent: 2 + - uid: 13004 + components: + - type: Transform + pos: -5.521473,29.62905 + parent: 2 + - uid: 13005 + components: + - type: Transform + pos: -24.42566,52.50472 + parent: 2 + - uid: 13006 + components: + - type: Transform + pos: -21.50571,67.66511 + parent: 2 + - uid: 13007 + components: + - type: Transform + pos: -31.634052,60.792034 + parent: 2 + - uid: 13008 + components: + - type: Transform + pos: -27.577213,60.76398 + parent: 2 + - uid: 13009 + components: + - type: Transform + pos: 9.482676,60.730183 + parent: 2 + - uid: 13010 + components: + - type: Transform + pos: 19.420622,55.291016 + parent: 2 + - uid: 13011 + components: + - type: Transform + pos: 16.893871,54.56156 + parent: 2 + - uid: 13012 + components: + - type: Transform + pos: 22.547556,23.47561 + parent: 2 + - uid: 13013 + components: + - type: Transform + pos: 27.569103,35.5409 + parent: 2 + - uid: 13014 + components: + - type: Transform + pos: 18.38041,39.799717 + parent: 2 + - uid: 13015 + components: + - type: Transform + pos: 71.449234,38.55362 + parent: 2 + - uid: 13016 + components: + - type: Transform + pos: 71.63172,38.651814 + parent: 2 + - uid: 13017 + components: + - type: Transform + pos: 82.64236,24.572807 + parent: 2 +- proto: PenLightBase + entities: + - uid: 255 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 72.358536,28.425936 + parent: 2 + - uid: 476 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.797413,5.610727 + parent: 2 + - uid: 893 + components: + - type: Transform + parent: 883 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 894 + components: + - type: Transform + parent: 883 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: PersonalAI + entities: + - uid: 13020 + components: + - type: Transform + pos: 53.373207,14.552109 + parent: 2 + - uid: 13021 + components: + - type: Transform + pos: 24.469769,12.325003 + parent: 2 +- proto: PhoneInstrument + entities: + - uid: 19779 + components: + - type: Transform + pos: 26.35152,-35.381237 + parent: 2 +- proto: PianoInstrument + entities: + - uid: 13022 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,39.5 + parent: 2 +- proto: PinpointerNuclear + entities: + - uid: 13023 + components: + - type: Transform + pos: 29.502483,55.605114 + parent: 2 + - uid: 13024 + components: + - type: Transform + pos: 75.4804,31.589834 + parent: 2 +- proto: PlasmaCanister + entities: + - uid: 13025 + components: + - type: Transform + pos: 33.5,14.5 + parent: 2 + - uid: 13026 + components: + - type: Transform + pos: 32.5,13.5 + parent: 2 + - uid: 13027 + components: + - type: Transform + pos: 33.5,13.5 + parent: 2 + - uid: 13028 + components: + - type: Transform + pos: -28.5,2.5 + parent: 2 + - uid: 14283 + components: + - type: Transform + pos: -19.5,20.5 + parent: 2 +- proto: PlasticFlapsAirtightClear + entities: + - uid: 13029 + components: + - type: Transform + pos: 21.5,64.5 + parent: 2 + - uid: 13030 + components: + - type: Transform + pos: 21.5,67.5 + parent: 2 + - uid: 13031 + components: + - type: Transform + pos: 9.5,0.5 + parent: 2 + - uid: 13032 + components: + - type: Transform + pos: 2.5,2.5 + parent: 2 + - uid: 13033 + components: + - type: Transform + pos: 2.5,0.5 + parent: 2 + - uid: 13034 + components: + - type: Transform + pos: -1.5,2.5 + parent: 2 + - uid: 13035 + components: + - type: Transform + pos: -1.5,0.5 + parent: 2 + - uid: 13036 + components: + - type: Transform + pos: 33.5,-2.5 + parent: 2 +- proto: PlasticFlapsAirtightOpaque + entities: + - uid: 13037 + components: + - type: Transform + pos: -4.5,67.5 + parent: 2 + - uid: 13038 + components: + - type: Transform + pos: 22.5,44.5 + parent: 2 +- proto: PlushieMothBartender + entities: + - uid: 20376 + components: + - type: Transform + pos: 59.46184,43.62285 + parent: 2 +- proto: PlushieSlips + entities: + - uid: 20333 + components: + - type: Transform + parent: 7004 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: PlushieTrystan + entities: + - uid: 8274 + components: + - type: Transform + pos: 74.87769,28.536694 + parent: 2 +- proto: PortableFlasher + entities: + - uid: 13039 + components: + - type: Transform + pos: -20.5,63.5 + parent: 2 + - uid: 13040 + components: + - type: Transform + pos: -20.5,64.5 + parent: 2 +- proto: PortableGeneratorJrPacman + entities: + - uid: 19604 + components: + - type: Transform + pos: 26.5,6.5 + parent: 2 + - uid: 19605 + components: + - type: Transform + pos: 13.5,5.5 + parent: 2 + - uid: 19606 + components: + - type: Transform + pos: -17.5,10.5 + parent: 2 + - uid: 19607 + components: + - type: Transform + pos: -21.5,25.5 + parent: 2 + - uid: 19608 + components: + - type: Transform + pos: -8.5,31.5 + parent: 2 + - uid: 19609 + components: + - type: Transform + pos: -10.5,44.5 + parent: 2 + - uid: 19610 + components: + - type: Transform + pos: -3.5,68.5 + parent: 2 + - uid: 19611 + components: + - type: Transform + pos: 43.5,60.5 + parent: 2 + - uid: 19612 + components: + - type: Transform + pos: 74.5,50.5 + parent: 2 + - uid: 19613 + components: + - type: Transform + pos: 75.5,19.5 + parent: 2 + - uid: 19614 + components: + - type: Transform + pos: 54.5,10.5 + parent: 2 + - uid: 19615 + components: + - type: Transform + pos: 37.5,21.5 + parent: 2 +- proto: PortableScrubber + entities: + - uid: 13043 + components: + - type: Transform + pos: -15.5,18.5 + parent: 2 + - uid: 13044 + components: + - type: Transform + pos: -14.5,18.5 + parent: 2 + - uid: 18644 + components: + - type: Transform + pos: -5.5,19.5 + parent: 2 + - uid: 18645 + components: + - type: Transform + pos: -4.5,19.5 + parent: 2 +- proto: PosterContrabandBountyHunters + entities: + - uid: 19515 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,66.5 + parent: 2 +- proto: PosterContrabandBustyBackdoorExoBabes6 + entities: + - uid: 19516 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,69.5 + parent: 2 +- proto: PosterContrabandClown + entities: + - uid: 13047 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,46.5 + parent: 2 +- proto: PosterContrabandCommunistState + entities: + - uid: 19475 + components: + - type: Transform + pos: -31.5,68.5 + parent: 2 + - uid: 19488 + components: + - type: Transform + pos: -31.5,67.5 + parent: 2 + - uid: 19489 + components: + - type: Transform + pos: -30.5,68.5 + parent: 2 + - uid: 19490 + components: + - type: Transform + pos: -30.5,67.5 + parent: 2 + - uid: 19517 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,70.5 + parent: 2 +- proto: PosterContrabandCybersun600 + entities: + - uid: 19518 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,75.5 + parent: 2 +- proto: PosterContrabandKosmicheskayaStantsiya + entities: + - uid: 19514 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,72.5 + parent: 2 +- proto: PosterLegitJustAWeekAway + entities: + - uid: 19513 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,71.5 + parent: 2 +- proto: PosterLegitNanotrasenLogo + entities: + - uid: 17018 + components: + - type: Transform + pos: 84.5,34.5 + parent: 2 + - uid: 17019 + components: + - type: Transform + pos: 83.5,39.5 + parent: 2 + - uid: 17020 + components: + - type: Transform + pos: 83.5,29.5 + parent: 2 + - uid: 17915 + components: + - type: Transform + pos: 76.5,36.5 + parent: 2 + - uid: 17932 + components: + - type: Transform + pos: 76.5,32.5 + parent: 2 +- proto: PottedPlantRandom + entities: + - uid: 13056 + components: + - type: Transform + pos: 60.5,22.5 + parent: 2 + - uid: 13057 + components: + - type: Transform + pos: 54.5,24.5 + parent: 2 + - uid: 13058 + components: + - type: Transform + pos: 63.5,62.5 + parent: 2 + - uid: 13059 + components: + - type: Transform + pos: 65.5,62.5 + parent: 2 + - uid: 13060 + components: + - type: Transform + pos: 67.5,62.5 + parent: 2 + - uid: 13061 + components: + - type: Transform + pos: 76.5,4.5 + parent: 2 + - uid: 13062 + components: + - type: Transform + pos: 74.5,-1.5 + parent: 2 + - uid: 13063 + components: + - type: Transform + pos: 73.5,10.5 + parent: 2 +- proto: PottedPlantRandomPlastic + entities: + - uid: 13064 + components: + - type: Transform + pos: -12.5,20.5 + parent: 2 + - uid: 13065 + components: + - type: Transform + pos: 36.5,3.5 + parent: 2 + - uid: 13066 + components: + - type: Transform + pos: -27.5,63.5 + parent: 2 +- proto: PottedPlantRD + entities: + - uid: 13067 + components: + - type: Transform + pos: 51.5,18.5 + parent: 2 +- proto: PowerCellHighPrinted + entities: + - uid: 13068 + components: + - type: Transform + pos: -6.4236336,33.61549 + parent: 2 + - uid: 13069 + components: + - type: Transform + pos: -10.392436,45.573402 + parent: 2 + - uid: 13070 + components: + - type: Transform + pos: -5.401387,45.59849 + parent: 2 + - uid: 13071 + components: + - type: Transform + pos: -34.418022,30.601757 + parent: 2 + - uid: 13072 + components: + - type: Transform + pos: 56.582214,15.641888 + parent: 2 + - uid: 13073 + components: + - type: Transform + pos: 61.57205,28.535053 + parent: 2 +- proto: PowerCellRecharger + entities: + - uid: 13075 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,33.5 + parent: 2 + - uid: 13076 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,45.5 + parent: 2 + - uid: 13077 + components: + - type: Transform + pos: -5.5,45.5 + parent: 2 + - uid: 13078 + components: + - type: Transform + pos: 1.5,12.5 + parent: 2 + - uid: 13079 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,30.5 + parent: 2 + - uid: 13080 + components: + - type: Transform + pos: 56.5,15.5 + parent: 2 + - uid: 13081 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 50.5,24.5 + parent: 2 + - uid: 13082 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 61.5,28.5 + parent: 2 + - uid: 13083 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,28.5 + parent: 2 + - uid: 13084 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,35.5 + parent: 2 + - uid: 13085 + components: + - type: Transform + pos: 74.5,62.5 + parent: 2 + - uid: 13086 + components: + - type: Transform + pos: 78.5,44.5 + parent: 2 + - uid: 13087 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 87.5,34.5 + parent: 2 + - uid: 13089 + components: + - type: Transform + pos: -5.5,4.5 + parent: 2 +- proto: PowerComputerCircuitboard + entities: + - uid: 13090 + components: + - type: Transform + pos: -8.449109,44.620697 + parent: 2 +- proto: Poweredlight + entities: + - uid: 732 + components: + - type: Transform + pos: 68.5,31.5 + parent: 2 + - uid: 6693 + components: + - type: Transform + pos: 34.5,-27.5 + parent: 2 + - uid: 7111 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.5,3.5 + parent: 2 + - uid: 8443 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 68.5,23.5 + parent: 2 + - uid: 12072 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,74.5 + parent: 2 + - uid: 12989 + components: + - type: Transform + pos: 74.5,25.5 + parent: 2 + - uid: 13019 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 64.5,31.5 + parent: 2 + - uid: 13091 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,31.5 + parent: 2 + - uid: 13092 + components: + - type: Transform + pos: 3.5,35.5 + parent: 2 + - uid: 13093 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,64.5 + parent: 2 + - uid: 13094 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,62.5 + parent: 2 + - uid: 13095 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -32.5,1.5 + parent: 2 + - uid: 13096 + components: + - type: Transform + pos: -34.5,30.5 + parent: 2 + - uid: 13097 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,1.5 + parent: 2 + - uid: 13098 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,16.5 + parent: 2 + - uid: 13099 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,34.5 + parent: 2 + - uid: 13100 + components: + - type: Transform + pos: -16.5,35.5 + parent: 2 + - uid: 13101 + components: + - type: Transform + pos: -19.5,41.5 + parent: 2 + - uid: 13102 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,34.5 + parent: 2 + - uid: 13103 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,25.5 + parent: 2 + - uid: 13104 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,22.5 + parent: 2 + - uid: 13105 + components: + - type: Transform + pos: -12.5,25.5 + parent: 2 + - uid: 13106 + components: + - type: Transform + pos: -12.5,25.5 + parent: 2 + - uid: 13107 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,27.5 + parent: 2 + - uid: 13108 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -16.5,33.5 + parent: 2 + - uid: 13109 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -16.5,37.5 + parent: 2 + - uid: 13110 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,31.5 + parent: 2 + - uid: 13111 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,41.5 + parent: 2 + - uid: 13112 + components: + - type: Transform + pos: -16.5,31.5 + parent: 2 + - uid: 13113 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,37.5 + parent: 2 + - uid: 13114 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,27.5 + parent: 2 + - uid: 13115 + components: + - type: Transform + pos: 34.5,55.5 + parent: 2 + - uid: 13117 + components: + - type: Transform + pos: -19.5,41.5 + parent: 2 + - uid: 13118 + components: + - type: Transform + pos: 24.5,21.5 + parent: 2 + - uid: 13119 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.5,11.5 + parent: 2 + - uid: 13120 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 62.5,62.5 + parent: 2 + - uid: 13121 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 74.5,59.5 + parent: 2 + - uid: 13122 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 64.5,22.5 + parent: 2 + - uid: 13123 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 60.5,62.5 + parent: 2 + - uid: 13124 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 63.5,1.5 + parent: 2 + - uid: 13125 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 67.5,6.5 + parent: 2 + - uid: 13126 + components: + - type: Transform + pos: 70.5,21.5 + parent: 2 + - uid: 13127 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,22.5 + parent: 2 + - uid: 13128 + components: + - type: Transform + pos: 21.5,15.5 + parent: 2 + - uid: 13131 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 69.5,4.5 + parent: 2 + - uid: 13132 + components: + - type: Transform + pos: 70.5,15.5 + parent: 2 + - uid: 13133 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 60.5,56.5 + parent: 2 + - uid: 13134 + components: + - type: Transform + pos: 50.5,27.5 + parent: 2 + - uid: 13135 + components: + - type: Transform + pos: 67.5,56.5 + parent: 2 + - uid: 13136 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 67.5,60.5 + parent: 2 + - uid: 13137 + components: + - type: Transform + pos: -5.5,21.5 + parent: 2 + - uid: 13138 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 71.5,57.5 + parent: 2 + - uid: 13139 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 87.5,31.5 + parent: 2 + - uid: 13140 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,7.5 + parent: 2 + - uid: 13141 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,10.5 + parent: 2 + - uid: 13142 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,13.5 + parent: 2 + - uid: 13143 + components: + - type: Transform + pos: -30.5,21.5 + parent: 2 + - uid: 13144 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,18.5 + parent: 2 + - uid: 13145 + components: + - type: Transform + pos: -25.5,19.5 + parent: 2 + - uid: 13146 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,7.5 + parent: 2 + - uid: 13147 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,14.5 + parent: 2 + - uid: 13148 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -30.5,23.5 + parent: 2 + - uid: 13149 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 51.5,13.5 + parent: 2 + - uid: 13150 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.5,28.5 + parent: 2 + - uid: 13151 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,25.5 + parent: 2 + - uid: 13152 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,25.5 + parent: 2 + - uid: 13153 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,23.5 + parent: 2 + - uid: 13154 + components: + - type: Transform + pos: -27.5,25.5 + parent: 2 + - uid: 13155 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -39.5,20.5 + parent: 2 + - uid: 13156 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -39.5,16.5 + parent: 2 + - uid: 13157 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -39.5,12.5 + parent: 2 + - uid: 13158 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -39.5,8.5 + parent: 2 + - uid: 13159 + components: + - type: Transform + pos: -21.5,3.5 + parent: 2 + - uid: 13160 + components: + - type: Transform + pos: -24.5,8.5 + parent: 2 + - uid: 13161 + components: + - type: Transform + pos: -20.5,9.5 + parent: 2 + - uid: 13162 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,4.5 + parent: 2 + - uid: 13163 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.5,21.5 + parent: 2 + - uid: 13164 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,7.5 + parent: 2 + - uid: 13165 + components: + - type: Transform + pos: 74.5,62.5 + parent: 2 + - uid: 13166 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,62.5 + parent: 2 + - uid: 13167 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,17.5 + parent: 2 + - uid: 13168 + components: + - type: Transform + pos: -19.5,23.5 + parent: 2 + - uid: 13169 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,21.5 + parent: 2 + - uid: 13170 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,23.5 + parent: 2 + - uid: 13171 + components: + - type: Transform + pos: -2.5,27.5 + parent: 2 + - uid: 13172 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,30.5 + parent: 2 + - uid: 13173 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,38.5 + parent: 2 + - uid: 13174 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,35.5 + parent: 2 + - uid: 13175 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,40.5 + parent: 2 + - uid: 13176 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,43.5 + parent: 2 + - uid: 13177 + components: + - type: Transform + pos: -24.5,46.5 + parent: 2 + - uid: 13178 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,43.5 + parent: 2 + - uid: 13179 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,64.5 + parent: 2 + - uid: 13180 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,51.5 + parent: 2 + - uid: 13181 + components: + - type: Transform + pos: -19.5,70.5 + parent: 2 + - uid: 13182 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -19.5,62.5 + parent: 2 + - uid: 13183 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,51.5 + parent: 2 + - uid: 13184 + components: + - type: Transform + pos: -6.5,56.5 + parent: 2 + - uid: 13185 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,55.5 + parent: 2 + - uid: 13186 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,43.5 + parent: 2 + - uid: 13187 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,54.5 + parent: 2 + - uid: 13188 + components: + - type: Transform + pos: 7.5,49.5 + parent: 2 + - uid: 13189 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,46.5 + parent: 2 + - uid: 13190 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,30.5 + parent: 2 + - uid: 13191 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,39.5 + parent: 2 + - uid: 13192 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,19.5 + parent: 2 + - uid: 13193 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.5,16.5 + parent: 2 + - uid: 13194 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,23.5 + parent: 2 + - uid: 13195 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,51.5 + parent: 2 + - uid: 13196 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,58.5 + parent: 2 + - uid: 13197 + components: + - type: Transform + pos: -4.5,60.5 + parent: 2 + - uid: 13198 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,53.5 + parent: 2 + - uid: 13199 + components: + - type: Transform + pos: -25.5,58.5 + parent: 2 + - uid: 13200 + components: + - type: Transform + pos: -13.5,58.5 + parent: 2 + - uid: 13201 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,51.5 + parent: 2 + - uid: 13202 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,13.5 + parent: 2 + - uid: 13203 + components: + - type: Transform + pos: -8.5,14.5 + parent: 2 + - uid: 13204 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,9.5 + parent: 2 + - uid: 13205 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,10.5 + parent: 2 + - uid: 13206 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,12.5 + parent: 2 + - uid: 13207 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,5.5 + parent: 2 + - uid: 13208 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,16.5 + parent: 2 + - uid: 13209 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,11.5 + parent: 2 + - uid: 13210 + components: + - type: Transform + pos: 4.5,17.5 + parent: 2 + - uid: 13211 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,5.5 + parent: 2 + - uid: 13212 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,49.5 + parent: 2 + - uid: 13213 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,47.5 + parent: 2 + - uid: 13214 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,52.5 + parent: 2 + - uid: 13215 + components: + - type: Transform + pos: -14.5,70.5 + parent: 2 + - uid: 13216 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 78.5,22.5 + parent: 2 + - uid: 13217 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 83.5,31.5 + parent: 2 + - uid: 13218 + components: + - type: Transform + pos: -29.5,61.5 + parent: 2 + - uid: 13219 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 80.5,21.5 + parent: 2 + - uid: 13220 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 74.5,27.5 + parent: 2 + - uid: 13221 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 76.5,26.5 + parent: 2 + - uid: 13223 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 82.5,27.5 + parent: 2 + - uid: 13224 + components: + - type: Transform + pos: 79.5,35.5 + parent: 2 + - uid: 13225 + components: + - type: Transform + pos: 76.5,35.5 + parent: 2 + - uid: 13226 + components: + - type: Transform + pos: 71.5,35.5 + parent: 2 + - uid: 13227 + components: + - type: Transform + pos: 69.5,40.5 + parent: 2 + - uid: 13228 + components: + - type: Transform + pos: 87.5,37.5 + parent: 2 + - uid: 13229 + components: + - type: Transform + pos: 76.5,40.5 + parent: 2 + - uid: 13230 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 64.5,52.5 + parent: 2 + - uid: 13231 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 64.5,58.5 + parent: 2 + - uid: 13234 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,60.5 + parent: 2 + - uid: 13235 + components: + - type: Transform + pos: 13.5,62.5 + parent: 2 + - uid: 13236 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 16.5,54.5 + parent: 2 + - uid: 13237 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,62.5 + parent: 2 + - uid: 13238 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,57.5 + parent: 2 + - uid: 13239 + components: + - type: Transform + pos: 82.5,40.5 + parent: 2 + - uid: 13240 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,54.5 + parent: 2 + - uid: 13241 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,65.5 + parent: 2 + - uid: 13242 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,55.5 + parent: 2 + - uid: 13243 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 14.5,51.5 + parent: 2 + - uid: 13244 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,54.5 + parent: 2 + - uid: 13245 + components: + - type: Transform + pos: 20.5,49.5 + parent: 2 + - uid: 13246 + components: + - type: Transform + pos: 14.5,49.5 + parent: 2 + - uid: 13247 + components: + - type: Transform + pos: 21.5,58.5 + parent: 2 + - uid: 13248 + components: + - type: Transform + pos: -33.5,61.5 + parent: 2 + - uid: 13249 + components: + - type: Transform + pos: -21.5,70.5 + parent: 2 + - uid: 13250 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,55.5 + parent: 2 + - uid: 13251 + components: + - type: Transform + pos: -29.5,55.5 + parent: 2 + - uid: 13252 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,68.5 + parent: 2 + - uid: 13253 + components: + - type: Transform + pos: -30.5,58.5 + parent: 2 + - uid: 13254 + components: + - type: Transform + pos: -0.5,64.5 + parent: 2 + - uid: 13255 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,63.5 + parent: 2 + - uid: 13256 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,68.5 + parent: 2 + - uid: 13258 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,60.5 + parent: 2 + - uid: 13259 + components: + - type: Transform + pos: 19.5,40.5 + parent: 2 + - uid: 13260 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,43.5 + parent: 2 + - uid: 13261 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,39.5 + parent: 2 + - uid: 13262 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,52.5 + parent: 2 + - uid: 13263 + components: + - type: Transform + pos: 7.5,41.5 + parent: 2 + - uid: 13264 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,44.5 + parent: 2 + - uid: 13265 + components: + - type: Transform + pos: 54.5,40.5 + parent: 2 + - uid: 13266 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 53.5,33.5 + parent: 2 + - uid: 13267 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 59.5,43.5 + parent: 2 + - uid: 13268 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,39.5 + parent: 2 + - uid: 13269 + components: + - type: Transform + pos: 37.5,30.5 + parent: 2 + - uid: 13270 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 40.5,31.5 + parent: 2 + - uid: 13271 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -35.5,60.5 + parent: 2 + - uid: 13272 + components: + - type: Transform + pos: 47.5,45.5 + parent: 2 + - uid: 13273 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 54.5,42.5 + parent: 2 + - uid: 13274 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 52.5,46.5 + parent: 2 + - uid: 13275 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 62.5,38.5 + parent: 2 + - uid: 13276 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 62.5,43.5 + parent: 2 + - uid: 13277 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 50.5,48.5 + parent: 2 + - uid: 13278 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,28.5 + parent: 2 + - uid: 13279 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 39.5,25.5 + parent: 2 + - uid: 13280 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 46.5,47.5 + parent: 2 + - uid: 13281 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 44.5,30.5 + parent: 2 + - uid: 13282 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 36.5,32.5 + parent: 2 + - uid: 13283 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,31.5 + parent: 2 + - uid: 13284 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 49.5,50.5 + parent: 2 + - uid: 13285 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 56.5,31.5 + parent: 2 + - uid: 13286 + components: + - type: Transform + pos: 52.5,50.5 + parent: 2 + - uid: 13287 + components: + - type: Transform + pos: 51.5,54.5 + parent: 2 + - uid: 13288 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,39.5 + parent: 2 + - uid: 13289 + components: + - type: Transform + pos: 36.5,41.5 + parent: 2 + - uid: 13290 + components: + - type: Transform + pos: 51.5,31.5 + parent: 2 + - uid: 13291 + components: + - type: Transform + pos: 42.5,35.5 + parent: 2 + - uid: 13292 + components: + - type: Transform + pos: 63.5,35.5 + parent: 2 + - uid: 13293 + components: + - type: Transform + pos: 47.5,31.5 + parent: 2 + - uid: 13294 + components: + - type: Transform + pos: 52.5,27.5 + parent: 2 + - uid: 13295 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 62.5,31.5 + parent: 2 + - uid: 13296 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 58.5,28.5 + parent: 2 + - uid: 13297 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 49.5,16.5 + parent: 2 + - uid: 13298 + components: + - type: Transform + pos: 53.5,18.5 + parent: 2 + - uid: 13299 + components: + - type: Transform + pos: 39.5,17.5 + parent: 2 + - uid: 13300 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 40.5,21.5 + parent: 2 + - uid: 13301 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,17.5 + parent: 2 + - uid: 13302 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 32.5,15.5 + parent: 2 + - uid: 13303 + components: + - type: Transform + pos: 78.5,45.5 + parent: 2 + - uid: 13304 + components: + - type: Transform + pos: 31.5,11.5 + parent: 2 + - uid: 13305 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 68.5,44.5 + parent: 2 + - uid: 13306 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 70.5,44.5 + parent: 2 + - uid: 13307 + components: + - type: Transform + pos: 37.5,11.5 + parent: 2 + - uid: 13308 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 73.5,44.5 + parent: 2 + - uid: 13309 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 64.5,40.5 + parent: 2 + - uid: 13310 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 57.5,15.5 + parent: 2 + - uid: 13311 + components: + - type: Transform + pos: 50.5,11.5 + parent: 2 + - uid: 13312 + components: + - type: Transform + pos: 47.5,7.5 + parent: 2 + - uid: 13313 + components: + - type: Transform + pos: 57.5,22.5 + parent: 2 + - uid: 13314 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 45.5,-2.5 + parent: 2 + - uid: 13315 + components: + - type: Transform + pos: 53.5,4.5 + parent: 2 + - uid: 13316 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 57.5,-2.5 + parent: 2 + - uid: 13317 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 51.5,-8.5 + parent: 2 + - uid: 13318 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,12.5 + parent: 2 + - uid: 13319 + components: + - type: Transform + pos: 28.5,3.5 + parent: 2 + - uid: 13320 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,-1.5 + parent: 2 + - uid: 13321 + components: + - type: Transform + pos: 26.5,-0.5 + parent: 2 + - uid: 13322 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,1.5 + parent: 2 + - uid: 13323 + components: + - type: Transform + pos: 34.5,1.5 + parent: 2 + - uid: 13324 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 44.5,20.5 + parent: 2 + - uid: 13325 + components: + - type: Transform + pos: 83.5,44.5 + parent: 2 + - uid: 13326 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 16.5,37.5 + parent: 2 + - uid: 13327 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 40.5,44.5 + parent: 2 + - uid: 13328 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,58.5 + parent: 2 + - uid: 13329 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,41.5 + parent: 2 + - uid: 13330 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,55.5 + parent: 2 + - uid: 13331 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,46.5 + parent: 2 + - uid: 13332 + components: + - type: Transform + pos: 17.5,59.5 + parent: 2 + - uid: 13333 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,26.5 + parent: 2 + - uid: 13334 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,31.5 + parent: 2 + - uid: 13335 + components: + - type: Transform + pos: 29.5,29.5 + parent: 2 + - uid: 13336 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,23.5 + parent: 2 + - uid: 13337 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,38.5 + parent: 2 + - uid: 13338 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.5,26.5 + parent: 2 + - uid: 13339 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,28.5 + parent: 2 + - uid: 13340 + components: + - type: Transform + pos: 17.5,22.5 + parent: 2 + - uid: 13341 + components: + - type: Transform + pos: 22.5,28.5 + parent: 2 + - uid: 13342 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,36.5 + parent: 2 + - uid: 13343 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,26.5 + parent: 2 + - uid: 13344 + components: + - type: Transform + pos: -11.5,7.5 + parent: 2 + - uid: 13345 + components: + - type: Transform + pos: 14.5,32.5 + parent: 2 + - uid: 13346 + components: + - type: Transform + pos: 27.5,45.5 + parent: 2 + - uid: 13347 + components: + - type: Transform + pos: 23.5,45.5 + parent: 2 + - uid: 13348 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,44.5 + parent: 2 + - uid: 13349 + components: + - type: Transform + pos: 30.5,56.5 + parent: 2 + - uid: 13350 + components: + - type: Transform + pos: 32.5,51.5 + parent: 2 + - uid: 13351 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 39.5,47.5 + parent: 2 + - uid: 13352 + components: + - type: Transform + pos: 83.5,37.5 + parent: 2 + - uid: 13353 + components: + - type: Transform + pos: 68.5,11.5 + parent: 2 + - uid: 13354 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 73.5,13.5 + parent: 2 + - uid: 13355 + components: + - type: Transform + pos: 78.5,31.5 + parent: 2 + - uid: 13356 + components: + - type: Transform + pos: 76.5,5.5 + parent: 2 + - uid: 13357 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 72.5,-1.5 + parent: 2 + - uid: 13358 + components: + - type: Transform + pos: 73.5,31.5 + parent: 2 + - uid: 13359 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 23.5,8.5 + parent: 2 + - uid: 13360 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,15.5 + parent: 2 + - uid: 13361 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,17.5 + parent: 2 + - uid: 13362 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,17.5 + parent: 2 + - uid: 13363 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,14.5 + parent: 2 + - uid: 13364 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 16.5,17.5 + parent: 2 + - uid: 13365 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 45.5,3.5 + parent: 2 + - uid: 13366 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 57.5,3.5 + parent: 2 + - uid: 13367 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 72.5,23.5 + parent: 2 + - uid: 13368 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 46.5,21.5 + parent: 2 + - uid: 13369 + components: + - type: Transform + pos: -35.5,64.5 + parent: 2 + - uid: 13370 + components: + - type: Transform + pos: 58.5,-5.5 + parent: 2 + - uid: 13371 + components: + - type: Transform + pos: 51.5,-10.5 + parent: 2 + - uid: 13372 + components: + - type: Transform + pos: 58.5,8.5 + parent: 2 + - uid: 13373 + components: + - type: Transform + pos: 44.5,-5.5 + parent: 2 + - uid: 13374 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,18.5 + parent: 2 + - uid: 13375 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 20.5,23.5 + parent: 2 + - uid: 13376 + components: + - type: Transform + pos: 27.5,36.5 + parent: 2 + - uid: 13377 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,43.5 + parent: 2 + - uid: 13378 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 44.5,54.5 + parent: 2 + - uid: 13379 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 39.5,51.5 + parent: 2 + - uid: 13380 + components: + - type: Transform + pos: 63.5,16.5 + parent: 2 + - uid: 13381 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 62.5,10.5 + parent: 2 + - uid: 13386 + components: + - type: Transform + pos: -13.5,3.5 + parent: 2 + - uid: 13387 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,-1.5 + parent: 2 + - uid: 13388 + components: + - type: Transform + pos: -7.5,8.5 + parent: 2 + - uid: 13389 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,3.5 + parent: 2 + - uid: 13390 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 17.5,34.5 + parent: 2 + - uid: 13391 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,13.5 + parent: 2 + - uid: 13392 + components: + - type: Transform + pos: -6.5,17.5 + parent: 2 + - uid: 13393 + components: + - type: Transform + pos: -6.5,17.5 + parent: 2 + - uid: 13394 + components: + - type: Transform + pos: 5.5,35.5 + parent: 2 + - uid: 13395 + components: + - type: Transform + pos: 4.5,29.5 + parent: 2 + - uid: 13396 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,29.5 + parent: 2 + - uid: 13397 + components: + - type: Transform + pos: -4.5,31.5 + parent: 2 + - uid: 13398 + components: + - type: Transform + pos: -2.5,36.5 + parent: 2 + - uid: 13399 + components: + - type: Transform + pos: -7.5,41.5 + parent: 2 + - uid: 13400 + components: + - type: Transform + pos: -16.5,45.5 + parent: 2 + - uid: 13401 + components: + - type: Transform + pos: 55.5,7.5 + parent: 2 + - uid: 13402 + components: + - type: Transform + pos: 10.5,35.5 + parent: 2 + - uid: 13403 + components: + - type: Transform + pos: 4.5,35.5 + parent: 2 + - uid: 13433 + components: + - type: Transform + pos: 33.5,5.5 + parent: 2 + - uid: 13501 + components: + - type: Transform + pos: -35.5,70.5 + parent: 2 + - uid: 13983 + components: + - type: Transform + pos: -26.5,74.5 + parent: 2 + - uid: 13985 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,74.5 + parent: 2 + - uid: 14985 + components: + - type: Transform + pos: 32.5,-3.5 + parent: 2 + - uid: 15036 + components: + - type: Transform + pos: 38.5,-3.5 + parent: 2 + - uid: 16225 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,67.5 + parent: 2 + - uid: 16459 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,-14.5 + parent: 2 + - uid: 17135 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,70.5 + parent: 2 + - uid: 19466 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,65.5 + parent: 2 + - uid: 19471 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,65.5 + parent: 2 + - uid: 19536 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -31.5,79.5 + parent: 2 + - uid: 20067 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,-12.5 + parent: 2 + - uid: 20068 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.5,-12.5 + parent: 2 + - uid: 20070 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,-14.5 + parent: 2 + - uid: 20071 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,-21.5 + parent: 2 + - uid: 20072 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,-21.5 + parent: 2 + - uid: 20073 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 34.5,-29.5 + parent: 2 + - uid: 20074 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,-28.5 + parent: 2 + - uid: 20075 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,-30.5 + parent: 2 + - uid: 20076 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 38.5,-30.5 + parent: 2 + - uid: 20077 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 38.5,-37.5 + parent: 2 + - uid: 20078 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,-37.5 + parent: 2 + - uid: 20079 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 23.5,-44.5 + parent: 2 + - uid: 20080 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 37.5,-44.5 + parent: 2 + - uid: 20081 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 23.5,-50.5 + parent: 2 + - uid: 20082 + components: + - type: Transform + pos: 25.5,-52.5 + parent: 2 + - uid: 20083 + components: + - type: Transform + pos: 35.5,-52.5 + parent: 2 + - uid: 20084 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 37.5,-50.5 + parent: 2 + - uid: 20085 + components: + - type: Transform + pos: 30.5,-52.5 + parent: 2 + - uid: 20086 + components: + - type: Transform + pos: 28.5,-14.5 + parent: 2 + - uid: 20087 + components: + - type: Transform + pos: 32.5,-14.5 + parent: 2 + - uid: 20088 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,-20.5 + parent: 2 + - uid: 20089 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,-20.5 + parent: 2 + - uid: 20090 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,-15.5 + parent: 2 + - uid: 20091 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,-15.5 + parent: 2 + - uid: 20092 + components: + - type: Transform + pos: 26.5,-23.5 + parent: 2 + - uid: 20093 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,-27.5 + parent: 2 + - uid: 20094 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 34.5,-25.5 + parent: 2 + - uid: 20095 + components: + - type: Transform + pos: 34.5,-23.5 + parent: 2 + - uid: 20096 + components: + - type: Transform + pos: 29.5,-27.5 + parent: 2 + - uid: 20097 + components: + - type: Transform + pos: 32.5,-27.5 + parent: 2 + - uid: 20098 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 28.5,-31.5 + parent: 2 + - uid: 20099 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,-31.5 + parent: 2 + - uid: 20100 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,-31.5 + parent: 2 + - uid: 20101 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,-33.5 + parent: 2 + - uid: 20102 + components: + - type: Transform + pos: 24.5,-35.5 + parent: 2 + - uid: 20103 + components: + - type: Transform + pos: 26.5,-35.5 + parent: 2 + - uid: 20104 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,-38.5 + parent: 2 + - uid: 20105 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 28.5,-36.5 + parent: 2 + - uid: 20106 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,-36.5 + parent: 2 + - uid: 20107 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,-38.5 + parent: 2 + - uid: 20108 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,-38.5 + parent: 2 + - uid: 20109 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,-38.5 + parent: 2 + - uid: 20110 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,-31.5 + parent: 2 + - uid: 20111 + components: + - type: Transform + pos: 36.5,-31.5 + parent: 2 + - uid: 20112 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,-35.5 + parent: 2 + - uid: 20113 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,-40.5 + parent: 2 + - uid: 20114 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 29.5,-40.5 + parent: 2 + - uid: 20115 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 28.5,-42.5 + parent: 2 + - uid: 20116 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,-42.5 + parent: 2 + - uid: 20117 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,-48.5 + parent: 2 + - uid: 20118 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 28.5,-48.5 + parent: 2 + - uid: 20119 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,-45.5 + parent: 2 + - uid: 20120 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,-45.5 + parent: 2 +- proto: PoweredSmallLight + entities: + - uid: 3455 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -30.5,33.5 + parent: 2 + - uid: 3456 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -32.5,33.5 + parent: 2 + - uid: 12085 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,74.5 + parent: 2 + - uid: 13425 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 20.5,62.5 + parent: 2 + - uid: 13426 + components: + - type: Transform + pos: 11.5,8.5 + parent: 2 + - uid: 13427 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -37.5,54.5 + parent: 2 + - uid: 13430 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,70.5 + parent: 2 + - uid: 13431 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,70.5 + parent: 2 + - uid: 13432 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,29.5 + parent: 2 + - uid: 13434 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -41.5,24.5 + parent: 2 + - uid: 13435 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -41.5,28.5 + parent: 2 + - uid: 13436 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,16.5 + parent: 2 + - uid: 13437 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,13.5 + parent: 2 + - uid: 13438 + components: + - type: Transform + pos: 8.5,5.5 + parent: 2 + - uid: 13439 + components: + - type: Transform + pos: 13.5,-0.5 + parent: 2 + - uid: 13440 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,30.5 + parent: 2 + - uid: 13441 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,1.5 + parent: 2 + - uid: 13442 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,1.5 + parent: 2 + - uid: 13443 + components: + - type: Transform + pos: 7.5,0.5 + parent: 2 + - uid: 13444 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,3.5 + parent: 2 + - uid: 13445 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -28.5,32.5 + parent: 2 + - uid: 13446 + components: + - type: Transform + pos: -21.5,49.5 + parent: 2 + - uid: 13447 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -28.5,39.5 + parent: 2 + - uid: 13448 + components: + - type: Transform + pos: -29.5,44.5 + parent: 2 + - uid: 13449 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,48.5 + parent: 2 + - uid: 13450 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,44.5 + parent: 2 + - uid: 13451 + components: + - type: Transform + pos: -4.5,45.5 + parent: 2 + - uid: 13452 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,42.5 + parent: 2 + - uid: 13453 + components: + - type: Transform + pos: -3.5,68.5 + parent: 2 + - uid: 13454 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,66.5 + parent: 2 + - uid: 13455 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,68.5 + parent: 2 + - uid: 13456 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,53.5 + parent: 2 + - uid: 13457 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,63.5 + parent: 2 + - uid: 13458 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,66.5 + parent: 2 + - uid: 13459 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 16.5,70.5 + parent: 2 + - uid: 13460 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,77.5 + parent: 2 + - uid: 13461 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,72.5 + parent: 2 + - uid: 13462 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,76.5 + parent: 2 + - uid: 13463 + components: + - type: Transform + pos: 8.5,79.5 + parent: 2 + - uid: 13464 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.5,75.5 + parent: 2 + - uid: 13465 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,70.5 + parent: 2 + - uid: 13466 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,70.5 + parent: 2 + - uid: 13467 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.5,67.5 + parent: 2 + - uid: 13468 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,46.5 + parent: 2 + - uid: 13469 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,56.5 + parent: 2 + - uid: 13470 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -41.5,57.5 + parent: 2 + - uid: 13471 + components: + - type: Transform + pos: -36.5,52.5 + parent: 2 + - uid: 13472 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -39.5,54.5 + parent: 2 + - uid: 13473 + components: + - type: Transform + pos: -19.5,15.5 + parent: 2 + - uid: 13474 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,59.5 + parent: 2 + - uid: 13475 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,67.5 + parent: 2 + - uid: 13476 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,66.5 + parent: 2 + - uid: 13477 + components: + - type: Transform + pos: 6.5,78.5 + parent: 2 + - uid: 13479 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 76.5,10.5 + parent: 2 + - uid: 13480 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 41.5,1.5 + parent: 2 + - uid: 13481 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 76.5,13.5 + parent: 2 + - uid: 13482 + components: + - type: Transform + pos: 75.5,20.5 + parent: 2 + - uid: 13483 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 81.5,19.5 + parent: 2 + - uid: 13484 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 83.5,46.5 + parent: 2 + - uid: 13485 + components: + - type: Transform + pos: 81.5,47.5 + parent: 2 + - uid: 13486 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 75.5,48.5 + parent: 2 + - uid: 13487 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 69.5,48.5 + parent: 2 + - uid: 13488 + components: + - type: Transform + pos: 69.5,52.5 + parent: 2 + - uid: 13489 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 74.5,52.5 + parent: 2 + - uid: 13490 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 78.5,50.5 + parent: 2 + - uid: 13491 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 77.5,55.5 + parent: 2 + - uid: 13492 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 73.5,57.5 + parent: 2 + - uid: 13493 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 62.5,22.5 + parent: 2 + - uid: 13494 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 58.5,25.5 + parent: 2 + - uid: 13495 + components: + - type: Transform + pos: 66.5,-1.5 + parent: 2 + - uid: 13496 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 78.5,13.5 + parent: 2 + - uid: 13497 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 73.5,-3.5 + parent: 2 + - uid: 13498 + components: + - type: Transform + pos: 61.5,18.5 + parent: 2 + - uid: 13499 + components: + - type: Transform + pos: 54.5,11.5 + parent: 2 + - uid: 13500 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 57.5,10.5 + parent: 2 + - uid: 13502 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,4.5 + parent: 2 + - uid: 13503 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,7.5 + parent: 2 + - uid: 13504 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,5.5 + parent: 2 + - uid: 13505 + components: + - type: Transform + pos: 19.5,6.5 + parent: 2 + - uid: 13506 + components: + - type: Transform + pos: 18.5,12.5 + parent: 2 + - uid: 13507 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,9.5 + parent: 2 + - uid: 13508 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,10.5 + parent: 2 + - uid: 13509 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.5,1.5 + parent: 2 + - uid: 13510 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,6.5 + parent: 2 + - uid: 13511 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,13.5 + parent: 2 + - uid: 13512 + components: + - type: Transform + pos: -1.5,77.5 + parent: 2 + - uid: 13513 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,63.5 + parent: 2 + - uid: 13514 + components: + - type: Transform + pos: 16.5,67.5 + parent: 2 + - uid: 13515 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,64.5 + parent: 2 + - uid: 13516 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,63.5 + parent: 2 + - uid: 13517 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 34.5,68.5 + parent: 2 + - uid: 13518 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.5,60.5 + parent: 2 + - uid: 13519 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 26.5,64.5 + parent: 2 + - uid: 13520 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,67.5 + parent: 2 + - uid: 13521 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 37.5,62.5 + parent: 2 + - uid: 13522 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,60.5 + parent: 2 + - uid: 13523 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 37.5,65.5 + parent: 2 + - uid: 13524 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,65.5 + parent: 2 + - uid: 13525 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 41.5,60.5 + parent: 2 + - uid: 13526 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,63.5 + parent: 2 + - uid: 13527 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 45.5,59.5 + parent: 2 + - uid: 13528 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,66.5 + parent: 2 + - uid: 13529 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 45.5,56.5 + parent: 2 + - uid: 13530 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,50.5 + parent: 2 + - uid: 13531 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,47.5 + parent: 2 + - uid: 13532 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 52.5,59.5 + parent: 2 + - uid: 13533 + components: + - type: Transform + pos: 52.5,57.5 + parent: 2 + - uid: 13534 + components: + - type: Transform + pos: 48.5,61.5 + parent: 2 + - uid: 13535 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 57.5,58.5 + parent: 2 + - uid: 13536 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 56.5,53.5 + parent: 2 + - uid: 13537 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 60.5,54.5 + parent: 2 + - uid: 13538 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 60.5,50.5 + parent: 2 + - uid: 13539 + components: + - type: Transform + pos: 58.5,50.5 + parent: 2 + - uid: 13540 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 62.5,46.5 + parent: 2 + - uid: 13541 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 20.5,60.5 + parent: 2 + - uid: 13542 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 44.5,23.5 + parent: 2 + - uid: 13543 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,22.5 + parent: 2 + - uid: 13544 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 35.5,19.5 + parent: 2 + - uid: 13545 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,23.5 + parent: 2 + - uid: 13546 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,-7.5 + parent: 2 + - uid: 13547 + components: + - type: Transform + pos: -13.5,-9.5 + parent: 2 + - uid: 13548 + components: + - type: Transform + pos: -14.5,-3.5 + parent: 2 + - uid: 13549 + components: + - type: Transform + pos: -18.5,-9.5 + parent: 2 + - uid: 13550 + components: + - type: Transform + pos: -12.5,-3.5 + parent: 2 + - uid: 13551 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,2.5 + parent: 2 + - uid: 13990 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -25.5,76.5 + parent: 2 + - uid: 14354 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,77.5 + parent: 2 + - uid: 17337 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -37.5,70.5 + parent: 2 + - uid: 19372 + components: + - type: Transform + pos: 44.5,10.5 + parent: 2 +- proto: Protolathe + entities: + - uid: 13553 + components: + - type: Transform + pos: -6.5,35.5 + parent: 2 + - uid: 13554 + components: + - type: Transform + pos: -1.5,12.5 + parent: 2 + - uid: 13555 + components: + - type: Transform + pos: -21.5,61.5 + parent: 2 + - uid: 13556 + components: + - type: Transform + pos: 57.5,15.5 + parent: 2 + - uid: 13557 + components: + - type: Transform + pos: 46.5,26.5 + parent: 2 +- proto: ProtolatheMachineCircuitboard + entities: + - uid: 13558 + components: + - type: Transform + pos: 49.466015,54.52799 + parent: 2 +- proto: ProximitySensor + entities: + - uid: 13559 + components: + - type: Transform + pos: 41.78739,8.348118 + parent: 2 + - uid: 13560 + components: + - type: Transform + pos: 41.608055,8.294355 + parent: 2 + - uid: 13561 + components: + - type: Transform + pos: 41.428722,8.366039 + parent: 2 + - uid: 13562 + components: + - type: Transform + pos: 41.41079,8.150986 + parent: 2 + - uid: 13563 + components: + - type: Transform + pos: 41.751526,8.150986 + parent: 2 +- proto: Puddle + entities: + - uid: 13564 + components: + - type: Transform + pos: 15.5,1.5 + parent: 2 + - uid: 13565 + components: + - type: Transform + pos: 14.5,2.5 + parent: 2 + - uid: 13566 + components: + - type: Transform + pos: 16.5,2.5 + parent: 2 +- proto: PuddleWatermelon + entities: + - uid: 13567 + components: + - type: Transform + pos: 62.5,51.5 + parent: 2 + - uid: 13568 + components: + - type: Transform + pos: 62.5,52.5 + parent: 2 + - uid: 13569 + components: + - type: Transform + pos: 61.5,51.5 + parent: 2 + - uid: 13570 + components: + - type: Transform + pos: 62.5,54.5 + parent: 2 + - uid: 13571 + components: + - type: Transform + pos: 60.5,50.5 + parent: 2 +- proto: Rack + entities: + - uid: 13572 + components: + - type: Transform + pos: 19.5,30.5 + parent: 2 + - uid: 13573 + components: + - type: Transform + pos: 15.5,32.5 + parent: 2 + - uid: 13574 + components: + - type: Transform + pos: 16.5,32.5 + parent: 2 + - uid: 13575 + components: + - type: Transform + pos: 17.5,32.5 + parent: 2 + - uid: 13576 + components: + - type: Transform + pos: -10.5,21.5 + parent: 2 + - uid: 13577 + components: + - type: Transform + pos: -11.5,18.5 + parent: 2 + - uid: 13578 + components: + - type: Transform + pos: -7.5,29.5 + parent: 2 + - uid: 13579 + components: + - type: Transform + pos: -5.5,40.5 + parent: 2 + - uid: 13580 + components: + - type: Transform + pos: -8.5,43.5 + parent: 2 + - uid: 13581 + components: + - type: Transform + pos: -8.5,44.5 + parent: 2 + - uid: 13582 + components: + - type: Transform + pos: -8.5,45.5 + parent: 2 + - uid: 13583 + components: + - type: Transform + pos: -5.5,43.5 + parent: 2 + - uid: 13584 + components: + - type: Transform + pos: -5.5,42.5 + parent: 2 + - uid: 13585 + components: + - type: Transform + pos: -4.5,42.5 + parent: 2 + - uid: 13586 + components: + - type: Transform + pos: -3.5,42.5 + parent: 2 + - uid: 13587 + components: + - type: Transform + pos: -2.5,42.5 + parent: 2 + - uid: 13588 + components: + - type: Transform + pos: -3.5,45.5 + parent: 2 + - uid: 13589 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,70.5 + parent: 2 + - uid: 13590 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,67.5 + parent: 2 + - uid: 13591 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -19.5,69.5 + parent: 2 + - uid: 13592 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,68.5 + parent: 2 + - uid: 13593 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,68.5 + parent: 2 + - uid: 13594 + components: + - type: Transform + pos: -18.5,70.5 + parent: 2 + - uid: 13595 + components: + - type: Transform + pos: -19.5,64.5 + parent: 2 + - uid: 13596 + components: + - type: Transform + pos: 10.5,8.5 + parent: 2 + - uid: 13597 + components: + - type: Transform + pos: 27.5,3.5 + parent: 2 + - uid: 13599 + components: + - type: Transform + pos: 59.5,28.5 + parent: 2 + - uid: 13600 + components: + - type: Transform + pos: 60.5,28.5 + parent: 2 + - uid: 13601 + components: + - type: Transform + pos: 27.5,5.5 + parent: 2 + - uid: 13602 + components: + - type: Transform + pos: 29.5,54.5 + parent: 2 + - uid: 13603 + components: + - type: Transform + pos: 29.5,55.5 + parent: 2 + - uid: 13604 + components: + - type: Transform + pos: 44.5,54.5 + parent: 2 + - uid: 13605 + components: + - type: Transform + pos: 44.5,53.5 + parent: 2 + - uid: 13606 + components: + - type: Transform + pos: 35.5,45.5 + parent: 2 + - uid: 13607 + components: + - type: Transform + pos: 44.5,59.5 + parent: 2 + - uid: 13608 + components: + - type: Transform + pos: 45.5,59.5 + parent: 2 + - uid: 13609 + components: + - type: Transform + pos: 75.5,62.5 + parent: 2 + - uid: 13610 + components: + - type: Transform + pos: 74.5,45.5 + parent: 2 + - uid: 13611 + components: + - type: Transform + pos: 74.5,42.5 + parent: 2 + - uid: 13612 + components: + - type: Transform + pos: 78.5,42.5 + parent: 2 + - uid: 13613 + components: + - type: Transform + pos: 74.5,21.5 + parent: 2 + - uid: 13614 + components: + - type: Transform + pos: 69.5,48.5 + parent: 2 + - uid: 13615 + components: + - type: Transform + pos: 70.5,48.5 + parent: 2 + - uid: 13616 + components: + - type: Transform + pos: 69.5,52.5 + parent: 2 + - uid: 13617 + components: + - type: Transform + pos: 70.5,52.5 + parent: 2 + - uid: 13618 + components: + - type: Transform + pos: 68.5,52.5 + parent: 2 + - uid: 13619 + components: + - type: Transform + pos: 68.5,48.5 + parent: 2 + - uid: 13620 + components: + - type: Transform + pos: 68.5,50.5 + parent: 2 + - uid: 13621 + components: + - type: Transform + pos: -18.5,13.5 + parent: 2 + - uid: 13622 + components: + - type: Transform + pos: -17.5,13.5 + parent: 2 + - uid: 13623 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,67.5 + parent: 2 + - uid: 13624 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,69.5 + parent: 2 + - uid: 13625 + components: + - type: Transform + pos: 29.5,62.5 + parent: 2 + - uid: 13626 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,66.5 + parent: 2 + - uid: 13627 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,63.5 + parent: 2 + - uid: 13628 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,62.5 + parent: 2 + - uid: 13629 + components: + - type: Transform + pos: 39.5,66.5 + parent: 2 + - uid: 13630 + components: + - type: Transform + pos: -17.5,-3.5 + parent: 2 + - uid: 13631 + components: + - type: Transform + pos: -17.5,-0.5 + parent: 2 + - uid: 13632 + components: + - type: Transform + pos: 14.5,32.5 + parent: 2 + - uid: 18435 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,-36.5 + parent: 2 + - uid: 18436 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-36.5 + parent: 2 + - uid: 18437 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-38.5 + parent: 2 + - uid: 18438 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-38.5 + parent: 2 + - uid: 18443 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,-23.5 + parent: 2 + - uid: 19701 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,-38.5 + parent: 2 + - uid: 19702 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,-38.5 + parent: 2 + - uid: 19776 + components: + - type: Transform + pos: 26.5,-33.5 + parent: 2 +- proto: RadiationCollector + entities: + - uid: 13633 + components: + - type: Transform + pos: -22.5,35.5 + parent: 2 + - uid: 13634 + components: + - type: Transform + pos: -22.5,33.5 + parent: 2 + - uid: 13635 + components: + - type: Transform + pos: -20.5,32.5 + parent: 2 + - uid: 13636 + components: + - type: Transform + pos: -20.5,31.5 + parent: 2 + - uid: 13637 + components: + - type: Transform + pos: -18.5,32.5 + parent: 2 + - uid: 13638 + components: + - type: Transform + pos: -21.5,35.5 + parent: 2 + - uid: 13639 + components: + - type: Transform + pos: -21.5,33.5 + parent: 2 + - uid: 13640 + components: + - type: Transform + pos: -18.5,36.5 + parent: 2 + - uid: 13641 + components: + - type: Transform + pos: -20.5,36.5 + parent: 2 + - uid: 13642 + components: + - type: Transform + pos: -20.5,37.5 + parent: 2 + - uid: 13643 + components: + - type: Transform + pos: -18.5,37.5 + parent: 2 + - uid: 13644 + components: + - type: Transform + pos: -18.5,31.5 + parent: 2 +- proto: RadioHandheld + entities: + - uid: 20221 + components: + - type: Transform + pos: 34.312286,-24.241226 + parent: 2 + - uid: 20222 + components: + - type: Transform + pos: 34.461857,-24.28603 + parent: 2 +- proto: Railing + entities: + - uid: 13646 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.5,72.5 + parent: 2 + - uid: 13647 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.5,73.5 + parent: 2 + - uid: 13648 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.5,74.5 + parent: 2 + - uid: 13649 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.5,75.5 + parent: 2 + - uid: 13650 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 82.5,32.5 + parent: 2 + - uid: 13651 + components: + - type: Transform + pos: 82.5,36.5 + parent: 2 + - uid: 13652 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 83.5,32.5 + parent: 2 + - uid: 13653 + components: + - type: Transform + pos: 83.5,36.5 + parent: 2 + - uid: 13654 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 84.5,33.5 + parent: 2 + - uid: 13655 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 84.5,34.5 + parent: 2 + - uid: 13656 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 84.5,35.5 + parent: 2 + - uid: 13657 + components: + - type: Transform + pos: 71.5,11.5 + parent: 2 + - uid: 13658 + components: + - type: Transform + pos: 72.5,11.5 + parent: 2 + - uid: 13659 + components: + - type: Transform + pos: 73.5,11.5 + parent: 2 + - uid: 13660 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 74.5,10.5 + parent: 2 + - uid: 13661 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 58.5,15.5 + parent: 2 + - uid: 13662 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 59.5,17.5 + parent: 2 + - uid: 13663 + components: + - type: Transform + pos: 72.5,61.5 + parent: 2 + - uid: 13664 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 72.5,59.5 + parent: 2 + - uid: 13666 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,63.5 + parent: 2 + - uid: 13667 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 60.5,48.5 + parent: 2 + - uid: 13668 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,60.5 + parent: 2 + - uid: 13669 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,60.5 + parent: 2 + - uid: 13670 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 55.5,58.5 + parent: 2 + - uid: 13671 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,-10.5 + parent: 2 + - uid: 13672 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,-11.5 + parent: 2 + - uid: 13673 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,-12.5 + parent: 2 + - uid: 13674 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -18.5,-9.5 + parent: 2 + - uid: 13675 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -18.5,-10.5 + parent: 2 + - uid: 13676 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -18.5,-11.5 + parent: 2 + - uid: 13677 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -18.5,-12.5 + parent: 2 +- proto: RailingCornerSmall + entities: + - uid: 13683 + components: + - type: Transform + pos: 84.5,32.5 + parent: 2 + - uid: 13684 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 84.5,36.5 + parent: 2 + - uid: 13685 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 74.5,11.5 + parent: 2 +- proto: RandomArtifactSpawner + entities: + - uid: 13686 + components: + - type: Transform + pos: 40.5,10.5 + parent: 2 + - uid: 13687 + components: + - type: Transform + pos: 31.5,10.5 + parent: 2 +- proto: RandomBoard + entities: + - uid: 13688 + components: + - type: Transform + pos: -2.5,42.5 + parent: 2 + - uid: 13689 + components: + - type: Transform + pos: -2.5,42.5 + parent: 2 + - uid: 13690 + components: + - type: Transform + pos: -3.5,42.5 + parent: 2 + - uid: 13691 + components: + - type: Transform + pos: -3.5,42.5 + parent: 2 + - uid: 13692 + components: + - type: Transform + pos: -4.5,42.5 + parent: 2 + - uid: 13693 + components: + - type: Transform + pos: -4.5,42.5 + parent: 2 + - uid: 13694 + components: + - type: Transform + pos: -5.5,42.5 + parent: 2 + - uid: 13695 + components: + - type: Transform + pos: -5.5,42.5 + parent: 2 + - uid: 13696 + components: + - type: Transform + pos: -5.5,43.5 + parent: 2 + - uid: 13697 + components: + - type: Transform + pos: -5.5,43.5 + parent: 2 + - uid: 13698 + components: + - type: Transform + pos: -3.5,45.5 + parent: 2 + - uid: 13699 + components: + - type: Transform + pos: -3.5,45.5 + parent: 2 + - uid: 13700 + components: + - type: Transform + pos: 37.5,30.5 + parent: 2 + - uid: 13701 + components: + - type: Transform + pos: 38.5,30.5 + parent: 2 + - uid: 13702 + components: + - type: Transform + pos: 37.5,30.5 + parent: 2 + - uid: 13703 + components: + - type: Transform + pos: 38.5,30.5 + parent: 2 + - uid: 13704 + components: + - type: Transform + pos: 42.5,28.5 + parent: 2 + - uid: 13705 + components: + - type: Transform + pos: 42.5,28.5 + parent: 2 + - uid: 13706 + components: + - type: Transform + pos: 38.5,30.5 + parent: 2 + - uid: 13707 + components: + - type: Transform + pos: 37.5,30.5 + parent: 2 + - uid: 13708 + components: + - type: Transform + pos: 42.5,28.5 + parent: 2 +- proto: RandomDrinkBottle + entities: + - uid: 19529 + components: + - type: Transform + pos: -23.5,73.5 + parent: 2 + - uid: 19530 + components: + - type: Transform + pos: -23.5,73.5 + parent: 2 +- proto: RandomDrinkGlass + entities: + - uid: 13709 + components: + - type: Transform + pos: 63.5,14.5 + parent: 2 + - uid: 13710 + components: + - type: Transform + pos: 63.5,15.5 + parent: 2 + - uid: 19531 + components: + - type: Transform + pos: -23.5,73.5 + parent: 2 + - uid: 19532 + components: + - type: Transform + pos: -23.5,73.5 + parent: 2 +- proto: RandomFoodBakedSingle + entities: + - uid: 19525 + components: + - type: Transform + pos: -24.5,73.5 + parent: 2 + - uid: 19526 + components: + - type: Transform + pos: -24.5,73.5 + parent: 2 +- proto: RandomFoodBakedWhole + entities: + - uid: 13711 + components: + - type: Transform + pos: 54.5,37.5 + parent: 2 +- proto: RandomFoodMeal + entities: + - uid: 13712 + components: + - type: Transform + pos: 53.5,37.5 + parent: 2 + - uid: 13713 + components: + - type: Transform + pos: 63.5,15.5 + parent: 2 + - uid: 13714 + components: + - type: Transform + pos: 63.5,14.5 + parent: 2 + - uid: 13715 + components: + - type: Transform + pos: 60.5,54.5 + parent: 2 + - uid: 13716 + components: + - type: Transform + pos: 62.5,50.5 + parent: 2 + - uid: 13717 + components: + - type: Transform + pos: 62.5,50.5 + parent: 2 + - uid: 19528 + components: + - type: Transform + pos: -24.5,73.5 + parent: 2 +- proto: RandomFoodSingle + entities: + - uid: 19527 + components: + - type: Transform + pos: -24.5,73.5 + parent: 2 +- proto: RandomPosterContraband + entities: + - uid: 18943 + components: + - type: Transform + pos: 17.5,-0.5 + parent: 2 + - uid: 19051 + components: + - type: Transform + pos: -34.5,65.5 + parent: 2 + - uid: 19052 + components: + - type: Transform + pos: -36.5,60.5 + parent: 2 + - uid: 19054 + components: + - type: Transform + pos: -26.5,65.5 + parent: 2 + - uid: 19055 + components: + - type: Transform + pos: -30.5,62.5 + parent: 2 + - uid: 19094 + components: + - type: Transform + pos: -14.5,-8.5 + parent: 2 + - uid: 19095 + components: + - type: Transform + pos: -17.5,-8.5 + parent: 2 + - uid: 19170 + components: + - type: Transform + pos: 80.5,48.5 + parent: 2 + - uid: 19171 + components: + - type: Transform + pos: 77.5,50.5 + parent: 2 + - uid: 19172 + components: + - type: Transform + pos: 78.5,52.5 + parent: 2 + - uid: 19173 + components: + - type: Transform + pos: 77.5,54.5 + parent: 2 + - uid: 19174 + components: + - type: Transform + pos: 76.5,57.5 + parent: 2 + - uid: 19175 + components: + - type: Transform + pos: 79.5,54.5 + parent: 2 + - uid: 19176 + components: + - type: Transform + pos: 73.5,55.5 + parent: 2 + - uid: 19177 + components: + - type: Transform + pos: 74.5,51.5 + parent: 2 + - uid: 19178 + components: + - type: Transform + pos: 76.5,51.5 + parent: 2 + - uid: 19179 + components: + - type: Transform + pos: 76.5,48.5 + parent: 2 + - uid: 19180 + components: + - type: Transform + pos: 71.5,49.5 + parent: 2 + - uid: 19181 + components: + - type: Transform + pos: 71.5,52.5 + parent: 2 + - uid: 19182 + components: + - type: Transform + pos: 62.5,49.5 + parent: 2 + - uid: 19183 + components: + - type: Transform + pos: 59.5,50.5 + parent: 2 + - uid: 19184 + components: + - type: Transform + pos: 59.5,54.5 + parent: 2 + - uid: 19185 + components: + - type: Transform + pos: 54.5,55.5 + parent: 2 + - uid: 19186 + components: + - type: Transform + pos: 49.5,58.5 + parent: 2 + - uid: 19187 + components: + - type: Transform + pos: 46.5,60.5 + parent: 2 + - uid: 19188 + components: + - type: Transform + pos: 49.5,62.5 + parent: 2 + - uid: 19189 + components: + - type: Transform + pos: 46.5,63.5 + parent: 2 + - uid: 19190 + components: + - type: Transform + pos: 45.5,67.5 + parent: 2 + - uid: 19191 + components: + - type: Transform + pos: 40.5,67.5 + parent: 2 + - uid: 19192 + components: + - type: Transform + pos: 41.5,63.5 + parent: 2 + - uid: 19193 + components: + - type: Transform + pos: 37.5,63.5 + parent: 2 + - uid: 19194 + components: + - type: Transform + pos: 36.5,66.5 + parent: 2 + - uid: 19195 + components: + - type: Transform + pos: 38.5,67.5 + parent: 2 + - uid: 19196 + components: + - type: Transform + pos: 40.5,61.5 + parent: 2 + - uid: 19197 + components: + - type: Transform + pos: 40.5,59.5 + parent: 2 + - uid: 19198 + components: + - type: Transform + pos: 42.5,57.5 + parent: 2 + - uid: 19199 + components: + - type: Transform + pos: 45.5,61.5 + parent: 2 + - uid: 19200 + components: + - type: Transform + pos: 37.5,61.5 + parent: 2 + - uid: 19201 + components: + - type: Transform + pos: 29.5,61.5 + parent: 2 + - uid: 19202 + components: + - type: Transform + pos: 25.5,62.5 + parent: 2 + - uid: 19203 + components: + - type: Transform + pos: 25.5,65.5 + parent: 2 + - uid: 19204 + components: + - type: Transform + pos: 27.5,66.5 + parent: 2 + - uid: 19205 + components: + - type: Transform + pos: 30.5,65.5 + parent: 2 + - uid: 19206 + components: + - type: Transform + pos: 24.5,66.5 + parent: 2 + - uid: 19207 + components: + - type: Transform + pos: 20.5,67.5 + parent: 2 + - uid: 19208 + components: + - type: Transform + pos: 15.5,67.5 + parent: 2 + - uid: 19209 + components: + - type: Transform + pos: 15.5,70.5 + parent: 2 + - uid: 19210 + components: + - type: Transform + pos: 15.5,72.5 + parent: 2 + - uid: 19211 + components: + - type: Transform + pos: 17.5,70.5 + parent: 2 + - uid: 19212 + components: + - type: Transform + pos: 19.5,66.5 + parent: 2 + - uid: 19213 + components: + - type: Transform + pos: 17.5,74.5 + parent: 2 + - uid: 19214 + components: + - type: Transform + pos: 12.5,65.5 + parent: 2 + - uid: 19215 + components: + - type: Transform + pos: -14.5,15.5 + parent: 2 + - uid: 19216 + components: + - type: Transform + pos: -16.5,14.5 + parent: 2 + - uid: 19217 + components: + - type: Transform + pos: -21.5,13.5 + parent: 2 + - uid: 19218 + components: + - type: Transform + pos: -17.5,9.5 + parent: 2 + - uid: 19219 + components: + - type: Transform + pos: -17.5,14.5 + parent: 2 + - uid: 19220 + components: + - type: Transform + pos: -16.5,10.5 + parent: 2 + - uid: 19221 + components: + - type: Transform + pos: -19.5,10.5 + parent: 2 + - uid: 19222 + components: + - type: Transform + pos: -18.5,5.5 + parent: 2 + - uid: 19223 + components: + - type: Transform + pos: 11.5,5.5 + parent: 2 + - uid: 19224 + components: + - type: Transform + pos: 11.5,3.5 + parent: 2 + - uid: 19225 + components: + - type: Transform + pos: 13.5,1.5 + parent: 2 + - uid: 19226 + components: + - type: Transform + pos: 14.5,4.5 + parent: 2 + - uid: 19227 + components: + - type: Transform + pos: 17.5,1.5 + parent: 2 + - uid: 19228 + components: + - type: Transform + pos: 17.5,5.5 + parent: 2 + - uid: 19229 + components: + - type: Transform + pos: 17.5,7.5 + parent: 2 + - uid: 19230 + components: + - type: Transform + pos: 14.5,9.5 + parent: 2 + - uid: 19231 + components: + - type: Transform + pos: 17.5,11.5 + parent: 2 + - uid: 19232 + components: + - type: Transform + pos: 16.5,13.5 + parent: 2 + - uid: 19233 + components: + - type: Transform + pos: 23.5,4.5 + parent: 2 + - uid: 19234 + components: + - type: Transform + pos: 10.5,0.5 + parent: 2 + - uid: 19235 + components: + - type: Transform + pos: 14.5,-1.5 + parent: 2 + - uid: 19236 + components: + - type: Transform + pos: 25.5,4.5 + parent: 2 + - uid: 19237 + components: + - type: Transform + pos: 44.5,5.5 + parent: 2 + - uid: 19238 + components: + - type: Transform + pos: 46.5,8.5 + parent: 2 + - uid: 19239 + components: + - type: Transform + pos: 56.5,11.5 + parent: 2 + - uid: 19240 + components: + - type: Transform + pos: 56.5,9.5 + parent: 2 + - uid: 19241 + components: + - type: Transform + pos: 61.5,12.5 + parent: 2 + - uid: 19242 + components: + - type: Transform + pos: 77.5,19.5 + parent: 2 + - uid: 19243 + components: + - type: Transform + pos: 78.5,18.5 + parent: 2 + - uid: 19244 + components: + - type: Transform + pos: 80.5,18.5 + parent: 2 + - uid: 19245 + components: + - type: Transform + pos: 75.5,21.5 + parent: 2 + - uid: 19246 + components: + - type: Transform + pos: 76.5,14.5 + parent: 2 + - uid: 19247 + components: + - type: Transform + pos: 77.5,13.5 + parent: 2 + - uid: 19248 + components: + - type: Transform + pos: 82.5,14.5 + parent: 2 + - uid: 19249 + components: + - type: Transform + pos: 54.5,64.5 + parent: 2 + - uid: 19250 + components: + - type: Transform + pos: 18.5,79.5 + parent: 2 + - uid: 19251 + components: + - type: Transform + pos: -40.5,62.5 + parent: 2 + - uid: 19252 + components: + - type: Transform + pos: -40.5,10.5 + parent: 2 + - uid: 19253 + components: + - type: Transform + pos: -40.5,14.5 + parent: 2 + - uid: 19254 + components: + - type: Transform + pos: -40.5,18.5 + parent: 2 + - uid: 19255 + components: + - type: Transform + pos: -30.5,0.5 + parent: 2 + - uid: 19256 + components: + - type: Transform + pos: -18.5,-13.5 + parent: 2 + - uid: 19257 + components: + - type: Transform + pos: -12.5,-13.5 + parent: 2 + - uid: 19258 + components: + - type: Transform + pos: -12.5,-9.5 + parent: 2 + - uid: 19259 + components: + - type: Transform + pos: 21.5,-1.5 + parent: 2 + - uid: 19260 + components: + - type: Transform + pos: 21.5,1.5 + parent: 2 + - uid: 19261 + components: + - type: Transform + pos: 61.5,-4.5 + parent: 2 + - uid: 19262 + components: + - type: Transform + pos: 39.5,-2.5 + parent: 2 + - uid: 19533 + components: + - type: Transform + pos: -35.5,73.5 + parent: 2 + - uid: 19534 + components: + - type: Transform + pos: -28.5,80.5 + parent: 2 + - uid: 19535 + components: + - type: Transform + pos: -34.5,80.5 + parent: 2 +- proto: RandomPosterLegit + entities: + - uid: 12545 + components: + - type: Transform + pos: -21.5,72.5 + parent: 2 + - uid: 12546 + components: + - type: Transform + pos: -20.5,73.5 + parent: 2 + - uid: 12548 + components: + - type: Transform + pos: -12.5,71.5 + parent: 2 + - uid: 12560 + components: + - type: Transform + pos: -19.5,71.5 + parent: 2 + - uid: 14530 + components: + - type: Transform + pos: -12.5,68.5 + parent: 2 + - uid: 18949 + components: + - type: Transform + pos: 32.5,0.5 + parent: 2 + - uid: 18950 + components: + - type: Transform + pos: 37.5,1.5 + parent: 2 + - uid: 18951 + components: + - type: Transform + pos: 29.5,3.5 + parent: 2 + - uid: 18952 + components: + - type: Transform + pos: 27.5,0.5 + parent: 2 + - uid: 18953 + components: + - type: Transform + pos: 22.5,2.5 + parent: 2 + - uid: 18954 + components: + - type: Transform + pos: 23.5,-1.5 + parent: 2 + - uid: 18955 + components: + - type: Transform + pos: 34.5,6.5 + parent: 2 + - uid: 18956 + components: + - type: Transform + pos: 37.5,6.5 + parent: 2 + - uid: 18957 + components: + - type: Transform + pos: 41.5,6.5 + parent: 2 + - uid: 18958 + components: + - type: Transform + pos: 42.5,9.5 + parent: 2 + - uid: 18959 + components: + - type: Transform + pos: 42.5,13.5 + parent: 2 + - uid: 18960 + components: + - type: Transform + pos: 41.5,14.5 + parent: 2 + - uid: 18961 + components: + - type: Transform + pos: 37.5,14.5 + parent: 2 + - uid: 18962 + components: + - type: Transform + pos: 33.5,17.5 + parent: 2 + - uid: 18963 + components: + - type: Transform + pos: 31.5,17.5 + parent: 2 + - uid: 18964 + components: + - type: Transform + pos: 28.5,18.5 + parent: 2 + - uid: 18965 + components: + - type: Transform + pos: 31.5,12.5 + parent: 2 + - uid: 18966 + components: + - type: Transform + pos: 27.5,8.5 + parent: 2 + - uid: 18967 + components: + - type: Transform + pos: 20.5,13.5 + parent: 2 + - uid: 18968 + components: + - type: Transform + pos: 21.5,18.5 + parent: 2 + - uid: 18969 + components: + - type: Transform + pos: 45.5,19.5 + parent: 2 + - uid: 18970 + components: + - type: Transform + pos: 50.5,16.5 + parent: 2 + - uid: 18971 + components: + - type: Transform + pos: 54.5,13.5 + parent: 2 + - uid: 18972 + components: + - type: Transform + pos: 53.5,19.5 + parent: 2 + - uid: 18973 + components: + - type: Transform + pos: 51.5,23.5 + parent: 2 + - uid: 18974 + components: + - type: Transform + pos: 46.5,23.5 + parent: 2 + - uid: 18975 + components: + - type: Transform + pos: 45.5,28.5 + parent: 2 + - uid: 18976 + components: + - type: Transform + pos: 50.5,28.5 + parent: 2 + - uid: 18977 + components: + - type: Transform + pos: 45.5,31.5 + parent: 2 + - uid: 18978 + components: + - type: Transform + pos: 57.5,24.5 + parent: 2 + - uid: 18979 + components: + - type: Transform + pos: 60.5,18.5 + parent: 2 + - uid: 18980 + components: + - type: Transform + pos: 58.5,14.5 + parent: 2 + - uid: 18981 + components: + - type: Transform + pos: 52.5,32.5 + parent: 2 + - uid: 18982 + components: + - type: Transform + pos: 51.5,41.5 + parent: 2 + - uid: 18983 + components: + - type: Transform + pos: 62.5,32.5 + parent: 2 + - uid: 18984 + components: + - type: Transform + pos: 60.5,41.5 + parent: 2 + - uid: 18985 + components: + - type: Transform + pos: 58.5,43.5 + parent: 2 + - uid: 18986 + components: + - type: Transform + pos: 52.5,47.5 + parent: 2 + - uid: 18987 + components: + - type: Transform + pos: 57.5,47.5 + parent: 2 + - uid: 18988 + components: + - type: Transform + pos: 49.5,46.5 + parent: 2 + - uid: 18989 + components: + - type: Transform + pos: 45.5,48.5 + parent: 2 + - uid: 18990 + components: + - type: Transform + pos: 43.5,44.5 + parent: 2 + - uid: 18991 + components: + - type: Transform + pos: 42.5,39.5 + parent: 2 + - uid: 18992 + components: + - type: Transform + pos: 43.5,36.5 + parent: 2 + - uid: 18993 + components: + - type: Transform + pos: 35.5,36.5 + parent: 2 + - uid: 18994 + components: + - type: Transform + pos: 34.5,42.5 + parent: 2 + - uid: 18995 + components: + - type: Transform + pos: 39.5,46.5 + parent: 2 + - uid: 18996 + components: + - type: Transform + pos: 38.5,51.5 + parent: 2 + - uid: 18997 + components: + - type: Transform + pos: 41.5,55.5 + parent: 2 + - uid: 18998 + components: + - type: Transform + pos: 44.5,52.5 + parent: 2 + - uid: 18999 + components: + - type: Transform + pos: 32.5,52.5 + parent: 2 + - uid: 19000 + components: + - type: Transform + pos: 28.5,54.5 + parent: 2 + - uid: 19001 + components: + - type: Transform + pos: 30.5,57.5 + parent: 2 + - uid: 19002 + components: + - type: Transform + pos: 36.5,53.5 + parent: 2 + - uid: 19003 + components: + - type: Transform + pos: 29.5,46.5 + parent: 2 + - uid: 19004 + components: + - type: Transform + pos: 25.5,42.5 + parent: 2 + - uid: 19005 + components: + - type: Transform + pos: 25.5,37.5 + parent: 2 + - uid: 19006 + components: + - type: Transform + pos: 29.5,30.5 + parent: 2 + - uid: 19007 + components: + - type: Transform + pos: 24.5,29.5 + parent: 2 + - uid: 19008 + components: + - type: Transform + pos: 20.5,22.5 + parent: 2 + - uid: 19009 + components: + - type: Transform + pos: 25.5,22.5 + parent: 2 + - uid: 19010 + components: + - type: Transform + pos: 30.5,25.5 + parent: 2 + - uid: 19011 + components: + - type: Transform + pos: 9.5,22.5 + parent: 2 + - uid: 19012 + components: + - type: Transform + pos: 7.5,25.5 + parent: 2 + - uid: 19013 + components: + - type: Transform + pos: 4.5,26.5 + parent: 2 + - uid: 19014 + components: + - type: Transform + pos: 3.5,30.5 + parent: 2 + - uid: 19015 + components: + - type: Transform + pos: 6.5,36.5 + parent: 2 + - uid: 19016 + components: + - type: Transform + pos: 2.5,41.5 + parent: 2 + - uid: 19017 + components: + - type: Transform + pos: 9.5,44.5 + parent: 2 + - uid: 19018 + components: + - type: Transform + pos: 10.5,38.5 + parent: 2 + - uid: 19019 + components: + - type: Transform + pos: 19.5,43.5 + parent: 2 + - uid: 19020 + components: + - type: Transform + pos: 15.5,50.5 + parent: 2 + - uid: 19021 + components: + - type: Transform + pos: 26.5,51.5 + parent: 2 + - uid: 19022 + components: + - type: Transform + pos: 26.5,56.5 + parent: 2 + - uid: 19023 + components: + - type: Transform + pos: 22.5,59.5 + parent: 2 + - uid: 19024 + components: + - type: Transform + pos: 15.5,55.5 + parent: 2 + - uid: 19025 + components: + - type: Transform + pos: 8.5,58.5 + parent: 2 + - uid: 19026 + components: + - type: Transform + pos: 3.5,56.5 + parent: 2 + - uid: 19027 + components: + - type: Transform + pos: 12.5,62.5 + parent: 2 + - uid: 19028 + components: + - type: Transform + pos: 15.5,64.5 + parent: 2 + - uid: 19029 + components: + - type: Transform + pos: 19.5,60.5 + parent: 2 + - uid: 19030 + components: + - type: Transform + pos: 10.5,65.5 + parent: 2 + - uid: 19031 + components: + - type: Transform + pos: 3.5,68.5 + parent: 2 + - uid: 19032 + components: + - type: Transform + pos: 2.5,65.5 + parent: 2 + - uid: 19033 + components: + - type: Transform + pos: 0.5,67.5 + parent: 2 + - uid: 19034 + components: + - type: Transform + pos: -2.5,65.5 + parent: 2 + - uid: 19035 + components: + - type: Transform + pos: -2.5,61.5 + parent: 2 + - uid: 19036 + components: + - type: Transform + pos: -8.5,62.5 + parent: 2 + - uid: 19037 + components: + - type: Transform + pos: -10.5,65.5 + parent: 2 + - uid: 19038 + components: + - type: Transform + pos: -13.5,66.5 + parent: 2 + - uid: 19039 + components: + - type: Transform + pos: -15.5,71.5 + parent: 2 + - uid: 19040 + components: + - type: Transform + pos: -20.5,68.5 + parent: 2 + - uid: 19041 + components: + - type: Transform + pos: -15.5,65.5 + parent: 2 + - uid: 19042 + components: + - type: Transform + pos: -20.5,65.5 + parent: 2 + - uid: 19043 + components: + - type: Transform + pos: -20.5,61.5 + parent: 2 + - uid: 19044 + components: + - type: Transform + pos: -20.5,59.5 + parent: 2 + - uid: 19045 + components: + - type: Transform + pos: -21.5,55.5 + parent: 2 + - uid: 19046 + components: + - type: Transform + pos: -21.5,51.5 + parent: 2 + - uid: 19047 + components: + - type: Transform + pos: -25.5,53.5 + parent: 2 + - uid: 19048 + components: + - type: Transform + pos: -10.5,52.5 + parent: 2 + - uid: 19049 + components: + - type: Transform + pos: -26.5,59.5 + parent: 2 + - uid: 19056 + components: + - type: Transform + pos: -36.5,55.5 + parent: 2 + - uid: 19057 + components: + - type: Transform + pos: -32.5,54.5 + parent: 2 + - uid: 19058 + components: + - type: Transform + pos: -25.5,54.5 + parent: 2 + - uid: 19059 + components: + - type: Transform + pos: -25.5,49.5 + parent: 2 + - uid: 19060 + components: + - type: Transform + pos: -23.5,44.5 + parent: 2 + - uid: 19061 + components: + - type: Transform + pos: -17.5,46.5 + parent: 2 + - uid: 19062 + components: + - type: Transform + pos: -11.5,42.5 + parent: 2 + - uid: 19063 + components: + - type: Transform + pos: -2.5,41.5 + parent: 2 + - uid: 19064 + components: + - type: Transform + pos: -2.5,45.5 + parent: 2 + - uid: 19065 + components: + - type: Transform + pos: -1.5,38.5 + parent: 2 + - uid: 19066 + components: + - type: Transform + pos: -1.5,26.5 + parent: 2 + - uid: 19067 + components: + - type: Transform + pos: -7.5,36.5 + parent: 2 + - uid: 19068 + components: + - type: Transform + pos: -15.5,32.5 + parent: 2 + - uid: 19069 + components: + - type: Transform + pos: -10.5,26.5 + parent: 2 + - uid: 19070 + components: + - type: Transform + pos: -5.5,22.5 + parent: 2 + - uid: 19071 + components: + - type: Transform + pos: -8.5,18.5 + parent: 2 + - uid: 19072 + components: + - type: Transform + pos: -10.5,17.5 + parent: 2 + - uid: 19073 + components: + - type: Transform + pos: -20.5,16.5 + parent: 2 + - uid: 19074 + components: + - type: Transform + pos: -23.5,20.5 + parent: 2 + - uid: 19075 + components: + - type: Transform + pos: -34.5,14.5 + parent: 2 + - uid: 19076 + components: + - type: Transform + pos: -34.5,6.5 + parent: 2 + - uid: 19077 + components: + - type: Transform + pos: -25.5,8.5 + parent: 2 + - uid: 19078 + components: + - type: Transform + pos: -25.5,20.5 + parent: 2 + - uid: 19079 + components: + - type: Transform + pos: -34.5,23.5 + parent: 2 + - uid: 19080 + components: + - type: Transform + pos: -28.5,26.5 + parent: 2 + - uid: 19081 + components: + - type: Transform + pos: -32.5,30.5 + parent: 2 + - uid: 19082 + components: + - type: Transform + pos: -37.5,29.5 + parent: 2 + - uid: 19087 + components: + - type: Transform + pos: -27.5,34.5 + parent: 2 + - uid: 19088 + components: + - type: Transform + pos: -22.5,32.5 + parent: 2 + - uid: 19089 + components: + - type: Transform + pos: -23.5,42.5 + parent: 2 + - uid: 19090 + components: + - type: Transform + pos: -13.5,26.5 + parent: 2 + - uid: 19091 + components: + - type: Transform + pos: -7.5,14.5 + parent: 2 + - uid: 19092 + components: + - type: Transform + pos: -13.5,10.5 + parent: 2 + - uid: 19093 + components: + - type: Transform + pos: -5.5,9.5 + parent: 2 + - uid: 19096 + components: + - type: Transform + pos: -14.5,-2.5 + parent: 2 + - uid: 19097 + components: + - type: Transform + pos: -12.5,-1.5 + parent: 2 + - uid: 19098 + components: + - type: Transform + pos: -17.5,3.5 + parent: 2 + - uid: 19099 + components: + - type: Transform + pos: -8.5,5.5 + parent: 2 + - uid: 19100 + components: + - type: Transform + pos: -4.5,3.5 + parent: 2 + - uid: 19101 + components: + - type: Transform + pos: -8.5,9.5 + parent: 2 + - uid: 19102 + components: + - type: Transform + pos: 1.5,13.5 + parent: 2 + - uid: 19103 + components: + - type: Transform + pos: 5.5,9.5 + parent: 2 + - uid: 19104 + components: + - type: Transform + pos: 5.5,3.5 + parent: 2 + - uid: 19105 + components: + - type: Transform + pos: 0.5,1.5 + parent: 2 + - uid: 19106 + components: + - type: Transform + pos: -2.5,14.5 + parent: 2 + - uid: 19107 + components: + - type: Transform + pos: 2.5,18.5 + parent: 2 + - uid: 19108 + components: + - type: Transform + pos: 5.5,14.5 + parent: 2 + - uid: 19109 + components: + - type: Transform + pos: 11.5,9.5 + parent: 2 + - uid: 19110 + components: + - type: Transform + pos: 8.5,8.5 + parent: 2 + - uid: 19111 + components: + - type: Transform + pos: 13.5,17.5 + parent: 2 + - uid: 19112 + components: + - type: Transform + pos: 16.5,16.5 + parent: 2 + - uid: 19113 + components: + - type: Transform + pos: 47.5,9.5 + parent: 2 + - uid: 19114 + components: + - type: Transform + pos: 58.5,-3.5 + parent: 2 + - uid: 19115 + components: + - type: Transform + pos: 58.5,3.5 + parent: 2 + - uid: 19116 + components: + - type: Transform + pos: 44.5,3.5 + parent: 2 + - uid: 19117 + components: + - type: Transform + pos: 48.5,-4.5 + parent: 2 + - uid: 19118 + components: + - type: Transform + pos: 52.5,-9.5 + parent: 2 + - uid: 19119 + components: + - type: Transform + pos: 54.5,-7.5 + parent: 2 + - uid: 19120 + components: + - type: Transform + pos: 48.5,-7.5 + parent: 2 + - uid: 19121 + components: + - type: Transform + pos: 68.5,6.5 + parent: 2 + - uid: 19122 + components: + - type: Transform + pos: 71.5,8.5 + parent: 2 + - uid: 19123 + components: + - type: Transform + pos: 75.5,9.5 + parent: 2 + - uid: 19124 + components: + - type: Transform + pos: 75.5,-1.5 + parent: 2 + - uid: 19125 + components: + - type: Transform + pos: 68.5,1.5 + parent: 2 + - uid: 19126 + components: + - type: Transform + pos: 63.5,0.5 + parent: 2 + - uid: 19127 + components: + - type: Transform + pos: 62.5,7.5 + parent: 2 + - uid: 19128 + components: + - type: Transform + pos: 61.5,10.5 + parent: 2 + - uid: 19129 + components: + - type: Transform + pos: 69.5,12.5 + parent: 2 + - uid: 19130 + components: + - type: Transform + pos: 62.5,14.5 + parent: 2 + - uid: 19131 + components: + - type: Transform + pos: 63.5,20.5 + parent: 2 + - uid: 19132 + components: + - type: Transform + pos: 73.5,20.5 + parent: 2 + - uid: 19133 + components: + - type: Transform + pos: 63.5,25.5 + parent: 2 + - uid: 19134 + components: + - type: Transform + pos: 73.5,26.5 + parent: 2 + - uid: 19135 + components: + - type: Transform + pos: 73.5,23.5 + parent: 2 + - uid: 19136 + components: + - type: Transform + pos: 69.5,22.5 + parent: 2 + - uid: 19137 + components: + - type: Transform + pos: 67.5,31.5 + parent: 2 + - uid: 19138 + components: + - type: Transform + pos: 71.5,32.5 + parent: 2 + - uid: 19139 + components: + - type: Transform + pos: 78.5,32.5 + parent: 2 + - uid: 19140 + components: + - type: Transform + pos: 79.5,27.5 + parent: 2 + - uid: 19141 + components: + - type: Transform + pos: 79.5,22.5 + parent: 2 + - uid: 19142 + components: + - type: Transform + pos: 83.5,20.5 + parent: 2 + - uid: 19143 + components: + - type: Transform + pos: 84.5,21.5 + parent: 2 + - uid: 19144 + components: + - type: Transform + pos: 79.5,37.5 + parent: 2 + - uid: 19145 + components: + - type: Transform + pos: 83.5,40.5 + parent: 2 + - uid: 19146 + components: + - type: Transform + pos: 79.5,40.5 + parent: 2 + - uid: 19147 + components: + - type: Transform + pos: 76.5,41.5 + parent: 2 + - uid: 19148 + components: + - type: Transform + pos: 74.5,36.5 + parent: 2 + - uid: 19149 + components: + - type: Transform + pos: 73.5,37.5 + parent: 2 + - uid: 19150 + components: + - type: Transform + pos: 70.5,41.5 + parent: 2 + - uid: 19151 + components: + - type: Transform + pos: 67.5,41.5 + parent: 2 + - uid: 19152 + components: + - type: Transform + pos: 63.5,39.5 + parent: 2 + - uid: 19153 + components: + - type: Transform + pos: 63.5,44.5 + parent: 2 + - uid: 19154 + components: + - type: Transform + pos: 67.5,48.5 + parent: 2 + - uid: 19155 + components: + - type: Transform + pos: 67.5,53.5 + parent: 2 + - uid: 19156 + components: + - type: Transform + pos: 63.5,51.5 + parent: 2 + - uid: 19157 + components: + - type: Transform + pos: 62.5,55.5 + parent: 2 + - uid: 19158 + components: + - type: Transform + pos: 61.5,58.5 + parent: 2 + - uid: 19159 + components: + - type: Transform + pos: 58.5,60.5 + parent: 2 + - uid: 19160 + components: + - type: Transform + pos: 61.5,62.5 + parent: 2 + - uid: 19161 + components: + - type: Transform + pos: 71.5,58.5 + parent: 2 + - uid: 19162 + components: + - type: Transform + pos: 71.5,62.5 + parent: 2 + - uid: 19163 + components: + - type: Transform + pos: 73.5,63.5 + parent: 2 + - uid: 19164 + components: + - type: Transform + pos: 78.5,58.5 + parent: 2 + - uid: 19165 + components: + - type: Transform + pos: 80.5,63.5 + parent: 2 + - uid: 19166 + components: + - type: Transform + pos: 76.5,46.5 + parent: 2 + - uid: 19167 + components: + - type: Transform + pos: 71.5,47.5 + parent: 2 + - uid: 19168 + components: + - type: Transform + pos: 80.5,45.5 + parent: 2 + - uid: 19169 + components: + - type: Transform + pos: 83.5,41.5 + parent: 2 +- proto: RandomSoap + entities: + - uid: 13723 + components: + - type: Transform + pos: -35.5,64.5 + parent: 2 + - uid: 13724 + components: + - type: Transform + pos: 11.5,68.5 + parent: 2 +- proto: RandomSpawner + entities: + - uid: 13725 + components: + - type: Transform + pos: 28.5,63.5 + parent: 2 +- proto: RandomSpawner100 + entities: + - uid: 13726 + components: + - type: Transform + pos: 9.5,3.5 + parent: 2 + - uid: 13727 + components: + - type: Transform + pos: 9.5,4.5 + parent: 2 + - uid: 13728 + components: + - type: Transform + pos: 7.5,3.5 + parent: 2 + - uid: 13729 + components: + - type: Transform + pos: 6.5,5.5 + parent: 2 + - uid: 13730 + components: + - type: Transform + pos: 10.5,5.5 + parent: 2 + - uid: 13731 + components: + - type: Transform + pos: 8.5,5.5 + parent: 2 + - uid: 13732 + components: + - type: Transform + pos: 7.5,5.5 + parent: 2 + - uid: 13733 + components: + - type: Transform + pos: 10.5,2.5 + parent: 2 + - uid: 13734 + components: + - type: Transform + pos: 12.5,5.5 + parent: 2 + - uid: 13735 + components: + - type: Transform + pos: 15.5,8.5 + parent: 2 + - uid: 13736 + components: + - type: Transform + pos: 15.5,3.5 + parent: 2 +- proto: RandomVending + entities: + - uid: 13737 + components: + - type: Transform + pos: 12.5,17.5 + parent: 2 + - uid: 13738 + components: + - type: Transform + pos: 2.5,53.5 + parent: 2 + - uid: 13739 + components: + - type: Transform + pos: 10.5,78.5 + parent: 2 + - uid: 13740 + components: + - type: Transform + pos: -1.5,75.5 + parent: 2 + - uid: 13741 + components: + - type: Transform + pos: 38.5,45.5 + parent: 2 + - uid: 13742 + components: + - type: Transform + pos: 37.5,41.5 + parent: 2 + - uid: 13743 + components: + - type: Transform + pos: 35.5,41.5 + parent: 2 + - uid: 13744 + components: + - type: Transform + pos: 10.5,45.5 + parent: 2 + - uid: 13745 + components: + - type: Transform + pos: 80.5,21.5 + parent: 2 + - uid: 13746 + components: + - type: Transform + pos: 68.5,8.5 + parent: 2 + - uid: 13747 + components: + - type: Transform + pos: 62.5,8.5 + parent: 2 + - uid: 13748 + components: + - type: Transform + pos: 76.5,5.5 + parent: 2 + - uid: 13749 + components: + - type: Transform + pos: 72.5,21.5 + parent: 2 + - uid: 13750 + components: + - type: Transform + pos: 16.5,17.5 + parent: 2 +- proto: RandomVendingDrinks + entities: + - uid: 13751 + components: + - type: Transform + pos: -7.5,64.5 + parent: 2 + - uid: 13752 + components: + - type: Transform + pos: -30.5,63.5 + parent: 2 + - uid: 13753 + components: + - type: Transform + pos: 3.5,53.5 + parent: 2 + - uid: 13754 + components: + - type: Transform + pos: 36.5,32.5 + parent: 2 + - uid: 13755 + components: + - type: Transform + pos: 28.5,36.5 + parent: 2 + - uid: 13756 + components: + - type: Transform + pos: 3.5,39.5 + parent: 2 + - uid: 13757 + components: + - type: Transform + pos: 10.5,44.5 + parent: 2 + - uid: 13759 + components: + - type: Transform + pos: 63.5,8.5 + parent: 2 + - uid: 13760 + components: + - type: Transform + pos: 71.5,4.5 + parent: 2 + - uid: 13761 + components: + - type: Transform + pos: 2.5,46.5 + parent: 2 + - uid: 13762 + components: + - type: Transform + pos: -16.5,49.5 + parent: 2 + - uid: 13763 + components: + - type: Transform + pos: -1.5,23.5 + parent: 2 + - uid: 13764 + components: + - type: Transform + pos: 21.5,14.5 + parent: 2 + - uid: 13765 + components: + - type: Transform + pos: 42.5,49.5 + parent: 2 + - uid: 13766 + components: + - type: Transform + pos: -7.5,6.5 + parent: 2 + - uid: 17000 + components: + - type: Transform + pos: 68.5,23.5 + parent: 2 + - uid: 19494 + components: + - type: Transform + pos: -21.5,74.5 + parent: 2 +- proto: RandomVendingSnacks + entities: + - uid: 7198 + components: + - type: Transform + pos: 69.5,23.5 + parent: 2 + - uid: 13767 + components: + - type: Transform + pos: 6.5,17.5 + parent: 2 + - uid: 13768 + components: + - type: Transform + pos: -7.5,63.5 + parent: 2 + - uid: 13769 + components: + - type: Transform + pos: -29.5,63.5 + parent: 2 + - uid: 13770 + components: + - type: Transform + pos: 37.5,32.5 + parent: 2 + - uid: 13771 + components: + - type: Transform + pos: 29.5,36.5 + parent: 2 + - uid: 13772 + components: + - type: Transform + pos: 10.5,43.5 + parent: 2 + - uid: 13773 + components: + - type: Transform + pos: 67.5,8.5 + parent: 2 + - uid: 13774 + components: + - type: Transform + pos: 42.5,47.5 + parent: 2 + - uid: 13775 + components: + - type: Transform + pos: 2.5,45.5 + parent: 2 + - uid: 13776 + components: + - type: Transform + pos: -16.5,47.5 + parent: 2 + - uid: 13777 + components: + - type: Transform + pos: -1.5,22.5 + parent: 2 + - uid: 13778 + components: + - type: Transform + pos: 17.5,17.5 + parent: 2 + - uid: 13779 + components: + - type: Transform + pos: 21.5,13.5 + parent: 2 + - uid: 13780 + components: + - type: Transform + pos: -6.5,8.5 + parent: 2 + - uid: 19495 + components: + - type: Transform + pos: -21.5,73.5 + parent: 2 +- proto: Recycler + entities: + - uid: 13781 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,5.5 + parent: 2 + - type: DeviceLinkSink + links: + - 14459 +- proto: ReinforcedPlasmaWindow + entities: + - uid: 13782 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,22.5 + parent: 2 + - uid: 13783 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,22.5 + parent: 2 + - uid: 13784 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,22.5 + parent: 2 + - uid: 13785 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,31.5 + parent: 2 + - uid: 13786 + components: + - type: Transform + pos: -12.5,27.5 + parent: 2 + - uid: 13787 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,21.5 + parent: 2 + - uid: 13788 + components: + - type: Transform + pos: -36.5,11.5 + parent: 2 + - uid: 13789 + components: + - type: Transform + pos: -36.5,7.5 + parent: 2 + - uid: 13790 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,4.5 + parent: 2 + - uid: 13791 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,4.5 + parent: 2 + - uid: 13792 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,25.5 + parent: 2 + - uid: 13793 + components: + - type: Transform + pos: -20.5,47.5 + parent: 2 + - uid: 13794 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,17.5 + parent: 2 + - uid: 13795 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,15.5 + parent: 2 + - uid: 13796 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,4.5 + parent: 2 + - uid: 13797 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -33.5,4.5 + parent: 2 + - uid: 13798 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,20.5 + parent: 2 + - uid: 13799 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,19.5 + parent: 2 + - uid: 13800 + components: + - type: Transform + pos: -36.5,9.5 + parent: 2 + - uid: 13801 + components: + - type: Transform + pos: -36.5,13.5 + parent: 2 + - uid: 13802 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,26.5 + parent: 2 + - uid: 13803 + components: + - type: Transform + pos: -12.5,29.5 + parent: 2 + - uid: 13804 + components: + - type: Transform + pos: -12.5,28.5 + parent: 2 + - uid: 13805 + components: + - type: Transform + pos: -12.5,35.5 + parent: 2 + - uid: 13806 + components: + - type: Transform + pos: -12.5,33.5 + parent: 2 + - uid: 13807 + components: + - type: Transform + pos: -12.5,37.5 + parent: 2 + - uid: 13808 + components: + - type: Transform + pos: -12.5,39.5 + parent: 2 + - uid: 13809 + components: + - type: Transform + pos: -12.5,40.5 + parent: 2 + - uid: 13810 + components: + - type: Transform + pos: -12.5,41.5 + parent: 2 + - uid: 13811 + components: + - type: Transform + pos: -19.5,47.5 + parent: 2 + - uid: 13812 + components: + - type: Transform + pos: -13.5,42.5 + parent: 2 + - uid: 13813 + components: + - type: Transform + pos: -16.5,42.5 + parent: 2 + - uid: 13814 + components: + - type: Transform + pos: -21.5,47.5 + parent: 2 + - uid: 13815 + components: + - type: Transform + pos: -28.5,29.5 + parent: 2 + - uid: 13816 + components: + - type: Transform + pos: -27.5,33.5 + parent: 2 + - uid: 13817 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,27.5 + parent: 2 + - uid: 13818 + components: + - type: Transform + pos: 32.5,11.5 + parent: 2 + - uid: 13819 + components: + - type: Transform + pos: 32.5,9.5 + parent: 2 + - uid: 13820 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,16.5 + parent: 2 + - uid: 13821 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,12.5 + parent: 2 + - uid: 13822 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,8.5 + parent: 2 + - uid: 13823 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,4.5 + parent: 2 + - uid: 13824 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,4.5 + parent: 2 + - uid: 13825 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 77.5,23.5 + parent: 2 + - uid: 13826 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,39.5 + parent: 2 + - uid: 13827 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,38.5 + parent: 2 + - uid: 13828 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,37.5 + parent: 2 + - uid: 13829 + components: + - type: Transform + pos: 34.5,9.5 + parent: 2 + - uid: 13830 + components: + - type: Transform + pos: 34.5,11.5 + parent: 2 +- proto: ReinforcedWindow + entities: + - uid: 3483 + components: + - type: Transform + pos: 23.5,-36.5 + parent: 2 + - uid: 3695 + components: + - type: Transform + pos: 23.5,-32.5 + parent: 2 + - uid: 4766 + components: + - type: Transform + pos: 29.5,-23.5 + parent: 2 + - uid: 4769 + components: + - type: Transform + pos: 32.5,-22.5 + parent: 2 + - uid: 5069 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.5,78.5 + parent: 2 + - uid: 5738 + components: + - type: Transform + pos: 33.5,-22.5 + parent: 2 + - uid: 5758 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,75.5 + parent: 2 + - uid: 5997 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,78.5 + parent: 2 + - uid: 5998 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,77.5 + parent: 2 + - uid: 5999 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -28.5,77.5 + parent: 2 + - uid: 6014 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,75.5 + parent: 2 + - uid: 6015 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,76.5 + parent: 2 + - uid: 6674 + components: + - type: Transform + pos: 36.5,-30.5 + parent: 2 + - uid: 6688 + components: + - type: Transform + pos: 37.5,-36.5 + parent: 2 + - uid: 6737 + components: + - type: Transform + pos: 27.5,-22.5 + parent: 2 + - uid: 6738 + components: + - type: Transform + pos: 28.5,-22.5 + parent: 2 + - uid: 6739 + components: + - type: Transform + pos: 29.5,-22.5 + parent: 2 + - uid: 6740 + components: + - type: Transform + pos: 29.5,-21.5 + parent: 2 + - uid: 6747 + components: + - type: Transform + pos: 31.5,-13.5 + parent: 2 + - uid: 6748 + components: + - type: Transform + pos: 29.5,-13.5 + parent: 2 + - uid: 6749 + components: + - type: Transform + pos: 30.5,-13.5 + parent: 2 + - uid: 8388 + components: + - type: Transform + pos: 37.5,-2.5 + parent: 2 + - uid: 9909 + components: + - type: Transform + pos: 53.5,7.5 + parent: 2 + - uid: 11677 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,1.5 + parent: 2 + - uid: 12541 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,75.5 + parent: 2 + - uid: 12561 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,75.5 + parent: 2 + - uid: 12563 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,76.5 + parent: 2 + - uid: 12564 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,77.5 + parent: 2 + - uid: 12570 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,76.5 + parent: 2 + - uid: 13552 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -28.5,76.5 + parent: 2 + - uid: 13831 + components: + - type: Transform + pos: 6.5,34.5 + parent: 2 + - uid: 13832 + components: + - type: Transform + pos: 6.5,31.5 + parent: 2 + - uid: 13833 + components: + - type: Transform + pos: 2.5,32.5 + parent: 2 + - uid: 13834 + components: + - type: Transform + pos: -4.5,18.5 + parent: 2 + - uid: 13835 + components: + - type: Transform + pos: 6.5,35.5 + parent: 2 + - uid: 13836 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,17.5 + parent: 2 + - uid: 13837 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,22.5 + parent: 2 + - uid: 13838 + components: + - type: Transform + pos: -12.5,1.5 + parent: 2 + - uid: 13840 + components: + - type: Transform + pos: -12.5,0.5 + parent: 2 + - uid: 13841 + components: + - type: Transform + pos: 34.5,51.5 + parent: 2 + - uid: 13842 + components: + - type: Transform + pos: 36.5,51.5 + parent: 2 + - uid: 13843 + components: + - type: Transform + pos: -12.5,-0.5 + parent: 2 + - uid: 13844 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,36.5 + parent: 2 + - uid: 13845 + components: + - type: Transform + pos: -13.5,-4.5 + parent: 2 + - uid: 13846 + components: + - type: Transform + pos: -13.5,-5.5 + parent: 2 + - uid: 13847 + components: + - type: Transform + pos: -13.5,-6.5 + parent: 2 + - uid: 13848 + components: + - type: Transform + pos: -3.5,53.5 + parent: 2 + - uid: 13849 + components: + - type: Transform + pos: 0.5,0.5 + parent: 2 + - uid: 13850 + components: + - type: Transform + pos: 0.5,2.5 + parent: 2 + - uid: 13851 + components: + - type: Transform + pos: -2.5,0.5 + parent: 2 + - uid: 13852 + components: + - type: Transform + pos: -2.5,1.5 + parent: 2 + - uid: 13853 + components: + - type: Transform + pos: -2.5,2.5 + parent: 2 + - uid: 13854 + components: + - type: Transform + pos: -3.5,2.5 + parent: 2 + - uid: 13855 + components: + - type: Transform + pos: 3.5,0.5 + parent: 2 + - uid: 13856 + components: + - type: Transform + pos: 3.5,1.5 + parent: 2 + - uid: 13857 + components: + - type: Transform + pos: 3.5,2.5 + parent: 2 + - uid: 13858 + components: + - type: Transform + pos: 4.5,2.5 + parent: 2 + - uid: 13859 + components: + - type: Transform + pos: -9.5,3.5 + parent: 2 + - uid: 13860 + components: + - type: Transform + pos: -10.5,3.5 + parent: 2 + - uid: 13861 + components: + - type: Transform + pos: -11.5,3.5 + parent: 2 + - uid: 13862 + components: + - type: Transform + pos: 6.5,14.5 + parent: 2 + - uid: 13863 + components: + - type: Transform + pos: 5.5,15.5 + parent: 2 + - uid: 13864 + components: + - type: Transform + pos: 8.5,14.5 + parent: 2 + - uid: 13865 + components: + - type: Transform + pos: 10.5,14.5 + parent: 2 + - uid: 13866 + components: + - type: Transform + pos: 12.5,14.5 + parent: 2 + - uid: 13867 + components: + - type: Transform + pos: -7.5,13.5 + parent: 2 + - uid: 13868 + components: + - type: Transform + pos: -7.5,12.5 + parent: 2 + - uid: 13869 + components: + - type: Transform + pos: -6.5,12.5 + parent: 2 + - uid: 13870 + components: + - type: Transform + pos: -5.5,12.5 + parent: 2 + - uid: 13871 + components: + - type: Transform + pos: -3.5,12.5 + parent: 2 + - uid: 13872 + components: + - type: Transform + pos: -0.5,13.5 + parent: 2 + - uid: 13873 + components: + - type: Transform + pos: 0.5,13.5 + parent: 2 + - uid: 13874 + components: + - type: Transform + pos: 2.5,14.5 + parent: 2 + - uid: 13875 + components: + - type: Transform + pos: 2.5,17.5 + parent: 2 + - uid: 13876 + components: + - type: Transform + pos: 2.5,15.5 + parent: 2 + - uid: 13877 + components: + - type: Transform + pos: 3.5,18.5 + parent: 2 + - uid: 13878 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,23.5 + parent: 2 + - uid: 13879 + components: + - type: Transform + pos: -1.5,25.5 + parent: 2 + - uid: 13880 + components: + - type: Transform + pos: -4.5,22.5 + parent: 2 + - uid: 13881 + components: + - type: Transform + pos: 8.5,26.5 + parent: 2 + - uid: 13882 + components: + - type: Transform + pos: 8.5,27.5 + parent: 2 + - uid: 13883 + components: + - type: Transform + pos: 9.5,27.5 + parent: 2 + - uid: 13884 + components: + - type: Transform + pos: 9.5,30.5 + parent: 2 + - uid: 13885 + components: + - type: Transform + pos: 9.5,29.5 + parent: 2 + - uid: 13886 + components: + - type: Transform + pos: 10.5,29.5 + parent: 2 + - uid: 13887 + components: + - type: Transform + pos: 11.5,29.5 + parent: 2 + - uid: 13888 + components: + - type: Transform + pos: -6.5,24.5 + parent: 2 + - uid: 13889 + components: + - type: Transform + pos: -6.5,21.5 + parent: 2 + - uid: 13890 + components: + - type: Transform + pos: 17.5,23.5 + parent: 2 + - uid: 13891 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,24.5 + parent: 2 + - uid: 13892 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,29.5 + parent: 2 + - uid: 13893 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 23.5,29.5 + parent: 2 + - uid: 13894 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,22.5 + parent: 2 + - uid: 13895 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,27.5 + parent: 2 + - uid: 13896 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,29.5 + parent: 2 + - uid: 13897 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,31.5 + parent: 2 + - uid: 13898 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,34.5 + parent: 2 + - uid: 13899 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,30.5 + parent: 2 + - uid: 13900 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,31.5 + parent: 2 + - uid: 13901 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,35.5 + parent: 2 + - uid: 13902 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,34.5 + parent: 2 + - uid: 13903 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,36.5 + parent: 2 + - uid: 13904 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,37.5 + parent: 2 + - uid: 13905 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,38.5 + parent: 2 + - uid: 13906 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,36.5 + parent: 2 + - uid: 13907 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,36.5 + parent: 2 + - uid: 13908 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,39.5 + parent: 2 + - uid: 13909 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,42.5 + parent: 2 + - uid: 13910 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,42.5 + parent: 2 + - uid: 13911 + components: + - type: Transform + pos: 8.5,42.5 + parent: 2 + - uid: 13912 + components: + - type: Transform + pos: 2.5,40.5 + parent: 2 + - uid: 13913 + components: + - type: Transform + pos: 2.5,38.5 + parent: 2 + - uid: 13915 + components: + - type: Transform + pos: -13.5,20.5 + parent: 2 + - uid: 13916 + components: + - type: Transform + pos: -13.5,18.5 + parent: 2 + - uid: 13917 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,6.5 + parent: 2 + - uid: 13918 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,5.5 + parent: 2 + - uid: 13919 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,4.5 + parent: 2 + - uid: 13920 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,4.5 + parent: 2 + - uid: 13921 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,5.5 + parent: 2 + - uid: 13922 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,6.5 + parent: 2 + - uid: 13923 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,19.5 + parent: 2 + - uid: 13924 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,17.5 + parent: 2 + - uid: 13925 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,19.5 + parent: 2 + - uid: 13926 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,28.5 + parent: 2 + - uid: 13927 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,29.5 + parent: 2 + - uid: 13928 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,31.5 + parent: 2 + - uid: 13929 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,32.5 + parent: 2 + - uid: 13930 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,34.5 + parent: 2 + - uid: 13931 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,36.5 + parent: 2 + - uid: 13932 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,34.5 + parent: 2 + - uid: 13933 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,48.5 + parent: 2 + - uid: 13934 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,44.5 + parent: 2 + - uid: 13935 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,47.5 + parent: 2 + - uid: 13936 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,31.5 + parent: 2 + - uid: 13937 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,31.5 + parent: 2 + - uid: 13938 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,31.5 + parent: 2 + - uid: 13939 + components: + - type: Transform + pos: -19.5,50.5 + parent: 2 + - uid: 13940 + components: + - type: Transform + pos: -18.5,50.5 + parent: 2 + - uid: 13941 + components: + - type: Transform + pos: -13.5,50.5 + parent: 2 + - uid: 13942 + components: + - type: Transform + pos: -16.5,54.5 + parent: 2 + - uid: 13943 + components: + - type: Transform + pos: -16.5,55.5 + parent: 2 + - uid: 13944 + components: + - type: Transform + pos: -20.5,56.5 + parent: 2 + - uid: 13945 + components: + - type: Transform + pos: -14.5,53.5 + parent: 2 + - uid: 13946 + components: + - type: Transform + pos: -9.5,50.5 + parent: 2 + - uid: 13947 + components: + - type: Transform + pos: -8.5,50.5 + parent: 2 + - uid: 13948 + components: + - type: Transform + pos: -7.5,50.5 + parent: 2 + - uid: 13949 + components: + - type: Transform + pos: -5.5,50.5 + parent: 2 + - uid: 13950 + components: + - type: Transform + pos: -4.5,50.5 + parent: 2 + - uid: 13951 + components: + - type: Transform + pos: -3.5,50.5 + parent: 2 + - uid: 13952 + components: + - type: Transform + pos: -1.5,50.5 + parent: 2 + - uid: 13953 + components: + - type: Transform + pos: -0.5,50.5 + parent: 2 + - uid: 13954 + components: + - type: Transform + pos: 0.5,50.5 + parent: 2 + - uid: 13955 + components: + - type: Transform + pos: -9.5,53.5 + parent: 2 + - uid: 13956 + components: + - type: Transform + pos: -7.5,53.5 + parent: 2 + - uid: 13957 + components: + - type: Transform + pos: -5.5,53.5 + parent: 2 + - uid: 13958 + components: + - type: Transform + pos: -1.5,53.5 + parent: 2 + - uid: 13959 + components: + - type: Transform + pos: 0.5,53.5 + parent: 2 + - uid: 13960 + components: + - type: Transform + pos: -22.5,50.5 + parent: 2 + - uid: 13961 + components: + - type: Transform + pos: -23.5,50.5 + parent: 2 + - uid: 13962 + components: + - type: Transform + pos: -24.5,50.5 + parent: 2 + - uid: 13963 + components: + - type: Transform + pos: -22.5,56.5 + parent: 2 + - uid: 13964 + components: + - type: Transform + pos: -24.5,56.5 + parent: 2 + - uid: 13965 + components: + - type: Transform + pos: -30.5,51.5 + parent: 2 + - uid: 13966 + components: + - type: Transform + pos: -30.5,53.5 + parent: 2 + - uid: 13967 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -33.5,52.5 + parent: 2 + - uid: 13968 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,55.5 + parent: 2 + - uid: 13969 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -37.5,58.5 + parent: 2 + - uid: 13970 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -39.5,58.5 + parent: 2 + - uid: 13978 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,68.5 + parent: 2 + - uid: 13979 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,67.5 + parent: 2 + - uid: 13980 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,72.5 + parent: 2 + - uid: 13981 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,72.5 + parent: 2 + - uid: 13982 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,72.5 + parent: 2 + - uid: 13984 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,69.5 + parent: 2 + - uid: 13986 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,71.5 + parent: 2 + - uid: 13987 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,71.5 + parent: 2 + - uid: 13988 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,71.5 + parent: 2 + - uid: 13989 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,71.5 + parent: 2 + - uid: 13991 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,69.5 + parent: 2 + - uid: 13992 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,76.5 + parent: 2 + - uid: 13993 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,75.5 + parent: 2 + - uid: 13994 + components: + - type: Transform + pos: 4.5,79.5 + parent: 2 + - uid: 13995 + components: + - type: Transform + pos: 2.5,79.5 + parent: 2 + - uid: 13996 + components: + - type: Transform + pos: 8.5,80.5 + parent: 2 + - uid: 13997 + components: + - type: Transform + pos: 1.5,79.5 + parent: 2 + - uid: 13998 + components: + - type: Transform + pos: 3.5,79.5 + parent: 2 + - uid: 13999 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 16.5,75.5 + parent: 2 + - uid: 14000 + components: + - type: Transform + pos: 7.5,80.5 + parent: 2 + - uid: 14001 + components: + - type: Transform + pos: 9.5,80.5 + parent: 2 + - uid: 14002 + components: + - type: Transform + pos: -2.5,75.5 + parent: 2 + - uid: 14003 + components: + - type: Transform + pos: -2.5,74.5 + parent: 2 + - uid: 14004 + components: + - type: Transform + pos: -2.5,73.5 + parent: 2 + - uid: 14005 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,65.5 + parent: 2 + - uid: 14006 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,65.5 + parent: 2 + - uid: 14007 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,59.5 + parent: 2 + - uid: 14008 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -19.5,65.5 + parent: 2 + - uid: 14009 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,65.5 + parent: 2 + - uid: 14010 + components: + - type: Transform + pos: -24.5,59.5 + parent: 2 + - uid: 14011 + components: + - type: Transform + pos: -14.5,63.5 + parent: 2 + - uid: 14012 + components: + - type: Transform + pos: -13.5,61.5 + parent: 2 + - uid: 14013 + components: + - type: Transform + pos: -13.5,60.5 + parent: 2 + - uid: 14014 + components: + - type: Transform + pos: -14.5,59.5 + parent: 2 + - uid: 14015 + components: + - type: Transform + pos: -16.5,59.5 + parent: 2 + - uid: 14016 + components: + - type: Transform + pos: -18.5,59.5 + parent: 2 + - uid: 14017 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,61.5 + parent: 2 + - uid: 14018 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,59.5 + parent: 2 + - uid: 14019 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,57.5 + parent: 2 + - uid: 14020 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,57.5 + parent: 2 + - uid: 14021 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,78.5 + parent: 2 + - uid: 14022 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,73.5 + parent: 2 + - uid: 14023 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,72.5 + parent: 2 + - uid: 14024 + components: + - type: Transform + pos: 6.5,1.5 + parent: 2 + - uid: 14025 + components: + - type: Transform + pos: 11.5,4.5 + parent: 2 + - uid: 14026 + components: + - type: Transform + pos: 9.5,6.5 + parent: 2 + - uid: 14027 + components: + - type: Transform + pos: 8.5,2.5 + parent: 2 + - uid: 14028 + components: + - type: Transform + pos: 15.5,0.5 + parent: 2 + - uid: 14029 + components: + - type: Transform + pos: 18.5,3.5 + parent: 2 + - uid: 14030 + components: + - type: Transform + pos: 20.5,3.5 + parent: 2 + - uid: 14032 + components: + - type: Transform + pos: 29.5,-1.5 + parent: 2 + - uid: 14033 + components: + - type: Transform + pos: 30.5,-1.5 + parent: 2 + - uid: 14034 + components: + - type: Transform + pos: 35.5,-2.5 + parent: 2 + - uid: 14035 + components: + - type: Transform + pos: 36.5,-2.5 + parent: 2 + - uid: 14037 + components: + - type: Transform + pos: 38.5,3.5 + parent: 2 + - uid: 14038 + components: + - type: Transform + pos: 39.5,3.5 + parent: 2 + - uid: 14039 + components: + - type: Transform + pos: 41.5,-0.5 + parent: 2 + - uid: 14040 + components: + - type: Transform + pos: 42.5,-0.5 + parent: 2 + - uid: 14041 + components: + - type: Transform + pos: 42.5,-2.5 + parent: 2 + - uid: 14042 + components: + - type: Transform + pos: 42.5,-1.5 + parent: 2 + - uid: 14043 + components: + - type: Transform + pos: 40.5,14.5 + parent: 2 + - uid: 14044 + components: + - type: Transform + pos: 38.5,14.5 + parent: 2 + - uid: 14045 + components: + - type: Transform + pos: 40.5,18.5 + parent: 2 + - uid: 14046 + components: + - type: Transform + pos: 42.5,18.5 + parent: 2 + - uid: 14047 + components: + - type: Transform + pos: 45.5,15.5 + parent: 2 + - uid: 14048 + components: + - type: Transform + pos: 46.5,15.5 + parent: 2 + - uid: 14049 + components: + - type: Transform + pos: 47.5,14.5 + parent: 2 + - uid: 14050 + components: + - type: Transform + pos: 47.5,13.5 + parent: 2 + - uid: 14051 + components: + - type: Transform + pos: 47.5,15.5 + parent: 2 + - uid: 14052 + components: + - type: Transform + pos: 50.5,14.5 + parent: 2 + - uid: 14053 + components: + - type: Transform + pos: 50.5,18.5 + parent: 2 + - uid: 14054 + components: + - type: Transform + pos: 41.5,24.5 + parent: 2 + - uid: 14055 + components: + - type: Transform + pos: 39.5,24.5 + parent: 2 + - uid: 14056 + components: + - type: Transform + pos: 40.5,24.5 + parent: 2 + - uid: 14057 + components: + - type: Transform + pos: 70.5,1.5 + parent: 2 + - uid: 14058 + components: + - type: Transform + pos: 36.5,29.5 + parent: 2 + - uid: 14059 + components: + - type: Transform + pos: 36.5,27.5 + parent: 2 + - uid: 14060 + components: + - type: Transform + pos: 40.5,26.5 + parent: 2 + - uid: 14061 + components: + - type: Transform + pos: 43.5,28.5 + parent: 2 + - uid: 14062 + components: + - type: Transform + pos: 44.5,32.5 + parent: 2 + - uid: 14063 + components: + - type: Transform + pos: 51.5,24.5 + parent: 2 + - uid: 14064 + components: + - type: Transform + pos: 51.5,26.5 + parent: 2 + - uid: 14065 + components: + - type: Transform + pos: 50.5,23.5 + parent: 2 + - uid: 14066 + components: + - type: Transform + pos: 52.5,23.5 + parent: 2 + - uid: 14067 + components: + - type: Transform + pos: 54.5,23.5 + parent: 2 + - uid: 14068 + components: + - type: Transform + pos: 54.5,22.5 + parent: 2 + - uid: 14069 + components: + - type: Transform + pos: 56.5,23.5 + parent: 2 + - uid: 14070 + components: + - type: Transform + pos: 49.5,20.5 + parent: 2 + - uid: 14071 + components: + - type: Transform + pos: 51.5,19.5 + parent: 2 + - uid: 14072 + components: + - type: Transform + pos: 52.5,19.5 + parent: 2 + - uid: 14073 + components: + - type: Transform + pos: 54.5,20.5 + parent: 2 + - uid: 14074 + components: + - type: Transform + pos: 56.5,6.5 + parent: 2 + - uid: 14076 + components: + - type: Transform + pos: 50.5,-5.5 + parent: 2 + - uid: 14077 + components: + - type: Transform + pos: 50.5,-4.5 + parent: 2 + - uid: 14078 + components: + - type: Transform + pos: 52.5,-5.5 + parent: 2 + - uid: 14079 + components: + - type: Transform + pos: 52.5,-4.5 + parent: 2 + - uid: 14080 + components: + - type: Transform + pos: 59.5,11.5 + parent: 2 + - uid: 14081 + components: + - type: Transform + pos: 60.5,11.5 + parent: 2 + - uid: 14082 + components: + - type: Transform + pos: 62.5,2.5 + parent: 2 + - uid: 14083 + components: + - type: Transform + pos: 62.5,3.5 + parent: 2 + - uid: 14084 + components: + - type: Transform + pos: 62.5,4.5 + parent: 2 + - uid: 14085 + components: + - type: Transform + pos: 64.5,-0.5 + parent: 2 + - uid: 14086 + components: + - type: Transform + pos: 65.5,-0.5 + parent: 2 + - uid: 14087 + components: + - type: Transform + pos: 66.5,-0.5 + parent: 2 + - uid: 14088 + components: + - type: Transform + pos: 69.5,1.5 + parent: 2 + - uid: 14089 + components: + - type: Transform + pos: 71.5,1.5 + parent: 2 + - uid: 14090 + components: + - type: Transform + pos: 71.5,0.5 + parent: 2 + - uid: 14091 + components: + - type: Transform + pos: 71.5,-0.5 + parent: 2 + - uid: 14092 + components: + - type: Transform + pos: 72.5,-4.5 + parent: 2 + - uid: 14093 + components: + - type: Transform + pos: 20.5,64.5 + parent: 2 + - uid: 14094 + components: + - type: Transform + pos: 26.5,66.5 + parent: 2 + - uid: 14095 + components: + - type: Transform + pos: 29.5,59.5 + parent: 2 + - uid: 14096 + components: + - type: Transform + pos: 30.5,59.5 + parent: 2 + - uid: 14097 + components: + - type: Transform + pos: 31.5,59.5 + parent: 2 + - uid: 14098 + components: + - type: Transform + pos: 29.5,51.5 + parent: 2 + - uid: 14099 + components: + - type: Transform + pos: 29.5,50.5 + parent: 2 + - uid: 14100 + components: + - type: Transform + pos: 28.5,50.5 + parent: 2 + - uid: 14101 + components: + - type: Transform + pos: 27.5,50.5 + parent: 2 + - uid: 14102 + components: + - type: Transform + pos: 31.5,51.5 + parent: 2 + - uid: 14103 + components: + - type: Transform + pos: 31.5,50.5 + parent: 2 + - uid: 14104 + components: + - type: Transform + pos: 32.5,50.5 + parent: 2 + - uid: 14105 + components: + - type: Transform + pos: 33.5,50.5 + parent: 2 + - uid: 14106 + components: + - type: Transform + pos: 36.5,50.5 + parent: 2 + - uid: 14107 + components: + - type: Transform + pos: 37.5,50.5 + parent: 2 + - uid: 14108 + components: + - type: Transform + pos: 35.5,58.5 + parent: 2 + - uid: 14109 + components: + - type: Transform + pos: 36.5,58.5 + parent: 2 + - uid: 14110 + components: + - type: Transform + pos: 37.5,58.5 + parent: 2 + - uid: 14111 + components: + - type: Transform + pos: 35.5,65.5 + parent: 2 + - uid: 14112 + components: + - type: Transform + pos: 34.5,65.5 + parent: 2 + - uid: 14113 + components: + - type: Transform + pos: 34.5,66.5 + parent: 2 + - uid: 14114 + components: + - type: Transform + pos: 34.5,67.5 + parent: 2 + - uid: 14115 + components: + - type: Transform + pos: 31.5,65.5 + parent: 2 + - uid: 14116 + components: + - type: Transform + pos: 32.5,65.5 + parent: 2 + - uid: 14117 + components: + - type: Transform + pos: 32.5,67.5 + parent: 2 + - uid: 14118 + components: + - type: Transform + pos: 39.5,67.5 + parent: 2 + - uid: 14119 + components: + - type: Transform + pos: 46.5,64.5 + parent: 2 + - uid: 14120 + components: + - type: Transform + pos: 46.5,65.5 + parent: 2 + - uid: 14122 + components: + - type: Transform + pos: 55.5,59.5 + parent: 2 + - uid: 14123 + components: + - type: Transform + pos: 61.5,36.5 + parent: 2 + - uid: 14124 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 48.5,36.5 + parent: 2 + - uid: 14125 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 47.5,36.5 + parent: 2 + - uid: 14126 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 49.5,37.5 + parent: 2 + - uid: 14127 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 49.5,40.5 + parent: 2 + - uid: 14128 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 63.5,56.5 + parent: 2 + - uid: 14129 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 63.5,57.5 + parent: 2 + - uid: 14130 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 62.5,58.5 + parent: 2 + - uid: 14131 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 61.5,59.5 + parent: 2 + - uid: 14132 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 61.5,61.5 + parent: 2 + - uid: 14133 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 58.5,63.5 + parent: 2 + - uid: 14134 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 59.5,63.5 + parent: 2 + - uid: 14135 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 59.5,65.5 + parent: 2 + - uid: 14136 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 61.5,63.5 + parent: 2 + - uid: 14137 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 61.5,64.5 + parent: 2 + - uid: 14138 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 61.5,65.5 + parent: 2 + - uid: 14139 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 63.5,65.5 + parent: 2 + - uid: 14140 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 63.5,63.5 + parent: 2 + - uid: 14141 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 64.5,63.5 + parent: 2 + - uid: 14142 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 65.5,63.5 + parent: 2 + - uid: 14143 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 66.5,63.5 + parent: 2 + - uid: 14144 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 67.5,63.5 + parent: 2 + - uid: 14145 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 67.5,65.5 + parent: 2 + - uid: 14146 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 69.5,63.5 + parent: 2 + - uid: 14147 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 69.5,64.5 + parent: 2 + - uid: 14148 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 69.5,65.5 + parent: 2 + - uid: 14149 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 71.5,65.5 + parent: 2 + - uid: 14150 + components: + - type: Transform + pos: 76.5,63.5 + parent: 2 + - uid: 14151 + components: + - type: Transform + pos: 77.5,63.5 + parent: 2 + - uid: 14152 + components: + - type: Transform + pos: 78.5,63.5 + parent: 2 + - uid: 14153 + components: + - type: Transform + pos: 81.5,63.5 + parent: 2 + - uid: 14154 + components: + - type: Transform + pos: 80.5,57.5 + parent: 2 + - uid: 14155 + components: + - type: Transform + pos: 81.5,58.5 + parent: 2 + - uid: 14156 + components: + - type: Transform + pos: 80.5,56.5 + parent: 2 + - uid: 14157 + components: + - type: Transform + pos: 80.5,55.5 + parent: 2 + - uid: 14158 + components: + - type: Transform + pos: 81.5,53.5 + parent: 2 + - uid: 14159 + components: + - type: Transform + pos: 69.5,46.5 + parent: 2 + - uid: 14160 + components: + - type: Transform + pos: 69.5,42.5 + parent: 2 + - uid: 14161 + components: + - type: Transform + pos: 72.5,42.5 + parent: 2 + - uid: 14162 + components: + - type: Transform + pos: 84.5,44.5 + parent: 2 + - uid: 14163 + components: + - type: Transform + pos: 84.5,43.5 + parent: 2 + - uid: 14164 + components: + - type: Transform + pos: 84.5,42.5 + parent: 2 + - uid: 14165 + components: + - type: Transform + pos: 79.5,44.5 + parent: 2 + - uid: 14166 + components: + - type: Transform + pos: 79.5,42.5 + parent: 2 + - uid: 14167 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 73.5,38.5 + parent: 2 + - uid: 14168 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 73.5,39.5 + parent: 2 + - uid: 14169 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 74.5,35.5 + parent: 2 + - uid: 14170 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 74.5,33.5 + parent: 2 + - uid: 14171 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 78.5,33.5 + parent: 2 + - uid: 14172 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 78.5,35.5 + parent: 2 + - uid: 14173 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 80.5,28.5 + parent: 2 + - uid: 14174 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 82.5,28.5 + parent: 2 + - uid: 14175 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 84.5,29.5 + parent: 2 + - uid: 14176 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 85.5,29.5 + parent: 2 + - uid: 14177 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 86.5,29.5 + parent: 2 + - uid: 14178 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 88.5,31.5 + parent: 2 + - uid: 14179 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 88.5,32.5 + parent: 2 + - uid: 14180 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 88.5,33.5 + parent: 2 + - uid: 14181 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 88.5,34.5 + parent: 2 + - uid: 14182 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 88.5,35.5 + parent: 2 + - uid: 14183 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 88.5,36.5 + parent: 2 + - uid: 14184 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 88.5,37.5 + parent: 2 + - uid: 14185 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 84.5,25.5 + parent: 2 + - uid: 14186 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 84.5,39.5 + parent: 2 + - uid: 14187 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 85.5,39.5 + parent: 2 + - uid: 14188 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 86.5,39.5 + parent: 2 + - uid: 14189 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 84.5,24.5 + parent: 2 + - uid: 14190 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 84.5,23.5 + parent: 2 + - uid: 14191 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 84.5,22.5 + parent: 2 + - uid: 14192 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 77.5,17.5 + parent: 2 + - uid: 14193 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 77.5,15.5 + parent: 2 + - uid: 14194 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 75.5,8.5 + parent: 2 + - uid: 14195 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 76.5,8.5 + parent: 2 + - uid: 14196 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 77.5,8.5 + parent: 2 + - uid: 14197 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 77.5,6.5 + parent: 2 + - uid: 14198 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 77.5,5.5 + parent: 2 + - uid: 14199 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 77.5,4.5 + parent: 2 + - uid: 14200 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 77.5,3.5 + parent: 2 + - uid: 14201 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 77.5,2.5 + parent: 2 + - uid: 14202 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 77.5,1.5 + parent: 2 + - uid: 14203 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 75.5,1.5 + parent: 2 + - uid: 14204 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 75.5,-0.5 + parent: 2 + - uid: 14205 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 74.5,-4.5 + parent: 2 + - uid: 14206 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 77.5,-0.5 + parent: 2 + - uid: 14207 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 76.5,-0.5 + parent: 2 + - uid: 14208 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 74.5,-3.5 + parent: 2 + - uid: 14209 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 74.5,-2.5 + parent: 2 + - uid: 14210 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 68.5,2.5 + parent: 2 + - uid: 14211 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 63.5,7.5 + parent: 2 + - uid: 14212 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 64.5,7.5 + parent: 2 + - uid: 14213 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 66.5,7.5 + parent: 2 + - uid: 14214 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 67.5,7.5 + parent: 2 + - uid: 14215 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 69.5,5.5 + parent: 2 + - uid: 14216 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 70.5,5.5 + parent: 2 + - uid: 14217 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 71.5,5.5 + parent: 2 + - uid: 14218 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 71.5,6.5 + parent: 2 + - uid: 14219 + components: + - type: Transform + pos: 68.5,13.5 + parent: 2 + - uid: 14220 + components: + - type: Transform + pos: 68.5,14.5 + parent: 2 + - uid: 14221 + components: + - type: Transform + pos: 68.5,15.5 + parent: 2 + - uid: 14222 + components: + - type: Transform + pos: 73.5,12.5 + parent: 2 + - uid: 14223 + components: + - type: Transform + pos: 71.5,12.5 + parent: 2 + - uid: 14224 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,32.5 + parent: 2 + - uid: 14225 + components: + - type: Transform + pos: 5.5,17.5 + parent: 2 + - uid: 14226 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 54.5,17.5 + parent: 2 + - uid: 14227 + components: + - type: Transform + pos: 34.5,50.5 + parent: 2 + - uid: 14228 + components: + - type: Transform + pos: 67.5,24.5 + parent: 2 + - uid: 14229 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,22.5 + parent: 2 + - uid: 14230 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,22.5 + parent: 2 + - uid: 14231 + components: + - type: Transform + pos: 81.5,51.5 + parent: 2 + - uid: 14232 + components: + - type: Transform + pos: 81.5,50.5 + parent: 2 + - uid: 14233 + components: + - type: Transform + pos: 81.5,49.5 + parent: 2 + - uid: 14234 + components: + - type: Transform + pos: 67.5,25.5 + parent: 2 + - uid: 14235 + components: + - type: Transform + pos: -32.5,32.5 + parent: 2 + - uid: 14236 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,21.5 + parent: 2 + - uid: 14237 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,24.5 + parent: 2 + - uid: 14238 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,23.5 + parent: 2 + - uid: 14239 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,21.5 + parent: 2 + - uid: 14240 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,28.5 + parent: 2 + - uid: 14241 + components: + - type: Transform + pos: -1.5,31.5 + parent: 2 + - uid: 14242 + components: + - type: Transform + pos: -1.5,29.5 + parent: 2 + - uid: 14243 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,27.5 + parent: 2 + - uid: 14244 + components: + - type: Transform + pos: -5.5,18.5 + parent: 2 + - uid: 14245 + components: + - type: Transform + pos: 2.5,34.5 + parent: 2 + - uid: 14246 + components: + - type: Transform + pos: 2.5,33.5 + parent: 2 + - uid: 15257 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 67.5,30.5 + parent: 2 + - uid: 15283 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 67.5,29.5 + parent: 2 + - uid: 15524 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,78.5 + parent: 2 + - uid: 17821 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -33.5,77.5 + parent: 2 + - uid: 17825 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,78.5 + parent: 2 + - uid: 17833 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 57.5,59.5 + parent: 2 + - uid: 17871 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -33.5,78.5 + parent: 2 + - uid: 18641 + components: + - type: Transform + pos: -6.5,19.5 + parent: 2 + - uid: 18944 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,75.5 + parent: 2 +- proto: RemoteSignaller + entities: + - uid: 14257 + components: + - type: Transform + pos: 41.68052,9.226255 + parent: 2 + - uid: 14258 + components: + - type: Transform + pos: 41.537052,9.226255 + parent: 2 + - uid: 14259 + components: + - type: Transform + pos: 41.35772,9.226255 + parent: 2 + - uid: 14260 + components: + - type: Transform + pos: 41.698452,8.921595 + parent: 2 + - uid: 14261 + components: + - type: Transform + pos: 41.465317,8.921595 + parent: 2 + - uid: 14262 + components: + - type: Transform + pos: 84.48523,35.66013 + parent: 2 +- proto: ResearchAndDevelopmentServer + entities: + - uid: 14263 + components: + - type: Transform + pos: 23.5,2.5 + parent: 2 +- proto: RevolverCapGun + entities: + - uid: 14265 + components: + - type: Transform + pos: 40.122246,38.6715 + parent: 2 +- proto: Rickenbacker4003Instrument + entities: + - uid: 19498 + components: + - type: Transform + pos: -31.48632,67.62706 + parent: 2 +- proto: RiotBulletShield + entities: + - uid: 14266 + components: + - type: Transform + pos: -19.35863,70.86299 + parent: 2 + - uid: 14267 + components: + - type: Transform + pos: -19.663498,70.88091 + parent: 2 + - uid: 14268 + components: + - type: Transform + pos: -19.19723,70.86299 + parent: 2 +- proto: RiotLaserShield + entities: + - uid: 14269 + components: + - type: Transform + pos: -19.717297,70.71962 + parent: 2 + - uid: 14270 + components: + - type: Transform + pos: -19.430363,70.71962 + parent: 2 + - uid: 14271 + components: + - type: Transform + pos: -19.107563,70.71962 + parent: 2 +- proto: RollerBedSpawnFolded + entities: + - uid: 14272 + components: + - type: Transform + pos: 7.360282,37.81381 + parent: 2 + - uid: 14273 + components: + - type: Transform + pos: 7.7667723,37.766018 + parent: 2 + - uid: 14274 + components: + - type: Transform + pos: 7.695039,37.443436 + parent: 2 +- proto: RubberStampApproved + entities: + - uid: 14275 + components: + - type: Transform + pos: 9.306652,12.787447 + parent: 2 + - uid: 14276 + components: + - type: Transform + pos: -19.227026,53.804455 + parent: 2 + - uid: 14277 + components: + - type: Transform + pos: -24.586525,55.52049 + parent: 2 + - uid: 14278 + components: + - type: Transform + pos: 19.013535,54.77198 + parent: 2 +- proto: RubberStampDenied + entities: + - uid: 14279 + components: + - type: Transform + pos: 9.270785,12.67992 + parent: 2 + - uid: 14280 + components: + - type: Transform + pos: -19.29876,53.613297 + parent: 2 + - uid: 14281 + components: + - type: Transform + pos: -24.443058,55.46075 + parent: 2 + - uid: 14282 + components: + - type: Transform + pos: 18.901236,54.687813 + parent: 2 +- proto: SalvageCanisterSpawner + entities: + - uid: 14290 + components: + - type: Transform + pos: 41.5,13.5 + parent: 2 + - uid: 14291 + components: + - type: Transform + pos: 41.5,12.5 + parent: 2 + - uid: 14292 + components: + - type: Transform + pos: 76.5,49.5 + parent: 2 + - uid: 14293 + components: + - type: Transform + pos: 76.5,50.5 + parent: 2 + - uid: 14294 + components: + - type: Transform + pos: 73.5,56.5 + parent: 2 + - uid: 14295 + components: + - type: Transform + pos: 73.5,57.5 + parent: 2 + - uid: 14296 + components: + - type: Transform + pos: 74.5,56.5 + parent: 2 + - uid: 14297 + components: + - type: Transform + pos: 44.5,6.5 + parent: 2 + - uid: 14298 + components: + - type: Transform + pos: 45.5,6.5 + parent: 2 + - uid: 14299 + components: + - type: Transform + pos: 45.5,7.5 + parent: 2 + - uid: 14300 + components: + - type: Transform + pos: 17.5,8.5 + parent: 2 + - uid: 14301 + components: + - type: Transform + pos: 17.5,9.5 + parent: 2 + - uid: 14302 + components: + - type: Transform + pos: 16.5,5.5 + parent: 2 + - uid: 14303 + components: + - type: Transform + pos: 11.5,63.5 + parent: 2 + - uid: 14304 + components: + - type: Transform + pos: 10.5,63.5 + parent: 2 + - uid: 14305 + components: + - type: Transform + pos: 9.5,63.5 + parent: 2 + - uid: 14306 + components: + - type: Transform + pos: 62.5,48.5 + parent: 2 + - uid: 14307 + components: + - type: Transform + pos: 61.5,48.5 + parent: 2 + - uid: 14308 + components: + - type: Transform + pos: 60.5,48.5 + parent: 2 + - uid: 14309 + components: + - type: Transform + pos: 32.5,60.5 + parent: 2 + - uid: 14310 + components: + - type: Transform + pos: 33.5,60.5 + parent: 2 + - uid: 14311 + components: + - type: Transform + pos: 34.5,60.5 + parent: 2 +- proto: SalvageLootSpawner + entities: + - uid: 14315 + components: + - type: Transform + pos: -13.5,-1.5 + parent: 2 + - uid: 14316 + components: + - type: Transform + pos: -13.5,-1.5 + parent: 2 +- proto: SalvageMagnet + entities: + - uid: 14317 + components: + - type: Transform + pos: -14.5,-9.5 + parent: 2 +- proto: SalvageMaterialCrateSpawner + entities: + - uid: 14318 + components: + - type: Transform + pos: -14.5,-3.5 + parent: 2 +- proto: Screen + entities: + - uid: 14319 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 67.5,57.5 + parent: 2 + - uid: 14320 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 63.5,63.5 + parent: 2 + - uid: 14321 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 67.5,63.5 + parent: 2 + - uid: 14322 + components: + - type: Transform + pos: 54.5,41.5 + parent: 2 + - uid: 14323 + components: + - type: Transform + pos: 71.5,36.5 + parent: 2 + - uid: 14324 + components: + - type: Transform + pos: 53.5,28.5 + parent: 2 + - uid: 14325 + components: + - type: Transform + pos: 30.5,32.5 + parent: 2 + - uid: 14326 + components: + - type: Transform + pos: 27.5,18.5 + parent: 2 + - uid: 14327 + components: + - type: Transform + pos: 13.5,15.5 + parent: 2 + - uid: 14328 + components: + - type: Transform + pos: -3.5,37.5 + parent: 2 + - uid: 14329 + components: + - type: Transform + pos: -2.5,57.5 + parent: 2 + - uid: 14330 + components: + - type: Transform + pos: -26.5,66.5 + parent: 2 + - uid: 14331 + components: + - type: Transform + pos: 67.5,59.5 + parent: 2 + - uid: 14332 + components: + - type: Transform + pos: 67.5,47.5 + parent: 2 + - uid: 14333 + components: + - type: Transform + pos: 87.5,38.5 + parent: 2 + - uid: 14334 + components: + - type: Transform + pos: 87.5,38.5 + parent: 2 + - uid: 14335 + components: + - type: Transform + pos: 87.5,30.5 + parent: 2 + - uid: 14336 + components: + - type: Transform + pos: -2.5,22.5 + parent: 2 + - uid: 14337 + components: + - type: Transform + pos: 3.5,22.5 + parent: 2 + - uid: 14338 + components: + - type: Transform + pos: 15.5,23.5 + parent: 2 + - uid: 14339 + components: + - type: Transform + pos: 13.5,18.5 + parent: 2 + - uid: 14340 + components: + - type: Transform + pos: 1.5,50.5 + parent: 2 + - uid: 14341 + components: + - type: Transform + pos: 3.5,54.5 + parent: 2 + - uid: 14342 + components: + - type: Transform + pos: 5.5,46.5 + parent: 2 + - uid: 14343 + components: + - type: Transform + pos: -12.5,46.5 + parent: 2 + - uid: 14344 + components: + - type: Transform + pos: -10.5,53.5 + parent: 2 + - uid: 14345 + components: + - type: Transform + pos: 3.5,61.5 + parent: 2 + - uid: 14346 + components: + - type: Transform + pos: 7.5,65.5 + parent: 2 + - uid: 14347 + components: + - type: Transform + pos: -0.5,76.5 + parent: 2 + - uid: 14348 + components: + - type: Transform + pos: 12.5,76.5 + parent: 2 + - uid: 14349 + components: + - type: Transform + pos: -8.5,63.5 + parent: 2 + - uid: 17170 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,-30.5 + parent: 2 + - uid: 17209 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 33.5,-30.5 + parent: 2 + - uid: 17212 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,-43.5 + parent: 2 + - uid: 17213 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,-47.5 + parent: 2 + - uid: 17878 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 26.5,-43.5 + parent: 2 + - uid: 17879 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 32.5,-39.5 + parent: 2 + - uid: 18046 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 26.5,-47.5 + parent: 2 + - uid: 18047 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 28.5,-39.5 + parent: 2 +- proto: Screwdriver + entities: + - uid: 14350 + components: + - type: Transform + pos: 36.470516,7.5765038 + parent: 2 + - uid: 14351 + components: + - type: Transform + pos: 51.508472,54.549034 + parent: 2 + - uid: 19789 + components: + - type: Transform + pos: 36.49234,-36.43892 + parent: 2 +- proto: SecurityTechFab + entities: + - uid: 14352 + components: + - type: Transform + pos: -14.5,69.5 + parent: 2 +- proto: SecurityTechFabCircuitboard + entities: + - uid: 14353 + components: + - type: Transform + pos: 29.380825,54.641865 + parent: 2 +- proto: SeedExtractor + entities: + - uid: 13232 + components: + - type: Transform + pos: -34.5,75.5 + parent: 2 + - uid: 14355 + components: + - type: Transform + pos: 10.5,73.5 + parent: 2 + - uid: 14356 + components: + - type: Transform + pos: 44.5,43.5 + parent: 2 +- proto: ShardGlass + entities: + - uid: 14357 + components: + - type: Transform + pos: 61.59341,51.289673 + parent: 2 + - uid: 14358 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 61.736877,51.450962 + parent: 2 + - uid: 14359 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 60.714676,50.895405 + parent: 2 + - uid: 14360 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 62.79495,53.673183 + parent: 2 + - uid: 14361 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 61.180943,53.529816 + parent: 2 +- proto: ShardGlassReinforced + entities: + - uid: 14362 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 62.79495,54.8739 + parent: 2 +- proto: SheetGlass + entities: + - uid: 14363 + components: + - type: Transform + pos: -2.4447641,36.554058 + parent: 2 + - uid: 14364 + components: + - type: Transform + pos: -2.4447641,36.554058 + parent: 2 + - uid: 14365 + components: + - type: Transform + pos: 50.558296,-1.3179386 + parent: 2 + - uid: 14366 + components: + - type: Transform + pos: 59.482616,22.567444 + parent: 2 + - uid: 14367 + components: + - type: Transform + pos: 46.523014,24.546581 + parent: 2 + - uid: 14368 + components: + - type: Transform + pos: 46.523014,24.546581 + parent: 2 + - uid: 14369 + components: + - type: Transform + pos: 46.611263,31.55423 + parent: 2 + - uid: 14370 + components: + - type: Transform + pos: 71.534035,46.549133 + parent: 2 + - uid: 14371 + components: + - type: Transform + pos: 71.534035,46.549133 + parent: 2 + - uid: 14372 + components: + - type: Transform + pos: 71.52,42.63534 + parent: 2 + - uid: 14373 + components: + - type: Transform + pos: 71.52,42.63534 + parent: 2 + - uid: 14375 + components: + - type: Transform + pos: -14.5,-1.5 + parent: 2 + - uid: 14376 + components: + - type: Transform + pos: 0.5,12.5 + parent: 2 + - uid: 19786 + components: + - type: Transform + pos: 34.55388,-36.60021 + parent: 2 +- proto: SheetPlasma + entities: + - uid: 14377 + components: + - type: Transform + pos: 52.55033,-1.3658054 + parent: 2 + - uid: 19782 + components: + - type: Transform + pos: 34.500034,-36.47476 + parent: 2 +- proto: SheetPlasma1 + entities: + - uid: 14379 + components: + - type: Transform + pos: 27.473671,38.56969 + parent: 2 + - uid: 14380 + components: + - type: Transform + pos: 27.473671,38.56969 + parent: 2 + - uid: 14381 + components: + - type: Transform + pos: 27.473671,38.56969 + parent: 2 +- proto: SheetPlasteel + entities: + - uid: 14382 + components: + - type: Transform + pos: -24.48612,43.60266 + parent: 2 + - uid: 14383 + components: + - type: Transform + pos: 71.52,46.535103 + parent: 2 + - uid: 14384 + components: + - type: Transform + pos: 71.52,46.535103 + parent: 2 + - uid: 14386 + components: + - type: Transform + pos: -14.5,-1.5 + parent: 2 + - uid: 19783 + components: + - type: Transform + pos: 34.500034,-36.49268 + parent: 2 +- proto: SheetPlastic + entities: + - uid: 14387 + components: + - type: Transform + pos: -2.4642558,36.554058 + parent: 2 + - uid: 14388 + components: + - type: Transform + pos: -2.4642558,36.554058 + parent: 2 + - uid: 14389 + components: + - type: Transform + pos: -2.4642558,36.554058 + parent: 2 + - uid: 14390 + components: + - type: Transform + pos: -18.479893,70.5512 + parent: 2 + - uid: 14391 + components: + - type: Transform + pos: -18.479893,70.5512 + parent: 2 + - uid: 14392 + components: + - type: Transform + pos: 59.482616,22.555496 + parent: 2 + - uid: 14393 + components: + - type: Transform + pos: 46.523014,24.546581 + parent: 2 + - uid: 14394 + components: + - type: Transform + pos: 46.523014,24.546581 + parent: 2 + - uid: 14395 + components: + - type: Transform + pos: -14.5,-1.5 + parent: 2 + - uid: 14396 + components: + - type: Transform + pos: 0.5,12.5 + parent: 2 + - uid: 19785 + components: + - type: Transform + pos: 34.535934,-36.564365 + parent: 2 +- proto: SheetSteel + entities: + - uid: 7303 + components: + - type: Transform + parent: 7298 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 7304 + components: + - type: Transform + parent: 7298 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 7305 + components: + - type: Transform + parent: 7298 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 7306 + components: + - type: Transform + parent: 7298 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 7307 + components: + - type: Transform + parent: 7298 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 7308 + components: + - type: Transform + parent: 7298 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 14397 + components: + - type: Transform + pos: -2.4588013,36.554058 + parent: 2 + - uid: 14398 + components: + - type: Transform + pos: -2.4588013,36.554058 + parent: 2 + - uid: 14399 + components: + - type: Transform + pos: -24.500158,43.616688 + parent: 2 + - uid: 14400 + components: + - type: Transform + pos: -18.479893,70.5512 + parent: 2 + - uid: 14401 + components: + - type: Transform + pos: -18.479893,70.5512 + parent: 2 + - uid: 14402 + components: + - type: Transform + pos: 59.494576,22.567444 + parent: 2 + - uid: 14403 + components: + - type: Transform + pos: 46.523014,24.546581 + parent: 2 + - uid: 14404 + components: + - type: Transform + pos: 46.523014,24.546581 + parent: 2 + - uid: 14405 + components: + - type: Transform + pos: 75.574974,62.543827 + parent: 2 + - uid: 14406 + components: + - type: Transform + pos: 75.574974,62.543827 + parent: 2 + - uid: 14407 + components: + - type: Transform + pos: 71.52,46.56316 + parent: 2 + - uid: 14408 + components: + - type: Transform + pos: 71.52,46.56316 + parent: 2 + - uid: 14410 + components: + - type: Transform + pos: -14.5,-1.5 + parent: 2 + - uid: 14411 + components: + - type: Transform + pos: 0.5,12.5 + parent: 2 + - uid: 19784 + components: + - type: Transform + pos: 34.517982,-36.49268 + parent: 2 +- proto: SheetSteel1 + entities: + - uid: 14412 + components: + - type: Transform + pos: 38.58337,64.99815 + parent: 2 + - uid: 14413 + components: + - type: Transform + pos: 40.502243,66.01966 + parent: 2 + - uid: 14414 + components: + - type: Transform + pos: 40.717445,64.71142 + parent: 2 + - uid: 14415 + components: + - type: Transform + pos: 50.79256,50.235447 + parent: 2 + - uid: 14416 + components: + - type: Transform + pos: 50.308266,50.656284 + parent: 2 + - uid: 14417 + components: + - type: Transform + pos: 50.581997,54.570072 + parent: 2 + - uid: 14418 + components: + - type: Transform + pos: 29.45112,65.44453 + parent: 2 + - uid: 14419 + components: + - type: Transform + pos: 40.520176,66.396 + parent: 2 + - uid: 14420 + components: + - type: Transform + pos: 40.825043,65.82253 + parent: 2 + - uid: 14421 + components: + - type: Transform + pos: 38.83444,65.51787 + parent: 2 + - uid: 14422 + components: + - type: Transform + pos: 38.467144,65.58418 + parent: 2 +- proto: Shower + entities: + - uid: 7170 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 74.5,24.5 + parent: 2 + - type: Fixtures + fixtures: {} +- proto: ShuttersNormal + entities: + - uid: 14427 + components: + - type: Transform + pos: -10.5,64.5 + parent: 2 + - type: DeviceLinkSink + links: + - 14458 + - uid: 14428 + components: + - type: Transform + pos: -10.5,62.5 + parent: 2 + - type: DeviceLinkSink + links: + - 14458 + - uid: 14429 + components: + - type: Transform + pos: 34.5,43.5 + parent: 2 + - type: DeviceLinkSink + links: + - 14466 + - uid: 14430 + components: + - type: Transform + pos: 34.5,44.5 + parent: 2 + - type: DeviceLinkSink + links: + - 14466 + - uid: 14431 + components: + - type: Transform + pos: 34.5,45.5 + parent: 2 + - type: DeviceLinkSink + links: + - 14466 + - uid: 14432 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 69.5,43.5 + parent: 2 + - type: DeviceLinkSink + links: + - 14471 + - uid: 14433 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 72.5,43.5 + parent: 2 + - type: DeviceLinkSink + links: + - 14472 +- proto: ShuttersNormalOpen + entities: + - uid: 14434 + components: + - type: Transform + pos: 55.5,41.5 + parent: 2 + - type: DeviceLinkSink + links: + - 14463 + - uid: 14435 + components: + - type: Transform + pos: 56.5,41.5 + parent: 2 + - type: DeviceLinkSink + links: + - 14463 + - uid: 14436 + components: + - type: Transform + pos: 57.5,41.5 + parent: 2 + - type: DeviceLinkSink + links: + - 14463 + - uid: 14437 + components: + - type: Transform + pos: 59.5,39.5 + parent: 2 + - type: DeviceLinkSink + links: + - 14464 + - uid: 14438 + components: + - type: Transform + pos: 59.5,38.5 + parent: 2 + - type: DeviceLinkSink + links: + - 14464 + - uid: 14439 + components: + - type: Transform + pos: 59.5,37.5 + parent: 2 + - type: DeviceLinkSink + links: + - 14464 +- proto: ShuttersRadiation + entities: + - uid: 14442 + components: + - type: Transform + pos: -20.5,30.5 + parent: 2 + - type: DeviceLinkSink + links: + - 14473 + - uid: 14443 + components: + - type: Transform + pos: -19.5,30.5 + parent: 2 + - type: DeviceLinkSink + links: + - 14473 + - uid: 14444 + components: + - type: Transform + pos: -18.5,30.5 + parent: 2 + - type: DeviceLinkSink + links: + - 14473 + - uid: 14445 + components: + - type: Transform + pos: -20.5,38.5 + parent: 2 + - type: DeviceLinkSink + links: + - 14474 + - uid: 14446 + components: + - type: Transform + pos: -19.5,38.5 + parent: 2 + - type: DeviceLinkSink + links: + - 14474 + - uid: 14447 + components: + - type: Transform + pos: -18.5,38.5 + parent: 2 + - type: DeviceLinkSink + links: + - 14474 + - uid: 14448 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,35.5 + parent: 2 + - type: DeviceLinkSink + links: + - 14475 + - uid: 14449 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,34.5 + parent: 2 + - type: DeviceLinkSink + links: + - 14475 + - uid: 14450 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,33.5 + parent: 2 + - type: DeviceLinkSink + links: + - 14475 +- proto: ShuttersWindow + entities: + - uid: 14451 + components: + - type: Transform + pos: -13.5,64.5 + parent: 2 + - type: DeviceLinkSink + links: + - 14458 +- proto: ShuttleConsoleCircuitboard + entities: + - uid: 14452 + components: + - type: Transform + pos: -26.731066,43.39053 + parent: 2 +- proto: SignAi + entities: + - uid: 14453 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 36.5,2.5 + parent: 2 + - uid: 18898 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,30.5 + parent: 2 + - uid: 18899 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 40.5,30.5 + parent: 2 + - uid: 18900 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,32.5 + parent: 2 + - uid: 18901 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,32.5 + parent: 2 +- proto: SignalButton + entities: + - uid: 14456 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,2.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 810: + - Pressed: Toggle + 809: + - Pressed: Toggle + - uid: 14457 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,24.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 812: + - Pressed: Toggle + 813: + - Pressed: Toggle + 814: + - Pressed: Toggle + - uid: 14458 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,65.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 14451: + - Pressed: Toggle + 14427: + - Pressed: Toggle + 14428: + - Pressed: Toggle + - uid: 14459 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,3.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 811: + - Pressed: Toggle + 13781: + - Pressed: Off + - uid: 14460 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,2.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 808: + - Pressed: Toggle + 806: + - Pressed: Toggle + - uid: 14461 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 33.5,1.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 807: + - Pressed: Toggle + - uid: 14462 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,63.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 815: + - Pressed: Toggle + 816: + - Pressed: Toggle + - uid: 14463 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 58.5,42.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 14434: + - Pressed: Toggle + 14435: + - Pressed: Toggle + 14436: + - Pressed: Toggle + - uid: 14464 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 63.5,40.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 14439: + - Pressed: Toggle + 14438: + - Pressed: Toggle + 14437: + - Pressed: Toggle + - uid: 14465 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 39.5,50.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 12666: + - Pressed: Toggle + - uid: 14466 + components: + - type: Transform + pos: 35.5,46.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 14429: + - Pressed: Toggle + 14430: + - Pressed: Toggle + 14431: + - Pressed: Toggle + - uid: 14467 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,26.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 827: + - Pressed: Toggle + 826: + - Pressed: Toggle + 824: + - Pressed: Toggle + 825: + - Pressed: Toggle + - uid: 14468 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,45.5 + parent: 2 + - uid: 14469 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,45.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 828: + - Pressed: Toggle + - uid: 14470 + components: + - type: Transform + pos: 79.5,63.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 817: + - Pressed: Toggle + 818: + - Pressed: Toggle + 819: + - Pressed: Toggle + 820: + - Pressed: Toggle + - uid: 14471 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 69.5,44.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 14432: + - Pressed: Toggle + - uid: 14472 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 72.5,44.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 14433: + - Pressed: Toggle + - uid: 14473 + components: + - type: Transform + pos: -21.5,30.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 14442: + - Pressed: Toggle + 14443: + - Pressed: Toggle + 14444: + - Pressed: Toggle + - uid: 14474 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -21.5,38.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 14446: + - Pressed: Toggle + 14447: + - Pressed: Toggle + 14445: + - Pressed: Toggle + - uid: 14475 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,36.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 14450: + - Pressed: Toggle + 14449: + - Pressed: Toggle + 14448: + - Pressed: Toggle +- proto: SignalButtonExt3 + entities: + - uid: 14478 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,9.5 + parent: 2 +- proto: SignalTrigger + entities: + - uid: 14479 + components: + - type: Transform + pos: 41.447384,9.674284 + parent: 2 + - uid: 14480 + components: + - type: Transform + pos: 41.75225,9.602598 + parent: 2 + - uid: 14481 + components: + - type: Transform + pos: 41.465317,9.495071 + parent: 2 + - uid: 14482 + components: + - type: Transform + pos: 41.734318,9.45923 + parent: 2 +- proto: SignAnomaly + entities: + - uid: 14483 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,14.5 + parent: 2 + - uid: 18668 + components: + - type: Transform + pos: 38.5,14.5 + parent: 2 +- proto: SignAnomaly2 + entities: + - uid: 14484 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 48.5,12.5 + parent: 2 + - uid: 18665 + components: + - type: Transform + pos: 50.5,12.5 + parent: 2 +- proto: SignArmory + entities: + - uid: 14485 + components: + - type: Transform + pos: -18.5,59.5 + parent: 2 + - uid: 14486 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 38.5,63.5 + parent: 2 +- proto: SignAtmos + entities: + - uid: 15902 + components: + - type: Transform + pos: -6.5,21.5 + parent: 2 + - uid: 18647 + components: + - type: Transform + pos: -6.5,19.5 + parent: 2 +- proto: SignBar + entities: + - uid: 18907 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 61.5,36.5 + parent: 2 +- proto: SignBridge + entities: + - uid: 14487 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 73.5,36.5 + parent: 2 + - uid: 14488 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 73.5,32.5 + parent: 2 +- proto: SignCanisters + entities: + - uid: 18669 + components: + - type: Transform + pos: 37.5,17.5 + parent: 2 +- proto: SignCargo + entities: + - uid: 18649 + components: + - type: Transform + pos: 6.5,18.5 + parent: 2 + - uid: 18650 + components: + - type: Transform + pos: 12.5,18.5 + parent: 2 + - uid: 18651 + components: + - type: Transform + pos: 9.5,18.5 + parent: 2 +- proto: SignCargoDock + entities: + - uid: 14489 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,0.5 + parent: 2 + - uid: 18648 + components: + - type: Transform + pos: 0.5,2.5 + parent: 2 +- proto: SignChapel + entities: + - uid: 11530 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,50.5 + parent: 2 + - uid: 18762 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,54.5 + parent: 2 + - uid: 18767 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.5,54.5 + parent: 2 + - uid: 18768 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,58.5 + parent: 2 + - uid: 18769 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,58.5 + parent: 2 +- proto: SignChem + entities: + - uid: 18678 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,23.5 + parent: 2 + - uid: 18679 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,24.5 + parent: 2 + - uid: 18680 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,29.5 + parent: 2 + - uid: 18681 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,29.5 + parent: 2 +- proto: SignCloning + entities: + - uid: 18531 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,26.5 + parent: 2 + - uid: 18532 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,26.5 + parent: 2 + - uid: 18692 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,29.5 + parent: 2 +- proto: SignConference + entities: + - uid: 18846 + components: + - type: Transform + pos: 80.5,28.5 + parent: 2 + - uid: 18847 + components: + - type: Transform + pos: 82.5,28.5 + parent: 2 +- proto: SignDirectionalBar + entities: + - uid: 14490 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.457057,22.331598 + parent: 2 + - uid: 14491 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 57.564537,32.726562 + parent: 2 +- proto: SignDirectionalBridge + entities: + - uid: 14492 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.457057,22.52292 + parent: 2 + - uid: 14493 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 57.564537,32.55164 + parent: 2 + - uid: 14494 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 67.48477,32.84307 + parent: 2 +- proto: SignDirectionalBrig + entities: + - uid: 14495 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.51402026,18.637814 + parent: 2 + - uid: 14496 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.457057,22.741573 + parent: 2 +- proto: SignDirectionalChapel + entities: + - uid: 14497 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5135876,18.439032 + parent: 2 + - uid: 14498 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.465134,45.907642 + parent: 2 + - uid: 14499 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 57.564537,32.365784 + parent: 2 +- proto: SignDirectionalCryo + entities: + - uid: 14500 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 57.564537,32.179924 + parent: 2 +- proto: SignDirectionalDorms + entities: + - uid: 6527 + components: + - type: Transform + pos: 24.5,18.5 + parent: 2 + - uid: 18895 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 18.5,18.5 + parent: 2 + - uid: 18896 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,21.5 + parent: 2 +- proto: SignDirectionalEng + entities: + - uid: 14501 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 29.435198,22.689903 + parent: 2 + - uid: 14502 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.466514,22.140951 + parent: 2 + - uid: 14503 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.51146495,18.835775 + parent: 2 + - uid: 14504 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5333846,35.45002 + parent: 2 + - uid: 14505 + components: + - type: Transform + pos: 3.5816317,46.86425 + parent: 2 +- proto: SignDirectionalEvac + entities: + - uid: 14506 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.435198,22.500294 + parent: 2 + - uid: 14507 + components: + - type: Transform + pos: 30.47425,45.13257 + parent: 2 + - uid: 14508 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.529842,32.866547 + parent: 2 + - uid: 14509 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.438016,22.933979 + parent: 2 + - uid: 14510 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.2359343,18.556217 + parent: 2 + - uid: 14511 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.3095527,46.878128 + parent: 2 + - uid: 14512 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 57.551632,32.928596 + parent: 2 + - uid: 14513 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 63.5,32.5 + parent: 2 + - uid: 14514 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 63.5,12.5 + parent: 2 +- proto: SignDirectionalFood + entities: + - uid: 14515 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.540035,32.274406 + parent: 2 + - uid: 18904 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 52.5,41.5 + parent: 2 + - uid: 18905 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 62.5,36.5 + parent: 2 + - uid: 18906 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 48.5,32.5 + parent: 2 +- proto: SignDirectionalHop + entities: + - uid: 14516 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.535477,32.47484 + parent: 2 +- proto: SignDirectionalHydro + entities: + - uid: 14517 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.530006,32.672523 + parent: 2 + - uid: 14518 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 57.5536,31.778934 + parent: 2 +- proto: SignDirectionalLibrary + entities: + - uid: 14519 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.471582,45.722916 + parent: 2 +- proto: SignDirectionalLogistics + entities: + - uid: 14520 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5143475,18.266033 + parent: 2 +- proto: SignDirectionalMed + entities: + - uid: 14521 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5874171,46.685577 + parent: 2 +- proto: SignDirectionalSalvage + entities: + - uid: 18654 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,12.5 + parent: 2 +- proto: SignDirectionalSci + entities: + - uid: 14522 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.540035,32.073975 + parent: 2 + - uid: 14523 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.435198,22.322355 + parent: 2 + - uid: 14524 + components: + - type: Transform + pos: 57.5536,31.983139 + parent: 2 +- proto: SignDirectionalSec + entities: + - uid: 14525 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5994487,46.4866 + parent: 2 + - uid: 14526 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.471582,45.522484 + parent: 2 +- proto: SignDirectionalSupply + entities: + - uid: 14527 + components: + - type: Transform + pos: 3.6103878,46.27888 + parent: 2 + - uid: 14528 + components: + - type: Transform + pos: 30.47067,45.322826 + parent: 2 +- proto: SignDisposalSpace + entities: + - uid: 18675 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,6.5 + parent: 2 + - uid: 18676 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,1.5 + parent: 2 + - uid: 18677 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,6.5 + parent: 2 +- proto: SignDrones + entities: + - uid: 14529 + components: + - type: Transform + pos: 36.5,51.5 + parent: 2 +- proto: SignElectricalMed + entities: + - uid: 14532 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,75.5 + parent: 2 + - uid: 14533 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,73.5 + parent: 2 +- proto: SignEngineering + entities: + - uid: 18657 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,36.5 + parent: 2 + - uid: 18658 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,34.5 + parent: 2 +- proto: SignEscapePods + entities: + - uid: 14535 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 13.5,73.5 + parent: 2 + - uid: 15734 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,6.5 + parent: 2 + - uid: 18910 + components: + - type: Transform + pos: 16.5,9.5 + parent: 2 + - uid: 18911 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,5.5 + parent: 2 + - uid: 18912 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,6.5 + parent: 2 + - uid: 18913 + components: + - type: Transform + pos: 18.5,3.5 + parent: 2 + - uid: 18914 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,56.5 + parent: 2 + - uid: 18915 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -39.5,58.5 + parent: 2 + - uid: 18917 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,76.5 + parent: 2 + - uid: 18918 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 73.5,19.5 + parent: 2 + - uid: 18919 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 81.5,18.5 + parent: 2 + - uid: 18920 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 77.5,17.5 + parent: 2 + - uid: 18937 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 57.5,59.5 + parent: 2 + - uid: 18938 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 55.5,55.5 + parent: 2 + - uid: 18939 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 46.5,57.5 + parent: 2 + - uid: 18940 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 58.5,47.5 + parent: 2 + - uid: 18941 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 38.5,58.5 + parent: 2 + - uid: 18942 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 63.5,48.5 + parent: 2 +- proto: SignEVA + entities: + - uid: 18663 + components: + - type: Transform + pos: 68.5,47.5 + parent: 2 + - uid: 18664 + components: + - type: Transform + pos: 68.5,41.5 + parent: 2 +- proto: SignGravity + entities: + - uid: 12624 + components: + - type: Transform + pos: -17.5,42.5 + parent: 2 + - uid: 12625 + components: + - type: Transform + pos: -22.5,47.5 + parent: 2 + - uid: 19050 + components: + - type: Transform + pos: -19.5,42.5 + parent: 2 + - uid: 19053 + components: + - type: Transform + pos: -18.5,47.5 + parent: 2 +- proto: SignHydro2 + entities: + - uid: 18897 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 46.5,36.5 + parent: 2 + - uid: 18902 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 44.5,36.5 + parent: 2 + - uid: 18903 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 49.5,40.5 + parent: 2 +- proto: SignJanitor + entities: + - uid: 14536 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,50.5 + parent: 2 +- proto: SignLibrary + entities: + - uid: 18763 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.5,51.5 + parent: 2 + - uid: 18764 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 22.5,50.5 + parent: 2 + - uid: 18765 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,50.5 + parent: 2 + - uid: 18766 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 18.5,57.5 + parent: 2 +- proto: SignMail + entities: + - uid: 14537 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,5.5 + parent: 2 + - uid: 14538 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,9.5 + parent: 2 +- proto: SignMedical + entities: + - uid: 14539 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 29.5,64.5 + parent: 2 + - uid: 18682 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,31.5 + parent: 2 + - uid: 18683 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,37.5 + parent: 2 + - uid: 18684 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,31.5 + parent: 2 + - uid: 18685 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 20.5,34.5 + parent: 2 + - uid: 18686 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 20.5,31.5 + parent: 2 + - uid: 18687 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,33.5 + parent: 2 + - uid: 18688 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,36.5 + parent: 2 + - uid: 18689 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,36.5 + parent: 2 + - uid: 18690 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,31.5 + parent: 2 + - uid: 18691 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,34.5 + parent: 2 +- proto: SignMorgue + entities: + - uid: 18693 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,45.5 + parent: 2 + - uid: 18694 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 16.5,40.5 + parent: 2 +- proto: SignNosmoking + entities: + - uid: 18695 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 28.5,37.5 + parent: 2 + - uid: 18696 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 28.5,30.5 + parent: 2 + - uid: 18697 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,36.5 + parent: 2 + - uid: 18698 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 20.5,29.5 + parent: 2 + - uid: 18699 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,30.5 + parent: 2 + - uid: 18700 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,30.5 + parent: 2 + - uid: 18701 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,28.5 + parent: 2 + - uid: 18702 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,23.5 + parent: 2 + - uid: 18703 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,23.5 + parent: 2 + - uid: 18704 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,28.5 + parent: 2 + - uid: 18705 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,26.5 + parent: 2 + - uid: 18706 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,37.5 + parent: 2 + - uid: 18707 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,41.5 + parent: 2 + - uid: 18708 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,37.5 + parent: 2 + - uid: 18709 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,42.5 + parent: 2 + - uid: 18710 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,43.5 + parent: 2 + - uid: 18711 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 16.5,46.5 + parent: 2 + - uid: 18712 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 18.5,41.5 + parent: 2 + - uid: 18713 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,46.5 + parent: 2 + - uid: 18714 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,26.5 + parent: 2 + - uid: 18715 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,18.5 + parent: 2 + - uid: 18716 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,22.5 + parent: 2 + - uid: 18717 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,21.5 + parent: 2 + - uid: 18718 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,17.5 + parent: 2 + - uid: 18719 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,17.5 + parent: 2 +- proto: SignPlaque + entities: + - uid: 14540 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 28.5,55.5 + parent: 2 +- proto: SignPrison + entities: + - uid: 14541 + components: + - type: Transform + pos: -33.5,59.5 + parent: 2 + - uid: 14542 + components: + - type: Transform + pos: -27.5,59.5 + parent: 2 +- proto: SignRND + entities: + - uid: 14543 + components: + - type: Transform + pos: 51.5,26.5 + parent: 2 + - uid: 18667 + components: + - type: Transform + pos: 51.5,24.5 + parent: 2 +- proto: SignRobo + entities: + - uid: 14544 + components: + - type: Transform + pos: 56.5,23.5 + parent: 2 +- proto: SignSalvage + entities: + - uid: 18652 + components: + - type: Transform + pos: -9.5,8.5 + parent: 2 + - uid: 18653 + components: + - type: Transform + pos: -12.5,10.5 + parent: 2 +- proto: SignScience + entities: + - uid: 18666 + components: + - type: Transform + pos: 53.5,32.5 + parent: 2 +- proto: SignSec + entities: + - uid: 18655 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,12.5 + parent: 2 + - uid: 18656 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,12.5 + parent: 2 + - uid: 18659 + components: + - type: Transform + pos: -13.5,50.5 + parent: 2 + - uid: 18661 + components: + - type: Transform + pos: -16.5,50.5 + parent: 2 + - uid: 18662 + components: + - type: Transform + pos: -6.5,50.5 + parent: 2 +- proto: SignShipDock + entities: + - uid: 18839 + components: + - type: Transform + pos: 63.5,54.5 + parent: 2 + - uid: 18840 + components: + - type: Transform + pos: 67.5,54.5 + parent: 2 + - uid: 18841 + components: + - type: Transform + pos: 63.5,65.5 + parent: 2 + - uid: 18842 + components: + - type: Transform + pos: 67.5,65.5 + parent: 2 + - uid: 18843 + components: + - type: Transform + pos: 71.5,65.5 + parent: 2 + - uid: 18844 + components: + - type: Transform + pos: 59.5,65.5 + parent: 2 + - uid: 18845 + components: + - type: Transform + pos: 65.5,63.5 + parent: 2 + - uid: 18922 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 75.5,-0.5 + parent: 2 + - uid: 18923 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 75.5,8.5 + parent: 2 + - uid: 18924 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 77.5,8.5 + parent: 2 + - uid: 18925 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 77.5,-0.5 + parent: 2 +- proto: SignSmoking + entities: + - uid: 18720 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,24.5 + parent: 2 + - uid: 18721 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,16.5 + parent: 2 + - uid: 18722 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,19.5 + parent: 2 + - uid: 18723 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,17.5 + parent: 2 + - uid: 18724 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,6.5 + parent: 2 + - uid: 18725 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,10.5 + parent: 2 + - uid: 18726 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,18.5 + parent: 2 + - uid: 18727 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,22.5 + parent: 2 + - uid: 18728 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,29.5 + parent: 2 + - uid: 18729 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,31.5 + parent: 2 + - uid: 18730 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,26.5 + parent: 2 + - uid: 18731 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,26.5 + parent: 2 + - uid: 18732 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,42.5 + parent: 2 + - uid: 18733 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,34.5 + parent: 2 + - uid: 18734 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,38.5 + parent: 2 +- proto: SignSomethingOld + entities: + - uid: 14545 + components: + - type: Transform + pos: 53.5,5.5 + parent: 2 +- proto: SignSomethingOld2 + entities: + - uid: 14546 + components: + - type: Transform + pos: 48.5,5.5 + parent: 2 +- proto: SignSpace + entities: + - uid: 18908 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 58.5,11.5 + parent: 2 + - uid: 18909 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 41.5,3.5 + parent: 2 + - uid: 18916 + components: + - type: Transform + pos: -38.5,55.5 + parent: 2 + - uid: 18921 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 72.5,-2.5 + parent: 2 +- proto: SignTelecomms + entities: + - uid: 14547 + components: + - type: Transform + pos: 34.5,51.5 + parent: 2 + - uid: 14548 + components: + - type: Transform + pos: 30.5,2.5 + parent: 2 +- proto: SignVirology + entities: + - uid: 18774 + components: + - type: Transform + pos: 22.5,42.5 + parent: 2 + - uid: 18775 + components: + - type: Transform + pos: 24.5,41.5 + parent: 2 + - uid: 18776 + components: + - type: Transform + pos: 25.5,43.5 + parent: 2 + - uid: 18777 + components: + - type: Transform + pos: 25.5,45.5 + parent: 2 +- proto: Sink + entities: + - uid: 14550 + components: + - type: Transform + pos: 50.5,31.5 + parent: 2 + - uid: 14551 + components: + - type: Transform + pos: 52.5,31.5 + parent: 2 +- proto: SinkWide + entities: + - uid: 14553 + components: + - type: Transform + pos: 60.5,40.5 + parent: 2 + - uid: 14554 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,61.5 + parent: 2 + - uid: 14555 + components: + - type: Transform + pos: 1.5,68.5 + parent: 2 + - uid: 14556 + components: + - type: Transform + pos: 2.5,68.5 + parent: 2 + - uid: 14557 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 57.5,45.5 + parent: 2 + - uid: 14558 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.5,33.5 + parent: 2 + - uid: 14559 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 26.5,43.5 + parent: 2 + - uid: 14862 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 74.5,25.5 + parent: 2 +- proto: SmartFridge + entities: + - uid: 14560 + components: + - type: Transform + pos: 51.5,44.5 + parent: 2 + - uid: 14561 + components: + - type: Transform + pos: 14.5,23.5 + parent: 2 + - uid: 14562 + components: + - type: Transform + pos: 13.5,29.5 + parent: 2 + - uid: 14563 + components: + - type: Transform + pos: 14.5,36.5 + parent: 2 + - uid: 14564 + components: + - type: Transform + pos: 29.5,44.5 + parent: 2 +- proto: SMESBasic + entities: + - uid: 14565 + components: + - type: Transform + pos: -14.5,45.5 + parent: 2 + - uid: 14566 + components: + - type: Transform + pos: -13.5,45.5 + parent: 2 + - uid: 14567 + components: + - type: Transform + pos: -12.5,45.5 + parent: 2 + - uid: 14568 + components: + - type: Transform + pos: 31.5,63.5 + parent: 2 + - uid: 14569 + components: + - type: Transform + pos: -20.5,8.5 + parent: 2 + - uid: 14570 + components: + - type: Transform + pos: 41.5,0.5 + parent: 2 + - uid: 14571 + components: + - type: Transform + pos: 31.5,-0.5 + parent: 2 + - uid: 17224 + components: + - type: Transform + pos: 36.5,-32.5 + parent: 2 +- proto: SMESMachineCircuitboard + entities: + - uid: 14574 + components: + - type: Transform + pos: -26.888287,43.704742 + parent: 2 + - uid: 14575 + components: + - type: Transform + pos: -26.888287,43.704742 + parent: 2 +- proto: SoapNT + entities: + - uid: 14576 + components: + - type: Transform + pos: 74.49696,24.50985 + parent: 2 +- proto: soda_dispenser + entities: + - uid: 14577 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 62.5,38.5 + parent: 2 + - uid: 14578 + components: + - type: Transform + pos: 58.5,26.5 + parent: 2 +- proto: SolarControlComputerCircuitboard + entities: + - uid: 14579 + components: + - type: Transform + pos: -8.388496,44.46719 + parent: 2 +- proto: SolarPanel + entities: + - uid: 13416 + components: + - type: Transform + pos: 25.5,-10.5 + parent: 2 + - uid: 13720 + components: + - type: Transform + pos: 24.5,-8.5 + parent: 2 + - uid: 13721 + components: + - type: Transform + pos: 26.5,-8.5 + parent: 2 + - uid: 14036 + components: + - type: Transform + pos: 25.5,-8.5 + parent: 2 + - uid: 14580 + components: + - type: Transform + pos: -29.5,-10.5 + parent: 2 + - uid: 14581 + components: + - type: Transform + pos: -28.5,-10.5 + parent: 2 + - uid: 14582 + components: + - type: Transform + pos: -27.5,-10.5 + parent: 2 + - uid: 14583 + components: + - type: Transform + pos: -26.5,-10.5 + parent: 2 + - uid: 14584 + components: + - type: Transform + pos: -25.5,-10.5 + parent: 2 + - uid: 14585 + components: + - type: Transform + pos: 45.5,-20.5 + parent: 2 + - uid: 14586 + components: + - type: Transform + pos: 46.5,-20.5 + parent: 2 + - uid: 14587 + components: + - type: Transform + pos: 47.5,-20.5 + parent: 2 + - uid: 14588 + components: + - type: Transform + pos: 48.5,-20.5 + parent: 2 + - uid: 14589 + components: + - type: Transform + pos: 49.5,-20.5 + parent: 2 + - uid: 14590 + components: + - type: Transform + pos: 49.5,-22.5 + parent: 2 + - uid: 14591 + components: + - type: Transform + pos: 48.5,-22.5 + parent: 2 + - uid: 14592 + components: + - type: Transform + pos: 47.5,-22.5 + parent: 2 + - uid: 14593 + components: + - type: Transform + pos: 46.5,-22.5 + parent: 2 + - uid: 14594 + components: + - type: Transform + pos: 45.5,-22.5 + parent: 2 + - uid: 14595 + components: + - type: Transform + pos: 53.5,-22.5 + parent: 2 + - uid: 14596 + components: + - type: Transform + pos: 54.5,-22.5 + parent: 2 + - uid: 14597 + components: + - type: Transform + pos: 55.5,-22.5 + parent: 2 + - uid: 14598 + components: + - type: Transform + pos: 56.5,-22.5 + parent: 2 + - uid: 14599 + components: + - type: Transform + pos: 57.5,-22.5 + parent: 2 + - uid: 14600 + components: + - type: Transform + pos: 57.5,-20.5 + parent: 2 + - uid: 14601 + components: + - type: Transform + pos: 56.5,-20.5 + parent: 2 + - uid: 14602 + components: + - type: Transform + pos: 55.5,-20.5 + parent: 2 + - uid: 14603 + components: + - type: Transform + pos: 54.5,-20.5 + parent: 2 + - uid: 14604 + components: + - type: Transform + pos: 53.5,-20.5 + parent: 2 + - uid: 14605 + components: + - type: Transform + pos: 57.5,-18.5 + parent: 2 + - uid: 14606 + components: + - type: Transform + pos: 56.5,-18.5 + parent: 2 + - uid: 14607 + components: + - type: Transform + pos: 55.5,-18.5 + parent: 2 + - uid: 14608 + components: + - type: Transform + pos: 54.5,-18.5 + parent: 2 + - uid: 14609 + components: + - type: Transform + pos: 53.5,-18.5 + parent: 2 + - uid: 14610 + components: + - type: Transform + pos: 57.5,-14.5 + parent: 2 + - uid: 14611 + components: + - type: Transform + pos: 57.5,-16.5 + parent: 2 + - uid: 14612 + components: + - type: Transform + pos: 56.5,-16.5 + parent: 2 + - uid: 14613 + components: + - type: Transform + pos: 55.5,-16.5 + parent: 2 + - uid: 14614 + components: + - type: Transform + pos: 54.5,-16.5 + parent: 2 + - uid: 14615 + components: + - type: Transform + pos: 53.5,-16.5 + parent: 2 + - uid: 14616 + components: + - type: Transform + pos: 56.5,-14.5 + parent: 2 + - uid: 14617 + components: + - type: Transform + pos: 55.5,-14.5 + parent: 2 + - uid: 14618 + components: + - type: Transform + pos: 54.5,-14.5 + parent: 2 + - uid: 14619 + components: + - type: Transform + pos: 53.5,-14.5 + parent: 2 + - uid: 14620 + components: + - type: Transform + pos: 57.5,-12.5 + parent: 2 + - uid: 14621 + components: + - type: Transform + pos: 56.5,-12.5 + parent: 2 + - uid: 14622 + components: + - type: Transform + pos: 55.5,-12.5 + parent: 2 + - uid: 14623 + components: + - type: Transform + pos: 54.5,-12.5 + parent: 2 + - uid: 14624 + components: + - type: Transform + pos: 53.5,-12.5 + parent: 2 + - uid: 14625 + components: + - type: Transform + pos: 49.5,-12.5 + parent: 2 + - uid: 14626 + components: + - type: Transform + pos: 48.5,-12.5 + parent: 2 + - uid: 14627 + components: + - type: Transform + pos: 47.5,-12.5 + parent: 2 + - uid: 14628 + components: + - type: Transform + pos: 46.5,-12.5 + parent: 2 + - uid: 14629 + components: + - type: Transform + pos: 45.5,-12.5 + parent: 2 + - uid: 14630 + components: + - type: Transform + pos: 45.5,-14.5 + parent: 2 + - uid: 14631 + components: + - type: Transform + pos: 46.5,-14.5 + parent: 2 + - uid: 14632 + components: + - type: Transform + pos: 47.5,-14.5 + parent: 2 + - uid: 14633 + components: + - type: Transform + pos: 48.5,-14.5 + parent: 2 + - uid: 14634 + components: + - type: Transform + pos: 49.5,-14.5 + parent: 2 + - uid: 14635 + components: + - type: Transform + pos: 49.5,-16.5 + parent: 2 + - uid: 14636 + components: + - type: Transform + pos: 48.5,-16.5 + parent: 2 + - uid: 14637 + components: + - type: Transform + pos: 47.5,-16.5 + parent: 2 + - uid: 14638 + components: + - type: Transform + pos: 46.5,-16.5 + parent: 2 + - uid: 14639 + components: + - type: Transform + pos: 45.5,-16.5 + parent: 2 + - uid: 14640 + components: + - type: Transform + pos: 45.5,-18.5 + parent: 2 + - uid: 14641 + components: + - type: Transform + pos: 46.5,-18.5 + parent: 2 + - uid: 14642 + components: + - type: Transform + pos: 47.5,-18.5 + parent: 2 + - uid: 14643 + components: + - type: Transform + pos: 48.5,-18.5 + parent: 2 + - uid: 14644 + components: + - type: Transform + pos: 49.5,-18.5 + parent: 2 + - uid: 14645 + components: + - type: Transform + pos: -28.5,-2.5 + parent: 2 + - uid: 14646 + components: + - type: Transform + pos: -27.5,-2.5 + parent: 2 + - uid: 14647 + components: + - type: Transform + pos: -26.5,-2.5 + parent: 2 + - uid: 14648 + components: + - type: Transform + pos: -25.5,-2.5 + parent: 2 + - uid: 14649 + components: + - type: Transform + pos: -24.5,-2.5 + parent: 2 + - uid: 14650 + components: + - type: Transform + pos: -24.5,-4.5 + parent: 2 + - uid: 14651 + components: + - type: Transform + pos: -25.5,-4.5 + parent: 2 + - uid: 14652 + components: + - type: Transform + pos: -26.5,-4.5 + parent: 2 + - uid: 14653 + components: + - type: Transform + pos: -27.5,-4.5 + parent: 2 + - uid: 14654 + components: + - type: Transform + pos: -28.5,-4.5 + parent: 2 + - uid: 14655 + components: + - type: Transform + pos: -28.5,-6.5 + parent: 2 + - uid: 14656 + components: + - type: Transform + pos: -27.5,-6.5 + parent: 2 + - uid: 14657 + components: + - type: Transform + pos: -26.5,-6.5 + parent: 2 + - uid: 14658 + components: + - type: Transform + pos: -25.5,-6.5 + parent: 2 + - uid: 14659 + components: + - type: Transform + pos: -24.5,-6.5 + parent: 2 + - uid: 14660 + components: + - type: Transform + pos: -24.5,-8.5 + parent: 2 + - uid: 14661 + components: + - type: Transform + pos: -25.5,-8.5 + parent: 2 + - uid: 14662 + components: + - type: Transform + pos: -26.5,-8.5 + parent: 2 + - uid: 14663 + components: + - type: Transform + pos: -27.5,-8.5 + parent: 2 + - uid: 14664 + components: + - type: Transform + pos: -28.5,-8.5 + parent: 2 + - uid: 14665 + components: + - type: Transform + pos: -29.5,-12.5 + parent: 2 + - uid: 14666 + components: + - type: Transform + pos: -28.5,-12.5 + parent: 2 + - uid: 14667 + components: + - type: Transform + pos: -27.5,-12.5 + parent: 2 + - uid: 14668 + components: + - type: Transform + pos: -26.5,-12.5 + parent: 2 + - uid: 14669 + components: + - type: Transform + pos: -25.5,-12.5 + parent: 2 + - uid: 14670 + components: + - type: Transform + pos: -30.5,-16.5 + parent: 2 + - uid: 14671 + components: + - type: Transform + pos: -29.5,-16.5 + parent: 2 + - uid: 14672 + components: + - type: Transform + pos: -28.5,-16.5 + parent: 2 + - uid: 14673 + components: + - type: Transform + pos: -27.5,-16.5 + parent: 2 + - uid: 14674 + components: + - type: Transform + pos: -26.5,-16.5 + parent: 2 + - uid: 14675 + components: + - type: Transform + pos: 35.5,79.5 + parent: 2 + - uid: 14676 + components: + - type: Transform + pos: 36.5,79.5 + parent: 2 + - uid: 14677 + components: + - type: Transform + pos: 37.5,79.5 + parent: 2 + - uid: 14678 + components: + - type: Transform + pos: 38.5,79.5 + parent: 2 + - uid: 14679 + components: + - type: Transform + pos: 39.5,79.5 + parent: 2 + - uid: 14680 + components: + - type: Transform + pos: 39.5,77.5 + parent: 2 + - uid: 14681 + components: + - type: Transform + pos: 38.5,77.5 + parent: 2 + - uid: 14682 + components: + - type: Transform + pos: 37.5,77.5 + parent: 2 + - uid: 14683 + components: + - type: Transform + pos: 36.5,77.5 + parent: 2 + - uid: 14684 + components: + - type: Transform + pos: 35.5,77.5 + parent: 2 + - uid: 14685 + components: + - type: Transform + pos: 39.5,75.5 + parent: 2 + - uid: 14686 + components: + - type: Transform + pos: 38.5,75.5 + parent: 2 + - uid: 14687 + components: + - type: Transform + pos: 37.5,75.5 + parent: 2 + - uid: 14688 + components: + - type: Transform + pos: 36.5,75.5 + parent: 2 + - uid: 14689 + components: + - type: Transform + pos: 35.5,75.5 + parent: 2 + - uid: 14690 + components: + - type: Transform + pos: 39.5,73.5 + parent: 2 + - uid: 14691 + components: + - type: Transform + pos: 38.5,73.5 + parent: 2 + - uid: 14692 + components: + - type: Transform + pos: 37.5,73.5 + parent: 2 + - uid: 14693 + components: + - type: Transform + pos: 36.5,73.5 + parent: 2 + - uid: 14694 + components: + - type: Transform + pos: 35.5,73.5 + parent: 2 + - uid: 14695 + components: + - type: Transform + pos: 39.5,71.5 + parent: 2 + - uid: 14696 + components: + - type: Transform + pos: 38.5,71.5 + parent: 2 + - uid: 14697 + components: + - type: Transform + pos: 37.5,71.5 + parent: 2 + - uid: 14698 + components: + - type: Transform + pos: 36.5,71.5 + parent: 2 + - uid: 14699 + components: + - type: Transform + pos: 35.5,71.5 + parent: 2 + - uid: 14700 + components: + - type: Transform + pos: 39.5,69.5 + parent: 2 + - uid: 14701 + components: + - type: Transform + pos: 38.5,69.5 + parent: 2 + - uid: 14702 + components: + - type: Transform + pos: 37.5,69.5 + parent: 2 + - uid: 14703 + components: + - type: Transform + pos: 36.5,69.5 + parent: 2 + - uid: 14704 + components: + - type: Transform + pos: 35.5,69.5 + parent: 2 + - uid: 14705 + components: + - type: Transform + pos: 31.5,69.5 + parent: 2 + - uid: 14706 + components: + - type: Transform + pos: 30.5,69.5 + parent: 2 + - uid: 14707 + components: + - type: Transform + pos: 29.5,69.5 + parent: 2 + - uid: 14708 + components: + - type: Transform + pos: 28.5,69.5 + parent: 2 + - uid: 14709 + components: + - type: Transform + pos: 27.5,69.5 + parent: 2 + - uid: 14710 + components: + - type: Transform + pos: 27.5,71.5 + parent: 2 + - uid: 14711 + components: + - type: Transform + pos: 28.5,71.5 + parent: 2 + - uid: 14712 + components: + - type: Transform + pos: 29.5,71.5 + parent: 2 + - uid: 14713 + components: + - type: Transform + pos: 30.5,71.5 + parent: 2 + - uid: 14714 + components: + - type: Transform + pos: 31.5,71.5 + parent: 2 + - uid: 14715 + components: + - type: Transform + pos: 31.5,73.5 + parent: 2 + - uid: 14716 + components: + - type: Transform + pos: 30.5,73.5 + parent: 2 + - uid: 14717 + components: + - type: Transform + pos: 29.5,73.5 + parent: 2 + - uid: 14718 + components: + - type: Transform + pos: 28.5,73.5 + parent: 2 + - uid: 14719 + components: + - type: Transform + pos: 27.5,73.5 + parent: 2 + - uid: 14720 + components: + - type: Transform + pos: 27.5,75.5 + parent: 2 + - uid: 14721 + components: + - type: Transform + pos: 28.5,75.5 + parent: 2 + - uid: 14722 + components: + - type: Transform + pos: 29.5,75.5 + parent: 2 + - uid: 14723 + components: + - type: Transform + pos: 30.5,75.5 + parent: 2 + - uid: 14724 + components: + - type: Transform + pos: 31.5,75.5 + parent: 2 + - uid: 14725 + components: + - type: Transform + pos: 31.5,77.5 + parent: 2 + - uid: 14726 + components: + - type: Transform + pos: 30.5,77.5 + parent: 2 + - uid: 14727 + components: + - type: Transform + pos: 29.5,77.5 + parent: 2 + - uid: 14728 + components: + - type: Transform + pos: 28.5,77.5 + parent: 2 + - uid: 14729 + components: + - type: Transform + pos: 27.5,77.5 + parent: 2 + - uid: 14730 + components: + - type: Transform + pos: 27.5,79.5 + parent: 2 + - uid: 14731 + components: + - type: Transform + pos: 28.5,79.5 + parent: 2 + - uid: 14732 + components: + - type: Transform + pos: 29.5,79.5 + parent: 2 + - uid: 14733 + components: + - type: Transform + pos: 30.5,79.5 + parent: 2 + - uid: 14734 + components: + - type: Transform + pos: 31.5,79.5 + parent: 2 + - uid: 14735 + components: + - type: Transform + pos: -30.5,-14.5 + parent: 2 + - uid: 14736 + components: + - type: Transform + pos: -29.5,-14.5 + parent: 2 + - uid: 14737 + components: + - type: Transform + pos: -28.5,-14.5 + parent: 2 + - uid: 14738 + components: + - type: Transform + pos: -27.5,-14.5 + parent: 2 + - uid: 14739 + components: + - type: Transform + pos: -26.5,-14.5 + parent: 2 + - uid: 14981 + components: + - type: Transform + pos: 24.5,-10.5 + parent: 2 + - uid: 14982 + components: + - type: Transform + pos: 27.5,-8.5 + parent: 2 + - uid: 14983 + components: + - type: Transform + pos: 28.5,-8.5 + parent: 2 + - uid: 17016 + components: + - type: Transform + pos: 36.5,-10.5 + parent: 2 + - uid: 17097 + components: + - type: Transform + pos: 32.5,-10.5 + parent: 2 + - uid: 17098 + components: + - type: Transform + pos: 34.5,-10.5 + parent: 2 + - uid: 17099 + components: + - type: Transform + pos: 32.5,-8.5 + parent: 2 + - uid: 17100 + components: + - type: Transform + pos: 27.5,-10.5 + parent: 2 + - uid: 17101 + components: + - type: Transform + pos: 33.5,-8.5 + parent: 2 + - uid: 17102 + components: + - type: Transform + pos: 34.5,-8.5 + parent: 2 + - uid: 17103 + components: + - type: Transform + pos: 35.5,-10.5 + parent: 2 + - uid: 17106 + components: + - type: Transform + pos: 33.5,-10.5 + parent: 2 + - uid: 17107 + components: + - type: Transform + pos: 28.5,-10.5 + parent: 2 + - uid: 17108 + components: + - type: Transform + pos: 26.5,-10.5 + parent: 2 + - uid: 17109 + components: + - type: Transform + pos: 35.5,-8.5 + parent: 2 + - uid: 17110 + components: + - type: Transform + pos: 36.5,-8.5 + parent: 2 +- proto: SolarTracker + entities: + - uid: 14740 + components: + - type: Transform + pos: -23.5,-18.5 + parent: 2 + - uid: 14741 + components: + - type: Transform + pos: 51.5,-24.5 + parent: 2 + - uid: 14742 + components: + - type: Transform + pos: 33.5,81.5 + parent: 2 + - uid: 14930 + components: + - type: Transform + pos: 30.5,-6.5 + parent: 2 +- proto: SophicScribeSpawner + entities: + - uid: 12937 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,52.5 + parent: 2 +- proto: SpaceCash100 + entities: + - uid: 14744 + components: + - type: Transform + pos: 59.519974,44.266804 + parent: 2 + - uid: 20377 + components: + - type: Transform + pos: 59.53388,44.27 + parent: 2 + - uid: 20378 + components: + - type: Transform + pos: 59.53388,44.27 + parent: 2 + - uid: 20379 + components: + - type: Transform + pos: 59.53388,44.27 + parent: 2 + - uid: 20380 + components: + - type: Transform + pos: 59.53388,44.27 + parent: 2 + - uid: 20381 + components: + - type: Transform + pos: 59.53388,44.27 + parent: 2 + - uid: 20382 + components: + - type: Transform + pos: 59.53388,44.27 + parent: 2 + - uid: 20383 + components: + - type: Transform + pos: 59.53388,44.27 + parent: 2 +- proto: SpaceHeaterAnchored + entities: + - uid: 18441 + components: + - type: Transform + pos: 34.5,-35.5 + parent: 2 + - uid: 18442 + components: + - type: Transform + pos: 34.5,-34.5 + parent: 2 +- proto: SpareIdCabinetFilled + entities: + - uid: 3237 + components: + - type: Transform + pos: 83.5,27.5 + parent: 2 +- proto: SpawnMechRipley + entities: + - uid: 14745 + components: + - type: Transform + pos: -17.5,0.5 + parent: 2 +- proto: SpawnMobAdultSlimesBlue + entities: + - uid: 14746 + components: + - type: Transform + pos: 51.5,-0.5 + parent: 2 + - uid: 14747 + components: + - type: Transform + pos: 56.5,-2.5 + parent: 2 +- proto: SpawnMobAdultSlimesGreen + entities: + - uid: 14748 + components: + - type: Transform + pos: 46.5,3.5 + parent: 2 +- proto: SpawnMobAdultSlimesYellow + entities: + - uid: 14749 + components: + - type: Transform + pos: 46.5,-2.5 + parent: 2 +- proto: SpawnMobAlexander + entities: + - uid: 14750 + components: + - type: Transform + pos: 53.5,43.5 + parent: 2 +- proto: SpawnMobArcticFoxSiobhan + entities: + - uid: 19367 + components: + - type: Transform + pos: 0.5,15.5 + parent: 2 +- proto: SpawnMobButterfly + entities: + - uid: 14751 + components: + - type: Transform + pos: 8.5,72.5 + parent: 2 + - uid: 14752 + components: + - type: Transform + pos: 9.5,73.5 + parent: 2 + - uid: 14753 + components: + - type: Transform + pos: 6.5,77.5 + parent: 2 +- proto: SpawnMobCat + entities: + - uid: 14755 + components: + - type: Transform + pos: 5.5,75.5 + parent: 2 +- proto: SpawnMobCatException + entities: + - uid: 19365 + components: + - type: Transform + pos: -8.5,20.5 + parent: 2 +- proto: SpawnMobCatFloppa + entities: + - uid: 14754 + components: + - type: Transform + pos: 20.5,38.5 + parent: 2 +- proto: SpawnMobCatSpace + entities: + - uid: 19368 + components: + - type: Transform + pos: -12.5,7.5 + parent: 2 +- proto: SpawnMobCleanBot + entities: + - uid: 14756 + components: + - type: Transform + pos: 6.5,39.5 + parent: 2 +- proto: SpawnMobCorgi + entities: + - uid: 14757 + components: + - type: Transform + pos: 78.5,39.5 + parent: 2 +- proto: SpawnMobCrabAtmos + entities: + - uid: 18752 + components: + - type: Transform + pos: -1.5,59.5 + parent: 2 +- proto: SpawnMobFerret + entities: + - uid: 12559 + components: + - type: Transform + pos: -3.5,23.5 + parent: 2 +- proto: SpawnMobFoxRenault + entities: + - uid: 13222 + components: + - type: Transform + pos: 74.5,28.5 + parent: 2 +- proto: SpawnMobFrog + entities: + - uid: 14760 + components: + - type: Transform + pos: -0.5,71.5 + parent: 2 +- proto: SpawnMobGoat + entities: + - uid: 14761 + components: + - type: Transform + pos: 54.5,49.5 + parent: 2 +- proto: SpawnMobMonkey + entities: + - uid: 14763 + components: + - type: Transform + pos: 29.5,24.5 + parent: 2 + - uid: 14764 + components: + - type: Transform + pos: 29.5,39.5 + parent: 2 + - uid: 14765 + components: + - type: Transform + pos: 28.5,38.5 + parent: 2 +- proto: SpawnMobMonkeyPunpun + entities: + - uid: 14766 + components: + - type: Transform + pos: 61.5,39.5 + parent: 2 +- proto: SpawnMobSecDogLaika + entities: + - uid: 14762 + components: + - type: Transform + pos: -14.5,61.5 + parent: 2 +- proto: SpawnMobShiva + entities: + - uid: 14767 + components: + - type: Transform + pos: -17.5,52.5 + parent: 2 +- proto: SpawnMobSmile + entities: + - uid: 14768 + components: + - type: Transform + pos: 52.5,13.5 + parent: 2 +- proto: SpawnMobWalter + entities: + - uid: 14769 + components: + - type: Transform + pos: 3.5,75.5 + parent: 2 + - uid: 14770 + components: + - type: Transform + pos: 13.5,26.5 + parent: 2 +- proto: SpawnPointAtmos + entities: + - uid: 14771 + components: + - type: Transform + pos: -7.5,20.5 + parent: 2 + - uid: 14772 + components: + - type: Transform + pos: -9.5,24.5 + parent: 2 + - uid: 14773 + components: + - type: Transform + pos: -9.5,23.5 + parent: 2 + - uid: 14774 + components: + - type: Transform + pos: -9.5,22.5 + parent: 2 +- proto: SpawnPointBartender + entities: + - uid: 14775 + components: + - type: Transform + pos: 61.5,43.5 + parent: 2 +- proto: SpawnPointBorg + entities: + - uid: 14776 + components: + - type: Transform + pos: 57.5,20.5 + parent: 2 + - uid: 14777 + components: + - type: Transform + pos: 57.5,19.5 + parent: 2 +- proto: SpawnPointBotanist + entities: + - uid: 14778 + components: + - type: Transform + pos: 47.5,48.5 + parent: 2 + - uid: 14779 + components: + - type: Transform + pos: 47.5,47.5 + parent: 2 + - uid: 14780 + components: + - type: Transform + pos: 45.5,44.5 + parent: 2 +- proto: SpawnPointBrigmedic + entities: + - uid: 15171 + components: + - type: Transform + pos: -4.5,59.5 + parent: 2 +- proto: SpawnPointCaptain + entities: + - uid: 14782 + components: + - type: Transform + pos: 77.5,25.5 + parent: 2 +- proto: SpawnPointCargoTechnician + entities: + - uid: 14783 + components: + - type: Transform + pos: 7.5,11.5 + parent: 2 + - uid: 14784 + components: + - type: Transform + pos: 11.5,11.5 + parent: 2 + - uid: 14785 + components: + - type: Transform + pos: -0.5,11.5 + parent: 2 + - uid: 14786 + components: + - type: Transform + pos: -10.5,12.5 + parent: 2 +- proto: SpawnPointChaplain + entities: + - uid: 14787 + components: + - type: Transform + pos: 9.5,61.5 + parent: 2 +- proto: SpawnPointChef + entities: + - uid: 14788 + components: + - type: Transform + pos: 55.5,45.5 + parent: 2 + - uid: 14789 + components: + - type: Transform + pos: 56.5,42.5 + parent: 2 +- proto: SpawnPointChemist + entities: + - uid: 14790 + components: + - type: Transform + pos: 7.5,24.5 + parent: 2 + - uid: 14791 + components: + - type: Transform + pos: 8.5,24.5 + parent: 2 +- proto: SpawnPointChiefEngineer + entities: + - uid: 14792 + components: + - type: Transform + pos: -3.5,26.5 + parent: 2 +- proto: SpawnPointChiefMedicalOfficer + entities: + - uid: 14793 + components: + - type: Transform + pos: 19.5,39.5 + parent: 2 +- proto: SpawnPointClown + entities: + - uid: 14794 + components: + - type: Transform + pos: 41.5,45.5 + parent: 2 +- proto: SpawnPointDetective + entities: + - uid: 14795 + components: + - type: Transform + pos: 1.5,59.5 + parent: 2 +- proto: SpawnPointForensicMantis + entities: + - uid: 483 + components: + - type: Transform + pos: 33.5,4.5 + parent: 2 +- proto: SpawnPointHeadOfPersonnel + entities: + - uid: 14796 + components: + - type: Transform + pos: 76.5,39.5 + parent: 2 +- proto: SpawnPointHeadOfSecurity + entities: + - uid: 14797 + components: + - type: Transform + pos: -18.5,53.5 + parent: 2 +- proto: SpawnPointJanitor + entities: + - uid: 14798 + components: + - type: Transform + pos: 41.5,52.5 + parent: 2 + - uid: 14799 + components: + - type: Transform + pos: 40.5,52.5 + parent: 2 +- proto: SpawnPointLatejoin + entities: + - uid: 14800 + components: + - type: Transform + pos: 65.5,60.5 + parent: 2 + - uid: 14801 + components: + - type: Transform + pos: 66.5,60.5 + parent: 2 + - uid: 14802 + components: + - type: Transform + pos: 67.5,60.5 + parent: 2 +- proto: SpawnPointLawyer + entities: + - uid: 14803 + components: + - type: Transform + pos: -23.5,53.5 + parent: 2 +- proto: SpawnPointLibrarian + entities: + - uid: 14804 + components: + - type: Transform + pos: 17.5,58.5 + parent: 2 +- proto: SpawnPointLocationMidRoundAntag + entities: + - uid: 20307 + components: + - type: Transform + pos: 15.5,1.5 + parent: 2 + - uid: 20308 + components: + - type: Transform + pos: 27.5,6.5 + parent: 2 + - uid: 20309 + components: + - type: Transform + pos: 29.5,13.5 + parent: 2 + - uid: 20310 + components: + - type: Transform + pos: 18.5,14.5 + parent: 2 + - uid: 20311 + components: + - type: Transform + pos: 59.5,25.5 + parent: 2 + - uid: 20313 + components: + - type: Transform + pos: 80.5,51.5 + parent: 2 + - uid: 20314 + components: + - type: Transform + pos: 74.5,57.5 + parent: 2 + - uid: 20315 + components: + - type: Transform + pos: 74.5,61.5 + parent: 2 + - uid: 20316 + components: + - type: Transform + pos: 68.5,59.5 + parent: 2 + - uid: 20317 + components: + - type: Transform + pos: 61.5,54.5 + parent: 2 + - uid: 20318 + components: + - type: Transform + pos: 47.5,60.5 + parent: 2 + - uid: 20320 + components: + - type: Transform + pos: 44.5,65.5 + parent: 2 + - uid: 20321 + components: + - type: Transform + pos: 45.5,63.5 + parent: 2 + - uid: 20322 + components: + - type: Transform + pos: 38.5,66.5 + parent: 2 + - uid: 20324 + components: + - type: Transform + pos: 40.5,64.5 + parent: 2 + - uid: 20325 + components: + - type: Transform + pos: 27.5,64.5 + parent: 2 + - uid: 20326 + components: + - type: Transform + pos: 7.5,79.5 + parent: 2 + - uid: 20327 + components: + - type: Transform + pos: 10.5,77.5 + parent: 2 +- proto: SpawnPointMailCarrier + entities: + - uid: 14805 + components: + - type: Transform + pos: -6.5,6.5 + parent: 2 +- proto: SpawnPointMedicalBorg + entities: + - uid: 19602 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 59.5,20.5 + parent: 2 + - uid: 19603 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 59.5,19.5 + parent: 2 +- proto: SpawnPointMedicalDoctor + entities: + - uid: 14806 + components: + - type: Transform + pos: 8.5,40.5 + parent: 2 + - uid: 14807 + components: + - type: Transform + pos: 7.5,40.5 + parent: 2 + - uid: 14808 + components: + - type: Transform + pos: 7.5,40.5 + parent: 2 +- proto: SpawnPointMedicalIntern + entities: + - uid: 14809 + components: + - type: Transform + pos: 8.5,37.5 + parent: 2 + - uid: 14810 + components: + - type: Transform + pos: 8.5,37.5 + parent: 2 + - uid: 14811 + components: + - type: Transform + pos: 26.5,36.5 + parent: 2 +- proto: SpawnPointMime + entities: + - uid: 14812 + components: + - type: Transform + pos: 41.5,42.5 + parent: 2 +- proto: SpawnPointMusician + entities: + - uid: 14813 + components: + - type: Transform + pos: 39.5,40.5 + parent: 2 +- proto: SpawnPointParamedic + entities: + - uid: 14814 + components: + - type: Transform + pos: 7.5,45.5 + parent: 2 + - uid: 14815 + components: + - type: Transform + pos: 7.5,44.5 + parent: 2 +- proto: SpawnPointPassenger + entities: + - uid: 14816 + components: + - type: Transform + pos: 68.5,38.5 + parent: 2 + - uid: 14817 + components: + - type: Transform + pos: 66.5,59.5 + parent: 2 + - uid: 14818 + components: + - type: Transform + pos: 69.5,54.5 + parent: 2 + - uid: 14819 + components: + - type: Transform + pos: 71.5,57.5 + parent: 2 +- proto: SpawnPointPrisoner + entities: + - uid: 14820 + components: + - type: Transform + pos: -33.5,61.5 + parent: 2 + - uid: 14821 + components: + - type: Transform + pos: -29.5,61.5 + parent: 2 + - uid: 19484 + components: + - type: Transform + pos: -32.5,67.5 + parent: 2 + - uid: 19491 + components: + - type: Transform + pos: -35.5,61.5 + parent: 2 + - uid: 19492 + components: + - type: Transform + pos: -31.5,76.5 + parent: 2 + - uid: 19572 + components: + - type: Transform + pos: -23.5,74.5 + parent: 2 +- proto: SpawnPointPrisonGuard + entities: + - uid: 14822 + components: + - type: Transform + pos: -22.5,67.5 + parent: 2 + - uid: 14823 + components: + - type: Transform + pos: -22.5,66.5 + parent: 2 + - uid: 14824 + components: + - type: Transform + pos: -22.5,66.5 + parent: 2 +- proto: SpawnPointQuartermaster + entities: + - uid: 14825 + components: + - type: Transform + pos: 0.5,16.5 + parent: 2 +- proto: SpawnPointResearchAssistant + entities: + - uid: 14826 + components: + - type: Transform + pos: 47.5,26.5 + parent: 2 + - uid: 14827 + components: + - type: Transform + pos: 47.5,29.5 + parent: 2 + - uid: 14828 + components: + - type: Transform + pos: 51.5,21.5 + parent: 2 +- proto: SpawnPointResearchDirector + entities: + - uid: 14829 + components: + - type: Transform + pos: 52.5,15.5 + parent: 2 +- proto: SpawnPointRoboticist + entities: + - uid: 19263 + components: + - type: Transform + pos: 58.5,20.5 + parent: 2 + - uid: 19264 + components: + - type: Transform + pos: 58.5,16.5 + parent: 2 + - uid: 19265 + components: + - type: Transform + pos: 55.5,22.5 + parent: 2 +- proto: SpawnPointSalvageSpecialist + entities: + - uid: 14830 + components: + - type: Transform + pos: -11.5,5.5 + parent: 2 + - uid: 14831 + components: + - type: Transform + pos: -10.5,5.5 + parent: 2 + - uid: 14832 + components: + - type: Transform + pos: -9.5,5.5 + parent: 2 + - uid: 14833 + components: + - type: Transform + pos: -10.5,5.5 + parent: 2 +- proto: SpawnPointScientist + entities: + - uid: 14834 + components: + - type: Transform + pos: 49.5,13.5 + parent: 2 + - uid: 14835 + components: + - type: Transform + pos: 49.5,14.5 + parent: 2 + - uid: 14836 + components: + - type: Transform + pos: 49.5,15.5 + parent: 2 + - uid: 14837 + components: + - type: Transform + pos: 47.5,30.5 + parent: 2 + - uid: 14838 + components: + - type: Transform + pos: 43.5,21.5 + parent: 2 + - uid: 14839 + components: + - type: Transform + pos: 43.5,20.5 + parent: 2 +- proto: SpawnPointSecurityCadet + entities: + - uid: 14840 + components: + - type: Transform + pos: -14.5,51.5 + parent: 2 + - uid: 14841 + components: + - type: Transform + pos: -24.5,63.5 + parent: 2 + - uid: 14842 + components: + - type: Transform + pos: -15.5,51.5 + parent: 2 +- proto: SpawnPointSecurityOfficer + entities: + - uid: 14843 + components: + - type: Transform + pos: -24.5,66.5 + parent: 2 + - uid: 14844 + components: + - type: Transform + pos: -24.5,67.5 + parent: 2 + - uid: 14845 + components: + - type: Transform + pos: -24.5,69.5 + parent: 2 + - uid: 14846 + components: + - type: Transform + pos: -24.5,70.5 + parent: 2 + - uid: 14847 + components: + - type: Transform + pos: -24.5,64.5 + parent: 2 +- proto: SpawnPointServiceWorker + entities: + - uid: 14848 + components: + - type: Transform + pos: 53.5,38.5 + parent: 2 + - uid: 14849 + components: + - type: Transform + pos: 54.5,38.5 + parent: 2 +- proto: SpawnPointStationEngineer + entities: + - uid: 14850 + components: + - type: Transform + pos: -9.5,32.5 + parent: 2 + - uid: 14851 + components: + - type: Transform + pos: -9.5,33.5 + parent: 2 + - uid: 14852 + components: + - type: Transform + pos: -9.5,35.5 + parent: 2 + - uid: 14853 + components: + - type: Transform + pos: -9.5,36.5 + parent: 2 + - uid: 14854 + components: + - type: Transform + pos: -9.5,36.5 + parent: 2 +- proto: SpawnPointTechnicalAssistant + entities: + - uid: 14855 + components: + - type: Transform + pos: -2.5,35.5 + parent: 2 + - uid: 14856 + components: + - type: Transform + pos: -5.5,35.5 + parent: 2 + - uid: 14857 + components: + - type: Transform + pos: -5.5,39.5 + parent: 2 +- proto: SpawnPointWarden + entities: + - uid: 14858 + components: + - type: Transform + pos: -17.5,63.5 + parent: 2 +- proto: SprayBottleSpaceCleaner + entities: + - uid: 14859 + components: + - type: Transform + pos: -28.724072,50.52622 + parent: 2 + - uid: 14860 + components: + - type: Transform + pos: -5.701754,57.603504 + parent: 2 + - uid: 14861 + components: + - type: Transform + pos: 44.805016,53.27405 + parent: 2 +- proto: StairDark + entities: + - uid: 14864 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 83.5,36.5 + parent: 2 + - uid: 14865 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 83.5,37.5 + parent: 2 + - uid: 14866 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 83.5,31.5 + parent: 2 + - uid: 14867 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 83.5,32.5 + parent: 2 +- proto: Stairs + entities: + - uid: 14868 + components: + - type: Transform + pos: 4.5,69.5 + parent: 2 + - uid: 14869 + components: + - type: Transform + pos: 5.5,69.5 + parent: 2 + - uid: 14870 + components: + - type: Transform + pos: 6.5,69.5 + parent: 2 + - uid: 14871 + components: + - type: Transform + pos: 11.5,72.5 + parent: 2 + - uid: 14872 + components: + - type: Transform + pos: 12.5,72.5 + parent: 2 +- proto: StairStage + entities: + - uid: 14873 + components: + - type: Transform + pos: 64.5,12.5 + parent: 2 + - uid: 14874 + components: + - type: Transform + pos: 65.5,12.5 + parent: 2 + - uid: 14875 + components: + - type: Transform + pos: 66.5,12.5 + parent: 2 + - uid: 14876 + components: + - type: Transform + pos: 74.5,10.5 + parent: 2 + - uid: 14877 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 71.5,11.5 + parent: 2 + - uid: 14878 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 72.5,60.5 + parent: 2 +- proto: StasisBed + entities: + - uid: 14879 + components: + - type: Transform + pos: 19.5,29.5 + parent: 2 + - uid: 14880 + components: + - type: Transform + pos: 19.5,31.5 + parent: 2 + - uid: 14881 + components: + - type: Transform + pos: -5.5,59.5 + parent: 2 +- proto: StationMap + entities: + - uid: 12974 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 67.5,28.5 + parent: 2 + - uid: 14882 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,37.5 + parent: 2 + - uid: 14883 + components: + - type: Transform + pos: 49.5,37.5 + parent: 2 + - uid: 14884 + components: + - type: Transform + pos: 17.5,46.5 + parent: 2 + - uid: 14885 + components: + - type: Transform + pos: -25.5,59.5 + parent: 2 + - uid: 14886 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 58.5,32.5 + parent: 2 + - uid: 14887 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,37.5 + parent: 2 + - uid: 14888 + components: + - type: Transform + pos: 19.5,22.5 + parent: 2 + - uid: 14889 + components: + - type: Transform + pos: 9.5,68.5 + parent: 2 + - uid: 14890 + components: + - type: Transform + pos: 11.5,77.5 + parent: 2 + - uid: 14891 + components: + - type: Transform + pos: -10.5,57.5 + parent: 2 + - uid: 14892 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,18.5 + parent: 2 + - uid: 14893 + components: + - type: Transform + pos: -4.5,8.5 + parent: 2 + - uid: 14894 + components: + - type: Transform + pos: 13.5,10.5 + parent: 2 + - uid: 14895 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,55.5 + parent: 2 + - uid: 14897 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 68.5,4.5 + parent: 2 + - uid: 14898 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,30.5 + parent: 2 + - uid: 14899 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,30.5 + parent: 2 + - uid: 14900 + components: + - type: Transform + pos: 36.5,46.5 + parent: 2 +- proto: SteelBench + entities: + - uid: 14901 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,54.5 + parent: 2 + - uid: 14902 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,54.5 + parent: 2 + - uid: 14903 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,54.5 + parent: 2 + - uid: 14904 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 12.5,54.5 + parent: 2 + - uid: 14905 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,51.5 + parent: 2 + - uid: 14906 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 12.5,51.5 + parent: 2 +- proto: StoolBar + entities: + - uid: 14907 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 57.5,40.5 + parent: 2 + - uid: 14908 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 56.5,40.5 + parent: 2 + - uid: 14909 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 55.5,40.5 + parent: 2 + - uid: 14910 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 58.5,38.5 + parent: 2 + - uid: 14911 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 58.5,39.5 + parent: 2 +- proto: StorageCanister + entities: + - uid: 11500 + components: + - type: Transform + pos: -17.5,25.5 + parent: 2 + - uid: 14912 + components: + - type: Transform + pos: -17.5,21.5 + parent: 2 + - uid: 14913 + components: + - type: Transform + pos: -17.5,22.5 + parent: 2 + - uid: 14914 + components: + - type: Transform + pos: -17.5,23.5 + parent: 2 + - uid: 14915 + components: + - type: Transform + pos: -17.5,20.5 + parent: 2 + - uid: 14916 + components: + - type: Transform + pos: 9.5,38.5 + parent: 2 + - uid: 18760 + components: + - type: Transform + pos: -16.5,37.5 + parent: 2 + - uid: 18761 + components: + - type: Transform + pos: -16.5,38.5 + parent: 2 +- proto: SubstationBasic + entities: + - uid: 14917 + components: + - type: MetaData + name: South Solar 1 + - type: Transform + pos: -20.5,9.5 + parent: 2 + - uid: 14918 + components: + - type: MetaData + name: Engineering Substation + - type: Transform + pos: -16.5,43.5 + parent: 2 + - uid: 14919 + components: + - type: MetaData + name: Atmos Substation + - type: Transform + pos: -24.5,22.5 + parent: 2 + - uid: 14920 + components: + - type: MetaData + name: Logistics Substation + - type: Transform + pos: -18.5,4.5 + parent: 2 + - uid: 14921 + components: + - type: MetaData + name: Security Substation + - type: Transform + pos: -2.5,68.5 + parent: 2 + - uid: 14922 + components: + - type: MetaData + name: Bridge Substation + - type: Transform + pos: 83.5,46.5 + parent: 2 + - uid: 14923 + components: + - type: MetaData + name: Arrivals Substation + - type: Transform + pos: 76.5,13.5 + parent: 2 + - uid: 14924 + components: + - type: MetaData + name: North Solar + - type: Transform + pos: 35.5,63.5 + parent: 2 + - uid: 14925 + components: + - type: MetaData + name: Service Substation + - type: Transform + pos: 52.5,59.5 + parent: 2 + - uid: 14926 + components: + - type: MetaData + name: South Solar 2 + - type: Transform + pos: 41.5,2.5 + parent: 2 + - uid: 14927 + components: + - type: MetaData + name: MedBay Substation + - type: Transform + pos: 20.5,43.5 + parent: 2 + - uid: 14928 + components: + - type: MetaData + name: Epistemics Substation + - type: Transform + pos: 18.5,12.5 + parent: 2 + - uid: 14929 + components: + - type: MetaData + name: R&D Servers + - type: Transform + pos: 30.5,-0.5 + parent: 2 + - uid: 17223 + components: + - type: Transform + pos: 30.5,-48.5 + parent: 2 + - uid: 17889 + components: + - type: Transform + pos: 30.5,-14.5 + parent: 2 +- proto: SubstationMachineCircuitboard + entities: + - uid: 14933 + components: + - type: Transform + pos: -26.371708,43.614967 + parent: 2 +- proto: SuitStorageAtmos + entities: + - uid: 14934 + components: + - type: Transform + pos: -35.5,30.5 + parent: 2 + - uid: 14935 + components: + - type: Transform + pos: -10.5,25.5 + parent: 2 +- proto: SuitStorageCaptain + entities: + - uid: 14936 + components: + - type: Transform + pos: 77.5,31.5 + parent: 2 +- proto: SuitStorageCE + entities: + - uid: 14937 + components: + - type: Transform + pos: -2.5,27.5 + parent: 2 +- proto: SuitStorageCMO + entities: + - uid: 14938 + components: + - type: Transform + pos: 20.5,40.5 + parent: 2 +- proto: SuitStorageEngi + entities: + - uid: 14939 + components: + - type: Transform + pos: -2.5,39.5 + parent: 2 + - uid: 14940 + components: + - type: Transform + pos: -2.5,40.5 + parent: 2 + - uid: 14941 + components: + - type: Transform + pos: -8.5,41.5 + parent: 2 + - uid: 14942 + components: + - type: Transform + pos: -7.5,41.5 + parent: 2 +- proto: SuitStorageEVA + entities: + - uid: 14943 + components: + - type: Transform + pos: 3.5,43.5 + parent: 2 + - uid: 14944 + components: + - type: Transform + pos: 75.5,45.5 + parent: 2 + - uid: 14945 + components: + - type: Transform + pos: 76.5,45.5 + parent: 2 + - uid: 14946 + components: + - type: Transform + pos: 75.5,42.5 + parent: 2 + - uid: 14947 + components: + - type: Transform + pos: 76.5,42.5 + parent: 2 +- proto: SuitStorageHOS + entities: + - uid: 14948 + components: + - type: Transform + pos: -20.5,54.5 + parent: 2 +- proto: SuitStorageRD + entities: + - uid: 14949 + components: + - type: Transform + pos: 53.5,18.5 + parent: 2 +- proto: SuitStorageSalv + entities: + - uid: 14950 + components: + - type: Transform + pos: -17.5,-6.5 + parent: 2 + - uid: 14951 + components: + - type: Transform + pos: -17.5,-5.5 + parent: 2 + - uid: 14952 + components: + - type: Transform + pos: -17.5,-4.5 + parent: 2 + - uid: 14953 + components: + - type: Transform + pos: -17.5,-4.5 + parent: 2 + - uid: 14954 + components: + - type: Transform + pos: -17.5,-4.5 + parent: 2 +- proto: SuitStorageSec + entities: + - uid: 14955 + components: + - type: Transform + pos: -19.5,66.5 + parent: 2 + - uid: 14956 + components: + - type: Transform + pos: -14.5,68.5 + parent: 2 + - uid: 14957 + components: + - type: Transform + pos: -9.5,64.5 + parent: 2 + - uid: 14958 + components: + - type: Transform + pos: -9.5,62.5 + parent: 2 +- proto: Supermatter + entities: + - uid: 14959 + components: + - type: Transform + pos: -19.5,34.5 + parent: 2 +- proto: SurveillanceCameraCommand + entities: + - uid: 14960 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 80.5,32.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Ponte + - uid: 14961 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,46.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Gravity + - uid: 14962 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,26.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: CE + - uid: 14963 + components: + - type: Transform + pos: -18.5,51.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: HOS + - uid: 14964 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,16.5 + parent: 2 + - type: SurveillanceCamera + id: LO + - uid: 14965 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,2.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: R&D Server + - uid: 14966 + components: + - type: Transform + pos: 29.5,-0.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Research Server Room + - uid: 14967 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 53.5,16.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + id: RD + - type: ActiveUserInterface + - uid: 14968 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,56.5 + parent: 2 + - type: SurveillanceCamera + id: Vault + - uid: 14969 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 18.5,39.5 + parent: 2 + - type: SurveillanceCamera + id: CMO + - uid: 14970 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 76.5,45.5 + parent: 2 + - type: SurveillanceCamera + id: EVA Storage + - uid: 14971 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 76.5,40.5 + parent: 2 + - type: SurveillanceCamera + id: HOP + - uid: 14972 + components: + - type: Transform + pos: 67.5,33.5 + parent: 2 + - type: SurveillanceCamera + id: Front Desk + - uid: 14973 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 76.5,31.5 + parent: 2 + - type: SurveillanceCamera + id: Captain + - uid: 14974 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 78.5,25.5 + parent: 2 + - type: SurveillanceCamera + id: Captain Bedroom + - uid: 14977 + components: + - type: Transform + pos: 35.5,-1.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Station AI monitoring + - uid: 18571 + components: + - type: Transform + pos: 69.5,23.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Captain Front Desk + - uid: 20283 + components: + - type: Transform + pos: 30.5,-44.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Core 1 + - uid: 20284 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,-46.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Core 2 + - uid: 20285 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,-40.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Core airlock + - uid: 20286 + components: + - type: Transform + pos: 31.5,-38.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Core Input + - uid: 20287 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-34.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Sat engi + - uid: 20288 + components: + - type: Transform + pos: 25.5,-38.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Sat Consoles room + - uid: 20289 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,-31.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Sat robotics room + - uid: 20290 + components: + - type: Transform + pos: 31.5,-33.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Sat recharg stations + - uid: 20291 + components: + - type: Transform + pos: 34.5,-29.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Sat input + - uid: 20292 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,-30.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI exterior 3 + - uid: 20293 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-14.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI exterior 2 + - uid: 20294 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.5,-14.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI exterior 1 + - uid: 20295 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,-14.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Telecommunications + - uid: 20296 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,-30.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI exterior 4 + - uid: 20297 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,-45.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI exterior 5 + - uid: 20298 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,-45.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI exterior 7 + - uid: 20299 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,-52.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI exterior 6 + - uid: 20300 + components: + - type: Transform + pos: 31.5,-25.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Telecomms control room +- proto: SurveillanceCameraEngineering + entities: + - uid: 14986 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -32.5,28.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Combustion Chamber + - uid: 14987 + components: + - type: Transform + pos: -7.5,38.5 + parent: 2 + - type: SurveillanceCamera + id: SMES Room Entrance + - uid: 14988 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,21.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Atmos North + - uid: 14989 + components: + - type: Transform + pos: -30.5,7.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Atmos South + - uid: 14990 + components: + - type: Transform + pos: -16.5,18.5 + parent: 2 + - type: SurveillanceCamera + id: Atmos Corridor + - uid: 14991 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,25.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Atmos Reception + - uid: 14992 + components: + - type: Transform + pos: -10.5,27.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Atmosphere Entry + - uid: 14993 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,45.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: SMES Room + - uid: 14994 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,45.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Ship Workshop + - uid: 14995 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,35.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Front desk + - uid: 14996 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,41.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: North Super-Matter Reactor + - uid: 14997 + components: + - type: Transform + pos: -20.5,25.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: South Super-Matter Reactor + - uid: 14998 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,35.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: West Super-Matter Reactor + - uid: 14999 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,34.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: East Super-Matter Reactor + - uid: 15000 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,25.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: AME Generator +- proto: SurveillanceCameraGeneral + entities: + - uid: 15001 + components: + - type: Transform + pos: 19.5,47.5 + parent: 2 + - type: SurveillanceCamera + id: Medbay North Corridor + - uid: 15002 + components: + - type: Transform + pos: 0.5,19.5 + parent: 2 + - type: SurveillanceCamera + id: Cargo and engineering corridor + - uid: 15003 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,49.5 + parent: 2 + - type: SurveillanceCamera + id: Sec Corridor, Medbay and Engineering + - uid: 15004 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,59.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Entrance to the detective's room + - uid: 15005 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,63.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + id: North security entrance + - type: ActiveUserInterface + - uid: 15006 + components: + - type: Transform + pos: 3.5,70.5 + parent: 2 + - type: SurveillanceCamera + id: South Park + - uid: 15007 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,79.5 + parent: 2 + - type: SurveillanceCamera + id: North Park + - uid: 15008 + components: + - type: Transform + pos: 9.5,15.5 + parent: 2 + - type: SurveillanceCamera + id: Logistics Front desk + - uid: 15009 + components: + - type: Transform + pos: 24.5,9.5 + parent: 2 + - type: SurveillanceCamera + id: Dorms + - uid: 15010 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 33.5,21.5 + parent: 2 + - type: SurveillanceCamera + id: South Medbay Corridor + - uid: 15011 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,36.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Medbay entrance + - uid: 15012 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,49.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Vault Corridor + - uid: 15013 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,35.5 + parent: 2 + - type: SurveillanceCamera + id: Botany reception + - uid: 15014 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 54.5,40.5 + parent: 2 + - type: SurveillanceCamera + id: Bar + - uid: 15015 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 64.5,44.5 + parent: 2 + - type: SurveillanceCamera + id: Entrance of the E.V.A. + - uid: 15016 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 64.5,58.5 + parent: 2 + - type: SurveillanceCamera + id: Evac + - uid: 15017 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 64.5,25.5 + parent: 2 + - type: SurveillanceCamera + id: Cap Reception Entrance + - uid: 15018 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 76.5,3.5 + parent: 2 + - type: SurveillanceCamera + id: Arrivals + - uid: 15019 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 72.5,61.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Pod port +- proto: SurveillanceCameraMedical + entities: + - uid: 15020 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 14.5,41.5 + parent: 2 + - type: SurveillanceCamera + id: Operating room + - uid: 15021 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,36.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Front desk + - uid: 15022 + components: + - type: Transform + pos: 9.5,31.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: West Infirmary + - uid: 15023 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 18.5,45.5 + parent: 2 + - type: SurveillanceCamera + id: Morgue + - uid: 15024 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,45.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Paramedic's room + - uid: 15025 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,41.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Cafeteria + - uid: 15026 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,30.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Reception corridor + - uid: 15027 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 16.5,27.5 + parent: 2 + - type: SurveillanceCamera + id: medbay entrance + - uid: 15028 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,35.5 + parent: 2 + - type: SurveillanceCamera + id: East Infirmary + - uid: 15029 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,26.5 + parent: 2 + - type: SurveillanceCamera + id: Chemical Laboratory + - uid: 15030 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,45.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Virology Entry + - uid: 15031 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,45.5 + parent: 2 + - type: SurveillanceCamera + id: Virology + - uid: 15032 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,29.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + id: Genecist Area + - type: ActiveUserInterface + - uid: 15033 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 22.5,28.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + id: Cloning Room + - type: ActiveUserInterface +- proto: SurveillanceCameraRouterCommand + entities: + - uid: 17881 + components: + - type: Transform + pos: 31.5,-19.5 + parent: 2 +- proto: SurveillanceCameraRouterConstructed + entities: + - uid: 18132 + components: + - type: Transform + pos: 30.5,-16.5 + parent: 2 +- proto: SurveillanceCameraRouterEngineering + entities: + - uid: 17885 + components: + - type: Transform + pos: 32.5,-19.5 + parent: 2 +- proto: SurveillanceCameraRouterGeneral + entities: + - uid: 17880 + components: + - type: Transform + pos: 28.5,-19.5 + parent: 2 +- proto: SurveillanceCameraRouterMedical + entities: + - uid: 18123 + components: + - type: Transform + pos: 27.5,-19.5 + parent: 2 +- proto: SurveillanceCameraRouterScience + entities: + - uid: 17886 + components: + - type: Transform + pos: 33.5,-19.5 + parent: 2 +- proto: SurveillanceCameraRouterSecurity + entities: + - uid: 17883 + components: + - type: Transform + pos: 29.5,-19.5 + parent: 2 +- proto: SurveillanceCameraRouterService + entities: + - uid: 18124 + components: + - type: Transform + pos: 27.5,-21.5 + parent: 2 +- proto: SurveillanceCameraRouterSupply + entities: + - uid: 17887 + components: + - type: Transform + pos: 33.5,-21.5 + parent: 2 +- proto: SurveillanceCameraScience + entities: + - uid: 15042 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 46.5,31.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: Research Room + - uid: 15043 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 57.5,0.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: Xenobiology + - uid: 15044 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 56.5,24.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: Front Desk + - uid: 15045 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 40.5,10.5 + parent: 2 + - type: SurveillanceCamera + id: Xenoarchaeology Room + - uid: 15046 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,17.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: Research Room Corridor + - uid: 15047 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 48.5,11.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: Entrance to the Anomaly room + - uid: 15048 + components: + - type: Transform + pos: 57.5,15.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: Robotics +- proto: SurveillanceCameraSecurity + entities: + - uid: 7187 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,67.5 + parent: 2 + - uid: 15049 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,15.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Cargo Checkpoint + - uid: 15050 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,55.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: interrogation room + - uid: 15051 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -21.5,70.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Lockers + - uid: 15052 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,70.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Armory + - uid: 15053 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,52.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: South entrance reception + - uid: 15054 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 70.5,15.5 + parent: 2 + - type: SurveillanceCamera + id: Cryosleep Checkpoint + - uid: 15055 + components: + - type: Transform + pos: 61.5,56.5 + parent: 2 + - type: SurveillanceCamera + id: Evac Checkpoint + - uid: 15056 + components: + - type: Transform + pos: 44.5,12.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Epistemics Checkpoint + - uid: 15057 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,31.5 + parent: 2 + - type: SurveillanceCamera + id: Eng Checkpoint + - uid: 15058 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,56.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Brig + - uid: 15059 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,59.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Detective's room + - uid: 15060 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,60.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Investigation room + - uid: 15061 + components: + - type: Transform + pos: -23.5,51.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Lawyer's room + - uid: 15062 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,58.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + id: Perma Corridor + - type: ActiveUserInterface + - uid: 15063 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,58.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + id: Security Corridor + - type: ActiveUserInterface + - uid: 15064 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -25.5,62.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + id: Rest area + - type: ActiveUserInterface + - uid: 15066 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,63.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Equipment delivery + - uid: 15068 + components: + - type: Transform + pos: 6.5,26.5 + parent: 2 + - type: SurveillanceCamera + id: Medbay Checkpoint + - uid: 15069 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,59.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: BrigMed + - uid: 17922 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -33.5,60.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Prisioner Bedroom 1 + - uid: 17993 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -33.5,65.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Perma + - uid: 17994 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -31.5,77.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Perma Botany + - uid: 17996 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,74.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Perma Vending Machines + - uid: 18581 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,60.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Prisioner Bedroom 2 +- proto: SurveillanceCameraService + entities: + - uid: 15070 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,4.5 + parent: 2 + - type: SurveillanceCamera + id: Disposals + - uid: 15071 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 62.5,38.5 + parent: 2 + - type: SurveillanceCamera + id: Bar Counter + - uid: 15072 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 60.5,31.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Tool Room + - uid: 15073 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 59.5,43.5 + parent: 2 + - type: SurveillanceCamera + id: Bartender + - uid: 15074 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,37.5 + parent: 2 + - type: SurveillanceCamera + id: Hydroponics + - uid: 15075 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.5,48.5 + parent: 2 + - type: SurveillanceCamera + id: Botanica Cabinets + - uid: 15076 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 54.5,51.5 + parent: 2 + - type: SurveillanceCamera + id: Freezer + - uid: 15077 + components: + - type: Transform + pos: 54.5,42.5 + parent: 2 + - type: SurveillanceCamera + id: Kitchen + - uid: 15078 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 41.5,37.5 + parent: 2 + - type: SurveillanceCamera + id: Theater + - uid: 15079 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 42.5,44.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: clown room + - uid: 15080 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 38.5,44.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + id: fun room + - uid: 15081 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 39.5,54.5 + parent: 2 + - type: SurveillanceCamera + id: Janitor's room + - uid: 15082 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 12.5,61.5 + parent: 2 + - type: SurveillanceCamera + id: Priest's Room + - uid: 15083 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 17.5,63.5 + parent: 2 + - type: SurveillanceCamera + id: Crematorium + - uid: 15084 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,54.5 + parent: 2 + - type: SurveillanceCamera + id: Chapel + - uid: 15085 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,56.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Library +- proto: SurveillanceCameraSupply + entities: + - uid: 15086 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,14.5 + parent: 2 + - type: SurveillanceCamera + id: Salvage Stock + - uid: 15087 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,6.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSupply + id: Salvage + - type: ActiveUserInterface + - uid: 15088 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,8.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSupply + nameSet: True + id: Mail + - uid: 15089 + components: + - type: Transform + pos: 0.5,3.5 + parent: 2 + - type: SurveillanceCamera + id: Cargo warehouse + - uid: 15090 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -16.5,2.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSupply + nameSet: True + id: Asalvage warehouse + - uid: 15091 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,-9.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSupply + nameSet: True + id: Exterior of the salvage +- proto: SurveillanceCameraWirelessRouterConstructed + entities: + - uid: 17173 + components: + - type: Transform + pos: 32.5,-21.5 + parent: 2 +- proto: SurveillanceCameraWirelessRouterEntertainment + entities: + - uid: 18131 + components: + - type: Transform + pos: 28.5,-21.5 + parent: 2 +- proto: Syringe + entities: + - uid: 15092 + components: + - type: Transform + pos: 37.385117,7.5585823 + parent: 2 + - uid: 15093 + components: + - type: Transform + pos: -27.432621,50.59636 + parent: 2 + - uid: 15094 + components: + - type: Transform + pos: 14.550299,38.625336 + parent: 2 +- proto: SyringeCryostasis + entities: + - uid: 15095 + components: + - type: Transform + pos: 19.5,30.5 + parent: 2 +- proto: Table + entities: + - uid: 713 + components: + - type: Transform + pos: -34.5,74.5 + parent: 2 + - uid: 15096 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,27.5 + parent: 2 + - uid: 15097 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,31.5 + parent: 2 + - uid: 15098 + components: + - type: Transform + pos: -24.5,43.5 + parent: 2 + - uid: 15099 + components: + - type: Transform + pos: -24.5,43.5 + parent: 2 + - uid: 15100 + components: + - type: Transform + pos: -5.5,3.5 + parent: 2 + - uid: 15101 + components: + - type: Transform + pos: -5.5,4.5 + parent: 2 + - uid: 15102 + components: + - type: Transform + pos: -26.5,43.5 + parent: 2 + - uid: 15103 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 76.5,37.5 + parent: 2 + - uid: 15104 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 12.5,12.5 + parent: 2 + - uid: 15105 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 12.5,13.5 + parent: 2 + - uid: 15106 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,12.5 + parent: 2 + - uid: 15107 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,12.5 + parent: 2 + - uid: 15108 + components: + - type: Transform + pos: -4.5,15.5 + parent: 2 + - uid: 15109 + components: + - type: Transform + pos: -3.5,15.5 + parent: 2 + - uid: 15110 + components: + - type: Transform + pos: -7.5,24.5 + parent: 2 + - uid: 15111 + components: + - type: Transform + pos: -7.5,23.5 + parent: 2 + - uid: 15112 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,28.5 + parent: 2 + - uid: 15113 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,33.5 + parent: 2 + - uid: 15114 + components: + - type: Transform + pos: -2.5,36.5 + parent: 2 + - uid: 15115 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,33.5 + parent: 2 + - uid: 15116 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,34.5 + parent: 2 + - uid: 15117 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,35.5 + parent: 2 + - uid: 15118 + components: + - type: Transform + pos: -4.5,40.5 + parent: 2 + - uid: 15119 + components: + - type: Transform + pos: -10.5,45.5 + parent: 2 + - uid: 15120 + components: + - type: Transform + pos: -4.5,45.5 + parent: 2 + - uid: 15121 + components: + - type: Transform + pos: -5.5,45.5 + parent: 2 + - uid: 15122 + components: + - type: Transform + pos: 0.5,12.5 + parent: 2 + - uid: 15123 + components: + - type: Transform + pos: 1.5,12.5 + parent: 2 + - uid: 15124 + components: + - type: Transform + pos: 1.5,14.5 + parent: 2 + - uid: 15125 + components: + - type: Transform + pos: 1.5,15.5 + parent: 2 + - uid: 15126 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,15.5 + parent: 2 + - uid: 15127 + components: + - type: Transform + pos: -5.5,29.5 + parent: 2 + - uid: 15128 + components: + - type: Transform + pos: -4.5,29.5 + parent: 2 + - uid: 15129 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -19.5,70.5 + parent: 2 + - uid: 15130 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,67.5 + parent: 2 + - uid: 15131 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,70.5 + parent: 2 + - uid: 15132 + components: + - type: Transform + pos: -16.5,60.5 + parent: 2 + - uid: 15133 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,62.5 + parent: 2 + - uid: 15134 + components: + - type: Transform + pos: -21.5,60.5 + parent: 2 + - uid: 15135 + components: + - type: Transform + pos: -25.5,62.5 + parent: 2 + - uid: 15136 + components: + - type: Transform + pos: -25.5,61.5 + parent: 2 + - uid: 15137 + components: + - type: Transform + pos: -25.5,60.5 + parent: 2 + - uid: 15138 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,67.5 + parent: 2 + - uid: 15139 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,66.5 + parent: 2 + - uid: 15140 + components: + - type: Transform + pos: -8.5,58.5 + parent: 2 + - uid: 15143 + components: + - type: Transform + pos: 40.5,21.5 + parent: 2 + - uid: 15144 + components: + - type: Transform + pos: 41.5,21.5 + parent: 2 + - uid: 15145 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,12.5 + parent: 2 + - uid: 15146 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,13.5 + parent: 2 + - uid: 15147 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,14.5 + parent: 2 + - uid: 15148 + components: + - type: Transform + pos: 53.5,14.5 + parent: 2 + - uid: 15149 + components: + - type: Transform + pos: 51.5,14.5 + parent: 2 + - uid: 15150 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 55.5,17.5 + parent: 2 + - uid: 15151 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 55.5,18.5 + parent: 2 + - uid: 15152 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 55.5,19.5 + parent: 2 + - uid: 15153 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 58.5,15.5 + parent: 2 + - uid: 15154 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 59.5,15.5 + parent: 2 + - uid: 15155 + components: + - type: Transform + pos: 59.5,22.5 + parent: 2 + - uid: 15156 + components: + - type: Transform + pos: 56.5,15.5 + parent: 2 + - uid: 15157 + components: + - type: Transform + pos: 46.5,24.5 + parent: 2 + - uid: 15158 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 50.5,24.5 + parent: 2 + - uid: 15159 + components: + - type: Transform + pos: 50.5,27.5 + parent: 2 + - uid: 15160 + components: + - type: Transform + pos: 46.5,27.5 + parent: 2 + - uid: 15161 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 61.5,31.5 + parent: 2 + - uid: 15162 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 60.5,31.5 + parent: 2 + - uid: 15163 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 61.5,28.5 + parent: 2 + - uid: 15164 + components: + - type: Transform + pos: 58.5,28.5 + parent: 2 + - uid: 15165 + components: + - type: Transform + pos: -26.5,55.5 + parent: 2 + - uid: 15166 + components: + - type: Transform + pos: -26.5,54.5 + parent: 2 + - uid: 15167 + components: + - type: Transform + pos: -26.5,53.5 + parent: 2 + - uid: 15168 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -31.5,60.5 + parent: 2 + - uid: 15169 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -27.5,60.5 + parent: 2 + - uid: 15170 + components: + - type: Transform + pos: -31.5,63.5 + parent: 2 + - uid: 15172 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,57.5 + parent: 2 + - uid: 15173 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 43.5,40.5 + parent: 2 + - uid: 15174 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 43.5,39.5 + parent: 2 + - uid: 15175 + components: + - type: Transform + pos: 54.5,43.5 + parent: 2 + - uid: 15176 + components: + - type: Transform + pos: 55.5,43.5 + parent: 2 + - uid: 15177 + components: + - type: Transform + pos: 55.5,44.5 + parent: 2 + - uid: 15178 + components: + - type: Transform + pos: 54.5,44.5 + parent: 2 + - uid: 15179 + components: + - type: Transform + pos: 57.5,44.5 + parent: 2 + - uid: 15180 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 53.5,37.5 + parent: 2 + - uid: 15181 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 54.5,37.5 + parent: 2 + - uid: 15182 + components: + - type: Transform + pos: 62.5,38.5 + parent: 2 + - uid: 15183 + components: + - type: Transform + pos: 62.5,37.5 + parent: 2 + - uid: 15184 + components: + - type: Transform + pos: 51.5,54.5 + parent: 2 + - uid: 15185 + components: + - type: Transform + pos: 5.5,27.5 + parent: 2 + - uid: 15186 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,41.5 + parent: 2 + - uid: 15187 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,38.5 + parent: 2 + - uid: 15188 + components: + - type: Transform + pos: 17.5,41.5 + parent: 2 + - uid: 15189 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,43.5 + parent: 2 + - uid: 15190 + components: + - type: Transform + pos: 5.5,37.5 + parent: 2 + - uid: 15191 + components: + - type: Transform + pos: 3.5,38.5 + parent: 2 + - uid: 15192 + components: + - type: Transform + pos: 3.5,40.5 + parent: 2 + - uid: 15193 + components: + - type: Transform + pos: 3.5,41.5 + parent: 2 + - uid: 15194 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,39.5 + parent: 2 + - uid: 15195 + components: + - type: Transform + pos: 14.5,38.5 + parent: 2 + - uid: 15196 + components: + - type: Transform + pos: 73.5,62.5 + parent: 2 + - uid: 15197 + components: + - type: Transform + pos: 74.5,62.5 + parent: 2 + - uid: 15198 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 71.5,46.5 + parent: 2 + - uid: 15199 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 71.5,42.5 + parent: 2 + - uid: 15200 + components: + - type: Transform + pos: 78.5,44.5 + parent: 2 + - uid: 15201 + components: + - type: Transform + pos: 71.5,38.5 + parent: 2 + - uid: 15202 + components: + - type: Transform + pos: 68.5,40.5 + parent: 2 + - uid: 15203 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 76.5,38.5 + parent: 2 + - uid: 15204 + components: + - type: Transform + pos: 67.5,1.5 + parent: 2 + - uid: 15205 + components: + - type: Transform + pos: 70.5,13.5 + parent: 2 + - uid: 15206 + components: + - type: Transform + pos: 70.5,21.5 + parent: 2 + - uid: 15207 + components: + - type: Transform + pos: 43.5,66.5 + parent: 2 + - uid: 15208 + components: + - type: Transform + pos: 44.5,66.5 + parent: 2 + - uid: 15209 + components: + - type: Transform + pos: 45.5,65.5 + parent: 2 + - uid: 15210 + components: + - type: Transform + pos: 45.5,64.5 + parent: 2 + - uid: 15211 + components: + - type: Transform + pos: -13.5,-1.5 + parent: 2 + - uid: 15212 + components: + - type: Transform + pos: -14.5,-1.5 + parent: 2 + - uid: 15213 + components: + - type: Transform + pos: -6.5,3.5 + parent: 2 + - uid: 15214 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,31.5 + parent: 2 + - uid: 19504 + components: + - type: Transform + pos: -31.5,74.5 + parent: 2 + - uid: 19505 + components: + - type: Transform + pos: -30.5,74.5 + parent: 2 + - uid: 19507 + components: + - type: Transform + pos: -31.5,73.5 + parent: 2 + - uid: 19508 + components: + - type: Transform + pos: -30.5,73.5 + parent: 2 + - uid: 19519 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,73.5 + parent: 2 + - uid: 19520 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,73.5 + parent: 2 + - uid: 19711 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 34.5,-24.5 + parent: 2 + - uid: 19770 + components: + - type: Transform + pos: 26.5,-23.5 + parent: 2 + - uid: 19771 + components: + - type: Transform + pos: 26.5,-24.5 + parent: 2 + - uid: 19775 + components: + - type: Transform + pos: 27.5,-27.5 + parent: 2 +- proto: TableCarpet + entities: + - uid: 5988 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 72.5,28.5 + parent: 2 + - uid: 12988 + components: + - type: Transform + pos: 76.5,28.5 + parent: 2 + - uid: 14975 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 72.5,29.5 + parent: 2 + - uid: 15215 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 73.5,27.5 + parent: 2 + - uid: 15216 + components: + - type: Transform + pos: -20.5,53.5 + parent: 2 + - uid: 15217 + components: + - type: Transform + pos: -19.5,53.5 + parent: 2 + - uid: 15218 + components: + - type: Transform + pos: -17.5,53.5 + parent: 2 + - uid: 15219 + components: + - type: Transform + pos: -17.5,54.5 + parent: 2 + - uid: 15220 + components: + - type: Transform + pos: -17.5,55.5 + parent: 2 + - uid: 15221 + components: + - type: Transform + pos: -24.5,55.5 + parent: 2 + - uid: 15222 + components: + - type: Transform + pos: -24.5,54.5 + parent: 2 + - uid: 15223 + components: + - type: Transform + pos: -24.5,52.5 + parent: 2 + - uid: 15224 + components: + - type: Transform + pos: -24.5,51.5 + parent: 2 + - uid: 15225 + components: + - type: Transform + pos: -22.5,52.5 + parent: 2 + - uid: 15226 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 59.5,43.5 + parent: 2 + - uid: 15227 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 59.5,44.5 + parent: 2 + - uid: 15228 + components: + - type: Transform + pos: 40.5,43.5 + parent: 2 + - uid: 15229 + components: + - type: Transform + pos: 40.5,45.5 + parent: 2 + - uid: 15230 + components: + - type: Transform + pos: 35.5,43.5 + parent: 2 + - uid: 15231 + components: + - type: Transform + pos: 36.5,43.5 + parent: 2 + - uid: 15232 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,39.5 + parent: 2 + - uid: 15233 + components: + - type: Transform + pos: 39.5,38.5 + parent: 2 + - uid: 15234 + components: + - type: Transform + pos: 40.5,38.5 + parent: 2 + - uid: 15235 + components: + - type: Transform + pos: 36.5,37.5 + parent: 2 + - uid: 15236 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 75.5,31.5 + parent: 2 + - uid: 15238 + components: + - type: Transform + pos: 74.5,27.5 + parent: 2 + - uid: 15239 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 78.5,24.5 + parent: 2 + - uid: 15240 + components: + - type: Transform + pos: 83.5,23.5 + parent: 2 + - uid: 15241 + components: + - type: Transform + pos: 82.5,24.5 + parent: 2 + - uid: 15242 + components: + - type: Transform + pos: 82.5,23.5 + parent: 2 + - uid: 15243 + components: + - type: Transform + pos: 83.5,24.5 + parent: 2 + - uid: 15244 + components: + - type: Transform + pos: 63.5,14.5 + parent: 2 + - uid: 15245 + components: + - type: Transform + pos: 63.5,15.5 + parent: 2 + - uid: 15246 + components: + - type: Transform + pos: 80.5,50.5 + parent: 2 + - uid: 15247 + components: + - type: Transform + pos: 62.5,50.5 + parent: 2 + - uid: 15248 + components: + - type: Transform + pos: 60.5,54.5 + parent: 2 + - uid: 16996 + components: + - type: Transform + pos: 72.5,30.5 + parent: 2 +- proto: TableCounterWood + entities: + - uid: 15249 + components: + - type: Transform + pos: 59.5,39.5 + parent: 2 + - uid: 15250 + components: + - type: Transform + pos: 59.5,38.5 + parent: 2 +- proto: TableGlass + entities: + - uid: 15331 + components: + - type: Transform + pos: 84.5,34.5 + parent: 2 + - uid: 19476 + components: + - type: Transform + pos: -30.5,68.5 + parent: 2 + - uid: 19477 + components: + - type: Transform + pos: -31.5,67.5 + parent: 2 + - uid: 19478 + components: + - type: Transform + pos: -31.5,68.5 + parent: 2 + - uid: 19487 + components: + - type: Transform + pos: -30.5,67.5 + parent: 2 +- proto: TablePlasmaGlass + entities: + - uid: 15252 + components: + - type: Transform + pos: 52.5,-0.5 + parent: 2 + - uid: 15253 + components: + - type: Transform + pos: 52.5,-1.5 + parent: 2 + - uid: 15254 + components: + - type: Transform + pos: 50.5,-0.5 + parent: 2 + - uid: 15255 + components: + - type: Transform + pos: 50.5,-1.5 + parent: 2 + - uid: 15258 + components: + - type: Transform + pos: 46.5,31.5 + parent: 2 + - uid: 15259 + components: + - type: Transform + pos: 47.5,31.5 + parent: 2 + - uid: 15260 + components: + - type: Transform + pos: 48.5,31.5 + parent: 2 + - uid: 15261 + components: + - type: Transform + pos: -28.5,50.5 + parent: 2 + - uid: 15262 + components: + - type: Transform + pos: -27.5,50.5 + parent: 2 + - uid: 15263 + components: + - type: Transform + pos: 31.5,56.5 + parent: 2 + - uid: 15264 + components: + - type: Transform + pos: 31.5,53.5 + parent: 2 + - uid: 15265 + components: + - type: Transform + pos: 31.5,54.5 + parent: 2 + - uid: 15266 + components: + - type: Transform + pos: 10.5,27.5 + parent: 2 + - uid: 15267 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 44.5,45.5 + parent: 2 + - uid: 15268 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 45.5,45.5 + parent: 2 + - uid: 15269 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 46.5,45.5 + parent: 2 + - uid: 15270 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 52.5,46.5 + parent: 2 + - uid: 15271 + components: + - type: Transform + pos: 27.5,29.5 + parent: 2 + - uid: 15272 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,23.5 + parent: 2 + - uid: 15273 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,23.5 + parent: 2 + - uid: 15274 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,23.5 + parent: 2 + - uid: 15275 + components: + - type: Transform + pos: 20.5,26.5 + parent: 2 + - uid: 15276 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.5,24.5 + parent: 2 + - uid: 15277 + components: + - type: Transform + pos: 10.5,28.5 + parent: 2 + - uid: 15278 + components: + - type: Transform + pos: 13.5,28.5 + parent: 2 + - uid: 15279 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,28.5 + parent: 2 + - uid: 15280 + components: + - type: Transform + pos: 27.5,31.5 + parent: 2 + - uid: 15281 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 16.5,39.5 + parent: 2 + - uid: 15282 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 18.5,39.5 + parent: 2 +- proto: TableReinforced + entities: + - uid: 15287 + components: + - type: Transform + pos: -34.5,30.5 + parent: 2 + - uid: 15288 + components: + - type: Transform + pos: -4.5,6.5 + parent: 2 + - uid: 15289 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,46.5 + parent: 2 + - uid: 15290 + components: + - type: Transform + pos: -7.5,22.5 + parent: 2 + - uid: 15291 + components: + - type: Transform + pos: -6.5,20.5 + parent: 2 + - uid: 15292 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,25.5 + parent: 2 + - uid: 15293 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,26.5 + parent: 2 + - uid: 15294 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,35.5 + parent: 2 + - uid: 15295 + components: + - type: Transform + pos: 7.5,14.5 + parent: 2 + - uid: 15296 + components: + - type: Transform + pos: 11.5,14.5 + parent: 2 + - uid: 15297 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,64.5 + parent: 2 + - uid: 15298 + components: + - type: Transform + pos: -15.5,59.5 + parent: 2 + - uid: 15299 + components: + - type: Transform + pos: -13.5,51.5 + parent: 2 + - uid: 15300 + components: + - type: Transform + pos: -13.5,52.5 + parent: 2 + - uid: 15301 + components: + - type: Transform + pos: -14.5,50.5 + parent: 2 + - uid: 15302 + components: + - type: Transform + pos: -15.5,50.5 + parent: 2 + - uid: 15303 + components: + - type: Transform + pos: 36.5,7.5 + parent: 2 + - uid: 15304 + components: + - type: Transform + pos: 37.5,7.5 + parent: 2 + - uid: 15305 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,9.5 + parent: 2 + - uid: 15306 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,8.5 + parent: 2 + - uid: 15307 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,7.5 + parent: 2 + - uid: 15308 + components: + - type: Transform + pos: 55.5,23.5 + parent: 2 + - uid: 15309 + components: + - type: Transform + pos: 51.5,25.5 + parent: 2 + - uid: 15310 + components: + - type: Transform + pos: 49.5,38.5 + parent: 2 + - uid: 15311 + components: + - type: Transform + pos: 49.5,39.5 + parent: 2 + - uid: 15312 + components: + - type: Transform + pos: 45.5,36.5 + parent: 2 + - uid: 15313 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 51.5,43.5 + parent: 2 + - uid: 15314 + components: + - type: Transform + pos: 55.5,41.5 + parent: 2 + - uid: 15315 + components: + - type: Transform + pos: 56.5,41.5 + parent: 2 + - uid: 15316 + components: + - type: Transform + pos: 57.5,41.5 + parent: 2 + - uid: 15317 + components: + - type: Transform + pos: 42.5,28.5 + parent: 2 + - uid: 15318 + components: + - type: Transform + pos: 38.5,30.5 + parent: 2 + - uid: 15319 + components: + - type: Transform + pos: 37.5,30.5 + parent: 2 + - uid: 15320 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,28.5 + parent: 2 + - uid: 15321 + components: + - type: Transform + pos: 13.5,23.5 + parent: 2 + - uid: 15322 + components: + - type: Transform + pos: 12.5,29.5 + parent: 2 + - uid: 15323 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,35.5 + parent: 2 + - uid: 15324 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,35.5 + parent: 2 + - uid: 15325 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,35.5 + parent: 2 + - uid: 15326 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,36.5 + parent: 2 + - uid: 15327 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 73.5,40.5 + parent: 2 + - uid: 15328 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 82.5,35.5 + parent: 2 + - uid: 15329 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 82.5,33.5 + parent: 2 + - uid: 15330 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 84.5,33.5 + parent: 2 + - uid: 15332 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 84.5,35.5 + parent: 2 + - uid: 15333 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 87.5,34.5 + parent: 2 + - uid: 15334 + components: + - type: Transform + pos: 72.5,12.5 + parent: 2 +- proto: TableReinforcedGlass + entities: + - uid: 15335 + components: + - type: Transform + pos: 36.5,11.5 + parent: 2 +- proto: TableWood + entities: + - uid: 488 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 34.5,5.5 + parent: 2 + - uid: 7284 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.5,5.5 + parent: 2 + - uid: 15142 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,5.5 + parent: 2 + - uid: 15336 + components: + - type: Transform + pos: 30.5,16.5 + parent: 2 + - uid: 15337 + components: + - type: Transform + pos: 30.5,13.5 + parent: 2 + - uid: 15338 + components: + - type: Transform + pos: 17.5,14.5 + parent: 2 + - uid: 15339 + components: + - type: Transform + pos: 19.5,17.5 + parent: 2 + - uid: 15340 + components: + - type: Transform + pos: 23.5,13.5 + parent: 2 + - uid: 15341 + components: + - type: Transform + pos: 23.5,12.5 + parent: 2 + - uid: 15342 + components: + - type: Transform + pos: 23.5,11.5 + parent: 2 + - uid: 15343 + components: + - type: Transform + pos: 24.5,13.5 + parent: 2 + - uid: 15344 + components: + - type: Transform + pos: 24.5,12.5 + parent: 2 + - uid: 15345 + components: + - type: Transform + pos: 24.5,11.5 + parent: 2 + - uid: 15346 + components: + - type: Transform + pos: 1.5,60.5 + parent: 2 + - uid: 15347 + components: + - type: Transform + pos: 0.5,60.5 + parent: 2 + - uid: 15348 + components: + - type: Transform + pos: 0.5,59.5 + parent: 2 + - uid: 15349 + components: + - type: Transform + pos: 2.5,51.5 + parent: 2 + - uid: 15350 + components: + - type: Transform + pos: 6.5,72.5 + parent: 2 + - uid: 15351 + components: + - type: Transform + pos: 6.5,73.5 + parent: 2 + - uid: 15352 + components: + - type: Transform + pos: 8.5,79.5 + parent: 2 + - uid: 15353 + components: + - type: Transform + pos: 8.5,60.5 + parent: 2 + - uid: 15354 + components: + - type: Transform + pos: 9.5,60.5 + parent: 2 + - uid: 15355 + components: + - type: Transform + pos: 10.5,60.5 + parent: 2 + - uid: 15356 + components: + - type: Transform + pos: 14.5,59.5 + parent: 2 + - uid: 15357 + components: + - type: Transform + pos: 13.5,62.5 + parent: 2 + - uid: 15358 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,51.5 + parent: 2 + - uid: 15359 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 17.5,59.5 + parent: 2 + - uid: 15360 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 18.5,59.5 + parent: 2 + - uid: 15361 + components: + - type: Transform + pos: 17.5,51.5 + parent: 2 + - uid: 15362 + components: + - type: Transform + pos: 21.5,51.5 + parent: 2 + - uid: 15363 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 16.5,54.5 + parent: 2 + - uid: 15364 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 17.5,54.5 + parent: 2 + - uid: 15365 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,54.5 + parent: 2 + - uid: 15366 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,54.5 + parent: 2 + - uid: 15367 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,55.5 + parent: 2 + - uid: 15368 + components: + - type: Transform + pos: 16.5,56.5 + parent: 2 + - uid: 15369 + components: + - type: Transform + pos: 20.5,58.5 + parent: 2 + - uid: 15370 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,63.5 + parent: 2 + - uid: 18444 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,-35.5 + parent: 2 +- proto: TelecomServer + entities: + - uid: 15371 + components: + - type: Transform + pos: 25.5,2.5 + parent: 2 +- proto: TelecomServerCircuitboard + entities: + - uid: 15372 + components: + - type: Transform + pos: 29.652218,54.62316 + parent: 2 + - uid: 20195 + components: + - type: Transform + pos: 27.368704,-23.250366 + parent: 2 + - uid: 20196 + components: + - type: Transform + pos: 27.697762,-23.399708 + parent: 2 + - uid: 20197 + components: + - type: Transform + pos: 27.44349,-23.50425 + parent: 2 + - uid: 20198 + components: + - type: Transform + pos: 27.667849,-23.698395 + parent: 2 +- proto: TelecomServerFilledCargo + entities: + - uid: 17877 + components: + - type: Transform + pos: 33.5,-17.5 + parent: 2 +- proto: TelecomServerFilledCommand + entities: + - uid: 18127 + components: + - type: Transform + pos: 27.5,-17.5 + parent: 2 +- proto: TelecomServerFilledCommon + entities: + - uid: 18129 + components: + - type: Transform + pos: 27.5,-16.5 + parent: 2 +- proto: TelecomServerFilledEngineering + entities: + - uid: 18045 + components: + - type: Transform + pos: 33.5,-16.5 + parent: 2 +- proto: TelecomServerFilledMedical + entities: + - uid: 18126 + components: + - type: Transform + pos: 28.5,-16.5 + parent: 2 +- proto: TelecomServerFilledScience + entities: + - uid: 17884 + components: + - type: Transform + pos: 32.5,-16.5 + parent: 2 +- proto: TelecomServerFilledSecurity + entities: + - uid: 17882 + components: + - type: Transform + pos: 28.5,-17.5 + parent: 2 +- proto: TelecomServerFilledService + entities: + - uid: 18125 + components: + - type: Transform + pos: 32.5,-17.5 + parent: 2 +- proto: TelescopicShield + entities: + - uid: 15373 + components: + - type: Transform + pos: -19.484163,70.37912 + parent: 2 +- proto: TeslaGroundingRod + entities: + - uid: 15374 + components: + - type: Transform + pos: -20.5,33.5 + parent: 2 + - uid: 15375 + components: + - type: Transform + pos: -18.5,35.5 + parent: 2 +- proto: ThrusterMachineCircuitboard + entities: + - uid: 15376 + components: + - type: Transform + pos: -26.281868,43.435417 + parent: 2 +- proto: ThrusterUnanchored + entities: + - uid: 15377 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,45.5 + parent: 2 + - uid: 15378 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,46.5 + parent: 2 +- proto: TimerTrigger + entities: + - uid: 15379 + components: + - type: Transform + pos: 41.394043,7.857434 + parent: 2 + - uid: 15380 + components: + - type: Transform + pos: 41.57338,7.857434 + parent: 2 + - uid: 15381 + components: + - type: Transform + pos: 41.752712,7.8753543 + parent: 2 + - uid: 15382 + components: + - type: Transform + pos: 41.411976,7.678222 + parent: 2 + - uid: 15383 + components: + - type: Transform + pos: 41.73478,7.6961427 + parent: 2 +- proto: TintedWindow + entities: + - uid: 15384 + components: + - type: Transform + pos: 14.5,56.5 + parent: 2 +- proto: ToiletEmpty + entities: + - uid: 7127 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 74.5,23.5 + parent: 2 + - uid: 15385 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -35.5,60.5 + parent: 2 + - uid: 15386 + components: + - type: Transform + pos: -0.5,68.5 + parent: 2 +- proto: ToolboxArtisticFilled + entities: + - uid: 15388 + components: + - type: Transform + pos: 23.496847,11.574278 + parent: 2 + - uid: 15389 + components: + - type: Transform + pos: 6.4786124,72.54033 + parent: 2 + - uid: 15390 + components: + - type: Transform + pos: 20.446404,58.720234 + parent: 2 + - uid: 15391 + components: + - type: Transform + pos: 20.671005,58.46773 + parent: 2 +- proto: ToolboxElectricalFilled + entities: + - uid: 15392 + components: + - type: Transform + pos: -19.511765,64.77958 + parent: 2 + - uid: 15393 + components: + - type: Transform + pos: 55.585693,18.510311 + parent: 2 + - uid: 15394 + components: + - type: Transform + pos: 61.460552,31.474577 + parent: 2 + - uid: 15395 + components: + - type: Transform + pos: 61.504906,31.743872 + parent: 2 + - uid: 19797 + components: + - type: Transform + pos: 35.666702,-38.320637 + parent: 2 + - uid: 20219 + components: + - type: Transform + pos: 34.641346,-24.330832 + parent: 2 +- proto: ToolboxEmergency + entities: + - uid: 15396 + components: + - type: Transform + pos: -19.511765,64.70789 + parent: 2 +- proto: ToolboxEmergencyFilled + entities: + - uid: 15397 + components: + - type: Transform + pos: 67.398415,1.5101199 + parent: 2 + - uid: 15398 + components: + - type: Transform + pos: 67.59568,1.707253 + parent: 2 +- proto: ToolboxGoldFilled + entities: + - uid: 15399 + components: + - type: Transform + pos: 31.472889,53.963844 + parent: 2 + - uid: 19799 + components: + - type: Transform + pos: 26.492853,-33.517773 + parent: 2 +- proto: ToolboxMechanical + entities: + - uid: 15400 + components: + - type: Transform + pos: -19.475897,64.58244 + parent: 2 +- proto: ToolboxMechanicalFilled + entities: + - uid: 15401 + components: + - type: Transform + pos: 55.40636,18.295258 + parent: 2 + - uid: 15402 + components: + - type: Transform + pos: 50.61312,27.773558 + parent: 2 + - uid: 15403 + components: + - type: Transform + pos: 50.45172,27.576424 + parent: 2 + - uid: 15404 + components: + - type: Transform + pos: 58.658024,28.801037 + parent: 2 + - uid: 15405 + components: + - type: Transform + pos: 58.514557,28.65767 + parent: 2 + - uid: 15406 + components: + - type: Transform + pos: 58.37109,28.460535 + parent: 2 + - uid: 15407 + components: + - type: Transform + pos: 73.46528,62.57881 + parent: 2 + - uid: 15408 + components: + - type: Transform + pos: 71.47788,42.5652 + parent: 2 + - uid: 15409 + components: + - type: Transform + pos: 84.53903,33.43942 + parent: 2 + - uid: 19777 + components: + - type: Transform + pos: 26.5,-33.5 + parent: 2 + - uid: 19798 + components: + - type: Transform + pos: 35.469265,-38.535694 + parent: 2 + - uid: 20220 + components: + - type: Transform + pos: 34.416985,-24.524979 + parent: 2 +- proto: ToyAi + entities: + - uid: 19713 + components: + - type: Transform + pos: 30.48641,-44.35624 + parent: 2 + - uid: 19714 + components: + - type: Transform + pos: 31.481829,-45.373753 + parent: 2 + - uid: 19715 + components: + - type: Transform + pos: 29.482334,-45.373753 + parent: 2 +- proto: ToyFigurineBartender + entities: + - uid: 20348 + components: + - type: Transform + parent: 20345 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ToyFigurineClown + entities: + - uid: 767 + components: + - type: Transform + parent: 742 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ToyFigurineJanitor + entities: + - uid: 12709 + components: + - type: Transform + parent: 7004 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ToyRubberDuck + entities: + - uid: 15411 + components: + - type: Transform + pos: 0.96490765,73.09096 + parent: 2 +- proto: TrashBananaPeelExplosive + entities: + - uid: 15413 + components: + - type: Transform + pos: 28.482716,61.52888 + parent: 2 +- proto: TwoWayLever + entities: + - uid: 15414 + components: + - type: Transform + pos: 8.5,4.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 7265: + - Left: Forward + - Right: Reverse + - Middle: Off + 7266: + - Left: Forward + - Right: Reverse + - Middle: Off + 7267: + - Left: Forward + - Right: Reverse + - Middle: Off + 7273: + - Left: Forward + - Right: Reverse + - Middle: Off + 7272: + - Left: Forward + - Right: Reverse + - Middle: Off + 7271: + - Left: Forward + - Right: Reverse + - Middle: Off + 7270: + - Left: Forward + - Right: Reverse + - Middle: Off + 7269: + - Left: Forward + - Right: Reverse + - Middle: Off + 7268: + - Left: Forward + - Right: Reverse + - Middle: Off + 7274: + - Left: Forward + - Right: Reverse + - Middle: Off + - uid: 15415 + components: + - type: Transform + pos: 1.5,4.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 7264: + - Left: Forward + - Right: Reverse + - Middle: Off + 7263: + - Left: Forward + - Right: Reverse + - Middle: Off + 7262: + - Left: Forward + - Right: Reverse + - Middle: Off + 7261: + - Left: Forward + - Right: Reverse + - Middle: Off + 7254: + - Left: Forward + - Right: Reverse + - Middle: Off + 7255: + - Left: Forward + - Right: Reverse + - Middle: Off + 7256: + - Left: Forward + - Right: Reverse + - Middle: Off + - uid: 15416 + components: + - type: Transform + pos: -0.5,4.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 7253: + - Left: Forward + - Right: Reverse + - Middle: Off + 7252: + - Left: Forward + - Right: Reverse + - Middle: Off + 7251: + - Left: Forward + - Right: Reverse + - Middle: Off + 7257: + - Left: Forward + - Right: Reverse + - Middle: Off + 7258: + - Left: Forward + - Right: Reverse + - Middle: Off + 7259: + - Left: Forward + - Right: Reverse + - Middle: Off + 7260: + - Left: Forward + - Right: Reverse + - Middle: Off +- proto: UnfinishedMachineFrame + entities: + - uid: 20260 + components: + - type: Transform + pos: 31.5,-14.5 + parent: 2 + - uid: 20261 + components: + - type: Transform + pos: 29.5,-14.5 + parent: 2 + - uid: 20266 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,-44.5 + parent: 2 + - uid: 20267 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.5,-46.5 + parent: 2 +- proto: UniformPrinter + entities: + - uid: 15417 + components: + - type: Transform + pos: 78.5,40.5 + parent: 2 +- proto: Vaccinator + entities: + - uid: 15418 + components: + - type: Transform + pos: 27.5,45.5 + parent: 2 +- proto: VendingBarDrobe + entities: + - uid: 15419 + components: + - type: Transform + pos: 62.5,42.5 + parent: 2 +- proto: VendingMachineBooze + entities: + - uid: 14863 + components: + - type: Transform + pos: 75.5,27.5 + parent: 2 + - uid: 15420 + components: + - type: Transform + pos: 47.5,59.5 + parent: 2 + - uid: 15421 + components: + - type: Transform + pos: 62.5,41.5 + parent: 2 +- proto: VendingMachineCargoDrobe + entities: + - uid: 15422 + components: + - type: Transform + pos: -0.5,12.5 + parent: 2 +- proto: VendingMachineCart + entities: + - uid: 15423 + components: + - type: Transform + pos: 74.5,38.5 + parent: 2 +- proto: VendingMachineChapel + entities: + - uid: 15424 + components: + - type: Transform + pos: 8.5,61.5 + parent: 2 +- proto: VendingMachineChefDrobe + entities: + - uid: 15425 + components: + - type: Transform + pos: 53.5,51.5 + parent: 2 +- proto: VendingMachineChefvend + entities: + - uid: 15426 + components: + - type: Transform + pos: 57.5,46.5 + parent: 2 +- proto: VendingMachineChemDrobe + entities: + - uid: 15427 + components: + - type: Transform + pos: 10.5,23.5 + parent: 2 +- proto: VendingMachineChemicals + entities: + - uid: 15428 + components: + - type: Transform + pos: 14.5,26.5 + parent: 2 +- proto: VendingMachineCigs + entities: + - uid: 15429 + components: + - type: Transform + pos: 35.5,32.5 + parent: 2 + - uid: 15430 + components: + - type: Transform + pos: 68.5,21.5 + parent: 2 + - uid: 19497 + components: + - type: Transform + pos: -27.5,69.5 + parent: 2 +- proto: VendingMachineClothing + entities: + - uid: 15431 + components: + - type: Transform + pos: 20.5,12.5 + parent: 2 +- proto: VendingMachineCoffee + entities: + - uid: 15432 + components: + - type: Transform + pos: 30.5,5.5 + parent: 2 + - uid: 15433 + components: + - type: Transform + pos: 25.5,51.5 + parent: 2 + - uid: 17007 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 72.5,26.5 + parent: 2 +- proto: VendingMachineCourierDrobe + entities: + - uid: 15434 + components: + - type: Transform + pos: -5.5,8.5 + parent: 2 +- proto: VendingMachineCuraDrobe + entities: + - uid: 15435 + components: + - type: Transform + pos: 16.5,58.5 + parent: 2 +- proto: VendingMachineDetDrobe + entities: + - uid: 15436 + components: + - type: Transform + pos: 1.5,57.5 + parent: 2 +- proto: VendingMachineDinnerware + entities: + - uid: 15437 + components: + - type: Transform + pos: 56.5,46.5 + parent: 2 +- proto: VendingMachineDonut + entities: + - uid: 15438 + components: + - type: Transform + pos: -6.5,17.5 + parent: 2 +- proto: VendingMachineEngiDrobe + entities: + - uid: 15439 + components: + - type: Transform + pos: -11.5,41.5 + parent: 2 +- proto: VendingMachineEngivend + entities: + - uid: 15440 + components: + - type: Transform + pos: -11.5,40.5 + parent: 2 +- proto: VendingMachineGames + entities: + - uid: 15442 + components: + - type: Transform + pos: 19.5,51.5 + parent: 2 + - uid: 15443 + components: + - type: Transform + pos: 38.5,44.5 + parent: 2 + - uid: 15444 + components: + - type: Transform + pos: 36.5,41.5 + parent: 2 +- proto: VendingMachineGeneDrobe + entities: + - uid: 15445 + components: + - type: Transform + pos: 25.5,23.5 + parent: 2 +- proto: VendingMachineHydrobe + entities: + - uid: 15446 + components: + - type: Transform + pos: 50.5,48.5 + parent: 2 +- proto: VendingMachineJaniDrobe + entities: + - uid: 15447 + components: + - type: Transform + pos: 39.5,51.5 + parent: 2 +- proto: VendingMachineLawDrobe + entities: + - uid: 15448 + components: + - type: Transform + pos: -24.5,53.5 + parent: 2 +- proto: VendingMachineMedical + entities: + - uid: 15449 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,31.5 + parent: 2 + - uid: 15450 + components: + - type: Transform + pos: -3.5,60.5 + parent: 2 + - uid: 15451 + components: + - type: Transform + pos: 3.5,37.5 + parent: 2 +- proto: VendingMachineMediDrobe + entities: + - uid: 15453 + components: + - type: Transform + pos: 6.5,41.5 + parent: 2 +- proto: VendingMachineNutri + entities: + - uid: 15454 + components: + - type: Transform + pos: 10.5,74.5 + parent: 2 + - uid: 15455 + components: + - type: Transform + pos: 43.5,37.5 + parent: 2 +- proto: VendingMachineRestockBooze + entities: + - uid: 15456 + components: + - type: Transform + pos: 61.56243,44.527573 + parent: 2 + - uid: 15457 + components: + - type: Transform + pos: 47.757805,60.169292 + parent: 2 +- proto: VendingMachineRestockMedical + entities: + - uid: 15458 + components: + - type: Transform + pos: 5.2875233,37.73525 + parent: 2 + - type: Physics + angularDamping: 0 + linearDamping: 0 +- proto: VendingMachineRoboDrobe + entities: + - uid: 15459 + components: + - type: Transform + pos: 60.5,20.5 + parent: 2 +- proto: VendingMachineRobotics + entities: + - uid: 15460 + components: + - type: Transform + pos: 59.5,18.5 + parent: 2 + - uid: 15461 + components: + - type: Transform + pos: 52.5,27.5 + parent: 2 +- proto: VendingMachineSalvage + entities: + - uid: 15463 + components: + - type: Transform + pos: -15.5,9.5 + parent: 2 +- proto: VendingMachineSciDrobe + entities: + - uid: 15464 + components: + - type: Transform + pos: 46.5,22.5 + parent: 2 +- proto: VendingMachineSec + entities: + - uid: 15465 + components: + - type: Transform + pos: -25.5,68.5 + parent: 2 + - uid: 15466 + components: + - type: Transform + pos: -21.5,69.5 + parent: 2 +- proto: VendingMachineSecDrobe + entities: + - uid: 15468 + components: + - type: Transform + pos: -3.5,31.5 + parent: 2 + - uid: 15469 + components: + - type: Transform + pos: -6.5,15.5 + parent: 2 + - uid: 15470 + components: + - type: Transform + pos: -6.5,15.5 + parent: 2 + - uid: 15471 + components: + - type: Transform + pos: -21.5,70.5 + parent: 2 + - uid: 15472 + components: + - type: Transform + pos: 43.5,13.5 + parent: 2 + - uid: 15473 + components: + - type: Transform + pos: 7.5,26.5 + parent: 2 + - uid: 15474 + components: + - type: Transform + pos: 62.5,56.5 + parent: 2 + - uid: 15475 + components: + - type: Transform + pos: 69.5,13.5 + parent: 2 +- proto: VendingMachineSeeds + entities: + - uid: 15476 + components: + - type: Transform + pos: 43.5,38.5 + parent: 2 +- proto: VendingMachineSeedsUnlocked + entities: + - uid: 13974 + components: + - type: Transform + pos: -31.5,77.5 + parent: 2 + - uid: 15477 + components: + - type: Transform + pos: 10.5,75.5 + parent: 2 +- proto: VendingMachineSyndieDrobe + entities: + - uid: 12786 + components: + - type: Transform + pos: 39.5,65.5 + parent: 2 +- proto: VendingMachineTankDispenserEngineering + entities: + - uid: 15478 + components: + - type: Transform + pos: -13.5,28.5 + parent: 2 + - uid: 15479 + components: + - type: Transform + pos: 41.5,11.5 + parent: 2 + - uid: 15480 + components: + - type: Transform + pos: -13.5,27.5 + parent: 2 +- proto: VendingMachineTankDispenserEVA + entities: + - uid: 15481 + components: + - type: Transform + pos: -12.5,18.5 + parent: 2 + - uid: 15482 + components: + - type: Transform + pos: -21.5,68.5 + parent: 2 + - uid: 15483 + components: + - type: Transform + pos: 70.5,46.5 + parent: 2 + - uid: 15484 + components: + - type: Transform + pos: -5.5,38.5 + parent: 2 + - uid: 15485 + components: + - type: Transform + pos: -17.5,-7.5 + parent: 2 +- proto: VendingMachineTheater + entities: + - uid: 15486 + components: + - type: Transform + pos: 38.5,43.5 + parent: 2 +- proto: VendingMachineVendomat + entities: + - uid: 15487 + components: + - type: Transform + pos: 41.5,15.5 + parent: 2 +- proto: VendingMachineWallMedical + entities: + - uid: 15489 + components: + - type: Transform + pos: 27.5,36.5 + parent: 2 +- proto: VendingMachineWinter + entities: + - uid: 15490 + components: + - type: Transform + pos: 22.5,8.5 + parent: 2 +- proto: VendingMachineYouTool + entities: + - uid: 15491 + components: + - type: Transform + pos: 62.5,31.5 + parent: 2 + - uid: 15492 + components: + - type: Transform + pos: -11.5,39.5 + parent: 2 +- proto: WallmountTelescreen + entities: + - uid: 15494 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 73.5,27.5 + parent: 2 + - uid: 15495 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 46.5,13.5 + parent: 2 + - uid: 15496 + components: + - type: Transform + pos: 0.5,60.5 + parent: 2 + - uid: 15499 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 36.5,-2.5 + parent: 2 + - uid: 20280 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,-39.5 + parent: 2 + - uid: 20281 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-45.5 + parent: 2 + - uid: 20282 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 26.5,-45.5 + parent: 2 +- proto: WallmountTelevision + entities: + - uid: 15500 + components: + - type: Transform + pos: 36.5,42.5 + parent: 2 + - uid: 15501 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 63.5,38.5 + parent: 2 +- proto: WallmountTelevisionFrame + entities: + - uid: 5811 + components: + - type: Transform + pos: 69.5,32.5 + parent: 2 +- proto: WallPlastitanium + entities: + - uid: 15502 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -40.5,62.5 + parent: 2 + - uid: 15503 + components: + - type: Transform + pos: 18.5,79.5 + parent: 2 + - uid: 15504 + components: + - type: Transform + pos: 17.5,-0.5 + parent: 2 + - uid: 17015 + components: + - type: Transform + pos: 82.5,14.5 + parent: 2 + - uid: 18936 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 54.5,64.5 + parent: 2 +- proto: WallReinforced + entities: + - uid: 90 + components: + - type: Transform + pos: 20.5,-31.5 + parent: 2 + - uid: 308 + components: + - type: Transform + pos: 22.5,-27.5 + parent: 2 + - uid: 309 + components: + - type: Transform + pos: 20.5,-28.5 + parent: 2 + - uid: 451 + components: + - type: Transform + pos: 24.5,-46.5 + parent: 2 + - uid: 472 + components: + - type: Transform + pos: 34.5,-45.5 + parent: 2 + - uid: 511 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,66.5 + parent: 2 + - uid: 574 + components: + - type: Transform + pos: 20.5,-30.5 + parent: 2 + - uid: 860 + components: + - type: Transform + pos: 20.5,-27.5 + parent: 2 + - uid: 882 + components: + - type: Transform + pos: 67.5,31.5 + parent: 2 + - uid: 1595 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,68.5 + parent: 2 + - uid: 1822 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,70.5 + parent: 2 + - uid: 1823 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,69.5 + parent: 2 + - uid: 3472 + components: + - type: Transform + pos: 24.5,-40.5 + parent: 2 + - uid: 3473 + components: + - type: Transform + pos: 25.5,-40.5 + parent: 2 + - uid: 3474 + components: + - type: Transform + pos: 28.5,-40.5 + parent: 2 + - uid: 3475 + components: + - type: Transform + pos: 31.5,-39.5 + parent: 2 + - uid: 3476 + components: + - type: Transform + pos: 32.5,-39.5 + parent: 2 + - uid: 3477 + components: + - type: Transform + pos: 24.5,-38.5 + parent: 2 + - uid: 3478 + components: + - type: Transform + pos: 24.5,-37.5 + parent: 2 + - uid: 3479 + components: + - type: Transform + pos: 26.5,-39.5 + parent: 2 + - uid: 3480 + components: + - type: Transform + pos: 25.5,-39.5 + parent: 2 + - uid: 3481 + components: + - type: Transform + pos: 23.5,-37.5 + parent: 2 + - uid: 3484 + components: + - type: Transform + pos: 28.5,-41.5 + parent: 2 + - uid: 3486 + components: + - type: Transform + pos: 24.5,-39.5 + parent: 2 + - uid: 3669 + components: + - type: Transform + pos: 29.5,-41.5 + parent: 2 + - uid: 3670 + components: + - type: Transform + pos: 31.5,-41.5 + parent: 2 + - uid: 3671 + components: + - type: Transform + pos: 32.5,-41.5 + parent: 2 + - uid: 3672 + components: + - type: Transform + pos: 24.5,-44.5 + parent: 2 + - uid: 3673 + components: + - type: Transform + pos: 32.5,-40.5 + parent: 2 + - uid: 3674 + components: + - type: Transform + pos: 23.5,-35.5 + parent: 2 + - uid: 3675 + components: + - type: Transform + pos: 26.5,-44.5 + parent: 2 + - uid: 3676 + components: + - type: Transform + pos: 24.5,-45.5 + parent: 2 + - uid: 3677 + components: + - type: Transform + pos: 26.5,-45.5 + parent: 2 + - uid: 3678 + components: + - type: Transform + pos: 26.5,-47.5 + parent: 2 + - uid: 3679 + components: + - type: Transform + pos: 34.5,-46.5 + parent: 2 + - uid: 3683 + components: + - type: Transform + pos: 26.5,-43.5 + parent: 2 + - uid: 3684 + components: + - type: Transform + pos: 36.5,-41.5 + parent: 2 + - uid: 3685 + components: + - type: Transform + pos: 36.5,-42.5 + parent: 2 + - uid: 3686 + components: + - type: Transform + pos: 26.5,-46.5 + parent: 2 + - uid: 3687 + components: + - type: Transform + pos: 34.5,-44.5 + parent: 2 + - uid: 3688 + components: + - type: Transform + pos: 36.5,-43.5 + parent: 2 + - uid: 3689 + components: + - type: Transform + pos: 36.5,-44.5 + parent: 2 + - uid: 3690 + components: + - type: Transform + pos: 36.5,-45.5 + parent: 2 + - uid: 3691 + components: + - type: Transform + pos: 24.5,-42.5 + parent: 2 + - uid: 3692 + components: + - type: Transform + pos: 24.5,-43.5 + parent: 2 + - uid: 3693 + components: + - type: Transform + pos: 23.5,-34.5 + parent: 2 + - uid: 3694 + components: + - type: Transform + pos: 23.5,-33.5 + parent: 2 + - uid: 3696 + components: + - type: Transform + pos: 23.5,-31.5 + parent: 2 + - uid: 3698 + components: + - type: Transform + pos: 27.5,-31.5 + parent: 2 + - uid: 3699 + components: + - type: Transform + pos: 26.5,-34.5 + parent: 2 + - uid: 3700 + components: + - type: Transform + pos: 25.5,-34.5 + parent: 2 + - uid: 3701 + components: + - type: Transform + pos: 24.5,-34.5 + parent: 2 + - uid: 3723 + components: + - type: Transform + pos: 33.5,-51.5 + parent: 2 + - uid: 3724 + components: + - type: Transform + pos: 32.5,-51.5 + parent: 2 + - uid: 3725 + components: + - type: Transform + pos: 31.5,-51.5 + parent: 2 + - uid: 3726 + components: + - type: Transform + pos: 30.5,-51.5 + parent: 2 + - uid: 3727 + components: + - type: Transform + pos: 29.5,-51.5 + parent: 2 + - uid: 3728 + components: + - type: Transform + pos: 28.5,-51.5 + parent: 2 + - uid: 3729 + components: + - type: Transform + pos: 27.5,-51.5 + parent: 2 + - uid: 3730 + components: + - type: Transform + pos: 26.5,-51.5 + parent: 2 + - uid: 3731 + components: + - type: Transform + pos: 27.5,-49.5 + parent: 2 + - uid: 3732 + components: + - type: Transform + pos: 28.5,-49.5 + parent: 2 + - uid: 3733 + components: + - type: Transform + pos: 29.5,-49.5 + parent: 2 + - uid: 3734 + components: + - type: Transform + pos: 30.5,-49.5 + parent: 2 + - uid: 3735 + components: + - type: Transform + pos: 36.5,-49.5 + parent: 2 + - uid: 3736 + components: + - type: Transform + pos: 36.5,-47.5 + parent: 2 + - uid: 3737 + components: + - type: Transform + pos: 35.5,-51.5 + parent: 2 + - uid: 3738 + components: + - type: Transform + pos: 34.5,-51.5 + parent: 2 + - uid: 3739 + components: + - type: Transform + pos: 34.5,-47.5 + parent: 2 + - uid: 3740 + components: + - type: Transform + pos: 34.5,-48.5 + parent: 2 + - uid: 3741 + components: + - type: Transform + pos: 33.5,-48.5 + parent: 2 + - uid: 3742 + components: + - type: Transform + pos: 33.5,-49.5 + parent: 2 + - uid: 3743 + components: + - type: Transform + pos: 26.5,-48.5 + parent: 2 + - uid: 3744 + components: + - type: Transform + pos: 27.5,-48.5 + parent: 2 + - uid: 3745 + components: + - type: Transform + pos: 33.5,-41.5 + parent: 2 + - uid: 3746 + components: + - type: Transform + pos: 33.5,-42.5 + parent: 2 + - uid: 3747 + components: + - type: Transform + pos: 34.5,-42.5 + parent: 2 + - uid: 3748 + components: + - type: Transform + pos: 34.5,-43.5 + parent: 2 + - uid: 3749 + components: + - type: Transform + pos: 27.5,-41.5 + parent: 2 + - uid: 3750 + components: + - type: Transform + pos: 27.5,-42.5 + parent: 2 + - uid: 3751 + components: + - type: Transform + pos: 26.5,-42.5 + parent: 2 + - uid: 3752 + components: + - type: Transform + pos: 24.5,-41.5 + parent: 2 + - uid: 3758 + components: + - type: Transform + pos: 24.5,-48.5 + parent: 2 + - uid: 3763 + components: + - type: Transform + pos: 24.5,-47.5 + parent: 2 + - uid: 4720 + components: + - type: Transform + pos: 24.5,-50.5 + parent: 2 + - uid: 4721 + components: + - type: Transform + pos: 31.5,-49.5 + parent: 2 + - uid: 4722 + components: + - type: Transform + pos: 36.5,-46.5 + parent: 2 + - uid: 4723 + components: + - type: Transform + pos: 24.5,-49.5 + parent: 2 + - uid: 4724 + components: + - type: Transform + pos: 32.5,-49.5 + parent: 2 + - uid: 4746 + components: + - type: Transform + pos: 36.5,-48.5 + parent: 2 + - uid: 4758 + components: + - type: Transform + pos: 37.5,-33.5 + parent: 2 + - uid: 4759 + components: + - type: Transform + pos: 37.5,-34.5 + parent: 2 + - uid: 4767 + components: + - type: Transform + pos: 31.5,-22.5 + parent: 2 + - uid: 4768 + components: + - type: Transform + pos: 31.5,-21.5 + parent: 2 + - uid: 5082 + components: + - type: Transform + pos: -12.5,69.5 + parent: 2 + - uid: 5206 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,68.5 + parent: 2 + - uid: 5750 + components: + - type: Transform + pos: -17.5,72.5 + parent: 2 + - uid: 5751 + components: + - type: Transform + pos: -18.5,72.5 + parent: 2 + - uid: 5752 + components: + - type: Transform + pos: -19.5,72.5 + parent: 2 + - uid: 5753 + components: + - type: Transform + pos: -16.5,72.5 + parent: 2 + - uid: 5754 + components: + - type: Transform + pos: -15.5,72.5 + parent: 2 + - uid: 5755 + components: + - type: Transform + pos: -14.5,72.5 + parent: 2 + - uid: 5756 + components: + - type: Transform + pos: -13.5,72.5 + parent: 2 + - uid: 5759 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,74.5 + parent: 2 + - uid: 5791 + components: + - type: Transform + pos: 35.5,-23.5 + parent: 2 + - uid: 5796 + components: + - type: Transform + pos: 35.5,-24.5 + parent: 2 + - uid: 5797 + components: + - type: Transform + pos: 35.5,-25.5 + parent: 2 + - uid: 6053 + components: + - type: Transform + pos: -4.5,71.5 + parent: 2 + - uid: 6054 + components: + - type: Transform + pos: -4.5,70.5 + parent: 2 + - uid: 6056 + components: + - type: Transform + pos: -12.5,71.5 + parent: 2 + - uid: 6192 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,73.5 + parent: 2 + - uid: 6331 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,72.5 + parent: 2 + - uid: 6461 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,71.5 + parent: 2 + - uid: 6579 + components: + - type: Transform + pos: 36.5,-40.5 + parent: 2 + - uid: 6670 + components: + - type: Transform + pos: 35.5,-40.5 + parent: 2 + - uid: 6671 + components: + - type: Transform + pos: 25.5,-23.5 + parent: 2 + - uid: 6672 + components: + - type: Transform + pos: 33.5,-27.5 + parent: 2 + - uid: 6673 + components: + - type: Transform + pos: 35.5,-30.5 + parent: 2 + - uid: 6676 + components: + - type: Transform + pos: 37.5,-30.5 + parent: 2 + - uid: 6678 + components: + - type: Transform + pos: 32.5,-13.5 + parent: 2 + - uid: 6679 + components: + - type: Transform + pos: 33.5,-13.5 + parent: 2 + - uid: 6680 + components: + - type: Transform + pos: 33.5,-14.5 + parent: 2 + - uid: 6681 + components: + - type: Transform + pos: 21.5,-50.5 + parent: 2 + - uid: 6682 + components: + - type: Transform + pos: 28.5,-13.5 + parent: 2 + - uid: 6683 + components: + - type: Transform + pos: 27.5,-13.5 + parent: 2 + - uid: 6684 + components: + - type: Transform + pos: 27.5,-14.5 + parent: 2 + - uid: 6690 + components: + - type: Transform + pos: 37.5,-37.5 + parent: 2 + - uid: 6691 + components: + - type: Transform + pos: 34.5,-39.5 + parent: 2 + - uid: 6692 + components: + - type: Transform + pos: 33.5,-38.5 + parent: 2 + - uid: 6694 + components: + - type: Transform + pos: 33.5,-30.5 + parent: 2 + - uid: 6696 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,-29.5 + parent: 2 + - uid: 6697 + components: + - type: Transform + pos: 27.5,-30.5 + parent: 2 + - uid: 6698 + components: + - type: Transform + pos: 26.5,-30.5 + parent: 2 + - uid: 6699 + components: + - type: Transform + pos: 25.5,-30.5 + parent: 2 + - uid: 6700 + components: + - type: Transform + pos: 24.5,-30.5 + parent: 2 + - uid: 6701 + components: + - type: Transform + pos: 23.5,-30.5 + parent: 2 + - uid: 6702 + components: + - type: Transform + pos: 37.5,-32.5 + parent: 2 + - uid: 6703 + components: + - type: Transform + pos: 26.5,-14.5 + parent: 2 + - uid: 6704 + components: + - type: Transform + pos: 26.5,-15.5 + parent: 2 + - uid: 6705 + components: + - type: Transform + pos: 26.5,-16.5 + parent: 2 + - uid: 6706 + components: + - type: Transform + pos: 26.5,-17.5 + parent: 2 + - uid: 6707 + components: + - type: Transform + pos: 26.5,-18.5 + parent: 2 + - uid: 6708 + components: + - type: Transform + pos: 26.5,-19.5 + parent: 2 + - uid: 6709 + components: + - type: Transform + pos: 26.5,-20.5 + parent: 2 + - uid: 6710 + components: + - type: Transform + pos: 26.5,-21.5 + parent: 2 + - uid: 6711 + components: + - type: Transform + pos: 26.5,-22.5 + parent: 2 + - uid: 6712 + components: + - type: Transform + pos: 25.5,-22.5 + parent: 2 + - uid: 6713 + components: + - type: Transform + pos: 34.5,-15.5 + parent: 2 + - uid: 6714 + components: + - type: Transform + pos: 34.5,-16.5 + parent: 2 + - uid: 6715 + components: + - type: Transform + pos: 34.5,-17.5 + parent: 2 + - uid: 6716 + components: + - type: Transform + pos: 34.5,-18.5 + parent: 2 + - uid: 6717 + components: + - type: Transform + pos: 34.5,-19.5 + parent: 2 + - uid: 6718 + components: + - type: Transform + pos: 34.5,-20.5 + parent: 2 + - uid: 6719 + components: + - type: Transform + pos: 34.5,-21.5 + parent: 2 + - uid: 6720 + components: + - type: Transform + pos: 34.5,-22.5 + parent: 2 + - uid: 6735 + components: + - type: Transform + pos: 37.5,-35.5 + parent: 2 + - uid: 6736 + components: + - type: Transform + pos: 35.5,-22.5 + parent: 2 + - uid: 6750 + components: + - type: Transform + pos: 35.5,-26.5 + parent: 2 + - uid: 6761 + components: + - type: Transform + pos: 34.5,-26.5 + parent: 2 + - uid: 6770 + components: + - type: Transform + pos: 33.5,-26.5 + parent: 2 + - uid: 6771 + components: + - type: Transform + pos: 31.5,-34.5 + parent: 2 + - uid: 6784 + components: + - type: Transform + pos: 22.5,-53.5 + parent: 2 + - uid: 7241 + components: + - type: Transform + pos: 73.5,25.5 + parent: 2 + - uid: 7401 + components: + - type: Transform + pos: 21.5,-52.5 + parent: 2 + - uid: 8113 + components: + - type: Transform + pos: 73.5,23.5 + parent: 2 + - uid: 8387 + components: + - type: Transform + pos: 37.5,-0.5 + parent: 2 + - uid: 8389 + components: + - type: Transform + pos: 34.5,-14.5 + parent: 2 + - uid: 8390 + components: + - type: Transform + pos: 21.5,-51.5 + parent: 2 + - uid: 8392 + components: + - type: Transform + pos: 21.5,-53.5 + parent: 2 + - uid: 8394 + components: + - type: Transform + pos: 22.5,-54.5 + parent: 2 + - uid: 8938 + components: + - type: Transform + pos: 20.5,-33.5 + parent: 2 + - uid: 8939 + components: + - type: Transform + pos: 20.5,-32.5 + parent: 2 + - uid: 8940 + components: + - type: Transform + pos: 22.5,-24.5 + parent: 2 + - uid: 8941 + components: + - type: Transform + pos: 22.5,-22.5 + parent: 2 + - uid: 9056 + components: + - type: Transform + pos: 22.5,-23.5 + parent: 2 + - uid: 9059 + components: + - type: Transform + pos: 22.5,-20.5 + parent: 2 + - uid: 9179 + components: + - type: Transform + pos: 37.5,0.5 + parent: 2 + - uid: 9180 + components: + - type: Transform + pos: 37.5,-16.5 + parent: 2 + - uid: 9181 + components: + - type: Transform + pos: 22.5,-19.5 + parent: 2 + - uid: 9182 + components: + - type: Transform + pos: 21.5,-45.5 + parent: 2 + - uid: 9222 + components: + - type: Transform + pos: 24.5,-54.5 + parent: 2 + - uid: 9240 + components: + - type: Transform + pos: 39.5,-45.5 + parent: 2 + - uid: 9247 + components: + - type: Transform + pos: 28.5,-54.5 + parent: 2 + - uid: 9248 + components: + - type: Transform + pos: 23.5,-54.5 + parent: 2 + - uid: 9249 + components: + - type: Transform + pos: 39.5,-51.5 + parent: 2 + - uid: 9305 + components: + - type: Transform + pos: 39.5,-41.5 + parent: 2 + - uid: 9362 + components: + - type: Transform + pos: 20.5,-37.5 + parent: 2 + - uid: 11113 + components: + - type: Transform + pos: 23.5,-14.5 + parent: 2 + - uid: 11114 + components: + - type: Transform + pos: 23.5,-16.5 + parent: 2 + - uid: 11115 + components: + - type: Transform + pos: 22.5,-26.5 + parent: 2 + - uid: 11116 + components: + - type: Transform + pos: 32.5,-26.5 + parent: 2 + - uid: 11117 + components: + - type: Transform + pos: 28.5,-27.5 + parent: 2 + - uid: 11118 + components: + - type: Transform + pos: 27.5,-28.5 + parent: 2 + - uid: 11119 + components: + - type: Transform + pos: 27.5,-35.5 + parent: 2 + - uid: 11120 + components: + - type: Transform + pos: 25.5,-51.5 + parent: 2 + - uid: 11121 + components: + - type: Transform + pos: 36.5,-50.5 + parent: 2 + - uid: 11122 + components: + - type: Transform + pos: 35.5,-50.5 + parent: 2 + - uid: 11123 + components: + - type: Transform + pos: 25.5,-50.5 + parent: 2 + - uid: 11134 + components: + - type: Transform + pos: 36.5,-37.5 + parent: 2 + - uid: 11135 + components: + - type: Transform + pos: 31.5,-26.5 + parent: 2 + - uid: 11136 + components: + - type: Transform + pos: 36.5,-39.5 + parent: 2 + - uid: 11137 + components: + - type: Transform + pos: 29.5,-26.5 + parent: 2 + - uid: 11138 + components: + - type: Transform + pos: 28.5,-28.5 + parent: 2 + - uid: 11139 + components: + - type: Transform + pos: 28.5,-35.5 + parent: 2 + - uid: 11158 + components: + - type: Transform + pos: 32.5,-35.5 + parent: 2 + - uid: 11168 + components: + - type: Transform + pos: 27.5,-33.5 + parent: 2 + - uid: 11477 + components: + - type: Transform + pos: 33.5,-35.5 + parent: 2 + - uid: 11478 + components: + - type: Transform + pos: 27.5,-36.5 + parent: 2 + - uid: 11667 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 48.5,5.5 + parent: 2 + - uid: 11704 + components: + - type: Transform + pos: 27.5,-39.5 + parent: 2 + - uid: 11705 + components: + - type: Transform + pos: 33.5,-33.5 + parent: 2 + - uid: 11710 + components: + - type: Transform + pos: 25.5,-25.5 + parent: 2 + - uid: 11858 + components: + - type: Transform + pos: 28.5,-26.5 + parent: 2 + - uid: 11859 + components: + - type: Transform + pos: 25.5,-27.5 + parent: 2 + - uid: 11862 + components: + - type: Transform + pos: 37.5,-31.5 + parent: 2 + - uid: 11863 + components: + - type: Transform + pos: 26.5,-28.5 + parent: 2 + - uid: 11864 + components: + - type: Transform + pos: 33.5,-39.5 + parent: 2 + - uid: 11865 + components: + - type: Transform + pos: 36.5,-38.5 + parent: 2 + - uid: 11866 + components: + - type: Transform + pos: 35.5,-39.5 + parent: 2 + - uid: 11867 + components: + - type: Transform + pos: 28.5,-39.5 + parent: 2 + - uid: 12239 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 54.5,59.5 + parent: 2 + - uid: 12383 + components: + - type: Transform + pos: 27.5,-34.5 + parent: 2 + - uid: 12384 + components: + - type: Transform + pos: 32.5,-34.5 + parent: 2 + - uid: 12385 + components: + - type: Transform + pos: 33.5,-36.5 + parent: 2 + - uid: 12386 + components: + - type: Transform + pos: 29.5,-39.5 + parent: 2 + - uid: 12387 + components: + - type: Transform + pos: 29.5,-34.5 + parent: 2 + - uid: 12539 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -25.5,75.5 + parent: 2 + - uid: 12543 + components: + - type: Transform + pos: -20.5,72.5 + parent: 2 + - uid: 12544 + components: + - type: Transform + pos: -12.5,70.5 + parent: 2 + - uid: 12596 + components: + - type: Transform + pos: 34.5,-2.5 + parent: 2 + - uid: 12597 + components: + - type: Transform + pos: 37.5,-18.5 + parent: 2 + - uid: 12598 + components: + - type: Transform + pos: 37.5,-14.5 + parent: 2 + - uid: 12599 + components: + - type: Transform + pos: 30.5,-54.5 + parent: 2 + - uid: 12606 + components: + - type: Transform + pos: 26.5,-54.5 + parent: 2 + - uid: 12607 + components: + - type: Transform + pos: 27.5,-54.5 + parent: 2 + - uid: 12608 + components: + - type: Transform + pos: 32.5,-54.5 + parent: 2 + - uid: 12609 + components: + - type: Transform + pos: 21.5,-47.5 + parent: 2 + - uid: 12646 + components: + - type: Transform + pos: 20.5,-35.5 + parent: 2 + - uid: 12647 + components: + - type: Transform + pos: 20.5,-36.5 + parent: 2 + - uid: 12648 + components: + - type: Transform + pos: 33.5,-54.5 + parent: 2 + - uid: 12649 + components: + - type: Transform + pos: 20.5,-38.5 + parent: 2 + - uid: 13000 + components: + - type: Transform + pos: 21.5,-42.5 + parent: 2 + - uid: 13041 + components: + - type: Transform + pos: 39.5,-40.5 + parent: 2 + - uid: 13051 + components: + - type: Transform + pos: 21.5,-41.5 + parent: 2 + - uid: 13052 + components: + - type: Transform + pos: 39.5,-42.5 + parent: 2 + - uid: 13053 + components: + - type: Transform + pos: 21.5,-40.5 + parent: 2 + - uid: 13055 + components: + - type: Transform + pos: 33.5,-31.5 + parent: 2 + - uid: 13074 + components: + - type: Transform + pos: 34.5,-30.5 + parent: 2 + - uid: 13088 + components: + - type: Transform + pos: 25.5,-24.5 + parent: 2 + - uid: 13382 + components: + - type: Transform + pos: 25.5,-28.5 + parent: 2 + - uid: 13383 + components: + - type: Transform + pos: 33.5,-34.5 + parent: 2 + - uid: 13384 + components: + - type: Transform + pos: 27.5,-38.5 + parent: 2 + - uid: 13385 + components: + - type: Transform + pos: 28.5,-34.5 + parent: 2 + - uid: 13404 + components: + - type: Transform + pos: 25.5,-26.5 + parent: 2 + - uid: 13415 + components: + - type: Transform + pos: 21.5,-46.5 + parent: 2 + - uid: 13422 + components: + - type: Transform + pos: 23.5,-18.5 + parent: 2 + - uid: 13478 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,75.5 + parent: 2 + - uid: 13679 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 54.5,63.5 + parent: 2 + - uid: 13681 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 54.5,60.5 + parent: 2 + - uid: 14252 + components: + - type: Transform + pos: 40.5,-35.5 + parent: 2 + - uid: 14253 + components: + - type: Transform + pos: 39.5,-46.5 + parent: 2 + - uid: 14254 + components: + - type: Transform + pos: 38.5,-53.5 + parent: 2 + - uid: 14255 + components: + - type: Transform + pos: 40.5,-26.5 + parent: 2 + - uid: 14256 + components: + - type: Transform + pos: 37.5,-54.5 + parent: 2 + - uid: 14314 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 54.5,62.5 + parent: 2 + - uid: 14534 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,6.5 + parent: 2 + - uid: 14552 + components: + - type: Transform + pos: 73.5,24.5 + parent: 2 + - uid: 14572 + components: + - type: Transform + pos: 39.5,-50.5 + parent: 2 + - uid: 14573 + components: + - type: Transform + pos: 39.5,-47.5 + parent: 2 + - uid: 15505 + components: + - type: Transform + pos: 81.5,14.5 + parent: 2 + - uid: 15506 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,26.5 + parent: 2 + - uid: 15507 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,30.5 + parent: 2 + - uid: 15508 + components: + - type: Transform + pos: 4.5,36.5 + parent: 2 + - uid: 15509 + components: + - type: Transform + pos: -7.5,17.5 + parent: 2 + - uid: 15513 + components: + - type: Transform + pos: -32.5,0.5 + parent: 2 + - uid: 15514 + components: + - type: Transform + pos: -31.5,0.5 + parent: 2 + - uid: 15515 + components: + - type: Transform + pos: -33.5,0.5 + parent: 2 + - uid: 15516 + components: + - type: Transform + pos: -27.5,0.5 + parent: 2 + - uid: 15517 + components: + - type: Transform + pos: -29.5,0.5 + parent: 2 + - uid: 15518 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,22.5 + parent: 2 + - uid: 15519 + components: + - type: Transform + pos: -24.5,42.5 + parent: 2 + - uid: 15520 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -29.5,21.5 + parent: 2 + - uid: 15521 + components: + - type: Transform + pos: -28.5,0.5 + parent: 2 + - uid: 15522 + components: + - type: Transform + pos: -26.5,42.5 + parent: 2 + - uid: 15523 + components: + - type: Transform + pos: -30.5,0.5 + parent: 2 + - uid: 15525 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.5,75.5 + parent: 2 + - uid: 15526 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -18.5,75.5 + parent: 2 + - uid: 15527 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -17.5,75.5 + parent: 2 + - uid: 15528 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,75.5 + parent: 2 + - uid: 15529 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,75.5 + parent: 2 + - uid: 15530 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,75.5 + parent: 2 + - uid: 15531 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,75.5 + parent: 2 + - uid: 15532 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,73.5 + parent: 2 + - uid: 15533 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,75.5 + parent: 2 + - uid: 15534 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,73.5 + parent: 2 + - uid: 15535 + components: + - type: Transform + pos: -17.5,33.5 + parent: 2 + - uid: 15536 + components: + - type: Transform + pos: -14.5,-8.5 + parent: 2 + - uid: 15537 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -40.5,6.5 + parent: 2 + - uid: 15538 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -40.5,14.5 + parent: 2 + - uid: 15539 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,14.5 + parent: 2 + - uid: 15540 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -38.5,14.5 + parent: 2 + - uid: 15541 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -40.5,9.5 + parent: 2 + - uid: 15542 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -40.5,13.5 + parent: 2 + - uid: 15543 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -38.5,6.5 + parent: 2 + - uid: 15544 + components: + - type: Transform + pos: 34.5,56.5 + parent: 2 + - uid: 15545 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,6.5 + parent: 2 + - uid: 15546 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -37.5,6.5 + parent: 2 + - uid: 15547 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,10.5 + parent: 2 + - uid: 15548 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -38.5,10.5 + parent: 2 + - uid: 15549 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -38.5,18.5 + parent: 2 + - uid: 15550 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -39.5,6.5 + parent: 2 + - uid: 15551 + components: + - type: Transform + pos: 33.5,52.5 + parent: 2 + - uid: 15552 + components: + - type: Transform + pos: 36.5,53.5 + parent: 2 + - uid: 15553 + components: + - type: Transform + pos: 36.5,56.5 + parent: 2 + - uid: 15554 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -40.5,18.5 + parent: 2 + - uid: 15555 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -37.5,22.5 + parent: 2 + - uid: 15556 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,22.5 + parent: 2 + - uid: 15557 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -38.5,22.5 + parent: 2 + - uid: 15558 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,4.5 + parent: 2 + - uid: 15559 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,2.5 + parent: 2 + - uid: 15560 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,3.5 + parent: 2 + - uid: 15561 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,0.5 + parent: 2 + - uid: 15562 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.5,4.5 + parent: 2 + - uid: 15563 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,0.5 + parent: 2 + - uid: 15564 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,4.5 + parent: 2 + - uid: 15565 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,1.5 + parent: 2 + - uid: 15566 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,2.5 + parent: 2 + - uid: 15567 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.5,2.5 + parent: 2 + - uid: 15568 + components: + - type: Transform + pos: -16.5,32.5 + parent: 2 + - uid: 15569 + components: + - type: Transform + pos: -21.5,32.5 + parent: 2 + - uid: 15570 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,31.5 + parent: 2 + - uid: 15571 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -39.5,29.5 + parent: 2 + - uid: 15572 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,28.5 + parent: 2 + - uid: 15573 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,36.5 + parent: 2 + - uid: 15574 + components: + - type: Transform + pos: -21.5,37.5 + parent: 2 + - uid: 15575 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,36.5 + parent: 2 + - uid: 15576 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -25.5,20.5 + parent: 2 + - uid: 15577 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -25.5,21.5 + parent: 2 + - uid: 15578 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,32.5 + parent: 2 + - uid: 15579 + components: + - type: Transform + pos: -13.5,26.5 + parent: 2 + - uid: 15580 + components: + - type: Transform + pos: -17.5,32.5 + parent: 2 + - uid: 15581 + components: + - type: Transform + pos: -21.5,30.5 + parent: 2 + - uid: 15582 + components: + - type: Transform + pos: -17.5,31.5 + parent: 2 + - uid: 15583 + components: + - type: Transform + pos: -17.5,30.5 + parent: 2 + - uid: 15584 + components: + - type: Transform + pos: -17.5,36.5 + parent: 2 + - uid: 15585 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,42.5 + parent: 2 + - uid: 15586 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,32.5 + parent: 2 + - uid: 15587 + components: + - type: Transform + pos: -17.5,38.5 + parent: 2 + - uid: 15588 + components: + - type: Transform + pos: -17.5,35.5 + parent: 2 + - uid: 15589 + components: + - type: Transform + pos: -12.5,-1.5 + parent: 2 + - uid: 15590 + components: + - type: Transform + pos: -13.5,-3.5 + parent: 2 + - uid: 15591 + components: + - type: Transform + pos: -12.5,2.5 + parent: 2 + - uid: 15592 + components: + - type: Transform + pos: -12.5,-2.5 + parent: 2 + - uid: 15593 + components: + - type: Transform + pos: -13.5,-2.5 + parent: 2 + - uid: 15594 + components: + - type: Transform + pos: -16.5,36.5 + parent: 2 + - uid: 15595 + components: + - type: Transform + pos: 36.5,54.5 + parent: 2 + - uid: 15596 + components: + - type: Transform + pos: 36.5,55.5 + parent: 2 + - uid: 15597 + components: + - type: Transform + pos: 34.5,52.5 + parent: 2 + - uid: 15598 + components: + - type: Transform + pos: 36.5,52.5 + parent: 2 + - uid: 15599 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -40.5,20.5 + parent: 2 + - uid: 15600 + components: + - type: Transform + pos: 35.5,56.5 + parent: 2 + - uid: 15601 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -40.5,22.5 + parent: 2 + - uid: 15602 + components: + - type: Transform + pos: 33.5,56.5 + parent: 2 + - uid: 15603 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -39.5,22.5 + parent: 2 + - uid: 15604 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -40.5,11.5 + parent: 2 + - uid: 15605 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -40.5,12.5 + parent: 2 + - uid: 15606 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -39.5,14.5 + parent: 2 + - uid: 15607 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,18.5 + parent: 2 + - uid: 15608 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -37.5,18.5 + parent: 2 + - uid: 15609 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -37.5,14.5 + parent: 2 + - uid: 15610 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -40.5,8.5 + parent: 2 + - uid: 15611 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -40.5,7.5 + parent: 2 + - uid: 15612 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -40.5,15.5 + parent: 2 + - uid: 15613 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -40.5,16.5 + parent: 2 + - uid: 15614 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -39.5,10.5 + parent: 2 + - uid: 15615 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -40.5,10.5 + parent: 2 + - uid: 15616 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -37.5,10.5 + parent: 2 + - uid: 15617 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,3.5 + parent: 2 + - uid: 15618 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,1.5 + parent: 2 + - uid: 15619 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.5,1.5 + parent: 2 + - uid: 15620 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.5,3.5 + parent: 2 + - uid: 15621 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -40.5,17.5 + parent: 2 + - uid: 15622 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -40.5,19.5 + parent: 2 + - uid: 15623 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -39.5,18.5 + parent: 2 + - uid: 15624 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -40.5,21.5 + parent: 2 + - uid: 15625 + components: + - type: Transform + pos: 55.5,-4.5 + parent: 2 + - uid: 15626 + components: + - type: Transform + pos: 54.5,-4.5 + parent: 2 + - uid: 15627 + components: + - type: Transform + pos: 54.5,-5.5 + parent: 2 + - uid: 15628 + components: + - type: Transform + pos: 53.5,-5.5 + parent: 2 + - uid: 15629 + components: + - type: Transform + pos: -21.5,36.5 + parent: 2 + - uid: 15630 + components: + - type: Transform + pos: -13.5,-7.5 + parent: 2 + - uid: 15631 + components: + - type: Transform + pos: -15.5,32.5 + parent: 2 + - uid: 15632 + components: + - type: Transform + pos: -15.5,33.5 + parent: 2 + - uid: 15633 + components: + - type: Transform + pos: -15.5,35.5 + parent: 2 + - uid: 15634 + components: + - type: Transform + pos: -21.5,38.5 + parent: 2 + - uid: 15635 + components: + - type: Transform + pos: -15.5,36.5 + parent: 2 + - uid: 15636 + components: + - type: Transform + pos: -17.5,37.5 + parent: 2 + - uid: 15637 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -25.5,22.5 + parent: 2 + - uid: 15638 + components: + - type: Transform + pos: -21.5,31.5 + parent: 2 + - uid: 15639 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,31.5 + parent: 2 + - uid: 15640 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -39.5,31.5 + parent: 2 + - uid: 15641 + components: + - type: Transform + pos: -13.5,-8.5 + parent: 2 + - uid: 15642 + components: + - type: Transform + pos: -17.5,-8.5 + parent: 2 + - uid: 15643 + components: + - type: Transform + pos: -18.5,-8.5 + parent: 2 + - uid: 15644 + components: + - type: Transform + pos: -18.5,-7.5 + parent: 2 + - uid: 15645 + components: + - type: Transform + pos: -18.5,-5.5 + parent: 2 + - uid: 15646 + components: + - type: Transform + pos: -18.5,-6.5 + parent: 2 + - uid: 15647 + components: + - type: Transform + pos: -18.5,-4.5 + parent: 2 + - uid: 15648 + components: + - type: Transform + pos: -18.5,-3.5 + parent: 2 + - uid: 15649 + components: + - type: Transform + pos: -18.5,-2.5 + parent: 2 + - uid: 15650 + components: + - type: Transform + pos: -18.5,-1.5 + parent: 2 + - uid: 15651 + components: + - type: Transform + pos: -18.5,-0.5 + parent: 2 + - uid: 15652 + components: + - type: Transform + pos: -18.5,0.5 + parent: 2 + - uid: 15653 + components: + - type: Transform + pos: -18.5,1.5 + parent: 2 + - uid: 15654 + components: + - type: Transform + pos: -18.5,2.5 + parent: 2 + - uid: 15655 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,23.5 + parent: 2 + - uid: 15656 + components: + - type: Transform + pos: -12.5,3.5 + parent: 2 + - uid: 15657 + components: + - type: Transform + pos: -8.5,3.5 + parent: 2 + - uid: 15658 + components: + - type: Transform + pos: -8.5,2.5 + parent: 2 + - uid: 15659 + components: + - type: Transform + pos: -7.5,2.5 + parent: 2 + - uid: 15660 + components: + - type: Transform + pos: -6.5,2.5 + parent: 2 + - uid: 15661 + components: + - type: Transform + pos: -5.5,2.5 + parent: 2 + - uid: 15662 + components: + - type: Transform + pos: -4.5,2.5 + parent: 2 + - uid: 15663 + components: + - type: Transform + pos: -14.5,11.5 + parent: 2 + - uid: 15664 + components: + - type: Transform + pos: -16.5,3.5 + parent: 2 + - uid: 15665 + components: + - type: Transform + pos: -16.5,4.5 + parent: 2 + - uid: 15666 + components: + - type: Transform + pos: -16.5,5.5 + parent: 2 + - uid: 15667 + components: + - type: Transform + pos: -16.5,6.5 + parent: 2 + - uid: 15668 + components: + - type: Transform + pos: -16.5,7.5 + parent: 2 + - uid: 15669 + components: + - type: Transform + pos: -16.5,9.5 + parent: 2 + - uid: 15670 + components: + - type: Transform + pos: -16.5,10.5 + parent: 2 + - uid: 15671 + components: + - type: Transform + pos: -15.5,10.5 + parent: 2 + - uid: 15672 + components: + - type: Transform + pos: -14.5,10.5 + parent: 2 + - uid: 15673 + components: + - type: Transform + pos: -19.5,9.5 + parent: 2 + - uid: 15674 + components: + - type: Transform + pos: -19.5,8.5 + parent: 2 + - uid: 15675 + components: + - type: Transform + pos: -19.5,6.5 + parent: 2 + - uid: 15676 + components: + - type: Transform + pos: -19.5,7.5 + parent: 2 + - uid: 15677 + components: + - type: Transform + pos: -19.5,4.5 + parent: 2 + - uid: 15678 + components: + - type: Transform + pos: -19.5,3.5 + parent: 2 + - uid: 15679 + components: + - type: Transform + pos: -19.5,5.5 + parent: 2 + - uid: 15680 + components: + - type: Transform + pos: -18.5,3.5 + parent: 2 + - uid: 15681 + components: + - type: Transform + pos: -17.5,3.5 + parent: 2 + - uid: 15682 + components: + - type: Transform + pos: -14.5,13.5 + parent: 2 + - uid: 15683 + components: + - type: Transform + pos: 5.5,1.5 + parent: 2 + - uid: 15684 + components: + - type: Transform + pos: 5.5,2.5 + parent: 2 + - uid: 15685 + components: + - type: Transform + pos: 5.5,3.5 + parent: 2 + - uid: 15686 + components: + - type: Transform + pos: 5.5,4.5 + parent: 2 + - uid: 15687 + components: + - type: Transform + pos: 5.5,5.5 + parent: 2 + - uid: 15688 + components: + - type: Transform + pos: 5.5,6.5 + parent: 2 + - uid: 15689 + components: + - type: Transform + pos: 5.5,7.5 + parent: 2 + - uid: 15690 + components: + - type: Transform + pos: 5.5,8.5 + parent: 2 + - uid: 15691 + components: + - type: Transform + pos: 6.5,8.5 + parent: 2 + - uid: 15692 + components: + - type: Transform + pos: 13.5,9.5 + parent: 2 + - uid: 15693 + components: + - type: Transform + pos: 8.5,8.5 + parent: 2 + - uid: 15694 + components: + - type: Transform + pos: 9.5,8.5 + parent: 2 + - uid: 15695 + components: + - type: Transform + pos: 10.5,9.5 + parent: 2 + - uid: 15696 + components: + - type: Transform + pos: 9.5,9.5 + parent: 2 + - uid: 15697 + components: + - type: Transform + pos: 11.5,9.5 + parent: 2 + - uid: 15698 + components: + - type: Transform + pos: 12.5,9.5 + parent: 2 + - uid: 15699 + components: + - type: Transform + pos: 13.5,10.5 + parent: 2 + - uid: 15700 + components: + - type: Transform + pos: 13.5,12.5 + parent: 2 + - uid: 15701 + components: + - type: Transform + pos: 13.5,13.5 + parent: 2 + - uid: 15702 + components: + - type: Transform + pos: 13.5,14.5 + parent: 2 + - uid: 15703 + components: + - type: Transform + pos: 13.5,11.5 + parent: 2 + - uid: 15704 + components: + - type: Transform + pos: 9.5,14.5 + parent: 2 + - uid: 15705 + components: + - type: Transform + pos: 5.5,13.5 + parent: 2 + - uid: 15706 + components: + - type: Transform + pos: 5.5,14.5 + parent: 2 + - uid: 15707 + components: + - type: Transform + pos: 4.5,18.5 + parent: 2 + - uid: 15708 + components: + - type: Transform + pos: -7.5,15.5 + parent: 2 + - uid: 15709 + components: + - type: Transform + pos: -7.5,14.5 + parent: 2 + - uid: 15710 + components: + - type: Transform + pos: -2.5,13.5 + parent: 2 + - uid: 15711 + components: + - type: Transform + pos: -2.5,14.5 + parent: 2 + - uid: 15712 + components: + - type: Transform + pos: -2.5,16.5 + parent: 2 + - uid: 15713 + components: + - type: Transform + pos: -2.5,15.5 + parent: 2 + - uid: 15714 + components: + - type: Transform + pos: 5.5,18.5 + parent: 2 + - uid: 15715 + components: + - type: Transform + pos: -2.5,17.5 + parent: 2 + - uid: 15716 + components: + - type: Transform + pos: -2.5,18.5 + parent: 2 + - uid: 15717 + components: + - type: Transform + pos: -1.5,18.5 + parent: 2 + - uid: 15718 + components: + - type: Transform + pos: -0.5,18.5 + parent: 2 + - uid: 15719 + components: + - type: Transform + pos: 0.5,18.5 + parent: 2 + - uid: 15720 + components: + - type: Transform + pos: 1.5,18.5 + parent: 2 + - uid: 15721 + components: + - type: Transform + pos: 2.5,18.5 + parent: 2 + - uid: 15722 + components: + - type: Transform + pos: -14.5,14.5 + parent: 2 + - uid: 15723 + components: + - type: Transform + pos: -14.5,15.5 + parent: 2 + - uid: 15724 + components: + - type: Transform + pos: -13.5,15.5 + parent: 2 + - uid: 15725 + components: + - type: Transform + pos: -11.5,15.5 + parent: 2 + - uid: 15726 + components: + - type: Transform + pos: -12.5,15.5 + parent: 2 + - uid: 15727 + components: + - type: Transform + pos: -10.5,15.5 + parent: 2 + - uid: 15728 + components: + - type: Transform + pos: -8.5,15.5 + parent: 2 + - uid: 15729 + components: + - type: Transform + pos: -9.5,15.5 + parent: 2 + - uid: 15730 + components: + - type: Transform + pos: 29.5,5.5 + parent: 2 + - uid: 15731 + components: + - type: Transform + pos: 29.5,6.5 + parent: 2 + - uid: 15732 + components: + - type: Transform + pos: 33.5,7.5 + parent: 2 + - uid: 15733 + components: + - type: Transform + pos: 33.5,6.5 + parent: 2 + - uid: 15735 + components: + - type: Transform + pos: 30.5,6.5 + parent: 2 + - uid: 15736 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,22.5 + parent: 2 + - uid: 15737 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,22.5 + parent: 2 + - uid: 15738 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,22.5 + parent: 2 + - uid: 15739 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,22.5 + parent: 2 + - uid: 15740 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,23.5 + parent: 2 + - uid: 15741 + components: + - type: Transform + pos: -6.5,22.5 + parent: 2 + - uid: 15742 + components: + - type: Transform + pos: -8.5,26.5 + parent: 2 + - uid: 15743 + components: + - type: Transform + pos: -2.5,22.5 + parent: 2 + - uid: 15744 + components: + - type: Transform + pos: -3.5,22.5 + parent: 2 + - uid: 15745 + components: + - type: Transform + pos: -2.5,23.5 + parent: 2 + - uid: 15746 + components: + - type: Transform + pos: -2.5,24.5 + parent: 2 + - uid: 15747 + components: + - type: Transform + pos: -1.5,24.5 + parent: 2 + - uid: 15748 + components: + - type: Transform + pos: 5.5,25.5 + parent: 2 + - uid: 15749 + components: + - type: Transform + pos: 6.5,25.5 + parent: 2 + - uid: 15750 + components: + - type: Transform + pos: 8.5,25.5 + parent: 2 + - uid: 15751 + components: + - type: Transform + pos: 7.5,25.5 + parent: 2 + - uid: 15752 + components: + - type: Transform + pos: 5.5,26.5 + parent: 2 + - uid: 15753 + components: + - type: Transform + pos: 4.5,26.5 + parent: 2 + - uid: 15754 + components: + - type: Transform + pos: 4.5,30.5 + parent: 2 + - uid: 15755 + components: + - type: Transform + pos: 5.5,30.5 + parent: 2 + - uid: 15756 + components: + - type: Transform + pos: 6.5,30.5 + parent: 2 + - uid: 15757 + components: + - type: Transform + pos: 7.5,30.5 + parent: 2 + - uid: 15758 + components: + - type: Transform + pos: 9.5,28.5 + parent: 2 + - uid: 15759 + components: + - type: Transform + pos: 15.5,23.5 + parent: 2 + - uid: 15760 + components: + - type: Transform + pos: 6.5,36.5 + parent: 2 + - uid: 15761 + components: + - type: Transform + pos: 5.5,36.5 + parent: 2 + - uid: 15762 + components: + - type: Transform + pos: 15.5,24.5 + parent: 2 + - uid: 15763 + components: + - type: Transform + pos: 3.5,36.5 + parent: 2 + - uid: 15764 + components: + - type: Transform + pos: 2.5,36.5 + parent: 2 + - uid: 15765 + components: + - type: Transform + pos: 15.5,26.5 + parent: 2 + - uid: 15766 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.5,27.5 + parent: 2 + - uid: 15767 + components: + - type: Transform + pos: 14.5,27.5 + parent: 2 + - uid: 15768 + components: + - type: Transform + pos: 14.5,28.5 + parent: 2 + - uid: 15769 + components: + - type: Transform + pos: 14.5,29.5 + parent: 2 + - uid: 15770 + components: + - type: Transform + pos: 19.5,23.5 + parent: 2 + - uid: 15771 + components: + - type: Transform + pos: 19.5,22.5 + parent: 2 + - uid: 15772 + components: + - type: Transform + pos: 19.5,24.5 + parent: 2 + - uid: 15773 + components: + - type: Transform + pos: 19.5,26.5 + parent: 2 + - uid: 15774 + components: + - type: Transform + pos: 19.5,27.5 + parent: 2 + - uid: 15775 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,22.5 + parent: 2 + - uid: 15776 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 23.5,22.5 + parent: 2 + - uid: 15777 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,22.5 + parent: 2 + - uid: 15778 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,23.5 + parent: 2 + - uid: 15779 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,22.5 + parent: 2 + - uid: 15780 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,26.5 + parent: 2 + - uid: 15781 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,27.5 + parent: 2 + - uid: 15782 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,28.5 + parent: 2 + - uid: 15783 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,29.5 + parent: 2 + - uid: 15784 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,27.5 + parent: 2 + - uid: 15785 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,28.5 + parent: 2 + - uid: 15786 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,29.5 + parent: 2 + - uid: 15787 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 22.5,29.5 + parent: 2 + - uid: 15788 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,22.5 + parent: 2 + - uid: 15789 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,22.5 + parent: 2 + - uid: 15790 + components: + - type: Transform + pos: 15.5,46.5 + parent: 2 + - uid: 15791 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,23.5 + parent: 2 + - uid: 15792 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,23.5 + parent: 2 + - uid: 15793 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,24.5 + parent: 2 + - uid: 15794 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,25.5 + parent: 2 + - uid: 15795 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,26.5 + parent: 2 + - uid: 15796 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,30.5 + parent: 2 + - uid: 15797 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,30.5 + parent: 2 + - uid: 15798 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,30.5 + parent: 2 + - uid: 15799 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,30.5 + parent: 2 + - uid: 15800 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,30.5 + parent: 2 + - uid: 15801 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,30.5 + parent: 2 + - uid: 15802 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,30.5 + parent: 2 + - uid: 15803 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,37.5 + parent: 2 + - uid: 15804 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 29.5,37.5 + parent: 2 + - uid: 15805 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 26.5,37.5 + parent: 2 + - uid: 15806 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,35.5 + parent: 2 + - uid: 15807 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 28.5,37.5 + parent: 2 + - uid: 15808 + components: + - type: Transform + pos: -6.5,25.5 + parent: 2 + - uid: 15809 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,36.5 + parent: 2 + - uid: 15810 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,36.5 + parent: 2 + - uid: 15811 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 17.5,36.5 + parent: 2 + - uid: 15812 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,39.5 + parent: 2 + - uid: 15813 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,40.5 + parent: 2 + - uid: 15814 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,41.5 + parent: 2 + - uid: 15815 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,41.5 + parent: 2 + - uid: 15816 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,41.5 + parent: 2 + - uid: 15817 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,38.5 + parent: 2 + - uid: 15818 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.5,36.5 + parent: 2 + - uid: 15819 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 16.5,36.5 + parent: 2 + - uid: 15820 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,37.5 + parent: 2 + - uid: 15821 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.5,40.5 + parent: 2 + - uid: 15822 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 18.5,40.5 + parent: 2 + - uid: 15823 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 16.5,40.5 + parent: 2 + - uid: 15824 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 17.5,40.5 + parent: 2 + - uid: 15825 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 18.5,41.5 + parent: 2 + - uid: 15826 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,37.5 + parent: 2 + - uid: 15827 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,36.5 + parent: 2 + - uid: 15828 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,36.5 + parent: 2 + - uid: 15829 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,42.5 + parent: 2 + - uid: 15830 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,42.5 + parent: 2 + - uid: 15831 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,42.5 + parent: 2 + - uid: 15832 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,41.5 + parent: 2 + - uid: 15833 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,40.5 + parent: 2 + - uid: 15834 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,39.5 + parent: 2 + - uid: 15835 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,38.5 + parent: 2 + - uid: 15836 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,42.5 + parent: 2 + - uid: 15837 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,43.5 + parent: 2 + - uid: 15838 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,44.5 + parent: 2 + - uid: 15839 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,45.5 + parent: 2 + - uid: 15840 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,46.5 + parent: 2 + - uid: 15841 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,46.5 + parent: 2 + - uid: 15842 + components: + - type: Transform + pos: 14.5,43.5 + parent: 2 + - uid: 15843 + components: + - type: Transform + pos: 14.5,45.5 + parent: 2 + - uid: 15844 + components: + - type: Transform + pos: 14.5,46.5 + parent: 2 + - uid: 15845 + components: + - type: Transform + pos: 16.5,46.5 + parent: 2 + - uid: 15846 + components: + - type: Transform + pos: 17.5,46.5 + parent: 2 + - uid: 15847 + components: + - type: Transform + pos: 18.5,46.5 + parent: 2 + - uid: 15848 + components: + - type: Transform + pos: 19.5,46.5 + parent: 2 + - uid: 15849 + components: + - type: Transform + pos: 19.5,45.5 + parent: 2 + - uid: 15850 + components: + - type: Transform + pos: 19.5,44.5 + parent: 2 + - uid: 15851 + components: + - type: Transform + pos: 19.5,43.5 + parent: 2 + - uid: 15852 + components: + - type: Transform + pos: 19.5,42.5 + parent: 2 + - uid: 15853 + components: + - type: Transform + pos: 7.5,42.5 + parent: 2 + - uid: 15854 + components: + - type: Transform + pos: 6.5,42.5 + parent: 2 + - uid: 15855 + components: + - type: Transform + pos: 4.5,42.5 + parent: 2 + - uid: 15856 + components: + - type: Transform + pos: 3.5,42.5 + parent: 2 + - uid: 15857 + components: + - type: Transform + pos: 2.5,42.5 + parent: 2 + - uid: 15858 + components: + - type: Transform + pos: 2.5,41.5 + parent: 2 + - uid: 15859 + components: + - type: Transform + pos: 2.5,39.5 + parent: 2 + - uid: 15860 + components: + - type: Transform + pos: 2.5,37.5 + parent: 2 + - uid: 15861 + components: + - type: Transform + pos: 2.5,43.5 + parent: 2 + - uid: 15862 + components: + - type: Transform + pos: 2.5,44.5 + parent: 2 + - uid: 15863 + components: + - type: Transform + pos: 3.5,44.5 + parent: 2 + - uid: 15864 + components: + - type: Transform + pos: 3.5,45.5 + parent: 2 + - uid: 15865 + components: + - type: Transform + pos: 3.5,46.5 + parent: 2 + - uid: 15866 + components: + - type: Transform + pos: 4.5,46.5 + parent: 2 + - uid: 15867 + components: + - type: Transform + pos: 5.5,46.5 + parent: 2 + - uid: 15868 + components: + - type: Transform + pos: 8.5,46.5 + parent: 2 + - uid: 15869 + components: + - type: Transform + pos: 20.5,46.5 + parent: 2 + - uid: 15870 + components: + - type: Transform + pos: 20.5,42.5 + parent: 2 + - uid: 15871 + components: + - type: Transform + pos: 21.5,42.5 + parent: 2 + - uid: 15872 + components: + - type: Transform + pos: 22.5,42.5 + parent: 2 + - uid: 15873 + components: + - type: Transform + pos: 22.5,45.5 + parent: 2 + - uid: 15874 + components: + - type: Transform + pos: 22.5,43.5 + parent: 2 + - uid: 15875 + components: + - type: Transform + pos: 22.5,46.5 + parent: 2 + - uid: 15876 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,42.5 + parent: 2 + - uid: 15877 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,41.5 + parent: 2 + - uid: 15878 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,40.5 + parent: 2 + - uid: 15879 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,39.5 + parent: 2 + - uid: 15880 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,38.5 + parent: 2 + - uid: 15881 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,37.5 + parent: 2 + - uid: 15882 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,46.5 + parent: 2 + - uid: 15883 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,46.5 + parent: 2 + - uid: 15884 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.5,46.5 + parent: 2 + - uid: 15885 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.5,45.5 + parent: 2 + - uid: 15886 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.5,42.5 + parent: 2 + - uid: 15887 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.5,43.5 + parent: 2 + - uid: 15888 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 26.5,46.5 + parent: 2 + - uid: 15889 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,46.5 + parent: 2 + - uid: 15890 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 28.5,46.5 + parent: 2 + - uid: 15891 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 29.5,46.5 + parent: 2 + - uid: 15892 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 29.5,45.5 + parent: 2 + - uid: 15893 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,45.5 + parent: 2 + - uid: 15894 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,38.5 + parent: 2 + - uid: 15895 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,39.5 + parent: 2 + - uid: 15896 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,40.5 + parent: 2 + - uid: 15897 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,41.5 + parent: 2 + - uid: 15898 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,42.5 + parent: 2 + - uid: 15899 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,43.5 + parent: 2 + - uid: 15900 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,44.5 + parent: 2 + - uid: 15901 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,37.5 + parent: 2 + - uid: 15903 + components: + - type: Transform + pos: -12.5,26.5 + parent: 2 + - uid: 15904 + components: + - type: Transform + pos: -6.5,26.5 + parent: 2 + - uid: 15905 + components: + - type: Transform + pos: -6.5,18.5 + parent: 2 + - uid: 15906 + components: + - type: Transform + pos: -11.5,21.5 + parent: 2 + - uid: 15907 + components: + - type: Transform + pos: -11.5,22.5 + parent: 2 + - uid: 15908 + components: + - type: Transform + pos: -12.5,21.5 + parent: 2 + - uid: 15909 + components: + - type: Transform + pos: -13.5,21.5 + parent: 2 + - uid: 15910 + components: + - type: Transform + pos: -11.5,25.5 + parent: 2 + - uid: 15911 + components: + - type: Transform + pos: -10.5,26.5 + parent: 2 + - uid: 15912 + components: + - type: Transform + pos: -6.5,23.5 + parent: 2 + - uid: 15913 + components: + - type: Transform + pos: -11.5,26.5 + parent: 2 + - uid: 15914 + components: + - type: Transform + pos: -7.5,26.5 + parent: 2 + - uid: 15915 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.5,37.5 + parent: 2 + - uid: 15916 + components: + - type: Transform + pos: -16.5,21.5 + parent: 2 + - uid: 15917 + components: + - type: Transform + pos: -16.5,22.5 + parent: 2 + - uid: 15918 + components: + - type: Transform + pos: -16.5,23.5 + parent: 2 + - uid: 15919 + components: + - type: Transform + pos: -16.5,24.5 + parent: 2 + - uid: 15920 + components: + - type: Transform + pos: -16.5,25.5 + parent: 2 + - uid: 15921 + components: + - type: Transform + pos: -16.5,26.5 + parent: 2 + - uid: 15922 + components: + - type: Transform + pos: -13.5,17.5 + parent: 2 + - uid: 15923 + components: + - type: Transform + pos: -12.5,17.5 + parent: 2 + - uid: 15924 + components: + - type: Transform + pos: -11.5,17.5 + parent: 2 + - uid: 15925 + components: + - type: Transform + pos: -10.5,17.5 + parent: 2 + - uid: 15926 + components: + - type: Transform + pos: -9.5,18.5 + parent: 2 + - uid: 15927 + components: + - type: Transform + pos: -10.5,18.5 + parent: 2 + - uid: 15928 + components: + - type: Transform + pos: -8.5,18.5 + parent: 2 + - uid: 15929 + components: + - type: Transform + pos: -7.5,18.5 + parent: 2 + - uid: 15930 + components: + - type: Transform + pos: -17.5,24.5 + parent: 2 + - uid: 15931 + components: + - type: Transform + pos: -18.5,24.5 + parent: 2 + - uid: 15932 + components: + - type: Transform + pos: -19.5,24.5 + parent: 2 + - uid: 15933 + components: + - type: Transform + pos: -20.5,24.5 + parent: 2 + - uid: 15934 + components: + - type: Transform + pos: -21.5,24.5 + parent: 2 + - uid: 15935 + components: + - type: Transform + pos: -22.5,24.5 + parent: 2 + - uid: 15936 + components: + - type: Transform + pos: -21.5,23.5 + parent: 2 + - uid: 15937 + components: + - type: Transform + pos: -21.5,22.5 + parent: 2 + - uid: 15938 + components: + - type: Transform + pos: -21.5,21.5 + parent: 2 + - uid: 15939 + components: + - type: Transform + pos: -21.5,20.5 + parent: 2 + - uid: 15940 + components: + - type: Transform + pos: -20.5,20.5 + parent: 2 + - uid: 15941 + components: + - type: Transform + pos: -23.5,20.5 + parent: 2 + - uid: 15942 + components: + - type: Transform + pos: -23.5,21.5 + parent: 2 + - uid: 15943 + components: + - type: Transform + pos: -25.5,23.5 + parent: 2 + - uid: 15944 + components: + - type: Transform + pos: -25.5,24.5 + parent: 2 + - uid: 15945 + components: + - type: Transform + pos: -24.5,24.5 + parent: 2 + - uid: 15946 + components: + - type: Transform + pos: -25.5,25.5 + parent: 2 + - uid: 15947 + components: + - type: Transform + pos: -25.5,26.5 + parent: 2 + - uid: 15948 + components: + - type: Transform + pos: -29.5,22.5 + parent: 2 + - uid: 15949 + components: + - type: Transform + pos: -26.5,26.5 + parent: 2 + - uid: 15950 + components: + - type: Transform + pos: -29.5,23.5 + parent: 2 + - uid: 15951 + components: + - type: Transform + pos: -29.5,24.5 + parent: 2 + - uid: 15952 + components: + - type: Transform + pos: -29.5,25.5 + parent: 2 + - uid: 15953 + components: + - type: Transform + pos: -29.5,26.5 + parent: 2 + - uid: 15954 + components: + - type: Transform + pos: -28.5,26.5 + parent: 2 + - uid: 15955 + components: + - type: Transform + pos: -27.5,26.5 + parent: 2 + - uid: 15956 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -29.5,28.5 + parent: 2 + - uid: 15957 + components: + - type: Transform + pos: -29.5,20.5 + parent: 2 + - uid: 15958 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,22.5 + parent: 2 + - uid: 15959 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,22.5 + parent: 2 + - uid: 15960 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,23.5 + parent: 2 + - uid: 15961 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,24.5 + parent: 2 + - uid: 15962 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -35.5,24.5 + parent: 2 + - uid: 15963 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,24.5 + parent: 2 + - uid: 15964 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,24.5 + parent: 2 + - uid: 15965 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,24.5 + parent: 2 + - uid: 15966 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -39.5,24.5 + parent: 2 + - uid: 15967 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,28.5 + parent: 2 + - uid: 15968 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -39.5,28.5 + parent: 2 + - uid: 15969 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -40.5,24.5 + parent: 2 + - uid: 15970 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -40.5,28.5 + parent: 2 + - uid: 15971 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,47.5 + parent: 2 + - uid: 15972 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,6.5 + parent: 2 + - uid: 15973 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,10.5 + parent: 2 + - uid: 15974 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,14.5 + parent: 2 + - uid: 15975 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,18.5 + parent: 2 + - uid: 15976 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -30.5,6.5 + parent: 2 + - uid: 15977 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,6.5 + parent: 2 + - uid: 15978 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,6.5 + parent: 2 + - uid: 15979 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,6.5 + parent: 2 + - uid: 15980 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,6.5 + parent: 2 + - uid: 15981 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,7.5 + parent: 2 + - uid: 15982 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,8.5 + parent: 2 + - uid: 15983 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,9.5 + parent: 2 + - uid: 15984 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,9.5 + parent: 2 + - uid: 15985 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,9.5 + parent: 2 + - uid: 15986 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,10.5 + parent: 2 + - uid: 15987 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,10.5 + parent: 2 + - uid: 15988 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,12.5 + parent: 2 + - uid: 15989 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,13.5 + parent: 2 + - uid: 15990 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,14.5 + parent: 2 + - uid: 15991 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,15.5 + parent: 2 + - uid: 15992 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,16.5 + parent: 2 + - uid: 15993 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,16.5 + parent: 2 + - uid: 15994 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,16.5 + parent: 2 + - uid: 15995 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -19.5,16.5 + parent: 2 + - uid: 15996 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,16.5 + parent: 2 + - uid: 15997 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,16.5 + parent: 2 + - uid: 15998 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,16.5 + parent: 2 + - uid: 15999 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,17.5 + parent: 2 + - uid: 16000 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,17.5 + parent: 2 + - uid: 16001 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,17.5 + parent: 2 + - uid: 16002 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,26.5 + parent: 2 + - uid: 16003 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,27.5 + parent: 2 + - uid: 16004 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,28.5 + parent: 2 + - uid: 16005 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,28.5 + parent: 2 + - uid: 16006 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,28.5 + parent: 2 + - uid: 16007 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,28.5 + parent: 2 + - uid: 16008 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,28.5 + parent: 2 + - uid: 16009 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,32.5 + parent: 2 + - uid: 16010 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,32.5 + parent: 2 + - uid: 16011 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,32.5 + parent: 2 + - uid: 16012 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,32.5 + parent: 2 + - uid: 16013 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,33.5 + parent: 2 + - uid: 16014 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,35.5 + parent: 2 + - uid: 16015 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,36.5 + parent: 2 + - uid: 16016 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,37.5 + parent: 2 + - uid: 16017 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,37.5 + parent: 2 + - uid: 16018 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,37.5 + parent: 2 + - uid: 16019 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,37.5 + parent: 2 + - uid: 16020 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,37.5 + parent: 2 + - uid: 16021 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,37.5 + parent: 2 + - uid: 16022 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,30.5 + parent: 2 + - uid: 16023 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,30.5 + parent: 2 + - uid: 16024 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,34.5 + parent: 2 + - uid: 16025 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,38.5 + parent: 2 + - uid: 16026 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,38.5 + parent: 2 + - uid: 16027 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,47.5 + parent: 2 + - uid: 16028 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,42.5 + parent: 2 + - uid: 16029 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,42.5 + parent: 2 + - uid: 16030 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,42.5 + parent: 2 + - uid: 16031 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,43.5 + parent: 2 + - uid: 16032 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,44.5 + parent: 2 + - uid: 16033 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,45.5 + parent: 2 + - uid: 16034 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,46.5 + parent: 2 + - uid: 16035 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,46.5 + parent: 2 + - uid: 16036 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,46.5 + parent: 2 + - uid: 16037 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,46.5 + parent: 2 + - uid: 16038 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,46.5 + parent: 2 + - uid: 16039 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,46.5 + parent: 2 + - uid: 16040 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,46.5 + parent: 2 + - uid: 16041 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,42.5 + parent: 2 + - uid: 16042 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,43.5 + parent: 2 + - uid: 16043 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,44.5 + parent: 2 + - uid: 16044 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,45.5 + parent: 2 + - uid: 16045 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,46.5 + parent: 2 + - uid: 16046 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,46.5 + parent: 2 + - uid: 16047 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,46.5 + parent: 2 + - uid: 16048 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,46.5 + parent: 2 + - uid: 16049 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,46.5 + parent: 2 + - uid: 16050 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,42.5 + parent: 2 + - uid: 16051 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,42.5 + parent: 2 + - uid: 16052 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,42.5 + parent: 2 + - uid: 16053 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,43.5 + parent: 2 + - uid: 16054 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,45.5 + parent: 2 + - uid: 16055 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,41.5 + parent: 2 + - uid: 16056 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,38.5 + parent: 2 + - uid: 16057 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,39.5 + parent: 2 + - uid: 16058 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,40.5 + parent: 2 + - uid: 16059 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,41.5 + parent: 2 + - uid: 16060 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,41.5 + parent: 2 + - uid: 16061 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,41.5 + parent: 2 + - uid: 16062 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,41.5 + parent: 2 + - uid: 16063 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,41.5 + parent: 2 + - uid: 16064 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,42.5 + parent: 2 + - uid: 16065 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,44.5 + parent: 2 + - uid: 16066 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,44.5 + parent: 2 + - uid: 16067 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,45.5 + parent: 2 + - uid: 16068 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,46.5 + parent: 2 + - uid: 16069 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,46.5 + parent: 2 + - uid: 16070 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,46.5 + parent: 2 + - uid: 16071 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,46.5 + parent: 2 + - uid: 16072 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,49.5 + parent: 2 + - uid: 16073 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,47.5 + parent: 2 + - uid: 16074 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,47.5 + parent: 2 + - uid: 16075 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,47.5 + parent: 2 + - uid: 16076 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,46.5 + parent: 2 + - uid: 16077 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,45.5 + parent: 2 + - uid: 16078 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,44.5 + parent: 2 + - uid: 16079 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,43.5 + parent: 2 + - uid: 16080 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,42.5 + parent: 2 + - uid: 16081 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,42.5 + parent: 2 + - uid: 16082 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,42.5 + parent: 2 + - uid: 16083 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -19.5,42.5 + parent: 2 + - uid: 16084 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,42.5 + parent: 2 + - uid: 16085 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,43.5 + parent: 2 + - uid: 16086 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,43.5 + parent: 2 + - uid: 16087 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,45.5 + parent: 2 + - uid: 16088 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,45.5 + parent: 2 + - uid: 16089 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -29.5,45.5 + parent: 2 + - uid: 16090 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,47.5 + parent: 2 + - uid: 16091 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,47.5 + parent: 2 + - uid: 16092 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,47.5 + parent: 2 + - uid: 16093 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -29.5,47.5 + parent: 2 + - uid: 16094 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -37.5,29.5 + parent: 2 + - uid: 16095 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,31.5 + parent: 2 + - uid: 16096 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,31.5 + parent: 2 + - uid: 16097 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,30.5 + parent: 2 + - uid: 16098 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,29.5 + parent: 2 + - uid: 16099 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,31.5 + parent: 2 + - uid: 16100 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,30.5 + parent: 2 + - uid: 16101 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,29.5 + parent: 2 + - uid: 16102 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -29.5,29.5 + parent: 2 + - uid: 16103 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,29.5 + parent: 2 + - uid: 16104 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,30.5 + parent: 2 + - uid: 16105 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,31.5 + parent: 2 + - uid: 16106 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,32.5 + parent: 2 + - uid: 16107 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,35.5 + parent: 2 + - uid: 16108 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,34.5 + parent: 2 + - uid: 16109 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,36.5 + parent: 2 + - uid: 16110 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,40.5 + parent: 2 + - uid: 16111 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,41.5 + parent: 2 + - uid: 16112 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,42.5 + parent: 2 + - uid: 16113 + components: + - type: Transform + pos: -21.5,50.5 + parent: 2 + - uid: 16114 + components: + - type: Transform + pos: -20.5,50.5 + parent: 2 + - uid: 16115 + components: + - type: Transform + pos: -16.5,52.5 + parent: 2 + - uid: 16116 + components: + - type: Transform + pos: -16.5,51.5 + parent: 2 + - uid: 16117 + components: + - type: Transform + pos: -16.5,53.5 + parent: 2 + - uid: 16118 + components: + - type: Transform + pos: -16.5,50.5 + parent: 2 + - uid: 16119 + components: + - type: Transform + pos: -17.5,50.5 + parent: 2 + - uid: 16120 + components: + - type: Transform + pos: -21.5,51.5 + parent: 2 + - uid: 16121 + components: + - type: Transform + pos: -21.5,52.5 + parent: 2 + - uid: 16122 + components: + - type: Transform + pos: -21.5,53.5 + parent: 2 + - uid: 16123 + components: + - type: Transform + pos: -21.5,54.5 + parent: 2 + - uid: 16124 + components: + - type: Transform + pos: -21.5,55.5 + parent: 2 + - uid: 16125 + components: + - type: Transform + pos: -21.5,56.5 + parent: 2 + - uid: 16126 + components: + - type: Transform + pos: -16.5,56.5 + parent: 2 + - uid: 16127 + components: + - type: Transform + pos: -17.5,56.5 + parent: 2 + - uid: 16128 + components: + - type: Transform + pos: -19.5,56.5 + parent: 2 + - uid: 16129 + components: + - type: Transform + pos: -13.5,53.5 + parent: 2 + - uid: 16130 + components: + - type: Transform + pos: -10.5,50.5 + parent: 2 + - uid: 16131 + components: + - type: Transform + pos: -10.5,51.5 + parent: 2 + - uid: 16132 + components: + - type: Transform + pos: -10.5,52.5 + parent: 2 + - uid: 16133 + components: + - type: Transform + pos: -10.5,53.5 + parent: 2 + - uid: 16134 + components: + - type: Transform + pos: -6.5,50.5 + parent: 2 + - uid: 16135 + components: + - type: Transform + pos: -6.5,51.5 + parent: 2 + - uid: 16136 + components: + - type: Transform + pos: -6.5,53.5 + parent: 2 + - uid: 16137 + components: + - type: Transform + pos: -6.5,52.5 + parent: 2 + - uid: 16138 + components: + - type: Transform + pos: -2.5,50.5 + parent: 2 + - uid: 16139 + components: + - type: Transform + pos: -2.5,51.5 + parent: 2 + - uid: 16140 + components: + - type: Transform + pos: -2.5,52.5 + parent: 2 + - uid: 16141 + components: + - type: Transform + pos: -2.5,53.5 + parent: 2 + - uid: 16142 + components: + - type: Transform + pos: 1.5,50.5 + parent: 2 + - uid: 16143 + components: + - type: Transform + pos: 1.5,51.5 + parent: 2 + - uid: 16144 + components: + - type: Transform + pos: 1.5,53.5 + parent: 2 + - uid: 16145 + components: + - type: Transform + pos: 1.5,52.5 + parent: 2 + - uid: 16146 + components: + - type: Transform + pos: -25.5,50.5 + parent: 2 + - uid: 16147 + components: + - type: Transform + pos: -25.5,51.5 + parent: 2 + - uid: 16148 + components: + - type: Transform + pos: -25.5,52.5 + parent: 2 + - uid: 16149 + components: + - type: Transform + pos: -25.5,53.5 + parent: 2 + - uid: 16150 + components: + - type: Transform + pos: -25.5,54.5 + parent: 2 + - uid: 16151 + components: + - type: Transform + pos: -25.5,55.5 + parent: 2 + - uid: 16152 + components: + - type: Transform + pos: -25.5,56.5 + parent: 2 + - uid: 16153 + components: + - type: Transform + pos: -25.5,49.5 + parent: 2 + - uid: 16154 + components: + - type: Transform + pos: -26.5,49.5 + parent: 2 + - uid: 16155 + components: + - type: Transform + pos: -28.5,49.5 + parent: 2 + - uid: 16156 + components: + - type: Transform + pos: -27.5,49.5 + parent: 2 + - uid: 16157 + components: + - type: Transform + pos: -29.5,49.5 + parent: 2 + - uid: 16158 + components: + - type: Transform + pos: -29.5,50.5 + parent: 2 + - uid: 16159 + components: + - type: Transform + pos: -30.5,50.5 + parent: 2 + - uid: 16160 + components: + - type: Transform + pos: -31.5,50.5 + parent: 2 + - uid: 16161 + components: + - type: Transform + pos: -32.5,50.5 + parent: 2 + - uid: 16162 + components: + - type: Transform + pos: -33.5,50.5 + parent: 2 + - uid: 16163 + components: + - type: Transform + pos: -33.5,51.5 + parent: 2 + - uid: 16164 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -33.5,53.5 + parent: 2 + - uid: 16165 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -33.5,54.5 + parent: 2 + - uid: 16166 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,54.5 + parent: 2 + - uid: 16167 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.5,54.5 + parent: 2 + - uid: 16168 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,54.5 + parent: 2 + - uid: 16169 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.5,55.5 + parent: 2 + - uid: 16170 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.5,56.5 + parent: 2 + - uid: 16171 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,56.5 + parent: 2 + - uid: 16172 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -28.5,56.5 + parent: 2 + - uid: 16173 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,56.5 + parent: 2 + - uid: 16174 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,54.5 + parent: 2 + - uid: 16175 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,55.5 + parent: 2 + - uid: 16176 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,55.5 + parent: 2 + - uid: 16177 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,56.5 + parent: 2 + - uid: 16178 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,54.5 + parent: 2 + - uid: 16179 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,53.5 + parent: 2 + - uid: 16180 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -38.5,53.5 + parent: 2 + - uid: 16181 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -38.5,54.5 + parent: 2 + - uid: 16182 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -38.5,55.5 + parent: 2 + - uid: 16183 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -39.5,55.5 + parent: 2 + - uid: 16184 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -40.5,55.5 + parent: 2 + - uid: 16185 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -40.5,56.5 + parent: 2 + - uid: 16186 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -40.5,57.5 + parent: 2 + - uid: 16187 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -40.5,58.5 + parent: 2 + - uid: 16188 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -40.5,59.5 + parent: 2 + - uid: 16189 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,58.5 + parent: 2 + - uid: 16190 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -40.5,60.5 + parent: 2 + - uid: 16191 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -40.5,61.5 + parent: 2 + - uid: 16192 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,59.5 + parent: 2 + - uid: 16193 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -35.5,59.5 + parent: 2 + - uid: 16194 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,59.5 + parent: 2 + - uid: 16195 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,59.5 + parent: 2 + - uid: 16196 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -31.5,59.5 + parent: 2 + - uid: 16197 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -30.5,59.5 + parent: 2 + - uid: 16198 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,59.5 + parent: 2 + - uid: 16199 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -30.5,60.5 + parent: 2 + - uid: 16200 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -30.5,62.5 + parent: 2 + - uid: 16201 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -30.5,61.5 + parent: 2 + - uid: 16202 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -31.5,62.5 + parent: 2 + - uid: 16203 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,60.5 + parent: 2 + - uid: 16204 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,61.5 + parent: 2 + - uid: 16205 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,62.5 + parent: 2 + - uid: 16206 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,62.5 + parent: 2 + - uid: 16207 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,60.5 + parent: 2 + - uid: 16208 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,61.5 + parent: 2 + - uid: 16209 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,62.5 + parent: 2 + - uid: 16210 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,63.5 + parent: 2 + - uid: 16211 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -27.5,59.5 + parent: 2 + - uid: 16212 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,59.5 + parent: 2 + - uid: 16213 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,60.5 + parent: 2 + - uid: 16214 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,61.5 + parent: 2 + - uid: 16215 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,62.5 + parent: 2 + - uid: 16216 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -27.5,62.5 + parent: 2 + - uid: 16217 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,62.5 + parent: 2 + - uid: 16218 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,63.5 + parent: 2 + - uid: 16219 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,64.5 + parent: 2 + - uid: 16220 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,65.5 + parent: 2 + - uid: 16221 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,66.5 + parent: 2 + - uid: 16222 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,67.5 + parent: 2 + - uid: 16223 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,68.5 + parent: 2 + - uid: 16224 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,69.5 + parent: 2 + - uid: 16227 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,66.5 + parent: 2 + - uid: 16228 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,65.5 + parent: 2 + - uid: 16229 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,64.5 + parent: 2 + - uid: 16230 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -25.5,72.5 + parent: 2 + - uid: 16231 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,71.5 + parent: 2 + - uid: 16232 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,70.5 + parent: 2 + - uid: 16233 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,71.5 + parent: 2 + - uid: 16234 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,72.5 + parent: 2 + - uid: 16235 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -21.5,72.5 + parent: 2 + - uid: 16236 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -21.5,71.5 + parent: 2 + - uid: 16237 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,71.5 + parent: 2 + - uid: 16238 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,71.5 + parent: 2 + - uid: 16239 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,71.5 + parent: 2 + - uid: 16240 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -16.5,71.5 + parent: 2 + - uid: 16241 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,71.5 + parent: 2 + - uid: 16242 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,71.5 + parent: 2 + - uid: 16243 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,71.5 + parent: 2 + - uid: 16244 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,70.5 + parent: 2 + - uid: 16245 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,69.5 + parent: 2 + - uid: 16246 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,70.5 + parent: 2 + - uid: 16247 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,69.5 + parent: 2 + - uid: 16248 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,69.5 + parent: 2 + - uid: 16249 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,69.5 + parent: 2 + - uid: 16250 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,70.5 + parent: 2 + - uid: 16251 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,70.5 + parent: 2 + - uid: 16252 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,69.5 + parent: 2 + - uid: 16253 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,69.5 + parent: 2 + - uid: 16254 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,69.5 + parent: 2 + - uid: 16255 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,71.5 + parent: 2 + - uid: 16256 + components: + - type: Transform + pos: 11.5,79.5 + parent: 2 + - uid: 16257 + components: + - type: Transform + pos: 11.5,76.5 + parent: 2 + - uid: 16258 + components: + - type: Transform + pos: 11.5,78.5 + parent: 2 + - uid: 16259 + components: + - type: Transform + pos: 15.5,79.5 + parent: 2 + - uid: 16260 + components: + - type: Transform + pos: 12.5,76.5 + parent: 2 + - uid: 16261 + components: + - type: Transform + pos: 13.5,77.5 + parent: 2 + - uid: 16262 + components: + - type: Transform + pos: 14.5,79.5 + parent: 2 + - uid: 16263 + components: + - type: Transform + pos: 17.5,79.5 + parent: 2 + - uid: 16264 + components: + - type: Transform + pos: 11.5,77.5 + parent: 2 + - uid: 16265 + components: + - type: Transform + pos: 13.5,76.5 + parent: 2 + - uid: 16266 + components: + - type: Transform + pos: 13.5,79.5 + parent: 2 + - uid: 16267 + components: + - type: Transform + pos: 16.5,79.5 + parent: 2 + - uid: 16268 + components: + - type: Transform + pos: 13.5,78.5 + parent: 2 + - uid: 16269 + components: + - type: Transform + pos: 0.5,79.5 + parent: 2 + - uid: 16270 + components: + - type: Transform + pos: 6.5,79.5 + parent: 2 + - uid: 16271 + components: + - type: Transform + pos: 6.5,80.5 + parent: 2 + - uid: 16272 + components: + - type: Transform + pos: 10.5,80.5 + parent: 2 + - uid: 16273 + components: + - type: Transform + pos: 10.5,79.5 + parent: 2 + - uid: 16274 + components: + - type: Transform + pos: -1.5,76.5 + parent: 2 + - uid: 16275 + components: + - type: Transform + pos: -2.5,76.5 + parent: 2 + - uid: 16276 + components: + - type: Transform + pos: -2.5,72.5 + parent: 2 + - uid: 16277 + components: + - type: Transform + pos: 5.5,79.5 + parent: 2 + - uid: 16278 + components: + - type: Transform + pos: -0.5,76.5 + parent: 2 + - uid: 16279 + components: + - type: Transform + pos: -1.5,78.5 + parent: 2 + - uid: 16280 + components: + - type: Transform + pos: -0.5,78.5 + parent: 2 + - uid: 16281 + components: + - type: Transform + pos: -0.5,79.5 + parent: 2 + - uid: 16282 + components: + - type: Transform + pos: -2.5,78.5 + parent: 2 + - uid: 16283 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,70.5 + parent: 2 + - uid: 16284 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,69.5 + parent: 2 + - uid: 16285 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,68.5 + parent: 2 + - uid: 16286 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,67.5 + parent: 2 + - uid: 16287 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,66.5 + parent: 2 + - uid: 16288 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,65.5 + parent: 2 + - uid: 16289 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,65.5 + parent: 2 + - uid: 16290 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,65.5 + parent: 2 + - uid: 16291 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,59.5 + parent: 2 + - uid: 16292 + components: + - type: Transform + pos: -15.5,63.5 + parent: 2 + - uid: 16293 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,64.5 + parent: 2 + - uid: 16294 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,63.5 + parent: 2 + - uid: 16295 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,62.5 + parent: 2 + - uid: 16296 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,62.5 + parent: 2 + - uid: 16297 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,61.5 + parent: 2 + - uid: 16298 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,60.5 + parent: 2 + - uid: 16299 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,59.5 + parent: 2 + - uid: 16300 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,59.5 + parent: 2 + - uid: 16301 + components: + - type: Transform + pos: -15.5,65.5 + parent: 2 + - uid: 16302 + components: + - type: Transform + pos: -15.5,64.5 + parent: 2 + - uid: 16303 + components: + - type: Transform + pos: -13.5,63.5 + parent: 2 + - uid: 16304 + components: + - type: Transform + pos: -12.5,65.5 + parent: 2 + - uid: 16305 + components: + - type: Transform + pos: -13.5,66.5 + parent: 2 + - uid: 16306 + components: + - type: Transform + pos: -13.5,65.5 + parent: 2 + - uid: 16308 + components: + - type: Transform + pos: -13.5,67.5 + parent: 2 + - uid: 16309 + components: + - type: Transform + pos: -13.5,62.5 + parent: 2 + - uid: 16310 + components: + - type: Transform + pos: -13.5,59.5 + parent: 2 + - uid: 16311 + components: + - type: Transform + pos: -19.5,59.5 + parent: 2 + - uid: 16312 + components: + - type: Transform + pos: -10.5,65.5 + parent: 2 + - uid: 16313 + components: + - type: Transform + pos: -9.5,65.5 + parent: 2 + - uid: 16314 + components: + - type: Transform + pos: -8.5,65.5 + parent: 2 + - uid: 16315 + components: + - type: Transform + pos: -8.5,66.5 + parent: 2 + - uid: 16316 + components: + - type: Transform + pos: -8.5,68.5 + parent: 2 + - uid: 16317 + components: + - type: Transform + pos: -8.5,64.5 + parent: 2 + - uid: 16318 + components: + - type: Transform + pos: -8.5,63.5 + parent: 2 + - uid: 16319 + components: + - type: Transform + pos: -9.5,63.5 + parent: 2 + - uid: 16320 + components: + - type: Transform + pos: -10.5,63.5 + parent: 2 + - uid: 16321 + components: + - type: Transform + pos: -8.5,62.5 + parent: 2 + - uid: 16322 + components: + - type: Transform + pos: -8.5,61.5 + parent: 2 + - uid: 16323 + components: + - type: Transform + pos: -10.5,61.5 + parent: 2 + - uid: 16324 + components: + - type: Transform + pos: -9.5,61.5 + parent: 2 + - uid: 16325 + components: + - type: Transform + pos: -10.5,60.5 + parent: 2 + - uid: 16326 + components: + - type: Transform + pos: -10.5,58.5 + parent: 2 + - uid: 16327 + components: + - type: Transform + pos: -10.5,57.5 + parent: 2 + - uid: 16328 + components: + - type: Transform + pos: -9.5,57.5 + parent: 2 + - uid: 16329 + components: + - type: Transform + pos: -8.5,57.5 + parent: 2 + - uid: 16330 + components: + - type: Transform + pos: -7.5,57.5 + parent: 2 + - uid: 16331 + components: + - type: Transform + pos: -6.5,57.5 + parent: 2 + - uid: 16332 + components: + - type: Transform + pos: -6.5,58.5 + parent: 2 + - uid: 16333 + components: + - type: Transform + pos: -6.5,59.5 + parent: 2 + - uid: 16334 + components: + - type: Transform + pos: -6.5,60.5 + parent: 2 + - uid: 16335 + components: + - type: Transform + pos: -6.5,61.5 + parent: 2 + - uid: 16336 + components: + - type: Transform + pos: -7.5,61.5 + parent: 2 + - uid: 16337 + components: + - type: Transform + pos: -5.5,61.5 + parent: 2 + - uid: 16338 + components: + - type: Transform + pos: -4.5,61.5 + parent: 2 + - uid: 16339 + components: + - type: Transform + pos: -3.5,61.5 + parent: 2 + - uid: 16340 + components: + - type: Transform + pos: -2.5,61.5 + parent: 2 + - uid: 16341 + components: + - type: Transform + pos: -2.5,60.5 + parent: 2 + - uid: 16342 + components: + - type: Transform + pos: -2.5,59.5 + parent: 2 + - uid: 16343 + components: + - type: Transform + pos: -2.5,58.5 + parent: 2 + - uid: 16344 + components: + - type: Transform + pos: -2.5,57.5 + parent: 2 + - uid: 16345 + components: + - type: Transform + pos: -7.5,65.5 + parent: 2 + - uid: 16346 + components: + - type: Transform + pos: -4.5,65.5 + parent: 2 + - uid: 16347 + components: + - type: Transform + pos: -4.5,66.5 + parent: 2 + - uid: 16348 + components: + - type: Transform + pos: -4.5,68.5 + parent: 2 + - uid: 16349 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,65.5 + parent: 2 + - uid: 16350 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,65.5 + parent: 2 + - uid: 16351 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,66.5 + parent: 2 + - uid: 16352 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,67.5 + parent: 2 + - uid: 16353 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,68.5 + parent: 2 + - uid: 16354 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,69.5 + parent: 2 + - uid: 16355 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,61.5 + parent: 2 + - uid: 16356 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,61.5 + parent: 2 + - uid: 16357 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,61.5 + parent: 2 + - uid: 16358 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,61.5 + parent: 2 + - uid: 16359 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,61.5 + parent: 2 + - uid: 16360 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,60.5 + parent: 2 + - uid: 16361 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,56.5 + parent: 2 + - uid: 16362 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,56.5 + parent: 2 + - uid: 16363 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,56.5 + parent: 2 + - uid: 16364 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,56.5 + parent: 2 + - uid: 16365 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,57.5 + parent: 2 + - uid: 16366 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,55.5 + parent: 2 + - uid: 16367 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,54.5 + parent: 2 + - uid: 16368 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,54.5 + parent: 2 + - uid: 16369 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,55.5 + parent: 2 + - uid: 16370 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,54.5 + parent: 2 + - uid: 16371 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,75.5 + parent: 2 + - uid: 16372 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 18.5,75.5 + parent: 2 + - uid: 16373 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,74.5 + parent: 2 + - uid: 16374 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,12.5 + parent: 2 + - uid: 16375 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,8.5 + parent: 2 + - uid: 16376 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,9.5 + parent: 2 + - uid: 16377 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,10.5 + parent: 2 + - uid: 16378 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,11.5 + parent: 2 + - uid: 16379 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,12.5 + parent: 2 + - uid: 16380 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,8.5 + parent: 2 + - uid: 16381 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 29.5,12.5 + parent: 2 + - uid: 16382 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 29.5,8.5 + parent: 2 + - uid: 16383 + components: + - type: Transform + pos: 30.5,12.5 + parent: 2 + - uid: 16384 + components: + - type: Transform + pos: 31.5,12.5 + parent: 2 + - uid: 16385 + components: + - type: Transform + pos: 31.5,13.5 + parent: 2 + - uid: 16386 + components: + - type: Transform + pos: 31.5,14.5 + parent: 2 + - uid: 16387 + components: + - type: Transform + pos: 31.5,16.5 + parent: 2 + - uid: 16388 + components: + - type: Transform + pos: 31.5,15.5 + parent: 2 + - uid: 16389 + components: + - type: Transform + pos: 31.5,17.5 + parent: 2 + - uid: 16390 + components: + - type: Transform + pos: 32.5,17.5 + parent: 2 + - uid: 16391 + components: + - type: Transform + pos: 33.5,17.5 + parent: 2 + - uid: 16392 + components: + - type: Transform + pos: 34.5,17.5 + parent: 2 + - uid: 16393 + components: + - type: Transform + pos: 34.5,18.5 + parent: 2 + - uid: 16395 + components: + - type: Transform + pos: 7.5,1.5 + parent: 2 + - uid: 16396 + components: + - type: Transform + pos: 8.5,1.5 + parent: 2 + - uid: 16397 + components: + - type: Transform + pos: 8.5,0.5 + parent: 2 + - uid: 16398 + components: + - type: Transform + pos: 10.5,0.5 + parent: 2 + - uid: 16399 + components: + - type: Transform + pos: 11.5,0.5 + parent: 2 + - uid: 16400 + components: + - type: Transform + pos: 13.5,0.5 + parent: 2 + - uid: 16401 + components: + - type: Transform + pos: 14.5,0.5 + parent: 2 + - uid: 16402 + components: + - type: Transform + pos: 16.5,0.5 + parent: 2 + - uid: 16403 + components: + - type: Transform + pos: 17.5,0.5 + parent: 2 + - uid: 16404 + components: + - type: Transform + pos: 27.5,-1.5 + parent: 2 + - uid: 16405 + components: + - type: Transform + pos: 21.5,3.5 + parent: 2 + - uid: 16406 + components: + - type: Transform + pos: 22.5,3.5 + parent: 2 + - uid: 16407 + components: + - type: Transform + pos: 22.5,4.5 + parent: 2 + - uid: 16408 + components: + - type: Transform + pos: 21.5,2.5 + parent: 2 + - uid: 16409 + components: + - type: Transform + pos: 21.5,1.5 + parent: 2 + - uid: 16410 + components: + - type: Transform + pos: 21.5,0.5 + parent: 2 + - uid: 16411 + components: + - type: Transform + pos: 21.5,-0.5 + parent: 2 + - uid: 16412 + components: + - type: Transform + pos: 21.5,-1.5 + parent: 2 + - uid: 16413 + components: + - type: Transform + pos: 22.5,-1.5 + parent: 2 + - uid: 16414 + components: + - type: Transform + pos: 22.5,-2.5 + parent: 2 + - uid: 16415 + components: + - type: Transform + pos: 23.5,-2.5 + parent: 2 + - uid: 16416 + components: + - type: Transform + pos: 23.5,-1.5 + parent: 2 + - uid: 16417 + components: + - type: Transform + pos: 22.5,-0.5 + parent: 2 + - uid: 16418 + components: + - type: Transform + pos: 22.5,0.5 + parent: 2 + - uid: 16419 + components: + - type: Transform + pos: 22.5,1.5 + parent: 2 + - uid: 16420 + components: + - type: Transform + pos: 22.5,2.5 + parent: 2 + - uid: 16421 + components: + - type: Transform + pos: 23.5,3.5 + parent: 2 + - uid: 16422 + components: + - type: Transform + pos: 23.5,4.5 + parent: 2 + - uid: 16423 + components: + - type: Transform + pos: 24.5,-2.5 + parent: 2 + - uid: 16424 + components: + - type: Transform + pos: 25.5,-2.5 + parent: 2 + - uid: 16425 + components: + - type: Transform + pos: 26.5,-2.5 + parent: 2 + - uid: 16426 + components: + - type: Transform + pos: 24.5,-1.5 + parent: 2 + - uid: 16427 + components: + - type: Transform + pos: 25.5,-1.5 + parent: 2 + - uid: 16428 + components: + - type: Transform + pos: 26.5,-1.5 + parent: 2 + - uid: 16429 + components: + - type: Transform + pos: 28.5,-1.5 + parent: 2 + - uid: 16430 + components: + - type: Transform + pos: 24.5,4.5 + parent: 2 + - uid: 16431 + components: + - type: Transform + pos: 25.5,4.5 + parent: 2 + - uid: 16432 + components: + - type: Transform + pos: 26.5,4.5 + parent: 2 + - uid: 16433 + components: + - type: Transform + pos: 27.5,4.5 + parent: 2 + - uid: 16434 + components: + - type: Transform + pos: 28.5,4.5 + parent: 2 + - uid: 16435 + components: + - type: Transform + pos: 29.5,4.5 + parent: 2 + - uid: 16436 + components: + - type: Transform + pos: 26.5,3.5 + parent: 2 + - uid: 16437 + components: + - type: Transform + pos: 25.5,3.5 + parent: 2 + - uid: 16438 + components: + - type: Transform + pos: 24.5,3.5 + parent: 2 + - uid: 16439 + components: + - type: Transform + pos: 29.5,3.5 + parent: 2 + - uid: 16440 + components: + - type: Transform + pos: 26.5,2.5 + parent: 2 + - uid: 16441 + components: + - type: Transform + pos: 25.5,0.5 + parent: 2 + - uid: 16442 + components: + - type: Transform + pos: 26.5,0.5 + parent: 2 + - uid: 16443 + components: + - type: Transform + pos: 27.5,0.5 + parent: 2 + - uid: 16444 + components: + - type: Transform + pos: 31.5,-1.5 + parent: 2 + - uid: 16445 + components: + - type: Transform + pos: 32.5,-1.5 + parent: 2 + - uid: 16446 + components: + - type: Transform + pos: 32.5,-2.5 + parent: 2 + - uid: 16447 + components: + - type: Transform + pos: 38.5,-2.5 + parent: 2 + - uid: 16448 + components: + - type: Transform + pos: 32.5,-0.5 + parent: 2 + - uid: 16449 + components: + - type: Transform + pos: 32.5,0.5 + parent: 2 + - uid: 16450 + components: + - type: Transform + pos: 32.5,1.5 + parent: 2 + - uid: 16451 + components: + - type: Transform + pos: 32.5,2.5 + parent: 2 + - uid: 16452 + components: + - type: Transform + pos: 29.5,2.5 + parent: 2 + - uid: 16453 + components: + - type: Transform + pos: 30.5,2.5 + parent: 2 + - uid: 16454 + components: + - type: Transform + pos: 39.5,-2.5 + parent: 2 + - uid: 16456 + components: + - type: Transform + pos: 38.5,-1.5 + parent: 2 + - uid: 16457 + components: + - type: Transform + pos: 38.5,-0.5 + parent: 2 + - uid: 16460 + components: + - type: Transform + pos: 37.5,1.5 + parent: 2 + - uid: 16461 + components: + - type: Transform + pos: 37.5,2.5 + parent: 2 + - uid: 16462 + components: + - type: Transform + pos: 36.5,2.5 + parent: 2 + - uid: 16463 + components: + - type: Transform + pos: 37.5,3.5 + parent: 2 + - uid: 16464 + components: + - type: Transform + pos: 40.5,-0.5 + parent: 2 + - uid: 16465 + components: + - type: Transform + pos: 40.5,0.5 + parent: 2 + - uid: 16466 + components: + - type: Transform + pos: 40.5,1.5 + parent: 2 + - uid: 16467 + components: + - type: Transform + pos: 40.5,2.5 + parent: 2 + - uid: 16468 + components: + - type: Transform + pos: 40.5,3.5 + parent: 2 + - uid: 16469 + components: + - type: Transform + pos: 33.5,8.5 + parent: 2 + - uid: 16470 + components: + - type: Transform + pos: 32.5,8.5 + parent: 2 + - uid: 16471 + components: + - type: Transform + pos: 30.5,8.5 + parent: 2 + - uid: 16472 + components: + - type: Transform + pos: 31.5,8.5 + parent: 2 + - uid: 16473 + components: + - type: Transform + pos: 41.5,6.5 + parent: 2 + - uid: 16474 + components: + - type: Transform + pos: 32.5,12.5 + parent: 2 + - uid: 16475 + components: + - type: Transform + pos: 34.5,6.5 + parent: 2 + - uid: 16476 + components: + - type: Transform + pos: 34.5,8.5 + parent: 2 + - uid: 16477 + components: + - type: Transform + pos: 34.5,12.5 + parent: 2 + - uid: 16478 + components: + - type: Transform + pos: 33.5,12.5 + parent: 2 + - uid: 16479 + components: + - type: Transform + pos: 37.5,6.5 + parent: 2 + - uid: 16480 + components: + - type: Transform + pos: 36.5,6.5 + parent: 2 + - uid: 16481 + components: + - type: Transform + pos: 37.5,5.5 + parent: 2 + - uid: 16482 + components: + - type: Transform + pos: 38.5,5.5 + parent: 2 + - uid: 16483 + components: + - type: Transform + pos: 39.5,5.5 + parent: 2 + - uid: 16484 + components: + - type: Transform + pos: 40.5,5.5 + parent: 2 + - uid: 16485 + components: + - type: Transform + pos: 41.5,5.5 + parent: 2 + - uid: 16486 + components: + - type: Transform + pos: 35.5,12.5 + parent: 2 + - uid: 16487 + components: + - type: Transform + pos: 36.5,12.5 + parent: 2 + - uid: 16488 + components: + - type: Transform + pos: 37.5,12.5 + parent: 2 + - uid: 16489 + components: + - type: Transform + pos: 37.5,13.5 + parent: 2 + - uid: 16490 + components: + - type: Transform + pos: 37.5,14.5 + parent: 2 + - uid: 16491 + components: + - type: Transform + pos: 37.5,15.5 + parent: 2 + - uid: 16492 + components: + - type: Transform + pos: 35.5,18.5 + parent: 2 + - uid: 16493 + components: + - type: Transform + pos: 36.5,18.5 + parent: 2 + - uid: 16494 + components: + - type: Transform + pos: 37.5,18.5 + parent: 2 + - uid: 16495 + components: + - type: Transform + pos: 37.5,17.5 + parent: 2 + - uid: 16496 + components: + - type: Transform + pos: 34.5,22.5 + parent: 2 + - uid: 16497 + components: + - type: Transform + pos: 35.5,22.5 + parent: 2 + - uid: 16498 + components: + - type: Transform + pos: 36.5,22.5 + parent: 2 + - uid: 16499 + components: + - type: Transform + pos: 35.5,31.5 + parent: 2 + - uid: 16500 + components: + - type: Transform + pos: 41.5,3.5 + parent: 2 + - uid: 16501 + components: + - type: Transform + pos: 44.5,-2.5 + parent: 2 + - uid: 16502 + components: + - type: Transform + pos: 44.5,-1.5 + parent: 2 + - uid: 16503 + components: + - type: Transform + pos: 44.5,-0.5 + parent: 2 + - uid: 16504 + components: + - type: Transform + pos: 43.5,3.5 + parent: 2 + - uid: 16505 + components: + - type: Transform + pos: 44.5,3.5 + parent: 2 + - uid: 16506 + components: + - type: Transform + pos: 44.5,2.5 + parent: 2 + - uid: 16507 + components: + - type: Transform + pos: 44.5,1.5 + parent: 2 + - uid: 16508 + components: + - type: Transform + pos: 44.5,0.5 + parent: 2 + - uid: 16509 + components: + - type: Transform + pos: 42.5,6.5 + parent: 2 + - uid: 16510 + components: + - type: Transform + pos: 44.5,4.5 + parent: 2 + - uid: 16511 + components: + - type: Transform + pos: 44.5,5.5 + parent: 2 + - uid: 16512 + components: + - type: Transform + pos: 45.5,5.5 + parent: 2 + - uid: 16513 + components: + - type: Transform + pos: 46.5,5.5 + parent: 2 + - uid: 16514 + components: + - type: Transform + pos: 46.5,6.5 + parent: 2 + - uid: 16515 + components: + - type: Transform + pos: 46.5,7.5 + parent: 2 + - uid: 16516 + components: + - type: Transform + pos: 46.5,8.5 + parent: 2 + - uid: 16517 + components: + - type: Transform + pos: 47.5,8.5 + parent: 2 + - uid: 16518 + components: + - type: Transform + pos: 47.5,9.5 + parent: 2 + - uid: 16519 + components: + - type: Transform + pos: 47.5,11.5 + parent: 2 + - uid: 16520 + components: + - type: Transform + pos: 45.5,11.5 + parent: 2 + - uid: 16521 + components: + - type: Transform + pos: 42.5,7.5 + parent: 2 + - uid: 16522 + components: + - type: Transform + pos: 42.5,8.5 + parent: 2 + - uid: 16523 + components: + - type: Transform + pos: 42.5,9.5 + parent: 2 + - uid: 16524 + components: + - type: Transform + pos: 42.5,10.5 + parent: 2 + - uid: 16525 + components: + - type: Transform + pos: 42.5,11.5 + parent: 2 + - uid: 16527 + components: + - type: Transform + pos: 44.5,11.5 + parent: 2 + - uid: 16528 + components: + - type: Transform + pos: 46.5,11.5 + parent: 2 + - uid: 16529 + components: + - type: Transform + pos: 41.5,10.5 + parent: 2 + - uid: 16530 + components: + - type: Transform + pos: 42.5,12.5 + parent: 2 + - uid: 16531 + components: + - type: Transform + pos: 42.5,13.5 + parent: 2 + - uid: 16532 + components: + - type: Transform + pos: 42.5,14.5 + parent: 2 + - uid: 16533 + components: + - type: Transform + pos: 41.5,14.5 + parent: 2 + - uid: 16534 + components: + - type: Transform + pos: 39.5,18.5 + parent: 2 + - uid: 16535 + components: + - type: Transform + pos: 39.5,19.5 + parent: 2 + - uid: 16536 + components: + - type: Transform + pos: 39.5,20.5 + parent: 2 + - uid: 16537 + components: + - type: Transform + pos: 39.5,21.5 + parent: 2 + - uid: 16538 + components: + - type: Transform + pos: 39.5,22.5 + parent: 2 + - uid: 16539 + components: + - type: Transform + pos: 40.5,22.5 + parent: 2 + - uid: 16540 + components: + - type: Transform + pos: 41.5,22.5 + parent: 2 + - uid: 16541 + components: + - type: Transform + pos: 42.5,22.5 + parent: 2 + - uid: 16542 + components: + - type: Transform + pos: 44.5,22.5 + parent: 2 + - uid: 16543 + components: + - type: Transform + pos: 45.5,22.5 + parent: 2 + - uid: 16544 + components: + - type: Transform + pos: 45.5,20.5 + parent: 2 + - uid: 16545 + components: + - type: Transform + pos: 45.5,19.5 + parent: 2 + - uid: 16546 + components: + - type: Transform + pos: 44.5,19.5 + parent: 2 + - uid: 16547 + components: + - type: Transform + pos: 43.5,18.5 + parent: 2 + - uid: 16548 + components: + - type: Transform + pos: 44.5,18.5 + parent: 2 + - uid: 16549 + components: + - type: Transform + pos: 42.5,15.5 + parent: 2 + - uid: 16550 + components: + - type: Transform + pos: 43.5,15.5 + parent: 2 + - uid: 16551 + components: + - type: Transform + pos: 47.5,12.5 + parent: 2 + - uid: 16552 + components: + - type: Transform + pos: 48.5,12.5 + parent: 2 + - uid: 16553 + components: + - type: Transform + pos: 50.5,12.5 + parent: 2 + - uid: 16554 + components: + - type: Transform + pos: 50.5,13.5 + parent: 2 + - uid: 16555 + components: + - type: Transform + pos: 50.5,15.5 + parent: 2 + - uid: 16556 + components: + - type: Transform + pos: 50.5,16.5 + parent: 2 + - uid: 16557 + components: + - type: Transform + pos: 50.5,19.5 + parent: 2 + - uid: 16558 + components: + - type: Transform + pos: 49.5,19.5 + parent: 2 + - uid: 16559 + components: + - type: Transform + pos: 46.5,19.5 + parent: 2 + - uid: 16560 + components: + - type: Transform + pos: 45.5,23.5 + parent: 2 + - uid: 16561 + components: + - type: Transform + pos: 46.5,23.5 + parent: 2 + - uid: 16562 + components: + - type: Transform + pos: 45.5,24.5 + parent: 2 + - uid: 16563 + components: + - type: Transform + pos: 44.5,24.5 + parent: 2 + - uid: 16564 + components: + - type: Transform + pos: 43.5,24.5 + parent: 2 + - uid: 16565 + components: + - type: Transform + pos: 42.5,24.5 + parent: 2 + - uid: 16566 + components: + - type: Transform + pos: 38.5,24.5 + parent: 2 + - uid: 16567 + components: + - type: Transform + pos: 37.5,24.5 + parent: 2 + - uid: 16568 + components: + - type: Transform + pos: 36.5,24.5 + parent: 2 + - uid: 16569 + components: + - type: Transform + pos: 36.5,23.5 + parent: 2 + - uid: 16570 + components: + - type: Transform + pos: 34.5,23.5 + parent: 2 + - uid: 16571 + components: + - type: Transform + pos: 34.5,24.5 + parent: 2 + - uid: 16572 + components: + - type: Transform + pos: 34.5,25.5 + parent: 2 + - uid: 16573 + components: + - type: Transform + pos: 34.5,26.5 + parent: 2 + - uid: 16574 + components: + - type: Transform + pos: 34.5,27.5 + parent: 2 + - uid: 16575 + components: + - type: Transform + pos: 34.5,28.5 + parent: 2 + - uid: 16576 + components: + - type: Transform + pos: 34.5,29.5 + parent: 2 + - uid: 16577 + components: + - type: Transform + pos: 34.5,30.5 + parent: 2 + - uid: 16578 + components: + - type: Transform + pos: 34.5,31.5 + parent: 2 + - uid: 16579 + components: + - type: Transform + pos: 34.5,32.5 + parent: 2 + - uid: 16580 + components: + - type: Transform + pos: 36.5,31.5 + parent: 2 + - uid: 16581 + components: + - type: Transform + pos: 37.5,31.5 + parent: 2 + - uid: 16582 + components: + - type: Transform + pos: 38.5,31.5 + parent: 2 + - uid: 16583 + components: + - type: Transform + pos: 38.5,32.5 + parent: 2 + - uid: 16584 + components: + - type: Transform + pos: 36.5,30.5 + parent: 2 + - uid: 16585 + components: + - type: Transform + pos: 36.5,28.5 + parent: 2 + - uid: 16586 + components: + - type: Transform + pos: 36.5,26.5 + parent: 2 + - uid: 16587 + components: + - type: Transform + pos: 37.5,26.5 + parent: 2 + - uid: 16588 + components: + - type: Transform + pos: 38.5,26.5 + parent: 2 + - uid: 16589 + components: + - type: Transform + pos: 39.5,26.5 + parent: 2 + - uid: 16590 + components: + - type: Transform + pos: 41.5,26.5 + parent: 2 + - uid: 16591 + components: + - type: Transform + pos: 42.5,26.5 + parent: 2 + - uid: 16592 + components: + - type: Transform + pos: 43.5,26.5 + parent: 2 + - uid: 16593 + components: + - type: Transform + pos: 43.5,27.5 + parent: 2 + - uid: 16594 + components: + - type: Transform + pos: 43.5,29.5 + parent: 2 + - uid: 16595 + components: + - type: Transform + pos: 43.5,30.5 + parent: 2 + - uid: 16596 + components: + - type: Transform + pos: 42.5,30.5 + parent: 2 + - uid: 16597 + components: + - type: Transform + pos: 43.5,31.5 + parent: 2 + - uid: 16598 + components: + - type: Transform + pos: 43.5,32.5 + parent: 2 + - uid: 16599 + components: + - type: Transform + pos: 42.5,32.5 + parent: 2 + - uid: 16600 + components: + - type: Transform + pos: 40.5,30.5 + parent: 2 + - uid: 16601 + components: + - type: Transform + pos: 39.5,30.5 + parent: 2 + - uid: 16602 + components: + - type: Transform + pos: 39.5,31.5 + parent: 2 + - uid: 16603 + components: + - type: Transform + pos: 39.5,32.5 + parent: 2 + - uid: 16604 + components: + - type: Transform + pos: 40.5,32.5 + parent: 2 + - uid: 16605 + components: + - type: Transform + pos: 45.5,25.5 + parent: 2 + - uid: 16606 + components: + - type: Transform + pos: 45.5,26.5 + parent: 2 + - uid: 16607 + components: + - type: Transform + pos: 45.5,27.5 + parent: 2 + - uid: 16608 + components: + - type: Transform + pos: 45.5,28.5 + parent: 2 + - uid: 16609 + components: + - type: Transform + pos: 45.5,29.5 + parent: 2 + - uid: 16610 + components: + - type: Transform + pos: 45.5,30.5 + parent: 2 + - uid: 16611 + components: + - type: Transform + pos: 45.5,31.5 + parent: 2 + - uid: 16612 + components: + - type: Transform + pos: 45.5,32.5 + parent: 2 + - uid: 16613 + components: + - type: Transform + pos: 46.5,32.5 + parent: 2 + - uid: 16614 + components: + - type: Transform + pos: 47.5,32.5 + parent: 2 + - uid: 16615 + components: + - type: Transform + pos: 48.5,32.5 + parent: 2 + - uid: 16616 + components: + - type: Transform + pos: 49.5,29.5 + parent: 2 + - uid: 16617 + components: + - type: Transform + pos: 49.5,32.5 + parent: 2 + - uid: 16618 + components: + - type: Transform + pos: 49.5,31.5 + parent: 2 + - uid: 16619 + components: + - type: Transform + pos: 49.5,28.5 + parent: 2 + - uid: 16620 + components: + - type: Transform + pos: 51.5,28.5 + parent: 2 + - uid: 16621 + components: + - type: Transform + pos: 50.5,28.5 + parent: 2 + - uid: 16622 + components: + - type: Transform + pos: 50.5,32.5 + parent: 2 + - uid: 16623 + components: + - type: Transform + pos: 51.5,32.5 + parent: 2 + - uid: 16624 + components: + - type: Transform + pos: 52.5,32.5 + parent: 2 + - uid: 16625 + components: + - type: Transform + pos: 53.5,32.5 + parent: 2 + - uid: 16626 + components: + - type: Transform + pos: 53.5,31.5 + parent: 2 + - uid: 16627 + components: + - type: Transform + pos: 53.5,29.5 + parent: 2 + - uid: 16628 + components: + - type: Transform + pos: 53.5,28.5 + parent: 2 + - uid: 16629 + components: + - type: Transform + pos: 52.5,28.5 + parent: 2 + - uid: 16630 + components: + - type: Transform + pos: 51.5,27.5 + parent: 2 + - uid: 16631 + components: + - type: Transform + pos: 51.5,23.5 + parent: 2 + - uid: 16632 + components: + - type: Transform + pos: 49.5,23.5 + parent: 2 + - uid: 16633 + components: + - type: Transform + pos: 49.5,21.5 + parent: 2 + - uid: 16634 + components: + - type: Transform + pos: 53.5,19.5 + parent: 2 + - uid: 16635 + components: + - type: Transform + pos: 56.5,9.5 + parent: 2 + - uid: 16636 + components: + - type: Transform + pos: 57.5,23.5 + parent: 2 + - uid: 16637 + components: + - type: Transform + pos: 58.5,23.5 + parent: 2 + - uid: 16638 + components: + - type: Transform + pos: 59.5,23.5 + parent: 2 + - uid: 16639 + components: + - type: Transform + pos: 60.5,23.5 + parent: 2 + - uid: 16640 + components: + - type: Transform + pos: 57.5,24.5 + parent: 2 + - uid: 16641 + components: + - type: Transform + pos: 57.5,25.5 + parent: 2 + - uid: 16642 + components: + - type: Transform + pos: 57.5,26.5 + parent: 2 + - uid: 16643 + components: + - type: Transform + pos: 57.5,27.5 + parent: 2 + - uid: 16644 + components: + - type: Transform + pos: 61.5,23.5 + parent: 2 + - uid: 16645 + components: + - type: Transform + pos: 61.5,22.5 + parent: 2 + - uid: 16646 + components: + - type: Transform + pos: 61.5,20.5 + parent: 2 + - uid: 16647 + components: + - type: Transform + pos: 61.5,19.5 + parent: 2 + - uid: 16648 + components: + - type: Transform + pos: 60.5,19.5 + parent: 2 + - uid: 16649 + components: + - type: Transform + pos: 60.5,18.5 + parent: 2 + - uid: 16650 + components: + - type: Transform + pos: 60.5,17.5 + parent: 2 + - uid: 16651 + components: + - type: Transform + pos: 60.5,16.5 + parent: 2 + - uid: 16652 + components: + - type: Transform + pos: 60.5,15.5 + parent: 2 + - uid: 16653 + components: + - type: Transform + pos: 60.5,14.5 + parent: 2 + - uid: 16654 + components: + - type: Transform + pos: 59.5,14.5 + parent: 2 + - uid: 16655 + components: + - type: Transform + pos: 51.5,12.5 + parent: 2 + - uid: 16656 + components: + - type: Transform + pos: 52.5,12.5 + parent: 2 + - uid: 16657 + components: + - type: Transform + pos: 53.5,12.5 + parent: 2 + - uid: 16658 + components: + - type: Transform + pos: 54.5,12.5 + parent: 2 + - uid: 16659 + components: + - type: Transform + pos: 56.5,11.5 + parent: 2 + - uid: 16660 + components: + - type: Transform + pos: 56.5,10.5 + parent: 2 + - uid: 16661 + components: + - type: Transform + pos: 54.5,14.5 + parent: 2 + - uid: 16662 + components: + - type: Transform + pos: 54.5,13.5 + parent: 2 + - uid: 16663 + components: + - type: Transform + pos: 55.5,14.5 + parent: 2 + - uid: 16664 + components: + - type: Transform + pos: 56.5,14.5 + parent: 2 + - uid: 16665 + components: + - type: Transform + pos: 58.5,14.5 + parent: 2 + - uid: 16666 + components: + - type: Transform + pos: 57.5,14.5 + parent: 2 + - uid: 16667 + components: + - type: Transform + pos: 48.5,8.5 + parent: 2 + - uid: 16668 + components: + - type: Transform + pos: 51.5,8.5 + parent: 2 + - uid: 16669 + components: + - type: Transform + pos: 50.5,8.5 + parent: 2 + - uid: 16670 + components: + - type: Transform + pos: 51.5,9.5 + parent: 2 + - uid: 16671 + components: + - type: Transform + pos: 51.5,11.5 + parent: 2 + - uid: 16672 + components: + - type: Transform + pos: 52.5,8.5 + parent: 2 + - uid: 16673 + components: + - type: Transform + pos: 53.5,8.5 + parent: 2 + - uid: 16674 + components: + - type: Transform + pos: 54.5,8.5 + parent: 2 + - uid: 16675 + components: + - type: Transform + pos: 55.5,8.5 + parent: 2 + - uid: 16676 + components: + - type: Transform + pos: 56.5,8.5 + parent: 2 + - uid: 16677 + components: + - type: Transform + pos: 56.5,7.5 + parent: 2 + - uid: 16678 + components: + - type: Transform + pos: 53.5,5.5 + parent: 2 + - uid: 16679 + components: + - type: Transform + pos: 54.5,5.5 + parent: 2 + - uid: 16680 + components: + - type: Transform + pos: 55.5,5.5 + parent: 2 + - uid: 16681 + components: + - type: Transform + pos: 56.5,5.5 + parent: 2 + - uid: 16682 + components: + - type: Transform + pos: 57.5,5.5 + parent: 2 + - uid: 16683 + components: + - type: Transform + pos: 58.5,5.5 + parent: 2 + - uid: 16684 + components: + - type: Transform + pos: 58.5,4.5 + parent: 2 + - uid: 16685 + components: + - type: Transform + pos: 58.5,3.5 + parent: 2 + - uid: 16686 + components: + - type: Transform + pos: 58.5,2.5 + parent: 2 + - uid: 16687 + components: + - type: Transform + pos: 58.5,1.5 + parent: 2 + - uid: 16688 + components: + - type: Transform + pos: 58.5,0.5 + parent: 2 + - uid: 16689 + components: + - type: Transform + pos: 58.5,-0.5 + parent: 2 + - uid: 16690 + components: + - type: Transform + pos: 58.5,-1.5 + parent: 2 + - uid: 16691 + components: + - type: Transform + pos: 58.5,-2.5 + parent: 2 + - uid: 16692 + components: + - type: Transform + pos: 58.5,-4.5 + parent: 2 + - uid: 16693 + components: + - type: Transform + pos: 58.5,-3.5 + parent: 2 + - uid: 16694 + components: + - type: Transform + pos: 44.5,-3.5 + parent: 2 + - uid: 16695 + components: + - type: Transform + pos: 44.5,-4.5 + parent: 2 + - uid: 16696 + components: + - type: Transform + pos: 45.5,-4.5 + parent: 2 + - uid: 16697 + components: + - type: Transform + pos: 46.5,-4.5 + parent: 2 + - uid: 16698 + components: + - type: Transform + pos: 47.5,-4.5 + parent: 2 + - uid: 16699 + components: + - type: Transform + pos: 48.5,-4.5 + parent: 2 + - uid: 16700 + components: + - type: Transform + pos: 57.5,-4.5 + parent: 2 + - uid: 16701 + components: + - type: Transform + pos: 56.5,-4.5 + parent: 2 + - uid: 16702 + components: + - type: Transform + pos: 48.5,-5.5 + parent: 2 + - uid: 16703 + components: + - type: Transform + pos: 48.5,-6.5 + parent: 2 + - uid: 16704 + components: + - type: Transform + pos: 48.5,-7.5 + parent: 2 + - uid: 16705 + components: + - type: Transform + pos: 48.5,-8.5 + parent: 2 + - uid: 16706 + components: + - type: Transform + pos: 48.5,-9.5 + parent: 2 + - uid: 16707 + components: + - type: Transform + pos: 54.5,-6.5 + parent: 2 + - uid: 16708 + components: + - type: Transform + pos: 54.5,-7.5 + parent: 2 + - uid: 16709 + components: + - type: Transform + pos: 54.5,-8.5 + parent: 2 + - uid: 16710 + components: + - type: Transform + pos: 54.5,-9.5 + parent: 2 + - uid: 16711 + components: + - type: Transform + pos: 49.5,-5.5 + parent: 2 + - uid: 16712 + components: + - type: Transform + pos: 49.5,-9.5 + parent: 2 + - uid: 16713 + components: + - type: Transform + pos: 50.5,-9.5 + parent: 2 + - uid: 16714 + components: + - type: Transform + pos: 51.5,-9.5 + parent: 2 + - uid: 16715 + components: + - type: Transform + pos: 52.5,-9.5 + parent: 2 + - uid: 16716 + components: + - type: Transform + pos: 53.5,-9.5 + parent: 2 + - uid: 16717 + components: + - type: Transform + pos: 47.5,5.5 + parent: 2 + - uid: 16719 + components: + - type: Transform + pos: 58.5,9.5 + parent: 2 + - uid: 16720 + components: + - type: Transform + pos: 58.5,10.5 + parent: 2 + - uid: 16721 + components: + - type: Transform + pos: 58.5,11.5 + parent: 2 + - uid: 16722 + components: + - type: Transform + pos: 61.5,7.5 + parent: 2 + - uid: 16723 + components: + - type: Transform + pos: 61.5,8.5 + parent: 2 + - uid: 16724 + components: + - type: Transform + pos: 61.5,9.5 + parent: 2 + - uid: 16725 + components: + - type: Transform + pos: 61.5,10.5 + parent: 2 + - uid: 16726 + components: + - type: Transform + pos: 61.5,11.5 + parent: 2 + - uid: 16727 + components: + - type: Transform + pos: 63.5,-0.5 + parent: 2 + - uid: 16728 + components: + - type: Transform + pos: 63.5,0.5 + parent: 2 + - uid: 16729 + components: + - type: Transform + pos: 62.5,0.5 + parent: 2 + - uid: 16730 + components: + - type: Transform + pos: 62.5,1.5 + parent: 2 + - uid: 16731 + components: + - type: Transform + pos: 62.5,5.5 + parent: 2 + - uid: 16732 + components: + - type: Transform + pos: 62.5,6.5 + parent: 2 + - uid: 16733 + components: + - type: Transform + pos: 62.5,7.5 + parent: 2 + - uid: 16734 + components: + - type: Transform + pos: 67.5,-0.5 + parent: 2 + - uid: 16735 + components: + - type: Transform + pos: 67.5,0.5 + parent: 2 + - uid: 16736 + components: + - type: Transform + pos: 68.5,0.5 + parent: 2 + - uid: 16737 + components: + - type: Transform + pos: 71.5,-1.5 + parent: 2 + - uid: 16738 + components: + - type: Transform + pos: 71.5,-2.5 + parent: 2 + - uid: 16739 + components: + - type: Transform + pos: 72.5,-2.5 + parent: 2 + - uid: 16740 + components: + - type: Transform + pos: 72.5,-3.5 + parent: 2 + - uid: 16741 + components: + - type: Transform + pos: 20.5,67.5 + parent: 2 + - uid: 16742 + components: + - type: Transform + pos: 19.5,67.5 + parent: 2 + - uid: 16743 + components: + - type: Transform + pos: 19.5,68.5 + parent: 2 + - uid: 16744 + components: + - type: Transform + pos: 19.5,69.5 + parent: 2 + - uid: 16745 + components: + - type: Transform + pos: 19.5,70.5 + parent: 2 + - uid: 16746 + components: + - type: Transform + pos: 18.5,70.5 + parent: 2 + - uid: 16747 + components: + - type: Transform + pos: 17.5,71.5 + parent: 2 + - uid: 16748 + components: + - type: Transform + pos: 17.5,70.5 + parent: 2 + - uid: 16749 + components: + - type: Transform + pos: 22.5,67.5 + parent: 2 + - uid: 16750 + components: + - type: Transform + pos: 23.5,67.5 + parent: 2 + - uid: 16751 + components: + - type: Transform + pos: 23.5,66.5 + parent: 2 + - uid: 16752 + components: + - type: Transform + pos: 24.5,66.5 + parent: 2 + - uid: 16753 + components: + - type: Transform + pos: 26.5,50.5 + parent: 2 + - uid: 16754 + components: + - type: Transform + pos: 26.5,51.5 + parent: 2 + - uid: 16755 + components: + - type: Transform + pos: 26.5,52.5 + parent: 2 + - uid: 16756 + components: + - type: Transform + pos: 26.5,53.5 + parent: 2 + - uid: 16757 + components: + - type: Transform + pos: 26.5,54.5 + parent: 2 + - uid: 16758 + components: + - type: Transform + pos: 26.5,55.5 + parent: 2 + - uid: 16759 + components: + - type: Transform + pos: 26.5,56.5 + parent: 2 + - uid: 16760 + components: + - type: Transform + pos: 26.5,57.5 + parent: 2 + - uid: 16761 + components: + - type: Transform + pos: 26.5,58.5 + parent: 2 + - uid: 16762 + components: + - type: Transform + pos: 27.5,59.5 + parent: 2 + - uid: 16763 + components: + - type: Transform + pos: 26.5,59.5 + parent: 2 + - uid: 16764 + components: + - type: Transform + pos: 28.5,59.5 + parent: 2 + - uid: 16765 + components: + - type: Transform + pos: 25.5,66.5 + parent: 2 + - uid: 16766 + components: + - type: Transform + pos: 30.5,62.5 + parent: 2 + - uid: 16767 + components: + - type: Transform + pos: 30.5,63.5 + parent: 2 + - uid: 16768 + components: + - type: Transform + pos: 30.5,64.5 + parent: 2 + - uid: 16769 + components: + - type: Transform + pos: 30.5,65.5 + parent: 2 + - uid: 16770 + components: + - type: Transform + pos: 30.5,66.5 + parent: 2 + - uid: 16771 + components: + - type: Transform + pos: 30.5,67.5 + parent: 2 + - uid: 16772 + components: + - type: Transform + pos: 29.5,67.5 + parent: 2 + - uid: 16773 + components: + - type: Transform + pos: 28.5,67.5 + parent: 2 + - uid: 16774 + components: + - type: Transform + pos: 27.5,67.5 + parent: 2 + - uid: 16775 + components: + - type: Transform + pos: 27.5,66.5 + parent: 2 + - uid: 16776 + components: + - type: Transform + pos: 31.5,52.5 + parent: 2 + - uid: 16777 + components: + - type: Transform + pos: 32.5,52.5 + parent: 2 + - uid: 16778 + components: + - type: Transform + pos: 29.5,52.5 + parent: 2 + - uid: 16779 + components: + - type: Transform + pos: 28.5,52.5 + parent: 2 + - uid: 16780 + components: + - type: Transform + pos: 28.5,53.5 + parent: 2 + - uid: 16781 + components: + - type: Transform + pos: 28.5,54.5 + parent: 2 + - uid: 16782 + components: + - type: Transform + pos: 28.5,55.5 + parent: 2 + - uid: 16783 + components: + - type: Transform + pos: 28.5,56.5 + parent: 2 + - uid: 16784 + components: + - type: Transform + pos: 28.5,57.5 + parent: 2 + - uid: 16785 + components: + - type: Transform + pos: 29.5,57.5 + parent: 2 + - uid: 16786 + components: + - type: Transform + pos: 30.5,57.5 + parent: 2 + - uid: 16787 + components: + - type: Transform + pos: 31.5,57.5 + parent: 2 + - uid: 16788 + components: + - type: Transform + pos: 32.5,57.5 + parent: 2 + - uid: 16789 + components: + - type: Transform + pos: 32.5,59.5 + parent: 2 + - uid: 16790 + components: + - type: Transform + pos: 32.5,56.5 + parent: 2 + - uid: 16791 + components: + - type: Transform + pos: 32.5,53.5 + parent: 2 + - uid: 16792 + components: + - type: Transform + pos: 32.5,54.5 + parent: 2 + - uid: 16793 + components: + - type: Transform + pos: 32.5,55.5 + parent: 2 + - uid: 16794 + components: + - type: Transform + pos: 33.5,59.5 + parent: 2 + - uid: 16795 + components: + - type: Transform + pos: 34.5,59.5 + parent: 2 + - uid: 16796 + components: + - type: Transform + pos: 34.5,58.5 + parent: 2 + - uid: 16797 + components: + - type: Transform + pos: 31.5,62.5 + parent: 2 + - uid: 16798 + components: + - type: Transform + pos: 32.5,62.5 + parent: 2 + - uid: 16799 + components: + - type: Transform + pos: 34.5,62.5 + parent: 2 + - uid: 16800 + components: + - type: Transform + pos: 36.5,62.5 + parent: 2 + - uid: 16801 + components: + - type: Transform + pos: 36.5,64.5 + parent: 2 + - uid: 16802 + components: + - type: Transform + pos: 36.5,63.5 + parent: 2 + - uid: 16803 + components: + - type: Transform + pos: 36.5,65.5 + parent: 2 + - uid: 16804 + components: + - type: Transform + pos: 32.5,66.5 + parent: 2 + - uid: 16805 + components: + - type: Transform + pos: 38.5,50.5 + parent: 2 + - uid: 16806 + components: + - type: Transform + pos: 38.5,51.5 + parent: 2 + - uid: 16807 + components: + - type: Transform + pos: 38.5,52.5 + parent: 2 + - uid: 16808 + components: + - type: Transform + pos: 38.5,53.5 + parent: 2 + - uid: 16809 + components: + - type: Transform + pos: 38.5,54.5 + parent: 2 + - uid: 16810 + components: + - type: Transform + pos: 38.5,55.5 + parent: 2 + - uid: 16811 + components: + - type: Transform + pos: 38.5,56.5 + parent: 2 + - uid: 16812 + components: + - type: Transform + pos: 38.5,57.5 + parent: 2 + - uid: 16813 + components: + - type: Transform + pos: 38.5,58.5 + parent: 2 + - uid: 16814 + components: + - type: Transform + pos: 40.5,67.5 + parent: 2 + - uid: 16815 + components: + - type: Transform + pos: 36.5,66.5 + parent: 2 + - uid: 16816 + components: + - type: Transform + pos: 36.5,67.5 + parent: 2 + - uid: 16817 + components: + - type: Transform + pos: 37.5,67.5 + parent: 2 + - uid: 16818 + components: + - type: Transform + pos: 38.5,67.5 + parent: 2 + - uid: 16819 + components: + - type: Transform + pos: 41.5,67.5 + parent: 2 + - uid: 16820 + components: + - type: Transform + pos: 42.5,67.5 + parent: 2 + - uid: 16821 + components: + - type: Transform + pos: 42.5,66.5 + parent: 2 + - uid: 16822 + components: + - type: Transform + pos: 47.5,62.5 + parent: 2 + - uid: 16823 + components: + - type: Transform + pos: 37.5,63.5 + parent: 2 + - uid: 16824 + components: + - type: Transform + pos: 38.5,63.5 + parent: 2 + - uid: 16825 + components: + - type: Transform + pos: 40.5,63.5 + parent: 2 + - uid: 16826 + components: + - type: Transform + pos: 41.5,63.5 + parent: 2 + - uid: 16827 + components: + - type: Transform + pos: 42.5,63.5 + parent: 2 + - uid: 16828 + components: + - type: Transform + pos: 42.5,64.5 + parent: 2 + - uid: 16829 + components: + - type: Transform + pos: 42.5,65.5 + parent: 2 + - uid: 16830 + components: + - type: Transform + pos: 43.5,67.5 + parent: 2 + - uid: 16831 + components: + - type: Transform + pos: 44.5,67.5 + parent: 2 + - uid: 16832 + components: + - type: Transform + pos: 45.5,67.5 + parent: 2 + - uid: 16833 + components: + - type: Transform + pos: 46.5,67.5 + parent: 2 + - uid: 16834 + components: + - type: Transform + pos: 46.5,62.5 + parent: 2 + - uid: 16835 + components: + - type: Transform + pos: 46.5,63.5 + parent: 2 + - uid: 16836 + components: + - type: Transform + pos: 46.5,66.5 + parent: 2 + - uid: 16837 + components: + - type: Transform + pos: 48.5,62.5 + parent: 2 + - uid: 16838 + components: + - type: Transform + pos: 49.5,62.5 + parent: 2 + - uid: 16839 + components: + - type: Transform + pos: 50.5,62.5 + parent: 2 + - uid: 16840 + components: + - type: Transform + pos: 50.5,61.5 + parent: 2 + - uid: 16841 + components: + - type: Transform + pos: 50.5,60.5 + parent: 2 + - uid: 16842 + components: + - type: Transform + pos: 51.5,60.5 + parent: 2 + - uid: 16843 + components: + - type: Transform + pos: 52.5,60.5 + parent: 2 + - uid: 16844 + components: + - type: Transform + pos: 53.5,60.5 + parent: 2 + - uid: 16845 + components: + - type: Transform + pos: 53.5,59.5 + parent: 2 + - uid: 16846 + components: + - type: Transform + pos: 53.5,58.5 + parent: 2 + - uid: 16849 + components: + - type: Transform + pos: 58.5,59.5 + parent: 2 + - uid: 16850 + components: + - type: Transform + pos: 58.5,58.5 + parent: 2 + - uid: 16851 + components: + - type: Transform + pos: 58.5,56.5 + parent: 2 + - uid: 16852 + components: + - type: Transform + pos: 58.5,55.5 + parent: 2 + - uid: 16853 + components: + - type: Transform + pos: 59.5,55.5 + parent: 2 + - uid: 16854 + components: + - type: Transform + pos: 60.5,55.5 + parent: 2 + - uid: 16855 + components: + - type: Transform + pos: 61.5,55.5 + parent: 2 + - uid: 16856 + components: + - type: Transform + pos: 62.5,55.5 + parent: 2 + - uid: 16857 + components: + - type: Transform + pos: 63.5,55.5 + parent: 2 + - uid: 16858 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 63.5,58.5 + parent: 2 + - uid: 16859 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 61.5,58.5 + parent: 2 + - uid: 16860 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 59.5,58.5 + parent: 2 + - uid: 16861 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 61.5,62.5 + parent: 2 + - uid: 16862 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 58.5,60.5 + parent: 2 + - uid: 16863 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 58.5,61.5 + parent: 2 + - uid: 16864 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 58.5,62.5 + parent: 2 + - uid: 16865 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 59.5,64.5 + parent: 2 + - uid: 16866 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 63.5,64.5 + parent: 2 + - uid: 16867 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 67.5,64.5 + parent: 2 + - uid: 16868 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 71.5,64.5 + parent: 2 + - uid: 16869 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 71.5,63.5 + parent: 2 + - uid: 16870 + components: + - type: Transform + pos: 72.5,63.5 + parent: 2 + - uid: 16871 + components: + - type: Transform + pos: 73.5,63.5 + parent: 2 + - uid: 16872 + components: + - type: Transform + pos: 74.5,63.5 + parent: 2 + - uid: 16873 + components: + - type: Transform + pos: 75.5,63.5 + parent: 2 + - uid: 16874 + components: + - type: Transform + pos: 79.5,63.5 + parent: 2 + - uid: 16875 + components: + - type: Transform + pos: 80.5,63.5 + parent: 2 + - uid: 16876 + components: + - type: Transform + pos: 76.5,58.5 + parent: 2 + - uid: 16877 + components: + - type: Transform + pos: 77.5,58.5 + parent: 2 + - uid: 16878 + components: + - type: Transform + pos: 78.5,58.5 + parent: 2 + - uid: 16879 + components: + - type: Transform + pos: 79.5,58.5 + parent: 2 + - uid: 16880 + components: + - type: Transform + pos: 80.5,58.5 + parent: 2 + - uid: 16881 + components: + - type: Transform + pos: 74.5,58.5 + parent: 2 + - uid: 16882 + components: + - type: Transform + pos: 73.5,58.5 + parent: 2 + - uid: 16883 + components: + - type: Transform + pos: 72.5,58.5 + parent: 2 + - uid: 16884 + components: + - type: Transform + pos: 71.5,58.5 + parent: 2 + - uid: 16885 + components: + - type: Transform + pos: 71.5,59.5 + parent: 2 + - uid: 16886 + components: + - type: Transform + pos: 71.5,61.5 + parent: 2 + - uid: 16887 + components: + - type: Transform + pos: 71.5,62.5 + parent: 2 + - uid: 16888 + components: + - type: Transform + pos: 81.5,54.5 + parent: 2 + - uid: 16889 + components: + - type: Transform + pos: 80.5,54.5 + parent: 2 + - uid: 16890 + components: + - type: Transform + pos: 81.5,52.5 + parent: 2 + - uid: 16891 + components: + - type: Transform + pos: 81.5,48.5 + parent: 2 + - uid: 16892 + components: + - type: Transform + pos: 82.5,48.5 + parent: 2 + - uid: 16893 + components: + - type: Transform + pos: 83.5,48.5 + parent: 2 + - uid: 16894 + components: + - type: Transform + pos: 83.5,47.5 + parent: 2 + - uid: 16895 + components: + - type: Transform + pos: 84.5,47.5 + parent: 2 + - uid: 16896 + components: + - type: Transform + pos: 84.5,46.5 + parent: 2 + - uid: 16897 + components: + - type: Transform + pos: 84.5,45.5 + parent: 2 + - uid: 16898 + components: + - type: Transform + pos: 83.5,45.5 + parent: 2 + - uid: 16899 + components: + - type: Transform + pos: 82.5,45.5 + parent: 2 + - uid: 16900 + components: + - type: Transform + pos: 80.5,45.5 + parent: 2 + - uid: 16901 + components: + - type: Transform + pos: 79.5,45.5 + parent: 2 + - uid: 16902 + components: + - type: Transform + pos: 79.5,46.5 + parent: 2 + - uid: 16903 + components: + - type: Transform + pos: 78.5,46.5 + parent: 2 + - uid: 16904 + components: + - type: Transform + pos: 77.5,46.5 + parent: 2 + - uid: 16905 + components: + - type: Transform + pos: 76.5,46.5 + parent: 2 + - uid: 16906 + components: + - type: Transform + pos: 75.5,46.5 + parent: 2 + - uid: 16907 + components: + - type: Transform + pos: 74.5,46.5 + parent: 2 + - uid: 16908 + components: + - type: Transform + pos: 73.5,46.5 + parent: 2 + - uid: 16909 + components: + - type: Transform + pos: 72.5,46.5 + parent: 2 + - uid: 16910 + components: + - type: Transform + pos: 72.5,47.5 + parent: 2 + - uid: 16911 + components: + - type: Transform + pos: 71.5,47.5 + parent: 2 + - uid: 16912 + components: + - type: Transform + pos: 70.5,47.5 + parent: 2 + - uid: 16913 + components: + - type: Transform + pos: 69.5,47.5 + parent: 2 + - uid: 16914 + components: + - type: Transform + pos: 69.5,44.5 + parent: 2 + - uid: 16915 + components: + - type: Transform + pos: 69.5,41.5 + parent: 2 + - uid: 16916 + components: + - type: Transform + pos: 70.5,41.5 + parent: 2 + - uid: 16917 + components: + - type: Transform + pos: 71.5,41.5 + parent: 2 + - uid: 16918 + components: + - type: Transform + pos: 72.5,41.5 + parent: 2 + - uid: 16919 + components: + - type: Transform + pos: 72.5,44.5 + parent: 2 + - uid: 16920 + components: + - type: Transform + pos: 79.5,41.5 + parent: 2 + - uid: 16921 + components: + - type: Transform + pos: 80.5,41.5 + parent: 2 + - uid: 16922 + components: + - type: Transform + pos: 79.5,40.5 + parent: 2 + - uid: 16923 + components: + - type: Transform + pos: 82.5,41.5 + parent: 2 + - uid: 16924 + components: + - type: Transform + pos: 83.5,41.5 + parent: 2 + - uid: 16925 + components: + - type: Transform + pos: 84.5,41.5 + parent: 2 + - uid: 16926 + components: + - type: Transform + pos: 83.5,40.5 + parent: 2 + - uid: 16927 + components: + - type: Transform + pos: 83.5,39.5 + parent: 2 + - uid: 16928 + components: + - type: Transform + pos: 83.5,38.5 + parent: 2 + - uid: 16929 + components: + - type: Transform + pos: 73.5,41.5 + parent: 2 + - uid: 16930 + components: + - type: Transform + pos: 74.5,41.5 + parent: 2 + - uid: 16931 + components: + - type: Transform + pos: 75.5,41.5 + parent: 2 + - uid: 16932 + components: + - type: Transform + pos: 76.5,41.5 + parent: 2 + - uid: 16933 + components: + - type: Transform + pos: 77.5,41.5 + parent: 2 + - uid: 16934 + components: + - type: Transform + pos: 78.5,41.5 + parent: 2 + - uid: 16935 + components: + - type: Transform + pos: 68.5,41.5 + parent: 2 + - uid: 16936 + components: + - type: Transform + pos: 67.5,41.5 + parent: 2 + - uid: 16937 + components: + - type: Transform + pos: 67.5,40.5 + parent: 2 + - uid: 16938 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 73.5,36.5 + parent: 2 + - uid: 16939 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 73.5,37.5 + parent: 2 + - uid: 16940 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 74.5,36.5 + parent: 2 + - uid: 16941 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 75.5,36.5 + parent: 2 + - uid: 16942 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 76.5,36.5 + parent: 2 + - uid: 16943 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 77.5,36.5 + parent: 2 + - uid: 16944 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 78.5,36.5 + parent: 2 + - uid: 16945 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 78.5,32.5 + parent: 2 + - uid: 16946 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 77.5,32.5 + parent: 2 + - uid: 16947 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 76.5,32.5 + parent: 2 + - uid: 16948 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 75.5,32.5 + parent: 2 + - uid: 16949 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 74.5,32.5 + parent: 2 + - uid: 16950 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 79.5,36.5 + parent: 2 + - uid: 16951 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 79.5,37.5 + parent: 2 + - uid: 16952 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 79.5,39.5 + parent: 2 + - uid: 16953 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 79.5,32.5 + parent: 2 + - uid: 16954 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 79.5,31.5 + parent: 2 + - uid: 16955 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 79.5,29.5 + parent: 2 + - uid: 16956 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 79.5,28.5 + parent: 2 + - uid: 16957 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 83.5,28.5 + parent: 2 + - uid: 16958 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 83.5,29.5 + parent: 2 + - uid: 16959 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 83.5,30.5 + parent: 2 + - uid: 16960 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 87.5,29.5 + parent: 2 + - uid: 16961 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 87.5,30.5 + parent: 2 + - uid: 16962 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 88.5,30.5 + parent: 2 + - uid: 16963 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 87.5,38.5 + parent: 2 + - uid: 16964 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 88.5,38.5 + parent: 2 + - uid: 16965 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 87.5,39.5 + parent: 2 + - uid: 16966 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 83.5,27.5 + parent: 2 + - uid: 16967 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 84.5,27.5 + parent: 2 + - uid: 16968 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 84.5,26.5 + parent: 2 + - uid: 16969 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 75.5,9.5 + parent: 2 + - uid: 16970 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 84.5,21.5 + parent: 2 + - uid: 16971 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 84.5,20.5 + parent: 2 + - uid: 16972 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 83.5,20.5 + parent: 2 + - uid: 16973 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 82.5,20.5 + parent: 2 + - uid: 16974 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 80.5,20.5 + parent: 2 + - uid: 16975 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 79.5,20.5 + parent: 2 + - uid: 16976 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 79.5,21.5 + parent: 2 + - uid: 16977 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 79.5,22.5 + parent: 2 + - uid: 16978 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 79.5,23.5 + parent: 2 + - uid: 16979 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 79.5,24.5 + parent: 2 + - uid: 16980 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 79.5,25.5 + parent: 2 + - uid: 16981 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 79.5,26.5 + parent: 2 + - uid: 16982 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 79.5,27.5 + parent: 2 + - uid: 16983 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 78.5,21.5 + parent: 2 + - uid: 16984 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 77.5,21.5 + parent: 2 + - uid: 16985 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 76.5,21.5 + parent: 2 + - uid: 16986 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 75.5,21.5 + parent: 2 + - uid: 16987 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 75.5,22.5 + parent: 2 + - uid: 16988 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 75.5,23.5 + parent: 2 + - uid: 16989 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 76.5,23.5 + parent: 2 + - uid: 16990 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 78.5,23.5 + parent: 2 + - uid: 16991 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 74.5,22.5 + parent: 2 + - uid: 16992 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 75.5,24.5 + parent: 2 + - uid: 16993 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 75.5,26.5 + parent: 2 + - uid: 16994 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 74.5,26.5 + parent: 2 + - uid: 16995 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 73.5,26.5 + parent: 2 + - uid: 16999 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 73.5,22.5 + parent: 2 + - uid: 17001 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 76.5,27.5 + parent: 2 + - uid: 17002 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 78.5,27.5 + parent: 2 + - uid: 17008 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 73.5,32.5 + parent: 2 + - uid: 17009 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 72.5,32.5 + parent: 2 + - uid: 17010 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 67.5,32.5 + parent: 2 + - uid: 17011 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 68.5,32.5 + parent: 2 + - uid: 17012 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 69.5,32.5 + parent: 2 + - uid: 17013 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 70.5,32.5 + parent: 2 + - uid: 17014 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 71.5,32.5 + parent: 2 + - uid: 17017 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 67.5,28.5 + parent: 2 + - uid: 17021 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 67.5,22.5 + parent: 2 + - uid: 17022 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 68.5,22.5 + parent: 2 + - uid: 17023 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 69.5,22.5 + parent: 2 + - uid: 17024 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 70.5,22.5 + parent: 2 + - uid: 17025 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 71.5,22.5 + parent: 2 + - uid: 17026 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 72.5,22.5 + parent: 2 + - uid: 17027 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 82.5,19.5 + parent: 2 + - uid: 17028 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 82.5,18.5 + parent: 2 + - uid: 17029 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 77.5,19.5 + parent: 2 + - uid: 17030 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 77.5,18.5 + parent: 2 + - uid: 17031 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 78.5,18.5 + parent: 2 + - uid: 17032 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 79.5,18.5 + parent: 2 + - uid: 17033 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 80.5,18.5 + parent: 2 + - uid: 17034 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 81.5,18.5 + parent: 2 + - uid: 17035 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 77.5,14.5 + parent: 2 + - uid: 17036 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 78.5,14.5 + parent: 2 + - uid: 17037 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 79.5,14.5 + parent: 2 + - uid: 17038 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 80.5,14.5 + parent: 2 + - uid: 17039 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 77.5,13.5 + parent: 2 + - uid: 17040 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 77.5,12.5 + parent: 2 + - uid: 17041 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 76.5,12.5 + parent: 2 + - uid: 17042 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 75.5,12.5 + parent: 2 + - uid: 17043 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 75.5,11.5 + parent: 2 + - uid: 17044 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 75.5,10.5 + parent: 2 + - uid: 17045 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 75.5,6.5 + parent: 2 + - uid: 17046 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 76.5,6.5 + parent: 2 + - uid: 17047 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 76.5,1.5 + parent: 2 + - uid: 17048 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 75.5,-2.5 + parent: 2 + - uid: 17049 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 75.5,-1.5 + parent: 2 + - uid: 17050 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 68.5,1.5 + parent: 2 + - uid: 17051 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 68.5,4.5 + parent: 2 + - uid: 17052 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 68.5,5.5 + parent: 2 + - uid: 17053 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 68.5,6.5 + parent: 2 + - uid: 17054 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 68.5,7.5 + parent: 2 + - uid: 17055 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 69.5,7.5 + parent: 2 + - uid: 17056 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 69.5,8.5 + parent: 2 + - uid: 17057 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 70.5,8.5 + parent: 2 + - uid: 17058 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 71.5,8.5 + parent: 2 + - uid: 17059 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 71.5,7.5 + parent: 2 + - uid: 17060 + components: + - type: Transform + pos: 68.5,12.5 + parent: 2 + - uid: 17061 + components: + - type: Transform + pos: 69.5,12.5 + parent: 2 + - uid: 17062 + components: + - type: Transform + pos: 70.5,12.5 + parent: 2 + - uid: 17063 + components: + - type: Transform + pos: 68.5,16.5 + parent: 2 + - uid: 17064 + components: + - type: Transform + pos: 69.5,16.5 + parent: 2 + - uid: 17065 + components: + - type: Transform + pos: 70.5,16.5 + parent: 2 + - uid: 17066 + components: + - type: Transform + pos: 72.5,16.5 + parent: 2 + - uid: 17067 + components: + - type: Transform + pos: 73.5,16.5 + parent: 2 + - uid: 17068 + components: + - type: Transform + pos: 74.5,16.5 + parent: 2 + - uid: 17069 + components: + - type: Transform + pos: 74.5,14.5 + parent: 2 + - uid: 17070 + components: + - type: Transform + pos: 74.5,13.5 + parent: 2 + - uid: 17071 + components: + - type: Transform + pos: 74.5,12.5 + parent: 2 + - uid: 17072 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 45.5,21.5 + parent: 2 + - uid: 17073 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,12.5 + parent: 2 + - uid: 17074 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,12.5 + parent: 2 + - uid: 17075 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,11.5 + parent: 2 + - uid: 17076 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,13.5 + parent: 2 + - uid: 17077 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 18.5,13.5 + parent: 2 + - uid: 17078 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 17.5,13.5 + parent: 2 + - uid: 17079 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 50.5,59.5 + parent: 2 + - uid: 17080 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 50.5,58.5 + parent: 2 + - uid: 17081 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -18.5,5.5 + parent: 2 + - uid: 17082 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 17.5,11.5 + parent: 2 + - uid: 17083 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 17.5,12.5 + parent: 2 + - uid: 17084 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 76.5,14.5 + parent: 2 + - uid: 17085 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 82.5,47.5 + parent: 2 + - uid: 17086 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 52.5,58.5 + parent: 2 + - uid: 17087 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -21.5,10.5 + parent: 2 + - uid: 17088 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,10.5 + parent: 2 + - uid: 17089 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 54.5,19.5 + parent: 2 + - uid: 17090 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 54.5,18.5 + parent: 2 + - uid: 17091 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 54.5,16.5 + parent: 2 + - uid: 17092 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 54.5,15.5 + parent: 2 + - uid: 17093 + components: + - type: Transform + pos: -5.5,65.5 + parent: 2 + - uid: 17094 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 35.5,62.5 + parent: 2 + - uid: 17095 + components: + - type: Transform + pos: 67.5,23.5 + parent: 2 + - uid: 17104 + components: + - type: Transform + pos: 67.5,26.5 + parent: 2 + - uid: 17105 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -30.5,32.5 + parent: 2 + - uid: 17129 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,73.5 + parent: 2 + - uid: 17130 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -18.5,73.5 + parent: 2 + - uid: 17131 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -17.5,73.5 + parent: 2 + - uid: 17132 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.5,73.5 + parent: 2 + - uid: 17133 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,73.5 + parent: 2 + - uid: 17134 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,73.5 + parent: 2 + - uid: 17136 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,-9.5 + parent: 2 + - uid: 17137 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -18.5,-13.5 + parent: 2 + - uid: 17138 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,-13.5 + parent: 2 + - uid: 17139 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,26.5 + parent: 2 + - uid: 17140 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,30.5 + parent: 2 + - uid: 17141 + components: + - type: Transform + pos: 2.5,31.5 + parent: 2 + - uid: 17142 + components: + - type: Transform + pos: 2.5,35.5 + parent: 2 + - uid: 17143 + components: + - type: Transform + pos: -24.5,21.5 + parent: 2 + - uid: 17148 + components: + - type: Transform + pos: 34.5,-54.5 + parent: 2 + - uid: 17154 + components: + - type: Transform + pos: 20.5,-26.5 + parent: 2 + - uid: 17155 + components: + - type: Transform + pos: 40.5,-37.5 + parent: 2 + - uid: 17156 + components: + - type: Transform + pos: 40.5,-38.5 + parent: 2 + - uid: 17157 + components: + - type: Transform + pos: 40.5,-36.5 + parent: 2 + - uid: 17158 + components: + - type: Transform + pos: 38.5,-26.5 + parent: 2 + - uid: 17227 + components: + - type: Transform + pos: 40.5,-28.5 + parent: 2 + - uid: 17230 + components: + - type: Transform + pos: 38.5,-22.5 + parent: 2 + - uid: 17239 + components: + - type: Transform + pos: 40.5,-32.5 + parent: 2 + - uid: 17240 + components: + - type: Transform + pos: 40.5,-33.5 + parent: 2 + - uid: 17241 + components: + - type: Transform + pos: 38.5,-24.5 + parent: 2 + - uid: 17242 + components: + - type: Transform + pos: 40.5,-27.5 + parent: 2 + - uid: 17243 + components: + - type: Transform + pos: 38.5,-27.5 + parent: 2 + - uid: 17244 + components: + - type: Transform + pos: 39.5,-52.5 + parent: 2 + - uid: 17247 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,67.5 + parent: 2 + - uid: 17340 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,71.5 + parent: 2 + - uid: 17820 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,74.5 + parent: 2 + - uid: 17870 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,75.5 + parent: 2 + - uid: 18248 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 54.5,61.5 + parent: 2 + - uid: 18383 + components: + - type: Transform + pos: 36.5,-54.5 + parent: 2 + - uid: 18384 + components: + - type: Transform + pos: 38.5,-54.5 + parent: 2 + - uid: 18385 + components: + - type: Transform + pos: 39.5,-53.5 + parent: 2 + - uid: 18386 + components: + - type: Transform + pos: 38.5,-23.5 + parent: 2 + - uid: 18387 + components: + - type: Transform + pos: 38.5,-20.5 + parent: 2 + - uid: 18388 + components: + - type: Transform + pos: 38.5,-19.5 + parent: 2 + - uid: 18389 + components: + - type: Transform + pos: 40.5,-30.5 + parent: 2 + - uid: 18390 + components: + - type: Transform + pos: 40.5,-31.5 + parent: 2 + - uid: 18461 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,-23.5 + parent: 2 + - uid: 18646 + components: + - type: Transform + pos: -5.5,22.5 + parent: 2 + - uid: 20234 + components: + - type: Transform + pos: 35.5,-27.5 + parent: 2 + - uid: 20235 + components: + - type: Transform + pos: 35.5,-29.5 + parent: 2 +- proto: WallSolid + entities: + - uid: 6325 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 79.5,48.5 + parent: 2 + - uid: 8535 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,80.5 + parent: 2 + - uid: 8536 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -30.5,80.5 + parent: 2 + - uid: 8537 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -32.5,80.5 + parent: 2 + - uid: 8538 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,80.5 + parent: 2 + - uid: 9120 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,80.5 + parent: 2 + - uid: 9532 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,78.5 + parent: 2 + - uid: 12573 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,72.5 + parent: 2 + - uid: 13972 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,74.5 + parent: 2 + - uid: 13973 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,76.5 + parent: 2 + - uid: 17124 + components: + - type: Transform + pos: 30.5,-45.5 + parent: 2 + - uid: 17125 + components: + - type: Transform + pos: -41.5,40.5 + parent: 2 + - uid: 17126 + components: + - type: Transform + pos: -40.5,41.5 + parent: 2 + - uid: 17127 + components: + - type: Transform + pos: -39.5,42.5 + parent: 2 + - uid: 17245 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -38.5,70.5 + parent: 2 + - uid: 17250 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -38.5,68.5 + parent: 2 + - uid: 17251 + components: + - type: Transform + pos: -35.5,65.5 + parent: 2 + - uid: 17252 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 55.5,47.5 + parent: 2 + - uid: 17253 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 58.5,-9.5 + parent: 2 + - uid: 17254 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 58.5,-7.5 + parent: 2 + - uid: 17255 + components: + - type: Transform + pos: -14.5,-2.5 + parent: 2 + - uid: 17256 + components: + - type: Transform + pos: -34.5,65.5 + parent: 2 + - uid: 17257 + components: + - type: Transform + pos: 0.5,1.5 + parent: 2 + - uid: 17258 + components: + - type: Transform + pos: -12.5,4.5 + parent: 2 + - uid: 17259 + components: + - type: Transform + pos: -13.5,4.5 + parent: 2 + - uid: 17260 + components: + - type: Transform + pos: -15.5,4.5 + parent: 2 + - uid: 17261 + components: + - type: Transform + pos: -8.5,4.5 + parent: 2 + - uid: 17262 + components: + - type: Transform + pos: -8.5,5.5 + parent: 2 + - uid: 17263 + components: + - type: Transform + pos: -8.5,6.5 + parent: 2 + - uid: 17264 + components: + - type: Transform + pos: -8.5,7.5 + parent: 2 + - uid: 17265 + components: + - type: Transform + pos: -8.5,8.5 + parent: 2 + - uid: 17266 + components: + - type: Transform + pos: -9.5,8.5 + parent: 2 + - uid: 17267 + components: + - type: Transform + pos: -8.5,9.5 + parent: 2 + - uid: 17268 + components: + - type: Transform + pos: -7.5,9.5 + parent: 2 + - uid: 17269 + components: + - type: Transform + pos: -6.5,9.5 + parent: 2 + - uid: 17270 + components: + - type: Transform + pos: -5.5,9.5 + parent: 2 + - uid: 17271 + components: + - type: Transform + pos: -4.5,9.5 + parent: 2 + - uid: 17272 + components: + - type: Transform + pos: -4.5,8.5 + parent: 2 + - uid: 17273 + components: + - type: Transform + pos: -4.5,5.5 + parent: 2 + - uid: 17274 + components: + - type: Transform + pos: -4.5,4.5 + parent: 2 + - uid: 17275 + components: + - type: Transform + pos: -4.5,3.5 + parent: 2 + - uid: 17276 + components: + - type: Transform + pos: -11.5,8.5 + parent: 2 + - uid: 17277 + components: + - type: Transform + pos: -12.5,8.5 + parent: 2 + - uid: 17278 + components: + - type: Transform + pos: -13.5,10.5 + parent: 2 + - uid: 17279 + components: + - type: Transform + pos: -12.5,10.5 + parent: 2 + - uid: 17280 + components: + - type: Transform + pos: -17.5,9.5 + parent: 2 + - uid: 17281 + components: + - type: Transform + pos: 5.5,9.5 + parent: 2 + - uid: 17282 + components: + - type: Transform + pos: -1.5,13.5 + parent: 2 + - uid: 17283 + components: + - type: Transform + pos: 1.5,13.5 + parent: 2 + - uid: 17284 + components: + - type: Transform + pos: 2.5,13.5 + parent: 2 + - uid: 17285 + components: + - type: Transform + pos: 13.5,15.5 + parent: 2 + - uid: 17286 + components: + - type: Transform + pos: 13.5,16.5 + parent: 2 + - uid: 17287 + components: + - type: Transform + pos: 13.5,17.5 + parent: 2 + - uid: 17288 + components: + - type: Transform + pos: 13.5,18.5 + parent: 2 + - uid: 17289 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,22.5 + parent: 2 + - uid: 17290 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,22.5 + parent: 2 + - uid: 17291 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,23.5 + parent: 2 + - uid: 17292 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,24.5 + parent: 2 + - uid: 17293 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,24.5 + parent: 2 + - uid: 17294 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,22.5 + parent: 2 + - uid: 17295 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,22.5 + parent: 2 + - uid: 17296 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,22.5 + parent: 2 + - uid: 17297 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,31.5 + parent: 2 + - uid: 17298 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,32.5 + parent: 2 + - uid: 17299 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,36.5 + parent: 2 + - uid: 17300 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,-1.5 + parent: 2 + - uid: 17301 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -42.5,22.5 + parent: 2 + - uid: 17302 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -42.5,19.5 + parent: 2 + - uid: 17303 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -42.5,20.5 + parent: 2 + - uid: 17304 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -42.5,18.5 + parent: 2 + - uid: 17305 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -42.5,16.5 + parent: 2 + - uid: 17306 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -42.5,15.5 + parent: 2 + - uid: 17307 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -42.5,14.5 + parent: 2 + - uid: 17308 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -42.5,13.5 + parent: 2 + - uid: 17309 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -42.5,12.5 + parent: 2 + - uid: 17310 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -42.5,10.5 + parent: 2 + - uid: 17311 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -42.5,9.5 + parent: 2 + - uid: 17312 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -42.5,8.5 + parent: 2 + - uid: 17313 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -42.5,5.5 + parent: 2 + - uid: 17314 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -42.5,4.5 + parent: 2 + - uid: 17315 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -41.5,4.5 + parent: 2 + - uid: 17316 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -40.5,4.5 + parent: 2 + - uid: 17317 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -39.5,4.5 + parent: 2 + - uid: 17318 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,4.5 + parent: 2 + - uid: 17319 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,4.5 + parent: 2 + - uid: 17320 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,3.5 + parent: 2 + - uid: 17321 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,-0.5 + parent: 2 + - uid: 17322 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,0.5 + parent: 2 + - uid: 17323 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,1.5 + parent: 2 + - uid: 17324 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,-1.5 + parent: 2 + - uid: 17325 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,-1.5 + parent: 2 + - uid: 17326 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -32.5,-1.5 + parent: 2 + - uid: 17327 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -31.5,-1.5 + parent: 2 + - uid: 17328 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,14.5 + parent: 2 + - uid: 17329 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,14.5 + parent: 2 + - uid: 17330 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,13.5 + parent: 2 + - uid: 17331 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,46.5 + parent: 2 + - uid: 17332 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,46.5 + parent: 2 + - uid: 17333 + components: + - type: Transform + pos: 34.5,19.5 + parent: 2 + - uid: 17335 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -44.5,53.5 + parent: 2 + - uid: 17336 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -42.5,51.5 + parent: 2 + - uid: 17338 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -43.5,55.5 + parent: 2 + - uid: 17339 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -42.5,57.5 + parent: 2 + - uid: 17341 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 13.5,75.5 + parent: 2 + - uid: 17342 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,67.5 + parent: 2 + - uid: 17343 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,67.5 + parent: 2 + - uid: 17344 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,65.5 + parent: 2 + - uid: 17345 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,65.5 + parent: 2 + - uid: 17346 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,65.5 + parent: 2 + - uid: 17347 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,65.5 + parent: 2 + - uid: 17348 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,69.5 + parent: 2 + - uid: 17349 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,69.5 + parent: 2 + - uid: 17350 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,69.5 + parent: 2 + - uid: 17351 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,69.5 + parent: 2 + - uid: 17352 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,65.5 + parent: 2 + - uid: 17353 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,66.5 + parent: 2 + - uid: 17354 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,68.5 + parent: 2 + - uid: 17355 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,69.5 + parent: 2 + - uid: 17356 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 13.5,73.5 + parent: 2 + - uid: 17357 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 13.5,72.5 + parent: 2 + - uid: 17358 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,69.5 + parent: 2 + - uid: 17359 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,69.5 + parent: 2 + - uid: 17360 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,69.5 + parent: 2 + - uid: 17361 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,69.5 + parent: 2 + - uid: 17362 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 13.5,69.5 + parent: 2 + - uid: 17363 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 13.5,70.5 + parent: 2 + - uid: 17364 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 13.5,71.5 + parent: 2 + - uid: 17365 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,68.5 + parent: 2 + - uid: 17366 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,66.5 + parent: 2 + - uid: 17367 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,65.5 + parent: 2 + - uid: 17368 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,65.5 + parent: 2 + - uid: 17369 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,65.5 + parent: 2 + - uid: 17370 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,65.5 + parent: 2 + - uid: 17371 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,66.5 + parent: 2 + - uid: 17372 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,67.5 + parent: 2 + - uid: 17373 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,68.5 + parent: 2 + - uid: 17374 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,65.5 + parent: 2 + - uid: 17375 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,65.5 + parent: 2 + - uid: 17376 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,63.5 + parent: 2 + - uid: 17377 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,62.5 + parent: 2 + - uid: 17378 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,57.5 + parent: 2 + - uid: 17379 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,58.5 + parent: 2 + - uid: 17380 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,59.5 + parent: 2 + - uid: 17381 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,60.5 + parent: 2 + - uid: 17382 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,61.5 + parent: 2 + - uid: 17383 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,54.5 + parent: 2 + - uid: 17384 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,51.5 + parent: 2 + - uid: 17385 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,50.5 + parent: 2 + - uid: 17386 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,50.5 + parent: 2 + - uid: 17387 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,16.5 + parent: 2 + - uid: 17388 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 16.5,16.5 + parent: 2 + - uid: 17389 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 17.5,16.5 + parent: 2 + - uid: 17390 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,16.5 + parent: 2 + - uid: 17391 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,17.5 + parent: 2 + - uid: 17392 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,18.5 + parent: 2 + - uid: 17393 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,9.5 + parent: 2 + - uid: 17394 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 16.5,9.5 + parent: 2 + - uid: 17395 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 16.5,8.5 + parent: 2 + - uid: 17396 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 16.5,7.5 + parent: 2 + - uid: 17397 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 17.5,7.5 + parent: 2 + - uid: 17398 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 16.5,13.5 + parent: 2 + - uid: 17399 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 16.5,14.5 + parent: 2 + - uid: 17400 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 16.5,15.5 + parent: 2 + - uid: 17401 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,16.5 + parent: 2 + - uid: 17402 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 20.5,16.5 + parent: 2 + - uid: 17403 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,16.5 + parent: 2 + - uid: 17404 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,18.5 + parent: 2 + - uid: 17405 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 20.5,18.5 + parent: 2 + - uid: 17406 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,18.5 + parent: 2 + - uid: 17407 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,18.5 + parent: 2 + - uid: 17408 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,16.5 + parent: 2 + - uid: 17409 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,15.5 + parent: 2 + - uid: 17410 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 20.5,7.5 + parent: 2 + - uid: 17411 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,7.5 + parent: 2 + - uid: 17412 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,7.5 + parent: 2 + - uid: 17413 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 23.5,7.5 + parent: 2 + - uid: 17414 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,7.5 + parent: 2 + - uid: 17415 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,8.5 + parent: 2 + - uid: 17416 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,8.5 + parent: 2 + - uid: 17417 + components: + - type: Transform + pos: 30.5,15.5 + parent: 2 + - uid: 17418 + components: + - type: Transform + pos: 27.5,13.5 + parent: 2 + - uid: 17419 + components: + - type: Transform + pos: 28.5,15.5 + parent: 2 + - uid: 17420 + components: + - type: Transform + pos: 29.5,15.5 + parent: 2 + - uid: 17421 + components: + - type: Transform + pos: 31.5,18.5 + parent: 2 + - uid: 17422 + components: + - type: Transform + pos: 30.5,18.5 + parent: 2 + - uid: 17423 + components: + - type: Transform + pos: 29.5,18.5 + parent: 2 + - uid: 17424 + components: + - type: Transform + pos: 28.5,18.5 + parent: 2 + - uid: 17425 + components: + - type: Transform + pos: 11.5,1.5 + parent: 2 + - uid: 17426 + components: + - type: Transform + pos: 10.5,1.5 + parent: 2 + - uid: 17427 + components: + - type: Transform + pos: 11.5,2.5 + parent: 2 + - uid: 17428 + components: + - type: Transform + pos: 11.5,3.5 + parent: 2 + - uid: 17429 + components: + - type: Transform + pos: 11.5,5.5 + parent: 2 + - uid: 17430 + components: + - type: Transform + pos: 11.5,6.5 + parent: 2 + - uid: 17431 + components: + - type: Transform + pos: 10.5,6.5 + parent: 2 + - uid: 17432 + components: + - type: Transform + pos: 8.5,6.5 + parent: 2 + - uid: 17433 + components: + - type: Transform + pos: 7.5,6.5 + parent: 2 + - uid: 17434 + components: + - type: Transform + pos: 8.5,3.5 + parent: 2 + - uid: 17435 + components: + - type: Transform + pos: 13.5,1.5 + parent: 2 + - uid: 17436 + components: + - type: Transform + pos: 13.5,2.5 + parent: 2 + - uid: 17437 + components: + - type: Transform + pos: 13.5,3.5 + parent: 2 + - uid: 17438 + components: + - type: Transform + pos: 13.5,4.5 + parent: 2 + - uid: 17439 + components: + - type: Transform + pos: 14.5,4.5 + parent: 2 + - uid: 17440 + components: + - type: Transform + pos: 16.5,4.5 + parent: 2 + - uid: 17441 + components: + - type: Transform + pos: 17.5,4.5 + parent: 2 + - uid: 17442 + components: + - type: Transform + pos: 17.5,3.5 + parent: 2 + - uid: 17443 + components: + - type: Transform + pos: 17.5,2.5 + parent: 2 + - uid: 17444 + components: + - type: Transform + pos: 17.5,1.5 + parent: 2 + - uid: 17445 + components: + - type: Transform + pos: 8.5,-2.5 + parent: 2 + - uid: 17446 + components: + - type: Transform + pos: 10.5,-2.5 + parent: 2 + - uid: 17447 + components: + - type: Transform + pos: 13.5,-2.5 + parent: 2 + - uid: 17448 + components: + - type: Transform + pos: 14.5,-2.5 + parent: 2 + - uid: 17449 + components: + - type: Transform + pos: 14.5,-1.5 + parent: 2 + - uid: 17451 + components: + - type: Transform + pos: 21.5,5.5 + parent: 2 + - uid: 17452 + components: + - type: Transform + pos: 21.5,4.5 + parent: 2 + - uid: 17453 + components: + - type: Transform + pos: 30.5,-3.5 + parent: 2 + - uid: 17454 + components: + - type: Transform + pos: 28.5,-3.5 + parent: 2 + - uid: 17455 + components: + - type: Transform + pos: 33.5,1.5 + parent: 2 + - uid: 17456 + components: + - type: Transform + pos: 33.5,2.5 + parent: 2 + - uid: 17457 + components: + - type: Transform + pos: 34.5,2.5 + parent: 2 + - uid: 17458 + components: + - type: Transform + pos: 34.5,21.5 + parent: 2 + - uid: 17459 + components: + - type: Transform + pos: 58.5,27.5 + parent: 2 + - uid: 17460 + components: + - type: Transform + pos: 57.5,28.5 + parent: 2 + - uid: 17461 + components: + - type: Transform + pos: 57.5,31.5 + parent: 2 + - uid: 17462 + components: + - type: Transform + pos: 57.5,32.5 + parent: 2 + - uid: 17463 + components: + - type: Transform + pos: 58.5,32.5 + parent: 2 + - uid: 17464 + components: + - type: Transform + pos: 62.5,32.5 + parent: 2 + - uid: 17465 + components: + - type: Transform + pos: 63.5,32.5 + parent: 2 + - uid: 17466 + components: + - type: Transform + pos: 63.5,31.5 + parent: 2 + - uid: 17467 + components: + - type: Transform + pos: 59.5,27.5 + parent: 2 + - uid: 17468 + components: + - type: Transform + pos: 60.5,27.5 + parent: 2 + - uid: 17469 + components: + - type: Transform + pos: 63.5,28.5 + parent: 2 + - uid: 17470 + components: + - type: Transform + pos: 61.5,27.5 + parent: 2 + - uid: 17471 + components: + - type: Transform + pos: 63.5,27.5 + parent: 2 + - uid: 17472 + components: + - type: Transform + pos: 61.5,24.5 + parent: 2 + - uid: 17473 + components: + - type: Transform + pos: 61.5,26.5 + parent: 2 + - uid: 17474 + components: + - type: Transform + pos: 61.5,-3.5 + parent: 2 + - uid: 17475 + components: + - type: Transform + pos: 63.5,-3.5 + parent: 2 + - uid: 17476 + components: + - type: Transform + pos: 65.5,-3.5 + parent: 2 + - uid: 17477 + components: + - type: Transform + pos: 68.5,-3.5 + parent: 2 + - uid: 17478 + components: + - type: Transform + pos: 69.5,-3.5 + parent: 2 + - uid: 17481 + components: + - type: Transform + pos: 42.5,-6.5 + parent: 2 + - uid: 17482 + components: + - type: Transform + pos: 43.5,-6.5 + parent: 2 + - uid: 17483 + components: + - type: Transform + pos: 43.5,-7.5 + parent: 2 + - uid: 17484 + components: + - type: Transform + pos: 43.5,-9.5 + parent: 2 + - uid: 17485 + components: + - type: Transform + pos: 46.5,-9.5 + parent: 2 + - uid: 17486 + components: + - type: Transform + pos: 46.5,-10.5 + parent: 2 + - uid: 17487 + components: + - type: Transform + pos: 56.5,-10.5 + parent: 2 + - uid: 17488 + components: + - type: Transform + pos: 56.5,-9.5 + parent: 2 + - uid: 17489 + components: + - type: Transform + pos: 56.5,-8.5 + parent: 2 + - uid: 17490 + components: + - type: Transform + pos: 60.5,-5.5 + parent: 2 + - uid: 17491 + components: + - type: Transform + pos: 60.5,-7.5 + parent: 2 + - uid: 17492 + components: + - type: Transform + pos: 11.5,50.5 + parent: 2 + - uid: 17493 + components: + - type: Transform + pos: 14.5,50.5 + parent: 2 + - uid: 17494 + components: + - type: Transform + pos: 15.5,50.5 + parent: 2 + - uid: 17495 + components: + - type: Transform + pos: 15.5,51.5 + parent: 2 + - uid: 17496 + components: + - type: Transform + pos: 16.5,50.5 + parent: 2 + - uid: 17497 + components: + - type: Transform + pos: 15.5,54.5 + parent: 2 + - uid: 17498 + components: + - type: Transform + pos: 14.5,54.5 + parent: 2 + - uid: 17499 + components: + - type: Transform + pos: 13.5,54.5 + parent: 2 + - uid: 17500 + components: + - type: Transform + pos: 15.5,55.5 + parent: 2 + - uid: 17501 + components: + - type: Transform + pos: 15.5,56.5 + parent: 2 + - uid: 17502 + components: + - type: Transform + pos: 13.5,56.5 + parent: 2 + - uid: 17503 + components: + - type: Transform + pos: 15.5,57.5 + parent: 2 + - uid: 17504 + components: + - type: Transform + pos: 15.5,58.5 + parent: 2 + - uid: 17505 + components: + - type: Transform + pos: 14.5,58.5 + parent: 2 + - uid: 17506 + components: + - type: Transform + pos: 13.5,58.5 + parent: 2 + - uid: 17507 + components: + - type: Transform + pos: 12.5,58.5 + parent: 2 + - uid: 17508 + components: + - type: Transform + pos: 11.5,58.5 + parent: 2 + - uid: 17509 + components: + - type: Transform + pos: 9.5,58.5 + parent: 2 + - uid: 17510 + components: + - type: Transform + pos: 8.5,58.5 + parent: 2 + - uid: 17511 + components: + - type: Transform + pos: 15.5,59.5 + parent: 2 + - uid: 17512 + components: + - type: Transform + pos: 15.5,60.5 + parent: 2 + - uid: 17513 + components: + - type: Transform + pos: 14.5,60.5 + parent: 2 + - uid: 17514 + components: + - type: Transform + pos: 14.5,62.5 + parent: 2 + - uid: 17515 + components: + - type: Transform + pos: 14.5,63.5 + parent: 2 + - uid: 17516 + components: + - type: Transform + pos: 13.5,63.5 + parent: 2 + - uid: 17517 + components: + - type: Transform + pos: 12.5,63.5 + parent: 2 + - uid: 17518 + components: + - type: Transform + pos: 12.5,62.5 + parent: 2 + - uid: 17519 + components: + - type: Transform + pos: 11.5,62.5 + parent: 2 + - uid: 17520 + components: + - type: Transform + pos: 10.5,62.5 + parent: 2 + - uid: 17521 + components: + - type: Transform + pos: 9.5,62.5 + parent: 2 + - uid: 17522 + components: + - type: Transform + pos: 8.5,62.5 + parent: 2 + - uid: 17523 + components: + - type: Transform + pos: 14.5,64.5 + parent: 2 + - uid: 17524 + components: + - type: Transform + pos: 15.5,64.5 + parent: 2 + - uid: 17525 + components: + - type: Transform + pos: 17.5,64.5 + parent: 2 + - uid: 17526 + components: + - type: Transform + pos: 18.5,64.5 + parent: 2 + - uid: 17527 + components: + - type: Transform + pos: 19.5,64.5 + parent: 2 + - uid: 17528 + components: + - type: Transform + pos: 16.5,60.5 + parent: 2 + - uid: 17529 + components: + - type: Transform + pos: 17.5,60.5 + parent: 2 + - uid: 17530 + components: + - type: Transform + pos: 18.5,60.5 + parent: 2 + - uid: 17531 + components: + - type: Transform + pos: 19.5,60.5 + parent: 2 + - uid: 17532 + components: + - type: Transform + pos: 19.5,61.5 + parent: 2 + - uid: 17533 + components: + - type: Transform + pos: 19.5,62.5 + parent: 2 + - uid: 17534 + components: + - type: Transform + pos: 21.5,61.5 + parent: 2 + - uid: 17535 + components: + - type: Transform + pos: 22.5,61.5 + parent: 2 + - uid: 17536 + components: + - type: Transform + pos: 22.5,62.5 + parent: 2 + - uid: 17537 + components: + - type: Transform + pos: 22.5,63.5 + parent: 2 + - uid: 17538 + components: + - type: Transform + pos: 22.5,64.5 + parent: 2 + - uid: 17539 + components: + - type: Transform + pos: 23.5,64.5 + parent: 2 + - uid: 17540 + components: + - type: Transform + pos: 19.5,66.5 + parent: 2 + - uid: 17541 + components: + - type: Transform + pos: 15.5,72.5 + parent: 2 + - uid: 17542 + components: + - type: Transform + pos: 15.5,71.5 + parent: 2 + - uid: 17543 + components: + - type: Transform + pos: 15.5,70.5 + parent: 2 + - uid: 17544 + components: + - type: Transform + pos: 15.5,67.5 + parent: 2 + - uid: 17545 + components: + - type: Transform + pos: 15.5,68.5 + parent: 2 + - uid: 17546 + components: + - type: Transform + pos: 16.5,68.5 + parent: 2 + - uid: 17547 + components: + - type: Transform + pos: 16.5,57.5 + parent: 2 + - uid: 17548 + components: + - type: Transform + pos: 18.5,57.5 + parent: 2 + - uid: 17549 + components: + - type: Transform + pos: 19.5,57.5 + parent: 2 + - uid: 17550 + components: + - type: Transform + pos: 19.5,58.5 + parent: 2 + - uid: 17551 + components: + - type: Transform + pos: 19.5,59.5 + parent: 2 + - uid: 17552 + components: + - type: Transform + pos: 20.5,59.5 + parent: 2 + - uid: 17553 + components: + - type: Transform + pos: 21.5,59.5 + parent: 2 + - uid: 17554 + components: + - type: Transform + pos: 22.5,59.5 + parent: 2 + - uid: 17555 + components: + - type: Transform + pos: 23.5,59.5 + parent: 2 + - uid: 17556 + components: + - type: Transform + pos: 23.5,58.5 + parent: 2 + - uid: 17557 + components: + - type: Transform + pos: 25.5,58.5 + parent: 2 + - uid: 17558 + components: + - type: Transform + pos: 18.5,50.5 + parent: 2 + - uid: 17559 + components: + - type: Transform + pos: 20.5,50.5 + parent: 2 + - uid: 17560 + components: + - type: Transform + pos: 22.5,50.5 + parent: 2 + - uid: 17561 + components: + - type: Transform + pos: 25.5,50.5 + parent: 2 + - uid: 17562 + components: + - type: Transform + pos: 25.5,65.5 + parent: 2 + - uid: 17563 + components: + - type: Transform + pos: 25.5,64.5 + parent: 2 + - uid: 17564 + components: + - type: Transform + pos: 25.5,61.5 + parent: 2 + - uid: 17565 + components: + - type: Transform + pos: 25.5,62.5 + parent: 2 + - uid: 17566 + components: + - type: Transform + pos: 25.5,63.5 + parent: 2 + - uid: 17567 + components: + - type: Transform + pos: 26.5,61.5 + parent: 2 + - uid: 17568 + components: + - type: Transform + pos: 29.5,61.5 + parent: 2 + - uid: 17569 + components: + - type: Transform + pos: 30.5,61.5 + parent: 2 + - uid: 17570 + components: + - type: Transform + pos: 35.5,36.5 + parent: 2 + - uid: 17571 + components: + - type: Transform + pos: 34.5,36.5 + parent: 2 + - uid: 17572 + components: + - type: Transform + pos: 34.5,37.5 + parent: 2 + - uid: 17573 + components: + - type: Transform + pos: 34.5,40.5 + parent: 2 + - uid: 17574 + components: + - type: Transform + pos: 34.5,41.5 + parent: 2 + - uid: 17575 + components: + - type: Transform + pos: 34.5,42.5 + parent: 2 + - uid: 17576 + components: + - type: Transform + pos: 34.5,46.5 + parent: 2 + - uid: 17577 + components: + - type: Transform + pos: 35.5,46.5 + parent: 2 + - uid: 17578 + components: + - type: Transform + pos: 38.5,46.5 + parent: 2 + - uid: 17579 + components: + - type: Transform + pos: 39.5,46.5 + parent: 2 + - uid: 17580 + components: + - type: Transform + pos: 40.5,46.5 + parent: 2 + - uid: 17581 + components: + - type: Transform + pos: 39.5,45.5 + parent: 2 + - uid: 17582 + components: + - type: Transform + pos: 39.5,50.5 + parent: 2 + - uid: 17583 + components: + - type: Transform + pos: 41.5,50.5 + parent: 2 + - uid: 17584 + components: + - type: Transform + pos: 42.5,50.5 + parent: 2 + - uid: 17585 + components: + - type: Transform + pos: 43.5,50.5 + parent: 2 + - uid: 17586 + components: + - type: Transform + pos: 43.5,51.5 + parent: 2 + - uid: 17587 + components: + - type: Transform + pos: 43.5,52.5 + parent: 2 + - uid: 17588 + components: + - type: Transform + pos: 44.5,52.5 + parent: 2 + - uid: 17589 + components: + - type: Transform + pos: 45.5,52.5 + parent: 2 + - uid: 17590 + components: + - type: Transform + pos: 45.5,53.5 + parent: 2 + - uid: 17591 + components: + - type: Transform + pos: 45.5,54.5 + parent: 2 + - uid: 17592 + components: + - type: Transform + pos: 45.5,55.5 + parent: 2 + - uid: 17593 + components: + - type: Transform + pos: 43.5,55.5 + parent: 2 + - uid: 17594 + components: + - type: Transform + pos: 44.5,55.5 + parent: 2 + - uid: 17595 + components: + - type: Transform + pos: 41.5,55.5 + parent: 2 + - uid: 17596 + components: + - type: Transform + pos: 40.5,55.5 + parent: 2 + - uid: 17597 + components: + - type: Transform + pos: 39.5,55.5 + parent: 2 + - uid: 17598 + components: + - type: Transform + pos: 43.5,49.5 + parent: 2 + - uid: 17599 + components: + - type: Transform + pos: 43.5,47.5 + parent: 2 + - uid: 17600 + components: + - type: Transform + pos: 43.5,46.5 + parent: 2 + - uid: 17601 + components: + - type: Transform + pos: 42.5,46.5 + parent: 2 + - uid: 17602 + components: + - type: Transform + pos: 43.5,45.5 + parent: 2 + - uid: 17603 + components: + - type: Transform + pos: 44.5,46.5 + parent: 2 + - uid: 17604 + components: + - type: Transform + pos: 45.5,46.5 + parent: 2 + - uid: 17605 + components: + - type: Transform + pos: 45.5,47.5 + parent: 2 + - uid: 17606 + components: + - type: Transform + pos: 45.5,48.5 + parent: 2 + - uid: 17607 + components: + - type: Transform + pos: 45.5,49.5 + parent: 2 + - uid: 17608 + components: + - type: Transform + pos: 48.5,50.5 + parent: 2 + - uid: 17609 + components: + - type: Transform + pos: 46.5,49.5 + parent: 2 + - uid: 17610 + components: + - type: Transform + pos: 48.5,49.5 + parent: 2 + - uid: 17611 + components: + - type: Transform + pos: 48.5,51.5 + parent: 2 + - uid: 17612 + components: + - type: Transform + pos: 48.5,53.5 + parent: 2 + - uid: 17613 + components: + - type: Transform + pos: 48.5,54.5 + parent: 2 + - uid: 17614 + components: + - type: Transform + pos: 48.5,55.5 + parent: 2 + - uid: 17615 + components: + - type: Transform + pos: 49.5,55.5 + parent: 2 + - uid: 17616 + components: + - type: Transform + pos: 50.5,55.5 + parent: 2 + - uid: 17617 + components: + - type: Transform + pos: 52.5,55.5 + parent: 2 + - uid: 17618 + components: + - type: Transform + pos: 51.5,55.5 + parent: 2 + - uid: 17619 + components: + - type: Transform + pos: 52.5,54.5 + parent: 2 + - uid: 17620 + components: + - type: Transform + pos: 52.5,52.5 + parent: 2 + - uid: 17621 + components: + - type: Transform + pos: 52.5,51.5 + parent: 2 + - uid: 17622 + components: + - type: Transform + pos: 51.5,51.5 + parent: 2 + - uid: 17623 + components: + - type: Transform + pos: 51.5,50.5 + parent: 2 + - uid: 17624 + components: + - type: Transform + pos: 51.5,49.5 + parent: 2 + - uid: 17625 + components: + - type: Transform + pos: 50.5,49.5 + parent: 2 + - uid: 17626 + components: + - type: Transform + pos: 49.5,49.5 + parent: 2 + - uid: 17627 + components: + - type: Transform + pos: 36.5,61.5 + parent: 2 + - uid: 17628 + components: + - type: Transform + pos: 37.5,61.5 + parent: 2 + - uid: 17629 + components: + - type: Transform + pos: 40.5,61.5 + parent: 2 + - uid: 17630 + components: + - type: Transform + pos: 40.5,60.5 + parent: 2 + - uid: 17631 + components: + - type: Transform + pos: 40.5,59.5 + parent: 2 + - uid: 17632 + components: + - type: Transform + pos: 42.5,61.5 + parent: 2 + - uid: 17633 + components: + - type: Transform + pos: 43.5,61.5 + parent: 2 + - uid: 17634 + components: + - type: Transform + pos: 44.5,61.5 + parent: 2 + - uid: 17635 + components: + - type: Transform + pos: 45.5,61.5 + parent: 2 + - uid: 17636 + components: + - type: Transform + pos: 46.5,61.5 + parent: 2 + - uid: 17637 + components: + - type: Transform + pos: 46.5,60.5 + parent: 2 + - uid: 17638 + components: + - type: Transform + pos: 46.5,59.5 + parent: 2 + - uid: 17639 + components: + - type: Transform + pos: 46.5,58.5 + parent: 2 + - uid: 17640 + components: + - type: Transform + pos: 47.5,58.5 + parent: 2 + - uid: 17641 + components: + - type: Transform + pos: 49.5,58.5 + parent: 2 + - uid: 17642 + components: + - type: Transform + pos: 42.5,57.5 + parent: 2 + - uid: 17643 + components: + - type: Transform + pos: 43.5,57.5 + parent: 2 + - uid: 17644 + components: + - type: Transform + pos: 44.5,57.5 + parent: 2 + - uid: 17645 + components: + - type: Transform + pos: 45.5,57.5 + parent: 2 + - uid: 17646 + components: + - type: Transform + pos: 46.5,57.5 + parent: 2 + - uid: 17647 + components: + - type: Transform + pos: 58.5,51.5 + parent: 2 + - uid: 17648 + components: + - type: Transform + pos: 57.5,55.5 + parent: 2 + - uid: 17649 + components: + - type: Transform + pos: 55.5,55.5 + parent: 2 + - uid: 17650 + components: + - type: Transform + pos: 54.5,56.5 + parent: 2 + - uid: 17651 + components: + - type: Transform + pos: 54.5,55.5 + parent: 2 + - uid: 17652 + components: + - type: Transform + pos: 46.5,46.5 + parent: 2 + - uid: 17653 + components: + - type: Transform + pos: 47.5,46.5 + parent: 2 + - uid: 17654 + components: + - type: Transform + pos: 49.5,46.5 + parent: 2 + - uid: 17655 + components: + - type: Transform + pos: 50.5,46.5 + parent: 2 + - uid: 17656 + components: + - type: Transform + pos: 51.5,46.5 + parent: 2 + - uid: 17657 + components: + - type: Transform + pos: 51.5,47.5 + parent: 2 + - uid: 17658 + components: + - type: Transform + pos: 51.5,48.5 + parent: 2 + - uid: 17659 + components: + - type: Transform + pos: 52.5,47.5 + parent: 2 + - uid: 17660 + components: + - type: Transform + pos: 53.5,47.5 + parent: 2 + - uid: 17661 + components: + - type: Transform + pos: 56.5,47.5 + parent: 2 + - uid: 17662 + components: + - type: Transform + pos: 56.5,48.5 + parent: 2 + - uid: 17663 + components: + - type: Transform + pos: 56.5,50.5 + parent: 2 + - uid: 17664 + components: + - type: Transform + pos: 56.5,51.5 + parent: 2 + - uid: 17665 + components: + - type: Transform + pos: 56.5,52.5 + parent: 2 + - uid: 17666 + components: + - type: Transform + pos: 55.5,52.5 + parent: 2 + - uid: 17667 + components: + - type: Transform + pos: 54.5,52.5 + parent: 2 + - uid: 17668 + components: + - type: Transform + pos: 53.5,52.5 + parent: 2 + - uid: 17669 + components: + - type: Transform + pos: 59.5,51.5 + parent: 2 + - uid: 17670 + components: + - type: Transform + pos: 59.5,50.5 + parent: 2 + - uid: 17671 + components: + - type: Transform + pos: 59.5,53.5 + parent: 2 + - uid: 17672 + components: + - type: Transform + pos: 59.5,54.5 + parent: 2 + - uid: 17673 + components: + - type: Transform + pos: 63.5,54.5 + parent: 2 + - uid: 17674 + components: + - type: Transform + pos: 63.5,53.5 + parent: 2 + - uid: 17675 + components: + - type: Transform + pos: 63.5,51.5 + parent: 2 + - uid: 17676 + components: + - type: Transform + pos: 63.5,52.5 + parent: 2 + - uid: 17677 + components: + - type: Transform + pos: 63.5,50.5 + parent: 2 + - uid: 17678 + components: + - type: Transform + pos: 60.5,49.5 + parent: 2 + - uid: 17679 + components: + - type: Transform + pos: 61.5,49.5 + parent: 2 + - uid: 17680 + components: + - type: Transform + pos: 62.5,49.5 + parent: 2 + - uid: 17681 + components: + - type: Transform + pos: 59.5,49.5 + parent: 2 + - uid: 17682 + components: + - type: Transform + pos: 63.5,49.5 + parent: 2 + - uid: 17683 + components: + - type: Transform + pos: 63.5,48.5 + parent: 2 + - uid: 17684 + components: + - type: Transform + pos: 63.5,46.5 + parent: 2 + - uid: 17685 + components: + - type: Transform + pos: 63.5,45.5 + parent: 2 + - uid: 17686 + components: + - type: Transform + pos: 61.5,45.5 + parent: 2 + - uid: 17687 + components: + - type: Transform + pos: 62.5,45.5 + parent: 2 + - uid: 17688 + components: + - type: Transform + pos: 59.5,45.5 + parent: 2 + - uid: 17689 + components: + - type: Transform + pos: 58.5,45.5 + parent: 2 + - uid: 17690 + components: + - type: Transform + pos: 58.5,46.5 + parent: 2 + - uid: 17691 + components: + - type: Transform + pos: 57.5,47.5 + parent: 2 + - uid: 17692 + components: + - type: Transform + pos: 58.5,47.5 + parent: 2 + - uid: 17693 + components: + - type: Transform + pos: 51.5,42.5 + parent: 2 + - uid: 17694 + components: + - type: Transform + pos: 51.5,41.5 + parent: 2 + - uid: 17695 + components: + - type: Transform + pos: 52.5,41.5 + parent: 2 + - uid: 17696 + components: + - type: Transform + pos: 54.5,41.5 + parent: 2 + - uid: 17697 + components: + - type: Transform + pos: 58.5,44.5 + parent: 2 + - uid: 17698 + components: + - type: Transform + pos: 58.5,43.5 + parent: 2 + - uid: 17699 + components: + - type: Transform + pos: 58.5,42.5 + parent: 2 + - uid: 17700 + components: + - type: Transform + pos: 58.5,41.5 + parent: 2 + - uid: 17701 + components: + - type: Transform + pos: 59.5,41.5 + parent: 2 + - uid: 17702 + components: + - type: Transform + pos: 60.5,41.5 + parent: 2 + - uid: 17703 + components: + - type: Transform + pos: 63.5,41.5 + parent: 2 + - uid: 17704 + components: + - type: Transform + pos: 63.5,42.5 + parent: 2 + - uid: 17705 + components: + - type: Transform + pos: 63.5,44.5 + parent: 2 + - uid: 17706 + components: + - type: Transform + pos: 63.5,43.5 + parent: 2 + - uid: 17707 + components: + - type: Transform + pos: 59.5,40.5 + parent: 2 + - uid: 17708 + components: + - type: Transform + pos: 58.5,36.5 + parent: 2 + - uid: 17709 + components: + - type: Transform + pos: 59.5,36.5 + parent: 2 + - uid: 17710 + components: + - type: Transform + pos: 60.5,36.5 + parent: 2 + - uid: 17711 + components: + - type: Transform + pos: 63.5,36.5 + parent: 2 + - uid: 17712 + components: + - type: Transform + pos: 62.5,36.5 + parent: 2 + - uid: 17713 + components: + - type: Transform + pos: 63.5,37.5 + parent: 2 + - uid: 17714 + components: + - type: Transform + pos: 63.5,38.5 + parent: 2 + - uid: 17715 + components: + - type: Transform + pos: 63.5,40.5 + parent: 2 + - uid: 17716 + components: + - type: Transform + pos: 63.5,39.5 + parent: 2 + - uid: 17717 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 49.5,36.5 + parent: 2 + - uid: 17718 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 49.5,41.5 + parent: 2 + - uid: 17719 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 46.5,36.5 + parent: 2 + - uid: 17720 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 44.5,36.5 + parent: 2 + - uid: 17721 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,36.5 + parent: 2 + - uid: 17722 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,37.5 + parent: 2 + - uid: 17723 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,36.5 + parent: 2 + - uid: 17724 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,38.5 + parent: 2 + - uid: 17725 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,39.5 + parent: 2 + - uid: 17726 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,40.5 + parent: 2 + - uid: 17727 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,41.5 + parent: 2 + - uid: 17728 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,41.5 + parent: 2 + - uid: 17729 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,42.5 + parent: 2 + - uid: 17730 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,43.5 + parent: 2 + - uid: 17731 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,44.5 + parent: 2 + - uid: 17732 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,36.5 + parent: 2 + - uid: 17733 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,36.5 + parent: 2 + - uid: 17734 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,42.5 + parent: 2 + - uid: 17735 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,42.5 + parent: 2 + - uid: 17736 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,42.5 + parent: 2 + - uid: 17737 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,42.5 + parent: 2 + - uid: 17738 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,41.5 + parent: 2 + - uid: 17739 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,42.5 + parent: 2 + - uid: 17740 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,41.5 + parent: 2 + - uid: 17741 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,43.5 + parent: 2 + - uid: 17742 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,44.5 + parent: 2 + - uid: 17743 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 40.5,41.5 + parent: 2 + - uid: 17744 + components: + - type: Transform + pos: 79.5,54.5 + parent: 2 + - uid: 17745 + components: + - type: Transform + pos: 77.5,54.5 + parent: 2 + - uid: 17746 + components: + - type: Transform + pos: 76.5,54.5 + parent: 2 + - uid: 17747 + components: + - type: Transform + pos: 76.5,55.5 + parent: 2 + - uid: 17748 + components: + - type: Transform + pos: 76.5,57.5 + parent: 2 + - uid: 17749 + components: + - type: Transform + pos: 74.5,55.5 + parent: 2 + - uid: 17750 + components: + - type: Transform + pos: 73.5,55.5 + parent: 2 + - uid: 17751 + components: + - type: Transform + pos: 72.5,55.5 + parent: 2 + - uid: 17752 + components: + - type: Transform + pos: 72.5,56.5 + parent: 2 + - uid: 17753 + components: + - type: Transform + pos: 72.5,57.5 + parent: 2 + - uid: 17754 + components: + - type: Transform + pos: 80.5,52.5 + parent: 2 + - uid: 17755 + components: + - type: Transform + pos: 80.5,48.5 + parent: 2 + - uid: 17756 + components: + - type: Transform + pos: 78.5,52.5 + parent: 2 + - uid: 17757 + components: + - type: Transform + pos: 77.5,52.5 + parent: 2 + - uid: 17758 + components: + - type: Transform + pos: 77.5,51.5 + parent: 2 + - uid: 17759 + components: + - type: Transform + pos: 76.5,51.5 + parent: 2 + - uid: 17760 + components: + - type: Transform + pos: 77.5,50.5 + parent: 2 + - uid: 17761 + components: + - type: Transform + pos: 77.5,49.5 + parent: 2 + - uid: 17762 + components: + - type: Transform + pos: 77.5,48.5 + parent: 2 + - uid: 17763 + components: + - type: Transform + pos: 76.5,48.5 + parent: 2 + - uid: 17764 + components: + - type: Transform + pos: 78.5,48.5 + parent: 2 + - uid: 17765 + components: + - type: Transform + pos: 68.5,47.5 + parent: 2 + - uid: 17766 + components: + - type: Transform + pos: 67.5,47.5 + parent: 2 + - uid: 17767 + components: + - type: Transform + pos: 67.5,48.5 + parent: 2 + - uid: 17768 + components: + - type: Transform + pos: 67.5,49.5 + parent: 2 + - uid: 17769 + components: + - type: Transform + pos: 67.5,50.5 + parent: 2 + - uid: 17770 + components: + - type: Transform + pos: 67.5,51.5 + parent: 2 + - uid: 17771 + components: + - type: Transform + pos: 67.5,52.5 + parent: 2 + - uid: 17772 + components: + - type: Transform + pos: 67.5,53.5 + parent: 2 + - uid: 17773 + components: + - type: Transform + pos: 67.5,54.5 + parent: 2 + - uid: 17774 + components: + - type: Transform + pos: 68.5,53.5 + parent: 2 + - uid: 17775 + components: + - type: Transform + pos: 69.5,53.5 + parent: 2 + - uid: 17776 + components: + - type: Transform + pos: 70.5,53.5 + parent: 2 + - uid: 17777 + components: + - type: Transform + pos: 71.5,48.5 + parent: 2 + - uid: 17778 + components: + - type: Transform + pos: 71.5,49.5 + parent: 2 + - uid: 17779 + components: + - type: Transform + pos: 71.5,51.5 + parent: 2 + - uid: 17780 + components: + - type: Transform + pos: 71.5,52.5 + parent: 2 + - uid: 17781 + components: + - type: Transform + pos: 71.5,53.5 + parent: 2 + - uid: 17782 + components: + - type: Transform + pos: 72.5,53.5 + parent: 2 + - uid: 17783 + components: + - type: Transform + pos: 74.5,51.5 + parent: 2 + - uid: 17784 + components: + - type: Transform + pos: 73.5,51.5 + parent: 2 + - uid: 17785 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 71.5,36.5 + parent: 2 + - uid: 17786 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 72.5,36.5 + parent: 2 + - uid: 17787 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 61.5,12.5 + parent: 2 + - uid: 17788 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 62.5,12.5 + parent: 2 + - uid: 17789 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 63.5,12.5 + parent: 2 + - uid: 17790 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 62.5,13.5 + parent: 2 + - uid: 17791 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 62.5,14.5 + parent: 2 + - uid: 17792 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 62.5,15.5 + parent: 2 + - uid: 17793 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 62.5,16.5 + parent: 2 + - uid: 17794 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 62.5,17.5 + parent: 2 + - uid: 17795 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 63.5,17.5 + parent: 2 + - uid: 17796 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 63.5,19.5 + parent: 2 + - uid: 17797 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 63.5,26.5 + parent: 2 + - uid: 17798 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 63.5,25.5 + parent: 2 + - uid: 17799 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 63.5,24.5 + parent: 2 + - uid: 17800 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 63.5,23.5 + parent: 2 + - uid: 17801 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 63.5,22.5 + parent: 2 + - uid: 17802 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 63.5,21.5 + parent: 2 + - uid: 17803 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 63.5,20.5 + parent: 2 + - uid: 17804 + components: + - type: Transform + pos: 67.5,12.5 + parent: 2 + - uid: 17805 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 73.5,17.5 + parent: 2 + - uid: 17806 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 73.5,19.5 + parent: 2 + - uid: 17807 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 73.5,20.5 + parent: 2 + - uid: 17808 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 73.5,21.5 + parent: 2 + - uid: 17809 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 67.5,57.5 + parent: 2 + - uid: 17810 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 67.5,59.5 + parent: 2 + - uid: 17811 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,13.5 + parent: 2 + - uid: 17812 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,14.5 + parent: 2 + - uid: 17813 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 61.5,-4.5 + parent: 2 + - uid: 17814 + components: + - type: Transform + pos: 19.5,10.5 + parent: 2 + - uid: 17815 + components: + - type: Transform + pos: 19.5,9.5 + parent: 2 + - uid: 17816 + components: + - type: Transform + pos: 19.5,8.5 + parent: 2 + - uid: 17817 + components: + - type: Transform + pos: 19.5,7.5 + parent: 2 + - uid: 17818 + components: + - type: Transform + pos: 17.5,5.5 + parent: 2 + - uid: 17819 + components: + - type: Transform + pos: 36.5,46.5 + parent: 2 + - uid: 17822 + components: + - type: Transform + pos: 86.5,41.5 + parent: 2 + - uid: 17824 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,81.5 + parent: 2 + - uid: 17826 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,81.5 + parent: 2 + - uid: 17827 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,82.5 + parent: 2 + - uid: 17828 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,82.5 + parent: 2 + - uid: 17829 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 52.5,64.5 + parent: 2 + - uid: 17830 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,82.5 + parent: 2 + - uid: 17831 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 12.5,81.5 + parent: 2 + - uid: 17832 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 29.5,64.5 + parent: 2 + - uid: 17835 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 51.5,64.5 + parent: 2 + - uid: 17836 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 47.5,69.5 + parent: 2 + - uid: 17837 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 48.5,69.5 + parent: 2 + - uid: 17838 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 48.5,68.5 + parent: 2 + - uid: 17839 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 74.5,65.5 + parent: 2 + - uid: 17840 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 76.5,65.5 + parent: 2 + - uid: 17841 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 78.5,65.5 + parent: 2 + - uid: 17842 + components: + - type: Transform + pos: 88.5,41.5 + parent: 2 + - uid: 17843 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -40.5,32.5 + parent: 2 + - uid: 17844 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -40.5,34.5 + parent: 2 + - uid: 17845 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -41.5,36.5 + parent: 2 + - uid: 17846 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -42.5,38.5 + parent: 2 + - uid: 17855 + components: + - type: Transform + pos: 89.5,40.5 + parent: 2 + - uid: 17856 + components: + - type: Transform + pos: 90.5,39.5 + parent: 2 + - uid: 17857 + components: + - type: Transform + pos: 88.5,27.5 + parent: 2 + - uid: 17858 + components: + - type: Transform + pos: 89.5,28.5 + parent: 2 + - uid: 17859 + components: + - type: Transform + pos: 90.5,29.5 + parent: 2 + - uid: 17860 + components: + - type: Transform + pos: 86.5,27.5 + parent: 2 + - uid: 17861 + components: + - type: Transform + pos: 86.5,46.5 + parent: 2 + - uid: 17862 + components: + - type: Transform + pos: 86.5,21.5 + parent: 2 + - uid: 17863 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,76.5 + parent: 2 + - uid: 17864 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,79.5 + parent: 2 + - uid: 17865 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,80.5 + parent: 2 + - uid: 17866 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,81.5 + parent: 2 + - uid: 17867 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,81.5 + parent: 2 + - uid: 17868 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -16.5,81.5 + parent: 2 + - uid: 17869 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,80.5 + parent: 2 + - uid: 17892 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 26.5,-3.5 + parent: 2 + - uid: 17893 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,-3.5 + parent: 2 + - uid: 17894 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,-3.5 + parent: 2 + - uid: 17907 + components: + - type: Transform + pos: 87.5,-5.5 + parent: 2 + - uid: 17908 + components: + - type: Transform + pos: 87.5,-4.5 + parent: 2 + - uid: 17909 + components: + - type: Transform + pos: 87.5,-3.5 + parent: 2 + - uid: 17910 + components: + - type: Transform + pos: 87.5,2.5 + parent: 2 + - uid: 17911 + components: + - type: Transform + pos: 87.5,-0.5 + parent: 2 + - uid: 17912 + components: + - type: Transform + pos: 87.5,4.5 + parent: 2 + - uid: 17913 + components: + - type: Transform + pos: 87.5,8.5 + parent: 2 + - uid: 17914 + components: + - type: Transform + pos: 87.5,13.5 + parent: 2 + - uid: 17917 + components: + - type: Transform + pos: 85.5,-8.5 + parent: 2 + - uid: 17918 + components: + - type: Transform + pos: 86.5,-8.5 + parent: 2 + - uid: 17936 + components: + - type: Transform + pos: 80.5,-8.5 + parent: 2 + - uid: 17937 + components: + - type: Transform + pos: 78.5,-8.5 + parent: 2 + - uid: 17939 + components: + - type: Transform + pos: 77.5,-8.5 + parent: 2 + - uid: 17944 + components: + - type: Transform + pos: 82.5,-8.5 + parent: 2 + - uid: 17979 + components: + - type: Transform + pos: 85.5,14.5 + parent: 2 + - uid: 17981 + components: + - type: Transform + pos: 87.5,11.5 + parent: 2 + - uid: 17987 + components: + - type: Transform + pos: 81.5,-8.5 + parent: 2 + - uid: 17988 + components: + - type: Transform + pos: 87.5,12.5 + parent: 2 + - uid: 17989 + components: + - type: Transform + pos: 84.5,-8.5 + parent: 2 + - uid: 17990 + components: + - type: Transform + pos: 87.5,3.5 + parent: 2 + - uid: 17991 + components: + - type: Transform + pos: 84.5,14.5 + parent: 2 + - uid: 17995 + components: + - type: Transform + pos: 87.5,-1.5 + parent: 2 + - uid: 17997 + components: + - type: Transform + pos: 87.5,7.5 + parent: 2 + - uid: 17998 + components: + - type: Transform + pos: 86.5,14.5 + parent: 2 + - uid: 18556 + components: + - type: Transform + pos: 91.5,14.5 + parent: 2 + - uid: 18557 + components: + - type: Transform + pos: 91.5,12.5 + parent: 2 + - uid: 18558 + components: + - type: Transform + pos: 90.5,10.5 + parent: 2 + - uid: 18559 + components: + - type: Transform + pos: 90.5,8.5 + parent: 2 + - uid: 18560 + components: + - type: Transform + pos: 89.5,6.5 + parent: 2 + - uid: 18561 + components: + - type: Transform + pos: 89.5,5.5 + parent: 2 + - uid: 18562 + components: + - type: Transform + pos: 89.5,2.5 + parent: 2 + - uid: 18563 + components: + - type: Transform + pos: 89.5,1.5 + parent: 2 + - uid: 18564 + components: + - type: Transform + pos: 90.5,-0.5 + parent: 2 + - uid: 18565 + components: + - type: Transform + pos: 90.5,-2.5 + parent: 2 + - uid: 18566 + components: + - type: Transform + pos: 91.5,-4.5 + parent: 2 + - uid: 18567 + components: + - type: Transform + pos: 91.5,-6.5 + parent: 2 + - uid: 18568 + components: + - type: Transform + pos: 77.5,-10.5 + parent: 2 + - uid: 18569 + components: + - type: Transform + pos: 79.5,-10.5 + parent: 2 + - uid: 18570 + components: + - type: Transform + pos: 81.5,-9.5 + parent: 2 + - uid: 18572 + components: + - type: Transform + pos: 85.5,-10.5 + parent: 2 + - uid: 18573 + components: + - type: Transform + pos: 87.5,-10.5 + parent: 2 + - uid: 18576 + components: + - type: Transform + pos: 89.5,-7.5 + parent: 2 + - uid: 18577 + components: + - type: Transform + pos: 88.5,-8.5 + parent: 2 + - uid: 18629 + components: + - type: Transform + pos: 88.5,17.5 + parent: 2 + - uid: 18630 + components: + - type: Transform + pos: 88.5,15.5 + parent: 2 + - uid: 18631 + components: + - type: Transform + pos: 88.5,21.5 + parent: 2 + - uid: 18632 + components: + - type: Transform + pos: 88.5,19.5 + parent: 2 + - uid: 20415 + components: + - type: Transform + pos: -37.5,42.5 + parent: 2 + - uid: 20416 + components: + - type: Transform + pos: -35.5,42.5 + parent: 2 + - uid: 20417 + components: + - type: Transform + pos: -33.5,42.5 + parent: 2 + - uid: 20418 + components: + - type: Transform + pos: -32.5,42.5 + parent: 2 + - uid: 20419 + components: + - type: Transform + pos: -30.5,42.5 + parent: 2 +- proto: WardrobeBlackFilled + entities: + - uid: 17895 + components: + - type: Transform + pos: 26.5,10.5 + parent: 2 +- proto: WardrobeBlueFilled + entities: + - uid: 17896 + components: + - type: Transform + pos: 26.5,11.5 + parent: 2 +- proto: WardrobeCargoFilled + entities: + - uid: 17897 + components: + - type: Transform + pos: 11.5,10.5 + parent: 2 + - uid: 17898 + components: + - type: Transform + pos: 10.5,10.5 + parent: 2 + - uid: 17899 + components: + - type: Transform + pos: 9.5,10.5 + parent: 2 +- proto: WardrobeGeneticsFilled + entities: + - uid: 17900 + components: + - type: Transform + pos: 29.5,26.5 + parent: 2 +- proto: WardrobePrisonFilled + entities: + - uid: 17901 + components: + - type: Transform + pos: -9.5,51.5 + parent: 2 + - uid: 17902 + components: + - type: Transform + pos: -5.5,51.5 + parent: 2 + - uid: 17903 + components: + - type: Transform + pos: -1.5,51.5 + parent: 2 +- proto: WardrobeVirologyFilled + entities: + - uid: 17904 + components: + - type: Transform + pos: 20.5,11.5 + parent: 2 +- proto: WardrobeWhiteFilled + entities: + - uid: 17905 + components: + - type: Transform + pos: 26.5,12.5 + parent: 2 +- proto: WardrobeYellowFilled + entities: + - uid: 17906 + components: + - type: Transform + pos: 26.5,9.5 + parent: 2 +- proto: WarpPoint + entities: + - uid: 17942 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,16.5 + parent: 2 + - type: WarpPoint + location: QM +- proto: WarpPointBombing + entities: + - uid: 17945 + components: + - type: Transform + pos: 0.5,7.5 + parent: 2 + - type: WarpPoint + location: Cargo Bay + - uid: 17946 + components: + - type: Transform + pos: 1.5,16.5 + parent: 2 + - type: WarpPoint + location: QM office + - uid: 17947 + components: + - type: Transform + pos: 9.5,15.5 + parent: 2 + - type: WarpPoint + location: Logistics + - uid: 17948 + components: + - type: Transform + pos: 12.5,27.5 + parent: 2 + - type: WarpPoint + location: Chem + - uid: 17949 + components: + - type: Transform + pos: 20.5,39.5 + parent: 2 + - type: WarpPoint + location: CMO office + - uid: 17950 + components: + - type: Transform + pos: 27.5,34.5 + parent: 2 + - type: WarpPoint + location: MedBay + - uid: 17951 + components: + - type: Transform + pos: -9.5,34.5 + parent: 2 + - type: WarpPoint + location: Eng lockers + - uid: 17953 + components: + - type: Transform + pos: -29.5,14.5 + parent: 2 + - type: WarpPoint + location: Atmos + - uid: 17954 + components: + - type: Transform + pos: -19.5,28.5 + parent: 2 + - type: WarpPoint + location: SuperMatter + - uid: 17955 + components: + - type: Transform + pos: -21.5,43.5 + parent: 2 + - type: WarpPoint + location: Gravity generator + - uid: 17956 + components: + - type: Transform + pos: -11.5,44.5 + parent: 2 + - type: WarpPoint + location: SMES + - uid: 17957 + components: + - type: Transform + pos: -12.5,56.5 + parent: 2 + - type: WarpPoint + location: Brig + - uid: 17958 + components: + - type: Transform + pos: -4.5,57.5 + parent: 2 + - type: WarpPoint + location: BrigMed + - uid: 17959 + components: + - type: Transform + pos: -16.5,69.5 + parent: 2 + - type: WarpPoint + location: Armory + - uid: 17960 + components: + - type: Transform + pos: -17.5,61.5 + parent: 2 + - type: WarpPoint + location: Warden + - uid: 17961 + components: + - type: Transform + pos: -23.5,67.5 + parent: 2 + - type: WarpPoint + location: Sec lockers + - uid: 17962 + components: + - type: Transform + pos: -30.5,66.5 + parent: 2 + - type: WarpPoint + location: Perma + - uid: 17964 + components: + - type: Transform + pos: 2.5,75.5 + parent: 2 + - type: WarpPoint + location: North Park + - uid: 17965 + components: + - type: Transform + pos: 11.5,54.5 + parent: 2 + - type: WarpPoint + location: Chapel + - uid: 17966 + components: + - type: Transform + pos: 18.5,53.5 + parent: 2 + - type: WarpPoint + location: Library + - uid: 17967 + components: + - type: Transform + pos: 30.5,54.5 + parent: 2 + - type: WarpPoint + location: Vault + - uid: 17968 + components: + - type: Transform + pos: 34.5,53.5 + parent: 2 + - type: WarpPoint + location: GateWay + - uid: 17969 + components: + - type: Transform + pos: 55.5,37.5 + parent: 2 + - type: WarpPoint + location: Cafeteria + - uid: 17970 + components: + - type: Transform + pos: 75.5,43.5 + parent: 2 + - type: WarpPoint + location: EVA + - uid: 17971 + components: + - type: Transform + pos: 85.5,33.5 + parent: 2 + - type: WarpPoint + location: Bridge + - uid: 17972 + components: + - type: Transform + pos: 76.5,30.5 + parent: 2 + - type: WarpPoint + location: Cap office + - uid: 17973 + components: + - type: Transform + pos: 73.5,3.5 + parent: 2 + - type: WarpPoint + location: Arrivals + - uid: 17974 + components: + - type: Transform + pos: 51.5,-2.5 + parent: 2 + - type: WarpPoint + location: Anomaly/Slime Farm + - uid: 17975 + components: + - type: Transform + pos: 52.5,16.5 + parent: 2 + - type: WarpPoint + location: RD office + - uid: 17976 + components: + - type: Transform + pos: 54.5,26.5 + parent: 2 + - type: WarpPoint + location: Epistemics +- proto: WarpPointCryo + entities: + - uid: 17980 + components: + - type: Transform + pos: 10.5,35.5 + parent: 2 +- proto: WaterCooler + entities: + - uid: 8321 + components: + - type: Transform + pos: 70.5,23.5 + parent: 2 + - uid: 17999 + components: + - type: Transform + pos: 30.5,3.5 + parent: 2 + - uid: 18000 + components: + - type: Transform + pos: 45.5,62.5 + parent: 2 +- proto: WaterTankFull + entities: + - uid: 18001 + components: + - type: Transform + pos: 5.5,23.5 + parent: 2 + - uid: 18002 + components: + - type: Transform + pos: 36.5,21.5 + parent: 2 + - uid: 18003 + components: + - type: Transform + pos: -8.5,34.5 + parent: 2 + - uid: 18004 + components: + - type: Transform + pos: -6.5,40.5 + parent: 2 + - uid: 18005 + components: + - type: Transform + pos: 18.5,4.5 + parent: 2 + - uid: 18006 + components: + - type: Transform + pos: 58.5,31.5 + parent: 2 + - uid: 18007 + components: + - type: Transform + pos: 72.5,62.5 + parent: 2 + - uid: 18008 + components: + - type: Transform + pos: 29.5,66.5 + parent: 2 + - uid: 18009 + components: + - type: Transform + pos: 45.5,58.5 + parent: 2 + - uid: 18010 + components: + - type: Transform + pos: 44.5,58.5 + parent: 2 + - uid: 18011 + components: + - type: Transform + pos: 52.5,57.5 + parent: 2 + - uid: 18012 + components: + - type: Transform + pos: 46.5,50.5 + parent: 2 +- proto: WaterTankHighCapacity + entities: + - uid: 18013 + components: + - type: Transform + pos: 48.5,37.5 + parent: 2 + - uid: 18014 + components: + - type: Transform + pos: 47.5,37.5 + parent: 2 + - uid: 18015 + components: + - type: Transform + pos: 39.5,52.5 + parent: 2 + - uid: 18756 + components: + - type: Transform + pos: -24.5,16.5 + parent: 2 +- proto: WaterVaporCanister + entities: + - uid: 18016 + components: + - type: Transform + pos: 35.5,17.5 + parent: 2 + - uid: 18017 + components: + - type: Transform + pos: 36.5,17.5 + parent: 2 +- proto: WeaponCapacitorRecharger + entities: + - uid: 18018 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,27.5 + parent: 2 + - uid: 18020 + components: + - type: Transform + pos: -3.5,15.5 + parent: 2 + - uid: 18021 + components: + - type: Transform + pos: -4.5,29.5 + parent: 2 + - uid: 18022 + components: + - type: Transform + pos: -16.5,60.5 + parent: 2 + - uid: 18023 + components: + - type: Transform + pos: -25.5,61.5 + parent: 2 + - uid: 18024 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 46.5,14.5 + parent: 2 + - uid: 18025 + components: + - type: Transform + pos: 82.5,33.5 + parent: 2 + - uid: 18026 + components: + - type: Transform + pos: 70.5,13.5 + parent: 2 +- proto: WeaponLaserCarbine + entities: + - uid: 18027 + components: + - type: Transform + pos: -19.609697,69.7698 + parent: 2 + - uid: 18028 + components: + - type: Transform + pos: -19.268963,69.644356 + parent: 2 + - uid: 18029 + components: + - type: Transform + pos: -19.645565,69.518906 + parent: 2 + - uid: 18030 + components: + - type: Transform + pos: -19.268963,69.393456 + parent: 2 +- proto: WeaponPistolMk58 + entities: + - uid: 18031 + components: + - type: Transform + pos: -17.601858,68.653786 + parent: 2 + - uid: 18032 + components: + - type: Transform + pos: -17.494259,68.56418 + parent: 2 + - uid: 18033 + components: + - type: Transform + pos: -17.35079,68.42081 + parent: 2 +- proto: WeaponRifleLecter + entities: + - uid: 18034 + components: + - type: Transform + pos: -15.664352,70.734 + parent: 2 + - uid: 18035 + components: + - type: Transform + pos: -15.485018,70.60855 + parent: 2 + - uid: 18036 + components: + - type: Transform + pos: -15.664352,70.411415 + parent: 2 + - uid: 18037 + components: + - type: Transform + pos: -15.405928,70.28039 + parent: 2 +- proto: WeaponSubMachineGunDrozd + entities: + - uid: 18038 + components: + - type: Transform + pos: -14.389482,67.54267 + parent: 2 + - uid: 18039 + components: + - type: Transform + pos: -14.28188,67.363464 + parent: 2 + - uid: 18040 + components: + - type: Transform + pos: -14.5329485,67.76181 + parent: 2 +- proto: WeaponTurretSyndicateBroken + entities: + - uid: 18041 + components: + - type: Transform + pos: 37.5,28.5 + parent: 2 + - uid: 18042 + components: + - type: Transform + pos: 42.5,29.5 + parent: 2 + - uid: 18043 + components: + - type: Transform + pos: 42.5,27.5 + parent: 2 + - uid: 20270 + components: + - type: Transform + pos: 27.5,-43.5 + parent: 2 + - uid: 20271 + components: + - type: Transform + pos: 33.5,-43.5 + parent: 2 + - uid: 20272 + components: + - type: Transform + pos: 33.5,-47.5 + parent: 2 + - uid: 20273 + components: + - type: Transform + pos: 27.5,-47.5 + parent: 2 +- proto: WelderIndustrialAdvanced + entities: + - uid: 18048 + components: + - type: Transform + pos: -7.250613,24.386929 + parent: 2 +- proto: WeldingFuelTankFull + entities: + - uid: 18049 + components: + - type: Transform + pos: 4.5,23.5 + parent: 2 + - uid: 18050 + components: + - type: Transform + pos: -7.5,31.5 + parent: 2 + - uid: 18051 + components: + - type: Transform + pos: 59.5,31.5 + parent: 2 + - uid: 18052 + components: + - type: Transform + pos: 28.5,5.5 + parent: 2 + - uid: 18053 + components: + - type: Transform + pos: 72.5,59.5 + parent: 2 + - uid: 18054 + components: + - type: Transform + pos: 70.5,42.5 + parent: 2 + - uid: 18055 + components: + - type: Transform + pos: 75.5,18.5 + parent: 2 + - uid: 18056 + components: + - type: Transform + pos: 12.5,8.5 + parent: 2 + - uid: 18057 + components: + - type: Transform + pos: 13.5,8.5 + parent: 2 + - uid: 18058 + components: + - type: Transform + pos: 26.5,5.5 + parent: 2 + - uid: 18059 + components: + - type: Transform + pos: 54.5,9.5 + parent: 2 + - uid: 18060 + components: + - type: Transform + pos: 80.5,46.5 + parent: 2 + - uid: 18061 + components: + - type: Transform + pos: 73.5,50.5 + parent: 2 + - uid: 18062 + components: + - type: Transform + pos: 79.5,55.5 + parent: 2 + - uid: 18063 + components: + - type: Transform + pos: 50.5,57.5 + parent: 2 + - uid: 18064 + components: + - type: Transform + pos: 49.5,57.5 + parent: 2 + - uid: 18065 + components: + - type: Transform + pos: 45.5,60.5 + parent: 2 + - uid: 18066 + components: + - type: Transform + pos: 44.5,60.5 + parent: 2 + - uid: 18067 + components: + - type: Transform + pos: 45.5,50.5 + parent: 2 + - uid: 18068 + components: + - type: Transform + pos: 37.5,60.5 + parent: 2 + - uid: 18069 + components: + - type: Transform + pos: 22.5,66.5 + parent: 2 + - uid: 18070 + components: + - type: Transform + pos: 1.5,78.5 + parent: 2 + - uid: 18071 + components: + - type: Transform + pos: 35.5,21.5 + parent: 2 +- proto: Windoor + entities: + - uid: 18072 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,6.5 + parent: 2 + - uid: 18073 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,20.5 + parent: 2 + - uid: 18074 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,14.5 + parent: 2 + - uid: 18075 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,14.5 + parent: 2 + - uid: 18076 + components: + - type: Transform + pos: -15.5,59.5 + parent: 2 + - uid: 18077 + components: + - type: Transform + pos: -15.5,50.5 + parent: 2 + - uid: 18078 + components: + - type: Transform + pos: -14.5,50.5 + parent: 2 + - uid: 18079 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,51.5 + parent: 2 + - uid: 18080 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,52.5 + parent: 2 + - uid: 18081 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,5.5 + parent: 2 + - uid: 18082 + components: + - type: Transform + pos: 8.5,5.5 + parent: 2 + - uid: 18083 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 51.5,25.5 + parent: 2 + - uid: 18084 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 55.5,23.5 + parent: 2 + - uid: 18085 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 49.5,39.5 + parent: 2 + - uid: 18086 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 49.5,38.5 + parent: 2 + - uid: 18087 + components: + - type: Transform + pos: 45.5,36.5 + parent: 2 + - uid: 18088 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 71.5,37.5 + parent: 2 + - uid: 18089 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 71.5,40.5 + parent: 2 + - uid: 18090 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 73.5,40.5 + parent: 2 + - uid: 18091 + components: + - type: Transform + pos: 72.5,12.5 + parent: 2 +- proto: WindoorHydroponicsLocked + entities: + - uid: 18092 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 49.5,39.5 + parent: 2 + - uid: 18093 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 49.5,38.5 + parent: 2 + - uid: 18094 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 45.5,36.5 + parent: 2 +- proto: WindoorKitchenHydroponicsLocked + entities: + - uid: 18095 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 51.5,43.5 + parent: 2 + - uid: 18096 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 51.5,43.5 + parent: 2 +- proto: WindoorSecure + entities: + - uid: 18097 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,63.5 + parent: 2 +- proto: WindoorSecureArmoryLocked + entities: + - uid: 18098 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,65.5 + parent: 2 + - uid: 18099 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -16.5,65.5 + parent: 2 + - uid: 18100 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -16.5,65.5 + parent: 2 + - uid: 18101 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,65.5 + parent: 2 + - uid: 18102 + components: + - type: Transform + pos: -17.5,65.5 + parent: 2 + - uid: 18103 + components: + - type: Transform + pos: -16.5,65.5 + parent: 2 + - uid: 18104 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,64.5 + parent: 2 + - uid: 18105 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,68.5 + parent: 2 + - uid: 18106 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,67.5 + parent: 2 + - uid: 18107 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -19.5,68.5 + parent: 2 + - uid: 18108 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -19.5,67.5 + parent: 2 + - uid: 18109 + components: + - type: Transform + pos: -17.5,70.5 + parent: 2 + - uid: 18110 + components: + - type: Transform + pos: -16.5,70.5 + parent: 2 + - uid: 18111 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -19.5,66.5 + parent: 2 + - type: DeviceLinkSource + lastSignals: + DoorStatus: True + - type: Door + secondsUntilStateChange: -87131.4 + state: Opening + - uid: 18112 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,59.5 + parent: 2 +- proto: WindoorSecureAtmosphericsLocked + entities: + - uid: 18113 + components: + - type: Transform + pos: -18.5,20.5 + parent: 2 + - uid: 18114 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,20.5 + parent: 2 + - uid: 18115 + components: + - type: Transform + pos: 20.5,45.5 + parent: 2 +- proto: WindoorSecureCargoLocked + entities: + - uid: 18116 + components: + - type: Transform + pos: 7.5,14.5 + parent: 2 + - uid: 18117 + components: + - type: Transform + pos: 11.5,14.5 + parent: 2 + - uid: 18118 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,9.5 + parent: 2 +- proto: WindoorSecureChapelLocked + entities: + - uid: 18119 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,63.5 + parent: 2 +- proto: WindoorSecureChemistryLocked + entities: + - uid: 18120 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,23.5 + parent: 2 + - uid: 18121 + components: + - type: Transform + pos: 12.5,29.5 + parent: 2 +- proto: WindoorSecureCommandLocked + entities: + - uid: 257 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 72.5,29.5 + parent: 2 + - uid: 5987 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 72.5,31.5 + parent: 2 + - uid: 14896 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 72.5,28.5 + parent: 2 + - uid: 18122 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,0.5 + parent: 2 + - uid: 20201 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,-27.5 + parent: 2 + - uid: 20228 + components: + - type: Transform + pos: 38.5,-30.5 + parent: 2 + - uid: 20229 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 38.5,-30.5 + parent: 2 + - uid: 20230 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 36.5,-25.5 + parent: 2 + - uid: 20231 + components: + - type: Transform + pos: 36.5,-25.5 + parent: 2 +- proto: WindoorSecureEngineeringLocked + entities: + - uid: 18135 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,35.5 + parent: 2 + - uid: 18136 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,44.5 + parent: 2 +- proto: WindoorSecureHeadOfPersonnelLocked + entities: + - uid: 18137 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 73.5,40.5 + parent: 2 +- proto: WindoorSecureMailLocked + entities: + - uid: 18138 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,6.5 + parent: 2 +- proto: WindoorSecureMedicalLocked + entities: + - uid: 18139 + components: + - type: Transform + pos: 15.5,32.5 + parent: 2 + - uid: 18140 + components: + - type: Transform + pos: 16.5,32.5 + parent: 2 + - uid: 18141 + components: + - type: Transform + pos: -4.5,57.5 + parent: 2 + - uid: 18143 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,39.5 + parent: 2 + - uid: 18144 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,40.5 + parent: 2 + - uid: 18145 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,42.5 + parent: 2 + - uid: 18146 + components: + - type: Transform + pos: 7.5,46.5 + parent: 2 +- proto: WindoorSecureSalvageLocked + entities: + - uid: 18147 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,9.5 + parent: 2 +- proto: WindoorSecureScienceLocked + entities: + - uid: 18148 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 48.5,0.5 + parent: 2 + - uid: 18149 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 48.5,3.5 + parent: 2 + - uid: 18150 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 48.5,-2.5 + parent: 2 + - uid: 18151 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 54.5,-2.5 + parent: 2 + - uid: 18152 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 54.5,0.5 + parent: 2 + - uid: 18153 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 54.5,3.5 + parent: 2 + - uid: 18154 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 51.5,-4.5 + parent: 2 + - uid: 18155 + components: + - type: Transform + pos: 51.5,-5.5 + parent: 2 + - uid: 18156 + components: + - type: Transform + pos: 55.5,23.5 + parent: 2 + - uid: 18157 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 51.5,25.5 + parent: 2 + - uid: 18158 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,28.5 + parent: 2 + - uid: 18159 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,25.5 + parent: 2 + - uid: 18673 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 53.5,6.5 + parent: 2 + - type: DeviceLinkSink + invokeCounter: 1 + links: + - 18674 + - type: DeviceLinkSource + linkedPorts: + 18674: + - DoorStatus: DoorBolt + - uid: 18674 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 53.5,6.5 + parent: 2 + - type: DeviceLinkSink + invokeCounter: 1 + links: + - 18673 + - type: DeviceLinkSource + linkedPorts: + 18673: + - DoorStatus: DoorBolt + - uid: 19278 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 48.5,3.5 + parent: 2 + - uid: 19279 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 48.5,0.5 + parent: 2 + - uid: 19280 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 48.5,-2.5 + parent: 2 + - uid: 19281 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 54.5,-2.5 + parent: 2 + - uid: 19282 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 54.5,0.5 + parent: 2 + - uid: 19283 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 54.5,3.5 + parent: 2 +- proto: WindoorSecureSecurityLawyerLocked + entities: + - uid: 18160 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 37.5,29.5 + parent: 2 + - uid: 18161 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 37.5,27.5 + parent: 2 + - uid: 18162 + components: + - type: Transform + pos: 38.5,30.5 + parent: 2 +- proto: WindoorSecureSecurityLocked + entities: + - uid: 18163 + components: + - type: Transform + pos: -8.5,53.5 + parent: 2 + - uid: 18164 + components: + - type: Transform + pos: -4.5,53.5 + parent: 2 + - uid: 18165 + components: + - type: Transform + pos: -0.5,53.5 + parent: 2 + - uid: 18166 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.5,52.5 + parent: 2 + - uid: 18167 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,67.5 + parent: 2 + - uid: 18168 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,52.5 + parent: 2 + - uid: 18169 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,51.5 + parent: 2 + - uid: 18170 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,50.5 + parent: 2 + - uid: 18171 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,50.5 + parent: 2 + - uid: 18172 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 72.5,12.5 + parent: 2 +- proto: WindoorServiceLocked + entities: + - uid: 18173 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,56.5 + parent: 2 +- proto: WindoorTheatreLocked + entities: + - uid: 18174 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,40.5 + parent: 2 +- proto: Window + entities: + - uid: 6779 + components: + - type: Transform + pos: 34.5,-0.5 + parent: 2 + - uid: 8385 + components: + - type: Transform + pos: 34.5,-1.5 + parent: 2 + - uid: 18175 + components: + - type: Transform + pos: 14.5,33.5 + parent: 2 + - uid: 18176 + components: + - type: Transform + pos: 16.5,33.5 + parent: 2 + - uid: 18177 + components: + - type: Transform + pos: 17.5,33.5 + parent: 2 + - uid: 18178 + components: + - type: Transform + pos: 13.5,32.5 + parent: 2 + - uid: 18179 + components: + - type: Transform + pos: 13.5,33.5 + parent: 2 + - uid: 18180 + components: + - type: Transform + pos: -17.5,-2.5 + parent: 2 + - uid: 18181 + components: + - type: Transform + pos: 5.5,12.5 + parent: 2 + - uid: 18182 + components: + - type: Transform + pos: 9.5,13.5 + parent: 2 + - uid: 18183 + components: + - type: Transform + pos: 6.5,18.5 + parent: 2 + - uid: 18184 + components: + - type: Transform + pos: 9.5,18.5 + parent: 2 + - uid: 18185 + components: + - type: Transform + pos: 12.5,18.5 + parent: 2 + - uid: 18186 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,33.5 + parent: 2 + - uid: 18187 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,56.5 + parent: 2 + - uid: 18188 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,55.5 + parent: 2 + - uid: 18189 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,18.5 + parent: 2 + - uid: 18190 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,18.5 + parent: 2 + - uid: 18191 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,18.5 + parent: 2 + - uid: 18194 + components: + - type: Transform + pos: 57.5,29.5 + parent: 2 + - uid: 18195 + components: + - type: Transform + pos: 59.5,32.5 + parent: 2 + - uid: 18196 + components: + - type: Transform + pos: 60.5,32.5 + parent: 2 + - uid: 18197 + components: + - type: Transform + pos: 61.5,32.5 + parent: 2 + - uid: 18198 + components: + - type: Transform + pos: 63.5,29.5 + parent: 2 + - uid: 18199 + components: + - type: Transform + pos: 12.5,50.5 + parent: 2 + - uid: 18200 + components: + - type: Transform + pos: 13.5,50.5 + parent: 2 + - uid: 18201 + components: + - type: Transform + pos: 17.5,50.5 + parent: 2 + - uid: 18202 + components: + - type: Transform + pos: 19.5,50.5 + parent: 2 + - uid: 18203 + components: + - type: Transform + pos: 21.5,50.5 + parent: 2 + - uid: 18204 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 40.5,36.5 + parent: 2 + - uid: 18205 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,36.5 + parent: 2 + - uid: 18206 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,36.5 + parent: 2 + - uid: 18207 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,36.5 + parent: 2 +- proto: WindowDirectional + entities: + - uid: 18208 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,69.5 + parent: 2 + - uid: 18209 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,69.5 + parent: 2 + - uid: 18210 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,69.5 + parent: 2 + - uid: 18211 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,66.5 + parent: 2 + - uid: 18212 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 67.5,58.5 + parent: 2 + - uid: 18213 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 67.5,58.5 + parent: 2 +- proto: WindowFrostedDirectional + entities: + - uid: 18214 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,35.5 + parent: 2 + - uid: 18215 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 36.5,11.5 + parent: 2 +- proto: WindowReinforcedDirectional + entities: + - uid: 7315 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 20.5,23.5 + parent: 2 + - uid: 8117 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 72.5,27.5 + parent: 2 + - uid: 8288 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -35.5,69.5 + parent: 2 + - uid: 8528 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,69.5 + parent: 2 + - uid: 14758 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,16.5 + parent: 2 + - uid: 15237 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 72.5,30.5 + parent: 2 + - uid: 17120 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 29.5,-45.5 + parent: 2 + - uid: 17123 + components: + - type: Transform + pos: 29.5,-45.5 + parent: 2 + - uid: 17169 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,-45.5 + parent: 2 + - uid: 17218 + components: + - type: Transform + pos: 31.5,-45.5 + parent: 2 + - uid: 17221 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,-44.5 + parent: 2 + - uid: 17222 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,-44.5 + parent: 2 + - uid: 18142 + components: + - type: Transform + pos: -5.5,57.5 + parent: 2 + - uid: 18217 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,32.5 + parent: 2 + - uid: 18218 + components: + - type: Transform + pos: 14.5,32.5 + parent: 2 + - uid: 18219 + components: + - type: Transform + pos: -18.5,36.5 + parent: 2 + - uid: 18220 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,35.5 + parent: 2 + - uid: 18221 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,34.5 + parent: 2 + - uid: 18222 + components: + - type: Transform + pos: -20.5,36.5 + parent: 2 + - uid: 18223 + components: + - type: Transform + pos: -19.5,36.5 + parent: 2 + - uid: 18224 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,33.5 + parent: 2 + - uid: 18225 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,32.5 + parent: 2 + - uid: 18226 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,32.5 + parent: 2 + - uid: 18227 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,32.5 + parent: 2 + - uid: 18228 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -27.5,5.5 + parent: 2 + - uid: 18231 + components: + - type: Transform + pos: 47.5,-0.5 + parent: 2 + - uid: 18241 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 48.5,1.5 + parent: 2 + - uid: 18242 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 48.5,2.5 + parent: 2 + - uid: 18243 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 48.5,-0.5 + parent: 2 + - uid: 18244 + components: + - type: Transform + pos: 47.5,2.5 + parent: 2 + - uid: 18250 + components: + - type: Transform + pos: -26.5,21.5 + parent: 2 + - uid: 18251 + components: + - type: Transform + pos: -27.5,21.5 + parent: 2 + - uid: 18252 + components: + - type: Transform + pos: -28.5,21.5 + parent: 2 + - uid: 18253 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,20.5 + parent: 2 + - uid: 18254 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -27.5,20.5 + parent: 2 + - uid: 18255 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,20.5 + parent: 2 + - uid: 18256 + components: + - type: Transform + pos: -33.5,6.5 + parent: 2 + - uid: 18257 + components: + - type: Transform + pos: -32.5,6.5 + parent: 2 + - uid: 18258 + components: + - type: Transform + pos: -31.5,6.5 + parent: 2 + - uid: 18259 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,7.5 + parent: 2 + - uid: 18260 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,8.5 + parent: 2 + - uid: 18261 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,9.5 + parent: 2 + - uid: 18262 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,11.5 + parent: 2 + - uid: 18263 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,12.5 + parent: 2 + - uid: 18264 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,13.5 + parent: 2 + - uid: 18265 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,15.5 + parent: 2 + - uid: 18266 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,16.5 + parent: 2 + - uid: 18267 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,17.5 + parent: 2 + - uid: 18268 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,19.5 + parent: 2 + - uid: 18269 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,20.5 + parent: 2 + - uid: 18270 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,21.5 + parent: 2 + - uid: 18271 + components: + - type: Transform + pos: -29.5,6.5 + parent: 2 + - uid: 18272 + components: + - type: Transform + pos: -28.5,6.5 + parent: 2 + - uid: 18273 + components: + - type: Transform + pos: -27.5,6.5 + parent: 2 + - uid: 18274 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,5.5 + parent: 2 + - uid: 18275 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,5.5 + parent: 2 + - uid: 18276 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -31.5,5.5 + parent: 2 + - uid: 18277 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -32.5,5.5 + parent: 2 + - uid: 18278 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,5.5 + parent: 2 + - uid: 18279 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,7.5 + parent: 2 + - uid: 18280 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,8.5 + parent: 2 + - uid: 18281 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,9.5 + parent: 2 + - uid: 18282 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,11.5 + parent: 2 + - uid: 18283 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,12.5 + parent: 2 + - uid: 18284 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,13.5 + parent: 2 + - uid: 18285 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,15.5 + parent: 2 + - uid: 18286 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,16.5 + parent: 2 + - uid: 18287 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,17.5 + parent: 2 + - uid: 18288 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,19.5 + parent: 2 + - uid: 18289 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,20.5 + parent: 2 + - uid: 18290 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,21.5 + parent: 2 + - uid: 18291 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,20.5 + parent: 2 + - uid: 18292 + components: + - type: Transform + pos: -17.5,20.5 + parent: 2 + - uid: 18293 + components: + - type: Transform + pos: -3.5,57.5 + parent: 2 + - uid: 18294 + components: + - type: Transform + pos: -19.5,20.5 + parent: 2 + - uid: 18295 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 48.5,4.5 + parent: 2 + - uid: 18296 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 48.5,-1.5 + parent: 2 + - uid: 18297 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 48.5,-3.5 + parent: 2 + - uid: 18298 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 54.5,-3.5 + parent: 2 + - uid: 18299 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 54.5,-1.5 + parent: 2 + - uid: 18300 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 54.5,-0.5 + parent: 2 + - uid: 18301 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 54.5,1.5 + parent: 2 + - uid: 18302 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 54.5,2.5 + parent: 2 + - uid: 18303 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 54.5,4.5 + parent: 2 + - uid: 18304 + components: + - type: Transform + pos: 46.5,2.5 + parent: 2 + - uid: 18305 + components: + - type: Transform + pos: 45.5,2.5 + parent: 2 + - uid: 18306 + components: + - type: Transform + pos: 46.5,-0.5 + parent: 2 + - uid: 18307 + components: + - type: Transform + pos: 45.5,-0.5 + parent: 2 + - uid: 18308 + components: + - type: Transform + pos: 55.5,-0.5 + parent: 2 + - uid: 18309 + components: + - type: Transform + pos: 56.5,-0.5 + parent: 2 + - uid: 18310 + components: + - type: Transform + pos: 57.5,-0.5 + parent: 2 + - uid: 18311 + components: + - type: Transform + pos: 55.5,2.5 + parent: 2 + - uid: 18312 + components: + - type: Transform + pos: 56.5,2.5 + parent: 2 + - uid: 18313 + components: + - type: Transform + pos: 57.5,2.5 + parent: 2 + - uid: 18314 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 53.5,36.5 + parent: 2 + - uid: 18315 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 53.5,36.5 + parent: 2 + - uid: 18316 + components: + - type: Transform + pos: 53.5,36.5 + parent: 2 + - uid: 18317 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 54.5,36.5 + parent: 2 + - uid: 18318 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 54.5,36.5 + parent: 2 + - uid: 18319 + components: + - type: Transform + pos: 54.5,36.5 + parent: 2 + - uid: 18320 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 67.5,38.5 + parent: 2 + - uid: 18321 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 67.5,38.5 + parent: 2 + - uid: 18322 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 68.5,36.5 + parent: 2 + - uid: 18323 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 67.5,39.5 + parent: 2 + - uid: 18324 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 67.5,36.5 + parent: 2 + - uid: 18325 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 67.5,37.5 + parent: 2 + - uid: 18326 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 67.5,37.5 + parent: 2 + - uid: 18327 + components: + - type: Transform + pos: 68.5,36.5 + parent: 2 + - uid: 18328 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 68.5,36.5 + parent: 2 + - uid: 18329 + components: + - type: Transform + pos: 67.5,36.5 + parent: 2 + - uid: 18330 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 67.5,39.5 + parent: 2 + - uid: 18331 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 71.5,39.5 + parent: 2 + - uid: 18332 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 71.5,39.5 + parent: 2 + - uid: 18333 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 71.5,38.5 + parent: 2 + - uid: 18334 + components: + - type: Transform + pos: 71.5,38.5 + parent: 2 + - uid: 18335 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 71.5,38.5 + parent: 2 + - uid: 18336 + components: + - type: Transform + pos: -10.5,21.5 + parent: 2 + - uid: 18337 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,68.5 + parent: 2 + - uid: 18338 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -17.5,70.5 + parent: 2 + - uid: 18339 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,70.5 + parent: 2 + - uid: 18340 + components: + - type: Transform + pos: -14.5,67.5 + parent: 2 + - uid: 18341 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,68.5 + parent: 2 + - uid: 18342 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,5.5 + parent: 2 + - uid: 18343 + components: + - type: Transform + pos: 7.5,5.5 + parent: 2 + - uid: 18344 + components: + - type: Transform + pos: 9.5,5.5 + parent: 2 + - uid: 18345 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,4.5 + parent: 2 + - uid: 18346 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,3.5 + parent: 2 + - uid: 18347 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,2.5 + parent: 2 + - uid: 18348 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,64.5 + parent: 2 + - uid: 18349 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,62.5 + parent: 2 + - uid: 18350 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 47.5,37.5 + parent: 2 + - uid: 18351 + components: + - type: Transform + pos: 38.5,39.5 + parent: 2 + - uid: 18352 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,39.5 + parent: 2 + - uid: 18353 + components: + - type: Transform + pos: 39.5,39.5 + parent: 2 + - uid: 18354 + components: + - type: Transform + pos: 40.5,39.5 + parent: 2 + - uid: 18355 + components: + - type: Transform + pos: 41.5,39.5 + parent: 2 + - uid: 18356 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,29.5 + parent: 2 + - uid: 18357 + components: + - type: Transform + pos: 37.5,29.5 + parent: 2 + - uid: 18358 + components: + - type: Transform + pos: 37.5,27.5 + parent: 2 + - uid: 18359 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,27.5 + parent: 2 + - uid: 18360 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,27.5 + parent: 2 + - uid: 18361 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,29.5 + parent: 2 + - uid: 18362 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,23.5 + parent: 2 + - uid: 18363 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,24.5 + parent: 2 + - uid: 18364 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,25.5 + parent: 2 + - uid: 18365 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,25.5 + parent: 2 + - uid: 18366 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,25.5 + parent: 2 + - uid: 18367 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,23.5 + parent: 2 + - uid: 18368 + components: + - type: Transform + pos: 17.5,32.5 + parent: 2 + - uid: 18369 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,38.5 + parent: 2 + - uid: 18370 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,39.5 + parent: 2 + - uid: 18371 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,39.5 + parent: 2 + - uid: 18372 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,41.5 + parent: 2 + - uid: 18373 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,41.5 + parent: 2 + - uid: 18374 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,41.5 + parent: 2 + - uid: 18375 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,43.5 + parent: 2 + - uid: 18376 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,43.5 + parent: 2 + - uid: 18377 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,43.5 + parent: 2 + - uid: 18378 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 20.5,45.5 + parent: 2 + - uid: 18379 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,18.5 + parent: 2 + - uid: 18380 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.5,18.5 + parent: 2 + - uid: 18440 + components: + - type: Transform + pos: 34.5,-35.5 + parent: 2 + - uid: 18494 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 34.5,-34.5 + parent: 2 + - uid: 18753 + components: + - type: Transform + pos: -24.5,14.5 + parent: 2 + - uid: 19266 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 54.5,2.5 + parent: 2 + - uid: 19267 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 54.5,-0.5 + parent: 2 + - uid: 19268 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 54.5,-3.5 + parent: 2 + - uid: 19269 + components: + - type: Transform + pos: 54.5,-1.5 + parent: 2 + - uid: 19270 + components: + - type: Transform + pos: 54.5,1.5 + parent: 2 + - uid: 19271 + components: + - type: Transform + pos: 54.5,4.5 + parent: 2 + - uid: 19272 + components: + - type: Transform + pos: 48.5,4.5 + parent: 2 + - uid: 19273 + components: + - type: Transform + pos: 48.5,1.5 + parent: 2 + - uid: 19274 + components: + - type: Transform + pos: 48.5,-1.5 + parent: 2 + - uid: 19275 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 48.5,-3.5 + parent: 2 + - uid: 19276 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 48.5,-0.5 + parent: 2 + - uid: 19277 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 48.5,2.5 + parent: 2 + - uid: 19473 + components: + - type: Transform + pos: -35.5,66.5 + parent: 2 + - uid: 19474 + components: + - type: Transform + pos: -34.5,66.5 + parent: 2 + - uid: 20199 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,-27.5 + parent: 2 + - uid: 20200 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,-27.5 + parent: 2 + - uid: 20223 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,-26.5 + parent: 2 + - uid: 20224 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 36.5,-25.5 + parent: 2 + - uid: 20225 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 38.5,-28.5 + parent: 2 + - uid: 20226 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 38.5,-29.5 + parent: 2 + - uid: 20227 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 38.5,-30.5 + parent: 2 + - uid: 20262 + components: + - type: Transform + pos: 33.5,-46.5 + parent: 2 + - uid: 20263 + components: + - type: Transform + pos: 27.5,-46.5 + parent: 2 + - uid: 20264 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,-44.5 + parent: 2 + - uid: 20265 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.5,-44.5 + parent: 2 + - uid: 20275 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,-46.5 + parent: 2 + - uid: 20276 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,-46.5 + parent: 2 +- proto: WindowTintedDirectional + entities: + - uid: 18516 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,35.5 + parent: 2 + - uid: 18517 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,35.5 + parent: 2 + - uid: 18518 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,34.5 + parent: 2 + - uid: 18519 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,34.5 + parent: 2 + - uid: 18520 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,34.5 + parent: 2 +- proto: WoodDoor + entities: + - uid: 18521 + components: + - type: Transform + pos: 13.5,55.5 + parent: 2 + - uid: 18522 + components: + - type: Transform + pos: 13.5,57.5 + parent: 2 +- proto: WoodenBench + entities: + - uid: 18523 + components: + - type: Transform + pos: 67.5,21.5 + parent: 2 + - uid: 18524 + components: + - type: Transform + pos: 69.5,21.5 + parent: 2 +- proto: Wrench + entities: + - uid: 18525 + components: + - type: Transform + pos: 27.530495,3.5236495 + parent: 2 + - uid: 18526 + components: + - type: Transform + pos: 36.452583,7.5585823 + parent: 2 + - uid: 18527 + components: + - type: Transform + pos: 51.508472,54.48591 + parent: 2 +... diff --git a/Resources/Maps/radstation.yml b/Resources/Maps/radstation.yml new file mode 100644 index 00000000000..07dfe0f580d --- /dev/null +++ b/Resources/Maps/radstation.yml @@ -0,0 +1,160207 @@ +meta: + format: 6 + postmapinit: false +tilemap: + 0: Space + 3: FloorAstroGrass + 13: FloorBasalt + 15: FloorBlueCircuit + 17: FloorBrokenWood + 27: FloorDark + 28: FloorDarkDiagonal + 36: FloorDarkPlastic + 38: FloorDirt + 42: FloorFreezer + 2: FloorGlass + 48: FloorGrassLight + 52: FloorGreenCircuit + 60: FloorLino + 1: FloorRGlass + 72: FloorReinforced + 74: FloorRockVault + 75: FloorShowroom + 80: FloorShuttleWhite + 84: FloorSteel + 85: FloorSteelCheckerDark + 92: FloorSteelMono + 96: FloorTechMaint + 97: FloorTechMaint2 + 100: FloorWhite + 109: FloorWhitePlastic + 110: FloorWood + 112: Lattice + 113: Plating +entities: +- proto: "" + entities: + - uid: 1 + components: + - type: MetaData + name: map 190 + - type: Transform + - type: Map + mapPaused: True + - type: PhysicsMap + - type: GridTree + - type: MovedGrids + - type: Broadphase + - type: OccluderTree + - type: LoadedMap + - type: Parallax + parallax: KettleStation + - uid: 2 + components: + - type: MetaData + name: NT-LMSS-T14 "Radstation" + - type: Transform + pos: -0.53153133,-0.45798445 + parent: 1 + - type: MapGrid + chunks: + 0,0: + ind: 0,0 + tiles: AQAAAAAAAQAAAAAAAQAAAAAAYAAAAAAAVAAAAAACVAAAAAAAVAAAAAAAVAAAAAADVAAAAAADVAAAAAADVAAAAAADVAAAAAACVAAAAAABVAAAAAACVAAAAAABVAAAAAACAQAAAAAAAQAAAAAAAQAAAAAAYAAAAAAAVAAAAAABVAAAAAABVAAAAAADVAAAAAAAVAAAAAADVAAAAAADVAAAAAADVAAAAAADVAAAAAACVAAAAAACVAAAAAAAVAAAAAABAQAAAAAAAQAAAAAAAQAAAAAAYAAAAAAAVAAAAAACVAAAAAABVAAAAAACVAAAAAABVAAAAAABVAAAAAAAVAAAAAACVAAAAAABVAAAAAADVAAAAAAAcQAAAAAAVAAAAAABYAAAAAAAYAAAAAAAYAAAAAAAVAAAAAABVAAAAAABVAAAAAACMAAAAAACMAAAAAACMAAAAAADMAAAAAADVAAAAAADVAAAAAABcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADVAAAAAABVAAAAAABVAAAAAADVAAAAAABVAAAAAADMAAAAAACMAAAAAAAMAAAAAADVAAAAAAAVAAAAAADVAAAAAABcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACVAAAAAAAVAAAAAACcQAAAAAAcQAAAAAAMAAAAAADMAAAAAACMAAAAAABVAAAAAACVAAAAAADVAAAAAAAVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADVAAAAAACVAAAAAACMAAAAAABMAAAAAAAMAAAAAACMAAAAAACMAAAAAADVAAAAAABVAAAAAACVAAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABVAAAAAADVAAAAAADVAAAAAAAMAAAAAAAMAAAAAACMAAAAAADMAAAAAAAVAAAAAAAVAAAAAABVAAAAAADcQAAAAAAcQAAAAAAJgAAAAAAcQAAAAAAcQAAAAAAVAAAAAACVAAAAAABVAAAAAADVAAAAAACMAAAAAABMAAAAAADVAAAAAACVAAAAAACVAAAAAAAVAAAAAADVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACVAAAAAABVAAAAAAAVAAAAAABMAAAAAABVAAAAAAAVAAAAAACVAAAAAABVAAAAAAAVAAAAAADVAAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAACVAAAAAAAVAAAAAADVAAAAAACVAAAAAABVAAAAAADVAAAAAADcQAAAAAAVAAAAAABcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACVAAAAAACVAAAAAACVAAAAAACVAAAAAACVAAAAAAAVAAAAAACcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAADVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAAAVAAAAAADVAAAAAADcQAAAAAAcQAAAAAAGwAAAAACcQAAAAAAVAAAAAAAVAAAAAADVAAAAAABVAAAAAADcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACVAAAAAABVAAAAAABcQAAAAAAGwAAAAABGwAAAAABcQAAAAAAVAAAAAABVAAAAAACVAAAAAABVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAAAVAAAAAADVAAAAAABcQAAAAAAcQAAAAAAGwAAAAACGwAAAAACcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADVAAAAAADVAAAAAACcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAcQAAAAAAGwAAAAAAGwAAAAACGwAAAAAAGwAAAAACcQAAAAAAVAAAAAAAVAAAAAACcQAAAAAAVAAAAAACcQAAAAAAcQAAAAAAcQAAAAAA + version: 6 + 0,-1: + ind: 0,-1 + tiles: VAAAAAAAVAAAAAADVAAAAAABcQAAAAAAcQAAAAAAVAAAAAACcQAAAAAAVAAAAAABcQAAAAAAVAAAAAABcQAAAAAAcQAAAAAAVAAAAAABVAAAAAADVAAAAAAAVAAAAAACVAAAAAACVAAAAAADVAAAAAABcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACcQAAAAAAVAAAAAADVAAAAAACVAAAAAADVAAAAAACVAAAAAABVAAAAAACVAAAAAADcQAAAAAAVAAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAVAAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADVAAAAAADVAAAAAABVAAAAAABVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAVAAAAAAAVAAAAAACcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADcQAAAAAAcQAAAAAAVAAAAAABVAAAAAAAVAAAAAACcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAACGwAAAAADGwAAAAAAVAAAAAABVAAAAAAAVAAAAAABcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAABGwAAAAAAGwAAAAABVAAAAAACVAAAAAABVAAAAAAAVAAAAAABVAAAAAABVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAABGwAAAAABGwAAAAADVAAAAAACVAAAAAABVAAAAAADVAAAAAADVAAAAAABVAAAAAAAVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAVAAAAAABVAAAAAADVAAAAAACMAAAAAAAVAAAAAAAVAAAAAABVAAAAAADVAAAAAABVAAAAAABVAAAAAABcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACVAAAAAACVAAAAAADMAAAAAABMAAAAAADVAAAAAABVAAAAAAAVAAAAAADVAAAAAADVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACVAAAAAABVAAAAAABMAAAAAADMAAAAAADMAAAAAADMAAAAAADVAAAAAACVAAAAAACVAAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADVAAAAAADVAAAAAABMAAAAAADMAAAAAAAMAAAAAACMAAAAAABMAAAAAAAVAAAAAAAVAAAAAABVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAABVAAAAAABVAAAAAAAVAAAAAABMAAAAAABMAAAAAACMAAAAAADVAAAAAABVAAAAAAAVAAAAAADVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABVAAAAAAAVAAAAAAAVAAAAAABVAAAAAAAVAAAAAACMAAAAAADMAAAAAADMAAAAAACVAAAAAADVAAAAAABVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAVAAAAAAAVAAAAAABVAAAAAADMAAAAAAAMAAAAAAAMAAAAAACMAAAAAABVAAAAAACVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAYAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAACVAAAAAACVAAAAAADVAAAAAABVAAAAAABVAAAAAACVAAAAAABcQAAAAAAVAAAAAAA + version: 6 + -1,-1: + ind: -1,-1 + tiles: VAAAAAABVAAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAVAAAAAABcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAADGwAAAAAAGwAAAAACcQAAAAAAVAAAAAAAVAAAAAACVAAAAAACcQAAAAAAVAAAAAADcQAAAAAAVAAAAAADcQAAAAAAcQAAAAAAVAAAAAADcQAAAAAAcQAAAAAAGwAAAAABGwAAAAAAGwAAAAAAGwAAAAACVAAAAAACVAAAAAACVAAAAAACcQAAAAAAVAAAAAABcQAAAAAAVAAAAAADVAAAAAADcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAGwAAAAADGwAAAAAAGwAAAAAAcQAAAAAAcQAAAAAAVAAAAAACVAAAAAABcQAAAAAAcQAAAAAAVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADVAAAAAACVAAAAAADcQAAAAAAVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACVAAAAAABcQAAAAAAcQAAAAAAVAAAAAABVAAAAAAAcQAAAAAAVAAAAAACcQAAAAAAcQAAAAAAVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABVAAAAAADVAAAAAACVAAAAAACVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABVAAAAAACVAAAAAAAVAAAAAACVAAAAAABcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADVAAAAAABVAAAAAADVAAAAAAAVAAAAAAAVAAAAAADMAAAAAACVAAAAAABbgAAAAABEQAAAAAAbgAAAAABbgAAAAAAEQAAAAABbgAAAAABbgAAAAAAcQAAAAAAVAAAAAADVAAAAAADVAAAAAADVAAAAAABVAAAAAACMAAAAAAAMAAAAAABVAAAAAADbgAAAAACbgAAAAACbgAAAAACEQAAAAAAbgAAAAABbgAAAAADcQAAAAAAcQAAAAAAVAAAAAADVAAAAAAAVAAAAAADMAAAAAACMAAAAAACMAAAAAACMAAAAAACVAAAAAAAEQAAAAAAbgAAAAABbgAAAAABbgAAAAABbgAAAAACcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAADVAAAAAACMAAAAAAAMAAAAAABMAAAAAADMAAAAAACMAAAAAABVAAAAAAAbgAAAAADEQAAAAABbgAAAAADEQAAAAAFEQAAAAAEcQAAAAAAVAAAAAABVAAAAAAAVAAAAAAAVAAAAAADMAAAAAADMAAAAAAAMAAAAAAAVAAAAAACVAAAAAACVAAAAAAAbgAAAAABbgAAAAABbgAAAAABbgAAAAADEQAAAAADcQAAAAAAVAAAAAABVAAAAAABVAAAAAABMAAAAAABMAAAAAADMAAAAAACVAAAAAADVAAAAAAAVAAAAAAAVAAAAAABVAAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABVAAAAAABMAAAAAABMAAAAAADMAAAAAABMAAAAAADVAAAAAABVAAAAAADVAAAAAABYAAAAAAAVAAAAAADVAAAAAACVAAAAAAAcQAAAAAAVAAAAAADVAAAAAABVAAAAAACVAAAAAAAVAAAAAADVAAAAAACVAAAAAAAVAAAAAABVAAAAAADVAAAAAADYAAAAAAAAQAAAAAA + version: 6 + -1,0: + ind: -1,0 + tiles: VAAAAAADVAAAAAADVAAAAAAAVAAAAAAAVAAAAAADVAAAAAADVAAAAAACVAAAAAACVAAAAAABVAAAAAAAVAAAAAABVAAAAAADVAAAAAABVAAAAAACYAAAAAAAAQAAAAAAVAAAAAACVAAAAAADVAAAAAADVAAAAAAAVAAAAAADVAAAAAABVAAAAAABVAAAAAACVAAAAAAAVAAAAAACVAAAAAAAVAAAAAADVAAAAAACVAAAAAACYAAAAAAAAQAAAAAAVAAAAAAAVAAAAAADVAAAAAAAcQAAAAAAVAAAAAAAVAAAAAACVAAAAAACVAAAAAACVAAAAAADVAAAAAAAVAAAAAABVAAAAAACVAAAAAADVAAAAAAAYAAAAAAAAQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADVAAAAAABMAAAAAADMAAAAAADMAAAAAAAMAAAAAACVAAAAAABVAAAAAABVAAAAAAAYAAAAAAAVAAAAAADGwAAAAADGwAAAAAAGwAAAAADGwAAAAACGwAAAAABVAAAAAADVAAAAAABVAAAAAACMAAAAAADMAAAAAACMAAAAAADVAAAAAAAVAAAAAABVAAAAAAAVAAAAAABVAAAAAAAcQAAAAAAGwAAAAACGwAAAAABGwAAAAACGwAAAAABVAAAAAABVAAAAAACVAAAAAABVAAAAAACMAAAAAABMAAAAAADMAAAAAACcQAAAAAAcQAAAAAAVAAAAAACVAAAAAACcQAAAAAAGwAAAAACGwAAAAAAGwAAAAACcQAAAAAAcQAAAAAAVAAAAAABVAAAAAADVAAAAAABMAAAAAAAMAAAAAACMAAAAAADMAAAAAACMAAAAAADVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAADVAAAAAADMAAAAAADMAAAAAABMAAAAAABMAAAAAABVAAAAAADcQAAAAAAcQAAAAAAbgAAAAAAbgAAAAACbgAAAAAAbgAAAAADbgAAAAAAbgAAAAACVAAAAAACVAAAAAAAVAAAAAADVAAAAAACVAAAAAADMAAAAAABMAAAAAAAVAAAAAADbgAAAAABcQAAAAAAbgAAAAABbgAAAAACbgAAAAADbgAAAAAAbgAAAAACcQAAAAAAVAAAAAABVAAAAAADVAAAAAACVAAAAAAAVAAAAAACVAAAAAAAMAAAAAADVAAAAAADbgAAAAADcQAAAAAAbgAAAAAAbgAAAAACbgAAAAACbgAAAAABbgAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAABVAAAAAABVAAAAAADVAAAAAAAbgAAAAADbgAAAAACbgAAAAACbgAAAAAAbgAAAAABbgAAAAACbgAAAAABcQAAAAAAPAAAAAAAPAAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAADVAAAAAACVAAAAAACbgAAAAACcQAAAAAAbgAAAAAAbgAAAAAAbgAAAAACbgAAAAACbgAAAAACcQAAAAAAPAAAAAAAPAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAbgAAAAABcQAAAAAAVAAAAAABcQAAAAAAcQAAAAAAbgAAAAAAbgAAAAACbgAAAAABbgAAAAACbgAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAbgAAAAABbgAAAAABbgAAAAACcQAAAAAAVAAAAAABcQAAAAAAVAAAAAABbgAAAAACbgAAAAACbgAAAAAAbgAAAAACbgAAAAACVAAAAAACcQAAAAAAbgAAAAACbgAAAAACbgAAAAADbgAAAAAAbgAAAAADcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADbgAAAAACbgAAAAADbgAAAAACbgAAAAABbgAAAAAAVAAAAAADbgAAAAABbgAAAAAAbgAAAAABbgAAAAAAbgAAAAABbgAAAAACcQAAAAAAVAAAAAAB + version: 6 + -2,0: + ind: -2,0 + tiles: VAAAAAADVAAAAAAAVAAAAAACVAAAAAABVAAAAAABVAAAAAAAVAAAAAAAVAAAAAADVAAAAAAAVAAAAAABVAAAAAAAVAAAAAABVAAAAAADVAAAAAABVAAAAAAAVAAAAAABVAAAAAAAVAAAAAACVAAAAAACVAAAAAAAVAAAAAACVAAAAAABVAAAAAAAVAAAAAADVAAAAAACVAAAAAAAVAAAAAADVAAAAAADVAAAAAACVAAAAAAAVAAAAAAAVAAAAAABVAAAAAAAVAAAAAACVAAAAAAAVAAAAAABVAAAAAABVAAAAAADVAAAAAACVAAAAAABVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAACVAAAAAADVAAAAAABVAAAAAABVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABVAAAAAADVAAAAAABVAAAAAABcQAAAAAAVAAAAAABVAAAAAABVAAAAAABcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABcQAAAAAAcQAAAAAAVAAAAAABVAAAAAAAVAAAAAABVAAAAAACcQAAAAAAVAAAAAABVAAAAAAAVAAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAACGwAAAAABGwAAAAAAVAAAAAADcQAAAAAAVAAAAAABVAAAAAACVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAVAAAAAACGwAAAAADGwAAAAADVAAAAAAAVAAAAAAAVAAAAAADVAAAAAADVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABGwAAAAAAGwAAAAACGwAAAAABcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABcQAAAAAAVAAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAbgAAAAABbgAAAAABVAAAAAADcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAbgAAAAACbgAAAAABVAAAAAACVAAAAAACcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAVAAAAAABcQAAAAAAcQAAAAAAVAAAAAADcQAAAAAAcQAAAAAAVAAAAAADcQAAAAAAbgAAAAACbgAAAAACVAAAAAABVAAAAAABcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACcQAAAAAAbgAAAAAAbgAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAACVAAAAAAAVAAAAAABGwAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAJgAAAAAAVAAAAAACcQAAAAAAVAAAAAAAVAAAAAABcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAA + version: 6 + -2,-1: + ind: -2,-1 + tiles: cQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABcQAAAAAAGwAAAAAAGwAAAAABGwAAAAAAGwAAAAABGwAAAAABcQAAAAAAcQAAAAAAVAAAAAADJgAAAAAAcQAAAAAAVAAAAAACcQAAAAAAVAAAAAABcQAAAAAAcQAAAAAAGwAAAAADGwAAAAAAGwAAAAABGwAAAAABGwAAAAAAGwAAAAACcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACcQAAAAAAVAAAAAADcQAAAAAAGwAAAAADGwAAAAAAGwAAAAADYAAAAAAAYAAAAAAAYAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABcQAAAAAAVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAABGwAAAAADGwAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAVAAAAAACVAAAAAADVAAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAGwAAAAADGwAAAAABYAAAAAAAYAAAAAAAYAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAABcQAAAAAAVAAAAAADVAAAAAABcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAACGwAAAAADGwAAAAABVAAAAAACVAAAAAACVAAAAAAAVAAAAAABGwAAAAACGwAAAAADcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAEQAAAAAFbgAAAAACcQAAAAAAGwAAAAACVAAAAAACVAAAAAADVAAAAAACVAAAAAABVAAAAAABVAAAAAABcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAbgAAAAADEQAAAAADcQAAAAAAGwAAAAABVAAAAAABVAAAAAADVAAAAAACVAAAAAAAVAAAAAADVAAAAAACVAAAAAACVAAAAAAAVAAAAAACcQAAAAAAVAAAAAACcQAAAAAAbgAAAAABbgAAAAABcQAAAAAAGwAAAAADVAAAAAAAVAAAAAAAVAAAAAABVAAAAAADVAAAAAADVAAAAAACVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAEQAAAAABbgAAAAAAcQAAAAAAGwAAAAACVAAAAAADGwAAAAADGwAAAAAAGwAAAAADGwAAAAACGwAAAAADGwAAAAABcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADcQAAAAAAbgAAAAABEQAAAAADcQAAAAAAcQAAAAAAVAAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABVAAAAAAAVAAAAAADVAAAAAAAVAAAAAAAVAAAAAADVAAAAAADVAAAAAADVAAAAAACVAAAAAABVAAAAAABVAAAAAABVAAAAAADVAAAAAABVAAAAAADVAAAAAAC + version: 6 + -1,1: + ind: -1,1 + tiles: cQAAAAAAVAAAAAACbgAAAAABbgAAAAADbgAAAAABbgAAAAABbgAAAAADVAAAAAADcQAAAAAAbgAAAAADbgAAAAADbgAAAAAAbgAAAAADbgAAAAACcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACVAAAAAAAVAAAAAACVAAAAAADVAAAAAABVAAAAAADVAAAAAAAVAAAAAABVAAAAAACVAAAAAADVAAAAAABVAAAAAADVAAAAAACVAAAAAABVAAAAAADcQAAAAAAVAAAAAAAVAAAAAADVAAAAAABVAAAAAADVAAAAAACVAAAAAADVAAAAAACVAAAAAACVAAAAAACVAAAAAACVAAAAAACVAAAAAADVAAAAAACVAAAAAADVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAACVAAAAAADVAAAAAADVAAAAAADVAAAAAABVAAAAAAAVAAAAAAAVAAAAAADVAAAAAACVAAAAAABVAAAAAAAVAAAAAAAVAAAAAABcQAAAAAAVAAAAAAAcQAAAAAAVAAAAAABcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAADVAAAAAADcQAAAAAAGwAAAAADGwAAAAADcQAAAAAAGwAAAAAAGwAAAAAAGwAAAAACGwAAAAACGwAAAAADcQAAAAAAGwAAAAAAGwAAAAACcQAAAAAAVAAAAAADVAAAAAACVAAAAAACcQAAAAAAGwAAAAADGwAAAAAAcQAAAAAAGwAAAAACGwAAAAAAGwAAAAACGwAAAAABGwAAAAAAcQAAAAAAGwAAAAABGwAAAAADcQAAAAAAVAAAAAADcQAAAAAAVAAAAAADcQAAAAAAGwAAAAADGwAAAAADcQAAAAAAGwAAAAAAGwAAAAABGwAAAAADGwAAAAADGwAAAAACcQAAAAAAGwAAAAACGwAAAAADcQAAAAAAVAAAAAADVAAAAAACVAAAAAACcQAAAAAAcQAAAAAAYAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAYAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAYAAAAAAAcQAAAAAAVAAAAAADVAAAAAAAVAAAAAADGwAAAAADGwAAAAACGwAAAAAAGwAAAAAAGwAAAAACGwAAAAAAGwAAAAACGwAAAAADGwAAAAACGwAAAAADGwAAAAABGwAAAAACcQAAAAAAVAAAAAADVAAAAAACVAAAAAABVAAAAAAAVAAAAAADVAAAAAACVAAAAAADVAAAAAAAVAAAAAABVAAAAAAAVAAAAAABVAAAAAADVAAAAAACVAAAAAADVAAAAAADcQAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAACVAAAAAACVAAAAAADVAAAAAABVAAAAAABVAAAAAADVAAAAAACVAAAAAACVAAAAAACVAAAAAAAVAAAAAADVAAAAAADcQAAAAAAVAAAAAABVAAAAAABVAAAAAAAVAAAAAABVAAAAAACVAAAAAACVAAAAAAAVAAAAAACVAAAAAABVAAAAAABVAAAAAABVAAAAAACVAAAAAAAVAAAAAADVAAAAAACcQAAAAAAVAAAAAAAVAAAAAACcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABVAAAAAADVAAAAAADVAAAAAABVAAAAAAAcQAAAAAAVAAAAAABVAAAAAACVAAAAAAAcQAAAAAAVAAAAAACVAAAAAACVAAAAAACVAAAAAADVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACVAAAAAAAVAAAAAACcQAAAAAAVAAAAAAC + version: 6 + 0,1: + ind: 0,1 + tiles: VAAAAAACVAAAAAABVAAAAAADcQAAAAAAGwAAAAACGwAAAAACGwAAAAADGwAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAAAVAAAAAAAVAAAAAADVAAAAAADcQAAAAAAGwAAAAABGwAAAAAAGwAAAAACGwAAAAACcQAAAAAAGwAAAAADGwAAAAAAcQAAAAAAVAAAAAABcQAAAAAAcQAAAAAAGwAAAAADVAAAAAACVAAAAAACVAAAAAACGwAAAAAAGwAAAAADGwAAAAADGwAAAAAAGwAAAAADGwAAAAABGwAAAAACGwAAAAABcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAABVAAAAAAAVAAAAAABVAAAAAACcQAAAAAAGwAAAAADGwAAAAACGwAAAAABGwAAAAADcQAAAAAAGwAAAAADGwAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADVAAAAAACVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACcQAAAAAAcQAAAAAAVQAAAAAAVAAAAAABVAAAAAADVAAAAAACcQAAAAAAcQAAAAAAVAAAAAADVAAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVQAAAAAAVAAAAAADVAAAAAAAVAAAAAACcQAAAAAAVAAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABcQAAAAAAVAAAAAABcQAAAAAAcQAAAAAAJAAAAAAAVAAAAAACVAAAAAABVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACcQAAAAAAcQAAAAAAJAAAAAAAVAAAAAADVAAAAAAAVAAAAAADcQAAAAAAGwAAAAAAGwAAAAAAGwAAAAABGwAAAAABGwAAAAAAcQAAAAAAEQAAAAAFbgAAAAACbgAAAAAAbgAAAAABcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAACVAAAAAADcQAAAAAAGwAAAAADJAAAAAAAJAAAAAAAJAAAAAACGwAAAAADcQAAAAAAEQAAAAAGbgAAAAADEQAAAAAEbgAAAAADbgAAAAAAcQAAAAAAVAAAAAACVAAAAAACVAAAAAAAGwAAAAADGwAAAAAAJAAAAAABJAAAAAACJAAAAAADGwAAAAABcQAAAAAAbgAAAAAAbgAAAAACEQAAAAABbgAAAAACEQAAAAADcQAAAAAAVAAAAAACVAAAAAADVAAAAAAAcQAAAAAAGwAAAAADGwAAAAADGwAAAAADGwAAAAAAGwAAAAABcQAAAAAAbgAAAAABEQAAAAABbgAAAAACbgAAAAADbgAAAAAAcQAAAAAAVAAAAAAAVAAAAAABVAAAAAABcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAABVAAAAAADYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAVAAAAAACVAAAAAACVAAAAAABcQAAAAAAYQAAAAAAYQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAcQAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAABVAAAAAACVAAAAAACcQAAAAAAYQAAAAAAYQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAA + version: 6 + 1,-1: + ind: 1,-1 + tiles: VAAAAAADVAAAAAAAVAAAAAADVAAAAAABVAAAAAABcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADVAAAAAAAVAAAAAABVAAAAAADVAAAAAAAVAAAAAAAVAAAAAADVAAAAAACVAAAAAACcQAAAAAAVAAAAAACcQAAAAAAVAAAAAABVAAAAAAAcQAAAAAAcQAAAAAAVAAAAAABVAAAAAAAVAAAAAADVAAAAAAAVAAAAAACVAAAAAAAVAAAAAABVAAAAAABVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACcQAAAAAAcQAAAAAAVAAAAAADcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAABGwAAAAABGwAAAAABGwAAAAAAGwAAAAADcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABcQAAAAAAcQAAAAAAVAAAAAABcQAAAAAAcQAAAAAAGwAAAAACGwAAAAACGwAAAAADGwAAAAABGwAAAAABcQAAAAAAVAAAAAACcQAAAAAAVAAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAADGwAAAAACGwAAAAAAGwAAAAABGwAAAAACcQAAAAAAVAAAAAACcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAADGwAAAAADGwAAAAAAGwAAAAABGwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACVAAAAAABcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAJgAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAABGwAAAAAAGwAAAAACGwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAABGwAAAAABGwAAAAAAGwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAAAcQAAAAAAVAAAAAACcQAAAAAAcQAAAAAAGwAAAAAAGwAAAAADGwAAAAAAGwAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAACcQAAAAAAGwAAAAACcQAAAAAAcQAAAAAAVAAAAAADVAAAAAACVAAAAAAAVAAAAAACVAAAAAADVAAAAAABVAAAAAACVAAAAAADVAAAAAADVAAAAAAAVAAAAAACVAAAAAAAVAAAAAACVAAAAAAAVAAAAAABVAAAAAAD + version: 6 + 1,0: + ind: 1,0 + tiles: VAAAAAACVAAAAAADVAAAAAABVAAAAAACVAAAAAAAVAAAAAACVAAAAAAAVAAAAAABVAAAAAACVAAAAAACVAAAAAADVAAAAAACVAAAAAAAVAAAAAACVAAAAAACVAAAAAAAVAAAAAADVAAAAAACVAAAAAADVAAAAAACVAAAAAAAVAAAAAADVAAAAAACVAAAAAABVAAAAAADVAAAAAABVAAAAAAAVAAAAAADVAAAAAADVAAAAAADVAAAAAABVAAAAAABVAAAAAABVAAAAAACVAAAAAABVAAAAAABVAAAAAABVAAAAAADVAAAAAACVAAAAAABVAAAAAADVAAAAAAAVAAAAAAAVAAAAAADVAAAAAAAVAAAAAADVAAAAAADVAAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAACVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABVAAAAAAAVAAAAAABVAAAAAACVAAAAAADVAAAAAABVAAAAAADVAAAAAADVAAAAAABcQAAAAAAVAAAAAACVAAAAAABVAAAAAABcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACVAAAAAACVAAAAAABVAAAAAABVAAAAAABVAAAAAACVAAAAAADVAAAAAACVAAAAAACVAAAAAAAVAAAAAADVAAAAAADVAAAAAABVAAAAAAAVAAAAAACVAAAAAAAVAAAAAABVAAAAAACVAAAAAADVAAAAAAAVAAAAAABVAAAAAADVAAAAAAAVAAAAAADVAAAAAABVAAAAAABVAAAAAAAVAAAAAABVAAAAAACVAAAAAACVAAAAAADVAAAAAABVAAAAAABVAAAAAADVAAAAAADVAAAAAADVAAAAAAAVAAAAAACVAAAAAADVAAAAAACVAAAAAABVAAAAAACVAAAAAABVAAAAAAAVAAAAAADVAAAAAACVAAAAAADVAAAAAADVAAAAAACVAAAAAABVAAAAAADVAAAAAACVAAAAAAAVAAAAAABVAAAAAADVAAAAAAAVAAAAAAAVAAAAAACVAAAAAAAVAAAAAADVAAAAAAAVAAAAAABVAAAAAADVAAAAAADVAAAAAACVAAAAAAAVAAAAAADVAAAAAACGwAAAAADGwAAAAACGwAAAAACGwAAAAACGwAAAAADVAAAAAACVAAAAAABVAAAAAADVAAAAAAAbgAAAAABVAAAAAAAVAAAAAABVAAAAAABVAAAAAADVAAAAAABVAAAAAACGwAAAAABZAAAAAAAZAAAAAADZAAAAAACGwAAAAAAVAAAAAACVAAAAAADVAAAAAADVAAAAAACbgAAAAADVAAAAAAAVAAAAAABVAAAAAABVAAAAAAAVAAAAAACVAAAAAABGwAAAAACZAAAAAAAZAAAAAABZAAAAAAAGwAAAAACVAAAAAAAVAAAAAADVAAAAAABVAAAAAACbgAAAAABGwAAAAAAGwAAAAACGwAAAAADGwAAAAACGwAAAAADGwAAAAABcQAAAAAAZAAAAAADZAAAAAADZAAAAAAAcQAAAAAAcQAAAAAAVAAAAAACVAAAAAAAVAAAAAACcQAAAAAAGwAAAAACGwAAAAAAGwAAAAABGwAAAAABGwAAAAACGwAAAAAAZAAAAAACZAAAAAACZAAAAAACZAAAAAABZAAAAAADcQAAAAAAVAAAAAACVAAAAAADVAAAAAAAcQAAAAAAGwAAAAAAGwAAAAABGwAAAAADGwAAAAACGwAAAAADGwAAAAADZAAAAAACZAAAAAACZAAAAAADZAAAAAADZAAAAAAAZAAAAAABVAAAAAACVAAAAAABVAAAAAACVAAAAAACGwAAAAACcQAAAAAAcQAAAAAAZAAAAAACZAAAAAACZAAAAAACZAAAAAACZAAAAAABZAAAAAAAZAAAAAAAZAAAAAADcQAAAAAAVAAAAAADVAAAAAABVAAAAAACVAAAAAAB + version: 6 + 0,-2: + ind: 0,-2 + tiles: VAAAAAADVAAAAAABVAAAAAAAcQAAAAAAVAAAAAACVAAAAAACVAAAAAAAVAAAAAADVAAAAAACVAAAAAADVAAAAAADVAAAAAABVAAAAAADVAAAAAACVAAAAAAAcQAAAAAAVAAAAAADVAAAAAABVAAAAAACcQAAAAAAVAAAAAAAVAAAAAAAVAAAAAACVAAAAAADVAAAAAADVAAAAAADVAAAAAACVAAAAAACVAAAAAABVAAAAAAAVAAAAAABcQAAAAAAVAAAAAAAVAAAAAABVAAAAAABcQAAAAAAVAAAAAABVAAAAAAAVAAAAAADVAAAAAAAVAAAAAABVAAAAAABVAAAAAACcQAAAAAAVAAAAAABVAAAAAAAVAAAAAACcQAAAAAAVAAAAAACVAAAAAADVAAAAAADcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAADVAAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABVAAAAAABVAAAAAADVAAAAAACVAAAAAABVAAAAAADVAAAAAABcQAAAAAAVAAAAAACVAAAAAACVAAAAAADVAAAAAABVAAAAAADVAAAAAAAVAAAAAABcQAAAAAAVAAAAAAAVAAAAAADVAAAAAABVAAAAAADVAAAAAADVAAAAAADVAAAAAAAcQAAAAAAVAAAAAAAVAAAAAACVAAAAAACVAAAAAABVAAAAAADVAAAAAAAVAAAAAAAcQAAAAAAVAAAAAACVAAAAAADMAAAAAADSgAAAAAAVAAAAAAAVAAAAAACVAAAAAAAVAAAAAABVAAAAAACVAAAAAAAVAAAAAACVAAAAAABVAAAAAADVAAAAAAAVAAAAAADVAAAAAACVAAAAAADVAAAAAACMAAAAAACSgAAAAAAVAAAAAAAVAAAAAADVAAAAAACVAAAAAACVAAAAAABVAAAAAACVAAAAAADVAAAAAACVAAAAAACVAAAAAAAVAAAAAACVAAAAAADVAAAAAAAVAAAAAADVAAAAAABVAAAAAACVAAAAAAAVAAAAAAAVAAAAAADVAAAAAABVAAAAAADVAAAAAAAVAAAAAAAVAAAAAABVAAAAAADVAAAAAAAVAAAAAABVAAAAAAAVAAAAAADVAAAAAAAVAAAAAABVAAAAAAAVAAAAAABVAAAAAAAVAAAAAABcQAAAAAAVAAAAAABVAAAAAAAVAAAAAAAVAAAAAADVAAAAAACVAAAAAACVAAAAAADcQAAAAAAVAAAAAAAVAAAAAADVAAAAAADVAAAAAAAVAAAAAAAVAAAAAABVAAAAAACcQAAAAAAVAAAAAACVAAAAAABVAAAAAABVAAAAAADVAAAAAADVAAAAAAAVAAAAAABcQAAAAAAVAAAAAACVAAAAAACVAAAAAADcQAAAAAAVAAAAAAAVAAAAAADVAAAAAABcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAVAAAAAACVAAAAAAAcQAAAAAAcQAAAAAAVAAAAAABVAAAAAAAVAAAAAAAcQAAAAAAVAAAAAADVAAAAAACVAAAAAADcQAAAAAAVAAAAAABVAAAAAADVAAAAAADVAAAAAAAVAAAAAAAVAAAAAADVAAAAAADcQAAAAAAVAAAAAAAVAAAAAACVAAAAAADcQAAAAAAVAAAAAAAVAAAAAADVAAAAAADcQAAAAAAVAAAAAADVAAAAAADVAAAAAADcQAAAAAAVAAAAAACVAAAAAADVAAAAAABVAAAAAADVAAAAAADVAAAAAAAVAAAAAAAcQAAAAAAVAAAAAACVAAAAAAAVAAAAAABcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABcQAAAAAAcQAAAAAAVAAAAAABVAAAAAADVAAAAAACcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAADVAAAAAADVAAAAAAD + version: 6 + -1,-2: + ind: -1,-2 + tiles: cQAAAAAAcAAAAAAAcQAAAAAASAAAAAAASAAAAAAASAAAAAAAcQAAAAAASgAAAAAAVAAAAAACSgAAAAAASgAAAAAASgAAAAAASgAAAAAASgAAAAAASgAAAAAAVAAAAAACcQAAAAAAcAAAAAAAcQAAAAAASAAAAAAASAAAAAAASAAAAAAAcQAAAAAASgAAAAAAVAAAAAAASgAAAAAASgAAAAAASgAAAAAASgAAAAAASgAAAAAAcQAAAAAAVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABVAAAAAAAVAAAAAACVAAAAAADVAAAAAAAVAAAAAADVAAAAAACVAAAAAACVAAAAAADVAAAAAACVAAAAAABVAAAAAADcQAAAAAAVAAAAAACVAAAAAADcQAAAAAAVAAAAAACVAAAAAADVAAAAAADVAAAAAACVAAAAAADVAAAAAAAVAAAAAACVAAAAAAAVAAAAAABVAAAAAACVAAAAAAAVAAAAAACVAAAAAABVAAAAAAAVAAAAAABVAAAAAAAVAAAAAAAVAAAAAACVAAAAAAAVAAAAAACVAAAAAADVAAAAAACVAAAAAADVAAAAAABVAAAAAADVAAAAAABVAAAAAADVAAAAAADcQAAAAAAVAAAAAAASgAAAAAAcQAAAAAAVAAAAAABcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADVAAAAAABVAAAAAADcQAAAAAAVAAAAAABVAAAAAABVAAAAAAAVAAAAAADVAAAAAADcQAAAAAASgAAAAAASgAAAAAASgAAAAAASgAAAAAASgAAAAAAcQAAAAAAVAAAAAADVAAAAAABVAAAAAACcQAAAAAAVAAAAAACVAAAAAADVAAAAAAAVAAAAAACVAAAAAACcQAAAAAASgAAAAAAGwAAAAABGwAAAAADGwAAAAACGwAAAAADGwAAAAACVAAAAAABVAAAAAAAVAAAAAACcQAAAAAAVAAAAAAAVAAAAAABVAAAAAAAVAAAAAABVAAAAAABcQAAAAAASgAAAAAAGwAAAAABGwAAAAADGwAAAAAAGwAAAAACGwAAAAAAVAAAAAABcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACVAAAAAACVAAAAAAAVAAAAAADVAAAAAADcQAAAAAASgAAAAAAGwAAAAABGwAAAAADGwAAAAABGwAAAAACGwAAAAADVAAAAAAAVAAAAAABVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAASgAAAAAASgAAAAAASgAAAAAASgAAAAAASgAAAAAAcQAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAcQAAAAAAJgAAAAAAcQAAAAAAcQAAAAAAVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADcQAAAAAAcQAAAAAAVAAAAAACcQAAAAAAcQAAAAAAVAAAAAABcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAVAAAAAABcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAC + version: 6 + -2,-2: + ind: -2,-2 + tiles: VAAAAAADVAAAAAAAVAAAAAADVAAAAAADVAAAAAABVAAAAAAAVAAAAAABVAAAAAABcQAAAAAAVAAAAAADVAAAAAABVAAAAAACcQAAAAAASAAAAAAASAAAAAAASAAAAAAAVAAAAAABVAAAAAACVAAAAAACVAAAAAACVAAAAAACVAAAAAABVAAAAAADVAAAAAACcQAAAAAAVAAAAAAAVAAAAAADVAAAAAABcQAAAAAASAAAAAAASAAAAAAASAAAAAAAVAAAAAADVAAAAAADVAAAAAAAVAAAAAAAVAAAAAACVAAAAAACVAAAAAAAVAAAAAACcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAVAAAAAABVAAAAAABVAAAAAABVAAAAAACVAAAAAACVAAAAAADVAAAAAAAVAAAAAACVAAAAAAAVAAAAAADVAAAAAADcQAAAAAAVAAAAAAAVAAAAAAASgAAAAAAcQAAAAAAVAAAAAADVAAAAAABVAAAAAABVAAAAAAAVAAAAAACVAAAAAADVAAAAAAAVAAAAAABVAAAAAABVAAAAAABVAAAAAACcQAAAAAAVAAAAAADVAAAAAADVAAAAAABcQAAAAAAVAAAAAADVAAAAAABVAAAAAABVAAAAAACVAAAAAADVAAAAAADVAAAAAAAVAAAAAABVAAAAAADVAAAAAACVAAAAAADcQAAAAAAcQAAAAAAVAAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACVAAAAAADAwAAAAAAVAAAAAACAwAAAAAAcQAAAAAAVAAAAAABVAAAAAAAGwAAAAADGwAAAAAAGwAAAAACGwAAAAACGwAAAAACGwAAAAABcQAAAAAAVAAAAAADVAAAAAACAwAAAAAAAwAAAAAAVAAAAAACAwAAAAAAcQAAAAAAVAAAAAADVAAAAAACGwAAAAAAVAAAAAABGwAAAAABVAAAAAABGwAAAAABGwAAAAABcQAAAAAAVAAAAAAAVAAAAAABVAAAAAACAwAAAAAAAwAAAAAAVAAAAAABVAAAAAAAVAAAAAADVAAAAAAAGwAAAAAAGwAAAAACGwAAAAACGwAAAAAAGwAAAAADGwAAAAAAcQAAAAAAVAAAAAAAVAAAAAACAwAAAAAAAwAAAAAAVAAAAAAAAwAAAAAAVAAAAAABVAAAAAABVAAAAAAAGwAAAAADVAAAAAAAGwAAAAAAVAAAAAABGwAAAAACGwAAAAACcQAAAAAAcQAAAAAAVAAAAAABAwAAAAAAAwAAAAAAVAAAAAACVAAAAAADcQAAAAAAVAAAAAAAVAAAAAADGwAAAAAAGwAAAAAAGwAAAAACGwAAAAABGwAAAAAAGwAAAAAAcQAAAAAAVAAAAAAAVAAAAAABcQAAAAAAGwAAAAAAGwAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACVAAAAAABVAAAAAABVAAAAAAAVAAAAAABcQAAAAAAcQAAAAAAVAAAAAACVAAAAAAAcQAAAAAAGwAAAAAAGwAAAAACNAAAAAAANAAAAAAANAAAAAAAcQAAAAAAVAAAAAACGwAAAAACGwAAAAAAVAAAAAABZAAAAAABZAAAAAABcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAAAGwAAAAACGwAAAAABGwAAAAABGwAAAAACGwAAAAAAVAAAAAABVAAAAAAAVAAAAAAAVAAAAAACVAAAAAACZAAAAAACZAAAAAADZAAAAAABcQAAAAAAcQAAAAAAcQAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAAcQAAAAAAGwAAAAACGwAAAAABGwAAAAACGwAAAAAAVAAAAAADZAAAAAABZAAAAAABcQAAAAAAVAAAAAAC + version: 6 + -3,-1: + ind: -3,-1 + tiles: cQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADVAAAAAADVAAAAAADcQAAAAAAVAAAAAADVAAAAAACVAAAAAABcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAABVAAAAAADcAAAAAAAcAAAAAAAcQAAAAAAVAAAAAACVAAAAAACVAAAAAABcQAAAAAAVAAAAAAAVAAAAAACVAAAAAAAVAAAAAADVAAAAAADcQAAAAAAVAAAAAABVAAAAAADVAAAAAACAAAAAAAAcAAAAAAAcQAAAAAAGwAAAAADGwAAAAABGwAAAAACcQAAAAAAGwAAAAADGwAAAAADGwAAAAAAVAAAAAADVAAAAAABcQAAAAAAVAAAAAACVAAAAAABVAAAAAABAAAAAAAAcAAAAAAAGwAAAAADGwAAAAADGwAAAAAAGwAAAAADGwAAAAACGwAAAAABGwAAAAABGwAAAAABVAAAAAABVAAAAAADcQAAAAAAVAAAAAADVAAAAAAAVAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAAAGwAAAAADGwAAAAADVAAAAAADVAAAAAABcQAAAAAAVAAAAAAAVAAAAAADVAAAAAABAAAAAAAAAAAAAAAAcQAAAAAAVAAAAAACVAAAAAACVAAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAABVAAAAAAAVAAAAAACcQAAAAAAVAAAAAACVAAAAAABVAAAAAADAAAAAAAAAAAAAAAAcQAAAAAAGwAAAAABGwAAAAABGwAAAAACGwAAAAABGwAAAAABGwAAAAACGwAAAAAAVAAAAAACVAAAAAAAVAAAAAAAVAAAAAABVAAAAAACVAAAAAACAAAAAAAAAAAAAAAAcQAAAAAAVAAAAAACVAAAAAADVAAAAAACcQAAAAAAGwAAAAABGwAAAAACGwAAAAACVAAAAAAAVAAAAAACcQAAAAAAVAAAAAACVAAAAAACVAAAAAABAAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAGwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADVAAAAAACVAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAGwAAAAADGwAAAAABGwAAAAACGwAAAAABYQAAAAAAVAAAAAADVAAAAAACVAAAAAACGwAAAAAAcQAAAAAAVAAAAAACVAAAAAACVAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAGwAAAAABcQAAAAAAVAAAAAAAVAAAAAABVAAAAAAAVAAAAAABVAAAAAAAVAAAAAABGwAAAAAAcQAAAAAAVAAAAAAAVAAAAAABVAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAGwAAAAACcQAAAAAAVAAAAAABVAAAAAACVAAAAAAAVAAAAAAAVAAAAAACVAAAAAACGwAAAAADcQAAAAAAVAAAAAACVAAAAAADVAAAAAABAAAAAAAAAAAAAAAAGwAAAAACGwAAAAACcQAAAAAAVAAAAAACVAAAAAADVAAAAAABVAAAAAABVAAAAAADVAAAAAAAGwAAAAADcQAAAAAAVAAAAAACVAAAAAACVAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAVAAAAAACVAAAAAABVAAAAAAAVAAAAAADVAAAAAADVAAAAAADGwAAAAAAcQAAAAAAVAAAAAABVAAAAAACVAAAAAACAAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABVAAAAAABVAAAAAAAVAAAAAADVAAAAAACVAAAAAAAGwAAAAAAcQAAAAAAVAAAAAABVAAAAAADVAAAAAAC + version: 6 + -3,0: + ind: -3,0 + tiles: AAAAAAAAAAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAVAAAAAABVAAAAAABVAAAAAADVAAAAAACVAAAAAAAVAAAAAACGwAAAAAAcQAAAAAAVAAAAAABVAAAAAADVAAAAAACAAAAAAAAAAAAAAAAGwAAAAADGwAAAAAAcQAAAAAAVAAAAAABVAAAAAADVAAAAAAAVAAAAAACVAAAAAABVAAAAAACGwAAAAAAcQAAAAAAVAAAAAABVAAAAAACVAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAGwAAAAADcQAAAAAAVAAAAAABVAAAAAABVAAAAAACVAAAAAADVAAAAAACVAAAAAADGwAAAAABcQAAAAAAVAAAAAABVAAAAAACVAAAAAADAAAAAAAAAAAAAAAAcQAAAAAAGwAAAAADcQAAAAAAVAAAAAABVAAAAAADVAAAAAADVAAAAAABVAAAAAACVAAAAAACGwAAAAABcQAAAAAAVAAAAAACVAAAAAAAVAAAAAADAAAAAAAAAAAAAAAAcQAAAAAAGwAAAAACGwAAAAADGwAAAAABGwAAAAAAYQAAAAAAVAAAAAAAVAAAAAADVAAAAAACVAAAAAADcQAAAAAAVAAAAAABVAAAAAACVAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAGwAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABVAAAAAAAVAAAAAACAAAAAAAAAAAAAAAAcQAAAAAAJAAAAAAAVAAAAAADVAAAAAADVAAAAAACVAAAAAAAVAAAAAADVAAAAAABVAAAAAABVAAAAAADVAAAAAABVAAAAAADVAAAAAAAVAAAAAACAAAAAAAAAAAAAAAAcQAAAAAAJAAAAAADVAAAAAABVAAAAAABbQAAAAABbQAAAAAAbQAAAAACbQAAAAACVAAAAAADVAAAAAAAVAAAAAACVAAAAAACVAAAAAACVAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAJAAAAAACJAAAAAAAVAAAAAAAbQAAAAADVAAAAAAAVAAAAAADbQAAAAAAVAAAAAADVAAAAAABVAAAAAABVAAAAAADVAAAAAADVAAAAAACAAAAAAAAAAAAAAAAcQAAAAAAJAAAAAADJAAAAAAAVAAAAAAAbQAAAAAAbQAAAAACbQAAAAABbQAAAAABVAAAAAAAVAAAAAAAVAAAAAABVAAAAAADVAAAAAAAVAAAAAADcAAAAAAAcAAAAAAAcQAAAAAAJAAAAAABJAAAAAABVAAAAAADVAAAAAABVAAAAAABVAAAAAABVAAAAAABVAAAAAACVAAAAAABVAAAAAACVAAAAAACVAAAAAACVAAAAAADcAAAAAAAcAAAAAAAcQAAAAAAJAAAAAAAJAAAAAACVAAAAAACVAAAAAADVAAAAAADVAAAAAACVAAAAAACVAAAAAAAcQAAAAAAGwAAAAACVAAAAAABVAAAAAABVAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAJAAAAAACJAAAAAABJAAAAAADJAAAAAACJAAAAAABJAAAAAAAJAAAAAABJAAAAAACJAAAAAADGwAAAAAAVAAAAAADVAAAAAACVAAAAAABcAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACcQAAAAAAcAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAADSAAAAAAASAAAAAAASAAAAAAAcAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAADSAAAAAAANAAAAAAASAAAAAAA + version: 6 + -3,1: + ind: -3,1 + tiles: cAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAADSAAAAAAASAAAAAAASAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAAANAAAAAAANAAAAAAANAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAGwAAAAABGwAAAAAAGwAAAAADGwAAAAADGwAAAAADGwAAAAAAGwAAAAABGwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAGwAAAAADGwAAAAABGwAAAAAAGwAAAAADGwAAAAABGwAAAAACGwAAAAADGwAAAAADcQAAAAAAcQAAAAAAVAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAAAGwAAAAACGwAAAAACGwAAAAABGwAAAAABGwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwAAAAACGwAAAAABGwAAAAACGwAAAAACGwAAAAABGwAAAAAAGwAAAAAAGwAAAAABGwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAABGwAAAAACGwAAAAABcQAAAAAAGwAAAAAAGwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAVAAAAAABVAAAAAACVAAAAAACVAAAAAABcQAAAAAAGwAAAAABGwAAAAABGwAAAAADGwAAAAACGwAAAAADGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAVAAAAAACVAAAAAACVAAAAAABVAAAAAADcQAAAAAAGwAAAAADGwAAAAADGwAAAAADcQAAAAAAGwAAAAAAGwAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwAAAAAAGwAAAAACGwAAAAADGwAAAAADGwAAAAADGwAAAAABGwAAAAACGwAAAAACGwAAAAACcQAAAAAAGwAAAAAAGwAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAGwAAAAABGwAAAAABGwAAAAACGwAAAAABcQAAAAAAGwAAAAACGwAAAAACGwAAAAADcQAAAAAAVAAAAAACVAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAGwAAAAACGwAAAAAAGwAAAAABGwAAAAACGwAAAAAAGwAAAAABGwAAAAACGwAAAAADGwAAAAABVAAAAAACVAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAGwAAAAACGwAAAAACGwAAAAACGwAAAAACcQAAAAAAGwAAAAABGwAAAAAAGwAAAAACcQAAAAAAVAAAAAABVAAAAAABcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAGwAAAAACSgAAAAAASgAAAAAASgAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAA + version: 6 + -2,1: + ind: -2,1 + tiles: GwAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABcQAAAAAAVAAAAAABcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAVAAAAAACGwAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABcQAAAAAAcQAAAAAAcQAAAAAAbgAAAAABbgAAAAACbgAAAAACbgAAAAADcQAAAAAAVAAAAAADVAAAAAAAcQAAAAAAVAAAAAADcQAAAAAAVAAAAAAAcQAAAAAAVAAAAAADcQAAAAAAVAAAAAADcQAAAAAAbgAAAAABbgAAAAADbgAAAAACbgAAAAADVAAAAAAAVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAVAAAAAADcQAAAAAAcQAAAAAAbgAAAAACbgAAAAACbgAAAAAAbgAAAAACcQAAAAAAVAAAAAACcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABcQAAAAAAcQAAAAAAcQAAAAAAbgAAAAACbgAAAAACbgAAAAAAbgAAAAABcQAAAAAAVAAAAAABcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAbgAAAAAAbgAAAAACbgAAAAADbgAAAAADcQAAAAAAVAAAAAAAGwAAAAABGwAAAAADGwAAAAACcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAAAGwAAAAADGwAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACGwAAAAACGwAAAAACGwAAAAAAcQAAAAAAVAAAAAABcQAAAAAAGwAAAAABGwAAAAAAGwAAAAABcQAAAAAAGwAAAAABGwAAAAABGwAAAAABGwAAAAADcQAAAAAAVAAAAAADGwAAAAABGwAAAAAAGwAAAAABcQAAAAAAVAAAAAACcQAAAAAAGwAAAAABGwAAAAACGwAAAAAAcQAAAAAAGwAAAAAAGwAAAAACGwAAAAABGwAAAAABcQAAAAAAVAAAAAAAGwAAAAACGwAAAAACGwAAAAACcQAAAAAAVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACcQAAAAAAcQAAAAAAGwAAAAACGwAAAAADcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAABVAAAAAACVAAAAAADVAAAAAACVAAAAAAAVAAAAAACVAAAAAABVAAAAAACVAAAAAADVAAAAAABVAAAAAABVAAAAAADVAAAAAABVAAAAAADVAAAAAADVAAAAAAAVAAAAAADVAAAAAACVAAAAAACVAAAAAACVAAAAAADVAAAAAACVAAAAAAAVAAAAAADVAAAAAADVAAAAAADVAAAAAABVAAAAAACVAAAAAAAVAAAAAADVAAAAAADVAAAAAACVAAAAAADVAAAAAABVAAAAAADVAAAAAACVAAAAAADVAAAAAAAVAAAAAABVAAAAAACVAAAAAADVAAAAAABVAAAAAACVAAAAAAAVAAAAAAAVAAAAAADVAAAAAABVAAAAAACVAAAAAADVAAAAAADVAAAAAABVAAAAAACcQAAAAAAcQAAAAAAGwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAADVAAAAAACcQAAAAAAGwAAAAABGwAAAAABcQAAAAAAVAAAAAACVAAAAAAD + version: 6 + -3,-2: + ind: -3,-2 + tiles: GwAAAAADGwAAAAACGwAAAAACGwAAAAADGwAAAAABGwAAAAAAGwAAAAABcQAAAAAAVAAAAAACcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABVAAAAAACVAAAAAADVAAAAAACGwAAAAACGwAAAAABGwAAAAACGwAAAAAAGwAAAAADGwAAAAABGwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACVAAAAAAAVAAAAAACVAAAAAADVAAAAAABGwAAAAADGwAAAAABGwAAAAADGwAAAAAAGwAAAAAAGwAAAAACGwAAAAACcQAAAAAAVAAAAAACcQAAAAAAcQAAAAAAVAAAAAABVAAAAAAAVAAAAAAAVAAAAAADVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABcQAAAAAAVAAAAAAAVAAAAAAAVAAAAAABVAAAAAADVAAAAAADcQAAAAAAcQAAAAAAVAAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAVAAAAAABcQAAAAAAVAAAAAADVAAAAAAAVAAAAAAAVAAAAAACVAAAAAABcQAAAAAAcQAAAAAAVAAAAAABcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABcQAAAAAAVAAAAAACcQAAAAAAcQAAAAAAVAAAAAADVAAAAAADVAAAAAADVAAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACcQAAAAAAcQAAAAAAVAAAAAACVAAAAAADVAAAAAACVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADVAAAAAACVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABcQAAAAAAAwAAAAAAVAAAAAACAwAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAVAAAAAADVAAAAAABVAAAAAABcQAAAAAAVAAAAAAAAwAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABVAAAAAACcQAAAAAAcQAAAAAAAwAAAAAAVAAAAAAAAwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAAwAAAAAAVAAAAAADAwAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAAAcQAAAAAAVAAAAAACVAAAAAACVAAAAAAAcQAAAAAAVAAAAAADAwAAAAAAVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAAAcQAAAAAAVAAAAAAAVAAAAAAAVAAAAAACVAAAAAACVAAAAAAAVAAAAAABAwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAAAcQAAAAAAVAAAAAABVAAAAAACVAAAAAAAVAAAAAAAcQAAAAAAVAAAAAACVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABVAAAAAABVAAAAAAAcQAAAAAAVAAAAAABVAAAAAABVAAAAAADcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAVAAAAAADVAAAAAAAVAAAAAABcQAAAAAAVAAAAAACVAAAAAACVAAAAAAB + version: 6 + -4,-2: + ind: -4,-2 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcQAAAAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcQAAAAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAA + version: 6 + -4,-1: + ind: -4,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcQAAAAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + -3,-3: + ind: -3,-3 + tiles: AAAAAAAAAAAAAAAAcAAAAAAAcQAAAAAASAAAAAAASAAAAAAASAAAAAAAcQAAAAAASAAAAAAAcQAAAAAAGwAAAAABGwAAAAAAGwAAAAAAGwAAAAACGwAAAAACGwAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcQAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAAGwAAAAAAGwAAAAAAGwAAAAADGwAAAAACGwAAAAADGwAAAAADAAAAAAAAAAAAAAAAcAAAAAAAcQAAAAAASAAAAAAASAAAAAAASAAAAAAAcQAAAAAASAAAAAAAcQAAAAAAGwAAAAABGwAAAAADGwAAAAAAGwAAAAABGwAAAAABGwAAAAACAAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAABcQAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAADGwAAAAADGwAAAAACGwAAAAACGwAAAAADGwAAAAAAGwAAAAABGwAAAAABVAAAAAABVAAAAAAAVAAAAAADAAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAADGwAAAAABGwAAAAACGwAAAAADGwAAAAAAGwAAAAACGwAAAAACGwAAAAACVAAAAAADVAAAAAABVAAAAAACAAAAAAAAAAAAAAAAcQAAAAAAGwAAAAACGwAAAAABGwAAAAAAGwAAAAABGwAAAAACGwAAAAABGwAAAAADGwAAAAABGwAAAAAAcQAAAAAAVAAAAAACVAAAAAABVAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAGwAAAAACGwAAAAABGwAAAAABGwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACVAAAAAAAVAAAAAABAAAAAAAAAAAAAAAAcQAAAAAAGwAAAAACGwAAAAAAGwAAAAADGwAAAAABcQAAAAAAGwAAAAABGwAAAAABGwAAAAABcQAAAAAAVAAAAAABVAAAAAACVAAAAAABVAAAAAADAAAAAAAAAAAAAAAAcQAAAAAAGwAAAAACGwAAAAAAGwAAAAAAGwAAAAAAcQAAAAAAGwAAAAACGwAAAAADGwAAAAAAcQAAAAAAVAAAAAADVAAAAAACVAAAAAADVAAAAAABAAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAAAGwAAAAABcQAAAAAAcQAAAAAAGwAAAAABGwAAAAAAGwAAAAAAcQAAAAAAVAAAAAABVAAAAAABVAAAAAADVAAAAAABAAAAAAAAcQAAAAAAGwAAAAAAGwAAAAADGwAAAAAAGwAAAAACGwAAAAAAGwAAAAADGwAAAAACGwAAAAABGwAAAAABcQAAAAAAVAAAAAACVAAAAAACVAAAAAADVAAAAAACcQAAAAAAcQAAAAAAGwAAAAABGwAAAAADGwAAAAADGwAAAAACGwAAAAACGwAAAAADGwAAAAACGwAAAAABGwAAAAAAcQAAAAAAcQAAAAAAVAAAAAADVAAAAAAAVAAAAAADcQAAAAAAcQAAAAAAGwAAAAACGwAAAAAAGwAAAAACGwAAAAADGwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADVAAAAAACVAAAAAAAcQAAAAAAcQAAAAAAGwAAAAACGwAAAAABGwAAAAAAGwAAAAACGwAAAAABcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAADVAAAAAACVAAAAAABVAAAAAACGwAAAAABGwAAAAAAGwAAAAABGwAAAAAAGwAAAAABGwAAAAADGwAAAAADcQAAAAAAVAAAAAADVAAAAAABcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAACVAAAAAACVAAAAAAB + version: 6 + -2,-3: + ind: -2,-3 + tiles: GwAAAAADGwAAAAAAGwAAAAADGwAAAAABGwAAAAABGwAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAcQAAAAAAcQAAAAAAVAAAAAABVAAAAAACcQAAAAAASAAAAAAASAAAAAAAGwAAAAADGwAAAAABcQAAAAAAGwAAAAAAGwAAAAAAGwAAAAABYAAAAAAAYAAAAAAAYAAAAAAAcQAAAAAAcQAAAAAAVAAAAAACVAAAAAAAcQAAAAAASAAAAAAASAAAAAAAGwAAAAABcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADVAAAAAADcQAAAAAASAAAAAAASAAAAAAAcQAAAAAAcQAAAAAAJgAAAAAAVAAAAAABcQAAAAAAVAAAAAACcQAAAAAAVAAAAAACVAAAAAABcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAASAAAAAAASAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAASAAAAAAASAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAAAVAAAAAACcQAAAAAASAAAAAAASAAAAAAAcQAAAAAAVAAAAAABVAAAAAAAVAAAAAACVAAAAAABcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAVAAAAAACVAAAAAACVAAAAAAAcQAAAAAASAAAAAAASAAAAAAAVAAAAAAAVAAAAAABVAAAAAACVAAAAAADVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAASAAAAAAASAAAAAAAVAAAAAADVAAAAAABVAAAAAAAVAAAAAABVAAAAAAAcQAAAAAADwAAAAAADwAAAAAADwAAAAAAcQAAAAAAcQAAAAAAVAAAAAADcQAAAAAAcQAAAAAASAAAAAAASAAAAAAAVAAAAAAAVAAAAAADVAAAAAACVAAAAAAAVAAAAAACcQAAAAAADwAAAAAADwAAAAAADwAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAASAAAAAAASAAAAAAAVAAAAAAAVAAAAAADVAAAAAACVAAAAAAAVAAAAAABcQAAAAAADwAAAAAADwAAAAAADwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAASAAAAAAASAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAADwAAAAAADwAAAAAADwAAAAAAcQAAAAAAVAAAAAADVAAAAAADVAAAAAACcQAAAAAASAAAAAAASAAAAAAAcQAAAAAAVAAAAAACVAAAAAABVAAAAAACVAAAAAADcQAAAAAADwAAAAAADwAAAAAADwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACcQAAAAAASAAAAAAASAAAAAAAcQAAAAAAVAAAAAADVAAAAAABVAAAAAACVAAAAAAAcQAAAAAAGwAAAAABGwAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAADGwAAAAABcQAAAAAAVAAAAAACVAAAAAABVAAAAAADcQAAAAAASAAAAAAASAAAAAAASAAAAAAAVAAAAAACVAAAAAACVAAAAAADVAAAAAACVAAAAAACcQAAAAAAcQAAAAAAGwAAAAACcQAAAAAAVAAAAAAAVAAAAAADVAAAAAABVAAAAAADSAAAAAAASAAAAAAASAAAAAAA + version: 6 + -1,-3: + ind: -1,-3 + tiles: SAAAAAAAcQAAAAAAYAAAAAAAVAAAAAABVAAAAAACSgAAAAAAcQAAAAAADwAAAAAADwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAADGwAAAAADGwAAAAABSAAAAAAAcQAAAAAAYAAAAAAAVAAAAAACVAAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADVAAAAAADVAAAAAADSAAAAAAASAAAAAAAYAAAAAAAVAAAAAADVAAAAAABcQAAAAAAcQAAAAAASAAAAAAASAAAAAAASAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADVAAAAAADVAAAAAACSAAAAAAAcQAAAAAAYAAAAAAAVAAAAAABVAAAAAACSgAAAAAAcQAAAAAASAAAAAAASAAAAAAASAAAAAAAcQAAAAAAVAAAAAABVAAAAAACVAAAAAAAGwAAAAACGwAAAAAASAAAAAAAcQAAAAAAYAAAAAAAVAAAAAAAVAAAAAAASgAAAAAAcQAAAAAASAAAAAAASAAAAAAASAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADSAAAAAAASAAAAAAAYAAAAAAAVAAAAAACVAAAAAACSgAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAVAAAAAABSAAAAAAAcQAAAAAAYAAAAAAAVAAAAAADVAAAAAABSgAAAAAAcQAAAAAASAAAAAAASAAAAAAASAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABSAAAAAAAcQAAAAAAYAAAAAAAVAAAAAADVAAAAAAASgAAAAAAcQAAAAAASAAAAAAASAAAAAAASAAAAAAAcQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAcQAAAAAAVAAAAAACSAAAAAAASAAAAAAAYAAAAAAAVAAAAAADVAAAAAADcQAAAAAAcQAAAAAASAAAAAAASAAAAAAASAAAAAAAcQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAcQAAAAAAVAAAAAACSAAAAAAAcQAAAAAAYAAAAAAAVAAAAAACVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAABcQAAAAAAcQAAAAAAVAAAAAAASAAAAAAAcQAAAAAAYAAAAAAAVAAAAAAAVAAAAAAAVAAAAAADVAAAAAABVAAAAAAAVAAAAAADVAAAAAACcQAAAAAAGwAAAAABGwAAAAADGwAAAAAAcQAAAAAAVAAAAAADSAAAAAAASAAAAAAAYAAAAAAAVAAAAAACVAAAAAABVAAAAAABVAAAAAADVAAAAAACVAAAAAACVAAAAAADcQAAAAAAGwAAAAABGwAAAAADGwAAAAAAGwAAAAADVAAAAAAASAAAAAAAcQAAAAAAYAAAAAAAVAAAAAAAVAAAAAABVAAAAAACVAAAAAADVAAAAAABVAAAAAACVAAAAAAAcQAAAAAAGwAAAAACGwAAAAABGwAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAcQAAAAAAcQAAAAAAVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADcQAAAAAAcAAAAAAAcQAAAAAAcQAAAAAASAAAAAAAcQAAAAAAcQAAAAAASgAAAAAAVAAAAAAASgAAAAAASgAAAAAASgAAAAAASgAAAAAASgAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAcAAAAAAAcQAAAAAASAAAAAAASAAAAAAASAAAAAAAcQAAAAAASgAAAAAAVAAAAAACSgAAAAAASgAAAAAASgAAAAAASgAAAAAASgAAAAAAcQAAAAAAVAAAAAAA + version: 6 + -1,-4: + ind: -1,-4 + tiles: cAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAVAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAGwAAAAADGwAAAAABGwAAAAAAGwAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABVAAAAAADVAAAAAAAVAAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACVAAAAAABVAAAAAAAVAAAAAAAVAAAAAADVAAAAAAAVAAAAAADVAAAAAACVAAAAAADVAAAAAACVAAAAAACVAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAcQAAAAAAVAAAAAADYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAVAAAAAAAVAAAAAACYAAAAAAAYAAAAAAAYAAAAAAAVAAAAAACVAAAAAAAcQAAAAAAVAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAGwAAAAABGwAAAAAAGwAAAAACGwAAAAADGwAAAAAAGwAAAAADGwAAAAACcQAAAAAAVAAAAAAAVAAAAAACVAAAAAADVAAAAAABVAAAAAADVAAAAAADVAAAAAABVAAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAVAAAAAADVAAAAAABcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADcQAAAAAAcQAAAAAAJgAAAAAAVAAAAAADcQAAAAAAVAAAAAABcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACVAAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADcQAAAAAAcQAAAAAAVAAAAAABVAAAAAADcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAASAAAAAAAcQAAAAAAYAAAAAAAVAAAAAABVAAAAAAASgAAAAAAcQAAAAAADwAAAAAADwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAASAAAAAAASAAAAAAAYAAAAAAAVAAAAAABVAAAAAACSgAAAAAASgAAAAAADwAAAAAADwAAAAAAcQAAAAAAcQAAAAAAVAAAAAABcQAAAAAAGwAAAAACGwAAAAACGwAAAAAA + version: 6 + -2,-4: + ind: -2,-4 + tiles: bgAAAAADEQAAAAAGEQAAAAABbgAAAAACEQAAAAAAZAAAAAAAcQAAAAAAZAAAAAAAZAAAAAACcQAAAAAAcQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAcQAAAAAAbgAAAAADbgAAAAACcQAAAAAAbgAAAAABEQAAAAABZAAAAAAAZAAAAAADJgAAAAAAcQAAAAAAZAAAAAAAcQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAcQAAAAAAEQAAAAABbgAAAAACbgAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAEQAAAAAAbgAAAAAAbgAAAAABcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAbgAAAAADEQAAAAAEcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAbgAAAAADEQAAAAAEcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAbgAAAAADEQAAAAAEcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADVAAAAAAAcQAAAAAAVAAAAAAAVAAAAAADcQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAACcQAAAAAAVAAAAAAAVAAAAAABcQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAVAAAAAACVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAACcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADVAAAAAAAcQAAAAAAVAAAAAABcQAAAAAAVAAAAAABcQAAAAAAVAAAAAABVAAAAAADcQAAAAAAcQAAAAAAVAAAAAACGwAAAAACcQAAAAAAVAAAAAABcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAADcQAAAAAAVAAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADVAAAAAABcQAAAAAASAAAAAAASAAAAAAAGwAAAAADGwAAAAADcQAAAAAAGwAAAAAAGwAAAAABGwAAAAABYAAAAAAAYAAAAAAAYAAAAAAAcQAAAAAAcQAAAAAAVAAAAAABVAAAAAACcQAAAAAASAAAAAAASAAAAAAA + version: 6 + -4,-3: + ind: -4,-3 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAA + version: 6 + -3,-4: + ind: -3,-4 + tiles: cAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAEQAAAAACEQAAAAACbgAAAAACbgAAAAAAbgAAAAACAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAbgAAAAADbgAAAAABEQAAAAACcQAAAAAAEQAAAAAEcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAEQAAAAACAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAEQAAAAAAbgAAAAAAbgAAAAAAcQAAAAAAbgAAAAACcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAbgAAAAAAEQAAAAAAEQAAAAAAbgAAAAAAbgAAAAABcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAEQAAAAAAbgAAAAAAEQAAAAAAcQAAAAAAVAAAAAADcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAcQAAAAAAGwAAAAADGwAAAAADGwAAAAABGwAAAAABGwAAAAACGwAAAAACGwAAAAAAGwAAAAABcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAYAAAAAAAcQAAAAAAGwAAAAADGwAAAAABGwAAAAAAGwAAAAAAGwAAAAADGwAAAAABGwAAAAACGwAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAGwAAAAABGwAAAAABGwAAAAABGwAAAAADGwAAAAADGwAAAAAAGwAAAAACGwAAAAADGwAAAAACGwAAAAADGwAAAAAAGwAAAAACcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAGwAAAAADGwAAAAAAGwAAAAABcQAAAAAAGwAAAAADGwAAAAACGwAAAAABGwAAAAADGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAACAAAAAAAAAAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAABGwAAAAAAGwAAAAACGwAAAAABGwAAAAAAGwAAAAAC + version: 6 + -4,-4: + ind: -4,-4 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + -5,-4: + ind: -5,-4 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + -6,-4: + ind: -6,-4 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAA + version: 6 + -6,-3: + ind: -6,-3 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + -5,-3: + ind: -5,-3 + tiles: AAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + -4,-5: + ind: -4,-5 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAA + version: 6 + -3,-5: + ind: -3,-5 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAcQAAAAAAbgAAAAAC + version: 6 + -2,-5: + ind: -2,-5 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAZAAAAAAAZAAAAAABcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAVAAAAAADcQAAAAAAcQAAAAAAZAAAAAABZAAAAAABcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAZAAAAAACZAAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACcQAAAAAAZAAAAAABcQAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAEQAAAAABEQAAAAAGbgAAAAADbgAAAAACbgAAAAADcQAAAAAAZAAAAAAAZAAAAAABcQAAAAAAZAAAAAABcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAA + version: 6 + 2,-1: + ind: 2,-1 + tiles: VAAAAAACVAAAAAAAVAAAAAABcQAAAAAAVAAAAAAAVAAAAAADVAAAAAADcQAAAAAAVAAAAAACVAAAAAACcQAAAAAAVAAAAAACVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABVAAAAAAAVAAAAAAAcQAAAAAAVAAAAAADVAAAAAAAVAAAAAADcQAAAAAAVAAAAAADVAAAAAADcQAAAAAAVAAAAAABVAAAAAADVAAAAAADVAAAAAADVAAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADVAAAAAADVAAAAAACVAAAAAAAVAAAAAABVAAAAAAAVAAAAAABVAAAAAAAVAAAAAADVAAAAAAAVAAAAAADVAAAAAABVAAAAAAAVAAAAAACVAAAAAAAVAAAAAABVAAAAAACVAAAAAABVAAAAAABVAAAAAADVAAAAAAAVAAAAAACVAAAAAADVAAAAAADVAAAAAABVAAAAAADVAAAAAADVAAAAAABVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAABVAAAAAABVAAAAAABVAAAAAACVAAAAAADVAAAAAACVAAAAAAAVAAAAAABVAAAAAAAVAAAAAABVAAAAAADVAAAAAABcQAAAAAAcAAAAAAAAAAAAAAAVAAAAAADVAAAAAAAMAAAAAABVAAAAAACVAAAAAADVAAAAAAAVAAAAAADVAAAAAACVAAAAAACMAAAAAADVAAAAAABVAAAAAABVAAAAAAAcQAAAAAAcAAAAAAAAAAAAAAAVAAAAAAAVAAAAAACMAAAAAAAMAAAAAAAcQAAAAAAMAAAAAABMAAAAAAAcQAAAAAAMAAAAAADMAAAAAABVAAAAAABVAAAAAADVAAAAAACcQAAAAAAcAAAAAAAAAAAAAAAVAAAAAADVAAAAAACMAAAAAACMAAAAAABcQAAAAAAMAAAAAACMAAAAAAAcQAAAAAAMAAAAAAAMAAAAAADVAAAAAADVAAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACVAAAAAABMAAAAAABVAAAAAAAVAAAAAACVAAAAAABVAAAAAACVAAAAAABVAAAAAABMAAAAAACVAAAAAAAVAAAAAABVAAAAAACVAAAAAAAVAAAAAABVAAAAAACVAAAAAAAVAAAAAAAVAAAAAADVAAAAAABVAAAAAAAVAAAAAABVAAAAAADVAAAAAABVAAAAAABVAAAAAADVAAAAAAAVAAAAAAAVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAABVAAAAAABVAAAAAABVAAAAAABVAAAAAAAVAAAAAAAVAAAAAABVAAAAAAAVAAAAAADVAAAAAACVAAAAAABVAAAAAACVAAAAAABVAAAAAADVAAAAAABMAAAAAAAVAAAAAAAVAAAAAACVAAAAAACVAAAAAADbgAAAAABbgAAAAAAbgAAAAADbgAAAAADVAAAAAADVAAAAAABVAAAAAACVAAAAAACcQAAAAAAcQAAAAAAcQAAAAAAMAAAAAADVAAAAAAAVAAAAAACVAAAAAADVAAAAAABbgAAAAACbgAAAAABbgAAAAADbgAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAVAAAAAADVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAbgAAAAADEQAAAAABEQAAAAABcQAAAAAAAAAAAAAAAAAAAAAAVAAAAAAAVAAAAAABVAAAAAACVAAAAAACVAAAAAACcQAAAAAAEQAAAAABEQAAAAAFEQAAAAAFbgAAAAABEQAAAAACbgAAAAAAEQAAAAACcQAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 2,0: + ind: 2,0 + tiles: VAAAAAADVAAAAAABVAAAAAACVAAAAAAAVAAAAAABcQAAAAAAbgAAAAADbgAAAAABbgAAAAADcQAAAAAAbgAAAAAAEQAAAAADEQAAAAACcQAAAAAAAAAAAAAAAAAAAAAAVAAAAAACVAAAAAADVAAAAAACVAAAAAABVAAAAAABcQAAAAAAbgAAAAADEQAAAAAFbgAAAAABcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAVAAAAAABVAAAAAADVAAAAAADVAAAAAABVAAAAAABcQAAAAAAbgAAAAAAbgAAAAAAbgAAAAACbgAAAAABbgAAAAAAbgAAAAABcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAbgAAAAADbgAAAAADbgAAAAABbgAAAAAAbgAAAAAAbgAAAAADcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAABVAAAAAABVAAAAAADVAAAAAAAcQAAAAAAEQAAAAAFbgAAAAACAgAAAAAAbgAAAAABbgAAAAADbgAAAAAAbgAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAACVAAAAAABVAAAAAABVAAAAAAAcQAAAAAAbgAAAAABAgAAAAAAAgAAAAAAbgAAAAAAbgAAAAACbgAAAAABbgAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAACVAAAAAACVAAAAAADVAAAAAABcQAAAAAAbgAAAAAAbgAAAAACbgAAAAADbgAAAAADbgAAAAACbgAAAAABbgAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAACVAAAAAAAVAAAAAADVAAAAAAAbgAAAAAAbgAAAAADbgAAAAADbgAAAAAAbgAAAAAAbgAAAAACbgAAAAACbgAAAAAAcQAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAVAAAAAAAVAAAAAABVAAAAAADVAAAAAADcQAAAAAAbgAAAAACbgAAAAAAbgAAAAADbgAAAAABbgAAAAABbgAAAAABbgAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAbgAAAAAAbgAAAAAAbgAAAAADbgAAAAABcQAAAAAAbgAAAAADbgAAAAADbgAAAAADbgAAAAABbgAAAAACbgAAAAAAbgAAAAABcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAbgAAAAABbgAAAAAAbgAAAAACbgAAAAABcQAAAAAAbgAAAAADbgAAAAABbgAAAAAAbgAAAAAAbgAAAAAAbgAAAAABcQAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAbgAAAAACbgAAAAABbgAAAAACbgAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAbgAAAAABcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABVAAAAAADcQAAAAAAbgAAAAAAbgAAAAABbgAAAAAAbgAAAAACcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAASgAAAAAASgAAAAAASgAAAAAASgAAAAAASgAAAAAAVAAAAAAAVAAAAAABcQAAAAAAbgAAAAAAbgAAAAABbgAAAAACbgAAAAACcQAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAVAAAAAABVAAAAAADVAAAAAABVAAAAAACVAAAAAADVAAAAAACSgAAAAAAcQAAAAAAbgAAAAAAbgAAAAABbgAAAAADbgAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAVAAAAAABVAAAAAACSgAAAAAASgAAAAAAVAAAAAADVAAAAAACSgAAAAAAcQAAAAAAbgAAAAADbgAAAAAAbgAAAAADbgAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAA + version: 6 + 1,-2: + ind: 1,-2 + tiles: SgAAAAAAbQAAAAAAbQAAAAABbQAAAAAAbQAAAAAAbQAAAAABGwAAAAABGwAAAAAAcQAAAAAAVAAAAAABVAAAAAACVAAAAAABVAAAAAAAcQAAAAAAVAAAAAACVAAAAAADSgAAAAAAbQAAAAAAbQAAAAAAbQAAAAADbQAAAAAAbQAAAAABcQAAAAAAGwAAAAACcQAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAACVAAAAAAAVAAAAAADVAAAAAACcQAAAAAAbQAAAAACbQAAAAABbQAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABVAAAAAABVAAAAAABVAAAAAAAcQAAAAAAVAAAAAACVAAAAAADVAAAAAACVAAAAAAAVAAAAAACVAAAAAADVAAAAAACVAAAAAABVAAAAAAAVAAAAAACcQAAAAAAVAAAAAACVAAAAAADVAAAAAACVAAAAAACcQAAAAAAVAAAAAAAVAAAAAAAVAAAAAADVAAAAAAAVAAAAAADVAAAAAADVAAAAAAAVAAAAAAAVAAAAAADVAAAAAABcQAAAAAAVAAAAAAAVAAAAAACVAAAAAAAVAAAAAACcQAAAAAAVAAAAAABVAAAAAABSgAAAAAASgAAAAAASgAAAAAASgAAAAAAcQAAAAAAVAAAAAACVAAAAAACVAAAAAACcQAAAAAAcQAAAAAAVAAAAAABVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAASgAAAAAASgAAAAAASgAAAAAASgAAAAAASgAAAAAAVAAAAAAAVAAAAAADVAAAAAAAVAAAAAAAVAAAAAABVAAAAAADVAAAAAABVAAAAAABVAAAAAACVAAAAAAAVAAAAAADVAAAAAAAVAAAAAABVAAAAAAAVAAAAAAAVAAAAAACVAAAAAABVAAAAAAAVAAAAAACVAAAAAACVAAAAAAAVAAAAAABVAAAAAADVAAAAAABVAAAAAACVAAAAAAAVAAAAAABVAAAAAABVAAAAAAAVAAAAAADVAAAAAABVAAAAAAAVAAAAAAAVAAAAAACVAAAAAADVAAAAAACVAAAAAAAVAAAAAAAVAAAAAACVAAAAAACVAAAAAAAVAAAAAACVAAAAAADVAAAAAABVAAAAAACVAAAAAABVAAAAAABVAAAAAAAVAAAAAACVAAAAAADVAAAAAABcQAAAAAAVAAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAVAAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAACcQAAAAAAVAAAAAADVAAAAAABVAAAAAACVAAAAAABVAAAAAACVAAAAAABVAAAAAAAVAAAAAADVAAAAAACcQAAAAAAVAAAAAACVAAAAAACVAAAAAACVAAAAAABVAAAAAABcQAAAAAAVAAAAAABVAAAAAABVAAAAAABVAAAAAABVAAAAAADVAAAAAACVAAAAAAAVAAAAAAAVAAAAAABcQAAAAAAVAAAAAABVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAACcQAAAAAAVAAAAAADVAAAAAABVAAAAAADVAAAAAAAVAAAAAADVAAAAAACVAAAAAADVAAAAAADVAAAAAAAcQAAAAAAVAAAAAABVAAAAAADVAAAAAABVAAAAAADVAAAAAABcQAAAAAAVAAAAAACVAAAAAADVAAAAAAAVAAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACVAAAAAAAVAAAAAADVAAAAAABVAAAAAABcQAAAAAAVAAAAAABVAAAAAAAVAAAAAADVAAAAAACVAAAAAAAVAAAAAAAVAAAAAADVAAAAAADVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACVAAAAAACVAAAAAACVAAAAAAB + version: 6 + 1,1: + ind: 1,1 + tiles: GwAAAAABGwAAAAAAcQAAAAAAZAAAAAAAZAAAAAADZAAAAAABZAAAAAADZAAAAAACZAAAAAACZAAAAAACZAAAAAABcQAAAAAAVAAAAAABVAAAAAACVAAAAAABVAAAAAAAGwAAAAABGwAAAAADcQAAAAAAZAAAAAADZAAAAAAAZAAAAAACZAAAAAACZAAAAAADZAAAAAACZAAAAAABZAAAAAAAcQAAAAAAVAAAAAADVAAAAAAAVAAAAAAAVAAAAAAAGwAAAAACGwAAAAAAcQAAAAAAZAAAAAABZAAAAAABZAAAAAABZAAAAAADZAAAAAABZAAAAAADZAAAAAAAZAAAAAABcQAAAAAAVAAAAAABVAAAAAABVAAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAZAAAAAACZAAAAAADZAAAAAACZAAAAAABZAAAAAACZAAAAAABcQAAAAAAVAAAAAACVAAAAAABVAAAAAADcQAAAAAAVQAAAAAAVQAAAAAAVQAAAAAAVQAAAAAAcQAAAAAAcQAAAAAAKgAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABVAAAAAABVAAAAAAAcQAAAAAAVQAAAAAAVQAAAAAAVQAAAAAAVQAAAAAAcQAAAAAAKgAAAAAAKgAAAAAAKgAAAAAAKgAAAAAAKgAAAAAAKgAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAVQAAAAAAVQAAAAAAVQAAAAAAVQAAAAAAcQAAAAAAKgAAAAAAKgAAAAAAKgAAAAAAKgAAAAAAKgAAAAAAKgAAAAAAcQAAAAAAVAAAAAAAVAAAAAACVAAAAAACcQAAAAAAVQAAAAAAVQAAAAAAVQAAAAAAVQAAAAAAcQAAAAAAKgAAAAAAKgAAAAAAKgAAAAAAKgAAAAAAKgAAAAAAKgAAAAAAcQAAAAAAVAAAAAADVAAAAAACVAAAAAACVAAAAAADcQAAAAAAVAAAAAABcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABVAAAAAADVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABVAAAAAACVAAAAAADVAAAAAADcQAAAAAAVAAAAAADVAAAAAACVAAAAAADcQAAAAAAcQAAAAAAVAAAAAABVAAAAAAAVAAAAAABcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAADVAAAAAADVAAAAAABcQAAAAAAVAAAAAABVAAAAAADVAAAAAADVAAAAAABcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACVAAAAAADVAAAAAABVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAABVAAAAAACVAAAAAAAcQAAAAAAGwAAAAADGwAAAAAAGwAAAAADGwAAAAACGwAAAAABGwAAAAAAGwAAAAAAGwAAAAABVAAAAAADcQAAAAAAVAAAAAACVAAAAAACVAAAAAADVAAAAAADVAAAAAACcQAAAAAAGwAAAAADGwAAAAABGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAVAAAAAAAcQAAAAAAVAAAAAADVAAAAAADVAAAAAAAVAAAAAAAVAAAAAAAcQAAAAAAGwAAAAACGwAAAAABGwAAAAABGwAAAAADGwAAAAADGwAAAAAAGwAAAAACGwAAAAADGwAAAAACVAAAAAAAVAAAAAABVAAAAAABVAAAAAACVAAAAAADcQAAAAAA + version: 6 + 2,1: + ind: 2,1 + tiles: VAAAAAAAVAAAAAAASgAAAAAASgAAAAAAVAAAAAACVAAAAAAASgAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAVAAAAAAAVAAAAAADSgAAAAAASgAAAAAAVAAAAAACVAAAAAADSgAAAAAAcQAAAAAASgAAAAAASgAAAAAASgAAAAAASgAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAASgAAAAAAVAAAAAABVAAAAAACVAAAAAACVAAAAAAAVAAAAAADVAAAAAACVAAAAAADSgAAAAAASgAAAAAASgAAAAAASgAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASgAAAAAAVAAAAAAASgAAAAAASgAAAAAASgAAAAAAVAAAAAABSgAAAAAAcQAAAAAASgAAAAAASgAAAAAASgAAAAAASgAAAAAAcQAAAAAAcAAAAAAAAAAAAAAAAAAAAAAASgAAAAAAVAAAAAAASgAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAUAAAAAAAKgAAAAAAKgAAAAAAUAAAAAAAUAAAAAAAcQAAAAAAcQAAAAAAVAAAAAABcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADVAAAAAADVAAAAAAAcQAAAAAAUAAAAAAAKgAAAAAAKgAAAAAAUAAAAAAAUAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACVAAAAAABVAAAAAADcQAAAAAAKgAAAAAAKgAAAAAAKgAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABVAAAAAAAVAAAAAAAcQAAAAAAUAAAAAAAUAAAAAAAKgAAAAAAUAAAAAAAUAAAAAAAcQAAAAAAVAAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAABVAAAAAABVAAAAAAAVAAAAAACVAAAAAACVAAAAAACVAAAAAAAVAAAAAACcQAAAAAAGwAAAAACGwAAAAABGwAAAAADcQAAAAAAAAAAAAAAAAAAAAAAVAAAAAABVAAAAAADVAAAAAABVAAAAAADVAAAAAACVAAAAAACVAAAAAACVAAAAAABVAAAAAAAVAAAAAACVAAAAAADVAAAAAAAVAAAAAACcQAAAAAAAAAAAAAAAAAAAAAAGwAAAAAAGwAAAAADGwAAAAADGwAAAAAAGwAAAAACGwAAAAABGwAAAAADGwAAAAADVAAAAAADVAAAAAABVAAAAAABVAAAAAACVAAAAAADcQAAAAAAAAAAAAAAAAAAAAAAVAAAAAADVAAAAAADVAAAAAADVAAAAAADVAAAAAABVAAAAAADVAAAAAAAVAAAAAACVAAAAAACVAAAAAAAVAAAAAACVAAAAAADVAAAAAADcQAAAAAAAAAAAAAAAAAAAAAAVAAAAAABVAAAAAABVAAAAAAAVAAAAAABVAAAAAAAVAAAAAACVAAAAAAAVAAAAAACVAAAAAACcQAAAAAAVAAAAAADVAAAAAADVAAAAAABcQAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAACVAAAAAABcQAAAAAAcQAAAAAAcQAAAAAA + version: 6 + 3,1: + ind: 3,1 + tiles: cAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAA + version: 6 + 3,0: + ind: 3,0 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAA + version: 6 + 4,1: + ind: 4,1 + tiles: cAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 4,0: + ind: 4,0 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 3,2: + ind: 3,2 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 1,2: + ind: 1,2 + tiles: cQAAAAAAGwAAAAADGwAAAAABGwAAAAABGwAAAAABGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAADVAAAAAADcQAAAAAAVAAAAAADVAAAAAAAVAAAAAADVAAAAAADcQAAAAAAcQAAAAAAGwAAAAAAGwAAAAACGwAAAAABGwAAAAAAGwAAAAADGwAAAAADGwAAAAABGwAAAAABVAAAAAABcQAAAAAAVAAAAAABVAAAAAAAVAAAAAACVAAAAAABcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAACGwAAAAAAGwAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACVAAAAAABVAAAAAAAcQAAAAAAcQAAAAAAGwAAAAACGwAAAAABGwAAAAAAGwAAAAAAGwAAAAABcQAAAAAAbgAAAAADbgAAAAADPAAAAAAAPAAAAAAAcQAAAAAAVAAAAAACVAAAAAAAVAAAAAACVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAABGwAAAAADGwAAAAAAcQAAAAAAbgAAAAABbgAAAAAAbgAAAAACbgAAAAACVAAAAAAAVAAAAAACVAAAAAACVAAAAAACcQAAAAAAcQAAAAAAGwAAAAABcQAAAAAAGwAAAAABGwAAAAACGwAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADVAAAAAADVAAAAAADcQAAAAAAGwAAAAACGwAAAAAAcQAAAAAAGwAAAAACGwAAAAABGwAAAAADcQAAAAAAbgAAAAADbgAAAAACbgAAAAADbgAAAAADcQAAAAAAVAAAAAAAVAAAAAABVAAAAAABVAAAAAACGwAAAAAAGwAAAAADGwAAAAACGwAAAAABGwAAAAAAGwAAAAAAcQAAAAAAbgAAAAADbgAAAAADbgAAAAAAbgAAAAAAVAAAAAABVAAAAAABVAAAAAABVAAAAAACcQAAAAAAGwAAAAADGwAAAAADcQAAAAAAGwAAAAABGwAAAAAAGwAAAAABcQAAAAAAbgAAAAAAbgAAAAADPAAAAAAAPAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAABGwAAAAAAGwAAAAACGwAAAAAAGwAAAAABGwAAAAADGwAAAAADcQAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAAAGwAAAAAAGwAAAAADGwAAAAACGwAAAAACGwAAAAADGwAAAAACGwAAAAADcQAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAGwAAAAAAGwAAAAADGwAAAAABGwAAAAAAGwAAAAADGwAAAAABGwAAAAACcQAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAGwAAAAAAGwAAAAAAGwAAAAADGwAAAAACGwAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAA + version: 6 + 0,2: + ind: 0,2 + tiles: VAAAAAAAVAAAAAADVAAAAAAAcQAAAAAAYQAAAAAAYQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAcQAAAAAAcAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAADVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAAAAAAAAAcQAAAAAAPAAAAAAAcQAAAAAADQAAAAAAVAAAAAACVAAAAAADVAAAAAADGwAAAAACGwAAAAABGwAAAAADGwAAAAABGwAAAAACDwAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAPAAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAADVAAAAAADcQAAAAAADwAAAAAADwAAAAAADwAAAAAAGwAAAAABDwAAAAAAcQAAAAAAAAAAAAAAcAAAAAAAcQAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAVAAAAAACVAAAAAABVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAASAAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAVAAAAAABVAAAAAAAVAAAAAADcQAAAAAANAAAAAAASAAAAAAASAAAAAAASAAAAAAANAAAAAAAcQAAAAAAAAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAGwAAAAACcQAAAAAAVAAAAAADVAAAAAADVAAAAAADcQAAAAAANAAAAAAANAAAAAAASAAAAAAANAAAAAAANAAAAAAAcQAAAAAAAAAAAAAAcAAAAAAAcQAAAAAAYAAAAAAAGwAAAAABGwAAAAACVAAAAAADVAAAAAABVAAAAAACcQAAAAAANAAAAAAANAAAAAAASAAAAAAANAAAAAAANAAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAYAAAAAAAGwAAAAACGwAAAAADVAAAAAABVAAAAAABVAAAAAABcQAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAAcQAAAAAAAAAAAAAAcAAAAAAAcQAAAAAAYAAAAAAAGwAAAAACGwAAAAACVAAAAAADVAAAAAADVAAAAAABcQAAAAAANAAAAAAANAAAAAAASAAAAAAANAAAAAAANAAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAACVAAAAAAAVAAAAAADVAAAAAAAcQAAAAAANAAAAAAANAAAAAAASAAAAAAANAAAAAAANAAAAAAAcQAAAAAAcAAAAAAAAAAAAAAAcQAAAAAAbgAAAAACbgAAAAABbgAAAAADVAAAAAAAVAAAAAACVAAAAAADcQAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAAcQAAAAAAcAAAAAAAAAAAAAAAcQAAAAAAbgAAAAAAbgAAAAAAbgAAAAAAVAAAAAADVAAAAAACVAAAAAABcQAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAbgAAAAADbgAAAAAAbgAAAAADVAAAAAABVAAAAAABVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADVAAAAAABVAAAAAADVAAAAAACVAAAAAADcQAAAAAAbgAAAAAAbgAAAAADbgAAAAACbgAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAVAAAAAACVAAAAAAAVAAAAAABMAAAAAABVAAAAAABVAAAAAADbgAAAAAAbgAAAAADbgAAAAAAbgAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAA + version: 6 + 2,2: + ind: 2,2 + tiles: SAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAAcQAAAAAAVAAAAAACVAAAAAABVAAAAAADVAAAAAADVAAAAAADVAAAAAACSAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAAcQAAAAAAVAAAAAABVAAAAAACVAAAAAACcQAAAAAAcQAAAAAAcQAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAAcQAAAAAAVAAAAAABVAAAAAAAVAAAAAAAcQAAAAAAAAAAAAAAAAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAAcQAAAAAAVAAAAAACVAAAAAAAVAAAAAADcQAAAAAAAAAAAAAAAAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAAcQAAAAAAVAAAAAADVAAAAAAAVAAAAAAAcQAAAAAAAAAAAAAAAAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAAcQAAAAAAVAAAAAABVAAAAAACVAAAAAAAcQAAAAAAAAAAAAAAAAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAAcQAAAAAAVAAAAAACVAAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAAcQAAAAAAVAAAAAABVAAAAAACVAAAAAADVAAAAAABVAAAAAACVAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAAcQAAAAAAVAAAAAADVAAAAAADVAAAAAACcQAAAAAAcQAAAAAAcQAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAAcQAAAAAAVAAAAAAAVAAAAAAAVAAAAAACcQAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAADVAAAAAABcQAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAVAAAAAAAVAAAAAACVAAAAAACcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAVAAAAAADVAAAAAADVAAAAAACcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAVAAAAAADVAAAAAABVAAAAAABcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAVAAAAAACVAAAAAABVAAAAAADcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcAAAAAAA + version: 6 + 2,3: + ind: 2,3 + tiles: cAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 1,3: + ind: 1,3 + tiles: cAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 0,3: + ind: 0,3 + tiles: VAAAAAADVAAAAAADVAAAAAACMAAAAAACVAAAAAABcQAAAAAAbgAAAAACbgAAAAACbgAAAAACbgAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAVAAAAAABVAAAAAABVAAAAAAAMAAAAAADVAAAAAACcQAAAAAAbgAAAAADbgAAAAADbgAAAAABbgAAAAABcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAVAAAAAABVAAAAAACVAAAAAACVAAAAAACVAAAAAADcQAAAAAAbgAAAAABbgAAAAAAbgAAAAACbgAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAVAAAAAABVAAAAAACVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAVAAAAAACVAAAAAACVAAAAAACGwAAAAABGwAAAAADGwAAAAAAGwAAAAAAGwAAAAABGwAAAAADGwAAAAADGwAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAVAAAAAAAVAAAAAABVAAAAAABcQAAAAAAGwAAAAACGwAAAAADGwAAAAABGwAAAAADGwAAAAADGwAAAAADGwAAAAABcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAGwAAAAAAGwAAAAAAGwAAAAADGwAAAAADGwAAAAAAGwAAAAADGwAAAAABcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAVAAAAAADVAAAAAABVAAAAAACcQAAAAAAGwAAAAABGwAAAAAAGwAAAAACGwAAAAAAGwAAAAACGwAAAAAAGwAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAVAAAAAACVAAAAAAAVAAAAAAAcQAAAAAAGwAAAAAAGwAAAAABGwAAAAAAGwAAAAABGwAAAAADGwAAAAACcQAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAVAAAAAABcQAAAAAAcQAAAAAAGwAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAVAAAAAABVAAAAAABVAAAAAAAVAAAAAADVAAAAAAAVAAAAAACVAAAAAABVAAAAAACcQAAAAAAcQAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAVAAAAAADVAAAAAACVAAAAAADVAAAAAACVAAAAAADVAAAAAABVAAAAAACVAAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAVAAAAAAAVAAAAAAAVAAAAAADVAAAAAAAVAAAAAABVAAAAAAAVAAAAAACVAAAAAABcQAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAVAAAAAABVAAAAAAAVAAAAAAAVAAAAAADVAAAAAABVAAAAAAAVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 2,-2: + ind: 2,-2 + tiles: VAAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADVAAAAAACVAAAAAAAVAAAAAADVAAAAAAAVAAAAAACVAAAAAABVAAAAAACGwAAAAAAGwAAAAABVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAASgAAAAAASgAAAAAAVAAAAAACSgAAAAAASgAAAAAAcQAAAAAASgAAAAAAVAAAAAABGwAAAAABGwAAAAAAVAAAAAABcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAASgAAAAAASgAAAAAAVAAAAAABSgAAAAAASgAAAAAAcQAAAAAASgAAAAAAVAAAAAABSgAAAAAASgAAAAAAVAAAAAABcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAASgAAAAAASgAAAAAAVAAAAAABSgAAAAAASgAAAAAAcQAAAAAASgAAAAAASgAAAAAASgAAAAAASgAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADcQAAAAAASgAAAAAASgAAAAAAVAAAAAADSgAAAAAASgAAAAAAcQAAAAAASgAAAAAASgAAAAAASgAAAAAASgAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAASgAAAAAAVAAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACVAAAAAABVAAAAAAAVAAAAAACVAAAAAADVAAAAAABVAAAAAAAVAAAAAABVAAAAAAAVAAAAAAAcQAAAAAAbgAAAAABbgAAAAABbgAAAAAAbgAAAAACcQAAAAAAVAAAAAADVAAAAAADVAAAAAACVAAAAAADVAAAAAACVAAAAAABVAAAAAAAVAAAAAADVAAAAAACVAAAAAAAVAAAAAAAbgAAAAACbgAAAAABbgAAAAABbgAAAAACcQAAAAAAVAAAAAAAVAAAAAABVAAAAAADVAAAAAAAVAAAAAABVAAAAAAAVAAAAAADVAAAAAABVAAAAAACVAAAAAAAcQAAAAAAbgAAAAACbgAAAAADbgAAAAABbgAAAAABcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABVAAAAAAAVAAAAAADVAAAAAADVAAAAAAAVAAAAAAAcQAAAAAAbgAAAAAAbgAAAAABbgAAAAACbgAAAAAAcQAAAAAAVAAAAAADVAAAAAADVAAAAAACcQAAAAAAVAAAAAACVAAAAAADVAAAAAACVAAAAAADVAAAAAAAVAAAAAABcQAAAAAAbgAAAAAAbgAAAAACbgAAAAADbgAAAAABcQAAAAAAVAAAAAADVAAAAAACVAAAAAACcQAAAAAAVAAAAAADVAAAAAABVAAAAAABGwAAAAADGwAAAAADGwAAAAADcQAAAAAAbgAAAAAAbgAAAAACbgAAAAADbgAAAAAAcQAAAAAAVAAAAAADVAAAAAACVAAAAAAAcQAAAAAAVAAAAAAAVAAAAAACVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADVAAAAAAAVAAAAAABcQAAAAAAVAAAAAADVAAAAAADVAAAAAADcQAAAAAAVAAAAAADVAAAAAACcQAAAAAAVAAAAAABVAAAAAACVAAAAAACVAAAAAACcQAAAAAAVAAAAAACVAAAAAADVAAAAAADcQAAAAAAVAAAAAABVAAAAAADVAAAAAADcQAAAAAAVAAAAAADVAAAAAACcQAAAAAAVAAAAAAAVAAAAAADVAAAAAADVAAAAAADcQAAAAAAVAAAAAABVAAAAAADVAAAAAABcQAAAAAAVAAAAAAAVAAAAAACVAAAAAAAVAAAAAABVAAAAAAAVAAAAAABcQAAAAAAVAAAAAACVAAAAAAAVAAAAAADVAAAAAAAcQAAAAAA + version: 6 + -1,2: + ind: -1,2 + tiles: VAAAAAACVAAAAAACVAAAAAACVAAAAAADVAAAAAADVAAAAAADVAAAAAADVAAAAAABVAAAAAABVAAAAAABGwAAAAACVAAAAAACcQAAAAAAVAAAAAACcQAAAAAAVAAAAAAAVAAAAAACVAAAAAAAcQAAAAAAVAAAAAADVAAAAAABVAAAAAABVAAAAAAAVAAAAAADVAAAAAAAVAAAAAAAGwAAAAABVAAAAAAAVAAAAAADVAAAAAAAcQAAAAAAVAAAAAADVAAAAAAAVAAAAAACcQAAAAAAVAAAAAACVAAAAAACVAAAAAABVAAAAAADVAAAAAADVAAAAAAAVAAAAAABGwAAAAADVAAAAAABVAAAAAABVAAAAAADcQAAAAAAVAAAAAABVAAAAAADVAAAAAACcQAAAAAAVAAAAAADVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAACcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADcQAAAAAAVAAAAAADcQAAAAAAVAAAAAAAVAAAAAACVAAAAAABcQAAAAAAVAAAAAACVAAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAVAAAAAABVAAAAAAAVAAAAAAAVAAAAAACVAAAAAACcQAAAAAAVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADcQAAAAAAcQAAAAAAVAAAAAACVAAAAAAAcQAAAAAAVAAAAAADVAAAAAADVAAAAAADVAAAAAADVAAAAAAAVAAAAAACVAAAAAAAVAAAAAADVAAAAAACVAAAAAADVAAAAAABGwAAAAADcQAAAAAAVAAAAAACVAAAAAAAcQAAAAAAVAAAAAACGwAAAAACGwAAAAACGwAAAAADVAAAAAADVAAAAAABVAAAAAACVAAAAAADVAAAAAABVAAAAAADVAAAAAACGwAAAAADcQAAAAAAVAAAAAABVAAAAAABcQAAAAAAVAAAAAACGwAAAAACGwAAAAAAGwAAAAACVAAAAAABcQAAAAAAVAAAAAABVAAAAAACVAAAAAADVAAAAAADVAAAAAADGwAAAAADcQAAAAAAVAAAAAACcQAAAAAAcQAAAAAAVAAAAAABVAAAAAAAVAAAAAADVAAAAAABVAAAAAAAcQAAAAAAVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAABGwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAAAGwAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAGwAAAAADGwAAAAADGwAAAAACGwAAAAADGwAAAAABcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAABJgAAAAAAcQAAAAAAVAAAAAADcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAVAAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAVAAAAAACcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAVAAAAAACcQAAAAAAcQAAAAAAbgAAAAABbgAAAAABbgAAAAAAbgAAAAABcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAA + version: 6 + -2,2: + ind: -2,2 + tiles: cQAAAAAAVAAAAAACVAAAAAADVAAAAAAAVAAAAAACZAAAAAADcQAAAAAAVAAAAAADVAAAAAADVAAAAAABcQAAAAAAGwAAAAABGwAAAAABVAAAAAADVAAAAAACVAAAAAABcQAAAAAAZAAAAAADZAAAAAAAZAAAAAACZAAAAAABZAAAAAADcQAAAAAAVAAAAAACVAAAAAABVAAAAAADcQAAAAAAGwAAAAACGwAAAAABcQAAAAAAVAAAAAABVAAAAAACcQAAAAAAZAAAAAACZAAAAAABZAAAAAACZAAAAAAAZAAAAAADcQAAAAAAVAAAAAABVAAAAAACVAAAAAABcQAAAAAAGwAAAAADGwAAAAAAcQAAAAAAVAAAAAADVAAAAAADcQAAAAAAZAAAAAAAZAAAAAACZAAAAAABZAAAAAACZAAAAAABVAAAAAACVAAAAAACVAAAAAABVAAAAAABcQAAAAAAGwAAAAABGwAAAAAAcQAAAAAAVAAAAAAAVAAAAAADcQAAAAAAVAAAAAABVAAAAAADVAAAAAAAVAAAAAAAVAAAAAAAcQAAAAAAVAAAAAABVAAAAAABVAAAAAAAcQAAAAAAGwAAAAABGwAAAAADcQAAAAAAVAAAAAAAVAAAAAADcQAAAAAAZAAAAAAAZAAAAAAAGwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACcQAAAAAAZAAAAAADZAAAAAAAGwAAAAAAcQAAAAAASgAAAAAAGwAAAAABGwAAAAAAGwAAAAABGwAAAAAAGwAAAAADSgAAAAAAcQAAAAAAGwAAAAADVAAAAAAAVAAAAAAAcQAAAAAAZAAAAAADZAAAAAACGwAAAAABcQAAAAAASgAAAAAAGwAAAAABGwAAAAADGwAAAAACGwAAAAADGwAAAAABSgAAAAAAcQAAAAAAGwAAAAADVAAAAAAAVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAASgAAAAAAGwAAAAABGwAAAAACGwAAAAACGwAAAAAAGwAAAAABSgAAAAAAcQAAAAAAGwAAAAADVAAAAAADVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAADGwAAAAABGwAAAAAAGwAAAAABGwAAAAABcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAGwAAAAADGwAAAAAAGwAAAAAAGwAAAAABGwAAAAABGwAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAGwAAAAABGwAAAAABGwAAAAAAGwAAAAACGwAAAAABGwAAAAABcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAGwAAAAADGwAAAAADGwAAAAADGwAAAAABGwAAAAACcQAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAA + version: 6 + -3,2: + ind: -3,2 + tiles: cAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAGwAAAAABSgAAAAAASgAAAAAASgAAAAAASgAAAAAASgAAAAAAGwAAAAACYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAGwAAAAADSgAAAAAASgAAAAAASgAAAAAASgAAAAAASgAAAAAAGwAAAAADcQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAGwAAAAADSgAAAAAASgAAAAAASgAAAAAASgAAAAAASgAAAAAAGwAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAGwAAAAABSgAAAAAASgAAAAAASgAAAAAASgAAAAAASgAAAAAAGwAAAAABYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAGwAAAAAASgAAAAAASgAAAAAASgAAAAAASgAAAAAASgAAAAAAGwAAAAADcQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAGwAAAAAAGwAAAAADGwAAAAACGwAAAAAAGwAAAAABGwAAAAACGwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAADGwAAAAACYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAGwAAAAADGwAAAAABcQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + -1,3: + ind: -1,3 + tiles: cAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAbgAAAAACbgAAAAABbgAAAAADbgAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAbgAAAAADbgAAAAABbgAAAAABbgAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAZAAAAAADZAAAAAADbgAAAAAAbgAAAAACbgAAAAACbgAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAZAAAAAAAZAAAAAADcQAAAAAAcQAAAAAAbgAAAAADcQAAAAAAcQAAAAAAbgAAAAACbgAAAAAAbgAAAAAAcQAAAAAAVAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAZAAAAAADcQAAAAAAbgAAAAAAbgAAAAACbgAAAAADbgAAAAADbgAAAAABbgAAAAACbgAAAAADcQAAAAAAVAAAAAABcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAbgAAAAADbgAAAAAAbgAAAAAAbgAAAAAAbgAAAAADbgAAAAABbgAAAAACcQAAAAAAVAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcQAAAAAAbgAAAAABbgAAAAAAbgAAAAACbgAAAAABbgAAAAAAbgAAAAACbgAAAAABcQAAAAAAVAAAAAADcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAbgAAAAABbgAAAAAAbgAAAAAAbgAAAAAAbgAAAAAAbgAAAAACbgAAAAABcQAAAAAAVAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAbgAAAAAAbgAAAAAAGwAAAAAAGwAAAAADGwAAAAACbgAAAAABbgAAAAACcQAAAAAAVAAAAAACAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAAAcQAAAAAAcQAAAAAAVAAAAAABcQAAAAAAcQAAAAAAVAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAVAAAAAADVAAAAAACVAAAAAAAVAAAAAABVAAAAAADVAAAAAACAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAADVAAAAAAAVAAAAAAAVAAAAAACVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAVAAAAAADVAAAAAADVAAAAAABVAAAAAADVAAAAAABVAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABVAAAAAABVAAAAAADVAAAAAAAVAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAcQAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABVAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAA + version: 6 + -4,0: + ind: -4,0 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAA + version: 6 + -4,1: + ind: -4,1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAA + version: 6 + -4,2: + ind: -4,2 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + -5,1: + ind: -5,1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAA + version: 6 + -2,3: + ind: -2,3 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + -1,4: + ind: -1,4 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAAAAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAAAAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAAAAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcQAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAAAGwAAAAAAGwAAAAADcQAAAAAADwAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAGwAAAAADGwAAAAAAGwAAAAADGwAAAAABGwAAAAABGwAAAAACAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAGwAAAAABGwAAAAABGwAAAAAAGwAAAAADGwAAAAADcQAAAAAAGwAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAGwAAAAACGwAAAAABGwAAAAABGwAAAAACDwAAAAAAcQAAAAAADwAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcQAAAAAAGwAAAAAAGwAAAAABGwAAAAABDwAAAAAAcQAAAAAASAAAAAAAcQAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAGwAAAAADGwAAAAABGwAAAAAADwAAAAAAcQAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAADcQAAAAAADwAAAAAAcQAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAADGwAAAAADcQAAAAAADwAAAAAAcQAAAAAASAAAAAAASAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAACGwAAAAABGwAAAAACDwAAAAAAcQAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAGwAAAAACGwAAAAACGwAAAAAADwAAAAAAcQAAAAAAcAAAAAAAAAAAAAAA + version: 6 + 0,4: + ind: 0,4 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAAAAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAAAAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAAAAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAAcQAAAAAAGwAAAAABGwAAAAABGwAAAAADcQAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAGwAAAAABDwAAAAAAGwAAAAADGwAAAAADGwAAAAABGwAAAAACGwAAAAAAGwAAAAABGwAAAAADcQAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAGwAAAAADDwAAAAAAGwAAAAAAGwAAAAAAcQAAAAAAGwAAAAAAGwAAAAABGwAAAAABGwAAAAABGwAAAAABcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAAcQAAAAAADwAAAAAAGwAAAAADGwAAAAABGwAAAAAAGwAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAASAAAAAAASAAAAAAASAAAAAAAcQAAAAAASAAAAAAAcQAAAAAADwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAASAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcQAAAAAADwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAASAAAAAAASAAAAAAASAAAAAAAAAAAAAAAcAAAAAAAcQAAAAAADwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAAcQAAAAAADwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAASAAAAAAASAAAAAAASAAAAAAAAAAAAAAAcAAAAAAAcQAAAAAADwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAASAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcQAAAAAADwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAA + version: 6 + 0,5: + ind: 0,5 + tiles: cAAAAAAASAAAAAAAcAAAAAAAcQAAAAAASAAAAAAAcQAAAAAADwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcQAAAAAASAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAGwAAAAAAGwAAAAACGwAAAAACGwAAAAABcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAGwAAAAABGwAAAAADGwAAAAABGwAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAGwAAAAADGwAAAAAAGwAAAAABGwAAAAABcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + -1,5: + ind: -1,5 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAGwAAAAABGwAAAAADGwAAAAACDwAAAAAAcQAAAAAASAAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAGwAAAAACGwAAAAADGwAAAAACGwAAAAADGwAAAAABcQAAAAAADwAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAGwAAAAABGwAAAAADGwAAAAADGwAAAAABGwAAAAADcQAAAAAAGwAAAAADAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAGwAAAAADGwAAAAABGwAAAAADGwAAAAADGwAAAAADGwAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAADwAAAAAAGwAAAAAAGwAAAAACcQAAAAAAGwAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 1,4: + ind: 1,4 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 1,5: + ind: 1,5 + tiles: cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 2,-3: + ind: 2,-3 + tiles: VAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAVAAAAAAAcQAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAVAAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAVAAAAAAAcQAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAASAAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAcQAAAAAASAAAAAAAcQAAAAAASAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAAAAAAAAAcAAAAAAAVAAAAAAAcQAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAASAAAAAAAAAAAAAAAcAAAAAAAVAAAAAAAcQAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAcQAAAAAASAAAAAAAcQAAAAAASAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAVAAAAAAAcQAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAZAAAAAAAcQAAAAAAcQAAAAAAZAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAZAAAAAAAcQAAAAAAcQAAAAAAZAAAAAAAcQAAAAAAZAAAAAAAcQAAAAAAcQAAAAAAZAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAZAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAZAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAZAAAAAAAcQAAAAAAZAAAAAAAcQAAAAAAZAAAAAAAZAAAAAAAcQAAAAAAZAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAZAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAZAAAAAAAcQAAAAAAcQAAAAAAZAAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAZAAAAAAAcQAAAAAAcQAAAAAAZAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAASgAAAAAASgAAAAAASgAAAAAASgAAAAAASgAAAAAAcQAAAAAASgAAAAAASgAAAAAASgAAAAAASgAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAASgAAAAAASgAAAAAASgAAAAAASgAAAAAASgAAAAAAcQAAAAAASgAAAAAASgAAAAAASgAAAAAASgAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADcQAAAAAAcQAAAAAASgAAAAAASgAAAAAASgAAAAAASgAAAAAASgAAAAAAcQAAAAAASgAAAAAASgAAAAAAGwAAAAABGwAAAAAC + version: 6 + 3,-3: + ind: 3,-3 + tiles: cAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 3,-2: + ind: 3,-2 + tiles: cQAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 1,-3: + ind: 1,-3 + tiles: cQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAcQAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAcQAAAAAAGwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAJgAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAJgAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABcQAAAAAAcQAAAAAAVAAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACcQAAAAAAVAAAAAABVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAASgAAAAAAbQAAAAADbQAAAAAAbQAAAAAAbQAAAAACbQAAAAAAGwAAAAAAGwAAAAADcQAAAAAAVAAAAAADVAAAAAADVAAAAAAAVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAA + version: 6 + 0,-3: + ind: 0,-3 + tiles: GwAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADVAAAAAABVAAAAAADVAAAAAAAVAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAcQAAAAAAVAAAAAAAVAAAAAABVAAAAAADVAAAAAAAVAAAAAADVAAAAAADVAAAAAACVAAAAAABVAAAAAACcQAAAAAAVAAAAAAAYAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABVAAAAAACVAAAAAAAVAAAAAACVAAAAAAAVAAAAAACVAAAAAACVAAAAAABGwAAAAACcQAAAAAAVAAAAAAAYAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAABGwAAAAACGwAAAAAAGwAAAAABGwAAAAACVAAAAAABVAAAAAAAGwAAAAABGwAAAAAAcQAAAAAAVAAAAAAAYAAAAAAAcQAAAAAAHAAAAAAAcQAAAAAAcQAAAAAAVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAYAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABVAAAAAADVAAAAAADcQAAAAAAVAAAAAABVAAAAAABVAAAAAADVAAAAAAAVAAAAAADcQAAAAAAVAAAAAAAYAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACVAAAAAAAVAAAAAADVAAAAAADVAAAAAADVAAAAAABVAAAAAAAVAAAAAACVAAAAAAAVAAAAAABVAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAcQAAAAAAVAAAAAACVAAAAAADVAAAAAADVAAAAAAAVAAAAAADVAAAAAACVAAAAAABVAAAAAACVAAAAAAAVAAAAAADVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAADVAAAAAAAVAAAAAAAcQAAAAAAVAAAAAADVAAAAAAAVAAAAAABVAAAAAABVAAAAAABcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADVAAAAAABVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAACVAAAAAAAcQAAAAAAVAAAAAAAJgAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAADVAAAAAABcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAADVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAACVAAAAAABcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACVAAAAAAAVAAAAAABVAAAAAACVAAAAAACVAAAAAAAVAAAAAAAVAAAAAABcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAABVAAAAAACVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACVAAAAAADVAAAAAADcQAAAAAAVAAAAAACVAAAAAAAVAAAAAAAVAAAAAACVAAAAAADVAAAAAABVAAAAAAAcQAAAAAAVAAAAAAAVAAAAAAAVAAAAAACcQAAAAAA + version: 6 + 0,-4: + ind: 0,-4 + tiles: YAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAcQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAVAAAAAAAcQAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAGwAAAAABcQAAAAAAGwAAAAADVAAAAAADVAAAAAABcQAAAAAASwAAAAAAGwAAAAADSwAAAAAAcQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAcQAAAAAAGwAAAAADcQAAAAAAGwAAAAAAVAAAAAADVAAAAAACcQAAAAAASwAAAAAAGwAAAAADSwAAAAAAcQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAcQAAAAAAGwAAAAABcQAAAAAAGwAAAAABVAAAAAAAVAAAAAAAcQAAAAAASwAAAAAAGwAAAAACSwAAAAAAcQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAcQAAAAAAVAAAAAAAVAAAAAACVAAAAAACVAAAAAAAVAAAAAABcQAAAAAAcQAAAAAAGwAAAAAAcQAAAAAAcQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAcQAAAAAAVAAAAAACcQAAAAAAGwAAAAACVAAAAAADVAAAAAABcQAAAAAAVAAAAAAAVAAAAAACVAAAAAABcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAGwAAAAACVAAAAAABVAAAAAADVAAAAAAAVAAAAAABVAAAAAABVAAAAAAAcQAAAAAAGwAAAAABGwAAAAABGwAAAAABGwAAAAABGwAAAAACcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAACVAAAAAADVAAAAAACcQAAAAAAVAAAAAACVAAAAAADVAAAAAAAcQAAAAAAGwAAAAAAGwAAAAACGwAAAAAAGwAAAAADGwAAAAABcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAAAVAAAAAADVAAAAAADVAAAAAADVAAAAAACVAAAAAABVAAAAAACcQAAAAAAGwAAAAAAGwAAAAADGwAAAAADGwAAAAADGwAAAAAAcQAAAAAAVAAAAAACcQAAAAAAGwAAAAAAGwAAAAAAGwAAAAADcQAAAAAAVAAAAAADVAAAAAABVAAAAAACVAAAAAADGwAAAAABGwAAAAADGwAAAAABGwAAAAACGwAAAAABcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAACVAAAAAACVAAAAAABcQAAAAAAGwAAAAABGwAAAAAAGwAAAAACGwAAAAABGwAAAAABcQAAAAAAVAAAAAABcQAAAAAAGwAAAAABGwAAAAADGwAAAAACVAAAAAAAVAAAAAABVAAAAAACVAAAAAABcQAAAAAAGwAAAAAAGwAAAAACGwAAAAAAGwAAAAAAGwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAACGwAAAAACGwAAAAABVAAAAAACVAAAAAADVAAAAAACVAAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAGwAAAAABcQAAAAAAGwAAAAACGwAAAAADGwAAAAADcQAAAAAAVAAAAAABVAAAAAAAVAAAAAAAcQAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAcQAAAAAA + version: 6 + 0,-5: + ind: 0,-5 + tiles: cAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAAAcQAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAVAAAAAAAcQAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAASAAAAAAASAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAcQAAAAAAYAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYAAAAAAAcQAAAAAASAAAAAAASAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAcQAAAAAAYAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYAAAAAAAcQAAAAAASAAAAAAASAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAcQAAAAAAYAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYAAAAAAAcQAAAAAASAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAYAAAAAAAYAAAAAAAVAAAAAAAcQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAcQAAAAAASAAAAAAASAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAYAAAAAAAYAAAAAAAVAAAAAAAcQAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAcQAAAAAASAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAYAAAAAAAYAAAAAAAVAAAAAAAcQAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAYAAAAAAAYAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAcQAAAAAA + version: 6 + -1,-5: + ind: -1,-5 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAVAAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcQAAAAAAVAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcQAAAAAAVAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAVAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAASAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAASAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAASAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAVAAAAAAAYAAAAAAAYAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAVAAAAAAAYAAAAAAAYAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAASAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAVAAAAAAAYAAAAAAAYAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAVAAAAAAAYAAAAAAAYAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAA + version: 6 + 1,-4: + ind: 1,-4 + tiles: SAAAAAAASAAAAAAASAAAAAAAcQAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAASAAAAAAASAAAAAAASAAAAAAAcQAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAASAAAAAAASAAAAAAASAAAAAAAcQAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAASAAAAAAASAAAAAAASAAAAAAAcQAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAASAAAAAAASAAAAAAASAAAAAAAcQAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAASAAAAAAASAAAAAAASAAAAAAAcQAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAASAAAAAAASAAAAAAASAAAAAAAcQAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAASAAAAAAASAAAAAAASAAAAAAAcQAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAASAAAAAAASAAAAAAASAAAAAAAcQAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAYAAAAAAAYAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAYAAAAAAAYAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAA + version: 6 + 2,-4: + ind: 2,-4 + tiles: cQAAAAAAcQAAAAAAcAAAAAAAcQAAAAAASAAAAAAASAAAAAAASAAAAAAAcQAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcQAAAAAASAAAAAAASAAAAAAASAAAAAAAcQAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcQAAAAAASAAAAAAASAAAAAAASAAAAAAAcQAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcQAAAAAASAAAAAAASAAAAAAASAAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcQAAAAAASAAAAAAASAAAAAAASAAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcQAAAAAASAAAAAAASAAAAAAASAAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcQAAAAAASAAAAAAASAAAAAAASAAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcQAAAAAASAAAAAAASAAAAAAASAAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcQAAAAAASAAAAAAASAAAAAAASAAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcQAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAVAAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAVAAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAA + version: 6 + 1,-5: + ind: 1,-5 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAASAAAAAAAcQAAAAAAcQAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAASAAAAAAASAAAAAAASAAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAASAAAAAAASAAAAAAASAAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAASAAAAAAASAAAAAAASAAAAAAAcQAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAA + version: 6 + 2,-5: + ind: 2,-5 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAA + version: 6 + 3,-4: + ind: 3,-4 + tiles: cAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 3,-5: + ind: 3,-5 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + -1,-6: + ind: -1,-6 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAA + version: 6 + 0,-6: + ind: 0,-6 + tiles: cAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 0,-7: + ind: 0,-7 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + -1,-7: + ind: -1,-7 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAA + 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: + - node: + color: '#EFB34196' + id: 1 + decals: + 4101: -9,24 + - node: + color: '#EFB341FF' + id: 1 + decals: + 1353: -46,-27 + 5399: 44,-34 + - node: + color: '#EFB34196' + id: 2 + decals: + 4102: -9,23 + - node: + color: '#EFB341FF' + id: 2 + decals: + 1388: -39,-33 + 5400: 45,-34 + - node: + color: '#EFB34196' + id: 3 + decals: + 4103: -9,22 + 7217: -21,-46 + - node: + color: '#EFB341FF' + id: 3 + decals: + 5401: 46,-34 + - node: + color: '#EFB341FF' + id: 4 + decals: + 5402: 47,-34 + - node: + angle: -1.5707963267948966 rad + color: '#FFFFFFFF' + id: Arrows + decals: + 7534: -5,-69 + 7535: -6,-69 + 7546: 2,-63 + 7547: 3,-63 + - node: + color: '#FFFFFFFF' + id: Arrows + decals: + 7537: -5,-72 + 7538: -5,-73 + 7545: 1,-63 + - node: + angle: 1.5707963267948966 rad + color: '#FFFFFFFF' + id: Arrows + decals: + 7536: -6,-71 + 7544: 8,-75 + - node: + angle: 3.141592653589793 rad + color: '#FFFFFFFF' + id: Arrows + decals: + 5036: 1,52 + 5037: 0,52 + 7539: 5,-73 + 7540: 5,-72 + 7541: 5,-71 + 7542: 5,-70 + 7543: 5,-69 + - node: + color: '#FFFFFFFF' + id: Basalt1 + decals: + 347: -5,-2 + 6062: 3,47 + - node: + color: '#FFFFFFFF' + id: Basalt2 + decals: + 346: -7,-3 + 360: 6,-2 + 362: 6,-4 + 3696: 35,-8 + 3697: 40,-8 + 3702: 32,-4 + - node: + color: '#FFFFFFFF' + id: Basalt3 + decals: + 345: -5,-4 + 373: -8,3 + 374: -6,3 + 375: -5,6 + 376: -3,7 + 3701: 32,-4 + 6052: 14,-27 + - node: + color: '#FFFFFFFF' + id: Basalt4 + decals: + 359: 5,-6 + 3695: 37,-8 + 6060: 3,48 + - node: + color: '#FFFFFFFF' + id: Basalt5 + decals: + 361: 4,-6 + 377: -5,5 + 378: -5,6 + 379: -2,8 + 380: 8,3 + 381: 6,4 + 382: 4,7 + 383: 4,8 + 3693: 41,-9 + 3694: 34,-10 + 6053: 14,-26 + 6061: 3,49 + - node: + color: '#FFFFFFFF' + id: Basalt6 + decals: + 348: -3,-7 + - node: + color: '#FFFFFFFF' + id: Basalt7 + decals: + 349: -5,-6 + 357: 8,-3 + 358: 5,-6 + 384: 8,3 + 385: 6,5 + 386: 3,7 + 387: -3,7 + 388: -5,6 + 389: -7,3 + - node: + angle: -1.5707963267948966 rad + color: '#FFFFFFFF' + id: Bot + decals: + 3148: 32,14 + 3149: 32,13 + 3150: 37,13 + 3151: 38,13 + 3152: 38,19 + 3153: 36,19 + 3154: 35,19 + 3155: 34,19 + 3156: 34,20 + - node: + color: '#FFFFFFFF' + id: Bot + decals: + 314: 9,9 + 315: 6,8 + 316: 5,8 + 317: -8,9 + 318: -5,8 + 319: -4,8 + 320: -8,-8 + 321: -7,-5 + 322: -7,-4 + 323: -5,-7 + 324: -4,-7 + 325: 9,-8 + 326: 6,-7 + 327: 5,-7 + 328: 8,-5 + 329: 8,-4 + 367: -4,-3 + 368: -4,-2 + 369: 5,-3 + 370: -4,4 + 371: 5,4 + 372: 5,3 + 471: -10,-7 + 472: -11,-6 + 473: -12,-3 + 474: -13,-3 + 489: -16,9 + 490: -17,9 + 491: -18,9 + 500: -6,16 + 501: -7,16 + 502: -3,16 + 503: -4,16 + 504: -5,16 + 505: 9,19 + 531: 9,17 + 532: 6,19 + 533: 5,19 + 534: 4,19 + 551: 10,11 + 900: -31,4 + 1080: -44,8 + 1081: -44,9 + 1082: -44,10 + 1083: -44,11 + 1153: -42,-4 + 1154: -42,-3 + 1155: -41,-3 + 1156: -41,-4 + 1157: -40,-4 + 1158: -40,-3 + 1159: -39,-3 + 1160: -39,-4 + 1161: -42,1 + 1162: -42,2 + 1163: -41,2 + 1164: -41,1 + 1165: -40,1 + 1166: -40,2 + 1167: -39,2 + 1168: -39,1 + 1179: -43,-1 + 1210: -38,-8 + 1211: -43,-14 + 1212: -45,-14 + 1290: -37,-21 + 1291: -39,-21 + 1292: -37,-16 + 1293: -37,-17 + 1294: -37,-18 + 1418: -29,-21 + 1433: -37,-29 + 1434: -37,-27 + 1539: -31,-36 + 1540: -28,-36 + 1541: -28,-35 + 1542: -36,-39 + 1543: -36,-40 + 1554: -31,-40 + 1555: -31,-39 + 1556: -31,-38 + 1566: -31,-42 + 1567: -30,-42 + 1568: -29,-42 + 1569: -28,-42 + 1649: -26,-34 + 1673: -24,-22 + 1674: -24,-24 + 1675: -22,-24 + 1676: -22,-22 + 1677: -25,-25 + 1678: -21,-19 + 1806: -21,-31 + 1807: -21,-32 + 1808: -21,-34 + 1809: -23,-34 + 1810: -23,-33 + 1876: -9,-33 + 1877: -9,-32 + 1878: -9,-31 + 1879: -3,-34 + 1880: -4,-34 + 1881: -3,-31 + 1882: -4,-31 + 1883: -5,-31 + 1980: -14,-50 + 1981: -14,-47 + 1982: -14,-44 + 1983: -14,-41 + 1984: -14,-38 + 1985: -13,-35 + 1986: -12,-50 + 2090: -9,-22 + 2091: -37,-42 + 2122: -42,-39 + 2260: -35,-46 + 2261: -33,-46 + 2262: -32,-46 + 2263: -40,-53 + 2264: -40,-52 + 2670: -36,6 + 2671: -33,8 + 2767: 28,-5 + 2768: 27,-5 + 2769: 27,-5 + 2770: 28,-3 + 2771: 30,-3 + 3025: 21,12 + 3026: 32,11 + 3027: 15,16 + 3028: 19,17 + 3029: 19,18 + 3030: 21,19 + 3031: 23,19 + 3032: 24,19 + 3033: 24,17 + 3034: 21,21 + 3035: 24,23 + 3036: 25,23 + 3037: 26,23 + 3038: 26,21 + 3039: 25,21 + 3040: 22,23 + 3188: 40,17 + 3189: 41,17 + 3190: 42,17 + 3191: 43,17 + 3215: 43,9 + 3230: 37,24 + 3231: 36,24 + 3232: 36,22 + 3233: 36,21 + 3661: 27,29 + 3662: 27,33 + 3663: 30,39 + 3664: 31,30 + 3665: 32,30 + 3666: 33,30 + 3667: 35,30 + 3668: 36,30 + 3669: 37,30 + 3670: 39,30 + 3671: 31,26 + 3672: 32,26 + 3673: 33,26 + 3674: 35,26 + 3675: 36,26 + 3676: 37,26 + 3677: 42,39 + 3678: 42,43 + 3679: 42,44 + 3680: 42,45 + 3844: 32,-13 + 3845: 33,-13 + 3846: 34,-13 + 3847: 35,-13 + 3848: 39,-13 + 3849: 40,-13 + 3850: 41,-13 + 3851: 42,-13 + 3852: 43,-13 + 3853: 44,-12 + 3854: 41,-4 + 3855: 42,-4 + 3856: 43,-4 + 3857: 44,-5 + 3908: 46,-17 + 3909: 45,-17 + 3910: 45,-19 + 3911: 46,-19 + 4072: -3,18 + 4096: -13,24 + 4097: -10,24 + 4098: -10,23 + 4099: -10,22 + 4100: -4,24 + 4254: -12,34 + 4255: -11,34 + 4256: -11,35 + 4257: -12,35 + 4258: -12,36 + 4259: -9,34 + 4260: -8,34 + 4261: -8,32 + 4262: -10,31 + 4263: -11,31 + 4264: -12,31 + 4290: -17,31 + 4291: -18,31 + 4292: -18,33 + 4293: -18,34 + 4294: -18,35 + 4295: -18,36 + 4296: -15,36 + 4297: -15,33 + 4300: -17,40 + 4301: -16,40 + 4302: -15,40 + 4303: -14,40 + 4304: -13,40 + 4305: -14,38 + 4306: -15,38 + 4307: -16,38 + 4327: -21,31 + 4328: -21,33 + 4329: -21,34 + 4330: -21,35 + 4331: -21,36 + 4350: -21,40 + 4351: -21,39 + 4352: -21,38 + 4353: -27,40 + 4354: -27,39 + 4355: -27,38 + 4371: -27,36 + 4372: -28,36 + 4373: -29,38 + 4405: -43,28 + 4406: -42,28 + 4407: -41,28 + 4408: -40,28 + 4409: -41,30 + 4410: -42,30 + 4411: -43,30 + 4412: -37,39 + 4463: -36,19 + 4464: -36,20 + 4465: -36,21 + 4466: -36,22 + 4558: -27,30 + 4590: -3,40 + 4594: -3,28 + 4595: -6,30 + 4596: -7,30 + 4647: 7,30 + 4648: 8,31 + 4649: 7,32 + 4650: 6,31 + 4791: 13,50 + 4792: 13,49 + 4793: 8,56 + 4794: 7,56 + 4795: 4,56 + 4796: 4,55 + 4835: 4,46 + 4836: 4,48 + 4837: 4,49 + 4838: 4,50 + 5007: -3,58 + 5008: -6,58 + 5009: -6,59 + 5010: -6,60 + 5011: 7,58 + 5012: 7,59 + 5013: 7,60 + 5014: 3,61 + 5015: 3,60 + 5016: -2,61 + 5017: -2,60 + 5018: -3,61 + 5019: 4,61 + 5020: 1,62 + 5021: -1,62 + 5022: 0,62 + 5023: 2,62 + 5135: 6,69 + 5136: -5,69 + 5137: -5,61 + 5138: 6,61 + 5187: 12,-15 + 5188: 12,-16 + 5189: 12,-17 + 5190: 15,-14 + 5191: 17,-14 + 5199: 20,-19 + 5200: 20,-20 + 5201: 20,-21 + 5202: 17,-21 + 5250: 26,-22 + 5251: 26,-21 + 5252: 22,-20 + 5253: 25,-18 + 5254: 26,-18 + 5337: 34,-22 + 5382: 38,-33 + 5383: 42,-33 + 5384: 42,-35 + 5385: 41,-31 + 5386: 41,-28 + 5391: 39,-27 + 5469: 28,-28 + 5470: 28,-29 + 5471: 28,-30 + 5472: 25,-31 + 5473: 25,-30 + 5474: 25,-28 + 5475: 30,-28 + 5476: 31,-28 + 5477: 32,-28 + 5478: 32,-32 + 5479: 30,-30 + 5500: 10,-33 + 5501: 8,-33 + 5502: 7,-33 + 5503: 9,-33 + 5504: 10,-30 + 5505: 9,-30 + 5506: 8,-30 + 5507: 4,-30 + 5508: 4,-31 + 5509: 4,-32 + 5593: 10,-28 + 5903: 11,-31 + 5907: 41,-21 + 5908: 40,-21 + 5909: 39,-21 + 5910: 15,-23 + 5911: 16,-23 + 5912: 20,-23 + 5913: 21,-23 + 5914: 22,-23 + 5915: 23,-23 + 6186: -2,-45 + 6187: 8,-46 + 6231: 2,-49 + 6232: 3,-49 + 6233: 4,-49 + 6315: 4,-57 + 6316: 4,-58 + 6317: 4,-59 + 6318: 4,-60 + 6319: 4,-61 + 6320: 2,-57 + 6321: 2,-56 + 6322: 2,-55 + 6449: -16,-62 + 6450: -19,-60 + 6524: 4,25 + 6532: 11,-66 + 6533: 12,-66 + 6534: 13,-66 + 6550: 10,-63 + 6581: -4,-67 + 6582: -3,-67 + 6583: 3,-67 + 6584: 4,-67 + 6585: 0,-70 + 6586: -5,-63 + 6587: -4,-65 + 6588: 5,-65 + 6589: 3,-75 + 6590: 3,-76 + 6591: -8,-71 + 6592: -8,-69 + 6593: -5,-71 + 6707: 7,-77 + 6708: -7,-77 + 6841: 16,-50 + 6842: 16,-51 + 6843: 16,-52 + 6844: 17,-52 + 6845: 17,-51 + 6846: 17,-50 + 6847: 18,-50 + 6848: 18,-51 + 6849: 18,-52 + 6850: 19,-52 + 6851: 19,-51 + 6852: 19,-50 + 6884: 28,-60 + 6885: 27,-60 + 6886: 27,-59 + 6887: 27,-58 + 6888: 28,-58 + 6889: 30,-58 + 6890: 30,-59 + 6891: 30,-60 + 7023: 22,-49 + 7024: 21,-49 + 7025: 20,-49 + 7045: 35,-52 + 7046: 36,-52 + 7047: 37,-52 + 7048: 38,-52 + 7049: 38,-51 + 7050: 38,-50 + 7051: 38,-49 + 7052: 36,-49 + 7053: 37,-49 + 7054: 35,-49 + 7055: 35,-50 + 7056: 35,-51 + 7057: 36,-51 + 7058: 37,-51 + 7059: 37,-50 + 7060: 36,-50 + 7061: 34,-42 + 7062: 35,-42 + 7063: 37,-43 + 7064: 38,-43 + 7065: 38,-45 + 7069: 34,-44 + 7092: 22,-40 + 7093: 26,-40 + 7094: 27,-40 + 7095: 28,-40 + 7129: 14,-44 + 7130: 14,-46 + 7170: 10,-49 + 7171: 11,-49 + 7172: 12,-49 + 7173: 13,-49 + 7174: 14,-49 + 7313: 15,23 + 7314: 15,22 + 7315: 24,-59 + 7342: 8,-55 + 7343: 41,-15 + 7470: -7,-59 + 7471: -7,-58 + 7472: -7,-57 + 7473: -6,-57 + 7474: -6,-58 + 7475: -6,-59 + 7476: -5,-59 + 7477: -5,-58 + 7478: -5,-57 + 7479: -4,-57 + 7480: -4,-58 + 7481: -4,-59 + 7482: -3,-59 + 7483: -3,-58 + 7484: -3,-57 + 7485: -2,-57 + 7486: -2,-58 + 7487: -2,-59 + 7488: -1,-59 + 7489: -1,-58 + 7490: -1,-57 + 7549: 6,56 + - node: + angle: 1.5707963267948966 rad + color: '#FFFFFFFF' + id: Bot + decals: + 2134: -48,-30 + - node: + angle: 3.141592653589793 rad + color: '#FFFFFFFF' + id: Bot + decals: + 5145: 14,-9 + 5146: 14,-10 + 5147: 14,-11 + 5148: 17,-9 + 5149: 17,-10 + 5150: 17,-11 + 5151: 19,-9 + 5152: 19,-10 + 5153: 19,-11 + - node: + color: '#D4D4D4D9' + id: BotGreyscale + decals: + 4403: -41,31 + 4404: -42,31 + - node: + color: '#FFFFFFFF' + id: BotLeft + decals: + 4643: 8,32 + 4645: 6,30 + - node: + angle: 1.5707963267948966 rad + color: '#FFFFFFFF' + id: BotLeft + decals: + 4644: 6,32 + 4646: 8,30 + - node: + color: '#DE3A3AFF' + id: Box + decals: + 2279: -25,-48 + - node: + color: '#EFB34196' + id: Box + decals: + 7218: -21,-46 + - node: + color: '#EFB341FF' + id: Box + decals: + 1352: -46,-27 + 1387: -39,-33 + - node: + color: '#FFFFFFFF' + id: Box + decals: + 1180: -40,-1 + 1875: -4,-33 + 5255: 30,-23 + 5256: 32,-23 + 5387: 38,-28 + 5388: 38,-29 + 5389: 38,-30 + 5390: 38,-31 + 5594: 6,-28 + 5595: 8,-22 + 5897: 32,-23 + 5898: 30,-23 + - node: + color: '#DE3A3AFF' + id: BoxGreyscale + decals: + 4332: -21,32 + - node: + color: '#FFFFFFFF' + id: BoxGreyscale + decals: + 4482: -31,26 + 5192: 16,-15 + - node: + color: '#FFFFFFFF' + id: BrickTileDarkCornerNe + decals: + 3407: 23,30 + 3417: 19,34 + - node: + color: '#FFFFFFFF' + id: BrickTileDarkCornerNw + decals: + 3402: 25,30 + 3410: 21,30 + 3415: 21,36 + 3423: 17,33 + - node: + color: '#FFFFFFFF' + id: BrickTileDarkCornerSe + decals: + 3408: 23,32 + 3422: 19,29 + 4761: -5,56 + - node: + color: '#FFFFFFFF' + id: BrickTileDarkCornerSw + decals: + 3401: 25,32 + 3409: 21,32 + 3424: 17,29 + 4760: -7,56 + 6512: 6,25 + - node: + color: '#FFFFFFFF' + id: BrickTileDarkEndE + decals: + 3416: 19,36 + - node: + color: '#FFFFFFFF' + id: BrickTileDarkLineE + decals: + 3405: 23,33 + 3406: 23,29 + 3418: 19,33 + 3419: 19,32 + 3420: 19,31 + 3421: 19,30 + - node: + color: '#FFFFFFFF' + id: BrickTileDarkLineN + decals: + 2481: -35,-65 + 2482: -36,-65 + 2483: -37,-65 + 3429: 22,30 + - node: + color: '#FFFFFFFF' + id: BrickTileDarkLineS + decals: + 3425: 18,29 + 3430: 22,32 + 4762: -6,56 + 6507: 8,25 + 6509: 7,25 + - node: + color: '#FFFFFFFF' + id: BrickTileDarkLineW + decals: + 3403: 25,29 + 3404: 25,33 + 3411: 21,29 + 3412: 21,33 + 3413: 21,34 + 3414: 21,35 + 3426: 17,30 + 3427: 17,31 + 3428: 17,32 + 4759: -7,57 + 6514: 6,26 + 6515: 6,27 + - node: + color: '#FFFFFFFF' + id: Bushf1 + decals: + 330: -3,-7 + 331: -3,-6 + 332: -5,-6 + 333: -4,-4 + 334: -6,-4 + 335: -6,-3 + 336: -7,-3 + 337: -8,-2 + 338: -5,-2 + 350: 4,-7 + 351: 4,-5 + 352: 6,-5 + 353: 6,-4 + 354: 6,-3 + 355: 7,-2 + 356: 9,-2 + 390: -7,3 + 391: -6,3 + 392: -6,5 + 393: -5,5 + 394: -4,7 + 395: -2,8 + 396: 4,6 + 397: 3,8 + 398: 5,6 + 399: 6,4 + 400: 7,3 + 401: 9,3 + 402: 7,4 + 3681: 34,-10 + 3682: 35,-8 + 3683: 37,-9 + 3684: 40,-9 + 3685: 41,-8 + 6048: 14,-26 + 6054: 3,49 + - node: + color: '#FFFFFFFF' + id: Bushf2 + decals: + 411: -2,7 + 412: -2,9 + 413: -3,6 + 414: -4,6 + 415: -5,7 + 422: 5,5 + 3699: 32,-3 + 6049: 14,-27 + 6056: 3,47 + - node: + color: '#FFFFFFFF' + id: Bushf3 + decals: + 339: -6,-2 + 340: -6,-5 + 416: -5,3 + 417: -5,4 + 418: -7,4 + 419: 5,7 + 420: 6,7 + 421: 8,4 + 3686: 41,-10 + 3687: 40,-8 + 3688: 34,-8 + 3698: 32,-4 + 6055: 3,48 + - node: + color: '#FFFFFFFF' + id: Bushl1 + decals: + 366: 5,-5 + - node: + color: '#FFFFFFFF' + id: Bushl2 + decals: + 3689: 34,-9 + - node: + color: '#FFFFFFFF' + id: Bushl4 + decals: + 410: -2,6 + 3690: 41,-9 + - node: + angle: -3.141592653589793 rad + color: '#FFFFFFFF' + id: Caution + decals: + 4155: -3,26 + 4156: -3,26 + 4157: -4,26 + 4158: -6,26 + 4159: -7,26 + 4160: -9,26 + 4161: -10,26 + 4162: -12,26 + 4163: -13,26 + 4164: -13,26 + 4165: -21,26 + 4166: -21,26 + 4167: -20,26 + - node: + angle: -1.5707963267948966 rad + color: '#FFFFFFFF' + id: Caution + decals: + 5392: 46,-32 + 5393: 46,-32 + 5394: 46,-32 + 5395: 46,-32 + 5396: 46,-32 + 5397: 46,-32 + 7076: 38,-47 + - node: + color: '#FFFFFFFF' + id: Caution + decals: + 5030: 2,53 + 5031: -1,53 + 6577: 4,-71 + 6578: -4,-71 + - node: + angle: 1.5707963267948966 rad + color: '#FFFFFFFF' + id: Caution + decals: + 2129: -43,-44 + - node: + angle: 3.141592653589793 rad + color: '#FFFFFFFF' + id: Caution + decals: + 5032: 2,58 + 5033: -1,58 + 6579: 4,-69 + 6580: -4,-69 + - node: + color: '#52B4E996' + id: CheckerNESW + decals: + 3236: 37,21 + 3237: 38,21 + 3238: 38,22 + 3239: 37,22 + 3240: 37,23 + 3241: 38,23 + 3242: 36,23 + 3243: 38,24 + 5228: 25,-22 + 5229: 26,-22 + 5230: 26,-21 + 5231: 25,-21 + 5232: 24,-21 + 5233: 23,-21 + 5234: 22,-21 + 5235: 22,-20 + 5236: 23,-20 + 5237: 24,-20 + 5238: 25,-20 + 5239: 26,-20 + 5240: 26,-19 + 5241: 25,-19 + 5242: 24,-19 + 5243: 23,-19 + 5244: 22,-19 + 5245: 22,-18 + 5246: 23,-18 + 5247: 24,-18 + 5248: 25,-18 + 5249: 26,-18 + - node: + color: '#6C6C6C92' + id: CheckerNESW + decals: + 2484: -26,-65 + 2485: -25,-65 + 2486: -25,-64 + 2487: -24,-64 + 2488: -23,-65 + 2489: -23,-63 + 2490: -26,-63 + 2491: -27,-63 + 2492: -27,-64 + - node: + color: '#DE3A3A96' + id: CheckerNESW + decals: + 904: -20,12 + 2888: 15,6 + 2889: 15,7 + 2890: 15,8 + 2891: 15,9 + 2892: 15,10 + 2893: 15,11 + 2894: 16,11 + 2895: 17,11 + 2896: 18,11 + 2897: 19,11 + 2898: 20,11 + 2899: 21,11 + 2900: 21,10 + 2901: 21,9 + 2902: 22,8 + 2903: 23,8 + 2904: 24,8 + 2905: 25,8 + 2906: 26,8 + 2907: 27,9 + 2908: 27,10 + 2909: 27,11 + - node: + color: '#EFB34196' + id: CheckerNESW + decals: + 527: 4,19 + - node: + color: '#52B4E996' + id: CheckerNWSE + decals: + 2813: 26,-14 + - node: + color: '#6C6C6C93' + id: CheckerNWSE + decals: + 2940: 23,10 + 2941: 24,10 + 2942: 25,10 + 2943: 25,11 + 2944: 24,11 + 2945: 23,11 + 2946: 23,12 + 2947: 24,12 + 2948: 25,12 + 2949: 22,13 + 2950: 22,14 + 2951: 23,14 + 2952: 23,13 + 2953: 24,13 + 2954: 24,14 + 2955: 25,13 + 2956: 26,13 + 2957: 26,14 + 2958: 25,14 + 2959: 27,14 + 2960: 26,15 + 2961: 25,15 + 2962: 24,15 + 2963: 23,15 + 2964: 21,15 + 2965: 20,15 + - node: + color: '#79150096' + id: CheckerNWSE + decals: + 2910: 16,12 + 2911: 17,12 + 2912: 18,12 + 2913: 19,12 + 2914: 20,12 + 2915: 21,12 + 2916: 21,13 + 2917: 20,13 + 2918: 19,13 + 2919: 18,13 + 2920: 17,13 + 2921: 16,13 + 2922: 15,13 + 2923: 15,14 + 2924: 16,14 + 2925: 17,14 + 2926: 18,14 + 2927: 19,14 + 2928: 20,14 + 2929: 21,14 + 2930: 16,15 + 2931: 16,16 + 2932: 15,16 + 2933: 15,17 + 2934: 16,17 + 2935: 17,17 + 2936: 17,16 + 2937: 17,18 + 2938: 16,18 + 2939: 15,18 + - node: + color: '#EFB34196' + id: CheckerNWSE + decals: + 2528: -12,-54 + 6261: -1,-54 + - node: + color: '#F9801D87' + id: CheckerNWSE + decals: + 7452: 5,-30 + 7453: 5,-31 + 7454: 5,-32 + 7455: 6,-32 + 7456: 6,-31 + 7457: 6,-30 + 7458: 6,-29 + 7459: 5,-29 + 7460: 7,-31 + 7461: 7,-32 + 7462: 8,-32 + 7463: 8,-31 + 7464: 9,-31 + 7465: 9,-32 + 7466: 10,-32 + 7467: 10,-31 + 7468: 11,-31 + 7469: 11,-32 + - node: + color: '#DE3A3A96' + id: Delivery + decals: + 1216: -44,-8 + 1217: -45,-8 + - node: + color: '#FF0000FF' + id: Delivery + decals: + 7492: -4,-60 + 7493: -4,-60 + 7494: -4,-60 + 7495: -4,-60 + 7496: -4,-60 + - node: + angle: -1.5707963267948966 rad + color: '#FFFFFFFF' + id: Delivery + decals: + 3157: 37,19 + - node: + color: '#FFFFFFFF' + id: Delivery + decals: + 498: -9,15 + 499: -15,15 + 856: -24,-7 + 1018: -34,3 + 1075: -38,11 + 1076: -39,11 + 1077: -40,11 + 1078: -41,11 + 1079: -42,11 + 1169: -40,-6 + 1213: -41,-14 + 1214: -40,-14 + 1215: -39,-14 + 1238: -35,-15 + 1239: -34,-15 + 1240: -33,-15 + 1254: -32,15 + 1255: -36,15 + 1256: -35,17 + 1257: -33,17 + 1435: -36,-34 + 1510: -31,-28 + 1511: -31,-27 + 1544: -36,-38 + 1557: -30,-40 + 1558: -29,-40 + 1559: -28,-40 + 1560: -28,-39 + 1561: -29,-39 + 1562: -30,-39 + 1563: -30,-38 + 1564: -29,-38 + 1565: -28,-38 + 1648: -26,-35 + 1819: -20,-33 + 1978: -11,-40 + 1979: -11,-46 + 2088: -3,-29 + 2089: -4,-29 + 2275: -42,-52 + 2594: -3,-41 + 2595: -3,-40 + 2596: -5,-40 + 2597: -5,-41 + 2598: -5,-38 + 2599: -5,-37 + 2600: -5,-36 + 2601: -4,-36 + 2602: -3,-36 + 2603: -3,-38 + 2672: -33,3 + 2673: -35,3 + 2674: -36,8 + 2675: -36,9 + 2676: -36,10 + 2772: 29,-2 + 3192: 43,19 + 3234: 40,21 + 3235: 40,22 + 3858: 44,-4 + 3859: 44,-6 + 3860: 44,-7 + 3861: 44,-8 + 3862: 44,-9 + 3863: 44,-10 + 3864: 44,-11 + 3865: 44,-13 + 4093: -8,25 + 4094: -3,25 + 4095: -12,25 + 4299: -13,38 + 4337: -12,43 + 4338: -10,41 + 4339: -10,42 + 4340: -10,37 + 4341: -10,38 + 4374: -27,32 + 4460: -43,22 + 4461: -43,26 + 4462: -40,26 + 4559: -28,27 + 4591: -4,37 + 4592: -5,37 + 4593: -6,37 + 4651: 7,31 + 4788: 11,48 + 4789: 12,49 + 4790: 12,50 + 4834: 4,47 + 4875: 1,53 + 4876: 0,53 + 5119: -7,76 + 5596: 7,-28 + 5597: 7,-22 + 5617: 12,-33 + 5618: 19,-27 + 5619: 19,-26 + 5620: 17,-26 + 5621: 17,-27 + 5622: 15,-27 + 5623: 15,-26 + 6234: 5,-50 + 6235: 0,-44 + 6236: -1,-44 + 6446: -18,-62 + 6447: -20,-63 + 6448: -20,-58 + 6535: 14,-66 + 6536: 10,-66 + 6594: -7,-71 + 6595: -7,-69 + 6596: -5,-70 + 6597: -3,-74 + 6598: -1,-74 + 6599: 1,-74 + 6600: 3,-74 + 6601: -3,-76 + 6602: -2,-77 + 6603: -1,-77 + 6604: 1,-77 + 6605: 2,-77 + 6606: 4,-76 + 6607: 0,-65 + 6608: -4,-66 + 6609: -3,-66 + 6610: 3,-66 + 6611: 4,-66 + 6612: -1,-67 + 6613: 1,-67 + 6614: -5,-64 + 6615: -3,-65 + 6870: 23,-64 + 6871: 23,-63 + 6872: 23,-62 + 6873: 27,-61 + 6874: 31,-62 + 6875: 28,-59 + 6876: 30,-56 + 6877: 24,-53 + 6878: 24,-52 + 6879: 24,-51 + 6880: 26,-53 + 6881: 23,-58 + 6882: 20,-51 + 6883: 20,-52 + 7016: 22,-60 + 7017: 28,-65 + 7018: 32,-64 + 7019: 32,-62 + 7020: 32,-60 + 7021: 32,-58 + 7022: 32,-56 + 7041: 34,-49 + 7042: 34,-50 + 7043: 34,-51 + 7044: 34,-52 + 7066: 38,-46 + 7067: 36,-46 + 7068: 35,-47 + 7077: 16,-39 + 7131: 13,-43 + 7132: 13,-47 + 7316: 26,-57 + 7317: 28,-56 + 7318: 28,-62 + 7319: 29,-62 + 7320: 22,-57 + 7321: 26,-65 + 7325: 30,-55 + 7327: 28,-53 + 7328: 31,-54 + 7330: 30,-61 + 7331: 25,-61 + 7336: 31,-58 + 7337: 24,-64 + 7338: 32,-54 + 7491: -4,-60 + 7497: -6,-59 + 7498: -6,-58 + 7499: -6,-57 + 7500: -5,-57 + 7501: -5,-58 + 7502: -5,-59 + 7503: -4,-59 + 7504: -4,-58 + 7505: -4,-57 + 7506: -3,-57 + 7507: -3,-58 + 7508: -3,-59 + 7509: -2,-59 + 7510: -2,-58 + 7511: -2,-57 + 7525: 32,24 + 7526: 34,24 + 7527: 34,22 + 7528: 32,22 + - node: + angle: 1.5707963267948966 rad + color: '#FFFFFFFF' + id: Delivery + decals: + 2130: -45,-44 + 2132: -48,-35 + - node: + angle: 3.141592653589793 rad + color: '#FFFFFFFF' + id: Delivery + decals: + 4561: -33,26 + - node: + color: '#EFB341FF' + id: DeliveryGreyscale + decals: + 6303: 6,-61 + 6304: 7,-61 + 6305: 8,-61 + - node: + color: '#52B4E996' + id: DiagonalOverlay + decals: + 6834: 12,-43 + 6835: 12,-44 + 6836: 13,-44 + 6837: 14,-43 + 7127: 14,-44 + 7128: 13,-43 + - node: + color: '#DE3A3A96' + id: DiagonalOverlay + decals: + 6838: 12,-47 + 6839: 12,-46 + 6840: 14,-47 + 7124: 13,-47 + 7125: 13,-46 + 7126: 14,-46 + - node: + color: '#FFFFFFFF' + id: Dirt + decals: + 7377: -42,-23 + 7378: -44,-24 + 7379: -48,-17 + 7380: -48,-20 + 7381: -45,-22 + 7382: -45,-19 + 7383: -46,-18 + 7384: -42,-16 + 7385: -41,-18 + 7386: -48,-22 + 7387: -49,-20 + 7388: -49,-17 + 7389: -47,-24 + 7438: -41,-21 + 7439: -42,-20 + 7440: -43,-18 + 7441: -44,-18 + 7442: -42,-17 + 7443: -47,-18 + 7444: -49,-16 + 7445: -49,-22 + 7446: -49,-23 + 7447: -47,-23 + 7448: -47,-23 + 7449: -45,-24 + 7450: -45,-23 + 7451: -41,-24 + - node: + color: '#A4610696' + id: DirtHeavy + decals: + 620: -14,-11 + 621: -13,-11 + 622: -14,-10 + 623: -13,-10 + 624: -12,-11 + 625: -12,-11 + 626: -13,-9 + 627: -12,-10 + 628: -11,-11 + 629: -10,-11 + 630: -11,-9 + 631: -11,-9 + 632: -11,-11 + 633: -12,-11 + 634: -13,-11 + 635: -14,-9 + 636: -13,-10 + 637: -11,-9 + 638: -11,-9 + 639: -14,-10 + 640: -11,-10 + 641: -11,-10 + 642: -10,-10 + - node: + color: '#FFFFFFFF' + id: DirtHeavy + decals: + 423: -4,3 + 424: -1,-5 + 425: -1,-5 + 426: -1,-6 + 427: -1,-8 + 428: -1,-8 + 429: -1,-7 + 430: 2,-8 + 431: 2,-7 + 432: 2,-8 + 433: 2,-8 + 434: 2,-8 + 435: 2,-6 + 436: 2,-5 + 437: 2,-5 + 438: 2,-5 + 439: 8,9 + 440: 8,9 + 441: 8,9 + 442: 8,9 + 443: 7,-8 + 444: 7,-8 + 445: 7,-8 + 446: 7,-8 + 447: -14,5 + 448: -14,5 + 449: -13,5 + 450: -13,4 + 451: -12,5 + 452: -12,6 + 453: -12,6 + 558: 9,-10 + 559: 9,-10 + 560: 9,-11 + 561: 9,-11 + 562: 9,-11 + 563: 9,-11 + 564: 8,-11 + 565: 8,-11 + 566: 8,-11 + 567: 15,-5 + 568: 15,-5 + 569: 15,-5 + 570: 14,-5 + 571: 14,-5 + 572: 14,-4 + 573: 11,-7 + 574: 11,-7 + 575: 12,-7 + 576: 12,-7 + 577: 15,-7 + 578: 15,-7 + 579: 16,-7 + 580: 15,-7 + 581: 13,-7 + 582: 16,-5 + 583: 16,-5 + 584: 16,-4 + 585: 16,-4 + 593: 8,-13 + 594: 9,-16 + 595: 5,-16 + 596: 5,-16 + 597: 6,-16 + 598: 6,-16 + 599: 6,-17 + 600: 8,-16 + 601: 8,-16 + 605: -7,-11 + 606: -7,-11 + 607: -8,-11 + 608: -8,-11 + 609: -8,-10 + 610: -8,-10 + 611: -6,-14 + 612: -6,-14 + 613: -6,-14 + 614: -8,-13 + 615: -8,-13 + 645: -4,-19 + 646: -4,-19 + 647: -5,-17 + 648: -5,-17 + 649: -6,-18 + 650: -7,-19 + 651: -7,-19 + 652: -6,-17 + 653: -5,-17 + 654: -4,-19 + 655: -3,-19 + 656: -3,-18 + 657: -3,-17 + 660: -10,-20 + 661: -11,-20 + 662: -11,-19 + 663: -10,-19 + 664: -10,-19 + 665: -9,-20 + 666: -9,-20 + 667: -11,-19 + 668: -11,-19 + 675: -13,-18 + 676: -14,-18 + 677: -15,-18 + 678: -16,-18 + 679: -17,-18 + 680: -17,-17 + 681: -17,-17 + 682: -16,-16 + 683: -15,-17 + 684: -14,-17 + 685: -14,-16 + 686: -13,-16 + 687: -15,-16 + 688: -15,-16 + 689: -17,-16 + 690: -17,-16 + 691: -17,-16 + 692: -17,-16 + 701: -9,-17 + 702: -10,-17 + 703: -10,-17 + 704: -11,-17 + 705: -11,-16 + 706: -11,-16 + 707: -11,-15 + 708: -11,-14 + 709: -11,-14 + 710: -12,-13 + 711: -13,-13 + 712: -14,-13 + 713: -15,-13 + 714: -15,-13 + 715: -15,-13 + 716: -15,-14 + 717: -15,-14 + 718: -14,-14 + 719: -12,-14 + 720: -12,-14 + 721: -16,-13 + 725: -16,-12 + 726: -16,-12 + 727: -16,-11 + 728: -16,-10 + 729: -16,-9 + 730: -17,-9 + 731: -17,-9 + 738: -19,-15 + 739: -19,-14 + 740: -20,-14 + 741: -21,-14 + 742: -21,-15 + 743: -21,-13 + 744: -21,-13 + 745: -19,-13 + 746: -18,-13 + 747: -18,-14 + 748: -18,-13 + 749: -18,-12 + 750: -19,-13 + 751: -20,-13 + 752: -20,-12 + 753: -21,-12 + 754: -21,-12 + 755: -21,-12 + 756: -20,-12 + 761: -23,-15 + 762: -23,-14 + 763: -24,-14 + 764: -25,-14 + 765: -25,-15 + 766: -25,-13 + 767: -23,-13 + 768: -25,-12 + 769: -25,-13 + 770: -24,-12 + 771: -23,-12 + 774: -25,-10 + 775: -25,-9 + 776: -25,-9 + 777: -25,-9 + 778: -26,-9 + 779: -25,-9 + 780: -24,-9 + 781: -24,-9 + 782: -23,-10 + 783: -22,-10 + 784: -22,-9 + 785: -21,-9 + 786: -20,-10 + 787: -19,-10 + 788: -19,-9 + 789: -18,-9 + 790: -18,-9 + 791: -20,-9 + 792: -20,-9 + 793: -19,-10 + 794: -18,-9 + 795: -18,-9 + 796: -21,-9 + 797: -21,-9 + 798: -21,-8 + 799: -21,-8 + 800: -21,-8 + 801: -20,-8 + 810: -21,-8 + 811: -20,-8 + 812: -20,-7 + 813: -20,-7 + 814: -21,-7 + 815: -21,-7 + 816: -20,-6 + 817: -20,-6 + 818: -20,-5 + 819: -21,-5 + 820: -21,-5 + 821: -22,-5 + 822: -22,-5 + 823: -22,-4 + 824: -21,-4 + 825: -21,-4 + 826: -20,-4 + 827: -20,-3 + 828: -21,-3 + 829: -22,-3 + 830: -22,-3 + 910: -21,4 + 911: -21,4 + 912: -22,4 + 913: -22,4 + 914: -22,5 + 915: -21,5 + 916: -20,5 + 917: -21,6 + 918: -21,6 + 919: -21,7 + 920: -20,7 + 921: -20,8 + 922: -21,8 + 923: -22,8 + 924: -22,9 + 925: -22,9 + 926: -23,9 + 927: -23,9 + 928: -24,9 + 929: -24,10 + 930: -24,10 + 931: -24,11 + 932: -23,11 + 933: -23,12 + 934: -21,11 + 935: -21,11 + 936: -21,11 + 937: -21,12 + 938: -22,12 + 939: -23,12 + 940: -24,12 + 941: -22,11 + 942: -20,11 + 943: -20,10 + 944: -21,10 + 945: -21,9 + 946: -21,9 + 947: -20,10 + 948: -21,12 + 949: -21,12 + 950: -20,12 + 951: -22,12 + 952: -23,12 + 953: -24,11 + 954: -24,12 + 955: -24,12 + 956: -23,11 + 957: -23,11 + 969: -31,10 + 970: -31,11 + 971: -31,11 + 972: -31,12 + 973: -30,12 + 974: -30,10 + 975: -29,11 + 976: -29,12 + 977: -29,12 + 978: -29,13 + 979: -28,13 + 980: -27,11 + 981: -27,10 + 982: -27,10 + 983: -28,12 + 984: -28,13 + 985: -27,13 + 986: -26,12 + 987: -26,10 + 988: -26,10 + 989: -26,9 + 990: -26,11 + 991: -27,13 + 992: -28,12 + 993: -29,10 + 994: -30,11 + 995: -30,12 + 996: -29,13 + 997: -27,12 + 998: -27,13 + 999: -27,12 + 1000: -26,11 + 1001: -26,10 + 1002: -26,9 + 1301: -39,-25 + 1302: -38,-25 + 1303: -37,-25 + 1304: -37,-24 + 1305: -38,-24 + 1306: -39,-24 + 1307: -39,-23 + 1308: -38,-23 + 1309: -37,-24 + 1310: -37,-24 + 1311: -39,-23 + 1312: -38,-23 + 1313: -38,-23 + 1314: -37,-23 + 1315: -38,-23 + 1316: -39,-24 + 1317: -38,-24 + 1318: -37,-24 + 1319: -37,-23 + 1320: -37,-23 + 1322: -43,-28 + 1323: -43,-27 + 1324: -43,-27 + 1325: -42,-26 + 1326: -42,-27 + 1327: -41,-27 + 1328: -41,-27 + 1329: -42,-27 + 1330: -41,-26 + 1331: -41,-27 + 1332: -40,-28 + 1333: -39,-27 + 1334: -39,-26 + 1335: -40,-26 + 1336: -40,-27 + 1337: -40,-28 + 1338: -40,-28 + 1339: -39,-27 + 1340: -39,-26 + 1341: -40,-27 + 1342: -41,-28 + 1343: -41,-28 + 1344: -41,-27 + 1345: -41,-27 + 1346: -41,-26 + 1347: -42,-26 + 1348: -42,-27 + 1355: -46,-28 + 1356: -46,-27 + 1357: -46,-27 + 1359: -46,-26 + 1360: -45,-26 + 1361: -45,-27 + 1362: -45,-27 + 1363: -46,-28 + 1366: -46,-27 + 1367: -46,-27 + 1368: -44,-27 + 1369: -44,-27 + 1370: -44,-27 + 1371: -44,-27 + 1377: -40,-29 + 1378: -39,-29 + 1379: -39,-29 + 1380: -39,-29 + 1381: -40,-29 + 1394: -39,-34 + 1395: -38,-34 + 1396: -38,-33 + 1397: -38,-33 + 1398: -38,-34 + 1399: -39,-34 + 1400: -39,-34 + 1401: -39,-34 + 1402: -40,-34 + 1403: -40,-33 + 1404: -40,-33 + 1405: -40,-33 + 1406: -40,-32 + 1407: -39,-32 + 1408: -39,-31 + 1409: -39,-31 + 1410: -40,-31 + 1411: -39,-30 + 1412: -39,-30 + 1413: -39,-29 + 1414: -40,-30 + 1415: -40,-31 + 1416: -40,-32 + 1417: -40,-32 + 1512: -36,-32 + 1513: -36,-31 + 1514: -36,-29 + 1515: -36,-27 + 1516: -34,-27 + 1517: -33,-27 + 1518: -33,-28 + 1519: -33,-29 + 1520: -35,-27 + 1521: -36,-28 + 1522: -37,-30 + 1523: -37,-28 + 1524: -36,-27 + 1525: -34,-31 + 1526: -34,-32 + 1527: -35,-32 + 1528: -33,-32 + 1529: -33,-30 + 1530: -35,-33 + 1531: -34,-35 + 1532: -35,-34 + 1533: -35,-34 + 1534: -35,-34 + 1535: -34,-31 + 1536: -36,-31 + 1537: -36,-29 + 1538: -36,-30 + 1608: -34,-37 + 1609: -34,-38 + 1610: -34,-40 + 1611: -33,-42 + 1612: -34,-44 + 1613: -35,-44 + 1614: -35,-41 + 1615: -31,-41 + 1616: -30,-42 + 1617: -29,-41 + 1618: -31,-39 + 1619: -30,-38 + 1620: -28,-39 + 1621: -29,-41 + 1622: -29,-39 + 1683: -27,-24 + 1684: -26,-23 + 1685: -25,-22 + 1686: -23,-24 + 1687: -22,-24 + 1688: -22,-22 + 1689: -23,-21 + 1690: -23,-20 + 1691: -23,-18 + 1692: -22,-19 + 1693: -24,-19 + 1694: -23,-18 + 1695: -19,-18 + 1696: -20,-18 + 1697: -21,-18 + 1698: -20,-18 + 1699: -21,-17 + 1700: -21,-17 + 1701: -25,-18 + 1702: -25,-22 + 1703: -27,-22 + 1704: -26,-24 + 1705: -27,-24 + 1706: -24,-25 + 1707: -21,-24 + 1708: -21,-20 + 1709: -23,-24 + 1710: -23,-21 + 1711: -25,-24 + 1712: -22,-22 + 1713: -22,-22 + 1714: -24,-24 + 1837: -13,-29 + 1838: -13,-29 + 1839: -12,-25 + 1840: -10,-22 + 1841: -10,-24 + 1842: -12,-23 + 1843: -11,-22 + 1844: -11,-23 + 1845: -11,-24 + 1987: -7,-38 + 1988: -8,-38 + 1989: -10,-38 + 1990: -11,-37 + 1991: -10,-37 + 1992: -9,-36 + 1993: -8,-36 + 1994: -10,-36 + 1995: -11,-36 + 1996: -12,-37 + 1997: -13,-38 + 1998: -13,-39 + 1999: -12,-40 + 2000: -12,-41 + 2001: -13,-42 + 2002: -13,-42 + 2003: -12,-40 + 2004: -12,-41 + 2005: -13,-42 + 2006: -12,-44 + 2007: -12,-45 + 2008: -12,-47 + 2009: -13,-48 + 2010: -12,-50 + 2011: -11,-50 + 2012: -12,-49 + 2013: -11,-48 + 2014: -12,-48 + 2015: -13,-49 + 2016: -13,-49 + 2017: -12,-48 + 2018: -12,-45 + 2019: -12,-44 + 2020: -13,-45 + 2021: -13,-43 + 2022: -13,-42 + 2023: -13,-40 + 2024: -12,-39 + 2025: -12,-39 + 2026: -11,-41 + 2027: -11,-43 + 2028: -11,-45 + 2029: -11,-45 + 2030: -11,-43 + 2031: -11,-42 + 2032: -14,-43 + 2033: -14,-46 + 2034: -14,-40 + 2035: -13,-37 + 2036: -13,-36 + 2037: -14,-37 + 2038: -12,-36 + 2039: -8,-38 + 2040: -7,-37 + 2041: -7,-36 + 2042: -8,-34 + 2043: -8,-32 + 2044: -8,-31 + 2045: -8,-31 + 2046: -7,-31 + 2047: -7,-32 + 2048: -6,-34 + 2049: -5,-32 + 2050: -5,-31 + 2051: -4,-32 + 2052: -4,-33 + 2053: -3,-34 + 2054: -3,-33 + 2055: -4,-31 + 2056: -5,-32 + 2057: -7,-34 + 2058: -14,-49 + 2059: -14,-49 + 2060: -13,-50 + 2061: -13,-51 + 2162: -40,-40 + 2163: -39,-40 + 2164: -38,-39 + 2165: -39,-39 + 2166: -40,-39 + 2167: -40,-38 + 2168: -39,-38 + 2169: -39,-37 + 2170: -40,-37 + 2171: -40,-37 + 2172: -41,-36 + 2173: -41,-37 + 2174: -39,-37 + 2175: -38,-38 + 2176: -38,-38 + 2177: -39,-37 + 2178: -41,-36 + 2179: -40,-38 + 2180: -39,-39 + 2181: -38,-38 + 2182: -39,-37 + 2183: -40,-37 + 2184: -39,-38 + 2185: -38,-38 + 2186: -40,-37 + 2280: -29,-49 + 2281: -29,-48 + 2282: -28,-47 + 2283: -27,-48 + 2284: -25,-48 + 2285: -26,-47 + 2286: -27,-47 + 2287: -26,-48 + 2288: -24,-48 + 2289: -32,-46 + 2290: -36,-46 + 2291: -37,-46 + 2292: -38,-46 + 2293: -37,-48 + 2294: -34,-48 + 2295: -33,-49 + 2296: -35,-49 + 2297: -36,-47 + 2298: -37,-49 + 2299: -35,-50 + 2300: -33,-48 + 2301: -33,-48 + 2302: -33,-51 + 2303: -35,-52 + 2304: -38,-51 + 2305: -39,-51 + 2306: -39,-53 + 2307: -37,-52 + 2308: -35,-52 + 2309: -37,-52 + 2310: -39,-50 + 2311: -37,-49 + 2312: -36,-52 + 2313: -35,-51 + 2314: -34,-51 + 2315: -42,-50 + 2316: -43,-50 + 2317: -43,-51 + 2318: -41,-51 + 2319: -41,-51 + 2369: -20,-50 + 2370: -21,-50 + 2371: -22,-50 + 2372: -22,-50 + 2373: -22,-49 + 2374: -21,-49 + 2375: -20,-49 + 2376: -20,-49 + 2377: -21,-49 + 2378: -22,-48 + 2379: -22,-48 + 2380: -21,-48 + 2381: -20,-47 + 2382: -21,-47 + 2383: -22,-46 + 2384: -21,-46 + 2385: -20,-45 + 2386: -22,-44 + 2387: -23,-44 + 2388: -23,-44 + 2389: -25,-45 + 2390: -25,-45 + 2391: -26,-44 + 2392: -28,-44 + 2393: -28,-44 + 2394: -28,-45 + 2395: -29,-45 + 2396: -30,-45 + 2397: -30,-44 + 2398: -31,-44 + 2399: -31,-44 + 2400: -29,-44 + 2401: -26,-44 + 2402: -25,-44 + 2403: -20,-40 + 2404: -21,-40 + 2405: -21,-40 + 2406: -22,-40 + 2407: -22,-39 + 2408: -21,-38 + 2409: -20,-37 + 2410: -21,-37 + 2411: -22,-37 + 2412: -21,-36 + 2413: -21,-36 + 2414: -20,-36 + 2415: -21,-37 + 2416: -21,-38 + 2417: -21,-39 + 2418: -21,-39 + 2419: -21,-39 + 2420: -21,-37 + 2421: -21,-37 + 2425: -20,-54 + 2426: -21,-54 + 2427: -21,-53 + 2428: -21,-53 + 2429: -21,-53 + 2430: -23,-53 + 2431: -23,-52 + 2432: -23,-52 + 2433: -23,-51 + 2434: -22,-51 + 2435: -21,-51 + 2436: -20,-52 + 2437: -20,-51 + 2438: -20,-52 + 2439: -22,-53 + 2443: -26,-53 + 2444: -28,-53 + 2445: -29,-53 + 2446: -30,-52 + 2447: -30,-52 + 2448: -30,-51 + 2449: -28,-52 + 2450: -26,-51 + 2451: -26,-51 + 2452: -26,-52 + 2453: -25,-52 + 2454: -27,-53 + 2455: -25,-53 + 2456: -25,-53 + 2457: -30,-51 + 2458: -30,-53 + 2459: -28,-51 + 2466: -27,-57 + 2467: -27,-56 + 2468: -26,-55 + 2469: -26,-55 + 2470: -26,-57 + 2471: -24,-56 + 2472: -24,-55 + 2473: -24,-55 + 2474: -23,-56 + 2475: -23,-57 + 2476: -23,-55 + 2477: -27,-55 + 2478: -26,-57 + 2479: -27,-56 + 2480: -23,-55 + 2493: -29,-55 + 2494: -29,-56 + 2495: -31,-56 + 2496: -32,-56 + 2497: -31,-55 + 2498: -28,-61 + 2499: -28,-60 + 2500: -27,-60 + 2501: -26,-60 + 2502: -25,-60 + 2503: -25,-58 + 2504: -24,-59 + 2505: -24,-60 + 2506: -24,-60 + 2507: -23,-60 + 2508: -24,-59 + 2509: -25,-60 + 2510: -24,-61 + 2511: -26,-63 + 2512: -27,-63 + 2513: -27,-65 + 2514: -25,-65 + 2515: -24,-65 + 2516: -25,-63 + 2517: -25,-63 + 2518: -24,-64 + 2519: -26,-65 + 2520: -27,-61 + 2521: -27,-61 + 2522: -29,-59 + 2523: -29,-58 + 2524: -29,-57 + 2530: -18,-54 + 2531: -18,-54 + 2532: -18,-53 + 2533: -18,-53 + 2534: -17,-53 + 2535: -16,-54 + 2536: -16,-54 + 2537: -15,-53 + 2538: -14,-52 + 2539: -12,-53 + 2540: -11,-53 + 2541: -11,-52 + 2542: -11,-52 + 2543: -15,-52 + 2544: -10,-54 + 2545: -13,-54 + 2546: -15,-54 + 2547: -16,-54 + 2548: -14,-52 + 2549: -11,-52 + 2550: -10,-53 + 2551: -17,-53 + 2552: -16,-52 + 2553: -13,-54 + 2554: -15,-54 + 2555: -13,-53 + 2556: -11,-52 + 2561: -8,-54 + 2562: -7,-54 + 2563: -8,-53 + 2564: -8,-52 + 2565: -7,-52 + 2566: -7,-54 + 2567: -6,-54 + 2568: -6,-53 + 2569: -7,-53 + 2570: -6,-52 + 2571: -6,-52 + 2572: -6,-51 + 2573: -6,-49 + 2574: -5,-49 + 2575: -6,-49 + 2576: -6,-50 + 2577: -6,-51 + 2578: -7,-53 + 2580: -5,-48 + 2581: -5,-47 + 2582: -5,-46 + 2583: -5,-46 + 2584: -5,-45 + 2585: -5,-45 + 2586: -5,-43 + 2587: -5,-44 + 2588: -4,-43 + 2589: -4,-45 + 2590: -3,-43 + 2591: -4,-43 + 2592: -5,-43 + 2593: -3,-43 + 2727: 18,-3 + 2728: 18,-3 + 2729: 19,-3 + 2730: 19,-4 + 2731: 19,-5 + 2732: 19,-7 + 2733: 19,-7 + 2734: 20,-7 + 2735: 21,-7 + 2736: 21,-6 + 2737: 21,-5 + 2738: 21,-4 + 2739: 21,-4 + 2740: 22,-3 + 2741: 22,-4 + 2742: 22,-6 + 2743: 23,-6 + 2744: 24,-6 + 2745: 24,-5 + 2746: 25,-4 + 2747: 25,-3 + 2748: 25,-3 + 2749: 25,-5 + 2750: 23,-7 + 2751: 24,-3 + 2752: 24,-3 + 2753: 21,-3 + 2754: 22,-3 + 2755: 18,-5 + 2778: 23,-13 + 2779: 22,-13 + 2780: 22,-12 + 2781: 22,-11 + 2782: 22,-9 + 2783: 22,-9 + 2784: 23,-10 + 2785: 24,-11 + 2786: 24,-11 + 2787: 22,-10 + 2788: 22,-13 + 2789: 22,-12 + 2790: 22,-11 + 2791: 23,-11 + 2792: 24,-9 + 2793: 26,-10 + 2794: 26,-9 + 2795: 27,-9 + 2796: 26,-8 + 2797: 28,-8 + 2798: 29,-9 + 2799: 29,-8 + 2800: 30,-7 + 2801: 28,-7 + 2802: 28,-7 + 2803: 30,-9 + 2804: 30,-7 + 2815: 22,-16 + 2816: 22,-15 + 2817: 23,-16 + 2818: 23,-16 + 2819: 24,-15 + 2820: 25,-16 + 2821: 25,-16 + 2822: 26,-15 + 2823: 26,-14 + 2824: 25,-14 + 2825: 26,-12 + 2826: 26,-14 + 2827: 25,-14 + 2828: 25,-13 + 2829: 25,-13 + 2830: 25,-13 + 2831: 24,-15 + 3045: 24,6 + 3046: 23,6 + 3047: 15,6 + 3048: 15,6 + 3049: 18,8 + 3050: 18,7 + 3051: 17,7 + 3052: 20,11 + 3053: 20,6 + 3054: 24,8 + 3055: 26,6 + 3056: 28,8 + 3057: 28,6 + 3058: 29,5 + 3059: 29,4 + 3060: 31,7 + 3061: 34,7 + 3062: 35,5 + 3063: 33,7 + 3064: 29,8 + 3065: 29,10 + 3066: 28,9 + 3067: 30,10 + 3068: 30,8 + 3069: 26,8 + 3070: 20,11 + 3071: 17,11 + 3072: 15,11 + 3073: 17,8 + 3074: 17,7 + 3075: 21,7 + 3076: 23,10 + 3077: 23,10 + 3078: 25,11 + 3079: 24,13 + 3080: 23,13 + 3081: 24,14 + 3082: 26,14 + 3083: 26,13 + 3084: 23,15 + 3085: 24,15 + 3086: 26,15 + 3087: 26,16 + 3088: 23,16 + 3089: 22,16 + 3090: 20,16 + 3091: 19,16 + 3092: 20,18 + 3093: 21,18 + 3094: 21,18 + 3095: 23,19 + 3096: 25,18 + 3097: 25,16 + 3098: 26,18 + 3099: 24,18 + 3100: 22,17 + 3101: 22,20 + 3102: 26,18 + 3103: 22,18 + 3104: 20,16 + 3105: 19,16 + 3106: 27,16 + 3218: 43,21 + 3219: 43,21 + 3220: 44,21 + 3221: 42,23 + 3222: 42,23 + 3223: 42,24 + 3224: 42,24 + 3225: 43,24 + 3226: 43,23 + 3227: 43,22 + 3228: 42,22 + 3229: 42,21 + 3244: 10,21 + 3245: 10,22 + 3246: 8,22 + 3247: 8,22 + 3248: 8,21 + 3249: 7,21 + 3250: 5,21 + 3251: 4,21 + 3252: 5,22 + 3253: 5,22 + 3254: 6,22 + 3255: 6,21 + 3256: 10,22 + 3262: 12,23 + 3263: 12,22 + 3264: 12,22 + 3265: 13,22 + 3266: 12,20 + 3267: 12,20 + 3268: 12,17 + 3269: 12,19 + 3270: 12,19 + 3271: 13,22 + 3272: 13,22 + 3273: 13,19 + 3274: 13,17 + 3275: 13,16 + 3276: 13,14 + 3277: 13,12 + 3278: 13,11 + 3279: 12,12 + 3280: 12,14 + 3281: 12,15 + 3282: 12,14 + 3283: 12,13 + 3284: 13,9 + 3285: 13,8 + 3286: 12,8 + 3287: 12,8 + 3288: 11,8 + 3289: 11,9 + 3290: 12,9 + 3291: 13,8 + 3292: 13,7 + 3293: 13,6 + 3294: 13,5 + 3295: 13,4 + 3296: 14,4 + 3297: 15,4 + 3298: 12,12 + 3299: 12,15 + 3300: 17,23 + 3301: 17,22 + 3302: 16,21 + 3303: 16,20 + 3304: 17,20 + 3305: 19,21 + 3306: 18,22 + 3307: 17,23 + 3308: 16,22 + 3309: 15,21 + 3317: 16,25 + 3318: 16,27 + 3319: 17,27 + 3320: 18,27 + 3321: 18,26 + 3322: 18,25 + 3323: 20,25 + 3324: 20,25 + 3325: 21,25 + 3326: 19,27 + 3327: 23,25 + 3328: 24,25 + 3329: 25,25 + 3330: 25,27 + 3331: 23,27 + 3332: 21,27 + 3333: 21,27 + 3334: 21,27 + 3335: 21,27 + 3336: 21,27 + 3337: 21,27 + 3338: 25,26 + 3339: 26,25 + 3340: 26,25 + 3341: 24,25 + 3342: 20,25 + 3343: 20,27 + 3344: 18,27 + 3345: 18,27 + 3346: 20,26 + 3347: 21,25 + 3348: 20,25 + 3924: -23,14 + 3925: -23,15 + 3926: -22,15 + 3927: -22,16 + 3928: -19,15 + 3929: -20,15 + 3930: -19,14 + 3931: -18,14 + 3932: -17,15 + 3933: -17,16 + 3934: -19,16 + 3935: -19,14 + 3936: -19,14 + 3937: -20,14 + 3938: -21,14 + 3939: -22,14 + 3940: -21,16 + 3941: -18,16 + 3942: -17,15 + 3943: -21,16 + 3944: -22,16 + 3945: -21,17 + 3946: -21,17 + 3947: -23,15 + 3948: -23,16 + 3949: -17,14 + 3950: -22,14 + 3951: -17,16 + 3960: -25,15 + 3961: -26,15 + 3962: -25,16 + 3963: -25,16 + 3964: -25,17 + 3965: -25,18 + 3966: -26,18 + 3967: -26,18 + 3968: -26,20 + 3969: -28,19 + 3970: -28,19 + 3971: -30,19 + 3972: -29,20 + 3973: -30,21 + 3974: -28,21 + 3975: -27,21 + 3976: -27,20 + 3977: -28,21 + 3978: -28,20 + 3979: -26,21 + 3980: -25,20 + 3981: -24,20 + 3982: -24,19 + 3983: -24,19 + 3984: -26,19 + 3985: -28,23 + 3986: -28,24 + 3987: -28,24 + 3988: -28,26 + 3989: -28,26 + 3990: -28,25 + 3991: -28,26 + 3992: -28,25 + 3993: -26,16 + 3994: -25,15 + 3996: -32,19 + 3997: -33,19 + 3998: -34,19 + 3999: -33,20 + 4000: -34,21 + 4001: -34,20 + 4002: -32,21 + 4003: -32,20 + 4004: -28,15 + 4005: -29,15 + 4006: -30,16 + 4007: -29,17 + 4008: -29,16 + 4009: -29,16 + 4010: -28,17 + 4011: -28,17 + 4012: -30,15 + 4013: -29,17 + 4014: -29,17 + 4113: -13,22 + 4114: -12,22 + 4115: -12,24 + 4116: -10,22 + 4117: -9,24 + 4118: -7,24 + 4119: -8,22 + 4120: -7,22 + 4121: -9,23 + 4122: -4,22 + 4123: -3,23 + 4124: -4,24 + 4125: -3,25 + 4724: -7,42 + 4725: -5,42 + 4726: -4,42 + 4727: -5,43 + 4728: -7,43 + 4729: -6,44 + 4730: -4,44 + 4731: -4,45 + 4732: -5,43 + 4733: -6,43 + 4734: -6,44 + 4735: -6,45 + 4736: -5,44 + 4737: -4,46 + 4738: -4,47 + 4739: -3,47 + 4740: -3,48 + 4741: -4,48 + 4742: -4,47 + 4743: -4,45 + 4744: -6,45 + 4745: -3,44 + 4746: -8,45 + 4747: -9,45 + 4748: -11,45 + 4749: -12,45 + 4750: -12,46 + 4751: -12,47 + 4752: -12,48 + 4753: -11,46 + 4754: -12,47 + 4755: -12,47 + 4756: -7,45 + 4757: -7,43 + 4758: -4,43 + 5408: 36,-28 + 5409: 36,-28 + 5410: 36,-29 + 5411: 35,-33 + 5412: 35,-33 + 5413: 36,-34 + 5414: 36,-35 + 5415: 35,-35 + 5416: 34,-35 + 5417: 34,-33 + 5418: 34,-32 + 5419: 34,-31 + 5420: 34,-29 + 5421: 34,-28 + 5422: 34,-30 + 5423: 35,-32 + 5424: 36,-31 + 5425: 34,-33 + 5426: 35,-35 + 5427: 36,-33 + 5428: 34,-28 + 5429: 36,-31 + 5430: 35,-32 + 5431: 35,-29 + 5480: 19,-30 + 5481: 17,-30 + 5944: 13,-38 + 5945: 12,-37 + 5946: 11,-37 + 5947: 11,-36 + 5948: 13,-36 + 5949: 13,-36 + 5950: 14,-36 + 5951: 12,-36 + 5952: 11,-37 + 5953: 15,-36 + 5954: 16,-37 + 5955: 13,-37 + 5956: 14,-38 + 5957: 13,-39 + 5958: 11,-39 + 5959: 10,-39 + 5960: 11,-38 + 5961: 12,-38 + 5962: 10,-37 + 5963: 10,-35 + 5964: 12,-35 + 5965: 14,-35 + 5966: 15,-35 + 5967: 16,-36 + 5968: 15,-37 + 5969: 10,-39 + 5970: 10,-38 + 5978: 18,-35 + 5979: 19,-35 + 5980: 20,-35 + 5981: 21,-35 + 5982: 22,-35 + 5983: 23,-35 + 5984: 23,-36 + 5985: 24,-37 + 5986: 25,-36 + 5987: 26,-35 + 5988: 25,-35 + 5989: 26,-36 + 5990: 25,-37 + 5991: 23,-37 + 5992: 22,-38 + 5993: 23,-38 + 5994: 25,-38 + 5995: 27,-38 + 5996: 27,-36 + 5997: 27,-35 + 5998: 21,-37 + 5999: 20,-37 + 6000: 20,-38 + 6001: 18,-38 + 6002: 18,-38 + 6003: 18,-37 + 6004: 22,-37 + 6005: 24,-37 + 6006: 23,-36 + 6007: 24,-35 + 6008: 26,-35 + 6009: 26,-36 + 6010: 26,-38 + 6011: 26,-37 + 6012: 28,-38 + 6013: 29,-37 + 6014: 29,-37 + 6015: 29,-38 + 6016: 30,-37 + 6017: 30,-35 + 6018: 29,-35 + 6019: 31,-35 + 6020: 30,-34 + 6021: 31,-34 + 6022: 31,-35 + 6023: 32,-35 + 6024: 32,-34 + 6025: 30,-34 + 6026: 30,-38 + 6031: 36,-40 + 6032: 36,-39 + 6033: 35,-38 + 6034: 33,-37 + 6035: 35,-37 + 6036: 32,-37 + 6037: 32,-39 + 6038: 32,-40 + 6039: 34,-40 + 6040: 34,-39 + 6041: 33,-38 + 6042: 34,-37 + 6043: 35,-40 + 6044: 35,-39 + 6045: 36,-37 + 6046: 36,-37 + 6047: 33,-39 + 6262: -4,-54 + 6263: -4,-54 + 6264: -3,-53 + 6265: -1,-54 + 6266: -1,-54 + 6267: 0,-54 + 6268: 0,-53 + 6269: -1,-52 + 6270: 0,-51 + 6271: -1,-51 + 6272: -2,-52 + 6273: -3,-52 + 6274: -3,-51 + 6275: -4,-51 + 6276: -4,-52 + 6277: -4,-53 + 6278: -1,-53 + 6279: -1,-52 + 6280: -1,-53 + 6281: -3,-54 + 6282: -3,-53 + 6283: -3,-54 + 6284: -1,-53 + 6285: 0,-52 + 6286: -4,-51 + 6287: -2,-54 + 6288: 0,-53 + 6289: -1,-51 + 6290: -4,-52 + 6291: 0,-52 + 6292: -1,-53 + 6293: -3,-53 + 6294: -2,-53 + 6295: -2,-53 + 6296: 0,-52 + 6333: 3,-53 + 6334: 2,-54 + 6335: 4,-55 + 6336: 3,-56 + 6337: 3,-57 + 6338: 3,-58 + 6339: 3,-60 + 6340: 2,-61 + 6341: 4,-61 + 6342: 4,-59 + 6343: 2,-59 + 6344: 2,-58 + 6345: 4,-57 + 6346: 3,-54 + 6347: 5,-56 + 6348: 1,-58 + 6349: 3,-62 + 6350: 3,-61 + 6395: -8,-60 + 6396: -8,-60 + 6397: -7,-61 + 6398: -5,-61 + 6399: -2,-61 + 6400: -4,-61 + 6401: 0,-61 + 6402: 0,-60 + 6403: 0,-58 + 6404: -4,-56 + 6405: -6,-56 + 6406: -7,-56 + 6407: -8,-57 + 6408: -2,-56 + 6451: -15,-57 + 6452: -16,-57 + 6453: -15,-57 + 6454: -11,-57 + 6455: -11,-57 + 6456: -13,-61 + 6457: -15,-61 + 6458: -16,-61 + 6459: -15,-60 + 6460: -13,-60 + 6461: -14,-60 + 6462: -16,-61 + 6463: -21,-64 + 6464: -21,-63 + 6465: -19,-63 + 6466: -18,-63 + 6467: -19,-62 + 6468: -21,-62 + 6469: -19,-60 + 6470: -21,-60 + 6471: -20,-59 + 6472: -19,-59 + 6473: -19,-57 + 6474: -21,-59 + 6475: -21,-56 + 6476: -19,-56 + 6477: -18,-58 + 6478: -16,-59 + 6479: -15,-58 + 6480: -15,-59 + 6481: -13,-57 + 6482: -12,-58 + 6483: -11,-60 + 6484: -10,-59 + 6485: -9,-59 + 6486: -14,-59 + 6487: -11,-58 + 6488: -8,-59 + 6489: -6,-58 + 6490: -6,-59 + 6491: -4,-58 + 6492: -3,-59 + 6493: -1,-60 + 6494: -1,-57 + 6495: -6,-57 + 6496: -7,-58 + 6497: -7,-60 + 6498: -2,-60 + 6499: -2,-58 + 6710: -7,-76 + 6711: -8,-76 + 6712: -7,-75 + 6713: -6,-74 + 6714: -8,-73 + 6715: -6,-72 + 6716: -5,-71 + 6717: -7,-71 + 6718: -8,-72 + 6719: -7,-72 + 6720: -8,-69 + 6721: -7,-68 + 6722: -6,-70 + 6723: -7,-71 + 6724: -7,-68 + 6725: -8,-65 + 6726: -6,-64 + 6727: -6,-66 + 6728: -6,-68 + 6729: -6,-68 + 6730: -5,-64 + 6731: -5,-64 + 6732: -5,-65 + 6733: -3,-63 + 6734: -3,-64 + 6735: -4,-65 + 6736: -1,-64 + 6737: -1,-63 + 6738: -4,-65 + 6739: -3,-67 + 6740: -3,-66 + 6741: -2,-63 + 6742: -1,-63 + 6743: -1,-65 + 6744: 2,-64 + 6745: 0,-63 + 6746: 0,-64 + 6747: 4,-64 + 6748: 5,-64 + 6749: 5,-67 + 6750: 4,-66 + 6751: 4,-66 + 6752: 3,-64 + 6753: 5,-63 + 6754: 7,-64 + 6755: 7,-66 + 6756: 6,-68 + 6757: 8,-69 + 6758: 6,-67 + 6759: 7,-65 + 6760: 8,-64 + 6761: 8,-65 + 6762: 8,-67 + 6763: 8,-69 + 6764: 6,-69 + 6765: 6,-69 + 6766: 6,-71 + 6767: 9,-71 + 6768: 7,-70 + 6769: 6,-72 + 6770: 7,-72 + 6771: 8,-73 + 6772: 7,-74 + 6773: 5,-72 + 6774: 6,-74 + 6775: 7,-75 + 6776: 5,-77 + 6777: 5,-74 + 6778: 5,-73 + 6779: 5,-75 + 6780: 4,-76 + 6781: 3,-73 + 6782: 3,-73 + 6783: 3,-76 + 6784: 2,-76 + 6785: 2,-75 + 6786: -1,-74 + 6787: 0,-76 + 6788: 1,-77 + 6789: -2,-76 + 6790: -1,-73 + 6791: -2,-75 + 6792: -2,-77 + 6793: -3,-76 + 6794: -3,-74 + 6795: -5,-75 + 6796: -6,-76 + 6797: -6,-74 + 6798: -4,-75 + 6799: -2,-77 + 6800: -3,-73 + 6801: -3,-76 + 6802: 1,-74 + 6803: 0,-73 + 6804: 2,-76 + 6805: 4,-74 + 6806: 5,-73 + 6807: 8,-72 + 6808: 10,-71 + 6809: 10,-69 + 6810: 11,-69 + 6811: 13,-71 + 6812: 12,-69 + 6813: 13,-69 + 6814: 14,-67 + 6815: 12,-65 + 6816: 10,-65 + 6817: 11,-64 + 6818: 13,-65 + 6819: 14,-64 + 6820: 12,-63 + 6821: 9,-64 + 6822: 12,-62 + 6823: 11,-61 + 6824: 13,-60 + 6825: 13,-61 + 6826: 13,-58 + 6827: 11,-58 + 6828: 10,-60 + 6829: 13,-61 + 6830: 13,-61 + 6831: 11,-59 + 6832: 12,-58 + 6833: 13,-59 + 7224: 8,-38 + 7225: 8,-38 + 7226: 8,-35 + 7227: 7,-35 + 7228: 6,-35 + 7229: 4,-35 + 7230: 4,-35 + 7231: 4,-38 + 7232: 6,-37 + 7233: 7,-37 + 7234: 6,-38 + 7235: 4,-37 + 7236: 6,-35 + 7250: 38,-41 + 7251: 38,-41 + 7252: 38,-39 + 7253: 38,-38 + 7254: 39,-37 + 7255: 39,-37 + 7256: 39,-39 + 7257: 40,-40 + 7258: 40,-40 + 7259: 41,-40 + 7260: 41,-38 + 7261: 42,-37 + 7262: 43,-39 + 7263: 43,-40 + 7264: 44,-40 + 7265: 45,-39 + 7266: 45,-38 + 7267: 45,-38 + 7268: 46,-40 + 7269: 46,-41 + 7270: 47,-41 + 7271: 47,-38 + 7272: 46,-37 + 7273: 43,-37 + 7274: 43,-38 + 7275: 42,-38 + 7276: 41,-41 + 7277: 40,-39 + 7278: 39,-40 + 7279: 39,-40 + 7280: 38,-37 + 7281: 40,-39 + 7282: 45,-41 + 7283: 46,-41 + 7284: 47,-39 + 7285: 44,-41 + 7286: 42,-41 + 7287: 44,-39 + 7288: 42,-38 + 7289: 42,-38 + 7290: 38,-37 + 7291: 29,-12 + 7292: 28,-13 + 7293: 28,-13 + 7294: 28,-12 + 7295: 28,-11 + 7296: 30,-11 + 7297: 30,-12 + 7298: 29,-13 + 7304: 6,-14 + 7305: 5,-14 + 7306: 4,-14 + 7307: 4,-13 + 7308: 6,-12 + 7309: 6,-13 + 7310: 6,-14 + 7311: 4,-12 + 7312: 4,-13 + 7352: -48,-16 + 7353: -48,-17 + 7354: -48,-19 + 7355: -49,-20 + 7356: -46,-24 + 7357: -45,-22 + 7358: -43,-21 + 7359: -43,-23 + 7360: -42,-23 + 7361: -41,-23 + 7362: -44,-16 + 7363: -45,-17 + 7364: -46,-18 + 7365: -46,-20 + 7366: -47,-22 + 7367: -47,-22 + 7368: -44,-21 + 7369: -42,-18 + 7370: -45,-17 + 7371: -46,-17 + 7372: -45,-17 + 7373: -46,-18 + 7374: -45,-21 + 7375: -42,-22 + 7376: -41,-23 + 7413: -49,-21 + 7414: -49,-22 + 7415: -49,-23 + 7416: -48,-24 + 7417: -47,-23 + 7418: -47,-21 + 7419: -47,-18 + 7420: -48,-19 + 7421: -48,-18 + 7422: -48,-16 + 7423: -48,-16 + 7424: -49,-16 + 7425: -43,-16 + 7426: -41,-17 + 7427: -43,-18 + 7428: -44,-18 + 7429: -42,-20 + 7430: -40,-21 + 7431: -42,-19 + 7432: -43,-18 + 7433: -41,-21 + 7434: -41,-24 + 7435: -45,-24 + 7436: -45,-23 + 7437: -41,-20 + - node: + cleanable: True + color: '#FFFFFFFF' + id: DirtHeavy + decals: + 7344: 43.129646,-38.225346 + 7345: 43,-38 + - node: + color: '#FFFFFFFF' + id: DirtHeavyMonotile + decals: + 1389: -39,-33 + 1390: -39,-33 + 1391: -39,-33 + 1392: -39,-33 + 1393: -39,-33 + - node: + cleanable: True + color: '#FFFFFFFF' + id: DirtHeavyMonotile + decals: + 7349: 47,-37 + 7350: 47,-37 + - node: + color: '#FFFFFFFF' + id: DirtLight + decals: + 1826: -19,-34 + 1827: -19,-34 + 1828: -19,-34 + 1829: -18,-33 + 1830: -18,-32 + 1831: -18,-31 + 1832: -19,-31 + 1833: -17,-34 + 1834: -17,-33 + 1835: -17,-32 + 1836: -17,-31 + 1900: -17,-50 + 1901: -18,-50 + 1902: -18,-48 + 1903: -17,-48 + 1904: -17,-49 + 1905: -17,-46 + 1906: -18,-46 + 1907: -17,-45 + 1908: -16,-47 + 1909: -17,-46 + 1910: -17,-44 + 1911: -18,-43 + 1912: -17,-43 + 1913: -16,-43 + 1914: -16,-42 + 1915: -17,-40 + 1916: -18,-39 + 1917: -16,-40 + 1918: -16,-41 + 1919: -18,-37 + 1920: -17,-36 + 1921: -17,-37 + 1922: -17,-38 + 1923: -17,-36 + 1924: -17,-38 + 1925: -13,-33 + 1926: -13,-32 + 1927: -12,-32 + 1928: -12,-33 + 1929: -11,-31 + 1930: -13,-33 + 1931: -8,-40 + 1932: -9,-41 + 1933: -8,-43 + 1934: -8,-44 + 1935: -8,-45 + 1936: -9,-46 + 1937: -9,-44 + 1938: -8,-43 + 1939: -7,-41 + 1940: -7,-40 + 1941: -8,-42 + 1942: -9,-46 + 1943: -8,-45 + 1944: -8,-42 + 1945: -8,-43 + 1946: -8,-44 + 1947: -8,-42 + 1948: -7,-41 + 1949: -7,-44 + 1950: -7,-44 + 1951: -8,-44 + 1952: -7,-43 + 1953: -9,-43 + 1954: -7,-44 + 2320: -44,-48 + 2321: -44,-47 + 2322: -43,-46 + 2323: -43,-47 + 2324: -42,-48 + 2325: -42,-46 + 2326: -43,-47 + 2327: -43,-48 + 2328: -42,-46 + 2329: -40,-46 + 2330: -40,-47 + 2331: -44,-53 + 2332: -44,-53 + 2333: -44,-53 + 2334: -42,-53 + - node: + cleanable: True + color: '#FFFFFFFF' + id: DirtLight + decals: + 7346: 44,-37 + 7347: 40,-37 + - node: + cleanable: True + color: '#FFFFFFFF' + id: DirtMedium + decals: + 7348: 41,-37 + - node: + color: '#FFFFFFFF' + id: Flowersbr2 + decals: + 6050: 14,-26 + - node: + color: '#FFFFFFFF' + id: Flowersbr3 + decals: + 6051: 14,-27 + - node: + color: '#FFFFFFFF' + id: Flowerspv1 + decals: + 6059: 3,47 + - node: + color: '#FFFFFFFF' + id: Flowerspv2 + decals: + 6058: 3,48 + - node: + color: '#FFFFFFFF' + id: Flowerspv3 + decals: + 6057: 3,49 + - node: + color: '#FFFFFFFF' + id: Flowersy1 + decals: + 342: -5,-3 + 363: 5,-4 + 403: 3,6 + 404: -8,3 + 3691: 40,-9 + 3692: 34,-8 + 3700: 32,-3 + - node: + color: '#FFFFFFFF' + id: Flowersy2 + decals: + 341: -5,-6 + 405: -3,8 + - node: + color: '#FFFFFFFF' + id: Flowersy3 + decals: + 344: -3,-5 + 365: 6,-6 + 408: 3,9 + 409: -4,5 + - node: + color: '#FFFFFFFF' + id: Flowersy4 + decals: + 343: -7,-2 + 364: 9,-2 + 406: 7,6 + 407: 6,3 + - node: + color: '#222222E5' + id: FullTileOverlayGreyscale + decals: + 116: -1,-5 + 117: -1,-6 + 118: -1,-7 + 119: -1,-8 + 120: -1,-9 + 121: 2,-5 + 122: 2,-6 + 123: 2,-7 + 124: 2,-8 + 125: 2,-9 + 126: 3,-9 + 127: 4,-9 + 128: 5,-9 + 129: -2,-9 + 130: -3,-9 + 131: -4,-9 + 132: 4,-8 + 133: 5,-8 + 134: 6,-8 + 135: 5,-7 + 136: 6,-7 + 137: 7,-7 + 138: 8,-7 + 139: 7,-6 + 140: 8,-6 + 141: 8,-5 + 142: 8,-4 + 143: 6,-1 + 144: 7,-1 + 145: 8,-1 + 146: 9,-1 + 147: 10,-1 + 148: 10,-2 + 149: 10,-3 + 150: 10,-4 + 151: 9,-4 + 152: 9,-3 + 153: 9,-5 + 154: -3,-8 + 155: -4,-8 + 156: -5,-8 + 157: -4,-7 + 158: -5,-7 + 159: -6,-7 + 160: -7,-7 + 161: -6,-6 + 162: -7,-6 + 163: -7,-5 + 164: -7,-4 + 165: -8,-5 + 166: -8,-4 + 167: -8,-3 + 168: -9,-4 + 169: -9,-3 + 170: -9,-2 + 171: -9,-1 + 172: -8,-1 + 173: -7,-1 + 174: -6,-1 + 175: -5,-1 + 176: -9,2 + 177: -8,2 + 178: -7,2 + 179: -6,2 + 180: -5,2 + 181: 6,2 + 182: 7,2 + 183: 8,2 + 184: 9,2 + 185: 10,2 + 186: 10,3 + 187: 10,4 + 188: 10,5 + 189: 9,4 + 190: 9,5 + 191: 9,6 + 192: 8,5 + 193: 8,6 + 194: 8,7 + 195: 8,8 + 196: 7,7 + 197: 7,8 + 198: 6,8 + 199: 5,8 + 200: 6,9 + 201: 5,9 + 202: 4,9 + 203: 5,10 + 204: 4,10 + 205: 3,10 + 206: 2,10 + 207: 2,9 + 208: 2,8 + 209: 2,7 + 210: 2,6 + 211: -1,6 + 212: -1,7 + 213: -1,8 + 214: -1,9 + 215: -1,10 + 216: -2,10 + 217: -3,10 + 218: -4,10 + 219: -3,9 + 220: -4,9 + 221: -5,9 + 222: -5,8 + 223: -4,8 + 224: -6,8 + 225: -7,8 + 226: -7,7 + 227: -6,7 + 228: -7,6 + 229: -7,5 + 230: -8,5 + 231: -8,4 + 232: -9,5 + 233: -9,4 + 234: -9,3 + 255: -4,4 + 256: 5,4 + 257: 5,-3 + 258: 4,-4 + 259: -3,-4 + 260: -4,-3 + 454: -8,6 + 3740: 36,-3 + 3741: 36,-4 + 3742: 33,-3 + 3743: 33,-4 + 3744: 41,-4 + 3745: 42,-4 + 3746: 43,-4 + 3747: 44,-4 + 3748: 44,-5 + 3749: 44,-6 + 3750: 44,-7 + 3751: 44,-8 + 3752: 44,-9 + 3753: 44,-10 + 3754: 44,-11 + 3755: 44,-12 + 3756: 44,-13 + 3757: 43,-13 + 3758: 42,-13 + 3759: 41,-13 + 3760: 40,-13 + 3761: 39,-13 + 3762: 35,-13 + 3763: 34,-13 + 3764: 33,-13 + 3765: 32,-13 + 3768: 45,-13 + 3769: 45,-7 + 3770: 45,-5 + 4843: 0,49 + 4844: 1,49 + 4845: 0,50 + 4846: 1,50 + 4847: 1,51 + 4848: 0,51 + 4849: 0,52 + 4850: 1,52 + 4851: 1,53 + 4852: 0,53 + 4853: 2,53 + 4854: 2,52 + 4855: 2,51 + 4856: -1,53 + 4857: -1,52 + 4858: -1,51 + 4863: 2,54 + 4864: 2,55 + 4865: 1,55 + 4866: 0,55 + 4867: -1,55 + 4868: -1,54 + 4869: -1,57 + 4870: -1,56 + 4871: 0,56 + 4872: 1,56 + 4873: 2,56 + 4874: 2,57 + 4879: -1,58 + 4880: -1,59 + 4881: -1,60 + 4882: -1,61 + 4883: -1,62 + 4884: 0,62 + 4885: 1,62 + 4886: 2,62 + 4887: 2,61 + 4888: 2,60 + 4889: 2,59 + 4890: 2,58 + 4891: 1,58 + 4892: 0,58 + 4893: 0,59 + 4894: 0,60 + 4895: 0,61 + 4896: 1,61 + 4897: 1,60 + 4898: 1,59 + 4899: -2,60 + 4900: -2,59 + 4901: -2,61 + 4902: -2,62 + 4903: 3,62 + 4904: 3,61 + 4905: 3,60 + 4906: 3,59 + 4907: 4,60 + 4908: 4,61 + 4909: -3,61 + 4910: -3,60 + 4911: -4,61 + 4912: 5,61 + 4913: 6,61 + 4914: 6,60 + 4915: 6,59 + 4916: 6,58 + 4917: -5,61 + 4918: -5,60 + 4919: -6,60 + 4920: -6,59 + 4921: -6,58 + 4922: -5,58 + 4923: -5,59 + 4924: -5,62 + 4925: 6,62 + 4993: 7,58 + 4994: 7,59 + 4995: 7,60 + - node: + color: '#222222E6' + id: FullTileOverlayGreyscale + decals: + 0: -2,-2 + 1: -2,3 + 2: 3,3 + 3: 3,-2 + 4: 0,-3 + 5: 1,-3 + 6: 4,0 + 7: 4,1 + 8: 1,4 + 9: 0,4 + 10: -3,1 + 11: -3,0 + - node: + color: '#334E6DC8' + id: FullTileOverlayGreyscale + decals: + 492: -9,14 + 493: -9,15 + 494: -9,16 + 4630: 1,26 + 4805: 1,46 + 4806: 2,46 + 4807: 3,46 + 4808: 4,46 + 4809: 4,47 + 4810: 4,48 + 4811: 4,49 + 4812: 4,50 + 4813: 3,50 + 4814: 5,47 + 4934: 0,59 + 4935: 1,59 + 4936: -1,53 + 4937: -1,52 + 4938: 0,52 + 4939: 1,52 + 4940: 2,52 + 4941: 2,53 + 4951: 2,50 + 4952: 2,54 + 4953: -1,54 + 4954: -1,55 + 4955: -1,56 + 4956: -1,57 + 4957: 2,57 + 4958: 2,56 + 4959: 2,55 + 4960: -1,58 + 4961: -1,59 + 4962: 2,58 + 4963: 2,59 + 4964: -2,59 + 4965: 3,59 + 4966: -2,60 + 4967: -3,60 + 4968: 3,60 + 4969: 4,60 + 4970: -3,61 + 4971: -4,61 + 4972: 4,61 + 4973: 5,61 + 5050: 3,70 + 5051: 2,70 + 5052: 0,70 + 5053: -1,70 + 5054: -2,70 + 5055: 4,70 + 5056: -3,70 + 5057: -4,70 + 5058: -5,70 + 5059: -6,70 + 5060: -3,69 + 5061: -4,69 + 5062: -5,69 + 5063: 5,70 + 5064: 5,69 + 5065: 6,69 + 5066: 6,70 + 5067: 7,69 + 5068: 7,70 + 5069: 8,70 + 5076: -5,71 + 5077: 7,71 + 5078: 7,72 + 5079: -5,72 + 5099: 3,85 + 5100: 2,85 + 5101: 1,85 + 5102: 0,85 + 5103: -1,85 + 5106: -2,84 + 5107: -3,84 + 5108: -4,84 + 5109: -5,84 + 5110: -5,83 + 5111: -5,82 + 5112: -5,81 + 5113: -5,80 + 5114: -5,79 + 5115: -5,78 + 5116: -5,75 + 5117: -5,74 + 5118: -5,73 + 6502: 3,26 + 6508: 4,26 + 6510: 4,27 + 6511: 4,25 + 6513: 4,24 + - node: + color: '#50BCB193' + id: FullTileOverlayGreyscale + decals: + 3353: 29,17 + 3354: 29,18 + 3355: 29,19 + 3356: 29,20 + 3357: 29,21 + 3358: 29,22 + 3359: 29,23 + 3360: 30,23 + 3361: 32,23 + 3362: 32,23 + 3363: 33,23 + 3364: 34,23 + 3365: 29,24 + 3366: 29,25 + 3367: 29,26 + 3368: 29,27 + 3369: 29,28 + 3370: 30,28 + 3371: 31,28 + 3391: 40,28 + 3392: 38,27 + 3393: 38,26 + 3394: 38,25 + 3395: 41,28 + 3396: 42,28 + 3397: 43,28 + 3398: 43,27 + 3399: 43,29 + 3400: 43,30 + 3445: 43,31 + 3446: 43,32 + 3447: 44,32 + 3448: 45,32 + 3449: 43,33 + 3450: 43,34 + 3451: 43,35 + 3452: 42,35 + 3453: 41,35 + 3454: 43,36 + 3455: 43,37 + 3456: 43,38 + 3457: 42,38 + 3458: 41,38 + 3459: 43,39 + 3460: 44,39 + 3461: 45,39 + 3462: 29,29 + 3463: 29,30 + 3464: 29,31 + 3465: 28,31 + 3466: 27,31 + 3467: 26,31 + 3468: 29,32 + 3469: 29,33 + 3470: 29,34 + 3471: 29,35 + 3472: 30,35 + 3473: 31,35 + 3474: 29,36 + 3475: 29,37 + 3476: 29,38 + 3477: 30,38 + 3478: 31,38 + 3479: 29,39 + - node: + color: '#52B4E996' + id: FullTileOverlayGreyscale + decals: + 555: 9,-11 + 586: 5,-16 + 587: 9,-13 + 2777: 24,-11 + 5205: 18,-22 + 5468: 31,-30 + 5566: 3,-25 + 5567: 4,-25 + 5568: 5,-25 + 5569: 6,-25 + 5570: 7,-25 + 5571: 8,-25 + 5572: 9,-25 + 5573: 10,-25 + 5574: 11,-25 + 5575: 10,-28 + 5576: 4,-28 + 5577: 4,-22 + 5578: 10,-22 + 5778: 12,-25 + 5779: 13,-25 + 5780: 13,-24 + 5781: 13,-23 + 5782: 13,-22 + 5783: 13,-21 + 5784: 13,-20 + 5785: 13,-19 + 5786: 13,-18 + 5787: 13,-17 + 5788: 13,-16 + 5789: 13,-15 + 5790: 13,-14 + 5791: 13,-13 + 5792: 14,-25 + 5793: 15,-25 + 5794: 16,-25 + 5795: 17,-25 + 5796: 18,-25 + 5797: 19,-25 + 5798: 20,-25 + 5799: 21,-25 + 5800: 21,-26 + 5801: 21,-27 + 5802: 21,-28 + 5803: 20,-28 + 5804: 19,-28 + 5805: 18,-28 + 5806: 17,-28 + 5807: 16,-28 + 5808: 15,-28 + 5809: 14,-28 + 5810: 13,-28 + 5811: 13,-27 + 5812: 13,-26 + 5813: 18,-24 + 5814: 18,-23 + 5815: 13,-29 + 5816: 13,-30 + 5817: 13,-31 + 5822: 25,-24 + 5823: 31,-24 + 5853: 37,-24 + 5854: 37,-23 + 5855: 37,-22 + 5856: 37,-21 + 5857: 37,-20 + 5858: 37,-19 + 5859: 37,-18 + 5860: 37,-17 + 5861: 37,-16 + 5862: 37,-15 + 5863: 37,-14 + 5864: 38,-17 + 5865: 39,-17 + 5902: 31,-23 + 5939: 25,-23 + 5975: 25,-35 + 6075: 1,-25 + 6076: 2,-25 + 7219: 4,-38 + 7220: 7,-35 + 7237: 38,-37 + 7238: 45,-40 + 7239: 42,-39 + 7300: 4,-14 + - node: + color: '#9FED5815' + id: FullTileOverlayGreyscale + decals: + 3184: 40,19 + 3185: 41,19 + 3186: 42,19 + 3187: 43,19 + - node: + color: '#9FED5896' + id: FullTileOverlayGreyscale + decals: + 2879: 29,1 + 2880: 29,2 + 2881: 29,3 + 2983: 29,4 + 2984: 29,5 + 2985: 29,6 + 2986: 29,7 + 2987: 29,8 + 3011: 28,7 + 3013: 36,7 + 3014: 34,7 + 3015: 33,7 + 3016: 32,7 + 3017: 31,7 + 3018: 30,7 + 3107: 28,14 + 3108: 29,14 + 3112: 30,16 + 3113: 31,16 + 3118: 33,14 + 3119: 33,15 + 3120: 33,16 + 3121: 33,17 + 3122: 33,18 + 3123: 33,19 + 3124: 33,20 + 3125: 36,18 + 3126: 36,17 + 3127: 36,16 + 3128: 36,15 + 3129: 36,14 + 3139: 37,13 + 3140: 38,13 + 3141: 38,12 + 3142: 37,12 + 3143: 37,19 + 3144: 38,18 + 3145: 39,18 + 3182: 31,14 + 3183: 31,15 + 3310: 19,27 + 4996: 7,58 + 4997: 7,59 + 4998: 7,60 + 5362: 40,-27 + 5363: 40,-28 + 5364: 40,-29 + 5365: 40,-30 + 5366: 40,-31 + 5367: 40,-32 + 5368: 39,-32 + 5369: 38,-32 + 5370: 41,-32 + 5371: 42,-32 + 5372: 43,-32 + 5373: 44,-32 + 5374: 45,-32 + 5375: 45,-31 + 5376: 45,-30 + 5893: 40,-26 + - node: + color: '#A4610696' + id: FullTileOverlayGreyscale + decals: + 602: -8,-10 + 603: -8,-11 + 604: -7,-11 + 616: -12,-11 + 617: -13,-11 + 618: -14,-10 + 619: -11,-9 + 643: -4,-19 + 644: -5,-17 + 658: -11,-19 + 659: -10,-20 + 669: -14,-18 + 670: -13,-16 + 671: -15,-16 + 672: -16,-16 + 673: -17,-16 + 674: -17,-17 + 693: -14,-13 + 694: -15,-13 + 695: -15,-14 + 696: -12,-14 + 697: -11,-13 + 698: -11,-16 + 699: -11,-17 + 700: -9,-17 + 722: -16,-9 + 723: -17,-9 + 724: -16,-12 + 732: -20,-14 + 733: -21,-15 + 734: -18,-12 + 735: -19,-12 + 736: -20,-12 + 737: -21,-12 + 757: -24,-15 + 758: -25,-14 + 759: -23,-13 + 760: -24,-12 + 772: -22,-10 + 773: -23,-10 + 802: -20,-10 + 803: -19,-10 + 804: -19,-9 + 805: -22,-5 + 806: -20,-5 + 807: -20,-3 + 808: -20,-7 + 809: -20,-8 + 835: -29,-6 + 836: -28,-6 + 837: -27,-6 + 838: -26,-6 + 839: -26,-5 + 840: -27,-5 + 841: -28,-5 + 842: -29,-5 + 871: -30,0 + 872: -30,-1 + 873: -30,-2 + 886: -32,6 + 887: -31,9 + 958: -32,10 + 959: -26,9 + 960: -26,10 + 961: -27,10 + 962: -26,11 + 963: -28,11 + 964: -30,10 + 965: -31,11 + 966: -31,12 + 967: -27,13 + 1003: -34,1 + 1004: -34,2 + 1005: -34,3 + 1006: -34,4 + 1007: -34,5 + 1008: -34,7 + 1009: -34,9 + 1010: -34,10 + 1011: -34,11 + 1012: -34,12 + 1013: -34,13 + 1014: -33,6 + 1015: -32,6 + 1016: -35,7 + 1017: -33,10 + 1024: -36,7 + 1025: -37,6 + 1026: -37,7 + 1027: -37,8 + 1028: -37,9 + 1029: -37,10 + 1030: -38,11 + 1031: -38,10 + 1032: -38,9 + 1033: -38,8 + 1034: -38,7 + 1035: -38,6 + 1036: -39,5 + 1037: -39,6 + 1038: -40,6 + 1039: -41,6 + 1040: -42,6 + 1041: -43,6 + 1042: -44,6 + 1043: -44,7 + 1044: -43,7 + 1045: -43,8 + 1046: -43,9 + 1047: -43,10 + 1048: -43,11 + 1049: -42,11 + 1050: -42,10 + 1051: -41,10 + 1052: -41,11 + 1053: -40,11 + 1054: -40,10 + 1055: -39,10 + 1056: -39,11 + 1061: -39,7 + 1062: -40,7 + 1063: -41,7 + 1064: -42,7 + 1065: -42,8 + 1066: -42,9 + 1067: -41,9 + 1068: -40,9 + 1069: -39,9 + 1070: -39,8 + 1071: -40,8 + 1072: -41,8 + 1095: -38,-6 + 1096: -39,-6 + 1097: -40,-6 + 1098: -38,-5 + 1099: -39,-5 + 1100: -40,-5 + 1101: -41,-5 + 1102: -42,-5 + 1103: -43,-5 + 1104: -43,-4 + 1105: -43,-3 + 1106: -43,-2 + 1107: -42,-2 + 1108: -41,-2 + 1109: -40,-2 + 1110: -39,-2 + 1111: -38,-2 + 1112: -38,-3 + 1113: -38,-4 + 1114: -38,-1 + 1115: -38,0 + 1116: -39,0 + 1117: -40,0 + 1118: -41,0 + 1119: -42,0 + 1120: -43,0 + 1121: -43,1 + 1122: -43,2 + 1123: -43,3 + 1124: -42,3 + 1125: -41,3 + 1126: -40,3 + 1127: -39,3 + 1128: -38,3 + 1129: -38,2 + 1130: -38,1 + 1131: -40,4 + 1132: -39,4 + 1133: -38,4 + 1134: -37,4 + 2679: -34,8 + 2680: -34,6 + 7398: -42,-21 + 7399: -41,-20 + 7403: -47,-17 + 7412: -47,-21 + - node: + color: '#D381C996' + id: FullTileOverlayGreyscale + decals: + 1221: -34,0 + 1222: -34,-1 + 1223: -34,-2 + 1224: -34,-3 + 1225: -34,-4 + 1226: -34,-5 + 1227: -34,-6 + 1228: -34,-7 + 1229: -34,-8 + 1230: -34,-9 + 1231: -34,-10 + 1232: -34,-11 + 1233: -34,-12 + 1234: -34,-13 + 1235: -34,-14 + 1236: -34,-15 + 1277: -34,-16 + 1278: -34,-17 + 1286: -34,-18 + 1297: -38,-24 + 1298: -37,-24 + 1383: -40,-33 + 1384: -39,-33 + 1386: -40,-30 + 1491: -30,-26 + 1492: -30,-27 + 1493: -30,-28 + 1494: -30,-29 + 1495: -30,-30 + 1496: -30,-31 + 1497: -30,-32 + 1498: -31,-32 + 1499: -32,-32 + 1500: -33,-32 + 1501: -34,-32 + 1502: -34,-33 + 1503: -34,-34 + 1504: -34,-35 + 1505: -29,-31 + 1506: -28,-31 + 1597: -34,-36 + 1598: -34,-37 + 1599: -34,-38 + 1600: -34,-39 + 1601: -34,-40 + 1602: -34,-41 + 1603: -34,-42 + 1604: -34,-43 + 1641: -27,-31 + 1642: -26,-31 + 1643: -26,-30 + 1644: -26,-29 + 1645: -26,-28 + 1646: -25,-28 + 1652: -28,-23 + 1653: -23,-26 + 1774: -24,-28 + 1775: -23,-28 + 1776: -23,-27 + 1777: -22,-28 + 1778: -22,-29 + 1779: -21,-28 + 1780: -20,-28 + 1781: -19,-28 + 1782: -18,-28 + 1783: -17,-28 + 1784: -17,-27 + 1785: -17,-26 + 1786: -16,-28 + 1787: -15,-28 + 1788: -14,-28 + 1789: -13,-28 + 1790: -12,-28 + 1791: -11,-28 + 1792: -10,-28 + 1793: -9,-28 + 1794: -11,-27 + 1795: -11,-26 + 1796: -11,-25 + 1797: -11,-24 + 1798: -11,-23 + 2078: -8,-28 + 2079: -7,-28 + 2080: -6,-28 + 2081: -5,-28 + 2082: -4,-28 + 2083: -3,-28 + 2084: -2,-28 + 2085: -8,-29 + 2086: -8,-30 + 2106: -42,-43 + 2107: -43,-43 + 2356: -24,-45 + 2361: -21,-47 + 2367: -21,-50 + 2460: -26,-55 + 2461: -26,-56 + 2462: -23,-57 + - node: + color: '#D4D4D428' + id: FullTileOverlayGreyscale + decals: + 1218: -40,-11 + 1219: -40,-12 + 1220: -40,-10 + 2117: -43,-41 + 2118: -43,-40 + 2119: -39,-42 + 2120: -38,-42 + 2121: -38,-42 + 2123: -45,-39 + 2124: -45,-40 + 2125: -45,-41 + 2144: -43,-31 + 2145: -43,-30 + 2146: -44,-30 + 2147: -44,-31 + 2148: -45,-31 + 2149: -45,-30 + 2150: -44,-32 + 2191: -37,-48 + 2192: -37,-47 + 2207: -34,-45 + 2208: -34,-46 + 2209: -34,-47 + 2210: -34,-48 + 2211: -34,-49 + 2212: -35,-49 + 2213: -35,-48 + 2215: -33,-48 + 2216: -32,-48 + 2219: -34,-50 + 2220: -34,-51 + 2221: -35,-51 + 2222: -35,-50 + 2223: -36,-50 + 2224: -37,-50 + 2225: -38,-50 + 2226: -39,-50 + 2227: -40,-50 + 2228: -40,-51 + 2229: -40,-52 + 2230: -40,-53 + 2265: -41,-51 + 2266: -42,-51 + 2267: -43,-51 + 2268: -43,-50 + 2269: -42,-50 + 3703: 37,-14 + 3704: 37,-13 + 3705: 37,-12 + 4326: -20,30 + 7339: -45,-42 + 7340: -40,-42 + 7341: -41,-42 + - node: + angle: 1.5707963267948966 rad + color: '#D4D4D428' + id: FullTileOverlayGreyscale + decals: + 2135: -45,-37 + 2136: -45,-36 + 2137: -45,-35 + - node: + color: '#DE3A3A96' + id: FullTileOverlayGreyscale + decals: + 495: -15,14 + 496: -15,15 + 497: -15,16 + 3890: 44,-14 + 3891: 45,-15 + 3892: 46,-15 + 3893: 47,-15 + 3917: -18,14 + 3920: -19,16 + 3921: -22,15 + 3952: -28,22 + 4015: -1,19 + 4016: 0,19 + 4026: -2,19 + 4027: -3,19 + 4028: -4,19 + 4029: -5,19 + 4030: -6,19 + 4031: -7,19 + 4032: -8,19 + 4033: -9,19 + 4034: -10,19 + 4035: -11,19 + 4036: -12,19 + 4037: -13,19 + 4038: -14,19 + 4039: -15,19 + 4040: -16,19 + 4041: -16,20 + 4085: -22,25 + 4086: -22,24 + 4087: -21,24 + 4088: -21,25 + 4089: -20,25 + 4090: -20,24 + 4091: -19,24 + 4092: -19,25 + 4132: -15,21 + 4133: -17,21 + 4134: -17,24 + 4135: -15,24 + 4136: -16,25 + 4137: -16,26 + 4177: -16,27 + 4178: -16,28 + 4179: -17,28 + 4180: -16,29 + 4181: -15,28 + 4182: -14,28 + 4183: -13,28 + 4184: -12,28 + 4185: -11,28 + 4186: -10,28 + 4187: -9,28 + 4188: -8,28 + 4189: -7,28 + 4190: -6,28 + 4191: -5,28 + 4192: -4,28 + 4193: -4,29 + 4194: -13,29 + 4195: -7,30 + 4196: -6,30 + 4197: -4,30 + 4227: -4,31 + 4228: -13,30 + 4229: -12,36 + 4230: -12,35 + 4231: -12,34 + 4232: -11,34 + 4233: -11,35 + 4234: -10,36 + 4235: -13,36 + 4236: -13,37 + 4265: -16,30 + 4266: -16,31 + 4267: -16,32 + 4268: -17,32 + 4269: -17,33 + 4270: -16,33 + 4271: -16,34 + 4272: -17,34 + 4273: -17,35 + 4274: -16,35 + 4322: -20,35 + 4323: -20,34 + 4324: -20,33 + 4325: -20,32 + 4333: -10,37 + 4334: -10,38 + 4335: -10,39 + 4336: -10,40 + 4375: -32,26 + 4376: -31,26 + 4377: -30,26 + 4378: -30,25 + 4379: -32,25 + 4380: -31,25 + 4419: -42,22 + 4420: -41,22 + 4421: -40,22 + 4422: -40,21 + 4423: -40,20 + 4424: -41,20 + 4425: -42,20 + 4426: -43,20 + 4427: -39,20 + 4428: -38,20 + 4429: -37,20 + 4430: -38,19 + 4431: -37,21 + 4432: -37,22 + 4433: -37,23 + 4434: -37,24 + 4435: -37,25 + 4436: -37,26 + 4437: -37,27 + 4471: -37,28 + 4472: -37,29 + 4473: -38,29 + 4474: -39,29 + 4475: -36,29 + 4476: -35,29 + 4483: -24,37 + 4484: -24,36 + 4485: -24,35 + 4486: -24,34 + 4487: -24,33 + 4488: -24,32 + 4489: -24,31 + 4490: -24,30 + 4491: -24,29 + 4492: -25,29 + 4493: -26,29 + 4494: -27,29 + 4495: -28,29 + 4496: -29,29 + 4497: -30,29 + 4498: -31,29 + 4499: -32,29 + 4500: -33,29 + 4501: -34,29 + 4502: -25,35 + 4503: -26,35 + 4504: -24,28 + 4505: -24,27 + 4506: -24,26 + 4507: -23,28 + 4508: -22,28 + 4509: -21,28 + 4510: -20,28 + 4511: -19,28 + 4512: -18,28 + 4566: -3,35 + 4567: -5,35 + 4568: -5,32 + 4569: -3,32 + 4570: -2,37 + 4571: -2,38 + 4597: -1,37 + 4598: -1,38 + 4599: 0,38 + 4600: 0,37 + 4990: -6,58 + 4991: -6,59 + 4992: -6,60 + - node: + color: '#EFB34195' + id: FullTileOverlayGreyscale + decals: + 6297: 8,-59 + 6298: 8,-60 + 6299: 8,-61 + 6300: 6,-59 + 6301: 6,-60 + 6302: 6,-61 + - node: + color: '#EFB34196' + id: FullTileOverlayGreyscale + decals: + 2529: -11,-53 + 2558: -5,-49 + 4926: -2,62 + 4927: -1,62 + 4928: 0,62 + 4929: 1,62 + 4930: 2,62 + 4931: 3,62 + 6221: 6,-47 + 6238: 7,-48 + 6239: 7,-49 + 6240: 7,-50 + 6241: 7,-51 + 6242: 7,-52 + 6243: 8,-48 + 6244: 6,-51 + 6245: 5,-51 + 6246: 7,-53 + 6247: 8,-53 + 6248: 7,-54 + 6249: 7,-55 + 6250: 7,-56 + 6251: 7,-57 + 6252: 6,-56 + 6253: 9,-48 + 6254: 9,-53 + 6255: -4,-53 + 6256: -1,-52 + 6527: 14,-67 + 6528: 13,-67 + 6529: 12,-67 + 6530: 11,-67 + 6531: 10,-67 + 6551: 6,-68 + 6552: 6,-67 + 6553: 6,-66 + 6554: 6,-65 + 6555: 6,-64 + 6556: 5,-64 + 6557: 4,-64 + 6558: 3,-64 + 6559: 2,-64 + 6560: 1,-64 + 6561: 0,-64 + 6562: -1,-64 + 6563: -2,-64 + 6564: -3,-64 + 6565: -4,-64 + 6566: -5,-64 + 6567: -6,-64 + 6568: -6,-65 + 6569: -6,-66 + 6570: -6,-67 + 6571: -6,-68 + 6572: -6,-72 + 6573: -6,-73 + 6574: 6,-72 + 6575: 6,-73 + 6857: 20,-52 + 6858: 20,-51 + 6859: 21,-51 + 6860: 21,-52 + 6861: 29,-53 + 6862: 29,-52 + 6863: 30,-52 + 6864: 30,-53 + 6865: 25,-63 + 6866: 26,-63 + 6867: 27,-63 + 6868: 28,-63 + 6869: 29,-63 + 7096: 10,-48 + - node: + color: '#FF924493' + id: FullTileOverlayGreyscale + decals: + 5339: 30,-20 + - node: + color: '#FFFFFFFF' + id: FullTileOverlayGreyscale + decals: + 1270: -34,-16 + 1271: -34,-17 + 1284: -34,-18 + 1285: -33,-18 + 1440: -30,-27 + 1441: -30,-26 + 1442: -30,-28 + 1443: -30,-29 + 1444: -30,-30 + 1445: -30,-31 + 1446: -30,-32 + 1447: -31,-32 + 1448: -32,-32 + 1449: -33,-32 + 1450: -34,-32 + 1451: -35,-32 + 1452: -36,-32 + 1453: -36,-31 + 1454: -35,-31 + 1455: -34,-31 + 1456: -33,-31 + 1457: -32,-31 + 1458: -31,-31 + 1459: -36,-30 + 1460: -36,-29 + 1461: -36,-28 + 1462: -34,-33 + 1463: -34,-34 + 1464: -34,-35 + 1465: -29,-32 + 1466: -29,-31 + 1467: -28,-31 + 1570: -34,-36 + 1571: -34,-37 + 1572: -34,-38 + 1573: -34,-39 + 1574: -34,-40 + 1575: -34,-41 + 1576: -34,-42 + 1577: -34,-43 + 1578: -35,-43 + 1579: -35,-44 + 1580: -34,-44 + 1623: -27,-31 + 1624: -26,-31 + 1625: -26,-30 + 1626: -26,-29 + 1627: -26,-28 + 1628: -25,-28 + 1650: -28,-23 + 1651: -23,-26 + 1715: -23,-28 + 1716: -23,-27 + 1717: -22,-28 + 1718: -21,-28 + 1719: -20,-28 + 1720: -19,-28 + 1721: -18,-28 + 1722: -17,-28 + 1723: -17,-27 + 1724: -17,-26 + 1725: -22,-29 + 1726: -16,-28 + 1727: -15,-28 + 1728: -14,-28 + 1729: -13,-28 + 1730: -12,-28 + 1731: -11,-28 + 1732: -11,-27 + 1733: -11,-26 + 1734: -11,-25 + 1735: -11,-24 + 1736: -11,-23 + 1737: -11,-22 + 1738: -10,-28 + 1739: -9,-28 + 1744: -24,-28 + 1799: -22,-30 + 1800: -22,-31 + 1801: -22,-32 + 1802: -22,-33 + 1803: -22,-34 + 1804: -21,-33 + 1805: -21,-34 + 1867: -8,-28 + 1868: -8,-29 + 1869: -8,-30 + 1870: -8,-31 + 1871: -8,-32 + 1872: -8,-33 + 1873: -8,-34 + 1874: -8,-35 + 1884: -8,-36 + 1885: -8,-37 + 1886: -9,-37 + 1887: -9,-36 + 1888: -10,-36 + 1889: -10,-37 + 1890: -11,-37 + 1891: -11,-36 + 1892: -12,-36 + 1893: -12,-37 + 1894: -13,-37 + 1895: -13,-36 + 1896: -13,-38 + 1897: -12,-38 + 1898: -12,-39 + 1899: -13,-39 + 1956: -13,-50 + 1957: -12,-50 + 1958: -12,-49 + 1959: -13,-49 + 1960: -13,-48 + 1961: -12,-48 + 1962: -12,-47 + 1963: -13,-47 + 1964: -13,-46 + 1965: -12,-46 + 1966: -12,-45 + 1967: -13,-45 + 1968: -13,-44 + 1969: -12,-44 + 1970: -12,-43 + 1971: -13,-43 + 1972: -13,-42 + 1973: -12,-42 + 1974: -12,-41 + 1975: -13,-41 + 1976: -13,-40 + 1977: -12,-40 + 2062: -7,-28 + 2063: -6,-28 + 2064: -5,-28 + 2065: -4,-28 + 2066: -3,-28 + 2067: -2,-28 + 5154: 13,-13 + 5155: 13,-14 + 5156: 13,-15 + 5157: 13,-16 + 5158: 13,-17 + 5159: 15,-15 + 5160: 16,-15 + 5161: 17,-15 + 5162: 17,-16 + 5163: 16,-16 + 5164: 15,-16 + 5193: 17,-20 + 5194: 18,-20 + 5195: 19,-20 + 5196: 19,-21 + 5197: 18,-21 + 5198: 17,-21 + 5206: 25,-22 + 5207: 26,-22 + 5208: 26,-21 + 5209: 25,-21 + 5210: 24,-21 + 5211: 23,-21 + 5212: 22,-21 + 5213: 22,-20 + 5214: 23,-20 + 5215: 24,-20 + 5216: 25,-20 + 5217: 26,-20 + 5218: 26,-19 + 5219: 25,-19 + 5220: 24,-19 + 5221: 23,-19 + 5222: 22,-19 + 5223: 22,-18 + 5224: 23,-18 + 5225: 24,-18 + 5226: 25,-18 + 5227: 26,-18 + 5257: 28,-16 + 5258: 28,-17 + 5259: 28,-18 + 5260: 28,-19 + 5261: 28,-20 + 5262: 28,-21 + 5263: 30,-22 + 5264: 31,-22 + 5265: 31,-22 + 5266: 32,-22 + 5267: 33,-22 + 5268: 34,-21 + 5269: 33,-21 + 5270: 32,-21 + 5271: 31,-21 + 5272: 30,-21 + 5273: 29,-21 + 5274: 29,-20 + 5275: 30,-20 + 5276: 31,-20 + 5277: 32,-20 + 5278: 33,-20 + 5279: 34,-20 + 5280: 34,-19 + 5281: 33,-19 + 5282: 32,-19 + 5283: 31,-19 + 5284: 30,-19 + 5285: 29,-19 + 5286: 29,-18 + 5287: 30,-18 + 5288: 31,-18 + 5289: 32,-18 + 5290: 33,-18 + 5291: 34,-18 + 5292: 34,-17 + 5293: 33,-17 + 5294: 32,-17 + 5295: 31,-17 + 5296: 30,-17 + 5297: 29,-17 + 5298: 29,-16 + 5299: 30,-16 + 5300: 31,-16 + 5301: 32,-16 + 5302: 33,-16 + 5303: 34,-16 + 5311: 34,-22 + 5315: 29,-22 + 5316: 28,-22 + 5432: 26,-27 + 5433: 27,-27 + 5434: 26,-28 + 5435: 27,-28 + 5436: 27,-29 + 5437: 27,-30 + 5438: 26,-30 + 5439: 26,-29 + 5440: 26,-31 + 5441: 26,-32 + 5442: 27,-32 + 5443: 27,-31 + 5444: 25,-29 + 5445: 31,-31 + 5446: 31,-30 + 5447: 31,-29 + 5448: 32,-29 + 5482: 5,-29 + 5483: 6,-29 + 5484: 6,-30 + 5485: 5,-30 + 5486: 5,-31 + 5487: 6,-31 + 5488: 6,-32 + 5489: 5,-32 + 5490: 7,-32 + 5491: 7,-31 + 5492: 8,-31 + 5493: 8,-32 + 5494: 9,-32 + 5495: 9,-31 + 5496: 10,-31 + 5497: 10,-32 + 5498: 11,-32 + 5499: 11,-31 + 5516: 8,-21 + 5517: 9,-21 + 5518: 8,-20 + 5519: 8,-19 + 5520: 9,-19 + 5521: 10,-20 + 5522: 10,-19 + 5523: 11,-19 + 5528: 9,-20 + 5531: 3,-26 + 5532: 3,-25 + 5533: 3,-24 + 5534: 4,-24 + 5535: 4,-25 + 5536: 4,-26 + 5537: 5,-25 + 5538: 6,-25 + 5539: 7,-25 + 5540: 8,-25 + 5541: 9,-25 + 5542: 10,-25 + 5543: 10,-26 + 5544: 10,-24 + 5545: 10,-23 + 5546: 9,-23 + 5547: 8,-23 + 5548: 7,-23 + 5549: 6,-23 + 5550: 5,-23 + 5551: 4,-23 + 5552: 4,-22 + 5553: 10,-22 + 5554: 10,-27 + 5555: 10,-28 + 5556: 9,-27 + 5557: 8,-27 + 5558: 7,-27 + 5559: 6,-27 + 5560: 5,-27 + 5561: 4,-27 + 5562: 4,-28 + 5563: 11,-26 + 5564: 11,-25 + 5565: 11,-24 + 5625: 13,-18 + 5626: 13,-19 + 5627: 13,-20 + 5628: 13,-21 + 5629: 13,-22 + 5630: 13,-23 + 5631: 13,-24 + 5632: 13,-25 + 5633: 13,-26 + 5634: 13,-27 + 5635: 13,-28 + 5636: 13,-29 + 5637: 13,-30 + 5638: 13,-31 + 5639: 12,-31 + 5640: 12,-25 + 5641: 14,-20 + 5642: 14,-21 + 5643: 14,-25 + 5644: 15,-25 + 5645: 16,-25 + 5646: 17,-25 + 5647: 18,-25 + 5648: 19,-25 + 5649: 20,-25 + 5650: 14,-28 + 5651: 15,-28 + 5652: 16,-28 + 5653: 18,-28 + 5654: 17,-28 + 5655: 19,-28 + 5656: 20,-28 + 5657: 18,-23 + 5658: 18,-24 + 5659: 21,-28 + 5660: 21,-27 + 5661: 21,-26 + 5662: 21,-25 + 5663: 22,-28 + 5664: 22,-27 + 5665: 22,-26 + 5666: 34,-25 + 5667: 35,-25 + 5668: 25,-24 + 5671: 31,-24 + 5672: 36,-25 + 5673: 37,-25 + 5674: 38,-25 + 5675: 39,-25 + 5676: 40,-25 + 5677: 40,-26 + 5678: 41,-25 + 5679: 42,-25 + 5680: 37,-24 + 5681: 37,-23 + 5682: 37,-22 + 5683: 37,-21 + 5684: 37,-20 + 5685: 37,-19 + 5686: 37,-18 + 5687: 37,-17 + 5688: 37,-16 + 5689: 37,-15 + 5690: 37,-14 + 5691: 38,-17 + 5692: 39,-17 + 5818: 12,-32 + 5819: 13,-32 + 5826: 22,-25 + 5827: 23,-25 + 5828: 24,-25 + 5829: 25,-25 + 5830: 26,-25 + 5831: 27,-25 + 5832: 28,-25 + 5833: 29,-25 + 5834: 30,-25 + 5835: 31,-25 + 5836: 32,-25 + 5837: 33,-25 + 5901: 31,-23 + 5938: 25,-23 + - node: + color: '#222222E5' + id: HalfTileOverlayGreyscale + decals: + 284: -7,-8 + 285: -6,-8 + 286: -5,-9 + 287: -3,-10 + 288: -2,-10 + 289: 3,-10 + 290: 4,-10 + 291: 6,-9 + 292: 7,-8 + 293: 8,-8 + 3779: 34,-11 + 3780: 35,-11 + 3781: 36,-11 + 3782: 37,-11 + 3783: 38,-11 + 3784: 39,-11 + 3785: 40,-11 + 3786: 41,-11 + 3835: 42,-5 + 3836: 41,-5 + 3837: 40,-5 + 3838: 39,-5 + 3839: 38,-5 + 3840: 37,-5 + 3841: 36,-5 + 3842: 33,-5 + - node: + color: '#334E6DC8' + id: HalfTileOverlayGreyscale + decals: + 5104: 3,84 + 5105: -1,84 + 6500: 2,26 + 6516: 5,27 + 6517: 6,27 + 6518: 7,27 + 6519: 8,27 + - node: + color: '#50BCB193' + id: HalfTileOverlayGreyscale + decals: + 3382: 39,27 + 3383: 37,27 + 3384: 36,27 + 3385: 35,27 + 3386: 34,27 + 3387: 33,27 + 3388: 32,27 + - node: + color: '#52B4E996' + id: HalfTileOverlayGreyscale + decals: + 5466: 31,-31 + 5530: 9,-19 + 5586: 10,-23 + 5587: 9,-23 + 5588: 8,-23 + 5589: 7,-23 + 5590: 5,-23 + 5591: 4,-23 + 5592: 6,-23 + 5840: 22,-25 + 5841: 23,-25 + 5842: 24,-25 + 5843: 25,-25 + 5844: 28,-25 + 5845: 29,-25 + 5846: 30,-25 + 5847: 31,-25 + 5848: 32,-25 + 5849: 33,-25 + 5850: 34,-25 + 5851: 35,-25 + 5852: 36,-25 + 5866: 38,-25 + 5867: 39,-25 + 5868: 40,-25 + 5869: 41,-25 + 5870: 42,-25 + 5873: 37,-25 + 7301: 5,-12 + - node: + color: '#9FED5896' + id: HalfTileOverlayGreyscale + decals: + 2989: 27,6 + 2990: 26,6 + 2991: 25,6 + 2992: 24,6 + 2993: 23,6 + 2994: 22,6 + 2995: 21,6 + 2996: 20,6 + 2997: 19,6 + 2998: 18,6 + 2999: 17,6 + 3130: 35,18 + 3131: 34,18 + - node: + color: '#A4610696' + id: HalfTileOverlayGreyscale + decals: + 7396: -43,-18 + - node: + color: '#D381C996' + id: HalfTileOverlayGreyscale + decals: + 98: -4,0 + 99: -5,0 + 100: -6,0 + 101: -7,0 + 102: -8,0 + 103: -9,0 + 104: -10,0 + 105: -11,0 + 106: -12,0 + 482: -13,0 + 483: -14,0 + 484: -15,0 + 485: -16,0 + 486: -17,0 + 487: -18,0 + 488: -19,0 + 546: 8,13 + 874: -20,0 + 875: -21,0 + 876: -22,0 + 877: -23,0 + 878: -24,0 + 879: -25,0 + 880: -26,0 + 881: -27,0 + 882: -28,0 + 883: -29,0 + 884: -31,0 + 885: -32,0 + 1237: -33,0 + 1605: -34,-44 + 1606: -35,-44 + 2092: -36,-44 + 2093: -37,-44 + 2094: -38,-44 + 2095: -39,-44 + 2096: -40,-44 + 2097: -41,-44 + 2098: -42,-44 + 2099: -43,-44 + - node: + color: '#D4D4D428' + id: HalfTileOverlayGreyscale + decals: + 459: -12,2 + 460: -14,2 + 461: -18,2 + 462: -19,2 + 2151: -43,-32 + 2152: -45,-32 + 2197: -37,-49 + 2608: -20,2 + 2609: -21,2 + 2610: -22,2 + 2611: -23,2 + 2612: -24,2 + 2613: -25,2 + 2614: -26,2 + 2615: -27,2 + 2616: -28,2 + 2617: -29,2 + 2618: -30,2 + 2619: -31,2 + 2620: -32,2 + 2711: 13,2 + 2712: 15,2 + 2713: 16,2 + 2714: 17,2 + 3497: 27,2 + 3498: 26,2 + 3499: 25,2 + 3500: 24,2 + 3501: 23,2 + 3502: 22,2 + 3503: 21,2 + 3504: 20,2 + 3505: 19,2 + 3506: 18,2 + 3516: 31,2 + 3517: 32,2 + 3518: 33,2 + 3519: 34,2 + 3520: 35,2 + 3530: 35,8 + 3531: 34,8 + 3532: 33,8 + 3533: 32,8 + 3534: 31,8 + 3540: 17,10 + 3541: 18,10 + 3542: 19,10 + 3587: 27,33 + 3603: 31,30 + 3604: 32,30 + 3605: 33,30 + 3606: 34,30 + 3607: 35,30 + 3608: 36,30 + 3609: 37,30 + 3610: 38,30 + 3611: 39,30 + 3726: 34,-6 + 3727: 35,-6 + 3728: 36,-6 + 3729: 37,-6 + 3730: 38,-6 + 3731: 39,-6 + 3732: 40,-6 + 3733: 41,-6 + 4042: -3,20 + 4043: -4,20 + 4044: -5,20 + 4045: -6,20 + 4046: -7,20 + 4047: -8,20 + 4048: -9,20 + 4049: -10,20 + 4050: -11,20 + 4051: -12,20 + 4052: -13,20 + 4053: -14,20 + 4175: -25,25 + 4176: -26,25 + 4217: -6,29 + 4218: -7,29 + 4219: -8,29 + 4220: -9,29 + 4221: -10,29 + 4222: -11,29 + 4279: -17,36 + 4280: -16,36 + 4316: -20,36 + 4392: -39,37 + 4393: -40,37 + 4394: -41,37 + 4395: -42,37 + 4479: -38,30 + 4480: -37,30 + 4481: -36,30 + 4513: -34,30 + 4514: -33,30 + 4515: -32,30 + 4516: -31,30 + 4517: -30,30 + 4518: -29,30 + 4519: -28,30 + 4520: -27,30 + 4521: -26,30 + 4536: -22,29 + 4537: -21,29 + 4538: -20,29 + 4539: -19,29 + 4540: -18,29 + 6174: 8,-40 + 6175: 7,-40 + 6176: 6,-40 + 6177: 5,-40 + 6178: 4,-40 + 6386: -1,-56 + 6387: -2,-56 + 6388: -3,-56 + 6389: -4,-56 + 6390: -5,-56 + 6391: -6,-56 + 6392: -7,-56 + 6934: 29,-64 + 6935: 28,-64 + 6936: 27,-64 + 6937: 26,-64 + 6938: 25,-64 + 6945: 30,-54 + 6946: 29,-54 + 6971: 23,-50 + 6972: 24,-50 + 6973: 25,-50 + 6974: 26,-50 + 6975: 27,-50 + 6976: 28,-50 + 6977: 29,-50 + 6978: 30,-50 + 6979: 31,-50 + 7187: 11,-41 + 7188: 12,-41 + 7189: 14,-41 + 7190: 13,-41 + 7191: 15,-41 + 7192: 16,-41 + 7193: 17,-41 + 7194: 18,-41 + 7195: 19,-41 + 7196: 20,-41 + 7197: 21,-41 + 7198: 22,-41 + 7199: 23,-41 + 7200: 24,-41 + 7201: 25,-41 + 7202: 26,-41 + 7203: 27,-41 + 7204: 28,-41 + 7205: 29,-41 + 7209: 31,-42 + - node: + color: '#D4D4D496' + id: HalfTileOverlayGreyscale + decals: + 5403: 36,-29 + - node: + color: '#DE3A3A96' + id: HalfTileOverlayGreyscale + decals: + 2763: 29,-3 + 2764: 28,-3 + 3907: 45,-17 + 4131: -16,23 + 4245: -8,34 + 4247: -10,35 + 4573: -4,34 + 4574: -4,40 + 4575: -5,40 + 4576: -6,40 + 5515: 5,-19 + 6229: 3,-49 + - node: + color: '#EFB34196' + id: HalfTileOverlayGreyscale + decals: + 6154: 1,-42 + 6155: 2,-42 + 6164: 9,-42 + 6165: 8,-42 + 6166: 7,-42 + 6167: 4,-42 + 6215: 0,-47 + 6216: 1,-47 + 6217: 2,-47 + 6218: 3,-47 + 6219: 4,-47 + 6220: 5,-47 + - node: + color: '#FFFFFFFF' + id: HalfTileOverlayGreyscale + decals: + 71: 5,0 + 72: 6,0 + 73: 7,0 + 74: 8,0 + 75: 9,0 + 76: 10,0 + 77: 11,0 + 78: 12,0 + 79: 13,0 + 833: -28,-6 + 834: -27,-6 + 1283: -33,-24 + 1484: -32,-33 + 1485: -31,-33 + 1486: -30,-33 + 1487: -29,-33 + 1633: -26,-32 + 1634: -27,-32 + 1647: -24,-29 + 1764: -20,-29 + 1765: -19,-29 + 1766: -18,-29 + 1767: -17,-29 + 1768: -16,-29 + 1769: -15,-29 + 1770: -14,-29 + 1771: -13,-29 + 1772: -12,-29 + 1773: -11,-29 + 2069: -10,-29 + 2070: -6,-29 + 2075: -4,-29 + 2076: -3,-29 + 2832: 14,0 + 2833: 15,0 + 2834: 16,0 + 2835: 17,0 + 2836: 18,0 + 2837: 19,0 + 2838: 20,0 + 2839: 21,0 + 2840: 22,0 + 2841: 23,0 + 2842: 24,0 + 2843: 25,0 + 2844: 26,0 + 2845: 27,0 + 2846: 28,0 + 2847: 29,0 + 2848: 30,0 + 2849: 31,0 + 2850: 32,0 + 2851: 33,0 + 2968: 23,9 + 2969: 24,9 + 2970: 25,9 + 5170: 15,-17 + 5171: 16,-17 + 5172: 17,-17 + 5173: 19,-16 + 5709: 15,-29 + 5710: 16,-29 + 5711: 17,-29 + 5712: 18,-29 + 5713: 19,-29 + 5714: 20,-29 + 5715: 21,-29 + 5716: 22,-29 + 5720: 24,-26 + 5721: 25,-26 + 5724: 28,-26 + 5725: 29,-26 + 5726: 30,-26 + 5727: 31,-26 + 5728: 32,-26 + 5729: 33,-26 + 5730: 34,-26 + 5731: 35,-26 + 5732: 36,-26 + 5733: 37,-26 + 5874: 38,-26 + - node: + color: '#222222E5' + id: HalfTileOverlayGreyscale180 + decals: + 235: -3,11 + 236: -2,11 + 237: 3,11 + 238: 4,11 + 239: -5,10 + 240: 6,10 + 241: -6,9 + 242: -7,9 + 269: 3,-4 + 270: -2,-4 + 304: 8,9 + 305: 7,9 + 3787: 41,-6 + 3788: 40,-6 + 3789: 39,-6 + 3790: 38,-6 + 3791: 37,-6 + 3792: 36,-6 + 3793: 35,-6 + 3794: 34,-6 + 3818: 33,-12 + 3819: 34,-12 + 3820: 35,-12 + 3823: 39,-12 + 3824: 40,-12 + 3825: 41,-12 + 3826: 42,-12 + - node: + color: '#334E6DC8' + id: HalfTileOverlayGreyscale180 + decals: + 5070: 6,71 + 5071: 8,71 + 5072: 9,71 + 5073: -4,71 + 5074: -6,71 + 5075: -7,71 + 6501: 2,26 + 6520: 5,24 + 6521: 6,24 + 6522: 7,24 + 6523: 8,24 + - node: + color: '#50BCB193' + id: HalfTileOverlayGreyscale180 + decals: + 3374: 32,29 + 3375: 33,29 + 3376: 34,29 + 3377: 35,29 + 3378: 36,29 + 3379: 37,29 + 3380: 38,29 + 3381: 39,29 + - node: + color: '#52B4E996' + id: HalfTileOverlayGreyscale180 + decals: + 5467: 31,-29 + 5529: 9,-20 + 5579: 10,-27 + 5580: 9,-27 + 5581: 8,-27 + 5582: 7,-27 + 5583: 6,-27 + 5584: 5,-27 + 5585: 4,-27 + 5871: 42,-25 + 5872: 41,-25 + 5942: 13,-36 + 5974: 24,-37 + 7221: 8,-38 + 7246: 43,-38 + 7247: 42,-38 + - node: + color: '#9FED5896' + id: HalfTileOverlayGreyscale180 + decals: + 62: 5,1 + 63: 6,1 + 64: 7,1 + 65: 8,1 + 66: 9,1 + 67: 10,1 + 68: 11,1 + 69: 12,1 + 70: 13,1 + 2864: 14,1 + 2865: 15,1 + 2866: 16,1 + 2867: 17,1 + 2868: 18,1 + 2869: 19,1 + 2870: 20,1 + 2871: 21,1 + 2872: 22,1 + 2873: 23,1 + 2874: 24,1 + 2875: 25,1 + 2876: 26,1 + 2877: 27,1 + 2878: 28,1 + 3000: 17,7 + 3001: 18,7 + 3002: 19,7 + 3003: 20,7 + 3004: 21,7 + 3005: 22,7 + 3006: 23,7 + 3007: 24,7 + 3008: 25,7 + 3009: 26,7 + 3010: 27,7 + 3132: 35,14 + 3133: 34,14 + 5877: 22,-25 + 5878: 23,-25 + 5879: 24,-25 + 5880: 25,-25 + 5881: 28,-25 + 5882: 29,-25 + 5883: 30,-25 + 5884: 31,-25 + 5885: 32,-25 + 5886: 33,-25 + 5887: 34,-25 + 5888: 35,-25 + 5889: 36,-25 + 5890: 37,-25 + 5891: 38,-25 + 5892: 39,-25 + 5894: 40,-25 + - node: + color: '#A4610696' + id: HalfTileOverlayGreyscale180 + decals: + 107: -4,1 + 108: -5,1 + 109: -6,1 + 110: -7,1 + 111: -8,1 + 112: -9,1 + 113: -10,1 + 114: -11,1 + 115: -12,1 + 475: -13,1 + 476: -14,1 + 477: -15,1 + 478: -16,1 + 479: -17,1 + 480: -18,1 + 481: -19,1 + 858: -20,1 + 859: -21,1 + 860: -22,1 + 861: -23,1 + 862: -24,1 + 863: -25,1 + 864: -26,1 + 865: -27,1 + 866: -28,1 + 867: -29,1 + 868: -30,1 + 869: -31,1 + 870: -32,1 + 892: -30,4 + 893: -29,4 + 1178: -33,1 + 1188: -43,-13 + 1189: -44,-13 + 1190: -45,-13 + - node: + color: '#D381C996' + id: HalfTileOverlayGreyscale180 + decals: + 545: 9,11 + 1607: -35,-43 + 2100: -37,-43 + 2101: -36,-43 + 2102: -38,-43 + 2103: -39,-43 + 2104: -40,-43 + 2105: -41,-43 + 2108: -43,-42 + 2423: -21,-53 + 2465: -27,-57 + - node: + color: '#D4D4D428' + id: HalfTileOverlayGreyscale180 + decals: + 463: -12,-1 + 464: -14,-1 + 465: -18,-1 + 466: -19,-1 + 2126: -43,-39 + 2198: -37,-46 + 2214: -35,-47 + 2217: -33,-47 + 2218: -32,-47 + 2604: -23,-1 + 2605: -24,-1 + 2606: -25,-1 + 2607: -26,-1 + 2634: -36,6 + 2663: -32,-1 + 2666: -27,-1 + 2667: -28,-1 + 2707: 13,-1 + 2708: 15,-1 + 2709: 16,-1 + 2710: 17,-1 + 3480: 18,-1 + 3481: 19,-1 + 3482: 20,-1 + 3483: 21,-1 + 3484: 22,-1 + 3485: 23,-1 + 3486: 24,-1 + 3487: 25,-1 + 3488: 26,-1 + 3489: 27,-1 + 3490: 28,-1 + 3491: 29,-1 + 3492: 30,-1 + 3493: 31,-1 + 3494: 32,-1 + 3495: 33,-1 + 3526: 32,6 + 3527: 33,6 + 3528: 34,6 + 3529: 35,6 + 3586: 27,29 + 3649: 41,27 + 3654: 36,26 + 3655: 35,26 + 3656: 34,26 + 3657: 33,26 + 3658: 32,26 + 3659: 31,26 + 3706: 37,-11 + 3707: 38,-11 + 3708: 39,-11 + 3709: 40,-11 + 3710: 41,-11 + 3711: 36,-11 + 3712: 35,-11 + 3713: 34,-11 + 4058: -16,18 + 4059: -15,18 + 4060: -14,18 + 4061: -13,18 + 4062: -12,18 + 4063: -11,18 + 4064: -10,18 + 4065: -9,18 + 4066: -8,18 + 4067: -7,18 + 4068: -6,18 + 4069: -5,18 + 4070: -4,18 + 4071: -3,18 + 4173: -25,23 + 4174: -26,23 + 4200: -14,27 + 4201: -13,27 + 4202: -12,27 + 4203: -11,27 + 4204: -10,27 + 4205: -9,27 + 4206: -8,27 + 4207: -7,27 + 4208: -6,27 + 4209: -5,27 + 4210: -4,27 + 4285: -17,31 + 4317: -20,31 + 4447: -39,19 + 4448: -40,19 + 4449: -41,19 + 4450: -42,19 + 4451: -43,19 + 4541: -18,27 + 4542: -19,27 + 4543: -20,27 + 4544: -21,27 + 4545: -22,27 + 4549: -26,28 + 4550: -27,28 + 4551: -28,28 + 4552: -29,28 + 4553: -30,28 + 4554: -31,28 + 4555: -32,28 + 4556: -33,28 + 4557: -34,28 + 6136: 0,-43 + 6137: 1,-43 + 6138: 2,-43 + 6179: 4,-43 + 6180: 7,-43 + 6181: 8,-43 + 6376: -7,-61 + 6377: -6,-61 + 6378: -5,-61 + 6379: -4,-61 + 6380: -3,-61 + 6381: -2,-61 + 6382: -1,-61 + 6927: 25,-62 + 6928: 26,-62 + 6929: 27,-62 + 6930: 28,-62 + 6931: 29,-62 + 6943: 29,-51 + 6944: 30,-51 + 6955: 16,-49 + 6956: 17,-49 + 6957: 18,-49 + 6958: 19,-49 + 6959: 20,-49 + 6960: 21,-49 + 6961: 22,-49 + 6962: 23,-49 + 6963: 24,-49 + 6964: 25,-49 + 6965: 26,-49 + 6966: 27,-49 + 6967: 28,-49 + 6968: 29,-49 + 6969: 30,-49 + 6970: 31,-49 + 6996: 31,-65 + 6997: 30,-65 + 6998: 29,-65 + 6999: 28,-65 + 7000: 27,-65 + 7001: 26,-65 + 7002: 25,-65 + 7003: 24,-65 + 7004: 23,-65 + - node: + color: '#DE3A3A96' + id: HalfTileOverlayGreyscale180 + decals: + 2761: 29,-5 + 2762: 28,-5 + 3900: 44,-19 + 3901: 45,-19 + 4130: -16,22 + 4250: -10,31 + 4251: -11,31 + 4252: -12,31 + 4253: -8,32 + 4572: -4,33 + 4580: -6,36 + 4581: -5,36 + 4582: -4,36 + 5514: 5,-20 + 6227: 3,-51 + - node: + color: '#EFB34196' + id: HalfTileOverlayGreyscale180 + decals: + 6156: 2,-41 + 6157: 8,-41 + 6158: 7,-41 + 6159: 6,-41 + 6160: 5,-41 + 6161: 4,-41 + 6162: 3,-41 + 6163: 9,-41 + 6206: 4,-46 + 6207: 3,-46 + 6208: 2,-46 + 6209: 1,-46 + 6210: 0,-46 + 6211: -1,-46 + - node: + color: '#FF924493' + id: HalfTileOverlayGreyscale180 + decals: + 5341: 30,-19 + - node: + color: '#FFFFFFFF' + id: HalfTileOverlayGreyscale180 + decals: + 831: -28,-5 + 832: -27,-5 + 1475: -32,-30 + 1476: -28,-30 + 1477: -34,-27 + 1478: -35,-27 + 1479: -36,-27 + 1639: -26,-27 + 1640: -25,-27 + 1745: -21,-27 + 1746: -20,-27 + 1747: -19,-27 + 1748: -15,-27 + 1749: -14,-27 + 1750: -13,-27 + 1755: -9,-27 + 2071: -6,-27 + 2072: -7,-27 + 2073: -8,-27 + 2859: 34,1 + 2860: 33,1 + 2861: 32,1 + 2862: 31,1 + 2863: 30,1 + 5169: 16,-14 + 5174: 19,-15 + 5738: 39,-24 + 5739: 40,-24 + 5740: 41,-24 + 5747: 20,-24 + 5748: 21,-24 + 5749: 22,-24 + 5750: 23,-24 + 5751: 28,-24 + 5752: 29,-24 + 5753: 33,-24 + 5754: 34,-24 + 5755: 35,-24 + 5756: 16,-24 + 5757: 15,-24 + 5900: 27,-24 + - node: + color: '#222222E5' + id: HalfTileOverlayGreyscale270 + decals: + 254: -4,3 + 271: -4,-2 + 294: 9,-7 + 295: 9,-6 + 296: 10,-5 + 297: 11,-3 + 298: 11,-2 + 299: 11,3 + 300: 11,4 + 301: 10,6 + 302: 9,7 + 303: 9,8 + 3766: 36,-13 + 3775: 42,-7 + 3776: 42,-8 + 3777: 42,-9 + 3778: 42,-10 + 3811: 32,-6 + 3812: 32,-7 + 3813: 32,-8 + 3814: 32,-9 + 3815: 32,-10 + 3816: 32,-11 + 4842: 1,48 + 4982: 5,60 + - node: + color: '#334E6DC8' + id: HalfTileOverlayGreyscale270 + decals: + 44: 1,5 + 45: 1,6 + 46: 1,7 + 47: 1,8 + 48: 1,9 + 49: 1,10 + 50: 1,11 + 51: 1,12 + 52: 1,13 + 4618: 1,14 + 4619: 1,15 + 4620: 1,16 + 4621: 1,17 + 4622: 1,18 + 4623: 1,19 + 4624: 1,20 + 4625: 1,21 + 4626: 1,22 + 4627: 1,23 + 4628: 1,24 + 4629: 1,25 + 4631: 1,27 + 4632: 1,28 + 4633: 1,29 + 4634: 1,30 + 4635: 1,31 + 4636: 1,32 + 4637: 1,33 + 4638: 1,34 + 4639: 1,35 + 4640: 1,36 + 4641: 1,37 + 4642: 1,38 + 4815: 1,45 + 4816: 1,44 + 4817: 1,43 + 4818: 1,42 + 4819: 1,41 + 4820: 1,40 + 4821: 1,39 + 4822: 1,47 + 4946: 1,51 + 4947: 1,50 + 4948: 1,49 + 4949: 1,48 + 4988: 5,60 + - node: + color: '#50BCB193' + id: HalfTileOverlayGreyscale270 + decals: + 3041: 29,9 + 3042: 29,10 + 3043: 29,11 + 3044: 29,12 + 3350: 29,13 + 3351: 29,15 + 3352: 29,16 + - node: + color: '#52B4E996' + id: HalfTileOverlayGreyscale270 + decals: + 80: 1,-4 + 81: 1,-5 + 82: 1,-6 + 83: 1,-7 + 84: 1,-8 + 85: 1,-9 + 86: 1,-10 + 87: 1,-11 + 88: 1,-12 + 588: 8,-14 + 2775: 22,-11 + 2776: 22,-10 + 5454: 27,-27 + 5455: 27,-28 + 5456: 27,-29 + 5457: 27,-30 + 5458: 27,-31 + 5824: 27,-26 + 5838: 27,-25 + 5940: 11,-36 + 5941: 14,-36 + 6063: 1,-13 + 6064: 1,-14 + 6065: 1,-15 + 6066: 1,-16 + 6067: 1,-17 + 6068: 1,-18 + 6069: 1,-19 + 6070: 1,-20 + 6071: 1,-21 + 6072: 1,-22 + 6073: 1,-23 + 6074: 1,-24 + 7223: 4,-35 + 7245: 39,-40 + 7248: 41,-38 + - node: + color: '#9FED5896' + id: HalfTileOverlayGreyscale270 + decals: + 3114: 32,16 + 3115: 32,17 + 3116: 32,15 + - node: + color: '#A4610696' + id: HalfTileOverlayGreyscale270 + decals: + 888: -31,8 + 889: -31,7 + 890: -31,6 + 891: -31,5 + 1181: -38,-8 + 1182: -38,-9 + 1183: -38,-10 + 1184: -38,-11 + 1185: -38,-12 + 1186: -38,-13 + 1187: -38,-14 + 7397: -43,-19 + - node: + color: '#D381C996' + id: HalfTileOverlayGreyscale270 + decals: + 547: 9,14 + 1299: -39,-23 + 1321: -40,-26 + 2111: -44,-41 + 2112: -44,-40 + 2113: -44,-39 + 2359: -22,-39 + 2360: -21,-42 + 2362: -21,-48 + - node: + color: '#D4D4D428' + id: HalfTileOverlayGreyscale270 + decals: + 1250: -32,14 + 1251: -32,15 + 1252: -32,16 + 1253: -32,17 + 2138: -44,-37 + 2139: -44,-36 + 2199: -36,-47 + 2200: -36,-48 + 2247: -32,-50 + 2248: -32,-51 + 2252: -32,-52 + 2624: -36,9 + 2625: -35,11 + 2626: -35,12 + 2635: -35,5 + 2636: -35,4 + 2637: -35,3 + 2638: -35,2 + 2639: -35,1 + 2640: -35,0 + 2641: -35,-1 + 2642: -35,-2 + 2643: -35,-3 + 2644: -35,-4 + 2645: -35,-5 + 2646: -35,-6 + 2647: -35,-7 + 2648: -35,-8 + 2649: -35,-9 + 2650: -35,-10 + 2651: -35,-11 + 2652: -35,-12 + 2653: -35,-13 + 2654: -35,-14 + 2682: -1,-12 + 2683: -1,-14 + 2684: -1,-15 + 2685: -1,-16 + 2686: -1,-17 + 2687: -1,-18 + 2688: -1,-19 + 2689: -1,-20 + 2694: -1,-26 + 2715: -1,13 + 2716: -1,15 + 2717: -1,16 + 2718: -1,17 + 3260: 12,20 + 3261: 12,23 + 3316: 23,25 + 3511: 28,3 + 3512: 28,4 + 3535: 16,6 + 3536: 16,7 + 3537: 16,8 + 3538: 16,9 + 3549: 28,9 + 3550: 28,10 + 3551: 28,11 + 3552: 28,12 + 3564: 28,16 + 3565: 28,17 + 3566: 28,18 + 3567: 28,20 + 3578: 28,22 + 3579: 28,23 + 3580: 28,24 + 3581: 28,25 + 3582: 28,26 + 3583: 28,27 + 3584: 28,28 + 3589: 28,34 + 3590: 28,35 + 3591: 28,36 + 3592: 28,37 + 3593: 28,38 + 3594: 28,39 + 3615: 42,30 + 3616: 42,31 + 3617: 42,32 + 3618: 42,33 + 3623: 42,40 + 3624: 42,41 + 3625: 42,42 + 3626: 42,43 + 3627: 42,44 + 3628: 42,45 + 3629: 42,46 + 3716: 33,-10 + 3717: 33,-9 + 3718: 33,-8 + 3719: 33,-7 + 3734: 35,-3 + 3735: 35,-4 + 3736: 35,-5 + 4055: -17,20 + 4056: -17,19 + 4138: -17,25 + 4139: -17,26 + 4215: -5,30 + 4286: -18,32 + 4287: -18,33 + 4288: -18,34 + 4289: -18,35 + 4318: -21,32 + 4319: -21,33 + 4320: -21,34 + 4321: -21,35 + 4390: -38,38 + 4397: -43,36 + 4398: -43,35 + 4399: -43,34 + 4400: -43,33 + 4401: -43,32 + 4402: -43,31 + 4452: -38,26 + 4453: -38,25 + 4454: -38,24 + 4455: -38,23 + 4456: -38,22 + 4525: -25,33 + 4526: -25,32 + 4527: -25,31 + 4547: -25,27 + 4701: -1,21 + 4702: -1,22 + 4703: -1,23 + 4704: -1,24 + 4705: -1,25 + 4706: -1,26 + 4707: -1,27 + 4708: -1,28 + 4709: -1,29 + 4710: -1,30 + 4711: -1,31 + 4712: -1,32 + 4713: -1,33 + 4714: -1,34 + 4715: -1,35 + 4718: -1,40 + 4719: -1,41 + 4825: -1,42 + 4826: -1,43 + 4827: -1,44 + 4828: -1,45 + 4829: -1,46 + 4830: -1,47 + 5352: 40,-18 + 5353: 40,-17 + 5354: 40,-16 + 6121: -1,-30 + 6122: -1,-31 + 6123: -1,-32 + 6124: -1,-33 + 6125: -1,-34 + 6126: -1,-35 + 6127: -1,-36 + 6128: -1,-37 + 6129: -1,-38 + 6130: -1,-38 + 6131: -1,-39 + 6132: -1,-40 + 6133: -1,-41 + 6134: -1,-42 + 6182: -3,-47 + 6183: -3,-46 + 6374: -8,-60 + 6394: -8,-57 + 6526: 28,19 + 6933: 30,-63 + 6947: 31,-53 + 6948: 31,-52 + 7006: 22,-64 + 7007: 22,-63 + 7008: 22,-62 + 7009: 22,-61 + 7010: 22,-60 + 7011: 22,-59 + 7012: 22,-58 + 7013: 22,-57 + 7014: 22,-56 + 7015: 22,-55 + 7180: 10,-47 + 7181: 10,-46 + 7182: 10,-45 + 7183: 10,-44 + 7184: 10,-43 + 7185: 10,-42 + - node: + color: '#DE3A3A96' + id: HalfTileOverlayGreyscale270 + decals: + 2765: 27,-4 + 3902: 43,-16 + 3903: 43,-17 + 3904: 43,-18 + 4237: -13,35 + 4238: -13,34 + 4239: -13,33 + 4240: -13,32 + 4577: -7,39 + 4578: -7,38 + 4579: -7,37 + 5003: -5,58 + 5004: -5,59 + 5005: -5,60 + 5006: -5,61 + 6228: 2,-50 + - node: + color: '#EFB34196' + id: HalfTileOverlayGreyscale270 + decals: + 6099: 1,-26 + 6100: 1,-27 + 6101: 1,-28 + 6102: 1,-29 + 6103: 1,-30 + 6104: 1,-31 + 6105: 1,-32 + 6106: 1,-33 + 6107: 1,-34 + 6139: 1,-35 + 6140: 1,-36 + 6141: 1,-37 + 6142: 1,-38 + 6143: 1,-39 + 6144: 1,-40 + 6170: 6,-43 + 6171: 6,-44 + 6203: 6,-45 + 6306: 2,-58 + - node: + color: '#FF924493' + id: HalfTileOverlayGreyscale270 + decals: + 5340: 31,-20 + - node: + color: '#FFFFFFFF' + id: HalfTileOverlayGreyscale270 + decals: + 1273: -33,-16 + 1482: -33,-34 + 1483: -33,-35 + 1488: -33,-29 + 1489: -33,-28 + 1587: -33,-36 + 1588: -33,-37 + 1589: -33,-38 + 1590: -33,-39 + 1591: -33,-40 + 1592: -33,-41 + 1593: -33,-42 + 1594: -33,-43 + 1595: -33,-44 + 1631: -25,-30 + 1632: -25,-31 + 1756: -10,-25 + 1757: -10,-24 + 1758: -10,-23 + 1759: -10,-22 + 2855: 35,-2 + 2856: 35,-1 + 2857: 35,0 + 2971: 26,10 + 2972: 26,11 + 5165: 14,-15 + 5166: 14,-16 + 5452: 32,-30 + 5453: 32,-31 + 5669: 27,-26 + 5705: 14,-32 + 5706: 14,-31 + 5707: 14,-30 + 5717: 23,-28 + 5718: 23,-27 + 5722: 26,-26 + 5759: 14,-23 + 5760: 14,-22 + 5761: 38,-23 + 5762: 38,-22 + 5763: 38,-21 + 5764: 38,-20 + 5765: 38,-19 + 5768: 38,-15 + 5820: 19,-23 + - node: + color: '#222222E5' + id: HalfTileOverlayGreyscale90 + decals: + 243: -10,3 + 244: -10,4 + 247: -8,7 + 248: -8,8 + 272: 5,-2 + 273: 5,3 + 279: -10,-2 + 280: -10,-3 + 281: -9,-5 + 282: -8,-6 + 283: -8,-7 + 455: -9,6 + 3767: 38,-13 + 3771: 33,-10 + 3772: 33,-9 + 3773: 33,-8 + 3774: 33,-7 + 3828: 43,-11 + 3829: 43,-10 + 3830: 43,-9 + 3831: 43,-8 + 3832: 43,-7 + 3833: 43,-6 + 4841: 0,48 + 4983: -4,60 + - node: + color: '#334E6DC8' + id: HalfTileOverlayGreyscale90 + decals: + 4721: -12,47 + 4722: -6,44 + 4797: 0,39 + 4798: 0,40 + 4799: 0,41 + 4800: 0,42 + 4801: 0,43 + 4802: 0,44 + 4803: 0,45 + 4804: 0,46 + 4823: 0,47 + 4942: 0,51 + 4943: 0,50 + 4944: 0,49 + 4945: 0,48 + 4950: 1,50 + 4989: -4,60 + - node: + color: '#52B4E996' + id: HalfTileOverlayGreyscale90 + decals: + 590: 9,-16 + 2725: 21,-3 + 2812: 26,-12 + 5459: 26,-27 + 5460: 26,-28 + 5461: 26,-29 + 5462: 26,-30 + 5463: 26,-31 + 5825: 26,-26 + 5839: 26,-25 + - node: + color: '#9FED5896' + id: HalfTileOverlayGreyscale90 + decals: + 3021: 29,9 + 3022: 29,10 + 3023: 29,11 + 3024: 29,12 + 3109: 29,13 + 3110: 29,15 + 3111: 29,16 + 3136: 37,17 + 3137: 37,16 + 3138: 37,15 + 3312: 18,25 + 4999: 6,58 + 5000: 6,59 + 5001: 6,60 + 5002: 6,61 + 5407: 35,-33 + - node: + color: '#A4610696' + id: HalfTileOverlayGreyscale90 + decals: + 894: -28,7 + 901: -28,5 + 902: -28,6 + 7400: -41,-21 + - node: + color: '#D381C996' + id: HalfTileOverlayGreyscale90 + decals: + 548: 10,14 + 549: 10,13 + 550: 10,12 + 1349: -46,-28 + 2114: -42,-41 + 2115: -42,-40 + 2116: -42,-39 + 2366: -20,-50 + 2424: -20,-53 + 2442: -28,-53 + - node: + color: '#D4D4D428' + id: HalfTileOverlayGreyscale90 + decals: + 1246: -36,14 + 1247: -36,15 + 1248: -36,16 + 1249: -36,17 + 2140: -46,-37 + 2141: -46,-36 + 2201: -38,-48 + 2202: -38,-47 + 2249: -33,-52 + 2250: -33,-51 + 2251: -33,-50 + 2621: -33,3 + 2622: -33,4 + 2623: -33,8 + 2655: -33,-7 + 2656: -33,-6 + 2657: -33,-5 + 2658: -33,-4 + 2659: -33,-3 + 2660: -33,-2 + 2696: 2,-23 + 2697: 2,-22 + 2698: 2,-21 + 2699: 2,-20 + 2700: 2,-19 + 2701: 2,-18 + 2702: 2,-17 + 2703: 2,-16 + 2704: 2,-15 + 2705: 2,-14 + 2706: 2,-12 + 2720: 2,15 + 2721: 2,16 + 2722: 2,13 + 3513: 30,4 + 3514: 30,3 + 3522: 36,1 + 3523: 36,0 + 3524: 36,-1 + 3544: 20,9 + 3553: 30,12 + 3554: 30,11 + 3555: 30,10 + 3556: 30,9 + 3559: 30,13 + 3560: 30,14 + 3568: 30,20 + 3574: 30,18 + 3577: 30,25 + 3599: 30,33 + 3600: 30,32 + 3601: 30,31 + 3630: 44,46 + 3631: 44,45 + 3632: 44,44 + 3633: 44,43 + 3634: 44,42 + 3635: 44,41 + 3638: 44,37 + 3639: 44,36 + 3640: 44,35 + 3641: 44,34 + 3644: 44,30 + 3645: 44,29 + 3646: 44,28 + 3647: 44,27 + 3720: 42,-10 + 3721: 42,-9 + 3722: 42,-8 + 3723: 42,-7 + 3737: 34,-3 + 3738: 34,-4 + 3739: 34,-5 + 4024: 2,20 + 4140: -15,25 + 4141: -15,26 + 4172: -24,24 + 4212: -3,28 + 4213: -3,29 + 4214: -3,30 + 4281: -15,35 + 4282: -15,34 + 4283: -15,33 + 4284: -15,32 + 4381: -37,32 + 4382: -37,33 + 4383: -37,34 + 4384: -37,35 + 4385: -37,36 + 4386: -37,37 + 4387: -37,38 + 4438: -36,26 + 4439: -36,25 + 4440: -36,24 + 4441: -36,23 + 4442: -36,22 + 4443: -36,21 + 4444: -36,20 + 4459: -39,22 + 4528: -23,36 + 4529: -23,35 + 4530: -23,34 + 4531: -23,33 + 4532: -23,32 + 4533: -23,31 + 4534: -23,30 + 4682: 2,21 + 4683: 2,22 + 4684: 2,23 + 4685: 2,29 + 4686: 2,30 + 4687: 2,31 + 4688: 2,32 + 4689: 2,33 + 4690: 2,34 + 4691: 2,35 + 4692: 2,36 + 4693: 2,37 + 4694: 2,38 + 4695: 2,39 + 4696: 2,40 + 4697: 2,41 + 4698: 2,42 + 4699: 2,43 + 4700: 2,44 + 5355: 41,-16 + 5356: 41,-17 + 5357: 41,-18 + 6109: 2,-28 + 6110: 2,-29 + 6111: 2,-30 + 6112: 2,-31 + 6113: 2,-32 + 6114: 2,-33 + 6115: 2,-34 + 6116: 2,-35 + 6117: 2,-36 + 6118: 2,-37 + 6119: 2,-38 + 6120: 2,-39 + 6383: 0,-58 + 6384: 0,-57 + 6503: 2,28 + 6505: 2,24 + 6525: 30,19 + 6940: 24,-63 + 6949: 28,-52 + 6950: 28,-53 + 6982: 32,-51 + 6983: 32,-52 + 6984: 32,-53 + 6985: 32,-54 + 6986: 32,-64 + 6987: 32,-63 + 6988: 32,-62 + 6989: 32,-61 + 6990: 32,-60 + 6991: 32,-59 + 6992: 32,-58 + 6993: 32,-57 + 6994: 32,-56 + 7210: 32,-43 + 7211: 32,-44 + 7212: 32,-45 + 7213: 32,-48 + 7214: 32,-47 + 7215: 32,-46 + - node: + color: '#D4D4D496' + id: HalfTileOverlayGreyscale90 + decals: + 2723: 19,-5 + 2724: 24,-3 + 2814: 25,-15 + - node: + color: '#DE3A3A96' + id: HalfTileOverlayGreyscale90 + decals: + 53: 0,5 + 54: 0,6 + 55: 0,7 + 56: 0,8 + 57: 0,10 + 58: 0,9 + 59: 0,11 + 60: 0,12 + 61: 0,13 + 903: -22,4 + 909: -20,11 + 2766: 30,-4 + 3905: 44,-16 + 3906: 46,-18 + 4017: 0,18 + 4018: 0,17 + 4019: 0,16 + 4020: 0,15 + 4021: 0,14 + 4583: -3,37 + 4584: -3,38 + 4585: -3,39 + 4601: 0,36 + 4602: 0,35 + 4603: 0,34 + 4604: 0,33 + 4605: 0,32 + 4606: 0,31 + 4607: 0,30 + 4608: 0,29 + 4609: 0,28 + 4610: 0,27 + 4611: 0,26 + 4612: 0,25 + 4613: 0,24 + 4614: 0,23 + 4615: 0,22 + 4616: 0,21 + 4617: 0,20 + 6230: 4,-50 + - node: + color: '#EFB34196' + id: HalfTileOverlayGreyscale90 + decals: + 89: 0,-4 + 90: 0,-5 + 91: 0,-6 + 92: 0,-7 + 93: 0,-8 + 94: 0,-9 + 95: 0,-10 + 96: 0,-11 + 97: 0,-12 + 6077: 0,-14 + 6078: 0,-15 + 6079: 0,-16 + 6080: 0,-17 + 6081: 0,-13 + 6082: 0,-18 + 6083: 0,-19 + 6084: 0,-20 + 6085: 0,-21 + 6086: 0,-22 + 6087: 0,-23 + 6088: 0,-24 + 6089: 0,-25 + 6090: 0,-26 + 6091: 0,-27 + 6092: 0,-28 + 6093: 0,-29 + 6094: 0,-30 + 6095: 0,-31 + 6096: 0,-32 + 6097: 0,-33 + 6098: 0,-34 + 6146: 0,-35 + 6147: 0,-36 + 6148: 0,-37 + 6149: 0,-38 + 6150: 0,-39 + 6151: 0,-40 + 6152: 0,-41 + 6172: 5,-43 + 6173: 5,-44 + 6202: 5,-45 + 6213: -2,-47 + 6307: 4,-54 + 6308: 4,-55 + 6309: 4,-56 + 6310: 4,-57 + 6311: 4,-58 + 6312: 4,-59 + 6313: 4,-60 + 6314: 4,-61 + - node: + color: '#FFFFFFFF' + id: HalfTileOverlayGreyscale90 + decals: + 1274: -35,-16 + 1275: -35,-17 + 1276: -35,-18 + 1480: -35,-34 + 1481: -35,-35 + 1490: -35,-33 + 1507: -31,-27 + 1508: -31,-28 + 1581: -35,-36 + 1582: -35,-37 + 1583: -35,-38 + 1584: -35,-39 + 1585: -35,-40 + 1586: -35,-41 + 1629: -27,-29 + 1630: -27,-28 + 1760: -12,-22 + 1761: -12,-23 + 1762: -12,-24 + 1763: -12,-25 + 2853: 34,-1 + 2854: 34,-2 + 2966: 22,11 + 2967: 22,10 + 5449: 30,-31 + 5450: 30,-30 + 5451: 30,-29 + 5670: 26,-26 + 5695: 12,-20 + 5696: 12,-21 + 5697: 12,-22 + 5698: 12,-23 + 5701: 12,-27 + 5702: 12,-28 + 5703: 12,-29 + 5704: 12,-30 + 5723: 27,-26 + 5769: 36,-15 + 5770: 36,-16 + 5771: 36,-17 + 5772: 36,-18 + 5773: 36,-19 + 5774: 36,-20 + 5775: 36,-21 + 5776: 36,-22 + 5777: 36,-23 + 5821: 17,-23 + - node: + angle: -1.5707963267948966 rad + color: '#FFFFFFFF' + id: LoadingArea + decals: + 1073: -44,6 + 1074: -44,7 + 1177: -43,0 + 2677: -35,11 + 2678: -35,12 + 3147: 32,15 + 3573: 28,16 + 4343: -10,43 + 4833: 3,46 + 5599: 8,-28 + - node: + color: '#FFFFFFFF' + id: LoadingArea + decals: + 968: -26,10 + 4152: -8,26 + 7078: 16,-40 + - node: + angle: 1.5707963267948966 rad + color: '#FFFFFFFF' + id: LoadingArea + decals: + 1175: -43,-2 + 1176: -38,-1 + 1654: -22,-20 + 3146: 33,20 + 4832: 3,50 + 5598: 6,-22 + - node: + angle: 3.141592653589793 rad + color: '#FFFFFFFF' + id: LoadingArea + decals: + 1436: -36,-33 + 4298: -17,36 + 4342: -10,39 + 4560: -28,28 + 7026: 19,-49 + 7027: 18,-49 + 7028: 17,-49 + 7029: 16,-49 + - node: + angle: -1.5707963267948966 rad + color: '#FFFFFFFF' + id: LoadingAreaGreyscale + decals: + 7030: 21,-52 + 7031: 21,-51 + - node: + color: '#222222E5' + id: QuarterTileOverlayGreyscale + decals: + 251: -3,4 + 252: -4,2 + 253: -1,5 + 277: 11,2 + 308: 5,-10 + 309: -1,-10 + 312: 11,-4 + 3796: 42,-11 + 3805: 40,-7 + 4840: 0,48 + 4862: 2,49 + 4984: 4,59 + - node: + color: '#222222E6' + id: QuarterTileOverlayGreyscale + decals: + 26: 4,-2 + 27: 3,-3 + - node: + color: '#334E6DC8' + id: QuarterTileOverlayGreyscale + decals: + 4977: 1,58 + 4987: 4,59 + - node: + color: '#50BCB193' + id: QuarterTileOverlayGreyscale + decals: + 3389: 40,27 + - node: + color: '#52B4E996' + id: QuarterTileOverlayGreyscale + decals: + 5465: 27,-32 + 5875: 26,-25 + 5943: 12,-37 + 5972: 23,-36 + 7242: 40,-39 + 7243: 46,-37 + 7244: 45,-38 + 7303: 6,-14 + - node: + color: '#6C6C6C93' + id: QuarterTileOverlayGreyscale + decals: + 2977: 23,9 + 2978: 24,9 + 2979: 25,9 + 2980: 26,9 + 2981: 26,10 + 2982: 26,11 + - node: + color: '#818181FF' + id: QuarterTileOverlayGreyscale + decals: + 1058: -42,9 + - node: + color: '#A4610696' + id: QuarterTileOverlayGreyscale + decals: + 7393: -47,-23 + 7404: -48,-18 + 7405: -49,-24 + 7406: -48,-24 + - node: + color: '#D381C996' + id: QuarterTileOverlayGreyscale + decals: + 544: 9,13 + 1296: -37,-25 + 1300: -38,-23 + 1376: -39,-29 + 1385: -40,-32 + 2363: -20,-46 + 2364: -20,-48 + - node: + color: '#D4D4D428' + id: QuarterTileOverlayGreyscale + decals: + 468: -17,2 + 2204: -36,-49 + 2243: -32,-53 + 2259: -34,-53 + 2627: -35,10 + 2629: -36,8 + 2690: -1,-21 + 2691: -1,-27 + 3496: 28,2 + 3548: 28,8 + 3563: 28,15 + 3588: 28,33 + 3614: 42,29 + 3621: 42,36 + 3622: 42,39 + 4025: -1,20 + 4216: -5,29 + 4225: -14,29 + 4226: -17,29 + 4391: -38,37 + 4457: -38,21 + 4522: -25,30 + 4523: -25,36 + 4717: -1,39 + 6942: 30,-64 + 6951: 31,-54 + - node: + color: '#DE3A3A96' + id: QuarterTileOverlayGreyscale + decals: + 3919: -17,16 + 3922: -23,14 + 3956: -30,21 + 3958: -26,18 + - node: + color: '#FFFFFFFF' + id: QuarterTileOverlayGreyscale + decals: + 1473: -28,-33 + 1635: -25,-32 + 2973: 26,9 + 5167: 14,-17 + 5175: 20,-16 + - node: + color: '#222222E5' + id: QuarterTileOverlayGreyscale180 + decals: + 246: -10,5 + 249: -4,11 + 263: 2,-4 + 264: 5,-1 + 265: 4,-3 + 275: -10,-1 + 278: 2,11 + 3795: 33,-6 + 3799: 35,-10 + 3822: 38,-12 + - node: + color: '#222222E6' + id: QuarterTileOverlayGreyscale180 + decals: + 22: -3,3 + 23: -2,4 + - node: + color: '#334E6DC8' + id: QuarterTileOverlayGreyscale180 + decals: + 4720: -12,45 + 4974: 3,61 + 4979: 0,60 + 4980: 2,60 + - node: + color: '#50BCB193' + id: QuarterTileOverlayGreyscale180 + decals: + 3373: 31,29 + - node: + color: '#52B4E996' + id: QuarterTileOverlayGreyscale180 + decals: + 2726: 23,-7 + 2756: 18,-7 + 2810: 24,-15 + 5971: 23,-35 + 5973: 23,-36 + 6028: 36,-39 + 7240: 47,-41 + 7241: 40,-39 + 7302: 6,-14 + - node: + color: '#6C6C6C93' + id: QuarterTileOverlayGreyscale180 + decals: + 2975: 22,11 + 2976: 22,10 + - node: + color: '#818181FF' + id: QuarterTileOverlayGreyscale180 + decals: + 1057: -39,7 + - node: + color: '#9FED5896' + id: QuarterTileOverlayGreyscale180 + decals: + 553: 12,12 + 3012: 28,8 + 3217: 43,21 + 3259: 12,20 + 3313: 19,25 + 3314: 23,25 + 5406: 36,-29 + 5896: 27,-25 + - node: + color: '#A4610696' + id: QuarterTileOverlayGreyscale180 + decals: + 7391: -49,-16 + 7392: -47,-23 + 7401: -43,-16 + 7407: -49,-23 + 7409: -45,-23 + 7410: -45,-20 + - node: + color: '#D381C996' + id: QuarterTileOverlayGreyscale180 + decals: + 1350: -46,-27 + 2440: -30,-52 + 2441: -27,-53 + - node: + color: '#D4D4D428' + id: QuarterTileOverlayGreyscale180 + decals: + 469: -15,-1 + 556: 9,-10 + 557: 9,-10 + 2142: -46,-35 + 2205: -38,-46 + 2245: -33,-49 + 2257: -35,-52 + 2630: -33,5 + 2632: -33,9 + 2661: -33,-1 + 2662: -33,-1 + 2665: -29,-1 + 2669: -20,-1 + 2719: 2,17 + 3509: 30,5 + 3525: 31,6 + 3561: 30,15 + 3575: 30,22 + 3597: 30,37 + 3598: 30,34 + 3637: 44,38 + 3643: 44,31 + 3650: 40,27 + 3652: 39,26 + 3660: 30,26 + 4199: -15,27 + 4446: -37,19 + 4477: -36,28 + 4546: -23,27 + 4824: 2,45 + 6108: 2,-27 + 6506: 2,25 + 6932: 24,-62 + 6953: 28,-51 + - node: + color: '#D4D4D496' + id: QuarterTileOverlayGreyscale180 + decals: + 592: 8,-13 + - node: + color: '#DE3A3A96' + id: QuarterTileOverlayGreyscale180 + decals: + 4249: -9,32 + - node: + color: '#EFB34196' + id: QuarterTileOverlayGreyscale180 + decals: + 2525: -17,-53 + 6212: -2,-46 + 6260: 0,-53 + - node: + color: '#FF924493' + id: QuarterTileOverlayGreyscale180 + decals: + 5312: 32,-22 + 5313: 33,-22 + - node: + color: '#FFFFFFFF' + id: QuarterTileOverlayGreyscale180 + decals: + 1636: -27,-27 + 5178: 18,-15 + 5693: 12,-19 + - node: + color: '#222222E5' + id: QuarterTileOverlayGreyscale270 + decals: + 250: -1,11 + 261: -1,-4 + 262: -4,-1 + 266: -3,-3 + 276: 11,-1 + 306: 11,5 + 313: 5,11 + 3797: 42,-6 + 3800: 40,-10 + 3821: 36,-12 + - node: + color: '#222222E6' + id: QuarterTileOverlayGreyscale270 + decals: + 24: 3,4 + 25: 4,3 + - node: + color: '#334E6DC8' + id: QuarterTileOverlayGreyscale270 + decals: + 4975: -2,61 + 4978: 1,60 + 4981: -1,60 + - node: + color: '#50BCB193' + id: QuarterTileOverlayGreyscale270 + decals: + 3390: 40,29 + - node: + color: '#52B4E996' + id: QuarterTileOverlayGreyscale270 + decals: + 589: 8,-13 + 2774: 22,-12 + 2811: 25,-15 + 5976: 26,-35 + - node: + color: '#818181FF' + id: QuarterTileOverlayGreyscale270 + decals: + 1060: -42,7 + - node: + color: '#9FED5896' + id: QuarterTileOverlayGreyscale270 + decals: + 3020: 30,8 + 5895: 26,-25 + - node: + color: '#A4610696' + id: QuarterTileOverlayGreyscale270 + decals: + 7408: -45,-24 + - node: + color: '#D381C996' + id: QuarterTileOverlayGreyscale270 + decals: + 2358: -27,-45 + 2463: -27,-56 + 2464: -24,-56 + - node: + color: '#D4D4D428' + id: QuarterTileOverlayGreyscale270 + decals: + 470: -17,-1 + 2143: -44,-35 + 2203: -36,-46 + 2246: -32,-49 + 2258: -34,-52 + 2664: -31,-1 + 2668: -22,-1 + 2681: -35,6 + 2692: -1,-29 + 2693: -1,-25 + 3510: 28,5 + 3558: 28,13 + 3585: 28,29 + 3619: 42,34 + 3620: 42,37 + 3648: 42,27 + 3653: 37,26 + 4022: -1,18 + 4198: -17,27 + 4478: -38,28 + 4524: -25,34 + 4548: -25,28 + 4716: -1,36 + 6941: 30,-62 + 6952: 31,-51 + - node: + color: '#D4D4D496' + id: QuarterTileOverlayGreyscale270 + decals: + 5404: 35,-33 + - node: + color: '#EFB34196' + id: QuarterTileOverlayGreyscale270 + decals: + 513: 5,13 + 514: 5,14 + 515: 5,15 + 516: 5,16 + 517: 5,17 + 518: 5,18 + 519: 4,18 + 528: 9,18 + 529: 9,17 + 530: 10,17 + 2559: -7,-53 + - node: + color: '#FF924493' + id: QuarterTileOverlayGreyscale270 + decals: + 5314: 30,-22 + 5317: 29,-22 + 5318: 28,-22 + 5319: 28,-21 + 5320: 28,-20 + 5321: 28,-19 + 5322: 28,-18 + 5323: 28,-17 + 5324: 28,-16 + 5343: 31,-19 + 5345: 32,-18 + 5347: 33,-17 + - node: + color: '#FFFFFFFF' + id: QuarterTileOverlayGreyscale270 + decals: + 1474: -33,-27 + 2858: 35,1 + 5168: 14,-14 + 5177: 20,-15 + 5694: 14,-19 + - node: + color: '#222222E5' + id: QuarterTileOverlayGreyscale90 + decals: + 245: -10,2 + 267: 4,4 + 268: 5,2 + 274: 2,5 + 307: 2,-10 + 310: -4,-10 + 311: -10,-4 + 3798: 33,-11 + 3806: 35,-7 + 4839: 1,48 + 4861: -1,49 + 4985: -3,59 + - node: + color: '#222222E6' + id: QuarterTileOverlayGreyscale90 + decals: + 20: -2,-3 + 21: -3,-2 + - node: + color: '#334E6DC8' + id: QuarterTileOverlayGreyscale90 + decals: + 4976: 0,58 + 4986: -3,59 + - node: + color: '#50BCB193' + id: QuarterTileOverlayGreyscale90 + decals: + 3372: 31,27 + - node: + color: '#52B4E996' + id: QuarterTileOverlayGreyscale90 + decals: + 554: 9,-10 + 5464: 26,-32 + 5876: 27,-25 + 5977: 26,-35 + 6030: 35,-38 + 7222: 6,-37 + 7249: 41,-41 + 7299: 6,-13 + - node: + color: '#818181FF' + id: QuarterTileOverlayGreyscale90 + decals: + 1059: -39,9 + - node: + color: '#A4610696' + id: QuarterTileOverlayGreyscale90 + decals: + 7411: -41,-24 + - node: + color: '#D381C996' + id: QuarterTileOverlayGreyscale90 + decals: + 1295: -39,-24 + 1382: -40,-34 + 2365: -21,-49 + 2422: -21,-51 + - node: + color: '#D4D4D428' + id: QuarterTileOverlayGreyscale90 + decals: + 467: -15,2 + 2206: -38,-49 + 2244: -33,-53 + 2256: -35,-53 + 2631: -33,7 + 2633: -33,2 + 2695: 2,-24 + 3515: 30,2 + 3545: 20,8 + 3557: 30,8 + 3562: 30,17 + 3576: 30,24 + 3595: 30,39 + 3596: 30,36 + 3602: 30,30 + 3613: 40,29 + 3636: 44,40 + 3642: 44,33 + 4023: 2,19 + 4054: -15,20 + 4223: -12,29 + 4224: -15,29 + 4458: -39,21 + 4535: -23,29 + 4831: 2,47 + 6184: 7,-46 + 6185: 8,-47 + 6504: 2,27 + 6939: 24,-64 + 6954: 28,-54 + 7208: 30,-42 + - node: + color: '#DE3A3A96' + id: QuarterTileOverlayGreyscale90 + decals: + 905: -20,6 + 3899: 44,-17 + 3916: -19,14 + 3953: -28,25 + 3954: -27,20 + 4248: -9,34 + - node: + color: '#EFB34196' + id: QuarterTileOverlayGreyscale90 + decals: + 520: 7,15 + 521: 7,16 + 522: 7,17 + 523: 7,18 + 524: 6,18 + 525: 6,19 + 526: 5,19 + 2579: -5,-45 + 6153: 0,-42 + 6237: 6,-48 + - node: + color: '#FF924493' + id: QuarterTileOverlayGreyscale90 + decals: + 5325: 28,-16 + 5326: 29,-16 + 5327: 30,-16 + 5328: 31,-16 + 5329: 32,-16 + 5330: 33,-16 + 5331: 34,-16 + 5332: 34,-17 + 5333: 34,-18 + 5334: 34,-19 + 5335: 34,-20 + 5336: 34,-21 + 5338: 30,-21 + 5342: 29,-20 + 5344: 31,-19 + 5346: 32,-18 + - node: + color: '#FFFFFFFF' + id: QuarterTileOverlayGreyscale90 + decals: + 2974: 22,9 + 5176: 18,-16 + - node: + color: '#FFFFFFFF' + id: Remains + decals: + 1955: -8,-43 + - node: + angle: -1.5707963267948966 rad + color: '#FFFFFFFF' + id: StandClear + decals: + 3349: 30,16 + - node: + color: '#FFFFFFFF' + id: StandClear + decals: + 535: 4,18 + 536: 8,18 + 537: 5,13 + 3866: 41,-13 + 3887: 46,-13 + 3888: 46,-7 + 3889: 46,-5 + 3914: 46,-15 + 6537: 11,-66 + 6538: 12,-66 + 6539: 13,-66 + 6576: 4,-70 + 6709: -4,-70 + - node: + angle: 1.5707963267948966 rad + color: '#FFFFFFFF' + id: StandClear + decals: + 3441: 46,32 + 3442: 46,39 + 3867: 44,-12 + 3868: 44,-5 + - node: + color: '#222222E5' + id: ThreeQuarterTileOverlayGreyscale + decals: + 3809: 39,-7 + 3810: 38,-7 + 3843: 32,-5 + 4860: 2,50 + - node: + color: '#222222E6' + id: ThreeQuarterTileOverlayGreyscale + decals: + 13: 2,-3 + 19: 4,-1 + - node: + color: '#52B4E996' + id: ThreeQuarterTileOverlayGreyscale + decals: + 5524: 8,-19 + - node: + color: '#9FED5896' + id: ThreeQuarterTileOverlayGreyscale + decals: + 3019: 30,6 + 3257: 12,17 + - node: + color: '#A4610696' + id: ThreeQuarterTileOverlayGreyscale + decals: + 7402: -47,-18 + - node: + color: '#D381C996' + id: ThreeQuarterTileOverlayGreyscale + decals: + 542: 9,15 + 543: 7,13 + - node: + color: '#D4D4D428' + id: ThreeQuarterTileOverlayGreyscale + decals: + 2628: -36,10 + 3539: 16,10 + 3547: 27,8 + 3725: 33,-6 + 4278: -18,36 + 4315: -21,36 + 4388: -38,39 + 4396: -43,37 + 5349: 40,-15 + 6393: -8,-56 + 7186: 10,-41 + - node: + color: '#DE3A3A96' + id: ThreeQuarterTileOverlayGreyscale + decals: + 907: -22,8 + 2758: 27,-3 + 3897: 43,-15 + 3923: -23,16 + 3955: -28,19 + 4127: -17,23 + 4564: -5,34 + 4587: -7,40 + 5511: 4,-19 + 6226: 2,-49 + - node: + color: '#EFB34196' + id: ThreeQuarterTileOverlayGreyscale + decals: + 4933: 3,61 + 6169: 6,-42 + 6214: -1,-47 + 6259: -4,-51 + - node: + color: '#FFFFFFFF' + id: ThreeQuarterTileOverlayGreyscale + decals: + 1470: -28,-32 + 1471: -33,-33 + 1638: -25,-29 + 1741: -21,-29 + 2074: -7,-29 + 5708: 14,-29 + 5719: 23,-26 + 5734: 41,-26 + 5766: 38,-18 + - node: + color: '#222222E5' + id: ThreeQuarterTileOverlayGreyscale180 + decals: + 3801: 36,-10 + 3802: 37,-10 + 3827: 43,-12 + - node: + color: '#222222E6' + id: ThreeQuarterTileOverlayGreyscale180 + decals: + 17: -3,2 + 18: -1,4 + - node: + color: '#334E6DC8' + id: ThreeQuarterTileOverlayGreyscale180 + decals: + 4723: -4,43 + - node: + color: '#52B4E996' + id: ThreeQuarterTileOverlayGreyscale180 + decals: + 2809: 22,-15 + 5526: 10,-20 + 6027: 36,-40 + - node: + color: '#9FED5896' + id: ThreeQuarterTileOverlayGreyscale180 + decals: + 3134: 37,14 + 3315: 21,25 + 5405: 36,-28 + - node: + color: '#A4610696' + id: ThreeQuarterTileOverlayGreyscale180 + decals: + 896: -28,4 + 7390: -42,-17 + - node: + color: '#D381C996' + id: ThreeQuarterTileOverlayGreyscale180 + decals: + 540: 10,11 + 2110: -42,-42 + 2357: -29,-45 + - node: + color: '#D4D4D428' + id: ThreeQuarterTileOverlayGreyscale180 + decals: + 3508: 31,5 + 3651: 40,26 + 3715: 42,-11 + 4171: -24,23 + 4211: -3,27 + 4276: -15,31 + 4445: -36,19 + 5350: 41,-19 + 6980: 32,-49 + 6995: 32,-65 + - node: + color: '#D4D4D496' + id: ThreeQuarterTileOverlayGreyscale180 + decals: + 591: 7,-16 + - node: + color: '#DE3A3A96' + id: ThreeQuarterTileOverlayGreyscale180 + decals: + 906: -20,7 + 2760: 30,-5 + 3896: 46,-19 + 3918: -17,14 + 3957: -25,20 + 4128: -15,22 + 4242: -9,31 + 4243: -7,32 + 4563: -3,33 + 4588: -3,36 + 5512: 6,-20 + 6224: 4,-51 + - node: + color: '#EFB34196' + id: ThreeQuarterTileOverlayGreyscale180 + decals: + 2526: -16,-54 + 2527: -13,-53 + 2560: -7,-54 + 6205: 5,-46 + 6257: -3,-54 + - node: + color: '#FFFFFFFF' + id: ThreeQuarterTileOverlayGreyscale180 + decals: + 1468: -31,-30 + 1596: -35,-42 + 1637: -27,-30 + 1742: -24,-27 + 1753: -12,-27 + 1754: -18,-27 + 2077: -4,-27 + 5699: 12,-24 + 5736: 36,-24 + 5744: 17,-24 + 5745: 24,-24 + 5746: 30,-24 + - node: + color: '#222222E5' + id: ThreeQuarterTileOverlayGreyscale270 + decals: + 3803: 39,-10 + 3804: 38,-10 + 3817: 32,-12 + - node: + color: '#222222E6' + id: ThreeQuarterTileOverlayGreyscale270 + decals: + 15: 4,2 + 16: 2,4 + - node: + color: '#52B4E996' + id: ThreeQuarterTileOverlayGreyscale270 + decals: + 5527: 8,-20 + - node: + color: '#9FED5896' + id: ThreeQuarterTileOverlayGreyscale270 + decals: + 3117: 32,14 + - node: + color: '#A4610696' + id: ThreeQuarterTileOverlayGreyscale270 + decals: + 895: -31,4 + - node: + color: '#D381C996' + id: ThreeQuarterTileOverlayGreyscale270 + decals: + 538: 8,11 + 539: 7,12 + 2109: -44,-42 + 2355: -25,-45 + - node: + color: '#D4D4D428' + id: ThreeQuarterTileOverlayGreyscale270 + decals: + 3507: 27,5 + 3714: 33,-11 + 4057: -17,18 + 4275: -18,31 + 4314: -21,31 + 5351: 40,-19 + 6135: -1,-43 + 6375: -8,-61 + 7005: 22,-65 + - node: + color: '#DE3A3A96' + id: ThreeQuarterTileOverlayGreyscale270 + decals: + 908: -24,12 + 2757: 27,-5 + 3898: 43,-19 + 3915: -20,14 + 3959: -25,16 + 4129: -17,22 + 4241: -13,31 + 4562: -5,33 + 4586: -7,36 + 5513: 4,-20 + 6223: 2,-51 + - node: + color: '#EFB34196' + id: ThreeQuarterTileOverlayGreyscale270 + decals: + 2557: -6,-51 + 6145: 1,-41 + 6204: 6,-46 + 6222: 7,-47 + 6258: -1,-53 + - node: + color: '#FFFFFFFF' + id: ThreeQuarterTileOverlayGreyscale270 + decals: + 1272: -33,-17 + 1469: -29,-30 + 1472: -33,-30 + 1509: -29,-27 + 1743: -22,-27 + 1751: -16,-27 + 1752: -10,-27 + 5737: 38,-24 + 5741: 32,-24 + 5742: 26,-24 + 5743: 19,-24 + 5758: 14,-24 + 5767: 38,-16 + - node: + color: '#222222E5' + id: ThreeQuarterTileOverlayGreyscale90 + decals: + 3807: 36,-7 + 3808: 37,-7 + 3834: 43,-5 + 4859: -1,50 + - node: + color: '#222222E6' + id: ThreeQuarterTileOverlayGreyscale90 + decals: + 12: -3,-1 + 14: -1,-3 + - node: + color: '#52B4E996' + id: ThreeQuarterTileOverlayGreyscale90 + decals: + 2773: 22,-13 + 5525: 10,-19 + 6029: 32,-37 + - node: + color: '#9FED5896' + id: ThreeQuarterTileOverlayGreyscale90 + decals: + 552: 12,15 + 2988: 28,6 + 3135: 37,18 + 3216: 42,23 + 3258: 12,22 + 3311: 18,27 + - node: + color: '#A4610696' + id: ThreeQuarterTileOverlayGreyscale90 + decals: + 7394: -49,-21 + 7395: -49,-22 + - node: + color: '#D381C996' + id: ThreeQuarterTileOverlayGreyscale90 + decals: + 541: 10,15 + 2368: -20,-49 + - node: + color: '#D4D4D428' + id: ThreeQuarterTileOverlayGreyscale90 + decals: + 3521: 36,2 + 3543: 20,10 + 3546: 21,8 + 3612: 40,30 + 3724: 42,-6 + 4170: -24,25 + 4277: -15,36 + 4389: -37,39 + 5348: 41,-15 + 6385: 0,-56 + 6981: 32,-50 + 7206: 30,-41 + 7207: 32,-42 + - node: + color: '#DE3A3A96' + id: ThreeQuarterTileOverlayGreyscale90 + decals: + 2759: 30,-3 + 3894: 44,-15 + 3895: 46,-17 + 3995: -33,20 + 4126: -15,23 + 4244: -7,34 + 4246: -9,35 + 4565: -3,34 + 4589: -3,40 + 5510: 6,-19 + 6225: 4,-49 + - node: + color: '#EFB34196' + id: ThreeQuarterTileOverlayGreyscale90 + decals: + 4932: -2,61 + 6168: 5,-42 + - node: + color: '#FFFFFFFF' + id: ThreeQuarterTileOverlayGreyscale90 + decals: + 1740: -23,-29 + 2068: -9,-29 + 2852: 34,0 + 5700: 12,-26 + 5735: 39,-26 + - node: + color: '#FFFFFFFF' + id: WarnBox + decals: + 1084: -37,8 + 1085: -37,9 + 1086: -37,10 + 1139: -37,-2 + 1424: -33,-26 + 1425: -34,-26 + 1426: -35,-26 + 4142: -14,26 + 4143: -11,26 + 4144: -5,26 + 4877: 1,53 + 4878: 0,53 + 5203: 18,-19 + 5204: 17,-19 + 5398: 47,-32 + 5624: 20,-26 + 5899: 23,-29 + 5904: 11,-31 + - node: + angle: 1.5707963267948966 rad + color: '#FFFFFFFF' + id: WarnBox + decals: + 2131: -45,-44 + 2133: -48,-35 + - node: + color: '#FFFFFFFF' + id: WarnCornerNE + decals: + 506: 4,17 + 855: -29,-7 + 1261: -33,16 + 1428: -34,-28 + 1437: -36,-33 + 1659: -21,-21 + 2187: -36,-46 + 2232: -34,-52 + 2236: -32,-49 + 2342: -80,-51 + 2343: -79,-52 + 3161: 35,17 + 3169: 36,13 + 3193: 40,17 + 3438: 44,26 + 4356: -28,32 + 4413: -40,30 + 4663: 5,39 + 4666: 8,39 + 4667: 8,42 + 4668: 5,42 + 5603: 9,-28 + 6197: 0,-48 + 6331: 2,-59 + 6367: -1,-57 + 6644: 8,-69 + 6651: -5,-69 + 6666: -1,-73 + 6674: -1,-74 + 6701: 7,-74 + 6894: 27,-51 + 7073: 36,-47 + 7120: 31,-43 + 7121: 29,-42 + 7134: 14,-43 + 7326: 30,-55 + 7519: -1,-57 + - node: + color: '#FFFFFFFF' + id: WarnCornerNW + decals: + 1191: -45,-10 + 1260: -35,16 + 1427: -35,-28 + 1660: -25,-21 + 2231: -35,-52 + 2237: -33,-49 + 2340: -82,-51 + 2341: -83,-52 + 3160: 34,17 + 3164: 38,17 + 3168: 32,13 + 3437: 42,26 + 4664: 7,39 + 4665: 4,39 + 4669: 4,42 + 4670: 7,42 + 5378: 46,-31 + 5604: 5,-28 + 6196: -3,-48 + 6368: -7,-57 + 6371: 0,-59 + 6429: -16,-58 + 6641: 5,-69 + 6650: -8,-69 + 6667: 1,-73 + 6675: 1,-74 + 6681: -7,-74 + 6893: 20,-51 + 6911: 24,-55 + 7142: 12,-43 + 7154: 11,-42 + 7518: -7,-57 + - node: + color: '#FFFFFFFF' + id: WarnCornerSE + decals: + 1094: -44,8 + 1200: -39,-13 + 1259: -33,14 + 1429: -34,-30 + 1658: -21,-25 + 2193: -36,-49 + 2238: -32,-53 + 2253: -34,-53 + 2254: -34,-53 + 2338: -80,-55 + 2339: -79,-54 + 3159: 35,15 + 3173: 32,18 + 3178: 36,19 + 4654: 6,35 + 4662: 5,38 + 4673: 8,41 + 4674: 5,41 + 5049: 5,72 + 5606: 9,-22 + 6190: 4,-45 + 6195: 0,-49 + 6323: 2,-57 + 6330: 2,-61 + 6366: -1,-60 + 6643: 8,-71 + 6652: -5,-71 + 6697: 6,-77 + 6700: 7,-75 + 6908: 27,-54 + 7090: 29,-40 + 7091: 21,-40 + 7115: 31,-48 + 7145: 14,-47 + 7335: 30,-61 + - node: + color: '#FFFFFFFF' + id: WarnCornerSW + decals: + 511: 7,19 + 899: -30,8 + 1258: -35,14 + 1430: -35,-30 + 1657: -25,-25 + 1811: -21,-32 + 2239: -33,-53 + 2255: -35,-53 + 2336: -82,-55 + 2337: -83,-54 + 3158: 34,15 + 3165: 38,14 + 3176: 34,19 + 3180: 38,19 + 4367: -28,36 + 4661: 7,38 + 4671: 4,41 + 4672: 7,41 + 5048: -3,72 + 5377: 46,-33 + 5605: 5,-22 + 6188: -2,-45 + 6189: 2,-45 + 6194: -3,-49 + 6365: -7,-60 + 6412: -16,-59 + 6431: -16,-56 + 6642: 5,-71 + 6653: -8,-71 + 6682: -7,-75 + 6685: -6,-77 + 6892: 20,-52 + 6904: 22,-54 + 6916: 24,-61 + 7079: 17,-40 + 7133: 12,-47 + 7155: 11,-48 + - node: + color: '#FFFFFFFF' + id: WarnCornerSmallNE + decals: + 854: -31,-7 + 1245: -33,-15 + 1289: -32,-21 + 1420: -36,-27 + 1546: -33,-42 + 1858: -7,-25 + 2347: -79,-53 + 2348: -80,-52 + 6424: -12,-58 + 6661: -5,-73 + 7032: 32,-53 + 7123: 29,-43 + - node: + color: '#FFFFFFFF' + id: WarnCornerSmallNW + decals: + 1152: -40,3 + 1197: -42,-9 + 1419: -29,-21 + 1865: -1,-25 + 2349: -82,-52 + 6369: -7,-58 + 6427: -14,-58 + 6640: 5,-70 + 6671: 5,-73 + 7524: -7,-58 + - node: + color: '#FFFFFFFF' + id: WarnCornerSmallSE + decals: + 1090: -44,12 + 1244: -33,-11 + 1545: -33,-37 + 1857: -7,-21 + 2159: -42,-35 + 2345: -80,-54 + 2346: -79,-53 + 4659: 4,38 + 6329: 2,-53 + 6420: -10,-59 + 6619: -5,-65 + 6699: 6,-75 + 7216: 32,-48 + - node: + color: '#FFFFFFFF' + id: WarnCornerSmallSW + decals: + 1174: -40,-5 + 1866: -1,-21 + 2128: -43,-43 + 2344: -82,-54 + 4660: 8,38 + 6370: -7,-59 + 6416: -12,-59 + 6629: 5,-65 + 6639: 5,-70 + 6683: -6,-75 + 6902: 22,-52 + 7523: -7,-59 + - node: + color: '#FFFFFFFF' + id: WarnEndE + decals: + 1656: -23,-19 + 2335: -77,-53 + 5906: 6,-29 + 6853: 22,-50 + 7531: -2,-70 + - node: + color: '#FFFFFFFF' + id: WarnEndN + decals: + 1136: -37,-3 + 1140: -37,3 + 5120: -5,77 + - node: + color: '#FFFFFFFF' + id: WarnEndS + decals: + 1135: -37,-5 + 1141: -37,-1 + 2087: -3,-27 + 4657: 4,37 + 4658: 8,37 + 5121: -5,76 + - node: + color: '#FFFFFFFF' + id: WarnEndW + decals: + 1439: -29,-28 + 1655: -24,-19 + 2270: -44,-53 + 5905: 5,-29 + 6854: 20,-50 + - node: + color: '#FFFFFFFF' + id: WarnFull + decals: + 1019: -32,11 + 1020: -32,12 + 1206: -39,-7 + 1279: -32,-14 + 1280: -32,-13 + 1281: -31,-20 + 1282: -30,-20 + 1551: -32,-40 + 1552: -32,-39 + 1553: -32,-38 + 1859: -2,-23 + 1860: -2,-22 + 1861: -2,-24 + 2160: -41,-37 + 2161: -41,-36 + 7033: 33,-49 + 7034: 33,-50 + 7035: 33,-51 + 7036: 33,-52 + 7553: -48,-27 + - node: + color: '#FFFFFFFF' + id: WarnLineE + decals: + 32: -3,-1 + 33: -3,0 + 34: -3,1 + 35: -3,2 + 507: 4,16 + 508: 4,15 + 509: 4,14 + 510: 4,13 + 850: -31,-6 + 851: -31,-5 + 852: -31,-4 + 853: -31,-3 + 1021: -33,10 + 1022: -33,11 + 1023: -33,12 + 1091: -44,11 + 1092: -44,10 + 1093: -44,9 + 1137: -37,-4 + 1145: -37,2 + 1146: -37,1 + 1147: -37,0 + 1201: -39,-12 + 1202: -39,-11 + 1203: -39,-10 + 1204: -39,-9 + 1205: -39,-8 + 1241: -33,-14 + 1242: -33,-13 + 1243: -33,-12 + 1263: -33,15 + 1269: -35,15 + 1431: -34,-29 + 1438: -36,-34 + 1547: -33,-41 + 1548: -33,-40 + 1549: -33,-39 + 1550: -33,-38 + 1661: -21,-22 + 1662: -21,-23 + 1663: -21,-24 + 1813: -23,-34 + 1814: -23,-32 + 1815: -23,-33 + 1816: -23,-31 + 1817: -21,-34 + 1818: -21,-33 + 1820: -20,-33 + 1850: -7,-24 + 1851: -7,-23 + 1852: -7,-22 + 2153: -43,-30 + 2154: -43,-31 + 2157: -42,-37 + 2158: -42,-36 + 2188: -36,-47 + 2194: -36,-48 + 2240: -32,-52 + 2241: -32,-51 + 2242: -32,-50 + 2276: -27,-49 + 2277: -27,-48 + 2278: -27,-47 + 3162: 35,16 + 3174: 32,19 + 3175: 32,20 + 3181: 30,16 + 3439: 46,32 + 3444: 46,39 + 3569: 30,15 + 3570: 30,14 + 3571: 30,17 + 3572: 30,13 + 4311: -13,38 + 4312: -13,39 + 4313: -13,40 + 4414: -40,29 + 4415: -40,28 + 4675: 8,38 + 4784: 13,46 + 4785: 13,47 + 4786: 11,46 + 4787: 11,47 + 5087: 6,80 + 5088: 6,79 + 5089: 6,78 + 5090: 6,77 + 5091: 6,76 + 5092: 6,75 + 5093: 6,74 + 5129: -5,74 + 5130: -5,75 + 5131: -5,78 + 5132: -5,79 + 5133: -5,80 + 5134: -8,79 + 5179: 14,-17 + 5180: 14,-16 + 5181: 14,-15 + 5182: 14,-14 + 5610: 11,-24 + 5611: 11,-25 + 5612: 11,-25 + 5613: 11,-26 + 6324: 2,-56 + 6325: 2,-55 + 6326: 2,-54 + 6332: 2,-60 + 6357: -1,-59 + 6358: -1,-58 + 6421: -10,-60 + 6425: -12,-57 + 6616: -5,-68 + 6617: -5,-67 + 6618: -5,-66 + 6649: 8,-70 + 6658: -5,-70 + 6660: -5,-72 + 6698: 6,-76 + 6909: 27,-53 + 6910: 27,-52 + 6919: 30,-60 + 6920: 30,-59 + 6921: 30,-58 + 6922: 30,-57 + 6923: 30,-56 + 7037: 32,-49 + 7038: 32,-50 + 7039: 32,-51 + 7040: 32,-52 + 7116: 31,-47 + 7117: 31,-46 + 7118: 31,-45 + 7119: 31,-44 + 7156: 14,-46 + 7157: 14,-45 + 7159: 14,-44 + 7520: -1,-58 + 7521: -1,-59 + - node: + color: '#FFFFFFFF' + id: WarnLineGreyscaleE + decals: + 4347: -27,40 + 4348: -27,39 + 4349: -27,38 + - node: + color: '#FFFFFFFF' + id: WarnLineGreyscaleW + decals: + 4344: -21,38 + 4345: -21,39 + 4346: -21,40 + - node: + color: '#FFFFFFFF' + id: WarnLineN + decals: + 36: 2,4 + 37: 1,4 + 38: 0,4 + 39: -1,4 + 512: 10,19 + 897: -28,8 + 898: -29,8 + 1087: -41,12 + 1088: -42,12 + 1089: -43,12 + 1171: -41,-5 + 1172: -42,-5 + 1173: -43,-5 + 1198: -41,-13 + 1199: -40,-13 + 1207: -43,-13 + 1208: -44,-13 + 1209: -45,-13 + 1262: -34,14 + 1268: -34,16 + 1664: -22,-25 + 1665: -23,-25 + 1666: -24,-25 + 1679: -22,-17 + 1680: -23,-17 + 1681: -24,-17 + 1682: -25,-17 + 1853: -6,-21 + 1854: -5,-21 + 1855: -4,-21 + 1856: -3,-21 + 2195: -37,-49 + 2196: -38,-49 + 2271: -43,-53 + 2272: -42,-53 + 2351: -81,-55 + 2354: -78,-53 + 3177: 35,19 + 3869: 40,-10 + 3870: 39,-10 + 3871: 38,-10 + 3872: 37,-10 + 3873: 36,-10 + 3874: 35,-10 + 3884: 46,-13 + 3885: 46,-7 + 3886: 46,-5 + 3913: 46,-15 + 4104: -13,22 + 4105: -12,22 + 4106: -10,22 + 4107: -9,22 + 4108: -8,22 + 4109: -7,22 + 4110: -6,22 + 4111: -4,22 + 4112: -3,22 + 4363: -31,36 + 4364: -30,36 + 4365: -29,36 + 4366: -27,36 + 4467: -40,24 + 4468: -41,24 + 4469: -42,24 + 4470: -43,24 + 4655: 5,35 + 4656: 4,35 + 4677: 4,44 + 4678: 5,44 + 4679: 6,44 + 4680: 7,44 + 4681: 8,44 + 5026: 2,52 + 5027: 1,52 + 5028: 0,52 + 5029: -1,52 + 5034: 2,58 + 5035: -1,58 + 5038: 3,72 + 5039: 2,72 + 5040: 1,72 + 5041: 0,72 + 5042: -1,72 + 5304: 34,-15 + 5305: 33,-15 + 5306: 32,-15 + 5307: 31,-15 + 5308: 30,-15 + 5309: 29,-15 + 5310: 28,-15 + 5381: 47,-33 + 5607: 8,-22 + 5608: 7,-22 + 5609: 6,-22 + 6191: 3,-45 + 6192: 0,-45 + 6193: -1,-45 + 6198: -1,-49 + 6199: -2,-49 + 6327: 4,-53 + 6328: 3,-53 + 6351: -8,-59 + 6352: -6,-60 + 6353: -5,-60 + 6354: -4,-60 + 6355: -3,-60 + 6356: -2,-60 + 6413: -15,-59 + 6414: -14,-59 + 6415: -13,-59 + 6418: -9,-59 + 6432: -15,-56 + 6433: -14,-56 + 6434: -13,-56 + 6435: -12,-56 + 6436: -11,-56 + 6437: -10,-56 + 6438: -21,-60 + 6439: -20,-60 + 6440: -19,-60 + 6441: -18,-60 + 6540: 14,-67 + 6541: 13,-67 + 6542: 12,-67 + 6543: 11,-67 + 6544: 10,-67 + 6620: -4,-65 + 6621: -3,-65 + 6622: -2,-65 + 6623: -1,-65 + 6624: 0,-65 + 6625: 1,-65 + 6626: 2,-65 + 6627: 3,-65 + 6628: 4,-65 + 6636: 4,-70 + 6637: 3,-70 + 6638: 2,-70 + 6647: 6,-71 + 6648: 7,-71 + 6654: -7,-71 + 6655: -6,-71 + 6673: 0,-74 + 6686: -5,-77 + 6687: -4,-77 + 6688: -3,-77 + 6689: -2,-77 + 6690: -1,-77 + 6691: 0,-77 + 6692: 1,-77 + 6693: 2,-77 + 6694: 3,-77 + 6695: 4,-77 + 6696: 5,-77 + 6855: 21,-50 + 6901: 21,-52 + 6905: 23,-54 + 6906: 25,-54 + 6907: 26,-54 + 6917: 27,-61 + 6918: 29,-61 + 7070: 34,-42 + 7071: 35,-42 + 7072: 36,-42 + 7080: 18,-40 + 7081: 19,-40 + 7082: 20,-40 + 7083: 22,-40 + 7084: 23,-40 + 7085: 24,-40 + 7086: 25,-40 + 7087: 26,-40 + 7088: 27,-40 + 7089: 28,-40 + 7097: 12,-48 + 7098: 14,-48 + 7099: 15,-48 + 7100: 16,-48 + 7101: 17,-48 + 7102: 18,-48 + 7103: 19,-48 + 7104: 20,-48 + 7105: 21,-48 + 7106: 22,-48 + 7107: 23,-48 + 7108: 24,-48 + 7109: 25,-48 + 7110: 26,-48 + 7111: 27,-48 + 7112: 28,-48 + 7113: 29,-48 + 7114: 30,-48 + 7158: 13,-48 + 7168: 13,-47 + 7329: 24,-54 + 7332: 25,-61 + 7333: 26,-61 + 7334: 28,-61 + 7522: -4,-60 + 7532: -3,-70 + 7533: -4,-70 + - node: + color: '#FFFFFFFF' + id: WarnLineS + decals: + 40: 4,2 + 41: 4,1 + 42: 4,0 + 43: 4,-1 + 456: -10,4 + 457: -10,5 + 857: -24,-7 + 1138: -37,-4 + 1142: -37,0 + 1143: -37,1 + 1144: -37,2 + 1148: -40,4 + 1170: -40,-6 + 1265: -35,15 + 1266: -33,15 + 1432: -35,-29 + 1667: -25,-24 + 1668: -25,-23 + 1669: -25,-22 + 1812: -21,-31 + 1821: -20,-33 + 1822: -19,-34 + 1823: -19,-33 + 1824: -19,-32 + 1825: -19,-31 + 1862: -1,-22 + 1863: -1,-23 + 1864: -1,-24 + 2127: -43,-44 + 2155: -45,-30 + 2156: -45,-31 + 2233: -33,-52 + 2234: -33,-51 + 2235: -33,-50 + 2352: -83,-53 + 3163: 34,16 + 3166: 38,15 + 3167: 38,16 + 3179: 34,20 + 3440: 46,32 + 3443: 46,39 + 4308: -18,38 + 4309: -18,39 + 4310: -18,40 + 4368: -29,37 + 4369: -29,38 + 4370: -29,39 + 4652: 8,35 + 4653: 8,34 + 4676: 4,38 + 4782: 13,46 + 4783: 13,47 + 5080: 7,74 + 5081: 7,75 + 5082: 7,76 + 5083: 7,77 + 5084: 7,78 + 5085: 7,79 + 5086: 7,80 + 5122: -4,74 + 5123: -4,75 + 5124: -4,76 + 5125: -4,78 + 5126: -4,79 + 5127: -4,80 + 5128: -4,77 + 5183: 18,-17 + 5184: 18,-16 + 5185: 18,-15 + 5186: 18,-14 + 5379: 46,-32 + 5614: 11,-26 + 5615: 11,-25 + 5616: 11,-24 + 6372: 0,-60 + 6373: 0,-61 + 6409: -16,-62 + 6410: -16,-61 + 6411: -16,-60 + 6417: -12,-60 + 6426: -14,-57 + 6430: -16,-57 + 6630: 5,-66 + 6631: 5,-67 + 6632: 5,-68 + 6659: -8,-70 + 6672: 5,-72 + 6684: -6,-76 + 6903: 22,-53 + 6912: 24,-56 + 6913: 24,-57 + 6914: 24,-58 + 6915: 24,-60 + 7160: 11,-47 + 7161: 11,-46 + 7162: 11,-45 + 7163: 11,-44 + 7164: 11,-43 + 7165: 12,-44 + 7166: 12,-45 + 7167: 12,-46 + 7322: 24,-59 + 7548: 5,-70 + 7550: -47,-28 + 7551: -47,-27 + 7552: -47,-26 + - node: + color: '#FFFFFFFF' + id: WarnLineW + decals: + 28: -1,-3 + 29: 0,-3 + 30: 1,-3 + 31: 2,-3 + 843: -29,-4 + 844: -28,-4 + 845: -27,-4 + 846: -26,-4 + 847: -25,-4 + 848: -24,-4 + 849: -30,-7 + 1149: -41,3 + 1150: -42,3 + 1151: -43,3 + 1192: -44,-10 + 1193: -43,-10 + 1194: -45,-9 + 1195: -44,-9 + 1196: -43,-9 + 1264: -34,16 + 1267: -34,14 + 1287: -31,-21 + 1288: -30,-21 + 1421: -35,-27 + 1422: -34,-27 + 1423: -33,-27 + 1670: -24,-21 + 1671: -23,-21 + 1672: -22,-21 + 1846: -3,-25 + 1847: -4,-25 + 1848: -5,-25 + 1849: -6,-25 + 2189: -37,-46 + 2190: -38,-46 + 2273: -43,-53 + 2274: -42,-53 + 2350: -81,-51 + 2353: -78,-53 + 3170: 35,13 + 3171: 34,13 + 3172: 33,13 + 3433: 28,41 + 3434: 29,41 + 3435: 30,41 + 3436: 43,26 + 3875: 35,-7 + 3876: 36,-7 + 3877: 37,-7 + 3878: 38,-7 + 3879: 39,-7 + 3880: 40,-7 + 3881: 46,-5 + 3882: 46,-7 + 3883: 46,-13 + 3912: 46,-15 + 4073: -3,20 + 4074: -4,20 + 4075: -5,20 + 4076: -6,20 + 4077: -7,20 + 4078: -8,20 + 4079: -9,20 + 4080: -10,20 + 4081: -11,20 + 4082: -12,20 + 4083: -13,20 + 4084: -14,20 + 4145: -13,26 + 4146: -12,26 + 4147: -10,26 + 4148: -9,26 + 4149: -6,26 + 4150: -4,26 + 4151: -3,26 + 4153: -8,26 + 4154: -7,26 + 4168: -20,26 + 4169: -21,26 + 4357: -29,32 + 4358: -30,32 + 4359: -31,32 + 4360: -31,36 + 4361: -30,36 + 4362: -29,36 + 4416: -41,30 + 4417: -42,30 + 4418: -43,30 + 5024: -1,53 + 5025: 2,53 + 5043: -1,69 + 5044: 0,69 + 5045: 1,69 + 5046: 2,69 + 5047: 3,69 + 5094: -1,82 + 5095: 0,82 + 5096: 1,82 + 5097: 2,82 + 5098: 3,82 + 5380: 47,-31 + 5600: 6,-28 + 5601: 7,-28 + 5602: 8,-28 + 6200: -2,-48 + 6201: -1,-48 + 6359: -2,-57 + 6360: -3,-57 + 6361: -4,-57 + 6362: -5,-57 + 6363: -6,-57 + 6364: -8,-58 + 6419: -9,-58 + 6422: -10,-58 + 6423: -11,-58 + 6428: -15,-58 + 6442: -18,-62 + 6443: -19,-62 + 6444: -20,-62 + 6445: -21,-62 + 6545: 14,-66 + 6546: 13,-66 + 6547: 12,-66 + 6548: 11,-66 + 6549: 10,-66 + 6633: 4,-70 + 6634: 3,-70 + 6635: 2,-70 + 6645: 7,-69 + 6646: 6,-69 + 6656: -6,-69 + 6657: -7,-69 + 6662: -4,-73 + 6663: -3,-73 + 6664: -2,-73 + 6665: 0,-73 + 6668: 2,-73 + 6669: 3,-73 + 6670: 4,-73 + 6676: -2,-74 + 6677: -3,-74 + 6678: -4,-74 + 6679: -5,-74 + 6680: -6,-74 + 6702: 6,-74 + 6703: 5,-74 + 6704: 4,-74 + 6705: 3,-74 + 6706: 2,-74 + 6856: 21,-50 + 6895: 21,-51 + 6896: 22,-51 + 6897: 24,-51 + 6898: 23,-51 + 6899: 25,-51 + 6900: 26,-51 + 6924: 27,-55 + 6925: 26,-55 + 6926: 25,-55 + 7074: 35,-47 + 7075: 34,-47 + 7122: 30,-43 + 7135: 28,-42 + 7136: 27,-42 + 7137: 26,-42 + 7138: 25,-42 + 7139: 24,-42 + 7140: 23,-42 + 7141: 22,-42 + 7143: 20,-42 + 7144: 21,-42 + 7146: 19,-42 + 7147: 18,-42 + 7148: 17,-42 + 7149: 16,-42 + 7150: 15,-42 + 7151: 14,-42 + 7152: 13,-42 + 7153: 12,-42 + 7169: 13,-43 + 7175: 14,-49 + 7176: 13,-49 + 7177: 12,-49 + 7178: 12,-49 + 7179: 10,-49 + 7323: 28,-55 + 7324: 29,-55 + 7512: -7,-57 + 7513: -6,-57 + 7514: -5,-57 + 7515: -4,-57 + 7516: -3,-57 + 7517: -2,-57 + 7529: -4,-70 + 7530: -3,-70 + - node: + color: '#FFFFFFFF' + id: WoodTrimThinCornerNe + decals: + 3196: 39,5 + 3199: 38,4 + 3200: 37,5 + - node: + color: '#FFFFFFFF' + id: WoodTrimThinCornerNw + decals: + 3206: 41,5 + 3431: 25,35 + - node: + color: '#FFFFFFFF' + id: WoodTrimThinCornerSw + decals: + 2885: 33,9 + - node: + color: '#FFFFFFFF' + id: WoodTrimThinEndS + decals: + 2884: 31,9 + 3195: 39,4 + - node: + color: '#FFFFFFFF' + id: WoodTrimThinEndW + decals: + 3194: 38,5 + - node: + color: '#FFFFFFFF' + id: WoodTrimThinInnerNe + decals: + 3201: 37,4 + 3202: 38,2 + 4781: 6,46 + - node: + color: '#FFFFFFFF' + id: WoodTrimThinInnerNw + decals: + 3205: 41,2 + 3207: 43,5 + 4780: 9,46 + - node: + color: '#FFFFFFFF' + id: WoodTrimThinInnerSw + decals: + 3197: 39,5 + - node: + color: '#FFFFFFFF' + id: WoodTrimThinLineE + decals: + 3198: 38,3 + 4776: 6,47 + 4777: 6,48 + 4778: 6,49 + 4779: 6,50 + - node: + color: '#FFFFFFFF' + id: WoodTrimThinLineN + decals: + 3203: 39,2 + 3204: 40,2 + 3208: 42,5 + 3432: 26,35 + 4774: 8,46 + 4775: 7,46 + - node: + color: '#FFFFFFFF' + id: WoodTrimThinLineS + decals: + 2886: 34,9 + 2887: 35,9 + 4763: -3,54 + 4764: -4,54 + 4765: -5,54 + 4766: -6,54 + 4767: -7,54 + 4768: -8,54 + 4769: -9,54 + 5358: 44,-22 + 5359: 43.996502,-21.948832 + 5360: 43.996502,-21.99856 + 5361: 43.996502,-21.973696 + - node: + color: '#FFFFFFFF' + id: WoodTrimThinLineW + decals: + 2882: 31,11 + 2883: 31,10 + 3209: 41,3 + 3210: 41,4 + 3211: 43,6 + 3212: 43,7 + 3213: 43,8 + 3214: 43,9 + 4770: 9,50 + 4771: 9,49 + 4772: 9,48 + 4773: 9,47 + - node: + cleanable: True + color: '#FFFFFFFF' + id: clown + decals: + 7351: 4.776539,-35.340748 + - node: + cleanable: True + angle: 3.141592653589793 rad + color: '#FF00005A' + id: footprint + decals: + 5139: 12.790892,-10.743357 + - node: + cleanable: True + angle: -3.141592653589793 rad + color: '#FF0000C7' + id: footprint + decals: + 5927: 36.792473,-23.683962 + 5928: 37.137463,-23.28303 + 5929: 36.792473,-22.95669 + 5930: 37.146786,-22.70494 + 5931: 36.78315,-22.359953 + 5932: 37.165436,-22.07091 + 5933: 36.820446,-21.753893 + - node: + cleanable: True + angle: -1.5707963267948966 rad + color: '#FF0000C7' + id: footprint + decals: + 5916: 11.844839,-26.264587 + 5917: 11.6490345,-25.956896 + 5923: 3.9564643,-24.88426 + 5924: 4.4226646,-25.247896 + 5925: 4.8702173,-24.88426 + 5926: 5.205881,-25.25722 + - node: + cleanable: True + angle: 3.141592653589793 rad + color: '#FF0000C7' + id: footprint + decals: + 5918: 12.857773,-20.710676 + 5919: 13.156141,-21.074314 + 5920: 12.8204775,-21.465921 + 5921: 13.128169,-21.801586 + 5922: 12.8204775,-22.239815 + - node: + cleanable: True + angle: 3.141592653589793 rad + color: '#FF0000FF' + id: footprint + decals: + 5142: 12.800216,-9.782984 + 5143: 13.201148,-10.081352 + 5144: 12.800216,-10.333101 + - node: + color: '#FFFFFFFF' + id: rune1 + decals: + 458: -16,6 + 2805: 28,-7 + - node: + color: '#FFFFFFFF' + id: rune2 + decals: + 2806: 29,-7 + - node: + color: '#FFFFFFFF' + id: rune3 + decals: + 2807: 28,-8 + - node: + color: '#FFFFFFFF' + id: rune4 + decals: + 2808: 29,-8 + - node: + cleanable: True + angle: -4.71238898038469 rad + color: '#FF0000C7' + id: thinline + decals: + 5936: 9.984598,-26.331085 + - node: + cleanable: True + angle: -3.141592653589793 rad + color: '#FF0000C7' + id: thinline + decals: + 5934: 37.17476,-21.101212 + 5935: 36.811123,-21.063915 + - node: + cleanable: True + angle: -1.5707963267948966 rad + color: '#FF0000C7' + id: thinline + decals: + 5937: 10.031219,-25.930153 + - node: + cleanable: True + color: '#FF0000FF' + id: thinline + decals: + 5141: 13.210472,-9.009092 + - node: + cleanable: True + angle: 3.141592653589793 rad + color: '#FF0000FF' + id: thinline + decals: + 5140: 12.781568,-8.962471 + - type: GridAtmosphere + version: 2 + data: + tiles: + 0,0: + 0: 65535 + 0,-1: + 0: 65535 + -1,0: + 0: 65535 + 0,1: + 0: 65407 + -1,1: + 0: 65439 + 0,2: + 0: 65535 + -1,2: + 0: 65535 + 0,3: + 0: 29559 + -1,3: + 0: 46010 + 0,4: + 0: 32631 + 1,0: + 0: 65535 + 1,1: + 0: 65519 + 1,2: + 0: 14335 + 1,3: + 0: 62394 + 1,-1: + 0: 65535 + 1,4: + 0: 65535 + 2,0: + 0: 65535 + 2,1: + 0: 14335 + 2,2: + 0: 29119 + 2,3: + 0: 28211 + 1: 68 + 2,-1: + 0: 65535 + 3,0: + 0: 35839 + 3,1: + 0: 47790 + 3,2: + 0: 64187 + 3,3: + 0: 15283 + 3,-1: + 0: 45166 + 3,4: + 0: 15354 + 4,0: + 0: 4095 + 4,1: + 0: 65485 + 4,2: + 0: 65535 + 4,3: + 0: 8191 + 0,-4: + 0: 14199 + 0,-5: + 0: 63351 + -1,-4: + 0: 15352 + 0,-3: + 0: 65399 + -1,-3: + 0: 65419 + 0,-2: + 0: 65535 + -1,-2: + 0: 65535 + -1,-1: + 0: 65535 + 1,-4: + 0: 30511 + 1,-3: + 0: 29447 + 1,-2: + 0: 65535 + 1,-5: + 0: 61567 + 2,-4: + 0: 63351 + 2,-3: + 0: 39928 + 2,-2: + 0: 29691 + 2,-5: + 0: 28919 + 3,-4: + 0: 12031 + 3,-3: + 0: 61182 + 3,-2: + 0: 24818 + 3,-5: + 0: 62071 + 4,-4: + 0: 12287 + 4,-3: + 0: 65535 + 4,-2: + 0: 56788 + 4,-1: + 0: 61919 + -4,-4: + 0: 65421 + -4,-5: + 0: 64907 + -5,-4: + 0: 63288 + -4,-3: + 0: 57297 + -5,-3: + 0: 65335 + -4,-2: + 0: 65520 + -5,-2: + 0: 56785 + -4,-1: + 0: 29183 + -5,-1: + 0: 61661 + -4,0: + 0: 6143 + -3,-4: + 0: 48034 + -3,-3: + 0: 32625 + -3,-2: + 0: 37745 + -3,-1: + 0: 64733 + -3,-5: + 0: 62702 + -3,0: + 0: 53247 + -2,-4: + 0: 49072 + -2,-3: + 0: 41785 + -2,-2: + 0: 65535 + -2,-1: + 0: 65535 + -2,-5: + 0: 65248 + -2,0: + 0: 65535 + -1,-5: + 0: 49080 + -5,0: + 0: 4095 + -4,1: + 0: 7647 + -5,1: + 0: 57309 + -4,2: + 0: 64988 + -5,2: + 0: 56785 + -4,3: + 0: 61133 + -5,3: + 0: 65293 + -4,4: + 0: 65294 + -3,1: + 0: 2525 + -3,2: + 0: 30591 + -3,3: + 0: 65399 + -3,4: + 0: 65359 + -2,1: + 0: 65535 + -2,2: + 0: 14591 + -2,3: + 0: 65155 + -2,4: + 0: 65294 + -1,4: + 0: 64395 + -8,0: + 0: 4095 + -8,-1: + 0: 62702 + -9,0: + 0: 61166 + -8,1: + 0: 61422 + -9,1: + 0: 65518 + -8,2: + 0: 61230 + -9,2: + 0: 65535 + -8,3: + 1: 4352 + 0: 49358 + -9,3: + 0: 61199 + 1: 4096 + -8,4: + 0: 53469 + -7,0: + 0: 4095 + -7,1: + 0: 64989 + -7,2: + 0: 63297 + -7,3: + 0: 53367 + -7,-1: + 0: 61695 + -7,4: + 0: 64735 + -6,0: + 0: 36863 + -6,1: + 0: 64989 + -6,2: + 0: 65532 + -6,3: + 0: 61071 + -6,-1: + 0: 63741 + -6,4: + 0: 56719 + -5,4: + 0: 64399 + -9,-4: + 0: 61166 + -8,-4: + 0: 61152 + -8,-3: + 0: 61679 + -9,-3: + 0: 65262 + -9,-2: + 0: 61166 + -8,-2: + 0: 61152 + -9,-1: + 0: 61166 + -8,-5: + 0: 61408 + -7,-4: + 0: 48048 + -7,-3: + 0: 63547 + -7,-2: + 0: 65521 + -7,-5: + 0: 49080 + -6,-4: + 0: 49080 + -6,-3: + 0: 65435 + -6,-2: + 0: 63672 + -6,-5: + 0: 65535 + -5,-5: + 0: 47900 + -4,5: + 0: 47919 + -5,5: + 0: 35771 + -4,6: + 0: 65338 + -5,6: + 0: 63931 + -4,7: + 0: 47615 + -5,7: + 0: 53759 + -4,8: + 0: 48063 + -3,5: + 0: 56591 + -3,6: + 0: 65309 + -3,7: + 0: 61695 + -3,8: + 0: 65535 + -2,5: + 0: 30479 + -2,6: + 0: 65303 + -2,7: + 0: 36607 + -2,8: + 0: 36863 + -1,5: + 0: 48011 + -1,6: + 0: 48043 + -1,7: + 0: 48059 + -1,8: + 0: 43962 + 0,5: + 0: 30711 + 0,6: + 0: 32631 + 0,7: + 0: 30583 + 0,8: + 0: 30583 + 1,5: + 0: 36848 + 1,6: + 0: 32767 + 1: 32768 + 1,7: + 0: 65520 + 1,8: + 0: 65295 + 2,4: + 0: 28512 + 2,5: + 0: 1776 + 2,6: + 0: 56797 + 2,7: + 0: 4368 + 2: 50368 + 2,8: + 0: 4353 + 2: 35908 + 3,5: + 0: 48059 + 3,6: + 0: 32627 + 3,7: + 2: 61936 + 4,4: + 0: 2491 + 1: 512 + 4,5: + 0: 65535 + 4,6: + 0: 65522 + 4,-5: + 0: 61695 + 5,-4: + 0: 51679 + 5,-3: + 0: 56797 + 5,-2: + 0: 61428 + 5,-1: + 0: 63727 + 5,-5: + 0: 39133 + 1: 1024 + 5,0: + 0: 4095 + 6,-4: + 0: 26239 + 6,-3: + 0: 62748 + 6,-2: + 0: 45980 + 6,-1: + 0: 63679 + 6,0: + 0: 4095 + 7,-4: + 0: 28927 + 7,-3: + 0: 28799 + 7,-2: + 0: 28799 + 7,-1: + 0: 62071 + 7,-5: + 0: 65535 + 7,0: + 0: 32767 + 8,-4: + 0: 61559 + 8,-3: + 0: 65535 + 8,-2: + 0: 65535 + 8,-1: + 0: 64767 + 5,1: + 0: 65535 + 5,2: + 0: 65535 + 5,3: + 0: 36859 + 5,4: + 0: 61439 + 6,1: + 0: 65527 + 6,2: + 0: 65535 + 6,3: + 0: 3955 + 6,4: + 0: 30583 + 7,1: + 0: 65527 + 7,2: + 0: 65535 + 7,3: + 0: 65399 + 7,4: + 0: 30591 + 8,0: + 0: 4095 + 8,1: + 0: 65535 + 8,2: + 0: 65535 + 8,3: + 0: 65520 + 0,-8: + 0: 30583 + 0,-9: + 0: 30591 + -1,-8: + 0: 47295 + 0,-7: + 0: 65399 + -1,-7: + 0: 47295 + 0,-6: + 0: 30591 + -1,-6: + 0: 48063 + 1,-8: + 0: 61439 + 1,-7: + 0: 65535 + 1,-6: + 0: 12287 + 1,-9: + 0: 62207 + 2,-8: + 0: 2047 + 2,-7: + 0: 65399 + 2,-6: + 0: 14207 + 2,-9: + 0: 28895 + 3,-8: + 0: 63351 + 3,-7: + 0: 65535 + 3,-6: + 0: 30719 + 3,-9: + 0: 29183 + 4,-8: + 0: 65279 + 4,-7: + 0: 65535 + 4,-6: + 0: 62719 + -4,-8: + 2: 34 + 0: 61576 + -5,-8: + 0: 61678 + -4,-7: + 0: 45311 + -5,-7: + 0: 55551 + -4,-6: + 0: 14523 + -5,-6: + 0: 55773 + -4,-9: + 2: 8704 + 0: 32909 + -3,-8: + 0: 61627 + -3,-7: + 0: 62207 + -3,-6: + 0: 4095 + -3,-9: + 0: 47423 + -2,-8: + 0: 29183 + -2,-7: + 0: 57471 + -2,-9: + 0: 65371 + -2,-6: + 0: 61166 + -1,-9: + 0: 48011 + -8,-8: + 0: 20479 + -8,-9: + 0: 62702 + -9,-8: + 0: 65535 + -8,-7: + 0: 62702 + -9,-7: + 0: 61183 + -8,-6: + 0: 65535 + -9,-6: + 0: 61182 + -9,-5: + 0: 61167 + -7,-8: + 0: 61439 + -7,-6: + 0: 61438 + -7,-9: + 0: 40157 + -7,-7: + 0: 57582 + -6,-8: + 0: 62702 + -6,-7: + 0: 62207 + -6,-6: + 0: 65535 + -6,-9: + 0: 61005 + -5,-9: + 0: 65037 + -12,-4: + 0: 34831 + -12,-5: + 0: 65535 + -13,-4: + 0: 8 + -12,-3: + 0: 34828 + -12,-2: + 0: 34824 + -12,-1: + 0: 3208 + -12,0: + 0: 34956 + -11,-4: + 0: 47887 + -11,-3: + 0: 65423 + -11,-2: + 0: 61195 + -11,-1: + 0: 61422 + -11,-5: + 0: 65535 + -11,0: + 0: 61167 + -10,-4: + 0: 65358 + -10,-3: + 0: 65535 + -10,-2: + 0: 65343 + -10,-1: + 0: 65535 + -10,0: + 0: 65535 + -10,-5: + 0: 61182 + -12,2: + 2: 13056 + 0: 34952 + -13,2: + 2: 65392 + -12,3: + 2: 4371 + 0: 34824 + -13,3: + 2: 52991 + -12,4: + 2: 16435 + 0: 2184 + -12,1: + 0: 34952 + -11,1: + 0: 65295 + -11,2: + 0: 65535 + -11,3: + 0: 32655 + -11,4: + 0: 57599 + -10,1: + 0: 65327 + -10,2: + 0: 32767 + -10,3: + 0: 26127 + -10,4: + 0: 61542 + -9,4: + 0: 53471 + 1: 32 + -13,4: + 2: 252 + -12,7: + 2: 64768 + -13,7: + 2: 60416 + -12,8: + 2: 65535 + -11,5: + 0: 3982 + -11,6: + 0: 4078 + -11,7: + 0: 61166 + -11,8: + 0: 61166 + -10,5: + 0: 53247 + -10,6: + 0: 36829 + -10,7: + 0: 7677 + -10,8: + 0: 65535 + -9,5: + 0: 53725 + -9,6: + 0: 3551 + -9,7: + 0: 3581 + -9,8: + 0: 61679 + -8,5: + 0: 28895 + -8,6: + 0: 1911 + -8,7: + 0: 4095 + -8,8: + 0: 61166 + -7,5: + 0: 53759 + -7,6: + 0: 53725 + -7,7: + 0: 36863 + -7,8: + 0: 64443 + -6,5: + 0: 7389 + -6,6: + 0: 63965 + -6,7: + 0: 46079 + -6,8: + 0: 48059 + -5,8: + 0: 56799 + -12,-8: + 0: 4095 + -12,-9: + 0: 64764 + -12,-7: + 0: 3838 + -13,-7: + 0: 2248 + -12,-6: + 0: 65535 + -13,-6: + 0: 34952 + -13,-5: + 0: 34952 + -11,-8: + 0: 2039 + -11,-7: + 0: 3838 + -11,-6: + 0: 65535 + -11,-9: + 0: 30583 + -10,-8: + 0: 48051 + -10,-7: + 0: 58299 + -10,-9: + 0: 65319 + -10,-6: + 0: 58606 + -9,-9: + 0: 65518 + -13,-9: + 0: 128 + -12,-10: + 0: 49288 + -12,-12: + 2: 1092 + -12,-13: + 2: 18295 + -12,-11: + 0: 34828 + -11,-12: + 0: 2039 + -11,-11: + 0: 32751 + -11,-10: + 0: 29559 + -10,-12: + 0: 3581 + -10,-11: + 0: 4095 + -10,-10: + 0: 32631 + -10,-13: + 0: 53247 + -9,-12: + 0: 20479 + -9,-11: + 0: 61183 + -9,-10: + 0: 65535 + -9,-13: + 0: 65535 + -8,-12: + 0: 49599 + -8,-11: + 0: 65039 + -8,-13: + 0: 45533 + -8,-10: + 0: 3822 + -7,-12: + 0: 61695 + -7,-11: + 0: 4367 + 2: 3072 + -7,-10: + 0: 52701 + -7,-13: + 0: 61695 + -6,-12: + 0: 64733 + -6,-11: + 0: 36047 + 2: 256 + -6,-10: + 0: 56797 + -6,-13: + 0: 56574 + -5,-12: + 0: 56797 + -5,-11: + 0: 52701 + -5,-10: + 0: 56797 + -5,-13: + 0: 56607 + -4,-12: + 0: 57309 + -4,-11: + 0: 56829 + -4,-10: + 0: 64991 + -4,-13: + 0: 64911 + -3,-12: + 0: 47899 + -3,-11: + 0: 48123 + -3,-10: + 0: 65307 + -3,-13: + 0: 64263 + -2,-12: + 0: 48009 + -2,-11: + 0: 46011 + -2,-10: + 0: 47883 + -2,-13: + 0: 54607 + -1,-12: + 0: 65278 + -1,-11: + 0: 47352 + -1,-10: + 0: 64395 + -1,-13: + 0: 57535 + 0,-12: + 0: 65521 + 0,-11: + 0: 65393 + 0,-10: + 0: 30583 + -4,-16: + 2: 15 + 0: 65280 + -4,-17: + 2: 65535 + -5,-16: + 0: 65399 + -4,-15: + 0: 65535 + -5,-15: + 0: 65535 + -4,-14: + 0: 65311 + -5,-14: + 0: 56591 + -3,-16: + 2: 7 + 0: 9760 + -3,-15: + 0: 32759 + -3,-14: + 0: 63239 + -3,-17: + 2: 30583 + -2,-16: + 0: 61695 + -2,-15: + 0: 65535 + -2,-14: + 0: 30543 + -2,-17: + 0: 65535 + -1,-16: + 0: 61951 + -1,-15: + 0: 65535 + -1,-14: + 0: 47887 + -1,-17: + 0: 62384 + 0,-16: + 0: 55551 + 0,-15: + 0: 57309 + 0,-14: + 0: 56781 + 0,-13: + 0: 56529 + -8,-16: + 0: 30719 + -8,-17: + 0: 61440 + 2: 119 + -9,-16: + 0: 47295 + -8,-15: + 0: 35827 + -9,-15: + 0: 28863 + -8,-14: + 0: 55551 + -9,-14: + 0: 61567 + -7,-16: + 0: 48639 + -7,-15: + 0: 24767 + -7,-14: + 0: 62062 + -7,-17: + 0: 61559 + -6,-16: + 0: 47547 + -6,-15: + 0: 47291 + -6,-14: + 0: 59451 + -6,-17: + 0: 12339 + -12,-16: + 2: 12071 + -12,-17: + 2: 30579 + -13,-16: + 2: 12071 + -12,-15: + 2: 30583 + -12,-14: + 2: 2035 + -13,-14: + 2: 20351 + -13,-13: + 2: 2287 + -11,-16: + 2: 44975 + -11,-14: + 2: 255 + 0: 28672 + -11,-13: + 0: 2036 + -11,-17: + 2: 63351 + -11,-15: + 2: 65535 + -10,-16: + 2: 13107 + 0: 32904 + -10,-15: + 2: 29491 + 0: 136 + -10,-14: + 2: 17 + 0: 61664 + -10,-17: + 2: 13039 + 0: 32768 + -9,-17: + 0: 45056 + 2: 255 + -16,-14: + 2: 3840 + -17,-14: + 2: 36744 + -16,-13: + 2: 15 + -17,-13: + 2: 2191 + -15,-14: + 2: 7936 + -15,-13: + 2: 15 + -15,-16: + 2: 2048 + -14,-16: + 2: 12071 + -14,-14: + 2: 12194 + -14,-13: + 2: 559 + -14,-17: + 2: 30671 + -14,-15: + 2: 1911 + -13,-17: + 2: 30526 + -13,-15: + 2: 1911 + -20,-15: + 2: 48240 + -21,-15: + 2: 59896 + -20,-14: + 0: 62224 + 2: 132 + -21,-14: + 0: 61120 + 2: 1 + -20,-13: + 0: 19 + 2: 46208 + -21,-13: + 0: 206 + 2: 57600 + -19,-15: + 2: 4096 + -20,-12: + 2: 124 + -19,-13: + 2: 4910 + -19,-14: + 2: 11811 + -18,-14: + 2: 20292 + -18,-13: + 2: 1103 + -17,-15: + 2: 32768 + -22,-14: + 2: 64166 + -22,-13: + 2: 50858 + -22,-15: + 2: 51200 + -22,-12: + 2: 8 + -21,-12: + 2: 2297 + -14,-18: + 2: 32768 + -13,-18: + 2: 63616 + -12,-18: + 2: 32720 + -11,-18: + 2: 60400 + -10,-18: + 2: 65535 + -9,-18: + 2: 65529 + -8,-18: + 2: 32767 + -8,-19: + 2: 61440 + -7,-19: + 2: 65024 + -7,-18: + 2: 1023 + -6,-19: + 2: 4096 + -6,-18: + 2: 49 + 0: 12288 + -5,-18: + 2: 34952 + -4,-18: + 2: 65535 + -5,-17: + 2: 2184 + 8,-5: + 0: 30583 + 9,-4: + 0: 62071 + 9,-3: + 0: 28671 + 9,-2: + 0: 65526 + 9,-1: + 0: 53503 + 9,-5: + 0: 63351 + 9,0: + 0: 52701 + 10,-4: + 0: 61627 + 10,-3: + 0: 65535 + 10,-2: + 0: 65535 + 10,-1: + 0: 56351 + 10,-5: + 0: 48048 + 10,0: + 0: 65309 + 11,-4: + 0: 61937 + 11,-3: + 0: 4369 + 2: 17472 + 11,-2: + 0: 61937 + 11,-1: + 0: 4353 + 11,-5: + 0: 30576 + 11,0: + 0: 1 + 8,4: + 0: 65535 + 9,1: + 0: 65262 + 9,3: + 0: 30582 + 9,2: + 0: 3822 + 9,4: + 0: 32631 + 10,1: + 0: 65535 + 10,2: + 0: 10239 + 10,3: + 0: 32639 + 1: 32896 + 11,1: + 2: 8192 + 11,2: + 2: 61158 + 11,3: + 2: 61102 + 11,4: + 2: 8430 + 12,2: + 2: 65520 + 12,3: + 2: 65531 + 4,-9: + 0: 61681 + 5,-8: + 0: 61695 + 5,-7: + 0: 65519 + 5,-6: + 0: 53503 + 5,-9: + 0: 62716 + 6,-7: + 0: 65486 + 6,-6: + 0: 30255 + 6,-5: + 0: 1655 + 3: 256 + 6,-8: + 0: 61166 + 6,-9: + 0: 59647 + 7,-8: + 0: 56829 + 7,-7: + 0: 65293 + 7,-6: + 0: 65487 + 7,-9: + 0: 7396 + 8,-8: + 0: 56797 + 8,-7: + 0: 65421 + 8,-6: + 0: 30495 + 4,7: + 0: 61152 + 4,8: + 0: 43246 + 5,6: + 0: 65530 + 5,7: + 0: 65520 + 5,5: + 4: 61152 + 0: 4 + 5,8: + 0: 46079 + 6,5: + 4: 30576 + 6,6: + 0: 32624 + 6,7: + 0: 64432 + 6,8: + 0: 28859 + 7,5: + 0: 63271 + 7,6: + 0: 65399 + 7,7: + 0: 32767 + 7,8: + 0: 63351 + 8,5: + 0: 30471 + 8,6: + 0: 65287 + 8,7: + 0: 4095 + 8,8: + 0: 65535 + 9,5: + 0: 32752 + 9,6: + 0: 65359 + 9,7: + 0: 4095 + 9,8: + 0: 65535 + 10,4: + 0: 65520 + 10,5: + 0: 52692 + 10,6: + 0: 64909 + 10,7: + 0: 52735 + 10,8: + 0: 64989 + 11,5: + 0: 62544 + 11,6: + 0: 4358 + 11,7: + 0: 4369 + 11,8: + 0: 4383 + 12,4: + 2: 61183 + 12,5: + 0: 12288 + 2: 52462 + 12,6: + 2: 4 + 13,4: + 2: 3311 + 13,5: + 2: 65280 + 13,3: + 2: 65519 + 13,6: + 2: 12 + 14,4: + 2: 32759 + 14,5: + 2: 63351 + 14,6: + 2: 26231 + 14,3: + 2: 65535 + 14,7: + 2: 58982 + 14,8: + 2: 61166 + 15,4: + 2: 30576 + 15,5: + 2: 62071 + 15,7: + 2: 65399 + 15,6: + 2: 30578 + 15,8: + 2: 14207 + 16,5: + 2: 62071 + 16,7: + 2: 65479 + 13,2: + 2: 28928 + 15,3: + 2: 65329 + 16,3: + 2: 61696 + 16,4: + 2: 30479 + 16,6: + 2: 30578 + 17,4: + 2: 28927 + 17,5: + 2: 62071 + 17,7: + 2: 4092 + 17,3: + 2: 4096 + 17,6: + 2: 30578 + 18,4: + 2: 28784 + 18,5: + 2: 62071 + 18,7: + 2: 371 + 18,6: + 2: 30578 + 12,11: + 2: 65527 + 11,11: + 2: 52428 + 0: 273 + 13,11: + 2: 8176 + 14,11: + 2: 311 + 14,9: + 2: 61166 + 14,10: + 2: 26222 + 15,9: + 2: 4915 + 15,10: + 2: 1 + 3,8: + 0: 57504 + 3,9: + 0: 61006 + 4,9: + 0: 64424 + 4,10: + 0: 65035 + 3,10: + 0: 61070 + 4,11: + 0: 206 + 2: 20736 + 3,11: + 0: 29198 + 2: 34816 + 4,12: + 2: 57343 + 5,9: + 0: 47931 + 5,10: + 0: 65291 + 5,11: + 0: 383 + 2: 49152 + 5,12: + 2: 61166 + 6,9: + 0: 63247 + 6,10: + 0: 7 + 2: 26112 + 6,11: + 2: 65254 + 6,12: + 2: 8127 + 7,9: + 0: 32631 + 7,10: + 0: 626 + 7,11: + 2: 63488 + 7,12: + 2: 4095 + 8,9: + 0: 65535 + 8,10: + 0: 255 + 2: 61440 + 8,11: + 2: 65535 + 0,9: + 0: 30583 + -1,9: + 0: 49147 + 0,10: + 0: 30583 + -1,10: + 0: 49035 + 0,11: + 0: 65399 + -1,11: + 0: 47547 + 0,12: + 0: 32767 + 1,9: + 0: 65528 + 1,10: + 0: 65535 + 1,11: + 0: 64783 + 1,12: + 0: 8669 + 5: 1024 + 1: 2048 + 2,9: + 0: 4368 + 2: 51340 + 2,10: + 0: 4369 + 2: 17416 + 2,11: + 0: 47873 + 2: 12 + 2,12: + 0: 7163 + 3,12: + 2: 34952 + 0: 4912 + 8,12: + 2: 127 + 9,9: + 0: 65535 + 9,10: + 0: 255 + 2: 61440 + 9,11: + 2: 65534 + 9,12: + 2: 15 + 10,9: + 0: 57309 + 10,10: + 0: 52445 + 2: 4096 + 10,11: + 2: 4369 + 0: 36044 + 10,12: + 0: 140 + 11,9: + 0: 61713 + 11,10: + 0: 4369 + 2: 50176 + 11,12: + 0: 1 + 4,13: + 2: 13095 + 3,13: + 2: 65532 + 4,14: + 2: 19 + 3,14: + 2: 65535 + 5,13: + 2: 14 + -1,12: + 0: 47291 + 0,13: + 0: 29823 + -1,13: + 0: 48059 + 0,14: + 0: 65351 + -1,14: + 0: 65435 + 0,15: + 0: 4095 + -1,15: + 0: 3327 + 2: 4096 + 1,13: + 0: 65535 + 1,14: + 0: 65327 + 1,15: + 0: 1151 + 2: 57344 + 1,16: + 2: 24405 + 2,13: + 0: 30583 + 2,14: + 0: 3 + 2: 59520 + 2,15: + 2: 29614 + 2,16: + 2: 45038 + 3,15: + 2: 4983 + 3,16: + 2: 26483 + 8,-9: + 0: 52692 + 9,-8: + 0: 56799 + 9,-7: + 0: 65421 + 9,-6: + 0: 65535 + 9,-9: + 0: 56784 + 10,-8: + 0: 30591 + 10,-7: + 0: 64279 + 10,-6: + 0: 48059 + 10,-9: + 0: 30576 + 11,-8: + 0: 65535 + 11,-7: + 0: 30479 + 11,-6: + 0: 30583 + 11,-9: + 0: 65520 + 12,-7: + 2: 4974 + -4,9: + 0: 65289 + 1: 2 + -5,9: + 0: 60941 + -4,10: + 0: 32783 + 2: 28672 + -5,10: + 0: 6 + 1: 8 + 2: 61440 + -4,11: + 2: 30583 + -5,11: + 2: 65527 + -4,12: + 2: 30583 + -3,9: + 0: 56773 + -3,10: + 0: 64709 + -3,11: + 0: 46064 + -3,12: + 0: 16267 + -2,11: + 0: 28926 + -2,9: + 0: 61166 + -2,10: + 0: 61070 + -2,12: + 0: 37751 + -8,9: + 0: 61038 + 1: 128 + -9,9: + 0: 61198 + -8,10: + 0: 1252 + -9,10: + 2: 65520 + -8,11: + 2: 272 + -9,11: + 2: 3327 + -7,9: + 0: 60939 + -7,10: + 0: 57550 + -7,11: + 0: 238 + 2: 61440 + -7,12: + 2: 15 + -6,9: + 0: 65307 + -6,10: + 0: 29055 + -6,11: + 0: 7 + 6: 16 + 3: 32 + 2: 63488 + -6,12: + 2: 7 + -5,12: + 2: 36047 + -13,8: + 2: 65535 + -12,9: + 2: 65535 + -13,9: + 2: 61166 + -12,10: + 2: 65535 + -13,10: + 2: 3212 + -12,11: + 2: 207 + -11,9: + 2: 61440 + 0: 238 + -11,10: + 2: 65535 + -11,11: + 2: 223 + -10,9: + 0: 52479 + 2: 4096 + -10,10: + 2: 65521 + -10,11: + 2: 31 + -4,13: + 2: 65527 + -5,13: + 2: 136 + -4,14: + 2: 52430 + -3,13: + 2: 12544 + 0: 34954 + -3,14: + 2: 65331 + 0: 8 + -3,15: + 2: 17919 + -2,13: + 0: 65535 + -2,14: + 0: 52271 + 2: 4096 + -2,15: + 2: 62225 + 0: 2188 + -2,16: + 2: 40857 + -1,16: + 2: 12066 + -15,2: + 2: 34816 + -14,2: + 2: 65520 + -14,3: + 2: 206 + -16,6: + 2: 30496 + -16,7: + 2: 65303 + -17,7: + 2: 36849 + -15,7: + 2: 63351 + -15,6: + 2: 28928 + -15,8: + 2: 1791 + -14,7: + 2: 63474 + -14,8: + 2: 57343 + -14,6: + 2: 8192 + -14,9: + 2: 8 + -19,5: + 2: 32768 + -18,5: + 2: 62071 + -18,4: + 2: 28672 + -18,6: + 2: 30578 + -18,7: + 2: 3326 + -17,5: + 2: 62071 + -17,4: + 2: 28672 + -17,6: + 2: 30578 + -4,18: + 2: 10444 + -4,19: + 2: 11950 + -4,17: + 2: 19584 + -3,17: + 2: 61371 + -3,18: + 2: 60380 + -3,19: + 2: 58163 + 0: 192 + -3,16: + 2: 61096 + -3,20: + 2: 56543 + -2,17: + 2: 17 + 0: 60552 + -2,19: + 0: 61182 + -2,18: + 0: 60942 + -2,20: + 0: 60942 + -1,17: + 0: 48048 + -1,18: + 0: 5387 + 2: 16384 + -1,19: + 0: 4561 + 2: 17412 + -1,20: + 0: 47877 + 0,16: + 2: 3840 + 0,17: + 0: 65520 + 0,18: + 0: 9999 + 0,19: + 0: 10231 + 0,20: + 0: 65282 + 2: 5 + 1,18: + 0: 52494 + 2: 4096 + 1,19: + 0: 52444 + 2: 4353 + 1,17: + 0: 61156 + 1,20: + 0: 60941 + 2,17: + 0: 12544 + 2: 35014 + 2,18: + 0: 13059 + 2: 34952 + 2,19: + 0: 13107 + 2: 34952 + 2,20: + 0: 13059 + 2: 34952 + 3,17: + 2: 65524 + 3,18: + 2: 65165 + 3,19: + 2: 61286 + 4,18: + 2: 13072 + 4,19: + 2: 13090 + 3,20: + 2: 30680 + 0,21: + 0: 255 + 2: 61440 + -1,21: + 0: 187 + 2: 61440 + 0,22: + 2: 36744 + -1,22: + 2: 65211 + 1,21: + 2: 61440 + 0: 238 + 1,22: + 2: 31726 + 1,23: + 2: 15 + 2,21: + 0: 1 + 2: 63176 + 2,22: + 2: 925 + 3,21: + 2: 13911 + 3,22: + 2: 49 + 4,20: + 2: 1 + -4,20: + 2: 52416 + -4,21: + 2: 4 + -3,21: + 2: 51711 + -3,22: + 2: 236 + -2,21: + 2: 62224 + 0: 140 + -2,22: + 2: 3789 + -2,23: + 2: 8 + -1,23: + 2: 7 + 8,-12: + 0: 64977 + 8,-13: + 0: 56799 + 7,-12: + 0: 65535 + 8,-11: + 0: 3549 + 7,-11: + 0: 32767 + 8,-10: + 0: 65535 + 7,-10: + 0: 32583 + 9,-12: + 0: 30704 + 9,-11: + 0: 49535 + 9,-10: + 0: 30205 + 9,-13: + 0: 30583 + 10,-12: + 0: 4144 + 2: 204 + 7: 16384 + 10,-11: + 0: 61457 + 7: 78 + 10,-10: + 0: 47615 + 10,-13: + 2: 65343 + 11,-12: + 2: 35775 + 11,-11: + 7: 1 + 0: 61440 + 2: 200 + 11,-10: + 0: 54783 + 11,-13: + 2: 57321 + 12,-12: + 2: 65527 + 12,-11: + 2: 26225 + 12,-13: + 2: 14335 + 12,-10: + 2: 61166 + 12,-9: + 2: 61158 + 12,-8: + 2: 61162 + 13,-8: + 2: 4369 + 4,-12: + 0: 65535 + 4,-13: + 0: 65535 + 3,-12: + 0: 65535 + 4,-11: + 0: 65535 + 3,-11: + 0: 65535 + 4,-10: + 0: 56607 + 3,-10: + 0: 63346 + 5,-12: + 0: 65535 + 5,-11: + 0: 65535 + 5,-10: + 0: 56591 + 5,-13: + 0: 65535 + 6,-12: + 0: 65535 + 6,-11: + 0: 65535 + 6,-10: + 0: 65295 + 6,-13: + 0: 65535 + 7,-13: + 0: 65535 + 1,-12: + 0: 65532 + 1,-11: + 0: 65526 + 1,-10: + 0: 65295 + 1,-13: + 0: 57340 + 2,-12: + 0: 56799 + 2,-11: + 0: 65500 + 2,-10: + 0: 56769 + 2,-13: + 0: 53725 + 3,-13: + 0: 28791 + 0,-17: + 0: 63921 + 1,-16: + 0: 55551 + 1,-15: + 0: 55773 + 1,-14: + 0: 57311 + 1,-17: + 0: 65534 + 2,-16: + 0: 53471 + 2,-15: + 0: 7389 + 2,-14: + 0: 64989 + 2,-17: + 0: 64989 + 3,-16: + 0: 28791 + 3,-15: + 0: 1911 + 3,-14: + 0: 30583 + 3,-17: + 0: 30583 + 4,-16: + 8: 1911 + 4,-15: + 9: 1911 + 4,-14: + 7: 1911 + 0,-20: + 2: 255 + 0: 61440 + 0,-21: + 2: 65535 + -1,-20: + 2: 255 + 0: 61440 + 0,-19: + 0: 65535 + -1,-19: + 0: 65535 + 0,-18: + 0: 65520 + -1,-18: + 0: 65520 + 1,-20: + 2: 255 + 0: 61440 + 1,-19: + 0: 65535 + 1,-18: + 0: 65534 + 1,-21: + 2: 63248 + 2,-20: + 2: 52983 + 2,-19: + 0: 4369 + 2: 17604 + 2,-18: + 0: 56785 + 2,-21: + 2: 4096 + 3,-20: + 2: 4096 + 3,-19: + 2: 25139 + 3,-18: + 0: 30576 + -4,-19: + 2: 61132 + -4,-20: + 2: 32768 + -3,-20: + 2: 32766 + -3,-19: + 2: 17495 + -3,-18: + 2: 30583 + -2,-20: + 2: 255 + 0: 57344 + -2,-19: + 0: 65535 + -2,-18: + 0: 65535 + -2,-21: + 2: 65152 + -1,-21: + 2: 65535 + 5,-16: + 2: 4369 + 0: 52428 + 5,-15: + 2: 4369 + 0: 52428 + 5,-14: + 2: 273 + 0: 52428 + 5,-17: + 2: 4369 + 0: 50244 + 6,-16: + 0: 65535 + 6,-15: + 0: 32767 + 6,-14: + 0: 65535 + 6,-17: + 0: 61440 + 2: 241 + 7,-16: + 0: 65535 + 7,-15: + 0: 65535 + 7,-14: + 0: 65535 + 7,-17: + 0: 61440 + 2: 252 + 8,-16: + 0: 4369 + 2: 17476 + 8,-15: + 0: 4369 + 2: 17476 + 8,-14: + 0: 4369 + 2: 1092 + 8,-17: + 0: 4096 + 2: 19711 + 9,-16: + 7: 1911 + 9,-15: + 10: 1911 + 9,-14: + 7: 1911 + 10,-16: + 2: 64989 + 10,-15: + 2: 49087 + 10,-14: + 2: 65535 + 10,-17: + 2: 65535 + 11,-16: + 2: 56797 + 11,-15: + 2: 36749 + 11,-14: + 2: 56797 + 11,-17: + 2: 65395 + 12,-16: + 2: 56735 + 12,-15: + 2: 36749 + 12,-14: + 2: 7645 + 4,-18: + 2: 34816 + 5,-18: + 2: 65518 + 4,-17: + 2: 2184 + 5,-19: + 2: 60544 + 6,-19: + 2: 65534 + 6,-18: + 2: 4369 + 7: 52416 + 7,-19: + 2: 65527 + 7,-18: + 7: 4368 + 2: 16392 + 8,-19: + 2: 61696 + 8,-18: + 2: 65279 + 9,-18: + 2: 65328 + 9,-17: + 2: 4095 + 10,-18: + 2: 4352 + 12,-17: + 2: 61696 + 13,-16: + 2: 56831 + 13,-15: + 2: 36749 + 13,-14: + 2: 64989 + 13,-13: + 2: 31 + 13,-17: + 2: 4096 + 14,-16: + 2: 4353 + 14,-15: + 2: 769 + 14,-14: + 2: 273 + 14,-13: + 2: 1 + -1,-22: + 2: 61132 + -1,-23: + 2: 51336 + -1,-24: + 2: 32768 + 0,-24: + 2: 13107 + 0,-23: + 2: 30515 + 0,-22: + 2: 65527 + 0,-25: + 2: 4096 + -1,-25: + 2: 35840 + uniqueMixes: + - volume: 2500 + temperature: 293.15 + moles: + - 21.824879 + - 82.10312 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - volume: 2500 + temperature: 293.14975 + moles: + - 20.078888 + - 75.53487 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - volume: 2500 + immutable: True + moles: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - volume: 2500 + temperature: 293.15 + moles: + - 21.6852 + - 81.57766 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - volume: 2500 + temperature: 235 + moles: + - 21.824879 + - 82.10312 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - volume: 2500 + temperature: 293.15 + moles: + - 23.57087 + - 88.67137 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - volume: 2500 + temperature: 293.15 + moles: + - 21.813705 + - 82.06108 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - volume: 2500 + temperature: 293.15 + moles: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - volume: 2500 + temperature: 293.15 + moles: + - 0 + - 6666.982 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - volume: 2500 + temperature: 293.15 + moles: + - 6666.982 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - volume: 2500 + temperature: 293.15 + moles: + - 0 + - 0 + - 0 + - 6666.982 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + chunkSize: 4 + - type: GasTileOverlay + - type: RadiationGridResistance + - type: BecomesStation + id: RadStation +- proto: AcousticGuitarInstrument + entities: + - uid: 3 + components: + - type: Transform + pos: 37.525913,4.7083726 + parent: 2 +- proto: AirAlarm + entities: + - uid: 4 + components: + - type: Transform + pos: -9.5,6.5 + parent: 2 + - type: DeviceList + devices: + - 11152 + - 11153 + - 11154 + - 11155 + - 11268 + - 11267 + - 11156 + - 11157 + - 11375 + - 11374 + - 11373 + - 11372 + - 14694 + - 14866 + - 14693 + - 14891 + - 524 + - uid: 5 + components: + - type: Transform + pos: -16.5,8.5 + parent: 2 + - uid: 6 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,-4.5 + parent: 2 + - uid: 7 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,-4.5 + parent: 2 + - uid: 8 + components: + - type: Transform + pos: -17.5,13.5 + parent: 2 + - type: DeviceList + devices: + - 14931 + - 14775 + - 11377 + - 601 + - uid: 9 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,11.5 + parent: 2 + - type: DeviceList + devices: + - 11377 + - 11372 + - 11234 + - 11376 + - 14736 + - 14929 + - 14932 + - 14776 + - 600 + - uid: 10 + components: + - type: Transform + pos: -4.5,17.5 + parent: 2 + - type: DeviceList + devices: + - 11373 + - 11234 + - 14774 + - 14930 + - 599 + - uid: 11 + components: + - type: Transform + pos: 4.5,20.5 + parent: 2 + - type: DeviceList + devices: + - 11378 + - 11379 + - 11374 + - 14714 + - 14928 + - 11101 + - 563 + - uid: 12 + components: + - type: Transform + pos: 10.5,20.5 + parent: 2 + - uid: 13 + components: + - type: Transform + pos: 7.5,14.5 + parent: 2 + - type: DeviceList + devices: + - 11375 + - 11090 + - 14890 + - 14735 + - 562 + - uid: 14 + components: + - type: Transform + pos: -6.5,-11.5 + parent: 2 + - uid: 15 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,-7.5 + parent: 2 + - type: DeviceList + devices: + - 11371 + - 11138 + - 14893 + - 14692 + - 522 + - uid: 16 + components: + - type: Transform + pos: -25.5,3.5 + parent: 2 + - type: DeviceList + devices: + - 11371 + - 11148 + - 11149 + - 11150 + - 11151 + - 11153 + - 11152 + - 14691 + - 14892 + - 523 + - uid: 17 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,5.5 + parent: 2 + - type: DeviceList + devices: + - 11364 + - 11362 + - 11365 + - 14894 + - 14698 + - 519 + - uid: 18 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,5.5 + parent: 2 + - type: DeviceList + devices: + - 11364 + - 11099 + - 521 + - uid: 19 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,2.5 + parent: 2 + - type: DeviceList + devices: + - 11366 + - 11368 + - 11369 + - 14687 + - 14828 + - 516 + - uid: 20 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -45.5,6.5 + parent: 2 + - type: DeviceList + devices: + - 11357 + - 11358 + - 11359 + - 11360 + - 11366 + - 11367 + - 14688 + - 14898 + - 517 + - uid: 21 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,-5.5 + parent: 2 + - type: DeviceList + devices: + - 11163 + - 11161 + - 11162 + - 11160 + - 11159 + - 11158 + - 11151 + - 11150 + - 11149 + - 11148 + - 11356 + - 11355 + - 14684 + - 14900 + - 514 + - uid: 22 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,-14.5 + parent: 2 + - type: DeviceList + devices: + - 11370 + - 11356 + - 11368 + - 11369 + - 14827 + - 14686 + - 515 + - uid: 23 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -25.5,-12.5 + parent: 2 + - type: DeviceList + devices: + - 11355 + - 14906 + - 14761 + - 513 + - uid: 24 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,16.5 + parent: 2 + - type: DeviceList + devices: + - 11363 + - 14897 + - 14690 + - 520 + - uid: 25 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -45.5,15.5 + parent: 2 + - uid: 26 + components: + - type: Transform + pos: -26.5,-15.5 + parent: 2 + - type: DeviceList + devices: + - 11341 + - 11340 + - 14757 + - 14905 + - 504 + - uid: 27 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,-18.5 + parent: 2 + - type: DeviceList + devices: + - 11353 + - 11370 + - 11136 + - 14685 + - 14899 + - 512 + - uid: 28 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,-17.5 + parent: 2 + - type: DeviceList + devices: + - 11163 + - 11162 + - 11161 + - 11341 + - 11353 + - 11170 + - 11339 + - 11167 + - 11168 + - 11169 + - 11354 + - 14683 + - 14901 + - 511 + - uid: 29 + components: + - type: Transform + pos: -36.5,-25.5 + parent: 2 + - type: DeviceList + devices: + - 11169 + - 11168 + - 11167 + - 11338 + - 11164 + - 11165 + - 11166 + - 11337 + - 11336 + - 11335 + - 11334 + - 11333 + - 11173 + - 11172 + - 11171 + - 11121 + - 14919 + - 14766 + - 14759 + - 14903 + - 500 + - uid: 30 + components: + - type: Transform + pos: -4.5,-29.5 + parent: 2 + - type: DeviceList + devices: + - 11175 + - 11330 + - 11174 + - 14663 + - 14910 + - 497 + - uid: 31 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,-38.5 + parent: 2 + - type: DeviceList + devices: + - 11164 + - 11165 + - 11166 + - 11344 + - 11345 + - 11346 + - 11343 + - 11342 + - 11120 + - 14769 + - 14922 + - 507 + - uid: 32 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,-39.5 + parent: 2 + - type: DeviceList + devices: + - 11342 + - 14768 + - 14921 + - 506 + - uid: 33 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,-39.5 + parent: 2 + - uid: 34 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,-25.5 + parent: 2 + - type: DeviceList + devices: + - 11340 + - 11170 + - 11339 + - 11334 + - 14758 + - 14902 + - 503 + - uid: 35 + components: + - type: Transform + pos: -25.5,-25.5 + parent: 2 + - type: DeviceList + devices: + - 11169 + - 11168 + - 11167 + - 11338 + - 11164 + - 11165 + - 11166 + - 11337 + - 11336 + - 11335 + - 11334 + - 11333 + - 11173 + - 11172 + - 11171 + - 11121 + - 14919 + - 14766 + - 14759 + - 14903 + - 500 + - uid: 36 + components: + - type: Transform + pos: -14.5,-21.5 + parent: 2 + - type: DeviceList + devices: + - 11333 + - 11352 + - 14762 + - 14907 + - 14763 + - 14908 + - 501 + - 502 + - uid: 37 + components: + - type: Transform + pos: -9.5,-20.5 + parent: 2 + - type: DeviceList + devices: + - 11173 + - 11172 + - 11171 + - 11330 + - 11332 + - 14909 + - 14664 + - 499 + - 11426 + - 604 + - uid: 38 + components: + - type: Transform + pos: -7.5,-25.5 + parent: 2 + - type: DeviceList + devices: + - 11173 + - 11172 + - 11171 + - 11330 + - 11332 + - 14909 + - 14664 + - 499 + - uid: 39 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,-34.5 + parent: 2 + - type: DeviceList + devices: + - 11335 + - 11135 + - 14904 + - 14760 + - 505 + - uid: 40 + components: + - type: Transform + pos: -4.5,-19.5 + parent: 2 + - type: DeviceList + devices: + - 14752 + - 14844 + - 11307 + - 496 + - uid: 41 + components: + - type: Transform + pos: -3.5,-34.5 + parent: 2 + - uid: 42 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,-38.5 + parent: 2 + - type: DeviceList + devices: + - 11175 + - 11330 + - 11174 + - 14663 + - 14910 + - 14666 + - 14911 + - 14665 + - 14912 + - 14667 + - 14914 + - 14669 + - 14915 + - 14668 + - 14916 + - 14976 + - 14814 + - 498 + - uid: 43 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,-44.5 + parent: 2 + - type: DeviceList + devices: + - 11176 + - 11177 + - 11179 + - 11180 + - 11181 + - 11178 + - 14666 + - 14911 + - 14665 + - 14912 + - 14667 + - 14914 + - 14669 + - 14915 + - 14668 + - 14916 + - 498 + - uid: 44 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,-50.5 + parent: 2 + - type: DeviceList + devices: + - 11179 + - 11180 + - 11176 + - 11177 + - 11181 + - 11178 + - 11228 + - 11122 + - 14666 + - 14911 + - 14665 + - 14912 + - 14667 + - 14914 + - 14669 + - 14915 + - 14668 + - 14916 + - 498 + - uid: 45 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -41.5,-44.5 + parent: 2 + - type: DeviceList + devices: + - 11348 + - 11347 + - 11344 + - 11345 + - 14770 + - 14924 + - 508 + - uid: 46 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -40.5,-32.5 + parent: 2 + - type: DeviceList + devices: + - 11347 + - 11348 + - 11118 + - 14923 + - 14771 + - 509 + - uid: 47 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -38.5,-48.5 + parent: 2 + - type: DeviceList + devices: + - 11351 + - 11350 + - 11346 + - 11349 + - 14926 + - 14773 + - 510 + - 14925 + - 14772 + - uid: 48 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -38.5,-48.5 + parent: 2 + - uid: 49 + components: + - type: Transform + pos: -13.5,-54.5 + parent: 2 + - type: DeviceList + devices: + - 11231 + - 11230 + - 11134 + - 14838 + - 14679 + - 490 + - uid: 50 + components: + - type: Transform + pos: 17.5,3.5 + parent: 2 + - type: DeviceList + devices: + - 11182 + - 11183 + - 11184 + - 11185 + - 11266 + - 11267 + - 11268 + - 11265 + - 11264 + - 14715 + - 14865 + - 543 + - uid: 51 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,3.5 + parent: 2 + - type: DeviceList + devices: + - 11197 + - 11196 + - 11195 + - 11192 + - 11193 + - 11194 + - 11186 + - 11187 + - 11188 + - 11189 + - 11190 + - 11191 + - 11184 + - 11183 + - 11182 + - 11262 + - 14871 + - 14732 + - 14716 + - 14867 + - 544 + - uid: 52 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,-5.5 + parent: 2 + - type: DeviceList + devices: + - 11126 + - 11266 + - 11185 + - 14864 + - 14754 + - 542 + - uid: 53 + components: + - type: Transform + pos: 30.5,-13.5 + parent: 2 + - type: DeviceList + devices: + - 11097 + - 11276 + - 11275 + - 11274 + - 14674 + - 14855 + - 534 + - uid: 54 + components: + - type: Transform + pos: 22.5,-16.5 + parent: 2 + - type: DeviceList + devices: + - 11277 + - 11095 + - 14853 + - 14741 + - 535 + - uid: 55 + components: + - type: Transform + pos: 26.5,20.5 + parent: 2 + - type: DeviceList + devices: + - 11243 + - 11240 + - 11239 + - 11238 + - 11237 + - 11236 + - 11235 + - 11242 + - 14717 + - 14873 + - 14872 + - 14697 + - 14868 + - 14733 + - 547 + - uid: 56 + components: + - type: Transform + pos: 24.5,24.5 + parent: 2 + - type: DeviceList + devices: + - 11091 + - 11243 + - 14874 + - 14718 + - 548 + - uid: 57 + components: + - type: Transform + pos: 15.5,19.5 + parent: 2 + - uid: 58 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,9.5 + parent: 2 + - type: DeviceList + devices: + - 11197 + - 11196 + - 11195 + - 11192 + - 11193 + - 11194 + - 11186 + - 11187 + - 11188 + - 11189 + - 11190 + - 11191 + - 11184 + - 11183 + - 11182 + - 11262 + - 14871 + - 14732 + - 14716 + - 14867 + - 544 + - uid: 59 + components: + - type: Transform + pos: 36.5,20.5 + parent: 2 + - type: DeviceList + devices: + - 11248 + - 11245 + - 11247 + - 11246 + - 14876 + - 14750 + - 550 + - uid: 60 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 38.5,20.5 + parent: 2 + - type: DeviceList + devices: + - 11145 + - 14878 + - 14710 + - 552 + - uid: 61 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 39.5,15.5 + parent: 2 + - type: DeviceList + devices: + - 11263 + - 14731 + - 14870 + - 546 + - uid: 62 + components: + - type: Transform + pos: 41.5,20.5 + parent: 2 + - type: DeviceList + devices: + - 11248 + - 11144 + - 14877 + - 14651 + - 551 + - uid: 63 + components: + - type: Transform + pos: 38.5,11.5 + parent: 2 + - type: DeviceList + devices: + - 14869 + - 14812 + - 11262 + - 545 + - uid: 64 + components: + - type: Transform + pos: 40.5,-1.5 + parent: 2 + - type: DeviceList + devices: + - 11147 + - 11264 + - 11265 + - 11269 + - 14862 + - 14753 + - 14863 + - 14734 + - 541 + - uid: 65 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,20.5 + parent: 2 + - uid: 66 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 17.5,28.5 + parent: 2 + - type: DeviceList + devices: + - 11258 + - 11256 + - 11257 + - 11250 + - 14885 + - 14720 + - 556 + - uid: 67 + components: + - type: Transform + pos: 37.5,31.5 + parent: 2 + - type: DeviceList + devices: + - 11198 + - 11199 + - 11200 + - 11201 + - 11202 + - 11203 + - 11250 + - 11249 + - 11244 + - 11145 + - 14725 + - 14927 + - 14728 + - 14879 + - 553 + - uid: 68 + components: + - type: Transform + pos: 17.5,41.5 + parent: 2 + - type: DeviceList + devices: + - 11259 + - 11260 + - 11256 + - 14886 + - 14755 + - 557 + - uid: 69 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 16.5,35.5 + parent: 2 + - type: DeviceList + devices: + - 14756 + - 14889 + - 558 + - uid: 70 + components: + - type: Transform + pos: 13.5,45.5 + parent: 2 + - type: DeviceList + devices: + - 11261 + - 11259 + - 14887 + - 14724 + - 559 + - uid: 71 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,43.5 + parent: 2 + - type: DeviceList + devices: + - 11261 + - 11257 + - 14721 + - 14888 + - 560 + - uid: 72 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,39.5 + parent: 2 + - type: DeviceList + devices: + - 11198 + - 11199 + - 11200 + - 11201 + - 11202 + - 11203 + - 11250 + - 11249 + - 11244 + - 11145 + - 14725 + - 14927 + - 14728 + - 14879 + - 555 + - uid: 73 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 45.5,40.5 + parent: 2 + - type: DeviceList + devices: + - 11206 + - 11205 + - 11204 + - 11252 + - 11251 + - 14880 + - 14730 + - 554 + - uid: 74 + components: + - type: Transform + pos: 46.5,-19.5 + parent: 2 + - type: DeviceList + devices: + - 14744 + - 14860 + - 11271 + - 537 + - uid: 75 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,-17.5 + parent: 2 + - type: DeviceList + devices: + - 11270 + - 14811 + - 14974 + - 536 + - uid: 76 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 42.5,-15.5 + parent: 2 + - type: DeviceList + devices: + - 11269 + - 14743 + - 14973 + - 540 + - uid: 77 + components: + - type: Transform + pos: -18.5,23.5 + parent: 2 + - type: DeviceList + devices: + - 11380 + - 11141 + - 14934 + - 14696 + - 593 + - uid: 78 + components: + - type: Transform + pos: -8.5,30.5 + parent: 2 + - type: DeviceList + devices: + - 11388 + - 11387 + - 11208 + - 11209 + - 11210 + - 11385 + - 11386 + - 11383 + - 11384 + - 11211 + - 11212 + - 11213 + - 14938 + - 14935 + - 14777 + - 14778 + - 14936 + - 14937 + - 14779 + - 581 + - uid: 79 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,33.5 + parent: 2 + - type: DeviceList + devices: + - 11386 + - 11389 + - 11390 + - 14781 + - 14941 + - 582 + - uid: 80 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,34.5 + parent: 2 + - type: DeviceList + devices: + - 11392 + - 11391 + - 11385 + - 11389 + - 14699 + - 14939 + - 584 + - uid: 81 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,22.5 + parent: 2 + - type: DeviceList + devices: + - 591 + - 14794 + - 14956 + - 11401 + - uid: 82 + components: + - type: Transform + pos: -16.5,41.5 + parent: 2 + - type: DeviceList + devices: + - 11392 + - 14780 + - 14940 + - 583 + - uid: 83 + components: + - type: Transform + pos: -35.5,31.5 + parent: 2 + - type: DeviceList + devices: + - 11404 + - 11403 + - 11402 + - 14788 + - 14948 + - 595 + - uid: 84 + components: + - type: Transform + pos: -21.5,42.5 + parent: 2 + - type: DeviceList + devices: + - 11398 + - 11399 + - 14703 + - 14945 + - 588 + - uid: 85 + components: + - type: Transform + pos: -25.5,46.5 + parent: 2 + - type: DeviceList + devices: + - 11399 + - 14829 + - 14785 + - 589 + - uid: 86 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,35.5 + parent: 2 + - type: DeviceList + devices: + - 11400 + - 14944 + - 14784 + - 587 + - uid: 87 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,26.5 + parent: 2 + - type: DeviceList + devices: + - 11408 + - 14953 + - 14702 + - 590 + - uid: 88 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,23.5 + parent: 2 + - type: DeviceList + devices: + - 11403 + - 11408 + - 11409 + - 14701 + - 14954 + - 596 + - uid: 89 + components: + - type: Transform + pos: -39.5,27.5 + parent: 2 + - type: DeviceList + devices: + - 11409 + - 14952 + - 14792 + - 597 + - uid: 90 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -41.5,27.5 + parent: 2 + - type: DeviceList + devices: + - 11407 + - 11406 + - 11405 + - 11404 + - 14704 + - 14830 + - 14949 + - 14789 + - 14950 + - 14790 + - 14951 + - 14791 + - 594 + - uid: 91 + components: + - type: Transform + pos: -38.5,23.5 + parent: 2 + - type: DeviceList + devices: + - 14793 + - 14955 + - 598 + - uid: 92 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,34.5 + parent: 2 + - type: DeviceList + devices: + - 11393 + - 11391 + - 14943 + - 14783 + - 585 + - uid: 93 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,35.5 + parent: 2 + - type: DeviceList + devices: + - 11215 + - 11214 + - 11397 + - 11396 + - 11142 + - 14705 + - 14957 + - 580 + - uid: 94 + components: + - type: Transform + pos: -32.5,31.5 + parent: 2 + - type: DeviceList + devices: + - 11402 + - 11401 + - 11395 + - 11394 + - 11211 + - 11212 + - 11213 + - 11393 + - 11400 + - 11398 + - 14947 + - 14700 + - 586 + - uid: 95 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,32.5 + parent: 2 + - type: DeviceList + devices: + - 11411 + - 14795 + - 14958 + - 565 + - uid: 96 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,33.5 + parent: 2 + - type: DeviceList + devices: + - 11412 + - 11413 + - 14833 + - 14711 + - 566 + - uid: 97 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,43.5 + parent: 2 + - type: DeviceList + devices: + - 11413 + - 14796 + - 14959 + - 567 + - uid: 98 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,44.5 + parent: 2 + - type: DeviceList + devices: + - 11223 + - 11222 + - 11221 + - 11220 + - 11414 + - 11415 + - 11416 + - 11417 + - 14960 + - 14708 + - 602 + - uid: 99 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,46.5 + parent: 2 + - type: DeviceList + devices: + - 11425 + - 11424 + - 14652 + - 14832 + - 571 + - uid: 100 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,50.5 + parent: 2 + - type: DeviceList + devices: + - 11424 + - 11423 + - 14963 + - 14709 + - 570 + - uid: 101 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,47.5 + parent: 2 + - type: DeviceList + devices: + - 11414 + - 11420 + - 11419 + - 14815 + - 14712 + - 484 + - uid: 102 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,56.5 + parent: 2 + - type: DeviceList + devices: + - 11415 + - 11420 + - 11418 + - 14653 + - 14961 + - 568 + - uid: 103 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,57.5 + parent: 2 + - type: DeviceList + devices: + - 11423 + - 11422 + - 11421 + - 11418 + - 14962 + - 14797 + - 569 + - uid: 104 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,68.5 + parent: 2 + - type: DeviceList + devices: + - 572 + - uid: 105 + components: + - type: Transform + pos: -2.5,73.5 + parent: 2 + - type: DeviceList + devices: + - 573 + - 14964 + - 14800 + - uid: 106 + components: + - type: Transform + pos: 9.5,81.5 + parent: 2 + - type: DeviceList + devices: + - 575 + - 14967 + - 14801 + - uid: 107 + components: + - type: Transform + pos: 7.5,86.5 + parent: 2 + - type: DeviceList + devices: + - 576 + - 14968 + - 14802 + - uid: 108 + components: + - type: Transform + pos: -4.5,86.5 + parent: 2 + - type: DeviceList + devices: + - 578 + - 14804 + - 14970 + - uid: 109 + components: + - type: Transform + pos: -6.5,81.5 + parent: 2 + - type: DeviceList + devices: + - 579 + - 14805 + - 14971 + - uid: 110 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,-9.5 + parent: 2 + - type: DeviceList + devices: + - 11096 + - 11098 + - 11124 + - 11296 + - 11297 + - 14749 + - 14849 + - 530 + - uid: 111 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,-15.5 + parent: 2 + - type: DeviceList + devices: + - 11297 + - 11296 + - 11295 + - 11129 + - 14681 + - 14848 + - 529 + - uid: 112 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,-19.5 + parent: 2 + - type: DeviceList + devices: + - 11280 + - 11281 + - 11282 + - 11285 + - 11286 + - 11287 + - 11295 + - 11294 + - 11292 + - 11291 + - 11290 + - 11289 + - 11288 + - 11293 + - 14847 + - 14671 + - 14852 + - 14739 + - 527 + - uid: 113 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,-19.5 + parent: 2 + - type: DeviceList + devices: + - 11293 + - 14850 + - 14740 + - uid: 114 + components: + - type: Transform + pos: 40.5,-19.5 + parent: 2 + - type: DeviceList + devices: + - 11147 + - 11270 + - 11282 + - 11281 + - 11280 + - 11279 + - 11278 + - 11277 + - 11276 + - 11275 + - 11274 + - 11272 + - 11273 + - 11271 + - 14854 + - 14673 + - 14742 + - 14857 + - 533 + - uid: 115 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,-32.5 + parent: 2 + - type: DeviceList + devices: + - 11283 + - 14859 + - 14682 + - 539 + - uid: 116 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 37.5,-29.5 + parent: 2 + - type: DeviceList + devices: + - 11272 + - 11273 + - 11283 + - 11125 + - 14858 + - 14675 + - 538 + - uid: 117 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,-32.5 + parent: 2 + - type: DeviceList + devices: + - 11279 + - 11278 + - 11284 + - 11128 + - 14861 + - 14748 + - 531 + - uid: 118 + components: + - type: Transform + pos: 30.5,-26.5 + parent: 2 + - type: DeviceList + devices: + - 14747 + - 14856 + - 11284 + - 532 + - uid: 119 + components: + - type: Transform + pos: 22.5,-29.5 + parent: 2 + - type: DeviceList + devices: + - 11285 + - 11286 + - 11287 + - 14745 + - 14851 + - 528 + - uid: 120 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,-33.5 + parent: 2 + - type: DeviceList + devices: + - 11288 + - 11289 + - 11306 + - 11305 + - 11304 + - 11123 + - 14846 + - 14738 + - 526 + - uid: 121 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-26.5 + parent: 2 + - type: DeviceList + devices: + - 11300 + - 11299 + - 11298 + - 11292 + - 11291 + - 11290 + - 11303 + - 11302 + - 11301 + - 11304 + - 11305 + - 11306 + - 14845 + - 14670 + - 525 + - uid: 122 + components: + - type: Transform + pos: 14.5,-39.5 + parent: 2 + - type: DeviceList + devices: + - 11314 + - 11315 + - 11318 + - 11324 + - 11323 + - 11131 + - 11130 + - 14662 + - 14824 + - 14659 + - 14823 + - 485 + - uid: 123 + components: + - type: Transform + pos: 34.5,-40.5 + parent: 2 + - type: DeviceList + devices: + - 11323 + - 11227 + - 14658 + - 14822 + - 494 + - uid: 124 + components: + - type: Transform + pos: 8.5,-38.5 + parent: 2 + - type: DeviceList + devices: + - 11310 + - 11311 + - 11315 + - 11314 + - 11313 + - 11312 + - 14810 + - 14972 + - 486 + - uid: 125 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-49.5 + parent: 2 + - type: DeviceList + devices: + - 11225 + - 11224 + - 11312 + - 11313 + - 11318 + - 11317 + - 11316 + - 11320 + - 11321 + - 11319 + - 11322 + - 11132 + - 14677 + - 14835 + - 14836 + - 14806 + - 487 + - uid: 126 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-54.5 + parent: 2 + - type: DeviceList + devices: + - 11319 + - 14746 + - 14825 + - 493 + - uid: 127 + components: + - type: Transform + pos: 6.5,28.5 + parent: 2 + - type: DeviceList + devices: + - 14834 + - 14713 + - 11410 + - 11143 + - 564 + - uid: 128 + components: + - type: Transform + pos: -1.5,-54.5 + parent: 2 + - type: DeviceList + devices: + - 11230 + - 11231 + - 11327 + - 11325 + - 11133 + - 14837 + - 14678 + - 489 + - uid: 129 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,-58.5 + parent: 2 + - type: DeviceList + devices: + - 11326 + - 11325 + - 11321 + - 11320 + - 14807 + - 14826 + - 488 + - uid: 130 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,-66.5 + parent: 2 + - type: DeviceList + devices: + - 11232 + - 11233 + - 14680 + - 14841 + - 492 + - uid: 131 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-66.5 + parent: 2 + - uid: 132 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-64.5 + parent: 2 + - type: DeviceList + devices: + - 11327 + - 11328 + - 11326 + - 11329 + - 11233 + - 11232 + - 14839 + - 14840 + - 14809 + - 14808 + - 491 + - uid: 133 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,-65.5 + parent: 2 + - type: DeviceList + devices: + - 11314 + - 11315 + - 11318 + - 11324 + - 11323 + - 11131 + - 11130 + - 14662 + - 14824 + - 14659 + - 14823 + - 485 + - uid: 134 + components: + - type: Transform + pos: 36.5,-47.5 + parent: 2 + - uid: 135 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,17.5 + parent: 2 + - type: DeviceList + devices: + - 11380 + - 11381 + - 11382 + - 11376 + - 11207 + - 11140 + - 14933 + - 14695 + - 592 + - uid: 136 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-39.5 + parent: 2 + - type: DeviceList + devices: + - 11156 + - 11157 + - 11300 + - 11299 + - 11298 + - 11307 + - 11308 + - 11175 + - 11224 + - 11225 + - 11310 + - 11311 + - 11309 + - 14661 + - 14842 + - 14843 + - 14676 + - 495 + - uid: 137 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,21.5 + parent: 2 + - type: DeviceList + devices: + - 11104 + - 14975 + - 14813 + - 561 + - uid: 138 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,20.5 + parent: 2 + - type: DeviceList + devices: + - 11195 + - 11196 + - 11197 + - 11245 + - 11229 + - 11242 + - 11244 + - 11247 + - 11246 + - 14719 + - 14875 + - 549 + - uid: 139 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,4.5 + parent: 2 + - type: DeviceList + devices: + - 11158 + - 11159 + - 11160 + - 11363 + - 11361 + - 11360 + - 11359 + - 11358 + - 11357 + - 11362 + - 14689 + - 14896 + - 518 + - uid: 140 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,24.5 + parent: 2 + - type: DeviceList + devices: + - 11154 + - 11155 + - 11207 + - 11378 + - 11410 + - 11216 + - 11217 + - 11218 + - 11219 + - 11411 + - 14707 + - 14831 + - 14787 + - 14946 + - 603 + - uid: 141 + components: + - type: Transform + pos: 6.5,73.5 + parent: 2 + - type: DeviceList + devices: + - 574 + - 14966 + - 14798 + - uid: 142 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,83.5 + parent: 2 + - type: DeviceList + devices: + - 577 + - 14803 + - 14969 +- proto: AirCanister + entities: + - uid: 143 + components: + - type: Transform + pos: 28.5,-28.5 + parent: 2 + - uid: 144 + components: + - type: Transform + pos: -21.5,12.5 + parent: 2 + - uid: 12222 + components: + - type: Transform + pos: 2.5,-42.5 + parent: 2 + - uid: 12224 + components: + - type: Transform + pos: 1.5,-42.5 + parent: 2 +- proto: Airlock + entities: + - uid: 146 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,11.5 + parent: 2 + - uid: 147 + components: + - type: Transform + pos: 38.5,25.5 + parent: 2 + - uid: 148 + components: + - type: Transform + pos: 39.5,24.5 + parent: 2 + - uid: 149 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,36.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18281 + - uid: 150 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,39.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18280 +- proto: AirlockArmoryGlassLocked + entities: + - uid: 151 + components: + - type: Transform + pos: -15.5,30.5 + parent: 2 + - uid: 152 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,32.5 + parent: 2 +- proto: AirlockAtmosphericsGlassLocked + entities: + - uid: 153 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,-40.5 + parent: 2 + - uid: 155 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-47.5 + parent: 2 + - uid: 156 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 41.5,-43.5 + parent: 2 + - type: DeviceLinkSink + links: + - 157 + - type: DeviceLinkSource + linkedPorts: + 157: + - DoorStatus: DoorBolt + - uid: 157 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 39.5,-43.5 + parent: 2 + - type: DeviceLinkSink + links: + - 156 + - type: DeviceLinkSource + linkedPorts: + 156: + - DoorStatus: DoorBolt + - uid: 22690 + components: + - type: Transform + pos: 9.5,-41.5 + parent: 2 +- proto: AirlockAtmosphericsLocked + entities: + - uid: 158 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 33.5,-44.5 + parent: 2 + - uid: 159 + components: + - type: Transform + pos: 33.5,-51.5 + parent: 2 +- proto: AirlockBarLocked + entities: + - uid: 160 + components: + - type: Transform + pos: 16.5,15.5 + parent: 2 +- proto: AirlockCaptainGlassLocked + entities: + - uid: 161 + components: + - type: Transform + pos: -3.5,57.5 + parent: 2 +- proto: AirlockCaptainLocked + entities: + - uid: 162 + components: + - type: Transform + pos: -9.5,50.5 + parent: 2 + - uid: 163 + components: + - type: Transform + pos: -7.5,51.5 + parent: 2 +- proto: AirlockCargoGlassLocked + entities: + - uid: 164 + components: + - type: Transform + pos: -36.5,7.5 + parent: 2 + - uid: 165 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -38.5,5.5 + parent: 2 +- proto: AirlockCargoLocked + entities: + - uid: 166 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,10.5 + parent: 2 +- proto: AirlockChapelLocked + entities: + - uid: 167 + components: + - type: Transform + pos: 18.5,39.5 + parent: 2 + - uid: 168 + components: + - type: Transform + pos: 14.5,37.5 + parent: 2 + - uid: 169 + components: + - type: Transform + pos: 15.5,41.5 + parent: 2 + - uid: 170 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 16.5,43.5 + parent: 2 +- proto: AirlockChemistryLocked + entities: + - uid: 171 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,-22.5 + parent: 2 + - uid: 172 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,-31.5 + parent: 2 +- proto: AirlockChiefEngineerLocked + entities: + - uid: 173 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-52.5 + parent: 2 +- proto: AirlockChiefJusticeLocked + entities: + - uid: 145 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,11.5 + parent: 2 +- proto: AirlockChiefMedicalOfficerLocked + entities: + - uid: 174 + components: + - type: Transform + pos: 23.5,-16.5 + parent: 2 + - uid: 175 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,-22.5 + parent: 2 +- proto: AirlockCommandGlassLocked + entities: + - uid: 176 + components: + - type: Transform + pos: 7.5,36.5 + parent: 2 + - uid: 177 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,54.5 + parent: 2 + - uid: 178 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,57.5 + parent: 2 + - uid: 179 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,57.5 + parent: 2 + - uid: 180 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,54.5 + parent: 2 +- proto: AirlockCommandLocked + entities: + - uid: 181 + components: + - type: Transform + pos: -31.5,-11.5 + parent: 2 + - uid: 182 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-23.5 + parent: 2 + - uid: 183 + components: + - type: Transform + pos: 3.5,26.5 + parent: 2 + - uid: 184 + components: + - type: Transform + pos: 3.5,52.5 + parent: 2 + - uid: 185 + components: + - type: Transform + pos: 5.5,57.5 + parent: 2 +- proto: AirlockCorpsmanGlassLocked + entities: + - uid: 186 + components: + - type: Transform + pos: -25.5,35.5 + parent: 2 +- proto: AirlockDetectiveLocked + entities: + - uid: 187 + components: + - type: Transform + pos: -17.5,19.5 + parent: 2 +- proto: AirlockEngineeringGlassLocked + entities: + - uid: 188 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,18.5 + parent: 2 + - uid: 190 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-40.5 + parent: 2 + - uid: 191 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,-43.5 + parent: 2 + - uid: 192 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,-43.5 + parent: 2 + - uid: 193 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,-55.5 + parent: 2 + - uid: 194 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-36.5 + parent: 2 + - uid: 195 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-57.5 + parent: 2 + - uid: 196 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-61.5 + parent: 2 + - uid: 197 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-65.5 + parent: 2 + - uid: 198 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-67.5 + parent: 2 + - uid: 22679 + components: + - type: Transform + pos: 3.5,-41.5 + parent: 2 +- proto: AirlockEngineeringLocked + entities: + - uid: 199 + components: + - type: Transform + pos: 15.5,-3.5 + parent: 2 + - uid: 200 + components: + - type: Transform + pos: -32.5,-55.5 + parent: 2 + - uid: 201 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,-54.5 + parent: 2 + - uid: 202 + components: + - type: Transform + pos: -5.5,-54.5 + parent: 2 + - uid: 203 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,23.5 + parent: 2 + - uid: 204 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,16.5 + parent: 2 + - uid: 205 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,-57.5 + parent: 2 + - uid: 206 + components: + - type: Transform + pos: 11.5,21.5 + parent: 2 + - uid: 207 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,46.5 + parent: 2 + - uid: 208 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,-61.5 + parent: 2 + - uid: 209 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,-61.5 + parent: 2 + - uid: 210 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-51.5 + parent: 2 + - uid: 211 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,-55.5 + parent: 2 + - uid: 212 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,-16.5 + parent: 2 + - uid: 213 + components: + - type: Transform + pos: 8.5,21.5 + parent: 2 +- proto: AirlockExternalAtmosphericsLocked + entities: + - uid: 214 + components: + - type: Transform + pos: -7.5,77.5 + parent: 2 + - type: DeviceLinkSink + links: + - 215 + - type: DeviceLinkSource + linkedPorts: + 215: + - DoorStatus: DoorBolt + - uid: 215 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,77.5 + parent: 2 + - type: DeviceLinkSink + links: + - 214 + - type: DeviceLinkSource + linkedPorts: + 214: + - DoorStatus: DoorBolt + - uid: 216 + components: + - type: Transform + pos: 22.5,-65.5 + parent: 2 + - type: DeviceLinkSink + links: + - 217 + - type: DeviceLinkSource + linkedPorts: + 217: + - DoorStatus: DoorBolt + - uid: 217 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,-67.5 + parent: 2 + - type: DeviceLinkSink + links: + - 216 + - type: DeviceLinkSource + linkedPorts: + 216: + - DoorStatus: DoorBolt + - uid: 218 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,-46.5 + parent: 2 + - type: DeviceLinkSink + links: + - 219 + - type: DeviceLinkSource + linkedPorts: + 219: + - DoorStatus: DoorBolt + - uid: 219 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,-46.5 + parent: 2 + - type: DeviceLinkSink + links: + - 218 + - type: DeviceLinkSource + linkedPorts: + 218: + - DoorStatus: DoorBolt +- proto: AirlockExternalEngineeringLocked + entities: + - uid: 220 + components: + - type: Transform + pos: -36.5,-54.5 + parent: 2 + - uid: 221 + components: + - type: Transform + pos: -38.5,-54.5 + parent: 2 + - uid: 222 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.5,47.5 + parent: 2 + - type: DeviceLinkSink + links: + - 223 + - type: DeviceLinkSource + linkedPorts: + 223: + - DoorStatus: DoorBolt + - uid: 223 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,47.5 + parent: 2 + - type: DeviceLinkSink + links: + - 222 + - type: DeviceLinkSource + linkedPorts: + 222: + - DoorStatus: DoorBolt + - uid: 224 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,-60.5 + parent: 2 + - uid: 225 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,-62.5 + parent: 2 +- proto: AirlockExternalGlass + entities: + - uid: 226 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 29.5,40.5 + parent: 2 + - uid: 227 + components: + - type: Transform + pos: 45.5,39.5 + parent: 2 + - uid: 228 + components: + - type: Transform + pos: 45.5,32.5 + parent: 2 + - uid: 229 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 45.5,-12.5 + parent: 2 + - uid: 230 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 45.5,-6.5 + parent: 2 + - uid: 231 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 45.5,-4.5 + parent: 2 + - uid: 232 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 45.5,-14.5 + parent: 2 + - uid: 350 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -43.5,-26.5 + parent: 2 +- proto: AirlockExternalGlassCargoLocked + entities: + - uid: 233 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -43.5,-1.5 + parent: 2 + - uid: 234 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -43.5,0.5 + parent: 2 + - uid: 235 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -41.5,-11.5 + parent: 2 + - type: DeviceLinkSink + links: + - 236 + - type: DeviceLinkSource + linkedPorts: + 236: + - DoorStatus: DoorBolt + - uid: 236 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -45.5,-11.5 + parent: 2 + - type: DeviceLinkSink + links: + - 235 + - type: DeviceLinkSource + linkedPorts: + 235: + - DoorStatus: DoorBolt + - uid: 237 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -39.5,-18.5 + parent: 2 +- proto: AirlockExternalGlassEngineeringLocked + entities: + - uid: 238 + components: + - type: Transform + pos: 47.5,23.5 + parent: 2 + - uid: 239 + components: + - type: Transform + pos: 49.5,23.5 + parent: 2 + - uid: 240 + components: + - type: Transform + pos: 43.5,47.5 + parent: 2 + - uid: 241 + components: + - type: Transform + pos: 43.5,49.5 + parent: 2 +- proto: AirlockExternalGlassLocked + entities: + - uid: 242 + components: + - type: Transform + pos: -10.5,43.5 + parent: 2 + - uid: 243 + components: + - type: Transform + pos: -12.5,43.5 + parent: 2 + - uid: 244 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -29.5,40.5 + parent: 2 + - uid: 245 + components: + - type: Transform + pos: -41.5,22.5 + parent: 2 + - uid: 246 + components: + - type: Transform + pos: -45.5,-43.5 + parent: 2 + - uid: 247 + components: + - type: Transform + pos: -43.5,-43.5 + parent: 2 + - uid: 248 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -46.5,-34.5 + parent: 2 + - type: DeviceLinkSink + links: + - 249 + - type: DeviceLinkSource + linkedPorts: + 249: + - DoorStatus: DoorBolt + - uid: 249 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -48.5,-34.5 + parent: 2 + - type: DeviceLinkSink + links: + - 248 + - type: DeviceLinkSource + linkedPorts: + 248: + - DoorStatus: DoorBolt +- proto: AirlockExternalGlassSalvageLocked + entities: + - uid: 1929 + components: + - type: Transform + pos: -49.5,-18.5 + parent: 2 + - uid: 23938 + components: + - type: Transform + pos: -49.5,-19.5 + parent: 2 + - uid: 23940 + components: + - type: Transform + pos: -49.5,-20.5 + parent: 2 +- proto: AirlockExternalGlassShuttleArrivals + entities: + - uid: 250 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 47.5,32.5 + parent: 2 + - uid: 251 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 47.5,39.5 + parent: 2 +- proto: AirlockExternalGlassShuttleEmergencyLocked + entities: + - uid: 252 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 47.5,-12.5 + parent: 2 + - uid: 253 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 47.5,-4.5 + parent: 2 + - uid: 254 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 47.5,-6.5 + parent: 2 + - uid: 255 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 47.5,-14.5 + parent: 2 +- proto: AirlockExternalGlassShuttleEscape + entities: + - uid: 257 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,42.5 + parent: 2 + - uid: 258 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,42.5 + parent: 2 + - uid: 23943 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -47.5,-26.5 + parent: 2 +- proto: AirlockExternalGlassShuttleLocked + entities: + - uid: 259 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -45.5,0.5 + parent: 2 + - uid: 260 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -45.5,-1.5 + parent: 2 + - uid: 261 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -43.5,26.5 + parent: 2 + - uid: 262 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -43.5,22.5 + parent: 2 + - uid: 16324 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -51.5,-18.5 + parent: 2 + - uid: 16373 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -51.5,-19.5 + parent: 2 + - uid: 23014 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -51.5,-20.5 + parent: 2 +- proto: AirlockFreezerLocked + entities: + - uid: 264 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,20.5 + parent: 2 +- proto: AirlockGlass + entities: + - uid: 265 + components: + - type: Transform + pos: 3.5,18.5 + parent: 2 + - uid: 266 + components: + - type: Transform + pos: 5.5,12.5 + parent: 2 + - uid: 267 + components: + - type: Transform + pos: -8.5,8.5 + parent: 2 + - uid: 269 + components: + - type: Transform + pos: -12.5,1.5 + parent: 2 + - uid: 270 + components: + - type: Transform + pos: 0.5,14.5 + parent: 2 + - uid: 273 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-12.5 + parent: 2 + - uid: 274 + components: + - type: Transform + pos: 35.5,-1.5 + parent: 2 + - uid: 275 + components: + - type: Transform + pos: 34.5,-1.5 + parent: 2 + - uid: 277 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 29.5,21.5 + parent: 2 + - uid: 278 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,23.5 + parent: 2 + - uid: 279 + components: + - type: Transform + pos: 26.5,31.5 + parent: 2 + - uid: 280 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,35.5 + parent: 2 + - uid: 281 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,38.5 + parent: 2 + - uid: 282 + components: + - type: Transform + pos: 41.5,35.5 + parent: 2 + - uid: 283 + components: + - type: Transform + pos: 41.5,38.5 + parent: 2 + - uid: 284 + components: + - type: Transform + pos: -35.5,32.5 + parent: 2 + - uid: 285 + components: + - type: Transform + pos: -35.5,35.5 + parent: 2 + - uid: 286 + components: + - type: Transform + pos: -35.5,38.5 + parent: 2 + - uid: 287 + components: + - type: Transform + pos: 13.5,23.5 + parent: 2 + - uid: 289 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,0.5 + parent: 2 + - uid: 15015 + components: + - type: Transform + pos: -12.5,0.5 + parent: 2 + - uid: 17624 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,14.5 + parent: 2 + - uid: 19025 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,1.5 + parent: 2 + - uid: 19804 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-12.5 + parent: 2 +- proto: AirlockHeadOfPersonnelGlassLocked + entities: + - uid: 290 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,49.5 + parent: 2 +- proto: AirlockHeadOfPersonnelLocked + entities: + - uid: 291 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,51.5 + parent: 2 +- proto: AirlockHeadOfSecurityGlassLocked + entities: + - uid: 292 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,37.5 + parent: 2 +- proto: AirlockHeadOfSecurityLocked + entities: + - uid: 293 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,42.5 + parent: 2 +- proto: AirlockHydroGlassLocked + entities: + - uid: 294 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,16.5 + parent: 2 +- proto: AirlockHydroponicsLocked + entities: + - uid: 295 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 39.5,18.5 + parent: 2 +- proto: AirlockJanitorLocked + entities: + - uid: 297 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.5,14.5 + parent: 2 + - uid: 16319 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,10.5 + parent: 2 +- proto: AirlockJusticeLocked + entities: + - uid: 476 + components: + - type: Transform + pos: -2.5,12.5 + parent: 2 + - uid: 477 + components: + - type: Transform + pos: -7.5,15.5 + parent: 2 + - uid: 478 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,17.5 + parent: 2 +- proto: AirlockKitchenGlassLocked + entities: + - uid: 298 + components: + - type: Transform + pos: 27.5,14.5 + parent: 2 +- proto: AirlockKitchenLocked + entities: + - uid: 299 + components: + - type: Transform + pos: 23.5,15.5 + parent: 2 +- proto: AirlockMailGlassLocked + entities: + - uid: 300 + components: + - type: Transform + pos: -29.5,-1.5 + parent: 2 +- proto: AirlockMailLocked + entities: + - uid: 301 + components: + - type: Transform + pos: -22.5,-4.5 + parent: 2 + - uid: 302 + components: + - type: Transform + pos: -27.5,-7.5 + parent: 2 +- proto: AirlockMaintAtmoLocked + entities: + - uid: 303 + components: + - type: Transform + pos: 13.5,-39.5 + parent: 2 + - uid: 304 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,-38.5 + parent: 2 +- proto: AirlockMaintBarLocked + entities: + - uid: 305 + components: + - type: Transform + pos: 14.5,17.5 + parent: 2 +- proto: AirlockMaintCargoLocked + entities: + - uid: 306 + components: + - type: Transform + pos: -24.5,11.5 + parent: 2 + - uid: 307 + components: + - type: Transform + pos: -40.5,13.5 + parent: 2 +- proto: AirlockMaintChemLocked + entities: + - uid: 308 + components: + - type: Transform + pos: 27.5,-15.5 + parent: 2 + - uid: 309 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,-33.5 + parent: 2 +- proto: AirlockMaintCommandLocked + entities: + - uid: 310 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,23.5 + parent: 2 +- proto: AirlockMaintDetectiveLocked + entities: + - uid: 311 + components: + - type: Transform + pos: -20.5,17.5 + parent: 2 +- proto: AirlockMaintEngiLocked + entities: + - uid: 312 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,18.5 + parent: 2 + - uid: 313 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,-46.5 + parent: 2 +- proto: AirlockMaintGlass + entities: + - uid: 268 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,7.5 + parent: 2 +- proto: AirlockMaintHydroLocked + entities: + - uid: 314 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,20.5 + parent: 2 +- proto: AirlockMaintKitchenLocked + entities: + - uid: 315 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,24.5 + parent: 2 +- proto: AirlockMaintLocked + entities: + - uid: 316 + components: + - type: Transform + pos: -6.5,-8.5 + parent: 2 + - uid: 317 + components: + - type: Transform + pos: 8.5,-8.5 + parent: 2 + - uid: 318 + components: + - type: Transform + pos: 10.5,-6.5 + parent: 2 + - uid: 319 + components: + - type: Transform + pos: 10.5,8.5 + parent: 2 + - uid: 320 + components: + - type: Transform + pos: -15.5,3.5 + parent: 2 + - uid: 321 + components: + - type: Transform + pos: -18.5,6.5 + parent: 2 + - uid: 322 + components: + - type: Transform + pos: -15.5,-1.5 + parent: 2 + - uid: 323 + components: + - type: Transform + pos: -11.5,-7.5 + parent: 2 + - uid: 324 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-17.5 + parent: 2 + - uid: 325 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,3.5 + parent: 2 + - uid: 326 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 16.5,-1.5 + parent: 2 + - uid: 327 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,5.5 + parent: 2 + - uid: 328 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 13.5,10.5 + parent: 2 + - uid: 329 + components: + - type: Transform + pos: 16.5,-5.5 + parent: 2 + - uid: 330 + components: + - type: Transform + pos: 17.5,-3.5 + parent: 2 + - uid: 331 + components: + - type: Transform + pos: 11.5,-7.5 + parent: 2 + - uid: 332 + components: + - type: Transform + pos: 10.5,-10.5 + parent: 2 + - uid: 333 + components: + - type: Transform + pos: 5.5,-14.5 + parent: 2 + - uid: 334 + components: + - type: Transform + pos: 3.5,-16.5 + parent: 2 + - uid: 335 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-14.5 + parent: 2 + - uid: 336 + components: + - type: Transform + pos: -8.5,-9.5 + parent: 2 + - uid: 337 + components: + - type: Transform + pos: -7.5,-11.5 + parent: 2 + - uid: 338 + components: + - type: Transform + pos: -11.5,-11.5 + parent: 2 + - uid: 339 + components: + - type: Transform + pos: -14.5,-9.5 + parent: 2 + - uid: 340 + components: + - type: Transform + pos: -7.5,-16.5 + parent: 2 + - uid: 341 + components: + - type: Transform + pos: -9.5,-17.5 + parent: 2 + - uid: 342 + components: + - type: Transform + pos: -11.5,-16.5 + parent: 2 + - uid: 343 + components: + - type: Transform + pos: -21.5,-13.5 + parent: 2 + - uid: 344 + components: + - type: Transform + pos: -23.5,-10.5 + parent: 2 + - uid: 345 + components: + - type: Transform + pos: -20.5,-1.5 + parent: 2 + - uid: 346 + components: + - type: Transform + pos: -31.5,-8.5 + parent: 2 + - uid: 347 + components: + - type: Transform + pos: -20.5,3.5 + parent: 2 + - uid: 348 + components: + - type: Transform + pos: -20.5,13.5 + parent: 2 + - uid: 349 + components: + - type: Transform + pos: -35.5,-22.5 + parent: 2 + - uid: 351 + components: + - type: Transform + pos: -20.5,-40.5 + parent: 2 + - uid: 352 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,-50.5 + parent: 2 + - uid: 353 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,-51.5 + parent: 2 + - uid: 354 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,-53.5 + parent: 2 + - uid: 355 + components: + - type: Transform + pos: -28.5,-56.5 + parent: 2 + - uid: 356 + components: + - type: Transform + pos: -33.5,-59.5 + parent: 2 + - uid: 357 + components: + - type: Transform + pos: -29.5,-58.5 + parent: 2 + - uid: 358 + components: + - type: Transform + pos: -25.5,-59.5 + parent: 2 + - uid: 359 + components: + - type: Transform + pos: -27.5,-61.5 + parent: 2 + - uid: 360 + components: + - type: Transform + pos: -33.5,-63.5 + parent: 2 + - uid: 361 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,-61.5 + parent: 2 + - uid: 362 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-52.5 + parent: 2 + - uid: 363 + components: + - type: Transform + pos: -4.5,-51.5 + parent: 2 + - uid: 364 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,-47.5 + parent: 2 + - uid: 365 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-42.5 + parent: 2 + - uid: 366 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 23.5,-1.5 + parent: 2 + - uid: 367 + components: + - type: Transform + pos: 22.5,-7.5 + parent: 2 + - uid: 368 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,-8.5 + parent: 2 + - uid: 369 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 23.5,-13.5 + parent: 2 + - uid: 370 + components: + - type: Transform + pos: 31.5,-7.5 + parent: 2 + - uid: 371 + components: + - type: Transform + pos: 27.5,-11.5 + parent: 2 + - uid: 372 + components: + - type: Transform + pos: 31.5,-11.5 + parent: 2 + - uid: 373 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 43.5,25.5 + parent: 2 + - uid: 374 + components: + - type: Transform + pos: 3.5,21.5 + parent: 2 + - uid: 375 + components: + - type: Transform + pos: 15.5,26.5 + parent: 2 + - uid: 376 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,26.5 + parent: 2 + - uid: 377 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,16.5 + parent: 2 + - uid: 378 + components: + - type: Transform + pos: -30.5,20.5 + parent: 2 + - uid: 379 + components: + - type: Transform + pos: -4.5,41.5 + parent: 2 + - uid: 380 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,42.5 + parent: 2 + - uid: 381 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,45.5 + parent: 2 + - uid: 382 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-35.5 + parent: 2 + - type: Door + secondsUntilStateChange: -53943.504 + state: Opening + - uid: 383 + components: + - type: Transform + pos: 3.5,-35.5 + parent: 2 + - uid: 384 + components: + - type: Transform + pos: 9.5,-35.5 + parent: 2 + - uid: 385 + components: + - type: Transform + pos: 17.5,-34.5 + parent: 2 + - uid: 386 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,-37.5 + parent: 2 + - uid: 387 + components: + - type: Transform + pos: 37.5,-38.5 + parent: 2 + - uid: 388 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,-53.5 + parent: 2 + - uid: 389 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,-14.5 + parent: 2 + - uid: 390 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,-18.5 + parent: 2 + - uid: 391 + components: + - type: Transform + pos: -16.5,-12.5 + parent: 2 +- proto: AirlockMaintMedLocked + entities: + - uid: 392 + components: + - type: Transform + pos: 21.5,-15.5 + parent: 2 + - uid: 393 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,-31.5 + parent: 2 + - uid: 394 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-26.5 + parent: 2 + - uid: 395 + components: + - type: Transform + pos: 27.5,-33.5 + parent: 2 +- proto: AirlockMaintRnDLocked + entities: + - uid: 396 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,-34.5 + parent: 2 + - uid: 397 + components: + - type: Transform + pos: -36.5,-32.5 + parent: 2 + - uid: 398 + components: + - type: Transform + pos: -31.5,-43.5 + parent: 2 + - uid: 399 + components: + - type: Transform + pos: -21.5,-34.5 + parent: 2 + - uid: 400 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,-50.5 + parent: 2 + - uid: 401 + components: + - type: Transform + pos: -40.5,-30.5 + parent: 2 +- proto: AirlockMaintRnDMedLocked + entities: + - uid: 402 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 22.5,-33.5 + parent: 2 +- proto: AirlockMaintSalvageLocked + entities: + - uid: 403 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,-21.5 + parent: 2 +- proto: AirlockMaintSecLocked + entities: + - uid: 404 + components: + - type: Transform + pos: 26.5,-3.5 + parent: 2 + - uid: 405 + components: + - type: Transform + pos: -16.5,17.5 + parent: 2 +- proto: AirlockMantisGlassLocked + entities: + - uid: 406 + components: + - type: Transform + pos: -10.5,-25.5 + parent: 2 +- proto: AirlockMedicalGlassLocked + entities: + - uid: 407 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,-13.5 + parent: 2 + - uid: 408 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 18.5,-21.5 + parent: 2 + - uid: 409 + components: + - type: Transform + pos: 39.5,-16.5 + parent: 2 + - uid: 410 + components: + - type: Transform + pos: 29.5,-30.5 + parent: 2 + - uid: 411 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.5,-18.5 + parent: 2 + - uid: 412 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,-23.5 + parent: 2 + - uid: 413 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,-24.5 + parent: 2 + - uid: 22685 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.5,-25.5 + parent: 2 +- proto: AirlockMedicalLocked + entities: + - uid: 415 + components: + - type: Transform + pos: 13.5,-7.5 + parent: 2 + - uid: 416 + components: + - type: Transform + pos: 12.5,-10.5 + parent: 2 + - uid: 417 + components: + - type: Transform + pos: 18.5,-7.5 + parent: 2 + - uid: 418 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 13.5,-12.5 + parent: 2 + - uid: 419 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 13.5,-17.5 + parent: 2 + - uid: 420 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,-24.5 + parent: 2 +- proto: AirlockMedicalScienceLocked + entities: + - uid: 421 + components: + - type: Transform + pos: 18.5,-29.5 + parent: 2 +- proto: AirlockQuartermasterLocked + entities: + - uid: 422 + components: + - type: Transform + pos: -31.5,6.5 + parent: 2 + - uid: 423 + components: + - type: Transform + pos: -26.5,7.5 + parent: 2 + - uid: 424 + components: + - type: Transform + pos: -30.5,9.5 + parent: 2 + - uid: 425 + components: + - type: Transform + pos: -22.5,7.5 + parent: 2 +- proto: AirlockResearchDirectorLocked + entities: + - uid: 426 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,-32.5 + parent: 2 + - uid: 427 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,-25.5 + parent: 2 + - uid: 428 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,-21.5 + parent: 2 +- proto: AirlockSalvageLocked + entities: + - uid: 429 + components: + - type: Transform + pos: -38.5,-6.5 + parent: 2 + - uid: 430 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,-8.5 + parent: 2 + - uid: 431 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -37.5,-14.5 + parent: 2 + - uid: 432 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -35.5,-19.5 + parent: 2 +- proto: AirlockScienceGlassLocked + entities: + - uid: 433 + components: + - type: Transform + pos: -22.5,-25.5 + parent: 2 + - uid: 434 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -38.5,-46.5 + parent: 2 + - uid: 435 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -40.5,-46.5 + parent: 2 + - uid: 436 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -40.5,-50.5 + parent: 2 + - uid: 437 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,-29.5 + parent: 2 + - uid: 438 + components: + - type: Transform + pos: -27.5,-22.5 + parent: 2 +- proto: AirlockScienceLocked + entities: + - uid: 439 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,-17.5 + parent: 2 + - uid: 440 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,-17.5 + parent: 2 + - uid: 441 + components: + - type: Transform + pos: -29.5,-25.5 + parent: 2 + - uid: 442 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -29.5,-28.5 + parent: 2 + - uid: 443 + components: + - type: Transform + pos: -33.5,-44.5 + parent: 2 + - uid: 444 + components: + - type: Transform + pos: -35.5,-43.5 + parent: 2 + - uid: 445 + components: + - type: Transform + pos: -35.5,-42.5 + parent: 2 + - uid: 446 + components: + - type: Transform + pos: -31.5,-40.5 + parent: 2 + - uid: 447 + components: + - type: Transform + pos: -21.5,-29.5 + parent: 2 + - uid: 448 + components: + - type: Transform + pos: -4.5,-27.5 + parent: 2 + - uid: 449 + components: + - type: Transform + pos: -1.5,-27.5 + parent: 2 + - uid: 450 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,-48.5 + parent: 2 + - uid: 451 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,-37.5 + parent: 2 + - uid: 452 + components: + - type: Transform + pos: -43.5,-37.5 + parent: 2 + - uid: 453 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -42.5,-37.5 + parent: 2 +- proto: AirlockSecurityGlassLocked + entities: + - uid: 454 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,26.5 + parent: 2 + - uid: 455 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -29.5,-33.5 + parent: 2 + - uid: 456 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,-1.5 + parent: 2 + - uid: 457 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,-13.5 + parent: 2 + - uid: 458 + components: + - type: Transform + pos: -12.5,30.5 + parent: 2 + - uid: 459 + components: + - type: Transform + pos: -9.5,36.5 + parent: 2 + - uid: 460 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,40.5 + parent: 2 + - uid: 461 + components: + - type: Transform + pos: -34.5,24.5 + parent: 2 + - uid: 462 + components: + - type: Transform + pos: -38.5,29.5 + parent: 2 + - uid: 463 + components: + - type: Transform + pos: -36.5,27.5 + parent: 2 + - uid: 464 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,29.5 + parent: 2 + - uid: 465 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,-20.5 + parent: 2 + - uid: 466 + components: + - type: Transform + pos: 5.5,-50.5 + parent: 2 + - uid: 467 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -19.5,30.5 + parent: 2 +- proto: AirlockSecurityLawyerGlassLocked + entities: + - uid: 468 + components: + - type: Transform + pos: -14.5,21.5 + parent: 2 + - uid: 469 + components: + - type: Transform + pos: -16.5,21.5 + parent: 2 + - uid: 470 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,24.5 + parent: 2 + - uid: 471 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,24.5 + parent: 2 + - uid: 472 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,32.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18259 + - uid: 473 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,32.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18259 + - uid: 474 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,35.5 + parent: 2 + - uid: 475 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,35.5 + parent: 2 +- proto: AirlockSecurityLocked + entities: + - uid: 479 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,26.5 + parent: 2 +- proto: AirlockServiceLocked + entities: + - uid: 480 + components: + - type: Transform + pos: 17.5,24.5 + parent: 2 +- proto: AirlockTheatreLocked + entities: + - uid: 481 + components: + - type: Transform + pos: 41.5,11.5 + parent: 2 +- proto: AirlockVirologyGlassLocked + entities: + - uid: 482 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 40.5,-26.5 + parent: 2 + - uid: 483 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,-31.5 + parent: 2 +- proto: AirSensor + entities: + - uid: 484 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,49.5 + parent: 2 + - uid: 485 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,-44.5 + parent: 2 + - uid: 486 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,-41.5 + parent: 2 + - uid: 487 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,-45.5 + parent: 2 + - uid: 488 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-56.5 + parent: 2 + - uid: 489 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-55.5 + parent: 2 + - uid: 490 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,-56.5 + parent: 2 + - uid: 491 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,-63.5 + parent: 2 + - uid: 492 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,-62.5 + parent: 2 + - uid: 493 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,-53.5 + parent: 2 + - uid: 494 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,-44.5 + parent: 2 + - uid: 495 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,-29.5 + parent: 2 + - uid: 496 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,-22.5 + parent: 2 + - uid: 497 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,-32.5 + parent: 2 + - uid: 498 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,-41.5 + parent: 2 + - uid: 499 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-27.5 + parent: 2 + - uid: 500 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,-27.5 + parent: 2 + - uid: 501 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,-23.5 + parent: 2 + - uid: 502 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,-20.5 + parent: 2 + - uid: 503 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,-22.5 + parent: 2 + - uid: 504 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,-17.5 + parent: 2 + - uid: 505 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,-33.5 + parent: 2 + - uid: 506 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,-40.5 + parent: 2 + - uid: 507 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,-38.5 + parent: 2 + - uid: 508 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -42.5,-41.5 + parent: 2 + - uid: 509 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -43.5,-34.5 + parent: 2 + - uid: 510 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,-49.5 + parent: 2 + - uid: 511 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,-22.5 + parent: 2 + - uid: 512 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -37.5,-18.5 + parent: 2 + - uid: 513 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -29.5,-13.5 + parent: 2 + - uid: 514 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,-7.5 + parent: 2 + - uid: 515 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -39.5,-10.5 + parent: 2 + - uid: 516 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -38.5,-0.5 + parent: 2 + - uid: 517 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -38.5,9.5 + parent: 2 + - uid: 518 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,7.5 + parent: 2 + - uid: 519 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,4.5 + parent: 2 + - uid: 520 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,15.5 + parent: 2 + - uid: 521 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,7.5 + parent: 2 + - uid: 522 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,-5.5 + parent: 2 + - uid: 523 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,1.5 + parent: 2 + - uid: 524 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,0.5 + parent: 2 + - uid: 525 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,-24.5 + parent: 2 + - uid: 526 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,-30.5 + parent: 2 + - uid: 527 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 13.5,-24.5 + parent: 2 + - uid: 528 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 18.5,-31.5 + parent: 2 + - uid: 529 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,-16.5 + parent: 2 + - uid: 530 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,-8.5 + parent: 2 + - uid: 531 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,-29.5 + parent: 2 + - uid: 532 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,-30.5 + parent: 2 + - uid: 533 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,-24.5 + parent: 2 + - uid: 534 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,-18.5 + parent: 2 + - uid: 535 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,-18.5 + parent: 2 + - uid: 536 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 41.5,-16.5 + parent: 2 + - uid: 537 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 45.5,-22.5 + parent: 2 + - uid: 538 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 40.5,-29.5 + parent: 2 + - uid: 539 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 46.5,-31.5 + parent: 2 + - uid: 540 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 44.5,-18.5 + parent: 2 + - uid: 541 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 33.5,-5.5 + parent: 2 + - uid: 542 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,-3.5 + parent: 2 + - uid: 543 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,1.5 + parent: 2 + - uid: 544 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.5,7.5 + parent: 2 + - uid: 545 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 40.5,6.5 + parent: 2 + - uid: 546 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 41.5,14.5 + parent: 2 + - uid: 547 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 20.5,18.5 + parent: 2 + - uid: 548 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,22.5 + parent: 2 + - uid: 549 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 29.5,16.5 + parent: 2 + - uid: 550 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 36.5,16.5 + parent: 2 + - uid: 551 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,18.5 + parent: 2 + - uid: 552 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 37.5,23.5 + parent: 2 + - uid: 553 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,28.5 + parent: 2 + - uid: 554 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,40.5 + parent: 2 + - uid: 555 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 36.5,37.5 + parent: 2 + - uid: 556 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 20.5,31.5 + parent: 2 + - uid: 557 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,38.5 + parent: 2 + - uid: 558 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,35.5 + parent: 2 + - uid: 559 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 13.5,43.5 + parent: 2 + - uid: 560 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 20.5,45.5 + parent: 2 + - uid: 561 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 16.5,22.5 + parent: 2 + - uid: 562 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,12.5 + parent: 2 + - uid: 563 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,15.5 + parent: 2 + - uid: 564 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,24.5 + parent: 2 + - uid: 565 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,31.5 + parent: 2 + - uid: 566 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,34.5 + parent: 2 + - uid: 567 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,40.5 + parent: 2 + - uid: 568 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,54.5 + parent: 2 + - uid: 569 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,59.5 + parent: 2 + - uid: 570 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,55.5 + parent: 2 + - uid: 571 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,49.5 + parent: 2 + - uid: 572 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,70.5 + parent: 2 + - uid: 573 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,70.5 + parent: 2 + - uid: 574 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,70.5 + parent: 2 + - uid: 575 + components: + - type: Transform + pos: 7.5,77.5 + parent: 2 + - uid: 576 + components: + - type: Transform + pos: 6.5,83.5 + parent: 2 + - uid: 577 + components: + - type: Transform + pos: 1.5,83.5 + parent: 2 + - uid: 578 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,83.5 + parent: 2 + - uid: 579 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,76.5 + parent: 2 + - uid: 580 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,38.5 + parent: 2 + - uid: 581 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,28.5 + parent: 2 + - uid: 582 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,33.5 + parent: 2 + - uid: 583 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,39.5 + parent: 2 + - uid: 584 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,34.5 + parent: 2 + - uid: 585 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.5,35.5 + parent: 2 + - uid: 586 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,29.5 + parent: 2 + - uid: 587 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -28.5,34.5 + parent: 2 + - uid: 588 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,38.5 + parent: 2 + - uid: 589 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,44.5 + parent: 2 + - uid: 590 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.5,24.5 + parent: 2 + - uid: 591 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,24.5 + parent: 2 + - uid: 592 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,19.5 + parent: 2 + - uid: 593 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.5,21.5 + parent: 2 + - uid: 594 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -39.5,34.5 + parent: 2 + - uid: 595 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,29.5 + parent: 2 + - uid: 596 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,21.5 + parent: 2 + - uid: 597 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -40.5,24.5 + parent: 2 + - uid: 598 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -40.5,20.5 + parent: 2 + - uid: 599 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,15.5 + parent: 2 + - uid: 600 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,13.5 + parent: 2 + - uid: 601 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,11.5 + parent: 2 + - uid: 602 + components: + - type: Transform + pos: 0.5,46.5 + parent: 2 + - uid: 603 + components: + - type: Transform + pos: 1.5,29.5 + parent: 2 + - uid: 604 + components: + - type: Transform + pos: -10.5,-23.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 37 +- proto: AltarSpawner + entities: + - uid: 605 + components: + - type: Transform + pos: 19.5,31.5 + parent: 2 +- proto: AmeController + entities: + - uid: 23870 + components: + - type: Transform + pos: -3.5,-59.5 + parent: 2 +- proto: AmeJar + entities: + - uid: 607 + components: + - type: Transform + pos: -6.5,-60.5 + parent: 2 + - uid: 608 + components: + - type: Transform + pos: -6.3261127,-60.425095 + parent: 2 + - uid: 609 + components: + - type: Transform + pos: -6.5988398,-60.404114 + parent: 2 +- proto: AmeShielding + entities: + - uid: 606 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,-57.5 + parent: 2 + - uid: 610 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,-56.5 + parent: 2 + - uid: 23096 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,-58.5 + parent: 2 + - uid: 23097 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,-56.5 + parent: 2 + - uid: 23098 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,-57.5 + parent: 2 + - uid: 23099 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,-58.5 + parent: 2 + - uid: 23100 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,-56.5 + parent: 2 + - uid: 23101 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,-57.5 + parent: 2 + - uid: 23102 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,-58.5 + parent: 2 + - uid: 23103 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,-56.5 + parent: 2 + - uid: 23104 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,-57.5 + parent: 2 + - uid: 23105 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,-58.5 + parent: 2 + - uid: 23106 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-56.5 + parent: 2 + - uid: 23862 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-58.5 + parent: 2 + - uid: 23869 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-57.5 + parent: 2 +- proto: AnalysisComputerCircuitboard + entities: + - uid: 617 + components: + - type: Transform + pos: -4.5775924,-35.57102 + parent: 2 +- proto: AnomalyLocatorEmpty + entities: + - uid: 618 + components: + - type: Transform + pos: -47.466526,-31.3424 + parent: 2 +- proto: AnomalyVesselCircuitboard + entities: + - uid: 619 + components: + - type: Transform + pos: -4.40976,-35.375214 + parent: 2 +- proto: APCBasic + entities: + - uid: 620 + components: + - type: Transform + pos: 6.5,11.5 + parent: 2 + - uid: 621 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 44.5,5.5 + parent: 2 + - uid: 622 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,-1.5 + parent: 2 + - uid: 623 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,-60.5 + parent: 2 + - uid: 624 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,41.5 + parent: 2 + - uid: 625 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,-52.5 + parent: 2 + - uid: 626 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,-46.5 + parent: 2 + - uid: 627 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-72.5 + parent: 2 + - uid: 628 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,-60.5 + parent: 2 + - uid: 629 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,-21.5 + parent: 2 + - uid: 630 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,-33.5 + parent: 2 + - uid: 631 + components: + - type: Transform + pos: 9.5,-17.5 + parent: 2 + - uid: 632 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-30.5 + parent: 2 + - uid: 633 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,-35.5 + parent: 2 + - uid: 634 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 16.5,-17.5 + parent: 2 + - uid: 635 + components: + - type: Transform + pos: -15.5,-18.5 + parent: 2 + - uid: 636 + components: + - type: Transform + pos: -25.5,8.5 + parent: 2 + - uid: 637 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,10.5 + parent: 2 + - uid: 638 + components: + - type: Transform + pos: -42.5,-6.5 + parent: 2 + - uid: 639 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,-18.5 + parent: 2 + - uid: 640 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,-36.5 + parent: 2 + - uid: 641 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -40.5,-37.5 + parent: 2 + - uid: 642 + components: + - type: Transform + pos: -39.5,-24.5 + parent: 2 + - uid: 643 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -40.5,-49.5 + parent: 2 + - uid: 644 + components: + - type: Transform + pos: -22.5,-42.5 + parent: 2 + - uid: 645 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,-5.5 + parent: 2 + - uid: 646 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-50.5 + parent: 2 + - uid: 647 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-29.5 + parent: 2 + - uid: 648 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 17.5,5.5 + parent: 2 + - uid: 649 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,23.5 + parent: 2 + - uid: 650 + components: + - type: Transform + pos: -9.5,-34.5 + parent: 2 + - uid: 651 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,10.5 + parent: 2 + - uid: 652 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,-10.5 + parent: 2 + - uid: 653 + components: + - type: Transform + pos: -4.5,-38.5 + parent: 2 + - uid: 654 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,-62.5 + parent: 2 + - uid: 655 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,44.5 + parent: 2 + - uid: 656 + components: + - type: Transform + pos: 9.5,57.5 + parent: 2 + - uid: 657 + components: + - type: Transform + pos: 9.5,51.5 + parent: 2 + - uid: 658 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,51.5 + parent: 2 + - uid: 659 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,34.5 + parent: 2 + - uid: 660 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,29.5 + parent: 2 + - uid: 661 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,43.5 + parent: 2 + - uid: 662 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,15.5 + parent: 2 + - uid: 663 + components: + - type: Transform + pos: -43.5,18.5 + parent: 2 + - uid: 664 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,73.5 + parent: 2 + - uid: 665 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,18.5 + parent: 2 + - uid: 666 + components: + - type: Transform + pos: -25.5,31.5 + parent: 2 + - uid: 667 + components: + - type: Transform + pos: -20.5,23.5 + parent: 2 + - uid: 668 + components: + - type: Transform + pos: -19.5,37.5 + parent: 2 + - uid: 669 + components: + - type: Transform + pos: -30.5,40.5 + parent: 2 + - uid: 670 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,41.5 + parent: 2 + - uid: 671 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,18.5 + parent: 2 + - uid: 672 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,26.5 + parent: 2 + - uid: 673 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 18.5,37.5 + parent: 2 + - uid: 674 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 12.5,16.5 + parent: 2 + - uid: 675 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,-5.5 + parent: 2 + - uid: 676 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,5.5 + parent: 2 + - uid: 677 + components: + - type: Transform + pos: -31.5,-19.5 + parent: 2 + - uid: 678 + components: + - type: Transform + pos: -18.5,3.5 + parent: 2 + - uid: 679 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,-11.5 + parent: 2 + - uid: 680 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,-27.5 + parent: 2 +- proto: APCConstructed + entities: + - uid: 681 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 36.5,12.5 + parent: 2 +- proto: APCHighCapacity + entities: + - uid: 682 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -40.5,5.5 + parent: 2 + - uid: 683 + components: + - type: Transform + pos: 16.5,-21.5 + parent: 2 +- proto: AppraisalTool + entities: + - uid: 684 + components: + - type: Transform + pos: -30.721203,-6.017397 + parent: 2 + - uid: 685 + components: + - type: Transform + pos: -30.469452,-5.975439 + parent: 2 + - uid: 686 + components: + - type: Transform + pos: -39.443012,8.461224 + parent: 2 +- proto: Ash + entities: + - uid: 687 + components: + - type: Transform + pos: -14.458229,4.527739 + parent: 2 + - uid: 688 + components: + - type: Transform + pos: -15.442975,-4.3446994 + parent: 2 + - uid: 689 + components: + - type: Transform + pos: 23.497353,-9.44327 + parent: 2 +- proto: AtmosDeviceFanTiny + entities: + - uid: 263 + components: + - type: Transform + pos: -47.5,-26.5 + parent: 2 + - uid: 690 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -45.5,-1.5 + parent: 2 + - uid: 691 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -45.5,0.5 + parent: 2 + - uid: 693 + components: + - type: Transform + pos: 43.5,48.5 + parent: 2 + - uid: 694 + components: + - type: Transform + pos: 46.5,32.5 + parent: 2 + - uid: 695 + components: + - type: Transform + pos: 46.5,39.5 + parent: 2 + - uid: 696 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 46.5,-12.5 + parent: 2 + - uid: 697 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 46.5,-6.5 + parent: 2 + - uid: 698 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 46.5,-4.5 + parent: 2 + - uid: 699 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 46.5,-14.5 + parent: 2 + - uid: 700 + components: + - type: Transform + pos: -11.5,43.5 + parent: 2 + - uid: 701 + components: + - type: Transform + pos: -43.5,22.5 + parent: 2 + - uid: 702 + components: + - type: Transform + pos: -43.5,26.5 + parent: 2 + - uid: 703 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,77.5 + parent: 2 + - uid: 704 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,77.5 + parent: 2 + - uid: 705 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,78.5 + parent: 2 + - uid: 706 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,77.5 + parent: 2 + - uid: 707 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,76.5 + parent: 2 + - uid: 708 + components: + - type: Transform + pos: 40.5,-43.5 + parent: 2 + - uid: 709 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,-61.5 + parent: 2 + - uid: 710 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,81.5 + parent: 2 + - uid: 711 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -30.5,24.5 + parent: 2 + - uid: 712 + components: + - type: Transform + pos: -39.5,-18.5 + parent: 2 + - uid: 23939 + components: + - type: Transform + pos: -51.5,-20.5 + parent: 2 + - uid: 23941 + components: + - type: Transform + pos: -51.5,-18.5 + parent: 2 + - uid: 23942 + components: + - type: Transform + pos: -51.5,-19.5 + parent: 2 +- proto: AtmosFixBlockerMarker + entities: + - uid: 713 + components: + - type: Transform + pos: 36.5,-53.5 + parent: 2 + - uid: 714 + components: + - type: Transform + pos: 36.5,-54.5 + parent: 2 + - uid: 715 + components: + - type: Transform + pos: 36.5,-55.5 + parent: 2 + - uid: 716 + components: + - type: Transform + pos: 37.5,-53.5 + parent: 2 + - uid: 717 + components: + - type: Transform + pos: 37.5,-54.5 + parent: 2 + - uid: 718 + components: + - type: Transform + pos: 37.5,-55.5 + parent: 2 + - uid: 719 + components: + - type: Transform + pos: 38.5,-53.5 + parent: 2 + - uid: 720 + components: + - type: Transform + pos: 38.5,-54.5 + parent: 2 + - uid: 721 + components: + - type: Transform + pos: 38.5,-55.5 + parent: 2 + - uid: 722 + components: + - type: Transform + pos: 41.5,-43.5 + parent: 2 + - uid: 723 + components: + - type: Transform + pos: 42.5,-43.5 + parent: 2 + - uid: 724 + components: + - type: Transform + pos: 43.5,-43.5 + parent: 2 + - uid: 725 + components: + - type: Transform + pos: 44.5,-43.5 + parent: 2 + - uid: 726 + components: + - type: Transform + pos: 45.5,-43.5 + parent: 2 + - uid: 727 + components: + - type: Transform + pos: 42.5,-42.5 + parent: 2 + - uid: 728 + components: + - type: Transform + pos: 42.5,-44.5 + parent: 2 + - uid: 729 + components: + - type: Transform + pos: 42.5,-45.5 + parent: 2 + - uid: 730 + components: + - type: Transform + pos: 36.5,-61.5 + parent: 2 + - uid: 731 + components: + - type: Transform + pos: 36.5,-62.5 + parent: 2 + - uid: 732 + components: + - type: Transform + pos: 36.5,-63.5 + parent: 2 + - uid: 733 + components: + - type: Transform + pos: 37.5,-61.5 + parent: 2 + - uid: 734 + components: + - type: Transform + pos: 37.5,-62.5 + parent: 2 + - uid: 735 + components: + - type: Transform + pos: 37.5,-63.5 + parent: 2 + - uid: 736 + components: + - type: Transform + pos: 38.5,-61.5 + parent: 2 + - uid: 737 + components: + - type: Transform + pos: 38.5,-62.5 + parent: 2 + - uid: 738 + components: + - type: Transform + pos: 38.5,-63.5 + parent: 2 + - uid: 739 + components: + - type: Transform + pos: 26.5,-68.5 + parent: 2 + - uid: 740 + components: + - type: Transform + pos: 26.5,-69.5 + parent: 2 + - uid: 741 + components: + - type: Transform + pos: 26.5,-70.5 + parent: 2 + - uid: 742 + components: + - type: Transform + pos: 27.5,-68.5 + parent: 2 + - uid: 743 + components: + - type: Transform + pos: 27.5,-69.5 + parent: 2 + - uid: 744 + components: + - type: Transform + pos: 27.5,-70.5 + parent: 2 + - uid: 745 + components: + - type: Transform + pos: 28.5,-68.5 + parent: 2 + - uid: 746 + components: + - type: Transform + pos: 28.5,-69.5 + parent: 2 + - uid: 747 + components: + - type: Transform + pos: 28.5,-70.5 + parent: 2 + - uid: 748 + components: + - type: Transform + pos: 27.5,-71.5 + parent: 2 + - uid: 749 + components: + - type: Transform + pos: 18.5,-55.5 + parent: 2 + - uid: 750 + components: + - type: Transform + pos: 18.5,-54.5 + parent: 2 + - uid: 751 + components: + - type: Transform + pos: 18.5,-53.5 + parent: 2 + - uid: 752 + components: + - type: Transform + pos: 17.5,-55.5 + parent: 2 + - uid: 753 + components: + - type: Transform + pos: 17.5,-54.5 + parent: 2 + - uid: 754 + components: + - type: Transform + pos: 17.5,-53.5 + parent: 2 + - uid: 755 + components: + - type: Transform + pos: 16.5,-55.5 + parent: 2 + - uid: 756 + components: + - type: Transform + pos: 16.5,-54.5 + parent: 2 + - uid: 757 + components: + - type: Transform + pos: 16.5,-53.5 + parent: 2 +- proto: AtmosFixFreezerMarker + entities: + - uid: 758 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,23.5 + parent: 2 + - uid: 759 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,22.5 + parent: 2 + - uid: 760 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,21.5 + parent: 2 + - uid: 761 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,23.5 + parent: 2 + - uid: 762 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,22.5 + parent: 2 + - uid: 763 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,21.5 + parent: 2 + - uid: 764 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,23.5 + parent: 2 + - uid: 765 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,22.5 + parent: 2 + - uid: 766 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,21.5 + parent: 2 + - uid: 767 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,23.5 + parent: 2 + - uid: 768 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,22.5 + parent: 2 + - uid: 769 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,21.5 + parent: 2 + - uid: 770 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.5,23.5 + parent: 2 + - uid: 771 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.5,22.5 + parent: 2 + - uid: 772 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.5,21.5 + parent: 2 + - uid: 773 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 26.5,23.5 + parent: 2 + - uid: 774 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 26.5,22.5 + parent: 2 + - uid: 775 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 26.5,21.5 + parent: 2 +- proto: AtmosFixNitrogenMarker + entities: + - uid: 776 + components: + - type: Transform + pos: 18.5,-63.5 + parent: 2 + - uid: 777 + components: + - type: Transform + pos: 18.5,-62.5 + parent: 2 + - uid: 778 + components: + - type: Transform + pos: 18.5,-61.5 + parent: 2 + - uid: 779 + components: + - type: Transform + pos: 17.5,-63.5 + parent: 2 + - uid: 780 + components: + - type: Transform + pos: 17.5,-62.5 + parent: 2 + - uid: 781 + components: + - type: Transform + pos: 17.5,-61.5 + parent: 2 + - uid: 782 + components: + - type: Transform + pos: 16.5,-63.5 + parent: 2 + - uid: 783 + components: + - type: Transform + pos: 16.5,-62.5 + parent: 2 + - uid: 784 + components: + - type: Transform + pos: 16.5,-61.5 + parent: 2 +- proto: AtmosFixOxygenMarker + entities: + - uid: 785 + components: + - type: Transform + pos: 18.5,-59.5 + parent: 2 + - uid: 786 + components: + - type: Transform + pos: 18.5,-58.5 + parent: 2 + - uid: 787 + components: + - type: Transform + pos: 18.5,-57.5 + parent: 2 + - uid: 788 + components: + - type: Transform + pos: 17.5,-59.5 + parent: 2 + - uid: 789 + components: + - type: Transform + pos: 17.5,-58.5 + parent: 2 + - uid: 790 + components: + - type: Transform + pos: 17.5,-57.5 + parent: 2 + - uid: 791 + components: + - type: Transform + pos: 16.5,-59.5 + parent: 2 + - uid: 792 + components: + - type: Transform + pos: 16.5,-58.5 + parent: 2 + - uid: 793 + components: + - type: Transform + pos: 16.5,-57.5 + parent: 2 +- proto: AtmosFixPlasmaMarker + entities: + - uid: 794 + components: + - type: Transform + pos: 36.5,-57.5 + parent: 2 + - uid: 795 + components: + - type: Transform + pos: 36.5,-58.5 + parent: 2 + - uid: 796 + components: + - type: Transform + pos: 36.5,-59.5 + parent: 2 + - uid: 797 + components: + - type: Transform + pos: 37.5,-57.5 + parent: 2 + - uid: 798 + components: + - type: Transform + pos: 37.5,-58.5 + parent: 2 + - uid: 799 + components: + - type: Transform + pos: 37.5,-59.5 + parent: 2 + - uid: 800 + components: + - type: Transform + pos: 38.5,-57.5 + parent: 2 + - uid: 801 + components: + - type: Transform + pos: 38.5,-58.5 + parent: 2 + - uid: 802 + components: + - type: Transform + pos: 38.5,-59.5 + parent: 2 +- proto: Autolathe + entities: + - uid: 803 + components: + - type: Transform + pos: -36.5,10.5 + parent: 2 + - uid: 804 + components: + - type: Transform + pos: -32.5,-25.5 + parent: 2 + - uid: 805 + components: + - type: Transform + pos: -33.5,-29.5 + parent: 2 + - uid: 806 + components: + - type: Transform + pos: 0.5,-47.5 + parent: 2 +- proto: BalloonNT + entities: + - uid: 22318 + components: + - type: Transform + parent: 22310 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: BannerMedical + entities: + - uid: 807 + components: + - type: Transform + pos: 8.5,-12.5 + parent: 2 + - uid: 808 + components: + - type: Transform + pos: 14.5,-38.5 + parent: 2 +- proto: Barricade + entities: + - uid: 809 + components: + - type: Transform + pos: -18.5,-10.5 + parent: 2 + - uid: 810 + components: + - type: Transform + pos: -20.5,-10.5 + parent: 2 +- proto: BarricadeBlock + entities: + - uid: 812 + components: + - type: Transform + pos: -15.5,3.5 + parent: 2 + - uid: 813 + components: + - type: Transform + pos: -15.5,-1.5 + parent: 2 + - uid: 814 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-14.5 + parent: 2 + - uid: 815 + components: + - type: Transform + pos: -9.5,-17.5 + parent: 2 + - uid: 816 + components: + - type: Transform + pos: -19.5,-10.5 + parent: 2 + - uid: 817 + components: + - type: Transform + pos: -23.5,-65.5 + parent: 2 + - uid: 822 + components: + - type: Transform + pos: 37.5,-38.5 + parent: 2 + - uid: 823 + components: + - type: Transform + pos: 5.5,-33.5 + parent: 2 + - uid: 824 + components: + - type: Transform + pos: 5.5,-14.5 + parent: 2 +- proto: BarricadeDirectional + entities: + - uid: 827 + components: + - type: Transform + pos: 34.5,-34.5 + parent: 2 +- proto: BarSign + entities: + - uid: 828 + components: + - type: Transform + pos: 18.5,15.5 + parent: 2 +- proto: BarSignMaidCafe + entities: + - uid: 829 + components: + - type: Transform + pos: -30.5,-56.5 + parent: 2 +- proto: BaseComputer + entities: + - uid: 23911 + components: + - type: Transform + pos: -11.5,-55.5 + parent: 2 +- proto: BaseGasCondenser + entities: + - uid: 830 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,-32.5 + parent: 2 +- proto: Beaker + entities: + - uid: 831 + components: + - type: Transform + pos: -26.382198,-16.162254 + parent: 2 + - uid: 832 + components: + - type: Transform + pos: -26.55003,-16.267149 + parent: 2 + - uid: 833 + components: + - type: Transform + pos: 41.006527,-34.3272 + parent: 2 + - uid: 834 + components: + - type: Transform + pos: 41.090443,-34.233963 + parent: 2 + - uid: 835 + components: + - type: MetaData + name: leporazine beaker + - type: Transform + pos: 28.631546,-31.392082 + parent: 2 + - type: SolutionContainerManager + solutions: + beaker: + temperature: 293.15 + canReact: True + maxVol: 50 + name: null + reagents: + - data: null + ReagentId: Leporazine + Quantity: 50 + - uid: 836 + components: + - type: MetaData + name: leporazine beaker + - type: Transform + pos: 28.790054,-31.326815 + parent: 2 + - type: SolutionContainerManager + solutions: + beaker: + temperature: 293.15 + canReact: True + maxVol: 50 + name: null + reagents: + - data: null + ReagentId: Leporazine + Quantity: 50 + - uid: 838 + components: + - type: Transform + parent: 837 + - type: Physics + canCollide: False + - uid: 839 + components: + - type: Transform + pos: 36.666573,-36.28809 + parent: 2 + - type: SolutionContainerManager + solutions: + beaker: + temperature: 293.15 + canReact: True + maxVol: 50 + name: null + reagents: + - data: null + ReagentId: Tritium + Quantity: 1 +- proto: Bed + entities: + - uid: 840 + components: + - type: Transform + pos: -24.5,4.5 + parent: 2 + - uid: 841 + components: + - type: Transform + pos: -14.5,-20.5 + parent: 2 + - uid: 842 + components: + - type: Transform + pos: -25.5,-67.5 + parent: 2 + - uid: 843 + components: + - type: Transform + pos: -7.5,-49.5 + parent: 2 + - uid: 844 + components: + - type: Transform + pos: 43.5,14.5 + parent: 2 + - uid: 845 + components: + - type: Transform + pos: 43.5,12.5 + parent: 2 + - uid: 846 + components: + - type: Transform + pos: 41.5,15.5 + parent: 2 + - uid: 847 + components: + - type: Transform + pos: 15.5,44.5 + parent: 2 + - uid: 848 + components: + - type: Transform + pos: 26.5,35.5 + parent: 2 + - uid: 849 + components: + - type: Transform + pos: 26.5,40.5 + parent: 2 + - uid: 850 + components: + - type: Transform + pos: -11.5,22.5 + parent: 2 + - uid: 851 + components: + - type: Transform + pos: -5.5,22.5 + parent: 2 + - uid: 852 + components: + - type: Transform + pos: -5.5,23.5 + parent: 2 + - uid: 853 + components: + - type: Transform + pos: -5.5,24.5 + parent: 2 + - uid: 854 + components: + - type: Transform + pos: -2.5,22.5 + parent: 2 + - uid: 855 + components: + - type: Transform + pos: -21.5,44.5 + parent: 2 + - uid: 856 + components: + - type: Transform + pos: -32.5,33.5 + parent: 2 + - uid: 857 + components: + - type: Transform + pos: -32.5,36.5 + parent: 2 + - uid: 858 + components: + - type: Transform + pos: -32.5,39.5 + parent: 2 + - uid: 859 + components: + - type: Transform + pos: -5.5,48.5 + parent: 2 + - uid: 860 + components: + - type: Transform + pos: 8.5,27.5 + parent: 2 + - uid: 861 + components: + - type: Transform + pos: -0.5,-53.5 + parent: 2 + - uid: 862 + components: + - type: Transform + pos: -34.5,-58.5 + parent: 2 + - uid: 863 + components: + - type: Transform + pos: -34.5,-60.5 + parent: 2 +- proto: BedsheetBrown + entities: + - uid: 864 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,22.5 + parent: 2 + - uid: 865 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,22.5 + parent: 2 + - uid: 866 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,23.5 + parent: 2 + - uid: 867 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,24.5 + parent: 2 + - uid: 868 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,22.5 + parent: 2 + - uid: 869 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,33.5 + parent: 2 + - uid: 870 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,36.5 + parent: 2 + - uid: 871 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,39.5 + parent: 2 +- proto: BedsheetCaptain + entities: + - uid: 872 + components: + - type: Transform + pos: -5.5,48.5 + parent: 2 +- proto: BedsheetClown + entities: + - uid: 873 + components: + - type: Transform + pos: 43.5,12.5 + parent: 2 + - uid: 10533 + components: + - type: Transform + parent: 10524 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: BedsheetCosmos + entities: + - uid: 874 + components: + - type: Transform + pos: 41.5,15.5 + parent: 2 + - uid: 875 + components: + - type: Transform + pos: -34.5,-60.5 + parent: 2 +- proto: BedsheetCult + entities: + - uid: 876 + components: + - type: Transform + pos: 15.5,44.5 + parent: 2 + - uid: 877 + components: + - type: Transform + pos: -34.5,-58.5 + parent: 2 +- proto: BedsheetGreen + entities: + - uid: 878 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,-49.5 + parent: 2 +- proto: BedsheetHOS + entities: + - uid: 879 + components: + - type: Transform + pos: -21.5,44.5 + parent: 2 +- proto: BedsheetMedical + entities: + - uid: 880 + components: + - type: Transform + pos: 19.5,-26.5 + parent: 2 + - uid: 881 + components: + - type: Transform + pos: 19.5,-25.5 + parent: 2 + - uid: 882 + components: + - type: Transform + pos: 15.5,-25.5 + parent: 2 + - uid: 883 + components: + - type: Transform + pos: 15.5,-26.5 + parent: 2 + - uid: 884 + components: + - type: Transform + pos: 17.5,-25.5 + parent: 2 + - uid: 885 + components: + - type: Transform + pos: 17.5,-26.5 + parent: 2 +- proto: BedsheetMime + entities: + - uid: 886 + components: + - type: Transform + pos: 43.5,14.5 + parent: 2 + - uid: 10516 + components: + - type: Transform + parent: 10501 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: BedsheetNT + entities: + - uid: 887 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,27.5 + parent: 2 +- proto: BedsheetQM + entities: + - uid: 888 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,4.5 + parent: 2 +- proto: BedsheetRD + entities: + - uid: 889 + components: + - type: Transform + pos: -14.5,-20.5 + parent: 2 +- proto: BedsheetSpawner + entities: + - uid: 890 + components: + - type: Transform + pos: 26.5,35.5 + parent: 2 + - uid: 891 + components: + - type: Transform + pos: 26.5,40.5 + parent: 2 +- proto: BedsheetSyndie + entities: + - uid: 892 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-53.5 + parent: 2 +- proto: BenchPewLeft + entities: + - uid: 893 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,8.5 + parent: 2 + - uid: 894 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,10.5 + parent: 2 + - uid: 895 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,9.5 + parent: 2 + - uid: 896 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,10.5 + parent: 2 + - uid: 897 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,12.5 + parent: 2 + - uid: 898 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,12.5 + parent: 2 + - uid: 899 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,9.5 + parent: 2 + - uid: 900 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 23.5,29.5 + parent: 2 + - uid: 901 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,29.5 + parent: 2 + - uid: 904 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,29.5 + parent: 2 + - uid: 907 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,42.5 + parent: 2 + - uid: 916 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 23.5,32.5 + parent: 2 + - uid: 917 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,32.5 + parent: 2 + - uid: 918 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 18.5,43.5 + parent: 2 + - uid: 921 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,32.5 + parent: 2 +- proto: BenchPewRight + entities: + - uid: 902 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,30.5 + parent: 2 + - uid: 903 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 18.5,42.5 + parent: 2 + - uid: 905 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,30.5 + parent: 2 + - uid: 906 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 23.5,30.5 + parent: 2 + - uid: 908 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,12.5 + parent: 2 + - uid: 909 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,12.5 + parent: 2 + - uid: 910 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,10.5 + parent: 2 + - uid: 911 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,9.5 + parent: 2 + - uid: 912 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,8.5 + parent: 2 + - uid: 913 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,10.5 + parent: 2 + - uid: 914 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,9.5 + parent: 2 + - uid: 915 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,33.5 + parent: 2 + - uid: 919 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 23.5,33.5 + parent: 2 + - uid: 920 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,33.5 + parent: 2 + - uid: 922 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,43.5 + parent: 2 +- proto: BenchSofaCorner + entities: + - uid: 923 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,27.5 + parent: 2 + - uid: 924 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,24.5 + parent: 2 +- proto: BenchSofaCorpLeft + entities: + - uid: 925 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 43.5,-25.5 + parent: 2 +- proto: BenchSofaCorpRight + entities: + - uid: 926 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,-25.5 + parent: 2 +- proto: BenchSofaLeft + entities: + - uid: 927 + components: + - type: Transform + pos: 11.5,27.5 + parent: 2 + - uid: 929 + components: + - type: Transform + pos: -16.5,12.5 + parent: 2 + - uid: 930 + components: + - type: Transform + pos: -27.5,6.5 + parent: 2 + - uid: 931 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,4.5 + parent: 2 + - uid: 932 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 32.5,5.5 + parent: 2 + - uid: 933 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 20.5,4.5 + parent: 2 + - uid: 934 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 18.5,5.5 + parent: 2 + - uid: 935 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,5.5 + parent: 2 + - uid: 936 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,4.5 + parent: 2 + - uid: 937 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,4.5 + parent: 2 + - uid: 938 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 37.5,-2.5 + parent: 2 + - uid: 939 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 40.5,-3.5 + parent: 2 + - uid: 940 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,53.5 + parent: 2 + - uid: 941 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,51.5 + parent: 2 +- proto: BenchSofaMiddle + entities: + - uid: 942 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,25.5 + parent: 2 + - uid: 943 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,52.5 + parent: 2 + - uid: 944 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,52.5 + parent: 2 + - uid: 945 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,26.5 + parent: 2 +- proto: BenchSofaRight + entities: + - uid: 946 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,24.5 + parent: 2 + - uid: 947 + components: + - type: Transform + pos: -17.5,12.5 + parent: 2 + - uid: 949 + components: + - type: Transform + pos: -28.5,6.5 + parent: 2 + - uid: 950 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -27.5,4.5 + parent: 2 + - uid: 951 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,4.5 + parent: 2 + - uid: 952 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 32.5,4.5 + parent: 2 + - uid: 953 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 18.5,4.5 + parent: 2 + - uid: 954 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 20.5,5.5 + parent: 2 + - uid: 955 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,5.5 + parent: 2 + - uid: 956 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,5.5 + parent: 2 + - uid: 957 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 37.5,-3.5 + parent: 2 + - uid: 958 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 40.5,-2.5 + parent: 2 + - uid: 959 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,51.5 + parent: 2 + - uid: 960 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,53.5 + parent: 2 +- proto: BenchSteelLeft + entities: + - uid: 961 + components: + - type: Transform + pos: 35.5,-9.5 + parent: 2 + - uid: 962 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,-6.5 + parent: 2 + - uid: 963 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,19.5 + parent: 2 + - uid: 964 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,39.5 + parent: 2 + - uid: 965 + components: + - type: Transform + pos: -5.5,38.5 + parent: 2 + - uid: 966 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,5.5 + parent: 2 + - uid: 967 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,6.5 + parent: 2 +- proto: BenchSteelMiddle + entities: + - uid: 968 + components: + - type: Transform + pos: 39.5,-9.5 + parent: 2 + - uid: 969 + components: + - type: Transform + pos: 38.5,-9.5 + parent: 2 + - uid: 970 + components: + - type: Transform + pos: 37.5,-9.5 + parent: 2 + - uid: 971 + components: + - type: Transform + pos: 36.5,-9.5 + parent: 2 + - uid: 972 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 39.5,-6.5 + parent: 2 + - uid: 973 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 38.5,-6.5 + parent: 2 + - uid: 974 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,-6.5 + parent: 2 + - uid: 975 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 36.5,-6.5 + parent: 2 + - uid: 976 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -39.5,19.5 + parent: 2 + - uid: 977 + components: + - type: Transform + pos: -4.5,38.5 + parent: 2 + - uid: 978 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,39.5 + parent: 2 +- proto: BenchSteelRight + entities: + - uid: 979 + components: + - type: Transform + pos: 40.5,-9.5 + parent: 2 + - uid: 980 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 35.5,-6.5 + parent: 2 + - uid: 981 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -40.5,19.5 + parent: 2 + - uid: 982 + components: + - type: Transform + pos: -3.5,38.5 + parent: 2 + - uid: 983 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,39.5 + parent: 2 + - uid: 984 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,6.5 + parent: 2 + - uid: 985 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,5.5 + parent: 2 +- proto: BenchSteelWhiteLeft + entities: + - uid: 986 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,-25.5 + parent: 2 + - uid: 987 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,-25.5 + parent: 2 + - uid: 988 + components: + - type: Transform + pos: 8.5,-23.5 + parent: 2 + - uid: 989 + components: + - type: Transform + pos: 5.5,-23.5 + parent: 2 +- proto: BenchSteelWhiteRight + entities: + - uid: 990 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,-25.5 + parent: 2 + - uid: 991 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,-25.5 + parent: 2 + - uid: 992 + components: + - type: Transform + pos: 6.5,-23.5 + parent: 2 + - uid: 993 + components: + - type: Transform + pos: 9.5,-23.5 + parent: 2 +- proto: BigBox + entities: + - uid: 994 + components: + - type: Transform + pos: -26.502766,12.471382 + parent: 2 + - uid: 995 + components: + - type: Transform + pos: 30.508911,-33.498234 + parent: 2 + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 997 + - 996 +- proto: Biofabricator + entities: + - uid: 8900 + components: + - type: Transform + pos: 19.5,-29.5 + parent: 2 +- proto: BiomassReclaimer + entities: + - uid: 23936 + components: + - type: Transform + pos: 20.5,-11.5 + parent: 2 +- proto: BlastDoor + entities: + - uid: 998 + components: + - type: Transform + pos: -45.5,-2.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18241 + - uid: 999 + components: + - type: Transform + pos: -45.5,1.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18242 + - uid: 1000 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -45.5,18.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18244 + - uid: 1001 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,-32.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18238 + - uid: 1002 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,-31.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18238 + - uid: 1003 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-22.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18279 + - uid: 1004 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-21.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18279 + - uid: 1005 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -44.5,-47.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18256 + - 18255 + - uid: 1006 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -44.5,-46.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18256 + - 18255 + - uid: 1007 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -44.5,-45.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18256 + - 18255 + - uid: 1008 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -44.5,-52.5 + parent: 2 + - uid: 1009 + components: + - type: Transform + pos: 20.5,47.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19982 + - uid: 1010 + components: + - type: Transform + pos: 13.5,-61.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18290 + - 18270 + - uid: 1011 + components: + - type: Transform + pos: 12.5,-61.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18290 + - 18270 + - uid: 1012 + components: + - type: Transform + pos: 11.5,-61.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18290 + - 18270 + - uid: 1013 + components: + - type: Transform + pos: 42.5,-45.5 + parent: 2 + - uid: 1014 + components: + - type: Transform + pos: 45.5,-43.5 + parent: 2 + - uid: 1015 + components: + - type: Transform + pos: 27.5,-71.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18266 +- proto: BlastDoorOpen + entities: + - uid: 154 + components: + - type: Transform + pos: -2.5,-61.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18291 + - uid: 189 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,-74.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18291 + - uid: 272 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-77.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18291 + - uid: 288 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-77.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18291 + - uid: 414 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-74.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18291 + - uid: 1016 + components: + - type: Transform + pos: -19.5,-32.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18331 + - 18267 + - uid: 1017 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,19.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18257 + - uid: 1018 + components: + - type: Transform + pos: -1.5,37.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18258 + - uid: 1019 + components: + - type: Transform + pos: -1.5,38.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18258 + - uid: 1020 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,62.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18283 + - uid: 1021 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,62.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18283 + - uid: 1022 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,68.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18286 + - uid: 1023 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,68.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18287 + - uid: 1024 + components: + - type: Transform + pos: 3.5,-23.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18261 + - uid: 1025 + components: + - type: Transform + pos: 3.5,-24.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18261 + - uid: 1026 + components: + - type: Transform + pos: 3.5,-25.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18261 + - uid: 1027 + components: + - type: Transform + pos: 11.5,-23.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18262 + - uid: 1028 + components: + - type: Transform + pos: 11.5,-24.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18262 + - uid: 1029 + components: + - type: Transform + pos: 11.5,-25.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18262 + - uid: 1030 + components: + - type: Transform + pos: 6.5,-60.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18291 + - uid: 1031 + components: + - type: Transform + pos: 7.5,-60.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18291 + - uid: 1032 + components: + - type: Transform + pos: 8.5,-60.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18291 + - uid: 21918 + components: + - type: Transform + pos: 9.5,-63.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18291 + - uid: 21925 + components: + - type: Transform + pos: 9.5,-64.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18291 + - uid: 21926 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-68.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18291 + - uid: 21933 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-69.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18291 + - uid: 21934 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-70.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18291 + - uid: 21935 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,-77.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18291 + - uid: 21936 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-77.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18291 + - uid: 21937 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-77.5 + parent: 2 + - uid: 22464 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,-77.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18291 + - uid: 22486 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,-77.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18291 + - uid: 22487 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,-70.5 + parent: 2 + - uid: 22488 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,-69.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18291 + - uid: 22513 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,-68.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18291 + - uid: 22610 + components: + - type: Transform + pos: 4.5,-61.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18291 + - uid: 22611 + components: + - type: Transform + pos: 2.5,-61.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18291 + - uid: 22613 + components: + - type: Transform + pos: -4.5,-61.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18291 + - uid: 22640 + components: + - type: Transform + pos: -3.5,-61.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18291 + - uid: 22641 + components: + - type: Transform + pos: 3.5,-61.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18291 + - uid: 22845 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,-77.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18291 +- proto: Bloodpack + entities: + - uid: 1033 + components: + - type: Transform + pos: 25.355034,-13.543341 + parent: 2 + - uid: 1034 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.627491,-12.705351 + parent: 2 + - uid: 1035 + components: + - type: Transform + pos: 24.286171,-14.653675 + parent: 2 + - uid: 1036 + components: + - type: Transform + pos: -30.309258,37.72887 + parent: 2 + - uid: 1037 + components: + - type: Transform + pos: -30.632004,37.62142 + parent: 2 +- proto: BodyBag + entities: + - uid: 1038 + components: + - type: Transform + pos: -21.502857,-2.463719 + parent: 2 +- proto: Bonfire + entities: + - uid: 1040 + components: + - type: Transform + pos: -24.5,-14.5 + parent: 2 + - uid: 1041 + components: + - type: Transform + pos: -21.5,-38.5 + parent: 2 + - uid: 1042 + components: + - type: Transform + pos: 32.5,-33.5 + parent: 2 + - uid: 1043 + components: + - type: Transform + pos: -15.5,-15.5 + parent: 2 + - uid: 1044 + components: + - type: Transform + pos: -15.5,-15.5 + parent: 2 +- proto: BookAtmosAirAlarms + entities: + - uid: 1045 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.477695,-11.936964 + parent: 2 + - uid: 1046 + components: + - type: Transform + pos: 11.402032,-50.259182 + parent: 2 +- proto: BookAtmosDistro + entities: + - uid: 1047 + components: + - type: Transform + pos: 11.464191,-50.321342 + parent: 2 + - uid: 1048 + components: + - type: Transform + pos: 29.52829,-51.505558 + parent: 2 +- proto: BookAtmosVentsMore + entities: + - uid: 1049 + components: + - type: Transform + pos: 11.51392,-50.37729 + parent: 2 +- proto: BookAtmosWaste + entities: + - uid: 1050 + components: + - type: Transform + pos: 11.569863,-50.439445 + parent: 2 +- proto: BookBartendersManual + entities: + - uid: 1051 + components: + - type: Transform + pos: 17.490627,16.619688 + parent: 2 + - uid: 23923 + components: + - type: Transform + parent: 23915 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: BookBase + entities: + - uid: 1053 + components: + - type: MetaData + name: 'Sindicato: Uma ameaça?' + - type: Transform + parent: 1052 + - type: Paper + content: >2- + Antes de tudo, quero esclarecer algumas coisas. Recomendo não buscar mais informações sobre o Sindicato ou qualquer coisa relacionada a ele. Se fizer isso, enfrentará um grande perigo e pode muito bem acabar sendo morto. Estou fazendo isso na tentativa de informar o máximo de pessoas possível sobre o que a NanoTrasen esconde. Algumas informações são bastante incertas devido à grande censura que ocorre pela NanoTrasen, e não poderei responder algumas dúvidas que surgirão ao longo deste livro. Por fim, espero que tenha uma boa leitura. + + Ass. Olivia Hass + + + [color=red]Este livro teve a circulação proibida e qualquer exemplar dele deve ser queimado.[/color] + - type: Physics + canCollide: False + - uid: 1054 + components: + - type: MetaData + name: > + Catalogo de Entidades Hiper Desenvolvidas #1: A Marionete Suprema. + - type: Transform + parent: 1052 + - type: Paper + content: >- + Nas esferas do misticismo e das forças indomáveis, existe uma entidade de poder inigualável conhecida como o A Marionete Suprema. Apesar de seu nome, esse ser extraordinário está longe de ser uma marionete real; ele tem o tamanho de um humano médio, e sua aparência pode mudar de tempos em tempos. Ele incorpora uma misteriosa combinação de poder e consciência, exigindo um mestre para orientar suas ações. A natureza do Boneco está intrinsicamente ligada ao controle, sua existência depende de um mestre que pode aproveitar suas imensas capacidades. + + + A Marionete Suprema possui um arsenal de habilidades e capacidades extraordinárias, tornando-o uma força a ser reconhecida. Quando o mestre emite um comando, a Marionete o executa com uma eficiência, habilidade e sutileza inigualáveis. Seja uma infiltração delicada, uma manobra estratégica ou uma exibição de poder bruto, a Marionete realiza sua ordem dada impecavelmente, sem deixar margem para erro. + + + No entanto, a verdadeira arte da Marionete reside na teatralidade e intriga de seus comandos. O desempenho da Marionete está intrinsecamente ligado às habilidades criativas e teatrais de seu mestre. Quanto mais envolvente, cativante e dramático o cenário criado pelo mestre, mais pronunciada e extraordinária se torna a execução da Marionete. Um comando sem brilho teatral e mundano leva a resultados ineficientes ou falhas, enquanto uma ordem brilhantemente concebida e narrada desbloqueia todo o potencial das habilidades da Marionete. + + + Mas cuidado, pois a Marionete abriga uma inclinação secreta e traiçoeira. Se o mestre falhar repetidamente em cativar a Marionete com cenários fascinantes, a insatisfação penetra lentamente na consciência da entidade. À medida que a Marionete anseia por mais emoção e realização, o vínculo entre mestre e a Marionete começa a se fraturar. Gradualmente, o descontentamento da Marionete se transforma em uma animosidade perigosa, e com insatisfação suficiente, ela pode se voltar contra seu mestre com consequências letais. + + + Assim, a Marionete Suprema caminha numa corda bamba delicada entre lealdade e rebelião, tornando a relação entre mestre e entidade uma dança precária. O mestre deve se esforçar continuamente para cativar e fascinar a Marionete, garantindo sua devoção e lealdade inabaláveis. De forma relativamente simples, esta entidade vê-se a si mesma como personagem de uma obra de ficção, ao mesmo tempo que vê o seu mestre como o criador da obra. + + + Nas sombras do mistério e do poder oculto, a Marionete Suprema aguarda aqueles que ousam comandá-lo. Será você o escolhido para desbloquear seu potencial ilimitado, ou sucumbirá ao seu crescente descontentamento e enfrentará as consequências graves? A escolha reside em sua capacidade de domar o enigma da poderosa entidade que é a Marionete Suprema. + - type: Physics + canCollide: False + - uid: 1055 + components: + - type: MetaData + name: > + Catalogo de Magias Hiper Desenvolvidas #1: (Maldição) - Alegoria do Peso Perpétuo: + - type: Transform + parent: 1052 + - type: Paper + content: >- + A pessoa afetada por esta maldição se encontra aprisionada em um ciclo interminável de tarefas exaustivas, sendo compelida a cumpri-las sem descanso. Trata-se de uma maldição cruel que mergulha a vítima em um estado de fadiga extrema, permitindo-lhe descansar apenas quando seu corpo sucumbe ao desmaio. + + + Aqueles sob efeito da Alegoria do Peso Perpétuo vivenciam uma corrente interminável de tarefas, cujo número parece ser infinito. Essas tarefas podem variar em natureza, indo desde atividades físicas extenuantes até tarefas mentais exaustivas, sempre se adaptando às habilidades e destrezas individuais da vítima. A maldição não apenas exige que as tarefas sejam concluídas, mas também pressiona a pessoa afetada a executá-las com eficiência e perfeição, deixando pouco espaço para falhas. + + + Enquanto a Maldição do Peso Eterno é implacável em suas imposições de tarefas, ela concede à pessoa afetada um mínimo de livre-arbítrio. A vítima pode escolher a ordem em que realiza as tarefas e até mesmo o tipo de atividade que deseja empreender, dentro dos limites impostos pela maldição. Essa capacidade de escolha paradoxalmente intensifica o sofrimento da pessoa, pois ela deve decidir constantemente qual tarefa realizar, sabendo que nunca haverá um fim para essa demanda interminável. + - type: Physics + canCollide: False +- proto: BookChefGaming + entities: + - uid: 1056 + components: + - type: Transform + pos: 19.417454,16.533361 + parent: 2 +- proto: BookChemicalCompendium + entities: + - uid: 1057 + components: + - type: Transform + pos: 31.302227,-14.355734 + parent: 2 +- proto: BookEngineersHandbook + entities: + - uid: 1058 + components: + - type: Transform + pos: 1.3585267,-44.41457 + parent: 2 + - uid: 1059 + components: + - type: Transform + pos: 11.644189,-50.90064 + parent: 2 + - uid: 1060 + components: + - type: Transform + pos: 4.2590303,-52.247704 + parent: 2 +- proto: BookFeather + entities: + - uid: 1061 + components: + - type: Transform + pos: 20.433872,-13.290758 + parent: 2 +- proto: BookHowToSurvive + entities: + - uid: 1062 + components: + - type: Transform + pos: 11.4763565,-50.87966 + parent: 2 + - uid: 1063 + components: + - type: Transform + pos: 4.3615947,-52.322292 + parent: 2 +- proto: BookInspiration + entities: + - uid: 1064 + components: + - type: Transform + pos: -15.363409,-22.396322 + parent: 2 +- proto: BookMedicalOfficer + entities: + - uid: 1065 + components: + - type: Transform + pos: 38.57296,-33.29446 + parent: 2 + - uid: 1066 + components: + - type: Transform + pos: 28.406742,-32.13021 + parent: 2 +- proto: BookNames + entities: + - uid: 1067 + components: + - type: Transform + pos: -28.15681,5.660248 + parent: 2 +- proto: BookRandom + entities: + - uid: 1068 + components: + - type: Transform + pos: -23.689209,-16.391232 + parent: 2 + - uid: 1069 + components: + - type: Transform + pos: 17.506668,31.558624 + parent: 2 + - uid: 1070 + components: + - type: Transform + pos: 15.406973,36.540806 + parent: 2 + - uid: 1071 + components: + - type: Transform + pos: 15.560819,36.722622 + parent: 2 + - uid: 1072 + components: + - type: Transform + pos: 15.672707,36.59675 + parent: 2 + - uid: 1073 + components: + - type: Transform + pos: 46.595566,-25.394053 + parent: 2 + - uid: 1074 + components: + - type: Transform + pos: 46.217945,-25.289158 + parent: 2 + - uid: 1075 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 45.777386,-25.498947 + parent: 2 +- proto: BookRandomStory + entities: + - uid: 1076 + components: + - type: Transform + pos: 31.79174,-14.243845 + parent: 2 + - uid: 1077 + components: + - type: Transform + pos: -21.235794,22.614756 + parent: 2 +- proto: BooksBag + entities: + - uid: 1078 + components: + - type: Transform + pos: 45.48368,-25.268177 + parent: 2 +- proto: BookSecurity + entities: + - uid: 1079 + components: + - type: Transform + pos: -21.571457,22.677692 + parent: 2 +- proto: Bookshelf + entities: + - uid: 1052 + components: + - type: Transform + pos: 39.5,7.5 + parent: 2 + - type: ContainerContainer + containers: + storagebase: !type:Container + showEnts: False + occludes: True + ents: + - 1053 + - 1054 + - 1055 + - uid: 1080 + components: + - type: Transform + pos: -12.5,-6.5 + parent: 2 + - uid: 1081 + components: + - type: Transform + pos: -13.5,-6.5 + parent: 2 +- proto: BookshelfFilled + entities: + - uid: 1082 + components: + - type: Transform + pos: 37.5,10.5 + parent: 2 + - uid: 1083 + components: + - type: Transform + pos: 38.5,10.5 + parent: 2 + - uid: 1084 + components: + - type: Transform + pos: 39.5,10.5 + parent: 2 + - uid: 1085 + components: + - type: Transform + pos: 40.5,10.5 + parent: 2 + - uid: 1086 + components: + - type: Transform + pos: 42.5,10.5 + parent: 2 + - uid: 1087 + components: + - type: Transform + pos: 38.5,8.5 + parent: 2 + - uid: 1088 + components: + - type: Transform + pos: 39.5,8.5 + parent: 2 + - uid: 1089 + components: + - type: Transform + pos: 40.5,8.5 + parent: 2 + - uid: 1090 + components: + - type: Transform + pos: 41.5,8.5 + parent: 2 + - uid: 1091 + components: + - type: Transform + pos: 38.5,7.5 + parent: 2 + - uid: 1092 + components: + - type: Transform + pos: 38.5,8.5 + parent: 2 + - uid: 1093 + components: + - type: Transform + pos: 39.5,8.5 + parent: 2 + - uid: 1094 + components: + - type: Transform + pos: 41.5,7.5 + parent: 2 + - uid: 1095 + components: + - type: Transform + pos: 44.5,0.5 + parent: 2 + - uid: 1096 + components: + - type: Transform + pos: 46.5,-23.5 + parent: 2 + - uid: 1097 + components: + - type: Transform + pos: 31.5,-33.5 + parent: 2 + - uid: 23863 + components: + - type: Transform + pos: 40.5,7.5 + parent: 2 +- proto: BookTemple + entities: + - uid: 1098 + components: + - type: Transform + pos: -14.981125,-22.3497 + parent: 2 +- proto: BookWorld + entities: + - uid: 1099 + components: + - type: Transform + pos: -15.195577,-22.303082 + parent: 2 +- proto: BoozeDispenser + entities: + - uid: 1100 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,-63.5 + parent: 2 + - uid: 1101 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,13.5 + parent: 2 +- proto: BorgCharger + entities: + - uid: 1102 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,-6.5 + parent: 2 + - uid: 1103 + components: + - type: Transform + pos: -30.5,-16.5 + parent: 2 + - uid: 1104 + components: + - type: Transform + pos: -29.5,-16.5 + parent: 2 + - uid: 1105 + components: + - type: Transform + pos: 33.5,30.5 + parent: 2 + - uid: 1106 + components: + - type: Transform + pos: 32.5,30.5 + parent: 2 + - uid: 1107 + components: + - type: Transform + pos: 31.5,30.5 + parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 75.31249 + moles: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - uid: 1108 + components: + - type: Transform + pos: 5.5,85.5 + parent: 2 + - uid: 1109 + components: + - type: Transform + pos: 6.5,85.5 + parent: 2 + - uid: 1110 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,85.5 + parent: 2 + - uid: 1111 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,-14.5 + parent: 2 + - uid: 1112 + components: + - type: Transform + pos: 8.5,-54.5 + parent: 2 +- proto: BorgModuleClowning + entities: + - uid: 10539 + components: + - type: Transform + parent: 10524 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: BoxBeaker + entities: + - uid: 1113 + components: + - type: Transform + pos: -5.792077,-30.758797 + parent: 2 + - type: Physics + angularDamping: 0 + linearDamping: 0 + - uid: 1114 + components: + - type: Transform + pos: 42.640194,-28.411314 + parent: 2 + - uid: 1115 + components: + - type: Transform + pos: 23.328041,-30.442726 + parent: 2 + - uid: 1116 + components: + - type: Transform + pos: 7.35902,-29.546413 + parent: 2 +- proto: BoxBeanbag + entities: + - uid: 23931 + components: + - type: Transform + parent: 23915 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: BoxBodyBag + entities: + - uid: 1117 + components: + - type: Transform + pos: -30.00586,32.802864 + parent: 2 + - uid: 1118 + components: + - type: Transform + pos: -36.16761,30.64786 + parent: 2 + - uid: 1119 + components: + - type: Transform + pos: 31.481876,-31.373457 + parent: 2 + - uid: 1120 + components: + - type: Transform + pos: 31.621738,-31.26157 + parent: 2 + - uid: 8670 + components: + - type: Transform + pos: 23.499565,-30.32426 + parent: 2 +- proto: BoxCardboard + entities: + - uid: 1122 + components: + - type: Transform + pos: -29.499535,-6.517551 + parent: 2 + - uid: 1123 + components: + - type: Transform + pos: -29.69534,-6.424311 + parent: 2 + - uid: 1124 + components: + - type: Transform + pos: -29.424942,-6.2751265 + parent: 2 + - uid: 1125 + components: + - type: Transform + pos: -29.434269,-6.442959 + parent: 2 + - uid: 1126 + components: + - type: Transform + pos: -29.266434,-6.4056625 + parent: 2 + - uid: 1127 + components: + - type: Transform + pos: -30.329372,-4.5781574 + parent: 2 + - uid: 1128 + components: + - type: Transform + pos: -30.58112,-4.373029 + parent: 2 + - uid: 1129 + components: + - type: Transform + pos: -30.273426,-4.1212807 + parent: 2 + - uid: 1130 + components: + - type: Transform + pos: -30.5345,-3.9348006 + parent: 2 + - uid: 1131 + components: + - type: Transform + pos: -30.5345,-3.9348006 + parent: 2 +- proto: BoxFlashbang + entities: + - uid: 1132 + components: + - type: Transform + pos: -14.382187,38.59988 + parent: 2 +- proto: BoxFolderBase + entities: + - uid: 1133 + components: + - type: Transform + pos: -17.356007,-22.297771 + parent: 2 +- proto: BoxFolderBlack + entities: + - uid: 1134 + components: + - type: Transform + pos: -13.3687105,-3.2197378 + parent: 2 + - uid: 1135 + components: + - type: Transform + pos: -6.455263,14.560249 + parent: 2 + - uid: 1136 + components: + - type: Transform + pos: 17.663635,21.630175 + parent: 2 + - uid: 1137 + components: + - type: Transform + pos: 17.84079,21.471666 + parent: 2 +- proto: BoxFolderBlue + entities: + - uid: 1138 + components: + - type: Transform + pos: -16.40982,-3.3916838 + parent: 2 + - uid: 1139 + components: + - type: Transform + pos: -10.009421,13.602484 + parent: 2 + - uid: 1140 + components: + - type: Transform + pos: -6.5298553,14.59133 + parent: 2 + - uid: 1141 + components: + - type: Transform + pos: -3.5946116,14.507507 + parent: 2 + - uid: 1142 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.434541,56.04708 + parent: 2 + - uid: 1143 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.378911,54.63809 + parent: 2 + - uid: 1144 + components: + - type: Transform + pos: -0.64332175,69.52475 + parent: 2 + - uid: 1145 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.34961545,69.510765 + parent: 2 + - uid: 1146 + components: + - type: Transform + pos: 22.959122,-20.45176 + parent: 2 + - uid: 1147 + components: + - type: Transform + pos: 6.4702945,25.629044 + parent: 2 +- proto: BoxFolderClipboard + entities: + - uid: 1148 + components: + - type: Transform + pos: -6.2439194,14.479441 + parent: 2 + - uid: 1149 + components: + - type: Transform + pos: -30.012356,-6.4895787 + parent: 2 + - uid: 1150 + components: + - type: Transform + pos: -28.672737,5.5670075 + parent: 2 + - uid: 1151 + components: + - type: Transform + pos: -40.533924,8.63838 + parent: 2 + - uid: 1152 + components: + - type: Transform + pos: -26.40318,-18.427988 + parent: 2 + - uid: 1153 + components: + - type: Transform + pos: -17.36533,-22.521547 + parent: 2 + - uid: 1154 + components: + - type: Transform + pos: 38.305824,1.6013311 + parent: 2 + - uid: 1155 + components: + - type: Transform + pos: -16.28135,31.641228 + parent: 2 + - uid: 1156 + components: + - type: Transform + pos: 6.356128,48.842865 + parent: 2 + - type: ContainerContainer + containers: + storagebase: !type:Container + showEnts: False + occludes: True + ents: + - 1157 + pen_slot: !type:ContainerSlot + showEnts: False + occludes: True + ent: null + - uid: 1158 + components: + - type: Transform + pos: 10.417078,53.39866 + parent: 2 + - uid: 1159 + components: + - type: Transform + pos: 0.55947524,69.608665 + parent: 2 + - uid: 1160 + components: + - type: Transform + pos: 26.006824,-19.379238 + parent: 2 + - uid: 1161 + components: + - type: Transform + pos: 46.479202,-20.39618 + parent: 2 + - uid: 1162 + components: + - type: Transform + pos: 40.167366,-34.29213 + parent: 2 + - uid: 1163 + components: + - type: Transform + pos: 11.340425,-50.905647 + parent: 2 + - uid: 1164 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.4912734,27.286385 + parent: 2 + - uid: 1165 + components: + - type: Transform + pos: 17.421211,21.490314 + parent: 2 +- proto: BoxFolderGrey + entities: + - uid: 1166 + components: + - type: Transform + pos: -26.529053,-18.511906 + parent: 2 +- proto: BoxFolderRed + entities: + - uid: 1167 + components: + - type: Transform + pos: -16.47144,-6.407802 + parent: 2 + - uid: 1168 + components: + - type: Transform + pos: -12.986888,13.602484 + parent: 2 + - uid: 1169 + components: + - type: Transform + pos: -6.3495913,14.554033 + parent: 2 + - uid: 1170 + components: + - type: Transform + pos: -3.4827232,14.544802 + parent: 2 + - uid: 1171 + components: + - type: Transform + pos: 43.74235,-17.425884 + parent: 2 + - uid: 1172 + components: + - type: Transform + pos: -24.97533,24.557632 + parent: 2 + - uid: 1173 + components: + - type: Transform + pos: -16.789017,31.681232 + parent: 2 + - uid: 1174 + components: + - type: Transform + pos: 6.55421,25.733936 + parent: 2 +- proto: BoxFolderWhite + entities: + - uid: 1175 + components: + - type: Transform + pos: -6.5135493,82.6491 + parent: 2 + - uid: 1176 + components: + - type: Transform + pos: 40.01818,-34.43199 + parent: 2 + - uid: 1177 + components: + - type: Transform + pos: 5.517516,-28.436022 + parent: 2 +- proto: BoxFolderYellow + entities: + - uid: 1178 + components: + - type: Transform + pos: -30.217484,-6.3683667 + parent: 2 + - uid: 1179 + components: + - type: Transform + pos: -28.442745,5.4675517 + parent: 2 + - uid: 1180 + components: + - type: Transform + pos: -40.59919,8.517168 + parent: 2 +- proto: BoxHandcuff + entities: + - uid: 1181 + components: + - type: Transform + pos: 30.040516,-4.3923454 + parent: 2 + - uid: 1182 + components: + - type: Transform + pos: -5.523954,34.568943 + parent: 2 + - uid: 1183 + components: + - type: Transform + pos: -14.621258,38.542572 + parent: 2 + - uid: 1184 + components: + - type: Transform + pos: -38.525764,22.535631 + parent: 2 +- proto: BoxLatexGloves + entities: + - uid: 811 + components: + - type: Transform + pos: 23.144512,-30.219042 + parent: 2 + - uid: 1185 + components: + - type: Transform + pos: 42.621548,-28.597794 + parent: 2 + - uid: 1187 + components: + - type: Transform + pos: 7.718395,-29.265163 + parent: 2 + - uid: 1188 + components: + - type: Transform + pos: 13.493209,-32.35294 + parent: 2 +- proto: BoxLethalshot + entities: + - uid: 1189 + components: + - type: Transform + pos: -15.491153,40.70749 + parent: 2 + - uid: 1190 + components: + - type: Transform + pos: -15.491153,40.63108 + parent: 2 +- proto: BoxLightMixed + entities: + - uid: 1191 + components: + - type: Transform + pos: 7.4954042,12.574865 + parent: 2 + - uid: 1192 + components: + - type: Transform + pos: 7.6818843,12.680538 + parent: 2 + - uid: 1193 + components: + - type: Transform + pos: 1.6941905,-44.41457 + parent: 2 + - uid: 1194 + components: + - type: Transform + pos: -14.615689,-55.254997 + parent: 2 + - uid: 18457 + components: + - type: Transform + parent: 1930 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 23907 + components: + - type: Transform + parent: 19985 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: BoxMesonScanners + entities: + - uid: 1195 + components: + - type: Transform + pos: 14.606563,-52.36391 + parent: 2 +- proto: BoxMousetrap + entities: + - uid: 1196 + components: + - type: Transform + pos: 23.36734,17.657253 + parent: 2 +- proto: BoxPerformer + entities: + - uid: 1197 + components: + - type: Transform + pos: 13.706232,-4.671299 + parent: 2 + - uid: 1198 + components: + - type: Transform + pos: 10.4830065,-37.458145 + parent: 2 +- proto: BoxShotgunIncendiary + entities: + - uid: 1199 + components: + - type: Transform + pos: -15.491153,40.80937 + parent: 2 +- proto: BoxShotgunPractice + entities: + - uid: 1200 + components: + - type: Transform + pos: 15.49762,18.780527 + parent: 2 + - uid: 1201 + components: + - type: Transform + pos: 15.49762,18.591717 + parent: 2 +- proto: BoxShotgunSlug + entities: + - uid: 1202 + components: + - type: Transform + pos: -15.48257,40.505035 + parent: 2 +- proto: BoxSterileMask + entities: + - uid: 1203 + components: + - type: Transform + pos: 19.527786,-13.189604 + parent: 2 +- proto: BoxSyringe + entities: + - uid: 1204 + components: + - type: Transform + pos: -5.9625015,-30.436827 + parent: 2 + - type: Physics + angularDamping: 0 + linearDamping: 0 + - uid: 1205 + components: + - type: Transform + pos: 42.360474,-28.504555 + parent: 2 + - uid: 1206 + components: + - type: Transform + pos: 13.79031,-32.37395 + parent: 2 +- proto: BoxTrashbag + entities: + - uid: 1207 + components: + - type: Transform + pos: -44.630238,15.522076 + parent: 2 + - uid: 1208 + components: + - type: Transform + pos: -44.44376,15.447483 + parent: 2 + - uid: 1209 + components: + - type: Transform + pos: -36.880898,30.710796 + parent: 2 + - uid: 16951 + components: + - type: Transform + parent: 1930 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 23903 + components: + - type: Transform + parent: 19985 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: BoxZiptie + entities: + - uid: 1210 + components: + - type: Transform + pos: -35.475304,30.64786 + parent: 2 +- proto: BriefcaseBrown + entities: + - uid: 1211 + components: + - type: Transform + pos: -17.415886,-4.235986 + parent: 2 + - uid: 1212 + components: + - type: Transform + pos: -17.533989,-4.428683 + parent: 2 + - uid: 1213 + components: + - type: Transform + pos: -6.4987755,14.467009 + parent: 2 +- proto: BrigTimer + entities: + - uid: 1214 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,25.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 23442: + - Start: Close + - Timer: AutoClose + - Timer: Open + - uid: 1215 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,25.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 23444: + - Start: Close + - Timer: AutoClose + - Timer: Open + 23445: + - Start: Close + - Timer: AutoClose + - Timer: Open + - uid: 1216 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,25.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 23443: + - Start: Close + - Timer: AutoClose + - Timer: Open +- proto: Bucket + entities: + - uid: 1217 + components: + - type: Transform + pos: 3.243042,-5.123019 + parent: 2 + - uid: 1218 + components: + - type: Transform + pos: 9.842099,11.265297 + parent: 2 + - uid: 1219 + components: + - type: Transform + pos: 12.984678,15.275642 + parent: 2 + - uid: 1220 + components: + - type: Transform + pos: -10.254242,-40.732853 + parent: 2 + - uid: 1221 + components: + - type: Transform + pos: -36.38079,-63.77137 + parent: 2 + - uid: 1222 + components: + - type: Transform + pos: -36.688175,-63.603775 + parent: 2 + - uid: 1223 + components: + - type: Transform + pos: -36.427364,-63.454796 + parent: 2 + - uid: 1224 + components: + - type: Transform + pos: -36.567085,-63.156845 + parent: 2 + - uid: 1225 + components: + - type: Transform + pos: 37.191753,19.169838 + parent: 2 + - uid: 1226 + components: + - type: Transform + pos: 31.548397,15.603403 + parent: 2 + - uid: 1227 + components: + - type: Transform + pos: 17.422337,27.723618 + parent: 2 + - uid: 1228 + components: + - type: Transform + pos: 17.611149,27.597744 + parent: 2 + - uid: 1229 + components: + - type: Transform + pos: -41.266426,30.587137 + parent: 2 + - uid: 1230 + components: + - type: Transform + pos: 34.599365,-27.40573 + parent: 2 + - uid: 18041 + components: + - type: Transform + parent: 1930 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 23905 + components: + - type: Transform + parent: 19985 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: CableApcExtension + entities: + - uid: 1231 + components: + - type: Transform + pos: -20.5,-32.5 + parent: 2 + - uid: 1232 + components: + - type: Transform + pos: -16.5,5.5 + parent: 2 + - uid: 1233 + components: + - type: Transform + pos: 1.5,38.5 + parent: 2 + - uid: 1234 + components: + - type: Transform + pos: 12.5,-10.5 + parent: 2 + - uid: 1235 + components: + - type: Transform + pos: 6.5,-52.5 + parent: 2 + - uid: 1236 + components: + - type: Transform + pos: 43.5,-6.5 + parent: 2 + - uid: 1237 + components: + - type: Transform + pos: 1.5,54.5 + parent: 2 + - uid: 1238 + components: + - type: Transform + pos: 1.5,39.5 + parent: 2 + - uid: 1239 + components: + - type: Transform + pos: 24.5,-24.5 + parent: 2 + - uid: 1240 + components: + - type: Transform + pos: 4.5,-30.5 + parent: 2 + - uid: 1241 + components: + - type: Transform + pos: 22.5,-36.5 + parent: 2 + - uid: 1242 + components: + - type: Transform + pos: 22.5,-35.5 + parent: 2 + - uid: 1243 + components: + - type: Transform + pos: 22.5,-34.5 + parent: 2 + - uid: 1244 + components: + - type: Transform + pos: 21.5,-34.5 + parent: 2 + - uid: 1245 + components: + - type: Transform + pos: 20.5,-34.5 + parent: 2 + - uid: 1246 + components: + - type: Transform + pos: -4.5,-45.5 + parent: 2 + - uid: 1247 + components: + - type: Transform + pos: -4.5,-43.5 + parent: 2 + - uid: 1248 + components: + - type: Transform + pos: 1.5,40.5 + parent: 2 + - uid: 1249 + components: + - type: Transform + pos: 4.5,46.5 + parent: 2 + - uid: 1250 + components: + - type: Transform + pos: 31.5,-23.5 + parent: 2 + - uid: 1251 + components: + - type: Transform + pos: 5.5,-35.5 + parent: 2 + - uid: 1252 + components: + - type: Transform + pos: 13.5,-64.5 + parent: 2 + - uid: 1253 + components: + - type: Transform + pos: 12.5,-64.5 + parent: 2 + - uid: 1254 + components: + - type: Transform + pos: 15.5,42.5 + parent: 2 + - uid: 1255 + components: + - type: Transform + pos: 7.5,24.5 + parent: 2 + - uid: 1256 + components: + - type: Transform + pos: 2.5,50.5 + parent: 2 + - uid: 1257 + components: + - type: Transform + pos: -24.5,6.5 + parent: 2 + - uid: 1258 + components: + - type: Transform + pos: 32.5,-21.5 + parent: 2 + - uid: 1259 + components: + - type: Transform + pos: -29.5,-32.5 + parent: 2 + - uid: 1260 + components: + - type: Transform + pos: 16.5,-35.5 + parent: 2 + - uid: 1261 + components: + - type: Transform + pos: 33.5,-49.5 + parent: 2 + - uid: 1262 + components: + - type: Transform + pos: -0.5,41.5 + parent: 2 + - uid: 1263 + components: + - type: Transform + pos: 31.5,-21.5 + parent: 2 + - uid: 1264 + components: + - type: Transform + pos: 31.5,-22.5 + parent: 2 + - uid: 1265 + components: + - type: Transform + pos: 3.5,50.5 + parent: 2 + - uid: 1266 + components: + - type: Transform + pos: -5.5,-50.5 + parent: 2 + - uid: 1267 + components: + - type: Transform + pos: 27.5,-33.5 + parent: 2 + - uid: 1268 + components: + - type: Transform + pos: -24.5,5.5 + parent: 2 + - uid: 1269 + components: + - type: Transform + pos: 35.5,-30.5 + parent: 2 + - uid: 1270 + components: + - type: Transform + pos: -2.5,-51.5 + parent: 2 + - uid: 1271 + components: + - type: Transform + pos: 33.5,-44.5 + parent: 2 + - uid: 1272 + components: + - type: Transform + pos: -11.5,-51.5 + parent: 2 + - uid: 1273 + components: + - type: Transform + pos: -6.5,-52.5 + parent: 2 + - uid: 1274 + components: + - type: Transform + pos: 32.5,-44.5 + parent: 2 + - uid: 1275 + components: + - type: Transform + pos: 32.5,-45.5 + parent: 2 + - uid: 1276 + components: + - type: Transform + pos: 35.5,-31.5 + parent: 2 + - uid: 1277 + components: + - type: Transform + pos: 32.5,-46.5 + parent: 2 + - uid: 1278 + components: + - type: Transform + pos: 33.5,-46.5 + parent: 2 + - uid: 1279 + components: + - type: Transform + pos: 36.5,-31.5 + parent: 2 + - uid: 1280 + components: + - type: Transform + pos: -0.5,-29.5 + parent: 2 + - uid: 1281 + components: + - type: Transform + pos: 0.5,-28.5 + parent: 2 + - uid: 1282 + components: + - type: Transform + pos: -5.5,-49.5 + parent: 2 + - uid: 1283 + components: + - type: Transform + pos: 26.5,-37.5 + parent: 2 + - uid: 1284 + components: + - type: Transform + pos: 26.5,-33.5 + parent: 2 + - uid: 1285 + components: + - type: Transform + pos: 25.5,-33.5 + parent: 2 + - uid: 1286 + components: + - type: Transform + pos: 6.5,-35.5 + parent: 2 + - uid: 1287 + components: + - type: Transform + pos: 33.5,-37.5 + parent: 2 + - uid: 1288 + components: + - type: Transform + pos: 32.5,-37.5 + parent: 2 + - uid: 1289 + components: + - type: Transform + pos: 31.5,-37.5 + parent: 2 + - uid: 1290 + components: + - type: Transform + pos: -20.5,-44.5 + parent: 2 + - uid: 1291 + components: + - type: Transform + pos: 24.5,-49.5 + parent: 2 + - uid: 1292 + components: + - type: Transform + pos: 30.5,-49.5 + parent: 2 + - uid: 1293 + components: + - type: Transform + pos: 30.5,-50.5 + parent: 2 + - uid: 1294 + components: + - type: Transform + pos: 34.5,-37.5 + parent: 2 + - uid: 1295 + components: + - type: Transform + pos: 29.5,-37.5 + parent: 2 + - uid: 1296 + components: + - type: Transform + pos: 12.5,-36.5 + parent: 2 + - uid: 1297 + components: + - type: Transform + pos: 14.5,-34.5 + parent: 2 + - uid: 1298 + components: + - type: Transform + pos: 18.5,-34.5 + parent: 2 + - uid: 1299 + components: + - type: Transform + pos: 28.5,-37.5 + parent: 2 + - uid: 1300 + components: + - type: Transform + pos: 7.5,-35.5 + parent: 2 + - uid: 1301 + components: + - type: Transform + pos: 35.5,-29.5 + parent: 2 + - uid: 1302 + components: + - type: Transform + pos: 24.5,-50.5 + parent: 2 + - uid: 1303 + components: + - type: Transform + pos: 8.5,-35.5 + parent: 2 + - uid: 1304 + components: + - type: Transform + pos: 12.5,-35.5 + parent: 2 + - uid: 1305 + components: + - type: Transform + pos: 13.5,-34.5 + parent: 2 + - uid: 1306 + components: + - type: Transform + pos: 19.5,-34.5 + parent: 2 + - uid: 1307 + components: + - type: Transform + pos: 24.5,-68.5 + parent: 2 + - uid: 1308 + components: + - type: Transform + pos: 22.5,-66.5 + parent: 2 + - uid: 1309 + components: + - type: Transform + pos: 22.5,-67.5 + parent: 2 + - uid: 1310 + components: + - type: Transform + pos: 22.5,-68.5 + parent: 2 + - uid: 1311 + components: + - type: Transform + pos: 23.5,-68.5 + parent: 2 + - uid: 1312 + components: + - type: Transform + pos: 22.5,-65.5 + parent: 2 + - uid: 1313 + components: + - type: Transform + pos: 23.5,-62.5 + parent: 2 + - uid: 1314 + components: + - type: Transform + pos: 40.5,-57.5 + parent: 2 + - uid: 1315 + components: + - type: Transform + pos: 40.5,-56.5 + parent: 2 + - uid: 1316 + components: + - type: Transform + pos: 40.5,-55.5 + parent: 2 + - uid: 1317 + components: + - type: Transform + pos: 40.5,-54.5 + parent: 2 + - uid: 1318 + components: + - type: Transform + pos: 40.5,-53.5 + parent: 2 + - uid: 1319 + components: + - type: Transform + pos: 40.5,-52.5 + parent: 2 + - uid: 1320 + components: + - type: Transform + pos: 40.5,-51.5 + parent: 2 + - uid: 1321 + components: + - type: Transform + pos: 31.5,-60.5 + parent: 2 + - uid: 1322 + components: + - type: Transform + pos: 40.5,-50.5 + parent: 2 + - uid: 1323 + components: + - type: Transform + pos: 40.5,-49.5 + parent: 2 + - uid: 1324 + components: + - type: Transform + pos: 40.5,-48.5 + parent: 2 + - uid: 1325 + components: + - type: Transform + pos: 41.5,-48.5 + parent: 2 + - uid: 1326 + components: + - type: Transform + pos: 42.5,-48.5 + parent: 2 + - uid: 1327 + components: + - type: Transform + pos: 42.5,-47.5 + parent: 2 + - uid: 1328 + components: + - type: Transform + pos: 42.5,-46.5 + parent: 2 + - uid: 1329 + components: + - type: Transform + pos: 40.5,-46.5 + parent: 2 + - uid: 1330 + components: + - type: Transform + pos: 41.5,-46.5 + parent: 2 + - uid: 1331 + components: + - type: Transform + pos: 22.5,-63.5 + parent: 2 + - uid: 1332 + components: + - type: Transform + pos: 26.5,-72.5 + parent: 2 + - uid: 1333 + components: + - type: Transform + pos: 25.5,-66.5 + parent: 2 + - uid: 1334 + components: + - type: Transform + pos: 22.5,-62.5 + parent: 2 + - uid: 1335 + components: + - type: Transform + pos: 22.5,-64.5 + parent: 2 + - uid: 1336 + components: + - type: Transform + pos: 7.5,34.5 + parent: 2 + - uid: 1337 + components: + - type: Transform + pos: 14.5,-64.5 + parent: 2 + - uid: 1338 + components: + - type: Transform + pos: 24.5,-37.5 + parent: 2 + - uid: 1339 + components: + - type: Transform + pos: 22.5,-37.5 + parent: 2 + - uid: 1340 + components: + - type: Transform + pos: 23.5,-37.5 + parent: 2 + - uid: 1341 + components: + - type: Transform + pos: 25.5,-37.5 + parent: 2 + - uid: 1342 + components: + - type: Transform + pos: 30.5,-40.5 + parent: 2 + - uid: 1343 + components: + - type: Transform + pos: 27.5,-36.5 + parent: 2 + - uid: 1344 + components: + - type: Transform + pos: 27.5,-37.5 + parent: 2 + - uid: 1345 + components: + - type: Transform + pos: -1.5,-51.5 + parent: 2 + - uid: 1346 + components: + - type: Transform + pos: -5.5,-52.5 + parent: 2 + - uid: 1347 + components: + - type: Transform + pos: -10.5,-51.5 + parent: 2 + - uid: 1348 + components: + - type: Transform + pos: -13.5,-51.5 + parent: 2 + - uid: 1349 + components: + - type: Transform + pos: 5.5,-52.5 + parent: 2 + - uid: 1350 + components: + - type: Transform + pos: -5.5,-51.5 + parent: 2 + - uid: 1351 + components: + - type: Transform + pos: 27.5,-35.5 + parent: 2 + - uid: 1352 + components: + - type: Transform + pos: 27.5,-34.5 + parent: 2 + - uid: 1353 + components: + - type: Transform + pos: 24.5,-51.5 + parent: 2 + - uid: 1354 + components: + - type: Transform + pos: -34.5,-37.5 + parent: 2 + - uid: 1355 + components: + - type: Transform + pos: 36.5,-24.5 + parent: 2 + - uid: 1356 + components: + - type: Transform + pos: 25.5,-24.5 + parent: 2 + - uid: 1357 + components: + - type: Transform + pos: 23.5,-24.5 + parent: 2 + - uid: 1358 + components: + - type: Transform + pos: 3.5,-30.5 + parent: 2 + - uid: 1359 + components: + - type: Transform + pos: 16.5,-17.5 + parent: 2 + - uid: 1360 + components: + - type: Transform + pos: 16.5,-16.5 + parent: 2 + - uid: 1361 + components: + - type: Transform + pos: 16.5,-15.5 + parent: 2 + - uid: 1362 + components: + - type: Transform + pos: 15.5,-15.5 + parent: 2 + - uid: 1363 + components: + - type: Transform + pos: 14.5,-15.5 + parent: 2 + - uid: 1364 + components: + - type: Transform + pos: 13.5,-15.5 + parent: 2 + - uid: 1365 + components: + - type: Transform + pos: 13.5,-15.5 + parent: 2 + - uid: 1366 + components: + - type: Transform + pos: 17.5,-15.5 + parent: 2 + - uid: 1367 + components: + - type: Transform + pos: 18.5,-15.5 + parent: 2 + - uid: 1368 + components: + - type: Transform + pos: 19.5,-15.5 + parent: 2 + - uid: 1369 + components: + - type: Transform + pos: 19.5,-14.5 + parent: 2 + - uid: 1370 + components: + - type: Transform + pos: 16.5,-14.5 + parent: 2 + - uid: 1371 + components: + - type: Transform + pos: 13.5,-14.5 + parent: 2 + - uid: 1372 + components: + - type: Transform + pos: 13.5,-13.5 + parent: 2 + - uid: 1373 + components: + - type: Transform + pos: 13.5,-12.5 + parent: 2 + - uid: 1374 + components: + - type: Transform + pos: 13.5,-11.5 + parent: 2 + - uid: 1375 + components: + - type: Transform + pos: 13.5,-10.5 + parent: 2 + - uid: 1376 + components: + - type: Transform + pos: 13.5,-9.5 + parent: 2 + - uid: 1377 + components: + - type: Transform + pos: 14.5,-9.5 + parent: 2 + - uid: 1378 + components: + - type: Transform + pos: 15.5,-9.5 + parent: 2 + - uid: 1379 + components: + - type: Transform + pos: 16.5,-9.5 + parent: 2 + - uid: 1380 + components: + - type: Transform + pos: 17.5,-9.5 + parent: 2 + - uid: 1381 + components: + - type: Transform + pos: 18.5,-9.5 + parent: 2 + - uid: 1382 + components: + - type: Transform + pos: 19.5,-9.5 + parent: 2 + - uid: 1383 + components: + - type: Transform + pos: 16.5,-10.5 + parent: 2 + - uid: 1384 + components: + - type: Transform + pos: 16.5,-21.5 + parent: 2 + - uid: 1385 + components: + - type: Transform + pos: 16.5,-22.5 + parent: 2 + - uid: 1386 + components: + - type: Transform + pos: 16.5,-23.5 + parent: 2 + - uid: 1387 + components: + - type: Transform + pos: 17.5,-23.5 + parent: 2 + - uid: 1388 + components: + - type: Transform + pos: 18.5,-23.5 + parent: 2 + - uid: 1389 + components: + - type: Transform + pos: 18.5,-22.5 + parent: 2 + - uid: 1390 + components: + - type: Transform + pos: 18.5,-21.5 + parent: 2 + - uid: 1391 + components: + - type: Transform + pos: 18.5,-20.5 + parent: 2 + - uid: 1392 + components: + - type: Transform + pos: 18.5,-19.5 + parent: 2 + - uid: 1393 + components: + - type: Transform + pos: 17.5,-19.5 + parent: 2 + - uid: 1394 + components: + - type: Transform + pos: 19.5,-19.5 + parent: 2 + - uid: 1395 + components: + - type: Transform + pos: 15.5,-23.5 + parent: 2 + - uid: 1396 + components: + - type: Transform + pos: 15.5,-24.5 + parent: 2 + - uid: 1397 + components: + - type: Transform + pos: 15.5,-25.5 + parent: 2 + - uid: 1398 + components: + - type: Transform + pos: 15.5,-26.5 + parent: 2 + - uid: 1399 + components: + - type: Transform + pos: 15.5,-27.5 + parent: 2 + - uid: 1400 + components: + - type: Transform + pos: 19.5,-23.5 + parent: 2 + - uid: 1401 + components: + - type: Transform + pos: 19.5,-24.5 + parent: 2 + - uid: 1402 + components: + - type: Transform + pos: 19.5,-25.5 + parent: 2 + - uid: 1403 + components: + - type: Transform + pos: 19.5,-26.5 + parent: 2 + - uid: 1404 + components: + - type: Transform + pos: 19.5,-27.5 + parent: 2 + - uid: 1405 + components: + - type: Transform + pos: 18.5,-27.5 + parent: 2 + - uid: 1406 + components: + - type: Transform + pos: 18.5,-28.5 + parent: 2 + - uid: 1407 + components: + - type: Transform + pos: 18.5,-29.5 + parent: 2 + - uid: 1408 + components: + - type: Transform + pos: 18.5,-31.5 + parent: 2 + - uid: 1409 + components: + - type: Transform + pos: 17.5,-31.5 + parent: 2 + - uid: 1410 + components: + - type: Transform + pos: 19.5,-31.5 + parent: 2 + - uid: 1411 + components: + - type: Transform + pos: 20.5,-31.5 + parent: 2 + - uid: 1412 + components: + - type: Transform + pos: 21.5,-31.5 + parent: 2 + - uid: 1413 + components: + - type: Transform + pos: 22.5,-31.5 + parent: 2 + - uid: 1414 + components: + - type: Transform + pos: 20.5,-27.5 + parent: 2 + - uid: 1415 + components: + - type: Transform + pos: 21.5,-27.5 + parent: 2 + - uid: 1416 + components: + - type: Transform + pos: 22.5,-27.5 + parent: 2 + - uid: 1417 + components: + - type: Transform + pos: 14.5,-27.5 + parent: 2 + - uid: 1418 + components: + - type: Transform + pos: 13.5,-27.5 + parent: 2 + - uid: 1419 + components: + - type: Transform + pos: 13.5,-28.5 + parent: 2 + - uid: 1420 + components: + - type: Transform + pos: 13.5,-29.5 + parent: 2 + - uid: 1421 + components: + - type: Transform + pos: 13.5,-30.5 + parent: 2 + - uid: 1422 + components: + - type: Transform + pos: 13.5,-31.5 + parent: 2 + - uid: 1423 + components: + - type: Transform + pos: 13.5,-26.5 + parent: 2 + - uid: 1424 + components: + - type: Transform + pos: 12.5,-24.5 + parent: 2 + - uid: 1425 + components: + - type: Transform + pos: 13.5,-22.5 + parent: 2 + - uid: 1426 + components: + - type: Transform + pos: 4.5,-31.5 + parent: 2 + - uid: 1427 + components: + - type: Transform + pos: 11.5,-31.5 + parent: 2 + - uid: 1428 + components: + - type: Transform + pos: 10.5,-31.5 + parent: 2 + - uid: 1429 + components: + - type: Transform + pos: 9.5,-31.5 + parent: 2 + - uid: 1430 + components: + - type: Transform + pos: 8.5,-31.5 + parent: 2 + - uid: 1431 + components: + - type: Transform + pos: 7.5,-31.5 + parent: 2 + - uid: 1432 + components: + - type: Transform + pos: 6.5,-31.5 + parent: 2 + - uid: 1433 + components: + - type: Transform + pos: 5.5,-31.5 + parent: 2 + - uid: 1434 + components: + - type: Transform + pos: 6.5,-30.5 + parent: 2 + - uid: 1435 + components: + - type: Transform + pos: 9.5,-30.5 + parent: 2 + - uid: 1436 + components: + - type: Transform + pos: 24.5,-21.5 + parent: 2 + - uid: 1437 + components: + - type: Transform + pos: 24.5,-20.5 + parent: 2 + - uid: 1438 + components: + - type: Transform + pos: 24.5,-19.5 + parent: 2 + - uid: 1439 + components: + - type: Transform + pos: 24.5,-18.5 + parent: 2 + - uid: 1440 + components: + - type: Transform + pos: 23.5,-19.5 + parent: 2 + - uid: 1441 + components: + - type: Transform + pos: 25.5,-19.5 + parent: 2 + - uid: 1442 + components: + - type: Transform + pos: 24.5,-17.5 + parent: 2 + - uid: 1443 + components: + - type: Transform + pos: 25.5,-33.5 + parent: 2 + - uid: 1444 + components: + - type: Transform + pos: 25.5,-32.5 + parent: 2 + - uid: 1445 + components: + - type: Transform + pos: 25.5,-31.5 + parent: 2 + - uid: 1446 + components: + - type: Transform + pos: 25.5,-30.5 + parent: 2 + - uid: 1447 + components: + - type: Transform + pos: 26.5,-31.5 + parent: 2 + - uid: 1448 + components: + - type: Transform + pos: 27.5,-31.5 + parent: 2 + - uid: 1449 + components: + - type: Transform + pos: 25.5,-29.5 + parent: 2 + - uid: 1450 + components: + - type: Transform + pos: 25.5,-28.5 + parent: 2 + - uid: 1451 + components: + - type: Transform + pos: 26.5,-28.5 + parent: 2 + - uid: 1452 + components: + - type: Transform + pos: 27.5,-28.5 + parent: 2 + - uid: 1453 + components: + - type: Transform + pos: 27.5,-30.5 + parent: 2 + - uid: 1454 + components: + - type: Transform + pos: 28.5,-30.5 + parent: 2 + - uid: 1455 + components: + - type: Transform + pos: 29.5,-30.5 + parent: 2 + - uid: 1456 + components: + - type: Transform + pos: 30.5,-30.5 + parent: 2 + - uid: 1457 + components: + - type: Transform + pos: 31.5,-30.5 + parent: 2 + - uid: 1458 + components: + - type: Transform + pos: 31.5,-29.5 + parent: 2 + - uid: 1459 + components: + - type: Transform + pos: 31.5,-28.5 + parent: 2 + - uid: 1460 + components: + - type: Transform + pos: 35.5,-15.5 + parent: 2 + - uid: 1461 + components: + - type: Transform + pos: 34.5,-15.5 + parent: 2 + - uid: 1462 + components: + - type: Transform + pos: 33.5,-15.5 + parent: 2 + - uid: 1463 + components: + - type: Transform + pos: 32.5,-15.5 + parent: 2 + - uid: 1464 + components: + - type: Transform + pos: 31.5,-15.5 + parent: 2 + - uid: 1465 + components: + - type: Transform + pos: 30.5,-15.5 + parent: 2 + - uid: 1466 + components: + - type: Transform + pos: 29.5,-15.5 + parent: 2 + - uid: 1467 + components: + - type: Transform + pos: 29.5,-16.5 + parent: 2 + - uid: 1468 + components: + - type: Transform + pos: 29.5,-17.5 + parent: 2 + - uid: 1469 + components: + - type: Transform + pos: 29.5,-18.5 + parent: 2 + - uid: 1470 + components: + - type: Transform + pos: 29.5,-19.5 + parent: 2 + - uid: 1471 + components: + - type: Transform + pos: 29.5,-20.5 + parent: 2 + - uid: 1472 + components: + - type: Transform + pos: 33.5,-16.5 + parent: 2 + - uid: 1473 + components: + - type: Transform + pos: 33.5,-17.5 + parent: 2 + - uid: 1474 + components: + - type: Transform + pos: 33.5,-18.5 + parent: 2 + - uid: 1475 + components: + - type: Transform + pos: 33.5,-19.5 + parent: 2 + - uid: 1476 + components: + - type: Transform + pos: 33.5,-20.5 + parent: 2 + - uid: 1477 + components: + - type: Transform + pos: 33.5,-21.5 + parent: 2 + - uid: 1478 + components: + - type: Transform + pos: 29.5,-21.5 + parent: 2 + - uid: 1479 + components: + - type: Transform + pos: 27.5,-27.5 + parent: 2 + - uid: 1480 + components: + - type: Transform + pos: 27.5,-26.5 + parent: 2 + - uid: 1481 + components: + - type: Transform + pos: 26.5,-24.5 + parent: 2 + - uid: 1482 + components: + - type: Transform + pos: 27.5,-24.5 + parent: 2 + - uid: 1483 + components: + - type: Transform + pos: 28.5,-24.5 + parent: 2 + - uid: 1484 + components: + - type: Transform + pos: 29.5,-24.5 + parent: 2 + - uid: 1485 + components: + - type: Transform + pos: 30.5,-24.5 + parent: 2 + - uid: 1486 + components: + - type: Transform + pos: 31.5,-24.5 + parent: 2 + - uid: 1487 + components: + - type: Transform + pos: 32.5,-24.5 + parent: 2 + - uid: 1488 + components: + - type: Transform + pos: 33.5,-24.5 + parent: 2 + - uid: 1489 + components: + - type: Transform + pos: 34.5,-24.5 + parent: 2 + - uid: 1490 + components: + - type: Transform + pos: 35.5,-24.5 + parent: 2 + - uid: 1491 + components: + - type: Transform + pos: 41.5,-35.5 + parent: 2 + - uid: 1492 + components: + - type: Transform + pos: 41.5,-34.5 + parent: 2 + - uid: 1493 + components: + - type: Transform + pos: 41.5,-33.5 + parent: 2 + - uid: 1494 + components: + - type: Transform + pos: 40.5,-31.5 + parent: 2 + - uid: 1495 + components: + - type: Transform + pos: 40.5,-30.5 + parent: 2 + - uid: 1496 + components: + - type: Transform + pos: 40.5,-29.5 + parent: 2 + - uid: 1497 + components: + - type: Transform + pos: 40.5,-28.5 + parent: 2 + - uid: 1498 + components: + - type: Transform + pos: 40.5,-27.5 + parent: 2 + - uid: 1499 + components: + - type: Transform + pos: 41.5,-31.5 + parent: 2 + - uid: 1500 + components: + - type: Transform + pos: 42.5,-31.5 + parent: 2 + - uid: 1501 + components: + - type: Transform + pos: 43.5,-31.5 + parent: 2 + - uid: 1502 + components: + - type: Transform + pos: 44.5,-31.5 + parent: 2 + - uid: 1503 + components: + - type: Transform + pos: 45.5,-31.5 + parent: 2 + - uid: 1504 + components: + - type: Transform + pos: 45.5,-32.5 + parent: 2 + - uid: 1505 + components: + - type: Transform + pos: 45.5,-33.5 + parent: 2 + - uid: 1506 + components: + - type: Transform + pos: 45.5,-30.5 + parent: 2 + - uid: 1507 + components: + - type: Transform + pos: 45.5,-29.5 + parent: 2 + - uid: 1508 + components: + - type: Transform + pos: 45.5,-28.5 + parent: 2 + - uid: 1509 + components: + - type: Transform + pos: 45.5,-19.5 + parent: 2 + - uid: 1510 + components: + - type: Transform + pos: 45.5,-21.5 + parent: 2 + - uid: 1511 + components: + - type: Transform + pos: 44.5,-21.5 + parent: 2 + - uid: 1512 + components: + - type: Transform + pos: 44.5,-22.5 + parent: 2 + - uid: 1513 + components: + - type: Transform + pos: 44.5,-23.5 + parent: 2 + - uid: 1514 + components: + - type: Transform + pos: 44.5,-24.5 + parent: 2 + - uid: 1515 + components: + - type: Transform + pos: 43.5,-24.5 + parent: 2 + - uid: 1516 + components: + - type: Transform + pos: 42.5,-24.5 + parent: 2 + - uid: 1517 + components: + - type: Transform + pos: 41.5,-24.5 + parent: 2 + - uid: 1518 + components: + - type: Transform + pos: 40.5,-24.5 + parent: 2 + - uid: 1519 + components: + - type: Transform + pos: 39.5,-24.5 + parent: 2 + - uid: 1520 + components: + - type: Transform + pos: 38.5,-24.5 + parent: 2 + - uid: 1521 + components: + - type: Transform + pos: 37.5,-24.5 + parent: 2 + - uid: 1522 + components: + - type: Transform + pos: 37.5,-23.5 + parent: 2 + - uid: 1523 + components: + - type: Transform + pos: 37.5,-22.5 + parent: 2 + - uid: 1524 + components: + - type: Transform + pos: 37.5,-21.5 + parent: 2 + - uid: 1525 + components: + - type: Transform + pos: 37.5,-20.5 + parent: 2 + - uid: 1526 + components: + - type: Transform + pos: 37.5,-19.5 + parent: 2 + - uid: 1527 + components: + - type: Transform + pos: 37.5,-18.5 + parent: 2 + - uid: 1528 + components: + - type: Transform + pos: 37.5,-17.5 + parent: 2 + - uid: 1529 + components: + - type: Transform + pos: 37.5,-16.5 + parent: 2 + - uid: 1530 + components: + - type: Transform + pos: 37.5,-15.5 + parent: 2 + - uid: 1531 + components: + - type: Transform + pos: 40.5,-23.5 + parent: 2 + - uid: 1532 + components: + - type: Transform + pos: 40.5,-22.5 + parent: 2 + - uid: 1533 + components: + - type: Transform + pos: 40.5,-21.5 + parent: 2 + - uid: 1534 + components: + - type: Transform + pos: 38.5,-16.5 + parent: 2 + - uid: 1535 + components: + - type: Transform + pos: 39.5,-16.5 + parent: 2 + - uid: 1536 + components: + - type: Transform + pos: 40.5,-16.5 + parent: 2 + - uid: 1537 + components: + - type: Transform + pos: 40.5,-17.5 + parent: 2 + - uid: 1538 + components: + - type: Transform + pos: 40.5,-15.5 + parent: 2 + - uid: 1539 + components: + - type: Transform + pos: 9.5,-17.5 + parent: 2 + - uid: 1540 + components: + - type: Transform + pos: 9.5,-18.5 + parent: 2 + - uid: 1541 + components: + - type: Transform + pos: 9.5,-19.5 + parent: 2 + - uid: 1542 + components: + - type: Transform + pos: 8.5,-19.5 + parent: 2 + - uid: 1543 + components: + - type: Transform + pos: 7.5,-19.5 + parent: 2 + - uid: 1544 + components: + - type: Transform + pos: 6.5,-19.5 + parent: 2 + - uid: 1545 + components: + - type: Transform + pos: 5.5,-19.5 + parent: 2 + - uid: 1546 + components: + - type: Transform + pos: 5.5,-20.5 + parent: 2 + - uid: 1547 + components: + - type: Transform + pos: 5.5,-21.5 + parent: 2 + - uid: 1548 + components: + - type: Transform + pos: 5.5,-22.5 + parent: 2 + - uid: 1549 + components: + - type: Transform + pos: 5.5,-23.5 + parent: 2 + - uid: 1550 + components: + - type: Transform + pos: 5.5,-24.5 + parent: 2 + - uid: 1551 + components: + - type: Transform + pos: 6.5,-24.5 + parent: 2 + - uid: 1552 + components: + - type: Transform + pos: 7.5,-24.5 + parent: 2 + - uid: 1553 + components: + - type: Transform + pos: 8.5,-24.5 + parent: 2 + - uid: 1554 + components: + - type: Transform + pos: 9.5,-24.5 + parent: 2 + - uid: 1555 + components: + - type: Transform + pos: 7.5,-25.5 + parent: 2 + - uid: 1556 + components: + - type: Transform + pos: 7.5,-26.5 + parent: 2 + - uid: 1557 + components: + - type: Transform + pos: 7.5,-23.5 + parent: 2 + - uid: 1558 + components: + - type: Transform + pos: 7.5,-22.5 + parent: 2 + - uid: 1559 + components: + - type: Transform + pos: 4.5,-24.5 + parent: 2 + - uid: 1560 + components: + - type: Transform + pos: 4.5,-25.5 + parent: 2 + - uid: 1561 + components: + - type: Transform + pos: 10.5,-24.5 + parent: 2 + - uid: 1562 + components: + - type: Transform + pos: 10.5,-24.5 + parent: 2 + - uid: 1563 + components: + - type: Transform + pos: 10.5,-25.5 + parent: 2 + - uid: 1564 + components: + - type: Transform + pos: 10.5,-23.5 + parent: 2 + - uid: 1565 + components: + - type: Transform + pos: 10.5,-18.5 + parent: 2 + - uid: 1566 + components: + - type: Transform + pos: 11.5,-18.5 + parent: 2 + - uid: 1567 + components: + - type: Transform + pos: 12.5,-18.5 + parent: 2 + - uid: 1568 + components: + - type: Transform + pos: 13.5,-18.5 + parent: 2 + - uid: 1569 + components: + - type: Transform + pos: 13.5,-19.5 + parent: 2 + - uid: 1570 + components: + - type: Transform + pos: 13.5,-20.5 + parent: 2 + - uid: 1571 + components: + - type: Transform + pos: 13.5,-21.5 + parent: 2 + - uid: 1572 + components: + - type: Transform + pos: 22.5,-26.5 + parent: 2 + - uid: 1573 + components: + - type: Transform + pos: 22.5,-25.5 + parent: 2 + - uid: 1574 + components: + - type: Transform + pos: 22.5,-24.5 + parent: 2 + - uid: 1575 + components: + - type: Transform + pos: 22.5,-23.5 + parent: 2 + - uid: 1576 + components: + - type: Transform + pos: 16.5,-26.5 + parent: 2 + - uid: 1577 + components: + - type: Transform + pos: 13.5,-23.5 + parent: 2 + - uid: 1578 + components: + - type: Transform + pos: 13.5,-16.5 + parent: 2 + - uid: 1579 + components: + - type: Transform + pos: 13.5,-24.5 + parent: 2 + - uid: 1580 + components: + - type: Transform + pos: 11.5,-24.5 + parent: 2 + - uid: 1581 + components: + - type: Transform + pos: 18.5,-10.5 + parent: 2 + - uid: 1582 + components: + - type: Transform + pos: 18.5,-11.5 + parent: 2 + - uid: 1583 + components: + - type: Transform + pos: 7.5,-30.5 + parent: 2 + - uid: 1584 + components: + - type: Transform + pos: 7.5,-29.5 + parent: 2 + - uid: 1585 + components: + - type: Transform + pos: 7.5,-32.5 + parent: 2 + - uid: 1586 + components: + - type: Transform + pos: -25.5,8.5 + parent: 2 + - uid: 1587 + components: + - type: Transform + pos: -25.5,7.5 + parent: 2 + - uid: 1588 + components: + - type: Transform + pos: -24.5,7.5 + parent: 2 + - uid: 1589 + components: + - type: Transform + pos: -24.5,4.5 + parent: 2 + - uid: 1590 + components: + - type: Transform + pos: -25.5,7.5 + parent: 2 + - uid: 1591 + components: + - type: Transform + pos: -26.5,7.5 + parent: 2 + - uid: 1592 + components: + - type: Transform + pos: -27.5,7.5 + parent: 2 + - uid: 1593 + components: + - type: Transform + pos: -28.5,7.5 + parent: 2 + - uid: 1594 + components: + - type: Transform + pos: -29.5,7.5 + parent: 2 + - uid: 1595 + components: + - type: Transform + pos: -29.5,6.5 + parent: 2 + - uid: 1596 + components: + - type: Transform + pos: -29.5,5.5 + parent: 2 + - uid: 1597 + components: + - type: Transform + pos: -29.5,4.5 + parent: 2 + - uid: 1598 + components: + - type: Transform + pos: -30.5,7.5 + parent: 2 + - uid: 1599 + components: + - type: Transform + pos: -30.5,8.5 + parent: 2 + - uid: 1600 + components: + - type: Transform + pos: -24.5,10.5 + parent: 2 + - uid: 1601 + components: + - type: Transform + pos: -25.5,10.5 + parent: 2 + - uid: 1602 + components: + - type: Transform + pos: -26.5,10.5 + parent: 2 + - uid: 1603 + components: + - type: Transform + pos: -27.5,10.5 + parent: 2 + - uid: 1604 + components: + - type: Transform + pos: -28.5,10.5 + parent: 2 + - uid: 1605 + components: + - type: Transform + pos: -28.5,11.5 + parent: 2 + - uid: 1606 + components: + - type: Transform + pos: -28.5,12.5 + parent: 2 + - uid: 1607 + components: + - type: Transform + pos: -29.5,10.5 + parent: 2 + - uid: 1608 + components: + - type: Transform + pos: -30.5,10.5 + parent: 2 + - uid: 1609 + components: + - type: Transform + pos: -28.5,13.5 + parent: 2 + - uid: 1610 + components: + - type: Transform + pos: -26.5,11.5 + parent: 2 + - uid: 1611 + components: + - type: Transform + pos: -26.5,12.5 + parent: 2 + - uid: 1612 + components: + - type: Transform + pos: -26.5,13.5 + parent: 2 + - uid: 1613 + components: + - type: Transform + pos: -30.5,11.5 + parent: 2 + - uid: 1614 + components: + - type: Transform + pos: -30.5,12.5 + parent: 2 + - uid: 1615 + components: + - type: Transform + pos: -40.5,7.5 + parent: 2 + - uid: 1616 + components: + - type: Transform + pos: -41.5,-0.5 + parent: 2 + - uid: 1617 + components: + - type: Transform + pos: -40.5,5.5 + parent: 2 + - uid: 1618 + components: + - type: Transform + pos: -40.5,6.5 + parent: 2 + - uid: 1619 + components: + - type: Transform + pos: -40.5,8.5 + parent: 2 + - uid: 1620 + components: + - type: Transform + pos: -40.5,9.5 + parent: 2 + - uid: 1621 + components: + - type: Transform + pos: -40.5,10.5 + parent: 2 + - uid: 1622 + components: + - type: Transform + pos: -40.5,11.5 + parent: 2 + - uid: 1623 + components: + - type: Transform + pos: -42.5,9.5 + parent: 2 + - uid: 1624 + components: + - type: Transform + pos: -41.5,9.5 + parent: 2 + - uid: 1625 + components: + - type: Transform + pos: -40.5,9.5 + parent: 2 + - uid: 1626 + components: + - type: Transform + pos: -39.5,9.5 + parent: 2 + - uid: 1627 + components: + - type: Transform + pos: -38.5,9.5 + parent: 2 + - uid: 1628 + components: + - type: Transform + pos: -37.5,9.5 + parent: 2 + - uid: 1629 + components: + - type: Transform + pos: -39.5,6.5 + parent: 2 + - uid: 1630 + components: + - type: Transform + pos: -38.5,6.5 + parent: 2 + - uid: 1631 + components: + - type: Transform + pos: -37.5,3.5 + parent: 2 + - uid: 1632 + components: + - type: Transform + pos: -38.5,5.5 + parent: 2 + - uid: 1633 + components: + - type: Transform + pos: -38.5,4.5 + parent: 2 + - uid: 1634 + components: + - type: Transform + pos: -38.5,3.5 + parent: 2 + - uid: 1635 + components: + - type: Transform + pos: -38.5,2.5 + parent: 2 + - uid: 1636 + components: + - type: Transform + pos: -38.5,1.5 + parent: 2 + - uid: 1637 + components: + - type: Transform + pos: -38.5,0.5 + parent: 2 + - uid: 1638 + components: + - type: Transform + pos: -38.5,-0.5 + parent: 2 + - uid: 1639 + components: + - type: Transform + pos: -38.5,-1.5 + parent: 2 + - uid: 1640 + components: + - type: Transform + pos: -38.5,-2.5 + parent: 2 + - uid: 1641 + components: + - type: Transform + pos: -38.5,-3.5 + parent: 2 + - uid: 1642 + components: + - type: Transform + pos: -38.5,-4.5 + parent: 2 + - uid: 1643 + components: + - type: Transform + pos: -38.5,-5.5 + parent: 2 + - uid: 1644 + components: + - type: Transform + pos: -40.5,-0.5 + parent: 2 + - uid: 1645 + components: + - type: Transform + pos: -39.5,-0.5 + parent: 2 + - uid: 1646 + components: + - type: Transform + pos: -38.5,-0.5 + parent: 2 + - uid: 1647 + components: + - type: Transform + pos: -37.5,-0.5 + parent: 2 + - uid: 1648 + components: + - type: Transform + pos: -41.5,-3.5 + parent: 2 + - uid: 1649 + components: + - type: Transform + pos: -41.5,-2.5 + parent: 2 + - uid: 1650 + components: + - type: Transform + pos: -41.5,-1.5 + parent: 2 + - uid: 1651 + components: + - type: Transform + pos: -41.5,-0.5 + parent: 2 + - uid: 1652 + components: + - type: Transform + pos: -41.5,0.5 + parent: 2 + - uid: 1653 + components: + - type: Transform + pos: -41.5,1.5 + parent: 2 + - uid: 1654 + components: + - type: Transform + pos: -41.5,2.5 + parent: 2 + - uid: 1655 + components: + - type: Transform + pos: -43.5,9.5 + parent: 2 + - uid: 1656 + components: + - type: Transform + pos: -43.5,9.5 + parent: 2 + - uid: 1657 + components: + - type: Transform + pos: -43.5,10.5 + parent: 2 + - uid: 1658 + components: + - type: Transform + pos: -43.5,11.5 + parent: 2 + - uid: 1659 + components: + - type: Transform + pos: -37.5,10.5 + parent: 2 + - uid: 1660 + components: + - type: Transform + pos: -37.5,11.5 + parent: 2 + - uid: 1661 + components: + - type: Transform + pos: -42.5,9.5 + parent: 2 + - uid: 1662 + components: + - type: Transform + pos: -42.5,8.5 + parent: 2 + - uid: 1663 + components: + - type: Transform + pos: -42.5,7.5 + parent: 2 + - uid: 1664 + components: + - type: Transform + pos: -42.5,6.5 + parent: 2 + - uid: 1665 + components: + - type: Transform + pos: -43.5,6.5 + parent: 2 + - uid: 1666 + components: + - type: Transform + pos: -42.5,3.5 + parent: 2 + - uid: 1667 + components: + - type: Transform + pos: -42.5,2.5 + parent: 2 + - uid: 1668 + components: + - type: Transform + pos: -42.5,1.5 + parent: 2 + - uid: 1669 + components: + - type: Transform + pos: -42.5,0.5 + parent: 2 + - uid: 1670 + components: + - type: Transform + pos: -42.5,-3.5 + parent: 2 + - uid: 1671 + components: + - type: Transform + pos: -42.5,-4.5 + parent: 2 + - uid: 1672 + components: + - type: Transform + pos: -42.5,-1.5 + parent: 2 + - uid: 1673 + components: + - type: Transform + pos: -43.5,-1.5 + parent: 2 + - uid: 1674 + components: + - type: Transform + pos: -44.5,-1.5 + parent: 2 + - uid: 1675 + components: + - type: Transform + pos: -44.5,0.5 + parent: 2 + - uid: 1676 + components: + - type: Transform + pos: -43.5,0.5 + parent: 2 + - uid: 1677 + components: + - type: Transform + pos: -36.5,3.5 + parent: 2 + - uid: 1678 + components: + - type: Transform + pos: -37.5,-4.5 + parent: 2 + - uid: 1679 + components: + - type: Transform + pos: -36.5,-4.5 + parent: 2 + - uid: 1680 + components: + - type: Transform + pos: -37.5,-1.5 + parent: 2 + - uid: 1681 + components: + - type: Transform + pos: -41.5,-8.5 + parent: 2 + - uid: 1682 + components: + - type: Transform + pos: -38.5,-11.5 + parent: 2 + - uid: 1683 + components: + - type: Transform + pos: -42.5,-6.5 + parent: 2 + - uid: 1684 + components: + - type: Transform + pos: -42.5,-7.5 + parent: 2 + - uid: 1685 + components: + - type: Transform + pos: -42.5,-8.5 + parent: 2 + - uid: 1686 + components: + - type: Transform + pos: -43.5,-8.5 + parent: 2 + - uid: 1687 + components: + - type: Transform + pos: -44.5,-8.5 + parent: 2 + - uid: 1688 + components: + - type: Transform + pos: -40.5,-8.5 + parent: 2 + - uid: 1689 + components: + - type: Transform + pos: -39.5,-8.5 + parent: 2 + - uid: 1690 + components: + - type: Transform + pos: -38.5,-8.5 + parent: 2 + - uid: 1691 + components: + - type: Transform + pos: -37.5,-8.5 + parent: 2 + - uid: 1692 + components: + - type: Transform + pos: -36.5,-8.5 + parent: 2 + - uid: 1693 + components: + - type: Transform + pos: -38.5,-7.5 + parent: 2 + - uid: 1694 + components: + - type: Transform + pos: -37.5,-9.5 + parent: 2 + - uid: 1695 + components: + - type: Transform + pos: -37.5,-10.5 + parent: 2 + - uid: 1696 + components: + - type: Transform + pos: -37.5,-11.5 + parent: 2 + - uid: 1697 + components: + - type: Transform + pos: -37.5,-12.5 + parent: 2 + - uid: 1698 + components: + - type: Transform + pos: -37.5,-13.5 + parent: 2 + - uid: 1699 + components: + - type: Transform + pos: -37.5,-14.5 + parent: 2 + - uid: 1700 + components: + - type: Transform + pos: -37.5,-15.5 + parent: 2 + - uid: 1701 + components: + - type: Transform + pos: -37.5,-16.5 + parent: 2 + - uid: 1702 + components: + - type: Transform + pos: -37.5,-17.5 + parent: 2 + - uid: 1703 + components: + - type: Transform + pos: -37.5,-18.5 + parent: 2 + - uid: 1704 + components: + - type: Transform + pos: -37.5,-19.5 + parent: 2 + - uid: 1705 + components: + - type: Transform + pos: -37.5,-20.5 + parent: 2 + - uid: 1706 + components: + - type: Transform + pos: -39.5,-11.5 + parent: 2 + - uid: 1707 + components: + - type: Transform + pos: -40.5,-11.5 + parent: 2 + - uid: 1708 + components: + - type: Transform + pos: -41.5,-11.5 + parent: 2 + - uid: 1709 + components: + - type: Transform + pos: -42.5,-11.5 + parent: 2 + - uid: 1710 + components: + - type: Transform + pos: -43.5,-11.5 + parent: 2 + - uid: 1711 + components: + - type: Transform + pos: -44.5,-11.5 + parent: 2 + - uid: 1712 + components: + - type: Transform + pos: -43.5,-12.5 + parent: 2 + - uid: 1713 + components: + - type: Transform + pos: -43.5,-13.5 + parent: 2 + - uid: 1714 + components: + - type: Transform + pos: -45.5,-11.5 + parent: 2 + - uid: 1715 + components: + - type: Transform + pos: -38.5,-18.5 + parent: 2 + - uid: 1716 + components: + - type: Transform + pos: -39.5,-18.5 + parent: 2 + - uid: 1717 + components: + - type: Transform + pos: -40.5,-18.5 + parent: 2 + - uid: 1718 + components: + - type: Transform + pos: -41.5,-18.5 + parent: 2 + - uid: 1719 + components: + - type: Transform + pos: -42.5,-18.5 + parent: 2 + - uid: 1720 + components: + - type: Transform + pos: -43.5,-18.5 + parent: 2 + - uid: 1721 + components: + - type: Transform + pos: -44.5,-18.5 + parent: 2 + - uid: 1722 + components: + - type: Transform + pos: -45.5,-18.5 + parent: 2 + - uid: 1723 + components: + - type: Transform + pos: -46.5,-18.5 + parent: 2 + - uid: 1724 + components: + - type: Transform + pos: -44.5,-17.5 + parent: 2 + - uid: 1725 + components: + - type: Transform + pos: -44.5,-16.5 + parent: 2 + - uid: 1726 + components: + - type: Transform + pos: -44.5,-15.5 + parent: 2 + - uid: 1727 + components: + - type: Transform + pos: -44.5,-19.5 + parent: 2 + - uid: 1728 + components: + - type: Transform + pos: -44.5,-20.5 + parent: 2 + - uid: 1729 + components: + - type: Transform + pos: -44.5,-21.5 + parent: 2 + - uid: 1730 + components: + - type: Transform + pos: -44.5,-22.5 + parent: 2 + - uid: 1731 + components: + - type: Transform + pos: -44.5,-23.5 + parent: 2 + - uid: 1732 + components: + - type: Transform + pos: -47.5,-18.5 + parent: 2 + - uid: 1733 + components: + - type: Transform + pos: -48.5,-18.5 + parent: 2 + - uid: 1734 + components: + - type: Transform + pos: -48.5,-22.5 + parent: 2 + - uid: 1735 + components: + - type: Transform + pos: -48.5,-21.5 + parent: 2 + - uid: 1736 + components: + - type: Transform + pos: -48.5,-20.5 + parent: 2 + - uid: 1737 + components: + - type: Transform + pos: -48.5,-19.5 + parent: 2 + - uid: 1738 + components: + - type: Transform + pos: -48.5,-18.5 + parent: 2 + - uid: 1739 + components: + - type: Transform + pos: -48.5,-17.5 + parent: 2 + - uid: 1740 + components: + - type: Transform + pos: -48.5,-16.5 + parent: 2 + - uid: 1741 + components: + - type: Transform + pos: -32.5,-29.5 + parent: 2 + - uid: 1742 + components: + - type: Transform + pos: -23.5,29.5 + parent: 2 + - uid: 1743 + components: + - type: Transform + pos: -20.5,-22.5 + parent: 2 + - uid: 1744 + components: + - type: Transform + pos: -25.5,-18.5 + parent: 2 + - uid: 1745 + components: + - type: Transform + pos: -24.5,-18.5 + parent: 2 + - uid: 1746 + components: + - type: Transform + pos: -24.5,-17.5 + parent: 2 + - uid: 1747 + components: + - type: Transform + pos: -25.5,-17.5 + parent: 2 + - uid: 1748 + components: + - type: Transform + pos: -26.5,-17.5 + parent: 2 + - uid: 1749 + components: + - type: Transform + pos: -27.5,-17.5 + parent: 2 + - uid: 1750 + components: + - type: Transform + pos: -28.5,-17.5 + parent: 2 + - uid: 1751 + components: + - type: Transform + pos: -29.5,-17.5 + parent: 2 + - uid: 1752 + components: + - type: Transform + pos: -30.5,-17.5 + parent: 2 + - uid: 1753 + components: + - type: Transform + pos: -23.5,-17.5 + parent: 2 + - uid: 1754 + components: + - type: Transform + pos: -22.5,-17.5 + parent: 2 + - uid: 1755 + components: + - type: Transform + pos: -21.5,-17.5 + parent: 2 + - uid: 1756 + components: + - type: Transform + pos: -20.5,-17.5 + parent: 2 + - uid: 1757 + components: + - type: Transform + pos: -19.5,-17.5 + parent: 2 + - uid: 1758 + components: + - type: Transform + pos: -18.5,-17.5 + parent: 2 + - uid: 1759 + components: + - type: Transform + pos: -21.5,-18.5 + parent: 2 + - uid: 1760 + components: + - type: Transform + pos: -21.5,-19.5 + parent: 2 + - uid: 1761 + components: + - type: Transform + pos: -21.5,-20.5 + parent: 2 + - uid: 1762 + components: + - type: Transform + pos: -21.5,-21.5 + parent: 2 + - uid: 1763 + components: + - type: Transform + pos: -21.5,-22.5 + parent: 2 + - uid: 1764 + components: + - type: Transform + pos: -21.5,-23.5 + parent: 2 + - uid: 1765 + components: + - type: Transform + pos: -21.5,-24.5 + parent: 2 + - uid: 1766 + components: + - type: Transform + pos: -22.5,-22.5 + parent: 2 + - uid: 1767 + components: + - type: Transform + pos: -23.5,-22.5 + parent: 2 + - uid: 1768 + components: + - type: Transform + pos: -24.5,-22.5 + parent: 2 + - uid: 1769 + components: + - type: Transform + pos: -25.5,-22.5 + parent: 2 + - uid: 1770 + components: + - type: Transform + pos: -26.5,-22.5 + parent: 2 + - uid: 1771 + components: + - type: Transform + pos: -24.5,-23.5 + parent: 2 + - uid: 1772 + components: + - type: Transform + pos: -26.5,-21.5 + parent: 2 + - uid: 1773 + components: + - type: Transform + pos: -22.5,-24.5 + parent: 2 + - uid: 1774 + components: + - type: Transform + pos: -22.5,-25.5 + parent: 2 + - uid: 1775 + components: + - type: Transform + pos: -25.5,-28.5 + parent: 2 + - uid: 1776 + components: + - type: Transform + pos: -27.5,-27.5 + parent: 2 + - uid: 1777 + components: + - type: Transform + pos: -26.5,-27.5 + parent: 2 + - uid: 1778 + components: + - type: Transform + pos: -25.5,-27.5 + parent: 2 + - uid: 1779 + components: + - type: Transform + pos: -24.5,-27.5 + parent: 2 + - uid: 1780 + components: + - type: Transform + pos: -23.5,-27.5 + parent: 2 + - uid: 1781 + components: + - type: Transform + pos: -22.5,-27.5 + parent: 2 + - uid: 1782 + components: + - type: Transform + pos: -21.5,-27.5 + parent: 2 + - uid: 1783 + components: + - type: Transform + pos: -20.5,-27.5 + parent: 2 + - uid: 1784 + components: + - type: Transform + pos: -19.5,-27.5 + parent: 2 + - uid: 1785 + components: + - type: Transform + pos: -18.5,-27.5 + parent: 2 + - uid: 1786 + components: + - type: Transform + pos: -17.5,-27.5 + parent: 2 + - uid: 1787 + components: + - type: Transform + pos: -16.5,-27.5 + parent: 2 + - uid: 1788 + components: + - type: Transform + pos: -15.5,-27.5 + parent: 2 + - uid: 1789 + components: + - type: Transform + pos: -14.5,-27.5 + parent: 2 + - uid: 1790 + components: + - type: Transform + pos: -13.5,-27.5 + parent: 2 + - uid: 1791 + components: + - type: Transform + pos: -12.5,-27.5 + parent: 2 + - uid: 1792 + components: + - type: Transform + pos: -11.5,-27.5 + parent: 2 + - uid: 1793 + components: + - type: Transform + pos: -10.5,-27.5 + parent: 2 + - uid: 1794 + components: + - type: Transform + pos: -9.5,-27.5 + parent: 2 + - uid: 1795 + components: + - type: Transform + pos: -8.5,-27.5 + parent: 2 + - uid: 1796 + components: + - type: Transform + pos: -7.5,-27.5 + parent: 2 + - uid: 1797 + components: + - type: Transform + pos: -6.5,-27.5 + parent: 2 + - uid: 1798 + components: + - type: Transform + pos: -5.5,-27.5 + parent: 2 + - uid: 1799 + components: + - type: Transform + pos: -4.5,-27.5 + parent: 2 + - uid: 1800 + components: + - type: Transform + pos: -3.5,-27.5 + parent: 2 + - uid: 1801 + components: + - type: Transform + pos: -2.5,-27.5 + parent: 2 + - uid: 1802 + components: + - type: Transform + pos: -1.5,-27.5 + parent: 2 + - uid: 1803 + components: + - type: Transform + pos: -10.5,-26.5 + parent: 2 + - uid: 1804 + components: + - type: Transform + pos: -10.5,-25.5 + parent: 2 + - uid: 1805 + components: + - type: Transform + pos: -10.5,-24.5 + parent: 2 + - uid: 1806 + components: + - type: Transform + pos: -10.5,-23.5 + parent: 2 + - uid: 1807 + components: + - type: Transform + pos: -10.5,-22.5 + parent: 2 + - uid: 1808 + components: + - type: Transform + pos: -10.5,-21.5 + parent: 2 + - uid: 1809 + components: + - type: Transform + pos: -11.5,-22.5 + parent: 2 + - uid: 1810 + components: + - type: Transform + pos: -9.5,-22.5 + parent: 2 + - uid: 1811 + components: + - type: Transform + pos: -25.5,-29.5 + parent: 2 + - uid: 1812 + components: + - type: Transform + pos: -25.5,-30.5 + parent: 2 + - uid: 1813 + components: + - type: Transform + pos: -26.5,-30.5 + parent: 2 + - uid: 1814 + components: + - type: Transform + pos: -27.5,-30.5 + parent: 2 + - uid: 1815 + components: + - type: Transform + pos: -28.5,-30.5 + parent: 2 + - uid: 1816 + components: + - type: Transform + pos: -29.5,-30.5 + parent: 2 + - uid: 1817 + components: + - type: Transform + pos: -30.5,-30.5 + parent: 2 + - uid: 1818 + components: + - type: Transform + pos: -31.5,-30.5 + parent: 2 + - uid: 1819 + components: + - type: Transform + pos: -32.5,-30.5 + parent: 2 + - uid: 1820 + components: + - type: Transform + pos: -33.5,-30.5 + parent: 2 + - uid: 1821 + components: + - type: Transform + pos: -34.5,-30.5 + parent: 2 + - uid: 1822 + components: + - type: Transform + pos: -29.5,-29.5 + parent: 2 + - uid: 1823 + components: + - type: Transform + pos: -29.5,-28.5 + parent: 2 + - uid: 1824 + components: + - type: Transform + pos: -29.5,-27.5 + parent: 2 + - uid: 1825 + components: + - type: Transform + pos: -29.5,-26.5 + parent: 2 + - uid: 1826 + components: + - type: Transform + pos: -29.5,-25.5 + parent: 2 + - uid: 1827 + components: + - type: Transform + pos: -32.5,-28.5 + parent: 2 + - uid: 1828 + components: + - type: Transform + pos: -32.5,-27.5 + parent: 2 + - uid: 1829 + components: + - type: Transform + pos: -32.5,-26.5 + parent: 2 + - uid: 1830 + components: + - type: Transform + pos: -35.5,-30.5 + parent: 2 + - uid: 1831 + components: + - type: Transform + pos: -35.5,-29.5 + parent: 2 + - uid: 1832 + components: + - type: Transform + pos: -35.5,-28.5 + parent: 2 + - uid: 1833 + components: + - type: Transform + pos: -35.5,-27.5 + parent: 2 + - uid: 1834 + components: + - type: Transform + pos: -35.5,-26.5 + parent: 2 + - uid: 1835 + components: + - type: Transform + pos: -26.5,-36.5 + parent: 2 + - uid: 1836 + components: + - type: Transform + pos: -29.5,-31.5 + parent: 2 + - uid: 1837 + components: + - type: Transform + pos: -33.5,-31.5 + parent: 2 + - uid: 1838 + components: + - type: Transform + pos: -33.5,-32.5 + parent: 2 + - uid: 1839 + components: + - type: Transform + pos: -33.5,-33.5 + parent: 2 + - uid: 1840 + components: + - type: Transform + pos: -33.5,-44.5 + parent: 2 + - uid: 1841 + components: + - type: Transform + pos: -33.5,-36.5 + parent: 2 + - uid: 1842 + components: + - type: Transform + pos: -33.5,-37.5 + parent: 2 + - uid: 1843 + components: + - type: Transform + pos: -33.5,-38.5 + parent: 2 + - uid: 1844 + components: + - type: Transform + pos: -33.5,-39.5 + parent: 2 + - uid: 1845 + components: + - type: Transform + pos: -33.5,-40.5 + parent: 2 + - uid: 1846 + components: + - type: Transform + pos: -33.5,-41.5 + parent: 2 + - uid: 1847 + components: + - type: Transform + pos: -33.5,-42.5 + parent: 2 + - uid: 1848 + components: + - type: Transform + pos: -33.5,-43.5 + parent: 2 + - uid: 1849 + components: + - type: Transform + pos: -32.5,-40.5 + parent: 2 + - uid: 1850 + components: + - type: Transform + pos: -31.5,-40.5 + parent: 2 + - uid: 1851 + components: + - type: Transform + pos: -30.5,-40.5 + parent: 2 + - uid: 1852 + components: + - type: Transform + pos: -29.5,-40.5 + parent: 2 + - uid: 1853 + components: + - type: Transform + pos: -28.5,-40.5 + parent: 2 + - uid: 1854 + components: + - type: Transform + pos: -27.5,-40.5 + parent: 2 + - uid: 1855 + components: + - type: Transform + pos: -29.5,-33.5 + parent: 2 + - uid: 1856 + components: + - type: Transform + pos: -29.5,-34.5 + parent: 2 + - uid: 1857 + components: + - type: Transform + pos: -29.5,-35.5 + parent: 2 + - uid: 1858 + components: + - type: Transform + pos: -35.5,-37.5 + parent: 2 + - uid: 1859 + components: + - type: Transform + pos: -25.5,-36.5 + parent: 2 + - uid: 1860 + components: + - type: Transform + pos: -24.5,-36.5 + parent: 2 + - uid: 1861 + components: + - type: Transform + pos: -24.5,-39.5 + parent: 2 + - uid: 1862 + components: + - type: Transform + pos: -24.5,-38.5 + parent: 2 + - uid: 1863 + components: + - type: Transform + pos: -24.5,-37.5 + parent: 2 + - uid: 1864 + components: + - type: Transform + pos: -24.5,-36.5 + parent: 2 + - uid: 1865 + components: + - type: Transform + pos: -24.5,-35.5 + parent: 2 + - uid: 1866 + components: + - type: Transform + pos: -24.5,-34.5 + parent: 2 + - uid: 1867 + components: + - type: Transform + pos: -24.5,-33.5 + parent: 2 + - uid: 1868 + components: + - type: Transform + pos: -42.5,-37.5 + parent: 2 + - uid: 1869 + components: + - type: Transform + pos: -44.5,-34.5 + parent: 2 + - uid: 1870 + components: + - type: Transform + pos: -40.5,-37.5 + parent: 2 + - uid: 1871 + components: + - type: Transform + pos: -39.5,-37.5 + parent: 2 + - uid: 1872 + components: + - type: Transform + pos: -38.5,-37.5 + parent: 2 + - uid: 1873 + components: + - type: Transform + pos: -38.5,-39.5 + parent: 2 + - uid: 1874 + components: + - type: Transform + pos: -38.5,-38.5 + parent: 2 + - uid: 1875 + components: + - type: Transform + pos: -38.5,-37.5 + parent: 2 + - uid: 1876 + components: + - type: Transform + pos: -38.5,-36.5 + parent: 2 + - uid: 1877 + components: + - type: Transform + pos: -38.5,-35.5 + parent: 2 + - uid: 1878 + components: + - type: Transform + pos: -38.5,-37.5 + parent: 2 + - uid: 1879 + components: + - type: Transform + pos: -37.5,-37.5 + parent: 2 + - uid: 1880 + components: + - type: Transform + pos: -39.5,-35.5 + parent: 2 + - uid: 1881 + components: + - type: Transform + pos: -40.5,-35.5 + parent: 2 + - uid: 1882 + components: + - type: Transform + pos: -41.5,-35.5 + parent: 2 + - uid: 1883 + components: + - type: Transform + pos: -42.5,-35.5 + parent: 2 + - uid: 1884 + components: + - type: Transform + pos: -43.5,-35.5 + parent: 2 + - uid: 1885 + components: + - type: Transform + pos: -43.5,-34.5 + parent: 2 + - uid: 1886 + components: + - type: Transform + pos: -43.5,-33.5 + parent: 2 + - uid: 1887 + components: + - type: Transform + pos: -43.5,-32.5 + parent: 2 + - uid: 1888 + components: + - type: Transform + pos: -43.5,-31.5 + parent: 2 + - uid: 1889 + components: + - type: Transform + pos: -43.5,-30.5 + parent: 2 + - uid: 1890 + components: + - type: Transform + pos: -45.5,-34.5 + parent: 2 + - uid: 1891 + components: + - type: Transform + pos: -46.5,-34.5 + parent: 2 + - uid: 1892 + components: + - type: Transform + pos: -47.5,-34.5 + parent: 2 + - uid: 1893 + components: + - type: Transform + pos: -48.5,-34.5 + parent: 2 + - uid: 1894 + components: + - type: Transform + pos: -42.5,-32.5 + parent: 2 + - uid: 1895 + components: + - type: Transform + pos: -41.5,-32.5 + parent: 2 + - uid: 1896 + components: + - type: Transform + pos: -41.5,-31.5 + parent: 2 + - uid: 1897 + components: + - type: Transform + pos: -41.5,-30.5 + parent: 2 + - uid: 1898 + components: + - type: Transform + pos: -44.5,-31.5 + parent: 2 + - uid: 1899 + components: + - type: Transform + pos: -45.5,-31.5 + parent: 2 + - uid: 1900 + components: + - type: Transform + pos: -46.5,-31.5 + parent: 2 + - uid: 1901 + components: + - type: Transform + pos: -46.5,-30.5 + parent: 2 + - uid: 1902 + components: + - type: Transform + pos: -42.5,-36.5 + parent: 2 + - uid: 1903 + components: + - type: Transform + pos: -42.5,-38.5 + parent: 2 + - uid: 1904 + components: + - type: Transform + pos: -42.5,-39.5 + parent: 2 + - uid: 1905 + components: + - type: Transform + pos: -42.5,-40.5 + parent: 2 + - uid: 1906 + components: + - type: Transform + pos: -42.5,-41.5 + parent: 2 + - uid: 1907 + components: + - type: Transform + pos: -42.5,-42.5 + parent: 2 + - uid: 1908 + components: + - type: Transform + pos: -42.5,-43.5 + parent: 2 + - uid: 1909 + components: + - type: Transform + pos: -43.5,-43.5 + parent: 2 + - uid: 1910 + components: + - type: Transform + pos: -44.5,-43.5 + parent: 2 + - uid: 1911 + components: + - type: Transform + pos: -45.5,-43.5 + parent: 2 + - uid: 1912 + components: + - type: Transform + pos: -41.5,-42.5 + parent: 2 + - uid: 1913 + components: + - type: Transform + pos: -40.5,-42.5 + parent: 2 + - uid: 1914 + components: + - type: Transform + pos: -39.5,-42.5 + parent: 2 + - uid: 1915 + components: + - type: Transform + pos: -38.5,-42.5 + parent: 2 + - uid: 1916 + components: + - type: Transform + pos: -37.5,-42.5 + parent: 2 + - uid: 1917 + components: + - type: Transform + pos: -36.5,-42.5 + parent: 2 + - uid: 1918 + components: + - type: Transform + pos: -39.5,-24.5 + parent: 2 + - uid: 1919 + components: + - type: Transform + pos: -39.5,-25.5 + parent: 2 + - uid: 1920 + components: + - type: Transform + pos: -39.5,-26.5 + parent: 2 + - uid: 1921 + components: + - type: Transform + pos: -40.5,-26.5 + parent: 2 + - uid: 1922 + components: + - type: Transform + pos: -41.5,-26.5 + parent: 2 + - uid: 1923 + components: + - type: Transform + pos: -42.5,-26.5 + parent: 2 + - uid: 1924 + components: + - type: Transform + pos: -43.5,-26.5 + parent: 2 + - uid: 1925 + components: + - type: Transform + pos: -44.5,-26.5 + parent: 2 + - uid: 1926 + components: + - type: Transform + pos: -45.5,-26.5 + parent: 2 + - uid: 1927 + components: + - type: Transform + pos: -46.5,-26.5 + parent: 2 + - uid: 1928 + components: + - type: Transform + pos: -47.5,-26.5 + parent: 2 + - uid: 1931 + components: + - type: Transform + pos: -38.5,-26.5 + parent: 2 + - uid: 1932 + components: + - type: Transform + pos: -38.5,-27.5 + parent: 2 + - uid: 1933 + components: + - type: Transform + pos: -38.5,-28.5 + parent: 2 + - uid: 1934 + components: + - type: Transform + pos: -38.5,-29.5 + parent: 2 + - uid: 1935 + components: + - type: Transform + pos: -38.5,-30.5 + parent: 2 + - uid: 1936 + components: + - type: Transform + pos: -38.5,-31.5 + parent: 2 + - uid: 1937 + components: + - type: Transform + pos: -38.5,-32.5 + parent: 2 + - uid: 1938 + components: + - type: Transform + pos: -38.5,-33.5 + parent: 2 + - uid: 1939 + components: + - type: Transform + pos: -38.5,-24.5 + parent: 2 + - uid: 1940 + components: + - type: Transform + pos: -37.5,-24.5 + parent: 2 + - uid: 1941 + components: + - type: Transform + pos: -37.5,-23.5 + parent: 2 + - uid: 1942 + components: + - type: Transform + pos: -37.5,-22.5 + parent: 2 + - uid: 1943 + components: + - type: Transform + pos: -40.5,-49.5 + parent: 2 + - uid: 1944 + components: + - type: Transform + pos: -39.5,-49.5 + parent: 2 + - uid: 1945 + components: + - type: Transform + pos: -39.5,-50.5 + parent: 2 + - uid: 1946 + components: + - type: Transform + pos: -41.5,-49.5 + parent: 2 + - uid: 1947 + components: + - type: Transform + pos: -42.5,-49.5 + parent: 2 + - uid: 1948 + components: + - type: Transform + pos: -41.5,-50.5 + parent: 2 + - uid: 1949 + components: + - type: Transform + pos: -41.5,-51.5 + parent: 2 + - uid: 1950 + components: + - type: Transform + pos: -41.5,-52.5 + parent: 2 + - uid: 1951 + components: + - type: Transform + pos: -42.5,-52.5 + parent: 2 + - uid: 1952 + components: + - type: Transform + pos: -43.5,-52.5 + parent: 2 + - uid: 1953 + components: + - type: Transform + pos: -44.5,-52.5 + parent: 2 + - uid: 1954 + components: + - type: Transform + pos: -38.5,-49.5 + parent: 2 + - uid: 1955 + components: + - type: Transform + pos: -37.5,-49.5 + parent: 2 + - uid: 1956 + components: + - type: Transform + pos: -36.5,-49.5 + parent: 2 + - uid: 1957 + components: + - type: Transform + pos: -35.5,-49.5 + parent: 2 + - uid: 1958 + components: + - type: Transform + pos: -34.5,-49.5 + parent: 2 + - uid: 1959 + components: + - type: Transform + pos: -33.5,-49.5 + parent: 2 + - uid: 1960 + components: + - type: Transform + pos: -32.5,-49.5 + parent: 2 + - uid: 1961 + components: + - type: Transform + pos: -31.5,-49.5 + parent: 2 + - uid: 1962 + components: + - type: Transform + pos: -35.5,-50.5 + parent: 2 + - uid: 1963 + components: + - type: Transform + pos: -35.5,-51.5 + parent: 2 + - uid: 1964 + components: + - type: Transform + pos: -35.5,-52.5 + parent: 2 + - uid: 1965 + components: + - type: Transform + pos: -33.5,-48.5 + parent: 2 + - uid: 1966 + components: + - type: Transform + pos: -33.5,-47.5 + parent: 2 + - uid: 1967 + components: + - type: Transform + pos: -33.5,-46.5 + parent: 2 + - uid: 1968 + components: + - type: Transform + pos: -33.5,-45.5 + parent: 2 + - uid: 1969 + components: + - type: Transform + pos: -32.5,-47.5 + parent: 2 + - uid: 1970 + components: + - type: Transform + pos: -31.5,-47.5 + parent: 2 + - uid: 1971 + components: + - type: Transform + pos: -30.5,-47.5 + parent: 2 + - uid: 1972 + components: + - type: Transform + pos: -29.5,-47.5 + parent: 2 + - uid: 1973 + components: + - type: Transform + pos: -28.5,-47.5 + parent: 2 + - uid: 1974 + components: + - type: Transform + pos: -27.5,-47.5 + parent: 2 + - uid: 1975 + components: + - type: Transform + pos: -26.5,-47.5 + parent: 2 + - uid: 1976 + components: + - type: Transform + pos: -25.5,-47.5 + parent: 2 + - uid: 1977 + components: + - type: Transform + pos: -24.5,-47.5 + parent: 2 + - uid: 1978 + components: + - type: Transform + pos: -23.5,-47.5 + parent: 2 + - uid: 1979 + components: + - type: Transform + pos: -34.5,-46.5 + parent: 2 + - uid: 1980 + components: + - type: Transform + pos: -35.5,-46.5 + parent: 2 + - uid: 1981 + components: + - type: Transform + pos: -36.5,-46.5 + parent: 2 + - uid: 1982 + components: + - type: Transform + pos: -37.5,-46.5 + parent: 2 + - uid: 1983 + components: + - type: Transform + pos: -38.5,-46.5 + parent: 2 + - uid: 1984 + components: + - type: Transform + pos: -39.5,-46.5 + parent: 2 + - uid: 1985 + components: + - type: Transform + pos: -40.5,-46.5 + parent: 2 + - uid: 1986 + components: + - type: Transform + pos: -41.5,-46.5 + parent: 2 + - uid: 1987 + components: + - type: Transform + pos: -42.5,-46.5 + parent: 2 + - uid: 1988 + components: + - type: Transform + pos: -43.5,-46.5 + parent: 2 + - uid: 1989 + components: + - type: Transform + pos: -22.5,-42.5 + parent: 2 + - uid: 1990 + components: + - type: Transform + pos: -22.5,-43.5 + parent: 2 + - uid: 1991 + components: + - type: Transform + pos: -23.5,-43.5 + parent: 2 + - uid: 1992 + components: + - type: Transform + pos: -24.5,-43.5 + parent: 2 + - uid: 1993 + components: + - type: Transform + pos: -25.5,-43.5 + parent: 2 + - uid: 1994 + components: + - type: Transform + pos: -26.5,-43.5 + parent: 2 + - uid: 1995 + components: + - type: Transform + pos: -27.5,-43.5 + parent: 2 + - uid: 1996 + components: + - type: Transform + pos: -28.5,-43.5 + parent: 2 + - uid: 1997 + components: + - type: Transform + pos: -29.5,-43.5 + parent: 2 + - uid: 1998 + components: + - type: Transform + pos: -30.5,-43.5 + parent: 2 + - uid: 1999 + components: + - type: Transform + pos: -21.5,-43.5 + parent: 2 + - uid: 2000 + components: + - type: Transform + pos: -20.5,-43.5 + parent: 2 + - uid: 2001 + components: + - type: Transform + pos: -20.5,-42.5 + parent: 2 + - uid: 2002 + components: + - type: Transform + pos: -20.5,-41.5 + parent: 2 + - uid: 2003 + components: + - type: Transform + pos: -20.5,-40.5 + parent: 2 + - uid: 2004 + components: + - type: Transform + pos: -20.5,-39.5 + parent: 2 + - uid: 2005 + components: + - type: Transform + pos: -20.5,-38.5 + parent: 2 + - uid: 2006 + components: + - type: Transform + pos: -20.5,-37.5 + parent: 2 + - uid: 2007 + components: + - type: Transform + pos: -20.5,-36.5 + parent: 2 + - uid: 2008 + components: + - type: Transform + pos: -20.5,-35.5 + parent: 2 + - uid: 2009 + components: + - type: Transform + pos: -21.5,-28.5 + parent: 2 + - uid: 2010 + components: + - type: Transform + pos: -21.5,-29.5 + parent: 2 + - uid: 2011 + components: + - type: Transform + pos: -21.5,-30.5 + parent: 2 + - uid: 2012 + components: + - type: Transform + pos: -21.5,-31.5 + parent: 2 + - uid: 2013 + components: + - type: Transform + pos: -21.5,-32.5 + parent: 2 + - uid: 2014 + components: + - type: Transform + pos: -19.5,-32.5 + parent: 2 + - uid: 2015 + components: + - type: Transform + pos: -18.5,-32.5 + parent: 2 + - uid: 2016 + components: + - type: Transform + pos: -17.5,-32.5 + parent: 2 + - uid: 2017 + components: + - type: Transform + pos: -16.5,-32.5 + parent: 2 + - uid: 2018 + components: + - type: Transform + pos: -20.5,-45.5 + parent: 2 + - uid: 2019 + components: + - type: Transform + pos: -20.5,-46.5 + parent: 2 + - uid: 2020 + components: + - type: Transform + pos: -20.5,-47.5 + parent: 2 + - uid: 2021 + components: + - type: Transform + pos: -20.5,-48.5 + parent: 2 + - uid: 2022 + components: + - type: Transform + pos: -20.5,-49.5 + parent: 2 + - uid: 2023 + components: + - type: Transform + pos: -20.5,-50.5 + parent: 2 + - uid: 2024 + components: + - type: Transform + pos: -20.5,-51.5 + parent: 2 + - uid: 2025 + components: + - type: Transform + pos: -21.5,-50.5 + parent: 2 + - uid: 2026 + components: + - type: Transform + pos: -22.5,-50.5 + parent: 2 + - uid: 2027 + components: + - type: Transform + pos: -23.5,-50.5 + parent: 2 + - uid: 2028 + components: + - type: Transform + pos: -24.5,-50.5 + parent: 2 + - uid: 2029 + components: + - type: Transform + pos: -25.5,-50.5 + parent: 2 + - uid: 2030 + components: + - type: Transform + pos: -26.5,-50.5 + parent: 2 + - uid: 2031 + components: + - type: Transform + pos: -27.5,-50.5 + parent: 2 + - uid: 2032 + components: + - type: Transform + pos: -28.5,-50.5 + parent: 2 + - uid: 2033 + components: + - type: Transform + pos: -28.5,-51.5 + parent: 2 + - uid: 2034 + components: + - type: Transform + pos: -23.5,-5.5 + parent: 2 + - uid: 2035 + components: + - type: Transform + pos: -24.5,-5.5 + parent: 2 + - uid: 2036 + components: + - type: Transform + pos: -25.5,-5.5 + parent: 2 + - uid: 2037 + components: + - type: Transform + pos: -26.5,-5.5 + parent: 2 + - uid: 2038 + components: + - type: Transform + pos: -27.5,-5.5 + parent: 2 + - uid: 2039 + components: + - type: Transform + pos: -28.5,-5.5 + parent: 2 + - uid: 2040 + components: + - type: Transform + pos: -29.5,-5.5 + parent: 2 + - uid: 2041 + components: + - type: Transform + pos: -27.5,-4.5 + parent: 2 + - uid: 2042 + components: + - type: Transform + pos: -27.5,-3.5 + parent: 2 + - uid: 2043 + components: + - type: Transform + pos: -29.5,-4.5 + parent: 2 + - uid: 2044 + components: + - type: Transform + pos: -29.5,-3.5 + parent: 2 + - uid: 2045 + components: + - type: Transform + pos: -29.5,-2.5 + parent: 2 + - uid: 2046 + components: + - type: Transform + pos: -27.5,-6.5 + parent: 2 + - uid: 2047 + components: + - type: Transform + pos: -23.5,-4.5 + parent: 2 + - uid: 2048 + components: + - type: Transform + pos: -23.5,-3.5 + parent: 2 + - uid: 2049 + components: + - type: Transform + pos: -25.5,-4.5 + parent: 2 + - uid: 2050 + components: + - type: Transform + pos: -25.5,-3.5 + parent: 2 + - uid: 2051 + components: + - type: Transform + pos: -28.5,-52.5 + parent: 2 + - uid: 2052 + components: + - type: Transform + pos: -28.5,-53.5 + parent: 2 + - uid: 2053 + components: + - type: Transform + pos: -28.5,-54.5 + parent: 2 + - uid: 2054 + components: + - type: Transform + pos: -28.5,-55.5 + parent: 2 + - uid: 2055 + components: + - type: Transform + pos: -29.5,-55.5 + parent: 2 + - uid: 2056 + components: + - type: Transform + pos: -30.5,-55.5 + parent: 2 + - uid: 2057 + components: + - type: Transform + pos: -31.5,-55.5 + parent: 2 + - uid: 2058 + components: + - type: Transform + pos: -32.5,-55.5 + parent: 2 + - uid: 2059 + components: + - type: Transform + pos: -33.5,-55.5 + parent: 2 + - uid: 2060 + components: + - type: Transform + pos: -34.5,-55.5 + parent: 2 + - uid: 2061 + components: + - type: Transform + pos: -35.5,-55.5 + parent: 2 + - uid: 2062 + components: + - type: Transform + pos: -35.5,-54.5 + parent: 2 + - uid: 2063 + components: + - type: Transform + pos: -36.5,-54.5 + parent: 2 + - uid: 2064 + components: + - type: Transform + pos: -37.5,-54.5 + parent: 2 + - uid: 2065 + components: + - type: Transform + pos: -38.5,-54.5 + parent: 2 + - uid: 2066 + components: + - type: Transform + pos: -15.5,-18.5 + parent: 2 + - uid: 2067 + components: + - type: Transform + pos: -15.5,-19.5 + parent: 2 + - uid: 2068 + components: + - type: Transform + pos: -15.5,-20.5 + parent: 2 + - uid: 2069 + components: + - type: Transform + pos: -16.5,-20.5 + parent: 2 + - uid: 2070 + components: + - type: Transform + pos: -16.5,-21.5 + parent: 2 + - uid: 2071 + components: + - type: Transform + pos: -16.5,-22.5 + parent: 2 + - uid: 2072 + components: + - type: Transform + pos: -16.5,-23.5 + parent: 2 + - uid: 2073 + components: + - type: Transform + pos: -15.5,-23.5 + parent: 2 + - uid: 2074 + components: + - type: Transform + pos: -21.5,-60.5 + parent: 2 + - uid: 2075 + components: + - type: Transform + pos: -20.5,-60.5 + parent: 2 + - uid: 2076 + components: + - type: Transform + pos: -19.5,-60.5 + parent: 2 + - uid: 2077 + components: + - type: Transform + pos: -18.5,-60.5 + parent: 2 + - uid: 2078 + components: + - type: Transform + pos: -18.5,-61.5 + parent: 2 + - uid: 2079 + components: + - type: Transform + pos: -18.5,-62.5 + parent: 2 + - uid: 2080 + components: + - type: Transform + pos: -18.5,-59.5 + parent: 2 + - uid: 2081 + components: + - type: Transform + pos: -18.5,-58.5 + parent: 2 + - uid: 2082 + components: + - type: Transform + pos: -18.5,-57.5 + parent: 2 + - uid: 2083 + components: + - type: Transform + pos: -18.5,-56.5 + parent: 2 + - uid: 2084 + components: + - type: Transform + pos: -17.5,-58.5 + parent: 2 + - uid: 2085 + components: + - type: Transform + pos: -16.5,-58.5 + parent: 2 + - uid: 2086 + components: + - type: Transform + pos: -15.5,-58.5 + parent: 2 + - uid: 2087 + components: + - type: Transform + pos: -14.5,-58.5 + parent: 2 + - uid: 2088 + components: + - type: Transform + pos: -13.5,-58.5 + parent: 2 + - uid: 2089 + components: + - type: Transform + pos: -12.5,-58.5 + parent: 2 + - uid: 2090 + components: + - type: Transform + pos: -11.5,-58.5 + parent: 2 + - uid: 2091 + components: + - type: Transform + pos: -10.5,-58.5 + parent: 2 + - uid: 2092 + components: + - type: Transform + pos: -14.5,-57.5 + parent: 2 + - uid: 2093 + components: + - type: Transform + pos: -14.5,-56.5 + parent: 2 + - uid: 2094 + components: + - type: Transform + pos: -10.5,-57.5 + parent: 2 + - uid: 2095 + components: + - type: Transform + pos: -10.5,-56.5 + parent: 2 + - uid: 2096 + components: + - type: Transform + pos: -13.5,-59.5 + parent: 2 + - uid: 2097 + components: + - type: Transform + pos: -13.5,-60.5 + parent: 2 + - uid: 2098 + components: + - type: Transform + pos: -9.5,-58.5 + parent: 2 + - uid: 2099 + components: + - type: Transform + pos: -8.5,-58.5 + parent: 2 + - uid: 2100 + components: + - type: Transform + pos: -7.5,-58.5 + parent: 2 + - uid: 2101 + components: + - type: Transform + pos: -6.5,-58.5 + parent: 2 + - uid: 2102 + components: + - type: Transform + pos: -5.5,-58.5 + parent: 2 + - uid: 2103 + components: + - type: Transform + pos: -4.5,-58.5 + parent: 2 + - uid: 2104 + components: + - type: Transform + pos: -3.5,-58.5 + parent: 2 + - uid: 2105 + components: + - type: Transform + pos: -2.5,-58.5 + parent: 2 + - uid: 2106 + components: + - type: Transform + pos: -1.5,-58.5 + parent: 2 + - uid: 2107 + components: + - type: Transform + pos: -0.5,-58.5 + parent: 2 + - uid: 2108 + components: + - type: Transform + pos: -6.5,-57.5 + parent: 2 + - uid: 2109 + components: + - type: Transform + pos: -6.5,-56.5 + parent: 2 + - uid: 2110 + components: + - type: Transform + pos: -1.5,-57.5 + parent: 2 + - uid: 2111 + components: + - type: Transform + pos: -1.5,-56.5 + parent: 2 + - uid: 2112 + components: + - type: Transform + pos: -1.5,-59.5 + parent: 2 + - uid: 2113 + components: + - type: Transform + pos: -6.5,-59.5 + parent: 2 + - uid: 2114 + components: + - type: Transform + pos: -10.5,-59.5 + parent: 2 + - uid: 2115 + components: + - type: Transform + pos: -10.5,-60.5 + parent: 2 + - uid: 2116 + components: + - type: Transform + pos: -10.5,-61.5 + parent: 2 + - uid: 2117 + components: + - type: Transform + pos: -15.5,-56.5 + parent: 2 + - uid: 2118 + components: + - type: Transform + pos: -15.5,-54.5 + parent: 2 + - uid: 2119 + components: + - type: Transform + pos: -15.5,-53.5 + parent: 2 + - uid: 2120 + components: + - type: Transform + pos: -15.5,-52.5 + parent: 2 + - uid: 2121 + components: + - type: Transform + pos: -15.5,-51.5 + parent: 2 + - uid: 2122 + components: + - type: Transform + pos: -16.5,-51.5 + parent: 2 + - uid: 2123 + components: + - type: Transform + pos: -17.5,-51.5 + parent: 2 + - uid: 2124 + components: + - type: Transform + pos: -3.5,-51.5 + parent: 2 + - uid: 2125 + components: + - type: Transform + pos: -9.5,-51.5 + parent: 2 + - uid: 2126 + components: + - type: Transform + pos: -12.5,-51.5 + parent: 2 + - uid: 2127 + components: + - type: Transform + pos: -4.5,-44.5 + parent: 2 + - uid: 2128 + components: + - type: Transform + pos: -9.5,-52.5 + parent: 2 + - uid: 2129 + components: + - type: Transform + pos: -8.5,-52.5 + parent: 2 + - uid: 2130 + components: + - type: Transform + pos: -7.5,-52.5 + parent: 2 + - uid: 2131 + components: + - type: Transform + pos: 7.5,-52.5 + parent: 2 + - uid: 2132 + components: + - type: Transform + pos: 7.5,-53.5 + parent: 2 + - uid: 2133 + components: + - type: Transform + pos: 7.5,-54.5 + parent: 2 + - uid: 2134 + components: + - type: Transform + pos: 7.5,-55.5 + parent: 2 + - uid: 2135 + components: + - type: Transform + pos: 6.5,-55.5 + parent: 2 + - uid: 2136 + components: + - type: Transform + pos: 5.5,-55.5 + parent: 2 + - uid: 2137 + components: + - type: Transform + pos: 4.5,-55.5 + parent: 2 + - uid: 2138 + components: + - type: Transform + pos: 3.5,-55.5 + parent: 2 + - uid: 2139 + components: + - type: Transform + pos: 3.5,-54.5 + parent: 2 + - uid: 2140 + components: + - type: Transform + pos: 3.5,-53.5 + parent: 2 + - uid: 2141 + components: + - type: Transform + pos: 3.5,-56.5 + parent: 2 + - uid: 2142 + components: + - type: Transform + pos: 3.5,-57.5 + parent: 2 + - uid: 2143 + components: + - type: Transform + pos: 3.5,-58.5 + parent: 2 + - uid: 2144 + components: + - type: Transform + pos: 3.5,-59.5 + parent: 2 + - uid: 2145 + components: + - type: Transform + pos: 3.5,-60.5 + parent: 2 + - uid: 2146 + components: + - type: Transform + pos: 7.5,-56.5 + parent: 2 + - uid: 2147 + components: + - type: Transform + pos: 7.5,-57.5 + parent: 2 + - uid: 2148 + components: + - type: Transform + pos: 7.5,-58.5 + parent: 2 + - uid: 2149 + components: + - type: Transform + pos: 7.5,-59.5 + parent: 2 + - uid: 2150 + components: + - type: Transform + pos: 6.5,-50.5 + parent: 2 + - uid: 2151 + components: + - type: Transform + pos: 5.5,-50.5 + parent: 2 + - uid: 2152 + components: + - type: Transform + pos: 4.5,-50.5 + parent: 2 + - uid: 2153 + components: + - type: Transform + pos: 3.5,-50.5 + parent: 2 + - uid: 2154 + components: + - type: Transform + pos: 3.5,-49.5 + parent: 2 + - uid: 2155 + components: + - type: Transform + pos: 7.5,-51.5 + parent: 2 + - uid: 2156 + components: + - type: Transform + pos: 7.5,-49.5 + parent: 2 + - uid: 2157 + components: + - type: Transform + pos: 7.5,-48.5 + parent: 2 + - uid: 2158 + components: + - type: Transform + pos: 7.5,-47.5 + parent: 2 + - uid: 2159 + components: + - type: Transform + pos: 7.5,-46.5 + parent: 2 + - uid: 2160 + components: + - type: Transform + pos: 7.5,-50.5 + parent: 2 + - uid: 2161 + components: + - type: Transform + pos: 6.5,-46.5 + parent: 2 + - uid: 2162 + components: + - type: Transform + pos: 5.5,-46.5 + parent: 2 + - uid: 2163 + components: + - type: Transform + pos: 4.5,-46.5 + parent: 2 + - uid: 2164 + components: + - type: Transform + pos: 3.5,-46.5 + parent: 2 + - uid: 2165 + components: + - type: Transform + pos: 2.5,-46.5 + parent: 2 + - uid: 2166 + components: + - type: Transform + pos: 1.5,-46.5 + parent: 2 + - uid: 2167 + components: + - type: Transform + pos: 0.5,-46.5 + parent: 2 + - uid: 2168 + components: + - type: Transform + pos: -0.5,-46.5 + parent: 2 + - uid: 2169 + components: + - type: Transform + pos: -1.5,-46.5 + parent: 2 + - uid: 2170 + components: + - type: Transform + pos: -1.5,-47.5 + parent: 2 + - uid: 2171 + components: + - type: Transform + pos: 0.5,-45.5 + parent: 2 + - uid: 2172 + components: + - type: Transform + pos: 5.5,-45.5 + parent: 2 + - uid: 2173 + components: + - type: Transform + pos: 5.5,-44.5 + parent: 2 + - uid: 2174 + components: + - type: Transform + pos: 5.5,-43.5 + parent: 2 + - uid: 2175 + components: + - type: Transform + pos: 5.5,-42.5 + parent: 2 + - uid: 2176 + components: + - type: Transform + pos: 5.5,-41.5 + parent: 2 + - uid: 2177 + components: + - type: Transform + pos: 5.5,-40.5 + parent: 2 + - uid: 2178 + components: + - type: Transform + pos: 6.5,-41.5 + parent: 2 + - uid: 2179 + components: + - type: Transform + pos: 7.5,-41.5 + parent: 2 + - uid: 2180 + components: + - type: Transform + pos: 7.5,-40.5 + parent: 2 + - uid: 2181 + components: + - type: Transform + pos: 9.5,-50.5 + parent: 2 + - uid: 2182 + components: + - type: Transform + pos: 10.5,-50.5 + parent: 2 + - uid: 2183 + components: + - type: Transform + pos: 11.5,-50.5 + parent: 2 + - uid: 2184 + components: + - type: Transform + pos: 12.5,-50.5 + parent: 2 + - uid: 2185 + components: + - type: Transform + pos: 12.5,-51.5 + parent: 2 + - uid: 2186 + components: + - type: Transform + pos: 12.5,-52.5 + parent: 2 + - uid: 2187 + components: + - type: Transform + pos: 12.5,-53.5 + parent: 2 + - uid: 2188 + components: + - type: Transform + pos: 12.5,-54.5 + parent: 2 + - uid: 2189 + components: + - type: Transform + pos: 9.5,-35.5 + parent: 2 + - uid: 2190 + components: + - type: Transform + pos: 10.5,-35.5 + parent: 2 + - uid: 2191 + components: + - type: Transform + pos: 10.5,-34.5 + parent: 2 + - uid: 2192 + components: + - type: Transform + pos: 11.5,-34.5 + parent: 2 + - uid: 2193 + components: + - type: Transform + pos: 12.5,-34.5 + parent: 2 + - uid: 2194 + components: + - type: Transform + pos: 15.5,-34.5 + parent: 2 + - uid: 2195 + components: + - type: Transform + pos: 16.5,-34.5 + parent: 2 + - uid: 2196 + components: + - type: Transform + pos: 17.5,-34.5 + parent: 2 + - uid: 2197 + components: + - type: Transform + pos: -4.5,-51.5 + parent: 2 + - uid: 2198 + components: + - type: Transform + pos: 34.5,-44.5 + parent: 2 + - uid: 2199 + components: + - type: Transform + pos: 35.5,-44.5 + parent: 2 + - uid: 2200 + components: + - type: Transform + pos: 36.5,-44.5 + parent: 2 + - uid: 2201 + components: + - type: Transform + pos: 36.5,-45.5 + parent: 2 + - uid: 2202 + components: + - type: Transform + pos: 36.5,-43.5 + parent: 2 + - uid: 2203 + components: + - type: Transform + pos: 36.5,-42.5 + parent: 2 + - uid: 2204 + components: + - type: Transform + pos: 37.5,-43.5 + parent: 2 + - uid: 2205 + components: + - type: Transform + pos: 38.5,-43.5 + parent: 2 + - uid: 2206 + components: + - type: Transform + pos: 39.5,-43.5 + parent: 2 + - uid: 2207 + components: + - type: Transform + pos: 40.5,-43.5 + parent: 2 + - uid: 2208 + components: + - type: Transform + pos: 36.5,-46.5 + parent: 2 + - uid: 2209 + components: + - type: Transform + pos: 37.5,-46.5 + parent: 2 + - uid: 2210 + components: + - type: Transform + pos: 38.5,-46.5 + parent: 2 + - uid: 2211 + components: + - type: Transform + pos: 39.5,-46.5 + parent: 2 + - uid: 2212 + components: + - type: Transform + pos: 31.5,-44.5 + parent: 2 + - uid: 2213 + components: + - type: Transform + pos: 30.5,-44.5 + parent: 2 + - uid: 2214 + components: + - type: Transform + pos: 29.5,-44.5 + parent: 2 + - uid: 2215 + components: + - type: Transform + pos: 28.5,-44.5 + parent: 2 + - uid: 2216 + components: + - type: Transform + pos: 27.5,-44.5 + parent: 2 + - uid: 2217 + components: + - type: Transform + pos: 26.5,-44.5 + parent: 2 + - uid: 2218 + components: + - type: Transform + pos: 25.5,-44.5 + parent: 2 + - uid: 2219 + components: + - type: Transform + pos: 24.5,-44.5 + parent: 2 + - uid: 2220 + components: + - type: Transform + pos: 23.5,-44.5 + parent: 2 + - uid: 2221 + components: + - type: Transform + pos: 22.5,-44.5 + parent: 2 + - uid: 2222 + components: + - type: Transform + pos: 21.5,-44.5 + parent: 2 + - uid: 2223 + components: + - type: Transform + pos: 20.5,-44.5 + parent: 2 + - uid: 2224 + components: + - type: Transform + pos: 19.5,-44.5 + parent: 2 + - uid: 2225 + components: + - type: Transform + pos: 18.5,-44.5 + parent: 2 + - uid: 2226 + components: + - type: Transform + pos: 17.5,-44.5 + parent: 2 + - uid: 2227 + components: + - type: Transform + pos: 16.5,-44.5 + parent: 2 + - uid: 2228 + components: + - type: Transform + pos: 32.5,-47.5 + parent: 2 + - uid: 2229 + components: + - type: Transform + pos: 32.5,-48.5 + parent: 2 + - uid: 2230 + components: + - type: Transform + pos: 31.5,-48.5 + parent: 2 + - uid: 2231 + components: + - type: Transform + pos: 30.5,-48.5 + parent: 2 + - uid: 2232 + components: + - type: Transform + pos: 29.5,-48.5 + parent: 2 + - uid: 2233 + components: + - type: Transform + pos: 28.5,-48.5 + parent: 2 + - uid: 2234 + components: + - type: Transform + pos: 27.5,-48.5 + parent: 2 + - uid: 2235 + components: + - type: Transform + pos: 26.5,-48.5 + parent: 2 + - uid: 2236 + components: + - type: Transform + pos: 25.5,-48.5 + parent: 2 + - uid: 2237 + components: + - type: Transform + pos: 24.5,-48.5 + parent: 2 + - uid: 2238 + components: + - type: Transform + pos: 23.5,-48.5 + parent: 2 + - uid: 2239 + components: + - type: Transform + pos: 22.5,-48.5 + parent: 2 + - uid: 2240 + components: + - type: Transform + pos: 21.5,-48.5 + parent: 2 + - uid: 2241 + components: + - type: Transform + pos: 20.5,-48.5 + parent: 2 + - uid: 2242 + components: + - type: Transform + pos: 19.5,-48.5 + parent: 2 + - uid: 2243 + components: + - type: Transform + pos: 18.5,-48.5 + parent: 2 + - uid: 2244 + components: + - type: Transform + pos: 17.5,-48.5 + parent: 2 + - uid: 2245 + components: + - type: Transform + pos: 16.5,-48.5 + parent: 2 + - uid: 2246 + components: + - type: Transform + pos: 17.5,-49.5 + parent: 2 + - uid: 2247 + components: + - type: Transform + pos: 17.5,-49.5 + parent: 2 + - uid: 2248 + components: + - type: Transform + pos: 16.5,-47.5 + parent: 2 + - uid: 2249 + components: + - type: Transform + pos: 15.5,-47.5 + parent: 2 + - uid: 2250 + components: + - type: Transform + pos: 14.5,-47.5 + parent: 2 + - uid: 2251 + components: + - type: Transform + pos: 13.5,-47.5 + parent: 2 + - uid: 2252 + components: + - type: Transform + pos: 12.5,-47.5 + parent: 2 + - uid: 2253 + components: + - type: Transform + pos: 12.5,-46.5 + parent: 2 + - uid: 2254 + components: + - type: Transform + pos: 12.5,-45.5 + parent: 2 + - uid: 2255 + components: + - type: Transform + pos: 12.5,-44.5 + parent: 2 + - uid: 2256 + components: + - type: Transform + pos: 12.5,-43.5 + parent: 2 + - uid: 2257 + components: + - type: Transform + pos: 12.5,-42.5 + parent: 2 + - uid: 2258 + components: + - type: Transform + pos: 12.5,-41.5 + parent: 2 + - uid: 2259 + components: + - type: Transform + pos: 13.5,-41.5 + parent: 2 + - uid: 2260 + components: + - type: Transform + pos: 14.5,-41.5 + parent: 2 + - uid: 2261 + components: + - type: Transform + pos: 15.5,-41.5 + parent: 2 + - uid: 2262 + components: + - type: Transform + pos: 16.5,-41.5 + parent: 2 + - uid: 2263 + components: + - type: Transform + pos: 17.5,-41.5 + parent: 2 + - uid: 2264 + components: + - type: Transform + pos: 18.5,-41.5 + parent: 2 + - uid: 2265 + components: + - type: Transform + pos: 19.5,-41.5 + parent: 2 + - uid: 2266 + components: + - type: Transform + pos: 20.5,-41.5 + parent: 2 + - uid: 2267 + components: + - type: Transform + pos: 21.5,-41.5 + parent: 2 + - uid: 2268 + components: + - type: Transform + pos: 22.5,-41.5 + parent: 2 + - uid: 2269 + components: + - type: Transform + pos: 23.5,-41.5 + parent: 2 + - uid: 2270 + components: + - type: Transform + pos: 24.5,-41.5 + parent: 2 + - uid: 2271 + components: + - type: Transform + pos: 25.5,-41.5 + parent: 2 + - uid: 2272 + components: + - type: Transform + pos: 26.5,-41.5 + parent: 2 + - uid: 2273 + components: + - type: Transform + pos: 27.5,-41.5 + parent: 2 + - uid: 2274 + components: + - type: Transform + pos: 28.5,-41.5 + parent: 2 + - uid: 2275 + components: + - type: Transform + pos: 29.5,-41.5 + parent: 2 + - uid: 2276 + components: + - type: Transform + pos: 30.5,-41.5 + parent: 2 + - uid: 2277 + components: + - type: Transform + pos: 16.5,-40.5 + parent: 2 + - uid: 2278 + components: + - type: Transform + pos: 24.5,-52.5 + parent: 2 + - uid: 2279 + components: + - type: Transform + pos: 24.5,-53.5 + parent: 2 + - uid: 2280 + components: + - type: Transform + pos: 24.5,-54.5 + parent: 2 + - uid: 2281 + components: + - type: Transform + pos: 24.5,-55.5 + parent: 2 + - uid: 2282 + components: + - type: Transform + pos: 24.5,-56.5 + parent: 2 + - uid: 2283 + components: + - type: Transform + pos: 24.5,-57.5 + parent: 2 + - uid: 2284 + components: + - type: Transform + pos: 24.5,-58.5 + parent: 2 + - uid: 2285 + components: + - type: Transform + pos: 24.5,-59.5 + parent: 2 + - uid: 2286 + components: + - type: Transform + pos: 24.5,-60.5 + parent: 2 + - uid: 2287 + components: + - type: Transform + pos: 24.5,-61.5 + parent: 2 + - uid: 2288 + components: + - type: Transform + pos: 24.5,-62.5 + parent: 2 + - uid: 2289 + components: + - type: Transform + pos: 30.5,-51.5 + parent: 2 + - uid: 2290 + components: + - type: Transform + pos: 30.5,-52.5 + parent: 2 + - uid: 2291 + components: + - type: Transform + pos: 30.5,-53.5 + parent: 2 + - uid: 2292 + components: + - type: Transform + pos: 30.5,-54.5 + parent: 2 + - uid: 2293 + components: + - type: Transform + pos: 30.5,-55.5 + parent: 2 + - uid: 2294 + components: + - type: Transform + pos: 30.5,-56.5 + parent: 2 + - uid: 2295 + components: + - type: Transform + pos: 30.5,-57.5 + parent: 2 + - uid: 2296 + components: + - type: Transform + pos: 30.5,-58.5 + parent: 2 + - uid: 2297 + components: + - type: Transform + pos: 30.5,-59.5 + parent: 2 + - uid: 2298 + components: + - type: Transform + pos: 30.5,-60.5 + parent: 2 + - uid: 2299 + components: + - type: Transform + pos: 30.5,-61.5 + parent: 2 + - uid: 2300 + components: + - type: Transform + pos: 30.5,-62.5 + parent: 2 + - uid: 2301 + components: + - type: Transform + pos: 27.5,-49.5 + parent: 2 + - uid: 2302 + components: + - type: Transform + pos: 27.5,-50.5 + parent: 2 + - uid: 2303 + components: + - type: Transform + pos: 27.5,-51.5 + parent: 2 + - uid: 2304 + components: + - type: Transform + pos: 27.5,-52.5 + parent: 2 + - uid: 2305 + components: + - type: Transform + pos: 27.5,-53.5 + parent: 2 + - uid: 2306 + components: + - type: Transform + pos: 27.5,-54.5 + parent: 2 + - uid: 2307 + components: + - type: Transform + pos: 27.5,-55.5 + parent: 2 + - uid: 2308 + components: + - type: Transform + pos: 27.5,-56.5 + parent: 2 + - uid: 2309 + components: + - type: Transform + pos: 27.5,-57.5 + parent: 2 + - uid: 2310 + components: + - type: Transform + pos: 27.5,-58.5 + parent: 2 + - uid: 2311 + components: + - type: Transform + pos: 27.5,-59.5 + parent: 2 + - uid: 2312 + components: + - type: Transform + pos: 27.5,-60.5 + parent: 2 + - uid: 2313 + components: + - type: Transform + pos: 27.5,-61.5 + parent: 2 + - uid: 2314 + components: + - type: Transform + pos: 27.5,-62.5 + parent: 2 + - uid: 2315 + components: + - type: Transform + pos: 32.5,-49.5 + parent: 2 + - uid: 2316 + components: + - type: Transform + pos: 34.5,-49.5 + parent: 2 + - uid: 2317 + components: + - type: Transform + pos: 35.5,-49.5 + parent: 2 + - uid: 2318 + components: + - type: Transform + pos: 36.5,-49.5 + parent: 2 + - uid: 2319 + components: + - type: Transform + pos: 37.5,-49.5 + parent: 2 + - uid: 2320 + components: + - type: Transform + pos: 35.5,-37.5 + parent: 2 + - uid: 2321 + components: + - type: Transform + pos: 34.5,-36.5 + parent: 2 + - uid: 2322 + components: + - type: Transform + pos: 34.5,-35.5 + parent: 2 + - uid: 2323 + components: + - type: Transform + pos: 34.5,-34.5 + parent: 2 + - uid: 2324 + components: + - type: Transform + pos: 34.5,-33.5 + parent: 2 + - uid: 2325 + components: + - type: Transform + pos: 34.5,-32.5 + parent: 2 + - uid: 2326 + components: + - type: Transform + pos: 34.5,-31.5 + parent: 2 + - uid: 2327 + components: + - type: Transform + pos: 35.5,-28.5 + parent: 2 + - uid: 2328 + components: + - type: Transform + pos: -14.5,-51.5 + parent: 2 + - uid: 2329 + components: + - type: Transform + pos: -3.5,-42.5 + parent: 2 + - uid: 2330 + components: + - type: Transform + pos: -0.5,-51.5 + parent: 2 + - uid: 2331 + components: + - type: Transform + pos: -5.5,-48.5 + parent: 2 + - uid: 2332 + components: + - type: Transform + pos: -4.5,-42.5 + parent: 2 + - uid: 2333 + components: + - type: Transform + pos: -4.5,-46.5 + parent: 2 + - uid: 2334 + components: + - type: Transform + pos: -4.5,-47.5 + parent: 2 + - uid: 2335 + components: + - type: Transform + pos: -4.5,-48.5 + parent: 2 + - uid: 2336 + components: + - type: Transform + pos: -28.5,-56.5 + parent: 2 + - uid: 2337 + components: + - type: Transform + pos: -28.5,-58.5 + parent: 2 + - uid: 2338 + components: + - type: Transform + pos: -29.5,-58.5 + parent: 2 + - uid: 2339 + components: + - type: Transform + pos: -30.5,-58.5 + parent: 2 + - uid: 2340 + components: + - type: Transform + pos: -31.5,-58.5 + parent: 2 + - uid: 2341 + components: + - type: Transform + pos: -31.5,-59.5 + parent: 2 + - uid: 2342 + components: + - type: Transform + pos: -31.5,-60.5 + parent: 2 + - uid: 2343 + components: + - type: Transform + pos: -31.5,-61.5 + parent: 2 + - uid: 2344 + components: + - type: Transform + pos: -31.5,-62.5 + parent: 2 + - uid: 2345 + components: + - type: Transform + pos: -31.5,-63.5 + parent: 2 + - uid: 2346 + components: + - type: Transform + pos: -30.5,-63.5 + parent: 2 + - uid: 2347 + components: + - type: Transform + pos: -29.5,-63.5 + parent: 2 + - uid: 2348 + components: + - type: Transform + pos: -28.5,-63.5 + parent: 2 + - uid: 2349 + components: + - type: Transform + pos: -27.5,-63.5 + parent: 2 + - uid: 2350 + components: + - type: Transform + pos: -26.5,-63.5 + parent: 2 + - uid: 2351 + components: + - type: Transform + pos: -25.5,-63.5 + parent: 2 + - uid: 2352 + components: + - type: Transform + pos: -24.5,-63.5 + parent: 2 + - uid: 2353 + components: + - type: Transform + pos: -32.5,-63.5 + parent: 2 + - uid: 2354 + components: + - type: Transform + pos: -33.5,-63.5 + parent: 2 + - uid: 2355 + components: + - type: Transform + pos: -34.5,-63.5 + parent: 2 + - uid: 2356 + components: + - type: Transform + pos: -35.5,-63.5 + parent: 2 + - uid: 2357 + components: + - type: Transform + pos: -32.5,-59.5 + parent: 2 + - uid: 2358 + components: + - type: Transform + pos: -33.5,-59.5 + parent: 2 + - uid: 2359 + components: + - type: Transform + pos: -34.5,-59.5 + parent: 2 + - uid: 2360 + components: + - type: Transform + pos: -35.5,-59.5 + parent: 2 + - uid: 2361 + components: + - type: Transform + pos: -25.5,-64.5 + parent: 2 + - uid: 2362 + components: + - type: Transform + pos: -25.5,-65.5 + parent: 2 + - uid: 2363 + components: + - type: Transform + pos: -25.5,-66.5 + parent: 2 + - uid: 2364 + components: + - type: Transform + pos: -26.5,-66.5 + parent: 2 + - uid: 2365 + components: + - type: Transform + pos: -23.5,-63.5 + parent: 2 + - uid: 2366 + components: + - type: Transform + pos: -23.5,-64.5 + parent: 2 + - uid: 2367 + components: + - type: Transform + pos: -23.5,-65.5 + parent: 2 + - uid: 2368 + components: + - type: Transform + pos: -23.5,-66.5 + parent: 2 + - uid: 2369 + components: + - type: Transform + pos: -23.5,-67.5 + parent: 2 + - uid: 2370 + components: + - type: Transform + pos: -23.5,-62.5 + parent: 2 + - uid: 2371 + components: + - type: Transform + pos: -23.5,-61.5 + parent: 2 + - uid: 2372 + components: + - type: Transform + pos: -23.5,-60.5 + parent: 2 + - uid: 2373 + components: + - type: Transform + pos: -23.5,-59.5 + parent: 2 + - uid: 2374 + components: + - type: Transform + pos: -24.5,-59.5 + parent: 2 + - uid: 2375 + components: + - type: Transform + pos: -25.5,-59.5 + parent: 2 + - uid: 2376 + components: + - type: Transform + pos: -26.5,-59.5 + parent: 2 + - uid: 2377 + components: + - type: Transform + pos: 24.5,-67.5 + parent: 2 + - uid: 2378 + components: + - type: Transform + pos: 24.5,-66.5 + parent: 2 + - uid: 2379 + components: + - type: Transform + pos: 26.5,-66.5 + parent: 2 + - uid: 2380 + components: + - type: Transform + pos: 27.5,-66.5 + parent: 2 + - uid: 2381 + components: + - type: Transform + pos: 24.5,-69.5 + parent: 2 + - uid: 2382 + components: + - type: Transform + pos: 24.5,-70.5 + parent: 2 + - uid: 2383 + components: + - type: Transform + pos: 24.5,-71.5 + parent: 2 + - uid: 2384 + components: + - type: Transform + pos: 24.5,-72.5 + parent: 2 + - uid: 2385 + components: + - type: Transform + pos: 25.5,-72.5 + parent: 2 + - uid: 2386 + components: + - type: Transform + pos: 21.5,-68.5 + parent: 2 + - uid: 2387 + components: + - type: Transform + pos: 20.5,-68.5 + parent: 2 + - uid: 2388 + components: + - type: Transform + pos: 20.5,-67.5 + parent: 2 + - uid: 2389 + components: + - type: Transform + pos: 20.5,-66.5 + parent: 2 + - uid: 2390 + components: + - type: Transform + pos: 20.5,-65.5 + parent: 2 + - uid: 2391 + components: + - type: Transform + pos: 20.5,-64.5 + parent: 2 + - uid: 2392 + components: + - type: Transform + pos: 20.5,-63.5 + parent: 2 + - uid: 2393 + components: + - type: Transform + pos: 20.5,-62.5 + parent: 2 + - uid: 2394 + components: + - type: Transform + pos: 20.5,-61.5 + parent: 2 + - uid: 2395 + components: + - type: Transform + pos: 20.5,-60.5 + parent: 2 + - uid: 2396 + components: + - type: Transform + pos: 20.5,-59.5 + parent: 2 + - uid: 2397 + components: + - type: Transform + pos: 20.5,-58.5 + parent: 2 + - uid: 2398 + components: + - type: Transform + pos: 20.5,-57.5 + parent: 2 + - uid: 2399 + components: + - type: Transform + pos: 20.5,-56.5 + parent: 2 + - uid: 2400 + components: + - type: Transform + pos: 20.5,-55.5 + parent: 2 + - uid: 2401 + components: + - type: Transform + pos: 20.5,-54.5 + parent: 2 + - uid: 2402 + components: + - type: Transform + pos: 19.5,-54.5 + parent: 2 + - uid: 2403 + components: + - type: Transform + pos: 18.5,-54.5 + parent: 2 + - uid: 2404 + components: + - type: Transform + pos: 17.5,-54.5 + parent: 2 + - uid: 2405 + components: + - type: Transform + pos: 19.5,-58.5 + parent: 2 + - uid: 2406 + components: + - type: Transform + pos: 18.5,-58.5 + parent: 2 + - uid: 2407 + components: + - type: Transform + pos: 17.5,-58.5 + parent: 2 + - uid: 2408 + components: + - type: Transform + pos: 19.5,-62.5 + parent: 2 + - uid: 2409 + components: + - type: Transform + pos: 18.5,-62.5 + parent: 2 + - uid: 2410 + components: + - type: Transform + pos: 17.5,-62.5 + parent: 2 + - uid: 2411 + components: + - type: Transform + pos: 28.5,-66.5 + parent: 2 + - uid: 2412 + components: + - type: Transform + pos: 29.5,-66.5 + parent: 2 + - uid: 2413 + components: + - type: Transform + pos: 30.5,-66.5 + parent: 2 + - uid: 2414 + components: + - type: Transform + pos: 31.5,-66.5 + parent: 2 + - uid: 2415 + components: + - type: Transform + pos: 32.5,-66.5 + parent: 2 + - uid: 2416 + components: + - type: Transform + pos: 33.5,-66.5 + parent: 2 + - uid: 2417 + components: + - type: Transform + pos: 34.5,-66.5 + parent: 2 + - uid: 2418 + components: + - type: Transform + pos: 34.5,-65.5 + parent: 2 + - uid: 2419 + components: + - type: Transform + pos: 34.5,-64.5 + parent: 2 + - uid: 2420 + components: + - type: Transform + pos: 34.5,-63.5 + parent: 2 + - uid: 2421 + components: + - type: Transform + pos: 34.5,-62.5 + parent: 2 + - uid: 2422 + components: + - type: Transform + pos: 35.5,-62.5 + parent: 2 + - uid: 2423 + components: + - type: Transform + pos: 36.5,-62.5 + parent: 2 + - uid: 2424 + components: + - type: Transform + pos: 37.5,-62.5 + parent: 2 + - uid: 2425 + components: + - type: Transform + pos: 34.5,-61.5 + parent: 2 + - uid: 2426 + components: + - type: Transform + pos: 34.5,-60.5 + parent: 2 + - uid: 2427 + components: + - type: Transform + pos: 34.5,-59.5 + parent: 2 + - uid: 2428 + components: + - type: Transform + pos: 34.5,-58.5 + parent: 2 + - uid: 2429 + components: + - type: Transform + pos: 35.5,-58.5 + parent: 2 + - uid: 2430 + components: + - type: Transform + pos: 36.5,-58.5 + parent: 2 + - uid: 2431 + components: + - type: Transform + pos: 37.5,-58.5 + parent: 2 + - uid: 2432 + components: + - type: Transform + pos: 34.5,-57.5 + parent: 2 + - uid: 2433 + components: + - type: Transform + pos: 34.5,-56.5 + parent: 2 + - uid: 2434 + components: + - type: Transform + pos: 34.5,-55.5 + parent: 2 + - uid: 2435 + components: + - type: Transform + pos: 34.5,-54.5 + parent: 2 + - uid: 2436 + components: + - type: Transform + pos: 35.5,-54.5 + parent: 2 + - uid: 2437 + components: + - type: Transform + pos: 36.5,-54.5 + parent: 2 + - uid: 2438 + components: + - type: Transform + pos: 37.5,-54.5 + parent: 2 + - uid: 2439 + components: + - type: Transform + pos: 37.5,-31.5 + parent: 2 + - uid: 2440 + components: + - type: Transform + pos: 38.5,-31.5 + parent: 2 + - uid: 2441 + components: + - type: Transform + pos: 39.5,-31.5 + parent: 2 + - uid: 2442 + components: + - type: Transform + pos: 40.5,-31.5 + parent: 2 + - uid: 2443 + components: + - type: Transform + pos: 41.5,-31.5 + parent: 2 + - uid: 2444 + components: + - type: Transform + pos: 41.5,-32.5 + parent: 2 + - uid: 2445 + components: + - type: Transform + pos: 41.5,-33.5 + parent: 2 + - uid: 2446 + components: + - type: Transform + pos: 11.5,-10.5 + parent: 2 + - uid: 2447 + components: + - type: Transform + pos: 10.5,-10.5 + parent: 2 + - uid: 2448 + components: + - type: Transform + pos: 9.5,-10.5 + parent: 2 + - uid: 2449 + components: + - type: Transform + pos: 8.5,-10.5 + parent: 2 + - uid: 2450 + components: + - type: Transform + pos: 8.5,-9.5 + parent: 2 + - uid: 2451 + components: + - type: Transform + pos: 11.5,-11.5 + parent: 2 + - uid: 2452 + components: + - type: Transform + pos: 11.5,-12.5 + parent: 2 + - uid: 2453 + components: + - type: Transform + pos: 10.5,-12.5 + parent: 2 + - uid: 2454 + components: + - type: Transform + pos: 9.5,-12.5 + parent: 2 + - uid: 2455 + components: + - type: Transform + pos: 9.5,-13.5 + parent: 2 + - uid: 2456 + components: + - type: Transform + pos: 9.5,-14.5 + parent: 2 + - uid: 2457 + components: + - type: Transform + pos: 9.5,-15.5 + parent: 2 + - uid: 2458 + components: + - type: Transform + pos: 8.5,-15.5 + parent: 2 + - uid: 2459 + components: + - type: Transform + pos: 7.5,-15.5 + parent: 2 + - uid: 2460 + components: + - type: Transform + pos: 6.5,-15.5 + parent: 2 + - uid: 2461 + components: + - type: Transform + pos: 5.5,-15.5 + parent: 2 + - uid: 2462 + components: + - type: Transform + pos: 5.5,-16.5 + parent: 2 + - uid: 2463 + components: + - type: Transform + pos: 4.5,-16.5 + parent: 2 + - uid: 2464 + components: + - type: Transform + pos: 5.5,-14.5 + parent: 2 + - uid: 2465 + components: + - type: Transform + pos: 5.5,-13.5 + parent: 2 + - uid: 2466 + components: + - type: Transform + pos: 5.5,-12.5 + parent: 2 + - uid: 2467 + components: + - type: Transform + pos: 13.5,-8.5 + parent: 2 + - uid: 2468 + components: + - type: Transform + pos: 13.5,-7.5 + parent: 2 + - uid: 2469 + components: + - type: Transform + pos: 13.5,-6.5 + parent: 2 + - uid: 2470 + components: + - type: Transform + pos: 12.5,-6.5 + parent: 2 + - uid: 2471 + components: + - type: Transform + pos: 14.5,-6.5 + parent: 2 + - uid: 2472 + components: + - type: Transform + pos: 15.5,-6.5 + parent: 2 + - uid: 2473 + components: + - type: Transform + pos: 16.5,-6.5 + parent: 2 + - uid: 2474 + components: + - type: Transform + pos: 16.5,-5.5 + parent: 2 + - uid: 2475 + components: + - type: Transform + pos: 16.5,-4.5 + parent: 2 + - uid: 2476 + components: + - type: Transform + pos: 16.5,-3.5 + parent: 2 + - uid: 2477 + components: + - type: Transform + pos: 15.5,-3.5 + parent: 2 + - uid: 2478 + components: + - type: Transform + pos: 14.5,-3.5 + parent: 2 + - uid: 2479 + components: + - type: Transform + pos: 17.5,-3.5 + parent: 2 + - uid: 2480 + components: + - type: Transform + pos: 18.5,-3.5 + parent: 2 + - uid: 2481 + components: + - type: Transform + pos: 19.5,-3.5 + parent: 2 + - uid: 2482 + components: + - type: Transform + pos: 20.5,-3.5 + parent: 2 + - uid: 2483 + components: + - type: Transform + pos: 21.5,-3.5 + parent: 2 + - uid: 2484 + components: + - type: Transform + pos: 22.5,-3.5 + parent: 2 + - uid: 2485 + components: + - type: Transform + pos: 23.5,-3.5 + parent: 2 + - uid: 2486 + components: + - type: Transform + pos: 22.5,-4.5 + parent: 2 + - uid: 2487 + components: + - type: Transform + pos: 22.5,-5.5 + parent: 2 + - uid: 2488 + components: + - type: Transform + pos: 22.5,-6.5 + parent: 2 + - uid: 2489 + components: + - type: Transform + pos: 22.5,-7.5 + parent: 2 + - uid: 2490 + components: + - type: Transform + pos: 22.5,-8.5 + parent: 2 + - uid: 2491 + components: + - type: Transform + pos: 23.5,-8.5 + parent: 2 + - uid: 2492 + components: + - type: Transform + pos: 23.5,-9.5 + parent: 2 + - uid: 2493 + components: + - type: Transform + pos: 23.5,-10.5 + parent: 2 + - uid: 2494 + components: + - type: Transform + pos: 23.5,-11.5 + parent: 2 + - uid: 2495 + components: + - type: Transform + pos: 23.5,-12.5 + parent: 2 + - uid: 2496 + components: + - type: Transform + pos: 23.5,-13.5 + parent: 2 + - uid: 2497 + components: + - type: Transform + pos: 23.5,-14.5 + parent: 2 + - uid: 2498 + components: + - type: Transform + pos: 24.5,-14.5 + parent: 2 + - uid: 2499 + components: + - type: Transform + pos: 25.5,-14.5 + parent: 2 + - uid: 2500 + components: + - type: Transform + pos: 26.5,-14.5 + parent: 2 + - uid: 2501 + components: + - type: Transform + pos: 26.5,-13.5 + parent: 2 + - uid: 2502 + components: + - type: Transform + pos: 26.5,-12.5 + parent: 2 + - uid: 2503 + components: + - type: Transform + pos: 26.5,-11.5 + parent: 2 + - uid: 2504 + components: + - type: Transform + pos: 27.5,-11.5 + parent: 2 + - uid: 2505 + components: + - type: Transform + pos: 28.5,-11.5 + parent: 2 + - uid: 2506 + components: + - type: Transform + pos: 29.5,-11.5 + parent: 2 + - uid: 2507 + components: + - type: Transform + pos: 24.5,-8.5 + parent: 2 + - uid: 2508 + components: + - type: Transform + pos: 25.5,-8.5 + parent: 2 + - uid: 2509 + components: + - type: Transform + pos: 26.5,-8.5 + parent: 2 + - uid: 2510 + components: + - type: Transform + pos: 27.5,-8.5 + parent: 2 + - uid: 2511 + components: + - type: Transform + pos: 27.5,-7.5 + parent: 2 + - uid: 2512 + components: + - type: Transform + pos: 28.5,-7.5 + parent: 2 + - uid: 2513 + components: + - type: Transform + pos: 0.5,-29.5 + parent: 2 + - uid: 2514 + components: + - type: Transform + pos: 0.5,-30.5 + parent: 2 + - uid: 2515 + components: + - type: Transform + pos: 0.5,-31.5 + parent: 2 + - uid: 2516 + components: + - type: Transform + pos: 0.5,-32.5 + parent: 2 + - uid: 2517 + components: + - type: Transform + pos: 0.5,-33.5 + parent: 2 + - uid: 2518 + components: + - type: Transform + pos: 0.5,-34.5 + parent: 2 + - uid: 2519 + components: + - type: Transform + pos: 0.5,-35.5 + parent: 2 + - uid: 2520 + components: + - type: Transform + pos: 0.5,-36.5 + parent: 2 + - uid: 2521 + components: + - type: Transform + pos: 0.5,-37.5 + parent: 2 + - uid: 2522 + components: + - type: Transform + pos: 0.5,-38.5 + parent: 2 + - uid: 2523 + components: + - type: Transform + pos: 0.5,-39.5 + parent: 2 + - uid: 2524 + components: + - type: Transform + pos: 0.5,-40.5 + parent: 2 + - uid: 2525 + components: + - type: Transform + pos: 0.5,-41.5 + parent: 2 + - uid: 2526 + components: + - type: Transform + pos: 0.5,-27.5 + parent: 2 + - uid: 2527 + components: + - type: Transform + pos: 0.5,-26.5 + parent: 2 + - uid: 2528 + components: + - type: Transform + pos: 0.5,-25.5 + parent: 2 + - uid: 2529 + components: + - type: Transform + pos: 0.5,-24.5 + parent: 2 + - uid: 2530 + components: + - type: Transform + pos: 0.5,-23.5 + parent: 2 + - uid: 2531 + components: + - type: Transform + pos: 0.5,-22.5 + parent: 2 + - uid: 2532 + components: + - type: Transform + pos: 0.5,-21.5 + parent: 2 + - uid: 2533 + components: + - type: Transform + pos: 0.5,-20.5 + parent: 2 + - uid: 2534 + components: + - type: Transform + pos: 0.5,-19.5 + parent: 2 + - uid: 2535 + components: + - type: Transform + pos: 0.5,-18.5 + parent: 2 + - uid: 2536 + components: + - type: Transform + pos: 0.5,-17.5 + parent: 2 + - uid: 2537 + components: + - type: Transform + pos: 0.5,-16.5 + parent: 2 + - uid: 2538 + components: + - type: Transform + pos: 0.5,-15.5 + parent: 2 + - uid: 2539 + components: + - type: Transform + pos: 0.5,-14.5 + parent: 2 + - uid: 2540 + components: + - type: Transform + pos: 25.5,-1.5 + parent: 2 + - uid: 2541 + components: + - type: Transform + pos: 25.5,-0.5 + parent: 2 + - uid: 2542 + components: + - type: Transform + pos: 25.5,0.5 + parent: 2 + - uid: 2543 + components: + - type: Transform + pos: 24.5,0.5 + parent: 2 + - uid: 2544 + components: + - type: Transform + pos: 23.5,0.5 + parent: 2 + - uid: 2545 + components: + - type: Transform + pos: 22.5,0.5 + parent: 2 + - uid: 2546 + components: + - type: Transform + pos: 21.5,0.5 + parent: 2 + - uid: 2547 + components: + - type: Transform + pos: 20.5,0.5 + parent: 2 + - uid: 2548 + components: + - type: Transform + pos: 19.5,0.5 + parent: 2 + - uid: 2549 + components: + - type: Transform + pos: 18.5,0.5 + parent: 2 + - uid: 2550 + components: + - type: Transform + pos: 17.5,0.5 + parent: 2 + - uid: 2551 + components: + - type: Transform + pos: 26.5,0.5 + parent: 2 + - uid: 2552 + components: + - type: Transform + pos: 27.5,0.5 + parent: 2 + - uid: 2553 + components: + - type: Transform + pos: 28.5,0.5 + parent: 2 + - uid: 2554 + components: + - type: Transform + pos: 29.5,0.5 + parent: 2 + - uid: 2555 + components: + - type: Transform + pos: 30.5,0.5 + parent: 2 + - uid: 2556 + components: + - type: Transform + pos: 31.5,0.5 + parent: 2 + - uid: 2557 + components: + - type: Transform + pos: 32.5,0.5 + parent: 2 + - uid: 2558 + components: + - type: Transform + pos: 33.5,0.5 + parent: 2 + - uid: 2559 + components: + - type: Transform + pos: 34.5,0.5 + parent: 2 + - uid: 2560 + components: + - type: Transform + pos: 35.5,0.5 + parent: 2 + - uid: 2561 + components: + - type: Transform + pos: 17.5,5.5 + parent: 2 + - uid: 2562 + components: + - type: Transform + pos: 17.5,6.5 + parent: 2 + - uid: 2563 + components: + - type: Transform + pos: 17.5,7.5 + parent: 2 + - uid: 2564 + components: + - type: Transform + pos: 18.5,7.5 + parent: 2 + - uid: 2565 + components: + - type: Transform + pos: 19.5,7.5 + parent: 2 + - uid: 2566 + components: + - type: Transform + pos: 20.5,7.5 + parent: 2 + - uid: 2567 + components: + - type: Transform + pos: 21.5,7.5 + parent: 2 + - uid: 2568 + components: + - type: Transform + pos: 22.5,7.5 + parent: 2 + - uid: 2569 + components: + - type: Transform + pos: 23.5,7.5 + parent: 2 + - uid: 2570 + components: + - type: Transform + pos: 24.5,7.5 + parent: 2 + - uid: 2571 + components: + - type: Transform + pos: 25.5,7.5 + parent: 2 + - uid: 2572 + components: + - type: Transform + pos: 26.5,7.5 + parent: 2 + - uid: 2573 + components: + - type: Transform + pos: 27.5,7.5 + parent: 2 + - uid: 2574 + components: + - type: Transform + pos: 19.5,6.5 + parent: 2 + - uid: 2575 + components: + - type: Transform + pos: 22.5,6.5 + parent: 2 + - uid: 2576 + components: + - type: Transform + pos: 25.5,6.5 + parent: 2 + - uid: 2577 + components: + - type: Transform + pos: 16.5,7.5 + parent: 2 + - uid: 2578 + components: + - type: Transform + pos: 17.5,8.5 + parent: 2 + - uid: 2579 + components: + - type: Transform + pos: 17.5,9.5 + parent: 2 + - uid: 2580 + components: + - type: Transform + pos: 17.5,10.5 + parent: 2 + - uid: 2581 + components: + - type: Transform + pos: 17.5,11.5 + parent: 2 + - uid: 2582 + components: + - type: Transform + pos: 17.5,12.5 + parent: 2 + - uid: 2583 + components: + - type: Transform + pos: 17.5,13.5 + parent: 2 + - uid: 2584 + components: + - type: Transform + pos: 18.5,13.5 + parent: 2 + - uid: 2585 + components: + - type: Transform + pos: 19.5,13.5 + parent: 2 + - uid: 2586 + components: + - type: Transform + pos: 20.5,13.5 + parent: 2 + - uid: 2587 + components: + - type: Transform + pos: 21.5,13.5 + parent: 2 + - uid: 2588 + components: + - type: Transform + pos: 22.5,13.5 + parent: 2 + - uid: 2589 + components: + - type: Transform + pos: 23.5,13.5 + parent: 2 + - uid: 2590 + components: + - type: Transform + pos: 24.5,13.5 + parent: 2 + - uid: 2591 + components: + - type: Transform + pos: 25.5,13.5 + parent: 2 + - uid: 2592 + components: + - type: Transform + pos: 24.5,12.5 + parent: 2 + - uid: 2593 + components: + - type: Transform + pos: 24.5,11.5 + parent: 2 + - uid: 2594 + components: + - type: Transform + pos: 16.5,13.5 + parent: 2 + - uid: 2595 + components: + - type: Transform + pos: 16.5,14.5 + parent: 2 + - uid: 2596 + components: + - type: Transform + pos: 16.5,15.5 + parent: 2 + - uid: 2597 + components: + - type: Transform + pos: 16.5,16.5 + parent: 2 + - uid: 2598 + components: + - type: Transform + pos: 16.5,17.5 + parent: 2 + - uid: 2599 + components: + - type: Transform + pos: 23.5,14.5 + parent: 2 + - uid: 2600 + components: + - type: Transform + pos: 23.5,15.5 + parent: 2 + - uid: 2601 + components: + - type: Transform + pos: 23.5,16.5 + parent: 2 + - uid: 2602 + components: + - type: Transform + pos: 23.5,17.5 + parent: 2 + - uid: 2603 + components: + - type: Transform + pos: 22.5,17.5 + parent: 2 + - uid: 2604 + components: + - type: Transform + pos: 21.5,17.5 + parent: 2 + - uid: 2605 + components: + - type: Transform + pos: 24.5,17.5 + parent: 2 + - uid: 2606 + components: + - type: Transform + pos: 25.5,17.5 + parent: 2 + - uid: 2607 + components: + - type: Transform + pos: 22.5,18.5 + parent: 2 + - uid: 2608 + components: + - type: Transform + pos: 22.5,19.5 + parent: 2 + - uid: 2609 + components: + - type: Transform + pos: 22.5,20.5 + parent: 2 + - uid: 2610 + components: + - type: Transform + pos: 22.5,21.5 + parent: 2 + - uid: 2611 + components: + - type: Transform + pos: 22.5,22.5 + parent: 2 + - uid: 2612 + components: + - type: Transform + pos: 23.5,22.5 + parent: 2 + - uid: 2613 + components: + - type: Transform + pos: 24.5,22.5 + parent: 2 + - uid: 2614 + components: + - type: Transform + pos: 25.5,22.5 + parent: 2 + - uid: 2615 + components: + - type: Transform + pos: 28.5,7.5 + parent: 2 + - uid: 2616 + components: + - type: Transform + pos: 29.5,7.5 + parent: 2 + - uid: 2617 + components: + - type: Transform + pos: 30.5,7.5 + parent: 2 + - uid: 2618 + components: + - type: Transform + pos: 31.5,7.5 + parent: 2 + - uid: 2619 + components: + - type: Transform + pos: 32.5,7.5 + parent: 2 + - uid: 2620 + components: + - type: Transform + pos: 33.5,7.5 + parent: 2 + - uid: 2621 + components: + - type: Transform + pos: 34.5,7.5 + parent: 2 + - uid: 2622 + components: + - type: Transform + pos: 32.5,8.5 + parent: 2 + - uid: 2623 + components: + - type: Transform + pos: 32.5,9.5 + parent: 2 + - uid: 2624 + components: + - type: Transform + pos: 32.5,10.5 + parent: 2 + - uid: 2625 + components: + - type: Transform + pos: 33.5,10.5 + parent: 2 + - uid: 2626 + components: + - type: Transform + pos: 34.5,10.5 + parent: 2 + - uid: 2627 + components: + - type: Transform + pos: 29.5,8.5 + parent: 2 + - uid: 2628 + components: + - type: Transform + pos: 29.5,9.5 + parent: 2 + - uid: 2629 + components: + - type: Transform + pos: 29.5,10.5 + parent: 2 + - uid: 2630 + components: + - type: Transform + pos: 29.5,11.5 + parent: 2 + - uid: 2631 + components: + - type: Transform + pos: 29.5,12.5 + parent: 2 + - uid: 2632 + components: + - type: Transform + pos: 34.5,6.5 + parent: 2 + - uid: 2633 + components: + - type: Transform + pos: 34.5,5.5 + parent: 2 + - uid: 2634 + components: + - type: Transform + pos: 37.5,18.5 + parent: 2 + - uid: 2635 + components: + - type: Transform + pos: 36.5,12.5 + parent: 2 + - uid: 2636 + components: + - type: Transform + pos: 36.5,13.5 + parent: 2 + - uid: 2637 + components: + - type: Transform + pos: 36.5,14.5 + parent: 2 + - uid: 2638 + components: + - type: Transform + pos: 36.5,15.5 + parent: 2 + - uid: 2639 + components: + - type: Transform + pos: 36.5,16.5 + parent: 2 + - uid: 2640 + components: + - type: Transform + pos: 36.5,17.5 + parent: 2 + - uid: 2641 + components: + - type: Transform + pos: 36.5,18.5 + parent: 2 + - uid: 2642 + components: + - type: Transform + pos: 33.5,17.5 + parent: 2 + - uid: 2643 + components: + - type: Transform + pos: 28.5,23.5 + parent: 2 + - uid: 2644 + components: + - type: Transform + pos: 27.5,23.5 + parent: 2 + - uid: 2645 + components: + - type: Transform + pos: 35.5,17.5 + parent: 2 + - uid: 2646 + components: + - type: Transform + pos: 34.5,17.5 + parent: 2 + - uid: 2647 + components: + - type: Transform + pos: 29.5,14.5 + parent: 2 + - uid: 2648 + components: + - type: Transform + pos: 29.5,15.5 + parent: 2 + - uid: 2649 + components: + - type: Transform + pos: 29.5,16.5 + parent: 2 + - uid: 2650 + components: + - type: Transform + pos: 29.5,17.5 + parent: 2 + - uid: 2651 + components: + - type: Transform + pos: 29.5,18.5 + parent: 2 + - uid: 2652 + components: + - type: Transform + pos: 29.5,19.5 + parent: 2 + - uid: 2653 + components: + - type: Transform + pos: 29.5,20.5 + parent: 2 + - uid: 2654 + components: + - type: Transform + pos: 29.5,21.5 + parent: 2 + - uid: 2655 + components: + - type: Transform + pos: 29.5,22.5 + parent: 2 + - uid: 2656 + components: + - type: Transform + pos: 29.5,23.5 + parent: 2 + - uid: 2657 + components: + - type: Transform + pos: 29.5,24.5 + parent: 2 + - uid: 2658 + components: + - type: Transform + pos: 29.5,25.5 + parent: 2 + - uid: 2659 + components: + - type: Transform + pos: 30.5,23.5 + parent: 2 + - uid: 2660 + components: + - type: Transform + pos: 31.5,23.5 + parent: 2 + - uid: 2661 + components: + - type: Transform + pos: 33.5,23.5 + parent: 2 + - uid: 2662 + components: + - type: Transform + pos: 32.5,23.5 + parent: 2 + - uid: 2663 + components: + - type: Transform + pos: 33.5,18.5 + parent: 2 + - uid: 2664 + components: + - type: Transform + pos: 38.5,18.5 + parent: 2 + - uid: 2665 + components: + - type: Transform + pos: 39.5,18.5 + parent: 2 + - uid: 2666 + components: + - type: Transform + pos: 40.5,18.5 + parent: 2 + - uid: 2667 + components: + - type: Transform + pos: 41.5,18.5 + parent: 2 + - uid: 2668 + components: + - type: Transform + pos: 42.5,18.5 + parent: 2 + - uid: 2669 + components: + - type: Transform + pos: -12.5,9.5 + parent: 2 + - uid: 2670 + components: + - type: Transform + pos: -8.5,9.5 + parent: 2 + - uid: 2671 + components: + - type: Transform + pos: -2.5,28.5 + parent: 2 + - uid: 2672 + components: + - type: Transform + pos: 6.5,11.5 + parent: 2 + - uid: 2673 + components: + - type: Transform + pos: 6.5,10.5 + parent: 2 + - uid: 2674 + components: + - type: Transform + pos: 5.5,10.5 + parent: 2 + - uid: 2675 + components: + - type: Transform + pos: 4.5,10.5 + parent: 2 + - uid: 2676 + components: + - type: Transform + pos: 3.5,10.5 + parent: 2 + - uid: 2677 + components: + - type: Transform + pos: 2.5,10.5 + parent: 2 + - uid: 2678 + components: + - type: Transform + pos: 1.5,10.5 + parent: 2 + - uid: 2679 + components: + - type: Transform + pos: 0.5,10.5 + parent: 2 + - uid: 2680 + components: + - type: Transform + pos: -0.5,10.5 + parent: 2 + - uid: 2681 + components: + - type: Transform + pos: -1.5,10.5 + parent: 2 + - uid: 2682 + components: + - type: Transform + pos: -2.5,10.5 + parent: 2 + - uid: 2683 + components: + - type: Transform + pos: -3.5,10.5 + parent: 2 + - uid: 2684 + components: + - type: Transform + pos: -3.5,9.5 + parent: 2 + - uid: 2685 + components: + - type: Transform + pos: -4.5,9.5 + parent: 2 + - uid: 2686 + components: + - type: Transform + pos: -5.5,9.5 + parent: 2 + - uid: 2687 + components: + - type: Transform + pos: -6.5,9.5 + parent: 2 + - uid: 2688 + components: + - type: Transform + pos: -6.5,8.5 + parent: 2 + - uid: 2689 + components: + - type: Transform + pos: -6.5,7.5 + parent: 2 + - uid: 2690 + components: + - type: Transform + pos: -7.5,7.5 + parent: 2 + - uid: 2691 + components: + - type: Transform + pos: -7.5,6.5 + parent: 2 + - uid: 2692 + components: + - type: Transform + pos: -7.5,5.5 + parent: 2 + - uid: 2693 + components: + - type: Transform + pos: -8.5,5.5 + parent: 2 + - uid: 2694 + components: + - type: Transform + pos: -8.5,4.5 + parent: 2 + - uid: 2695 + components: + - type: Transform + pos: -8.5,3.5 + parent: 2 + - uid: 2696 + components: + - type: Transform + pos: -8.5,2.5 + parent: 2 + - uid: 2697 + components: + - type: Transform + pos: 6.5,9.5 + parent: 2 + - uid: 2698 + components: + - type: Transform + pos: 7.5,9.5 + parent: 2 + - uid: 2699 + components: + - type: Transform + pos: 8.5,9.5 + parent: 2 + - uid: 2700 + components: + - type: Transform + pos: 8.5,8.5 + parent: 2 + - uid: 2701 + components: + - type: Transform + pos: 8.5,7.5 + parent: 2 + - uid: 2702 + components: + - type: Transform + pos: 9.5,7.5 + parent: 2 + - uid: 2703 + components: + - type: Transform + pos: 9.5,6.5 + parent: 2 + - uid: 2704 + components: + - type: Transform + pos: 9.5,5.5 + parent: 2 + - uid: 2705 + components: + - type: Transform + pos: 10.5,5.5 + parent: 2 + - uid: 2706 + components: + - type: Transform + pos: 10.5,4.5 + parent: 2 + - uid: 2707 + components: + - type: Transform + pos: 10.5,3.5 + parent: 2 + - uid: 2708 + components: + - type: Transform + pos: 10.5,2.5 + parent: 2 + - uid: 2709 + components: + - type: Transform + pos: 4.5,-10.5 + parent: 2 + - uid: 2710 + components: + - type: Transform + pos: 4.5,-9.5 + parent: 2 + - uid: 2711 + components: + - type: Transform + pos: 4.5,-8.5 + parent: 2 + - uid: 2712 + components: + - type: Transform + pos: 5.5,-8.5 + parent: 2 + - uid: 2713 + components: + - type: Transform + pos: 5.5,-7.5 + parent: 2 + - uid: 2714 + components: + - type: Transform + pos: 6.5,-7.5 + parent: 2 + - uid: 2715 + components: + - type: Transform + pos: 7.5,-7.5 + parent: 2 + - uid: 2716 + components: + - type: Transform + pos: 7.5,-6.5 + parent: 2 + - uid: 2717 + components: + - type: Transform + pos: 8.5,-6.5 + parent: 2 + - uid: 2718 + components: + - type: Transform + pos: 8.5,-5.5 + parent: 2 + - uid: 2719 + components: + - type: Transform + pos: 8.5,-4.5 + parent: 2 + - uid: 2720 + components: + - type: Transform + pos: 9.5,-4.5 + parent: 2 + - uid: 2721 + components: + - type: Transform + pos: 9.5,-3.5 + parent: 2 + - uid: 2722 + components: + - type: Transform + pos: 10.5,-3.5 + parent: 2 + - uid: 2723 + components: + - type: Transform + pos: 10.5,-2.5 + parent: 2 + - uid: 2724 + components: + - type: Transform + pos: 10.5,-1.5 + parent: 2 + - uid: 2725 + components: + - type: Transform + pos: 10.5,-0.5 + parent: 2 + - uid: 2726 + components: + - type: Transform + pos: 3.5,-8.5 + parent: 2 + - uid: 2727 + components: + - type: Transform + pos: 2.5,-8.5 + parent: 2 + - uid: 2728 + components: + - type: Transform + pos: 1.5,-8.5 + parent: 2 + - uid: 2729 + components: + - type: Transform + pos: 0.5,-8.5 + parent: 2 + - uid: 2730 + components: + - type: Transform + pos: -0.5,-8.5 + parent: 2 + - uid: 2731 + components: + - type: Transform + pos: -1.5,-8.5 + parent: 2 + - uid: 2732 + components: + - type: Transform + pos: -2.5,-8.5 + parent: 2 + - uid: 2733 + components: + - type: Transform + pos: -3.5,-8.5 + parent: 2 + - uid: 2734 + components: + - type: Transform + pos: -3.5,-7.5 + parent: 2 + - uid: 2735 + components: + - type: Transform + pos: -4.5,-7.5 + parent: 2 + - uid: 2736 + components: + - type: Transform + pos: -5.5,-7.5 + parent: 2 + - uid: 2737 + components: + - type: Transform + pos: -5.5,-6.5 + parent: 2 + - uid: 2738 + components: + - type: Transform + pos: -6.5,-6.5 + parent: 2 + - uid: 2739 + components: + - type: Transform + pos: -6.5,-5.5 + parent: 2 + - uid: 2740 + components: + - type: Transform + pos: -6.5,-4.5 + parent: 2 + - uid: 2741 + components: + - type: Transform + pos: -7.5,-4.5 + parent: 2 + - uid: 2742 + components: + - type: Transform + pos: -7.5,-3.5 + parent: 2 + - uid: 2743 + components: + - type: Transform + pos: -8.5,-3.5 + parent: 2 + - uid: 2744 + components: + - type: Transform + pos: -8.5,-2.5 + parent: 2 + - uid: 2745 + components: + - type: Transform + pos: -8.5,-1.5 + parent: 2 + - uid: 2746 + components: + - type: Transform + pos: -8.5,-0.5 + parent: 2 + - uid: 2747 + components: + - type: Transform + pos: 1.5,-7.5 + parent: 2 + - uid: 2748 + components: + - type: Transform + pos: 1.5,-6.5 + parent: 2 + - uid: 2749 + components: + - type: Transform + pos: 1.5,-5.5 + parent: 2 + - uid: 2750 + components: + - type: Transform + pos: 1.5,-4.5 + parent: 2 + - uid: 2751 + components: + - type: Transform + pos: 1.5,-3.5 + parent: 2 + - uid: 2752 + components: + - type: Transform + pos: 2.5,-3.5 + parent: 2 + - uid: 2753 + components: + - type: Transform + pos: 3.5,-3.5 + parent: 2 + - uid: 2754 + components: + - type: Transform + pos: 4.5,-3.5 + parent: 2 + - uid: 2755 + components: + - type: Transform + pos: 4.5,-2.5 + parent: 2 + - uid: 2756 + components: + - type: Transform + pos: 5.5,-2.5 + parent: 2 + - uid: 2757 + components: + - type: Transform + pos: 5.5,-1.5 + parent: 2 + - uid: 2758 + components: + - type: Transform + pos: 5.5,-0.5 + parent: 2 + - uid: 2759 + components: + - type: Transform + pos: 0.5,-3.5 + parent: 2 + - uid: 2760 + components: + - type: Transform + pos: -0.5,-3.5 + parent: 2 + - uid: 2761 + components: + - type: Transform + pos: -1.5,-3.5 + parent: 2 + - uid: 2762 + components: + - type: Transform + pos: -2.5,-3.5 + parent: 2 + - uid: 2763 + components: + - type: Transform + pos: -2.5,-2.5 + parent: 2 + - uid: 2764 + components: + - type: Transform + pos: -3.5,-2.5 + parent: 2 + - uid: 2765 + components: + - type: Transform + pos: -3.5,-1.5 + parent: 2 + - uid: 2766 + components: + - type: Transform + pos: -3.5,-0.5 + parent: 2 + - uid: 2767 + components: + - type: Transform + pos: 0.5,9.5 + parent: 2 + - uid: 2768 + components: + - type: Transform + pos: 0.5,8.5 + parent: 2 + - uid: 2769 + components: + - type: Transform + pos: 0.5,7.5 + parent: 2 + - uid: 2770 + components: + - type: Transform + pos: 0.5,6.5 + parent: 2 + - uid: 2771 + components: + - type: Transform + pos: 0.5,5.5 + parent: 2 + - uid: 2772 + components: + - type: Transform + pos: 0.5,4.5 + parent: 2 + - uid: 2773 + components: + - type: Transform + pos: -0.5,4.5 + parent: 2 + - uid: 2774 + components: + - type: Transform + pos: -1.5,4.5 + parent: 2 + - uid: 2775 + components: + - type: Transform + pos: -2.5,4.5 + parent: 2 + - uid: 2776 + components: + - type: Transform + pos: -3.5,4.5 + parent: 2 + - uid: 2777 + components: + - type: Transform + pos: -3.5,3.5 + parent: 2 + - uid: 2778 + components: + - type: Transform + pos: -3.5,2.5 + parent: 2 + - uid: 2779 + components: + - type: Transform + pos: 1.5,4.5 + parent: 2 + - uid: 2780 + components: + - type: Transform + pos: 2.5,4.5 + parent: 2 + - uid: 2781 + components: + - type: Transform + pos: 3.5,4.5 + parent: 2 + - uid: 2782 + components: + - type: Transform + pos: 4.5,4.5 + parent: 2 + - uid: 2783 + components: + - type: Transform + pos: 5.5,4.5 + parent: 2 + - uid: 2784 + components: + - type: Transform + pos: 5.5,3.5 + parent: 2 + - uid: 2785 + components: + - type: Transform + pos: 5.5,2.5 + parent: 2 + - uid: 2786 + components: + - type: Transform + pos: -1.5,-29.5 + parent: 2 + - uid: 2787 + components: + - type: Transform + pos: -9.5,-34.5 + parent: 2 + - uid: 2788 + components: + - type: Transform + pos: -9.5,-35.5 + parent: 2 + - uid: 2789 + components: + - type: Transform + pos: -9.5,-36.5 + parent: 2 + - uid: 2790 + components: + - type: Transform + pos: -10.5,-36.5 + parent: 2 + - uid: 2791 + components: + - type: Transform + pos: -11.5,-36.5 + parent: 2 + - uid: 2792 + components: + - type: Transform + pos: -11.5,-37.5 + parent: 2 + - uid: 2793 + components: + - type: Transform + pos: -11.5,-38.5 + parent: 2 + - uid: 2794 + components: + - type: Transform + pos: -11.5,-39.5 + parent: 2 + - uid: 2795 + components: + - type: Transform + pos: -11.5,-40.5 + parent: 2 + - uid: 2796 + components: + - type: Transform + pos: -11.5,-41.5 + parent: 2 + - uid: 2797 + components: + - type: Transform + pos: -11.5,-42.5 + parent: 2 + - uid: 2798 + components: + - type: Transform + pos: -11.5,-43.5 + parent: 2 + - uid: 2799 + components: + - type: Transform + pos: -11.5,-44.5 + parent: 2 + - uid: 2800 + components: + - type: Transform + pos: -11.5,-45.5 + parent: 2 + - uid: 2801 + components: + - type: Transform + pos: -11.5,-46.5 + parent: 2 + - uid: 2802 + components: + - type: Transform + pos: -11.5,-47.5 + parent: 2 + - uid: 2803 + components: + - type: Transform + pos: -11.5,-48.5 + parent: 2 + - uid: 2804 + components: + - type: Transform + pos: -17.5,-48.5 + parent: 2 + - uid: 2805 + components: + - type: Transform + pos: -16.5,-48.5 + parent: 2 + - uid: 2806 + components: + - type: Transform + pos: -15.5,-48.5 + parent: 2 + - uid: 2807 + components: + - type: Transform + pos: -14.5,-48.5 + parent: 2 + - uid: 2808 + components: + - type: Transform + pos: -13.5,-48.5 + parent: 2 + - uid: 2809 + components: + - type: Transform + pos: -12.5,-48.5 + parent: 2 + - uid: 2810 + components: + - type: Transform + pos: -11.5,-48.5 + parent: 2 + - uid: 2811 + components: + - type: Transform + pos: -10.5,-48.5 + parent: 2 + - uid: 2812 + components: + - type: Transform + pos: -9.5,-48.5 + parent: 2 + - uid: 2813 + components: + - type: Transform + pos: -8.5,-48.5 + parent: 2 + - uid: 2814 + components: + - type: Transform + pos: -7.5,-48.5 + parent: 2 + - uid: 2815 + components: + - type: Transform + pos: -17.5,-45.5 + parent: 2 + - uid: 2816 + components: + - type: Transform + pos: -16.5,-45.5 + parent: 2 + - uid: 2817 + components: + - type: Transform + pos: -15.5,-45.5 + parent: 2 + - uid: 2818 + components: + - type: Transform + pos: -14.5,-45.5 + parent: 2 + - uid: 2819 + components: + - type: Transform + pos: -13.5,-45.5 + parent: 2 + - uid: 2820 + components: + - type: Transform + pos: -12.5,-45.5 + parent: 2 + - uid: 2821 + components: + - type: Transform + pos: -11.5,-45.5 + parent: 2 + - uid: 2822 + components: + - type: Transform + pos: -16.5,-42.5 + parent: 2 + - uid: 2823 + components: + - type: Transform + pos: -15.5,-42.5 + parent: 2 + - uid: 2824 + components: + - type: Transform + pos: -14.5,-42.5 + parent: 2 + - uid: 2825 + components: + - type: Transform + pos: -13.5,-42.5 + parent: 2 + - uid: 2826 + components: + - type: Transform + pos: -12.5,-42.5 + parent: 2 + - uid: 2827 + components: + - type: Transform + pos: -11.5,-42.5 + parent: 2 + - uid: 2828 + components: + - type: Transform + pos: -10.5,-42.5 + parent: 2 + - uid: 2829 + components: + - type: Transform + pos: -9.5,-42.5 + parent: 2 + - uid: 2830 + components: + - type: Transform + pos: -8.5,-42.5 + parent: 2 + - uid: 2831 + components: + - type: Transform + pos: -7.5,-42.5 + parent: 2 + - uid: 2832 + components: + - type: Transform + pos: -6.5,-42.5 + parent: 2 + - uid: 2833 + components: + - type: Transform + pos: -17.5,-42.5 + parent: 2 + - uid: 2834 + components: + - type: Transform + pos: -17.5,-39.5 + parent: 2 + - uid: 2835 + components: + - type: Transform + pos: -16.5,-39.5 + parent: 2 + - uid: 2836 + components: + - type: Transform + pos: -15.5,-39.5 + parent: 2 + - uid: 2837 + components: + - type: Transform + pos: -14.5,-39.5 + parent: 2 + - uid: 2838 + components: + - type: Transform + pos: -13.5,-39.5 + parent: 2 + - uid: 2839 + components: + - type: Transform + pos: -12.5,-39.5 + parent: 2 + - uid: 2840 + components: + - type: Transform + pos: -11.5,-39.5 + parent: 2 + - uid: 2841 + components: + - type: Transform + pos: -17.5,-36.5 + parent: 2 + - uid: 2842 + components: + - type: Transform + pos: -16.5,-36.5 + parent: 2 + - uid: 2843 + components: + - type: Transform + pos: -15.5,-36.5 + parent: 2 + - uid: 2844 + components: + - type: Transform + pos: -14.5,-36.5 + parent: 2 + - uid: 2845 + components: + - type: Transform + pos: -13.5,-36.5 + parent: 2 + - uid: 2846 + components: + - type: Transform + pos: -12.5,-36.5 + parent: 2 + - uid: 2847 + components: + - type: Transform + pos: -11.5,-36.5 + parent: 2 + - uid: 2848 + components: + - type: Transform + pos: -10.5,-36.5 + parent: 2 + - uid: 2849 + components: + - type: Transform + pos: -9.5,-36.5 + parent: 2 + - uid: 2850 + components: + - type: Transform + pos: -8.5,-36.5 + parent: 2 + - uid: 2851 + components: + - type: Transform + pos: -7.5,-36.5 + parent: 2 + - uid: 2852 + components: + - type: Transform + pos: -11.5,-36.5 + parent: 2 + - uid: 2853 + components: + - type: Transform + pos: -11.5,-35.5 + parent: 2 + - uid: 2854 + components: + - type: Transform + pos: -11.5,-34.5 + parent: 2 + - uid: 2855 + components: + - type: Transform + pos: -11.5,-33.5 + parent: 2 + - uid: 2856 + components: + - type: Transform + pos: -11.5,-32.5 + parent: 2 + - uid: 2857 + components: + - type: Transform + pos: -11.5,-31.5 + parent: 2 + - uid: 2858 + components: + - type: Transform + pos: -11.5,-30.5 + parent: 2 + - uid: 2859 + components: + - type: Transform + pos: -7.5,-33.5 + parent: 2 + - uid: 2860 + components: + - type: Transform + pos: -7.5,-34.5 + parent: 2 + - uid: 2861 + components: + - type: Transform + pos: -7.5,-35.5 + parent: 2 + - uid: 2862 + components: + - type: Transform + pos: -7.5,-32.5 + parent: 2 + - uid: 2863 + components: + - type: Transform + pos: -6.5,-32.5 + parent: 2 + - uid: 2864 + components: + - type: Transform + pos: -5.5,-32.5 + parent: 2 + - uid: 2865 + components: + - type: Transform + pos: -4.5,-32.5 + parent: 2 + - uid: 2866 + components: + - type: Transform + pos: -3.5,-32.5 + parent: 2 + - uid: 2867 + components: + - type: Transform + pos: -3.5,-31.5 + parent: 2 + - uid: 2868 + components: + - type: Transform + pos: -7.5,-31.5 + parent: 2 + - uid: 2869 + components: + - type: Transform + pos: -7.5,-30.5 + parent: 2 + - uid: 2870 + components: + - type: Transform + pos: -3.5,-30.5 + parent: 2 + - uid: 2871 + components: + - type: Transform + pos: -2.5,-32.5 + parent: 2 + - uid: 2872 + components: + - type: Transform + pos: -3.5,-33.5 + parent: 2 + - uid: 2873 + components: + - type: Transform + pos: -4.5,-38.5 + parent: 2 + - uid: 2874 + components: + - type: Transform + pos: -3.5,-38.5 + parent: 2 + - uid: 2875 + components: + - type: Transform + pos: -3.5,-40.5 + parent: 2 + - uid: 2876 + components: + - type: Transform + pos: -3.5,-39.5 + parent: 2 + - uid: 2877 + components: + - type: Transform + pos: -3.5,-38.5 + parent: 2 + - uid: 2878 + components: + - type: Transform + pos: -3.5,-37.5 + parent: 2 + - uid: 2879 + components: + - type: Transform + pos: -3.5,-36.5 + parent: 2 + - uid: 2880 + components: + - type: Transform + pos: -2.5,-36.5 + parent: 2 + - uid: 2881 + components: + - type: Transform + pos: 9.5,-62.5 + parent: 2 + - uid: 2882 + components: + - type: Transform + pos: 9.5,-63.5 + parent: 2 + - uid: 2883 + components: + - type: Transform + pos: 10.5,-63.5 + parent: 2 + - uid: 2884 + components: + - type: Transform + pos: 11.5,-63.5 + parent: 2 + - uid: 2885 + components: + - type: Transform + pos: 12.5,-63.5 + parent: 2 + - uid: 2886 + components: + - type: Transform + pos: 12.5,-62.5 + parent: 2 + - uid: 2887 + components: + - type: Transform + pos: 12.5,-61.5 + parent: 2 + - uid: 2888 + components: + - type: Transform + pos: 12.5,-60.5 + parent: 2 + - uid: 2889 + components: + - type: Transform + pos: 12.5,-59.5 + parent: 2 + - uid: 2890 + components: + - type: Transform + pos: 12.5,-58.5 + parent: 2 + - uid: 2891 + components: + - type: Transform + pos: 12.5,-57.5 + parent: 2 + - uid: 2892 + components: + - type: Transform + pos: 8.5,-63.5 + parent: 2 + - uid: 2893 + components: + - type: Transform + pos: 7.5,-63.5 + parent: 2 + - uid: 2894 + components: + - type: Transform + pos: 6.5,-63.5 + parent: 2 + - uid: 2895 + components: + - type: Transform + pos: 5.5,-63.5 + parent: 2 + - uid: 2896 + components: + - type: Transform + pos: 4.5,-63.5 + parent: 2 + - uid: 2897 + components: + - type: Transform + pos: 3.5,-63.5 + parent: 2 + - uid: 2898 + components: + - type: Transform + pos: 2.5,-63.5 + parent: 2 + - uid: 2899 + components: + - type: Transform + pos: 1.5,-63.5 + parent: 2 + - uid: 2900 + components: + - type: Transform + pos: 0.5,-63.5 + parent: 2 + - uid: 2901 + components: + - type: Transform + pos: -0.5,-63.5 + parent: 2 + - uid: 2902 + components: + - type: Transform + pos: -1.5,-63.5 + parent: 2 + - uid: 2903 + components: + - type: Transform + pos: -2.5,-63.5 + parent: 2 + - uid: 2904 + components: + - type: Transform + pos: -3.5,-63.5 + parent: 2 + - uid: 2905 + components: + - type: Transform + pos: -4.5,-63.5 + parent: 2 + - uid: 2906 + components: + - type: Transform + pos: -5.5,-63.5 + parent: 2 + - uid: 2907 + components: + - type: Transform + pos: -6.5,-63.5 + parent: 2 + - uid: 2908 + components: + - type: Transform + pos: -6.5,-64.5 + parent: 2 + - uid: 2909 + components: + - type: Transform + pos: -6.5,-65.5 + parent: 2 + - uid: 2910 + components: + - type: Transform + pos: -6.5,-66.5 + parent: 2 + - uid: 2911 + components: + - type: Transform + pos: -6.5,-67.5 + parent: 2 + - uid: 2912 + components: + - type: Transform + pos: -6.5,-68.5 + parent: 2 + - uid: 2913 + components: + - type: Transform + pos: -6.5,-69.5 + parent: 2 + - uid: 2914 + components: + - type: Transform + pos: -6.5,-70.5 + parent: 2 + - uid: 2915 + components: + - type: Transform + pos: -6.5,-71.5 + parent: 2 + - uid: 2916 + components: + - type: Transform + pos: -6.5,-72.5 + parent: 2 + - uid: 2917 + components: + - type: Transform + pos: -6.5,-73.5 + parent: 2 + - uid: 2918 + components: + - type: Transform + pos: -6.5,-74.5 + parent: 2 + - uid: 2919 + components: + - type: Transform + pos: -6.5,-75.5 + parent: 2 + - uid: 2920 + components: + - type: Transform + pos: -5.5,-75.5 + parent: 2 + - uid: 2921 + components: + - type: Transform + pos: -4.5,-75.5 + parent: 2 + - uid: 2922 + components: + - type: Transform + pos: -3.5,-75.5 + parent: 2 + - uid: 2923 + components: + - type: Transform + pos: -2.5,-75.5 + parent: 2 + - uid: 2924 + components: + - type: Transform + pos: -1.5,-75.5 + parent: 2 + - uid: 2925 + components: + - type: Transform + pos: -0.5,-75.5 + parent: 2 + - uid: 2926 + components: + - type: Transform + pos: 0.5,-75.5 + parent: 2 + - uid: 2927 + components: + - type: Transform + pos: 1.5,-75.5 + parent: 2 + - uid: 2928 + components: + - type: Transform + pos: 2.5,-75.5 + parent: 2 + - uid: 2929 + components: + - type: Transform + pos: 3.5,-75.5 + parent: 2 + - uid: 2930 + components: + - type: Transform + pos: 4.5,-75.5 + parent: 2 + - uid: 2931 + components: + - type: Transform + pos: 5.5,-75.5 + parent: 2 + - uid: 2932 + components: + - type: Transform + pos: 6.5,-75.5 + parent: 2 + - uid: 2933 + components: + - type: Transform + pos: 7.5,-75.5 + parent: 2 + - uid: 2934 + components: + - type: Transform + pos: 7.5,-75.5 + parent: 2 + - uid: 2935 + components: + - type: Transform + pos: 7.5,-74.5 + parent: 2 + - uid: 2936 + components: + - type: Transform + pos: 7.5,-73.5 + parent: 2 + - uid: 2937 + components: + - type: Transform + pos: 7.5,-72.5 + parent: 2 + - uid: 2938 + components: + - type: Transform + pos: 7.5,-71.5 + parent: 2 + - uid: 2939 + components: + - type: Transform + pos: 7.5,-70.5 + parent: 2 + - uid: 2940 + components: + - type: Transform + pos: 7.5,-69.5 + parent: 2 + - uid: 2941 + components: + - type: Transform + pos: 7.5,-68.5 + parent: 2 + - uid: 2942 + components: + - type: Transform + pos: 7.5,-67.5 + parent: 2 + - uid: 2943 + components: + - type: Transform + pos: 7.5,-66.5 + parent: 2 + - uid: 2944 + components: + - type: Transform + pos: 7.5,-65.5 + parent: 2 + - uid: 2945 + components: + - type: Transform + pos: 7.5,-64.5 + parent: 2 + - uid: 2946 + components: + - type: Transform + pos: 0.5,-69.5 + parent: 2 + - uid: 2947 + components: + - type: Transform + pos: 0.5,-68.5 + parent: 2 + - uid: 2948 + components: + - type: Transform + pos: 0.5,-67.5 + parent: 2 + - uid: 2949 + components: + - type: Transform + pos: 0.5,-66.5 + parent: 2 + - uid: 2950 + components: + - type: Transform + pos: 0.5,-65.5 + parent: 2 + - uid: 2951 + components: + - type: Transform + pos: -5.5,-69.5 + parent: 2 + - uid: 2952 + components: + - type: Transform + pos: -4.5,-69.5 + parent: 2 + - uid: 2953 + components: + - type: Transform + pos: -3.5,-69.5 + parent: 2 + - uid: 2954 + components: + - type: Transform + pos: -2.5,-69.5 + parent: 2 + - uid: 2955 + components: + - type: Transform + pos: -1.5,-69.5 + parent: 2 + - uid: 2956 + components: + - type: Transform + pos: 2.5,-69.5 + parent: 2 + - uid: 2957 + components: + - type: Transform + pos: 3.5,-69.5 + parent: 2 + - uid: 2958 + components: + - type: Transform + pos: 4.5,-69.5 + parent: 2 + - uid: 2959 + components: + - type: Transform + pos: 5.5,-69.5 + parent: 2 + - uid: 2960 + components: + - type: Transform + pos: 6.5,-69.5 + parent: 2 + - uid: 2961 + components: + - type: Transform + pos: 7.5,-69.5 + parent: 2 + - uid: 2962 + components: + - type: Transform + pos: 12.5,-65.5 + parent: 2 + - uid: 2963 + components: + - type: Transform + pos: 12.5,-66.5 + parent: 2 + - uid: 2964 + components: + - type: Transform + pos: 12.5,-67.5 + parent: 2 + - uid: 2965 + components: + - type: Transform + pos: 12.5,-68.5 + parent: 2 + - uid: 2966 + components: + - type: Transform + pos: 12.5,-69.5 + parent: 2 + - uid: 2967 + components: + - type: Transform + pos: 12.5,-70.5 + parent: 2 + - uid: 2968 + components: + - type: Transform + pos: 10.5,-69.5 + parent: 2 + - uid: 2969 + components: + - type: Transform + pos: 11.5,-69.5 + parent: 2 + - uid: 2970 + components: + - type: Transform + pos: 12.5,-69.5 + parent: 2 + - uid: 2971 + components: + - type: Transform + pos: 13.5,-69.5 + parent: 2 + - uid: 2972 + components: + - type: Transform + pos: 14.5,-69.5 + parent: 2 + - uid: 2973 + components: + - type: Transform + pos: -7.5,44.5 + parent: 2 + - uid: 2974 + components: + - type: Transform + pos: -6.5,44.5 + parent: 2 + - uid: 2975 + components: + - type: Transform + pos: -5.5,44.5 + parent: 2 + - uid: 2976 + components: + - type: Transform + pos: -4.5,44.5 + parent: 2 + - uid: 2977 + components: + - type: Transform + pos: -3.5,44.5 + parent: 2 + - uid: 2978 + components: + - type: Transform + pos: -3.5,45.5 + parent: 2 + - uid: 2979 + components: + - type: Transform + pos: -3.5,46.5 + parent: 2 + - uid: 2980 + components: + - type: Transform + pos: -3.5,47.5 + parent: 2 + - uid: 2981 + components: + - type: Transform + pos: -3.5,48.5 + parent: 2 + - uid: 2982 + components: + - type: Transform + pos: -3.5,43.5 + parent: 2 + - uid: 2983 + components: + - type: Transform + pos: -3.5,42.5 + parent: 2 + - uid: 2984 + components: + - type: Transform + pos: -7.5,45.5 + parent: 2 + - uid: 2985 + components: + - type: Transform + pos: -8.5,45.5 + parent: 2 + - uid: 2986 + components: + - type: Transform + pos: -9.5,45.5 + parent: 2 + - uid: 2987 + components: + - type: Transform + pos: -10.5,45.5 + parent: 2 + - uid: 2988 + components: + - type: Transform + pos: -10.5,46.5 + parent: 2 + - uid: 2989 + components: + - type: Transform + pos: -10.5,47.5 + parent: 2 + - uid: 2990 + components: + - type: Transform + pos: -10.5,48.5 + parent: 2 + - uid: 2991 + components: + - type: Transform + pos: 9.5,57.5 + parent: 2 + - uid: 2992 + components: + - type: Transform + pos: 9.5,56.5 + parent: 2 + - uid: 2993 + components: + - type: Transform + pos: 9.5,55.5 + parent: 2 + - uid: 2994 + components: + - type: Transform + pos: 9.5,55.5 + parent: 2 + - uid: 2995 + components: + - type: Transform + pos: 9.5,54.5 + parent: 2 + - uid: 2996 + components: + - type: Transform + pos: 10.5,54.5 + parent: 2 + - uid: 2997 + components: + - type: Transform + pos: 9.5,54.5 + parent: 2 + - uid: 2998 + components: + - type: Transform + pos: 8.5,54.5 + parent: 2 + - uid: 2999 + components: + - type: Transform + pos: 7.5,54.5 + parent: 2 + - uid: 3000 + components: + - type: Transform + pos: 6.5,54.5 + parent: 2 + - uid: 3001 + components: + - type: Transform + pos: 5.5,54.5 + parent: 2 + - uid: 3002 + components: + - type: Transform + pos: 4.5,54.5 + parent: 2 + - uid: 3003 + components: + - type: Transform + pos: 5.5,53.5 + parent: 2 + - uid: 3004 + components: + - type: Transform + pos: 5.5,52.5 + parent: 2 + - uid: 3005 + components: + - type: Transform + pos: 5.5,59.5 + parent: 2 + - uid: 3006 + components: + - type: Transform + pos: 8.5,53.5 + parent: 2 + - uid: 3007 + components: + - type: Transform + pos: 8.5,52.5 + parent: 2 + - uid: 3008 + components: + - type: Transform + pos: 5.5,55.5 + parent: 2 + - uid: 3009 + components: + - type: Transform + pos: 5.5,56.5 + parent: 2 + - uid: 3010 + components: + - type: Transform + pos: 5.5,58.5 + parent: 2 + - uid: 3011 + components: + - type: Transform + pos: 5.5,60.5 + parent: 2 + - uid: 3012 + components: + - type: Transform + pos: 4.5,59.5 + parent: 2 + - uid: 3013 + components: + - type: Transform + pos: 3.5,59.5 + parent: 2 + - uid: 3014 + components: + - type: Transform + pos: 5.5,57.5 + parent: 2 + - uid: 3015 + components: + - type: Transform + pos: 1.5,59.5 + parent: 2 + - uid: 3016 + components: + - type: Transform + pos: 2.5,59.5 + parent: 2 + - uid: 3017 + components: + - type: Transform + pos: 0.5,59.5 + parent: 2 + - uid: 3018 + components: + - type: Transform + pos: -0.5,59.5 + parent: 2 + - uid: 3019 + components: + - type: Transform + pos: -1.5,59.5 + parent: 2 + - uid: 3020 + components: + - type: Transform + pos: -2.5,59.5 + parent: 2 + - uid: 3021 + components: + - type: Transform + pos: -3.5,59.5 + parent: 2 + - uid: 3022 + components: + - type: Transform + pos: -3.5,58.5 + parent: 2 + - uid: 3023 + components: + - type: Transform + pos: -3.5,60.5 + parent: 2 + - uid: 3024 + components: + - type: Transform + pos: -3.5,61.5 + parent: 2 + - uid: 3025 + components: + - type: Transform + pos: -4.5,59.5 + parent: 2 + - uid: 3026 + components: + - type: Transform + pos: 0.5,60.5 + parent: 2 + - uid: 3027 + components: + - type: Transform + pos: 1.5,61.5 + parent: 2 + - uid: 3028 + components: + - type: Transform + pos: 2.5,58.5 + parent: 2 + - uid: 3029 + components: + - type: Transform + pos: 2.5,57.5 + parent: 2 + - uid: 3030 + components: + - type: Transform + pos: 2.5,56.5 + parent: 2 + - uid: 3031 + components: + - type: Transform + pos: 2.5,55.5 + parent: 2 + - uid: 3032 + components: + - type: Transform + pos: 2.5,54.5 + parent: 2 + - uid: 3033 + components: + - type: Transform + pos: -0.5,57.5 + parent: 2 + - uid: 3034 + components: + - type: Transform + pos: -0.5,56.5 + parent: 2 + - uid: 3035 + components: + - type: Transform + pos: -0.5,55.5 + parent: 2 + - uid: 3036 + components: + - type: Transform + pos: -0.5,54.5 + parent: 2 + - uid: 3037 + components: + - type: Transform + pos: -0.5,58.5 + parent: 2 + - uid: 3038 + components: + - type: Transform + pos: 2.5,58.5 + parent: 2 + - uid: 3039 + components: + - type: Transform + pos: 6.5,59.5 + parent: 2 + - uid: 3040 + components: + - type: Transform + pos: 9.5,51.5 + parent: 2 + - uid: 3041 + components: + - type: Transform + pos: 9.5,50.5 + parent: 2 + - uid: 3042 + components: + - type: Transform + pos: 9.5,49.5 + parent: 2 + - uid: 3043 + components: + - type: Transform + pos: 9.5,49.5 + parent: 2 + - uid: 3044 + components: + - type: Transform + pos: 10.5,49.5 + parent: 2 + - uid: 3045 + components: + - type: Transform + pos: 11.5,49.5 + parent: 2 + - uid: 3046 + components: + - type: Transform + pos: 12.5,49.5 + parent: 2 + - uid: 3047 + components: + - type: Transform + pos: 12.5,50.5 + parent: 2 + - uid: 3048 + components: + - type: Transform + pos: 11.5,48.5 + parent: 2 + - uid: 3049 + components: + - type: Transform + pos: 11.5,47.5 + parent: 2 + - uid: 3050 + components: + - type: Transform + pos: 12.5,47.5 + parent: 2 + - uid: 3051 + components: + - type: Transform + pos: 13.5,47.5 + parent: 2 + - uid: 3052 + components: + - type: Transform + pos: 14.5,47.5 + parent: 2 + - uid: 3053 + components: + - type: Transform + pos: 8.5,49.5 + parent: 2 + - uid: 3054 + components: + - type: Transform + pos: 7.5,49.5 + parent: 2 + - uid: 3055 + components: + - type: Transform + pos: 8.5,48.5 + parent: 2 + - uid: 3056 + components: + - type: Transform + pos: 8.5,47.5 + parent: 2 + - uid: 3057 + components: + - type: Transform + pos: 7.5,47.5 + parent: 2 + - uid: 3058 + components: + - type: Transform + pos: 6.5,47.5 + parent: 2 + - uid: 3059 + components: + - type: Transform + pos: -9.5,51.5 + parent: 2 + - uid: 3060 + components: + - type: Transform + pos: -10.5,51.5 + parent: 2 + - uid: 3061 + components: + - type: Transform + pos: -10.5,50.5 + parent: 2 + - uid: 3062 + components: + - type: Transform + pos: -10.5,50.5 + parent: 2 + - uid: 3063 + components: + - type: Transform + pos: -9.5,50.5 + parent: 2 + - uid: 3064 + components: + - type: Transform + pos: -8.5,50.5 + parent: 2 + - uid: 3065 + components: + - type: Transform + pos: -7.5,50.5 + parent: 2 + - uid: 3066 + components: + - type: Transform + pos: -6.5,50.5 + parent: 2 + - uid: 3067 + components: + - type: Transform + pos: -6.5,49.5 + parent: 2 + - uid: 3068 + components: + - type: Transform + pos: -6.5,48.5 + parent: 2 + - uid: 3069 + components: + - type: Transform + pos: -6.5,47.5 + parent: 2 + - uid: 3070 + components: + - type: Transform + pos: -7.5,48.5 + parent: 2 + - uid: 3071 + components: + - type: Transform + pos: -7.5,51.5 + parent: 2 + - uid: 3072 + components: + - type: Transform + pos: -7.5,50.5 + parent: 2 + - uid: 3073 + components: + - type: Transform + pos: -7.5,52.5 + parent: 2 + - uid: 3074 + components: + - type: Transform + pos: -8.5,52.5 + parent: 2 + - uid: 3075 + components: + - type: Transform + pos: -6.5,52.5 + parent: 2 + - uid: 3076 + components: + - type: Transform + pos: -5.5,52.5 + parent: 2 + - uid: 3077 + components: + - type: Transform + pos: -6.5,53.5 + parent: 2 + - uid: 3078 + components: + - type: Transform + pos: -6.5,54.5 + parent: 2 + - uid: 3079 + components: + - type: Transform + pos: -6.5,55.5 + parent: 2 + - uid: 3080 + components: + - type: Transform + pos: -8.5,55.5 + parent: 2 + - uid: 3081 + components: + - type: Transform + pos: -7.5,55.5 + parent: 2 + - uid: 3082 + components: + - type: Transform + pos: -6.5,55.5 + parent: 2 + - uid: 3083 + components: + - type: Transform + pos: -5.5,55.5 + parent: 2 + - uid: 3084 + components: + - type: Transform + pos: -4.5,55.5 + parent: 2 + - uid: 3085 + components: + - type: Transform + pos: -3.5,55.5 + parent: 2 + - uid: 3086 + components: + - type: Transform + pos: -2.5,55.5 + parent: 2 + - uid: 3087 + components: + - type: Transform + pos: -3.5,54.5 + parent: 2 + - uid: 3088 + components: + - type: Transform + pos: -3.5,53.5 + parent: 2 + - uid: 3089 + components: + - type: Transform + pos: -3.5,52.5 + parent: 2 + - uid: 3090 + components: + - type: Transform + pos: -3.5,51.5 + parent: 2 + - uid: 3091 + components: + - type: Transform + pos: 2.5,46.5 + parent: 2 + - uid: 3092 + components: + - type: Transform + pos: 1.5,52.5 + parent: 2 + - uid: 3093 + components: + - type: Transform + pos: 1.5,51.5 + parent: 2 + - uid: 3094 + components: + - type: Transform + pos: 1.5,50.5 + parent: 2 + - uid: 3095 + components: + - type: Transform + pos: 1.5,49.5 + parent: 2 + - uid: 3096 + components: + - type: Transform + pos: 1.5,48.5 + parent: 2 + - uid: 3097 + components: + - type: Transform + pos: 1.5,47.5 + parent: 2 + - uid: 3098 + components: + - type: Transform + pos: 1.5,46.5 + parent: 2 + - uid: 3099 + components: + - type: Transform + pos: 1.5,45.5 + parent: 2 + - uid: 3100 + components: + - type: Transform + pos: 1.5,44.5 + parent: 2 + - uid: 3101 + components: + - type: Transform + pos: 1.5,42.5 + parent: 2 + - uid: 3102 + components: + - type: Transform + pos: 1.5,43.5 + parent: 2 + - uid: 3103 + components: + - type: Transform + pos: 1.5,41.5 + parent: 2 + - uid: 3104 + components: + - type: Transform + pos: 0.5,41.5 + parent: 2 + - uid: 3105 + components: + - type: Transform + pos: -1.5,41.5 + parent: 2 + - uid: 3106 + components: + - type: Transform + pos: 4.5,50.5 + parent: 2 + - uid: 3107 + components: + - type: Transform + pos: 1.5,41.5 + parent: 2 + - uid: 3108 + components: + - type: Transform + pos: 0.5,54.5 + parent: 2 + - uid: 3109 + components: + - type: Transform + pos: 29.5,40.5 + parent: 2 + - uid: 3110 + components: + - type: Transform + pos: 28.5,36.5 + parent: 2 + - uid: 3111 + components: + - type: Transform + pos: 29.5,36.5 + parent: 2 + - uid: 3112 + components: + - type: Transform + pos: 29.5,34.5 + parent: 2 + - uid: 3113 + components: + - type: Transform + pos: -0.5,54.5 + parent: 2 + - uid: 3114 + components: + - type: Transform + pos: 5.5,25.5 + parent: 2 + - uid: 3115 + components: + - type: Transform + pos: 4.5,26.5 + parent: 2 + - uid: 3116 + components: + - type: Transform + pos: 6.5,26.5 + parent: 2 + - uid: 3117 + components: + - type: Transform + pos: -35.5,5.5 + parent: 2 + - uid: 3118 + components: + - type: Transform + pos: 3.5,46.5 + parent: 2 + - uid: 3119 + components: + - type: Transform + pos: 5.5,24.5 + parent: 2 + - uid: 3120 + components: + - type: Transform + pos: 9.5,29.5 + parent: 2 + - uid: 3121 + components: + - type: Transform + pos: 8.5,29.5 + parent: 2 + - uid: 3122 + components: + - type: Transform + pos: 7.5,29.5 + parent: 2 + - uid: 3123 + components: + - type: Transform + pos: 6.5,29.5 + parent: 2 + - uid: 3124 + components: + - type: Transform + pos: 6.5,30.5 + parent: 2 + - uid: 3125 + components: + - type: Transform + pos: 4.5,29.5 + parent: 2 + - uid: 3126 + components: + - type: Transform + pos: 4.5,30.5 + parent: 2 + - uid: 3127 + components: + - type: Transform + pos: 4.5,31.5 + parent: 2 + - uid: 3128 + components: + - type: Transform + pos: 6.5,31.5 + parent: 2 + - uid: 3129 + components: + - type: Transform + pos: 5.5,30.5 + parent: 2 + - uid: 3130 + components: + - type: Transform + pos: 4.5,32.5 + parent: 2 + - uid: 3131 + components: + - type: Transform + pos: 6.5,31.5 + parent: 2 + - uid: 3132 + components: + - type: Transform + pos: 6.5,32.5 + parent: 2 + - uid: 3133 + components: + - type: Transform + pos: 7.5,32.5 + parent: 2 + - uid: 3134 + components: + - type: Transform + pos: 9.5,43.5 + parent: 2 + - uid: 3135 + components: + - type: Transform + pos: 8.5,43.5 + parent: 2 + - uid: 3136 + components: + - type: Transform + pos: 7.5,43.5 + parent: 2 + - uid: 3137 + components: + - type: Transform + pos: 6.5,43.5 + parent: 2 + - uid: 3138 + components: + - type: Transform + pos: 5.5,43.5 + parent: 2 + - uid: 3139 + components: + - type: Transform + pos: 4.5,43.5 + parent: 2 + - uid: 3140 + components: + - type: Transform + pos: 6.5,43.5 + parent: 2 + - uid: 3141 + components: + - type: Transform + pos: 6.5,42.5 + parent: 2 + - uid: 3142 + components: + - type: Transform + pos: 6.5,41.5 + parent: 2 + - uid: 3143 + components: + - type: Transform + pos: 6.5,40.5 + parent: 2 + - uid: 3144 + components: + - type: Transform + pos: 6.5,39.5 + parent: 2 + - uid: 3145 + components: + - type: Transform + pos: 6.5,38.5 + parent: 2 + - uid: 3146 + components: + - type: Transform + pos: 6.5,37.5 + parent: 2 + - uid: 3147 + components: + - type: Transform + pos: 7.5,37.5 + parent: 2 + - uid: 3148 + components: + - type: Transform + pos: 7.5,36.5 + parent: 2 + - uid: 3149 + components: + - type: Transform + pos: 7.5,35.5 + parent: 2 + - uid: 3150 + components: + - type: Transform + pos: 6.5,34.5 + parent: 2 + - uid: 3151 + components: + - type: Transform + pos: 5.5,34.5 + parent: 2 + - uid: 3152 + components: + - type: Transform + pos: -34.5,15.5 + parent: 2 + - uid: 3153 + components: + - type: Transform + pos: -30.5,15.5 + parent: 2 + - uid: 3154 + components: + - type: Transform + pos: -32.5,15.5 + parent: 2 + - uid: 3155 + components: + - type: Transform + pos: -32.5,16.5 + parent: 2 + - uid: 3156 + components: + - type: Transform + pos: -33.5,16.5 + parent: 2 + - uid: 3157 + components: + - type: Transform + pos: -34.5,16.5 + parent: 2 + - uid: 3158 + components: + - type: Transform + pos: -34.5,14.5 + parent: 2 + - uid: 3159 + components: + - type: Transform + pos: -33.5,14.5 + parent: 2 + - uid: 3160 + components: + - type: Transform + pos: -32.5,14.5 + parent: 2 + - uid: 3161 + components: + - type: Transform + pos: -35.5,15.5 + parent: 2 + - uid: 3162 + components: + - type: Transform + pos: -36.5,15.5 + parent: 2 + - uid: 3163 + components: + - type: Transform + pos: -43.5,18.5 + parent: 2 + - uid: 3164 + components: + - type: Transform + pos: -43.5,17.5 + parent: 2 + - uid: 3165 + components: + - type: Transform + pos: -42.5,17.5 + parent: 2 + - uid: 3166 + components: + - type: Transform + pos: -41.5,17.5 + parent: 2 + - uid: 3167 + components: + - type: Transform + pos: -40.5,17.5 + parent: 2 + - uid: 3168 + components: + - type: Transform + pos: -44.5,17.5 + parent: 2 + - uid: 3169 + components: + - type: Transform + pos: -42.5,16.5 + parent: 2 + - uid: 3170 + components: + - type: Transform + pos: -42.5,15.5 + parent: 2 + - uid: 3171 + components: + - type: Transform + pos: -42.5,14.5 + parent: 2 + - uid: 3172 + components: + - type: Transform + pos: -44.5,14.5 + parent: 2 + - uid: 3173 + components: + - type: Transform + pos: -43.5,14.5 + parent: 2 + - uid: 3174 + components: + - type: Transform + pos: -42.5,14.5 + parent: 2 + - uid: 3175 + components: + - type: Transform + pos: -41.5,14.5 + parent: 2 + - uid: 3176 + components: + - type: Transform + pos: -40.5,14.5 + parent: 2 + - uid: 3177 + components: + - type: Transform + pos: -5.5,83.5 + parent: 2 + - uid: 3178 + components: + - type: Transform + pos: -4.5,75.5 + parent: 2 + - uid: 3179 + components: + - type: Transform + pos: -4.5,73.5 + parent: 2 + - uid: 3180 + components: + - type: Transform + pos: -4.5,74.5 + parent: 2 + - uid: 3181 + components: + - type: Transform + pos: -4.5,75.5 + parent: 2 + - uid: 3182 + components: + - type: Transform + pos: -4.5,76.5 + parent: 2 + - uid: 3183 + components: + - type: Transform + pos: -4.5,77.5 + parent: 2 + - uid: 3184 + components: + - type: Transform + pos: -4.5,78.5 + parent: 2 + - uid: 3185 + components: + - type: Transform + pos: -4.5,79.5 + parent: 2 + - uid: 3186 + components: + - type: Transform + pos: -4.5,80.5 + parent: 2 + - uid: 3187 + components: + - type: Transform + pos: -4.5,81.5 + parent: 2 + - uid: 3188 + components: + - type: Transform + pos: -4.5,77.5 + parent: 2 + - uid: 3189 + components: + - type: Transform + pos: -5.5,77.5 + parent: 2 + - uid: 3190 + components: + - type: Transform + pos: -6.5,77.5 + parent: 2 + - uid: 3191 + components: + - type: Transform + pos: -7.5,77.5 + parent: 2 + - uid: 3192 + components: + - type: Transform + pos: -8.5,77.5 + parent: 2 + - uid: 3193 + components: + - type: Transform + pos: -9.5,77.5 + parent: 2 + - uid: 3194 + components: + - type: Transform + pos: -10.5,77.5 + parent: 2 + - uid: 3195 + components: + - type: Transform + pos: -11.5,77.5 + parent: 2 + - uid: 3196 + components: + - type: Transform + pos: -4.5,73.5 + parent: 2 + - uid: 3197 + components: + - type: Transform + pos: -4.5,72.5 + parent: 2 + - uid: 3198 + components: + - type: Transform + pos: -4.5,71.5 + parent: 2 + - uid: 3199 + components: + - type: Transform + pos: -4.5,70.5 + parent: 2 + - uid: 3200 + components: + - type: Transform + pos: -4.5,70.5 + parent: 2 + - uid: 3201 + components: + - type: Transform + pos: -3.5,70.5 + parent: 2 + - uid: 3202 + components: + - type: Transform + pos: -2.5,70.5 + parent: 2 + - uid: 3203 + components: + - type: Transform + pos: -1.5,70.5 + parent: 2 + - uid: 3204 + components: + - type: Transform + pos: -0.5,70.5 + parent: 2 + - uid: 3205 + components: + - type: Transform + pos: 0.5,70.5 + parent: 2 + - uid: 3206 + components: + - type: Transform + pos: 1.5,70.5 + parent: 2 + - uid: 3207 + components: + - type: Transform + pos: 2.5,70.5 + parent: 2 + - uid: 3208 + components: + - type: Transform + pos: 3.5,70.5 + parent: 2 + - uid: 3209 + components: + - type: Transform + pos: 4.5,70.5 + parent: 2 + - uid: 3210 + components: + - type: Transform + pos: 5.5,70.5 + parent: 2 + - uid: 3211 + components: + - type: Transform + pos: 6.5,70.5 + parent: 2 + - uid: 3212 + components: + - type: Transform + pos: 7.5,70.5 + parent: 2 + - uid: 3213 + components: + - type: Transform + pos: -5.5,71.5 + parent: 2 + - uid: 3214 + components: + - type: Transform + pos: -6.5,71.5 + parent: 2 + - uid: 3215 + components: + - type: Transform + pos: 1.5,71.5 + parent: 2 + - uid: 3216 + components: + - type: Transform + pos: 7.5,71.5 + parent: 2 + - uid: 3217 + components: + - type: Transform + pos: 7.5,72.5 + parent: 2 + - uid: 3218 + components: + - type: Transform + pos: 6.5,72.5 + parent: 2 + - uid: 3219 + components: + - type: Transform + pos: 8.5,72.5 + parent: 2 + - uid: 3220 + components: + - type: Transform + pos: 7.5,73.5 + parent: 2 + - uid: 3221 + components: + - type: Transform + pos: 7.5,74.5 + parent: 2 + - uid: 3222 + components: + - type: Transform + pos: 7.5,75.5 + parent: 2 + - uid: 3223 + components: + - type: Transform + pos: 7.5,76.5 + parent: 2 + - uid: 3224 + components: + - type: Transform + pos: 7.5,77.5 + parent: 2 + - uid: 3225 + components: + - type: Transform + pos: 7.5,78.5 + parent: 2 + - uid: 3226 + components: + - type: Transform + pos: 7.5,79.5 + parent: 2 + - uid: 3227 + components: + - type: Transform + pos: 7.5,80.5 + parent: 2 + - uid: 3228 + components: + - type: Transform + pos: 7.5,82.5 + parent: 2 + - uid: 3229 + components: + - type: Transform + pos: 7.5,83.5 + parent: 2 + - uid: 3230 + components: + - type: Transform + pos: 7.5,84.5 + parent: 2 + - uid: 3231 + components: + - type: Transform + pos: 7.5,84.5 + parent: 2 + - uid: 3232 + components: + - type: Transform + pos: 6.5,84.5 + parent: 2 + - uid: 3233 + components: + - type: Transform + pos: 5.5,84.5 + parent: 2 + - uid: 3234 + components: + - type: Transform + pos: 4.5,84.5 + parent: 2 + - uid: 3235 + components: + - type: Transform + pos: 3.5,84.5 + parent: 2 + - uid: 3236 + components: + - type: Transform + pos: 2.5,84.5 + parent: 2 + - uid: 3237 + components: + - type: Transform + pos: 1.5,84.5 + parent: 2 + - uid: 3238 + components: + - type: Transform + pos: 0.5,84.5 + parent: 2 + - uid: 3239 + components: + - type: Transform + pos: -0.5,84.5 + parent: 2 + - uid: 3240 + components: + - type: Transform + pos: -1.5,84.5 + parent: 2 + - uid: 3241 + components: + - type: Transform + pos: -2.5,84.5 + parent: 2 + - uid: 3242 + components: + - type: Transform + pos: -3.5,84.5 + parent: 2 + - uid: 3243 + components: + - type: Transform + pos: -4.5,84.5 + parent: 2 + - uid: 3244 + components: + - type: Transform + pos: 1.5,84.5 + parent: 2 + - uid: 3245 + components: + - type: Transform + pos: 1.5,83.5 + parent: 2 + - uid: 3246 + components: + - type: Transform + pos: 1.5,82.5 + parent: 2 + - uid: 3247 + components: + - type: Transform + pos: 1.5,81.5 + parent: 2 + - uid: 3248 + components: + - type: Transform + pos: 1.5,80.5 + parent: 2 + - uid: 3249 + components: + - type: Transform + pos: 1.5,79.5 + parent: 2 + - uid: 3250 + components: + - type: Transform + pos: 1.5,78.5 + parent: 2 + - uid: 3251 + components: + - type: Transform + pos: 1.5,77.5 + parent: 2 + - uid: 3252 + components: + - type: Transform + pos: 1.5,76.5 + parent: 2 + - uid: 3253 + components: + - type: Transform + pos: -1.5,77.5 + parent: 2 + - uid: 3254 + components: + - type: Transform + pos: -0.5,77.5 + parent: 2 + - uid: 3255 + components: + - type: Transform + pos: 0.5,77.5 + parent: 2 + - uid: 3256 + components: + - type: Transform + pos: 1.5,77.5 + parent: 2 + - uid: 3257 + components: + - type: Transform + pos: 2.5,77.5 + parent: 2 + - uid: 3258 + components: + - type: Transform + pos: 3.5,77.5 + parent: 2 + - uid: 3259 + components: + - type: Transform + pos: 4.5,77.5 + parent: 2 + - uid: 3260 + components: + - type: Transform + pos: 4.5,74.5 + parent: 2 + - uid: 3261 + components: + - type: Transform + pos: 4.5,75.5 + parent: 2 + - uid: 3262 + components: + - type: Transform + pos: 4.5,76.5 + parent: 2 + - uid: 3263 + components: + - type: Transform + pos: 4.5,77.5 + parent: 2 + - uid: 3264 + components: + - type: Transform + pos: 4.5,78.5 + parent: 2 + - uid: 3265 + components: + - type: Transform + pos: 4.5,79.5 + parent: 2 + - uid: 3266 + components: + - type: Transform + pos: 4.5,80.5 + parent: 2 + - uid: 3267 + components: + - type: Transform + pos: -1.5,80.5 + parent: 2 + - uid: 3268 + components: + - type: Transform + pos: -1.5,79.5 + parent: 2 + - uid: 3269 + components: + - type: Transform + pos: -1.5,78.5 + parent: 2 + - uid: 3270 + components: + - type: Transform + pos: -1.5,77.5 + parent: 2 + - uid: 3271 + components: + - type: Transform + pos: -1.5,76.5 + parent: 2 + - uid: 3272 + components: + - type: Transform + pos: -1.5,75.5 + parent: 2 + - uid: 3273 + components: + - type: Transform + pos: -1.5,74.5 + parent: 2 + - uid: 3274 + components: + - type: Transform + pos: -3.5,73.5 + parent: 2 + - uid: 3275 + components: + - type: Transform + pos: -1.5,80.5 + parent: 2 + - uid: 3276 + components: + - type: Transform + pos: -1.5,74.5 + parent: 2 + - uid: 3277 + components: + - type: Transform + pos: 4.5,74.5 + parent: 2 + - uid: 3278 + components: + - type: Transform + pos: 4.5,80.5 + parent: 2 + - uid: 3279 + components: + - type: Transform + pos: 1.5,75.5 + parent: 2 + - uid: 3280 + components: + - type: Transform + pos: 1.5,74.5 + parent: 2 + - uid: 3281 + components: + - type: Transform + pos: 0.5,73.5 + parent: 2 + - uid: 3282 + components: + - type: Transform + pos: 1.5,73.5 + parent: 2 + - uid: 3283 + components: + - type: Transform + pos: 2.5,73.5 + parent: 2 + - uid: 3284 + components: + - type: Transform + pos: 2.5,80.5 + parent: 2 + - uid: 3285 + components: + - type: Transform + pos: 2.5,81.5 + parent: 2 + - uid: 3286 + components: + - type: Transform + pos: 0.5,80.5 + parent: 2 + - uid: 3287 + components: + - type: Transform + pos: 0.5,81.5 + parent: 2 + - uid: 3288 + components: + - type: Transform + pos: -4.5,83.5 + parent: 2 + - uid: 3289 + components: + - type: Transform + pos: -4.5,82.5 + parent: 2 + - uid: 3290 + components: + - type: Transform + pos: -4.5,81.5 + parent: 2 + - uid: 3291 + components: + - type: Transform + pos: 1.5,85.5 + parent: 2 + - uid: 3292 + components: + - type: Transform + pos: 1.5,86.5 + parent: 2 + - uid: 3293 + components: + - type: Transform + pos: -0.5,86.5 + parent: 2 + - uid: 3294 + components: + - type: Transform + pos: 0.5,86.5 + parent: 2 + - uid: 3295 + components: + - type: Transform + pos: 1.5,86.5 + parent: 2 + - uid: 3296 + components: + - type: Transform + pos: 2.5,86.5 + parent: 2 + - uid: 3297 + components: + - type: Transform + pos: 3.5,86.5 + parent: 2 + - uid: 3298 + components: + - type: Transform + pos: -3.5,69.5 + parent: 2 + - uid: 3299 + components: + - type: Transform + pos: -3.5,68.5 + parent: 2 + - uid: 3300 + components: + - type: Transform + pos: -2.5,68.5 + parent: 2 + - uid: 3301 + components: + - type: Transform + pos: 5.5,69.5 + parent: 2 + - uid: 3302 + components: + - type: Transform + pos: 5.5,68.5 + parent: 2 + - uid: 3303 + components: + - type: Transform + pos: -26.5,18.5 + parent: 2 + - uid: 3304 + components: + - type: Transform + pos: -25.5,18.5 + parent: 2 + - uid: 3305 + components: + - type: Transform + pos: -24.5,18.5 + parent: 2 + - uid: 3306 + components: + - type: Transform + pos: -24.5,17.5 + parent: 2 + - uid: 3307 + components: + - type: Transform + pos: -24.5,16.5 + parent: 2 + - uid: 3308 + components: + - type: Transform + pos: -24.5,16.5 + parent: 2 + - uid: 3309 + components: + - type: Transform + pos: -25.5,16.5 + parent: 2 + - uid: 3310 + components: + - type: Transform + pos: -26.5,16.5 + parent: 2 + - uid: 3311 + components: + - type: Transform + pos: -27.5,16.5 + parent: 2 + - uid: 3312 + components: + - type: Transform + pos: -28.5,16.5 + parent: 2 + - uid: 3313 + components: + - type: Transform + pos: -23.5,16.5 + parent: 2 + - uid: 3314 + components: + - type: Transform + pos: -22.5,16.5 + parent: 2 + - uid: 3315 + components: + - type: Transform + pos: -22.5,15.5 + parent: 2 + - uid: 3316 + components: + - type: Transform + pos: -21.5,15.5 + parent: 2 + - uid: 3317 + components: + - type: Transform + pos: -20.5,15.5 + parent: 2 + - uid: 3318 + components: + - type: Transform + pos: -19.5,15.5 + parent: 2 + - uid: 3319 + components: + - type: Transform + pos: -18.5,15.5 + parent: 2 + - uid: 3320 + components: + - type: Transform + pos: -17.5,15.5 + parent: 2 + - uid: 3321 + components: + - type: Transform + pos: -16.5,15.5 + parent: 2 + - uid: 3322 + components: + - type: Transform + pos: -20.5,14.5 + parent: 2 + - uid: 3323 + components: + - type: Transform + pos: -24.5,19.5 + parent: 2 + - uid: 3324 + components: + - type: Transform + pos: -24.5,20.5 + parent: 2 + - uid: 3325 + components: + - type: Transform + pos: -24.5,20.5 + parent: 2 + - uid: 3326 + components: + - type: Transform + pos: -25.5,20.5 + parent: 2 + - uid: 3327 + components: + - type: Transform + pos: -26.5,20.5 + parent: 2 + - uid: 3328 + components: + - type: Transform + pos: -27.5,20.5 + parent: 2 + - uid: 3329 + components: + - type: Transform + pos: -28.5,20.5 + parent: 2 + - uid: 3330 + components: + - type: Transform + pos: -29.5,20.5 + parent: 2 + - uid: 3331 + components: + - type: Transform + pos: -30.5,20.5 + parent: 2 + - uid: 3332 + components: + - type: Transform + pos: -31.5,20.5 + parent: 2 + - uid: 3333 + components: + - type: Transform + pos: -32.5,20.5 + parent: 2 + - uid: 3334 + components: + - type: Transform + pos: -33.5,20.5 + parent: 2 + - uid: 3335 + components: + - type: Transform + pos: -26.5,29.5 + parent: 2 + - uid: 3336 + components: + - type: Transform + pos: -27.5,20.5 + parent: 2 + - uid: 3337 + components: + - type: Transform + pos: -27.5,21.5 + parent: 2 + - uid: 3338 + components: + - type: Transform + pos: -27.5,22.5 + parent: 2 + - uid: 3339 + components: + - type: Transform + pos: -27.5,23.5 + parent: 2 + - uid: 3340 + components: + - type: Transform + pos: -27.5,24.5 + parent: 2 + - uid: 3341 + components: + - type: Transform + pos: -27.5,25.5 + parent: 2 + - uid: 3342 + components: + - type: Transform + pos: -27.5,26.5 + parent: 2 + - uid: 3343 + components: + - type: Transform + pos: -27.5,27.5 + parent: 2 + - uid: 3344 + components: + - type: Transform + pos: -25.5,31.5 + parent: 2 + - uid: 3345 + components: + - type: Transform + pos: -25.5,30.5 + parent: 2 + - uid: 3346 + components: + - type: Transform + pos: -25.5,29.5 + parent: 2 + - uid: 3347 + components: + - type: Transform + pos: -26.5,29.5 + parent: 2 + - uid: 3348 + components: + - type: Transform + pos: -25.5,29.5 + parent: 2 + - uid: 3349 + components: + - type: Transform + pos: -24.5,29.5 + parent: 2 + - uid: 3350 + components: + - type: Transform + pos: -23.5,29.5 + parent: 2 + - uid: 3351 + components: + - type: Transform + pos: -27.5,29.5 + parent: 2 + - uid: 3352 + components: + - type: Transform + pos: -33.5,29.5 + parent: 2 + - uid: 3353 + components: + - type: Transform + pos: -32.5,29.5 + parent: 2 + - uid: 3354 + components: + - type: Transform + pos: -31.5,29.5 + parent: 2 + - uid: 3355 + components: + - type: Transform + pos: -30.5,29.5 + parent: 2 + - uid: 3356 + components: + - type: Transform + pos: -29.5,29.5 + parent: 2 + - uid: 3357 + components: + - type: Transform + pos: -28.5,29.5 + parent: 2 + - uid: 3358 + components: + - type: Transform + pos: -14.5,27.5 + parent: 2 + - uid: 3359 + components: + - type: Transform + pos: -23.5,28.5 + parent: 2 + - uid: 3360 + components: + - type: Transform + pos: -22.5,28.5 + parent: 2 + - uid: 3361 + components: + - type: Transform + pos: -21.5,28.5 + parent: 2 + - uid: 3362 + components: + - type: Transform + pos: -20.5,28.5 + parent: 2 + - uid: 3363 + components: + - type: Transform + pos: -19.5,28.5 + parent: 2 + - uid: 3364 + components: + - type: Transform + pos: -18.5,28.5 + parent: 2 + - uid: 3365 + components: + - type: Transform + pos: -17.5,28.5 + parent: 2 + - uid: 3366 + components: + - type: Transform + pos: -16.5,28.5 + parent: 2 + - uid: 3367 + components: + - type: Transform + pos: -15.5,28.5 + parent: 2 + - uid: 3368 + components: + - type: Transform + pos: -14.5,28.5 + parent: 2 + - uid: 3369 + components: + - type: Transform + pos: -13.5,28.5 + parent: 2 + - uid: 3370 + components: + - type: Transform + pos: -12.5,28.5 + parent: 2 + - uid: 3371 + components: + - type: Transform + pos: -11.5,28.5 + parent: 2 + - uid: 3372 + components: + - type: Transform + pos: -10.5,28.5 + parent: 2 + - uid: 3373 + components: + - type: Transform + pos: -9.5,28.5 + parent: 2 + - uid: 3374 + components: + - type: Transform + pos: -8.5,28.5 + parent: 2 + - uid: 3375 + components: + - type: Transform + pos: -7.5,28.5 + parent: 2 + - uid: 3376 + components: + - type: Transform + pos: -6.5,28.5 + parent: 2 + - uid: 3377 + components: + - type: Transform + pos: -5.5,28.5 + parent: 2 + - uid: 3378 + components: + - type: Transform + pos: -4.5,28.5 + parent: 2 + - uid: 3379 + components: + - type: Transform + pos: -3.5,28.5 + parent: 2 + - uid: 3380 + components: + - type: Transform + pos: -14.5,26.5 + parent: 2 + - uid: 3381 + components: + - type: Transform + pos: -14.5,25.5 + parent: 2 + - uid: 3382 + components: + - type: Transform + pos: -14.5,24.5 + parent: 2 + - uid: 3383 + components: + - type: Transform + pos: -14.5,23.5 + parent: 2 + - uid: 3384 + components: + - type: Transform + pos: -14.5,22.5 + parent: 2 + - uid: 3385 + components: + - type: Transform + pos: -14.5,21.5 + parent: 2 + - uid: 3386 + components: + - type: Transform + pos: -14.5,20.5 + parent: 2 + - uid: 3387 + components: + - type: Transform + pos: -14.5,19.5 + parent: 2 + - uid: 3388 + components: + - type: Transform + pos: -13.5,19.5 + parent: 2 + - uid: 3389 + components: + - type: Transform + pos: -12.5,19.5 + parent: 2 + - uid: 3390 + components: + - type: Transform + pos: -11.5,19.5 + parent: 2 + - uid: 3391 + components: + - type: Transform + pos: -10.5,19.5 + parent: 2 + - uid: 3392 + components: + - type: Transform + pos: -9.5,19.5 + parent: 2 + - uid: 3393 + components: + - type: Transform + pos: -8.5,19.5 + parent: 2 + - uid: 3394 + components: + - type: Transform + pos: -7.5,19.5 + parent: 2 + - uid: 3395 + components: + - type: Transform + pos: -6.5,19.5 + parent: 2 + - uid: 3396 + components: + - type: Transform + pos: -5.5,19.5 + parent: 2 + - uid: 3397 + components: + - type: Transform + pos: -4.5,19.5 + parent: 2 + - uid: 3398 + components: + - type: Transform + pos: -3.5,19.5 + parent: 2 + - uid: 3399 + components: + - type: Transform + pos: -2.5,19.5 + parent: 2 + - uid: 3400 + components: + - type: Transform + pos: -1.5,19.5 + parent: 2 + - uid: 3401 + components: + - type: Transform + pos: -3.5,20.5 + parent: 2 + - uid: 3402 + components: + - type: Transform + pos: -11.5,20.5 + parent: 2 + - uid: 3403 + components: + - type: Transform + pos: -11.5,21.5 + parent: 2 + - uid: 3404 + components: + - type: Transform + pos: -12.5,21.5 + parent: 2 + - uid: 3405 + components: + - type: Transform + pos: -8.5,20.5 + parent: 2 + - uid: 3406 + components: + - type: Transform + pos: -8.5,21.5 + parent: 2 + - uid: 3407 + components: + - type: Transform + pos: -9.5,21.5 + parent: 2 + - uid: 3408 + components: + - type: Transform + pos: -6.5,20.5 + parent: 2 + - uid: 3409 + components: + - type: Transform + pos: -6.5,21.5 + parent: 2 + - uid: 3410 + components: + - type: Transform + pos: -5.5,21.5 + parent: 2 + - uid: 3411 + components: + - type: Transform + pos: -3.5,21.5 + parent: 2 + - uid: 3412 + components: + - type: Transform + pos: -2.5,21.5 + parent: 2 + - uid: 3413 + components: + - type: Transform + pos: -3.5,21.5 + parent: 2 + - uid: 3414 + components: + - type: Transform + pos: -2.5,21.5 + parent: 2 + - uid: 3415 + components: + - type: Transform + pos: -20.5,22.5 + parent: 2 + - uid: 3416 + components: + - type: Transform + pos: -20.5,23.5 + parent: 2 + - uid: 3417 + components: + - type: Transform + pos: -20.5,21.5 + parent: 2 + - uid: 3418 + components: + - type: Transform + pos: -20.5,20.5 + parent: 2 + - uid: 3419 + components: + - type: Transform + pos: -20.5,19.5 + parent: 2 + - uid: 3420 + components: + - type: Transform + pos: -20.5,18.5 + parent: 2 + - uid: 3421 + components: + - type: Transform + pos: -19.5,19.5 + parent: 2 + - uid: 3422 + components: + - type: Transform + pos: -18.5,19.5 + parent: 2 + - uid: 3423 + components: + - type: Transform + pos: -19.5,22.5 + parent: 2 + - uid: 3424 + components: + - type: Transform + pos: -18.5,22.5 + parent: 2 + - uid: 3425 + components: + - type: Transform + pos: -23.5,30.5 + parent: 2 + - uid: 3426 + components: + - type: Transform + pos: -23.5,31.5 + parent: 2 + - uid: 3427 + components: + - type: Transform + pos: -23.5,32.5 + parent: 2 + - uid: 3428 + components: + - type: Transform + pos: -23.5,33.5 + parent: 2 + - uid: 3429 + components: + - type: Transform + pos: -23.5,34.5 + parent: 2 + - uid: 3430 + components: + - type: Transform + pos: -23.5,35.5 + parent: 2 + - uid: 3431 + components: + - type: Transform + pos: -23.5,36.5 + parent: 2 + - uid: 3432 + components: + - type: Transform + pos: -16.5,10.5 + parent: 2 + - uid: 3433 + components: + - type: Transform + pos: -20.5,27.5 + parent: 2 + - uid: 3434 + components: + - type: Transform + pos: -20.5,26.5 + parent: 2 + - uid: 3435 + components: + - type: Transform + pos: -20.5,25.5 + parent: 2 + - uid: 3436 + components: + - type: Transform + pos: -19.5,25.5 + parent: 2 + - uid: 3437 + components: + - type: Transform + pos: -18.5,25.5 + parent: 2 + - uid: 3438 + components: + - type: Transform + pos: -21.5,25.5 + parent: 2 + - uid: 3439 + components: + - type: Transform + pos: -11.5,27.5 + parent: 2 + - uid: 3440 + components: + - type: Transform + pos: -11.5,26.5 + parent: 2 + - uid: 3441 + components: + - type: Transform + pos: -11.5,25.5 + parent: 2 + - uid: 3442 + components: + - type: Transform + pos: -11.5,24.5 + parent: 2 + - uid: 3443 + components: + - type: Transform + pos: -11.5,23.5 + parent: 2 + - uid: 3444 + components: + - type: Transform + pos: -2.5,29.5 + parent: 2 + - uid: 3445 + components: + - type: Transform + pos: -12.5,23.5 + parent: 2 + - uid: 3446 + components: + - type: Transform + pos: -7.5,27.5 + parent: 2 + - uid: 3447 + components: + - type: Transform + pos: -7.5,26.5 + parent: 2 + - uid: 3448 + components: + - type: Transform + pos: -7.5,25.5 + parent: 2 + - uid: 3449 + components: + - type: Transform + pos: -7.5,24.5 + parent: 2 + - uid: 3450 + components: + - type: Transform + pos: -7.5,23.5 + parent: 2 + - uid: 3451 + components: + - type: Transform + pos: -7.5,22.5 + parent: 2 + - uid: 3452 + components: + - type: Transform + pos: -9.5,23.5 + parent: 2 + - uid: 3453 + components: + - type: Transform + pos: -8.5,23.5 + parent: 2 + - uid: 3454 + components: + - type: Transform + pos: -7.5,23.5 + parent: 2 + - uid: 3455 + components: + - type: Transform + pos: -6.5,23.5 + parent: 2 + - uid: 3456 + components: + - type: Transform + pos: -5.5,23.5 + parent: 2 + - uid: 3457 + components: + - type: Transform + pos: -2.5,28.5 + parent: 2 + - uid: 3458 + components: + - type: Transform + pos: -2.5,27.5 + parent: 2 + - uid: 3459 + components: + - type: Transform + pos: -2.5,26.5 + parent: 2 + - uid: 3460 + components: + - type: Transform + pos: -2.5,25.5 + parent: 2 + - uid: 3461 + components: + - type: Transform + pos: -2.5,24.5 + parent: 2 + - uid: 3462 + components: + - type: Transform + pos: -2.5,23.5 + parent: 2 + - uid: 3463 + components: + - type: Transform + pos: -3.5,23.5 + parent: 2 + - uid: 3464 + components: + - type: Transform + pos: -2.5,30.5 + parent: 2 + - uid: 3465 + components: + - type: Transform + pos: -2.5,31.5 + parent: 2 + - uid: 3466 + components: + - type: Transform + pos: -2.5,32.5 + parent: 2 + - uid: 3467 + components: + - type: Transform + pos: -2.5,33.5 + parent: 2 + - uid: 3468 + components: + - type: Transform + pos: -2.5,34.5 + parent: 2 + - uid: 3469 + components: + - type: Transform + pos: -2.5,35.5 + parent: 2 + - uid: 3470 + components: + - type: Transform + pos: -2.5,36.5 + parent: 2 + - uid: 3471 + components: + - type: Transform + pos: -2.5,37.5 + parent: 2 + - uid: 3472 + components: + - type: Transform + pos: -2.5,38.5 + parent: 2 + - uid: 3473 + components: + - type: Transform + pos: -2.5,39.5 + parent: 2 + - uid: 3474 + components: + - type: Transform + pos: -3.5,39.5 + parent: 2 + - uid: 3475 + components: + - type: Transform + pos: -4.5,39.5 + parent: 2 + - uid: 3476 + components: + - type: Transform + pos: -5.5,39.5 + parent: 2 + - uid: 3477 + components: + - type: Transform + pos: -6.5,39.5 + parent: 2 + - uid: 3478 + components: + - type: Transform + pos: -6.5,38.5 + parent: 2 + - uid: 3479 + components: + - type: Transform + pos: -7.5,38.5 + parent: 2 + - uid: 3480 + components: + - type: Transform + pos: -6.5,37.5 + parent: 2 + - uid: 3481 + components: + - type: Transform + pos: -5.5,37.5 + parent: 2 + - uid: 3482 + components: + - type: Transform + pos: -4.5,37.5 + parent: 2 + - uid: 3483 + components: + - type: Transform + pos: -3.5,37.5 + parent: 2 + - uid: 3484 + components: + - type: Transform + pos: -2.5,37.5 + parent: 2 + - uid: 3485 + components: + - type: Transform + pos: -19.5,37.5 + parent: 2 + - uid: 3486 + components: + - type: Transform + pos: -19.5,36.5 + parent: 2 + - uid: 3487 + components: + - type: Transform + pos: -19.5,35.5 + parent: 2 + - uid: 3488 + components: + - type: Transform + pos: -19.5,34.5 + parent: 2 + - uid: 3489 + components: + - type: Transform + pos: -19.5,33.5 + parent: 2 + - uid: 3490 + components: + - type: Transform + pos: -19.5,32.5 + parent: 2 + - uid: 3491 + components: + - type: Transform + pos: -19.5,31.5 + parent: 2 + - uid: 3492 + components: + - type: Transform + pos: -19.5,30.5 + parent: 2 + - uid: 3493 + components: + - type: Transform + pos: -18.5,32.5 + parent: 2 + - uid: 3494 + components: + - type: Transform + pos: -17.5,32.5 + parent: 2 + - uid: 3495 + components: + - type: Transform + pos: -15.5,32.5 + parent: 2 + - uid: 3496 + components: + - type: Transform + pos: -16.5,32.5 + parent: 2 + - uid: 3497 + components: + - type: Transform + pos: -16.5,33.5 + parent: 2 + - uid: 3498 + components: + - type: Transform + pos: -16.5,34.5 + parent: 2 + - uid: 3499 + components: + - type: Transform + pos: -16.5,35.5 + parent: 2 + - uid: 3500 + components: + - type: Transform + pos: -16.5,36.5 + parent: 2 + - uid: 3501 + components: + - type: Transform + pos: -16.5,37.5 + parent: 2 + - uid: 3502 + components: + - type: Transform + pos: -16.5,38.5 + parent: 2 + - uid: 3503 + components: + - type: Transform + pos: -16.5,39.5 + parent: 2 + - uid: 3504 + components: + - type: Transform + pos: -18.5,39.5 + parent: 2 + - uid: 3505 + components: + - type: Transform + pos: -17.5,39.5 + parent: 2 + - uid: 3506 + components: + - type: Transform + pos: -16.5,39.5 + parent: 2 + - uid: 3507 + components: + - type: Transform + pos: -15.5,39.5 + parent: 2 + - uid: 3508 + components: + - type: Transform + pos: -14.5,39.5 + parent: 2 + - uid: 3509 + components: + - type: Transform + pos: -13.5,39.5 + parent: 2 + - uid: 3510 + components: + - type: Transform + pos: -12.5,39.5 + parent: 2 + - uid: 3511 + components: + - type: Transform + pos: -11.5,39.5 + parent: 2 + - uid: 3512 + components: + - type: Transform + pos: -14.5,32.5 + parent: 2 + - uid: 3513 + components: + - type: Transform + pos: -13.5,32.5 + parent: 2 + - uid: 3514 + components: + - type: Transform + pos: -12.5,32.5 + parent: 2 + - uid: 3515 + components: + - type: Transform + pos: -11.5,32.5 + parent: 2 + - uid: 3516 + components: + - type: Transform + pos: -10.5,32.5 + parent: 2 + - uid: 3517 + components: + - type: Transform + pos: -9.5,32.5 + parent: 2 + - uid: 3518 + components: + - type: Transform + pos: -9.5,33.5 + parent: 2 + - uid: 3519 + components: + - type: Transform + pos: -8.5,33.5 + parent: 2 + - uid: 3520 + components: + - type: Transform + pos: -7.5,33.5 + parent: 2 + - uid: 3521 + components: + - type: Transform + pos: -6.5,33.5 + parent: 2 + - uid: 3522 + components: + - type: Transform + pos: -12.5,31.5 + parent: 2 + - uid: 3523 + components: + - type: Transform + pos: -12.5,31.5 + parent: 2 + - uid: 3524 + components: + - type: Transform + pos: -12.5,32.5 + parent: 2 + - uid: 3525 + components: + - type: Transform + pos: -12.5,33.5 + parent: 2 + - uid: 3526 + components: + - type: Transform + pos: -12.5,34.5 + parent: 2 + - uid: 3527 + components: + - type: Transform + pos: -12.5,35.5 + parent: 2 + - uid: 3528 + components: + - type: Transform + pos: -12.5,36.5 + parent: 2 + - uid: 3529 + components: + - type: Transform + pos: -9.5,32.5 + parent: 2 + - uid: 3530 + components: + - type: Transform + pos: -9.5,33.5 + parent: 2 + - uid: 3531 + components: + - type: Transform + pos: -9.5,34.5 + parent: 2 + - uid: 3532 + components: + - type: Transform + pos: -9.5,35.5 + parent: 2 + - uid: 3533 + components: + - type: Transform + pos: -9.5,36.5 + parent: 2 + - uid: 3534 + components: + - type: Transform + pos: -9.5,37.5 + parent: 2 + - uid: 3535 + components: + - type: Transform + pos: -9.5,38.5 + parent: 2 + - uid: 3536 + components: + - type: Transform + pos: -9.5,39.5 + parent: 2 + - uid: 3537 + components: + - type: Transform + pos: -9.5,40.5 + parent: 2 + - uid: 3538 + components: + - type: Transform + pos: -9.5,41.5 + parent: 2 + - uid: 3539 + components: + - type: Transform + pos: -9.5,42.5 + parent: 2 + - uid: 3540 + components: + - type: Transform + pos: -9.5,42.5 + parent: 2 + - uid: 3541 + components: + - type: Transform + pos: -9.5,43.5 + parent: 2 + - uid: 3542 + components: + - type: Transform + pos: -9.5,43.5 + parent: 2 + - uid: 3543 + components: + - type: Transform + pos: -10.5,43.5 + parent: 2 + - uid: 3544 + components: + - type: Transform + pos: -11.5,43.5 + parent: 2 + - uid: 3545 + components: + - type: Transform + pos: -12.5,43.5 + parent: 2 + - uid: 3546 + components: + - type: Transform + pos: -13.5,43.5 + parent: 2 + - uid: 3547 + components: + - type: Transform + pos: -30.5,40.5 + parent: 2 + - uid: 3548 + components: + - type: Transform + pos: -30.5,39.5 + parent: 2 + - uid: 3549 + components: + - type: Transform + pos: -30.5,38.5 + parent: 2 + - uid: 3550 + components: + - type: Transform + pos: -30.5,37.5 + parent: 2 + - uid: 3551 + components: + - type: Transform + pos: -30.5,41.5 + parent: 2 + - uid: 3552 + components: + - type: Transform + pos: -29.5,41.5 + parent: 2 + - uid: 3553 + components: + - type: Transform + pos: -29.5,38.5 + parent: 2 + - uid: 3554 + components: + - type: Transform + pos: -30.5,36.5 + parent: 2 + - uid: 3555 + components: + - type: Transform + pos: -30.5,35.5 + parent: 2 + - uid: 3556 + components: + - type: Transform + pos: -30.5,34.5 + parent: 2 + - uid: 3557 + components: + - type: Transform + pos: -29.5,34.5 + parent: 2 + - uid: 3558 + components: + - type: Transform + pos: -28.5,34.5 + parent: 2 + - uid: 3559 + components: + - type: Transform + pos: -27.5,34.5 + parent: 2 + - uid: 3560 + components: + - type: Transform + pos: -26.5,34.5 + parent: 2 + - uid: 3561 + components: + - type: Transform + pos: -29.5,33.5 + parent: 2 + - uid: 3562 + components: + - type: Transform + pos: -25.5,34.5 + parent: 2 + - uid: 3563 + components: + - type: Transform + pos: -27.5,35.5 + parent: 2 + - uid: 3564 + components: + - type: Transform + pos: -27.5,36.5 + parent: 2 + - uid: 3565 + components: + - type: Transform + pos: -26.5,36.5 + parent: 2 + - uid: 3566 + components: + - type: Transform + pos: -25.5,36.5 + parent: 2 + - uid: 3567 + components: + - type: Transform + pos: -10.5,11.5 + parent: 2 + - uid: 3568 + components: + - type: Transform + pos: -9.5,11.5 + parent: 2 + - uid: 3569 + components: + - type: Transform + pos: -21.5,41.5 + parent: 2 + - uid: 3570 + components: + - type: Transform + pos: -20.5,41.5 + parent: 2 + - uid: 3571 + components: + - type: Transform + pos: -22.5,41.5 + parent: 2 + - uid: 3572 + components: + - type: Transform + pos: -23.5,41.5 + parent: 2 + - uid: 3573 + components: + - type: Transform + pos: -24.5,41.5 + parent: 2 + - uid: 3574 + components: + - type: Transform + pos: -25.5,41.5 + parent: 2 + - uid: 3575 + components: + - type: Transform + pos: -36.5,25.5 + parent: 2 + - uid: 3576 + components: + - type: Transform + pos: -25.5,40.5 + parent: 2 + - uid: 3577 + components: + - type: Transform + pos: -25.5,39.5 + parent: 2 + - uid: 3578 + components: + - type: Transform + pos: -25.5,38.5 + parent: 2 + - uid: 3579 + components: + - type: Transform + pos: -25.5,38.5 + parent: 2 + - uid: 3580 + components: + - type: Transform + pos: -21.5,40.5 + parent: 2 + - uid: 3581 + components: + - type: Transform + pos: -21.5,39.5 + parent: 2 + - uid: 3582 + components: + - type: Transform + pos: -21.5,38.5 + parent: 2 + - uid: 3583 + components: + - type: Transform + pos: -23.5,38.5 + parent: 2 + - uid: 3584 + components: + - type: Transform + pos: -23.5,39.5 + parent: 2 + - uid: 3585 + components: + - type: Transform + pos: -23.5,40.5 + parent: 2 + - uid: 3586 + components: + - type: Transform + pos: -8.5,10.5 + parent: 2 + - uid: 3587 + components: + - type: Transform + pos: -23.5,42.5 + parent: 2 + - uid: 3588 + components: + - type: Transform + pos: -23.5,43.5 + parent: 2 + - uid: 3589 + components: + - type: Transform + pos: -26.5,44.5 + parent: 2 + - uid: 3590 + components: + - type: Transform + pos: -25.5,44.5 + parent: 2 + - uid: 3591 + components: + - type: Transform + pos: -24.5,44.5 + parent: 2 + - uid: 3592 + components: + - type: Transform + pos: -23.5,44.5 + parent: 2 + - uid: 3593 + components: + - type: Transform + pos: -22.5,44.5 + parent: 2 + - uid: 3594 + components: + - type: Transform + pos: -21.5,44.5 + parent: 2 + - uid: 3595 + components: + - type: Transform + pos: -20.5,44.5 + parent: 2 + - uid: 3596 + components: + - type: Transform + pos: -20.5,43.5 + parent: 2 + - uid: 3597 + components: + - type: Transform + pos: -20.5,45.5 + parent: 2 + - uid: 3598 + components: + - type: Transform + pos: -21.5,45.5 + parent: 2 + - uid: 3599 + components: + - type: Transform + pos: -21.5,46.5 + parent: 2 + - uid: 3600 + components: + - type: Transform + pos: -21.5,46.5 + parent: 2 + - uid: 3601 + components: + - type: Transform + pos: -22.5,46.5 + parent: 2 + - uid: 3602 + components: + - type: Transform + pos: -23.5,46.5 + parent: 2 + - uid: 3603 + components: + - type: Transform + pos: -24.5,46.5 + parent: 2 + - uid: 3604 + components: + - type: Transform + pos: -36.5,18.5 + parent: 2 + - uid: 3605 + components: + - type: Transform + pos: -36.5,19.5 + parent: 2 + - uid: 3606 + components: + - type: Transform + pos: -36.5,20.5 + parent: 2 + - uid: 3607 + components: + - type: Transform + pos: -36.5,21.5 + parent: 2 + - uid: 3608 + components: + - type: Transform + pos: -36.5,22.5 + parent: 2 + - uid: 3609 + components: + - type: Transform + pos: -36.5,23.5 + parent: 2 + - uid: 3610 + components: + - type: Transform + pos: -36.5,24.5 + parent: 2 + - uid: 3611 + components: + - type: Transform + pos: -35.5,24.5 + parent: 2 + - uid: 3612 + components: + - type: Transform + pos: -34.5,24.5 + parent: 2 + - uid: 3613 + components: + - type: Transform + pos: -33.5,24.5 + parent: 2 + - uid: 3614 + components: + - type: Transform + pos: -32.5,24.5 + parent: 2 + - uid: 3615 + components: + - type: Transform + pos: -31.5,24.5 + parent: 2 + - uid: 3616 + components: + - type: Transform + pos: -30.5,24.5 + parent: 2 + - uid: 3617 + components: + - type: Transform + pos: -29.5,24.5 + parent: 2 + - uid: 3618 + components: + - type: Transform + pos: -30.5,25.5 + parent: 2 + - uid: 3619 + components: + - type: Transform + pos: -36.5,20.5 + parent: 2 + - uid: 3620 + components: + - type: Transform + pos: -37.5,20.5 + parent: 2 + - uid: 3621 + components: + - type: Transform + pos: -38.5,20.5 + parent: 2 + - uid: 3622 + components: + - type: Transform + pos: -39.5,20.5 + parent: 2 + - uid: 3623 + components: + - type: Transform + pos: -40.5,20.5 + parent: 2 + - uid: 3624 + components: + - type: Transform + pos: -41.5,20.5 + parent: 2 + - uid: 3625 + components: + - type: Transform + pos: -42.5,20.5 + parent: 2 + - uid: 3626 + components: + - type: Transform + pos: -43.5,20.5 + parent: 2 + - uid: 3627 + components: + - type: Transform + pos: -39.5,21.5 + parent: 2 + - uid: 3628 + components: + - type: Transform + pos: -39.5,22.5 + parent: 2 + - uid: 3629 + components: + - type: Transform + pos: -40.5,22.5 + parent: 2 + - uid: 3630 + components: + - type: Transform + pos: -41.5,22.5 + parent: 2 + - uid: 3631 + components: + - type: Transform + pos: -42.5,22.5 + parent: 2 + - uid: 3632 + components: + - type: Transform + pos: -36.5,26.5 + parent: 2 + - uid: 3633 + components: + - type: Transform + pos: -36.5,27.5 + parent: 2 + - uid: 3634 + components: + - type: Transform + pos: -36.5,28.5 + parent: 2 + - uid: 3635 + components: + - type: Transform + pos: -36.5,29.5 + parent: 2 + - uid: 3636 + components: + - type: Transform + pos: -36.5,26.5 + parent: 2 + - uid: 3637 + components: + - type: Transform + pos: -37.5,26.5 + parent: 2 + - uid: 3638 + components: + - type: Transform + pos: -38.5,26.5 + parent: 2 + - uid: 3639 + components: + - type: Transform + pos: -39.5,26.5 + parent: 2 + - uid: 3640 + components: + - type: Transform + pos: -40.5,26.5 + parent: 2 + - uid: 3641 + components: + - type: Transform + pos: -41.5,26.5 + parent: 2 + - uid: 3642 + components: + - type: Transform + pos: -42.5,26.5 + parent: 2 + - uid: 3643 + components: + - type: Transform + pos: -40.5,25.5 + parent: 2 + - uid: 3644 + components: + - type: Transform + pos: -40.5,24.5 + parent: 2 + - uid: 3645 + components: + - type: Transform + pos: -40.5,23.5 + parent: 2 + - uid: 3646 + components: + - type: Transform + pos: -40.5,25.5 + parent: 2 + - uid: 3647 + components: + - type: Transform + pos: -37.5,29.5 + parent: 2 + - uid: 3648 + components: + - type: Transform + pos: -38.5,29.5 + parent: 2 + - uid: 3649 + components: + - type: Transform + pos: -39.5,29.5 + parent: 2 + - uid: 3650 + components: + - type: Transform + pos: -40.5,29.5 + parent: 2 + - uid: 3651 + components: + - type: Transform + pos: -41.5,29.5 + parent: 2 + - uid: 3652 + components: + - type: Transform + pos: -42.5,29.5 + parent: 2 + - uid: 3653 + components: + - type: Transform + pos: -39.5,30.5 + parent: 2 + - uid: 3654 + components: + - type: Transform + pos: -39.5,31.5 + parent: 2 + - uid: 3655 + components: + - type: Transform + pos: -39.5,32.5 + parent: 2 + - uid: 3656 + components: + - type: Transform + pos: -39.5,33.5 + parent: 2 + - uid: 3657 + components: + - type: Transform + pos: -39.5,34.5 + parent: 2 + - uid: 3658 + components: + - type: Transform + pos: -39.5,35.5 + parent: 2 + - uid: 3659 + components: + - type: Transform + pos: -39.5,36.5 + parent: 2 + - uid: 3660 + components: + - type: Transform + pos: -42.5,35.5 + parent: 2 + - uid: 3661 + components: + - type: Transform + pos: -41.5,35.5 + parent: 2 + - uid: 3662 + components: + - type: Transform + pos: -40.5,35.5 + parent: 2 + - uid: 3663 + components: + - type: Transform + pos: -39.5,35.5 + parent: 2 + - uid: 3664 + components: + - type: Transform + pos: -38.5,35.5 + parent: 2 + - uid: 3665 + components: + - type: Transform + pos: -37.5,35.5 + parent: 2 + - uid: 3666 + components: + - type: Transform + pos: -36.5,35.5 + parent: 2 + - uid: 3667 + components: + - type: Transform + pos: -35.5,35.5 + parent: 2 + - uid: 3668 + components: + - type: Transform + pos: -34.5,35.5 + parent: 2 + - uid: 3669 + components: + - type: Transform + pos: -33.5,35.5 + parent: 2 + - uid: 3670 + components: + - type: Transform + pos: -32.5,35.5 + parent: 2 + - uid: 3671 + components: + - type: Transform + pos: -42.5,32.5 + parent: 2 + - uid: 3672 + components: + - type: Transform + pos: -41.5,32.5 + parent: 2 + - uid: 3673 + components: + - type: Transform + pos: -40.5,32.5 + parent: 2 + - uid: 3674 + components: + - type: Transform + pos: -39.5,32.5 + parent: 2 + - uid: 3675 + components: + - type: Transform + pos: -38.5,32.5 + parent: 2 + - uid: 3676 + components: + - type: Transform + pos: -37.5,32.5 + parent: 2 + - uid: 3677 + components: + - type: Transform + pos: -36.5,32.5 + parent: 2 + - uid: 3678 + components: + - type: Transform + pos: -35.5,32.5 + parent: 2 + - uid: 3679 + components: + - type: Transform + pos: -34.5,32.5 + parent: 2 + - uid: 3680 + components: + - type: Transform + pos: -33.5,32.5 + parent: 2 + - uid: 3681 + components: + - type: Transform + pos: -32.5,32.5 + parent: 2 + - uid: 3682 + components: + - type: Transform + pos: -42.5,36.5 + parent: 2 + - uid: 3683 + components: + - type: Transform + pos: -36.5,36.5 + parent: 2 + - uid: 3684 + components: + - type: Transform + pos: -36.5,37.5 + parent: 2 + - uid: 3685 + components: + - type: Transform + pos: -36.5,38.5 + parent: 2 + - uid: 3686 + components: + - type: Transform + pos: -36.5,38.5 + parent: 2 + - uid: 3687 + components: + - type: Transform + pos: -35.5,38.5 + parent: 2 + - uid: 3688 + components: + - type: Transform + pos: -34.5,38.5 + parent: 2 + - uid: 3689 + components: + - type: Transform + pos: -33.5,38.5 + parent: 2 + - uid: 3690 + components: + - type: Transform + pos: -32.5,38.5 + parent: 2 + - uid: 3691 + components: + - type: Transform + pos: -23.5,27.5 + parent: 2 + - uid: 3692 + components: + - type: Transform + pos: -23.5,26.5 + parent: 2 + - uid: 3693 + components: + - type: Transform + pos: -9.5,10.5 + parent: 2 + - uid: 3694 + components: + - type: Transform + pos: -10.5,10.5 + parent: 2 + - uid: 3695 + components: + - type: Transform + pos: -11.5,10.5 + parent: 2 + - uid: 3696 + components: + - type: Transform + pos: -11.5,9.5 + parent: 2 + - uid: 3697 + components: + - type: Transform + pos: -11.5,8.5 + parent: 2 + - uid: 3698 + components: + - type: Transform + pos: -10.5,8.5 + parent: 2 + - uid: 3699 + components: + - type: Transform + pos: -9.5,8.5 + parent: 2 + - uid: 3700 + components: + - type: Transform + pos: -8.5,8.5 + parent: 2 + - uid: 3701 + components: + - type: Transform + pos: -13.5,9.5 + parent: 2 + - uid: 3702 + components: + - type: Transform + pos: -11.5,11.5 + parent: 2 + - uid: 3703 + components: + - type: Transform + pos: -12.5,11.5 + parent: 2 + - uid: 3704 + components: + - type: Transform + pos: -13.5,11.5 + parent: 2 + - uid: 3705 + components: + - type: Transform + pos: -14.5,11.5 + parent: 2 + - uid: 3706 + components: + - type: Transform + pos: -15.5,11.5 + parent: 2 + - uid: 3707 + components: + - type: Transform + pos: -16.5,11.5 + parent: 2 + - uid: 3708 + components: + - type: Transform + pos: -17.5,11.5 + parent: 2 + - uid: 3709 + components: + - type: Transform + pos: -11.5,11.5 + parent: 2 + - uid: 3710 + components: + - type: Transform + pos: -11.5,12.5 + parent: 2 + - uid: 3711 + components: + - type: Transform + pos: -11.5,13.5 + parent: 2 + - uid: 3712 + components: + - type: Transform + pos: -11.5,14.5 + parent: 2 + - uid: 3713 + components: + - type: Transform + pos: -11.5,15.5 + parent: 2 + - uid: 3714 + components: + - type: Transform + pos: -14.5,15.5 + parent: 2 + - uid: 3715 + components: + - type: Transform + pos: -13.5,15.5 + parent: 2 + - uid: 3716 + components: + - type: Transform + pos: -12.5,15.5 + parent: 2 + - uid: 3717 + components: + - type: Transform + pos: -11.5,15.5 + parent: 2 + - uid: 3718 + components: + - type: Transform + pos: -10.5,15.5 + parent: 2 + - uid: 3719 + components: + - type: Transform + pos: -9.5,15.5 + parent: 2 + - uid: 3720 + components: + - type: Transform + pos: -8.5,15.5 + parent: 2 + - uid: 3721 + components: + - type: Transform + pos: -7.5,15.5 + parent: 2 + - uid: 3722 + components: + - type: Transform + pos: -6.5,15.5 + parent: 2 + - uid: 3723 + components: + - type: Transform + pos: -5.5,15.5 + parent: 2 + - uid: 3724 + components: + - type: Transform + pos: -4.5,15.5 + parent: 2 + - uid: 3725 + components: + - type: Transform + pos: -3.5,15.5 + parent: 2 + - uid: 3726 + components: + - type: Transform + pos: -2.5,15.5 + parent: 2 + - uid: 3727 + components: + - type: Transform + pos: -4.5,14.5 + parent: 2 + - uid: 3728 + components: + - type: Transform + pos: -4.5,13.5 + parent: 2 + - uid: 3729 + components: + - type: Transform + pos: -3.5,13.5 + parent: 2 + - uid: 3730 + components: + - type: Transform + pos: -2.5,13.5 + parent: 2 + - uid: 3731 + components: + - type: Transform + pos: -4.5,14.5 + parent: 2 + - uid: 3732 + components: + - type: Transform + pos: -20.5,13.5 + parent: 2 + - uid: 3733 + components: + - type: Transform + pos: -20.5,12.5 + parent: 2 + - uid: 3734 + components: + - type: Transform + pos: -20.5,11.5 + parent: 2 + - uid: 3735 + components: + - type: Transform + pos: -20.5,10.5 + parent: 2 + - uid: 3736 + components: + - type: Transform + pos: -20.5,9.5 + parent: 2 + - uid: 3737 + components: + - type: Transform + pos: -20.5,8.5 + parent: 2 + - uid: 3738 + components: + - type: Transform + pos: -20.5,7.5 + parent: 2 + - uid: 3739 + components: + - type: Transform + pos: -20.5,6.5 + parent: 2 + - uid: 3740 + components: + - type: Transform + pos: -20.5,5.5 + parent: 2 + - uid: 3741 + components: + - type: Transform + pos: -19.5,6.5 + parent: 2 + - uid: 3742 + components: + - type: Transform + pos: -18.5,6.5 + parent: 2 + - uid: 3743 + components: + - type: Transform + pos: -17.5,6.5 + parent: 2 + - uid: 3744 + components: + - type: Transform + pos: -16.5,6.5 + parent: 2 + - uid: 3745 + components: + - type: Transform + pos: -21.5,11.5 + parent: 2 + - uid: 3746 + components: + - type: Transform + pos: -22.5,11.5 + parent: 2 + - uid: 3747 + components: + - type: Transform + pos: 35.5,-38.5 + parent: 2 + - uid: 3748 + components: + - type: Transform + pos: 38.5,-38.5 + parent: 2 + - uid: 3749 + components: + - type: Transform + pos: 39.5,-38.5 + parent: 2 + - uid: 3750 + components: + - type: Transform + pos: 40.5,-38.5 + parent: 2 + - uid: 3751 + components: + - type: Transform + pos: 41.5,-38.5 + parent: 2 + - uid: 3752 + components: + - type: Transform + pos: 42.5,-38.5 + parent: 2 + - uid: 3753 + components: + - type: Transform + pos: 43.5,-38.5 + parent: 2 + - uid: 3754 + components: + - type: Transform + pos: 44.5,-38.5 + parent: 2 + - uid: 3755 + components: + - type: Transform + pos: 45.5,-38.5 + parent: 2 + - uid: 3756 + components: + - type: Transform + pos: 46.5,-38.5 + parent: 2 + - uid: 3757 + components: + - type: Transform + pos: 40.5,-39.5 + parent: 2 + - uid: 3758 + components: + - type: Transform + pos: 46.5,-39.5 + parent: 2 + - uid: 3759 + components: + - type: Transform + pos: 46.5,-37.5 + parent: 2 + - uid: 3760 + components: + - type: Transform + pos: 39.5,-37.5 + parent: 2 + - uid: 3761 + components: + - type: Transform + pos: 44.5,5.5 + parent: 2 + - uid: 3762 + components: + - type: Transform + pos: 43.5,5.5 + parent: 2 + - uid: 3763 + components: + - type: Transform + pos: 42.5,5.5 + parent: 2 + - uid: 3764 + components: + - type: Transform + pos: 41.5,5.5 + parent: 2 + - uid: 3765 + components: + - type: Transform + pos: 40.5,5.5 + parent: 2 + - uid: 3766 + components: + - type: Transform + pos: 39.5,5.5 + parent: 2 + - uid: 3767 + components: + - type: Transform + pos: 38.5,5.5 + parent: 2 + - uid: 3768 + components: + - type: Transform + pos: 37.5,5.5 + parent: 2 + - uid: 3769 + components: + - type: Transform + pos: 39.5,-0.5 + parent: 2 + - uid: 3770 + components: + - type: Transform + pos: 39.5,0.5 + parent: 2 + - uid: 3771 + components: + - type: Transform + pos: 39.5,1.5 + parent: 2 + - uid: 3772 + components: + - type: Transform + pos: 39.5,2.5 + parent: 2 + - uid: 3773 + components: + - type: Transform + pos: 39.5,3.5 + parent: 2 + - uid: 3774 + components: + - type: Transform + pos: 39.5,4.5 + parent: 2 + - uid: 3775 + components: + - type: Transform + pos: 39.5,5.5 + parent: 2 + - uid: 3776 + components: + - type: Transform + pos: 40.5,-0.5 + parent: 2 + - uid: 3777 + components: + - type: Transform + pos: 41.5,-0.5 + parent: 2 + - uid: 3778 + components: + - type: Transform + pos: 42.5,-0.5 + parent: 2 + - uid: 3779 + components: + - type: Transform + pos: 43.5,-0.5 + parent: 2 + - uid: 3780 + components: + - type: Transform + pos: 44.5,-0.5 + parent: 2 + - uid: 3781 + components: + - type: Transform + pos: 40.5,-0.5 + parent: 2 + - uid: 3782 + components: + - type: Transform + pos: 41.5,-0.5 + parent: 2 + - uid: 3783 + components: + - type: Transform + pos: 42.5,-0.5 + parent: 2 + - uid: 3784 + components: + - type: Transform + pos: 43.5,-0.5 + parent: 2 + - uid: 3785 + components: + - type: Transform + pos: 44.5,-0.5 + parent: 2 + - uid: 3786 + components: + - type: Transform + pos: 42.5,6.5 + parent: 2 + - uid: 3787 + components: + - type: Transform + pos: 42.5,7.5 + parent: 2 + - uid: 3788 + components: + - type: Transform + pos: 42.5,8.5 + parent: 2 + - uid: 3789 + components: + - type: Transform + pos: 42.5,9.5 + parent: 2 + - uid: 3790 + components: + - type: Transform + pos: 41.5,9.5 + parent: 2 + - uid: 3791 + components: + - type: Transform + pos: 41.5,10.5 + parent: 2 + - uid: 3792 + components: + - type: Transform + pos: 41.5,11.5 + parent: 2 + - uid: 3793 + components: + - type: Transform + pos: 41.5,12.5 + parent: 2 + - uid: 3794 + components: + - type: Transform + pos: 41.5,13.5 + parent: 2 + - uid: 3795 + components: + - type: Transform + pos: 41.5,14.5 + parent: 2 + - uid: 3796 + components: + - type: Transform + pos: 42.5,13.5 + parent: 2 + - uid: 3797 + components: + - type: Transform + pos: 40.5,9.5 + parent: 2 + - uid: 3798 + components: + - type: Transform + pos: 39.5,9.5 + parent: 2 + - uid: 3799 + components: + - type: Transform + pos: 38.5,9.5 + parent: 2 + - uid: 3800 + components: + - type: Transform + pos: 37.5,9.5 + parent: 2 + - uid: 3801 + components: + - type: Transform + pos: 37.5,6.5 + parent: 2 + - uid: 3802 + components: + - type: Transform + pos: 37.5,15.5 + parent: 2 + - uid: 3803 + components: + - type: Transform + pos: 38.5,15.5 + parent: 2 + - uid: 3804 + components: + - type: Transform + pos: 41.5,26.5 + parent: 2 + - uid: 3805 + components: + - type: Transform + pos: 41.5,27.5 + parent: 2 + - uid: 3806 + components: + - type: Transform + pos: 41.5,28.5 + parent: 2 + - uid: 3807 + components: + - type: Transform + pos: 41.5,28.5 + parent: 2 + - uid: 3808 + components: + - type: Transform + pos: 40.5,28.5 + parent: 2 + - uid: 3809 + components: + - type: Transform + pos: 39.5,28.5 + parent: 2 + - uid: 3810 + components: + - type: Transform + pos: 38.5,28.5 + parent: 2 + - uid: 3811 + components: + - type: Transform + pos: 37.5,28.5 + parent: 2 + - uid: 3812 + components: + - type: Transform + pos: 36.5,28.5 + parent: 2 + - uid: 3813 + components: + - type: Transform + pos: 35.5,28.5 + parent: 2 + - uid: 3814 + components: + - type: Transform + pos: 34.5,28.5 + parent: 2 + - uid: 3815 + components: + - type: Transform + pos: 33.5,28.5 + parent: 2 + - uid: 3816 + components: + - type: Transform + pos: 32.5,28.5 + parent: 2 + - uid: 3817 + components: + - type: Transform + pos: 31.5,28.5 + parent: 2 + - uid: 3818 + components: + - type: Transform + pos: 30.5,28.5 + parent: 2 + - uid: 3819 + components: + - type: Transform + pos: 29.5,28.5 + parent: 2 + - uid: 3820 + components: + - type: Transform + pos: 29.5,27.5 + parent: 2 + - uid: 3821 + components: + - type: Transform + pos: 38.5,27.5 + parent: 2 + - uid: 3822 + components: + - type: Transform + pos: 38.5,26.5 + parent: 2 + - uid: 3823 + components: + - type: Transform + pos: 38.5,25.5 + parent: 2 + - uid: 3824 + components: + - type: Transform + pos: 38.5,24.5 + parent: 2 + - uid: 3825 + components: + - type: Transform + pos: 38.5,23.5 + parent: 2 + - uid: 3826 + components: + - type: Transform + pos: 38.5,22.5 + parent: 2 + - uid: 3827 + components: + - type: Transform + pos: 38.5,21.5 + parent: 2 + - uid: 3828 + components: + - type: Transform + pos: 37.5,22.5 + parent: 2 + - uid: 3829 + components: + - type: Transform + pos: 42.5,28.5 + parent: 2 + - uid: 3830 + components: + - type: Transform + pos: 43.5,28.5 + parent: 2 + - uid: 3831 + components: + - type: Transform + pos: 43.5,28.5 + parent: 2 + - uid: 3832 + components: + - type: Transform + pos: 43.5,29.5 + parent: 2 + - uid: 3833 + components: + - type: Transform + pos: 43.5,30.5 + parent: 2 + - uid: 3834 + components: + - type: Transform + pos: 43.5,31.5 + parent: 2 + - uid: 3835 + components: + - type: Transform + pos: 43.5,32.5 + parent: 2 + - uid: 3836 + components: + - type: Transform + pos: 43.5,33.5 + parent: 2 + - uid: 3837 + components: + - type: Transform + pos: 43.5,34.5 + parent: 2 + - uid: 3838 + components: + - type: Transform + pos: 43.5,35.5 + parent: 2 + - uid: 3839 + components: + - type: Transform + pos: 43.5,36.5 + parent: 2 + - uid: 3840 + components: + - type: Transform + pos: 43.5,37.5 + parent: 2 + - uid: 3841 + components: + - type: Transform + pos: 43.5,38.5 + parent: 2 + - uid: 3842 + components: + - type: Transform + pos: 43.5,39.5 + parent: 2 + - uid: 3843 + components: + - type: Transform + pos: 43.5,40.5 + parent: 2 + - uid: 3844 + components: + - type: Transform + pos: 43.5,41.5 + parent: 2 + - uid: 3845 + components: + - type: Transform + pos: 43.5,42.5 + parent: 2 + - uid: 3846 + components: + - type: Transform + pos: 43.5,43.5 + parent: 2 + - uid: 3847 + components: + - type: Transform + pos: 43.5,44.5 + parent: 2 + - uid: 3848 + components: + - type: Transform + pos: 43.5,45.5 + parent: 2 + - uid: 3849 + components: + - type: Transform + pos: 43.5,46.5 + parent: 2 + - uid: 3850 + components: + - type: Transform + pos: 43.5,47.5 + parent: 2 + - uid: 3851 + components: + - type: Transform + pos: 43.5,48.5 + parent: 2 + - uid: 3852 + components: + - type: Transform + pos: 42.5,35.5 + parent: 2 + - uid: 3853 + components: + - type: Transform + pos: 41.5,35.5 + parent: 2 + - uid: 3854 + components: + - type: Transform + pos: 40.5,35.5 + parent: 2 + - uid: 3855 + components: + - type: Transform + pos: 39.5,35.5 + parent: 2 + - uid: 3856 + components: + - type: Transform + pos: 38.5,35.5 + parent: 2 + - uid: 3857 + components: + - type: Transform + pos: 37.5,35.5 + parent: 2 + - uid: 3858 + components: + - type: Transform + pos: 36.5,35.5 + parent: 2 + - uid: 3859 + components: + - type: Transform + pos: 35.5,35.5 + parent: 2 + - uid: 3860 + components: + - type: Transform + pos: 34.5,35.5 + parent: 2 + - uid: 3861 + components: + - type: Transform + pos: 33.5,35.5 + parent: 2 + - uid: 3862 + components: + - type: Transform + pos: 32.5,35.5 + parent: 2 + - uid: 3863 + components: + - type: Transform + pos: 33.5,32.5 + parent: 2 + - uid: 3864 + components: + - type: Transform + pos: 33.5,33.5 + parent: 2 + - uid: 3865 + components: + - type: Transform + pos: 33.5,34.5 + parent: 2 + - uid: 3866 + components: + - type: Transform + pos: 33.5,35.5 + parent: 2 + - uid: 3867 + components: + - type: Transform + pos: 33.5,36.5 + parent: 2 + - uid: 3868 + components: + - type: Transform + pos: 33.5,37.5 + parent: 2 + - uid: 3869 + components: + - type: Transform + pos: 33.5,38.5 + parent: 2 + - uid: 3870 + components: + - type: Transform + pos: 33.5,39.5 + parent: 2 + - uid: 3871 + components: + - type: Transform + pos: 33.5,40.5 + parent: 2 + - uid: 3872 + components: + - type: Transform + pos: 33.5,41.5 + parent: 2 + - uid: 3873 + components: + - type: Transform + pos: 38.5,32.5 + parent: 2 + - uid: 3874 + components: + - type: Transform + pos: 38.5,33.5 + parent: 2 + - uid: 3875 + components: + - type: Transform + pos: 38.5,34.5 + parent: 2 + - uid: 3876 + components: + - type: Transform + pos: 38.5,35.5 + parent: 2 + - uid: 3877 + components: + - type: Transform + pos: 38.5,36.5 + parent: 2 + - uid: 3878 + components: + - type: Transform + pos: 38.5,37.5 + parent: 2 + - uid: 3879 + components: + - type: Transform + pos: 38.5,38.5 + parent: 2 + - uid: 3880 + components: + - type: Transform + pos: 38.5,39.5 + parent: 2 + - uid: 3881 + components: + - type: Transform + pos: 38.5,40.5 + parent: 2 + - uid: 3882 + components: + - type: Transform + pos: 38.5,41.5 + parent: 2 + - uid: 3883 + components: + - type: Transform + pos: 18.5,37.5 + parent: 2 + - uid: 3884 + components: + - type: Transform + pos: 19.5,37.5 + parent: 2 + - uid: 3885 + components: + - type: Transform + pos: 29.5,34.5 + parent: 2 + - uid: 3886 + components: + - type: Transform + pos: 27.5,34.5 + parent: 2 + - uid: 3887 + components: + - type: Transform + pos: 20.5,36.5 + parent: 2 + - uid: 3888 + components: + - type: Transform + pos: 20.5,34.5 + parent: 2 + - uid: 3889 + components: + - type: Transform + pos: 20.5,33.5 + parent: 2 + - uid: 3890 + components: + - type: Transform + pos: 20.5,32.5 + parent: 2 + - uid: 3891 + components: + - type: Transform + pos: 20.5,31.5 + parent: 2 + - uid: 3892 + components: + - type: Transform + pos: 20.5,30.5 + parent: 2 + - uid: 3893 + components: + - type: Transform + pos: 20.5,29.5 + parent: 2 + - uid: 3894 + components: + - type: Transform + pos: 17.5,31.5 + parent: 2 + - uid: 3895 + components: + - type: Transform + pos: 18.5,31.5 + parent: 2 + - uid: 3896 + components: + - type: Transform + pos: 19.5,31.5 + parent: 2 + - uid: 3897 + components: + - type: Transform + pos: 29.5,36.5 + parent: 2 + - uid: 3898 + components: + - type: Transform + pos: 21.5,31.5 + parent: 2 + - uid: 3899 + components: + - type: Transform + pos: 22.5,31.5 + parent: 2 + - uid: 3900 + components: + - type: Transform + pos: 23.5,31.5 + parent: 2 + - uid: 3901 + components: + - type: Transform + pos: 24.5,31.5 + parent: 2 + - uid: 3902 + components: + - type: Transform + pos: 25.5,31.5 + parent: 2 + - uid: 3903 + components: + - type: Transform + pos: 24.5,29.5 + parent: 2 + - uid: 3904 + components: + - type: Transform + pos: 24.5,30.5 + parent: 2 + - uid: 3905 + components: + - type: Transform + pos: 24.5,31.5 + parent: 2 + - uid: 3906 + components: + - type: Transform + pos: 24.5,32.5 + parent: 2 + - uid: 3907 + components: + - type: Transform + pos: 24.5,33.5 + parent: 2 + - uid: 3908 + components: + - type: Transform + pos: 20.5,35.5 + parent: 2 + - uid: 3909 + components: + - type: Transform + pos: 19.5,35.5 + parent: 2 + - uid: 3910 + components: + - type: Transform + pos: 18.5,35.5 + parent: 2 + - uid: 3911 + components: + - type: Transform + pos: 17.5,35.5 + parent: 2 + - uid: 3912 + components: + - type: Transform + pos: 20.5,37.5 + parent: 2 + - uid: 3913 + components: + - type: Transform + pos: 20.5,38.5 + parent: 2 + - uid: 3914 + components: + - type: Transform + pos: 20.5,39.5 + parent: 2 + - uid: 3915 + components: + - type: Transform + pos: 19.5,39.5 + parent: 2 + - uid: 3916 + components: + - type: Transform + pos: 18.5,39.5 + parent: 2 + - uid: 3917 + components: + - type: Transform + pos: 17.5,39.5 + parent: 2 + - uid: 3918 + components: + - type: Transform + pos: 16.5,39.5 + parent: 2 + - uid: 3919 + components: + - type: Transform + pos: 17.5,38.5 + parent: 2 + - uid: 3920 + components: + - type: Transform + pos: 15.5,39.5 + parent: 2 + - uid: 3921 + components: + - type: Transform + pos: 14.5,39.5 + parent: 2 + - uid: 3922 + components: + - type: Transform + pos: 15.5,39.5 + parent: 2 + - uid: 3923 + components: + - type: Transform + pos: 14.5,38.5 + parent: 2 + - uid: 3924 + components: + - type: Transform + pos: 14.5,37.5 + parent: 2 + - uid: 3925 + components: + - type: Transform + pos: 14.5,36.5 + parent: 2 + - uid: 3926 + components: + - type: Transform + pos: 14.5,35.5 + parent: 2 + - uid: 3927 + components: + - type: Transform + pos: 15.5,40.5 + parent: 2 + - uid: 3928 + components: + - type: Transform + pos: 15.5,41.5 + parent: 2 + - uid: 3929 + components: + - type: Transform + pos: 15.5,43.5 + parent: 2 + - uid: 3930 + components: + - type: Transform + pos: 14.5,43.5 + parent: 2 + - uid: 3931 + components: + - type: Transform + pos: 13.5,43.5 + parent: 2 + - uid: 3932 + components: + - type: Transform + pos: 16.5,43.5 + parent: 2 + - uid: 3933 + components: + - type: Transform + pos: 17.5,43.5 + parent: 2 + - uid: 3934 + components: + - type: Transform + pos: 18.5,43.5 + parent: 2 + - uid: 3935 + components: + - type: Transform + pos: 19.5,43.5 + parent: 2 + - uid: 3936 + components: + - type: Transform + pos: 21.5,43.5 + parent: 2 + - uid: 3937 + components: + - type: Transform + pos: 22.5,43.5 + parent: 2 + - uid: 3938 + components: + - type: Transform + pos: 23.5,43.5 + parent: 2 + - uid: 3939 + components: + - type: Transform + pos: 20.5,42.5 + parent: 2 + - uid: 3940 + components: + - type: Transform + pos: 20.5,43.5 + parent: 2 + - uid: 3941 + components: + - type: Transform + pos: 20.5,44.5 + parent: 2 + - uid: 3942 + components: + - type: Transform + pos: 20.5,45.5 + parent: 2 + - uid: 3943 + components: + - type: Transform + pos: 20.5,46.5 + parent: 2 + - uid: 3944 + components: + - type: Transform + pos: 12.5,16.5 + parent: 2 + - uid: 3945 + components: + - type: Transform + pos: 13.5,16.5 + parent: 2 + - uid: 3946 + components: + - type: Transform + pos: 13.5,4.5 + parent: 2 + - uid: 3947 + components: + - type: Transform + pos: 13.5,5.5 + parent: 2 + - uid: 3948 + components: + - type: Transform + pos: 13.5,6.5 + parent: 2 + - uid: 3949 + components: + - type: Transform + pos: 13.5,7.5 + parent: 2 + - uid: 3950 + components: + - type: Transform + pos: 13.5,8.5 + parent: 2 + - uid: 3951 + components: + - type: Transform + pos: 13.5,9.5 + parent: 2 + - uid: 3952 + components: + - type: Transform + pos: 13.5,10.5 + parent: 2 + - uid: 3953 + components: + - type: Transform + pos: 13.5,11.5 + parent: 2 + - uid: 3954 + components: + - type: Transform + pos: 13.5,12.5 + parent: 2 + - uid: 3955 + components: + - type: Transform + pos: 13.5,13.5 + parent: 2 + - uid: 3956 + components: + - type: Transform + pos: 13.5,14.5 + parent: 2 + - uid: 3957 + components: + - type: Transform + pos: 13.5,15.5 + parent: 2 + - uid: 3958 + components: + - type: Transform + pos: 13.5,16.5 + parent: 2 + - uid: 3959 + components: + - type: Transform + pos: 13.5,17.5 + parent: 2 + - uid: 3960 + components: + - type: Transform + pos: 13.5,18.5 + parent: 2 + - uid: 3961 + components: + - type: Transform + pos: 13.5,19.5 + parent: 2 + - uid: 3962 + components: + - type: Transform + pos: 13.5,20.5 + parent: 2 + - uid: 3963 + components: + - type: Transform + pos: 13.5,21.5 + parent: 2 + - uid: 3964 + components: + - type: Transform + pos: 13.5,22.5 + parent: 2 + - uid: 3965 + components: + - type: Transform + pos: 13.5,23.5 + parent: 2 + - uid: 3966 + components: + - type: Transform + pos: 13.5,24.5 + parent: 2 + - uid: 3967 + components: + - type: Transform + pos: 13.5,25.5 + parent: 2 + - uid: 3968 + components: + - type: Transform + pos: 13.5,26.5 + parent: 2 + - uid: 3969 + components: + - type: Transform + pos: 10.5,26.5 + parent: 2 + - uid: 3970 + components: + - type: Transform + pos: 11.5,26.5 + parent: 2 + - uid: 3971 + components: + - type: Transform + pos: 12.5,26.5 + parent: 2 + - uid: 3972 + components: + - type: Transform + pos: 13.5,26.5 + parent: 2 + - uid: 3973 + components: + - type: Transform + pos: 14.5,26.5 + parent: 2 + - uid: 3974 + components: + - type: Transform + pos: 15.5,26.5 + parent: 2 + - uid: 3975 + components: + - type: Transform + pos: 16.5,26.5 + parent: 2 + - uid: 3976 + components: + - type: Transform + pos: 17.5,26.5 + parent: 2 + - uid: 3977 + components: + - type: Transform + pos: 18.5,26.5 + parent: 2 + - uid: 3978 + components: + - type: Transform + pos: 19.5,26.5 + parent: 2 + - uid: 3979 + components: + - type: Transform + pos: 20.5,26.5 + parent: 2 + - uid: 3980 + components: + - type: Transform + pos: 21.5,26.5 + parent: 2 + - uid: 3981 + components: + - type: Transform + pos: 22.5,26.5 + parent: 2 + - uid: 3982 + components: + - type: Transform + pos: 23.5,26.5 + parent: 2 + - uid: 3983 + components: + - type: Transform + pos: 24.5,26.5 + parent: 2 + - uid: 3984 + components: + - type: Transform + pos: 25.5,26.5 + parent: 2 + - uid: 3985 + components: + - type: Transform + pos: 26.5,26.5 + parent: 2 + - uid: 3986 + components: + - type: Transform + pos: 27.5,26.5 + parent: 2 + - uid: 3987 + components: + - type: Transform + pos: 17.5,26.5 + parent: 2 + - uid: 3988 + components: + - type: Transform + pos: 17.5,25.5 + parent: 2 + - uid: 3989 + components: + - type: Transform + pos: 17.5,24.5 + parent: 2 + - uid: 3990 + components: + - type: Transform + pos: 17.5,23.5 + parent: 2 + - uid: 3991 + components: + - type: Transform + pos: 17.5,22.5 + parent: 2 + - uid: 3992 + components: + - type: Transform + pos: 16.5,22.5 + parent: 2 + - uid: 3993 + components: + - type: Transform + pos: 16.5,21.5 + parent: 2 + - uid: 3994 + components: + - type: Transform + pos: 16.5,20.5 + parent: 2 + - uid: 3995 + components: + - type: Transform + pos: 16.5,20.5 + parent: 2 + - uid: 3996 + components: + - type: Transform + pos: 17.5,20.5 + parent: 2 + - uid: 3997 + components: + - type: Transform + pos: 18.5,20.5 + parent: 2 + - uid: 3998 + components: + - type: Transform + pos: 19.5,20.5 + parent: 2 + - uid: 3999 + components: + - type: Transform + pos: 13.5,21.5 + parent: 2 + - uid: 4000 + components: + - type: Transform + pos: 12.5,21.5 + parent: 2 + - uid: 4001 + components: + - type: Transform + pos: 11.5,21.5 + parent: 2 + - uid: 4002 + components: + - type: Transform + pos: 10.5,21.5 + parent: 2 + - uid: 4003 + components: + - type: Transform + pos: 9.5,21.5 + parent: 2 + - uid: 4004 + components: + - type: Transform + pos: 8.5,21.5 + parent: 2 + - uid: 4005 + components: + - type: Transform + pos: 7.5,21.5 + parent: 2 + - uid: 4006 + components: + - type: Transform + pos: 6.5,21.5 + parent: 2 + - uid: 4007 + components: + - type: Transform + pos: 5.5,21.5 + parent: 2 + - uid: 4008 + components: + - type: Transform + pos: 4.5,21.5 + parent: 2 + - uid: 4009 + components: + - type: Transform + pos: 7.5,22.5 + parent: 2 + - uid: 4010 + components: + - type: Transform + pos: 13.5,18.5 + parent: 2 + - uid: 4011 + components: + - type: Transform + pos: 12.5,18.5 + parent: 2 + - uid: 4012 + components: + - type: Transform + pos: 11.5,18.5 + parent: 2 + - uid: 4013 + components: + - type: Transform + pos: 10.5,18.5 + parent: 2 + - uid: 4014 + components: + - type: Transform + pos: 9.5,18.5 + parent: 2 + - uid: 4015 + components: + - type: Transform + pos: 8.5,18.5 + parent: 2 + - uid: 4016 + components: + - type: Transform + pos: 7.5,18.5 + parent: 2 + - uid: 4017 + components: + - type: Transform + pos: 6.5,18.5 + parent: 2 + - uid: 4018 + components: + - type: Transform + pos: 5.5,18.5 + parent: 2 + - uid: 4019 + components: + - type: Transform + pos: 4.5,18.5 + parent: 2 + - uid: 4020 + components: + - type: Transform + pos: 5.5,12.5 + parent: 2 + - uid: 4021 + components: + - type: Transform + pos: 5.5,13.5 + parent: 2 + - uid: 4022 + components: + - type: Transform + pos: 5.5,14.5 + parent: 2 + - uid: 4023 + components: + - type: Transform + pos: 5.5,15.5 + parent: 2 + - uid: 4024 + components: + - type: Transform + pos: 5.5,16.5 + parent: 2 + - uid: 4025 + components: + - type: Transform + pos: 5.5,17.5 + parent: 2 + - uid: 4026 + components: + - type: Transform + pos: 5.5,18.5 + parent: 2 + - uid: 4027 + components: + - type: Transform + pos: 10.5,17.5 + parent: 2 + - uid: 4028 + components: + - type: Transform + pos: 8.5,10.5 + parent: 2 + - uid: 4029 + components: + - type: Transform + pos: 8.5,11.5 + parent: 2 + - uid: 4030 + components: + - type: Transform + pos: 8.5,12.5 + parent: 2 + - uid: 4031 + components: + - type: Transform + pos: 8.5,13.5 + parent: 2 + - uid: 4032 + components: + - type: Transform + pos: 9.5,13.5 + parent: 2 + - uid: 4033 + components: + - type: Transform + pos: 9.5,14.5 + parent: 2 + - uid: 4034 + components: + - type: Transform + pos: 10.5,14.5 + parent: 2 + - uid: 4035 + components: + - type: Transform + pos: 12.5,8.5 + parent: 2 + - uid: 4036 + components: + - type: Transform + pos: 11.5,8.5 + parent: 2 + - uid: 4037 + components: + - type: Transform + pos: 14.5,4.5 + parent: 2 + - uid: 4038 + components: + - type: Transform + pos: 15.5,4.5 + parent: 2 + - uid: 4039 + components: + - type: Transform + pos: 16.5,4.5 + parent: 2 + - uid: 4040 + components: + - type: Transform + pos: 27.5,-0.5 + parent: 2 + - uid: 4041 + components: + - type: Transform + pos: 27.5,-1.5 + parent: 2 + - uid: 4042 + components: + - type: Transform + pos: 27.5,-2.5 + parent: 2 + - uid: 4043 + components: + - type: Transform + pos: 27.5,-3.5 + parent: 2 + - uid: 4044 + components: + - type: Transform + pos: 28.5,-3.5 + parent: 2 + - uid: 4045 + components: + - type: Transform + pos: 29.5,-3.5 + parent: 2 + - uid: 4046 + components: + - type: Transform + pos: 29.5,6.5 + parent: 2 + - uid: 4047 + components: + - type: Transform + pos: 29.5,5.5 + parent: 2 + - uid: 4048 + components: + - type: Transform + pos: 29.5,4.5 + parent: 2 + - uid: 4049 + components: + - type: Transform + pos: 29.5,3.5 + parent: 2 + - uid: 4050 + components: + - type: Transform + pos: 43.5,27.5 + parent: 2 + - uid: 4051 + components: + - type: Transform + pos: 43.5,26.5 + parent: 2 + - uid: 4052 + components: + - type: Transform + pos: 43.5,25.5 + parent: 2 + - uid: 4053 + components: + - type: Transform + pos: 43.5,24.5 + parent: 2 + - uid: 4054 + components: + - type: Transform + pos: 43.5,23.5 + parent: 2 + - uid: 4055 + components: + - type: Transform + pos: 42.5,23.5 + parent: 2 + - uid: 4056 + components: + - type: Transform + pos: 43.5,23.5 + parent: 2 + - uid: 4057 + components: + - type: Transform + pos: 44.5,23.5 + parent: 2 + - uid: 4058 + components: + - type: Transform + pos: 45.5,23.5 + parent: 2 + - uid: 4059 + components: + - type: Transform + pos: 46.5,23.5 + parent: 2 + - uid: 4060 + components: + - type: Transform + pos: 47.5,23.5 + parent: 2 + - uid: 4061 + components: + - type: Transform + pos: 48.5,23.5 + parent: 2 + - uid: 4062 + components: + - type: Transform + pos: 43.5,22.5 + parent: 2 + - uid: 4063 + components: + - type: Transform + pos: 43.5,21.5 + parent: 2 + - uid: 4064 + components: + - type: Transform + pos: 29.5,35.5 + parent: 2 + - uid: 4065 + components: + - type: Transform + pos: 29.5,34.5 + parent: 2 + - uid: 4066 + components: + - type: Transform + pos: 28.5,34.5 + parent: 2 + - uid: 4067 + components: + - type: Transform + pos: 29.5,37.5 + parent: 2 + - uid: 4068 + components: + - type: Transform + pos: 29.5,38.5 + parent: 2 + - uid: 4069 + components: + - type: Transform + pos: 29.5,39.5 + parent: 2 + - uid: 4070 + components: + - type: Transform + pos: 29.5,39.5 + parent: 2 + - uid: 4071 + components: + - type: Transform + pos: 28.5,39.5 + parent: 2 + - uid: 4072 + components: + - type: Transform + pos: 27.5,39.5 + parent: 2 + - uid: 4073 + components: + - type: Transform + pos: 26.5,39.5 + parent: 2 + - uid: 4074 + components: + - type: Transform + pos: 25.5,39.5 + parent: 2 + - uid: 4075 + components: + - type: Transform + pos: 24.5,39.5 + parent: 2 + - uid: 4076 + components: + - type: Transform + pos: 23.5,39.5 + parent: 2 + - uid: 4077 + components: + - type: Transform + pos: 29.5,41.5 + parent: 2 + - uid: 4078 + components: + - type: Transform + pos: 27.5,36.5 + parent: 2 + - uid: 4079 + components: + - type: Transform + pos: 26.5,36.5 + parent: 2 + - uid: 4080 + components: + - type: Transform + pos: 25.5,36.5 + parent: 2 + - uid: 4081 + components: + - type: Transform + pos: 24.5,36.5 + parent: 2 + - uid: 4082 + components: + - type: Transform + pos: 23.5,36.5 + parent: 2 + - uid: 4083 + components: + - type: Transform + pos: 29.5,33.5 + parent: 2 + - uid: 4084 + components: + - type: Transform + pos: 29.5,32.5 + parent: 2 + - uid: 4085 + components: + - type: Transform + pos: 29.5,31.5 + parent: 2 + - uid: 4086 + components: + - type: Transform + pos: 29.5,30.5 + parent: 2 + - uid: 4087 + components: + - type: Transform + pos: 28.5,31.5 + parent: 2 + - uid: 4088 + components: + - type: Transform + pos: 27.5,31.5 + parent: 2 + - uid: 4089 + components: + - type: Transform + pos: 30.5,31.5 + parent: 2 + - uid: 4090 + components: + - type: Transform + pos: 31.5,-5.5 + parent: 2 + - uid: 4091 + components: + - type: Transform + pos: 32.5,-5.5 + parent: 2 + - uid: 4092 + components: + - type: Transform + pos: 33.5,-5.5 + parent: 2 + - uid: 4093 + components: + - type: Transform + pos: 34.5,-5.5 + parent: 2 + - uid: 4094 + components: + - type: Transform + pos: 35.5,-5.5 + parent: 2 + - uid: 4095 + components: + - type: Transform + pos: 35.5,-2.5 + parent: 2 + - uid: 4096 + components: + - type: Transform + pos: 35.5,-3.5 + parent: 2 + - uid: 4097 + components: + - type: Transform + pos: 35.5,-4.5 + parent: 2 + - uid: 4098 + components: + - type: Transform + pos: 35.5,-5.5 + parent: 2 + - uid: 4099 + components: + - type: Transform + pos: -0.5,-23.5 + parent: 2 + - uid: 4100 + components: + - type: Transform + pos: -1.5,-23.5 + parent: 2 + - uid: 4101 + components: + - type: Transform + pos: -2.5,-23.5 + parent: 2 + - uid: 4102 + components: + - type: Transform + pos: -3.5,-23.5 + parent: 2 + - uid: 4103 + components: + - type: Transform + pos: -4.5,-23.5 + parent: 2 + - uid: 4104 + components: + - type: Transform + pos: -5.5,-23.5 + parent: 2 + - uid: 4105 + components: + - type: Transform + pos: -4.5,-22.5 + parent: 2 + - uid: 4106 + components: + - type: Transform + pos: -4.5,-21.5 + parent: 2 + - uid: 4107 + components: + - type: Transform + pos: -3.5,-21.5 + parent: 2 + - uid: 4108 + components: + - type: Transform + pos: -2.5,-74.5 + parent: 2 + - uid: 4109 + components: + - type: Transform + pos: -2.5,-73.5 + parent: 2 + - uid: 4110 + components: + - type: Transform + pos: 3.5,-74.5 + parent: 2 + - uid: 4111 + components: + - type: Transform + pos: 3.5,-73.5 + parent: 2 + - uid: 4112 + components: + - type: Transform + pos: 0.5,-74.5 + parent: 2 + - uid: 4113 + components: + - type: Transform + pos: 0.5,-73.5 + parent: 2 + - uid: 4114 + components: + - type: Transform + pos: 35.5,-5.5 + parent: 2 + - uid: 4115 + components: + - type: Transform + pos: 36.5,-5.5 + parent: 2 + - uid: 4116 + components: + - type: Transform + pos: 37.5,-5.5 + parent: 2 + - uid: 4117 + components: + - type: Transform + pos: 38.5,-5.5 + parent: 2 + - uid: 4118 + components: + - type: Transform + pos: 39.5,-5.5 + parent: 2 + - uid: 4119 + components: + - type: Transform + pos: 40.5,-5.5 + parent: 2 + - uid: 4120 + components: + - type: Transform + pos: 41.5,-5.5 + parent: 2 + - uid: 4121 + components: + - type: Transform + pos: 42.5,-5.5 + parent: 2 + - uid: 4122 + components: + - type: Transform + pos: 43.5,-5.5 + parent: 2 + - uid: 4123 + components: + - type: Transform + pos: 39.5,-5.5 + parent: 2 + - uid: 4124 + components: + - type: Transform + pos: 39.5,-4.5 + parent: 2 + - uid: 4125 + components: + - type: Transform + pos: 39.5,-3.5 + parent: 2 + - uid: 4126 + components: + - type: Transform + pos: 39.5,-2.5 + parent: 2 + - uid: 4127 + components: + - type: Transform + pos: 43.5,-4.5 + parent: 2 + - uid: 4128 + components: + - type: Transform + pos: 43.5,-4.5 + parent: 2 + - uid: 4129 + components: + - type: Transform + pos: 44.5,-4.5 + parent: 2 + - uid: 4130 + components: + - type: Transform + pos: 45.5,-4.5 + parent: 2 + - uid: 4131 + components: + - type: Transform + pos: 46.5,-4.5 + parent: 2 + - uid: 4132 + components: + - type: Transform + pos: 47.5,-4.5 + parent: 2 + - uid: 4133 + components: + - type: Transform + pos: 43.5,-6.5 + parent: 2 + - uid: 4134 + components: + - type: Transform + pos: 43.5,-6.5 + parent: 2 + - uid: 4135 + components: + - type: Transform + pos: 44.5,-6.5 + parent: 2 + - uid: 4136 + components: + - type: Transform + pos: 45.5,-6.5 + parent: 2 + - uid: 4137 + components: + - type: Transform + pos: 46.5,-6.5 + parent: 2 + - uid: 4138 + components: + - type: Transform + pos: 47.5,-6.5 + parent: 2 + - uid: 4139 + components: + - type: Transform + pos: 12.5,-37.5 + parent: 2 + - uid: 4140 + components: + - type: Transform + pos: 43.5,-7.5 + parent: 2 + - uid: 4141 + components: + - type: Transform + pos: 43.5,-8.5 + parent: 2 + - uid: 4142 + components: + - type: Transform + pos: 43.5,-9.5 + parent: 2 + - uid: 4143 + components: + - type: Transform + pos: 43.5,-10.5 + parent: 2 + - uid: 4144 + components: + - type: Transform + pos: 43.5,-11.5 + parent: 2 + - uid: 4145 + components: + - type: Transform + pos: 43.5,-12.5 + parent: 2 + - uid: 4146 + components: + - type: Transform + pos: 43.5,-12.5 + parent: 2 + - uid: 4147 + components: + - type: Transform + pos: 44.5,-12.5 + parent: 2 + - uid: 4148 + components: + - type: Transform + pos: 45.5,-12.5 + parent: 2 + - uid: 4149 + components: + - type: Transform + pos: 46.5,-12.5 + parent: 2 + - uid: 4150 + components: + - type: Transform + pos: 47.5,-12.5 + parent: 2 + - uid: 4151 + components: + - type: Transform + pos: 44.5,-12.5 + parent: 2 + - uid: 4152 + components: + - type: Transform + pos: 44.5,-13.5 + parent: 2 + - uid: 4153 + components: + - type: Transform + pos: 44.5,-14.5 + parent: 2 + - uid: 4154 + components: + - type: Transform + pos: 44.5,-15.5 + parent: 2 + - uid: 4155 + components: + - type: Transform + pos: 44.5,-16.5 + parent: 2 + - uid: 4156 + components: + - type: Transform + pos: 44.5,-17.5 + parent: 2 + - uid: 4157 + components: + - type: Transform + pos: 44.5,-18.5 + parent: 2 + - uid: 4158 + components: + - type: Transform + pos: 43.5,-17.5 + parent: 2 + - uid: 4159 + components: + - type: Transform + pos: 44.5,-17.5 + parent: 2 + - uid: 4160 + components: + - type: Transform + pos: 45.5,-17.5 + parent: 2 + - uid: 4161 + components: + - type: Transform + pos: 46.5,-17.5 + parent: 2 + - uid: 4162 + components: + - type: Transform + pos: 43.5,-14.5 + parent: 2 + - uid: 4163 + components: + - type: Transform + pos: 44.5,-14.5 + parent: 2 + - uid: 4164 + components: + - type: Transform + pos: 45.5,-14.5 + parent: 2 + - uid: 4165 + components: + - type: Transform + pos: 46.5,-14.5 + parent: 2 + - uid: 4166 + components: + - type: Transform + pos: 47.5,-14.5 + parent: 2 + - uid: 4167 + components: + - type: Transform + pos: -16.5,4.5 + parent: 2 + - uid: 4168 + components: + - type: Transform + pos: -15.5,4.5 + parent: 2 + - uid: 4169 + components: + - type: Transform + pos: 31.5,-11.5 + parent: 2 + - uid: 4170 + components: + - type: Transform + pos: -14.5,4.5 + parent: 2 + - uid: 4171 + components: + - type: Transform + pos: -12.5,5.5 + parent: 2 + - uid: 4172 + components: + - type: Transform + pos: -13.5,4.5 + parent: 2 + - uid: 4173 + components: + - type: Transform + pos: 32.5,-11.5 + parent: 2 + - uid: 4174 + components: + - type: Transform + pos: -12.5,4.5 + parent: 2 + - uid: 4175 + components: + - type: Transform + pos: 33.5,-11.5 + parent: 2 + - uid: 4176 + components: + - type: Transform + pos: 34.5,-11.5 + parent: 2 + - uid: 4177 + components: + - type: Transform + pos: 35.5,-11.5 + parent: 2 + - uid: 4178 + components: + - type: Transform + pos: 36.5,-11.5 + parent: 2 + - uid: 4179 + components: + - type: Transform + pos: 37.5,-11.5 + parent: 2 + - uid: 4180 + components: + - type: Transform + pos: 38.5,-11.5 + parent: 2 + - uid: 4181 + components: + - type: Transform + pos: 39.5,-11.5 + parent: 2 + - uid: 4182 + components: + - type: Transform + pos: 40.5,-11.5 + parent: 2 + - uid: 4183 + components: + - type: Transform + pos: 41.5,-11.5 + parent: 2 + - uid: 4184 + components: + - type: Transform + pos: 42.5,-11.5 + parent: 2 + - uid: 4185 + components: + - type: Transform + pos: 43.5,-11.5 + parent: 2 + - uid: 4186 + components: + - type: Transform + pos: 32.5,-11.5 + parent: 2 + - uid: 4187 + components: + - type: Transform + pos: 32.5,-10.5 + parent: 2 + - uid: 4188 + components: + - type: Transform + pos: 32.5,-9.5 + parent: 2 + - uid: 4189 + components: + - type: Transform + pos: 32.5,-8.5 + parent: 2 + - uid: 4190 + components: + - type: Transform + pos: 32.5,-7.5 + parent: 2 + - uid: 4191 + components: + - type: Transform + pos: 32.5,-6.5 + parent: 2 + - uid: 4192 + components: + - type: Transform + pos: 32.5,-5.5 + parent: 2 + - uid: 4193 + components: + - type: Transform + pos: 32.5,-7.5 + parent: 2 + - uid: 4194 + components: + - type: Transform + pos: 31.5,-7.5 + parent: 2 + - uid: 4195 + components: + - type: Transform + pos: 30.5,-7.5 + parent: 2 + - uid: 4196 + components: + - type: Transform + pos: 33.5,-8.5 + parent: 2 + - uid: 4197 + components: + - type: Transform + pos: 37.5,-12.5 + parent: 2 + - uid: 4198 + components: + - type: Transform + pos: 38.5,-10.5 + parent: 2 + - uid: 4199 + components: + - type: Transform + pos: 38.5,-10.5 + parent: 2 + - uid: 4200 + components: + - type: Transform + pos: 38.5,-9.5 + parent: 2 + - uid: 4201 + components: + - type: Transform + pos: 42.5,-8.5 + parent: 2 + - uid: 4202 + components: + - type: Transform + pos: 37.5,-6.5 + parent: 2 + - uid: 4203 + components: + - type: Transform + pos: -34.5,5.5 + parent: 2 + - uid: 4204 + components: + - type: Transform + pos: -33.5,5.5 + parent: 2 + - uid: 4205 + components: + - type: Transform + pos: -33.5,2.5 + parent: 2 + - uid: 4206 + components: + - type: Transform + pos: -33.5,3.5 + parent: 2 + - uid: 4207 + components: + - type: Transform + pos: -33.5,4.5 + parent: 2 + - uid: 4208 + components: + - type: Transform + pos: -33.5,5.5 + parent: 2 + - uid: 4209 + components: + - type: Transform + pos: -33.5,6.5 + parent: 2 + - uid: 4210 + components: + - type: Transform + pos: -33.5,7.5 + parent: 2 + - uid: 4211 + components: + - type: Transform + pos: -33.5,8.5 + parent: 2 + - uid: 4212 + components: + - type: Transform + pos: -33.5,9.5 + parent: 2 + - uid: 4213 + components: + - type: Transform + pos: -33.5,10.5 + parent: 2 + - uid: 4214 + components: + - type: Transform + pos: -33.5,11.5 + parent: 2 + - uid: 4215 + components: + - type: Transform + pos: -33.5,12.5 + parent: 2 + - uid: 4216 + components: + - type: Transform + pos: -34.5,11.5 + parent: 2 + - uid: 4217 + components: + - type: Transform + pos: -32.5,11.5 + parent: 2 + - uid: 4218 + components: + - type: Transform + pos: -34.5,7.5 + parent: 2 + - uid: 4219 + components: + - type: Transform + pos: -35.5,7.5 + parent: 2 + - uid: 4220 + components: + - type: Transform + pos: -32.5,7.5 + parent: 2 + - uid: 4221 + components: + - type: Transform + pos: -33.5,1.5 + parent: 2 + - uid: 4222 + components: + - type: Transform + pos: -33.5,0.5 + parent: 2 + - uid: 4223 + components: + - type: Transform + pos: -32.5,1.5 + parent: 2 + - uid: 4224 + components: + - type: Transform + pos: -31.5,1.5 + parent: 2 + - uid: 4225 + components: + - type: Transform + pos: -30.5,1.5 + parent: 2 + - uid: 4226 + components: + - type: Transform + pos: -29.5,1.5 + parent: 2 + - uid: 4227 + components: + - type: Transform + pos: -28.5,1.5 + parent: 2 + - uid: 4228 + components: + - type: Transform + pos: -17.5,1.5 + parent: 2 + - uid: 4229 + components: + - type: Transform + pos: -33.5,-0.5 + parent: 2 + - uid: 4230 + components: + - type: Transform + pos: -33.5,-1.5 + parent: 2 + - uid: 4231 + components: + - type: Transform + pos: -33.5,-2.5 + parent: 2 + - uid: 4232 + components: + - type: Transform + pos: -33.5,-3.5 + parent: 2 + - uid: 4233 + components: + - type: Transform + pos: -33.5,-4.5 + parent: 2 + - uid: 4234 + components: + - type: Transform + pos: -33.5,-5.5 + parent: 2 + - uid: 4235 + components: + - type: Transform + pos: -33.5,-6.5 + parent: 2 + - uid: 4236 + components: + - type: Transform + pos: -33.5,-8.5 + parent: 2 + - uid: 4237 + components: + - type: Transform + pos: 1.5,46.5 + parent: 2 + - uid: 4238 + components: + - type: Transform + pos: -31.5,-19.5 + parent: 2 + - uid: 4239 + components: + - type: Transform + pos: -31.5,-20.5 + parent: 2 + - uid: 4240 + components: + - type: Transform + pos: -31.5,-21.5 + parent: 2 + - uid: 4241 + components: + - type: Transform + pos: -31.5,-22.5 + parent: 2 + - uid: 4242 + components: + - type: Transform + pos: -29.5,-22.5 + parent: 2 + - uid: 4243 + components: + - type: Transform + pos: -30.5,-22.5 + parent: 2 + - uid: 4244 + components: + - type: Transform + pos: -31.5,-22.5 + parent: 2 + - uid: 4245 + components: + - type: Transform + pos: -29.5,-22.5 + parent: 2 + - uid: 4246 + components: + - type: Transform + pos: -29.5,-23.5 + parent: 2 + - uid: 4247 + components: + - type: Transform + pos: -32.5,-22.5 + parent: 2 + - uid: 4248 + components: + - type: Transform + pos: -33.5,-22.5 + parent: 2 + - uid: 4249 + components: + - type: Transform + pos: -34.5,-22.5 + parent: 2 + - uid: 4250 + components: + - type: Transform + pos: -33.5,-23.5 + parent: 2 + - uid: 4251 + components: + - type: Transform + pos: -33.5,-24.5 + parent: 2 + - uid: 4252 + components: + - type: Transform + pos: -33.5,-21.5 + parent: 2 + - uid: 4253 + components: + - type: Transform + pos: -33.5,-20.5 + parent: 2 + - uid: 4254 + components: + - type: Transform + pos: -33.5,-19.5 + parent: 2 + - uid: 4255 + components: + - type: Transform + pos: -33.5,-18.5 + parent: 2 + - uid: 4256 + components: + - type: Transform + pos: -33.5,-17.5 + parent: 2 + - uid: 4257 + components: + - type: Transform + pos: -33.5,-16.5 + parent: 2 + - uid: 4258 + components: + - type: Transform + pos: -33.5,-15.5 + parent: 2 + - uid: 4259 + components: + - type: Transform + pos: -33.5,-14.5 + parent: 2 + - uid: 4260 + components: + - type: Transform + pos: -33.5,-13.5 + parent: 2 + - uid: 4261 + components: + - type: Transform + pos: -33.5,-12.5 + parent: 2 + - uid: 4262 + components: + - type: Transform + pos: -33.5,-11.5 + parent: 2 + - uid: 4263 + components: + - type: Transform + pos: -33.5,-10.5 + parent: 2 + - uid: 4264 + components: + - type: Transform + pos: -33.5,-9.5 + parent: 2 + - uid: 4265 + components: + - type: Transform + pos: -33.5,-8.5 + parent: 2 + - uid: 4266 + components: + - type: Transform + pos: -32.5,-11.5 + parent: 2 + - uid: 4267 + components: + - type: Transform + pos: -31.5,-11.5 + parent: 2 + - uid: 4268 + components: + - type: Transform + pos: -30.5,-11.5 + parent: 2 + - uid: 4269 + components: + - type: Transform + pos: -29.5,-11.5 + parent: 2 + - uid: 4270 + components: + - type: Transform + pos: -28.5,-11.5 + parent: 2 + - uid: 4271 + components: + - type: Transform + pos: -28.5,-12.5 + parent: 2 + - uid: 4272 + components: + - type: Transform + pos: -28.5,-13.5 + parent: 2 + - uid: 4273 + components: + - type: Transform + pos: -18.5,3.5 + parent: 2 + - uid: 4274 + components: + - type: Transform + pos: -18.5,2.5 + parent: 2 + - uid: 4275 + components: + - type: Transform + pos: -18.5,1.5 + parent: 2 + - uid: 4276 + components: + - type: Transform + pos: -18.5,1.5 + parent: 2 + - uid: 4277 + components: + - type: Transform + pos: -18.5,1.5 + parent: 2 + - uid: 4278 + components: + - type: Transform + pos: -19.5,1.5 + parent: 2 + - uid: 4279 + components: + - type: Transform + pos: -20.5,1.5 + parent: 2 + - uid: 4280 + components: + - type: Transform + pos: -21.5,1.5 + parent: 2 + - uid: 4281 + components: + - type: Transform + pos: -22.5,1.5 + parent: 2 + - uid: 4282 + components: + - type: Transform + pos: -23.5,1.5 + parent: 2 + - uid: 4283 + components: + - type: Transform + pos: -24.5,1.5 + parent: 2 + - uid: 4284 + components: + - type: Transform + pos: -25.5,1.5 + parent: 2 + - uid: 4285 + components: + - type: Transform + pos: -26.5,1.5 + parent: 2 + - uid: 4286 + components: + - type: Transform + pos: -16.5,1.5 + parent: 2 + - uid: 4287 + components: + - type: Transform + pos: -15.5,1.5 + parent: 2 + - uid: 4288 + components: + - type: Transform + pos: -14.5,1.5 + parent: 2 + - uid: 4289 + components: + - type: Transform + pos: -13.5,1.5 + parent: 2 + - uid: 4290 + components: + - type: Transform + pos: -12.5,1.5 + parent: 2 + - uid: 4291 + components: + - type: Transform + pos: -11.5,1.5 + parent: 2 + - uid: 4292 + components: + - type: Transform + pos: -10.5,1.5 + parent: 2 + - uid: 4293 + components: + - type: Transform + pos: -9.5,1.5 + parent: 2 + - uid: 4294 + components: + - type: Transform + pos: -20.5,1.5 + parent: 2 + - uid: 4295 + components: + - type: Transform + pos: -20.5,-0.5 + parent: 2 + - uid: 4296 + components: + - type: Transform + pos: -20.5,2.5 + parent: 2 + - uid: 4297 + components: + - type: Transform + pos: -14.5,-11.5 + parent: 2 + - uid: 4298 + components: + - type: Transform + pos: -15.5,-11.5 + parent: 2 + - uid: 4299 + components: + - type: Transform + pos: -15.5,-11.5 + parent: 2 + - uid: 4300 + components: + - type: Transform + pos: -15.5,-10.5 + parent: 2 + - uid: 4301 + components: + - type: Transform + pos: -15.5,-9.5 + parent: 2 + - uid: 4302 + components: + - type: Transform + pos: -15.5,-9.5 + parent: 2 + - uid: 4303 + components: + - type: Transform + pos: -16.5,-9.5 + parent: 2 + - uid: 4304 + components: + - type: Transform + pos: -17.5,-9.5 + parent: 2 + - uid: 4305 + components: + - type: Transform + pos: -18.5,-9.5 + parent: 2 + - uid: 4306 + components: + - type: Transform + pos: -19.5,-9.5 + parent: 2 + - uid: 4307 + components: + - type: Transform + pos: -20.5,-9.5 + parent: 2 + - uid: 4308 + components: + - type: Transform + pos: -20.5,-9.5 + parent: 2 + - uid: 4309 + components: + - type: Transform + pos: -20.5,-8.5 + parent: 2 + - uid: 4310 + components: + - type: Transform + pos: -20.5,-7.5 + parent: 2 + - uid: 4311 + components: + - type: Transform + pos: -20.5,-6.5 + parent: 2 + - uid: 4312 + components: + - type: Transform + pos: -20.5,-5.5 + parent: 2 + - uid: 4313 + components: + - type: Transform + pos: -20.5,-4.5 + parent: 2 + - uid: 4314 + components: + - type: Transform + pos: -20.5,-3.5 + parent: 2 + - uid: 4315 + components: + - type: Transform + pos: -20.5,-2.5 + parent: 2 + - uid: 4316 + components: + - type: Transform + pos: -20.5,-8.5 + parent: 2 + - uid: 4317 + components: + - type: Transform + pos: -21.5,-8.5 + parent: 2 + - uid: 4318 + components: + - type: Transform + pos: -22.5,-8.5 + parent: 2 + - uid: 4319 + components: + - type: Transform + pos: -23.5,-8.5 + parent: 2 + - uid: 4320 + components: + - type: Transform + pos: -24.5,-8.5 + parent: 2 + - uid: 4321 + components: + - type: Transform + pos: -25.5,-8.5 + parent: 2 + - uid: 4322 + components: + - type: Transform + pos: -26.5,-8.5 + parent: 2 + - uid: 4323 + components: + - type: Transform + pos: -27.5,-8.5 + parent: 2 + - uid: 4324 + components: + - type: Transform + pos: -28.5,-8.5 + parent: 2 + - uid: 4325 + components: + - type: Transform + pos: -29.5,-8.5 + parent: 2 + - uid: 4326 + components: + - type: Transform + pos: -30.5,-8.5 + parent: 2 + - uid: 4327 + components: + - type: Transform + pos: -31.5,-8.5 + parent: 2 + - uid: 4328 + components: + - type: Transform + pos: -23.5,-8.5 + parent: 2 + - uid: 4329 + components: + - type: Transform + pos: -23.5,-9.5 + parent: 2 + - uid: 4330 + components: + - type: Transform + pos: -23.5,-10.5 + parent: 2 + - uid: 4331 + components: + - type: Transform + pos: -23.5,-11.5 + parent: 2 + - uid: 4332 + components: + - type: Transform + pos: -23.5,-12.5 + parent: 2 + - uid: 4333 + components: + - type: Transform + pos: -23.5,-13.5 + parent: 2 + - uid: 4334 + components: + - type: Transform + pos: -23.5,-14.5 + parent: 2 + - uid: 4335 + components: + - type: Transform + pos: -22.5,-13.5 + parent: 2 + - uid: 4336 + components: + - type: Transform + pos: -21.5,-13.5 + parent: 2 + - uid: 4337 + components: + - type: Transform + pos: -20.5,-13.5 + parent: 2 + - uid: 4338 + components: + - type: Transform + pos: -19.5,-13.5 + parent: 2 + - uid: 4339 + components: + - type: Transform + pos: -18.5,-13.5 + parent: 2 + - uid: 4340 + components: + - type: Transform + pos: -14.5,-9.5 + parent: 2 + - uid: 4341 + components: + - type: Transform + pos: -13.5,-9.5 + parent: 2 + - uid: 4342 + components: + - type: Transform + pos: -12.5,-9.5 + parent: 2 + - uid: 4343 + components: + - type: Transform + pos: -11.5,-9.5 + parent: 2 + - uid: 4344 + components: + - type: Transform + pos: -10.5,-9.5 + parent: 2 + - uid: 4345 + components: + - type: Transform + pos: -9.5,-9.5 + parent: 2 + - uid: 4346 + components: + - type: Transform + pos: -8.5,-9.5 + parent: 2 + - uid: 4347 + components: + - type: Transform + pos: -7.5,-9.5 + parent: 2 + - uid: 4348 + components: + - type: Transform + pos: -18.5,-12.5 + parent: 2 + - uid: 4349 + components: + - type: Transform + pos: -18.5,-11.5 + parent: 2 + - uid: 4350 + components: + - type: Transform + pos: -11.5,-6.5 + parent: 2 + - uid: 4351 + components: + - type: Transform + pos: -11.5,-5.5 + parent: 2 + - uid: 4352 + components: + - type: Transform + pos: -11.5,-4.5 + parent: 2 + - uid: 4353 + components: + - type: Transform + pos: -12.5,-4.5 + parent: 2 + - uid: 4354 + components: + - type: Transform + pos: -13.5,-4.5 + parent: 2 + - uid: 4355 + components: + - type: Transform + pos: -14.5,-4.5 + parent: 2 + - uid: 4356 + components: + - type: Transform + pos: -15.5,-4.5 + parent: 2 + - uid: 4357 + components: + - type: Transform + pos: -16.5,-4.5 + parent: 2 + - uid: 4358 + components: + - type: Transform + pos: -15.5,-3.5 + parent: 2 + - uid: 4359 + components: + - type: Transform + pos: -15.5,-5.5 + parent: 2 + - uid: 4360 + components: + - type: Transform + pos: -11.5,-7.5 + parent: 2 + - uid: 4361 + components: + - type: Transform + pos: -15.5,-12.5 + parent: 2 + - uid: 4362 + components: + - type: Transform + pos: -15.5,-13.5 + parent: 2 + - uid: 4363 + components: + - type: Transform + pos: -14.5,-13.5 + parent: 2 + - uid: 4364 + components: + - type: Transform + pos: -13.5,-13.5 + parent: 2 + - uid: 4365 + components: + - type: Transform + pos: -11.5,-13.5 + parent: 2 + - uid: 4366 + components: + - type: Transform + pos: -12.5,-13.5 + parent: 2 + - uid: 4367 + components: + - type: Transform + pos: -7.5,-10.5 + parent: 2 + - uid: 4368 + components: + - type: Transform + pos: -7.5,-11.5 + parent: 2 + - uid: 4369 + components: + - type: Transform + pos: -7.5,-12.5 + parent: 2 + - uid: 4370 + components: + - type: Transform + pos: -7.5,-13.5 + parent: 2 + - uid: 4371 + components: + - type: Transform + pos: -2.5,-9.5 + parent: 2 + - uid: 4372 + components: + - type: Transform + pos: -2.5,-10.5 + parent: 2 + - uid: 4373 + components: + - type: Transform + pos: -2.5,-11.5 + parent: 2 + - uid: 4374 + components: + - type: Transform + pos: -2.5,-12.5 + parent: 2 + - uid: 4375 + components: + - type: Transform + pos: -2.5,-13.5 + parent: 2 + - uid: 4376 + components: + - type: Transform + pos: -2.5,-14.5 + parent: 2 + - uid: 4377 + components: + - type: Transform + pos: -3.5,-13.5 + parent: 2 + - uid: 4378 + components: + - type: Transform + pos: -4.5,-13.5 + parent: 2 + - uid: 4379 + components: + - type: Transform + pos: -12.5,-14.5 + parent: 2 + - uid: 4380 + components: + - type: Transform + pos: -6.5,-13.5 + parent: 2 + - uid: 4381 + components: + - type: Transform + pos: -12.5,-15.5 + parent: 2 + - uid: 4382 + components: + - type: Transform + pos: -12.5,-16.5 + parent: 2 + - uid: 4383 + components: + - type: Transform + pos: -12.5,-17.5 + parent: 2 + - uid: 4384 + components: + - type: Transform + pos: -13.5,-16.5 + parent: 2 + - uid: 4385 + components: + - type: Transform + pos: -14.5,-16.5 + parent: 2 + - uid: 4386 + components: + - type: Transform + pos: -15.5,-16.5 + parent: 2 + - uid: 4387 + components: + - type: Transform + pos: -11.5,-16.5 + parent: 2 + - uid: 4388 + components: + - type: Transform + pos: -10.5,-16.5 + parent: 2 + - uid: 4389 + components: + - type: Transform + pos: -9.5,-16.5 + parent: 2 + - uid: 4390 + components: + - type: Transform + pos: -8.5,-16.5 + parent: 2 + - uid: 4391 + components: + - type: Transform + pos: -7.5,-16.5 + parent: 2 + - uid: 4392 + components: + - type: Transform + pos: -6.5,-16.5 + parent: 2 + - uid: 4393 + components: + - type: Transform + pos: -5.5,-16.5 + parent: 2 + - uid: 4394 + components: + - type: Transform + pos: -4.5,-16.5 + parent: 2 + - uid: 4395 + components: + - type: Transform + pos: -4.5,-17.5 + parent: 2 + - uid: 4396 + components: + - type: Transform + pos: -3.5,-17.5 + parent: 2 + - uid: 4397 + components: + - type: Transform + pos: -9.5,-17.5 + parent: 2 + - uid: 4398 + components: + - type: Transform + pos: -9.5,-18.5 + parent: 2 + - uid: 4399 + components: + - type: Transform + pos: 1.5,37.5 + parent: 2 + - uid: 4400 + components: + - type: Transform + pos: 1.5,36.5 + parent: 2 + - uid: 4401 + components: + - type: Transform + pos: 1.5,35.5 + parent: 2 + - uid: 4402 + components: + - type: Transform + pos: 1.5,34.5 + parent: 2 + - uid: 4403 + components: + - type: Transform + pos: 1.5,33.5 + parent: 2 + - uid: 4404 + components: + - type: Transform + pos: 1.5,32.5 + parent: 2 + - uid: 4405 + components: + - type: Transform + pos: -0.5,38.5 + parent: 2 + - uid: 4406 + components: + - type: Transform + pos: 0.5,38.5 + parent: 2 + - uid: 4407 + components: + - type: Transform + pos: 1.5,38.5 + parent: 2 + - uid: 4408 + components: + - type: Transform + pos: 1.5,31.5 + parent: 2 + - uid: 4409 + components: + - type: Transform + pos: 1.5,30.5 + parent: 2 + - uid: 4410 + components: + - type: Transform + pos: 0.5,29.5 + parent: 2 + - uid: 4411 + components: + - type: Transform + pos: -0.5,29.5 + parent: 2 + - uid: 4412 + components: + - type: Transform + pos: 1.5,29.5 + parent: 2 + - uid: 4413 + components: + - type: Transform + pos: 1.5,29.5 + parent: 2 + - uid: 4414 + components: + - type: Transform + pos: 1.5,26.5 + parent: 2 + - uid: 4415 + components: + - type: Transform + pos: 1.5,26.5 + parent: 2 + - uid: 4416 + components: + - type: Transform + pos: 1.5,26.5 + parent: 2 + - uid: 4417 + components: + - type: Transform + pos: 2.5,26.5 + parent: 2 + - uid: 4418 + components: + - type: Transform + pos: 3.5,26.5 + parent: 2 + - uid: 4419 + components: + - type: Transform + pos: 4.5,26.5 + parent: 2 + - uid: 4420 + components: + - type: Transform + pos: 5.5,26.5 + parent: 2 + - uid: 4421 + components: + - type: Transform + pos: 7.5,26.5 + parent: 2 + - uid: 4422 + components: + - type: Transform + pos: 8.5,26.5 + parent: 2 + - uid: 4423 + components: + - type: Transform + pos: 6.5,24.5 + parent: 2 + - uid: 4424 + components: + - type: Transform + pos: 1.5,26.5 + parent: 2 + - uid: 4425 + components: + - type: Transform + pos: 1.5,27.5 + parent: 2 + - uid: 4426 + components: + - type: Transform + pos: 1.5,28.5 + parent: 2 + - uid: 4427 + components: + - type: Transform + pos: 1.5,29.5 + parent: 2 + - uid: 4428 + components: + - type: Transform + pos: 1.5,30.5 + parent: 2 + - uid: 4429 + components: + - type: Transform + pos: 5.5,47.5 + parent: 2 + - uid: 4430 + components: + - type: Transform + pos: 5.5,48.5 + parent: 2 + - uid: 4431 + components: + - type: Transform + pos: 0.5,57.5 + parent: 2 + - uid: 4432 + components: + - type: Transform + pos: 1.5,57.5 + parent: 2 + - uid: 4433 + components: + - type: Transform + pos: 5.5,62.5 + parent: 2 + - uid: 4434 + components: + - type: Transform + pos: 5.5,61.5 + parent: 2 + - uid: 4435 + components: + - type: Transform + pos: 6.5,62.5 + parent: 2 + - uid: 4436 + components: + - type: Transform + pos: 7.5,62.5 + parent: 2 + - uid: 4437 + components: + - type: Transform + pos: 7.5,61.5 + parent: 2 + - uid: 4438 + components: + - type: Transform + pos: 8.5,61.5 + parent: 2 + - uid: 4439 + components: + - type: Transform + pos: 8.5,60.5 + parent: 2 + - uid: 4440 + components: + - type: Transform + pos: 5.5,62.5 + parent: 2 + - uid: 4441 + components: + - type: Transform + pos: 4.5,62.5 + parent: 2 + - uid: 4442 + components: + - type: Transform + pos: 4.5,63.5 + parent: 2 + - uid: 4443 + components: + - type: Transform + pos: 4.5,63.5 + parent: 2 + - uid: 4444 + components: + - type: Transform + pos: 3.5,63.5 + parent: 2 + - uid: 4445 + components: + - type: Transform + pos: 2.5,63.5 + parent: 2 + - uid: 4446 + components: + - type: Transform + pos: 1.5,63.5 + parent: 2 + - uid: 4447 + components: + - type: Transform + pos: 0.5,63.5 + parent: 2 + - uid: 4448 + components: + - type: Transform + pos: -0.5,63.5 + parent: 2 + - uid: 4449 + components: + - type: Transform + pos: -1.5,63.5 + parent: 2 + - uid: 4450 + components: + - type: Transform + pos: -2.5,63.5 + parent: 2 + - uid: 4451 + components: + - type: Transform + pos: -2.5,62.5 + parent: 2 + - uid: 4452 + components: + - type: Transform + pos: -3.5,62.5 + parent: 2 + - uid: 4453 + components: + - type: Transform + pos: -4.5,62.5 + parent: 2 + - uid: 4454 + components: + - type: Transform + pos: -4.5,62.5 + parent: 2 + - uid: 4455 + components: + - type: Transform + pos: -5.5,62.5 + parent: 2 + - uid: 4456 + components: + - type: Transform + pos: -5.5,61.5 + parent: 2 + - uid: 4457 + components: + - type: Transform + pos: -6.5,61.5 + parent: 2 + - uid: 4458 + components: + - type: Transform + pos: -6.5,60.5 + parent: 2 + - uid: 4459 + components: + - type: Transform + pos: -6.5,61.5 + parent: 2 + - uid: 4460 + components: + - type: Transform + pos: -5.5,61.5 + parent: 2 + - uid: 4461 + components: + - type: Transform + pos: -5.5,62.5 + parent: 2 + - uid: 4462 + components: + - type: Transform + pos: -6.5,60.5 + parent: 2 + - uid: 4463 + components: + - type: Transform + pos: -3.5,62.5 + parent: 2 + - uid: 4464 + components: + - type: Transform + pos: -2.5,62.5 + parent: 2 + - uid: 4465 + components: + - type: Transform + pos: 6.5,57.5 + parent: 2 + - uid: 4466 + components: + - type: Transform + pos: 6.5,57.5 + parent: 2 + - uid: 4467 + components: + - type: Transform + pos: 6.5,57.5 + parent: 2 + - uid: 4468 + components: + - type: Transform + pos: 7.5,52.5 + parent: 2 + - uid: 4469 + components: + - type: Transform + pos: 7.5,51.5 + parent: 2 + - uid: 4470 + components: + - type: Transform + pos: 11.5,53.5 + parent: 2 + - uid: 4471 + components: + - type: Transform + pos: 11.5,54.5 + parent: 2 + - uid: 4472 + components: + - type: Transform + pos: 11.5,55.5 + parent: 2 + - uid: 4473 + components: + - type: Transform + pos: -2.5,55.5 + parent: 2 + - uid: 4474 + components: + - type: Transform + pos: -2.5,56.5 + parent: 2 + - uid: 4475 + components: + - type: Transform + pos: -2.5,57.5 + parent: 2 + - uid: 4476 + components: + - type: Transform + pos: -4.5,55.5 + parent: 2 + - uid: 4477 + components: + - type: Transform + pos: -4.5,56.5 + parent: 2 + - uid: 4478 + components: + - type: Transform + pos: -4.5,57.5 + parent: 2 + - uid: 4479 + components: + - type: Transform + pos: -9.5,55.5 + parent: 2 + - uid: 4480 + components: + - type: Transform + pos: -8.5,55.5 + parent: 2 + - uid: 4481 + components: + - type: Transform + pos: -11.5,50.5 + parent: 2 + - uid: 4482 + components: + - type: Transform + pos: -12.5,50.5 + parent: 2 + - uid: 4483 + components: + - type: Transform + pos: -12.5,51.5 + parent: 2 + - uid: 4484 + components: + - type: Transform + pos: -12.5,51.5 + parent: 2 + - uid: 4485 + components: + - type: Transform + pos: -12.5,50.5 + parent: 2 + - uid: 4486 + components: + - type: Transform + pos: -43.5,32.5 + parent: 2 + - uid: 4487 + components: + - type: Transform + pos: -43.5,33.5 + parent: 2 + - uid: 4488 + components: + - type: Transform + pos: -43.5,34.5 + parent: 2 + - uid: 4489 + components: + - type: Transform + pos: -42.5,32.5 + parent: 2 + - uid: 4490 + components: + - type: Transform + pos: -43.5,32.5 + parent: 2 + - uid: 4491 + components: + - type: Transform + pos: -43.5,33.5 + parent: 2 + - uid: 4492 + components: + - type: Transform + pos: -43.5,34.5 + parent: 2 + - uid: 4493 + components: + - type: Transform + pos: -39.5,37.5 + parent: 2 + - uid: 4494 + components: + - type: Transform + pos: -40.5,37.5 + parent: 2 + - uid: 4495 + components: + - type: Transform + pos: -40.5,38.5 + parent: 2 + - uid: 4496 + components: + - type: Transform + pos: -41.5,38.5 + parent: 2 + - uid: 4497 + components: + - type: Transform + pos: -36.5,39.5 + parent: 2 + - uid: 4498 + components: + - type: Transform + pos: -37.5,39.5 + parent: 2 + - uid: 4499 + components: + - type: Transform + pos: -38.5,39.5 + parent: 2 + - uid: 4500 + components: + - type: Transform + pos: 1.5,26.5 + parent: 2 + - uid: 4501 + components: + - type: Transform + pos: 1.5,25.5 + parent: 2 + - uid: 4502 + components: + - type: Transform + pos: 1.5,24.5 + parent: 2 + - uid: 4503 + components: + - type: Transform + pos: 1.5,23.5 + parent: 2 + - uid: 4504 + components: + - type: Transform + pos: 1.5,22.5 + parent: 2 + - uid: 4505 + components: + - type: Transform + pos: 1.5,21.5 + parent: 2 + - uid: 4506 + components: + - type: Transform + pos: 0.5,21.5 + parent: 2 + - uid: 4507 + components: + - type: Transform + pos: -0.5,21.5 + parent: 2 + - uid: 4508 + components: + - type: Transform + pos: 2.5,21.5 + parent: 2 + - uid: 4509 + components: + - type: Transform + pos: 1.5,21.5 + parent: 2 + - uid: 4510 + components: + - type: Transform + pos: 1.5,20.5 + parent: 2 + - uid: 4511 + components: + - type: Transform + pos: 1.5,19.5 + parent: 2 + - uid: 4512 + components: + - type: Transform + pos: 1.5,18.5 + parent: 2 + - uid: 4513 + components: + - type: Transform + pos: 1.5,17.5 + parent: 2 + - uid: 4514 + components: + - type: Transform + pos: 1.5,16.5 + parent: 2 + - uid: 4515 + components: + - type: Transform + pos: 1.5,15.5 + parent: 2 + - uid: 4516 + components: + - type: Transform + pos: 1.5,11.5 + parent: 2 + - uid: 4517 + components: + - type: Transform + pos: 1.5,12.5 + parent: 2 + - uid: 4518 + components: + - type: Transform + pos: 1.5,13.5 + parent: 2 + - uid: 4519 + components: + - type: Transform + pos: 0.5,-9.5 + parent: 2 + - uid: 4520 + components: + - type: Transform + pos: 0.5,-10.5 + parent: 2 + - uid: 4521 + components: + - type: Transform + pos: 0.5,-11.5 + parent: 2 + - uid: 4522 + components: + - type: Transform + pos: 44.5,32.5 + parent: 2 + - uid: 4523 + components: + - type: Transform + pos: 45.5,32.5 + parent: 2 + - uid: 4524 + components: + - type: Transform + pos: 44.5,39.5 + parent: 2 + - uid: 4525 + components: + - type: Transform + pos: 45.5,39.5 + parent: 2 + - uid: 4526 + components: + - type: Transform + pos: 46.5,32.5 + parent: 2 + - uid: 4527 + components: + - type: Transform + pos: 46.5,39.5 + parent: 2 + - uid: 4528 + components: + - type: Transform + pos: -15.5,-55.5 + parent: 2 + - uid: 4529 + components: + - type: Transform + pos: 16.5,0.5 + parent: 2 + - uid: 4530 + components: + - type: Transform + pos: 15.5,0.5 + parent: 2 + - uid: 4531 + components: + - type: Transform + pos: 46.5,24.5 + parent: 2 + - uid: 4532 + components: + - type: Transform + pos: 0.5,61.5 + parent: 2 + - uid: 4533 + components: + - type: Transform + pos: -26.5,-51.5 + parent: 2 + - uid: 4534 + components: + - type: Transform + pos: -26.5,-52.5 + parent: 2 + - uid: 4535 + components: + - type: Transform + pos: -26.5,-54.5 + parent: 2 + - uid: 4536 + components: + - type: Transform + pos: -26.5,-53.5 + parent: 2 + - uid: 4537 + components: + - type: Transform + pos: -26.5,-55.5 + parent: 2 + - uid: 4538 + components: + - type: Transform + pos: -25.5,-55.5 + parent: 2 + - uid: 4539 + components: + - type: Transform + pos: -24.5,-55.5 + parent: 2 + - uid: 4540 + components: + - type: Transform + pos: -23.5,-55.5 + parent: 2 + - uid: 24022 + components: + - type: Transform + pos: 0.5,-64.5 + parent: 2 +- proto: CableApcStack + entities: + - uid: 4541 + components: + - type: Transform + pos: 4.5463753,15.41609 + parent: 2 + - uid: 4542 + components: + - type: Transform + pos: 23.490421,35.74485 + parent: 2 + - uid: 4543 + components: + - type: Transform + pos: -6.541481,75.627754 + parent: 2 + - uid: 4544 + components: + - type: Transform + pos: 14.475429,-51.410145 + parent: 2 + - uid: 4545 + components: + - type: Transform + pos: -14.377928,-61.538338 + parent: 2 + - uid: 4546 + components: + - type: Transform + pos: -41.494724,-33.60173 + parent: 2 + - uid: 4547 + components: + - type: Transform + pos: -3.426261,49.710426 + parent: 2 +- proto: CableApcStack1 + entities: + - uid: 4548 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.411194,-37.462727 + parent: 2 + - uid: 4550 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.48098,-57.535282 + parent: 2 + - uid: 4551 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.36432,-37.4471 + parent: 2 + - uid: 4552 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.379944,-37.47835 + parent: 2 + - uid: 4553 + components: + - type: Transform + pos: 36.47409,-38.541065 + parent: 2 + - uid: 4554 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.491627,-8.459211 + parent: 2 +- proto: CableApcStack10 + entities: + - uid: 4555 + components: + - type: Transform + pos: -36.41552,-29.740711 + parent: 2 +- proto: CableApcStackLingering10 + entities: + - uid: 4556 + components: + - type: Transform + pos: -11.538536,-53.24475 + parent: 2 +- proto: Cablecuffs + entities: + - uid: 4557 + components: + - type: Transform + pos: -6.5800214,12.394133 + parent: 2 + - uid: 4558 + components: + - type: Transform + pos: -6.3842173,12.52467 + parent: 2 + - uid: 4559 + components: + - type: Transform + pos: -6.169765,12.683176 + parent: 2 +- proto: CableHV + entities: + - uid: 4563 + components: + - type: Transform + pos: -43.5,-55.5 + parent: 2 + - uid: 4564 + components: + - type: Transform + pos: -43.5,-56.5 + parent: 2 + - uid: 4565 + components: + - type: Transform + pos: -43.5,-57.5 + parent: 2 + - uid: 4566 + components: + - type: Transform + pos: -43.5,-58.5 + parent: 2 + - uid: 4567 + components: + - type: Transform + pos: -43.5,-59.5 + parent: 2 + - uid: 4568 + components: + - type: Transform + pos: -42.5,-55.5 + parent: 2 + - uid: 4569 + components: + - type: Transform + pos: -42.5,-56.5 + parent: 2 + - uid: 4570 + components: + - type: Transform + pos: -42.5,-57.5 + parent: 2 + - uid: 4571 + components: + - type: Transform + pos: -42.5,-58.5 + parent: 2 + - uid: 4572 + components: + - type: Transform + pos: -42.5,-59.5 + parent: 2 + - uid: 4573 + components: + - type: Transform + pos: -41.5,-55.5 + parent: 2 + - uid: 4574 + components: + - type: Transform + pos: -41.5,-56.5 + parent: 2 + - uid: 4575 + components: + - type: Transform + pos: -41.5,-57.5 + parent: 2 + - uid: 4576 + components: + - type: Transform + pos: -41.5,-58.5 + parent: 2 + - uid: 4577 + components: + - type: Transform + pos: -41.5,-59.5 + parent: 2 + - uid: 4578 + components: + - type: Transform + pos: -47.5,-56.5 + parent: 2 + - uid: 4579 + components: + - type: Transform + pos: -47.5,-57.5 + parent: 2 + - uid: 4580 + components: + - type: Transform + pos: -47.5,-58.5 + parent: 2 + - uid: 4581 + components: + - type: Transform + pos: -47.5,-59.5 + parent: 2 + - uid: 4582 + components: + - type: Transform + pos: -46.5,-56.5 + parent: 2 + - uid: 4583 + components: + - type: Transform + pos: -46.5,-57.5 + parent: 2 + - uid: 4584 + components: + - type: Transform + pos: -46.5,-58.5 + parent: 2 + - uid: 4585 + components: + - type: Transform + pos: -46.5,-59.5 + parent: 2 + - uid: 4586 + components: + - type: Transform + pos: -45.5,-56.5 + parent: 2 + - uid: 4587 + components: + - type: Transform + pos: -45.5,-57.5 + parent: 2 + - uid: 4588 + components: + - type: Transform + pos: -45.5,-58.5 + parent: 2 + - uid: 4589 + components: + - type: Transform + pos: -45.5,-59.5 + parent: 2 + - uid: 4590 + components: + - type: Transform + pos: -51.5,-57.5 + parent: 2 + - uid: 4591 + components: + - type: Transform + pos: -51.5,-58.5 + parent: 2 + - uid: 4592 + components: + - type: Transform + pos: -51.5,-59.5 + parent: 2 + - uid: 4593 + components: + - type: Transform + pos: -50.5,-57.5 + parent: 2 + - uid: 4594 + components: + - type: Transform + pos: -50.5,-58.5 + parent: 2 + - uid: 4595 + components: + - type: Transform + pos: -50.5,-59.5 + parent: 2 + - uid: 4596 + components: + - type: Transform + pos: -49.5,-57.5 + parent: 2 + - uid: 4597 + components: + - type: Transform + pos: -49.5,-58.5 + parent: 2 + - uid: 4598 + components: + - type: Transform + pos: -49.5,-59.5 + parent: 2 + - uid: 4599 + components: + - type: Transform + pos: -55.5,-57.5 + parent: 2 + - uid: 4600 + components: + - type: Transform + pos: -55.5,-58.5 + parent: 2 + - uid: 4601 + components: + - type: Transform + pos: -55.5,-59.5 + parent: 2 + - uid: 4602 + components: + - type: Transform + pos: -54.5,-57.5 + parent: 2 + - uid: 4603 + components: + - type: Transform + pos: -54.5,-58.5 + parent: 2 + - uid: 4604 + components: + - type: Transform + pos: -54.5,-59.5 + parent: 2 + - uid: 4605 + components: + - type: Transform + pos: -53.5,-57.5 + parent: 2 + - uid: 4606 + components: + - type: Transform + pos: -53.5,-58.5 + parent: 2 + - uid: 4607 + components: + - type: Transform + pos: -53.5,-59.5 + parent: 2 + - uid: 4608 + components: + - type: Transform + pos: -40.5,-61.5 + parent: 2 + - uid: 4609 + components: + - type: Transform + pos: -55.5,-63.5 + parent: 2 + - uid: 4610 + components: + - type: Transform + pos: -55.5,-64.5 + parent: 2 + - uid: 4611 + components: + - type: Transform + pos: -55.5,-65.5 + parent: 2 + - uid: 4612 + components: + - type: Transform + pos: -54.5,-63.5 + parent: 2 + - uid: 4613 + components: + - type: Transform + pos: -54.5,-64.5 + parent: 2 + - uid: 4614 + components: + - type: Transform + pos: -54.5,-65.5 + parent: 2 + - uid: 4615 + components: + - type: Transform + pos: -53.5,-63.5 + parent: 2 + - uid: 4616 + components: + - type: Transform + pos: -53.5,-64.5 + parent: 2 + - uid: 4617 + components: + - type: Transform + pos: -53.5,-65.5 + parent: 2 + - uid: 4618 + components: + - type: Transform + pos: -51.5,-63.5 + parent: 2 + - uid: 4619 + components: + - type: Transform + pos: -51.5,-64.5 + parent: 2 + - uid: 4620 + components: + - type: Transform + pos: -51.5,-65.5 + parent: 2 + - uid: 4621 + components: + - type: Transform + pos: -50.5,-63.5 + parent: 2 + - uid: 4622 + components: + - type: Transform + pos: -50.5,-64.5 + parent: 2 + - uid: 4623 + components: + - type: Transform + pos: -50.5,-65.5 + parent: 2 + - uid: 4624 + components: + - type: Transform + pos: -49.5,-63.5 + parent: 2 + - uid: 4625 + components: + - type: Transform + pos: -49.5,-64.5 + parent: 2 + - uid: 4626 + components: + - type: Transform + pos: -49.5,-65.5 + parent: 2 + - uid: 4627 + components: + - type: Transform + pos: -47.5,-63.5 + parent: 2 + - uid: 4628 + components: + - type: Transform + pos: -47.5,-64.5 + parent: 2 + - uid: 4629 + components: + - type: Transform + pos: -47.5,-65.5 + parent: 2 + - uid: 4630 + components: + - type: Transform + pos: -47.5,-66.5 + parent: 2 + - uid: 4631 + components: + - type: Transform + pos: -46.5,-63.5 + parent: 2 + - uid: 4632 + components: + - type: Transform + pos: -46.5,-64.5 + parent: 2 + - uid: 4633 + components: + - type: Transform + pos: -46.5,-65.5 + parent: 2 + - uid: 4634 + components: + - type: Transform + pos: -46.5,-66.5 + parent: 2 + - uid: 4635 + components: + - type: Transform + pos: -45.5,-63.5 + parent: 2 + - uid: 4636 + components: + - type: Transform + pos: -45.5,-64.5 + parent: 2 + - uid: 4637 + components: + - type: Transform + pos: -45.5,-65.5 + parent: 2 + - uid: 4638 + components: + - type: Transform + pos: -45.5,-66.5 + parent: 2 + - uid: 4639 + components: + - type: Transform + pos: -43.5,-63.5 + parent: 2 + - uid: 4640 + components: + - type: Transform + pos: -43.5,-64.5 + parent: 2 + - uid: 4641 + components: + - type: Transform + pos: -43.5,-65.5 + parent: 2 + - uid: 4642 + components: + - type: Transform + pos: -43.5,-66.5 + parent: 2 + - uid: 4643 + components: + - type: Transform + pos: -43.5,-67.5 + parent: 2 + - uid: 4644 + components: + - type: Transform + pos: -42.5,-63.5 + parent: 2 + - uid: 4645 + components: + - type: Transform + pos: -42.5,-64.5 + parent: 2 + - uid: 4646 + components: + - type: Transform + pos: -42.5,-65.5 + parent: 2 + - uid: 4647 + components: + - type: Transform + pos: -42.5,-66.5 + parent: 2 + - uid: 4648 + components: + - type: Transform + pos: -42.5,-67.5 + parent: 2 + - uid: 4649 + components: + - type: Transform + pos: -41.5,-63.5 + parent: 2 + - uid: 4650 + components: + - type: Transform + pos: -41.5,-64.5 + parent: 2 + - uid: 4651 + components: + - type: Transform + pos: -41.5,-65.5 + parent: 2 + - uid: 4652 + components: + - type: Transform + pos: -41.5,-66.5 + parent: 2 + - uid: 4653 + components: + - type: Transform + pos: -41.5,-67.5 + parent: 2 + - uid: 4654 + components: + - type: Transform + pos: -42.5,-62.5 + parent: 2 + - uid: 4655 + components: + - type: Transform + pos: -46.5,-62.5 + parent: 2 + - uid: 4656 + components: + - type: Transform + pos: -50.5,-62.5 + parent: 2 + - uid: 4657 + components: + - type: Transform + pos: -54.5,-62.5 + parent: 2 + - uid: 4658 + components: + - type: Transform + pos: -54.5,-60.5 + parent: 2 + - uid: 4659 + components: + - type: Transform + pos: -50.5,-60.5 + parent: 2 + - uid: 4660 + components: + - type: Transform + pos: -46.5,-60.5 + parent: 2 + - uid: 4661 + components: + - type: Transform + pos: -42.5,-60.5 + parent: 2 + - uid: 4662 + components: + - type: Transform + pos: -35.5,-54.5 + parent: 2 + - uid: 4663 + components: + - type: Transform + pos: -36.5,-54.5 + parent: 2 + - uid: 4664 + components: + - type: Transform + pos: -37.5,-54.5 + parent: 2 + - uid: 4665 + components: + - type: Transform + pos: -38.5,-54.5 + parent: 2 + - uid: 4666 + components: + - type: Transform + pos: -39.5,-54.5 + parent: 2 + - uid: 4667 + components: + - type: Transform + pos: -39.5,-55.5 + parent: 2 + - uid: 4668 + components: + - type: Transform + pos: -39.5,-56.5 + parent: 2 + - uid: 4669 + components: + - type: Transform + pos: -39.5,-57.5 + parent: 2 + - uid: 4670 + components: + - type: Transform + pos: -39.5,-58.5 + parent: 2 + - uid: 4671 + components: + - type: Transform + pos: -39.5,-59.5 + parent: 2 + - uid: 4672 + components: + - type: Transform + pos: -39.5,-60.5 + parent: 2 + - uid: 4673 + components: + - type: Transform + pos: -39.5,-61.5 + parent: 2 + - uid: 4674 + components: + - type: Transform + pos: -41.5,-61.5 + parent: 2 + - uid: 4675 + components: + - type: Transform + pos: -43.5,-61.5 + parent: 2 + - uid: 4676 + components: + - type: Transform + pos: -44.5,-61.5 + parent: 2 + - uid: 4677 + components: + - type: Transform + pos: -45.5,-61.5 + parent: 2 + - uid: 4678 + components: + - type: Transform + pos: -47.5,-61.5 + parent: 2 + - uid: 4679 + components: + - type: Transform + pos: -48.5,-61.5 + parent: 2 + - uid: 4680 + components: + - type: Transform + pos: -49.5,-61.5 + parent: 2 + - uid: 4681 + components: + - type: Transform + pos: -51.5,-61.5 + parent: 2 + - uid: 4682 + components: + - type: Transform + pos: -52.5,-61.5 + parent: 2 + - uid: 4683 + components: + - type: Transform + pos: -53.5,-61.5 + parent: 2 + - uid: 4684 + components: + - type: Transform + pos: -54.5,-61.5 + parent: 2 + - uid: 4685 + components: + - type: Transform + pos: -55.5,-61.5 + parent: 2 + - uid: 4686 + components: + - type: Transform + pos: -56.5,-61.5 + parent: 2 + - uid: 4687 + components: + - type: Transform + pos: 73.5,27.5 + parent: 2 + - uid: 4688 + components: + - type: Transform + pos: 47.5,22.5 + parent: 2 + - uid: 4689 + components: + - type: Transform + pos: 47.5,23.5 + parent: 2 + - uid: 4690 + components: + - type: Transform + pos: 48.5,23.5 + parent: 2 + - uid: 4691 + components: + - type: Transform + pos: 49.5,23.5 + parent: 2 + - uid: 4692 + components: + - type: Transform + pos: 50.5,23.5 + parent: 2 + - uid: 4693 + components: + - type: Transform + pos: 51.5,23.5 + parent: 2 + - uid: 4694 + components: + - type: Transform + pos: 52.5,23.5 + parent: 2 + - uid: 4695 + components: + - type: Transform + pos: 53.5,23.5 + parent: 2 + - uid: 4696 + components: + - type: Transform + pos: 54.5,23.5 + parent: 2 + - uid: 4697 + components: + - type: Transform + pos: 55.5,23.5 + parent: 2 + - uid: 4698 + components: + - type: Transform + pos: 56.5,23.5 + parent: 2 + - uid: 4699 + components: + - type: Transform + pos: 57.5,23.5 + parent: 2 + - uid: 4700 + components: + - type: Transform + pos: 58.5,23.5 + parent: 2 + - uid: 4701 + components: + - type: Transform + pos: 59.5,23.5 + parent: 2 + - uid: 4702 + components: + - type: Transform + pos: 60.5,23.5 + parent: 2 + - uid: 4703 + components: + - type: Transform + pos: 62.5,23.5 + parent: 2 + - uid: 4704 + components: + - type: Transform + pos: 63.5,23.5 + parent: 2 + - uid: 4705 + components: + - type: Transform + pos: 64.5,23.5 + parent: 2 + - uid: 4706 + components: + - type: Transform + pos: 66.5,23.5 + parent: 2 + - uid: 4707 + components: + - type: Transform + pos: 67.5,23.5 + parent: 2 + - uid: 4708 + components: + - type: Transform + pos: 68.5,23.5 + parent: 2 + - uid: 4709 + components: + - type: Transform + pos: 69.5,23.5 + parent: 2 + - uid: 4710 + components: + - type: Transform + pos: 70.5,23.5 + parent: 2 + - uid: 4711 + components: + - type: Transform + pos: 72.5,23.5 + parent: 2 + - uid: 4712 + components: + - type: Transform + pos: 73.5,23.5 + parent: 2 + - uid: 4713 + components: + - type: Transform + pos: 74.5,23.5 + parent: 2 + - uid: 4714 + components: + - type: Transform + pos: 75.5,23.5 + parent: 2 + - uid: 4715 + components: + - type: Transform + pos: 73.5,26.5 + parent: 2 + - uid: 4716 + components: + - type: Transform + pos: 73.5,25.5 + parent: 2 + - uid: 4717 + components: + - type: Transform + pos: 73.5,24.5 + parent: 2 + - uid: 4718 + components: + - type: Transform + pos: 73.5,19.5 + parent: 2 + - uid: 4719 + components: + - type: Transform + pos: 73.5,20.5 + parent: 2 + - uid: 4720 + components: + - type: Transform + pos: 73.5,21.5 + parent: 2 + - uid: 4721 + components: + - type: Transform + pos: 73.5,22.5 + parent: 2 + - uid: 4722 + components: + - type: Transform + pos: 69.5,22.5 + parent: 2 + - uid: 4723 + components: + - type: Transform + pos: 69.5,21.5 + parent: 2 + - uid: 4724 + components: + - type: Transform + pos: 69.5,20.5 + parent: 2 + - uid: 4725 + components: + - type: Transform + pos: 69.5,19.5 + parent: 2 + - uid: 4726 + components: + - type: Transform + pos: 65.5,28.5 + parent: 2 + - uid: 4727 + components: + - type: Transform + pos: 65.5,27.5 + parent: 2 + - uid: 4728 + components: + - type: Transform + pos: 65.5,26.5 + parent: 2 + - uid: 4729 + components: + - type: Transform + pos: 65.5,25.5 + parent: 2 + - uid: 4730 + components: + - type: Transform + pos: 65.5,24.5 + parent: 2 + - uid: 4731 + components: + - type: Transform + pos: 65.5,21.5 + parent: 2 + - uid: 4732 + components: + - type: Transform + pos: 65.5,20.5 + parent: 2 + - uid: 4733 + components: + - type: Transform + pos: 65.5,19.5 + parent: 2 + - uid: 4734 + components: + - type: Transform + pos: 65.5,18.5 + parent: 2 + - uid: 4735 + components: + - type: Transform + pos: 65.5,22.5 + parent: 2 + - uid: 4736 + components: + - type: Transform + pos: 57.5,24.5 + parent: 2 + - uid: 4737 + components: + - type: Transform + pos: 61.5,17.5 + parent: 2 + - uid: 4738 + components: + - type: Transform + pos: 61.5,18.5 + parent: 2 + - uid: 4739 + components: + - type: Transform + pos: 61.5,19.5 + parent: 2 + - uid: 4740 + components: + - type: Transform + pos: 61.5,20.5 + parent: 2 + - uid: 4741 + components: + - type: Transform + pos: 61.5,21.5 + parent: 2 + - uid: 4742 + components: + - type: Transform + pos: 61.5,22.5 + parent: 2 + - uid: 4743 + components: + - type: Transform + pos: 61.5,24.5 + parent: 2 + - uid: 4744 + components: + - type: Transform + pos: 61.5,25.5 + parent: 2 + - uid: 4745 + components: + - type: Transform + pos: 61.5,26.5 + parent: 2 + - uid: 4746 + components: + - type: Transform + pos: 61.5,27.5 + parent: 2 + - uid: 4747 + components: + - type: Transform + pos: 61.5,28.5 + parent: 2 + - uid: 4748 + components: + - type: Transform + pos: 61.5,29.5 + parent: 2 + - uid: 4749 + components: + - type: Transform + pos: 57.5,25.5 + parent: 2 + - uid: 4750 + components: + - type: Transform + pos: 57.5,26.5 + parent: 2 + - uid: 4751 + components: + - type: Transform + pos: 57.5,27.5 + parent: 2 + - uid: 4752 + components: + - type: Transform + pos: 57.5,28.5 + parent: 2 + - uid: 4753 + components: + - type: Transform + pos: 57.5,29.5 + parent: 2 + - uid: 4754 + components: + - type: Transform + pos: 57.5,31.5 + parent: 2 + - uid: 4755 + components: + - type: Transform + pos: 57.5,32.5 + parent: 2 + - uid: 4756 + components: + - type: Transform + pos: 57.5,22.5 + parent: 2 + - uid: 4757 + components: + - type: Transform + pos: 57.5,21.5 + parent: 2 + - uid: 4758 + components: + - type: Transform + pos: 57.5,20.5 + parent: 2 + - uid: 4759 + components: + - type: Transform + pos: 57.5,19.5 + parent: 2 + - uid: 4760 + components: + - type: Transform + pos: 57.5,18.5 + parent: 2 + - uid: 4761 + components: + - type: Transform + pos: -54.5,32.5 + parent: 2 + - uid: 4762 + components: + - type: Transform + pos: -54.5,31.5 + parent: 2 + - uid: 4763 + components: + - type: Transform + pos: -54.5,30.5 + parent: 2 + - uid: 4764 + components: + - type: Transform + pos: -54.5,28.5 + parent: 2 + - uid: 4765 + components: + - type: Transform + pos: -53.5,29.5 + parent: 2 + - uid: 4766 + components: + - type: Transform + pos: -52.5,29.5 + parent: 2 + - uid: 4767 + components: + - type: Transform + pos: -58.5,29.5 + parent: 2 + - uid: 4768 + components: + - type: Transform + pos: -58.5,28.5 + parent: 2 + - uid: 4769 + components: + - type: Transform + pos: -59.5,29.5 + parent: 2 + - uid: 4770 + components: + - type: Transform + pos: -57.5,29.5 + parent: 2 + - uid: 4771 + components: + - type: Transform + pos: -57.5,28.5 + parent: 2 + - uid: 4772 + components: + - type: Transform + pos: -59.5,28.5 + parent: 2 + - uid: 4773 + components: + - type: Transform + pos: -62.5,28.5 + parent: 2 + - uid: 4774 + components: + - type: Transform + pos: -62.5,27.5 + parent: 2 + - uid: 4775 + components: + - type: Transform + pos: -62.5,26.5 + parent: 2 + - uid: 4776 + components: + - type: Transform + pos: -63.5,26.5 + parent: 2 + - uid: 4777 + components: + - type: Transform + pos: -63.5,27.5 + parent: 2 + - uid: 4778 + components: + - type: Transform + pos: -63.5,28.5 + parent: 2 + - uid: 4779 + components: + - type: Transform + pos: -61.5,28.5 + parent: 2 + - uid: 4780 + components: + - type: Transform + pos: -61.5,27.5 + parent: 2 + - uid: 4781 + components: + - type: Transform + pos: -67.5,27.5 + parent: 2 + - uid: 4782 + components: + - type: Transform + pos: -67.5,26.5 + parent: 2 + - uid: 4783 + components: + - type: Transform + pos: -67.5,25.5 + parent: 2 + - uid: 4784 + components: + - type: Transform + pos: -66.5,27.5 + parent: 2 + - uid: 4785 + components: + - type: Transform + pos: -66.5,26.5 + parent: 2 + - uid: 4786 + components: + - type: Transform + pos: -66.5,25.5 + parent: 2 + - uid: 4787 + components: + - type: Transform + pos: -65.5,27.5 + parent: 2 + - uid: 4788 + components: + - type: Transform + pos: -65.5,26.5 + parent: 2 + - uid: 4789 + components: + - type: Transform + pos: -65.5,25.5 + parent: 2 + - uid: 4790 + components: + - type: Transform + pos: -65.5,23.5 + parent: 2 + - uid: 4791 + components: + - type: Transform + pos: -66.5,23.5 + parent: 2 + - uid: 4792 + components: + - type: Transform + pos: -72.5,23.5 + parent: 2 + - uid: 4793 + components: + - type: Transform + pos: -71.5,23.5 + parent: 2 + - uid: 4794 + components: + - type: Transform + pos: -70.5,23.5 + parent: 2 + - uid: 4795 + components: + - type: Transform + pos: -69.5,23.5 + parent: 2 + - uid: 4796 + components: + - type: Transform + pos: -71.5,25.5 + parent: 2 + - uid: 4797 + components: + - type: Transform + pos: -71.5,26.5 + parent: 2 + - uid: 4798 + components: + - type: Transform + pos: -71.5,27.5 + parent: 2 + - uid: 4799 + components: + - type: Transform + pos: -70.5,25.5 + parent: 2 + - uid: 4800 + components: + - type: Transform + pos: -70.5,26.5 + parent: 2 + - uid: 4801 + components: + - type: Transform + pos: -70.5,27.5 + parent: 2 + - uid: 4802 + components: + - type: Transform + pos: -69.5,25.5 + parent: 2 + - uid: 4803 + components: + - type: Transform + pos: -69.5,26.5 + parent: 2 + - uid: 4804 + components: + - type: Transform + pos: -69.5,27.5 + parent: 2 + - uid: 4805 + components: + - type: Transform + pos: -70.5,21.5 + parent: 2 + - uid: 4806 + components: + - type: Transform + pos: -71.5,19.5 + parent: 2 + - uid: 4807 + components: + - type: Transform + pos: -70.5,19.5 + parent: 2 + - uid: 4808 + components: + - type: Transform + pos: -66.5,21.5 + parent: 2 + - uid: 4809 + components: + - type: Transform + pos: -69.5,21.5 + parent: 2 + - uid: 4810 + components: + - type: Transform + pos: -67.5,19.5 + parent: 2 + - uid: 4811 + components: + - type: Transform + pos: -67.5,20.5 + parent: 2 + - uid: 4812 + components: + - type: Transform + pos: -71.5,20.5 + parent: 2 + - uid: 4813 + components: + - type: Transform + pos: -71.5,21.5 + parent: 2 + - uid: 4814 + components: + - type: Transform + pos: -69.5,19.5 + parent: 2 + - uid: 4815 + components: + - type: Transform + pos: -69.5,20.5 + parent: 2 + - uid: 4816 + components: + - type: Transform + pos: -70.5,20.5 + parent: 2 + - uid: 4817 + components: + - type: Transform + pos: -66.5,19.5 + parent: 2 + - uid: 4818 + components: + - type: Transform + pos: -66.5,20.5 + parent: 2 + - uid: 4819 + components: + - type: Transform + pos: -67.5,21.5 + parent: 2 + - uid: 4820 + components: + - type: Transform + pos: -65.5,21.5 + parent: 2 + - uid: 4821 + components: + - type: Transform + pos: -65.5,20.5 + parent: 2 + - uid: 4822 + components: + - type: Transform + pos: -65.5,19.5 + parent: 2 + - uid: 4823 + components: + - type: Transform + pos: 2.5,-35.5 + parent: 2 + - uid: 4824 + components: + - type: Transform + pos: 5.5,34.5 + parent: 2 + - uid: 4825 + components: + - type: Transform + pos: 6.5,34.5 + parent: 2 + - uid: 4826 + components: + - type: Transform + pos: -2.5,-48.5 + parent: 2 + - uid: 4827 + components: + - type: Transform + pos: 60.5,19.5 + parent: 2 + - uid: 4828 + components: + - type: Transform + pos: 60.5,18.5 + parent: 2 + - uid: 4829 + components: + - type: Transform + pos: 60.5,21.5 + parent: 2 + - uid: 4830 + components: + - type: Transform + pos: 60.5,17.5 + parent: 2 + - uid: 4831 + components: + - type: Transform + pos: 62.5,17.5 + parent: 2 + - uid: 4832 + components: + - type: Transform + pos: -35.5,-55.5 + parent: 2 + - uid: 4833 + components: + - type: Transform + pos: 5.5,32.5 + parent: 2 + - uid: 4834 + components: + - type: Transform + pos: -20.5,-55.5 + parent: 2 + - uid: 4835 + components: + - type: Transform + pos: -3.5,-59.5 + parent: 2 + - uid: 4836 + components: + - type: Transform + pos: 7.5,34.5 + parent: 2 + - uid: 4837 + components: + - type: Transform + pos: -16.5,-55.5 + parent: 2 + - uid: 4838 + components: + - type: Transform + pos: -20.5,-57.5 + parent: 2 + - uid: 4839 + components: + - type: Transform + pos: 47.5,-62.5 + parent: 2 + - uid: 4840 + components: + - type: Transform + pos: 43.5,-58.5 + parent: 2 + - uid: 4841 + components: + - type: Transform + pos: 43.5,-51.5 + parent: 2 + - uid: 4842 + components: + - type: Transform + pos: 43.5,-52.5 + parent: 2 + - uid: 4843 + components: + - type: Transform + pos: 43.5,-53.5 + parent: 2 + - uid: 4844 + components: + - type: Transform + pos: 43.5,-54.5 + parent: 2 + - uid: 4845 + components: + - type: Transform + pos: 43.5,-55.5 + parent: 2 + - uid: 4846 + components: + - type: Transform + pos: 43.5,-56.5 + parent: 2 + - uid: 4847 + components: + - type: Transform + pos: 43.5,-59.5 + parent: 2 + - uid: 4848 + components: + - type: Transform + pos: 43.5,-60.5 + parent: 2 + - uid: 4849 + components: + - type: Transform + pos: 43.5,-61.5 + parent: 2 + - uid: 4850 + components: + - type: Transform + pos: 43.5,-62.5 + parent: 2 + - uid: 4851 + components: + - type: Transform + pos: 43.5,-63.5 + parent: 2 + - uid: 4852 + components: + - type: Transform + pos: 47.5,-61.5 + parent: 2 + - uid: 4853 + components: + - type: Transform + pos: 47.5,-60.5 + parent: 2 + - uid: 4854 + components: + - type: Transform + pos: 47.5,-59.5 + parent: 2 + - uid: 4855 + components: + - type: Transform + pos: 47.5,-58.5 + parent: 2 + - uid: 4856 + components: + - type: Transform + pos: 47.5,-56.5 + parent: 2 + - uid: 4857 + components: + - type: Transform + pos: 47.5,-55.5 + parent: 2 + - uid: 4858 + components: + - type: Transform + pos: 47.5,-54.5 + parent: 2 + - uid: 4859 + components: + - type: Transform + pos: 47.5,-53.5 + parent: 2 + - uid: 4860 + components: + - type: Transform + pos: 47.5,-52.5 + parent: 2 + - uid: 4861 + components: + - type: Transform + pos: 51.5,-53.5 + parent: 2 + - uid: 4862 + components: + - type: Transform + pos: 51.5,-54.5 + parent: 2 + - uid: 4863 + components: + - type: Transform + pos: 51.5,-55.5 + parent: 2 + - uid: 4864 + components: + - type: Transform + pos: 51.5,-56.5 + parent: 2 + - uid: 4865 + components: + - type: Transform + pos: 51.5,-58.5 + parent: 2 + - uid: 4866 + components: + - type: Transform + pos: 51.5,-59.5 + parent: 2 + - uid: 4867 + components: + - type: Transform + pos: 51.5,-60.5 + parent: 2 + - uid: 4868 + components: + - type: Transform + pos: 51.5,-61.5 + parent: 2 + - uid: 4869 + components: + - type: Transform + pos: 55.5,-61.5 + parent: 2 + - uid: 4870 + components: + - type: Transform + pos: 55.5,-60.5 + parent: 2 + - uid: 4871 + components: + - type: Transform + pos: 55.5,-59.5 + parent: 2 + - uid: 4872 + components: + - type: Transform + pos: 55.5,-58.5 + parent: 2 + - uid: 4873 + components: + - type: Transform + pos: 55.5,-56.5 + parent: 2 + - uid: 4874 + components: + - type: Transform + pos: 55.5,-55.5 + parent: 2 + - uid: 4875 + components: + - type: Transform + pos: 55.5,-54.5 + parent: 2 + - uid: 4876 + components: + - type: Transform + pos: 55.5,-53.5 + parent: 2 + - uid: 4877 + components: + - type: Transform + pos: 57.5,-57.5 + parent: 2 + - uid: 4878 + components: + - type: Transform + pos: 42.5,-57.5 + parent: 2 + - uid: 4879 + components: + - type: Transform + pos: 41.5,-57.5 + parent: 2 + - uid: 4880 + components: + - type: Transform + pos: 40.5,-57.5 + parent: 2 + - uid: 4881 + components: + - type: Transform + pos: 40.5,-58.5 + parent: 2 + - uid: 4882 + components: + - type: Transform + pos: 40.5,-59.5 + parent: 2 + - uid: 4883 + components: + - type: Transform + pos: 40.5,-56.5 + parent: 2 + - uid: 4884 + components: + - type: Transform + pos: 40.5,-55.5 + parent: 2 + - uid: 4885 + components: + - type: Transform + pos: 40.5,-54.5 + parent: 2 + - uid: 4886 + components: + - type: Transform + pos: 40.5,-53.5 + parent: 2 + - uid: 4887 + components: + - type: Transform + pos: 40.5,-52.5 + parent: 2 + - uid: 4888 + components: + - type: Transform + pos: 40.5,-51.5 + parent: 2 + - uid: 4889 + components: + - type: Transform + pos: 40.5,-50.5 + parent: 2 + - uid: 4890 + components: + - type: Transform + pos: 40.5,-49.5 + parent: 2 + - uid: 4891 + components: + - type: Transform + pos: 40.5,-48.5 + parent: 2 + - uid: 4892 + components: + - type: Transform + pos: 41.5,-48.5 + parent: 2 + - uid: 4893 + components: + - type: Transform + pos: 42.5,-48.5 + parent: 2 + - uid: 4894 + components: + - type: Transform + pos: 42.5,-47.5 + parent: 2 + - uid: 4895 + components: + - type: Transform + pos: 42.5,-46.5 + parent: 2 + - uid: 4896 + components: + - type: Transform + pos: 54.5,-59.5 + parent: 2 + - uid: 4897 + components: + - type: Transform + pos: 42.5,-59.5 + parent: 2 + - uid: 4898 + components: + - type: Transform + pos: 42.5,-60.5 + parent: 2 + - uid: 4899 + components: + - type: Transform + pos: 42.5,-61.5 + parent: 2 + - uid: 4900 + components: + - type: Transform + pos: 42.5,-62.5 + parent: 2 + - uid: 4901 + components: + - type: Transform + pos: 42.5,-63.5 + parent: 2 + - uid: 4902 + components: + - type: Transform + pos: 44.5,-63.5 + parent: 2 + - uid: 4903 + components: + - type: Transform + pos: 44.5,-62.5 + parent: 2 + - uid: 4904 + components: + - type: Transform + pos: 44.5,-61.5 + parent: 2 + - uid: 4905 + components: + - type: Transform + pos: 44.5,-60.5 + parent: 2 + - uid: 4906 + components: + - type: Transform + pos: 44.5,-59.5 + parent: 2 + - uid: 4907 + components: + - type: Transform + pos: 46.5,-59.5 + parent: 2 + - uid: 4908 + components: + - type: Transform + pos: 46.5,-60.5 + parent: 2 + - uid: 4909 + components: + - type: Transform + pos: 46.5,-61.5 + parent: 2 + - uid: 4910 + components: + - type: Transform + pos: 46.5,-62.5 + parent: 2 + - uid: 4911 + components: + - type: Transform + pos: 48.5,-62.5 + parent: 2 + - uid: 4912 + components: + - type: Transform + pos: 48.5,-61.5 + parent: 2 + - uid: 4913 + components: + - type: Transform + pos: 48.5,-60.5 + parent: 2 + - uid: 4914 + components: + - type: Transform + pos: 48.5,-59.5 + parent: 2 + - uid: 4915 + components: + - type: Transform + pos: 42.5,-51.5 + parent: 2 + - uid: 4916 + components: + - type: Transform + pos: 42.5,-52.5 + parent: 2 + - uid: 4917 + components: + - type: Transform + pos: 42.5,-53.5 + parent: 2 + - uid: 4918 + components: + - type: Transform + pos: 42.5,-54.5 + parent: 2 + - uid: 4919 + components: + - type: Transform + pos: 42.5,-55.5 + parent: 2 + - uid: 4920 + components: + - type: Transform + pos: 44.5,-55.5 + parent: 2 + - uid: 4921 + components: + - type: Transform + pos: 44.5,-54.5 + parent: 2 + - uid: 4922 + components: + - type: Transform + pos: 44.5,-53.5 + parent: 2 + - uid: 4923 + components: + - type: Transform + pos: 44.5,-52.5 + parent: 2 + - uid: 4924 + components: + - type: Transform + pos: 44.5,-51.5 + parent: 2 + - uid: 4925 + components: + - type: Transform + pos: 46.5,-52.5 + parent: 2 + - uid: 4926 + components: + - type: Transform + pos: 46.5,-53.5 + parent: 2 + - uid: 4927 + components: + - type: Transform + pos: 46.5,-54.5 + parent: 2 + - uid: 4928 + components: + - type: Transform + pos: 46.5,-55.5 + parent: 2 + - uid: 4929 + components: + - type: Transform + pos: 48.5,-55.5 + parent: 2 + - uid: 4930 + components: + - type: Transform + pos: 48.5,-54.5 + parent: 2 + - uid: 4931 + components: + - type: Transform + pos: 48.5,-53.5 + parent: 2 + - uid: 4932 + components: + - type: Transform + pos: 48.5,-52.5 + parent: 2 + - uid: 4933 + components: + - type: Transform + pos: 50.5,-53.5 + parent: 2 + - uid: 4934 + components: + - type: Transform + pos: 50.5,-54.5 + parent: 2 + - uid: 4935 + components: + - type: Transform + pos: 50.5,-55.5 + parent: 2 + - uid: 4936 + components: + - type: Transform + pos: 52.5,-53.5 + parent: 2 + - uid: 4937 + components: + - type: Transform + pos: 52.5,-54.5 + parent: 2 + - uid: 4938 + components: + - type: Transform + pos: 52.5,-55.5 + parent: 2 + - uid: 4939 + components: + - type: Transform + pos: 54.5,-53.5 + parent: 2 + - uid: 4940 + components: + - type: Transform + pos: 54.5,-54.5 + parent: 2 + - uid: 4941 + components: + - type: Transform + pos: 54.5,-55.5 + parent: 2 + - uid: 4942 + components: + - type: Transform + pos: 56.5,-53.5 + parent: 2 + - uid: 4943 + components: + - type: Transform + pos: 56.5,-54.5 + parent: 2 + - uid: 4944 + components: + - type: Transform + pos: 56.5,-55.5 + parent: 2 + - uid: 4945 + components: + - type: Transform + pos: 56.5,-59.5 + parent: 2 + - uid: 4946 + components: + - type: Transform + pos: 56.5,-60.5 + parent: 2 + - uid: 4947 + components: + - type: Transform + pos: 56.5,-61.5 + parent: 2 + - uid: 4948 + components: + - type: Transform + pos: 54.5,-60.5 + parent: 2 + - uid: 4949 + components: + - type: Transform + pos: 54.5,-61.5 + parent: 2 + - uid: 4950 + components: + - type: Transform + pos: 52.5,-59.5 + parent: 2 + - uid: 4951 + components: + - type: Transform + pos: 52.5,-60.5 + parent: 2 + - uid: 4952 + components: + - type: Transform + pos: 52.5,-61.5 + parent: 2 + - uid: 4953 + components: + - type: Transform + pos: 50.5,-59.5 + parent: 2 + - uid: 4954 + components: + - type: Transform + pos: 50.5,-60.5 + parent: 2 + - uid: 4955 + components: + - type: Transform + pos: 50.5,-61.5 + parent: 2 + - uid: 4956 + components: + - type: Transform + pos: -20.5,-58.5 + parent: 2 + - uid: 4957 + components: + - type: Transform + pos: -20.5,-56.5 + parent: 2 + - uid: 4958 + components: + - type: Transform + pos: -12.5,-58.5 + parent: 2 + - uid: 4959 + components: + - type: Transform + pos: -11.5,-58.5 + parent: 2 + - uid: 4960 + components: + - type: Transform + pos: -10.5,-58.5 + parent: 2 + - uid: 4961 + components: + - type: Transform + pos: -9.5,-58.5 + parent: 2 + - uid: 4962 + components: + - type: Transform + pos: -8.5,-58.5 + parent: 2 + - uid: 4963 + components: + - type: Transform + pos: -7.5,-58.5 + parent: 2 + - uid: 4964 + components: + - type: Transform + pos: -7.5,-59.5 + parent: 2 + - uid: 4965 + components: + - type: Transform + pos: -4.5,-56.5 + parent: 2 + - uid: 4966 + components: + - type: Transform + pos: -4.5,-57.5 + parent: 2 + - uid: 4967 + components: + - type: Transform + pos: -4.5,-58.5 + parent: 2 + - uid: 4968 + components: + - type: Transform + pos: 8.5,-47.5 + parent: 2 + - uid: 4969 + components: + - type: Transform + pos: 11.5,-46.5 + parent: 2 + - uid: 4970 + components: + - type: Transform + pos: 11.5,-45.5 + parent: 2 + - uid: 4971 + components: + - type: Transform + pos: 11.5,-44.5 + parent: 2 + - uid: 4972 + components: + - type: Transform + pos: -15.5,-52.5 + parent: 2 + - uid: 4973 + components: + - type: Transform + pos: -14.5,-52.5 + parent: 2 + - uid: 4974 + components: + - type: Transform + pos: -13.5,-52.5 + parent: 2 + - uid: 4975 + components: + - type: Transform + pos: -12.5,-52.5 + parent: 2 + - uid: 4976 + components: + - type: Transform + pos: -11.5,-52.5 + parent: 2 + - uid: 4977 + components: + - type: Transform + pos: -10.5,-52.5 + parent: 2 + - uid: 4978 + components: + - type: Transform + pos: -9.5,-52.5 + parent: 2 + - uid: 4979 + components: + - type: Transform + pos: -8.5,-52.5 + parent: 2 + - uid: 4980 + components: + - type: Transform + pos: -7.5,-52.5 + parent: 2 + - uid: 4981 + components: + - type: Transform + pos: -6.5,-52.5 + parent: 2 + - uid: 4982 + components: + - type: Transform + pos: -5.5,-52.5 + parent: 2 + - uid: 4983 + components: + - type: Transform + pos: -5.5,-51.5 + parent: 2 + - uid: 4984 + components: + - type: Transform + pos: -4.5,-51.5 + parent: 2 + - uid: 4985 + components: + - type: Transform + pos: -3.5,-51.5 + parent: 2 + - uid: 4986 + components: + - type: Transform + pos: -2.5,-51.5 + parent: 2 + - uid: 4987 + components: + - type: Transform + pos: -1.5,-51.5 + parent: 2 + - uid: 4988 + components: + - type: Transform + pos: -0.5,-51.5 + parent: 2 + - uid: 4989 + components: + - type: Transform + pos: 0.5,-51.5 + parent: 2 + - uid: 4990 + components: + - type: Transform + pos: 0.5,-52.5 + parent: 2 + - uid: 4991 + components: + - type: Transform + pos: 0.5,-53.5 + parent: 2 + - uid: 4992 + components: + - type: Transform + pos: -34.5,-54.5 + parent: 2 + - uid: 4993 + components: + - type: Transform + pos: -32.5,-55.5 + parent: 2 + - uid: 4994 + components: + - type: Transform + pos: -31.5,-55.5 + parent: 2 + - uid: 4995 + components: + - type: Transform + pos: -30.5,-55.5 + parent: 2 + - uid: 4996 + components: + - type: Transform + pos: -29.5,-55.5 + parent: 2 + - uid: 4997 + components: + - type: Transform + pos: -28.5,-55.5 + parent: 2 + - uid: 4998 + components: + - type: Transform + pos: -28.5,-54.5 + parent: 2 + - uid: 4999 + components: + - type: Transform + pos: -28.5,-53.5 + parent: 2 + - uid: 5000 + components: + - type: Transform + pos: -28.5,-52.5 + parent: 2 + - uid: 5001 + components: + - type: Transform + pos: -28.5,-51.5 + parent: 2 + - uid: 5002 + components: + - type: Transform + pos: -28.5,-50.5 + parent: 2 + - uid: 5003 + components: + - type: Transform + pos: -27.5,-50.5 + parent: 2 + - uid: 5004 + components: + - type: Transform + pos: -26.5,-50.5 + parent: 2 + - uid: 5005 + components: + - type: Transform + pos: -25.5,-50.5 + parent: 2 + - uid: 5006 + components: + - type: Transform + pos: -24.5,-50.5 + parent: 2 + - uid: 5007 + components: + - type: Transform + pos: -23.5,-50.5 + parent: 2 + - uid: 5008 + components: + - type: Transform + pos: -22.5,-50.5 + parent: 2 + - uid: 5009 + components: + - type: Transform + pos: -21.5,-50.5 + parent: 2 + - uid: 5010 + components: + - type: Transform + pos: -21.5,-51.5 + parent: 2 + - uid: 5011 + components: + - type: Transform + pos: -20.5,-51.5 + parent: 2 + - uid: 5012 + components: + - type: Transform + pos: -19.5,-51.5 + parent: 2 + - uid: 5013 + components: + - type: Transform + pos: -18.5,-51.5 + parent: 2 + - uid: 5014 + components: + - type: Transform + pos: -17.5,-51.5 + parent: 2 + - uid: 5015 + components: + - type: Transform + pos: -16.5,-51.5 + parent: 2 + - uid: 5016 + components: + - type: Transform + pos: -15.5,-51.5 + parent: 2 + - uid: 5017 + components: + - type: Transform + pos: -26.5,-51.5 + parent: 2 + - uid: 5018 + components: + - type: Transform + pos: -26.5,-52.5 + parent: 2 + - uid: 5019 + components: + - type: Transform + pos: -26.5,-53.5 + parent: 2 + - uid: 5020 + components: + - type: Transform + pos: -26.5,-54.5 + parent: 2 + - uid: 5021 + components: + - type: Transform + pos: -26.5,-55.5 + parent: 2 + - uid: 5022 + components: + - type: Transform + pos: -25.5,-55.5 + parent: 2 + - uid: 5023 + components: + - type: Transform + pos: -24.5,-55.5 + parent: 2 + - uid: 5024 + components: + - type: Transform + pos: -23.5,-55.5 + parent: 2 + - uid: 5025 + components: + - type: Transform + pos: -22.5,-55.5 + parent: 2 + - uid: 5026 + components: + - type: Transform + pos: -22.5,-54.5 + parent: 2 + - uid: 5027 + components: + - type: Transform + pos: -4.5,-43.5 + parent: 2 + - uid: 5028 + components: + - type: Transform + pos: 13.5,-44.5 + parent: 2 + - uid: 5029 + components: + - type: Transform + pos: 12.5,-44.5 + parent: 2 + - uid: 5030 + components: + - type: Transform + pos: -21.5,-49.5 + parent: 2 + - uid: 5031 + components: + - type: Transform + pos: -21.5,-48.5 + parent: 2 + - uid: 5032 + components: + - type: Transform + pos: -21.5,-47.5 + parent: 2 + - uid: 5033 + components: + - type: Transform + pos: -21.5,-46.5 + parent: 2 + - uid: 5034 + components: + - type: Transform + pos: -21.5,-45.5 + parent: 2 + - uid: 5035 + components: + - type: Transform + pos: -21.5,-44.5 + parent: 2 + - uid: 5036 + components: + - type: Transform + pos: -21.5,-43.5 + parent: 2 + - uid: 5037 + components: + - type: Transform + pos: -22.5,-26.5 + parent: 2 + - uid: 5038 + components: + - type: Transform + pos: -21.5,-34.5 + parent: 2 + - uid: 5039 + components: + - type: Transform + pos: -20.5,-43.5 + parent: 2 + - uid: 5040 + components: + - type: Transform + pos: -20.5,-42.5 + parent: 2 + - uid: 5041 + components: + - type: Transform + pos: -20.5,-41.5 + parent: 2 + - uid: 5042 + components: + - type: Transform + pos: -20.5,-40.5 + parent: 2 + - uid: 5043 + components: + - type: Transform + pos: -20.5,-39.5 + parent: 2 + - uid: 5044 + components: + - type: Transform + pos: -20.5,-38.5 + parent: 2 + - uid: 5045 + components: + - type: Transform + pos: -20.5,-37.5 + parent: 2 + - uid: 5046 + components: + - type: Transform + pos: -20.5,-36.5 + parent: 2 + - uid: 5047 + components: + - type: Transform + pos: -20.5,-35.5 + parent: 2 + - uid: 5048 + components: + - type: Transform + pos: -21.5,-35.5 + parent: 2 + - uid: 5049 + components: + - type: Transform + pos: -21.5,-33.5 + parent: 2 + - uid: 5050 + components: + - type: Transform + pos: -21.5,-32.5 + parent: 2 + - uid: 5051 + components: + - type: Transform + pos: -21.5,-31.5 + parent: 2 + - uid: 5052 + components: + - type: Transform + pos: -21.5,-30.5 + parent: 2 + - uid: 5053 + components: + - type: Transform + pos: -21.5,-29.5 + parent: 2 + - uid: 5054 + components: + - type: Transform + pos: -21.5,-28.5 + parent: 2 + - uid: 5055 + components: + - type: Transform + pos: -21.5,-27.5 + parent: 2 + - uid: 5056 + components: + - type: Transform + pos: -22.5,-27.5 + parent: 2 + - uid: 5057 + components: + - type: Transform + pos: -22.5,-25.5 + parent: 2 + - uid: 5058 + components: + - type: Transform + pos: -22.5,-24.5 + parent: 2 + - uid: 5059 + components: + - type: Transform + pos: -22.5,-23.5 + parent: 2 + - uid: 5060 + components: + - type: Transform + pos: -22.5,-22.5 + parent: 2 + - uid: 5061 + components: + - type: Transform + pos: -22.5,-21.5 + parent: 2 + - uid: 5062 + components: + - type: Transform + pos: -22.5,-20.5 + parent: 2 + - uid: 5063 + components: + - type: Transform + pos: -22.5,-19.5 + parent: 2 + - uid: 5064 + components: + - type: Transform + pos: -22.5,-18.5 + parent: 2 + - uid: 5065 + components: + - type: Transform + pos: -22.5,-17.5 + parent: 2 + - uid: 5066 + components: + - type: Transform + pos: -21.5,-17.5 + parent: 2 + - uid: 5067 + components: + - type: Transform + pos: -20.5,-17.5 + parent: 2 + - uid: 5068 + components: + - type: Transform + pos: -29.5,15.5 + parent: 2 + - uid: 5069 + components: + - type: Transform + pos: -20.5,-16.5 + parent: 2 + - uid: 5070 + components: + - type: Transform + pos: -20.5,-15.5 + parent: 2 + - uid: 5071 + components: + - type: Transform + pos: -20.5,-14.5 + parent: 2 + - uid: 5072 + components: + - type: Transform + pos: -20.5,-13.5 + parent: 2 + - uid: 5073 + components: + - type: Transform + pos: -19.5,-13.5 + parent: 2 + - uid: 5074 + components: + - type: Transform + pos: -19.5,-12.5 + parent: 2 + - uid: 5075 + components: + - type: Transform + pos: -18.5,-12.5 + parent: 2 + - uid: 5076 + components: + - type: Transform + pos: -17.5,-12.5 + parent: 2 + - uid: 5077 + components: + - type: Transform + pos: -16.5,-12.5 + parent: 2 + - uid: 5078 + components: + - type: Transform + pos: -15.5,-12.5 + parent: 2 + - uid: 5079 + components: + - type: Transform + pos: -15.5,-13.5 + parent: 2 + - uid: 5080 + components: + - type: Transform + pos: -14.5,-13.5 + parent: 2 + - uid: 5081 + components: + - type: Transform + pos: -13.5,-13.5 + parent: 2 + - uid: 5082 + components: + - type: Transform + pos: -12.5,-13.5 + parent: 2 + - uid: 5083 + components: + - type: Transform + pos: -12.5,-14.5 + parent: 2 + - uid: 5084 + components: + - type: Transform + pos: -12.5,-15.5 + parent: 2 + - uid: 5085 + components: + - type: Transform + pos: -12.5,-16.5 + parent: 2 + - uid: 5086 + components: + - type: Transform + pos: -13.5,-16.5 + parent: 2 + - uid: 5087 + components: + - type: Transform + pos: -14.5,-16.5 + parent: 2 + - uid: 5088 + components: + - type: Transform + pos: -15.5,-16.5 + parent: 2 + - uid: 5089 + components: + - type: Transform + pos: -16.5,-16.5 + parent: 2 + - uid: 5090 + components: + - type: Transform + pos: -16.5,-15.5 + parent: 2 + - uid: 5091 + components: + - type: Transform + pos: 16.5,-4.5 + parent: 2 + - uid: 5092 + components: + - type: Transform + pos: -15.5,-11.5 + parent: 2 + - uid: 5093 + components: + - type: Transform + pos: -15.5,-10.5 + parent: 2 + - uid: 5094 + components: + - type: Transform + pos: -15.5,-9.5 + parent: 2 + - uid: 5095 + components: + - type: Transform + pos: -15.5,-8.5 + parent: 2 + - uid: 5096 + components: + - type: Transform + pos: -16.5,-8.5 + parent: 2 + - uid: 5097 + components: + - type: Transform + pos: -17.5,-8.5 + parent: 2 + - uid: 5098 + components: + - type: Transform + pos: -18.5,-8.5 + parent: 2 + - uid: 5099 + components: + - type: Transform + pos: -19.5,-8.5 + parent: 2 + - uid: 5100 + components: + - type: Transform + pos: -20.5,-8.5 + parent: 2 + - uid: 5101 + components: + - type: Transform + pos: 14.5,-3.5 + parent: 2 + - uid: 5102 + components: + - type: Transform + pos: 15.5,-3.5 + parent: 2 + - uid: 5103 + components: + - type: Transform + pos: 13.5,-2.5 + parent: 2 + - uid: 5104 + components: + - type: Transform + pos: 13.5,-3.5 + parent: 2 + - uid: 5105 + components: + - type: Transform + pos: 16.5,-3.5 + parent: 2 + - uid: 5106 + components: + - type: Transform + pos: 16.5,-5.5 + parent: 2 + - uid: 5107 + components: + - type: Transform + pos: 16.5,-6.5 + parent: 2 + - uid: 5108 + components: + - type: Transform + pos: 15.5,-6.5 + parent: 2 + - uid: 5109 + components: + - type: Transform + pos: 14.5,-6.5 + parent: 2 + - uid: 5110 + components: + - type: Transform + pos: 13.5,-6.5 + parent: 2 + - uid: 5111 + components: + - type: Transform + pos: 12.5,-6.5 + parent: 2 + - uid: 5112 + components: + - type: Transform + pos: 11.5,-6.5 + parent: 2 + - uid: 5113 + components: + - type: Transform + pos: 11.5,-7.5 + parent: 2 + - uid: 5114 + components: + - type: Transform + pos: 11.5,-8.5 + parent: 2 + - uid: 5115 + components: + - type: Transform + pos: 11.5,-9.5 + parent: 2 + - uid: 5116 + components: + - type: Transform + pos: 11.5,-10.5 + parent: 2 + - uid: 5117 + components: + - type: Transform + pos: 11.5,-11.5 + parent: 2 + - uid: 5118 + components: + - type: Transform + pos: 11.5,-12.5 + parent: 2 + - uid: 5119 + components: + - type: Transform + pos: 10.5,-12.5 + parent: 2 + - uid: 5120 + components: + - type: Transform + pos: 9.5,-12.5 + parent: 2 + - uid: 5121 + components: + - type: Transform + pos: 9.5,-13.5 + parent: 2 + - uid: 5122 + components: + - type: Transform + pos: 9.5,-14.5 + parent: 2 + - uid: 5123 + components: + - type: Transform + pos: 9.5,-15.5 + parent: 2 + - uid: 5124 + components: + - type: Transform + pos: 9.5,-16.5 + parent: 2 + - uid: 5125 + components: + - type: Transform + pos: 8.5,-16.5 + parent: 2 + - uid: 5126 + components: + - type: Transform + pos: 7.5,-16.5 + parent: 2 + - uid: 5127 + components: + - type: Transform + pos: 6.5,-16.5 + parent: 2 + - uid: 5128 + components: + - type: Transform + pos: 5.5,-16.5 + parent: 2 + - uid: 5129 + components: + - type: Transform + pos: 4.5,-16.5 + parent: 2 + - uid: 5130 + components: + - type: Transform + pos: 3.5,-16.5 + parent: 2 + - uid: 5131 + components: + - type: Transform + pos: 2.5,-16.5 + parent: 2 + - uid: 5132 + components: + - type: Transform + pos: 1.5,-16.5 + parent: 2 + - uid: 5133 + components: + - type: Transform + pos: 1.5,-17.5 + parent: 2 + - uid: 5134 + components: + - type: Transform + pos: 1.5,-18.5 + parent: 2 + - uid: 5135 + components: + - type: Transform + pos: 1.5,-19.5 + parent: 2 + - uid: 5136 + components: + - type: Transform + pos: 1.5,-20.5 + parent: 2 + - uid: 5137 + components: + - type: Transform + pos: 1.5,-21.5 + parent: 2 + - uid: 5138 + components: + - type: Transform + pos: 1.5,-22.5 + parent: 2 + - uid: 5139 + components: + - type: Transform + pos: 1.5,-23.5 + parent: 2 + - uid: 5140 + components: + - type: Transform + pos: 1.5,-24.5 + parent: 2 + - uid: 5141 + components: + - type: Transform + pos: 1.5,-25.5 + parent: 2 + - uid: 5142 + components: + - type: Transform + pos: 1.5,-26.5 + parent: 2 + - uid: 5143 + components: + - type: Transform + pos: 1.5,-27.5 + parent: 2 + - uid: 5144 + components: + - type: Transform + pos: 1.5,-28.5 + parent: 2 + - uid: 5145 + components: + - type: Transform + pos: 1.5,-29.5 + parent: 2 + - uid: 5146 + components: + - type: Transform + pos: 1.5,-30.5 + parent: 2 + - uid: 5147 + components: + - type: Transform + pos: 1.5,-31.5 + parent: 2 + - uid: 5148 + components: + - type: Transform + pos: 1.5,-32.5 + parent: 2 + - uid: 5149 + components: + - type: Transform + pos: 1.5,-33.5 + parent: 2 + - uid: 5150 + components: + - type: Transform + pos: 1.5,-34.5 + parent: 2 + - uid: 5151 + components: + - type: Transform + pos: 1.5,-35.5 + parent: 2 + - uid: 5152 + components: + - type: Transform + pos: 1.5,-36.5 + parent: 2 + - uid: 5153 + components: + - type: Transform + pos: 1.5,-37.5 + parent: 2 + - uid: 5154 + components: + - type: Transform + pos: 1.5,-38.5 + parent: 2 + - uid: 5155 + components: + - type: Transform + pos: 1.5,-39.5 + parent: 2 + - uid: 5156 + components: + - type: Transform + pos: 1.5,-40.5 + parent: 2 + - uid: 5157 + components: + - type: Transform + pos: 1.5,-41.5 + parent: 2 + - uid: 5158 + components: + - type: Transform + pos: 1.5,-42.5 + parent: 2 + - uid: 5159 + components: + - type: Transform + pos: 0.5,-42.5 + parent: 2 + - uid: 5160 + components: + - type: Transform + pos: -0.5,-42.5 + parent: 2 + - uid: 5161 + components: + - type: Transform + pos: -1.5,-42.5 + parent: 2 + - uid: 5162 + components: + - type: Transform + pos: -2.5,-42.5 + parent: 2 + - uid: 5163 + components: + - type: Transform + pos: -3.5,-42.5 + parent: 2 + - uid: 5164 + components: + - type: Transform + pos: -4.5,-42.5 + parent: 2 + - uid: 5165 + components: + - type: Transform + pos: -4.5,-44.5 + parent: 2 + - uid: 5166 + components: + - type: Transform + pos: -4.5,-45.5 + parent: 2 + - uid: 5167 + components: + - type: Transform + pos: -4.5,-46.5 + parent: 2 + - uid: 5168 + components: + - type: Transform + pos: -4.5,-47.5 + parent: 2 + - uid: 5169 + components: + - type: Transform + pos: -4.5,-48.5 + parent: 2 + - uid: 5170 + components: + - type: Transform + pos: -5.5,-48.5 + parent: 2 + - uid: 5171 + components: + - type: Transform + pos: -5.5,-49.5 + parent: 2 + - uid: 5172 + components: + - type: Transform + pos: -5.5,-50.5 + parent: 2 + - uid: 5173 + components: + - type: Transform + pos: 11.5,-47.5 + parent: 2 + - uid: 5174 + components: + - type: Transform + pos: 10.5,-47.5 + parent: 2 + - uid: 5175 + components: + - type: Transform + pos: 43.5,23.5 + parent: 2 + - uid: 5176 + components: + - type: Transform + pos: 43.5,24.5 + parent: 2 + - uid: 5177 + components: + - type: Transform + pos: 43.5,25.5 + parent: 2 + - uid: 5178 + components: + - type: Transform + pos: 43.5,26.5 + parent: 2 + - uid: 5179 + components: + - type: Transform + pos: 43.5,27.5 + parent: 2 + - uid: 5180 + components: + - type: Transform + pos: 42.5,27.5 + parent: 2 + - uid: 5181 + components: + - type: Transform + pos: 41.5,27.5 + parent: 2 + - uid: 5182 + components: + - type: Transform + pos: 40.5,27.5 + parent: 2 + - uid: 5183 + components: + - type: Transform + pos: 39.5,27.5 + parent: 2 + - uid: 5184 + components: + - type: Transform + pos: 38.5,27.5 + parent: 2 + - uid: 5185 + components: + - type: Transform + pos: 37.5,27.5 + parent: 2 + - uid: 5186 + components: + - type: Transform + pos: 36.5,27.5 + parent: 2 + - uid: 5187 + components: + - type: Transform + pos: 35.5,27.5 + parent: 2 + - uid: 5188 + components: + - type: Transform + pos: 34.5,27.5 + parent: 2 + - uid: 5189 + components: + - type: Transform + pos: 33.5,27.5 + parent: 2 + - uid: 5190 + components: + - type: Transform + pos: 32.5,27.5 + parent: 2 + - uid: 5191 + components: + - type: Transform + pos: 31.5,27.5 + parent: 2 + - uid: 5192 + components: + - type: Transform + pos: 30.5,27.5 + parent: 2 + - uid: 5193 + components: + - type: Transform + pos: 9.5,-47.5 + parent: 2 + - uid: 5194 + components: + - type: Transform + pos: 9.5,22.5 + parent: 2 + - uid: 5195 + components: + - type: Transform + pos: 7.5,-47.5 + parent: 2 + - uid: 5196 + components: + - type: Transform + pos: 12.5,21.5 + parent: 2 + - uid: 5197 + components: + - type: Transform + pos: 36.5,-44.5 + parent: 2 + - uid: 5198 + components: + - type: Transform + pos: -2.5,-46.5 + parent: 2 + - uid: 5199 + components: + - type: Transform + pos: -3.5,-46.5 + parent: 2 + - uid: 5200 + components: + - type: Transform + pos: 9.5,21.5 + parent: 2 + - uid: 5201 + components: + - type: Transform + pos: 10.5,21.5 + parent: 2 + - uid: 5202 + components: + - type: Transform + pos: 11.5,21.5 + parent: 2 + - uid: 5203 + components: + - type: Transform + pos: 13.5,21.5 + parent: 2 + - uid: 5204 + components: + - type: Transform + pos: 13.5,20.5 + parent: 2 + - uid: 5205 + components: + - type: Transform + pos: 13.5,19.5 + parent: 2 + - uid: 5206 + components: + - type: Transform + pos: 13.5,18.5 + parent: 2 + - uid: 5207 + components: + - type: Transform + pos: 13.5,17.5 + parent: 2 + - uid: 5208 + components: + - type: Transform + pos: 13.5,16.5 + parent: 2 + - uid: 5209 + components: + - type: Transform + pos: 13.5,15.5 + parent: 2 + - uid: 5210 + components: + - type: Transform + pos: 13.5,14.5 + parent: 2 + - uid: 5211 + components: + - type: Transform + pos: 13.5,13.5 + parent: 2 + - uid: 5212 + components: + - type: Transform + pos: 13.5,12.5 + parent: 2 + - uid: 5213 + components: + - type: Transform + pos: 13.5,11.5 + parent: 2 + - uid: 5214 + components: + - type: Transform + pos: 13.5,10.5 + parent: 2 + - uid: 5215 + components: + - type: Transform + pos: 13.5,9.5 + parent: 2 + - uid: 5216 + components: + - type: Transform + pos: 13.5,8.5 + parent: 2 + - uid: 5217 + components: + - type: Transform + pos: 13.5,7.5 + parent: 2 + - uid: 5218 + components: + - type: Transform + pos: 13.5,6.5 + parent: 2 + - uid: 5219 + components: + - type: Transform + pos: 13.5,5.5 + parent: 2 + - uid: 5220 + components: + - type: Transform + pos: 13.5,4.5 + parent: 2 + - uid: 5221 + components: + - type: Transform + pos: 14.5,4.5 + parent: 2 + - uid: 5222 + components: + - type: Transform + pos: 15.5,4.5 + parent: 2 + - uid: 5223 + components: + - type: Transform + pos: 15.5,3.5 + parent: 2 + - uid: 5224 + components: + - type: Transform + pos: 15.5,2.5 + parent: 2 + - uid: 5225 + components: + - type: Transform + pos: 15.5,1.5 + parent: 2 + - uid: 5226 + components: + - type: Transform + pos: 15.5,0.5 + parent: 2 + - uid: 5227 + components: + - type: Transform + pos: 16.5,0.5 + parent: 2 + - uid: 5228 + components: + - type: Transform + pos: 16.5,-0.5 + parent: 2 + - uid: 5229 + components: + - type: Transform + pos: 16.5,-1.5 + parent: 2 + - uid: 5230 + components: + - type: Transform + pos: 16.5,-2.5 + parent: 2 + - uid: 5231 + components: + - type: Transform + pos: 13.5,22.5 + parent: 2 + - uid: 5232 + components: + - type: Transform + pos: 13.5,23.5 + parent: 2 + - uid: 5233 + components: + - type: Transform + pos: 13.5,24.5 + parent: 2 + - uid: 5234 + components: + - type: Transform + pos: 13.5,25.5 + parent: 2 + - uid: 5235 + components: + - type: Transform + pos: 13.5,26.5 + parent: 2 + - uid: 5236 + components: + - type: Transform + pos: 14.5,26.5 + parent: 2 + - uid: 5237 + components: + - type: Transform + pos: 15.5,26.5 + parent: 2 + - uid: 5238 + components: + - type: Transform + pos: 16.5,26.5 + parent: 2 + - uid: 5239 + components: + - type: Transform + pos: 17.5,26.5 + parent: 2 + - uid: 5240 + components: + - type: Transform + pos: 18.5,26.5 + parent: 2 + - uid: 5241 + components: + - type: Transform + pos: 19.5,26.5 + parent: 2 + - uid: 5242 + components: + - type: Transform + pos: 20.5,26.5 + parent: 2 + - uid: 5243 + components: + - type: Transform + pos: 21.5,26.5 + parent: 2 + - uid: 5244 + components: + - type: Transform + pos: 22.5,26.5 + parent: 2 + - uid: 5245 + components: + - type: Transform + pos: 23.5,26.5 + parent: 2 + - uid: 5246 + components: + - type: Transform + pos: 24.5,26.5 + parent: 2 + - uid: 5247 + components: + - type: Transform + pos: 25.5,26.5 + parent: 2 + - uid: 5248 + components: + - type: Transform + pos: 26.5,26.5 + parent: 2 + - uid: 5249 + components: + - type: Transform + pos: 27.5,26.5 + parent: 2 + - uid: 5250 + components: + - type: Transform + pos: 28.5,26.5 + parent: 2 + - uid: 5251 + components: + - type: Transform + pos: 29.5,26.5 + parent: 2 + - uid: 5252 + components: + - type: Transform + pos: 30.5,26.5 + parent: 2 + - uid: 5253 + components: + - type: Transform + pos: -2.5,49.5 + parent: 2 + - uid: 5254 + components: + - type: Transform + pos: -2.5,48.5 + parent: 2 + - uid: 5255 + components: + - type: Transform + pos: -3.5,48.5 + parent: 2 + - uid: 5256 + components: + - type: Transform + pos: -3.5,47.5 + parent: 2 + - uid: 5257 + components: + - type: Transform + pos: -3.5,46.5 + parent: 2 + - uid: 5258 + components: + - type: Transform + pos: -3.5,45.5 + parent: 2 + - uid: 5259 + components: + - type: Transform + pos: -3.5,44.5 + parent: 2 + - uid: 5260 + components: + - type: Transform + pos: -3.5,43.5 + parent: 2 + - uid: 5261 + components: + - type: Transform + pos: -3.5,42.5 + parent: 2 + - uid: 5262 + components: + - type: Transform + pos: -2.5,42.5 + parent: 2 + - uid: 5263 + components: + - type: Transform + pos: -1.5,42.5 + parent: 2 + - uid: 5264 + components: + - type: Transform + pos: -0.5,42.5 + parent: 2 + - uid: 5265 + components: + - type: Transform + pos: 0.5,42.5 + parent: 2 + - uid: 5266 + components: + - type: Transform + pos: 4.5,31.5 + parent: 2 + - uid: 5267 + components: + - type: Transform + pos: 0.5,41.5 + parent: 2 + - uid: 5268 + components: + - type: Transform + pos: 0.5,40.5 + parent: 2 + - uid: 5269 + components: + - type: Transform + pos: 0.5,39.5 + parent: 2 + - uid: 5270 + components: + - type: Transform + pos: 0.5,38.5 + parent: 2 + - uid: 5271 + components: + - type: Transform + pos: 0.5,37.5 + parent: 2 + - uid: 5272 + components: + - type: Transform + pos: 0.5,36.5 + parent: 2 + - uid: 5273 + components: + - type: Transform + pos: 0.5,35.5 + parent: 2 + - uid: 5274 + components: + - type: Transform + pos: 0.5,34.5 + parent: 2 + - uid: 5275 + components: + - type: Transform + pos: 4.5,34.5 + parent: 2 + - uid: 5276 + components: + - type: Transform + pos: 3.5,34.5 + parent: 2 + - uid: 5277 + components: + - type: Transform + pos: 2.5,34.5 + parent: 2 + - uid: 5278 + components: + - type: Transform + pos: 1.5,34.5 + parent: 2 + - uid: 5279 + components: + - type: Transform + pos: 4.5,30.5 + parent: 2 + - uid: 5280 + components: + - type: Transform + pos: 4.5,29.5 + parent: 2 + - uid: 5281 + components: + - type: Transform + pos: 3.5,29.5 + parent: 2 + - uid: 5282 + components: + - type: Transform + pos: 2.5,29.5 + parent: 2 + - uid: 5283 + components: + - type: Transform + pos: 1.5,29.5 + parent: 2 + - uid: 5284 + components: + - type: Transform + pos: 0.5,33.5 + parent: 2 + - uid: 5285 + components: + - type: Transform + pos: 0.5,32.5 + parent: 2 + - uid: 5286 + components: + - type: Transform + pos: 0.5,31.5 + parent: 2 + - uid: 5287 + components: + - type: Transform + pos: 0.5,30.5 + parent: 2 + - uid: 5288 + components: + - type: Transform + pos: 0.5,29.5 + parent: 2 + - uid: 5289 + components: + - type: Transform + pos: 0.5,28.5 + parent: 2 + - uid: 5290 + components: + - type: Transform + pos: 0.5,27.5 + parent: 2 + - uid: 5291 + components: + - type: Transform + pos: 0.5,26.5 + parent: 2 + - uid: 5292 + components: + - type: Transform + pos: 0.5,25.5 + parent: 2 + - uid: 5293 + components: + - type: Transform + pos: 0.5,24.5 + parent: 2 + - uid: 5294 + components: + - type: Transform + pos: 0.5,23.5 + parent: 2 + - uid: 5295 + components: + - type: Transform + pos: 0.5,22.5 + parent: 2 + - uid: 5296 + components: + - type: Transform + pos: 0.5,21.5 + parent: 2 + - uid: 5297 + components: + - type: Transform + pos: 1.5,21.5 + parent: 2 + - uid: 5298 + components: + - type: Transform + pos: 2.5,21.5 + parent: 2 + - uid: 5299 + components: + - type: Transform + pos: 3.5,21.5 + parent: 2 + - uid: 5300 + components: + - type: Transform + pos: 4.5,21.5 + parent: 2 + - uid: 5301 + components: + - type: Transform + pos: 5.5,21.5 + parent: 2 + - uid: 5302 + components: + - type: Transform + pos: 6.5,21.5 + parent: 2 + - uid: 5303 + components: + - type: Transform + pos: 7.5,21.5 + parent: 2 + - uid: 5304 + components: + - type: Transform + pos: 8.5,21.5 + parent: 2 + - uid: 5305 + components: + - type: Transform + pos: -28.5,15.5 + parent: 2 + - uid: 5306 + components: + - type: Transform + pos: -27.5,15.5 + parent: 2 + - uid: 5307 + components: + - type: Transform + pos: -27.5,16.5 + parent: 2 + - uid: 5308 + components: + - type: Transform + pos: -26.5,16.5 + parent: 2 + - uid: 5309 + components: + - type: Transform + pos: -25.5,16.5 + parent: 2 + - uid: 5310 + components: + - type: Transform + pos: -24.5,16.5 + parent: 2 + - uid: 5311 + components: + - type: Transform + pos: -23.5,16.5 + parent: 2 + - uid: 5312 + components: + - type: Transform + pos: -22.5,16.5 + parent: 2 + - uid: 5313 + components: + - type: Transform + pos: -21.5,16.5 + parent: 2 + - uid: 5314 + components: + - type: Transform + pos: -20.5,16.5 + parent: 2 + - uid: 5315 + components: + - type: Transform + pos: -20.5,15.5 + parent: 2 + - uid: 5316 + components: + - type: Transform + pos: -20.5,14.5 + parent: 2 + - uid: 5317 + components: + - type: Transform + pos: -20.5,13.5 + parent: 2 + - uid: 5318 + components: + - type: Transform + pos: -20.5,12.5 + parent: 2 + - uid: 5319 + components: + - type: Transform + pos: -20.5,11.5 + parent: 2 + - uid: 5320 + components: + - type: Transform + pos: -20.5,10.5 + parent: 2 + - uid: 5321 + components: + - type: Transform + pos: -20.5,9.5 + parent: 2 + - uid: 5322 + components: + - type: Transform + pos: -20.5,8.5 + parent: 2 + - uid: 5323 + components: + - type: Transform + pos: -20.5,7.5 + parent: 2 + - uid: 5324 + components: + - type: Transform + pos: -20.5,6.5 + parent: 2 + - uid: 5325 + components: + - type: Transform + pos: -20.5,5.5 + parent: 2 + - uid: 5326 + components: + - type: Transform + pos: -20.5,4.5 + parent: 2 + - uid: 5327 + components: + - type: Transform + pos: -20.5,3.5 + parent: 2 + - uid: 5328 + components: + - type: Transform + pos: -20.5,2.5 + parent: 2 + - uid: 5329 + components: + - type: Transform + pos: -20.5,1.5 + parent: 2 + - uid: 5330 + components: + - type: Transform + pos: -20.5,0.5 + parent: 2 + - uid: 5331 + components: + - type: Transform + pos: -20.5,-0.5 + parent: 2 + - uid: 5332 + components: + - type: Transform + pos: -20.5,-1.5 + parent: 2 + - uid: 5333 + components: + - type: Transform + pos: -20.5,-2.5 + parent: 2 + - uid: 5334 + components: + - type: Transform + pos: -20.5,-3.5 + parent: 2 + - uid: 5335 + components: + - type: Transform + pos: -20.5,-4.5 + parent: 2 + - uid: 5336 + components: + - type: Transform + pos: -20.5,-5.5 + parent: 2 + - uid: 5337 + components: + - type: Transform + pos: -20.5,-6.5 + parent: 2 + - uid: 5338 + components: + - type: Transform + pos: -20.5,-7.5 + parent: 2 + - uid: 5339 + components: + - type: Transform + pos: -5.5,-56.5 + parent: 2 + - uid: 5340 + components: + - type: Transform + pos: -6.5,-16.5 + parent: 2 + - uid: 5341 + components: + - type: Transform + pos: -5.5,-57.5 + parent: 2 + - uid: 5342 + components: + - type: Transform + pos: -5.5,-58.5 + parent: 2 + - uid: 5343 + components: + - type: Transform + pos: 0.5,-59.5 + parent: 2 + - uid: 5344 + components: + - type: Transform + pos: 0.5,-58.5 + parent: 2 + - uid: 5345 + components: + - type: Transform + pos: 0.5,-57.5 + parent: 2 + - uid: 5346 + components: + - type: Transform + pos: 1.5,-57.5 + parent: 2 + - uid: 5347 + components: + - type: Transform + pos: 2.5,-57.5 + parent: 2 + - uid: 5348 + components: + - type: Transform + pos: 3.5,-57.5 + parent: 2 + - uid: 5349 + components: + - type: Transform + pos: 3.5,-56.5 + parent: 2 + - uid: 5350 + components: + - type: Transform + pos: 3.5,-55.5 + parent: 2 + - uid: 5351 + components: + - type: Transform + pos: 4.5,-55.5 + parent: 2 + - uid: 5352 + components: + - type: Transform + pos: 5.5,-55.5 + parent: 2 + - uid: 5353 + components: + - type: Transform + pos: 6.5,-55.5 + parent: 2 + - uid: 5354 + components: + - type: Transform + pos: 7.5,-55.5 + parent: 2 + - uid: 5355 + components: + - type: Transform + pos: 7.5,-54.5 + parent: 2 + - uid: 5356 + components: + - type: Transform + pos: 7.5,-53.5 + parent: 2 + - uid: 5357 + components: + - type: Transform + pos: 7.5,-52.5 + parent: 2 + - uid: 5358 + components: + - type: Transform + pos: 7.5,-51.5 + parent: 2 + - uid: 5359 + components: + - type: Transform + pos: 7.5,-50.5 + parent: 2 + - uid: 5360 + components: + - type: Transform + pos: 7.5,-49.5 + parent: 2 + - uid: 5361 + components: + - type: Transform + pos: 7.5,-48.5 + parent: 2 + - uid: 5362 + components: + - type: Transform + pos: 0.5,-17.5 + parent: 2 + - uid: 5363 + components: + - type: Transform + pos: -0.5,-17.5 + parent: 2 + - uid: 5364 + components: + - type: Transform + pos: -1.5,-17.5 + parent: 2 + - uid: 5365 + components: + - type: Transform + pos: -2.5,-17.5 + parent: 2 + - uid: 5366 + components: + - type: Transform + pos: -3.5,-17.5 + parent: 2 + - uid: 5367 + components: + - type: Transform + pos: -4.5,-17.5 + parent: 2 + - uid: 5368 + components: + - type: Transform + pos: -5.5,-17.5 + parent: 2 + - uid: 5369 + components: + - type: Transform + pos: -6.5,-17.5 + parent: 2 + - uid: 5370 + components: + - type: Transform + pos: -7.5,-16.5 + parent: 2 + - uid: 5371 + components: + - type: Transform + pos: -8.5,-16.5 + parent: 2 + - uid: 5372 + components: + - type: Transform + pos: -9.5,-16.5 + parent: 2 + - uid: 5373 + components: + - type: Transform + pos: -10.5,-16.5 + parent: 2 + - uid: 5374 + components: + - type: Transform + pos: -11.5,-16.5 + parent: 2 + - uid: 5375 + components: + - type: Transform + pos: 0.5,20.5 + parent: 2 + - uid: 5376 + components: + - type: Transform + pos: 0.5,19.5 + parent: 2 + - uid: 5377 + components: + - type: Transform + pos: -0.5,19.5 + parent: 2 + - uid: 5378 + components: + - type: Transform + pos: -1.5,19.5 + parent: 2 + - uid: 5379 + components: + - type: Transform + pos: -2.5,19.5 + parent: 2 + - uid: 5380 + components: + - type: Transform + pos: -3.5,19.5 + parent: 2 + - uid: 5381 + components: + - type: Transform + pos: -4.5,19.5 + parent: 2 + - uid: 5382 + components: + - type: Transform + pos: -5.5,19.5 + parent: 2 + - uid: 5383 + components: + - type: Transform + pos: -6.5,19.5 + parent: 2 + - uid: 5384 + components: + - type: Transform + pos: -7.5,19.5 + parent: 2 + - uid: 5385 + components: + - type: Transform + pos: -8.5,19.5 + parent: 2 + - uid: 5386 + components: + - type: Transform + pos: -9.5,19.5 + parent: 2 + - uid: 5387 + components: + - type: Transform + pos: -10.5,19.5 + parent: 2 + - uid: 5388 + components: + - type: Transform + pos: -11.5,19.5 + parent: 2 + - uid: 5389 + components: + - type: Transform + pos: -12.5,19.5 + parent: 2 + - uid: 5390 + components: + - type: Transform + pos: -13.5,19.5 + parent: 2 + - uid: 5391 + components: + - type: Transform + pos: -14.5,19.5 + parent: 2 + - uid: 5392 + components: + - type: Transform + pos: -15.5,19.5 + parent: 2 + - uid: 5393 + components: + - type: Transform + pos: -16.5,19.5 + parent: 2 + - uid: 5394 + components: + - type: Transform + pos: -16.5,18.5 + parent: 2 + - uid: 5395 + components: + - type: Transform + pos: -16.5,17.5 + parent: 2 + - uid: 5396 + components: + - type: Transform + pos: -16.5,16.5 + parent: 2 + - uid: 5397 + components: + - type: Transform + pos: -16.5,15.5 + parent: 2 + - uid: 5398 + components: + - type: Transform + pos: -17.5,15.5 + parent: 2 + - uid: 5399 + components: + - type: Transform + pos: -18.5,15.5 + parent: 2 + - uid: 5400 + components: + - type: Transform + pos: -19.5,15.5 + parent: 2 + - uid: 5401 + components: + - type: Transform + pos: 17.5,0.5 + parent: 2 + - uid: 5402 + components: + - type: Transform + pos: 18.5,0.5 + parent: 2 + - uid: 5403 + components: + - type: Transform + pos: 19.5,0.5 + parent: 2 + - uid: 5404 + components: + - type: Transform + pos: 20.5,0.5 + parent: 2 + - uid: 5405 + components: + - type: Transform + pos: 21.5,0.5 + parent: 2 + - uid: 5406 + components: + - type: Transform + pos: 22.5,0.5 + parent: 2 + - uid: 5407 + components: + - type: Transform + pos: 23.5,0.5 + parent: 2 + - uid: 5408 + components: + - type: Transform + pos: 24.5,0.5 + parent: 2 + - uid: 5409 + components: + - type: Transform + pos: 25.5,0.5 + parent: 2 + - uid: 5410 + components: + - type: Transform + pos: 26.5,0.5 + parent: 2 + - uid: 5411 + components: + - type: Transform + pos: 27.5,0.5 + parent: 2 + - uid: 5412 + components: + - type: Transform + pos: 28.5,0.5 + parent: 2 + - uid: 5413 + components: + - type: Transform + pos: 29.5,0.5 + parent: 2 + - uid: 5414 + components: + - type: Transform + pos: 29.5,1.5 + parent: 2 + - uid: 5415 + components: + - type: Transform + pos: 29.5,2.5 + parent: 2 + - uid: 5416 + components: + - type: Transform + pos: 29.5,3.5 + parent: 2 + - uid: 5417 + components: + - type: Transform + pos: 29.5,4.5 + parent: 2 + - uid: 5418 + components: + - type: Transform + pos: 29.5,5.5 + parent: 2 + - uid: 5419 + components: + - type: Transform + pos: 29.5,6.5 + parent: 2 + - uid: 5420 + components: + - type: Transform + pos: 29.5,7.5 + parent: 2 + - uid: 5421 + components: + - type: Transform + pos: 29.5,8.5 + parent: 2 + - uid: 5422 + components: + - type: Transform + pos: 29.5,9.5 + parent: 2 + - uid: 5423 + components: + - type: Transform + pos: 29.5,10.5 + parent: 2 + - uid: 5424 + components: + - type: Transform + pos: 29.5,11.5 + parent: 2 + - uid: 5425 + components: + - type: Transform + pos: 29.5,12.5 + parent: 2 + - uid: 5426 + components: + - type: Transform + pos: 29.5,13.5 + parent: 2 + - uid: 5427 + components: + - type: Transform + pos: 29.5,14.5 + parent: 2 + - uid: 5428 + components: + - type: Transform + pos: 29.5,15.5 + parent: 2 + - uid: 5429 + components: + - type: Transform + pos: 29.5,16.5 + parent: 2 + - uid: 5430 + components: + - type: Transform + pos: 30.5,16.5 + parent: 2 + - uid: 5431 + components: + - type: Transform + pos: 31.5,16.5 + parent: 2 + - uid: 5432 + components: + - type: Transform + pos: 32.5,16.5 + parent: 2 + - uid: 5433 + components: + - type: Transform + pos: 33.5,16.5 + parent: 2 + - uid: 5434 + components: + - type: Transform + pos: 34.5,16.5 + parent: 2 + - uid: 5435 + components: + - type: Transform + pos: 35.5,16.5 + parent: 2 + - uid: 5436 + components: + - type: Transform + pos: 36.5,16.5 + parent: 2 + - uid: 5437 + components: + - type: Transform + pos: 37.5,16.5 + parent: 2 + - uid: 5438 + components: + - type: Transform + pos: 37.5,17.5 + parent: 2 + - uid: 5439 + components: + - type: Transform + pos: 37.5,18.5 + parent: 2 + - uid: 5440 + components: + - type: Transform + pos: 38.5,18.5 + parent: 2 + - uid: 5441 + components: + - type: Transform + pos: 39.5,18.5 + parent: 2 + - uid: 5442 + components: + - type: Transform + pos: 40.5,18.5 + parent: 2 + - uid: 5443 + components: + - type: Transform + pos: 41.5,18.5 + parent: 2 + - uid: 5444 + components: + - type: Transform + pos: 42.5,18.5 + parent: 2 + - uid: 5445 + components: + - type: Transform + pos: 42.5,19.5 + parent: 2 + - uid: 5446 + components: + - type: Transform + pos: 42.5,20.5 + parent: 2 + - uid: 5447 + components: + - type: Transform + pos: 42.5,21.5 + parent: 2 + - uid: 5448 + components: + - type: Transform + pos: 42.5,22.5 + parent: 2 + - uid: 5449 + components: + - type: Transform + pos: 43.5,22.5 + parent: 2 + - uid: 5450 + components: + - type: Transform + pos: 30.5,-45.5 + parent: 2 + - uid: 5451 + components: + - type: Transform + pos: 30.5,-44.5 + parent: 2 + - uid: 5452 + components: + - type: Transform + pos: 30.5,-43.5 + parent: 2 + - uid: 5453 + components: + - type: Transform + pos: 30.5,-42.5 + parent: 2 + - uid: 5454 + components: + - type: Transform + pos: 30.5,-41.5 + parent: 2 + - uid: 5455 + components: + - type: Transform + pos: 30.5,-40.5 + parent: 2 + - uid: 5456 + components: + - type: Transform + pos: 29.5,-40.5 + parent: 2 + - uid: 5457 + components: + - type: Transform + pos: 35.5,-44.5 + parent: 2 + - uid: 5458 + components: + - type: Transform + pos: 35.5,-27.5 + parent: 2 + - uid: 5459 + components: + - type: Transform + pos: 9.5,-35.5 + parent: 2 + - uid: 5460 + components: + - type: Transform + pos: 10.5,-35.5 + parent: 2 + - uid: 5461 + components: + - type: Transform + pos: 10.5,-34.5 + parent: 2 + - uid: 5462 + components: + - type: Transform + pos: -19.5,-56.5 + parent: 2 + - uid: 5463 + components: + - type: Transform + pos: -19.5,-57.5 + parent: 2 + - uid: 5464 + components: + - type: Transform + pos: -19.5,-58.5 + parent: 2 + - uid: 5465 + components: + - type: Transform + pos: -18.5,-56.5 + parent: 2 + - uid: 5466 + components: + - type: Transform + pos: 22.5,-3.5 + parent: 2 + - uid: 5467 + components: + - type: Transform + pos: 23.5,-3.5 + parent: 2 + - uid: 5468 + components: + - type: Transform + pos: 23.5,-2.5 + parent: 2 + - uid: 5469 + components: + - type: Transform + pos: 23.5,-1.5 + parent: 2 + - uid: 5470 + components: + - type: Transform + pos: 23.5,-0.5 + parent: 2 + - uid: 5471 + components: + - type: Transform + pos: 17.5,-3.5 + parent: 2 + - uid: 5472 + components: + - type: Transform + pos: 18.5,-3.5 + parent: 2 + - uid: 5473 + components: + - type: Transform + pos: 19.5,-3.5 + parent: 2 + - uid: 5474 + components: + - type: Transform + pos: 20.5,-3.5 + parent: 2 + - uid: 5475 + components: + - type: Transform + pos: 21.5,-3.5 + parent: 2 + - uid: 5476 + components: + - type: Transform + pos: -14.5,-9.5 + parent: 2 + - uid: 5477 + components: + - type: Transform + pos: -13.5,-9.5 + parent: 2 + - uid: 5478 + components: + - type: Transform + pos: -12.5,-9.5 + parent: 2 + - uid: 5479 + components: + - type: Transform + pos: -11.5,-9.5 + parent: 2 + - uid: 5480 + components: + - type: Transform + pos: -11.5,-10.5 + parent: 2 + - uid: 5481 + components: + - type: Transform + pos: -11.5,-11.5 + parent: 2 + - uid: 5482 + components: + - type: Transform + pos: -11.5,-12.5 + parent: 2 + - uid: 5483 + components: + - type: Transform + pos: -11.5,-13.5 + parent: 2 + - uid: 5484 + components: + - type: Transform + pos: -21.5,-8.5 + parent: 2 + - uid: 5485 + components: + - type: Transform + pos: -22.5,-8.5 + parent: 2 + - uid: 5486 + components: + - type: Transform + pos: -23.5,-8.5 + parent: 2 + - uid: 5487 + components: + - type: Transform + pos: -24.5,-8.5 + parent: 2 + - uid: 5488 + components: + - type: Transform + pos: -25.5,-8.5 + parent: 2 + - uid: 5489 + components: + - type: Transform + pos: -26.5,-8.5 + parent: 2 + - uid: 5490 + components: + - type: Transform + pos: -27.5,-8.5 + parent: 2 + - uid: 5491 + components: + - type: Transform + pos: -28.5,-8.5 + parent: 2 + - uid: 5492 + components: + - type: Transform + pos: -29.5,-8.5 + parent: 2 + - uid: 5493 + components: + - type: Transform + pos: -30.5,-8.5 + parent: 2 + - uid: 5494 + components: + - type: Transform + pos: -31.5,-8.5 + parent: 2 + - uid: 5495 + components: + - type: Transform + pos: -32.5,-8.5 + parent: 2 + - uid: 5496 + components: + - type: Transform + pos: -33.5,-8.5 + parent: 2 + - uid: 5497 + components: + - type: Transform + pos: -34.5,-8.5 + parent: 2 + - uid: 5498 + components: + - type: Transform + pos: -35.5,-8.5 + parent: 2 + - uid: 5499 + components: + - type: Transform + pos: -36.5,-8.5 + parent: 2 + - uid: 5500 + components: + - type: Transform + pos: -37.5,-8.5 + parent: 2 + - uid: 5501 + components: + - type: Transform + pos: -37.5,-9.5 + parent: 2 + - uid: 5502 + components: + - type: Transform + pos: -37.5,-10.5 + parent: 2 + - uid: 5503 + components: + - type: Transform + pos: -37.5,-11.5 + parent: 2 + - uid: 5504 + components: + - type: Transform + pos: -37.5,-12.5 + parent: 2 + - uid: 5505 + components: + - type: Transform + pos: -37.5,-13.5 + parent: 2 + - uid: 5506 + components: + - type: Transform + pos: -37.5,-14.5 + parent: 2 + - uid: 5507 + components: + - type: Transform + pos: -37.5,-15.5 + parent: 2 + - uid: 5508 + components: + - type: Transform + pos: -37.5,-16.5 + parent: 2 + - uid: 5509 + components: + - type: Transform + pos: -37.5,-17.5 + parent: 2 + - uid: 5510 + components: + - type: Transform + pos: -37.5,-18.5 + parent: 2 + - uid: 5511 + components: + - type: Transform + pos: -37.5,-19.5 + parent: 2 + - uid: 5512 + components: + - type: Transform + pos: -37.5,-20.5 + parent: 2 + - uid: 5513 + components: + - type: Transform + pos: -37.5,-21.5 + parent: 2 + - uid: 5514 + components: + - type: Transform + pos: -37.5,-22.5 + parent: 2 + - uid: 5515 + components: + - type: Transform + pos: -37.5,-23.5 + parent: 2 + - uid: 5516 + components: + - type: Transform + pos: -37.5,-24.5 + parent: 2 + - uid: 5517 + components: + - type: Transform + pos: -38.5,-24.5 + parent: 2 + - uid: 5518 + components: + - type: Transform + pos: -38.5,-25.5 + parent: 2 + - uid: 5519 + components: + - type: Transform + pos: -38.5,-26.5 + parent: 2 + - uid: 5520 + components: + - type: Transform + pos: -38.5,-27.5 + parent: 2 + - uid: 5521 + components: + - type: Transform + pos: -38.5,-28.5 + parent: 2 + - uid: 5522 + components: + - type: Transform + pos: -38.5,-29.5 + parent: 2 + - uid: 5523 + components: + - type: Transform + pos: -38.5,-30.5 + parent: 2 + - uid: 5524 + components: + - type: Transform + pos: -38.5,-31.5 + parent: 2 + - uid: 5525 + components: + - type: Transform + pos: -38.5,-32.5 + parent: 2 + - uid: 5526 + components: + - type: Transform + pos: -38.5,-33.5 + parent: 2 + - uid: 5527 + components: + - type: Transform + pos: -38.5,-34.5 + parent: 2 + - uid: 5528 + components: + - type: Transform + pos: -38.5,-35.5 + parent: 2 + - uid: 5529 + components: + - type: Transform + pos: -38.5,-36.5 + parent: 2 + - uid: 5530 + components: + - type: Transform + pos: -38.5,-37.5 + parent: 2 + - uid: 5531 + components: + - type: Transform + pos: -37.5,-37.5 + parent: 2 + - uid: 5532 + components: + - type: Transform + pos: -36.5,-37.5 + parent: 2 + - uid: 5533 + components: + - type: Transform + pos: -35.5,-37.5 + parent: 2 + - uid: 5534 + components: + - type: Transform + pos: -34.5,-37.5 + parent: 2 + - uid: 5535 + components: + - type: Transform + pos: -33.5,-37.5 + parent: 2 + - uid: 5536 + components: + - type: Transform + pos: -33.5,-38.5 + parent: 2 + - uid: 5537 + components: + - type: Transform + pos: -33.5,-39.5 + parent: 2 + - uid: 5538 + components: + - type: Transform + pos: -33.5,-40.5 + parent: 2 + - uid: 5539 + components: + - type: Transform + pos: -33.5,-41.5 + parent: 2 + - uid: 5540 + components: + - type: Transform + pos: -33.5,-42.5 + parent: 2 + - uid: 5541 + components: + - type: Transform + pos: -33.5,-43.5 + parent: 2 + - uid: 5542 + components: + - type: Transform + pos: -32.5,-43.5 + parent: 2 + - uid: 5543 + components: + - type: Transform + pos: -31.5,-43.5 + parent: 2 + - uid: 5544 + components: + - type: Transform + pos: -30.5,-43.5 + parent: 2 + - uid: 5545 + components: + - type: Transform + pos: -29.5,-43.5 + parent: 2 + - uid: 5546 + components: + - type: Transform + pos: -28.5,-43.5 + parent: 2 + - uid: 5547 + components: + - type: Transform + pos: -27.5,-43.5 + parent: 2 + - uid: 5548 + components: + - type: Transform + pos: -26.5,-43.5 + parent: 2 + - uid: 5549 + components: + - type: Transform + pos: -25.5,-43.5 + parent: 2 + - uid: 5550 + components: + - type: Transform + pos: -24.5,-43.5 + parent: 2 + - uid: 5551 + components: + - type: Transform + pos: -23.5,-43.5 + parent: 2 + - uid: 5552 + components: + - type: Transform + pos: -22.5,-43.5 + parent: 2 + - uid: 5553 + components: + - type: Transform + pos: -24.5,17.5 + parent: 2 + - uid: 5554 + components: + - type: Transform + pos: -24.5,18.5 + parent: 2 + - uid: 5555 + components: + - type: Transform + pos: -24.5,19.5 + parent: 2 + - uid: 5556 + components: + - type: Transform + pos: -24.5,20.5 + parent: 2 + - uid: 5557 + components: + - type: Transform + pos: -25.5,20.5 + parent: 2 + - uid: 5558 + components: + - type: Transform + pos: -26.5,20.5 + parent: 2 + - uid: 5559 + components: + - type: Transform + pos: -27.5,20.5 + parent: 2 + - uid: 5560 + components: + - type: Transform + pos: -27.5,21.5 + parent: 2 + - uid: 5561 + components: + - type: Transform + pos: -27.5,22.5 + parent: 2 + - uid: 5562 + components: + - type: Transform + pos: -27.5,23.5 + parent: 2 + - uid: 5563 + components: + - type: Transform + pos: -27.5,24.5 + parent: 2 + - uid: 5564 + components: + - type: Transform + pos: -27.5,25.5 + parent: 2 + - uid: 5565 + components: + - type: Transform + pos: -27.5,26.5 + parent: 2 + - uid: 5566 + components: + - type: Transform + pos: -27.5,27.5 + parent: 2 + - uid: 5567 + components: + - type: Transform + pos: -27.5,28.5 + parent: 2 + - uid: 5568 + components: + - type: Transform + pos: -27.5,29.5 + parent: 2 + - uid: 5569 + components: + - type: Transform + pos: -26.5,29.5 + parent: 2 + - uid: 5570 + components: + - type: Transform + pos: -25.5,29.5 + parent: 2 + - uid: 5571 + components: + - type: Transform + pos: -24.5,29.5 + parent: 2 + - uid: 5572 + components: + - type: Transform + pos: -23.5,29.5 + parent: 2 + - uid: 5573 + components: + - type: Transform + pos: -23.5,28.5 + parent: 2 + - uid: 5574 + components: + - type: Transform + pos: -22.5,28.5 + parent: 2 + - uid: 5575 + components: + - type: Transform + pos: -21.5,28.5 + parent: 2 + - uid: 5576 + components: + - type: Transform + pos: -20.5,28.5 + parent: 2 + - uid: 5577 + components: + - type: Transform + pos: -19.5,28.5 + parent: 2 + - uid: 5578 + components: + - type: Transform + pos: -18.5,28.5 + parent: 2 + - uid: 5579 + components: + - type: Transform + pos: -17.5,28.5 + parent: 2 + - uid: 5580 + components: + - type: Transform + pos: -16.5,28.5 + parent: 2 + - uid: 5581 + components: + - type: Transform + pos: -15.5,28.5 + parent: 2 + - uid: 5582 + components: + - type: Transform + pos: -15.5,27.5 + parent: 2 + - uid: 5583 + components: + - type: Transform + pos: -15.5,26.5 + parent: 2 + - uid: 5584 + components: + - type: Transform + pos: -15.5,25.5 + parent: 2 + - uid: 5585 + components: + - type: Transform + pos: -15.5,24.5 + parent: 2 + - uid: 5586 + components: + - type: Transform + pos: -15.5,23.5 + parent: 2 + - uid: 5587 + components: + - type: Transform + pos: -15.5,22.5 + parent: 2 + - uid: 5588 + components: + - type: Transform + pos: -15.5,21.5 + parent: 2 + - uid: 5589 + components: + - type: Transform + pos: -15.5,20.5 + parent: 2 + - uid: 5590 + components: + - type: Transform + pos: 0.5,18.5 + parent: 2 + - uid: 5591 + components: + - type: Transform + pos: 0.5,17.5 + parent: 2 + - uid: 5592 + components: + - type: Transform + pos: 0.5,16.5 + parent: 2 + - uid: 5593 + components: + - type: Transform + pos: 0.5,15.5 + parent: 2 + - uid: 5594 + components: + - type: Transform + pos: 0.5,14.5 + parent: 2 + - uid: 5595 + components: + - type: Transform + pos: 0.5,13.5 + parent: 2 + - uid: 5596 + components: + - type: Transform + pos: 0.5,12.5 + parent: 2 + - uid: 5597 + components: + - type: Transform + pos: 0.5,11.5 + parent: 2 + - uid: 5598 + components: + - type: Transform + pos: 0.5,10.5 + parent: 2 + - uid: 5599 + components: + - type: Transform + pos: 0.5,9.5 + parent: 2 + - uid: 5600 + components: + - type: Transform + pos: 0.5,8.5 + parent: 2 + - uid: 5601 + components: + - type: Transform + pos: 0.5,7.5 + parent: 2 + - uid: 5602 + components: + - type: Transform + pos: 0.5,6.5 + parent: 2 + - uid: 5603 + components: + - type: Transform + pos: 0.5,5.5 + parent: 2 + - uid: 5604 + components: + - type: Transform + pos: 0.5,4.5 + parent: 2 + - uid: 5605 + components: + - type: Transform + pos: 0.5,3.5 + parent: 2 + - uid: 5606 + components: + - type: Transform + pos: 0.5,2.5 + parent: 2 + - uid: 5607 + components: + - type: Transform + pos: 0.5,1.5 + parent: 2 + - uid: 5608 + components: + - type: Transform + pos: 0.5,0.5 + parent: 2 + - uid: 5609 + components: + - type: Transform + pos: 0.5,-0.5 + parent: 2 + - uid: 5610 + components: + - type: Transform + pos: 0.5,-1.5 + parent: 2 + - uid: 5611 + components: + - type: Transform + pos: 0.5,-2.5 + parent: 2 + - uid: 5612 + components: + - type: Transform + pos: 0.5,-3.5 + parent: 2 + - uid: 5613 + components: + - type: Transform + pos: 0.5,-4.5 + parent: 2 + - uid: 5614 + components: + - type: Transform + pos: 0.5,-5.5 + parent: 2 + - uid: 5615 + components: + - type: Transform + pos: 0.5,-6.5 + parent: 2 + - uid: 5616 + components: + - type: Transform + pos: 0.5,-7.5 + parent: 2 + - uid: 5617 + components: + - type: Transform + pos: 0.5,-8.5 + parent: 2 + - uid: 5618 + components: + - type: Transform + pos: 0.5,-9.5 + parent: 2 + - uid: 5619 + components: + - type: Transform + pos: 0.5,-10.5 + parent: 2 + - uid: 5620 + components: + - type: Transform + pos: 0.5,-11.5 + parent: 2 + - uid: 5621 + components: + - type: Transform + pos: 0.5,-12.5 + parent: 2 + - uid: 5622 + components: + - type: Transform + pos: 0.5,-13.5 + parent: 2 + - uid: 5623 + components: + - type: Transform + pos: 0.5,-14.5 + parent: 2 + - uid: 5624 + components: + - type: Transform + pos: 0.5,-15.5 + parent: 2 + - uid: 5625 + components: + - type: Transform + pos: 1.5,-15.5 + parent: 2 + - uid: 5626 + components: + - type: Transform + pos: -0.5,0.5 + parent: 2 + - uid: 5627 + components: + - type: Transform + pos: -1.5,0.5 + parent: 2 + - uid: 5628 + components: + - type: Transform + pos: -2.5,0.5 + parent: 2 + - uid: 5629 + components: + - type: Transform + pos: -3.5,0.5 + parent: 2 + - uid: 5630 + components: + - type: Transform + pos: -4.5,0.5 + parent: 2 + - uid: 5631 + components: + - type: Transform + pos: -5.5,0.5 + parent: 2 + - uid: 5632 + components: + - type: Transform + pos: -6.5,0.5 + parent: 2 + - uid: 5633 + components: + - type: Transform + pos: -7.5,0.5 + parent: 2 + - uid: 5634 + components: + - type: Transform + pos: -8.5,0.5 + parent: 2 + - uid: 5635 + components: + - type: Transform + pos: -9.5,0.5 + parent: 2 + - uid: 5636 + components: + - type: Transform + pos: -10.5,0.5 + parent: 2 + - uid: 5637 + components: + - type: Transform + pos: -11.5,0.5 + parent: 2 + - uid: 5638 + components: + - type: Transform + pos: -12.5,0.5 + parent: 2 + - uid: 5639 + components: + - type: Transform + pos: -13.5,0.5 + parent: 2 + - uid: 5640 + components: + - type: Transform + pos: -14.5,0.5 + parent: 2 + - uid: 5641 + components: + - type: Transform + pos: -15.5,0.5 + parent: 2 + - uid: 5642 + components: + - type: Transform + pos: -16.5,0.5 + parent: 2 + - uid: 5643 + components: + - type: Transform + pos: -17.5,0.5 + parent: 2 + - uid: 5644 + components: + - type: Transform + pos: -18.5,0.5 + parent: 2 + - uid: 5645 + components: + - type: Transform + pos: -19.5,0.5 + parent: 2 + - uid: 5646 + components: + - type: Transform + pos: 1.5,1.5 + parent: 2 + - uid: 5647 + components: + - type: Transform + pos: 2.5,1.5 + parent: 2 + - uid: 5648 + components: + - type: Transform + pos: 3.5,1.5 + parent: 2 + - uid: 5649 + components: + - type: Transform + pos: 4.5,1.5 + parent: 2 + - uid: 5650 + components: + - type: Transform + pos: 5.5,1.5 + parent: 2 + - uid: 5651 + components: + - type: Transform + pos: 6.5,1.5 + parent: 2 + - uid: 5652 + components: + - type: Transform + pos: 7.5,1.5 + parent: 2 + - uid: 5653 + components: + - type: Transform + pos: 8.5,1.5 + parent: 2 + - uid: 5654 + components: + - type: Transform + pos: 9.5,1.5 + parent: 2 + - uid: 5655 + components: + - type: Transform + pos: 10.5,1.5 + parent: 2 + - uid: 5656 + components: + - type: Transform + pos: 11.5,1.5 + parent: 2 + - uid: 5657 + components: + - type: Transform + pos: 12.5,1.5 + parent: 2 + - uid: 5658 + components: + - type: Transform + pos: 13.5,1.5 + parent: 2 + - uid: 5659 + components: + - type: Transform + pos: 14.5,1.5 + parent: 2 + - uid: 5660 + components: + - type: Transform + pos: -1.5,37.5 + parent: 2 + - uid: 5661 + components: + - type: Transform + pos: -0.5,37.5 + parent: 2 + - uid: 5662 + components: + - type: Transform + pos: -2.5,37.5 + parent: 2 + - uid: 5663 + components: + - type: Transform + pos: -3.5,37.5 + parent: 2 + - uid: 5664 + components: + - type: Transform + pos: -3.5,36.5 + parent: 2 + - uid: 5665 + components: + - type: Transform + pos: -3.5,35.5 + parent: 2 + - uid: 5666 + components: + - type: Transform + pos: -3.5,34.5 + parent: 2 + - uid: 5667 + components: + - type: Transform + pos: -3.5,33.5 + parent: 2 + - uid: 5668 + components: + - type: Transform + pos: -3.5,32.5 + parent: 2 + - uid: 5669 + components: + - type: Transform + pos: -3.5,31.5 + parent: 2 + - uid: 5670 + components: + - type: Transform + pos: -3.5,30.5 + parent: 2 + - uid: 5671 + components: + - type: Transform + pos: -3.5,29.5 + parent: 2 + - uid: 5672 + components: + - type: Transform + pos: -3.5,28.5 + parent: 2 + - uid: 5673 + components: + - type: Transform + pos: -4.5,28.5 + parent: 2 + - uid: 5674 + components: + - type: Transform + pos: -5.5,28.5 + parent: 2 + - uid: 5675 + components: + - type: Transform + pos: -6.5,28.5 + parent: 2 + - uid: 5676 + components: + - type: Transform + pos: -7.5,28.5 + parent: 2 + - uid: 5677 + components: + - type: Transform + pos: -8.5,28.5 + parent: 2 + - uid: 5678 + components: + - type: Transform + pos: -9.5,28.5 + parent: 2 + - uid: 5679 + components: + - type: Transform + pos: -10.5,28.5 + parent: 2 + - uid: 5680 + components: + - type: Transform + pos: -11.5,28.5 + parent: 2 + - uid: 5681 + components: + - type: Transform + pos: -12.5,28.5 + parent: 2 + - uid: 5682 + components: + - type: Transform + pos: -13.5,28.5 + parent: 2 + - uid: 5683 + components: + - type: Transform + pos: -14.5,28.5 + parent: 2 + - uid: 5684 + components: + - type: Transform + pos: -4.5,77.5 + parent: 2 + - uid: 5685 + components: + - type: Transform + pos: -3.5,76.5 + parent: 2 + - uid: 5686 + components: + - type: Transform + pos: -5.5,76.5 + parent: 2 + - uid: 5687 + components: + - type: Transform + pos: -6.5,76.5 + parent: 2 + - uid: 5688 + components: + - type: Transform + pos: -4.5,75.5 + parent: 2 + - uid: 5689 + components: + - type: Transform + pos: -4.5,74.5 + parent: 2 + - uid: 5690 + components: + - type: Transform + pos: -4.5,73.5 + parent: 2 + - uid: 5691 + components: + - type: Transform + pos: -4.5,72.5 + parent: 2 + - uid: 5692 + components: + - type: Transform + pos: -4.5,71.5 + parent: 2 + - uid: 5693 + components: + - type: Transform + pos: -4.5,70.5 + parent: 2 + - uid: 5694 + components: + - type: Transform + pos: -4.5,69.5 + parent: 2 + - uid: 5695 + components: + - type: Transform + pos: -4.5,68.5 + parent: 2 + - uid: 5696 + components: + - type: Transform + pos: -4.5,62.5 + parent: 2 + - uid: 5697 + components: + - type: Transform + pos: -4.5,61.5 + parent: 2 + - uid: 5698 + components: + - type: Transform + pos: -4.5,60.5 + parent: 2 + - uid: 5699 + components: + - type: Transform + pos: -4.5,59.5 + parent: 2 + - uid: 5700 + components: + - type: Transform + pos: -3.5,59.5 + parent: 2 + - uid: 5701 + components: + - type: Transform + pos: -2.5,59.5 + parent: 2 + - uid: 5702 + components: + - type: Transform + pos: -1.5,59.5 + parent: 2 + - uid: 5703 + components: + - type: Transform + pos: -0.5,59.5 + parent: 2 + - uid: 5704 + components: + - type: Transform + pos: -0.5,58.5 + parent: 2 + - uid: 5705 + components: + - type: Transform + pos: -0.5,57.5 + parent: 2 + - uid: 5706 + components: + - type: Transform + pos: -0.5,56.5 + parent: 2 + - uid: 5707 + components: + - type: Transform + pos: -0.5,55.5 + parent: 2 + - uid: 5708 + components: + - type: Transform + pos: -0.5,54.5 + parent: 2 + - uid: 5709 + components: + - type: Transform + pos: -0.5,53.5 + parent: 2 + - uid: 5710 + components: + - type: Transform + pos: -0.5,52.5 + parent: 2 + - uid: 5711 + components: + - type: Transform + pos: -0.5,51.5 + parent: 2 + - uid: 5712 + components: + - type: Transform + pos: -0.5,50.5 + parent: 2 + - uid: 5713 + components: + - type: Transform + pos: -0.5,49.5 + parent: 2 + - uid: 5714 + components: + - type: Transform + pos: -0.5,48.5 + parent: 2 + - uid: 5715 + components: + - type: Transform + pos: -0.5,47.5 + parent: 2 + - uid: 5716 + components: + - type: Transform + pos: -0.5,46.5 + parent: 2 + - uid: 5717 + components: + - type: Transform + pos: -0.5,45.5 + parent: 2 + - uid: 5718 + components: + - type: Transform + pos: -0.5,44.5 + parent: 2 + - uid: 5719 + components: + - type: Transform + pos: -0.5,43.5 + parent: 2 + - uid: 5720 + components: + - type: Transform + pos: -3.5,70.5 + parent: 2 + - uid: 5721 + components: + - type: Transform + pos: -2.5,70.5 + parent: 2 + - uid: 5722 + components: + - type: Transform + pos: -1.5,70.5 + parent: 2 + - uid: 5723 + components: + - type: Transform + pos: -0.5,70.5 + parent: 2 + - uid: 5724 + components: + - type: Transform + pos: 0.5,70.5 + parent: 2 + - uid: 5725 + components: + - type: Transform + pos: 1.5,70.5 + parent: 2 + - uid: 5726 + components: + - type: Transform + pos: 2.5,70.5 + parent: 2 + - uid: 5727 + components: + - type: Transform + pos: 3.5,70.5 + parent: 2 + - uid: 5728 + components: + - type: Transform + pos: 4.5,70.5 + parent: 2 + - uid: 5729 + components: + - type: Transform + pos: 5.5,70.5 + parent: 2 + - uid: 5730 + components: + - type: Transform + pos: 6.5,70.5 + parent: 2 + - uid: 5731 + components: + - type: Transform + pos: 6.5,69.5 + parent: 2 + - uid: 5732 + components: + - type: Transform + pos: 6.5,68.5 + parent: 2 + - uid: 5733 + components: + - type: Transform + pos: 6.5,62.5 + parent: 2 + - uid: 5734 + components: + - type: Transform + pos: 6.5,61.5 + parent: 2 + - uid: 5735 + components: + - type: Transform + pos: 6.5,60.5 + parent: 2 + - uid: 5736 + components: + - type: Transform + pos: 6.5,59.5 + parent: 2 + - uid: 5737 + components: + - type: Transform + pos: 5.5,59.5 + parent: 2 + - uid: 5738 + components: + - type: Transform + pos: 4.5,59.5 + parent: 2 + - uid: 5739 + components: + - type: Transform + pos: 3.5,59.5 + parent: 2 + - uid: 5740 + components: + - type: Transform + pos: 2.5,59.5 + parent: 2 + - uid: 5741 + components: + - type: Transform + pos: 1.5,59.5 + parent: 2 + - uid: 5742 + components: + - type: Transform + pos: 0.5,59.5 + parent: 2 + - uid: 5743 + components: + - type: Transform + pos: 2.5,58.5 + parent: 2 + - uid: 5744 + components: + - type: Transform + pos: 2.5,57.5 + parent: 2 + - uid: 5745 + components: + - type: Transform + pos: 2.5,56.5 + parent: 2 + - uid: 5746 + components: + - type: Transform + pos: 2.5,55.5 + parent: 2 + - uid: 5747 + components: + - type: Transform + pos: 2.5,54.5 + parent: 2 + - uid: 5748 + components: + - type: Transform + pos: 2.5,53.5 + parent: 2 + - uid: 5749 + components: + - type: Transform + pos: 2.5,52.5 + parent: 2 + - uid: 5750 + components: + - type: Transform + pos: 2.5,51.5 + parent: 2 + - uid: 5751 + components: + - type: Transform + pos: 2.5,50.5 + parent: 2 + - uid: 5752 + components: + - type: Transform + pos: 2.5,49.5 + parent: 2 + - uid: 5753 + components: + - type: Transform + pos: 2.5,48.5 + parent: 2 + - uid: 5754 + components: + - type: Transform + pos: 2.5,47.5 + parent: 2 + - uid: 5755 + components: + - type: Transform + pos: 2.5,46.5 + parent: 2 + - uid: 5756 + components: + - type: Transform + pos: 2.5,45.5 + parent: 2 + - uid: 5757 + components: + - type: Transform + pos: 2.5,44.5 + parent: 2 + - uid: 5758 + components: + - type: Transform + pos: 2.5,43.5 + parent: 2 + - uid: 5759 + components: + - type: Transform + pos: 2.5,42.5 + parent: 2 + - uid: 5760 + components: + - type: Transform + pos: 1.5,42.5 + parent: 2 + - uid: 5761 + components: + - type: Transform + pos: -4.5,79.5 + parent: 2 + - uid: 5762 + components: + - type: Transform + pos: -4.5,80.5 + parent: 2 + - uid: 5763 + components: + - type: Transform + pos: -4.5,81.5 + parent: 2 + - uid: 5764 + components: + - type: Transform + pos: -4.5,82.5 + parent: 2 + - uid: 5765 + components: + - type: Transform + pos: -4.5,83.5 + parent: 2 + - uid: 5766 + components: + - type: Transform + pos: -4.5,84.5 + parent: 2 + - uid: 5767 + components: + - type: Transform + pos: -3.5,84.5 + parent: 2 + - uid: 5768 + components: + - type: Transform + pos: -2.5,84.5 + parent: 2 + - uid: 5769 + components: + - type: Transform + pos: -1.5,84.5 + parent: 2 + - uid: 5770 + components: + - type: Transform + pos: -0.5,84.5 + parent: 2 + - uid: 5771 + components: + - type: Transform + pos: 0.5,84.5 + parent: 2 + - uid: 5772 + components: + - type: Transform + pos: 1.5,84.5 + parent: 2 + - uid: 5773 + components: + - type: Transform + pos: 2.5,84.5 + parent: 2 + - uid: 5774 + components: + - type: Transform + pos: 3.5,84.5 + parent: 2 + - uid: 5775 + components: + - type: Transform + pos: 4.5,84.5 + parent: 2 + - uid: 5776 + components: + - type: Transform + pos: 5.5,84.5 + parent: 2 + - uid: 5777 + components: + - type: Transform + pos: 6.5,84.5 + parent: 2 + - uid: 5778 + components: + - type: Transform + pos: 7.5,84.5 + parent: 2 + - uid: 5779 + components: + - type: Transform + pos: 7.5,83.5 + parent: 2 + - uid: 5780 + components: + - type: Transform + pos: 7.5,82.5 + parent: 2 + - uid: 5781 + components: + - type: Transform + pos: 7.5,81.5 + parent: 2 + - uid: 5782 + components: + - type: Transform + pos: 7.5,80.5 + parent: 2 + - uid: 5783 + components: + - type: Transform + pos: 7.5,79.5 + parent: 2 + - uid: 5784 + components: + - type: Transform + pos: 7.5,78.5 + parent: 2 + - uid: 5785 + components: + - type: Transform + pos: 7.5,77.5 + parent: 2 + - uid: 5786 + components: + - type: Transform + pos: 7.5,76.5 + parent: 2 + - uid: 5787 + components: + - type: Transform + pos: 7.5,75.5 + parent: 2 + - uid: 5788 + components: + - type: Transform + pos: 7.5,74.5 + parent: 2 + - uid: 5789 + components: + - type: Transform + pos: 7.5,73.5 + parent: 2 + - uid: 5790 + components: + - type: Transform + pos: 7.5,72.5 + parent: 2 + - uid: 5791 + components: + - type: Transform + pos: 7.5,71.5 + parent: 2 + - uid: 5792 + components: + - type: Transform + pos: 7.5,70.5 + parent: 2 + - uid: 5793 + components: + - type: Transform + pos: -0.5,60.5 + parent: 2 + - uid: 5794 + components: + - type: Transform + pos: -0.5,61.5 + parent: 2 + - uid: 5795 + components: + - type: Transform + pos: -1.5,61.5 + parent: 2 + - uid: 5796 + components: + - type: Transform + pos: -2.5,-47.5 + parent: 2 + - uid: 5797 + components: + - type: Transform + pos: 8.5,-52.5 + parent: 2 + - uid: 5798 + components: + - type: Transform + pos: 9.5,-52.5 + parent: 2 + - uid: 5799 + components: + - type: Transform + pos: 10.5,-52.5 + parent: 2 + - uid: 5800 + components: + - type: Transform + pos: 11.5,-52.5 + parent: 2 + - uid: 5801 + components: + - type: Transform + pos: 11.5,-53.5 + parent: 2 + - uid: 5803 + components: + - type: Transform + pos: 6.5,29.5 + parent: 2 + - uid: 5804 + components: + - type: Transform + pos: 7.5,29.5 + parent: 2 + - uid: 5805 + components: + - type: Transform + pos: 7.5,30.5 + parent: 2 + - uid: 5806 + components: + - type: Transform + pos: 7.5,31.5 + parent: 2 + - uid: 5807 + components: + - type: Transform + pos: 6.5,31.5 + parent: 2 + - uid: 5808 + components: + - type: Transform + pos: 8.5,31.5 + parent: 2 + - uid: 5809 + components: + - type: Transform + pos: 7.5,32.5 + parent: 2 + - uid: 5810 + components: + - type: Transform + pos: 8.5,30.5 + parent: 2 + - uid: 5811 + components: + - type: Transform + pos: 6.5,30.5 + parent: 2 + - uid: 5812 + components: + - type: Transform + pos: 6.5,32.5 + parent: 2 + - uid: 5813 + components: + - type: Transform + pos: 8.5,32.5 + parent: 2 + - uid: 5814 + components: + - type: Transform + pos: 8.5,29.5 + parent: 2 + - uid: 5815 + components: + - type: Transform + pos: -5.5,77.5 + parent: 2 + - uid: 5816 + components: + - type: Transform + pos: -34.5,-56.5 + parent: 2 + - uid: 5817 + components: + - type: Transform + pos: -33.5,-56.5 + parent: 2 + - uid: 5818 + components: + - type: Transform + pos: -35.5,-56.5 + parent: 2 + - uid: 5819 + components: + - type: Transform + pos: 8.5,-35.5 + parent: 2 + - uid: 5820 + components: + - type: Transform + pos: 7.5,-35.5 + parent: 2 + - uid: 5821 + components: + - type: Transform + pos: 3.5,-35.5 + parent: 2 + - uid: 5822 + components: + - type: Transform + pos: 30.5,-46.5 + parent: 2 + - uid: 5823 + components: + - type: Transform + pos: 32.5,-47.5 + parent: 2 + - uid: 5824 + components: + - type: Transform + pos: 31.5,-46.5 + parent: 2 + - uid: 5825 + components: + - type: Transform + pos: 32.5,-49.5 + parent: 2 + - uid: 5826 + components: + - type: Transform + pos: 37.5,-45.5 + parent: 2 + - uid: 5827 + components: + - type: Transform + pos: 37.5,-46.5 + parent: 2 + - uid: 5828 + components: + - type: Transform + pos: 38.5,-46.5 + parent: 2 + - uid: 5829 + components: + - type: Transform + pos: 39.5,-46.5 + parent: 2 + - uid: 5830 + components: + - type: Transform + pos: 40.5,-46.5 + parent: 2 + - uid: 5831 + components: + - type: Transform + pos: 41.5,-46.5 + parent: 2 + - uid: 5832 + components: + - type: Transform + pos: 5.5,-35.5 + parent: 2 + - uid: 5833 + components: + - type: Transform + pos: -17.5,-56.5 + parent: 2 + - uid: 5834 + components: + - type: Transform + pos: 4.5,-35.5 + parent: 2 + - uid: 5835 + components: + - type: Transform + pos: -19.5,-55.5 + parent: 2 + - uid: 5836 + components: + - type: Transform + pos: -18.5,-55.5 + parent: 2 + - uid: 5837 + components: + - type: Transform + pos: -17.5,-55.5 + parent: 2 + - uid: 5838 + components: + - type: Transform + pos: -15.5,-55.5 + parent: 2 + - uid: 5839 + components: + - type: Transform + pos: -14.5,-58.5 + parent: 2 + - uid: 5840 + components: + - type: Transform + pos: -13.5,-58.5 + parent: 2 + - uid: 5841 + components: + - type: Transform + pos: -15.5,-58.5 + parent: 2 + - uid: 5842 + components: + - type: Transform + pos: -18.5,-58.5 + parent: 2 + - uid: 5843 + components: + - type: Transform + pos: -17.5,-58.5 + parent: 2 + - uid: 5844 + components: + - type: Transform + pos: -16.5,-58.5 + parent: 2 + - uid: 5845 + components: + - type: Transform + pos: 6.5,-35.5 + parent: 2 + - uid: 5846 + components: + - type: Transform + pos: -15.5,-54.5 + parent: 2 + - uid: 5847 + components: + - type: Transform + pos: -15.5,-53.5 + parent: 2 + - uid: 5848 + components: + - type: Transform + pos: 45.5,23.5 + parent: 2 + - uid: 5849 + components: + - type: Transform + pos: 46.5,22.5 + parent: 2 + - uid: 5850 + components: + - type: Transform + pos: -4.5,77.5 + parent: 2 + - uid: 5851 + components: + - type: Transform + pos: 4.5,32.5 + parent: 2 + - uid: 5852 + components: + - type: Transform + pos: 8.5,34.5 + parent: 2 + - uid: 5853 + components: + - type: Transform + pos: 8.5,35.5 + parent: 2 + - uid: 5854 + components: + - type: Transform + pos: -3.5,76.5 + parent: 2 + - uid: 5855 + components: + - type: Transform + pos: -3.5,77.5 + parent: 2 + - uid: 5856 + components: + - type: Transform + pos: -3.5,75.5 + parent: 2 + - uid: 5857 + components: + - type: Transform + pos: -4.5,78.5 + parent: 2 + - uid: 5858 + components: + - type: Transform + pos: 60.5,20.5 + parent: 2 + - uid: 5859 + components: + - type: Transform + pos: 62.5,18.5 + parent: 2 + - uid: 5860 + components: + - type: Transform + pos: 62.5,19.5 + parent: 2 + - uid: 5861 + components: + - type: Transform + pos: 62.5,20.5 + parent: 2 + - uid: 5862 + components: + - type: Transform + pos: 62.5,21.5 + parent: 2 + - uid: 5863 + components: + - type: Transform + pos: 64.5,21.5 + parent: 2 + - uid: 5864 + components: + - type: Transform + pos: 64.5,20.5 + parent: 2 + - uid: 5865 + components: + - type: Transform + pos: 64.5,19.5 + parent: 2 + - uid: 5866 + components: + - type: Transform + pos: 64.5,18.5 + parent: 2 + - uid: 5867 + components: + - type: Transform + pos: 66.5,18.5 + parent: 2 + - uid: 5868 + components: + - type: Transform + pos: 66.5,19.5 + parent: 2 + - uid: 5869 + components: + - type: Transform + pos: 66.5,20.5 + parent: 2 + - uid: 5870 + components: + - type: Transform + pos: 66.5,21.5 + parent: 2 + - uid: 5871 + components: + - type: Transform + pos: 68.5,21.5 + parent: 2 + - uid: 5872 + components: + - type: Transform + pos: 68.5,20.5 + parent: 2 + - uid: 5873 + components: + - type: Transform + pos: 68.5,19.5 + parent: 2 + - uid: 5874 + components: + - type: Transform + pos: 70.5,19.5 + parent: 2 + - uid: 5875 + components: + - type: Transform + pos: 70.5,20.5 + parent: 2 + - uid: 5876 + components: + - type: Transform + pos: 70.5,21.5 + parent: 2 + - uid: 5877 + components: + - type: Transform + pos: 72.5,21.5 + parent: 2 + - uid: 5878 + components: + - type: Transform + pos: 72.5,20.5 + parent: 2 + - uid: 5879 + components: + - type: Transform + pos: 72.5,19.5 + parent: 2 + - uid: 5880 + components: + - type: Transform + pos: 74.5,19.5 + parent: 2 + - uid: 5881 + components: + - type: Transform + pos: 74.5,20.5 + parent: 2 + - uid: 5882 + components: + - type: Transform + pos: 74.5,21.5 + parent: 2 + - uid: 5883 + components: + - type: Transform + pos: 70.5,25.5 + parent: 2 + - uid: 5884 + components: + - type: Transform + pos: 74.5,25.5 + parent: 2 + - uid: 5885 + components: + - type: Transform + pos: 74.5,26.5 + parent: 2 + - uid: 5886 + components: + - type: Transform + pos: 74.5,27.5 + parent: 2 + - uid: 5887 + components: + - type: Transform + pos: 72.5,27.5 + parent: 2 + - uid: 5888 + components: + - type: Transform + pos: 72.5,26.5 + parent: 2 + - uid: 5889 + components: + - type: Transform + pos: 72.5,25.5 + parent: 2 + - uid: 5890 + components: + - type: Transform + pos: 70.5,26.5 + parent: 2 + - uid: 5891 + components: + - type: Transform + pos: 70.5,27.5 + parent: 2 + - uid: 5892 + components: + - type: Transform + pos: 68.5,27.5 + parent: 2 + - uid: 5893 + components: + - type: Transform + pos: 68.5,26.5 + parent: 2 + - uid: 5894 + components: + - type: Transform + pos: 68.5,25.5 + parent: 2 + - uid: 5895 + components: + - type: Transform + pos: 66.5,25.5 + parent: 2 + - uid: 5896 + components: + - type: Transform + pos: 66.5,26.5 + parent: 2 + - uid: 5897 + components: + - type: Transform + pos: 66.5,27.5 + parent: 2 + - uid: 5898 + components: + - type: Transform + pos: 66.5,28.5 + parent: 2 + - uid: 5899 + components: + - type: Transform + pos: 64.5,28.5 + parent: 2 + - uid: 5900 + components: + - type: Transform + pos: 64.5,27.5 + parent: 2 + - uid: 5901 + components: + - type: Transform + pos: 64.5,26.5 + parent: 2 + - uid: 5902 + components: + - type: Transform + pos: 64.5,25.5 + parent: 2 + - uid: 5903 + components: + - type: Transform + pos: 62.5,25.5 + parent: 2 + - uid: 5904 + components: + - type: Transform + pos: 62.5,26.5 + parent: 2 + - uid: 5905 + components: + - type: Transform + pos: 62.5,27.5 + parent: 2 + - uid: 5906 + components: + - type: Transform + pos: 62.5,28.5 + parent: 2 + - uid: 5907 + components: + - type: Transform + pos: 62.5,29.5 + parent: 2 + - uid: 5908 + components: + - type: Transform + pos: 60.5,29.5 + parent: 2 + - uid: 5909 + components: + - type: Transform + pos: 60.5,28.5 + parent: 2 + - uid: 5910 + components: + - type: Transform + pos: 60.5,27.5 + parent: 2 + - uid: 5911 + components: + - type: Transform + pos: 60.5,26.5 + parent: 2 + - uid: 5912 + components: + - type: Transform + pos: 60.5,25.5 + parent: 2 + - uid: 5913 + components: + - type: Transform + pos: -33.5,-54.5 + parent: 2 + - uid: 5914 + components: + - type: Transform + pos: 10.5,-53.5 + parent: 2 + - uid: 5915 + components: + - type: Transform + pos: 45.5,22.5 + parent: 2 + - uid: 5916 + components: + - type: Transform + pos: -7.5,-60.5 + parent: 2 + - uid: 5917 + components: + - type: Transform + pos: -6.5,-60.5 + parent: 2 + - uid: 5918 + components: + - type: Transform + pos: -5.5,-60.5 + parent: 2 + - uid: 5919 + components: + - type: Transform + pos: -4.5,-60.5 + parent: 2 + - uid: 5920 + components: + - type: Transform + pos: -3.5,-60.5 + parent: 2 + - uid: 5921 + components: + - type: Transform + pos: -2.5,-60.5 + parent: 2 + - uid: 5922 + components: + - type: Transform + pos: -1.5,-60.5 + parent: 2 + - uid: 5923 + components: + - type: Transform + pos: -0.5,-60.5 + parent: 2 + - uid: 5924 + components: + - type: Transform + pos: 0.5,-60.5 + parent: 2 + - uid: 5925 + components: + - type: Transform + pos: -3.5,-58.5 + parent: 2 + - uid: 5926 + components: + - type: Transform + pos: -3.5,-57.5 + parent: 2 + - uid: 5927 + components: + - type: Transform + pos: -3.5,-56.5 + parent: 2 + - uid: 5928 + components: + - type: Transform + pos: -2.5,-58.5 + parent: 2 + - uid: 5929 + components: + - type: Transform + pos: -2.5,-57.5 + parent: 2 + - uid: 5930 + components: + - type: Transform + pos: -2.5,-56.5 + parent: 2 + - uid: 5931 + components: + - type: Transform + pos: -1.5,-58.5 + parent: 2 + - uid: 5932 + components: + - type: Transform + pos: -1.5,-57.5 + parent: 2 + - uid: 5933 + components: + - type: Transform + pos: -1.5,-56.5 + parent: 2 + - uid: 5934 + components: + - type: Transform + pos: -0.5,-58.5 + parent: 2 + - uid: 5935 + components: + - type: Transform + pos: -0.5,-57.5 + parent: 2 + - uid: 5936 + components: + - type: Transform + pos: -0.5,-56.5 + parent: 2 + - uid: 5937 + components: + - type: Transform + pos: -6.5,-58.5 + parent: 2 + - uid: 5938 + components: + - type: Transform + pos: -6.5,-57.5 + parent: 2 + - uid: 5939 + components: + - type: Transform + pos: -6.5,-56.5 + parent: 2 + - uid: 5941 + components: + - type: Transform + pos: 32.5,-46.5 + parent: 2 + - uid: 5942 + components: + - type: Transform + pos: 34.5,-45.5 + parent: 2 + - uid: 5943 + components: + - type: Transform + pos: 36.5,-45.5 + parent: 2 + - uid: 5944 + components: + - type: Transform + pos: 33.5,-49.5 + parent: 2 + - uid: 5945 + components: + - type: Transform + pos: 34.5,-49.5 + parent: 2 + - uid: 5946 + components: + - type: Transform + pos: 34.5,-47.5 + parent: 2 + - uid: 5950 + components: + - type: Transform + pos: 32.5,-48.5 + parent: 2 + - uid: 5951 + components: + - type: Transform + pos: -17.5,-54.5 + parent: 2 + - uid: 5952 + components: + - type: Transform + pos: -18.5,-54.5 + parent: 2 + - uid: 5953 + components: + - type: Transform + pos: -19.5,-54.5 + parent: 2 + - uid: 5954 + components: + - type: Transform + pos: 28.5,-40.5 + parent: 2 + - uid: 5955 + components: + - type: Transform + pos: 27.5,-40.5 + parent: 2 + - uid: 5956 + components: + - type: Transform + pos: 26.5,-40.5 + parent: 2 + - uid: 5957 + components: + - type: Transform + pos: 25.5,-40.5 + parent: 2 + - uid: 5958 + components: + - type: Transform + pos: 24.5,-40.5 + parent: 2 + - uid: 5959 + components: + - type: Transform + pos: 23.5,-40.5 + parent: 2 + - uid: 5960 + components: + - type: Transform + pos: 22.5,-40.5 + parent: 2 + - uid: 5961 + components: + - type: Transform + pos: 21.5,-40.5 + parent: 2 + - uid: 5962 + components: + - type: Transform + pos: 20.5,-40.5 + parent: 2 + - uid: 5963 + components: + - type: Transform + pos: 19.5,-40.5 + parent: 2 + - uid: 5964 + components: + - type: Transform + pos: 18.5,-40.5 + parent: 2 + - uid: 5965 + components: + - type: Transform + pos: 17.5,-40.5 + parent: 2 + - uid: 5966 + components: + - type: Transform + pos: 16.5,-40.5 + parent: 2 + - uid: 5967 + components: + - type: Transform + pos: 15.5,-40.5 + parent: 2 + - uid: 5968 + components: + - type: Transform + pos: 14.5,-40.5 + parent: 2 + - uid: 5969 + components: + - type: Transform + pos: 13.5,-40.5 + parent: 2 + - uid: 5970 + components: + - type: Transform + pos: 12.5,-40.5 + parent: 2 + - uid: 5971 + components: + - type: Transform + pos: 11.5,-40.5 + parent: 2 + - uid: 5972 + components: + - type: Transform + pos: 10.5,-40.5 + parent: 2 + - uid: 5973 + components: + - type: Transform + pos: 9.5,-40.5 + parent: 2 + - uid: 5974 + components: + - type: Transform + pos: 8.5,-40.5 + parent: 2 + - uid: 5975 + components: + - type: Transform + pos: 7.5,-40.5 + parent: 2 + - uid: 5976 + components: + - type: Transform + pos: 6.5,-40.5 + parent: 2 + - uid: 5977 + components: + - type: Transform + pos: 4.5,-40.5 + parent: 2 + - uid: 5978 + components: + - type: Transform + pos: 5.5,-40.5 + parent: 2 + - uid: 5979 + components: + - type: Transform + pos: 6.5,-43.5 + parent: 2 + - uid: 5980 + components: + - type: Transform + pos: 6.5,-44.5 + parent: 2 + - uid: 5981 + components: + - type: Transform + pos: 6.5,-45.5 + parent: 2 + - uid: 5982 + components: + - type: Transform + pos: 6.5,-46.5 + parent: 2 + - uid: 5983 + components: + - type: Transform + pos: 7.5,-46.5 + parent: 2 + - uid: 5984 + components: + - type: Transform + pos: 34.5,-44.5 + parent: 2 + - uid: 5985 + components: + - type: Transform + pos: 3.5,-40.5 + parent: 2 + - uid: 5986 + components: + - type: Transform + pos: 2.5,-40.5 + parent: 2 + - uid: 5987 + components: + - type: Transform + pos: 44.5,25.5 + parent: 2 + - uid: 5988 + components: + - type: Transform + pos: 45.5,25.5 + parent: 2 + - uid: 5989 + components: + - type: Transform + pos: 45.5,24.5 + parent: 2 + - uid: 5990 + components: + - type: Transform + pos: 46.5,21.5 + parent: 2 + - uid: 5991 + components: + - type: Transform + pos: -32.5,-56.5 + parent: 2 + - uid: 5992 + components: + - type: Transform + pos: -1.5,-69.5 + parent: 2 + - uid: 5993 + components: + - type: Transform + pos: -1.5,-70.5 + parent: 2 + - uid: 5994 + components: + - type: Transform + pos: 2.5,-68.5 + parent: 2 + - uid: 5995 + components: + - type: Transform + pos: 2.5,-70.5 + parent: 2 + - uid: 5996 + components: + - type: Transform + pos: 2.5,-69.5 + parent: 2 + - uid: 5997 + components: + - type: Transform + pos: -2.5,-68.5 + parent: 2 + - uid: 5998 + components: + - type: Transform + pos: -5.5,-66.5 + parent: 2 + - uid: 5999 + components: + - type: Transform + pos: -5.5,-65.5 + parent: 2 + - uid: 6000 + components: + - type: Transform + pos: -1.5,-68.5 + parent: 2 + - uid: 6001 + components: + - type: Transform + pos: -4.5,-69.5 + parent: 2 + - uid: 6002 + components: + - type: Transform + pos: -5.5,-67.5 + parent: 2 + - uid: 6003 + components: + - type: Transform + pos: 3.5,-68.5 + parent: 2 + - uid: 6004 + components: + - type: Transform + pos: 3.5,-69.5 + parent: 2 + - uid: 6005 + components: + - type: Transform + pos: 3.5,-70.5 + parent: 2 + - uid: 6006 + components: + - type: Transform + pos: -2.5,-69.5 + parent: 2 + - uid: 6007 + components: + - type: Transform + pos: -3.5,-69.5 + parent: 2 + - uid: 6008 + components: + - type: Transform + pos: -5.5,-69.5 + parent: 2 + - uid: 6009 + components: + - type: Transform + pos: -2.5,-70.5 + parent: 2 + - uid: 6010 + components: + - type: Transform + pos: -5.5,-68.5 + parent: 2 + - uid: 6011 + components: + - type: Transform + pos: -5.5,-64.5 + parent: 2 + - uid: 6012 + components: + - type: Transform + pos: -5.5,-63.5 + parent: 2 + - uid: 6013 + components: + - type: Transform + pos: -5.5,-62.5 + parent: 2 + - uid: 6014 + components: + - type: Transform + pos: -4.5,-62.5 + parent: 2 + - uid: 6015 + components: + - type: Transform + pos: -3.5,-62.5 + parent: 2 + - uid: 6016 + components: + - type: Transform + pos: -3.5,-61.5 + parent: 2 + - uid: 6017 + components: + - type: Transform + pos: -2.5,-62.5 + parent: 2 + - uid: 6018 + components: + - type: Transform + pos: -1.5,-62.5 + parent: 2 + - uid: 6019 + components: + - type: Transform + pos: -0.5,-62.5 + parent: 2 + - uid: 6020 + components: + - type: Transform + pos: 0.5,-62.5 + parent: 2 + - uid: 6021 + components: + - type: Transform + pos: 1.5,-62.5 + parent: 2 + - uid: 6022 + components: + - type: Transform + pos: 2.5,-62.5 + parent: 2 + - uid: 6023 + components: + - type: Transform + pos: 3.5,-62.5 + parent: 2 + - uid: 6024 + components: + - type: Transform + pos: 4.5,-62.5 + parent: 2 + - uid: 6025 + components: + - type: Transform + pos: 5.5,-62.5 + parent: 2 + - uid: 6026 + components: + - type: Transform + pos: 6.5,-62.5 + parent: 2 + - uid: 6027 + components: + - type: Transform + pos: 7.5,-62.5 + parent: 2 + - uid: 6028 + components: + - type: Transform + pos: 7.5,-63.5 + parent: 2 + - uid: 6029 + components: + - type: Transform + pos: 7.5,-64.5 + parent: 2 + - uid: 6030 + components: + - type: Transform + pos: 7.5,-65.5 + parent: 2 + - uid: 6031 + components: + - type: Transform + pos: 7.5,-66.5 + parent: 2 + - uid: 6032 + components: + - type: Transform + pos: 7.5,-67.5 + parent: 2 + - uid: 6033 + components: + - type: Transform + pos: 7.5,-68.5 + parent: 2 + - uid: 6034 + components: + - type: Transform + pos: 7.5,-69.5 + parent: 2 + - uid: 6035 + components: + - type: Transform + pos: 6.5,-69.5 + parent: 2 + - uid: 6036 + components: + - type: Transform + pos: 5.5,-69.5 + parent: 2 + - uid: 6037 + components: + - type: Transform + pos: 4.5,-69.5 + parent: 2 + - uid: 7208 + components: + - type: Transform + pos: 34.5,-46.5 + parent: 2 + - uid: 16303 + components: + - type: Transform + pos: 34.5,-48.5 + parent: 2 + - uid: 23837 + components: + - type: Transform + pos: 1.5,85.5 + parent: 2 + - uid: 23838 + components: + - type: Transform + pos: 1.5,86.5 + parent: 2 + - uid: 23839 + components: + - type: Transform + pos: 0.5,86.5 + parent: 2 + - uid: 23840 + components: + - type: Transform + pos: -0.5,86.5 + parent: 2 + - uid: 23841 + components: + - type: Transform + pos: 2.5,86.5 + parent: 2 + - uid: 23842 + components: + - type: Transform + pos: 3.5,86.5 + parent: 2 + - uid: 23843 + components: + - type: Transform + pos: -3.5,69.5 + parent: 2 + - uid: 23844 + components: + - type: Transform + pos: -3.5,68.5 + parent: 2 + - uid: 23845 + components: + - type: Transform + pos: -2.5,68.5 + parent: 2 + - uid: 23846 + components: + - type: Transform + pos: 5.5,69.5 + parent: 2 + - uid: 23847 + components: + - type: Transform + pos: 5.5,68.5 + parent: 2 + - uid: 23848 + components: + - type: Transform + pos: 1.5,71.5 + parent: 2 + - uid: 23849 + components: + - type: Transform + pos: 1.5,72.5 + parent: 2 + - uid: 23850 + components: + - type: Transform + pos: 1.5,73.5 + parent: 2 + - uid: 23851 + components: + - type: Transform + pos: 2.5,73.5 + parent: 2 + - uid: 23852 + components: + - type: Transform + pos: 0.5,73.5 + parent: 2 + - uid: 23853 + components: + - type: Transform + pos: 0.5,83.5 + parent: 2 + - uid: 23854 + components: + - type: Transform + pos: 0.5,82.5 + parent: 2 + - uid: 23855 + components: + - type: Transform + pos: 0.5,81.5 + parent: 2 + - uid: 23856 + components: + - type: Transform + pos: 2.5,83.5 + parent: 2 + - uid: 23857 + components: + - type: Transform + pos: 2.5,82.5 + parent: 2 + - uid: 23858 + components: + - type: Transform + pos: 2.5,81.5 + parent: 2 +- proto: CableHVStack + entities: + - uid: 6038 + components: + - type: Transform + pos: -42.541927,-61.48547 + parent: 2 + - uid: 6039 + components: + - type: Transform + pos: 61.45578,23.48829 + parent: 2 + - uid: 6040 + components: + - type: Transform + pos: 14.413268,-51.292038 + parent: 2 + - uid: 6041 + components: + - type: Transform + pos: -14.307997,-55.534718 + parent: 2 + - uid: 6042 + components: + - type: Transform + pos: 22.526024,-45.412346 + parent: 2 + - uid: 6043 + components: + - type: Transform + pos: 43.45204,-57.567394 + parent: 2 + - uid: 6044 + components: + - type: Transform + pos: -3.6150723,49.794346 + parent: 2 +- proto: CableHVStack1 + entities: + - uid: 6045 + components: + - type: Transform + pos: 65.39983,23.446333 + parent: 2 + - uid: 6046 + components: + - type: Transform + pos: 65.50473,23.530249 + parent: 2 + - uid: 6047 + components: + - type: Transform + pos: 71.420815,23.593185 + parent: 2 + - uid: 6048 + components: + - type: Transform + pos: 71.65159,23.404375 + parent: 2 + - uid: 6049 + components: + - type: Transform + pos: 57.50612,30.521687 + parent: 2 + - uid: 6050 + components: + - type: Transform + pos: -50.5,17.5 + parent: 2 +- proto: CableHVStack10 + entities: + - uid: 6051 + components: + - type: Transform + pos: -36.429504,-29.852598 + parent: 2 + - uid: 6052 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.54089,-52.480007 + parent: 2 +- proto: CableMV + entities: + - uid: 6053 + components: + - type: Transform + pos: 2.5,56.5 + parent: 2 + - uid: 6054 + components: + - type: Transform + pos: -20.5,1.5 + parent: 2 + - uid: 6055 + components: + - type: Transform + pos: -22.5,-50.5 + parent: 2 + - uid: 6056 + components: + - type: Transform + pos: -24.5,-50.5 + parent: 2 + - uid: 6057 + components: + - type: Transform + pos: -25.5,-50.5 + parent: 2 + - uid: 6058 + components: + - type: Transform + pos: -26.5,-52.5 + parent: 2 + - uid: 6059 + components: + - type: Transform + pos: -26.5,-54.5 + parent: 2 + - uid: 6060 + components: + - type: Transform + pos: -25.5,-55.5 + parent: 2 + - uid: 6061 + components: + - type: Transform + pos: -23.5,-55.5 + parent: 2 + - uid: 6062 + components: + - type: Transform + pos: -22.5,-54.5 + parent: 2 + - uid: 6063 + components: + - type: Transform + pos: 5.5,31.5 + parent: 2 + - uid: 6064 + components: + - type: Transform + pos: 5.5,32.5 + parent: 2 + - uid: 6065 + components: + - type: Transform + pos: -2.5,-63.5 + parent: 2 + - uid: 6066 + components: + - type: Transform + pos: 9.5,-47.5 + parent: 2 + - uid: 6067 + components: + - type: Transform + pos: 8.5,-47.5 + parent: 2 + - uid: 6068 + components: + - type: Transform + pos: 0.5,-53.5 + parent: 2 + - uid: 6069 + components: + - type: Transform + pos: 0.5,-52.5 + parent: 2 + - uid: 6070 + components: + - type: Transform + pos: 0.5,-51.5 + parent: 2 + - uid: 6071 + components: + - type: Transform + pos: -0.5,-51.5 + parent: 2 + - uid: 6072 + components: + - type: Transform + pos: -1.5,-51.5 + parent: 2 + - uid: 6073 + components: + - type: Transform + pos: -2.5,-51.5 + parent: 2 + - uid: 6074 + components: + - type: Transform + pos: -3.5,-51.5 + parent: 2 + - uid: 6075 + components: + - type: Transform + pos: -4.5,-51.5 + parent: 2 + - uid: 6076 + components: + - type: Transform + pos: -5.5,-51.5 + parent: 2 + - uid: 6077 + components: + - type: Transform + pos: -5.5,-52.5 + parent: 2 + - uid: 6078 + components: + - type: Transform + pos: -5.5,-53.5 + parent: 2 + - uid: 6079 + components: + - type: Transform + pos: -5.5,-54.5 + parent: 2 + - uid: 6080 + components: + - type: Transform + pos: -5.5,-55.5 + parent: 2 + - uid: 6081 + components: + - type: Transform + pos: -5.5,-56.5 + parent: 2 + - uid: 6082 + components: + - type: Transform + pos: -5.5,-57.5 + parent: 2 + - uid: 6083 + components: + - type: Transform + pos: -5.5,-58.5 + parent: 2 + - uid: 6084 + components: + - type: Transform + pos: -5.5,-59.5 + parent: 2 + - uid: 6085 + components: + - type: Transform + pos: -5.5,-60.5 + parent: 2 + - uid: 6086 + components: + - type: Transform + pos: -4.5,-60.5 + parent: 2 + - uid: 6087 + components: + - type: Transform + pos: 10.5,-47.5 + parent: 2 + - uid: 6088 + components: + - type: Transform + pos: -3.5,-60.5 + parent: 2 + - uid: 6089 + components: + - type: Transform + pos: -2.5,-60.5 + parent: 2 + - uid: 6090 + components: + - type: Transform + pos: -1.5,-60.5 + parent: 2 + - uid: 6091 + components: + - type: Transform + pos: -0.5,-60.5 + parent: 2 + - uid: 6092 + components: + - type: Transform + pos: 0.5,-60.5 + parent: 2 + - uid: 6093 + components: + - type: Transform + pos: 0.5,-59.5 + parent: 2 + - uid: 6094 + components: + - type: Transform + pos: 0.5,-58.5 + parent: 2 + - uid: 6095 + components: + - type: Transform + pos: 0.5,-57.5 + parent: 2 + - uid: 6096 + components: + - type: Transform + pos: 1.5,-57.5 + parent: 2 + - uid: 6097 + components: + - type: Transform + pos: 2.5,-57.5 + parent: 2 + - uid: 6098 + components: + - type: Transform + pos: 3.5,-57.5 + parent: 2 + - uid: 6099 + components: + - type: Transform + pos: 3.5,-56.5 + parent: 2 + - uid: 6100 + components: + - type: Transform + pos: 3.5,-55.5 + parent: 2 + - uid: 6101 + components: + - type: Transform + pos: 4.5,-55.5 + parent: 2 + - uid: 6102 + components: + - type: Transform + pos: 5.5,-55.5 + parent: 2 + - uid: 6103 + components: + - type: Transform + pos: 6.5,-55.5 + parent: 2 + - uid: 6104 + components: + - type: Transform + pos: 7.5,-55.5 + parent: 2 + - uid: 6105 + components: + - type: Transform + pos: 7.5,-54.5 + parent: 2 + - uid: 6106 + components: + - type: Transform + pos: 7.5,-53.5 + parent: 2 + - uid: 6107 + components: + - type: Transform + pos: 7.5,-52.5 + parent: 2 + - uid: 6108 + components: + - type: Transform + pos: 6.5,-52.5 + parent: 2 + - uid: 6109 + components: + - type: Transform + pos: 5.5,-52.5 + parent: 2 + - uid: 6110 + components: + - type: Transform + pos: 7.5,-51.5 + parent: 2 + - uid: 6111 + components: + - type: Transform + pos: 7.5,-50.5 + parent: 2 + - uid: 6112 + components: + - type: Transform + pos: 7.5,-49.5 + parent: 2 + - uid: 6113 + components: + - type: Transform + pos: 7.5,-48.5 + parent: 2 + - uid: 6114 + components: + - type: Transform + pos: 7.5,-47.5 + parent: 2 + - uid: 6115 + components: + - type: Transform + pos: 10.5,-48.5 + parent: 2 + - uid: 6116 + components: + - type: Transform + pos: 11.5,-48.5 + parent: 2 + - uid: 6117 + components: + - type: Transform + pos: 12.5,-48.5 + parent: 2 + - uid: 6118 + components: + - type: Transform + pos: 13.5,-48.5 + parent: 2 + - uid: 6119 + components: + - type: Transform + pos: 14.5,-48.5 + parent: 2 + - uid: 6120 + components: + - type: Transform + pos: 15.5,-48.5 + parent: 2 + - uid: 6121 + components: + - type: Transform + pos: 16.5,-48.5 + parent: 2 + - uid: 6122 + components: + - type: Transform + pos: 17.5,-48.5 + parent: 2 + - uid: 6123 + components: + - type: Transform + pos: 18.5,-48.5 + parent: 2 + - uid: 6124 + components: + - type: Transform + pos: 19.5,-48.5 + parent: 2 + - uid: 6125 + components: + - type: Transform + pos: 20.5,-48.5 + parent: 2 + - uid: 6126 + components: + - type: Transform + pos: 21.5,-48.5 + parent: 2 + - uid: 6127 + components: + - type: Transform + pos: 22.5,-48.5 + parent: 2 + - uid: 6128 + components: + - type: Transform + pos: 23.5,-48.5 + parent: 2 + - uid: 6129 + components: + - type: Transform + pos: 24.5,-48.5 + parent: 2 + - uid: 6130 + components: + - type: Transform + pos: 25.5,-48.5 + parent: 2 + - uid: 6131 + components: + - type: Transform + pos: 26.5,-48.5 + parent: 2 + - uid: 6132 + components: + - type: Transform + pos: 27.5,-48.5 + parent: 2 + - uid: 6133 + components: + - type: Transform + pos: 28.5,-48.5 + parent: 2 + - uid: 6134 + components: + - type: Transform + pos: 29.5,-48.5 + parent: 2 + - uid: 6135 + components: + - type: Transform + pos: 30.5,-48.5 + parent: 2 + - uid: 6136 + components: + - type: Transform + pos: 31.5,-48.5 + parent: 2 + - uid: 6137 + components: + - type: Transform + pos: 32.5,-48.5 + parent: 2 + - uid: 6138 + components: + - type: Transform + pos: 32.5,-47.5 + parent: 2 + - uid: 6139 + components: + - type: Transform + pos: 32.5,-46.5 + parent: 2 + - uid: 6140 + components: + - type: Transform + pos: 33.5,-46.5 + parent: 2 + - uid: 6141 + components: + - type: Transform + pos: 14.5,-16.5 + parent: 2 + - uid: 6142 + components: + - type: Transform + pos: 5.5,-31.5 + parent: 2 + - uid: 6143 + components: + - type: Transform + pos: 13.5,-2.5 + parent: 2 + - uid: 6144 + components: + - type: Transform + pos: 13.5,-3.5 + parent: 2 + - uid: 6145 + components: + - type: Transform + pos: 14.5,-3.5 + parent: 2 + - uid: 6146 + components: + - type: Transform + pos: 15.5,-3.5 + parent: 2 + - uid: 6147 + components: + - type: Transform + pos: 16.5,-3.5 + parent: 2 + - uid: 6148 + components: + - type: Transform + pos: 16.5,-4.5 + parent: 2 + - uid: 6149 + components: + - type: Transform + pos: 16.5,-5.5 + parent: 2 + - uid: 6150 + components: + - type: Transform + pos: 16.5,-6.5 + parent: 2 + - uid: 6151 + components: + - type: Transform + pos: 15.5,-6.5 + parent: 2 + - uid: 6152 + components: + - type: Transform + pos: 14.5,-6.5 + parent: 2 + - uid: 6153 + components: + - type: Transform + pos: 13.5,-6.5 + parent: 2 + - uid: 6154 + components: + - type: Transform + pos: 13.5,-7.5 + parent: 2 + - uid: 6155 + components: + - type: Transform + pos: 13.5,-8.5 + parent: 2 + - uid: 6156 + components: + - type: Transform + pos: 13.5,-9.5 + parent: 2 + - uid: 6157 + components: + - type: Transform + pos: 13.5,-10.5 + parent: 2 + - uid: 6158 + components: + - type: Transform + pos: 13.5,-11.5 + parent: 2 + - uid: 6159 + components: + - type: Transform + pos: 13.5,-12.5 + parent: 2 + - uid: 6160 + components: + - type: Transform + pos: 13.5,-13.5 + parent: 2 + - uid: 6161 + components: + - type: Transform + pos: 13.5,-14.5 + parent: 2 + - uid: 6162 + components: + - type: Transform + pos: 13.5,-15.5 + parent: 2 + - uid: 6163 + components: + - type: Transform + pos: 13.5,-16.5 + parent: 2 + - uid: 6164 + components: + - type: Transform + pos: 13.5,-17.5 + parent: 2 + - uid: 6165 + components: + - type: Transform + pos: 13.5,-18.5 + parent: 2 + - uid: 6166 + components: + - type: Transform + pos: 13.5,-19.5 + parent: 2 + - uid: 6167 + components: + - type: Transform + pos: 13.5,-20.5 + parent: 2 + - uid: 6168 + components: + - type: Transform + pos: 13.5,-21.5 + parent: 2 + - uid: 6169 + components: + - type: Transform + pos: 13.5,-22.5 + parent: 2 + - uid: 6170 + components: + - type: Transform + pos: 13.5,-23.5 + parent: 2 + - uid: 6171 + components: + - type: Transform + pos: 14.5,-23.5 + parent: 2 + - uid: 6172 + components: + - type: Transform + pos: 15.5,-23.5 + parent: 2 + - uid: 6173 + components: + - type: Transform + pos: 16.5,-23.5 + parent: 2 + - uid: 6174 + components: + - type: Transform + pos: 16.5,-22.5 + parent: 2 + - uid: 6175 + components: + - type: Transform + pos: 16.5,-21.5 + parent: 2 + - uid: 6176 + components: + - type: Transform + pos: 16.5,-24.5 + parent: 2 + - uid: 6177 + components: + - type: Transform + pos: 17.5,-24.5 + parent: 2 + - uid: 6178 + components: + - type: Transform + pos: 18.5,-24.5 + parent: 2 + - uid: 6179 + components: + - type: Transform + pos: 19.5,-24.5 + parent: 2 + - uid: 6180 + components: + - type: Transform + pos: 20.5,-24.5 + parent: 2 + - uid: 6181 + components: + - type: Transform + pos: 21.5,-24.5 + parent: 2 + - uid: 6182 + components: + - type: Transform + pos: 22.5,-24.5 + parent: 2 + - uid: 6183 + components: + - type: Transform + pos: 23.5,-24.5 + parent: 2 + - uid: 6184 + components: + - type: Transform + pos: 24.5,-24.5 + parent: 2 + - uid: 6185 + components: + - type: Transform + pos: 25.5,-24.5 + parent: 2 + - uid: 6186 + components: + - type: Transform + pos: 25.5,-23.5 + parent: 2 + - uid: 6187 + components: + - type: Transform + pos: 25.5,-22.5 + parent: 2 + - uid: 6188 + components: + - type: Transform + pos: 25.5,-21.5 + parent: 2 + - uid: 6189 + components: + - type: Transform + pos: 24.5,-21.5 + parent: 2 + - uid: 6190 + components: + - type: Transform + pos: 4.5,-31.5 + parent: 2 + - uid: 6191 + components: + - type: Transform + pos: 13.5,-24.5 + parent: 2 + - uid: 6192 + components: + - type: Transform + pos: 6.5,-31.5 + parent: 2 + - uid: 6193 + components: + - type: Transform + pos: 15.5,-16.5 + parent: 2 + - uid: 6194 + components: + - type: Transform + pos: 16.5,-16.5 + parent: 2 + - uid: 6195 + components: + - type: Transform + pos: 16.5,-17.5 + parent: 2 + - uid: 6196 + components: + - type: Transform + pos: 26.5,-24.5 + parent: 2 + - uid: 6197 + components: + - type: Transform + pos: 27.5,-24.5 + parent: 2 + - uid: 6198 + components: + - type: Transform + pos: 28.5,-24.5 + parent: 2 + - uid: 6199 + components: + - type: Transform + pos: 29.5,-24.5 + parent: 2 + - uid: 6200 + components: + - type: Transform + pos: 30.5,-24.5 + parent: 2 + - uid: 6201 + components: + - type: Transform + pos: 31.5,-24.5 + parent: 2 + - uid: 6202 + components: + - type: Transform + pos: 8.5,-31.5 + parent: 2 + - uid: 6203 + components: + - type: Transform + pos: 7.5,-31.5 + parent: 2 + - uid: 6204 + components: + - type: Transform + pos: 9.5,-31.5 + parent: 2 + - uid: 6205 + components: + - type: Transform + pos: 10.5,-31.5 + parent: 2 + - uid: 6206 + components: + - type: Transform + pos: 11.5,-31.5 + parent: 2 + - uid: 6207 + components: + - type: Transform + pos: 12.5,-31.5 + parent: 2 + - uid: 6208 + components: + - type: Transform + pos: 13.5,-31.5 + parent: 2 + - uid: 6209 + components: + - type: Transform + pos: 13.5,-30.5 + parent: 2 + - uid: 6210 + components: + - type: Transform + pos: 13.5,-29.5 + parent: 2 + - uid: 6211 + components: + - type: Transform + pos: 13.5,-28.5 + parent: 2 + - uid: 6212 + components: + - type: Transform + pos: 13.5,-27.5 + parent: 2 + - uid: 6213 + components: + - type: Transform + pos: 13.5,-26.5 + parent: 2 + - uid: 6214 + components: + - type: Transform + pos: 13.5,-25.5 + parent: 2 + - uid: 6215 + components: + - type: Transform + pos: 26.5,-25.5 + parent: 2 + - uid: 6216 + components: + - type: Transform + pos: 26.5,-26.5 + parent: 2 + - uid: 6217 + components: + - type: Transform + pos: 26.5,-27.5 + parent: 2 + - uid: 6218 + components: + - type: Transform + pos: 26.5,-28.5 + parent: 2 + - uid: 6219 + components: + - type: Transform + pos: 26.5,-29.5 + parent: 2 + - uid: 6220 + components: + - type: Transform + pos: 26.5,-30.5 + parent: 2 + - uid: 6221 + components: + - type: Transform + pos: 26.5,-31.5 + parent: 2 + - uid: 6222 + components: + - type: Transform + pos: 26.5,-32.5 + parent: 2 + - uid: 6223 + components: + - type: Transform + pos: 25.5,-32.5 + parent: 2 + - uid: 6224 + components: + - type: Transform + pos: 25.5,-33.5 + parent: 2 + - uid: 6225 + components: + - type: Transform + pos: 32.5,-24.5 + parent: 2 + - uid: 6226 + components: + - type: Transform + pos: 33.5,-24.5 + parent: 2 + - uid: 6227 + components: + - type: Transform + pos: 34.5,-24.5 + parent: 2 + - uid: 6228 + components: + - type: Transform + pos: 35.5,-24.5 + parent: 2 + - uid: 6229 + components: + - type: Transform + pos: 36.5,-24.5 + parent: 2 + - uid: 6230 + components: + - type: Transform + pos: 37.5,-24.5 + parent: 2 + - uid: 6231 + components: + - type: Transform + pos: 38.5,-24.5 + parent: 2 + - uid: 6232 + components: + - type: Transform + pos: 39.5,-24.5 + parent: 2 + - uid: 6233 + components: + - type: Transform + pos: 40.5,-24.5 + parent: 2 + - uid: 6234 + components: + - type: Transform + pos: 40.5,-25.5 + parent: 2 + - uid: 6235 + components: + - type: Transform + pos: 40.5,-26.5 + parent: 2 + - uid: 6236 + components: + - type: Transform + pos: 40.5,-27.5 + parent: 2 + - uid: 6237 + components: + - type: Transform + pos: 40.5,-28.5 + parent: 2 + - uid: 6238 + components: + - type: Transform + pos: 40.5,-29.5 + parent: 2 + - uid: 6239 + components: + - type: Transform + pos: 40.5,-30.5 + parent: 2 + - uid: 6240 + components: + - type: Transform + pos: 40.5,-31.5 + parent: 2 + - uid: 6241 + components: + - type: Transform + pos: 40.5,-32.5 + parent: 2 + - uid: 6242 + components: + - type: Transform + pos: 40.5,-33.5 + parent: 2 + - uid: 6243 + components: + - type: Transform + pos: 40.5,-34.5 + parent: 2 + - uid: 6244 + components: + - type: Transform + pos: 41.5,-34.5 + parent: 2 + - uid: 6245 + components: + - type: Transform + pos: 41.5,-35.5 + parent: 2 + - uid: 6246 + components: + - type: Transform + pos: 4.5,-30.5 + parent: 2 + - uid: 6247 + components: + - type: Transform + pos: 45.5,-20.5 + parent: 2 + - uid: 6248 + components: + - type: Transform + pos: 45.5,-19.5 + parent: 2 + - uid: 6249 + components: + - type: Transform + pos: 12.5,-18.5 + parent: 2 + - uid: 6250 + components: + - type: Transform + pos: 11.5,-18.5 + parent: 2 + - uid: 6251 + components: + - type: Transform + pos: 10.5,-18.5 + parent: 2 + - uid: 6252 + components: + - type: Transform + pos: 9.5,-18.5 + parent: 2 + - uid: 6253 + components: + - type: Transform + pos: 9.5,-17.5 + parent: 2 + - uid: 6254 + components: + - type: Transform + pos: 24.5,-20.5 + parent: 2 + - uid: 6255 + components: + - type: Transform + pos: 24.5,-19.5 + parent: 2 + - uid: 6256 + components: + - type: Transform + pos: 24.5,-18.5 + parent: 2 + - uid: 6257 + components: + - type: Transform + pos: 24.5,-17.5 + parent: 2 + - uid: 6258 + components: + - type: Transform + pos: 23.5,-17.5 + parent: 2 + - uid: 6259 + components: + - type: Transform + pos: 23.5,-16.5 + parent: 2 + - uid: 6260 + components: + - type: Transform + pos: 23.5,-15.5 + parent: 2 + - uid: 6261 + components: + - type: Transform + pos: 23.5,-14.5 + parent: 2 + - uid: 6262 + components: + - type: Transform + pos: 23.5,-13.5 + parent: 2 + - uid: 6263 + components: + - type: Transform + pos: 23.5,-12.5 + parent: 2 + - uid: 6264 + components: + - type: Transform + pos: 23.5,-11.5 + parent: 2 + - uid: 6265 + components: + - type: Transform + pos: 23.5,-10.5 + parent: 2 + - uid: 6266 + components: + - type: Transform + pos: 23.5,-9.5 + parent: 2 + - uid: 6267 + components: + - type: Transform + pos: 23.5,-8.5 + parent: 2 + - uid: 6268 + components: + - type: Transform + pos: 22.5,-8.5 + parent: 2 + - uid: 6269 + components: + - type: Transform + pos: 22.5,-7.5 + parent: 2 + - uid: 6270 + components: + - type: Transform + pos: 22.5,-6.5 + parent: 2 + - uid: 6271 + components: + - type: Transform + pos: 21.5,-6.5 + parent: 2 + - uid: 6272 + components: + - type: Transform + pos: 20.5,-6.5 + parent: 2 + - uid: 6273 + components: + - type: Transform + pos: 19.5,-6.5 + parent: 2 + - uid: 6274 + components: + - type: Transform + pos: 18.5,-6.5 + parent: 2 + - uid: 6275 + components: + - type: Transform + pos: 18.5,-5.5 + parent: 2 + - uid: 6276 + components: + - type: Transform + pos: 18.5,-4.5 + parent: 2 + - uid: 6277 + components: + - type: Transform + pos: 18.5,-3.5 + parent: 2 + - uid: 6278 + components: + - type: Transform + pos: 17.5,-3.5 + parent: 2 + - uid: 6279 + components: + - type: Transform + pos: 13.5,20.5 + parent: 2 + - uid: 6280 + components: + - type: Transform + pos: 3.5,-30.5 + parent: 2 + - uid: 6281 + components: + - type: Transform + pos: -29.5,15.5 + parent: 2 + - uid: 6282 + components: + - type: Transform + pos: -28.5,15.5 + parent: 2 + - uid: 6283 + components: + - type: Transform + pos: -27.5,15.5 + parent: 2 + - uid: 6284 + components: + - type: Transform + pos: -27.5,16.5 + parent: 2 + - uid: 6285 + components: + - type: Transform + pos: -26.5,16.5 + parent: 2 + - uid: 6286 + components: + - type: Transform + pos: -25.5,16.5 + parent: 2 + - uid: 6287 + components: + - type: Transform + pos: -24.5,16.5 + parent: 2 + - uid: 6288 + components: + - type: Transform + pos: -3.5,75.5 + parent: 2 + - uid: 6289 + components: + - type: Transform + pos: -25.5,-8.5 + parent: 2 + - uid: 6290 + components: + - type: Transform + pos: -26.5,-8.5 + parent: 2 + - uid: 6291 + components: + - type: Transform + pos: -20.5,11.5 + parent: 2 + - uid: 6292 + components: + - type: Transform + pos: -20.5,10.5 + parent: 2 + - uid: 6293 + components: + - type: Transform + pos: -20.5,9.5 + parent: 2 + - uid: 6294 + components: + - type: Transform + pos: -20.5,8.5 + parent: 2 + - uid: 6295 + components: + - type: Transform + pos: -20.5,7.5 + parent: 2 + - uid: 6296 + components: + - type: Transform + pos: -21.5,7.5 + parent: 2 + - uid: 6297 + components: + - type: Transform + pos: -22.5,7.5 + parent: 2 + - uid: 6298 + components: + - type: Transform + pos: -23.5,7.5 + parent: 2 + - uid: 6299 + components: + - type: Transform + pos: -24.5,7.5 + parent: 2 + - uid: 6300 + components: + - type: Transform + pos: -25.5,7.5 + parent: 2 + - uid: 6301 + components: + - type: Transform + pos: -25.5,8.5 + parent: 2 + - uid: 6302 + components: + - type: Transform + pos: -21.5,11.5 + parent: 2 + - uid: 6303 + components: + - type: Transform + pos: -22.5,11.5 + parent: 2 + - uid: 6304 + components: + - type: Transform + pos: -23.5,11.5 + parent: 2 + - uid: 6305 + components: + - type: Transform + pos: -24.5,11.5 + parent: 2 + - uid: 6306 + components: + - type: Transform + pos: -24.5,10.5 + parent: 2 + - uid: 6307 + components: + - type: Transform + pos: -20.5,6.5 + parent: 2 + - uid: 6308 + components: + - type: Transform + pos: -20.5,5.5 + parent: 2 + - uid: 6309 + components: + - type: Transform + pos: -20.5,4.5 + parent: 2 + - uid: 6310 + components: + - type: Transform + pos: -20.5,3.5 + parent: 2 + - uid: 6311 + components: + - type: Transform + pos: -20.5,2.5 + parent: 2 + - uid: 6312 + components: + - type: Transform + pos: -20.5,1.5 + parent: 2 + - uid: 6313 + components: + - type: Transform + pos: -21.5,1.5 + parent: 2 + - uid: 6314 + components: + - type: Transform + pos: -22.5,1.5 + parent: 2 + - uid: 6315 + components: + - type: Transform + pos: -23.5,1.5 + parent: 2 + - uid: 6316 + components: + - type: Transform + pos: -24.5,1.5 + parent: 2 + - uid: 6317 + components: + - type: Transform + pos: -25.5,1.5 + parent: 2 + - uid: 6318 + components: + - type: Transform + pos: -26.5,1.5 + parent: 2 + - uid: 6319 + components: + - type: Transform + pos: -27.5,1.5 + parent: 2 + - uid: 6320 + components: + - type: Transform + pos: -28.5,1.5 + parent: 2 + - uid: 6321 + components: + - type: Transform + pos: -29.5,1.5 + parent: 2 + - uid: 6322 + components: + - type: Transform + pos: -30.5,1.5 + parent: 2 + - uid: 6323 + components: + - type: Transform + pos: -31.5,1.5 + parent: 2 + - uid: 6324 + components: + - type: Transform + pos: -32.5,1.5 + parent: 2 + - uid: 6325 + components: + - type: Transform + pos: -33.5,1.5 + parent: 2 + - uid: 6326 + components: + - type: Transform + pos: -33.5,2.5 + parent: 2 + - uid: 6327 + components: + - type: Transform + pos: -33.5,3.5 + parent: 2 + - uid: 6328 + components: + - type: Transform + pos: -33.5,4.5 + parent: 2 + - uid: 6329 + components: + - type: Transform + pos: -33.5,5.5 + parent: 2 + - uid: 6330 + components: + - type: Transform + pos: -33.5,6.5 + parent: 2 + - uid: 6331 + components: + - type: Transform + pos: -33.5,7.5 + parent: 2 + - uid: 6332 + components: + - type: Transform + pos: -34.5,7.5 + parent: 2 + - uid: 6333 + components: + - type: Transform + pos: -35.5,7.5 + parent: 2 + - uid: 6334 + components: + - type: Transform + pos: -36.5,7.5 + parent: 2 + - uid: 6335 + components: + - type: Transform + pos: -37.5,7.5 + parent: 2 + - uid: 6336 + components: + - type: Transform + pos: -38.5,7.5 + parent: 2 + - uid: 6337 + components: + - type: Transform + pos: -39.5,7.5 + parent: 2 + - uid: 6338 + components: + - type: Transform + pos: -40.5,7.5 + parent: 2 + - uid: 6339 + components: + - type: Transform + pos: -40.5,6.5 + parent: 2 + - uid: 6340 + components: + - type: Transform + pos: -40.5,5.5 + parent: 2 + - uid: 6341 + components: + - type: Transform + pos: -38.5,6.5 + parent: 2 + - uid: 6342 + components: + - type: Transform + pos: -38.5,5.5 + parent: 2 + - uid: 6343 + components: + - type: Transform + pos: -38.5,4.5 + parent: 2 + - uid: 6344 + components: + - type: Transform + pos: -38.5,3.5 + parent: 2 + - uid: 6345 + components: + - type: Transform + pos: -38.5,2.5 + parent: 2 + - uid: 6346 + components: + - type: Transform + pos: -38.5,1.5 + parent: 2 + - uid: 6347 + components: + - type: Transform + pos: -38.5,0.5 + parent: 2 + - uid: 6348 + components: + - type: Transform + pos: -38.5,-0.5 + parent: 2 + - uid: 6349 + components: + - type: Transform + pos: -38.5,-1.5 + parent: 2 + - uid: 6350 + components: + - type: Transform + pos: -38.5,-2.5 + parent: 2 + - uid: 6351 + components: + - type: Transform + pos: -38.5,-3.5 + parent: 2 + - uid: 6352 + components: + - type: Transform + pos: -38.5,-4.5 + parent: 2 + - uid: 6353 + components: + - type: Transform + pos: -38.5,-5.5 + parent: 2 + - uid: 6354 + components: + - type: Transform + pos: -38.5,-6.5 + parent: 2 + - uid: 6355 + components: + - type: Transform + pos: -38.5,-7.5 + parent: 2 + - uid: 6356 + components: + - type: Transform + pos: -38.5,-8.5 + parent: 2 + - uid: 6357 + components: + - type: Transform + pos: -39.5,-8.5 + parent: 2 + - uid: 6358 + components: + - type: Transform + pos: -40.5,-8.5 + parent: 2 + - uid: 6359 + components: + - type: Transform + pos: -41.5,-8.5 + parent: 2 + - uid: 6360 + components: + - type: Transform + pos: -42.5,-8.5 + parent: 2 + - uid: 6361 + components: + - type: Transform + pos: -42.5,-7.5 + parent: 2 + - uid: 6362 + components: + - type: Transform + pos: -42.5,-6.5 + parent: 2 + - uid: 6363 + components: + - type: Transform + pos: -21.5,-47.5 + parent: 2 + - uid: 6364 + components: + - type: Transform + pos: -16.5,-15.5 + parent: 2 + - uid: 6365 + components: + - type: Transform + pos: -16.5,-16.5 + parent: 2 + - uid: 6366 + components: + - type: Transform + pos: -15.5,-16.5 + parent: 2 + - uid: 6367 + components: + - type: Transform + pos: -14.5,-16.5 + parent: 2 + - uid: 6368 + components: + - type: Transform + pos: -13.5,-16.5 + parent: 2 + - uid: 6369 + components: + - type: Transform + pos: -12.5,-16.5 + parent: 2 + - uid: 6370 + components: + - type: Transform + pos: -12.5,-15.5 + parent: 2 + - uid: 6371 + components: + - type: Transform + pos: -12.5,-14.5 + parent: 2 + - uid: 6372 + components: + - type: Transform + pos: -12.5,-13.5 + parent: 2 + - uid: 6373 + components: + - type: Transform + pos: -13.5,-13.5 + parent: 2 + - uid: 6374 + components: + - type: Transform + pos: -14.5,-13.5 + parent: 2 + - uid: 6375 + components: + - type: Transform + pos: -15.5,-13.5 + parent: 2 + - uid: 6376 + components: + - type: Transform + pos: -15.5,-12.5 + parent: 2 + - uid: 6377 + components: + - type: Transform + pos: -27.5,-8.5 + parent: 2 + - uid: 6378 + components: + - type: Transform + pos: -23.5,16.5 + parent: 2 + - uid: 6379 + components: + - type: Transform + pos: -24.5,-43.5 + parent: 2 + - uid: 6380 + components: + - type: Transform + pos: -27.5,-43.5 + parent: 2 + - uid: 6381 + components: + - type: Transform + pos: -26.5,-43.5 + parent: 2 + - uid: 6382 + components: + - type: Transform + pos: -29.5,-43.5 + parent: 2 + - uid: 6383 + components: + - type: Transform + pos: -24.5,17.5 + parent: 2 + - uid: 6384 + components: + - type: Transform + pos: -24.5,18.5 + parent: 2 + - uid: 6385 + components: + - type: Transform + pos: -24.5,-18.5 + parent: 2 + - uid: 6386 + components: + - type: Transform + pos: -25.5,-18.5 + parent: 2 + - uid: 6387 + components: + - type: Transform + pos: -24.5,-19.5 + parent: 2 + - uid: 6388 + components: + - type: Transform + pos: -23.5,-19.5 + parent: 2 + - uid: 6389 + components: + - type: Transform + pos: -22.5,-19.5 + parent: 2 + - uid: 6390 + components: + - type: Transform + pos: -22.5,-20.5 + parent: 2 + - uid: 6391 + components: + - type: Transform + pos: -22.5,-21.5 + parent: 2 + - uid: 6392 + components: + - type: Transform + pos: -22.5,-22.5 + parent: 2 + - uid: 6393 + components: + - type: Transform + pos: -22.5,-23.5 + parent: 2 + - uid: 6394 + components: + - type: Transform + pos: -22.5,-24.5 + parent: 2 + - uid: 6395 + components: + - type: Transform + pos: -22.5,-25.5 + parent: 2 + - uid: 6396 + components: + - type: Transform + pos: -22.5,-26.5 + parent: 2 + - uid: 6397 + components: + - type: Transform + pos: -22.5,-27.5 + parent: 2 + - uid: 6398 + components: + - type: Transform + pos: -23.5,-27.5 + parent: 2 + - uid: 6399 + components: + - type: Transform + pos: -24.5,-27.5 + parent: 2 + - uid: 6400 + components: + - type: Transform + pos: -25.5,-27.5 + parent: 2 + - uid: 6401 + components: + - type: Transform + pos: -26.5,-27.5 + parent: 2 + - uid: 6402 + components: + - type: Transform + pos: -27.5,-27.5 + parent: 2 + - uid: 6403 + components: + - type: Transform + pos: -24.5,-28.5 + parent: 2 + - uid: 6404 + components: + - type: Transform + pos: -24.5,-29.5 + parent: 2 + - uid: 6405 + components: + - type: Transform + pos: -24.5,-30.5 + parent: 2 + - uid: 6406 + components: + - type: Transform + pos: -24.5,-31.5 + parent: 2 + - uid: 6407 + components: + - type: Transform + pos: -24.5,-32.5 + parent: 2 + - uid: 6408 + components: + - type: Transform + pos: -24.5,-33.5 + parent: 2 + - uid: 6409 + components: + - type: Transform + pos: -24.5,-34.5 + parent: 2 + - uid: 6410 + components: + - type: Transform + pos: -24.5,-35.5 + parent: 2 + - uid: 6411 + components: + - type: Transform + pos: -24.5,-36.5 + parent: 2 + - uid: 6412 + components: + - type: Transform + pos: -25.5,-36.5 + parent: 2 + - uid: 6413 + components: + - type: Transform + pos: -26.5,-36.5 + parent: 2 + - uid: 6414 + components: + - type: Transform + pos: -25.5,-31.5 + parent: 2 + - uid: 6415 + components: + - type: Transform + pos: -26.5,-31.5 + parent: 2 + - uid: 6416 + components: + - type: Transform + pos: -27.5,-31.5 + parent: 2 + - uid: 6417 + components: + - type: Transform + pos: -28.5,-31.5 + parent: 2 + - uid: 6418 + components: + - type: Transform + pos: -29.5,-31.5 + parent: 2 + - uid: 6419 + components: + - type: Transform + pos: -30.5,-31.5 + parent: 2 + - uid: 6420 + components: + - type: Transform + pos: -31.5,-31.5 + parent: 2 + - uid: 6421 + components: + - type: Transform + pos: -32.5,-31.5 + parent: 2 + - uid: 6422 + components: + - type: Transform + pos: -33.5,-31.5 + parent: 2 + - uid: 6423 + components: + - type: Transform + pos: -33.5,-32.5 + parent: 2 + - uid: 6424 + components: + - type: Transform + pos: -33.5,-33.5 + parent: 2 + - uid: 6425 + components: + - type: Transform + pos: -33.5,-34.5 + parent: 2 + - uid: 6426 + components: + - type: Transform + pos: -33.5,-35.5 + parent: 2 + - uid: 6427 + components: + - type: Transform + pos: -33.5,-36.5 + parent: 2 + - uid: 6428 + components: + - type: Transform + pos: -33.5,-37.5 + parent: 2 + - uid: 6429 + components: + - type: Transform + pos: -34.5,-37.5 + parent: 2 + - uid: 6430 + components: + - type: Transform + pos: -35.5,-37.5 + parent: 2 + - uid: 6431 + components: + - type: Transform + pos: -36.5,-37.5 + parent: 2 + - uid: 6432 + components: + - type: Transform + pos: -37.5,-37.5 + parent: 2 + - uid: 6433 + components: + - type: Transform + pos: -38.5,-37.5 + parent: 2 + - uid: 6434 + components: + - type: Transform + pos: -39.5,-37.5 + parent: 2 + - uid: 6435 + components: + - type: Transform + pos: -40.5,-37.5 + parent: 2 + - uid: 6436 + components: + - type: Transform + pos: -39.5,-26.5 + parent: 2 + - uid: 6437 + components: + - type: Transform + pos: -38.5,-36.5 + parent: 2 + - uid: 6438 + components: + - type: Transform + pos: -38.5,-35.5 + parent: 2 + - uid: 6439 + components: + - type: Transform + pos: -38.5,-34.5 + parent: 2 + - uid: 6440 + components: + - type: Transform + pos: -38.5,-33.5 + parent: 2 + - uid: 6441 + components: + - type: Transform + pos: -38.5,-32.5 + parent: 2 + - uid: 6442 + components: + - type: Transform + pos: -38.5,-31.5 + parent: 2 + - uid: 6443 + components: + - type: Transform + pos: -38.5,-30.5 + parent: 2 + - uid: 6444 + components: + - type: Transform + pos: -38.5,-29.5 + parent: 2 + - uid: 6445 + components: + - type: Transform + pos: -38.5,-28.5 + parent: 2 + - uid: 6446 + components: + - type: Transform + pos: -38.5,-27.5 + parent: 2 + - uid: 6447 + components: + - type: Transform + pos: -38.5,-26.5 + parent: 2 + - uid: 6448 + components: + - type: Transform + pos: -39.5,-25.5 + parent: 2 + - uid: 6449 + components: + - type: Transform + pos: -39.5,-24.5 + parent: 2 + - uid: 6450 + components: + - type: Transform + pos: -33.5,-38.5 + parent: 2 + - uid: 6451 + components: + - type: Transform + pos: -33.5,-39.5 + parent: 2 + - uid: 6452 + components: + - type: Transform + pos: -33.5,-39.5 + parent: 2 + - uid: 6453 + components: + - type: Transform + pos: -33.5,-40.5 + parent: 2 + - uid: 6454 + components: + - type: Transform + pos: -33.5,-41.5 + parent: 2 + - uid: 6455 + components: + - type: Transform + pos: -33.5,-42.5 + parent: 2 + - uid: 6456 + components: + - type: Transform + pos: -33.5,-43.5 + parent: 2 + - uid: 6457 + components: + - type: Transform + pos: -33.5,-44.5 + parent: 2 + - uid: 6458 + components: + - type: Transform + pos: -33.5,-45.5 + parent: 2 + - uid: 6459 + components: + - type: Transform + pos: -33.5,-46.5 + parent: 2 + - uid: 6460 + components: + - type: Transform + pos: -33.5,-47.5 + parent: 2 + - uid: 6461 + components: + - type: Transform + pos: -33.5,-48.5 + parent: 2 + - uid: 6462 + components: + - type: Transform + pos: -33.5,-49.5 + parent: 2 + - uid: 6463 + components: + - type: Transform + pos: -33.5,-49.5 + parent: 2 + - uid: 6464 + components: + - type: Transform + pos: -34.5,-49.5 + parent: 2 + - uid: 6465 + components: + - type: Transform + pos: -35.5,-49.5 + parent: 2 + - uid: 6466 + components: + - type: Transform + pos: -36.5,-49.5 + parent: 2 + - uid: 6467 + components: + - type: Transform + pos: -37.5,-49.5 + parent: 2 + - uid: 6468 + components: + - type: Transform + pos: -38.5,-49.5 + parent: 2 + - uid: 6469 + components: + - type: Transform + pos: -39.5,-49.5 + parent: 2 + - uid: 6470 + components: + - type: Transform + pos: -40.5,-49.5 + parent: 2 + - uid: 6471 + components: + - type: Transform + pos: -21.5,-48.5 + parent: 2 + - uid: 6472 + components: + - type: Transform + pos: -21.5,-49.5 + parent: 2 + - uid: 6473 + components: + - type: Transform + pos: -21.5,-50.5 + parent: 2 + - uid: 6474 + components: + - type: Transform + pos: -23.5,-50.5 + parent: 2 + - uid: 6475 + components: + - type: Transform + pos: -26.5,-50.5 + parent: 2 + - uid: 6476 + components: + - type: Transform + pos: -26.5,-51.5 + parent: 2 + - uid: 6477 + components: + - type: Transform + pos: -26.5,-53.5 + parent: 2 + - uid: 6478 + components: + - type: Transform + pos: -26.5,-55.5 + parent: 2 + - uid: 6479 + components: + - type: Transform + pos: -24.5,-55.5 + parent: 2 + - uid: 6480 + components: + - type: Transform + pos: -22.5,-55.5 + parent: 2 + - uid: 6481 + components: + - type: Transform + pos: -22.5,-43.5 + parent: 2 + - uid: 6482 + components: + - type: Transform + pos: -22.5,-42.5 + parent: 2 + - uid: 6483 + components: + - type: Transform + pos: -29.5,0.5 + parent: 2 + - uid: 6484 + components: + - type: Transform + pos: -29.5,-0.5 + parent: 2 + - uid: 6485 + components: + - type: Transform + pos: -29.5,-1.5 + parent: 2 + - uid: 6486 + components: + - type: Transform + pos: -29.5,-2.5 + parent: 2 + - uid: 6487 + components: + - type: Transform + pos: -29.5,-3.5 + parent: 2 + - uid: 6488 + components: + - type: Transform + pos: -29.5,-4.5 + parent: 2 + - uid: 6489 + components: + - type: Transform + pos: -29.5,-5.5 + parent: 2 + - uid: 6490 + components: + - type: Transform + pos: -28.5,-5.5 + parent: 2 + - uid: 6491 + components: + - type: Transform + pos: -27.5,-5.5 + parent: 2 + - uid: 6492 + components: + - type: Transform + pos: -26.5,-5.5 + parent: 2 + - uid: 6493 + components: + - type: Transform + pos: -25.5,-5.5 + parent: 2 + - uid: 6494 + components: + - type: Transform + pos: -24.5,-5.5 + parent: 2 + - uid: 6495 + components: + - type: Transform + pos: -23.5,-5.5 + parent: 2 + - uid: 6496 + components: + - type: Transform + pos: -21.5,-46.5 + parent: 2 + - uid: 6497 + components: + - type: Transform + pos: -21.5,-45.5 + parent: 2 + - uid: 6498 + components: + - type: Transform + pos: -21.5,-44.5 + parent: 2 + - uid: 6499 + components: + - type: Transform + pos: -21.5,-43.5 + parent: 2 + - uid: 6500 + components: + - type: Transform + pos: -27.5,-52.5 + parent: 2 + - uid: 6501 + components: + - type: Transform + pos: -28.5,-52.5 + parent: 2 + - uid: 6502 + components: + - type: Transform + pos: -28.5,-53.5 + parent: 2 + - uid: 6503 + components: + - type: Transform + pos: -28.5,-54.5 + parent: 2 + - uid: 6504 + components: + - type: Transform + pos: -28.5,-55.5 + parent: 2 + - uid: 6505 + components: + - type: Transform + pos: -28.5,-56.5 + parent: 2 + - uid: 6506 + components: + - type: Transform + pos: -28.5,-57.5 + parent: 2 + - uid: 6507 + components: + - type: Transform + pos: -28.5,-58.5 + parent: 2 + - uid: 6508 + components: + - type: Transform + pos: -21.5,-27.5 + parent: 2 + - uid: 6509 + components: + - type: Transform + pos: -20.5,-27.5 + parent: 2 + - uid: 6510 + components: + - type: Transform + pos: -19.5,-27.5 + parent: 2 + - uid: 6511 + components: + - type: Transform + pos: -18.5,-27.5 + parent: 2 + - uid: 6512 + components: + - type: Transform + pos: -17.5,-27.5 + parent: 2 + - uid: 6513 + components: + - type: Transform + pos: -16.5,-27.5 + parent: 2 + - uid: 6514 + components: + - type: Transform + pos: -16.5,-26.5 + parent: 2 + - uid: 6515 + components: + - type: Transform + pos: -16.5,-25.5 + parent: 2 + - uid: 6516 + components: + - type: Transform + pos: -16.5,-24.5 + parent: 2 + - uid: 6517 + components: + - type: Transform + pos: -16.5,-23.5 + parent: 2 + - uid: 6518 + components: + - type: Transform + pos: -16.5,-22.5 + parent: 2 + - uid: 6519 + components: + - type: Transform + pos: -16.5,-21.5 + parent: 2 + - uid: 6520 + components: + - type: Transform + pos: -16.5,-20.5 + parent: 2 + - uid: 6521 + components: + - type: Transform + pos: -16.5,-19.5 + parent: 2 + - uid: 6522 + components: + - type: Transform + pos: -15.5,-19.5 + parent: 2 + - uid: 6523 + components: + - type: Transform + pos: -15.5,-18.5 + parent: 2 + - uid: 6524 + components: + - type: Transform + pos: -6.5,-58.5 + parent: 2 + - uid: 6525 + components: + - type: Transform + pos: -7.5,-58.5 + parent: 2 + - uid: 6526 + components: + - type: Transform + pos: -8.5,-58.5 + parent: 2 + - uid: 6527 + components: + - type: Transform + pos: -9.5,-58.5 + parent: 2 + - uid: 6528 + components: + - type: Transform + pos: -10.5,-58.5 + parent: 2 + - uid: 6529 + components: + - type: Transform + pos: -11.5,-58.5 + parent: 2 + - uid: 6530 + components: + - type: Transform + pos: -12.5,-58.5 + parent: 2 + - uid: 6531 + components: + - type: Transform + pos: -13.5,-58.5 + parent: 2 + - uid: 6532 + components: + - type: Transform + pos: -14.5,-58.5 + parent: 2 + - uid: 6533 + components: + - type: Transform + pos: -15.5,-58.5 + parent: 2 + - uid: 6534 + components: + - type: Transform + pos: -16.5,-58.5 + parent: 2 + - uid: 6535 + components: + - type: Transform + pos: -17.5,-58.5 + parent: 2 + - uid: 6536 + components: + - type: Transform + pos: -18.5,-58.5 + parent: 2 + - uid: 6537 + components: + - type: Transform + pos: -18.5,-59.5 + parent: 2 + - uid: 6538 + components: + - type: Transform + pos: -18.5,-60.5 + parent: 2 + - uid: 6539 + components: + - type: Transform + pos: -19.5,-60.5 + parent: 2 + - uid: 6540 + components: + - type: Transform + pos: -20.5,-60.5 + parent: 2 + - uid: 6541 + components: + - type: Transform + pos: -21.5,-60.5 + parent: 2 + - uid: 6542 + components: + - type: Transform + pos: 8.5,-52.5 + parent: 2 + - uid: 6543 + components: + - type: Transform + pos: 9.5,-52.5 + parent: 2 + - uid: 6544 + components: + - type: Transform + pos: 10.5,-52.5 + parent: 2 + - uid: 6545 + components: + - type: Transform + pos: 10.5,-51.5 + parent: 2 + - uid: 6546 + components: + - type: Transform + pos: 10.5,-50.5 + parent: 2 + - uid: 6547 + components: + - type: Transform + pos: 9.5,-50.5 + parent: 2 + - uid: 6548 + components: + - type: Transform + pos: -1.5,-29.5 + parent: 2 + - uid: 6549 + components: + - type: Transform + pos: -0.5,-29.5 + parent: 2 + - uid: 6550 + components: + - type: Transform + pos: 0.5,-29.5 + parent: 2 + - uid: 6551 + components: + - type: Transform + pos: -5.5,-50.5 + parent: 2 + - uid: 6552 + components: + - type: Transform + pos: -5.5,-49.5 + parent: 2 + - uid: 6553 + components: + - type: Transform + pos: -5.5,-48.5 + parent: 2 + - uid: 6554 + components: + - type: Transform + pos: -4.5,-48.5 + parent: 2 + - uid: 6555 + components: + - type: Transform + pos: -4.5,-47.5 + parent: 2 + - uid: 6556 + components: + - type: Transform + pos: -4.5,-46.5 + parent: 2 + - uid: 6557 + components: + - type: Transform + pos: -4.5,-45.5 + parent: 2 + - uid: 6558 + components: + - type: Transform + pos: -4.5,-44.5 + parent: 2 + - uid: 6559 + components: + - type: Transform + pos: -4.5,-43.5 + parent: 2 + - uid: 6560 + components: + - type: Transform + pos: -4.5,-42.5 + parent: 2 + - uid: 6561 + components: + - type: Transform + pos: 0.5,-41.5 + parent: 2 + - uid: 6562 + components: + - type: Transform + pos: -3.5,-42.5 + parent: 2 + - uid: 6563 + components: + - type: Transform + pos: -2.5,-42.5 + parent: 2 + - uid: 6564 + components: + - type: Transform + pos: -1.5,-42.5 + parent: 2 + - uid: 6565 + components: + - type: Transform + pos: -0.5,-42.5 + parent: 2 + - uid: 6566 + components: + - type: Transform + pos: 0.5,-40.5 + parent: 2 + - uid: 6567 + components: + - type: Transform + pos: 0.5,-39.5 + parent: 2 + - uid: 6568 + components: + - type: Transform + pos: 0.5,-38.5 + parent: 2 + - uid: 6569 + components: + - type: Transform + pos: 0.5,-37.5 + parent: 2 + - uid: 6570 + components: + - type: Transform + pos: 0.5,-36.5 + parent: 2 + - uid: 6571 + components: + - type: Transform + pos: 0.5,-35.5 + parent: 2 + - uid: 6572 + components: + - type: Transform + pos: 0.5,-34.5 + parent: 2 + - uid: 6573 + components: + - type: Transform + pos: 0.5,-33.5 + parent: 2 + - uid: 6574 + components: + - type: Transform + pos: 0.5,-32.5 + parent: 2 + - uid: 6575 + components: + - type: Transform + pos: 0.5,-31.5 + parent: 2 + - uid: 6576 + components: + - type: Transform + pos: 0.5,-30.5 + parent: 2 + - uid: 6577 + components: + - type: Transform + pos: 0.5,-42.5 + parent: 2 + - uid: 6578 + components: + - type: Transform + pos: 9.5,22.5 + parent: 2 + - uid: 6579 + components: + - type: Transform + pos: 9.5,21.5 + parent: 2 + - uid: 6580 + components: + - type: Transform + pos: 10.5,21.5 + parent: 2 + - uid: 6581 + components: + - type: Transform + pos: 11.5,21.5 + parent: 2 + - uid: 6582 + components: + - type: Transform + pos: 12.5,21.5 + parent: 2 + - uid: 6583 + components: + - type: Transform + pos: 13.5,21.5 + parent: 2 + - uid: 6584 + components: + - type: Transform + pos: 13.5,19.5 + parent: 2 + - uid: 6585 + components: + - type: Transform + pos: 13.5,18.5 + parent: 2 + - uid: 6586 + components: + - type: Transform + pos: 13.5,17.5 + parent: 2 + - uid: 6587 + components: + - type: Transform + pos: 13.5,16.5 + parent: 2 + - uid: 6588 + components: + - type: Transform + pos: 13.5,15.5 + parent: 2 + - uid: 6589 + components: + - type: Transform + pos: 13.5,14.5 + parent: 2 + - uid: 6590 + components: + - type: Transform + pos: 13.5,13.5 + parent: 2 + - uid: 6591 + components: + - type: Transform + pos: 13.5,12.5 + parent: 2 + - uid: 6592 + components: + - type: Transform + pos: 13.5,11.5 + parent: 2 + - uid: 6593 + components: + - type: Transform + pos: 13.5,10.5 + parent: 2 + - uid: 6594 + components: + - type: Transform + pos: 13.5,9.5 + parent: 2 + - uid: 6595 + components: + - type: Transform + pos: 13.5,8.5 + parent: 2 + - uid: 6596 + components: + - type: Transform + pos: 13.5,7.5 + parent: 2 + - uid: 6597 + components: + - type: Transform + pos: 13.5,6.5 + parent: 2 + - uid: 6598 + components: + - type: Transform + pos: 13.5,5.5 + parent: 2 + - uid: 6599 + components: + - type: Transform + pos: 13.5,4.5 + parent: 2 + - uid: 6600 + components: + - type: Transform + pos: 14.5,4.5 + parent: 2 + - uid: 6601 + components: + - type: Transform + pos: 15.5,4.5 + parent: 2 + - uid: 6602 + components: + - type: Transform + pos: 15.5,3.5 + parent: 2 + - uid: 6603 + components: + - type: Transform + pos: 15.5,2.5 + parent: 2 + - uid: 6604 + components: + - type: Transform + pos: 15.5,1.5 + parent: 2 + - uid: 6605 + components: + - type: Transform + pos: 15.5,0.5 + parent: 2 + - uid: 6606 + components: + - type: Transform + pos: 16.5,0.5 + parent: 2 + - uid: 6607 + components: + - type: Transform + pos: 17.5,0.5 + parent: 2 + - uid: 6608 + components: + - type: Transform + pos: 18.5,0.5 + parent: 2 + - uid: 6609 + components: + - type: Transform + pos: 19.5,0.5 + parent: 2 + - uid: 6610 + components: + - type: Transform + pos: 20.5,0.5 + parent: 2 + - uid: 6611 + components: + - type: Transform + pos: 21.5,0.5 + parent: 2 + - uid: 6612 + components: + - type: Transform + pos: 22.5,0.5 + parent: 2 + - uid: 6613 + components: + - type: Transform + pos: 23.5,0.5 + parent: 2 + - uid: 6614 + components: + - type: Transform + pos: 24.5,0.5 + parent: 2 + - uid: 6615 + components: + - type: Transform + pos: 25.5,0.5 + parent: 2 + - uid: 6616 + components: + - type: Transform + pos: 25.5,-0.5 + parent: 2 + - uid: 6617 + components: + - type: Transform + pos: 25.5,-1.5 + parent: 2 + - uid: 6618 + components: + - type: Transform + pos: 14.5,11.5 + parent: 2 + - uid: 6619 + components: + - type: Transform + pos: 15.5,11.5 + parent: 2 + - uid: 6620 + components: + - type: Transform + pos: 16.5,11.5 + parent: 2 + - uid: 6621 + components: + - type: Transform + pos: 17.5,11.5 + parent: 2 + - uid: 6622 + components: + - type: Transform + pos: 17.5,10.5 + parent: 2 + - uid: 6623 + components: + - type: Transform + pos: 17.5,9.5 + parent: 2 + - uid: 6624 + components: + - type: Transform + pos: 17.5,8.5 + parent: 2 + - uid: 6625 + components: + - type: Transform + pos: 17.5,7.5 + parent: 2 + - uid: 6626 + components: + - type: Transform + pos: 17.5,6.5 + parent: 2 + - uid: 6627 + components: + - type: Transform + pos: 17.5,5.5 + parent: 2 + - uid: 6628 + components: + - type: Transform + pos: 44.5,5.5 + parent: 2 + - uid: 6629 + components: + - type: Transform + pos: 43.5,5.5 + parent: 2 + - uid: 6630 + components: + - type: Transform + pos: 42.5,5.5 + parent: 2 + - uid: 6631 + components: + - type: Transform + pos: 41.5,5.5 + parent: 2 + - uid: 6632 + components: + - type: Transform + pos: 40.5,5.5 + parent: 2 + - uid: 6633 + components: + - type: Transform + pos: 40.5,6.5 + parent: 2 + - uid: 6634 + components: + - type: Transform + pos: 39.5,6.5 + parent: 2 + - uid: 6635 + components: + - type: Transform + pos: 38.5,6.5 + parent: 2 + - uid: 6636 + components: + - type: Transform + pos: 37.5,6.5 + parent: 2 + - uid: 6637 + components: + - type: Transform + pos: 37.5,7.5 + parent: 2 + - uid: 6638 + components: + - type: Transform + pos: 36.5,7.5 + parent: 2 + - uid: 6639 + components: + - type: Transform + pos: 35.5,7.5 + parent: 2 + - uid: 6640 + components: + - type: Transform + pos: 34.5,7.5 + parent: 2 + - uid: 6641 + components: + - type: Transform + pos: 33.5,7.5 + parent: 2 + - uid: 6642 + components: + - type: Transform + pos: 32.5,7.5 + parent: 2 + - uid: 6643 + components: + - type: Transform + pos: 31.5,7.5 + parent: 2 + - uid: 6644 + components: + - type: Transform + pos: 30.5,7.5 + parent: 2 + - uid: 6645 + components: + - type: Transform + pos: 29.5,7.5 + parent: 2 + - uid: 6646 + components: + - type: Transform + pos: 28.5,7.5 + parent: 2 + - uid: 6647 + components: + - type: Transform + pos: 27.5,7.5 + parent: 2 + - uid: 6648 + components: + - type: Transform + pos: 26.5,7.5 + parent: 2 + - uid: 6649 + components: + - type: Transform + pos: 25.5,7.5 + parent: 2 + - uid: 6650 + components: + - type: Transform + pos: 24.5,7.5 + parent: 2 + - uid: 6651 + components: + - type: Transform + pos: 23.5,7.5 + parent: 2 + - uid: 6652 + components: + - type: Transform + pos: 22.5,7.5 + parent: 2 + - uid: 6653 + components: + - type: Transform + pos: 21.5,7.5 + parent: 2 + - uid: 6654 + components: + - type: Transform + pos: 20.5,7.5 + parent: 2 + - uid: 6655 + components: + - type: Transform + pos: 19.5,7.5 + parent: 2 + - uid: 6656 + components: + - type: Transform + pos: 18.5,7.5 + parent: 2 + - uid: 6657 + components: + - type: Transform + pos: 27.5,23.5 + parent: 2 + - uid: 6658 + components: + - type: Transform + pos: 13.5,25.5 + parent: 2 + - uid: 6659 + components: + - type: Transform + pos: 28.5,23.5 + parent: 2 + - uid: 6660 + components: + - type: Transform + pos: 29.5,23.5 + parent: 2 + - uid: 6661 + components: + - type: Transform + pos: 29.5,24.5 + parent: 2 + - uid: 6662 + components: + - type: Transform + pos: 29.5,25.5 + parent: 2 + - uid: 6663 + components: + - type: Transform + pos: 29.5,26.5 + parent: 2 + - uid: 6664 + components: + - type: Transform + pos: 28.5,26.5 + parent: 2 + - uid: 6665 + components: + - type: Transform + pos: 27.5,26.5 + parent: 2 + - uid: 6666 + components: + - type: Transform + pos: 26.5,26.5 + parent: 2 + - uid: 6667 + components: + - type: Transform + pos: 25.5,26.5 + parent: 2 + - uid: 6668 + components: + - type: Transform + pos: 24.5,26.5 + parent: 2 + - uid: 6669 + components: + - type: Transform + pos: 23.5,26.5 + parent: 2 + - uid: 6670 + components: + - type: Transform + pos: 22.5,26.5 + parent: 2 + - uid: 6671 + components: + - type: Transform + pos: 21.5,26.5 + parent: 2 + - uid: 6672 + components: + - type: Transform + pos: 20.5,26.5 + parent: 2 + - uid: 6673 + components: + - type: Transform + pos: 19.5,26.5 + parent: 2 + - uid: 6674 + components: + - type: Transform + pos: 18.5,26.5 + parent: 2 + - uid: 6675 + components: + - type: Transform + pos: 17.5,26.5 + parent: 2 + - uid: 6676 + components: + - type: Transform + pos: 16.5,26.5 + parent: 2 + - uid: 6677 + components: + - type: Transform + pos: 15.5,26.5 + parent: 2 + - uid: 6678 + components: + - type: Transform + pos: 14.5,26.5 + parent: 2 + - uid: 6679 + components: + - type: Transform + pos: 13.5,26.5 + parent: 2 + - uid: 6680 + components: + - type: Transform + pos: 13.5,24.5 + parent: 2 + - uid: 6681 + components: + - type: Transform + pos: 13.5,23.5 + parent: 2 + - uid: 6682 + components: + - type: Transform + pos: 13.5,22.5 + parent: 2 + - uid: 6683 + components: + - type: Transform + pos: 29.5,8.5 + parent: 2 + - uid: 6684 + components: + - type: Transform + pos: 29.5,9.5 + parent: 2 + - uid: 6685 + components: + - type: Transform + pos: 29.5,10.5 + parent: 2 + - uid: 6686 + components: + - type: Transform + pos: 29.5,11.5 + parent: 2 + - uid: 6687 + components: + - type: Transform + pos: 29.5,12.5 + parent: 2 + - uid: 6688 + components: + - type: Transform + pos: 29.5,13.5 + parent: 2 + - uid: 6689 + components: + - type: Transform + pos: 29.5,14.5 + parent: 2 + - uid: 6690 + components: + - type: Transform + pos: 29.5,15.5 + parent: 2 + - uid: 6691 + components: + - type: Transform + pos: 29.5,16.5 + parent: 2 + - uid: 6692 + components: + - type: Transform + pos: 30.5,16.5 + parent: 2 + - uid: 6693 + components: + - type: Transform + pos: 31.5,16.5 + parent: 2 + - uid: 6694 + components: + - type: Transform + pos: 32.5,16.5 + parent: 2 + - uid: 6695 + components: + - type: Transform + pos: 33.5,16.5 + parent: 2 + - uid: 6696 + components: + - type: Transform + pos: 29.5,21.5 + parent: 2 + - uid: 6697 + components: + - type: Transform + pos: 34.5,16.5 + parent: 2 + - uid: 6698 + components: + - type: Transform + pos: 35.5,16.5 + parent: 2 + - uid: 6699 + components: + - type: Transform + pos: 36.5,16.5 + parent: 2 + - uid: 6700 + components: + - type: Transform + pos: 36.5,15.5 + parent: 2 + - uid: 6701 + components: + - type: Transform + pos: 36.5,14.5 + parent: 2 + - uid: 6702 + components: + - type: Transform + pos: 36.5,13.5 + parent: 2 + - uid: 6703 + components: + - type: Transform + pos: 36.5,12.5 + parent: 2 + - uid: 6704 + components: + - type: Transform + pos: -24.5,19.5 + parent: 2 + - uid: 6705 + components: + - type: Transform + pos: -24.5,20.5 + parent: 2 + - uid: 6706 + components: + - type: Transform + pos: -25.5,20.5 + parent: 2 + - uid: 6707 + components: + - type: Transform + pos: -26.5,20.5 + parent: 2 + - uid: 6708 + components: + - type: Transform + pos: -27.5,20.5 + parent: 2 + - uid: 6709 + components: + - type: Transform + pos: -23.5,-43.5 + parent: 2 + - uid: 6710 + components: + - type: Transform + pos: -25.5,-43.5 + parent: 2 + - uid: 6711 + components: + - type: Transform + pos: -28.5,-43.5 + parent: 2 + - uid: 6712 + components: + - type: Transform + pos: -27.5,-6.5 + parent: 2 + - uid: 6713 + components: + - type: Transform + pos: -27.5,-7.5 + parent: 2 + - uid: 6714 + components: + - type: Transform + pos: -33.5,-60.5 + parent: 2 + - uid: 6715 + components: + - type: Transform + pos: -32.5,-60.5 + parent: 2 + - uid: 6716 + components: + - type: Transform + pos: -31.5,-60.5 + parent: 2 + - uid: 6717 + components: + - type: Transform + pos: -31.5,-59.5 + parent: 2 + - uid: 6718 + components: + - type: Transform + pos: 12.5,8.5 + parent: 2 + - uid: 6719 + components: + - type: Transform + pos: 11.5,8.5 + parent: 2 + - uid: 6720 + components: + - type: Transform + pos: 10.5,8.5 + parent: 2 + - uid: 6721 + components: + - type: Transform + pos: 9.5,8.5 + parent: 2 + - uid: 6722 + components: + - type: Transform + pos: 8.5,8.5 + parent: 2 + - uid: 6723 + components: + - type: Transform + pos: 7.5,8.5 + parent: 2 + - uid: 6724 + components: + - type: Transform + pos: 6.5,8.5 + parent: 2 + - uid: 6725 + components: + - type: Transform + pos: 6.5,9.5 + parent: 2 + - uid: 6726 + components: + - type: Transform + pos: 6.5,10.5 + parent: 2 + - uid: 6727 + components: + - type: Transform + pos: 6.5,11.5 + parent: 2 + - uid: 6728 + components: + - type: Transform + pos: 9.5,7.5 + parent: 2 + - uid: 6729 + components: + - type: Transform + pos: 9.5,6.5 + parent: 2 + - uid: 6730 + components: + - type: Transform + pos: 9.5,5.5 + parent: 2 + - uid: 6731 + components: + - type: Transform + pos: 9.5,4.5 + parent: 2 + - uid: 6732 + components: + - type: Transform + pos: 10.5,4.5 + parent: 2 + - uid: 6733 + components: + - type: Transform + pos: 10.5,3.5 + parent: 2 + - uid: 6734 + components: + - type: Transform + pos: 10.5,2.5 + parent: 2 + - uid: 6735 + components: + - type: Transform + pos: 10.5,1.5 + parent: 2 + - uid: 6736 + components: + - type: Transform + pos: 10.5,0.5 + parent: 2 + - uid: 6737 + components: + - type: Transform + pos: 10.5,-0.5 + parent: 2 + - uid: 6738 + components: + - type: Transform + pos: 10.5,-1.5 + parent: 2 + - uid: 6739 + components: + - type: Transform + pos: 10.5,-2.5 + parent: 2 + - uid: 6740 + components: + - type: Transform + pos: 9.5,-2.5 + parent: 2 + - uid: 6741 + components: + - type: Transform + pos: 9.5,-3.5 + parent: 2 + - uid: 6742 + components: + - type: Transform + pos: 8.5,-3.5 + parent: 2 + - uid: 6743 + components: + - type: Transform + pos: 8.5,-4.5 + parent: 2 + - uid: 6744 + components: + - type: Transform + pos: 8.5,-5.5 + parent: 2 + - uid: 6745 + components: + - type: Transform + pos: 7.5,-5.5 + parent: 2 + - uid: 6746 + components: + - type: Transform + pos: 7.5,-6.5 + parent: 2 + - uid: 6747 + components: + - type: Transform + pos: 6.5,-6.5 + parent: 2 + - uid: 6748 + components: + - type: Transform + pos: 5.5,-6.5 + parent: 2 + - uid: 6749 + components: + - type: Transform + pos: 5.5,-7.5 + parent: 2 + - uid: 6750 + components: + - type: Transform + pos: 4.5,-7.5 + parent: 2 + - uid: 6751 + components: + - type: Transform + pos: 4.5,-8.5 + parent: 2 + - uid: 6752 + components: + - type: Transform + pos: 4.5,-9.5 + parent: 2 + - uid: 6753 + components: + - type: Transform + pos: 4.5,-10.5 + parent: 2 + - uid: 6754 + components: + - type: Transform + pos: -13.5,-27.5 + parent: 2 + - uid: 6755 + components: + - type: Transform + pos: -15.5,-27.5 + parent: 2 + - uid: 6756 + components: + - type: Transform + pos: -14.5,-27.5 + parent: 2 + - uid: 6757 + components: + - type: Transform + pos: -12.5,-27.5 + parent: 2 + - uid: 6758 + components: + - type: Transform + pos: -11.5,-27.5 + parent: 2 + - uid: 6759 + components: + - type: Transform + pos: -10.5,-27.5 + parent: 2 + - uid: 6760 + components: + - type: Transform + pos: -9.5,-27.5 + parent: 2 + - uid: 6761 + components: + - type: Transform + pos: -8.5,-27.5 + parent: 2 + - uid: 6762 + components: + - type: Transform + pos: -7.5,-27.5 + parent: 2 + - uid: 6763 + components: + - type: Transform + pos: -7.5,-27.5 + parent: 2 + - uid: 6764 + components: + - type: Transform + pos: -7.5,-28.5 + parent: 2 + - uid: 6765 + components: + - type: Transform + pos: -7.5,-29.5 + parent: 2 + - uid: 6766 + components: + - type: Transform + pos: -7.5,-30.5 + parent: 2 + - uid: 6767 + components: + - type: Transform + pos: -7.5,-31.5 + parent: 2 + - uid: 6768 + components: + - type: Transform + pos: -7.5,-32.5 + parent: 2 + - uid: 6769 + components: + - type: Transform + pos: -7.5,-33.5 + parent: 2 + - uid: 6770 + components: + - type: Transform + pos: -7.5,-34.5 + parent: 2 + - uid: 6771 + components: + - type: Transform + pos: -7.5,-35.5 + parent: 2 + - uid: 6772 + components: + - type: Transform + pos: -8.5,-35.5 + parent: 2 + - uid: 6773 + components: + - type: Transform + pos: -9.5,-35.5 + parent: 2 + - uid: 6774 + components: + - type: Transform + pos: -9.5,-34.5 + parent: 2 + - uid: 6775 + components: + - type: Transform + pos: -9.5,-34.5 + parent: 2 + - uid: 6776 + components: + - type: Transform + pos: -0.5,-36.5 + parent: 2 + - uid: 6777 + components: + - type: Transform + pos: 3.5,52.5 + parent: 2 + - uid: 6778 + components: + - type: Transform + pos: -1.5,-36.5 + parent: 2 + - uid: 6779 + components: + - type: Transform + pos: -2.5,-36.5 + parent: 2 + - uid: 6780 + components: + - type: Transform + pos: -3.5,-36.5 + parent: 2 + - uid: 6781 + components: + - type: Transform + pos: -3.5,-37.5 + parent: 2 + - uid: 6782 + components: + - type: Transform + pos: -3.5,-38.5 + parent: 2 + - uid: 6783 + components: + - type: Transform + pos: -4.5,-38.5 + parent: 2 + - uid: 6784 + components: + - type: Transform + pos: -3.5,-61.5 + parent: 2 + - uid: 6785 + components: + - type: Transform + pos: -3.5,-62.5 + parent: 2 + - uid: 6786 + components: + - type: Transform + pos: -3.5,-63.5 + parent: 2 + - uid: 6787 + components: + - type: Transform + pos: -1.5,-63.5 + parent: 2 + - uid: 6788 + components: + - type: Transform + pos: -0.5,-63.5 + parent: 2 + - uid: 6789 + components: + - type: Transform + pos: 0.5,-63.5 + parent: 2 + - uid: 6790 + components: + - type: Transform + pos: 1.5,-63.5 + parent: 2 + - uid: 6791 + components: + - type: Transform + pos: 2.5,-63.5 + parent: 2 + - uid: 6792 + components: + - type: Transform + pos: 3.5,-63.5 + parent: 2 + - uid: 6793 + components: + - type: Transform + pos: 4.5,-63.5 + parent: 2 + - uid: 6794 + components: + - type: Transform + pos: 5.5,-63.5 + parent: 2 + - uid: 6795 + components: + - type: Transform + pos: 6.5,-63.5 + parent: 2 + - uid: 6796 + components: + - type: Transform + pos: 7.5,-63.5 + parent: 2 + - uid: 6797 + components: + - type: Transform + pos: 8.5,-63.5 + parent: 2 + - uid: 6798 + components: + - type: Transform + pos: 8.5,-62.5 + parent: 2 + - uid: 6799 + components: + - type: Transform + pos: 9.5,-62.5 + parent: 2 + - uid: 6800 + components: + - type: Transform + pos: -2.5,48.5 + parent: 2 + - uid: 6801 + components: + - type: Transform + pos: -3.5,48.5 + parent: 2 + - uid: 6802 + components: + - type: Transform + pos: -2.5,49.5 + parent: 2 + - uid: 6803 + components: + - type: Transform + pos: -3.5,47.5 + parent: 2 + - uid: 6804 + components: + - type: Transform + pos: -3.5,46.5 + parent: 2 + - uid: 6805 + components: + - type: Transform + pos: -3.5,45.5 + parent: 2 + - uid: 6806 + components: + - type: Transform + pos: -3.5,44.5 + parent: 2 + - uid: 6807 + components: + - type: Transform + pos: -3.5,43.5 + parent: 2 + - uid: 6808 + components: + - type: Transform + pos: -3.5,42.5 + parent: 2 + - uid: 6809 + components: + - type: Transform + pos: -4.5,42.5 + parent: 2 + - uid: 6810 + components: + - type: Transform + pos: -5.5,42.5 + parent: 2 + - uid: 6811 + components: + - type: Transform + pos: -6.5,42.5 + parent: 2 + - uid: 6812 + components: + - type: Transform + pos: -6.5,43.5 + parent: 2 + - uid: 6813 + components: + - type: Transform + pos: -6.5,44.5 + parent: 2 + - uid: 6814 + components: + - type: Transform + pos: -7.5,44.5 + parent: 2 + - uid: 6815 + components: + - type: Transform + pos: -1.5,42.5 + parent: 2 + - uid: 6816 + components: + - type: Transform + pos: -0.5,42.5 + parent: 2 + - uid: 6817 + components: + - type: Transform + pos: 0.5,42.5 + parent: 2 + - uid: 6818 + components: + - type: Transform + pos: 1.5,42.5 + parent: 2 + - uid: 6819 + components: + - type: Transform + pos: 1.5,43.5 + parent: 2 + - uid: 6820 + components: + - type: Transform + pos: 1.5,44.5 + parent: 2 + - uid: 6821 + components: + - type: Transform + pos: 1.5,45.5 + parent: 2 + - uid: 6822 + components: + - type: Transform + pos: 1.5,46.5 + parent: 2 + - uid: 6823 + components: + - type: Transform + pos: 1.5,47.5 + parent: 2 + - uid: 6824 + components: + - type: Transform + pos: 1.5,48.5 + parent: 2 + - uid: 6825 + components: + - type: Transform + pos: 1.5,49.5 + parent: 2 + - uid: 6826 + components: + - type: Transform + pos: 1.5,50.5 + parent: 2 + - uid: 6827 + components: + - type: Transform + pos: 1.5,51.5 + parent: 2 + - uid: 6828 + components: + - type: Transform + pos: 1.5,52.5 + parent: 2 + - uid: 6829 + components: + - type: Transform + pos: 2.5,52.5 + parent: 2 + - uid: 6830 + components: + - type: Transform + pos: 5.5,52.5 + parent: 2 + - uid: 6831 + components: + - type: Transform + pos: 4.5,52.5 + parent: 2 + - uid: 6832 + components: + - type: Transform + pos: 6.5,53.5 + parent: 2 + - uid: 6833 + components: + - type: Transform + pos: 6.5,52.5 + parent: 2 + - uid: 6834 + components: + - type: Transform + pos: 6.5,53.5 + parent: 2 + - uid: 6835 + components: + - type: Transform + pos: 6.5,54.5 + parent: 2 + - uid: 6836 + components: + - type: Transform + pos: 6.5,55.5 + parent: 2 + - uid: 6837 + components: + - type: Transform + pos: 7.5,55.5 + parent: 2 + - uid: 6838 + components: + - type: Transform + pos: 8.5,55.5 + parent: 2 + - uid: 6839 + components: + - type: Transform + pos: 9.5,55.5 + parent: 2 + - uid: 6840 + components: + - type: Transform + pos: 9.5,56.5 + parent: 2 + - uid: 6841 + components: + - type: Transform + pos: 9.5,57.5 + parent: 2 + - uid: 6842 + components: + - type: Transform + pos: 6.5,54.5 + parent: 2 + - uid: 6843 + components: + - type: Transform + pos: 6.5,55.5 + parent: 2 + - uid: 6844 + components: + - type: Transform + pos: 7.5,55.5 + parent: 2 + - uid: 6845 + components: + - type: Transform + pos: 8.5,55.5 + parent: 2 + - uid: 6846 + components: + - type: Transform + pos: 9.5,55.5 + parent: 2 + - uid: 6847 + components: + - type: Transform + pos: 9.5,56.5 + parent: 2 + - uid: 6848 + components: + - type: Transform + pos: 9.5,57.5 + parent: 2 + - uid: 6849 + components: + - type: Transform + pos: 7.5,52.5 + parent: 2 + - uid: 6850 + components: + - type: Transform + pos: 8.5,52.5 + parent: 2 + - uid: 6851 + components: + - type: Transform + pos: 8.5,51.5 + parent: 2 + - uid: 6852 + components: + - type: Transform + pos: 9.5,51.5 + parent: 2 + - uid: 6853 + components: + - type: Transform + pos: -6.5,44.5 + parent: 2 + - uid: 6854 + components: + - type: Transform + pos: 2.5,53.5 + parent: 2 + - uid: 6855 + components: + - type: Transform + pos: -10.5,50.5 + parent: 2 + - uid: 6856 + components: + - type: Transform + pos: -10.5,51.5 + parent: 2 + - uid: 6857 + components: + - type: Transform + pos: -9.5,51.5 + parent: 2 + - uid: 6858 + components: + - type: Transform + pos: 3.5,26.5 + parent: 2 + - uid: 6859 + components: + - type: Transform + pos: -1.5,41.5 + parent: 2 + - uid: 6860 + components: + - type: Transform + pos: 1.5,42.5 + parent: 2 + - uid: 6861 + components: + - type: Transform + pos: 5.5,30.5 + parent: 2 + - uid: 6862 + components: + - type: Transform + pos: 6.5,29.5 + parent: 2 + - uid: 6863 + components: + - type: Transform + pos: 6.5,30.5 + parent: 2 + - uid: 6864 + components: + - type: Transform + pos: 7.5,29.5 + parent: 2 + - uid: 6865 + components: + - type: Transform + pos: 8.5,29.5 + parent: 2 + - uid: 6866 + components: + - type: Transform + pos: 9.5,29.5 + parent: 2 + - uid: 6867 + components: + - type: Transform + pos: 5.5,30.5 + parent: 2 + - uid: 6868 + components: + - type: Transform + pos: 8.5,35.5 + parent: 2 + - uid: 6869 + components: + - type: Transform + pos: 7.5,35.5 + parent: 2 + - uid: 6870 + components: + - type: Transform + pos: 7.5,35.5 + parent: 2 + - uid: 6871 + components: + - type: Transform + pos: 7.5,36.5 + parent: 2 + - uid: 6872 + components: + - type: Transform + pos: 7.5,37.5 + parent: 2 + - uid: 6873 + components: + - type: Transform + pos: 6.5,37.5 + parent: 2 + - uid: 6874 + components: + - type: Transform + pos: 6.5,38.5 + parent: 2 + - uid: 6875 + components: + - type: Transform + pos: 6.5,39.5 + parent: 2 + - uid: 6876 + components: + - type: Transform + pos: 6.5,40.5 + parent: 2 + - uid: 6877 + components: + - type: Transform + pos: 6.5,41.5 + parent: 2 + - uid: 6878 + components: + - type: Transform + pos: 6.5,42.5 + parent: 2 + - uid: 6879 + components: + - type: Transform + pos: 6.5,43.5 + parent: 2 + - uid: 6880 + components: + - type: Transform + pos: 7.5,43.5 + parent: 2 + - uid: 6881 + components: + - type: Transform + pos: 8.5,43.5 + parent: 2 + - uid: 6882 + components: + - type: Transform + pos: 9.5,43.5 + parent: 2 + - uid: 6883 + components: + - type: Transform + pos: -33.5,15.5 + parent: 2 + - uid: 6884 + components: + - type: Transform + pos: -33.5,9.5 + parent: 2 + - uid: 6885 + components: + - type: Transform + pos: -33.5,8.5 + parent: 2 + - uid: 6886 + components: + - type: Transform + pos: -33.5,10.5 + parent: 2 + - uid: 6887 + components: + - type: Transform + pos: -33.5,11.5 + parent: 2 + - uid: 6888 + components: + - type: Transform + pos: -33.5,12.5 + parent: 2 + - uid: 6889 + components: + - type: Transform + pos: -33.5,13.5 + parent: 2 + - uid: 6890 + components: + - type: Transform + pos: -33.5,14.5 + parent: 2 + - uid: 6891 + components: + - type: Transform + pos: -34.5,15.5 + parent: 2 + - uid: 6892 + components: + - type: Transform + pos: -35.5,15.5 + parent: 2 + - uid: 6893 + components: + - type: Transform + pos: -24.5,-8.5 + parent: 2 + - uid: 6894 + components: + - type: Transform + pos: -30.5,15.5 + parent: 2 + - uid: 6895 + components: + - type: Transform + pos: -36.5,15.5 + parent: 2 + - uid: 6896 + components: + - type: Transform + pos: -40.5,9.5 + parent: 2 + - uid: 6897 + components: + - type: Transform + pos: -40.5,10.5 + parent: 2 + - uid: 6898 + components: + - type: Transform + pos: -40.5,8.5 + parent: 2 + - uid: 6899 + components: + - type: Transform + pos: -40.5,7.5 + parent: 2 + - uid: 6900 + components: + - type: Transform + pos: -40.5,11.5 + parent: 2 + - uid: 6901 + components: + - type: Transform + pos: -40.5,12.5 + parent: 2 + - uid: 6902 + components: + - type: Transform + pos: -40.5,13.5 + parent: 2 + - uid: 6903 + components: + - type: Transform + pos: -40.5,14.5 + parent: 2 + - uid: 6904 + components: + - type: Transform + pos: -40.5,13.5 + parent: 2 + - uid: 6905 + components: + - type: Transform + pos: -41.5,14.5 + parent: 2 + - uid: 6906 + components: + - type: Transform + pos: -42.5,14.5 + parent: 2 + - uid: 6907 + components: + - type: Transform + pos: -42.5,15.5 + parent: 2 + - uid: 6908 + components: + - type: Transform + pos: -42.5,16.5 + parent: 2 + - uid: 6909 + components: + - type: Transform + pos: -42.5,17.5 + parent: 2 + - uid: 6910 + components: + - type: Transform + pos: -43.5,17.5 + parent: 2 + - uid: 6911 + components: + - type: Transform + pos: -43.5,18.5 + parent: 2 + - uid: 6912 + components: + - type: Transform + pos: -3.5,76.5 + parent: 2 + - uid: 6913 + components: + - type: Transform + pos: -3.5,76.5 + parent: 2 + - uid: 6914 + components: + - type: Transform + pos: -3.5,75.5 + parent: 2 + - uid: 6915 + components: + - type: Transform + pos: -3.5,74.5 + parent: 2 + - uid: 6916 + components: + - type: Transform + pos: -3.5,73.5 + parent: 2 + - uid: 6917 + components: + - type: Transform + pos: -26.5,29.5 + parent: 2 + - uid: 6918 + components: + - type: Transform + pos: -23.5,-8.5 + parent: 2 + - uid: 6919 + components: + - type: Transform + pos: -22.5,-8.5 + parent: 2 + - uid: 6920 + components: + - type: Transform + pos: -21.5,-8.5 + parent: 2 + - uid: 6921 + components: + - type: Transform + pos: -20.5,-8.5 + parent: 2 + - uid: 6922 + components: + - type: Transform + pos: -19.5,-8.5 + parent: 2 + - uid: 6923 + components: + - type: Transform + pos: -18.5,-8.5 + parent: 2 + - uid: 6924 + components: + - type: Transform + pos: -17.5,-8.5 + parent: 2 + - uid: 6925 + components: + - type: Transform + pos: -16.5,-8.5 + parent: 2 + - uid: 6926 + components: + - type: Transform + pos: -15.5,-8.5 + parent: 2 + - uid: 6927 + components: + - type: Transform + pos: -15.5,-9.5 + parent: 2 + - uid: 6928 + components: + - type: Transform + pos: -15.5,-10.5 + parent: 2 + - uid: 6929 + components: + - type: Transform + pos: -15.5,-11.5 + parent: 2 + - uid: 6930 + components: + - type: Transform + pos: -30.5,-43.5 + parent: 2 + - uid: 6931 + components: + - type: Transform + pos: -31.5,-43.5 + parent: 2 + - uid: 6932 + components: + - type: Transform + pos: -32.5,-43.5 + parent: 2 + - uid: 6933 + components: + - type: Transform + pos: -24.5,18.5 + parent: 2 + - uid: 6934 + components: + - type: Transform + pos: -25.5,18.5 + parent: 2 + - uid: 6935 + components: + - type: Transform + pos: -26.5,18.5 + parent: 2 + - uid: 6936 + components: + - type: Transform + pos: -27.5,20.5 + parent: 2 + - uid: 6937 + components: + - type: Transform + pos: -27.5,21.5 + parent: 2 + - uid: 6938 + components: + - type: Transform + pos: -27.5,22.5 + parent: 2 + - uid: 6939 + components: + - type: Transform + pos: -27.5,23.5 + parent: 2 + - uid: 6940 + components: + - type: Transform + pos: -27.5,24.5 + parent: 2 + - uid: 6941 + components: + - type: Transform + pos: -27.5,25.5 + parent: 2 + - uid: 6942 + components: + - type: Transform + pos: -27.5,26.5 + parent: 2 + - uid: 6943 + components: + - type: Transform + pos: -27.5,27.5 + parent: 2 + - uid: 6944 + components: + - type: Transform + pos: -27.5,28.5 + parent: 2 + - uid: 6945 + components: + - type: Transform + pos: -27.5,29.5 + parent: 2 + - uid: 6946 + components: + - type: Transform + pos: -25.5,29.5 + parent: 2 + - uid: 6947 + components: + - type: Transform + pos: -25.5,31.5 + parent: 2 + - uid: 6948 + components: + - type: Transform + pos: -25.5,30.5 + parent: 2 + - uid: 6949 + components: + - type: Transform + pos: -25.5,31.5 + parent: 2 + - uid: 6950 + components: + - type: Transform + pos: -22.5,16.5 + parent: 2 + - uid: 6951 + components: + - type: Transform + pos: -22.5,15.5 + parent: 2 + - uid: 6952 + components: + - type: Transform + pos: -21.5,15.5 + parent: 2 + - uid: 6953 + components: + - type: Transform + pos: -20.5,15.5 + parent: 2 + - uid: 6954 + components: + - type: Transform + pos: -20.5,16.5 + parent: 2 + - uid: 6955 + components: + - type: Transform + pos: -20.5,17.5 + parent: 2 + - uid: 6956 + components: + - type: Transform + pos: -20.5,18.5 + parent: 2 + - uid: 6957 + components: + - type: Transform + pos: -20.5,16.5 + parent: 2 + - uid: 6958 + components: + - type: Transform + pos: -20.5,17.5 + parent: 2 + - uid: 6959 + components: + - type: Transform + pos: -20.5,18.5 + parent: 2 + - uid: 6960 + components: + - type: Transform + pos: -20.5,19.5 + parent: 2 + - uid: 6961 + components: + - type: Transform + pos: -20.5,20.5 + parent: 2 + - uid: 6962 + components: + - type: Transform + pos: -20.5,21.5 + parent: 2 + - uid: 6963 + components: + - type: Transform + pos: -20.5,22.5 + parent: 2 + - uid: 6964 + components: + - type: Transform + pos: -20.5,23.5 + parent: 2 + - uid: 6965 + components: + - type: Transform + pos: -24.5,29.5 + parent: 2 + - uid: 6966 + components: + - type: Transform + pos: -23.5,29.5 + parent: 2 + - uid: 6967 + components: + - type: Transform + pos: -23.5,28.5 + parent: 2 + - uid: 6968 + components: + - type: Transform + pos: -22.5,28.5 + parent: 2 + - uid: 6969 + components: + - type: Transform + pos: -21.5,28.5 + parent: 2 + - uid: 6970 + components: + - type: Transform + pos: -20.5,28.5 + parent: 2 + - uid: 6971 + components: + - type: Transform + pos: -19.5,28.5 + parent: 2 + - uid: 6972 + components: + - type: Transform + pos: -19.5,28.5 + parent: 2 + - uid: 6973 + components: + - type: Transform + pos: -19.5,29.5 + parent: 2 + - uid: 6974 + components: + - type: Transform + pos: -19.5,30.5 + parent: 2 + - uid: 6975 + components: + - type: Transform + pos: -19.5,31.5 + parent: 2 + - uid: 6976 + components: + - type: Transform + pos: -19.5,32.5 + parent: 2 + - uid: 6977 + components: + - type: Transform + pos: -19.5,33.5 + parent: 2 + - uid: 6978 + components: + - type: Transform + pos: -19.5,34.5 + parent: 2 + - uid: 6979 + components: + - type: Transform + pos: -19.5,35.5 + parent: 2 + - uid: 6980 + components: + - type: Transform + pos: -19.5,36.5 + parent: 2 + - uid: 6981 + components: + - type: Transform + pos: -19.5,37.5 + parent: 2 + - uid: 6982 + components: + - type: Transform + pos: -23.5,29.5 + parent: 2 + - uid: 6983 + components: + - type: Transform + pos: -23.5,30.5 + parent: 2 + - uid: 6984 + components: + - type: Transform + pos: -23.5,31.5 + parent: 2 + - uid: 6985 + components: + - type: Transform + pos: -23.5,32.5 + parent: 2 + - uid: 6986 + components: + - type: Transform + pos: -23.5,33.5 + parent: 2 + - uid: 6987 + components: + - type: Transform + pos: -23.5,34.5 + parent: 2 + - uid: 6988 + components: + - type: Transform + pos: -23.5,35.5 + parent: 2 + - uid: 6989 + components: + - type: Transform + pos: -24.5,35.5 + parent: 2 + - uid: 6990 + components: + - type: Transform + pos: -25.5,35.5 + parent: 2 + - uid: 6991 + components: + - type: Transform + pos: -26.5,35.5 + parent: 2 + - uid: 6992 + components: + - type: Transform + pos: -27.5,35.5 + parent: 2 + - uid: 6993 + components: + - type: Transform + pos: -28.5,35.5 + parent: 2 + - uid: 6994 + components: + - type: Transform + pos: -29.5,35.5 + parent: 2 + - uid: 6995 + components: + - type: Transform + pos: -30.5,35.5 + parent: 2 + - uid: 6996 + components: + - type: Transform + pos: -30.5,35.5 + parent: 2 + - uid: 6997 + components: + - type: Transform + pos: -30.5,36.5 + parent: 2 + - uid: 6998 + components: + - type: Transform + pos: -30.5,37.5 + parent: 2 + - uid: 6999 + components: + - type: Transform + pos: -30.5,38.5 + parent: 2 + - uid: 7000 + components: + - type: Transform + pos: -30.5,39.5 + parent: 2 + - uid: 7001 + components: + - type: Transform + pos: -30.5,40.5 + parent: 2 + - uid: 7002 + components: + - type: Transform + pos: -23.5,36.5 + parent: 2 + - uid: 7003 + components: + - type: Transform + pos: -23.5,37.5 + parent: 2 + - uid: 7004 + components: + - type: Transform + pos: -23.5,37.5 + parent: 2 + - uid: 7005 + components: + - type: Transform + pos: -23.5,36.5 + parent: 2 + - uid: 7006 + components: + - type: Transform + pos: -23.5,38.5 + parent: 2 + - uid: 7007 + components: + - type: Transform + pos: -22.5,38.5 + parent: 2 + - uid: 7008 + components: + - type: Transform + pos: -21.5,38.5 + parent: 2 + - uid: 7009 + components: + - type: Transform + pos: -21.5,39.5 + parent: 2 + - uid: 7010 + components: + - type: Transform + pos: -21.5,40.5 + parent: 2 + - uid: 7011 + components: + - type: Transform + pos: -21.5,41.5 + parent: 2 + - uid: 7012 + components: + - type: Transform + pos: -20.5,41.5 + parent: 2 + - uid: 7013 + components: + - type: Transform + pos: -28.5,29.5 + parent: 2 + - uid: 7014 + components: + - type: Transform + pos: -28.5,29.5 + parent: 2 + - uid: 7015 + components: + - type: Transform + pos: -29.5,29.5 + parent: 2 + - uid: 7016 + components: + - type: Transform + pos: -30.5,29.5 + parent: 2 + - uid: 7017 + components: + - type: Transform + pos: -31.5,29.5 + parent: 2 + - uid: 7018 + components: + - type: Transform + pos: -32.5,29.5 + parent: 2 + - uid: 7019 + components: + - type: Transform + pos: -33.5,29.5 + parent: 2 + - uid: 7020 + components: + - type: Transform + pos: -34.5,29.5 + parent: 2 + - uid: 7021 + components: + - type: Transform + pos: -35.5,29.5 + parent: 2 + - uid: 7022 + components: + - type: Transform + pos: -36.5,29.5 + parent: 2 + - uid: 7023 + components: + - type: Transform + pos: -36.5,29.5 + parent: 2 + - uid: 7024 + components: + - type: Transform + pos: -36.5,28.5 + parent: 2 + - uid: 7025 + components: + - type: Transform + pos: -36.5,27.5 + parent: 2 + - uid: 7026 + components: + - type: Transform + pos: -36.5,26.5 + parent: 2 + - uid: 7027 + components: + - type: Transform + pos: -36.5,25.5 + parent: 2 + - uid: 7028 + components: + - type: Transform + pos: -36.5,24.5 + parent: 2 + - uid: 7029 + components: + - type: Transform + pos: -36.5,23.5 + parent: 2 + - uid: 7030 + components: + - type: Transform + pos: -36.5,22.5 + parent: 2 + - uid: 7031 + components: + - type: Transform + pos: -36.5,21.5 + parent: 2 + - uid: 7032 + components: + - type: Transform + pos: -36.5,20.5 + parent: 2 + - uid: 7033 + components: + - type: Transform + pos: -36.5,19.5 + parent: 2 + - uid: 7034 + components: + - type: Transform + pos: -36.5,18.5 + parent: 2 + - uid: 7035 + components: + - type: Transform + pos: -20.5,19.5 + parent: 2 + - uid: 7036 + components: + - type: Transform + pos: -19.5,19.5 + parent: 2 + - uid: 7037 + components: + - type: Transform + pos: -18.5,19.5 + parent: 2 + - uid: 7038 + components: + - type: Transform + pos: -17.5,19.5 + parent: 2 + - uid: 7039 + components: + - type: Transform + pos: -16.5,19.5 + parent: 2 + - uid: 7040 + components: + - type: Transform + pos: -15.5,19.5 + parent: 2 + - uid: 7041 + components: + - type: Transform + pos: -14.5,19.5 + parent: 2 + - uid: 7042 + components: + - type: Transform + pos: -13.5,19.5 + parent: 2 + - uid: 7043 + components: + - type: Transform + pos: -12.5,19.5 + parent: 2 + - uid: 7044 + components: + - type: Transform + pos: -11.5,19.5 + parent: 2 + - uid: 7045 + components: + - type: Transform + pos: -10.5,19.5 + parent: 2 + - uid: 7046 + components: + - type: Transform + pos: -9.5,19.5 + parent: 2 + - uid: 7047 + components: + - type: Transform + pos: -9.5,18.5 + parent: 2 + - uid: 7048 + components: + - type: Transform + pos: -9.5,17.5 + parent: 2 + - uid: 7049 + components: + - type: Transform + pos: -9.5,15.5 + parent: 2 + - uid: 7050 + components: + - type: Transform + pos: -9.5,16.5 + parent: 2 + - uid: 7051 + components: + - type: Transform + pos: -9.5,17.5 + parent: 2 + - uid: 7052 + components: + - type: Transform + pos: -9.5,14.5 + parent: 2 + - uid: 7053 + components: + - type: Transform + pos: -10.5,14.5 + parent: 2 + - uid: 7054 + components: + - type: Transform + pos: -11.5,14.5 + parent: 2 + - uid: 7055 + components: + - type: Transform + pos: -11.5,13.5 + parent: 2 + - uid: 7056 + components: + - type: Transform + pos: -11.5,12.5 + parent: 2 + - uid: 7057 + components: + - type: Transform + pos: -11.5,11.5 + parent: 2 + - uid: 7058 + components: + - type: Transform + pos: -11.5,10.5 + parent: 2 + - uid: 7059 + components: + - type: Transform + pos: -11.5,10.5 + parent: 2 + - uid: 7060 + components: + - type: Transform + pos: -10.5,10.5 + parent: 2 + - uid: 7061 + components: + - type: Transform + pos: -9.5,10.5 + parent: 2 + - uid: 7062 + components: + - type: Transform + pos: -8.5,10.5 + parent: 2 + - uid: 7063 + components: + - type: Transform + pos: 29.5,27.5 + parent: 2 + - uid: 7064 + components: + - type: Transform + pos: 29.5,27.5 + parent: 2 + - uid: 7065 + components: + - type: Transform + pos: 30.5,27.5 + parent: 2 + - uid: 7066 + components: + - type: Transform + pos: 31.5,27.5 + parent: 2 + - uid: 7067 + components: + - type: Transform + pos: 32.5,27.5 + parent: 2 + - uid: 7068 + components: + - type: Transform + pos: 33.5,27.5 + parent: 2 + - uid: 7069 + components: + - type: Transform + pos: 34.5,27.5 + parent: 2 + - uid: 7070 + components: + - type: Transform + pos: 35.5,27.5 + parent: 2 + - uid: 7071 + components: + - type: Transform + pos: 36.5,27.5 + parent: 2 + - uid: 7072 + components: + - type: Transform + pos: 37.5,27.5 + parent: 2 + - uid: 7073 + components: + - type: Transform + pos: 38.5,27.5 + parent: 2 + - uid: 7074 + components: + - type: Transform + pos: 39.5,27.5 + parent: 2 + - uid: 7075 + components: + - type: Transform + pos: 40.5,27.5 + parent: 2 + - uid: 7076 + components: + - type: Transform + pos: 40.5,26.5 + parent: 2 + - uid: 7077 + components: + - type: Transform + pos: 41.5,26.5 + parent: 2 + - uid: 7078 + components: + - type: Transform + pos: 29.5,28.5 + parent: 2 + - uid: 7079 + components: + - type: Transform + pos: 29.5,27.5 + parent: 2 + - uid: 7080 + components: + - type: Transform + pos: 29.5,29.5 + parent: 2 + - uid: 7081 + components: + - type: Transform + pos: 29.5,30.5 + parent: 2 + - uid: 7082 + components: + - type: Transform + pos: 29.5,31.5 + parent: 2 + - uid: 7083 + components: + - type: Transform + pos: 29.5,31.5 + parent: 2 + - uid: 7084 + components: + - type: Transform + pos: 28.5,31.5 + parent: 2 + - uid: 7085 + components: + - type: Transform + pos: 27.5,31.5 + parent: 2 + - uid: 7086 + components: + - type: Transform + pos: 26.5,31.5 + parent: 2 + - uid: 7087 + components: + - type: Transform + pos: 25.5,31.5 + parent: 2 + - uid: 7088 + components: + - type: Transform + pos: 24.5,31.5 + parent: 2 + - uid: 7089 + components: + - type: Transform + pos: 23.5,31.5 + parent: 2 + - uid: 7090 + components: + - type: Transform + pos: 22.5,31.5 + parent: 2 + - uid: 7091 + components: + - type: Transform + pos: 21.5,31.5 + parent: 2 + - uid: 7092 + components: + - type: Transform + pos: 20.5,31.5 + parent: 2 + - uid: 7093 + components: + - type: Transform + pos: 20.5,31.5 + parent: 2 + - uid: 7094 + components: + - type: Transform + pos: 20.5,32.5 + parent: 2 + - uid: 7095 + components: + - type: Transform + pos: 20.5,33.5 + parent: 2 + - uid: 7096 + components: + - type: Transform + pos: 20.5,34.5 + parent: 2 + - uid: 7097 + components: + - type: Transform + pos: 20.5,35.5 + parent: 2 + - uid: 7098 + components: + - type: Transform + pos: 20.5,36.5 + parent: 2 + - uid: 7099 + components: + - type: Transform + pos: 20.5,37.5 + parent: 2 + - uid: 7100 + components: + - type: Transform + pos: 19.5,37.5 + parent: 2 + - uid: 7101 + components: + - type: Transform + pos: 18.5,37.5 + parent: 2 + - uid: 7102 + components: + - type: Transform + pos: 12.5,16.5 + parent: 2 + - uid: 7103 + components: + - type: Transform + pos: 29.5,32.5 + parent: 2 + - uid: 7104 + components: + - type: Transform + pos: 29.5,33.5 + parent: 2 + - uid: 7105 + components: + - type: Transform + pos: 29.5,34.5 + parent: 2 + - uid: 7106 + components: + - type: Transform + pos: 28.5,34.5 + parent: 2 + - uid: 7107 + components: + - type: Transform + pos: 28.5,34.5 + parent: 2 + - uid: 7108 + components: + - type: Transform + pos: 27.5,34.5 + parent: 2 + - uid: 7109 + components: + - type: Transform + pos: 25.5,0.5 + parent: 2 + - uid: 7110 + components: + - type: Transform + pos: 26.5,0.5 + parent: 2 + - uid: 7111 + components: + - type: Transform + pos: 27.5,0.5 + parent: 2 + - uid: 7112 + components: + - type: Transform + pos: 28.5,0.5 + parent: 2 + - uid: 7113 + components: + - type: Transform + pos: 29.5,0.5 + parent: 2 + - uid: 7114 + components: + - type: Transform + pos: 30.5,0.5 + parent: 2 + - uid: 7115 + components: + - type: Transform + pos: 31.5,0.5 + parent: 2 + - uid: 7116 + components: + - type: Transform + pos: 32.5,0.5 + parent: 2 + - uid: 7117 + components: + - type: Transform + pos: 33.5,0.5 + parent: 2 + - uid: 7118 + components: + - type: Transform + pos: 34.5,0.5 + parent: 2 + - uid: 7119 + components: + - type: Transform + pos: 34.5,0.5 + parent: 2 + - uid: 7120 + components: + - type: Transform + pos: 34.5,-0.5 + parent: 2 + - uid: 7121 + components: + - type: Transform + pos: 34.5,-1.5 + parent: 2 + - uid: 7122 + components: + - type: Transform + pos: 34.5,-2.5 + parent: 2 + - uid: 7123 + components: + - type: Transform + pos: 34.5,-3.5 + parent: 2 + - uid: 7124 + components: + - type: Transform + pos: 34.5,-4.5 + parent: 2 + - uid: 7125 + components: + - type: Transform + pos: 34.5,-5.5 + parent: 2 + - uid: 7126 + components: + - type: Transform + pos: 34.5,-5.5 + parent: 2 + - uid: 7127 + components: + - type: Transform + pos: 33.5,-5.5 + parent: 2 + - uid: 7128 + components: + - type: Transform + pos: 32.5,-5.5 + parent: 2 + - uid: 7129 + components: + - type: Transform + pos: 31.5,-5.5 + parent: 2 + - uid: 7130 + components: + - type: Transform + pos: -29.5,-31.5 + parent: 2 + - uid: 7131 + components: + - type: Transform + pos: -34.5,5.5 + parent: 2 + - uid: 7132 + components: + - type: Transform + pos: -35.5,5.5 + parent: 2 + - uid: 7133 + components: + - type: Transform + pos: -29.5,-30.5 + parent: 2 + - uid: 7134 + components: + - type: Transform + pos: -29.5,-29.5 + parent: 2 + - uid: 7135 + components: + - type: Transform + pos: -29.5,-28.5 + parent: 2 + - uid: 7136 + components: + - type: Transform + pos: -29.5,-27.5 + parent: 2 + - uid: 7137 + components: + - type: Transform + pos: -29.5,-26.5 + parent: 2 + - uid: 7138 + components: + - type: Transform + pos: -29.5,-25.5 + parent: 2 + - uid: 7139 + components: + - type: Transform + pos: -29.5,-24.5 + parent: 2 + - uid: 7140 + components: + - type: Transform + pos: -29.5,-23.5 + parent: 2 + - uid: 7141 + components: + - type: Transform + pos: -29.5,-22.5 + parent: 2 + - uid: 7142 + components: + - type: Transform + pos: -30.5,-22.5 + parent: 2 + - uid: 7143 + components: + - type: Transform + pos: -31.5,-22.5 + parent: 2 + - uid: 7144 + components: + - type: Transform + pos: -31.5,-22.5 + parent: 2 + - uid: 7145 + components: + - type: Transform + pos: -31.5,-21.5 + parent: 2 + - uid: 7146 + components: + - type: Transform + pos: -31.5,-20.5 + parent: 2 + - uid: 7147 + components: + - type: Transform + pos: -31.5,-19.5 + parent: 2 + - uid: 7148 + components: + - type: Transform + pos: -19.5,1.5 + parent: 2 + - uid: 7149 + components: + - type: Transform + pos: -18.5,1.5 + parent: 2 + - uid: 7150 + components: + - type: Transform + pos: -18.5,2.5 + parent: 2 + - uid: 7151 + components: + - type: Transform + pos: -18.5,3.5 + parent: 2 + - uid: 7152 + components: + - type: Transform + pos: -14.5,-11.5 + parent: 2 + - uid: 7153 + components: + - type: Transform + pos: -2.5,42.5 + parent: 2 + - uid: 7154 + components: + - type: Transform + pos: 2.5,54.5 + parent: 2 + - uid: 7155 + components: + - type: Transform + pos: 2.5,55.5 + parent: 2 + - uid: 7156 + components: + - type: Transform + pos: 0.5,59.5 + parent: 2 + - uid: 7157 + components: + - type: Transform + pos: -3.5,56.5 + parent: 2 + - uid: 7158 + components: + - type: Transform + pos: 2.5,57.5 + parent: 2 + - uid: 7159 + components: + - type: Transform + pos: 1.5,59.5 + parent: 2 + - uid: 7160 + components: + - type: Transform + pos: -0.5,59.5 + parent: 2 + - uid: 7161 + components: + - type: Transform + pos: 2.5,58.5 + parent: 2 + - uid: 7162 + components: + - type: Transform + pos: 2.5,59.5 + parent: 2 + - uid: 7163 + components: + - type: Transform + pos: -1.5,59.5 + parent: 2 + - uid: 7164 + components: + - type: Transform + pos: -2.5,59.5 + parent: 2 + - uid: 7165 + components: + - type: Transform + pos: -3.5,59.5 + parent: 2 + - uid: 7166 + components: + - type: Transform + pos: -3.5,55.5 + parent: 2 + - uid: 7167 + components: + - type: Transform + pos: -4.5,55.5 + parent: 2 + - uid: 7168 + components: + - type: Transform + pos: -3.5,58.5 + parent: 2 + - uid: 7169 + components: + - type: Transform + pos: -3.5,57.5 + parent: 2 + - uid: 7170 + components: + - type: Transform + pos: -5.5,55.5 + parent: 2 + - uid: 7171 + components: + - type: Transform + pos: -6.5,55.5 + parent: 2 + - uid: 7172 + components: + - type: Transform + pos: -6.5,54.5 + parent: 2 + - uid: 7173 + components: + - type: Transform + pos: -6.5,53.5 + parent: 2 + - uid: 7174 + components: + - type: Transform + pos: -6.5,52.5 + parent: 2 + - uid: 7175 + components: + - type: Transform + pos: -7.5,52.5 + parent: 2 + - uid: 7176 + components: + - type: Transform + pos: -7.5,51.5 + parent: 2 + - uid: 7177 + components: + - type: Transform + pos: -7.5,50.5 + parent: 2 + - uid: 7178 + components: + - type: Transform + pos: -8.5,50.5 + parent: 2 + - uid: 7179 + components: + - type: Transform + pos: -9.5,50.5 + parent: 2 + - uid: 7180 + components: + - type: Transform + pos: -5.5,-64.5 + parent: 2 + - uid: 7181 + components: + - type: Transform + pos: -5.5,-65.5 + parent: 2 + - uid: 7182 + components: + - type: Transform + pos: -4.5,-63.5 + parent: 2 + - uid: 7183 + components: + - type: Transform + pos: -5.5,-63.5 + parent: 2 + - uid: 7184 + components: + - type: Transform + pos: -5.5,-66.5 + parent: 2 + - uid: 7185 + components: + - type: Transform + pos: 7.5,-64.5 + parent: 2 + - uid: 7186 + components: + - type: Transform + pos: -4.5,-69.5 + parent: 2 + - uid: 7187 + components: + - type: Transform + pos: -3.5,-69.5 + parent: 2 + - uid: 7188 + components: + - type: Transform + pos: 7.5,-68.5 + parent: 2 + - uid: 7189 + components: + - type: Transform + pos: 7.5,-67.5 + parent: 2 + - uid: 7190 + components: + - type: Transform + pos: -5.5,-69.5 + parent: 2 + - uid: 7191 + components: + - type: Transform + pos: -5.5,-67.5 + parent: 2 + - uid: 7192 + components: + - type: Transform + pos: -5.5,-68.5 + parent: 2 + - uid: 7193 + components: + - type: Transform + pos: -2.5,-69.5 + parent: 2 + - uid: 7194 + components: + - type: Transform + pos: -1.5,-69.5 + parent: 2 + - uid: 7195 + components: + - type: Transform + pos: 2.5,-69.5 + parent: 2 + - uid: 7196 + components: + - type: Transform + pos: 3.5,-69.5 + parent: 2 + - uid: 7197 + components: + - type: Transform + pos: 5.5,-69.5 + parent: 2 + - uid: 7198 + components: + - type: Transform + pos: 7.5,-69.5 + parent: 2 + - uid: 7199 + components: + - type: Transform + pos: 7.5,-66.5 + parent: 2 + - uid: 7200 + components: + - type: Transform + pos: 6.5,-69.5 + parent: 2 + - uid: 7201 + components: + - type: Transform + pos: 4.5,-69.5 + parent: 2 + - uid: 7202 + components: + - type: Transform + pos: 7.5,-65.5 + parent: 2 +- proto: CableMVStack + entities: + - uid: 7203 + components: + - type: Transform + pos: 4.574347,15.341499 + parent: 2 + - uid: 7204 + components: + - type: Transform + pos: 14.444348,-51.3542 + parent: 2 + - uid: 7205 + components: + - type: Transform + pos: 22.505043,-45.34941 + parent: 2 + - uid: 7206 + components: + - type: Transform + pos: -3.5940933,49.542595 + parent: 2 +- proto: CableMVStack10 + entities: + - uid: 7207 + components: + - type: Transform + pos: -36.41552,-29.628822 + parent: 2 +- proto: CableTerminal + entities: + - uid: 7209 + components: + - type: Transform + pos: -35.5,-55.5 + parent: 2 + - uid: 7210 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,31.5 + parent: 2 + - uid: 7211 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,77.5 + parent: 2 + - uid: 7212 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.5,-56.5 + parent: 2 + - uid: 7213 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 45.5,23.5 + parent: 2 + - uid: 7214 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,-56.5 + parent: 2 + - uid: 7215 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,-56.5 + parent: 2 + - uid: 7216 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,-56.5 + parent: 2 + - uid: 7217 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.5,-57.5 + parent: 2 + - uid: 7218 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.5,-58.5 + parent: 2 + - uid: 7219 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,34.5 + parent: 2 + - uid: 18224 + components: + - type: Transform + pos: 34.5,-45.5 + parent: 2 +- proto: CandleRedInfinite + entities: + - uid: 7220 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,45.5 + parent: 2 + - uid: 7221 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,45.5 + parent: 2 + - uid: 7222 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 17.5,33.5 + parent: 2 + - uid: 7223 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,32.5 + parent: 2 + - uid: 7224 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 17.5,29.5 + parent: 2 + - uid: 7225 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,30.5 + parent: 2 + - uid: 7226 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,35.5 + parent: 2 +- proto: CapacitorStockPart + entities: + - uid: 7227 + components: + - type: Transform + pos: 25.373764,-39.396965 + parent: 2 + - uid: 7228 + components: + - type: Transform + pos: 25.513626,-39.31305 + parent: 2 +- proto: CaptainIDCard + entities: + - uid: 7229 + components: + - type: Transform + pos: -3.5046058,53.08522 + parent: 2 +- proto: CarbonDioxideCanister + entities: + - uid: 7230 + components: + - type: Transform + pos: -27.5,-39.5 + parent: 2 + - uid: 7231 + components: + - type: Transform + pos: 19.5,-49.5 + parent: 2 + - uid: 7232 + components: + - type: Transform + pos: 19.5,-50.5 + parent: 2 + - uid: 7233 + components: + - type: Transform + pos: -27.5,-38.5 + parent: 2 +- proto: CargoBountyComputerCircuitboard + entities: + - uid: 7234 + components: + - type: Transform + pos: -3.444475,-35.393864 + parent: 2 +- proto: CargoRequestComputerCircuitboard + entities: + - uid: 7235 + components: + - type: Transform + pos: -3.5750108,-35.580345 + parent: 2 +- proto: Carpet + entities: + - uid: 7236 + components: + - type: Transform + pos: 32.5,4.5 + parent: 2 + - uid: 7237 + components: + - type: Transform + pos: -27.5,-67.5 + parent: 2 + - uid: 7238 + components: + - type: Transform + pos: -26.5,-67.5 + parent: 2 + - uid: 7239 + components: + - type: Transform + pos: -25.5,-66.5 + parent: 2 + - uid: 7240 + components: + - type: Transform + pos: 32.5,5.5 + parent: 2 + - uid: 7241 + components: + - type: Transform + pos: 33.5,4.5 + parent: 2 + - uid: 7242 + components: + - type: Transform + pos: 33.5,5.5 + parent: 2 + - uid: 7243 + components: + - type: Transform + pos: 34.5,4.5 + parent: 2 + - uid: 7244 + components: + - type: Transform + pos: 34.5,5.5 + parent: 2 + - uid: 7245 + components: + - type: Transform + pos: 35.5,4.5 + parent: 2 + - uid: 7246 + components: + - type: Transform + pos: 35.5,5.5 + parent: 2 + - uid: 7247 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,7.5 + parent: 2 + - uid: 7248 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,8.5 + parent: 2 + - uid: 7249 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,9.5 + parent: 2 + - uid: 7250 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,10.5 + parent: 2 + - uid: 7251 + components: + - type: Transform + pos: 41.5,12.5 + parent: 2 + - uid: 7252 + components: + - type: Transform + pos: 41.5,13.5 + parent: 2 + - uid: 7253 + components: + - type: Transform + pos: 41.5,14.5 + parent: 2 + - uid: 7254 + components: + - type: Transform + pos: 42.5,13.5 + parent: 2 + - uid: 7255 + components: + - type: Transform + pos: 42.5,14.5 + parent: 2 + - uid: 7256 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,7.5 + parent: 2 + - uid: 7257 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,7.5 + parent: 2 + - uid: 7258 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,6.5 + parent: 2 + - uid: 7259 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,6.5 + parent: 2 + - uid: 7260 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,6.5 + parent: 2 + - uid: 7261 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 40.5,6.5 + parent: 2 + - uid: 7262 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,6.5 + parent: 2 + - uid: 7263 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,6.5 + parent: 2 + - uid: 7264 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,7.5 + parent: 2 + - uid: 7265 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,9.5 + parent: 2 + - uid: 7266 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 40.5,9.5 + parent: 2 + - uid: 7267 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,9.5 + parent: 2 + - uid: 7268 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,9.5 + parent: 2 + - uid: 7269 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,9.5 + parent: 2 + - uid: 7270 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,8.5 + parent: 2 + - uid: 7271 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 40.5,5.5 + parent: 2 + - uid: 7272 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 40.5,3.5 + parent: 2 + - uid: 7273 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,3.5 + parent: 2 + - uid: 7274 + components: + - type: Transform + pos: -19.5,18.5 + parent: 2 + - uid: 7275 + components: + - type: Transform + pos: -19.5,19.5 + parent: 2 + - uid: 7276 + components: + - type: Transform + pos: -19.5,20.5 + parent: 2 + - uid: 7277 + components: + - type: Transform + pos: -19.5,21.5 + parent: 2 + - uid: 7278 + components: + - type: Transform + pos: -19.5,22.5 + parent: 2 + - uid: 7279 + components: + - type: Transform + pos: -20.5,18.5 + parent: 2 + - uid: 7280 + components: + - type: Transform + pos: -20.5,19.5 + parent: 2 + - uid: 7281 + components: + - type: Transform + pos: -20.5,20.5 + parent: 2 + - uid: 7282 + components: + - type: Transform + pos: -20.5,21.5 + parent: 2 + - uid: 7283 + components: + - type: Transform + pos: -20.5,22.5 + parent: 2 + - uid: 7284 + components: + - type: Transform + pos: -21.5,18.5 + parent: 2 + - uid: 7285 + components: + - type: Transform + pos: -21.5,19.5 + parent: 2 + - uid: 7286 + components: + - type: Transform + pos: -21.5,20.5 + parent: 2 + - uid: 7287 + components: + - type: Transform + pos: -21.5,21.5 + parent: 2 + - uid: 7288 + components: + - type: Transform + pos: -21.5,22.5 + parent: 2 + - uid: 7289 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,43.5 + parent: 2 + - uid: 7290 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,44.5 + parent: 2 + - uid: 7291 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,43.5 + parent: 2 + - uid: 7292 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,44.5 + parent: 2 + - uid: 7293 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,43.5 + parent: 2 + - uid: 7294 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,44.5 + parent: 2 + - uid: 7295 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,43.5 + parent: 2 + - uid: 7296 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,44.5 + parent: 2 + - uid: 7297 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -25.5,43.5 + parent: 2 + - uid: 7298 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -25.5,44.5 + parent: 2 + - uid: 7299 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,43.5 + parent: 2 + - uid: 7300 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,44.5 + parent: 2 + - uid: 7301 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,45.5 + parent: 2 + - uid: 7302 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -25.5,45.5 + parent: 2 + - uid: 7303 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,45.5 + parent: 2 + - uid: 7304 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,45.5 + parent: 2 + - uid: 7305 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,45.5 + parent: 2 + - uid: 7306 + components: + - type: Transform + pos: 40.5,4.5 + parent: 2 + - uid: 7307 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 42.5,12.5 + parent: 2 + - uid: 7308 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 42.5,8.5 + parent: 2 + - uid: 7309 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 42.5,9.5 + parent: 2 +- proto: CarpetBlack + entities: + - uid: 7310 + components: + - type: Transform + pos: -4.5,13.5 + parent: 2 + - uid: 7311 + components: + - type: Transform + pos: -4.5,14.5 + parent: 2 + - uid: 7312 + components: + - type: Transform + pos: -4.5,15.5 + parent: 2 + - uid: 7313 + components: + - type: Transform + pos: -4.5,16.5 + parent: 2 + - uid: 7314 + components: + - type: Transform + pos: -3.5,13.5 + parent: 2 + - uid: 7315 + components: + - type: Transform + pos: -3.5,14.5 + parent: 2 + - uid: 7316 + components: + - type: Transform + pos: -3.5,15.5 + parent: 2 + - uid: 7317 + components: + - type: Transform + pos: -3.5,16.5 + parent: 2 + - uid: 7318 + components: + - type: Transform + pos: -2.5,13.5 + parent: 2 + - uid: 7319 + components: + - type: Transform + pos: -2.5,14.5 + parent: 2 + - uid: 7320 + components: + - type: Transform + pos: -2.5,15.5 + parent: 2 + - uid: 7321 + components: + - type: Transform + pos: -2.5,16.5 + parent: 2 + - uid: 7322 + components: + - type: Transform + pos: -31.5,-61.5 + parent: 2 + - uid: 7323 + components: + - type: Transform + pos: -31.5,-60.5 + parent: 2 + - uid: 7324 + components: + - type: Transform + pos: -30.5,-61.5 + parent: 2 + - uid: 7325 + components: + - type: Transform + pos: -30.5,-60.5 + parent: 2 + - uid: 7326 + components: + - type: Transform + pos: -29.5,-61.5 + parent: 2 + - uid: 7327 + components: + - type: Transform + pos: -29.5,-60.5 + parent: 2 + - uid: 7328 + components: + - type: Transform + pos: -31.5,-62.5 + parent: 2 + - uid: 7329 + components: + - type: Transform + pos: -31.5,-63.5 + parent: 2 + - uid: 7330 + components: + - type: Transform + pos: -31.5,-64.5 + parent: 2 + - uid: 7331 + components: + - type: Transform + pos: -30.5,-62.5 + parent: 2 + - uid: 7332 + components: + - type: Transform + pos: -30.5,-63.5 + parent: 2 + - uid: 7333 + components: + - type: Transform + pos: -30.5,-64.5 + parent: 2 + - uid: 7334 + components: + - type: Transform + pos: -29.5,-64.5 + parent: 2 + - uid: 7335 + components: + - type: Transform + pos: -29.5,-63.5 + parent: 2 + - uid: 7336 + components: + - type: Transform + pos: -28.5,-64.5 + parent: 2 + - uid: 7337 + components: + - type: Transform + pos: -28.5,-63.5 + parent: 2 + - uid: 7338 + components: + - type: Transform + pos: -28.5,-62.5 + parent: 2 + - uid: 7339 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,-0.5 + parent: 2 + - uid: 7340 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,0.5 + parent: 2 + - uid: 7341 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,1.5 + parent: 2 + - uid: 7342 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,-0.5 + parent: 2 + - uid: 7343 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,0.5 + parent: 2 + - uid: 7344 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,1.5 + parent: 2 + - uid: 7345 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 40.5,-0.5 + parent: 2 + - uid: 7346 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 40.5,0.5 + parent: 2 + - uid: 7347 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 40.5,1.5 + parent: 2 + - uid: 7348 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,-0.5 + parent: 2 + - uid: 7349 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,-1.5 + parent: 2 + - uid: 7350 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,-0.5 + parent: 2 + - uid: 7351 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,0.5 + parent: 2 + - uid: 7352 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,-1.5 + parent: 2 + - uid: 7353 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,-0.5 + parent: 2 + - uid: 7354 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,0.5 + parent: 2 + - uid: 7355 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 44.5,-1.5 + parent: 2 + - uid: 7356 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 44.5,-0.5 + parent: 2 + - uid: 7357 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 44.5,0.5 + parent: 2 + - uid: 7358 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 44.5,0.5 + parent: 2 + - uid: 7359 + components: + - type: Transform + pos: -34.5,-60.5 + parent: 2 + - uid: 7360 + components: + - type: Transform + pos: -35.5,-59.5 + parent: 2 + - uid: 7361 + components: + - type: Transform + pos: -36.5,-60.5 + parent: 2 + - uid: 7362 + components: + - type: Transform + pos: -35.5,-58.5 + parent: 2 + - uid: 7363 + components: + - type: Transform + pos: -34.5,-58.5 + parent: 2 + - uid: 7364 + components: + - type: Transform + pos: -36.5,-59.5 + parent: 2 + - uid: 7365 + components: + - type: Transform + pos: -35.5,-60.5 + parent: 2 +- proto: CarpetBlue + entities: + - uid: 7366 + components: + - type: Transform + pos: 22.5,5.5 + parent: 2 + - uid: 7367 + components: + - type: Transform + pos: 22.5,4.5 + parent: 2 + - uid: 7368 + components: + - type: Transform + pos: 23.5,5.5 + parent: 2 + - uid: 7369 + components: + - type: Transform + pos: 23.5,4.5 + parent: 2 + - uid: 7370 + components: + - type: Transform + pos: 21.5,5.5 + parent: 2 + - uid: 7371 + components: + - type: Transform + pos: 21.5,4.5 + parent: 2 + - uid: 7372 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 17.5,8.5 + parent: 2 + - uid: 7373 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 17.5,9.5 + parent: 2 + - uid: 7374 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,8.5 + parent: 2 + - uid: 7375 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,9.5 + parent: 2 + - uid: 7376 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,8.5 + parent: 2 + - uid: 7377 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,9.5 + parent: 2 + - uid: 7378 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -25.5,38.5 + parent: 2 + - uid: 7379 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -25.5,39.5 + parent: 2 + - uid: 7380 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -25.5,40.5 + parent: 2 + - uid: 7381 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -25.5,41.5 + parent: 2 + - uid: 7382 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,38.5 + parent: 2 + - uid: 7383 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,39.5 + parent: 2 + - uid: 7384 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,40.5 + parent: 2 + - uid: 7385 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,41.5 + parent: 2 + - uid: 7386 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,39.5 + parent: 2 + - uid: 7387 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,40.5 + parent: 2 + - uid: 7388 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,38.5 + parent: 2 + - uid: 7389 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,39.5 + parent: 2 + - uid: 7390 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,40.5 + parent: 2 + - uid: 7391 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,41.5 + parent: 2 + - uid: 7392 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,38.5 + parent: 2 + - uid: 7393 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,39.5 + parent: 2 + - uid: 7394 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,40.5 + parent: 2 + - uid: 7395 + components: + - type: Transform + pos: -8.5,50.5 + parent: 2 + - uid: 7396 + components: + - type: Transform + pos: -8.5,49.5 + parent: 2 + - uid: 7397 + components: + - type: Transform + pos: -8.5,48.5 + parent: 2 + - uid: 7398 + components: + - type: Transform + pos: -8.5,47.5 + parent: 2 + - uid: 7399 + components: + - type: Transform + pos: -7.5,50.5 + parent: 2 + - uid: 7400 + components: + - type: Transform + pos: -7.5,49.5 + parent: 2 + - uid: 7401 + components: + - type: Transform + pos: -7.5,48.5 + parent: 2 + - uid: 7402 + components: + - type: Transform + pos: -7.5,47.5 + parent: 2 + - uid: 7403 + components: + - type: Transform + pos: -6.5,50.5 + parent: 2 + - uid: 7404 + components: + - type: Transform + pos: -6.5,49.5 + parent: 2 + - uid: 7405 + components: + - type: Transform + pos: -5.5,49.5 + parent: 2 + - uid: 7406 + components: + - type: Transform + pos: -5.5,48.5 + parent: 2 + - uid: 7407 + components: + - type: Transform + pos: -5.5,47.5 + parent: 2 + - uid: 7408 + components: + - type: Transform + pos: -9.5,50.5 + parent: 2 + - uid: 7409 + components: + - type: Transform + pos: -7.5,51.5 + parent: 2 + - uid: 7410 + components: + - type: Transform + pos: -8.5,52.5 + parent: 2 + - uid: 7411 + components: + - type: Transform + pos: -8.5,53.5 + parent: 2 + - uid: 7412 + components: + - type: Transform + pos: -7.5,52.5 + parent: 2 + - uid: 7413 + components: + - type: Transform + pos: -7.5,53.5 + parent: 2 + - uid: 7414 + components: + - type: Transform + pos: -6.5,52.5 + parent: 2 + - uid: 7415 + components: + - type: Transform + pos: -6.5,53.5 + parent: 2 + - uid: 7416 + components: + - type: Transform + pos: -5.5,52.5 + parent: 2 + - uid: 7417 + components: + - type: Transform + pos: -5.5,53.5 + parent: 2 + - uid: 7418 + components: + - type: Transform + pos: 6.5,55.5 + parent: 2 + - uid: 7419 + components: + - type: Transform + pos: 6.5,54.5 + parent: 2 + - uid: 7420 + components: + - type: Transform + pos: 6.5,53.5 + parent: 2 + - uid: 7421 + components: + - type: Transform + pos: 7.5,55.5 + parent: 2 + - uid: 7422 + components: + - type: Transform + pos: 7.5,54.5 + parent: 2 + - uid: 7423 + components: + - type: Transform + pos: 7.5,53.5 + parent: 2 + - uid: 7424 + components: + - type: Transform + pos: 8.5,55.5 + parent: 2 + - uid: 7425 + components: + - type: Transform + pos: 8.5,54.5 + parent: 2 + - uid: 7426 + components: + - type: Transform + pos: 8.5,53.5 + parent: 2 + - uid: 7427 + components: + - type: Transform + pos: 9.5,55.5 + parent: 2 + - uid: 7428 + components: + - type: Transform + pos: 9.5,54.5 + parent: 2 + - uid: 7429 + components: + - type: Transform + pos: 9.5,53.5 + parent: 2 + - uid: 7430 + components: + - type: Transform + pos: 10.5,55.5 + parent: 2 + - uid: 7431 + components: + - type: Transform + pos: 10.5,54.5 + parent: 2 + - uid: 7432 + components: + - type: Transform + pos: 10.5,53.5 + parent: 2 + - uid: 7433 + components: + - type: Transform + pos: 10.5,52.5 + parent: 2 + - uid: 7434 + components: + - type: Transform + pos: 9.5,52.5 + parent: 2 + - uid: 7435 + components: + - type: Transform + pos: 9.5,56.5 + parent: 2 + - uid: 7436 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,-25.5 + parent: 2 + - uid: 7437 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,-23.5 + parent: 2 + - uid: 7438 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,-22.5 + parent: 2 + - uid: 7439 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 44.5,-25.5 + parent: 2 + - uid: 7440 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 45.5,-25.5 + parent: 2 + - uid: 7441 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 45.5,-24.5 + parent: 2 + - uid: 7442 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 45.5,-23.5 + parent: 2 + - uid: 7443 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 45.5,-22.5 + parent: 2 + - uid: 7444 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 46.5,-25.5 + parent: 2 + - uid: 7445 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 46.5,-24.5 + parent: 2 + - uid: 7446 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 46.5,-23.5 + parent: 2 + - uid: 7447 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 46.5,-22.5 + parent: 2 + - uid: 7448 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,-24.5 + parent: 2 + - uid: 7449 + components: + - type: Transform + pos: -6.5,47.5 + parent: 2 + - uid: 7450 + components: + - type: Transform + pos: 43.5,-24.5 + parent: 2 + - uid: 7451 + components: + - type: Transform + pos: -6.5,48.5 + parent: 2 + - uid: 7452 + components: + - type: Transform + pos: 44.5,-23.5 + parent: 2 + - uid: 7453 + components: + - type: Transform + pos: 44.5,-22.5 + parent: 2 + - uid: 7454 + components: + - type: Transform + pos: 44.5,-24.5 + parent: 2 + - uid: 7455 + components: + - type: Transform + pos: -23.5,41.5 + parent: 2 + - uid: 7456 + components: + - type: Transform + pos: -21.5,41.5 + parent: 2 + - uid: 7457 + components: + - type: Transform + pos: -23.5,38.5 + parent: 2 +- proto: CarpetGreen + entities: + - uid: 7458 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,12.5 + parent: 2 + - uid: 7459 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,11.5 + parent: 2 + - uid: 7460 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,10.5 + parent: 2 + - uid: 7461 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,12.5 + parent: 2 + - uid: 7462 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,11.5 + parent: 2 + - uid: 7463 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,10.5 + parent: 2 + - uid: 7464 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,12.5 + parent: 2 + - uid: 7465 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,11.5 + parent: 2 + - uid: 7466 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,10.5 + parent: 2 + - uid: 7467 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,8.5 + parent: 2 + - uid: 7468 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,8.5 + parent: 2 + - uid: 7469 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,8.5 + parent: 2 + - uid: 7470 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,8.5 + parent: 2 + - uid: 7471 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,9.5 + parent: 2 + - uid: 7472 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,10.5 + parent: 2 + - uid: 7473 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,11.5 + parent: 2 + - uid: 7474 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,12.5 + parent: 2 + - uid: 7475 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,13.5 + parent: 2 + - uid: 7476 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,14.5 + parent: 2 + - uid: 7477 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,15.5 + parent: 2 + - uid: 7478 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,16.5 + parent: 2 + - uid: 7479 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,16.5 + parent: 2 + - uid: 7480 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,15.5 + parent: 2 + - uid: 7481 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,16.5 + parent: 2 + - uid: 7482 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,15.5 + parent: 2 + - uid: 7483 + components: + - type: Transform + pos: 18.5,5.5 + parent: 2 + - uid: 7484 + components: + - type: Transform + pos: 18.5,4.5 + parent: 2 + - uid: 7485 + components: + - type: Transform + pos: 19.5,5.5 + parent: 2 + - uid: 7486 + components: + - type: Transform + pos: 19.5,4.5 + parent: 2 + - uid: 7487 + components: + - type: Transform + pos: 20.5,5.5 + parent: 2 + - uid: 7488 + components: + - type: Transform + pos: 20.5,4.5 + parent: 2 + - uid: 7489 + components: + - type: Transform + pos: 24.5,4.5 + parent: 2 + - uid: 7490 + components: + - type: Transform + pos: 24.5,5.5 + parent: 2 + - uid: 7491 + components: + - type: Transform + pos: 25.5,4.5 + parent: 2 + - uid: 7492 + components: + - type: Transform + pos: 25.5,5.5 + parent: 2 + - uid: 7493 + components: + - type: Transform + pos: 26.5,4.5 + parent: 2 + - uid: 7494 + components: + - type: Transform + pos: 26.5,5.5 + parent: 2 + - uid: 7495 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,40.5 + parent: 2 + - uid: 7496 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,40.5 + parent: 2 + - uid: 7497 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,-3.5 + parent: 2 + - uid: 7498 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,-2.5 + parent: 2 + - uid: 7499 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 38.5,-3.5 + parent: 2 + - uid: 7500 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 38.5,-2.5 + parent: 2 + - uid: 7501 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 39.5,-3.5 + parent: 2 + - uid: 7502 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 39.5,-2.5 + parent: 2 + - uid: 7503 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,-3.5 + parent: 2 + - uid: 7504 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,-2.5 + parent: 2 + - uid: 7505 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,20.5 + parent: 2 + - uid: 7506 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,21.5 + parent: 2 + - uid: 7507 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 18.5,20.5 + parent: 2 + - uid: 7508 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 18.5,21.5 + parent: 2 + - uid: 7509 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,20.5 + parent: 2 + - uid: 7510 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,21.5 + parent: 2 +- proto: CarpetOrange + entities: + - uid: 7511 + components: + - type: Transform + pos: -25.5,7.5 + parent: 2 + - uid: 7512 + components: + - type: Transform + pos: -25.5,6.5 + parent: 2 + - uid: 7513 + components: + - type: Transform + pos: -25.5,5.5 + parent: 2 + - uid: 7514 + components: + - type: Transform + pos: -25.5,4.5 + parent: 2 + - uid: 7515 + components: + - type: Transform + pos: -24.5,7.5 + parent: 2 + - uid: 7516 + components: + - type: Transform + pos: -24.5,6.5 + parent: 2 + - uid: 7517 + components: + - type: Transform + pos: -24.5,5.5 + parent: 2 + - uid: 7518 + components: + - type: Transform + pos: -24.5,4.5 + parent: 2 + - uid: 7519 + components: + - type: Transform + pos: -23.5,7.5 + parent: 2 + - uid: 7520 + components: + - type: Transform + pos: -23.5,6.5 + parent: 2 + - uid: 7521 + components: + - type: Transform + pos: -23.5,5.5 + parent: 2 + - uid: 7522 + components: + - type: Transform + pos: -23.5,4.5 + parent: 2 + - uid: 7523 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -44.5,-36.5 + parent: 2 + - uid: 7524 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -44.5,-35.5 + parent: 2 +- proto: CarpetPink + entities: + - uid: 7525 + components: + - type: Transform + pos: 25.5,31.5 + parent: 2 + - uid: 7526 + components: + - type: Transform + pos: 24.5,29.5 + parent: 2 + - uid: 7527 + components: + - type: Transform + pos: 24.5,30.5 + parent: 2 + - uid: 7528 + components: + - type: Transform + pos: 24.5,31.5 + parent: 2 + - uid: 7529 + components: + - type: Transform + pos: 24.5,32.5 + parent: 2 + - uid: 7530 + components: + - type: Transform + pos: 24.5,33.5 + parent: 2 + - uid: 7531 + components: + - type: Transform + pos: 23.5,31.5 + parent: 2 + - uid: 7532 + components: + - type: Transform + pos: 22.5,31.5 + parent: 2 + - uid: 7533 + components: + - type: Transform + pos: 21.5,31.5 + parent: 2 + - uid: 7534 + components: + - type: Transform + pos: 20.5,29.5 + parent: 2 + - uid: 7535 + components: + - type: Transform + pos: 20.5,32.5 + parent: 2 + - uid: 7536 + components: + - type: Transform + pos: 20.5,33.5 + parent: 2 + - uid: 7537 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 20.5,34.5 + parent: 2 + - uid: 7538 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,35.5 + parent: 2 + - uid: 7539 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 20.5,36.5 + parent: 2 + - uid: 7540 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,37.5 + parent: 2 + - uid: 7541 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,37.5 + parent: 2 + - uid: 7542 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 18.5,35.5 + parent: 2 + - uid: 7543 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,35.5 + parent: 2 + - uid: 7544 + components: + - type: Transform + pos: 19.5,39.5 + parent: 2 + - uid: 7545 + components: + - type: Transform + pos: 19.5,40.5 + parent: 2 + - uid: 7546 + components: + - type: Transform + pos: 20.5,39.5 + parent: 2 + - uid: 7547 + components: + - type: Transform + pos: 20.5,40.5 + parent: 2 + - uid: 7548 + components: + - type: Transform + pos: 21.5,39.5 + parent: 2 + - uid: 7549 + components: + - type: Transform + pos: 21.5,40.5 + parent: 2 + - uid: 7550 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,41.5 + parent: 2 + - uid: 7551 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 18.5,42.5 + parent: 2 + - uid: 7552 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,42.5 + parent: 2 + - uid: 7553 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,42.5 + parent: 2 + - uid: 7554 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,42.5 + parent: 2 + - uid: 7555 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 22.5,42.5 + parent: 2 + - uid: 7556 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 18.5,43.5 + parent: 2 + - uid: 7557 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,43.5 + parent: 2 + - uid: 7558 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,43.5 + parent: 2 + - uid: 7559 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,43.5 + parent: 2 + - uid: 7560 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 22.5,43.5 + parent: 2 + - uid: 7561 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,44.5 + parent: 2 + - uid: 7562 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,44.5 + parent: 2 + - uid: 7563 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,44.5 + parent: 2 + - uid: 7564 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,45.5 + parent: 2 + - uid: 7565 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 20.5,35.5 + parent: 2 + - uid: 7566 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 20.5,37.5 + parent: 2 + - uid: 7567 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 20.5,30.5 + parent: 2 + - uid: 7568 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 20.5,31.5 + parent: 2 +- proto: CarpetPurple + entities: + - uid: 7569 + components: + - type: Transform + pos: -15.5,-22.5 + parent: 2 + - uid: 7570 + components: + - type: Transform + pos: -15.5,-23.5 + parent: 2 + - uid: 7571 + components: + - type: Transform + pos: -15.5,-24.5 + parent: 2 + - uid: 7572 + components: + - type: Transform + pos: -14.5,-22.5 + parent: 2 + - uid: 7573 + components: + - type: Transform + pos: -14.5,-23.5 + parent: 2 + - uid: 7574 + components: + - type: Transform + pos: -14.5,-24.5 + parent: 2 + - uid: 7575 + components: + - type: Transform + pos: -16.5,-21.5 + parent: 2 + - uid: 7576 + components: + - type: Transform + pos: -17.5,-20.5 + parent: 2 + - uid: 7577 + components: + - type: Transform + pos: -17.5,-19.5 + parent: 2 + - uid: 7578 + components: + - type: Transform + pos: -16.5,-20.5 + parent: 2 + - uid: 7579 + components: + - type: Transform + pos: -16.5,-19.5 + parent: 2 + - uid: 7580 + components: + - type: Transform + pos: -15.5,-20.5 + parent: 2 + - uid: 7581 + components: + - type: Transform + pos: -15.5,-19.5 + parent: 2 + - uid: 7582 + components: + - type: Transform + pos: -14.5,-20.5 + parent: 2 + - uid: 7583 + components: + - type: Transform + pos: -14.5,-19.5 + parent: 2 + - uid: 7584 + components: + - type: Transform + pos: -4.5,51.5 + parent: 2 + - uid: 7585 + components: + - type: Transform + pos: -4.5,52.5 + parent: 2 + - uid: 7586 + components: + - type: Transform + pos: -4.5,53.5 + parent: 2 + - uid: 7587 + components: + - type: Transform + pos: -3.5,51.5 + parent: 2 + - uid: 7588 + components: + - type: Transform + pos: -3.5,52.5 + parent: 2 + - uid: 7589 + components: + - type: Transform + pos: -3.5,53.5 + parent: 2 + - uid: 7590 + components: + - type: Transform + pos: -2.5,51.5 + parent: 2 + - uid: 7591 + components: + - type: Transform + pos: -2.5,52.5 + parent: 2 + - uid: 7592 + components: + - type: Transform + pos: -2.5,53.5 + parent: 2 + - uid: 7593 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,-52.5 + parent: 2 + - uid: 7594 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,-52.5 + parent: 2 + - uid: 7595 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,-51.5 + parent: 2 + - uid: 7596 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,-50.5 + parent: 2 + - uid: 7597 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,-52.5 + parent: 2 + - uid: 7598 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,-51.5 + parent: 2 + - uid: 7599 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,-50.5 + parent: 2 + - uid: 7600 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 12.5,-52.5 + parent: 2 + - uid: 7601 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 12.5,-51.5 + parent: 2 + - uid: 7602 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 12.5,-50.5 + parent: 2 + - uid: 7603 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,-52.5 + parent: 2 + - uid: 7604 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,-51.5 + parent: 2 + - uid: 7605 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,-50.5 + parent: 2 + - uid: 7606 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 14.5,-52.5 + parent: 2 + - uid: 7607 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 14.5,-51.5 + parent: 2 + - uid: 7608 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 14.5,-50.5 + parent: 2 +- proto: CarpetSBlue + entities: + - uid: 7609 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,47.5 + parent: 2 + - uid: 7610 + components: + - type: Transform + pos: 8.5,50.5 + parent: 2 + - uid: 7611 + components: + - type: Transform + pos: 8.5,49.5 + parent: 2 + - uid: 7612 + components: + - type: Transform + pos: 8.5,47.5 + parent: 2 + - uid: 7613 + components: + - type: Transform + pos: 8.5,48.5 + parent: 2 + - uid: 7614 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,26.5 + parent: 2 + - uid: 7615 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,25.5 + parent: 2 + - uid: 7616 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,25.5 + parent: 2 + - uid: 7617 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,26.5 + parent: 2 + - uid: 7618 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,49.5 + parent: 2 + - uid: 7619 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,50.5 + parent: 2 + - uid: 7620 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,48.5 + parent: 2 + - uid: 7621 + components: + - type: Transform + pos: 7.5,27.5 + parent: 2 + - uid: 7622 + components: + - type: Transform + pos: 8.5,26.5 + parent: 2 + - uid: 7623 + components: + - type: Transform + pos: 8.5,27.5 + parent: 2 + - uid: 7624 + components: + - type: Transform + pos: 8.5,25.5 + parent: 2 + - uid: 7625 + components: + - type: Transform + pos: 6.5,27.5 + parent: 2 +- proto: CartridgeMinigun + entities: + - uid: 7626 + components: + - type: Transform + pos: -16.772854,15.301035 + parent: 2 + - uid: 7627 + components: + - type: Transform + pos: -16.41621,15.930405 + parent: 2 + - uid: 7628 + components: + - type: Transform + pos: -27.655914,22.006664 + parent: 2 + - uid: 7629 + components: + - type: Transform + pos: -27.341228,22.426245 + parent: 2 + - uid: 7630 + components: + - type: Transform + pos: -24.425144,20.223448 + parent: 2 +- proto: Catwalk + entities: + - uid: 7631 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,-34.5 + parent: 2 + - uid: 7632 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,-37.5 + parent: 2 + - uid: 7633 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 29.5,-37.5 + parent: 2 + - uid: 7634 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 28.5,-37.5 + parent: 2 + - uid: 7635 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,-37.5 + parent: 2 + - uid: 7636 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 26.5,-37.5 + parent: 2 + - uid: 7637 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.5,-37.5 + parent: 2 + - uid: 7638 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,-37.5 + parent: 2 + - uid: 7639 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,-37.5 + parent: 2 + - uid: 7640 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,-37.5 + parent: 2 + - uid: 7641 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,-36.5 + parent: 2 + - uid: 7642 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,-35.5 + parent: 2 + - uid: 7643 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,45.5 + parent: 2 + - uid: 7644 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,45.5 + parent: 2 + - uid: 7645 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,44.5 + parent: 2 + - uid: 7646 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,45.5 + parent: 2 + - uid: 7647 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,46.5 + parent: 2 + - uid: 7648 + components: + - type: Transform + pos: 54.5,-57.5 + parent: 2 + - uid: 7649 + components: + - type: Transform + pos: 46.5,-57.5 + parent: 2 + - uid: 7650 + components: + - type: Transform + pos: 44.5,-57.5 + parent: 2 + - uid: 7651 + components: + - type: Transform + pos: 48.5,-57.5 + parent: 2 + - uid: 7652 + components: + - type: Transform + pos: 50.5,-57.5 + parent: 2 + - uid: 7653 + components: + - type: Transform + pos: 55.5,-57.5 + parent: 2 + - uid: 7654 + components: + - type: Transform + pos: 51.5,-57.5 + parent: 2 + - uid: 7655 + components: + - type: Transform + pos: 53.5,-57.5 + parent: 2 + - uid: 7656 + components: + - type: Transform + pos: 52.5,-57.5 + parent: 2 + - uid: 7657 + components: + - type: Transform + pos: -17.5,-12.5 + parent: 2 + - uid: 7658 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 13.5,10.5 + parent: 2 + - uid: 7659 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 13.5,9.5 + parent: 2 + - uid: 7660 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 13.5,8.5 + parent: 2 + - uid: 7661 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 13.5,7.5 + parent: 2 + - uid: 7662 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 13.5,6.5 + parent: 2 + - uid: 7663 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 13.5,5.5 + parent: 2 + - uid: 7664 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 13.5,4.5 + parent: 2 + - uid: 7665 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,4.5 + parent: 2 + - uid: 7666 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,4.5 + parent: 2 + - uid: 7667 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 16.5,4.5 + parent: 2 + - uid: 7668 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,3.5 + parent: 2 + - uid: 7669 + components: + - type: Transform + pos: 13.5,11.5 + parent: 2 + - uid: 7670 + components: + - type: Transform + pos: 13.5,12.5 + parent: 2 + - uid: 7671 + components: + - type: Transform + pos: 13.5,13.5 + parent: 2 + - uid: 7672 + components: + - type: Transform + pos: 13.5,14.5 + parent: 2 + - uid: 7673 + components: + - type: Transform + pos: 13.5,15.5 + parent: 2 + - uid: 7674 + components: + - type: Transform + pos: 13.5,16.5 + parent: 2 + - uid: 7675 + components: + - type: Transform + pos: 16.5,-1.5 + parent: 2 + - uid: 7676 + components: + - type: Transform + pos: 16.5,-2.5 + parent: 2 + - uid: 7677 + components: + - type: Transform + pos: 16.5,-3.5 + parent: 2 + - uid: 7678 + components: + - type: Transform + pos: 16.5,-4.5 + parent: 2 + - uid: 7679 + components: + - type: Transform + pos: 16.5,-5.5 + parent: 2 + - uid: 7680 + components: + - type: Transform + pos: 17.5,-3.5 + parent: 2 + - uid: 7681 + components: + - type: Transform + pos: 16.5,-6.5 + parent: 2 + - uid: 7682 + components: + - type: Transform + pos: 15.5,-6.5 + parent: 2 + - uid: 7683 + components: + - type: Transform + pos: 14.5,-6.5 + parent: 2 + - uid: 7684 + components: + - type: Transform + pos: 13.5,-6.5 + parent: 2 + - uid: 7685 + components: + - type: Transform + pos: 12.5,-6.5 + parent: 2 + - uid: 7686 + components: + - type: Transform + pos: 11.5,-6.5 + parent: 2 + - uid: 7687 + components: + - type: Transform + pos: 10.5,-6.5 + parent: 2 + - uid: 7688 + components: + - type: Transform + pos: 10.5,-6.5 + parent: 2 + - uid: 7689 + components: + - type: Transform + pos: -25.5,-8.5 + parent: 2 + - uid: 7690 + components: + - type: Transform + pos: -24.5,-8.5 + parent: 2 + - uid: 7691 + components: + - type: Transform + pos: -23.5,-8.5 + parent: 2 + - uid: 7692 + components: + - type: Transform + pos: -22.5,-8.5 + parent: 2 + - uid: 7693 + components: + - type: Transform + pos: -21.5,-8.5 + parent: 2 + - uid: 7694 + components: + - type: Transform + pos: -20.5,-8.5 + parent: 2 + - uid: 7695 + components: + - type: Transform + pos: -20.5,-7.5 + parent: 2 + - uid: 7696 + components: + - type: Transform + pos: -20.5,-6.5 + parent: 2 + - uid: 7697 + components: + - type: Transform + pos: -20.5,-5.5 + parent: 2 + - uid: 7698 + components: + - type: Transform + pos: -20.5,-4.5 + parent: 2 + - uid: 7699 + components: + - type: Transform + pos: -20.5,-3.5 + parent: 2 + - uid: 7700 + components: + - type: Transform + pos: -20.5,-2.5 + parent: 2 + - uid: 7701 + components: + - type: Transform + pos: -20.5,-1.5 + parent: 2 + - uid: 7702 + components: + - type: Transform + pos: -26.5,-8.5 + parent: 2 + - uid: 7703 + components: + - type: Transform + pos: -27.5,-8.5 + parent: 2 + - uid: 7704 + components: + - type: Transform + pos: -28.5,-8.5 + parent: 2 + - uid: 7705 + components: + - type: Transform + pos: -29.5,-8.5 + parent: 2 + - uid: 7706 + components: + - type: Transform + pos: -30.5,-8.5 + parent: 2 + - uid: 7707 + components: + - type: Transform + pos: -31.5,-8.5 + parent: 2 + - uid: 7708 + components: + - type: Transform + pos: -20.5,3.5 + parent: 2 + - uid: 7709 + components: + - type: Transform + pos: -20.5,4.5 + parent: 2 + - uid: 7710 + components: + - type: Transform + pos: -20.5,5.5 + parent: 2 + - uid: 7711 + components: + - type: Transform + pos: -20.5,6.5 + parent: 2 + - uid: 7712 + components: + - type: Transform + pos: -20.5,7.5 + parent: 2 + - uid: 7713 + components: + - type: Transform + pos: -20.5,8.5 + parent: 2 + - uid: 7714 + components: + - type: Transform + pos: -20.5,9.5 + parent: 2 + - uid: 7715 + components: + - type: Transform + pos: -20.5,10.5 + parent: 2 + - uid: 7716 + components: + - type: Transform + pos: -20.5,11.5 + parent: 2 + - uid: 7717 + components: + - type: Transform + pos: -20.5,12.5 + parent: 2 + - uid: 7718 + components: + - type: Transform + pos: -20.5,13.5 + parent: 2 + - uid: 7719 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -40.5,13.5 + parent: 2 + - uid: 7720 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -40.5,14.5 + parent: 2 + - uid: 7721 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -41.5,14.5 + parent: 2 + - uid: 7722 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -42.5,14.5 + parent: 2 + - uid: 7723 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -43.5,14.5 + parent: 2 + - uid: 7724 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -44.5,14.5 + parent: 2 + - uid: 7725 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -44.5,15.5 + parent: 2 + - uid: 7726 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -43.5,15.5 + parent: 2 + - uid: 7727 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -42.5,15.5 + parent: 2 + - uid: 7728 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -41.5,15.5 + parent: 2 + - uid: 7729 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -49.5,-53.5 + parent: 2 + - uid: 7730 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -49.5,-51.5 + parent: 2 + - uid: 7731 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -45.5,-50.5 + parent: 2 + - uid: 7732 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -54.5,-53.5 + parent: 2 + - uid: 7733 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -54.5,-51.5 + parent: 2 + - uid: 7734 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -54.5,-49.5 + parent: 2 + - uid: 7735 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -54.5,-55.5 + parent: 2 + - uid: 7736 + components: + - type: Transform + pos: -59.5,-53.5 + parent: 2 + - uid: 7737 + components: + - type: Transform + pos: -59.5,-51.5 + parent: 2 + - uid: 7738 + components: + - type: Transform + pos: -59.5,-51.5 + parent: 2 + - uid: 7739 + components: + - type: Transform + pos: -69.5,-53.5 + parent: 2 + - uid: 7740 + components: + - type: Transform + pos: -64.5,-51.5 + parent: 2 + - uid: 7741 + components: + - type: Transform + pos: -64.5,-53.5 + parent: 2 + - uid: 7742 + components: + - type: Transform + pos: -64.5,-56.5 + parent: 2 + - uid: 7743 + components: + - type: Transform + pos: -69.5,-51.5 + parent: 2 + - uid: 7744 + components: + - type: Transform + pos: -69.5,-49.5 + parent: 2 + - uid: 7745 + components: + - type: Transform + pos: -69.5,-55.5 + parent: 2 + - uid: 7746 + components: + - type: Transform + pos: -74.5,-53.5 + parent: 2 + - uid: 7747 + components: + - type: Transform + pos: -74.5,-51.5 + parent: 2 + - uid: 7748 + components: + - type: Transform + pos: -71.5,-51.5 + parent: 2 + - uid: 7749 + components: + - type: Transform + pos: -87.5,-52.5 + parent: 2 + - uid: 7750 + components: + - type: Transform + pos: -77.5,-49.5 + parent: 2 + - uid: 7751 + components: + - type: Transform + pos: -83.5,-49.5 + parent: 2 + - uid: 7752 + components: + - type: Transform + pos: -83.5,-55.5 + parent: 2 + - uid: 7753 + components: + - type: Transform + pos: -77.5,-55.5 + parent: 2 + - uid: 7754 + components: + - type: Transform + pos: -80.5,-59.5 + parent: 2 + - uid: 7755 + components: + - type: Transform + pos: -80.5,-45.5 + parent: 2 + - uid: 7756 + components: + - type: Transform + pos: -20.5,-38.5 + parent: 2 + - uid: 7757 + components: + - type: Transform + pos: -20.5,-37.5 + parent: 2 + - uid: 7758 + components: + - type: Transform + pos: -31.5,-43.5 + parent: 2 + - uid: 7759 + components: + - type: Transform + pos: -21.5,-43.5 + parent: 2 + - uid: 7760 + components: + - type: Transform + pos: -20.5,-43.5 + parent: 2 + - uid: 7761 + components: + - type: Transform + pos: -20.5,-42.5 + parent: 2 + - uid: 7762 + components: + - type: Transform + pos: -20.5,-41.5 + parent: 2 + - uid: 7763 + components: + - type: Transform + pos: -20.5,-40.5 + parent: 2 + - uid: 7764 + components: + - type: Transform + pos: -21.5,-44.5 + parent: 2 + - uid: 7765 + components: + - type: Transform + pos: -21.5,-45.5 + parent: 2 + - uid: 7766 + components: + - type: Transform + pos: -21.5,-46.5 + parent: 2 + - uid: 7767 + components: + - type: Transform + pos: -21.5,-47.5 + parent: 2 + - uid: 7768 + components: + - type: Transform + pos: -21.5,-48.5 + parent: 2 + - uid: 7769 + components: + - type: Transform + pos: -21.5,-49.5 + parent: 2 + - uid: 7770 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -39.5,-57.5 + parent: 2 + - uid: 7771 + components: + - type: Transform + pos: -21.5,-50.5 + parent: 2 + - uid: 7772 + components: + - type: Transform + pos: -21.5,-51.5 + parent: 2 + - uid: 7773 + components: + - type: Transform + pos: -20.5,-51.5 + parent: 2 + - uid: 7774 + components: + - type: Transform + pos: -19.5,-51.5 + parent: 2 + - uid: 7775 + components: + - type: Transform + pos: -18.5,-51.5 + parent: 2 + - uid: 7776 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -39.5,-54.5 + parent: 2 + - uid: 7777 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -39.5,-55.5 + parent: 2 + - uid: 7778 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -39.5,-56.5 + parent: 2 + - uid: 7779 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,-56.5 + parent: 2 + - uid: 7780 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -39.5,-58.5 + parent: 2 + - uid: 7781 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -39.5,-59.5 + parent: 2 + - uid: 7782 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -39.5,-60.5 + parent: 2 + - uid: 7783 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -39.5,-61.5 + parent: 2 + - uid: 7784 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -39.5,-62.5 + parent: 2 + - uid: 7785 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -39.5,-63.5 + parent: 2 + - uid: 7786 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,-57.5 + parent: 2 + - uid: 7787 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,-58.5 + parent: 2 + - uid: 7788 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,-59.5 + parent: 2 + - uid: 7789 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,-60.5 + parent: 2 + - uid: 7790 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,-61.5 + parent: 2 + - uid: 7791 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,-62.5 + parent: 2 + - uid: 7792 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,-63.5 + parent: 2 + - uid: 7793 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -40.5,-61.5 + parent: 2 + - uid: 7794 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -41.5,-61.5 + parent: 2 + - uid: 7795 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -42.5,-61.5 + parent: 2 + - uid: 7796 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -43.5,-61.5 + parent: 2 + - uid: 7797 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -44.5,-61.5 + parent: 2 + - uid: 7798 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -45.5,-61.5 + parent: 2 + - uid: 7799 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -46.5,-61.5 + parent: 2 + - uid: 7800 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -47.5,-61.5 + parent: 2 + - uid: 7801 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -48.5,-61.5 + parent: 2 + - uid: 7802 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -49.5,-61.5 + parent: 2 + - uid: 7803 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -50.5,-61.5 + parent: 2 + - uid: 7804 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -51.5,-61.5 + parent: 2 + - uid: 7805 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -52.5,-61.5 + parent: 2 + - uid: 7806 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -53.5,-61.5 + parent: 2 + - uid: 7807 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -54.5,-61.5 + parent: 2 + - uid: 7808 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -55.5,-61.5 + parent: 2 + - uid: 7809 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -56.5,-61.5 + parent: 2 + - uid: 7810 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -42.5,-60.5 + parent: 2 + - uid: 7811 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -42.5,-59.5 + parent: 2 + - uid: 7812 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -42.5,-58.5 + parent: 2 + - uid: 7813 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -42.5,-57.5 + parent: 2 + - uid: 7814 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -42.5,-56.5 + parent: 2 + - uid: 7815 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -42.5,-55.5 + parent: 2 + - uid: 7816 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -50.5,-62.5 + parent: 2 + - uid: 7817 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -42.5,-62.5 + parent: 2 + - uid: 7818 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -42.5,-63.5 + parent: 2 + - uid: 7819 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -42.5,-64.5 + parent: 2 + - uid: 7820 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -42.5,-65.5 + parent: 2 + - uid: 7821 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -42.5,-66.5 + parent: 2 + - uid: 7822 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -42.5,-67.5 + parent: 2 + - uid: 7823 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -46.5,-62.5 + parent: 2 + - uid: 7824 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -46.5,-63.5 + parent: 2 + - uid: 7825 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -46.5,-64.5 + parent: 2 + - uid: 7826 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -46.5,-65.5 + parent: 2 + - uid: 7827 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -46.5,-66.5 + parent: 2 + - uid: 7828 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -50.5,-63.5 + parent: 2 + - uid: 7829 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -50.5,-64.5 + parent: 2 + - uid: 7830 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -50.5,-65.5 + parent: 2 + - uid: 7831 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -54.5,-62.5 + parent: 2 + - uid: 7832 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -54.5,-63.5 + parent: 2 + - uid: 7833 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -54.5,-64.5 + parent: 2 + - uid: 7834 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -54.5,-65.5 + parent: 2 + - uid: 7835 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -54.5,-60.5 + parent: 2 + - uid: 7836 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -54.5,-59.5 + parent: 2 + - uid: 7837 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -54.5,-58.5 + parent: 2 + - uid: 7838 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -54.5,-57.5 + parent: 2 + - uid: 7839 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -50.5,-57.5 + parent: 2 + - uid: 7840 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -50.5,-58.5 + parent: 2 + - uid: 7841 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -50.5,-59.5 + parent: 2 + - uid: 7842 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -50.5,-60.5 + parent: 2 + - uid: 7843 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -46.5,-60.5 + parent: 2 + - uid: 7844 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -46.5,-59.5 + parent: 2 + - uid: 7845 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -46.5,-58.5 + parent: 2 + - uid: 7846 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -46.5,-57.5 + parent: 2 + - uid: 7847 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -46.5,-56.5 + parent: 2 + - uid: 7848 + components: + - type: Transform + pos: -48.5,15.5 + parent: 2 + - uid: 7849 + components: + - type: Transform + pos: -48.5,14.5 + parent: 2 + - uid: 7850 + components: + - type: Transform + pos: -48.5,13.5 + parent: 2 + - uid: 7851 + components: + - type: Transform + pos: -48.5,12.5 + parent: 2 + - uid: 7852 + components: + - type: Transform + pos: -46.5,11.5 + parent: 2 + - uid: 7853 + components: + - type: Transform + pos: -47.5,11.5 + parent: 2 + - uid: 7854 + components: + - type: Transform + pos: -48.5,11.5 + parent: 2 + - uid: 7855 + components: + - type: Transform + pos: -66.5,23.5 + parent: 2 + - uid: 7856 + components: + - type: Transform + pos: -67.5,23.5 + parent: 2 + - uid: 7857 + components: + - type: Transform + pos: -68.5,23.5 + parent: 2 + - uid: 7858 + components: + - type: Transform + pos: -69.5,23.5 + parent: 2 + - uid: 7859 + components: + - type: Transform + pos: -71.5,23.5 + parent: 2 + - uid: 7860 + components: + - type: Transform + pos: -70.5,23.5 + parent: 2 + - uid: 7861 + components: + - type: Transform + pos: -65.5,23.5 + parent: 2 + - uid: 7862 + components: + - type: Transform + pos: -47.5,17.5 + parent: 2 + - uid: 7863 + components: + - type: Transform + pos: -48.5,17.5 + parent: 2 + - uid: 7864 + components: + - type: Transform + pos: -49.5,17.5 + parent: 2 + - uid: 7865 + components: + - type: Transform + pos: -48.5,16.5 + parent: 2 + - uid: 7866 + components: + - type: Transform + pos: -72.5,23.5 + parent: 2 + - uid: 7867 + components: + - type: Transform + pos: -17.5,-51.5 + parent: 2 + - uid: 7868 + components: + - type: Transform + pos: -16.5,-51.5 + parent: 2 + - uid: 7869 + components: + - type: Transform + pos: -15.5,-51.5 + parent: 2 + - uid: 7870 + components: + - type: Transform + pos: -9.5,-52.5 + parent: 2 + - uid: 7871 + components: + - type: Transform + pos: -8.5,-52.5 + parent: 2 + - uid: 7872 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,-52.5 + parent: 2 + - uid: 7873 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,-52.5 + parent: 2 + - uid: 7874 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,-51.5 + parent: 2 + - uid: 7875 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,-48.5 + parent: 2 + - uid: 7876 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,-49.5 + parent: 2 + - uid: 7877 + components: + - type: Transform + pos: -4.5,-47.5 + parent: 2 + - uid: 7878 + components: + - type: Transform + pos: -4.5,-46.5 + parent: 2 + - uid: 7879 + components: + - type: Transform + pos: -4.5,-45.5 + parent: 2 + - uid: 7880 + components: + - type: Transform + pos: -3.5,-46.5 + parent: 2 + - uid: 7881 + components: + - type: Transform + pos: -4.5,-43.5 + parent: 2 + - uid: 7882 + components: + - type: Transform + pos: -4.5,-42.5 + parent: 2 + - uid: 7883 + components: + - type: Transform + pos: -3.5,-42.5 + parent: 2 + - uid: 7884 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,-3.5 + parent: 2 + - uid: 7885 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,-3.5 + parent: 2 + - uid: 7886 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 20.5,-3.5 + parent: 2 + - uid: 7887 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,-3.5 + parent: 2 + - uid: 7888 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,-3.5 + parent: 2 + - uid: 7889 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 23.5,-3.5 + parent: 2 + - uid: 7890 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 23.5,-2.5 + parent: 2 + - uid: 7891 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 23.5,-1.5 + parent: 2 + - uid: 7892 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 61.5,24.5 + parent: 2 + - uid: 7893 + components: + - type: Transform + pos: 42.5,20.5 + parent: 2 + - uid: 7894 + components: + - type: Transform + pos: 42.5,21.5 + parent: 2 + - uid: 7895 + components: + - type: Transform + pos: 42.5,22.5 + parent: 2 + - uid: 7896 + components: + - type: Transform + pos: 43.5,22.5 + parent: 2 + - uid: 7897 + components: + - type: Transform + pos: 43.5,23.5 + parent: 2 + - uid: 7898 + components: + - type: Transform + pos: 43.5,24.5 + parent: 2 + - uid: 7899 + components: + - type: Transform + pos: 43.5,25.5 + parent: 2 + - uid: 7900 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 45.5,16.5 + parent: 2 + - uid: 7901 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,16.5 + parent: 2 + - uid: 7902 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 47.5,16.5 + parent: 2 + - uid: 7903 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 48.5,16.5 + parent: 2 + - uid: 7904 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 49.5,16.5 + parent: 2 + - uid: 7905 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 50.5,16.5 + parent: 2 + - uid: 7906 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 50.5,17.5 + parent: 2 + - uid: 7907 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 50.5,18.5 + parent: 2 + - uid: 7908 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 50.5,19.5 + parent: 2 + - uid: 7909 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 50.5,20.5 + parent: 2 + - uid: 7910 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 50.5,21.5 + parent: 2 + - uid: 7911 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 50.5,22.5 + parent: 2 + - uid: 7912 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 50.5,23.5 + parent: 2 + - uid: 7913 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 51.5,23.5 + parent: 2 + - uid: 7914 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 52.5,23.5 + parent: 2 + - uid: 7915 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 53.5,23.5 + parent: 2 + - uid: 7916 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 54.5,23.5 + parent: 2 + - uid: 7917 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 55.5,23.5 + parent: 2 + - uid: 7918 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 56.5,23.5 + parent: 2 + - uid: 7919 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 57.5,23.5 + parent: 2 + - uid: 7920 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 58.5,23.5 + parent: 2 + - uid: 7921 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 59.5,23.5 + parent: 2 + - uid: 7922 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 60.5,23.5 + parent: 2 + - uid: 7923 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 62.5,23.5 + parent: 2 + - uid: 7924 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 63.5,23.5 + parent: 2 + - uid: 7925 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 61.5,22.5 + parent: 2 + - uid: 7926 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 61.5,21.5 + parent: 2 + - uid: 7927 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 61.5,20.5 + parent: 2 + - uid: 7928 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 61.5,19.5 + parent: 2 + - uid: 7929 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 61.5,18.5 + parent: 2 + - uid: 7930 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 61.5,17.5 + parent: 2 + - uid: 7931 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 61.5,25.5 + parent: 2 + - uid: 7932 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 61.5,26.5 + parent: 2 + - uid: 7933 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 61.5,27.5 + parent: 2 + - uid: 7934 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 61.5,28.5 + parent: 2 + - uid: 7935 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 61.5,29.5 + parent: 2 + - uid: 7936 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 57.5,24.5 + parent: 2 + - uid: 7937 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 57.5,22.5 + parent: 2 + - uid: 7938 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 57.5,21.5 + parent: 2 + - uid: 7939 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 57.5,20.5 + parent: 2 + - uid: 7940 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 57.5,19.5 + parent: 2 + - uid: 7941 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 57.5,18.5 + parent: 2 + - uid: 7942 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 57.5,17.5 + parent: 2 + - uid: 7943 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 64.5,23.5 + parent: 2 + - uid: 7944 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 66.5,23.5 + parent: 2 + - uid: 7945 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 67.5,23.5 + parent: 2 + - uid: 7946 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 68.5,23.5 + parent: 2 + - uid: 7947 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 69.5,23.5 + parent: 2 + - uid: 7948 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 65.5,24.5 + parent: 2 + - uid: 7949 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 65.5,25.5 + parent: 2 + - uid: 7950 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 65.5,26.5 + parent: 2 + - uid: 7951 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 65.5,27.5 + parent: 2 + - uid: 7952 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 65.5,28.5 + parent: 2 + - uid: 7953 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 65.5,22.5 + parent: 2 + - uid: 7954 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 65.5,21.5 + parent: 2 + - uid: 7955 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 65.5,20.5 + parent: 2 + - uid: 7956 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 65.5,19.5 + parent: 2 + - uid: 7957 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 65.5,18.5 + parent: 2 + - uid: 7958 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 69.5,22.5 + parent: 2 + - uid: 7959 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 69.5,21.5 + parent: 2 + - uid: 7960 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 69.5,20.5 + parent: 2 + - uid: 7961 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 69.5,19.5 + parent: 2 + - uid: 7962 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 69.5,24.5 + parent: 2 + - uid: 7963 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 69.5,25.5 + parent: 2 + - uid: 7964 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 69.5,26.5 + parent: 2 + - uid: 7965 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 69.5,27.5 + parent: 2 + - uid: 7966 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 70.5,23.5 + parent: 2 + - uid: 7967 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 72.5,23.5 + parent: 2 + - uid: 7968 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 73.5,23.5 + parent: 2 + - uid: 7969 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 74.5,23.5 + parent: 2 + - uid: 7970 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 75.5,23.5 + parent: 2 + - uid: 7971 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 73.5,24.5 + parent: 2 + - uid: 7972 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 73.5,25.5 + parent: 2 + - uid: 7973 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 73.5,26.5 + parent: 2 + - uid: 7974 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 73.5,27.5 + parent: 2 + - uid: 7975 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 73.5,22.5 + parent: 2 + - uid: 7976 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 73.5,21.5 + parent: 2 + - uid: 7977 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 73.5,20.5 + parent: 2 + - uid: 7978 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 73.5,19.5 + parent: 2 + - uid: 7979 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 57.5,25.5 + parent: 2 + - uid: 7980 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 57.5,26.5 + parent: 2 + - uid: 7981 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 57.5,27.5 + parent: 2 + - uid: 7982 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 57.5,28.5 + parent: 2 + - uid: 7983 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 57.5,29.5 + parent: 2 + - uid: 7984 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 57.5,30.5 + parent: 2 + - uid: 7985 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 57.5,31.5 + parent: 2 + - uid: 7986 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 57.5,32.5 + parent: 2 + - uid: 7987 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 61.5,23.5 + parent: 2 + - uid: 7988 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 65.5,23.5 + parent: 2 + - uid: 7989 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 71.5,23.5 + parent: 2 + - uid: 7990 + components: + - type: Transform + pos: 13.5,17.5 + parent: 2 + - uid: 7991 + components: + - type: Transform + pos: 13.5,18.5 + parent: 2 + - uid: 7992 + components: + - type: Transform + pos: 13.5,19.5 + parent: 2 + - uid: 7993 + components: + - type: Transform + pos: 13.5,20.5 + parent: 2 + - uid: 7994 + components: + - type: Transform + pos: 13.5,21.5 + parent: 2 + - uid: 7995 + components: + - type: Transform + pos: 13.5,22.5 + parent: 2 + - uid: 7996 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,26.5 + parent: 2 + - uid: 7997 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 16.5,26.5 + parent: 2 + - uid: 7998 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 17.5,26.5 + parent: 2 + - uid: 7999 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,26.5 + parent: 2 + - uid: 8000 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,26.5 + parent: 2 + - uid: 8001 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 20.5,26.5 + parent: 2 + - uid: 8002 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,26.5 + parent: 2 + - uid: 8003 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,26.5 + parent: 2 + - uid: 8004 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 23.5,26.5 + parent: 2 + - uid: 8005 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,26.5 + parent: 2 + - uid: 8006 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,26.5 + parent: 2 + - uid: 8007 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,26.5 + parent: 2 + - uid: 8008 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,26.5 + parent: 2 + - uid: 8009 + components: + - type: Transform + pos: 14.5,29.5 + parent: 2 + - uid: 8010 + components: + - type: Transform + pos: 12.5,31.5 + parent: 2 + - uid: 8011 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,47.5 + parent: 2 + - uid: 8012 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.5,49.5 + parent: 2 + - uid: 8013 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,50.5 + parent: 2 + - uid: 8014 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,50.5 + parent: 2 + - uid: 8015 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 16.5,46.5 + parent: 2 + - uid: 8016 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,46.5 + parent: 2 + - uid: 8017 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,47.5 + parent: 2 + - uid: 8018 + components: + - type: Transform + pos: -5.5,34.5 + parent: 2 + - uid: 8019 + components: + - type: Transform + pos: -5.5,33.5 + parent: 2 + - uid: 8020 + components: + - type: Transform + pos: -5.5,32.5 + parent: 2 + - uid: 8021 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,40.5 + parent: 2 + - uid: 8022 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,39.5 + parent: 2 + - uid: 8023 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,38.5 + parent: 2 + - uid: 8024 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,40.5 + parent: 2 + - uid: 8025 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,39.5 + parent: 2 + - uid: 8026 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,38.5 + parent: 2 + - uid: 8027 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,43.5 + parent: 2 + - uid: 8028 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,39.5 + parent: 2 + - uid: 8029 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,43.5 + parent: 2 + - uid: 8030 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,36.5 + parent: 2 + - uid: 8031 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,32.5 + parent: 2 + - uid: 8032 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,30.5 + parent: 2 + - uid: 8033 + components: + - type: Transform + pos: -1.5,42.5 + parent: 2 + - uid: 8034 + components: + - type: Transform + pos: -2.5,42.5 + parent: 2 + - uid: 8035 + components: + - type: Transform + pos: -3.5,42.5 + parent: 2 + - uid: 8036 + components: + - type: Transform + pos: -4.5,42.5 + parent: 2 + - uid: 8037 + components: + - type: Transform + pos: -5.5,42.5 + parent: 2 + - uid: 8038 + components: + - type: Transform + pos: -6.5,42.5 + parent: 2 + - uid: 8039 + components: + - type: Transform + pos: -6.5,43.5 + parent: 2 + - uid: 8040 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,45.5 + parent: 2 + - uid: 8041 + components: + - type: Transform + pos: -7.5,45.5 + parent: 2 + - uid: 8042 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,45.5 + parent: 2 + - uid: 8043 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,48.5 + parent: 2 + - uid: 8044 + components: + - type: Transform + pos: -46.5,17.5 + parent: 2 + - uid: 8045 + components: + - type: Transform + pos: -70.5,22.5 + parent: 2 + - uid: 8046 + components: + - type: Transform + pos: -66.5,24.5 + parent: 2 + - uid: 8047 + components: + - type: Transform + pos: -66.5,25.5 + parent: 2 + - uid: 8048 + components: + - type: Transform + pos: -66.5,26.5 + parent: 2 + - uid: 8049 + components: + - type: Transform + pos: -66.5,27.5 + parent: 2 + - uid: 8050 + components: + - type: Transform + pos: -70.5,24.5 + parent: 2 + - uid: 8051 + components: + - type: Transform + pos: -70.5,25.5 + parent: 2 + - uid: 8052 + components: + - type: Transform + pos: -70.5,26.5 + parent: 2 + - uid: 8053 + components: + - type: Transform + pos: -70.5,27.5 + parent: 2 + - uid: 8054 + components: + - type: Transform + pos: -62.5,28.5 + parent: 2 + - uid: 8055 + components: + - type: Transform + pos: -62.5,27.5 + parent: 2 + - uid: 8056 + components: + - type: Transform + pos: -62.5,26.5 + parent: 2 + - uid: 8057 + components: + - type: Transform + pos: -61.5,26.5 + parent: 2 + - uid: 8058 + components: + - type: Transform + pos: -59.5,26.5 + parent: 2 + - uid: 8059 + components: + - type: Transform + pos: -57.5,27.5 + parent: 2 + - uid: 8060 + components: + - type: Transform + pos: -58.5,28.5 + parent: 2 + - uid: 8061 + components: + - type: Transform + pos: -58.5,29.5 + parent: 2 + - uid: 8062 + components: + - type: Transform + pos: -54.5,28.5 + parent: 2 + - uid: 8063 + components: + - type: Transform + pos: -54.5,29.5 + parent: 2 + - uid: 8064 + components: + - type: Transform + pos: -53.5,29.5 + parent: 2 + - uid: 8065 + components: + - type: Transform + pos: -52.5,29.5 + parent: 2 + - uid: 8066 + components: + - type: Transform + pos: -54.5,30.5 + parent: 2 + - uid: 8067 + components: + - type: Transform + pos: -54.5,31.5 + parent: 2 + - uid: 8068 + components: + - type: Transform + pos: -54.5,32.5 + parent: 2 + - uid: 8069 + components: + - type: Transform + pos: -70.5,21.5 + parent: 2 + - uid: 8070 + components: + - type: Transform + pos: -70.5,20.5 + parent: 2 + - uid: 8071 + components: + - type: Transform + pos: -70.5,19.5 + parent: 2 + - uid: 8072 + components: + - type: Transform + pos: -66.5,21.5 + parent: 2 + - uid: 8073 + components: + - type: Transform + pos: -66.5,20.5 + parent: 2 + - uid: 8074 + components: + - type: Transform + pos: -66.5,19.5 + parent: 2 + - uid: 8075 + components: + - type: Transform + pos: -66.5,22.5 + parent: 2 + - uid: 8076 + components: + - type: Transform + pos: -65.5,21.5 + parent: 2 + - uid: 8077 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -44.5,39.5 + parent: 2 + - uid: 8078 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -47.5,40.5 + parent: 2 + - uid: 8079 + components: + - type: Transform + pos: 12.5,53.5 + parent: 2 + - uid: 8080 + components: + - type: Transform + pos: 12.5,54.5 + parent: 2 + - uid: 8081 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,73.5 + parent: 2 + - uid: 8082 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,74.5 + parent: 2 + - uid: 8083 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,75.5 + parent: 2 + - uid: 8084 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,76.5 + parent: 2 + - uid: 8085 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,77.5 + parent: 2 + - uid: 8086 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,78.5 + parent: 2 + - uid: 8087 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,79.5 + parent: 2 + - uid: 8088 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,80.5 + parent: 2 + - uid: 8089 + components: + - type: Transform + pos: 7.5,81.5 + parent: 2 + - uid: 8090 + components: + - type: Transform + pos: 7.5,82.5 + parent: 2 + - uid: 8091 + components: + - type: Transform + pos: 7.5,83.5 + parent: 2 + - uid: 8092 + components: + - type: Transform + pos: 7.5,84.5 + parent: 2 + - uid: 8093 + components: + - type: Transform + pos: 6.5,84.5 + parent: 2 + - uid: 8094 + components: + - type: Transform + pos: 5.5,84.5 + parent: 2 + - uid: 8095 + components: + - type: Transform + pos: 4.5,84.5 + parent: 2 + - uid: 8096 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,76.5 + parent: 2 + - uid: 8097 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,77.5 + parent: 2 + - uid: 8098 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,78.5 + parent: 2 + - uid: 8099 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,76.5 + parent: 2 + - uid: 8100 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,77.5 + parent: 2 + - uid: 8101 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,78.5 + parent: 2 + - uid: 8102 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-26.5 + parent: 2 + - uid: 8103 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-27.5 + parent: 2 + - uid: 8104 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,-31.5 + parent: 2 + - uid: 8105 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,-31.5 + parent: 2 + - uid: 8106 + components: + - type: Transform + pos: 9.5,-35.5 + parent: 2 + - uid: 8107 + components: + - type: Transform + pos: 10.5,-35.5 + parent: 2 + - uid: 8108 + components: + - type: Transform + pos: 10.5,-34.5 + parent: 2 + - uid: 8109 + components: + - type: Transform + pos: 11.5,-34.5 + parent: 2 + - uid: 8110 + components: + - type: Transform + pos: 12.5,-34.5 + parent: 2 + - uid: 8111 + components: + - type: Transform + pos: 13.5,-34.5 + parent: 2 + - uid: 8112 + components: + - type: Transform + pos: 14.5,-34.5 + parent: 2 + - uid: 8113 + components: + - type: Transform + pos: 15.5,-34.5 + parent: 2 + - uid: 8114 + components: + - type: Transform + pos: 16.5,-34.5 + parent: 2 + - uid: 8115 + components: + - type: Transform + pos: 17.5,-34.5 + parent: 2 + - uid: 8116 + components: + - type: Transform + pos: 18.5,-34.5 + parent: 2 + - uid: 8117 + components: + - type: Transform + pos: 19.5,-34.5 + parent: 2 + - uid: 8118 + components: + - type: Transform + pos: 20.5,-34.5 + parent: 2 + - uid: 8119 + components: + - type: Transform + pos: 21.5,-34.5 + parent: 2 + - uid: 8120 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,-38.5 + parent: 2 + - uid: 8121 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,-37.5 + parent: 2 + - uid: 8122 + components: + - type: Transform + pos: 27.5,-36.5 + parent: 2 + - uid: 8123 + components: + - type: Transform + pos: 27.5,-35.5 + parent: 2 + - uid: 8124 + components: + - type: Transform + pos: 27.5,-34.5 + parent: 2 + - uid: 8125 + components: + - type: Transform + pos: 27.5,-33.5 + parent: 2 + - uid: 8126 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,-51.5 + parent: 2 + - uid: 8127 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,-52.5 + parent: 2 + - uid: 8128 + components: + - type: Transform + pos: 46.5,-37.5 + parent: 2 + - uid: 8129 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,-65.5 + parent: 2 + - uid: 8130 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,-66.5 + parent: 2 + - uid: 8131 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,-67.5 + parent: 2 + - uid: 8132 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,-68.5 + parent: 2 + - uid: 8133 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,-69.5 + parent: 2 + - uid: 8134 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,-70.5 + parent: 2 + - uid: 8135 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,-71.5 + parent: 2 + - uid: 8136 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,-71.5 + parent: 2 + - uid: 8137 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,-71.5 + parent: 2 + - uid: 8138 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,-71.5 + parent: 2 + - uid: 8139 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,-71.5 + parent: 2 + - uid: 8140 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,-71.5 + parent: 2 + - uid: 8141 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,-63.5 + parent: 2 + - uid: 8142 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,-63.5 + parent: 2 + - uid: 8143 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,-70.5 + parent: 2 + - uid: 8144 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,-67.5 + parent: 2 + - uid: 8145 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,-65.5 + parent: 2 + - uid: 8146 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,-64.5 + parent: 2 + - uid: 8147 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,-66.5 + parent: 2 + - uid: 8148 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,-68.5 + parent: 2 + - uid: 8149 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,-69.5 + parent: 2 + - uid: 8150 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,-67.5 + parent: 2 + - uid: 8151 + components: + - type: Transform + pos: 20.5,-53.5 + parent: 2 + - uid: 8152 + components: + - type: Transform + pos: 20.5,-54.5 + parent: 2 + - uid: 8153 + components: + - type: Transform + pos: 20.5,-56.5 + parent: 2 + - uid: 8154 + components: + - type: Transform + pos: 20.5,-57.5 + parent: 2 + - uid: 8155 + components: + - type: Transform + pos: 20.5,-58.5 + parent: 2 + - uid: 8156 + components: + - type: Transform + pos: 20.5,-59.5 + parent: 2 + - uid: 8157 + components: + - type: Transform + pos: 20.5,-60.5 + parent: 2 + - uid: 8158 + components: + - type: Transform + pos: 20.5,-61.5 + parent: 2 + - uid: 8159 + components: + - type: Transform + pos: 20.5,-62.5 + parent: 2 + - uid: 8160 + components: + - type: Transform + pos: 20.5,-63.5 + parent: 2 + - uid: 8161 + components: + - type: Transform + pos: 20.5,-64.5 + parent: 2 + - uid: 8162 + components: + - type: Transform + pos: 20.5,-55.5 + parent: 2 + - uid: 8163 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 40.5,-46.5 + parent: 2 + - uid: 8164 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 20.5,-65.5 + parent: 2 + - uid: 8165 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 20.5,-66.5 + parent: 2 + - uid: 8166 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 20.5,-67.5 + parent: 2 + - uid: 8167 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 20.5,-68.5 + parent: 2 + - uid: 8168 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,-68.5 + parent: 2 + - uid: 8169 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,-68.5 + parent: 2 + - uid: 8170 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 23.5,-68.5 + parent: 2 + - uid: 8171 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,-68.5 + parent: 2 + - uid: 8172 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,-67.5 + parent: 2 + - uid: 8173 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,-66.5 + parent: 2 + - uid: 8174 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,-66.5 + parent: 2 + - uid: 8175 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,-66.5 + parent: 2 + - uid: 8176 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,-66.5 + parent: 2 + - uid: 8177 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,-66.5 + parent: 2 + - uid: 8178 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 29.5,-66.5 + parent: 2 + - uid: 8179 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,-66.5 + parent: 2 + - uid: 8180 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,-66.5 + parent: 2 + - uid: 8181 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,-66.5 + parent: 2 + - uid: 8182 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,-66.5 + parent: 2 + - uid: 8183 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-66.5 + parent: 2 + - uid: 8184 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-65.5 + parent: 2 + - uid: 8185 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-64.5 + parent: 2 + - uid: 8186 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-63.5 + parent: 2 + - uid: 8187 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-62.5 + parent: 2 + - uid: 8188 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-61.5 + parent: 2 + - uid: 8189 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-60.5 + parent: 2 + - uid: 8190 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-59.5 + parent: 2 + - uid: 8191 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-58.5 + parent: 2 + - uid: 8192 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-57.5 + parent: 2 + - uid: 8193 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-56.5 + parent: 2 + - uid: 8194 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-55.5 + parent: 2 + - uid: 8195 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-54.5 + parent: 2 + - uid: 8196 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-53.5 + parent: 2 + - uid: 8197 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 44.5,-45.5 + parent: 2 + - uid: 8198 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 44.5,-46.5 + parent: 2 + - uid: 8199 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,-46.5 + parent: 2 + - uid: 8200 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 42.5,-46.5 + parent: 2 + - uid: 8201 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 42.5,-47.5 + parent: 2 + - uid: 8202 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 42.5,-48.5 + parent: 2 + - uid: 8203 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 41.5,-48.5 + parent: 2 + - uid: 8204 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 40.5,-48.5 + parent: 2 + - uid: 8205 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 40.5,-49.5 + parent: 2 + - uid: 8206 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 40.5,-50.5 + parent: 2 + - uid: 8207 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 40.5,-51.5 + parent: 2 + - uid: 8208 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 40.5,-52.5 + parent: 2 + - uid: 8209 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 40.5,-53.5 + parent: 2 + - uid: 8210 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 40.5,-54.5 + parent: 2 + - uid: 8211 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 40.5,-55.5 + parent: 2 + - uid: 8212 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 40.5,-56.5 + parent: 2 + - uid: 8213 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 40.5,-57.5 + parent: 2 + - uid: 8214 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 40.5,-58.5 + parent: 2 + - uid: 8215 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 40.5,-59.5 + parent: 2 + - uid: 8216 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 51.5,-61.5 + parent: 2 + - uid: 8217 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,-66.5 + parent: 2 + - uid: 8218 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 44.5,-66.5 + parent: 2 + - uid: 8219 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 45.5,-66.5 + parent: 2 + - uid: 8220 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,-63.5 + parent: 2 + - uid: 8221 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,-62.5 + parent: 2 + - uid: 8222 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,-61.5 + parent: 2 + - uid: 8223 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,-60.5 + parent: 2 + - uid: 8224 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,-59.5 + parent: 2 + - uid: 8225 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,-58.5 + parent: 2 + - uid: 8226 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,-57.5 + parent: 2 + - uid: 8227 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,-56.5 + parent: 2 + - uid: 8228 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,-55.5 + parent: 2 + - uid: 8229 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,-54.5 + parent: 2 + - uid: 8230 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,-53.5 + parent: 2 + - uid: 8231 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,-52.5 + parent: 2 + - uid: 8232 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,-51.5 + parent: 2 + - uid: 8233 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 47.5,-52.5 + parent: 2 + - uid: 8234 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 47.5,-53.5 + parent: 2 + - uid: 8235 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 47.5,-54.5 + parent: 2 + - uid: 8236 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 47.5,-55.5 + parent: 2 + - uid: 8237 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 47.5,-56.5 + parent: 2 + - uid: 8238 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 47.5,-58.5 + parent: 2 + - uid: 8239 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 47.5,-59.5 + parent: 2 + - uid: 8240 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 47.5,-60.5 + parent: 2 + - uid: 8241 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 47.5,-61.5 + parent: 2 + - uid: 8242 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 47.5,-62.5 + parent: 2 + - uid: 8243 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 51.5,-60.5 + parent: 2 + - uid: 8244 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 51.5,-59.5 + parent: 2 + - uid: 8245 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 51.5,-58.5 + parent: 2 + - uid: 8246 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 51.5,-56.5 + parent: 2 + - uid: 8247 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 51.5,-55.5 + parent: 2 + - uid: 8248 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 51.5,-54.5 + parent: 2 + - uid: 8249 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 51.5,-53.5 + parent: 2 + - uid: 8250 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 55.5,-53.5 + parent: 2 + - uid: 8251 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 55.5,-54.5 + parent: 2 + - uid: 8252 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 55.5,-55.5 + parent: 2 + - uid: 8253 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 55.5,-56.5 + parent: 2 + - uid: 8254 + components: + - type: Transform + pos: 47.5,-57.5 + parent: 2 + - uid: 8255 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 55.5,-58.5 + parent: 2 + - uid: 8256 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 55.5,-59.5 + parent: 2 + - uid: 8257 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 55.5,-60.5 + parent: 2 + - uid: 8258 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 55.5,-61.5 + parent: 2 + - uid: 8259 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 41.5,-57.5 + parent: 2 + - uid: 8260 + components: + - type: Transform + pos: 45.5,-57.5 + parent: 2 + - uid: 8261 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 57.5,-57.5 + parent: 2 + - uid: 8262 + components: + - type: Transform + pos: 49.5,-57.5 + parent: 2 + - uid: 8263 + components: + - type: Transform + pos: 56.5,-57.5 + parent: 2 + - uid: 8264 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 42.5,-57.5 + parent: 2 + - uid: 8265 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,-72.5 + parent: 2 + - uid: 8266 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,-73.5 + parent: 2 + - uid: 8267 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,-74.5 + parent: 2 + - uid: 8268 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,-75.5 + parent: 2 + - uid: 8269 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,-76.5 + parent: 2 + - uid: 8270 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,-74.5 + parent: 2 + - uid: 8271 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,-72.5 + parent: 2 + - uid: 8272 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,-73.5 + parent: 2 + - uid: 8273 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,-74.5 + parent: 2 + - uid: 8274 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,-75.5 + parent: 2 + - uid: 8275 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,-76.5 + parent: 2 + - uid: 8276 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 13.5,-74.5 + parent: 2 + - uid: 8277 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,-72.5 + parent: 2 + - uid: 8278 + components: + - type: Transform + pos: 8.5,-35.5 + parent: 2 + - uid: 8279 + components: + - type: Transform + pos: 7.5,-35.5 + parent: 2 + - uid: 8280 + components: + - type: Transform + pos: 6.5,-35.5 + parent: 2 + - uid: 8281 + components: + - type: Transform + pos: 5.5,-35.5 + parent: 2 + - uid: 8282 + components: + - type: Transform + pos: 4.5,-35.5 + parent: 2 + - uid: 8283 + components: + - type: Transform + pos: 3.5,-35.5 + parent: 2 + - uid: 8284 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-31.5 + parent: 2 + - uid: 8285 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-30.5 + parent: 2 + - uid: 8286 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-29.5 + parent: 2 + - uid: 8287 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-28.5 + parent: 2 + - uid: 8288 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,-69.5 + parent: 2 + - uid: 8289 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,-70.5 + parent: 2 + - uid: 8290 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,-71.5 + parent: 2 + - uid: 8291 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,-72.5 + parent: 2 + - uid: 8292 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,-72.5 + parent: 2 + - uid: 8293 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,-72.5 + parent: 2 + - uid: 8294 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,-72.5 + parent: 2 + - uid: 8295 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,-51.5 + parent: 2 + - uid: 8296 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,-34.5 + parent: 2 + - uid: 8297 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,-33.5 + parent: 2 + - uid: 8298 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,-32.5 + parent: 2 + - uid: 8299 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,-31.5 + parent: 2 + - uid: 8300 + components: + - type: Transform + pos: -20.5,14.5 + parent: 2 + - uid: 8301 + components: + - type: Transform + pos: -20.5,15.5 + parent: 2 + - uid: 8302 + components: + - type: Transform + pos: -18.5,-12.5 + parent: 2 + - uid: 8303 + components: + - type: Transform + pos: -20.5,-13.5 + parent: 2 + - uid: 8304 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,-43.5 + parent: 2 + - uid: 8305 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,-43.5 + parent: 2 + - uid: 8306 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,-43.5 + parent: 2 + - uid: 8307 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -25.5,-43.5 + parent: 2 + - uid: 8308 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,-43.5 + parent: 2 + - uid: 8309 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,-43.5 + parent: 2 + - uid: 8310 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -28.5,-43.5 + parent: 2 + - uid: 8311 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,-43.5 + parent: 2 + - uid: 8312 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.5,-43.5 + parent: 2 + - uid: 8313 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,-51.5 + parent: 2 + - uid: 8314 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,-51.5 + parent: 2 + - uid: 8315 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,-51.5 + parent: 2 + - uid: 8316 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-17.5 + parent: 2 + - uid: 8317 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-17.5 + parent: 2 + - uid: 8318 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-17.5 + parent: 2 + - uid: 8319 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,-17.5 + parent: 2 + - uid: 8320 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,-17.5 + parent: 2 + - uid: 8321 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,-17.5 + parent: 2 + - uid: 8322 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,-16.5 + parent: 2 + - uid: 8323 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,-16.5 + parent: 2 + - uid: 8324 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,-16.5 + parent: 2 + - uid: 8325 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,-16.5 + parent: 2 + - uid: 8326 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,-16.5 + parent: 2 + - uid: 8327 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,-16.5 + parent: 2 + - uid: 8328 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,-13.5 + parent: 2 + - uid: 8329 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,-13.5 + parent: 2 + - uid: 8330 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,-13.5 + parent: 2 + - uid: 8331 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,-12.5 + parent: 2 + - uid: 8332 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,-10.5 + parent: 2 + - uid: 8333 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,-9.5 + parent: 2 + - uid: 8334 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,-9.5 + parent: 2 + - uid: 8335 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,-9.5 + parent: 2 + - uid: 8336 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,-11.5 + parent: 2 + - uid: 8337 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,-8.5 + parent: 2 + - uid: 8338 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -19.5,-8.5 + parent: 2 + - uid: 8339 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,-16.5 + parent: 2 + - uid: 8340 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-16.5 + parent: 2 + - uid: 8341 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,-16.5 + parent: 2 + - uid: 8342 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,-16.5 + parent: 2 + - uid: 8343 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,-16.5 + parent: 2 + - uid: 8344 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,-16.5 + parent: 2 + - uid: 8345 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-16.5 + parent: 2 + - uid: 8346 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-14.5 + parent: 2 + - uid: 8347 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-13.5 + parent: 2 + - uid: 8348 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,-12.5 + parent: 2 + - uid: 8349 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,-12.5 + parent: 2 + - uid: 8350 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,-11.5 + parent: 2 + - uid: 8351 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,-10.5 + parent: 2 + - uid: 8352 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,-9.5 + parent: 2 + - uid: 8353 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,-8.5 + parent: 2 + - uid: 8354 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,-7.5 + parent: 2 + - uid: 8355 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,21.5 + parent: 2 + - uid: 8356 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,21.5 + parent: 2 + - uid: 8357 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,21.5 + parent: 2 + - uid: 8358 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,21.5 + parent: 2 + - uid: 8359 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,21.5 + parent: 2 + - uid: 8360 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,21.5 + parent: 2 + - uid: 8361 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,21.5 + parent: 2 + - uid: 8362 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,21.5 + parent: 2 + - uid: 8363 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,-38.5 + parent: 2 + - uid: 8364 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,-52.5 + parent: 2 + - uid: 8365 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,-52.5 + parent: 2 + - uid: 8366 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,-53.5 + parent: 2 + - uid: 8367 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,-54.5 + parent: 2 + - uid: 8368 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,-50.5 + parent: 2 + - uid: 8369 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,-50.5 + parent: 2 + - uid: 8370 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,-50.5 + parent: 2 + - uid: 8371 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,-50.5 + parent: 2 + - uid: 8372 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,-50.5 + parent: 2 + - uid: 8373 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,-50.5 + parent: 2 + - uid: 8374 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,-50.5 + parent: 2 + - uid: 8375 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,-51.5 + parent: 2 + - uid: 8376 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,-52.5 + parent: 2 + - uid: 8377 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,-53.5 + parent: 2 + - uid: 8378 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,-54.5 + parent: 2 + - uid: 8379 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,-55.5 + parent: 2 + - uid: 8380 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -29.5,-55.5 + parent: 2 + - uid: 8381 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,-55.5 + parent: 2 + - uid: 8382 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,-55.5 + parent: 2 + - uid: 8383 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,-55.5 + parent: 2 + - uid: 8384 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,-51.5 + parent: 2 + - uid: 8385 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,-53.5 + parent: 2 + - uid: 8386 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,-54.5 + parent: 2 + - uid: 8387 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -38.5,-33.5 + parent: 2 + - uid: 8388 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -38.5,-31.5 + parent: 2 + - uid: 8389 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -38.5,-30.5 + parent: 2 + - uid: 8390 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -38.5,-29.5 + parent: 2 + - uid: 8391 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -38.5,-26.5 + parent: 2 + - uid: 8392 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -38.5,-24.5 + parent: 2 + - uid: 8393 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -37.5,-24.5 + parent: 2 + - uid: 8394 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,16.5 + parent: 2 + - uid: 8395 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,16.5 + parent: 2 + - uid: 8396 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -19.5,15.5 + parent: 2 + - uid: 8397 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,15.5 + parent: 2 + - uid: 8398 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,15.5 + parent: 2 + - uid: 8399 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,15.5 + parent: 2 + - uid: 8400 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,16.5 + parent: 2 + - uid: 8401 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,16.5 + parent: 2 + - uid: 8402 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,18.5 + parent: 2 + - uid: 8403 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,19.5 + parent: 2 + - uid: 8404 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,20.5 + parent: 2 + - uid: 8405 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,20.5 + parent: 2 + - uid: 8406 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,21.5 + parent: 2 + - uid: 8407 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,23.5 + parent: 2 + - uid: 8408 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,44.5 + parent: 2 + - uid: 8409 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,46.5 + parent: 2 + - uid: 8410 + components: + - type: Transform + pos: -16.5,-12.5 + parent: 2 + - uid: 8411 + components: + - type: Transform + pos: -19.5,-12.5 + parent: 2 + - uid: 8412 + components: + - type: Transform + pos: 40.5,-37.5 + parent: 2 + - uid: 8413 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 34.5,-36.5 + parent: 2 + - uid: 8414 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.5,-37.5 + parent: 2 + - uid: 8415 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,-37.5 + parent: 2 + - uid: 8416 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 35.5,-38.5 + parent: 2 + - uid: 8417 + components: + - type: Transform + pos: 36.5,-36.5 + parent: 2 + - uid: 8418 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,47.5 + parent: 2 + - uid: 8419 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,-63.5 + parent: 2 + - uid: 8420 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,-64.5 + parent: 2 + - uid: 8421 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,-63.5 + parent: 2 + - uid: 8422 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,-65.5 + parent: 2 + - uid: 8423 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,-65.5 + parent: 2 + - uid: 8424 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,-65.5 + parent: 2 + - uid: 8425 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,-69.5 + parent: 2 + - uid: 8426 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,-69.5 + parent: 2 + - uid: 8427 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,-67.5 + parent: 2 + - uid: 8428 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,-67.5 + parent: 2 + - uid: 8429 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,-65.5 + parent: 2 + - uid: 8430 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,-63.5 + parent: 2 + - uid: 8431 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,-63.5 + parent: 2 + - uid: 8432 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,-63.5 + parent: 2 + - uid: 8433 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,-67.5 + parent: 2 + - uid: 8434 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,-67.5 + parent: 2 + - uid: 8435 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,-69.5 + parent: 2 + - uid: 8436 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,-69.5 + parent: 2 + - uid: 8437 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,-65.5 + parent: 2 + - uid: 8438 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,-66.5 + parent: 2 + - uid: 8439 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,-69.5 + parent: 2 + - uid: 8440 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,-66.5 + parent: 2 + - uid: 8441 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,-65.5 + parent: 2 + - uid: 8442 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,-69.5 + parent: 2 + - uid: 8443 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,-64.5 + parent: 2 + - uid: 8444 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,-67.5 + parent: 2 + - uid: 8445 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,-71.5 + parent: 2 + - uid: 8446 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,-71.5 + parent: 2 + - uid: 23980 + components: + - type: Transform + pos: -7.5,59.5 + parent: 2 + - uid: 23981 + components: + - type: Transform + pos: -7.5,60.5 + parent: 2 + - uid: 23982 + components: + - type: Transform + pos: -7.5,61.5 + parent: 2 + - uid: 23983 + components: + - type: Transform + pos: -7.5,62.5 + parent: 2 + - uid: 23984 + components: + - type: Transform + pos: -7.5,66.5 + parent: 2 + - uid: 23985 + components: + - type: Transform + pos: -7.5,67.5 + parent: 2 + - uid: 23986 + components: + - type: Transform + pos: -7.5,68.5 + parent: 2 + - uid: 23987 + components: + - type: Transform + pos: -7.5,69.5 + parent: 2 + - uid: 23988 + components: + - type: Transform + pos: -4.5,67.5 + parent: 2 + - uid: 23989 + components: + - type: Transform + pos: -4.5,66.5 + parent: 2 + - uid: 23990 + components: + - type: Transform + pos: -4.5,65.5 + parent: 2 + - uid: 23991 + components: + - type: Transform + pos: -4.5,64.5 + parent: 2 + - uid: 23992 + components: + - type: Transform + pos: -4.5,63.5 + parent: 2 + - uid: 23993 + components: + - type: Transform + pos: -4.5,62.5 + parent: 2 + - uid: 23994 + components: + - type: Transform + pos: -4.5,68.5 + parent: 2 + - uid: 23995 + components: + - type: Transform + pos: -2.5,67.5 + parent: 2 + - uid: 23996 + components: + - type: Transform + pos: -2.5,66.5 + parent: 2 + - uid: 23997 + components: + - type: Transform + pos: -2.5,65.5 + parent: 2 + - uid: 23998 + components: + - type: Transform + pos: -2.5,64.5 + parent: 2 + - uid: 23999 + components: + - type: Transform + pos: -1.5,66.5 + parent: 2 + - uid: 24000 + components: + - type: Transform + pos: -0.5,66.5 + parent: 2 + - uid: 24001 + components: + - type: Transform + pos: 0.5,66.5 + parent: 2 + - uid: 24002 + components: + - type: Transform + pos: 1.5,66.5 + parent: 2 + - uid: 24003 + components: + - type: Transform + pos: 2.5,66.5 + parent: 2 + - uid: 24004 + components: + - type: Transform + pos: 3.5,66.5 + parent: 2 + - uid: 24005 + components: + - type: Transform + pos: 4.5,67.5 + parent: 2 + - uid: 24006 + components: + - type: Transform + pos: 4.5,66.5 + parent: 2 + - uid: 24007 + components: + - type: Transform + pos: 4.5,65.5 + parent: 2 + - uid: 24008 + components: + - type: Transform + pos: 4.5,64.5 + parent: 2 + - uid: 24009 + components: + - type: Transform + pos: 6.5,62.5 + parent: 2 + - uid: 24010 + components: + - type: Transform + pos: 6.5,63.5 + parent: 2 + - uid: 24011 + components: + - type: Transform + pos: 6.5,64.5 + parent: 2 + - uid: 24012 + components: + - type: Transform + pos: 6.5,65.5 + parent: 2 + - uid: 24013 + components: + - type: Transform + pos: 6.5,66.5 + parent: 2 + - uid: 24014 + components: + - type: Transform + pos: 6.5,67.5 + parent: 2 + - uid: 24015 + components: + - type: Transform + pos: 6.5,68.5 + parent: 2 + - uid: 24016 + components: + - type: Transform + pos: 9.5,68.5 + parent: 2 + - uid: 24017 + components: + - type: Transform + pos: 9.5,67.5 + parent: 2 + - uid: 24018 + components: + - type: Transform + pos: 9.5,66.5 + parent: 2 + - uid: 24019 + components: + - type: Transform + pos: 9.5,62.5 + parent: 2 + - uid: 24020 + components: + - type: Transform + pos: 9.5,61.5 + parent: 2 + - uid: 24021 + components: + - type: Transform + pos: 9.5,60.5 + parent: 2 +- proto: CellRechargerCircuitboard + entities: + - uid: 8447 + components: + - type: Transform + pos: -23.339558,-16.29333 + parent: 2 +- proto: Chair + entities: + - uid: 8448 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,16.5 + parent: 2 + - uid: 8449 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,14.5 + parent: 2 + - uid: 8450 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,16.5 + parent: 2 + - uid: 8451 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,14.5 + parent: 2 + - uid: 8452 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -44.5,-8.5 + parent: 2 + - uid: 8453 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -28.5,-26.5 + parent: 2 + - uid: 8454 + components: + - type: Transform + pos: -28.5,-34.5 + parent: 2 + - uid: 8455 + components: + - type: Transform + pos: -3.5,-26.5 + parent: 2 + - uid: 8456 + components: + - type: Transform + pos: -37.5,-41.5 + parent: 2 + - uid: 8457 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,-52.5 + parent: 2 + - uid: 8458 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,-51.5 + parent: 2 + - uid: 8459 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,-50.5 + parent: 2 + - uid: 8460 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -38.5,-50.5 + parent: 2 + - uid: 8461 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -38.5,-51.5 + parent: 2 + - uid: 8462 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -38.5,-52.5 + parent: 2 + - uid: 8463 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,28.5 + parent: 2 + - uid: 8464 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,28.5 + parent: 2 + - uid: 8465 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 37.5,28.5 + parent: 2 + - uid: 8466 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,28.5 + parent: 2 + - uid: 8467 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,35.5 + parent: 2 + - uid: 8468 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,32.5 + parent: 2 + - uid: 8469 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,33.5 + parent: 2 + - uid: 8470 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,34.5 + parent: 2 + - uid: 8471 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,36.5 + parent: 2 + - uid: 8472 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,37.5 + parent: 2 + - uid: 8473 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,41.5 + parent: 2 + - uid: 8474 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,40.5 + parent: 2 + - uid: 8475 + components: + - type: Transform + pos: 41.5,-3.5 + parent: 2 + - uid: 8476 + components: + - type: Transform + pos: 42.5,-3.5 + parent: 2 + - uid: 8477 + components: + - type: Transform + pos: 43.5,-3.5 + parent: 2 + - uid: 8478 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 39.5,-12.5 + parent: 2 + - uid: 8479 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,-12.5 + parent: 2 + - uid: 8480 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,-12.5 + parent: 2 + - uid: 8481 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 43.5,-12.5 + parent: 2 + - uid: 8482 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,-15.5 + parent: 2 + - uid: 8483 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,-14.5 + parent: 2 + - uid: 8484 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,43.5 + parent: 2 + - uid: 8485 + components: + - type: Transform + pos: -30.5,26.5 + parent: 2 + - uid: 8486 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,50.5 + parent: 2 + - uid: 8487 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.5,-16.5 + parent: 2 + - uid: 8488 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 16.5,-16.5 + parent: 2 + - uid: 8489 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 17.5,-16.5 + parent: 2 + - uid: 8490 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,-30.5 + parent: 2 + - uid: 8491 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,-22.5 + parent: 2 + - uid: 8492 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,-21.5 + parent: 2 + - uid: 8493 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 39.5,-21.5 + parent: 2 + - uid: 8494 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 39.5,-22.5 + parent: 2 + - uid: 8495 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.5,-37.5 + parent: 2 + - uid: 8496 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,48.5 + parent: 2 + - uid: 8497 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,48.5 + parent: 2 + - uid: 8498 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,-58.5 + parent: 2 + - uid: 8499 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,-59.5 + parent: 2 + - uid: 8500 + components: + - type: Transform + pos: 19.5,22.5 + parent: 2 +- proto: ChairFolding + entities: + - uid: 8501 + components: + - type: Transform + pos: -39.5,-62.5 + parent: 2 + - uid: 8502 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -38.5,-63.5 + parent: 2 + - uid: 8503 + components: + - type: Transform + pos: 42.5,5.5 + parent: 2 + - uid: 8504 + components: + - type: Transform + pos: 43.5,-66.5 + parent: 2 + - uid: 8505 + components: + - type: Transform + pos: 45.5,-66.5 + parent: 2 +- proto: ChairOfficeDark + entities: + - uid: 8506 + components: + - type: Transform + pos: -16.5,-5.5 + parent: 2 + - uid: 8507 + components: + - type: Transform + pos: -16.5,-2.5 + parent: 2 + - uid: 8508 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,-3.5 + parent: 2 + - uid: 8509 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,13.5 + parent: 2 + - uid: 8510 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,13.5 + parent: 2 + - uid: 8511 + components: + - type: Transform + pos: -3.5,15.5 + parent: 2 + - uid: 8512 + components: + - type: Transform + pos: -2.5,15.5 + parent: 2 + - uid: 8513 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,-3.5 + parent: 2 + - uid: 8514 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,-35.5 + parent: 2 + - uid: 8515 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -42.5,-50.5 + parent: 2 + - uid: 8516 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -42.5,-49.5 + parent: 2 + - uid: 8517 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,-67.5 + parent: 2 + - uid: 8518 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,-2.5 + parent: 2 + - uid: 8519 + components: + - type: Transform + pos: 13.5,43.5 + parent: 2 + - uid: 8520 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,36.5 + parent: 2 + - uid: 8521 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,38.5 + parent: 2 + - uid: 8522 + components: + - type: Transform + pos: 46.5,-17.5 + parent: 2 + - uid: 8523 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -28.5,15.5 + parent: 2 + - uid: 8524 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,19.5 + parent: 2 + - uid: 8525 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,21.5 + parent: 2 + - uid: 8526 + components: + - type: Transform + pos: -25.5,25.5 + parent: 2 + - uid: 8527 + components: + - type: Transform + pos: -24.5,25.5 + parent: 2 + - uid: 8528 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,23.5 + parent: 2 + - uid: 8529 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -25.5,23.5 + parent: 2 + - uid: 8530 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -25.5,23.5 + parent: 2 + - uid: 8531 + components: + - type: Transform + pos: -16.5,34.5 + parent: 2 + - uid: 8532 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,35.5 + parent: 2 + - uid: 8533 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -25.5,44.5 + parent: 2 + - uid: 8534 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,52.5 + parent: 2 + - uid: 8535 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,52.5 + parent: 2 + - uid: 8536 + components: + - type: Transform + pos: 7.5,47.5 + parent: 2 + - uid: 8537 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,-19.5 + parent: 2 + - uid: 8538 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,-49.5 + parent: 2 + - uid: 8539 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,-54.5 + parent: 2 + - uid: 8540 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -42.5,-32.5 + parent: 2 + - uid: 8541 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,-55.5 + parent: 2 + - uid: 8542 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,20.5 + parent: 2 +- proto: ChairOfficeLight + entities: + - uid: 8543 + components: + - type: Transform + pos: -26.5,-17.5 + parent: 2 + - uid: 8544 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,-26.5 + parent: 2 + - uid: 8545 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,-28.5 + parent: 2 + - uid: 8546 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,-33.5 + parent: 2 + - uid: 8547 + components: + - type: Transform + pos: -25.5,-23.5 + parent: 2 + - uid: 8548 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -21.5,-17.5 + parent: 2 + - uid: 8549 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -21.5,-17.5 + parent: 2 + - uid: 8550 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,-20.5 + parent: 2 + - uid: 8551 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,-23.5 + parent: 2 + - uid: 8552 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,-31.5 + parent: 2 + - uid: 8553 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-31.5 + parent: 2 + - uid: 8554 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -43.479202,-30.922709 + parent: 2 + - uid: 8555 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -45.5,-35.5 + parent: 2 + - uid: 8556 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -45.5,-36.5 + parent: 2 + - uid: 8557 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -43.5,-35.5 + parent: 2 + - uid: 8558 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -43.5,-36.5 + parent: 2 + - uid: 8559 + components: + - type: Transform + pos: -46.5,-31.5 + parent: 2 + - uid: 8560 + components: + - type: Transform + pos: 38.5,13.5 + parent: 2 + - uid: 8561 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,20.5 + parent: 2 + - uid: 8562 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,33.5 + parent: 2 + - uid: 8563 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,-18.5 + parent: 2 + - uid: 8564 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,-21.5 + parent: 2 + - uid: 8565 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,-33.5 + parent: 2 + - uid: 8566 + components: + - type: Transform + pos: 40.5,-33.5 + parent: 2 + - uid: 8567 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,-28.5 + parent: 2 + - uid: 8568 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,-32.5 + parent: 2 + - uid: 8569 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,-31.5 + parent: 2 + - uid: 8570 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,-30.5 + parent: 2 + - uid: 8571 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,-30.5 + parent: 2 + - uid: 8572 + components: + - type: Transform + pos: 8.5,-19.5 + parent: 2 + - uid: 8573 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 38.5,-37.5 + parent: 2 + - uid: 8574 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 46.5,-39.5 + parent: 2 + - uid: 8575 + components: + - type: Transform + pos: 43.5,-39.5 + parent: 2 +- proto: ChairPilotSeat + entities: + - uid: 8576 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,54.5 + parent: 2 + - uid: 8577 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,54.5 + parent: 2 + - uid: 8578 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,61.5 + parent: 2 + - uid: 8579 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,61.5 + parent: 2 + - uid: 8580 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,60.5 + parent: 2 + - uid: 8581 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,58.5 + parent: 2 + - uid: 8582 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,60.5 + parent: 2 + - uid: 8583 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,58.5 + parent: 2 + - uid: 8584 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,60.5 + parent: 2 + - uid: 8585 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,60.5 + parent: 2 +- proto: ChairWood + entities: + - uid: 8586 + components: + - type: Transform + pos: -11.5,16.5 + parent: 2 + - uid: 8587 + components: + - type: Transform + pos: -31.5,-59.5 + parent: 2 + - uid: 8588 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,-60.5 + parent: 2 + - uid: 8589 + components: + - type: Transform + pos: -30.5,-63.5 + parent: 2 + - uid: 8590 + components: + - type: Transform + pos: -29.5,-63.5 + parent: 2 + - uid: 8591 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,-61.5 + parent: 2 + - uid: 8592 + components: + - type: Transform + pos: 33.5,11.5 + parent: 2 + - uid: 8593 + components: + - type: Transform + pos: 34.5,11.5 + parent: 2 + - uid: 8594 + components: + - type: Transform + pos: 41.5,5.5 + parent: 2 + - uid: 8595 + components: + - type: Transform + pos: 43.5,5.5 + parent: 2 + - uid: 8596 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,2.5 + parent: 2 + - uid: 8597 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 43.5,2.5 + parent: 2 + - uid: 8598 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 18.5,31.5 + parent: 2 + - uid: 8599 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 17.5,35.5 + parent: 2 + - uid: 8600 + components: + - type: Transform + pos: 17.5,37.5 + parent: 2 + - uid: 8601 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,23.5 + parent: 2 + - uid: 8602 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -32.5,23.5 + parent: 2 + - uid: 8603 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -31.5,23.5 + parent: 2 + - uid: 8604 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -30.5,23.5 + parent: 2 +- proto: CheapLighter + entities: + - uid: 8605 + components: + - type: Transform + pos: 17.633575,12.68796 + parent: 2 +- proto: CheapRollerBed + entities: + - uid: 8606 + components: + - type: Transform + pos: 9.466855,-12.469458 + parent: 2 + - uid: 8607 + components: + - type: Transform + pos: -30.500156,33.499844 + parent: 2 + - uid: 8608 + components: + - type: Transform + pos: -30.515537,36.5163 + parent: 2 + - uid: 8609 + components: + - type: Transform + pos: -30.515537,36.78373 + parent: 2 + - uid: 8610 + components: + - type: Transform + pos: 14.49619,-8.461559 + parent: 2 +- proto: CheapRollerBedSpawnFolded + entities: + - uid: 8611 + components: + - type: Transform + pos: 23.488644,-36.37967 + parent: 2 +- proto: chem_master + entities: + - uid: 8612 + components: + - type: Transform + pos: -3.5,-30.5 + parent: 2 + - uid: 8613 + components: + - type: Transform + pos: 38.5,12.5 + parent: 2 + - uid: 8614 + components: + - type: Transform + pos: 38.5,-32.5 + parent: 2 + - uid: 8615 + components: + - type: Transform + pos: 9.5,-29.5 + parent: 2 + - type: ContainerContainer + containers: + beakerSlot: !type:ContainerSlot + showEnts: False + occludes: True + ent: 8616 + outputSlot: !type:ContainerSlot + showEnts: False + occludes: True + ent: null + machine_board: !type:Container + showEnts: False + occludes: True + ents: [] + machine_parts: !type:Container + showEnts: False + occludes: True + ents: [] + - uid: 8617 + components: + - type: Transform + pos: 4.5,-30.5 + parent: 2 + - type: ContainerContainer + containers: + beakerSlot: !type:ContainerSlot + showEnts: False + occludes: True + ent: 8618 + outputSlot: !type:ContainerSlot + showEnts: False + occludes: True + ent: null + machine_board: !type:Container + showEnts: False + occludes: True + ents: [] + machine_parts: !type:Container + showEnts: False + occludes: True + ents: [] +- proto: ChemDispenser + entities: + - uid: 8619 + components: + - type: Transform + pos: 8.5,-29.5 + parent: 2 + - uid: 8620 + components: + - type: Transform + pos: 4.5,-31.5 + parent: 2 +- proto: ChemDispenserMachineCircuitboard + entities: + - uid: 8621 + components: + - type: Transform + pos: -2.5,-39.5 + parent: 2 +- proto: ChemicalPayload + entities: + - uid: 8622 + components: + - type: Transform + pos: -41.36592,-32.47673 + parent: 2 + - uid: 8623 + components: + - type: Transform + pos: -41.475296,-32.47673 + parent: 2 +- proto: ChemistryEmptyBottle01 + entities: + - uid: 8624 + components: + - type: Transform + pos: 23.742168,39.82343 + parent: 2 + - uid: 8625 + components: + - type: Transform + pos: -29.545193,32.906143 + parent: 2 + - uid: 8626 + components: + - type: Transform + pos: -29.277431,32.79153 + parent: 2 + - uid: 8627 + components: + - type: Transform + pos: -42.82412,37.20674 + parent: 2 + - uid: 8629 + components: + - type: Transform + parent: 8628 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 8630 + components: + - type: Transform + parent: 8628 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 8631 + components: + - type: Transform + parent: 8628 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 8632 + components: + - type: Transform + parent: 8628 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 8633 + components: + - type: Transform + parent: 8628 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 8636 + components: + - type: Transform + pos: 42.574924,-29.492899 + parent: 2 + - uid: 8637 + components: + - type: Transform + pos: 42.686813,-29.418306 + parent: 2 + - uid: 8638 + components: + - type: Transform + pos: 42.798702,-29.343716 + parent: 2 + - uid: 8639 + components: + - type: Transform + pos: 14.569506,-32.364628 + parent: 2 + - uid: 8640 + components: + - type: Transform + pos: 14.606801,-32.168823 + parent: 2 + - uid: 8641 + components: + - type: Transform + pos: 14.662745,-32.3553 + parent: 2 + - uid: 8642 + components: + - type: Transform + pos: 14.7839575,-32.23409 + parent: 2 + - uid: 8643 + components: + - type: Transform + pos: 14.550858,-32.224766 + parent: 2 + - uid: 8644 + components: + - type: Transform + pos: 12.6648245,-37.416187 + parent: 2 +- proto: ChemistryHotplate + entities: + - uid: 8645 + components: + - type: Transform + pos: 4.5,-29.5 + parent: 2 +- proto: ChemMasterMachineCircuitboard + entities: + - uid: 8646 + components: + - type: Transform + pos: -4.558944,-36.53567 + parent: 2 +- proto: ChessBoard + entities: + - uid: 8647 + components: + - type: Transform + pos: 43.486767,3.6246936 + parent: 2 +- proto: CigaretteSpent + entities: + - uid: 8648 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.678261,43.148743 + parent: 2 + - uid: 8649 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.306835,-34.981674 + parent: 2 + - uid: 8650 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.747395,-34.58307 + parent: 2 + - uid: 8651 + components: + - type: Transform + pos: 44.314438,-66.48335 + parent: 2 + - uid: 8652 + components: + - type: Transform + pos: 44.244576,-66.595085 + parent: 2 +- proto: CigarGold + entities: + - uid: 8653 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.6491256,53.60938 + parent: 2 + - uid: 8654 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.4952793,53.46952 + parent: 2 +- proto: CigarGoldCase + entities: + - uid: 8655 + components: + - type: Transform + pos: -35.437805,17.56227 + parent: 2 + - uid: 8656 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.462513,56.7324 + parent: 2 + - uid: 8657 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.502454,54.442284 + parent: 2 + - uid: 8658 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.577045,54.274452 + parent: 2 +- proto: CigCartonMixed + entities: + - uid: 8659 + components: + - type: Transform + pos: 41.593994,3.7179337 + parent: 2 +- proto: CigPackBlack + entities: + - uid: 8660 + components: + - type: Transform + pos: 44.314438,-66.32973 + parent: 2 +- proto: CigPackBlue + entities: + - uid: 8661 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.656745,43.72897 + parent: 2 +- proto: CigPackMixed + entities: + - uid: 8662 + components: + - type: Transform + pos: -38.638542,-16.615156 + parent: 2 +- proto: CigPackMixedMedical + entities: + - uid: 8663 + components: + - type: Transform + pos: -38.512794,-16.726889 + parent: 2 +- proto: CigPackMixedNasty + entities: + - uid: 8664 + components: + - type: Transform + pos: -38.69443,-16.83862 + parent: 2 +- proto: CircuitImprinter + entities: + - uid: 8665 + components: + - type: Transform + pos: -34.5,-29.5 + parent: 2 + - uid: 8666 + components: + - type: Transform + pos: -23.5,-18.5 + parent: 2 + - uid: 8667 + components: + - type: Transform + pos: 26.5,-39.5 + parent: 2 +- proto: CleanerDispenser + entities: + - uid: 8668 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.5,15.5 + parent: 2 + - uid: 8669 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,11.5 + parent: 2 +- proto: ClosetBluespaceUnstable + entities: + - uid: 8671 + components: + - type: Transform + pos: -35.5,-58.5 + parent: 2 +- proto: ClosetBombFilled + entities: + - uid: 8672 + components: + - type: Transform + pos: -22.5,-32.5 + parent: 2 + - uid: 8673 + components: + - type: Transform + pos: -31.5,-45.5 + parent: 2 + - uid: 8674 + components: + - type: Transform + pos: -32.5,-45.5 + parent: 2 + - uid: 8675 + components: + - type: Transform + pos: -10.5,31.5 + parent: 2 +- proto: ClosetChefFilled + entities: + - uid: 8676 + components: + - type: Transform + pos: -8.5,-12.5 + parent: 2 + - uid: 8677 + components: + - type: Transform + pos: 23.5,19.5 + parent: 2 +- proto: ClosetEmergencyFilledRandom + entities: + - uid: 8678 + components: + - type: Transform + pos: -4.5,-6.5 + parent: 2 + - uid: 8679 + components: + - type: Transform + pos: 6.5,-6.5 + parent: 2 + - uid: 8680 + components: + - type: Transform + pos: -3.5,8.5 + parent: 2 + - uid: 8681 + components: + - type: Transform + pos: 5.5,8.5 + parent: 2 + - uid: 8682 + components: + - type: Transform + pos: -12.5,-12.5 + parent: 2 + - uid: 8683 + components: + - type: Transform + pos: -19.5,5.5 + parent: 2 + - uid: 8685 + components: + - type: Transform + pos: -30.5,-27.5 + parent: 2 + - uid: 8686 + components: + - type: Transform + pos: -3.5,-28.5 + parent: 2 + - uid: 8687 + components: + - type: Transform + pos: 19.5,-2.5 + parent: 2 + - uid: 8688 + components: + - type: Transform + pos: 25.5,27.5 + parent: 2 + - uid: 8689 + components: + - type: Transform + pos: 44.5,26.5 + parent: 2 + - uid: 8690 + components: + - type: Transform + pos: 30.5,41.5 + parent: 2 + - uid: 8691 + components: + - type: Transform + pos: 44.5,48.5 + parent: 2 + - uid: 8692 + components: + - type: Transform + pos: 27.5,33.5 + parent: 2 + - uid: 8693 + components: + - type: Transform + pos: -33.5,21.5 + parent: 2 + - uid: 8694 + components: + - type: Transform + pos: -28.5,41.5 + parent: 2 + - uid: 8695 + components: + - type: Transform + pos: -39.5,24.5 + parent: 2 + - uid: 8696 + components: + - type: Transform + pos: -5.5,45.5 + parent: 2 + - uid: 8697 + components: + - type: Transform + pos: 3.5,58.5 + parent: 2 + - uid: 8698 + components: + - type: Transform + pos: 24.5,-36.5 + parent: 2 + - uid: 8699 + components: + - type: Transform + pos: -6.5,-18.5 + parent: 2 + - uid: 8700 + components: + - type: Transform + pos: -9.5,-61.5 + parent: 2 + - uid: 8701 + components: + - type: Transform + pos: -24.5,-52.5 + parent: 2 + - uid: 8702 + components: + - type: Transform + pos: 35.5,-36.5 + parent: 2 + - uid: 23913 + components: + - type: Transform + pos: -46.5,-25.5 + parent: 2 +- proto: ClosetFireFilled + entities: + - uid: 8703 + components: + - type: Transform + pos: -3.5,-6.5 + parent: 2 + - uid: 8704 + components: + - type: Transform + pos: 5.5,-6.5 + parent: 2 + - uid: 8705 + components: + - type: Transform + pos: -4.5,8.5 + parent: 2 + - uid: 8706 + components: + - type: Transform + pos: 6.5,8.5 + parent: 2 + - uid: 8707 + components: + - type: Transform + pos: -13.5,-12.5 + parent: 2 + - uid: 8708 + components: + - type: Transform + pos: -19.5,4.5 + parent: 2 + - 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 + - uid: 8710 + components: + - type: Transform + pos: -30.5,-26.5 + parent: 2 + - uid: 8711 + components: + - type: Transform + pos: -2.5,-28.5 + parent: 2 + - uid: 8712 + components: + - type: Transform + pos: -31.5,-57.5 + parent: 2 + - uid: 8713 + components: + - type: Transform + pos: 18.5,-2.5 + parent: 2 + - uid: 8714 + components: + - type: Transform + pos: 42.5,26.5 + parent: 2 + - uid: 8715 + components: + - type: Transform + pos: 28.5,41.5 + parent: 2 + - uid: 8716 + components: + - type: Transform + pos: 27.5,29.5 + parent: 2 + - uid: 8717 + components: + - type: Transform + pos: -31.5,21.5 + parent: 2 + - uid: 8718 + components: + - type: Transform + pos: -30.5,41.5 + parent: 2 + - uid: 8719 + components: + - type: Transform + pos: -4.5,45.5 + parent: 2 + - uid: 8720 + components: + - type: Transform + pos: -1.5,58.5 + parent: 2 + - uid: 8721 + components: + - type: Transform + pos: 25.5,-36.5 + parent: 2 + - uid: 8722 + components: + - type: Transform + pos: -25.5,-52.5 + parent: 2 + - uid: 23934 + components: + - type: Transform + pos: -46.5,-27.5 + parent: 2 +- proto: ClosetL3Filled + entities: + - uid: 8723 + components: + - type: Transform + pos: 34.5,-29.5 + parent: 2 +- proto: ClosetL3ScienceFilled + entities: + - uid: 8726 + components: + - type: Transform + pos: -8.5,-32.5 + parent: 2 + - uid: 8727 + components: + - type: Transform + pos: -8.5,-31.5 + parent: 2 +- proto: ClosetL3VirologyFilled + entities: + - uid: 8728 + components: + - type: Transform + pos: 38.5,-27.5 + parent: 2 + - uid: 8729 + components: + - type: Transform + pos: 38.5,-28.5 + parent: 2 +- proto: ClosetMaintenanceFilledRandom + entities: + - uid: 8731 + components: + - type: Transform + pos: 12.5,13.5 + parent: 2 + - uid: 8732 + components: + - type: Transform + pos: -17.5,7.5 + parent: 2 + - uid: 8733 + components: + - type: Transform + pos: 11.5,9.5 + parent: 2 + - uid: 8734 + components: + - type: Transform + pos: 16.5,4.5 + parent: 2 + - uid: 8735 + components: + - type: Transform + pos: 8.5,-14.5 + parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 75.31249 + moles: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - uid: 8736 + components: + - type: Transform + pos: -8.5,-18.5 + parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 75.31249 + moles: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - uid: 8737 + components: + - type: Transform + pos: -8.5,-19.5 + parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 75.31249 + moles: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - uid: 8738 + components: + - type: Transform + pos: -10.5,-18.5 + parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 75.31249 + moles: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - uid: 8739 + components: + - type: Transform + pos: -10.5,-19.5 + parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 75.31249 + moles: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - uid: 8740 + components: + - type: Transform + pos: -10.5,-12.5 + parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 75.31249 + moles: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - uid: 8741 + components: + - type: Transform + pos: -21.5,-3.5 + parent: 2 + - uid: 8742 + components: + - type: Transform + pos: -44.5,-27.5 + parent: 2 + - uid: 8743 + components: + - type: Transform + pos: -19.5,-39.5 + parent: 2 + - uid: 8744 + components: + - type: Transform + pos: -30.5,-57.5 + parent: 2 + - uid: 8745 + components: + - type: Transform + pos: -9.5,-53.5 + parent: 2 + - uid: 8746 + components: + - type: Transform + pos: 22.5,-12.5 + parent: 2 + - uid: 8748 + components: + - type: Transform + pos: -22.5,14.5 + parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 75.31249 + moles: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - uid: 8749 + components: + - type: Transform + pos: -24.5,21.5 + parent: 2 + - uid: 8750 + components: + - type: Transform + pos: -22.5,9.5 + parent: 2 + - uid: 8751 + components: + - type: Transform + pos: -5.5,-18.5 + parent: 2 + - uid: 8752 + components: + - type: Transform + pos: -26.5,-59.5 + parent: 2 + - uid: 8753 + components: + - type: Transform + pos: -13.5,-17.5 + parent: 2 + - uid: 8754 + components: + - type: Transform + pos: 25.5,-2.5 + parent: 2 + - uid: 8755 + components: + - type: Transform + pos: 29.5,-36.5 + parent: 2 + - uid: 8756 + components: + - type: Transform + pos: 36.5,-28.5 + parent: 2 + - uid: 8757 + components: + - type: Transform + pos: 4.5,-37.5 + parent: 2 + - uid: 8758 + components: + - type: Transform + pos: -21.5,-52.5 + parent: 2 +- proto: ClosetRadiationSuitFilled + entities: + - uid: 8759 + components: + - type: Transform + pos: -22.5,-33.5 + parent: 2 + - uid: 8760 + components: + - type: Transform + pos: 8.5,-58.5 + parent: 2 + - uid: 8761 + components: + - type: Transform + pos: 8.5,-59.5 + parent: 2 + - uid: 8762 + components: + - type: Transform + pos: 35.5,-41.5 + parent: 2 +- proto: ClosetToolFilled + entities: + - uid: 8763 + components: + - type: Transform + pos: -36.5,-15.5 + parent: 2 +- proto: ClothingBackpack + entities: + - uid: 8764 + components: + - type: Transform + pos: 32.52811,28.861206 + parent: 2 + - uid: 8765 + components: + - type: Transform + pos: 32.73324,28.730669 + parent: 2 + - uid: 8766 + components: + - type: Transform + pos: 33.37349,28.879854 + parent: 2 + - uid: 8767 + components: + - type: Transform + pos: 33.52889,28.693375 + parent: 2 +- proto: ClothingBackpackClown + entities: + - uid: 10530 + components: + - type: Transform + parent: 10524 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingBackpackDuffel + entities: + - uid: 8768 + components: + - type: Transform + pos: -42.56276,-9.286255 + parent: 2 +- proto: ClothingBackpackDuffelGenetics + entities: + - uid: 8769 + components: + - type: Transform + pos: 22.363007,-30.442726 + parent: 2 +- proto: ClothingBackpackDuffelMime + entities: + - uid: 10517 + components: + - type: Transform + parent: 10501 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingBackpackDuffelSurgeryFilled + entities: + - uid: 23914 + components: + - type: Transform + pos: -28.5,38.5 + parent: 2 +- proto: ClothingBackpackERTClown + entities: + - uid: 10531 + components: + - type: Transform + parent: 10524 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingBackpackMime + entities: + - uid: 10511 + components: + - type: Transform + parent: 10501 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingBackpackSatchelClown + entities: + - uid: 10545 + components: + - type: Transform + parent: 10524 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingBackpackSatchelMime + entities: + - uid: 10523 + components: + - type: Transform + parent: 10501 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingBackpackSatchelSalvage + entities: + - uid: 8771 + components: + - type: Transform + pos: -42.457863,-9.496044 + parent: 2 +- proto: ClothingBackpackSatchelScience + entities: + - uid: 8772 + components: + - type: Transform + pos: -44.545567,-39.341473 + parent: 2 + - uid: 8773 + components: + - type: Transform + pos: -19.541893,-45.404873 + parent: 2 +- proto: ClothingBeltJanitor + entities: + - uid: 8774 + components: + - type: Transform + pos: 14.117703,27.649174 + parent: 2 +- proto: ClothingBeltJanitorFilled + entities: + - uid: 15850 + components: + - type: Transform + parent: 1930 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 23910 + components: + - type: Transform + parent: 19985 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingBeltMedicalFilled + entities: + - uid: 8775 + components: + - type: Transform + pos: 14.2991085,-32.448544 + parent: 2 +- proto: ClothingBeltPlantFilled + entities: + - uid: 8776 + components: + - type: Transform + pos: 32.484955,20.663464 + parent: 2 + - uid: 8777 + components: + - type: Transform + pos: 12.586235,27.628193 + parent: 2 +- proto: ClothingBeltUtility + entities: + - uid: 8778 + components: + - type: Transform + pos: -23.3507,-14.700407 + parent: 2 + - uid: 8779 + components: + - type: Transform + pos: -30.458813,-64.428314 + parent: 2 +- proto: ClothingBeltUtilityEngineering + entities: + - uid: 8780 + components: + - type: Transform + pos: 7.463489,15.835896 + parent: 2 + - uid: 8781 + components: + - type: Transform + pos: -9.46034,-55.427685 + parent: 2 + - uid: 8782 + components: + - type: Transform + pos: 29.526173,-52.48198 + parent: 2 +- proto: ClothingBeltUtilityFilled + entities: + - uid: 8783 + components: + - type: Transform + pos: -43.508026,10.500816 + parent: 2 + - uid: 8784 + components: + - type: Transform + pos: -26.641651,-23.912199 + parent: 2 +- proto: ClothingEyesBlindfold + entities: + - uid: 8785 + components: + - type: Transform + pos: -33.593716,25.528635 + parent: 2 +- proto: ClothingEyesGlassesChemical + entities: + - uid: 8786 + components: + - type: Transform + pos: -33.313164,-28.14225 + parent: 2 + - uid: 8787 + components: + - type: Transform + pos: -36.31762,-30.160292 + parent: 2 + - uid: 8788 + components: + - type: Transform + pos: -22.546875,-31.553246 + parent: 2 +- proto: ClothingEyesGlassesMeson + entities: + - uid: 8789 + components: + - type: Transform + pos: 8.4551,74.56609 + parent: 2 + - uid: 8790 + components: + - type: Transform + pos: 9.471309,83.47607 + parent: 2 + - uid: 8791 + components: + - type: Transform + pos: -19.484676,-63.529808 + parent: 2 + - uid: 8792 + components: + - type: Transform + pos: -19.344814,-63.334003 + parent: 2 + - uid: 8793 + components: + - type: Transform + pos: -7.6099415,-63.431587 + parent: 2 +- proto: ClothingEyesGlassesSecurity + entities: + - uid: 8794 + components: + - type: Transform + pos: -19.431599,21.922447 + parent: 2 +- proto: ClothingEyesGlassesSunglasses + entities: + - uid: 8795 + components: + - type: Transform + pos: -26.440292,-23.687542 + parent: 2 + - uid: 8796 + components: + - type: Transform + pos: -19.507435,-22.557985 + parent: 2 + - uid: 8797 + components: + - type: Transform + pos: -14.529796,35.828796 + parent: 2 +- proto: ClothingEyesHudDiagnostic + entities: + - uid: 8798 + components: + - type: Transform + pos: -7.358194,-62.578438 + parent: 2 + - uid: 8800 + components: + - type: Transform + parent: 8799 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: ClothingHandsGlovesColorPurple + entities: + - uid: 8802 + components: + - type: Transform + pos: 22.533283,-11.475393 + parent: 2 +- proto: ClothingHandsGlovesColorYellow + entities: + - uid: 8803 + components: + - type: Transform + pos: -16.498177,-56.40037 + parent: 2 + - uid: 8804 + components: + - type: Transform + pos: -7.5400114,-62.39662 + parent: 2 + - uid: 8805 + components: + - type: Transform + pos: 26.474522,-62.485188 + parent: 2 + - uid: 8806 + components: + - type: Transform + pos: 29.515945,-62.382626 + parent: 2 +- proto: ClothingHandsGlovesFingerlessInsulated + entities: + - uid: 8807 + components: + - type: Transform + pos: -34.37776,-28.519873 + parent: 2 +- proto: ClothingHandsGlovesJanitor + entities: + - uid: 8684 + components: + - type: Transform + parent: 1930 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 22225 + components: + - type: Transform + parent: 19985 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingHandsGlovesLatex + entities: + - uid: 8808 + components: + - type: Transform + pos: 18.452904,-16.508553 + parent: 2 + - uid: 8809 + components: + - type: Transform + pos: 38.50769,-33.975113 + parent: 2 +- proto: ClothingHandsTacticalMaidGloves + entities: + - uid: 8810 + components: + - type: Transform + pos: 11.494395,39.477314 + parent: 2 +- proto: ClothingHeadHatChef + entities: + - uid: 8816 + components: + - type: Transform + pos: -42.500126,31.703918 + parent: 2 +- proto: ClothingHeadHatCone + entities: + - uid: 8817 + components: + - type: Transform + pos: -8.705857,39.615715 + parent: 2 + - uid: 8818 + components: + - type: Transform + pos: -8.642105,39.768536 + parent: 2 + - uid: 8819 + components: + - type: Transform + pos: -8.457224,39.596615 + parent: 2 + - uid: 8820 + components: + - type: Transform + pos: -8.361595,39.647552 + parent: 2 + - uid: 8821 + components: + - type: Transform + pos: -8.457224,39.76217 + parent: 2 +- proto: ClothingHeadHatFezMantis + entities: + - uid: 8822 + components: + - type: Transform + pos: -11.279213,-24.423569 + parent: 2 +- proto: ClothingHeadHatFlatcapBartenderIdris + entities: + - uid: 23928 + components: + - type: Transform + parent: 23915 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingHeadHatFlatcapBartenderNanotrasen + entities: + - uid: 23924 + components: + - type: Transform + parent: 23915 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingHeadHatFlatcapBartenderOrion + entities: + - uid: 23922 + components: + - type: Transform + parent: 23915 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingHeadHatHoodBioCmo + entities: + - uid: 8824 + components: + - type: Transform + parent: 8823 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingHeadHatHoodMoth + entities: + - uid: 8829 + components: + - type: Transform + pos: -7.6243105,12.440752 + parent: 2 +- proto: ClothingHeadHatMimesoft + entities: + - uid: 10520 + components: + - type: Transform + parent: 10501 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingHeadHatMimesoftFlipped + entities: + - uid: 10521 + components: + - type: Transform + parent: 10501 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingHeadHatTacticalMaidHeadband + entities: + - uid: 8830 + components: + - type: Transform + pos: 11.394939,39.75082 + parent: 2 +- proto: ClothingHeadHatWelding + entities: + - uid: 8831 + components: + - type: Transform + pos: 7.370249,19.791813 + parent: 2 + - uid: 8832 + components: + - type: Transform + pos: -26.594776,-23.365324 + parent: 2 + - uid: 8833 + components: + - type: Transform + pos: -6.4542637,79.61747 + parent: 2 + - uid: 8834 + components: + - type: Transform + pos: -6.4855375,74.62076 + parent: 2 + - uid: 8835 + components: + - type: Transform + pos: -16.508045,-56.474964 + parent: 2 +- proto: ClothingHeadHatWizard + entities: + - uid: 8836 + components: + - type: Transform + pos: 30.46769,-6.3655777 + parent: 2 +- proto: ClothingHeadHelmetRiot + entities: + - uid: 8837 + components: + - type: Transform + pos: -12.5835085,40.460464 + parent: 2 + - uid: 8838 + components: + - type: Transform + pos: -12.302999,40.58781 + parent: 2 +- proto: ClothingHeadHelmetSwatSyndicate + entities: + - uid: 8839 + components: + - type: Transform + pos: 14.508218,31.482315 + parent: 2 +- proto: ClothingHeadNurseHat + entities: + - uid: 8840 + components: + - type: Transform + pos: 26.467663,-34.491558 + parent: 2 +- proto: ClothingHeadsetCommand + entities: + - uid: 22313 + components: + - type: Transform + parent: 22310 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingMaskBat + entities: + - uid: 8841 + components: + - type: Transform + pos: -7.6243105,12.673853 + parent: 2 +- proto: ClothingMaskBear + entities: + - uid: 8842 + components: + - type: Transform + pos: -7.214054,12.692501 + parent: 2 +- proto: ClothingMaskClown + entities: + - uid: 8843 + components: + - type: Transform + pos: -7.307294,12.412781 + parent: 2 + - uid: 8844 + components: + - type: Transform + pos: -25.091064,-41.764637 + parent: 2 + - uid: 10532 + components: + - type: Transform + parent: 10524 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingMaskClownBanana + entities: + - uid: 10547 + components: + - type: Transform + parent: 10524 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingMaskGas + entities: + - uid: 8845 + components: + - type: Transform + pos: -7.4589415,-66.27429 + parent: 2 + - uid: 8846 + components: + - type: Transform + pos: 28.54625,-62.3733 + parent: 2 +- proto: ClothingMaskGasCentcom + entities: + - uid: 8847 + components: + - type: Transform + pos: -14.499043,-33.465836 + parent: 2 +- proto: ClothingMaskMime + entities: + - uid: 10514 + components: + - type: Transform + parent: 10501 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingMaskMuzzle + entities: + - uid: 8825 + components: + - type: Transform + parent: 8823 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 8849 + components: + - type: Transform + parent: 8848 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 8850 + components: + - type: Transform + parent: 8848 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 8854 + components: + - type: Transform + pos: -33.599934,25.466475 + parent: 2 +- proto: ClothingMaskSadMime + entities: + - uid: 10509 + components: + - type: Transform + parent: 10501 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingMaskScaredMime + entities: + - uid: 10507 + components: + - type: Transform + parent: 10501 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingMaskSexyClown + entities: + - uid: 8855 + components: + - type: Transform + pos: -23.519207,-41.51324 + parent: 2 + - uid: 10526 + components: + - type: Transform + parent: 10524 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingMaskSexyMime + entities: + - uid: 10504 + components: + - type: Transform + parent: 10501 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingMaskSterile + entities: + - uid: 8856 + components: + - type: Transform + pos: 18.480877,-16.2941 + parent: 2 + - uid: 8857 + components: + - type: Transform + pos: 19.387924,-13.55324 + parent: 2 +- proto: ClothingNeckCloakBoat + entities: + - uid: 22317 + components: + - type: Transform + parent: 22310 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingNeckCloakNanotrasen + entities: + - uid: 22316 + components: + - type: Transform + parent: 22310 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingNeckCloakTrans + entities: + - uid: 8858 + components: + - type: Transform + pos: 36.63746,30.719614 + parent: 2 +- proto: ClothingNeckClownmedal + entities: + - uid: 10546 + components: + - type: Transform + parent: 10524 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingNeckMantleCMO + entities: + - uid: 8859 + components: + - type: Transform + pos: 25.406673,-19.374836 + parent: 2 +- proto: ClothingNeckMantleHOS + entities: + - uid: 8860 + components: + - type: Transform + pos: -24.003525,40.67299 + parent: 2 +- proto: ClothingNeckStethoscope + entities: + - uid: 8861 + components: + - type: Transform + pos: 20.564407,-13.356026 + parent: 2 + - uid: 8862 + components: + - type: Transform + pos: 14.597477,-32.364628 + parent: 2 +- proto: ClothingNeckTransPin + entities: + - uid: 8863 + components: + - type: Transform + pos: 36.29247,30.486513 + parent: 2 +- proto: ClothingOuterApronBar + entities: + - uid: 23929 + components: + - type: Transform + parent: 23915 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingOuterArmorBulletproof + entities: + - uid: 8864 + components: + - type: Transform + pos: -14.65951,40.596058 + parent: 2 + - uid: 8865 + components: + - type: Transform + pos: -14.477816,40.60561 + parent: 2 + - uid: 8866 + components: + - type: Transform + pos: -14.573443,40.69157 + parent: 2 +- proto: ClothingOuterArmorCult + entities: + - uid: 8867 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.477132,33.43828 + parent: 2 +- proto: ClothingOuterArmorReflective + entities: + - uid: 8868 + components: + - type: Transform + pos: -14.32481,40.60561 + parent: 2 +- proto: ClothingOuterArmorRiot + entities: + - uid: 8869 + components: + - type: Transform + pos: -12.436878,40.66422 + parent: 2 + - uid: 8870 + components: + - type: Transform + pos: -12.589884,40.575077 + parent: 2 +- proto: ClothingOuterBioCmo + entities: + - uid: 8826 + components: + - type: Transform + parent: 8823 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingOuterClownPriest + entities: + - uid: 10527 + components: + - type: Transform + parent: 10524 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingOuterCoatLabGene + entities: + - uid: 8871 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.656715,-30.35881 + parent: 2 +- proto: ClothingOuterCoatMantis + entities: + - uid: 8872 + components: + - type: Transform + pos: -11.324873,-24.533173 + parent: 2 +- proto: ClothingOuterCorporateJacket + entities: + - uid: 22319 + components: + - type: Transform + parent: 22310 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingOuterHardsuitClown + entities: + - uid: 10544 + components: + - type: Transform + parent: 10524 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingOuterHardsuitMime + entities: + - uid: 10513 + components: + - type: Transform + parent: 10501 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingOuterStraightjacket + entities: + - uid: 8827 + components: + - type: Transform + parent: 8823 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 8851 + components: + - type: Transform + parent: 8848 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 8852 + components: + - type: Transform + parent: 8848 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 8873 + components: + - type: Transform + pos: -33.36994,25.62809 + parent: 2 +- proto: ClothingOuterSuitRad + entities: + - uid: 8874 + components: + - type: Transform + pos: -6.3512006,-62.312706 + parent: 2 +- proto: ClothingOuterVestHazard + entities: + - uid: 8875 + components: + - type: Transform + pos: 25.514149,-62.429245 + parent: 2 +- proto: ClothingOuterWinterBar + entities: + - uid: 23927 + components: + - type: Transform + parent: 23915 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingOuterWinterClown + entities: + - uid: 10551 + components: + - type: Transform + parent: 10524 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingOuterWinterCoatMantis + entities: + - uid: 8876 + components: + - type: Transform + pos: -8.484784,-22.480118 + parent: 2 +- proto: ClothingOuterWinterJani + entities: + - uid: 8724 + components: + - type: Transform + parent: 1930 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 22236 + components: + - type: Transform + parent: 19985 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingOuterWinterMime + entities: + - uid: 10522 + components: + - type: Transform + parent: 10501 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingShoesBootsMag + entities: + - uid: 8877 + components: + - type: Transform + pos: -6.654292,-23.211048 + parent: 2 + - uid: 8878 + components: + - type: Transform + pos: -6.383896,-23.322937 + parent: 2 + - uid: 8879 + components: + - type: Transform + pos: -6.663616,-23.434824 + parent: 2 + - uid: 8880 + components: + - type: Transform + pos: -6.383896,-23.481445 + parent: 2 + - uid: 8881 + components: + - type: Transform + pos: 2.3849049,-59.000687 + parent: 2 + - uid: 8882 + components: + - type: Transform + pos: 2.5340893,-58.926094 + parent: 2 +- proto: ClothingShoesBootsWinterClown + entities: + - uid: 10542 + components: + - type: Transform + parent: 10524 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingShoesBootsWinterMime + entities: + - uid: 10510 + components: + - type: Transform + parent: 10501 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingShoesClown + entities: + - uid: 10528 + components: + - type: Transform + parent: 10524 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingShoesClownBanana + entities: + - uid: 10549 + components: + - type: Transform + parent: 10524 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingShoesClownLarge + entities: + - uid: 10536 + components: + - type: Transform + parent: 10524 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingUnderSocksCoder + entities: + - uid: 8884 + components: + - type: Transform + parent: 8883 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingUniformJumpskirtBartender + entities: + - uid: 23920 + components: + - type: Transform + parent: 23915 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingUniformJumpskirtJanimaid + entities: + - uid: 8966 + components: + - type: Transform + parent: 1930 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 23897 + components: + - type: Transform + parent: 19985 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingUniformJumpskirtJanimaidmini + entities: + - uid: 9026 + components: + - type: Transform + parent: 1930 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 23898 + components: + - type: Transform + parent: 19985 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingUniformJumpskirtJanitor + entities: + - uid: 9237 + components: + - type: Transform + parent: 1930 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 23899 + components: + - type: Transform + parent: 19985 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingUniformJumpskirtMime + entities: + - uid: 10506 + components: + - type: Transform + parent: 10501 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingUniformJumpskirtTacticalMaid + entities: + - uid: 8886 + components: + - type: Transform + pos: 11.488179,39.40894 + parent: 2 +- proto: ClothingUniformJumpsuitAncient + entities: + - uid: 8888 + components: + - type: Transform + parent: 8887 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: ClothingUniformJumpsuitBartender + entities: + - uid: 23917 + components: + - type: Transform + parent: 23915 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingUniformJumpsuitBartenderIdris + entities: + - uid: 23925 + components: + - type: Transform + parent: 23915 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingUniformJumpsuitBartenderNt + entities: + - uid: 23921 + components: + - type: Transform + parent: 23915 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingUniformJumpsuitBartenderOrion + entities: + - uid: 23919 + components: + - type: Transform + parent: 23915 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingUniformJumpsuitBartenderPurple + entities: + - uid: 23916 + components: + - type: Transform + parent: 23915 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingUniformJumpsuitCentcomAgent + entities: + - uid: 22312 + components: + - type: Transform + parent: 22310 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingUniformJumpsuitClown + entities: + - uid: 10525 + components: + - type: Transform + parent: 10524 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingUniformJumpsuitClownBanana + entities: + - uid: 10550 + components: + - type: Transform + parent: 10524 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingUniformJumpsuitJacketMonkey + entities: + - uid: 23926 + components: + - type: Transform + parent: 23915 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingUniformJumpsuitJanitor + entities: + - uid: 15522 + components: + - type: Transform + parent: 1930 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 23900 + components: + - type: Transform + parent: 19985 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingUniformJumpsuitJanitorIdris + entities: + - uid: 23901 + components: + - type: Transform + parent: 19985 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 23904 + components: + - type: Transform + parent: 19985 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingUniformJumpsuitJanitorNt + entities: + - uid: 8725 + components: + - type: Transform + parent: 1930 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 23896 + components: + - type: Transform + parent: 19985 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingUniformJumpsuitJanitorOrion + entities: + - uid: 8709 + components: + - type: Transform + parent: 1930 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 22226 + components: + - type: Transform + parent: 19985 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingUniformJumpsuitMime + entities: + - uid: 10502 + components: + - type: Transform + parent: 10501 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClothingUniformJumpsuitNanotrasen + entities: + - uid: 22314 + components: + - type: Transform + parent: 22310 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ClownRecorder + entities: + - uid: 8889 + components: + - type: Transform + pos: -21.480698,-41.466324 + parent: 2 + - uid: 10541 + components: + - type: Transform + parent: 10524 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: Cobweb1 + entities: + - uid: 8890 + components: + - type: Transform + pos: -13.5,6.5 + parent: 2 + - uid: 8891 + components: + - type: Transform + pos: -17.5,-2.5 + parent: 2 + - uid: 8892 + components: + - type: Transform + pos: -8.5,-12.5 + parent: 2 + - uid: 8893 + components: + - type: Transform + pos: -21.5,-41.5 + parent: 2 + - uid: 8894 + components: + - type: Transform + pos: 18.5,-2.5 + parent: 2 + - uid: 8895 + components: + - type: Transform + pos: 26.5,-7.5 + parent: 2 + - uid: 8896 + components: + - type: Transform + pos: 42.5,24.5 + parent: 2 + - uid: 8897 + components: + - type: Transform + pos: 10.5,27.5 + parent: 2 + - uid: 8898 + components: + - type: Transform + pos: 34.5,-27.5 + parent: 2 + - uid: 8901 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 18.5,-29.5 + parent: 2 + - uid: 8902 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 18.5,-29.5 + parent: 2 + - uid: 8903 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,-33.5 + parent: 2 + - uid: 8904 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,-33.5 + parent: 2 + - uid: 8908 + components: + - type: Transform + pos: 18.5,-36.5 + parent: 2 + - uid: 8909 + components: + - type: Transform + pos: 30.5,-33.5 + parent: 2 + - uid: 8910 + components: + - type: Transform + pos: 32.5,-36.5 + parent: 2 + - uid: 8911 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 47.5,-36.5 + parent: 2 + - uid: 8912 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,-36.5 + parent: 2 + - uid: 8913 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,-40.5 + parent: 2 + - uid: 8914 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,-39.5 + parent: 2 + - uid: 8915 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,-34.5 + parent: 2 +- proto: Cobweb2 + entities: + - uid: 8916 + components: + - type: Transform + pos: -10.5,-5.5 + parent: 2 + - uid: 8917 + components: + - type: Transform + pos: 9.5,-9.5 + parent: 2 + - uid: 8918 + components: + - type: Transform + pos: -17.5,-11.5 + parent: 2 + - uid: 8919 + components: + - type: Transform + pos: -6.5,-39.5 + parent: 2 + - uid: 8920 + components: + - type: Transform + pos: -19.5,-41.5 + parent: 2 + - uid: 8921 + components: + - type: Transform + pos: 30.5,-10.5 + parent: 2 + - uid: 8922 + components: + - type: Transform + pos: -2.5,45.5 + parent: 2 + - uid: 8923 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,-33.5 + parent: 2 + - uid: 8925 + components: + - type: Transform + pos: 47.5,-36.5 + parent: 2 + - uid: 8926 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 40.5,-36.5 + parent: 2 + - uid: 8927 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,-40.5 + parent: 2 + - uid: 8928 + components: + - type: Transform + pos: 36.5,-36.5 + parent: 2 +- proto: CockroachTimedSpawner + entities: + - uid: 8929 + components: + - type: Transform + pos: -40.5,-26.5 + parent: 2 +- proto: ComfyChair + entities: + - uid: 928 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,10.5 + parent: 2 + - uid: 8930 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-3.5 + parent: 2 + - uid: 8931 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-3.5 + parent: 2 + - uid: 8932 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,-3.5 + parent: 2 + - uid: 8933 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,-3.5 + parent: 2 + - uid: 8934 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 44.5,-0.5 + parent: 2 + - uid: 8935 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -18.5,22.5 + parent: 2 + - uid: 8936 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -18.5,21.5 + parent: 2 + - uid: 8937 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -18.5,20.5 + parent: 2 + - uid: 8938 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,39.5 + parent: 2 + - uid: 8939 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,39.5 + parent: 2 + - uid: 8940 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,39.5 + parent: 2 + - uid: 8941 + components: + - type: Transform + pos: -23.5,41.5 + parent: 2 + - uid: 8942 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,48.5 + parent: 2 + - uid: 8943 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,55.5 + parent: 2 + - uid: 8944 + components: + - type: Transform + pos: 7.5,55.5 + parent: 2 + - uid: 8945 + components: + - type: Transform + pos: 8.5,55.5 + parent: 2 + - uid: 8946 + components: + - type: Transform + pos: 9.5,55.5 + parent: 2 + - uid: 8947 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,53.5 + parent: 2 + - uid: 8948 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,53.5 + parent: 2 + - uid: 8949 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,53.5 + parent: 2 + - uid: 8950 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,85.5 + parent: 2 + - uid: 8951 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,85.5 + parent: 2 + - uid: 8952 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 46.5,-24.5 + parent: 2 + - uid: 8953 + components: + - type: Transform + pos: 7.5,-39.5 + parent: 2 + - uid: 8954 + components: + - type: Transform + pos: 8.5,-39.5 + parent: 2 + - uid: 8955 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.5,-50.5 + parent: 2 + - uid: 8956 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.5,-51.5 + parent: 2 + - uid: 8957 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,-50.5 + parent: 2 + - uid: 8958 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,26.5 + parent: 2 + - uid: 8959 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,-23.5 + parent: 2 +- proto: CommsComputerCircuitboard + entities: + - uid: 8960 + components: + - type: Transform + pos: -4.5,-39.5 + parent: 2 +- proto: ComputerAlert + entities: + - uid: 8961 + components: + - type: Transform + pos: 5.5,35.5 + parent: 2 + - uid: 8962 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,60.5 + parent: 2 + - uid: 8963 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,-55.5 + parent: 2 + - uid: 8964 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,-64.5 + parent: 2 + - uid: 8965 + components: + - type: Transform + pos: -13.5,-55.5 + parent: 2 + - uid: 8967 + components: + - type: Transform + pos: 19.5,-39.5 + parent: 2 + - uid: 8968 + components: + - type: Transform + pos: 20.5,-39.5 + parent: 2 + - uid: 8969 + components: + - type: Transform + pos: 21.5,-39.5 + parent: 2 + - uid: 8970 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,-54.5 + parent: 2 + - uid: 8971 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,-62.5 + parent: 2 + - uid: 8972 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,-58.5 + parent: 2 + - uid: 8973 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,-58.5 + parent: 2 + - uid: 8974 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,-62.5 + parent: 2 + - uid: 8975 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,-42.5 + parent: 2 + - uid: 8976 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,-53.5 + parent: 2 +- proto: ComputerAnalysisConsole + entities: + - uid: 8977 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,-24.5 + parent: 2 + - uid: 8978 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,-30.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 15928: + - ArtifactAnalyzerSender: ArtifactAnalyzerReceiver + - uid: 8979 + components: + - type: Transform + pos: -2.5,-30.5 + parent: 2 +- proto: computerBodyScanner + entities: + - uid: 821 + components: + - type: Transform + pos: 19.5,-30.5 + parent: 2 + - uid: 8980 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 43.5,-40.5 + parent: 2 +- proto: ComputerBroken + entities: + - uid: 8981 + components: + - type: Transform + pos: 38.5,-36.5 + parent: 2 +- proto: ComputerCargoBounty + entities: + - uid: 8982 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,-2.5 + parent: 2 + - uid: 8983 + components: + - type: Transform + pos: -27.5,8.5 + parent: 2 +- proto: ComputerCargoOrders + entities: + - uid: 8984 + components: + - type: Transform + pos: -2.5,61.5 + parent: 2 + - uid: 8985 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,-28.5 + parent: 2 + - uid: 8986 + components: + - type: Transform + pos: 18.5,-18.5 + parent: 2 + - uid: 8988 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,8.5 + parent: 2 + - uid: 8989 + components: + - type: Transform + pos: -28.5,8.5 + parent: 2 + - uid: 8990 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,9.5 + parent: 2 + - uid: 22689 + components: + - type: Transform + pos: -1.5,-44.5 + parent: 2 +- proto: ComputerCargoShuttle + entities: + - uid: 8991 + components: + - type: Transform + pos: -29.5,8.5 + parent: 2 +- proto: ComputerCloningConsole + entities: + - uid: 820 + components: + - type: Transform + pos: 20.5,-30.5 + parent: 2 + - uid: 8992 + components: + - type: Transform + pos: 31.5,-27.5 + parent: 2 +- proto: ComputerComms + entities: + - uid: 8993 + components: + - type: Transform + pos: -8.5,53.5 + parent: 2 + - uid: 8994 + components: + - type: Transform + pos: 0.5,62.5 + parent: 2 +- proto: ComputerCrewMonitoring + entities: + - uid: 8995 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,32.5 + parent: 2 + - uid: 8996 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,60.5 + parent: 2 + - uid: 8997 + components: + - type: Transform + pos: 25.5,-17.5 + parent: 2 + - uid: 8998 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,-19.5 + parent: 2 + - uid: 8999 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,-25.5 + parent: 2 + - uid: 9000 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,46.5 + parent: 2 +- proto: ComputerCriminalRecords + entities: + - uid: 9001 + components: + - type: Transform + pos: -3.5,16.5 + parent: 2 + - uid: 9002 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 28.5,-2.5 + parent: 2 + - uid: 9003 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,-18.5 + parent: 2 + - uid: 9004 + components: + - type: Transform + pos: -7.5,20.5 + parent: 2 + - uid: 9005 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,32.5 + parent: 2 + - uid: 9006 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,34.5 + parent: 2 + - uid: 9007 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,38.5 + parent: 2 + - uid: 9008 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -42.5,19.5 + parent: 2 + - uid: 9009 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,60.5 + parent: 2 + - uid: 9010 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,24.5 + parent: 2 +- proto: ComputerFrame + entities: + - uid: 9011 + components: + - type: Transform + pos: -12.5,-2.5 + parent: 2 + - uid: 9012 + components: + - type: Transform + pos: -11.5,-2.5 + parent: 2 + - uid: 9013 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,-20.5 + parent: 2 + - uid: 9014 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,-51.5 + parent: 2 + - uid: 9015 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,-51.5 + parent: 2 + - uid: 9016 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,-67.5 + parent: 2 + - uid: 9017 + components: + - type: Transform + pos: 43.5,0.5 + parent: 2 + - uid: 9018 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 38.5,0.5 + parent: 2 + - uid: 9019 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 42.5,37.5 + parent: 2 + - uid: 9020 + components: + - type: Transform + pos: 44.5,46.5 + parent: 2 + - uid: 9021 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,69.5 + parent: 2 + - uid: 9022 + components: + - type: Transform + pos: 1.5,72.5 + parent: 2 + - uid: 9023 + components: + - type: Transform + pos: -2.5,85.5 + parent: 2 + - uid: 9027 + components: + - type: Transform + pos: -23.5,-54.5 + parent: 2 +- proto: ComputerId + entities: + - uid: 9028 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,-23.5 + parent: 2 + - uid: 9029 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,6.5 + parent: 2 + - uid: 9030 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,40.5 + parent: 2 + - uid: 9031 + components: + - type: Transform + pos: -7.5,53.5 + parent: 2 + - uid: 9032 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,46.5 + parent: 2 + - uid: 9033 + components: + - type: Transform + pos: 1.5,62.5 + parent: 2 + - uid: 9034 + components: + - type: Transform + pos: 26.5,-17.5 + parent: 2 + - uid: 9035 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,-55.5 + parent: 2 +- proto: ComputerMassMedia + entities: + - uid: 9036 + components: + - type: Transform + pos: 19.5,21.5 + parent: 2 +- proto: ComputerMassMediaCircuitboard + entities: + - uid: 9037 + components: + - type: Transform + pos: -2.5972466,-35.5244 + parent: 2 +- proto: ComputerMedicalRecords + entities: + - uid: 9038 + components: + - type: Transform + pos: -18.5,-16.5 + parent: 2 + - uid: 9039 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,39.5 + parent: 2 + - uid: 9040 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -28.5,39.5 + parent: 2 + - uid: 9041 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -41.5,19.5 + parent: 2 + - uid: 9042 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,59.5 + parent: 2 + - uid: 9043 + components: + - type: Transform + pos: 15.5,-13.5 + parent: 2 +- proto: ComputerPalletConsole + entities: + - uid: 9044 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,58.5 + parent: 2 +- proto: ComputerPowerMonitoring + entities: + - uid: 9045 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,61.5 + parent: 2 + - uid: 9046 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-47.5 + parent: 2 + - uid: 9047 + components: + - type: Transform + pos: 11.5,-53.5 + parent: 2 + - uid: 23912 + components: + - type: Transform + pos: -12.5,-55.5 + parent: 2 +- proto: ComputerRadar + entities: + - uid: 9048 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -38.5,-20.5 + parent: 2 + - uid: 9049 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -42.5,25.5 + parent: 2 + - uid: 9050 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,61.5 + parent: 2 + - uid: 9051 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,-63.5 + parent: 2 +- proto: ComputerResearchAndDevelopment + entities: + - uid: 9052 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,-26.5 + parent: 2 + - uid: 9053 + components: + - type: Transform + pos: -25.5,-33.5 + parent: 2 + - uid: 9054 + components: + - type: Transform + pos: -21.5,-16.5 + parent: 2 + - uid: 9055 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,-23.5 + parent: 2 + - uid: 9056 + components: + - type: Transform + pos: -4.5,-30.5 + parent: 2 +- proto: ComputerSalvageExpedition + entities: + - uid: 9057 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,5.5 + parent: 2 + - uid: 9058 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -42.5,-13.5 + parent: 2 + - uid: 9059 + components: + - type: Transform + pos: 4.5,61.5 + parent: 2 +- proto: ComputerShuttleCargo + entities: + - uid: 9060 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -42.5,-0.5 + parent: 2 +- proto: ComputerShuttleSalvage + entities: + - uid: 9061 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -44.5,-13.5 + parent: 2 +- proto: ComputerSolarControl + entities: + - uid: 9062 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -33.5,-54.5 + parent: 2 + - uid: 9063 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -33.5,-54.5 + parent: 2 + - uid: 9064 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,60.5 + parent: 2 + - uid: 9065 + components: + - type: Transform + pos: -54.5,32.5 + parent: 2 + - uid: 9066 + components: + - type: Transform + pos: 10.5,-53.5 + parent: 2 + - uid: 9067 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-48.5 + parent: 2 + - uid: 9068 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,-63.5 + parent: 2 + - uid: 9069 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,-59.5 + parent: 2 + - uid: 9070 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,21.5 + parent: 2 +- proto: ComputerStationRecords + entities: + - uid: 9071 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,-3.5 + parent: 2 + - uid: 9072 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,20.5 + parent: 2 + - uid: 9073 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,35.5 + parent: 2 + - uid: 9074 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,39.5 + parent: 2 + - uid: 9075 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,59.5 + parent: 2 + - uid: 9076 + components: + - type: Transform + pos: 4.5,-48.5 + parent: 2 +- proto: ComputerSurveillanceCameraMonitor + entities: + - uid: 9077 + components: + - type: Transform + pos: 46.5,-16.5 + parent: 2 + - uid: 9078 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,21.5 + parent: 2 + - uid: 9079 + components: + - type: Transform + pos: -7.5,34.5 + parent: 2 + - uid: 9080 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,36.5 + parent: 2 + - uid: 9081 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,40.5 + parent: 2 + - uid: 9082 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,40.5 + parent: 2 + - uid: 9083 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -42.5,24.5 + parent: 2 + - uid: 9084 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,58.5 + parent: 2 + - uid: 9085 + components: + - type: Transform + pos: 6.5,-18.5 + parent: 2 + - uid: 9086 + components: + - type: Transform + pos: 3.5,-48.5 + parent: 2 + - uid: 9087 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,-2.5 + parent: 2 + - uid: 9088 + components: + - type: Transform + pos: 6.5,35.5 + parent: 2 + - uid: 9089 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,-35.5 + parent: 2 +- proto: ComputerTelevision + entities: + - uid: 9090 + components: + - type: Transform + pos: 11.5,25.5 + parent: 2 + - uid: 9091 + components: + - type: Transform + pos: -5.5,52.5 + parent: 2 + - uid: 9092 + components: + - type: Transform + pos: 15.5,9.5 + parent: 2 + - uid: 9093 + components: + - type: Transform + pos: -42.5,35.5 + parent: 2 +- proto: ContainmentFieldGenerator + entities: + - uid: 9094 + components: + - type: Transform + pos: 13.5,-58.5 + parent: 2 + - uid: 9095 + components: + - type: Transform + pos: 13.5,-59.5 + parent: 2 + - uid: 9096 + components: + - type: Transform + pos: 12.5,-58.5 + parent: 2 + - uid: 9097 + components: + - type: Transform + pos: 12.5,-59.5 + parent: 2 +- proto: ConveyorBelt + entities: + - uid: 9098 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,-2.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19984 + - uid: 9099 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,-2.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19984 + - uid: 9100 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,-2.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19984 + - uid: 9101 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,-2.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19984 + - uid: 9102 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,-2.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19984 + - uid: 9103 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -35.5,11.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19979 + - uid: 9104 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,12.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19979 + - uid: 9105 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,12.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19979 + - uid: 9106 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -37.5,12.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19979 + - uid: 9107 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -38.5,12.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19979 + - uid: 9108 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -39.5,12.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19979 + - uid: 9109 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -40.5,12.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19979 + - uid: 9110 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -41.5,12.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19979 + - uid: 9111 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -42.5,12.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19979 + - uid: 9112 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -43.5,12.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19979 + - uid: 9113 + components: + - type: Transform + pos: -44.5,12.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19979 + - uid: 9114 + components: + - type: Transform + pos: -44.5,11.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19979 + - uid: 9115 + components: + - type: Transform + pos: -44.5,10.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19979 + - uid: 9116 + components: + - type: Transform + pos: -44.5,9.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19979 + - uid: 9117 + components: + - type: Transform + pos: -44.5,8.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19979 + - uid: 9118 + components: + - type: Transform + pos: -44.5,7.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19979 + - uid: 9119 + components: + - type: Transform + pos: -44.5,6.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19979 + - uid: 9120 + components: + - type: Transform + pos: -44.5,5.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19979 + - uid: 9121 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -45.5,-2.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19977 + - uid: 9122 + components: + - type: Transform + pos: -44.5,-2.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19977 + - uid: 9123 + components: + - type: Transform + pos: -44.5,-3.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19977 + - uid: 9124 + components: + - type: Transform + pos: -44.5,-4.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19977 + - uid: 9125 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -44.5,-5.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19977 + - uid: 9126 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -43.5,-5.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19977 + - uid: 9127 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -42.5,-5.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19977 + - uid: 9128 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -41.5,-5.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19977 + - uid: 9129 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -41.5,4.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19978 + - uid: 9130 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -42.5,4.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19978 + - uid: 9131 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -43.5,4.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19978 + - uid: 9132 + components: + - type: Transform + pos: -44.5,4.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19978 + - uid: 9133 + components: + - type: Transform + pos: -44.5,3.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19978 + - uid: 9134 + components: + - type: Transform + pos: -44.5,2.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19978 + - uid: 9135 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -44.5,1.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19978 + - uid: 9136 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -45.5,1.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19978 + - uid: 9137 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -38.5,14.5 + parent: 2 + - uid: 9138 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,14.5 + parent: 2 + - uid: 9139 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,15.5 + parent: 2 + - type: ApcPowerReceiver + needsPower: False + - uid: 9140 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,16.5 + parent: 2 + - uid: 9141 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -37.5,17.5 + parent: 2 + - uid: 9142 + components: + - type: Transform + pos: -38.5,17.5 + parent: 2 + - uid: 9143 + components: + - type: Transform + pos: -38.5,16.5 + parent: 2 + - uid: 9144 + components: + - type: Transform + pos: -38.5,15.5 + parent: 2 + - uid: 9145 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -44.5,16.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19980 + - uid: 9146 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -43.5,16.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19980 + - uid: 9147 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -42.5,16.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19980 + - uid: 9148 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -41.5,16.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19980 + - uid: 9149 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -40.5,16.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19980 + - uid: 9150 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -40.5,17.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19980 + - uid: 9151 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -41.5,17.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19980 + - uid: 9152 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -42.5,17.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19980 + - uid: 9153 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -43.5,17.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19980 + - uid: 9154 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -44.5,17.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19980 + - uid: 9155 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -44.5,18.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19980 + - uid: 9156 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -45.5,18.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19980 + - uid: 9157 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,47.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19983 + - uid: 9158 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,46.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19983 + - uid: 9159 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,-2.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19984 +- proto: CrateArtifactContainer + entities: + - uid: 9160 + components: + - type: Transform + pos: -20.5,-31.5 + parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.14673 + moles: + - 1.7459903 + - 6.568249 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 9161 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null +- proto: CrateChemistrySecure + entities: + - uid: 8628 + components: + - type: Transform + pos: 44.5,-30.5 + parent: 2 + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 8629 + - 8630 + - 8631 + - 8632 + - 8633 + - 8634 + - 8635 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null +- proto: CrateCoffin + entities: + - uid: 9162 + components: + - type: Transform + pos: 20.5,40.5 + parent: 2 + - uid: 9163 + components: + - type: Transform + pos: 13.5,40.5 + parent: 2 + - uid: 9164 + components: + - type: Transform + pos: 13.5,39.5 + parent: 2 + - uid: 9165 + components: + - type: Transform + pos: 13.5,38.5 + parent: 2 + - uid: 9166 + components: + - type: Transform + pos: 23.5,42.5 + parent: 2 + - uid: 9167 + components: + - type: Transform + pos: 23.5,43.5 + parent: 2 + - uid: 9168 + components: + - type: Transform + pos: 23.5,44.5 + parent: 2 +- proto: CrateCommandSecure + entities: + - uid: 9169 + components: + - type: Transform + pos: -29.5,-10.5 + parent: 2 + - uid: 9170 + components: + - type: Transform + pos: -34.5,17.5 + parent: 2 + - type: Lock + locked: False + - type: Fixtures + fixtures: + fix1: + shape: !type:PolygonShape + radius: 0.01 + vertices: + - -0.4,-0.4 + - 0.4,-0.4 + - 0.4,0.29 + - -0.4,0.29 + mask: + - Impassable + - LowImpassable + layer: + - TableLayer + - LowImpassable + - BulletImpassable + - Opaque + density: 50 + hard: True + restitution: 0 + friction: 0.4 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.14673 + moles: + - 1.7459903 + - 6.568249 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 9173 + - 9172 + - 9171 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null +- proto: CrateEmergencyRadiation + entities: + - uid: 9174 + components: + - type: Transform + pos: -19.5,-46.5 + parent: 2 +- proto: CrateEngineeringCableBulk + entities: + - uid: 9175 + components: + - type: Transform + pos: 46.5,24.5 + parent: 2 + - uid: 9176 + components: + - type: Transform + pos: -34.5,-56.5 + parent: 2 + - uid: 9177 + components: + - type: Transform + pos: 10.5,-60.5 + parent: 2 + - uid: 9178 + components: + - type: Transform + pos: -2.5,47.5 + parent: 2 + - uid: 9179 + components: + - type: Transform + pos: -22.5,-56.5 + parent: 2 +- proto: CrateEngineeringCableLV + entities: + - uid: 9180 + components: + - type: Transform + pos: -29.5,17.5 + parent: 2 +- proto: CrateEvaKit + entities: + - uid: 611 + components: + - type: Transform + pos: 6.5,44.5 + parent: 2 + - uid: 9181 + components: + - type: Transform + pos: -35.5,15.5 + parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.14673 + moles: + - 1.7459903 + - 6.568249 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 +- proto: CrateFilledSpawner + entities: + - uid: 9183 + components: + - type: Transform + pos: -19.5,-2.5 + parent: 2 + - uid: 9184 + components: + - type: Transform + pos: -17.5,-11.5 + parent: 2 + - uid: 9185 + components: + - type: Transform + pos: -19.5,-3.5 + parent: 2 + - uid: 9186 + components: + - type: Transform + pos: -22.5,-9.5 + parent: 2 + - uid: 9187 + components: + - type: Transform + pos: -21.5,-9.5 + parent: 2 + - uid: 9188 + components: + - type: Transform + pos: -27.5,10.5 + parent: 2 + - uid: 9189 + components: + - type: Transform + pos: -30.5,11.5 + parent: 2 + - uid: 9190 + components: + - type: Transform + pos: -26.5,13.5 + parent: 2 + - uid: 9191 + components: + - type: Transform + pos: -28.5,13.5 + parent: 2 + - uid: 9192 + components: + - type: Transform + pos: -29.5,13.5 + parent: 2 + - uid: 9193 + components: + - type: Transform + pos: -35.5,12.5 + parent: 2 + - uid: 9194 + components: + - type: Transform + pos: -37.5,12.5 + parent: 2 + - uid: 9195 + components: + - type: Transform + pos: -38.5,12.5 + parent: 2 + - uid: 9196 + components: + - type: Transform + pos: -40.5,9.5 + parent: 2 + - uid: 9197 + components: + - type: Transform + pos: -41.5,7.5 + parent: 2 + - uid: 9198 + components: + - type: Transform + pos: -36.5,3.5 + parent: 2 + - uid: 9199 + components: + - type: Transform + pos: -36.5,2.5 + parent: 2 + - uid: 9200 + components: + - type: Transform + pos: -38.5,2.5 + parent: 2 + - uid: 9201 + components: + - type: Transform + pos: -39.5,2.5 + parent: 2 + - uid: 9202 + components: + - type: Transform + pos: -41.5,1.5 + parent: 2 + - uid: 9203 + components: + - type: Transform + pos: -38.5,1.5 + parent: 2 + - uid: 9204 + components: + - type: Transform + pos: -39.5,-3.5 + parent: 2 + - uid: 9205 + components: + - type: Transform + pos: -38.5,-3.5 + parent: 2 + - uid: 9206 + components: + - type: Transform + pos: -38.5,-2.5 + parent: 2 + - uid: 9207 + components: + - type: Transform + pos: -40.5,-3.5 + parent: 2 + - uid: 9208 + components: + - type: Transform + pos: -36.5,-4.5 + parent: 2 + - uid: 9209 + components: + - type: Transform + pos: -40.5,-2.5 + parent: 2 +- proto: CrateFoodBarSupply + entities: + - uid: 9210 + components: + - type: Transform + pos: 16.5,18.5 + parent: 2 +- proto: CrateFoodPizza + entities: + - uid: 9211 + components: + - type: Transform + pos: 21.5,21.5 + parent: 2 + - type: Fixtures + fixtures: + fix1: + shape: !type:PolygonShape + radius: 0.01 + vertices: + - -0.4,-0.4 + - 0.4,-0.4 + - 0.4,0.29 + - -0.4,0.29 + mask: + - Impassable + - LowImpassable + layer: + - BulletImpassable + - Opaque + density: 50 + hard: True + restitution: 0 + friction: 0.4 + - type: EntityStorage + open: True + removedMasks: 20 + - type: PlaceableSurface + isPlaceable: True +- proto: CrateFreezer + entities: + - uid: 9212 + components: + - type: Transform + pos: -26.5,11.5 + parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 75.31249 + moles: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 +- proto: CrateGenericSteel + entities: + - uid: 9214 + components: + - type: Transform + pos: -29.5,-4.5 + parent: 2 +- proto: CrateHydroponicsSeedsMedicinal + entities: + - uid: 9215 + components: + - type: Transform + pos: 36.5,19.5 + parent: 2 +- proto: CrateHydroponicsTools + entities: + - uid: 9216 + components: + - type: Transform + pos: 38.5,19.5 + parent: 2 +- proto: CrateMaterialCardboard + entities: + - uid: 9217 + components: + - type: Transform + pos: -30.5,-54.5 + parent: 2 +- proto: CrateMedicalScrubs + entities: + - uid: 9218 + components: + - type: Transform + pos: -28.5,11.5 + parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 75.31249 + moles: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - uid: 9219 + components: + - type: Transform + pos: 12.5,-16.5 + parent: 2 +- proto: CrateMedicalSecure + entities: + - uid: 8823 + components: + - type: Transform + pos: 22.5,-17.5 + parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.14673 + moles: + - 1.7459903 + - 6.568249 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 8828 + - 8824 + - 8827 + - 8825 + - 8826 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null +- proto: CrateMedicalSupplies + entities: + - uid: 9220 + components: + - type: Transform + pos: 14.5,-13.5 + parent: 2 + - type: Fixtures + fixtures: + fix1: + shape: !type:PolygonShape + radius: 0.01 + vertices: + - -0.4,-0.4 + - 0.4,-0.4 + - 0.4,0.29 + - -0.4,0.29 + mask: + - Impassable + - LowImpassable + layer: + - BulletImpassable + - Opaque + density: 50 + hard: True + restitution: 0 + friction: 0.4 + - type: EntityStorage + open: True + removedMasks: 20 + - type: PlaceableSurface + isPlaceable: True +- proto: CrateMedicalSurgery + entities: + - uid: 9221 + components: + - type: Transform + pos: 12.5,-14.5 + parent: 2 + - uid: 9222 + components: + - type: Transform + pos: 4.5,-13.5 + parent: 2 + - uid: 9223 + components: + - type: Transform + pos: -16.5,-17.5 + parent: 2 +- proto: CrateNPCCow + entities: + - uid: 9224 + components: + - type: Transform + pos: 24.5,17.5 + parent: 2 +- proto: CrateNPCHamlet + entities: + - uid: 9225 + components: + - type: Transform + pos: 4.5,58.5 + parent: 2 +- proto: CrateServiceBooks + entities: + - uid: 9226 + components: + - type: Transform + pos: 38.5,-0.5 + parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 75.31249 + moles: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - uid: 9227 + components: + - type: Transform + pos: -41.5,37.5 + parent: 2 +- proto: CrateServiceCustomSmokable + entities: + - uid: 9228 + components: + - type: Transform + pos: -23.5,-68.5 + parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 75.31249 + moles: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 +- proto: CrateServiceJanitorialSupplies + entities: + - uid: 9229 + components: + - type: Transform + pos: -5.5,30.5 + parent: 2 +- proto: CrateServicePersonnel + entities: + - uid: 9230 + components: + - type: Transform + pos: -31.5,15.5 + parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.14673 + moles: + - 1.7459903 + - 6.568249 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 +- proto: CrateTrashCart + entities: + - uid: 9231 + components: + - type: Transform + pos: -40.5,-7.5 + parent: 2 + - uid: 9232 + components: + - type: Transform + pos: -24.5,-9.5 + parent: 2 + - uid: 9233 + components: + - type: Transform + pos: -11.5,46.5 + parent: 2 + - uid: 9234 + components: + - type: Transform + pos: 14.5,25.5 + parent: 2 + - uid: 9235 + components: + - type: Transform + pos: 27.5,-6.5 + parent: 2 + - uid: 9236 + components: + - type: Transform + pos: -19.5,-35.5 + parent: 2 +- proto: CrateTrashCartFilled + entities: + - uid: 9238 + components: + - type: Transform + pos: -43.5,15.5 + parent: 2 + - uid: 9239 + components: + - type: Transform + pos: -10.5,-53.5 + parent: 2 +- proto: CrateTrashCartJani + entities: + - uid: 9240 + components: + - type: Transform + pos: 12.5,12.5 + parent: 2 +- proto: CrayonBox + entities: + - uid: 9241 + components: + - type: Transform + pos: -34.673954,-62.17356 + parent: 2 + - uid: 9242 + components: + - type: Transform + pos: -34.48533,-62.32021 + parent: 2 + - uid: 9243 + components: + - type: Transform + pos: -34.317665,-62.529705 + parent: 2 + - uid: 9244 + components: + - type: Transform + pos: 19.53846,4.6073794 + parent: 2 + - uid: 9245 + components: + - type: Transform + pos: 40.346092,13.153667 + parent: 2 + - uid: 9246 + components: + - type: Transform + pos: 38.428013,4.4356456 + parent: 2 + - uid: 9247 + components: + - type: Transform + pos: 38.574867,4.603478 + parent: 2 +- proto: CrayonMime + entities: + - uid: 10515 + components: + - type: Transform + parent: 10501 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: Crematorium + entities: + - uid: 9248 + components: + - type: Transform + pos: 13.5,36.5 + parent: 2 +- proto: CrewMonitoringServer + entities: + - uid: 9249 + components: + - type: Transform + pos: -32.5,17.5 + parent: 2 + - type: SingletonDeviceNetServer + active: False + available: False +- proto: CriminalRecordsComputerCircuitboard + entities: + - uid: 9250 + components: + - type: Transform + pos: -23.487724,18.538704 + parent: 2 +- proto: Crowbar + entities: + - uid: 9251 + components: + - type: Transform + pos: -12.749992,6.618308 + parent: 2 + - uid: 9252 + components: + - type: Transform + pos: 4.602319,14.763411 + parent: 2 + - uid: 9253 + components: + - type: Transform + pos: -37.25477,-50.84965 + parent: 2 + - uid: 9254 + components: + - type: Transform + pos: 43.58695,-18.320988 + parent: 2 + - uid: 9255 + components: + - type: Transform + pos: -6.076641,80.40069 + parent: 2 + - uid: 9256 + components: + - type: Transform + pos: 28.705112,-32.456554 + parent: 2 + - uid: 9257 + components: + - type: Transform + pos: -7.427861,-66.10646 + parent: 2 +- proto: CrowbarRed + entities: + - uid: 9258 + components: + - type: Transform + pos: -22.532516,-13.756351 + parent: 2 +- proto: CryogenicSleepUnitSpawner + entities: + - uid: 9260 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,22.5 + parent: 2 + - uid: 9261 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,24.5 + parent: 2 +- proto: CryogenicSleepUnitSpawnerLateJoin + entities: + - uid: 9259 + components: + - type: Transform + pos: 34.5,22.5 + parent: 2 + - uid: 9262 + components: + - type: Transform + pos: 34.5,24.5 + parent: 2 +- proto: CryoPod + entities: + - uid: 9263 + components: + - type: Transform + pos: 25.5,-27.5 + parent: 2 + - uid: 9264 + components: + - type: Transform + pos: 25.5,-29.5 + parent: 2 +- proto: CryoPodMachineCircuitboard + entities: + - uid: 9265 + components: + - type: Transform + pos: -4.484352,-36.451756 + parent: 2 +- proto: CryoxadoneBeakerSmall + entities: + - uid: 9266 + components: + - type: Transform + pos: 28.510334,-31.289518 + parent: 2 + - uid: 9267 + components: + - type: Transform + pos: 28.715462,-31.186954 + parent: 2 +- proto: CultAltarSpawner + entities: + - uid: 9268 + components: + - type: Transform + pos: 13.5,33.5 + parent: 2 +- proto: DefaultStationBeaconAICore + entities: + - uid: 9269 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,77.5 + parent: 2 +- proto: DefaultStationBeaconAISatellite + entities: + - uid: 9270 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,71.5 + parent: 2 +- proto: DefaultStationBeaconAME + entities: + - uid: 9271 + components: + - type: Transform + pos: -3.5,-58.5 + parent: 2 +- proto: DefaultStationBeaconAnomalyGenerator + entities: + - uid: 9272 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -43.5,-33.5 + parent: 2 +- proto: DefaultStationBeaconArmory + entities: + - uid: 9273 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,39.5 + parent: 2 +- proto: DefaultStationBeaconArrivals + entities: + - uid: 9274 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 43.5,38.5 + parent: 2 +- proto: DefaultStationBeaconArtifactLab + entities: + - uid: 9275 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,-31.5 + parent: 2 + - uid: 9276 + components: + - type: Transform + pos: -35.5,-49.5 + parent: 2 + - type: NavMapBeacon + text: Toxins Lab +- proto: DefaultStationBeaconAtmospherics + entities: + - uid: 9277 + components: + - type: Transform + pos: 27.5,-58.5 + parent: 2 +- proto: DefaultStationBeaconBar + entities: + - uid: 9278 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 18.5,9.5 + parent: 2 +- proto: DefaultStationBeaconBotany + entities: + - uid: 9279 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 35.5,16.5 + parent: 2 +- proto: DefaultStationBeaconBridge + entities: + - uid: 9280 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,59.5 + parent: 2 +- proto: DefaultStationBeaconBrig + entities: + - uid: 9281 + components: + - type: Transform + pos: -7.5,28.5 + parent: 2 +- proto: DefaultStationBeaconCaptainsQuarters + entities: + - uid: 9282 + components: + - type: Transform + pos: -5.5,54.5 + parent: 2 +- proto: DefaultStationBeaconCargoBay + entities: + - uid: 9283 + components: + - type: Transform + pos: -39.5,-0.5 + parent: 2 +- proto: DefaultStationBeaconCargoReception + entities: + - uid: 9284 + components: + - type: Transform + pos: -39.5,8.5 + parent: 2 +- proto: DefaultStationBeaconCERoom + entities: + - uid: 9285 + components: + - type: Transform + pos: 13.5,-52.5 + parent: 2 +- proto: DefaultStationBeaconChapel + entities: + - uid: 9286 + components: + - type: Transform + pos: 20.5,31.5 + parent: 2 +- proto: DefaultStationBeaconChemistry + entities: + - uid: 9287 + components: + - type: Transform + pos: 7.5,-30.5 + parent: 2 +- proto: DefaultStationBeaconCMORoom + entities: + - uid: 9288 + components: + - type: Transform + pos: 24.5,-19.5 + parent: 2 +- proto: DefaultStationBeaconCommand + entities: + - uid: 9289 + components: + - type: Transform + pos: 8.5,54.5 + parent: 2 +- proto: DefaultStationBeaconCourtroom + entities: + - uid: 9290 + components: + - type: Transform + pos: -11.5,13.5 + parent: 2 +- proto: DefaultStationBeaconCryosleep + entities: + - uid: 9291 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.5,23.5 + parent: 2 +- proto: DefaultStationBeaconDetectiveRoom + entities: + - uid: 9292 + components: + - type: Transform + pos: -20.5,20.5 + parent: 2 +- proto: DefaultStationBeaconDisposals + entities: + - uid: 9293 + components: + - type: Transform + pos: -42.5,15.5 + parent: 2 +- proto: DefaultStationBeaconDorms + entities: + - uid: 9294 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,39.5 + parent: 2 + - uid: 9295 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,36.5 + parent: 2 +- proto: DefaultStationBeaconEngineering + entities: + - uid: 9296 + components: + - type: Transform + pos: 0.5,-41.5 + parent: 2 +- proto: DefaultStationBeaconEscapePod + entities: + - uid: 9297 + components: + - type: Transform + pos: 29.5,41.5 + parent: 2 +- proto: DefaultStationBeaconEvac + entities: + - uid: 9298 + components: + - type: Transform + pos: 37.5,-8.5 + parent: 2 +- proto: DefaultStationBeaconEVAStorage + entities: + - uid: 9299 + components: + - type: Transform + pos: -4.5,-22.5 + parent: 2 +- proto: DefaultStationBeaconGravGen + entities: + - uid: 9300 + components: + - type: Transform + pos: 6.5,31.5 + parent: 2 +- proto: DefaultStationBeaconHOPOffice + entities: + - uid: 9301 + components: + - type: Transform + pos: 7.5,48.5 + parent: 2 +- proto: DefaultStationBeaconHOSRoom + entities: + - uid: 9302 + components: + - type: Transform + pos: -23.5,44.5 + parent: 2 +- proto: DefaultStationBeaconJanitorsCloset + entities: + - uid: 9303 + components: + - type: Transform + pos: 9.5,13.5 + parent: 2 +- proto: DefaultStationBeaconKitchen + entities: + - uid: 9304 + components: + - type: Transform + pos: 23.5,17.5 + parent: 2 +- proto: DefaultStationBeaconLawOffice + entities: + - uid: 9305 + components: + - type: Transform + pos: -4.5,15.5 + parent: 2 +- proto: DefaultStationBeaconLibrary + entities: + - uid: 9306 + components: + - type: Transform + pos: 40.5,7.5 + parent: 2 +- proto: DefaultStationBeaconMantis + entities: + - uid: 9307 + components: + - type: Transform + pos: -10.5,-22.5 + parent: 2 +- proto: DefaultStationBeaconMedbay + entities: + - uid: 9308 + components: + - type: Transform + pos: 22.5,-24.5 + parent: 2 +- proto: DefaultStationBeaconMedical + entities: + - uid: 9309 + components: + - type: Transform + pos: 7.5,-24.5 + parent: 2 + - uid: 9310 + components: + - type: Transform + pos: 31.5,-29.5 + parent: 2 + - type: NavMapBeacon + text: Cloaning + - uid: 9311 + components: + - type: Transform + pos: 40.5,-29.5 + parent: 2 + - type: NavMapBeacon + text: Virology +- proto: DefaultStationBeaconMorgue + entities: + - uid: 9312 + components: + - type: Transform + pos: 18.5,-9.5 + parent: 2 +- proto: DefaultStationBeaconPermaBrig + entities: + - uid: 9313 + components: + - type: Transform + pos: -39.5,34.5 + parent: 2 +- proto: DefaultStationBeaconPowerBank + entities: + - uid: 9314 + components: + - type: Transform + pos: -18.5,-57.5 + parent: 2 +- proto: DefaultStationBeaconQMRoom + entities: + - uid: 9315 + components: + - type: Transform + pos: -29.5,6.5 + parent: 2 +- proto: DefaultStationBeaconRDRoom + entities: + - uid: 9316 + components: + - type: Transform + pos: -16.5,-23.5 + parent: 2 +- proto: DefaultStationBeaconRND + entities: + - uid: 9317 + components: + - type: Transform + pos: -34.5,-28.5 + parent: 2 +- proto: DefaultStationBeaconRobotics + entities: + - uid: 9318 + components: + - type: Transform + pos: -22.5,-21.5 + parent: 2 +- proto: DefaultStationBeaconSalvage + entities: + - uid: 9319 + components: + - type: Transform + pos: -39.5,-10.5 + parent: 2 +- proto: DefaultStationBeaconScience + entities: + - uid: 9320 + components: + - type: Transform + pos: -13.5,-27.5 + parent: 2 + - uid: 9321 + components: + - type: Transform + pos: -11.5,-42.5 + parent: 2 + - type: NavMapBeacon + text: Xenobiologia +- proto: DefaultStationBeaconSecurity + entities: + - uid: 9322 + components: + - type: Transform + pos: -15.5,28.5 + parent: 2 +- proto: DefaultStationBeaconSecurityCheckpoint + entities: + - uid: 9323 + components: + - type: Transform + pos: -29.5,-34.5 + parent: 2 + - uid: 9324 + components: + - type: Transform + pos: 3.5,-49.5 + parent: 2 + - uid: 9325 + components: + - type: Transform + pos: 5.5,-19.5 + parent: 2 + - uid: 9326 + components: + - type: Transform + pos: 44.5,-16.5 + parent: 2 +- proto: DefaultStationBeaconServerRoom + entities: + - uid: 9327 + components: + - type: Transform + pos: -24.5,-37.5 + parent: 2 +- proto: DefaultStationBeaconService + entities: + - uid: 9328 + components: + - type: Transform + pos: 24.5,7.5 + parent: 2 +- proto: DefaultStationBeaconSolars + entities: + - uid: 9329 + components: + - type: Transform + pos: 50.5,23.5 + parent: 2 + - uid: 9330 + components: + - type: Transform + pos: 40.5,-57.5 + parent: 2 + - uid: 9331 + components: + - type: Transform + pos: -38.5,-56.5 + parent: 2 +- proto: DefaultStationBeaconSupply + entities: + - uid: 9332 + components: + - type: Transform + pos: -33.5,1.5 + parent: 2 +- proto: DefaultStationBeaconSurgery + entities: + - uid: 9333 + components: + - type: Transform + pos: 18.5,-14.5 + parent: 2 +- proto: DefaultStationBeaconTechVault + entities: + - uid: 9334 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,-38.5 + parent: 2 +- proto: DefaultStationBeaconTEG + entities: + - uid: 9335 + components: + - type: Transform + pos: 15.5,-44.5 + parent: 2 +- proto: DefaultStationBeaconTelecoms + entities: + - uid: 9336 + components: + - type: Transform + pos: 6.5,40.5 + parent: 2 +- proto: DefaultStationBeaconTheater + entities: + - uid: 9337 + components: + - type: Transform + pos: 34.5,10.5 + parent: 2 +- proto: DefaultStationBeaconToolRoom + entities: + - uid: 9338 + components: + - type: Transform + pos: 5.5,16.5 + parent: 2 +- proto: DefaultStationBeaconVault + entities: + - uid: 9339 + components: + - type: Transform + pos: -33.5,16.5 + parent: 2 +- proto: DefaultStationBeaconWardensOffice + entities: + - uid: 9340 + components: + - type: Transform + pos: -15.5,34.5 + parent: 2 +- proto: DefibrillatorCabinetFilled + entities: + - uid: 9341 + components: + - type: Transform + pos: 20.5,-26.5 + parent: 2 + - uid: 9342 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,-21.5 + parent: 2 +- proto: DeployableBarrier + entities: + - uid: 9343 + components: + - type: Transform + pos: -21.5,16.5 + parent: 2 +- proto: DeskBell + entities: + - uid: 9344 + components: + - type: Transform + pos: -36.629433,6.548981 + parent: 2 + - uid: 9345 + components: + - type: Transform + pos: -33.687996,-25.481403 + parent: 2 + - uid: 9346 + components: + - type: Transform + pos: -27.754581,-21.629313 + parent: 2 + - uid: 9347 + components: + - type: Transform + pos: 25.481232,9.498274 + parent: 2 + - uid: 9348 + components: + - type: Transform + pos: 18.505909,12.557251 + parent: 2 + - uid: 9349 + components: + - type: Transform + pos: 31.51572,14.840651 + parent: 2 + - uid: 9350 + components: + - type: Transform + pos: -13.363976,32.79391 + parent: 2 + - uid: 9351 + components: + - type: Transform + pos: 5.647772,47.62751 + parent: 2 + - uid: 9352 + components: + - type: Transform + pos: 39.174866,-26.494263 + parent: 2 + - uid: 9353 + components: + - type: Transform + pos: 9.549082,-20.438734 + parent: 2 + - uid: 9354 + components: + - type: Transform + pos: 0.5337652,-43.377193 + parent: 2 + - uid: 9355 + components: + - type: Transform + pos: -6.2765236,36.841625 + parent: 2 +- proto: DiagnoserMachineCircuitboard + entities: + - uid: 8634 + components: + - type: Transform + parent: 8628 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: DiceBag + entities: + - uid: 9356 + components: + - type: Transform + pos: 18.400833,9.654333 + parent: 2 + - uid: 9357 + components: + - type: Transform + pos: -38.71317,34.88084 + parent: 2 + - uid: 9358 + components: + - type: Transform + pos: -38.50804,34.731655 + parent: 2 + - uid: 9359 + components: + - type: Transform + pos: -38.327778,34.588688 + parent: 2 +- proto: DiseaseDiagnoser + entities: + - uid: 9360 + components: + - type: Transform + pos: 47.5,-32.5 + parent: 2 +- proto: DisposalBend + entities: + - uid: 9361 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,45.5 + parent: 2 + - uid: 9362 + components: + - type: Transform + pos: 2.5,47.5 + parent: 2 + - uid: 9363 + components: + - type: Transform + pos: -25.5,10.5 + parent: 2 + - uid: 9364 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,10.5 + parent: 2 + - uid: 9365 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -40.5,6.5 + parent: 2 + - uid: 9366 + components: + - type: Transform + pos: -40.5,14.5 + parent: 2 + - uid: 9367 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -44.5,14.5 + parent: 2 + - uid: 9368 + components: + - type: Transform + pos: -30.5,6.5 + parent: 2 + - uid: 9369 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,-3.5 + parent: 2 + - uid: 9370 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,-2.5 + parent: 2 + - uid: 9371 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,-3.5 + parent: 2 + - uid: 9372 + components: + - type: Transform + pos: -29.5,-0.5 + parent: 2 + - uid: 9373 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,-0.5 + parent: 2 + - uid: 9374 + components: + - type: Transform + pos: -28.5,-29.5 + parent: 2 + - uid: 9375 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,-29.5 + parent: 2 + - uid: 9376 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,-22.5 + parent: 2 + - uid: 9377 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,-8.5 + parent: 2 + - uid: 9378 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,-18.5 + parent: 2 + - uid: 9379 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,-22.5 + parent: 2 + - uid: 9380 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,-27.5 + parent: 2 + - uid: 9381 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -21.5,-33.5 + parent: 2 + - uid: 9382 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -25.5,-30.5 + parent: 2 + - uid: 9383 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,-20.5 + parent: 2 + - uid: 9384 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,-20.5 + parent: 2 + - uid: 9385 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,-21.5 + parent: 2 + - uid: 9386 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -33.5,-52.5 + parent: 2 + - uid: 9387 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,-31.5 + parent: 2 + - uid: 9388 + components: + - type: Transform + pos: -45.5,-29.5 + parent: 2 + - uid: 9389 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -45.5,-36.5 + parent: 2 + - uid: 9390 + components: + - type: Transform + pos: -42.5,-36.5 + parent: 2 + - uid: 9391 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -41.5,-39.5 + parent: 2 + - uid: 9392 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -42.5,-43.5 + parent: 2 + - uid: 9393 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,-31.5 + parent: 2 + - uid: 9394 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 13.5,-31.5 + parent: 2 + - uid: 9395 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-24.5 + parent: 2 + - uid: 9396 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,-32.5 + parent: 2 + - uid: 9397 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,-36.5 + parent: 2 + - uid: 9398 + components: + - type: Transform + pos: 25.5,-19.5 + parent: 2 + - uid: 9399 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,-30.5 + parent: 2 + - uid: 9400 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,-21.5 + parent: 2 + - uid: 9401 + components: + - type: Transform + pos: 40.5,-24.5 + parent: 2 + - uid: 9402 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,-32.5 + parent: 2 + - uid: 9403 + components: + - type: Transform + pos: 37.5,-12.5 + parent: 2 + - uid: 9404 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,-9.5 + parent: 2 + - uid: 9405 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,-9.5 + parent: 2 + - uid: 9406 + components: + - type: Transform + pos: -24.5,-8.5 + parent: 2 + - uid: 9407 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,-7.5 + parent: 2 + - uid: 9408 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,-8.5 + parent: 2 + - uid: 9409 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,-8.5 + parent: 2 + - uid: 9410 + components: + - type: Transform + pos: -4.5,-7.5 + parent: 2 + - uid: 9411 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,4.5 + parent: 2 + - uid: 9412 + components: + - type: Transform + pos: 10.5,4.5 + parent: 2 + - uid: 9413 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,-4.5 + parent: 2 + - uid: 9414 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,-4.5 + parent: 2 + - uid: 9415 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,8.5 + parent: 2 + - uid: 9416 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,17.5 + parent: 2 + - uid: 9417 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,10.5 + parent: 2 + - uid: 9418 + components: + - type: Transform + pos: 4.5,26.5 + parent: 2 + - uid: 9419 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,26.5 + parent: 2 + - uid: 9420 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,28.5 + parent: 2 + - uid: 9421 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,19.5 + parent: 2 + - uid: 9422 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,31.5 + parent: 2 + - uid: 9423 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,35.5 + parent: 2 + - uid: 9424 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,38.5 + parent: 2 + - uid: 9425 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,29.5 + parent: 2 + - uid: 9426 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,29.5 + parent: 2 + - uid: 9427 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -27.5,20.5 + parent: 2 + - uid: 9428 + components: + - type: Transform + pos: -24.5,20.5 + parent: 2 + - uid: 9429 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,16.5 + parent: 2 + - uid: 9430 + components: + - type: Transform + pos: -20.5,16.5 + parent: 2 + - uid: 9431 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,11.5 + parent: 2 + - uid: 9432 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,11.5 + parent: 2 + - uid: 9433 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,29.5 + parent: 2 + - uid: 9434 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,29.5 + parent: 2 + - uid: 9435 + components: + - type: Transform + pos: 9.5,47.5 + parent: 2 + - uid: 9436 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,42.5 + parent: 2 + - uid: 9437 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,39.5 + parent: 2 + - uid: 9438 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,53.5 + parent: 2 + - uid: 9439 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,50.5 + parent: 2 + - uid: 9440 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,50.5 + parent: 2 + - uid: 9441 + components: + - type: Transform + pos: -6.5,45.5 + parent: 2 + - uid: 9442 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,42.5 + parent: 2 + - uid: 9443 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,59.5 + parent: 2 + - uid: 9444 + components: + - type: Transform + pos: -0.5,59.5 + parent: 2 + - uid: 9445 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,47.5 + parent: 2 + - uid: 9446 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,55.5 + parent: 2 + - uid: 9447 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,55.5 + parent: 2 + - uid: 9448 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,52.5 + parent: 2 + - uid: 9449 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 17.5,39.5 + parent: 2 + - uid: 9450 + components: + - type: Transform + pos: 20.5,39.5 + parent: 2 + - uid: 9451 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,31.5 + parent: 2 + - uid: 9452 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 29.5,39.5 + parent: 2 + - uid: 9453 + components: + - type: Transform + pos: 43.5,39.5 + parent: 2 + - uid: 9454 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,38.5 + parent: 2 + - uid: 9455 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,29.5 + parent: 2 + - uid: 9456 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 20.5,10.5 + parent: 2 + - uid: 9457 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 20.5,18.5 + parent: 2 + - uid: 9458 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,18.5 + parent: 2 + - uid: 9459 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,23.5 + parent: 2 + - uid: 9460 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 23.5,23.5 + parent: 2 + - uid: 9461 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 13.5,26.5 + parent: 2 + - uid: 9462 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 13.5,21.5 + parent: 2 + - uid: 9463 + components: + - type: Transform + pos: 32.5,16.5 + parent: 2 + - uid: 9464 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 39.5,1.5 + parent: 2 + - uid: 9465 + components: + - type: Transform + pos: 39.5,7.5 + parent: 2 + - uid: 9466 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,-0.5 + parent: 2 + - uid: 9467 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,-55.5 + parent: 2 + - uid: 9468 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,-53.5 + parent: 2 + - uid: 9469 + components: + - type: Transform + pos: 10.5,-52.5 + parent: 2 + - uid: 9470 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,-55.5 + parent: 2 + - uid: 9471 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,-45.5 + parent: 2 + - uid: 9472 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-40.5 + parent: 2 + - uid: 9473 + components: + - type: Transform + pos: 1.5,-27.5 + parent: 2 + - uid: 9474 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,-41.5 + parent: 2 + - uid: 9475 + components: + - type: Transform + pos: 30.5,-40.5 + parent: 2 + - uid: 9476 + components: + - type: Transform + pos: -15.5,-51.5 + parent: 2 + - uid: 9477 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -21.5,-51.5 + parent: 2 + - uid: 9478 + components: + - type: Transform + pos: -21.5,-43.5 + parent: 2 + - uid: 9479 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -32.5,-43.5 + parent: 2 + - uid: 9480 + components: + - type: Transform + pos: -32.5,-42.5 + parent: 2 + - uid: 9481 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.5,-37.5 + parent: 2 + - uid: 9482 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-37.5 + parent: 2 + - uid: 9483 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,-34.5 + parent: 2 + - uid: 9484 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,46.5 + parent: 2 + - uid: 9485 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,47.5 + parent: 2 + - uid: 9486 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,46.5 + parent: 2 + - uid: 22681 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,11.5 + parent: 2 + - uid: 24253 + components: + - type: Transform + pos: 37.5,6.5 + parent: 2 +- proto: DisposalJunction + entities: + - uid: 9487 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,-27.5 + parent: 2 + - uid: 9488 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,-42.5 + parent: 2 + - uid: 9489 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,6.5 + parent: 2 + - uid: 9490 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,0.5 + parent: 2 + - uid: 9491 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,-30.5 + parent: 2 + - uid: 9492 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,-7.5 + parent: 2 + - uid: 9493 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,-27.5 + parent: 2 + - uid: 9494 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,7.5 + parent: 2 + - uid: 9495 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-27.5 + parent: 2 + - uid: 9496 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,-24.5 + parent: 2 + - uid: 9497 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,-24.5 + parent: 2 + - uid: 9498 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,-24.5 + parent: 2 + - uid: 9499 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,-24.5 + parent: 2 + - uid: 9500 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,-24.5 + parent: 2 + - uid: 9501 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,-7.5 + parent: 2 + - uid: 9502 + components: + - type: Transform + pos: 0.5,-1.5 + parent: 2 + - uid: 9503 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-8.5 + parent: 2 + - uid: 9504 + components: + - type: Transform + pos: 9.5,8.5 + parent: 2 + - uid: 9505 + components: + - type: Transform + pos: 0.5,10.5 + parent: 2 + - uid: 9506 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,19.5 + parent: 2 + - uid: 9507 + components: + - type: Transform + pos: 0.5,19.5 + parent: 2 + - uid: 9508 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,28.5 + parent: 2 + - uid: 9509 + components: + - type: Transform + pos: -23.5,35.5 + parent: 2 + - uid: 9510 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,10.5 + parent: 2 + - uid: 9511 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,28.5 + parent: 2 + - uid: 9512 + components: + - type: Transform + pos: -2.5,39.5 + parent: 2 + - uid: 9513 + components: + - type: Transform + pos: 29.5,31.5 + parent: 2 + - uid: 9514 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,12.5 + parent: 2 + - uid: 9515 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,16.5 + parent: 2 + - uid: 9516 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,7.5 + parent: 2 + - uid: 9517 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,-52.5 + parent: 2 +- proto: DisposalJunctionFlipped + entities: + - uid: 8987 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,8.5 + parent: 2 + - uid: 9518 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -37.5,-8.5 + parent: 2 + - uid: 9519 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -33.5,6.5 + parent: 2 + - uid: 9520 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -38.5,6.5 + parent: 2 + - uid: 9521 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,-31.5 + parent: 2 + - uid: 9522 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,-22.5 + parent: 2 + - uid: 9523 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,-27.5 + parent: 2 + - uid: 9524 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,-43.5 + parent: 2 + - uid: 9525 + components: + - type: Transform + pos: -42.5,-39.5 + parent: 2 + - uid: 9526 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 13.5,-24.5 + parent: 2 + - uid: 9527 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,-24.5 + parent: 2 + - uid: 9528 + components: + - type: Transform + pos: 0.5,3.5 + parent: 2 + - uid: 9529 + components: + - type: Transform + pos: 0.5,21.5 + parent: 2 + - uid: 9530 + components: + - type: Transform + pos: -0.5,52.5 + parent: 2 + - uid: 9531 + components: + - type: Transform + pos: 29.5,38.5 + parent: 2 + - uid: 9532 + components: + - type: Transform + pos: 29.5,29.5 + parent: 2 + - uid: 9533 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,18.5 + parent: 2 + - uid: 9534 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 23.5,26.5 + parent: 2 + - uid: 9535 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,-45.5 + parent: 2 + - uid: 9536 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,-40.5 + parent: 2 +- proto: DisposalPipe + entities: + - uid: 276 + components: + - type: Transform + pos: 8.5,10.5 + parent: 2 + - uid: 9537 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,-37.5 + parent: 2 + - uid: 9538 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,-40.5 + parent: 2 + - uid: 9539 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,-43.5 + parent: 2 + - uid: 9540 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,-46.5 + parent: 2 + - uid: 9541 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,-49.5 + parent: 2 + - uid: 9542 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,-33.5 + parent: 2 + - uid: 9543 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,62.5 + parent: 2 + - uid: 9544 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,63.5 + parent: 2 + - uid: 9545 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,64.5 + parent: 2 + - uid: 9546 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,65.5 + parent: 2 + - uid: 9547 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,66.5 + parent: 2 + - uid: 9548 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,67.5 + parent: 2 + - uid: 9549 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,68.5 + parent: 2 + - uid: 9550 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,62.5 + parent: 2 + - uid: 9551 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,63.5 + parent: 2 + - uid: 9552 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,64.5 + parent: 2 + - uid: 9553 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,65.5 + parent: 2 + - uid: 9554 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,66.5 + parent: 2 + - uid: 9555 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,67.5 + parent: 2 + - uid: 9556 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,68.5 + parent: 2 + - uid: 9557 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 48.5,-31.5 + parent: 2 + - uid: 9558 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 49.5,-31.5 + parent: 2 + - uid: 9559 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,10.5 + parent: 2 + - uid: 9560 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,10.5 + parent: 2 + - uid: 9561 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -28.5,10.5 + parent: 2 + - uid: 9562 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,10.5 + parent: 2 + - uid: 9563 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.5,10.5 + parent: 2 + - uid: 9564 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,10.5 + parent: 2 + - uid: 9565 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,10.5 + parent: 2 + - uid: 9566 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -33.5,10.5 + parent: 2 + - uid: 9567 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,6.5 + parent: 2 + - uid: 9568 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -35.5,9.5 + parent: 2 + - uid: 9569 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -35.5,8.5 + parent: 2 + - uid: 9570 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -35.5,7.5 + parent: 2 + - uid: 9571 + components: + - type: Transform + pos: -30.5,5.5 + parent: 2 + - uid: 9572 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -37.5,6.5 + parent: 2 + - uid: 9573 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -39.5,6.5 + parent: 2 + - uid: 9574 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -40.5,7.5 + parent: 2 + - uid: 9575 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -40.5,8.5 + parent: 2 + - uid: 9576 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -40.5,9.5 + parent: 2 + - uid: 9577 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -40.5,10.5 + parent: 2 + - uid: 9578 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -40.5,11.5 + parent: 2 + - uid: 9579 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -40.5,12.5 + parent: 2 + - uid: 9580 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -40.5,13.5 + parent: 2 + - uid: 9581 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -41.5,14.5 + parent: 2 + - uid: 9582 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -42.5,14.5 + parent: 2 + - uid: 9583 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -43.5,14.5 + parent: 2 + - uid: 9584 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -44.5,15.5 + parent: 2 + - uid: 9585 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,6.5 + parent: 2 + - uid: 9586 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,6.5 + parent: 2 + - uid: 9587 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,6.5 + parent: 2 + - uid: 9588 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -37.5,0.5 + parent: 2 + - uid: 9589 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,1.5 + parent: 2 + - uid: 9590 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,2.5 + parent: 2 + - uid: 9591 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,3.5 + parent: 2 + - uid: 9592 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,4.5 + parent: 2 + - uid: 9593 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,5.5 + parent: 2 + - uid: 9594 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,-6.5 + parent: 2 + - uid: 9595 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,-5.5 + parent: 2 + - uid: 9596 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,-4.5 + parent: 2 + - uid: 9597 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,-3.5 + parent: 2 + - uid: 9598 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,-2.5 + parent: 2 + - uid: 9599 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,-1.5 + parent: 2 + - uid: 9600 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,-0.5 + parent: 2 + - uid: 9601 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,-2.5 + parent: 2 + - uid: 9602 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -25.5,-2.5 + parent: 2 + - uid: 9603 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,-2.5 + parent: 2 + - uid: 9604 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,-3.5 + parent: 2 + - uid: 9605 + components: + - type: Transform + pos: -29.5,-2.5 + parent: 2 + - uid: 9606 + components: + - type: Transform + pos: -29.5,-1.5 + parent: 2 + - uid: 9607 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.5,-0.5 + parent: 2 + - uid: 9608 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,-0.5 + parent: 2 + - uid: 9609 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,-0.5 + parent: 2 + - uid: 9610 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,0.5 + parent: 2 + - uid: 9611 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,1.5 + parent: 2 + - uid: 9612 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,2.5 + parent: 2 + - uid: 9613 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,3.5 + parent: 2 + - uid: 9614 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,4.5 + parent: 2 + - uid: 9615 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,5.5 + parent: 2 + - uid: 9616 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,-28.5 + parent: 2 + - uid: 9617 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,-27.5 + parent: 2 + - uid: 9618 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,-26.5 + parent: 2 + - uid: 9619 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,-25.5 + parent: 2 + - uid: 9620 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,-24.5 + parent: 2 + - uid: 9621 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,-23.5 + parent: 2 + - uid: 9622 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,-22.5 + parent: 2 + - uid: 9623 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,-22.5 + parent: 2 + - uid: 9624 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,-22.5 + parent: 2 + - uid: 9625 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,-22.5 + parent: 2 + - uid: 9626 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,-22.5 + parent: 2 + - uid: 9627 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,-22.5 + parent: 2 + - uid: 9628 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,-22.5 + parent: 2 + - uid: 9629 + components: + - type: Transform + pos: -37.5,-21.5 + parent: 2 + - uid: 9630 + components: + - type: Transform + pos: -37.5,-20.5 + parent: 2 + - uid: 9631 + components: + - type: Transform + pos: -37.5,-19.5 + parent: 2 + - uid: 9632 + components: + - type: Transform + pos: -37.5,-18.5 + parent: 2 + - uid: 9633 + components: + - type: Transform + pos: -37.5,-17.5 + parent: 2 + - uid: 9634 + components: + - type: Transform + pos: -37.5,-16.5 + parent: 2 + - uid: 9635 + components: + - type: Transform + pos: -37.5,-15.5 + parent: 2 + - uid: 9636 + components: + - type: Transform + pos: -37.5,-14.5 + parent: 2 + - uid: 9637 + components: + - type: Transform + pos: -37.5,-13.5 + parent: 2 + - uid: 9638 + components: + - type: Transform + pos: -37.5,-12.5 + parent: 2 + - uid: 9639 + components: + - type: Transform + pos: -37.5,-11.5 + parent: 2 + - uid: 9640 + components: + - type: Transform + pos: -37.5,-10.5 + parent: 2 + - uid: 9641 + components: + - type: Transform + pos: -37.5,-9.5 + parent: 2 + - uid: 9642 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,-18.5 + parent: 2 + - uid: 9643 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,-18.5 + parent: 2 + - uid: 9644 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,-18.5 + parent: 2 + - uid: 9645 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,-19.5 + parent: 2 + - uid: 9646 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,-20.5 + parent: 2 + - uid: 9647 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,-21.5 + parent: 2 + - uid: 9648 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,-22.5 + parent: 2 + - uid: 9649 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,-22.5 + parent: 2 + - uid: 9650 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,-22.5 + parent: 2 + - uid: 9651 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,-22.5 + parent: 2 + - uid: 9652 + components: + - type: Transform + pos: -21.5,-32.5 + parent: 2 + - uid: 9653 + components: + - type: Transform + pos: -21.5,-31.5 + parent: 2 + - uid: 9654 + components: + - type: Transform + pos: -21.5,-30.5 + parent: 2 + - uid: 9655 + components: + - type: Transform + pos: -21.5,-29.5 + parent: 2 + - uid: 9656 + components: + - type: Transform + pos: -21.5,-28.5 + parent: 2 + - uid: 9657 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,-27.5 + parent: 2 + - uid: 9658 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,-27.5 + parent: 2 + - uid: 9659 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,-27.5 + parent: 2 + - uid: 9660 + components: + - type: Transform + pos: -25.5,-28.5 + parent: 2 + - uid: 9661 + components: + - type: Transform + pos: -25.5,-29.5 + parent: 2 + - uid: 9662 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,-30.5 + parent: 2 + - uid: 9663 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,-30.5 + parent: 2 + - uid: 9664 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,-20.5 + parent: 2 + - uid: 9665 + components: + - type: Transform + pos: -16.5,-21.5 + parent: 2 + - uid: 9666 + components: + - type: Transform + pos: -16.5,-22.5 + parent: 2 + - uid: 9667 + components: + - type: Transform + pos: -16.5,-23.5 + parent: 2 + - uid: 9668 + components: + - type: Transform + pos: -16.5,-24.5 + parent: 2 + - uid: 9669 + components: + - type: Transform + pos: -16.5,-25.5 + parent: 2 + - uid: 9670 + components: + - type: Transform + pos: -16.5,-26.5 + parent: 2 + - uid: 9671 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -17.5,-27.5 + parent: 2 + - uid: 9672 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -18.5,-27.5 + parent: 2 + - uid: 9673 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.5,-27.5 + parent: 2 + - uid: 9674 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,-27.5 + parent: 2 + - uid: 9675 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,-21.5 + parent: 2 + - uid: 9676 + components: + - type: Transform + pos: -10.5,-22.5 + parent: 2 + - uid: 9677 + components: + - type: Transform + pos: -10.5,-23.5 + parent: 2 + - uid: 9678 + components: + - type: Transform + pos: -10.5,-24.5 + parent: 2 + - uid: 9679 + components: + - type: Transform + pos: -10.5,-25.5 + parent: 2 + - uid: 9680 + components: + - type: Transform + pos: -10.5,-26.5 + parent: 2 + - uid: 9681 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,-27.5 + parent: 2 + - uid: 9682 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,-27.5 + parent: 2 + - uid: 9683 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,-27.5 + parent: 2 + - uid: 9684 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,-27.5 + parent: 2 + - uid: 9685 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,-27.5 + parent: 2 + - uid: 9686 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -38.5,-52.5 + parent: 2 + - uid: 9687 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -37.5,-52.5 + parent: 2 + - uid: 9688 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,-52.5 + parent: 2 + - uid: 9689 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,-52.5 + parent: 2 + - uid: 9690 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,-52.5 + parent: 2 + - uid: 9691 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,-51.5 + parent: 2 + - uid: 9692 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,-50.5 + parent: 2 + - uid: 9693 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,-49.5 + parent: 2 + - uid: 9694 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,-48.5 + parent: 2 + - uid: 9695 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,-47.5 + parent: 2 + - uid: 9696 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,-46.5 + parent: 2 + - uid: 9697 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,-45.5 + parent: 2 + - uid: 9698 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,-44.5 + parent: 2 + - uid: 9699 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,-41.5 + parent: 2 + - uid: 9700 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,-40.5 + parent: 2 + - uid: 9701 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,-39.5 + parent: 2 + - uid: 9702 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,-38.5 + parent: 2 + - uid: 9703 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,-37.5 + parent: 2 + - uid: 9704 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,-36.5 + parent: 2 + - uid: 9705 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,-35.5 + parent: 2 + - uid: 9706 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,-34.5 + parent: 2 + - uid: 9707 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,-33.5 + parent: 2 + - uid: 9708 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,-32.5 + parent: 2 + - uid: 9709 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,-31.5 + parent: 2 + - uid: 9710 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,-31.5 + parent: 2 + - uid: 9711 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,-31.5 + parent: 2 + - uid: 9712 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -29.5,-31.5 + parent: 2 + - uid: 9713 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -46.5,-29.5 + parent: 2 + - uid: 9714 + components: + - type: Transform + pos: -45.5,-30.5 + parent: 2 + - uid: 9715 + components: + - type: Transform + pos: -45.5,-31.5 + parent: 2 + - uid: 9716 + components: + - type: Transform + pos: -45.5,-32.5 + parent: 2 + - uid: 9717 + components: + - type: Transform + pos: -45.5,-33.5 + parent: 2 + - uid: 9718 + components: + - type: Transform + pos: -45.5,-34.5 + parent: 2 + - uid: 9719 + components: + - type: Transform + pos: -45.5,-35.5 + parent: 2 + - uid: 9720 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -44.5,-36.5 + parent: 2 + - uid: 9721 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -43.5,-36.5 + parent: 2 + - uid: 9722 + components: + - type: Transform + pos: -42.5,-37.5 + parent: 2 + - uid: 9723 + components: + - type: Transform + pos: -42.5,-38.5 + parent: 2 + - uid: 9724 + components: + - type: Transform + pos: -42.5,-40.5 + parent: 2 + - uid: 9725 + components: + - type: Transform + pos: -42.5,-41.5 + parent: 2 + - uid: 9726 + components: + - type: Transform + pos: -42.5,-42.5 + parent: 2 + - uid: 9727 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -41.5,-43.5 + parent: 2 + - uid: 9728 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -40.5,-43.5 + parent: 2 + - uid: 9729 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -39.5,-43.5 + parent: 2 + - uid: 9730 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -38.5,-43.5 + parent: 2 + - uid: 9731 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -37.5,-43.5 + parent: 2 + - uid: 9732 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,-43.5 + parent: 2 + - uid: 9733 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,-43.5 + parent: 2 + - uid: 9734 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,-43.5 + parent: 2 + - uid: 9735 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.5,-31.5 + parent: 2 + - uid: 9736 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.5,-31.5 + parent: 2 + - uid: 9737 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,-30.5 + parent: 2 + - uid: 9738 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,-29.5 + parent: 2 + - uid: 9739 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,-28.5 + parent: 2 + - uid: 9740 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,-27.5 + parent: 2 + - uid: 9741 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,-26.5 + parent: 2 + - uid: 9742 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,-25.5 + parent: 2 + - uid: 9743 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.5,-24.5 + parent: 2 + - uid: 9744 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.5,-24.5 + parent: 2 + - uid: 9745 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,-24.5 + parent: 2 + - uid: 9746 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,-24.5 + parent: 2 + - uid: 9747 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,-24.5 + parent: 2 + - uid: 9748 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,-24.5 + parent: 2 + - uid: 9749 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,-24.5 + parent: 2 + - uid: 9750 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,-24.5 + parent: 2 + - uid: 9751 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,-24.5 + parent: 2 + - uid: 9752 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-24.5 + parent: 2 + - uid: 9753 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-24.5 + parent: 2 + - uid: 9754 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-24.5 + parent: 2 + - uid: 9755 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-24.5 + parent: 2 + - uid: 9756 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-25.5 + parent: 2 + - uid: 9757 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-26.5 + parent: 2 + - uid: 9758 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-27.5 + parent: 2 + - uid: 9759 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-27.5 + parent: 2 + - uid: 9760 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-27.5 + parent: 2 + - uid: 9761 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,-27.5 + parent: 2 + - uid: 9762 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,-27.5 + parent: 2 + - uid: 9763 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,-27.5 + parent: 2 + - uid: 9764 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,-27.5 + parent: 2 + - uid: 9765 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-27.5 + parent: 2 + - uid: 9766 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,-27.5 + parent: 2 + - uid: 9767 + components: + - type: Transform + pos: 15.5,-23.5 + parent: 2 + - uid: 9768 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,-24.5 + parent: 2 + - uid: 9769 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 22.5,-33.5 + parent: 2 + - uid: 9770 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 22.5,-34.5 + parent: 2 + - uid: 9771 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 22.5,-35.5 + parent: 2 + - uid: 9772 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,-36.5 + parent: 2 + - uid: 9773 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 20.5,-36.5 + parent: 2 + - uid: 9774 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 23.5,-19.5 + parent: 2 + - uid: 9775 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,-19.5 + parent: 2 + - uid: 9776 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,-20.5 + parent: 2 + - uid: 9777 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,-21.5 + parent: 2 + - uid: 9778 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,-22.5 + parent: 2 + - uid: 9779 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,-23.5 + parent: 2 + - uid: 9780 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,-24.5 + parent: 2 + - uid: 9781 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 23.5,-24.5 + parent: 2 + - uid: 9782 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,-24.5 + parent: 2 + - uid: 9783 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,-24.5 + parent: 2 + - uid: 9784 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 20.5,-24.5 + parent: 2 + - uid: 9785 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,-24.5 + parent: 2 + - uid: 9786 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,-24.5 + parent: 2 + - uid: 9787 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 17.5,-24.5 + parent: 2 + - uid: 9788 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 16.5,-24.5 + parent: 2 + - uid: 9789 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 29.5,-30.5 + parent: 2 + - uid: 9790 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,-30.5 + parent: 2 + - uid: 9791 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,-30.5 + parent: 2 + - uid: 9792 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,-29.5 + parent: 2 + - uid: 9793 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,-28.5 + parent: 2 + - uid: 9794 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,-27.5 + parent: 2 + - uid: 9795 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,-26.5 + parent: 2 + - uid: 9796 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,-25.5 + parent: 2 + - uid: 9797 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,-21.5 + parent: 2 + - uid: 9798 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,-21.5 + parent: 2 + - uid: 9799 + components: + - type: Transform + pos: 31.5,-22.5 + parent: 2 + - uid: 9800 + components: + - type: Transform + pos: 31.5,-23.5 + parent: 2 + - uid: 9801 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,-24.5 + parent: 2 + - uid: 9802 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,-24.5 + parent: 2 + - uid: 9803 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 29.5,-24.5 + parent: 2 + - uid: 9804 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,-24.5 + parent: 2 + - uid: 9805 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,-24.5 + parent: 2 + - uid: 9806 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,-24.5 + parent: 2 + - uid: 9807 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-24.5 + parent: 2 + - uid: 9808 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-24.5 + parent: 2 + - uid: 9809 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,-24.5 + parent: 2 + - uid: 9810 + components: + - type: Transform + pos: 39.5,-21.5 + parent: 2 + - uid: 9811 + components: + - type: Transform + pos: 39.5,-22.5 + parent: 2 + - uid: 9812 + components: + - type: Transform + pos: 39.5,-23.5 + parent: 2 + - uid: 9813 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,-24.5 + parent: 2 + - uid: 9814 + components: + - type: Transform + pos: 40.5,-25.5 + parent: 2 + - uid: 9815 + components: + - type: Transform + pos: 40.5,-26.5 + parent: 2 + - uid: 9816 + components: + - type: Transform + pos: 40.5,-27.5 + parent: 2 + - uid: 9817 + components: + - type: Transform + pos: 40.5,-28.5 + parent: 2 + - uid: 9818 + components: + - type: Transform + pos: 40.5,-29.5 + parent: 2 + - uid: 9819 + components: + - type: Transform + pos: 40.5,-30.5 + parent: 2 + - uid: 9820 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 41.5,-32.5 + parent: 2 + - uid: 9821 + components: + - type: Transform + pos: 40.5,-31.5 + parent: 2 + - uid: 9822 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 36.5,-12.5 + parent: 2 + - uid: 9823 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,-13.5 + parent: 2 + - uid: 9824 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,-14.5 + parent: 2 + - uid: 9825 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,-15.5 + parent: 2 + - uid: 9826 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,-16.5 + parent: 2 + - uid: 9827 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,-17.5 + parent: 2 + - uid: 9828 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,-18.5 + parent: 2 + - uid: 9829 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,-19.5 + parent: 2 + - uid: 9830 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,-20.5 + parent: 2 + - uid: 9831 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,-21.5 + parent: 2 + - uid: 9832 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,-22.5 + parent: 2 + - uid: 9833 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,-23.5 + parent: 2 + - uid: 9834 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,-8.5 + parent: 2 + - uid: 9835 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,-9.5 + parent: 2 + - uid: 9836 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-9.5 + parent: 2 + - uid: 9837 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,-9.5 + parent: 2 + - uid: 9838 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,-9.5 + parent: 2 + - uid: 9839 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,-9.5 + parent: 2 + - uid: 9840 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,-9.5 + parent: 2 + - uid: 9841 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,-9.5 + parent: 2 + - uid: 9842 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,-9.5 + parent: 2 + - uid: 9843 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,-9.5 + parent: 2 + - uid: 9844 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,-9.5 + parent: 2 + - uid: 9845 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,-9.5 + parent: 2 + - uid: 9846 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,-9.5 + parent: 2 + - uid: 9847 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -19.5,-9.5 + parent: 2 + - uid: 9848 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,-9.5 + parent: 2 + - uid: 9849 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,-9.5 + parent: 2 + - uid: 9850 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,-9.5 + parent: 2 + - uid: 9851 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,-9.5 + parent: 2 + - uid: 9852 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -25.5,-8.5 + parent: 2 + - uid: 9853 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,-8.5 + parent: 2 + - uid: 9854 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,-8.5 + parent: 2 + - uid: 9855 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -28.5,-8.5 + parent: 2 + - uid: 9856 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,-8.5 + parent: 2 + - uid: 9857 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.5,-8.5 + parent: 2 + - uid: 9858 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,-8.5 + parent: 2 + - uid: 9859 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,-8.5 + parent: 2 + - uid: 9860 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -33.5,-8.5 + parent: 2 + - uid: 9861 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,-8.5 + parent: 2 + - uid: 9862 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,-8.5 + parent: 2 + - uid: 9863 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,-8.5 + parent: 2 + - uid: 9864 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,-7.5 + parent: 2 + - uid: 9865 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,-7.5 + parent: 2 + - uid: 9866 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,-7.5 + parent: 2 + - uid: 9867 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-8.5 + parent: 2 + - uid: 9868 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-8.5 + parent: 2 + - uid: 9869 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-8.5 + parent: 2 + - uid: 9870 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-8.5 + parent: 2 + - uid: 9871 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-8.5 + parent: 2 + - uid: 9872 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,-8.5 + parent: 2 + - uid: 9873 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,-8.5 + parent: 2 + - uid: 9874 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,-7.5 + parent: 2 + - uid: 9875 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-1.5 + parent: 2 + - uid: 9876 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-1.5 + parent: 2 + - uid: 9877 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-1.5 + parent: 2 + - uid: 9878 + components: + - type: Transform + pos: 0.5,-2.5 + parent: 2 + - uid: 9879 + components: + - type: Transform + pos: 0.5,-3.5 + parent: 2 + - uid: 9880 + components: + - type: Transform + pos: 0.5,-4.5 + parent: 2 + - uid: 9881 + components: + - type: Transform + pos: 0.5,-5.5 + parent: 2 + - uid: 9882 + components: + - type: Transform + pos: 0.5,-6.5 + parent: 2 + - uid: 9883 + components: + - type: Transform + pos: 0.5,-7.5 + parent: 2 + - uid: 9884 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,3.5 + parent: 2 + - uid: 9885 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,3.5 + parent: 2 + - uid: 9886 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,3.5 + parent: 2 + - uid: 9887 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,3.5 + parent: 2 + - uid: 9888 + components: + - type: Transform + pos: 0.5,2.5 + parent: 2 + - uid: 9889 + components: + - type: Transform + pos: 0.5,1.5 + parent: 2 + - uid: 9890 + components: + - type: Transform + pos: 0.5,0.5 + parent: 2 + - uid: 9891 + components: + - type: Transform + pos: 0.5,-0.5 + parent: 2 + - uid: 9892 + components: + - type: Transform + pos: 9.5,7.5 + parent: 2 + - uid: 9893 + components: + - type: Transform + pos: 9.5,6.5 + parent: 2 + - uid: 9894 + components: + - type: Transform + pos: 9.5,5.5 + parent: 2 + - uid: 9895 + components: + - type: Transform + pos: 10.5,3.5 + parent: 2 + - uid: 9896 + components: + - type: Transform + pos: 10.5,2.5 + parent: 2 + - uid: 9897 + components: + - type: Transform + pos: 10.5,1.5 + parent: 2 + - uid: 9898 + components: + - type: Transform + pos: 10.5,0.5 + parent: 2 + - uid: 9899 + components: + - type: Transform + pos: 10.5,-0.5 + parent: 2 + - uid: 9900 + components: + - type: Transform + pos: 10.5,-1.5 + parent: 2 + - uid: 9901 + components: + - type: Transform + pos: 10.5,-2.5 + parent: 2 + - uid: 9902 + components: + - type: Transform + pos: 10.5,-3.5 + parent: 2 + - uid: 9903 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-4.5 + parent: 2 + - uid: 9904 + components: + - type: Transform + pos: 8.5,-5.5 + parent: 2 + - uid: 9905 + components: + - type: Transform + pos: 8.5,-6.5 + parent: 2 + - uid: 9906 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,16.5 + parent: 2 + - uid: 9907 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,15.5 + parent: 2 + - uid: 9908 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,14.5 + parent: 2 + - uid: 9909 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,13.5 + parent: 2 + - uid: 9910 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,12.5 + parent: 2 + - uid: 9911 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,11.5 + parent: 2 + - uid: 9912 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,10.5 + parent: 2 + - uid: 9913 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,9.5 + parent: 2 + - uid: 9914 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,8.5 + parent: 2 + - uid: 9915 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,8.5 + parent: 2 + - uid: 9917 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,17.5 + parent: 2 + - uid: 9918 + components: + - type: Transform + pos: -2.5,15.5 + parent: 2 + - uid: 9919 + components: + - type: Transform + pos: -2.5,14.5 + parent: 2 + - uid: 9920 + components: + - type: Transform + pos: -2.5,13.5 + parent: 2 + - uid: 9921 + components: + - type: Transform + pos: -2.5,12.5 + parent: 2 + - uid: 9922 + components: + - type: Transform + pos: -2.5,11.5 + parent: 2 + - uid: 9923 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,10.5 + parent: 2 + - uid: 9924 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,10.5 + parent: 2 + - uid: 9925 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,9.5 + parent: 2 + - uid: 9926 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,8.5 + parent: 2 + - uid: 9927 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,7.5 + parent: 2 + - uid: 9928 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,6.5 + parent: 2 + - uid: 9929 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,5.5 + parent: 2 + - uid: 9930 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,4.5 + parent: 2 + - uid: 9931 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,19.5 + parent: 2 + - uid: 9932 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,19.5 + parent: 2 + - uid: 9933 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,18.5 + parent: 2 + - uid: 9934 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,17.5 + parent: 2 + - uid: 9935 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,16.5 + parent: 2 + - uid: 9936 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,15.5 + parent: 2 + - uid: 9937 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,14.5 + parent: 2 + - uid: 9938 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,13.5 + parent: 2 + - uid: 9939 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,12.5 + parent: 2 + - uid: 9940 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,11.5 + parent: 2 + - uid: 9941 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,26.5 + parent: 2 + - uid: 9942 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,26.5 + parent: 2 + - uid: 9943 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,26.5 + parent: 2 + - uid: 9944 + components: + - type: Transform + pos: 0.5,25.5 + parent: 2 + - uid: 9945 + components: + - type: Transform + pos: 0.5,24.5 + parent: 2 + - uid: 9946 + components: + - type: Transform + pos: 0.5,23.5 + parent: 2 + - uid: 9947 + components: + - type: Transform + pos: 0.5,22.5 + parent: 2 + - uid: 9948 + components: + - type: Transform + pos: 0.5,20.5 + parent: 2 + - uid: 9949 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,28.5 + parent: 2 + - uid: 9950 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,28.5 + parent: 2 + - uid: 9951 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,28.5 + parent: 2 + - uid: 9952 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,28.5 + parent: 2 + - uid: 9953 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,28.5 + parent: 2 + - uid: 9954 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,28.5 + parent: 2 + - uid: 9955 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,28.5 + parent: 2 + - uid: 9956 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,28.5 + parent: 2 + - uid: 9957 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,28.5 + parent: 2 + - uid: 9958 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,27.5 + parent: 2 + - uid: 9959 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,26.5 + parent: 2 + - uid: 9960 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,25.5 + parent: 2 + - uid: 9961 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,24.5 + parent: 2 + - uid: 9962 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,23.5 + parent: 2 + - uid: 9963 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,22.5 + parent: 2 + - uid: 9964 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,21.5 + parent: 2 + - uid: 9965 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,20.5 + parent: 2 + - uid: 9966 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,19.5 + parent: 2 + - uid: 9967 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,19.5 + parent: 2 + - uid: 9968 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,19.5 + parent: 2 + - uid: 9969 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,19.5 + parent: 2 + - uid: 9970 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,19.5 + parent: 2 + - uid: 9971 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,19.5 + parent: 2 + - uid: 9972 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,19.5 + parent: 2 + - uid: 9973 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,19.5 + parent: 2 + - uid: 9974 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,19.5 + parent: 2 + - uid: 9975 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,19.5 + parent: 2 + - uid: 9976 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,19.5 + parent: 2 + - uid: 9977 + components: + - type: Transform + pos: -12.5,30.5 + parent: 2 + - uid: 9978 + components: + - type: Transform + pos: -12.5,29.5 + parent: 2 + - uid: 9979 + components: + - type: Transform + pos: -26.5,33.5 + parent: 2 + - uid: 9980 + components: + - type: Transform + pos: -26.5,34.5 + parent: 2 + - uid: 9981 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,35.5 + parent: 2 + - uid: 9982 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,38.5 + parent: 2 + - uid: 9983 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,38.5 + parent: 2 + - uid: 9984 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,37.5 + parent: 2 + - uid: 9985 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,36.5 + parent: 2 + - uid: 9986 + components: + - type: Transform + pos: -23.5,34.5 + parent: 2 + - uid: 9987 + components: + - type: Transform + pos: -23.5,33.5 + parent: 2 + - uid: 9988 + components: + - type: Transform + pos: -23.5,32.5 + parent: 2 + - uid: 9989 + components: + - type: Transform + pos: -23.5,31.5 + parent: 2 + - uid: 9990 + components: + - type: Transform + pos: -23.5,30.5 + parent: 2 + - uid: 9991 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,29.5 + parent: 2 + - uid: 9992 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,29.5 + parent: 2 + - uid: 9993 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,29.5 + parent: 2 + - uid: 9994 + components: + - type: Transform + pos: -27.5,28.5 + parent: 2 + - uid: 9995 + components: + - type: Transform + pos: -27.5,27.5 + parent: 2 + - uid: 9996 + components: + - type: Transform + pos: -27.5,26.5 + parent: 2 + - uid: 9997 + components: + - type: Transform + pos: -27.5,25.5 + parent: 2 + - uid: 9998 + components: + - type: Transform + pos: -27.5,24.5 + parent: 2 + - uid: 9999 + components: + - type: Transform + pos: -27.5,23.5 + parent: 2 + - uid: 10000 + components: + - type: Transform + pos: -27.5,22.5 + parent: 2 + - uid: 10001 + components: + - type: Transform + pos: -27.5,21.5 + parent: 2 + - uid: 10002 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,17.5 + parent: 2 + - uid: 10003 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,18.5 + parent: 2 + - uid: 10004 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,19.5 + parent: 2 + - uid: 10005 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,20.5 + parent: 2 + - uid: 10006 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,20.5 + parent: 2 + - uid: 10007 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,16.5 + parent: 2 + - uid: 10008 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,16.5 + parent: 2 + - uid: 10009 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,16.5 + parent: 2 + - uid: 10010 + components: + - type: Transform + pos: -20.5,15.5 + parent: 2 + - uid: 10011 + components: + - type: Transform + pos: -20.5,14.5 + parent: 2 + - uid: 10012 + components: + - type: Transform + pos: -20.5,13.5 + parent: 2 + - uid: 10013 + components: + - type: Transform + pos: -20.5,12.5 + parent: 2 + - uid: 10014 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,11.5 + parent: 2 + - uid: 10015 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,11.5 + parent: 2 + - uid: 10016 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,11.5 + parent: 2 + - uid: 10017 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,11.5 + parent: 2 + - uid: 10018 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,11.5 + parent: 2 + - uid: 10019 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,11.5 + parent: 2 + - uid: 10020 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,11.5 + parent: 2 + - uid: 10021 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,11.5 + parent: 2 + - uid: 10022 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -29.5,11.5 + parent: 2 + - uid: 10023 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,11.5 + parent: 2 + - uid: 10024 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,11.5 + parent: 2 + - uid: 10025 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,11.5 + parent: 2 + - uid: 10026 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,11.5 + parent: 2 + - uid: 10027 + components: + - type: Transform + pos: -2.5,38.5 + parent: 2 + - uid: 10028 + components: + - type: Transform + pos: -2.5,37.5 + parent: 2 + - uid: 10029 + components: + - type: Transform + pos: -2.5,36.5 + parent: 2 + - uid: 10030 + components: + - type: Transform + pos: -2.5,35.5 + parent: 2 + - uid: 10031 + components: + - type: Transform + pos: -2.5,34.5 + parent: 2 + - uid: 10032 + components: + - type: Transform + pos: -2.5,33.5 + parent: 2 + - uid: 10033 + components: + - type: Transform + pos: -2.5,32.5 + parent: 2 + - uid: 10034 + components: + - type: Transform + pos: -2.5,31.5 + parent: 2 + - uid: 10035 + components: + - type: Transform + pos: -2.5,30.5 + parent: 2 + - uid: 10036 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,43.5 + parent: 2 + - uid: 10037 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,44.5 + parent: 2 + - uid: 10038 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,45.5 + parent: 2 + - uid: 10039 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,46.5 + parent: 2 + - uid: 10040 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,47.5 + parent: 2 + - uid: 10041 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,46.5 + parent: 2 + - uid: 10042 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,47.5 + parent: 2 + - uid: 10043 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,47.5 + parent: 2 + - uid: 10044 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,47.5 + parent: 2 + - uid: 10045 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,47.5 + parent: 2 + - uid: 10046 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,42.5 + parent: 2 + - uid: 10047 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,42.5 + parent: 2 + - uid: 10048 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,42.5 + parent: 2 + - uid: 10049 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,42.5 + parent: 2 + - uid: 10050 + components: + - type: Transform + pos: -4.5,41.5 + parent: 2 + - uid: 10051 + components: + - type: Transform + pos: -4.5,40.5 + parent: 2 + - uid: 10052 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,39.5 + parent: 2 + - uid: 10053 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,53.5 + parent: 2 + - uid: 10054 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,52.5 + parent: 2 + - uid: 10055 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,51.5 + parent: 2 + - uid: 10056 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,50.5 + parent: 2 + - uid: 10057 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,50.5 + parent: 2 + - uid: 10058 + components: + - type: Transform + pos: -10.5,49.5 + parent: 2 + - uid: 10059 + components: + - type: Transform + pos: -10.5,48.5 + parent: 2 + - uid: 10060 + components: + - type: Transform + pos: -10.5,47.5 + parent: 2 + - uid: 10061 + components: + - type: Transform + pos: -10.5,46.5 + parent: 2 + - uid: 10062 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,45.5 + parent: 2 + - uid: 10063 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,45.5 + parent: 2 + - uid: 10064 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,45.5 + parent: 2 + - uid: 10065 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,44.5 + parent: 2 + - uid: 10066 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,43.5 + parent: 2 + - uid: 10067 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,42.5 + parent: 2 + - uid: 10068 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,59.5 + parent: 2 + - uid: 10069 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,58.5 + parent: 2 + - uid: 10070 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,57.5 + parent: 2 + - uid: 10071 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,56.5 + parent: 2 + - uid: 10072 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,55.5 + parent: 2 + - uid: 10073 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,54.5 + parent: 2 + - uid: 10074 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,53.5 + parent: 2 + - uid: 10075 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,51.5 + parent: 2 + - uid: 10076 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,50.5 + parent: 2 + - uid: 10077 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,49.5 + parent: 2 + - uid: 10078 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,48.5 + parent: 2 + - uid: 10079 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,55.5 + parent: 2 + - uid: 10080 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,55.5 + parent: 2 + - uid: 10081 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,55.5 + parent: 2 + - uid: 10082 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,53.5 + parent: 2 + - uid: 10083 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,54.5 + parent: 2 + - uid: 10084 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,52.5 + parent: 2 + - uid: 10085 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,52.5 + parent: 2 + - uid: 10086 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,52.5 + parent: 2 + - uid: 10087 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,52.5 + parent: 2 + - uid: 10088 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,39.5 + parent: 2 + - uid: 10089 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,39.5 + parent: 2 + - uid: 10090 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,38.5 + parent: 2 + - uid: 10091 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,37.5 + parent: 2 + - uid: 10092 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,36.5 + parent: 2 + - uid: 10093 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,35.5 + parent: 2 + - uid: 10094 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,34.5 + parent: 2 + - uid: 10095 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,33.5 + parent: 2 + - uid: 10096 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,32.5 + parent: 2 + - uid: 10097 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,31.5 + parent: 2 + - uid: 10098 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,31.5 + parent: 2 + - uid: 10099 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,31.5 + parent: 2 + - uid: 10100 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,31.5 + parent: 2 + - uid: 10101 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.5,31.5 + parent: 2 + - uid: 10102 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 26.5,31.5 + parent: 2 + - uid: 10103 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,31.5 + parent: 2 + - uid: 10104 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 28.5,31.5 + parent: 2 + - uid: 10105 + components: + - type: Transform + pos: 29.5,37.5 + parent: 2 + - uid: 10106 + components: + - type: Transform + pos: 29.5,36.5 + parent: 2 + - uid: 10107 + components: + - type: Transform + pos: 29.5,35.5 + parent: 2 + - uid: 10108 + components: + - type: Transform + pos: 29.5,34.5 + parent: 2 + - uid: 10109 + components: + - type: Transform + pos: 29.5,33.5 + parent: 2 + - uid: 10110 + components: + - type: Transform + pos: 29.5,32.5 + parent: 2 + - uid: 10111 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,38.5 + parent: 2 + - uid: 10112 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,38.5 + parent: 2 + - uid: 10113 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 40.5,38.5 + parent: 2 + - uid: 10114 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,38.5 + parent: 2 + - uid: 10115 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,38.5 + parent: 2 + - uid: 10116 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,38.5 + parent: 2 + - uid: 10117 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,38.5 + parent: 2 + - uid: 10118 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,38.5 + parent: 2 + - uid: 10119 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,38.5 + parent: 2 + - uid: 10120 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,38.5 + parent: 2 + - uid: 10121 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,38.5 + parent: 2 + - uid: 10122 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,38.5 + parent: 2 + - uid: 10123 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,38.5 + parent: 2 + - uid: 10124 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,29.5 + parent: 2 + - uid: 10125 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,29.5 + parent: 2 + - uid: 10126 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,29.5 + parent: 2 + - uid: 10127 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,29.5 + parent: 2 + - uid: 10128 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,29.5 + parent: 2 + - uid: 10129 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,29.5 + parent: 2 + - uid: 10130 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,29.5 + parent: 2 + - uid: 10131 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,29.5 + parent: 2 + - uid: 10132 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,29.5 + parent: 2 + - uid: 10133 + components: + - type: Transform + pos: 29.5,30.5 + parent: 2 + - uid: 10134 + components: + - type: Transform + pos: 29.5,28.5 + parent: 2 + - uid: 10135 + components: + - type: Transform + pos: 29.5,27.5 + parent: 2 + - uid: 10136 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,26.5 + parent: 2 + - uid: 10137 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,26.5 + parent: 2 + - uid: 10138 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,26.5 + parent: 2 + - uid: 10139 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,26.5 + parent: 2 + - uid: 10140 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,26.5 + parent: 2 + - uid: 10141 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 16.5,10.5 + parent: 2 + - uid: 10142 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,10.5 + parent: 2 + - uid: 10143 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 18.5,10.5 + parent: 2 + - uid: 10144 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,10.5 + parent: 2 + - uid: 10145 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,11.5 + parent: 2 + - uid: 10146 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,13.5 + parent: 2 + - uid: 10147 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,14.5 + parent: 2 + - uid: 10148 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,15.5 + parent: 2 + - uid: 10149 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,16.5 + parent: 2 + - uid: 10150 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,17.5 + parent: 2 + - uid: 10151 + components: + - type: Transform + pos: 22.5,19.5 + parent: 2 + - uid: 10152 + components: + - type: Transform + pos: 22.5,20.5 + parent: 2 + - uid: 10153 + components: + - type: Transform + pos: 22.5,21.5 + parent: 2 + - uid: 10154 + components: + - type: Transform + pos: 22.5,22.5 + parent: 2 + - uid: 10155 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 23.5,24.5 + parent: 2 + - uid: 10156 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 23.5,25.5 + parent: 2 + - uid: 10157 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,26.5 + parent: 2 + - uid: 10158 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,26.5 + parent: 2 + - uid: 10159 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 20.5,26.5 + parent: 2 + - uid: 10160 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,26.5 + parent: 2 + - uid: 10161 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,26.5 + parent: 2 + - uid: 10162 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 17.5,26.5 + parent: 2 + - uid: 10163 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 16.5,26.5 + parent: 2 + - uid: 10164 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,26.5 + parent: 2 + - uid: 10165 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,26.5 + parent: 2 + - uid: 10166 + components: + - type: Transform + pos: 13.5,25.5 + parent: 2 + - uid: 10167 + components: + - type: Transform + pos: 13.5,24.5 + parent: 2 + - uid: 10168 + components: + - type: Transform + pos: 13.5,23.5 + parent: 2 + - uid: 10169 + components: + - type: Transform + pos: 13.5,22.5 + parent: 2 + - uid: 10170 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.5,21.5 + parent: 2 + - uid: 10171 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.5,21.5 + parent: 2 + - uid: 10172 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,21.5 + parent: 2 + - uid: 10173 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,21.5 + parent: 2 + - uid: 10174 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,21.5 + parent: 2 + - uid: 10175 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,21.5 + parent: 2 + - uid: 10176 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,21.5 + parent: 2 + - uid: 10177 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,21.5 + parent: 2 + - uid: 10178 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,21.5 + parent: 2 + - uid: 10179 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,21.5 + parent: 2 + - uid: 10180 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,21.5 + parent: 2 + - uid: 10181 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,21.5 + parent: 2 + - uid: 10182 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,14.5 + parent: 2 + - uid: 10183 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,15.5 + parent: 2 + - uid: 10184 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,16.5 + parent: 2 + - uid: 10185 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,16.5 + parent: 2 + - uid: 10186 + components: + - type: Transform + pos: 29.5,17.5 + parent: 2 + - uid: 10187 + components: + - type: Transform + pos: 29.5,18.5 + parent: 2 + - uid: 10188 + components: + - type: Transform + pos: 29.5,19.5 + parent: 2 + - uid: 10189 + components: + - type: Transform + pos: 29.5,20.5 + parent: 2 + - uid: 10190 + components: + - type: Transform + pos: 29.5,21.5 + parent: 2 + - uid: 10191 + components: + - type: Transform + pos: 29.5,22.5 + parent: 2 + - uid: 10192 + components: + - type: Transform + pos: 29.5,23.5 + parent: 2 + - uid: 10193 + components: + - type: Transform + pos: 29.5,24.5 + parent: 2 + - uid: 10194 + components: + - type: Transform + pos: 29.5,25.5 + parent: 2 + - uid: 10195 + components: + - type: Transform + pos: 39.5,2.5 + parent: 2 + - uid: 10196 + components: + - type: Transform + pos: 39.5,3.5 + parent: 2 + - uid: 10197 + components: + - type: Transform + pos: 39.5,4.5 + parent: 2 + - uid: 10198 + components: + - type: Transform + pos: 39.5,5.5 + parent: 2 + - uid: 10199 + components: + - type: Transform + pos: 39.5,6.5 + parent: 2 + - uid: 10200 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,7.5 + parent: 2 + - uid: 10201 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,7.5 + parent: 2 + - uid: 10202 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,7.5 + parent: 2 + - uid: 10203 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,7.5 + parent: 2 + - uid: 10204 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,7.5 + parent: 2 + - uid: 10205 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,7.5 + parent: 2 + - uid: 10206 + components: + - type: Transform + pos: 32.5,10.5 + parent: 2 + - uid: 10207 + components: + - type: Transform + pos: 32.5,9.5 + parent: 2 + - uid: 10208 + components: + - type: Transform + pos: 32.5,8.5 + parent: 2 + - uid: 10209 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,7.5 + parent: 2 + - uid: 10210 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,7.5 + parent: 2 + - uid: 10211 + components: + - type: Transform + pos: 29.5,8.5 + parent: 2 + - uid: 10212 + components: + - type: Transform + pos: 29.5,9.5 + parent: 2 + - uid: 10213 + components: + - type: Transform + pos: 29.5,10.5 + parent: 2 + - uid: 10214 + components: + - type: Transform + pos: 29.5,11.5 + parent: 2 + - uid: 10215 + components: + - type: Transform + pos: 29.5,12.5 + parent: 2 + - uid: 10216 + components: + - type: Transform + pos: 29.5,13.5 + parent: 2 + - uid: 10217 + components: + - type: Transform + pos: 29.5,14.5 + parent: 2 + - uid: 10218 + components: + - type: Transform + pos: 29.5,15.5 + parent: 2 + - uid: 10219 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-0.5 + parent: 2 + - uid: 10220 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-0.5 + parent: 2 + - uid: 10221 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,-0.5 + parent: 2 + - uid: 10222 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,-0.5 + parent: 2 + - uid: 10223 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,-0.5 + parent: 2 + - uid: 10224 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,-0.5 + parent: 2 + - uid: 10225 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,0.5 + parent: 2 + - uid: 10226 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,1.5 + parent: 2 + - uid: 10227 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,2.5 + parent: 2 + - uid: 10228 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,3.5 + parent: 2 + - uid: 10229 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,4.5 + parent: 2 + - uid: 10230 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,5.5 + parent: 2 + - uid: 10231 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,6.5 + parent: 2 + - uid: 10232 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,-55.5 + parent: 2 + - uid: 10233 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,-55.5 + parent: 2 + - uid: 10234 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,-54.5 + parent: 2 + - uid: 10235 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,-53.5 + parent: 2 + - uid: 10236 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,-52.5 + parent: 2 + - uid: 10237 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-52.5 + parent: 2 + - uid: 10238 + components: + - type: Transform + pos: 7.5,-51.5 + parent: 2 + - uid: 10239 + components: + - type: Transform + pos: 7.5,-50.5 + parent: 2 + - uid: 10240 + components: + - type: Transform + pos: 7.5,-49.5 + parent: 2 + - uid: 10241 + components: + - type: Transform + pos: 7.5,-48.5 + parent: 2 + - uid: 10242 + components: + - type: Transform + pos: 7.5,-47.5 + parent: 2 + - uid: 10243 + components: + - type: Transform + pos: 7.5,-46.5 + parent: 2 + - uid: 10244 + components: + - type: Transform + pos: 6.5,-44.5 + parent: 2 + - uid: 10245 + components: + - type: Transform + pos: 6.5,-43.5 + parent: 2 + - uid: 10246 + components: + - type: Transform + pos: 6.5,-42.5 + parent: 2 + - uid: 10247 + components: + - type: Transform + pos: 6.5,-41.5 + parent: 2 + - uid: 10248 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,-40.5 + parent: 2 + - uid: 10249 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,-40.5 + parent: 2 + - uid: 10250 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-40.5 + parent: 2 + - uid: 10251 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-40.5 + parent: 2 + - uid: 10252 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-39.5 + parent: 2 + - uid: 10253 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-38.5 + parent: 2 + - uid: 10254 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-37.5 + parent: 2 + - uid: 10255 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-36.5 + parent: 2 + - uid: 10256 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-35.5 + parent: 2 + - uid: 10257 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-34.5 + parent: 2 + - uid: 10258 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-33.5 + parent: 2 + - uid: 10259 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-32.5 + parent: 2 + - uid: 10260 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-31.5 + parent: 2 + - uid: 10261 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-30.5 + parent: 2 + - uid: 10262 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-29.5 + parent: 2 + - uid: 10263 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-28.5 + parent: 2 + - uid: 10264 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-27.5 + parent: 2 + - uid: 10265 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,-41.5 + parent: 2 + - uid: 10266 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 29.5,-40.5 + parent: 2 + - uid: 10267 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,-40.5 + parent: 2 + - uid: 10268 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,-40.5 + parent: 2 + - uid: 10269 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,-40.5 + parent: 2 + - uid: 10270 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,-40.5 + parent: 2 + - uid: 10271 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,-40.5 + parent: 2 + - uid: 10272 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 23.5,-40.5 + parent: 2 + - uid: 10273 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,-40.5 + parent: 2 + - uid: 10274 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,-40.5 + parent: 2 + - uid: 10275 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 20.5,-40.5 + parent: 2 + - uid: 10276 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,-40.5 + parent: 2 + - uid: 10277 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,-40.5 + parent: 2 + - uid: 10278 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 17.5,-40.5 + parent: 2 + - uid: 10279 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 16.5,-40.5 + parent: 2 + - uid: 10280 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,-40.5 + parent: 2 + - uid: 10281 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,-40.5 + parent: 2 + - uid: 10282 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 13.5,-40.5 + parent: 2 + - uid: 10283 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.5,-40.5 + parent: 2 + - uid: 10284 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.5,-40.5 + parent: 2 + - uid: 10285 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,-40.5 + parent: 2 + - uid: 10286 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,-40.5 + parent: 2 + - uid: 10287 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,-40.5 + parent: 2 + - uid: 10288 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,-40.5 + parent: 2 + - uid: 10289 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,-60.5 + parent: 2 + - uid: 10290 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,-59.5 + parent: 2 + - uid: 10291 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,-58.5 + parent: 2 + - uid: 10292 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,-57.5 + parent: 2 + - uid: 10293 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,-56.5 + parent: 2 + - uid: 10294 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,-55.5 + parent: 2 + - uid: 10295 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,-54.5 + parent: 2 + - uid: 10296 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,-53.5 + parent: 2 + - uid: 10297 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,-52.5 + parent: 2 + - uid: 10298 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,-51.5 + parent: 2 + - uid: 10299 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -19.5,-51.5 + parent: 2 + - uid: 10300 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,-51.5 + parent: 2 + - uid: 10301 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,-51.5 + parent: 2 + - uid: 10302 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,-51.5 + parent: 2 + - uid: 10303 + components: + - type: Transform + pos: -21.5,-50.5 + parent: 2 + - uid: 10304 + components: + - type: Transform + pos: -21.5,-49.5 + parent: 2 + - uid: 10305 + components: + - type: Transform + pos: -21.5,-48.5 + parent: 2 + - uid: 10306 + components: + - type: Transform + pos: -21.5,-47.5 + parent: 2 + - uid: 10307 + components: + - type: Transform + pos: -21.5,-46.5 + parent: 2 + - uid: 10308 + components: + - type: Transform + pos: -21.5,-45.5 + parent: 2 + - uid: 10309 + components: + - type: Transform + pos: -21.5,-44.5 + parent: 2 + - uid: 10310 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,-43.5 + parent: 2 + - uid: 10311 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,-43.5 + parent: 2 + - uid: 10312 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,-43.5 + parent: 2 + - uid: 10313 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -25.5,-43.5 + parent: 2 + - uid: 10314 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,-43.5 + parent: 2 + - uid: 10315 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,-43.5 + parent: 2 + - uid: 10316 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -28.5,-43.5 + parent: 2 + - uid: 10317 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,-43.5 + parent: 2 + - uid: 10318 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.5,-43.5 + parent: 2 + - uid: 10319 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,-43.5 + parent: 2 + - uid: 10320 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 34.5,-36.5 + parent: 2 + - uid: 10321 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 34.5,-35.5 + parent: 2 + - uid: 15038 + components: + - type: Transform + pos: 8.5,9.5 + parent: 2 + - uid: 15158 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,11.5 + parent: 2 + - uid: 15894 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.5,-53.5 + parent: 2 + - uid: 17534 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.5,-53.5 + parent: 2 + - uid: 23295 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 13.5,-53.5 + parent: 2 + - uid: 24233 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 17.5,14.5 + parent: 2 + - uid: 24252 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 36.5,6.5 + parent: 2 +- proto: DisposalPipeBroken + entities: + - uid: 10322 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,-36.5 + parent: 2 +- proto: DisposalTrunk + entities: + - uid: 10323 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,-34.5 + parent: 2 + - uid: 10324 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,-37.5 + parent: 2 + - uid: 10325 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,-40.5 + parent: 2 + - uid: 10326 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,-43.5 + parent: 2 + - uid: 10327 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,-46.5 + parent: 2 + - uid: 10328 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,-49.5 + parent: 2 + - uid: 10329 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,-49.5 + parent: 2 + - uid: 10330 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,-46.5 + parent: 2 + - uid: 10331 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,-43.5 + parent: 2 + - uid: 10332 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,-40.5 + parent: 2 + - uid: 10333 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,-37.5 + parent: 2 + - uid: 10334 + components: + - type: Transform + pos: -12.5,-32.5 + parent: 2 + - uid: 10335 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,61.5 + parent: 2 + - uid: 10336 + components: + - type: Transform + pos: 6.5,69.5 + parent: 2 + - uid: 10337 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,61.5 + parent: 2 + - uid: 10338 + components: + - type: Transform + pos: -4.5,69.5 + parent: 2 + - uid: 10339 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 47.5,-31.5 + parent: 2 + - uid: 10340 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -25.5,9.5 + parent: 2 + - uid: 10341 + components: + - type: Transform + pos: -44.5,16.5 + parent: 2 + - uid: 10342 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -30.5,4.5 + parent: 2 + - uid: 10343 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,0.5 + parent: 2 + - uid: 10344 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -37.5,-7.5 + parent: 2 + - uid: 10345 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,-2.5 + parent: 2 + - uid: 10346 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,-32.5 + parent: 2 + - uid: 10347 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,-18.5 + parent: 2 + - uid: 10348 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,-33.5 + parent: 2 + - uid: 10349 + components: + - type: Transform + pos: -14.5,-19.5 + parent: 2 + - uid: 10350 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,-21.5 + parent: 2 + - uid: 10351 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -39.5,-52.5 + parent: 2 + - uid: 10352 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -47.5,-29.5 + parent: 2 + - uid: 10353 + components: + - type: Transform + pos: -41.5,-38.5 + parent: 2 + - uid: 10354 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,-32.5 + parent: 2 + - uid: 10355 + components: + - type: Transform + pos: 15.5,-22.5 + parent: 2 + - uid: 10356 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 23.5,-32.5 + parent: 2 + - uid: 10357 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,-19.5 + parent: 2 + - uid: 10358 + components: + - type: Transform + pos: 30.5,-29.5 + parent: 2 + - uid: 10359 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.5,-30.5 + parent: 2 + - uid: 10360 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-21.5 + parent: 2 + - uid: 10361 + components: + - type: Transform + pos: 39.5,-20.5 + parent: 2 + - uid: 10362 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,-32.5 + parent: 2 + - uid: 10363 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,-12.5 + parent: 2 + - uid: 10364 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,-7.5 + parent: 2 + - uid: 10365 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,-7.5 + parent: 2 + - uid: 10366 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-1.5 + parent: 2 + - uid: 10367 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,3.5 + parent: 2 + - uid: 10368 + components: + - type: Transform + pos: 9.5,9.5 + parent: 2 + - uid: 10369 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,17.5 + parent: 2 + - uid: 10370 + components: + - type: Transform + pos: -2.5,16.5 + parent: 2 + - uid: 10371 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,18.5 + parent: 2 + - uid: 10372 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,25.5 + parent: 2 + - uid: 10373 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,28.5 + parent: 2 + - uid: 10374 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,31.5 + parent: 2 + - uid: 10375 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,38.5 + parent: 2 + - uid: 10376 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,32.5 + parent: 2 + - uid: 10377 + components: + - type: Transform + pos: -2.5,40.5 + parent: 2 + - uid: 10378 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,46.5 + parent: 2 + - uid: 10379 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,53.5 + parent: 2 + - uid: 10380 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,58.5 + parent: 2 + - uid: 10381 + components: + - type: Transform + pos: 8.5,56.5 + parent: 2 + - uid: 10382 + components: + - type: Transform + pos: 17.5,40.5 + parent: 2 + - uid: 10383 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,39.5 + parent: 2 + - uid: 10384 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 42.5,39.5 + parent: 2 + - uid: 10385 + components: + - type: Transform + pos: 39.5,30.5 + parent: 2 + - uid: 10386 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,10.5 + parent: 2 + - uid: 10387 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,12.5 + parent: 2 + - uid: 10388 + components: + - type: Transform + pos: 21.5,19.5 + parent: 2 + - uid: 10389 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,13.5 + parent: 2 + - uid: 10390 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 40.5,1.5 + parent: 2 + - uid: 10391 + components: + - type: Transform + pos: 32.5,11.5 + parent: 2 + - uid: 10392 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,-0.5 + parent: 2 + - uid: 10393 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,-45.5 + parent: 2 + - uid: 10394 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,-53.5 + parent: 2 + - uid: 10395 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,-56.5 + parent: 2 + - uid: 10396 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,-41.5 + parent: 2 + - uid: 10397 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,-61.5 + parent: 2 + - uid: 10398 + components: + - type: Transform + pos: 33.5,-36.5 + parent: 2 + - uid: 10399 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-34.5 + parent: 2 + - uid: 22840 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,11.5 + parent: 2 +- proto: DisposalUnit + entities: + - uid: 10400 + components: + - type: Transform + pos: 32.5,-41.5 + parent: 2 + - uid: 10401 + components: + - type: Transform + pos: -7.5,-7.5 + parent: 2 + - uid: 10402 + components: + - type: Transform + pos: -3.5,-1.5 + parent: 2 + - uid: 10403 + components: + - type: Transform + pos: 5.5,3.5 + parent: 2 + - uid: 10404 + components: + - type: Transform + pos: 9.5,-7.5 + parent: 2 + - uid: 10405 + components: + - type: Transform + pos: -7.5,9.5 + parent: 2 + - uid: 10406 + components: + - type: Transform + pos: 9.5,9.5 + parent: 2 + - uid: 10407 + components: + - type: Transform + pos: -2.5,16.5 + parent: 2 + - uid: 10408 + components: + - type: Transform + pos: 7.5,17.5 + parent: 2 + - uid: 10409 + components: + - type: Transform + pos: 10.5,11.5 + parent: 2 + - uid: 10410 + components: + - type: Transform + pos: -23.5,-2.5 + parent: 2 + - uid: 10411 + components: + - type: Transform + pos: -30.5,4.5 + parent: 2 + - uid: 10412 + components: + - type: Transform + pos: -25.5,9.5 + parent: 2 + - uid: 10413 + components: + - type: Transform + pos: -32.5,8.5 + parent: 2 + - uid: 10414 + components: + - type: Transform + pos: -43.5,9.5 + parent: 2 + - uid: 10415 + components: + - type: Transform + pos: -36.5,0.5 + parent: 2 + - uid: 10416 + components: + - type: Transform + pos: -37.5,-7.5 + parent: 2 + - uid: 10417 + components: + - type: Transform + pos: -28.5,-20.5 + parent: 2 + - uid: 10418 + components: + - type: Transform + pos: -28.5,-32.5 + parent: 2 + - uid: 10419 + components: + - type: Transform + pos: -20.5,-18.5 + parent: 2 + - uid: 10420 + components: + - type: Transform + pos: -24.5,-24.5 + parent: 2 + - uid: 10421 + components: + - type: Transform + pos: -14.5,-19.5 + parent: 2 + - uid: 10422 + components: + - type: Transform + pos: -8.5,-21.5 + parent: 2 + - uid: 10423 + components: + - type: Transform + pos: -20.5,-33.5 + parent: 2 + - uid: 10424 + components: + - type: Transform + pos: -12.5,-34.5 + parent: 2 + - uid: 10425 + components: + - type: Transform + pos: -8.5,-30.5 + parent: 2 + - uid: 10426 + components: + - type: Transform + pos: -13.5,-37.5 + parent: 2 + - uid: 10427 + components: + - type: Transform + pos: -13.5,-40.5 + parent: 2 + - uid: 10428 + components: + - type: Transform + pos: -13.5,-43.5 + parent: 2 + - uid: 10429 + components: + - type: Transform + pos: -13.5,-49.5 + parent: 2 + - uid: 10430 + components: + - type: Transform + pos: -13.5,-46.5 + parent: 2 + - uid: 10431 + components: + - type: Transform + pos: -41.5,-38.5 + parent: 2 + - uid: 10432 + components: + - type: Transform + pos: -47.5,-29.5 + parent: 2 + - uid: 10433 + components: + - type: Transform + pos: -39.5,-52.5 + parent: 2 + - uid: 10434 + components: + - type: Transform + pos: 36.5,-0.5 + parent: 2 + - uid: 10435 + components: + - type: Transform + pos: 15.5,10.5 + parent: 2 + - uid: 10436 + components: + - type: Transform + pos: 21.5,12.5 + parent: 2 + - uid: 10437 + components: + - type: Transform + pos: 21.5,19.5 + parent: 2 + - uid: 10438 + components: + - type: Transform + pos: 32.5,11.5 + parent: 2 + - uid: 10439 + components: + - type: Transform + pos: 32.5,13.5 + parent: 2 + - uid: 10440 + components: + - type: Transform + pos: 40.5,1.5 + parent: 2 + - uid: 10441 + components: + - type: Transform + pos: 39.5,30.5 + parent: 2 + - uid: 10442 + components: + - type: Transform + pos: 17.5,40.5 + parent: 2 + - uid: 10443 + components: + - type: Transform + pos: 30.5,39.5 + parent: 2 + - uid: 10444 + components: + - type: Transform + pos: 42.5,39.5 + parent: 2 + - uid: 10445 + components: + - type: Transform + pos: 35.5,-12.5 + parent: 2 + - uid: 10446 + components: + - type: Transform + pos: -2.5,18.5 + parent: 2 + - uid: 10447 + components: + - type: Transform + pos: -2.5,28.5 + parent: 2 + - uid: 10448 + components: + - type: Transform + pos: -11.5,31.5 + parent: 2 + - uid: 10449 + components: + - type: Transform + pos: -20.5,38.5 + parent: 2 + - uid: 10450 + components: + - type: Transform + pos: -26.5,32.5 + parent: 2 + - uid: 10451 + components: + - type: Transform + pos: -26.5,30.5 + parent: 2 + - uid: 10452 + components: + - type: Transform + pos: -42.5,37.5 + parent: 2 + - uid: 10453 + components: + - type: Transform + pos: -2.5,40.5 + parent: 2 + - uid: 10454 + components: + - type: Transform + pos: -5.5,53.5 + parent: 2 + - uid: 10455 + components: + - type: Transform + pos: 9.5,46.5 + parent: 2 + - uid: 10456 + components: + - type: Transform + pos: 8.5,56.5 + parent: 2 + - uid: 10457 + components: + - type: Transform + pos: -4.5,61.5 + parent: 2 + - uid: 10458 + components: + - type: Transform + pos: 6.5,61.5 + parent: 2 + - uid: 10459 + components: + - type: Transform + pos: -2.5,58.5 + parent: 2 + - uid: 10460 + components: + - type: Transform + pos: 6.5,69.5 + parent: 2 + - uid: 10461 + components: + - type: Transform + pos: -4.5,69.5 + parent: 2 + - uid: 10462 + components: + - type: Transform + pos: 22.5,-19.5 + parent: 2 + - uid: 10463 + components: + - type: Transform + pos: 34.5,-21.5 + parent: 2 + - uid: 10464 + components: + - type: Transform + pos: 42.5,-32.5 + parent: 2 + - uid: 10465 + components: + - type: Transform + pos: 47.5,-31.5 + parent: 2 + - uid: 10466 + components: + - type: Transform + pos: 30.5,-29.5 + parent: 2 + - uid: 10467 + components: + - type: Transform + pos: 25.5,-30.5 + parent: 2 + - uid: 10468 + components: + - type: Transform + pos: 23.5,-32.5 + parent: 2 + - uid: 10469 + components: + - type: Transform + pos: 10.5,-32.5 + parent: 2 + - uid: 10470 + components: + - type: Transform + pos: 39.5,-20.5 + parent: 2 + - uid: 10471 + components: + - type: Transform + pos: 15.5,-22.5 + parent: 2 + - uid: 10472 + components: + - type: Transform + pos: 8.5,-45.5 + parent: 2 + - uid: 10473 + components: + - type: Transform + pos: 14.5,-53.5 + parent: 2 + - uid: 10474 + components: + - type: Transform + pos: 4.5,-56.5 + parent: 2 + - uid: 10475 + components: + - type: Transform + pos: -15.5,-61.5 + parent: 2 + - uid: 10476 + components: + - type: Transform + pos: 4.5,25.5 + parent: 2 + - uid: 10477 + components: + - type: Transform + pos: 19.5,23.5 + parent: 2 + - uid: 10478 + components: + - type: Transform + pos: 33.5,-36.5 + parent: 2 +- proto: DisposalYJunction + entities: + - uid: 10479 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,-30.5 + parent: 2 + - uid: 10480 + components: + - type: Transform + pos: -6.5,-7.5 + parent: 2 + - uid: 10481 + components: + - type: Transform + pos: -4.5,42.5 + parent: 2 + - uid: 10482 + components: + - type: Transform + pos: 0.5,47.5 + parent: 2 + - uid: 10483 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 29.5,26.5 + parent: 2 +- proto: DogBed + entities: + - uid: 10484 + components: + - type: Transform + pos: 44.5,-32.5 + parent: 2 + - uid: 10485 + components: + - type: Transform + pos: 43.5,-22.5 + parent: 2 + - uid: 10486 + components: + - type: Transform + pos: -30.5,5.5 + parent: 2 + - uid: 10487 + components: + - type: Transform + pos: -17.5,-24.5 + parent: 2 + - uid: 10488 + components: + - type: Transform + pos: -14.5,31.5 + parent: 2 + - uid: 10489 + components: + - type: Transform + pos: -21.5,43.5 + parent: 2 + - uid: 10490 + components: + - type: Transform + pos: -4.5,56.5 + parent: 2 + - uid: 10491 + components: + - type: Transform + pos: 9.5,47.5 + parent: 2 + - uid: 10492 + components: + - type: Transform + pos: 26.5,-21.5 + parent: 2 +- proto: DonkpocketBoxSpawner + entities: + - uid: 10493 + components: + - type: Transform + pos: -17.5,-13.5 + parent: 2 + - uid: 10494 + components: + - type: Transform + pos: -17.5,-13.5 + parent: 2 + - uid: 10495 + components: + - type: Transform + pos: 40.5,-18.5 + parent: 2 + - uid: 10496 + components: + - type: Transform + pos: 3.5,-52.5 + parent: 2 + - uid: 10497 + components: + - type: Transform + pos: -8.5,-23.5 + parent: 2 +- proto: DoorElectronics + entities: + - uid: 10498 + components: + - type: Transform + pos: -14.419886,-55.436817 + parent: 2 +- proto: DresserChiefEngineerFilled + entities: + - uid: 8812 + components: + - type: Transform + pos: 14.5,-50.5 + parent: 2 +- proto: DresserChiefMedicalOfficerFilled + entities: + - uid: 8814 + components: + - type: Transform + pos: 26.5,-20.5 + parent: 2 +- proto: DresserFilled + entities: + - uid: 10499 + components: + - type: Transform + pos: 40.5,15.5 + parent: 2 + - uid: 10500 + components: + - type: Transform + pos: -7.5,56.5 + parent: 2 +- proto: DresserHeadOfPersonnelFilled + entities: + - uid: 5802 + components: + - type: Transform + pos: 6.5,50.5 + parent: 2 +- proto: DresserHeadOfSecurityFilled + entities: + - uid: 8770 + components: + - type: Transform + pos: -22.5,45.5 + parent: 2 +- proto: DresserQuarterMasterFilled + entities: + - uid: 8811 + components: + - type: Transform + pos: -23.5,4.5 + parent: 2 +- proto: DresserResearchDirectorFilled + entities: + - uid: 10914 + components: + - type: Transform + pos: -16.5,-19.5 + parent: 2 +- proto: Drill + entities: + - uid: 10552 + components: + - type: Transform + pos: 19.632008,-16.266129 + parent: 2 +- proto: DrinkBeerBottleFull + entities: + - uid: 10553 + components: + - type: Transform + pos: -43.631714,-50.019222 + parent: 2 + - uid: 10554 + components: + - type: Transform + pos: -43.417263,-49.674236 + parent: 2 + - uid: 10555 + components: + - type: Transform + pos: 44.742184,-66.245926 + parent: 2 + - uid: 10556 + components: + - type: Transform + pos: 44.909847,-66.03643 + parent: 2 +- proto: DrinkBottleBeer + entities: + - uid: 10557 + components: + - type: Transform + pos: -23.917133,-14.595512 + parent: 2 + - uid: 10558 + components: + - type: Transform + pos: 11.279647,26.776213 + parent: 2 + - uid: 10559 + components: + - type: Transform + pos: 11.419507,26.953367 + parent: 2 + - uid: 10560 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.708551,26.51514 + parent: 2 +- proto: DrinkBottleWine + entities: + - uid: 10561 + components: + - type: Transform + pos: -44.7997,-36.270035 + parent: 2 +- proto: DrinkChampagneBottleFull + entities: + - uid: 10562 + components: + - type: Transform + pos: 23.63028,35.828766 + parent: 2 + - uid: 10563 + components: + - type: Transform + pos: 10.704861,54.94718 + parent: 2 +- proto: DrinkChangelingStingCan + entities: + - uid: 10564 + components: + - type: Transform + pos: -29.491821,-60.314552 + parent: 2 +- proto: DrinkClownBloodGlass + entities: + - uid: 10538 + components: + - type: Transform + parent: 10524 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: DrinkDeadRumGlass + entities: + - uid: 10565 + components: + - type: Transform + pos: -34.82376,39.766514 + parent: 2 +- proto: DrinkDrGibbCan + entities: + - uid: 10566 + components: + - type: Transform + pos: -27.281612,-66.12426 + parent: 2 +- proto: DrinkFourteenLokoCan + entities: + - uid: 10567 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.290928,-66.617744 + parent: 2 +- proto: DrinkGildlagerBottleFull + entities: + - uid: 10568 + components: + - type: Transform + pos: -35.58466,17.12171 + parent: 2 +- proto: DrinkGildlagerGlass + entities: + - uid: 10569 + components: + - type: Transform + pos: -35.689552,16.660172 + parent: 2 + - uid: 10570 + components: + - type: Transform + pos: -35.52172,16.765066 + parent: 2 + - uid: 10571 + components: + - type: Transform + pos: -35.395847,16.660172 + parent: 2 +- proto: DrinkGinBottleFull + entities: + - uid: 996 + components: + - type: Transform + parent: 995 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: DrinkGlass + entities: + - uid: 10572 + components: + - type: Transform + pos: 25.323677,5.74332 + parent: 2 + - uid: 10573 + components: + - type: Transform + pos: 16.337538,12.790525 + parent: 2 + - uid: 10575 + components: + - type: Transform + parent: 10574 + - type: Physics + canCollide: False + - uid: 10577 + components: + - type: Transform + parent: 10576 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 10578 + components: + - type: Transform + parent: 10576 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: DrinkGoldenCup + entities: + - uid: 10581 + components: + - type: Transform + pos: -31.409832,17.016815 + parent: 2 +- proto: DrinkGrapeCan + entities: + - uid: 10582 + components: + - type: Transform + pos: -27.682144,-66.15219 + parent: 2 + - uid: 10583 + components: + - type: Transform + pos: 29.740402,-34.127605 + parent: 2 + - uid: 10584 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 44.86793,-66.77665 + parent: 2 +- proto: DrinkHosFlask + entities: + - uid: 10586 + components: + - type: Transform + pos: -22.406532,40.797153 + parent: 2 +- proto: DrinkIcedTeaCan + entities: + - uid: 10587 + components: + - type: Transform + pos: -27.738033,-66.45014 + parent: 2 +- proto: DrinkMilkCarton + entities: + - uid: 10588 + components: + - type: Transform + pos: 42.39777,-29.082644 + parent: 2 +- proto: DrinkMugBlue + entities: + - uid: 10589 + components: + - type: Transform + pos: 18.680553,8.524305 + parent: 2 +- proto: DrinkMugDog + entities: + - uid: 10590 + components: + - type: Transform + pos: -42.624443,34.60872 + parent: 2 + - uid: 10591 + components: + - type: Transform + pos: 18.667133,21.53536 + parent: 2 +- proto: DrinkMugRainbow + entities: + - uid: 10592 + components: + - type: Transform + pos: -14.723443,35.313038 + parent: 2 +- proto: DrinkPoisonWinebottleFull + entities: + - uid: 10593 + components: + - type: Transform + pos: -33.711823,26.7967 + parent: 2 +- proto: DrinkPoisonWineGlass + entities: + - uid: 10594 + components: + - type: Transform + pos: -33.33886,26.68481 + parent: 2 + - uid: 10595 + components: + - type: Transform + pos: -33.51291,26.572924 + parent: 2 +- proto: DrinkPwrGameCan + entities: + - uid: 10596 + components: + - type: Transform + pos: 14.313516,-2.105032 + parent: 2 + - uid: 10597 + components: + - type: Transform + pos: 14.43939,-2.35678 + parent: 2 + - uid: 10598 + components: + - type: Transform + pos: 14.2296,-2.377759 + parent: 2 + - uid: 10599 + components: + - type: Transform + pos: 14.733096,-2.084053 + parent: 2 + - uid: 10600 + components: + - type: Transform + pos: 14.712117,-2.35678 + parent: 2 + - uid: 10601 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.499057,-3.203574 + parent: 2 + - type: Openable + opened: True +- proto: DrinkShaker + entities: + - uid: 10602 + components: + - type: Transform + pos: 18.20451,14.569038 + parent: 2 + - uid: 10603 + components: + - type: Transform + pos: 18.225487,14.7998085 + parent: 2 + - uid: 10604 + components: + - type: Transform + pos: -2.7981777,55.697433 + parent: 2 +- proto: DrinkShotGlass + entities: + - uid: 10605 + components: + - type: Transform + pos: -44.215233,-36.548958 + parent: 2 + - uid: 10606 + components: + - type: Transform + pos: -44.215233,-36.29721 + parent: 2 +- proto: DrinkSodaWaterCan + entities: + - uid: 10607 + components: + - type: Transform + pos: -27.467907,-66.40359 + parent: 2 + - uid: 10608 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.369774,-34.568165 + parent: 2 +- proto: DrinkSoyMilkCarton + entities: + - uid: 10609 + components: + - type: Transform + pos: 42.63087,-28.998726 + parent: 2 +- proto: Dropper + entities: + - uid: 10610 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.219715,-27.447004 + parent: 2 + - uid: 10611 + components: + - type: Transform + pos: -5.5465403,-31.55518 + parent: 2 + - uid: 10612 + components: + - type: Transform + pos: 38.544987,-33.769985 + parent: 2 +- proto: EffectHearts + entities: + - uid: 10613 + components: + - type: Transform + pos: 5.3385115,24.668749 + parent: 2 +- proto: EmergencyLight + entities: + - uid: 10614 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,35.5 + parent: 2 + - uid: 10615 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,45.5 + parent: 2 + - uid: 10616 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-58.5 + parent: 2 + - uid: 10617 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,53.5 + parent: 2 + - uid: 10618 + components: + - type: Transform + pos: 8.5,56.5 + parent: 2 + - uid: 10619 + components: + - type: Transform + pos: -6.5,40.5 + parent: 2 + - uid: 10620 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,41.5 + parent: 2 + - uid: 10621 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,26.5 + parent: 2 + - uid: 10622 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,31.5 + parent: 2 + - uid: 10623 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,43.5 + parent: 2 + - uid: 10624 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,36.5 + parent: 2 + - uid: 10625 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,24.5 + parent: 2 + - uid: 10626 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,15.5 + parent: 2 + - uid: 10627 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,-59.5 + parent: 2 + - uid: 10628 + components: + - type: Transform + pos: -7.5,9.5 + parent: 2 + - uid: 10629 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,40.5 + parent: 2 + - uid: 10630 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,34.5 + parent: 2 + - uid: 10631 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,-7.5 + parent: 2 + - uid: 10632 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.5,3.5 + parent: 2 + - uid: 10633 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,-1.5 + parent: 2 + - uid: 10634 + components: + - type: Transform + pos: -19.5,36.5 + parent: 2 + - uid: 10635 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,8.5 + parent: 2 + - uid: 10636 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,14.5 + parent: 2 + - uid: 10637 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,15.5 + parent: 2 + - uid: 10638 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,12.5 + parent: 2 + - uid: 10639 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,8.5 + parent: 2 + - uid: 10640 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,9.5 + parent: 2 + - uid: 10641 + components: + - type: Transform + pos: 23.5,19.5 + parent: 2 + - uid: 10642 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,39.5 + parent: 2 + - uid: 10643 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,45.5 + parent: 2 + - uid: 10644 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,33.5 + parent: 2 + - uid: 10645 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,-53.5 + parent: 2 + - uid: 10646 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.5,-0.5 + parent: 2 + - uid: 10647 + components: + - type: Transform + pos: 25.5,2.5 + parent: 2 + - uid: 10648 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,-0.5 + parent: 2 + - uid: 10649 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,-4.5 + parent: 2 + - uid: 10650 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 32.5,-8.5 + parent: 2 + - uid: 10651 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 44.5,-8.5 + parent: 2 + - uid: 10652 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 37.5,5.5 + parent: 2 + - uid: 10653 + components: + - type: Transform + pos: 41.5,15.5 + parent: 2 + - uid: 10654 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -42.5,33.5 + parent: 2 + - uid: 10655 + components: + - type: Transform + pos: 33.5,20.5 + parent: 2 + - uid: 10656 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,-49.5 + parent: 2 + - uid: 10657 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -42.5,28.5 + parent: 2 + - uid: 10658 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,18.5 + parent: 2 + - uid: 10659 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -39.5,24.5 + parent: 2 + - uid: 10660 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,23.5 + parent: 2 + - uid: 10661 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 36.5,26.5 + parent: 2 + - uid: 10662 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 28.5,37.5 + parent: 2 + - uid: 10663 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 44.5,40.5 + parent: 2 + - uid: 10664 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,25.5 + parent: 2 + - uid: 10665 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,29.5 + parent: 2 + - uid: 10666 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 23.5,43.5 + parent: 2 + - uid: 10667 + components: + - type: Transform + pos: -41.5,20.5 + parent: 2 + - uid: 10668 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 13.5,39.5 + parent: 2 + - uid: 10669 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,22.5 + parent: 2 + - uid: 10670 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 36.5,-15.5 + parent: 2 + - uid: 10671 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-45.5 + parent: 2 + - uid: 10672 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.5,-25.5 + parent: 2 + - uid: 10673 + components: + - type: Transform + pos: 31.5,-14.5 + parent: 2 + - uid: 10674 + components: + - type: Transform + pos: 20.5,-22.5 + parent: 2 + - uid: 10675 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,-29.5 + parent: 2 + - uid: 10676 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,34.5 + parent: 2 + - uid: 10677 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,-32.5 + parent: 2 + - uid: 10678 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -30.5,28.5 + parent: 2 + - uid: 10679 + components: + - type: Transform + pos: 7.5,-21.5 + parent: 2 + - uid: 10680 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,-69.5 + parent: 2 + - uid: 10681 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,-15.5 + parent: 2 + - uid: 10682 + components: + - type: Transform + pos: -7.5,29.5 + parent: 2 + - uid: 10683 + components: + - type: Transform + pos: 16.5,-8.5 + parent: 2 + - uid: 10684 + components: + - type: Transform + pos: 24.5,-17.5 + parent: 2 + - uid: 10685 + components: + - type: Transform + pos: -3.5,-55.5 + parent: 2 + - uid: 10686 + components: + - type: Transform + pos: -7.5,20.5 + parent: 2 + - uid: 10687 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-13.5 + parent: 2 + - uid: 10688 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,23.5 + parent: 2 + - uid: 10689 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-27.5 + parent: 2 + - uid: 10690 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-38.5 + parent: 2 + - uid: 10691 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,22.5 + parent: 2 + - uid: 10692 + components: + - type: Transform + pos: -20.5,29.5 + parent: 2 + - uid: 10693 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,-58.5 + parent: 2 + - uid: 10694 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,-69.5 + parent: 2 + - uid: 10695 + components: + - type: Transform + pos: 12.5,-57.5 + parent: 2 + - uid: 10696 + components: + - type: Transform + pos: 14.5,-40.5 + parent: 2 + - uid: 10697 + components: + - type: Transform + pos: 28.5,-39.5 + parent: 2 + - uid: 10698 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,-55.5 + parent: 2 + - uid: 10699 + components: + - type: Transform + pos: 27.5,-57.5 + parent: 2 + - uid: 10700 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,-43.5 + parent: 2 + - uid: 10701 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,-28.5 + parent: 2 + - uid: 10702 + components: + - type: Transform + pos: -20.5,-26.5 + parent: 2 + - uid: 10703 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -25.5,-31.5 + parent: 2 + - uid: 10704 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,-29.5 + parent: 2 + - uid: 10705 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,-42.5 + parent: 2 + - uid: 10706 + components: + - type: Transform + pos: -39.5,-41.5 + parent: 2 + - uid: 10707 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -41.5,-32.5 + parent: 2 + - uid: 10708 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,-52.5 + parent: 2 + - uid: 10709 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,-33.5 + parent: 2 + - uid: 10710 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-32.5 + parent: 2 + - uid: 10711 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,-42.5 + parent: 2 + - uid: 10712 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,-49.5 + parent: 2 + - uid: 10713 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,-23.5 + parent: 2 + - uid: 10714 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,-12.5 + parent: 2 + - uid: 10715 + components: + - type: Transform + pos: -31.5,-20.5 + parent: 2 + - uid: 10716 + components: + - type: Transform + pos: -22.5,-16.5 + parent: 2 + - uid: 10717 + components: + - type: Transform + pos: -28.5,-16.5 + parent: 2 + - uid: 10718 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,-10.5 + parent: 2 + - uid: 10719 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,-1.5 + parent: 2 + - uid: 10720 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,-6.5 + parent: 2 + - uid: 10721 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,4.5 + parent: 2 + - uid: 10722 + components: + - type: Transform + pos: -28.5,13.5 + parent: 2 + - uid: 10723 + components: + - type: Transform + pos: -33.5,17.5 + parent: 2 + - uid: 10724 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -44.5,7.5 + parent: 2 + - uid: 10725 + components: + - type: Transform + pos: -42.5,17.5 + parent: 2 + - uid: 10726 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -42.5,-0.5 + parent: 2 + - uid: 10727 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,-10.5 + parent: 2 + - uid: 10728 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -45.5,-23.5 + parent: 2 + - uid: 10729 + components: + - type: Transform + pos: -43.5,-15.5 + parent: 2 + - uid: 10730 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,-0.5 + parent: 2 + - uid: 10731 + components: + - type: Transform + pos: -28.5,2.5 + parent: 2 +- proto: EmergencyRollerBedSpawnFolded + entities: + - uid: 10732 + components: + - type: Transform + pos: -38.484848,-16.936386 + parent: 2 + - uid: 10733 + components: + - type: Transform + pos: -38.303215,-16.698956 + parent: 2 +- proto: Emitter + entities: + - uid: 10734 + components: + - type: Transform + pos: 14.5,-58.5 + parent: 2 + - uid: 10735 + components: + - type: Transform + pos: 14.5,-57.5 + parent: 2 + - uid: 10736 + components: + - type: Transform + pos: 14.5,-59.5 + parent: 2 + - uid: 10737 + components: + - type: Transform + pos: 14.5,-60.5 + parent: 2 + - uid: 10738 + components: + - type: Transform + pos: 12.5,-67.5 + parent: 2 + - uid: 10739 + components: + - type: Transform + pos: 11.5,-67.5 + parent: 2 + - uid: 10740 + components: + - type: Transform + pos: 13.5,-67.5 + parent: 2 + - uid: 10741 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-69.5 + parent: 2 + - uid: 10742 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-69.5 + parent: 2 +- proto: EncryptionKeyCargo + entities: + - uid: 10744 + components: + - type: Transform + parent: 10743 + - type: Physics + canCollide: False + - uid: 10745 + components: + - type: Transform + pos: 4.3336377,44.696342 + parent: 2 +- proto: EncryptionKeyCommand + entities: + - uid: 10747 + components: + - type: Transform + parent: 10746 + - type: Physics + canCollide: False + - uid: 10748 + components: + - type: Transform + pos: 4.492146,44.761612 + parent: 2 +- proto: EncryptionKeyCommon + entities: + - uid: 10750 + components: + - type: Transform + parent: 10749 + - type: Physics + canCollide: False + - uid: 10751 + components: + - type: Transform + pos: 4.6226816,44.612427 + parent: 2 +- proto: EncryptionKeyEngineering + entities: + - uid: 10753 + components: + - type: Transform + parent: 10752 + - type: Physics + canCollide: False + - uid: 10754 + components: + - type: Transform + pos: 4.7718663,44.752285 + parent: 2 +- proto: EncryptionKeyJustice + entities: + - uid: 23866 + components: + - type: Transform + pos: 5.429473,44.565796 + parent: 2 +- proto: EncryptionKeyMedical + entities: + - uid: 10756 + components: + - type: Transform + parent: 10755 + - type: Physics + canCollide: False + - uid: 10757 + components: + - type: Transform + pos: 4.8930783,44.659046 + parent: 2 +- proto: EncryptionKeyMedicalScience + entities: + - uid: 10758 + components: + - type: Transform + pos: 5.648323,44.659046 + parent: 2 +- proto: EncryptionKeyScience + entities: + - uid: 10760 + components: + - type: Transform + parent: 10759 + - type: Physics + canCollide: False + - uid: 10761 + components: + - type: Transform + pos: 5.1355023,44.71499 + parent: 2 +- proto: EncryptionKeySecurity + entities: + - uid: 10763 + components: + - type: Transform + parent: 10762 + - type: Physics + canCollide: False + - uid: 10764 + components: + - type: Transform + pos: 5.1634746,44.62175 + parent: 2 +- proto: EncryptionKeyService + entities: + - uid: 10766 + components: + - type: Transform + parent: 10765 + - type: Physics + canCollide: False + - uid: 10767 + components: + - type: Transform + pos: 5.4711666,44.71499 + parent: 2 +- proto: ExosuitFabricator + entities: + - uid: 10768 + components: + - type: Transform + pos: -19.5,-23.5 + parent: 2 + - uid: 10769 + components: + - type: Transform + pos: -19.5,-21.5 + parent: 2 +- proto: ExplosivesSignMed + entities: + - uid: 10770 + components: + - type: Transform + pos: -15.5,-29.5 + parent: 2 +- proto: ExtendedEmergencyOxygenTankFilled + entities: + - uid: 10771 + components: + - type: Transform + pos: -7.645706,-64.09039 + parent: 2 + - uid: 10772 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.39085,-64.121475 + parent: 2 +- proto: ExtinguisherCabinet + entities: + - uid: 10773 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,-34.5 + parent: 2 + - uid: 10774 + components: + - type: Transform + pos: -2.5,-29.5 + parent: 2 + - uid: 10775 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,-38.5 + parent: 2 + - uid: 10776 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,-50.5 + parent: 2 + - uid: 10777 + components: + - type: Transform + pos: -18.5,-54.5 + parent: 2 + - uid: 10778 + components: + - type: Transform + pos: -11.5,-54.5 + parent: 2 + - uid: 10779 + components: + - type: Transform + pos: -1.5,-34.5 + parent: 2 +- proto: ExtinguisherCabinetFilled + entities: + - uid: 10780 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,-3.5 + parent: 2 + - uid: 10781 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,10.5 + parent: 2 + - uid: 10782 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,9.5 + parent: 2 + - uid: 10783 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,10.5 + parent: 2 + - uid: 10784 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,4.5 + parent: 2 + - uid: 10785 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,-3.5 + parent: 2 + - uid: 10786 + components: + - type: Transform + pos: -18.5,-2.5 + parent: 2 + - uid: 10787 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,13.5 + parent: 2 + - uid: 10788 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,17.5 + parent: 2 + - uid: 10789 + components: + - type: Transform + pos: -1.5,15.5 + parent: 2 + - uid: 10790 + components: + - type: Transform + pos: 3.5,20.5 + parent: 2 + - uid: 10791 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,14.5 + parent: 2 + - uid: 10792 + components: + - type: Transform + pos: -2.5,-15.5 + parent: 2 + - uid: 10793 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,-1.5 + parent: 2 + - uid: 10794 + components: + - type: Transform + pos: -24.5,3.5 + parent: 2 + - uid: 10795 + components: + - type: Transform + pos: -31.5,8.5 + parent: 2 + - uid: 10796 + components: + - type: Transform + pos: -28.5,14.5 + parent: 2 + - uid: 10797 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -45.5,7.5 + parent: 2 + - uid: 10798 + components: + - type: Transform + pos: -25.5,-14.5 + parent: 2 + - uid: 10799 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -30.5,-15.5 + parent: 2 + - uid: 10800 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,14.5 + parent: 2 + - uid: 10801 + components: + - type: Transform + pos: -40.5,18.5 + parent: 2 + - uid: 10802 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,-16.5 + parent: 2 + - uid: 10803 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,-27.5 + parent: 2 + - uid: 10804 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,-31.5 + parent: 2 + - uid: 10805 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,-26.5 + parent: 2 + - uid: 10806 + components: + - type: Transform + pos: -35.5,-41.5 + parent: 2 + - uid: 10807 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,-25.5 + parent: 2 + - uid: 10808 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,-15.5 + parent: 2 + - uid: 10809 + components: + - type: Transform + pos: -13.5,-22.5 + parent: 2 + - uid: 10810 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,-21.5 + parent: 2 + - uid: 10811 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.5,-29.5 + parent: 2 + - uid: 10812 + components: + - type: Transform + pos: -40.5,-44.5 + parent: 2 + - uid: 10813 + components: + - type: Transform + pos: -40.5,-34.5 + parent: 2 + - uid: 10814 + components: + - type: Transform + pos: -35.5,-53.5 + parent: 2 + - uid: 10815 + components: + - type: Transform + pos: 24.5,3.5 + parent: 2 + - uid: 10816 + components: + - type: Transform + pos: 24.5,-1.5 + parent: 2 + - uid: 10817 + components: + - type: Transform + pos: 35.5,3.5 + parent: 2 + - uid: 10818 + components: + - type: Transform + pos: 21.5,-16.5 + parent: 2 + - uid: 10819 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.5,12.5 + parent: 2 + - uid: 10820 + components: + - type: Transform + pos: 21.5,20.5 + parent: 2 + - uid: 10821 + components: + - type: Transform + pos: 27.5,18.5 + parent: 2 + - uid: 10822 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,19.5 + parent: 2 + - uid: 10823 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 18.5,28.5 + parent: 2 + - uid: 10824 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,38.5 + parent: 2 + - uid: 10825 + components: + - type: Transform + pos: 16.5,41.5 + parent: 2 + - uid: 10826 + components: + - type: Transform + pos: 31.5,36.5 + parent: 2 + - uid: 10827 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-13.5 + parent: 2 + - uid: 10828 + components: + - type: Transform + pos: -19.5,23.5 + parent: 2 + - uid: 10829 + components: + - type: Transform + pos: -19.5,23.5 + parent: 2 + - uid: 10830 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,29.5 + parent: 2 + - uid: 10831 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,33.5 + parent: 2 + - uid: 10832 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,37.5 + parent: 2 + - uid: 10833 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -21.5,32.5 + parent: 2 + - uid: 10834 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,38.5 + parent: 2 + - uid: 10835 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,24.5 + parent: 2 + - uid: 10836 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -42.5,23.5 + parent: 2 + - uid: 10837 + components: + - type: Transform + pos: -30.5,31.5 + parent: 2 + - uid: 10838 + components: + - type: Transform + pos: -2.5,41.5 + parent: 2 + - uid: 10839 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,34.5 + parent: 2 + - uid: 10840 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,33.5 + parent: 2 + - uid: 10841 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,37.5 + parent: 2 + - uid: 10842 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,41.5 + parent: 2 + - uid: 10843 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,50.5 + parent: 2 + - uid: 10844 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,52.5 + parent: 2 + - uid: 10845 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,57.5 + parent: 2 + - uid: 10846 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,46.5 + parent: 2 + - uid: 10847 + components: + - type: Transform + pos: 10.5,48.5 + parent: 2 + - uid: 10848 + components: + - type: Transform + pos: 11.5,52.5 + parent: 2 + - uid: 10849 + components: + - type: Transform + pos: 9.5,70.5 + parent: 2 + - uid: 10850 + components: + - type: Transform + pos: -6.5,70.5 + parent: 2 + - uid: 10851 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,79.5 + parent: 2 + - uid: 10852 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,80.5 + parent: 2 + - uid: 10853 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,-13.5 + parent: 2 + - uid: 10854 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,-17.5 + parent: 2 + - uid: 10855 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,-20.5 + parent: 2 + - uid: 10856 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,-17.5 + parent: 2 + - uid: 10857 + components: + - type: Transform + pos: 48.5,-29.5 + parent: 2 + - uid: 10858 + components: + - type: Transform + pos: 48.5,-33.5 + parent: 2 + - uid: 10859 + components: + - type: Transform + pos: 40.5,-35.5 + parent: 2 + - uid: 10860 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,-31.5 + parent: 2 + - uid: 10861 + components: + - type: Transform + pos: 23.5,-29.5 + parent: 2 + - uid: 10862 + components: + - type: Transform + pos: 18.5,-33.5 + parent: 2 + - uid: 10863 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,-33.5 + parent: 2 + - uid: 10864 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,-28.5 + parent: 2 + - uid: 10865 + components: + - type: Transform + pos: 3.5,-18.5 + parent: 2 + - uid: 10866 + components: + - type: Transform + pos: 21.5,-38.5 + parent: 2 + - uid: 10867 + components: + - type: Transform + pos: 7.5,-38.5 + parent: 2 + - uid: 10868 + components: + - type: Transform + pos: -1.5,-43.5 + parent: 2 + - uid: 10869 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-50.5 + parent: 2 + - uid: 10870 + components: + - type: Transform + pos: 14.5,-49.5 + parent: 2 + - uid: 10871 + components: + - type: Transform + pos: -4.5,-54.5 + parent: 2 + - uid: 10872 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,-60.5 + parent: 2 + - uid: 10873 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-61.5 + parent: 2 + - uid: 10874 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,-61.5 + parent: 2 + - uid: 10875 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,-68.5 + parent: 2 + - uid: 10876 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-73.5 + parent: 2 + - uid: 10877 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 33.5,-45.5 + parent: 2 + - uid: 10878 + components: + - type: Transform + pos: 35.5,-47.5 + parent: 2 + - uid: 10879 + components: + - type: Transform + pos: -35.5,-7.5 + parent: 2 +- proto: FaxMachineBase + entities: + - uid: 10880 + components: + - type: Transform + pos: 17.5,21.5 + parent: 2 + - type: FaxMachine + name: Reporter + - uid: 10881 + components: + - type: Transform + pos: 4.5,27.5 + parent: 2 + - type: FaxMachine + name: Blueshield + - uid: 10882 + components: + - type: Transform + pos: -5.5,14.5 + parent: 2 + - type: FaxMachine + name: Advocacia + - uid: 10883 + components: + - type: Transform + pos: -43.5,11.5 + parent: 2 + - type: FaxMachine + name: Carga + - uid: 10884 + components: + - type: Transform + pos: -27.5,-32.5 + parent: 2 + - type: FaxMachine + name: Ciência + - uid: 10885 + components: + - type: Transform + pos: -8.5,31.5 + parent: 2 + - type: FaxMachine + name: Segurança + - uid: 10886 + components: + - type: Transform + pos: -1.5,62.5 + parent: 2 + - type: FaxMachine + name: Ponte + - uid: 10887 + components: + - type: Transform + pos: 8.5,-44.5 + parent: 2 + - type: FaxMachine + name: Engenharia + - uid: 10888 + components: + - type: Transform + pos: 9.5,48.5 + parent: 2 + - type: FaxMachine + name: HoP + - uid: 10889 + components: + - type: Transform + pos: -30.5,-5.5 + parent: 2 + - type: FaxMachine + name: Correio + - uid: 10890 + components: + - type: Transform + pos: 35.5,11.5 + parent: 2 + - type: FaxMachine + name: Bar + - uid: 10891 + components: + - type: Transform + pos: 26.5,-19.5 + parent: 2 + - type: FaxMachine + name: Médico Chefe + - uid: 10892 + components: + - type: Transform + pos: 41.5,-25.5 + parent: 2 + - type: FaxMachine + name: Médica + - uid: 10893 + components: + - type: Transform + pos: 11.5,-51.5 + parent: 2 + - type: FaxMachine + name: Engenheiro Chefe + - uid: 10894 + components: + - type: Transform + pos: -15.5,-19.5 + parent: 2 + - type: FaxMachine + name: Diretor de Pesquisa + - uid: 10895 + components: + - type: Transform + pos: -25.5,6.5 + parent: 2 + - type: FaxMachine + name: Intendente de Carga + - uid: 10896 + components: + - type: Transform + pos: -26.5,44.5 + parent: 2 + - type: FaxMachine + name: Segurança Chefe + - uid: 10897 + components: + - type: Transform + pos: 42.5,0.5 + parent: 2 + - type: FaxMachine + name: Biblioteca +- proto: FaxMachineCaptain + entities: + - uid: 10898 + components: + - type: Transform + pos: -8.5,48.5 + parent: 2 + - type: FaxMachine + name: Capitão +- proto: filingCabinetDrawerRandom + entities: + - uid: 10899 + components: + - type: Transform + pos: -10.5,-5.5 + parent: 2 + - uid: 10901 + components: + - type: Transform + pos: -14.5,33.5 + parent: 2 +- proto: filingCabinetRandom + entities: + - uid: 10903 + components: + - type: Transform + pos: 5.5,27.5 + parent: 2 + - uid: 10904 + components: + - type: Transform + pos: -9.5,-6.5 + parent: 2 + - uid: 10905 + components: + - type: Transform + pos: -35.5,14.5 + parent: 2 + - uid: 10906 + components: + - type: Transform + pos: -21.5,19.5 + parent: 2 + - uid: 10907 + components: + - type: Transform + pos: -20.5,31.5 + parent: 2 + - uid: 10908 + components: + - type: Transform + pos: -8.702238,47.498413 + parent: 2 + - uid: 10909 + components: + - type: Transform + pos: -8.261679,47.498413 + parent: 2 + - uid: 10910 + components: + - type: Transform + pos: 9.766728,52.488533 + parent: 2 + - uid: 10911 + components: + - type: Transform + pos: 9.242252,52.488533 + parent: 2 + - uid: 10912 + components: + - type: Transform + pos: 44.5,-20.5 + parent: 2 +- proto: filingCabinetTallRandom + entities: + - uid: 10915 + components: + - type: Transform + pos: -25.775326,-20.530376 + parent: 2 + - uid: 10916 + components: + - type: Transform + pos: -25.271828,-20.530376 + parent: 2 +- proto: FireAlarm + entities: + - uid: 10917 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,-4.5 + parent: 2 + - type: DeviceList + devices: + - 11147 + - 11264 + - 11265 + - 11269 + - uid: 10918 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,-1.5 + parent: 2 + - type: DeviceList + devices: + - 11152 + - 11153 + - 11154 + - 11155 + - 11268 + - 11267 + - 11156 + - 11157 + - 11375 + - 11374 + - 11373 + - 11372 + - uid: 10919 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,3.5 + parent: 2 + - type: DeviceList + devices: + - 11152 + - 11153 + - 11154 + - 11155 + - 11268 + - 11267 + - 11156 + - 11157 + - 11375 + - 11374 + - 11373 + - 11372 + - uid: 10920 + components: + - type: Transform + pos: -1.5,12.5 + parent: 2 + - type: DeviceList + devices: + - 11152 + - 11153 + - 11154 + - 11155 + - 11268 + - 11267 + - 11156 + - 11157 + - 11375 + - 11374 + - 11373 + - 11372 + - uid: 10921 + components: + - type: Transform + pos: 3.5,12.5 + parent: 2 + - type: DeviceList + devices: + - 11152 + - 11153 + - 11154 + - 11155 + - 11268 + - 11267 + - 11156 + - 11157 + - 11375 + - 11374 + - 11373 + - 11372 + - uid: 10922 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.5,3.5 + parent: 2 + - type: DeviceList + devices: + - 11152 + - 11153 + - 11154 + - 11155 + - 11268 + - 11267 + - 11156 + - 11157 + - 11375 + - 11374 + - 11373 + - 11372 + - uid: 10923 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.5,-1.5 + parent: 2 + - type: DeviceList + devices: + - 11152 + - 11153 + - 11154 + - 11155 + - 11268 + - 11267 + - 11156 + - 11157 + - 11375 + - 11374 + - 11373 + - 11372 + - uid: 10924 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,-10.5 + parent: 2 + - type: DeviceList + devices: + - 11152 + - 11153 + - 11154 + - 11155 + - 11268 + - 11267 + - 11156 + - 11157 + - 11375 + - 11374 + - 11373 + - 11372 + - uid: 10925 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-10.5 + parent: 2 + - type: DeviceList + devices: + - 11152 + - 11153 + - 11154 + - 11155 + - 11268 + - 11267 + - 11156 + - 11157 + - 11375 + - 11374 + - 11373 + - 11372 + - uid: 10926 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,13.5 + parent: 2 + - type: DeviceList + devices: + - 11377 + - 11372 + - 11234 + - 11376 + - uid: 10927 + components: + - type: Transform + pos: -15.5,13.5 + parent: 2 + - type: DeviceList + devices: + - 11377 + - uid: 10928 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,13.5 + parent: 2 + - type: DeviceList + devices: + - 11373 + - 11234 + - uid: 10929 + components: + - type: Transform + pos: 7.5,20.5 + parent: 2 + - type: DeviceList + devices: + - 11378 + - 11379 + - 11374 + - uid: 10930 + components: + - type: Transform + pos: 9.5,20.5 + parent: 2 + - type: DeviceList + devices: + - 11101 + - 11379 + - uid: 10931 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,12.5 + parent: 2 + - type: DeviceList + devices: + - 11375 + - 11090 + - uid: 10932 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-13.5 + parent: 2 + - type: DeviceList + devices: + - 11156 + - 11157 + - 11300 + - 11299 + - 11298 + - 11307 + - 11308 + - 11175 + - 11224 + - 11225 + - 11310 + - 11311 + - 11309 + - uid: 10933 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,-3.5 + parent: 2 + - type: DeviceList + devices: + - 11371 + - 11138 + - uid: 10934 + components: + - type: Transform + pos: -29.5,3.5 + parent: 2 + - type: DeviceList + devices: + - 11371 + - 11148 + - 11149 + - 11150 + - 11151 + - 11153 + - 11152 + - uid: 10935 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,4.5 + parent: 2 + - type: DeviceList + devices: + - 11364 + - 11362 + - 11365 + - uid: 10936 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,4.5 + parent: 2 + - type: DeviceList + devices: + - 11158 + - 11159 + - 11160 + - 11363 + - 11361 + - 11360 + - 11359 + - 11358 + - 11357 + - 11362 + - uid: 10937 + components: + - type: Transform + pos: -38.5,13.5 + parent: 2 + - type: DeviceList + devices: + - 11357 + - 11358 + - 11359 + - 11360 + - 11366 + - 11367 + - uid: 10938 + components: + - type: Transform + pos: -36.5,5.5 + parent: 2 + - type: DeviceList + devices: + - 11366 + - 11368 + - 11369 + - uid: 10939 + components: + - type: Transform + pos: -36.5,-6.5 + parent: 2 + - type: DeviceList + devices: + - 11370 + - 11356 + - 11368 + - 11369 + - uid: 10940 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -25.5,-13.5 + parent: 2 + - type: DeviceList + devices: + - 11355 + - uid: 10941 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,-13.5 + parent: 2 + - type: DeviceList + devices: + - 11163 + - 11161 + - 11162 + - 11160 + - 11159 + - 11158 + - 11151 + - 11150 + - 11149 + - 11148 + - 11356 + - 11355 + - uid: 10942 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -31.5,13.5 + parent: 2 + - type: DeviceList + devices: + - 11363 + - uid: 10943 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -39.5,14.5 + parent: 2 + - type: DeviceList + devices: + - 11367 + - uid: 10944 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,-16.5 + parent: 2 + - type: DeviceList + devices: + - 11341 + - 11340 + - uid: 10945 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,-15.5 + parent: 2 + - type: DeviceList + devices: + - 11163 + - 11162 + - 11161 + - 11341 + - 11353 + - 11170 + - 11339 + - 11167 + - 11168 + - 11169 + - 11354 + - uid: 10946 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,-34.5 + parent: 2 + - type: DeviceList + devices: + - 11169 + - 11168 + - 11167 + - 11338 + - 11164 + - 11165 + - 11166 + - 11337 + - 11336 + - 11335 + - 11334 + - 11333 + - 11173 + - 11172 + - 11171 + - 11121 + - uid: 10947 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,-36.5 + parent: 2 + - type: DeviceList + devices: + - 11164 + - 11165 + - 11166 + - 11344 + - 11345 + - 11346 + - 11343 + - 11342 + - 11120 + - uid: 10948 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,-36.5 + parent: 2 + - uid: 10949 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,-35.5 + parent: 2 + - type: DeviceList + devices: + - 11337 + - uid: 10950 + components: + - type: Transform + pos: -36.5,-40.5 + parent: 2 + - type: DeviceList + devices: + - 11348 + - 11347 + - 11344 + - 11345 + - uid: 10951 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,-16.5 + parent: 2 + - type: DeviceList + devices: + - 11340 + - 11170 + - 11339 + - 11334 + - uid: 10952 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,-25.5 + parent: 2 + - type: DeviceList + devices: + - 11340 + - 11170 + - 11339 + - 11334 + - uid: 10953 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,-23.5 + parent: 2 + - type: DeviceList + devices: + - 11307 + - uid: 10954 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,-32.5 + parent: 2 + - type: DeviceList + devices: + - 11335 + - 11135 + - uid: 10955 + components: + - type: Transform + pos: -6.5,-25.5 + parent: 2 + - type: DeviceList + devices: + - 11173 + - 11172 + - 11171 + - 11330 + - 11332 + - uid: 10956 + components: + - type: Transform + pos: -5.5,-29.5 + parent: 2 + - type: DeviceList + devices: + - 11175 + - 11330 + - 11174 + - uid: 10957 + components: + - type: Transform + pos: -5.5,-29.5 + parent: 2 + - uid: 10958 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,-38.5 + parent: 2 + - type: DeviceList + devices: + - 11176 + - 11177 + - 11179 + - 11180 + - 11181 + - 11178 + - 14672 + - 14913 + - uid: 10959 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,-46.5 + parent: 2 + - type: DeviceList + devices: + - 11179 + - 11180 + - 11176 + - 11177 + - 11181 + - 11178 + - 11228 + - 11122 + - uid: 10960 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -41.5,-37.5 + parent: 2 + - type: DeviceList + devices: + - 11347 + - 11348 + - 11118 + - uid: 10961 + components: + - type: Transform + pos: -19.5,-54.5 + parent: 2 + - type: DeviceList + devices: + - 11231 + - 11230 + - 11134 + - uid: 10962 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,-35.5 + parent: 2 + - type: DeviceList + devices: + - 11309 + - 11331 + - uid: 10963 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.5,-1.5 + parent: 2 + - type: DeviceList + devices: + - 11182 + - 11183 + - 11184 + - 11185 + - 11266 + - 11267 + - 11268 + - 11265 + - 11264 + - uid: 10964 + components: + - type: Transform + pos: 27.5,3.5 + parent: 2 + - type: DeviceList + devices: + - 11182 + - 11183 + - 11184 + - 11185 + - 11266 + - 11267 + - 11268 + - 11265 + - 11264 + - uid: 10965 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 26.5,-2.5 + parent: 2 + - type: DeviceList + devices: + - 11126 + - 11266 + - 11185 + - uid: 10966 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,-14.5 + parent: 2 + - type: DeviceList + devices: + - 11297 + - 11296 + - 11295 + - 11129 + - uid: 10967 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,4.5 + parent: 2 + - type: DeviceList + devices: + - 11197 + - 11196 + - 11195 + - 11192 + - 11193 + - 11194 + - 11186 + - 11187 + - 11188 + - 11189 + - 11190 + - 11191 + - 11184 + - 11183 + - 11182 + - 11262 + - uid: 10968 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,12.5 + parent: 2 + - type: DeviceList + devices: + - 11194 + - 11193 + - 11192 + - 11229 + - 11235 + - 11236 + - 11237 + - 11238 + - uid: 10969 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 18.5,16.5 + parent: 2 + - type: DeviceList + devices: + - 11243 + - 11240 + - 11239 + - 11238 + - 11237 + - 11236 + - 11235 + - 11242 + - uid: 10970 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,20.5 + parent: 2 + - type: DeviceList + devices: + - 11195 + - 11196 + - 11197 + - 11245 + - 11229 + - 11242 + - 11244 + - 11247 + - 11246 + - uid: 10971 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 23.5,20.5 + parent: 2 + - type: DeviceList + devices: + - 11091 + - 11243 + - uid: 10972 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,16.5 + parent: 2 + - type: DeviceList + devices: + - 11102 + - uid: 10973 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,13.5 + parent: 2 + - type: DeviceList + devices: + - 11186 + - 11187 + - 11188 + - 11189 + - 11190 + - 11191 + - 11241 + - 11240 + - 11239 + - uid: 10974 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,9.5 + parent: 2 + - type: DeviceList + devices: + - 11197 + - 11196 + - 11195 + - 11192 + - 11193 + - 11194 + - 11186 + - 11187 + - 11188 + - 11189 + - 11190 + - 11191 + - 11094 + - 11184 + - 11183 + - 11182 + - 11262 + - 11093 + - uid: 10975 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,16.5 + parent: 2 + - type: DeviceList + devices: + - 11248 + - 11245 + - 11247 + - 11246 + - uid: 10976 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 39.5,19.5 + parent: 2 + - type: DeviceList + devices: + - 11144 + - 11248 + - uid: 10977 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 43.5,11.5 + parent: 2 + - type: DeviceList + devices: + - 11263 + - uid: 10978 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 43.5,11.5 + parent: 2 + - uid: 10979 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,23.5 + parent: 2 + - type: DeviceList + devices: + - 11145 + - uid: 10980 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,28.5 + parent: 2 + - type: DeviceList + devices: + - 11258 + - 11256 + - 11257 + - 11250 + - uid: 10981 + components: + - type: Transform + pos: 35.5,31.5 + parent: 2 + - type: DeviceList + devices: + - 11198 + - 11199 + - 11200 + - 11201 + - 11202 + - 11203 + - 11250 + - 11249 + - 11244 + - 11145 + - uid: 10982 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.5,37.5 + parent: 2 + - type: DeviceList + devices: + - 11259 + - 11260 + - 11256 + - uid: 10983 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 16.5,44.5 + parent: 2 + - type: DeviceList + devices: + - 11261 + - 11259 + - uid: 10984 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 16.5,42.5 + parent: 2 + - type: DeviceList + devices: + - 11261 + - 11257 + - uid: 10985 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,32.5 + parent: 2 + - type: DeviceList + devices: + - 11198 + - 11199 + - 11200 + - 11201 + - 11202 + - 11203 + - 11250 + - 11249 + - 11244 + - 11145 + - uid: 10986 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,37.5 + parent: 2 + - type: DeviceList + devices: + - 11203 + - 11202 + - 11201 + - 11253 + - 11254 + - 11255 + - uid: 10987 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 45.5,33.5 + parent: 2 + - type: DeviceList + devices: + - 11206 + - 11205 + - 11204 + - 11252 + - 11251 + - uid: 10988 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 42.5,-14.5 + parent: 2 + - type: DeviceList + devices: + - 11269 + - uid: 10989 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -17.5,21.5 + parent: 2 + - type: DeviceList + devices: + - 11380 + - 11141 + - uid: 10990 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -21.5,26.5 + parent: 2 + - type: DeviceList + devices: + - 11402 + - 11401 + - 11395 + - 11394 + - 11211 + - 11212 + - 11213 + - 11393 + - 11400 + - 11398 + - uid: 10991 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,26.5 + parent: 2 + - type: DeviceList + devices: + - 11388 + - 11387 + - 11208 + - 11209 + - 11210 + - 11385 + - 11386 + - 11383 + - 11384 + - 11211 + - 11212 + - 11213 + - uid: 10992 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,26.5 + parent: 2 + - type: DeviceList + devices: + - 11388 + - 11387 + - 11208 + - 11209 + - 11210 + - 11385 + - 11386 + - 11383 + - 11384 + - 11211 + - 11212 + - 11213 + - uid: 10993 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,30.5 + parent: 2 + - type: DeviceList + devices: + - 11386 + - 11389 + - 11390 + - uid: 10994 + components: + - type: Transform + pos: -15.5,41.5 + parent: 2 + - type: DeviceList + devices: + - 11392 + - uid: 10995 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,31.5 + parent: 2 + - type: DeviceList + devices: + - 11393 + - 11391 + - uid: 10996 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,36.5 + parent: 2 + - type: DeviceList + devices: + - 11402 + - 11401 + - 11395 + - 11394 + - 11211 + - 11212 + - 11213 + - 11393 + - 11400 + - 11398 + - uid: 10997 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,38.5 + parent: 2 + - type: DeviceList + devices: + - 11390 + - 11226 + - uid: 10998 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -21.5,37.5 + parent: 2 + - type: DeviceList + devices: + - 11398 + - 11399 + - uid: 10999 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,42.5 + parent: 2 + - type: DeviceList + devices: + - 11399 + - uid: 11000 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,39.5 + parent: 2 + - type: DeviceList + devices: + - 11400 + - uid: 11001 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,25.5 + parent: 2 + - type: DeviceList + devices: + - 11403 + - 11408 + - 11409 + - uid: 11002 + components: + - type: Transform + pos: -37.5,31.5 + parent: 2 + - type: DeviceList + devices: + - 11404 + - 11403 + - 11402 + - uid: 11003 + components: + - type: Transform + pos: -33.5,31.5 + parent: 2 + - type: DeviceList + devices: + - 11402 + - 11401 + - 11395 + - 11394 + - 11211 + - 11212 + - 11213 + - 11393 + - 11400 + - 11398 + - uid: 11004 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -38.5,25.5 + parent: 2 + - type: DeviceList + devices: + - 11409 + - uid: 11005 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,40.5 + parent: 2 + - type: DeviceList + devices: + - 11215 + - 11214 + - 11397 + - 11396 + - 11142 + - uid: 11006 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,30.5 + parent: 2 + - type: DeviceList + devices: + - 11411 + - uid: 11007 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,33.5 + parent: 2 + - type: DeviceList + devices: + - 11412 + - 11413 + - uid: 11008 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,40.5 + parent: 2 + - type: DeviceList + devices: + - 11216 + - 11217 + - 11218 + - 11219 + - 11412 + - 11214 + - 11215 + - 11223 + - 11222 + - 11221 + - 11220 + - uid: 11009 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,42.5 + parent: 2 + - type: DeviceList + devices: + - 11223 + - 11222 + - 11221 + - 11220 + - 11414 + - 11415 + - 11416 + - 11417 + - uid: 11010 + components: + - type: Transform + pos: -6.5,51.5 + parent: 2 + - type: DeviceList + devices: + - 11425 + - 11424 + - uid: 11011 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,51.5 + parent: 2 + - type: DeviceList + devices: + - 11424 + - 11423 + - uid: 11012 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,53.5 + parent: 2 + - type: DeviceList + devices: + - 11223 + - 11222 + - 11221 + - 11220 + - 11414 + - 11415 + - 11416 + - 11417 + - uid: 11013 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,46.5 + parent: 2 + - type: DeviceList + devices: + - 11414 + - 11420 + - 11419 + - uid: 11014 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,51.5 + parent: 2 + - type: DeviceList + devices: + - 11415 + - 11420 + - 11418 + - uid: 11015 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,57.5 + parent: 2 + - type: DeviceList + devices: + - 11423 + - 11422 + - 11421 + - 11418 + - uid: 11016 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,76.5 + parent: 2 + - uid: 11017 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,84.5 + parent: 2 + - uid: 11018 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,83.5 + parent: 2 + - uid: 11019 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,74.5 + parent: 2 + - uid: 11020 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,-11.5 + parent: 2 + - type: DeviceList + devices: + - 11096 + - 11098 + - 11124 + - 11296 + - 11297 + - uid: 11021 + components: + - type: Transform + pos: 19.5,-7.5 + parent: 2 + - type: DeviceList + devices: + - 11096 + - 11098 + - 11124 + - 11296 + - 11297 + - uid: 11022 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,-16.5 + parent: 2 + - type: DeviceList + devices: + - 11297 + - 11296 + - 11295 + - 11129 + - uid: 11023 + components: + - type: Transform + pos: 20.5,-17.5 + parent: 2 + - type: DeviceList + devices: + - 11293 + - uid: 11024 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,-20.5 + parent: 2 + - type: DeviceList + devices: + - 11277 + - 11095 + - uid: 11025 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,-17.5 + parent: 2 + - type: DeviceList + devices: + - 11097 + - 11276 + - 11275 + - 11274 + - uid: 11026 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,-18.5 + parent: 2 + - type: DeviceList + devices: + - 11270 + - uid: 11027 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 37.5,-27.5 + parent: 2 + - type: DeviceList + devices: + - 11272 + - 11273 + - 11283 + - 11125 + - uid: 11028 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,-33.5 + parent: 2 + - type: DeviceList + devices: + - 11272 + - 11273 + - 11283 + - 11125 + - uid: 11029 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,-30.5 + parent: 2 + - type: DeviceList + devices: + - 11283 + - uid: 11030 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,-32.5 + parent: 2 + - type: DeviceList + devices: + - 11284 + - uid: 11031 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,-28.5 + parent: 2 + - type: DeviceList + devices: + - 11279 + - 11278 + - 11284 + - 11128 + - uid: 11032 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,-33.5 + parent: 2 + - type: DeviceList + devices: + - 11285 + - 11286 + - 11287 + - uid: 11033 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-29.5 + parent: 2 + - type: DeviceList + devices: + - 11156 + - 11157 + - 11300 + - 11299 + - 11298 + - 11307 + - 11308 + - 11175 + - 11224 + - 11225 + - 11310 + - 11311 + - 11309 + - uid: 11034 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,-20.5 + parent: 2 + - type: DeviceList + devices: + - 11280 + - 11281 + - 11282 + - 11285 + - 11286 + - 11287 + - 11295 + - 11294 + - 11292 + - 11291 + - 11290 + - 11289 + - 11288 + - 11293 + - uid: 11035 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-22.5 + parent: 2 + - type: DeviceList + devices: + - 11300 + - 11299 + - 11298 + - 11292 + - 11291 + - 11290 + - 11303 + - 11302 + - 11301 + - 11304 + - 11305 + - 11306 + - uid: 11036 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.5,-22.5 + parent: 2 + - type: DeviceList + devices: + - 11300 + - 11299 + - 11298 + - 11292 + - 11291 + - 11290 + - 11303 + - 11302 + - 11301 + - 11304 + - 11305 + - 11306 + - uid: 11037 + components: + - type: Transform + pos: 10.5,-39.5 + parent: 2 + - type: DeviceList + devices: + - 11314 + - 11315 + - 11318 + - 11324 + - 11323 + - 11131 + - 11130 + - uid: 11038 + components: + - type: Transform + pos: 5.5,-38.5 + parent: 2 + - type: DeviceList + devices: + - 11310 + - 11311 + - 11315 + - 11314 + - 11313 + - 11312 + - uid: 11039 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-47.5 + parent: 2 + - type: DeviceList + devices: + - 11225 + - 11224 + - 11312 + - 11313 + - 11318 + - 11317 + - 11316 + - 11320 + - 11321 + - 11319 + - 11322 + - 11132 + - uid: 11040 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,-56.5 + parent: 2 + - type: DeviceList + devices: + - 11225 + - 11224 + - 11312 + - 11313 + - 11318 + - 11317 + - 11316 + - 11320 + - 11321 + - 11319 + - 11322 + - 11132 + - uid: 11041 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,-49.5 + parent: 2 + - type: DeviceList + devices: + - 11225 + - 11224 + - 11312 + - 11313 + - 11318 + - 11317 + - 11316 + - 11320 + - 11321 + - 11319 + - 11322 + - 11132 + - uid: 11042 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,-56.5 + parent: 2 + - type: DeviceList + devices: + - 11319 + - uid: 11043 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 33.5,-43.5 + parent: 2 + - type: DeviceList + devices: + - 11323 + - 11227 + - uid: 11044 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,-66.5 + parent: 2 + - type: DeviceList + devices: + - 11327 + - 11328 + - 11326 + - 11329 + - 11233 + - 11232 + - uid: 11045 + components: + - type: Transform + pos: -3.5,-54.5 + parent: 2 + - type: DeviceList + devices: + - 11230 + - 11231 + - 11327 + - 11325 + - 11133 + - uid: 11046 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-56.5 + parent: 2 + - type: DeviceList + devices: + - 11326 + - 11325 + - 11321 + - 11320 + - uid: 11047 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-55.5 + parent: 2 + - type: DeviceList + devices: + - 11230 + - 11231 + - 11327 + - 11325 + - 11133 + - uid: 11048 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-65.5 + parent: 2 + - type: DeviceList + devices: + - 11232 + - 11233 + - uid: 11049 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,-77.5 + parent: 2 + - type: DeviceList + devices: + - 11327 + - 11328 + - 11326 + - 11329 + - 11233 + - 11232 + - uid: 11050 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,-77.5 + parent: 2 + - type: DeviceList + devices: + - 11327 + - 11328 + - 11326 + - 11329 + - 11233 + - 11232 + - uid: 11051 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-71.5 + parent: 2 + - type: DeviceList + devices: + - 11327 + - 11328 + - 11326 + - 11329 + - 11233 + - 11232 + - uid: 11052 + components: + - type: Transform + pos: 0.5,-61.5 + parent: 2 + - type: DeviceList + devices: + - 11327 + - 11328 + - 11326 + - 11329 + - 11233 + - 11232 + - uid: 11053 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,6.5 + parent: 2 + - type: DeviceList + devices: + - 11197 + - 11196 + - 11195 + - 11192 + - 11193 + - 11194 + - 11186 + - 11187 + - 11188 + - 11189 + - 11190 + - 11191 + - 11094 + - 11184 + - 11183 + - 11182 + - 11262 + - 11093 + - uid: 11054 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,-13.5 + parent: 2 + - type: DeviceList + devices: + - 11147 + - 11264 + - 11265 + - 11269 + - uid: 11055 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,-16.5 + parent: 2 + - type: DeviceList + devices: + - 11147 + - 11270 + - 11282 + - 11281 + - 11280 + - 11279 + - 11278 + - 11277 + - 11276 + - 11275 + - 11274 + - 11272 + - 11273 + - 11271 + - uid: 11056 + components: + - type: Transform + pos: 27.5,-22.5 + parent: 2 + - type: DeviceList + devices: + - 11147 + - 11270 + - 11282 + - 11281 + - 11280 + - 11279 + - 11278 + - 11277 + - 11276 + - 11275 + - 11274 + - 11272 + - 11273 + - 11271 + - uid: 11057 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,-27.5 + parent: 2 + - type: DeviceList + devices: + - 11280 + - 11281 + - 11282 + - 11285 + - 11286 + - 11287 + - 11295 + - 11294 + - 11292 + - 11291 + - 11290 + - 11289 + - 11288 + - 11293 + - uid: 11058 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,-33.5 + parent: 2 + - type: DeviceList + devices: + - 11288 + - 11289 + - 11306 + - 11305 + - 11304 + - 11123 + - uid: 11059 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-41.5 + parent: 2 + - type: DeviceList + devices: + - 11156 + - 11157 + - 11300 + - 11299 + - 11298 + - 11307 + - 11308 + - 11175 + - 11224 + - 11225 + - 11310 + - 11311 + - 11309 + - uid: 11060 + components: + - type: Transform + pos: 24.5,-38.5 + parent: 2 + - type: DeviceList + devices: + - 11314 + - 11315 + - 11318 + - 11324 + - 11323 + - uid: 11061 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,-59.5 + parent: 2 + - type: DeviceList + devices: + - 11231 + - 11230 + - 11134 + - uid: 11062 + components: + - type: Transform + pos: -11.5,-20.5 + parent: 2 + - type: DeviceList + devices: + - 11173 + - 11172 + - 11171 + - 11330 + - 11332 + - uid: 11063 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,-29.5 + parent: 2 + - type: DeviceList + devices: + - 11169 + - 11168 + - 11167 + - 11338 + - 11164 + - 11165 + - 11166 + - 11337 + - 11336 + - 11335 + - 11334 + - 11333 + - 11173 + - 11172 + - 11171 + - 11121 + - uid: 11064 + components: + - type: Transform + pos: -36.5,-44.5 + parent: 2 + - type: DeviceList + devices: + - 11351 + - 11350 + - 11346 + - 11349 + - uid: 11065 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,-53.5 + parent: 2 + - type: DeviceList + devices: + - 11351 + - 11350 + - 11346 + - 11349 + - uid: 11066 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,-23.5 + parent: 2 + - type: DeviceList + devices: + - 11333 + - 11352 + - uid: 11067 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,-24.5 + parent: 2 + - uid: 11068 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,-24.5 + parent: 2 + - type: DeviceList + devices: + - 11163 + - 11162 + - 11161 + - 11341 + - 11353 + - 11170 + - 11339 + - 11167 + - 11168 + - 11169 + - 11354 + - uid: 11069 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,-1.5 + parent: 2 + - type: DeviceList + devices: + - 11163 + - 11161 + - 11162 + - 11160 + - 11159 + - 11158 + - 11151 + - 11150 + - 11149 + - 11148 + - 11356 + - 11355 + - uid: 11070 + components: + - type: Transform + pos: -24.5,8.5 + parent: 2 + - type: DeviceList + devices: + - 11364 + - 11099 + - uid: 11071 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,12.5 + parent: 2 + - type: DeviceList + devices: + - 11361 + - 11365 + - 11137 + - uid: 11072 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,-4.5 + parent: 2 + - type: DeviceList + devices: + - 11366 + - 11368 + - 11369 + - uid: 11073 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,-21.5 + parent: 2 + - type: DeviceList + devices: + - 11353 + - 11370 + - 11136 + - uid: 11074 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,-1.5 + parent: 2 + - type: DeviceList + devices: + - 11371 + - 11148 + - 11149 + - 11150 + - 11151 + - 11153 + - 11152 + - uid: 11075 + components: + - type: Transform + pos: -4.5,21.5 + parent: 2 + - type: DeviceList + devices: + - 11380 + - 11381 + - 11382 + - 11376 + - 11207 + - 11140 + - uid: 11076 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,35.5 + parent: 2 + - type: DeviceList + devices: + - 11392 + - 11391 + - 11385 + - 11389 + - uid: 11077 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -43.5,29.5 + parent: 2 + - type: DeviceList + devices: + - 11407 + - 11406 + - 11405 + - 11404 + - uid: 11078 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,22.5 + parent: 2 + - type: DeviceList + devices: + - 11401 + - uid: 11079 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -31.5,22.5 + parent: 2 + - type: DeviceList + devices: + - 11408 + - uid: 11080 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,16.5 + parent: 2 + - type: DeviceList + devices: + - 11154 + - 11155 + - 11207 + - 11378 + - 11410 + - 11216 + - 11217 + - 11218 + - 11219 + - 11411 + - uid: 11081 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,30.5 + parent: 2 + - type: DeviceList + devices: + - 11154 + - 11155 + - 11207 + - 11378 + - 11410 + - 11216 + - 11217 + - 11218 + - 11219 + - 11411 + - uid: 11082 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,24.5 + parent: 2 + - type: DeviceList + devices: + - 11410 + - 11143 + - uid: 11083 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,40.5 + parent: 2 + - type: DeviceList + devices: + - 11413 + - uid: 11084 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,20.5 + parent: 2 + - type: DeviceList + devices: + - 11104 +- proto: FireAxeCabinetFilled + entities: + - uid: 11085 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,55.5 + parent: 2 + - uid: 11086 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,-56.5 + parent: 2 +- proto: FireExtinguisher + entities: + - uid: 11087 + components: + - type: Transform + pos: -22.658726,-31.175625 + parent: 2 + - uid: 11088 + components: + - type: Transform + pos: 36.285145,-46.385895 + parent: 2 +- proto: Firelock + entities: + - uid: 11089 + components: + - type: Transform + pos: -19.5,-10.5 + parent: 2 + - uid: 11090 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.5,14.5 + parent: 2 + - uid: 11091 + components: + - type: Transform + pos: 23.5,24.5 + parent: 2 + - uid: 11092 + components: + - type: Transform + pos: 44.5,23.5 + parent: 2 + - uid: 11093 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,11.5 + parent: 2 + - uid: 11094 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,5.5 + parent: 2 + - uid: 11095 + components: + - type: Transform + pos: 23.5,-16.5 + parent: 2 + - uid: 11096 + components: + - type: Transform + pos: 18.5,-7.5 + parent: 2 + - uid: 11097 + components: + - type: Transform + pos: 27.5,-15.5 + parent: 2 + - uid: 11098 + components: + - type: Transform + pos: 13.5,-7.5 + parent: 2 + - uid: 11099 + components: + - type: Transform + pos: -22.5,7.5 + parent: 2 + - uid: 11100 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 13.5,16.5 + parent: 2 + - uid: 11101 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.5,18.5 + parent: 2 + - uid: 11102 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,17.5 + parent: 2 + - uid: 11103 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,26.5 + parent: 2 + - uid: 11104 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 17.5,24.5 + parent: 2 + - uid: 11105 + components: + - type: Transform + pos: -7.5,45.5 + parent: 2 + - uid: 11106 + components: + - type: Transform + pos: -3.5,46.5 + parent: 2 + - uid: 11107 + components: + - type: Transform + pos: -26.5,16.5 + parent: 2 + - uid: 11108 + components: + - type: Transform + pos: -27.5,22.5 + parent: 2 + - uid: 11109 + components: + - type: Transform + pos: -25.5,-8.5 + parent: 2 + - uid: 11110 + components: + - type: Transform + pos: -15.5,-11.5 + parent: 2 + - uid: 11111 + components: + - type: Transform + pos: -5.5,-50.5 + parent: 2 + - uid: 11112 + components: + - type: Transform + pos: 21.5,-34.5 + parent: 2 + - uid: 11113 + components: + - type: Transform + pos: 11.5,-11.5 + parent: 2 + - uid: 11114 + components: + - type: Transform + pos: 26.5,-13.5 + parent: 2 + - uid: 11115 + components: + - type: Transform + pos: 25.5,-13.5 + parent: 2 + - uid: 11116 + components: + - type: Transform + pos: -38.5,-28.5 + parent: 2 + - uid: 11117 + components: + - type: Transform + pos: -39.5,-28.5 + parent: 2 + - uid: 11118 + components: + - type: Transform + pos: -40.5,-30.5 + parent: 2 + - uid: 11119 + components: + - type: Transform + pos: -38.5,-34.5 + parent: 2 + - uid: 11120 + components: + - type: Transform + pos: -31.5,-43.5 + parent: 2 + - uid: 11121 + components: + - type: Transform + pos: -36.5,-32.5 + parent: 2 + - uid: 11122 + components: + - type: Transform + pos: -12.5,-50.5 + parent: 2 + - uid: 11123 + components: + - type: Transform + pos: 5.5,-33.5 + parent: 2 + - uid: 11124 + components: + - type: Transform + pos: 12.5,-10.5 + parent: 2 + - uid: 11125 + components: + - type: Transform + pos: 37.5,-31.5 + parent: 2 + - uid: 11126 + components: + - type: Transform + pos: 26.5,-3.5 + parent: 2 + - uid: 11127 + components: + - type: Transform + pos: 15.5,-3.5 + parent: 2 + - uid: 11128 + components: + - type: Transform + pos: 27.5,-33.5 + parent: 2 + - uid: 11129 + components: + - type: Transform + pos: 21.5,-15.5 + parent: 2 + - uid: 11130 + components: + - type: Transform + pos: 13.5,-39.5 + parent: 2 + - uid: 11131 + components: + - type: Transform + pos: 30.5,-38.5 + parent: 2 + - uid: 11132 + components: + - type: Transform + pos: -3.5,-46.5 + parent: 2 + - uid: 11133 + components: + - type: Transform + pos: -5.5,-54.5 + parent: 2 + - uid: 11134 + components: + - type: Transform + pos: -15.5,-54.5 + parent: 2 + - uid: 11135 + components: + - type: Transform + pos: -21.5,-34.5 + parent: 2 + - uid: 11136 + components: + - type: Transform + pos: -37.5,-21.5 + parent: 2 + - uid: 11137 + components: + - type: Transform + pos: -24.5,11.5 + parent: 2 + - uid: 11138 + components: + - type: Transform + pos: -22.5,-4.5 + parent: 2 + - uid: 11139 + components: + - type: Transform + pos: -11.5,-7.5 + parent: 2 + - uid: 11140 + components: + - type: Transform + pos: -16.5,17.5 + parent: 2 + - uid: 11141 + components: + - type: Transform + pos: -20.5,17.5 + parent: 2 + - uid: 11142 + components: + - type: Transform + pos: -4.5,41.5 + parent: 2 + - uid: 11143 + components: + - type: Transform + pos: 7.5,23.5 + parent: 2 + - uid: 11144 + components: + - type: Transform + pos: 42.5,20.5 + parent: 2 + - uid: 11145 + components: + - type: Transform + pos: 38.5,25.5 + parent: 2 +- proto: FirelockFrame + entities: + - uid: 11146 + components: + - type: Transform + pos: 32.5,-36.5 + parent: 2 +- proto: FirelockGlass + entities: + - uid: 11147 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 37.5,-13.5 + parent: 2 + - uid: 11148 + components: + - type: Transform + pos: -30.5,-0.5 + parent: 2 + - uid: 11149 + components: + - type: Transform + pos: -30.5,0.5 + parent: 2 + - uid: 11150 + components: + - type: Transform + pos: -30.5,1.5 + parent: 2 + - uid: 11151 + components: + - type: Transform + pos: -30.5,2.5 + parent: 2 + - uid: 11152 + components: + - type: Transform + pos: -12.5,0.5 + parent: 2 + - uid: 11153 + components: + - type: Transform + pos: -12.5,1.5 + parent: 2 + - uid: 11154 + components: + - type: Transform + pos: 0.5,14.5 + parent: 2 + - uid: 11155 + components: + - type: Transform + pos: 1.5,14.5 + parent: 2 + - uid: 11156 + components: + - type: Transform + pos: 1.5,-12.5 + parent: 2 + - uid: 11157 + components: + - type: Transform + pos: 0.5,-12.5 + parent: 2 + - uid: 11158 + components: + - type: Transform + pos: -32.5,3.5 + parent: 2 + - uid: 11159 + components: + - type: Transform + pos: -33.5,3.5 + parent: 2 + - uid: 11160 + components: + - type: Transform + pos: -34.5,3.5 + parent: 2 + - uid: 11161 + components: + - type: Transform + pos: -34.5,-14.5 + parent: 2 + - uid: 11162 + components: + - type: Transform + pos: -33.5,-14.5 + parent: 2 + - uid: 11163 + components: + - type: Transform + pos: -32.5,-14.5 + parent: 2 + - uid: 11164 + components: + - type: Transform + pos: -32.5,-35.5 + parent: 2 + - uid: 11165 + components: + - type: Transform + pos: -33.5,-35.5 + parent: 2 + - uid: 11166 + components: + - type: Transform + pos: -34.5,-35.5 + parent: 2 + - uid: 11167 + components: + - type: Transform + pos: -32.5,-25.5 + parent: 2 + - uid: 11168 + components: + - type: Transform + pos: -33.5,-25.5 + parent: 2 + - uid: 11169 + components: + - type: Transform + pos: -34.5,-25.5 + parent: 2 + - uid: 11170 + components: + - type: Transform + pos: -27.5,-21.5 + parent: 2 + - uid: 11171 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,-28.5 + parent: 2 + - uid: 11172 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,-27.5 + parent: 2 + - uid: 11173 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,-26.5 + parent: 2 + - uid: 11174 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,-34.5 + parent: 2 + - uid: 11175 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-31.5 + parent: 2 + - uid: 11176 + components: + - type: Transform + pos: -11.5,-38.5 + parent: 2 + - uid: 11177 + components: + - type: Transform + pos: -12.5,-38.5 + parent: 2 + - uid: 11178 + components: + - type: Transform + pos: -13.5,-38.5 + parent: 2 + - uid: 11179 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,-46.5 + parent: 2 + - uid: 11180 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,-46.5 + parent: 2 + - uid: 11181 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,-46.5 + parent: 2 + - uid: 11182 + components: + - type: Transform + pos: 30.5,3.5 + parent: 2 + - uid: 11183 + components: + - type: Transform + pos: 29.5,3.5 + parent: 2 + - uid: 11184 + components: + - type: Transform + pos: 28.5,3.5 + parent: 2 + - uid: 11185 + components: + - type: Transform + pos: 29.5,-1.5 + parent: 2 + - uid: 11186 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,12.5 + parent: 2 + - uid: 11187 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,12.5 + parent: 2 + - uid: 11188 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,12.5 + parent: 2 + - uid: 11189 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 18.5,12.5 + parent: 2 + - uid: 11190 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 17.5,12.5 + parent: 2 + - uid: 11191 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 16.5,12.5 + parent: 2 + - uid: 11192 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,12.5 + parent: 2 + - uid: 11193 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,12.5 + parent: 2 + - uid: 11194 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 23.5,12.5 + parent: 2 + - uid: 11195 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,12.5 + parent: 2 + - uid: 11196 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,12.5 + parent: 2 + - uid: 11197 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,12.5 + parent: 2 + - uid: 11198 + components: + - type: Transform + pos: 41.5,29.5 + parent: 2 + - uid: 11199 + components: + - type: Transform + pos: 41.5,28.5 + parent: 2 + - uid: 11200 + components: + - type: Transform + pos: 41.5,27.5 + parent: 2 + - uid: 11201 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,34.5 + parent: 2 + - uid: 11202 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 29.5,34.5 + parent: 2 + - uid: 11203 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,34.5 + parent: 2 + - uid: 11204 + components: + - type: Transform + pos: 42.5,31.5 + parent: 2 + - uid: 11205 + components: + - type: Transform + pos: 43.5,31.5 + parent: 2 + - uid: 11206 + components: + - type: Transform + pos: 44.5,31.5 + parent: 2 + - uid: 11207 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,19.5 + parent: 2 + - uid: 11208 + components: + - type: Transform + pos: -2.5,25.5 + parent: 2 + - uid: 11209 + components: + - type: Transform + pos: -7.5,25.5 + parent: 2 + - uid: 11210 + components: + - type: Transform + pos: -11.5,25.5 + parent: 2 + - uid: 11211 + components: + - type: Transform + pos: -17.5,27.5 + parent: 2 + - uid: 11212 + components: + - type: Transform + pos: -17.5,28.5 + parent: 2 + - uid: 11213 + components: + - type: Transform + pos: -17.5,29.5 + parent: 2 + - uid: 11214 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,37.5 + parent: 2 + - uid: 11215 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,38.5 + parent: 2 + - uid: 11216 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,31.5 + parent: 2 + - uid: 11217 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,31.5 + parent: 2 + - uid: 11218 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,31.5 + parent: 2 + - uid: 11219 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,31.5 + parent: 2 + - uid: 11220 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,41.5 + parent: 2 + - uid: 11221 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,41.5 + parent: 2 + - uid: 11222 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,41.5 + parent: 2 + - uid: 11223 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,41.5 + parent: 2 + - uid: 11224 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,-43.5 + parent: 2 + - uid: 11225 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-43.5 + parent: 2 + - uid: 11226 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,40.5 + parent: 2 + - uid: 11227 + components: + - type: Transform + pos: 39.5,-43.5 + parent: 2 + - uid: 11228 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,-48.5 + parent: 2 + - uid: 11229 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,14.5 + parent: 2 + - uid: 11230 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,-58.5 + parent: 2 + - uid: 11231 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,-57.5 + parent: 2 + - uid: 11232 + components: + - type: Transform + pos: 9.5,-64.5 + parent: 2 + - uid: 11233 + components: + - type: Transform + pos: 9.5,-63.5 + parent: 2 + - uid: 11234 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,15.5 + parent: 2 + - uid: 11235 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,15.5 + parent: 2 + - uid: 11236 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,15.5 + parent: 2 + - uid: 11237 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,15.5 + parent: 2 + - uid: 11238 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 23.5,15.5 + parent: 2 + - uid: 11239 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,15.5 + parent: 2 + - uid: 11240 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,15.5 + parent: 2 + - uid: 11241 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 16.5,15.5 + parent: 2 + - uid: 11242 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,16.5 + parent: 2 + - uid: 11243 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 22.5,20.5 + parent: 2 + - uid: 11244 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,21.5 + parent: 2 + - uid: 11245 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,16.5 + parent: 2 + - uid: 11246 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,14.5 + parent: 2 + - uid: 11247 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,15.5 + parent: 2 + - uid: 11248 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 39.5,18.5 + parent: 2 + - uid: 11249 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,23.5 + parent: 2 + - uid: 11250 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,31.5 + parent: 2 + - uid: 11251 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,35.5 + parent: 2 + - uid: 11252 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,38.5 + parent: 2 + - uid: 11253 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,35.5 + parent: 2 + - uid: 11254 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,38.5 + parent: 2 + - uid: 11255 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,39.5 + parent: 2 + - uid: 11256 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 18.5,39.5 + parent: 2 + - uid: 11257 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,41.5 + parent: 2 + - uid: 11258 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 18.5,35.5 + parent: 2 + - uid: 11259 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.5,41.5 + parent: 2 + - uid: 11260 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 14.5,37.5 + parent: 2 + - uid: 11261 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 16.5,43.5 + parent: 2 + - uid: 11262 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 36.5,7.5 + parent: 2 + - uid: 11263 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 41.5,11.5 + parent: 2 + - uid: 11264 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,-1.5 + parent: 2 + - uid: 11265 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,-1.5 + parent: 2 + - uid: 11266 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,-1.5 + parent: 2 + - uid: 11267 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,0.5 + parent: 2 + - uid: 11268 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,1.5 + parent: 2 + - uid: 11269 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,-13.5 + parent: 2 + - uid: 11270 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 39.5,-16.5 + parent: 2 + - uid: 11271 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,-24.5 + parent: 2 + - uid: 11272 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,-26.5 + parent: 2 + - uid: 11273 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 39.5,-26.5 + parent: 2 + - uid: 11274 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,-22.5 + parent: 2 + - uid: 11275 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,-22.5 + parent: 2 + - uid: 11276 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,-22.5 + parent: 2 + - uid: 11277 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,-22.5 + parent: 2 + - uid: 11278 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,-26.5 + parent: 2 + - uid: 11279 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,-26.5 + parent: 2 + - uid: 11280 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,-25.5 + parent: 2 + - uid: 11281 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,-24.5 + parent: 2 + - uid: 11282 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,-23.5 + parent: 2 + - uid: 11283 + components: + - type: Transform + pos: 43.5,-31.5 + parent: 2 + - uid: 11284 + components: + - type: Transform + pos: 29.5,-30.5 + parent: 2 + - uid: 11285 + components: + - type: Transform + pos: 19.5,-29.5 + parent: 2 + - uid: 11286 + components: + - type: Transform + pos: 18.5,-29.5 + parent: 2 + - uid: 11287 + components: + - type: Transform + pos: 17.5,-29.5 + parent: 2 + - uid: 11288 + components: + - type: Transform + pos: 11.5,-31.5 + parent: 2 + - uid: 11289 + components: + - type: Transform + pos: 11.5,-30.5 + parent: 2 + - uid: 11290 + components: + - type: Transform + pos: 11.5,-25.5 + parent: 2 + - uid: 11291 + components: + - type: Transform + pos: 11.5,-24.5 + parent: 2 + - uid: 11292 + components: + - type: Transform + pos: 11.5,-23.5 + parent: 2 + - uid: 11293 + components: + - type: Transform + pos: 18.5,-21.5 + parent: 2 + - uid: 11294 + components: + - type: Transform + pos: 11.5,-18.5 + parent: 2 + - uid: 11295 + components: + - type: Transform + pos: 13.5,-17.5 + parent: 2 + - uid: 11296 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 13.5,-12.5 + parent: 2 + - uid: 11297 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 17.5,-12.5 + parent: 2 + - uid: 11298 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-25.5 + parent: 2 + - uid: 11299 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-24.5 + parent: 2 + - uid: 11300 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-23.5 + parent: 2 + - uid: 11301 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,-20.5 + parent: 2 + - uid: 11302 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,-20.5 + parent: 2 + - uid: 11303 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,-20.5 + parent: 2 + - uid: 11304 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,-28.5 + parent: 2 + - uid: 11305 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,-28.5 + parent: 2 + - uid: 11306 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,-28.5 + parent: 2 + - uid: 11307 + components: + - type: Transform + pos: -1.5,-23.5 + parent: 2 + - uid: 11308 + components: + - type: Transform + pos: -1.5,-27.5 + parent: 2 + - uid: 11309 + components: + - type: Transform + pos: -1.5,-36.5 + parent: 2 + - uid: 11310 + components: + - type: Transform + pos: 3.5,-40.5 + parent: 2 + - uid: 11311 + components: + - type: Transform + pos: 3.5,-41.5 + parent: 2 + - uid: 11312 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,-43.5 + parent: 2 + - uid: 11313 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,-43.5 + parent: 2 + - uid: 11314 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-41.5 + parent: 2 + - uid: 11315 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-40.5 + parent: 2 + - uid: 11316 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,-50.5 + parent: 2 + - uid: 11317 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,-49.5 + parent: 2 + - uid: 11318 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-47.5 + parent: 2 + - uid: 11319 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-52.5 + parent: 2 + - uid: 11320 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,-53.5 + parent: 2 + - uid: 11321 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,-55.5 + parent: 2 + - uid: 11322 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,-57.5 + parent: 2 + - uid: 11323 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 33.5,-44.5 + parent: 2 + - uid: 11324 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 33.5,-51.5 + parent: 2 + - uid: 11325 + components: + - type: Transform + pos: 1.5,-57.5 + parent: 2 + - uid: 11326 + components: + - type: Transform + pos: 3.5,-61.5 + parent: 2 + - uid: 11327 + components: + - type: Transform + pos: -3.5,-61.5 + parent: 2 + - uid: 11328 + components: + - type: Transform + pos: 0.5,-65.5 + parent: 2 + - uid: 11329 + components: + - type: Transform + pos: 7.5,-61.5 + parent: 2 + - uid: 11330 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,-29.5 + parent: 2 + - uid: 11331 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,-38.5 + parent: 2 + - uid: 11332 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,-27.5 + parent: 2 + - uid: 11333 + components: + - type: Transform + pos: -16.5,-25.5 + parent: 2 + - uid: 11334 + components: + - type: Transform + pos: -22.5,-25.5 + parent: 2 + - uid: 11335 + components: + - type: Transform + pos: -21.5,-29.5 + parent: 2 + - uid: 11336 + components: + - type: Transform + pos: -24.5,-32.5 + parent: 2 + - uid: 11337 + components: + - type: Transform + pos: -29.5,-33.5 + parent: 2 + - uid: 11338 + components: + - type: Transform + pos: -29.5,-28.5 + parent: 2 + - uid: 11339 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -27.5,-22.5 + parent: 2 + - uid: 11340 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -25.5,-17.5 + parent: 2 + - uid: 11341 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -31.5,-17.5 + parent: 2 + - uid: 11342 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -31.5,-40.5 + parent: 2 + - uid: 11343 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,-37.5 + parent: 2 + - uid: 11344 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -35.5,-42.5 + parent: 2 + - uid: 11345 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -35.5,-43.5 + parent: 2 + - uid: 11346 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,-44.5 + parent: 2 + - uid: 11347 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -42.5,-37.5 + parent: 2 + - uid: 11348 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -43.5,-37.5 + parent: 2 + - uid: 11349 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,-47.5 + parent: 2 + - uid: 11350 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,-46.5 + parent: 2 + - uid: 11351 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -40.5,-50.5 + parent: 2 + - uid: 11352 + components: + - type: Transform + pos: -16.5,-21.5 + parent: 2 + - uid: 11353 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,-19.5 + parent: 2 + - uid: 11354 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -29.5,-25.5 + parent: 2 + - uid: 11355 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,-11.5 + parent: 2 + - uid: 11356 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,-8.5 + parent: 2 + - uid: 11357 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,6.5 + parent: 2 + - uid: 11358 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,7.5 + parent: 2 + - uid: 11359 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,9.5 + parent: 2 + - uid: 11360 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,10.5 + parent: 2 + - uid: 11361 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,10.5 + parent: 2 + - uid: 11362 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,6.5 + parent: 2 + - uid: 11363 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -33.5,13.5 + parent: 2 + - uid: 11364 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,7.5 + parent: 2 + - uid: 11365 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.5,9.5 + parent: 2 + - uid: 11366 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -38.5,5.5 + parent: 2 + - uid: 11367 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -40.5,13.5 + parent: 2 + - uid: 11368 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -38.5,-6.5 + parent: 2 + - uid: 11369 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -39.5,-6.5 + parent: 2 + - uid: 11370 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -37.5,-14.5 + parent: 2 + - uid: 11371 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,-1.5 + parent: 2 + - uid: 11372 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,8.5 + parent: 2 + - uid: 11373 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,12.5 + parent: 2 + - uid: 11374 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,12.5 + parent: 2 + - uid: 11375 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,10.5 + parent: 2 + - uid: 11376 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,17.5 + parent: 2 + - uid: 11377 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,11.5 + parent: 2 + - uid: 11378 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,18.5 + parent: 2 + - uid: 11379 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,18.5 + parent: 2 + - uid: 11380 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,19.5 + parent: 2 + - uid: 11381 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -16.5,21.5 + parent: 2 + - uid: 11382 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,21.5 + parent: 2 + - uid: 11383 + components: + - type: Transform + pos: -14.5,24.5 + parent: 2 + - uid: 11384 + components: + - type: Transform + pos: -16.5,24.5 + parent: 2 + - uid: 11385 + components: + - type: Transform + pos: -15.5,30.5 + parent: 2 + - uid: 11386 + components: + - type: Transform + pos: -12.5,30.5 + parent: 2 + - uid: 11387 + components: + - type: Transform + pos: -4.5,32.5 + parent: 2 + - uid: 11388 + components: + - type: Transform + pos: -2.5,32.5 + parent: 2 + - uid: 11389 + components: + - type: Transform + pos: -13.5,32.5 + parent: 2 + - uid: 11390 + components: + - type: Transform + pos: -9.5,36.5 + parent: 2 + - uid: 11391 + components: + - type: Transform + pos: -18.5,32.5 + parent: 2 + - uid: 11392 + components: + - type: Transform + pos: -16.5,37.5 + parent: 2 + - uid: 11393 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.5,30.5 + parent: 2 + - uid: 11394 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.5,26.5 + parent: 2 + - uid: 11395 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,26.5 + parent: 2 + - uid: 11396 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,35.5 + parent: 2 + - uid: 11397 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,35.5 + parent: 2 + - uid: 11398 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,37.5 + parent: 2 + - uid: 11399 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,42.5 + parent: 2 + - uid: 11400 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -25.5,35.5 + parent: 2 + - uid: 11401 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,26.5 + parent: 2 + - uid: 11402 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,29.5 + parent: 2 + - uid: 11403 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,27.5 + parent: 2 + - uid: 11404 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -38.5,29.5 + parent: 2 + - uid: 11405 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,32.5 + parent: 2 + - uid: 11406 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,35.5 + parent: 2 + - uid: 11407 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,38.5 + parent: 2 + - uid: 11408 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,24.5 + parent: 2 + - uid: 11409 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,26.5 + parent: 2 + - uid: 11410 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,26.5 + parent: 2 + - uid: 11411 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,29.5 + parent: 2 + - uid: 11412 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,34.5 + parent: 2 + - uid: 11413 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,36.5 + parent: 2 + - uid: 11414 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,47.5 + parent: 2 + - uid: 11415 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,52.5 + parent: 2 + - uid: 11416 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,54.5 + parent: 2 + - uid: 11417 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,54.5 + parent: 2 + - uid: 11418 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,57.5 + parent: 2 + - uid: 11419 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,49.5 + parent: 2 + - uid: 11420 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,51.5 + parent: 2 + - uid: 11421 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,57.5 + parent: 2 + - uid: 11422 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,57.5 + parent: 2 + - uid: 11423 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,57.5 + parent: 2 + - uid: 11424 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,51.5 + parent: 2 + - uid: 11425 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,50.5 + parent: 2 + - uid: 11426 + components: + - type: Transform + pos: -10.5,-25.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 37 +- proto: Fireplace + entities: + - uid: 11427 + components: + - type: Transform + pos: -5.5,56.5 + parent: 2 +- proto: Flash + entities: + - uid: 11428 + components: + - type: Transform + pos: -16.97403,11.588499 + parent: 2 + - uid: 11429 + components: + - type: Transform + pos: -19.61,-22.436773 + parent: 2 + - uid: 11430 + components: + - type: Transform + pos: -19.768509,-22.390152 + parent: 2 + - uid: 11431 + components: + - type: Transform + pos: -19.70324,-22.306236 + parent: 2 + - uid: 11432 + components: + - type: Transform + pos: -19.582027,-22.352856 + parent: 2 + - uid: 11433 + components: + - type: Transform + pos: -19.572704,-22.26894 + parent: 2 + - uid: 11434 + components: + - type: Transform + pos: -4.166085,-37.38082 + parent: 2 + - uid: 11435 + components: + - type: Transform + pos: 43.55587,-16.87266 + parent: 2 + - uid: 11436 + components: + - type: Transform + pos: 4.6424813,-18.514095 + parent: 2 +- proto: FlashlightSeclite + entities: + - uid: 11437 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.756112,-24.589926 + parent: 2 +- proto: Floodlight + entities: + - uid: 11438 + components: + - type: Transform + pos: -24.347862,15.685556 + parent: 2 + - uid: 11439 + components: + - type: Transform + pos: -25.648563,21.706535 + parent: 2 + - uid: 11440 + components: + - type: Transform + pos: -8.521772,38.478157 + parent: 2 +- proto: FloorDrain + entities: + - uid: 11441 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,-27.5 + parent: 2 + - type: Fixtures + fixtures: {} + - uid: 11442 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,-10.5 + parent: 2 + - type: Fixtures + fixtures: {} + - uid: 11443 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,-27.5 + parent: 2 + - type: Fixtures + fixtures: {} + - uid: 11444 + components: + - type: Transform + pos: -3.5,-32.5 + parent: 2 + - type: Fixtures + fixtures: {} + - uid: 11445 + components: + - type: Transform + pos: 22.5,21.5 + parent: 2 + - type: Fixtures + fixtures: {} + - uid: 11446 + components: + - type: Transform + pos: 22.5,17.5 + parent: 2 + - type: Fixtures + fixtures: {} + - uid: 11447 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,51.5 + parent: 2 + - type: Fixtures + fixtures: {} + - uid: 11448 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,51.5 + parent: 2 + - type: Fixtures + fixtures: {} + - uid: 11449 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 14.5,-10.5 + parent: 2 + - type: Fixtures + fixtures: {} + - uid: 11450 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,12.5 + parent: 2 + - type: Fixtures + fixtures: {} + - uid: 11451 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,-18.5 + parent: 2 + - type: Fixtures + fixtures: {} + - uid: 11452 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,-30.5 + parent: 2 + - type: Fixtures + fixtures: {} +- proto: FloraTree01 + entities: + - uid: 11453 + components: + - type: Transform + pos: -3.5,-5.5 + parent: 2 +- proto: FloraTree03 + entities: + - uid: 11454 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,5.5 + parent: 2 +- proto: FloraTreeLarge01 + entities: + - uid: 11455 + components: + - type: Transform + pos: 7.5,-3.5 + parent: 2 +- proto: FloraTreeLarge04 + entities: + - uid: 11456 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,4.5 + parent: 2 +- proto: FoamBlade + entities: + - uid: 11457 + components: + - type: Transform + pos: 38.44899,3.6804004 + parent: 2 +- proto: FoodApple + entities: + - uid: 11458 + components: + - type: Transform + pos: -35.58671,-62.39567 + parent: 2 +- proto: FoodBowlBig + entities: + - uid: 11459 + components: + - type: Transform + pos: -42.46283,33.323154 + parent: 2 +- proto: FoodBowlBigTrash + entities: + - uid: 11460 + components: + - type: Transform + pos: -27.877434,15.233183 + parent: 2 +- proto: FoodBoxDonkpocket + entities: + - uid: 11462 + components: + - type: Transform + pos: -43.297028,-9.454086 + parent: 2 +- proto: FoodBoxDonut + entities: + - uid: 11463 + components: + - type: Transform + pos: 24.600113,9.624147 + parent: 2 + - uid: 11464 + components: + - type: Transform + pos: 14.368227,42.899357 + parent: 2 + - uid: 11465 + components: + - type: Transform + pos: 6.649834,48.905804 + parent: 2 + - uid: 11466 + components: + - type: Transform + pos: 8.730892,54.729946 + parent: 2 + - uid: 11467 + components: + - type: Transform + pos: -3.4389992,52.02765 + parent: 2 +- proto: FoodBoxNugget + entities: + - uid: 11468 + components: + - type: Transform + pos: 26.666939,19.03567 + parent: 2 +- proto: FoodBoxPizzaFilled + entities: + - uid: 11469 + components: + - type: Transform + pos: -29.677326,-14.227869 + parent: 2 +- proto: FoodBreadMimanaSlice + entities: + - uid: 11470 + components: + - type: Transform + pos: -4.3876634,-14.44239 + parent: 2 +- proto: FoodBurgerCheese + entities: + - uid: 11471 + components: + - type: Transform + pos: 18.205593,21.53536 + parent: 2 +- proto: FoodBurgerClown + entities: + - uid: 10535 + components: + - type: Transform + parent: 10524 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: FoodBurgerEmpowered + entities: + - uid: 11472 + components: + - type: Transform + pos: -46.584095,-32.412216 + parent: 2 + - uid: 11473 + components: + - type: Transform + pos: -33.68074,26.112938 + parent: 2 +- proto: FoodBurgerMime + entities: + - uid: 10518 + components: + - type: Transform + parent: 10501 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: FoodBurgerRobot + entities: + - uid: 11474 + components: + - type: Transform + pos: -23.599743,-39.49461 + parent: 2 + - type: Physics + angularDamping: 0 + linearDamping: 0 +- proto: FoodBurgerSuper + entities: + - uid: 11475 + components: + - type: Transform + pos: -33.507736,17.583248 + parent: 2 +- proto: FoodCakeClown + entities: + - uid: 10548 + components: + - type: Transform + parent: 10524 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: FoodCakeClownSlice + entities: + - uid: 10537 + components: + - type: Transform + parent: 10524 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 11476 + components: + - type: Transform + pos: -25.573101,-41.63894 + parent: 2 +- proto: FoodCarrot + entities: + - uid: 11477 + components: + - type: Transform + pos: -42.207973,34.83871 + parent: 2 +- proto: FoodCartCold + entities: + - uid: 11478 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 23.5,21.5 + parent: 2 +- proto: FoodCartHot + entities: + - uid: 11479 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,21.5 + parent: 2 + - uid: 11480 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 16.5,25.5 + parent: 2 +- proto: FoodCondimentBottleEnzyme + entities: + - uid: 11481 + components: + - type: Transform + pos: 22.885715,17.965763 + parent: 2 +- proto: FoodDonutChaos + entities: + - uid: 11482 + components: + - type: Transform + pos: -3.4952793,51.595394 + parent: 2 +- proto: FoodDough + entities: + - uid: 11483 + components: + - type: Transform + pos: 26.463253,17.454433 + parent: 2 + - uid: 11484 + components: + - type: Transform + pos: 26.589005,17.642982 + parent: 2 +- proto: FoodDoughFlat + entities: + - uid: 11485 + components: + - type: Transform + pos: 26.485119,18.308397 + parent: 2 +- proto: FoodFrozenSnowconeClown + entities: + - uid: 10540 + components: + - type: Transform + parent: 10524 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: FoodFrozenSnowconeMime + entities: + - uid: 10508 + components: + - type: Transform + parent: 10501 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: FoodMealNachos + entities: + - uid: 11486 + components: + - type: Transform + pos: -22.903801,40.606133 + parent: 2 +- proto: FoodMeatClown + entities: + - uid: 10529 + components: + - type: Transform + parent: 10524 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: FoodMeatGoliath + entities: + - uid: 11487 + components: + - type: Transform + pos: -4.485483,-11.321461 + parent: 2 + - type: CollisionWake + enabled: False +- proto: FoodPlate + entities: + - uid: 11488 + components: + - type: Transform + pos: -23.52546,-62.486492 + parent: 2 +- proto: FoodPlateSmallTrash + entities: + - uid: 11489 + components: + - type: Transform + pos: 19.489384,-36.50554 + parent: 2 +- proto: FoodPlateTrash + entities: + - uid: 11490 + components: + - type: Transform + pos: -19.53099,-36.465023 + parent: 2 +- proto: FoodPoppy + entities: + - uid: 11491 + components: + - type: Transform + pos: 17.5766,30.411772 + parent: 2 + - uid: 11492 + components: + - type: Transform + pos: 17.534641,32.775406 + parent: 2 +- proto: FoodShakerPepper + entities: + - uid: 11493 + components: + - type: Transform + pos: 19.499203,5.1753497 + parent: 2 + - uid: 11494 + components: + - type: Transform + pos: 25.507118,5.1008615 + parent: 2 + - uid: 11495 + components: + - type: Transform + pos: 23.285427,9.736036 + parent: 2 + - uid: 11496 + components: + - type: Transform + pos: 26.27533,18.909794 + parent: 2 +- proto: FoodShakerSalt + entities: + - uid: 11497 + components: + - type: Transform + pos: 19.499203,5.026374 + parent: 2 + - uid: 11498 + components: + - type: Transform + pos: 25.507118,4.961197 + parent: 2 + - uid: 11499 + components: + - type: Transform + pos: 23.467247,9.652121 + parent: 2 + - uid: 11500 + components: + - type: Transform + pos: 26.34526,18.727978 + parent: 2 +- proto: FoodSnackMREBrownieOpen + entities: + - uid: 11501 + components: + - type: Transform + pos: -8.392583,56.64848 + parent: 2 +- proto: FoodSoupClown + entities: + - uid: 10534 + components: + - type: Transform + parent: 10524 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: FoodTartGapple + entities: + - uid: 11502 + components: + - type: Transform + pos: -31.47277,16.555275 + parent: 2 +- proto: FoodTartMime + entities: + - uid: 10503 + components: + - type: Transform + parent: 10501 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: FoodTartMimeSlice + entities: + - uid: 10505 + components: + - type: Transform + parent: 10501 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: FoodTinPeachesMaint + entities: + - uid: 11503 + components: + - type: Transform + pos: -19.632843,-47.462822 + parent: 2 + - uid: 11504 + components: + - type: Transform + pos: -19.360119,-47.315968 + parent: 2 +- proto: FoodTinPeachesMaintTrash + entities: + - uid: 11505 + components: + - type: Transform + pos: -27.217201,17.785725 + parent: 2 + - uid: 11506 + components: + - type: Transform + pos: -27.364056,17.408104 + parent: 2 + - uid: 11507 + components: + - type: Transform + pos: -27.615803,17.743767 + parent: 2 +- proto: FoodTomato + entities: + - uid: 11508 + components: + - type: Transform + pos: 40.67086,-34.31078 + parent: 2 +- proto: Fork + entities: + - uid: 11509 + components: + - type: Transform + pos: 26.320393,9.959812 + parent: 2 +- proto: FuelDispenser + entities: + - uid: 11510 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-49.5 + parent: 2 + - uid: 11511 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,-57.5 + parent: 2 + - uid: 11512 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,-61.5 + parent: 2 + - uid: 11513 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,-63.5 + parent: 2 + - uid: 11514 + components: + - type: Transform + pos: 31.5,-40.5 + parent: 2 + - uid: 11515 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,-64.5 + parent: 2 + - uid: 11516 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,16.5 + parent: 2 +- proto: GasAnalyzer + entities: + - uid: 11517 + components: + - type: Transform + pos: 2.3468375,-58.35682 + parent: 2 + - uid: 11518 + components: + - type: Transform + pos: -7.414138,-63.179836 + parent: 2 + - uid: 11519 + components: + - type: Transform + pos: 29.694004,-52.230232 + parent: 2 +- proto: GasCanisterBrokenBase + entities: + - uid: 11520 + components: + - type: Transform + pos: -13.5,-10.5 + parent: 2 + - uid: 11521 + components: + - type: Transform + pos: -22.5,-11.5 + parent: 2 + - uid: 11522 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,47.5 + parent: 2 + - uid: 11523 + components: + - type: Transform + pos: 43.5,21.5 + parent: 2 + - uid: 11524 + components: + - type: Transform + pos: 28.5,-12.5 + parent: 2 + - uid: 11525 + components: + - type: Transform + pos: -26.5,-60.5 + parent: 2 + - uid: 11526 + components: + - type: Transform + pos: -31.5,-54.5 + parent: 2 + - uid: 11527 + components: + - type: Transform + pos: 8.5,-34.5 + parent: 2 +- proto: GasFilter + entities: + - uid: 11528 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-73.5 + parent: 2 + - uid: 11529 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-73.5 + parent: 2 + - uid: 11530 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-73.5 + parent: 2 + - uid: 11531 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-73.5 + parent: 2 + - uid: 11532 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,-63.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11533 + components: + - type: Transform + pos: 23.5,-61.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11534 + components: + - type: Transform + pos: 23.5,-57.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11535 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,-55.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11536 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,-59.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11537 + components: + - type: Transform + pos: 38.5,-45.5 + parent: 2 +- proto: GasFilterFlipped + entities: + - uid: 11538 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-64.5 + parent: 2 + - uid: 11539 + components: + - type: Transform + pos: 28.5,-59.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 11540 + components: + - type: Transform + pos: 28.5,-57.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 11541 + components: + - type: Transform + pos: 28.5,-58.5 + parent: 2 +- proto: GasMinerNitrogenStationLarge + entities: + - uid: 11542 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,-62.5 + parent: 2 +- proto: GasMinerNitrousOxide + entities: + - uid: 11543 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 37.5,-62.5 + parent: 2 +- proto: GasMinerOxygenStationLarge + entities: + - uid: 11544 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,-58.5 + parent: 2 +- proto: GasMinerWaterVapor + entities: + - uid: 11545 + components: + - type: Transform + pos: 37.5,-54.5 + parent: 2 +- proto: GasMixer + entities: + - uid: 11546 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,-61.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 11547 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,-57.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' +- proto: GasMixerFlipped + entities: + - uid: 11548 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -32.5,-49.5 + parent: 2 + - uid: 11549 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,-53.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 11550 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,-63.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 11551 + components: + - type: Transform + pos: 22.5,-59.5 + parent: 2 + - type: GasMixer + inletTwoConcentration: 0.22000003 + inletOneConcentration: 0.78 + - type: AtmosPipeColor + color: '#0000FFFF' +- proto: GasOutletInjector + entities: + - uid: 11552 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,-42.5 + parent: 2 + - uid: 11553 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -42.5,-47.5 + parent: 2 + - uid: 11554 + components: + - type: Transform + pos: -29.5,26.5 + parent: 2 + - uid: 11555 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 20.5,-56.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11556 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,-63.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11557 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,-68.5 + parent: 2 + - type: AtmosPipeColor + color: '#8800FFFF' + - uid: 11558 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-54.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11559 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 18.5,-53.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11560 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 18.5,-57.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11561 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 18.5,-61.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11562 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,-59.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11563 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,-55.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11564 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 40.5,-48.5 + parent: 2 + - uid: 11565 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,-42.5 + parent: 2 + - uid: 11566 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,-74.5 + parent: 2 +- proto: GasPassiveVent + entities: + - uid: 612 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-68.5 + parent: 2 + - uid: 613 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-69.5 + parent: 2 + - uid: 614 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-70.5 + parent: 2 + - uid: 11567 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,-57.5 + parent: 2 + - type: AtmosPipeColor + color: '#8800FFFF' + - uid: 11568 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,-61.5 + parent: 2 + - type: AtmosPipeColor + color: '#8800FFFF' + - uid: 11569 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,-68.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 11570 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 18.5,-63.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11571 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 18.5,-59.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11572 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 18.5,-55.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11573 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,-53.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 14655 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-70.5 + parent: 2 + - uid: 14656 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-69.5 + parent: 2 + - uid: 14657 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-68.5 + parent: 2 +- proto: GasPipeBend + entities: + - uid: 11574 + components: + - type: Transform + pos: 44.5,-10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11575 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,-45.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11576 + components: + - type: Transform + pos: -6.5,-36.5 + parent: 2 + - uid: 11577 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 45.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11578 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,-41.5 + parent: 2 + - uid: 11579 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,-42.5 + parent: 2 + - uid: 11580 + components: + - type: Transform + pos: -8.5,-41.5 + parent: 2 + - uid: 11581 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,-29.5 + parent: 2 + - uid: 11582 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,-27.5 + parent: 2 + - uid: 11583 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,-30.5 + parent: 2 + - uid: 11584 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,-35.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11585 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,-49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11586 + components: + - type: Transform + pos: -24.5,-34.5 + parent: 2 + - uid: 11587 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-36.5 + parent: 2 + - uid: 11588 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-45.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11589 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-65.5 + parent: 2 + - type: AtmosPipeColor + color: '#FC1703FF' + - uid: 11590 + components: + - type: Transform + pos: 5.5,-64.5 + parent: 2 + - type: AtmosPipeColor + color: '#00FFFFFF' + - uid: 11591 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,-75.5 + parent: 2 + - type: AtmosPipeColor + color: '#00FFFFFF' + - uid: 11592 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-74.5 + parent: 2 + - type: AtmosPipeColor + color: '#00FFFFFF' + - uid: 11593 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,-75.5 + parent: 2 + - type: AtmosPipeColor + color: '#00FFFFFF' + - uid: 11594 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,-74.5 + parent: 2 + - type: AtmosPipeColor + color: '#FC1703FF' + - uid: 11595 + components: + - type: Transform + pos: 7.5,-73.5 + parent: 2 + - type: AtmosPipeColor + color: '#FC1703FF' + - uid: 11596 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,-73.5 + parent: 2 + - type: AtmosPipeColor + color: '#FC6603FF' + - uid: 11597 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-67.5 + parent: 2 + - uid: 11598 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-67.5 + parent: 2 + - uid: 11599 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-67.5 + parent: 2 + - uid: 11600 + components: + - type: Transform + pos: 2.5,-67.5 + parent: 2 + - uid: 11601 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-70.5 + parent: 2 + - uid: 11602 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-70.5 + parent: 2 + - uid: 11603 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,-62.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 11604 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-62.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 11605 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-55.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 11606 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,-55.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 11607 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,-48.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 11608 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,-70.5 + parent: 2 + - uid: 11609 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,-68.5 + parent: 2 + - uid: 11610 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,-58.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11611 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,-52.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11612 + components: + - type: Transform + pos: 20.5,-53.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11613 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 29.5,-62.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 11614 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 32.5,-54.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11615 + components: + - type: Transform + pos: 29.5,-56.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 11616 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,-50.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11617 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,-55.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11618 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,-62.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11619 + components: + - type: Transform + pos: 24.5,-62.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 11620 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,-63.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 11621 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,-64.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11622 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 23.5,-64.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11623 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,-45.5 + parent: 2 + - uid: 11624 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 38.5,-44.5 + parent: 2 + - uid: 11625 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 38.5,-48.5 + parent: 2 + - uid: 11626 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 37.5,-42.5 + parent: 2 + - type: AtmosPipeColor + color: '#323232FF' + - uid: 11627 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,-44.5 + parent: 2 + - type: AtmosPipeColor + color: '#323232FF' + - uid: 11628 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 32.5,-44.5 + parent: 2 + - type: AtmosPipeColor + color: '#323232FF' + - uid: 11629 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,-50.5 + parent: 2 + - type: AtmosPipeColor + color: '#323232FF' + - uid: 11630 + components: + - type: Transform + pos: 28.5,-48.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 11631 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,-51.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11632 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,-52.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11633 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,-42.5 + parent: 2 + - type: AtmosPipeColor + color: '#00FFFFFF' + - uid: 11634 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,-45.5 + parent: 2 + - type: AtmosPipeColor + color: '#FFA500FF' + - uid: 11635 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 12.5,-46.5 + parent: 2 + - type: AtmosPipeColor + color: '#FFA500FF' + - uid: 11636 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 12.5,-43.5 + parent: 2 + - type: AtmosPipeColor + color: '#00FFFFFF' + - uid: 11637 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,-37.5 + parent: 2 + - uid: 11638 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,-46.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11639 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,-43.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11640 + components: + - type: Transform + pos: 27.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11641 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11642 + components: + - type: Transform + pos: 25.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11643 + components: + - type: Transform + pos: 25.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11644 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,-28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11645 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,-31.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11646 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,-31.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11647 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -28.5,-32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11648 + components: + - type: Transform + pos: -41.5,-32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11649 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -41.5,-43.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11650 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,-37.5 + parent: 2 + - uid: 11651 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,-47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11652 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 37.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11653 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 38.5,-32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11654 + components: + - type: Transform + pos: 43.5,-4.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11655 + components: + - type: Transform + pos: 6.5,-46.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11656 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,-54.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11657 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-54.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11658 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-56.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11659 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,-56.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11660 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,-57.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11661 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,-57.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11662 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,-61.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11663 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,-61.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11664 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,-76.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11665 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,-76.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11666 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,-64.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11667 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,-56.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11668 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,-11.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11669 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 17.5,-11.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11670 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11671 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -39.5,-7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11672 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -40.5,-7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11673 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -30.5,-5.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11674 + components: + - type: Transform + pos: 10.5,4.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11675 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11676 + components: + - type: Transform + pos: -16.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11677 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11678 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11679 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11680 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,23.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11681 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -41.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11682 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -39.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11683 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11684 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,54.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11685 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,54.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11686 + components: + - type: Transform + pos: 7.5,52.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11687 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,52.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11688 + components: + - type: Transform + pos: 5.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11689 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 22.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11690 + components: + - type: Transform + pos: 22.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11691 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11692 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11693 + components: + - type: Transform + pos: 28.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11694 + components: + - type: Transform + pos: 32.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11695 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 44.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11696 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11697 + components: + - type: Transform + pos: 44.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11698 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -29.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11699 + components: + - type: Transform + pos: 20.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11700 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,-11.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11701 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 32.5,-4.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11702 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-4.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11703 + components: + - type: Transform + pos: 34.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11704 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,4.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11705 + components: + - type: Transform + pos: 26.5,-18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11706 + components: + - type: Transform + pos: 43.5,-11.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11707 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 43.5,-17.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11708 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-52.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11709 + components: + - type: Transform + pos: 8.5,-45.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11710 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,-53.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11711 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,-31.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11712 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11713 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11714 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11715 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,-57.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11716 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,-58.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11717 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,-63.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11718 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,-63.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11719 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,-72.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11720 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,-72.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11721 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,-63.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11722 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11723 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,-14.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11724 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 13.5,-9.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11725 + components: + - type: Transform + pos: 25.5,-19.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11726 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 23.5,-19.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11727 + components: + - type: Transform + pos: 32.5,-27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11728 + components: + - type: Transform + pos: 41.5,-29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11729 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,-30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11730 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,-30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11731 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 35.5,-4.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11732 + components: + - type: Transform + pos: 35.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11733 + components: + - type: Transform + pos: 21.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11734 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 40.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11735 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11736 + components: + - type: Transform + pos: 26.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11737 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11738 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 33.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11739 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11740 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 36.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11741 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 42.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11742 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 39.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11743 + components: + - type: Transform + pos: 30.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11744 + components: + - type: Transform + pos: 33.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11745 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11746 + components: + - type: Transform + pos: 16.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11747 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11748 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 16.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11749 + components: + - type: Transform + pos: 12.5,3.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11750 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,3.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11751 + components: + - type: Transform + pos: 11.5,5.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11752 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,5.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11753 + components: + - type: Transform + pos: 10.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11754 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11755 + components: + - type: Transform + pos: -24.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11756 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -41.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11757 + components: + - type: Transform + pos: -38.5,-13.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11758 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -40.5,-13.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11759 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,-19.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11760 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -32.5,-21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11761 + components: + - type: Transform + pos: -28.5,-21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11762 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11763 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,-29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11764 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,-32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11765 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,-31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11766 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,-19.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11767 + components: + - type: Transform + pos: -15.5,-20.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11768 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,-34.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11769 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,-34.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11770 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,-36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11771 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,-36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11772 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,-36.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11773 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11774 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,-39.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11775 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,-29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11776 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -35.5,-32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11777 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,-28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11778 + components: + - type: Transform + pos: -29.5,-39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11779 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -43.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11780 + components: + - type: Transform + pos: -26.5,-46.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11781 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,-48.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11782 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,-48.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11783 + components: + - type: Transform + pos: 6.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11784 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11785 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11786 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11787 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,22.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11788 + components: + - type: Transform + pos: -3.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11789 + components: + - type: Transform + pos: -14.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11790 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11791 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11792 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11793 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11794 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11795 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11796 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11797 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11798 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11799 + components: + - type: Transform + pos: -22.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11800 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -39.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11801 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11802 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -41.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11803 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -37.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11804 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11805 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -41.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11806 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -37.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11807 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11808 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,24.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11809 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11810 + components: + - type: Transform + pos: 6.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11811 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11812 + components: + - type: Transform + pos: 3.5,52.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11813 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,51.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11814 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,56.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11815 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,56.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11816 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11817 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11818 + components: + - type: Transform + pos: -4.5,71.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11819 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,71.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11820 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,71.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11821 + components: + - type: Transform + pos: -3.5,72.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11822 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,72.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11823 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,72.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11824 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,72.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11825 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,73.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11826 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,73.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11827 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,82.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11828 + components: + - type: Transform + pos: 5.5,83.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11829 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,83.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11830 + components: + - type: Transform + pos: 6.5,84.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11831 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,84.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11832 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,83.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11833 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,83.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11834 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,82.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11835 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,82.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11836 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,76.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11837 + components: + - type: Transform + pos: -5.5,76.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11838 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11839 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 18.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11840 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 13.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11841 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 13.5,-24.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11842 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,-28.5 + parent: 2 + - uid: 11843 + components: + - type: Transform + pos: 15.5,-24.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11844 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11845 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,-30.5 + parent: 2 +- proto: GasPipeFourway + entities: + - uid: 11846 + components: + - type: Transform + pos: 27.5,-28.5 + parent: 2 + - uid: 11847 + components: + - type: Transform + pos: 1.5,-64.5 + parent: 2 + - type: AtmosPipeColor + color: '#00FFFFFF' + - uid: 11848 + components: + - type: Transform + pos: 28.5,-53.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 11849 + components: + - type: Transform + pos: 23.5,-56.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11850 + components: + - type: Transform + pos: 28.5,-56.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 11851 + components: + - type: Transform + pos: -22.5,-28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11852 + components: + - type: Transform + pos: -12.5,-35.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11853 + components: + - type: Transform + pos: -12.5,-44.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11854 + components: + - type: Transform + pos: 5.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11855 + components: + - type: Transform + pos: 19.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11856 + components: + - type: Transform + pos: 38.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11857 + components: + - type: Transform + pos: 30.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11858 + components: + - type: Transform + pos: -4.5,-56.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11859 + components: + - type: Transform + pos: -21.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11860 + components: + - type: Transform + pos: -34.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11861 + components: + - type: Transform + pos: 0.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11862 + components: + - type: Transform + pos: 1.5,-37.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11863 + components: + - type: Transform + pos: -16.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11864 + components: + - type: Transform + pos: -16.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11865 + components: + - type: Transform + pos: -35.5,23.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11866 + components: + - type: Transform + pos: 0.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11867 + components: + - type: Transform + pos: 0.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11868 + components: + - type: Transform + pos: 28.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11869 + components: + - type: Transform + pos: 28.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11870 + components: + - type: Transform + pos: 28.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11871 + components: + - type: Transform + pos: 8.5,-51.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11872 + components: + - type: Transform + pos: -2.5,-57.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11873 + components: + - type: Transform + pos: 17.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11874 + components: + - type: Transform + pos: 16.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11875 + components: + - type: Transform + pos: 1.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11876 + components: + - type: Transform + pos: -32.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11877 + components: + - type: Transform + pos: -10.5,-36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11878 + components: + - type: Transform + pos: -14.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11879 + components: + - type: Transform + pos: -14.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11880 + components: + - type: Transform + pos: -4.5,70.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' +- proto: GasPipeStraight + entities: + - uid: 11881 + components: + - type: Transform + pos: -4.5,63.5 + parent: 2 + - uid: 11882 + components: + - type: Transform + pos: -10.5,-35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11883 + components: + - type: Transform + pos: 44.5,-11.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11884 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,-53.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11885 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -30.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11886 + components: + - type: Transform + pos: -6.5,-29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11887 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 39.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11888 + components: + - type: Transform + pos: 8.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11889 + components: + - type: Transform + pos: 8.5,50.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11890 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,54.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11891 + components: + - type: Transform + pos: -11.5,-40.5 + parent: 2 + - uid: 11892 + components: + - type: Transform + pos: -11.5,-39.5 + parent: 2 + - uid: 11893 + components: + - type: Transform + pos: -11.5,-38.5 + parent: 2 + - uid: 11894 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,-41.5 + parent: 2 + - uid: 11895 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -38.5,-47.5 + parent: 2 + - uid: 11896 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -38.5,-47.5 + parent: 2 + - uid: 11897 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -38.5,-45.5 + parent: 2 + - uid: 11898 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -40.5,-45.5 + parent: 2 + - uid: 11899 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -40.5,-47.5 + parent: 2 + - uid: 11900 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -41.5,-47.5 + parent: 2 + - uid: 11901 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -41.5,-45.5 + parent: 2 + - uid: 11902 + components: + - type: Transform + pos: -29.5,25.5 + parent: 2 + - uid: 11903 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,-35.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11904 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,-34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11905 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,-35.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11906 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,-47.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11907 + components: + - type: Transform + pos: 10.5,2.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11908 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11909 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,-10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11910 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,-10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11911 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,-37.5 + parent: 2 + - uid: 11912 + components: + - type: Transform + pos: -12.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11913 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11914 + components: + - type: Transform + pos: 26.5,-59.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 11915 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,-35.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11916 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11917 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-64.5 + parent: 2 + - type: AtmosPipeColor + color: '#20FC03FF' + - uid: 11918 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,-64.5 + parent: 2 + - type: AtmosPipeColor + color: '#20FC03FF' + - uid: 11919 + components: + - type: Transform + pos: -4.5,-65.5 + parent: 2 + - type: AtmosPipeColor + color: '#20FC03FF' + - uid: 11920 + components: + - type: Transform + pos: -4.5,-66.5 + parent: 2 + - type: AtmosPipeColor + color: '#20FC03FF' + - uid: 11921 + components: + - type: Transform + pos: -4.5,-67.5 + parent: 2 + - type: AtmosPipeColor + color: '#20FC03FF' + - uid: 11922 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,-68.5 + parent: 2 + - type: AtmosPipeColor + color: '#20FC03FF' + - uid: 11923 + components: + - type: Transform + pos: -0.5,-65.5 + parent: 2 + - uid: 11924 + components: + - type: Transform + pos: 1.5,-65.5 + parent: 2 + - type: AtmosPipeColor + color: '#00FFFFFF' + - uid: 11925 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-64.5 + parent: 2 + - type: AtmosPipeColor + color: '#00FFFFFF' + - uid: 11926 + components: + - type: Transform + pos: 5.5,-65.5 + parent: 2 + - type: AtmosPipeColor + color: '#00FFFFFF' + - uid: 11927 + components: + - type: Transform + pos: 5.5,-66.5 + parent: 2 + - type: AtmosPipeColor + color: '#00FFFFFF' + - uid: 11928 + components: + - type: Transform + pos: 5.5,-67.5 + parent: 2 + - type: AtmosPipeColor + color: '#00FFFFFF' + - uid: 11929 + components: + - type: Transform + pos: 5.5,-68.5 + parent: 2 + - type: AtmosPipeColor + color: '#00FFFFFF' + - uid: 11930 + components: + - type: Transform + pos: 5.5,-69.5 + parent: 2 + - type: AtmosPipeColor + color: '#00FFFFFF' + - uid: 11931 + components: + - type: Transform + pos: 5.5,-70.5 + parent: 2 + - type: AtmosPipeColor + color: '#00FFFFFF' + - uid: 11932 + components: + - type: Transform + pos: 5.5,-71.5 + parent: 2 + - type: AtmosPipeColor + color: '#00FFFFFF' + - uid: 11933 + components: + - type: Transform + pos: 5.5,-72.5 + parent: 2 + - type: AtmosPipeColor + color: '#00FFFFFF' + - uid: 11934 + components: + - type: Transform + pos: 5.5,-73.5 + parent: 2 + - type: AtmosPipeColor + color: '#00FFFFFF' + - uid: 11935 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,-74.5 + parent: 2 + - type: AtmosPipeColor + color: '#00FFFFFF' + - uid: 11936 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-74.5 + parent: 2 + - type: AtmosPipeColor + color: '#00FFFFFF' + - uid: 11937 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,-74.5 + parent: 2 + - type: AtmosPipeColor + color: '#00FFFFFF' + - uid: 11938 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-74.5 + parent: 2 + - type: AtmosPipeColor + color: '#00FFFFFF' + - uid: 11939 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-74.5 + parent: 2 + - type: AtmosPipeColor + color: '#FC1703FF' + - uid: 11940 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,-74.5 + parent: 2 + - type: AtmosPipeColor + color: '#FC1703FF' + - uid: 11941 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,-73.5 + parent: 2 + - type: AtmosPipeColor + color: '#FC1703FF' + - uid: 11942 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,-73.5 + parent: 2 + - type: AtmosPipeColor + color: '#FC1703FF' + - uid: 11943 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,-73.5 + parent: 2 + - type: AtmosPipeColor + color: '#FC1703FF' + - uid: 11944 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-73.5 + parent: 2 + - type: AtmosPipeColor + color: '#FC6603FF' + - uid: 11945 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-73.5 + parent: 2 + - type: AtmosPipeColor + color: '#FC1703FF' + - uid: 11946 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-73.5 + parent: 2 + - type: AtmosPipeColor + color: '#FC1703FF' + - uid: 11947 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-73.5 + parent: 2 + - type: AtmosPipeColor + color: '#FC1703FF' + - uid: 11948 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-75.5 + parent: 2 + - type: AtmosPipeColor + color: '#00FFFFFF' + - uid: 11949 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-75.5 + parent: 2 + - type: AtmosPipeColor + color: '#00FFFFFF' + - uid: 11950 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,-72.5 + parent: 2 + - type: AtmosPipeColor + color: '#FC6603FF' + - uid: 11951 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,-71.5 + parent: 2 + - type: AtmosPipeColor + color: '#FC6603FF' + - uid: 11952 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,-70.5 + parent: 2 + - type: AtmosPipeColor + color: '#FC6603FF' + - uid: 11953 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,-70.5 + parent: 2 + - uid: 11954 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,-68.5 + parent: 2 + - uid: 11955 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-70.5 + parent: 2 + - uid: 11956 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-68.5 + parent: 2 + - uid: 11957 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,-48.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11958 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-62.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 11959 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-62.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 11960 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-62.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 11961 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-62.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 11962 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,-62.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 11963 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-62.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 11964 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,-61.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 11965 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,-60.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 11966 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,-59.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 11967 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,-58.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 11968 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,-57.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 11969 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,-56.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 11970 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,-55.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 11971 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,-55.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 11972 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,-55.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 11973 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,-54.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 11974 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,-53.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 11975 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,-52.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 11976 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,-51.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 11977 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,-50.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 11978 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,-49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 11979 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,-48.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 11980 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,-69.5 + parent: 2 + - uid: 11981 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-57.5 + parent: 2 + - type: AtmosPipeColor + color: '#8800FFFF' + - uid: 11982 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-61.5 + parent: 2 + - type: AtmosPipeColor + color: '#8800FFFF' + - uid: 11983 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,-57.5 + parent: 2 + - type: AtmosPipeColor + color: '#8800FFFF' + - uid: 11984 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-61.5 + parent: 2 + - type: AtmosPipeColor + color: '#8800FFFF' + - uid: 11985 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-57.5 + parent: 2 + - type: AtmosPipeColor + color: '#8800FFFF' + - uid: 11986 + components: + - type: Transform + pos: 20.5,-55.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 11987 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-48.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 11988 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,-56.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11989 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,-56.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11990 + components: + - type: Transform + pos: 23.5,-54.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11991 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 29.5,-53.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 11992 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,-53.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 11993 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,-54.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 11994 + components: + - type: Transform + pos: 32.5,-56.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11995 + components: + - type: Transform + pos: 28.5,-54.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 11996 + components: + - type: Transform + pos: 32.5,-58.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11997 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,-61.5 + parent: 2 + - type: AtmosPipeColor + color: '#8800FFFF' + - uid: 11998 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,-55.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 11999 + components: + - type: Transform + pos: 26.5,-62.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 12000 + components: + - type: Transform + pos: 26.5,-63.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 12001 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,-56.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12002 + components: + - type: Transform + pos: 23.5,-55.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12003 + components: + - type: Transform + pos: 23.5,-52.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12004 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,-53.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 12005 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-53.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 12006 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-53.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 12007 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,-53.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 12008 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 33.5,-54.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12009 + components: + - type: Transform + pos: 26.5,-55.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 12010 + components: + - type: Transform + pos: 28.5,-63.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 12011 + components: + - type: Transform + pos: 23.5,-53.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12012 + components: + - type: Transform + pos: 22.5,-54.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12013 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 28.5,-63.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 12014 + components: + - type: Transform + pos: 26.5,-54.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 12015 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 28.5,-50.5 + parent: 2 + - type: AtmosPipeColor + color: '#323232FF' + - uid: 12016 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 23.5,-52.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12017 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 22.5,-53.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12018 + components: + - type: Transform + pos: 26.5,-61.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 12019 + components: + - type: Transform + pos: 26.5,-58.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 12020 + components: + - type: Transform + pos: 26.5,-57.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 12021 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,-55.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12022 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,-54.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12023 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 20.5,-55.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12024 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,-53.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12025 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,-55.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12026 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,-58.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12027 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 23.5,-58.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12028 + components: + - type: Transform + pos: 26.5,-56.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 12029 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,-56.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12030 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,-57.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12031 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.5,-50.5 + parent: 2 + - type: AtmosPipeColor + color: '#323232FF' + - uid: 12032 + components: + - type: Transform + pos: 26.5,-51.5 + parent: 2 + - type: AtmosPipeColor + color: '#323232FF' + - uid: 12033 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,-62.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12034 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,-62.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12035 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,-60.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12036 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,-61.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12037 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,-59.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12038 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,-59.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12039 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 22.5,-62.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12040 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 22.5,-61.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12041 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 22.5,-60.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12042 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,-63.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12043 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 20.5,-63.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12044 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,-63.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12045 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.5,-63.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 12046 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,-63.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 12047 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 29.5,-63.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 12048 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,-63.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 12049 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,-62.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 12050 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,-60.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 12051 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,-59.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 12052 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,-58.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 12053 + components: + - type: Transform + pos: 26.5,-66.5 + parent: 2 + - type: AtmosPipeColor + color: '#8800FFFF' + - uid: 12054 + components: + - type: Transform + pos: 28.5,-67.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 12055 + components: + - type: Transform + pos: 26.5,-62.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 12056 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,-55.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 12057 + components: + - type: Transform + pos: 28.5,-66.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 12058 + components: + - type: Transform + pos: 28.5,-65.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 12059 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,-56.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 12060 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,-55.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12061 + components: + - type: Transform + pos: 32.5,-57.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12062 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,-54.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12063 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,-55.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12064 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-55.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12065 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,-62.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12066 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,-61.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12067 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,-60.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12068 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 33.5,-59.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12069 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,-59.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12070 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,-61.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12071 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,-61.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12072 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 20.5,-61.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12073 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,-61.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12074 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,-57.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12075 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 20.5,-57.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12076 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,-57.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12077 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,-57.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12078 + components: + - type: Transform + pos: 23.5,-59.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12079 + components: + - type: Transform + pos: 23.5,-60.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12080 + components: + - type: Transform + pos: 23.5,-58.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12081 + components: + - type: Transform + pos: 23.5,-63.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12082 + components: + - type: Transform + pos: 23.5,-62.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12083 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,-64.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12084 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,-64.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12085 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,-67.5 + parent: 2 + - type: AtmosPipeColor + color: '#8800FFFF' + - uid: 12086 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,-66.5 + parent: 2 + - type: AtmosPipeColor + color: '#8800FFFF' + - uid: 12087 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,-65.5 + parent: 2 + - type: AtmosPipeColor + color: '#8800FFFF' + - uid: 12088 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,-64.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12089 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 28.5,-64.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12090 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 29.5,-64.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12091 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,-64.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12092 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,-64.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12093 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,-59.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12094 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,-63.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12095 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,-63.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12096 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 33.5,-63.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12097 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,-49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12098 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 41.5,-44.5 + parent: 2 + - uid: 12099 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 39.5,-44.5 + parent: 2 + - uid: 12100 + components: + - type: Transform + pos: 38.5,-46.5 + parent: 2 + - uid: 12101 + components: + - type: Transform + pos: 38.5,-47.5 + parent: 2 + - uid: 12102 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,-48.5 + parent: 2 + - uid: 12103 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,-45.5 + parent: 2 + - uid: 12104 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,-42.5 + parent: 2 + - type: AtmosPipeColor + color: '#323232FF' + - uid: 12105 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,-42.5 + parent: 2 + - type: AtmosPipeColor + color: '#323232FF' + - uid: 12106 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,-63.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 12107 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,-64.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12108 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,-50.5 + parent: 2 + - type: AtmosPipeColor + color: '#323232FF' + - uid: 12109 + components: + - type: Transform + pos: -24.5,-35.5 + parent: 2 + - uid: 12110 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 29.5,-50.5 + parent: 2 + - type: AtmosPipeColor + color: '#323232FF' + - uid: 12111 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,-50.5 + parent: 2 + - type: AtmosPipeColor + color: '#323232FF' + - uid: 12112 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,-50.5 + parent: 2 + - type: AtmosPipeColor + color: '#323232FF' + - uid: 12113 + components: + - type: Transform + pos: 32.5,-49.5 + parent: 2 + - type: AtmosPipeColor + color: '#323232FF' + - uid: 12114 + components: + - type: Transform + pos: 32.5,-48.5 + parent: 2 + - type: AtmosPipeColor + color: '#323232FF' + - uid: 12115 + components: + - type: Transform + pos: 32.5,-47.5 + parent: 2 + - type: AtmosPipeColor + color: '#323232FF' + - uid: 12116 + components: + - type: Transform + pos: 32.5,-46.5 + parent: 2 + - type: AtmosPipeColor + color: '#323232FF' + - uid: 12117 + components: + - type: Transform + pos: 32.5,-45.5 + parent: 2 + - type: AtmosPipeColor + color: '#323232FF' + - uid: 12118 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,-44.5 + parent: 2 + - type: AtmosPipeColor + color: '#323232FF' + - uid: 12119 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-44.5 + parent: 2 + - type: AtmosPipeColor + color: '#323232FF' + - uid: 12120 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-44.5 + parent: 2 + - type: AtmosPipeColor + color: '#323232FF' + - uid: 12121 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,-44.5 + parent: 2 + - type: AtmosPipeColor + color: '#323232FF' + - uid: 12122 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,-43.5 + parent: 2 + - type: AtmosPipeColor + color: '#323232FF' + - uid: 12123 + components: + - type: Transform + pos: -24.5,-36.5 + parent: 2 + - uid: 12124 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,-48.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 12125 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,-48.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 12126 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,-48.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 12127 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 13.5,-48.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 12128 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,-48.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 12129 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,-48.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 12130 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 16.5,-48.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 12131 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,-48.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 12132 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 18.5,-48.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 12133 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,-48.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 12134 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 20.5,-48.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 12135 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,-48.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 12136 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,-48.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 12137 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,-48.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 12138 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,-48.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 12139 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.5,-48.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 12140 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 26.5,-48.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 12141 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,-48.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 12142 + components: + - type: Transform + pos: 28.5,-49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 12143 + components: + - type: Transform + pos: 28.5,-50.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 12144 + components: + - type: Transform + pos: 28.5,-51.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 12145 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,-50.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12146 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,-51.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12147 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,-50.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12148 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,-49.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12149 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,-48.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12150 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,-47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12151 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,-52.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12152 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,-52.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12153 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 41.5,-42.5 + parent: 2 + - uid: 12154 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,-42.5 + parent: 2 + - type: AtmosPipeColor + color: '#00FFFFFF' + - uid: 12155 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,-43.5 + parent: 2 + - type: AtmosPipeColor + color: '#00FFFFFF' + - uid: 12156 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,-45.5 + parent: 2 + - type: AtmosPipeColor + color: '#FFA500FF' + - uid: 12157 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,-46.5 + parent: 2 + - type: AtmosPipeColor + color: '#FFA500FF' + - uid: 12158 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12159 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12160 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12161 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,-46.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12162 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 29.5,-46.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12163 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,-46.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12164 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,-45.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12165 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 34.5,-44.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12166 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 33.5,-45.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12167 + components: + - type: Transform + pos: 27.5,-43.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12168 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 34.5,-41.5 + parent: 2 + - uid: 12169 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,-46.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12170 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12171 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,-44.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12172 + components: + - type: Transform + pos: 27.5,-42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12173 + components: + - type: Transform + pos: 25.5,-43.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12174 + components: + - type: Transform + pos: 25.5,-43.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12175 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12176 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12177 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12178 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 23.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12179 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12180 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12181 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 20.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12182 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12183 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12184 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 17.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12185 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 16.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12186 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12187 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12188 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 13.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12189 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12190 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12191 + components: + - type: Transform + pos: 25.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12192 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12193 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12194 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 23.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12195 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12196 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12197 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 20.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12198 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12199 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12200 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 17.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12201 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 16.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12202 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12203 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12204 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 13.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12205 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12206 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12207 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12208 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12209 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12210 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 26.5,-42.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12211 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,-42.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12212 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 28.5,-42.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12213 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 29.5,-42.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12214 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,-42.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12215 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,-42.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12216 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 32.5,-42.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12217 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 33.5,-42.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12218 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,-42.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12219 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-56.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12220 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,-45.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12225 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12226 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12227 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12228 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12229 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12230 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12231 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12232 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12233 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-37.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12234 + components: + - type: Transform + pos: 0.5,-34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12235 + components: + - type: Transform + pos: 0.5,-33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12236 + components: + - type: Transform + pos: 0.5,-32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12237 + components: + - type: Transform + pos: 0.5,-31.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12238 + components: + - type: Transform + pos: 0.5,-30.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12239 + components: + - type: Transform + pos: 0.5,-29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12240 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12241 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12242 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,-28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12243 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,-28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12244 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,-28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12245 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,-28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12246 + components: + - type: Transform + pos: -6.5,-30.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12247 + components: + - type: Transform + pos: -6.5,-31.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12248 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,-28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12249 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,-28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12250 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,-28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12251 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,-28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12252 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,-28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12253 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,-28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12254 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,-28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12255 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,-28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12256 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -17.5,-28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12257 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -18.5,-28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12258 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.5,-28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12259 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,-28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12260 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,-28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12261 + components: + - type: Transform + pos: -24.5,-29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12262 + components: + - type: Transform + pos: -24.5,-30.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12263 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -25.5,-31.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12264 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,-31.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12265 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,-31.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12266 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,-32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12267 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,-32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12268 + components: + - type: Transform + pos: -32.5,-33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12269 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -32.5,-34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12270 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,-30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12271 + components: + - type: Transform + pos: -32.5,-35.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12272 + components: + - type: Transform + pos: -32.5,-36.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12273 + components: + - type: Transform + pos: -32.5,-37.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12274 + components: + - type: Transform + pos: -32.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12275 + components: + - type: Transform + pos: -32.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12276 + components: + - type: Transform + pos: -32.5,-42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12277 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -33.5,-43.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12278 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,-43.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12279 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,-43.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12280 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -37.5,-43.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12281 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -38.5,-43.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12282 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -39.5,-43.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12283 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -40.5,-43.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12284 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -42.5,-32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12285 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -41.5,-34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12286 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -41.5,-33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12287 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -41.5,-35.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12288 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -41.5,-36.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12289 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -41.5,-37.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12290 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -43.5,-37.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12291 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -41.5,-38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12292 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -41.5,-39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12293 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -41.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12294 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -41.5,-42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12295 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,-43.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12296 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 29.5,-31.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12297 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -32.5,-44.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12298 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -32.5,-45.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12299 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -32.5,-46.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12300 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,-47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12301 + components: + - type: Transform + pos: -6.5,-33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12302 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,-37.5 + parent: 2 + - uid: 12303 + components: + - type: Transform + pos: -12.5,-37.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12304 + components: + - type: Transform + pos: -12.5,-43.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12305 + components: + - type: Transform + pos: -12.5,-46.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12306 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,-35.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12307 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,-35.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12308 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,-35.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12309 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,-35.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12310 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,-35.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12311 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,-35.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12312 + components: + - type: Transform + pos: -12.5,-36.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12313 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,-45.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12314 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,-42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12315 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,-39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12316 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,-38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12317 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,-38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12318 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,-38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12319 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12320 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12321 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12322 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,-44.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12323 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,-44.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12324 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,-44.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12325 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,-47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12326 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,-47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12327 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,-47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12328 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,-19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12329 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12330 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12331 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12332 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12333 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12334 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12335 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12336 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12337 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12338 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12339 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12340 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 14.5,-19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12341 + components: + - type: Transform + pos: 30.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12342 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 29.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12343 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 28.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12344 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12345 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12346 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12347 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12348 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12349 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 20.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12350 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 18.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12351 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12352 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 16.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12353 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,-20.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12354 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,-21.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12355 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,-22.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12356 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12357 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,-10.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12358 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,-8.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12359 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 32.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12360 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 33.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12361 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12362 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12363 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 36.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12364 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 37.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12365 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 38.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12366 + components: + - type: Transform + pos: 38.5,-24.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12367 + components: + - type: Transform + pos: 38.5,-22.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12368 + components: + - type: Transform + pos: 38.5,-21.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12369 + components: + - type: Transform + pos: 38.5,-20.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12370 + components: + - type: Transform + pos: 38.5,-18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12371 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 38.5,-15.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12372 + components: + - type: Transform + pos: 38.5,-16.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12373 + components: + - type: Transform + pos: 38.5,-15.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12374 + components: + - type: Transform + pos: 38.5,-14.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12375 + components: + - type: Transform + pos: 38.5,-13.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12376 + components: + - type: Transform + pos: 38.5,-12.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12377 + components: + - type: Transform + pos: 0.5,-24.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12378 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 38.5,-27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12379 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 38.5,-28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12380 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 38.5,-29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12381 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 38.5,-30.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12382 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 38.5,-31.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12383 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 39.5,-32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12384 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,-9.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12385 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,-7.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12386 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,-6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12387 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 40.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12388 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,-11.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12389 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,-11.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12390 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-11.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12391 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-12.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12392 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-11.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12393 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,-46.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12394 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-9.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12395 + components: + - type: Transform + pos: 0.5,-20.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12396 + components: + - type: Transform + pos: 0.5,-21.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12397 + components: + - type: Transform + pos: 0.5,-22.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12398 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-13.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12399 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-10.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12400 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-14.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12401 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-15.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12402 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-16.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12403 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-17.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12404 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12405 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-0.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12406 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12407 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-2.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12408 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-3.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12409 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-4.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12410 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-5.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12411 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12412 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-7.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12413 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-8.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12414 + components: + - type: Transform + pos: 5.5,-43.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12415 + components: + - type: Transform + pos: 5.5,-44.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12416 + components: + - type: Transform + pos: 5.5,-42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12417 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-46.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12418 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,-45.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12419 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-46.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12420 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-46.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12421 + components: + - type: Transform + pos: 6.5,-48.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12422 + components: + - type: Transform + pos: 6.5,-47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12423 + components: + - type: Transform + pos: 6.5,-49.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12424 + components: + - type: Transform + pos: 6.5,-51.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12425 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,-54.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12426 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,-54.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12427 + components: + - type: Transform + pos: 2.5,-55.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12428 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-56.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12429 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-56.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12430 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-56.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12431 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-56.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12432 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,-56.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12433 + components: + - type: Transform + pos: -21.5,-24.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12434 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,-56.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12435 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,-56.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12436 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,-57.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12437 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,-57.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12438 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,-57.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12439 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,-57.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12440 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,-57.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12441 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,-56.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12442 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,-56.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12443 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-57.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12444 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-57.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12445 + components: + - type: Transform + pos: -4.5,-57.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12446 + components: + - type: Transform + pos: -3.5,-61.5 + parent: 2 + - uid: 12447 + components: + - type: Transform + pos: -4.5,-58.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12448 + components: + - type: Transform + pos: -4.5,-59.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12449 + components: + - type: Transform + pos: -4.5,-60.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12450 + components: + - type: Transform + pos: -5.5,-62.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12451 + components: + - type: Transform + pos: -5.5,-65.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12452 + components: + - type: Transform + pos: -5.5,-64.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12453 + components: + - type: Transform + pos: -5.5,-63.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12454 + components: + - type: Transform + pos: -5.5,-62.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12455 + components: + - type: Transform + pos: -5.5,-66.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12456 + components: + - type: Transform + pos: -5.5,-67.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12457 + components: + - type: Transform + pos: -5.5,-68.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12458 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,-70.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12459 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,-71.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12460 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,-72.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12461 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,-73.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12462 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,-74.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12463 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,-75.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12464 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,-76.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12465 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-76.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12466 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-76.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12467 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-76.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12468 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-76.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12469 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,-76.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12470 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-76.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12471 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-76.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12472 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-76.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12473 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,-76.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12474 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,-76.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12475 + components: + - type: Transform + pos: 6.5,-75.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12476 + components: + - type: Transform + pos: 6.5,-65.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12477 + components: + - type: Transform + pos: 6.5,-71.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12478 + components: + - type: Transform + pos: 6.5,-72.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12479 + components: + - type: Transform + pos: 6.5,-73.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12480 + components: + - type: Transform + pos: 6.5,-74.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12481 + components: + - type: Transform + pos: 6.5,-70.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12482 + components: + - type: Transform + pos: 6.5,-66.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12483 + components: + - type: Transform + pos: 6.5,-67.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12484 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,-68.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12485 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,-64.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12486 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,-64.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12487 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-64.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12488 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,-64.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12489 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,-64.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12490 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,-56.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12491 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 14.5,-18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12492 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 14.5,-17.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12493 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 14.5,-16.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12494 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 14.5,-20.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12495 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 14.5,-21.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12496 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 14.5,-22.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12497 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 14.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12498 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 14.5,-12.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12499 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 14.5,-13.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12500 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 14.5,-14.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12501 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,-11.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12502 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,-11.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12503 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 16.5,-11.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12504 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12505 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 44.5,-32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12506 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,-32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12507 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 42.5,-32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12508 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 41.5,-32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12509 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 45.5,-32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12510 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-56.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12511 + components: + - type: Transform + pos: -21.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12512 + components: + - type: Transform + pos: -23.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12513 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12514 + components: + - type: Transform + pos: -23.5,-24.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12515 + components: + - type: Transform + pos: -23.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12516 + components: + - type: Transform + pos: -23.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12517 + components: + - type: Transform + pos: -23.5,-27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12518 + components: + - type: Transform + pos: -21.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12519 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12520 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -30.5,-24.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12521 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -30.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12522 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12523 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12524 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12525 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12526 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12527 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -33.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12528 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,-11.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12529 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,-13.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12530 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,-14.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12531 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,-15.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12532 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,-16.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12533 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,-17.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12534 + components: + - type: Transform + pos: -34.5,-19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12535 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,-14.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12536 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,-21.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12537 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,-22.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12538 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,-6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12539 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,-7.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12540 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,-8.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12541 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,-9.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12542 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,-10.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12543 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,-12.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12544 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12545 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,-20.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12546 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,-13.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12547 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,-10.5 + parent: 2 + - type: AtmosPipeColor + color: '#031CFCFF' + - uid: 12548 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,-11.5 + parent: 2 + - type: AtmosPipeColor + color: '#031CFCFF' + - uid: 12549 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,-12.5 + parent: 2 + - type: AtmosPipeColor + color: '#031CFCFF' + - uid: 12550 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,-13.5 + parent: 2 + - type: AtmosPipeColor + color: '#031CFCFF' + - uid: 12551 + components: + - type: Transform + pos: -32.5,-0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12552 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,-16.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12553 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,-15.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12554 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,-8.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12555 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,-10.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12556 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,-9.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12557 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,2.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12558 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,-7.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12559 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,-6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12560 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12561 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,-0.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12562 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,-1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12563 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,-2.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12564 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,-3.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12565 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,-4.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12566 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,-5.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12567 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12568 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12569 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,5.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12570 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,4.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12571 + components: + - type: Transform + pos: -34.5,-2.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12572 + components: + - type: Transform + pos: -34.5,-3.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12573 + components: + - type: Transform + pos: -34.5,-4.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12574 + components: + - type: Transform + pos: -34.5,-1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12575 + components: + - type: Transform + pos: -34.5,-1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12576 + components: + - type: Transform + pos: -34.5,-0.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12577 + components: + - type: Transform + pos: -34.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12578 + components: + - type: Transform + pos: -34.5,2.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12579 + components: + - type: Transform + pos: -34.5,3.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12580 + components: + - type: Transform + pos: -34.5,4.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12581 + components: + - type: Transform + pos: -34.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12582 + components: + - type: Transform + pos: -34.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12583 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12584 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12585 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12586 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12587 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12588 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,12.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12589 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12590 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12591 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -33.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12592 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12593 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12594 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -25.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12595 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12596 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12597 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -28.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12598 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12599 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12600 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12601 + components: + - type: Transform + pos: 0.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12602 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12603 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12604 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12605 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -18.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12606 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -17.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12607 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12608 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12609 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12610 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12611 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12612 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12613 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12614 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12615 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12616 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12617 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12618 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12619 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12620 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12621 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12622 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12623 + components: + - type: Transform + pos: -30.5,-0.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12624 + components: + - type: Transform + pos: -30.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12625 + components: + - type: Transform + pos: -30.5,-1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12626 + components: + - type: Transform + pos: -30.5,-2.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12627 + components: + - type: Transform + pos: -30.5,-3.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12628 + components: + - type: Transform + pos: -30.5,-4.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12629 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12630 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12631 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12632 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12633 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12634 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12635 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12636 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12637 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12638 + components: + - type: Transform + pos: 0.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12639 + components: + - type: Transform + pos: 0.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12640 + components: + - type: Transform + pos: 0.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12641 + components: + - type: Transform + pos: 0.5,12.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12642 + components: + - type: Transform + pos: 0.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12643 + components: + - type: Transform + pos: 0.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12644 + components: + - type: Transform + pos: 0.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12645 + components: + - type: Transform + pos: 0.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12646 + components: + - type: Transform + pos: 0.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12647 + components: + - type: Transform + pos: 0.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12648 + components: + - type: Transform + pos: 0.5,5.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12649 + components: + - type: Transform + pos: 0.5,4.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12650 + components: + - type: Transform + pos: 0.5,3.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12651 + components: + - type: Transform + pos: 0.5,2.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12652 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12653 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12654 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12655 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12656 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12657 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12658 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12659 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12660 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12661 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12662 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12663 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12664 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12665 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12666 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12667 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12668 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12669 + components: + - type: Transform + pos: -16.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12670 + components: + - type: Transform + pos: -16.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12671 + components: + - type: Transform + pos: -16.5,24.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12672 + components: + - type: Transform + pos: -16.5,23.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12673 + components: + - type: Transform + pos: -16.5,22.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12674 + components: + - type: Transform + pos: -16.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12675 + components: + - type: Transform + pos: -16.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12676 + components: + - type: Transform + pos: -16.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12677 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,5.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12678 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,5.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12679 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,5.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12680 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,5.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12681 + components: + - type: Transform + pos: 32.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12682 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12683 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12684 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12685 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12686 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12687 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12688 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12689 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12690 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12691 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12692 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12693 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12694 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12695 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12696 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12697 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12698 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12699 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12700 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12701 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12702 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -16.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12703 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -16.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12704 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -16.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12705 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -16.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12706 + components: + - type: Transform + pos: -24.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12707 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12708 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12709 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12710 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12711 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -17.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12712 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12713 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12714 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12715 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -18.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12716 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12717 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -25.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12718 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12719 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -28.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12720 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12721 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12722 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12723 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -33.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12724 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12725 + components: + - type: Transform + pos: -35.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12726 + components: + - type: Transform + pos: -35.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12727 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -35.5,24.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12728 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,23.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12729 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,23.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12730 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,23.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12731 + components: + - type: Transform + pos: 0.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12732 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12733 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12734 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -38.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12735 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -39.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12736 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -40.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12737 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -41.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12738 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -41.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12739 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -41.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12740 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -41.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12741 + components: + - type: Transform + pos: -39.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12742 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12743 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -37.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12744 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12745 + components: + - type: Transform + pos: -24.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12746 + components: + - type: Transform + pos: -24.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12747 + components: + - type: Transform + pos: -24.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12748 + components: + - type: Transform + pos: -24.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12749 + components: + - type: Transform + pos: -24.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12750 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -25.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12751 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12752 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12753 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12754 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12755 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12756 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12757 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12758 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12759 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12760 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12761 + components: + - type: Transform + pos: 0.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12762 + components: + - type: Transform + pos: 0.5,24.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12763 + components: + - type: Transform + pos: 0.5,23.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12764 + components: + - type: Transform + pos: 0.5,22.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12765 + components: + - type: Transform + pos: 0.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12766 + components: + - type: Transform + pos: 0.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12767 + components: + - type: Transform + pos: 0.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12768 + components: + - type: Transform + pos: 0.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12769 + components: + - type: Transform + pos: 0.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12770 + components: + - type: Transform + pos: 0.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12771 + components: + - type: Transform + pos: 0.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12772 + components: + - type: Transform + pos: 0.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12773 + components: + - type: Transform + pos: 0.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12774 + components: + - type: Transform + pos: 0.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12775 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12776 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12777 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12778 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12779 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,56.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12780 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,55.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12781 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,54.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12782 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,52.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12783 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,51.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12784 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,50.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12785 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12786 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12787 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12788 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12789 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12790 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12791 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12792 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12793 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12794 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12795 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12796 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12797 + components: + - type: Transform + pos: -2.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12798 + components: + - type: Transform + pos: -2.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12799 + components: + - type: Transform + pos: -2.5,56.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12800 + components: + - type: Transform + pos: -2.5,55.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12801 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,54.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12802 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,54.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12803 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,54.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12804 + components: + - type: Transform + pos: -6.5,53.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12805 + components: + - type: Transform + pos: -6.5,52.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12806 + components: + - type: Transform + pos: -6.5,51.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12807 + components: + - type: Transform + pos: -6.5,50.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12808 + components: + - type: Transform + pos: -6.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12809 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12810 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12811 + components: + - type: Transform + pos: 4.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12812 + components: + - type: Transform + pos: 4.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12813 + components: + - type: Transform + pos: 4.5,56.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12814 + components: + - type: Transform + pos: 4.5,55.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12815 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,51.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12816 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12817 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12818 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12819 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12820 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12821 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12822 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12823 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12824 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12825 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12826 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,50.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12827 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,52.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12828 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,52.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12829 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12830 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,50.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12831 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,54.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12832 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,53.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12833 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,53.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12834 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,53.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12835 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12836 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12837 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12838 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12839 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12840 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12841 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12842 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12843 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12844 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12845 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12846 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12847 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 26.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12848 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12849 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12850 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12851 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12852 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 20.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12853 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12854 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 18.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12855 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12856 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 16.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12857 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12858 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12859 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 13.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12860 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12861 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,2.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12862 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,3.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12863 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,4.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12864 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,5.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12865 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12866 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12867 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12868 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12869 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12870 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 23.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12871 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12872 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12873 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12874 + components: + - type: Transform + pos: 28.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12875 + components: + - type: Transform + pos: 28.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12876 + components: + - type: Transform + pos: 28.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12877 + components: + - type: Transform + pos: 28.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12878 + components: + - type: Transform + pos: 28.5,12.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12879 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12880 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12881 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12882 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12883 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12884 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 22.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12886 + components: + - type: Transform + pos: 21.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12887 + components: + - type: Transform + pos: 21.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12888 + components: + - type: Transform + pos: 21.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12889 + components: + - type: Transform + pos: 21.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12890 + components: + - type: Transform + pos: 21.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12891 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 29.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12892 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12893 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12894 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12895 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12896 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12897 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12898 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12899 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12900 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12901 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12902 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 40.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12903 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12904 + components: + - type: Transform + pos: 28.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12905 + components: + - type: Transform + pos: 28.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12906 + components: + - type: Transform + pos: 28.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12907 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12908 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12909 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 29.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12910 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12911 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12912 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12913 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 33.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12914 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12915 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,22.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12916 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,23.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12917 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,24.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12918 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12919 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12920 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 29.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12921 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12922 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 32.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12923 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 33.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12924 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12925 + components: + - type: Transform + pos: 28.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12926 + components: + - type: Transform + pos: 28.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12927 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12928 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12929 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12930 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12931 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 23.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12932 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12933 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 20.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12934 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,-57.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12935 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12936 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12937 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12938 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12939 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12940 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12941 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12942 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12943 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12944 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 17.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12945 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 16.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12946 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12947 + components: + - type: Transform + pos: 19.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12948 + components: + - type: Transform + pos: 19.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12949 + components: + - type: Transform + pos: 19.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12950 + components: + - type: Transform + pos: 19.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12951 + components: + - type: Transform + pos: 19.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12952 + components: + - type: Transform + pos: 19.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12953 + components: + - type: Transform + pos: 28.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12954 + components: + - type: Transform + pos: 28.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12955 + components: + - type: Transform + pos: 28.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12956 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12957 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12958 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 29.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12959 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12960 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 12961 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12962 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12963 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12964 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12965 + components: + - type: Transform + pos: 14.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12966 + components: + - type: Transform + pos: 14.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12967 + components: + - type: Transform + pos: 14.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12968 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12969 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12970 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12971 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12972 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 41.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12973 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 42.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12974 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12975 + components: + - type: Transform + pos: 44.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12976 + components: + - type: Transform + pos: 44.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12977 + components: + - type: Transform + pos: 44.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12978 + components: + - type: Transform + pos: 44.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12979 + components: + - type: Transform + pos: 44.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12980 + components: + - type: Transform + pos: 44.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12981 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12982 + components: + - type: Transform + pos: 44.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12983 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12984 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12985 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12986 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12987 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12988 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12989 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12990 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12991 + components: + - type: Transform + pos: 44.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12992 + components: + - type: Transform + pos: 44.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12993 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 36.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12994 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 36.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12995 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 36.5,24.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12996 + components: + - type: Transform + pos: -24.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12997 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12998 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12999 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13000 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13001 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13002 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13003 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13004 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13005 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,12.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13006 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13007 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13008 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 43.5,-5.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13009 + components: + - type: Transform + pos: 32.5,-8.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13010 + components: + - type: Transform + pos: 32.5,-9.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13011 + components: + - type: Transform + pos: 32.5,-10.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13012 + components: + - type: Transform + pos: 32.5,-7.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13013 + components: + - type: Transform + pos: 32.5,-5.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13014 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 33.5,-4.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13015 + components: + - type: Transform + pos: 32.5,-6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13016 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 34.5,-2.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13017 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 34.5,-3.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13018 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 34.5,-1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13019 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 34.5,-0.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13020 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 34.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13021 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13022 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13023 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13024 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13025 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 29.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13026 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,-11.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13027 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 40.5,-11.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13028 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,-11.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13029 + components: + - type: Transform + pos: 30.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13030 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13031 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13032 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,5.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13033 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13034 + components: + - type: Transform + pos: 10.5,3.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13035 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13036 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13037 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13038 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13039 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13040 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13041 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13042 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13043 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,12.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13044 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,12.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13045 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13046 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13047 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13048 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13049 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13050 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13051 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13052 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-57.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13053 + components: + - type: Transform + pos: 6.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13054 + components: + - type: Transform + pos: 6.5,-27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13055 + components: + - type: Transform + pos: 6.5,-28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13056 + components: + - type: Transform + pos: 6.5,-29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13057 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,-24.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13058 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13059 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,-22.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13060 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,-21.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13061 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,-20.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13062 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,-24.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13063 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,-22.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13064 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13065 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,-21.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13066 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,-20.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13067 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,-19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13068 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 38.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13069 + components: + - type: Transform + pos: 43.5,-12.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13070 + components: + - type: Transform + pos: 43.5,-13.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13071 + components: + - type: Transform + pos: 43.5,-14.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13072 + components: + - type: Transform + pos: 43.5,-15.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13073 + components: + - type: Transform + pos: 43.5,-16.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13074 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13075 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 40.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13076 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13077 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13078 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13079 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13080 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13081 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 44.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13082 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13083 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,-27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13084 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,-28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13085 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,-29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13086 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,-30.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13087 + components: + - type: Transform + pos: 25.5,-26.5 + parent: 2 + - uid: 13088 + components: + - type: Transform + pos: 6.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13089 + components: + - type: Transform + pos: 6.5,-42.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13090 + components: + - type: Transform + pos: 6.5,-43.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13091 + components: + - type: Transform + pos: 6.5,-44.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13092 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,-52.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13093 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,-51.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13094 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,-51.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13095 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,-45.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13096 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,-45.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13097 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-45.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13098 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-45.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13099 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-45.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13100 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.5,-51.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13101 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,-45.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13102 + components: + - type: Transform + pos: 8.5,-46.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13103 + components: + - type: Transform + pos: 8.5,-47.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13104 + components: + - type: Transform + pos: 8.5,-48.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13105 + components: + - type: Transform + pos: 8.5,-49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13106 + components: + - type: Transform + pos: 8.5,-50.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13107 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,-52.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13108 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,-52.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13109 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13110 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,-53.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13111 + components: + - type: Transform + pos: 30.5,-27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13112 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,-52.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13113 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,-53.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13114 + components: + - type: Transform + pos: 30.5,-28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13115 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,-54.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13116 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,-30.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13117 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,-31.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13118 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 38.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13119 + components: + - type: Transform + pos: 42.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13120 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13121 + components: + - type: Transform + pos: 42.5,12.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13122 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13123 + components: + - type: Transform + pos: 42.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13124 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13125 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 41.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13126 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 33.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13127 + components: + - type: Transform + pos: 42.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13128 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-57.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13129 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-57.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13130 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-56.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13131 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-57.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13132 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,-57.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13133 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,-57.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13134 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,-58.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13135 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,-58.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13136 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,-58.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13137 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,-58.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13138 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,-58.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13139 + components: + - type: Transform + pos: -2.5,-58.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13140 + components: + - type: Transform + pos: -2.5,-59.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13141 + components: + - type: Transform + pos: -2.5,-60.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13142 + components: + - type: Transform + pos: -2.5,-61.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13143 + components: + - type: Transform + pos: -2.5,-62.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13144 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-63.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13145 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,-63.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13146 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,-63.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13147 + components: + - type: Transform + pos: -6.5,-64.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13148 + components: + - type: Transform + pos: -6.5,-65.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13149 + components: + - type: Transform + pos: -6.5,-66.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13150 + components: + - type: Transform + pos: -6.5,-67.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13151 + components: + - type: Transform + pos: -6.5,-68.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13152 + components: + - type: Transform + pos: -6.5,-69.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13153 + components: + - type: Transform + pos: -6.5,-70.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13154 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,-72.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13155 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,-72.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13156 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-72.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13157 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-72.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13158 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-72.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13159 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-72.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13160 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,-72.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13161 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-72.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13162 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-72.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13163 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-72.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13164 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,-72.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13165 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,-72.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13166 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,-72.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13167 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,-71.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13168 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,-70.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13169 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,-69.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13170 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,-68.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13171 + components: + - type: Transform + pos: 7.5,-66.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13172 + components: + - type: Transform + pos: 7.5,-65.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13173 + components: + - type: Transform + pos: 7.5,-64.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13174 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,-63.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13175 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-63.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13176 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,-63.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13177 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,-63.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13178 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,-55.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13179 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,-55.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13180 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13181 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13182 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13183 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13184 + components: + - type: Transform + pos: 1.5,-34.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13185 + components: + - type: Transform + pos: 1.5,-33.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13186 + components: + - type: Transform + pos: 1.5,-32.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13187 + components: + - type: Transform + pos: 1.5,-31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13188 + components: + - type: Transform + pos: 1.5,-30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13189 + components: + - type: Transform + pos: 1.5,-29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13190 + components: + - type: Transform + pos: 1.5,-28.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13191 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13192 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13193 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-24.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13194 + components: + - type: Transform + pos: 1.5,-22.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13195 + components: + - type: Transform + pos: 1.5,-20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13196 + components: + - type: Transform + pos: 1.5,-18.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13197 + components: + - type: Transform + pos: 1.5,-17.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13198 + components: + - type: Transform + pos: 1.5,-16.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13199 + components: + - type: Transform + pos: 1.5,-15.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13200 + components: + - type: Transform + pos: 1.5,-14.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13201 + components: + - type: Transform + pos: 1.5,-13.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13202 + components: + - type: Transform + pos: 1.5,-12.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13203 + components: + - type: Transform + pos: 1.5,-11.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13204 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13205 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13206 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13207 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,-21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13208 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,-21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13209 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13210 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13211 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13212 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13213 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13214 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13215 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13216 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13217 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13218 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13219 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13220 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13221 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13222 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13223 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13224 + components: + - type: Transform + pos: 7.5,-24.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13225 + components: + - type: Transform + pos: 7.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13226 + components: + - type: Transform + pos: 7.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13227 + components: + - type: Transform + pos: 7.5,-27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13228 + components: + - type: Transform + pos: 7.5,-28.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13229 + components: + - type: Transform + pos: 7.5,-29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13230 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13231 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13232 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13233 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13234 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 12.5,-21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13235 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 12.5,-20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13236 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 12.5,-19.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13237 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 12.5,-18.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13238 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 12.5,-17.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13239 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 12.5,-16.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13240 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 12.5,-15.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13241 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,-14.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13242 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,-13.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13243 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,-12.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13244 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,-11.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13245 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,-10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13246 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,-9.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13247 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,-9.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13248 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 16.5,-9.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13249 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 13.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13250 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13251 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13252 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 16.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13253 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13254 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 17.5,-22.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13255 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 17.5,-21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13256 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 17.5,-20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13257 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13258 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 20.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13259 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 17.5,-24.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13260 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 17.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13261 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 17.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13262 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 17.5,-27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13263 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 17.5,-28.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13264 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 17.5,-29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13265 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 17.5,-30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13266 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13267 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13268 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13269 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,-22.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13270 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,-21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13271 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,-20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13272 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,-19.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13273 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13274 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13275 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 29.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13276 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13277 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,-22.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13278 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,-21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13279 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,-20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13280 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,-19.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13281 + components: + - type: Transform + pos: 31.5,-24.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13282 + components: + - type: Transform + pos: 31.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13283 + components: + - type: Transform + pos: 31.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13284 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 33.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13285 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13286 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13287 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 36.5,-22.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13288 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 36.5,-21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13289 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 36.5,-20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13290 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 36.5,-19.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13291 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13292 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13293 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13294 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,-24.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13295 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13296 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13297 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,-27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13298 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,-28.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13299 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 42.5,-30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13300 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,-30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13301 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 44.5,-30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13302 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 45.5,-30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13303 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13304 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13305 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13306 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 44.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13307 + components: + - type: Transform + pos: 36.5,-17.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13308 + components: + - type: Transform + pos: 32.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FC1303FF' + - uid: 13309 + components: + - type: Transform + pos: 32.5,-28.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13310 + components: + - type: Transform + pos: 32.5,-29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13311 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,-30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13312 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,-30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13313 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 29.5,-30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13314 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,-30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13315 + components: + - type: Transform + pos: 36.5,-16.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13316 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 37.5,-15.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13317 + components: + - type: Transform + pos: 36.5,-14.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13318 + components: + - type: Transform + pos: 36.5,-13.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13319 + components: + - type: Transform + pos: 36.5,-12.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13320 + components: + - type: Transform + pos: 36.5,-11.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13321 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,-10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13322 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 40.5,-10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13323 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,-10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13324 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,-11.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13325 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,-10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13326 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,-10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13327 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 43.5,-6.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13328 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 43.5,-7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13329 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 43.5,-8.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13330 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 43.5,-9.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13331 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,-4.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13332 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 40.5,-4.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13333 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 39.5,-4.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13334 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 38.5,-4.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13335 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 37.5,-4.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13336 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 36.5,-4.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13337 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 35.5,-3.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13338 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 35.5,-2.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13339 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 35.5,-1.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13340 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 35.5,-0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13341 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13342 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13343 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13344 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13345 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13346 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,-0.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13347 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,-1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13348 + components: + - type: Transform + pos: 29.5,-0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13349 + components: + - type: Transform + pos: 29.5,-1.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13350 + components: + - type: Transform + pos: 29.5,-2.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13351 + components: + - type: Transform + pos: 28.5,-2.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13352 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 28.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13353 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13354 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 26.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13355 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13356 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13357 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13358 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13359 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 20.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13360 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13361 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 18.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13362 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13363 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 16.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13364 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13365 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13366 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 13.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13367 + components: + - type: Transform + pos: 30.5,2.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13368 + components: + - type: Transform + pos: 30.5,3.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13369 + components: + - type: Transform + pos: 30.5,4.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13370 + components: + - type: Transform + pos: 30.5,5.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13371 + components: + - type: Transform + pos: 30.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13372 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 29.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13373 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13374 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13375 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13376 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13377 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13378 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 23.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13379 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13380 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 20.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13381 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13382 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13383 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13384 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13385 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13386 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13387 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,12.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13388 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13389 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 20.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13390 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13391 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 32.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13392 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 33.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13393 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13394 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13395 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 36.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13396 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 37.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13397 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 38.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13398 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 39.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13399 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13400 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13401 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13402 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,12.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13403 + components: + - type: Transform + pos: 42.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13404 + components: + - type: Transform + pos: 30.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13405 + components: + - type: Transform + pos: 30.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13406 + components: + - type: Transform + pos: 30.5,12.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13407 + components: + - type: Transform + pos: 30.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13408 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 29.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13409 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13410 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13411 + components: + - type: Transform + pos: 26.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13412 + components: + - type: Transform + pos: 26.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13413 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13414 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13415 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 23.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13416 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13417 + components: + - type: Transform + pos: 22.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13418 + components: + - type: Transform + pos: 22.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13419 + components: + - type: Transform + pos: 22.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13420 + components: + - type: Transform + pos: 22.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13421 + components: + - type: Transform + pos: 30.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13422 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13423 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 32.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13424 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13425 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 37.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13426 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 38.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13427 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 39.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13428 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 40.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13429 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13430 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13431 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13432 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13433 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,22.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13434 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13435 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,24.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13436 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13437 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13438 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13439 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13440 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13441 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13442 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13443 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13444 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13445 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13446 + components: + - type: Transform + pos: 38.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13447 + components: + - type: Transform + pos: 38.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13448 + components: + - type: Transform + pos: 38.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13449 + components: + - type: Transform + pos: 38.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13450 + components: + - type: Transform + pos: 38.5,24.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13451 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 39.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13452 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 40.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13453 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 41.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13454 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13455 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13456 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13457 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13458 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13459 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13460 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13461 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13462 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13463 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13464 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13465 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 40.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13466 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 39.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13467 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 39.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13468 + components: + - type: Transform + pos: 30.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13469 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13470 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13471 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 29.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13472 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13473 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13474 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13475 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13476 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13477 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 29.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13478 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13479 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13480 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13481 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13482 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13483 + components: + - type: Transform + pos: 33.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13484 + components: + - type: Transform + pos: 33.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13485 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 29.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13486 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 28.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13487 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13488 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 26.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13489 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13490 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13491 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13492 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13493 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13494 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13495 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13496 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13497 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13498 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 20.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13499 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13500 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13501 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 17.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13502 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13503 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13504 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13505 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13506 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13507 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13508 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13509 + components: + - type: Transform + pos: 14.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13510 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 16.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13511 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 16.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13512 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 12.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13513 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 12.5,2.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13514 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,4.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13515 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13516 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13517 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13518 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13519 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13520 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13521 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,12.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13522 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13523 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13524 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13525 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13526 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13527 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13528 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13529 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13530 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13531 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13532 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-9.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13533 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-8.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13534 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13535 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-6.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13536 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-5.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13537 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-4.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13538 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-3.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13539 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-2.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13540 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-1.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13541 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13542 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13543 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13544 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13545 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13546 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13547 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13548 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13549 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13550 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13551 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13552 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13553 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13554 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13555 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13556 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13557 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13558 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13559 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13560 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13561 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -19.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13562 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13563 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13564 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13565 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13566 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13567 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13568 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13569 + components: + - type: Transform + pos: -28.5,-0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13570 + components: + - type: Transform + pos: -28.5,-1.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13571 + components: + - type: Transform + pos: -28.5,-2.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13572 + components: + - type: Transform + pos: -28.5,-3.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13573 + components: + - type: Transform + pos: -28.5,-4.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13574 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -29.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13575 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13576 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13577 + components: + - type: Transform + pos: -32.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13578 + components: + - type: Transform + pos: -32.5,2.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13579 + components: + - type: Transform + pos: -32.5,3.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13580 + components: + - type: Transform + pos: -32.5,4.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13581 + components: + - type: Transform + pos: -32.5,5.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13582 + components: + - type: Transform + pos: -32.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13583 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13584 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13585 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13586 + components: + - type: Transform + pos: -28.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13587 + components: + - type: Transform + pos: -28.5,5.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13588 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13589 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13590 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13591 + components: + - type: Transform + pos: -24.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13592 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -32.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13593 + components: + - type: Transform + pos: -32.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13594 + components: + - type: Transform + pos: -32.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13595 + components: + - type: Transform + pos: -32.5,12.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13596 + components: + - type: Transform + pos: -32.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13597 + components: + - type: Transform + pos: -32.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13598 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -33.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13599 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13600 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13601 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13602 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -37.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13603 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -38.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13604 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -40.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13605 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -39.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13606 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -39.5,5.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13607 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -39.5,4.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13608 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -39.5,3.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13609 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -39.5,2.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13610 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -39.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13611 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -39.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13612 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -39.5,-0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13613 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -39.5,-2.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13614 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -39.5,-3.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13615 + components: + - type: Transform + pos: -39.5,-4.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13616 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -40.5,-10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13617 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -40.5,-11.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13618 + components: + - type: Transform + pos: -40.5,-12.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13619 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -39.5,-5.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13620 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -39.5,-6.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13621 + components: + - type: Transform + pos: -32.5,-2.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13622 + components: + - type: Transform + pos: -32.5,-1.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13623 + components: + - type: Transform + pos: -32.5,-3.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13624 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,3.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13625 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,3.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13626 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -40.5,-8.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13627 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -39.5,-13.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13628 + components: + - type: Transform + pos: -38.5,-14.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13629 + components: + - type: Transform + pos: -38.5,-15.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13630 + components: + - type: Transform + pos: -38.5,-16.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13631 + components: + - type: Transform + pos: -38.5,-17.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13632 + components: + - type: Transform + pos: -38.5,-18.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13633 + components: + - type: Transform + pos: -32.5,-4.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13634 + components: + - type: Transform + pos: -32.5,-5.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13635 + components: + - type: Transform + pos: -32.5,-7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13636 + components: + - type: Transform + pos: -32.5,-8.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13637 + components: + - type: Transform + pos: -32.5,-9.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13638 + components: + - type: Transform + pos: -32.5,-10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13639 + components: + - type: Transform + pos: -32.5,-12.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13640 + components: + - type: Transform + pos: -32.5,-13.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13641 + components: + - type: Transform + pos: -32.5,-14.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13642 + components: + - type: Transform + pos: -32.5,-15.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13643 + components: + - type: Transform + pos: -32.5,-17.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13644 + components: + - type: Transform + pos: -32.5,-18.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13645 + components: + - type: Transform + pos: -32.5,-19.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13646 + components: + - type: Transform + pos: -32.5,-20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13647 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.5,-21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13648 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,-18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13649 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,-18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13650 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,-18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13651 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,-18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13652 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,-16.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13653 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,-16.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13654 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -29.5,-16.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13655 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,-16.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13656 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -30.5,-27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13657 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -30.5,-28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13658 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -30.5,-29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13659 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -29.5,-21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13660 + components: + - type: Transform + pos: -28.5,-22.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13661 + components: + - type: Transform + pos: -28.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13662 + components: + - type: Transform + pos: -28.5,-24.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13663 + components: + - type: Transform + pos: -28.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13664 + components: + - type: Transform + pos: -28.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13665 + components: + - type: Transform + pos: -28.5,-27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13666 + components: + - type: Transform + pos: -28.5,-28.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13667 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,-29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13668 + components: + - type: Transform + pos: -26.5,-28.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13669 + components: + - type: Transform + pos: -26.5,-27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13670 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,-29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13671 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.5,-29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13672 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -30.5,-30.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13673 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -30.5,-31.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13674 + components: + - type: Transform + pos: -22.5,-29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13675 + components: + - type: Transform + pos: -22.5,-30.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13676 + components: + - type: Transform + pos: -22.5,-31.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13677 + components: + - type: Transform + pos: -20.5,-27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13678 + components: + - type: Transform + pos: -20.5,-28.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13679 + components: + - type: Transform + pos: -20.5,-29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13680 + components: + - type: Transform + pos: -20.5,-30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13681 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,-12.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13682 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,-12.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13683 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,-12.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13684 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,-12.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13685 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,-11.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13686 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,-11.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13687 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13688 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -18.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13689 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,-27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13690 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13691 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13692 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13693 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,-24.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13694 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13695 + components: + - type: Transform + pos: -17.5,-21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13696 + components: + - type: Transform + pos: -17.5,-20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13697 + components: + - type: Transform + pos: -15.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13698 + components: + - type: Transform + pos: -15.5,-22.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13699 + components: + - type: Transform + pos: -15.5,-21.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13700 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13701 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13702 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13703 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13704 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13705 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13706 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13707 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13708 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13709 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,-27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13710 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,-28.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13711 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,-29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13712 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,-30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13713 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,-31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13714 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,-31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13715 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,-32.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13716 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,-33.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13717 + components: + - type: Transform + pos: -9.5,-35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13718 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,-36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13719 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,-36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13720 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,-36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13721 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,-36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13722 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,-36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13723 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,-37.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13724 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,-38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13725 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,-39.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13726 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13727 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13728 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13729 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13730 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13731 + components: + - type: Transform + pos: -10.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13732 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,-43.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13733 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,-43.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13734 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,-43.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13735 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,-43.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13736 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,-43.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13737 + components: + - type: Transform + pos: -10.5,-44.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13738 + components: + - type: Transform + pos: -10.5,-45.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13739 + components: + - type: Transform + pos: -10.5,-47.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13740 + components: + - type: Transform + pos: -10.5,-48.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13741 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,-49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13742 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,-49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13743 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,-49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13744 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,-49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13745 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,-49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13746 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,-46.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13747 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,-46.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13748 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,-46.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13749 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,-46.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13750 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,-46.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13751 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-37.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13752 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-37.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13753 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-37.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13754 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-36.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13755 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-36.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13756 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-36.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13757 + components: + - type: Transform + pos: -4.5,-37.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13758 + components: + - type: Transform + pos: -4.5,-38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13759 + components: + - type: Transform + pos: -4.5,-39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13760 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13761 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,-29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13762 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,-29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13763 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -33.5,-32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13764 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,-32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13765 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -35.5,-31.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13766 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -35.5,-30.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13767 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -35.5,-29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13768 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,-31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13769 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,-32.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13770 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,-33.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13771 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,-34.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13772 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,-35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13773 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,-36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13774 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,-36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13775 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -37.5,-36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13776 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,-38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13777 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,-38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13778 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,-38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13779 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -37.5,-38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13780 + components: + - type: Transform + pos: -34.5,-37.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13781 + components: + - type: Transform + pos: -34.5,-38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13782 + components: + - type: Transform + pos: -34.5,-39.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13783 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13784 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13785 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13786 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -29.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13787 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,-39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13788 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,-39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13789 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -43.5,-34.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13790 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -43.5,-35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13791 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -43.5,-36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13792 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -43.5,-37.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13793 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -43.5,-38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13794 + components: + - type: Transform + pos: -43.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13795 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -42.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13796 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -41.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13797 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -40.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13798 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -39.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13799 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -38.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13800 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -37.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13801 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13802 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13803 + components: + - type: Transform + pos: -34.5,-42.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13804 + components: + - type: Transform + pos: -34.5,-43.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13805 + components: + - type: Transform + pos: -34.5,-44.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13806 + components: + - type: Transform + pos: -34.5,-45.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13807 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,-47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13808 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -29.5,-47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13809 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,-47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13810 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,-46.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13811 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,-46.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13812 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,-46.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13813 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,-46.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13814 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -29.5,-46.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13815 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,-46.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13816 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,-46.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13817 + components: + - type: Transform + pos: -34.5,-47.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13818 + components: + - type: Transform + pos: -34.5,-48.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13819 + components: + - type: Transform + pos: 1.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13820 + components: + - type: Transform + pos: 1.5,2.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13821 + components: + - type: Transform + pos: 1.5,3.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13822 + components: + - type: Transform + pos: 1.5,4.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13823 + components: + - type: Transform + pos: 1.5,5.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13824 + components: + - type: Transform + pos: 1.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13825 + components: + - type: Transform + pos: 1.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13826 + components: + - type: Transform + pos: 1.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13827 + components: + - type: Transform + pos: 1.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13828 + components: + - type: Transform + pos: 1.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13829 + components: + - type: Transform + pos: 1.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13830 + components: + - type: Transform + pos: 1.5,12.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13831 + components: + - type: Transform + pos: 1.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13832 + components: + - type: Transform + pos: 1.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13833 + components: + - type: Transform + pos: 1.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13834 + components: + - type: Transform + pos: 1.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13835 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13836 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13837 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13838 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13839 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13840 + components: + - type: Transform + pos: 6.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13841 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13842 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13843 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13844 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13845 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13846 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13847 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13848 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13849 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13850 + components: + - type: Transform + pos: -9.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13851 + components: + - type: Transform + pos: -9.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13852 + components: + - type: Transform + pos: -9.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13853 + components: + - type: Transform + pos: -9.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13854 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13855 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13856 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13857 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13858 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13859 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13860 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13861 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13862 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13863 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13864 + components: + - type: Transform + pos: -10.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13865 + components: + - type: Transform + pos: -10.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13866 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,12.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13867 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,12.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13868 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,12.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13869 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,12.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13870 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,12.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13871 + components: + - type: Transform + pos: -11.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13872 + components: + - type: Transform + pos: -11.5,12.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13873 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13874 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13875 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13876 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13877 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13878 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,11.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13879 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13880 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13881 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13882 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13883 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13884 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13885 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13886 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13887 + components: + - type: Transform + pos: -14.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13888 + components: + - type: Transform + pos: -14.5,22.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13889 + components: + - type: Transform + pos: -14.5,23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13890 + components: + - type: Transform + pos: -14.5,24.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13891 + components: + - type: Transform + pos: -14.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13892 + components: + - type: Transform + pos: -14.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13893 + components: + - type: Transform + pos: -14.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13894 + components: + - type: Transform + pos: -14.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13895 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13896 + components: + - type: Transform + pos: -12.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13897 + components: + - type: Transform + pos: -12.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13898 + components: + - type: Transform + pos: -12.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13899 + components: + - type: Transform + pos: -12.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13900 + components: + - type: Transform + pos: -12.5,24.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13901 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13902 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13903 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,24.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13904 + components: + - type: Transform + pos: -8.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13905 + components: + - type: Transform + pos: -8.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13906 + components: + - type: Transform + pos: -8.5,24.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13907 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,23.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13908 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13909 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13910 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13911 + components: + - type: Transform + pos: -7.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13912 + components: + - type: Transform + pos: -7.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13913 + components: + - type: Transform + pos: -7.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13914 + components: + - type: Transform + pos: -7.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13915 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13916 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13917 + components: + - type: Transform + pos: -3.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13918 + components: + - type: Transform + pos: -3.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13919 + components: + - type: Transform + pos: -3.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13920 + components: + - type: Transform + pos: -3.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13921 + components: + - type: Transform + pos: -3.5,24.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13922 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13923 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13924 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,24.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13925 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13926 + components: + - type: Transform + pos: -14.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13927 + components: + - type: Transform + pos: -14.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13928 + components: + - type: Transform + pos: -14.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13929 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13930 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13931 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13932 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13933 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13934 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13935 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13936 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13937 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13938 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13939 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13940 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13941 + components: + - type: Transform + pos: -19.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13942 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13943 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13944 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13945 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13946 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13947 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13948 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -19.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13949 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13950 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13951 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13952 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13953 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13954 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13955 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13956 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13957 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -19.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13958 + components: + - type: Transform + pos: -20.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13959 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13960 + components: + - type: Transform + pos: -22.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13961 + components: + - type: Transform + pos: -22.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13962 + components: + - type: Transform + pos: -22.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13963 + components: + - type: Transform + pos: -22.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13964 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13965 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13966 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -25.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13967 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13968 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13969 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13970 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13971 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13972 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13973 + components: + - type: Transform + pos: -22.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13974 + components: + - type: Transform + pos: -22.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13975 + components: + - type: Transform + pos: -22.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13976 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13977 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13978 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13979 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13980 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -29.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13981 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13982 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13983 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13984 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13985 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13986 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -37.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13987 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -38.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13988 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13989 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13990 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13991 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13992 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13993 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13994 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13995 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13996 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13997 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 13998 + components: + - type: Transform + pos: -41.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 13999 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -40.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14000 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -39.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14001 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -38.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14002 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14003 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14004 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14005 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14006 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14007 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14008 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14009 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14010 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -40.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14011 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -39.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14012 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -38.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14013 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -37.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14014 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14015 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14016 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14017 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14018 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14019 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14020 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14021 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14022 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -37.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14023 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -38.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14024 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -39.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14025 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -40.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14026 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -38.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14027 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -39.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14028 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,24.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14029 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,24.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14030 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,24.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14031 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,24.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14032 + components: + - type: Transform + pos: -37.5,23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14033 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -38.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14034 + components: + - type: Transform + pos: -35.5,22.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14035 + components: + - type: Transform + pos: -35.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14036 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14037 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -37.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14038 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -38.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14039 + components: + - type: Transform + pos: -23.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14040 + components: + - type: Transform + pos: -23.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14041 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -25.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14042 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -25.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14043 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -25.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14044 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -25.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14045 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -25.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14046 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14047 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14048 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14049 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14050 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14051 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14052 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14053 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14054 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14055 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14056 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14057 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14058 + components: + - type: Transform + pos: 1.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14059 + components: + - type: Transform + pos: 1.5,22.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14060 + components: + - type: Transform + pos: 1.5,23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14061 + components: + - type: Transform + pos: 1.5,24.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14062 + components: + - type: Transform + pos: 1.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14063 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14064 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14065 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14066 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14067 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14068 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14069 + components: + - type: Transform + pos: 1.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14070 + components: + - type: Transform + pos: 1.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14071 + components: + - type: Transform + pos: 1.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14072 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14073 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14074 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14075 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14076 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14077 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14078 + components: + - type: Transform + pos: 6.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14079 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14080 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14081 + components: + - type: Transform + pos: 1.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14082 + components: + - type: Transform + pos: 1.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14083 + components: + - type: Transform + pos: 1.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14084 + components: + - type: Transform + pos: 1.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14085 + components: + - type: Transform + pos: 1.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14086 + components: + - type: Transform + pos: 1.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14087 + components: + - type: Transform + pos: 1.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14088 + components: + - type: Transform + pos: 1.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14089 + components: + - type: Transform + pos: 1.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14090 + components: + - type: Transform + pos: 1.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14091 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14092 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14093 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14094 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,50.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14095 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,51.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14096 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,52.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14097 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,51.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14098 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,51.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14099 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,51.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14100 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,51.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14101 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,52.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14102 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,53.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14103 + components: + - type: Transform + pos: 1.5,53.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14104 + components: + - type: Transform + pos: 1.5,54.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14105 + components: + - type: Transform + pos: 1.5,55.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14106 + components: + - type: Transform + pos: 1.5,56.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14107 + components: + - type: Transform + pos: 1.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14108 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14109 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14110 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14111 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14112 + components: + - type: Transform + pos: -3.5,57.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14113 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,56.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14114 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,56.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14115 + components: + - type: Transform + pos: -7.5,55.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14116 + components: + - type: Transform + pos: -7.5,54.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14117 + components: + - type: Transform + pos: -7.5,53.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14118 + components: + - type: Transform + pos: -7.5,52.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14119 + components: + - type: Transform + pos: -7.5,51.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14120 + components: + - type: Transform + pos: -7.5,50.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14121 + components: + - type: Transform + pos: -7.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14122 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14123 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,60.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14124 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,61.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14125 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,62.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14126 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,63.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14127 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,64.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14128 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,65.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14129 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,66.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14130 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,67.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14131 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,68.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14132 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,69.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14133 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14134 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,60.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14135 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,61.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14136 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,62.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14137 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,64.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14138 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,65.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14139 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,66.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14140 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,67.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14141 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,68.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14142 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,69.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14143 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,70.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14144 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,70.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14145 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,70.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14146 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,70.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14147 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,70.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14148 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,71.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14149 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,71.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14150 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,71.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14151 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,70.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14152 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,70.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14153 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,70.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14154 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,70.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14155 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,71.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14156 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,71.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14157 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,71.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14158 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,71.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14159 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,72.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14160 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,73.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14161 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,74.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14162 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,73.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14163 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,74.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14164 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,71.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14165 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,72.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14166 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,72.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14167 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,73.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14168 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,74.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14169 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,72.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14170 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,74.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14171 + components: + - type: Transform + pos: 8.5,75.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14172 + components: + - type: Transform + pos: 8.5,76.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14173 + components: + - type: Transform + pos: 7.5,75.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14174 + components: + - type: Transform + pos: 7.5,76.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14175 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,78.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14176 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,79.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14177 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,80.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14178 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,81.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14179 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,82.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14180 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,78.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14181 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,79.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14182 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,80.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14183 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,81.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14184 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,83.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14185 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,84.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14186 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,82.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14187 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,83.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14188 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,84.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14189 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,84.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14190 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,84.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14191 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,84.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14192 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,83.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14193 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,83.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14194 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,83.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14195 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,84.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14196 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,84.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14197 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,84.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14198 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,84.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14199 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,83.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14200 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,83.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14201 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,83.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14202 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,83.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14203 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,83.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14204 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,82.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14205 + components: + - type: Transform + pos: -4.5,83.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14206 + components: + - type: Transform + pos: -5.5,75.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14207 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,75.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14208 + components: + - type: Transform + pos: 44.5,-12.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14209 + components: + - type: Transform + pos: 44.5,-13.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14210 + components: + - type: Transform + pos: 44.5,-14.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14211 + components: + - type: Transform + pos: 44.5,-15.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14212 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 39.5,-15.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14213 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 40.5,-15.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14214 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 39.5,-17.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14215 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 40.5,-17.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14216 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14217 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14218 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14219 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14220 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 23.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14221 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14222 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14223 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 20.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14224 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14225 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 29.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14226 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14227 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14228 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14229 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14230 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14231 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 23.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14232 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14233 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14234 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 20.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14235 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14236 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14237 + components: + - type: Transform + pos: 17.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14238 + components: + - type: Transform + pos: 17.5,24.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14239 + components: + - type: Transform + pos: 17.5,23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14240 + components: + - type: Transform + pos: 18.5,24.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14241 + components: + - type: Transform + pos: 18.5,23.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14242 + components: + - type: Transform + pos: -10.5,-34.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14243 + components: + - type: Transform + pos: -10.5,-33.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14244 + components: + - type: Transform + pos: -10.5,-32.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14245 + components: + - type: Transform + pos: -12.5,-34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14246 + components: + - type: Transform + pos: -12.5,-33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14247 + components: + - type: Transform + pos: -12.5,-32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14248 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,-29.5 + parent: 2 +- proto: GasPipeTJunction + entities: + - uid: 12221 + components: + - type: Transform + pos: 2.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 12223 + components: + - type: Transform + pos: 1.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14249 + components: + - type: Transform + pos: 26.5,-28.5 + parent: 2 + - uid: 14250 + components: + - type: Transform + pos: 32.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14251 + components: + - type: Transform + pos: -7.5,-36.5 + parent: 2 + - uid: 14252 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,-51.5 + parent: 2 + - uid: 14253 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,-51.5 + parent: 2 + - uid: 14254 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,-47.5 + parent: 2 + - uid: 14255 + components: + - type: Transform + pos: -36.5,-45.5 + parent: 2 + - uid: 14256 + components: + - type: Transform + pos: -36.5,-45.5 + parent: 2 + - uid: 14257 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14258 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,-46.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14259 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 38.5,-17.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14260 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 36.5,-15.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14261 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,-32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14262 + components: + - type: Transform + pos: -0.5,-64.5 + parent: 2 + - type: AtmosPipeColor + color: '#20FC03FF' + - uid: 14263 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,-64.5 + parent: 2 + - type: AtmosPipeColor + color: '#20FC03FF' + - uid: 14264 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,-68.5 + parent: 2 + - type: AtmosPipeColor + color: '#20FC03FF' + - uid: 14265 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,-65.5 + parent: 2 + - type: AtmosPipeColor + color: '#FC1703FF' + - uid: 14266 + components: + - type: Transform + pos: 3.5,-64.5 + parent: 2 + - type: AtmosPipeColor + color: '#00FFFFFF' + - uid: 14267 + components: + - type: Transform + pos: 4.5,-64.5 + parent: 2 + - type: AtmosPipeColor + color: '#00FFFFFF' + - uid: 14268 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,-74.5 + parent: 2 + - type: AtmosPipeColor + color: '#00FFFFFF' + - uid: 14269 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-74.5 + parent: 2 + - type: AtmosPipeColor + color: '#00FFFFFF' + - uid: 14270 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-74.5 + parent: 2 + - type: AtmosPipeColor + color: '#00FFFFFF' + - uid: 14271 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,-74.5 + parent: 2 + - type: AtmosPipeColor + color: '#00FFFFFF' + - uid: 14272 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-74.5 + parent: 2 + - type: AtmosPipeColor + color: '#00FFFFFF' + - uid: 14273 + components: + - type: Transform + pos: -1.5,-75.5 + parent: 2 + - type: AtmosPipeColor + color: '#00FFFFFF' + - uid: 14274 + components: + - type: Transform + pos: -0.5,-75.5 + parent: 2 + - type: AtmosPipeColor + color: '#00FFFFFF' + - uid: 14275 + components: + - type: Transform + pos: 1.5,-75.5 + parent: 2 + - type: AtmosPipeColor + color: '#00FFFFFF' + - uid: 14276 + components: + - type: Transform + pos: 2.5,-75.5 + parent: 2 + - type: AtmosPipeColor + color: '#00FFFFFF' + - uid: 14277 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,-70.5 + parent: 2 + - type: AtmosPipeColor + color: '#FC6603FF' + - uid: 14278 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-69.5 + parent: 2 + - uid: 14279 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-68.5 + parent: 2 + - uid: 14280 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-68.5 + parent: 2 + - uid: 14281 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-69.5 + parent: 2 + - uid: 14282 + components: + - type: Transform + pos: 1.5,-62.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 14283 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 29.5,-57.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 14284 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 29.5,-58.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 14285 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,-60.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 14286 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 26.5,-53.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 14287 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 28.5,-62.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 14288 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,-56.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 14289 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,-51.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14290 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,-60.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 14291 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 29.5,-60.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 14292 + components: + - type: Transform + pos: 22.5,-58.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14293 + components: + - type: Transform + pos: 20.5,-59.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14294 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 22.5,-63.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14295 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 29.5,-59.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 14296 + components: + - type: Transform + pos: 26.5,-50.5 + parent: 2 + - type: AtmosPipeColor + color: '#323232FF' + - uid: 14297 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.5,-42.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14298 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14299 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-35.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14300 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,-44.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14301 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.5,-45.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14302 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,-44.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14303 + components: + - type: Transform + pos: 12.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14304 + components: + - type: Transform + pos: -6.5,-28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14305 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,-28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14306 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,-28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14307 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,-28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14308 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -30.5,-32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14309 + components: + - type: Transform + pos: -32.5,-32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14310 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,-38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14311 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,-39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14312 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,-43.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14313 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -41.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14314 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,-47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14315 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,-38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14316 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14317 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14318 + components: + - type: Transform + pos: 6.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14319 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 22.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14320 + components: + - type: Transform + pos: 38.5,-11.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14321 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14322 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,-24.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14323 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,-19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14324 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,-32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14325 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14326 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14327 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,-46.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14328 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,-50.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14329 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,-53.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14330 + components: + - type: Transform + pos: 3.5,-54.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14331 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,-56.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14332 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,-69.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14333 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,-69.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14334 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,-15.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14335 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14336 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,-11.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14337 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,-16.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14338 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,-5.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14339 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -37.5,-11.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14340 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -37.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14341 + components: + - type: Transform + pos: -37.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14342 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14343 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,5.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14344 + components: + - type: Transform + pos: -30.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14345 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14346 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14347 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14348 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14349 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-39.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14350 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14351 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14352 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14353 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14354 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14355 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14356 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -16.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14357 + components: + - type: Transform + pos: -12.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14358 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,5.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14359 + components: + - type: Transform + pos: -8.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14360 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14361 + components: + - type: Transform + pos: -11.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14362 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14363 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14364 + components: + - type: Transform + pos: -23.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14365 + components: + - type: Transform + pos: -19.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14366 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14367 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -30.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14368 + components: + - type: Transform + pos: -35.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14369 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14370 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14371 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -41.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14372 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -41.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14373 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14374 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14375 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14376 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14377 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14378 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14379 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14380 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,37.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14381 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,53.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14382 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,46.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14383 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,54.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14384 + components: + - type: Transform + pos: 4.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14385 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,54.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14386 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14387 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,53.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14388 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,51.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14389 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 22.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14390 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14391 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 28.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14392 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14393 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14394 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14395 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 28.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14396 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 28.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14397 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14398 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 28.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14399 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14400 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14401 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 28.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14402 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14403 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14404 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14405 + components: + - type: Transform + pos: 36.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14406 + components: + - type: Transform + pos: 40.5,27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14407 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 44.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14408 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 44.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14409 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 42.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14410 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,-11.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14411 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14412 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.5,-11.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14413 + components: + - type: Transform + pos: 7.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14414 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14415 + components: + - type: Transform + pos: 6.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14416 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,-45.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14417 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,-29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14418 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,-71.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14419 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,-67.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14420 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-36.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14421 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14422 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14423 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14424 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14425 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-19.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14426 + components: + - type: Transform + pos: 6.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14427 + components: + - type: Transform + pos: 7.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14428 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 12.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14429 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,-22.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14430 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,-14.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14431 + components: + - type: Transform + pos: 21.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14432 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14433 + components: + - type: Transform + pos: 28.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14434 + components: + - type: Transform + pos: 31.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14435 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14436 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 36.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14437 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 36.5,-18.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14438 + components: + - type: Transform + pos: 40.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14439 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 40.5,-29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14440 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,-27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14441 + components: + - type: Transform + pos: 36.5,-10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14442 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 43.5,-10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14443 + components: + - type: Transform + pos: 41.5,-4.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14444 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14445 + components: + - type: Transform + pos: 29.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14446 + components: + - type: Transform + pos: 22.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14447 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 12.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14448 + components: + - type: Transform + pos: 11.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14449 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14450 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14451 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14452 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14453 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14454 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14455 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14456 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 22.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14457 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14458 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14459 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 35.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14460 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14461 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14462 + components: + - type: Transform + pos: 38.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14463 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14464 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14465 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14466 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14467 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14468 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14469 + components: + - type: Transform + pos: 22.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14470 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14471 + components: + - type: Transform + pos: -9.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14472 + components: + - type: Transform + pos: -22.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14473 + components: + - type: Transform + pos: -28.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14474 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14475 + components: + - type: Transform + pos: -28.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14476 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14477 + components: + - type: Transform + pos: -39.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14478 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -39.5,-1.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14479 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -40.5,-9.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14480 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,-6.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14481 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,-12.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14482 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,-18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14483 + components: + - type: Transform + pos: -31.5,-21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14484 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,-18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14485 + components: + - type: Transform + pos: -27.5,-16.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14486 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,-29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14487 + components: + - type: Transform + pos: -20.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14488 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14489 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,-24.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14490 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,-22.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14491 + components: + - type: Transform + pos: -9.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14492 + components: + - type: Transform + pos: -8.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14493 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14494 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14495 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,-42.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14496 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,-43.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14497 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,-46.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14498 + components: + - type: Transform + pos: -2.5,-37.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14499 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,-36.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14500 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,-29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14501 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,-36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14502 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,-38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14503 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14504 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14505 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14506 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -43.5,-39.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14507 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,-46.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14508 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14509 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14510 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14511 + components: + - type: Transform + pos: -8.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14512 + components: + - type: Transform + pos: -9.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14513 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14514 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14515 + components: + - type: Transform + pos: -11.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14516 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,12.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14517 + components: + - type: Transform + pos: -12.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14518 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14519 + components: + - type: Transform + pos: -12.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14520 + components: + - type: Transform + pos: -10.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14521 + components: + - type: Transform + pos: -7.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14522 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14523 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14524 + components: + - type: Transform + pos: -20.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14525 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14526 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14527 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14528 + components: + - type: Transform + pos: -25.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14529 + components: + - type: Transform + pos: -28.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14530 + components: + - type: Transform + pos: -35.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14531 + components: + - type: Transform + pos: -36.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14532 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14533 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14534 + components: + - type: Transform + pos: -37.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14535 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -37.5,24.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14536 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -37.5,22.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14537 + components: + - type: Transform + pos: -4.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14538 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14539 + components: + - type: Transform + pos: 2.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14540 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14541 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14542 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14543 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,46.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14544 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,52.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14545 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14546 + components: + - type: Transform + pos: -3.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14547 + components: + - type: Transform + pos: -4.5,56.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14548 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,70.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14549 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,70.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14550 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,71.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14551 + components: + - type: Transform + pos: 2.5,71.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14552 + components: + - type: Transform + pos: -2.5,71.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14553 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,70.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14554 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,77.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14555 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,77.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14556 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,82.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14557 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,83.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14558 + components: + - type: Transform + pos: 1.5,83.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14559 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,84.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14560 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 14.5,-24.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' +- proto: GasPort + entities: + - uid: 14561 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,-37.5 + parent: 2 + - uid: 14562 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,-37.5 + parent: 2 + - uid: 14563 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -31.5,-52.5 + parent: 2 + - uid: 14564 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,-51.5 + parent: 2 + - uid: 14565 + components: + - type: Transform + pos: -31.5,-50.5 + parent: 2 + - uid: 14566 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -32.5,-50.5 + parent: 2 + - uid: 14567 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,-49.5 + parent: 2 + - uid: 14568 + components: + - type: Transform + pos: -32.5,-48.5 + parent: 2 + - uid: 14569 + components: + - type: Transform + pos: -33.5,-51.5 + parent: 2 + - uid: 14570 + components: + - type: Transform + pos: -33.5,-51.5 + parent: 2 + - uid: 14571 + components: + - type: Transform + pos: -34.5,-51.5 + parent: 2 + - uid: 14572 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,-47.5 + parent: 2 + - uid: 14573 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,-45.5 + parent: 2 + - uid: 14574 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,23.5 + parent: 2 + - uid: 14575 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,-27.5 + parent: 2 + - uid: 14576 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,-28.5 + parent: 2 + - uid: 14577 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14578 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-37.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14579 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14580 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-39.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14581 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-76.5 + parent: 2 + - uid: 14582 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-76.5 + parent: 2 + - uid: 14583 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,-66.5 + parent: 2 + - uid: 14584 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,-66.5 + parent: 2 + - uid: 14585 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-66.5 + parent: 2 + - type: AtmosPipeColor + color: '#FC1703FF' + - uid: 14586 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,-66.5 + parent: 2 + - type: AtmosPipeColor + color: '#FC1703FF' + - uid: 14587 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,-57.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 14588 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,-59.5 + parent: 2 + - uid: 14589 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,-59.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 14590 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,-58.5 + parent: 2 + - uid: 14591 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,-58.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 14592 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,-58.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14593 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,-57.5 + parent: 2 + - uid: 14594 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 35.5,-46.5 + parent: 2 + - uid: 14595 + components: + - type: Transform + pos: 7.5,-31.5 + parent: 2 + - uid: 22671 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 22839 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' +- proto: GasPressurePump + entities: + - uid: 14596 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -39.5,-47.5 + parent: 2 + - uid: 14597 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -39.5,-47.5 + parent: 2 + - uid: 14598 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -39.5,-45.5 + parent: 2 + - uid: 14599 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -39.5,-45.5 + parent: 2 + - uid: 14600 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,24.5 + parent: 2 + - uid: 14601 + components: + - type: MetaData + name: waste pump + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,-51.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14602 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,-75.5 + parent: 2 + - type: AtmosPipeColor + color: '#00FFFFFF' + - uid: 14603 + components: + - type: Transform + pos: -4.5,-69.5 + parent: 2 + - uid: 14604 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,-70.5 + parent: 2 + - uid: 14605 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,-68.5 + parent: 2 + - uid: 14606 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-66.5 + parent: 2 + - uid: 14607 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,-65.5 + parent: 2 + - uid: 14608 + components: + - type: Transform + pos: 1.5,-66.5 + parent: 2 + - uid: 14609 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-64.5 + parent: 2 + - uid: 14610 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,-65.5 + parent: 2 + - uid: 14611 + components: + - type: MetaData + name: TEG burn pump + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,-52.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 14612 + components: + - type: Transform + pos: 26.5,-64.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 14613 + components: + - type: MetaData + name: supermatter pump + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,-52.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 14614 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,-56.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 14615 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,-64.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 14616 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,-55.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 14617 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 40.5,-44.5 + parent: 2 + - uid: 14618 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,-45.5 + parent: 2 + - uid: 14619 + components: + - type: Transform + pos: -4.5,-63.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 14620 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,-50.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14621 + components: + - type: Transform + pos: 1.5,-63.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF8000FF' + - uid: 14622 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,-57.5 + parent: 2 + - type: AtmosPipeColor + color: '#8800FFFF' + - uid: 14623 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,-61.5 + parent: 2 + - type: AtmosPipeColor + color: '#8800FFFF' + - uid: 14624 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,-62.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14625 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,-63.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14626 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 40.5,-42.5 + parent: 2 + - uid: 14627 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,-53.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 14628 + components: + - type: MetaData + name: distro pump + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,-52.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' +- proto: GasThermoMachineFreezer + entities: + - uid: 14629 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,-52.5 + parent: 2 + - uid: 14630 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,-29.5 + parent: 2 + - uid: 14631 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-76.5 + parent: 2 + - uid: 14632 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-76.5 + parent: 2 + - uid: 14633 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,-54.5 + parent: 2 + - uid: 14634 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,-60.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 14635 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.5,-60.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' +- proto: GasThermoMachineFreezerEnabled + entities: + - uid: 14636 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,-34.5 + parent: 2 +- proto: GasThermoMachineHeater + entities: + - uid: 14637 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,-52.5 + parent: 2 + - uid: 14638 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,-55.5 + parent: 2 + - uid: 14639 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,-56.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' +- proto: GasThermoMachineHeaterEnabled + entities: + - uid: 14640 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,-60.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' +- proto: GasValve + entities: + - uid: 14641 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 13.5,-42.5 + parent: 2 + - type: GasValve + open: False + - uid: 14642 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 13.5,-46.5 + parent: 2 + - type: GasValve + open: False + - uid: 14643 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,-41.5 + parent: 2 + - uid: 14644 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -37.5,-45.5 + parent: 2 + - uid: 14645 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -37.5,-47.5 + parent: 2 + - uid: 14646 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,-46.5 + parent: 2 + - uid: 14647 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-75.5 + parent: 2 + - type: AtmosPipeColor + color: '#00FFFFFF' + - uid: 14648 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,-61.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 14649 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,-61.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF00BFFF' + - uid: 14650 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,-56.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' +- proto: GasVentPump + entities: + - uid: 14651 + components: + - type: Transform + pos: 42.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14652 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14653 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,54.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14654 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,-37.5 + parent: 2 + - uid: 14658 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-43.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14659 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 26.5,-44.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14660 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 26.5,-44.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14661 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-35.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14662 + components: + - type: Transform + pos: 11.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14663 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,-32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14664 + components: + - type: Transform + pos: -10.5,-27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14665 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,-38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14666 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,-35.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14667 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14668 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,-47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14669 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,-44.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14670 + components: + - type: Transform + pos: 8.5,-24.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14671 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#031CFCFF' + - uid: 14672 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,-44.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14673 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 29.5,-24.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14674 + components: + - type: Transform + pos: 30.5,-18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14675 + components: + - type: Transform + pos: 40.5,-31.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14676 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14677 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,-46.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14678 + components: + - type: Transform + pos: -4.5,-55.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14679 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,-57.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14680 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.5,-64.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14681 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,-15.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14682 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 46.5,-32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14683 + components: + - type: Transform + pos: -30.5,-22.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14684 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -33.5,-5.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14685 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,-17.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14686 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -38.5,-11.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14687 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -38.5,0.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14688 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -38.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14689 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -33.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14690 + components: + - type: Transform + pos: -34.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14691 + components: + - type: Transform + pos: -22.5,2.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14692 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,-5.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14693 + components: + - type: Transform + pos: -9.5,2.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14694 + components: + - type: Transform + pos: 11.5,2.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14695 + components: + - type: Transform + pos: -10.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14696 + components: + - type: Transform + pos: -19.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14697 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 23.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14698 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,4.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14699 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14700 + components: + - type: Transform + pos: -30.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14701 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,23.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14702 + components: + - type: Transform + pos: -31.5,24.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14703 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14704 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -40.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14705 + components: + - type: Transform + pos: -2.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14706 + components: + - type: Transform + pos: -9.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14707 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14708 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,46.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14709 + components: + - type: Transform + pos: -5.5,55.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14710 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 36.5,23.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14711 + components: + - type: Transform + pos: 5.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14712 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14713 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14714 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14715 + components: + - type: Transform + pos: 22.5,2.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14716 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14717 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 20.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14718 + components: + - type: Transform + pos: 21.5,22.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14719 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 29.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14720 + components: + - type: Transform + pos: 21.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14721 + components: + - type: Transform + pos: 19.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14722 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14723 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14724 + components: + - type: Transform + pos: 14.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14725 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 29.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14726 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14727 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14728 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14729 + components: + - type: Transform + pos: 40.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14730 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14731 + components: + - type: Transform + pos: 42.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14732 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 29.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14733 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14734 + components: + - type: Transform + pos: 42.5,-5.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14735 + components: + - type: Transform + pos: 9.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14736 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14737 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14738 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,-30.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14739 + components: + - type: Transform + pos: 22.5,-24.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14740 + components: + - type: Transform + pos: 19.5,-19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14741 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.5,-18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14742 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 37.5,-19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14743 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 44.5,-17.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14744 + components: + - type: Transform + pos: 45.5,-24.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14745 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,-31.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14746 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.5,-52.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14747 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,-29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14748 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,-31.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14749 + components: + - type: Transform + pos: 17.5,-10.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14750 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14751 + components: + - type: Transform + pos: 42.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14752 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14753 + components: + - type: Transform + pos: 33.5,-10.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14754 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,-3.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14755 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14756 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 14.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14757 + components: + - type: Transform + pos: -29.5,-17.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14758 + components: + - type: Transform + pos: -23.5,-22.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14759 + components: + - type: Transform + pos: -22.5,-27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14760 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,-32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14761 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,-12.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14762 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,-24.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14763 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,-20.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14764 + components: + - type: Transform + pos: -3.5,-35.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14765 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14766 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,-28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14767 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -38.5,-38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14768 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14769 + components: + - type: Transform + pos: -33.5,-37.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14770 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -42.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14771 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -43.5,-32.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14772 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,-47.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14773 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,-49.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14774 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14775 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,10.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14776 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14777 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,23.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14778 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,22.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14779 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,23.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14780 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14781 + components: + - type: Transform + pos: -11.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14782 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14783 + components: + - type: Transform + pos: -19.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14784 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14785 + components: + - type: Transform + pos: -24.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14786 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14787 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14788 + components: + - type: Transform + pos: -37.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14789 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -33.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14790 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -33.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14791 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -33.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14792 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -41.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14793 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -39.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14794 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,24.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14795 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14796 + components: + - type: Transform + pos: 7.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14797 + components: + - type: Transform + pos: 0.5,60.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14798 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,70.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14799 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,70.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14800 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,70.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14801 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,77.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14802 + components: + - type: Transform + pos: 7.5,85.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14803 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,82.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14804 + components: + - type: Transform + pos: -4.5,84.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14805 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,76.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14806 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,-50.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14807 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,-55.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14808 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,-69.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14809 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,-69.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14810 + components: + - type: Transform + pos: 5.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14811 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,-17.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14812 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14813 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 18.5,22.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' + - uid: 14814 + components: + - type: Transform + pos: -12.5,-31.5 + parent: 2 + - type: AtmosPipeColor + color: '#0000FFFF' +- proto: GasVentScrubber + entities: + - uid: 14815 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14816 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -42.5,-45.5 + parent: 2 + - uid: 14820 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,-44.5 + parent: 2 + - uid: 14821 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-42.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14822 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-42.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14823 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,-45.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14824 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 12.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14825 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.5,-51.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14826 + components: + - type: Transform + pos: 4.5,-54.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14827 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -39.5,-9.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14828 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -38.5,-1.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14829 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14830 + components: + - type: Transform + pos: -38.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14831 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14832 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14833 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14834 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14835 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,-45.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14836 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,-51.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14837 + components: + - type: Transform + pos: -2.5,-55.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14838 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,-58.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14839 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,-71.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14840 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,-67.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14841 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.5,-63.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14842 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14843 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-19.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14844 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,-21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14845 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,-24.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14846 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,-30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14847 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 13.5,-22.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14848 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,-14.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14849 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 17.5,-9.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14850 + components: + - type: Transform + pos: 17.5,-19.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14851 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 17.5,-31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14852 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,-24.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14853 + components: + - type: Transform + pos: 23.5,-18.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14854 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,-24.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14855 + components: + - type: Transform + pos: 32.5,-18.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14856 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,-28.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14857 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,-18.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14858 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,-30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14859 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 46.5,-30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14860 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 45.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14861 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,-30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14862 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,-10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14863 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,-5.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14864 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,-3.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14865 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 22.5,-0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14866 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,-0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14867 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14868 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14869 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14870 + components: + - type: Transform + pos: 41.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14871 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 29.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14872 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.5,14.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14873 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 20.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14874 + components: + - type: Transform + pos: 22.5,22.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14875 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 29.5,17.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14876 + components: + - type: Transform + pos: 35.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14877 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14878 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 38.5,23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14879 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14880 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14881 + components: + - type: Transform + pos: 39.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14882 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14883 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14884 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14885 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 22.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14886 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14887 + components: + - type: Transform + pos: 15.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14888 + components: + - type: Transform + pos: 21.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14889 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14890 + components: + - type: Transform + pos: 8.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14891 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,-0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14892 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,-0.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14893 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,-5.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14894 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,4.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14895 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,5.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14896 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14897 + components: + - type: Transform + pos: -32.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14898 + components: + - type: Transform + pos: -41.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14899 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -37.5,-19.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14900 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,-6.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14901 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -31.5,-22.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14902 + components: + - type: Transform + pos: -21.5,-22.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14903 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -21.5,-27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14904 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,-31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14905 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -27.5,-17.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14906 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,-11.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14907 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,-22.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14908 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,-19.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14909 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,-27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14910 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,-31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14911 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -16.5,-37.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14912 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14913 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,-42.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14914 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,-43.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14915 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,-46.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14916 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,-49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14917 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-37.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14918 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-39.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14919 + components: + - type: Transform + pos: -33.5,-28.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14920 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -38.5,-36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14921 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -28.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14922 + components: + - type: Transform + pos: -33.5,-39.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14923 + components: + - type: Transform + pos: -43.5,-33.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14924 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -42.5,-39.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14925 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,-47.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14926 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,-49.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14927 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 29.5,31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14928 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14929 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,13.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14930 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,16.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14931 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,12.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14932 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,9.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14933 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,19.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14934 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -19.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14935 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14936 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,24.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14937 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14938 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,28.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14939 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14940 + components: + - type: Transform + pos: -14.5,39.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14941 + components: + - type: Transform + pos: -9.5,33.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14942 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14943 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.5,34.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14944 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14945 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14946 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,15.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14947 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14948 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -35.5,29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14949 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -33.5,32.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14950 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -33.5,35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14951 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -33.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14952 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -40.5,25.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14953 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,24.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14954 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,22.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14955 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -39.5,21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14956 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -25.5,24.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14957 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,38.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14958 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14959 + components: + - type: Transform + pos: 5.5,40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14960 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,46.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14961 + components: + - type: Transform + pos: 8.5,54.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14962 + components: + - type: Transform + pos: 1.5,60.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14963 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,55.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14964 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,70.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14965 + components: + - type: Transform + pos: 0.5,71.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14966 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,70.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14967 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,77.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14968 + components: + - type: Transform + pos: 8.5,84.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14969 + components: + - type: Transform + pos: 1.5,85.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14970 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,83.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14971 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,76.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14972 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14973 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,-16.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14974 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,-15.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14975 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 17.5,22.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' + - uid: 14976 + components: + - type: Transform + pos: -10.5,-31.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF0000FF' +- proto: Gateway + entities: + - uid: 14977 + components: + - type: Transform + pos: -27.5,-11.5 + parent: 2 +- proto: GeigerCounter + entities: + - uid: 14978 + components: + - type: Transform + pos: -7.492387,-64.15177 + parent: 2 +- proto: GeneratorBasic15kW + entities: + - uid: 14979 + components: + - type: Transform + pos: -6.5,76.5 + parent: 2 +- proto: Girder + entities: + - uid: 14980 + components: + - type: Transform + pos: -19.5,12.5 + parent: 2 + - uid: 14981 + components: + - type: Transform + anchored: False + pos: -50.549862,14.541412 + parent: 2 + - type: Physics + bodyType: Dynamic + - uid: 14982 + components: + - type: Transform + pos: 20.5,-5.5 + parent: 2 + - uid: 14983 + components: + - type: Transform + pos: 22.5,-10.5 + parent: 2 + - uid: 14984 + components: + - type: Transform + pos: -18.5,16.5 + parent: 2 + - uid: 14985 + components: + - type: Transform + pos: -54.5,12.5 + parent: 2 + - uid: 14986 + components: + - type: Transform + pos: -58.5,28.5 + parent: 2 + - uid: 14987 + components: + - type: Transform + pos: 36.5,-34.5 + parent: 2 + - uid: 14988 + components: + - type: Transform + pos: 37.5,-36.5 + parent: 2 + - uid: 14989 + components: + - type: Transform + pos: 44.5,-37.5 + parent: 2 +- proto: GlimmerProber + entities: + - uid: 14990 + components: + - type: Transform + pos: -24.5,-39.5 + parent: 2 +- proto: GravityGenerator + entities: + - uid: 14991 + components: + - type: Transform + pos: 7.5,31.5 + parent: 2 +- proto: Grille + entities: + - uid: 615 + components: + - type: Transform + pos: 15.5,-32.5 + parent: 2 + - uid: 616 + components: + - type: Transform + pos: 15.5,-31.5 + parent: 2 + - uid: 9182 + components: + - type: Transform + pos: 15.5,-30.5 + parent: 2 + - uid: 9213 + components: + - type: Transform + pos: -35.5,-0.5 + parent: 2 + - uid: 14992 + components: + - type: Transform + pos: 3.5,25.5 + parent: 2 + - uid: 14993 + components: + - type: Transform + pos: 3.5,27.5 + parent: 2 + - uid: 14994 + components: + - type: Transform + pos: -3.5,12.5 + parent: 2 + - uid: 14995 + components: + - type: Transform + pos: 4.5,12.5 + parent: 2 + - uid: 14996 + components: + - type: Transform + pos: -8.5,9.5 + parent: 2 + - uid: 14997 + components: + - type: Transform + pos: -12.5,2.5 + parent: 2 + - uid: 14998 + components: + - type: Transform + pos: -12.5,-0.5 + parent: 2 + - uid: 14999 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,17.5 + parent: 2 + - uid: 15000 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,17.5 + parent: 2 + - uid: 15001 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,17.5 + parent: 2 + - uid: 15002 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,12.5 + parent: 2 + - uid: 15003 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,10.5 + parent: 2 + - uid: 15004 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,17.5 + parent: 2 + - uid: 15005 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,16.5 + parent: 2 + - uid: 15006 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,19.5 + parent: 2 + - uid: 15007 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,19.5 + parent: 2 + - uid: 15008 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,17.5 + parent: 2 + - uid: 15009 + components: + - type: Transform + pos: -0.5,14.5 + parent: 2 + - uid: 15010 + components: + - type: Transform + pos: 2.5,14.5 + parent: 2 + - uid: 15011 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,2.5 + parent: 2 + - uid: 15012 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,-0.5 + parent: 2 + - uid: 15013 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-12.5 + parent: 2 + - uid: 15014 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-12.5 + parent: 2 + - uid: 15016 + components: + - type: Transform + pos: -25.5,-1.5 + parent: 2 + - uid: 15017 + components: + - type: Transform + pos: -26.5,-1.5 + parent: 2 + - uid: 15018 + components: + - type: Transform + pos: -27.5,-1.5 + parent: 2 + - uid: 15019 + components: + - type: Transform + pos: -31.5,-3.5 + parent: 2 + - uid: 15020 + components: + - type: Transform + pos: -31.5,-4.5 + parent: 2 + - uid: 15021 + components: + - type: Transform + pos: -31.5,-5.5 + parent: 2 + - uid: 15022 + components: + - type: Transform + pos: -31.5,5.5 + parent: 2 + - uid: 15023 + components: + - type: Transform + pos: -31.5,7.5 + parent: 2 + - uid: 15024 + components: + - type: Transform + pos: -26.5,6.5 + parent: 2 + - uid: 15025 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -37.5,5.5 + parent: 2 + - uid: 15026 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -39.5,5.5 + parent: 2 + - uid: 15027 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -44.5,13.5 + parent: 2 + - uid: 15028 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -43.5,13.5 + parent: 2 + - uid: 15029 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -42.5,13.5 + parent: 2 + - uid: 15030 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -41.5,13.5 + parent: 2 + - uid: 15031 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -45.5,11.5 + parent: 2 + - uid: 15032 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -45.5,10.5 + parent: 2 + - uid: 15033 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -45.5,9.5 + parent: 2 + - uid: 15034 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -45.5,8.5 + parent: 2 + - uid: 15035 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,11.5 + parent: 2 + - uid: 15036 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,1.5 + parent: 2 + - uid: 15037 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,0.5 + parent: 2 + - uid: 15039 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,-1.5 + parent: 2 + - uid: 15040 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,-2.5 + parent: 2 + - uid: 15041 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,-3.5 + parent: 2 + - uid: 15042 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -37.5,-6.5 + parent: 2 + - uid: 15043 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -45.5,-5.5 + parent: 2 + - uid: 15044 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -45.5,-4.5 + parent: 2 + - uid: 15045 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -45.5,-3.5 + parent: 2 + - uid: 15046 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -43.5,-4.5 + parent: 2 + - uid: 15047 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -43.5,-3.5 + parent: 2 + - uid: 15048 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -43.5,-2.5 + parent: 2 + - uid: 15049 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -45.5,4.5 + parent: 2 + - uid: 15050 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -45.5,3.5 + parent: 2 + - uid: 15051 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -45.5,2.5 + parent: 2 + - uid: 15052 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -43.5,3.5 + parent: 2 + - uid: 15053 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -43.5,2.5 + parent: 2 + - uid: 15054 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -43.5,1.5 + parent: 2 + - uid: 15055 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -45.5,-8.5 + parent: 2 + - uid: 15056 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -45.5,-9.5 + parent: 2 + - uid: 15057 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -45.5,-10.5 + parent: 2 + - uid: 15058 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -44.5,-10.5 + parent: 2 + - uid: 15059 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -43.5,-10.5 + parent: 2 + - uid: 15060 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -42.5,-10.5 + parent: 2 + - uid: 15061 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -41.5,-10.5 + parent: 2 + - uid: 15062 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -41.5,-12.5 + parent: 2 + - uid: 15063 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -45.5,-12.5 + parent: 2 + - uid: 15064 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -45.5,16.5 + parent: 2 + - uid: 15065 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -45.5,17.5 + parent: 2 + - uid: 15066 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -39.5,-17.5 + parent: 2 + - uid: 15067 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -39.5,-16.5 + parent: 2 + - uid: 15068 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -49.5,-23.5 + parent: 2 + - uid: 15069 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -49.5,-15.5 + parent: 2 + - uid: 15070 + components: + - type: Transform + pos: -27.5,-20.5 + parent: 2 + - uid: 15071 + components: + - type: Transform + pos: -27.5,-24.5 + parent: 2 + - uid: 15072 + components: + - type: Transform + pos: -27.5,-23.5 + parent: 2 + - uid: 15073 + components: + - type: Transform + pos: -30.5,-25.5 + parent: 2 + - uid: 15074 + components: + - type: Transform + pos: -28.5,-25.5 + parent: 2 + - uid: 15075 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,-28.5 + parent: 2 + - uid: 15076 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,-28.5 + parent: 2 + - uid: 15077 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,-35.5 + parent: 2 + - uid: 15078 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,-34.5 + parent: 2 + - uid: 15079 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,-33.5 + parent: 2 + - uid: 15080 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,-33.5 + parent: 2 + - uid: 15081 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,-34.5 + parent: 2 + - uid: 15082 + components: + - type: Transform + pos: -29.5,-36.5 + parent: 2 + - uid: 15083 + components: + - type: Transform + pos: -34.5,-44.5 + parent: 2 + - uid: 15084 + components: + - type: Transform + pos: -32.5,-44.5 + parent: 2 + - uid: 15085 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,-31.5 + parent: 2 + - uid: 15086 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,-30.5 + parent: 2 + - uid: 15087 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,-25.5 + parent: 2 + - uid: 15088 + components: + - type: Transform + pos: -23.5,-25.5 + parent: 2 + - uid: 15089 + components: + - type: Transform + pos: -21.5,-25.5 + parent: 2 + - uid: 15090 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,-25.5 + parent: 2 + - uid: 15091 + components: + - type: Transform + pos: -18.5,-29.5 + parent: 2 + - uid: 15092 + components: + - type: Transform + pos: -16.5,-29.5 + parent: 2 + - uid: 15093 + components: + - type: Transform + pos: -17.5,-29.5 + parent: 2 + - uid: 15094 + components: + - type: Transform + pos: -19.5,-31.5 + parent: 2 + - uid: 15095 + components: + - type: Transform + pos: -19.5,-30.5 + parent: 2 + - uid: 15096 + components: + - type: Transform + pos: -12.5,-33.5 + parent: 2 + - uid: 15097 + components: + - type: Transform + pos: -10.5,-33.5 + parent: 2 + - uid: 15098 + components: + - type: Transform + pos: -4.5,-26.5 + parent: 2 + - uid: 15099 + components: + - type: Transform + pos: -1.5,-26.5 + parent: 2 + - uid: 15100 + components: + - type: Transform + pos: -1.5,-28.5 + parent: 2 + - uid: 15101 + components: + - type: Transform + pos: -4.5,-28.5 + parent: 2 + - uid: 15102 + components: + - type: Transform + pos: -6.5,-29.5 + parent: 2 + - uid: 15103 + components: + - type: Transform + pos: -8.5,-29.5 + parent: 2 + - uid: 15104 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-32.5 + parent: 2 + - uid: 15105 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-33.5 + parent: 2 + - uid: 15106 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-34.5 + parent: 2 + - uid: 15107 + components: + - type: Transform + pos: -14.5,-37.5 + parent: 2 + - uid: 15108 + components: + - type: Transform + pos: -14.5,-35.5 + parent: 2 + - uid: 15109 + components: + - type: Transform + pos: -14.5,-38.5 + parent: 2 + - uid: 15110 + components: + - type: Transform + pos: -14.5,-49.5 + parent: 2 + - uid: 15111 + components: + - type: Transform + pos: -14.5,-47.5 + parent: 2 + - uid: 15112 + components: + - type: Transform + pos: -14.5,-46.5 + parent: 2 + - uid: 15113 + components: + - type: Transform + pos: -14.5,-44.5 + parent: 2 + - uid: 15114 + components: + - type: Transform + pos: -14.5,-43.5 + parent: 2 + - uid: 15115 + components: + - type: Transform + pos: -14.5,-41.5 + parent: 2 + - uid: 15116 + components: + - type: Transform + pos: -14.5,-40.5 + parent: 2 + - uid: 15117 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,-49.5 + parent: 2 + - uid: 15118 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,-47.5 + parent: 2 + - uid: 15119 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,-43.5 + parent: 2 + - uid: 15120 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,-41.5 + parent: 2 + - uid: 15121 + components: + - type: Transform + pos: -44.5,-42.5 + parent: 2 + - uid: 15122 + components: + - type: Transform + pos: -45.5,-40.5 + parent: 2 + - uid: 15123 + components: + - type: Transform + pos: -45.5,-39.5 + parent: 2 + - uid: 15124 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -48.5,-30.5 + parent: 2 + - uid: 15125 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -48.5,-31.5 + parent: 2 + - uid: 15126 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -48.5,-32.5 + parent: 2 + - uid: 15127 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -47.5,-33.5 + parent: 2 + - uid: 15128 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -46.5,-36.5 + parent: 2 + - uid: 15129 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,-46.5 + parent: 2 + - uid: 15130 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,-48.5 + parent: 2 + - uid: 15131 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -39.5,-48.5 + parent: 2 + - uid: 15132 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -43.5,-51.5 + parent: 2 + - uid: 15133 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -42.5,-51.5 + parent: 2 + - uid: 15134 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -44.5,-50.5 + parent: 2 + - uid: 15135 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -44.5,-49.5 + parent: 2 + - uid: 15136 + components: + - type: Transform + pos: -37.5,-55.5 + parent: 2 + - uid: 15137 + components: + - type: Transform + pos: -37.5,-59.5 + parent: 2 + - uid: 15138 + components: + - type: Transform + pos: -32.5,-61.5 + parent: 2 + - uid: 15139 + components: + - type: Transform + pos: -35.5,-65.5 + parent: 2 + - uid: 15140 + components: + - type: Transform + pos: -37.5,-63.5 + parent: 2 + - uid: 15141 + components: + - type: Transform + pos: -31.5,-65.5 + parent: 2 + - uid: 15142 + components: + - type: Transform + pos: -30.5,-65.5 + parent: 2 + - uid: 15143 + components: + - type: Transform + pos: -29.5,-65.5 + parent: 2 + - uid: 15144 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-37.5 + parent: 2 + - uid: 15145 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-35.5 + parent: 2 + - uid: 15146 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,-1.5 + parent: 2 + - uid: 15147 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 36.5,-1.5 + parent: 2 + - uid: 15148 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,3.5 + parent: 2 + - uid: 15149 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 22.5,3.5 + parent: 2 + - uid: 15150 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 23.5,3.5 + parent: 2 + - uid: 15151 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.5,-1.5 + parent: 2 + - uid: 15152 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,-1.5 + parent: 2 + - uid: 15153 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,2.5 + parent: 2 + - uid: 15154 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,1.5 + parent: 2 + - uid: 15155 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,0.5 + parent: 2 + - uid: 15156 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,6.5 + parent: 2 + - uid: 15157 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,8.5 + parent: 2 + - uid: 15159 + components: + - type: Transform + pos: 34.5,12.5 + parent: 2 + - uid: 15160 + components: + - type: Transform + pos: 33.5,12.5 + parent: 2 + - uid: 15161 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,21.5 + parent: 2 + - uid: 15162 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 28.5,21.5 + parent: 2 + - uid: 15163 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 39.5,17.5 + parent: 2 + - uid: 15164 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,17.5 + parent: 2 + - uid: 15165 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,18.5 + parent: 2 + - uid: 15166 + components: + - type: Transform + pos: 44.5,13.5 + parent: 2 + - uid: 15167 + components: + - type: Transform + pos: 44.5,14.5 + parent: 2 + - uid: 15168 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,8.5 + parent: 2 + - uid: 15169 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,7.5 + parent: 2 + - uid: 15170 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,6.5 + parent: 2 + - uid: 15171 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 45.5,-0.5 + parent: 2 + - uid: 15172 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 58.5,17.5 + parent: 2 + - uid: 15173 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 59.5,17.5 + parent: 2 + - uid: 15174 + components: + - type: Transform + pos: 58.5,32.5 + parent: 2 + - uid: 15175 + components: + - type: Transform + pos: 59.5,32.5 + parent: 2 + - uid: 15176 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,22.5 + parent: 2 + - uid: 15177 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,24.5 + parent: 2 + - uid: 15178 + components: + - type: Transform + pos: 11.5,28.5 + parent: 2 + - uid: 15179 + components: + - type: Transform + pos: 12.5,28.5 + parent: 2 + - uid: 15180 + components: + - type: Transform + pos: 13.5,28.5 + parent: 2 + - uid: 15181 + components: + - type: Transform + pos: 14.5,28.5 + parent: 2 + - uid: 15182 + components: + - type: Transform + pos: 32.5,31.5 + parent: 2 + - uid: 15183 + components: + - type: Transform + pos: 34.5,31.5 + parent: 2 + - uid: 15184 + components: + - type: Transform + pos: 36.5,31.5 + parent: 2 + - uid: 15185 + components: + - type: Transform + pos: 38.5,31.5 + parent: 2 + - uid: 15186 + components: + - type: Transform + pos: 40.5,31.5 + parent: 2 + - uid: 15187 + components: + - type: Transform + pos: 26.5,30.5 + parent: 2 + - uid: 15188 + components: + - type: Transform + pos: 26.5,32.5 + parent: 2 + - uid: 15189 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,36.5 + parent: 2 + - uid: 15190 + components: + - type: Transform + pos: 12.5,35.5 + parent: 2 + - uid: 15191 + components: + - type: Transform + pos: 12.5,36.5 + parent: 2 + - uid: 15192 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 12.5,43.5 + parent: 2 + - uid: 15193 + components: + - type: Transform + pos: 21.5,47.5 + parent: 2 + - uid: 15194 + components: + - type: Transform + pos: 21.5,46.5 + parent: 2 + - uid: 15195 + components: + - type: Transform + pos: 19.5,47.5 + parent: 2 + - uid: 15196 + components: + - type: Transform + pos: 19.5,46.5 + parent: 2 + - uid: 15197 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,41.5 + parent: 2 + - uid: 15198 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,41.5 + parent: 2 + - uid: 15199 + components: + - type: Transform + pos: 41.5,32.5 + parent: 2 + - uid: 15200 + components: + - type: Transform + pos: 41.5,33.5 + parent: 2 + - uid: 15201 + components: + - type: Transform + pos: 41.5,34.5 + parent: 2 + - uid: 15202 + components: + - type: Transform + pos: 41.5,36.5 + parent: 2 + - uid: 15203 + components: + - type: Transform + pos: 41.5,37.5 + parent: 2 + - uid: 15204 + components: + - type: Transform + pos: 41.5,39.5 + parent: 2 + - uid: 15205 + components: + - type: Transform + pos: 41.5,40.5 + parent: 2 + - uid: 15206 + components: + - type: Transform + pos: 41.5,41.5 + parent: 2 + - uid: 15207 + components: + - type: Transform + pos: 41.5,42.5 + parent: 2 + - uid: 15208 + components: + - type: Transform + pos: 40.5,42.5 + parent: 2 + - uid: 15209 + components: + - type: Transform + pos: 39.5,42.5 + parent: 2 + - uid: 15210 + components: + - type: Transform + pos: 38.5,42.5 + parent: 2 + - uid: 15211 + components: + - type: Transform + pos: 37.5,42.5 + parent: 2 + - uid: 15212 + components: + - type: Transform + pos: 36.5,42.5 + parent: 2 + - uid: 15213 + components: + - type: Transform + pos: 35.5,42.5 + parent: 2 + - uid: 15214 + components: + - type: Transform + pos: 34.5,42.5 + parent: 2 + - uid: 15215 + components: + - type: Transform + pos: 33.5,42.5 + parent: 2 + - uid: 15216 + components: + - type: Transform + pos: 32.5,42.5 + parent: 2 + - uid: 15217 + components: + - type: Transform + pos: 45.5,45.5 + parent: 2 + - uid: 15218 + components: + - type: Transform + pos: 45.5,44.5 + parent: 2 + - uid: 15219 + components: + - type: Transform + pos: 45.5,43.5 + parent: 2 + - uid: 15220 + components: + - type: Transform + pos: 45.5,42.5 + parent: 2 + - uid: 15221 + components: + - type: Transform + pos: 45.5,36.5 + parent: 2 + - uid: 15222 + components: + - type: Transform + pos: 45.5,35.5 + parent: 2 + - uid: 15223 + components: + - type: Transform + pos: 45.5,34.5 + parent: 2 + - uid: 15224 + components: + - type: Transform + pos: 45.5,29.5 + parent: 2 + - uid: 15225 + components: + - type: Transform + pos: 45.5,28.5 + parent: 2 + - uid: 15226 + components: + - type: Transform + pos: 45.5,27.5 + parent: 2 + - uid: 15227 + components: + - type: Transform + pos: 44.5,47.5 + parent: 2 + - uid: 15228 + components: + - type: Transform + pos: 42.5,47.5 + parent: 2 + - uid: 15229 + components: + - type: Transform + pos: 44.5,49.5 + parent: 2 + - uid: 15230 + components: + - type: Transform + pos: 42.5,49.5 + parent: 2 + - uid: 15231 + components: + - type: Transform + pos: 45.5,37.5 + parent: 2 + - uid: 15232 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 29.5,47.5 + parent: 2 + - uid: 15233 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 51.5,46.5 + parent: 2 + - uid: 15234 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 38.5,-13.5 + parent: 2 + - uid: 15235 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 36.5,-13.5 + parent: 2 + - uid: 15236 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 43.5,-13.5 + parent: 2 + - uid: 15237 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 45.5,-11.5 + parent: 2 + - uid: 15238 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 45.5,-10.5 + parent: 2 + - uid: 15239 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 45.5,-8.5 + parent: 2 + - uid: 15240 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 45.5,-7.5 + parent: 2 + - uid: 15241 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 47.5,-13.5 + parent: 2 + - uid: 15242 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 47.5,-11.5 + parent: 2 + - uid: 15243 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 47.5,-7.5 + parent: 2 + - uid: 15244 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,-7.5 + parent: 2 + - uid: 15245 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 47.5,-5.5 + parent: 2 + - uid: 15246 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 47.5,-15.5 + parent: 2 + - uid: 15247 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 46.5,-15.5 + parent: 2 + - uid: 15248 + components: + - type: Transform + pos: -17.5,18.5 + parent: 2 + - uid: 15249 + components: + - type: Transform + pos: -17.5,20.5 + parent: 2 + - uid: 15250 + components: + - type: Transform + pos: -12.5,21.5 + parent: 2 + - uid: 15251 + components: + - type: Transform + pos: -11.5,21.5 + parent: 2 + - uid: 15252 + components: + - type: Transform + pos: -15.5,21.5 + parent: 2 + - uid: 15253 + components: + - type: Transform + pos: -9.5,21.5 + parent: 2 + - uid: 15254 + components: + - type: Transform + pos: -8.5,21.5 + parent: 2 + - uid: 15255 + components: + - type: Transform + pos: -6.5,21.5 + parent: 2 + - uid: 15256 + components: + - type: Transform + pos: -5.5,21.5 + parent: 2 + - uid: 15257 + components: + - type: Transform + pos: -3.5,21.5 + parent: 2 + - uid: 15258 + components: + - type: Transform + pos: -2.5,21.5 + parent: 2 + - uid: 15259 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,24.5 + parent: 2 + - uid: 15260 + components: + - type: Transform + pos: -17.5,25.5 + parent: 2 + - uid: 15261 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,25.5 + parent: 2 + - uid: 15262 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,25.5 + parent: 2 + - uid: 15263 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,25.5 + parent: 2 + - uid: 15264 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,25.5 + parent: 2 + - uid: 15265 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,25.5 + parent: 2 + - uid: 15266 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,25.5 + parent: 2 + - uid: 15267 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -25.5,26.5 + parent: 2 + - uid: 15268 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,26.5 + parent: 2 + - uid: 15269 + components: + - type: Transform + pos: -16.5,30.5 + parent: 2 + - uid: 15270 + components: + - type: Transform + pos: -14.5,30.5 + parent: 2 + - uid: 15271 + components: + - type: Transform + pos: -11.5,30.5 + parent: 2 + - uid: 15272 + components: + - type: Transform + pos: -13.5,31.5 + parent: 2 + - uid: 15273 + components: + - type: Transform + pos: -8.5,36.5 + parent: 2 + - uid: 15274 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,37.5 + parent: 2 + - uid: 15275 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,39.5 + parent: 2 + - uid: 15276 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,38.5 + parent: 2 + - uid: 15277 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,40.5 + parent: 2 + - uid: 15278 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,37.5 + parent: 2 + - uid: 15279 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,37.5 + parent: 2 + - uid: 15280 + components: + - type: Transform + pos: -24.5,46.5 + parent: 2 + - uid: 15281 + components: + - type: Transform + pos: -23.5,46.5 + parent: 2 + - uid: 15282 + components: + - type: Transform + pos: -22.5,46.5 + parent: 2 + - uid: 15283 + components: + - type: Transform + pos: -21.5,46.5 + parent: 2 + - uid: 15284 + components: + - type: Transform + pos: -21.5,45.5 + parent: 2 + - uid: 15285 + components: + - type: Transform + pos: -20.5,45.5 + parent: 2 + - uid: 15286 + components: + - type: Transform + pos: -20.5,44.5 + parent: 2 + - uid: 15287 + components: + - type: Transform + pos: -20.5,43.5 + parent: 2 + - uid: 15288 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,36.5 + parent: 2 + - uid: 15289 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,34.5 + parent: 2 + - uid: 15290 + components: + - type: Transform + pos: -35.5,33.5 + parent: 2 + - uid: 15291 + components: + - type: Transform + pos: -35.5,36.5 + parent: 2 + - uid: 15292 + components: + - type: Transform + pos: -35.5,39.5 + parent: 2 + - uid: 15293 + components: + - type: Transform + pos: -38.5,28.5 + parent: 2 + - uid: 15294 + components: + - type: Transform + pos: -38.5,30.5 + parent: 2 + - uid: 15295 + components: + - type: Transform + pos: -43.5,32.5 + parent: 2 + - uid: 15296 + components: + - type: Transform + pos: -43.5,33.5 + parent: 2 + - uid: 15297 + components: + - type: Transform + pos: -43.5,34.5 + parent: 2 + - uid: 15298 + components: + - type: Transform + pos: -41.5,38.5 + parent: 2 + - uid: 15299 + components: + - type: Transform + pos: -40.5,38.5 + parent: 2 + - uid: 15300 + components: + - type: Transform + pos: -38.5,39.5 + parent: 2 + - uid: 15301 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -37.5,27.5 + parent: 2 + - uid: 15302 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,27.5 + parent: 2 + - uid: 15303 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -40.5,23.5 + parent: 2 + - uid: 15304 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,28.5 + parent: 2 + - uid: 15305 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,30.5 + parent: 2 + - uid: 15306 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,32.5 + parent: 2 + - uid: 15307 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,35.5 + parent: 2 + - uid: 15308 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,45.5 + parent: 2 + - uid: 15309 + components: + - type: Transform + pos: 4.5,36.5 + parent: 2 + - uid: 15310 + components: + - type: Transform + pos: 5.5,36.5 + parent: 2 + - uid: 15311 + components: + - type: Transform + pos: 6.5,36.5 + parent: 2 + - uid: 15312 + components: + - type: Transform + pos: -12.5,47.5 + parent: 2 + - uid: 15313 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,50.5 + parent: 2 + - uid: 15314 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,51.5 + parent: 2 + - uid: 15315 + components: + - type: Transform + pos: -9.5,55.5 + parent: 2 + - uid: 15316 + components: + - type: Transform + pos: -4.5,57.5 + parent: 2 + - uid: 15317 + components: + - type: Transform + pos: -2.5,57.5 + parent: 2 + - uid: 15318 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,48.5 + parent: 2 + - uid: 15319 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,51.5 + parent: 2 + - uid: 15320 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 14.5,46.5 + parent: 2 + - uid: 15321 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 12.5,46.5 + parent: 2 + - uid: 15322 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,45.5 + parent: 2 + - uid: 15323 + components: + - type: Transform + pos: 3.5,53.5 + parent: 2 + - uid: 15324 + components: + - type: Transform + pos: 6.5,57.5 + parent: 2 + - uid: 15325 + components: + - type: Transform + pos: 11.5,55.5 + parent: 2 + - uid: 15326 + components: + - type: Transform + pos: 11.5,54.5 + parent: 2 + - uid: 15327 + components: + - type: Transform + pos: 11.5,53.5 + parent: 2 + - uid: 15328 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,54.5 + parent: 2 + - uid: 15329 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,54.5 + parent: 2 + - uid: 15330 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,57.5 + parent: 2 + - uid: 15331 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,57.5 + parent: 2 + - uid: 15332 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,60.5 + parent: 2 + - uid: 15333 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,61.5 + parent: 2 + - uid: 15334 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,61.5 + parent: 2 + - uid: 15335 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,62.5 + parent: 2 + - uid: 15336 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,62.5 + parent: 2 + - uid: 15337 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,62.5 + parent: 2 + - uid: 15338 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,63.5 + parent: 2 + - uid: 15339 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,63.5 + parent: 2 + - uid: 15340 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,63.5 + parent: 2 + - uid: 15341 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,63.5 + parent: 2 + - uid: 15342 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,63.5 + parent: 2 + - uid: 15343 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,63.5 + parent: 2 + - uid: 15344 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,63.5 + parent: 2 + - uid: 15345 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,63.5 + parent: 2 + - uid: 15346 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,62.5 + parent: 2 + - uid: 15347 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,62.5 + parent: 2 + - uid: 15348 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,62.5 + parent: 2 + - uid: 15349 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,61.5 + parent: 2 + - uid: 15350 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,61.5 + parent: 2 + - uid: 15351 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,60.5 + parent: 2 + - uid: 15352 + components: + - type: Transform + pos: -45.5,32.5 + parent: 2 + - uid: 15353 + components: + - type: Transform + pos: -45.5,35.5 + parent: 2 + - uid: 15354 + components: + - type: Transform + pos: -55.5,32.5 + parent: 2 + - uid: 15355 + components: + - type: Transform + pos: -56.5,32.5 + parent: 2 + - uid: 15356 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -45.5,40.5 + parent: 2 + - uid: 15357 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -35.5,42.5 + parent: 2 + - uid: 15358 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -32.5,46.5 + parent: 2 + - uid: 15359 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,46.5 + parent: 2 + - uid: 15360 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,48.5 + parent: 2 + - uid: 15361 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -25.5,48.5 + parent: 2 + - uid: 15362 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,48.5 + parent: 2 + - uid: 15363 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,48.5 + parent: 2 + - uid: 15364 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,48.5 + parent: 2 + - uid: 15365 + components: + - type: Transform + pos: 0.5,73.5 + parent: 2 + - uid: 15366 + components: + - type: Transform + pos: -3.5,68.5 + parent: 2 + - uid: 15367 + components: + - type: Transform + pos: -2.5,68.5 + parent: 2 + - uid: 15368 + components: + - type: Transform + pos: 5.5,68.5 + parent: 2 + - uid: 15369 + components: + - type: Transform + pos: 1.5,73.5 + parent: 2 + - uid: 15370 + components: + - type: Transform + pos: 2.5,73.5 + parent: 2 + - uid: 15371 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,86.5 + parent: 2 + - uid: 15372 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,86.5 + parent: 2 + - uid: 15373 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,86.5 + parent: 2 + - uid: 15374 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,86.5 + parent: 2 + - uid: 15375 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,86.5 + parent: 2 + - uid: 15376 + components: + - type: Transform + pos: 0.5,81.5 + parent: 2 + - uid: 15377 + components: + - type: Transform + pos: 2.5,81.5 + parent: 2 + - uid: 15378 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,-12.5 + parent: 2 + - uid: 15379 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 20.5,-12.5 + parent: 2 + - uid: 15380 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,-12.5 + parent: 2 + - uid: 15381 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,-12.5 + parent: 2 + - uid: 15382 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,-17.5 + parent: 2 + - uid: 15383 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,-17.5 + parent: 2 + - uid: 15384 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,-21.5 + parent: 2 + - uid: 15385 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,-21.5 + parent: 2 + - uid: 15386 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 23.5,-21.5 + parent: 2 + - uid: 15387 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 22.5,-21.5 + parent: 2 + - uid: 15388 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-22.5 + parent: 2 + - uid: 15389 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,-22.5 + parent: 2 + - uid: 15390 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 29.5,-22.5 + parent: 2 + - uid: 15391 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,-22.5 + parent: 2 + - uid: 15392 + components: + - type: Transform + pos: 39.5,-17.5 + parent: 2 + - uid: 15393 + components: + - type: Transform + pos: 39.5,-15.5 + parent: 2 + - uid: 15394 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,-20.5 + parent: 2 + - uid: 15395 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,-21.5 + parent: 2 + - uid: 15396 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,-22.5 + parent: 2 + - uid: 15397 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,-23.5 + parent: 2 + - uid: 15398 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,-25.5 + parent: 2 + - uid: 15399 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 47.5,-24.5 + parent: 2 + - uid: 15400 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 47.5,-23.5 + parent: 2 + - uid: 15401 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 47.5,-22.5 + parent: 2 + - uid: 15402 + components: + - type: Transform + pos: 48.5,-30.5 + parent: 2 + - uid: 15403 + components: + - type: Transform + pos: 48.5,-32.5 + parent: 2 + - uid: 15404 + components: + - type: Transform + pos: 41.5,-26.5 + parent: 2 + - uid: 15405 + components: + - type: Transform + pos: 38.5,-26.5 + parent: 2 + - uid: 15406 + components: + - type: Transform + pos: 31.5,-26.5 + parent: 2 + - uid: 15407 + components: + - type: Transform + pos: 29.5,-27.5 + parent: 2 + - uid: 15408 + components: + - type: Transform + pos: 29.5,-28.5 + parent: 2 + - uid: 15409 + components: + - type: Transform + pos: 29.5,-29.5 + parent: 2 + - uid: 15410 + components: + - type: Transform + pos: 29.5,-31.5 + parent: 2 + - uid: 15411 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,-28.5 + parent: 2 + - uid: 15412 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,-32.5 + parent: 2 + - uid: 15413 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,-28.5 + parent: 2 + - uid: 15414 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,-28.5 + parent: 2 + - uid: 15415 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,-28.5 + parent: 2 + - uid: 15416 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,-20.5 + parent: 2 + - uid: 15417 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,-20.5 + parent: 2 + - uid: 15418 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,-20.5 + parent: 2 + - uid: 15419 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,-19.5 + parent: 2 + - uid: 15420 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-39.5 + parent: 2 + - uid: 15421 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-42.5 + parent: 2 + - uid: 15422 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-43.5 + parent: 2 + - uid: 15423 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-43.5 + parent: 2 + - uid: 15424 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,-43.5 + parent: 2 + - uid: 15425 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,-43.5 + parent: 2 + - uid: 15426 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,-42.5 + parent: 2 + - uid: 15427 + components: + - type: Transform + pos: 5.5,-48.5 + parent: 2 + - uid: 15428 + components: + - type: Transform + pos: 5.5,-47.5 + parent: 2 + - uid: 15429 + components: + - type: Transform + pos: 4.5,-47.5 + parent: 2 + - uid: 15430 + components: + - type: Transform + pos: 3.5,-47.5 + parent: 2 + - uid: 15431 + components: + - type: Transform + pos: 2.5,-47.5 + parent: 2 + - uid: 15432 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-51.5 + parent: 2 + - uid: 15433 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-48.5 + parent: 2 + - uid: 15434 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-46.5 + parent: 2 + - uid: 15435 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,-54.5 + parent: 2 + - uid: 15436 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,-56.5 + parent: 2 + - uid: 15437 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 13.5,-49.5 + parent: 2 + - uid: 15438 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.5,-49.5 + parent: 2 + - uid: 15439 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.5,-49.5 + parent: 2 + - uid: 15440 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -39.5,-19.5 + parent: 2 + - uid: 15441 + components: + - type: Transform + pos: 12.5,23.5 + parent: 2 + - uid: 15442 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,-55.5 + parent: 2 + - uid: 15443 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,-54.5 + parent: 2 + - uid: 15444 + components: + - type: Transform + pos: 33.5,-53.5 + parent: 2 + - uid: 15445 + components: + - type: Transform + pos: -43.5,20.5 + parent: 2 + - uid: 15446 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-61.5 + parent: 2 + - uid: 15447 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,-61.5 + parent: 2 + - uid: 15448 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,-61.5 + parent: 2 + - uid: 15449 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-61.5 + parent: 2 + - uid: 15450 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,-62.5 + parent: 2 + - uid: 15451 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,-62.5 + parent: 2 + - uid: 15452 + components: + - type: Transform + pos: 9.5,-70.5 + parent: 2 + - uid: 15453 + components: + - type: Transform + pos: 9.5,-69.5 + parent: 2 + - uid: 15454 + components: + - type: Transform + pos: 9.5,-68.5 + parent: 2 + - uid: 15455 + components: + - type: Transform + pos: 11.5,-71.5 + parent: 2 + - uid: 15456 + components: + - type: Transform + pos: 12.5,-71.5 + parent: 2 + - uid: 15457 + components: + - type: Transform + pos: 13.5,-71.5 + parent: 2 + - uid: 15458 + components: + - type: Transform + pos: 15.5,-62.5 + parent: 2 + - uid: 15459 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-71.5 + parent: 2 + - uid: 15460 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-71.5 + parent: 2 + - uid: 15461 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-71.5 + parent: 2 + - uid: 15462 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-70.5 + parent: 2 + - uid: 15463 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-69.5 + parent: 2 + - uid: 15464 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-68.5 + parent: 2 + - uid: 15465 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-74.5 + parent: 2 + - uid: 15466 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,-77.5 + parent: 2 + - uid: 15467 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,-77.5 + parent: 2 + - uid: 15468 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-77.5 + parent: 2 + - uid: 15469 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-77.5 + parent: 2 + - uid: 15470 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-77.5 + parent: 2 + - uid: 15471 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-77.5 + parent: 2 + - uid: 15472 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,-77.5 + parent: 2 + - uid: 15473 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,-77.5 + parent: 2 + - uid: 15474 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-74.5 + parent: 2 + - uid: 15475 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.5,-48.5 + parent: 2 + - uid: 15476 + components: + - type: Transform + pos: 20.5,-52.5 + parent: 2 + - uid: 15477 + components: + - type: Transform + pos: 19.5,-54.5 + parent: 2 + - uid: 15478 + components: + - type: Transform + pos: 19.5,-58.5 + parent: 2 + - uid: 15479 + components: + - type: Transform + pos: 19.5,-62.5 + parent: 2 + - uid: 15480 + components: + - type: Transform + pos: 21.5,-64.5 + parent: 2 + - uid: 15481 + components: + - type: Transform + pos: 21.5,-52.5 + parent: 2 + - uid: 15482 + components: + - type: Transform + pos: 21.5,-53.5 + parent: 2 + - uid: 15483 + components: + - type: Transform + pos: 21.5,-54.5 + parent: 2 + - uid: 15484 + components: + - type: Transform + pos: 21.5,-55.5 + parent: 2 + - uid: 15485 + components: + - type: Transform + pos: 21.5,-57.5 + parent: 2 + - uid: 15486 + components: + - type: Transform + pos: 21.5,-58.5 + parent: 2 + - uid: 15487 + components: + - type: Transform + pos: 21.5,-59.5 + parent: 2 + - uid: 15488 + components: + - type: Transform + pos: 21.5,-61.5 + parent: 2 + - uid: 15489 + components: + - type: Transform + pos: 21.5,-62.5 + parent: 2 + - uid: 15490 + components: + - type: Transform + pos: 21.5,-63.5 + parent: 2 + - uid: 15491 + components: + - type: Transform + pos: 24.5,-65.5 + parent: 2 + - uid: 15492 + components: + - type: Transform + pos: 26.5,-65.5 + parent: 2 + - uid: 15493 + components: + - type: Transform + pos: 27.5,-65.5 + parent: 2 + - uid: 15494 + components: + - type: Transform + pos: 28.5,-65.5 + parent: 2 + - uid: 15495 + components: + - type: Transform + pos: 30.5,-65.5 + parent: 2 + - uid: 15496 + components: + - type: Transform + pos: 31.5,-65.5 + parent: 2 + - uid: 15497 + components: + - type: Transform + pos: 32.5,-65.5 + parent: 2 + - uid: 15498 + components: + - type: Transform + pos: 33.5,-63.5 + parent: 2 + - uid: 15499 + components: + - type: Transform + pos: 33.5,-62.5 + parent: 2 + - uid: 15500 + components: + - type: Transform + pos: 33.5,-61.5 + parent: 2 + - uid: 15501 + components: + - type: Transform + pos: 33.5,-59.5 + parent: 2 + - uid: 15502 + components: + - type: Transform + pos: 33.5,-58.5 + parent: 2 + - uid: 15503 + components: + - type: Transform + pos: 33.5,-57.5 + parent: 2 + - uid: 15504 + components: + - type: Transform + pos: 38.5,-47.5 + parent: 2 + - uid: 15505 + components: + - type: Transform + pos: 39.5,-44.5 + parent: 2 + - uid: 15506 + components: + - type: Transform + pos: 41.5,-44.5 + parent: 2 + - uid: 15507 + components: + - type: Transform + pos: 41.5,-42.5 + parent: 2 + - uid: 15508 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,-48.5 + parent: 2 + - uid: 15509 + components: + - type: Transform + pos: 27.5,-67.5 + parent: 2 + - uid: 15510 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-54.5 + parent: 2 + - uid: 15511 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-58.5 + parent: 2 + - uid: 15512 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-62.5 + parent: 2 + - uid: 15513 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 48.5,-31.5 + parent: 2 + - uid: 15514 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,-34.5 + parent: 2 + - uid: 15515 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,36.5 + parent: 2 + - uid: 15516 + components: + - type: Transform + pos: -11.5,-25.5 + parent: 2 + - uid: 15517 + components: + - type: Transform + pos: -9.5,-25.5 + parent: 2 + - uid: 15518 + components: + - type: Transform + pos: -8.5,-25.5 + parent: 2 + - uid: 16299 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -50.5,-17.5 + parent: 2 + - uid: 18223 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -49.5,-16.5 + parent: 2 + - uid: 19032 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,13.5 + parent: 2 + - uid: 22678 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -50.5,-21.5 + parent: 2 + - uid: 22837 + components: + - type: Transform + pos: -24.5,-1.5 + parent: 2 + - uid: 22954 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -49.5,-22.5 + parent: 2 +- proto: GrilleBroken + entities: + - uid: 15519 + components: + - type: Transform + pos: -25.5,-44.5 + parent: 2 + - uid: 15520 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -16.5,7.5 + parent: 2 + - uid: 15521 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,8.5 + parent: 2 + - uid: 15523 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,-54.5 + parent: 2 + - uid: 15524 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,-58.5 + parent: 2 + - uid: 15525 + components: + - type: Transform + pos: 22.5,25.5 + parent: 2 + - uid: 15526 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -25.5,17.5 + parent: 2 + - uid: 15527 + components: + - type: Transform + pos: -24.5,-9.5 + parent: 2 + - uid: 15528 + components: + - type: Transform + pos: -21.5,11.5 + parent: 2 + - uid: 15529 + components: + - type: Transform + pos: -38.5,-33.5 + parent: 2 + - uid: 15530 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,-54.5 + parent: 2 + - uid: 15531 + components: + - type: Transform + pos: -26.5,-60.5 + parent: 2 + - uid: 15532 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,-51.5 + parent: 2 + - uid: 15533 + components: + - type: Transform + pos: -25.5,15.5 + parent: 2 + - uid: 15534 + components: + - type: Transform + pos: -29.5,-55.5 + parent: 2 + - uid: 15535 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,-3.5 + parent: 2 + - uid: 15536 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 22.5,27.5 + parent: 2 + - uid: 15537 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,17.5 + parent: 2 + - uid: 15538 + components: + - type: Transform + pos: -9.5,45.5 + parent: 2 + - uid: 15539 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,-60.5 + parent: 2 + - uid: 15540 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,-59.5 + parent: 2 + - uid: 15541 + components: + - type: Transform + pos: -24.5,-60.5 + parent: 2 + - uid: 15542 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,-60.5 + parent: 2 + - uid: 15543 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -25.5,-43.5 + parent: 2 +- proto: GunSafeDisabler + entities: + - uid: 15547 + components: + - type: Transform + pos: -13.5,38.5 + parent: 2 +- proto: GunSafeLaserCarbine + entities: + - uid: 15548 + components: + - type: Transform + pos: -15.5,38.5 + parent: 2 +- proto: GunSafePistolMk58 + entities: + - uid: 15549 + components: + - type: Transform + pos: -31.5,14.5 + parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.14673 + moles: + - 1.7459903 + - 6.568249 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 +- proto: Handcuffs + entities: + - uid: 15550 + components: + - type: Transform + pos: 43.518574,-16.785635 + parent: 2 + - uid: 15551 + components: + - type: Transform + pos: -8.463599,39.628452 + parent: 2 + - uid: 15552 + components: + - type: Transform + pos: 4.5119452,-19.054888 + parent: 2 + - uid: 15553 + components: + - type: Transform + pos: 4.5865374,-18.955433 + parent: 2 +- proto: HandheldGPSBasic + entities: + - uid: 15554 + components: + - type: Transform + pos: -44.50894,-35.43707 + parent: 2 +- proto: HandLabeler + entities: + - uid: 15555 + components: + - type: Transform + pos: 7.3101997,-29.177414 + parent: 2 + - uid: 15556 + components: + - type: Transform + pos: -20.372799,-11.412489 + parent: 2 + - uid: 15557 + components: + - type: Transform + pos: -30.58112,-6.4709306 + parent: 2 + - uid: 15558 + components: + - type: Transform + pos: -43.39614,10.873777 + parent: 2 + - uid: 15559 + components: + - type: Transform + pos: -36.55538,-30.565886 + parent: 2 + - uid: 15560 + components: + - type: Transform + pos: -44.475636,-38.837975 + parent: 2 + - uid: 15561 + components: + - type: Transform + pos: 19.690182,16.596298 + parent: 2 + - uid: 15562 + components: + - type: Transform + pos: 19.492775,-18.4637 + parent: 2 + - uid: 15563 + components: + - type: Transform + pos: 28.6381,-14.243845 + parent: 2 + - uid: 15564 + components: + - type: Transform + pos: 38.52634,-34.40402 + parent: 2 + - uid: 15565 + components: + - type: Transform + pos: 7.812145,-29.671413 + parent: 2 +- proto: HappyHonkMime + entities: + - uid: 10519 + components: + - type: Transform + parent: 10501 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: HeatExchanger + entities: + - uid: 15566 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,-68.5 + parent: 2 + - uid: 15567 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,-68.5 + parent: 2 + - uid: 15568 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,-68.5 + parent: 2 + - uid: 15569 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,-68.5 + parent: 2 + - uid: 15570 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,-70.5 + parent: 2 + - uid: 15571 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,-70.5 + parent: 2 + - uid: 15572 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,-70.5 + parent: 2 + - uid: 15573 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,-70.5 + parent: 2 +- proto: HighSecArmoryLocked + entities: + - uid: 15574 + components: + - type: Transform + pos: -16.5,37.5 + parent: 2 +- proto: HighSecCommandLocked + entities: + - uid: 15575 + components: + - type: Transform + pos: 7.5,73.5 + parent: 2 + - uid: 15576 + components: + - type: Transform + pos: -4.5,73.5 + parent: 2 + - uid: 15577 + components: + - type: Transform + pos: 7.5,81.5 + parent: 2 + - uid: 15578 + components: + - type: Transform + pos: 4.5,84.5 + parent: 2 + - uid: 15579 + components: + - type: Transform + pos: -1.5,84.5 + parent: 2 + - uid: 15580 + components: + - type: Transform + pos: -4.5,81.5 + parent: 2 + - uid: 15581 + components: + - type: Transform + pos: -33.5,13.5 + parent: 2 + - uid: 15582 + components: + - type: Transform + pos: -3.5,-38.5 + parent: 2 + - uid: 15583 + components: + - type: Transform + pos: 3.5,29.5 + parent: 2 + - uid: 15584 + components: + - type: Transform + pos: 3.5,34.5 + parent: 2 + - uid: 15585 + components: + - type: Transform + pos: -1.5,70.5 + parent: 2 + - uid: 15586 + components: + - type: Transform + pos: 4.5,70.5 + parent: 2 + - uid: 15587 + components: + - type: Transform + pos: 1.5,81.5 + parent: 2 +- proto: Holoprojector + entities: + - uid: 15588 + components: + - type: Transform + pos: 7.4954042,13.451323 + parent: 2 +- proto: HospitalCurtainsOpen + entities: + - uid: 15589 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,-49.5 + parent: 2 + - uid: 15590 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,-47.5 + parent: 2 + - uid: 15591 + components: + - type: Transform + pos: 39.5,22.5 + parent: 2 + - uid: 15592 + components: + - type: Transform + pos: 39.5,21.5 + parent: 2 + - uid: 15593 + components: + - type: Transform + pos: 40.5,31.5 + parent: 2 + - uid: 15594 + components: + - type: Transform + pos: 38.5,31.5 + parent: 2 + - uid: 15595 + components: + - type: Transform + pos: 36.5,31.5 + parent: 2 + - uid: 15596 + components: + - type: Transform + pos: 34.5,31.5 + parent: 2 + - uid: 15597 + components: + - type: Transform + pos: 32.5,31.5 + parent: 2 + - uid: 15598 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -30.5,36.5 + parent: 2 + - uid: 15599 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,36.5 + parent: 2 + - uid: 15600 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,36.5 + parent: 2 + - uid: 15601 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,24.5 + parent: 2 + - uid: 15602 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,-26.5 + parent: 2 + - uid: 15603 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,-26.5 + parent: 2 + - uid: 15604 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,-35.5 + parent: 2 + - uid: 15605 + components: + - type: Transform + pos: 8.5,27.5 + parent: 2 + - uid: 15606 + components: + - type: Transform + pos: -34.5,-58.5 + parent: 2 + - uid: 15607 + components: + - type: Transform + pos: -34.5,-60.5 + parent: 2 +- proto: hydroponicsSoil + entities: + - uid: 15608 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-7.5 + parent: 2 + - uid: 15609 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-6.5 + parent: 2 + - uid: 15610 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-5.5 + parent: 2 + - uid: 15611 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-5.5 + parent: 2 + - uid: 15612 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-6.5 + parent: 2 + - uid: 15613 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-7.5 + parent: 2 +- proto: HydroponicsToolMiniHoe + entities: + - uid: 15614 + components: + - type: Transform + pos: -41.665028,30.54518 + parent: 2 +- proto: HydroponicsToolSpade + entities: + - uid: 15615 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -41.62307,30.398327 + parent: 2 +- proto: hydroponicsTray + entities: + - uid: 15616 + components: + - type: Transform + pos: 33.5,13.5 + parent: 2 + - uid: 15617 + components: + - type: Transform + pos: 34.5,13.5 + parent: 2 + - uid: 15618 + components: + - type: Transform + pos: 35.5,13.5 + parent: 2 + - uid: 15619 + components: + - type: Transform + pos: 36.5,13.5 + parent: 2 + - uid: 15620 + components: + - type: Transform + pos: 38.5,14.5 + parent: 2 + - uid: 15621 + components: + - type: Transform + pos: 38.5,15.5 + parent: 2 + - uid: 15622 + components: + - type: Transform + pos: 38.5,16.5 + parent: 2 + - uid: 15623 + components: + - type: Transform + pos: 38.5,17.5 + parent: 2 + - uid: 15624 + components: + - type: Transform + pos: 35.5,17.5 + parent: 2 + - uid: 15625 + components: + - type: Transform + pos: 35.5,16.5 + parent: 2 + - uid: 15626 + components: + - type: Transform + pos: 35.5,15.5 + parent: 2 + - uid: 15627 + components: + - type: Transform + pos: 34.5,17.5 + parent: 2 + - uid: 15628 + components: + - type: Transform + pos: 34.5,16.5 + parent: 2 + - uid: 15629 + components: + - type: Transform + pos: 34.5,15.5 + parent: 2 + - uid: 15630 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,17.5 + parent: 2 + - uid: 15631 + components: + - type: Transform + pos: -41.5,28.5 + parent: 2 + - uid: 15632 + components: + - type: Transform + pos: -40.5,28.5 + parent: 2 + - uid: 15633 + components: + - type: Transform + pos: -39.5,28.5 + parent: 2 +- proto: HydroponicsTrayMachineCircuitboard + entities: + - uid: 15634 + components: + - type: Transform + pos: -2.4294145,-35.356567 + parent: 2 +- proto: IDComputerCircuitboard + entities: + - uid: 15635 + components: + - type: Transform + pos: -4.5,-40.5 + parent: 2 +- proto: Igniter + entities: + - uid: 15636 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.476173,-43.527416 + parent: 2 + - type: DeviceLinkSink + links: + - 18002 +- proto: IngotGold + entities: + - uid: 9171 + components: + - type: Transform + parent: 9170 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: IngotSilver + entities: + - uid: 9172 + components: + - type: Transform + parent: 9170 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: IntercomAll + entities: + - uid: 15637 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,47.5 + parent: 2 + - uid: 15638 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,52.5 + parent: 2 + - uid: 15639 + components: + - type: Transform + pos: 3.5,80.5 + parent: 2 + - uid: 15640 + components: + - type: Transform + pos: -0.5,80.5 + parent: 2 + - uid: 15641 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,74.5 + parent: 2 + - uid: 15642 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,74.5 + parent: 2 +- proto: IntercomAssesmbly + entities: + - uid: 15643 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,-33.5 + parent: 2 +- proto: IntercomCommand + entities: + - uid: 15644 + components: + - type: Transform + pos: 4.5,28.5 + parent: 2 + - uid: 15645 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,3.5 + parent: 2 + - uid: 15646 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,6.5 + parent: 2 + - uid: 15647 + components: + - type: Transform + pos: -27.5,14.5 + parent: 2 + - uid: 15648 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,3.5 + parent: 2 + - uid: 15649 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -41.5,5.5 + parent: 2 + - uid: 15650 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -43.5,-0.5 + parent: 2 + - uid: 15651 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -39.5,-14.5 + parent: 2 + - uid: 15652 + components: + - type: Transform + pos: -43.5,-6.5 + parent: 2 + - uid: 15653 + components: + - type: Transform + pos: -30.5,-9.5 + parent: 2 + - uid: 15654 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.5,16.5 + parent: 2 + - uid: 15655 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,-21.5 + parent: 2 + - uid: 15656 + components: + - type: Transform + pos: -16.5,-18.5 + parent: 2 + - uid: 15657 + components: + - type: Transform + pos: -5.5,-19.5 + parent: 2 + - uid: 15658 + components: + - type: Transform + pos: -2.5,-38.5 + parent: 2 + - uid: 15659 + components: + - type: Transform + pos: 24.5,-16.5 + parent: 2 + - uid: 15660 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -25.5,42.5 + parent: 2 + - uid: 15661 + components: + - type: Transform + pos: 4.5,33.5 + parent: 2 + - uid: 15662 + components: + - type: Transform + pos: 6.5,45.5 + parent: 2 + - uid: 15663 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,51.5 + parent: 2 + - uid: 15664 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,71.5 + parent: 2 + - uid: 15665 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,71.5 + parent: 2 + - uid: 15666 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,71.5 + parent: 2 + - uid: 15667 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,78.5 + parent: 2 + - uid: 15668 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,81.5 + parent: 2 + - uid: 15669 + components: + - type: Transform + pos: -6.5,84.5 + parent: 2 + - uid: 15670 + components: + - type: Transform + pos: 1.5,85.5 + parent: 2 + - uid: 15671 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,78.5 + parent: 2 + - uid: 15672 + components: + - type: Transform + pos: 10.5,-49.5 + parent: 2 +- proto: IntercomCommon + entities: + - uid: 15673 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,7.5 + parent: 2 + - uid: 15674 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,12.5 + parent: 2 + - uid: 15675 + components: + - type: Transform + pos: -22.5,3.5 + parent: 2 + - uid: 15676 + components: + - type: Transform + pos: -43.5,-14.5 + parent: 2 + - uid: 15677 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -39.5,18.5 + parent: 2 + - uid: 15678 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -45.5,14.5 + parent: 2 + - uid: 15679 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,-1.5 + parent: 2 + - uid: 15680 + components: + - type: Transform + pos: 31.5,3.5 + parent: 2 + - uid: 15681 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 44.5,3.5 + parent: 2 + - uid: 15682 + components: + - type: Transform + pos: 39.5,-1.5 + parent: 2 + - uid: 15683 + components: + - type: Transform + pos: 32.5,25.5 + parent: 2 + - uid: 15684 + components: + - type: Transform + pos: 17.5,34.5 + parent: 2 + - uid: 15685 + components: + - type: Transform + pos: 22.5,34.5 + parent: 2 + - uid: 15686 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,41.5 + parent: 2 + - uid: 15687 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 16.5,37.5 + parent: 2 + - uid: 15688 + components: + - type: Transform + pos: 21.5,41.5 + parent: 2 + - uid: 15689 + components: + - type: Transform + pos: 24.5,41.5 + parent: 2 + - uid: 15690 + components: + - type: Transform + pos: 24.5,37.5 + parent: 2 + - uid: 15691 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,-13.5 + parent: 2 + - uid: 15692 + components: + - type: Transform + pos: -18.5,26.5 + parent: 2 + - uid: 15693 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,23.5 + parent: 2 + - uid: 15694 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,23.5 + parent: 2 + - uid: 15695 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,23.5 + parent: 2 + - uid: 15696 + components: + - type: Transform + pos: -31.5,31.5 + parent: 2 + - uid: 15697 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,31.5 + parent: 2 + - uid: 15698 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -41.5,21.5 + parent: 2 + - uid: 15699 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -41.5,23.5 + parent: 2 + - uid: 15700 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,24.5 + parent: 2 + - uid: 15701 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,38.5 + parent: 2 + - uid: 15702 + components: + - type: Transform + pos: 39.5,-19.5 + parent: 2 + - uid: 15703 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,-19.5 + parent: 2 + - uid: 15704 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,-19.5 + parent: 2 + - uid: 15705 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-20.5 + parent: 2 +- proto: IntercomEngineering + entities: + - uid: 15706 + components: + - type: Transform + pos: -2.5,-34.5 + parent: 2 + - uid: 15707 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,-58.5 + parent: 2 + - uid: 15708 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,-58.5 + parent: 2 + - uid: 15709 + components: + - type: Transform + pos: -12.5,-54.5 + parent: 2 + - uid: 15710 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,-45.5 + parent: 2 + - uid: 15711 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 17.5,-36.5 + parent: 2 + - uid: 15712 + components: + - type: Transform + pos: 22.5,-38.5 + parent: 2 + - uid: 15713 + components: + - type: Transform + pos: 6.5,-38.5 + parent: 2 + - uid: 15714 + components: + - type: Transform + pos: -2.5,-54.5 + parent: 2 + - uid: 15715 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,-59.5 + parent: 2 + - uid: 15716 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-58.5 + parent: 2 + - uid: 15717 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,-64.5 + parent: 2 + - uid: 15718 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-66.5 + parent: 2 + - uid: 15719 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,-67.5 + parent: 2 + - uid: 15720 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,-67.5 + parent: 2 + - uid: 15721 + components: + - type: Transform + pos: 2.5,-71.5 + parent: 2 + - uid: 15722 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-65.5 + parent: 2 + - uid: 15723 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,-60.5 + parent: 2 + - uid: 15724 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,-60.5 + parent: 2 + - uid: 15725 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,-47.5 + parent: 2 + - uid: 15726 + components: + - type: Transform + pos: 34.5,-47.5 + parent: 2 +- proto: IntercomMedical + entities: + - uid: 15727 + components: + - type: Transform + pos: 32.5,-13.5 + parent: 2 + - uid: 15728 + components: + - type: Transform + pos: 14.5,-7.5 + parent: 2 + - uid: 15729 + components: + - type: Transform + pos: 16.5,-12.5 + parent: 2 + - uid: 15730 + components: + - type: Transform + pos: 19.5,-17.5 + parent: 2 + - uid: 15731 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-19.5 + parent: 2 + - uid: 15732 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 39.5,-35.5 + parent: 2 + - uid: 15733 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 48.5,-28.5 + parent: 2 + - uid: 15734 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,-26.5 + parent: 2 + - uid: 15735 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,-31.5 + parent: 2 + - uid: 15736 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,-30.5 + parent: 2 + - uid: 15737 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,-29.5 + parent: 2 + - uid: 15738 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-32.5 + parent: 2 + - uid: 15739 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,-29.5 + parent: 2 + - uid: 15740 + components: + - type: Transform + pos: 7.5,-20.5 + parent: 2 + - uid: 15741 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,-21.5 + parent: 2 + - uid: 15742 + components: + - type: Transform + pos: 11.5,-33.5 + parent: 2 +- proto: IntercomScience + entities: + - uid: 15743 + components: + - type: Transform + pos: -28.5,-15.5 + parent: 2 + - uid: 15744 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,-27.5 + parent: 2 + - uid: 15745 + components: + - type: Transform + pos: -22.5,-15.5 + parent: 2 + - uid: 15746 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -18.5,-22.5 + parent: 2 + - uid: 15747 + components: + - type: Transform + pos: -15.5,-21.5 + parent: 2 + - uid: 15748 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,-21.5 + parent: 2 + - uid: 15749 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,-29.5 + parent: 2 + - uid: 15750 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,-33.5 + parent: 2 + - uid: 15751 + components: + - type: Transform + pos: -3.5,-29.5 + parent: 2 + - uid: 15752 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,-29.5 + parent: 2 + - uid: 15753 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,-34.5 + parent: 2 + - uid: 15754 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,-39.5 + parent: 2 + - uid: 15755 + components: + - type: Transform + pos: -40.5,-40.5 + parent: 2 + - uid: 15756 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -46.5,-33.5 + parent: 2 + - uid: 15757 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,-14.5 + parent: 2 + - uid: 15758 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,-34.5 + parent: 2 +- proto: IntercomSecurity + entities: + - uid: 15759 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,12.5 + parent: 2 + - uid: 15760 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,15.5 + parent: 2 + - uid: 15761 + components: + - type: Transform + pos: -13.5,13.5 + parent: 2 + - uid: 15762 + components: + - type: Transform + pos: -9.5,13.5 + parent: 2 + - uid: 15763 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -35.5,18.5 + parent: 2 + - uid: 15764 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -27.5,-36.5 + parent: 2 + - uid: 15765 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,-3.5 + parent: 2 + - uid: 15766 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 45.5,-15.5 + parent: 2 + - uid: 15767 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,19.5 + parent: 2 + - uid: 15768 + components: + - type: Transform + pos: -7.5,30.5 + parent: 2 + - uid: 15769 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,30.5 + parent: 2 + - uid: 15770 + components: + - type: Transform + pos: -17.5,37.5 + parent: 2 + - uid: 15771 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -18.5,31.5 + parent: 2 + - uid: 15772 + components: + - type: Transform + pos: -13.5,41.5 + parent: 2 + - uid: 15773 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,33.5 + parent: 2 + - uid: 15774 + components: + - type: Transform + pos: -21.5,30.5 + parent: 2 + - uid: 15775 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,41.5 + parent: 2 + - uid: 15776 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,37.5 + parent: 2 + - uid: 15777 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,35.5 + parent: 2 + - uid: 15778 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,-18.5 + parent: 2 + - uid: 15779 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-48.5 + parent: 2 +- proto: IntercomService + entities: + - uid: 15780 + components: + - type: Transform + pos: 9.5,16.5 + parent: 2 + - uid: 15781 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,17.5 + parent: 2 + - uid: 15782 + components: + - type: Transform + pos: 24.5,20.5 + parent: 2 + - uid: 15783 + components: + - type: Transform + pos: 25.5,24.5 + parent: 2 + - uid: 15784 + components: + - type: Transform + pos: 15.5,15.5 + parent: 2 + - uid: 15785 + components: + - type: Transform + pos: 35.5,20.5 + parent: 2 + - uid: 15786 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 44.5,19.5 + parent: 2 +- proto: IntercomSupply + entities: + - uid: 15787 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,-7.5 + parent: 2 +- proto: JanitorialTrolley + entities: + - uid: 15788 + components: + - type: Transform + pos: 9.5,11.5 + parent: 2 + - uid: 15789 + components: + - type: Transform + pos: 12.5,11.5 + parent: 2 +- proto: JetpackBlack + entities: + - uid: 15790 + components: + - type: Transform + pos: -4.621241,-24.60965 + parent: 2 + - uid: 15791 + components: + - type: Transform + pos: -4.3694925,-24.488438 + parent: 2 + - uid: 15792 + components: + - type: Transform + pos: -4.6025934,-24.395197 + parent: 2 + - uid: 15793 + components: + - type: Transform + pos: -4.434761,-24.572353 + parent: 2 +- proto: JetpackBlue + entities: + - uid: 15794 + components: + - type: Transform + pos: 2.30956,-59.56945 + parent: 2 + - uid: 15795 + components: + - type: Transform + pos: 2.524012,-59.40162 + parent: 2 +- proto: KitchenElectricGrill + entities: + - uid: 15796 + components: + - type: Transform + pos: -4.5,-11.5 + parent: 2 + - type: ItemPlacer + placedEntities: + - 11487 + - uid: 15797 + components: + - type: Transform + pos: 25.5,19.5 + parent: 2 +- proto: KitchenKnife + entities: + - uid: 15798 + components: + - type: Transform + pos: -26.501507,-63.49208 + parent: 2 +- proto: KitchenMicrowave + entities: + - uid: 15799 + components: + - type: Transform + pos: -44.5,-9.5 + parent: 2 + - uid: 15800 + components: + - type: Transform + pos: -26.5,-62.5 + parent: 2 + - uid: 15801 + components: + - type: Transform + pos: 21.5,17.5 + parent: 2 + - uid: 15802 + components: + - type: Transform + pos: 26.5,19.5 + parent: 2 + - uid: 15803 + components: + - type: Transform + pos: -40.5,34.5 + parent: 2 + - uid: 15804 + components: + - type: Transform + pos: 40.5,-14.5 + parent: 2 + - uid: 15805 + components: + - type: Transform + pos: 2.5,-52.5 + parent: 2 + - uid: 15806 + components: + - type: Transform + pos: -6.5,-31.5 + parent: 2 +- proto: KitchenReagentGrinder + entities: + - uid: 837 + components: + - type: Transform + pos: 6.5,-31.5 + parent: 2 + - type: ContainerContainer + containers: + beakerSlot: !type:ContainerSlot + showEnts: False + occludes: True + ent: 838 + inputContainer: !type:Container + showEnts: False + occludes: True + ents: [] + machine_board: !type:Container + showEnts: False + occludes: True + ents: [] + machine_parts: !type:Container + showEnts: False + occludes: True + ents: [] + - uid: 10574 + components: + - type: Transform + pos: -41.5,30.5 + parent: 2 + - type: ContainerContainer + containers: + beakerSlot: !type:ContainerSlot + showEnts: False + occludes: True + ent: 10575 + inputContainer: !type:Container + showEnts: False + occludes: True + ents: [] + machine_board: !type:Container + showEnts: False + occludes: True + ents: [] + machine_parts: !type:Container + showEnts: False + occludes: True + ents: [] + - uid: 15807 + components: + - type: Transform + pos: -5.5,-30.5 + parent: 2 + - uid: 15808 + components: + - type: Transform + pos: 18.5,14.5 + parent: 2 + - uid: 15809 + components: + - type: Transform + pos: 22.5,17.5 + parent: 2 + - uid: 15810 + components: + - type: Transform + pos: 37.5,12.5 + parent: 2 + - uid: 15811 + components: + - type: Transform + pos: -2.5,55.5 + parent: 2 + - uid: 15812 + components: + - type: Transform + pos: 39.5,-34.5 + parent: 2 + - type: ContainerContainer + containers: + beakerSlot: !type:ContainerSlot + showEnts: False + occludes: True + ent: 15813 + inputContainer: !type:Container + showEnts: False + occludes: True + ents: [] + machine_board: !type:Container + showEnts: False + occludes: True + ents: [] + machine_parts: !type:Container + showEnts: False + occludes: True + ents: [] +- proto: KitchenSpike + entities: + - uid: 15814 + components: + - type: Transform + pos: -2.5,-33.5 + parent: 2 + - uid: 15815 + components: + - type: Transform + pos: -3.5,-33.5 + parent: 2 + - uid: 15816 + components: + - type: Transform + pos: 26.5,21.5 + parent: 2 + - uid: 15817 + components: + - type: Transform + pos: 25.5,21.5 + parent: 2 +- proto: Lamp + entities: + - uid: 15818 + components: + - type: Transform + pos: -3.5759635,15.020327 + parent: 2 + - uid: 15819 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.522073,42.801456 + parent: 2 +- proto: LampGold + entities: + - uid: 15820 + components: + - type: Transform + pos: -13.598702,-2.129864 + parent: 2 + - uid: 15821 + components: + - type: Transform + pos: -17.597763,-5.2205453 + parent: 2 + - uid: 15822 + components: + - type: Transform + pos: -19.62041,22.866505 + parent: 2 + - uid: 15823 + components: + - type: Transform + pos: -26.568039,45.785202 + parent: 2 + - uid: 15824 + components: + - type: Transform + pos: -8.597343,50.015892 + parent: 2 + - uid: 15825 + components: + - type: Transform + pos: -8.644331,56.90023 + parent: 2 + - uid: 15826 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 29.40474,-34.169563 + parent: 2 +- proto: LampInterrogator + entities: + - uid: 15827 + components: + - type: Transform + pos: -25.43687,24.872316 + parent: 2 +- proto: LargeBeaker + entities: + - uid: 8616 + components: + - type: Transform + parent: 8615 + - type: Physics + canCollide: False + - uid: 8618 + components: + - type: Transform + parent: 8617 + - type: Physics + canCollide: False + - uid: 15813 + components: + - type: Transform + parent: 15812 + - type: Physics + canCollide: False + - uid: 15828 + components: + - type: Transform + pos: -26.885696,-16.267149 + parent: 2 + - uid: 15829 + components: + - type: Transform + pos: -36.443493,-30.048403 + parent: 2 + - uid: 15830 + components: + - type: Transform + pos: -36.779156,-27.544907 + parent: 2 + - uid: 15831 + components: + - type: Transform + pos: -36.79314,-27.223228 + parent: 2 + - uid: 15832 + components: + - type: Transform + pos: -5.3724923,-31.250595 + parent: 2 +- proto: LegionnaireBonfire + entities: + - uid: 15833 + components: + - type: Transform + pos: 0.5,-50.5 + parent: 2 +- proto: Lighter + entities: + - uid: 15834 + components: + - type: Transform + pos: 17.475067,12.604044 + parent: 2 + - uid: 15835 + components: + - type: Transform + pos: 10.483806,54.125267 + parent: 2 +- proto: LightReplacer + entities: + - uid: 16950 + components: + - type: Transform + parent: 1930 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 23906 + components: + - type: Transform + parent: 19985 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: LightReplacerEmpty + entities: + - uid: 15836 + components: + - type: Transform + pos: 1.4214635,-44.14184 + parent: 2 +- proto: LiquidOxygenCanister + entities: + - uid: 15839 + components: + - type: Transform + pos: -28.5,-39.5 + parent: 2 + - uid: 15840 + components: + - type: Transform + pos: -28.5,-38.5 + parent: 2 + - uid: 15841 + components: + - type: Transform + pos: -28.5,-37.5 + parent: 2 +- proto: LockerAtmosphericsFilled + entities: + - uid: 15842 + components: + - type: Transform + pos: 10.5,-48.5 + parent: 2 + - uid: 15843 + components: + - type: Transform + pos: 11.5,-48.5 + parent: 2 + - uid: 15844 + components: + - type: Transform + pos: 12.5,-48.5 + parent: 2 + - uid: 15845 + components: + - type: Transform + pos: 13.5,-48.5 + parent: 2 + - uid: 15846 + components: + - type: Transform + pos: 34.5,-41.5 + parent: 2 +- proto: LockerBartenderFilled + entities: + - uid: 23915 + components: + - type: Transform + pos: 17.5,18.5 + parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.14673 + moles: + - 1.7459903 + - 6.568249 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 23916 + - 23917 + - 23918 + - 23919 + - 23920 + - 23921 + - 23922 + - 23923 + - 23924 + - 23925 + - 23926 + - 23927 + - 23928 + - 23929 + - 23930 + - 23931 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null +- proto: LockerBooze + entities: + - uid: 8887 + components: + - type: Transform + pos: 24.5,35.5 + parent: 2 + - type: Lock + locked: False + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 8888 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null + - uid: 15847 + components: + - type: Transform + pos: -19.5,-43.5 + parent: 2 + - uid: 15848 + components: + - type: Transform + pos: 23.5,40.5 + parent: 2 + - type: Lock + locked: False + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 15849 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null +- proto: LockerBotanistFilled + entities: + - uid: 15851 + components: + - type: Transform + pos: 41.5,17.5 + parent: 2 + - uid: 15852 + components: + - type: Transform + pos: 42.5,17.5 + parent: 2 + - uid: 15853 + components: + - type: Transform + pos: 43.5,17.5 + parent: 2 +- proto: LockerBrigmedicFilledHardsuit + entities: + - uid: 15854 + components: + - type: Transform + pos: -27.5,36.5 + parent: 2 +- proto: LockerCaptainFilled + entities: + - uid: 15855 + components: + - type: Transform + pos: -5.5,49.5 + parent: 2 + - 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: + - 15856 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null +- proto: LockerChemistryFilled + entities: + - uid: 15857 + components: + - type: Transform + pos: 28.5,-21.5 + parent: 2 + - uid: 15858 + components: + - type: Transform + pos: 28.5,-20.5 + parent: 2 + - uid: 15859 + components: + - type: Transform + pos: 28.5,-19.5 + parent: 2 + - uid: 15860 + components: + - type: Transform + pos: 8.5,-32.5 + parent: 2 + - uid: 15861 + components: + - type: Transform + pos: 9.5,-32.5 + parent: 2 +- proto: LockerChiefEngineerFilled + entities: + - uid: 8799 + components: + - type: Transform + pos: 14.5,-55.5 + parent: 2 + - 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: + - 8801 + - 8800 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null +- proto: LockerChiefJusticeFilled + entities: + - uid: 20020 + components: + - type: Transform + pos: -15.5,9.5 + parent: 2 +- proto: LockerChiefMedicalOfficerFilled + entities: + - uid: 15862 + components: + - type: Transform + pos: 24.5,-17.5 + parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.1496 + moles: + - 1.8856695 + - 7.0937095 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 15863 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null +- proto: LockerClerkFilled + entities: + - uid: 271 + components: + - type: Transform + pos: -5.5,16.5 + parent: 2 +- proto: LockerClown + entities: + - uid: 10524 + components: + - type: Transform + pos: 43.5,13.5 + parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.14673 + moles: + - 1.7459903 + - 6.568249 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 10525 + - 10526 + - 10527 + - 10528 + - 10529 + - 10530 + - 10531 + - 10532 + - 10533 + - 10534 + - 10535 + - 10536 + - 10537 + - 10538 + - 10539 + - 10540 + - 10541 + - 10542 + - 10543 + - 10544 + - 10545 + - 10546 + - 10547 + - 10548 + - 10549 + - 10550 + - 10551 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null +- proto: LockerDetectiveFilled + entities: + - uid: 15864 + components: + - type: Transform + pos: -18.5,18.5 + parent: 2 +- proto: LockerElectricalSuppliesFilled + entities: + - uid: 15865 + components: + - type: Transform + pos: 4.5,-57.5 + parent: 2 +- proto: LockerEngineerFilled + entities: + - uid: 15866 + components: + - type: Transform + pos: 4.5,-60.5 + parent: 2 + - uid: 15867 + components: + - type: Transform + pos: 4.5,-59.5 + parent: 2 + - uid: 15868 + components: + - type: Transform + pos: 4.5,-58.5 + parent: 2 +- proto: LockerEvidence + entities: + - uid: 15869 + components: + - type: Transform + pos: 28.5,-4.5 + parent: 2 + - uid: 15870 + components: + - type: Transform + pos: 45.5,-18.5 + parent: 2 + - uid: 15871 + components: + - type: Transform + pos: -16.5,40.5 + parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.14673 + moles: + - 1.7459903 + - 6.568249 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - uid: 15872 + components: + - type: Transform + pos: -20.5,33.5 + parent: 2 + - uid: 15873 + components: + - type: Transform + pos: -20.5,34.5 + parent: 2 + - uid: 15874 + components: + - type: Transform + pos: -20.5,35.5 + parent: 2 + - uid: 15875 + components: + - type: Transform + pos: -20.5,36.5 + parent: 2 + - uid: 15876 + components: + - type: Transform + pos: -32.5,26.5 + parent: 2 + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 15877 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null + - uid: 15878 + components: + - type: Transform + pos: -35.5,22.5 + parent: 2 + - uid: 15879 + components: + - type: Transform + pos: -35.5,21.5 + parent: 2 + - uid: 15880 + components: + - type: Transform + pos: -35.5,20.5 + parent: 2 + - uid: 15881 + components: + - type: Transform + pos: -35.5,19.5 + parent: 2 + - uid: 15882 + components: + - type: Transform + pos: 5.5,-18.5 + parent: 2 + - uid: 15883 + components: + - type: Transform + pos: 2.5,-48.5 + parent: 2 + - uid: 15884 + components: + - type: Transform + pos: -27.5,-35.5 + parent: 2 +- proto: LockerForensicMantisFilled + entities: + - uid: 15885 + components: + - type: Transform + pos: -12.5,-21.5 + parent: 2 +- proto: LockerFreezer + entities: + - uid: 15886 + components: + - type: Transform + pos: -22.5,-67.5 + parent: 2 + - uid: 15887 + components: + - type: Transform + pos: -22.5,-68.5 + parent: 2 + - uid: 15888 + components: + - type: Transform + pos: 24.5,19.5 + parent: 2 + - uid: 15889 + components: + - type: Transform + pos: 26.5,23.5 + parent: 2 + - uid: 15890 + components: + - type: Transform + pos: 25.5,23.5 + parent: 2 + - uid: 15891 + components: + - type: Transform + pos: 24.5,23.5 + parent: 2 + - uid: 15892 + components: + - type: Transform + pos: 24.5,27.5 + parent: 2 +- proto: LockerFreezerBase + entities: + - uid: 10576 + components: + - type: Transform + pos: 4.5,-34.5 + parent: 2 + - 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: + - 10577 + - 10579 + - 10580 + - 10578 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null + - uid: 15893 + components: + - type: Transform + pos: -82.5,-52.5 + parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 75.31249 + moles: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 +- proto: LockerHeadOfPersonnelFilled + entities: + - uid: 8815 + components: + - type: Transform + pos: 7.4989414,50.50517 + parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.14673 + moles: + - 1.7459903 + - 6.568249 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 10900 + - 10902 + - 15895 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null +- proto: LockerHeadOfSecurityFilled + entities: + - uid: 8883 + components: + - type: Transform + pos: -23.5,45.5 + parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.1496 + moles: + - 1.8968438 + - 7.1357465 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 8885 + - 8884 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null +- proto: LockerJanitor + entities: + - uid: 1930 + components: + - type: Transform + pos: 10.5,12.5 + parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.14673 + moles: + - 1.7459903 + - 6.568249 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 5949 + - 8684 + - 8709 + - 8724 + - 8725 + - 8966 + - 9026 + - 9237 + - 15522 + - 15850 + - 15988 + - 16950 + - 16951 + - 17090 + - 18041 + - 18457 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null + - uid: 19985 + components: + - type: Transform + pos: 10.5,13.5 + parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.14673 + moles: + - 1.7459903 + - 6.568249 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 22225 + - 22226 + - 22236 + - 23896 + - 23897 + - 23898 + - 23899 + - 23900 + - 23901 + - 23902 + - 23903 + - 23904 + - 23905 + - 23906 + - 23907 + - 23908 + - 23909 + - 23910 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null +- proto: LockerMedicalFilled + entities: + - uid: 15896 + components: + - type: Transform + pos: 20.5,-18.5 + parent: 2 + - uid: 15897 + components: + - type: Transform + pos: 20.5,-19.5 + parent: 2 + - uid: 15898 + components: + - type: Transform + pos: 20.5,-20.5 + parent: 2 +- proto: LockerMedicineFilled + entities: + - uid: 15899 + components: + - type: Transform + pos: -28.5,37.5 + parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.14673 + moles: + - 1.7459903 + - 6.568249 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - uid: 15900 + components: + - type: Transform + pos: 20.5,-22.5 + parent: 2 + - uid: 15901 + components: + - type: Transform + pos: 21.5,-22.5 + parent: 2 + - uid: 15902 + components: + - type: Transform + pos: 22.5,-22.5 + parent: 2 + - uid: 15903 + components: + - type: Transform + pos: 23.5,-22.5 + parent: 2 +- proto: LockerMime + entities: + - uid: 10501 + components: + - type: Transform + pos: 43.5,15.5 + parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.14673 + moles: + - 1.7459903 + - 6.568249 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 10502 + - 10503 + - 10504 + - 10505 + - 10506 + - 10507 + - 10508 + - 10509 + - 10510 + - 10511 + - 10512 + - 10513 + - 10514 + - 10515 + - 10516 + - 10517 + - 10518 + - 10519 + - 10520 + - 10521 + - 10522 + - 10523 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null +- proto: LockerParamedicFilled + entities: + - uid: 15904 + components: + - type: Transform + pos: 10.5,-19.5 + parent: 2 +- proto: LockerQuarterMasterFilled + entities: + - uid: 15905 + components: + - type: Transform + pos: -25.5,4.5 + parent: 2 + - 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: + - 15906 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null +- proto: LockerRepresentative + entities: + - uid: 22310 + components: + - type: Transform + pos: 7.5,27.5 + parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.14673 + moles: + - 1.7459903 + - 6.568249 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 22311 + - 22312 + - 22313 + - 22314 + - 22316 + - 22317 + - 22318 + - 22319 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null +- proto: LockerResearchDirectorFilled + entities: + - uid: 15907 + components: + - type: Transform + pos: -17.5,-20.5 + parent: 2 + - 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: + - 15908 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null +- proto: LockerSalvageSpecialistFilled + entities: + - uid: 15909 + components: + - type: Transform + pos: -36.5,-10.5 + parent: 2 + - uid: 15910 + components: + - type: Transform + pos: -36.5,-11.5 + parent: 2 + - uid: 15911 + components: + - type: Transform + pos: -36.5,-12.5 + parent: 2 +- proto: LockerScienceFilled + entities: + - uid: 15912 + components: + - type: Transform + pos: -38.5,-41.5 + parent: 2 + - uid: 15913 + components: + - type: Transform + pos: -44.5,-40.5 + parent: 2 + - uid: 15914 + components: + - type: Transform + pos: -39.5,-41.5 + parent: 2 + - uid: 15915 + components: + - type: Transform + pos: -44.5,-41.5 + parent: 2 +- proto: LockerSecurityFilled + entities: + - uid: 15916 + components: + - type: Transform + pos: -11.5,35.5 + parent: 2 + - uid: 15917 + components: + - type: Transform + pos: -11.5,34.5 + parent: 2 + - uid: 15918 + components: + - type: Transform + pos: -10.5,34.5 + parent: 2 + - uid: 15919 + components: + - type: Transform + pos: -10.5,35.5 + parent: 2 + - uid: 15920 + components: + - type: Transform + pos: -11.5,36.5 + parent: 2 +- proto: LockerWardenFilled + entities: + - uid: 15921 + components: + - type: Transform + pos: -14.5,36.5 + parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.14673 + moles: + - 1.7459903 + - 6.568249 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 +- proto: LockerWeldingSuppliesFilled + entities: + - uid: 15922 + components: + - type: Transform + pos: 14.5,-48.5 + parent: 2 +- proto: LunchboxCommandFilledRandom + entities: + - uid: 22311 + components: + - type: Transform + parent: 22310 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: MachineAnomalyGenerator + entities: + - uid: 15923 + components: + - type: Transform + pos: -43.5,-30.5 + parent: 2 +- proto: MachineAnomalyVessel + entities: + - uid: 15924 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -37.5,-39.5 + parent: 2 + - uid: 15925 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -37.5,-38.5 + parent: 2 +- proto: MachineAPE + entities: + - uid: 15926 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -39.5,-39.5 + parent: 2 + - uid: 15927 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -39.5,-38.5 + parent: 2 +- proto: MachineArtifactAnalyzer + entities: + - uid: 15928 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -17.5,-31.5 + parent: 2 + - type: DeviceLinkSink + links: + - 8978 +- proto: MachineCentrifuge + entities: + - uid: 15929 + components: + - type: Transform + pos: 10.5,-29.5 + parent: 2 +- proto: MachineElectrolysisUnit + entities: + - uid: 15930 + components: + - type: Transform + pos: 6.5,-32.5 + parent: 2 +- proto: MachineFrame + entities: + - uid: 15931 + components: + - type: Transform + pos: 45.5,-40.5 + parent: 2 + - uid: 15932 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,-40.5 + parent: 2 +- proto: MachineFrameDestroyed + entities: + - uid: 15934 + components: + - type: Transform + pos: 40.5,-40.5 + parent: 2 + - uid: 15935 + components: + - type: Transform + pos: 36.5,-39.5 + parent: 2 + - uid: 15936 + components: + - type: Transform + pos: 29.5,-10.5 + parent: 2 +- proto: MagazinePistol + entities: + - uid: 15937 + components: + - type: Transform + pos: 6.422253,27.666708 + parent: 2 + - type: Physics + angularDamping: 0 + linearDamping: 0 +- proto: MagazinePistolRubber + entities: + - uid: 15938 + components: + - type: Transform + pos: 6.4003363,27.67767 + parent: 2 + - type: Physics + angularDamping: 0 + linearDamping: 0 +- proto: MagazinePistolSubMachineGun + entities: + - uid: 15939 + components: + - type: Transform + pos: -13.498616,40.531715 + parent: 2 + - uid: 15940 + components: + - type: Transform + pos: -13.386728,40.587658 + parent: 2 + - uid: 15941 + components: + - type: Transform + pos: -13.46132,40.531715 + parent: 2 + - uid: 15942 + components: + - type: Transform + pos: -13.433348,40.578335 + parent: 2 + - uid: 15943 + components: + - type: Transform + pos: -13.36808,40.624954 + parent: 2 +- proto: MagazinePistolSubMachineGunRubber + entities: + - uid: 15944 + components: + - type: Transform + pos: -13.4147,40.578335 + parent: 2 + - uid: 15945 + components: + - type: Transform + pos: -13.4147,40.578335 + parent: 2 +- proto: MagazineRifle + entities: + - uid: 15946 + components: + - type: Transform + pos: -13.62267,40.460464 + parent: 2 + - uid: 15947 + components: + - type: Transform + pos: -13.291159,40.536873 + parent: 2 + - uid: 15948 + components: + - type: Transform + pos: -13.3485365,40.492302 + parent: 2 + - uid: 15949 + components: + - type: Transform + pos: -13.578044,40.54324 + parent: 2 + - uid: 15950 + components: + - type: Transform + pos: -13.507916,40.626015 + parent: 2 +- proto: MagazineRifleRubber + entities: + - uid: 15951 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.367661,40.766098 + parent: 2 + - uid: 15952 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.367661,40.66422 + parent: 2 +- proto: MailingUnit + entities: + - uid: 296 + components: + - type: Transform + pos: -24.5,-5.5 + parent: 2 + - uid: 15953 + components: + - type: Transform + pos: -36.5,-0.5 + parent: 2 + - type: MailingUnit + tag: Cargo + - uid: 15954 + components: + - type: Transform + pos: -6.5,30.5 + parent: 2 + - type: MailingUnit + tag: Segurança + - uid: 15955 + components: + - type: Transform + pos: -20.5,32.5 + parent: 2 + - uid: 16325 + components: + - type: Transform + pos: 16.5,-38.5 + parent: 2 + - type: MailingUnit + tag: Atmosferica + - uid: 22642 + components: + - type: Transform + pos: 38.5,2.5 + parent: 2 + - uid: 22643 + components: + - type: Transform + pos: 32.5,17.5 + parent: 2 + - uid: 22676 + components: + - type: Transform + pos: 17.5,17.5 + parent: 2 + - uid: 22677 + components: + - type: Transform + pos: 10.5,15.5 + parent: 2 +- proto: MailTeleporter + entities: + - uid: 15956 + components: + - type: Transform + pos: -22.5,-6.5 + parent: 2 +- proto: MaintenanceFluffSpawner + entities: + - uid: 15957 + components: + - type: Transform + pos: -23.5,-44.5 + parent: 2 + - uid: 15958 + components: + - type: Transform + pos: -19.5,-37.5 + parent: 2 + - uid: 15959 + components: + - type: Transform + pos: -41.5,-25.5 + parent: 2 + - uid: 15960 + components: + - type: Transform + pos: -29.5,21.5 + parent: 2 + - uid: 15961 + components: + - type: Transform + pos: -11.5,48.5 + parent: 2 + - uid: 15962 + components: + - type: Transform + pos: 16.5,27.5 + parent: 2 + - uid: 15963 + components: + - type: Transform + pos: 28.5,-10.5 + parent: 2 +- proto: MaintenancePlantSpawner + entities: + - uid: 15964 + components: + - type: Transform + pos: -12.5,-19.5 + parent: 2 + - uid: 15965 + components: + - type: Transform + pos: 12.5,7.5 + parent: 2 + - uid: 15966 + components: + - type: Transform + pos: 25.5,-5.5 + parent: 2 + - uid: 15967 + components: + - type: Transform + pos: -25.5,15.5 + parent: 2 + - uid: 15968 + components: + - type: Transform + pos: -2.5,43.5 + parent: 2 + - uid: 15969 + components: + - type: Transform + pos: 5.5,-37.5 + parent: 2 + - uid: 15970 + components: + - type: Transform + pos: -29.5,-44.5 + parent: 2 + - uid: 15971 + components: + - type: Transform + pos: -24.5,-62.5 + parent: 2 + - uid: 15972 + components: + - type: Transform + pos: -3.5,-53.5 + parent: 2 + - uid: 15973 + components: + - type: Transform + pos: -22.5,-14.5 + parent: 2 +- proto: MaintenanceToolSpawner + entities: + - uid: 15974 + components: + - type: Transform + pos: -19.5,-42.5 + parent: 2 + - uid: 15975 + components: + - type: Transform + pos: -38.5,-22.5 + parent: 2 + - uid: 15976 + components: + - type: Transform + pos: -14.5,-12.5 + parent: 2 + - uid: 15977 + components: + - type: Transform + pos: -18.5,14.5 + parent: 2 + - uid: 15978 + components: + - type: Transform + pos: 23.5,27.5 + parent: 2 + - uid: 15979 + components: + - type: Transform + pos: 20.5,27.5 + parent: 2 + - uid: 15980 + components: + - type: Transform + pos: 46.5,21.5 + parent: 2 + - uid: 15981 + components: + - type: Transform + pos: -22.5,-52.5 + parent: 2 + - uid: 15982 + components: + - type: Transform + pos: -26.5,-56.5 + parent: 2 + - uid: 15983 + components: + - type: Transform + pos: -25.5,-56.5 + parent: 2 + - uid: 15984 + components: + - type: Transform + pos: -6.5,-51.5 + parent: 2 + - uid: 15985 + components: + - type: Transform + pos: 6.5,-37.5 + parent: 2 + - uid: 15986 + components: + - type: Transform + pos: -2.5,-50.5 + parent: 2 +- proto: MaintenanceWeaponSpawner + entities: + - uid: 15987 + components: + - type: Transform + pos: -21.5,-42.5 + parent: 2 + - uid: 15989 + components: + - type: Transform + pos: -23.5,21.5 + parent: 2 + - uid: 15990 + components: + - type: Transform + pos: -29.5,-64.5 + parent: 2 + - uid: 15991 + components: + - type: Transform + pos: -7.5,-51.5 + parent: 2 + - uid: 15992 + components: + - type: Transform + pos: 7.5,-37.5 + parent: 2 +- proto: Matchbox + entities: + - uid: 15993 + components: + - type: Transform + pos: 18.550014,8.925238 + parent: 2 + - uid: 15994 + components: + - type: Transform + pos: 17.344532,12.520128 + parent: 2 + - uid: 15995 + components: + - type: Transform + pos: 25.54633,33.540943 + parent: 2 + - uid: 15996 + components: + - type: Transform + pos: -2.5324435,56.50862 + parent: 2 +- proto: MaterialBones1 + entities: + - uid: 15997 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.15635538,-50.569748 + parent: 2 + - uid: 15998 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.3093797,-51.854664 + parent: 2 + - uid: 15999 + components: + - type: Transform + pos: 0.7005973,-52.431946 + parent: 2 + - uid: 16000 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.547573,-52.338837 + parent: 2 + - uid: 16001 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.8123738,-51.14703 + parent: 2 +- proto: MaterialCardboard + entities: + - uid: 16002 + components: + - type: Transform + pos: 26.476929,25.55731 + parent: 2 +- proto: MaterialCardboard10 + entities: + - uid: 16003 + components: + - type: Transform + pos: -30.46923,-3.403332 + parent: 2 +- proto: MaterialCloth + entities: + - uid: 10902 + components: + - type: Transform + parent: 8815 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: MaterialDurathread + entities: + - uid: 10900 + components: + - type: Transform + parent: 8815 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: MaterialReclaimer + entities: + - uid: 16004 + components: + - type: Transform + pos: -44.5,14.5 + parent: 2 +- proto: MaterialWoodPlank1 + entities: + - uid: 16005 + components: + - type: Transform + pos: -13.5,6.5 + parent: 2 + - uid: 16006 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5517,-58.470978 + parent: 2 + - uid: 16007 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -28.530666,-64.49116 + parent: 2 + - uid: 16008 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.522465,-64.39292 + parent: 2 + - uid: 16009 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.531445,-63.51303 + parent: 2 +- proto: MatterBinStockPart + entities: + - uid: 16010 + components: + - type: Transform + pos: 24.282856,-39.229134 + parent: 2 + - uid: 16011 + components: + - type: Transform + pos: 24.632507,-39.341022 + parent: 2 +- proto: Mattress + entities: + - uid: 16012 + components: + - type: Transform + pos: 6.5,-11.5 + parent: 2 + - uid: 16013 + components: + - type: Transform + pos: 14.5,-4.5 + parent: 2 + - uid: 16014 + components: + - type: Transform + pos: 32.5,-34.5 + parent: 2 + - uid: 16015 + components: + - type: Transform + pos: 41.5,-36.5 + parent: 2 + - uid: 16016 + components: + - type: Transform + pos: 47.5,-36.5 + parent: 2 +- proto: MedicalBed + entities: + - uid: 16017 + components: + - type: Transform + pos: 15.5,-25.5 + parent: 2 + - uid: 16018 + components: + - type: Transform + pos: 15.5,-26.5 + parent: 2 + - uid: 16019 + components: + - type: Transform + pos: 19.5,-26.5 + parent: 2 + - uid: 16020 + components: + - type: Transform + pos: 19.5,-25.5 + parent: 2 + - uid: 16021 + components: + - type: Transform + pos: 17.5,-26.5 + parent: 2 + - uid: 16022 + components: + - type: Transform + pos: 17.5,-25.5 + parent: 2 +- proto: MedicalScanner + entities: + - uid: 825 + components: + - type: Transform + pos: 21.5,-30.5 + parent: 2 + - uid: 16023 + components: + - type: Transform + pos: 30.5,-27.5 + parent: 2 +- proto: MedicalTechFab + entities: + - uid: 16024 + components: + - type: Transform + pos: 17.5,-18.5 + parent: 2 +- proto: MediumXenoArtifactItem + entities: + - uid: 9161 + components: + - type: Transform + parent: 9160 + - type: Artifact + isSuppressed: True + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: MedkitAdvancedFilled + entities: + - uid: 16030 + components: + - type: Transform + pos: -14.453555,38.475426 + parent: 2 + - uid: 16031 + components: + - type: Transform + pos: -0.5451498,62.658527 + parent: 2 +- proto: MedkitBruteFilled + entities: + - uid: 16032 + components: + - type: Transform + pos: 16.380516,-20.358416 + parent: 2 + - uid: 16033 + components: + - type: Transform + pos: 16.380516,-20.240313 + parent: 2 +- proto: MedkitBurnFilled + entities: + - uid: 16034 + components: + - type: Transform + pos: 22.513134,-14.547533 + parent: 2 + - uid: 16035 + components: + - type: Transform + pos: 16.63013,-19.48196 + parent: 2 + - uid: 16036 + components: + - type: Transform + pos: 16.63013,-19.320343 + parent: 2 +- proto: MedkitCombatFilled + entities: + - uid: 16037 + components: + - type: Transform + pos: 4.469173,-21.368795 + parent: 2 +- proto: MedkitFilled + entities: + - uid: 826 + components: + - type: Transform + pos: -19.489769,-20.498121 + parent: 2 + - uid: 1039 + components: + - type: Transform + pos: -19.489769,-20.308727 + parent: 2 + - uid: 1121 + components: + - type: Transform + pos: -19.489769,-20.119333 + parent: 2 + - uid: 1186 + components: + - type: Transform + pos: -37.5,-35.5 + parent: 2 + - uid: 4549 + components: + - type: Transform + pos: -37.5,-35.5 + parent: 2 + - uid: 8853 + components: + - type: Transform + parent: 8848 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 16038 + components: + - type: Transform + pos: 42.70952,36.55479 + parent: 2 + - uid: 16039 + components: + - type: Transform + pos: -30.527771,32.556423 + parent: 2 + - uid: 16040 + components: + - type: Transform + pos: -0.5241709,62.532654 + parent: 2 + - uid: 16041 + components: + - type: Transform + pos: 16.43153,-19.693304 + parent: 2 + - uid: 16042 + components: + - type: Transform + pos: 16.43153,-19.562767 + parent: 2 + - uid: 16043 + components: + - type: Transform + pos: 13.718545,-32.476097 + parent: 2 +- proto: MedkitOxygenFilled + entities: + - uid: 16044 + components: + - type: Transform + pos: 16.579979,-20.544226 + parent: 2 + - uid: 16045 + components: + - type: Transform + pos: 16.573212,-20.426792 + parent: 2 +- proto: MedkitRadiationFilled + entities: + - uid: 16046 + components: + - type: Transform + pos: 16.585644,-18.586855 + parent: 2 + - uid: 16047 + components: + - type: Transform + pos: 16.585644,-18.71739 + parent: 2 +- proto: MedkitToxinFilled + entities: + - uid: 4560 + components: + - type: Transform + pos: -43.5,-50.5 + parent: 2 + - uid: 16049 + components: + - type: Transform + pos: 16.417812,-18.331999 + parent: 2 + - uid: 16050 + components: + - type: Transform + pos: 16.417812,-18.450102 + parent: 2 +- proto: MegaSprayBottle + entities: + - uid: 16051 + components: + - type: Transform + pos: 32.662113,19.936192 + parent: 2 +- proto: MetempsychoticMachine + entities: + - uid: 819 + components: + - type: Transform + pos: 32.5,-27.5 + parent: 2 +- proto: MicroManipulatorStockPart + entities: + - uid: 16052 + components: + - type: Transform + pos: 23.52761,-39.38298 + parent: 2 + - uid: 16053 + components: + - type: Transform + pos: 23.625511,-39.49487 + parent: 2 +- proto: MicrowaveMachineCircuitboard + entities: + - uid: 16054 + components: + - type: Transform + pos: -6.4888306,-12.404985 + parent: 2 +- proto: MiningDrill + entities: + - uid: 16055 + components: + - type: Transform + pos: -42.473663,-9.2381115 + parent: 2 +- proto: Mirror + entities: + - uid: 16056 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 39.5,13.5 + parent: 2 + - uid: 16057 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,21.5 + parent: 2 + - uid: 16058 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,22.5 + parent: 2 + - uid: 16059 + components: + - type: Transform + pos: -10.5,53.5 + parent: 2 + - uid: 16060 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,-29.5 + parent: 2 +- proto: MMI + entities: + - uid: 16061 + components: + - type: Transform + pos: -19.531075,-16.07982 + parent: 2 + - uid: 16062 + components: + - type: Transform + pos: -19.447159,-16.233667 + parent: 2 +- proto: ModularGrenade + entities: + - uid: 16063 + components: + - type: Transform + pos: -41.45344,-32.7873 + parent: 2 + - uid: 16064 + components: + - type: Transform + pos: 7.25298,13.699963 + parent: 2 + - uid: 16065 + components: + - type: Transform + pos: 7.538916,13.339434 + parent: 2 + - uid: 16066 + components: + - type: Transform + pos: 7.7502604,13.4451065 + parent: 2 + - uid: 16067 + components: + - type: Transform + pos: -10.706679,-55.53336 + parent: 2 + - uid: 16068 + components: + - type: Transform + pos: -10.706679,-55.24742 + parent: 2 + - uid: 16069 + components: + - type: Transform + pos: -41.57844,-32.7873 + parent: 2 + - uid: 16070 + components: + - type: Transform + pos: -41.305004,-32.784176 + parent: 2 + - uid: 16071 + components: + - type: Transform + pos: 30.36745,-52.382015 + parent: 2 +- proto: MopBucket + entities: + - uid: 16076 + components: + - type: Transform + pos: -10.526969,-40.502083 + parent: 2 +- proto: MopBucketFull + entities: + - uid: 16077 + components: + - type: Transform + pos: 21.555202,27.513826 + parent: 2 +- proto: MopItem + entities: + - uid: 16078 + components: + - type: Transform + pos: 9.276443,11.439346 + parent: 2 + - uid: 16079 + components: + - type: Transform + pos: -10.547948,-40.502083 + parent: 2 + - uid: 17090 + components: + - type: Transform + parent: 1930 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 23908 + components: + - type: Transform + parent: 19985 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: Morgue + entities: + - uid: 16080 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,-18.5 + parent: 2 + - uid: 16081 + components: + - type: Transform + pos: -36.5,39.5 + parent: 2 + - uid: 16082 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,-8.5 + parent: 2 + - uid: 16083 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,-9.5 + parent: 2 + - uid: 16084 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,-10.5 + parent: 2 + - uid: 16085 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 16.5,-8.5 + parent: 2 + - uid: 16086 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 16.5,-9.5 + parent: 2 + - uid: 16087 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 16.5,-10.5 + parent: 2 + - uid: 16088 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 20.5,-8.5 + parent: 2 + - uid: 16089 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 20.5,-9.5 + parent: 2 + - uid: 16090 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 20.5,-10.5 + parent: 2 +- proto: MouseTimedSpawner + entities: + - uid: 16091 + components: + - type: Transform + pos: -32.5,20.5 + parent: 2 +- proto: Multitool + entities: + - uid: 16092 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.343704,-13.085022 + parent: 2 + - uid: 16093 + components: + - type: Transform + pos: -43.685184,10.920397 + parent: 2 + - uid: 16094 + components: + - type: Transform + pos: -22.323101,-30.658142 + parent: 2 + - uid: 16095 + components: + - type: Transform + pos: -6.2626686,-21.5607 + parent: 2 + - uid: 16096 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -37.198826,-50.85587 + parent: 2 + - uid: 16097 + components: + - type: Transform + pos: -41.18152,-33.136368 + parent: 2 + - uid: 22329 + components: + - type: Transform + pos: 31.105812,-31.412148 + parent: 2 +- proto: NetworkConfigurator + entities: + - uid: 16098 + components: + - type: Transform + pos: 41.690483,19.640884 + parent: 2 +- proto: NitrogenCanister + entities: + - uid: 16099 + components: + - type: Transform + pos: -6.5,-37.5 + parent: 2 + - uid: 16100 + components: + - type: Transform + pos: -29.5,-39.5 + parent: 2 + - uid: 16101 + components: + - type: Transform + pos: -29.5,-38.5 + parent: 2 + - uid: 16102 + components: + - type: Transform + pos: -29.5,-37.5 + parent: 2 + - uid: 16103 + components: + - type: Transform + pos: 9.5,78.5 + parent: 2 + - uid: 16104 + components: + - type: Transform + pos: -23.5,12.5 + parent: 2 + - uid: 16105 + components: + - type: Transform + pos: -42.5,-25.5 + parent: 2 + - uid: 16106 + components: + - type: Transform + pos: -29.5,-50.5 + parent: 2 + - uid: 16107 + components: + - type: Transform + pos: 14.5,-37.5 + parent: 2 + - uid: 16108 + components: + - type: Transform + pos: 17.5,-49.5 + parent: 2 + - uid: 16109 + components: + - type: Transform + pos: 17.5,-50.5 + parent: 2 + - uid: 16110 + components: + - type: Transform + pos: 17.5,-51.5 + parent: 2 + - uid: 16111 + components: + - type: Transform + pos: 16.5,-62.5 + parent: 2 + - uid: 16112 + components: + - type: Transform + pos: -7.5,-53.5 + parent: 2 + - uid: 16113 + components: + - type: Transform + pos: -10.5,-8.5 + parent: 2 + - uid: 16114 + components: + - type: Transform + pos: 24.5,-6.5 + parent: 2 + - uid: 16115 + components: + - type: Transform + pos: -32.5,19.5 + parent: 2 + - uid: 16116 + components: + - type: Transform + pos: 30.5,-12.5 + parent: 2 + - uid: 22955 + components: + - type: Transform + pos: 3.5,-66.5 + parent: 2 + - uid: 22956 + components: + - type: Transform + pos: 4.5,-66.5 + parent: 2 +- proto: NitrousOxideCanister + entities: + - uid: 16117 + components: + - type: Transform + pos: -27.5,32.5 + parent: 2 + - uid: 16118 + components: + - type: Transform + pos: -29.5,23.5 + parent: 2 + - uid: 16119 + components: + - type: Transform + pos: 25.5,-31.5 + parent: 2 + - uid: 16120 + components: + - type: Transform + pos: 19.5,-51.5 + parent: 2 + - uid: 16121 + components: + - type: Transform + pos: 38.5,-62.5 + parent: 2 +- proto: NodeScanner + entities: + - uid: 16122 + components: + - type: Transform + pos: -44.384266,-35.857845 + parent: 2 + - uid: 16123 + components: + - type: Transform + pos: -44.617367,-36.035 + parent: 2 +- proto: NoticeBoard + entities: + - uid: 16124 + components: + - type: Transform + pos: 4.5,5.5 + parent: 2 + - uid: 16125 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,15.5 + parent: 2 +- proto: NuclearBomb + entities: + - uid: 16126 + components: + - type: Transform + pos: -33.5,15.5 + parent: 2 +- proto: OperatingTable + entities: + - uid: 16127 + components: + - type: Transform + pos: -18.5,-17.5 + parent: 2 + - uid: 16128 + components: + - type: Transform + pos: -28.5,38.5 + parent: 2 + - uid: 16129 + components: + - type: Transform + pos: 16.5,-13.5 + parent: 2 + - uid: 16130 + components: + - type: Transform + pos: -15.5,-17.5 + parent: 2 +- proto: OracleSpawner + entities: + - uid: 14817 + components: + - type: Transform + pos: -31.5,-23.5 + parent: 2 +- proto: OreProcessor + entities: + - uid: 16131 + components: + - type: Transform + pos: -39.5,-6.5 + parent: 2 +- proto: OxygenCanister + entities: + - uid: 16132 + components: + - type: Transform + pos: -43.5,-13.5 + parent: 2 + - uid: 16133 + components: + - type: Transform + pos: -4.5,-20.5 + parent: 2 + - uid: 16134 + components: + - type: Transform + pos: -7.5,-37.5 + parent: 2 + - uid: 16135 + components: + - type: Transform + pos: 9.5,77.5 + parent: 2 + - uid: 16136 + components: + - type: Transform + pos: 28.5,-27.5 + parent: 2 + - uid: 16137 + components: + - type: Transform + pos: -22.5,12.5 + parent: 2 + - uid: 16138 + components: + - type: Transform + pos: -6.5,-53.5 + parent: 2 + - uid: 16139 + components: + - type: Transform + pos: 16.5,-49.5 + parent: 2 + - uid: 16140 + components: + - type: Transform + pos: 16.5,-50.5 + parent: 2 + - uid: 16141 + components: + - type: Transform + pos: 16.5,-51.5 + parent: 2 + - uid: 16142 + components: + - type: Transform + pos: -29.5,-52.5 + parent: 2 + - uid: 16143 + components: + - type: Transform + pos: -9.5,-8.5 + parent: 2 + - uid: 16144 + components: + - type: Transform + pos: -40.5,-25.5 + parent: 2 + - uid: 16145 + components: + - type: Transform + pos: 23.5,-6.5 + parent: 2 + - uid: 16146 + components: + - type: Transform + pos: 14.5,-36.5 + parent: 2 + - uid: 16147 + components: + - type: Transform + pos: -31.5,19.5 + parent: 2 + - uid: 16148 + components: + - type: Transform + pos: 29.5,-12.5 + parent: 2 + - uid: 16149 + components: + - type: Transform + pos: 16.5,-58.5 + parent: 2 +- proto: PaperBin10 + entities: + - uid: 16150 + components: + - type: Transform + pos: -2.5,14.5 + parent: 2 + - uid: 16151 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,5.5 + parent: 2 + - uid: 16152 + components: + - type: Transform + pos: -39.974483,8.601084 + parent: 2 + - uid: 16153 + components: + - type: Transform + pos: -36.314747,6.548981 + parent: 2 + - uid: 16154 + components: + - type: Transform + pos: -33.320435,-25.397486 + parent: 2 + - uid: 16155 + components: + - type: Transform + pos: -36.5,-27.5 + parent: 2 + - uid: 16156 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,-21.5 + parent: 2 + - uid: 16157 + components: + - type: Transform + pos: -14.5,-22.5 + parent: 2 + - uid: 16158 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,-64.5 + parent: 2 + - uid: 16159 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 29.5,-4.5 + parent: 2 + - uid: 16160 + components: + - type: Transform + pos: 26.5,10.5 + parent: 2 + - uid: 16161 + components: + - type: Transform + pos: 40.5,13.5 + parent: 2 + - uid: 16162 + components: + - type: Transform + pos: 41.5,4.5 + parent: 2 + - uid: 16163 + components: + - type: Transform + pos: 25.5,29.5 + parent: 2 + - uid: 16164 + components: + - type: Transform + pos: 13.5,42.5 + parent: 2 + - uid: 16165 + components: + - type: Transform + pos: 43.5,-17.5 + parent: 2 + - uid: 16166 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -19.5,21.5 + parent: 2 + - uid: 16167 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,24.5 + parent: 2 + - uid: 16168 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,32.5 + parent: 2 + - uid: 16169 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,31.5 + parent: 2 + - uid: 16170 + components: + - type: Transform + pos: -24.5,40.5 + parent: 2 + - uid: 16171 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,30.5 + parent: 2 + - uid: 16172 + components: + - type: Transform + pos: -25.5,27.5 + parent: 2 + - uid: 16173 + components: + - type: Transform + pos: -8.5,55.5 + parent: 2 + - uid: 16174 + components: + - type: Transform + pos: 6.5,48.5 + parent: 2 + - uid: 16175 + components: + - type: Transform + pos: 10.5,52.5 + parent: 2 + - uid: 16176 + components: + - type: Transform + pos: -6.5,83.5 + parent: 2 + - uid: 16177 + components: + - type: Transform + pos: 22.5,-20.5 + parent: 2 + - uid: 16178 + components: + - type: Transform + pos: 45.5,-20.5 + parent: 2 + - uid: 16179 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 39.5,-26.5 + parent: 2 + - uid: 16180 + components: + - type: Transform + pos: 41.5,-34.5 + parent: 2 + - uid: 16181 + components: + - type: Transform + pos: 6.5,-28.5 + parent: 2 + - uid: 16182 + components: + - type: Transform + pos: 8.5,-20.5 + parent: 2 + - uid: 16183 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-43.5 + parent: 2 + - uid: 16184 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,-49.5 + parent: 2 + - uid: 16185 + components: + - type: Transform + pos: 7.5,25.5 + parent: 2 + - uid: 16186 + components: + - type: Transform + pos: 36.5,-46.5 + parent: 2 +- proto: PaperCaptainsThoughts + entities: + - uid: 16187 + components: + - type: Transform + pos: -4.6271625,-37.31797 + parent: 2 + - uid: 16188 + components: + - type: Transform + pos: -8.264277,49.208706 + parent: 2 +- proto: PaperOffice + entities: + - uid: 1157 + components: + - type: MetaData + name: Formulário de Trabalho + - type: Transform + parent: 1156 + - type: Paper + content: >- + [color=#002159]█▀▀▀▀▀▀▀▀▀▀▀▀▀▀█▄ + + █   ▀██   █▄     █           █ + + █       ▀   █▀█▄█   ▄       █ [head=1]Nanotrasen[/head] + + █           █     ▀█   ██▄   █ + + ▀█▄▄▄▄▄▄▄▄▄▄▄▄▄▄█ [head=1]Technologies[/head][/color] + + + [color=#002159][head=1] FORMULÁRIO DE TRABALHO [/head] + + [/color] + + [head=2] Informações [/head] + + + Nome: + + Idade: + + Raça: + + Descrição: + + Habilidades: + + Afiliação com a Nanotrasen: + + + [color=#002159][head=2] Trabalho [/head][/color] + + + Trabalho atual: + + Trabalho que quer: + + Motivo: + + + [color=#002159][head=2] O que fazer [/head][/color] + + + [bullet/] Este papel [bold][color=#ff0000]DEVE[/color][/bold] ser entregue ao head do departamento em que a pessoa quer o emprego. + + + [bullet/] Se você (head do departamento) permite que esta pessoa trabalhe no seu departamento, carimbe este papel e entregue no meu escritório. + + + [bullet/] Se você não permite, me avise pelo rádio ou simplesmente não devolva o papel. + + + [bullet/] Não irei dar trabalho para pessoas sem este papel estar carimbado. + - type: Physics + canCollide: False + - uid: 16189 + components: + - type: Transform + pos: -12.441007,-24.24285 + parent: 2 + - uid: 16190 + components: + - type: Transform + pos: -12.35882,-24.27025 + parent: 2 + - uid: 16191 + components: + - type: Transform + pos: -10.318714,15.583685 + parent: 2 + - uid: 16192 + components: + - type: Transform + pos: -10.318714,15.583685 + parent: 2 + - uid: 16193 + components: + - type: Transform + pos: -2.969903,14.600746 + parent: 2 + - uid: 16194 + components: + - type: Transform + pos: -2.969903,14.600746 + parent: 2 + - uid: 16195 + components: + - type: Transform + pos: -2.969903,14.600746 + parent: 2 + - uid: 16196 + components: + - type: Transform + pos: 41.476032,19.53832 + parent: 2 + - uid: 16197 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.479774,3.5221295 + parent: 2 + - uid: 16198 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.628956,3.6899614 + parent: 2 + - uid: 16199 + components: + - type: Transform + pos: 42.73152,3.5501013 + parent: 2 + - uid: 16200 + components: + - type: Transform + pos: 35.40297,28.736885 + parent: 2 + - uid: 16201 + components: + - type: Transform + pos: 35.51486,28.54419 + parent: 2 + - uid: 16202 + components: + - type: Transform + pos: 35.63918,28.687159 + parent: 2 + - uid: 16203 + components: + - type: Transform + pos: 38.436382,28.556622 + parent: 2 + - uid: 16204 + components: + - type: Transform + pos: 38.622864,28.569054 + parent: 2 + - uid: 16205 + components: + - type: Transform + pos: 38.492325,28.705805 + parent: 2 + - uid: 16206 + components: + - type: Transform + pos: 42.363365,36.72612 + parent: 2 + - uid: 16207 + components: + - type: Transform + pos: 42.384346,36.621223 + parent: 2 + - uid: 16208 + components: + - type: Transform + pos: -5.5053062,33.51533 + parent: 2 + - uid: 16209 + components: + - type: Transform + pos: 5.291128,47.58555 + parent: 2 + - uid: 16210 + components: + - type: Transform + pos: 5.291128,47.58555 + parent: 2 + - uid: 16211 + components: + - type: Transform + pos: 5.291128,47.58555 + parent: 2 + - uid: 16212 + components: + - type: Transform + pos: 5.291128,47.58555 + parent: 2 + - uid: 16213 + components: + - type: Transform + pos: 5.291128,47.58555 + parent: 2 + - uid: 16214 + components: + - type: Transform + pos: 5.291128,47.58555 + parent: 2 + - uid: 16215 + components: + - type: Transform + pos: 5.291128,47.58555 + parent: 2 + - uid: 16216 + components: + - type: Transform + pos: 5.291128,47.58555 + parent: 2 + - uid: 16217 + components: + - type: Transform + pos: 5.291128,47.58555 + parent: 2 + - uid: 16218 + components: + - type: Transform + pos: 5.291128,47.58555 + parent: 2 + - uid: 16219 + components: + - type: Transform + pos: 5.291128,47.58555 + parent: 2 + - uid: 16220 + components: + - type: Transform + pos: 30.418941,-31.47602 + parent: 2 + - uid: 16221 + components: + - type: Transform + pos: 30.540154,-31.326838 + parent: 2 + - uid: 16222 + components: + - type: Transform + pos: 30.633392,-31.466698 + parent: 2 + - uid: 16223 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.36278,-34.646008 + parent: 2 + - uid: 16224 + components: + - type: Transform + pos: -30.233414,-5.0676875 + parent: 2 + - type: Paper + stampState: paper_stamp-centcom + stampedBy: + - stampedColor: '#006600FF' + stampedName: stamp-component-stamped-name-centcom + content: > + [color=#002159]█▀▀▀▀▀▀▀▀▀▀▀▀▀▀█▄ + + █   ▀██   █▄     █           █ + + █       ▀   █▀█▄█   ▄       █ [head=1]Nanotrasen[/head] + + █           █     ▀█   ██▄   █ + + ▀█▄▄▄▄▄▄▄▄▄▄▄▄▄▄█ [head=1]Technologies[/head][/color] + + + [bold]--------------------------------------------------------------------------[/bold] + + O sistema de correios da estação ainda não estão terminados e ficará pronto em tempo inderteminado. Para entregar coisas em deptos especificos, adicionamos aberturas na maints de cada depto para entrega. + - uid: 16225 + components: + - type: Transform + pos: -12.340555,-24.334187 + parent: 2 + - uid: 16226 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.587118,-24.39812 + parent: 2 +- proto: PartRodMetal + entities: + - uid: 16227 + components: + - type: Transform + pos: -36.48147,-18.219297 + parent: 2 + - uid: 16228 + components: + - type: Transform + pos: -6.4957685,-21.430162 + parent: 2 + - uid: 16229 + components: + - type: Transform + pos: 20.485275,25.562778 + parent: 2 + - uid: 16230 + components: + - type: Transform + pos: -14.573731,-61.28659 + parent: 2 + - uid: 16231 + components: + - type: Transform + pos: -10.409327,-55.51623 + parent: 2 + - uid: 16232 + components: + - type: Transform + pos: 22.526024,-45.307453 + parent: 2 +- proto: PartRodMetal1 + entities: + - uid: 16233 + components: + - type: Transform + pos: -61.468468,26.457985 + parent: 2 + - uid: 16234 + components: + - type: Transform + pos: -50.5,17.5 + parent: 2 + - uid: 16235 + components: + - type: Transform + pos: -64.5,23.5 + parent: 2 + - uid: 16236 + components: + - type: Transform + pos: -62.5,26.5 + parent: 2 + - uid: 16237 + components: + - type: Transform + pos: -62.5,25.5 + parent: 2 + - uid: 16238 + components: + - type: Transform + pos: -58.5,27.5 + parent: 2 + - uid: 16239 + components: + - type: Transform + pos: -54.5,27.5 + parent: 2 +- proto: Pen + entities: + - uid: 16240 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.62738,-3.3543878 + parent: 2 + - uid: 16241 + components: + - type: Transform + pos: -15.483094,-6.4231343 + parent: 2 + - uid: 16242 + components: + - type: Transform + pos: -36.29377,6.5070233 + parent: 2 + - uid: 16243 + components: + - type: Transform + pos: -33.320435,-25.397486 + parent: 2 + - uid: 16244 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.661369,-22.297771 + parent: 2 + - uid: 16245 + components: + - type: Transform + pos: 26.488224,10.505266 + parent: 2 + - uid: 16246 + components: + - type: Transform + pos: 40.527912,13.475346 + parent: 2 + - uid: 16247 + components: + - type: Transform + pos: 41.510075,4.5384464 + parent: 2 + - uid: 16248 + components: + - type: Transform + pos: 25.548351,29.502483 + parent: 2 + - uid: 16249 + components: + - type: Transform + pos: 13.501094,42.53572 + parent: 2 + - uid: 16250 + components: + - type: Transform + pos: 23.42049,39.683567 + parent: 2 + - uid: 16251 + components: + - type: Transform + pos: 43.51236,-17.488043 + parent: 2 + - uid: 16252 + components: + - type: Transform + pos: -19.515514,20.852518 + parent: 2 + - uid: 16253 + components: + - type: Transform + pos: -24.933372,24.515673 + parent: 2 + - uid: 16254 + components: + - type: Transform + pos: -5.5146303,32.48969 + parent: 2 + - uid: 16255 + components: + - type: Transform + pos: -16.509304,31.552294 + parent: 2 + - uid: 16256 + components: + - type: Transform + pos: -24.51992,40.548824 + parent: 2 + - uid: 16257 + components: + - type: Transform + pos: -37.48929,30.520847 + parent: 2 + - uid: 16258 + components: + - type: Transform + pos: -25.5015,27.489347 + parent: 2 + - uid: 16259 + components: + - type: Transform + pos: -8.495046,49.124786 + parent: 2 + - uid: 16260 + components: + - type: Transform + pos: 5.333086,47.648487 + parent: 2 + - uid: 16261 + components: + - type: Transform + pos: 10.521973,52.51754 + parent: 2 + - uid: 16262 + components: + - type: Transform + pos: -6.499563,83.488266 + parent: 2 + - uid: 16263 + components: + - type: Transform + pos: 22.931149,-20.437773 + parent: 2 + - uid: 16264 + components: + - type: Transform + pos: 45.47221,-20.459116 + parent: 2 + - uid: 16265 + components: + - type: Transform + pos: 39.510532,-26.473282 + parent: 2 + - uid: 16266 + components: + - type: Transform + pos: 41.500698,-34.448414 + parent: 2 + - uid: 16267 + components: + - type: Transform + pos: 30.931763,-31.420078 + parent: 2 + - uid: 16268 + components: + - type: Transform + pos: 6.4996448,-28.510612 + parent: 2 + - uid: 16269 + components: + - type: Transform + pos: 8.514117,-20.45272 + parent: 2 + - uid: 16270 + components: + - type: Transform + pos: -0.4732281,-43.503067 + parent: 2 + - uid: 16271 + components: + - type: Transform + pos: 5.504001,-49.484642 + parent: 2 + - uid: 16272 + components: + - type: Transform + pos: 11.37772,-51.005104 + parent: 2 + - uid: 16273 + components: + - type: Transform + pos: 7.162602,25.46121 + parent: 2 + - uid: 16274 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.075729,-24.407255 + parent: 2 +- proto: PenCap + entities: + - uid: 16275 + components: + - type: Transform + pos: -4.731953,-37.44367 + parent: 2 + - uid: 16276 + components: + - type: Transform + pos: -8.532443,55.627502 + parent: 2 +- proto: PenHop + entities: + - uid: 16277 + components: + - type: Transform + pos: 6.486932,48.61696 + parent: 2 +- proto: PersonalAI + entities: + - uid: 15849 + components: + - type: Transform + parent: 15848 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 16278 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -17.470055,-3.3978996 + parent: 2 + - uid: 16279 + components: + - type: Transform + pos: -17.635727,-22.446955 + parent: 2 + - uid: 16280 + components: + - type: Transform + pos: -4.43854,-37.48557 + parent: 2 + - uid: 16281 + components: + - type: Transform + pos: 22.530182,10.4912815 + parent: 2 + - uid: 16282 + components: + - type: Transform + pos: 7.761195,54.535522 + parent: 2 + - uid: 16283 + components: + - type: Transform + pos: -5.4023366,74.6485 + parent: 2 +- proto: PetCarrier + entities: + - uid: 8801 + components: + - type: Transform + parent: 8799 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 8885 + components: + - type: Transform + parent: 8883 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 15856 + components: + - type: Transform + parent: 15855 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 15863 + components: + - type: Transform + parent: 15862 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 15895 + components: + - type: Transform + parent: 8815 + - type: Physics + angularDamping: 0 + linearDamping: 0 + fixedRotation: False + canCollide: False + - type: InsideEntityStorage + - uid: 15906 + components: + - type: Transform + parent: 15905 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 15908 + components: + - type: Transform + parent: 15907 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: PhoneInstrument + entities: + - uid: 16284 + components: + - type: Transform + pos: -13.300335,-2.2604 + parent: 2 + - uid: 16285 + components: + - type: Transform + pos: -26.33136,45.398384 + parent: 2 + - uid: 16286 + components: + - type: Transform + pos: 8.98264,54.600792 + parent: 2 + - uid: 16287 + components: + - type: Transform + pos: 9.387393,82.53901 + parent: 2 +- proto: PianoInstrument + entities: + - uid: 16288 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,4.5 + parent: 2 +- proto: PillCanister + entities: + - uid: 8747 + components: + - type: Transform + parent: 8746 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 16289 + components: + - type: Transform + pos: 34.350876,-34.67065 + parent: 2 + - uid: 16290 + components: + - type: Transform + pos: 36.3752,-29.338015 + parent: 2 + - uid: 16291 + components: + - type: Transform + pos: 36.61141,-29.543142 + parent: 2 + - uid: 16292 + components: + - type: Transform + pos: 28.24926,-31.429379 + parent: 2 + - uid: 16293 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.566922,-38.444157 + parent: 2 + - uid: 16294 + components: + - type: Transform + pos: 12.455034,-38.4022 + parent: 2 +- proto: PinpointerNuclear + entities: + - uid: 16295 + components: + - type: Transform + pos: -31.654495,17.071499 + parent: 2 +- proto: PlasmaCanister + entities: + - uid: 16296 + components: + - type: Transform + pos: 18.5,-51.5 + parent: 2 + - uid: 16297 + components: + - type: Transform + pos: 18.5,-50.5 + parent: 2 + - uid: 16298 + components: + - type: Transform + pos: 38.5,-58.5 + parent: 2 + - type: GasCanister + releaseValve: True + releasePressure: 1013.25 + - type: Lock + locked: False +- proto: PlasmaTankFilled + entities: + - uid: 16305 + components: + - type: Transform + pos: -7.4577236,-65.04376 + parent: 2 +- proto: PlasticFlapsAirtightClear + entities: + - uid: 16306 + components: + - type: Transform + pos: -45.5,1.5 + parent: 2 + - uid: 16307 + components: + - type: Transform + pos: -45.5,-2.5 + parent: 2 + - uid: 16308 + components: + - type: Transform + pos: -45.5,18.5 + parent: 2 + - uid: 16309 + components: + - type: Transform + pos: 20.5,47.5 + parent: 2 +- proto: PlasticFlapsAirtightOpaque + entities: + - uid: 18225 + components: + - type: Transform + pos: 16.5,-37.5 + parent: 2 + - uid: 18226 + components: + - type: Transform + pos: -36.5,-33.5 + parent: 2 + - uid: 18227 + components: + - type: Transform + pos: 12.5,-33.5 + parent: 2 + - uid: 18228 + components: + - type: Transform + pos: -3.5,-44.5 + parent: 2 + - uid: 18245 + components: + - type: Transform + pos: 21.5,24.5 + parent: 2 + - uid: 22374 + components: + - type: Transform + pos: 31.5,17.5 + parent: 2 +- proto: PlasticFlapsClear + entities: + - uid: 16310 + components: + - type: Transform + pos: -43.5,4.5 + parent: 2 + - uid: 16311 + components: + - type: Transform + pos: -44.5,-2.5 + parent: 2 + - uid: 16312 + components: + - type: Transform + pos: -43.5,-5.5 + parent: 2 + - uid: 16313 + components: + - type: Transform + pos: -36.5,12.5 + parent: 2 + - uid: 16314 + components: + - type: Transform + pos: -42.5,12.5 + parent: 2 + - uid: 16315 + components: + - type: Transform + pos: -44.5,5.5 + parent: 2 + - uid: 16316 + components: + - type: Transform + pos: -40.5,16.5 + parent: 2 + - uid: 16317 + components: + - type: Transform + pos: -44.5,1.5 + parent: 2 +- proto: PlasticFlapsOpaque + entities: + - uid: 16318 + components: + - type: Transform + pos: -20.5,-15.5 + parent: 2 + - uid: 16323 + components: + - type: Transform + pos: -27.5,26.5 + parent: 2 +- proto: Plunger + entities: + - uid: 16326 + components: + - type: Transform + pos: 7.5468035,13.295443 + parent: 2 + - uid: 16327 + components: + - type: Transform + pos: 7.3603234,13.174231 + parent: 2 +- proto: PlushieCoffeeFox + entities: + - uid: 20026 + components: + - type: Transform + pos: -17.484127,12.425354 + parent: 2 +- proto: PlushieMoth + entities: + - uid: 16328 + components: + - type: Transform + pos: -23.665382,-13.840267 + parent: 2 + - uid: 16329 + components: + - type: Transform + pos: -38.5,14.5 + parent: 2 + - uid: 16330 + components: + - type: Transform + pos: -37.5,14.5 + parent: 2 + - uid: 16331 + components: + - type: Transform + pos: -37.5,15.5 + parent: 2 + - uid: 16332 + components: + - type: Transform + pos: -37.5,16.5 + parent: 2 + - uid: 16333 + components: + - type: Transform + pos: -37.5,17.5 + parent: 2 + - uid: 16334 + components: + - type: Transform + pos: -38.5,17.5 + parent: 2 + - uid: 16335 + components: + - type: Transform + pos: -38.5,16.5 + parent: 2 + - uid: 16336 + components: + - type: Transform + pos: -38.5,15.5 + parent: 2 + - uid: 16337 + components: + - type: Transform + pos: 43.132454,4.7062783 + parent: 2 +- proto: PlushieMothBartender + entities: + - uid: 23918 + components: + - type: Transform + parent: 23915 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: PlushieNuke + entities: + - uid: 16338 + components: + - type: Transform + pos: -33.4985,39.59751 + parent: 2 +- proto: PlushieRGBee + entities: + - uid: 16339 + components: + - type: Transform + pos: -25.558392,-67.50694 + parent: 2 +- proto: PlushieSlime + entities: + - uid: 16340 + components: + - type: Transform + pos: -33.4985,36.450657 + parent: 2 +- proto: PlushieSlips + entities: + - uid: 5949 + components: + - type: Transform + parent: 1930 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 23909 + components: + - type: Transform + parent: 19985 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: PlushieSnake + entities: + - uid: 16341 + components: + - type: Transform + pos: -33.477524,33.4087 + parent: 2 +- proto: PlushieSpaceLizard + entities: + - uid: 16342 + components: + - type: Transform + pos: -45.54679,-18.494848 + parent: 2 +- proto: PlushieXeno + entities: + - uid: 16343 + components: + - type: Transform + pos: -1.5916812,-97.51262 + parent: 2 +- proto: PortableFlasher + entities: + - uid: 16344 + components: + - type: Transform + pos: -17.5,38.5 + parent: 2 +- proto: PortableGeneratorJrPacman + entities: + - uid: 16345 + components: + - type: Transform + pos: -2.5,-53.5 + parent: 2 + - uid: 16346 + components: + - type: Transform + pos: 23.5,-34.5 + parent: 2 + - uid: 16347 + components: + - type: Transform + pos: -25.5,-54.5 + parent: 2 + - uid: 16348 + components: + - type: Transform + pos: -21.5,-37.5 + parent: 2 + - uid: 16349 + components: + - type: Transform + pos: 10.5,-15.5 + parent: 2 + - uid: 16350 + components: + - type: Transform + pos: 42.5,23.5 + parent: 2 + - uid: 16351 + components: + - type: Transform + pos: 12.5,17.5 + parent: 2 + - uid: 16352 + components: + - type: Transform + pos: 36.5,-27.5 + parent: 2 + - uid: 16353 + components: + - type: Transform + pos: -17.5,4.5 + parent: 2 +- proto: PortableGeneratorPacman + entities: + - uid: 16354 + components: + - type: Transform + pos: 10.5,-58.5 + parent: 2 + - uid: 16355 + components: + - type: Transform + pos: -23.5,9.5 + parent: 2 + - uid: 16356 + components: + - type: Transform + pos: -28.5,-16.5 + parent: 2 + - uid: 16357 + components: + - type: Transform + pos: 8.5,44.5 + parent: 2 + - uid: 16358 + components: + - type: Transform + pos: 0.5,-58.5 + parent: 2 + - uid: 16359 + components: + - type: Transform + pos: -26.5,-66.5 + parent: 2 + - uid: 16360 + components: + - type: Transform + pos: 11.5,46.5 + parent: 2 +- proto: PortableGeneratorPacmanMachineCircuitboard + entities: + - uid: 16361 + components: + - type: Transform + pos: -2.5222745,-37.56796 + parent: 2 +- proto: PortableGeneratorSuperPacman + entities: + - uid: 16362 + components: + - type: Transform + pos: 10.5,-57.5 + parent: 2 +- proto: PortableGeneratorSuperPacmanMachineCircuitboard + entities: + - uid: 16363 + components: + - type: Transform + pos: -2.5,-40.5 + parent: 2 +- proto: PortableScrubber + entities: + - uid: 5948 + components: + - type: Transform + pos: 35.5,-48.5 + parent: 2 + - uid: 16364 + components: + - type: Transform + pos: -30.5,-41.5 + parent: 2 + - uid: 16365 + components: + - type: Transform + pos: -29.5,-41.5 + parent: 2 + - uid: 16366 + components: + - type: Transform + pos: -39.5,-51.5 + parent: 2 + - uid: 16367 + components: + - type: Transform + pos: 9.5,76.5 + parent: 2 + - uid: 16368 + components: + - type: Transform + pos: 2.5,-38.5 + parent: 2 + - uid: 16369 + components: + - type: Transform + pos: 2.5,-39.5 + parent: 2 + - uid: 16370 + components: + - type: Transform + pos: 36.5,-48.5 + parent: 2 + - uid: 16371 + components: + - type: Transform + pos: 7.5,-76.5 + parent: 2 + - uid: 16372 + components: + - type: Transform + pos: -6.5,-76.5 + parent: 2 + - uid: 16374 + components: + - type: Transform + pos: 37.5,-48.5 + parent: 2 + - uid: 16375 + components: + - type: Transform + pos: 38.5,-48.5 + parent: 2 +- proto: PosterContrabandClown + entities: + - uid: 16376 + components: + - type: Transform + pos: 39.5,14.5 + parent: 2 +- proto: PosterContrabandUnreadableAnnouncement + entities: + - uid: 16377 + components: + - type: Transform + pos: -1.5,5.5 + parent: 2 +- proto: PosterLegitCleanliness + entities: + - uid: 16378 + components: + - type: Transform + pos: 7.5,10.5 + parent: 2 + - uid: 16379 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,-21.5 + parent: 2 +- proto: PosterLegitMime + entities: + - uid: 818 + components: + - type: Transform + pos: 44.5,15.5 + parent: 2 +- proto: PosterLegitSafetyMothDelam + entities: + - uid: 16380 + components: + - type: Transform + pos: -39.5,16.5 + parent: 2 +- proto: PosterLegitSafetyMothEpi + entities: + - uid: 16381 + components: + - type: Transform + pos: -36.5,17.5 + parent: 2 + - uid: 16382 + components: + - type: Transform + pos: -38.5,18.5 + parent: 2 + - uid: 16383 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,19.5 + parent: 2 +- proto: PosterLegitSafetyMothHardhat + entities: + - uid: 16384 + components: + - type: Transform + pos: -36.5,14.5 + parent: 2 +- proto: PosterLegitSafetyMothMeth + entities: + - uid: 16385 + components: + - type: Transform + pos: -37.5,18.5 + parent: 2 +- proto: PottedPlant0 + entities: + - uid: 16386 + components: + - type: Transform + pos: -16.5,11.5 + parent: 2 +- proto: PottedPlant12 + entities: + - uid: 16387 + components: + - type: Transform + pos: -13.5,14.5 + parent: 2 +- proto: PottedPlantBioluminscent + entities: + - uid: 16388 + components: + - type: Transform + pos: -9.5,14.5 + parent: 2 +- proto: PottedPlantRandom + entities: + - uid: 16389 + components: + - type: Transform + pos: -23.5,-3.5 + parent: 2 + - uid: 16390 + components: + - type: Transform + pos: -29.5,4.5 + parent: 2 + - uid: 16391 + components: + - type: Transform + pos: -32.5,7.5 + parent: 2 + - uid: 16392 + components: + - type: Transform + pos: -36.5,4.5 + parent: 2 + - uid: 16393 + components: + - type: Transform + pos: -36.5,-5.5 + parent: 2 + - uid: 16394 + components: + - type: Transform + pos: -41.5,-29.5 + parent: 2 + - uid: 16395 + components: + - type: Transform + pos: -35.5,-36.5 + parent: 2 + - uid: 16396 + components: + - type: Transform + pos: -40.5,-41.5 + parent: 2 + - uid: 16397 + components: + - type: Transform + pos: -45.5,-29.5 + parent: 2 + - uid: 16398 + components: + - type: Transform + pos: -3.5,-40.5 + parent: 2 + - uid: 16399 + components: + - type: Transform + pos: 21.5,4.5 + parent: 2 + - uid: 16400 + components: + - type: Transform + pos: 31.5,11.5 + parent: 2 + - uid: 16401 + components: + - type: Transform + pos: 42.5,-1.5 + parent: 2 + - uid: 16402 + components: + - type: Transform + pos: 40.5,0.5 + parent: 2 + - uid: 16403 + components: + - type: Transform + pos: 34.5,26.5 + parent: 2 + - uid: 16404 + components: + - type: Transform + pos: 40.5,26.5 + parent: 2 + - uid: 16405 + components: + - type: Transform + pos: 34.5,30.5 + parent: 2 + - uid: 16406 + components: + - type: Transform + pos: 38.5,30.5 + parent: 2 + - uid: 16407 + components: + - type: Transform + pos: 40.5,30.5 + parent: 2 + - uid: 16408 + components: + - type: Transform + pos: 25.5,30.5 + parent: 2 + - uid: 16409 + components: + - type: Transform + pos: 25.5,32.5 + parent: 2 + - uid: 16410 + components: + - type: Transform + pos: 21.5,36.5 + parent: 2 + - uid: 16411 + components: + - type: Transform + pos: 19.5,36.5 + parent: 2 + - uid: 16412 + components: + - type: Transform + pos: 21.5,40.5 + parent: 2 + - uid: 16413 + components: + - type: Transform + pos: 19.5,40.5 + parent: 2 + - uid: 16414 + components: + - type: Transform + pos: 26.5,38.5 + parent: 2 + - uid: 16415 + components: + - type: Transform + pos: 25.5,35.5 + parent: 2 + - uid: 16416 + components: + - type: Transform + pos: 42.5,46.5 + parent: 2 + - uid: 16417 + components: + - type: Transform + pos: 41.5,-6.5 + parent: 2 + - uid: 16418 + components: + - type: Transform + pos: 34.5,-6.5 + parent: 2 + - uid: 16419 + components: + - type: Transform + pos: -2.5,29.5 + parent: 2 + - uid: 16420 + components: + - type: Transform + pos: -8.5,32.5 + parent: 2 + - uid: 16421 + components: + - type: Transform + pos: -30.5,30.5 + parent: 2 + - uid: 16422 + components: + - type: Transform + pos: -6.5,40.5 + parent: 2 + - uid: 16423 + components: + - type: Transform + pos: 4.5,54.5 + parent: 2 + - uid: 16424 + components: + - type: Transform + pos: -3.5,61.5 + parent: 2 + - uid: 16425 + components: + - type: Transform + pos: 46.5,-22.5 + parent: 2 + - uid: 16426 + components: + - type: Transform + pos: 41.5,-33.5 + parent: 2 + - uid: 16427 + components: + - type: Transform + pos: 44.5,-29.5 + parent: 2 + - uid: 16428 + components: + - type: Transform + pos: 5.5,-32.5 + parent: 2 + - uid: 16429 + components: + - type: Transform + pos: 8.5,-18.5 + parent: 2 + - uid: 16430 + components: + - type: Transform + pos: 10.5,-21.5 + parent: 2 + - uid: 16431 + components: + - type: Transform + pos: 10.5,-27.5 + parent: 2 + - uid: 16432 + components: + - type: Transform + pos: 4.5,-42.5 + parent: 2 + - uid: 16433 + components: + - type: Transform + pos: 4.5,-44.5 + parent: 2 + - uid: 16434 + components: + - type: Transform + pos: 6.5,-56.5 + parent: 2 + - uid: 16435 + components: + - type: Transform + pos: 8.5,-56.5 + parent: 2 + - uid: 16436 + components: + - type: Transform + pos: 0.5,-60.5 + parent: 2 + - uid: 16437 + components: + - type: Transform + pos: 0.5,-55.5 + parent: 2 + - uid: 16438 + components: + - type: Transform + pos: -7.5,-55.5 + parent: 2 + - uid: 16439 + components: + - type: Transform + pos: -7.5,-60.5 + parent: 2 + - uid: 16440 + components: + - type: Transform + pos: -16.5,-61.5 + parent: 2 + - uid: 16441 + components: + - type: Transform + pos: -16.5,-55.5 + parent: 2 + - uid: 16442 + components: + - type: Transform + pos: -7.5,-67.5 + parent: 2 + - uid: 16443 + components: + - type: Transform + pos: -7.5,-71.5 + parent: 2 + - uid: 16444 + components: + - type: Transform + pos: -7.5,-75.5 + parent: 2 + - uid: 16445 + components: + - type: Transform + pos: 8.5,-75.5 + parent: 2 + - uid: 16446 + components: + - type: Transform + pos: 8.5,-71.5 + parent: 2 + - uid: 16447 + components: + - type: Transform + pos: 8.5,-67.5 + parent: 2 + - uid: 16448 + components: + - type: Transform + pos: 8.5,-62.5 + parent: 2 + - uid: 16449 + components: + - type: Transform + pos: 32.5,-64.5 + parent: 2 + - uid: 16450 + components: + - type: Transform + pos: 41.5,-9.5 + parent: 2 + - uid: 16451 + components: + - type: Transform + pos: 34.5,-9.5 + parent: 2 +- proto: PottedPlantRandomPlastic + entities: + - uid: 16452 + components: + - type: Transform + pos: -32.5,-64.5 + parent: 2 +- proto: PottedPlantRD + entities: + - uid: 16453 + components: + - type: Transform + pos: -17.5,-2.5 + parent: 2 + - uid: 16454 + components: + - type: Transform + pos: -25.5,5.5 + parent: 2 + - uid: 16455 + components: + - type: Transform + pos: 17.5,-32.5 + parent: 2 +- proto: PowerCellHighPrinted + entities: + - uid: 16456 + components: + - type: Transform + pos: 12.613555,-55.42685 + parent: 2 +- proto: PowerCellMedium + entities: + - uid: 16457 + components: + - type: Transform + pos: 4.5929947,13.672501 + parent: 2 + - uid: 16458 + components: + - type: Transform + pos: 4.686235,13.476696 + parent: 2 + - uid: 16459 + components: + - type: Transform + pos: 40.631042,19.56979 + parent: 2 +- proto: PowerCellMediumPrinted + entities: + - uid: 16460 + components: + - type: Transform + pos: -33.412727,-28.394 + parent: 2 + - uid: 16461 + components: + - type: Transform + pos: 29.644543,-14.425663 + parent: 2 + - uid: 16462 + components: + - type: Transform + pos: -12.363941,-61.440437 + parent: 2 + - uid: 16463 + components: + - type: Transform + pos: -5.3861656,-62.43858 + parent: 2 + - uid: 16464 + components: + - type: Transform + pos: 22.630917,-43.39836 + parent: 2 +- proto: PowerCellRecharger + entities: + - uid: 16465 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.5,-14.5 + parent: 2 + - uid: 16466 + components: + - type: Transform + pos: -6.5,36.5 + parent: 2 + - uid: 16467 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,27.5 + parent: 2 + - uid: 16468 + components: + - type: Transform + pos: -3.5,52.5 + parent: 2 + - uid: 16469 + components: + - type: Transform + pos: 2.5,62.5 + parent: 2 + - uid: 16470 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,-18.5 + parent: 2 + - uid: 16471 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-31.5 + parent: 2 + - uid: 16472 + components: + - type: Transform + pos: 4.5,17.5 + parent: 2 + - uid: 16473 + components: + - type: Transform + pos: 4.5,13.5 + parent: 2 + - uid: 16474 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,-28.5 + parent: 2 + - uid: 16475 + components: + - type: Transform + pos: -26.5,-20.5 + parent: 2 + - uid: 16476 + components: + - type: Transform + pos: -47.5,-31.5 + parent: 2 + - uid: 16477 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,19.5 + parent: 2 + - uid: 16478 + components: + - type: Transform + pos: 23.5,-20.5 + parent: 2 + - uid: 16479 + components: + - type: Transform + pos: 29.5,-14.5 + parent: 2 + - uid: 16480 + components: + - type: Transform + pos: 17.5,-29.5 + parent: 2 + - uid: 16481 + components: + - type: Transform + pos: 7.5,-44.5 + parent: 2 + - uid: 16482 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,-55.5 + parent: 2 + - uid: 16483 + components: + - type: Transform + pos: -12.5,-61.5 + parent: 2 + - uid: 16484 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,-62.5 + parent: 2 + - uid: 16485 + components: + - type: Transform + pos: 22.5,-43.5 + parent: 2 + - uid: 16486 + components: + - type: Transform + pos: 27.5,-62.5 + parent: 2 + - uid: 16487 + components: + - type: Transform + pos: 10.5,55.5 + parent: 2 + - uid: 16488 + components: + - type: Transform + pos: -28.5,30.5 + parent: 2 + - uid: 16489 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,-23.5 + parent: 2 + - uid: 16490 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,-30.5 + parent: 2 + - uid: 16491 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,-14.5 + parent: 2 + - uid: 16492 + components: + - type: Transform + pos: -2.5,20.5 + parent: 2 + - uid: 16493 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -35.5,23.5 + parent: 2 + - uid: 16494 + components: + - type: Transform + pos: -24.5,45.5 + parent: 2 + - uid: 16495 + components: + - type: Transform + pos: -17.5,31.5 + parent: 2 + - uid: 16496 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,9.5 + parent: 2 + - uid: 16497 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -42.5,-7.5 + parent: 2 + - uid: 16498 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,-42.5 + parent: 2 + - uid: 16499 + components: + - type: Transform + pos: 29.5,-1.5 + parent: 2 + - uid: 16500 + components: + - type: Transform + pos: 41.5,-12.5 + parent: 2 + - uid: 16501 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.5,7.5 + parent: 2 + - uid: 16502 + components: + - type: Transform + pos: -2.5,27.5 + parent: 2 +- proto: PowerCellSmall + entities: + - uid: 16503 + components: + - type: Transform + pos: 4.630291,17.663177 + parent: 2 + - uid: 16504 + components: + - type: Transform + pos: 4.4811068,17.476696 + parent: 2 + - uid: 16505 + components: + - type: Transform + pos: -26.386574,-20.414513 + parent: 2 +- proto: PowerComputerCircuitboard + entities: + - uid: 16506 + components: + - type: Transform + pos: 3.5384958,72.5737 + parent: 2 +- proto: Poweredlight + entities: + - uid: 16507 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,-42.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18433 + - uid: 16508 + components: + - type: Transform + pos: 6.5,27.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18342 + - uid: 16509 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 36.5,22.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18363 + - uid: 16510 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,7.5 + parent: 2 + - uid: 16511 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,12.5 + parent: 2 + - uid: 16512 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,12.5 + parent: 2 + - uid: 16513 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,7.5 + parent: 2 + - uid: 16514 + components: + - type: Transform + pos: 12.5,2.5 + parent: 2 + - uid: 16515 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 12.5,-0.5 + parent: 2 + - uid: 16516 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,-5.5 + parent: 2 + - uid: 16517 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,-5.5 + parent: 2 + - uid: 16518 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-10.5 + parent: 2 + - uid: 16519 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-10.5 + parent: 2 + - uid: 16520 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,-0.5 + parent: 2 + - uid: 16521 + components: + - type: Transform + pos: -10.5,2.5 + parent: 2 + - uid: 16522 + components: + - type: Transform + pos: 5.5,19.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18318 + - uid: 16523 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,11.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18315 + - uid: 16524 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,9.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18316 + - uid: 16525 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,10.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18316 + - uid: 16526 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,13.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18316 + - uid: 16527 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,13.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18316 + - uid: 16528 + components: + - type: Transform + pos: -14.5,16.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18316 + - uid: 16529 + components: + - type: Transform + pos: -8.5,16.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18316 + - uid: 16530 + components: + - type: Transform + pos: -4.5,16.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18317 + - uid: 16531 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,14.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18318 + - uid: 16532 + components: + - type: Transform + pos: 10.5,19.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18318 + - uid: 16533 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,16.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18318 + - uid: 16534 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,13.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18319 + - uid: 16535 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,13.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18319 + - uid: 16536 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,-6.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18314 + - uid: 16537 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,-5.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18314 + - uid: 16538 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,-0.5 + parent: 2 + - uid: 16539 + components: + - type: Transform + pos: -16.5,2.5 + parent: 2 + - uid: 16540 + components: + - type: Transform + pos: -29.5,2.5 + parent: 2 + - uid: 16541 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,6.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18313 + - uid: 16542 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,5.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18312 + - uid: 16543 + components: + - type: Transform + pos: -28.5,8.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18312 + - uid: 16544 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -41.5,6.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18322 + - uid: 16545 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -44.5,12.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18322 + - uid: 16546 + components: + - type: Transform + pos: -39.5,12.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18322 + - uid: 16547 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,8.5 + parent: 2 + - uid: 16548 + components: + - type: Transform + pos: -41.5,4.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18323 + - uid: 16549 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -42.5,-0.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18323 + - uid: 16550 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -41.5,-5.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18323 + - uid: 16551 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,-4.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18323 + - uid: 16552 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,2.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18323 + - uid: 16553 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -43.5,-13.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18321 + - uid: 16554 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -39.5,-13.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18321 + - uid: 16555 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,-9.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18321 + - uid: 16556 + components: + - type: Transform + pos: -43.5,-7.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18321 + - uid: 16557 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -27.5,-14.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18324 + - uid: 16558 + components: + - type: Transform + pos: -29.5,-10.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18324 + - uid: 16559 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,-10.5 + parent: 2 + - uid: 16560 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,-4.5 + parent: 2 + - uid: 16561 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,16.5 + parent: 2 + - uid: 16562 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,16.5 + parent: 2 + - uid: 16563 + components: + - type: Transform + pos: -42.5,17.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18325 + - uid: 16564 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,-18.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18326 + - uid: 16565 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,-18.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18327 + - uid: 16566 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,-21.5 + parent: 2 + - uid: 16567 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -31.5,-24.5 + parent: 2 + - uid: 16568 + components: + - type: Transform + pos: -28.5,-20.5 + parent: 2 + - uid: 16569 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,-15.5 + parent: 2 + - uid: 16570 + components: + - type: Transform + pos: -27.5,-29.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18341 + - uid: 16571 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,-28.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18341 + - uid: 16572 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,-28.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18341 + - uid: 16573 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,-35.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18328 + - uid: 16574 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,-36.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18329 + - uid: 16575 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,-40.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18329 + - uid: 16576 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,-40.5 + parent: 2 + - uid: 16577 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,-41.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18329 + - uid: 16578 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,-39.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18343 + - uid: 16579 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,-31.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18341 + - uid: 16580 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,-28.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18340 + - uid: 16581 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,-39.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18333 + - uid: 16582 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -25.5,-24.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18330 + - uid: 16583 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,-24.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18330 + - uid: 16584 + components: + - type: Transform + pos: -25.5,-20.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18330 + - uid: 16585 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.5,-22.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18330 + - uid: 16586 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,-18.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18330 + - uid: 16587 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -18.5,-17.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18330 + - uid: 16588 + components: + - type: Transform + pos: -15.5,-19.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18331 + - uid: 16589 + components: + - type: Transform + pos: -15.5,-22.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18331 + - uid: 16590 + components: + - type: Transform + pos: -10.5,-21.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18332 + - uid: 16591 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,-33.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18334 + - uid: 16592 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,-32.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18334 + - uid: 16593 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,-24.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18348 + - uid: 16594 + components: + - type: Transform + pos: -4.5,-20.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18348 + - uid: 16595 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-31.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18336 + - 18335 + - uid: 16596 + components: + - type: Transform + pos: -3.5,-30.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18336 + - 18335 + - uid: 16597 + components: + - type: Transform + pos: -9.5,-35.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18335 + - uid: 16598 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,-37.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18335 + - uid: 16599 + components: + - type: Transform + pos: -10.5,-39.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18335 + - uid: 16600 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,-45.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18335 + - uid: 16601 + components: + - type: Transform + pos: -10.5,-47.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18335 + - uid: 16602 + components: + - type: Transform + pos: -18.5,-26.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18340 + - uid: 16603 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,-28.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18340 + - uid: 16604 + components: + - type: Transform + pos: -6.5,-26.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18340 + - uid: 16605 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -40.5,-43.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18349 + - uid: 16606 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,-43.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18349 + - uid: 16607 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -41.5,-39.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18349 + - uid: 16608 + components: + - type: Transform + pos: -42.5,-49.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18350 + - uid: 16609 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,-52.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18350 + - uid: 16610 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,-50.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18350 + - uid: 16611 + components: + - type: Transform + pos: -36.5,-45.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18350 + - uid: 16612 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -39.5,-37.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18345 + - uid: 16613 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -45.5,-33.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18345 + - uid: 16614 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -41.5,-33.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18345 + - uid: 16615 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -41.5,-33.5 + parent: 2 + - uid: 16616 + components: + - type: Transform + pos: -46.5,-29.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18345 + - uid: 16617 + components: + - type: Transform + pos: -46.5,-29.5 + parent: 2 + - uid: 16618 + components: + - type: Transform + pos: -43.5,-29.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18345 + - uid: 16619 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -44.5,-36.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18345 + - uid: 16620 + components: + - type: Transform + pos: -3.5,-35.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18337 + - uid: 16621 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 17.5,-0.5 + parent: 2 + - uid: 16622 + components: + - type: Transform + pos: 24.5,2.5 + parent: 2 + - uid: 16623 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,-0.5 + parent: 2 + - uid: 16624 + components: + - type: Transform + pos: 34.5,2.5 + parent: 2 + - uid: 16625 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,-4.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18339 + - 18338 + - uid: 16626 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,22.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18357 + - 18356 + - uid: 16627 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,22.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18357 + - 18356 + - uid: 16628 + components: + - type: Transform + pos: 24.5,19.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18355 + - uid: 16629 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,17.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18355 + - uid: 16630 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 22.5,16.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18355 + - uid: 16631 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,17.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18355 + - uid: 16632 + components: + - type: Transform + pos: 16.5,18.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18354 + - uid: 16633 + components: + - type: Transform + pos: 18.5,14.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18358 + - uid: 16634 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,12.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18358 + - uid: 16635 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,12.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18358 + - uid: 16636 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,7.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18359 + - uid: 16637 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,4.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18359 + - uid: 16638 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 22.5,4.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18359 + - uid: 16639 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,4.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18359 + - uid: 16640 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 34.5,4.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18359 + - uid: 16641 + components: + - type: Transform + pos: 32.5,11.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18359 + - uid: 16642 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 35.5,13.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18360 + - uid: 16643 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 32.5,18.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18360 + - uid: 16644 + components: + - type: Transform + pos: 35.5,19.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18360 + - uid: 16645 + components: + - type: Transform + pos: 41.5,19.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18361 + - uid: 16646 + components: + - type: Transform + pos: 42.5,15.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18362 + - uid: 16647 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 40.5,13.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18362 + - uid: 16648 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,23.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18364 + - uid: 16649 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,24.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18365 + - uid: 16650 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 22.5,29.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18366 + - uid: 16651 + components: + - type: Transform + pos: 22.5,33.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18366 + - uid: 16652 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,31.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18366 + - uid: 16653 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,38.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18366 + - uid: 16654 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,35.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18368 + - uid: 16655 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 16.5,38.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18367 + - uid: 16656 + components: + - type: Transform + pos: 16.5,40.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18367 + - uid: 16657 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.5,26.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18374 + - uid: 16658 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 39.5,26.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18374 + - uid: 16659 + components: + - type: Transform + pos: 39.5,30.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18374 + - uid: 16660 + components: + - type: Transform + pos: 33.5,30.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18374 + - uid: 16661 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 44.5,30.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18373 + - uid: 16662 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 44.5,38.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18373 + - uid: 16663 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,37.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18375 + - uid: 16664 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,32.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18375 + - uid: 16665 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 28.5,28.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18375 + - uid: 16666 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 28.5,18.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18359 + - uid: 16667 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,12.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18359 + - uid: 16668 + components: + - type: Transform + pos: 39.5,-2.5 + parent: 2 + - uid: 16669 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,-12.5 + parent: 2 + - uid: 16670 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 44.5,-9.5 + parent: 2 + - uid: 16671 + components: + - type: Transform + pos: 36.5,-9.5 + parent: 2 + - uid: 16672 + components: + - type: Transform + pos: 39.5,-9.5 + parent: 2 + - uid: 16673 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 39.5,-6.5 + parent: 2 + - uid: 16674 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 36.5,-6.5 + parent: 2 + - uid: 16675 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 34.5,-12.5 + parent: 2 + - uid: 16676 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 32.5,-9.5 + parent: 2 + - uid: 16677 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 32.5,-4.5 + parent: 2 + - uid: 16678 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 44.5,-5.5 + parent: 2 + - uid: 16679 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,-16.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18377 + - uid: 16680 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,18.5 + parent: 2 + - uid: 16681 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,18.5 + parent: 2 + - uid: 16682 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,18.5 + parent: 2 + - uid: 16683 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -18.5,21.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18378 + - uid: 16684 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,20.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18378 + - uid: 16685 + components: + - type: Transform + pos: -18.5,25.5 + parent: 2 + - uid: 16686 + components: + - type: Transform + pos: -21.5,25.5 + parent: 2 + - uid: 16687 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,22.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18380 + - uid: 16688 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,26.5 + parent: 2 + - uid: 16689 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,26.5 + parent: 2 + - uid: 16690 + components: + - type: Transform + pos: -13.5,29.5 + parent: 2 + - uid: 16691 + components: + - type: Transform + pos: -9.5,29.5 + parent: 2 + - uid: 16692 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,29.5 + parent: 2 + - uid: 16693 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,34.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18383 + - uid: 16694 + components: + - type: Transform + pos: -11.5,36.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18383 + - uid: 16695 + components: + - type: Transform + pos: -6.5,34.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18383 + - uid: 16696 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,34.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18384 + - uid: 16697 + components: + - type: Transform + pos: -17.5,40.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18385 + - uid: 16698 + components: + - type: Transform + pos: -12.5,40.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18385 + - uid: 16699 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,38.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18385 + - uid: 16700 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,34.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18386 + - uid: 16701 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,38.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18387 + - uid: 16702 + components: + - type: Transform + pos: -9.5,43.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18387 + - uid: 16703 + components: + - type: Transform + pos: -21.5,41.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18388 + - uid: 16704 + components: + - type: Transform + pos: -25.5,41.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18388 + - uid: 16705 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,44.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18389 + - uid: 16706 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,43.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18389 + - uid: 16707 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,32.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18390 + - uid: 16708 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,34.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18390 + - uid: 16709 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,39.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18390 + - uid: 16710 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -28.5,39.5 + parent: 2 + - uid: 16711 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -32.5,23.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18382 + - uid: 16712 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -30.5,23.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18382 + - uid: 16713 + components: + - type: Transform + pos: -32.5,26.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18382 + - uid: 16714 + components: + - type: Transform + pos: -30.5,26.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18382 + - uid: 16715 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -42.5,31.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18394 + - uid: 16716 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -39.5,31.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18394 + - uid: 16717 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,34.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18394 + - uid: 16718 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,37.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18394 + - uid: 16719 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -42.5,35.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18394 + - uid: 16720 + components: + - type: Transform + pos: -41.5,26.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18396 + - uid: 16721 + components: + - type: Transform + pos: -39.5,22.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18395 + - uid: 16722 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -41.5,19.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18395 + - uid: 16723 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,19.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18395 + - uid: 16724 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,22.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18395 + - uid: 16725 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -37.5,25.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18395 + - uid: 16726 + components: + - type: Transform + pos: -36.5,30.5 + parent: 2 + - uid: 16727 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -31.5,28.5 + parent: 2 + - uid: 16728 + components: + - type: Transform + pos: -27.5,30.5 + parent: 2 + - uid: 16729 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,27.5 + parent: 2 + - uid: 16730 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,33.5 + parent: 2 + - uid: 16731 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,33.5 + parent: 2 + - uid: 16732 + components: + - type: Transform + pos: -18.5,29.5 + parent: 2 + - uid: 16733 + components: + - type: Transform + pos: -5.5,40.5 + parent: 2 + - uid: 16734 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,34.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18398 + - uid: 16735 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,40.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18398 + - uid: 16736 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,40.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18398 + - uid: 16737 + components: + - type: Transform + pos: 6.5,44.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18398 + - uid: 16738 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,47.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18399 + - uid: 16739 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,51.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18400 + - uid: 16740 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,54.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18400 + - uid: 16741 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,46.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18401 + - uid: 16742 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,48.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18401 + - uid: 16743 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,49.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18401 + - uid: 16744 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,52.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18402 + - uid: 16745 + components: + - type: Transform + pos: 7.5,56.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18402 + - uid: 16746 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,49.5 + parent: 2 + - uid: 16747 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,49.5 + parent: 2 + - uid: 16748 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,43.5 + parent: 2 + - uid: 16749 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,40.5 + parent: 2 + - uid: 16750 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,36.5 + parent: 2 + - uid: 16751 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,32.5 + parent: 2 + - uid: 16752 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,28.5 + parent: 2 + - uid: 16753 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,22.5 + parent: 2 + - uid: 16754 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,16.5 + parent: 2 + - uid: 16755 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,51.5 + parent: 2 + - uid: 16756 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,58.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18403 + - uid: 16757 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,58.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18403 + - uid: 16758 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,59.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18403 + - uid: 16759 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,59.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18403 + - uid: 16760 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,70.5 + parent: 2 + - uid: 16761 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,71.5 + parent: 2 + - uid: 16762 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,70.5 + parent: 2 + - uid: 16763 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,71.5 + parent: 2 + - uid: 16764 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,69.5 + parent: 2 + - uid: 16765 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,77.5 + parent: 2 + - uid: 16766 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,74.5 + parent: 2 + - uid: 16767 + components: + - type: Transform + pos: 8.5,80.5 + parent: 2 + - uid: 16768 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,82.5 + parent: 2 + - uid: 16769 + components: + - type: Transform + pos: 6.5,85.5 + parent: 2 + - uid: 16770 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,82.5 + parent: 2 + - uid: 16771 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,82.5 + parent: 2 + - uid: 16772 + components: + - type: Transform + pos: 1.5,85.5 + parent: 2 + - uid: 16773 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,82.5 + parent: 2 + - uid: 16774 + components: + - type: Transform + pos: -3.5,85.5 + parent: 2 + - uid: 16775 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,77.5 + parent: 2 + - uid: 16776 + components: + - type: Transform + pos: -5.5,80.5 + parent: 2 + - uid: 16777 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,74.5 + parent: 2 + - uid: 16778 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 16.5,-11.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18404 + - uid: 16779 + components: + - type: Transform + pos: 16.5,-13.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18405 + - uid: 16780 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 18.5,-16.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18405 + - uid: 16781 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 20.5,-19.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18406 + - uid: 16782 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 16.5,-19.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18406 + - uid: 16783 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,-20.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18407 + - uid: 16784 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,-19.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18407 + - uid: 16785 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,-19.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18407 + - uid: 16786 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 28.5,-18.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18408 + - uid: 16787 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-18.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18408 + - uid: 16788 + components: + - type: Transform + pos: 29.5,-14.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18408 + - uid: 16789 + components: + - type: Transform + pos: 33.5,-14.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18408 + - uid: 16790 + components: + - type: Transform + pos: 45.5,-20.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18410 + - uid: 16791 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,-16.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18409 + - uid: 16792 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,-25.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18410 + - uid: 16793 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,-34.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18412 + - 18411 + - uid: 16794 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 38.5,-32.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18412 + - 18411 + - uid: 16795 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 38.5,-29.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18412 + - 18411 + - uid: 16796 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 45.5,-34.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18412 + - 18411 + - uid: 16797 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 44.5,-32.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18412 + - 18411 + - uid: 16798 + components: + - type: Transform + pos: 46.5,-27.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18412 + - 18411 + - uid: 16799 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.5,-29.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18413 + - uid: 16800 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,-32.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18413 + - uid: 16801 + components: + - type: Transform + pos: 28.5,-27.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18413 + - uid: 16802 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,-29.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18413 + - uid: 16803 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 23.5,-31.5 + parent: 2 + - uid: 16804 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,-32.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18414 + - uid: 16805 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,-29.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18414 + - uid: 16806 + components: + - type: Transform + pos: 5.5,-18.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18415 + - uid: 16807 + components: + - type: Transform + pos: 9.5,-18.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18416 + - uid: 16808 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,-22.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18417 + - uid: 16809 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,-26.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18417 + - uid: 16810 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,-22.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18417 + - uid: 16811 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,-26.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18417 + - uid: 16812 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,-21.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18418 + - uid: 16813 + components: + - type: Transform + pos: 15.5,-22.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18418 + - uid: 16814 + components: + - type: Transform + pos: 21.5,-22.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18418 + - uid: 16815 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.5,-28.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18418 + - uid: 16816 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,-28.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18418 + - uid: 16817 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,-32.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18418 + - uid: 16818 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,-28.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18418 + - uid: 16819 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,-25.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18419 + - uid: 16820 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,-25.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18419 + - uid: 16821 + components: + - type: Transform + pos: 35.5,-23.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18419 + - uid: 16822 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,-25.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18419 + - uid: 16823 + components: + - type: Transform + pos: 40.5,-20.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18419 + - uid: 16824 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 36.5,-19.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18419 + - uid: 16825 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-29.5 + parent: 2 + - uid: 16826 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-25.5 + parent: 2 + - uid: 16827 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-17.5 + parent: 2 + - uid: 16828 + components: + - type: Transform + pos: 6.5,-39.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18421 + - uid: 16829 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-40.5 + parent: 2 + - uid: 16830 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-34.5 + parent: 2 + - uid: 16831 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-48.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18422 + - uid: 16832 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-46.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18422 + - uid: 16833 + components: + - type: Transform + pos: 7.5,-44.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18422 + - uid: 16834 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-49.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18424 + - uid: 16835 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,-50.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18422 + - uid: 16836 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,-55.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18422 + - uid: 16837 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 12.5,-55.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18423 + - uid: 16838 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,-52.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18423 + - uid: 16839 + components: + - type: Transform + pos: 14.5,44.5 + parent: 2 + - uid: 16840 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 42.5,44.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18373 + - uid: 16841 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,-26.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18418 + - uid: 16842 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,24.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18342 + - uid: 16843 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,-58.5 + parent: 2 + - uid: 16844 + components: + - type: Transform + pos: 3.5,-52.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18426 + - uid: 16845 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,-58.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18426 + - uid: 16846 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,-60.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18428 + - uid: 16847 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-60.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18428 + - uid: 16848 + components: + - type: Transform + pos: -4.5,-55.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18428 + - uid: 16849 + components: + - type: Transform + pos: -2.5,-55.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18428 + - uid: 16850 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-58.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18428 + - uid: 16851 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -17.5,-62.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18429 + - uid: 16852 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,-62.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18429 + - uid: 16853 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,-57.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18429 + - uid: 16854 + components: + - type: Transform + pos: -14.5,-55.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18429 + - uid: 16855 + components: + - type: Transform + pos: -10.5,-55.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18429 + - uid: 16856 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,-59.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18429 + - uid: 16857 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,-66.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18430 + - uid: 16858 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,-65.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18430 + - uid: 16859 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,-69.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18430 + - uid: 16860 + components: + - type: Transform + pos: 10.5,-62.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18430 + - uid: 16861 + components: + - type: Transform + pos: 14.5,-62.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18430 + - uid: 16862 + components: + - type: Transform + pos: -6.5,-62.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18427 + - uid: 16863 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,-65.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18427 + - uid: 16864 + components: + - type: Transform + pos: -0.5,-62.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18427 + - uid: 16865 + components: + - type: Transform + pos: 5.5,-62.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18427 + - uid: 16866 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,-66.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18427 + - uid: 16867 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,-73.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18427 + - uid: 16868 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,-73.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18427 + - uid: 16869 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-76.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18427 + - uid: 16870 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,-76.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18427 + - uid: 16871 + components: + - type: Transform + pos: 23.5,-39.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18420 + - uid: 16872 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,-43.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18420 + - uid: 16873 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,-45.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18420 + - uid: 16874 + components: + - type: Transform + pos: 20.5,-39.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18420 + - uid: 16875 + components: + - type: Transform + pos: 27.5,-39.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18420 + - uid: 16876 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 12.5,-48.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18420 + - uid: 16877 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,-56.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18431 + - uid: 16878 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,-56.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18431 + - uid: 16879 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,-52.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18431 + - uid: 16880 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 28.5,-56.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18431 + - uid: 16881 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,-60.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18431 + - uid: 16882 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,-60.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18431 + - uid: 16883 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,-64.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18431 + - uid: 16884 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,-64.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18431 + - uid: 16885 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 17.5,-51.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18431 + - uid: 16886 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,-45.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18420 + - uid: 16887 + components: + - type: Transform + pos: 36.5,-48.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18425 + - uid: 16888 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,-45.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18433 + - uid: 16889 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,21.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18434 + - uid: 16890 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,22.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18434 + - uid: 16891 + components: + - type: Transform + pos: 46.5,-14.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18377 + - uid: 16892 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,-12.5 + parent: 2 + - uid: 16893 + components: + - type: Transform + pos: 46.5,-6.5 + parent: 2 + - uid: 16894 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,-4.5 + parent: 2 +- proto: PoweredlightEmpty + entities: + - uid: 16895 + components: + - type: Transform + pos: 16.5,-30.5 + parent: 2 + - uid: 16896 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,-32.5 + parent: 2 +- proto: PoweredlightLED + entities: + - uid: 16897 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.5,32.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18376 + - uid: 16898 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 39.5,32.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18376 + - uid: 16899 + components: + - type: Transform + pos: 33.5,41.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18376 + - uid: 16900 + components: + - type: Transform + pos: 39.5,41.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18376 + - uid: 16901 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,77.5 + parent: 2 + - uid: 16902 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,77.5 + parent: 2 +- proto: PoweredLightPostSmall + entities: + - uid: 16903 + components: + - type: Transform + pos: -0.5,6.5 + parent: 2 + - uid: 16904 + components: + - type: Transform + pos: 2.5,6.5 + parent: 2 + - uid: 16905 + components: + - type: Transform + pos: -0.5,-4.5 + parent: 2 + - uid: 16906 + components: + - type: Transform + pos: 2.5,-4.5 + parent: 2 + - uid: 16907 + components: + - type: Transform + pos: 7.5,7.5 + parent: 2 + - uid: 16908 + components: + - type: Transform + pos: -5.5,7.5 + parent: 2 + - uid: 16909 + components: + - type: Transform + pos: -5.5,-5.5 + parent: 2 + - uid: 16910 + components: + - type: Transform + pos: 7.5,-5.5 + parent: 2 + - uid: 16911 + components: + - type: Transform + pos: -54.5,-55.5 + parent: 2 + - uid: 16912 + components: + - type: Transform + pos: -54.5,-49.5 + parent: 2 + - uid: 16913 + components: + - type: Transform + pos: -64.5,-56.5 + parent: 2 + - uid: 16914 + components: + - type: Transform + pos: -69.5,-55.5 + parent: 2 + - uid: 16915 + components: + - type: Transform + pos: -69.5,-49.5 + parent: 2 + - uid: 16916 + components: + - type: Transform + pos: -71.5,-51.5 + parent: 2 + - uid: 16917 + components: + - type: Transform + pos: -74.5,-53.5 + parent: 2 + - uid: 16918 + components: + - type: Transform + pos: -74.5,-51.5 + parent: 2 + - uid: 16919 + components: + - type: Transform + pos: -80.5,-45.5 + parent: 2 + - uid: 16920 + components: + - type: Transform + pos: -80.5,-59.5 + parent: 2 + - uid: 16921 + components: + - type: Transform + pos: -87.5,-52.5 + parent: 2 + - uid: 16922 + components: + - type: Transform + pos: -16.5,-71.5 + parent: 2 + - uid: 16923 + components: + - type: Transform + pos: 22.5,-53.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18431 + - uid: 16924 + components: + - type: Transform + pos: 27.5,-50.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18431 + - uid: 16925 + components: + - type: Transform + pos: 27.5,-46.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18420 + - uid: 16926 + components: + - type: Transform + pos: 22.5,-42.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18420 + - uid: 16927 + components: + - type: Transform + pos: 27.5,-42.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18420 + - uid: 16928 + components: + - type: Transform + pos: 22.5,-46.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18420 + - uid: 16929 + components: + - type: Transform + pos: 16.5,-42.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18420 + - uid: 16930 + components: + - type: Transform + pos: 16.5,-46.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18420 + - uid: 16931 + components: + - type: Transform + pos: -12.5,-74.5 + parent: 2 + - uid: 16932 + components: + - type: Transform + pos: 13.5,-74.5 + parent: 2 + - uid: 16933 + components: + - type: Transform + pos: -9.5,-63.5 + parent: 2 +- proto: PoweredlightSodium + entities: + - uid: 16934 + components: + - type: Transform + pos: -44.5,-15.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18327 + - uid: 16935 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -44.5,-23.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18327 +- proto: PoweredSmallLight + entities: + - uid: 256 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -45.5,-27.5 + parent: 2 + - uid: 692 + components: + - type: Transform + pos: -45.5,-25.5 + parent: 2 + - uid: 8813 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,2.5 + parent: 2 + - type: DeviceLinkSink + invokeCounter: 1 + links: + - 18346 + - uid: 10913 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 37.5,9.5 + parent: 2 + - type: DeviceLinkSink + invokeCounter: 1 + links: + - 18346 + - uid: 16936 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,-66.5 + parent: 2 + - uid: 16937 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,48.5 + parent: 2 + - uid: 16938 + components: + - type: Transform + pos: 43.5,0.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18347 + - uid: 16939 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,-58.5 + parent: 2 + - uid: 16940 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,5.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18344 + - uid: 16941 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,6.5 + parent: 2 + - uid: 16942 + components: + - type: Transform + pos: -23.5,-8.5 + parent: 2 + - uid: 16943 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 13.5,-3.5 + parent: 2 + - uid: 16944 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,-12.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18432 + - uid: 16945 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.5,7.5 + parent: 2 + - uid: 16946 + components: + - type: Transform + pos: -21.5,12.5 + parent: 2 + - uid: 16947 + components: + - type: Transform + pos: -27.5,13.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18320 + - uid: 16948 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -27.5,10.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18320 + - uid: 16949 + components: + - type: Transform + pos: -39.5,-25.5 + parent: 2 + - uid: 16952 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -38.5,-31.5 + parent: 2 + - uid: 16953 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -38.5,-31.5 + parent: 2 + - uid: 16954 + components: + - type: Transform + pos: -11.5,-30.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18335 + - uid: 16955 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,-36.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18335 + - uid: 16956 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,-39.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18335 + - uid: 16957 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,-42.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18335 + - uid: 16958 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,-45.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18335 + - uid: 16959 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,-48.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18335 + - uid: 16960 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,-42.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18335 + - uid: 16961 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,-48.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18335 + - uid: 16962 + components: + - type: Transform + pos: -39.5,-45.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18350 + - uid: 16963 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,-47.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18350 + - uid: 16964 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.5,-43.5 + parent: 2 + - uid: 16965 + components: + - type: Transform + pos: -34.5,-54.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18351 + - uid: 16966 + components: + - type: Transform + pos: -36.5,-62.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18352 + - uid: 16967 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,-62.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18353 + - uid: 16968 + components: + - type: Transform + pos: -32.5,-58.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18353 + - uid: 16969 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,-63.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18353 + - uid: 16970 + components: + - type: Transform + pos: -26.5,-66.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18353 + - uid: 16971 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,-67.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18353 + - uid: 16972 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,-53.5 + parent: 2 + - uid: 16973 + components: + - type: Transform + pos: -11.5,-51.5 + parent: 2 + - uid: 16974 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,-52.5 + parent: 2 + - uid: 16975 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,-40.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18337 + - uid: 16976 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,-4.5 + parent: 2 + - uid: 16977 + components: + - type: Transform + pos: 24.5,-14.5 + parent: 2 + - uid: 16978 + components: + - type: Transform + pos: 46.5,24.5 + parent: 2 + - uid: 16979 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 48.5,23.5 + parent: 2 + - uid: 16980 + components: + - type: Transform + pos: 40.5,24.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18363 + - uid: 16981 + components: + - type: Transform + pos: 18.5,27.5 + parent: 2 + - uid: 16982 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 13.5,33.5 + parent: 2 + - uid: 16983 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,44.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18370 + - uid: 16984 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 23.5,44.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18370 + - uid: 16985 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,35.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18372 + - uid: 16986 + components: + - type: Transform + pos: 24.5,40.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18371 + - uid: 16987 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 28.5,41.5 + parent: 2 + - uid: 16988 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,41.5 + parent: 2 + - uid: 16989 + components: + - type: Transform + pos: 46.5,39.5 + parent: 2 + - uid: 16990 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,32.5 + parent: 2 + - uid: 16991 + components: + - type: Transform + pos: -21.5,16.5 + parent: 2 + - uid: 16992 + components: + - type: Transform + pos: -28.5,21.5 + parent: 2 + - uid: 16993 + components: + - type: Transform + pos: -28.5,17.5 + parent: 2 + - uid: 16994 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,23.5 + parent: 2 + - uid: 16995 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,23.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18379 + - uid: 16996 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,23.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18381 + - uid: 16997 + components: + - type: Transform + pos: -11.5,43.5 + parent: 2 + - uid: 16998 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,41.5 + parent: 2 + - uid: 16999 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,41.5 + parent: 2 + - uid: 17000 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -28.5,41.5 + parent: 2 + - uid: 17001 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -28.5,41.5 + parent: 2 + - uid: 17002 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,39.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18393 + - uid: 17003 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,36.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18392 + - uid: 17004 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,33.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18391 + - uid: 17005 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,33.5 + parent: 2 + - uid: 17006 + components: + - type: Transform + pos: -4.5,45.5 + parent: 2 + - uid: 17007 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,46.5 + parent: 2 + - uid: 17008 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,51.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18399 + - uid: 17009 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 13.5,49.5 + parent: 2 + - uid: 17010 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,48.5 + parent: 2 + - uid: 17011 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,32.5 + parent: 2 + - uid: 17012 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,75.5 + parent: 2 + - uid: 17013 + components: + - type: Transform + pos: 14.5,-8.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18404 + - uid: 17014 + components: + - type: Transform + pos: 19.5,-8.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18404 + - uid: 17015 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 39.5,-0.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18346 + - uid: 17016 + components: + - type: Transform + pos: 43.5,-36.5 + parent: 2 + - uid: 17017 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,9.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18346 + - uid: 17018 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 37.5,5.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18346 + - uid: 17019 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,-61.5 + parent: 2 + - uid: 17020 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,-58.5 + parent: 2 + - uid: 17021 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-66.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18427 + - uid: 17022 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-66.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18427 + - uid: 17023 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-70.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18427 + - uid: 17024 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,-70.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18427 + - uid: 17025 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-52.5 + parent: 2 + - uid: 17026 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,-60.5 + parent: 2 + - uid: 17027 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,-55.5 + parent: 2 + - uid: 17028 + components: + - type: Transform + pos: 10.5,22.5 + parent: 2 + - uid: 17029 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 16.5,-58.5 + parent: 2 + - uid: 17030 + components: + - type: Transform + pos: 17.5,-61.5 + parent: 2 + - uid: 17031 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,-62.5 + parent: 2 + - uid: 17032 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,-58.5 + parent: 2 + - uid: 17033 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,-54.5 + parent: 2 + - uid: 17034 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 16.5,-54.5 + parent: 2 + - uid: 17035 + components: + - type: Transform + pos: 26.5,-72.5 + parent: 2 + - uid: 17036 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,-66.5 + parent: 2 + - uid: 17037 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,-28.5 + parent: 2 + - uid: 17038 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 40.5,-57.5 + parent: 2 + - uid: 17039 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 40.5,-50.5 + parent: 2 + - uid: 17040 + components: + - type: Transform + pos: 43.5,-46.5 + parent: 2 + - uid: 17041 + components: + - type: Transform + pos: 40.5,-42.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18433 + - uid: 17042 + components: + - type: Transform + pos: 46.5,-36.5 + parent: 2 + - uid: 17043 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 39.5,-40.5 + parent: 2 + - uid: 17044 + components: + - type: Transform + pos: 35.5,-36.5 + parent: 2 + - uid: 17045 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,-4.5 + parent: 2 + - uid: 17046 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,-69.5 + parent: 2 + - uid: 17047 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 26.5,-69.5 + parent: 2 +- proto: PoweredSmallLightEmpty + entities: + - uid: 17048 + components: + - type: Transform + pos: 40.5,-36.5 + parent: 2 + - uid: 17049 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,-12.5 + parent: 2 + - uid: 17050 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,-33.5 + parent: 2 + - uid: 17051 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,-28.5 + parent: 2 + - uid: 17052 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,-33.5 + parent: 2 + - uid: 17053 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,-40.5 + parent: 2 + - uid: 17054 + components: + - type: Transform + pos: 33.5,-36.5 + parent: 2 + - uid: 17055 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,-37.5 + parent: 2 + - uid: 17056 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,-37.5 + parent: 2 +- proto: Protolathe + entities: + - uid: 17063 + components: + - type: Transform + pos: -36.5,-1.5 + parent: 2 + - uid: 17064 + components: + - type: Transform + pos: -33.5,-27.5 + parent: 2 + - uid: 17065 + components: + - type: Transform + pos: -22.5,-18.5 + parent: 2 + - uid: 17066 + components: + - type: Transform + pos: 0.5,-48.5 + parent: 2 + - uid: 17067 + components: + - type: Transform + pos: 27.5,-39.5 + parent: 2 +- proto: ProximitySensor + entities: + - uid: 17068 + components: + - type: Transform + pos: -19.348927,-22.464745 + parent: 2 + - uid: 17069 + components: + - type: Transform + pos: -19.199741,-22.4088 + parent: 2 + - uid: 17070 + components: + - type: Transform + pos: -36.75127,-52.490677 + parent: 2 + - uid: 17071 + components: + - type: Transform + pos: -36.608303,-52.34149 + parent: 2 + - uid: 17072 + components: + - type: Transform + pos: -36.3348,-52.509327 + parent: 2 + - uid: 17073 + components: + - type: Transform + pos: -36.32237,-52.105286 + parent: 2 +- proto: Rack + entities: + - uid: 17074 + components: + - type: Transform + pos: 10.5,-59.5 + parent: 2 + - uid: 17075 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,27.5 + parent: 2 + - uid: 17076 + components: + - type: Transform + pos: -26.5,-56.5 + parent: 2 + - uid: 17077 + components: + - type: Transform + pos: -17.5,-4.5 + parent: 2 + - uid: 17078 + components: + - type: Transform + pos: -7.5,12.5 + parent: 2 + - uid: 17079 + components: + - type: Transform + pos: -6.5,12.5 + parent: 2 + - uid: 17080 + components: + - type: Transform + pos: -6.5,14.5 + parent: 2 + - uid: 17081 + components: + - type: Transform + pos: 8.5,-10.5 + parent: 2 + - uid: 17082 + components: + - type: Transform + pos: -6.5,-10.5 + parent: 2 + - uid: 17083 + components: + - type: Transform + pos: -6.5,-14.5 + parent: 2 + - uid: 17084 + components: + - type: Transform + pos: -14.5,-12.5 + parent: 2 + - uid: 17085 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -25.5,13.5 + parent: 2 + - uid: 17086 + components: + - type: Transform + pos: -38.5,-19.5 + parent: 2 + - uid: 17087 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,-22.5 + parent: 2 + - uid: 17088 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,-24.5 + parent: 2 + - uid: 17089 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -41.5,-25.5 + parent: 2 + - uid: 17091 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,-22.5 + parent: 2 + - uid: 17092 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,-23.5 + parent: 2 + - uid: 17093 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,-21.5 + parent: 2 + - uid: 17094 + components: + - type: Transform + pos: -4.5,-24.5 + parent: 2 + - uid: 17095 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -37.5,-35.5 + parent: 2 + - uid: 17096 + components: + - type: Transform + pos: -19.5,-37.5 + parent: 2 + - uid: 17097 + components: + - type: Transform + pos: -23.5,-44.5 + parent: 2 + - uid: 17098 + components: + - type: Transform + pos: -19.5,-47.5 + parent: 2 + - uid: 17099 + components: + - type: Transform + pos: -29.5,-51.5 + parent: 2 + - uid: 17100 + components: + - type: Transform + pos: -29.5,-51.5 + parent: 2 + - uid: 17101 + components: + - type: Transform + pos: -34.5,-62.5 + parent: 2 + - uid: 17102 + components: + - type: Transform + pos: -36.5,-62.5 + parent: 2 + - uid: 17103 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,-66.5 + parent: 2 + - uid: 17104 + components: + - type: Transform + pos: -11.5,-53.5 + parent: 2 + - uid: 17105 + components: + - type: Transform + pos: -7.5,-51.5 + parent: 2 + - uid: 17106 + components: + - type: Transform + pos: -6.5,-51.5 + parent: 2 + - uid: 17107 + components: + - type: Transform + pos: -2.5,-40.5 + parent: 2 + - uid: 17108 + components: + - type: Transform + pos: -2.5,-39.5 + parent: 2 + - uid: 17109 + components: + - type: Transform + pos: -4.5,-39.5 + parent: 2 + - uid: 17110 + components: + - type: Transform + pos: -4.5,-40.5 + parent: 2 + - uid: 17111 + components: + - type: Transform + pos: -4.5,-37.5 + parent: 2 + - uid: 17112 + components: + - type: Transform + pos: -4.5,-36.5 + parent: 2 + - uid: 17113 + components: + - type: Transform + pos: -4.5,-35.5 + parent: 2 + - uid: 17114 + components: + - type: Transform + pos: 22.5,-11.5 + parent: 2 + - uid: 17115 + components: + - type: Transform + pos: 24.5,-10.5 + parent: 2 + - uid: 17116 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,16.5 + parent: 2 + - uid: 17117 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 16.5,27.5 + parent: 2 + - uid: 17118 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,27.5 + parent: 2 + - uid: 17119 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 20.5,25.5 + parent: 2 + - uid: 17120 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 20.5,27.5 + parent: 2 + - uid: 17121 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 26.5,25.5 + parent: 2 + - uid: 17122 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,27.5 + parent: 2 + - uid: 17123 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -18.5,14.5 + parent: 2 + - uid: 17124 + components: + - type: Transform + pos: -23.5,18.5 + parent: 2 + - uid: 17125 + components: + - type: Transform + pos: -23.5,21.5 + parent: 2 + - uid: 17126 + components: + - type: Transform + pos: -29.5,21.5 + parent: 2 + - uid: 17127 + components: + - type: Transform + pos: -14.5,40.5 + parent: 2 + - uid: 17128 + components: + - type: Transform + pos: -14.5,38.5 + parent: 2 + - uid: 17129 + components: + - type: Transform + pos: -13.5,40.5 + parent: 2 + - uid: 17130 + components: + - type: Transform + pos: -12.5,40.5 + parent: 2 + - uid: 17131 + components: + - type: Transform + pos: -15.5,40.5 + parent: 2 + - uid: 17132 + components: + - type: Transform + pos: -11.5,48.5 + parent: 2 + - uid: 17133 + components: + - type: Transform + pos: 8.5,84.5 + parent: 2 + - uid: 17134 + components: + - type: Transform + pos: 7.5,85.5 + parent: 2 + - uid: 17135 + components: + - type: Transform + pos: -6.5,75.5 + parent: 2 + - uid: 17136 + components: + - type: Transform + pos: 47.5,-29.5 + parent: 2 + - uid: 17137 + components: + - type: Transform + pos: 46.5,-29.5 + parent: 2 + - uid: 17138 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-27.5 + parent: 2 + - uid: 17139 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,-29.5 + parent: 2 + - uid: 17140 + components: + - type: Transform + pos: 15.5,-36.5 + parent: 2 + - uid: 17141 + components: + - type: Transform + pos: 24.5,-34.5 + parent: 2 + - uid: 17142 + components: + - type: Transform + pos: 25.5,-34.5 + parent: 2 + - uid: 17143 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 14.5,-52.5 + parent: 2 + - uid: 17144 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 14.5,-51.5 + parent: 2 + - uid: 17145 + components: + - type: Transform + pos: -9.5,-55.5 + parent: 2 + - uid: 17146 + components: + - type: Transform + pos: -16.5,-56.5 + parent: 2 + - uid: 17147 + components: + - type: Transform + pos: 29.5,-39.5 + parent: 2 + - uid: 17148 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -25.5,-39.5 + parent: 2 + - uid: 17149 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,-39.5 + parent: 2 + - uid: 17150 + components: + - type: Transform + pos: -36.5,-58.5 + parent: 2 + - uid: 17151 + components: + - type: Transform + pos: -36.5,-60.5 + parent: 2 + - uid: 17152 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-35.5 + parent: 2 + - uid: 17153 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-35.5 + parent: 2 + - uid: 17154 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-37.5 + parent: 2 + - uid: 17155 + components: + - type: Transform + pos: -25.5,-56.5 + parent: 2 + - uid: 17156 + components: + - type: Transform + pos: 6.5,-37.5 + parent: 2 + - uid: 17157 + components: + - type: Transform + pos: 7.5,-37.5 + parent: 2 + - uid: 17158 + components: + - type: Transform + pos: -2.5,-50.5 + parent: 2 + - uid: 17159 + components: + - type: Transform + pos: 36.5,-36.5 + parent: 2 + - uid: 17160 + components: + - type: Transform + pos: 28.5,-10.5 + parent: 2 + - uid: 17161 + components: + - type: Transform + pos: 7.5,-34.5 + parent: 2 + - uid: 17162 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,-60.5 + parent: 2 +- proto: RadiationCollectorNoTank + entities: + - uid: 17163 + components: + - type: Transform + pos: 3.5,-68.5 + parent: 2 + - uid: 17164 + components: + - type: Transform + pos: 3.5,-70.5 + parent: 2 + - uid: 17165 + components: + - type: Transform + pos: -2.5,-70.5 + parent: 2 + - uid: 17166 + components: + - type: Transform + pos: -2.5,-68.5 + parent: 2 + - uid: 17169 + components: + - type: Transform + pos: 2.5,-68.5 + parent: 2 + - uid: 17170 + components: + - type: Transform + pos: 2.5,-70.5 + parent: 2 + - uid: 17171 + components: + - type: Transform + pos: -1.5,-68.5 + parent: 2 + - uid: 17172 + components: + - type: Transform + pos: -1.5,-70.5 + parent: 2 +- proto: RadioHandheld + entities: + - uid: 17173 + components: + - type: Transform + pos: -36.28194,-18.423845 + parent: 2 + - uid: 17174 + components: + - type: Transform + pos: -36.36586,-18.283985 + parent: 2 + - uid: 17175 + components: + - type: Transform + pos: -30.711529,-34.43418 + parent: 2 + - uid: 17176 + components: + - type: Transform + pos: 29.705189,-4.5692544 + parent: 2 + - uid: 17177 + components: + - type: Transform + pos: 43.537224,-18.265045 + parent: 2 + - uid: 17178 + components: + - type: Transform + pos: -6.4682493,78.6944 + parent: 2 + - uid: 17179 + components: + - type: Transform + pos: 4.337897,-18.688145 + parent: 2 +- proto: Railing + entities: + - uid: 17180 + components: + - type: Transform + pos: -7.5,-0.5 + parent: 2 + - uid: 17181 + components: + - type: Transform + pos: -6.5,-0.5 + parent: 2 + - uid: 17182 + components: + - type: Transform + pos: -5.5,-0.5 + parent: 2 + - uid: 17183 + components: + - type: Transform + pos: -4.5,-0.5 + parent: 2 + - uid: 17184 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,-1.5 + parent: 2 + - uid: 17185 + components: + - type: Transform + pos: -1.5,-3.5 + parent: 2 + - uid: 17186 + components: + - type: Transform + pos: 3.5,-3.5 + parent: 2 + - uid: 17187 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,-1.5 + parent: 2 + - uid: 17188 + components: + - type: Transform + pos: 6.5,-0.5 + parent: 2 + - uid: 17189 + components: + - type: Transform + pos: 7.5,-0.5 + parent: 2 + - uid: 17190 + components: + - type: Transform + pos: 8.5,-0.5 + parent: 2 + - uid: 17191 + components: + - type: Transform + pos: 9.5,-0.5 + parent: 2 + - uid: 17192 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,2.5 + parent: 2 + - uid: 17193 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,2.5 + parent: 2 + - uid: 17194 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,2.5 + parent: 2 + - uid: 17195 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,2.5 + parent: 2 + - uid: 17196 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,3.5 + parent: 2 + - uid: 17197 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,6.5 + parent: 2 + - uid: 17198 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,7.5 + parent: 2 + - uid: 17199 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,8.5 + parent: 2 + - uid: 17200 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,9.5 + parent: 2 + - uid: 17201 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,9.5 + parent: 2 + - uid: 17202 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,8.5 + parent: 2 + - uid: 17203 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,7.5 + parent: 2 + - uid: 17204 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,6.5 + parent: 2 + - uid: 17205 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,3.5 + parent: 2 + - uid: 17206 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,2.5 + parent: 2 + - uid: 17207 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,2.5 + parent: 2 + - uid: 17208 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,2.5 + parent: 2 + - uid: 17209 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,2.5 + parent: 2 + - uid: 17210 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -42.5,11.5 + parent: 2 + - uid: 17211 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -43.5,10.5 + parent: 2 + - uid: 17212 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -43.5,9.5 + parent: 2 + - uid: 17213 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -43.5,8.5 + parent: 2 + - uid: 17214 + components: + - type: Transform + pos: -42.5,-4.5 + parent: 2 + - uid: 17215 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -42.5,3.5 + parent: 2 + - uid: 17216 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -29.5,-10.5 + parent: 2 + - uid: 17217 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -29.5,-11.5 + parent: 2 + - uid: 17218 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -29.5,-12.5 + parent: 2 + - uid: 17219 + components: + - type: Transform + pos: -38.5,-63.5 + parent: 2 + - uid: 17220 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -39.5,-62.5 + parent: 2 + - uid: 17221 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -39.5,-60.5 + parent: 2 + - uid: 17222 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -39.5,-59.5 + parent: 2 + - uid: 17223 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -39.5,-58.5 + parent: 2 + - uid: 17224 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -39.5,-57.5 + parent: 2 + - uid: 17225 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -39.5,-56.5 + parent: 2 + - uid: 17226 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -39.5,-55.5 + parent: 2 + - uid: 17227 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -39.5,-54.5 + parent: 2 + - uid: 17228 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-40.5 + parent: 2 + - uid: 17229 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-39.5 + parent: 2 + - uid: 17230 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,-39.5 + parent: 2 + - uid: 17231 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,-40.5 + parent: 2 + - uid: 17232 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,11.5 + parent: 2 + - uid: 17233 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,10.5 + parent: 2 + - uid: 17234 + components: + - type: Transform + pos: 33.5,9.5 + parent: 2 + - uid: 17235 + components: + - type: Transform + pos: 34.5,9.5 + parent: 2 + - uid: 17236 + components: + - type: Transform + pos: 35.5,9.5 + parent: 2 + - uid: 17237 + components: + - type: Transform + pos: 40.5,24.5 + parent: 2 + - uid: 17238 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,43.5 + parent: 2 + - uid: 17239 + components: + - type: Transform + pos: -13.5,44.5 + parent: 2 + - uid: 17240 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,-60.5 + parent: 2 + - uid: 17241 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,-61.5 + parent: 2 + - uid: 17242 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,-55.5 + parent: 2 + - uid: 17243 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,-65.5 + parent: 2 + - uid: 17244 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,-66.5 + parent: 2 + - uid: 17245 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,-67.5 + parent: 2 + - uid: 17246 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,-68.5 + parent: 2 + - uid: 17247 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,-69.5 + parent: 2 + - uid: 17248 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,-70.5 + parent: 2 + - uid: 17249 + components: + - type: Transform + pos: -15.5,-71.5 + parent: 2 + - uid: 17250 + components: + - type: Transform + pos: -14.5,-71.5 + parent: 2 + - uid: 17251 + components: + - type: Transform + pos: -13.5,-71.5 + parent: 2 + - uid: 17252 + components: + - type: Transform + pos: -12.5,-71.5 + parent: 2 + - uid: 17253 + components: + - type: Transform + pos: -11.5,-71.5 + parent: 2 + - uid: 17254 + components: + - type: Transform + pos: -10.5,-71.5 + parent: 2 + - uid: 17255 + components: + - type: Transform + pos: -9.5,-71.5 + parent: 2 + - uid: 17256 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,-65.5 + parent: 2 + - uid: 17257 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,-66.5 + parent: 2 + - uid: 17258 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,-67.5 + parent: 2 + - uid: 17259 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,-68.5 + parent: 2 + - uid: 17260 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,-69.5 + parent: 2 + - uid: 17261 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,-69.5 + parent: 2 + - uid: 17262 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 22.5,-69.5 + parent: 2 + - uid: 17263 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,-67.5 + parent: 2 + - uid: 17264 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,-67.5 + parent: 2 + - uid: 17265 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,-67.5 + parent: 2 + - uid: 17266 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.5,-67.5 + parent: 2 + - uid: 17267 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 34.5,-67.5 + parent: 2 + - uid: 17268 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-66.5 + parent: 2 + - uid: 17269 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,-60.5 + parent: 2 + - uid: 17270 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,-59.5 + parent: 2 + - uid: 17271 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,-58.5 + parent: 2 + - uid: 17272 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,-56.5 + parent: 2 + - uid: 17273 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,-55.5 + parent: 2 + - uid: 17274 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,-54.5 + parent: 2 + - uid: 17275 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,-53.5 + parent: 2 + - uid: 17276 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,-52.5 + parent: 2 + - uid: 17277 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,-51.5 + parent: 2 + - uid: 17278 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,-50.5 + parent: 2 + - uid: 17279 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 45.5,-45.5 + parent: 2 + - uid: 17280 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 45.5,-46.5 + parent: 2 + - uid: 17281 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,-48.5 + parent: 2 + - uid: 17282 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,-49.5 + parent: 2 + - uid: 17283 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,-47.5 + parent: 2 + - uid: 17284 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,-72.5 + parent: 2 + - uid: 17285 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,-71.5 + parent: 2 + - uid: 17286 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,-70.5 + parent: 2 + - uid: 23107 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.5,-23.5 + parent: 2 + - uid: 23867 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -31.5,-24.5 + parent: 2 + - uid: 23868 + components: + - type: Transform + pos: -31.5,-22.5 + parent: 2 + - uid: 23878 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.5,-20.5 + parent: 2 + - uid: 23879 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -31.5,-21.5 + parent: 2 + - uid: 23880 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,-20.5 + parent: 2 +- proto: RailingCorner + entities: + - uid: 17287 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,3.5 + parent: 2 + - uid: 17288 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-1.5 + parent: 2 + - uid: 17289 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,-1.5 + parent: 2 + - uid: 17290 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,-1.5 + parent: 2 + - uid: 17291 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,3.5 + parent: 2 + - uid: 17292 + components: + - type: Transform + pos: -1.5,3.5 + parent: 2 + - uid: 17293 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,-2.5 + parent: 2 + - uid: 17294 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,-3.5 + parent: 2 + - uid: 17295 + components: + - type: Transform + pos: 4.5,-3.5 + parent: 2 + - uid: 17296 + components: + - type: Transform + pos: 5.5,-2.5 + parent: 2 + - uid: 17297 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,4.5 + parent: 2 + - uid: 17298 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,4.5 + parent: 2 + - uid: 17299 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -43.5,11.5 + parent: 2 + - uid: 17300 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -39.5,-63.5 + parent: 2 + - uid: 17301 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,9.5 + parent: 2 + - uid: 17302 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -16.5,-59.5 + parent: 2 + - uid: 17303 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,-56.5 + parent: 2 + - uid: 17304 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,-71.5 + parent: 2 + - uid: 17305 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,-49.5 + parent: 2 + - uid: 17306 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 43.5,-47.5 + parent: 2 + - uid: 17307 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,-69.5 + parent: 2 +- proto: RailingCornerSmall + entities: + - uid: 17308 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,-1.5 + parent: 2 + - uid: 17309 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-0.5 + parent: 2 + - uid: 17310 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-0.5 + parent: 2 + - uid: 17311 + components: + - type: Transform + pos: -0.5,-2.5 + parent: 2 + - uid: 17312 + components: + - type: Transform + pos: -0.5,-2.5 + parent: 2 + - uid: 17313 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-2.5 + parent: 2 + - uid: 17314 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-1.5 + parent: 2 + - uid: 17315 + components: + - type: Transform + pos: 3.5,-2.5 + parent: 2 + - uid: 17316 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-2.5 + parent: 2 + - uid: 17317 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-2.5 + parent: 2 + - uid: 17318 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-1.5 + parent: 2 + - uid: 17319 + components: + - type: Transform + pos: 4.5,-1.5 + parent: 2 + - uid: 17320 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,-0.5 + parent: 2 + - uid: 17321 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,-0.5 + parent: 2 + - uid: 17322 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,-0.5 + parent: 2 + - uid: 17323 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,3.5 + parent: 2 + - uid: 17324 + components: + - type: Transform + pos: 4.5,2.5 + parent: 2 + - uid: 17325 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,2.5 + parent: 2 + - uid: 17326 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,4.5 + parent: 2 + - uid: 17327 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,4.5 + parent: 2 + - uid: 17328 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,4.5 + parent: 2 + - uid: 17329 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,3.5 + parent: 2 + - uid: 17330 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,3.5 + parent: 2 + - uid: 17331 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,4.5 + parent: 2 + - uid: 17332 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,4.5 + parent: 2 + - uid: 17333 + components: + - type: Transform + pos: -0.5,3.5 + parent: 2 + - uid: 17334 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,3.5 + parent: 2 + - uid: 17335 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,3.5 + parent: 2 + - uid: 17336 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,2.5 + parent: 2 + - uid: 17337 + components: + - type: Transform + pos: -1.5,2.5 + parent: 2 + - uid: 17338 + components: + - type: Transform + pos: -1.5,2.5 + parent: 2 + - uid: 17339 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,-0.5 + parent: 2 + - uid: 17340 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-0.5 + parent: 2 + - uid: 17341 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-2.5 + parent: 2 + - uid: 17342 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-3.5 + parent: 2 + - uid: 17343 + components: + - type: Transform + pos: -0.5,-4.5 + parent: 2 + - uid: 17344 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-7.5 + parent: 2 + - uid: 17345 + components: + - type: Transform + pos: -0.5,-8.5 + parent: 2 + - uid: 17346 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,-8.5 + parent: 2 + - uid: 17347 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,-7.5 + parent: 2 + - uid: 17348 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,-6.5 + parent: 2 + - uid: 17349 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,-5.5 + parent: 2 + - uid: 17350 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,-3.5 + parent: 2 + - uid: 17351 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,-2.5 + parent: 2 + - uid: 17352 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-8.5 + parent: 2 + - uid: 17353 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-7.5 + parent: 2 + - uid: 17354 + components: + - type: Transform + pos: 4.5,-8.5 + parent: 2 + - uid: 17355 + components: + - type: Transform + pos: 5.5,-7.5 + parent: 2 + - uid: 17356 + components: + - type: Transform + pos: 7.5,-6.5 + parent: 2 + - uid: 17357 + components: + - type: Transform + pos: 8.5,-5.5 + parent: 2 + - uid: 17358 + components: + - type: Transform + pos: 9.5,-3.5 + parent: 2 + - uid: 17359 + components: + - type: Transform + pos: 10.5,-2.5 + parent: 2 + - uid: 17360 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,-0.5 + parent: 2 + - uid: 17361 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,-0.5 + parent: 2 + - uid: 17362 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,-2.5 + parent: 2 + - uid: 17363 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-3.5 + parent: 2 + - uid: 17364 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-4.5 + parent: 2 + - uid: 17365 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,2.5 + parent: 2 + - uid: 17366 + components: + - type: Transform + pos: -3.5,2.5 + parent: 2 + - uid: 17367 + components: + - type: Transform + pos: -2.5,4.5 + parent: 2 + - uid: 17368 + components: + - type: Transform + pos: -0.5,5.5 + parent: 2 + - uid: 17369 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,10.5 + parent: 2 + - uid: 17370 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,10.5 + parent: 2 + - uid: 17371 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,5.5 + parent: 2 + - uid: 17372 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,4.5 + parent: 2 + - uid: 17373 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,2.5 + parent: 2 + - uid: 17374 + components: + - type: Transform + pos: 10.5,2.5 + parent: 2 + - uid: 17375 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,4.5 + parent: 2 + - uid: 17376 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,5.5 + parent: 2 + - uid: 17377 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,7.5 + parent: 2 + - uid: 17378 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,8.5 + parent: 2 + - uid: 17379 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,9.5 + parent: 2 + - uid: 17380 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,10.5 + parent: 2 + - uid: 17381 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,10.5 + parent: 2 + - uid: 17382 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,9.5 + parent: 2 + - uid: 17383 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,8.5 + parent: 2 + - uid: 17384 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,7.5 + parent: 2 + - uid: 17385 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,5.5 + parent: 2 + - uid: 17386 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,4.5 + parent: 2 + - uid: 17387 + components: + - type: Transform + pos: -41.5,11.5 + parent: 2 + - uid: 17388 + components: + - type: Transform + pos: -43.5,7.5 + parent: 2 + - uid: 17389 + components: + - type: Transform + pos: -43.5,7.5 + parent: 2 + - uid: 17390 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,-13.5 + parent: 2 + - uid: 17391 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,44.5 + parent: 2 + - uid: 17392 + components: + - type: Transform + pos: -15.5,-59.5 + parent: 2 + - uid: 17393 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,-56.5 + parent: 2 + - uid: 17394 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,-69.5 + parent: 2 + - uid: 17395 + components: + - type: Transform + pos: 35.5,-67.5 + parent: 2 + - uid: 17396 + components: + - type: Transform + pos: 41.5,-60.5 + parent: 2 + - uid: 17397 + components: + - type: Transform + pos: 43.5,-49.5 + parent: 2 + - uid: 17398 + components: + - type: Transform + pos: 45.5,-47.5 + parent: 2 + - uid: 23871 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,-24.5 + parent: 2 + - uid: 23872 + components: + - type: Transform + pos: -30.5,-24.5 + parent: 2 + - uid: 23873 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,-22.5 + parent: 2 + - uid: 23874 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -32.5,-22.5 + parent: 2 + - uid: 23875 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -32.5,-19.5 + parent: 2 + - uid: 23876 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,-21.5 + parent: 2 + - uid: 23877 + components: + - type: Transform + pos: -30.5,-21.5 + parent: 2 +- proto: RandomArcade + entities: + - uid: 17399 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,8.5 + parent: 2 + - uid: 17400 + components: + - type: Transform + pos: -39.5,37.5 + parent: 2 +- proto: RandomArtifactSpawner + entities: + - uid: 17401 + components: + - type: Transform + pos: -11.5,-31.5 + parent: 2 + - uid: 17402 + components: + - type: Transform + pos: -17.5,-31.5 + parent: 2 +- proto: RandomInstruments + entities: + - uid: 17403 + components: + - type: Transform + pos: -22.5,-31.5 + parent: 2 + - uid: 17404 + components: + - type: Transform + pos: 40.5,14.5 + parent: 2 + - uid: 17405 + components: + - type: Transform + pos: 40.5,14.5 + parent: 2 + - uid: 17406 + components: + - type: Transform + pos: 40.5,14.5 + parent: 2 +- proto: RandomPainting + entities: + - uid: 17407 + components: + - type: Transform + pos: 15.5,45.5 + parent: 2 +- proto: RandomPosterAny + entities: + - uid: 17408 + components: + - type: Transform + pos: 39.5,-37.5 + parent: 2 +- proto: RandomPosterContraband + entities: + - uid: 17409 + components: + - type: Transform + pos: 42.5,11.5 + parent: 2 + - uid: 17410 + components: + - type: Transform + pos: 37.5,11.5 + parent: 2 + - uid: 17411 + components: + - type: Transform + pos: -31.5,33.5 + parent: 2 + - uid: 17412 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,26.5 + parent: 2 + - uid: 17413 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,23.5 + parent: 2 + - uid: 17415 + components: + - type: Transform + pos: 45.5,-36.5 + parent: 2 + - uid: 17416 + components: + - type: Transform + pos: 37.5,-35.5 + parent: 2 + - uid: 17417 + components: + - type: Transform + pos: 32.5,-35.5 + parent: 2 + - uid: 17418 + components: + - type: Transform + pos: 19.5,24.5 + parent: 2 + - uid: 17419 + components: + - type: Transform + pos: 21.5,-7.5 + parent: 2 + - uid: 17420 + components: + - type: Transform + pos: 13.5,-5.5 + parent: 2 + - uid: 17421 + components: + - type: Transform + pos: 6.5,-14.5 + parent: 2 + - uid: 17422 + components: + - type: Transform + pos: -7.5,-17.5 + parent: 2 + - uid: 17423 + components: + - type: Transform + pos: -14.5,-15.5 + parent: 2 + - uid: 17424 + components: + - type: Transform + pos: -12.5,-11.5 + parent: 2 + - uid: 17425 + components: + - type: Transform + pos: -25.5,-9.5 + parent: 2 + - uid: 17426 + components: + - type: Transform + pos: -16.5,-7.5 + parent: 2 + - uid: 17427 + components: + - type: Transform + pos: -16.5,-1.5 + parent: 2 + - uid: 17428 + components: + - type: Transform + pos: -45.5,-28.5 + parent: 2 + - uid: 17429 + components: + - type: Transform + pos: -40.5,-24.5 + parent: 2 + - uid: 17430 + components: + - type: Transform + pos: -37.5,-30.5 + parent: 2 + - uid: 17431 + components: + - type: Transform + pos: -28.5,-60.5 + parent: 2 + - uid: 17432 + components: + - type: Transform + pos: -32.5,-65.5 + parent: 2 + - uid: 17433 + components: + - type: Transform + pos: -23.5,-51.5 + parent: 2 + - uid: 17434 + components: + - type: Transform + pos: -8.5,-51.5 + parent: 2 + - uid: 17435 + components: + - type: Transform + pos: -22.5,-46.5 + parent: 2 + - uid: 17436 + components: + - type: Transform + pos: -5.5,-42.5 + parent: 2 + - uid: 17437 + components: + - type: Transform + pos: 15.5,-33.5 + parent: 2 + - uid: 17438 + components: + - type: Transform + pos: 21.5,-35.5 + parent: 2 + - uid: 17439 + components: + - type: Transform + pos: -14.5,6.5 + parent: 2 + - uid: 17440 + components: + - type: Transform + pos: -21.5,13.5 + parent: 2 + - uid: 17441 + components: + - type: Transform + pos: -26.5,17.5 + parent: 2 + - uid: 17442 + components: + - type: Transform + pos: -28.5,23.5 + parent: 2 + - uid: 17443 + components: + - type: Transform + pos: -22.5,20.5 + parent: 2 + - uid: 20564 + components: + - type: Transform + pos: 13.5,34.5 + parent: 2 +- proto: RandomPosterLegit + entities: + - uid: 15544 + components: + - type: Transform + pos: 21.5,-29.5 + parent: 2 + - uid: 17444 + components: + - type: Transform + pos: 17.5,-1.5 + parent: 2 + - uid: 17445 + components: + - type: Transform + pos: -4.5,11.5 + parent: 2 + - uid: 17446 + components: + - type: Transform + pos: -6.5,10.5 + parent: 2 + - uid: 17447 + components: + - type: Transform + pos: -8.5,7.5 + parent: 2 + - uid: 17448 + components: + - type: Transform + pos: 11.5,6.5 + parent: 2 + - uid: 17449 + components: + - type: Transform + pos: -14.5,9.5 + parent: 2 + - uid: 17450 + components: + - type: Transform + pos: -18.5,11.5 + parent: 2 + - uid: 17451 + components: + - type: Transform + pos: -18.5,10.5 + parent: 2 + - uid: 17452 + components: + - type: Transform + pos: -8.5,12.5 + parent: 2 + - uid: 17453 + components: + - type: Transform + pos: -14.5,-7.5 + parent: 2 + - uid: 17454 + components: + - type: Transform + pos: -22.5,-1.5 + parent: 2 + - uid: 17455 + components: + - type: Transform + pos: -17.5,3.5 + parent: 2 + - uid: 17456 + components: + - type: Transform + pos: -35.5,5.5 + parent: 2 + - uid: 17457 + components: + - type: Transform + pos: -35.5,-20.5 + parent: 2 + - uid: 17458 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 16.5,3.5 + parent: 2 + - uid: 17459 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,3.5 + parent: 2 + - uid: 17460 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,3.5 + parent: 2 + - uid: 17461 + components: + - type: Transform + pos: 31.5,-6.5 + parent: 2 + - uid: 17462 + components: + - type: Transform + pos: 34.5,3.5 + parent: 2 + - uid: 17463 + components: + - type: Transform + pos: 32.5,21.5 + parent: 2 + - uid: 17464 + components: + - type: Transform + pos: 39.5,12.5 + parent: 2 + - uid: 17465 + components: + - type: Transform + pos: 38.5,-1.5 + parent: 2 + - uid: 17466 + components: + - type: Transform + pos: 39.5,31.5 + parent: 2 + - uid: 17467 + components: + - type: Transform + pos: 31.5,37.5 + parent: 2 + - uid: 17468 + components: + - type: Transform + pos: 42.5,-16.5 + parent: 2 + - uid: 17469 + components: + - type: Transform + pos: -1.5,28.5 + parent: 2 + - uid: 17470 + components: + - type: Transform + pos: -31.5,37.5 + parent: 2 + - uid: 17471 + components: + - type: Transform + pos: -29.5,27.5 + parent: 2 + - uid: 17472 + components: + - type: Transform + pos: -32.5,27.5 + parent: 2 + - uid: 17473 + components: + - type: Transform + pos: -26.5,31.5 + parent: 2 + - uid: 17474 + components: + - type: Transform + pos: 3.5,39.5 + parent: 2 + - uid: 17475 + components: + - type: Transform + pos: 26.5,-22.5 + parent: 2 + - uid: 17476 + components: + - type: Transform + pos: 35.5,-18.5 + parent: 2 + - uid: 17477 + components: + - type: Transform + pos: 24.5,-30.5 + parent: 2 + - uid: 17478 + components: + - type: Transform + pos: 3.5,-30.5 + parent: 2 + - uid: 17479 + components: + - type: Transform + pos: 12.5,-39.5 + parent: 2 + - uid: 17480 + components: + - type: Transform + pos: 19.5,-38.5 + parent: 2 + - uid: 17481 + components: + - type: Transform + pos: 25.5,-38.5 + parent: 2 + - uid: 17482 + components: + - type: Transform + pos: -2.5,-49.5 + parent: 2 + - uid: 17483 + components: + - type: Transform + pos: 3.5,-51.5 + parent: 2 + - uid: 17484 + components: + - type: Transform + pos: 27.5,22.5 + parent: 2 + - uid: 17485 + components: + - type: Transform + pos: 48.5,-40.5 + parent: 2 +- proto: RandomSpawner + entities: + - uid: 17486 + components: + - type: Transform + pos: -44.5,16.5 + parent: 2 + - uid: 17487 + components: + - type: Transform + pos: -43.5,16.5 + parent: 2 + - uid: 17488 + components: + - type: Transform + pos: -42.5,16.5 + parent: 2 + - uid: 17489 + components: + - type: Transform + pos: -43.5,16.5 + parent: 2 + - uid: 17490 + components: + - type: Transform + pos: -44.5,16.5 + parent: 2 + - uid: 17491 + components: + - type: Transform + pos: -43.5,16.5 + parent: 2 + - uid: 17492 + components: + - type: Transform + pos: -42.5,16.5 + parent: 2 + - uid: 17493 + components: + - type: Transform + pos: -20.5,-44.5 + parent: 2 + - uid: 17494 + components: + - type: Transform + pos: -20.5,-47.5 + parent: 2 + - uid: 17495 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,-44.5 + parent: 2 + - uid: 17496 + components: + - type: Transform + pos: -27.5,-43.5 + parent: 2 + - uid: 17497 + components: + - type: Transform + pos: -29.5,-51.5 + parent: 2 + - uid: 17498 + components: + - type: Transform + pos: -13.5,-52.5 + parent: 2 + - uid: 17499 + components: + - type: Transform + pos: 24.5,25.5 + parent: 2 + - uid: 17500 + components: + - type: Transform + pos: -17.5,14.5 + parent: 2 + - uid: 17501 + components: + - type: Transform + pos: -17.5,16.5 + parent: 2 + - uid: 17502 + components: + - type: Transform + pos: -33.5,19.5 + parent: 2 + - uid: 17503 + components: + - type: Transform + pos: -28.5,17.5 + parent: 2 + - uid: 17504 + components: + - type: Transform + pos: -27.5,15.5 + parent: 2 + - uid: 17505 + components: + - type: Transform + pos: -29.5,16.5 + parent: 2 + - uid: 17506 + components: + - type: Transform + pos: 34.5,-28.5 + parent: 2 + - uid: 17507 + components: + - type: Transform + pos: 30.5,-36.5 + parent: 2 + - uid: 17508 + components: + - type: Transform + pos: 4.5,-36.5 + parent: 2 + - uid: 17509 + components: + - type: Transform + pos: 34.5,-36.5 + parent: 2 + - uid: 17510 + components: + - type: Transform + pos: 39.5,-39.5 + parent: 2 + - uid: 17511 + components: + - type: Transform + pos: 44.5,-40.5 + parent: 2 + - uid: 17512 + components: + - type: Transform + pos: 46.5,-38.5 + parent: 2 + - uid: 17513 + components: + - type: Transform + pos: 34.5,-39.5 + parent: 2 + - uid: 17514 + components: + - type: Transform + pos: 6.5,-34.5 + parent: 2 + - uid: 17515 + components: + - type: Transform + pos: 8.5,-37.5 + parent: 2 +- proto: RandomSpawner100 + entities: + - uid: 17516 + components: + - type: Transform + pos: -7.5,-10.5 + parent: 2 + - uid: 17517 + components: + - type: Transform + pos: -24.5,-13.5 + parent: 2 + - uid: 17518 + components: + - type: Transform + pos: -23.5,-14.5 + parent: 2 + - uid: 17519 + components: + - type: Transform + pos: 13.5,-4.5 + parent: 2 + - uid: 17520 + components: + - type: Transform + pos: 14.5,-4.5 + parent: 2 + - uid: 17521 + components: + - type: Transform + pos: 14.5,-3.5 + parent: 2 + - uid: 17522 + components: + - type: Transform + pos: -20.5,-35.5 + parent: 2 + - uid: 17523 + components: + - type: Transform + pos: 20.5,-37.5 + parent: 2 + - uid: 17524 + components: + - type: Transform + pos: 19.5,-37.5 + parent: 2 + - uid: 17525 + components: + - type: Transform + pos: 20.5,-36.5 + parent: 2 + - uid: 17526 + components: + - type: Transform + pos: 18.5,-36.5 + parent: 2 +- proto: RandomVendingDrinks + entities: + - uid: 17527 + components: + - type: Transform + pos: -3.5,-2.5 + parent: 2 + - uid: 17528 + components: + - type: Transform + pos: -35.5,-38.5 + parent: 2 + - uid: 17529 + components: + - type: Transform + pos: 33.5,-12.5 + parent: 2 + - uid: 17530 + components: + - type: Transform + pos: 4.5,-39.5 + parent: 2 + - uid: 17531 + components: + - type: Transform + pos: -8.5,-24.5 + parent: 2 +- proto: RandomVendingSnacks + entities: + - uid: 11461 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,9.5 + parent: 2 + - uid: 17532 + components: + - type: Transform + pos: -35.5,-39.5 + parent: 2 + - uid: 17533 + components: + - type: Transform + pos: -29.5,30.5 + parent: 2 + - uid: 17535 + components: + - type: Transform + pos: -6.5,71.5 + parent: 2 + - uid: 17536 + components: + - type: Transform + pos: 5.5,-39.5 + parent: 2 + - uid: 17537 + components: + - type: Transform + pos: 6.5,-39.5 + parent: 2 + - uid: 17538 + components: + - type: Transform + pos: 8.5,-55.5 + parent: 2 + - uid: 17539 + components: + - type: Transform + pos: -10.5,-21.5 + parent: 2 + - uid: 23860 + components: + - type: Transform + pos: 6.5,56.5 + parent: 2 +- proto: RCD + entities: + - uid: 17540 + components: + - type: Transform + pos: 14.512725,-51.577976 + parent: 2 +- proto: RCDAmmo + entities: + - uid: 17541 + components: + - type: Transform + pos: 14.276517,-52.592392 + parent: 2 + - uid: 17542 + components: + - type: Transform + pos: 14.276517,-52.45564 + parent: 2 + - uid: 17543 + components: + - type: Transform + pos: 14.276517,-52.306458 + parent: 2 +- proto: ReagentContainerFlourSmall + entities: + - uid: 17544 + components: + - type: Transform + pos: -42.587147,33.57065 + parent: 2 +- proto: Recycler + entities: + - uid: 17545 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -41.5,16.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19980 +- proto: ReinforcedGirder + entities: + - uid: 17546 + components: + - type: Transform + anchored: False + pos: -45.5,19.5 + parent: 2 + - type: Physics + bodyType: Dynamic + - uid: 17547 + components: + - type: Transform + anchored: False + pos: -53.483994,13.556776 + parent: 2 + - type: Physics + bodyType: Dynamic + - uid: 17548 + components: + - type: Transform + pos: -58.5,31.5 + parent: 2 + - uid: 17549 + components: + - type: Transform + pos: -59.5,31.5 + parent: 2 + - uid: 17550 + components: + - type: Transform + pos: -60.5,31.5 + parent: 2 + - uid: 17551 + components: + - type: Transform + pos: -63.5,30.5 + parent: 2 +- proto: ReinforcedPlasmaWindow + entities: + - uid: 17552 + components: + - type: Transform + pos: -17.5,-29.5 + parent: 2 + - uid: 17553 + components: + - type: Transform + pos: -16.5,-29.5 + parent: 2 + - uid: 17554 + components: + - type: Transform + pos: -18.5,-29.5 + parent: 2 + - uid: 17555 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -39.5,-48.5 + parent: 2 + - uid: 17556 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,37.5 + parent: 2 + - uid: 17557 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,39.5 + parent: 2 + - uid: 17558 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-61.5 + parent: 2 + - uid: 17559 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,-61.5 + parent: 2 + - uid: 17560 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-61.5 + parent: 2 + - uid: 17561 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,-61.5 + parent: 2 + - uid: 17562 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,-62.5 + parent: 2 + - uid: 17563 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,-62.5 + parent: 2 + - uid: 17564 + components: + - type: Transform + pos: 9.5,-68.5 + parent: 2 + - uid: 17565 + components: + - type: Transform + pos: 9.5,-69.5 + parent: 2 + - uid: 17566 + components: + - type: Transform + pos: 9.5,-70.5 + parent: 2 + - uid: 17567 + components: + - type: Transform + pos: 11.5,-71.5 + parent: 2 + - uid: 17568 + components: + - type: Transform + pos: 12.5,-71.5 + parent: 2 + - uid: 17569 + components: + - type: Transform + pos: 13.5,-71.5 + parent: 2 + - uid: 17570 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,-77.5 + parent: 2 + - uid: 17571 + components: + - type: Transform + pos: 15.5,-62.5 + parent: 2 + - uid: 17572 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-71.5 + parent: 2 + - uid: 17573 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,-71.5 + parent: 2 + - uid: 17574 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-71.5 + parent: 2 + - uid: 17575 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-74.5 + parent: 2 + - uid: 17576 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,-77.5 + parent: 2 + - uid: 17577 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,-77.5 + parent: 2 + - uid: 17578 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-77.5 + parent: 2 + - uid: 17579 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-77.5 + parent: 2 + - uid: 17580 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-77.5 + parent: 2 + - uid: 17581 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-77.5 + parent: 2 + - uid: 17582 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,-77.5 + parent: 2 + - uid: 17583 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-74.5 + parent: 2 + - uid: 17584 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-70.5 + parent: 2 + - uid: 17585 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-69.5 + parent: 2 + - uid: 17586 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-68.5 + parent: 2 + - uid: 17587 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,-58.5 + parent: 2 + - uid: 17588 + components: + - type: Transform + pos: 19.5,-62.5 + parent: 2 + - uid: 17589 + components: + - type: Transform + pos: 19.5,-54.5 + parent: 2 + - uid: 17590 + components: + - type: Transform + pos: 39.5,-44.5 + parent: 2 + - uid: 17591 + components: + - type: Transform + pos: 41.5,-44.5 + parent: 2 + - uid: 17592 + components: + - type: Transform + pos: 41.5,-42.5 + parent: 2 + - uid: 17593 + components: + - type: Transform + pos: 27.5,-67.5 + parent: 2 + - uid: 17594 + components: + - type: Transform + pos: 35.5,-58.5 + parent: 2 + - uid: 17595 + components: + - type: Transform + pos: 35.5,-54.5 + parent: 2 + - uid: 17596 + components: + - type: Transform + pos: 35.5,-62.5 + parent: 2 +- proto: ReinforcedWindow + entities: + - uid: 16300 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -50.5,-21.5 + parent: 2 + - uid: 16301 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -49.5,-22.5 + parent: 2 + - uid: 16302 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -50.5,-17.5 + parent: 2 + - uid: 17597 + components: + - type: Transform + pos: -8.5,-25.5 + parent: 2 + - uid: 17598 + components: + - type: Transform + pos: -11.5,-25.5 + parent: 2 + - uid: 17599 + components: + - type: Transform + pos: 3.5,27.5 + parent: 2 + - uid: 17600 + components: + - type: Transform + pos: 3.5,25.5 + parent: 2 + - uid: 17601 + components: + - type: Transform + pos: -3.5,12.5 + parent: 2 + - uid: 17602 + components: + - type: Transform + pos: 4.5,12.5 + parent: 2 + - uid: 17603 + components: + - type: Transform + pos: -8.5,9.5 + parent: 2 + - uid: 17604 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,17.5 + parent: 2 + - uid: 17605 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,17.5 + parent: 2 + - uid: 17606 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,17.5 + parent: 2 + - uid: 17607 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,16.5 + parent: 2 + - uid: 17608 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,17.5 + parent: 2 + - uid: 17609 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,19.5 + parent: 2 + - uid: 17610 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,19.5 + parent: 2 + - uid: 17611 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,17.5 + parent: 2 + - uid: 17612 + components: + - type: Transform + pos: -26.5,6.5 + parent: 2 + - uid: 17613 + components: + - type: Transform + pos: -31.5,7.5 + parent: 2 + - uid: 17614 + components: + - type: Transform + pos: -31.5,5.5 + parent: 2 + - uid: 17615 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -45.5,8.5 + parent: 2 + - uid: 17616 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -45.5,9.5 + parent: 2 + - uid: 17617 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -45.5,10.5 + parent: 2 + - uid: 17618 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -45.5,11.5 + parent: 2 + - uid: 17619 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -39.5,5.5 + parent: 2 + - uid: 17620 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -37.5,5.5 + parent: 2 + - uid: 17621 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,11.5 + parent: 2 + - uid: 17622 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,1.5 + parent: 2 + - uid: 17623 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,0.5 + parent: 2 + - uid: 17625 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,-1.5 + parent: 2 + - uid: 17626 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,-2.5 + parent: 2 + - uid: 17627 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,-3.5 + parent: 2 + - uid: 17628 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -37.5,-6.5 + parent: 2 + - uid: 17629 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -43.5,-2.5 + parent: 2 + - uid: 17630 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -43.5,-3.5 + parent: 2 + - uid: 17631 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -43.5,-4.5 + parent: 2 + - uid: 17632 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -45.5,-3.5 + parent: 2 + - uid: 17633 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -45.5,-4.5 + parent: 2 + - uid: 17634 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -45.5,-5.5 + parent: 2 + - uid: 17635 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -43.5,3.5 + parent: 2 + - uid: 17636 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -43.5,2.5 + parent: 2 + - uid: 17637 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -43.5,1.5 + parent: 2 + - uid: 17638 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -45.5,4.5 + parent: 2 + - uid: 17639 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -45.5,3.5 + parent: 2 + - uid: 17640 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -45.5,2.5 + parent: 2 + - uid: 17641 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -45.5,-8.5 + parent: 2 + - uid: 17642 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -45.5,-9.5 + parent: 2 + - uid: 17643 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -45.5,-10.5 + parent: 2 + - uid: 17644 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -44.5,-10.5 + parent: 2 + - uid: 17645 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -43.5,-10.5 + parent: 2 + - uid: 17646 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -42.5,-10.5 + parent: 2 + - uid: 17647 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -41.5,-10.5 + parent: 2 + - uid: 17648 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -41.5,-12.5 + parent: 2 + - uid: 17649 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -45.5,-12.5 + parent: 2 + - uid: 17650 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -45.5,16.5 + parent: 2 + - uid: 17651 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -45.5,17.5 + parent: 2 + - uid: 17652 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -49.5,-15.5 + parent: 2 + - uid: 17653 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -49.5,-23.5 + parent: 2 + - uid: 17654 + components: + - type: Transform + pos: -27.5,-20.5 + parent: 2 + - uid: 17655 + components: + - type: Transform + pos: -27.5,-23.5 + parent: 2 + - uid: 17656 + components: + - type: Transform + pos: -27.5,-24.5 + parent: 2 + - uid: 17657 + components: + - type: Transform + pos: -28.5,-25.5 + parent: 2 + - uid: 17658 + components: + - type: Transform + pos: -30.5,-25.5 + parent: 2 + - uid: 17659 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,-28.5 + parent: 2 + - uid: 17660 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,-28.5 + parent: 2 + - uid: 17661 + components: + - type: Transform + pos: -29.5,-36.5 + parent: 2 + - uid: 17662 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,-33.5 + parent: 2 + - uid: 17663 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,-33.5 + parent: 2 + - uid: 17664 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,-34.5 + parent: 2 + - uid: 17665 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,-35.5 + parent: 2 + - uid: 17666 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,-34.5 + parent: 2 + - uid: 17667 + components: + - type: Transform + pos: -32.5,-44.5 + parent: 2 + - uid: 17668 + components: + - type: Transform + pos: -34.5,-44.5 + parent: 2 + - uid: 17669 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,-30.5 + parent: 2 + - uid: 17670 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,-31.5 + parent: 2 + - uid: 17671 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,-25.5 + parent: 2 + - uid: 17672 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,-25.5 + parent: 2 + - uid: 17673 + components: + - type: Transform + pos: -19.5,-30.5 + parent: 2 + - uid: 17674 + components: + - type: Transform + pos: -19.5,-31.5 + parent: 2 + - uid: 17675 + components: + - type: Transform + pos: -12.5,-33.5 + parent: 2 + - uid: 17676 + components: + - type: Transform + pos: -10.5,-33.5 + parent: 2 + - uid: 17677 + components: + - type: Transform + pos: -1.5,-28.5 + parent: 2 + - uid: 17678 + components: + - type: Transform + pos: -1.5,-26.5 + parent: 2 + - uid: 17679 + components: + - type: Transform + pos: -4.5,-26.5 + parent: 2 + - uid: 17680 + components: + - type: Transform + pos: -4.5,-28.5 + parent: 2 + - uid: 17681 + components: + - type: Transform + pos: -6.5,-29.5 + parent: 2 + - uid: 17682 + components: + - type: Transform + pos: -8.5,-29.5 + parent: 2 + - uid: 17683 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-32.5 + parent: 2 + - uid: 17684 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-33.5 + parent: 2 + - uid: 17685 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-34.5 + parent: 2 + - uid: 17686 + components: + - type: Transform + pos: -14.5,-35.5 + parent: 2 + - uid: 17687 + components: + - type: Transform + pos: -14.5,-37.5 + parent: 2 + - uid: 17688 + components: + - type: Transform + pos: -14.5,-38.5 + parent: 2 + - uid: 17689 + components: + - type: Transform + pos: -14.5,-40.5 + parent: 2 + - uid: 17690 + components: + - type: Transform + pos: -14.5,-41.5 + parent: 2 + - uid: 17691 + components: + - type: Transform + pos: -14.5,-43.5 + parent: 2 + - uid: 17692 + components: + - type: Transform + pos: -14.5,-44.5 + parent: 2 + - uid: 17693 + components: + - type: Transform + pos: -14.5,-46.5 + parent: 2 + - uid: 17694 + components: + - type: Transform + pos: -14.5,-47.5 + parent: 2 + - uid: 17695 + components: + - type: Transform + pos: -14.5,-49.5 + parent: 2 + - uid: 17696 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,-47.5 + parent: 2 + - uid: 17697 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,-49.5 + parent: 2 + - uid: 17698 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,-41.5 + parent: 2 + - uid: 17699 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,-43.5 + parent: 2 + - uid: 17700 + components: + - type: Transform + pos: -44.5,-42.5 + parent: 2 + - uid: 17701 + components: + - type: Transform + pos: -45.5,-40.5 + parent: 2 + - uid: 17702 + components: + - type: Transform + pos: -45.5,-39.5 + parent: 2 + - uid: 17703 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -46.5,-36.5 + parent: 2 + - uid: 17704 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -47.5,-33.5 + parent: 2 + - uid: 17705 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -48.5,-32.5 + parent: 2 + - uid: 17706 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -48.5,-31.5 + parent: 2 + - uid: 17707 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -48.5,-30.5 + parent: 2 + - uid: 17708 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -44.5,-49.5 + parent: 2 + - uid: 17709 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -44.5,-50.5 + parent: 2 + - uid: 17710 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -43.5,-51.5 + parent: 2 + - uid: 17711 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -42.5,-51.5 + parent: 2 + - uid: 17712 + components: + - type: Transform + pos: -37.5,-55.5 + parent: 2 + - uid: 17713 + components: + - type: Transform + pos: -37.5,-59.5 + parent: 2 + - uid: 17714 + components: + - type: Transform + pos: -37.5,-63.5 + parent: 2 + - uid: 17715 + components: + - type: Transform + pos: -35.5,-65.5 + parent: 2 + - uid: 17716 + components: + - type: Transform + pos: -31.5,-65.5 + parent: 2 + - uid: 17717 + components: + - type: Transform + pos: -30.5,-65.5 + parent: 2 + - uid: 17718 + components: + - type: Transform + pos: -29.5,-65.5 + parent: 2 + - uid: 17719 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-35.5 + parent: 2 + - uid: 17720 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-37.5 + parent: 2 + - uid: 17721 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,-1.5 + parent: 2 + - uid: 17722 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,-1.5 + parent: 2 + - uid: 17723 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,17.5 + parent: 2 + - uid: 17724 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,18.5 + parent: 2 + - uid: 17725 + components: + - type: Transform + pos: 44.5,14.5 + parent: 2 + - uid: 17726 + components: + - type: Transform + pos: 44.5,13.5 + parent: 2 + - uid: 17727 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 45.5,-0.5 + parent: 2 + - uid: 17728 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,8.5 + parent: 2 + - uid: 17729 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,7.5 + parent: 2 + - uid: 17730 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,6.5 + parent: 2 + - uid: 17731 + components: + - type: Transform + pos: 14.5,28.5 + parent: 2 + - uid: 17732 + components: + - type: Transform + pos: 13.5,28.5 + parent: 2 + - uid: 17733 + components: + - type: Transform + pos: 12.5,28.5 + parent: 2 + - uid: 17734 + components: + - type: Transform + pos: 11.5,28.5 + parent: 2 + - uid: 17735 + components: + - type: Transform + pos: 40.5,31.5 + parent: 2 + - uid: 17736 + components: + - type: Transform + pos: 38.5,31.5 + parent: 2 + - uid: 17737 + components: + - type: Transform + pos: 36.5,31.5 + parent: 2 + - uid: 17738 + components: + - type: Transform + pos: 34.5,31.5 + parent: 2 + - uid: 17739 + components: + - type: Transform + pos: 32.5,31.5 + parent: 2 + - uid: 17740 + components: + - type: Transform + pos: 12.5,36.5 + parent: 2 + - uid: 17741 + components: + - type: Transform + pos: 12.5,35.5 + parent: 2 + - uid: 17742 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 12.5,43.5 + parent: 2 + - uid: 17743 + components: + - type: Transform + pos: 19.5,47.5 + parent: 2 + - uid: 17744 + components: + - type: Transform + pos: 19.5,46.5 + parent: 2 + - uid: 17745 + components: + - type: Transform + pos: 21.5,47.5 + parent: 2 + - uid: 17746 + components: + - type: Transform + pos: 21.5,46.5 + parent: 2 + - uid: 17747 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,41.5 + parent: 2 + - uid: 17748 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,41.5 + parent: 2 + - uid: 17749 + components: + - type: Transform + pos: 41.5,32.5 + parent: 2 + - uid: 17750 + components: + - type: Transform + pos: 41.5,33.5 + parent: 2 + - uid: 17751 + components: + - type: Transform + pos: 41.5,34.5 + parent: 2 + - uid: 17752 + components: + - type: Transform + pos: 41.5,36.5 + parent: 2 + - uid: 17753 + components: + - type: Transform + pos: 41.5,37.5 + parent: 2 + - uid: 17754 + components: + - type: Transform + pos: 41.5,39.5 + parent: 2 + - uid: 17755 + components: + - type: Transform + pos: 41.5,40.5 + parent: 2 + - uid: 17756 + components: + - type: Transform + pos: 41.5,41.5 + parent: 2 + - uid: 17757 + components: + - type: Transform + pos: 41.5,42.5 + parent: 2 + - uid: 17758 + components: + - type: Transform + pos: 40.5,42.5 + parent: 2 + - uid: 17759 + components: + - type: Transform + pos: 39.5,42.5 + parent: 2 + - uid: 17760 + components: + - type: Transform + pos: 38.5,42.5 + parent: 2 + - uid: 17761 + components: + - type: Transform + pos: 37.5,42.5 + parent: 2 + - uid: 17762 + components: + - type: Transform + pos: 36.5,42.5 + parent: 2 + - uid: 17763 + components: + - type: Transform + pos: 35.5,42.5 + parent: 2 + - uid: 17764 + components: + - type: Transform + pos: 34.5,42.5 + parent: 2 + - uid: 17765 + components: + - type: Transform + pos: 33.5,42.5 + parent: 2 + - uid: 17766 + components: + - type: Transform + pos: 32.5,42.5 + parent: 2 + - uid: 17767 + components: + - type: Transform + pos: 45.5,27.5 + parent: 2 + - uid: 17768 + components: + - type: Transform + pos: 45.5,28.5 + parent: 2 + - uid: 17769 + components: + - type: Transform + pos: 45.5,29.5 + parent: 2 + - uid: 17770 + components: + - type: Transform + pos: 45.5,34.5 + parent: 2 + - uid: 17771 + components: + - type: Transform + pos: 45.5,35.5 + parent: 2 + - uid: 17772 + components: + - type: Transform + pos: 45.5,36.5 + parent: 2 + - uid: 17773 + components: + - type: Transform + pos: 45.5,37.5 + parent: 2 + - uid: 17774 + components: + - type: Transform + pos: 45.5,42.5 + parent: 2 + - uid: 17775 + components: + - type: Transform + pos: 45.5,43.5 + parent: 2 + - uid: 17776 + components: + - type: Transform + pos: 45.5,44.5 + parent: 2 + - uid: 17777 + components: + - type: Transform + pos: 45.5,45.5 + parent: 2 + - uid: 17778 + components: + - type: Transform + pos: 42.5,47.5 + parent: 2 + - uid: 17779 + components: + - type: Transform + pos: 44.5,47.5 + parent: 2 + - uid: 17780 + components: + - type: Transform + pos: 42.5,49.5 + parent: 2 + - uid: 17781 + components: + - type: Transform + pos: 44.5,49.5 + parent: 2 + - uid: 17782 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 36.5,-13.5 + parent: 2 + - uid: 17783 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 38.5,-13.5 + parent: 2 + - uid: 17784 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 43.5,-13.5 + parent: 2 + - uid: 17785 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 45.5,-11.5 + parent: 2 + - uid: 17786 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 45.5,-10.5 + parent: 2 + - uid: 17787 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 45.5,-8.5 + parent: 2 + - uid: 17788 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 45.5,-7.5 + parent: 2 + - uid: 17789 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 47.5,-11.5 + parent: 2 + - uid: 17790 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 47.5,-5.5 + parent: 2 + - uid: 17791 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 47.5,-7.5 + parent: 2 + - uid: 17792 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,-7.5 + parent: 2 + - uid: 17793 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 47.5,-13.5 + parent: 2 + - uid: 17794 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 47.5,-15.5 + parent: 2 + - uid: 17795 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 46.5,-15.5 + parent: 2 + - uid: 17796 + components: + - type: Transform + pos: -17.5,18.5 + parent: 2 + - uid: 17797 + components: + - type: Transform + pos: -17.5,20.5 + parent: 2 + - uid: 17798 + components: + - type: Transform + pos: -2.5,21.5 + parent: 2 + - uid: 17799 + components: + - type: Transform + pos: -3.5,21.5 + parent: 2 + - uid: 17800 + components: + - type: Transform + pos: -5.5,21.5 + parent: 2 + - uid: 17801 + components: + - type: Transform + pos: -6.5,21.5 + parent: 2 + - uid: 17802 + components: + - type: Transform + pos: -8.5,21.5 + parent: 2 + - uid: 17803 + components: + - type: Transform + pos: -9.5,21.5 + parent: 2 + - uid: 17804 + components: + - type: Transform + pos: -11.5,21.5 + parent: 2 + - uid: 17805 + components: + - type: Transform + pos: -12.5,21.5 + parent: 2 + - uid: 17806 + components: + - type: Transform + pos: -15.5,21.5 + parent: 2 + - uid: 17807 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,24.5 + parent: 2 + - uid: 17808 + components: + - type: Transform + pos: -17.5,25.5 + parent: 2 + - uid: 17809 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,25.5 + parent: 2 + - uid: 17810 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,25.5 + parent: 2 + - uid: 17811 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,25.5 + parent: 2 + - uid: 17812 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,25.5 + parent: 2 + - uid: 17813 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,25.5 + parent: 2 + - uid: 17814 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,25.5 + parent: 2 + - uid: 17815 + components: + - type: Transform + pos: -14.5,30.5 + parent: 2 + - uid: 17816 + components: + - type: Transform + pos: -16.5,30.5 + parent: 2 + - uid: 17817 + components: + - type: Transform + pos: -11.5,30.5 + parent: 2 + - uid: 17818 + components: + - type: Transform + pos: -13.5,31.5 + parent: 2 + - uid: 17819 + components: + - type: Transform + pos: -8.5,36.5 + parent: 2 + - uid: 17820 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,40.5 + parent: 2 + - uid: 17821 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,38.5 + parent: 2 + - uid: 17822 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,37.5 + parent: 2 + - uid: 17823 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,37.5 + parent: 2 + - uid: 17824 + components: + - type: Transform + pos: -20.5,43.5 + parent: 2 + - uid: 17825 + components: + - type: Transform + pos: -20.5,44.5 + parent: 2 + - uid: 17826 + components: + - type: Transform + pos: -20.5,45.5 + parent: 2 + - uid: 17827 + components: + - type: Transform + pos: -21.5,45.5 + parent: 2 + - uid: 17828 + components: + - type: Transform + pos: -21.5,46.5 + parent: 2 + - uid: 17829 + components: + - type: Transform + pos: -22.5,46.5 + parent: 2 + - uid: 17830 + components: + - type: Transform + pos: -23.5,46.5 + parent: 2 + - uid: 17831 + components: + - type: Transform + pos: -24.5,46.5 + parent: 2 + - uid: 17832 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,36.5 + parent: 2 + - uid: 17833 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,34.5 + parent: 2 + - uid: 17834 + components: + - type: Transform + pos: -35.5,39.5 + parent: 2 + - uid: 17835 + components: + - type: Transform + pos: -35.5,36.5 + parent: 2 + - uid: 17836 + components: + - type: Transform + pos: -35.5,33.5 + parent: 2 + - uid: 17837 + components: + - type: Transform + pos: -38.5,39.5 + parent: 2 + - uid: 17838 + components: + - type: Transform + pos: -40.5,38.5 + parent: 2 + - uid: 17839 + components: + - type: Transform + pos: -41.5,38.5 + parent: 2 + - uid: 17840 + components: + - type: Transform + pos: -43.5,34.5 + parent: 2 + - uid: 17841 + components: + - type: Transform + pos: -43.5,33.5 + parent: 2 + - uid: 17842 + components: + - type: Transform + pos: -43.5,32.5 + parent: 2 + - uid: 17843 + components: + - type: Transform + pos: -38.5,30.5 + parent: 2 + - uid: 17844 + components: + - type: Transform + pos: -38.5,28.5 + parent: 2 + - uid: 17845 + components: + - type: Transform + pos: -37.5,27.5 + parent: 2 + - uid: 17846 + components: + - type: Transform + pos: -35.5,27.5 + parent: 2 + - uid: 17847 + components: + - type: Transform + pos: -40.5,23.5 + parent: 2 + - uid: 17848 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,28.5 + parent: 2 + - uid: 17849 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,30.5 + parent: 2 + - uid: 17850 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,35.5 + parent: 2 + - uid: 17851 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,32.5 + parent: 2 + - uid: 17852 + components: + - type: Transform + pos: 6.5,36.5 + parent: 2 + - uid: 17853 + components: + - type: Transform + pos: 5.5,36.5 + parent: 2 + - uid: 17854 + components: + - type: Transform + pos: 4.5,36.5 + parent: 2 + - uid: 17855 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,45.5 + parent: 2 + - uid: 17856 + components: + - type: Transform + pos: -12.5,47.5 + parent: 2 + - uid: 17857 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,50.5 + parent: 2 + - uid: 17858 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,51.5 + parent: 2 + - uid: 17859 + components: + - type: Transform + pos: -9.5,55.5 + parent: 2 + - uid: 17860 + components: + - type: Transform + pos: -4.5,57.5 + parent: 2 + - uid: 17861 + components: + - type: Transform + pos: -2.5,57.5 + parent: 2 + - uid: 17862 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,48.5 + parent: 2 + - uid: 17863 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,51.5 + parent: 2 + - uid: 17864 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,45.5 + parent: 2 + - uid: 17865 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 12.5,46.5 + parent: 2 + - uid: 17866 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 14.5,46.5 + parent: 2 + - uid: 17867 + components: + - type: Transform + pos: 11.5,55.5 + parent: 2 + - uid: 17868 + components: + - type: Transform + pos: 11.5,54.5 + parent: 2 + - uid: 17869 + components: + - type: Transform + pos: 11.5,53.5 + parent: 2 + - uid: 17870 + components: + - type: Transform + pos: 6.5,57.5 + parent: 2 + - uid: 17871 + components: + - type: Transform + pos: 3.5,53.5 + parent: 2 + - uid: 17872 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,57.5 + parent: 2 + - uid: 17873 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,57.5 + parent: 2 + - uid: 17874 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,54.5 + parent: 2 + - uid: 17875 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,54.5 + parent: 2 + - uid: 17876 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,60.5 + parent: 2 + - uid: 17877 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,61.5 + parent: 2 + - uid: 17878 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,61.5 + parent: 2 + - uid: 17879 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,62.5 + parent: 2 + - uid: 17880 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,62.5 + parent: 2 + - uid: 17881 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,62.5 + parent: 2 + - uid: 17882 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,63.5 + parent: 2 + - uid: 17883 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,63.5 + parent: 2 + - uid: 17884 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,63.5 + parent: 2 + - uid: 17885 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,63.5 + parent: 2 + - uid: 17886 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,63.5 + parent: 2 + - uid: 17887 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,63.5 + parent: 2 + - uid: 17888 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,63.5 + parent: 2 + - uid: 17889 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,63.5 + parent: 2 + - uid: 17890 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,62.5 + parent: 2 + - uid: 17891 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,62.5 + parent: 2 + - uid: 17892 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,62.5 + parent: 2 + - uid: 17893 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,61.5 + parent: 2 + - uid: 17894 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,61.5 + parent: 2 + - uid: 17895 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,60.5 + parent: 2 + - uid: 17896 + components: + - type: Transform + pos: -2.5,68.5 + parent: 2 + - uid: 17897 + components: + - type: Transform + pos: -3.5,68.5 + parent: 2 + - uid: 17898 + components: + - type: Transform + pos: 5.5,68.5 + parent: 2 + - uid: 17899 + components: + - type: Transform + pos: 2.5,73.5 + parent: 2 + - uid: 17900 + components: + - type: Transform + pos: 1.5,73.5 + parent: 2 + - uid: 17901 + components: + - type: Transform + pos: 0.5,73.5 + parent: 2 + - uid: 17902 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,86.5 + parent: 2 + - uid: 17903 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,86.5 + parent: 2 + - uid: 17904 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,86.5 + parent: 2 + - uid: 17905 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,86.5 + parent: 2 + - uid: 17906 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,86.5 + parent: 2 + - uid: 17907 + components: + - type: Transform + pos: 2.5,81.5 + parent: 2 + - uid: 17908 + components: + - type: Transform + pos: 0.5,81.5 + parent: 2 + - uid: 17909 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 20.5,-12.5 + parent: 2 + - uid: 17910 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,-12.5 + parent: 2 + - uid: 17911 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,-12.5 + parent: 2 + - uid: 17912 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,-12.5 + parent: 2 + - uid: 17913 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,-17.5 + parent: 2 + - uid: 17914 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,-17.5 + parent: 2 + - uid: 17915 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,-21.5 + parent: 2 + - uid: 17916 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,-21.5 + parent: 2 + - uid: 17917 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 22.5,-21.5 + parent: 2 + - uid: 17918 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 23.5,-21.5 + parent: 2 + - uid: 17919 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,-22.5 + parent: 2 + - uid: 17920 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 29.5,-22.5 + parent: 2 + - uid: 17921 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-22.5 + parent: 2 + - uid: 17922 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,-22.5 + parent: 2 + - uid: 17923 + components: + - type: Transform + pos: 39.5,-15.5 + parent: 2 + - uid: 17924 + components: + - type: Transform + pos: 39.5,-17.5 + parent: 2 + - uid: 17925 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 47.5,-22.5 + parent: 2 + - uid: 17926 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 47.5,-23.5 + parent: 2 + - uid: 17927 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 47.5,-24.5 + parent: 2 + - uid: 17928 + components: + - type: Transform + pos: 48.5,-30.5 + parent: 2 + - uid: 17929 + components: + - type: Transform + pos: 48.5,-32.5 + parent: 2 + - uid: 17930 + components: + - type: Transform + pos: 41.5,-26.5 + parent: 2 + - uid: 17931 + components: + - type: Transform + pos: 38.5,-26.5 + parent: 2 + - uid: 17932 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,-20.5 + parent: 2 + - uid: 17933 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,-28.5 + parent: 2 + - uid: 17934 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,-28.5 + parent: 2 + - uid: 17935 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,-28.5 + parent: 2 + - uid: 17936 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,-28.5 + parent: 2 + - uid: 17937 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,-32.5 + parent: 2 + - uid: 17938 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,-20.5 + parent: 2 + - uid: 17939 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,-20.5 + parent: 2 + - uid: 17940 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,-19.5 + parent: 2 + - uid: 17941 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-39.5 + parent: 2 + - uid: 17942 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-42.5 + parent: 2 + - uid: 17943 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-43.5 + parent: 2 + - uid: 17944 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-43.5 + parent: 2 + - uid: 17945 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,-43.5 + parent: 2 + - uid: 17946 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,-43.5 + parent: 2 + - uid: 17947 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,-42.5 + parent: 2 + - uid: 17948 + components: + - type: Transform + pos: 2.5,-47.5 + parent: 2 + - uid: 17949 + components: + - type: Transform + pos: 3.5,-47.5 + parent: 2 + - uid: 17950 + components: + - type: Transform + pos: 4.5,-47.5 + parent: 2 + - uid: 17951 + components: + - type: Transform + pos: 5.5,-47.5 + parent: 2 + - uid: 17952 + components: + - type: Transform + pos: 5.5,-48.5 + parent: 2 + - uid: 17953 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-46.5 + parent: 2 + - uid: 17954 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-48.5 + parent: 2 + - uid: 17955 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-51.5 + parent: 2 + - uid: 17956 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,-54.5 + parent: 2 + - uid: 17957 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,-56.5 + parent: 2 + - uid: 17958 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.5,-49.5 + parent: 2 + - uid: 17959 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.5,-49.5 + parent: 2 + - uid: 17960 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 13.5,-49.5 + parent: 2 + - uid: 17961 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,-54.5 + parent: 2 + - uid: 17962 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,-55.5 + parent: 2 + - uid: 17963 + components: + - type: Transform + pos: -43.5,20.5 + parent: 2 + - uid: 17964 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.5,-48.5 + parent: 2 + - uid: 17965 + components: + - type: Transform + pos: 20.5,-52.5 + parent: 2 + - uid: 17966 + components: + - type: Transform + pos: 21.5,-53.5 + parent: 2 + - uid: 17967 + components: + - type: Transform + pos: 21.5,-52.5 + parent: 2 + - uid: 17968 + components: + - type: Transform + pos: 21.5,-54.5 + parent: 2 + - uid: 17969 + components: + - type: Transform + pos: 21.5,-55.5 + parent: 2 + - uid: 17970 + components: + - type: Transform + pos: 21.5,-57.5 + parent: 2 + - uid: 17971 + components: + - type: Transform + pos: 21.5,-58.5 + parent: 2 + - uid: 17972 + components: + - type: Transform + pos: 21.5,-59.5 + parent: 2 + - uid: 17973 + components: + - type: Transform + pos: 21.5,-61.5 + parent: 2 + - uid: 17974 + components: + - type: Transform + pos: 21.5,-62.5 + parent: 2 + - uid: 17975 + components: + - type: Transform + pos: 21.5,-63.5 + parent: 2 + - uid: 17976 + components: + - type: Transform + pos: 21.5,-64.5 + parent: 2 + - uid: 17977 + components: + - type: Transform + pos: 24.5,-65.5 + parent: 2 + - uid: 17978 + components: + - type: Transform + pos: 26.5,-65.5 + parent: 2 + - uid: 17979 + components: + - type: Transform + pos: 27.5,-65.5 + parent: 2 + - uid: 17980 + components: + - type: Transform + pos: 28.5,-65.5 + parent: 2 + - uid: 17981 + components: + - type: Transform + pos: 30.5,-65.5 + parent: 2 + - uid: 17982 + components: + - type: Transform + pos: 31.5,-65.5 + parent: 2 + - uid: 17983 + components: + - type: Transform + pos: 32.5,-65.5 + parent: 2 + - uid: 17984 + components: + - type: Transform + pos: 33.5,-57.5 + parent: 2 + - uid: 17985 + components: + - type: Transform + pos: 33.5,-58.5 + parent: 2 + - uid: 17986 + components: + - type: Transform + pos: 33.5,-59.5 + parent: 2 + - uid: 17987 + components: + - type: Transform + pos: 33.5,-61.5 + parent: 2 + - uid: 17988 + components: + - type: Transform + pos: 33.5,-62.5 + parent: 2 + - uid: 17989 + components: + - type: Transform + pos: 33.5,-63.5 + parent: 2 + - uid: 17990 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,-48.5 + parent: 2 + - uid: 17991 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,-47.5 + parent: 2 + - uid: 17992 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 48.5,-31.5 + parent: 2 + - uid: 17993 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,-34.5 + parent: 2 + - uid: 17994 + components: + - type: Transform + pos: 33.5,-53.5 + parent: 2 + - uid: 17995 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,36.5 + parent: 2 + - uid: 17996 + components: + - type: Transform + pos: -9.5,-25.5 + parent: 2 + - uid: 18222 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -49.5,-16.5 + parent: 2 + - uid: 22835 + components: + - type: Transform + pos: -35.5,-0.5 + parent: 2 +- proto: RemoteSignaller + entities: + - uid: 17997 + components: + - type: Transform + pos: -36.69524,-30.216236 + parent: 2 + - uid: 17998 + components: + - type: Transform + pos: -37.428818,-51.94367 + parent: 2 + - uid: 17999 + components: + - type: Transform + pos: -37.584217,-51.813133 + parent: 2 + - uid: 18000 + components: + - type: Transform + pos: -37.354225,-51.757187 + parent: 2 + - uid: 18001 + components: + - type: Transform + pos: -37.47233,-51.63287 + parent: 2 + - uid: 18002 + components: + - type: Transform + pos: 36.77558,-46.458874 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 15636: + - Pressed: Trigger +- proto: ResearchAndDevelopmentServer + entities: + - uid: 18003 + components: + - type: Transform + pos: -24.5,-37.5 + parent: 2 +- proto: ResearchDisk + entities: + - uid: 18004 + components: + - type: Transform + pos: -25.474854,-39.43875 + parent: 2 + - uid: 18005 + components: + - type: Transform + pos: -23.451546,-39.448074 + parent: 2 +- proto: RevolverCapGun + entities: + - uid: 18006 + components: + - type: Transform + pos: 38.38097,-7.897862 + parent: 2 +- proto: RiotShield + entities: + - uid: 18007 + components: + - type: Transform + pos: -12.615384,40.555973 + parent: 2 + - uid: 18008 + components: + - type: Transform + pos: -12.424128,40.64512 + parent: 2 +- proto: RitualDagger + entities: + - uid: 18009 + components: + - type: Transform + pos: 15.515292,33.45173 + parent: 2 +- proto: RollerBed + entities: + - uid: 18010 + components: + - type: Transform + pos: 44.5,-34.5 + parent: 2 + - uid: 18011 + components: + - type: Transform + pos: 45.5,-34.5 + parent: 2 + - uid: 18012 + components: + - type: Transform + pos: 46.5,-34.5 + parent: 2 + - uid: 18013 + components: + - type: Transform + pos: 47.5,-34.5 + parent: 2 + - uid: 18014 + components: + - type: Transform + pos: 22.5,-28.5 + parent: 2 + - uid: 18015 + components: + - type: Transform + pos: 21.5,-28.5 + parent: 2 + - uid: 18016 + components: + - type: Transform + pos: 20.5,-28.5 + parent: 2 +- proto: RollingPin + entities: + - uid: 18017 + components: + - type: Transform + pos: -42.493908,32.449837 + parent: 2 + - uid: 18018 + components: + - type: Transform + pos: 26.568108,18.219398 + parent: 2 +- proto: RubberStampApproved + entities: + - uid: 18019 + components: + - type: Transform + pos: -2.6808589,14.656691 + parent: 2 + - uid: 18020 + components: + - type: Transform + pos: -39.564224,8.768915 + parent: 2 + - uid: 18021 + components: + - type: Transform + pos: -23.592323,40.68254 + parent: 2 + - uid: 18022 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.577986,-23.429962 + parent: 2 +- proto: RubberStampCaptain + entities: + - uid: 18023 + components: + - type: Transform + pos: -8.266708,55.473656 + parent: 2 +- proto: RubberStampClown + entities: + - uid: 18024 + components: + - type: Transform + pos: 40.318123,12.6082115 + parent: 2 +- proto: RubberStampCMO + entities: + - uid: 18025 + components: + - type: Transform + pos: 25.30877,-19.556654 + parent: 2 +- proto: RubberStampDenied + entities: + - uid: 18026 + components: + - type: Transform + pos: -2.8113947,14.84317 + parent: 2 + - uid: 18027 + components: + - type: Transform + pos: -39.303154,8.852831 + parent: 2 + - uid: 18028 + components: + - type: Transform + pos: -23.401066,40.548824 + parent: 2 + - uid: 18029 + components: + - type: Transform + pos: -12.7514925,-23.34776 + parent: 2 +- proto: RubberStampQm + entities: + - uid: 18030 + components: + - type: Transform + pos: -27.790066,5.535928 + parent: 2 +- proto: SalvageCanisterSpawner + entities: + - uid: 18031 + components: + - type: Transform + pos: -36.5,-17.5 + parent: 2 + - uid: 18032 + components: + - type: Transform + pos: -36.5,-16.5 + parent: 2 + - uid: 18033 + components: + - type: Transform + pos: -28.5,-46.5 + parent: 2 + - uid: 18034 + components: + - type: Transform + pos: -21.5,-39.5 + parent: 2 + - uid: 18035 + components: + - type: Transform + pos: -19.5,-49.5 + parent: 2 + - uid: 18036 + components: + - type: Transform + pos: 44.5,21.5 + parent: 2 + - uid: 18037 + components: + - type: Transform + pos: 4.5,22.5 + parent: 2 + - uid: 18038 + components: + - type: Transform + pos: 25.5,25.5 + parent: 2 + - uid: 18039 + components: + - type: Transform + pos: -11.5,45.5 + parent: 2 + - uid: 18040 + components: + - type: Transform + pos: 9.5,75.5 + parent: 2 +- proto: SalvageMagnet + entities: + - uid: 23935 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -48.5,-15.5 + parent: 2 +- proto: SalvageMaterialCrateSpawner + entities: + - uid: 18042 + components: + - type: Transform + pos: -40.5,-5.5 + parent: 2 +- proto: Saw + entities: + - uid: 18043 + components: + - type: Transform + pos: 19.268372,-16.508553 + parent: 2 +- proto: SawElectric + entities: + - uid: 18044 + components: + - type: Transform + pos: 20.377926,-16.564495 + parent: 2 +- proto: Scalpel + entities: + - uid: 18045 + components: + - type: Transform + pos: 20.433872,-16.228832 + parent: 2 +- proto: ScalpelAdvanced + entities: + - uid: 18046 + components: + - type: Transform + pos: -33.46318,25.802137 + parent: 2 +- proto: ScalpelShiv + entities: + - uid: 18047 + components: + - type: Transform + pos: -3.5694814,-14.4214115 + parent: 2 +- proto: Screwdriver + entities: + - uid: 18048 + components: + - type: Transform + pos: 4.509079,15.69581 + parent: 2 + - uid: 18049 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -37.621513,-50.706684 + parent: 2 + - uid: 18050 + components: + - type: Transform + pos: -19.541893,-41.382526 + parent: 2 + - uid: 18051 + components: + - type: Transform + pos: 23.560352,36.23436 + parent: 2 + - uid: 18052 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.379181,34.68983 + parent: 2 + - uid: 18053 + components: + - type: Transform + pos: 4.5338135,44.37522 + parent: 2 + - uid: 18054 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5661516,80.44264 + parent: 2 + - uid: 18055 + components: + - type: Transform + pos: 4.4835577,-18.278255 + parent: 2 + - uid: 18056 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -41.694046,-32.63298 + parent: 2 +- proto: SecurityTechFab + entities: + - uid: 18057 + components: + - type: Transform + pos: -11.5,38.5 + parent: 2 +- proto: SeedExtractor + entities: + - uid: 18058 + components: + - type: Transform + pos: -1.5,-4.5 + parent: 2 + - uid: 18059 + components: + - type: Transform + pos: 32.5,18.5 + parent: 2 + - uid: 18060 + components: + - type: Transform + pos: -42.5,30.5 + parent: 2 +- proto: SheetGlass + entities: + - uid: 18061 + components: + - type: Transform + pos: 7.527253,85.57397 + parent: 2 + - uid: 18062 + components: + - type: Transform + pos: -6.362105,74.75126 + parent: 2 + - uid: 18063 + components: + - type: Transform + pos: -25.313526,-24.474699 + parent: 2 + - uid: 18064 + components: + - type: Transform + pos: -36.37923,-29.59225 + parent: 2 +- proto: SheetGlass1 + entities: + - uid: 18065 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 43.30182,-37.681477 + parent: 2 +- proto: SheetGlass10 + entities: + - uid: 18066 + components: + - type: Transform + pos: 22.42968,-44.351597 + parent: 2 + - uid: 18067 + components: + - type: Transform + pos: 19.614388,-18.401928 + parent: 2 + - uid: 18068 + components: + - type: Transform + pos: 34.464607,-14.403328 + parent: 2 + - uid: 18069 + components: + - type: Transform + pos: -10.411487,-55.40177 + parent: 2 + - uid: 18070 + components: + - type: Transform + pos: 22.547783,-44.419975 + parent: 2 +- proto: SheetPaper + entities: + - uid: 18071 + components: + - type: Transform + pos: -36.676533,-64.364944 + parent: 2 + - uid: 18072 + components: + - type: Transform + pos: -36.3412,-64.2183 + parent: 2 +- proto: SheetPGlass1 + entities: + - uid: 18073 + components: + - type: Transform + pos: -22.560863,-30.476324 + parent: 2 + - uid: 18074 + components: + - type: Transform + pos: -22.574848,-30.44835 + parent: 2 + - uid: 18075 + components: + - type: Transform + pos: -22.574848,-30.44835 + parent: 2 + - uid: 18076 + components: + - type: Transform + pos: -22.574848,-30.44835 + parent: 2 + - uid: 18077 + components: + - type: Transform + pos: -22.574848,-30.44835 + parent: 2 +- proto: SheetPlasma + entities: + - uid: 18078 + components: + - type: Transform + pos: 10.434816,-59.358215 + parent: 2 + - uid: 18079 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -47.55043,-30.410664 + parent: 2 + - uid: 18080 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -47.36395,-30.606468 + parent: 2 + - uid: 18081 + components: + - type: Transform + pos: 7.5232,44.594135 + parent: 2 + - uid: 18082 + components: + - type: Transform + pos: -5.7939453,74.67647 + parent: 2 +- proto: SheetPlasma1 + entities: + - uid: 18083 + components: + - type: Transform + pos: -27.473106,-16.434982 + parent: 2 + - uid: 18084 + components: + - type: Transform + pos: -36.401535,-30.328123 + parent: 2 + - uid: 18085 + components: + - type: Transform + pos: -5.6273484,-30.952227 + parent: 2 + - uid: 18086 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.40979,-34.264156 + parent: 2 + - uid: 18087 + components: + - type: Transform + pos: -13.482822,-61.38449 + parent: 2 +- proto: SheetPlasteel1 + entities: + - uid: 18088 + components: + - type: Transform + pos: -45.546013,19.49592 + parent: 2 + - uid: 18089 + components: + - type: Transform + pos: -58.5,30.5 + parent: 2 + - uid: 18090 + components: + - type: Transform + pos: -59.5,31.5 + parent: 2 + - uid: 18091 + components: + - type: Transform + pos: -60.5,31.5 + parent: 2 + - uid: 18092 + components: + - type: Transform + pos: -63.5,29.5 + parent: 2 + - uid: 18093 + components: + - type: Transform + pos: -69.46847,19.457985 + parent: 2 +- proto: SheetPlasteel10 + entities: + - uid: 18094 + components: + - type: Transform + pos: 22.516705,-44.73699 + parent: 2 +- proto: SheetPlastic + entities: + - uid: 18095 + components: + - type: Transform + pos: -36.236694,-29.348978 + parent: 2 + - uid: 18096 + components: + - type: Transform + pos: -25.938526,-24.443449 + parent: 2 +- proto: SheetSteel + entities: + - uid: 18097 + components: + - type: Transform + pos: -26.563526,-24.443449 + parent: 2 + - uid: 18098 + components: + - type: Transform + pos: 22.53535,-44.065662 + parent: 2 + - uid: 18099 + components: + - type: Transform + pos: 22.53535,-44.065662 + parent: 2 + - uid: 18100 + components: + - type: Transform + pos: 22.53535,-44.065662 + parent: 2 + - uid: 18101 + components: + - type: Transform + pos: 8.5342455,84.55299 + parent: 2 + - uid: 18102 + components: + - type: Transform + pos: -36.692863,-29.365276 + parent: 2 +- proto: SheetSteel1 + entities: + - uid: 18103 + components: + - type: Transform + pos: -18.463707,-14.5383625 + parent: 2 + - uid: 18104 + components: + - type: Transform + pos: -62.5,30.5 + parent: 2 + - uid: 18105 + components: + - type: Transform + pos: 30.525955,-52.2981 + parent: 2 + - uid: 18106 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 39.309597,-39.80526 + parent: 2 + - uid: 18107 + components: + - type: Transform + pos: 44.5,-36.5 + parent: 2 +- proto: SheetSteel10 + entities: + - uid: 18108 + components: + - type: Transform + pos: 19.399937,-18.1968 + parent: 2 + - uid: 18109 + components: + - type: Transform + pos: 33.49695,-14.397692 + parent: 2 +- proto: SheetUranium + entities: + - uid: 18110 + components: + - type: Transform + pos: 10.6910715,-59.547028 + parent: 2 +- proto: ShellTranquilizer + entities: + - uid: 18111 + components: + - type: Transform + pos: -26.556175,-48.50991 + parent: 2 + - uid: 18112 + components: + - type: Transform + pos: -28.400486,-47.378624 + parent: 2 +- proto: ShowcaseRobot + entities: + - uid: 18113 + components: + - type: Transform + pos: -4.5,85.5 + parent: 2 + - uid: 18114 + components: + - type: Transform + pos: 1.5,69.5 + parent: 2 +- proto: ShowcaseRobotMarauder + entities: + - uid: 18115 + components: + - type: Transform + pos: -5.5,84.5 + parent: 2 +- proto: ShuttersNormal + entities: + - uid: 18116 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,4.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18239 + - uid: 18117 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,5.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18239 + - uid: 18118 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,-10.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18240 + - uid: 18119 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-10.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18240 + - uid: 18120 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,11.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18243 + - uid: 18121 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,12.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18243 + - uid: 18122 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,-12.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18277 + - 18276 + - uid: 18123 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,-13.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18277 + - 18276 + - uid: 18124 + components: + - type: Transform + pos: -29.5,-19.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18278 + - uid: 18125 + components: + - type: Transform + pos: -30.5,-19.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18278 + - uid: 18126 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -40.5,-35.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18274 + - 18275 + - uid: 18127 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -40.5,-36.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18274 + - 18275 + - uid: 18128 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,-37.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18246 + - 18247 + - uid: 18129 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,-38.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18246 + - 18247 + - uid: 18130 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,-39.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18246 + - 18247 + - uid: 18131 + components: + - type: Transform + pos: 20.5,15.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18284 + - uid: 18132 + components: + - type: Transform + pos: 21.5,15.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18284 + - uid: 18133 + components: + - type: Transform + pos: 24.5,15.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18284 + - uid: 18134 + components: + - type: Transform + pos: 25.5,15.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18284 + - uid: 18135 + components: + - type: Transform + pos: 26.5,15.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18284 + - uid: 18136 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,16.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18284 + - uid: 18137 + components: + - type: Transform + pos: -12.5,37.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18260 + - 18311 + - uid: 18138 + components: + - type: Transform + pos: -15.5,37.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18260 + - 18311 + - uid: 18139 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,39.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18260 + - 18311 + - uid: 18140 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,-49.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18292 + - 18272 + - uid: 18141 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,-48.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18292 + - 18272 + - uid: 18142 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,-50.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18292 + - 18272 +- proto: ShuttersNormalOpen + entities: + - uid: 18143 + components: + - type: Transform + pos: 21.5,3.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18268 + - uid: 18144 + components: + - type: Transform + pos: 14.5,-17.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18269 + - uid: 18145 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,41.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18295 + - uid: 18146 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,25.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18263 + - uid: 18147 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,27.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18263 + - uid: 18148 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,17.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18309 + - uid: 18149 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,17.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18309 + - uid: 18150 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,17.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18309 + - uid: 18151 + components: + - type: Transform + pos: -3.5,12.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18308 + - uid: 18152 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,5.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18306 + - uid: 18153 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,6.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18307 + - uid: 18154 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,7.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18306 + - uid: 18155 + components: + - type: Transform + pos: -15.5,-25.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18304 + - uid: 18156 + components: + - type: Transform + pos: -17.5,-25.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18304 + - uid: 18157 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -37.5,-59.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18303 + - uid: 18158 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -37.5,-63.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18301 + - uid: 18159 + components: + - type: Transform + pos: -35.5,-65.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18301 + - uid: 18160 + components: + - type: Transform + pos: -31.5,-65.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18300 + - uid: 18161 + components: + - type: Transform + pos: -30.5,-65.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18300 + - uid: 18162 + components: + - type: Transform + pos: -29.5,-65.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18300 + - uid: 18163 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,2.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18296 + - uid: 18164 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,1.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18296 + - uid: 18165 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,0.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18296 + - uid: 18166 + components: + - type: Transform + pos: 33.5,12.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18297 + - uid: 18167 + components: + - type: Transform + pos: 34.5,12.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18297 + - uid: 18168 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 44.5,17.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18271 + - uid: 18169 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,17.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18271 + - uid: 18170 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 44.5,14.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18298 + - uid: 18171 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 44.5,13.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18298 + - uid: 18172 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 44.5,8.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18296 + - uid: 18173 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 44.5,7.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18296 + - uid: 18174 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 44.5,6.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18296 + - uid: 18175 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 45.5,-0.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18299 + - uid: 18176 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,41.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18295 + - uid: 18177 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.5,43.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18294 + - uid: 18178 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.5,35.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18293 + - uid: 18179 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.5,36.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18293 + - uid: 18180 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,20.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18273 + - uid: 18181 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,50.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18302 + - uid: 18182 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,51.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18302 + - uid: 18183 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,47.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18282 + - uid: 18184 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,48.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18282 + - uid: 18185 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,49.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18282 + - uid: 18186 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,51.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18282 + - uid: 18187 + components: + - type: Transform + pos: 7.5,45.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18282 + - uid: 18188 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,53.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18285 + - uid: 18189 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,54.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18285 + - uid: 18190 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,55.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18285 + - uid: 18191 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,-20.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18288 + - uid: 18192 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,-21.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18288 + - uid: 18193 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,-22.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18288 + - uid: 18194 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,-23.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18288 + - uid: 18195 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,-25.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18288 + - uid: 18196 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,-28.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18289 + - uid: 18197 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,-28.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18289 + - uid: 18198 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,-30.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18289 + - uid: 18199 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,-28.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18289 + - uid: 18200 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,-28.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18289 + - uid: 18201 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,-28.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18289 + - uid: 18202 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,-28.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18289 + - uid: 18203 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,-28.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18289 + - uid: 18204 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,-32.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18289 + - uid: 18205 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,-51.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18310 + - uid: 18206 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,-49.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18310 + - uid: 18207 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 12.5,-49.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18310 + - uid: 18208 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,-49.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18310 + - uid: 18209 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 44.5,18.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18271 + - uid: 18210 + components: + - type: Transform + pos: 22.5,-21.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18305 + - uid: 18211 + components: + - type: Transform + pos: 23.5,-21.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18305 + - uid: 18212 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,18.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18273 + - uid: 18213 + components: + - type: Transform + pos: 22.5,3.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18268 + - uid: 18214 + components: + - type: Transform + pos: 23.5,3.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18268 + - uid: 18215 + components: + - type: Transform + pos: 12.5,-17.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18269 +- proto: ShuttersRadiationOpen + entities: + - uid: 18216 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,-68.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18265 + - uid: 18217 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,-69.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18265 + - uid: 18218 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,-70.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18265 + - uid: 18219 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,-68.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18265 + - uid: 18220 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,-69.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18265 + - uid: 18221 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,-70.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18265 +- proto: ShuttersWindowOpen + entities: + - uid: 18229 + components: + - type: Transform + pos: -11.5,-33.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18248 + - uid: 18230 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,-36.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18249 + - uid: 18231 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,-39.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18250 + - uid: 18232 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,-42.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18251 + - uid: 18233 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,-45.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18252 + - uid: 18234 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,-48.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18253 + - uid: 18235 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,-42.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18254 + - uid: 18236 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,46.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18282 + - uid: 18237 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,50.5 + parent: 2 + - type: DeviceLinkSink + links: + - 18282 +- proto: SignalButton + entities: + - uid: 18238 + components: + - type: MetaData + name: Espaçar + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.502998,-33.73403 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 1001: + - Pressed: Toggle + 1002: + - Pressed: Toggle + - uid: 18239 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,6.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 18117: + - Pressed: Toggle + 18116: + - Pressed: Toggle + - uid: 18240 + components: + - type: Transform + pos: -4.5,-10.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 18118: + - Pressed: Toggle + 18119: + - Pressed: Toggle + - uid: 18241 + components: + - type: Transform + pos: -44.30047,-0.23135054 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 998: + - Pressed: Toggle + - uid: 18242 + components: + - type: Transform + pos: -44.824947,-0.23135054 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 999: + - Pressed: Toggle + - uid: 18243 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,9.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 18120: + - Pressed: Toggle + 18121: + - Pressed: Toggle + - uid: 18244 + components: + - type: Transform + pos: -40.389587,15.495882 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 1000: + - Pressed: Toggle + - uid: 18246 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,-41.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 18130: + - Pressed: Toggle + 18129: + - Pressed: Toggle + 18128: + - Pressed: Toggle + - uid: 18247 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,-41.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 18130: + - Pressed: Toggle + 18129: + - Pressed: Toggle + 18128: + - Pressed: Toggle + - uid: 18248 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,-34.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 18229: + - Pressed: Toggle + - uid: 18249 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,-35.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 18230: + - Pressed: Toggle + - uid: 18250 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,-38.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 18231: + - Pressed: Toggle + - uid: 18251 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,-41.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 18232: + - Pressed: Toggle + - uid: 18252 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,-44.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 18233: + - Pressed: Toggle + - uid: 18253 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,-47.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 18234: + - Pressed: Toggle + - uid: 18254 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,-40.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 18235: + - Pressed: Toggle + - uid: 18255 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -38.5,-45.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 1007: + - Pressed: Toggle + 1006: + - Pressed: Toggle + 1005: + - Pressed: Toggle + - uid: 18256 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -38.5,-45.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 1007: + - Pressed: Toggle + 1006: + - Pressed: Toggle + 1005: + - Pressed: Toggle + - uid: 18257 + components: + - type: MetaData + name: Entrada Sul + - type: Transform + rot: 3.141592653589793 rad + pos: -6.633511,34.39179 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 1017: + - Pressed: Toggle + - uid: 18258 + components: + - type: MetaData + name: Entrada Norte + - type: Transform + rot: 3.141592653589793 rad + pos: -6.3164945,34.39179 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 1018: + - Pressed: Toggle + 1019: + - Pressed: Toggle + - uid: 18259 + components: + - type: MetaData + name: Boltar Portas + - type: Transform + pos: -6.475003,34.690155 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 472: + - Pressed: DoorBolt + 473: + - Pressed: DoorBolt + - uid: 18260 + components: + - type: Transform + pos: -17.5,41.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 18138: + - Pressed: Toggle + 18137: + - Pressed: Toggle + 18139: + - Pressed: Toggle + - uid: 18261 + components: + - type: MetaData + name: Fechar entrada + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.4996314,-18.34956 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 1024: + - Pressed: Toggle + 1025: + - Pressed: Toggle + 1026: + - Pressed: Toggle + - uid: 18262 + components: + - type: MetaData + name: Fechar med + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.4996314,-18.62928 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 1027: + - Pressed: Toggle + 1028: + - Pressed: Toggle + 1029: + - Pressed: Toggle + - uid: 18263 + components: + - type: Transform + pos: 7.5,28.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 18147: + - Pressed: Toggle + 18146: + - Pressed: Toggle + - uid: 18264 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,-42.5 + parent: 2 + - uid: 18265 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,-67.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 18219: + - Pressed: Toggle + 18220: + - Pressed: Toggle + 18221: + - Pressed: Toggle + 18216: + - Pressed: Toggle + 18217: + - Pressed: Toggle + 18218: + - Pressed: Toggle + - uid: 18266 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,-65.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 1015: + - Pressed: Toggle + - uid: 18267 + components: + - type: MetaData + name: Porta + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.493671,-33.286476 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 1016: + - Pressed: Toggle +- proto: SignalButtonDirectional + entities: + - uid: 18268 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,3.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 18143: + - Pressed: Toggle + 18213: + - Pressed: Toggle + 18214: + - Pressed: Toggle + - uid: 18269 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.5,-17.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 18215: + - Pressed: Toggle + 18144: + - Pressed: Toggle + - uid: 18270 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,-61.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 1012: + - Pressed: Toggle + 1011: + - Pressed: Toggle + 1010: + - Pressed: Toggle + - uid: 18271 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,16.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 18169: + - Pressed: Toggle + 18209: + - Pressed: Toggle + 18168: + - Pressed: Toggle + - uid: 18272 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 34.5,-52.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 18142: + - Pressed: Toggle + 18140: + - Pressed: Toggle + 18141: + - Pressed: Toggle + - uid: 18273 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -17.5,22.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 18212: + - Pressed: Toggle + 18180: + - Pressed: Toggle + - uid: 18274 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -40.5,-33.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 18126: + - Pressed: Toggle + 18127: + - Pressed: Toggle + - uid: 18275 + components: + - type: Transform + pos: -39.5,-34.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 18126: + - Pressed: Toggle + 18127: + - Pressed: Toggle + - uid: 18276 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,-10.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 18122: + - Pressed: Toggle + 18123: + - Pressed: Toggle + - uid: 18277 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,-10.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 18122: + - Pressed: Toggle + 18123: + - Pressed: Toggle + - uid: 18278 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,-18.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 18124: + - Pressed: Toggle + 18125: + - Pressed: Toggle + - uid: 18279 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-24.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 1003: + - Pressed: Toggle + 1004: + - Pressed: Toggle + - uid: 18280 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.4963,38.694504 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 150: + - Pressed: DoorBolt + - uid: 18281 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.502518,35.30276 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 149: + - Pressed: DoorBolt + - uid: 18282 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,50.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 18186: + - Pressed: Toggle + 18185: + - Pressed: Toggle + 18184: + - Pressed: Toggle + 18183: + - Pressed: Toggle + 18187: + - Pressed: Toggle + 18237: + - Pressed: Toggle + 18236: + - Pressed: Toggle + - uid: 18283 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,57.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 1021: + - Pressed: Toggle + 1020: + - Pressed: Toggle + - uid: 18284 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 22.5,15.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 18132: + - Pressed: Toggle + 18131: + - Pressed: Toggle + 18133: + - Pressed: Toggle + 18134: + - Pressed: Toggle + 18135: + - Pressed: Toggle + 18136: + - Pressed: Toggle + - uid: 18285 + components: + - type: Transform + pos: 10.5,56.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 18190: + - Pressed: Toggle + 18189: + - Pressed: Toggle + 18188: + - Pressed: Toggle + - uid: 18286 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,69.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 1022: + - Pressed: Toggle + - uid: 18287 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,69.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 1023: + - Pressed: Toggle + - uid: 18288 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 47.502407,-21.314362 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 18191: + - Pressed: Toggle + 18192: + - Pressed: Toggle + 18193: + - Pressed: Toggle + 18194: + - Pressed: Toggle + 18195: + - Pressed: Toggle + - uid: 18289 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-31.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 18197: + - Pressed: Toggle + 18196: + - Pressed: Toggle + 18199: + - Pressed: Toggle + 18200: + - Pressed: Toggle + 18201: + - Pressed: Toggle + 18202: + - Pressed: Toggle + 18203: + - Pressed: Toggle + 18198: + - Pressed: Toggle + 18204: + - Pressed: Toggle + - uid: 18290 + components: + - type: Transform + pos: 10.5,-61.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 1012: + - Pressed: Toggle + 1011: + - Pressed: Toggle + 1010: + - Pressed: Toggle + - uid: 18291 + components: + - type: MetaData + name: SuperMatter lockdown + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-54.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 1032: + - Pressed: Toggle + 1031: + - Pressed: Toggle + 1030: + - Pressed: Toggle + 22610: + - Pressed: Toggle + 22641: + - Pressed: Toggle + 22611: + - Pressed: Toggle + 22640: + - Pressed: Toggle + 154: + - Pressed: Toggle + 22613: + - Pressed: Toggle + 21926: + - Pressed: Toggle + 21933: + - Pressed: Toggle + 21934: + - Pressed: Toggle + 414: + - Pressed: Toggle + 21935: + - Pressed: Toggle + 22845: + - Pressed: Toggle + 21936: + - Pressed: Toggle + 288: + - Pressed: Toggle + 272: + - Pressed: Toggle + 22486: + - Pressed: Toggle + 22464: + - Pressed: Toggle + 189: + - Pressed: Toggle + 22488: + - Pressed: Toggle + 22513: + - Pressed: Toggle + 21918: + - Pressed: Toggle + 21925: + - Pressed: Toggle + - uid: 18292 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,-52.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 18142: + - Pressed: Toggle + 18140: + - Pressed: Toggle + 18141: + - Pressed: Toggle + - uid: 18293 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.5,34.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 18178: + - Pressed: Toggle + 18179: + - Pressed: Toggle + - uid: 18294 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,41.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 18177: + - Pressed: Toggle + - uid: 18295 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,40.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 18145: + - Pressed: Toggle + 18176: + - Pressed: Toggle + - uid: 18296 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,0.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 18165: + - Pressed: Toggle + 18164: + - Pressed: Toggle + 18163: + - Pressed: Toggle + 18174: + - Pressed: Toggle + 18173: + - Pressed: Toggle + 18172: + - Pressed: Toggle + - uid: 18297 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 35.5,12.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 18167: + - Pressed: Toggle + 18166: + - Pressed: Toggle + - uid: 18298 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 44.5,12.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 18171: + - Pressed: Toggle + 18170: + - Pressed: Toggle + - uid: 18299 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,-2.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 18175: + - Pressed: Toggle + - uid: 18300 + components: + - type: Transform + pos: -28.5,-61.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 18162: + - Pressed: Toggle + 18161: + - Pressed: Toggle + 18160: + - Pressed: Toggle + - uid: 18301 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -33.5,-64.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 18159: + - Pressed: Toggle + 18158: + - Pressed: Toggle + - uid: 18302 + components: + - type: Transform + pos: -11.5,52.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 18182: + - Pressed: Toggle + 18181: + - Pressed: Toggle + - uid: 18303 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -37.5,-60.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 18157: + - Pressed: Toggle + - uid: 18304 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,-24.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 18156: + - Pressed: Toggle + 18155: + - Pressed: Toggle + - uid: 18305 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,-21.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 18211: + - Pressed: Toggle + 18210: + - Pressed: Toggle + - uid: 18306 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,8.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 18154: + - Pressed: Toggle + 18152: + - Pressed: Toggle + - uid: 18307 + components: + - type: Transform + pos: -23.5,8.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 18153: + - Pressed: Toggle + - uid: 18308 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,15.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 18151: + - Pressed: Toggle + - uid: 18309 + components: + - type: Transform + pos: -13.5,17.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 18148: + - Pressed: Toggle + 18149: + - Pressed: Toggle + 18150: + - Pressed: Toggle + - uid: 18310 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-53.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 18205: + - Pressed: Toggle + 18208: + - Pressed: Toggle + 18207: + - Pressed: Toggle + 18206: + - Pressed: Toggle + - uid: 18311 + components: + - type: MetaData + name: Abrir vault + - type: Transform + pos: -17.5,37.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 18138: + - Pressed: Toggle + 18137: + - Pressed: Toggle + 18139: + - Pressed: Toggle +- proto: SignalSwitch + entities: + - uid: 18312 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.554577,8.128508 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16543: + - Status: Toggle + 16542: + - Status: Toggle + - uid: 18313 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.535362,6.516772 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16541: + - Status: Toggle + - uid: 18314 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,-2.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16536: + - Status: Toggle + 16537: + - Status: Toggle + - uid: 18315 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,12.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16523: + - Status: Toggle + - uid: 18316 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.523469,13.046127 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16525: + - Status: Toggle + 16524: + - Status: Toggle + 16526: + - Status: Toggle + 16529: + - Status: Toggle + 16528: + - Status: Toggle + 16527: + - Status: Toggle + - uid: 18317 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,12.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16530: + - Status: Toggle + - uid: 18318 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,15.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16531: + - Status: Toggle + 16522: + - Status: Toggle + 16533: + - Status: Toggle + 16532: + - Status: Toggle + - uid: 18319 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,14.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16534: + - Status: Toggle + 16535: + - Status: Toggle + - uid: 18320 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,13.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16947: + - Status: Toggle + 16948: + - Status: Toggle + - uid: 18321 + components: + - type: Transform + pos: -41.5,-7.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16556: + - Status: Toggle + 16555: + - Status: Toggle + 16554: + - Status: Toggle + 16553: + - Status: Toggle + - uid: 18322 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -43.5,5.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16544: + - Status: Toggle + 16546: + - Status: Toggle + 16545: + - Status: Toggle + - uid: 18323 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,3.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16548: + - Status: Toggle + 16549: + - Status: Toggle + 16552: + - Status: Toggle + 16551: + - Status: Toggle + 16550: + - Status: Toggle + - uid: 18324 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,-15.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16558: + - Status: Toggle + 16557: + - Status: Toggle + - uid: 18325 + components: + - type: Transform + pos: -40.63201,15.495882 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16563: + - Status: Toggle + - uid: 18326 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,-19.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16564: + - Status: Toggle + - uid: 18327 + components: + - type: Transform + pos: -36.5,-14.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16565: + - Status: Toggle + 16934: + - Status: Toggle + 16935: + - Status: Toggle + - uid: 18328 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -30.5,-36.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16573: + - Status: Toggle + - uid: 18329 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,-41.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16575: + - Status: Toggle + 16577: + - Status: Toggle + 16574: + - Status: Toggle + - uid: 18330 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,-19.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16586: + - Status: Toggle + 16587: + - Status: Toggle + 16584: + - Status: Toggle + 16582: + - Status: Toggle + 16585: + - Status: Toggle + 16583: + - Status: Toggle + - uid: 18331 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,-20.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16589: + - Status: Toggle + 16588: + - Status: Toggle + 1016: + - Status: Toggle + - uid: 18332 + components: + - type: Transform + pos: -10.5,-20.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16590: + - Status: Toggle + - uid: 18333 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,-34.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16581: + - Status: Toggle + - uid: 18334 + components: + - type: Transform + pos: -22.5,-29.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16592: + - Status: Toggle + 16591: + - Status: Toggle + - uid: 18335 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,-34.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16598: + - Status: Toggle + 16597: + - Status: Toggle + 16596: + - Status: Toggle + 16595: + - Status: Toggle + 16954: + - Status: Toggle + 16955: + - Status: Toggle + 16956: + - Status: Toggle + 16957: + - Status: Toggle + 16958: + - Status: Toggle + 16959: + - Status: Toggle + 16960: + - Status: Toggle + 16961: + - Status: Toggle + 16601: + - Status: Toggle + 16600: + - Status: Toggle + 16599: + - Status: Toggle + - uid: 18336 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,-34.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16596: + - Status: Toggle + 16595: + - Status: Toggle + - uid: 18337 + components: + - type: Transform + pos: -2.5,-34.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16620: + - Status: Toggle + 16975: + - Status: Toggle + - uid: 18338 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,-5.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16625: + - Status: Toggle + - uid: 18339 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,-5.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16625: + - Status: Toggle + - uid: 18340 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,-29.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16580: + - Status: Toggle + 16602: + - Status: Toggle + 16603: + - Status: Toggle + 16604: + - Status: Toggle + - uid: 18341 + components: + - type: Transform + pos: -27.5,-28.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16570: + - Status: Toggle + 16579: + - Status: Toggle + 16571: + - Status: Toggle + 16572: + - Status: Toggle + - uid: 18342 + components: + - type: Transform + pos: 8.5,28.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16508: + - Status: Toggle + 16842: + - Status: Toggle + - uid: 18343 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,-40.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16578: + - Status: Toggle + - uid: 18344 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,3.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16940: + - Status: Toggle + - uid: 18345 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -46.5,-33.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16613: + - Status: Toggle + 16616: + - Status: Toggle + 16618: + - Status: Toggle + 16614: + - Status: Toggle + 16619: + - Status: Toggle + 16612: + - Status: Toggle +- proto: SignalSwitchDirectional + entities: + - uid: 18346 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,1.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 17015: + - Status: Toggle + 17018: + - Status: Toggle + 17017: + - Status: Toggle + 8813: + - Status: Toggle + 10913: + - Status: Toggle + - uid: 18347 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 43.5,-2.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16938: + - Status: Toggle + - uid: 18348 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.4998345,-24.30895 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16593: + - Status: Toggle + 16594: + - Status: Toggle + - uid: 18349 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -40.5,-39.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16607: + - Status: Toggle + 16605: + - Status: Toggle + 16606: + - Status: Toggle + - uid: 18350 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -30.5,-49.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16610: + - Status: Toggle + 16611: + - Status: Toggle + 16609: + - Status: Toggle + 16962: + - Status: Toggle + 16608: + - Status: Toggle + 16963: + - Status: Toggle + - uid: 18351 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,-57.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16965: + - Status: Toggle + - uid: 18352 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -33.5,-62.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16966: + - Status: Toggle + - uid: 18353 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,-59.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16968: + - Status: Toggle + 16967: + - Status: Toggle + 16969: + - Status: Toggle + 16970: + - Status: Toggle + 16971: + - Status: Toggle + - uid: 18354 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,18.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16632: + - Status: Toggle + - uid: 18355 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,17.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16631: + - Status: Toggle + 16630: + - Status: Toggle + 16629: + - Status: Toggle + 16628: + - Status: Toggle + - uid: 18356 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 20.5,22.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16626: + - Status: Toggle + 16627: + - Status: Toggle + - uid: 18357 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 20.5,22.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16626: + - Status: Toggle + 16627: + - Status: Toggle + - uid: 18358 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,12.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16634: + - Status: Toggle + 16635: + - Status: Toggle + 16633: + - Status: Toggle + - uid: 18359 + components: + - type: Transform + pos: 27.5,12.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16636: + - Status: Toggle + 16637: + - Status: Toggle + 16638: + - Status: Toggle + 16639: + - Status: Toggle + 16640: + - Status: Toggle + 16641: + - Status: Toggle + 16667: + - Status: Toggle + 16666: + - Status: Toggle + - uid: 18360 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,18.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16643: + - Status: Toggle + 16644: + - Status: Toggle + 16642: + - Status: Toggle + - uid: 18361 + components: + - type: Transform + pos: 40.5,20.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16645: + - Status: Toggle + - uid: 18362 + components: + - type: Transform + pos: 41.5,16.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16646: + - Status: Toggle + 16647: + - Status: Toggle + - uid: 18363 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,23.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16980: + - Status: Toggle + 16509: + - Status: Toggle + - uid: 18364 + components: + - type: Transform + pos: 34.5,25.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16648: + - Status: Toggle + - uid: 18365 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,24.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16649: + - Status: Toggle + - uid: 18366 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,35.5 + parent: 2 + - type: SignalSwitch + state: True + - type: DeviceLinkSource + linkedPorts: + 16651: + - Status: Toggle + 16650: + - Status: Toggle + 16652: + - Status: Toggle + 16653: + - Status: Toggle + - uid: 18367 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 16.5,37.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16655: + - Status: Toggle + 16656: + - Status: Toggle + - uid: 18368 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 14.5,34.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16654: + - Status: Toggle + - uid: 18369 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 14.5,41.5 + parent: 2 + - uid: 18370 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 18.5,41.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16983: + - Status: Toggle + 16984: + - Status: Toggle + - uid: 18371 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,38.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16986: + - Status: Toggle + - uid: 18372 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,35.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16985: + - Status: Toggle + - uid: 18373 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 45.5,41.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16662: + - Status: Toggle + 16661: + - Status: Toggle + 16840: + - Status: Toggle + - uid: 18374 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,25.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16657: + - Status: Toggle + 16660: + - Status: Toggle + 16659: + - Status: Toggle + 16658: + - Status: Toggle + - uid: 18375 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,28.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16665: + - Status: Toggle + 16664: + - Status: Toggle + 16663: + - Status: Toggle + - uid: 18376 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,40.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16899: + - Status: Toggle + 16900: + - Status: Toggle + 16898: + - Status: Toggle + 16897: + - Status: Toggle + - uid: 18377 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 45.5,-15.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16679: + - Status: Toggle + 16891: + - Status: Toggle + - uid: 18378 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -21.5,17.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16683: + - Status: Toggle + 16684: + - Status: Toggle + - uid: 18379 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,22.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16995: + - Status: Toggle + - uid: 18380 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,21.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16687: + - Status: Toggle + - uid: 18381 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,22.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16996: + - Status: Toggle + - uid: 18382 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,22.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16711: + - Status: Toggle + 16712: + - Status: Toggle + 16714: + - Status: Toggle + 16713: + - Status: Toggle + - uid: 18383 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,31.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16693: + - Status: Toggle + 16694: + - Status: Toggle + 16695: + - Status: Toggle + - uid: 18384 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,30.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16696: + - Status: Toggle + - uid: 18385 + components: + - type: Transform + pos: -16.5,41.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16697: + - Status: Toggle + 16698: + - Status: Toggle + 16699: + - Status: Toggle + - uid: 18386 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -18.5,31.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16700: + - Status: Toggle + - uid: 18387 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,37.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16701: + - Status: Toggle + 16702: + - Status: Toggle + - uid: 18388 + components: + - type: Transform + pos: -24.5,42.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16704: + - Status: Toggle + 16703: + - Status: Toggle + - uid: 18389 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,42.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16706: + - Status: Toggle + 16705: + - Status: Toggle + - uid: 18390 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,34.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16708: + - Status: Toggle + 16707: + - Status: Toggle + 16709: + - Status: Toggle + - uid: 18391 + components: + - type: Transform + pos: -32.5,34.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 17004: + - Status: Toggle + - uid: 18392 + components: + - type: Transform + pos: -32.5,37.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 17003: + - Status: Toggle + - uid: 18393 + components: + - type: Transform + pos: -32.5,40.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 17002: + - Status: Toggle + - uid: 18394 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -38.5,31.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16716: + - Status: Toggle + 16715: + - Status: Toggle + 16719: + - Status: Toggle + 16717: + - Status: Toggle + 16718: + - Status: Toggle + - uid: 18395 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,23.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16725: + - Status: Toggle + 16724: + - Status: Toggle + 16721: + - Status: Toggle + 16723: + - Status: Toggle + 16722: + - Status: Toggle + - uid: 18396 + components: + - type: Transform + pos: -42.5,27.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16720: + - Status: Toggle + - uid: 18397 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,30.5 + parent: 2 + - uid: 18398 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,33.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16734: + - Status: Toggle + 16736: + - Status: Toggle + 16735: + - Status: Toggle + 16737: + - Status: Toggle + - uid: 18399 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,50.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16738: + - Status: Toggle + 17008: + - Status: Toggle + - uid: 18400 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,56.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16740: + - Status: Toggle + 16739: + - Status: Toggle + - uid: 18401 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,49.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16741: + - Status: Toggle + 16742: + - Status: Toggle + 16743: + - Status: Toggle + - uid: 18402 + components: + - type: Transform + pos: 7.5,57.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16745: + - Status: Toggle + 16744: + - Status: Toggle + - uid: 18403 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,57.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16757: + - Status: Toggle + 16758: + - Status: Toggle + 16756: + - Status: Toggle + 16759: + - Status: Toggle + - uid: 18404 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,-8.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 17013: + - Status: Toggle + 17014: + - Status: Toggle + 16778: + - Status: Toggle + - uid: 18405 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,-13.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16779: + - Status: Toggle + 16780: + - Status: Toggle + - uid: 18406 + components: + - type: Transform + pos: 17.5,-17.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16782: + - Status: Toggle + 16781: + - Status: Toggle + - uid: 18407 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,-18.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16785: + - Status: Toggle + 16784: + - Status: Toggle + 16783: + - Status: Toggle + - uid: 18408 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,-16.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16786: + - Status: Toggle + 16787: + - Status: Toggle + 16788: + - Status: Toggle + 16789: + - Status: Toggle + - uid: 18409 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,-19.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16791: + - Status: Toggle + - uid: 18410 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 47.5,-21.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16792: + - Status: Toggle + 16790: + - Status: Toggle + - uid: 18411 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 37.5,-28.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16795: + - Status: Toggle + 16793: + - Status: Toggle + 16797: + - Status: Toggle + 16798: + - Status: Toggle + 16794: + - Status: Toggle + 16796: + - Status: Toggle + - uid: 18412 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 37.5,-28.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16794: + - Status: Toggle + 16793: + - Status: Toggle + 16795: + - Status: Toggle + 16797: + - Status: Toggle + 16798: + - Status: Toggle + 16796: + - Status: Toggle + - uid: 18413 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,-33.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16800: + - Status: Toggle + 16799: + - Status: Toggle + 16801: + - Status: Toggle + 16802: + - Status: Toggle + - uid: 18414 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,-33.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16804: + - Status: Toggle + 16805: + - Status: Toggle + - uid: 18415 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-19.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16806: + - Status: Toggle + - uid: 18416 + components: + - type: Transform + pos: 8.5,-17.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16807: + - Status: Toggle + - uid: 18417 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.5,-27.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16811: + - Status: Toggle + 16809: + - Status: Toggle + 16810: + - Status: Toggle + 16808: + - Status: Toggle + - uid: 18418 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,-27.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16818: + - Status: Toggle + 16815: + - Status: Toggle + 16817: + - Status: Toggle + 16816: + - Status: Toggle + 16814: + - Status: Toggle + 16813: + - Status: Toggle + 16812: + - Status: Toggle + 16841: + - Status: Toggle + - uid: 18419 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.5,-26.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16820: + - Status: Toggle + 16819: + - Status: Toggle + 16822: + - Status: Toggle + 16821: + - Status: Toggle + 16823: + - Status: Toggle + 16824: + - Status: Toggle + - uid: 18420 + components: + - type: Transform + pos: 11.5,-39.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16872: + - Status: Toggle + 16873: + - Status: Toggle + 16876: + - Status: Toggle + 16871: + - Status: Toggle + 16875: + - Status: Toggle + 16886: + - Status: Toggle + 16929: + - Status: Toggle + 16930: + - Status: Toggle + 16926: + - Status: Toggle + 16928: + - Status: Toggle + 16927: + - Status: Toggle + 16925: + - Status: Toggle + 16874: + - Status: Toggle + - uid: 18421 + components: + - type: Transform + pos: 6.5,-38.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16828: + - Status: Toggle + - uid: 18422 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,-51.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16835: + - Status: Toggle + 16836: + - Status: Toggle + 16833: + - Status: Toggle + 16832: + - Status: Toggle + 16831: + - Status: Toggle + - uid: 18423 + components: + - type: Transform + pos: 10.5,-49.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16838: + - Status: Toggle + 16837: + - Status: Toggle + - uid: 18424 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,-51.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16834: + - Status: Toggle + - uid: 18425 + components: + - type: Transform + pos: 34.5,-47.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16887: + - Status: Toggle + - uid: 18426 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-53.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16844: + - Status: Toggle + 16845: + - Status: Toggle + - uid: 18427 + components: + - type: Transform + pos: -1.5,-61.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16864: + - Status: Toggle + 16862: + - Status: Toggle + 16865: + - Status: Toggle + 16866: + - Status: Toggle + 16867: + - Status: Toggle + 16870: + - Status: Toggle + 16869: + - Status: Toggle + 16863: + - Status: Toggle + 16868: + - Status: Toggle + 17021: + - Status: Toggle + 17022: + - Status: Toggle + 17024: + - Status: Toggle + 17023: + - Status: Toggle + - uid: 18428 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-61.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16847: + - Status: Toggle + 16849: + - Status: Toggle + 16846: + - Status: Toggle + 16848: + - Status: Toggle + 16850: + - Status: Toggle + - uid: 18429 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,-60.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16856: + - Status: Toggle + 16855: + - Status: Toggle + 16854: + - Status: Toggle + 16853: + - Status: Toggle + 16852: + - Status: Toggle + 16851: + - Status: Toggle + - uid: 18430 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,-66.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16857: + - Status: Toggle + 16858: + - Status: Toggle + 16859: + - Status: Toggle + 16861: + - Status: Toggle + 16860: + - Status: Toggle + - uid: 18431 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,-56.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16877: + - Status: Toggle + 16923: + - Status: Toggle + 16924: + - Status: Toggle + 16881: + - Status: Toggle + 16883: + - Status: Toggle + 16884: + - Status: Toggle + 16882: + - Status: Toggle + 16879: + - Status: Toggle + 16885: + - Status: Toggle + 16878: + - Status: Toggle + 16880: + - Status: Toggle + - uid: 18432 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-12.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16944: + - Status: Toggle + - uid: 18433 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,-47.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16507: + - Status: Toggle + 16888: + - Status: Toggle + 17041: + - Status: Toggle + - uid: 18434 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 18.5,19.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 16890: + - Status: Toggle + 16889: + - Status: Toggle +- proto: SignalTrigger + entities: + - uid: 18435 + components: + - type: Transform + pos: -41.34336,-33.515427 + parent: 2 + - uid: 18436 + components: + - type: Transform + pos: -41.34336,-33.515427 + parent: 2 +- proto: SignAnomaly2 + entities: + - uid: 18437 + components: + - type: Transform + pos: -44.5,-37.5 + parent: 2 +- proto: SignAtmos + entities: + - uid: 18438 + components: + - type: Transform + pos: 9.5,-39.5 + parent: 2 + - uid: 18439 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,-43.5 + parent: 2 +- proto: SignBar + entities: + - uid: 18440 + components: + - type: Transform + pos: 13.5,3.5 + parent: 2 + - uid: 18441 + components: + - type: Transform + pos: 26.5,3.5 + parent: 2 +- proto: SignBio + entities: + - uid: 18442 + components: + - type: Transform + pos: 10.5,-5.5 + parent: 2 + - uid: 18443 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,-26.5 + parent: 2 + - uid: 18444 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-26.5 + parent: 2 +- proto: SignCargo + entities: + - uid: 18445 + components: + - type: Transform + pos: -11.5,3.5 + parent: 2 + - uid: 18446 + components: + - type: Transform + pos: -31.5,3.5 + parent: 2 +- proto: SignChapel + entities: + - uid: 18447 + components: + - type: Transform + pos: 13.5,-1.5 + parent: 2 +- proto: SignChemistry1 + entities: + - uid: 18448 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,-35.5 + parent: 2 + - uid: 18449 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 17.5,-35.5 + parent: 2 +- proto: SignCloning + entities: + - uid: 18450 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,-26.5 + parent: 2 + - uid: 18451 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,-26.5 + parent: 2 +- proto: SignCryogenicsMed + entities: + - uid: 18452 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,22.5 + parent: 2 +- proto: SignDoors + entities: + - uid: 18453 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 45.5,-9.5 + parent: 2 +- proto: SignEngineering + entities: + - uid: 18454 + components: + - type: Transform + pos: -1.5,-11.5 + parent: 2 + - uid: 18455 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-38.5 + parent: 2 + - uid: 18456 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-43.5 + parent: 2 +- proto: SignEscapePods + entities: + - uid: 18458 + components: + - type: Transform + pos: -35.5,-35.5 + parent: 2 + - uid: 18459 + components: + - type: Transform + pos: 31.5,31.5 + parent: 2 + - uid: 18460 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,40.5 + parent: 2 + - uid: 18461 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,37.5 + parent: 2 + - uid: 23933 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -43.5,-27.5 + parent: 2 +- proto: SignFire + entities: + - uid: 18462 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,-53.5 + parent: 2 + - uid: 18463 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -16.5,-62.5 + parent: 2 +- proto: SignGravity + entities: + - uid: 18464 + components: + - type: Transform + pos: 3.5,31.5 + parent: 2 +- proto: SignHead + entities: + - uid: 18465 + components: + - type: Transform + pos: 3.5,13.5 + parent: 2 + - uid: 18466 + components: + - type: Transform + pos: 3.5,54.5 + parent: 2 + - uid: 18467 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,54.5 + parent: 2 + - uid: 18468 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,51.5 + parent: 2 + - uid: 18469 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,-22.5 + parent: 2 +- proto: SignHydro2 + entities: + - uid: 18470 + components: + - type: Transform + pos: 32.5,3.5 + parent: 2 + - uid: 18471 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,12.5 + parent: 2 +- proto: SignJanitor + entities: + - uid: 18473 + components: + - type: Transform + pos: 9.5,10.5 + parent: 2 +- proto: SignKiddiePlaque + entities: + - uid: 18474 + components: + - type: Transform + pos: 3.5,5.5 + parent: 2 +- proto: SignMedical + entities: + - uid: 18475 + components: + - type: Transform + pos: 3.5,-11.5 + parent: 2 + - uid: 18476 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 39.5,-13.5 + parent: 2 + - uid: 18477 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 35.5,-13.5 + parent: 2 + - uid: 18478 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,37.5 + parent: 2 + - uid: 18479 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,33.5 + parent: 2 + - uid: 18480 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-21.5 + parent: 2 + - uid: 18481 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-27.5 + parent: 2 +- proto: SignNosmoking + entities: + - uid: 18482 + components: + - type: Transform + pos: -19.5,-25.5 + parent: 2 + - uid: 18483 + components: + - type: Transform + pos: -24.5,-67.5 + parent: 2 + - uid: 18484 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 32.5,12.5 + parent: 2 + - uid: 18485 + components: + - type: Transform + pos: 18.5,34.5 + parent: 2 + - uid: 18486 + components: + - type: Transform + pos: 15.5,-39.5 + parent: 2 + - uid: 18487 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-54.5 + parent: 2 + - uid: 18488 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,-61.5 + parent: 2 + - uid: 18489 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,-61.5 + parent: 2 +- proto: SignRadiationMed + entities: + - uid: 18490 + components: + - type: Transform + pos: -39.5,15.5 + parent: 2 + - uid: 18491 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,-59.5 + parent: 2 + - uid: 18492 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,-54.5 + parent: 2 + - uid: 18493 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,-57.5 + parent: 2 + - uid: 18494 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,-57.5 + parent: 2 +- proto: SignRobo + entities: + - uid: 18495 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -27.5,-19.5 + parent: 2 +- proto: SignScience + entities: + - uid: 18496 + components: + - type: Transform + pos: -11.5,-1.5 + parent: 2 + - uid: 18497 + components: + - type: Transform + pos: -31.5,-14.5 + parent: 2 + - uid: 18498 + components: + - type: Transform + pos: -35.5,-14.5 + parent: 2 + - uid: 18499 + components: + - type: Transform + pos: -31.5,-25.5 + parent: 2 + - uid: 18500 + components: + - type: Transform + pos: -27.5,-25.5 + parent: 2 +- proto: SignSecurearea + entities: + - uid: 18501 + components: + - type: Transform + pos: 8.5,-61.5 + parent: 2 + - uid: 18502 + components: + - type: Transform + pos: 14.5,-61.5 + parent: 2 + - uid: 18503 + components: + - type: Transform + pos: 10.5,-7.5 + parent: 2 + - uid: 18504 + components: + - type: Transform + pos: -32.5,13.5 + parent: 2 + - uid: 18505 + components: + - type: Transform + pos: -34.5,18.5 + parent: 2 + - uid: 18506 + components: + - type: Transform + pos: -80.5,-55.5 + parent: 2 + - uid: 18507 + components: + - type: Transform + pos: -80.5,-49.5 + parent: 2 + - uid: 18508 + components: + - type: Transform + pos: -77.5,-54.5 + parent: 2 + - uid: 18509 + components: + - type: Transform + pos: -77.5,-50.5 + parent: 2 + - uid: 18510 + components: + - type: Transform + pos: -83.5,-50.5 + parent: 2 + - uid: 18511 + components: + - type: Transform + pos: -83.5,-54.5 + parent: 2 + - uid: 18512 + components: + - type: Transform + pos: -33.5,34.5 + parent: 2 + - uid: 18513 + components: + - type: Transform + pos: -33.5,37.5 + parent: 2 + - uid: 18514 + components: + - type: Transform + pos: -33.5,40.5 + parent: 2 + - uid: 18515 + components: + - type: Transform + pos: -9.5,46.5 + parent: 2 + - uid: 18516 + components: + - type: Transform + pos: -3.5,41.5 + parent: 2 + - uid: 18517 + components: + - type: Transform + pos: -1.5,43.5 + parent: 2 + - uid: 18518 + components: + - type: Transform + pos: 11.5,51.5 + parent: 2 + - uid: 18519 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,76.5 + parent: 2 + - uid: 18520 + components: + - type: Transform + pos: 6.5,-61.5 + parent: 2 + - uid: 18521 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-65.5 + parent: 2 + - uid: 18522 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-65.5 + parent: 2 + - uid: 18523 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-71.5 + parent: 2 + - uid: 18524 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,-71.5 + parent: 2 +- proto: SignSecurity + entities: + - uid: 18525 + components: + - type: Transform + pos: -1.5,13.5 + parent: 2 + - uid: 18526 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,20.5 + parent: 2 + - uid: 18527 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,18.5 + parent: 2 + - uid: 18528 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,36.5 + parent: 2 + - uid: 18529 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,39.5 + parent: 2 +- proto: SignShock + entities: + - uid: 18530 + components: + - type: Transform + pos: -34.5,13.5 + parent: 2 + - uid: 18531 + components: + - type: Transform + pos: -32.5,18.5 + parent: 2 + - uid: 18532 + components: + - type: Transform + pos: -32.5,-54.5 + parent: 2 + - uid: 18533 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,35.5 + parent: 2 + - uid: 18534 + components: + - type: Transform + pos: 5.5,45.5 + parent: 2 +- proto: SignSmoking + entities: + - uid: 18535 + components: + - type: Transform + pos: -22.5,-65.5 + parent: 2 + - uid: 18536 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 20.5,-21.5 + parent: 2 + - uid: 18537 + components: + - type: Transform + pos: 0.5,-77.5 + parent: 2 + - uid: 18538 + components: + - type: Transform + pos: 37.5,-41.5 + parent: 2 +- proto: SignSomethingOld + entities: + - uid: 18539 + components: + - type: Transform + pos: 37.5,-39.5 + parent: 2 +- proto: SignSomethingOld2 + entities: + - uid: 18540 + components: + - type: Transform + pos: 35.5,-35.5 + parent: 2 +- proto: SignSpace + entities: + - uid: 18541 + components: + - type: Transform + pos: -39.5,-15.5 + parent: 2 + - uid: 18542 + components: + - type: Transform + pos: -36.5,-56.5 + parent: 2 + - uid: 18543 + components: + - type: Transform + pos: 18.5,46.5 + parent: 2 + - uid: 18544 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 45.5,-13.5 + parent: 2 + - uid: 18545 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 45.5,-5.5 + parent: 2 + - uid: 18546 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,-60.5 + parent: 2 +- proto: SignTelecomms + entities: + - uid: 18547 + components: + - type: Transform + pos: 3.5,36.5 + parent: 2 + - uid: 18548 + components: + - type: Transform + pos: -25.5,-32.5 + parent: 2 +- proto: SignVirology + entities: + - uid: 18549 + components: + - type: Transform + pos: 37.5,-32.5 + parent: 2 + - uid: 18550 + components: + - type: Transform + pos: 37.5,-26.5 + parent: 2 +- proto: SinkWide + entities: + - uid: 18552 + components: + - type: Transform + pos: 19.5,14.5 + parent: 2 + - uid: 18553 + components: + - type: Transform + pos: 8.5,13.5 + parent: 2 + - uid: 18554 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-13.5 + parent: 2 + - uid: 18555 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-13.5 + parent: 2 + - uid: 18556 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -28.5,-27.5 + parent: 2 + - uid: 18557 + components: + - type: Transform + pos: -2.5,-26.5 + parent: 2 + - uid: 18558 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,-49.5 + parent: 2 + - uid: 18559 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,-35.5 + parent: 2 + - uid: 18560 + components: + - type: Transform + pos: 20.5,18.5 + parent: 2 + - uid: 18561 + components: + - type: Transform + pos: 36.5,24.5 + parent: 2 + - uid: 18562 + components: + - type: Transform + pos: 37.5,24.5 + parent: 2 + - uid: 18563 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 36.5,21.5 + parent: 2 + - uid: 18564 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 36.5,22.5 + parent: 2 + - uid: 18565 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,38.5 + parent: 2 + - uid: 18566 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,32.5 + parent: 2 + - uid: 18567 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,35.5 + parent: 2 + - uid: 18568 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,38.5 + parent: 2 + - uid: 18569 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -42.5,36.5 + parent: 2 + - uid: 18570 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -42.5,29.5 + parent: 2 + - uid: 18571 + components: + - type: Transform + pos: -10.5,52.5 + parent: 2 + - uid: 18572 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,-15.5 + parent: 2 + - uid: 18573 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,-28.5 + parent: 2 + - uid: 18574 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,-20.5 + parent: 2 + - uid: 18575 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,-19.5 + parent: 2 + - uid: 18576 + components: + - type: Transform + pos: 16.5,-22.5 + parent: 2 + - uid: 18577 + components: + - type: Transform + pos: 21.5,-50.5 + parent: 2 + - uid: 18578 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,-12.5 + parent: 2 +- proto: SmallLight + entities: + - uid: 18579 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,-69.5 + parent: 2 + - uid: 18580 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,-66.5 + parent: 2 +- proto: SmartFridge + entities: + - uid: 9916 + components: + - type: Transform + pos: -34.5,-25.5 + parent: 2 + - uid: 12885 + components: + - type: Transform + pos: -32.5,-23.5 + parent: 2 + - uid: 18582 + components: + - type: Transform + pos: -20.5,-19.5 + parent: 2 + - uid: 18583 + components: + - type: Transform + pos: -5.5,-34.5 + parent: 2 + - uid: 18584 + components: + - type: Transform + pos: -25.5,-61.5 + parent: 2 + - uid: 18585 + components: + - type: Transform + pos: 27.5,16.5 + parent: 2 + - uid: 18586 + components: + - type: Transform + pos: 34.5,20.5 + parent: 2 + - uid: 18587 + components: + - type: Transform + pos: 17.5,-12.5 + parent: 2 + - uid: 18588 + components: + - type: Transform + pos: 42.5,-27.5 + parent: 2 + - uid: 18589 + components: + - type: Transform + pos: 42.5,-30.5 + parent: 2 + - uid: 18590 + components: + - type: Transform + pos: 7.5,-28.5 + parent: 2 + - uid: 18591 + components: + - type: Transform + pos: 5.5,-53.5 + parent: 2 + - uid: 18592 + components: + - type: Transform + pos: 47.5,-38.5 + parent: 2 +- proto: SMESBasic + entities: + - uid: 5940 + components: + - type: Transform + pos: 34.5,-46.5 + parent: 2 + - uid: 18594 + components: + - type: MetaData + name: SMES Solares Sudoeste + - type: Transform + pos: -35.5,-56.5 + parent: 2 + - uid: 18595 + components: + - type: MetaData + name: SMES Solares Nordeste + - type: Transform + pos: 45.5,24.5 + parent: 2 + - uid: 18596 + components: + - type: MetaData + name: SMES Gravidade + - type: Transform + pos: 4.5,32.5 + parent: 2 + - uid: 18597 + components: + - type: MetaData + name: SMES da I.A. + - type: Transform + pos: -3.5,77.5 + parent: 2 + - uid: 18598 + components: + - type: MetaData + name: SMES Telecomunicações + - type: Transform + pos: 8.5,34.5 + parent: 2 + - uid: 18599 + components: + - type: MetaData + name: SMES Banco + - type: Transform + pos: -19.5,-55.5 + parent: 2 + - uid: 18600 + components: + - type: MetaData + name: SMES Banco + - type: Transform + pos: -18.5,-55.5 + parent: 2 + - uid: 18601 + components: + - type: MetaData + name: SMES Banco + - type: Transform + pos: -17.5,-55.5 + parent: 2 + - uid: 18602 + components: + - type: MetaData + name: SMES Banco + - type: Transform + pos: -20.5,-58.5 + parent: 2 + - uid: 18603 + components: + - type: MetaData + name: SMES Banco + - type: Transform + pos: -20.5,-57.5 + parent: 2 + - uid: 18604 + components: + - type: MetaData + name: SMES Banco + - type: Transform + pos: -20.5,-56.5 + parent: 2 +- proto: SMESMachineCircuitboard + entities: + - uid: 18605 + components: + - type: Transform + pos: -2.410386,-37.406345 + parent: 2 +- proto: Soap + entities: + - uid: 18606 + components: + - type: Transform + pos: -12.5,6.5 + parent: 2 + - uid: 18607 + components: + - type: Transform + pos: 14.411409,27.48134 + parent: 2 +- proto: SoapNT + entities: + - uid: 18608 + components: + - type: Transform + pos: 40.506535,21.44361 + parent: 2 +- proto: soda_dispenser + entities: + - uid: 18609 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,-62.5 + parent: 2 + - uid: 18610 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,14.5 + parent: 2 +- proto: SolarAssembly + entities: + - uid: 18611 + components: + - type: Transform + pos: 11.5,-70.5 + parent: 2 + - uid: 18612 + components: + - type: Transform + pos: 12.5,-70.5 + parent: 2 + - uid: 18613 + components: + - type: Transform + pos: 13.5,-69.5 + parent: 2 + - uid: 18614 + components: + - type: Transform + pos: 11.5,-69.5 + parent: 2 +- proto: SolarControlComputerCircuitboard + entities: + - uid: 18615 + components: + - type: Transform + pos: -2.34201,-37.3504 + parent: 2 +- proto: SolarPanel + entities: + - uid: 18616 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -51.5,-63.5 + parent: 2 + - uid: 18617 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -55.5,-57.5 + parent: 2 + - uid: 18618 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -55.5,-58.5 + parent: 2 + - uid: 18619 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -55.5,-59.5 + parent: 2 + - uid: 18620 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -55.5,-63.5 + parent: 2 + - uid: 18621 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -55.5,-64.5 + parent: 2 + - uid: 18622 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -55.5,-65.5 + parent: 2 + - uid: 18623 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -53.5,-65.5 + parent: 2 + - uid: 18624 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -53.5,-64.5 + parent: 2 + - uid: 18625 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -53.5,-63.5 + parent: 2 + - uid: 18626 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -53.5,-59.5 + parent: 2 + - uid: 18627 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -53.5,-58.5 + parent: 2 + - uid: 18628 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -53.5,-57.5 + parent: 2 + - uid: 18629 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -51.5,-57.5 + parent: 2 + - uid: 18630 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -51.5,-58.5 + parent: 2 + - uid: 18631 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -51.5,-59.5 + parent: 2 + - uid: 18632 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -49.5,-57.5 + parent: 2 + - uid: 18633 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -49.5,-58.5 + parent: 2 + - uid: 18634 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -49.5,-59.5 + parent: 2 + - uid: 18635 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -51.5,-64.5 + parent: 2 + - uid: 18636 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -51.5,-65.5 + parent: 2 + - uid: 18637 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -49.5,-63.5 + parent: 2 + - uid: 18638 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -49.5,-64.5 + parent: 2 + - uid: 18639 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -49.5,-65.5 + parent: 2 + - uid: 18640 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -47.5,-63.5 + parent: 2 + - uid: 18641 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -47.5,-64.5 + parent: 2 + - uid: 18642 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -47.5,-65.5 + parent: 2 + - uid: 18643 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -47.5,-66.5 + parent: 2 + - uid: 18644 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -45.5,-63.5 + parent: 2 + - uid: 18645 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -45.5,-64.5 + parent: 2 + - uid: 18646 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -45.5,-65.5 + parent: 2 + - uid: 18647 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -45.5,-66.5 + parent: 2 + - uid: 18648 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -43.5,-63.5 + parent: 2 + - uid: 18649 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -43.5,-64.5 + parent: 2 + - uid: 18650 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -43.5,-65.5 + parent: 2 + - uid: 18651 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -43.5,-66.5 + parent: 2 + - uid: 18652 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -43.5,-67.5 + parent: 2 + - uid: 18653 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -41.5,-63.5 + parent: 2 + - uid: 18654 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -41.5,-64.5 + parent: 2 + - uid: 18655 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -41.5,-65.5 + parent: 2 + - uid: 18656 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -41.5,-66.5 + parent: 2 + - uid: 18657 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -41.5,-67.5 + parent: 2 + - uid: 18658 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -41.5,-59.5 + parent: 2 + - uid: 18659 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -41.5,-58.5 + parent: 2 + - uid: 18660 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -41.5,-57.5 + parent: 2 + - uid: 18661 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -41.5,-56.5 + parent: 2 + - uid: 18662 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -41.5,-55.5 + parent: 2 + - uid: 18663 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -43.5,-55.5 + parent: 2 + - uid: 18664 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -43.5,-56.5 + parent: 2 + - uid: 18665 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -43.5,-57.5 + parent: 2 + - uid: 18666 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -43.5,-58.5 + parent: 2 + - uid: 18667 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -43.5,-59.5 + parent: 2 + - uid: 18668 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -45.5,-59.5 + parent: 2 + - uid: 18669 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -45.5,-58.5 + parent: 2 + - uid: 18670 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -45.5,-57.5 + parent: 2 + - uid: 18671 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -45.5,-56.5 + parent: 2 + - uid: 18672 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -47.5,-56.5 + parent: 2 + - uid: 18673 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -47.5,-57.5 + parent: 2 + - uid: 18674 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -47.5,-58.5 + parent: 2 + - uid: 18675 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -47.5,-59.5 + parent: 2 + - uid: 18676 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 62.5,25.5 + parent: 2 + - uid: 18677 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 60.5,17.5 + parent: 2 + - uid: 18678 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 60.5,18.5 + parent: 2 + - uid: 18679 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 60.5,19.5 + parent: 2 + - uid: 18680 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 60.5,20.5 + parent: 2 + - uid: 18681 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 60.5,21.5 + parent: 2 + - uid: 18682 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 62.5,21.5 + parent: 2 + - uid: 18683 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 62.5,20.5 + parent: 2 + - uid: 18684 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 62.5,19.5 + parent: 2 + - uid: 18685 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 62.5,18.5 + parent: 2 + - uid: 18686 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 62.5,17.5 + parent: 2 + - uid: 18687 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 62.5,26.5 + parent: 2 + - uid: 18688 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 62.5,27.5 + parent: 2 + - uid: 18689 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 62.5,28.5 + parent: 2 + - uid: 18690 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 62.5,29.5 + parent: 2 + - uid: 18691 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 60.5,29.5 + parent: 2 + - uid: 18692 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 60.5,28.5 + parent: 2 + - uid: 18693 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 60.5,27.5 + parent: 2 + - uid: 18694 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 60.5,26.5 + parent: 2 + - uid: 18695 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 60.5,25.5 + parent: 2 + - uid: 18696 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 64.5,18.5 + parent: 2 + - uid: 18697 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 64.5,19.5 + parent: 2 + - uid: 18698 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 64.5,20.5 + parent: 2 + - uid: 18699 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 64.5,21.5 + parent: 2 + - uid: 18700 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 66.5,18.5 + parent: 2 + - uid: 18701 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 66.5,19.5 + parent: 2 + - uid: 18702 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 66.5,20.5 + parent: 2 + - uid: 18703 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 66.5,21.5 + parent: 2 + - uid: 18704 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 66.5,25.5 + parent: 2 + - uid: 18705 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 66.5,26.5 + parent: 2 + - uid: 18706 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 66.5,27.5 + parent: 2 + - uid: 18707 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 66.5,28.5 + parent: 2 + - uid: 18708 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 64.5,28.5 + parent: 2 + - uid: 18709 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 64.5,27.5 + parent: 2 + - uid: 18710 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 64.5,26.5 + parent: 2 + - uid: 18711 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 64.5,25.5 + parent: 2 + - uid: 18712 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 68.5,27.5 + parent: 2 + - uid: 18713 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 68.5,26.5 + parent: 2 + - uid: 18714 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 68.5,25.5 + parent: 2 + - uid: 18715 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 70.5,27.5 + parent: 2 + - uid: 18716 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 70.5,26.5 + parent: 2 + - uid: 18717 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 70.5,25.5 + parent: 2 + - uid: 18718 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 70.5,21.5 + parent: 2 + - uid: 18719 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 70.5,20.5 + parent: 2 + - uid: 18720 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 70.5,19.5 + parent: 2 + - uid: 18721 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 68.5,21.5 + parent: 2 + - uid: 18722 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 68.5,20.5 + parent: 2 + - uid: 18723 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 68.5,19.5 + parent: 2 + - uid: 18724 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 72.5,19.5 + parent: 2 + - uid: 18725 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 72.5,20.5 + parent: 2 + - uid: 18726 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 72.5,21.5 + parent: 2 + - uid: 18727 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 74.5,21.5 + parent: 2 + - uid: 18728 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 74.5,20.5 + parent: 2 + - uid: 18729 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 74.5,19.5 + parent: 2 + - uid: 18730 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 74.5,25.5 + parent: 2 + - uid: 18731 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 74.5,26.5 + parent: 2 + - uid: 18732 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 74.5,27.5 + parent: 2 + - uid: 18733 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 72.5,27.5 + parent: 2 + - uid: 18734 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 72.5,26.5 + parent: 2 + - uid: 18735 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 72.5,25.5 + parent: 2 + - uid: 18736 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -57.5,29.5 + parent: 2 + - uid: 18737 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -57.5,28.5 + parent: 2 + - uid: 18738 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -59.5,29.5 + parent: 2 + - uid: 18739 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -59.5,28.5 + parent: 2 + - uid: 18740 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -59.5,27.5 + parent: 2 + - uid: 18741 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -61.5,28.5 + parent: 2 + - uid: 18742 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -61.5,27.5 + parent: 2 + - uid: 18743 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -63.5,28.5 + parent: 2 + - uid: 18744 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -63.5,27.5 + parent: 2 + - uid: 18745 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -63.5,26.5 + parent: 2 + - uid: 18746 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -65.5,27.5 + parent: 2 + - uid: 18747 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -65.5,26.5 + parent: 2 + - uid: 18748 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -65.5,25.5 + parent: 2 + - uid: 18749 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -67.5,27.5 + parent: 2 + - uid: 18750 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -67.5,26.5 + parent: 2 + - uid: 18751 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -67.5,25.5 + parent: 2 + - uid: 18752 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -69.5,27.5 + parent: 2 + - uid: 18753 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -69.5,26.5 + parent: 2 + - uid: 18754 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -69.5,25.5 + parent: 2 + - uid: 18755 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -71.5,27.5 + parent: 2 + - uid: 18756 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -71.5,26.5 + parent: 2 + - uid: 18757 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -71.5,25.5 + parent: 2 + - uid: 18758 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -69.5,21.5 + parent: 2 + - uid: 18759 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -69.5,20.5 + parent: 2 + - uid: 18760 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -69.5,19.5 + parent: 2 + - uid: 18761 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -71.5,19.5 + parent: 2 + - uid: 18762 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -71.5,20.5 + parent: 2 + - uid: 18763 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -71.5,21.5 + parent: 2 + - uid: 18764 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -67.5,21.5 + parent: 2 + - uid: 18765 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -67.5,20.5 + parent: 2 + - uid: 18766 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -67.5,19.5 + parent: 2 + - uid: 18767 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -65.5,20.5 + parent: 2 + - uid: 18768 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -65.5,19.5 + parent: 2 + - uid: 18769 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 42.5,-63.5 + parent: 2 + - uid: 18770 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 42.5,-51.5 + parent: 2 + - uid: 18771 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 42.5,-52.5 + parent: 2 + - uid: 18772 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 42.5,-53.5 + parent: 2 + - uid: 18773 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 42.5,-54.5 + parent: 2 + - uid: 18774 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 42.5,-55.5 + parent: 2 + - uid: 18775 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 44.5,-51.5 + parent: 2 + - uid: 18776 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 44.5,-52.5 + parent: 2 + - uid: 18777 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 44.5,-53.5 + parent: 2 + - uid: 18778 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 44.5,-54.5 + parent: 2 + - uid: 18779 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 44.5,-55.5 + parent: 2 + - uid: 18780 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 42.5,-62.5 + parent: 2 + - uid: 18781 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 42.5,-61.5 + parent: 2 + - uid: 18782 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 42.5,-60.5 + parent: 2 + - uid: 18783 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 42.5,-59.5 + parent: 2 + - uid: 18784 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 44.5,-60.5 + parent: 2 + - uid: 18785 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 44.5,-61.5 + parent: 2 + - uid: 18786 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 44.5,-62.5 + parent: 2 + - uid: 18787 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 44.5,-63.5 + parent: 2 + - uid: 18788 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 48.5,-59.5 + parent: 2 + - uid: 18789 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.5,-55.5 + parent: 2 + - uid: 18790 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.5,-54.5 + parent: 2 + - uid: 18791 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.5,-53.5 + parent: 2 + - uid: 18792 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 46.5,-52.5 + parent: 2 + - uid: 18793 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 46.5,-53.5 + parent: 2 + - uid: 18794 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 46.5,-54.5 + parent: 2 + - uid: 18795 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 46.5,-55.5 + parent: 2 + - uid: 18796 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 48.5,-52.5 + parent: 2 + - uid: 18797 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 48.5,-53.5 + parent: 2 + - uid: 18798 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 48.5,-54.5 + parent: 2 + - uid: 18799 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 48.5,-55.5 + parent: 2 + - uid: 18800 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 52.5,-53.5 + parent: 2 + - uid: 18801 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 52.5,-54.5 + parent: 2 + - uid: 18802 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 52.5,-55.5 + parent: 2 + - uid: 18803 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 54.5,-53.5 + parent: 2 + - uid: 18804 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 54.5,-54.5 + parent: 2 + - uid: 18805 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 54.5,-55.5 + parent: 2 + - uid: 18806 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 56.5,-53.5 + parent: 2 + - uid: 18807 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 56.5,-54.5 + parent: 2 + - uid: 18808 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 56.5,-55.5 + parent: 2 + - uid: 18809 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 56.5,-59.5 + parent: 2 + - uid: 18810 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 56.5,-60.5 + parent: 2 + - uid: 18811 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 56.5,-61.5 + parent: 2 + - uid: 18812 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 52.5,-59.5 + parent: 2 + - uid: 18813 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 54.5,-59.5 + parent: 2 + - uid: 18814 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 54.5,-60.5 + parent: 2 + - uid: 18815 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 54.5,-61.5 + parent: 2 + - uid: 18816 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.5,-59.5 + parent: 2 + - uid: 18817 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.5,-60.5 + parent: 2 + - uid: 18818 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.5,-61.5 + parent: 2 + - uid: 18819 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 52.5,-60.5 + parent: 2 + - uid: 18820 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 52.5,-61.5 + parent: 2 + - uid: 18821 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 48.5,-60.5 + parent: 2 + - uid: 18822 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 48.5,-61.5 + parent: 2 + - uid: 18823 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 48.5,-62.5 + parent: 2 + - uid: 18824 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 46.5,-59.5 + parent: 2 + - uid: 18825 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 46.5,-60.5 + parent: 2 + - uid: 18826 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 46.5,-61.5 + parent: 2 + - uid: 18827 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 46.5,-62.5 + parent: 2 + - uid: 18828 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 44.5,-59.5 + parent: 2 +- proto: SolarPanelBroken + entities: + - uid: 18829 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -59.5,26.5 + parent: 2 + - uid: 18830 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -61.5,26.5 + parent: 2 + - uid: 18831 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -65.5,21.5 + parent: 2 +- proto: SolarTracker + entities: + - uid: 18832 + components: + - type: Transform + pos: -56.5,-61.5 + parent: 2 + - uid: 18833 + components: + - type: Transform + pos: 75.5,23.5 + parent: 2 + - uid: 18834 + components: + - type: Transform + pos: -72.5,23.5 + parent: 2 + - uid: 18835 + components: + - type: Transform + pos: 57.5,-57.5 + parent: 2 +- proto: SolidSecretDoor + entities: + - uid: 18836 + components: + - type: Transform + pos: 13.5,34.5 + parent: 2 + - uid: 18837 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -39.5,17.5 + parent: 2 + - uid: 18838 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,-36.5 + parent: 2 +- proto: SophicScribeSpawner + entities: + - uid: 15546 + components: + - type: Transform + pos: -31.5,-20.5 + parent: 2 +- proto: SpaceCash10 + entities: + - uid: 18839 + components: + - type: Transform + pos: 23.560352,36.7938 + parent: 2 +- proto: SpaceVillainArcadeComputerCircuitboard + entities: + - uid: 18840 + components: + - type: Transform + pos: -25.481606,13.547287 + parent: 2 +- proto: SpawnMobAlexander + entities: + - uid: 18841 + components: + - type: Transform + pos: 25.5,17.5 + parent: 2 +- proto: SpawnMobButterfly + entities: + - uid: 23881 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,-21.5 + parent: 2 + - uid: 23882 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,-22.5 + parent: 2 + - uid: 23883 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,-24.5 + parent: 2 + - uid: 23884 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,-23.5 + parent: 2 +- proto: SpawnMobCatException + entities: + - uid: 18842 + components: + - type: Transform + pos: 26.5,-21.5 + parent: 2 +- proto: SpawnMobCleanBot + entities: + - uid: 18843 + components: + - type: Transform + pos: 9.5,79.5 + parent: 2 + - uid: 18844 + components: + - type: Transform + pos: 17.5,-25.5 + parent: 2 +- proto: SpawnMobCorgi + entities: + - uid: 18845 + components: + - type: Transform + pos: 9.5,47.5 + parent: 2 +- proto: SpawnMobCrab + entities: + - uid: 18846 + components: + - type: Transform + pos: 27.5,-52.5 + parent: 2 +- proto: SpawnMobFrog + entities: + - uid: 18847 + components: + - type: Transform + pos: 36.5,14.5 + parent: 2 +- proto: SpawnMobMcGriff + entities: + - uid: 18848 + components: + - type: Transform + pos: -14.5,31.5 + parent: 2 +- proto: SpawnMobMedibot + entities: + - uid: 18849 + components: + - type: Transform + pos: 8.5,75.5 + parent: 2 + - uid: 18850 + components: + - type: Transform + pos: 7.5,-25.5 + parent: 2 +- proto: SpawnMobMonkey + entities: + - uid: 4561 + components: + - type: Transform + pos: 16.5,-30.5 + parent: 2 +- proto: SpawnMobMonkeyPunpun + entities: + - uid: 18851 + components: + - type: Transform + pos: 19.5,13.5 + parent: 2 +- proto: SpawnMobMouse + entities: + - uid: 18852 + components: + - type: Transform + pos: 37.5,-8.5 + parent: 2 +- proto: SpawnMobParrot + entities: + - uid: 18853 + components: + - type: Transform + pos: 13.5,-50.5 + parent: 2 +- proto: SpawnMobRaccoonMorticia + entities: + - uid: 18854 + components: + - type: Transform + pos: -30.5,5.5 + parent: 2 +- proto: SpawnMobShiva + entities: + - uid: 18855 + components: + - type: Transform + pos: -21.5,43.5 + parent: 2 +- proto: SpawnMobSlothPaperwork + entities: + - uid: 18856 + components: + - type: Transform + pos: -39.5,-0.5 + parent: 2 +- proto: SpawnMobSmile + entities: + - uid: 18857 + components: + - type: Transform + pos: -17.5,-24.5 + parent: 2 +- proto: SpawnPointAtmos + entities: + - uid: 18858 + components: + - type: Transform + pos: 10.5,-47.5 + parent: 2 + - uid: 18859 + components: + - type: Transform + pos: 11.5,-47.5 + parent: 2 + - uid: 18860 + components: + - type: Transform + pos: 12.5,-47.5 + parent: 2 + - uid: 18861 + components: + - type: Transform + pos: 13.5,-47.5 + parent: 2 +- proto: SpawnPointBartender + entities: + - uid: 18862 + components: + - type: Transform + pos: 16.5,17.5 + parent: 2 +- proto: SpawnPointBorg + entities: + - uid: 18863 + components: + - type: Transform + pos: -29.5,-17.5 + parent: 2 + - uid: 23861 + components: + - type: Transform + pos: -30.5,-17.5 + parent: 2 +- proto: SpawnPointBotanist + entities: + - uid: 18864 + components: + - type: Transform + pos: 41.5,18.5 + parent: 2 + - uid: 18865 + components: + - type: Transform + pos: 42.5,18.5 + parent: 2 + - uid: 18866 + components: + - type: Transform + pos: 43.5,18.5 + parent: 2 +- proto: SpawnPointBrigmedic + entities: + - uid: 18867 + components: + - type: Transform + pos: -28.5,34.5 + parent: 2 +- proto: SpawnPointCaptain + entities: + - uid: 18869 + components: + - type: Transform + pos: 6.5,54.5 + parent: 2 +- proto: SpawnPointCargoTechnician + entities: + - uid: 18870 + components: + - type: Transform + pos: -39.5,9.5 + parent: 2 + - uid: 18871 + components: + - type: Transform + pos: -41.5,8.5 + parent: 2 + - uid: 18872 + components: + - type: Transform + pos: -40.5,7.5 + parent: 2 + - uid: 18873 + components: + - type: Transform + pos: -39.5,7.5 + parent: 2 + - uid: 18874 + components: + - type: Transform + pos: -38.5,8.5 + parent: 2 +- proto: SpawnPointChaplain + entities: + - uid: 18875 + components: + - type: Transform + pos: 13.5,43.5 + parent: 2 +- proto: SpawnPointChef + entities: + - uid: 18876 + components: + - type: Transform + pos: 24.5,18.5 + parent: 2 + - uid: 18877 + components: + - type: Transform + pos: 22.5,18.5 + parent: 2 +- proto: SpawnPointChemist + entities: + - uid: 18878 + components: + - type: Transform + pos: 9.5,-31.5 + parent: 2 + - uid: 18879 + components: + - type: Transform + pos: 8.5,-31.5 + parent: 2 +- proto: SpawnPointChiefEngineer + entities: + - uid: 18880 + components: + - type: Transform + pos: 9.5,53.5 + parent: 2 +- proto: SpawnPointChiefJustice + entities: + - uid: 948 + components: + - type: Transform + pos: -17.5,10.5 + parent: 2 +- proto: SpawnPointChiefMedicalOfficer + entities: + - uid: 18881 + components: + - type: Transform + pos: 8.5,55.5 + parent: 2 +- proto: SpawnPointClerk + entities: + - uid: 21917 + components: + - type: Transform + pos: -5.5,15.5 + parent: 2 +- proto: SpawnPointClown + entities: + - uid: 18882 + components: + - type: Transform + pos: 43.5,12.5 + parent: 2 +- proto: SpawnPointDetective + entities: + - uid: 18883 + components: + - type: Transform + pos: -20.5,21.5 + parent: 2 +- proto: SpawnPointForensicMantis + entities: + - uid: 18884 + components: + - type: Transform + pos: -10.5,-22.5 + parent: 2 +- proto: SpawnPointHeadOfPersonnel + entities: + - uid: 18885 + components: + - type: Transform + pos: 7.5,55.5 + parent: 2 +- proto: SpawnPointHeadOfSecurity + entities: + - uid: 18886 + components: + - type: Transform + pos: 9.5,55.5 + parent: 2 +- proto: SpawnPointJanitor + entities: + - uid: 18887 + components: + - type: Transform + pos: 9.5,12.5 + parent: 2 + - uid: 18888 + components: + - type: Transform + pos: 8.5,12.5 + parent: 2 +- proto: SpawnPointLatejoin + entities: + - uid: 23885 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,33.5 + parent: 2 + - uid: 23886 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 43.5,36.5 + parent: 2 + - uid: 23887 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 43.5,37.5 + parent: 2 + - uid: 23888 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,40.5 + parent: 2 + - uid: 23889 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,28.5 + parent: 2 + - uid: 23890 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,28.5 + parent: 2 + - uid: 23891 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 35.5,27.5 + parent: 2 +- proto: SpawnPointLawyer + entities: + - uid: 18889 + components: + - type: Transform + pos: -2.5,15.5 + parent: 2 +- proto: SpawnPointLibrarian + entities: + - uid: 18891 + components: + - type: Transform + pos: 43.5,-0.5 + parent: 2 +- proto: SpawnPointMailCarrier + entities: + - uid: 18892 + components: + - type: Transform + pos: -27.5,-5.5 + parent: 2 + - uid: 18893 + components: + - type: Transform + pos: -26.5,-4.5 + parent: 2 +- proto: SpawnPointMedicalBorg + entities: + - uid: 18957 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 16.5,-25.5 + parent: 2 + - uid: 23859 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,-26.5 + parent: 2 +- proto: SpawnPointMedicalDoctor + entities: + - uid: 18894 + components: + - type: Transform + pos: 19.5,-20.5 + parent: 2 + - uid: 18895 + components: + - type: Transform + pos: 17.5,-19.5 + parent: 2 + - uid: 18896 + components: + - type: Transform + pos: 19.5,-19.5 + parent: 2 +- proto: SpawnPointMedicalIntern + entities: + - uid: 18897 + components: + - type: Transform + pos: 40.5,-17.5 + parent: 2 + - uid: 18898 + components: + - type: Transform + pos: 41.5,-17.5 + parent: 2 +- proto: SpawnPointMime + entities: + - uid: 18899 + components: + - type: Transform + pos: 43.5,14.5 + parent: 2 +- proto: SpawnPointMusician + entities: + - uid: 18900 + components: + - type: Transform + pos: 41.5,15.5 + parent: 2 +- proto: SpawnPointObserver + entities: + - uid: 18901 + components: + - type: Transform + pos: 0.5,0.5 + parent: 2 +- proto: SpawnPointParamedic + entities: + - uid: 18902 + components: + - type: Transform + pos: 8.5,-19.5 + parent: 2 +- proto: SpawnPointPassenger + entities: + - uid: 18903 + components: + - type: Transform + pos: 41.5,-3.5 + parent: 2 + - uid: 18904 + components: + - type: Transform + pos: 43.5,-3.5 + parent: 2 + - uid: 18905 + components: + - type: Transform + pos: 42.5,-3.5 + parent: 2 + - uid: 18906 + components: + - type: Transform + pos: 36.5,-6.5 + parent: 2 + - uid: 18907 + components: + - type: Transform + pos: 39.5,-6.5 + parent: 2 + - uid: 18908 + components: + - type: Transform + pos: 36.5,-9.5 + parent: 2 + - uid: 18909 + components: + - type: Transform + pos: 39.5,-9.5 + parent: 2 + - uid: 18910 + components: + - type: Transform + pos: 40.5,-9.5 + parent: 2 + - uid: 18911 + components: + - type: Transform + pos: 39.5,-12.5 + parent: 2 + - uid: 18912 + components: + - type: Transform + pos: 42.5,-12.5 + parent: 2 + - uid: 18913 + components: + - type: Transform + pos: 43.5,-12.5 + parent: 2 + - uid: 18914 + components: + - type: Transform + pos: 26.5,4.5 + parent: 2 + - uid: 18915 + components: + - type: Transform + pos: 20.5,5.5 + parent: 2 + - uid: 18916 + components: + - type: Transform + pos: 17.5,11.5 + parent: 2 + - uid: 18917 + components: + - type: Transform + pos: 19.5,8.5 + parent: 2 + - uid: 18918 + components: + - type: Transform + pos: 27.5,11.5 + parent: 2 + - uid: 18919 + components: + - type: Transform + pos: 27.5,9.5 + parent: 2 + - uid: 18920 + components: + - type: Transform + pos: 22.5,8.5 + parent: 2 + - uid: 18921 + components: + - type: Transform + pos: 40.5,24.5 + parent: 2 + - uid: 18922 + components: + - type: Transform + pos: 26.5,35.5 + parent: 2 + - uid: 18923 + components: + - type: Transform + pos: 26.5,40.5 + parent: 2 + - uid: 18924 + components: + - type: Transform + pos: 36.5,28.5 + parent: 2 + - uid: 18925 + components: + - type: Transform + pos: 34.5,28.5 + parent: 2 + - uid: 18926 + components: + - type: Transform + pos: 39.5,28.5 + parent: 2 + - uid: 18927 + components: + - type: Transform + pos: -13.5,8.5 + parent: 2 + - uid: 18928 + components: + - type: Transform + pos: -12.5,10.5 + parent: 2 + - uid: 18929 + components: + - type: Transform + pos: -10.5,9.5 + parent: 2 + - uid: 18930 + components: + - type: Transform + pos: 32.5,-34.5 + parent: 2 + - uid: 18931 + components: + - type: Transform + pos: -34.5,-58.5 + parent: 2 + - uid: 18932 + components: + - type: Transform + pos: -34.5,-60.5 + parent: 2 + - uid: 18933 + components: + - type: Transform + pos: -29.5,-63.5 + parent: 2 + - uid: 18934 + components: + - type: Transform + pos: -29.5,-63.5 + parent: 2 + - uid: 18935 + components: + - type: Transform + pos: 8.5,5.5 + parent: 2 + - uid: 18936 + components: + - type: Transform + pos: 8.5,5.5 + parent: 2 + - uid: 18937 + components: + - type: Transform + pos: 8.5,6.5 + parent: 2 + - uid: 18938 + components: + - type: Transform + pos: -6.5,5.5 + parent: 2 + - uid: 18939 + components: + - type: Transform + pos: -6.5,6.5 + parent: 2 + - uid: 18940 + components: + - type: Transform + pos: -4.5,39.5 + parent: 2 + - uid: 18941 + components: + - type: Transform + pos: -8.5,18.5 + parent: 2 + - uid: 18942 + components: + - type: Transform + pos: -6.5,18.5 + parent: 2 + - uid: 18943 + components: + - type: Transform + pos: 32.5,5.5 + parent: 2 + - uid: 18944 + components: + - type: Transform + pos: 35.5,4.5 + parent: 2 + - uid: 18945 + components: + - type: Transform + pos: 42.5,5.5 + parent: 2 + - uid: 18946 + components: + - type: Transform + pos: 37.5,-2.5 + parent: 2 + - uid: 18947 + components: + - type: Transform + pos: 36.5,22.5 + parent: 2 + - uid: 18948 + components: + - type: Transform + pos: 42.5,34.5 + parent: 2 + - uid: 18949 + components: + - type: Transform + pos: 42.5,32.5 + parent: 2 + - uid: 18950 + components: + - type: Transform + pos: 42.5,41.5 + parent: 2 + - uid: 18951 + components: + - type: Transform + pos: 21.5,32.5 + parent: 2 + - uid: 18952 + components: + - type: Transform + pos: 23.5,33.5 + parent: 2 + - uid: 18953 + components: + - type: Transform + pos: 22.5,29.5 + parent: 2 +- proto: SpawnPointPrisoner + entities: + - uid: 21916 + components: + - type: Transform + pos: -32.5,36.5 + parent: 2 + - uid: 23978 + components: + - type: Transform + pos: -40.5,33.5 + parent: 2 + - uid: 23979 + components: + - type: Transform + pos: -38.5,35.5 + parent: 2 +- proto: SpawnPointPrisonGuard + entities: + - uid: 23975 + components: + - type: Transform + pos: -36.5,29.5 + parent: 2 + - uid: 23976 + components: + - type: Transform + pos: -39.5,21.5 + parent: 2 + - uid: 23977 + components: + - type: Transform + pos: -7.5,28.5 + parent: 2 +- proto: SpawnPointProsecutor + entities: + - uid: 18890 + components: + - type: Transform + pos: -3.5,15.5 + parent: 2 +- proto: SpawnPointPsychologist + entities: + - uid: 18954 + components: + - type: Transform + pos: 44.5,-23.5 + parent: 2 +- proto: SpawnPointQuartermaster + entities: + - uid: 18955 + components: + - type: Transform + pos: 7.5,53.5 + parent: 2 +- proto: SpawnPointReporter + entities: + - uid: 18956 + components: + - type: Transform + pos: 18.5,20.5 + parent: 2 +- proto: SpawnPointResearchAssistant + entities: + - uid: 8899 + components: + - type: Transform + pos: -42.5,-50.5 + parent: 2 + - uid: 22320 + components: + - type: Transform + pos: -2.5,-31.5 + parent: 2 + - uid: 22321 + components: + - type: Transform + pos: -3.5,-26.5 + parent: 2 + - uid: 22322 + components: + - type: Transform + pos: -4.5,-31.5 + parent: 2 + - uid: 22323 + components: + - type: Transform + pos: -35.5,-28.5 + parent: 2 + - uid: 22324 + components: + - type: Transform + pos: -35.5,-26.5 + parent: 2 + - uid: 22325 + components: + - type: Transform + pos: -38.5,-52.5 + parent: 2 + - uid: 22326 + components: + - type: Transform + pos: -38.5,-50.5 + parent: 2 + - uid: 22327 + components: + - type: Transform + pos: -30.5,-47.5 + parent: 2 +- proto: SpawnPointResearchDirector + entities: + - uid: 18958 + components: + - type: Transform + pos: 8.5,53.5 + parent: 2 +- proto: SpawnPointRoboticist + entities: + - uid: 20567 + components: + - type: Transform + pos: -21.5,-17.5 + parent: 2 + - uid: 20711 + components: + - type: Transform + pos: -25.5,-23.5 + parent: 2 +- proto: SpawnPointSalvageSpecialist + entities: + - uid: 18959 + components: + - type: Transform + pos: -37.5,-12.5 + parent: 2 + - uid: 18960 + components: + - type: Transform + pos: -37.5,-11.5 + parent: 2 + - uid: 18961 + components: + - type: Transform + pos: -37.5,-10.5 + parent: 2 +- proto: SpawnPointScientist + entities: + - uid: 18962 + components: + - type: Transform + pos: -3.5,-31.5 + parent: 2 + - uid: 18963 + components: + - type: Transform + pos: -35.5,-51.5 + parent: 2 + - uid: 18964 + components: + - type: Transform + pos: -45.5,-36.5 + parent: 2 + - uid: 18965 + components: + - type: Transform + pos: -45.5,-35.5 + parent: 2 + - uid: 18966 + components: + - type: Transform + pos: -43.5,-35.5 + parent: 2 + - uid: 18967 + components: + - type: Transform + pos: -43.5,-36.5 + parent: 2 + - uid: 18968 + components: + - type: Transform + pos: -42.5,-32.5 + parent: 2 + - uid: 18969 + components: + - type: Transform + pos: -39.5,-42.5 + parent: 2 + - uid: 18970 + components: + - type: Transform + pos: -38.5,-42.5 + parent: 2 + - uid: 18971 + components: + - type: Transform + pos: -42.5,-49.5 + parent: 2 +- proto: SpawnPointSecurityCadet + entities: + - uid: 18972 + components: + - type: Transform + pos: -5.5,38.5 + parent: 2 + - uid: 18973 + components: + - type: Transform + pos: -4.5,38.5 + parent: 2 +- proto: SpawnPointSecurityOfficer + entities: + - uid: 18974 + components: + - type: Transform + pos: -9.5,34.5 + parent: 2 + - uid: 18975 + components: + - type: Transform + pos: -9.5,35.5 + parent: 2 + - uid: 18976 + components: + - type: Transform + pos: -12.5,36.5 + parent: 2 + - uid: 18977 + components: + - type: Transform + pos: -12.5,35.5 + parent: 2 + - uid: 18978 + components: + - type: Transform + pos: -12.5,34.5 + parent: 2 +- proto: SpawnPointServiceWorker + entities: + - uid: 18979 + components: + - type: Transform + pos: 33.5,11.5 + parent: 2 + - uid: 18980 + components: + - type: Transform + pos: 34.5,11.5 + parent: 2 +- proto: SpawnPointStationEngineer + entities: + - uid: 18981 + components: + - type: Transform + pos: 3.5,-60.5 + parent: 2 + - uid: 18982 + components: + - type: Transform + pos: 3.5,-59.5 + parent: 2 + - uid: 18983 + components: + - type: Transform + pos: 3.5,-58.5 + parent: 2 +- proto: SpawnPointTechnicalAssistant + entities: + - uid: 18984 + components: + - type: Transform + pos: 3.5,-53.5 + parent: 2 + - uid: 18985 + components: + - type: Transform + pos: 4.5,-53.5 + parent: 2 +- proto: SpawnPointWarden + entities: + - uid: 18986 + components: + - type: Transform + pos: -16.5,34.5 + parent: 2 +- proto: SpearBone + entities: + - uid: 18987 + components: + - type: Transform + pos: 15.473252,31.482315 + parent: 2 +- proto: SpiderWeb + entities: + - uid: 18988 + components: + - type: Transform + pos: 43.5,-37.5 + parent: 2 + - uid: 18989 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,-36.5 + parent: 2 + - uid: 18990 + components: + - type: Transform + pos: 18.5,-29.5 + parent: 2 + - uid: 18994 + components: + - type: Transform + pos: -23.5,-60.5 + parent: 2 + - uid: 18995 + components: + - type: Transform + pos: -22.5,-58.5 + parent: 2 + - uid: 18996 + components: + - type: Transform + pos: -23.5,-58.5 + parent: 2 + - uid: 18997 + components: + - type: Transform + pos: -24.5,-59.5 + parent: 2 + - uid: 18998 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,-36.5 + parent: 2 + - uid: 18999 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 47.5,-38.5 + parent: 2 + - uid: 19000 + components: + - type: Transform + pos: 42.5,-40.5 + parent: 2 + - uid: 19001 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,-40.5 + parent: 2 + - uid: 19002 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 43.5,-39.5 + parent: 2 + - uid: 19003 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 37.5,-36.5 + parent: 2 + - uid: 19004 + components: + - type: Transform + pos: 35.5,-39.5 + parent: 2 + - uid: 19005 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,-39.5 + parent: 2 + - uid: 19006 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,-36.5 + parent: 2 + - uid: 19007 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-34.5 + parent: 2 + - uid: 19008 + components: + - type: Transform + pos: 34.5,-37.5 + parent: 2 + - uid: 19009 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-36.5 + parent: 2 + - uid: 19010 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,-34.5 + parent: 2 + - uid: 19011 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,-34.5 + parent: 2 +- proto: SprayBottle + entities: + - uid: 19014 + components: + - type: Transform + pos: 15.496991,-36.53507 + parent: 2 +- proto: SprayBottleSpaceCleaner + entities: + - uid: 19015 + components: + - type: Transform + pos: 7.25298,12.605946 + parent: 2 +- proto: SprayBottleWater + entities: + - uid: 19016 + components: + - type: Transform + pos: 38.27459,-33.275814 + parent: 2 + - uid: 19017 + components: + - type: Transform + pos: 38.367832,-33.229195 + parent: 2 +- proto: SprayPainter + entities: + - uid: 19018 + components: + - type: Transform + pos: 4.397191,15.891615 + parent: 2 + - uid: 19019 + components: + - type: Transform + pos: -36.55078,-62.416622 + parent: 2 +- proto: Stairs + entities: + - uid: 18581 + components: + - type: Transform + pos: 1.5,-1.5 + parent: 2 + - uid: 19020 + components: + - type: Transform + pos: 19.5,38.5 + parent: 2 + - uid: 19021 + components: + - type: Transform + pos: 20.5,38.5 + parent: 2 + - uid: 19022 + components: + - type: Transform + pos: 21.5,38.5 + parent: 2 + - uid: 19023 + components: + - type: Transform + pos: -0.5,-1.5 + parent: 2 + - uid: 19024 + components: + - type: Transform + pos: 0.5,-1.5 + parent: 2 + - uid: 19026 + components: + - type: Transform + pos: 2.5,-1.5 + parent: 2 + - uid: 19027 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-0.5 + parent: 2 + - uid: 19028 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,0.5 + parent: 2 + - uid: 19030 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,2.5 + parent: 2 + - uid: 19031 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-0.5 + parent: 2 + - uid: 19033 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,1.5 + parent: 2 + - uid: 19034 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,2.5 + parent: 2 + - uid: 19035 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,3.5 + parent: 2 + - uid: 19036 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,3.5 + parent: 2 + - uid: 19037 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,0.5 + parent: 2 + - uid: 19038 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,3.5 + parent: 2 + - uid: 19039 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,-57.5 + parent: 2 + - uid: 19040 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,-58.5 + parent: 2 + - uid: 19041 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,-60.5 + parent: 2 + - uid: 19042 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,-60.5 + parent: 2 + - uid: 19043 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,-60.5 + parent: 2 + - uid: 19044 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,-60.5 + parent: 2 + - uid: 19720 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,3.5 + parent: 2 + - uid: 22841 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,1.5 + parent: 2 +- proto: StairStage + entities: + - uid: 19045 + components: + - type: Transform + pos: 32.5,9.5 + parent: 2 +- proto: StasisBed + entities: + - uid: 19046 + components: + - type: Transform + pos: -30.5,35.5 + parent: 2 + - uid: 19047 + components: + - type: Transform + pos: 25.5,-32.5 + parent: 2 + - uid: 19048 + components: + - type: Transform + pos: 23.5,-27.5 + parent: 2 +- proto: StationMap + entities: + - uid: 19049 + components: + - type: Transform + pos: -2.5,5.5 + parent: 2 + - uid: 19050 + components: + - type: Transform + pos: -27.5,3.5 + parent: 2 + - uid: 19051 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -27.5,-15.5 + parent: 2 + - uid: 19052 + components: + - type: Transform + pos: -3.5,-19.5 + parent: 2 + - uid: 19053 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,10.5 + parent: 2 + - uid: 19054 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,7.5 + parent: 2 + - uid: 19055 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.5,21.5 + parent: 2 + - uid: 19056 + components: + - type: Transform + pos: 33.5,31.5 + parent: 2 + - uid: 19057 + components: + - type: Transform + pos: 24.5,34.5 + parent: 2 + - uid: 19058 + components: + - type: Transform + pos: 30.5,40.5 + parent: 2 + - uid: 19059 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 47.5,-17.5 + parent: 2 + - uid: 19060 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -40.5,27.5 + parent: 2 + - uid: 19061 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,45.5 + parent: 2 + - uid: 19062 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,45.5 + parent: 2 + - uid: 19063 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,48.5 + parent: 2 + - uid: 19064 + components: + - type: Transform + pos: -8.5,57.5 + parent: 2 + - uid: 19065 + components: + - type: Transform + pos: 13.5,51.5 + parent: 2 + - uid: 19066 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,51.5 + parent: 2 + - uid: 19067 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,-19.5 + parent: 2 + - uid: 19068 + components: + - type: Transform + pos: 35.5,-22.5 + parent: 2 + - uid: 19069 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 45.5,38.5 + parent: 2 + - uid: 19070 + components: + - type: Transform + pos: 14.5,45.5 + parent: 2 + - uid: 19071 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,-23.5 + parent: 2 + - uid: 19072 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-17.5 + parent: 2 + - uid: 19073 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-40.5 + parent: 2 + - uid: 19074 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 22.5,-1.5 + parent: 2 + - uid: 19075 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 45.5,30.5 + parent: 2 + - uid: 19076 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,-13.5 + parent: 2 + - uid: 19077 + components: + - type: Transform + pos: 37.5,-1.5 + parent: 2 + - uid: 19078 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,21.5 + parent: 2 + - uid: 19079 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,39.5 + parent: 2 +- proto: StationRecordsComputerCircuitboard + entities: + - uid: 19080 + components: + - type: Transform + pos: -0.54542005,72.60167 + parent: 2 +- proto: SteelBench + entities: + - uid: 19081 + components: + - type: Transform + pos: -30.5,-10.5 + parent: 2 + - uid: 19082 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,-14.5 + parent: 2 + - uid: 19083 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -27.5,-14.5 + parent: 2 + - uid: 19084 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,-14.5 + parent: 2 + - uid: 19085 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,18.5 + parent: 2 + - uid: 19086 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,18.5 + parent: 2 + - uid: 19087 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,18.5 + parent: 2 + - uid: 19088 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,24.5 + parent: 2 + - uid: 19089 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,24.5 + parent: 2 + - uid: 19090 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,24.5 + parent: 2 + - uid: 19091 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -21.5,24.5 + parent: 2 + - uid: 19092 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,22.5 + parent: 2 + - uid: 19093 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,23.5 + parent: 2 + - uid: 19094 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,24.5 + parent: 2 + - uid: 19095 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,23.5 + parent: 2 + - uid: 19096 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,23.5 + parent: 2 +- proto: Stool + entities: + - uid: 19097 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -35.5,-64.5 + parent: 2 + - uid: 19098 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 23.5,4.5 + parent: 2 + - uid: 19099 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,8.5 + parent: 2 + - uid: 19100 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,9.5 + parent: 2 + - uid: 19101 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,9.5 + parent: 2 + - uid: 19102 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,8.5 + parent: 2 + - uid: 19103 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,0.5 + parent: 2 + - uid: 19104 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 43.5,-0.5 + parent: 2 + - uid: 19105 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 43.5,-0.5 + parent: 2 + - uid: 19106 + components: + - type: Transform + pos: -33.5,39.5 + parent: 2 + - uid: 19107 + components: + - type: Transform + pos: -33.5,36.5 + parent: 2 + - uid: 19108 + components: + - type: Transform + pos: -33.5,33.5 + parent: 2 + - uid: 19109 + components: + - type: Transform + pos: -38.5,35.5 + parent: 2 + - uid: 19110 + components: + - type: Transform + pos: -39.5,35.5 + parent: 2 + - uid: 19111 + components: + - type: Transform + pos: -40.5,35.5 + parent: 2 + - uid: 19112 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -40.5,33.5 + parent: 2 + - uid: 19113 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -39.5,33.5 + parent: 2 + - uid: 19114 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,33.5 + parent: 2 + - uid: 19115 + components: + - type: Transform + pos: 41.5,-17.5 + parent: 2 + - uid: 19116 + components: + - type: Transform + pos: 40.5,-17.5 + parent: 2 +- proto: StoolBar + entities: + - uid: 19117 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,-64.5 + parent: 2 + - uid: 19118 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,-63.5 + parent: 2 + - uid: 19119 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,-62.5 + parent: 2 + - uid: 19120 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 16.5,11.5 + parent: 2 + - uid: 19121 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 17.5,11.5 + parent: 2 + - uid: 19122 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 18.5,11.5 + parent: 2 + - uid: 19123 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,11.5 + parent: 2 + - uid: 19124 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,11.5 + parent: 2 + - uid: 19125 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,10.5 + parent: 2 + - uid: 19126 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,9.5 + parent: 2 + - uid: 19127 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 22.5,8.5 + parent: 2 + - uid: 19128 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 23.5,8.5 + parent: 2 + - uid: 19129 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,8.5 + parent: 2 + - uid: 19130 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,8.5 + parent: 2 + - uid: 19131 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,8.5 + parent: 2 + - uid: 19132 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,9.5 + parent: 2 + - uid: 19133 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,10.5 + parent: 2 + - uid: 19134 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,11.5 + parent: 2 + - uid: 19135 + components: + - type: Transform + pos: -14.5,-60.5 + parent: 2 + - uid: 19136 + components: + - type: Transform + pos: -13.5,-60.5 + parent: 2 + - uid: 19137 + components: + - type: Transform + pos: -12.5,-60.5 + parent: 2 +- proto: StorageCanister + entities: + - uid: 19138 + components: + - type: Transform + pos: 16.5,-54.5 + parent: 2 + - uid: 19139 + components: + - type: Transform + pos: -30.5,-37.5 + parent: 2 + - uid: 19140 + components: + - type: Transform + pos: -30.5,-38.5 + parent: 2 + - uid: 19141 + components: + - type: Transform + pos: -30.5,-39.5 + parent: 2 + - uid: 19142 + components: + - type: Transform + pos: 10.5,-62.5 + parent: 2 + - uid: 19143 + components: + - type: Transform + pos: 35.5,-51.5 + parent: 2 + - uid: 19144 + components: + - type: Transform + pos: 36.5,-51.5 + parent: 2 + - uid: 19145 + components: + - type: Transform + pos: 37.5,-51.5 + parent: 2 + - uid: 19146 + components: + - type: Transform + pos: 38.5,-51.5 + parent: 2 + - uid: 19147 + components: + - type: Transform + pos: 34.5,-43.5 + parent: 2 + - uid: 22957 + components: + - type: Transform + pos: -1.5,-76.5 + parent: 2 + - uid: 23088 + components: + - type: Transform + pos: 2.5,-76.5 + parent: 2 + - uid: 23089 + components: + - type: Transform + pos: -3.5,-66.5 + parent: 2 + - uid: 23095 + components: + - type: Transform + pos: -2.5,-66.5 + parent: 2 +- proto: SubstationBasic + entities: + - uid: 19148 + components: + - type: Transform + pos: -2.5,49.5 + parent: 2 + - uid: 19149 + components: + - type: MetaData + name: Substarion da Médica + - type: Transform + pos: 13.5,-2.5 + parent: 2 + - uid: 19150 + components: + - type: MetaData + name: Substation da Segurança + - type: Transform + pos: -29.5,15.5 + parent: 2 + - uid: 19151 + components: + - type: MetaData + name: Substation do Serviço + - type: Transform + pos: 9.5,22.5 + parent: 2 + - uid: 19152 + components: + - type: Transform + pos: 5.5,32.5 + parent: 2 + - uid: 19153 + components: + - type: Transform + pos: 8.5,35.5 + parent: 2 + - uid: 19154 + components: + - type: MetaData + name: Substation da Engenharia + - type: Transform + pos: 0.5,-53.5 + parent: 2 + - uid: 19155 + components: + - type: MetaData + name: Substation da Ciência + - type: Transform + pos: -22.5,-54.5 + parent: 2 + - uid: 19156 + components: + - type: MetaData + name: Substation da Carga + - type: Transform + pos: -16.5,-15.5 + parent: 2 + - uid: 19157 + components: + - type: MetaData + name: Substation da I.A. + - type: Transform + pos: -3.5,76.5 + parent: 2 +- proto: SuitStorageAtmos + entities: + - uid: 19158 + components: + - type: Transform + pos: 20.5,-51.5 + parent: 2 + - uid: 19159 + components: + - type: Transform + pos: 20.5,-50.5 + parent: 2 +- proto: SuitStorageCaptain + entities: + - uid: 19160 + components: + - type: Transform + pos: -5.5,47.5 + parent: 2 +- proto: SuitStorageCE + entities: + - uid: 19161 + components: + - type: Transform + pos: 14.5,-54.5 + parent: 2 +- proto: SuitStorageCMO + entities: + - uid: 19162 + components: + - type: Transform + pos: 22.5,-18.5 + parent: 2 +- proto: SuitStorageEngi + entities: + - uid: 19163 + components: + - type: Transform + pos: 2.5,-54.5 + parent: 2 + - uid: 19164 + components: + - type: Transform + pos: 2.5,-55.5 + parent: 2 + - uid: 19165 + components: + - type: Transform + pos: 2.5,-56.5 + parent: 2 +- proto: SuitStorageEVA + entities: + - uid: 19166 + components: + - type: Transform + pos: -43.5,-7.5 + parent: 2 + - uid: 19167 + components: + - type: Transform + pos: -44.5,-7.5 + parent: 2 + - uid: 19168 + components: + - type: Transform + pos: -6.5,-20.5 + parent: 2 + - uid: 19169 + components: + - type: Transform + pos: -5.5,-20.5 + parent: 2 + - uid: 19170 + components: + - type: Transform + pos: -3.5,-20.5 + parent: 2 + - uid: 19171 + components: + - type: Transform + pos: -2.5,-20.5 + parent: 2 + - uid: 19172 + components: + - type: Transform + pos: -2.5,-24.5 + parent: 2 + - uid: 19173 + components: + - type: Transform + pos: -3.5,-24.5 + parent: 2 + - uid: 19174 + components: + - type: Transform + pos: -5.5,-24.5 + parent: 2 + - uid: 19175 + components: + - type: Transform + pos: -6.5,-24.5 + parent: 2 + - uid: 19176 + components: + - type: Transform + pos: -8.5,42.5 + parent: 2 + - uid: 19177 + components: + - type: Transform + pos: -8.5,41.5 + parent: 2 + - uid: 19178 + components: + - type: Transform + pos: 13.5,50.5 + parent: 2 + - uid: 19179 + components: + - type: Transform + pos: 13.5,49.5 + parent: 2 +- proto: SuitStorageHOS + entities: + - uid: 19180 + components: + - type: Transform + pos: -25.5,45.5 + parent: 2 +- proto: SuitStorageRD + entities: + - uid: 19181 + components: + - type: Transform + pos: -17.5,-19.5 + parent: 2 +- proto: SuitStorageSalv + entities: + - uid: 19182 + components: + - type: Transform + pos: -40.5,-13.5 + parent: 2 + - uid: 19183 + components: + - type: Transform + pos: -39.5,-13.5 + parent: 2 + - uid: 19184 + components: + - type: Transform + pos: -38.5,-13.5 + parent: 2 +- proto: SuitStorageSec + entities: + - uid: 19185 + components: + - type: Transform + pos: -11.5,40.5 + parent: 2 + - uid: 19186 + components: + - type: Transform + pos: -11.5,39.5 + parent: 2 +- proto: SuitStorageWarden + entities: + - uid: 19187 + components: + - type: Transform + pos: -17.5,33.5 + parent: 2 +- proto: Supermatter + entities: + - uid: 19188 + components: + - type: Transform + pos: 0.5,-69.5 + parent: 2 +- proto: SurveillanceCameraCommand + entities: + - uid: 19189 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,-11.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Portal + - uid: 19190 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,15.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Vault + - uid: 19191 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,-22.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Emergency Equipment + - uid: 19192 + components: + - type: Transform + pos: -3.5,-40.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Expensive Plate Deposit + - uid: 19193 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,31.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Gravity + - uid: 19194 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,40.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Comms + - uid: 19195 + components: + - type: Transform + pos: -7.5,47.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Captain Bedroom + - uid: 19196 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,56.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Captain office + - uid: 19197 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,49.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Head of Personel + - uid: 19198 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.5,46.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: HoP Expedition + - uid: 19199 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,54.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Bridge - Meeting Room + - uid: 19200 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,59.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Bridge - 2 + - uid: 19201 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,59.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Bridge - 1 + - uid: 19202 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,72.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: A.I. Southeast + - uid: 19203 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,72.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: I.A Southwest + - uid: 19204 + components: + - type: Transform + pos: 1.5,69.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: A.I. South + - uid: 19205 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,77.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: A.I. East + - uid: 19206 + components: + - type: Transform + pos: 5.5,82.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: A.I. North East + - uid: 19207 + components: + - type: Transform + pos: -2.5,82.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: A.I. Northwest + - uid: 19208 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,76.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: A.I. West + - uid: 19209 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,76.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: A.I. Exterior + - uid: 19211 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,55.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Bridge Entrance + - uid: 22328 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,26.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Representative Office +- proto: SurveillanceCameraEngineering + entities: + - uid: 19212 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,19.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Auxiliary Engineering + - uid: 19213 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,-36.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Common Plate Deposit + - uid: 19214 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,24.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Northeast Solar + - uid: 19215 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,-50.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Hallway + - uid: 19216 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,-53.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Office of the Chief Engineer + - uid: 19217 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,-58.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Decontamination + - uid: 19218 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,-55.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: AME + - uid: 19219 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,-59.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: SMES Bank + - uid: 19220 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 12.5,-57.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Engineering Depot + - uid: 19221 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,-66.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Emitters + - uid: 19222 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,-67.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: SM Cooling + - uid: 19223 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-62.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Supermatter North + - uid: 19224 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-72.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Supermatter South + - uid: 19225 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 38.5,-49.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Tank Depot + - uid: 19226 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,-44.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: TEG + - uid: 19227 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 23.5,-39.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: TEG 2 + - uid: 19228 + components: + - type: Transform + pos: 19.5,-51.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Atmos Canisters + - uid: 19229 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,-39.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Prohibited + - uid: 19230 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,-69.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Supermatter West + - uid: 19231 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-43.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: TEG mixer + - uid: 19232 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 40.5,-57.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Southeast Solar + - uid: 19233 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,-57.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Atmospheric South + - uid: 19234 + components: + - type: Transform + pos: 27.5,-55.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: North Astmospheric + - uid: 19235 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-58.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Equipment Room + - uid: 19236 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,-45.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Front desk + - uid: 19237 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,-69.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: East Supermatter +- proto: SurveillanceCameraGeneral + entities: + - uid: 19238 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,-9.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Epis Corridor + - uid: 19239 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,-1.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Midwest + - uid: 19240 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,3.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: West Corridor 2 + - uid: 19241 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,4.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Station Center + - uid: 19242 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,11.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: North Center + - uid: 19243 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,-1.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: East Center + - uid: 19244 + components: + - type: Transform + pos: 3.5,-9.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: South Center + - uid: 19245 + components: + - type: Transform + pos: -19.5,-0.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Cargo Corridor/Epis 2 + - uid: 19246 + components: + - type: Transform + pos: -31.5,-0.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Cargo Corridor/Epis 1 + - uid: 19247 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,8.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: East Bar + - uid: 19248 + components: + - type: Transform + pos: 27.5,5.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Downtown Bar + - uid: 19249 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,10.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: West Bar + - uid: 19250 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 43.5,0.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Librarian's Room + - uid: 19251 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,-3.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Security Point + - uid: 19252 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,3.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Library + - uid: 19253 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,13.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Service/Dorms Corridor + - uid: 19254 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,27.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Dormitory Entrance + - uid: 19255 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,36.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Hologram Room + - uid: 19256 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,39.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Dorms + - uid: 19257 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,30.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Central part of the Dormitory + - uid: 19258 + components: + - type: Transform + pos: 44.5,26.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Arrivals Corridor 1 + - uid: 19259 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 44.5,37.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Arrivals Corridor 2 + - uid: 19260 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,-3.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: North Evacuation + - uid: 19261 + components: + - type: Transform + pos: 35.5,-12.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: South Evacuation + - uid: 19262 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,18.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Sec/Bridge Corridor 1 + - uid: 19263 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,30.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Sec/Bridge Corridor 2 + - uid: 19264 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,43.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Sec/Bridge Corridor 3 + - uid: 19265 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,2.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Evacuation Entrance and Bar + - uid: 19266 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-19.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Eng/Med Corridor 1 + - uid: 19267 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-34.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Eng/Med Corridor 2 +- proto: SurveillanceCameraMedical + entities: + - uid: 19268 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 18.5,-18.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Equipment Area + - uid: 19269 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.5,-13.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Surgical Ward + - uid: 19270 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 16.5,-8.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Morgue + - uid: 19271 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,-17.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Office of the Chief Medical Officer + - uid: 19272 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,-14.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Experiment Workshop + - uid: 19273 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,-14.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Rest Area + - uid: 19274 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,-30.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Virology + - uid: 19275 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 44.5,-30.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Quarantine + - uid: 19276 + components: + - type: Transform + pos: 45.5,-25.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Psychologist's Office + - uid: 19277 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,-29.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Cryogenic + - uid: 19278 + components: + - type: Transform + pos: 19.5,-32.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Genetics + - uid: 19279 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,-30.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Chemical + - uid: 19280 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,-18.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Security Point + - uid: 19281 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,-18.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Front desk + - uid: 19282 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,-20.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Northeast Corridor + - uid: 19283 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.5,-26.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Treatment Area + - uid: 19284 + components: + - type: Transform + pos: 28.5,-25.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: East Corridor +- proto: SurveillanceCameraRouterCommand + entities: + - uid: 19285 + components: + - type: Transform + pos: 4.5,39.5 + parent: 2 +- proto: SurveillanceCameraRouterEngineering + entities: + - uid: 19286 + components: + - type: Transform + pos: 8.5,41.5 + parent: 2 +- proto: SurveillanceCameraRouterGeneral + entities: + - uid: 19287 + components: + - type: Transform + pos: 8.5,38.5 + parent: 2 +- proto: SurveillanceCameraRouterMedical + entities: + - uid: 19288 + components: + - type: Transform + pos: 8.5,39.5 + parent: 2 +- proto: SurveillanceCameraRouterScience + entities: + - uid: 19289 + components: + - type: Transform + pos: 4.5,37.5 + parent: 2 +- proto: SurveillanceCameraRouterSecurity + entities: + - uid: 19290 + components: + - type: Transform + pos: 8.5,37.5 + parent: 2 +- proto: SurveillanceCameraRouterService + entities: + - uid: 19291 + components: + - type: Transform + pos: 4.5,38.5 + parent: 2 +- proto: SurveillanceCameraRouterSupply + entities: + - uid: 19292 + components: + - type: Transform + pos: 4.5,41.5 + parent: 2 +- proto: SurveillanceCameraScience + entities: + - uid: 19293 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,-23.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: Reception of Science + - uid: 19294 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.5,-18.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: Garage + - uid: 19295 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,-35.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: Security Point + - uid: 19296 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,-41.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: South Corridor + - uid: 19297 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,-16.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: Robotics 2 + - uid: 19298 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -17.5,-24.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: Director's Office + - uid: 19299 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -17.5,-20.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: Director's Room + - uid: 19300 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,-46.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: Target Shooting + - uid: 19301 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,-50.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: Toxins + - uid: 19302 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -41.5,-49.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: Launch + - uid: 19303 + components: + - type: Transform + pos: -41.5,-43.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: Dock + - uid: 19304 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -39.5,-37.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: Anomalous Deposit + - uid: 19305 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -41.5,-33.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: Anomalous Laboratory + - uid: 19306 + components: + - type: Transform + pos: -11.5,-49.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: South Experiment Cell + - uid: 19307 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,-42.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: Special Experiment Cell + - uid: 19308 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,-35.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: North Experiment Cells + - uid: 19309 + components: + - type: Transform + pos: -3.5,-33.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: Entrance to Xenobiology + - uid: 19310 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,-21.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: Rest Area + - uid: 19311 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,-31.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: Research Workshop + - uid: 19312 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,-30.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: Artifacts Laboratory + - uid: 19313 + components: + - type: Transform + pos: -15.5,-28.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: East Corridor + - uid: 19314 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,-37.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: Tank Depot + - uid: 19315 + components: + - type: Transform + pos: -24.5,-24.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: Robotics 1 +- proto: SurveillanceCameraSecurity + entities: + - uid: 19316 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,16.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Advocacy + - uid: 19317 + components: + - type: Transform + pos: -31.5,23.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Execution + - uid: 19318 + components: + - type: Transform + pos: 44.5,-18.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Evacuation Sacurity Point + - uid: 19319 + components: + - type: Transform + pos: -8.5,18.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: South Corridor + - uid: 19320 + components: + - type: Transform + pos: -14.5,38.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Armory + - uid: 19321 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,36.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Evidence Cabinet + - uid: 19322 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,42.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: EVA + - uid: 19323 + components: + - type: Transform + pos: -22.5,38.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: HoS room 1 + - uid: 19324 + components: + - type: Transform + pos: -24.5,43.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: HoS Room + - uid: 19325 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.5,34.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Brig Medical Wing + - uid: 19326 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -42.5,31.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Perma 2 + - uid: 19327 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,39.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Perma 1 + - uid: 19328 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -40.5,26.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Expedition Control Brig + - uid: 19329 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,21.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Transfer + - uid: 19330 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,30.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Inner Corridor + - uid: 19331 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,31.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Brig Corridor 2 + - uid: 19332 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,29.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Brig Corridor 1 + - uid: 19333 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,31.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Brig Entry + - uid: 19334 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,40.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Front desk + - uid: 19335 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -17.5,33.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Brig - Warden + - uid: 19336 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,24.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Interrogation + - uid: 19337 + components: + - type: Transform + pos: -15.5,43.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Exterior + - uid: 19338 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,11.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Court + - uid: 19339 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,33.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Brig Security + - uid: 19340 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,20.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Detective's Office + - uid: 23865 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -16.5,12.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Chief Justice room +- proto: SurveillanceCameraService + entities: + - uid: 19341 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,15.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Janitor + - uid: 19342 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 17.5,14.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Bar Counter + - uid: 19343 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,17.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Bartender's Room + - uid: 19344 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 26.5,18.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Kitchen + - uid: 19345 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,22.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Freezer + - uid: 19346 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 38.5,15.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Botany + - uid: 19347 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 40.5,19.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Botany Deposit + - uid: 19348 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,15.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Theater + - uid: 19349 + components: + - type: Transform + pos: 19.5,29.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Capela + - uid: 19350 + components: + - type: Transform + pos: 14.5,35.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Crematorium + - uid: 19351 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,37.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Chapel Corridor + - uid: 19352 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,38.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Chapel Deposit + - uid: 19353 + components: + - type: Transform + pos: 21.5,42.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Wake + - uid: 19354 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.5,44.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Priest's Room +- proto: SurveillanceCameraSupply + entities: + - uid: 19355 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,8.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSupply + nameSet: True + id: Cargo Reception + - uid: 19356 + components: + - type: Transform + pos: -28.5,-6.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSupply + nameSet: True + id: Mail + - uid: 19357 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,5.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSupply + nameSet: True + id: Quartermaster's Office + - uid: 19358 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,7.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSupply + nameSet: True + id: Quartermaster's Room + - uid: 19359 + components: + - type: Transform + pos: -28.5,10.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSupply + nameSet: True + id: Deposit + - uid: 19360 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -44.5,7.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSupply + nameSet: True + id: Front desk + - uid: 19361 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -42.5,-0.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSupply + nameSet: True + id: Área principal + - uid: 19362 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,-10.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSupply + nameSet: True + id: Miners + - uid: 19363 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,-17.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSupply + nameSet: True + id: Magnet +- proto: SurveillanceCameraWirelessRouterBase + entities: + - uid: 19364 + components: + - type: Transform + pos: 7.5,38.5 + parent: 2 +- proto: SurveillanceCameraWirelessRouterEntertainment + entities: + - uid: 19365 + components: + - type: Transform + pos: 5.5,38.5 + parent: 2 +- proto: SurveillanceWirelessCameraAnchoredEntertainment + entities: + - uid: 19366 + components: + - type: Transform + pos: -12.5,16.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEntertainment + nameSet: True + id: 24 Hour Court +- proto: SurveillanceWirelessCameraMovableConstructed + entities: + - uid: 19367 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,23.5 + parent: 2 + - uid: 19368 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,22.5 + parent: 2 +- proto: SynthesizerInstrument + entities: + - uid: 19369 + components: + - type: Transform + pos: 37.525913,5.4845967 + parent: 2 +- proto: Syringe + entities: + - uid: 19370 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.53238,38.676575 + parent: 2 + - uid: 19371 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.826675,-28.196861 + parent: 2 + - uid: 19372 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 40.363167,-34.497257 + parent: 2 + - uid: 19373 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 29.509636,-34.21152 + parent: 2 +- proto: Table + entities: + - uid: 19374 + components: + - type: Transform + pos: -2.5,27.5 + parent: 2 + - uid: 19375 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,9.5 + parent: 2 + - uid: 19376 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,49.5 + parent: 2 + - uid: 19377 + components: + - type: Transform + pos: -13.5,6.5 + parent: 2 + - uid: 19378 + components: + - type: Transform + pos: -12.5,6.5 + parent: 2 + - uid: 19379 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,17.5 + parent: 2 + - uid: 19380 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,16.5 + parent: 2 + - uid: 19381 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,15.5 + parent: 2 + - uid: 19382 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,14.5 + parent: 2 + - uid: 19383 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,13.5 + parent: 2 + - uid: 19384 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,15.5 + parent: 2 + - uid: 19385 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,16.5 + parent: 2 + - uid: 19386 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,19.5 + parent: 2 + - uid: 19387 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,19.5 + parent: 2 + - uid: 19388 + components: + - type: Transform + pos: 7.5,13.5 + parent: 2 + - uid: 19389 + components: + - type: Transform + pos: 7.5,12.5 + parent: 2 + - uid: 19390 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,-12.5 + parent: 2 + - uid: 19391 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-10.5 + parent: 2 + - uid: 19392 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-10.5 + parent: 2 + - uid: 19393 + components: + - type: Transform + pos: -17.5,-13.5 + parent: 2 + - uid: 19394 + components: + - type: Transform + pos: -20.5,-11.5 + parent: 2 + - uid: 19395 + components: + - type: Transform + pos: -20.5,-12.5 + parent: 2 + - uid: 19396 + components: + - type: Transform + pos: 14.5,-2.5 + parent: 2 + - uid: 19397 + components: + - type: Transform + pos: -40.5,8.5 + parent: 2 + - uid: 19398 + components: + - type: Transform + pos: -39.5,8.5 + parent: 2 + - uid: 19399 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -44.5,-9.5 + parent: 2 + - uid: 19400 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -43.5,-9.5 + parent: 2 + - uid: 19401 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -42.5,-9.5 + parent: 2 + - uid: 19402 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -42.5,-7.5 + parent: 2 + - uid: 19403 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -30.5,-14.5 + parent: 2 + - uid: 19404 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,-14.5 + parent: 2 + - uid: 19405 + components: + - type: Transform + pos: -27.5,-16.5 + parent: 2 + - uid: 19406 + components: + - type: Transform + pos: -26.5,-16.5 + parent: 2 + - uid: 19407 + components: + - type: Transform + pos: -26.5,-18.5 + parent: 2 + - uid: 19408 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,-15.5 + parent: 2 + - uid: 19409 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,-16.5 + parent: 2 + - uid: 19410 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,-17.5 + parent: 2 + - uid: 19411 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,-18.5 + parent: 2 + - uid: 19412 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,-27.5 + parent: 2 + - uid: 19413 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,-28.5 + parent: 2 + - uid: 19414 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,-28.5 + parent: 2 + - uid: 19415 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,-34.5 + parent: 2 + - uid: 19416 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,-32.5 + parent: 2 + - uid: 19417 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -44.5,-39.5 + parent: 2 + - uid: 19418 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -44.5,-38.5 + parent: 2 + - uid: 19419 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -44.5,-36.5 + parent: 2 + - uid: 19420 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -44.5,-35.5 + parent: 2 + - uid: 19421 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -37.5,-52.5 + parent: 2 + - uid: 19422 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -37.5,-51.5 + parent: 2 + - uid: 19423 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -37.5,-50.5 + parent: 2 + - uid: 19424 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,-52.5 + parent: 2 + - uid: 19425 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,-51.5 + parent: 2 + - uid: 19426 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,-50.5 + parent: 2 + - uid: 19427 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,-48.5 + parent: 2 + - uid: 19428 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,-46.5 + parent: 2 + - uid: 19429 + components: + - type: Transform + pos: -29.5,-47.5 + parent: 2 + - uid: 19430 + components: + - type: Transform + pos: -29.5,-47.5 + parent: 2 + - uid: 19431 + components: + - type: Transform + pos: -21.5,-42.5 + parent: 2 + - uid: 19432 + components: + - type: Transform + pos: -21.5,-41.5 + parent: 2 + - uid: 19433 + components: + - type: Transform + pos: -19.5,-41.5 + parent: 2 + - uid: 19434 + components: + - type: Transform + pos: -19.5,-42.5 + parent: 2 + - uid: 19435 + components: + - type: Transform + pos: -19.5,-45.5 + parent: 2 + - uid: 19436 + components: + - type: Transform + pos: -22.5,-52.5 + parent: 2 + - uid: 19437 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -39.5,-63.5 + parent: 2 + - uid: 19438 + components: + - type: Transform + pos: -35.5,-62.5 + parent: 2 + - uid: 19439 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,-66.5 + parent: 2 + - uid: 19440 + components: + - type: Transform + pos: 15.5,13.5 + parent: 2 + - uid: 19441 + components: + - type: Transform + pos: 15.5,14.5 + parent: 2 + - uid: 19442 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 18.5,14.5 + parent: 2 + - uid: 19443 + components: + - type: Transform + pos: 25.5,19.5 + parent: 2 + - uid: 19444 + components: + - type: Transform + pos: 26.5,19.5 + parent: 2 + - uid: 19445 + components: + - type: Transform + pos: 26.5,18.5 + parent: 2 + - uid: 19446 + components: + - type: Transform + pos: 26.5,17.5 + parent: 2 + - uid: 19447 + components: + - type: Transform + pos: 21.5,17.5 + parent: 2 + - uid: 19448 + components: + - type: Transform + pos: 22.5,17.5 + parent: 2 + - uid: 19449 + components: + - type: Transform + pos: 23.5,17.5 + parent: 2 + - uid: 19450 + components: + - type: Transform + pos: 32.5,20.5 + parent: 2 + - uid: 19451 + components: + - type: Transform + pos: 32.5,19.5 + parent: 2 + - uid: 19452 + components: + - type: Transform + pos: 37.5,12.5 + parent: 2 + - uid: 19453 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,19.5 + parent: 2 + - uid: 19454 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,19.5 + parent: 2 + - uid: 19455 + components: + - type: Transform + pos: 18.5,27.5 + parent: 2 + - uid: 19456 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 36.5,26.5 + parent: 2 + - uid: 19457 + components: + - type: Transform + pos: 36.5,30.5 + parent: 2 + - uid: 19458 + components: + - type: Transform + pos: 32.5,28.5 + parent: 2 + - uid: 19459 + components: + - type: Transform + pos: 33.5,28.5 + parent: 2 + - uid: 19460 + components: + - type: Transform + pos: 35.5,28.5 + parent: 2 + - uid: 19461 + components: + - type: Transform + pos: 38.5,28.5 + parent: 2 + - uid: 19462 + components: + - type: Transform + pos: -8.5,31.5 + parent: 2 + - uid: 19463 + components: + - type: Transform + pos: -8.5,35.5 + parent: 2 + - uid: 19464 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,35.5 + parent: 2 + - uid: 19465 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,34.5 + parent: 2 + - uid: 19466 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,31.5 + parent: 2 + - uid: 19467 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,31.5 + parent: 2 + - uid: 19468 + components: + - type: Transform + pos: -8.5,37.5 + parent: 2 + - uid: 19469 + components: + - type: Transform + pos: -8.5,39.5 + parent: 2 + - uid: 19470 + components: + - type: Transform + pos: -41.5,30.5 + parent: 2 + - uid: 19471 + components: + - type: Transform + pos: -40.5,34.5 + parent: 2 + - uid: 19472 + components: + - type: Transform + pos: -39.5,34.5 + parent: 2 + - uid: 19473 + components: + - type: Transform + pos: -38.5,34.5 + parent: 2 + - uid: 19474 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -38.5,22.5 + parent: 2 + - uid: 19475 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -38.5,21.5 + parent: 2 + - uid: 19476 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,30.5 + parent: 2 + - uid: 19477 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,30.5 + parent: 2 + - uid: 19478 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -35.5,30.5 + parent: 2 + - uid: 19479 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,36.5 + parent: 2 + - uid: 19480 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,48.5 + parent: 2 + - uid: 19481 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,-14.5 + parent: 2 + - uid: 19482 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,-14.5 + parent: 2 + - uid: 19483 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.5,-14.5 + parent: 2 + - uid: 19484 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 34.5,-14.5 + parent: 2 + - uid: 19485 + components: + - type: Transform + pos: 30.5,-22.5 + parent: 2 + - uid: 19486 + components: + - type: Transform + pos: 32.5,-22.5 + parent: 2 + - uid: 19487 + components: + - type: Transform + pos: 42.5,-28.5 + parent: 2 + - uid: 19488 + components: + - type: Transform + pos: 42.5,-29.5 + parent: 2 + - uid: 19489 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 38.5,-33.5 + parent: 2 + - uid: 19490 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 38.5,-34.5 + parent: 2 + - uid: 19491 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 39.5,-34.5 + parent: 2 + - uid: 19492 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,-34.5 + parent: 2 + - uid: 19493 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,-34.5 + parent: 2 + - uid: 19494 + components: + - type: Transform + pos: 30.5,-31.5 + parent: 2 + - uid: 19495 + components: + - type: Transform + pos: 31.5,-31.5 + parent: 2 + - uid: 19496 + components: + - type: Transform + pos: 23.5,-30.5 + parent: 2 + - uid: 19497 + components: + - type: Transform + pos: 22.5,-30.5 + parent: 2 + - uid: 19498 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,-29.5 + parent: 2 + - uid: 19499 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,-29.5 + parent: 2 + - uid: 19500 + components: + - type: Transform + pos: 8.5,-42.5 + parent: 2 + - uid: 19501 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,-52.5 + parent: 2 + - uid: 19502 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-52.5 + parent: 2 + - uid: 19503 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-52.5 + parent: 2 + - uid: 19504 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-53.5 + parent: 2 + - uid: 19505 + components: + - type: Transform + pos: 23.5,-39.5 + parent: 2 + - uid: 19506 + components: + - type: Transform + pos: 24.5,-39.5 + parent: 2 + - uid: 19507 + components: + - type: Transform + pos: 25.5,-39.5 + parent: 2 + - uid: 19508 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,-46.5 + parent: 2 + - uid: 19509 + components: + - type: Transform + pos: 22.5,-43.5 + parent: 2 + - uid: 19510 + components: + - type: Transform + pos: 22.5,-44.5 + parent: 2 + - uid: 19511 + components: + - type: Transform + pos: 22.5,-45.5 + parent: 2 + - uid: 19512 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,5.5 + parent: 2 + - uid: 19513 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,4.5 + parent: 2 + - uid: 19514 + components: + - type: Transform + pos: 41.5,-25.5 + parent: 2 + - uid: 19515 + components: + - type: Transform + pos: 18.5,21.5 + parent: 2 + - uid: 19516 + components: + - type: Transform + pos: 17.5,21.5 + parent: 2 + - uid: 19517 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,-40.5 + parent: 2 + - uid: 19518 + components: + - type: Transform + pos: 33.5,-39.5 + parent: 2 + - uid: 19519 + components: + - type: Transform + pos: 32.5,-38.5 + parent: 2 + - uid: 19520 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,-23.5 + parent: 2 + - uid: 19521 + components: + - type: Transform + pos: -2.5,20.5 + parent: 2 + - uid: 19522 + components: + - type: Transform + pos: 41.5,-12.5 + parent: 2 + - uid: 19523 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.5,7.5 + parent: 2 + - uid: 19524 + components: + - type: Transform + pos: 9.5,48.5 + parent: 2 +- proto: TableCarpet + entities: + - uid: 19525 + components: + - type: Transform + pos: -12.5,-23.5 + parent: 2 + - uid: 19526 + components: + - type: Transform + pos: -8.5,-22.5 + parent: 2 + - uid: 19527 + components: + - type: Transform + pos: -8.5,-23.5 + parent: 2 + - uid: 19528 + components: + - type: Transform + pos: -12.5,-24.5 + parent: 2 + - uid: 19529 + components: + - type: Transform + pos: -11.5,-24.5 + parent: 2 + - uid: 19530 + components: + - type: Transform + pos: -31.5,-60.5 + parent: 2 + - uid: 19531 + components: + - type: Transform + pos: -29.5,-60.5 + parent: 2 + - uid: 19532 + components: + - type: Transform + pos: -29.5,-64.5 + parent: 2 + - uid: 19533 + components: + - type: Transform + pos: -30.5,-64.5 + parent: 2 +- proto: TableFrame + entities: + - uid: 19534 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,-58.5 + parent: 2 + - uid: 19535 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,-64.5 + parent: 2 + - uid: 19536 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,-63.5 + parent: 2 + - uid: 19537 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,-62.5 + parent: 2 + - uid: 19538 + components: + - type: Transform + pos: 10.5,-36.5 + parent: 2 + - uid: 19539 + components: + - type: Transform + pos: 10.5,-37.5 + parent: 2 + - uid: 19540 + components: + - type: Transform + pos: 10.5,-38.5 + parent: 2 + - uid: 19541 + components: + - type: Transform + pos: 12.5,-38.5 + parent: 2 + - uid: 19542 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 47.5,-39.5 + parent: 2 + - uid: 19543 + components: + - type: Transform + pos: 5.5,-11.5 + parent: 2 + - uid: 19544 + components: + - type: Transform + pos: 4.5,-11.5 + parent: 2 + - uid: 19545 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 38.5,-39.5 + parent: 2 + - uid: 19546 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 38.5,-40.5 + parent: 2 + - uid: 19547 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 39.5,-40.5 + parent: 2 + - uid: 19548 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 47.5,-40.5 + parent: 2 + - uid: 19549 + components: + - type: Transform + pos: 32.5,-39.5 + parent: 2 +- proto: TableGlass + entities: + - uid: 19550 + components: + - type: Transform + pos: 7.5,-29.5 + parent: 2 + - uid: 19551 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,32.5 + parent: 2 + - uid: 19552 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -30.5,32.5 + parent: 2 + - uid: 19553 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -30.5,37.5 + parent: 2 + - uid: 19554 + components: + - type: Transform + pos: 18.5,-13.5 + parent: 2 + - uid: 19555 + components: + - type: Transform + pos: 19.5,-13.5 + parent: 2 + - uid: 19556 + components: + - type: Transform + pos: 20.5,-13.5 + parent: 2 + - uid: 19557 + components: + - type: Transform + pos: 18.5,-16.5 + parent: 2 + - uid: 19558 + components: + - type: Transform + pos: 19.5,-16.5 + parent: 2 + - uid: 19559 + components: + - type: Transform + pos: 20.5,-16.5 + parent: 2 + - uid: 19560 + components: + - type: Transform + pos: 26.5,-19.5 + parent: 2 + - uid: 19561 + components: + - type: Transform + pos: 25.5,-19.5 + parent: 2 + - uid: 19562 + components: + - type: Transform + pos: 22.5,-20.5 + parent: 2 + - uid: 19563 + components: + - type: Transform + pos: 23.5,-20.5 + parent: 2 + - uid: 19564 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,-14.5 + parent: 2 + - uid: 19565 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,-14.5 + parent: 2 + - uid: 19566 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,-14.5 + parent: 2 + - uid: 19567 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,-32.5 + parent: 2 + - uid: 19568 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,-31.5 + parent: 2 + - uid: 19569 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,-32.5 + parent: 2 + - uid: 19570 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,-31.5 + parent: 2 + - uid: 19571 + components: + - type: Transform + pos: 4.5,-21.5 + parent: 2 + - uid: 19572 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 13.5,-32.5 + parent: 2 + - uid: 19573 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,-32.5 + parent: 2 + - uid: 19574 + components: + - type: Transform + pos: 12.5,-37.5 + parent: 2 +- proto: TablePlasmaGlass + entities: + - uid: 19575 + components: + - type: Transform + pos: 19.5,30.5 + parent: 2 + - uid: 19576 + components: + - type: Transform + pos: 19.5,32.5 + parent: 2 + - uid: 19577 + components: + - type: Transform + pos: 17.5,29.5 + parent: 2 + - uid: 19578 + components: + - type: Transform + pos: 17.5,30.5 + parent: 2 + - uid: 19579 + components: + - type: Transform + pos: 17.5,31.5 + parent: 2 + - uid: 19580 + components: + - type: Transform + pos: 17.5,32.5 + parent: 2 + - uid: 19581 + components: + - type: Transform + pos: 17.5,33.5 + parent: 2 + - uid: 19582 + components: + - type: Transform + pos: 15.5,36.5 + parent: 2 + - uid: 19583 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 18.5,45.5 + parent: 2 + - uid: 19584 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 22.5,45.5 + parent: 2 +- proto: TableReinforced + entities: + - uid: 19585 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,26.5 + parent: 2 + - uid: 19586 + components: + - type: Transform + pos: -15.5,-19.5 + parent: 2 + - uid: 19587 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,-3.5 + parent: 2 + - uid: 19588 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,-4.5 + parent: 2 + - uid: 19589 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,-5.5 + parent: 2 + - uid: 19590 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,-6.5 + parent: 2 + - uid: 19591 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -29.5,-6.5 + parent: 2 + - uid: 19592 + components: + - type: Transform + pos: -27.5,5.5 + parent: 2 + - uid: 19593 + components: + - type: Transform + pos: -28.5,5.5 + parent: 2 + - uid: 19594 + components: + - type: Transform + pos: -43.5,10.5 + parent: 2 + - uid: 19595 + components: + - type: Transform + pos: -43.5,11.5 + parent: 2 + - uid: 19596 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,6.5 + parent: 2 + - uid: 19597 + components: + - type: Transform + pos: -31.5,17.5 + parent: 2 + - uid: 19598 + components: + - type: Transform + pos: -31.5,16.5 + parent: 2 + - uid: 19599 + components: + - type: Transform + pos: -35.5,17.5 + parent: 2 + - uid: 19600 + components: + - type: Transform + pos: -35.5,16.5 + parent: 2 + - uid: 19601 + components: + - type: Transform + pos: -33.5,17.5 + parent: 2 + - uid: 19602 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -44.5,15.5 + parent: 2 + - uid: 19603 + components: + - type: Transform + pos: -33.5,-25.5 + parent: 2 + - uid: 19604 + components: + - type: Transform + pos: -27.5,-21.5 + parent: 2 + - uid: 19605 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,-30.5 + parent: 2 + - uid: 19606 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,-29.5 + parent: 2 + - uid: 19607 + components: + - type: Transform + pos: -19.5,-16.5 + parent: 2 + - uid: 19608 + components: + - type: Transform + pos: -23.5,-16.5 + parent: 2 + - uid: 19609 + components: + - type: Transform + pos: -26.5,-20.5 + parent: 2 + - uid: 19610 + components: + - type: Transform + pos: -26.5,-24.5 + parent: 2 + - uid: 19611 + components: + - type: Transform + pos: -25.5,-24.5 + parent: 2 + - uid: 19612 + components: + - type: Transform + pos: -26.5,-23.5 + parent: 2 + - uid: 19613 + components: + - type: Transform + pos: -19.5,-24.5 + parent: 2 + - uid: 19614 + components: + - type: Transform + pos: -19.5,-22.5 + parent: 2 + - uid: 19615 + components: + - type: Transform + pos: -19.5,-20.5 + parent: 2 + - uid: 19616 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,-22.5 + parent: 2 + - uid: 19617 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,-22.5 + parent: 2 + - uid: 19618 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,-30.5 + parent: 2 + - uid: 19619 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,-31.5 + parent: 2 + - uid: 19620 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-31.5 + parent: 2 + - uid: 19621 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,-34.5 + parent: 2 + - uid: 19622 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,-30.5 + parent: 2 + - uid: 19623 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,-31.5 + parent: 2 + - uid: 19624 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,-30.5 + parent: 2 + - uid: 19625 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,-31.5 + parent: 2 + - uid: 19626 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,-33.5 + parent: 2 + - uid: 19627 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,-35.5 + parent: 2 + - uid: 19628 + components: + - type: Transform + pos: -13.5,-38.5 + parent: 2 + - uid: 19629 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,-41.5 + parent: 2 + - uid: 19630 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,-44.5 + parent: 2 + - uid: 19631 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,-47.5 + parent: 2 + - uid: 19632 + components: + - type: Transform + pos: -47.5,-31.5 + parent: 2 + - uid: 19633 + components: + - type: Transform + pos: -47.5,-30.5 + parent: 2 + - uid: 19634 + components: + - type: Transform + pos: -47.5,-32.5 + parent: 2 + - uid: 19635 + components: + - type: Transform + pos: -46.5,-32.5 + parent: 2 + - uid: 19636 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -43.5,-49.5 + parent: 2 + - uid: 19637 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -43.5,-50.5 + parent: 2 + - uid: 19638 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 29.5,-1.5 + parent: 2 + - uid: 19639 + components: + - type: Transform + pos: 29.5,-4.5 + parent: 2 + - uid: 19640 + components: + - type: Transform + pos: 30.5,-4.5 + parent: 2 + - uid: 19641 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,11.5 + parent: 2 + - uid: 19642 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,10.5 + parent: 2 + - uid: 19643 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,9.5 + parent: 2 + - uid: 19644 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 23.5,9.5 + parent: 2 + - uid: 19645 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,9.5 + parent: 2 + - uid: 19646 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,9.5 + parent: 2 + - uid: 19647 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,9.5 + parent: 2 + - uid: 19648 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,10.5 + parent: 2 + - uid: 19649 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,11.5 + parent: 2 + - uid: 19650 + components: + - type: Transform + pos: 20.5,15.5 + parent: 2 + - uid: 19651 + components: + - type: Transform + pos: 21.5,15.5 + parent: 2 + - uid: 19652 + components: + - type: Transform + pos: 24.5,15.5 + parent: 2 + - uid: 19653 + components: + - type: Transform + pos: 25.5,15.5 + parent: 2 + - uid: 19654 + components: + - type: Transform + pos: 26.5,15.5 + parent: 2 + - uid: 19655 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 17.5,12.5 + parent: 2 + - uid: 19656 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,12.5 + parent: 2 + - uid: 19657 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,12.5 + parent: 2 + - uid: 19658 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 16.5,12.5 + parent: 2 + - uid: 19659 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,14.5 + parent: 2 + - uid: 19660 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,15.5 + parent: 2 + - uid: 19661 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,36.5 + parent: 2 + - uid: 19662 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,-18.5 + parent: 2 + - uid: 19663 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,-17.5 + parent: 2 + - uid: 19664 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,-16.5 + parent: 2 + - uid: 19665 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,16.5 + parent: 2 + - uid: 19666 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -25.5,24.5 + parent: 2 + - uid: 19667 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,24.5 + parent: 2 + - uid: 19668 + components: + - type: Transform + pos: -13.5,32.5 + parent: 2 + - uid: 19669 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,34.5 + parent: 2 + - uid: 19670 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,33.5 + parent: 2 + - uid: 19671 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,32.5 + parent: 2 + - uid: 19672 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,34.5 + parent: 2 + - uid: 19673 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,32.5 + parent: 2 + - uid: 19674 + components: + - type: Transform + pos: -18.5,40.5 + parent: 2 + - uid: 19675 + components: + - type: Transform + pos: -18.5,39.5 + parent: 2 + - uid: 19676 + components: + - type: Transform + pos: -18.5,38.5 + parent: 2 + - uid: 19677 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -33.5,25.5 + parent: 2 + - uid: 19678 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -33.5,26.5 + parent: 2 + - uid: 19679 + components: + - type: Transform + pos: -42.5,31.5 + parent: 2 + - uid: 19680 + components: + - type: Transform + pos: -42.5,32.5 + parent: 2 + - uid: 19681 + components: + - type: Transform + pos: -42.5,33.5 + parent: 2 + - uid: 19682 + components: + - type: Transform + pos: -42.5,34.5 + parent: 2 + - uid: 19683 + components: + - type: Transform + pos: -37.5,39.5 + parent: 2 + - uid: 19684 + components: + - type: Transform + pos: -35.5,23.5 + parent: 2 + - uid: 19685 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,47.5 + parent: 2 + - uid: 19686 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,62.5 + parent: 2 + - uid: 19687 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,62.5 + parent: 2 + - uid: 19688 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,62.5 + parent: 2 + - uid: 19689 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,62.5 + parent: 2 + - uid: 19690 + components: + - type: Transform + pos: 2.5,69.5 + parent: 2 + - uid: 19691 + components: + - type: Transform + pos: 0.5,69.5 + parent: 2 + - uid: 19692 + components: + - type: Transform + pos: -0.5,69.5 + parent: 2 + - uid: 19693 + components: + - type: Transform + pos: -0.5,72.5 + parent: 2 + - uid: 19694 + components: + - type: Transform + pos: 3.5,72.5 + parent: 2 + - uid: 19695 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,74.5 + parent: 2 + - uid: 19696 + components: + - type: Transform + pos: 9.5,82.5 + parent: 2 + - uid: 19697 + components: + - type: Transform + pos: 9.5,83.5 + parent: 2 + - uid: 19698 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,85.5 + parent: 2 + - uid: 19699 + components: + - type: Transform + pos: -6.5,82.5 + parent: 2 + - uid: 19700 + components: + - type: Transform + pos: -6.5,83.5 + parent: 2 + - uid: 19701 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,80.5 + parent: 2 + - uid: 19702 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,80.5 + parent: 2 + - uid: 19703 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,79.5 + parent: 2 + - uid: 19704 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,78.5 + parent: 2 + - uid: 19705 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,74.5 + parent: 2 + - uid: 19706 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,74.5 + parent: 2 + - uid: 19707 + components: + - type: Transform + pos: 16.5,-20.5 + parent: 2 + - uid: 19708 + components: + - type: Transform + pos: 16.5,-19.5 + parent: 2 + - uid: 19709 + components: + - type: Transform + pos: 16.5,-18.5 + parent: 2 + - uid: 19710 + components: + - type: Transform + pos: 19.5,-18.5 + parent: 2 + - uid: 19711 + components: + - type: Transform + pos: 39.5,-26.5 + parent: 2 + - uid: 19712 + components: + - type: Transform + pos: 17.5,-29.5 + parent: 2 + - uid: 19713 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,-28.5 + parent: 2 + - uid: 19714 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,-28.5 + parent: 2 + - uid: 19715 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,-30.5 + parent: 2 + - uid: 19716 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,-19.5 + parent: 2 + - uid: 19717 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,-18.5 + parent: 2 + - uid: 19718 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,-20.5 + parent: 2 + - uid: 19719 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-20.5 + parent: 2 + - uid: 19721 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-43.5 + parent: 2 + - uid: 19722 + components: + - type: Transform + pos: 1.5,-44.5 + parent: 2 + - uid: 19723 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,-44.5 + parent: 2 + - uid: 19724 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,-44.5 + parent: 2 + - uid: 19725 + components: + - type: Transform + pos: 5.5,-49.5 + parent: 2 + - uid: 19726 + components: + - type: Transform + pos: 2.5,-50.5 + parent: 2 + - uid: 19727 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.5,-50.5 + parent: 2 + - uid: 19728 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.5,-51.5 + parent: 2 + - uid: 19729 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.5,-55.5 + parent: 2 + - uid: 19730 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-59.5 + parent: 2 + - uid: 19731 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-58.5 + parent: 2 + - uid: 19732 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,-63.5 + parent: 2 + - uid: 19733 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,-63.5 + parent: 2 + - uid: 19734 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,-61.5 + parent: 2 + - uid: 19735 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,-61.5 + parent: 2 + - uid: 19736 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,-61.5 + parent: 2 + - uid: 19737 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,-55.5 + parent: 2 + - uid: 19738 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,-55.5 + parent: 2 + - uid: 19739 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,25.5 + parent: 2 + - uid: 19740 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,25.5 + parent: 2 + - uid: 19741 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,27.5 + parent: 2 + - uid: 19742 + components: + - type: Transform + pos: -6.5,-62.5 + parent: 2 + - uid: 19743 + components: + - type: Transform + pos: -7.5,-62.5 + parent: 2 + - uid: 19744 + components: + - type: Transform + pos: -5.5,-62.5 + parent: 2 + - uid: 19745 + components: + - type: Transform + pos: -7.5,-63.5 + parent: 2 + - uid: 19746 + components: + - type: Transform + pos: -7.5,-64.5 + parent: 2 + - uid: 19747 + components: + - type: Transform + pos: -7.5,-65.5 + parent: 2 + - uid: 19748 + components: + - type: Transform + pos: -7.5,-66.5 + parent: 2 + - uid: 19749 + components: + - type: Transform + pos: 29.5,-52.5 + parent: 2 + - uid: 19750 + components: + - type: Transform + pos: 29.5,-51.5 + parent: 2 + - uid: 19751 + components: + - type: Transform + pos: 30.5,-52.5 + parent: 2 + - uid: 19752 + components: + - type: Transform + pos: 30.5,-51.5 + parent: 2 + - uid: 19753 + components: + - type: Transform + pos: 25.5,-62.5 + parent: 2 + - uid: 19754 + components: + - type: Transform + pos: 26.5,-62.5 + parent: 2 + - uid: 19755 + components: + - type: Transform + pos: 27.5,-62.5 + parent: 2 + - uid: 19756 + components: + - type: Transform + pos: 28.5,-62.5 + parent: 2 + - uid: 19757 + components: + - type: Transform + pos: 29.5,-62.5 + parent: 2 + - uid: 19758 + components: + - type: Transform + pos: -25.5,6.5 + parent: 2 + - uid: 21938 + components: + - type: Transform + pos: 0.5,-43.5 + parent: 2 +- proto: TableReinforcedGlass + entities: + - uid: 19759 + components: + - type: Transform + pos: -41.5,-33.5 + parent: 2 + - uid: 19760 + components: + - type: Transform + pos: -41.5,-32.5 + parent: 2 +- proto: TableStone + entities: + - uid: 19761 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,-14.5 + parent: 2 + - uid: 19762 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-14.5 + parent: 2 + - uid: 19763 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,-11.5 + parent: 2 + - uid: 19764 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,44.5 + parent: 2 + - uid: 19765 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,44.5 + parent: 2 + - uid: 19766 + components: + - type: Transform + pos: 7.5,44.5 + parent: 2 +- proto: TableWood + entities: + - uid: 19767 + components: + - type: Transform + pos: -17.5,-5.5 + parent: 2 + - uid: 19768 + components: + - type: Transform + pos: -13.5,-2.5 + parent: 2 + - uid: 19769 + components: + - type: Transform + pos: -13.5,-3.5 + parent: 2 + - uid: 19770 + components: + - type: Transform + pos: -13.5,-4.5 + parent: 2 + - uid: 19771 + components: + - type: Transform + pos: -12.5,-4.5 + parent: 2 + - uid: 19772 + components: + - type: Transform + pos: -17.5,-2.5 + parent: 2 + - uid: 19773 + components: + - type: Transform + pos: -17.5,-3.5 + parent: 2 + - uid: 19774 + components: + - type: Transform + pos: -16.5,-3.5 + parent: 2 + - uid: 19775 + components: + - type: Transform + pos: -17.5,-6.5 + parent: 2 + - uid: 19776 + components: + - type: Transform + pos: -16.5,-6.5 + parent: 2 + - uid: 19777 + components: + - type: Transform + pos: -15.5,-6.5 + parent: 2 + - uid: 19778 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,13.5 + parent: 2 + - uid: 19779 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,13.5 + parent: 2 + - uid: 19780 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,13.5 + parent: 2 + - uid: 19781 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,13.5 + parent: 2 + - uid: 19782 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,15.5 + parent: 2 + - uid: 19783 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,15.5 + parent: 2 + - uid: 19784 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,15.5 + parent: 2 + - uid: 19785 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,11.5 + parent: 2 + - uid: 19786 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -16.5,11.5 + parent: 2 + - uid: 19787 + components: + - type: Transform + pos: -5.5,14.5 + parent: 2 + - uid: 19788 + components: + - type: Transform + pos: -2.5,14.5 + parent: 2 + - uid: 19789 + components: + - type: Transform + pos: -3.5,14.5 + parent: 2 + - uid: 19790 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,-64.5 + parent: 2 + - uid: 19791 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,-64.5 + parent: 2 + - uid: 19792 + components: + - type: Transform + pos: -22.5,-62.5 + parent: 2 + - uid: 19793 + components: + - type: Transform + pos: -22.5,-63.5 + parent: 2 + - uid: 19794 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,5.5 + parent: 2 + - uid: 19795 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,4.5 + parent: 2 + - uid: 19796 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,5.5 + parent: 2 + - uid: 19797 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,4.5 + parent: 2 + - uid: 19798 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,5.5 + parent: 2 + - uid: 19799 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,4.5 + parent: 2 + - uid: 19800 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,5.5 + parent: 2 + - uid: 19801 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,4.5 + parent: 2 + - uid: 19802 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,9.5 + parent: 2 + - uid: 19803 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,8.5 + parent: 2 + - uid: 19805 + components: + - type: Transform + pos: 15.5,18.5 + parent: 2 + - uid: 19806 + components: + - type: Transform + pos: 35.5,11.5 + parent: 2 + - uid: 19807 + components: + - type: Transform + pos: 40.5,12.5 + parent: 2 + - uid: 19808 + components: + - type: Transform + pos: 40.5,13.5 + parent: 2 + - uid: 19809 + components: + - type: Transform + pos: 40.5,14.5 + parent: 2 + - uid: 19810 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,5.5 + parent: 2 + - uid: 19811 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,4.5 + parent: 2 + - uid: 19812 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,4.5 + parent: 2 + - uid: 19813 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,3.5 + parent: 2 + - uid: 19814 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,1.5 + parent: 2 + - uid: 19815 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,0.5 + parent: 2 + - uid: 19816 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,3.5 + parent: 2 + - uid: 19817 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,4.5 + parent: 2 + - uid: 19818 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,3.5 + parent: 2 + - uid: 19819 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,4.5 + parent: 2 + - uid: 19820 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,4.5 + parent: 2 + - uid: 19821 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,3.5 + parent: 2 + - uid: 19822 + components: + - type: Transform + pos: 11.5,26.5 + parent: 2 + - uid: 19823 + components: + - type: Transform + pos: 14.5,27.5 + parent: 2 + - uid: 19824 + components: + - type: Transform + pos: 13.5,27.5 + parent: 2 + - uid: 19825 + components: + - type: Transform + pos: 12.5,27.5 + parent: 2 + - uid: 19826 + components: + - type: Transform + pos: 25.5,33.5 + parent: 2 + - uid: 19827 + components: + - type: Transform + pos: 25.5,29.5 + parent: 2 + - uid: 19828 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,34.5 + parent: 2 + - uid: 19829 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,35.5 + parent: 2 + - uid: 19830 + components: + - type: Transform + pos: 13.5,42.5 + parent: 2 + - uid: 19831 + components: + - type: Transform + pos: 14.5,42.5 + parent: 2 + - uid: 19832 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 23.5,35.5 + parent: 2 + - uid: 19833 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 23.5,36.5 + parent: 2 + - uid: 19834 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 23.5,38.5 + parent: 2 + - uid: 19835 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 23.5,39.5 + parent: 2 + - uid: 19836 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,-2.5 + parent: 2 + - uid: 19837 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,-2.5 + parent: 2 + - uid: 19838 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,-3.5 + parent: 2 + - uid: 19839 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,-3.5 + parent: 2 + - uid: 19840 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,22.5 + parent: 2 + - uid: 19841 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,22.5 + parent: 2 + - uid: 19842 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -19.5,22.5 + parent: 2 + - uid: 19843 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -19.5,21.5 + parent: 2 + - uid: 19844 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -19.5,20.5 + parent: 2 + - uid: 19845 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,40.5 + parent: 2 + - uid: 19846 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,40.5 + parent: 2 + - uid: 19847 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,40.5 + parent: 2 + - uid: 19848 + components: + - type: Transform + pos: -26.5,43.5 + parent: 2 + - uid: 19849 + components: + - type: Transform + pos: -26.5,44.5 + parent: 2 + - uid: 19850 + components: + - type: Transform + pos: -26.5,45.5 + parent: 2 + - uid: 19851 + components: + - type: Transform + pos: -28.5,30.5 + parent: 2 + - uid: 19852 + components: + - type: Transform + pos: -25.5,27.5 + parent: 2 + - uid: 19853 + components: + - type: Transform + pos: -8.5,48.5 + parent: 2 + - uid: 19854 + components: + - type: Transform + pos: -8.5,49.5 + parent: 2 + - uid: 19855 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,51.5 + parent: 2 + - uid: 19856 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,52.5 + parent: 2 + - uid: 19857 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,53.5 + parent: 2 + - uid: 19858 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,54.5 + parent: 2 + - uid: 19859 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,55.5 + parent: 2 + - uid: 19860 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,56.5 + parent: 2 + - uid: 19861 + components: + - type: Transform + pos: -2.5,56.5 + parent: 2 + - uid: 19862 + components: + - type: Transform + pos: -2.5,55.5 + parent: 2 + - uid: 19863 + components: + - type: Transform + pos: 10.5,52.5 + parent: 2 + - uid: 19864 + components: + - type: Transform + pos: 10.5,53.5 + parent: 2 + - uid: 19865 + components: + - type: Transform + pos: 10.5,54.5 + parent: 2 + - uid: 19866 + components: + - type: Transform + pos: 10.5,55.5 + parent: 2 + - uid: 19867 + components: + - type: Transform + pos: 9.5,54.5 + parent: 2 + - uid: 19868 + components: + - type: Transform + pos: 8.5,54.5 + parent: 2 + - uid: 19869 + components: + - type: Transform + pos: 7.5,54.5 + parent: 2 + - uid: 19870 + components: + - type: Transform + pos: 41.5,-18.5 + parent: 2 + - uid: 19871 + components: + - type: Transform + pos: 40.5,-18.5 + parent: 2 + - uid: 19872 + components: + - type: Transform + pos: 40.5,-14.5 + parent: 2 + - uid: 19873 + components: + - type: Transform + pos: 46.5,-20.5 + parent: 2 + - uid: 19874 + components: + - type: Transform + pos: 45.5,-20.5 + parent: 2 + - uid: 19875 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,-25.5 + parent: 2 + - uid: 19876 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 45.5,-25.5 + parent: 2 + - uid: 19877 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 29.5,-34.5 + parent: 2 + - uid: 19878 + components: + - type: Transform + pos: -24.5,45.5 + parent: 2 + - uid: 22838 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 17.5,16.5 + parent: 2 +- proto: TargetClown + entities: + - uid: 19879 + components: + - type: Transform + pos: -24.5,-47.5 + parent: 2 + - uid: 19880 + components: + - type: Transform + pos: -79.5,-52.5 + parent: 2 + - uid: 19881 + components: + - type: Transform + pos: -24.5,-41.5 + parent: 2 + - uid: 19882 + components: + - type: Transform + pos: -41.5,31.5 + parent: 2 +- proto: TargetHuman + entities: + - uid: 19883 + components: + - type: Transform + pos: -40.5,31.5 + parent: 2 +- proto: TargetStrange + entities: + - uid: 19884 + components: + - type: Transform + pos: -80.5,-54.5 + parent: 2 +- proto: TargetSyndicate + entities: + - uid: 19885 + components: + - type: Transform + pos: -80.5,-50.5 + parent: 2 +- proto: TechnologyDisk + entities: + - uid: 19886 + components: + - type: Transform + pos: -27.669891,-44.49347 + parent: 2 + - uid: 19887 + components: + - type: Transform + pos: -25.293148,-39.587933 + parent: 2 + - uid: 19888 + components: + - type: Transform + pos: -23.605503,-39.354836 + parent: 2 +- proto: TegCenter + entities: + - uid: 19889 + components: + - type: Transform + pos: 13.5,-44.5 + parent: 2 +- proto: TegCirculator + entities: + - uid: 19890 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 13.5,-45.5 + parent: 2 + - type: PointLight + color: '#FF3300FF' + - uid: 19891 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 13.5,-43.5 + parent: 2 + - type: PointLight + color: '#FF3300FF' +- proto: TelecomServer + entities: + - uid: 10743 + components: + - type: Transform + pos: 4.5,42.5 + parent: 2 + - type: ContainerContainer + containers: + key_slots: !type:Container + showEnts: False + occludes: True + ents: + - 10744 + machine_board: !type:Container + showEnts: False + occludes: True + ents: [] + machine_parts: !type:Container + showEnts: False + occludes: True + ents: [] + - uid: 10746 + components: + - type: Transform + pos: 5.5,42.5 + parent: 2 + - type: ContainerContainer + containers: + key_slots: !type:Container + showEnts: False + occludes: True + ents: + - 10747 + machine_board: !type:Container + showEnts: False + occludes: True + ents: [] + machine_parts: !type:Container + showEnts: False + occludes: True + ents: [] + - uid: 10749 + components: + - type: Transform + pos: 7.5,42.5 + parent: 2 + - type: ContainerContainer + containers: + key_slots: !type:Container + showEnts: False + occludes: True + ents: + - 10750 + machine_board: !type:Container + showEnts: False + occludes: True + ents: [] + machine_parts: !type:Container + showEnts: False + occludes: True + ents: [] + - uid: 10752 + components: + - type: Transform + pos: 7.5,41.5 + parent: 2 + - type: ContainerContainer + containers: + key_slots: !type:Container + showEnts: False + occludes: True + ents: + - 10753 + machine_board: !type:Container + showEnts: False + occludes: True + ents: [] + machine_parts: !type:Container + showEnts: False + occludes: True + ents: [] + - uid: 10755 + components: + - type: Transform + pos: 5.5,41.5 + parent: 2 + - type: ContainerContainer + containers: + key_slots: !type:Container + showEnts: False + occludes: True + ents: + - 10756 + machine_board: !type:Container + showEnts: False + occludes: True + ents: [] + machine_parts: !type:Container + showEnts: False + occludes: True + ents: [] + - uid: 10759 + components: + - type: Transform + pos: 7.5,39.5 + parent: 2 + - type: ContainerContainer + containers: + key_slots: !type:Container + showEnts: False + occludes: True + ents: + - 10760 + machine_board: !type:Container + showEnts: False + occludes: True + ents: [] + machine_parts: !type:Container + showEnts: False + occludes: True + ents: [] + - uid: 10762 + components: + - type: Transform + pos: 8.5,42.5 + parent: 2 + - type: ContainerContainer + containers: + key_slots: !type:Container + showEnts: False + occludes: True + ents: + - 10763 + machine_board: !type:Container + showEnts: False + occludes: True + ents: [] + machine_parts: !type:Container + showEnts: False + occludes: True + ents: [] + - uid: 10765 + components: + - type: Transform + pos: 5.5,39.5 + parent: 2 + - type: ContainerContainer + containers: + key_slots: !type:Container + showEnts: False + occludes: True + ents: + - 10766 + machine_board: !type:Container + showEnts: False + occludes: True + ents: [] + machine_parts: !type:Container + showEnts: False + occludes: True + ents: [] +- proto: TeslaCoil + entities: + - uid: 14818 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 13.5,-57.5 + parent: 2 + - uid: 15545 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.5,-57.5 + parent: 2 +- proto: TeslaGenerator + entities: + - uid: 14819 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.5,-57.5 + parent: 2 +- proto: TeslaGroundingRod + entities: + - uid: 24023 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-70.5 + parent: 2 + - uid: 24024 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-68.5 + parent: 2 +- proto: ThermomachineHeaterMachineCircuitBoard + entities: + - uid: 19892 + components: + - type: Transform + pos: 29.538464,-39.41129 + parent: 2 +- proto: TimerTrigger + entities: + - uid: 19893 + components: + - type: Transform + pos: -36.527496,-51.595573 + parent: 2 + - uid: 19894 + components: + - type: Transform + pos: -36.713974,-51.41531 + parent: 2 + - uid: 19895 + components: + - type: Transform + pos: -36.403175,-51.278557 + parent: 2 + - uid: 19896 + components: + - type: Transform + pos: -41.403442,-33.60449 + parent: 2 + - uid: 19897 + components: + - type: Transform + pos: -41.403442,-33.60449 + parent: 2 +- proto: TintedWindow + entities: + - uid: 19898 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,10.5 + parent: 2 + - uid: 19899 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,12.5 + parent: 2 + - uid: 19900 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,36.5 + parent: 2 + - uid: 19901 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,26.5 + parent: 2 + - uid: 19902 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -25.5,26.5 + parent: 2 +- proto: ToiletDirtyWater + entities: + - uid: 19903 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 40.5,24.5 + parent: 2 + - uid: 19904 + components: + - type: Transform + pos: -34.5,39.5 + parent: 2 + - uid: 19905 + components: + - type: Transform + pos: -34.5,36.5 + parent: 2 + - uid: 19906 + components: + - type: Transform + pos: -34.5,33.5 + parent: 2 +- proto: ToiletEmpty + entities: + - uid: 19907 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,50.5 + parent: 2 +- proto: ToolboxArtistic + entities: + - uid: 19908 + components: + - type: Transform + pos: -36.508865,-62.37472 + parent: 2 +- proto: ToolboxElectricalFilled + entities: + - uid: 19909 + components: + - type: Transform + pos: 10.568084,19.735395 + parent: 2 + - uid: 19910 + components: + - type: Transform + pos: 10.400251,19.525606 + parent: 2 + - uid: 19911 + components: + - type: Transform + pos: -19.435326,-24.469978 + parent: 2 + - uid: 19912 + components: + - type: Transform + pos: -6.5703607,-21.23436 + parent: 2 + - uid: 19913 + components: + - type: Transform + pos: -31.5038,-60.377403 + parent: 2 + - uid: 19914 + components: + - type: Transform + pos: -6.555467,75.76762 + parent: 2 +- proto: ToolboxEmergencyFilled + entities: + - uid: 997 + components: + - type: Transform + parent: 995 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 19915 + components: + - type: Transform + pos: -43.44388,-9.244297 + parent: 2 + - uid: 19916 + components: + - type: Transform + pos: -38.526768,-16.238062 + parent: 2 + - uid: 19917 + components: + - type: Transform + pos: -38.442932,-16.377728 + parent: 2 + - uid: 19918 + components: + - type: Transform + pos: -34.545593,-28.449944 + parent: 2 + - uid: 19919 + components: + - type: Transform + pos: -47.381298,-32.202427 + parent: 2 + - uid: 19920 + components: + - type: Transform + pos: -8.457224,37.476273 + parent: 2 +- proto: ToolboxGoldFilled + entities: + - uid: 9173 + components: + - type: Transform + parent: 9170 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ToolboxMechanicalFilled + entities: + - uid: 15877 + components: + - type: Transform + parent: 15876 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 19921 + components: + - type: Transform + pos: 4.453135,16.575903 + parent: 2 + - uid: 19922 + components: + - type: Transform + pos: 4.518403,16.762384 + parent: 2 + - uid: 19923 + components: + - type: Transform + pos: 4.4717827,16.976835 + parent: 2 + - uid: 19924 + components: + - type: Transform + pos: -38.540737,-19.57605 + parent: 2 + - uid: 19925 + components: + - type: Transform + pos: -38.456905,-19.478285 + parent: 2 + - uid: 19926 + components: + - type: Transform + pos: -38.6106,-19.338621 + parent: 2 + - uid: 19927 + components: + - type: Transform + pos: -36.50349,-24.459915 + parent: 2 + - uid: 19928 + components: + - type: Transform + pos: -34.461678,-28.226166 + parent: 2 + - uid: 19929 + components: + - type: Transform + pos: -19.56586,-24.227554 + parent: 2 + - uid: 19930 + components: + - type: Transform + pos: -6.5050926,-21.430162 + parent: 2 + - uid: 19931 + components: + - type: Transform + pos: -44.55955,-38.22259 + parent: 2 + - uid: 19932 + components: + - type: Transform + pos: -44.48962,-38.348465 + parent: 2 + - uid: 19933 + components: + - type: Transform + pos: -47.465214,-31.95068 + parent: 2 + - uid: 19934 + components: + - type: Transform + pos: -11.517578,-53.4752 + parent: 2 + - uid: 19935 + components: + - type: Transform + pos: 41.28955,19.715477 + parent: 2 + - uid: 19936 + components: + - type: Transform + pos: -14.486763,34.5394 + parent: 2 + - uid: 19937 + components: + - type: Transform + pos: -8.559227,37.743702 + parent: 2 + - uid: 19938 + components: + - type: Transform + pos: -6.429593,75.50188 + parent: 2 + - uid: 19939 + components: + - type: Transform + pos: 28.511677,-14.453636 + parent: 2 +- proto: ToyAi + entities: + - uid: 19940 + components: + - type: Transform + pos: 1.4992511,77.624275 + parent: 2 +- proto: ToyAmongPequeno + entities: + - uid: 19941 + components: + - type: Transform + pos: 12.5,30.5 + parent: 2 +- proto: ToyFigurineBartender + entities: + - uid: 19942 + components: + - type: Transform + pos: 19.382366,12.697111 + parent: 2 + - uid: 23930 + components: + - type: Transform + parent: 23915 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ToyFigurineCaptain + entities: + - uid: 19943 + components: + - type: Transform + pos: -8.336638,55.082047 + parent: 2 +- proto: ToyFigurineChef + entities: + - uid: 19944 + components: + - type: Transform + pos: 23.744114,17.729523 + parent: 2 +- proto: ToyFigurineChiefEngineer + entities: + - uid: 19945 + components: + - type: Transform + pos: 11.694183,-50.93051 + parent: 2 +- proto: ToyFigurineChiefMedicalOfficer + entities: + - uid: 19946 + components: + - type: Transform + pos: 25.700378,-19.332878 + parent: 2 +- proto: ToyFigurineClown + entities: + - uid: 10543 + components: + - type: Transform + parent: 10524 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 19947 + components: + - type: Transform + pos: 7.5,4.5 + parent: 2 + - uid: 19948 + components: + - type: Transform + pos: 40.7377,12.566254 + parent: 2 +- proto: ToyFigurineFootsoldier + entities: + - uid: 19949 + components: + - type: Transform + pos: -39.551273,34.797108 + parent: 2 +- proto: ToyFigurineHeadOfPersonnel + entities: + - uid: 19950 + components: + - type: Transform + pos: 6.654764,48.889687 + parent: 2 +- proto: ToyFigurineJanitor + entities: + - uid: 15988 + components: + - type: Transform + parent: 1930 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 19951 + components: + - type: Transform + pos: 7.476756,13.849148 + parent: 2 + - uid: 23902 + components: + - type: Transform + parent: 19985 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage +- proto: ToyFigurineLawyer + entities: + - uid: 19952 + components: + - type: Transform + pos: -3.016523,14.815199 + parent: 2 +- proto: ToyFigurineLibrarian + entities: + - uid: 19953 + components: + - type: Transform + pos: 42.899353,4.4172344 + parent: 2 +- proto: ToyFigurineMime + entities: + - uid: 10512 + components: + - type: Transform + parent: 10501 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 19954 + components: + - type: Transform + pos: 8.5,3.5 + parent: 2 + - uid: 19955 + components: + - type: Transform + pos: 40.7377,13.181639 + parent: 2 +- proto: ToyFigurineMusician + entities: + - uid: 19956 + components: + - type: Transform + pos: 40.318123,14.048771 + parent: 2 +- proto: ToyFigurineNukie + entities: + - uid: 19957 + components: + - type: Transform + pos: -39.339928,34.69765 + parent: 2 +- proto: ToyFigurineNukieElite + entities: + - uid: 19958 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.40407538,-53.633064 + parent: 2 +- proto: ToyFigurineParamedic + entities: + - uid: 19959 + components: + - type: Transform + pos: 9.115516,-20.41076 + parent: 2 +- proto: ToyFigurineQuartermaster + entities: + - uid: 19960 + components: + - type: Transform + pos: -27.230625,5.716192 + parent: 2 +- proto: ToyFigurineQueen + entities: + - uid: 19961 + components: + - type: Transform + pos: 43.440147,4.333318 + parent: 2 +- proto: ToyFigurineResearchDirector + entities: + - uid: 19962 + components: + - type: Transform + pos: -15.687011,-22.381687 + parent: 2 +- proto: ToyFigurineSalvage + entities: + - uid: 19963 + components: + - type: Transform + pos: -43.548775,-9.3911495 + parent: 2 +- proto: ToyFigurineScientist + entities: + - uid: 19964 + components: + - type: Transform + pos: -27.35825,-21.383192 + parent: 2 +- proto: ToyFigurineSecurity + entities: + - uid: 19965 + components: + - type: Transform + pos: 3.8376749,62.768875 + parent: 2 +- proto: ToyFigurineWarden + entities: + - uid: 19966 + components: + - type: Transform + pos: 3.1570222,62.66631 + parent: 2 +- proto: ToyFigurineWizardFake + entities: + - uid: 19967 + components: + - type: Transform + pos: -26.585339,-67.36029 + parent: 2 + - uid: 19968 + components: + - type: Transform + pos: 30.784172,-6.8009963 + parent: 2 +- proto: ToyNuke + entities: + - uid: 19969 + components: + - type: Transform + pos: -80.53846,-52.465786 + parent: 2 +- proto: ToyRubberDuck + entities: + - uid: 19970 + components: + - type: Transform + pos: 40.674366,21.842209 + parent: 2 + - uid: 19971 + components: + - type: Transform + pos: -8.639301,49.365543 + parent: 2 +- proto: TrainingBomb + entities: + - uid: 19972 + components: + - type: Transform + pos: -17.5,40.5 + parent: 2 +- proto: TrashBananaPeel + entities: + - uid: 19973 + components: + - type: Transform + pos: 32.515907,9.50536 + parent: 2 + - uid: 19974 + components: + - type: Transform + pos: -27.531189,16.470947 + parent: 2 + - uid: 19975 + components: + - type: Transform + pos: 4.5,-35.5 + parent: 2 +- proto: TwoWayLever + entities: + - uid: 19976 + components: + - type: Transform + pos: -39.5,11.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 23355: + - Left: Open + - Right: Open + - Middle: Close + 23354: + - Left: Close + - Right: Close + - Middle: Open + - uid: 19977 + components: + - type: Transform + pos: -42.5,-4.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 9128: + - Left: Forward + - Right: Reverse + - Middle: Off + 9127: + - Left: Forward + - Right: Reverse + - Middle: Off + 9126: + - Left: Forward + - Right: Reverse + - Middle: Off + 9125: + - Left: Forward + - Right: Reverse + - Middle: Off + 9124: + - Left: Forward + - Right: Reverse + - Middle: Off + 9123: + - Left: Forward + - Right: Reverse + - Middle: Off + 9122: + - Left: Forward + - Right: Reverse + - Middle: Off + 9121: + - Left: Forward + - Right: Reverse + - Middle: Off + - uid: 19978 + components: + - type: Transform + pos: -42.5,3.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 9129: + - Left: Forward + - Right: Reverse + - Middle: Off + 9130: + - Left: Forward + - Right: Reverse + - Middle: Off + 9131: + - Left: Forward + - Right: Reverse + - Middle: Off + 9132: + - Left: Forward + - Right: Reverse + - Middle: Off + 9133: + - Left: Forward + - Right: Reverse + - Middle: Off + 9134: + - Left: Forward + - Right: Reverse + - Middle: Off + 9135: + - Left: Forward + - Right: Reverse + - Middle: Off + 9136: + - Left: Forward + - Right: Reverse + - Middle: Off + - uid: 19979 + components: + - type: Transform + pos: -42.5,11.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 9103: + - Left: Forward + - Right: Reverse + - Middle: Off + 9104: + - Left: Forward + - Right: Reverse + - Middle: Off + 9105: + - Left: Forward + - Right: Reverse + - Middle: Off + 9106: + - Left: Forward + - Right: Reverse + - Middle: Off + 9107: + - Left: Forward + - Right: Reverse + - Middle: Off + 9108: + - Left: Forward + - Right: Reverse + - Middle: Off + 9109: + - Left: Forward + - Right: Reverse + - Middle: Off + 9110: + - Left: Forward + - Right: Reverse + - Middle: Off + 9111: + - Left: Forward + - Right: Reverse + - Middle: Off + 9112: + - Left: Forward + - Right: Reverse + - Middle: Off + 9113: + - Left: Forward + - Right: Reverse + - Middle: Off + 9114: + - Left: Forward + - Right: Reverse + - Middle: Off + 9115: + - Left: Forward + - Right: Reverse + - Middle: Off + 9116: + - Left: Forward + - Right: Reverse + - Middle: Off + 9117: + - Left: Forward + - Right: Reverse + - Middle: Off + 9118: + - Left: Forward + - Right: Reverse + - Middle: Off + 9119: + - Left: Forward + - Right: Reverse + - Middle: Off + 9120: + - Left: Forward + - Right: Reverse + - Middle: Off + - uid: 19980 + components: + - type: Transform + pos: -42.5,15.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 9145: + - Left: Forward + - Right: Reverse + - Middle: Off + 9146: + - Left: Forward + - Right: Reverse + - Middle: Off + 9147: + - Left: Forward + - Right: Reverse + - Middle: Off + 9148: + - Left: Forward + - Right: Reverse + - Middle: Off + 9149: + - Left: Forward + - Right: Reverse + - Middle: Off + 9150: + - Left: Forward + - Right: Reverse + - Middle: Off + 9151: + - Left: Forward + - Right: Reverse + - Middle: Off + 9152: + - Left: Forward + - Right: Reverse + - Middle: Off + 9153: + - Left: Forward + - Right: Reverse + - Middle: Off + 9154: + - Left: Forward + - Right: Reverse + - Middle: Off + 9155: + - Left: Forward + - Right: Reverse + - Middle: Off + 9156: + - Left: Forward + - Right: Reverse + - Middle: Off + 17545: + - Left: Forward + - Right: Reverse + - Middle: Off + - uid: 19981 + components: + - type: Transform + pos: 0.98919,61.763584 + parent: 2 + - uid: 19982 + components: + - type: Transform + pos: 19.5,45.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 1009: + - Left: Open + - Right: Open + - Middle: Close + - uid: 19983 + components: + - type: Transform + pos: 21.5,45.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 9158: + - Left: Forward + - Right: Reverse + - Middle: Off + 9157: + - Left: Forward + - Right: Reverse + - Middle: Off + - uid: 19984 + components: + - type: Transform + pos: -25.5,-3.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 9099: + - Left: Forward + - Right: Reverse + - Middle: Off + 9098: + - Left: Forward + - Right: Reverse + - Middle: Off + 9159: + - Left: Forward + - Right: Reverse + - Middle: Off + 9102: + - Left: Forward + - Right: Reverse + - Middle: Off + 9101: + - Left: Forward + - Right: Reverse + - Middle: Off + 9100: + - Left: Forward + - Right: Reverse + - Middle: Off +- proto: UnfinishedMachineFrame + entities: + - uid: 19986 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,35.5 + parent: 2 + - uid: 19987 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,7.5 + parent: 2 + - uid: 19988 + components: + - type: Transform + pos: -18.5,-14.5 + parent: 2 + - uid: 19989 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,-27.5 + parent: 2 + - uid: 19990 + components: + - type: Transform + pos: -21.5,-36.5 + parent: 2 + - uid: 19991 + components: + - type: Transform + pos: 19.5,27.5 + parent: 2 +- proto: UniformPrinter + entities: + - uid: 19993 + components: + - type: Transform + pos: 6.5,49.5 + parent: 2 +- proto: UniformScrubsColorGreen + entities: + - uid: 19994 + components: + - type: Transform + pos: 10.509234,-36.60511 + parent: 2 +- proto: UnstableMutagenChemistryBottle + entities: + - uid: 10579 + components: + - type: Transform + parent: 10576 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 10580 + components: + - type: Transform + parent: 10576 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: Vaccinator + entities: + - uid: 19995 + components: + - type: Transform + pos: 47.5,-30.5 + parent: 2 +- proto: VaccinatorMachineCircuitboard + entities: + - uid: 8635 + components: + - type: Transform + parent: 8628 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: VariantCubeBox + entities: + - uid: 19996 + components: + - type: Transform + pos: -31.47277,17.56227 + parent: 2 + - uid: 19997 + components: + - type: Transform + pos: -22.64478,-30.965834 + parent: 2 + - uid: 19998 + components: + - type: Transform + pos: -6.5973415,-30.622778 + parent: 2 + - uid: 19999 + components: + - type: Transform + pos: -6.4108615,-30.287115 + parent: 2 + - uid: 20000 + components: + - type: Transform + pos: -6.2181654,-30.486027 + parent: 2 + - uid: 20001 + components: + - type: Transform + pos: 47.621708,-29.59404 + parent: 2 + - uid: 20002 + components: + - type: Transform + pos: 47.391716,-29.46972 + parent: 2 +- proto: VendingBarDrobe + entities: + - uid: 20004 + components: + - type: Transform + pos: 15.5,16.5 + parent: 2 +- proto: VendingMachineAtmosDrobe + entities: + - uid: 20005 + components: + - type: Transform + pos: 22.5,-39.5 + parent: 2 +- proto: VendingMachineBooze + entities: + - uid: 20006 + components: + - type: Transform + pos: -24.5,-61.5 + parent: 2 + - uid: 20007 + components: + - type: Transform + pos: 17.5,14.5 + parent: 2 + - uid: 20008 + components: + - type: Transform + pos: -19.5,18.5 + parent: 2 + - uid: 20009 + components: + - type: Transform + pos: -6.5,57.5 + parent: 2 + - uid: 20010 + components: + - type: Transform + pos: 5.5,51.5 + parent: 2 +- proto: VendingMachineCargoDrobe + entities: + - uid: 20011 + components: + - type: Transform + pos: -43.5,8.5 + parent: 2 +- proto: VendingMachineCart + entities: + - uid: 20012 + components: + - type: Transform + pos: 9.5,50.5 + parent: 2 +- proto: VendingMachineChapel + entities: + - uid: 20013 + components: + - type: Transform + pos: 13.5,44.5 + parent: 2 +- proto: VendingMachineChefDrobe + entities: + - uid: 20014 + components: + - type: Transform + pos: 22.5,23.5 + parent: 2 +- proto: VendingMachineChefvend + entities: + - uid: 20015 + components: + - type: Transform + pos: -8.5,-14.5 + parent: 2 + - uid: 20016 + components: + - type: Transform + pos: 19.5,17.5 + parent: 2 +- proto: VendingMachineChemDrobe + entities: + - uid: 20017 + components: + - type: Transform + pos: 28.5,-18.5 + parent: 2 +- proto: VendingMachineChemicals + entities: + - uid: 20018 + components: + - type: Transform + pos: 4.5,-32.5 + parent: 2 +- proto: VendingMachineCigs + entities: + - uid: 20019 + components: + - type: Transform + pos: 5.5,4.5 + parent: 2 + - uid: 20021 + components: + - type: Transform + pos: 27.5,5.5 + parent: 2 + - uid: 20022 + components: + - type: Transform + pos: 34.5,-12.5 + parent: 2 + - uid: 20023 + components: + - type: Transform + pos: 9.5,56.5 + parent: 2 +- proto: VendingMachineClothing + entities: + - uid: 20024 + components: + - type: Transform + pos: 35.5,26.5 + parent: 2 +- proto: VendingMachineCoffee + entities: + - uid: 20025 + components: + - type: Transform + pos: 8.5,-4.5 + parent: 2 + - uid: 20027 + components: + - type: Transform + pos: -27.5,30.5 + parent: 2 + - uid: 20028 + components: + - type: Transform + pos: 4.5,56.5 + parent: 2 + - uid: 20029 + components: + - type: Transform + pos: -6.5,72.5 + parent: 2 + - uid: 20030 + components: + - type: Transform + pos: 15.5,21.5 + parent: 2 + - uid: 20072 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -16.5,9.5 + parent: 2 +- proto: VendingMachineCola + entities: + - uid: 20031 + components: + - type: Transform + pos: -6.5,-4.5 + parent: 2 +- proto: VendingMachineCondiments + entities: + - uid: 20032 + components: + - type: Transform + pos: 22.5,11.5 + parent: 2 +- proto: VendingMachineCourierDrobe + entities: + - uid: 20033 + components: + - type: Transform + pos: -30.5,-2.5 + parent: 2 +- proto: VendingMachineCuraDrobe + entities: + - uid: 20034 + components: + - type: Transform + pos: 44.5,-1.5 + parent: 2 +- proto: VendingMachineDetDrobe + entities: + - uid: 20035 + components: + - type: Transform + pos: -21.5,18.5 + parent: 2 +- proto: VendingMachineDinnerware + entities: + - uid: 20036 + components: + - type: Transform + pos: -7.5,-14.5 + parent: 2 + - uid: 20037 + components: + - type: Transform + pos: 19.5,18.5 + parent: 2 +- proto: VendingMachineDonut + entities: + - uid: 20038 + components: + - type: Transform + pos: 15.5,20.5 + parent: 2 +- proto: VendingMachineEngiDrobe + entities: + - uid: 20039 + components: + - type: Transform + pos: -16.5,-59.5 + parent: 2 +- proto: VendingMachineEngivend + entities: + - uid: 20040 + components: + - type: Transform + pos: -16.5,-60.5 + parent: 2 + - uid: 20041 + components: + - type: Transform + pos: 2.5,-44.5 + parent: 2 + - uid: 20042 + components: + - type: Transform + pos: 10.5,17.5 + parent: 2 +- proto: VendingMachineGames + entities: + - uid: 20043 + components: + - type: Transform + pos: 43.5,9.5 + parent: 2 + - uid: 20044 + components: + - type: Transform + pos: -40.5,37.5 + parent: 2 +- proto: VendingMachineGeneDrobe + entities: + - uid: 20045 + components: + - type: Transform + pos: 23.5,-31.5 + parent: 2 +- proto: VendingMachineHydrobe + entities: + - uid: 20046 + components: + - type: Transform + pos: 43.5,19.5 + parent: 2 +- proto: VendingMachineJaniDrobe + entities: + - uid: 20047 + components: + - type: Transform + pos: 9.5,15.5 + parent: 2 +- proto: VendingMachineLawDrobe + entities: + - uid: 20048 + components: + - type: Transform + pos: -6.5,16.5 + parent: 2 +- proto: VendingMachineMedical + entities: + - uid: 20049 + components: + - type: Transform + pos: -26.5,36.5 + parent: 2 + - uid: 20050 + components: + - type: Transform + pos: 9.5,72.5 + parent: 2 + - uid: 20051 + components: + - type: Transform + pos: 12.5,-15.5 + parent: 2 + - uid: 20052 + components: + - type: Transform + pos: 42.5,-33.5 + parent: 2 + - uid: 20053 + components: + - type: Transform + pos: 23.5,-28.5 + parent: 2 + - uid: 20054 + components: + - type: Transform + pos: 41.5,-20.5 + parent: 2 +- proto: VendingMachineMediDrobe + entities: + - uid: 20055 + components: + - type: Transform + pos: 17.5,-20.5 + parent: 2 +- proto: VendingMachineNutri + entities: + - uid: 20056 + components: + - type: Transform + pos: 34.5,19.5 + parent: 2 +- proto: VendingMachineRestockSeeds + entities: + - uid: 20057 + components: + - type: Transform + pos: 32.46631,19.665796 + parent: 2 +- proto: VendingMachineRoboDrobe + entities: + - uid: 20058 + components: + - type: Transform + pos: -22.5,-16.5 + parent: 2 +- proto: VendingMachineSalvage + entities: + - uid: 20059 + components: + - type: Transform + pos: -36.5,-9.5 + parent: 2 +- proto: VendingMachineSciDrobe + entities: + - uid: 20060 + components: + - type: Transform + pos: -36.5,-41.5 + parent: 2 +- proto: VendingMachineSec + entities: + - uid: 20061 + components: + - type: Transform + pos: -9.5,31.5 + parent: 2 +- proto: VendingMachineSecDrobe + entities: + - uid: 20062 + components: + - type: Transform + pos: -27.5,-34.5 + parent: 2 + - uid: 20063 + components: + - type: Transform + pos: 27.5,-4.5 + parent: 2 + - uid: 20064 + components: + - type: Transform + pos: 45.5,-16.5 + parent: 2 + - uid: 20065 + components: + - type: Transform + pos: -8.5,34.5 + parent: 2 + - uid: 20066 + components: + - type: Transform + pos: 3.5,-50.5 + parent: 2 +- proto: VendingMachineSeeds + entities: + - uid: 20067 + components: + - type: Transform + pos: 35.5,19.5 + parent: 2 +- proto: VendingMachineSeedsUnlocked + entities: + - uid: 20068 + components: + - type: Transform + pos: 5.5,-2.5 + parent: 2 + - uid: 20069 + components: + - type: Transform + pos: -40.5,30.5 + parent: 2 +- proto: VendingMachineSnack + entities: + - uid: 20070 + components: + - type: Transform + pos: 32.5,-12.5 + parent: 2 +- proto: VendingMachineSnackBlue + entities: + - uid: 20071 + components: + - type: Transform + pos: 8.5,-3.5 + parent: 2 +- proto: VendingMachineSnackOrange + entities: + - uid: 20073 + components: + - type: Transform + pos: -6.5,-3.5 + parent: 2 + - uid: 20074 + components: + - type: Transform + pos: 40.5,-20.5 + parent: 2 +- proto: VendingMachineSustenance + entities: + - uid: 20075 + components: + - type: Transform + pos: -38.5,37.5 + parent: 2 +- proto: VendingMachineTankDispenserEngineering + entities: + - uid: 20076 + components: + - type: Transform + pos: 2.5,-60.5 + parent: 2 + - uid: 20077 + components: + - type: Transform + pos: 18.5,-39.5 + parent: 2 + - uid: 23864 + components: + - type: Transform + pos: -4.5,-62.5 + parent: 2 +- proto: VendingMachineTankDispenserEVA + entities: + - uid: 20078 + components: + - type: Transform + pos: -6.5,-22.5 + parent: 2 + - uid: 20079 + components: + - type: Transform + pos: -37.5,-36.5 + parent: 2 + - uid: 20080 + components: + - type: Transform + pos: -34.5,-45.5 + parent: 2 + - uid: 20081 + components: + - type: Transform + pos: -8.5,43.5 + parent: 2 + - uid: 20082 + components: + - type: Transform + pos: -39.5,25.5 + parent: 2 + - uid: 20083 + components: + - type: Transform + pos: 12.5,51.5 + parent: 2 + - uid: 20084 + components: + - type: Transform + pos: 9.5,74.5 + parent: 2 + - uid: 20085 + components: + - type: Transform + pos: 9.5,74.5 + parent: 2 +- proto: VendingMachineTheater + entities: + - uid: 20086 + components: + - type: Transform + pos: 42.5,15.5 + parent: 2 + - uid: 20087 + components: + - type: Transform + pos: 37.5,26.5 + parent: 2 +- proto: VendingMachineVendomat + entities: + - uid: 20088 + components: + - type: Transform + pos: 31.5,5.5 + parent: 2 + - uid: 20089 + components: + - type: Transform + pos: -3.5,4.5 + parent: 2 + - uid: 20090 + components: + - type: Transform + pos: 6.5,19.5 + parent: 2 +- proto: VendingMachineViroDrobe + entities: + - uid: 20091 + components: + - type: Transform + pos: 42.5,-34.5 + parent: 2 +- proto: VendingMachineWallMedical + entities: + - uid: 20092 + components: + - type: Transform + pos: 18.5,3.5 + parent: 2 + - uid: 20093 + components: + - type: Transform + pos: 31.5,-13.5 + parent: 2 + - uid: 20094 + components: + - type: Transform + pos: 44.5,-19.5 + parent: 2 + - uid: 20095 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,-20.5 + parent: 2 + - uid: 20096 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,-26.5 + parent: 2 + - uid: 20097 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 17.5,-33.5 + parent: 2 + - uid: 20098 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,-33.5 + parent: 2 +- proto: VendingMachineYouTool + entities: + - uid: 20099 + components: + - type: Transform + pos: 5.5,19.5 + parent: 2 + - uid: 20100 + components: + - type: Transform + pos: 9.5,71.5 + parent: 2 + - uid: 20101 + components: + - type: Transform + pos: 28.5,-39.5 + parent: 2 + - uid: 20102 + components: + - type: Transform + pos: 3.5,-44.5 + parent: 2 +- proto: WallmountTelescreen + entities: + - uid: 20103 + components: + - type: Transform + pos: -28.5,-33.5 + parent: 2 + - uid: 20104 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,26.5 + parent: 2 + - uid: 20105 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -18.5,36.5 + parent: 2 + - uid: 20106 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,26.5 + parent: 2 +- proto: WallmountTelevision + entities: + - uid: 20107 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 36.5,25.5 + parent: 2 + - uid: 20108 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-14.5 + parent: 2 + - uid: 20109 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,-11.5 + parent: 2 + - uid: 20110 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 41.5,44.5 + parent: 2 + - uid: 20111 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,-1.5 + parent: 2 + - uid: 20112 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,-9.5 + parent: 2 + - uid: 20113 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,-1.5 + parent: 2 + - uid: 20114 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,33.5 + parent: 2 + - uid: 20115 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,49.5 + parent: 2 +- proto: WallPlastitanium + entities: + - uid: 20116 + components: + - type: Transform + pos: 27.5,43.5 + parent: 2 + - uid: 20117 + components: + - type: Transform + pos: 31.5,43.5 + parent: 2 + - uid: 20118 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,43.5 + parent: 2 + - uid: 23937 + components: + - type: Transform + pos: -49.5,-28.5 + parent: 2 +- proto: WallReinforced + entities: + - uid: 8905 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,-40.5 + parent: 2 + - uid: 8906 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,-50.5 + parent: 2 + - uid: 8907 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,-49.5 + parent: 2 + - uid: 8924 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,-49.5 + parent: 2 + - uid: 9024 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,-49.5 + parent: 2 + - uid: 9025 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-19.5 + parent: 2 + - uid: 10585 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-19.5 + parent: 2 + - uid: 15837 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-19.5 + parent: 2 + - uid: 15838 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,-19.5 + parent: 2 + - uid: 15933 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,-19.5 + parent: 2 + - uid: 16025 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,-19.5 + parent: 2 + - uid: 16026 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,-19.5 + parent: 2 + - uid: 16027 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,-20.5 + parent: 2 + - uid: 16028 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-20.5 + parent: 2 + - uid: 16029 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,-20.5 + parent: 2 + - uid: 16048 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,-20.5 + parent: 2 + - uid: 16072 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,-17.5 + parent: 2 + - uid: 16073 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,-16.5 + parent: 2 + - uid: 16074 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,-15.5 + parent: 2 + - uid: 16075 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,-15.5 + parent: 2 + - uid: 16304 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -49.5,-17.5 + parent: 2 + - uid: 16320 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -49.5,-21.5 + parent: 2 + - uid: 16321 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -51.5,-21.5 + parent: 2 + - uid: 16322 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -51.5,-17.5 + parent: 2 + - uid: 17057 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -19.5,-15.5 + parent: 2 + - uid: 17058 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,-15.5 + parent: 2 + - uid: 17059 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,-15.5 + parent: 2 + - uid: 17060 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,-15.5 + parent: 2 + - uid: 17061 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,-15.5 + parent: 2 + - uid: 17062 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,-15.5 + parent: 2 + - uid: 17167 + components: + - type: Transform + pos: 17.5,-7.5 + parent: 2 + - uid: 17168 + components: + - type: Transform + pos: 16.5,-7.5 + parent: 2 + - uid: 17414 + components: + - type: Transform + pos: 15.5,-7.5 + parent: 2 + - uid: 18472 + components: + - type: Transform + pos: -3.5,-45.5 + parent: 2 + - uid: 18551 + components: + - type: Transform + pos: 14.5,-7.5 + parent: 2 + - uid: 18593 + components: + - type: Transform + pos: -3.5,-43.5 + parent: 2 + - uid: 18868 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,-14.5 + parent: 2 + - uid: 18991 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,-15.5 + parent: 2 + - uid: 18992 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,-15.5 + parent: 2 + - uid: 18993 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -29.5,-15.5 + parent: 2 + - uid: 19012 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,-15.5 + parent: 2 + - uid: 19013 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,-15.5 + parent: 2 + - uid: 19210 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,-15.5 + parent: 2 + - uid: 19992 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,-16.5 + parent: 2 + - uid: 20003 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,-18.5 + parent: 2 + - uid: 20119 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,49.5 + parent: 2 + - uid: 20120 + components: + - type: Transform + pos: 39.5,-54.5 + parent: 2 + - uid: 20121 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,-60.5 + parent: 2 + - uid: 20122 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,-61.5 + parent: 2 + - uid: 20123 + components: + - type: Transform + pos: 5.5,23.5 + parent: 2 + - uid: 20124 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,25.5 + parent: 2 + - uid: 20125 + components: + - type: Transform + pos: -44.5,19.5 + parent: 2 + - uid: 20126 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,27.5 + parent: 2 + - uid: 20127 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,-59.5 + parent: 2 + - uid: 20128 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,-58.5 + parent: 2 + - uid: 20129 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,-57.5 + parent: 2 + - uid: 20130 + components: + - type: Transform + pos: -43.5,19.5 + parent: 2 + - uid: 20131 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,54.5 + parent: 2 + - uid: 20132 + components: + - type: Transform + pos: -11.5,-20.5 + parent: 2 + - uid: 20133 + components: + - type: Transform + pos: -11.5,-19.5 + parent: 2 + - uid: 20134 + components: + - type: Transform + pos: -13.5,-20.5 + parent: 2 + - uid: 20135 + components: + - type: Transform + pos: -13.5,-19.5 + parent: 2 + - uid: 20136 + components: + - type: Transform + pos: -13.5,-18.5 + parent: 2 + - uid: 20137 + components: + - type: Transform + pos: -12.5,-20.5 + parent: 2 + - uid: 20138 + components: + - type: Transform + pos: -14.5,-18.5 + parent: 2 + - uid: 20139 + components: + - type: Transform + pos: -15.5,-18.5 + parent: 2 + - uid: 20140 + components: + - type: Transform + pos: -16.5,-18.5 + parent: 2 + - uid: 20141 + components: + - type: Transform + pos: -17.5,-18.5 + parent: 2 + - uid: 20142 + components: + - type: Transform + pos: -23.5,3.5 + parent: 2 + - uid: 20143 + components: + - type: Transform + pos: -24.5,3.5 + parent: 2 + - uid: 20144 + components: + - type: Transform + pos: -22.5,3.5 + parent: 2 + - uid: 20145 + components: + - type: Transform + pos: -27.5,3.5 + parent: 2 + - uid: 20146 + components: + - type: Transform + pos: -28.5,3.5 + parent: 2 + - uid: 20147 + components: + - type: Transform + pos: -29.5,3.5 + parent: 2 + - uid: 20148 + components: + - type: Transform + pos: -30.5,3.5 + parent: 2 + - uid: 20149 + components: + - type: Transform + pos: -31.5,3.5 + parent: 2 + - uid: 20150 + components: + - type: Transform + pos: -25.5,3.5 + parent: 2 + - uid: 20151 + components: + - type: Transform + pos: -26.5,3.5 + parent: 2 + - uid: 20152 + components: + - type: Transform + pos: -31.5,4.5 + parent: 2 + - uid: 20153 + components: + - type: Transform + pos: -31.5,8.5 + parent: 2 + - uid: 20154 + components: + - type: Transform + pos: -31.5,9.5 + parent: 2 + - uid: 20155 + components: + - type: Transform + pos: -29.5,9.5 + parent: 2 + - uid: 20156 + components: + - type: Transform + pos: -28.5,9.5 + parent: 2 + - uid: 20157 + components: + - type: Transform + pos: -27.5,9.5 + parent: 2 + - uid: 20158 + components: + - type: Transform + pos: -26.5,8.5 + parent: 2 + - uid: 20159 + components: + - type: Transform + pos: -26.5,4.5 + parent: 2 + - uid: 20160 + components: + - type: Transform + pos: -26.5,5.5 + parent: 2 + - uid: 20161 + components: + - type: Transform + pos: -25.5,8.5 + parent: 2 + - uid: 20162 + components: + - type: Transform + pos: -24.5,8.5 + parent: 2 + - uid: 20163 + components: + - type: Transform + pos: -23.5,8.5 + parent: 2 + - uid: 20164 + components: + - type: Transform + pos: -22.5,6.5 + parent: 2 + - uid: 20165 + components: + - type: Transform + pos: -22.5,5.5 + parent: 2 + - uid: 20166 + components: + - type: Transform + pos: -22.5,4.5 + parent: 2 + - uid: 20167 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,13.5 + parent: 2 + - uid: 20168 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.5,13.5 + parent: 2 + - uid: 20169 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.5,14.5 + parent: 2 + - uid: 20170 + components: + - type: Transform + pos: -32.5,13.5 + parent: 2 + - uid: 20171 + components: + - type: Transform + pos: -34.5,13.5 + parent: 2 + - uid: 20172 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,13.5 + parent: 2 + - uid: 20173 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,13.5 + parent: 2 + - uid: 20174 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -37.5,13.5 + parent: 2 + - uid: 20175 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -38.5,13.5 + parent: 2 + - uid: 20176 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -39.5,13.5 + parent: 2 + - uid: 20177 + components: + - type: Transform + pos: -30.5,15.5 + parent: 2 + - uid: 20178 + components: + - type: Transform + pos: -30.5,16.5 + parent: 2 + - uid: 20179 + components: + - type: Transform + pos: -30.5,17.5 + parent: 2 + - uid: 20180 + components: + - type: Transform + pos: -30.5,18.5 + parent: 2 + - uid: 20181 + components: + - type: Transform + pos: -31.5,18.5 + parent: 2 + - uid: 20182 + components: + - type: Transform + pos: -32.5,18.5 + parent: 2 + - uid: 20183 + components: + - type: Transform + pos: -33.5,18.5 + parent: 2 + - uid: 20184 + components: + - type: Transform + pos: -34.5,18.5 + parent: 2 + - uid: 20185 + components: + - type: Transform + pos: -35.5,18.5 + parent: 2 + - uid: 20186 + components: + - type: Transform + pos: -36.5,18.5 + parent: 2 + - uid: 20187 + components: + - type: Transform + pos: -36.5,17.5 + parent: 2 + - uid: 20188 + components: + - type: Transform + pos: -36.5,16.5 + parent: 2 + - uid: 20189 + components: + - type: Transform + pos: -36.5,15.5 + parent: 2 + - uid: 20190 + components: + - type: Transform + pos: -36.5,14.5 + parent: 2 + - uid: 20191 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -37.5,18.5 + parent: 2 + - uid: 20192 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -38.5,18.5 + parent: 2 + - uid: 20193 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -39.5,18.5 + parent: 2 + - uid: 20194 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -39.5,16.5 + parent: 2 + - uid: 20195 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -39.5,15.5 + parent: 2 + - uid: 20196 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -39.5,14.5 + parent: 2 + - uid: 20197 + components: + - type: Transform + pos: -43.5,18.5 + parent: 2 + - uid: 20198 + components: + - type: Transform + pos: -42.5,18.5 + parent: 2 + - uid: 20199 + components: + - type: Transform + pos: -41.5,18.5 + parent: 2 + - uid: 20200 + components: + - type: Transform + pos: -40.5,18.5 + parent: 2 + - uid: 20201 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,-36.5 + parent: 2 + - uid: 20202 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,-36.5 + parent: 2 + - uid: 20203 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,-36.5 + parent: 2 + - uid: 20204 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,-36.5 + parent: 2 + - uid: 20205 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,-36.5 + parent: 2 + - uid: 20206 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,-35.5 + parent: 2 + - uid: 20207 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,-33.5 + parent: 2 + - uid: 20208 + components: + - type: Transform + pos: -35.5,-44.5 + parent: 2 + - uid: 20209 + components: + - type: Transform + pos: -26.5,-37.5 + parent: 2 + - uid: 20210 + components: + - type: Transform + pos: -26.5,-38.5 + parent: 2 + - uid: 20211 + components: + - type: Transform + pos: -26.5,-39.5 + parent: 2 + - uid: 20212 + components: + - type: Transform + pos: -26.5,-40.5 + parent: 2 + - uid: 20213 + components: + - type: Transform + pos: -26.5,-41.5 + parent: 2 + - uid: 20214 + components: + - type: Transform + pos: -28.5,-42.5 + parent: 2 + - uid: 20215 + components: + - type: Transform + pos: -29.5,-42.5 + parent: 2 + - uid: 20216 + components: + - type: Transform + pos: -30.5,-42.5 + parent: 2 + - uid: 20217 + components: + - type: Transform + pos: -31.5,-42.5 + parent: 2 + - uid: 20218 + components: + - type: Transform + pos: -31.5,-41.5 + parent: 2 + - uid: 20219 + components: + - type: Transform + pos: -31.5,-44.5 + parent: 2 + - uid: 20220 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,-32.5 + parent: 2 + - uid: 20221 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,-32.5 + parent: 2 + - uid: 20222 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,-32.5 + parent: 2 + - uid: 20223 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,-33.5 + parent: 2 + - uid: 20224 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,-34.5 + parent: 2 + - uid: 20225 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,-34.5 + parent: 2 + - uid: 20226 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,-35.5 + parent: 2 + - uid: 20227 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,-36.5 + parent: 2 + - uid: 20228 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,-37.5 + parent: 2 + - uid: 20229 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,-38.5 + parent: 2 + - uid: 20230 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,-39.5 + parent: 2 + - uid: 20231 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,-19.5 + parent: 2 + - uid: 20232 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,-40.5 + parent: 2 + - uid: 20233 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,-40.5 + parent: 2 + - uid: 20234 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -25.5,-40.5 + parent: 2 + - uid: 20235 + components: + - type: Transform + pos: -18.5,-25.5 + parent: 2 + - uid: 20236 + components: + - type: Transform + pos: -18.5,-24.5 + parent: 2 + - uid: 20237 + components: + - type: Transform + pos: -18.5,-23.5 + parent: 2 + - uid: 20238 + components: + - type: Transform + pos: -18.5,-22.5 + parent: 2 + - uid: 20239 + components: + - type: Transform + pos: -18.5,-21.5 + parent: 2 + - uid: 20240 + components: + - type: Transform + pos: -18.5,-20.5 + parent: 2 + - uid: 20241 + components: + - type: Transform + pos: -18.5,-19.5 + parent: 2 + - uid: 20242 + components: + - type: Transform + pos: -18.5,-18.5 + parent: 2 + - uid: 20243 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,-21.5 + parent: 2 + - uid: 20244 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,-22.5 + parent: 2 + - uid: 20245 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,-23.5 + parent: 2 + - uid: 20246 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,-24.5 + parent: 2 + - uid: 20247 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,-25.5 + parent: 2 + - uid: 20248 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,-25.5 + parent: 2 + - uid: 20249 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -51.5,-51.5 + parent: 2 + - uid: 20250 + components: + - type: Transform + pos: -19.5,-29.5 + parent: 2 + - uid: 20251 + components: + - type: Transform + pos: -14.5,-29.5 + parent: 2 + - uid: 20252 + components: + - type: Transform + pos: -13.5,-29.5 + parent: 2 + - uid: 20253 + components: + - type: Transform + pos: -12.5,-29.5 + parent: 2 + - uid: 20254 + components: + - type: Transform + pos: -11.5,-29.5 + parent: 2 + - uid: 20255 + components: + - type: Transform + pos: -10.5,-29.5 + parent: 2 + - uid: 20256 + components: + - type: Transform + pos: -9.5,-29.5 + parent: 2 + - uid: 20257 + components: + - type: Transform + pos: -15.5,-29.5 + parent: 2 + - uid: 20258 + components: + - type: Transform + pos: -20.5,-34.5 + parent: 2 + - uid: 20259 + components: + - type: Transform + pos: -19.5,-34.5 + parent: 2 + - uid: 20260 + components: + - type: Transform + pos: -19.5,-33.5 + parent: 2 + - uid: 20261 + components: + - type: Transform + pos: -15.5,-30.5 + parent: 2 + - uid: 20262 + components: + - type: Transform + pos: -15.5,-33.5 + parent: 2 + - uid: 20263 + components: + - type: Transform + pos: -18.5,-34.5 + parent: 2 + - uid: 20264 + components: + - type: Transform + pos: -17.5,-34.5 + parent: 2 + - uid: 20265 + components: + - type: Transform + pos: -16.5,-34.5 + parent: 2 + - uid: 20266 + components: + - type: Transform + pos: -15.5,-34.5 + parent: 2 + - uid: 20267 + components: + - type: Transform + pos: -13.5,-33.5 + parent: 2 + - uid: 20268 + components: + - type: Transform + pos: -13.5,-32.5 + parent: 2 + - uid: 20269 + components: + - type: Transform + pos: -13.5,-31.5 + parent: 2 + - uid: 20270 + components: + - type: Transform + pos: -13.5,-30.5 + parent: 2 + - uid: 20271 + components: + - type: Transform + pos: -13.5,-34.5 + parent: 2 + - uid: 20272 + components: + - type: Transform + pos: -14.5,-34.5 + parent: 2 + - uid: 20273 + components: + - type: Transform + pos: -1.5,-29.5 + parent: 2 + - uid: 20274 + components: + - type: Transform + pos: -2.5,-29.5 + parent: 2 + - uid: 20275 + components: + - type: Transform + pos: -3.5,-29.5 + parent: 2 + - uid: 20276 + components: + - type: Transform + pos: -4.5,-29.5 + parent: 2 + - uid: 20277 + components: + - type: Transform + pos: -5.5,-29.5 + parent: 2 + - uid: 20278 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-30.5 + parent: 2 + - uid: 20279 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,-34.5 + parent: 2 + - uid: 20280 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-34.5 + parent: 2 + - uid: 20281 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-34.5 + parent: 2 + - uid: 20282 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-34.5 + parent: 2 + - uid: 20283 + components: + - type: Transform + pos: -18.5,-35.5 + parent: 2 + - uid: 20284 + components: + - type: Transform + pos: -18.5,-36.5 + parent: 2 + - uid: 20285 + components: + - type: Transform + pos: -18.5,-37.5 + parent: 2 + - uid: 20286 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,-35.5 + parent: 2 + - uid: 20287 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,-36.5 + parent: 2 + - uid: 20288 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,-37.5 + parent: 2 + - uid: 20289 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,-38.5 + parent: 2 + - uid: 20290 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,-38.5 + parent: 2 + - uid: 20291 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,-38.5 + parent: 2 + - uid: 20292 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,-38.5 + parent: 2 + - uid: 20293 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,-38.5 + parent: 2 + - uid: 20294 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,-38.5 + parent: 2 + - uid: 20295 + components: + - type: Transform + pos: -18.5,-39.5 + parent: 2 + - uid: 20296 + components: + - type: Transform + pos: -18.5,-40.5 + parent: 2 + - uid: 20297 + components: + - type: Transform + pos: -18.5,-41.5 + parent: 2 + - uid: 20298 + components: + - type: Transform + pos: -18.5,-42.5 + parent: 2 + - uid: 20299 + components: + - type: Transform + pos: -18.5,-43.5 + parent: 2 + - uid: 20300 + components: + - type: Transform + pos: -18.5,-44.5 + parent: 2 + - uid: 20301 + components: + - type: Transform + pos: -18.5,-45.5 + parent: 2 + - uid: 20302 + components: + - type: Transform + pos: -18.5,-46.5 + parent: 2 + - uid: 20303 + components: + - type: Transform + pos: -18.5,-47.5 + parent: 2 + - uid: 20304 + components: + - type: Transform + pos: -18.5,-48.5 + parent: 2 + - uid: 20305 + components: + - type: Transform + pos: -18.5,-49.5 + parent: 2 + - uid: 20306 + components: + - type: Transform + pos: -17.5,-50.5 + parent: 2 + - uid: 20307 + components: + - type: Transform + pos: -16.5,-50.5 + parent: 2 + - uid: 20308 + components: + - type: Transform + pos: -15.5,-50.5 + parent: 2 + - uid: 20309 + components: + - type: Transform + pos: -14.5,-50.5 + parent: 2 + - uid: 20310 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,-50.5 + parent: 2 + - uid: 20311 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,-50.5 + parent: 2 + - uid: 20312 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,-50.5 + parent: 2 + - uid: 20313 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,-46.5 + parent: 2 + - uid: 20314 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,-50.5 + parent: 2 + - uid: 20315 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-50.5 + parent: 2 + - uid: 20316 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,-48.5 + parent: 2 + - uid: 20317 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,-47.5 + parent: 2 + - uid: 20318 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,-46.5 + parent: 2 + - uid: 20319 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,-46.5 + parent: 2 + - uid: 20320 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-46.5 + parent: 2 + - uid: 20321 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,-46.5 + parent: 2 + - uid: 20322 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,-46.5 + parent: 2 + - uid: 20323 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,-45.5 + parent: 2 + - uid: 20324 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,-44.5 + parent: 2 + - uid: 20325 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,-43.5 + parent: 2 + - uid: 20326 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,-42.5 + parent: 2 + - uid: 20327 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,-41.5 + parent: 2 + - uid: 20328 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,-40.5 + parent: 2 + - uid: 20329 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,-39.5 + parent: 2 + - uid: 20330 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,-45.5 + parent: 2 + - uid: 20331 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,-44.5 + parent: 2 + - uid: 20332 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,-39.5 + parent: 2 + - uid: 20333 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,-40.5 + parent: 2 + - uid: 20334 + components: + - type: Transform + pos: -36.5,-44.5 + parent: 2 + - uid: 20335 + components: + - type: Transform + pos: -37.5,-44.5 + parent: 2 + - uid: 20336 + components: + - type: Transform + pos: -38.5,-44.5 + parent: 2 + - uid: 20337 + components: + - type: Transform + pos: -39.5,-44.5 + parent: 2 + - uid: 20338 + components: + - type: Transform + pos: -40.5,-44.5 + parent: 2 + - uid: 20339 + components: + - type: Transform + pos: -41.5,-44.5 + parent: 2 + - uid: 20340 + components: + - type: Transform + pos: -42.5,-44.5 + parent: 2 + - uid: 20341 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.5,-44.5 + parent: 2 + - uid: 20342 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.5,-45.5 + parent: 2 + - uid: 20343 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,-45.5 + parent: 2 + - uid: 20344 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,-49.5 + parent: 2 + - uid: 20345 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.5,-49.5 + parent: 2 + - uid: 20346 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,-19.5 + parent: 2 + - uid: 20347 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.5,-52.5 + parent: 2 + - uid: 20348 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,-53.5 + parent: 2 + - uid: 20349 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -33.5,-53.5 + parent: 2 + - uid: 20350 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,-53.5 + parent: 2 + - uid: 20351 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,-53.5 + parent: 2 + - uid: 20352 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,-53.5 + parent: 2 + - uid: 20353 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -37.5,-53.5 + parent: 2 + - uid: 20354 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -38.5,-53.5 + parent: 2 + - uid: 20355 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -39.5,-53.5 + parent: 2 + - uid: 20356 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -40.5,-53.5 + parent: 2 + - uid: 20357 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -40.5,-52.5 + parent: 2 + - uid: 20358 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -40.5,-51.5 + parent: 2 + - uid: 20359 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -40.5,-49.5 + parent: 2 + - uid: 20360 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -40.5,-48.5 + parent: 2 + - uid: 20361 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -38.5,-48.5 + parent: 2 + - uid: 20362 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -38.5,-47.5 + parent: 2 + - uid: 20363 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -38.5,-45.5 + parent: 2 + - uid: 20364 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -41.5,-48.5 + parent: 2 + - uid: 20365 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -42.5,-48.5 + parent: 2 + - uid: 20366 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -43.5,-48.5 + parent: 2 + - uid: 20367 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -44.5,-48.5 + parent: 2 + - uid: 20368 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -40.5,-47.5 + parent: 2 + - uid: 20369 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -40.5,-45.5 + parent: 2 + - uid: 20370 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -41.5,-53.5 + parent: 2 + - uid: 20371 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -42.5,-53.5 + parent: 2 + - uid: 20372 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -43.5,-53.5 + parent: 2 + - uid: 20373 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -44.5,-53.5 + parent: 2 + - uid: 20374 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,-19.5 + parent: 2 + - uid: 20375 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,-25.5 + parent: 2 + - uid: 20376 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -40.5,-28.5 + parent: 2 + - uid: 20377 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,-49.5 + parent: 2 + - uid: 20378 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,-48.5 + parent: 2 + - uid: 20379 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,-45.5 + parent: 2 + - uid: 20380 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,-45.5 + parent: 2 + - uid: 20381 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,-45.5 + parent: 2 + - uid: 20382 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,-45.5 + parent: 2 + - uid: 20383 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,-45.5 + parent: 2 + - uid: 20384 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -52.5,-51.5 + parent: 2 + - uid: 20385 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -51.5,-53.5 + parent: 2 + - uid: 20386 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -52.5,-53.5 + parent: 2 + - uid: 20387 + components: + - type: Transform + pos: -75.5,-53.5 + parent: 2 + - uid: 20388 + components: + - type: Transform + pos: -76.5,-53.5 + parent: 2 + - uid: 20389 + components: + - type: Transform + pos: -77.5,-53.5 + parent: 2 + - uid: 20390 + components: + - type: Transform + pos: -75.5,-51.5 + parent: 2 + - uid: 20391 + components: + - type: Transform + pos: -76.5,-51.5 + parent: 2 + - uid: 20392 + components: + - type: Transform + pos: -77.5,-51.5 + parent: 2 + - uid: 20393 + components: + - type: Transform + pos: -83.5,-53.5 + parent: 2 + - uid: 20394 + components: + - type: Transform + pos: -83.5,-51.5 + parent: 2 + - uid: 20395 + components: + - type: Transform + pos: -83.5,-54.5 + parent: 2 + - uid: 20396 + components: + - type: Transform + pos: -82.5,-54.5 + parent: 2 + - uid: 20397 + components: + - type: Transform + pos: -77.5,-54.5 + parent: 2 + - uid: 20398 + components: + - type: Transform + pos: -78.5,-54.5 + parent: 2 + - uid: 20399 + components: + - type: Transform + pos: -77.5,-50.5 + parent: 2 + - uid: 20400 + components: + - type: Transform + pos: -78.5,-50.5 + parent: 2 + - uid: 20401 + components: + - type: Transform + pos: -83.5,-50.5 + parent: 2 + - uid: 20402 + components: + - type: Transform + pos: -82.5,-50.5 + parent: 2 + - uid: 20403 + components: + - type: Transform + pos: -82.5,-49.5 + parent: 2 + - uid: 20404 + components: + - type: Transform + pos: -81.5,-49.5 + parent: 2 + - uid: 20405 + components: + - type: Transform + pos: -80.5,-49.5 + parent: 2 + - uid: 20406 + components: + - type: Transform + pos: -79.5,-49.5 + parent: 2 + - uid: 20407 + components: + - type: Transform + pos: -78.5,-49.5 + parent: 2 + - uid: 20408 + components: + - type: Transform + pos: -78.5,-55.5 + parent: 2 + - uid: 20409 + components: + - type: Transform + pos: -79.5,-55.5 + parent: 2 + - uid: 20410 + components: + - type: Transform + pos: -80.5,-55.5 + parent: 2 + - uid: 20411 + components: + - type: Transform + pos: -81.5,-55.5 + parent: 2 + - uid: 20412 + components: + - type: Transform + pos: -82.5,-55.5 + parent: 2 + - uid: 20413 + components: + - type: Transform + pos: -83.5,-58.5 + parent: 2 + - uid: 20414 + components: + - type: Transform + pos: -84.5,-57.5 + parent: 2 + - uid: 20415 + components: + - type: Transform + pos: -85.5,-56.5 + parent: 2 + - uid: 20416 + components: + - type: Transform + pos: -86.5,-55.5 + parent: 2 + - uid: 20417 + components: + - type: Transform + pos: -77.5,-58.5 + parent: 2 + - uid: 20418 + components: + - type: Transform + pos: -76.5,-57.5 + parent: 2 + - uid: 20419 + components: + - type: Transform + pos: -75.5,-56.5 + parent: 2 + - uid: 20420 + components: + - type: Transform + pos: -74.5,-55.5 + parent: 2 + - uid: 20421 + components: + - type: Transform + pos: -74.5,-49.5 + parent: 2 + - uid: 20422 + components: + - type: Transform + pos: -75.5,-48.5 + parent: 2 + - uid: 20423 + components: + - type: Transform + pos: -76.5,-47.5 + parent: 2 + - uid: 20424 + components: + - type: Transform + pos: -77.5,-46.5 + parent: 2 + - uid: 20425 + components: + - type: Transform + pos: -83.5,-46.5 + parent: 2 + - uid: 20426 + components: + - type: Transform + pos: -84.5,-47.5 + parent: 2 + - uid: 20427 + components: + - type: Transform + pos: -85.5,-48.5 + parent: 2 + - uid: 20428 + components: + - type: Transform + pos: -86.5,-49.5 + parent: 2 + - uid: 20429 + components: + - type: Transform + pos: -21.5,-54.5 + parent: 2 + - uid: 20430 + components: + - type: Transform + pos: -20.5,-54.5 + parent: 2 + - uid: 20431 + components: + - type: Transform + pos: -19.5,-54.5 + parent: 2 + - uid: 20432 + components: + - type: Transform + pos: -18.5,-54.5 + parent: 2 + - uid: 20433 + components: + - type: Transform + pos: -21.5,-55.5 + parent: 2 + - uid: 20434 + components: + - type: Transform + pos: -21.5,-56.5 + parent: 2 + - uid: 20435 + components: + - type: Transform + pos: -21.5,-57.5 + parent: 2 + - uid: 20436 + components: + - type: Transform + pos: -55.5,-67.5 + parent: 2 + - uid: 20437 + components: + - type: Transform + pos: -54.5,-67.5 + parent: 2 + - uid: 20438 + components: + - type: Transform + pos: -53.5,-67.5 + parent: 2 + - uid: 20439 + components: + - type: Transform + pos: -52.5,-67.5 + parent: 2 + - uid: 20440 + components: + - type: Transform + pos: -50.5,-68.5 + parent: 2 + - uid: 20441 + components: + - type: Transform + pos: -49.5,-68.5 + parent: 2 + - uid: 20442 + components: + - type: Transform + pos: -48.5,-68.5 + parent: 2 + - uid: 20443 + components: + - type: Transform + pos: -47.5,-68.5 + parent: 2 + - uid: 20444 + components: + - type: Transform + pos: -47.5,-70.5 + parent: 2 + - uid: 20445 + components: + - type: Transform + pos: -48.5,-70.5 + parent: 2 + - uid: 20446 + components: + - type: Transform + pos: -45.5,-70.5 + parent: 2 + - uid: 20447 + components: + - type: Transform + pos: -44.5,-70.5 + parent: 2 + - uid: 20448 + components: + - type: Transform + pos: -43.5,-70.5 + parent: 2 + - uid: 20449 + components: + - type: Transform + pos: -42.5,-70.5 + parent: 2 + - uid: 20450 + components: + - type: Transform + pos: -41.5,-70.5 + parent: 2 + - uid: 20451 + components: + - type: Transform + pos: -40.5,-70.5 + parent: 2 + - uid: 20452 + components: + - type: Transform + pos: -39.5,-70.5 + parent: 2 + - uid: 20453 + components: + - type: Transform + pos: -38.5,-68.5 + parent: 2 + - uid: 20454 + components: + - type: Transform + pos: -37.5,-68.5 + parent: 2 + - uid: 20455 + components: + - type: Transform + pos: -36.5,-68.5 + parent: 2 + - uid: 20456 + components: + - type: Transform + pos: -35.5,-68.5 + parent: 2 + - uid: 20457 + components: + - type: Transform + pos: -34.5,-68.5 + parent: 2 + - uid: 20458 + components: + - type: Transform + pos: -33.5,-68.5 + parent: 2 + - uid: 20459 + components: + - type: Transform + pos: -34.5,-70.5 + parent: 2 + - uid: 20460 + components: + - type: Transform + pos: -35.5,-70.5 + parent: 2 + - uid: 20461 + components: + - type: Transform + pos: -36.5,-70.5 + parent: 2 + - uid: 20462 + components: + - type: Transform + pos: -32.5,-70.5 + parent: 2 + - uid: 20463 + components: + - type: Transform + pos: -31.5,-71.5 + parent: 2 + - uid: 20464 + components: + - type: Transform + pos: -30.5,-69.5 + parent: 2 + - uid: 20465 + components: + - type: Transform + pos: -30.5,-68.5 + parent: 2 + - uid: 20466 + components: + - type: Transform + pos: -29.5,-72.5 + parent: 2 + - uid: 20467 + components: + - type: Transform + pos: -28.5,-72.5 + parent: 2 + - uid: 20468 + components: + - type: Transform + pos: -27.5,-72.5 + parent: 2 + - uid: 20469 + components: + - type: Transform + pos: -26.5,-72.5 + parent: 2 + - uid: 20470 + components: + - type: Transform + pos: -26.5,-70.5 + parent: 2 + - uid: 20471 + components: + - type: Transform + pos: -24.5,-71.5 + parent: 2 + - uid: 20472 + components: + - type: Transform + pos: -23.5,-71.5 + parent: 2 + - uid: 20473 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,-60.5 + parent: 2 + - uid: 20474 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,-59.5 + parent: 2 + - uid: 20475 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,-58.5 + parent: 2 + - uid: 20476 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,-63.5 + parent: 2 + - uid: 20477 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,-54.5 + parent: 2 + - uid: 20478 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,-54.5 + parent: 2 + - uid: 20479 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,-54.5 + parent: 2 + - uid: 20480 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,-54.5 + parent: 2 + - uid: 20481 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,-54.5 + parent: 2 + - uid: 20482 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,-54.5 + parent: 2 + - uid: 20483 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,-54.5 + parent: 2 + - uid: 20484 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,-54.5 + parent: 2 + - uid: 20485 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-54.5 + parent: 2 + - uid: 20486 + components: + - type: Transform + pos: -7.5,-54.5 + parent: 2 + - uid: 20487 + components: + - type: Transform + pos: -6.5,-54.5 + parent: 2 + - uid: 20488 + components: + - type: Transform + pos: -4.5,-54.5 + parent: 2 + - uid: 20489 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,-47.5 + parent: 2 + - uid: 20490 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,-49.5 + parent: 2 + - uid: 20491 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,-48.5 + parent: 2 + - uid: 20492 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,-47.5 + parent: 2 + - uid: 20493 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,-41.5 + parent: 2 + - uid: 20494 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,-41.5 + parent: 2 + - uid: 20495 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,-41.5 + parent: 2 + - uid: 20496 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-41.5 + parent: 2 + - uid: 20497 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-40.5 + parent: 2 + - uid: 20498 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-39.5 + parent: 2 + - uid: 20499 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-38.5 + parent: 2 + - uid: 20500 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,-38.5 + parent: 2 + - uid: 20501 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,-38.5 + parent: 2 + - uid: 20502 + components: + - type: Transform + pos: 21.5,-16.5 + parent: 2 + - uid: 20503 + components: + - type: Transform + pos: 22.5,-16.5 + parent: 2 + - uid: 20504 + components: + - type: Transform + pos: 24.5,-16.5 + parent: 2 + - uid: 20505 + components: + - type: Transform + pos: 25.5,-16.5 + parent: 2 + - uid: 20506 + components: + - type: Transform + pos: 26.5,-16.5 + parent: 2 + - uid: 20507 + components: + - type: Transform + pos: 27.5,-16.5 + parent: 2 + - uid: 20508 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 52.5,11.5 + parent: 2 + - uid: 20509 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 50.5,9.5 + parent: 2 + - uid: 20510 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 49.5,9.5 + parent: 2 + - uid: 20511 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 48.5,9.5 + parent: 2 + - uid: 20512 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 49.5,11.5 + parent: 2 + - uid: 20513 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 48.5,11.5 + parent: 2 + - uid: 20514 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 47.5,11.5 + parent: 2 + - uid: 20515 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,11.5 + parent: 2 + - uid: 20516 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 53.5,11.5 + parent: 2 + - uid: 20517 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 54.5,11.5 + parent: 2 + - uid: 20518 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 48.5,13.5 + parent: 2 + - uid: 20519 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 49.5,13.5 + parent: 2 + - uid: 20520 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 50.5,13.5 + parent: 2 + - uid: 20521 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 51.5,13.5 + parent: 2 + - uid: 20522 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 54.5,13.5 + parent: 2 + - uid: 20523 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 55.5,13.5 + parent: 2 + - uid: 20524 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 56.5,13.5 + parent: 2 + - uid: 20525 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 54.5,15.5 + parent: 2 + - uid: 20526 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 53.5,15.5 + parent: 2 + - uid: 20527 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 55.5,15.5 + parent: 2 + - uid: 20528 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 56.5,15.5 + parent: 2 + - uid: 20529 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 57.5,15.5 + parent: 2 + - uid: 20530 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 58.5,15.5 + parent: 2 + - uid: 20531 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 58.5,12.5 + parent: 2 + - uid: 20532 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 59.5,12.5 + parent: 2 + - uid: 20533 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 60.5,12.5 + parent: 2 + - uid: 20534 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 61.5,14.5 + parent: 2 + - uid: 20535 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 62.5,14.5 + parent: 2 + - uid: 20536 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 63.5,14.5 + parent: 2 + - uid: 20537 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 64.5,14.5 + parent: 2 + - uid: 20538 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 74.5,17.5 + parent: 2 + - uid: 20539 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 73.5,17.5 + parent: 2 + - uid: 20540 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 72.5,17.5 + parent: 2 + - uid: 20541 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 71.5,17.5 + parent: 2 + - uid: 20542 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 69.5,16.5 + parent: 2 + - uid: 20543 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 68.5,16.5 + parent: 2 + - uid: 20544 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 67.5,16.5 + parent: 2 + - uid: 20545 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 66.5,16.5 + parent: 2 + - uid: 20546 + components: + - type: Transform + pos: 64.5,31.5 + parent: 2 + - uid: 20547 + components: + - type: Transform + pos: 74.5,29.5 + parent: 2 + - uid: 20548 + components: + - type: Transform + pos: 73.5,29.5 + parent: 2 + - uid: 20549 + components: + - type: Transform + pos: 72.5,29.5 + parent: 2 + - uid: 20550 + components: + - type: Transform + pos: 71.5,29.5 + parent: 2 + - uid: 20551 + components: + - type: Transform + pos: 66.5,30.5 + parent: 2 + - uid: 20552 + components: + - type: Transform + pos: 67.5,30.5 + parent: 2 + - uid: 20553 + components: + - type: Transform + pos: 68.5,30.5 + parent: 2 + - uid: 20554 + components: + - type: Transform + pos: 69.5,30.5 + parent: 2 + - uid: 20555 + components: + - type: Transform + pos: 63.5,31.5 + parent: 2 + - uid: 20556 + components: + - type: Transform + pos: 62.5,31.5 + parent: 2 + - uid: 20557 + components: + - type: Transform + pos: 61.5,31.5 + parent: 2 + - uid: 20558 + components: + - type: Transform + pos: 3.5,22.5 + parent: 2 + - uid: 20559 + components: + - type: Transform + pos: 3.5,23.5 + parent: 2 + - uid: 20560 + components: + - type: Transform + pos: 4.5,23.5 + parent: 2 + - uid: 20561 + components: + - type: Transform + pos: 6.5,23.5 + parent: 2 + - uid: 20562 + components: + - type: Transform + pos: 11.5,22.5 + parent: 2 + - uid: 20563 + components: + - type: Transform + pos: 9.5,24.5 + parent: 2 + - uid: 20565 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 14.5,45.5 + parent: 2 + - uid: 20566 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,45.5 + parent: 2 + - uid: 20568 + components: + - type: Transform + pos: 47.5,46.5 + parent: 2 + - uid: 20569 + components: + - type: Transform + pos: 49.5,46.5 + parent: 2 + - uid: 20570 + components: + - type: Transform + pos: 50.5,46.5 + parent: 2 + - uid: 20571 + components: + - type: Transform + pos: 52.5,46.5 + parent: 2 + - uid: 20572 + components: + - type: Transform + pos: 53.5,46.5 + parent: 2 + - uid: 20573 + components: + - type: Transform + pos: 48.5,44.5 + parent: 2 + - uid: 20574 + components: + - type: Transform + pos: 49.5,44.5 + parent: 2 + - uid: 20575 + components: + - type: Transform + pos: 55.5,46.5 + parent: 2 + - uid: 20576 + components: + - type: Transform + pos: 56.5,46.5 + parent: 2 + - uid: 20577 + components: + - type: Transform + pos: 58.5,43.5 + parent: 2 + - uid: 20578 + components: + - type: Transform + pos: 58.5,42.5 + parent: 2 + - uid: 20579 + components: + - type: Transform + pos: 58.5,41.5 + parent: 2 + - uid: 20580 + components: + - type: Transform + pos: 58.5,40.5 + parent: 2 + - uid: 20581 + components: + - type: Transform + pos: 60.5,40.5 + parent: 2 + - uid: 20582 + components: + - type: Transform + pos: 60.5,39.5 + parent: 2 + - uid: 20583 + components: + - type: Transform + pos: 60.5,38.5 + parent: 2 + - uid: 20584 + components: + - type: Transform + pos: 60.5,37.5 + parent: 2 + - uid: 20585 + components: + - type: Transform + pos: 58.5,37.5 + parent: 2 + - uid: 20586 + components: + - type: Transform + pos: 58.5,36.5 + parent: 2 + - uid: 20587 + components: + - type: Transform + pos: 58.5,35.5 + parent: 2 + - uid: 20588 + components: + - type: Transform + pos: 58.5,34.5 + parent: 2 + - uid: 20589 + components: + - type: Transform + pos: 61.5,35.5 + parent: 2 + - uid: 20590 + components: + - type: Transform + pos: 61.5,34.5 + parent: 2 + - uid: 20591 + components: + - type: Transform + pos: 61.5,33.5 + parent: 2 + - uid: 20592 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 16.5,51.5 + parent: 2 + - uid: 20593 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 32.5,45.5 + parent: 2 + - uid: 20594 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 33.5,45.5 + parent: 2 + - uid: 20595 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,45.5 + parent: 2 + - uid: 20596 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 36.5,45.5 + parent: 2 + - uid: 20597 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 37.5,45.5 + parent: 2 + - uid: 20598 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 38.5,45.5 + parent: 2 + - uid: 20599 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 39.5,45.5 + parent: 2 + - uid: 20600 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 38.5,47.5 + parent: 2 + - uid: 20601 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 39.5,47.5 + parent: 2 + - uid: 20602 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 36.5,47.5 + parent: 2 + - uid: 20603 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,47.5 + parent: 2 + - uid: 20604 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,47.5 + parent: 2 + - uid: 20605 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 33.5,47.5 + parent: 2 + - uid: 20606 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 33.5,49.5 + parent: 2 + - uid: 20607 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 32.5,49.5 + parent: 2 + - uid: 20608 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,49.5 + parent: 2 + - uid: 20609 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,47.5 + parent: 2 + - uid: 20610 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 28.5,47.5 + parent: 2 + - uid: 20611 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,47.5 + parent: 2 + - uid: 20612 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 28.5,50.5 + parent: 2 + - uid: 20613 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,50.5 + parent: 2 + - uid: 20614 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 26.5,46.5 + parent: 2 + - uid: 20615 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 26.5,45.5 + parent: 2 + - uid: 20616 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,49.5 + parent: 2 + - uid: 20617 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,49.5 + parent: 2 + - uid: 20618 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,49.5 + parent: 2 + - uid: 20619 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,51.5 + parent: 2 + - uid: 20620 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,51.5 + parent: 2 + - uid: 20621 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,51.5 + parent: 2 + - uid: 20622 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,51.5 + parent: 2 + - uid: 20623 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 18.5,51.5 + parent: 2 + - uid: 20624 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 18.5,49.5 + parent: 2 + - uid: 20625 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,49.5 + parent: 2 + - uid: 20626 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 16.5,49.5 + parent: 2 + - uid: 20627 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 16.5,52.5 + parent: 2 + - uid: 20628 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,54.5 + parent: 2 + - uid: 20629 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,55.5 + parent: 2 + - uid: 20630 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,54.5 + parent: 2 + - uid: 20631 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,55.5 + parent: 2 + - uid: 20632 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,56.5 + parent: 2 + - uid: 20633 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,59.5 + parent: 2 + - uid: 20634 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,58.5 + parent: 2 + - uid: 20635 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,-13.5 + parent: 2 + - uid: 20636 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,-13.5 + parent: 2 + - uid: 20637 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 45.5,-13.5 + parent: 2 + - uid: 20638 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 42.5,-14.5 + parent: 2 + - uid: 20639 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 42.5,-15.5 + parent: 2 + - uid: 20640 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 42.5,-16.5 + parent: 2 + - uid: 20641 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 42.5,-17.5 + parent: 2 + - uid: 20642 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 42.5,-18.5 + parent: 2 + - uid: 20643 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 42.5,-19.5 + parent: 2 + - uid: 20644 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,-19.5 + parent: 2 + - uid: 20645 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 44.5,-19.5 + parent: 2 + - uid: 20646 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 45.5,-19.5 + parent: 2 + - uid: 20647 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 46.5,-19.5 + parent: 2 + - uid: 20648 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 47.5,-19.5 + parent: 2 + - uid: 20649 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 47.5,-18.5 + parent: 2 + - uid: 20650 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 47.5,-17.5 + parent: 2 + - uid: 20651 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 47.5,-16.5 + parent: 2 + - uid: 20652 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 45.5,-15.5 + parent: 2 + - uid: 20653 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,17.5 + parent: 2 + - uid: 20654 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,17.5 + parent: 2 + - uid: 20655 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.5,17.5 + parent: 2 + - uid: 20656 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -18.5,17.5 + parent: 2 + - uid: 20657 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -17.5,17.5 + parent: 2 + - uid: 20658 + components: + - type: Transform + pos: -22.5,18.5 + parent: 2 + - uid: 20659 + components: + - type: Transform + pos: -22.5,19.5 + parent: 2 + - uid: 20660 + components: + - type: Transform + pos: -22.5,20.5 + parent: 2 + - uid: 20661 + components: + - type: Transform + pos: -22.5,21.5 + parent: 2 + - uid: 20662 + components: + - type: Transform + pos: -22.5,22.5 + parent: 2 + - uid: 20663 + components: + - type: Transform + pos: -23.5,22.5 + parent: 2 + - uid: 20664 + components: + - type: Transform + pos: -24.5,22.5 + parent: 2 + - uid: 20665 + components: + - type: Transform + pos: -25.5,22.5 + parent: 2 + - uid: 20666 + components: + - type: Transform + pos: -26.5,22.5 + parent: 2 + - uid: 20667 + components: + - type: Transform + pos: -30.5,22.5 + parent: 2 + - uid: 20668 + components: + - type: Transform + pos: -29.5,22.5 + parent: 2 + - uid: 20669 + components: + - type: Transform + pos: -28.5,22.5 + parent: 2 + - uid: 20670 + components: + - type: Transform + pos: -28.5,23.5 + parent: 2 + - uid: 20671 + components: + - type: Transform + pos: -28.5,24.5 + parent: 2 + - uid: 20672 + components: + - type: Transform + pos: -28.5,25.5 + parent: 2 + - uid: 20673 + components: + - type: Transform + pos: -28.5,26.5 + parent: 2 + - uid: 20674 + components: + - type: Transform + pos: -28.5,27.5 + parent: 2 + - uid: 20675 + components: + - type: Transform + pos: -26.5,27.5 + parent: 2 + - uid: 20676 + components: + - type: Transform + pos: -26.5,26.5 + parent: 2 + - uid: 20677 + components: + - type: Transform + pos: -26.5,25.5 + parent: 2 + - uid: 20678 + components: + - type: Transform + pos: -26.5,24.5 + parent: 2 + - uid: 20679 + components: + - type: Transform + pos: -26.5,23.5 + parent: 2 + - uid: 20680 + components: + - type: Transform + pos: -31.5,22.5 + parent: 2 + - uid: 20681 + components: + - type: Transform + pos: -32.5,22.5 + parent: 2 + - uid: 20682 + components: + - type: Transform + pos: -33.5,22.5 + parent: 2 + - uid: 20683 + components: + - type: Transform + pos: -34.5,22.5 + parent: 2 + - uid: 20684 + components: + - type: Transform + pos: -34.5,21.5 + parent: 2 + - uid: 20685 + components: + - type: Transform + pos: -34.5,20.5 + parent: 2 + - uid: 20686 + components: + - type: Transform + pos: -34.5,19.5 + parent: 2 + - uid: 20687 + components: + - type: Transform + pos: -13.5,21.5 + parent: 2 + - uid: 20688 + components: + - type: Transform + pos: -1.5,18.5 + parent: 2 + - uid: 20689 + components: + - type: Transform + pos: -1.5,20.5 + parent: 2 + - uid: 20690 + components: + - type: Transform + pos: -10.5,21.5 + parent: 2 + - uid: 20691 + components: + - type: Transform + pos: -7.5,21.5 + parent: 2 + - uid: 20692 + components: + - type: Transform + pos: -4.5,21.5 + parent: 2 + - uid: 20693 + components: + - type: Transform + pos: -1.5,21.5 + parent: 2 + - uid: 20694 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,23.5 + parent: 2 + - uid: 20695 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,24.5 + parent: 2 + - uid: 20696 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,25.5 + parent: 2 + - uid: 20697 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,26.5 + parent: 2 + - uid: 20698 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,22.5 + parent: 2 + - uid: 20699 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,23.5 + parent: 2 + - uid: 20700 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,24.5 + parent: 2 + - uid: 20701 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,25.5 + parent: 2 + - uid: 20702 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,22.5 + parent: 2 + - uid: 20703 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,23.5 + parent: 2 + - uid: 20704 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,24.5 + parent: 2 + - uid: 20705 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,25.5 + parent: 2 + - uid: 20706 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,26.5 + parent: 2 + - uid: 20707 + components: + - type: Transform + pos: -13.5,30.5 + parent: 2 + - uid: 20708 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,27.5 + parent: 2 + - uid: 20709 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,28.5 + parent: 2 + - uid: 20710 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,29.5 + parent: 2 + - uid: 20712 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,35.5 + parent: 2 + - uid: 20713 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,36.5 + parent: 2 + - uid: 20714 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,36.5 + parent: 2 + - uid: 20715 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,33.5 + parent: 2 + - uid: 20716 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,34.5 + parent: 2 + - uid: 20717 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,37.5 + parent: 2 + - uid: 20718 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,37.5 + parent: 2 + - uid: 20719 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,36.5 + parent: 2 + - uid: 20720 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,37.5 + parent: 2 + - uid: 20721 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,36.5 + parent: 2 + - uid: 20722 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,34.5 + parent: 2 + - uid: 20723 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,31.5 + parent: 2 + - uid: 20724 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,32.5 + parent: 2 + - uid: 20725 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,35.5 + parent: 2 + - uid: 20726 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,33.5 + parent: 2 + - uid: 20727 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,35.5 + parent: 2 + - uid: 20728 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,35.5 + parent: 2 + - uid: 20729 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,35.5 + parent: 2 + - uid: 20730 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,37.5 + parent: 2 + - uid: 20731 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,37.5 + parent: 2 + - uid: 20732 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,30.5 + parent: 2 + - uid: 20733 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,31.5 + parent: 2 + - uid: 20734 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,33.5 + parent: 2 + - uid: 20735 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,34.5 + parent: 2 + - uid: 20736 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,35.5 + parent: 2 + - uid: 20737 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,36.5 + parent: 2 + - uid: 20738 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,37.5 + parent: 2 + - uid: 20739 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,37.5 + parent: 2 + - uid: 20740 + components: + - type: Transform + pos: -19.5,42.5 + parent: 2 + - uid: 20741 + components: + - type: Transform + pos: -19.5,40.5 + parent: 2 + - uid: 20742 + components: + - type: Transform + pos: -19.5,41.5 + parent: 2 + - uid: 20743 + components: + - type: Transform + pos: -19.5,38.5 + parent: 2 + - uid: 20744 + components: + - type: Transform + pos: -19.5,39.5 + parent: 2 + - uid: 20745 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,42.5 + parent: 2 + - uid: 20746 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,41.5 + parent: 2 + - uid: 20747 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,42.5 + parent: 2 + - uid: 20748 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,41.5 + parent: 2 + - uid: 20749 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -16.5,42.5 + parent: 2 + - uid: 20750 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -16.5,41.5 + parent: 2 + - uid: 20751 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,42.5 + parent: 2 + - uid: 20752 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,41.5 + parent: 2 + - uid: 20753 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,42.5 + parent: 2 + - uid: 20754 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,41.5 + parent: 2 + - uid: 20755 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,42.5 + parent: 2 + - uid: 20756 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,41.5 + parent: 2 + - uid: 20757 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,42.5 + parent: 2 + - uid: 20758 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,41.5 + parent: 2 + - uid: 20759 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,42.5 + parent: 2 + - uid: 20760 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,41.5 + parent: 2 + - uid: 20761 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,42.5 + parent: 2 + - uid: 20762 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,41.5 + parent: 2 + - uid: 20763 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,40.5 + parent: 2 + - uid: 20764 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,38.5 + parent: 2 + - uid: 20765 + components: + - type: Transform + pos: -20.5,37.5 + parent: 2 + - uid: 20766 + components: + - type: Transform + pos: -21.5,37.5 + parent: 2 + - uid: 20767 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,37.5 + parent: 2 + - uid: 20768 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,39.5 + parent: 2 + - uid: 20769 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,40.5 + parent: 2 + - uid: 20770 + components: + - type: Transform + pos: -7.5,41.5 + parent: 2 + - uid: 20771 + components: + - type: Transform + pos: -7.5,42.5 + parent: 2 + - uid: 20772 + components: + - type: Transform + pos: -7.5,43.5 + parent: 2 + - uid: 20773 + components: + - type: Transform + pos: -7.5,44.5 + parent: 2 + - uid: 20774 + components: + - type: Transform + pos: -8.5,44.5 + parent: 2 + - uid: 20775 + components: + - type: Transform + pos: -9.5,44.5 + parent: 2 + - uid: 20776 + components: + - type: Transform + pos: -10.5,44.5 + parent: 2 + - uid: 20777 + components: + - type: Transform + pos: -11.5,44.5 + parent: 2 + - uid: 20778 + components: + - type: Transform + pos: -12.5,44.5 + parent: 2 + - uid: 20779 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,41.5 + parent: 2 + - uid: 20780 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,42.5 + parent: 2 + - uid: 20781 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,37.5 + parent: 2 + - uid: 20782 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,37.5 + parent: 2 + - uid: 20783 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -25.5,37.5 + parent: 2 + - uid: 20784 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,38.5 + parent: 2 + - uid: 20785 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,39.5 + parent: 2 + - uid: 20786 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,40.5 + parent: 2 + - uid: 20787 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,41.5 + parent: 2 + - uid: 20788 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,41.5 + parent: 2 + - uid: 20789 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,42.5 + parent: 2 + - uid: 20790 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -25.5,42.5 + parent: 2 + - uid: 20791 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,42.5 + parent: 2 + - uid: 20792 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,42.5 + parent: 2 + - uid: 20793 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,42.5 + parent: 2 + - uid: 20794 + components: + - type: Transform + pos: -27.5,42.5 + parent: 2 + - uid: 20795 + components: + - type: Transform + pos: -27.5,43.5 + parent: 2 + - uid: 20796 + components: + - type: Transform + pos: -27.5,44.5 + parent: 2 + - uid: 20797 + components: + - type: Transform + pos: -27.5,45.5 + parent: 2 + - uid: 20798 + components: + - type: Transform + pos: -27.5,46.5 + parent: 2 + - uid: 20799 + components: + - type: Transform + pos: -26.5,46.5 + parent: 2 + - uid: 20800 + components: + - type: Transform + pos: -25.5,46.5 + parent: 2 + - uid: 20801 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,40.5 + parent: 2 + - uid: 20802 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,40.5 + parent: 2 + - uid: 20803 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,40.5 + parent: 2 + - uid: 20804 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,39.5 + parent: 2 + - uid: 20805 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,38.5 + parent: 2 + - uid: 20806 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,37.5 + parent: 2 + - uid: 20807 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,36.5 + parent: 2 + - uid: 20808 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,35.5 + parent: 2 + - uid: 20809 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,34.5 + parent: 2 + - uid: 20810 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,33.5 + parent: 2 + - uid: 20811 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,32.5 + parent: 2 + - uid: 20812 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,31.5 + parent: 2 + - uid: 20813 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,41.5 + parent: 2 + - uid: 20814 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,42.5 + parent: 2 + - uid: 20815 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,42.5 + parent: 2 + - uid: 20816 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,42.5 + parent: 2 + - uid: 20817 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,23.5 + parent: 2 + - uid: 20818 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,27.5 + parent: 2 + - uid: 20819 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.5,27.5 + parent: 2 + - uid: 20820 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,27.5 + parent: 2 + - uid: 20821 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,27.5 + parent: 2 + - uid: 20822 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -33.5,27.5 + parent: 2 + - uid: 20823 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,27.5 + parent: 2 + - uid: 20824 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,26.5 + parent: 2 + - uid: 20825 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,25.5 + parent: 2 + - uid: 20826 + components: + - type: Transform + pos: -32.5,40.5 + parent: 2 + - uid: 20827 + components: + - type: Transform + pos: -33.5,40.5 + parent: 2 + - uid: 20828 + components: + - type: Transform + pos: -34.5,40.5 + parent: 2 + - uid: 20829 + components: + - type: Transform + pos: -35.5,40.5 + parent: 2 + - uid: 20830 + components: + - type: Transform + pos: -32.5,31.5 + parent: 2 + - uid: 20831 + components: + - type: Transform + pos: -33.5,31.5 + parent: 2 + - uid: 20832 + components: + - type: Transform + pos: -34.5,31.5 + parent: 2 + - uid: 20833 + components: + - type: Transform + pos: -35.5,31.5 + parent: 2 + - uid: 20834 + components: + - type: Transform + pos: -36.5,31.5 + parent: 2 + - uid: 20835 + components: + - type: Transform + pos: -37.5,31.5 + parent: 2 + - uid: 20836 + components: + - type: Transform + pos: -38.5,31.5 + parent: 2 + - uid: 20837 + components: + - type: Transform + pos: -36.5,40.5 + parent: 2 + - uid: 20838 + components: + - type: Transform + pos: -37.5,40.5 + parent: 2 + - uid: 20839 + components: + - type: Transform + pos: -38.5,40.5 + parent: 2 + - uid: 20840 + components: + - type: Transform + pos: -38.5,38.5 + parent: 2 + - uid: 20841 + components: + - type: Transform + pos: -39.5,38.5 + parent: 2 + - uid: 20842 + components: + - type: Transform + pos: -42.5,38.5 + parent: 2 + - uid: 20843 + components: + - type: Transform + pos: -43.5,38.5 + parent: 2 + - uid: 20844 + components: + - type: Transform + pos: -43.5,37.5 + parent: 2 + - uid: 20845 + components: + - type: Transform + pos: -43.5,36.5 + parent: 2 + - uid: 20846 + components: + - type: Transform + pos: -43.5,35.5 + parent: 2 + - uid: 20847 + components: + - type: Transform + pos: -43.5,31.5 + parent: 2 + - uid: 20848 + components: + - type: Transform + pos: -43.5,30.5 + parent: 2 + - uid: 20849 + components: + - type: Transform + pos: -43.5,29.5 + parent: 2 + - uid: 20850 + components: + - type: Transform + pos: -43.5,28.5 + parent: 2 + - uid: 20851 + components: + - type: Transform + pos: -43.5,27.5 + parent: 2 + - uid: 20852 + components: + - type: Transform + pos: -42.5,27.5 + parent: 2 + - uid: 20853 + components: + - type: Transform + pos: -41.5,27.5 + parent: 2 + - uid: 20854 + components: + - type: Transform + pos: -40.5,27.5 + parent: 2 + - uid: 20855 + components: + - type: Transform + pos: -39.5,27.5 + parent: 2 + - uid: 20856 + components: + - type: Transform + pos: -38.5,27.5 + parent: 2 + - uid: 20857 + components: + - type: Transform + pos: -38.5,25.5 + parent: 2 + - uid: 20858 + components: + - type: Transform + pos: -38.5,24.5 + parent: 2 + - uid: 20859 + components: + - type: Transform + pos: -38.5,23.5 + parent: 2 + - uid: 20860 + components: + - type: Transform + pos: -39.5,23.5 + parent: 2 + - uid: 20861 + components: + - type: Transform + pos: -41.5,23.5 + parent: 2 + - uid: 20862 + components: + - type: Transform + pos: -42.5,23.5 + parent: 2 + - uid: 20863 + components: + - type: Transform + pos: -43.5,23.5 + parent: 2 + - uid: 20864 + components: + - type: Transform + pos: -43.5,24.5 + parent: 2 + - uid: 20865 + components: + - type: Transform + pos: -43.5,25.5 + parent: 2 + - uid: 20866 + components: + - type: Transform + pos: -42.5,21.5 + parent: 2 + - uid: 20867 + components: + - type: Transform + pos: -41.5,21.5 + parent: 2 + - uid: 20868 + components: + - type: Transform + pos: 8.5,28.5 + parent: 2 + - uid: 20869 + components: + - type: Transform + pos: 7.5,28.5 + parent: 2 + - uid: 20870 + components: + - type: Transform + pos: 6.5,28.5 + parent: 2 + - uid: 20871 + components: + - type: Transform + pos: 4.5,28.5 + parent: 2 + - uid: 20872 + components: + - type: Transform + pos: 3.5,28.5 + parent: 2 + - uid: 20873 + components: + - type: Transform + pos: 3.5,24.5 + parent: 2 + - uid: 20874 + components: + - type: Transform + pos: 9.5,29.5 + parent: 2 + - uid: 20875 + components: + - type: Transform + pos: 9.5,30.5 + parent: 2 + - uid: 20876 + components: + - type: Transform + pos: 9.5,31.5 + parent: 2 + - uid: 20877 + components: + - type: Transform + pos: 9.5,32.5 + parent: 2 + - uid: 20878 + components: + - type: Transform + pos: 9.5,33.5 + parent: 2 + - uid: 20879 + components: + - type: Transform + pos: 8.5,33.5 + parent: 2 + - uid: 20880 + components: + - type: Transform + pos: 7.5,33.5 + parent: 2 + - uid: 20881 + components: + - type: Transform + pos: 6.5,33.5 + parent: 2 + - uid: 20882 + components: + - type: Transform + pos: 5.5,33.5 + parent: 2 + - uid: 20883 + components: + - type: Transform + pos: 4.5,33.5 + parent: 2 + - uid: 20884 + components: + - type: Transform + pos: 3.5,33.5 + parent: 2 + - uid: 20885 + components: + - type: Transform + pos: 3.5,32.5 + parent: 2 + - uid: 20886 + components: + - type: Transform + pos: 3.5,31.5 + parent: 2 + - uid: 20887 + components: + - type: Transform + pos: 3.5,30.5 + parent: 2 + - uid: 20888 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,34.5 + parent: 2 + - uid: 20889 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,35.5 + parent: 2 + - uid: 20890 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,36.5 + parent: 2 + - uid: 20891 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,37.5 + parent: 2 + - uid: 20892 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,38.5 + parent: 2 + - uid: 20893 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,39.5 + parent: 2 + - uid: 20894 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,40.5 + parent: 2 + - uid: 20895 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,41.5 + parent: 2 + - uid: 20896 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,42.5 + parent: 2 + - uid: 20897 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,43.5 + parent: 2 + - uid: 20898 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,44.5 + parent: 2 + - uid: 20899 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,45.5 + parent: 2 + - uid: 20900 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,45.5 + parent: 2 + - uid: 20901 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,45.5 + parent: 2 + - uid: 20902 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,45.5 + parent: 2 + - uid: 20903 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,45.5 + parent: 2 + - uid: 20904 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,45.5 + parent: 2 + - uid: 20905 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,44.5 + parent: 2 + - uid: 20906 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,43.5 + parent: 2 + - uid: 20907 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,42.5 + parent: 2 + - uid: 20908 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,41.5 + parent: 2 + - uid: 20909 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,40.5 + parent: 2 + - uid: 20910 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,39.5 + parent: 2 + - uid: 20911 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,38.5 + parent: 2 + - uid: 20912 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,37.5 + parent: 2 + - uid: 20913 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,36.5 + parent: 2 + - uid: 20914 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,35.5 + parent: 2 + - uid: 20915 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,46.5 + parent: 2 + - uid: 20916 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,46.5 + parent: 2 + - uid: 20917 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,46.5 + parent: 2 + - uid: 20918 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,46.5 + parent: 2 + - uid: 20919 + components: + - type: Transform + pos: -4.5,47.5 + parent: 2 + - uid: 20920 + components: + - type: Transform + pos: -4.5,48.5 + parent: 2 + - uid: 20921 + components: + - type: Transform + pos: -4.5,49.5 + parent: 2 + - uid: 20922 + components: + - type: Transform + pos: -4.5,50.5 + parent: 2 + - uid: 20923 + components: + - type: Transform + pos: -3.5,50.5 + parent: 2 + - uid: 20924 + components: + - type: Transform + pos: -2.5,50.5 + parent: 2 + - uid: 20925 + components: + - type: Transform + pos: -1.5,50.5 + parent: 2 + - uid: 20926 + components: + - type: Transform + pos: -12.5,49.5 + parent: 2 + - uid: 20927 + components: + - type: Transform + pos: -11.5,49.5 + parent: 2 + - uid: 20928 + components: + - type: Transform + pos: -9.5,49.5 + parent: 2 + - uid: 20929 + components: + - type: Transform + pos: -9.5,48.5 + parent: 2 + - uid: 20930 + components: + - type: Transform + pos: -9.5,47.5 + parent: 2 + - uid: 20931 + components: + - type: Transform + pos: -9.5,46.5 + parent: 2 + - uid: 20932 + components: + - type: Transform + pos: -8.5,46.5 + parent: 2 + - uid: 20933 + components: + - type: Transform + pos: -9.5,51.5 + parent: 2 + - uid: 20934 + components: + - type: Transform + pos: -8.5,51.5 + parent: 2 + - uid: 20935 + components: + - type: Transform + pos: -5.5,50.5 + parent: 2 + - uid: 20936 + components: + - type: Transform + pos: -5.5,51.5 + parent: 2 + - uid: 20937 + components: + - type: Transform + pos: -6.5,51.5 + parent: 2 + - uid: 20938 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,52.5 + parent: 2 + - uid: 20939 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,52.5 + parent: 2 + - uid: 20940 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,52.5 + parent: 2 + - uid: 20941 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,53.5 + parent: 2 + - uid: 20942 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,53.5 + parent: 2 + - uid: 20943 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,53.5 + parent: 2 + - uid: 20944 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,54.5 + parent: 2 + - uid: 20945 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,56.5 + parent: 2 + - uid: 20946 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,57.5 + parent: 2 + - uid: 20947 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,57.5 + parent: 2 + - uid: 20948 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,57.5 + parent: 2 + - uid: 20949 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,51.5 + parent: 2 + - uid: 20950 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,52.5 + parent: 2 + - uid: 20951 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,53.5 + parent: 2 + - uid: 20952 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,54.5 + parent: 2 + - uid: 20953 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,55.5 + parent: 2 + - uid: 20954 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,56.5 + parent: 2 + - uid: 20955 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,57.5 + parent: 2 + - uid: 20956 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,57.5 + parent: 2 + - uid: 20957 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,45.5 + parent: 2 + - uid: 20958 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,46.5 + parent: 2 + - uid: 20959 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,47.5 + parent: 2 + - uid: 20960 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,48.5 + parent: 2 + - uid: 20961 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,50.5 + parent: 2 + - uid: 20962 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,51.5 + parent: 2 + - uid: 20963 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,51.5 + parent: 2 + - uid: 20964 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,51.5 + parent: 2 + - uid: 20965 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,50.5 + parent: 2 + - uid: 20966 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,46.5 + parent: 2 + - uid: 20967 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,49.5 + parent: 2 + - uid: 20968 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,51.5 + parent: 2 + - uid: 20969 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,52.5 + parent: 2 + - uid: 20970 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 12.5,52.5 + parent: 2 + - uid: 20971 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,52.5 + parent: 2 + - uid: 20972 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,51.5 + parent: 2 + - uid: 20973 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 14.5,51.5 + parent: 2 + - uid: 20974 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 14.5,50.5 + parent: 2 + - uid: 20975 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 14.5,49.5 + parent: 2 + - uid: 20976 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 14.5,48.5 + parent: 2 + - uid: 20977 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,48.5 + parent: 2 + - uid: 20978 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 12.5,48.5 + parent: 2 + - uid: 20979 + components: + - type: Transform + pos: 4.5,51.5 + parent: 2 + - uid: 20980 + components: + - type: Transform + pos: 3.5,51.5 + parent: 2 + - uid: 20981 + components: + - type: Transform + pos: 3.5,54.5 + parent: 2 + - uid: 20982 + components: + - type: Transform + pos: 3.5,55.5 + parent: 2 + - uid: 20983 + components: + - type: Transform + pos: 3.5,56.5 + parent: 2 + - uid: 20984 + components: + - type: Transform + pos: 3.5,57.5 + parent: 2 + - uid: 20985 + components: + - type: Transform + pos: 4.5,57.5 + parent: 2 + - uid: 20986 + components: + - type: Transform + pos: 7.5,57.5 + parent: 2 + - uid: 20987 + components: + - type: Transform + pos: 8.5,57.5 + parent: 2 + - uid: 20988 + components: + - type: Transform + pos: 9.5,57.5 + parent: 2 + - uid: 20989 + components: + - type: Transform + pos: 10.5,57.5 + parent: 2 + - uid: 20990 + components: + - type: Transform + pos: 10.5,56.5 + parent: 2 + - uid: 20991 + components: + - type: Transform + pos: 11.5,56.5 + parent: 2 + - uid: 20992 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,58.5 + parent: 2 + - uid: 20993 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,58.5 + parent: 2 + - uid: 20994 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,59.5 + parent: 2 + - uid: 20995 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,59.5 + parent: 2 + - uid: 20996 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -55.5,11.5 + parent: 2 + - uid: 20997 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -54.5,11.5 + parent: 2 + - uid: 20998 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -53.5,11.5 + parent: 2 + - uid: 20999 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -52.5,11.5 + parent: 2 + - uid: 21000 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -52.5,13.5 + parent: 2 + - uid: 21001 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -51.5,13.5 + parent: 2 + - uid: 21002 + components: + - type: Transform + pos: -45.5,31.5 + parent: 2 + - uid: 21003 + components: + - type: Transform + pos: -45.5,33.5 + parent: 2 + - uid: 21004 + components: + - type: Transform + pos: -45.5,34.5 + parent: 2 + - uid: 21005 + components: + - type: Transform + pos: -45.5,36.5 + parent: 2 + - uid: 21006 + components: + - type: Transform + pos: -47.5,32.5 + parent: 2 + - uid: 21007 + components: + - type: Transform + pos: -47.5,31.5 + parent: 2 + - uid: 21008 + components: + - type: Transform + pos: -47.5,30.5 + parent: 2 + - uid: 21009 + components: + - type: Transform + pos: -47.5,35.5 + parent: 2 + - uid: 21010 + components: + - type: Transform + pos: -47.5,36.5 + parent: 2 + - uid: 21011 + components: + - type: Transform + pos: -47.5,37.5 + parent: 2 + - uid: 21012 + components: + - type: Transform + pos: -47.5,38.5 + parent: 2 + - uid: 21013 + components: + - type: Transform + pos: -49.5,35.5 + parent: 2 + - uid: 21014 + components: + - type: Transform + pos: -49.5,34.5 + parent: 2 + - uid: 21015 + components: + - type: Transform + pos: -49.5,33.5 + parent: 2 + - uid: 21016 + components: + - type: Transform + pos: -49.5,32.5 + parent: 2 + - uid: 21017 + components: + - type: Transform + pos: -49.5,31.5 + parent: 2 + - uid: 21018 + components: + - type: Transform + pos: -50.5,37.5 + parent: 2 + - uid: 21019 + components: + - type: Transform + pos: -50.5,38.5 + parent: 2 + - uid: 21020 + components: + - type: Transform + pos: -51.5,34.5 + parent: 2 + - uid: 21021 + components: + - type: Transform + pos: -51.5,33.5 + parent: 2 + - uid: 21022 + components: + - type: Transform + pos: -51.5,32.5 + parent: 2 + - uid: 21023 + components: + - type: Transform + pos: -53.5,34.5 + parent: 2 + - uid: 21024 + components: + - type: Transform + pos: -54.5,34.5 + parent: 2 + - uid: 21025 + components: + - type: Transform + pos: -55.5,34.5 + parent: 2 + - uid: 21026 + components: + - type: Transform + pos: -58.5,33.5 + parent: 2 + - uid: 21027 + components: + - type: Transform + pos: -59.5,33.5 + parent: 2 + - uid: 21028 + components: + - type: Transform + pos: -61.5,31.5 + parent: 2 + - uid: 21029 + components: + - type: Transform + pos: -64.5,30.5 + parent: 2 + - uid: 21030 + components: + - type: Transform + pos: -65.5,30.5 + parent: 2 + - uid: 21031 + components: + - type: Transform + pos: -66.5,30.5 + parent: 2 + - uid: 21032 + components: + - type: Transform + pos: -71.5,29.5 + parent: 2 + - uid: 21033 + components: + - type: Transform + pos: -70.5,29.5 + parent: 2 + - uid: 21034 + components: + - type: Transform + pos: -69.5,29.5 + parent: 2 + - uid: 21035 + components: + - type: Transform + pos: -68.5,29.5 + parent: 2 + - uid: 21036 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -50.5,39.5 + parent: 2 + - uid: 21037 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -48.5,40.5 + parent: 2 + - uid: 21038 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -46.5,40.5 + parent: 2 + - uid: 21039 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -44.5,40.5 + parent: 2 + - uid: 21040 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -49.5,42.5 + parent: 2 + - uid: 21041 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -48.5,42.5 + parent: 2 + - uid: 21042 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -47.5,42.5 + parent: 2 + - uid: 21043 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -47.5,44.5 + parent: 2 + - uid: 21044 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -46.5,44.5 + parent: 2 + - uid: 21045 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -45.5,44.5 + parent: 2 + - uid: 21046 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -43.5,40.5 + parent: 2 + - uid: 21047 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -43.5,42.5 + parent: 2 + - uid: 21048 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -42.5,42.5 + parent: 2 + - uid: 21049 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -41.5,42.5 + parent: 2 + - uid: 21050 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -40.5,42.5 + parent: 2 + - uid: 21051 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -43.5,44.5 + parent: 2 + - uid: 21052 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -42.5,44.5 + parent: 2 + - uid: 21053 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -40.5,44.5 + parent: 2 + - uid: 21054 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -39.5,44.5 + parent: 2 + - uid: 21055 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,44.5 + parent: 2 + - uid: 21056 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,44.5 + parent: 2 + - uid: 21057 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -37.5,42.5 + parent: 2 + - uid: 21058 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,42.5 + parent: 2 + - uid: 21059 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,42.5 + parent: 2 + - uid: 21060 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,42.5 + parent: 2 + - uid: 21061 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -35.5,44.5 + parent: 2 + - uid: 21062 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,44.5 + parent: 2 + - uid: 21063 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,44.5 + parent: 2 + - uid: 21064 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,47.5 + parent: 2 + - uid: 21065 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,47.5 + parent: 2 + - uid: 21066 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -16.5,45.5 + parent: 2 + - uid: 21067 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,45.5 + parent: 2 + - uid: 21068 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -16.5,47.5 + parent: 2 + - uid: 21069 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -16.5,48.5 + parent: 2 + - uid: 21070 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -16.5,49.5 + parent: 2 + - uid: 21071 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -16.5,50.5 + parent: 2 + - uid: 21072 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -16.5,52.5 + parent: 2 + - uid: 21073 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,52.5 + parent: 2 + - uid: 21074 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,51.5 + parent: 2 + - uid: 21075 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,55.5 + parent: 2 + - uid: 21076 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,54.5 + parent: 2 + - uid: 21077 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,55.5 + parent: 2 + - uid: 21078 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,56.5 + parent: 2 + - uid: 21079 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,58.5 + parent: 2 + - uid: 21080 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,58.5 + parent: 2 + - uid: 21081 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,59.5 + parent: 2 + - uid: 21082 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,58.5 + parent: 2 + - uid: 21083 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,57.5 + parent: 2 + - uid: 21084 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,62.5 + parent: 2 + - uid: 21085 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,61.5 + parent: 2 + - uid: 21086 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,60.5 + parent: 2 + - uid: 21087 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,61.5 + parent: 2 + - uid: 21088 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,60.5 + parent: 2 + - uid: 21089 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,59.5 + parent: 2 + - uid: 21090 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,63.5 + parent: 2 + - uid: 21091 + components: + - type: Transform + pos: 9.5,58.5 + parent: 2 + - uid: 21092 + components: + - type: Transform + pos: 13.5,61.5 + parent: 2 + - uid: 21093 + components: + - type: Transform + pos: 13.5,60.5 + parent: 2 + - uid: 21094 + components: + - type: Transform + pos: 13.5,57.5 + parent: 2 + - uid: 21095 + components: + - type: Transform + pos: 13.5,58.5 + parent: 2 + - uid: 21096 + components: + - type: Transform + pos: 13.5,62.5 + parent: 2 + - uid: 21097 + components: + - type: Transform + pos: 11.5,60.5 + parent: 2 + - uid: 21098 + components: + - type: Transform + pos: 11.5,61.5 + parent: 2 + - uid: 21099 + components: + - type: Transform + pos: 9.5,63.5 + parent: 2 + - uid: 21100 + components: + - type: Transform + pos: 9.5,64.5 + parent: 2 + - uid: 21101 + components: + - type: Transform + pos: 9.5,65.5 + parent: 2 + - uid: 21102 + components: + - type: Transform + pos: -7.5,64.5 + parent: 2 + - uid: 21103 + components: + - type: Transform + pos: -7.5,65.5 + parent: 2 + - uid: 21104 + components: + - type: Transform + pos: -1.5,68.5 + parent: 2 + - uid: 21105 + components: + - type: Transform + pos: -0.5,68.5 + parent: 2 + - uid: 21106 + components: + - type: Transform + pos: 0.5,68.5 + parent: 2 + - uid: 21107 + components: + - type: Transform + pos: 1.5,68.5 + parent: 2 + - uid: 21108 + components: + - type: Transform + pos: 2.5,68.5 + parent: 2 + - uid: 21109 + components: + - type: Transform + pos: 3.5,68.5 + parent: 2 + - uid: 21110 + components: + - type: Transform + pos: 4.5,71.5 + parent: 2 + - uid: 21111 + components: + - type: Transform + pos: -5.5,68.5 + parent: 2 + - uid: 21112 + components: + - type: Transform + pos: -5.5,69.5 + parent: 2 + - uid: 21113 + components: + - type: Transform + pos: -6.5,69.5 + parent: 2 + - uid: 21114 + components: + - type: Transform + pos: -6.5,70.5 + parent: 2 + - uid: 21115 + components: + - type: Transform + pos: -7.5,70.5 + parent: 2 + - uid: 21116 + components: + - type: Transform + pos: -7.5,71.5 + parent: 2 + - uid: 21117 + components: + - type: Transform + pos: -7.5,72.5 + parent: 2 + - uid: 21118 + components: + - type: Transform + pos: 10.5,71.5 + parent: 2 + - uid: 21119 + components: + - type: Transform + pos: 10.5,70.5 + parent: 2 + - uid: 21120 + components: + - type: Transform + pos: 9.5,70.5 + parent: 2 + - uid: 21121 + components: + - type: Transform + pos: 9.5,69.5 + parent: 2 + - uid: 21122 + components: + - type: Transform + pos: 8.5,69.5 + parent: 2 + - uid: 21123 + components: + - type: Transform + pos: 8.5,68.5 + parent: 2 + - uid: 21124 + components: + - type: Transform + pos: 7.5,68.5 + parent: 2 + - uid: 21125 + components: + - type: Transform + pos: -7.5,73.5 + parent: 2 + - uid: 21126 + components: + - type: Transform + pos: -6.5,73.5 + parent: 2 + - uid: 21127 + components: + - type: Transform + pos: -5.5,73.5 + parent: 2 + - uid: 21128 + components: + - type: Transform + pos: -3.5,73.5 + parent: 2 + - uid: 21129 + components: + - type: Transform + pos: -2.5,73.5 + parent: 2 + - uid: 21130 + components: + - type: Transform + pos: -1.5,73.5 + parent: 2 + - uid: 21131 + components: + - type: Transform + pos: -1.5,69.5 + parent: 2 + - uid: 21132 + components: + - type: Transform + pos: -1.5,72.5 + parent: 2 + - uid: 21133 + components: + - type: Transform + pos: -1.5,71.5 + parent: 2 + - uid: 21134 + components: + - type: Transform + pos: -0.5,73.5 + parent: 2 + - uid: 21135 + components: + - type: Transform + pos: 3.5,73.5 + parent: 2 + - uid: 21136 + components: + - type: Transform + pos: 4.5,68.5 + parent: 2 + - uid: 21137 + components: + - type: Transform + pos: 4.5,69.5 + parent: 2 + - uid: 21138 + components: + - type: Transform + pos: 4.5,72.5 + parent: 2 + - uid: 21139 + components: + - type: Transform + pos: 4.5,73.5 + parent: 2 + - uid: 21140 + components: + - type: Transform + pos: 5.5,73.5 + parent: 2 + - uid: 21141 + components: + - type: Transform + pos: 9.5,73.5 + parent: 2 + - uid: 21142 + components: + - type: Transform + pos: 8.5,73.5 + parent: 2 + - uid: 21143 + components: + - type: Transform + pos: 10.5,72.5 + parent: 2 + - uid: 21144 + components: + - type: Transform + pos: 10.5,73.5 + parent: 2 + - uid: 21145 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,73.5 + parent: 2 + - uid: 21146 + components: + - type: Transform + pos: 5.5,74.5 + parent: 2 + - uid: 21147 + components: + - type: Transform + pos: 5.5,75.5 + parent: 2 + - uid: 21148 + components: + - type: Transform + pos: 5.5,76.5 + parent: 2 + - uid: 21149 + components: + - type: Transform + pos: 5.5,77.5 + parent: 2 + - uid: 21150 + components: + - type: Transform + pos: 5.5,78.5 + parent: 2 + - uid: 21151 + components: + - type: Transform + pos: 5.5,79.5 + parent: 2 + - uid: 21152 + components: + - type: Transform + pos: 5.5,80.5 + parent: 2 + - uid: 21153 + components: + - type: Transform + pos: 5.5,81.5 + parent: 2 + - uid: 21154 + components: + - type: Transform + pos: 6.5,81.5 + parent: 2 + - uid: 21155 + components: + - type: Transform + pos: 8.5,81.5 + parent: 2 + - uid: 21156 + components: + - type: Transform + pos: 9.5,81.5 + parent: 2 + - uid: 21157 + components: + - type: Transform + pos: 10.5,81.5 + parent: 2 + - uid: 21158 + components: + - type: Transform + pos: 10.5,80.5 + parent: 2 + - uid: 21159 + components: + - type: Transform + pos: 10.5,79.5 + parent: 2 + - uid: 21160 + components: + - type: Transform + pos: 10.5,78.5 + parent: 2 + - uid: 21161 + components: + - type: Transform + pos: 10.5,77.5 + parent: 2 + - uid: 21162 + components: + - type: Transform + pos: 10.5,76.5 + parent: 2 + - uid: 21163 + components: + - type: Transform + pos: 10.5,75.5 + parent: 2 + - uid: 21164 + components: + - type: Transform + pos: 10.5,74.5 + parent: 2 + - uid: 21165 + components: + - type: Transform + pos: 10.5,82.5 + parent: 2 + - uid: 21166 + components: + - type: Transform + pos: 10.5,83.5 + parent: 2 + - uid: 21167 + components: + - type: Transform + pos: 10.5,84.5 + parent: 2 + - uid: 21168 + components: + - type: Transform + pos: 9.5,84.5 + parent: 2 + - uid: 21169 + components: + - type: Transform + pos: 9.5,85.5 + parent: 2 + - uid: 21170 + components: + - type: Transform + pos: 8.5,85.5 + parent: 2 + - uid: 21171 + components: + - type: Transform + pos: 8.5,86.5 + parent: 2 + - uid: 21172 + components: + - type: Transform + pos: 7.5,86.5 + parent: 2 + - uid: 21173 + components: + - type: Transform + pos: 6.5,86.5 + parent: 2 + - uid: 21174 + components: + - type: Transform + pos: 5.5,86.5 + parent: 2 + - uid: 21175 + components: + - type: Transform + pos: 4.5,86.5 + parent: 2 + - uid: 21176 + components: + - type: Transform + pos: 4.5,85.5 + parent: 2 + - uid: 21177 + components: + - type: Transform + pos: 4.5,83.5 + parent: 2 + - uid: 21178 + components: + - type: Transform + pos: 4.5,82.5 + parent: 2 + - uid: 21179 + components: + - type: Transform + pos: 4.5,81.5 + parent: 2 + - uid: 21180 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,81.5 + parent: 2 + - uid: 21181 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,81.5 + parent: 2 + - uid: 21182 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,81.5 + parent: 2 + - uid: 21183 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,82.5 + parent: 2 + - uid: 21184 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,83.5 + parent: 2 + - uid: 21185 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,85.5 + parent: 2 + - uid: 21186 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,86.5 + parent: 2 + - uid: 21187 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,81.5 + parent: 2 + - uid: 21188 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,81.5 + parent: 2 + - uid: 21189 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,81.5 + parent: 2 + - uid: 21190 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,81.5 + parent: 2 + - uid: 21191 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,81.5 + parent: 2 + - uid: 21192 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,82.5 + parent: 2 + - uid: 21193 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,83.5 + parent: 2 + - uid: 21194 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,84.5 + parent: 2 + - uid: 21195 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,84.5 + parent: 2 + - uid: 21196 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,85.5 + parent: 2 + - uid: 21197 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,85.5 + parent: 2 + - uid: 21198 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,86.5 + parent: 2 + - uid: 21199 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,86.5 + parent: 2 + - uid: 21200 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,86.5 + parent: 2 + - uid: 21201 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,86.5 + parent: 2 + - uid: 21202 + components: + - type: Transform + pos: -2.5,80.5 + parent: 2 + - uid: 21203 + components: + - type: Transform + pos: -2.5,79.5 + parent: 2 + - uid: 21204 + components: + - type: Transform + pos: -2.5,78.5 + parent: 2 + - uid: 21205 + components: + - type: Transform + pos: -2.5,77.5 + parent: 2 + - uid: 21206 + components: + - type: Transform + pos: -2.5,76.5 + parent: 2 + - uid: 21207 + components: + - type: Transform + pos: -2.5,75.5 + parent: 2 + - uid: 21208 + components: + - type: Transform + pos: -2.5,74.5 + parent: 2 + - uid: 21209 + components: + - type: Transform + pos: -7.5,74.5 + parent: 2 + - uid: 21210 + components: + - type: Transform + pos: -7.5,75.5 + parent: 2 + - uid: 21211 + components: + - type: Transform + pos: -7.5,76.5 + parent: 2 + - uid: 21212 + components: + - type: Transform + pos: -7.5,80.5 + parent: 2 + - uid: 21213 + components: + - type: Transform + pos: -7.5,79.5 + parent: 2 + - uid: 21214 + components: + - type: Transform + pos: -7.5,78.5 + parent: 2 + - uid: 21215 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,78.5 + parent: 2 + - uid: 21216 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,78.5 + parent: 2 + - uid: 21217 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,76.5 + parent: 2 + - uid: 21218 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,76.5 + parent: 2 + - uid: 21219 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,72.5 + parent: 2 + - uid: 21220 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 13.5,64.5 + parent: 2 + - uid: 21221 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 13.5,65.5 + parent: 2 + - uid: 21222 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,65.5 + parent: 2 + - uid: 21223 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,66.5 + parent: 2 + - uid: 21224 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,67.5 + parent: 2 + - uid: 21225 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,67.5 + parent: 2 + - uid: 21226 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,68.5 + parent: 2 + - uid: 21227 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,69.5 + parent: 2 + - uid: 21228 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,70.5 + parent: 2 + - uid: 21229 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,69.5 + parent: 2 + - uid: 21230 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,70.5 + parent: 2 + - uid: 21231 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,71.5 + parent: 2 + - uid: 21232 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,72.5 + parent: 2 + - uid: 21233 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,73.5 + parent: 2 + - uid: 21234 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,74.5 + parent: 2 + - uid: 21235 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,75.5 + parent: 2 + - uid: 21236 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,90.5 + parent: 2 + - uid: 21237 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,74.5 + parent: 2 + - uid: 21238 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,75.5 + parent: 2 + - uid: 21239 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,76.5 + parent: 2 + - uid: 21240 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,77.5 + parent: 2 + - uid: 21241 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,78.5 + parent: 2 + - uid: 21242 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,79.5 + parent: 2 + - uid: 21243 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 13.5,74.5 + parent: 2 + - uid: 21244 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 13.5,75.5 + parent: 2 + - uid: 21245 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 13.5,76.5 + parent: 2 + - uid: 21246 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 13.5,77.5 + parent: 2 + - uid: 21247 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 13.5,78.5 + parent: 2 + - uid: 21248 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 13.5,79.5 + parent: 2 + - uid: 21249 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,78.5 + parent: 2 + - uid: 21250 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,79.5 + parent: 2 + - uid: 21251 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,80.5 + parent: 2 + - uid: 21252 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,81.5 + parent: 2 + - uid: 21253 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,81.5 + parent: 2 + - uid: 21254 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,82.5 + parent: 2 + - uid: 21255 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,83.5 + parent: 2 + - uid: 21256 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,84.5 + parent: 2 + - uid: 21257 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,85.5 + parent: 2 + - uid: 21258 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,83.5 + parent: 2 + - uid: 21259 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,84.5 + parent: 2 + - uid: 21260 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,85.5 + parent: 2 + - uid: 21261 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,86.5 + parent: 2 + - uid: 21262 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,87.5 + parent: 2 + - uid: 21263 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,87.5 + parent: 2 + - uid: 21264 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,87.5 + parent: 2 + - uid: 21265 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,89.5 + parent: 2 + - uid: 21266 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,89.5 + parent: 2 + - uid: 21267 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 13.5,89.5 + parent: 2 + - uid: 21268 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,88.5 + parent: 2 + - uid: 21269 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,88.5 + parent: 2 + - uid: 21270 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,88.5 + parent: 2 + - uid: 21271 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,88.5 + parent: 2 + - uid: 21272 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,90.5 + parent: 2 + - uid: 21273 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,90.5 + parent: 2 + - uid: 21274 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,90.5 + parent: 2 + - uid: 21275 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,92.5 + parent: 2 + - uid: 21276 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,92.5 + parent: 2 + - uid: 21277 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,92.5 + parent: 2 + - uid: 21278 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,92.5 + parent: 2 + - uid: 21279 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,90.5 + parent: 2 + - uid: 21280 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,90.5 + parent: 2 + - uid: 21281 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,90.5 + parent: 2 + - uid: 21282 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,90.5 + parent: 2 + - uid: 21283 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,90.5 + parent: 2 + - uid: 21284 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,90.5 + parent: 2 + - uid: 21285 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,87.5 + parent: 2 + - uid: 21286 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,92.5 + parent: 2 + - uid: 21287 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,92.5 + parent: 2 + - uid: 21288 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,92.5 + parent: 2 + - uid: 21289 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,92.5 + parent: 2 + - uid: 21290 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,88.5 + parent: 2 + - uid: 21291 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,88.5 + parent: 2 + - uid: 21292 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,88.5 + parent: 2 + - uid: 21293 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,88.5 + parent: 2 + - uid: 21294 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,90.5 + parent: 2 + - uid: 21295 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,90.5 + parent: 2 + - uid: 21296 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,90.5 + parent: 2 + - uid: 21297 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,87.5 + parent: 2 + - uid: 21298 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,87.5 + parent: 2 + - uid: 21299 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,89.5 + parent: 2 + - uid: 21300 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,89.5 + parent: 2 + - uid: 21301 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,89.5 + parent: 2 + - uid: 21302 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,74.5 + parent: 2 + - uid: 21303 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,85.5 + parent: 2 + - uid: 21304 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,84.5 + parent: 2 + - uid: 21305 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,83.5 + parent: 2 + - uid: 21306 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,82.5 + parent: 2 + - uid: 21307 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,81.5 + parent: 2 + - uid: 21308 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,80.5 + parent: 2 + - uid: 21309 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,86.5 + parent: 2 + - uid: 21310 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,85.5 + parent: 2 + - uid: 21311 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,84.5 + parent: 2 + - uid: 21312 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,83.5 + parent: 2 + - uid: 21313 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,84.5 + parent: 2 + - uid: 21314 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,83.5 + parent: 2 + - uid: 21315 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,82.5 + parent: 2 + - uid: 21316 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,81.5 + parent: 2 + - uid: 21317 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,81.5 + parent: 2 + - uid: 21318 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,80.5 + parent: 2 + - uid: 21319 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,78.5 + parent: 2 + - uid: 21320 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,77.5 + parent: 2 + - uid: 21321 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,76.5 + parent: 2 + - uid: 21322 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,79.5 + parent: 2 + - uid: 21323 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,78.5 + parent: 2 + - uid: 21324 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,77.5 + parent: 2 + - uid: 21325 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,76.5 + parent: 2 + - uid: 21326 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,75.5 + parent: 2 + - uid: 21327 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,73.5 + parent: 2 + - uid: 21328 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,73.5 + parent: 2 + - uid: 21329 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,72.5 + parent: 2 + - uid: 21330 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,71.5 + parent: 2 + - uid: 21331 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,70.5 + parent: 2 + - uid: 21332 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,73.5 + parent: 2 + - uid: 21333 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,72.5 + parent: 2 + - uid: 21334 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,71.5 + parent: 2 + - uid: 21335 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,70.5 + parent: 2 + - uid: 21336 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,70.5 + parent: 2 + - uid: 21337 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,69.5 + parent: 2 + - uid: 21338 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,68.5 + parent: 2 + - uid: 21339 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,68.5 + parent: 2 + - uid: 21340 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,67.5 + parent: 2 + - uid: 21341 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,66.5 + parent: 2 + - uid: 21342 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,65.5 + parent: 2 + - uid: 21343 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,74.5 + parent: 2 + - uid: 21344 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,74.5 + parent: 2 + - uid: 21345 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,80.5 + parent: 2 + - uid: 21346 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,80.5 + parent: 2 + - uid: 21347 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,-17.5 + parent: 2 + - uid: 21348 + components: + - type: Transform + pos: 21.5,-18.5 + parent: 2 + - uid: 21349 + components: + - type: Transform + pos: 21.5,-19.5 + parent: 2 + - uid: 21350 + components: + - type: Transform + pos: 21.5,-20.5 + parent: 2 + - uid: 21351 + components: + - type: Transform + pos: 21.5,-21.5 + parent: 2 + - uid: 21352 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,-17.5 + parent: 2 + - uid: 21353 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,-18.5 + parent: 2 + - uid: 21354 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,-19.5 + parent: 2 + - uid: 21355 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,-20.5 + parent: 2 + - uid: 21356 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,-21.5 + parent: 2 + - uid: 21357 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,-22.5 + parent: 2 + - uid: 21358 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,-22.5 + parent: 2 + - uid: 21359 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,-21.5 + parent: 2 + - uid: 21360 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,-22.5 + parent: 2 + - uid: 21361 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 47.5,-26.5 + parent: 2 + - uid: 21362 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,-26.5 + parent: 2 + - uid: 21363 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 45.5,-26.5 + parent: 2 + - uid: 21364 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,-26.5 + parent: 2 + - uid: 21365 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 43.5,-26.5 + parent: 2 + - uid: 21366 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,-26.5 + parent: 2 + - uid: 21367 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 48.5,-26.5 + parent: 2 + - uid: 21368 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 48.5,-27.5 + parent: 2 + - uid: 21369 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 48.5,-28.5 + parent: 2 + - uid: 21370 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 48.5,-29.5 + parent: 2 + - uid: 21371 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 48.5,-33.5 + parent: 2 + - uid: 21372 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 48.5,-34.5 + parent: 2 + - uid: 21373 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 48.5,-35.5 + parent: 2 + - uid: 21374 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 47.5,-35.5 + parent: 2 + - uid: 21375 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 46.5,-35.5 + parent: 2 + - uid: 21376 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 45.5,-35.5 + parent: 2 + - uid: 21377 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 44.5,-35.5 + parent: 2 + - uid: 21378 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,-35.5 + parent: 2 + - uid: 21379 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,-35.5 + parent: 2 + - uid: 21380 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,-35.5 + parent: 2 + - uid: 21381 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 40.5,-35.5 + parent: 2 + - uid: 21382 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,-35.5 + parent: 2 + - uid: 21383 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,-35.5 + parent: 2 + - uid: 21384 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,-35.5 + parent: 2 + - uid: 21385 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,-34.5 + parent: 2 + - uid: 21386 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,-33.5 + parent: 2 + - uid: 21387 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,-32.5 + parent: 2 + - uid: 21388 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,-30.5 + parent: 2 + - uid: 21389 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,-29.5 + parent: 2 + - uid: 21390 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,-28.5 + parent: 2 + - uid: 21391 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,-27.5 + parent: 2 + - uid: 21392 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,-26.5 + parent: 2 + - uid: 21393 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,-34.5 + parent: 2 + - uid: 21394 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,-33.5 + parent: 2 + - uid: 21395 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,-32.5 + parent: 2 + - uid: 21396 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,-30.5 + parent: 2 + - uid: 21397 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,-29.5 + parent: 2 + - uid: 21398 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,-28.5 + parent: 2 + - uid: 21399 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,-27.5 + parent: 2 + - uid: 21400 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-26.5 + parent: 2 + - uid: 21401 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,-26.5 + parent: 2 + - uid: 21402 + components: + - type: Transform + pos: 3.5,-38.5 + parent: 2 + - uid: 21403 + components: + - type: Transform + pos: 4.5,-38.5 + parent: 2 + - uid: 21404 + components: + - type: Transform + pos: 5.5,-38.5 + parent: 2 + - uid: 21405 + components: + - type: Transform + pos: 6.5,-38.5 + parent: 2 + - uid: 21406 + components: + - type: Transform + pos: 7.5,-38.5 + parent: 2 + - uid: 21407 + components: + - type: Transform + pos: 8.5,-38.5 + parent: 2 + - uid: 21408 + components: + - type: Transform + pos: 9.5,-38.5 + parent: 2 + - uid: 21409 + components: + - type: Transform + pos: 9.5,-39.5 + parent: 2 + - uid: 21410 + components: + - type: Transform + pos: 10.5,-39.5 + parent: 2 + - uid: 21411 + components: + - type: Transform + pos: 11.5,-39.5 + parent: 2 + - uid: 21412 + components: + - type: Transform + pos: 12.5,-39.5 + parent: 2 + - uid: 21413 + components: + - type: Transform + pos: 14.5,-39.5 + parent: 2 + - uid: 21414 + components: + - type: Transform + pos: 15.5,-39.5 + parent: 2 + - uid: 21415 + components: + - type: Transform + pos: 15.5,-38.5 + parent: 2 + - uid: 21416 + components: + - type: Transform + pos: 15.5,-37.5 + parent: 2 + - uid: 21417 + components: + - type: Transform + pos: 17.5,-38.5 + parent: 2 + - uid: 21418 + components: + - type: Transform + pos: 17.5,-37.5 + parent: 2 + - uid: 21419 + components: + - type: Transform + pos: 18.5,-38.5 + parent: 2 + - uid: 21420 + components: + - type: Transform + pos: 19.5,-38.5 + parent: 2 + - uid: 21421 + components: + - type: Transform + pos: 20.5,-38.5 + parent: 2 + - uid: 21422 + components: + - type: Transform + pos: 21.5,-38.5 + parent: 2 + - uid: 21423 + components: + - type: Transform + pos: 22.5,-38.5 + parent: 2 + - uid: 21424 + components: + - type: Transform + pos: 23.5,-38.5 + parent: 2 + - uid: 21425 + components: + - type: Transform + pos: 24.5,-38.5 + parent: 2 + - uid: 21426 + components: + - type: Transform + pos: 25.5,-38.5 + parent: 2 + - uid: 21427 + components: + - type: Transform + pos: 26.5,-38.5 + parent: 2 + - uid: 21428 + components: + - type: Transform + pos: 27.5,-38.5 + parent: 2 + - uid: 21429 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,-38.5 + parent: 2 + - uid: 21430 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 29.5,-38.5 + parent: 2 + - uid: 21431 + components: + - type: Transform + pos: 31.5,-39.5 + parent: 2 + - uid: 21432 + components: + - type: Transform + pos: 31.5,-40.5 + parent: 2 + - uid: 21433 + components: + - type: Transform + pos: 32.5,-40.5 + parent: 2 + - uid: 21434 + components: + - type: Transform + pos: 33.5,-40.5 + parent: 2 + - uid: 21435 + components: + - type: Transform + pos: 34.5,-40.5 + parent: 2 + - uid: 21436 + components: + - type: Transform + pos: 35.5,-40.5 + parent: 2 + - uid: 21437 + components: + - type: Transform + pos: 36.5,-40.5 + parent: 2 + - uid: 21438 + components: + - type: Transform + pos: 37.5,-40.5 + parent: 2 + - uid: 21439 + components: + - type: Transform + pos: 37.5,-41.5 + parent: 2 + - uid: 21440 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,-56.5 + parent: 2 + - uid: 21441 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-43.5 + parent: 2 + - uid: 21442 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,-43.5 + parent: 2 + - uid: 21443 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,-43.5 + parent: 2 + - uid: 21444 + components: + - type: Transform + pos: -2.5,-49.5 + parent: 2 + - uid: 21445 + components: + - type: Transform + pos: -1.5,-49.5 + parent: 2 + - uid: 21446 + components: + - type: Transform + pos: -0.5,-49.5 + parent: 2 + - uid: 21447 + components: + - type: Transform + pos: 0.5,-49.5 + parent: 2 + - uid: 21448 + components: + - type: Transform + pos: 1.5,-49.5 + parent: 2 + - uid: 21449 + components: + - type: Transform + pos: 1.5,-48.5 + parent: 2 + - uid: 21450 + components: + - type: Transform + pos: 1.5,-47.5 + parent: 2 + - uid: 21451 + components: + - type: Transform + pos: 1.5,-50.5 + parent: 2 + - uid: 21452 + components: + - type: Transform + pos: 1.5,-51.5 + parent: 2 + - uid: 21453 + components: + - type: Transform + pos: 2.5,-51.5 + parent: 2 + - uid: 21454 + components: + - type: Transform + pos: 3.5,-51.5 + parent: 2 + - uid: 21455 + components: + - type: Transform + pos: 4.5,-51.5 + parent: 2 + - uid: 21456 + components: + - type: Transform + pos: 5.5,-51.5 + parent: 2 + - uid: 21457 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-49.5 + parent: 2 + - uid: 21458 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-50.5 + parent: 2 + - uid: 21459 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-53.5 + parent: 2 + - uid: 21460 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-54.5 + parent: 2 + - uid: 21461 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-55.5 + parent: 2 + - uid: 21462 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-56.5 + parent: 2 + - uid: 21463 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,-56.5 + parent: 2 + - uid: 21464 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.5,-56.5 + parent: 2 + - uid: 21465 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.5,-56.5 + parent: 2 + - uid: 21466 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 13.5,-56.5 + parent: 2 + - uid: 21467 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,-56.5 + parent: 2 + - uid: 21468 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,-56.5 + parent: 2 + - uid: 21469 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,-55.5 + parent: 2 + - uid: 21470 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,-54.5 + parent: 2 + - uid: 21471 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,-53.5 + parent: 2 + - uid: 21472 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,-52.5 + parent: 2 + - uid: 21473 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,-51.5 + parent: 2 + - uid: 21474 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,-50.5 + parent: 2 + - uid: 21475 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,-49.5 + parent: 2 + - uid: 21476 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,-49.5 + parent: 2 + - uid: 21477 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,-49.5 + parent: 2 + - uid: 21478 + components: + - type: Transform + pos: 33.5,-60.5 + parent: 2 + - uid: 21479 + components: + - type: Transform + pos: -43.5,21.5 + parent: 2 + - uid: 21480 + components: + - type: Transform + pos: -3.5,-54.5 + parent: 2 + - uid: 21481 + components: + - type: Transform + pos: -2.5,-54.5 + parent: 2 + - uid: 21482 + components: + - type: Transform + pos: -1.5,-54.5 + parent: 2 + - uid: 21483 + components: + - type: Transform + pos: -0.5,-54.5 + parent: 2 + - uid: 21484 + components: + - type: Transform + pos: 0.5,-54.5 + parent: 2 + - uid: 21485 + components: + - type: Transform + pos: 1.5,-54.5 + parent: 2 + - uid: 21486 + components: + - type: Transform + pos: 1.5,-53.5 + parent: 2 + - uid: 21487 + components: + - type: Transform + pos: 1.5,-52.5 + parent: 2 + - uid: 21488 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,-61.5 + parent: 2 + - uid: 21489 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,-61.5 + parent: 2 + - uid: 21490 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,-61.5 + parent: 2 + - uid: 21491 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,26.5 + parent: 2 + - uid: 21492 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,-55.5 + parent: 2 + - uid: 21493 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,-64.5 + parent: 2 + - uid: 21494 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,-64.5 + parent: 2 + - uid: 21495 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,-64.5 + parent: 2 + - uid: 21496 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,-62.5 + parent: 2 + - uid: 21497 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,-64.5 + parent: 2 + - uid: 21498 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -16.5,-64.5 + parent: 2 + - uid: 21499 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,-62.5 + parent: 2 + - uid: 21500 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -16.5,-63.5 + parent: 2 + - uid: 21501 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -16.5,-62.5 + parent: 2 + - uid: 21502 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,-62.5 + parent: 2 + - uid: 21503 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,-62.5 + parent: 2 + - uid: 21504 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,-62.5 + parent: 2 + - uid: 21505 + components: + - type: Transform + pos: 15.5,-63.5 + parent: 2 + - uid: 21506 + components: + - type: Transform + pos: 15.5,-64.5 + parent: 2 + - uid: 21507 + components: + - type: Transform + pos: 15.5,-65.5 + parent: 2 + - uid: 21508 + components: + - type: Transform + pos: 15.5,-66.5 + parent: 2 + - uid: 21509 + components: + - type: Transform + pos: 15.5,-67.5 + parent: 2 + - uid: 21510 + components: + - type: Transform + pos: 15.5,-68.5 + parent: 2 + - uid: 21511 + components: + - type: Transform + pos: 15.5,-69.5 + parent: 2 + - uid: 21512 + components: + - type: Transform + pos: 15.5,-70.5 + parent: 2 + - uid: 21513 + components: + - type: Transform + pos: 15.5,-71.5 + parent: 2 + - uid: 21514 + components: + - type: Transform + pos: 14.5,-71.5 + parent: 2 + - uid: 21515 + components: + - type: Transform + pos: 10.5,-71.5 + parent: 2 + - uid: 21516 + components: + - type: Transform + pos: 9.5,-71.5 + parent: 2 + - uid: 21517 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,-67.5 + parent: 2 + - uid: 21518 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,-67.5 + parent: 2 + - uid: 21519 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-67.5 + parent: 2 + - uid: 21520 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-67.5 + parent: 2 + - uid: 21521 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-67.5 + parent: 2 + - uid: 21522 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-67.5 + parent: 2 + - uid: 21523 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-67.5 + parent: 2 + - uid: 21524 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,-67.5 + parent: 2 + - uid: 21525 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-66.5 + parent: 2 + - uid: 21526 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-65.5 + parent: 2 + - uid: 21527 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-65.5 + parent: 2 + - uid: 21528 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-65.5 + parent: 2 + - uid: 21529 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-65.5 + parent: 2 + - uid: 21530 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-66.5 + parent: 2 + - uid: 21531 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,-71.5 + parent: 2 + - uid: 21532 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,-71.5 + parent: 2 + - uid: 21533 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-71.5 + parent: 2 + - uid: 21534 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-71.5 + parent: 2 + - uid: 21535 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-71.5 + parent: 2 + - uid: 21536 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,-71.5 + parent: 2 + - uid: 21537 + components: + - type: Transform + pos: 16.5,-52.5 + parent: 2 + - uid: 21538 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-63.5 + parent: 2 + - uid: 21539 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-64.5 + parent: 2 + - uid: 21540 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-65.5 + parent: 2 + - uid: 21541 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-66.5 + parent: 2 + - uid: 21542 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-67.5 + parent: 2 + - uid: 21543 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-71.5 + parent: 2 + - uid: 21544 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-72.5 + parent: 2 + - uid: 21545 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-73.5 + parent: 2 + - uid: 21546 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-75.5 + parent: 2 + - uid: 21547 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-76.5 + parent: 2 + - uid: 21548 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,-76.5 + parent: 2 + - uid: 21549 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,-77.5 + parent: 2 + - uid: 21550 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,-77.5 + parent: 2 + - uid: 21551 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-77.5 + parent: 2 + - uid: 21552 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-77.5 + parent: 2 + - uid: 21553 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,-77.5 + parent: 2 + - uid: 21554 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-77.5 + parent: 2 + - uid: 21555 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,-77.5 + parent: 2 + - uid: 21556 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,-77.5 + parent: 2 + - uid: 21557 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,-77.5 + parent: 2 + - uid: 21558 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,-76.5 + parent: 2 + - uid: 21559 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-76.5 + parent: 2 + - uid: 21560 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-75.5 + parent: 2 + - uid: 21561 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-73.5 + parent: 2 + - uid: 21562 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-72.5 + parent: 2 + - uid: 21563 + components: + - type: Transform + pos: 18.5,-52.5 + parent: 2 + - uid: 21564 + components: + - type: Transform + pos: 19.5,-52.5 + parent: 2 + - uid: 21565 + components: + - type: Transform + pos: 18.5,-64.5 + parent: 2 + - uid: 21566 + components: + - type: Transform + pos: 17.5,-64.5 + parent: 2 + - uid: 21567 + components: + - type: Transform + pos: 16.5,-64.5 + parent: 2 + - uid: 21568 + components: + - type: Transform + pos: 21.5,-65.5 + parent: 2 + - uid: 21569 + components: + - type: Transform + pos: 17.5,-52.5 + parent: 2 + - uid: 21570 + components: + - type: Transform + pos: 19.5,-64.5 + parent: 2 + - uid: 21571 + components: + - type: Transform + pos: 19.5,-60.5 + parent: 2 + - uid: 21572 + components: + - type: Transform + pos: 18.5,-60.5 + parent: 2 + - uid: 21573 + components: + - type: Transform + pos: 17.5,-60.5 + parent: 2 + - uid: 21574 + components: + - type: Transform + pos: 16.5,-60.5 + parent: 2 + - uid: 21575 + components: + - type: Transform + pos: 19.5,-56.5 + parent: 2 + - uid: 21576 + components: + - type: Transform + pos: 18.5,-56.5 + parent: 2 + - uid: 21577 + components: + - type: Transform + pos: 17.5,-56.5 + parent: 2 + - uid: 21578 + components: + - type: Transform + pos: 16.5,-56.5 + parent: 2 + - uid: 21579 + components: + - type: Transform + pos: 25.5,-65.5 + parent: 2 + - uid: 21580 + components: + - type: Transform + pos: 21.5,-60.5 + parent: 2 + - uid: 21581 + components: + - type: Transform + pos: 21.5,-56.5 + parent: 2 + - uid: 21582 + components: + - type: Transform + pos: 23.5,-65.5 + parent: 2 + - uid: 21583 + components: + - type: Transform + pos: 38.5,-41.5 + parent: 2 + - uid: 21584 + components: + - type: Transform + pos: 29.5,-65.5 + parent: 2 + - uid: 21585 + components: + - type: Transform + pos: 33.5,-65.5 + parent: 2 + - uid: 21586 + components: + - type: Transform + pos: 33.5,-64.5 + parent: 2 + - uid: 21587 + components: + - type: Transform + pos: 39.5,-41.5 + parent: 2 + - uid: 21588 + components: + - type: Transform + pos: 40.5,-41.5 + parent: 2 + - uid: 21589 + components: + - type: Transform + pos: 41.5,-41.5 + parent: 2 + - uid: 21590 + components: + - type: Transform + pos: 42.5,-41.5 + parent: 2 + - uid: 21591 + components: + - type: Transform + pos: 43.5,-41.5 + parent: 2 + - uid: 21592 + components: + - type: Transform + pos: 44.5,-41.5 + parent: 2 + - uid: 21593 + components: + - type: Transform + pos: 45.5,-41.5 + parent: 2 + - uid: 21594 + components: + - type: Transform + pos: 33.5,-56.5 + parent: 2 + - uid: 21595 + components: + - type: Transform + pos: 41.5,-45.5 + parent: 2 + - uid: 21596 + components: + - type: Transform + pos: 43.5,-45.5 + parent: 2 + - uid: 21597 + components: + - type: Transform + pos: 43.5,-44.5 + parent: 2 + - uid: 21598 + components: + - type: Transform + pos: 44.5,-44.5 + parent: 2 + - uid: 21599 + components: + - type: Transform + pos: 41.5,-47.5 + parent: 2 + - uid: 21600 + components: + - type: Transform + pos: 40.5,-47.5 + parent: 2 + - uid: 21601 + components: + - type: Transform + pos: 39.5,-47.5 + parent: 2 + - uid: 21602 + components: + - type: Transform + pos: 45.5,-44.5 + parent: 2 + - uid: 21603 + components: + - type: Transform + pos: 34.5,-52.5 + parent: 2 + - uid: 21604 + components: + - type: Transform + pos: 35.5,-52.5 + parent: 2 + - uid: 21605 + components: + - type: Transform + pos: 36.5,-52.5 + parent: 2 + - uid: 21606 + components: + - type: Transform + pos: 37.5,-52.5 + parent: 2 + - uid: 21607 + components: + - type: Transform + pos: 38.5,-52.5 + parent: 2 + - uid: 21608 + components: + - type: Transform + pos: 39.5,-52.5 + parent: 2 + - uid: 21609 + components: + - type: Transform + pos: 39.5,-49.5 + parent: 2 + - uid: 21610 + components: + - type: Transform + pos: 39.5,-50.5 + parent: 2 + - uid: 21611 + components: + - type: Transform + pos: 39.5,-51.5 + parent: 2 + - uid: 21612 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,-70.5 + parent: 2 + - uid: 21613 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,-70.5 + parent: 2 + - uid: 21614 + components: + - type: Transform + pos: 25.5,-67.5 + parent: 2 + - uid: 21615 + components: + - type: Transform + pos: 25.5,-68.5 + parent: 2 + - uid: 21616 + components: + - type: Transform + pos: 25.5,-69.5 + parent: 2 + - uid: 21617 + components: + - type: Transform + pos: 25.5,-70.5 + parent: 2 + - uid: 21618 + components: + - type: Transform + pos: 25.5,-71.5 + parent: 2 + - uid: 21619 + components: + - type: Transform + pos: 26.5,-71.5 + parent: 2 + - uid: 21620 + components: + - type: Transform + pos: 28.5,-71.5 + parent: 2 + - uid: 21621 + components: + - type: Transform + pos: 29.5,-71.5 + parent: 2 + - uid: 21622 + components: + - type: Transform + pos: 29.5,-70.5 + parent: 2 + - uid: 21623 + components: + - type: Transform + pos: 29.5,-69.5 + parent: 2 + - uid: 21624 + components: + - type: Transform + pos: 29.5,-68.5 + parent: 2 + - uid: 21625 + components: + - type: Transform + pos: 29.5,-67.5 + parent: 2 + - uid: 21626 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,-53.5 + parent: 2 + - uid: 21627 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,-55.5 + parent: 2 + - uid: 21628 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,-57.5 + parent: 2 + - uid: 21629 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-64.5 + parent: 2 + - uid: 21630 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,-64.5 + parent: 2 + - uid: 21631 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,-64.5 + parent: 2 + - uid: 21632 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,-64.5 + parent: 2 + - uid: 21633 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,-64.5 + parent: 2 + - uid: 21634 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,-63.5 + parent: 2 + - uid: 21635 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,-62.5 + parent: 2 + - uid: 21636 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,-61.5 + parent: 2 + - uid: 21637 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,-60.5 + parent: 2 + - uid: 21638 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,-60.5 + parent: 2 + - uid: 21639 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,-60.5 + parent: 2 + - uid: 21640 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,-60.5 + parent: 2 + - uid: 21641 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-60.5 + parent: 2 + - uid: 21642 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,-59.5 + parent: 2 + - uid: 21643 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,-58.5 + parent: 2 + - uid: 21644 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,-57.5 + parent: 2 + - uid: 21645 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,-56.5 + parent: 2 + - uid: 21646 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,-56.5 + parent: 2 + - uid: 21647 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,-56.5 + parent: 2 + - uid: 21648 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,-56.5 + parent: 2 + - uid: 21649 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-56.5 + parent: 2 + - uid: 21650 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,-55.5 + parent: 2 + - uid: 21651 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,-53.5 + parent: 2 + - uid: 21652 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,-59.5 + parent: 2 + - uid: 21653 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,-61.5 + parent: 2 + - uid: 21654 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,-63.5 + parent: 2 + - uid: 21655 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,-67.5 + parent: 2 + - uid: 21656 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,-67.5 + parent: 2 + - uid: 21657 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-63.5 + parent: 2 + - uid: 21658 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-61.5 + parent: 2 + - uid: 21659 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-59.5 + parent: 2 + - uid: 21660 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-57.5 + parent: 2 + - uid: 21661 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-55.5 + parent: 2 + - uid: 21662 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-53.5 + parent: 2 + - uid: 21663 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 23.5,-73.5 + parent: 2 + - uid: 21664 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,-73.5 + parent: 2 + - uid: 21665 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,-73.5 + parent: 2 + - uid: 21666 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,-71.5 + parent: 2 + - uid: 21667 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,-71.5 + parent: 2 + - uid: 21668 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,-75.5 + parent: 2 + - uid: 21669 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,-75.5 + parent: 2 + - uid: 21670 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,-75.5 + parent: 2 + - uid: 21671 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,-75.5 + parent: 2 + - uid: 21672 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 29.5,-75.5 + parent: 2 + - uid: 21673 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 29.5,-73.5 + parent: 2 + - uid: 21674 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,-73.5 + parent: 2 + - uid: 21675 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,-73.5 + parent: 2 + - uid: 21676 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,-72.5 + parent: 2 + - uid: 21677 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-72.5 + parent: 2 + - uid: 21678 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-72.5 + parent: 2 + - uid: 21679 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-70.5 + parent: 2 + - uid: 21680 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-70.5 + parent: 2 + - uid: 21681 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 35.5,-65.5 + parent: 2 + - uid: 21682 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 23.5,-66.5 + parent: 2 + - uid: 21683 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 23.5,-67.5 + parent: 2 + - uid: 21684 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,-66.5 + parent: 2 + - uid: 21685 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,-67.5 + parent: 2 + - uid: 21686 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 42.5,-65.5 + parent: 2 + - uid: 21687 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,-65.5 + parent: 2 + - uid: 21688 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 44.5,-65.5 + parent: 2 + - uid: 21689 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 45.5,-65.5 + parent: 2 + - uid: 21690 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 46.5,-65.5 + parent: 2 + - uid: 21691 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 48.5,-64.5 + parent: 2 + - uid: 21692 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 49.5,-64.5 + parent: 2 + - uid: 21693 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.5,-64.5 + parent: 2 + - uid: 21694 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 51.5,-64.5 + parent: 2 + - uid: 21695 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 36.5,-67.5 + parent: 2 + - uid: 21696 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 53.5,-63.5 + parent: 2 + - uid: 21697 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 54.5,-63.5 + parent: 2 + - uid: 21698 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 55.5,-63.5 + parent: 2 + - uid: 21699 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 56.5,-63.5 + parent: 2 + - uid: 21700 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 37.5,-67.5 + parent: 2 + - uid: 21701 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 38.5,-67.5 + parent: 2 + - uid: 21702 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 39.5,-67.5 + parent: 2 + - uid: 21703 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 40.5,-67.5 + parent: 2 + - uid: 21704 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 38.5,-69.5 + parent: 2 + - uid: 21705 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 39.5,-69.5 + parent: 2 + - uid: 21706 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 40.5,-69.5 + parent: 2 + - uid: 21707 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 36.5,-70.5 + parent: 2 + - uid: 21708 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-53.5 + parent: 2 + - uid: 21709 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,-76.5 + parent: 2 + - uid: 21710 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-52.5 + parent: 2 + - uid: 21711 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-50.5 + parent: 2 + - uid: 21712 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 49.5,-47.5 + parent: 2 + - uid: 21713 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.5,-27.5 + parent: 2 + - uid: 21714 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.5,-28.5 + parent: 2 + - uid: 21715 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.5,-29.5 + parent: 2 + - uid: 21716 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 52.5,-28.5 + parent: 2 + - uid: 21717 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 52.5,-29.5 + parent: 2 + - uid: 21718 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 52.5,-30.5 + parent: 2 + - uid: 21719 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 51.5,-32.5 + parent: 2 + - uid: 21720 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 51.5,-33.5 + parent: 2 + - uid: 21721 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 51.5,-34.5 + parent: 2 + - uid: 21722 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 51.5,-36.5 + parent: 2 + - uid: 21723 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 51.5,-37.5 + parent: 2 + - uid: 21724 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 51.5,-38.5 + parent: 2 + - uid: 21725 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.5,-40.5 + parent: 2 + - uid: 21726 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.5,-41.5 + parent: 2 + - uid: 21727 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.5,-42.5 + parent: 2 + - uid: 21728 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 47.5,-44.5 + parent: 2 + - uid: 21729 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 47.5,-45.5 + parent: 2 + - uid: 21730 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 47.5,-46.5 + parent: 2 + - uid: 21731 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 47.5,-47.5 + parent: 2 + - uid: 21732 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 47.5,-48.5 + parent: 2 + - uid: 21733 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 49.5,-46.5 + parent: 2 + - uid: 21734 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 49.5,-45.5 + parent: 2 + - uid: 21735 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 51.5,-44.5 + parent: 2 + - uid: 21736 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 51.5,-45.5 + parent: 2 + - uid: 21737 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 51.5,-46.5 + parent: 2 + - uid: 21738 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 48.5,-50.5 + parent: 2 + - uid: 21739 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 49.5,-50.5 + parent: 2 + - uid: 21740 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.5,-50.5 + parent: 2 + - uid: 21741 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 51.5,-50.5 + parent: 2 + - uid: 21742 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 53.5,-51.5 + parent: 2 + - uid: 21743 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 54.5,-51.5 + parent: 2 + - uid: 21744 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 55.5,-51.5 + parent: 2 + - uid: 21745 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 56.5,-51.5 + parent: 2 + - uid: 21746 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,-75.5 + parent: 2 + - uid: 21747 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,-79.5 + parent: 2 + - uid: 21748 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,-78.5 + parent: 2 + - uid: 21749 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,-79.5 + parent: 2 + - uid: 21750 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,-79.5 + parent: 2 + - uid: 21751 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,-79.5 + parent: 2 + - uid: 21752 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,-79.5 + parent: 2 + - uid: 21753 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-79.5 + parent: 2 + - uid: 21754 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-79.5 + parent: 2 + - uid: 21755 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,-79.5 + parent: 2 + - uid: 21756 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-79.5 + parent: 2 + - uid: 21757 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-79.5 + parent: 2 + - uid: 21758 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,-81.5 + parent: 2 + - uid: 21759 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,-81.5 + parent: 2 + - uid: 21760 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-81.5 + parent: 2 + - uid: 21761 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-81.5 + parent: 2 + - uid: 21762 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-81.5 + parent: 2 + - uid: 21763 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,-81.5 + parent: 2 + - uid: 21764 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,-82.5 + parent: 2 + - uid: 21765 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,-83.5 + parent: 2 + - uid: 21766 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,-84.5 + parent: 2 + - uid: 21767 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-84.5 + parent: 2 + - uid: 21768 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-85.5 + parent: 2 + - uid: 21769 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-86.5 + parent: 2 + - uid: 21770 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-87.5 + parent: 2 + - uid: 21771 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-84.5 + parent: 2 + - uid: 21772 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-85.5 + parent: 2 + - uid: 21773 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-86.5 + parent: 2 + - uid: 21774 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-87.5 + parent: 2 + - uid: 21775 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-81.5 + parent: 2 + - uid: 21776 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-81.5 + parent: 2 + - uid: 21777 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,-81.5 + parent: 2 + - uid: 21778 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,-81.5 + parent: 2 + - uid: 21779 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,-81.5 + parent: 2 + - uid: 21780 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,-76.5 + parent: 2 + - uid: 21781 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,-75.5 + parent: 2 + - uid: 21782 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,-78.5 + parent: 2 + - uid: 21783 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,-78.5 + parent: 2 + - uid: 21784 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,-79.5 + parent: 2 + - uid: 21785 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,-79.5 + parent: 2 + - uid: 21786 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,-79.5 + parent: 2 + - uid: 21787 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,-79.5 + parent: 2 + - uid: 21788 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,-86.5 + parent: 2 + - uid: 21789 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,-87.5 + parent: 2 + - uid: 21790 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,-88.5 + parent: 2 + - uid: 21791 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,-89.5 + parent: 2 + - uid: 21792 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,-90.5 + parent: 2 + - uid: 21793 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,-91.5 + parent: 2 + - uid: 21794 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,28.5 + parent: 2 + - uid: 21886 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,8.5 + parent: 2 + - uid: 21887 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,8.5 + parent: 2 + - uid: 21888 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -16.5,8.5 + parent: 2 + - uid: 21889 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,8.5 + parent: 2 + - uid: 21890 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,8.5 + parent: 2 + - uid: 21903 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,9.5 + parent: 2 + - uid: 21904 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,9.5 + parent: 2 + - uid: 21905 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,10.5 + parent: 2 + - uid: 21906 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,11.5 + parent: 2 + - uid: 21907 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,12.5 + parent: 2 + - uid: 21908 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,13.5 + parent: 2 + - uid: 21909 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,13.5 + parent: 2 + - uid: 21910 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -16.5,13.5 + parent: 2 + - uid: 21911 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,13.5 + parent: 2 + - uid: 21912 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,13.5 + parent: 2 + - uid: 21996 + components: + - type: Transform + pos: 12.5,-7.5 + parent: 2 + - uid: 21997 + components: + - type: Transform + pos: 12.5,-8.5 + parent: 2 + - uid: 21998 + components: + - type: Transform + pos: 12.5,-9.5 + parent: 2 + - uid: 21999 + components: + - type: Transform + pos: 12.5,-11.5 + parent: 2 + - uid: 22000 + components: + - type: Transform + pos: 12.5,-12.5 + parent: 2 + - uid: 22007 + components: + - type: Transform + pos: 12.5,-13.5 + parent: 2 + - uid: 22008 + components: + - type: Transform + pos: 11.5,-13.5 + parent: 2 + - uid: 22009 + components: + - type: Transform + pos: 11.5,-14.5 + parent: 2 + - uid: 22010 + components: + - type: Transform + pos: 11.5,-15.5 + parent: 2 + - uid: 22011 + components: + - type: Transform + pos: 11.5,-16.5 + parent: 2 + - uid: 22012 + components: + - type: Transform + pos: 11.5,-17.5 + parent: 2 + - uid: 22013 + components: + - type: Transform + pos: 10.5,-17.5 + parent: 2 + - uid: 22014 + components: + - type: Transform + pos: 9.5,-17.5 + parent: 2 + - uid: 22015 + components: + - type: Transform + pos: 8.5,-17.5 + parent: 2 + - uid: 22016 + components: + - type: Transform + pos: 7.5,-17.5 + parent: 2 + - uid: 22017 + components: + - type: Transform + pos: 6.5,-17.5 + parent: 2 + - uid: 22018 + components: + - type: Transform + pos: 5.5,-17.5 + parent: 2 + - uid: 22019 + components: + - type: Transform + pos: 4.5,-17.5 + parent: 2 + - uid: 22020 + components: + - type: Transform + pos: 3.5,-17.5 + parent: 2 + - uid: 22030 + components: + - type: Transform + pos: 3.5,-18.5 + parent: 2 + - uid: 22031 + components: + - type: Transform + pos: 3.5,-19.5 + parent: 2 + - uid: 22032 + components: + - type: Transform + pos: 19.5,-7.5 + parent: 2 + - uid: 22033 + components: + - type: Transform + pos: 20.5,-7.5 + parent: 2 + - uid: 22039 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -41.5,-28.5 + parent: 2 + - uid: 22040 + components: + - type: Transform + pos: 21.5,-7.5 + parent: 2 + - uid: 22041 + components: + - type: Transform + pos: 21.5,-8.5 + parent: 2 + - uid: 22058 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -42.5,-28.5 + parent: 2 + - uid: 22059 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -43.5,-28.5 + parent: 2 + - uid: 22060 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -44.5,-28.5 + parent: 2 + - uid: 22061 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -45.5,-28.5 + parent: 2 + - uid: 22062 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -46.5,-28.5 + parent: 2 + - uid: 22063 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -47.5,-28.5 + parent: 2 + - uid: 22065 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -48.5,-28.5 + parent: 2 + - uid: 22066 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,-25.5 + parent: 2 + - uid: 22067 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -37.5,-25.5 + parent: 2 + - uid: 22068 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -37.5,-26.5 + parent: 2 + - uid: 22071 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -37.5,-27.5 + parent: 2 + - uid: 22072 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -37.5,-28.5 + parent: 2 + - uid: 22073 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -40.5,-29.5 + parent: 2 + - uid: 22078 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -40.5,-31.5 + parent: 2 + - uid: 22079 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -40.5,-32.5 + parent: 2 + - uid: 22080 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -40.5,-33.5 + parent: 2 + - uid: 22085 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -40.5,-34.5 + parent: 2 + - uid: 22086 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -39.5,-34.5 + parent: 2 + - uid: 22087 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -37.5,-29.5 + parent: 2 + - uid: 22088 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -37.5,-30.5 + parent: 2 + - uid: 22176 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -37.5,-31.5 + parent: 2 + - uid: 22177 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,-31.5 + parent: 2 + - uid: 22178 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,-34.5 + parent: 2 + - uid: 22179 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,-25.5 + parent: 2 + - uid: 22180 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,-25.5 + parent: 2 + - uid: 22181 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,-35.5 + parent: 2 + - uid: 22182 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,-36.5 + parent: 2 + - uid: 22187 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,-38.5 + parent: 2 + - uid: 22188 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,-39.5 + parent: 2 + - uid: 22189 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,-40.5 + parent: 2 + - uid: 22190 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -40.5,-37.5 + parent: 2 + - uid: 22191 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -40.5,-38.5 + parent: 2 + - uid: 22220 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -40.5,-39.5 + parent: 2 + - uid: 22227 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -40.5,-40.5 + parent: 2 + - uid: 22228 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -39.5,-40.5 + parent: 2 + - uid: 22229 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -38.5,-40.5 + parent: 2 + - uid: 22230 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -37.5,-40.5 + parent: 2 + - uid: 22231 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,-21.5 + parent: 2 + - uid: 22232 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,-22.5 + parent: 2 + - uid: 22233 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,-23.5 + parent: 2 + - uid: 22234 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,-24.5 + parent: 2 + - uid: 22235 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,-25.5 + parent: 2 + - uid: 22237 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,-25.5 + parent: 2 + - uid: 22238 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,-25.5 + parent: 2 + - uid: 22239 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,-25.5 + parent: 2 + - uid: 22240 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-25.5 + parent: 2 + - uid: 22241 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-25.5 + parent: 2 + - uid: 22242 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-25.5 + parent: 2 + - uid: 22243 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-24.5 + parent: 2 + - uid: 22244 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-20.5 + parent: 2 + - uid: 22245 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -43.5,-44.5 + parent: 2 + - uid: 22246 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -44.5,-44.5 + parent: 2 + - uid: 22247 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -45.5,-44.5 + parent: 2 + - uid: 22249 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -43.5,-42.5 + parent: 2 + - uid: 22250 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -45.5,-42.5 + parent: 2 + - uid: 22251 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -44.5,-37.5 + parent: 2 + - uid: 22252 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -45.5,-37.5 + parent: 2 + - uid: 22253 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -45.5,-38.5 + parent: 2 + - uid: 22254 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -45.5,-41.5 + parent: 2 + - uid: 22255 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -46.5,-37.5 + parent: 2 + - uid: 22266 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -46.5,-33.5 + parent: 2 + - uid: 22267 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -46.5,-35.5 + parent: 2 + - uid: 22268 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -47.5,-35.5 + parent: 2 + - uid: 22269 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -48.5,-35.5 + parent: 2 + - uid: 22270 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -48.5,-33.5 + parent: 2 + - uid: 22273 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -48.5,-29.5 + parent: 2 + - uid: 22274 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -44.5,-51.5 + parent: 2 + - uid: 22275 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,-42.5 + parent: 2 + - uid: 22276 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,-41.5 + parent: 2 + - uid: 22277 + components: + - type: Transform + pos: -2.5,-43.5 + parent: 2 + - uid: 22278 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,-42.5 + parent: 2 + - uid: 22279 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,-42.5 + parent: 2 + - uid: 22290 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,-53.5 + parent: 2 + - uid: 22291 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,-53.5 + parent: 2 + - uid: 22292 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,-51.5 + parent: 2 + - uid: 22293 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,-49.5 + parent: 2 + - uid: 22294 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,-49.5 + parent: 2 + - uid: 22297 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,-49.5 + parent: 2 + - uid: 22298 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,-47.5 + parent: 2 + - uid: 22299 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,-46.5 + parent: 2 + - uid: 22300 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,-45.5 + parent: 2 + - uid: 22301 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,-45.5 + parent: 2 + - uid: 22302 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,-42.5 + parent: 2 + - uid: 22303 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,-42.5 + parent: 2 + - uid: 22304 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,-42.5 + parent: 2 + - uid: 22373 + components: + - type: Transform + pos: -1.5,-43.5 + parent: 2 + - uid: 22403 + components: + - type: Transform + pos: 21.5,-9.5 + parent: 2 + - uid: 22404 + components: + - type: Transform + pos: 21.5,-10.5 + parent: 2 + - uid: 22405 + components: + - type: Transform + pos: 21.5,-11.5 + parent: 2 + - uid: 22424 + components: + - type: Transform + pos: 21.5,-12.5 + parent: 2 + - uid: 22425 + components: + - type: Transform + pos: 21.5,-13.5 + parent: 2 + - uid: 22426 + components: + - type: Transform + pos: 21.5,-14.5 + parent: 2 + - uid: 22427 + components: + - type: Transform + pos: 27.5,-14.5 + parent: 2 + - uid: 22428 + components: + - type: Transform + pos: 27.5,-13.5 + parent: 2 + - uid: 22429 + components: + - type: Transform + pos: 28.5,-13.5 + parent: 2 + - uid: 22446 + components: + - type: Transform + pos: 29.5,-13.5 + parent: 2 + - uid: 22447 + components: + - type: Transform + pos: 30.5,-13.5 + parent: 2 + - uid: 22448 + components: + - type: Transform + pos: 31.5,-13.5 + parent: 2 + - uid: 22451 + components: + - type: Transform + pos: 32.5,-13.5 + parent: 2 + - uid: 22452 + components: + - type: Transform + pos: 33.5,-13.5 + parent: 2 + - uid: 22453 + components: + - type: Transform + pos: 34.5,-13.5 + parent: 2 + - uid: 22454 + components: + - type: Transform + pos: 35.5,-13.5 + parent: 2 + - uid: 22682 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,30.5 + parent: 2 + - uid: 22759 + components: + - type: Transform + pos: 39.5,-13.5 + parent: 2 + - uid: 22760 + components: + - type: Transform + pos: 40.5,-13.5 + parent: 2 + - uid: 22761 + components: + - type: Transform + pos: 41.5,-13.5 + parent: 2 + - uid: 22762 + components: + - type: Transform + pos: 47.5,-20.5 + parent: 2 + - uid: 22763 + components: + - type: Transform + pos: 47.5,-21.5 + parent: 2 + - uid: 22764 + components: + - type: Transform + pos: 47.5,-25.5 + parent: 2 + - uid: 22765 + components: + - type: Transform + pos: 33.5,-32.5 + parent: 2 + - uid: 22784 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,21.5 + parent: 2 + - uid: 22846 + components: + - type: Transform + pos: 9.5,28.5 + parent: 2 + - uid: 22847 + components: + - type: Transform + pos: 12.5,45.5 + parent: 2 + - uid: 22848 + components: + - type: Transform + pos: -15.5,17.5 + parent: 2 + - uid: 22849 + components: + - type: Transform + pos: -14.5,17.5 + parent: 2 + - uid: 22881 + components: + - type: Transform + pos: 33.5,-31.5 + parent: 2 + - uid: 22882 + components: + - type: Transform + pos: 33.5,-30.5 + parent: 2 + - uid: 22883 + components: + - type: Transform + pos: 33.5,-29.5 + parent: 2 + - uid: 22887 + components: + - type: Transform + pos: 33.5,-28.5 + parent: 2 + - uid: 22888 + components: + - type: Transform + pos: 33.5,-27.5 + parent: 2 + - uid: 22889 + components: + - type: Transform + pos: 33.5,-26.5 + parent: 2 + - uid: 22890 + components: + - type: Transform + pos: 32.5,-32.5 + parent: 2 + - uid: 22891 + components: + - type: Transform + pos: 31.5,-32.5 + parent: 2 + - uid: 22892 + components: + - type: Transform + pos: 30.5,-32.5 + parent: 2 + - uid: 22893 + components: + - type: Transform + pos: 29.5,-32.5 + parent: 2 + - uid: 22894 + components: + - type: Transform + pos: 29.5,-33.5 + parent: 2 + - uid: 22895 + components: + - type: Transform + pos: 28.5,-33.5 + parent: 2 + - uid: 22896 + components: + - type: Transform + pos: 26.5,-33.5 + parent: 2 + - uid: 22897 + components: + - type: Transform + pos: 25.5,-33.5 + parent: 2 + - uid: 22898 + components: + - type: Transform + pos: 24.5,-33.5 + parent: 2 + - uid: 22899 + components: + - type: Transform + pos: 23.5,-33.5 + parent: 2 + - uid: 22900 + components: + - type: Transform + pos: 21.5,-33.5 + parent: 2 + - uid: 22901 + components: + - type: Transform + pos: 20.5,-33.5 + parent: 2 + - uid: 22902 + components: + - type: Transform + pos: 19.5,-33.5 + parent: 2 + - uid: 22919 + components: + - type: Transform + pos: 18.5,-33.5 + parent: 2 + - uid: 22920 + components: + - type: Transform + pos: 17.5,-33.5 + parent: 2 + - uid: 22921 + components: + - type: Transform + pos: 16.5,-33.5 + parent: 2 + - uid: 22922 + components: + - type: Transform + pos: 15.5,-33.5 + parent: 2 + - uid: 22923 + components: + - type: Transform + pos: 4.5,-33.5 + parent: 2 + - uid: 22924 + components: + - type: Transform + pos: 3.5,-33.5 + parent: 2 + - uid: 22925 + components: + - type: Transform + pos: 3.5,-32.5 + parent: 2 + - uid: 22926 + components: + - type: Transform + pos: 3.5,-31.5 + parent: 2 + - uid: 22929 + components: + - type: Transform + pos: 3.5,-30.5 + parent: 2 + - uid: 22930 + components: + - type: Transform + pos: 3.5,-29.5 + parent: 2 + - uid: 22931 + components: + - type: Transform + pos: 3.5,-28.5 + parent: 2 + - uid: 22932 + components: + - type: Transform + pos: 6.5,-33.5 + parent: 2 + - uid: 22933 + components: + - type: Transform + pos: 7.5,-33.5 + parent: 2 + - uid: 22934 + components: + - type: Transform + pos: 8.5,-33.5 + parent: 2 + - uid: 22935 + components: + - type: Transform + pos: 9.5,-33.5 + parent: 2 + - uid: 22936 + components: + - type: Transform + pos: 10.5,-33.5 + parent: 2 + - uid: 22937 + components: + - type: Transform + pos: 11.5,-33.5 + parent: 2 + - uid: 22938 + components: + - type: Transform + pos: 11.5,-28.5 + parent: 2 + - uid: 22939 + components: + - type: Transform + pos: 3.5,-20.5 + parent: 2 + - uid: 22940 + components: + - type: Transform + pos: 7.5,-20.5 + parent: 2 + - uid: 22941 + components: + - type: Transform + pos: 11.5,-20.5 + parent: 2 + - uid: 22942 + components: + - type: Transform + pos: 11.5,-21.5 + parent: 2 + - uid: 22944 + components: + - type: Transform + pos: 11.5,-22.5 + parent: 2 + - uid: 22946 + components: + - type: Transform + pos: 11.5,-26.5 + parent: 2 + - uid: 22947 + components: + - type: Transform + pos: 11.5,-27.5 + parent: 2 + - uid: 22952 + components: + - type: Transform + pos: 14.5,-33.5 + parent: 2 + - uid: 22953 + components: + - type: Transform + pos: 13.5,-33.5 + parent: 2 + - uid: 23467 + components: + - type: Transform + pos: -13.5,17.5 + parent: 2 + - uid: 23489 + components: + - type: Transform + pos: -7.5,17.5 + parent: 2 + - uid: 24027 + components: + - type: Transform + pos: -8.5,17.5 + parent: 2 + - uid: 24028 + components: + - type: Transform + pos: -1.5,17.5 + parent: 2 + - uid: 24029 + components: + - type: Transform + pos: -2.5,17.5 + parent: 2 + - uid: 24033 + components: + - type: Transform + pos: -3.5,17.5 + parent: 2 + - uid: 24034 + components: + - type: Transform + pos: -4.5,17.5 + parent: 2 + - uid: 24035 + components: + - type: Transform + pos: -5.5,17.5 + parent: 2 + - uid: 24036 + components: + - type: Transform + pos: -6.5,17.5 + parent: 2 + - uid: 24037 + components: + - type: Transform + pos: 10.5,28.5 + parent: 2 + - uid: 24038 + components: + - type: Transform + pos: 15.5,28.5 + parent: 2 + - uid: 24039 + components: + - type: Transform + pos: 16.5,28.5 + parent: 2 + - uid: 24040 + components: + - type: Transform + pos: 16.5,29.5 + parent: 2 + - uid: 24041 + components: + - type: Transform + pos: 16.5,30.5 + parent: 2 + - uid: 24042 + components: + - type: Transform + pos: 16.5,31.5 + parent: 2 + - uid: 24043 + components: + - type: Transform + pos: 16.5,32.5 + parent: 2 + - uid: 24044 + components: + - type: Transform + pos: 12.5,37.5 + parent: 2 + - uid: 24045 + components: + - type: Transform + pos: 12.5,41.5 + parent: 2 + - uid: 24046 + components: + - type: Transform + pos: 12.5,40.5 + parent: 2 + - uid: 24047 + components: + - type: Transform + pos: 12.5,39.5 + parent: 2 + - uid: 24048 + components: + - type: Transform + pos: 12.5,38.5 + parent: 2 + - uid: 24049 + components: + - type: Transform + pos: 12.5,34.5 + parent: 2 + - uid: 24050 + components: + - type: Transform + pos: 12.5,33.5 + parent: 2 + - uid: 24051 + components: + - type: Transform + pos: 12.5,32.5 + parent: 2 + - uid: 24052 + components: + - type: Transform + pos: 14.5,32.5 + parent: 2 + - uid: 24053 + components: + - type: Transform + pos: 14.5,33.5 + parent: 2 + - uid: 24054 + components: + - type: Transform + pos: 12.5,42.5 + parent: 2 + - uid: 24055 + components: + - type: Transform + pos: 12.5,44.5 + parent: 2 + - uid: 24056 + components: + - type: Transform + pos: -6.5,41.5 + parent: 2 + - uid: 24057 + components: + - type: Transform + pos: -5.5,41.5 + parent: 2 + - uid: 24058 + components: + - type: Transform + pos: -3.5,41.5 + parent: 2 + - uid: 24059 + components: + - type: Transform + pos: -2.5,41.5 + parent: 2 + - uid: 24060 + components: + - type: Transform + pos: -1.5,41.5 + parent: 2 + - uid: 24061 + components: + - type: Transform + pos: -1.5,40.5 + parent: 2 + - uid: 24062 + components: + - type: Transform + pos: -1.5,39.5 + parent: 2 + - uid: 24063 + components: + - type: Transform + pos: -1.5,46.5 + parent: 2 + - uid: 24064 + components: + - type: Transform + pos: -2.5,46.5 + parent: 2 + - uid: 24065 + components: + - type: Transform + pos: -1.5,47.5 + parent: 2 + - uid: 24066 + components: + - type: Transform + pos: -1.5,48.5 + parent: 2 + - uid: 24067 + components: + - type: Transform + pos: -1.5,49.5 + parent: 2 +- proto: WallRiveted + entities: + - uid: 21795 + components: + - type: Transform + pos: -83.5,-52.5 + parent: 2 +- proto: WallSolid + entities: + - uid: 5947 + components: + - type: Transform + pos: 33.5,-46.5 + parent: 2 + - uid: 19029 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,15.5 + parent: 2 + - uid: 21796 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,-53.5 + parent: 2 + - uid: 21797 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,-61.5 + parent: 2 + - uid: 21798 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,-61.5 + parent: 2 + - uid: 21799 + components: + - type: Transform + pos: 48.5,-40.5 + parent: 2 + - uid: 21800 + components: + - type: Transform + pos: 33.5,-52.5 + parent: 2 + - uid: 21801 + components: + - type: Transform + pos: -1.5,12.5 + parent: 2 + - uid: 21802 + components: + - type: Transform + pos: -4.5,12.5 + parent: 2 + - uid: 21803 + components: + - type: Transform + pos: -4.5,11.5 + parent: 2 + - uid: 21804 + components: + - type: Transform + pos: -5.5,11.5 + parent: 2 + - uid: 21805 + components: + - type: Transform + pos: -5.5,10.5 + parent: 2 + - uid: 21806 + components: + - type: Transform + pos: -6.5,10.5 + parent: 2 + - uid: 21807 + components: + - type: Transform + pos: -7.5,10.5 + parent: 2 + - uid: 21808 + components: + - type: Transform + pos: -8.5,10.5 + parent: 2 + - uid: 21809 + components: + - type: Transform + pos: -8.5,7.5 + parent: 2 + - uid: 21810 + components: + - type: Transform + pos: -9.5,7.5 + parent: 2 + - uid: 21811 + components: + - type: Transform + pos: -9.5,6.5 + parent: 2 + - uid: 21812 + components: + - type: Transform + pos: -10.5,6.5 + parent: 2 + - uid: 21813 + components: + - type: Transform + pos: -10.5,3.5 + parent: 2 + - uid: 21814 + components: + - type: Transform + pos: -10.5,-1.5 + parent: 2 + - uid: 21815 + components: + - type: Transform + pos: -10.5,-2.5 + parent: 2 + - uid: 21816 + components: + - type: Transform + pos: -10.5,-3.5 + parent: 2 + - uid: 21817 + components: + - type: Transform + pos: -10.5,-4.5 + parent: 2 + - uid: 21818 + components: + - type: Transform + pos: -9.5,-4.5 + parent: 2 + - uid: 21819 + components: + - type: Transform + pos: -9.5,-5.5 + parent: 2 + - uid: 21820 + components: + - type: Transform + pos: -8.5,-5.5 + parent: 2 + - uid: 21821 + components: + - type: Transform + pos: -8.5,-6.5 + parent: 2 + - uid: 21822 + components: + - type: Transform + pos: -8.5,-7.5 + parent: 2 + - uid: 21823 + components: + - type: Transform + pos: -8.5,-8.5 + parent: 2 + - uid: 21824 + components: + - type: Transform + pos: -7.5,-8.5 + parent: 2 + - uid: 21825 + components: + - type: Transform + pos: -1.5,-10.5 + parent: 2 + - uid: 21826 + components: + - type: Transform + pos: -5.5,-8.5 + parent: 2 + - uid: 21827 + components: + - type: Transform + pos: -5.5,-9.5 + parent: 2 + - uid: 21828 + components: + - type: Transform + pos: -4.5,-9.5 + parent: 2 + - uid: 21829 + components: + - type: Transform + pos: -4.5,-10.5 + parent: 2 + - uid: 21830 + components: + - type: Transform + pos: 3.5,-10.5 + parent: 2 + - uid: 21831 + components: + - type: Transform + pos: 4.5,-10.5 + parent: 2 + - uid: 21832 + components: + - type: Transform + pos: 5.5,-10.5 + parent: 2 + - uid: 21833 + components: + - type: Transform + pos: 6.5,-10.5 + parent: 2 + - uid: 21834 + components: + - type: Transform + pos: 6.5,-9.5 + parent: 2 + - uid: 21835 + components: + - type: Transform + pos: 7.5,-9.5 + parent: 2 + - uid: 21836 + components: + - type: Transform + pos: 7.5,-8.5 + parent: 2 + - uid: 21837 + components: + - type: Transform + pos: 9.5,-8.5 + parent: 2 + - uid: 21838 + components: + - type: Transform + pos: 10.5,-8.5 + parent: 2 + - uid: 21839 + components: + - type: Transform + pos: 10.5,-7.5 + parent: 2 + - uid: 21840 + components: + - type: Transform + pos: 10.5,-5.5 + parent: 2 + - uid: 21841 + components: + - type: Transform + pos: 11.5,-5.5 + parent: 2 + - uid: 21842 + components: + - type: Transform + pos: 11.5,-4.5 + parent: 2 + - uid: 21843 + components: + - type: Transform + pos: 12.5,-4.5 + parent: 2 + - uid: 21844 + components: + - type: Transform + pos: 12.5,-3.5 + parent: 2 + - uid: 21845 + components: + - type: Transform + pos: 12.5,-2.5 + parent: 2 + - uid: 21846 + components: + - type: Transform + pos: 12.5,-1.5 + parent: 2 + - uid: 21847 + components: + - type: Transform + pos: 12.5,3.5 + parent: 2 + - uid: 21848 + components: + - type: Transform + pos: 12.5,4.5 + parent: 2 + - uid: 21849 + components: + - type: Transform + pos: 12.5,5.5 + parent: 2 + - uid: 21850 + components: + - type: Transform + pos: 12.5,6.5 + parent: 2 + - uid: 21851 + components: + - type: Transform + pos: 11.5,6.5 + parent: 2 + - uid: 21852 + components: + - type: Transform + pos: 11.5,7.5 + parent: 2 + - uid: 21853 + components: + - type: Transform + pos: 10.5,7.5 + parent: 2 + - uid: 21854 + components: + - type: Transform + pos: 10.5,9.5 + parent: 2 + - uid: 21855 + components: + - type: Transform + pos: 10.5,10.5 + parent: 2 + - uid: 21856 + components: + - type: Transform + pos: 9.5,10.5 + parent: 2 + - uid: 21857 + components: + - type: Transform + pos: 7.5,10.5 + parent: 2 + - uid: 21858 + components: + - type: Transform + pos: 7.5,11.5 + parent: 2 + - uid: 21859 + components: + - type: Transform + pos: 6.5,11.5 + parent: 2 + - uid: 21860 + components: + - type: Transform + pos: 6.5,12.5 + parent: 2 + - uid: 21861 + components: + - type: Transform + pos: 3.5,12.5 + parent: 2 + - uid: 21862 + components: + - type: Transform + pos: -1.5,-11.5 + parent: 2 + - uid: 21863 + components: + - type: Transform + pos: 3.5,-11.5 + parent: 2 + - uid: 21864 + components: + - type: Transform + pos: 13.5,-1.5 + parent: 2 + - uid: 21865 + components: + - type: Transform + pos: 13.5,3.5 + parent: 2 + - uid: 21866 + components: + - type: Transform + pos: 3.5,13.5 + parent: 2 + - uid: 21867 + components: + - type: Transform + pos: -1.5,13.5 + parent: 2 + - uid: 21868 + components: + - type: Transform + pos: -11.5,3.5 + parent: 2 + - uid: 21869 + components: + - type: Transform + pos: -11.5,-1.5 + parent: 2 + - uid: 21870 + components: + - type: Transform + pos: -12.5,3.5 + parent: 2 + - uid: 21871 + components: + - type: Transform + pos: -13.5,3.5 + parent: 2 + - uid: 21872 + components: + - type: Transform + pos: -14.5,3.5 + parent: 2 + - uid: 21873 + components: + - type: Transform + pos: -10.5,7.5 + parent: 2 + - uid: 21874 + components: + - type: Transform + pos: -11.5,7.5 + parent: 2 + - uid: 21875 + components: + - type: Transform + pos: -12.5,7.5 + parent: 2 + - uid: 21876 + components: + - type: Transform + pos: -13.5,7.5 + parent: 2 + - uid: 21877 + components: + - type: Transform + pos: -14.5,7.5 + parent: 2 + - uid: 21878 + components: + - type: Transform + pos: -14.5,6.5 + parent: 2 + - uid: 21879 + components: + - type: Transform + pos: -14.5,5.5 + parent: 2 + - uid: 21880 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,3.5 + parent: 2 + - uid: 21881 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -17.5,3.5 + parent: 2 + - uid: 21882 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -18.5,3.5 + parent: 2 + - uid: 21883 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -18.5,4.5 + parent: 2 + - uid: 21884 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -18.5,5.5 + parent: 2 + - uid: 21885 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -18.5,7.5 + parent: 2 + - uid: 21891 + components: + - type: Transform + pos: -12.5,-1.5 + parent: 2 + - uid: 21892 + components: + - type: Transform + pos: -13.5,-1.5 + parent: 2 + - uid: 21893 + components: + - type: Transform + pos: -14.5,-1.5 + parent: 2 + - uid: 21894 + components: + - type: Transform + pos: -16.5,-1.5 + parent: 2 + - uid: 21895 + components: + - type: Transform + pos: -17.5,-1.5 + parent: 2 + - uid: 21896 + components: + - type: Transform + pos: -18.5,-1.5 + parent: 2 + - uid: 21897 + components: + - type: Transform + pos: -18.5,-2.5 + parent: 2 + - uid: 21898 + components: + - type: Transform + pos: -18.5,-4.5 + parent: 2 + - uid: 21899 + components: + - type: Transform + pos: -18.5,-6.5 + parent: 2 + - uid: 21900 + components: + - type: Transform + pos: -15.5,-7.5 + parent: 2 + - uid: 21901 + components: + - type: Transform + pos: -14.5,-7.5 + parent: 2 + - uid: 21902 + components: + - type: Transform + pos: -13.5,-7.5 + parent: 2 + - uid: 21913 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,14.5 + parent: 2 + - uid: 21914 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,15.5 + parent: 2 + - uid: 21915 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,16.5 + parent: 2 + - uid: 21919 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,11.5 + parent: 2 + - uid: 21920 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,12.5 + parent: 2 + - uid: 21921 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,13.5 + parent: 2 + - uid: 21922 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,13.5 + parent: 2 + - uid: 21923 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,14.5 + parent: 2 + - uid: 21924 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,16.5 + parent: 2 + - uid: 21927 + components: + - type: Transform + pos: -6.5,13.5 + parent: 2 + - uid: 21928 + components: + - type: Transform + pos: -5.5,13.5 + parent: 2 + - uid: 21929 + components: + - type: Transform + pos: -5.5,12.5 + parent: 2 + - uid: 21930 + components: + - type: Transform + pos: -1.5,14.5 + parent: 2 + - uid: 21931 + components: + - type: Transform + pos: -1.5,15.5 + parent: 2 + - uid: 21932 + components: + - type: Transform + pos: -1.5,16.5 + parent: 2 + - uid: 21939 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,14.5 + parent: 2 + - uid: 21940 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,15.5 + parent: 2 + - uid: 21941 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,20.5 + parent: 2 + - uid: 21942 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,20.5 + parent: 2 + - uid: 21943 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,20.5 + parent: 2 + - uid: 21944 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,20.5 + parent: 2 + - uid: 21945 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,20.5 + parent: 2 + - uid: 21946 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,20.5 + parent: 2 + - uid: 21947 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,13.5 + parent: 2 + - uid: 21948 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,14.5 + parent: 2 + - uid: 21949 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,14.5 + parent: 2 + - uid: 21950 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,14.5 + parent: 2 + - uid: 21951 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,15.5 + parent: 2 + - uid: 21952 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,16.5 + parent: 2 + - uid: 21953 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,20.5 + parent: 2 + - uid: 21954 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,20.5 + parent: 2 + - uid: 21955 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,20.5 + parent: 2 + - uid: 21956 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,19.5 + parent: 2 + - uid: 21957 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,17.5 + parent: 2 + - uid: 21958 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,16.5 + parent: 2 + - uid: 21959 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,16.5 + parent: 2 + - uid: 21960 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,16.5 + parent: 2 + - uid: 21961 + components: + - type: Transform + pos: 11.5,10.5 + parent: 2 + - uid: 21962 + components: + - type: Transform + pos: 11.5,11.5 + parent: 2 + - uid: 21963 + components: + - type: Transform + pos: 11.5,15.5 + parent: 2 + - uid: 21964 + components: + - type: Transform + pos: 11.5,12.5 + parent: 2 + - uid: 21965 + components: + - type: Transform + pos: 11.5,13.5 + parent: 2 + - uid: 21966 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,3.5 + parent: 2 + - uid: 21967 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 16.5,3.5 + parent: 2 + - uid: 21968 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 17.5,3.5 + parent: 2 + - uid: 21969 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,-1.5 + parent: 2 + - uid: 21970 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,-1.5 + parent: 2 + - uid: 21971 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 17.5,-1.5 + parent: 2 + - uid: 21972 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 17.5,4.5 + parent: 2 + - uid: 21973 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 17.5,5.5 + parent: 2 + - uid: 21974 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 16.5,5.5 + parent: 2 + - uid: 21975 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,5.5 + parent: 2 + - uid: 21976 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,6.5 + parent: 2 + - uid: 21977 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,7.5 + parent: 2 + - uid: 21978 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,8.5 + parent: 2 + - uid: 21979 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,9.5 + parent: 2 + - uid: 21980 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,10.5 + parent: 2 + - uid: 21981 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.5,10.5 + parent: 2 + - uid: 21982 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.5,16.5 + parent: 2 + - uid: 21983 + components: + - type: Transform + pos: 14.5,12.5 + parent: 2 + - uid: 21984 + components: + - type: Transform + pos: 14.5,13.5 + parent: 2 + - uid: 21985 + components: + - type: Transform + pos: 14.5,14.5 + parent: 2 + - uid: 21986 + components: + - type: Transform + pos: 14.5,15.5 + parent: 2 + - uid: 21987 + components: + - type: Transform + pos: 14.5,16.5 + parent: 2 + - uid: 21988 + components: + - type: Transform + pos: 12.5,-5.5 + parent: 2 + - uid: 21989 + components: + - type: Transform + pos: 13.5,-5.5 + parent: 2 + - uid: 21990 + components: + - type: Transform + pos: 14.5,-5.5 + parent: 2 + - uid: 21991 + components: + - type: Transform + pos: 15.5,-5.5 + parent: 2 + - uid: 21992 + components: + - type: Transform + pos: 17.5,-2.5 + parent: 2 + - uid: 21993 + components: + - type: Transform + pos: 17.5,-4.5 + parent: 2 + - uid: 21994 + components: + - type: Transform + pos: 17.5,-5.5 + parent: 2 + - uid: 21995 + components: + - type: Transform + pos: 17.5,-6.5 + parent: 2 + - uid: 22001 + components: + - type: Transform + pos: 10.5,-9.5 + parent: 2 + - uid: 22002 + components: + - type: Transform + pos: 10.5,-11.5 + parent: 2 + - uid: 22003 + components: + - type: Transform + pos: 9.5,-11.5 + parent: 2 + - uid: 22004 + components: + - type: Transform + pos: 8.5,-11.5 + parent: 2 + - uid: 22005 + components: + - type: Transform + pos: 7.5,-11.5 + parent: 2 + - uid: 22006 + components: + - type: Transform + pos: 7.5,-10.5 + parent: 2 + - uid: 22021 + components: + - type: Transform + pos: 7.5,-12.5 + parent: 2 + - uid: 22022 + components: + - type: Transform + pos: 7.5,-13.5 + parent: 2 + - uid: 22023 + components: + - type: Transform + pos: 7.5,-14.5 + parent: 2 + - uid: 22024 + components: + - type: Transform + pos: 3.5,-12.5 + parent: 2 + - uid: 22025 + components: + - type: Transform + pos: 3.5,-13.5 + parent: 2 + - uid: 22026 + components: + - type: Transform + pos: 3.5,-14.5 + parent: 2 + - uid: 22027 + components: + - type: Transform + pos: 4.5,-14.5 + parent: 2 + - uid: 22028 + components: + - type: Transform + pos: 6.5,-14.5 + parent: 2 + - uid: 22029 + components: + - type: Transform + pos: 3.5,-15.5 + parent: 2 + - uid: 22034 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-12.5 + parent: 2 + - uid: 22035 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-13.5 + parent: 2 + - uid: 22036 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-15.5 + parent: 2 + - uid: 22037 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-16.5 + parent: 2 + - uid: 22038 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-18.5 + parent: 2 + - uid: 22042 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,-10.5 + parent: 2 + - uid: 22043 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,-11.5 + parent: 2 + - uid: 22044 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,-12.5 + parent: 2 + - uid: 22045 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,-14.5 + parent: 2 + - uid: 22046 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,-15.5 + parent: 2 + - uid: 22047 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,-15.5 + parent: 2 + - uid: 22048 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,-15.5 + parent: 2 + - uid: 22049 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,-15.5 + parent: 2 + - uid: 22050 + components: + - type: Transform + pos: -8.5,-15.5 + parent: 2 + - uid: 22051 + components: + - type: Transform + pos: -9.5,-14.5 + parent: 2 + - uid: 22052 + components: + - type: Transform + pos: -9.5,-12.5 + parent: 2 + - uid: 22053 + components: + - type: Transform + pos: -6.5,-11.5 + parent: 2 + - uid: 22054 + components: + - type: Transform + pos: -8.5,-10.5 + parent: 2 + - uid: 22055 + components: + - type: Transform + pos: -10.5,-11.5 + parent: 2 + - uid: 22056 + components: + - type: Transform + pos: -13.5,-11.5 + parent: 2 + - uid: 22057 + components: + - type: Transform + pos: -14.5,-10.5 + parent: 2 + - uid: 22064 + components: + - type: Transform + pos: -7.5,-18.5 + parent: 2 + - uid: 22069 + components: + - type: Transform + pos: -11.5,-17.5 + parent: 2 + - uid: 22070 + components: + - type: Transform + pos: -8.5,-17.5 + parent: 2 + - uid: 22074 + components: + - type: Transform + pos: -16.5,-14.5 + parent: 2 + - uid: 22075 + components: + - type: Transform + pos: -15.5,-14.5 + parent: 2 + - uid: 22076 + components: + - type: Transform + pos: -11.5,-14.5 + parent: 2 + - uid: 22077 + components: + - type: Transform + pos: -16.5,-11.5 + parent: 2 + - uid: 22081 + components: + - type: Transform + pos: -21.5,-14.5 + parent: 2 + - uid: 22082 + components: + - type: Transform + pos: -21.5,-12.5 + parent: 2 + - uid: 22083 + components: + - type: Transform + pos: -21.5,-10.5 + parent: 2 + - uid: 22084 + components: + - type: Transform + pos: -17.5,-10.5 + parent: 2 + - uid: 22089 + components: + - type: Transform + pos: -25.5,-14.5 + parent: 2 + - uid: 22090 + components: + - type: Transform + pos: -25.5,-13.5 + parent: 2 + - uid: 22091 + components: + - type: Transform + pos: -25.5,-12.5 + parent: 2 + - uid: 22092 + components: + - type: Transform + pos: -25.5,-11.5 + parent: 2 + - uid: 22093 + components: + - type: Transform + pos: -25.5,-10.5 + parent: 2 + - uid: 22094 + components: + - type: Transform + pos: -24.5,-10.5 + parent: 2 + - uid: 22095 + components: + - type: Transform + pos: -25.5,-7.5 + parent: 2 + - uid: 22096 + components: + - type: Transform + pos: -23.5,-7.5 + parent: 2 + - uid: 22097 + components: + - type: Transform + pos: -21.5,-7.5 + parent: 2 + - uid: 22098 + components: + - type: Transform + pos: -22.5,-1.5 + parent: 2 + - uid: 22099 + components: + - type: Transform + pos: -19.5,-1.5 + parent: 2 + - uid: 22100 + components: + - type: Transform + pos: -27.5,-9.5 + parent: 2 + - uid: 22101 + components: + - type: Transform + pos: -28.5,-9.5 + parent: 2 + - uid: 22102 + components: + - type: Transform + pos: -29.5,-9.5 + parent: 2 + - uid: 22103 + components: + - type: Transform + pos: -30.5,-9.5 + parent: 2 + - uid: 22104 + components: + - type: Transform + pos: -31.5,-9.5 + parent: 2 + - uid: 22105 + components: + - type: Transform + pos: -26.5,-7.5 + parent: 2 + - uid: 22106 + components: + - type: Transform + pos: -28.5,-7.5 + parent: 2 + - uid: 22107 + components: + - type: Transform + pos: -30.5,-7.5 + parent: 2 + - uid: 22108 + components: + - type: Transform + pos: -31.5,-7.5 + parent: 2 + - uid: 22109 + components: + - type: Transform + pos: -31.5,-6.5 + parent: 2 + - uid: 22110 + components: + - type: Transform + pos: -31.5,-1.5 + parent: 2 + - uid: 22111 + components: + - type: Transform + pos: -31.5,-2.5 + parent: 2 + - uid: 22112 + components: + - type: Transform + pos: -30.5,-1.5 + parent: 2 + - uid: 22113 + components: + - type: Transform + pos: -28.5,-1.5 + parent: 2 + - uid: 22114 + components: + - type: Transform + pos: -23.5,-1.5 + parent: 2 + - uid: 22115 + components: + - type: Transform + pos: -23.5,-5.5 + parent: 2 + - uid: 22116 + components: + - type: Transform + pos: 15.5,-4.5 + parent: 2 + - uid: 22117 + components: + - type: Transform + pos: 15.5,-2.5 + parent: 2 + - uid: 22118 + components: + - type: Transform + pos: -19.5,3.5 + parent: 2 + - uid: 22119 + components: + - type: Transform + pos: -21.5,3.5 + parent: 2 + - uid: 22120 + components: + - type: Transform + pos: -24.5,9.5 + parent: 2 + - uid: 22121 + components: + - type: Transform + pos: -23.5,13.5 + parent: 2 + - uid: 22122 + components: + - type: Transform + pos: -22.5,13.5 + parent: 2 + - uid: 22123 + components: + - type: Transform + pos: -19.5,13.5 + parent: 2 + - uid: 22124 + components: + - type: Transform + pos: -21.5,13.5 + parent: 2 + - uid: 22125 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,14.5 + parent: 2 + - uid: 22126 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,14.5 + parent: 2 + - uid: 22127 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,14.5 + parent: 2 + - uid: 22128 + components: + - type: Transform + pos: -35.5,2.5 + parent: 2 + - uid: 22129 + components: + - type: Transform + pos: -35.5,3.5 + parent: 2 + - uid: 22130 + components: + - type: Transform + pos: -35.5,4.5 + parent: 2 + - uid: 22131 + components: + - type: Transform + pos: -35.5,5.5 + parent: 2 + - uid: 22132 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,5.5 + parent: 2 + - uid: 22133 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -40.5,5.5 + parent: 2 + - uid: 22134 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -41.5,5.5 + parent: 2 + - uid: 22135 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -42.5,5.5 + parent: 2 + - uid: 22136 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -43.5,5.5 + parent: 2 + - uid: 22137 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -45.5,5.5 + parent: 2 + - uid: 22138 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -45.5,6.5 + parent: 2 + - uid: 22139 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -45.5,7.5 + parent: 2 + - uid: 22140 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -45.5,12.5 + parent: 2 + - uid: 22141 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -45.5,13.5 + parent: 2 + - uid: 22142 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,-4.5 + parent: 2 + - uid: 22143 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,-5.5 + parent: 2 + - uid: 22144 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,-6.5 + parent: 2 + - uid: 22145 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,-6.5 + parent: 2 + - uid: 22146 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -40.5,-6.5 + parent: 2 + - uid: 22147 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -41.5,-6.5 + parent: 2 + - uid: 22148 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -42.5,-6.5 + parent: 2 + - uid: 22149 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -43.5,-6.5 + parent: 2 + - uid: 22150 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -44.5,-6.5 + parent: 2 + - uid: 22151 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -45.5,-6.5 + parent: 2 + - uid: 22152 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -43.5,-0.5 + parent: 2 + - uid: 22153 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -44.5,-0.5 + parent: 2 + - uid: 22154 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -45.5,-0.5 + parent: 2 + - uid: 22155 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -45.5,-7.5 + parent: 2 + - uid: 22156 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -41.5,-7.5 + parent: 2 + - uid: 22157 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,-7.5 + parent: 2 + - uid: 22158 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,-9.5 + parent: 2 + - uid: 22159 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,-10.5 + parent: 2 + - uid: 22160 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,-11.5 + parent: 2 + - uid: 22161 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,-12.5 + parent: 2 + - uid: 22162 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,-13.5 + parent: 2 + - uid: 22163 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,-14.5 + parent: 2 + - uid: 22164 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,-14.5 + parent: 2 + - uid: 22165 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -38.5,-14.5 + parent: 2 + - uid: 22166 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -39.5,-14.5 + parent: 2 + - uid: 22167 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -40.5,-14.5 + parent: 2 + - uid: 22168 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -41.5,-14.5 + parent: 2 + - uid: 22169 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -42.5,-14.5 + parent: 2 + - uid: 22170 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -43.5,-14.5 + parent: 2 + - uid: 22171 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -44.5,-14.5 + parent: 2 + - uid: 22172 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -45.5,-14.5 + parent: 2 + - uid: 22173 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -41.5,-13.5 + parent: 2 + - uid: 22174 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -45.5,-13.5 + parent: 2 + - uid: 22175 + components: + - type: Transform + pos: -31.5,-10.5 + parent: 2 + - uid: 22183 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -39.5,-15.5 + parent: 2 + - uid: 22184 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -45.5,14.5 + parent: 2 + - uid: 22185 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -45.5,15.5 + parent: 2 + - uid: 22186 + components: + - type: Transform + pos: -40.5,15.5 + parent: 2 + - uid: 22192 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,-19.5 + parent: 2 + - uid: 22193 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,-19.5 + parent: 2 + - uid: 22194 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,-18.5 + parent: 2 + - uid: 22195 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,-16.5 + parent: 2 + - uid: 22196 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -35.5,-15.5 + parent: 2 + - uid: 22197 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -35.5,-16.5 + parent: 2 + - uid: 22198 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -35.5,-17.5 + parent: 2 + - uid: 22199 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -35.5,-18.5 + parent: 2 + - uid: 22200 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -35.5,-20.5 + parent: 2 + - uid: 22201 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -35.5,-21.5 + parent: 2 + - uid: 22202 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,-21.5 + parent: 2 + - uid: 22203 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,-21.5 + parent: 2 + - uid: 22204 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -39.5,-21.5 + parent: 2 + - uid: 22205 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -39.5,-20.5 + parent: 2 + - uid: 22206 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -46.5,-14.5 + parent: 2 + - uid: 22207 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -47.5,-14.5 + parent: 2 + - uid: 22208 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -48.5,-14.5 + parent: 2 + - uid: 22209 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -49.5,-14.5 + parent: 2 + - uid: 22210 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -39.5,-22.5 + parent: 2 + - uid: 22211 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -39.5,-24.5 + parent: 2 + - uid: 22212 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -42.5,-24.5 + parent: 2 + - uid: 22213 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -44.5,-24.5 + parent: 2 + - uid: 22214 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -45.5,-24.5 + parent: 2 + - uid: 22215 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -46.5,-24.5 + parent: 2 + - uid: 22216 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -48.5,-24.5 + parent: 2 + - uid: 22217 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -49.5,-24.5 + parent: 2 + - uid: 22218 + components: + - type: Transform + pos: -35.5,-23.5 + parent: 2 + - uid: 22219 + components: + - type: Transform + pos: -35.5,-24.5 + parent: 2 + - uid: 22221 + components: + - type: Transform + pos: -43.5,-25.5 + parent: 2 + - uid: 22222 + components: + - type: Transform + pos: -43.5,-27.5 + parent: 2 + - uid: 22223 + components: + - type: Transform + pos: -47.5,-25.5 + parent: 2 + - uid: 22224 + components: + - type: Transform + pos: -47.5,-27.5 + parent: 2 + - uid: 22248 + components: + - type: Transform + pos: -37.5,-34.5 + parent: 2 + - uid: 22256 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,-26.5 + parent: 2 + - uid: 22257 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,-27.5 + parent: 2 + - uid: 22258 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,-28.5 + parent: 2 + - uid: 22259 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,-26.5 + parent: 2 + - uid: 22260 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,-27.5 + parent: 2 + - uid: 22261 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,-28.5 + parent: 2 + - uid: 22262 + components: + - type: Transform + pos: -35.5,-34.5 + parent: 2 + - uid: 22263 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,-33.5 + parent: 2 + - uid: 22264 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,-33.5 + parent: 2 + - uid: 22265 + components: + - type: Transform + pos: -35.5,-35.5 + parent: 2 + - uid: 22271 + components: + - type: Transform + pos: -35.5,-40.5 + parent: 2 + - uid: 22272 + components: + - type: Transform + pos: -35.5,-41.5 + parent: 2 + - uid: 22280 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,-29.5 + parent: 2 + - uid: 22281 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,-25.5 + parent: 2 + - uid: 22282 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,-25.5 + parent: 2 + - uid: 22283 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,-25.5 + parent: 2 + - uid: 22284 + components: + - type: Transform + pos: -20.5,-25.5 + parent: 2 + - uid: 22285 + components: + - type: Transform + pos: -19.5,-25.5 + parent: 2 + - uid: 22286 + components: + - type: Transform + pos: -19.5,-19.5 + parent: 2 + - uid: 22287 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,-21.5 + parent: 2 + - uid: 22288 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,-21.5 + parent: 2 + - uid: 22289 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,-21.5 + parent: 2 + - uid: 22295 + components: + - type: Transform + pos: -22.5,-29.5 + parent: 2 + - uid: 22296 + components: + - type: Transform + pos: -20.5,-29.5 + parent: 2 + - uid: 22305 + components: + - type: Transform + pos: -9.5,-30.5 + parent: 2 + - uid: 22306 + components: + - type: Transform + pos: -9.5,-31.5 + parent: 2 + - uid: 22307 + components: + - type: Transform + pos: -9.5,-32.5 + parent: 2 + - uid: 22308 + components: + - type: Transform + pos: -9.5,-33.5 + parent: 2 + - uid: 22309 + components: + - type: Transform + pos: -9.5,-34.5 + parent: 2 + - uid: 22315 + components: + - type: Transform + pos: -41.5,-37.5 + parent: 2 + - uid: 22330 + components: + - type: Transform + pos: -21.5,-40.5 + parent: 2 + - uid: 22331 + components: + - type: Transform + pos: -23.5,-53.5 + parent: 2 + - uid: 22332 + components: + - type: Transform + pos: -22.5,-53.5 + parent: 2 + - uid: 22333 + components: + - type: Transform + pos: -22.5,-57.5 + parent: 2 + - uid: 22334 + components: + - type: Transform + pos: -24.5,-57.5 + parent: 2 + - uid: 22335 + components: + - type: Transform + pos: -27.5,-55.5 + parent: 2 + - uid: 22336 + components: + - type: Transform + pos: -32.5,-54.5 + parent: 2 + - uid: 22337 + components: + - type: Transform + pos: -32.5,-56.5 + parent: 2 + - uid: 22338 + components: + - type: Transform + pos: -31.5,-56.5 + parent: 2 + - uid: 22339 + components: + - type: Transform + pos: -29.5,-56.5 + parent: 2 + - uid: 22340 + components: + - type: Transform + pos: -33.5,-57.5 + parent: 2 + - uid: 22341 + components: + - type: Transform + pos: -36.5,-56.5 + parent: 2 + - uid: 22342 + components: + - type: Transform + pos: -36.5,-55.5 + parent: 2 + - uid: 22343 + components: + - type: Transform + pos: -38.5,-55.5 + parent: 2 + - uid: 22344 + components: + - type: Transform + pos: -37.5,-57.5 + parent: 2 + - uid: 22345 + components: + - type: Transform + pos: -37.5,-58.5 + parent: 2 + - uid: 22346 + components: + - type: Transform + pos: -37.5,-60.5 + parent: 2 + - uid: 22347 + components: + - type: Transform + pos: -36.5,-61.5 + parent: 2 + - uid: 22348 + components: + - type: Transform + pos: -34.5,-61.5 + parent: 2 + - uid: 22349 + components: + - type: Transform + pos: -25.5,-58.5 + parent: 2 + - uid: 22350 + components: + - type: Transform + pos: -26.5,-61.5 + parent: 2 + - uid: 22351 + components: + - type: Transform + pos: -28.5,-61.5 + parent: 2 + - uid: 22352 + components: + - type: Transform + pos: -33.5,-62.5 + parent: 2 + - uid: 22353 + components: + - type: Transform + pos: -37.5,-62.5 + parent: 2 + - uid: 22354 + components: + - type: Transform + pos: -37.5,-64.5 + parent: 2 + - uid: 22355 + components: + - type: Transform + pos: -34.5,-65.5 + parent: 2 + - uid: 22356 + components: + - type: Transform + pos: -32.5,-65.5 + parent: 2 + - uid: 22357 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,-61.5 + parent: 2 + - uid: 22358 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,-65.5 + parent: 2 + - uid: 22359 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,-65.5 + parent: 2 + - uid: 22360 + components: + - type: Transform + pos: -21.5,-66.5 + parent: 2 + - uid: 22361 + components: + - type: Transform + pos: -21.5,-68.5 + parent: 2 + - uid: 22362 + components: + - type: Transform + pos: -23.5,-69.5 + parent: 2 + - uid: 22363 + components: + - type: Transform + pos: -24.5,-67.5 + parent: 2 + - uid: 22364 + components: + - type: Transform + pos: -26.5,-68.5 + parent: 2 + - uid: 22365 + components: + - type: Transform + pos: -28.5,-68.5 + parent: 2 + - uid: 22366 + components: + - type: Transform + pos: -28.5,-67.5 + parent: 2 + - uid: 22367 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-53.5 + parent: 2 + - uid: 22368 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-51.5 + parent: 2 + - uid: 22369 + components: + - type: Transform + pos: -4.5,-53.5 + parent: 2 + - uid: 22370 + components: + - type: Transform + pos: -4.5,-52.5 + parent: 2 + - uid: 22371 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,-50.5 + parent: 2 + - uid: 22372 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,-49.5 + parent: 2 + - uid: 22375 + components: + - type: Transform + pos: 35.5,-47.5 + parent: 2 + - uid: 22377 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 18.5,3.5 + parent: 2 + - uid: 22378 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,3.5 + parent: 2 + - uid: 22379 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,3.5 + parent: 2 + - uid: 22380 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,3.5 + parent: 2 + - uid: 22381 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,3.5 + parent: 2 + - uid: 22382 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,3.5 + parent: 2 + - uid: 22383 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,3.5 + parent: 2 + - uid: 22384 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,3.5 + parent: 2 + - uid: 22385 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,3.5 + parent: 2 + - uid: 22386 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.5,3.5 + parent: 2 + - uid: 22387 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 34.5,3.5 + parent: 2 + - uid: 22388 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 35.5,3.5 + parent: 2 + - uid: 22389 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 18.5,-1.5 + parent: 2 + - uid: 22390 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,-1.5 + parent: 2 + - uid: 22391 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,-1.5 + parent: 2 + - uid: 22392 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,-1.5 + parent: 2 + - uid: 22393 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 22.5,-1.5 + parent: 2 + - uid: 22394 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,-1.5 + parent: 2 + - uid: 22395 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,-1.5 + parent: 2 + - uid: 22396 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,-1.5 + parent: 2 + - uid: 22397 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,-1.5 + parent: 2 + - uid: 22398 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,-1.5 + parent: 2 + - uid: 22399 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 36.5,3.5 + parent: 2 + - uid: 22400 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,-1.5 + parent: 2 + - uid: 22401 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,-0.5 + parent: 2 + - uid: 22402 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,3.5 + parent: 2 + - uid: 22406 + components: + - type: Transform + pos: 23.5,-7.5 + parent: 2 + - uid: 22407 + components: + - type: Transform + pos: 24.5,-7.5 + parent: 2 + - uid: 22408 + components: + - type: Transform + pos: 25.5,-7.5 + parent: 2 + - uid: 22409 + components: + - type: Transform + pos: 25.5,-6.5 + parent: 2 + - uid: 22410 + components: + - type: Transform + pos: 26.5,-6.5 + parent: 2 + - uid: 22411 + components: + - type: Transform + pos: 26.5,-5.5 + parent: 2 + - uid: 22412 + components: + - type: Transform + pos: 26.5,-4.5 + parent: 2 + - uid: 22413 + components: + - type: Transform + pos: 26.5,-2.5 + parent: 2 + - uid: 22414 + components: + - type: Transform + pos: 20.5,-2.5 + parent: 2 + - uid: 22415 + components: + - type: Transform + pos: 20.5,-4.5 + parent: 2 + - uid: 22416 + components: + - type: Transform + pos: 27.5,-5.5 + parent: 2 + - uid: 22417 + components: + - type: Transform + pos: 28.5,-5.5 + parent: 2 + - uid: 22418 + components: + - type: Transform + pos: 29.5,-5.5 + parent: 2 + - uid: 22419 + components: + - type: Transform + pos: 30.5,-5.5 + parent: 2 + - uid: 22420 + components: + - type: Transform + pos: 31.5,-5.5 + parent: 2 + - uid: 22421 + components: + - type: Transform + pos: 31.5,-4.5 + parent: 2 + - uid: 22422 + components: + - type: Transform + pos: 31.5,-3.5 + parent: 2 + - uid: 22423 + components: + - type: Transform + pos: 31.5,-2.5 + parent: 2 + - uid: 22430 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 22.5,-13.5 + parent: 2 + - uid: 22431 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,-13.5 + parent: 2 + - uid: 22432 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,-12.5 + parent: 2 + - uid: 22433 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,-11.5 + parent: 2 + - uid: 22434 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,-11.5 + parent: 2 + - uid: 22435 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,-10.5 + parent: 2 + - uid: 22436 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,-9.5 + parent: 2 + - uid: 22437 + components: + - type: Transform + pos: 26.5,-10.5 + parent: 2 + - uid: 22438 + components: + - type: Transform + pos: 27.5,-10.5 + parent: 2 + - uid: 22439 + components: + - type: Transform + pos: 27.5,-9.5 + parent: 2 + - uid: 22440 + components: + - type: Transform + pos: 28.5,-9.5 + parent: 2 + - uid: 22441 + components: + - type: Transform + pos: 29.5,-9.5 + parent: 2 + - uid: 22442 + components: + - type: Transform + pos: 30.5,-9.5 + parent: 2 + - uid: 22443 + components: + - type: Transform + pos: 31.5,-9.5 + parent: 2 + - uid: 22444 + components: + - type: Transform + pos: 31.5,-8.5 + parent: 2 + - uid: 22445 + components: + - type: Transform + pos: 31.5,-6.5 + parent: 2 + - uid: 22449 + components: + - type: Transform + pos: 27.5,-12.5 + parent: 2 + - uid: 22450 + components: + - type: Transform + pos: 31.5,-10.5 + parent: 2 + - uid: 22455 + components: + - type: Transform + pos: 31.5,-12.5 + parent: 2 + - uid: 22456 + components: + - type: Transform + pos: 27.5,4.5 + parent: 2 + - uid: 22457 + components: + - type: Transform + pos: 31.5,4.5 + parent: 2 + - uid: 22458 + components: + - type: Transform + pos: 36.5,4.5 + parent: 2 + - uid: 22459 + components: + - type: Transform + pos: 22.5,12.5 + parent: 2 + - uid: 22460 + components: + - type: Transform + pos: 27.5,12.5 + parent: 2 + - uid: 22461 + components: + - type: Transform + pos: 26.5,12.5 + parent: 2 + - uid: 22462 + components: + - type: Transform + pos: 15.5,12.5 + parent: 2 + - uid: 22463 + components: + - type: Transform + pos: 15.5,15.5 + parent: 2 + - uid: 22465 + components: + - type: Transform + pos: 18.5,15.5 + parent: 2 + - uid: 22466 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,15.5 + parent: 2 + - uid: 22467 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,17.5 + parent: 2 + - uid: 22468 + components: + - type: Transform + pos: 27.5,15.5 + parent: 2 + - uid: 22469 + components: + - type: Transform + pos: 14.5,18.5 + parent: 2 + - uid: 22470 + components: + - type: Transform + pos: 15.5,19.5 + parent: 2 + - uid: 22471 + components: + - type: Transform + pos: 16.5,19.5 + parent: 2 + - uid: 22472 + components: + - type: Transform + pos: 17.5,19.5 + parent: 2 + - uid: 22473 + components: + - type: Transform + pos: 18.5,19.5 + parent: 2 + - uid: 22474 + components: + - type: Transform + pos: 18.5,18.5 + parent: 2 + - uid: 22475 + components: + - type: Transform + pos: 18.5,17.5 + parent: 2 + - uid: 22476 + components: + - type: Transform + pos: 18.5,16.5 + parent: 2 + - uid: 22477 + components: + - type: Transform + pos: 19.5,19.5 + parent: 2 + - uid: 22478 + components: + - type: Transform + pos: 20.5,19.5 + parent: 2 + - uid: 22479 + components: + - type: Transform + pos: 20.5,20.5 + parent: 2 + - uid: 22480 + components: + - type: Transform + pos: 21.5,20.5 + parent: 2 + - uid: 22481 + components: + - type: Transform + pos: 27.5,18.5 + parent: 2 + - uid: 22482 + components: + - type: Transform + pos: 27.5,19.5 + parent: 2 + - uid: 22483 + components: + - type: Transform + pos: 27.5,20.5 + parent: 2 + - uid: 22484 + components: + - type: Transform + pos: 26.5,20.5 + parent: 2 + - uid: 22485 + components: + - type: Transform + pos: 25.5,20.5 + parent: 2 + - uid: 22489 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,21.5 + parent: 2 + - uid: 22490 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,22.5 + parent: 2 + - uid: 22491 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,23.5 + parent: 2 + - uid: 22492 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,24.5 + parent: 2 + - uid: 22493 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,21.5 + parent: 2 + - uid: 22494 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,22.5 + parent: 2 + - uid: 22495 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,23.5 + parent: 2 + - uid: 22496 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,24.5 + parent: 2 + - uid: 22497 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 22.5,24.5 + parent: 2 + - uid: 22498 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,24.5 + parent: 2 + - uid: 22499 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,24.5 + parent: 2 + - uid: 22500 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,24.5 + parent: 2 + - uid: 22501 + components: + - type: Transform + pos: 32.5,12.5 + parent: 2 + - uid: 22502 + components: + - type: Transform + pos: 31.5,12.5 + parent: 2 + - uid: 22503 + components: + - type: Transform + pos: 35.5,12.5 + parent: 2 + - uid: 22504 + components: + - type: Transform + pos: 36.5,12.5 + parent: 2 + - uid: 22505 + components: + - type: Transform + pos: 36.5,11.5 + parent: 2 + - uid: 22506 + components: + - type: Transform + pos: 36.5,10.5 + parent: 2 + - uid: 22507 + components: + - type: Transform + pos: 36.5,9.5 + parent: 2 + - uid: 22508 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,13.5 + parent: 2 + - uid: 22509 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,21.5 + parent: 2 + - uid: 22510 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,20.5 + parent: 2 + - uid: 22511 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,19.5 + parent: 2 + - uid: 22512 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,18.5 + parent: 2 + - uid: 22514 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 32.5,21.5 + parent: 2 + - uid: 22515 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 33.5,21.5 + parent: 2 + - uid: 22516 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,21.5 + parent: 2 + - uid: 22517 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,21.5 + parent: 2 + - uid: 22518 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,20.5 + parent: 2 + - uid: 22519 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 36.5,20.5 + parent: 2 + - uid: 22520 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 37.5,20.5 + parent: 2 + - uid: 22521 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 38.5,20.5 + parent: 2 + - uid: 22522 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 39.5,20.5 + parent: 2 + - uid: 22523 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 39.5,19.5 + parent: 2 + - uid: 22524 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 39.5,16.5 + parent: 2 + - uid: 22525 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 39.5,15.5 + parent: 2 + - uid: 22526 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 39.5,14.5 + parent: 2 + - uid: 22527 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 39.5,13.5 + parent: 2 + - uid: 22528 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 39.5,12.5 + parent: 2 + - uid: 22529 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 39.5,11.5 + parent: 2 + - uid: 22530 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 38.5,11.5 + parent: 2 + - uid: 22531 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 37.5,11.5 + parent: 2 + - uid: 22532 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,20.5 + parent: 2 + - uid: 22533 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,20.5 + parent: 2 + - uid: 22534 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 43.5,20.5 + parent: 2 + - uid: 22535 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,20.5 + parent: 2 + - uid: 22536 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,19.5 + parent: 2 + - uid: 22537 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,16.5 + parent: 2 + - uid: 22538 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,16.5 + parent: 2 + - uid: 22539 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,16.5 + parent: 2 + - uid: 22540 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 43.5,16.5 + parent: 2 + - uid: 22541 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,16.5 + parent: 2 + - uid: 22542 + components: + - type: Transform + pos: 44.5,15.5 + parent: 2 + - uid: 22543 + components: + - type: Transform + pos: 44.5,12.5 + parent: 2 + - uid: 22544 + components: + - type: Transform + pos: 44.5,11.5 + parent: 2 + - uid: 22545 + components: + - type: Transform + pos: 43.5,11.5 + parent: 2 + - uid: 22546 + components: + - type: Transform + pos: 40.5,11.5 + parent: 2 + - uid: 22547 + components: + - type: Transform + pos: 38.5,-1.5 + parent: 2 + - uid: 22548 + components: + - type: Transform + pos: 39.5,-1.5 + parent: 2 + - uid: 22549 + components: + - type: Transform + pos: 40.5,-1.5 + parent: 2 + - uid: 22550 + components: + - type: Transform + pos: 41.5,-1.5 + parent: 2 + - uid: 22551 + components: + - type: Transform + pos: 41.5,-2.5 + parent: 2 + - uid: 22552 + components: + - type: Transform + pos: 42.5,-2.5 + parent: 2 + - uid: 22553 + components: + - type: Transform + pos: 43.5,-2.5 + parent: 2 + - uid: 22554 + components: + - type: Transform + pos: 44.5,-2.5 + parent: 2 + - uid: 22555 + components: + - type: Transform + pos: 45.5,-2.5 + parent: 2 + - uid: 22556 + components: + - type: Transform + pos: 45.5,-1.5 + parent: 2 + - uid: 22557 + components: + - type: Transform + pos: 45.5,0.5 + parent: 2 + - uid: 22558 + components: + - type: Transform + pos: 45.5,1.5 + parent: 2 + - uid: 22559 + components: + - type: Transform + pos: 44.5,1.5 + parent: 2 + - uid: 22560 + components: + - type: Transform + pos: 43.5,1.5 + parent: 2 + - uid: 22561 + components: + - type: Transform + pos: 42.5,1.5 + parent: 2 + - uid: 22562 + components: + - type: Transform + pos: 41.5,0.5 + parent: 2 + - uid: 22563 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 44.5,2.5 + parent: 2 + - uid: 22564 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 44.5,3.5 + parent: 2 + - uid: 22565 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 44.5,10.5 + parent: 2 + - uid: 22566 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,10.5 + parent: 2 + - uid: 22567 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,21.5 + parent: 2 + - uid: 22568 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,22.5 + parent: 2 + - uid: 22569 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,23.5 + parent: 2 + - uid: 22570 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,24.5 + parent: 2 + - uid: 22571 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,25.5 + parent: 2 + - uid: 22572 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,25.5 + parent: 2 + - uid: 22573 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,25.5 + parent: 2 + - uid: 22574 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,24.5 + parent: 2 + - uid: 22575 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 45.5,20.5 + parent: 2 + - uid: 22576 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 45.5,21.5 + parent: 2 + - uid: 22577 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 45.5,22.5 + parent: 2 + - uid: 22578 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,22.5 + parent: 2 + - uid: 22579 + components: + - type: Transform + pos: 45.5,25.5 + parent: 2 + - uid: 22580 + components: + - type: Transform + pos: 46.5,25.5 + parent: 2 + - uid: 22581 + components: + - type: Transform + pos: 47.5,25.5 + parent: 2 + - uid: 22582 + components: + - type: Transform + pos: 47.5,24.5 + parent: 2 + - uid: 22583 + components: + - type: Transform + pos: 48.5,24.5 + parent: 2 + - uid: 22584 + components: + - type: Transform + pos: 49.5,24.5 + parent: 2 + - uid: 22585 + components: + - type: Transform + pos: 49.5,22.5 + parent: 2 + - uid: 22586 + components: + - type: Transform + pos: 48.5,22.5 + parent: 2 + - uid: 22587 + components: + - type: Transform + pos: 47.5,22.5 + parent: 2 + - uid: 22588 + components: + - type: Transform + pos: 47.5,21.5 + parent: 2 + - uid: 22589 + components: + - type: Transform + pos: 47.5,20.5 + parent: 2 + - uid: 22590 + components: + - type: Transform + pos: 46.5,20.5 + parent: 2 + - uid: 22591 + components: + - type: Transform + pos: 35.5,22.5 + parent: 2 + - uid: 22592 + components: + - type: Transform + pos: 35.5,23.5 + parent: 2 + - uid: 22593 + components: + - type: Transform + pos: 35.5,24.5 + parent: 2 + - uid: 22594 + components: + - type: Transform + pos: 35.5,25.5 + parent: 2 + - uid: 22595 + components: + - type: Transform + pos: 36.5,25.5 + parent: 2 + - uid: 22596 + components: + - type: Transform + pos: 37.5,25.5 + parent: 2 + - uid: 22597 + components: + - type: Transform + pos: 39.5,25.5 + parent: 2 + - uid: 22598 + components: + - type: Transform + pos: 40.5,25.5 + parent: 2 + - uid: 22599 + components: + - type: Transform + pos: 40.5,23.5 + parent: 2 + - uid: 22600 + components: + - type: Transform + pos: 39.5,23.5 + parent: 2 + - uid: 22601 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,25.5 + parent: 2 + - uid: 22602 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,25.5 + parent: 2 + - uid: 22603 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,25.5 + parent: 2 + - uid: 22604 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,25.5 + parent: 2 + - uid: 22605 + components: + - type: Transform + pos: 18.5,24.5 + parent: 2 + - uid: 22606 + components: + - type: Transform + pos: 14.5,20.5 + parent: 2 + - uid: 22607 + components: + - type: Transform + pos: 14.5,23.5 + parent: 2 + - uid: 22608 + components: + - type: Transform + pos: 10.5,23.5 + parent: 2 + - uid: 22609 + components: + - type: Transform + pos: 11.5,23.5 + parent: 2 + - uid: 22612 + components: + - type: Transform + pos: 15.5,27.5 + parent: 2 + - uid: 22614 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 17.5,28.5 + parent: 2 + - uid: 22615 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,28.5 + parent: 2 + - uid: 22616 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,28.5 + parent: 2 + - uid: 22617 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 20.5,28.5 + parent: 2 + - uid: 22618 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,28.5 + parent: 2 + - uid: 22619 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,28.5 + parent: 2 + - uid: 22620 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 23.5,28.5 + parent: 2 + - uid: 22621 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,28.5 + parent: 2 + - uid: 22622 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,28.5 + parent: 2 + - uid: 22623 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,28.5 + parent: 2 + - uid: 22624 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,28.5 + parent: 2 + - uid: 22625 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,27.5 + parent: 2 + - uid: 22626 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,25.5 + parent: 2 + - uid: 22627 + components: + - type: Transform + pos: 41.5,26.5 + parent: 2 + - uid: 22628 + components: + - type: Transform + pos: 45.5,26.5 + parent: 2 + - uid: 22629 + components: + - type: Transform + pos: 41.5,30.5 + parent: 2 + - uid: 22630 + components: + - type: Transform + pos: 31.5,31.5 + parent: 2 + - uid: 22631 + components: + - type: Transform + pos: 33.5,31.5 + parent: 2 + - uid: 22632 + components: + - type: Transform + pos: 35.5,31.5 + parent: 2 + - uid: 22633 + components: + - type: Transform + pos: 37.5,31.5 + parent: 2 + - uid: 22634 + components: + - type: Transform + pos: 39.5,31.5 + parent: 2 + - uid: 22635 + components: + - type: Transform + pos: 41.5,31.5 + parent: 2 + - uid: 22636 + components: + - type: Transform + pos: 27.5,34.5 + parent: 2 + - uid: 22637 + components: + - type: Transform + pos: 26.5,34.5 + parent: 2 + - uid: 22638 + components: + - type: Transform + pos: 26.5,29.5 + parent: 2 + - uid: 22639 + components: + - type: Transform + pos: 26.5,33.5 + parent: 2 + - uid: 22644 + components: + - type: Transform + pos: 16.5,33.5 + parent: 2 + - uid: 22645 + components: + - type: Transform + pos: 16.5,34.5 + parent: 2 + - uid: 22646 + components: + - type: Transform + pos: 17.5,34.5 + parent: 2 + - uid: 22647 + components: + - type: Transform + pos: 18.5,34.5 + parent: 2 + - uid: 22648 + components: + - type: Transform + pos: 22.5,40.5 + parent: 2 + - uid: 22649 + components: + - type: Transform + pos: 25.5,34.5 + parent: 2 + - uid: 22650 + components: + - type: Transform + pos: 24.5,34.5 + parent: 2 + - uid: 22651 + components: + - type: Transform + pos: 23.5,34.5 + parent: 2 + - uid: 22652 + components: + - type: Transform + pos: 22.5,34.5 + parent: 2 + - uid: 22653 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 16.5,35.5 + parent: 2 + - uid: 22654 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 16.5,36.5 + parent: 2 + - uid: 22655 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 18.5,36.5 + parent: 2 + - uid: 22656 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 18.5,37.5 + parent: 2 + - uid: 22657 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,35.5 + parent: 2 + - uid: 22658 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,36.5 + parent: 2 + - uid: 22659 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,37.5 + parent: 2 + - uid: 22660 + components: + - type: Transform + pos: 22.5,38.5 + parent: 2 + - uid: 22661 + components: + - type: Transform + pos: 22.5,39.5 + parent: 2 + - uid: 22662 + components: + - type: Transform + pos: 22.5,41.5 + parent: 2 + - uid: 22663 + components: + - type: Transform + pos: 21.5,41.5 + parent: 2 + - uid: 22664 + components: + - type: Transform + pos: 19.5,41.5 + parent: 2 + - uid: 22665 + components: + - type: Transform + pos: 18.5,41.5 + parent: 2 + - uid: 22666 + components: + - type: Transform + pos: 18.5,38.5 + parent: 2 + - uid: 22667 + components: + - type: Transform + pos: 18.5,40.5 + parent: 2 + - uid: 22668 + components: + - type: Transform + pos: 16.5,37.5 + parent: 2 + - uid: 22669 + components: + - type: Transform + pos: 15.5,37.5 + parent: 2 + - uid: 22670 + components: + - type: Transform + pos: 13.5,37.5 + parent: 2 + - uid: 22672 + components: + - type: Transform + pos: 17.5,41.5 + parent: 2 + - uid: 22673 + components: + - type: Transform + pos: 16.5,41.5 + parent: 2 + - uid: 22674 + components: + - type: Transform + pos: 14.5,41.5 + parent: 2 + - uid: 22675 + components: + - type: Transform + pos: 13.5,41.5 + parent: 2 + - uid: 22683 + components: + - type: Transform + pos: 13.5,32.5 + parent: 2 + - uid: 22684 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 17.5,15.5 + parent: 2 + - uid: 22686 + components: + - type: Transform + pos: 14.5,34.5 + parent: 2 + - uid: 22687 + components: + - type: Transform + pos: 15.5,34.5 + parent: 2 + - uid: 22688 + components: + - type: Transform + pos: 15.5,32.5 + parent: 2 + - uid: 22691 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 16.5,42.5 + parent: 2 + - uid: 22692 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 16.5,44.5 + parent: 2 + - uid: 22693 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 16.5,45.5 + parent: 2 + - uid: 22694 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.5,45.5 + parent: 2 + - uid: 22695 + components: + - type: Transform + pos: 17.5,45.5 + parent: 2 + - uid: 22696 + components: + - type: Transform + pos: 24.5,42.5 + parent: 2 + - uid: 22697 + components: + - type: Transform + pos: 24.5,43.5 + parent: 2 + - uid: 22698 + components: + - type: Transform + pos: 24.5,44.5 + parent: 2 + - uid: 22699 + components: + - type: Transform + pos: 24.5,45.5 + parent: 2 + - uid: 22700 + components: + - type: Transform + pos: 24.5,41.5 + parent: 2 + - uid: 22701 + components: + - type: Transform + pos: 23.5,41.5 + parent: 2 + - uid: 22702 + components: + - type: Transform + pos: 23.5,45.5 + parent: 2 + - uid: 22703 + components: + - type: Transform + pos: 17.5,46.5 + parent: 2 + - uid: 22704 + components: + - type: Transform + pos: 18.5,46.5 + parent: 2 + - uid: 22705 + components: + - type: Transform + pos: 23.5,46.5 + parent: 2 + - uid: 22706 + components: + - type: Transform + pos: 22.5,46.5 + parent: 2 + - uid: 22707 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,35.5 + parent: 2 + - uid: 22708 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,37.5 + parent: 2 + - uid: 22709 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,37.5 + parent: 2 + - uid: 22710 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,37.5 + parent: 2 + - uid: 22711 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,37.5 + parent: 2 + - uid: 22712 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 23.5,37.5 + parent: 2 + - uid: 22713 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,38.5 + parent: 2 + - uid: 22714 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,40.5 + parent: 2 + - uid: 22715 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,41.5 + parent: 2 + - uid: 22716 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,40.5 + parent: 2 + - uid: 22717 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,40.5 + parent: 2 + - uid: 22718 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,40.5 + parent: 2 + - uid: 22719 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,39.5 + parent: 2 + - uid: 22720 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,37.5 + parent: 2 + - uid: 22721 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,36.5 + parent: 2 + - uid: 22722 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,32.5 + parent: 2 + - uid: 22723 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,33.5 + parent: 2 + - uid: 22724 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,34.5 + parent: 2 + - uid: 22725 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,42.5 + parent: 2 + - uid: 22726 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,42.5 + parent: 2 + - uid: 22727 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,41.5 + parent: 2 + - uid: 22728 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,42.5 + parent: 2 + - uid: 22729 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,42.5 + parent: 2 + - uid: 22730 + components: + - type: Transform + pos: 45.5,30.5 + parent: 2 + - uid: 22731 + components: + - type: Transform + pos: 45.5,31.5 + parent: 2 + - uid: 22732 + components: + - type: Transform + pos: 45.5,33.5 + parent: 2 + - uid: 22733 + components: + - type: Transform + pos: 45.5,40.5 + parent: 2 + - uid: 22734 + components: + - type: Transform + pos: 45.5,41.5 + parent: 2 + - uid: 22735 + components: + - type: Transform + pos: 47.5,38.5 + parent: 2 + - uid: 22736 + components: + - type: Transform + pos: 41.5,43.5 + parent: 2 + - uid: 22737 + components: + - type: Transform + pos: 41.5,44.5 + parent: 2 + - uid: 22738 + components: + - type: Transform + pos: 41.5,45.5 + parent: 2 + - uid: 22739 + components: + - type: Transform + pos: 41.5,46.5 + parent: 2 + - uid: 22740 + components: + - type: Transform + pos: 41.5,47.5 + parent: 2 + - uid: 22741 + components: + - type: Transform + pos: 45.5,46.5 + parent: 2 + - uid: 22742 + components: + - type: Transform + pos: 45.5,47.5 + parent: 2 + - uid: 22743 + components: + - type: Transform + pos: 41.5,48.5 + parent: 2 + - uid: 22744 + components: + - type: Transform + pos: 41.5,49.5 + parent: 2 + - uid: 22745 + components: + - type: Transform + pos: 45.5,48.5 + parent: 2 + - uid: 22746 + components: + - type: Transform + pos: 45.5,49.5 + parent: 2 + - uid: 22747 + components: + - type: Transform + pos: 46.5,31.5 + parent: 2 + - uid: 22748 + components: + - type: Transform + pos: 47.5,31.5 + parent: 2 + - uid: 22749 + components: + - type: Transform + pos: 47.5,33.5 + parent: 2 + - uid: 22750 + components: + - type: Transform + pos: 46.5,33.5 + parent: 2 + - uid: 22751 + components: + - type: Transform + pos: 47.5,40.5 + parent: 2 + - uid: 22752 + components: + - type: Transform + pos: 46.5,40.5 + parent: 2 + - uid: 22753 + components: + - type: Transform + pos: 45.5,38.5 + parent: 2 + - uid: 22754 + components: + - type: Transform + pos: 46.5,38.5 + parent: 2 + - uid: 22755 + components: + - type: Transform + pos: 36.5,-7.5 + parent: 2 + - uid: 22756 + components: + - type: Transform + pos: 36.5,-8.5 + parent: 2 + - uid: 22757 + components: + - type: Transform + pos: 39.5,-7.5 + parent: 2 + - uid: 22758 + components: + - type: Transform + pos: 39.5,-8.5 + parent: 2 + - uid: 22766 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 45.5,-9.5 + parent: 2 + - uid: 22767 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 45.5,-5.5 + parent: 2 + - uid: 22768 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 45.5,-3.5 + parent: 2 + - uid: 22769 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,-11.5 + parent: 2 + - uid: 22770 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,-5.5 + parent: 2 + - uid: 22771 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,-3.5 + parent: 2 + - uid: 22772 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 47.5,-3.5 + parent: 2 + - uid: 22773 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,14.5 + parent: 2 + - uid: 22774 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,15.5 + parent: 2 + - uid: 22775 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,17.5 + parent: 2 + - uid: 22776 + components: + - type: Transform + pos: -26.5,15.5 + parent: 2 + - uid: 22777 + components: + - type: Transform + pos: -26.5,17.5 + parent: 2 + - uid: 22778 + components: + - type: Transform + pos: -26.5,18.5 + parent: 2 + - uid: 22779 + components: + - type: Transform + pos: -27.5,18.5 + parent: 2 + - uid: 22780 + components: + - type: Transform + pos: -29.5,18.5 + parent: 2 + - uid: 22781 + components: + - type: Transform + pos: -30.5,19.5 + parent: 2 + - uid: 22782 + components: + - type: Transform + pos: -30.5,21.5 + parent: 2 + - uid: 22783 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -28.5,18.5 + parent: 2 + - uid: 22785 + components: + - type: Transform + pos: -18.5,23.5 + parent: 2 + - uid: 22786 + components: + - type: Transform + pos: -19.5,23.5 + parent: 2 + - uid: 22787 + components: + - type: Transform + pos: -20.5,23.5 + parent: 2 + - uid: 22788 + components: + - type: Transform + pos: -21.5,23.5 + parent: 2 + - uid: 22789 + components: + - type: Transform + pos: -17.5,23.5 + parent: 2 + - uid: 22790 + components: + - type: Transform + pos: -17.5,22.5 + parent: 2 + - uid: 22791 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,26.5 + parent: 2 + - uid: 22792 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,24.5 + parent: 2 + - uid: 22793 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,26.5 + parent: 2 + - uid: 22794 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,26.5 + parent: 2 + - uid: 22795 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,22.5 + parent: 2 + - uid: 22796 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,23.5 + parent: 2 + - uid: 22797 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,24.5 + parent: 2 + - uid: 22798 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,25.5 + parent: 2 + - uid: 22799 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,22.5 + parent: 2 + - uid: 22800 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,23.5 + parent: 2 + - uid: 22801 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,24.5 + parent: 2 + - uid: 22802 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,25.5 + parent: 2 + - uid: 22803 + components: + - type: Transform + pos: -10.5,30.5 + parent: 2 + - uid: 22804 + components: + - type: Transform + pos: -9.5,30.5 + parent: 2 + - uid: 22805 + components: + - type: Transform + pos: -8.5,30.5 + parent: 2 + - uid: 22806 + components: + - type: Transform + pos: -7.5,30.5 + parent: 2 + - uid: 22807 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,31.5 + parent: 2 + - uid: 22808 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,31.5 + parent: 2 + - uid: 22809 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,31.5 + parent: 2 + - uid: 22810 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,30.5 + parent: 2 + - uid: 22811 + components: + - type: Transform + pos: -20.5,30.5 + parent: 2 + - uid: 22812 + components: + - type: Transform + pos: -21.5,30.5 + parent: 2 + - uid: 22813 + components: + - type: Transform + pos: -21.5,31.5 + parent: 2 + - uid: 22814 + components: + - type: Transform + pos: -21.5,32.5 + parent: 2 + - uid: 22815 + components: + - type: Transform + pos: -21.5,33.5 + parent: 2 + - uid: 22816 + components: + - type: Transform + pos: -21.5,34.5 + parent: 2 + - uid: 22817 + components: + - type: Transform + pos: -21.5,35.5 + parent: 2 + - uid: 22818 + components: + - type: Transform + pos: -21.5,36.5 + parent: 2 + - uid: 22819 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,31.5 + parent: 2 + - uid: 22820 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -29.5,31.5 + parent: 2 + - uid: 22821 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,31.5 + parent: 2 + - uid: 22822 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,31.5 + parent: 2 + - uid: 22823 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,31.5 + parent: 2 + - uid: 22824 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,31.5 + parent: 2 + - uid: 22825 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,32.5 + parent: 2 + - uid: 22826 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,33.5 + parent: 2 + - uid: 22827 + components: + - type: Transform + pos: -32.5,34.5 + parent: 2 + - uid: 22828 + components: + - type: Transform + pos: -33.5,34.5 + parent: 2 + - uid: 22829 + components: + - type: Transform + pos: -34.5,34.5 + parent: 2 + - uid: 22830 + components: + - type: Transform + pos: -35.5,34.5 + parent: 2 + - uid: 22831 + components: + - type: Transform + pos: -32.5,37.5 + parent: 2 + - uid: 22832 + components: + - type: Transform + pos: -33.5,37.5 + parent: 2 + - uid: 22833 + components: + - type: Transform + pos: -34.5,37.5 + parent: 2 + - uid: 22834 + components: + - type: Transform + pos: -35.5,37.5 + parent: 2 + - uid: 22836 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 23.5,20.5 + parent: 2 + - uid: 22842 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,43.5 + parent: 2 + - uid: 22843 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,44.5 + parent: 2 + - uid: 22844 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,45.5 + parent: 2 + - uid: 22850 + components: + - type: Transform + pos: -12.5,45.5 + parent: 2 + - uid: 22851 + components: + - type: Transform + pos: -12.5,46.5 + parent: 2 + - uid: 22852 + components: + - type: Transform + pos: -12.5,48.5 + parent: 2 + - uid: 22853 + components: + - type: Transform + pos: 41.5,-19.5 + parent: 2 + - uid: 22854 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,-12.5 + parent: 2 + - uid: 22855 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 16.5,-12.5 + parent: 2 + - uid: 22856 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 20.5,-17.5 + parent: 2 + - uid: 22857 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,-17.5 + parent: 2 + - uid: 22858 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 18.5,-17.5 + parent: 2 + - uid: 22859 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,-17.5 + parent: 2 + - uid: 22860 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 16.5,-17.5 + parent: 2 + - uid: 22861 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,-17.5 + parent: 2 + - uid: 22862 + components: + - type: Transform + pos: 15.5,-18.5 + parent: 2 + - uid: 22863 + components: + - type: Transform + pos: 15.5,-19.5 + parent: 2 + - uid: 22864 + components: + - type: Transform + pos: 15.5,-20.5 + parent: 2 + - uid: 22865 + components: + - type: Transform + pos: 15.5,-21.5 + parent: 2 + - uid: 22866 + components: + - type: Transform + pos: 16.5,-21.5 + parent: 2 + - uid: 22867 + components: + - type: Transform + pos: 20.5,-21.5 + parent: 2 + - uid: 22868 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-14.5 + parent: 2 + - uid: 22869 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-15.5 + parent: 2 + - uid: 22870 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-16.5 + parent: 2 + - uid: 22871 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-17.5 + parent: 2 + - uid: 22872 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-18.5 + parent: 2 + - uid: 22873 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-19.5 + parent: 2 + - uid: 22874 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-20.5 + parent: 2 + - uid: 22875 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-21.5 + parent: 2 + - uid: 22876 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-22.5 + parent: 2 + - uid: 22877 + components: + - type: Transform + pos: 40.5,-19.5 + parent: 2 + - uid: 22878 + components: + - type: Transform + pos: 39.5,-19.5 + parent: 2 + - uid: 22879 + components: + - type: Transform + pos: 39.5,-18.5 + parent: 2 + - uid: 22880 + components: + - type: Transform + pos: 39.5,-14.5 + parent: 2 + - uid: 22884 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-35.5 + parent: 2 + - uid: 22885 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,-35.5 + parent: 2 + - uid: 22886 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,-34.5 + parent: 2 + - uid: 22903 + components: + - type: Transform + pos: 24.5,-32.5 + parent: 2 + - uid: 22904 + components: + - type: Transform + pos: 24.5,-31.5 + parent: 2 + - uid: 22905 + components: + - type: Transform + pos: 24.5,-30.5 + parent: 2 + - uid: 22906 + components: + - type: Transform + pos: 24.5,-29.5 + parent: 2 + - uid: 22907 + components: + - type: Transform + pos: 24.5,-28.5 + parent: 2 + - uid: 22908 + components: + - type: Transform + pos: 24.5,-27.5 + parent: 2 + - uid: 22909 + components: + - type: Transform + pos: 24.5,-26.5 + parent: 2 + - uid: 22910 + components: + - type: Transform + pos: 25.5,-26.5 + parent: 2 + - uid: 22911 + components: + - type: Transform + pos: 28.5,-26.5 + parent: 2 + - uid: 22912 + components: + - type: Transform + pos: 29.5,-26.5 + parent: 2 + - uid: 22913 + components: + - type: Transform + pos: 30.5,-26.5 + parent: 2 + - uid: 22914 + components: + - type: Transform + pos: 32.5,-26.5 + parent: 2 + - uid: 22915 + components: + - type: Transform + pos: 23.5,-29.5 + parent: 2 + - uid: 22916 + components: + - type: Transform + pos: 22.5,-29.5 + parent: 2 + - uid: 22917 + components: + - type: Transform + pos: 21.5,-29.5 + parent: 2 + - uid: 22918 + components: + - type: Transform + pos: 20.5,-29.5 + parent: 2 + - uid: 22927 + components: + - type: Transform + pos: 15.5,-29.5 + parent: 2 + - uid: 22928 + components: + - type: Transform + pos: 16.5,-29.5 + parent: 2 + - uid: 22943 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,-29.5 + parent: 2 + - uid: 22945 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,-18.5 + parent: 2 + - uid: 22948 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-27.5 + parent: 2 + - uid: 22949 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-26.5 + parent: 2 + - uid: 22950 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-22.5 + parent: 2 + - uid: 22951 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-21.5 + parent: 2 + - uid: 22958 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,-26.5 + parent: 2 + - uid: 22959 + components: + - type: Transform + pos: 3.5,-34.5 + parent: 2 + - uid: 22960 + components: + - type: Transform + pos: 3.5,-36.5 + parent: 2 + - uid: 22961 + components: + - type: Transform + pos: 3.5,-37.5 + parent: 2 + - uid: 22962 + components: + - type: Transform + pos: 9.5,-34.5 + parent: 2 + - uid: 22963 + components: + - type: Transform + pos: 18.5,-35.5 + parent: 2 + - uid: 22964 + components: + - type: Transform + pos: 20.5,-35.5 + parent: 2 + - uid: 22965 + components: + - type: Transform + pos: 21.5,-37.5 + parent: 2 + - uid: 22966 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,-35.5 + parent: 2 + - uid: 22967 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,-35.5 + parent: 2 + - uid: 22968 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,-36.5 + parent: 2 + - uid: 22969 + components: + - type: Transform + pos: 37.5,-39.5 + parent: 2 + - uid: 22970 + components: + - type: Transform + pos: 48.5,-41.5 + parent: 2 + - uid: 22971 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-44.5 + parent: 2 + - uid: 22972 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-45.5 + parent: 2 + - uid: 22973 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,-52.5 + parent: 2 + - uid: 22974 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,-57.5 + parent: 2 + - uid: 22975 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,-57.5 + parent: 2 + - uid: 22976 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-57.5 + parent: 2 + - uid: 22977 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,-57.5 + parent: 2 + - uid: 22978 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,-58.5 + parent: 2 + - uid: 22979 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,-59.5 + parent: 2 + - uid: 22980 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,-60.5 + parent: 2 + - uid: 22981 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,-58.5 + parent: 2 + - uid: 22982 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,-59.5 + parent: 2 + - uid: 22983 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,-60.5 + parent: 2 + - uid: 22984 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,-61.5 + parent: 2 + - uid: 22985 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-61.5 + parent: 2 + - uid: 22986 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-60.5 + parent: 2 + - uid: 22987 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-59.5 + parent: 2 + - uid: 22988 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-58.5 + parent: 2 + - uid: 22989 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-55.5 + parent: 2 + - uid: 22990 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-56.5 + parent: 2 + - uid: 22991 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,-61.5 + parent: 2 + - uid: 22992 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,-60.5 + parent: 2 + - uid: 22993 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,-59.5 + parent: 2 + - uid: 22994 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,-56.5 + parent: 2 + - uid: 22995 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,-61.5 + parent: 2 + - uid: 22996 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,-61.5 + parent: 2 + - uid: 22997 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,-61.5 + parent: 2 + - uid: 22998 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-61.5 + parent: 2 + - uid: 22999 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-61.5 + parent: 2 + - uid: 23000 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-61.5 + parent: 2 + - uid: 23001 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,-61.5 + parent: 2 + - uid: 23002 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,-60.5 + parent: 2 + - uid: 23003 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,-60.5 + parent: 2 + - uid: 23004 + components: + - type: Transform + pos: 9.5,-67.5 + parent: 2 + - uid: 23005 + components: + - type: Transform + pos: 9.5,-66.5 + parent: 2 + - uid: 23006 + components: + - type: Transform + pos: 9.5,-65.5 + parent: 2 + - uid: 23007 + components: + - type: Transform + pos: 9.5,-62.5 + parent: 2 + - uid: 23008 + components: + - type: Transform + pos: 33.5,-41.5 + parent: 2 + - uid: 23009 + components: + - type: Transform + pos: 33.5,-42.5 + parent: 2 + - uid: 23010 + components: + - type: Transform + pos: 33.5,-43.5 + parent: 2 + - uid: 23011 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,-17.5 + parent: 2 + - uid: 23012 + components: + - type: Transform + pos: 33.5,-47.5 + parent: 2 + - uid: 23013 + components: + - type: Transform + pos: 34.5,-47.5 + parent: 2 + - uid: 23015 + components: + - type: Transform + pos: 36.5,-47.5 + parent: 2 + - uid: 23016 + components: + - type: Transform + pos: 37.5,-47.5 + parent: 2 + - uid: 23017 + components: + - type: Transform + pos: 39.5,-45.5 + parent: 2 + - uid: 23018 + components: + - type: Transform + pos: 40.5,-45.5 + parent: 2 + - uid: 23019 + components: + - type: Transform + pos: 39.5,-42.5 + parent: 2 + - uid: 23020 + components: + - type: Transform + pos: 43.5,-42.5 + parent: 2 + - uid: 23021 + components: + - type: Transform + pos: 44.5,-42.5 + parent: 2 + - uid: 23022 + components: + - type: Transform + pos: 45.5,-42.5 + parent: 2 + - uid: 23023 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,-54.5 + parent: 2 + - uid: 23025 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.5,-45.5 + parent: 2 + - uid: 23026 + components: + - type: Transform + pos: 8.5,22.5 + parent: 2 + - uid: 23027 + components: + - type: Transform + pos: 42.5,11.5 + parent: 2 + - uid: 23028 + components: + - type: Transform + pos: 45.5,-36.5 + parent: 2 + - uid: 23029 + components: + - type: Transform + pos: 48.5,-38.5 + parent: 2 + - uid: 23030 + components: + - type: Transform + pos: 47.5,-37.5 + parent: 2 + - uid: 23031 + components: + - type: Transform + pos: 47.5,-41.5 + parent: 2 + - uid: 23032 + components: + - type: Transform + pos: 41.5,-37.5 + parent: 2 + - uid: 23033 + components: + - type: Transform + pos: 42.5,-37.5 + parent: 2 + - uid: 23034 + components: + - type: Transform + pos: 39.5,-36.5 + parent: 2 + - uid: 23035 + components: + - type: Transform + pos: -12.5,-25.5 + parent: 2 + - uid: 24068 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,20.5 + parent: 2 +- proto: WallSolidRust + entities: + - uid: 23036 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,-14.5 + parent: 2 + - uid: 23037 + components: + - type: Transform + pos: 46.5,-41.5 + parent: 2 + - uid: 23038 + components: + - type: Transform + pos: -9.5,-7.5 + parent: 2 + - uid: 23039 + components: + - type: Transform + pos: -10.5,-7.5 + parent: 2 + - uid: 23040 + components: + - type: Transform + pos: -12.5,-7.5 + parent: 2 + - uid: 23041 + components: + - type: Transform + pos: -18.5,-7.5 + parent: 2 + - uid: 23042 + components: + - type: Transform + pos: -17.5,-7.5 + parent: 2 + - uid: 23043 + components: + - type: Transform + pos: -16.5,-7.5 + parent: 2 + - uid: 23044 + components: + - type: Transform + pos: -18.5,-5.5 + parent: 2 + - uid: 23045 + components: + - type: Transform + pos: -18.5,-3.5 + parent: 2 + - uid: 23046 + components: + - type: Transform + pos: -8.5,-11.5 + parent: 2 + - uid: 23047 + components: + - type: Transform + pos: -9.5,-11.5 + parent: 2 + - uid: 23048 + components: + - type: Transform + pos: -9.5,-13.5 + parent: 2 + - uid: 23049 + components: + - type: Transform + pos: -9.5,-15.5 + parent: 2 + - uid: 23050 + components: + - type: Transform + pos: -7.5,-15.5 + parent: 2 + - uid: 23051 + components: + - type: Transform + pos: -6.5,-15.5 + parent: 2 + - uid: 23052 + components: + - type: Transform + pos: -14.5,-8.5 + parent: 2 + - uid: 23053 + components: + - type: Transform + pos: -14.5,-11.5 + parent: 2 + - uid: 23054 + components: + - type: Transform + pos: -12.5,-11.5 + parent: 2 + - uid: 23055 + components: + - type: Transform + pos: -7.5,-17.5 + parent: 2 + - uid: 23056 + components: + - type: Transform + pos: -11.5,-18.5 + parent: 2 + - uid: 23057 + components: + - type: Transform + pos: -10.5,-17.5 + parent: 2 + - uid: 23058 + components: + - type: Transform + pos: -16.5,-13.5 + parent: 2 + - uid: 23059 + components: + - type: Transform + pos: -17.5,-14.5 + parent: 2 + - uid: 23060 + components: + - type: Transform + pos: -13.5,-14.5 + parent: 2 + - uid: 23061 + components: + - type: Transform + pos: -11.5,-15.5 + parent: 2 + - uid: 23062 + components: + - type: Transform + pos: -16.5,-10.5 + parent: 2 + - uid: 23063 + components: + - type: Transform + pos: -21.5,-11.5 + parent: 2 + - uid: 23064 + components: + - type: Transform + pos: -22.5,-10.5 + parent: 2 + - uid: 23065 + components: + - type: Transform + pos: -25.5,-9.5 + parent: 2 + - uid: 23066 + components: + - type: Transform + pos: -22.5,-7.5 + parent: 2 + - uid: 23067 + components: + - type: Transform + pos: -24.5,-7.5 + parent: 2 + - uid: 23068 + components: + - type: Transform + pos: -21.5,-6.5 + parent: 2 + - uid: 23069 + components: + - type: Transform + pos: -21.5,-5.5 + parent: 2 + - uid: 23070 + components: + - type: Transform + pos: -22.5,-5.5 + parent: 2 + - uid: 23071 + components: + - type: Transform + pos: -22.5,-3.5 + parent: 2 + - uid: 23072 + components: + - type: Transform + pos: -21.5,-1.5 + parent: 2 + - uid: 23073 + components: + - type: Transform + pos: -26.5,-9.5 + parent: 2 + - uid: 23074 + components: + - type: Transform + pos: -29.5,-7.5 + parent: 2 + - uid: 23075 + components: + - type: Transform + pos: -26.5,9.5 + parent: 2 + - uid: 23076 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,8.5 + parent: 2 + - uid: 23077 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,10.5 + parent: 2 + - uid: 23078 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,12.5 + parent: 2 + - uid: 23079 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,13.5 + parent: 2 + - uid: 23080 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -28.5,14.5 + parent: 2 + - uid: 23081 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,14.5 + parent: 2 + - uid: 23082 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -25.5,14.5 + parent: 2 + - uid: 23083 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -39.5,-23.5 + parent: 2 + - uid: 23084 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -40.5,-24.5 + parent: 2 + - uid: 23085 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -41.5,-24.5 + parent: 2 + - uid: 23086 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -43.5,-24.5 + parent: 2 + - uid: 23087 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -47.5,-24.5 + parent: 2 + - uid: 23090 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,-38.5 + parent: 2 + - uid: 23091 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,-50.5 + parent: 2 + - uid: 23092 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,-50.5 + parent: 2 + - uid: 23093 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,-50.5 + parent: 2 + - uid: 23094 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,-49.5 + parent: 2 + - uid: 23108 + components: + - type: Transform + pos: -19.5,-40.5 + parent: 2 + - uid: 23109 + components: + - type: Transform + pos: -23.5,-51.5 + parent: 2 + - uid: 23110 + components: + - type: Transform + pos: -23.5,-52.5 + parent: 2 + - uid: 23111 + components: + - type: Transform + pos: -21.5,-53.5 + parent: 2 + - uid: 23112 + components: + - type: Transform + pos: -18.5,-53.5 + parent: 2 + - uid: 23113 + components: + - type: Transform + pos: -18.5,-52.5 + parent: 2 + - uid: 23114 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,-53.5 + parent: 2 + - uid: 23115 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -27.5,-53.5 + parent: 2 + - uid: 23116 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -25.5,-53.5 + parent: 2 + - uid: 23117 + components: + - type: Transform + pos: -27.5,-54.5 + parent: 2 + - uid: 23118 + components: + - type: Transform + pos: -27.5,-56.5 + parent: 2 + - uid: 23119 + components: + - type: Transform + pos: -27.5,-57.5 + parent: 2 + - uid: 23120 + components: + - type: Transform + pos: -26.5,-57.5 + parent: 2 + - uid: 23121 + components: + - type: Transform + pos: -25.5,-57.5 + parent: 2 + - uid: 23122 + components: + - type: Transform + pos: -23.5,-57.5 + parent: 2 + - uid: 23123 + components: + - type: Transform + pos: -30.5,-56.5 + parent: 2 + - uid: 23124 + components: + - type: Transform + pos: -36.5,-57.5 + parent: 2 + - uid: 23125 + components: + - type: Transform + pos: -35.5,-57.5 + parent: 2 + - uid: 23126 + components: + - type: Transform + pos: -34.5,-57.5 + parent: 2 + - uid: 23127 + components: + - type: Transform + pos: -32.5,-57.5 + parent: 2 + - uid: 23128 + components: + - type: Transform + pos: -37.5,-61.5 + parent: 2 + - uid: 23129 + components: + - type: Transform + pos: -35.5,-61.5 + parent: 2 + - uid: 23130 + components: + - type: Transform + pos: -33.5,-61.5 + parent: 2 + - uid: 23131 + components: + - type: Transform + pos: -33.5,-60.5 + parent: 2 + - uid: 23132 + components: + - type: Transform + pos: -33.5,-58.5 + parent: 2 + - uid: 23133 + components: + - type: Transform + pos: -29.5,-57.5 + parent: 2 + - uid: 23134 + components: + - type: Transform + pos: -29.5,-59.5 + parent: 2 + - uid: 23135 + components: + - type: Transform + pos: -28.5,-59.5 + parent: 2 + - uid: 23136 + components: + - type: Transform + pos: -28.5,-60.5 + parent: 2 + - uid: 23137 + components: + - type: Transform + pos: -25.5,-60.5 + parent: 2 + - uid: 23138 + components: + - type: Transform + pos: -33.5,-65.5 + parent: 2 + - uid: 23139 + components: + - type: Transform + pos: -33.5,-64.5 + parent: 2 + - uid: 23140 + components: + - type: Transform + pos: -36.5,-65.5 + parent: 2 + - uid: 23141 + components: + - type: Transform + pos: -37.5,-65.5 + parent: 2 + - uid: 23142 + components: + - type: Transform + pos: -27.5,-65.5 + parent: 2 + - uid: 23143 + components: + - type: Transform + pos: -28.5,-65.5 + parent: 2 + - uid: 23144 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,-62.5 + parent: 2 + - uid: 23145 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,-64.5 + parent: 2 + - uid: 23146 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,-61.5 + parent: 2 + - uid: 23147 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,-65.5 + parent: 2 + - uid: 23148 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,-65.5 + parent: 2 + - uid: 23149 + components: + - type: Transform + pos: -28.5,-66.5 + parent: 2 + - uid: 23150 + components: + - type: Transform + pos: -27.5,-68.5 + parent: 2 + - uid: 23151 + components: + - type: Transform + pos: -25.5,-68.5 + parent: 2 + - uid: 23152 + components: + - type: Transform + pos: -24.5,-68.5 + parent: 2 + - uid: 23153 + components: + - type: Transform + pos: -24.5,-69.5 + parent: 2 + - uid: 23154 + components: + - type: Transform + pos: -22.5,-69.5 + parent: 2 + - uid: 23155 + components: + - type: Transform + pos: -21.5,-69.5 + parent: 2 + - uid: 23156 + components: + - type: Transform + pos: -21.5,-67.5 + parent: 2 + - uid: 23157 + components: + - type: Transform + pos: -24.5,-66.5 + parent: 2 + - uid: 23158 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,5.5 + parent: 2 + - uid: 23159 + components: + - type: Transform + pos: 14.5,19.5 + parent: 2 + - uid: 23160 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,1.5 + parent: 2 + - uid: 23161 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 44.5,4.5 + parent: 2 + - uid: 23162 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 44.5,5.5 + parent: 2 + - uid: 23163 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 44.5,9.5 + parent: 2 + - uid: 23164 + components: + - type: Transform + pos: 19.5,24.5 + parent: 2 + - uid: 23165 + components: + - type: Transform + pos: 14.5,21.5 + parent: 2 + - uid: 23166 + components: + - type: Transform + pos: 14.5,22.5 + parent: 2 + - uid: 23167 + components: + - type: Transform + pos: 14.5,24.5 + parent: 2 + - uid: 23168 + components: + - type: Transform + pos: 15.5,24.5 + parent: 2 + - uid: 23169 + components: + - type: Transform + pos: 16.5,24.5 + parent: 2 + - uid: 23170 + components: + - type: Transform + pos: 8.5,23.5 + parent: 2 + - uid: 23171 + components: + - type: Transform + pos: 9.5,23.5 + parent: 2 + - uid: 23172 + components: + - type: Transform + pos: 15.5,25.5 + parent: 2 + - uid: 23173 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,-35.5 + parent: 2 + - uid: 23174 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,-33.5 + parent: 2 + - uid: 23175 + components: + - type: Transform + pos: 9.5,-37.5 + parent: 2 + - uid: 23176 + components: + - type: Transform + pos: 9.5,-36.5 + parent: 2 + - uid: 23177 + components: + - type: Transform + pos: 17.5,-36.5 + parent: 2 + - uid: 23178 + components: + - type: Transform + pos: 17.5,-35.5 + parent: 2 + - uid: 23179 + components: + - type: Transform + pos: 19.5,-35.5 + parent: 2 + - uid: 23180 + components: + - type: Transform + pos: 21.5,-35.5 + parent: 2 + - uid: 23181 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,-34.5 + parent: 2 + - uid: 23182 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 29.5,-35.5 + parent: 2 + - uid: 23183 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,-35.5 + parent: 2 + - uid: 23184 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,-38.5 + parent: 2 + - uid: 23185 + components: + - type: Transform + pos: 37.5,-37.5 + parent: 2 + - uid: 23186 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,-56.5 + parent: 2 + - uid: 23187 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,-15.5 + parent: 2 + - uid: 23188 + components: + - type: Transform + pos: 45.5,-37.5 + parent: 2 + - uid: 23189 + components: + - type: Transform + pos: 48.5,-39.5 + parent: 2 + - uid: 23190 + components: + - type: Transform + pos: 48.5,-37.5 + parent: 2 + - uid: 23191 + components: + - type: Transform + pos: 42.5,-36.5 + parent: 2 + - uid: 23192 + components: + - type: Transform + pos: 48.5,-36.5 + parent: 2 + - uid: 23193 + components: + - type: Transform + pos: 39.5,-37.5 + parent: 2 + - uid: 23194 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,-2.5 + parent: 2 +- proto: WallWeaponCapacitorRecharger + entities: + - uid: 23195 + components: + - type: Transform + pos: -17.5,41.5 + parent: 2 + - uid: 23196 + components: + - type: Transform + pos: -1.5,71.5 + parent: 2 + - uid: 23197 + components: + - type: Transform + pos: -1.5,72.5 + parent: 2 + - uid: 23198 + components: + - type: Transform + pos: -1.5,69.5 + parent: 2 + - uid: 23199 + components: + - type: Transform + pos: 4.5,72.5 + parent: 2 + - uid: 23200 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,79.5 + parent: 2 + - uid: 23201 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,85.5 + parent: 2 + - uid: 23202 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,76.5 + parent: 2 + - uid: 23203 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,45.5 + parent: 2 +- proto: WallWood + entities: + - uid: 23204 + components: + - type: Transform + pos: -2.5,5.5 + parent: 2 + - uid: 23205 + components: + - type: Transform + pos: -1.5,5.5 + parent: 2 + - uid: 23206 + components: + - type: Transform + pos: 3.5,5.5 + parent: 2 + - uid: 23207 + components: + - type: Transform + pos: 4.5,5.5 + parent: 2 +- proto: WardrobeBlackFilled + entities: + - uid: 23208 + components: + - type: Transform + pos: 35.5,30.5 + parent: 2 + - uid: 23209 + components: + - type: Transform + pos: 42.5,45.5 + parent: 2 +- proto: WardrobeBlueFilled + entities: + - uid: 23210 + components: + - type: Transform + pos: 37.5,30.5 + parent: 2 +- proto: WardrobeChapelFilled + entities: + - uid: 23211 + components: + - type: Transform + pos: 14.5,40.5 + parent: 2 + - uid: 23212 + components: + - type: Transform + pos: 14.5,44.5 + parent: 2 + - uid: 23213 + components: + - type: Transform + pos: 17.5,42.5 + parent: 2 +- proto: WardrobeFormal + entities: + - uid: 23214 + components: + - type: Transform + pos: -35.5,-60.5 + parent: 2 + - uid: 23215 + components: + - type: Transform + pos: 18.5,23.5 + parent: 2 +- proto: WardrobeGeneticsFilled + entities: + - uid: 4562 + components: + - type: Transform + pos: 18.5,-32.5 + parent: 2 + - uid: 23216 + components: + - type: Transform + pos: 32.5,-31.5 + parent: 2 +- proto: WardrobeGreenFilled + entities: + - uid: 23217 + components: + - type: Transform + pos: 42.5,44.5 + parent: 2 +- proto: WardrobeGreyFilled + entities: + - uid: 23218 + components: + - type: Transform + pos: 33.5,26.5 + parent: 2 +- proto: WardrobeMedicalDoctorFilled + entities: + - uid: 8848 + components: + - type: Transform + pos: -30.5,39.5 + parent: 2 + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 8853 + - 8849 + - 8851 + - 8850 + - 8852 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null +- proto: WardrobeMixedFilled + entities: + - uid: 23219 + components: + - type: Transform + pos: 42.5,43.5 + parent: 2 +- proto: WardrobePinkFilled + entities: + - uid: 23220 + components: + - type: Transform + pos: 31.5,26.5 + parent: 2 +- proto: WardrobePrisonFilled + entities: + - uid: 23221 + components: + - type: Transform + pos: -12.5,24.5 + parent: 2 + - uid: 23222 + components: + - type: Transform + pos: -9.5,24.5 + parent: 2 + - uid: 23223 + components: + - type: Transform + pos: -9.5,23.5 + parent: 2 + - uid: 23224 + components: + - type: Transform + pos: -9.5,22.5 + parent: 2 + - uid: 23225 + components: + - type: Transform + pos: -3.5,24.5 + parent: 2 +- proto: WardrobeSalvageFilled + entities: + - uid: 23226 + components: + - type: Transform + pos: -36.5,-13.5 + parent: 2 +- proto: WardrobeVirologyFilled + entities: + - uid: 23227 + components: + - type: Transform + pos: 38.5,-29.5 + parent: 2 + - uid: 23228 + components: + - type: Transform + pos: 38.5,-30.5 + parent: 2 +- proto: WardrobeWhiteFilled + entities: + - uid: 23229 + components: + - type: Transform + pos: 32.5,26.5 + parent: 2 +- proto: WarningAir + entities: + - uid: 23230 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,-55.5 + parent: 2 +- proto: WarningN2 + entities: + - uid: 23231 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,-63.5 + parent: 2 +- proto: WarningN2O + entities: + - uid: 23232 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-63.5 + parent: 2 +- proto: WarningO2 + entities: + - uid: 23233 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,-59.5 + parent: 2 +- proto: WarningPlasma + entities: + - uid: 23234 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-59.5 + parent: 2 +- proto: WarningWaste + entities: + - uid: 23235 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,-55.5 + parent: 2 +- proto: WarpPoint + entities: + - uid: 23236 + components: + - type: Transform + pos: -80.5,-52.5 + parent: 2 + - type: WarpPoint + location: Lançador +- proto: WarpPointBombing + entities: + - uid: 23237 + components: + - type: Transform + pos: 20.5,31.5 + parent: 2 + - type: WarpPoint + location: Igreja +- proto: WaterCooler + entities: + - uid: 23238 + components: + - type: Transform + pos: 41.5,-16.5 + parent: 2 + - uid: 23239 + components: + - type: Transform + pos: 43.5,-20.5 + parent: 2 + - uid: 23240 + components: + - type: Transform + pos: 4.5,-27.5 + parent: 2 +- proto: WaterTankFull + entities: + - uid: 23241 + components: + - type: Transform + pos: 4.5,19.5 + parent: 2 + - uid: 23242 + components: + - type: Transform + pos: 3.5,-4.5 + parent: 2 + - uid: 23243 + components: + - type: Transform + pos: 9.5,19.5 + parent: 2 + - uid: 23244 + components: + - type: Transform + pos: 12.5,15.5 + parent: 2 + - uid: 23245 + components: + - type: Transform + pos: 10.5,-16.5 + parent: 2 + - uid: 23246 + components: + - type: Transform + pos: -21.5,4.5 + parent: 2 + - uid: 23247 + components: + - type: Transform + pos: -41.5,15.5 + parent: 2 + - uid: 23248 + components: + - type: Transform + pos: -41.5,-27.5 + parent: 2 + - uid: 23249 + components: + - type: Transform + pos: -10.5,-44.5 + parent: 2 + - uid: 23250 + components: + - type: Transform + pos: -24.5,-44.5 + parent: 2 + - uid: 23251 + components: + - type: Transform + pos: -19.5,-53.5 + parent: 2 + - uid: 23252 + components: + - type: Transform + pos: -12.5,-53.5 + parent: 2 + - uid: 23253 + components: + - type: Transform + pos: 22.5,-2.5 + parent: 2 + - uid: 23254 + components: + - type: Transform + pos: -32.5,21.5 + parent: 2 + - uid: 23255 + components: + - type: Transform + pos: -42.5,28.5 + parent: 2 + - uid: 23256 + components: + - type: Transform + pos: -2.5,45.5 + parent: 2 + - uid: 23257 + components: + - type: Transform + pos: 28.5,-36.5 + parent: 2 + - uid: 23258 + components: + - type: Transform + pos: 36.5,-41.5 + parent: 2 + - uid: 23259 + components: + - type: Transform + pos: 5.5,22.5 + parent: 2 + - uid: 23260 + components: + - type: Transform + pos: -12.5,-8.5 + parent: 2 + - uid: 23261 + components: + - type: Transform + pos: -2.5,-18.5 + parent: 2 +- proto: WaterTankHighCapacity + entities: + - uid: 23262 + components: + - type: Transform + pos: 37.5,19.5 + parent: 2 + - uid: 23263 + components: + - type: Transform + pos: 42.5,24.5 + parent: 2 + - uid: 23264 + components: + - type: Transform + pos: 26.5,27.5 + parent: 2 + - uid: 23265 + components: + - type: Transform + pos: 16.5,40.5 + parent: 2 + - uid: 23266 + components: + - type: Transform + pos: 17.5,-39.5 + parent: 2 + - uid: 23267 + components: + - type: Transform + pos: 29.5,-64.5 + parent: 2 +- proto: WaterVaporCanister + entities: + - uid: 23268 + components: + - type: Transform + pos: 38.5,-54.5 + parent: 2 + - uid: 23269 + components: + - type: Transform + pos: 18.5,-49.5 + parent: 2 + - uid: 23270 + components: + - type: Transform + pos: -27.5,-37.5 + parent: 2 +- proto: WeaponCapacitorRecharger + entities: + - uid: 23271 + components: + - type: Transform + pos: 30.5,-51.5 + parent: 2 + - uid: 23272 + components: + - type: Transform + pos: -10.5,15.5 + parent: 2 + - uid: 23273 + components: + - type: Transform + pos: -30.5,-34.5 + parent: 2 + - uid: 23274 + components: + - type: Transform + pos: -44.5,-36.5 + parent: 2 + - uid: 23275 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,-48.5 + parent: 2 + - uid: 23276 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,-4.5 + parent: 2 + - uid: 23277 + components: + - type: Transform + pos: 43.5,-16.5 + parent: 2 + - uid: 23278 + components: + - type: Transform + pos: -6.5,32.5 + parent: 2 + - uid: 23279 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,32.5 + parent: 2 + - uid: 23280 + components: + - type: Transform + pos: -8.5,35.5 + parent: 2 + - uid: 23281 + components: + - type: Transform + pos: -14.5,35.5 + parent: 2 + - uid: 23282 + components: + - type: Transform + pos: -26.5,43.5 + parent: 2 + - uid: 23283 + components: + - type: Transform + pos: -38.5,21.5 + parent: 2 + - uid: 23284 + components: + - type: Transform + pos: -8.5,54.5 + parent: 2 + - uid: 23285 + components: + - type: Transform + pos: 3.5,62.5 + parent: 2 + - uid: 23286 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,-19.5 + parent: 2 + - uid: 23287 + components: + - type: Transform + pos: 2.5,-50.5 + parent: 2 +- proto: WeaponCapacitorRechargerCircuitboard + entities: + - uid: 23288 + components: + - type: Transform + pos: -23.339558,-16.57305 + parent: 2 +- proto: WeaponCrusher + entities: + - uid: 23289 + components: + - type: Transform + pos: -38.34513,-15.679401 + parent: 2 +- proto: WeaponCrusherDagger + entities: + - uid: 23290 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.612595,-18.416832 + parent: 2 +- proto: WeaponCrusherGlaive + entities: + - uid: 23291 + components: + - type: Transform + pos: -38.401016,-15.497839 + parent: 2 +- proto: WeaponDisabler + entities: + - uid: 23292 + components: + - type: Transform + pos: -14.50828,35.01218 + parent: 2 +- proto: WeaponLaserCarbinePractice + entities: + - uid: 23293 + components: + - type: Transform + pos: -30.494923,-46.218987 + parent: 2 + - uid: 23294 + components: + - type: Transform + pos: -30.494923,-46.491714 + parent: 2 +- proto: WeaponPistolMk58 + entities: + - uid: 23296 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.636597,40.22487 + parent: 2 + - uid: 23297 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.477215,40.35222 + parent: 2 +- proto: WeaponRevolverDeckard + entities: + - uid: 23298 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.322659,40.44136 + parent: 2 +- proto: WeaponRifleLecter + entities: + - uid: 23299 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.715591,39.34965 + parent: 2 + - uid: 23300 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.562584,39.473816 + parent: 2 +- proto: WeaponShotgunEnforcer + entities: + - uid: 23301 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.466957,38.79569 + parent: 2 + - uid: 23302 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.30439,38.98671 + parent: 2 +- proto: WeaponShotgunImprovised + entities: + - uid: 23303 + components: + - type: Transform + pos: -7.4090977,11.732128 + parent: 2 +- proto: WeaponShotgunKammerer + entities: + - uid: 23304 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.734715,38.63332 + parent: 2 + - uid: 23305 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.591274,38.73838 + parent: 2 +- proto: WeaponSubMachineGunDrozd + entities: + - uid: 23306 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.438267,39.626633 + parent: 2 + - uid: 23307 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.294827,39.798553 + parent: 2 +- proto: WeaponTurretSyndicateBroken + entities: + - uid: 23308 + components: + - type: Transform + pos: -1.5,80.5 + parent: 2 + - uid: 23309 + components: + - type: Transform + pos: -1.5,74.5 + parent: 2 + - uid: 23310 + components: + - type: Transform + pos: 4.5,80.5 + parent: 2 + - uid: 23311 + components: + - type: Transform + pos: 4.5,74.5 + parent: 2 +- proto: WelderIndustrial + entities: + - uid: 23312 + components: + - type: Transform + pos: 7.649969,19.642628 + parent: 2 +- proto: WeldingFuelTankFull + entities: + - uid: 23313 + components: + - type: Transform + pos: 9.5,17.5 + parent: 2 + - uid: 23314 + components: + - type: Transform + pos: 12.5,9.5 + parent: 2 + - uid: 23315 + components: + - type: Transform + pos: 4.5,-15.5 + parent: 2 + - uid: 23316 + components: + - type: Transform + pos: -19.5,-4.5 + parent: 2 + - uid: 23317 + components: + - type: Transform + pos: -42.5,-27.5 + parent: 2 + - uid: 23318 + components: + - type: Transform + pos: -24.5,-16.5 + parent: 2 + - uid: 23319 + components: + - type: Transform + pos: -20.5,-53.5 + parent: 2 + - uid: 23320 + components: + - type: Transform + pos: -13.5,-53.5 + parent: 2 + - uid: 23321 + components: + - type: Transform + pos: 21.5,-2.5 + parent: 2 + - uid: 23322 + components: + - type: Transform + pos: 26.5,-9.5 + parent: 2 + - uid: 23323 + components: + - type: Transform + pos: 19.5,25.5 + parent: 2 + - uid: 23324 + components: + - type: Transform + pos: -23.5,19.5 + parent: 2 + - uid: 23325 + components: + - type: Transform + pos: 36.5,-33.5 + parent: 2 + - uid: 23326 + components: + - type: Transform + pos: 0.5,-59.5 + parent: 2 + - uid: 23327 + components: + - type: Transform + pos: 37.5,-46.5 + parent: 2 + - uid: 23328 + components: + - type: Transform + pos: 10.5,22.5 + parent: 2 + - uid: 23329 + components: + - type: Transform + pos: 6.5,22.5 + parent: 2 + - uid: 23330 + components: + - type: Transform + pos: -2.5,44.5 + parent: 2 + - uid: 23331 + components: + - type: Transform + pos: -13.5,-8.5 + parent: 2 + - uid: 23332 + components: + - type: Transform + pos: -3.5,-18.5 + parent: 2 +- proto: WeldingFuelTankHighCapacity + entities: + - uid: 23333 + components: + - type: Transform + pos: 9.5,80.5 + parent: 2 +- proto: Windoor + entities: + - uid: 23334 + components: + - type: Transform + pos: 40.5,-37.5 + parent: 2 + - uid: 23335 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,-37.5 + parent: 2 + - uid: 23336 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,-13.5 + parent: 2 + - uid: 23337 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,-13.5 + parent: 2 + - uid: 23338 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 39.5,1.5 + parent: 2 + - uid: 23339 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,47.5 + parent: 2 + - uid: 23340 + components: + - type: Transform + pos: 30.5,-22.5 + parent: 2 + - uid: 23341 + components: + - type: Transform + pos: 32.5,-22.5 + parent: 2 + - uid: 23342 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 39.5,-26.5 + parent: 2 + - uid: 23343 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 16.5,-31.5 + parent: 2 + - uid: 23344 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 17.5,-29.5 + parent: 2 + - uid: 23345 + components: + - type: Transform + pos: 46.5,-37.5 + parent: 2 + - uid: 23346 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,-37.5 + parent: 2 + - uid: 23347 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,4.5 + parent: 2 +- proto: WindoorBarKitchenLocked + entities: + - uid: 23348 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,13.5 + parent: 2 + - uid: 23349 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,14.5 + parent: 2 +- proto: WindoorBarLocked + entities: + - uid: 23350 + components: + - type: Transform + pos: 20.5,12.5 + parent: 2 +- proto: WindoorCargoLocked + entities: + - uid: 23351 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,6.5 + parent: 2 + - uid: 23352 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,9.5 + parent: 2 + - uid: 23353 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,10.5 + parent: 2 + - uid: 23354 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,12.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19976 + - uid: 23355 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -41.5,12.5 + parent: 2 + - type: DeviceLinkSink + links: + - 19976 + - type: Door + secondsUntilStateChange: -190235.81 + state: Opening + - uid: 23356 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -39.5,-6.5 + parent: 2 +- proto: WindoorChapelLocked + entities: + - uid: 23357 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 13.5,39.5 + parent: 2 + - uid: 23358 + components: + - type: Transform + pos: 20.5,46.5 + parent: 2 +- proto: WindoorHydroponicsLocked + entities: + - uid: 23359 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,15.5 + parent: 2 + - uid: 23360 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,14.5 + parent: 2 +- proto: WindoorKitchenLocked + entities: + - uid: 23361 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,22.5 + parent: 2 + - uid: 23362 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,15.5 + parent: 2 + - uid: 23363 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,15.5 + parent: 2 + - uid: 23364 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 26.5,15.5 + parent: 2 + - uid: 23365 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,16.5 + parent: 2 + - uid: 23366 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,15.5 + parent: 2 + - uid: 23367 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,15.5 + parent: 2 +- proto: WindoorSecure + entities: + - uid: 23368 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -42.5,15.5 + parent: 2 +- proto: WindoorSecureArmoryLocked + entities: + - uid: 23369 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,32.5 + parent: 2 + - uid: 23370 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,38.5 + parent: 2 + - uid: 23371 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,39.5 + parent: 2 + - uid: 23372 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,40.5 + parent: 2 +- proto: WindoorSecureAtmosphericsLocked + entities: + - uid: 23373 + components: + - type: Transform + pos: 16.5,-38.5 + parent: 2 +- proto: WindoorSecureChemistryLocked + entities: + - uid: 23374 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,-22.5 + parent: 2 + - uid: 23375 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,-22.5 + parent: 2 + - uid: 23376 + components: + - type: Transform + pos: 6.5,-28.5 + parent: 2 + - uid: 23377 + components: + - type: Transform + pos: 5.5,-28.5 + parent: 2 + - uid: 23378 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.5,-30.5 + parent: 2 +- proto: WindoorSecureCommandLocked + entities: + - uid: 23379 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,-35.5 + parent: 2 + - uid: 23380 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,-24.5 + parent: 2 + - uid: 23381 + components: + - type: Transform + pos: -4.5,-20.5 + parent: 2 + - uid: 23382 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,29.5 + parent: 2 + - uid: 23383 + components: + - type: Transform + pos: 4.5,44.5 + parent: 2 + - uid: 23384 + components: + - type: Transform + pos: 5.5,44.5 + parent: 2 + - uid: 23385 + components: + - type: Transform + pos: 7.5,44.5 + parent: 2 + - uid: 23386 + components: + - type: Transform + pos: 8.5,44.5 + parent: 2 + - uid: 23387 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,53.5 + parent: 2 + - uid: 23388 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,69.5 + parent: 2 + - uid: 23389 + components: + - type: Transform + pos: 3.5,72.5 + parent: 2 + - uid: 23390 + components: + - type: Transform + pos: -0.5,72.5 + parent: 2 + - uid: 23391 + components: + - type: Transform + pos: -4.5,85.5 + parent: 2 + - uid: 23392 + components: + - type: Transform + pos: 8.5,25.5 + parent: 2 +- proto: WindoorSecureEngineeringLocked + entities: + - uid: 23393 + components: + - type: Transform + pos: -2.5,-44.5 + parent: 2 + - uid: 23394 + components: + - type: Transform + pos: -0.5,-43.5 + parent: 2 + - uid: 23395 + components: + - type: Transform + pos: 0.5,-43.5 + parent: 2 +- proto: WindoorSecureHeadOfPersonnelLocked + entities: + - uid: 23396 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,47.5 + parent: 2 +- proto: WindoorSecureJusticeLocked + entities: + - uid: 23436 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,15.5 + parent: 2 + - uid: 23437 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,10.5 + parent: 2 +- proto: WindoorSecureMedicalLocked + entities: + - uid: 23397 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,-28.5 + parent: 2 + - uid: 23398 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 16.5,-19.5 + parent: 2 + - uid: 23399 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 47.5,-34.5 + parent: 2 + - uid: 23400 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,-34.5 + parent: 2 + - uid: 23401 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 45.5,-34.5 + parent: 2 + - uid: 23402 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,-34.5 + parent: 2 + - uid: 23403 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 45.5,-29.5 + parent: 2 + - uid: 23404 + components: + - type: Transform + pos: 39.5,-26.5 + parent: 2 + - uid: 23405 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,-20.5 + parent: 2 + - uid: 23406 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,-20.5 + parent: 2 + - uid: 23407 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 12.5,-32.5 + parent: 2 +- proto: WindoorSecureSalvageLocked + entities: + - uid: 23408 + components: + - type: Transform + pos: -39.5,-6.5 + parent: 2 + - uid: 23409 + components: + - type: Transform + pos: -39.5,-6.5 + parent: 2 +- proto: WindoorSecureScienceLocked + entities: + - uid: 23410 + components: + - type: Transform + pos: -33.5,-25.5 + parent: 2 + - uid: 23411 + components: + - type: Transform + pos: -32.5,-25.5 + parent: 2 + - uid: 23412 + components: + - type: Transform + pos: -34.5,-25.5 + parent: 2 + - uid: 23413 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -35.5,-33.5 + parent: 2 + - uid: 23414 + components: + - type: Transform + pos: -20.5,-16.5 + parent: 2 + - uid: 23415 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,-17.5 + parent: 2 + - uid: 23416 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,-21.5 + parent: 2 + - uid: 23417 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,-33.5 + parent: 2 + - uid: 23418 + components: + - type: Transform + pos: -11.5,-34.5 + parent: 2 + - uid: 23419 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-31.5 + parent: 2 + - uid: 23420 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,-36.5 + parent: 2 + - uid: 23421 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,-36.5 + parent: 2 + - uid: 23422 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,-39.5 + parent: 2 + - uid: 23423 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,-42.5 + parent: 2 + - uid: 23424 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,-45.5 + parent: 2 + - uid: 23425 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,-48.5 + parent: 2 + - uid: 23426 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,-48.5 + parent: 2 + - uid: 23427 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,-45.5 + parent: 2 + - uid: 23428 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,-42.5 + parent: 2 + - uid: 23429 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,-39.5 + parent: 2 + - uid: 23430 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,-42.5 + parent: 2 + - uid: 23431 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,-42.5 + parent: 2 + - uid: 23432 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -41.5,-51.5 + parent: 2 + - uid: 23433 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -42.5,-52.5 + parent: 2 + - uid: 23434 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -29.5,-47.5 + parent: 2 +- proto: WindoorSecureSecurityLawyerLocked + entities: + - uid: 23435 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,15.5 + parent: 2 +- proto: WindoorSecureSecurityLocked + entities: + - uid: 23438 + components: + - type: Transform + pos: 29.5,-1.5 + parent: 2 + - uid: 23439 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -27.5,27.5 + parent: 2 + - uid: 23440 + components: + - type: Transform + pos: -19.5,26.5 + parent: 2 + - uid: 23441 + components: + - type: Transform + pos: -20.5,26.5 + parent: 2 + - uid: 23442 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,25.5 + parent: 2 + - type: DeviceLinkSink + links: + - 1214 + - uid: 23443 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,25.5 + parent: 2 + - type: DeviceLinkSink + links: + - 1216 + - uid: 23444 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,25.5 + parent: 2 + - type: DeviceLinkSink + links: + - 1215 + - uid: 23445 + components: + - type: Transform + pos: -7.5,25.5 + parent: 2 + - type: DeviceLinkSink + links: + - 1215 + - uid: 23446 + components: + - type: Transform + pos: -6.5,30.5 + parent: 2 + - uid: 23447 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,32.5 + parent: 2 + - uid: 23448 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,33.5 + parent: 2 + - uid: 23449 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,33.5 + parent: 2 + - uid: 23450 + components: + - type: Transform + pos: -30.5,25.5 + parent: 2 + - uid: 23451 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -38.5,20.5 + parent: 2 + - uid: 23452 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,-19.5 + parent: 2 + - uid: 23453 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,-49.5 + parent: 2 +- proto: WindoorServiceLocked + entities: + - uid: 23454 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 17.5,20.5 + parent: 2 +- proto: Window + entities: + - uid: 8730 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 27.5,13.5 + parent: 2 + - uid: 22680 + components: + - type: Transform + pos: -24.5,-1.5 + parent: 2 + - uid: 23455 + components: + - type: Transform + pos: -12.5,2.5 + parent: 2 + - uid: 23456 + components: + - type: Transform + pos: -12.5,-0.5 + parent: 2 + - uid: 23457 + components: + - type: Transform + pos: -0.5,14.5 + parent: 2 + - uid: 23458 + components: + - type: Transform + pos: 2.5,14.5 + parent: 2 + - uid: 23459 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,2.5 + parent: 2 + - uid: 23460 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,-0.5 + parent: 2 + - uid: 23461 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-12.5 + parent: 2 + - uid: 23462 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-12.5 + parent: 2 + - uid: 23463 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -41.5,13.5 + parent: 2 + - uid: 23464 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -42.5,13.5 + parent: 2 + - uid: 23465 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -43.5,13.5 + parent: 2 + - uid: 23466 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -44.5,13.5 + parent: 2 + - uid: 23468 + components: + - type: Transform + pos: -25.5,-1.5 + parent: 2 + - uid: 23469 + components: + - type: Transform + pos: -26.5,-1.5 + parent: 2 + - uid: 23470 + components: + - type: Transform + pos: -27.5,-1.5 + parent: 2 + - uid: 23471 + components: + - type: Transform + pos: -31.5,-3.5 + parent: 2 + - uid: 23472 + components: + - type: Transform + pos: -31.5,-4.5 + parent: 2 + - uid: 23473 + components: + - type: Transform + pos: -31.5,-5.5 + parent: 2 + - uid: 23474 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -39.5,-16.5 + parent: 2 + - uid: 23475 + components: + - type: Transform + pos: -23.5,-25.5 + parent: 2 + - uid: 23476 + components: + - type: Transform + pos: -21.5,-25.5 + parent: 2 + - uid: 23477 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,-48.5 + parent: 2 + - uid: 23478 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,-46.5 + parent: 2 + - uid: 23479 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.5,-1.5 + parent: 2 + - uid: 23480 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 36.5,-1.5 + parent: 2 + - uid: 23481 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,0.5 + parent: 2 + - uid: 23482 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,1.5 + parent: 2 + - uid: 23483 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,2.5 + parent: 2 + - uid: 23484 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 23.5,3.5 + parent: 2 + - uid: 23485 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 22.5,3.5 + parent: 2 + - uid: 23486 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,3.5 + parent: 2 + - uid: 23487 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,6.5 + parent: 2 + - uid: 23488 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,8.5 + parent: 2 + - uid: 23490 + components: + - type: Transform + pos: 34.5,12.5 + parent: 2 + - uid: 23491 + components: + - type: Transform + pos: 33.5,12.5 + parent: 2 + - uid: 23492 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,21.5 + parent: 2 + - uid: 23493 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 28.5,21.5 + parent: 2 + - uid: 23494 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 39.5,17.5 + parent: 2 + - uid: 23495 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,22.5 + parent: 2 + - uid: 23496 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,24.5 + parent: 2 + - uid: 23497 + components: + - type: Transform + pos: 26.5,30.5 + parent: 2 + - uid: 23498 + components: + - type: Transform + pos: 26.5,32.5 + parent: 2 + - uid: 23499 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,-20.5 + parent: 2 + - uid: 23500 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,-21.5 + parent: 2 + - uid: 23501 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,-22.5 + parent: 2 + - uid: 23502 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,-23.5 + parent: 2 + - uid: 23503 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,-25.5 + parent: 2 + - uid: 23504 + components: + - type: Transform + pos: 31.5,-26.5 + parent: 2 + - uid: 23505 + components: + - type: Transform + pos: 29.5,-27.5 + parent: 2 + - uid: 23506 + components: + - type: Transform + pos: 29.5,-28.5 + parent: 2 + - uid: 23507 + components: + - type: Transform + pos: 29.5,-29.5 + parent: 2 + - uid: 23508 + components: + - type: Transform + pos: 29.5,-31.5 + parent: 2 + - uid: 23509 + components: + - type: Transform + pos: 15.5,-30.5 + parent: 2 + - uid: 23510 + components: + - type: Transform + pos: 15.5,-31.5 + parent: 2 + - uid: 23511 + components: + - type: Transform + pos: 15.5,-32.5 + parent: 2 + - uid: 23512 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -39.5,-17.5 + parent: 2 + - uid: 23513 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -39.5,-19.5 + parent: 2 +- proto: WindowDirectional + entities: + - uid: 23514 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,4.5 + parent: 2 + - uid: 23515 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,5.5 + parent: 2 + - uid: 23516 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,5.5 + parent: 2 + - uid: 23517 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,4.5 + parent: 2 + - uid: 23518 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 20.5,4.5 + parent: 2 + - uid: 23519 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 20.5,5.5 + parent: 2 + - uid: 23520 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,5.5 + parent: 2 + - uid: 23521 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,4.5 + parent: 2 + - uid: 23522 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 26.5,4.5 + parent: 2 + - uid: 23523 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 26.5,5.5 + parent: 2 + - uid: 23524 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,4.5 + parent: 2 + - uid: 23525 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,5.5 + parent: 2 + - uid: 23526 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 38.5,1.5 + parent: 2 + - uid: 23527 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,1.5 + parent: 2 + - uid: 23528 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,26.5 + parent: 2 + - uid: 23529 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 33.5,26.5 + parent: 2 + - uid: 23530 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,26.5 + parent: 2 + - uid: 23531 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 37.5,26.5 + parent: 2 + - uid: 23532 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,30.5 + parent: 2 + - uid: 23533 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 33.5,30.5 + parent: 2 + - uid: 23534 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,30.5 + parent: 2 + - uid: 23535 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 37.5,30.5 + parent: 2 + - uid: 23536 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 13.5,40.5 + parent: 2 + - uid: 23537 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 13.5,38.5 + parent: 2 + - uid: 23538 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,30.5 + parent: 2 + - uid: 23539 + components: + - type: Transform + pos: -30.5,37.5 + parent: 2 + - uid: 23540 + components: + - type: Transform + pos: -28.5,37.5 + parent: 2 + - uid: 23541 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,38.5 + parent: 2 + - uid: 23542 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,38.5 + parent: 2 + - uid: 23543 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,38.5 + parent: 2 + - uid: 23544 + components: + - type: Transform + pos: -3.5,39.5 + parent: 2 + - uid: 23545 + components: + - type: Transform + pos: -4.5,39.5 + parent: 2 + - uid: 23546 + components: + - type: Transform + pos: -5.5,39.5 + parent: 2 + - uid: 23547 + components: + - type: Transform + pos: 43.5,-21.5 + parent: 2 + - uid: 23548 + components: + - type: Transform + pos: 45.5,-21.5 + parent: 2 + - uid: 23549 + components: + - type: Transform + pos: 46.5,-21.5 + parent: 2 + - uid: 23550 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 45.5,-34.5 + parent: 2 + - uid: 23551 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 46.5,-34.5 + parent: 2 + - uid: 23552 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 47.5,-34.5 + parent: 2 + - uid: 23553 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,-27.5 + parent: 2 + - uid: 23554 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 16.5,-32.5 + parent: 2 + - uid: 23555 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 16.5,-30.5 + parent: 2 + - uid: 23556 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,-23.5 + parent: 2 + - uid: 23557 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,-23.5 + parent: 2 + - uid: 23558 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,-23.5 + parent: 2 + - uid: 23559 + components: + - type: Transform + pos: 8.5,-25.5 + parent: 2 + - uid: 23560 + components: + - type: Transform + pos: 7.5,-25.5 + parent: 2 + - uid: 23561 + components: + - type: Transform + pos: 6.5,-25.5 + parent: 2 + - uid: 23562 + components: + - type: Transform + pos: 5.5,-25.5 + parent: 2 + - uid: 23563 + components: + - type: Transform + pos: 9.5,-25.5 + parent: 2 + - uid: 23564 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,-23.5 + parent: 2 + - uid: 23565 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,-23.5 + parent: 2 + - uid: 23566 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,-27.5 + parent: 2 + - uid: 23567 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,-27.5 + parent: 2 + - uid: 23568 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,-27.5 + parent: 2 + - uid: 23569 + components: + - type: Transform + pos: 8.5,-21.5 + parent: 2 + - uid: 23570 + components: + - type: Transform + pos: 6.5,-21.5 + parent: 2 + - uid: 23571 + components: + - type: Transform + pos: 7.5,-21.5 + parent: 2 + - uid: 23572 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,-20.5 + parent: 2 + - uid: 23573 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,-21.5 + parent: 2 + - uid: 23574 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,-22.5 + parent: 2 + - uid: 23575 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,21.5 + parent: 2 + - uid: 23576 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 18.5,21.5 + parent: 2 + - uid: 23577 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 17.5,21.5 + parent: 2 + - uid: 23578 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 17.5,21.5 + parent: 2 +- proto: WindowFrostedDirectional + entities: + - uid: 23579 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,85.5 + parent: 2 + - uid: 23580 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,74.5 + parent: 2 + - uid: 23581 + components: + - type: Transform + pos: -1.5,80.5 + parent: 2 + - uid: 23582 + components: + - type: Transform + pos: 4.5,80.5 + parent: 2 + - uid: 23583 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,74.5 + parent: 2 +- proto: WindowReinforcedDirectional + entities: + - uid: 22376 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-68.5 + parent: 2 + - uid: 23024 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-69.5 + parent: 2 + - uid: 23584 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-1.5 + parent: 2 + - uid: 23585 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,-2.5 + parent: 2 + - uid: 23586 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,-2.5 + parent: 2 + - uid: 23587 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,-2.5 + parent: 2 + - uid: 23588 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,-3.5 + parent: 2 + - uid: 23589 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,-3.5 + parent: 2 + - uid: 23590 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,-4.5 + parent: 2 + - uid: 23591 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,-5.5 + parent: 2 + - uid: 23592 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,-5.5 + parent: 2 + - uid: 23593 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,-6.5 + parent: 2 + - uid: 23594 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,-6.5 + parent: 2 + - uid: 23595 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-6.5 + parent: 2 + - uid: 23596 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-7.5 + parent: 2 + - uid: 23597 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-7.5 + parent: 2 + - uid: 23598 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-8.5 + parent: 2 + - uid: 23599 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,-8.5 + parent: 2 + - uid: 23600 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,-7.5 + parent: 2 + - uid: 23601 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,-7.5 + parent: 2 + - uid: 23602 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,-6.5 + parent: 2 + - uid: 23603 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,-6.5 + parent: 2 + - uid: 23604 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,-6.5 + parent: 2 + - uid: 23605 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,-5.5 + parent: 2 + - uid: 23606 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,-5.5 + parent: 2 + - uid: 23607 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,-5.5 + parent: 2 + - uid: 23608 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,-4.5 + parent: 2 + - uid: 23609 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,-3.5 + parent: 2 + - uid: 23610 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,-3.5 + parent: 2 + - uid: 23611 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,-2.5 + parent: 2 + - uid: 23612 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,-2.5 + parent: 2 + - uid: 23613 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,-1.5 + parent: 2 + - uid: 23614 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,3.5 + parent: 2 + - uid: 23615 + components: + - type: Transform + pos: -7.5,4.5 + parent: 2 + - uid: 23616 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,4.5 + parent: 2 + - uid: 23617 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,5.5 + parent: 2 + - uid: 23618 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,6.5 + parent: 2 + - uid: 23619 + components: + - type: Transform + pos: -6.5,5.5 + parent: 2 + - uid: 23620 + components: + - type: Transform + pos: -5.5,7.5 + parent: 2 + - uid: 23621 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,7.5 + parent: 2 + - uid: 23622 + components: + - type: Transform + pos: -4.5,8.5 + parent: 2 + - uid: 23623 + components: + - type: Transform + pos: -3.5,8.5 + parent: 2 + - uid: 23624 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,8.5 + parent: 2 + - uid: 23625 + components: + - type: Transform + pos: -2.5,9.5 + parent: 2 + - uid: 23626 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,9.5 + parent: 2 + - uid: 23627 + components: + - type: Transform + pos: -1.5,10.5 + parent: 2 + - uid: 23628 + components: + - type: Transform + pos: 3.5,10.5 + parent: 2 + - uid: 23629 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,9.5 + parent: 2 + - uid: 23630 + components: + - type: Transform + pos: 4.5,9.5 + parent: 2 + - uid: 23631 + components: + - type: Transform + pos: 5.5,8.5 + parent: 2 + - uid: 23632 + components: + - type: Transform + pos: 6.5,8.5 + parent: 2 + - uid: 23633 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,8.5 + parent: 2 + - uid: 23634 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,7.5 + parent: 2 + - uid: 23635 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,7.5 + parent: 2 + - uid: 23636 + components: + - type: Transform + pos: 7.5,7.5 + parent: 2 + - uid: 23637 + components: + - type: Transform + pos: 8.5,5.5 + parent: 2 + - uid: 23638 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,5.5 + parent: 2 + - uid: 23639 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,6.5 + parent: 2 + - uid: 23640 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,4.5 + parent: 2 + - uid: 23641 + components: + - type: Transform + pos: 9.5,4.5 + parent: 2 + - uid: 23642 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,3.5 + parent: 2 + - uid: 23643 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,14.5 + parent: 2 + - uid: 23644 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,14.5 + parent: 2 + - uid: 23645 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,16.5 + parent: 2 + - uid: 23646 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,16.5 + parent: 2 + - uid: 23647 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,14.5 + parent: 2 + - uid: 23648 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,10.5 + parent: 2 + - uid: 23649 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,10.5 + parent: 2 + - uid: 23650 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,10.5 + parent: 2 + - uid: 23651 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,10.5 + parent: 2 + - uid: 23652 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -28.5,-2.5 + parent: 2 + - uid: 23653 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -28.5,-2.5 + parent: 2 + - uid: 23654 + components: + - type: Transform + pos: -28.5,-2.5 + parent: 2 + - uid: 23655 + components: + - type: Transform + pos: -28.5,-2.5 + parent: 2 + - uid: 23656 + components: + - type: Transform + pos: -24.5,-2.5 + parent: 2 + - uid: 23657 + components: + - type: Transform + pos: -23.5,-2.5 + parent: 2 + - uid: 23658 + components: + - type: Transform + pos: -35.5,11.5 + parent: 2 + - uid: 23659 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,6.5 + parent: 2 + - uid: 23660 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.5,8.5 + parent: 2 + - uid: 23661 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,8.5 + parent: 2 + - uid: 23662 + components: + - type: Transform + pos: -36.5,8.5 + parent: 2 + - uid: 23663 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -44.5,15.5 + parent: 2 + - uid: 23664 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -43.5,15.5 + parent: 2 + - uid: 23665 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -41.5,15.5 + parent: 2 + - uid: 23666 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,-25.5 + parent: 2 + - uid: 23667 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -33.5,-25.5 + parent: 2 + - uid: 23668 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -25.5,-35.5 + parent: 2 + - uid: 23669 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,-33.5 + parent: 2 + - uid: 23670 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,-35.5 + parent: 2 + - uid: 23671 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,-16.5 + parent: 2 + - uid: 23672 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,-16.5 + parent: 2 + - uid: 23673 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,-18.5 + parent: 2 + - uid: 23674 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,-20.5 + parent: 2 + - uid: 23675 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,-20.5 + parent: 2 + - uid: 23676 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,-24.5 + parent: 2 + - uid: 23677 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,-24.5 + parent: 2 + - uid: 23678 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,-34.5 + parent: 2 + - uid: 23679 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,-34.5 + parent: 2 + - uid: 23680 + components: + - type: Transform + pos: -13.5,-35.5 + parent: 2 + - uid: 23681 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,-37.5 + parent: 2 + - uid: 23682 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,-37.5 + parent: 2 + - uid: 23683 + components: + - type: Transform + pos: -15.5,-37.5 + parent: 2 + - uid: 23684 + components: + - type: Transform + pos: -16.5,-37.5 + parent: 2 + - uid: 23685 + components: + - type: Transform + pos: -17.5,-37.5 + parent: 2 + - uid: 23686 + components: + - type: Transform + pos: -17.5,-40.5 + parent: 2 + - uid: 23687 + components: + - type: Transform + pos: -16.5,-40.5 + parent: 2 + - uid: 23688 + components: + - type: Transform + pos: -15.5,-40.5 + parent: 2 + - uid: 23689 + components: + - type: Transform + pos: -17.5,-43.5 + parent: 2 + - uid: 23690 + components: + - type: Transform + pos: -16.5,-43.5 + parent: 2 + - uid: 23691 + components: + - type: Transform + pos: -15.5,-43.5 + parent: 2 + - uid: 23692 + components: + - type: Transform + pos: -17.5,-46.5 + parent: 2 + - uid: 23693 + components: + - type: Transform + pos: -16.5,-46.5 + parent: 2 + - uid: 23694 + components: + - type: Transform + pos: -15.5,-46.5 + parent: 2 + - uid: 23695 + components: + - type: Transform + pos: -13.5,-38.5 + parent: 2 + - uid: 23696 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,-40.5 + parent: 2 + - uid: 23697 + components: + - type: Transform + pos: -13.5,-41.5 + parent: 2 + - uid: 23698 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,-43.5 + parent: 2 + - uid: 23699 + components: + - type: Transform + pos: -13.5,-44.5 + parent: 2 + - uid: 23700 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,-46.5 + parent: 2 + - uid: 23701 + components: + - type: Transform + pos: -13.5,-47.5 + parent: 2 + - uid: 23702 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,-49.5 + parent: 2 + - uid: 23703 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,-39.5 + parent: 2 + - uid: 23704 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,-40.5 + parent: 2 + - uid: 23705 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,-41.5 + parent: 2 + - uid: 23706 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,-43.5 + parent: 2 + - uid: 23707 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,-44.5 + parent: 2 + - uid: 23708 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,-45.5 + parent: 2 + - uid: 23709 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -44.5,-29.5 + parent: 2 + - uid: 23710 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -44.5,-30.5 + parent: 2 + - uid: 23711 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -42.5,-29.5 + parent: 2 + - uid: 23712 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -42.5,-30.5 + parent: 2 + - uid: 23713 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,-45.5 + parent: 2 + - uid: 23714 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,-45.5 + parent: 2 + - uid: 23715 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,-45.5 + parent: 2 + - uid: 23716 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 20.5,12.5 + parent: 2 + - uid: 23717 + components: + - type: Transform + pos: 21.5,12.5 + parent: 2 + - uid: 23718 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,23.5 + parent: 2 + - uid: 23719 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-9.5 + parent: 2 + - uid: 23720 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-8.5 + parent: 2 + - uid: 23721 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-7.5 + parent: 2 + - uid: 23722 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-6.5 + parent: 2 + - uid: 23723 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 34.5,-6.5 + parent: 2 + - uid: 23724 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,-6.5 + parent: 2 + - uid: 23725 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 35.5,-7.5 + parent: 2 + - uid: 23726 + components: + - type: Transform + pos: 35.5,-8.5 + parent: 2 + - uid: 23727 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,-9.5 + parent: 2 + - uid: 23728 + components: + - type: Transform + pos: 34.5,-9.5 + parent: 2 + - uid: 23729 + components: + - type: Transform + pos: 37.5,-8.5 + parent: 2 + - uid: 23730 + components: + - type: Transform + pos: 38.5,-8.5 + parent: 2 + - uid: 23731 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,-7.5 + parent: 2 + - uid: 23732 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 38.5,-7.5 + parent: 2 + - uid: 23733 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,-7.5 + parent: 2 + - uid: 23734 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,-6.5 + parent: 2 + - uid: 23735 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,-6.5 + parent: 2 + - uid: 23736 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,-6.5 + parent: 2 + - uid: 23737 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 41.5,-6.5 + parent: 2 + - uid: 23738 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 41.5,-7.5 + parent: 2 + - uid: 23739 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 41.5,-8.5 + parent: 2 + - uid: 23740 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 41.5,-9.5 + parent: 2 + - uid: 23741 + components: + - type: Transform + pos: 41.5,-9.5 + parent: 2 + - uid: 23742 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,-9.5 + parent: 2 + - uid: 23743 + components: + - type: Transform + pos: 40.5,-8.5 + parent: 2 + - uid: 23744 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 32.5,-2.5 + parent: 2 + - uid: 23745 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 32.5,-3.5 + parent: 2 + - uid: 23746 + components: + - type: Transform + pos: 32.5,-3.5 + parent: 2 + - uid: 23747 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,-2.5 + parent: 2 + - uid: 23748 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,-3.5 + parent: 2 + - uid: 23749 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 40.5,-3.5 + parent: 2 + - uid: 23750 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 40.5,-2.5 + parent: 2 + - uid: 23751 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,32.5 + parent: 2 + - uid: 23752 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,34.5 + parent: 2 + - uid: 23753 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,32.5 + parent: 2 + - uid: 23754 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,34.5 + parent: 2 + - uid: 23755 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,26.5 + parent: 2 + - uid: 23756 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,25.5 + parent: 2 + - uid: 23757 + components: + - type: Transform + pos: -31.5,25.5 + parent: 2 + - uid: 23758 + components: + - type: Transform + pos: -29.5,25.5 + parent: 2 + - uid: 23759 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -38.5,19.5 + parent: 2 + - uid: 23760 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -38.5,21.5 + parent: 2 + - uid: 23761 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -38.5,22.5 + parent: 2 + - uid: 23762 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,32.5 + parent: 2 + - uid: 23763 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,31.5 + parent: 2 + - uid: 23764 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,30.5 + parent: 2 + - uid: 23765 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,44.5 + parent: 2 + - uid: 23766 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,44.5 + parent: 2 + - uid: 23767 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,52.5 + parent: 2 + - uid: 23768 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,53.5 + parent: 2 + - uid: 23769 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,53.5 + parent: 2 + - uid: 23770 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,53.5 + parent: 2 + - uid: 23771 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,53.5 + parent: 2 + - uid: 23772 + components: + - type: Transform + pos: 3.5,47.5 + parent: 2 + - uid: 23773 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,49.5 + parent: 2 + - uid: 23774 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,49.5 + parent: 2 + - uid: 23775 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,48.5 + parent: 2 + - uid: 23776 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,47.5 + parent: 2 + - uid: 23777 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,47.5 + parent: 2 + - uid: 23778 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,48.5 + parent: 2 + - uid: 23779 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,49.5 + parent: 2 + - uid: 23780 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,56.5 + parent: 2 + - uid: 23781 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,55.5 + parent: 2 + - uid: 23782 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,56.5 + parent: 2 + - uid: 23783 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,55.5 + parent: 2 + - uid: 23784 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,62.5 + parent: 2 + - uid: 23785 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,62.5 + parent: 2 + - uid: 23786 + components: + - type: Transform + pos: 6.5,62.5 + parent: 2 + - uid: 23787 + components: + - type: Transform + pos: -4.5,62.5 + parent: 2 + - uid: 23788 + components: + - type: Transform + pos: -4.5,68.5 + parent: 2 + - uid: 23789 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,68.5 + parent: 2 + - uid: 23790 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,68.5 + parent: 2 + - uid: 23791 + components: + - type: Transform + pos: 6.5,68.5 + parent: 2 + - uid: 23792 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,69.5 + parent: 2 + - uid: 23793 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,69.5 + parent: 2 + - uid: 23794 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,72.5 + parent: 2 + - uid: 23795 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,72.5 + parent: 2 + - uid: 23796 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 16.5,-20.5 + parent: 2 + - uid: 23797 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 16.5,-18.5 + parent: 2 + - uid: 23798 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,-18.5 + parent: 2 + - uid: 23799 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,-29.5 + parent: 2 + - uid: 23800 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,-29.5 + parent: 2 + - uid: 23801 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 47.5,-29.5 + parent: 2 + - uid: 23802 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,-26.5 + parent: 2 + - uid: 23803 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,-25.5 + parent: 2 + - uid: 23804 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 14.5,-25.5 + parent: 2 + - uid: 23805 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,-25.5 + parent: 2 + - uid: 23806 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,-26.5 + parent: 2 + - uid: 23807 + components: + - type: Transform + pos: 14.5,-26.5 + parent: 2 + - uid: 23808 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 13.5,-32.5 + parent: 2 + - uid: 23809 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-44.5 + parent: 2 + - uid: 23810 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,27.5 + parent: 2 + - uid: 23811 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,26.5 + parent: 2 + - uid: 23812 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,25.5 + parent: 2 + - uid: 23813 + components: + - type: Transform + pos: 6.5,25.5 + parent: 2 + - uid: 23814 + components: + - type: Transform + pos: 7.5,25.5 + parent: 2 + - uid: 23815 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,-50.5 + parent: 2 + - uid: 23816 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,-51.5 + parent: 2 + - uid: 23817 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,-49.5 + parent: 2 + - uid: 23892 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-70.5 + parent: 2 + - uid: 23893 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-68.5 + parent: 2 + - uid: 23894 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-69.5 + parent: 2 + - uid: 23895 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-70.5 + parent: 2 +- proto: Wirecutter + entities: + - uid: 23818 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -37.453682,-50.61966 + parent: 2 + - uid: 23819 + components: + - type: Transform + pos: 29.551594,-34.526207 + parent: 2 +- proto: WoodDoor + entities: + - uid: 23820 + components: + - type: Transform + pos: 20.5,41.5 + parent: 2 + - uid: 23821 + components: + - type: Transform + pos: 41.5,-0.5 + parent: 2 + - uid: 23822 + components: + - type: Transform + pos: 18.5,35.5 + parent: 2 + - uid: 23823 + components: + - type: Transform + pos: -23.5,-65.5 + parent: 2 + - uid: 23824 + components: + - type: Transform + pos: -25.5,-65.5 + parent: 2 +- proto: Wrench + entities: + - uid: 23825 + components: + - type: Transform + pos: 4.518403,14.99651 + parent: 2 + - uid: 23826 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.445876,-12.574354 + parent: 2 + - uid: 23827 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -37.36044,-50.650738 + parent: 2 + - uid: 23828 + components: + - type: Transform + pos: 24.5243,-10.427906 + parent: 2 + - uid: 23829 + components: + - type: Transform + pos: 43.49371,-18.25883 + parent: 2 + - uid: 23830 + components: + - type: Transform + pos: -5.615103,80.51257 + parent: 2 + - uid: 23831 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5839,-32.279396 + parent: 2 + - uid: 23832 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.46088,-56.46564 + parent: 2 + - uid: 23833 + components: + - type: Transform + pos: -7.502454,-66.131325 + parent: 2 +- proto: Zipties + entities: + - uid: 8828 + components: + - type: Transform + parent: 8823 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False + - type: InsideEntityStorage + - uid: 23834 + components: + - type: Transform + pos: 46.49661,-29.494585 + parent: 2 + - uid: 23835 + components: + - type: Transform + pos: 46.390938,-29.618904 + parent: 2 + - uid: 23836 + components: + - type: Transform + pos: 46.602283,-29.364048 + parent: 2 +... diff --git a/Resources/Migrations/deltaMigrations.yml b/Resources/Migrations/deltaMigrations.yml deleted file mode 100644 index 5081d04dc5d..00000000000 --- a/Resources/Migrations/deltaMigrations.yml +++ /dev/null @@ -1,101 +0,0 @@ -# 2023-09-29 -PosterContrabandSMSyndie: PosterContrabandSafetyMothSyndie -PosterLegitSMPoisoning: PosterLegitSafetyMothPoisoning -PosterLegitSMBoH: PosterLegitSafetyMothBoH -PosterLegitSMHardhats: PosterLegitSafetyMothHardhat -PosterLegitSMFires: PosterLegitSafetyMothFires -PosterLegitSMPiping: PosterLegitSafetyMothPiping -PosterLegitSMMeth: PosterLegitSafetyMothMeth -PosterLegitSMEpi: PosterLegitSafetyMothEpi -PosterLegitSMPills: PosterLegitSafetyMothPills -PosterLegitSMAnomalies: PosterLegitSafetyMothDelam -PosterLegitSMGlimmer: PosterLegitSafetyMothGlimmer -EngineeringTechFab: Autolathe -EngineeringTechFabCircuitboard: AutolatheMachineCircuitboard -ScienceTechFab: Protolathe -ScienceTechFabCircuitboard: ProtolatheMachineCircuitboard -ServiceTechFab: Autolathe -ServiceTechFabCircuitboard: AutolatheMachineCircuitboard - -# 2023-10-05 -FoodMothTomatoSauce: null -LockerEpistemicsFilled: LockerScienceFilled -LockerMystagogueFilled: LockerResearchDirectorFilled -LockerEpistemics: LockerScientist -LockerMystagogue: LockerResearchDirector -HyperlinkBookAlerts: BookRandom -HyperlinkBookAtmos: BookAtmosDistro -HyperlinkBookBartending: BookBartendersManual -HyperlinkBookBotany: BookLeafLoversSecret -HyperlinkBookChemistry: BookChemicalCompendium -HyperlinkBookCooking: BookChefGaming -HyperlinkBookGlimmer: BookScientistsGuidebook -HyperlinkBookHacking: BookEngineersHandbook -HyperlinkBookMedical: BookMedicalReferenceBook -HyperlinkBookPower: BookEngineersHandbook -HyperlinkBookProcedure: BookRandom -HyperlinkBookShuttle: BookRandom -HyperlinkBookSpaceLaw: BookSecurity -HyperlinkBookSupernanny: BookHowToSurvive -SpawnPointCataloguer: SpawnPointLibrarian -SpawnPointCyborg: SpawnPointBorg -SpawnPointMedicalCyborg: null -SpawnPointEpistemologist: SpawnPointScientist -SpawnPointMystagogue: SpawnPointResearchDirector -SpawnPointSalvageTechnician: SpawnPointSalvageSpecialist -SpawnPointValet: SpawnPointServiceWorker -VendingMachineEpiDrobe: VendingMachineSciDrobe -PlushieMoffRandom: PlushieMothRandom -PlushieMoffbar: PlushieMothBartender -PlushieMoffsician: PlushieMothMusician -PlushieMoff: PlushieMoth -ArachneWeb: SpiderWeb -PowerCellBluespace: PowerCellHigh -CrateMedicalDefib: CrateMedical -WeaponShotgunEnforcerNonLethal: WeaponShotgunEnforcerRubber - -# 2023-10-06 -FoodMealTaco: FoodMealSoftTaco -FoodTinBeansOpen: FoodTinBeans -FoodBreadMoldy: FoodBreadMoldySlice -FoodMeatPatty: FoodMeatMeatball -ClothingHeadHoodMystic: ClothingHeadHoodMysta - -# 2023-11-07 -VendingMachineMailDrobe: VendingMachineCourierDrobe - -#Delta V temporary changes. Remove When items are added. -ComputerShipyard: ComputerBroken -ShipyardComputerCircuitboard: null -SpawnMobGolemCult: null -ShogiBoard: CheckerBoard - -# 2023-11-21 -AirlockBrigLocked: AirlockSecurityLawyerLocked -AirlockBrigGlassLocked: AirlockSecurityLawyerGlassLocked -WindoorSecureBrigLocked: WindoorSecureSecurityLawyerLocked - -#Delta V Optional: Remove "#" for specific maps. -#AsteroidRock: AsteroidAltRock -#AsteroidRockMining: AsteroidAltRockMining - -# 2023-12-16 -PlushieLizardMirrored: PlushieLizard - -# 2024-1-22 -#Use these lights because they are better -PoweredlightExterior: PoweredLightBlueInterior -ExteriorLightTube: BlueLightTube - -# 2024-01-26 -SalvagePartsSpawnerSubSpace: SalvagePartsSpawnerMid - -# 2024-02-08 -SpawnVehicleAntagVehicle: null - -# 2024-02-26 -SpaceTickSpawnerNPC: SpaceTickSpawner - -# 2024-03-07 -LockableButtonBrig: LockableButtonSecurity -SignDirectionalICU: SignDirectionalIcu diff --git a/Resources/Migrations/eeMigration.yml b/Resources/Migrations/eeMigration.yml index 8d95da53bcb..195c1f87651 100644 --- a/Resources/Migrations/eeMigration.yml +++ b/Resources/Migrations/eeMigration.yml @@ -1,7 +1,119 @@ +# 2023-09-29 +PosterContrabandSMSyndie: PosterContrabandSafetyMothSyndie +PosterLegitSMPoisoning: PosterLegitSafetyMothPoisoning +PosterLegitSMBoH: PosterLegitSafetyMothBoH +PosterLegitSMHardhats: PosterLegitSafetyMothHardhat +PosterLegitSMFires: PosterLegitSafetyMothFires +PosterLegitSMPiping: PosterLegitSafetyMothPiping +PosterLegitSMMeth: PosterLegitSafetyMothMeth +PosterLegitSMEpi: PosterLegitSafetyMothEpi +PosterLegitSMPills: PosterLegitSafetyMothPills +PosterLegitSMAnomalies: PosterLegitSafetyMothDelam +PosterLegitSMGlimmer: PosterLegitSafetyMothGlimmer +EngineeringTechFab: Autolathe +EngineeringTechFabCircuitboard: AutolatheMachineCircuitboard +ScienceTechFab: Protolathe +ScienceTechFabCircuitboard: ProtolatheMachineCircuitboard +ServiceTechFab: Autolathe +ServiceTechFabCircuitboard: AutolatheMachineCircuitboard + +# 2023-10-05 +FoodMothTomatoSauce: null +LockerEpistemicsFilled: LockerScienceFilled +LockerMystagogueFilled: LockerResearchDirectorFilled +LockerEpistemics: LockerScientist +LockerMystagogue: LockerResearchDirector +HyperlinkBookAlerts: BookRandom +HyperlinkBookAtmos: BookAtmosDistro +HyperlinkBookBartending: BookBartendersManual +HyperlinkBookBotany: BookLeafLoversSecret +HyperlinkBookChemistry: BookChemicalCompendium +HyperlinkBookCooking: BookChefGaming +HyperlinkBookGlimmer: BookScientistsGuidebook +HyperlinkBookHacking: BookEngineersHandbook +HyperlinkBookMedical: BookMedicalReferenceBook +HyperlinkBookPower: BookEngineersHandbook +HyperlinkBookProcedure: BookRandom +HyperlinkBookShuttle: BookRandom +HyperlinkBookSpaceLaw: BookSecurity +HyperlinkBookSupernanny: BookHowToSurvive +SpawnPointCataloguer: SpawnPointLibrarian +SpawnPointCyborg: SpawnPointBorg +SpawnPointMedicalCyborg: null +SpawnPointEpistemologist: SpawnPointScientist +SpawnPointMystagogue: SpawnPointResearchDirector +SpawnPointSalvageTechnician: SpawnPointSalvageSpecialist +SpawnPointValet: SpawnPointServiceWorker +VendingMachineEpiDrobe: VendingMachineSciDrobe +PlushieMoffRandom: PlushieMothRandom +PlushieMoffbar: PlushieMothBartender +PlushieMoffsician: PlushieMothMusician +PlushieMoff: PlushieMoth +ArachneWeb: SpiderWeb +PowerCellBluespace: PowerCellHigh +CrateMedicalDefib: CrateMedical +WeaponShotgunEnforcerNonLethal: WeaponShotgunEnforcerRubber + +# 2023-10-06 +FoodMealTaco: FoodMealSoftTaco +FoodTinBeansOpen: FoodTinBeans +FoodBreadMoldy: FoodBreadMoldySlice +FoodMeatPatty: FoodMeatMeatball +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 + +# 2023-11-21 +AirlockBrigLocked: AirlockSecurityLawyerLocked +AirlockBrigGlassLocked: AirlockSecurityLawyerGlassLocked +WindoorSecureBrigLocked: WindoorSecureSecurityLawyerLocked + +#Delta V Optional: Remove "#" for specific maps. +#AsteroidRock: AsteroidAltRock +#AsteroidRockMining: AsteroidAltRockMining # These two rocks change between the two variants of + # Wizden Rocks, they're the same rock but with two different textures + # both are ugly, but you may have a preference. + +# 2023-12-16 +PlushieLizardMirrored: PlushieLizard + +# 2024-1-22 +#Use these lights because they are better +PoweredlightExterior: PoweredLightBlueInterior +ExteriorLightTube: BlueLightTube + +# 2024-01-26 +SalvagePartsSpawnerSubSpace: SalvagePartsSpawnerMid + +# 2024-02-08 +SpawnVehicleAntagVehicle: null + +# 2024-02-26 +SpaceTickSpawnerNPC: SpaceTickSpawner + +# 2024-03-07 +LockableButtonBrig: LockableButtonSecurity +SignDirectionalICU: SignDirectionalIcu + +# 2024-03-08 +ClothingBackpackSatchelBrigmedicDeltaVFilled: ClothingBackpackSatchelBrigmedicFilled +ClothingBackpackDuffelBrigmedicDeltaVFilled: ClothingBackpackDuffelBrigmedicFilled +ClothingBackpackBrigmedicDeltaVFilled: ClothingBackpackBrigmedicFilled + # 2024-06-08 CrateFunPlushie: CrateFunToyBox CrateFunLizardPlushieBulk: CrateFunToyBox +# 2024-08-22 - Frontier Mail - Add more to these when they come up as mapped. Part of the Frontier Mail port, blame Tortuga. +MailPAI: MailNFPAI + # 2024-08-27 Oracle: OracleSpawner -SophicScribe: SophicScribeSpawner \ No newline at end of file +SophicScribe: SophicScribeSpawner diff --git a/Resources/Migrations/migration.yml b/Resources/Migrations/migration.yml index 7f19699ad8a..3ac6b353a9b 100644 --- a/Resources/Migrations/migration.yml +++ b/Resources/Migrations/migration.yml @@ -126,28 +126,6 @@ DrinkGoldschlagerGlass: DrinkGildlagerGlass ClosetBase: ClosetSteelBase MonkeyCubeBox: VariantCubeBox -# 2024-01-08 -SalvagePartsT4Spawner: SalvageLootSpawner -SalvagePartsT3Spawner: SalvageLootSpawner -SalvagePartsT3T4Spawner: SalvageLootSpawner -SalvagePartsT2Spawner: SalvageLootSpawner -AdvancedCapacitorStockPart: CapacitorStockPart -SuperCapacitorStockPart: CapacitorStockPart -QuadraticCapacitorStockPart: CapacitorStockPart -NanoManipulatorStockPart: MicroManipulatorStockPart -PicoManipulatorStockPart: MicroManipulatorStockPart -FemtoManipulatorStockPart: MicroManipulatorStockPart -AdvancedMatterBinStockPart: MatterBinStockPart -SuperMatterBinStockPart: MatterBinStockPart -BluespaceMatterBinStockPart: MatterBinStockPart -AnsibleSubspaceStockPart: null -FilterSubspaceStockPart: null -AmplifierSubspaceStockPart: null -TreatmentSubspaceStockPart: null -AnalyzerSubspaceStockPart: null -CrystalSubspaceStockPart: null -TransmitterSubspaceStockPart: null - # 2024-01-10 ClothingHeadHatHoodRad: null @@ -182,7 +160,7 @@ ActionVehicleHorn: null CrateFunATV: null CrateFunSyndicateSegway: null MobTaxiBot: null -MobSupplyBot: null +# MobSupplyBot: null SpawnVehicleMotobike: null SpawnVehicleATV: null SpawnVehicleSecway: null @@ -234,6 +212,8 @@ AirlockShuttleEasyPryLocked: AirlockExternalShuttleLocked ClothingBackpackFilledDetective: ClothingBackpackSecurityFilledDetective ClothingBackpackDuffelFilledDetective: ClothingBackpackDuffelSecurityFilledDetective ClothingBackpackSatchelFilledDetective: ClothingBackpackSatchelSecurityFilledDetective +FoodChili: FoodChiliPepper +FoodChilly: FoodChillyPepper # 2024-03-16 ClothingHeadHatHairflower: FoodPoppy @@ -242,6 +222,8 @@ ClothingHeadHatHairflower: FoodPoppy RPED: null # 2024-03-30 +TraversalDistorterMachineCircuitboard: null +MachineTraversalDistorter: null # These are technically not equivalent, but it probably makes more sense to replace any existing SCAF stuff with SOME kind of armor, instead of just deleting it outright. ClothingHeadHelmetScaf: ClothingHeadHelmetBasic ClothingOuterArmorScaf: ClothingOuterArmorBasic @@ -254,3 +236,11 @@ BriefcaseSyndieBase: null # 2024-04-08 BodyBag_Container: BodyBag BodyBag_Folded: BodyBagFolded + +# 2024-04-26 +GlassBoxLaserBroken: GlassBoxBroken +ReinforcementRadioSyndicateMonkey: ReinforcementRadioSyndicateAncestor +ReinforcementRadioSyndicateMonkeyNukeops: ReinforcementRadioSyndicateAncestorNukeops + +# 2024-05-01 +DrinkBottleGoldschlager: DrinkBottleGildlager diff --git a/Resources/Prototypes/Accents/word_replacements.yml b/Resources/Prototypes/Accents/word_replacements.yml index a5269924f7a..cb4cdf0683a 100644 --- a/Resources/Prototypes/Accents/word_replacements.yml +++ b/Resources/Prototypes/Accents/word_replacements.yml @@ -425,3 +425,50 @@ chatsan-word-42: chatsan-replacement-42 chatsan-word-43: chatsan-replacement-43 chatsan-word-44: chatsan-replacement-44 + +- type: accent + id: liar + wordReplacements: + liar-word-1: liar-word-replacement-1 + liar-word-2: liar-word-replacement-2 + liar-word-3: liar-word-replacement-3 + liar-word-4: liar-word-replacement-4 + liar-word-5: liar-word-replacement-5 + liar-word-6: liar-word-replacement-6 + liar-word-7: liar-word-replacement-7 + liar-word-8: liar-word-replacement-8 + liar-word-9: liar-word-replacement-9 + liar-word-10: liar-word-replacement-10 + liar-word-11: liar-word-replacement-11 + liar-word-12: liar-word-replacement-12 + liar-word-13: liar-word-replacement-13 + liar-word-14: liar-word-replacement-14 + liar-word-15: liar-word-replacement-15 + liar-word-16: liar-word-replacement-16 + liar-word-17: liar-word-replacement-17 + liar-word-18: liar-word-replacement-18 + liar-word-19: liar-word-replacement-19 + liar-word-20: liar-word-replacement-20 + liar-word-21: liar-word-replacement-21 + liar-word-22: liar-word-replacement-22 + liar-word-23: liar-word-replacement-23 + liar-word-24: liar-word-replacement-24 + liar-word-25: liar-word-replacement-25 + liar-word-26: liar-word-replacement-26 + liar-word-27: liar-word-replacement-27 + liar-word-28: liar-word-replacement-28 + liar-word-29: liar-word-replacement-29 + liar-word-30: liar-word-replacement-30 + liar-word-31: liar-word-replacement-31 + liar-word-32: liar-word-replacement-32 + liar-word-33: liar-word-replacement-33 + liar-word-34: liar-word-replacement-34 + liar-word-34-2: liar-word-replacement-34 + liar-word-35: liar-word-replacement-35 + liar-word-36: liar-word-replacement-36 + liar-word-37: liar-word-replacement-37 + liar-word-38: liar-word-replacement-38 + liar-word-39: liar-word-replacement-39 + liar-word-40: liar-word-replacement-40 + liar-word-41: liar-word-replacement-41 + liar-word-42: liar-word-replacement-42 \ No newline at end of file diff --git a/Resources/Prototypes/Access/security.yml b/Resources/Prototypes/Access/security.yml index cfb6e600606..b64424d8551 100644 --- a/Resources/Prototypes/Access/security.yml +++ b/Resources/Prototypes/Access/security.yml @@ -10,10 +10,9 @@ id: Armory name: id-card-access-level-armory -# Delta V: Removes Brig access because redundant -#- type: accessLevel -# id: Brig -# name: id-card-access-level-brig +- type: accessLevel + id: Brig + name: id-card-access-level-brig - type: accessLevel id: Detective @@ -25,14 +24,14 @@ - HeadOfSecurity - Security - Armory - #- Brig #Delta V removed + - Brig - Detective - Cryogenics - - Corpsman # DeltaV - add Corpsman access + - Corpsman - type: accessGroup id: Armory tags: - Security - Armory - # Brig #Delta V removed + - Brig diff --git a/Resources/Prototypes/Actions/polymorph.yml b/Resources/Prototypes/Actions/polymorph.yml index 7472fc00620..445dc8d9f54 100644 --- a/Resources/Prototypes/Actions/polymorph.yml +++ b/Resources/Prototypes/Actions/polymorph.yml @@ -14,3 +14,33 @@ - type: InstantAction event: !type:PolymorphActionEvent itemIconStyle: NoItem + +- type: entity + id: ActionPolymorphWizardSpider + name: Spider Polymorph + description: Polymorphs you into a Spider. + noSpawn: true + components: + - type: InstantAction + useDelay: 60 + event: !type:PolymorphActionEvent + protoId: WizardSpider + itemIconStyle: NoItem + icon: + sprite: Mobs/Animals/spider.rsi + state: tarantula + +- type: entity + id: ActionPolymorphWizardRod + name: Rod Form + description: CLANG! + noSpawn: true + components: + - type: InstantAction + useDelay: 60 + event: !type:PolymorphActionEvent + protoId: WizardRod + itemIconStyle: NoItem + icon: + sprite: Objects/Fun/immovable_rod.rsi + state: icon diff --git a/Resources/Prototypes/Actions/psionics.yml b/Resources/Prototypes/Actions/psionics.yml index 981d53884ea..a372a480ac7 100644 --- a/Resources/Prototypes/Actions/psionics.yml +++ b/Resources/Prototypes/Actions/psionics.yml @@ -4,18 +4,18 @@ description: action-description-dispel noSpawn: true components: - - type: EntityTargetAction - icon: Interface/VerbIcons/dispel.png - useDelay: 45 - checkCanAccess: false - range: 6 - itemIconStyle: BigAction - canTargetSelf: false - blacklist: - components: - - PsionicInsulation - - Mindbroken - event: !type:DispelPowerActionEvent + - type: EntityTargetAction + icon: Interface/VerbIcons/dispel.png + useDelay: 45 + checkCanAccess: false + range: 6 + itemIconStyle: BigAction + canTargetSelf: false + blacklist: + components: + - PsionicInsulation + - Mindbroken + event: !type:DispelPowerActionEvent - type: entity id: ActionMassSleep @@ -23,13 +23,13 @@ description: action-description-mass-sleep noSpawn: true components: - - type: WorldTargetAction - icon: Interface/VerbIcons/mass_sleep.png - useDelay: 60 - checkCanAccess: false - range: 8 - itemIconStyle: BigAction - event: !type:MassSleepPowerActionEvent + - type: WorldTargetAction + icon: Interface/VerbIcons/mass_sleep.png + useDelay: 60 + checkCanAccess: false + range: 8 + itemIconStyle: BigAction + event: !type:MassSleepPowerActionEvent - type: entity id: ActionMindSwap @@ -37,17 +37,17 @@ description: action-description-mind-swap noSpawn: true components: - - type: EntityTargetAction - icon: Interface/VerbIcons/mind_swap.png - useDelay: 240 - checkCanAccess: false - range: 8 - itemIconStyle: BigAction - blacklist: - components: - - PsionicInsulation - - Mindbroken - event: !type:MindSwapPowerActionEvent + - type: EntityTargetAction + icon: Interface/VerbIcons/mind_swap.png + useDelay: 240 + checkCanAccess: false + range: 8 + itemIconStyle: BigAction + blacklist: + components: + - PsionicInsulation + - Mindbroken + event: !type:MindSwapPowerActionEvent - type: entity id: ActionMindSwapReturn @@ -55,11 +55,11 @@ description: action-description-mind-swap-return noSpawn: true components: - - type: InstantAction - icon: Interface/VerbIcons/mind_swap_return.png - useDelay: 20 - checkCanInteract: false - event: !type:MindSwapPowerReturnActionEvent + - type: InstantAction + icon: Interface/VerbIcons/mind_swap_return.png + useDelay: 20 + checkCanInteract: false + event: !type:MindSwapPowerReturnActionEvent - type: entity id: ActionNoosphericZap @@ -67,16 +67,16 @@ description: action-description-noospheric-zap noSpawn: true components: - - type: EntityTargetAction - icon: Interface/VerbIcons/noospheric_zap.png - useDelay: 100 - range: 5 - itemIconStyle: BigAction - blacklist: - components: - - PsionicInsulation - - Mindbroken - event: !type:NoosphericZapPowerActionEvent + - type: EntityTargetAction + icon: Interface/VerbIcons/noospheric_zap.png + useDelay: 100 + range: 5 + itemIconStyle: BigAction + blacklist: + components: + - PsionicInsulation + - Mindbroken + event: !type:NoosphericZapPowerActionEvent - type: entity id: ActionPyrokinesis @@ -84,13 +84,13 @@ description: action-description-pyrokinesis noSpawn: true components: - - type: EntityTargetAction - icon: Interface/VerbIcons/pyrokinesis.png - useDelay: 50 - range: 6 - checkCanAccess: false - itemIconStyle: BigAction - event: !type:PyrokinesisPowerActionEvent + - type: EntityTargetAction + icon: Interface/VerbIcons/pyrokinesis.png + useDelay: 50 + range: 6 + checkCanAccess: false + itemIconStyle: BigAction + event: !type:PyrokinesisPowerActionEvent - type: entity id: ActionMetapsionic @@ -98,10 +98,10 @@ description: action-description-metapsionic noSpawn: true components: - - type: InstantAction - icon: Interface/VerbIcons/metapsionic.png - useDelay: 45 - event: !type:MetapsionicPowerActionEvent + - type: InstantAction + icon: Interface/VerbIcons/metapsionic.png + useDelay: 45 + event: !type:MetapsionicPowerActionEvent - type: entity id: ActionPsionicRegeneration @@ -109,10 +109,10 @@ description: action-description-psionic-regeneration noSpawn: true components: - - type: InstantAction - icon: Interface/VerbIcons/psionic_regeneration.png - useDelay: 120 - event: !type:PsionicRegenerationPowerActionEvent + - type: InstantAction + icon: Interface/VerbIcons/psionic_regeneration.png + useDelay: 120 + event: !type:PsionicRegenerationPowerActionEvent - type: entity id: ActionTelegnosis @@ -120,10 +120,10 @@ description: action-description-telegnosis noSpawn: true components: - - type: InstantAction - icon: Interface/VerbIcons/telegnosis.png - useDelay: 150 - event: !type:TelegnosisPowerActionEvent + - type: InstantAction + icon: Interface/VerbIcons/telegnosis.png + useDelay: 150 + event: !type:TelegnosisPowerActionEvent - type: entity id: ActionPsionicInvisibility @@ -131,18 +131,274 @@ description: action-description-psionic-invisibility noSpawn: true components: - - type: InstantAction - icon: Interface/VerbIcons/psionic_invisibility.png - useDelay: 120 - event: !type:PsionicInvisibilityPowerActionEvent + - type: InstantAction + icon: Interface/VerbIcons/psionic_invisibility.png + useDelay: 120 + event: !type:PsionicInvisibilityPowerActionEvent - type: entity id: ActionPsionicInvisibilityUsed name: action-name-psionic-invisibility-off description: action-description-psionic-invisibility-off noSpawn: true + components: + - type: InstantAction + icon: Interface/VerbIcons/psionic_invisibility_off.png + event: !type:RemovePsionicInvisibilityOffPowerActionEvent + +- type: entity + id: ActionHealingWord + name: action-name-healing-word + description: action-description-healing-word + noSpawn: true + components: + - type: EntityTargetAction + icon: { sprite: Interface/Actions/psionics.rsi, state: healing_word } + useDelay: 10 + checkCanAccess: false + range: 6 + itemIconStyle: BigAction + canTargetSelf: true + blacklist: + components: + - PsionicInsulation + - Mindbroken + event: !type:PsionicHealOtherPowerActionEvent + healingAmount: + groups: # These all get divided by the number of damage types in the group. So they're all -2.5. + Genetic: -2.5 + Toxin: -5 + Airloss: -5 + Brute: -7.5 + Burn: -10 + rotReduction: 10 + useDelay: 1 + doRevive: true + powerName: Healing Word + popupText: healing-word-begin + playSound: true + minGlimmer: 2 + maxGlimmer: 4 + glimmerSoundThreshold: 100 + glimmerPopupThreshold: 200 + glimmerDoAfterVisibilityThreshold: 70 + +- type: entity + id: ActionRevivify + name: action-name-revivify + description: action-description-revivify + noSpawn: true + components: + - type: EntityTargetAction + icon: { sprite: Interface/Actions/psionics.rsi, state: revivify } + useDelay: 120 + checkCanAccess: false + range: 2 + itemIconStyle: BigAction + canTargetSelf: false + blacklist: + components: + - PsionicInsulation + - Mindbroken + event: !type:PsionicHealOtherPowerActionEvent + healingAmount: + # These all get divided by the number of damage types in the group. So they're all -15 + # Additionally, they're multiplied by the caster's Amplification, which, + # assuming this is the only power they have, the multiplier is between 2.9-3.9 + groups: + Genetic: -15 + Toxin: -30 + Airloss: -60 # Except airloss, which heals 30 per type + Brute: -45 + Burn: -60 + rotReduction: 60 + doRevive: true + powerName: Revivify + popupText: revivify-begin + playSound: true + minGlimmer: 10 # These also get multiplied by caster stats. So, + maxGlimmer: 15 # keeping in mind the ~3.5x multiplier, this spikes glimmer by as much as 60 points. + glimmerSoundThreshold: 50 + glimmerPopupThreshold: 100 + glimmerDoAfterVisibilityThreshold: 35 + +- type: entity + id: ActionShadeskip + name: action-name-shadeskip + description: action-description-shadeskip + noSpawn: true components: - type: InstantAction - icon: Interface/VerbIcons/psionic_invisibility_off.png - event: !type:RemovePsionicInvisibilityOffPowerActionEvent + icon: { sprite : Interface/Actions/psionics.rsi, state: shadeskip } + useDelay: 45 + checkCanInteract: false + event: !type:AnomalyPowerActionEvent + settings: + powerName: "Shadeskip" + minGlimmer: 6 + maxGlimmer: 8 + glimmerSoundThreshold: 50 + doSupercritical: false + entitySpawnEntries: + - settings: + spawnOnPulse: true + spawnOnSuperCritical: true + minAmount: 5 + maxAmount: 8 + maxRange: 1.5 + spawns: + - ShadowKudzuWeak + - settings: + spawnOnPulse: true + spawnOnSuperCritical: true + minAmount: 1 + maxAmount: 1 + maxRange: 0.5 + spawns: + - EffectFlashShadeskip +- type: entity + id: ActionTelekineticPulse + name: action-name-telekinetic-pulse + description: action-description-telekinetic-pulse + noSpawn: true + components: + - type: InstantAction + icon: { sprite: Interface/Actions/psionics.rsi, state: telekinetic_pulse } + useDelay: 45 + checkCanInteract: false + event: !type:AnomalyPowerActionEvent + settings: + powerName: "Telekinetic Pulse" + overchargeFeedback: "shadeskip-overcharge-feedback" # The text behind this is fine. + overchargeCooldown: 120 + overchargeRecoil: + groups: + Burn: -100 #This will be divided by the caster's Dampening. + minGlimmer: 6 + maxGlimmer: 8 + doSupercritical: false + entitySpawnEntries: + - settings: + spawnOnPulse: true + minAmount: 1 + maxAmount: 1 + maxRange: 0.5 + spawns: + - EffectFlashTelekineticPulse + gravity: + maxThrowRange: 3 + maxThrowStrength: 5 + spaceRange: 3 + +- type: entity + id: ActionShadowkinShadeskip + name: action-name-shadeskip + description: action-description-shadowkin-shadeskip + noSpawn: true + components: + - type: InstantAction + icon: { sprite: Interface/Actions/shadowkin_icons.rsi, state: shadeskip } + useDelay: 10 + checkCanInteract: false + event: !type:AnomalyPowerActionEvent + settings: + powerName: "Shadowkin-Shadeskip" + manaCost: 25 + checkInsulation: false + minGlimmer: 0 + maxGlimmer: 0 + doSupercritical: false + entitySpawnEntries: + - settings: + spawnOnPulse: true + minAmount: 5 + maxAmount: 10 + maxRange: 2.5 + spawns: + - ShadowkinShadow + - settings: + spawnOnPulse: true + minAmount: 1 + maxAmount: 1 + maxRange: 0.5 + spawns: + - EffectFlashShadowkinShadeskip + +- type: entity + id: ActionDarkSwap + name: action-name-darkswap + description: action-description-darkswap + noSpawn: true + components: + - type: InstantAction + icon: { sprite: Interface/Actions/shadowkin_icons.rsi, state: darkswap } + useDelay: 10 + checkCanInteract: false + event: !type:DarkSwapActionEvent + manaCost: 100 + checkInsulation: false + +- type: entity + id: ActionPyrokineticFlare + name: action-name-pyrokinetic-flare + description: action-description-pyrokinetic-flare + noSpawn: true + components: + - type: InstantAction + icon: { sprite: Interface/Actions/psionics.rsi, state: pyrokinetic_flare } + useDelay: 25 + checkCanInteract: false + event: !type:AnomalyPowerActionEvent + settings: + powerName: "Pyrokinetic Flare" + minGlimmer: 3 + maxGlimmer: 5 + doSupercritical: false + entitySpawnEntries: + - settings: + spawnOnPulse: true + spawnOnSuperCritical: true + minAmount: 1 + maxAmount: 3 + maxRange: 1 + spawns: + - EffectPyrokineticFlare + +- type: entity + id: ActionSummonImp + name: action-name-summon-imp + description: action-description-summon-imp + noSpawn: true + components: + - type: InstantAction + icon: { sprite: Interface/Actions/psionics.rsi, state: summon_imp } + useDelay: 120 + checkCanInteract: false + event: !type:SummonPsionicFamiliarActionEvent + familiarProto: MobPsionicFamiliarImp + powerName: "Summon Imp" + checkInsulation: true + doGlimmerEffects: true + followMaster: true + minGlimmer: 10 + maxGlimmer: 20 + +- type: entity + id: ActionSummonRemilia + name: action-name-summon-remilia + description: action-description-summon-remilia + noSpawn: true + components: + - type: InstantAction + icon: { sprite: Interface/Actions/psionics.rsi, state: summon_remilia } + useDelay: 120 + checkCanInteract: false + event: !type:SummonPsionicFamiliarActionEvent + familiarProto: MobBatRemilia + powerName: "Summon Remilia" + checkInsulation: true + doGlimmerEffects: true + followMaster: true + minGlimmer: 5 + maxGlimmer: 10 diff --git a/Resources/Prototypes/Actions/types.yml b/Resources/Prototypes/Actions/types.yml index cf0a99f3bad..a7144cdda57 100644 --- a/Resources/Prototypes/Actions/types.yml +++ b/Resources/Prototypes/Actions/types.yml @@ -92,7 +92,6 @@ state: gib event: !type:ActivateImplantEvent - - type: entity id: ActionActivateFreedomImplant name: Break Free @@ -130,6 +129,7 @@ noSpawn: true components: - type: InstantAction + checkCanInteract: false charges: 3 useDelay: 5 itemIconStyle: BigAction @@ -171,6 +171,21 @@ state: icon event: !type:UseDnaScramblerImplantEvent +- type: entity + 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 + components: + - type: InstantAction + itemIconStyle: BigAction + useDelay: 10 # prevent spam + priority: -20 + icon: + sprite: Mobs/Aliens/slimes.rsi + state: blue_adult_slime + event: !type:MorphIntoGeras + - type: entity id: ActionToggleSuitPiece name: Toggle Suit Piece @@ -289,6 +304,18 @@ icon: { sprite: Clothing/Head/Hats/pyjamasyndicatered.rsi, state: icon } event: !type:SleepActionEvent +- type: entity + id: ShadowkinActionSleep + name: action-name-shadowkin-rest + description: action-description-shadowkin-rest + noSpawn: true + components: + - type: InstantAction + checkCanInteract: false + checkConsciousness: false + icon: { sprite: Interface/Actions/shadowkin_icons.rsi, state: rest } + event: !type:SleepActionEvent + - type: entity id: ActionWake name: Wake up diff --git a/Resources/Prototypes/AlertLevels/alert_levels.yml b/Resources/Prototypes/AlertLevels/alert_levels.yml index 5a8cb2dd129..db15dc13885 100644 --- a/Resources/Prototypes/AlertLevels/alert_levels.yml +++ b/Resources/Prototypes/AlertLevels/alert_levels.yml @@ -5,18 +5,22 @@ green: announcement: alert-level-green-announcement color: Green + emergencyLightColor: LawnGreen sound: /Audio/Announcements/Alerts/code_green.ogg shuttleTime: 600 blue: announcement: alert-level-blue-announcement sound: /Audio/Announcements/Alerts/code_blue.ogg color: DodgerBlue + forceEnableEmergencyLights: true + emergencyLightColor: DodgerBlue shuttleTime: 600 violet: announcement: alert-level-violet-announcement sound: /Audio/Announcements/Alerts/code_violet.ogg color: Violet emergencyLightColor: Violet + forceEnableEmergencyLights: true shuttleTime: 600 white: announcement: alert-level-white-announcement @@ -29,11 +33,14 @@ sound: /Audio/Announcements/Alerts/code_yellow.ogg color: Yellow emergencyLightColor: Goldenrod + forceEnableEmergencyLights: true shuttleTime: 600 red: announcement: alert-level-red-announcement sound: /Audio/Announcements/Alerts/code_red.ogg color: Red + emergencyLightColor: Red + forceEnableEmergencyLights: true shuttleTime: 600 gamma: announcement: alert-level-gamma-announcement diff --git a/Resources/Prototypes/Alerts/alerts.yml b/Resources/Prototypes/Alerts/alerts.yml index 47015bf21f5..dffebf4b1dd 100644 --- a/Resources/Prototypes/Alerts/alerts.yml +++ b/Resources/Prototypes/Alerts/alerts.yml @@ -7,6 +7,7 @@ - category: Health - category: Mood - category: Stamina + - alertType: ShadowkinPower - alertType: SuitPower - category: Internals - alertType: Fire @@ -26,10 +27,11 @@ - alertType: Magboots - alertType: Pacified - alertType: Offer + - alertType: Deflecting - type: entity id: AlertSpriteView - categories: [ hideSpawnMenu ] + categories: [ HideSpawnMenu ] components: - type: Sprite layers: @@ -190,6 +192,7 @@ - type: alert id: HumanHealth category: Health + onClick: !type:CheckHealth { } icons: - sprite: /Textures/Interface/Alerts/human_alive.rsi state: health0 @@ -608,3 +611,11 @@ state: mood_happiness_bad name: alerts-mood-dead-name description: alerts-mood-dead-desc + +- type: alert + id: Deflecting + icons: + - sprite: /Textures/Interface/Alerts/deflecting.rsi + state: deflecting0 + name: alerts-deflecting-name + description: alerts-deflecting-desc diff --git a/Resources/Prototypes/Alerts/revenant.yml b/Resources/Prototypes/Alerts/revenant.yml index a56b8983510..9db5228483d 100644 --- a/Resources/Prototypes/Alerts/revenant.yml +++ b/Resources/Prototypes/Alerts/revenant.yml @@ -16,7 +16,7 @@ - type: entity id: AlertEssenceSpriteView - categories: [ hideSpawnMenu ] + categories: [ HideSpawnMenu ] components: - type: Sprite sprite: /Textures/Interface/Alerts/essence_counter.rsi diff --git a/Resources/Prototypes/Alerts/shadowkin.yml b/Resources/Prototypes/Alerts/shadowkin.yml new file mode 100644 index 00000000000..66d41351bab --- /dev/null +++ b/Resources/Prototypes/Alerts/shadowkin.yml @@ -0,0 +1,23 @@ +- type: alert + id: ShadowkinPower + icons: + - sprite: /Textures/Interface/Alerts/shadowkin_power.rsi + state: power0 + - sprite: /Textures/Interface/Alerts/shadowkin_power.rsi + state: power1 + - sprite: /Textures/Interface/Alerts/shadowkin_power.rsi + state: power2 + - sprite: /Textures/Interface/Alerts/shadowkin_power.rsi + state: power3 + - sprite: /Textures/Interface/Alerts/shadowkin_power.rsi + state: power4 + - sprite: /Textures/Interface/Alerts/shadowkin_power.rsi + state: power5 + - sprite: /Textures/Interface/Alerts/shadowkin_power.rsi + state: power6 + - sprite: /Textures/Interface/Alerts/shadowkin_power.rsi + state: power7 + name: alerts-shadowkin-power-name + description: alerts-shadowkin-power-desc + minSeverity: 0 + maxSeverity: 7 \ No newline at end of file diff --git a/Resources/Prototypes/Anomaly/behaviours.yml b/Resources/Prototypes/Anomaly/behaviours.yml index aa9ad2f90d3..e39933c365c 100644 --- a/Resources/Prototypes/Anomaly/behaviours.yml +++ b/Resources/Prototypes/Anomaly/behaviours.yml @@ -58,14 +58,14 @@ id: DelayedForce earnPointModifier: 1.15 description: anomaly-behavior-delayed-force - pulseFrequencyModifier: 0.5 + pulseFrequencyModifier: 2 pulsePowerModifier: 2 - type: anomalyBehavior id: Rapid earnPointModifier: 1.15 description: anomaly-behavior-rapid - pulseFrequencyModifier: 2 + pulseFrequencyModifier: 0.5 pulsePowerModifier: 0.5 - type: anomalyBehavior @@ -84,6 +84,7 @@ description: anomaly-behavior-reflect components: - type: Reflect + innate: true reflectProb: 0.5 reflects: - Energy diff --git a/Resources/Prototypes/Atmospherics/thresholds.yml b/Resources/Prototypes/Atmospherics/thresholds.yml index 22ca42869ed..81f7bda4d20 100644 --- a/Resources/Prototypes/Atmospherics/thresholds.yml +++ b/Resources/Prototypes/Atmospherics/thresholds.yml @@ -19,7 +19,7 @@ upperWarnAround: !type:AlarmThresholdSetting threshold: 0.7 # 385 kPa, WarningHighPressure from Atmospherics.cs lowerWarnAround: !type:AlarmThresholdSetting - threshold: 1.05 # ~90 kPa + threshold: 4.5 # ~90 kPa # a reminder that all of these are percentages (where 1 is 100%), # so 0.01 is 1%, diff --git a/Resources/Prototypes/Body/Organs/Friendstomach.yml b/Resources/Prototypes/Body/Organs/Friendstomach.yml new file mode 100644 index 00000000000..a20bbbe75bc --- /dev/null +++ b/Resources/Prototypes/Body/Organs/Friendstomach.yml @@ -0,0 +1,15 @@ +- type: entity + id: OrganFriendStomach + parent: OrganAnimalStomach + noSpawn: true + components: + - type: Stomach + - type: SolutionContainerManager + solutions: + stomach: + maxVol: 100 + food: + maxVol: 50 + reagents: + - ReagentId: UncookedAnimalProteins + Quantity: 5 diff --git a/Resources/Prototypes/Body/Organs/diona.yml b/Resources/Prototypes/Body/Organs/diona.yml index 69fc630b9e4..a2133f7f90a 100644 --- a/Resources/Prototypes/Body/Organs/diona.yml +++ b/Resources/Prototypes/Body/Organs/diona.yml @@ -27,11 +27,12 @@ - type: entity id: OrganDionaBrain - parent: [BaseDionaOrgan, OrganHumanBrain] + parent: OrganHumanBrain name: brain description: "The source of incredible, unending intelligence. Honk." components: - type: Sprite + sprite: Mobs/Species/Diona/organs.rsi state: brain - type: SolutionContainerManager solutions: @@ -102,7 +103,7 @@ layers: - state: lung-l - state: lung-r - - type: Lung + - type: Lung - type: Metabolizer removeEmpty: true solutionOnBody: false @@ -131,7 +132,7 @@ description: "The source of incredible, unending intelligence. Honk." components: - type: Brain - - type: Nymph # This will make the organs turn into a nymph when they're removed. + - type: Nymph # This will make the organs turn into a nymph when they're removed. entityPrototype: OrganDionaNymphBrain transferMind: true @@ -170,11 +171,11 @@ - type: entity id: OrganDionaNymphStomach - parent: MobDionaNymphAccent + parent: MobDionaNymphAccent noSpawn: true name: diona nymph suffix: Stomach - description: Contains the stomach of a formerly fully-formed Diona. It doesn't taste any better for it. + description: Contains the stomach of a formerly fully-formed Diona. It doesn't taste any better for it. components: - type: IsDeadIC - type: Body @@ -186,7 +187,7 @@ noSpawn: true name: diona nymph suffix: Lungs - description: Contains the lungs of a formerly fully-formed Diona. Breathtaking. + description: Contains the lungs of a formerly fully-formed Diona. Breathtaking. components: - type: IsDeadIC - type: Body diff --git a/Resources/Prototypes/Body/Organs/human.yml b/Resources/Prototypes/Body/Organs/human.yml index 69081020ce0..e6a04d4a60c 100644 --- a/Resources/Prototypes/Body/Organs/human.yml +++ b/Resources/Prototypes/Body/Organs/human.yml @@ -6,6 +6,13 @@ - type: Sprite sprite: Mobs/Species/Human/organs.rsi - type: Organ + +- type: entity + id: BaseHumanOrgan + parent: BaseHumanOrganUnGibbable + abstract: true + components: + - type: Gibbable - type: Food - type: Extractable grindableSolutionName: organ @@ -27,13 +34,6 @@ tags: - Meat -- type: entity - id: BaseHumanOrgan - parent: BaseHumanOrganUnGibbable - abstract: true - components: - - type: Gibbable - - type: entity id: OrganHumanBrain parent: BaseHumanOrganUnGibbable @@ -67,7 +67,7 @@ - type: FlavorProfile flavors: - people - + - type: entity id: OrganHumanEyes parent: BaseHumanOrgan diff --git a/Resources/Prototypes/Body/Organs/shadowkin.yml b/Resources/Prototypes/Body/Organs/shadowkin.yml new file mode 100644 index 00000000000..695ddec1ab2 --- /dev/null +++ b/Resources/Prototypes/Body/Organs/shadowkin.yml @@ -0,0 +1,113 @@ +- type: entity + id: OrganShadowkinBrain + parent: OrganHumanBrain + components: + - type: Sprite + sprite: Mobs/Species/Shadowkin/organs.rsi + state: brain + +- type: entity + id: OrganShadowkinEyes + parent: OrganHumanEyes + description: I see beyond anything you ever will! + components: + - type: Sprite + sprite: Mobs/Species/Shadowkin/organs.rsi + layers: + - state: eyes + +- type: entity + id: OrganShadowkinEars + parent: OrganHumanEars + description: Hey, listen! + components: + - type: Sprite + sprite: Mobs/Species/Shadowkin/organs.rsi + state: ears + +- type: entity + id: OrganShadowkinTongue + parent: OrganHumanTongue + components: + - type: Sprite + sprite: Mobs/Species/Shadowkin/organs.rsi + state: tongue + + +- type: entity + id: OrganShadowkinAppendix + parent: OrganHumanAppendix + components: + - type: Sprite + sprite: Mobs/Species/Shadowkin/organs.rsi + layers: + - state: appendix + + +- type: entity + id: OrganShadowkinHeart + parent: OrganHumanHeart + components: + - type: Sprite + sprite: Mobs/Species/Shadowkin/organs.rsi + state: heart + - type: Metabolizer + maxReagents: 2 + metabolizerTypes: [Shadowkin] + groups: + - id: Medicine + - id: Poison + - id: Narcotic + +- type: entity + id: OrganShadowkinStomach + parent: OrganHumanStomach + description: '"Yummy!", says the stomach, although you are unable to hear it.' + components: + - type: Sprite + sprite: Mobs/Species/Shadowkin/organs.rsi + state: stomach + - type: SolutionContainerManager + solutions: + stomach: + maxVol: 40 + food: + maxVol: 5 + reagents: + - ReagentId: UncookedAnimalProteins + Quantity: 5 + - type: Metabolizer + maxReagents: 3 + metabolizerTypes: [Shadowkin] + groups: + - id: Food + - id: Drink + +- type: entity + id: OrganShadowkinLiver + parent: OrganHumanLiver + description: "Live 'er? I hardly know 'er!" + components: + - type: Sprite + sprite: Mobs/Species/Shadowkin/organs.rsi + state: liver + - type: Metabolizer + maxReagents: 1 + metabolizerTypes: [Shadowkin] + groups: + - id: Alcohol + rateModifier: 0.1 + +- type: entity + id: OrganShadowkinKidneys + parent: OrganHumanKidneys + description: Give the kid their knees back, please, this is the third time this week. + components: + - type: Sprite + sprite: Mobs/Species/Shadowkin/organs.rsi + layers: + - state: kidneys + - type: Metabolizer + maxReagents: 5 + metabolizerTypes: [Shadowkin] + removeEmpty: true \ No newline at end of file diff --git a/Resources/Prototypes/Body/Organs/slime.yml b/Resources/Prototypes/Body/Organs/slime.yml index 3da76c5d4aa..5b908e75f48 100644 --- a/Resources/Prototypes/Body/Organs/slime.yml +++ b/Resources/Prototypes/Body/Organs/slime.yml @@ -1,6 +1,6 @@ - type: entity id: SentientSlimeCore - parent: [BaseItem, OrganHumanBrain] + parent: OrganHumanBrain name: sentient slime core description: "The source of incredible, unending gooeyness." components: @@ -34,7 +34,7 @@ - ReagentId: Slime Quantity: 10 - + - type: entity id: OrganSlimeLungs parent: BaseHumanOrgan diff --git a/Resources/Prototypes/Body/Parts/harpy.yml b/Resources/Prototypes/Body/Parts/harpy.yml new file mode 100644 index 00000000000..c0d798eb75e --- /dev/null +++ b/Resources/Prototypes/Body/Parts/harpy.yml @@ -0,0 +1,256 @@ +- type: entity + id: PartIPC + parent: BaseItem + name: "ipc body part" + abstract: true + components: + - type: Damageable + damageContainer: Inorganic + - type: BodyPart + - type: ContainerContainer + containers: + bodypart: !type:Container + ents: [] + - type: StaticPrice + price: 100 + +- type: entity + id: TorsoIPC + name: "ipc torso" + parent: PartIPC + components: + - type: Sprite + netsync: false +<<<<<<<< HEAD:Resources/Prototypes/Body/Parts/ipc.yml + sprite: Mobs/Species/IPC/parts.rsi + state: "torso_m" + - type: Icon + sprite: Mobs/Species/IPC/parts.rsi +======== + sprite: Mobs/Species/Harpy/parts.rsi + state: "torso_m" + - type: Icon + sprite: Mobs/Species/Harpy/parts.rsi +>>>>>>>> EE_Upstream/master:Resources/Prototypes/Body/Parts/harpy.yml + state: "torso_m" + - type: BodyPart + partType: Torso + +- type: entity + id: HeadIPC + name: "ipc head" + parent: PartIPC + components: + - type: Sprite + netsync: false +<<<<<<<< HEAD:Resources/Prototypes/Body/Parts/ipc.yml + sprite: Mobs/Species/IPC/parts.rsi + state: "head_m" + - type: Icon + sprite: Mobs/Species/IPC/parts.rsi +======== + sprite: Mobs/Species/Harpy/parts.rsi + state: "head_m" + - type: Icon + sprite: Mobs/Species/Harpy/parts.rsi +>>>>>>>> EE_Upstream/master:Resources/Prototypes/Body/Parts/harpy.yml + state: "head_m" + - type: BodyPart + partType: Head + vital: true + - type: Input + context: "ghost" + - type: MovementSpeedModifier + baseWalkSpeed: 0 + baseSprintSpeed: 0 + - type: InputMover + - type: GhostOnMove + - type: Tag + tags: + - Head + +- type: entity + id: LeftArmIPC + name: "left ipc arm" + parent: PartIPC + components: + - type: Sprite + netsync: false +<<<<<<<< HEAD:Resources/Prototypes/Body/Parts/ipc.yml + sprite: Mobs/Species/IPC/parts.rsi + state: "l_arm" + - type: Icon + sprite: Mobs/Species/IPC/parts.rsi +======== + sprite: Mobs/Species/Harpy/parts.rsi + state: "l_arm" + - type: Icon + sprite: Mobs/Species/Harpy/parts.rsi +>>>>>>>> EE_Upstream/master:Resources/Prototypes/Body/Parts/harpy.yml + state: "l_arm" + - type: BodyPart + partType: Arm + symmetry: Left + +- type: entity + id: RightArmIPC + name: "right ipc arm" + parent: PartIPC + components: + - type: Sprite + netsync: false +<<<<<<<< HEAD:Resources/Prototypes/Body/Parts/ipc.yml + sprite: Mobs/Species/IPC/parts.rsi + state: "r_arm" + - type: Icon + sprite: Mobs/Species/IPC/parts.rsi +======== + sprite: Mobs/Species/Harpy/parts.rsi + state: "r_arm" + - type: Icon + sprite: Mobs/Species/Harpy/parts.rsi +>>>>>>>> EE_Upstream/master:Resources/Prototypes/Body/Parts/harpy.yml + state: "r_arm" + - type: BodyPart + partType: Arm + symmetry: Right + +- type: entity + id: LeftHandIPC + name: "left ipc hand" + parent: PartIPC + components: + - type: Sprite + netsync: false +<<<<<<<< HEAD:Resources/Prototypes/Body/Parts/ipc.yml + sprite: Mobs/Species/IPC/parts.rsi + state: "l_hand" + - type: Icon + sprite: Mobs/Species/IPC/parts.rsi +======== + sprite: Mobs/Species/Harpy/parts.rsi + state: "l_hand" + - type: Icon + sprite: Mobs/Species/Harpy/parts.rsi +>>>>>>>> EE_Upstream/master:Resources/Prototypes/Body/Parts/harpy.yml + state: "l_hand" + - type: BodyPart + partType: Hand + symmetry: Left + +- type: entity + id: RightHandIPC + name: "right ipc hand" + parent: PartIPC + components: + - type: Sprite + netsync: false +<<<<<<<< HEAD:Resources/Prototypes/Body/Parts/ipc.yml + sprite: Mobs/Species/IPC/parts.rsi + state: "r_hand" + - type: Icon + sprite: Mobs/Species/IPC/parts.rsi +======== + sprite: Mobs/Species/Harpy/parts.rsi + state: "r_hand" + - type: Icon + sprite: Mobs/Species/Harpy/parts.rsi +>>>>>>>> EE_Upstream/master:Resources/Prototypes/Body/Parts/harpy.yml + state: "r_hand" + - type: BodyPart + partType: Hand + symmetry: Right + +- type: entity + id: LeftLegIPC + name: "left ipc leg" + parent: PartIPC + components: + - type: Sprite + netsync: false +<<<<<<<< HEAD:Resources/Prototypes/Body/Parts/ipc.yml + sprite: Mobs/Species/IPC/parts.rsi + state: "l_leg" + - type: Icon + sprite: Mobs/Species/IPC/parts.rsi +======== + sprite: Mobs/Species/Harpy/parts.rsi + state: "l_leg" + - type: Icon + sprite: Mobs/Species/Harpy/parts.rsi +>>>>>>>> EE_Upstream/master:Resources/Prototypes/Body/Parts/harpy.yml + state: "l_leg" + - type: BodyPart + partType: Leg + symmetry: Left + - type: MovementBodyPart + +- type: entity + id: RightLegIPC + name: "right ipc leg" + parent: PartIPC + components: + - type: Sprite + netsync: false +<<<<<<<< HEAD:Resources/Prototypes/Body/Parts/ipc.yml + sprite: Mobs/Species/IPC/parts.rsi + state: "r_leg" + - type: Icon + sprite: Mobs/Species/IPC/parts.rsi +======== + sprite: Mobs/Species/Harpy/parts.rsi + state: "r_leg" + - type: Icon + sprite: Mobs/Species/Harpy/parts.rsi +>>>>>>>> EE_Upstream/master:Resources/Prototypes/Body/Parts/harpy.yml + state: "r_leg" + - type: BodyPart + partType: Leg + symmetry: Right + - type: MovementBodyPart + +- type: entity + id: LeftFootIPC + name: "left ipc foot" + parent: PartIPC + components: + - type: Sprite + netsync: false +<<<<<<<< HEAD:Resources/Prototypes/Body/Parts/ipc.yml + sprite: Mobs/Species/IPC/parts.rsi + state: "l_foot" + - type: Icon + sprite: Mobs/Species/IPC/parts.rsi +======== + sprite: Mobs/Species/Harpy/parts.rsi + state: "l_foot" + - type: Icon + sprite: Mobs/Species/Harpy/parts.rsi +>>>>>>>> EE_Upstream/master:Resources/Prototypes/Body/Parts/harpy.yml + state: "l_foot" + - type: BodyPart + partType: Foot + symmetry: Left + +- type: entity + id: RightFootIPC + name: "right ipc foot" + parent: PartIPC + components: + - type: Sprite + netsync: false +<<<<<<<< HEAD:Resources/Prototypes/Body/Parts/ipc.yml + sprite: Mobs/Species/IPC/parts.rsi + state: "r_foot" + - type: Icon + sprite: Mobs/Species/IPC/parts.rsi +======== + sprite: Mobs/Species/Harpy/parts.rsi + state: "r_foot" + - type: Icon + sprite: Mobs/Species/Harpy/parts.rsi +>>>>>>>> EE_Upstream/master:Resources/Prototypes/Body/Parts/harpy.yml + state: "r_foot" + - type: BodyPart + partType: Foot + symmetry: Right diff --git a/Resources/Prototypes/Body/Parts/shadowkin.yml b/Resources/Prototypes/Body/Parts/shadowkin.yml new file mode 100644 index 00000000000..0ddff93443c --- /dev/null +++ b/Resources/Prototypes/Body/Parts/shadowkin.yml @@ -0,0 +1,155 @@ +- type: entity + id: PartShadowkin + parent: BaseItem + name: "Shadowkin body part" + abstract: true + components: + - type: Sprite + netsync: false + sprite: Mobs/Species/Shadowkin/parts.rsi + - type: Icon + sprite: Mobs/Species/Shadowkin/parts.rsi + - type: Damageable + damageContainer: Biological + - type: BodyPart + - type: ContainerContainer + containers: + bodypart: !type:Container + ents: [] + +- type: entity + id: TorsoShadowkin + name: "Shadowkin torso" + parent: PartShadowkin + components: + - type: Sprite + state: "torso_m" + - type: Icon + state: "torso_m" + - type: BodyPart + partType: Torso + +- type: entity + id: HeadShadowkin + name: "Shadowkin head" + parent: PartShadowkin + components: + - type: Sprite + state: "head_m" + - type: Icon + state: "head_m" + - type: BodyPart + partType: Head + - type: Input + context: "ghost" + - type: MovementSpeedModifier + baseWalkSpeed: 0 + baseSprintSpeed: 0 + - type: InputMover + - type: GhostOnMove + +- type: entity + id: LeftArmShadowkin + name: "left Shadowkin arm" + parent: PartShadowkin + components: + - type: Sprite + state: "l_arm" + - type: Icon + state: "l_arm" + - type: BodyPart + partType: Arm + symmetry: Left + +- type: entity + id: RightArmShadowkin + name: "right Shadowkin arm" + parent: PartShadowkin + components: + - type: Sprite + state: "r_arm" + - type: Icon + state: "r_arm" + - type: BodyPart + partType: Arm + symmetry: Right + +- type: entity + id: LeftHandShadowkin + name: "left Shadowkin hand" + parent: PartShadowkin + components: + - type: Sprite + state: "l_hand" + - type: Icon + state: "l_hand" + - type: BodyPart + partType: Hand + symmetry: Left + +- type: entity + id: RightHandShadowkin + name: "right Shadowkin hand" + parent: PartShadowkin + components: + - type: Sprite + state: "r_hand" + - type: Icon + state: "r_hand" + - type: BodyPart + partType: Hand + symmetry: Right + +- type: entity + id: LeftLegShadowkin + name: "left Shadowkin leg" + parent: PartShadowkin + components: + - type: Sprite + state: "l_leg" + - type: Icon + state: "l_leg" + - type: BodyPart + partType: Leg + symmetry: Left + - type: MovementBodyPart + +- type: entity + id: RightLegShadowkin + name: "right Shadowkin leg" + parent: PartShadowkin + components: + - type: Sprite + state: "r_leg" + - type: Icon + state: "r_leg" + - type: BodyPart + partType: Leg + symmetry: Right + - type: MovementBodyPart + +- type: entity + id: LeftFootShadowkin + name: "left Shadowkin foot" + parent: PartShadowkin + components: + - type: Sprite + state: "l_foot" + - type: Icon + state: "l_foot" + - type: BodyPart + partType: Foot + symmetry: Left + +- type: entity + id: RightFootShadowkin + name: "right Shadowkin foot" + parent: PartShadowkin + components: + - type: Sprite + state: "r_foot" + - type: Icon + state: "r_foot" + - type: BodyPart + partType: Foot + symmetry: Right diff --git a/Resources/Prototypes/Body/Parts/terminator.yml b/Resources/Prototypes/Body/Parts/terminator.yml deleted file mode 100644 index 58530da959c..00000000000 --- a/Resources/Prototypes/Body/Parts/terminator.yml +++ /dev/null @@ -1,158 +0,0 @@ -- type: entity - abstract: true - parent: BaseItem - id: PartTerminator - name: nt-800 body part - components: - - type: Sprite - sprite: Mobs/Species/Terminator/parts.rsi - - type: Icon - sprite: Mobs/Species/Terminator/parts.rsi - - type: Damageable - damageContainer: Inorganic - damageModifierSet: Cybernetic - - type: BodyPart - - type: ContainerContainer - containers: - bodypart: !type:Container - ents: [] - - type: Gibbable - - type: StaticPrice - price: 200 - -- type: entity - parent: PartTerminator - id: TorsoTerminator - name: nt-800 torso - components: - - type: Sprite - state: torso_m - - type: Icon - state: torso_m - - type: BodyPart - partType: Torso - -- type: entity - parent: PartTerminator - id: HeadTerminator - name: nt-800 skull - description: Its red eyes have powered down... for now. - components: - - type: Sprite - state: skull_icon - - type: Icon - state: skull_icon - - type: BodyPart - partType: Head - # killing a terminators worth big bucks - - type: StaticPrice - price: 2000 - - type: Tag - tags: - - Head - -- type: entity - parent: PartTerminator - id: LeftArmTerminator - name: left nt-800 arm - components: - - type: Sprite - state: l_arm - - type: Icon - state: l_arm - - type: BodyPart - partType: Arm - symmetry: Left - -- type: entity - parent: PartTerminator - id: RightArmTerminator - name: right nt-800 arm - components: - - type: Sprite - state: r_arm - - type: Icon - state: r_arm - - type: BodyPart - partType: Arm - symmetry: Right - -- type: entity - parent: PartTerminator - id: LeftHandTerminator - name: left nt-800 hand - components: - - type: Sprite - state: l_hand - - type: Icon - state: l_hand - - type: BodyPart - partType: Hand - symmetry: Left - -- type: entity - parent: PartTerminator - id: RightHandTerminator - name: right nt-800 hand - components: - - type: Sprite - state: r_hand - - type: Icon - state: r_hand - - type: BodyPart - partType: Hand - symmetry: Right - -- type: entity - parent: PartTerminator - id: LeftLegTerminator - name: left nt-800 leg - components: - - type: Sprite - state: l_leg - - type: Icon - state: l_leg - - type: BodyPart - partType: Leg - symmetry: Left - - type: MovementBodyPart - -- type: entity - parent: PartTerminator - id: RightLegTerminator - name: right nt-800 leg - components: - - type: Sprite - state: r_leg - - type: Icon - state: r_leg - - type: BodyPart - partType: Leg - symmetry: Right - - type: MovementBodyPart - -- type: entity - parent: PartTerminator - id: LeftFootTerminator - name: left nt-800 foot - components: - - type: Sprite - state: l_foot - - type: Icon - state: l_foot - - type: BodyPart - partType: Foot - symmetry: Left - -- type: entity - parent: PartTerminator - id: RightFootTerminator - name: right nt-800 foot - components: - - type: Sprite - state: r_foot - - type: Icon - state: r_foot - - type: BodyPart - partType: Foot - symmetry: Right diff --git a/Resources/Prototypes/Body/Parts/vox.yml b/Resources/Prototypes/Body/Parts/vox.yml index b163ed0864f..9f89a0c583d 100644 --- a/Resources/Prototypes/Body/Parts/vox.yml +++ b/Resources/Prototypes/Body/Parts/vox.yml @@ -33,10 +33,10 @@ components: - type: Sprite sprite: Mobs/Species/Vox/parts.rsi - state: "torso_m" + state: "torso" - type: Icon sprite: Mobs/Species/Vox/parts.rsi - state: "torso_m" + state: "torso" - type: BodyPart partType: Torso - type: Extractable @@ -54,10 +54,10 @@ components: - type: Sprite sprite: Mobs/Species/Vox/parts.rsi - state: "head_m" + state: "head" - type: Icon sprite: Mobs/Species/Vox/parts.rsi - state: "head_m" + state: "head" - type: BodyPart partType: Head vital: true diff --git a/Resources/Prototypes/Body/Prototypes/Friendshaped.yml b/Resources/Prototypes/Body/Prototypes/Friendshaped.yml new file mode 100644 index 00000000000..0ab85a03433 --- /dev/null +++ b/Resources/Prototypes/Body/Prototypes/Friendshaped.yml @@ -0,0 +1,24 @@ +- type: body + id: Friendshaped + name: "Friend-Shaped" + root: torso + slots: + torso: + part: TorsoAnimal + connections: + - hands + - legs + organs: + lungs: OrganAnimalLungs + stomach: OrganFriendStomach + liver: OrganAnimalLiver + heart: OrganAnimalHeart + kidneys: OrganAnimalKidneys + hands: + part: HandsAnimal + legs: + part: LegsAnimal + connections: + - feet + feet: + part: FeetAnimal diff --git a/Resources/Prototypes/Body/Prototypes/shadowkin.yml b/Resources/Prototypes/Body/Prototypes/shadowkin.yml new file mode 100644 index 00000000000..dddad7bdb5d --- /dev/null +++ b/Resources/Prototypes/Body/Prototypes/shadowkin.yml @@ -0,0 +1,48 @@ +- type: body + id: Shadowkin + name: "Shadowkin" + root: torso + slots: + head: + part: HeadShadowkin + connections: + - torso + organs: + brain: OrganShadowkinBrain + eyes: OrganShadowkinEyes + torso: + part: TorsoShadowkin + connections: + - left arm + - right arm + - left leg + - right leg + organs: + heart: OrganShadowkinHeart + stomach: OrganShadowkinStomach + liver: OrganShadowkinLiver + kidneys: OrganShadowkinKidneys + right arm: + part: RightArmShadowkin + connections: + - right hand + left arm: + part: LeftArmShadowkin + connections: + - left hand + right hand: + part: RightHandShadowkin + left hand: + part: LeftHandShadowkin + right leg: + part: RightLegShadowkin + connections: + - right foot + left leg: + part: LeftLegShadowkin + connections: + - left foot + right foot: + part: RightFootShadowkin + left foot: + part: LeftFootShadowkin \ No newline at end of file diff --git a/Resources/Prototypes/Body/Prototypes/terminator.yml b/Resources/Prototypes/Body/Prototypes/terminator.yml deleted file mode 100644 index c271a89d869..00000000000 --- a/Resources/Prototypes/Body/Prototypes/terminator.yml +++ /dev/null @@ -1,85 +0,0 @@ -# not quite human... -- type: body - id: TerminatorFlesh - name: exterminator - root: torso - slots: - head: - part: HeadHuman - connections: - - torso - organs: - brain: MobTerminatorEndoskeleton - torso: - part: TorsoHuman - connections: - - left arm - - right arm - - left leg - - right leg - right arm: - part: RightArmHuman - connections: - - right hand - left arm: - part: LeftArmHuman - connections: - - left hand - right hand: - part: RightHandHuman - left hand: - part: LeftHandHuman - right leg: - part: RightLegHuman - connections: - - right foot - left leg: - part: LeftLegHuman - connections: - - left foot - right foot: - part: RightFootHuman - left foot: - part: LeftFootHuman - -# TODO: terminator body parts -- type: body - id: TerminatorEndoskeleton - name: terminatorEndoskeleton - root: torso - slots: - head: - part: HeadTerminator - connections: - - torso - torso: - part: TorsoTerminator - connections: - - left arm - - right arm - - left leg - - right leg - right arm: - part: RightArmTerminator - connections: - - right hand - left arm: - part: LeftArmTerminator - connections: - - left hand - right hand: - part: RightHandTerminator - left hand: - part: LeftHandTerminator - right leg: - part: RightLegTerminator - connections: - - right foot - left leg: - part: LeftLegTerminator - connections: - - left foot - right foot: - part: RightFootTerminator - left foot: - part: LeftFootTerminator diff --git a/Resources/Prototypes/Catalog/Cargo/cargo_engines.yml b/Resources/Prototypes/Catalog/Cargo/cargo_engines.yml index bd00b0c2d4c..8d3bea5075c 100644 --- a/Resources/Prototypes/Catalog/Cargo/cargo_engines.yml +++ b/Resources/Prototypes/Catalog/Cargo/cargo_engines.yml @@ -28,17 +28,17 @@ category: cargoproduct-category-name-engineering group: market -#- type: cargoProduct -# name: "emitter crate" -# id: EngineSingularityEmitter -# description: "Contains an emitter. Used only for dangerous applications." -# icon: -# sprite: Structures/Power/Generation/Singularity/emitter.rsi -# state: emitter2 -# product: CrateEngineeringSingularityEmitter -# cost: 3000 -# category: cargoproduct-category-name-engineering -# group: market +- type: cargoProduct + name: "emitter crate" + id: EngineSingularityEmitter + description: "Contains an emitter. Used only for dangerous applications." + icon: + sprite: Structures/Power/Generation/Singularity/emitter.rsi + state: emitter2 + product: CrateEngineeringSingularityEmitter + cost: 3000 + category: cargoproduct-category-name-engineering + group: market - type: cargoProduct id: EngineSingularityCollector diff --git a/Resources/Prototypes/Catalog/Cargo/cargo_hardsuits.yml b/Resources/Prototypes/Catalog/Cargo/cargo_hardsuits.yml new file mode 100644 index 00000000000..a2f8b035b0f --- /dev/null +++ b/Resources/Prototypes/Catalog/Cargo/cargo_hardsuits.yml @@ -0,0 +1,92 @@ +# Engineering +- type: cargoProduct + id: EngineeringFotiaHardsuit + icon: + sprite: Clothing/OuterClothing/Hardsuits/atmospherics.rsi + state: icon + product: CrateEngineeringFotiaHardsuit + cost: 2250 + category: cargoproduct-category-name-hardsuits + group: market + +- type: cargoProduct + id: EngineeringLampsiHardsuit + icon: + sprite: Clothing/OuterClothing/Hardsuits/engineering.rsi + state: icon + product: CrateEngineeringLampsiHardsuit + cost: 2250 + category: cargoproduct-category-name-hardsuits + group: market + +# Logistics +- type: cargoProduct + id: LogisticsKritiHardsuit + icon: + sprite: Clothing/OuterClothing/Hardsuits/spatio.rsi + state: icon + product: CrateLogisticsKritiHardsuit + cost: 1250 + category: cargoproduct-category-name-hardsuits + group: market + +- type: cargoProduct + id: LogisticsLavrionHardsuit + icon: + sprite: Clothing/OuterClothing/Hardsuits/salvage.rsi + state: icon + product: CrateLogisticsLavrionHardsuit + cost: 3500 + category: cargoproduct-category-name-hardsuits + group: market + +# Security +- type: cargoProduct + id: SecurityShanlinTacsuit + icon: + sprite: Nyanotrasen/Clothing/OuterClothing/ReverseEngineering/syndicate.rsi + state: icon + product: CrateSecurityShanlinTacsuit + cost: 17500 + category: cargoproduct-category-name-hardsuits + group: market + +- type: cargoProduct + id: SecurityGuanYuTacsuit + icon: + sprite: Nyanotrasen/Clothing/OuterClothing/ReverseEngineering/juggernaut.rsi + state: icon + product: CrateSecurityGuanYuTacsuit + cost: 30000 + category: cargoproduct-category-name-hardsuits + group: market + +- type: cargoProduct + id: SecurityBaghaturTacsuit + icon: + sprite: DeltaV/Clothing/OuterClothing/Hardsuits/Combat/standard.rsi + state: icon + product: CrateSecurityBaghaturTacsuit + cost: 5000 + category: cargoproduct-category-name-hardsuits + group: market + +- type: cargoProduct + id: SecuritySuldeTacsuit + icon: + sprite: DeltaV/Clothing/OuterClothing/Hardsuits/Combat/riot.rsi + state: icon + product: CrateSecuritySuldeTacsuit + cost: 7500 + category: cargoproduct-category-name-hardsuits + group: market + +- type: cargoProduct + id: SecurityTsagaanTacsuit + icon: + sprite: DeltaV/Clothing/OuterClothing/Hardsuits/Combat/medical.rsi + state: icon + product: CrateSecurityTsagaanTacsuit + cost: 5500 + category: cargoproduct-category-name-hardsuits + group: market diff --git a/Resources/Prototypes/Catalog/Cargo/cargo_materials.yml b/Resources/Prototypes/Catalog/Cargo/cargo_materials.yml index 6f945001d93..1529a05385d 100644 --- a/Resources/Prototypes/Catalog/Cargo/cargo_materials.yml +++ b/Resources/Prototypes/Catalog/Cargo/cargo_materials.yml @@ -107,3 +107,33 @@ cost: 1000 category: cargoproduct-category-name-materials group: market + +- type: cargoProduct + id: MaterialUranium + icon: + sprite: Objects/Materials/Sheets/other.rsi + state: uranium_3 + product: CrateMaterialUranium + cost: 3000 + category: cargoproduct-category-name-materials + group: market + +- type: cargoProduct + id: MaterialGold + icon: + sprite: Objects/Materials/ingots.rsi + state: gold_3 + product: CrateMaterialGold + cost: 3000 + category: cargoproduct-category-name-materials + group: market + +- type: cargoProduct + id: MaterialSilver + icon: + sprite: Objects/Materials/ingots.rsi + state: silver_3 + product: CrateMaterialSilver + cost: 3000 + category: cargoproduct-category-name-materials + group: market diff --git a/Resources/Prototypes/Catalog/Cargo/cargo_security.yml b/Resources/Prototypes/Catalog/Cargo/cargo_security.yml index 2ad7628ddb3..e22f9fd5e71 100644 --- a/Resources/Prototypes/Catalog/Cargo/cargo_security.yml +++ b/Resources/Prototypes/Catalog/Cargo/cargo_security.yml @@ -34,7 +34,7 @@ sprite: DeltaV/Clothing/OuterClothing/Armor/riot.rsi # DeltaV - resprite state: icon product: CrateSecurityRiot - cost: 5500 + cost: 7500 category: cargoproduct-category-name-security group: market diff --git a/Resources/Prototypes/Catalog/Fills/Backpacks/StarterGear/backpack.yml b/Resources/Prototypes/Catalog/Fills/Backpacks/StarterGear/backpack.yml index 95f8cf87f29..da46ae75979 100644 --- a/Resources/Prototypes/Catalog/Fills/Backpacks/StarterGear/backpack.yml +++ b/Resources/Prototypes/Catalog/Fills/Backpacks/StarterGear/backpack.yml @@ -178,21 +178,11 @@ noSpawn: true parent: ClothingBackpack id: ClothingBackpackChaplainFilled - components: - - type: StorageFill - contents: - - id: Bible - - id: RubberStampChaplain - type: entity noSpawn: true parent: ClothingBackpack id: ClothingBackpackMusicianFilled - components: - - type: StorageFill - contents: - - id: AcousticGuitarInstrument - - id: SaxophoneInstrument - type: entity noSpawn: true diff --git a/Resources/Prototypes/Catalog/Fills/Crates/engines.yml b/Resources/Prototypes/Catalog/Fills/Crates/engines.yml index 9b47036b017..79698b550a7 100644 --- a/Resources/Prototypes/Catalog/Fills/Crates/engines.yml +++ b/Resources/Prototypes/Catalog/Fills/Crates/engines.yml @@ -42,7 +42,7 @@ components: - type: StorageFill contents: - - id: Emitter # TODO change to flatpack + - id: EmitterFlatpack # TODO change to flatpack - type: entity id: CrateEngineeringSingularityCollector diff --git a/Resources/Prototypes/Catalog/Fills/Crates/hardsuits.yml b/Resources/Prototypes/Catalog/Fills/Crates/hardsuits.yml new file mode 100644 index 00000000000..9d6f46c499d --- /dev/null +++ b/Resources/Prototypes/Catalog/Fills/Crates/hardsuits.yml @@ -0,0 +1,92 @@ +# Engineering +- type: entity + id: CrateEngineeringFotiaHardsuit + parent: CrateEngineering + name: fotia hardsuit crate + description: Contains a single HpI-19t "Fotia" hardsuit. Requires Engineering access to open. + components: + - type: StorageFill + contents: + - id: ClothingOuterHardsuitAtmos + +- type: entity + id: CrateEngineeringLampsiHardsuit + parent: CrateEngineering + name: lampsi hardsuit crate + description: Contains a single HpI-19r "Lampsi" hardsuit. Requires Engineering access to open. + components: + - type: StorageFill + contents: + - id: ClothingOuterHardsuitAtmos + +# Logistics +- type: entity + id: CrateLogisticsKritiHardsuit + parent: CrateGenericSteel + name: kriti hardsuit crate + description: Contains a single HpI-20s "Kriti" hardsuit. + components: + - type: StorageFill + contents: + - id: ClothingOuterHardsuitSpatio + +- type: entity + id: CrateLogisticsLavrionHardsuit + parent: CrateGenericSteel + name: lavrion hardsuit crate + description: Contains a single HpI-20a "Lavrion" hardsuit. + components: + - type: StorageFill + contents: + - id: ClothingOuterHardsuitSalvage + +# Security +- type: entity + id: CrateSecurityShanlinTacsuit + parent: CrateSecgear + name: shanlin tacsuit crate + description: Contains a single CSA-51a "Shanlin" tacsuit. Requires Security access to open. + components: + - type: StorageFill + contents: + - id: ClothingOuterHardsuitSyndieReverseEngineered + +- type: entity + id: CrateSecurityGuanYuTacsuit + parent: CrateSecgear + name: guan-yu tacsuit crate + description: Contains a single CSA-80UA "Guan-Yu" tacsuit. Requires Security access to open. + components: + - type: StorageFill + contents: + - id: ClothingOuterHardsuitJuggernautReverseEngineered + +- type: entity + id: CrateSecurityBaghaturTacsuit + parent: CrateSecgear + name: baghatur tacsuit crate + description: Contains a single FPA-83s "Baghatur" tacsuit. Requires Security access to open. + components: + - type: StorageFill + contents: + - id: ClothingOuterHardsuitCombatStandard + +- type: entity + id: CrateSecuritySuldeTacsuit + parent: CrateSecgear + name: sulde tacsuit crate + description: Contains a single FPA-93 - "Sulde Mk.II" tacsuit. Requires Security access to open. + components: + - type: StorageFill + contents: + - id: ClothingOuterHardsuitCombatRiot + +- type: entity + id: CrateSecurityTsagaanTacsuit + parent: CrateSecgear + name: tsagaan tacsuit crate + description: Contains a single FPA-86 - "Tsagaan Mk.II" tacsuit. Requires Security access to open. + components: + - type: StorageFill + contents: + - id: ClothingOuterHardsuitCombatMedical diff --git a/Resources/Prototypes/Catalog/Fills/Crates/materials.yml b/Resources/Prototypes/Catalog/Fills/Crates/materials.yml index bd47f984775..0300830e3bf 100644 --- a/Resources/Prototypes/Catalog/Fills/Crates/materials.yml +++ b/Resources/Prototypes/Catalog/Fills/Crates/materials.yml @@ -127,3 +127,33 @@ # contents: # - id: WaterTankFull # amount: 1 + +- type: entity + id: CrateMaterialUranium + name: uranium crate + parent: CrateUranium + components: + - type: StorageFill + contents: + - id: SheetUranium + amount: 3 + +- type: entity + id: CrateMaterialGold + name: gold crate + parent: CrateGenericSteel + components: + - type: StorageFill + contents: + - id: IngotGold + amount: 3 + +- type: entity + id: CrateMaterialSilver + name: gold crate + parent: CrateGenericSteel + components: + - type: StorageFill + contents: + - id: IngotSilver + amount: 3 diff --git a/Resources/Prototypes/Catalog/Fills/Crates/service.yml b/Resources/Prototypes/Catalog/Fills/Crates/service.yml index 141f98edab2..35e66ac4d35 100644 --- a/Resources/Prototypes/Catalog/Fills/Crates/service.yml +++ b/Resources/Prototypes/Catalog/Fills/Crates/service.yml @@ -20,7 +20,7 @@ - id: Plunger amount: 2 - id: BoxCleanerGrenades - + - type: entity id: CrateServiceReplacementLights parent: CrateGenericSteel @@ -88,6 +88,10 @@ - id: ClothingNeckCloakVoid - id: RevolverCapGun - id: BarberScissors + - id: ClothingUniformJumpskirtOldDress + - id: BikeHorn + - id: ClownRecorder + - id: ClothingBeltSuspenders - type: entity id: CrateServiceCustomSmokable diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/engineer.yml b/Resources/Prototypes/Catalog/Fills/Lockers/engineer.yml index e4d995e52ee..b3efb6ec1d2 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/engineer.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/engineer.yml @@ -65,13 +65,20 @@ components: - type: StorageFill contents: + - id: ClothingHeadHatWelding + - id: ClothingHeadHatWelding + - id: ClothingHeadHatWelding + prob: 0.5 + - id: Welder + - id: Welder - id: WelderMini + orGroup: thirdWelder - id: Welder - prob: 0.7 + prob: 0.33 + orGroup: thirdWelder - id: WelderIndustrial - prob: 0.5 - - id: ClothingHeadHatWelding - prob: 0.5 + prob: 0.33 + orGroup: thirdWelder - type: entity id: LockerAtmosphericsFilledHardsuit diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml index 752591da371..5898468c344 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml @@ -15,6 +15,8 @@ prob: 0.50 - id: DoorRemoteCargo - id: RubberStampQm + - id: RubberStampDenied + - id: RubberStampApproved - id: ClothingHeadsetAltCargo - id: BoxEncryptionKeyCargo - id: SpaceCashLuckyBill # DeltaV - LO steal objective, see Resources/Prototypes/DeltaV/Entities/Objects/Misc/first_bill.yml @@ -132,6 +134,8 @@ - id: DoorRemoteService - id: ClothingNeckGoldmedal - id: RubberStampHop + - id: RubberStampDenied + - id: RubberStampApproved - id: BoxEncryptionKeyPassenger - id: BoxEncryptionKeyService - id: AccessConfigurator @@ -315,7 +319,6 @@ - id: HoloprojectorSecurity - id: BookSecretDocuments - id: BoxPDASecurity # Delta-V - - id: WeaponEnergyGunMultiphase # DeltaV - HoS Energy Gun - id: HoSIDCard # Delta-V - id: LunchboxCommandFilledRandom # Delta-V Lunchboxes! prob: 0.3 @@ -344,7 +347,6 @@ - id: HoloprojectorSecurity - id: BookSecretDocuments - id: BoxPDASecurity # Delta-V - - id: WeaponEnergyGunMultiphase # DeltaV - HoS Energy Gun - id: HoSIDCard # Delta-V - id: LunchboxCommandFilledRandom # Delta-V Lunchboxes! prob: 0.3 diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/misc.yml b/Resources/Prototypes/Catalog/Fills/Lockers/misc.yml index 3a9211d2489..eaf35667ef9 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/misc.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/misc.yml @@ -307,3 +307,15 @@ - id: WeaponSniperMosin prob: 0.0010 orGroup: syndiemaintloot + +- type: entity + id: ClosetWallRadiationFilled + suffix: Filled + parent: ClosetWallRadiation + components: + - type: StorageFill + contents: + - id: ClothingOuterSuitRad + amount: 2 + - id: GeigerCounter + amount: 2 diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/service.yml b/Resources/Prototypes/Catalog/Fills/Lockers/service.yml index 83bbdb435f3..ba386a83acf 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/service.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/service.yml @@ -20,6 +20,28 @@ - id: LunchboxServiceFilledRandom # Delta-V Lunchboxes! prob: 0.3 +- type: entity + id: LockerBartenderFilled + suffix: Filled + parent: LockerBartender + components: + - type: StorageFill + contents: + - id: DrinkShaker + - id: ClothingEyesHudBeer + - id: HandLabeler + amount: 1 + - id: DrinkBottleBeer + prob: 0.5 + - id: DrinkBottleBeer + prob: 0.5 + - id: DrinkBottleBeer + prob: 0.5 + - id: RagItem + amount: 2 + - id: LunchboxServiceFilledRandom # Delta-V Lunchboxes! + prob: 0.3 + #- type: entity # id: LockerFormalFilled # suffix: Filled diff --git a/Resources/Prototypes/Catalog/Fills/Paper/manuals.yml b/Resources/Prototypes/Catalog/Fills/Paper/manuals.yml index e13070d1ba9..4893fa2557f 100644 --- a/Resources/Prototypes/Catalog/Fills/Paper/manuals.yml +++ b/Resources/Prototypes/Catalog/Fills/Paper/manuals.yml @@ -19,7 +19,7 @@ key: enum.PaperUiKey.Key - type: UserInterface interfaces: - - key: enum.PaperUiKey.Key - type: PaperBoundUserInterface + enum.PaperUiKey.Key: + type: PaperBoundUserInterface - type: Paper content: book-text-holoparasite-info diff --git a/Resources/Prototypes/Catalog/Jukebox/Standard.yml b/Resources/Prototypes/Catalog/Jukebox/Standard.yml index e9d86874c59..7440428bd49 100644 --- a/Resources/Prototypes/Catalog/Jukebox/Standard.yml +++ b/Resources/Prototypes/Catalog/Jukebox/Standard.yml @@ -33,3 +33,9 @@ name: Qwertyquerty - Starlight path: path: /Audio/Jukebox/starlight.ogg + +- type: jukebox + id: sunset + name: PigeonBeans - Sunset + path: + path: /Audio/Jukebox/sunset.ogg diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/boozeomat.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/boozeomat.yml index ac298b240aa..1d86640d1c9 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/boozeomat.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/boozeomat.yml @@ -7,6 +7,9 @@ DrinkVacuumFlask: 5 DrinkFlaskBar: 5 DrinkShaker: 5 + DrinkJigger: 5 + DrinkIceBucket: 2 + BarSpoon: 3 CustomDrinkJug: 2 #to allow for custom drinks in the soda/booze dispensers DrinkAbsintheBottleFull: 2 DrinkAleBottleFull: 5 @@ -15,6 +18,7 @@ DrinkCognacBottleFull: 4 DrinkCoconutWaterCarton: 3 DrinkColaBottleFull: 4 + DrinkEnergyDrinkCan: 8 DrinkMilkCarton: 2 DrinkCreamCarton: 5 DrinkGinBottleFull: 3 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/chang.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/chang.yml index 282f58535b0..5befd85ca84 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/chang.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/chang.yml @@ -7,4 +7,5 @@ DrinkHellRamen: 3 FoodSnackChowMein: 3 FoodSnackDanDanNoodles: 3 + PairedChopsticks: 3 # rice? diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/curadrobe.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/curadrobe.yml index aac1cbb3f49..fe332ea52dc 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/curadrobe.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/curadrobe.yml @@ -4,6 +4,7 @@ BooksBag: 2 BriefcaseBrown: 2 HandLabeler: 2 + Cane: 3 ClothingEyesGlasses: 2 ClothingEyesGlassesJamjar: 2 ClothingNeckScarfStripedGreen: 2 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/detdrobe.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/detdrobe.yml index f45dd229a2a..91e45c83916 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/detdrobe.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/detdrobe.yml @@ -4,7 +4,7 @@ ClothingUniformJumpsuitDetective: 2 ClothingUniformJumpskirtDetective: 2 ClothingShoesColorBrown: 2 - ClothingOuterCoatDetective: 2 + ClothingOuterCoatDetectiveLoadout: 2 ClothingHeadHatFedoraBrown: 2 ClothingUniformJumpsuitDetectiveGrey: 2 ClothingUniformJumpskirtDetectiveGrey: 2 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/dinnerware.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/dinnerware.yml index 0b9a73aa6e6..ba270a9af84 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/dinnerware.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/dinnerware.yml @@ -6,6 +6,7 @@ RollingPin: 4 Spoon: 4 Fork: 4 + PairedChopsticks: 4 FoodBowlBig: 10 FoodPlate: 10 FoodPlateSmall: 10 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/discount.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/discount.yml index ddf79432175..fc8492dcf19 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/discount.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/discount.yml @@ -4,6 +4,7 @@ FoodSnackCheesie: 3 FoodSnackChips: 3 FoodSnackBoritos: 3 + DrinkEnergyDrinkCan: 4 FoodSnackPopcorn: 3 FoodSnackEnergy: 3 CigPackMixed: 2 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/medical.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/medical.yml index 6ac13d48d53..5f4600ed132 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/medical.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/medical.yml @@ -7,8 +7,7 @@ Bloodpack: 5 EpinephrineChemistryBottle: 3 Syringe: 5 - Portafib: 1 # DeltaV - Add Portafibs, see Prototypes/DeltaV/Entities/Objects/Devices/Medical/portafib.yml - ClothingEyesGlasses: 5 # SimpleStation14 NearsightedTrait + Portafib: 1 + ClothingEyesGlasses: 5 ClothingEyesHudMedical: 2 ClothingEyesEyepatchHudMedical: 2 - diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/sec.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/sec.yml index 01b58ae40fb..f62ba729506 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/sec.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/sec.yml @@ -16,14 +16,16 @@ ClothingBeltSecurityWebbing: 5 CombatKnife: 3 Zipties: 12 + BolaEnergy: 6 RiotShield: 2 RiotLaserShield: 2 RiotBulletShield: 2 - ClothingHeadHelmetInsulated: 2 # Nyanotrasen - Insulative headgear - ClothingHeadCage: 2 # Nyanotrasen - Insulative headgear - ClothingOuterArmorPlateCarrier: 2 # DeltaV - moved body armour from SecDrobe to SecTech + RadioHandheldSecurity: 5 + ClothingHeadHelmetInsulated: 2 + ClothingHeadCage: 2 + ClothingOuterArmorPlateCarrier: 2 ClothingOuterArmorDuraVest: 2 - ClothingHeadHelmetBasic: 2 # DeltaV - added helmets to the SecTech. Another line of defense between the tide and your grey matter. + ClothingHeadHelmetBasic: 2 BreachingCharge: 8 # security officers need to follow a diet regimen! contrabandInventory: diff --git a/Resources/Prototypes/Catalog/spellbook_catalog.yml b/Resources/Prototypes/Catalog/spellbook_catalog.yml new file mode 100644 index 00000000000..38b95c3273c --- /dev/null +++ b/Resources/Prototypes/Catalog/spellbook_catalog.yml @@ -0,0 +1,140 @@ +# Offensive +- type: listing + id: SpellbookFireball + name: spellbook-fireball-name + description: spellbook-fireball-desc + productAction: ActionFireball + productUpgradeId: SpellbookFireballUpgrade + cost: + WizCoin: 2 + categories: + - SpellbookOffensive + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + +- type: listing + id: SpellbookRodForm + name: spellbook-polymorph-rod-name + description: spellbook-polymorph-rod-desc + productAction: ActionPolymorphWizardRod + cost: + WizCoin: 3 + categories: + - SpellbookOffensive + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + +# Defensive +- type: listing + id: SpellbookForceWall + name: spellbook-force-wall-name + description: spellbook-force-wall-desc + productAction: ActionForceWall + cost: + WizCoin: 3 + categories: + - SpellbookDefensive + +# Utility +- type: listing + id: SpellbookPolymorphSpider + name: spellbook-polymoprh-spider-name + description: spellbook-polymorph-spider-desc + productAction: ActionPolymorphWizardSpider + cost: + WizCoin: 2 + categories: + - SpellbookUtility + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + +- type: listing + id: SpellbookBlink + name: spellbook-blink-name + description: spellbook-blink-desc + productAction: ActionBlink + cost: + WizCoin: 1 + categories: + - SpellbookUtility + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + +- type: listing + id: SpellbookCharge + name: spellbook-charge-name + description: spellbook-charge-desc + productAction: ActionChargeSpell + cost: + WizCoin: 1 + categories: + - SpellbookUtility + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + +# Equipment +- type: listing + id: SpellbookWandDoor + name: spellbook-wand-polymorph-door-name + description: spellbook-wand-polymorph-door-description + productEntity: WeaponWandPolymorphDoor + cost: + WizCoin: 3 + categories: + - SpellbookEquipment + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + +- type: listing + id: SpellbookWandPolymorphCarp + name: spellbook-wand-polymorph-carp-name + description: spellbook-wand-polymorph-carp-description + productEntity: WeaponWandPolymorphCarp + cost: + WizCoin: 3 + categories: + - SpellbookEquipment + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + +# Event +- type: listing + id: SpellbookEventSummonGhosts + name: spellbook-event-summon-ghosts-name + description: spellbook-event-summon-ghosts-description + productAction: ActionSummonGhosts + cost: + WizCoin: 0 + categories: + - SpellbookEvents + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + +# Upgrades +- type: listing + id: SpellbookFireballUpgrade + productUpgradeId: SpellbookFireballUpgrade + name: spellbook-upgrade-fireball-name + description: spellbook-upgrade-fireball-description + icon: + sprite: Objects/Magic/magicactions.rsi + state: fireball + cost: + WizCoin: 2 + categories: + - SpellbookOffensive + conditions: + - !type:BuyBeforeCondition + whitelist: + - SpellbookFireball + # manual for now + - !type:ListingLimitedStockCondition + stock: 2 diff --git a/Resources/Prototypes/Catalog/thief_toolbox_sets.yml b/Resources/Prototypes/Catalog/thief_toolbox_sets.yml index 2c98b0b89da..e70e93732f3 100644 --- a/Resources/Prototypes/Catalog/thief_toolbox_sets.yml +++ b/Resources/Prototypes/Catalog/thief_toolbox_sets.yml @@ -14,6 +14,7 @@ - ClothingEyesChameleon - ClothingHeadsetChameleon - ClothingShoesChameleon + - ChameleonProjector - type: thiefBackpackSet id: ToolsSet diff --git a/Resources/Prototypes/Catalog/uplink_catalog.yml b/Resources/Prototypes/Catalog/uplink_catalog.yml index a1a60e3fef0..1389c035597 100644 --- a/Resources/Prototypes/Catalog/uplink_catalog.yml +++ b/Resources/Prototypes/Catalog/uplink_catalog.yml @@ -10,6 +10,7 @@ Telecrystal: 3 categories: - UplinkWeapons + saleLimit: 1 - type: listing id: UplinkRevolverPython @@ -20,6 +21,7 @@ Telecrystal: 8 # Originally was 13 TC but was not used due to high cost categories: - UplinkWeapons + saleLimit: 1 # Inbuilt suppressor so it's sneaky + more expensive. - type: listing @@ -31,6 +33,7 @@ Telecrystal: 4 categories: - UplinkWeapons + saleLimit: 1 # Poor accuracy, slow to fire, cheap option - type: listing @@ -42,6 +45,7 @@ Telecrystal: 1 categories: - UplinkWeapons + saleLimit: 1 - type: listing id: UplinkEsword @@ -53,6 +57,7 @@ Telecrystal: 8 categories: - UplinkWeapons + saleLimit: 2 - type: listing id: UplinkEnergyDagger @@ -64,6 +69,18 @@ Telecrystal: 2 categories: - UplinkWeapons + saleLimit: 1 + +- type: listing + id: UplinkThrowingKnivesKit + name: uplink-knives-kit-name + description: uplink-knives-kit-desc + icon: { sprite: /Textures/Objects/Storage/boxicons.rsi, state: throwing_knives } + productEntity: ThrowingKnivesKit + cost: + Telecrystal: 6 + categories: + - UplinkWeapons - type: listing id: UplinkThrowingKnivesKit @@ -85,6 +102,7 @@ Telecrystal: 8 categories: - UplinkWeapons + saleLimit: 1 - type: listing id: UplinkDisposableTurret @@ -100,6 +118,20 @@ blacklist: tags: - NukeOpsUplink + saleLimit: 2 + +- type: listing + id: BaseBallBatHomeRun + name: uplink-home-run-bat-name + description: uplink-home-run-bat-desc + productEntity: BaseBallBatHomeRun + icon: + entity: BaseBallBatHomeRun + cost: + Telecrystal: 16 + categories: + - UplinkWeapons + saleLimit: 1 - type: listing id: BaseBallBatHomeRun @@ -214,6 +246,7 @@ whitelist: tags: - NukeOpsUplink + saleLimit: 1 - type: listing id: UplinkC4Bundle @@ -224,6 +257,7 @@ Telecrystal: 12 #you're buying bulk so its a 25% discount categories: - UplinkExplosives + saleLimit: 1 - type: listing id: UplinkEmpGrenade @@ -261,6 +295,7 @@ blacklist: tags: - NukeOpsUplink + saleLimit: 1 - type: listing id: UplinkSyndicateBombNukie @@ -276,6 +311,7 @@ whitelist: tags: - NukeOpsUplink + saleLimit: 1 - type: listing id: UplinkClusterGrenade @@ -380,21 +416,193 @@ #Utility -#- type: listing # -# id: UplinkHoloparaKit -# name: uplink-holopara-kit-name -# description: uplink-holopara-kit-desc -# icon: { sprite: /Textures/Objects/Misc/guardian_info.rsi, state: icon } -# productEntity: BoxHoloparasite -# cost: -# Telecrystal: 14 -# categories: -# - UplinkUtility -# conditions: -# - !type:StoreWhitelistCondition -# blacklist: -# tags: -# - NukeOpsUplink +- type: listing + id: UplinkZombieBundle + name: uplink-zombie-bundle-name + description: uplink-zombie-bundle-desc + icon: { sprite: /Textures/Structures/Wallmounts/signs.rsi, state: bio } + productEntity: ClothingBackpackDuffelZombieBundle + cost: + Telecrystal: 40 + categories: + - UplinkChemicals + conditions: + - !type:StoreWhitelistCondition + whitelist: + tags: + - NukeOpsUplink + - !type:BuyerWhitelistCondition + blacklist: + components: + - SurplusBundle + saleLimit: 1 + +- type: listing + id: UplinkNocturineChemistryBottle + name: uplink-nocturine-chemistry-bottle-name + description: uplink-nocturine-chemistry-bottle-desc + productEntity: NocturineChemistryBottle + cost: + Telecrystal: 6 + categories: + - UplinkChemicals + saleLimit: 1 + +- type: listing + id: UplinkCombatMedkit + name: uplink-combat-medkit-name + description: uplink-combat-medkit-desc + productEntity: MedkitCombatFilled + cost: + Telecrystal: 5 + categories: + - UplinkChemicals + saleLimit: 1 + +- type: listing + id: UplinkCombatMedipen + name: uplink-combat-medipen-name + description: uplink-combat-medipen-desc + productEntity: CombatMedipen + cost: + Telecrystal: 4 + categories: + - UplinkChemicals + saleLimit: 1 + +- type: listing + id: UplinkStimpack + name: uplink-stimpack-name + description: uplink-stimpack-desc + productEntity: Stimpack + cost: + Telecrystal: 4 + categories: + - UplinkChemicals + saleLimit: 1 + +- type: listing + id: UplinkStimkit + name: uplink-stimkit-name + description: uplink-stimkit-desc + productEntity: StimkitFilled + cost: + Telecrystal: 12 + categories: + - UplinkChemicals + saleLimit: 1 + +- type: listing + id: UplinkCigarettes + name: uplink-cigarettes-name + description: uplink-cigarettes-desc + productEntity: CigPackSyndicate + cost: + Telecrystal: 2 + categories: + - UplinkChemicals + +- type: listing + id: UplinkMedsBundle + name: uplink-meds-bundle-name + description: uplink-meds-bundle-desc + productEntity: ClothingBackpackDuffelSyndicateMedicalBundleFilled + cost: + Telecrystal: 20 + categories: + - UplinkChemicals + conditions: + - !type:StoreWhitelistCondition + whitelist: + tags: + - NukeOpsUplink + - !type:BuyerWhitelistCondition + blacklist: + components: + - SurplusBundle + saleLimit: 1 + +# Deception + +- type: listing + id: UplinkAgentIDCard + name: uplink-agent-id-card-name + description: uplink-agent-id-card-desc + productEntity: AgentIDCard + cost: + Telecrystal: 3 + categories: + - UplinkDeception + +- type: listing + id: UplinkStealthBox + name: uplink-stealth-box-name + description: uplink-stealth-box-desc + productEntity: StealthBox + cost: + Telecrystal: 5 + categories: + - UplinkDeception + +- type: listing + id: UplinkChameleonProjector + name: uplink-chameleon-projector-name + description: uplink-chameleon-projector-desc + productEntity: ChameleonProjector + cost: + Telecrystal: 7 + categories: + - UplinkDeception + +- type: listing + id: UplinkCyberpen + name: uplink-cyberpen-name + description: uplink-cyberpen-desc + productEntity: CyberPen + cost: + Telecrystal: 1 + categories: + - UplinkDeception + +- type: listing + id: UplinkDecoyDisk + name: uplink-decoy-disk-name + description: uplink-decoy-disk-desc + productEntity: NukeDiskFake + cost: + Telecrystal: 1 + categories: + - UplinkDeception + +- type: listing + id: UplinkUltrabrightLantern + name: uplink-ultrabright-lantern-name + description: uplink-ultrabright-lantern-desc + productEntity: LanternFlash + cost: + Telecrystal: 2 + categories: + - UplinkDeception + +- type: listing + id: UplinkBribe + name: uplink-bribe-name + description: uplink-bribe-desc + productEntity: BriefcaseSyndieLobbyingBundleFilled + cost: + Telecrystal: 4 + categories: + - UplinkDeception + +# - type: listing +# id: UplinkGigacancerScanner +# name: Ultragigacancer Health Analyzer +# description: Works like a normal health analyzer, other than giving everyone it scans ultragigacancer. +# productEntity: HandheldHealthAnalyzerGigacancer +# cost: +# Telecrystal: 5 +# categories: +# - UplinkDeception - type: listing id: UplinkHolster @@ -417,14 +625,15 @@ - UplinkUtility - type: listing - id: UplinkAgentIDCard - name: uplink-agent-id-card-name - description: uplink-agent-id-card-desc - productEntity: AgentIDCard + id: UplinkSyndicateMartyrModule + name: uplink-syndicate-martyr-module-name + description: uplink-syndicate-martyr-module-desc + productEntity: BorgModuleMartyr + icon: { sprite: /Textures/Objects/Specific/Robotics/borgmodule.rsi, state: syndicateborgbomb } cost: - Telecrystal: 3 + Telecrystal: 4 categories: - - UplinkUtility + - UplinkDisruption - type: listing id: UplinkJetpack @@ -451,6 +660,7 @@ blacklist: tags: - NukeOpsUplink + saleLimit: 1 - type: listing id: UplinkReinforcementRadioSyndicateNukeops # Version for Nukeops that spawns an agent with the NukeOperative component. @@ -467,6 +677,7 @@ whitelist: tags: - NukeOpsUplink + saleLimit: 1 - type: listing id: UplinkReinforcementRadioSyndicateCyborgAssault @@ -483,12 +694,13 @@ whitelist: tags: - NukeOpsUplink + saleLimit: 1 - type: listing - id: UplinkReinforcementRadioSyndicateMonkey - name: uplink-reinforcement-radio-monkey-name - description: uplink-reinforcement-radio-monkey-desc - productEntity: ReinforcementRadioSyndicateMonkey + id: UplinkReinforcementRadioSyndicateAncestor + name: uplink-reinforcement-radio-ancestor-name + description: uplink-reinforcement-radio-ancestor-desc + productEntity: ReinforcementRadioSyndicateAncestor icon: { sprite: Objects/Devices/communication.rsi, state: radio } cost: Telecrystal: 8 @@ -501,10 +713,10 @@ - NukeOpsUplink - type: listing - id: UplinkReinforcementRadioSyndicateMonkeyNukeops # Version for Nukeops that spawns a syndicate monkey with the NukeOperative component. - name: uplink-reinforcement-radio-monkey-name - description: uplink-reinforcement-radio-monkey-desc - productEntity: ReinforcementRadioSyndicateMonkeyNukeops + id: UplinkReinforcementRadioSyndicateAncestorNukeops # Version for Nukeops that spawns a syndicate monkey with the NukeOperative component. + name: uplink-reinforcement-radio-ancestor-name + description: uplink-reinforcement-radio-ancestor-desc + productEntity: ReinforcementRadioSyndicateAncestorNukeops icon: { sprite: Objects/Devices/communication.rsi, state: radio } cost: Telecrystal: 6 @@ -515,16 +727,7 @@ whitelist: tags: - NukeOpsUplink - -- type: listing - id: UplinkStealthBox - name: uplink-stealth-box-name - description: uplink-stealth-box-desc - productEntity: StealthBox - cost: - Telecrystal: 5 - categories: - - UplinkUtility + saleLimit: 1 - type: listing id: UplinkHeadsetEncryptionKey @@ -545,7 +748,6 @@ productEntity: EncryptionKeyBinary cost: Telecrystal: 1 - categories: - UplinkUtility @@ -579,11 +781,6 @@ Telecrystal: 2 categories: - UplinkUtility - conditions: - - !type:StoreWhitelistCondition - whitelist: - tags: - - NukeOpsUplink - type: listing id: UplinkRadioJammer @@ -748,6 +945,7 @@ blacklist: tags: - NukeOpsUplink + saleBlacklist: true - type: listing id: UplinkDeathRattle @@ -821,6 +1019,7 @@ blacklist: components: - SurplusBundle + saleLimit: 1 - type: listing id: UplinkChemistryKitBundle @@ -844,24 +1043,6 @@ categories: - UplinkBundles -- type: listing - id: UplinkMedsBundle - name: uplink-meds-bundle-name - description: uplink-meds-bundle-desc - productEntity: ClothingBackpackDuffelSyndicateMedicalBundleFilled - cost: - Telecrystal: 20 - categories: - - UplinkBundles - conditions: - - !type:StoreWhitelistCondition - whitelist: - tags: - - NukeOpsUplink - - !type:BuyerWhitelistCondition - blacklist: - components: - - SurplusBundle - type: listing id: UplinkSniperBundle @@ -873,6 +1054,7 @@ Telecrystal: 12 categories: - UplinkBundles + saleLimit: 1 - type: listing id: UplinkC20RBundle @@ -884,6 +1066,7 @@ Telecrystal: 17 categories: - UplinkBundles + saleLimit: 1 - type: listing id: UplinkBulldogBundle @@ -895,6 +1078,7 @@ Telecrystal: 20 categories: - UplinkBundles + saleLimit: 1 - type: listing id: UplinkGrenadeLauncherBundle @@ -906,6 +1090,7 @@ Telecrystal: 25 categories: - UplinkBundles + saleLimit: 1 - type: listing id: UplinkL6SawBundle @@ -917,26 +1102,7 @@ Telecrystal: 30 categories: - UplinkBundles - -- type: listing - id: UplinkZombieBundle - name: uplink-zombie-bundle-name - description: uplink-zombie-bundle-desc - icon: { sprite: /Textures/Structures/Wallmounts/signs.rsi, state: bio } - productEntity: ClothingBackpackDuffelZombieBundle - cost: - Telecrystal: 40 - categories: - - UplinkBundles - conditions: - - !type:StoreWhitelistCondition - whitelist: - tags: - - NukeOpsUplink - - !type:BuyerWhitelistCondition - blacklist: - components: - - SurplusBundle + saleLimit: 1 - type: listing id: UplinkSurplusBundle @@ -956,6 +1122,7 @@ blacklist: components: - SurplusBundle + saleBlacklist: true - type: listing id: UplinkSuperSurplusBundle @@ -975,6 +1142,7 @@ blacklist: components: - SurplusBundle + saleBlacklist: true # Tools @@ -1113,6 +1281,7 @@ - !type:BuyerJobCondition whitelist: - Chaplain + saleLimit: 1 - type: listing id: uplinkRevolverCapGunFake @@ -1128,6 +1297,7 @@ whitelist: - Mime - Clown + saleLimit: 1 - type: listing id: uplinkBananaPeelExplosive @@ -1172,6 +1342,7 @@ - !type:BuyerJobCondition whitelist: - Clown + saleLimit: 1 - type: listing id: uplinkHotPotato @@ -1241,6 +1412,24 @@ - ResearchDirector - Chef +- type: listing + id: UplinkCaneBlade + name: uplink-cane-blade-name + description: uplink-cane-blade-desc + icon: { sprite: Objects/Weapons/Melee/cane.rsi, state: cane} + productEntity: CaneSheathFilled + cost: + Telecrystal: 5 + categories: + - UplinkJob + conditions: + - !type:BuyerJobCondition + whitelist: + - Librarian + - !type:BuyerWhitelistCondition + blacklist: + components: + - SurplusBundle - type: listing id: UplinkSingarityBeacon name: uplink-singularity-beacon-name @@ -1335,6 +1524,7 @@ Telecrystal: 8 categories: - UplinkArmor + saleLimit: 1 - type: listing id: UplinkHardsuitSyndieElite @@ -1346,6 +1536,7 @@ Telecrystal: 10 categories: - UplinkArmor + saleLimit: 1 - type: listing id: UplinkClothingOuterHardsuitJuggernaut @@ -1357,39 +1548,10 @@ Telecrystal: 12 categories: - UplinkArmor + saleLimit: 1 # Misc -- type: listing - id: UplinkCyberpen - name: uplink-cyberpen-name - description: uplink-cyberpen-desc - productEntity: CyberPen - cost: - Telecrystal: 1 - categories: - - UplinkMisc - -- type: listing - id: UplinkDecoyDisk - name: uplink-decoy-disk-name - description: uplink-decoy-disk-desc - productEntity: NukeDiskFake - cost: - Telecrystal: 1 - categories: - - UplinkMisc - -- type: listing - id: UplinkCigarettes - name: uplink-cigarettes-name - description: uplink-cigarettes-desc - productEntity: CigPackSyndicate - cost: - Telecrystal: 2 - categories: - - UplinkMisc - - type: listing id: UplinkClothingConductingGloves name: uplink-clothing-conducting-gloves-name @@ -1425,6 +1587,7 @@ whitelist: tags: - NukeOpsUplink + saleLimit: 1 - type: listing id: UplinkSoapSyndie @@ -1446,16 +1609,6 @@ categories: - UplinkMisc -- type: listing - id: UplinkUltrabrightLantern - name: uplink-ultrabright-lantern-name - description: uplink-ultrabright-lantern-desc - productEntity: LanternFlash - cost: - Telecrystal: 2 - categories: - - UplinkMisc - # - type: listing # id: UplinkGigacancerScanner # name: Ultragigacancer Health Analyzer @@ -1466,66 +1619,6 @@ # categories: # - UplinkMisc -- type: listing - id: UplinkNocturineChemistryBottle - name: uplink-nocturine-chemistry-bottle-name - description: uplink-nocturine-chemistry-bottle-desc - productEntity: NocturineChemistryBottle - cost: - Telecrystal: 6 - categories: - - UplinkMisc - -- type: listing - id: UplinkCombatMedkit - name: uplink-combat-medkit-name - description: uplink-combat-medkit-desc - productEntity: MedkitCombatFilled - cost: - Telecrystal: 5 - categories: - - UplinkMisc - -- type: listing - id: UplinkCombatMedipen - name: uplink-combat-medipen-name - description: uplink-combat-medipen-desc - productEntity: CombatMedipen - cost: - Telecrystal: 4 - categories: - - UplinkMisc - -- type: listing - id: UplinkStimpack - name: uplink-stimpack-name - description: uplink-stimpack-desc - productEntity: Stimpack - cost: - Telecrystal: 4 - categories: - - UplinkMisc - -- type: listing - id: UplinkStimkit - name: uplink-stimkit-name - description: uplink-stimkit-desc - productEntity: StimkitFilled - cost: - Telecrystal: 12 - categories: - - UplinkMisc - -- type: listing - id: UplinkBribe - name: uplink-bribe-name - description: uplink-bribe-desc - productEntity: BriefcaseSyndieLobbyingBundleFilled - cost: - Telecrystal: 4 - categories: - - UplinkMisc - - type: listing id: UplinkMobCatMicrobomb name: uplink-mobcat-microbomb-name @@ -1541,6 +1634,7 @@ whitelist: tags: - NukeOpsUplink + saleLimit: 1 - type: listing id: UplinkBackpackSyndicate diff --git a/Resources/Prototypes/CharacterItemGroups/backpackGroups.yml b/Resources/Prototypes/CharacterItemGroups/backpackGroups.yml new file mode 100644 index 00000000000..c12db85146d --- /dev/null +++ b/Resources/Prototypes/CharacterItemGroups/backpackGroups.yml @@ -0,0 +1,11 @@ +- type: characterItemGroup + id: LoadoutBackpacks + items: + - type: loadout + id: LoadoutBackpack + - type: loadout + id: LoadoutBackpackDuffel + - type: loadout + id: LoadoutBackpackSatchel + - type: loadout + id: LoadoutBackpackClown diff --git a/Resources/Prototypes/CharacterItemGroups/languageGroups.yml b/Resources/Prototypes/CharacterItemGroups/languageGroups.yml new file mode 100644 index 00000000000..a884992a23c --- /dev/null +++ b/Resources/Prototypes/CharacterItemGroups/languageGroups.yml @@ -0,0 +1,35 @@ +- type: characterItemGroup + id: TraitsLanguagesBasic + maxItems: 1 + items: + - type: trait + id: SignLanguage + - type: trait + id: SolCommon + - type: trait + id: Tradeband + - type: trait + id: Freespeak + - type: trait + id: Elyran + - type: trait + id: ValyrianStandard + - type: trait + id: Azaziba + +- type: characterItemGroup + id: TraitsAccents + maxItems: 1 + items: + - type: trait + id: FrontalLisp + - type: trait + id: Stutter + - type: trait + id: PirateAccent + - type: trait + id: Accentless + - type: trait + id: Southern + - type: trait + id: ScottishAccent \ No newline at end of file diff --git a/Resources/Prototypes/CharacterItemGroups/musicianInstrumentsGroups.yml b/Resources/Prototypes/CharacterItemGroups/musicianInstrumentsGroups.yml index ccad399e74d..eac816b8db4 100644 --- a/Resources/Prototypes/CharacterItemGroups/musicianInstrumentsGroups.yml +++ b/Resources/Prototypes/CharacterItemGroups/musicianInstrumentsGroups.yml @@ -2,14 +2,36 @@ id: LoadoutMusicianInstruments maxItems: 3 items: + # Brass - type: loadout - id: LoadoutItemSynthesizerInstrumentMusician + id: LoadoutItemTrumpetInstrumentMusician + - type: loadout + id: LoadoutItemTromboneInstrumentMusician + - type: loadout + id: LoadoutItemFrenchHornInstrumentMusician + - type: loadout + id: LoadoutItemEuphoniumInstrumentMusician + # Misc + - type: loadout + id: LoadoutItemSeashellInstrumentMusician + - type: loadout + id: LoadoutItemBirdToyInstrumentMusician + # Percussion + - type: loadout + id: LoadoutItemGlockenspielInstrumentMusician + - type: loadout + id: LoadoutItemMusicBoxInstrumentMusician + - type: loadout + id: LoadoutItemXylophoneInstrumentMusician - type: loadout id: LoadoutItemMicrophoneInstrumentMusician + - type: loadout + id: LoadoutItemSynthesizerInstrumentMusician - type: loadout id: LoadoutItemKalimbaInstrumentMusician - type: loadout - id: LoadoutItemTrumpetInstrumentMusician + id: LoadoutItemWoodblockInstrumentMusician + # String - type: loadout id: LoadoutItemElectricGuitarInstrumentMusician - type: loadout @@ -18,14 +40,55 @@ id: LoadoutItemRockGuitarInstrumentMusician - type: loadout id: LoadoutItemAcousticGuitarInstrumentMusician + - type: loadout + id: LoadoutItemBanjoInstrumentMusician - type: loadout id: LoadoutItemViolinInstrumentMusician - type: loadout - id: LoadoutItemHarmonicaInstrumentMusician + id: LoadoutItemViolaInstrumentMusician + - type: loadout + id: LoadoutItemCelloInstrumentMusician + # Structure + - type: loadout + id: LoadoutItemPianoInstrumentMusician + - type: loadout + id: LoadoutItemUprightPianoInstrumentMusician + - type: loadout + id: LoadoutItemVibraphoneInstrumentMusician + - type: loadout + id: LoadoutItemMarimbaInstrumentMusician + - type: loadout + id: LoadoutItemChurchOrganInstrumentMusician + - type: loadout + id: LoadoutItemTubaInstrumentMusician + - type: loadout + id: LoadoutItemHarpInstrumentMusician + - type: loadout + id: LoadoutItemTimpaniInstrumentMusician + - type: loadout + id: LoadoutItemTaikoInstrumentMusician + - type: loadout + id: LoadoutItemContrabassInstrumentMusician + - type: loadout + id: LoadoutItemMinimoogInstrumentMusician + - type: loadout + id: LoadoutItemTomDrumsInstrumentMusician + # Wind + - type: loadout + id: LoadoutItemSaxophoneInstrumentMusician - type: loadout id: LoadoutItemAccordionInstrumentMusician + - type: loadout + id: LoadoutItemHarmonicaInstrumentMusician + - type: loadout + id: LoadoutItemClarinetInstrumentMusician - type: loadout id: LoadoutItemFluteInstrumentMusician + - type: loadout + id: LoadoutItemRecorderInstrumentMusician + - type: loadout + id: LoadoutItemPanFluteInstrumentMusician - type: loadout id: LoadoutItemOcarinaInstrumentMusician - + - type: loadout + id: LoadoutItemBagpipeInstrumentMusician diff --git a/Resources/Prototypes/CharacterItemGroups/scienceGroups.yml b/Resources/Prototypes/CharacterItemGroups/scienceGroups.yml index e5e43760da0..26cb07dae9c 100644 --- a/Resources/Prototypes/CharacterItemGroups/scienceGroups.yml +++ b/Resources/Prototypes/CharacterItemGroups/scienceGroups.yml @@ -101,3 +101,44 @@ 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/securityGroups.yml b/Resources/Prototypes/CharacterItemGroups/securityGroups.yml index edd5f8700a1..8b9f6f1e0e8 100644 --- a/Resources/Prototypes/CharacterItemGroups/securityGroups.yml +++ b/Resources/Prototypes/CharacterItemGroups/securityGroups.yml @@ -51,6 +51,10 @@ id: LoadoutClothingOuterCoatHoSTrench - type: loadout id: LoadoutClothingOuterWinterHoS + - type: loadout + id: LoadoutClothingOuterArmorBasic + - type: loadout + id: LoadoutClothingOuterArmorSlim - type: characterItemGroup id: LoadoutGlovesSecurity @@ -101,6 +105,8 @@ id: LoadoutClothingBeltCorpsmanWebbing - type: loadout id: LoadoutClothingBeltSecurity + - type: loadout + id: LoadoutClothingBeltHolster - type: characterItemGroup id: LoadoutEyesSecurity @@ -125,7 +131,7 @@ id: LoadoutClothingShoesBootsCombat - type: characterItemGroup - maxItems: 5 # No clue what the actual number should be. + maxItems: 5 id: LoadoutEquipmentSecurity items: - type: loadout @@ -133,10 +139,113 @@ - type: loadout id: LoadoutSecurityFlash - type: loadout - id: LoadoutSecurityDisabler + id: LoadoutMagazinePistol + - type: loadout + id: LoadoutMagazinePistolSpare - type: loadout id: LoadoutMagazinePistolRubber + - type: loadout + id: LoadoutMagazinePistolRubberSpare + - type: loadout + id: LoadoutSpeedLoaderMagnum + - type: loadout + id: LoadoutSpeedLoaderMagnumSpare - type: loadout id: LoadoutSpeedLoaderMagnumRubber + - type: loadout + id: LoadoutSpeedLoaderMagnumRubberSpare + - type: loadout + id: LoadoutMagazineMagnum + - type: loadout + id: LoadoutMagazineMagnumRubber + - type: loadout + id: LoadoutMagazineMagnumSpare + - type: loadout + id: LoadoutMagazineMagnumRubberSpare +- type: characterItemGroup + maxItems: 1 + id: LoadoutWeaponSecurity + items: + - type: loadout + id: LoadoutSecurityDisabler + - type: loadout + id: LoadoutSecurityMk58 + - type: loadout + id: LoadoutSecurityMk58NonLethal + - type: loadout + id: LoadoutSecurityRevolver + - type: loadout + id: LoadoutSecurityRevolverNonLethal + - type: loadout + id: LoadoutSecurityRevolverDeckard + - type: loadout + id: LoadoutSecurityRevolverDeckardNonLethal + - type: loadout + id: LoadoutSecurityPistolN1984 + - type: loadout + id: LoadoutSecurityPistolN1984NonLethal + - type: loadout + id: LoadoutSecurityPistolViper + - type: loadout + id: LoadoutSecurityPistolViperNonLethal + - type: loadout + id: LoadoutSecurityPistolViperWood + - type: loadout + id: LoadoutSecurityEquipmentTruncheon + - type: loadout + id: LoadoutSecurityPistolSvalin + - type: loadout + id: LoadoutSecurityEnergyGunMini + - type: loadout + id: LoadoutSecurityEnergyGunPistol + - type: loadout + id: LoadoutSecurityPistolPollock + - type: loadout + id: LoadoutSecurityPistolPollockNonlethal + - type: loadout + id: LoadoutSecurityRevolverSnub + - type: loadout + id: LoadoutSecurityRevolverSnubNonlethal + - type: loadout + id: LoadoutSecurityRevolverK38Master + - type: loadout + id: LoadoutSecurityRevolverK38MasterNonlethal + - type: loadout + id: LoadoutSecurityRevolverFitz + - type: loadout + id: LoadoutSecurityRevolverFitzNonlethal + - type: loadout + id: LoadoutSecurityRevolverPython + - type: loadout + id: LoadoutSecurityRevolverPythonNonlethal + +- type: characterItemGroup + maxItems: 1 + id: LoadoutBackSecurity + items: + - type: loadout + id: LoadoutClothingBackSecurity + - type: loadout + id: LoadoutClothingBackSecuritySatchel + - type: loadout + id: LoadoutClothingBackSecurityDuffel +- type: characterItemGroup + maxItems: 1 + id: LoadoutHoSWeapon + 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 diff --git a/Resources/Prototypes/CharacterItemGroups/serviceGroups.yml b/Resources/Prototypes/CharacterItemGroups/serviceGroups.yml index 01ec0aaeea9..61c2b286b7e 100644 --- a/Resources/Prototypes/CharacterItemGroups/serviceGroups.yml +++ b/Resources/Prototypes/CharacterItemGroups/serviceGroups.yml @@ -76,12 +76,24 @@ - 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 @@ -98,3 +110,76 @@ 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/Chemistry/metabolism_groups.yml b/Resources/Prototypes/Chemistry/metabolism_groups.yml index fc59edd81fe..b2035671af0 100644 --- a/Resources/Prototypes/Chemistry/metabolism_groups.yml +++ b/Resources/Prototypes/Chemistry/metabolism_groups.yml @@ -1,22 +1,29 @@ -# Default human metabolism groups. +# Default human metabolism groups. - type: metabolismGroup id: Poison + name: metabolism-group-poison - type: metabolismGroup id: Medicine + name: metabolism-group-medicine - type: metabolismGroup id: Narcotic + name: metabolism-group-narcotic - type: metabolismGroup id: Alcohol + name: metabolism-group-alcohol - type: metabolismGroup id: Food + name: metabolism-group-food - type: metabolismGroup id: Drink + name: metabolism-group-drink # Used for gases that have effects on being inhaled - type: metabolismGroup id: Gas + name: metabolism-group-gas diff --git a/Resources/Prototypes/Chemistry/metabolizer_types.yml b/Resources/Prototypes/Chemistry/metabolizer_types.yml index 316b8f02b53..80f69893c6e 100644 --- a/Resources/Prototypes/Chemistry/metabolizer_types.yml +++ b/Resources/Prototypes/Chemistry/metabolizer_types.yml @@ -3,52 +3,56 @@ - type: metabolizerType id: Animal - name: animal + name: metabolizer-type-animal - type: metabolizerType id: Bloodsucker - name: bloodsucker + name: metabolizer-type-bloodsucker - type: metabolizerType id: Dragon - name: dragon + name: metabolizer-type-dragon - type: metabolizerType id: Human - name: human + name: metabolizer-type-human - type: metabolizerType id: Slime - name: slime + name: metabolizer-type-slime - type: metabolizerType id: Vox - name: vox + name: metabolizer-type-vox - type: metabolizerType id: Rat - name: rat + name: metabolizer-type-rat - type: metabolizerType id: Plant - name: plant + name: metabolizer-type-plant - type: metabolizerType id: Dwarf - name: dwarf + name: metabolizer-type-dwarf - type: metabolizerType id: Moth - name: moth + name: metabolizer-type-moth - type: metabolizerType id: Arachnid - name: arachnid + name: metabolizer-type-arachnid - type: metabolizerType id: Vampiric - name: vampiric + name: metabolizer-type-vampiric - type: metabolizerType id: LiquorLifeline - name: liquorlifeline + name: metabolizer-type-liquorlifeline + +- type: metabolizerType + id: Shadowkin + name: metabolizer-type-shadowkin diff --git a/Resources/Prototypes/Damage/groups.yml b/Resources/Prototypes/Damage/groups.yml index 07bfe2edcdd..71e4acdaeaa 100644 --- a/Resources/Prototypes/Damage/groups.yml +++ b/Resources/Prototypes/Damage/groups.yml @@ -1,5 +1,6 @@ - type: damageGroup id: Brute + name: damage-group-brute damageTypes: - Blunt - Slash @@ -7,6 +8,7 @@ - type: damageGroup id: Burn + name: damage-group-burn damageTypes: - Heat - Shock @@ -19,6 +21,7 @@ # bloodloss, not this whole group, unless you have a wonder drug that affects both. - type: damageGroup id: Airloss + name: damage-group-airloss damageTypes: - Asphyxiation - Bloodloss @@ -27,11 +30,13 @@ # Though there are probably some radioactive poisons. - type: damageGroup id: Toxin + name: damage-group-toxin damageTypes: - Poison - Radiation - type: damageGroup id: Genetic + name: damage-group-genetic damageTypes: - Cellular diff --git a/Resources/Prototypes/Damage/modifier_sets.yml b/Resources/Prototypes/Damage/modifier_sets.yml index 2976ca53a0a..8cca467f69b 100644 --- a/Resources/Prototypes/Damage/modifier_sets.yml +++ b/Resources/Prototypes/Damage/modifier_sets.yml @@ -18,11 +18,11 @@ Shock: 1.2 Structural: 0.25 flatReductions: - Blunt: 20 - Slash: 20 - Piercing: 20 - Heat: 20 - Structural: 30 # 30 cuz of pickaxes + Blunt: 10 + Slash: 10 + Piercing: 10 + Heat: 10 + Structural: 10 - type: damageModifierSet id: StructuralMetallic @@ -198,12 +198,10 @@ - type: damageModifierSet id: Zombie #Blunt resistant and immune to biological threats, but can be hacked apart and burned coefficients: - Blunt: 0.7 - Slash: 1.1 - Piercing: 0.9 - Shock: 1.25 + Blunt: 0.6 + Piercing: 0.8 Cold: 0.3 - Heat: 1.5 + Heat: 1.25 Poison: 0.0 Radiation: 0.0 @@ -244,7 +242,7 @@ Piercing: 0.2 Shock: 0.0 Cold: 0.0 - Heat: -1 # heat damage cauterizes wounds, but will still hurt obviously. + Heat: -0.5 # heat damage cauterizes wounds, but will still hurt obviously. Poison: 0.0 Radiation: 0.0 Asphyxiation: 0.0 @@ -359,3 +357,24 @@ Slash: 0.6 Piercing: 0.6 Holy: 1.5 + +- type: damageModifierSet + id: Shadowkin + coefficients: + Blunt: 0.95 + Slash: 1.2 + Piercing: 1.1 + Asphyxiation: 0 + Cold: 0.75 + Heat: 1.2 + Cellular: 0.25 + Bloodloss: 1.35 + Shock: 1.25 + Radiation: 1.3 + +- type: damageModifierSet + id: DermalArmor + coefficients: + Blunt: 0.9 + Slash: 0.9 + Piercing: 0.9 diff --git a/Resources/Prototypes/Damage/types.yml b/Resources/Prototypes/Damage/types.yml index bacaf1f7985..0107da24823 100644 --- a/Resources/Prototypes/Damage/types.yml +++ b/Resources/Prototypes/Damage/types.yml @@ -3,6 +3,7 @@ # Usually healed automatically if entity can breathe - type: damageType id: Asphyxiation + name: damage-type-asphyxiation armorCoefficientPrice: 5 armorFlatPrice: 50 @@ -11,57 +12,68 @@ # Represents there not enough blood to supply oxygen (or equivalent). - type: damageType id: Bloodloss + name: damage-type-bloodloss armorCoefficientPrice: 5 armorFlatPrice: 50 - type: damageType id: Blunt + name: damage-type-blunt armorCoefficientPrice: 2 armorFlatPrice: 10 - type: damageType id: Cellular + name: damage-type-cellular armorCoefficientPrice: 5 armorFlatPrice: 30 - type: damageType id: Caustic + name: damage-type-caustic armorCoefficientPrice: 5 armorFlatPrice: 30 - type: damageType id: Cold + name: damage-type-cold armorCoefficientPrice: 2.5 armorFlatPrice: 20 - type: damageType id: Heat + name: damage-type-heat armorCoefficientPrice: 2.5 armorFlatPrice: 20 - type: damageType id: Piercing + name: damage-type-piercing armorCoefficientPrice: 2 armorFlatPrice: 10 # Poison damage. Generally caused by various reagents being metabolised. - type: damageType id: Poison + name: damage-type-poison armorCoefficientPrice: 10 armorFlatPrice: 60 - type: damageType id: Radiation + name: damage-type-radiation armorCoefficientPrice: 2.5 armorFlatPrice: 16 - type: damageType id: Shock + name: damage-type-shock armorCoefficientPrice: 2.5 armorFlatPrice: 20 - type: damageType id: Slash + name: damage-type-slash armorCoefficientPrice: 2 armorFlatPrice: 10 @@ -69,5 +81,6 @@ # Exclusive for structures such as walls, airlocks and others. - type: damageType id: Structural + name: damage-type-structural armorCoefficientPrice: 1 armorFlatPrice: 1 diff --git a/Resources/Prototypes/Datasets/Names/shadowkin.yml b/Resources/Prototypes/Datasets/Names/shadowkin.yml new file mode 100644 index 00000000000..4dbf4c5dc54 --- /dev/null +++ b/Resources/Prototypes/Datasets/Names/shadowkin.yml @@ -0,0 +1,70 @@ +# Names for the shadowkin, +# Shadowkin names are descriptive of +# Their Primary Emotion, +# A State of Being, +# Or past Memories. + +- type: dataset + id: names_shadowkin + values: + # Mar + # - Mar + + # Sad + - Fragile + - Heartbreak + - Inferior + - Lone + - Lonesome + - Loss + - Solitary + - Solitude + - Sorrow + - Shade + + # Angry + - Fear + - Fearful + - Fury + - Pain + - Rage + - Rush + - Wrath + + # Happy + - Calm + - Content + - Contented + - Happy + - Hope + - Joyous + - Lovely + - Peace + - Peaceful + - Quiet + - Serene + - Serenity + - Tranquil + - Tranquility + + # Memory + - Dillusioned + - Forgotten + - Focusless + - Lost + - Memory + - Recollection + - Remembrance + - Reminisce + - Reminiscence + + # Other + - Apathy + - Collected + - Curiosity + - Free + - Interest + - Jax # White eye (jack of all trades) :) + - Still + - Unbound + - Shadows \ No newline at end of file diff --git a/Resources/Prototypes/Datasets/corporations.yml b/Resources/Prototypes/Datasets/corporations.yml new file mode 100644 index 00000000000..55b1d53d2f7 --- /dev/null +++ b/Resources/Prototypes/Datasets/corporations.yml @@ -0,0 +1,12 @@ +- type: dataset + id: TraitorCorporations + values: + - "CyberSun Industries" + - "Gorlex Marauders" + - "MI13" + - "Tiger Cooperative" + - "S.E.L.F." + - "Animal Rights Consortium" + - "Donk Corporation" + - "Waffle Corporation" + - "Interdyne Pharmaceutics" \ No newline at end of file diff --git a/Resources/Prototypes/Datasets/criminal_records.yml b/Resources/Prototypes/Datasets/criminal_records.yml index ee283091843..fe21757cd20 100644 --- a/Resources/Prototypes/Datasets/criminal_records.yml +++ b/Resources/Prototypes/Datasets/criminal_records.yml @@ -2,17 +2,23 @@ - type: dataset id: CriminalRecordsWantedReasonPlaceholders values: + - Ate a delicious valid salad - Ate their own shoes - Being a clown - Being a mime - Breathed the wrong way - Broke into evac - Did literally nothing + - Did their job - Didn't say hello to me - Drank one too many + - Had two toolboxes, that's too many - Lied on common radio - Looked at me funny + - Lubed up the entire way to evac + - Set AME up on time - Slipped the HoS - Stole the clown's mask - Told an unfunny joke - Wore a gasmask + - Wore boxing gloves diff --git a/Resources/Prototypes/DeltaV/Body/Organs/harpy.yml b/Resources/Prototypes/DeltaV/Body/Organs/harpy.yml index 2d47ecd352d..adc626bc114 100644 --- a/Resources/Prototypes/DeltaV/Body/Organs/harpy.yml +++ b/Resources/Prototypes/DeltaV/Body/Organs/harpy.yml @@ -10,7 +10,7 @@ - state: lung-r - type: Lung - type: Metabolizer - updateFrequency: 2.0 + updateInterval: 2.0 removeEmpty: true solutionOnBody: false solution: "Lung" diff --git a/Resources/Prototypes/DeltaV/Catalog/Fills/Items/Belts/belts.yml b/Resources/Prototypes/DeltaV/Catalog/Fills/Items/Belts/belts.yml index ecffae4c361..141349e827f 100644 --- a/Resources/Prototypes/DeltaV/Catalog/Fills/Items/Belts/belts.yml +++ b/Resources/Prototypes/DeltaV/Catalog/Fills/Items/Belts/belts.yml @@ -8,6 +8,16 @@ - id: Wakizashi - id: Katana +- type: entity + id: ClothingBeltKatanaSheathFilledHoS + parent: ClothingBeltKatanaSheathFilled + suffix: Filled + name: antique katana sheaths + description: An ornate belt, wrapped in gold filigree, with a ribbon made from a stasis-field preserved swatch of linen. The history of this sheath has been lost to time. + components: + - type: StealTarget + stealGroup: HoSAntiqueWeapon + - type: entity id: ClothingBeltCorpsmanWebbingFilled parent: ClothingBeltCorpsmanWebbing diff --git a/Resources/Prototypes/DeltaV/Catalog/VendingMachines/Inventories/courierdrobe.yml b/Resources/Prototypes/DeltaV/Catalog/VendingMachines/Inventories/courierdrobe.yml index 88f691ba9b7..778b3725858 100644 --- a/Resources/Prototypes/DeltaV/Catalog/VendingMachines/Inventories/courierdrobe.yml +++ b/Resources/Prototypes/DeltaV/Catalog/VendingMachines/Inventories/courierdrobe.yml @@ -7,8 +7,10 @@ CourierBag: 2 ClothingHeadsetCargo: 2 ClothingOuterWinterCargo: 2 - ClothingUniformMailCarrier: 2 # Nyanotrasen - Mail Carrier old gear - ClothingUniformSkirtMailCarrier: 2 # Nyanotrasen - Mail Carrier old gear - ClothingHeadMailCarrier: 2 # Nyanotrasen - Mail Carrier old gear - MailBag: 2 # Nyanotrasen - Mail Carrier old gear - ClothingOuterWinterCoatMail: 2 # Nyanotrasen - Mail Carrier old gear + ClothingUniformMailCarrier: 2 + ClothingUniformSkirtMailCarrier: 2 + ClothingHeadMailCarrier: 2 + MailBag: 2 + ClothingOuterWinterCoatMail: 2 + WeaponMailLake: 2 + BoxMailCapsulePrimed: 4 diff --git a/Resources/Prototypes/DeltaV/Entities/Clothing/Back/backpacks.yml/backpacks.yml b/Resources/Prototypes/DeltaV/Entities/Clothing/Back/backpacks.yml/backpacks.yml deleted file mode 100644 index 38bbd956868..00000000000 --- a/Resources/Prototypes/DeltaV/Entities/Clothing/Back/backpacks.yml/backpacks.yml +++ /dev/null @@ -1,16 +0,0 @@ -- type: entity - noSpawn: true - parent: ClothingBackpackBrigmedic - id: ClothingBackpackBrigmedicDeltaVFilled - components: - - type: StorageFill - contents: - - id: BoxSurvivalSecurity - - id: EmergencyRollerBedSpawnFolded - - id: BodyBagFolded - - id: Portafib - # - id: Flash - - id: BruteAutoInjector - amount: 2 - - id: BurnAutoInjector - amount: 2 diff --git a/Resources/Prototypes/DeltaV/Entities/Clothing/Eyes/hud.yml b/Resources/Prototypes/DeltaV/Entities/Clothing/Eyes/hud.yml index a959b64a381..1e8a64b0df4 100644 --- a/Resources/Prototypes/DeltaV/Entities/Clothing/Eyes/hud.yml +++ b/Resources/Prototypes/DeltaV/Entities/Clothing/Eyes/hud.yml @@ -20,10 +20,9 @@ - type: Tag tags: - HudMedical - - GlassesNearsight - type: entity - parent: ClothingEyesBase + parent: [ ClothingEyesBase, ShowSecurityIcons ] id: ClothingEyesPrescriptionHudSecurity name: prescription security hud description: A poorly done and rushed mix between half of a pair of prescription glasses and a security HUD allowing you to see clearly out of one eye and inspect the employee's ID and warning status in the other! @@ -32,17 +31,15 @@ sprite: DeltaV/Clothing/Eyes/Hud/prescsechud.rsi - type: Clothing sprite: DeltaV/Clothing/Eyes/Hud/prescsechud.rsi - - type: ShowSecurityIcons - type: Construction graph: PrescriptionSecHud node: prescsechud - type: Tag tags: - HudSecurity - - GlassesNearsight - + - type: entity - parent: ClothingEyesBase + parent: [ ClothingEyesBase, ShowSecurityIcons ] id: ClothingEyesHudSyndicateMed name: syndicate medical visor description: An upgraded syndicate visor with automatic health readings, designed for better detection of humanoids and their subsequent elimination. @@ -52,7 +49,6 @@ - type: Clothing sprite: DeltaV/Clothing/Eyes/Hud/syndmed.rsi - type: ShowSyndicateIcons - - type: ShowSecurityIcons - type: ShowHealthBars damageContainers: - Biological diff --git a/Resources/Prototypes/DeltaV/Entities/Mobs/Customization/Markings/felinid.yml b/Resources/Prototypes/DeltaV/Entities/Mobs/Customization/Markings/felinid.yml index 795bcaacb00..34ccbf068a9 100644 --- a/Resources/Prototypes/DeltaV/Entities/Mobs/Customization/Markings/felinid.yml +++ b/Resources/Prototypes/DeltaV/Entities/Mobs/Customization/Markings/felinid.yml @@ -2,7 +2,7 @@ id: FelinidFluffyTailRings bodyPart: Tail markingCategory: Tail - speciesRestriction: [Felinid] + speciesRestriction: [Felinid, Human] sprites: - sprite: DeltaV/Mobs/Customization/Felinid/felinid_tails.rsi state: Felinid_fluffy_tail_full @@ -13,7 +13,7 @@ id: FelinidFluffyTail bodyPart: Tail markingCategory: Tail - speciesRestriction: [Felinid] + speciesRestriction: [Felinid, Human] sprites: - sprite: DeltaV/Mobs/Customization/Felinid/felinid_tails.rsi state: Felinid_fluffy_tail_full @@ -22,7 +22,7 @@ id: FelinidAlternativeTail bodyPart: Tail markingCategory: Tail - speciesRestriction: [Felinid] + speciesRestriction: [Felinid, Human] sprites: - sprite: DeltaV/Mobs/Customization/Felinid/alternative_tail.rsi state: m_waggingtail_cat_FRONT diff --git a/Resources/Prototypes/DeltaV/Entities/Mobs/Customization/Markings/vulpkanin.yml b/Resources/Prototypes/DeltaV/Entities/Mobs/Customization/Markings/vulpkanin.yml index e91c2762058..7b8fd987b58 100644 --- a/Resources/Prototypes/DeltaV/Entities/Mobs/Customization/Markings/vulpkanin.yml +++ b/Resources/Prototypes/DeltaV/Entities/Mobs/Customization/Markings/vulpkanin.yml @@ -5,7 +5,7 @@ id: VulpEar bodyPart: HeadTop markingCategory: HeadTop - speciesRestriction: [Vulpkanin] + speciesRestriction: [Vulpkanin, Human] sprites: - sprite: DeltaV/Mobs/Customization/Vulpkanin/ear_markings.rsi state: vulp @@ -16,7 +16,7 @@ id: VulpEarFade bodyPart: HeadTop markingCategory: HeadTop - speciesRestriction: [Vulpkanin] + speciesRestriction: [Vulpkanin, Human] sprites: - sprite: DeltaV/Mobs/Customization/Vulpkanin/ear_markings.rsi state: vulp @@ -27,7 +27,7 @@ id: VulpEarSharp bodyPart: HeadTop markingCategory: HeadTop - speciesRestriction: [Vulpkanin] + speciesRestriction: [Vulpkanin, Human] sprites: - sprite: DeltaV/Mobs/Customization/Vulpkanin/ear_markings.rsi state: vulp @@ -38,7 +38,7 @@ id: VulpEarJackal bodyPart: HeadTop markingCategory: HeadTop - speciesRestriction: [Vulpkanin] + speciesRestriction: [Vulpkanin, Human] sprites: - sprite: DeltaV/Mobs/Customization/Vulpkanin/ear_markings.rsi state: jackal @@ -49,7 +49,7 @@ id: VulpEarTerrier bodyPart: HeadTop markingCategory: HeadTop - speciesRestriction: [Vulpkanin] + speciesRestriction: [Vulpkanin, Human] sprites: - sprite: DeltaV/Mobs/Customization/Vulpkanin/ear_markings.rsi state: terrier @@ -60,7 +60,7 @@ id: VulpEarWolf bodyPart: HeadTop markingCategory: HeadTop - speciesRestriction: [Vulpkanin] + speciesRestriction: [Vulpkanin, Human] sprites: - sprite: DeltaV/Mobs/Customization/Vulpkanin/ear_markings.rsi state: wolf @@ -71,7 +71,7 @@ id: VulpEarFennec bodyPart: HeadTop markingCategory: HeadTop - speciesRestriction: [Vulpkanin] + speciesRestriction: [Vulpkanin, Human] sprites: - sprite: DeltaV/Mobs/Customization/Vulpkanin/ear_markings.rsi state: fennec @@ -82,7 +82,7 @@ id: VulpEarFox bodyPart: HeadTop markingCategory: HeadTop - speciesRestriction: [Vulpkanin] + speciesRestriction: [Vulpkanin, Human] sprites: - sprite: DeltaV/Mobs/Customization/Vulpkanin/ear_markings.rsi state: fox @@ -91,7 +91,7 @@ id: VulpEarOtie bodyPart: HeadTop markingCategory: HeadTop - speciesRestriction: [Vulpkanin] + speciesRestriction: [Vulpkanin, Human] sprites: - sprite: DeltaV/Mobs/Customization/Vulpkanin/ear_markings.rsi state: otie @@ -102,7 +102,7 @@ id: VulpEarTajaran bodyPart: HeadTop markingCategory: HeadTop - speciesRestriction: [Vulpkanin] + speciesRestriction: [Vulpkanin, Human] sprites: - sprite: DeltaV/Mobs/Customization/Vulpkanin/ear_markings.rsi state: msai @@ -113,7 +113,7 @@ id: VulpEarShock bodyPart: HeadTop markingCategory: HeadTop - speciesRestriction: [Vulpkanin] + speciesRestriction: [Vulpkanin, Human] sprites: - sprite: DeltaV/Mobs/Customization/Vulpkanin/ear_markings.rsi state: shock @@ -122,7 +122,7 @@ id: VulpEarCoyote bodyPart: HeadTop markingCategory: HeadTop - speciesRestriction: [Vulpkanin] + speciesRestriction: [Vulpkanin, Human] sprites: - sprite: DeltaV/Mobs/Customization/Vulpkanin/ear_markings.rsi state: coyote @@ -131,7 +131,7 @@ id: VulpEarDalmatian bodyPart: HeadTop markingCategory: HeadTop - speciesRestriction: [Vulpkanin] + speciesRestriction: [Vulpkanin, Human] sprites: - sprite: DeltaV/Mobs/Customization/Vulpkanin/ear_markings.rsi state: dalmatian @@ -272,7 +272,7 @@ id: VulpTail bodyPart: Tail markingCategory: Tail - speciesRestriction: [Vulpkanin] + speciesRestriction: [Vulpkanin, Human] sprites: - sprite: DeltaV/Mobs/Customization/Vulpkanin/tail_markings.rsi state: vulp @@ -294,7 +294,7 @@ id: VulpTailTip bodyPart: Tail markingCategory: Tail - speciesRestriction: [Vulpkanin] + speciesRestriction: [Vulpkanin, Human] sprites: - sprite: DeltaV/Mobs/Customization/Vulpkanin/tail_markings.rsi state: vulp @@ -316,7 +316,7 @@ id: VulpTailAlt bodyPart: Tail markingCategory: Tail - speciesRestriction: [Vulpkanin] + speciesRestriction: [Vulpkanin, Human] sprites: - sprite: DeltaV/Mobs/Customization/Vulpkanin/tail_markings.rsi state: vulp_alt @@ -327,7 +327,7 @@ id: VulpTailAltTip bodyPart: Tail markingCategory: Tail - speciesRestriction: [Vulpkanin] + speciesRestriction: [Vulpkanin, Human] sprites: - sprite: DeltaV/Mobs/Customization/Vulpkanin/tail_markings.rsi state: vulp_alt @@ -338,7 +338,7 @@ id: VulpTailLong bodyPart: Tail markingCategory: Tail - speciesRestriction: [Vulpkanin] + speciesRestriction: [Vulpkanin, Human] sprites: - sprite: DeltaV/Mobs/Customization/Vulpkanin/tail_markings.rsi state: long @@ -349,7 +349,7 @@ id: VulpTailFox bodyPart: Tail markingCategory: Tail - speciesRestriction: [Vulpkanin] + speciesRestriction: [Vulpkanin, Human] sprites: - sprite: DeltaV/Mobs/Customization/Vulpkanin/tail_markings.rsi state: fox @@ -371,7 +371,7 @@ id: VulpTailFoxTip bodyPart: Tail markingCategory: Tail - speciesRestriction: [Vulpkanin] + speciesRestriction: [Vulpkanin, Human] sprites: - sprite: DeltaV/Mobs/Customization/Vulpkanin/tail_markings.rsi state: fox @@ -393,7 +393,7 @@ id: VulpTailBushy bodyPart: Tail markingCategory: Tail - speciesRestriction: [Vulpkanin] + speciesRestriction: [Vulpkanin, Human] sprites: - sprite: DeltaV/Mobs/Customization/Vulpkanin/tail_markings.rsi state: bushfluff @@ -411,7 +411,7 @@ id: VulpTailCoyote bodyPart: Tail markingCategory: Tail - speciesRestriction: [Vulpkanin] + speciesRestriction: [Vulpkanin, Human] sprites: - sprite: DeltaV/Mobs/Customization/Vulpkanin/tail_markings.rsi state: coyote @@ -429,7 +429,7 @@ id: VulpTailCorgi bodyPart: Tail markingCategory: Tail - speciesRestriction: [Vulpkanin] + speciesRestriction: [Vulpkanin, Human] sprites: - sprite: DeltaV/Mobs/Customization/Vulpkanin/tail_markings.rsi state: corgi @@ -447,7 +447,7 @@ id: VulpTailHusky bodyPart: Tail markingCategory: Tail - speciesRestriction: [Vulpkanin] + speciesRestriction: [Vulpkanin, Human] sprites: - sprite: DeltaV/Mobs/Customization/Vulpkanin/tail_markings.rsi state: husky-inner @@ -458,7 +458,7 @@ id: VulpTailHuskyAlt bodyPart: Tail markingCategory: Tail - speciesRestriction: [Vulpkanin] + speciesRestriction: [Vulpkanin, Human] sprites: - sprite: DeltaV/Mobs/Customization/Vulpkanin/tail_markings.rsi state: husky @@ -467,7 +467,7 @@ id: VulpTailFox2 bodyPart: Tail markingCategory: Tail - speciesRestriction: [Vulpkanin] + speciesRestriction: [Vulpkanin, Human] sprites: - sprite: DeltaV/Mobs/Customization/Vulpkanin/tail_markings.rsi state: fox2 @@ -476,7 +476,7 @@ id: VulpTailFox3 bodyPart: Tail markingCategory: Tail - speciesRestriction: [Vulpkanin] + speciesRestriction: [Vulpkanin, Human] sprites: - sprite: DeltaV/Mobs/Customization/Vulpkanin/tail_markings.rsi state: fox3 @@ -487,7 +487,7 @@ id: VulpTailFennec bodyPart: Tail markingCategory: Tail - speciesRestriction: [Vulpkanin] + speciesRestriction: [Vulpkanin, Human] sprites: - sprite: DeltaV/Mobs/Customization/Vulpkanin/tail_markings.rsi state: fennec @@ -496,7 +496,7 @@ id: VulpTailOtie bodyPart: Tail markingCategory: Tail - speciesRestriction: [Vulpkanin] + speciesRestriction: [Vulpkanin, Human] sprites: - sprite: DeltaV/Mobs/Customization/Vulpkanin/tail_markings.rsi state: otie @@ -505,7 +505,7 @@ id: VulpTailFluffy bodyPart: Tail markingCategory: Tail - speciesRestriction: [Vulpkanin] + speciesRestriction: [Vulpkanin, Human] sprites: - sprite: DeltaV/Mobs/Customization/Vulpkanin/tail_markings.rsi state: fluffy @@ -514,7 +514,7 @@ id: VulpTailDalmatian bodyPart: Tail markingCategory: Tail - speciesRestriction: [Vulpkanin] + speciesRestriction: [Vulpkanin, Human] sprites: - sprite: DeltaV/Mobs/Customization/Vulpkanin/tail_markings.rsi state: dalmatian diff --git a/Resources/Prototypes/DeltaV/Entities/Mobs/NPCs/animals.yml b/Resources/Prototypes/DeltaV/Entities/Mobs/NPCs/animals.yml index dd59d74d3f0..674c7f3f827 100644 --- a/Resources/Prototypes/DeltaV/Entities/Mobs/NPCs/animals.yml +++ b/Resources/Prototypes/DeltaV/Entities/Mobs/NPCs/animals.yml @@ -1,6 +1,6 @@ - type: entity name: arctic fox - parent: SimpleMobBase + parent: MobFox id: MobArcticFox description: Wears a regal coat of snowy elegance, belying its cold and resourceful nature. components: @@ -30,8 +30,8 @@ - type: Strippable - type: UserInterface interfaces: - - key: enum.StrippingUiKey.Key - type: StrippableBoundUserInterface + enum.StrippingUiKey.Key: + type: StrippableBoundUserInterface - type: DamageStateVisuals states: Alive: @@ -40,10 +40,6 @@ Base: arcticfox_crit Dead: Base: arcticfox_dead - - type: Butcherable - spawned: - - id: FoodMeat - amount: 3 - type: InteractionPopup successChance: 0.5 interactSuccessString: petting-success-soft-floofy @@ -56,25 +52,10 @@ coldDamage: types: Cold: 0.1 - - type: Grammar - attributes: - gender: epicene - - type: Bloodstream - bloodMaxVolume: 100 - - type: MobPrice - price: 400 - - type: Tag - tags: - - VimPilot - - type: LanguageKnowledge - speaks: - - Fox - understands: - - Fox - type: entity name: security dog - parent: SimpleMobBase + parent: MobCorgi # There isn't a base dog mob, surprisingly. id: MobSecDog description: Funnily enough, this pig is actually a dog. components: @@ -101,7 +82,6 @@ - type: HTN rootTask: task: SimpleHostileCompound - - type: Physics - type: Speech speechVerb: Canine speechSounds: Vulpkanin @@ -145,8 +125,8 @@ - type: Strippable - type: UserInterface interfaces: - - key: enum.StrippingUiKey.Key - type: StrippableBoundUserInterface + enum.StrippingUiKey.Key: + type: StrippableBoundUserInterface - type: DamageStateVisuals states: Alive: @@ -184,4 +164,4 @@ - Dog understands: - Dog - - GalacticCommon + - TauCetiBasic diff --git a/Resources/Prototypes/DeltaV/Entities/Mobs/NPCs/familiars.yml b/Resources/Prototypes/DeltaV/Entities/Mobs/NPCs/familiars.yml index 364907ff9c4..1090927cf8d 100644 --- a/Resources/Prototypes/DeltaV/Entities/Mobs/NPCs/familiars.yml +++ b/Resources/Prototypes/DeltaV/Entities/Mobs/NPCs/familiars.yml @@ -62,7 +62,7 @@ - type: Dispellable - type: Damageable damageContainer: CorporealSpirit - damageModifierSet: FireSpirit + damageModifierSet: CorporealSpirit - type: PassiveDamage # Slight passive regen. Assuming one damage type, comes out to about 4 damage a minute. allowedStates: - Alive @@ -111,9 +111,9 @@ - NanoTrasen - type: LanguageKnowledge speaks: - - GalacticCommon + - TauCetiBasic understands: - - GalacticCommon + - TauCetiBasic - type: GhostTakeoverAvailable - type: GhostRole makeSentient: true @@ -144,10 +144,6 @@ - type: Welder fuelReagent: Phlogiston tankSafe: true - litMeleeDamageBonus: - types: # When lit, negate standard melee damage and replace with heat - Heat: 10 - Blunt: -10 # welderOnSounds: # collection: WelderIfritHandOn # welderOffSounds: diff --git a/Resources/Prototypes/DeltaV/Entities/Mobs/NPCs/glimmer_creatures.yml b/Resources/Prototypes/DeltaV/Entities/Mobs/NPCs/glimmer_creatures.yml deleted file mode 100644 index 0a39ef6de88..00000000000 --- a/Resources/Prototypes/DeltaV/Entities/Mobs/NPCs/glimmer_creatures.yml +++ /dev/null @@ -1,31 +0,0 @@ -- type: entity - name: glimmer mite - parent: MobCockroach - id: MobGlimmerMite - description: A strange pest from a world beyond the noosphere. - components: - - type: Sprite - sprite: DeltaV/Mobs/Ghosts/glimmermite.rsi - layers: - - map: ["enum.DamageStateVisualLayers.Base"] - state: mite - - type: DamageStateVisuals - states: - Alive: - Base: mite - Dead: - Base: mite_dead - baseDecayRate: 0.25 - - type: SolutionContainerManager - solutions: - food: - reagents: - - ReagentId: Ectoplasm - Quantity: 15 - - type: Psionic - - type: GlimmerSource - - type: AmbientSound - range: 6 - volume: -3 - sound: /Audio/DeltaV/Glimmer_Creatures/mite.ogg - - type: AmbientOnPowered diff --git a/Resources/Prototypes/DeltaV/Entities/Mobs/NPCs/nukiemouse.yml b/Resources/Prototypes/DeltaV/Entities/Mobs/NPCs/nukiemouse.yml index 8968f0e77ad..09cafa29575 100644 --- a/Resources/Prototypes/DeltaV/Entities/Mobs/NPCs/nukiemouse.yml +++ b/Resources/Prototypes/DeltaV/Entities/Mobs/NPCs/nukiemouse.yml @@ -67,8 +67,8 @@ - type: InventorySlots - type: UserInterface interfaces: - - key: enum.StrippingUiKey.Key - type: StrippableBoundUserInterface + enum.StrippingUiKey.Key: + type: StrippableBoundUserInterface - type: DamageStateVisuals states: Alive: @@ -101,7 +101,7 @@ - Mouse understands: - Mouse - - GalacticCommon + - TauCetiBasic - type: Tag tags: - VimPilot @@ -147,7 +147,7 @@ - type: Bloodstream bloodMaxVolume: 60 - type: CanEscapeInventory - BaseResistTime: 3 + baseResistTime: 3 - type: MobPrice price: 250 # Their suits, while tiny, go for quite a bit on the market - type: IntrinsicRadioReceiver diff --git a/Resources/Prototypes/DeltaV/Entities/Mobs/Player/humanoid.yml b/Resources/Prototypes/DeltaV/Entities/Mobs/Player/humanoid.yml index 2c8b01553a7..4db83e9ab13 100644 --- a/Resources/Prototypes/DeltaV/Entities/Mobs/Player/humanoid.yml +++ b/Resources/Prototypes/DeltaV/Entities/Mobs/Player/humanoid.yml @@ -10,6 +10,8 @@ - type: randomHumanoidSettings id: SyndicateListener + speciesBlacklist: + - Shadowkin components: - type: Loadout prototypes: [SyndicateListenerGear] @@ -34,6 +36,8 @@ - type: randomHumanoidSettings id: Mobster randomizeName: false + speciesBlacklist: + - Shadowkin components: - type: GhostRole name: Mobster @@ -65,6 +69,8 @@ - type: randomHumanoidSettings id: MobsterAlt randomizeName: false + speciesBlacklist: + - Shadowkin components: - type: GhostRole name: Mobster diff --git a/Resources/Prototypes/DeltaV/Entities/Mobs/Species/vulpkanin.yml b/Resources/Prototypes/DeltaV/Entities/Mobs/Species/vulpkanin.yml index 07152d74ef0..b3027839b1a 100644 --- a/Resources/Prototypes/DeltaV/Entities/Mobs/Species/vulpkanin.yml +++ b/Resources/Prototypes/DeltaV/Entities/Mobs/Species/vulpkanin.yml @@ -106,10 +106,10 @@ - type: Wagging - type: LanguageKnowledge speaks: - - GalacticCommon + - TauCetiBasic - Canilunzt understands: - - GalacticCommon + - TauCetiBasic - Canilunzt - type: ConsumeDelayModifier foodDelayMultiplier: 0.5 diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Devices/cartridges.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Devices/cartridges.yml index def215cee43..81e11d9d084 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Devices/cartridges.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Devices/cartridges.yml @@ -38,3 +38,24 @@ sprite: Objects/Weapons/Melee/stunbaton.rsi state: stunbaton_on - type: SecWatchCartridge + +- type: entity + parent: BaseItem + id: MailMetricsCartridge + name: mail metrics cartridge + description: A cartridge that tracks statistics related to mail deliveries. + components: + - type: Sprite + sprite: DeltaV/Objects/Devices/cartridge.rsi + state: cart-mail + - type: Icon + sprite: DeltaV/Objects/Devices/cartridge.rsi + state: cart-mail + - type: UIFragment + ui: !type:MailMetricUi + - type: MailMetricsCartridge + - type: Cartridge + programName: mail-metrics-program-name + icon: + sprite: Objects/Specific/Mail/mail.rsi + state: icon diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Misc/paperslips.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Misc/paperslips.yml index 3c25380e658..4ab4e54863e 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Misc/paperslips.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Misc/paperslips.yml @@ -125,10 +125,10 @@ - type: Paper - type: ActivatableUI key: enum.PaperUiKey.Key - closeOnHandDeselect: false + requireActiveHand: false - type: UserInterface interfaces: - - key: enum.PaperUiKey.Key + enum.PaperUiKey.Key: type: PaperBoundUserInterface - type: Item size: Tiny diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Misc/subdermal_implants.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Misc/subdermal_implants.yml new file mode 100644 index 00000000000..4e8392870cd --- /dev/null +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Misc/subdermal_implants.yml @@ -0,0 +1,21 @@ +- type: entity + parent: BaseSubdermalImplant + id: BionicSyrinxImplant + name: bionic syrinx implant + description: This implant lets a harpy adjust their voice to whoever they can think of. + noSpawn: true + components: + - type: SubdermalImplant + implantAction: ActionSyrinxChangeVoiceMask + whitelist: + components: + - Flight # If someone else has the flight component, or you can obtain it in some way, this needs to be changed. To be a harpy only thing. + - type: VoiceMask + - type: UserInterface + interfaces: + enum.VoiceMaskUIKey.Key: + type: VoiceMaskBoundUserInterface + - type: Tag + tags: + - SubdermalImplant + - BionicSyrinxImplant diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail.yml index 7de554f5ff5..6f96930078b 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail.yml @@ -1,3 +1,4 @@ +# DeltaV Mail - type: entity noSpawn: true parent: BaseMail @@ -175,3 +176,1643 @@ - type: Mail contents: - id: FoodPiePumpkin + +- type: entity + noSpawn: true + parent: BaseMail + id: MailDVCosplayFakeWizard + suffix: cosplay-wizard, fake as fuck + components: + - type: Mail + contents: + - id: ClothingOuterWizardFake + - id: ClothingHeadHatWizardFake + - id: ClothingShoesWizardFake + - id: FoodBurgerSpell + orGroup: FakeWizard + prob: 0.3 + - id: FoodKebabSkewer + orGroup: FakeWizard + prob: 0.1 + +- type: entity + parent: BaseMail + id: MailDVScarves + suffix: scarves + components: + - type: Mail + contents: + - id: ClothingNeckScarfStripedRed + orGroup: Scarf + - id: ClothingNeckScarfStripedBlue + orGroup: Scarf + - id: ClothingNeckScarfStripedGreen + orGroup: Scarf + - id: ClothingNeckScarfStripedBlack + orGroup: Scarf + - id: ClothingNeckScarfStripedBrown + orGroup: Scarf + - id: ClothingNeckScarfStripedLightBlue + orGroup: Scarf + - id: ClothingNeckScarfStripedOrange + orGroup: Scarf + - id: ClothingNeckScarfStripedPurple + orGroup: Scarf + - id: ClothingNeckScarfStripedZebra + orGroup: Scarf + - id: ClothingNeckScarfStripedSyndieGreen + orGroup: Scarf + prob: 0.25 + - id: ClothingNeckScarfStripedSyndieRed + orGroup: Scarf + prob: 0.25 + - id: ClothingNeckScarfStripedCentcom + orGroup: Scarf + prob: 0.001 + +- type: entity + parent: BaseMailLarge + id: MailDVBoxes + suffix: boxes + components: + - type: Mail + contents: +# - id: BoxEnvelope # TODO: we do not have this on EE? +# orGroup: Box + - id: BoxCardboard + orGroup: Box + - id: BoxMRE + orGroup: Box + - id: BoxPerformer + orGroup: Box + - id: BoxFlare + orGroup: Box + - id: BoxDarts + orGroup: Box + - id: BoxMousetrap + orGroup: Box + + + +# Frontier Mail, including Extended Nyano Mail. (Pony Express?) +- type: entity + noSpawn: true + parent: BaseMail + id: MailNFAlcohol + suffix: alcohol, extended + components: + - type: Mail + isFragile: true + contents: + # 12.5 overall weight, 8% base chance + - id: DrinkAbsintheBottleFull + orGroup: Drink + - id: DrinkBlueCuracaoBottleFull + orGroup: Drink + - id: DrinkCoffeeLiqueurBottleFull + orGroup: Drink + - id: DrinkGinBottleFull + orGroup: Drink + - id: DrinkMelonLiquorBottleFull + orGroup: Drink + - id: DrinkRumBottleFull + orGroup: Drink + - id: DrinkTequilaBottleFull + orGroup: Drink + - id: DrinkVermouthBottleFull + orGroup: Drink + - id: DrinkVodkaBottleFull + orGroup: Drink + - id: DrinkWhiskeyBottleFull + orGroup: Drink + - id: DrinkWineBottleFull + orGroup: Drink + - id: DrinkChampagneBottleFull + orGroup: Drink + prob: 0.5 + - id: DrinkGildlagerBottleFull + orGroup: Drink + prob: 0.5 + - id: DrinkPatronBottleFull + orGroup: Drink + prob: 0.5 + - id: DrinkGlass + amount: 2 + +- type: entity + noSpawn: true + parent: BaseMailLarge + id: MailNFBible + suffix: bible, extended + components: + - type: Mail + contents: + - id: Bible + - id: ClothingHeadHatWitch1 #DeltaV - Compensates for items that don't exist here + - id: ClothingOuterCoatMNKBlackTopCoat #DeltaV - Compensates for items that don't exist here + +- type: entity + noSpawn: true + parent: BaseMail + id: MailNFBikeHorn + suffix: bike horn, random + components: + - type: Mail + contents: + - id: BikeHorn + orGroup: Horn + prob: 0.95 + - id: CluwneHorn + orGroup: Horn + prob: 0.05 + +- type: entity + noSpawn: true + parent: BaseMailLarge + id: MailNFBuildABuddy + suffix: Build-a-Buddy + components: + - type: Mail + isFragile: true + contents: +# - id: BoxBuildABuddyGoblin # DeltaV - Goblins Aren't Real +# orGroup: Box + - id: BoxBuildABuddyHuman + orGroup: Box + - id: BoxBuildABuddyReptilian + orGroup: Box + - id: BoxBuildABuddySlime + orGroup: Box + - id: BoxBuildABuddyVulpkanin + orGroup: Box + - id: DrinkSpaceGlue + - id: PaperMailNFBuildABuddy + +- type: entity + noSpawn: true + parent: BaseMailLarge + id: MailNFCake + suffix: cake, extended + components: + - type: Mail + isFragile: true + isPriority: true + contents: + # 14.8 total weight, ~6.8% base chance + - id: FoodCakeApple + orGroup: Cake + - id: FoodCakeBirthday + orGroup: Cake + - id: FoodCakeBlueberry + orGroup: Cake + - id: FoodCakeCarrot + orGroup: Cake + - id: FoodCakeCheese + orGroup: Cake + - id: FoodCakeChocolate + orGroup: Cake + - id: FoodCakeChristmas + orGroup: Cake + - id: FoodCakeClown + orGroup: Cake + - id: FoodCakeLemon + orGroup: Cake + - id: FoodCakeLime + orGroup: Cake + - id: FoodCakeOrange + orGroup: Cake + - id: FoodCakePumpkin + orGroup: Cake + - id: FoodCakeVanilla + orGroup: Cake + # Uncommon + - id: FoodMothMothmallow + orGroup: Cake + prob: 0.5 + - id: FoodCakeSlime + orGroup: Cake + prob: 0.5 + # Rare + - id: FoodCakeBrain + orGroup: Cake + prob: 0.25 + - id: FoodCakeLemoon + orGroup: Cake + prob: 0.25 + - id: FoodCakeSuppermatter + orGroup: Cake + prob: 0.25 + # Ultra rare + - id: FoodCakeSpaceman + orGroup: Cake + prob: 0.05 + - id: KnifePlastic + - id: ForkPlastic + amount: 2 + +- type: entity + noSpawn: true + parent: BaseMail + id: MailNFCosplayWizard + suffix: cosplay-wizard, extended + components: + - type: Mail + contents: + - id: ClothingOuterWizard + - id: ClothingHeadHatWizard + - id: ClothingShoesWizard + - id: PonderingOrb + orGroup: Staff + prob: 0.3 + - id: RGBStaff + orGroup: Staff + prob: 0.1 + +- type: entity + noSpawn: true + parent: BaseMail + id: MailNFCosplayMaid + suffix: cosplay-maid, extended + components: + - type: Mail + contents: + - id: UniformMaid + orGroup: Uniform + - id: ClothingUniformJumpskirtJanimaid + orGroup: Uniform + - id: ClothingUniformJumpskirtJanimaidmini + orGroup: Uniform + - id: MegaSprayBottle + - id: ClothingHandsGlovesColorWhite + +- type: entity + noSpawn: true + parent: BaseMail + id: MailNFCosplayNurse + suffix: cosplay-nurse, extended + components: + - type: Mail + contents: + - id: ClothingUniformJumpskirtNurse + - id: ClothingHeadNurseHat + - id: Syringe + +- type: entity + noSpawn: true + parent: BaseMail + id: MailNFCheese + suffix: cheese, extended + components: + - type: Mail + isFragile: true + isPriority: true + contents: + - id: FoodCheese + orGroup: Cheese + prob: 0.5 + - id: FoodChevre + orGroup: Cheese + prob: 0.5 + - id: KnifePlastic + +- type: entity + noSpawn: true + parent: BaseMail + id: MailNFCigarettes + suffix: cigs, random + components: + - type: Mail + contents: + - id: CigPackBlack + orGroup: Cigs + prob: 0.19 + - id: CigPackBlue + orGroup: Cigs + prob: 0.19 + - id: CigPackGreen + orGroup: Cigs + prob: 0.19 + - id: CigPackRed + orGroup: Cigs + prob: 0.19 + - id: CigPackMixed + orGroup: Cigs + prob: 0.09 # Pool shared with CigPackMixedMedical, CigPackMixedNasty + - id: CigPackMixedMedical + orGroup: Cigs + prob: 0.05 + - id: CigPackMixedNasty + orGroup: Cigs + prob: 0.05 + # Rare + - id: CigPackSyndicate + orGroup: Cigs + prob: 0.05 + - id: CheapLighter + +- type: entity + noSpawn: true + parent: BaseMail + id: MailNFEMP + suffix: emp + components: + - type: Mail + contents: + - id: DelayedEMP + - id: PaperMailNFEMPPreparedness + +- type: entity + noSpawn: true + parent: BaseMail + id: MailNFSmoke + suffix: smoke + components: + - type: Mail + contents: + - id: DelayedSmoke + +- type: entity + noSpawn: true + parent: BaseMail + id: MailNFGoldCigars + suffix: cigars, premium + components: + - type: Mail + contents: + - id: CigarGoldCase + orGroup: Cigars + - id: FlippoLighter + orGroup: Lighter + prob: 0.95 + +- type: entity + noSpawn: true + parent: BaseMail + id: MailNFCookies + suffix: cookies, random + components: + - type: Mail + isPriority: true + contents: + # Cookie 1 + - id: FoodBakedCookie + orGroup: Cookie1 + - id: FoodBakedCookieOatmeal + orGroup: Cookie1 + - id: FoodBakedCookieRaisin + orGroup: Cookie1 + - id: FoodBakedCookieSugar + orGroup: Cookie1 + # Cookie 2 + - id: FoodBakedCookie + orGroup: Cookie2 + - id: FoodBakedCookieOatmeal + orGroup: Cookie2 + - id: FoodBakedCookieRaisin + orGroup: Cookie2 + - id: FoodBakedCookieSugar + orGroup: Cookie2 + # Cookie 3 + - id: FoodBakedCookie + orGroup: Cookie3 + - id: FoodBakedCookieOatmeal + orGroup: Cookie3 + - id: FoodBakedCookieRaisin + orGroup: Cookie3 + - id: FoodBakedCookieSugar + orGroup: Cookie3 + # Cookie 4 + - id: FoodBakedCookie + orGroup: Cookie4 + - id: FoodBakedCookieOatmeal + orGroup: Cookie4 + - id: FoodBakedCookieRaisin + orGroup: Cookie4 + - id: FoodBakedCookieSugar + orGroup: Cookie4 + +- type: entity + noSpawn: true + parent: BaseMail + id: MailNFKnife + suffix: knife, extended + components: + - type: Mail + contents: + - id: KukriKnife + orGroup: Knife + - id: Machete # A little large for an envelope but "we'll live" + orGroup: Knife + - id: CombatKnife + orGroup: Knife + - id: SurvivalKnife + orGroup: Knife + +- type: entity + noSpawn: true + parent: BaseMailLarge + id: MailNFSword + suffix: sword + components: + - type: Mail + contents: + - id: KatanaDulled + orGroup: Sword + prob: 0.95 + - id: ClaymoreDulled + orGroup: Sword + prob: 0.95 + - id: FoamCutlass + orGroup: Sword + prob: 0.95 + - id: Katana + orGroup: Sword + prob: 0.5 + - id: Claymore + orGroup: Sword + prob: 0.5 +# - id: CaneSheathFilled # TODO: don't have this yet +# orGroup: Sword +# prob: 0.3 + - id: Cutlass + orGroup: Sword + prob: 0.1 + - id: Kanabou # ah yes, swords + orGroup: Sword + prob: 0.1 + - id: ClothingBeltSheathFilled # Little dangerous between the reflect and the damage + orGroup: Sword + prob: 0.001 + +- type: entity + noSpawn: true + parent: BaseMail + id: MailNFMuffins + suffix: muffins, random + components: + - type: Mail + isPriority: true + contents: + # Muffin 1 + - id: FoodBakedMuffinBerry + orGroup: Muffin1 + - id: FoodBakedMuffinCherry + orGroup: Muffin1 + - id: FoodBakedMuffinBluecherry + orGroup: Muffin1 + - id: FoodBakedMuffin + orGroup: Muffin1 + - id: FoodMothMoffin + orGroup: Muffin1 + prob: 0.5 + # Muffin 2 + - id: FoodBakedMuffinBerry + orGroup: Muffin2 + - id: FoodBakedMuffinCherry + orGroup: Muffin2 + - id: FoodBakedMuffinBluecherry + orGroup: Muffin2 + - id: FoodBakedMuffin + orGroup: Muffin2 + - id: FoodMothMoffin + orGroup: Muffin2 + prob: 0.5 + # Muffin 3 + - id: FoodBakedMuffinBerry + orGroup: Muffin3 + - id: FoodBakedMuffinCherry + orGroup: Muffin3 + - id: FoodBakedMuffinBluecherry + orGroup: Muffin3 + - id: FoodBakedMuffin + orGroup: Muffin3 + - id: FoodMothMoffin + orGroup: Muffin3 + prob: 0.5 + # Muffin 4 + - id: FoodBakedMuffinBerry + orGroup: Muffin4 + - id: FoodBakedMuffinCherry + orGroup: Muffin4 + - id: FoodBakedMuffinBluecherry + orGroup: Muffin4 + - id: FoodBakedMuffin + orGroup: Muffin4 + - id: FoodMothMoffin + orGroup: Muffin4 + prob: 0.5 + +- type: entity + noSpawn: true + parent: BaseMail + id: MailNFPAI + suffix: PAI, extended + components: + - type: Mail + contents: + - id: PersonalAI + orGroup: PAI + prob: 0.99 + # Ultra rare + - id: SyndicatePersonalAI + orGroup: PAI + prob: 0.01 + +- type: entity + noSpawn: true + parent: BaseMail + id: MailNFPlushie + suffix: plushie, extended + components: + - type: Mail + contents: + # These are all grouped up now to guarantee at least one item received. + # The downside is you're not going to get half a dozen plushies anymore. + - id: PlushieBee + orGroup: Plushie + - id: PlushieRGBee + prob: 0.5 + orGroup: Plushie + - id: PlushieNuke + orGroup: Plushie + - id: PlushieArachind #DeltaV - Adds MORE PLUSHIE + orGroup: Plushie + - id: PlushieAtmosian #DeltaV - Adds MORE PLUSHIE + orGroup: Plushie + - id: PlushieXeno #DeltaV - Adds MORE PLUSHIE + orGroup: Plushie + - id: PlushiePenguin #DeltaV - Adds MORE PLUSHIE + orGroup: Plushie + - id: PlushieGhost #DeltaV - Adds MORE PLUSHIE + orGroup: Plushie + - id: PlushieDiona #DeltaV - Adds MORE PLUSHIE + orGroup: Plushie + - id: ToyMouse #DeltaV - Adds MORE PLUSHIE + orGroup: Plushie + - id: PlushieRouny + orGroup: Plushie + - id: PlushieLizard + orGroup: Plushie + - id: PlushieSpaceLizard + orGroup: Plushie + - id: PlushieRatvar + orGroup: Plushie + - id: PlushieNar + orGroup: Plushie + - id: PlushieCarp + orGroup: Plushie + - id: PlushieHolocarp #DeltaV - Adds MORE PLUSHIE + orGroup: Plushie + - id: PlushieRainbowCarp #DeltaV - Adds MORE PLUSHIE + orGroup: Plushie + - id: PlushieSlime + orGroup: Plushie + - id: PlushieSnake + orGroup: Plushie + - id: PlushieMothRandom + orGroup: Plushie + - id: PlushieMoth + prob: 0.5 + orGroup: Plushie + - id: PlushieMothMusician + prob: 0.5 + orGroup: Plushie + - id: PlushieMothBartender + prob: 0.5 + orGroup: Plushie + +# Random snacks, replaces MailChocolate (lousy animal organs) +- type: entity + noSpawn: true + parent: BaseMail + id: MailNFSnacks + suffix: snacks, random + components: + - type: Mail + contents: + # Snack 1 + - id: FoodSnackChocolate + orGroup: Snack1 + - id: FoodSnackPopcorn + orGroup: Snack1 + - id: FoodSnackChips + orGroup: Snack1 + - id: FoodSnackBoritos + orGroup: Snack1 + - id: FoodSnackSus + orGroup: Snack1 + - id: FoodSnackPistachios + orGroup: Snack1 + - id: FoodSnackRaisins + orGroup: Snack1 + - id: FoodSnackCheesie + orGroup: Snack1 + - id: FoodSnackEnergy + orGroup: Snack1 + - id: FoodSnackCnDs + orGroup: Snack1 + - id: FoodSnackSemki + orGroup: Snack1 + - id: FoodSnackSyndi + orGroup: Snack1 + prob: 0.5 + # Snack 2 + - id: FoodSnackChocolate + orGroup: Snack2 + - id: FoodSnackPopcorn + orGroup: Snack2 + - id: FoodSnackChips + orGroup: Snack2 + - id: FoodSnackBoritos + orGroup: Snack2 + - id: FoodSnackSus + orGroup: Snack2 + - id: FoodSnackPistachios + orGroup: Snack2 + - id: FoodSnackRaisins + orGroup: Snack2 + - id: FoodSnackCheesie + orGroup: Snack2 + - id: FoodSnackEnergy + orGroup: Snack2 + - id: FoodSnackCnDs + orGroup: Snack2 + - id: FoodSnackSemki + orGroup: Snack2 + - id: FoodSnackSyndi + orGroup: Snack2 + prob: 0.5 + # Snack 3 + - id: FoodSnackChocolate + orGroup: Snack3 + - id: FoodSnackPopcorn + orGroup: Snack3 + - id: FoodSnackChips + orGroup: Snack3 + - id: FoodSnackBoritos + orGroup: Snack3 + - id: FoodSnackSus + orGroup: Snack3 + - id: FoodSnackPistachios + orGroup: Snack3 + - id: FoodSnackRaisins + orGroup: Snack3 + - id: FoodSnackCheesie + orGroup: Snack3 + - id: FoodSnackEnergy + orGroup: Snack3 + - id: FoodSnackCnDs + orGroup: Snack3 + - id: FoodSnackSemki + orGroup: Snack3 + - id: FoodSnackSyndi + orGroup: Snack3 + prob: 0.5 + # Snack 4 + - id: FoodSnackChocolate + orGroup: Snack4 + - id: FoodSnackPopcorn + orGroup: Snack4 + - id: FoodSnackChips + orGroup: Snack4 + - id: FoodSnackBoritos + orGroup: Snack4 + - id: FoodSnackSus + orGroup: Snack4 + - id: FoodSnackPistachios + orGroup: Snack4 + - id: FoodSnackRaisins + orGroup: Snack4 + - id: FoodSnackCheesie + orGroup: Snack4 + - id: FoodSnackEnergy + orGroup: Snack4 + - id: FoodSnackCnDs + orGroup: Snack4 + - id: FoodSnackSemki + orGroup: Snack4 + - id: FoodSnackSyndi + orGroup: Snack4 + prob: 0.5 + +- type: entity + noSpawn: true + parent: BaseMail + id: MailNFVagueThreat + suffix: vague-threat + components: + - type: Mail + contents: + - id: PaperMailNFVagueThreat1 + orGroup: Paper + - id: PaperMailNFVagueThreat2 + orGroup: Paper + - id: PaperMailNFVagueThreat3 + orGroup: Paper + - id: PaperMailNFVagueThreat4 + orGroup: Paper + - id: PaperMailNFVagueThreat5 + orGroup: Paper + - id: PaperMailNFVagueThreat6 + orGroup: Paper + - id: PaperMailNFVagueThreat7 + orGroup: Paper + - id: PaperMailNFVagueThreat8 + orGroup: Paper + - id: PaperMailNFVagueThreat9 + orGroup: Paper + - id: PaperMailNFVagueThreat10 + orGroup: Paper + - id: PaperMailNFVagueThreat11 + orGroup: Paper + - id: PaperMailNFVagueThreat12 + orGroup: Paper + - id: KitchenKnife + orGroup: ThreateningObject + - id: ButchCleaver + orGroup: ThreateningObject + - id: CombatKnife + orGroup: ThreateningObject + - id: SurvivalKnife + orGroup: ThreateningObject + - id: SoapHomemade + orGroup: ThreateningObject + - id: FoodMeat + orGroup: ThreateningObject + - id: OrganHumanHeart + orGroup: ThreateningObject + +- type: entity + noSpawn: true + parent: BaseMail + id: MailNFDonkPockets + suffix: donk pockets, random + components: + - type: Mail + contents: + - id: FoodBoxDonkpocket + orGroup: Donk + prob: 0.4 # Higher probability, useful for chefs. + - id: FoodBoxDonkpocketSpicy + orGroup: Donk + prob: 0.1 + - id: FoodBoxDonkpocketTeriyaki + orGroup: Donk + prob: 0.1 + - id: FoodBoxDonkpocketPizza + orGroup: Donk + prob: 0.1 + - id: FoodBoxDonkpocketStonk + orGroup: Donk + prob: 0.05 + - id: FoodBoxDonkpocketCarp + orGroup: Donk + prob: 0.05 + - id: FoodBoxDonkpocketBerry + orGroup: Donk + prob: 0.1 + - id: FoodBoxDonkpocketHonk + orGroup: Donk + prob: 0.05 + - id: FoodBoxDonkpocketDink + orGroup: Donk + prob: 0.05 # Bad luck. + +# Needs a buff? +- type: entity + noSpawn: true + parent: BaseMail + id: MailNFSodaPwrGame + suffix: Pwrgame + components: + - type: Mail + contents: + - id: DrinkPwrGameCan + amount: 3 + - id: PaperMailNFPwrGameAd + +# Needs a buff? +- type: entity + noSpawn: true + parent: BaseMail + id: MailNFSodaRedBool + suffix: Red Bool + components: + - type: Mail + contents: + - id: DrinkEnergyDrinkCan + amount: 3 + - id: PaperMailNFRedBoolAd + +# Needs a buff? +- type: entity + noSpawn: true + parent: BaseMail + id: MailNFSodaSpaceCola + suffix: Space Cola + components: + - type: Mail + contents: + - id: DrinkColaBottleFull + - id: PaperMailNFSpaceColaAd + +# Needs a buff? +- type: entity + noSpawn: true + parent: BaseMail + id: MailNFSodaSpaceMountainWind + suffix: Space Mountain Wind + components: + - type: Mail + contents: + - id: DrinkSpaceMountainWindBottleFull + - id: PaperMailNFSpaceMountainWindAd + +# Needs a buff? +- type: entity + noSpawn: true + parent: BaseMail + id: MailNFSodaSpaceUp + suffix: Space Up + components: + - type: Mail + contents: + - id: DrinkSpaceUpBottleFull + - id: PaperMailNFSpaceUpAd + +#TODO: we don't have rainbow joints or blunts (yet?). Uncomment when (if?) they are added. +- type: entity + noSpawn: true + parent: BaseMail + id: MailNFJoints + suffix: joints + components: + - type: Mail + contents: + # Smokeable 1 + - id: Joint + orGroup: Smokeable1 + prob: 0.35 +# - id: JointRainbow +# orGroup: Smokeable1 +# prob: 0.15 +# - id: Blunt +# orGroup: Smokeable1 +# prob: 0.35 +# - id: BluntRainbow +# orGroup: Smokeable1 +# prob: 0.15 + # Smokeable 2 + - id: Joint + orGroup: Smokeable2 + prob: 0.35 +# - id: JointRainbow +# orGroup: Smokeable2 +# prob: 0.15 +# - id: Blunt +# orGroup: Smokeable2 +# prob: 0.35 +# - id: BluntRainbow +# orGroup: Smokeable2 +# prob: 0.15 + # Smokeable 3 + - id: Joint + orGroup: Smokeable3 + prob: 0.35 +# - id: JointRainbow +# orGroup: Smokeable3 +# prob: 0.15 +# - id: Blunt +# orGroup: Smokeable3 +# prob: 0.35 +# - id: BluntRainbow +# orGroup: Smokeable3 +# prob: 0.15 + +# Catchalls for food that only exist in random spawners +# Mmm, mail food +# Needs a buff? +- type: entity + noSpawn: true + parent: BaseMail + id: MailNFUnusualFood + suffix: unusual food + components: + - type: Mail + isPriority: true + isFragile: true + contents: + - id: FoodMealNachos + orGroup: Food + - id: FoodMealNachosCheesy + orGroup: Food + - id: FoodMealNachosCuban + orGroup: Food + - id: FoodMealEggplantParm + orGroup: Food + - id: FoodMealPotatoYaki + orGroup: Food + - id: FoodMealCornedbeef + orGroup: Food + - id: FoodMealBearsteak + orGroup: Food + - id: FoodMealPigblanket + orGroup: Food + - id: FoodMealEggsbenedict + orGroup: Food + - id: FoodMealOmelette + orGroup: Food + - id: FoodMealFriedegg + orGroup: Food + - id: FoodMealMilkape + orGroup: Food + - id: FoodMealMemoryleek + orGroup: Food + - id: DisgustingSweptSoup + orGroup: Food + - id: FoodBreadVolcanic + orGroup: Food + - id: FoodBakedWaffleSoylent + orGroup: Food + - id: FoodBakedWaffleRoffle + orGroup: Food + - id: FoodPieCherry + orGroup: Food + - id: FoodPieFrosty + orGroup: Food + prob: 0.05 + - id: FoodMeatGoliathCooked + amount: 3 + orGroup: Food + - id: FoodMeatRounyCooked + amount: 3 + orGroup: Food + - id: FoodMeatLizardCooked + amount: 3 + orGroup: Food + - id: FoodMeatSpiderlegCooked + amount: 3 + orGroup: Food + - id: FoodMeatMeatballCooked + amount: 4 + orGroup: Food + +# Needs a buff? +- type: entity + noSpawn: true + parent: BaseMail + id: MailNFBakedGoods + suffix: baked goods + components: + - type: Mail + isPriority: true + isFragile: true + contents: + - id: FoodBakedBunHoney + amount: 2 + orGroup: Food + - id: FoodBakedBunHotX + amount: 2 + orGroup: Food + - id: FoodBakedBunMeat + amount: 2 + orGroup: Food + - id: FoodBakedPretzel + amount: 2 + orGroup: Food + - id: FoodBakedCannoli + amount: 2 + orGroup: Food + - id: FoodDonutPlain + amount: 2 + orGroup: Food + - id: FoodDonutJellyPlain + amount: 2 + orGroup: Food + - id: FoodDonutHomer + amount: 2 + orGroup: Food + - id: FoodDonutChaos + amount: 2 + orGroup: Food + - id: FoodDonutMeat + amount: 2 + orGroup: Food + - id: FoodDonutPink + amount: 2 + orGroup: Food + - id: FoodDonutSpaceman + amount: 2 + orGroup: Food + - id: FoodDonutApple + amount: 2 + orGroup: Food + - id: FoodDonutCaramel + amount: 2 + orGroup: Food + - id: FoodDonutChocolate + amount: 2 + orGroup: Food +# - id: FoodDonutBluePumpkin # Don't have that yet +# amount: 2 +# orGroup: Food + - id: FoodDonutBungo + amount: 2 + orGroup: Food + - id: FoodDonut + amount: 2 + orGroup: Food + - id: FoodDonutSweetpea + amount: 2 + orGroup: Food + - id: FoodDonutJellyHomer + amount: 2 + orGroup: Food + - id: FoodDonutJellyPink + amount: 2 + orGroup: Food + - id: FoodDonutJellySpaceman + amount: 2 + orGroup: Food + - id: FoodDonutJellyApple + amount: 2 + orGroup: Food + - id: FoodDonutJellyCaramel + amount: 2 + orGroup: Food + - id: FoodDonutJellyChocolate + amount: 2 + orGroup: Food +# - id: FoodDonutJellyBluePumpkin # Don't have that yet +# amount: 2 +# orGroup: Food + - id: FoodDonutJellyBungo + amount: 2 + orGroup: Food + - id: FoodDonutJelly + amount: 2 + orGroup: Food + - id: FoodDonutJellySweetpea + amount: 2 + orGroup: Food + - id: FoodDonutJellySlugcat + amount: 2 + orGroup: Food + - id: FoodFrozenSandwich # ah yes, baked goods + amount: 2 + orGroup: Food + - id: FoodFrozenFreezy + amount: 2 + orGroup: Food + - id: FoodFrozenSundae + amount: 2 + orGroup: Food + - id: FoodFrozenCornuto + amount: 2 + orGroup: Food + - id: FoodFrozenPopsicleOrange + amount: 2 + orGroup: Food + - id: FoodFrozenPopsicleBerry + amount: 2 + orGroup: Food + - id: FoodFrozenPopsicleJumbo + amount: 2 + orGroup: Food + - id: FoodFrozenSnowcone + amount: 2 + orGroup: Food + - id: FoodFrozenSnowconeBerry + amount: 2 + orGroup: Food + - id: FoodFrozenSnowconeFruit + amount: 2 + orGroup: Food + - id: FoodFrozenSnowconeClown + amount: 2 + orGroup: Food + - id: FoodFrozenSnowconeMime + amount: 2 + orGroup: Food + - id: FoodFrozenSnowconeRainbow + amount: 2 + orGroup: Food + - id: FoodFrozenSnowconeMime + amount: 2 + orGroup: Food + - id: FoodMealMint # unlucky + amount: 2 + orGroup: Food + +# Needs a buff? +- type: entity + noSpawn: true + parent: BaseMail + id: MailNFUnusualProduce + suffix: unusual produce + components: + - type: Mail + isPriority: true + isFragile: true + contents: + - id: FoodLaughinPeaPod + orGroup: Produce + amount: 5 + - id: FoodMimana + orGroup: Produce + amount: 5 + - id: FoodLemoon + orGroup: Produce + amount: 5 + - id: FoodBlueTomato + orGroup: Produce + amount: 5 + - id: FoodBloodTomato + orGroup: Produce + amount: 5 + - id: FoodKoibean + orGroup: Produce + amount: 5 +# EE does not have those yet. Uncomment if any of those get ported. +# - id: FoodGhostPepper #DeltaV +# orGroup: Produce +# amount: 5 +# - id: FoodCosmicRevenant #DeltaV +# orGroup: Produce +# amount: 5 +# - id: FoodCrystalThistle #DeltaV +# orGroup: Produce +# amount: 5 + - id: FoodLily + orGroup: Produce + amount: 5 + prob: 0.5 + - id: FoodAmbrosiaDeus + orGroup: Produce + amount: 5 + prob: 0.5 + - id: FoodSpacemansTrumpet + orGroup: Produce + amount: 5 + prob: 0.25 + +- type: entity + noSpawn: true + parent: BaseMail + id: MailNFSoaps + suffix: soap sampler + components: + - type: Mail + contents: + - id: BoxSoapsAssorted + - id: PaperMailNTSoapAd1 + orGroup: Ad + - id: PaperMailNTSoapAd2 + orGroup: Ad + +- type: entity + noSpawn: true + parent: BaseMail + id: MailNFSoapsOmega + suffix: soap sampler, omega + components: + - type: Mail + contents: + - id: BoxSoapsAssortedOmega + - id: PaperMailNTSoapAd1 + orGroup: Ad + - id: PaperMailNTSoapAd2 + orGroup: Ad + +# Could add spessman battle rules here +- type: entity + noSpawn: true + 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 + components: + - type: Mail + contents: + - id: MysteryFigureBox + - id: MysteryFigureBox + - id: MysteryFigureBox + +- type: entity + noSpawn: true + parent: BaseMail + id: MailNFPen + suffix: fancy pen + components: + - type: Mail + contents: + - id: LuxuryPen + orGroup: Pen + prob: 0.50 + # DeltaV: Commenting these two out because I dunno if crew should have nice things + # - id: PenHop + # orGroup: Pen + # prob: 0.25 + # - id: PenCap + # orGroup: Pen + # prob: 0.25 + # TODO: come up with a slightly less powerful version of these + # Ultra-rare + # - id: CyberPen + # orGroup: Pen + # prob: 0.005 + # - id: PenCentcom + # orGroup: Pen + # prob: 0.005 + - id: PaperMailNFPaperPusherAd + +- type: entity + noSpawn: true + parent: BaseMailLarge + id: MailNFThrongler + suffix: throngler + components: + - type: Mail + contents: + - id: ThronglerToy + +- type: entity + noSpawn: true + parent: BaseMail + id: MailNFInstrumentSmall + suffix: instrument, expanded + components: + - type: Mail + contents: + - id: TrumpetInstrument + orGroup: Instrument + - id: RecorderInstrument + orGroup: Instrument + - id: ClarinetInstrument + orGroup: Instrument + - id: FluteInstrument + orGroup: Instrument + - id: HarmonicaInstrument + orGroup: Instrument + - id: OcarinaInstrument + orGroup: Instrument + - id: PanFluteInstrument + orGroup: Instrument + - id: KalimbaInstrument + orGroup: Instrument + - id: WoodblockInstrument + orGroup: Instrument + - id: BikeHornInstrument + orGroup: Instrument + - id: MusicBoxInstrument + orGroup: Instrument + - id: MicrophoneInstrument + orGroup: Instrument + - id: MusicalLungInstrument + orGroup: Instrument + # Uncommon + - id: PhoneInstrument + orGroup: Instrument + prob: 0.1 + # Rare + - id: BananaPhoneInstrument + orGroup: Instrument + prob: 0.05 + # Ultra-rare + - id: PhoneInstrumentSyndicate + orGroup: Instrument + prob: 0.01 + +- type: entity + noSpawn: true + parent: BaseMail + id: MailNFUnusualClothing + suffix: unusual clothing + components: + - type: Mail + contents: + - id: ClothingKimonoPink + orGroup: Clothes + - id: ClothingKimonoBlue + orGroup: Clothes + - id: ClothingKimonoPurple + orGroup: Clothes + - id: ClothingKimonoSky + orGroup: Clothes + - id: ClothingKimonoGreen + orGroup: Clothes + - id: ClothingUniformMartialGi + orGroup: Clothes + - id: ClothingNeckBling + orGroup: Clothes + - id: ClothingShoesBling + orGroup: Clothes + - id: ClothingNeckCloakAdmin + orGroup: Clothes + - id: ClothingHeadHatFancyCrown + orGroup: Clothes + - id: ClothingHeadHatCake + orGroup: Clothes + - id: ClothingHeadHatCone + orGroup: Clothes + - id: ClothingMaskOniRed + orGroup: Clothes + - id: ClothingMaskOniBlue + orGroup: Clothes + - id: ClothingHeadHatRichard + orGroup: Clothes + - id: ClothingHeadHatAnimalHeadslime + orGroup: Clothes + - id: ClothingHeadHatDogEars + orGroup: Clothes + - id: ClothingHeadHatCatEars + orGroup: Clothes + - id: ClothingEyesGlassesOutlawGlasses + orGroup: Clothes + - id: ClothingUniformJumpsuitGalaxyBlue + orGroup: Clothes + prob: 0.25 + - id: ClothingUniformJumpsuitGalaxyRed + orGroup: Clothes + prob: 0.25 + +- type: entity + noSpawn: true + parent: BaseMail + id: MailNFCritter + suffix: critter + components: + - type: Mail + isFragile: true + contents: + # Bugs (weight: 2) + - id: MobCockroach + orGroup: Critter + prob: 0.36 + - id: MobSlug + orGroup: Critter + prob: 0.36 + - id: MobArgocyteSlurva # honorary bug? + orGroup: Critter + prob: 0.36 + - id: MobBee + orGroup: Critter + prob: 0.36 + - id: MobButterfly + orGroup: Critter + prob: 0.36 + # Uncommon + - id: MobMothroach + orGroup: Critter + prob: 0.2 + # Small reptiles (weight: 1) + - id: MobLizard + orGroup: Critter + prob: 0.34 + - id: MobSnake + orGroup: Critter + prob: 0.33 + - id: MobFrog + orGroup: Critter + prob: 0.33 + # Small mammals (weight: 1) + - id: MobMouse + orGroup: Critter + prob: 0.33 + - id: MobMouse1 + orGroup: Critter + prob: 0.33 + - id: MobMouse2 + orGroup: Critter + prob: 0.33 + - id: MobMouseCancer + orGroup: Critter + prob: 0.01 # Rare + +- type: entity + noSpawn: true + parent: BaseMail + id: MailNFTacticalMaid + suffix: tactical maid + components: + - type: Mail + contents: + - id: ClothingUniformJumpskirtTacticalMaid + - id: ClothingHeadHatTacticalMaidHeadband + - id: MegaSprayBottle + - id: ClothingHandsTacticalMaidGloves + +- type: entity + noSpawn: true + parent: BaseMailLarge + id: MailNFKendoKit + suffix: kendo kit + components: + - type: Mail + contents: # A lot of stuff here, seems spammy. + - id: ClothingUniformKendoHakama + amount: 2 + - id: ClothingOuterArmorKendoBogu + amount: 2 + - id: ClothingHeadHelmetKendoMen + amount: 2 + - id: Shinai + amount: 2 + +# Base Nyano Mail +- type: entity + noSpawn: true + parent: BaseMail + id: MailSake + suffix: osake + components: + - type: Mail + contents: + - id: DrinkSakeCup + amount: 2 + - id: DrinkTokkuri + +- type: entity + noSpawn: true + parent: BaseMail + id: MailBlockGameDIY + suffix: blockgamediy + components: + - type: Mail + contents: + - id: BlockGameArcadeComputerCircuitboard + +- type: entity + noSpawn: true + parent: BaseMail + id: MailCigars + suffix: Cigars + components: + - type: Mail + contents: + - id: CigarCase + - id: Lighter + +- type: entity + noSpawn: true + parent: BaseMail + id: MailCrayon + suffix: Crayon + components: + - type: Mail + contents: + - id: CrayonBox + +- type: entity + noSpawn: true + parent: BaseMail + id: MailCosplayArc + suffix: cosplay-arc + components: + - type: Mail + openSound: /Audio/Nyanotrasen/Voice/Felinid/cat_wilhelm.ogg + contents: + - id: ClothingCostumeArcDress + +- type: entity + noSpawn: true + parent: BaseMail + id: MailCosplayGeisha + suffix: cosplay-geisha + components: + - type: Mail + contents: + - id: UniformGeisha + - id: DrinkTeapot + - id: DrinkTeacup + amount: 3 + +- type: entity + noSpawn: true + parent: BaseMail + id: MailCosplaySchoolgirl + suffix: cosplay-schoolgirl + components: + - type: Mail + contents: + - id: UniformSchoolgirlBlack + orGroup: Color + - id: UniformSchoolgirlBlue + orGroup: Color + - id: UniformSchoolgirlCyan + orGroup: Color + - id: UniformSchoolgirlGreen + orGroup: Color + - id: UniformSchoolgirlOrange + orGroup: Color + - id: UniformSchoolgirlPink + orGroup: Color + - id: UniformSchoolgirlPurple + orGroup: Color + - id: UniformSchoolgirlRed + orGroup: Color + +- type: entity + noSpawn: true + parent: BaseMail + id: MailFlowers + suffix: flowers + components: + - type: Mail + contents: + # TODO actual flowers + - id: ClothingHeadHatFlowerWreath + orGroup: Flowers + - id: FoodPoppy + orGroup: Flowers + - id: FoodLily + +- type: entity + noSpawn: true + parent: BaseMail + id: MailSignallerKit + suffix: signallerkit + components: + - type: Mail + contents: + - id: Multitool + - id: RemoteSignaller + +- type: entity + noSpawn: true + parent: BaseMail + id: MailNoir + suffix: noir + components: + - type: Mail + contents: + - id: ClothingUniformJumpsuitDetectiveGrey + - id: ClothingUniformJumpskirtDetectiveGrey + - id: ClothingHeadHatBowlerHat + - id: ClothingOuterCoatGentle + +- type: entity + noSpawn: true + parent: BaseMail + id: MailRestraints + suffix: restraints + components: + - type: Mail + contents: + - id: Handcuffs + - id: ClothingMaskMuzzle + - id: ClothingEyesBlindfold + +- type: entity + noSpawn: true + parent: BaseMail + id: MailFishingCap + suffix: fishingcap + components: + - type: Mail + contents: + - id: ClothingHeadFishCap + +- type: entity + noSpawn: true + parent: BaseMail + id: MailFlashlight + suffix: Flashlight + components: + - type: Mail + contents: + - id: FlashlightLantern + +- type: entity + noSpawn: true + parent: BaseMail + id: MailSpaceVillainDIY + suffix: spacevilliandiy + components: + - type: Mail + contents: + - id: SpaceVillainArcadeComputerCircuitboard + +- type: entity + noSpawn: true + parent: BaseMail + id: MailSunglasses + suffix: Sunglasses + components: + - type: Mail + contents: + - id: ClothingEyesGlassesSunglasses + +- type: entity + noSpawn: true + parent: BaseMail + id: MailWinterCoat + suffix: wintercoat + components: + - type: Mail + contents: + - id: ClothingOuterWinterCoat + orGroup: Coat + - id: ClothingOuterWinterCoatLong + orGroup: Coat + - id: ClothingOuterWinterCoatPlaid + orGroup: Coat diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail_civilian.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail_civilian.yml new file mode 100644 index 00000000000..19a1ee3c536 --- /dev/null +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail_civilian.yml @@ -0,0 +1,229 @@ +# Frontier Mail +- type: entity + noSpawn: true + parent: BaseMailLarge + id: MailNFInstrumentLarge + suffix: instrument, large + components: + - type: Mail + contents: + - id: TromboneInstrument + orGroup: Instrument + - id: FrenchHornInstrument + orGroup: Instrument + - id: SaxophoneInstrument + orGroup: Instrument + - id: EuphoniumInstrument + orGroup: Instrument + - id: AcousticGuitarInstrument + orGroup: Instrument + - id: ElectricGuitarInstrument + orGroup: Instrument + - id: BassGuitarInstrument + orGroup: Instrument + - id: RockGuitarInstrument + orGroup: Instrument + - id: BanjoInstrument + orGroup: Instrument + - id: ViolinInstrument + orGroup: Instrument + - id: CelloInstrument + orGroup: Instrument + - id: ViolaInstrument + orGroup: Instrument + - id: BagpipeInstrument # Fury. + orGroup: Instrument + - id: SynthesizerInstrument + orGroup: Instrument + - id: AccordionInstrument + orGroup: Instrument + - id: GlockenspielInstrument + orGroup: Instrument + - id: XylophoneInstrument + orGroup: Instrument + # Uncommon + - id: Rickenbacker4003Instrument + orGroup: Instrument + prob: 0.25 + # Rare + - id: Rickenbacker4001Instrument + orGroup: Instrument + prob: 0.1 + +# Base Nyano Mail + +- type: entity + noSpawn: true + parent: BaseMail + id: MailBotanistChemicalBottles + suffix: botanist chemicals + components: + - type: Mail + contents: + - id: RobustHarvestChemistryBottle + orGroup: Chemical + prob: 0.6 + - id: WeedSpray + orGroup: Chemical + prob: 0.4 + +- type: entity + noSpawn: true + parent: BaseMail + id: MailBotanistMutagen + suffix: mutagen + components: + - type: Mail + isFragile: true + isPriority: true + contents: + - id: UnstableMutagenChemistryBottle + +- type: entity + noSpawn: true + parent: BaseMail + id: MailBotanistSeeds + suffix: seeds + components: + - type: Mail + contents: + - id: AloeSeeds + orGroup: Seeds + - id: AmbrosiaVulgarisSeeds + orGroup: Seeds + - id: AppleSeeds + orGroup: Seeds + - id: BananaSeeds + orGroup: Seeds + - id: CarrotSeeds + orGroup: Seeds + - id: ChanterelleSeeds + orGroup: Seeds + - id: ChiliSeeds + orGroup: Seeds + - id: CornSeeds + orGroup: Seeds + - id: EggplantSeeds + orGroup: Seeds + - id: GalaxythistleSeeds + orGroup: Seeds + - id: LemonSeeds + orGroup: Seeds + - id: LingzhiSeeds + orGroup: Seeds + - id: OatSeeds + orGroup: Seeds + - id: OnionSeeds + orGroup: Seeds + - id: PoppySeeds + orGroup: Seeds + - id: PotatoSeeds + orGroup: Seeds + - id: SugarcaneSeeds + orGroup: Seeds + - id: TomatoSeeds + orGroup: Seeds + - id: TowercapSeeds + orGroup: Seeds + - id: WheatSeeds + orGroup: Seeds + +- type: entity + noSpawn: true + parent: BaseMail + id: MailClownGildedBikeHorn + suffix: honk + components: + - type: Mail + isFragile: true + contents: + - id: BikeHornInstrument + +- type: entity + noSpawn: true + parent: BaseMail + id: MailClownHonkSupplement + suffix: honk + components: + - type: Mail + isFragile: true + contents: + - id: BikeHorn + - id: FoodPieBananaCream + - id: FoodBanana + +- type: entity + noSpawn: true + parent: BaseMail + id: MailHoPBureaucracy + suffix: hop paper + components: + - type: Mail + contents: + - id: Paper + maxAmount: 3 + +- type: entity + noSpawn: true + parent: BaseMail + id: MailHoPSupplement + suffix: hop supplement + components: + - type: Mail + contents: + - id: ClearPDA + - id: ClothingHeadsetGrey + - id: Paper + +- type: entity + noSpawn: true + parent: BaseMail + id: MailMimeArtsCrafts + suffix: arts and crafts + components: + - type: Mail + contents: + - id: CrayonBox + - id: Paper + maxAmount: 3 + +- type: entity + noSpawn: true + parent: BaseMail + id: MailMimeBlankBook + suffix: blank book + components: + - type: Mail + contents: + - id: BookRandom + +- type: entity + noSpawn: true + parent: BaseMail + id: MailMimeBottleOfNothing + suffix: bottle of nothing + components: + - type: Mail + contents: + - id: DrinkBottleOfNothingFull + +- type: entity + noSpawn: true + parent: BaseMail + id: MailPassengerMoney + suffix: passenger money + components: + - type: Mail + contents: + - id: SpaceCash100 + orGroup: Cash + prob: 0.1 + maxAmount: 10 + - id: SpaceCash500 + orGroup: Cash + prob: 0.3 + maxAmount: 5 + - id: SpaceCash1000 + orGroup: Cash + prob: 0.6 + maxAmount: 3 diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail_command.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail_command.yml new file mode 100644 index 00000000000..86dec46a654 --- /dev/null +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail_command.yml @@ -0,0 +1,35 @@ +# Base Nyano Mail +- type: entity + noSpawn: true + parent: BaseMail + id: MailCommandPinpointerNuclear + suffix: pinpointer mail ops + components: + - type: Mail + contents: + - id: PinpointerNuclear + +- type: entity + noSpawn: true + parent: BaseMail + id: MailStationRepNFNukeDisk + suffix: nuke disk + components: + - type: Mail + isFragile: true + contents: + - id: NukeDiskFake + - id: PaperMailNFAntivirus + +- type: entity + noSpawn: true + parent: BaseMail + id: MailCommandNFPipebombIntern + suffix: pipe and bomb + components: + - type: Mail + isFragile: true + contents: + - id: SmokingPipeFilledTobacco + - id: DrinkAtomicBombGlass + - id: PaperMailNFPipebombIntern diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail_engineering.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail_engineering.yml new file mode 100644 index 00000000000..af70fc621cb --- /dev/null +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail_engineering.yml @@ -0,0 +1,182 @@ +# Base Nyano Mail +- type: entity + noSpawn: true + parent: BaseMail + id: MailEngineeringCables + suffix: cables + components: + - type: Mail + contents: + - id: CableHVStack + orGroup: Cables + - id: CableMVStack + orGroup: Cables + - id: CableApcStack + orGroup: Cables + +- type: entity + noSpawn: true + parent: BaseMail + id: MailEngineeringKudzuDeterrent + suffix: antikudzu + components: + - type: Mail + contents: + - id: PlantBGoneSpray + +- type: entity + noSpawn: true + parent: BaseMail + id: MailEngineeringSheetGlass + suffix: sheetglass + components: + - type: Mail + contents: + - id: SheetGlass + +- type: entity + noSpawn: true + parent: BaseMail + id: MailEngineeringWelderReplacement + suffix: welder + components: + - type: Mail + contents: + - id: Welder + +# Frontier Mail + +- type: entity + noSpawn: true + parent: BaseMail + id: MailNFCircuitboardIndustrial + suffix: industrial circuitboard + components: + - type: Mail + contents: + - id: ThermomachineFreezerMachineCircuitBoard + orGroup: Board + prob: 0.5 + - id: ThermomachineHeaterMachineCircuitBoard + orGroup: Board + prob: 0.5 + - id: HellfireFreezerMachineCircuitBoard + orGroup: Board + prob: 0.25 + - id: HellfireHeaterMachineCircuitBoard + orGroup: Board + prob: 0.25 + - id: CryoPodMachineCircuitboard # Medical as well + orGroup: Board + prob: 0.5 + - id: ChemMasterMachineCircuitboard + orGroup: Board + prob: 0.5 + - id: ChemDispenserMachineCircuitboard + orGroup: Board + prob: 0.25 + - id: StasisBedMachineCircuitboard + orGroup: Board + prob: 0.25 + - id: BiomassReclaimerMachineCircuitboard + orGroup: Board + prob: 0.25 + - id: BiofabricatorMachineCircuitboard + orGroup: Board + prob: 0.25 + - id: TurboItemRechargerCircuitboard + orGroup: Board + prob: 0.5 + - id: AutolatheHyperConvectionMachineCircuitboard + orGroup: Board + prob: 0.25 + - id: ProtolatheHyperConvectionMachineCircuitboard + orGroup: Board + prob: 0.25 + - id: HotplateMachineCircuitboard + orGroup: Board + prob: 0.5 +# - id: CircuitImprinterHyperConvectionMachineCircuitboard +# orGroup: Board +# prob: 0.25 + - id: SheetifierMachineCircuitboard + orGroup: Board + prob: 0.25 + - id: RadarConsoleCircuitboard + orGroup: Board + prob: 0.25 + - id: OreProcessorIndustrialMachineCircuitboard + orGroup: Board + prob: 0.5 + - id: GasRecyclerMachineCircuitboard + orGroup: Board + prob: 0.1 + +- type: entity + noSpawn: true + parent: BaseMail + id: MailNFCircuitboardService + suffix: service circuitboard + components: + - type: Mail + contents: + - id: ComputerTelevisionCircuitboard + orGroup: Board + - id: ReagentGrinderMachineCircuitboard + orGroup: Board + - id: ReagentGrinderIndustrialMachineCircuitboard + orGroup: Board + prob: 0.5 + - id: SurveillanceWirelessCameraMovableCircuitboard + orGroup: Board + prob: 0.5 + - id: MicrowaveMachineCircuitboard + orGroup: Board + - id: ElectricGrillMachineCircuitboard + orGroup: Board + prob: 0.5 + - id: FatExtractorMachineCircuitboard + orGroup: Board + prob: 0.25 + - id: SeedExtractorMachineCircuitboard + orGroup: Board + prob: 0.5 + - id: BoozeDispenserMachineCircuitboard + orGroup: Board + - id: SodaDispenserMachineCircuitboard + orGroup: Board + - id: JukeboxCircuitBoard + orGroup: Board + - id: TelecomServerCircuitboard + orGroup: Board + prob: 0.25 + - id: ComputerMassMediaCircuitboard + orGroup: Board + prob: 0.1 + +- type: entity + noSpawn: true + parent: BaseMailLarge + id: MailNFPowerTool + suffix: power tool + components: + - type: Mail + contents: + - id: PaperMailNFPowerTool + orGroup: Paper + - id: JawsOfLife + orGroup: Gift + prob: 0.33 + - id: PowerDrill + orGroup: Gift + prob: 0.33 + - id: WelderIndustrial + orGroup: Gift + prob: 0.20 + # Rare + - id: WelderIndustrialAdvanced + orGroup: Gift + prob: 0.10 + - id: WelderExperimental + orGroup: Gift + prob: 0.04 diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail_epistemology.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail_epistemology.yml new file mode 100644 index 00000000000..be6f9818e22 --- /dev/null +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail_epistemology.yml @@ -0,0 +1,48 @@ +- type: entity + noSpawn: true + parent: BaseMail + id: MailEpistemologyBluespace + suffix: bluespace + components: + - type: Mail + contents: + - id: MaterialBluespace1 + +- type: entity + noSpawn: true + parent: BaseMail + id: MailEpistemologyIngotGold + suffix: ingotgold + components: + - type: Mail + contents: + - id: IngotGold1 + maxAmount: 3 + +- type: entity + noSpawn: true + parent: BaseMail + id: MailEpistemologyResearchDisk + suffix: researchdisk + components: + - type: Mail + contents: + - id: ResearchDisk + orGroup: Disk + prob: 0.6 + - id: ResearchDisk5000 + orGroup: Disk + prob: 0.3 + - id: ResearchDisk10000 + orGroup: Disk + prob: 0.1 + +- type: entity + noSpawn: true + parent: BaseMail + id: MailEpistemologyTinfoilHat + suffix: tinfoilhat + components: + - type: Mail + contents: + - id: ClothingHeadTinfoil diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Mail/mail_medical.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail_medical.yml similarity index 84% rename from Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Mail/mail_medical.yml rename to Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail_medical.yml index 4e797272e5e..735f840a201 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Mail/mail_medical.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail_medical.yml @@ -1,3 +1,4 @@ +# Base Nyano Mail - type: entity noSpawn: true parent: BaseMail @@ -91,3 +92,19 @@ maxAmount: 2 - id: SyringeTranexamicAcid maxAmount: 2 + +# Frontier Mail +- type: entity + parent: BaseMailLarge + id: MailNFMedkit + suffix: medkit + components: + - type: Mail + contents: + - id: MedkitAdvancedFilled + orGroup: Medkit + prob: 0.75 + - id: MedkitCombatFilled + orGroup: Medkit + prob: 0.25 + diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail_security.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail_security.yml new file mode 100644 index 00000000000..eed846a0909 --- /dev/null +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail_security.yml @@ -0,0 +1,95 @@ +# Base Nyano Mail +- type: entity + noSpawn: true + parent: BaseMail + id: MailSecurityDonuts + suffix: donuts + components: + - type: Mail + contents: + - id: FoodBoxDonut + +- type: entity + noSpawn: true + parent: BaseMail + id: MailSecurityFlashlight + suffix: seclite + components: + - type: Mail + contents: + - id: FlashlightSeclite + +- type: entity + noSpawn: true + parent: BaseMail + id: MailSecurityNonlethalsKit + suffix: nonlethalskit + components: + - type: Mail + contents: + - id: Flash + maxAmount: 2 + - id: GrenadeFlashBang + maxAmount: 2 + - id: Handcuffs + maxAmount: 2 + +#- type: entity +# parent: BaseMail +# id: MailSecuritySpaceLaw +# suffix: spacelaw +# components: +# - type: Mail +# contents: +# - id: HyperlinkBookSpaceLaw +# Will we ever readd hyperlinks books? Who knows! + +- type: entity + noSpawn: true + parent: BaseMail + id: MailWardenCrowdControl + suffix: crowdcontrol + components: + - type: Mail + contents: + - id: BoxBeanbag + +- type: entity + noSpawn: true + parent: BaseMail + id: MailDetectiveForensicSupplement # Deltav - Detective is in charge of investigating crimes. + suffix: detectivesupplement # Deltav - Detective is in charge of investigating crimes. + components: + - type: Mail + contents: + - id: BoxForensicPad + +# Frontier Mail + +- type: entity + noSpawn: true + parent: BaseMailLarge + id: MailSecurityNFMusket + suffix: musket + components: + - type: Mail + contents: + - id: ClothingHeadHatPwig + - id: Musket + - id: CartridgeAntiMateriel + amount: 2 + - id: PaperMailNTMusket + +# Delta Mail + +- type: entity + noSpawn: true + parent: BaseMail + id: MailSecurityDVSpaceLaw + suffix: spacelaw, extended + components: + - type: Mail + contents: + - id: BookSecurity +# - id: BookSOP #This is where I'd put my Delta SOP book... IF I HAD ONE!!! + - id: PaperMailNFSpaceLaw # Uses the NF space law paper, which is edited to mention the Delta Sector 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 9ff83bfd486..8c8ce740a51 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 @@ -114,7 +114,7 @@ - type: StaticPrice price: 750 - type: StealTarget - stealGroup: WeaponEnergyGunMultiphase + stealGroup: HoSAntiqueWeapon - type: entity name: miniature energy gun @@ -166,6 +166,13 @@ Lethal: { state: mode-lethal } Special: { state: mode-stun } # Unused +- type: entity + name: miniature energy gun + parent: WeaponEnergyGunMini + id: WeaponEnergyGunMiniSecurity + description: A light version of the Energy gun with a smaller capacity. + The serial number on the handguard marks this gun as belonging to an NT Security Officer. + - type: entity name: PDW-9 Energy Pistol parent: BaseWeaponBatterySmall @@ -223,6 +230,13 @@ - type: StaticPrice price: 750 +- type: entity + name: PDW-9 Energy Pistol + parent: WeaponEnergyGunPistol + id: WeaponEnergyGunPistolSecurity + description: A military grade sidearm, used by many militia forces throughout the local sector. + The serial number on the handguard marks this gun as belonging to an NT Security Officer. + - type: entity name: IK-60 laser carbine parent: BaseWeaponBattery diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Pistols/pistols.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Pistols/pistols.yml index 6f4d5b52301..405c321316c 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Pistols/pistols.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Pistols/pistols.yml @@ -33,6 +33,13 @@ gun_magazine: !type:ContainerSlot gun_chamber: !type:ContainerSlot +- type: entity + name: viper + parent: WeaponPistolViperWood + id: WeaponPistolViperWoodSecurity + description: A small, low-power pistol with pleasant lacquered wooden grips. Uses .35 auto ammo. + The serial number on the handguard marks this gun as belonging to an NT Security Officer. + - type: entity name: Pollock parent: BaseWeaponPistol @@ -72,6 +79,38 @@ gun_magazine: !type:ContainerSlot gun_chamber: !type:ContainerSlot +- type: entity + name: Pollock + parent: WeaponPistolPollock + id: WeaponPistolPollockSecurity + description: A compact and mass-produced combat pistol. Uses .35 auto ammo. + The serial number on the handguard marks this gun as belonging to an NT Security Officer. + +- type: entity + name: Pollock + parent: WeaponPistolPollockSecurity + id: WeaponPistolPollockNonlethalSecurity + components: + - type: ItemSlots + slots: + gun_magazine: + name: Magazine + startingItem: MagazinePistolRubber + insertSound: /Audio/Weapons/Guns/MagIn/pistol_magin.ogg + ejectSound: /Audio/Weapons/Guns/MagOut/pistol_magout.ogg + priority: 2 + whitelist: + tags: + - MagazinePistol + - MagazinePistolHighCapacity + gun_chamber: + name: Chamber + startingItem: CartridgePistolRubber + priority: 1 + whitelist: + tags: + - CartridgePistol + - type: entity name: psi-breaker parent: BaseWeaponPistol diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml index a19a21dd924..d74949a80aa 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml @@ -22,6 +22,28 @@ chambers: [ True, True, True, True, True, True ] ammoSlots: [ null, null, null, null, null, null ] +- type: entity + name: snubbed .45 + parent: WeaponRevolverSnub + id: WeaponRevolverSnubSecurity + description: An old and reliable revolver, modified to be more easily concealed. Uses .45 magnum ammo. + The serial number on the handguard marks this gun as belonging to an NT Security Officer. + +- type: entity + name: snubbed .45 + parent: WeaponRevolverSnubSecurity + id: WeaponRevolverSnubNonlethalSecurity + components: + - type: RevolverAmmoProvider + whitelist: + tags: + - CartridgeMagnum + - SpeedLoaderMagnum + proto: CartridgeMagnumRubber + capacity: 6 + chambers: [ True, True, True, True, True, True ] + ammoSlots: [ null, null, null, null, null, null ] + - type: entity name: k-38 masterpiece parent: BaseWeaponRevolver @@ -37,6 +59,28 @@ fireRate: 2 availableModes: - SemiAuto + - type: RevolverAmmoProvider + whitelist: + tags: + - CartridgeSpecial + - SpeedLoaderSpecial + proto: CartridgeSpecial + capacity: 6 + chambers: [ True, True, True, True, True, True ] + ammoSlots: [ null, null, null, null, null, null ] + +- type: entity + name: k-38 masterpiece + parent: WeaponRevolverK38Master + id: WeaponRevolverK38MasterSecurity + description: A classic, if not outdated, law enforcement firearm. Uses .38 special ammo. + The serial number on the handguard marks this gun as belonging to an NT Security Officer. + +- type: entity + name: k-38 masterpiece + parent: WeaponRevolverK38MasterSecurity + id: WeaponRevolverK38MasterNonlethalSecurity + components: - type: RevolverAmmoProvider whitelist: tags: @@ -62,6 +106,28 @@ fireRate: 1.75 availableModes: - SemiAuto + - type: RevolverAmmoProvider + whitelist: + tags: + - CartridgeSpecial + - SpeedLoaderSpecial + proto: CartridgeSpecial + capacity: 6 + chambers: [ True, True, True, True, True, True ] + ammoSlots: [ null, null, null, null, null, null ] + +- type: entity + name: fitz special + parent: WeaponRevolverFitz + id: WeaponRevolverFitzSecurity + description: A compact and concealable self defence snub revolver. Uses .38 special ammo. + The serial number on the handguard marks this gun as belonging to an NT Security Officer. + +- type: entity + name: fitz special + parent: WeaponRevolverFitzSecurity + id: WeaponRevolverFitzNonlethalSecurity + components: - type: RevolverAmmoProvider whitelist: tags: diff --git a/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Airlocks/access.yml b/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Airlocks/access.yml new file mode 100644 index 00000000000..04785c042b6 --- /dev/null +++ b/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Airlocks/access.yml @@ -0,0 +1,372 @@ +# Delta V specific roles +- type: entity + parent: AirlockScience + id: AirlockMantisLocked + suffix: Mantis, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsMantis ] + + +- type: entity + parent: AirlockScienceGlass + id: AirlockMantisGlassLocked + suffix: Mantis, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsMantis ] + +- type: entity + parent: AirlockCommand + id: AirlockChiefJusticeLocked + suffix: Chief Justice, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsChiefJustice ] + +- type: entity + parent: AirlockCommandGlass + id: AirlockChiefJusticeGlassLocked + suffix: ChiefJustice, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsChiefJustice ] + +- type: entity + parent: AirlockJustice + id: AirlockJusticeLocked + suffix: Justice, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsJustice ] + +- type: entity + parent: AirlockJusticeGlass + id: AirlockJusticeGlassLocked + suffix: Justice, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsJustice ] + +- type: entity + parent: AirlockJustice + id: AirlockProsecutorLocked + suffix: Prosecutor, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsProsecutor ] + +- type: entity + parent: AirlockJusticeGlass + id: AirlockProsecutorGlassLocked + suffix: Prosecutor, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsProsecutor ] + +# Maintenance +- type: entity + parent: AirlockMaint + id: AirlockMaintChiefJusticeLocked + suffix: ChiefJustice, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsChiefJustice ] + +- type: entity + parent: AirlockMaint + id: AirlockMaintJusticeLocked + suffix: Justice, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsJustice ] + +- type: entity + parent: AirlockMaint + id: AirlockMaintProsecutorLocked + suffix: Prosecutor, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsProsecutor ] + +- type: entity + parent: AirlockSecurity + id: AirlockCorpsmanLocked + suffix: Corpsman, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsCorpsman ] + +- type: entity + parent: AirlockSecurityGlass + id: AirlockCorpsmanGlassLocked + suffix: Corpsman, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsCorpsman ] + +- type: entity + parent: AirlockGlassShuttle + id: AirlockExternalGlassShuttleEscapeSub + suffix: External, Escape Sub, Glass, Docking + components: + - type: GridFill + path: /Maps/Shuttles/DeltaV/sub_escape_pod.yml + +- type: entity + parent: Airlock + id: AirlockBoxerLocked + suffix: Boxer, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsBoxer ] + +- type: entity + parent: Airlock + id: AirlockClownLocked + suffix: Clown, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsClown ] + +- type: entity + parent: Airlock + id: AirlockMimeLocked + suffix: Mime, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsMime ] + +- type: entity + parent: Airlock + id: AirlockMusicianLocked + suffix: Musician, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsMusician ] + +- type: entity + parent: Airlock + id: AirlockReporterLocked + suffix: Reporter, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsReporter ] + +- type: entity + parent: Airlock + id: AirlockLibraryLocked + suffix: Library, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsLibrary ] + +- type: entity + parent: Airlock + id: AirlockZookeeperLocked + suffix: Zookeeper, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsZookeeper ] + +- type: entity + parent: AirlockExternal + id: AirlockExternalSalvageLocked + suffix: External, Salvage, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsSalvage ] + +- type: entity + parent: AirlockMedical + id: AirlockPsychologistLocked + suffix: Psychologist, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsPsychologist ] + +# Glass Airlocks +- type: entity + parent: AirlockGlass + id: AirlockBoxerGlassLocked + suffix: Boxer, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsBoxer ] + +- type: entity + parent: AirlockGlass + id: AirlockClownGlassLocked + suffix: Clown, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsClown ] + +- type: entity + parent: AirlockGlass + id: AirlockMimeGlassLocked + suffix: Mime, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsMime ] + +- type: entity + parent: AirlockGlass + id: AirlockMusicianGlassLocked + suffix: Musician, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsMusician ] + +- type: entity + parent: AirlockGlass + id: AirlockReporterGlassLocked + suffix: Reporter, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsReporter ] + +- type: entity + parent: AirlockGlass + id: AirlockLibraryGlassLocked + suffix: Library, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsLibrary ] + +- type: entity + parent: AirlockGlass + id: AirlockZookeeperGlassLocked + suffix: Zookeeper, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsZookeeper ] + +- type: entity + parent: AirlockExternalGlass + id: AirlockExternalGlassSalvageLocked + suffix: External, Glass, Salvage, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsSalvage ] + +- type: entity + parent: AirlockMedicalGlass + id: AirlockPsychologistGlassLocked + suffix: Psychologist, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsPsychologist ] + +# Maintenance Hatches +- type: entity + parent: AirlockMaint + id: AirlockMaintBoxerLocked + suffix: Boxer, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsBoxer ] + +- type: entity + parent: AirlockMaint + id: AirlockMaintClownLocked + suffix: Clown, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsClown ] + +- type: entity + parent: AirlockMaint + id: AirlockMaintMimeLocked + suffix: Mime, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsMime ] + +- type: entity + parent: AirlockMaint + id: AirlockMaintMusicianLocked + suffix: Musician, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsMusician ] + +- type: entity + parent: AirlockMaint + id: AirlockMaintReporterLocked + suffix: Reporter, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsReporter ] + +- type: entity + parent: AirlockMaint + id: AirlockMaintLibraryLocked + suffix: Library, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsLibrary ] + +- type: entity + parent: AirlockMaint + id: AirlockMaintZookeeperLocked + suffix: Zookeeper, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsZookeeper ] + +- type: entity + parent: AirlockMaint + id: AirlockMaintPsychologistLocked + suffix: Psychologist, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsPsychologist ] + +- type: entity + parent: AirlockMaint + id: AirlockMaintSecurityLawyerLocked + suffix: Security/Lawyer, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsSecurityLawyer ] diff --git a/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Airlocks/airlocks.yml b/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Airlocks/airlocks.yml new file mode 100644 index 00000000000..93a8cec851a --- /dev/null +++ b/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Airlocks/airlocks.yml @@ -0,0 +1,22 @@ +- type: entity + parent: Airlock + id: AirlockJustice + suffix: Justice + components: + - type: Sprite + sprite: DeltaV/Structures/Doors/Airlocks/Standard/justice.rsi + - type: PaintableAirlock + department: Justice + +# Glass + +- type: entity + parent: AirlockGlass + id: AirlockJusticeGlass + suffix: Justice + components: + - type: Sprite + sprite: DeltaV/Structures/Doors/Airlocks/Glass/justice.rsi + - type: PaintableAirlock + department: Justice + diff --git a/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Windoors/windoor.yml b/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Windoors/windoor.yml new file mode 100644 index 00000000000..07938a3bf3c --- /dev/null +++ b/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Windoors/windoor.yml @@ -0,0 +1,59 @@ +- type: entity + parent: Windoor + id: WindoorMailLocked + suffix: Mail, Locked + components: + - type: AccessReader + access: [["Mail"]] + +- type: entity + parent: WindoorSecure + id: WindoorSecureMailLocked + suffix: Mail, Locked + components: + - type: AccessReader + access: [["Mail"]] + +- type: entity + parent: WindoorSecure + id: WindoorSecureParamedicLocked + suffix: Paramedic, Locked + components: + - type: AccessReader + access: [["Paramedic"]] + +- type: entity + parent: WindoorSecure + id: WindoorSecureChiefJusticeLocked + suffix: ChiefJustice, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsChiefJustice ] + +- type: entity + parent: WindoorSecure + id: WindoorSecureJusticeLocked + suffix: Justice, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsJustice ] + +- type: entity + parent: WindoorSecure + id: WindoorSecureProsecutorLocked + suffix: Prosecutor, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsProsecutor ] + +- type: entity + parent: WindoorSecure + id: WindoorSecureLawyerLocked + suffix: Lawyer, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsLawyer ] diff --git a/Resources/Prototypes/DeltaV/Entities/Structures/Machines/syndicate_monitor_server.yml b/Resources/Prototypes/DeltaV/Entities/Structures/Machines/syndicate_monitor_server.yml index 10933d716e2..02d3d69cc69 100644 --- a/Resources/Prototypes/DeltaV/Entities/Structures/Machines/syndicate_monitor_server.yml +++ b/Resources/Prototypes/DeltaV/Entities/Structures/Machines/syndicate_monitor_server.yml @@ -23,7 +23,6 @@ machine_parts: !type:Container - type: CrewMonitoringServer - type: SingletonDeviceNetServer - ServerType: CrewMonitoringServer - type: DeviceNetwork deviceNetId: Wireless transmitFrequencyId: CrewMonitor @@ -33,7 +32,6 @@ range: 10000 # Mega range for Listening Post - type: ApcPowerReceiver powerLoad: 200 - priority: Low - type: ExtensionCableReceiver - type: Destructible thresholds: diff --git a/Resources/Prototypes/DeltaV/Mail/mailDeliveries.yml b/Resources/Prototypes/DeltaV/Mail/mailDeliveries.yml new file mode 100644 index 00000000000..c0d6df9ec21 --- /dev/null +++ b/Resources/Prototypes/DeltaV/Mail/mailDeliveries.yml @@ -0,0 +1,147 @@ +- type: mailDeliveryPool + id: RandomDeltaVMailDeliveryPool #This entire table is messy as fuck but the weights add up to 35. TODO: ORGANIZE THIS SHIT AAAA + everyone: + MailNFAlcohol: 1 + MailNFBakedGoods: 1 + MailNFBible: 1 + MailNFBikeHorn: 0.5 + MailBooksAll: 1 + MailBlockGameDIY: 0.5 + MailNFBuildABuddy: 0.3 + MailDVBoxes: 0.3 + MailCrayon: 1 + MailNFCake: 1 + MailNFCheese: 1 + MailNFCookies: 1.1 + MailNFCritter: 1 + #Cigarettes - Adds up to 1 in weight + MailNFCigarettes: 0.5 + MailCigars: 0.2 + MailNFJoints: 0.2 + MailNFGoldCigars: 0.1 + #Cosplay - Adds up to 3.4 in weight + MailCosplayArc: 0.5 + MailDVCosplayFakeWizard: 0.5 + MailNFCosplayWizard: 0.5 + MailNFCosplayMaid: 0.5 + MailCosplayGeisha: 0.5 + MailCosplaySchoolgirl: 0.5 + MailNFCosplayNurse: 0.4 + MailNFDonkPockets: 0.5 + MailNFEMP: 0.3 + MailNFFigurineBulk: 1 + MailFishingCap: 0.5 + MailFlashlight: 1 + MailFlowers: 1 + MailNFKendoKit: 0.3 + MailNFKnife: 0.7 + MailNFMuffins: 1 + MailNoir: 0.5 + MailNFPAI: 1.2 + MailNFPlushie: 1 + MailPumpkinPie: 0.3 + MailNFPen: 0.7 + MailRestraints: 0.8 + MailSake: 0.4 + MailDVScarves: 0.15 + MailNFSnacks: 1 + #Soda - Adds up to 1 in weight + MailNFSodaPwrGame: 0.2 + MailNFSodaRedBool: 0.2 + MailNFSodaSpaceCola: 0.2 + MailNFSodaSpaceMountainWind: 0.2 + MailNFSodaSpaceUp: 0.2 + #End Soda + MailNFSmoke: 0.4 + MailSpaceVillainDIY: 0.5 + MailSignallerKit: 0.5 + MailSunglasses: 1 + MailNFSoaps: 0.5 + MailNFSoapsOmega: 0.5 + MailNFSword: 0.5 + MailNFTacticalMaid: 0.5 + MailNFThrongler: 0.05 + MailNFUnusualClothing: 0.5 + MailNFUnusualFood: 1 + MailNFUnusualProduce: 1 + MailNFVagueThreat: 0.5 + # Mainly for Glacier + MailWinterCoat: 1.5 + + # Department and job-specific mail can have slightly higher weights, + # since they'll be merged with the everyone pool. + departments: + Medical: + MailMedicalBasicSupplies: 2 + MailMedicalChemistrySupplement: 2 + MailMedicalEmergencyPens: 3 + MailMedicalMedicinePills: 2 + MailMedicalSheetPlasma: 1 + # MailMedicalSpaceacillin: 1 + MailMedicalStabilizers: 2 + MailNFMedkit: 2 + Engineering: + MailAMEGuide: 1 + MailEngineeringCables: 2 + MailEngineeringKudzuDeterrent: 2 + MailEngineeringSheetGlass: 2 + MailEngineeringWelderReplacement: 2 + MailNFCircuitboardIndustrial: 2 + MailNFCircuitboardService: 1 + MailNFPowerTool: 1 + Security: + MailSecurityDonuts: 3 + MailSecurityFlashlight: 2 + MailSecurityNonlethalsKit: 2 + MailSecurityDVSpaceLaw: 1 + MailSecurityNFMusket: 1 + Epistemics: +# MailBooks: 1 + MailEpistemologyBluespace: 1 + MailEpistemologyIngotGold: 2 + MailEpistemologyResearchDisk: 1 + MailEpistemologyTinfoilHat: 1 + MailSignallerKit: 1 + # All heads of staff are in Command and not their departments, technically. + # So any items from the departments above that should also be sent to the + # respective department heads should be duplicated below. + Command: + MailCommandPinpointerNuclear: 0.5 + MailStationRepNFNukeDisk: 0.3 + MailCommandNFPipebombIntern: 0.1 + + jobs: + Botanist: + MailBotanistChemicalBottles: 2 + MailBotanistMutagen: 1.5 + MailBotanistSeeds: 1 + ChiefEngineer: + MailEngineeringKudzuDeterrent: 2 + ChiefMedicalOfficer: + MailMedicalEmergencyPens: 2 + MailMedicalMedicinePills: 3 + MailMedicalSheetPlasma: 2 + Clown: + MailClownGildedBikeHorn: 0.5 + MailClownHonkSupplement: 3 + Detective: # Deltav - Detective is in charge of investigating crimes. + MailDetectiveForensicSupplement: 2 # Deltav - Detective is in charge of investigating crimes. + HeadOfPersonnel: + MailHoPBureaucracy: 2 + MailHoPSupplement: 3 + HeadOfSecurity: + MailSecurityNonlethalsKit: 2 + Lawyer: + MailSecurityDVSpaceLaw: 2 + Mime: + MailMimeArtsCrafts: 3 + MailMimeBlankBook: 2 + MailMimeBottleOfNothing: 1 + ResearchDirector: # DeltaV - Epistemics Department replacing Science but keeping their IDs + MailEpistemologyIngotGold: 2 + Musician: + MailMusicianInstrumentSmall: 1 + Passenger: + MailPassengerMoney: 3 + Warden: + MailWardenCrowdControl: 2 diff --git a/Resources/Prototypes/DeltaV/Objectives/paradox_anomaly.yml b/Resources/Prototypes/DeltaV/Objectives/paradox_anomaly.yml index dd0b74c4616..ec87795ab5b 100644 --- a/Resources/Prototypes/DeltaV/Objectives/paradox_anomaly.yml +++ b/Resources/Prototypes/DeltaV/Objectives/paradox_anomaly.yml @@ -1,9 +1,9 @@ - type: entity abstract: true - parent: BaseTerminatorObjective # mrp terminator real id: BaseParadoxAnomalyObjective components: - type: Objective + difficulty: 1 issuer: self # not using base kill/keep alive objectives since these intentionally conflict with eachother @@ -19,7 +19,6 @@ state: icon - type: TargetObjective title: objective-paradox-anomaly-kill-title - - type: TerminatorTargetOverride - type: KillPersonCondition requireDead: true @@ -35,7 +34,6 @@ state: folder-white - type: TargetObjective title: objective-paradox-anomaly-friend-title - - type: TerminatorTargetOverride - type: KeepAliveCondition - type: entity diff --git a/Resources/Prototypes/DeltaV/Objectives/stealTargetGroups.yml b/Resources/Prototypes/DeltaV/Objectives/stealTargetGroups.yml index b3113308735..53022ce2369 100644 --- a/Resources/Prototypes/DeltaV/Objectives/stealTargetGroups.yml +++ b/Resources/Prototypes/DeltaV/Objectives/stealTargetGroups.yml @@ -12,13 +12,6 @@ sprite: DeltaV/Objects/Misc/bureaucracy.rsi state: folder-hop-ian -- type: stealTargetGroup - id: WeaponEnergyGunMultiphase - name: x-01 multiphase energy gun - sprite: - sprite: DeltaV/Objects/Weapons/Guns/Battery/multiphase_energygun.rsi - state: base - - type: stealTargetGroup id: RubberStampNotary name: notary stamp diff --git a/Resources/Prototypes/DeltaV/Objectives/traitor.yml b/Resources/Prototypes/DeltaV/Objectives/traitor.yml index d27ec220fa4..c5c5318b5d2 100644 --- a/Resources/Prototypes/DeltaV/Objectives/traitor.yml +++ b/Resources/Prototypes/DeltaV/Objectives/traitor.yml @@ -20,19 +20,6 @@ stealGroup: BookIanDossier # owner: job-name-hop -- type: entity # Head of Security steal objective. - noSpawn: true - parent: BaseTraitorStealObjective - id: HoSGunStealObjective - components: - - type: Objective - difficulty: 3 # HoS will mostly be using the gun to stop you from stealing it - - type: NotJobRequirement - job: HeadOfSecurity - - type: StealCondition - stealGroup: WeaponEnergyGunMultiphase - owner: job-name-hos - - type: entity # Clerk steal objective. noSpawn: true parent: BaseTraitorStealObjective @@ -43,5 +30,3 @@ - type: StealCondition stealGroup: RubberStampNotary owner: job-name-clerk - - diff --git a/Resources/Prototypes/DeltaV/Recipes/Construction/clothing.yml b/Resources/Prototypes/DeltaV/Recipes/Construction/clothing.yml index 386a0211c03..601bcd540b9 100644 --- a/Resources/Prototypes/DeltaV/Recipes/Construction/clothing.yml +++ b/Resources/Prototypes/DeltaV/Recipes/Construction/clothing.yml @@ -1,9 +1,9 @@ - type: construction name: prescription medhud - id: ClothingEyesPrescriptionMedHud + id: PrescriptionMedHud graph: PrescriptionMedHud startNode: start - targetNode: prescmedhud + targetNode: prescmedhud category: construction-category-clothing description: Prescription medhud, merged glasses and medhud together by sheer luck and cables with glue. icon: { sprite: DeltaV/Clothing/Eyes/Hud/prescmedhud.rsi, state: icon } @@ -11,10 +11,10 @@ - type: construction name: prescription sechud - id: ClothingEyesPrescriptionHudSecurity + id: PrescriptionHudSecurity graph: PrescriptionSecHud startNode: start - targetNode: prescsechud + targetNode: prescsechud category: construction-category-clothing description: Prescription sechud, merged glasses and sechud together by sheer luck and cables with glue. icon: { sprite: DeltaV/Clothing/Eyes/Hud/prescsechud.rsi, state: icon } diff --git a/Resources/Prototypes/DeltaV/Roles/Jobs/Fun/misc_startinggear.yml b/Resources/Prototypes/DeltaV/Roles/Jobs/Fun/misc_startinggear.yml index 7d7943ab697..db5e717a011 100644 --- a/Resources/Prototypes/DeltaV/Roles/Jobs/Fun/misc_startinggear.yml +++ b/Resources/Prototypes/DeltaV/Roles/Jobs/Fun/misc_startinggear.yml @@ -62,6 +62,7 @@ gloves: ClothingHandsGlovesCombat shoes: ClothingShoesSlippers id: SyndiListeningPostPDA + pocket1: BaseUplinkRadio20TC innerClothingSkirt: ClothingUniformJumpsuitPyjamaSyndicatePink # Mobsters diff --git a/Resources/Prototypes/DeltaV/Roles/Jobs/Security/brigmedic.yml b/Resources/Prototypes/DeltaV/Roles/Jobs/Security/brigmedic.yml index ac5d3b81e44..51eeb5e142f 100644 --- a/Resources/Prototypes/DeltaV/Roles/Jobs/Security/brigmedic.yml +++ b/Resources/Prototypes/DeltaV/Roles/Jobs/Security/brigmedic.yml @@ -3,7 +3,6 @@ name: job-name-brigmedic description: job-description-brigmedic playTimeTracker: JobBrigmedic - setPreference: false requirements: - !type:DepartmentTimeRequirement department: Medical @@ -36,7 +35,7 @@ equipment: jumpsuit: ClothingUniformJumpsuitBrigmedic outerClothing: ClothingOuterArmorPlateCarrier - back: ClothingBackpackBrigmedicFilled + back: ClothingBackpackBrigmedicFilled shoes: ClothingShoesBootsCombatFilled gloves: ClothingHandsGlovesNitrile eyes: ClothingEyesHudMedical @@ -44,7 +43,6 @@ id: CorpsmanPDA ears: ClothingHeadsetBrigmedic belt: ClothingBeltCorpsmanWebbingFilled - pocket1: WeaponPistolMk58Nonlethal innerClothingSkirt: ClothingUniformJumpskirtBrigmedic satchel: ClothingBackpackSatchelBrigmedicFilled duffelbag: ClothingBackpackDuffelBrigmedicFilled diff --git a/Resources/Prototypes/DeltaV/Traits/altvision.yml b/Resources/Prototypes/DeltaV/Traits/altvision.yml index d5166b00b65..31a67ad350c 100644 --- a/Resources/Prototypes/DeltaV/Traits/altvision.yml +++ b/Resources/Prototypes/DeltaV/Traits/altvision.yml @@ -1,35 +1,37 @@ -# - type: trait - # id: UltraVision - # category: Visual - # points: -1 - # requirements: - # - !type:CharacterSpeciesRequirement - # inverted: true - # species: Vulpkanin - # - !type:CharacterSpeciesRequirement - # inverted: true - # species: Harpy - # - !type:CharacterTraitRequirement - # inverted: true - # traits: - # - DogVision - # components: - # - type: UltraVision +- type: trait + id: UltraVision + category: Visual + requirements: + - !type:CharacterSpeciesRequirement + inverted: true + species: + - Vulpkanin + - Harpy + - Shadowkin + - !type:CharacterTraitRequirement + inverted: true + traits: + - DogVision + functions: + - !type:TraitAddComponent + components: + - type: UltraVision -# - type: trait - # id: DogVision - # category: Visual - # points: -1 - # requirements: - # - !type:CharacterSpeciesRequirement - # inverted: true - # species: Vulpkanin - # - !type:CharacterSpeciesRequirement - # inverted: true - # species: Harpy - # - !type:CharacterTraitRequirement - # inverted: true - # traits: - # - UltraVision - # components: - # - type: DogVision +- type: trait + id: DogVision + category: Visual + requirements: + - !type:CharacterSpeciesRequirement + inverted: true + species: + - Vulpkanin + - Harpy + - Shadowkin + - !type:CharacterTraitRequirement + inverted: true + traits: + - UltraVision + functions: + - !type:TraitAddComponent + components: + - type: DogVision diff --git a/Resources/Prototypes/DeltaV/Traits/neutral.yml b/Resources/Prototypes/DeltaV/Traits/neutral.yml index 6168d7045a9..f8c4119f046 100644 --- a/Resources/Prototypes/DeltaV/Traits/neutral.yml +++ b/Resources/Prototypes/DeltaV/Traits/neutral.yml @@ -1,6 +1,11 @@ - type: trait id: ScottishAccent - category: Speech + category: TraitsSpeechAccents points: 0 - components: - - type: ScottishAccent + requirements: + - !type:CharacterItemGroupRequirement + group: TraitsAccents + functions: + - !type:TraitAddComponent + components: + - type: ScottishAccent diff --git a/Resources/Prototypes/DeltaV/Voice/speech_emote_sounds.yml b/Resources/Prototypes/DeltaV/Voice/speech_emote_sounds.yml index 119134dcf18..ad91d9c2d2e 100644 --- a/Resources/Prototypes/DeltaV/Voice/speech_emote_sounds.yml +++ b/Resources/Prototypes/DeltaV/Voice/speech_emote_sounds.yml @@ -60,6 +60,10 @@ collection: VulpkaninHowls Weh: collection: Weh + Mars: + collection: Mars + Wurble: + collection: Wurble - type: emoteSounds id: MaleVulpkanin diff --git a/Resources/Prototypes/DeltaV/Voice/speech_emotes.yml b/Resources/Prototypes/DeltaV/Voice/speech_emotes.yml index 29f75d0d509..7f3eb0313ac 100644 --- a/Resources/Prototypes/DeltaV/Voice/speech_emotes.yml +++ b/Resources/Prototypes/DeltaV/Voice/speech_emotes.yml @@ -1,5 +1,6 @@ - type: emote id: HarpyRing + name: chat-emote-name-harpyring category: Vocal chatMessages: [ rings ] chatTriggers: @@ -7,6 +8,7 @@ - type: emote id: HarpyPew + name: chat-emote-name-harpypew category: Vocal chatMessages: [ pews ] chatTriggers: @@ -15,6 +17,7 @@ - type: emote id: HarpyBang + name: chat-emote-name-harpybang category: Vocal chatMessages: [ bangs ] chatTriggers: @@ -22,6 +25,7 @@ - type: emote id: HarpyRev + name: chat-emote-name-harpyrev category: Vocal chatMessages: [ revs ] chatTriggers: @@ -29,6 +33,7 @@ - type: emote id: HarpyCaw + name: chat-emote-name-harpycaw category: Vocal chatMessages: [ caws ] chatTriggers: @@ -37,6 +42,7 @@ #Vulpkanin - type: emote id: Bark + name: chat-emote-name-vulpbark category: Vocal chatMessages: [ barks ] chatTriggers: @@ -44,6 +50,7 @@ - type: emote id: Snarl + name: chat-emote-name-vulpsnarl category: Vocal chatMessages: [ snarls ] chatTriggers: @@ -51,6 +58,7 @@ - type: emote id: Whine + name: chat-emote-name-vulpwhine category: Vocal chatMessages: [ whines ] chatTriggers: @@ -58,6 +66,7 @@ - type: emote id: Howl + name: chat-emote-name-vulphowl category: Vocal chatMessages: [ howls ] chatTriggers: diff --git a/Resources/Prototypes/Device/devicenet_frequencies.yml b/Resources/Prototypes/Device/devicenet_frequencies.yml index db48d117e0b..ecdbb3bb4c2 100644 --- a/Resources/Prototypes/Device/devicenet_frequencies.yml +++ b/Resources/Prototypes/Device/devicenet_frequencies.yml @@ -75,6 +75,17 @@ name: device-frequency-prototype-name-crew-monitor frequency: 1261 +# Cyborgs broadcast to consoles on this frequency +- type: deviceFrequency + id: RoboticsConsole + name: device-frequency-prototype-name-robotics-console + frequency: 1291 + +# Console sends commands to cyborgs on this frequency +- type: deviceFrequency + id: CyborgControl + name: device-frequency-prototype-name-cyborg-control + frequency: 1292 # This frequency will likely have a LARGE number of listening entities. Please don't broadcast on this frequency. - type: deviceFrequency diff --git a/Resources/Prototypes/DeviceLinking/source_ports.yml b/Resources/Prototypes/DeviceLinking/source_ports.yml index 18b9b831e6b..1988f29e45c 100644 --- a/Resources/Prototypes/DeviceLinking/source_ports.yml +++ b/Resources/Prototypes/DeviceLinking/source_ports.yml @@ -45,6 +45,11 @@ description: signal-port-description-doorstatus defaultLinks: [ DoorBolt ] +- type: sourcePort + id: DockStatus + name: signal-port-name-dockstatus + description: signal-port-description-dockstatus + - type: sourcePort id: OrderSender name: signal-port-name-order-sender diff --git a/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml b/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml index 6cf94fd1ed3..4af443113a7 100644 --- a/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml +++ b/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml @@ -23,8 +23,8 @@ ents: [] - type: UserInterface interfaces: - - key: enum.StorageUiKey.Key - type: StorageBoundUserInterface + enum.StorageUiKey.Key: + type: StorageBoundUserInterface # to prevent bag open/honk spam - type: UseDelay delay: 0.5 diff --git a/Resources/Prototypes/Entities/Clothing/Back/specific.yml b/Resources/Prototypes/Entities/Clothing/Back/specific.yml index 8af00039b5d..e2932537e90 100644 --- a/Resources/Prototypes/Entities/Clothing/Back/specific.yml +++ b/Resources/Prototypes/Entities/Clothing/Back/specific.yml @@ -14,9 +14,9 @@ default: ClothingBackpack - type: UserInterface interfaces: - - key: enum.StorageUiKey.Key + enum.StorageUiKey.Key: type: StorageBoundUserInterface - - key: enum.ChameleonUiKey.Key + enum.ChameleonUiKey.Key: type: ChameleonBoundUserInterface - type: entity @@ -51,8 +51,8 @@ canChangeTransferAmount: true - type: UserInterface interfaces: - - key: enum.TransferAmountUiKey.Key - type: TransferAmountBoundUserInterface + enum.TransferAmountUiKey.Key: + type: TransferAmountBoundUserInterface - type: DrawableSolution solution: tank - type: RefillableSolution @@ -61,3 +61,25 @@ solution: tank - type: ExaminableSolution solution: tank + +- type: entity + parent: Clothing + id: ClothingBackpackEtherealTeleporter + name: ethereal teleporter + description: Originally created while several research facilities were experimenting on Shadowkin, this backpack allows the wearer to jump the gap between the "normal" dimension and The Dark. + components: + - type: Tag + tags: + - WhitelistChameleon + - type: Sprite + sprite: Clothing/Back/etherealteleporter.rsi + state: icon + - type: Item + size: Ginormous + - type: Clothing + slots: BACK + sprite: Clothing/Back/etherealteleporter.rsi + # TODO: Uncomment this when ClothingGrantPsionicPower is fixed and back working. + # - type: ClothingGrantPsionicPower + # power: DarkSwapPower + # - type: Psionic diff --git a/Resources/Prototypes/Entities/Clothing/Belt/base_clothingbelt.yml b/Resources/Prototypes/Entities/Clothing/Belt/base_clothingbelt.yml index 62889d0aba2..1d26d71660c 100644 --- a/Resources/Prototypes/Entities/Clothing/Belt/base_clothingbelt.yml +++ b/Resources/Prototypes/Entities/Clothing/Belt/base_clothingbelt.yml @@ -45,8 +45,8 @@ ents: [] - type: UserInterface interfaces: - - key: enum.StorageUiKey.Key - type: StorageBoundUserInterface + enum.StorageUiKey.Key: + type: StorageBoundUserInterface - type: entity abstract: true diff --git a/Resources/Prototypes/Entities/Clothing/Belt/belts.yml b/Resources/Prototypes/Entities/Clothing/Belt/belts.yml index 359165cfc50..80d5cf5a15b 100644 --- a/Resources/Prototypes/Entities/Clothing/Belt/belts.yml +++ b/Resources/Prototypes/Entities/Clothing/Belt/belts.yml @@ -31,6 +31,7 @@ - AppraisalTool - JawsOfLife - GPS + - WeldingMask components: - SprayPainter - NetworkConfigurator @@ -473,12 +474,19 @@ - MagazinePistol - MagazineMagnum - CombatKnife + - Truncheon components: - Stunbaton - FlashOnTrigger - SmokeOnTrigger - Flash - Handcuff + - BallisticAmmoProvider + - CartridgeAmmo + - DoorRemote + - Whistle + - HolosignProjector + - BalloonPopper - type: ItemMapper mapLayers: flashbang: @@ -600,7 +608,7 @@ - CartridgeAmmo - type: entity - parent: ClothingBeltStorageBase + parent: ClothingBeltSecurity id: ClothingBeltSecurityWebbing name: security webbing description: Unique and versatile chest rig, can hold security gear. @@ -623,11 +631,10 @@ - id: Stunbaton - id: Handcuffs - id: Handcuffs - - type: entity parent: ClothingBeltStorageBase id: ClothingBeltMercWebbing - name: mercenarie webbing + name: mercenary webbing description: Ideal for storing everything from ammo to weapons and combat essentials. components: - type: Sprite diff --git a/Resources/Prototypes/Entities/Clothing/Belt/quiver.yml b/Resources/Prototypes/Entities/Clothing/Belt/quiver.yml index 6cbf5a69cae..bb4e395c4fe 100644 --- a/Resources/Prototypes/Entities/Clothing/Belt/quiver.yml +++ b/Resources/Prototypes/Entities/Clothing/Belt/quiver.yml @@ -18,7 +18,11 @@ whitelist: tags: - Arrow + - Plunger - type: Appearance - type: StorageContainerVisuals maxFillLevels: 3 fillBaseName: fill- + - type: Construction + graph: Quiver + node: Quiver diff --git a/Resources/Prototypes/Entities/Clothing/Ears/specific.yml b/Resources/Prototypes/Entities/Clothing/Ears/specific.yml index 093f5e645b6..83612ac4b2e 100644 --- a/Resources/Prototypes/Entities/Clothing/Ears/specific.yml +++ b/Resources/Prototypes/Entities/Clothing/Ears/specific.yml @@ -16,5 +16,5 @@ default: ClothingHeadsetGrey - type: UserInterface interfaces: - - key: enum.ChameleonUiKey.Key + enum.ChameleonUiKey.Key: type: ChameleonBoundUserInterface diff --git a/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml b/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml index 1b480251803..f50b0dbca54 100644 --- a/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml +++ b/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml @@ -82,7 +82,6 @@ tags: - HamsterWearable - WhitelistChameleon - - GlassesNearsight # SimpleStation14 NearsightedTrait - type: entity parent: ClothingEyesBase @@ -156,7 +155,7 @@ protectionTime: 5 - type: entity - parent: ClothingEyesBase + parent: [ClothingEyesBase, ShowSecurityIcons] id: ClothingEyesGlassesSecurity name: security glasses description: Upgraded sunglasses that provide flash immunity and a security HUD. @@ -173,10 +172,9 @@ - HamsterWearable - WhitelistChameleon - SecDogWearable # DeltaV - let Laika wear secglasses - # - type: GuideHelp - # guides: - # - Security - - type: ShowSecurityIcons + - type: GuideHelp + guides: + - Security - type: IdentityBlocker coverage: EYES @@ -267,3 +265,15 @@ sprite: Clothing/Eyes/Glasses/meson.rsi - type: Clothing sprite: Clothing/Eyes/Glasses/meson.rsi + +- type: entity + parent: ClothingEyesBase + id: ClothingEyesGlassesEthereal + name: ethereal goggles + description: An unusual pair of goggles developed during a time of inhumane experimentation involving Shadowkin. They are designed to allow the wearer to peer into The Dark. + components: + - type: Sprite + sprite: Clothing/Eyes/Glasses/etherealgoogles.rsi + - type: Clothing + sprite: Clothing/Eyes/Glasses/etherealgoogles.rsi + - type: ShowEthereal \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Clothing/Eyes/hud.yml b/Resources/Prototypes/Entities/Clothing/Eyes/hud.yml index fabb7bc6429..835c405e192 100644 --- a/Resources/Prototypes/Entities/Clothing/Eyes/hud.yml +++ b/Resources/Prototypes/Entities/Clothing/Eyes/hud.yml @@ -1,3 +1,13 @@ +- type: entity + id: ShowSecurityIcons + abstract: true + noSpawn: true + components: + - type: ShowJobIcons + - type: ShowMindShieldIcons + - type: ShowCriminalRecordIcons + + - type: entity parent: ClothingEyesBase id: ClothingEyesHudDiagnostic @@ -17,7 +27,7 @@ parent: ClothingEyesBase id: ClothingEyesHudMedical name: medical hud - description: A heads-up display that scans the humanoids in view and provides accurate data about their health status. + description: A heads-up display that scans the humanoids in view and provides accurate data about their health status. components: - type: Sprite sprite: Clothing/Eyes/Hud/med.rsi @@ -34,7 +44,7 @@ - HudMedical - type: entity - parent: ClothingEyesBase + parent: [ClothingEyesBase, ShowSecurityIcons] id: ClothingEyesHudSecurity name: security hud description: A heads-up display that scans the humanoids in view and provides accurate data about their ID status and security records. @@ -43,7 +53,6 @@ sprite: Clothing/Eyes/Hud/sec.rsi - type: Clothing sprite: Clothing/Eyes/Hud/sec.rsi - - type: ShowSecurityIcons - type: Tag tags: - HudSecurity @@ -138,7 +147,7 @@ - type: ShowThirstIcons - type: entity - parent: ClothingEyesBase + parent: [ClothingEyesBase, ShowSecurityIcons] id: ClothingEyesHudMedSec name: medsec hud description: An eye display that looks like a mixture of medical and security huds. @@ -150,13 +159,15 @@ - type: Construction graph: HudMedSec node: medsecHud - - type: ShowSecurityIcons - type: ShowHealthBars damageContainers: - Biological + - type: ShowHealthIcons + damageContainers: + - Biological - type: entity - parent: ClothingEyesBase + parent: [ClothingEyesBase, ShowSecurityIcons] id: ClothingEyesHudMultiversal name: multiversal hud description: Filler @@ -165,7 +176,6 @@ sprite: Clothing/Eyes/Hud/medsecengi.rsi - type: Clothing sprite: Clothing/Eyes/Hud/medsecengi.rsi - - type: ShowSecurityIcons - type: ShowHealthBars damageContainers: - Biological @@ -176,7 +186,7 @@ - type: ShowSyndicateIcons - type: entity - parent: ClothingEyesBase + parent: [ClothingEyesBase, ShowSecurityIcons] id: ClothingEyesHudOmni name: omni hud description: Filler @@ -185,7 +195,6 @@ sprite: Clothing/Eyes/Hud/omni.rsi - type: Clothing sprite: Clothing/Eyes/Hud/omni.rsi - - type: ShowSecurityIcons - type: ShowHealthBars damageContainers: - Biological @@ -198,7 +207,7 @@ - type: ShowSyndicateIcons - type: entity - parent: ClothingEyesBase + parent: [ClothingEyesBase, ShowSecurityIcons] id: ClothingEyesHudSyndicate name: syndicate visor description: The syndicate's professional head-up display, designed for better detection of humanoids and their subsequent elimination. @@ -208,14 +217,26 @@ - type: Clothing sprite: Clothing/Eyes/Hud/synd.rsi - type: ShowSyndicateIcons - - type: ShowSecurityIcons - type: entity - parent: ClothingEyesGlassesSunglasses + parent: [ClothingEyesBase, ShowSecurityIcons] + id: ClothingEyesHudSyndicateAgent + name: syndicate agent visor + description: The Syndicate Agent's professional heads-up display, designed for quick diagnosis of their team's status. + components: + - type: Sprite + sprite: Clothing/Eyes/Hud/syndagent.rsi + - type: Clothing + sprite: Clothing/Eyes/Hud/syndagent.rsi + - type: ShowSyndicateIcons + - type: ShowHealthBars + damageContainers: + - Biological + +- type: entity + parent: [ClothingEyesGlassesSunglasses, ShowSecurityIcons] id: ClothingEyesGlassesHiddenSecurity suffix: Syndicate - components: - - type: ShowSecurityIcons - type: entity parent: ClothingEyesHudMedical diff --git a/Resources/Prototypes/Entities/Clothing/Eyes/specific.yml b/Resources/Prototypes/Entities/Clothing/Eyes/specific.yml index c04f3482870..fa87ed398ed 100644 --- a/Resources/Prototypes/Entities/Clothing/Eyes/specific.yml +++ b/Resources/Prototypes/Entities/Clothing/Eyes/specific.yml @@ -16,6 +16,6 @@ default: ClothingEyesGlassesSunglasses - type: UserInterface interfaces: - - key: enum.ChameleonUiKey.Key + enum.ChameleonUiKey.Key: type: ChameleonBoundUserInterface diff --git a/Resources/Prototypes/Entities/Clothing/Hands/gloves.yml b/Resources/Prototypes/Entities/Clothing/Hands/gloves.yml index 40b75e196f2..18345850ad9 100644 --- a/Resources/Prototypes/Entities/Clothing/Hands/gloves.yml +++ b/Resources/Prototypes/Entities/Clothing/Hands/gloves.yml @@ -20,6 +20,7 @@ soundHit: collection: BoxingHit animation: WeaponArcFist + mustBeEquippedToUse: true - type: Fiber fiberMaterial: fibers-leather fiberColor: fibers-red @@ -90,6 +91,7 @@ types: Blunt: 8 bluntStaminaDamageFactor: 0.0 # so blunt doesn't deal stamina damage at all + mustBeEquippedToUse: true - type: entity parent: ClothingHandsBase @@ -239,6 +241,12 @@ name: combat gloves description: These tactical gloves are fireproof and shock resistant. components: + - type: Sprite + sprite: Clothing/Hands/Gloves/combat.rsi + - type: Clothing + sprite: Clothing/Hands/Gloves/combat.rsi + - type: GloveHeatResistance + heatResistance: 1400 - type: Insulated - type: Fiber fiberMaterial: fibers-insulative @@ -363,6 +371,7 @@ soundHit: collection: Punch animation: WeaponArcFist + mustBeEquippedToUse: true - type: Fiber fiberMaterial: fibers-leather fiberColor: fibers-blue @@ -370,12 +379,11 @@ - type: MeleeSpeech - type: ActivatableUI key: enum.MeleeSpeechUiKey.Key - closeOnHandDeselect: false - rightClickOnly: true + verbOnly: true - type: Actions - type: UserInterface interfaces: - - key: enum.MeleeSpeechUiKey.Key + enum.MeleeSpeechUiKey.Key: type: MeleeSpeechBoundUserInterface - type: StaticPrice price: 0 diff --git a/Resources/Prototypes/Entities/Clothing/Hands/specific.yml b/Resources/Prototypes/Entities/Clothing/Hands/specific.yml index db34297b42a..b35c3b8b509 100644 --- a/Resources/Prototypes/Entities/Clothing/Hands/specific.yml +++ b/Resources/Prototypes/Entities/Clothing/Hands/specific.yml @@ -19,9 +19,9 @@ - type: FingerprintMask - type: UserInterface interfaces: - - key: enum.ChameleonUiKey.Key + enum.ChameleonUiKey.Key: type: ChameleonBoundUserInterface - + - type: entity parent: ClothingHandsChameleon id: ClothingHandsChameleonThief diff --git a/Resources/Prototypes/Entities/Clothing/Head/base_clothinghead.yml b/Resources/Prototypes/Entities/Clothing/Head/base_clothinghead.yml index d13b284ff29..e19217686f4 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/base_clothinghead.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/base_clothinghead.yml @@ -133,11 +133,13 @@ unequipSound: /Audio/Mecha/mechmove03.ogg - type: Tag tags: - - HidesHair - WhitelistChameleon - HelmetEVA - - HidesNose - type: IdentityBlocker + - type: HideLayerClothing + slots: + - Hair + - Snout - type: entity abstract: true @@ -161,6 +163,8 @@ lowPressureMultiplier: 1000 - type: TemperatureProtection coefficient: 0.1 + - type: FireProtection + reduction: 0.2 - type: Armor modifiers: coefficients: @@ -173,10 +177,12 @@ - type: IngestionBlocker - type: Tag tags: - - HidesHair - WhitelistChameleon - - HidesNose - type: IdentityBlocker + - type: HideLayerClothing + slots: + - Hair + - Snout - type: entity abstract: true @@ -248,6 +254,6 @@ - type: TemperatureProtection coefficient: 0.7 - type: GroupExamine - - type: Tag - tags: - - HidesHair + - type: HideLayerClothing + slots: + - Hair diff --git a/Resources/Prototypes/Entities/Clothing/Head/hardsuit-helmets.yml b/Resources/Prototypes/Entities/Clothing/Head/hardsuit-helmets.yml index 6985fe7ec39..b563fbc0071 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/hardsuit-helmets.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/hardsuit-helmets.yml @@ -17,9 +17,9 @@ sprite: Clothing/Head/Hardsuits/basic.rsi - type: Clothing sprite: Clothing/Head/Hardsuits/basic.rsi - - type: Tag - tags: - - HidesNose + - type: HideLayerClothing + slots: + - Snout #Atmospherics Hardsuit - type: entity @@ -436,6 +436,8 @@ lowPressureMultiplier: 1000 - type: TemperatureProtection coefficient: 0.005 + - type: FireProtection + reduction: 0.2 - type: Armor modifiers: coefficients: diff --git a/Resources/Prototypes/Entities/Clothing/Head/hats.yml b/Resources/Prototypes/Entities/Clothing/Head/hats.yml index 30907f70b5b..5b5d281362d 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/hats.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/hats.yml @@ -247,7 +247,7 @@ - 0,0,0,0 - type: UserInterface interfaces: - - key: enum.StorageUiKey.Key + enum.StorageUiKey.Key: type: StorageBoundUserInterface - type: ContainerContainer containers: @@ -258,6 +258,36 @@ - HamsterWearable - WhitelistChameleon +- type: entity + parent: ClothingHeadHatChef + id: ClothingHeadHatChefNt + name: nanotrasen chef's hat + components: + - type: Sprite + sprite: Clothing/Head/Hats/chefhat_nt.rsi + - type: Clothing + sprite: Clothing/Head/Hats/chefhat_nt.rsi + +- type: entity + parent: ClothingHeadHatChef + id: ClothingHeadHatChefIdris + name: idris incorporated chef's hat + components: + - type: Sprite + sprite: Clothing/Head/Hats/chefhat_idris.rsi + - type: Clothing + sprite: Clothing/Head/Hats/chefhat_idris.rsi + +- type: entity + parent: ClothingHeadHatChef + id: ClothingHeadHatChefOrion + name: orion express' chef hat + components: + - type: Sprite + sprite: Clothing/Head/Hats/chefhat_orion.rsi + - type: Clothing + sprite: Clothing/Head/Hats/chefhat_orion.rsi + - type: entity parent: ClothingHeadBase id: ClothingHeadHatFedoraBrown @@ -384,12 +414,15 @@ sprite: Clothing/Head/Hats/plaguedoctor.rsi - type: Tag tags: - - HidesHair - WhitelistChameleon - ClothMade + - type: HideLayerClothing + slots: + - Hair + - Snout - type: entity - parent: ClothingHeadBase + parent: ClothingHeadHatWizardBase id: ClothingHeadHatRedwizard name: red wizard hat description: Strange-looking red hat-wear that most certainly belongs to a real magic user. @@ -509,7 +542,7 @@ - type: entity - parent: ClothingHeadBase + parent: ClothingHeadHatWizardBase id: ClothingHeadHatVioletwizard name: violet wizard hat description: "Strange-looking violet hat-wear that most certainly belongs to a real magic user." @@ -543,15 +576,18 @@ name: witch hat description: A witch hat. components: + - type: WizardClothes #Yes this will count - type: Sprite sprite: Clothing/Head/Hats/witch.rsi - type: Clothing sprite: Clothing/Head/Hats/witch.rsi - type: Tag tags: - - HidesHair - WhitelistChameleon - ClothMade + - type: HideLayerClothing + slots: + - Hair - type: entity parent: ClothingHeadBase @@ -565,7 +601,14 @@ sprite: Clothing/Head/Hats/wizard_fake.rsi - type: entity + abstract: true parent: ClothingHeadBase + id: ClothingHeadHatWizardBase + components: + - type: WizardClothes + +- type: entity + parent: ClothingHeadHatWizardBase id: ClothingHeadHatWizard name: wizard hat description: Strange-looking blue hat-wear that most certainly belongs to a powerful magic user. @@ -846,8 +889,8 @@ - 0,0,0,0 - type: UserInterface interfaces: - - key: enum.StorageUiKey.Key - type: StorageBoundUserInterface + enum.StorageUiKey.Key: + type: StorageBoundUserInterface - type: ContainerContainer containers: storagebase: !type:Container @@ -1098,3 +1141,33 @@ sprite: Clothing/Head/Hats/beret_medic.rsi - type: Clothing sprite: Clothing/Head/Hats/beret_medic.rsi + +- type: entity + parent: ClothingHeadBase + id: ClothingHeadHatFlatcapBartenderNanotrasen + name: bartender's nanotrasen flatcap + components: + - type: Sprite + sprite: Clothing/Head/Hats/flatcap_nt.rsi + - type: Clothing + sprite: Clothing/Head/Hats/flatcap_nt.rsi + +- type: entity + parent: ClothingHeadBase + id: ClothingHeadHatFlatcapBartenderIdris + name: bartender's idris incorporated flatcap + components: + - type: Sprite + sprite: Clothing/Head/Hats/flatcap_idris.rsi + - type: Clothing + sprite: Clothing/Head/Hats/flatcap_idris.rsi + +- type: entity + parent: ClothingHeadBase + id: ClothingHeadHatFlatcapBartenderOrion + name: bartender's orion express flatcap + components: + - type: Sprite + sprite: Clothing/Head/Hats/flatcap_orion.rsi + - type: Clothing + sprite: Clothing/Head/Hats/flatcap_orion.rsi \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Clothing/Head/helmets.yml b/Resources/Prototypes/Entities/Clothing/Head/helmets.yml index b79b72ffb63..009c2ef784e 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/helmets.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/helmets.yml @@ -110,6 +110,10 @@ Blunt: 0.95 Slash: 0.95 Piercing: 0.95 + - type: HideLayerClothing + slots: + - Hair + - Snout #Janitorial Bombsuit Helmet - type: entity @@ -157,10 +161,13 @@ sprite: Clothing/Head/Helmets/spaceninja.rsi - type: Tag tags: - - HidesHair - WhitelistChameleon - type: IngestionBlocker - type: IdentityBlocker + - type: HideLayerClothing + slots: + - Hair + - Snout #Templar Helmet - type: entity @@ -217,11 +224,16 @@ - type: IngestionBlocker - type: TemperatureProtection coefficient: 0.005 + - type: FireProtection + reduction: 0.15 # not fully sealed so less protection - type: IdentityBlocker - type: Tag tags: - - HidesHair - WhitelistChameleon + - type: HideLayerClothing + slots: + - Hair + - Snout #Atmos Fire Helmet - type: entity @@ -238,14 +250,19 @@ - type: IngestionBlocker - type: TemperatureProtection coefficient: 0.005 + - type: FireProtection + reduction: 0.2 - type: PressureProtection highPressureMultiplier: 0.25 lowPressureMultiplier: 1000 - type: IdentityBlocker - type: Tag tags: - - HidesHair - WhitelistChameleon + - type: HideLayerClothing + slots: + - Hair + - Snout #Chitinous Helmet - type: entity diff --git a/Resources/Prototypes/Entities/Clothing/Head/hoods.yml b/Resources/Prototypes/Entities/Clothing/Head/hoods.yml index 9ab528581af..0bca209d51e 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/hoods.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/hoods.yml @@ -13,8 +13,11 @@ - type: IngestionBlocker - type: Tag tags: - - HidesHair - WhitelistChameleon + - type: HideLayerClothing + slots: + - Hair + - Snout - type: entity parent: ClothingHeadHatHoodBioGeneral @@ -94,9 +97,11 @@ sprite: Clothing/Head/Hoods/chaplain.rsi - type: Tag tags: - - HidesHair - HamsterWearable - WhitelistChameleon + - type: HideLayerClothing + slots: + - Hair - type: entity parent: ClothingHeadBase @@ -110,8 +115,10 @@ sprite: Clothing/Head/Hoods/cult.rsi - type: Tag tags: - - HidesHair - WhitelistChameleon + - type: HideLayerClothing + slots: + - Hair - type: entity parent: ClothingHeadBase @@ -125,9 +132,11 @@ sprite: Clothing/Head/Hoods/nun.rsi - type: Tag tags: - - HidesHair - HamsterWearable - WhitelistChameleon + - type: HideLayerClothing + slots: + - Hair - type: entity parent: ClothingHeadBase @@ -145,9 +154,10 @@ Heat: 0.95 Radiation: 0.65 - type: BreathMask - - type: Tag - tags: - - HidesHair + - type: HideLayerClothing + slots: + - Hair + - Snout - type: entity parent: ClothingHeadBase @@ -161,8 +171,10 @@ sprite: Clothing/Head/Hoods/goliathcloak.rsi - type: Tag tags: - - HidesHair - WhitelistChameleon + - type: HideLayerClothing + slots: + - Hair - type: entity parent: ClothingHeadBase @@ -175,9 +187,9 @@ sprite: Clothing/Head/Hoods/iansuit.rsi - type: Clothing sprite: Clothing/Head/Hoods/iansuit.rsi - - type: Tag - tags: - - HidesHair + - type: HideLayerClothing + slots: + - Hair - type: entity parent: ClothingHeadBase @@ -190,9 +202,9 @@ sprite: Clothing/Head/Hoods/carpsuit.rsi - type: Clothing sprite: Clothing/Head/Hoods/carpsuit.rsi - - type: Tag - tags: - - HidesHair + - type: HideLayerClothing + slots: + - Hair - type: entity parent: ClothingHeadBase @@ -207,8 +219,11 @@ - type: IdentityBlocker - type: Tag tags: - - HidesHair - WhitelistChameleon + - type: HideLayerClothing + slots: + - Hair + - Snout #Winter Coat Hoods - type: entity diff --git a/Resources/Prototypes/Entities/Clothing/Head/specific.yml b/Resources/Prototypes/Entities/Clothing/Head/specific.yml index 1dd36bff949..636f922d857 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/specific.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/specific.yml @@ -16,5 +16,5 @@ default: ClothingHeadHatBeret - type: UserInterface interfaces: - - key: enum.ChameleonUiKey.Key + enum.ChameleonUiKey.Key: type: ChameleonBoundUserInterface diff --git a/Resources/Prototypes/Entities/Clothing/Head/welding.yml b/Resources/Prototypes/Entities/Clothing/Head/welding.yml index 93d9b1e084f..c0ae440a56e 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/welding.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/welding.yml @@ -19,6 +19,10 @@ - type: Tag tags: - WhitelistChameleon + - WeldingMask + - type: HideLayerClothing + slots: + - Snout - type: entity parent: WeldingMaskBase @@ -34,6 +38,7 @@ tags: - HamsterWearable - WhitelistChameleon + - WeldingMask - type: entity parent: WeldingMaskBase diff --git a/Resources/Prototypes/Entities/Clothing/Masks/bandanas.yml b/Resources/Prototypes/Entities/Clothing/Masks/bandanas.yml index d520860e867..f5ad2fb6c83 100644 --- a/Resources/Prototypes/Entities/Clothing/Masks/bandanas.yml +++ b/Resources/Prototypes/Entities/Clothing/Masks/bandanas.yml @@ -25,7 +25,10 @@ - type: Tag tags: - Bandana - - HidesNose + - type: HideLayerClothing + slots: + - Snout + hideOnToggle: true - type: entity parent: ClothingMaskBandanaBase @@ -37,9 +40,6 @@ sprite: Clothing/Head/Bandanas/black.rsi - type: Clothing sprite: Clothing/Head/Bandanas/black.rsi - - type: Construction - graph: blackbandana - node: bandanablack - type: entity parent: ClothingMaskBandanaBase @@ -51,9 +51,6 @@ sprite: Clothing/Head/Bandanas/blue.rsi - type: Clothing sprite: Clothing/Head/Bandanas/blue.rsi - - type: Construction - graph: bluebandana - node: bandanablue - type: entity parent: ClothingMaskBandanaBase @@ -80,9 +77,6 @@ sprite: Clothing/Head/Bandanas/gold.rsi - type: Clothing sprite: Clothing/Head/Bandanas/gold.rsi - - type: Construction - graph: goldbandana - node: bandanagold - type: entity parent: ClothingMaskBandanaBase @@ -94,9 +88,6 @@ sprite: Clothing/Head/Bandanas/green.rsi - type: Clothing sprite: Clothing/Head/Bandanas/green.rsi - - type: Construction - graph: greenbandana - node: bandanagreen - type: entity parent: ClothingMaskBandanaBase @@ -108,9 +99,6 @@ sprite: Clothing/Head/Bandanas/grey.rsi - type: Clothing sprite: Clothing/Head/Bandanas/grey.rsi - - type: Construction - graph: greybandana - node: bandanagrey - type: entity parent: ClothingMaskBandanaBase @@ -122,9 +110,6 @@ sprite: Clothing/Head/Bandanas/red.rsi - type: Clothing sprite: Clothing/Head/Bandanas/red.rsi - - type: Construction - graph: redbandana - node: bandanared - type: entity parent: ClothingMaskBandanaBase @@ -136,9 +121,6 @@ sprite: Clothing/Head/Bandanas/skull.rsi - type: Clothing sprite: Clothing/Head/Bandanas/skull.rsi - - type: Construction - graph: skullbandana - node: bandanaskull - type: entity parent: ClothingMaskBandanaBase @@ -161,6 +143,3 @@ sprite: Clothing/Head/Bandanas/brown.rsi - type: Clothing sprite: Clothing/Head/Bandanas/brown.rsi - - type: Construction - graph: brownbandana - node: bandananrown diff --git a/Resources/Prototypes/Entities/Clothing/Masks/masks.yml b/Resources/Prototypes/Entities/Clothing/Masks/masks.yml index a20924e502e..c470605bb79 100644 --- a/Resources/Prototypes/Entities/Clothing/Masks/masks.yml +++ b/Resources/Prototypes/Entities/Clothing/Masks/masks.yml @@ -15,7 +15,10 @@ tags: - HamsterWearable - WhitelistChameleon - - HidesNose + - type: HideLayerClothing + slots: + - Snout + hideOnToggle: true - type: entity parent: ClothingMaskGas @@ -197,8 +200,10 @@ tags: - ClownMask - WhitelistChameleon - - HidesNose - - IPCMaskWearable # Estacao Pirata - IPCs + - IPCMaskWearable + - type: HideLayerClothing + slots: + - Snout - type: entity parent: ClothingMaskClownBase @@ -209,7 +214,9 @@ - ClownMask - HamsterWearable - WhitelistChameleon - - HidesNose + - type: HideLayerClothing + slots: + - Snout - type: entity parent: ClothingMaskClown @@ -238,8 +245,10 @@ - type: IdentityBlocker - type: Tag tags: - - HidesNose - - IPCMaskWearable # Estacao Pirata - IPCs + - IPCMaskWearable + - type: HideLayerClothing + slots: + - Snout - type: entity parent: ClothingMaskBase @@ -257,8 +266,10 @@ tags: - HamsterWearable - WhitelistChameleon - - HidesNose - - IPCMaskWearable # Estacao Pirata - IPCs + - IPCMaskWearable + - type: HideLayerClothing + slots: + - Snout - type: entity parent: ClothingMaskPullableBase @@ -272,9 +283,12 @@ sprite: Clothing/Mask/sterile.rsi - type: IngestionBlocker - type: Item - storedRotation: -90 + size: Tiny - type: IdentityBlocker coverage: MOUTH + - type: PhysicalComposition + materialComposition: + Plastic: 25 - type: entity parent: ClothingMaskBase @@ -309,9 +323,10 @@ - type: BreathMask - type: IngestionBlocker - type: IdentityBlocker - - type: Tag - tags: - - HidesNose + - type: HideLayerClothing + slots: + - Snout + hideOnToggle: true - type: entity parent: ClothingMaskClownBase @@ -341,8 +356,11 @@ - type: Tag tags: - WhitelistChameleon - - HidesHair - - HidesNose + - type: HideLayerClothing + slots: + - Hair + - Snout + hideOnToggle: true - type: entity parent: ClothingMaskGasExplorer @@ -368,8 +386,11 @@ - type: Tag tags: - WhitelistChameleon - - HidesHair - - HidesNose + - type: HideLayerClothing + slots: + - Hair + - Snout + hideOnToggle: true - type: entity parent: ClothingMaskGasERT @@ -405,7 +426,9 @@ - IPCMaskWearable # Estacao Pirata - IPCs - HamsterWearable - WhitelistChameleon - - HidesNose + - type: HideLayerClothing + slots: + - Snout - type: IdentityBlocker - type: entity @@ -422,8 +445,10 @@ - type: IdentityBlocker - type: Tag tags: - - HidesNose - - IPCMaskWearable # Estacao Pirata - IPCs + - IPCMaskWearable + - type: HideLayerClothing + slots: + - Snout - type: entity parent: ClothingMaskBase @@ -439,8 +464,10 @@ - type: IdentityBlocker - type: Tag tags: - - HidesNose - - IPCMaskWearable # Estacao Pirata - IPCs + - IPCMaskWearable + - type: HideLayerClothing + slots: + - Snout - type: entity parent: ClothingMaskBase @@ -456,8 +483,10 @@ - type: IdentityBlocker - type: Tag tags: - - HidesNose - - IPCMaskWearable # Estacao Pirata - IPCs + - IPCMaskWearable + - type: HideLayerClothing + slots: + - Snout - type: entity parent: ClothingMaskBase @@ -473,8 +502,10 @@ - type: IdentityBlocker - type: Tag tags: - - HidesNose - - IPCMaskWearable # Estacao Pirata - IPCs + - IPCMaskWearable + - type: HideLayerClothing + slots: + - Snout - type: entity parent: ClothingMaskBase @@ -490,8 +521,10 @@ - type: IdentityBlocker - type: Tag tags: - - HidesNose - - IPCMaskWearable # Estacao Pirata - IPCs + - IPCMaskWearable + - type: HideLayerClothing + slots: + - Snout - type: entity parent: ClothingMaskBase @@ -507,8 +540,10 @@ - type: IdentityBlocker - type: Tag tags: - - HidesNose - - IPCMaskWearable # Estacao Pirata - IPCs + - IPCMaskWearable + - type: HideLayerClothing + slots: + - Snout - type: entity parent: ClothingMaskBase diff --git a/Resources/Prototypes/Entities/Clothing/Masks/specific.yml b/Resources/Prototypes/Entities/Clothing/Masks/specific.yml index 3b71eb5603b..35b2806f6e7 100644 --- a/Resources/Prototypes/Entities/Clothing/Masks/specific.yml +++ b/Resources/Prototypes/Entities/Clothing/Masks/specific.yml @@ -6,8 +6,7 @@ suffix: Chameleon components: - type: Tag - tags: # ignore "WhitelistChameleon" tag - - HidesNose + tags: [] # ignore "WhitelistChameleon" tag - type: Sprite sprite: Clothing/Mask/gas.rsi - type: Clothing @@ -19,16 +18,54 @@ - type: IdentityBlocker # need that for default ClothingMaskGas - type: UserInterface interfaces: - - key: enum.ChameleonUiKey.Key + enum.ChameleonUiKey.Key: type: ChameleonBoundUserInterface + - type: HideLayerClothing + slots: + - Snout - type: entity parent: ClothingMaskGasChameleon id: ClothingMaskGasVoiceChameleon suffix: Voice Mask, Chameleon components: - - type: VoiceMasker - default: ClothingMaskGas + - type: VoiceMask + - type: UserInterface + interfaces: + enum.VoiceMaskUIKey.Key: + type: VoiceMaskBoundUserInterface - type: Tag tags: - - IPCMaskWearable # Estacao Pirata - IPCs + - IPCMaskWearable + - type: HideLayerClothing + slots: + - Snout + +- type: entity + parent: ClothingMaskBase + id: ClothingMaskWeldingGas + name: welding gas mask + description: A gas mask with built in welding goggles and face shield. Looks like a skull, clearly designed by a nerd. + components: + - type: Sprite + sprite: Clothing/Mask/welding-gas.rsi + state: icon + - type: Clothing + sprite: Clothing/Mask/welding-gas.rsi + - type: BreathMask + - type: IngestionBlocker + - type: IdentityBlocker + - type: FlashImmunity + - type: EyeProtection + - type: PhysicalComposition + materialComposition: + Steel: 200 + Glass: 100 + - type: StaticPrice + price: 100 + - type: Tag + tags: + - WhitelistChameleon + - type: HideLayerClothing + slots: + - Snout diff --git a/Resources/Prototypes/Entities/Clothing/Neck/medals.yml b/Resources/Prototypes/Entities/Clothing/Neck/medals.yml index e76a4b3ee3b..e633c6c52d6 100644 --- a/Resources/Prototypes/Entities/Clothing/Neck/medals.yml +++ b/Resources/Prototypes/Entities/Clothing/Neck/medals.yml @@ -1,102 +1,126 @@ -- type: entity - parent: ClothingNeckBase - id: ClothingNeckMedalBase - abstract: true - name: medal - description: not given to anyone - components: - - type: Tag - tags: - - WhitelistChameleon - -- type: entity - parent: ClothingNeckMedalBase - id: ClothingNeckBronzeheart - name: bronzeheart medal - description: Given to crewmates for exemplary bravery in the face of danger. - components: - - type: Sprite - sprite: Clothing/Neck/Medals/bronzeheart.rsi - - type: Clothing - sprite: Clothing/Neck/Medals/bronzeheart.rsi - -- type: entity - parent: ClothingNeckMedalBase - id: ClothingNeckGoldmedal - name: gold medal of crewmanship - description: Given to crewmates who display excellent crewmanship. - components: - - type: Sprite - sprite: Clothing/Neck/Medals/gold.rsi - - type: Clothing - sprite: Clothing/Neck/Medals/gold.rsi - - type: StealTarget - stealGroup: ClothingNeckGoldmedal - -- type: entity - parent: ClothingNeckMedalBase - id: ClothingNeckCargomedal - name: logistics medal # DeltaV - Logistics Department replacing Cargo - description: Whether it's for superior accountancy, courageous salvage work, or just being a friendly technician - this medal is to be assigned only for the best work in the logistics department. # DeltaV - Logistics Department replacing Cargo. Updated description for flavour - components: - - type: Sprite - sprite: DeltaV/Clothing/Neck/Medals/cargomedal.rsi # DeltaV - resprite - - type: Clothing - sprite: DeltaV/Clothing/Neck/Medals/cargomedal.rsi # DeltaV - resprite - -- type: entity - parent: ClothingNeckMedalBase - id: ClothingNeckEngineermedal - name: engineer medal - description: Whether it's by keeping the crew breathing, meticulous rewiring and upgrading, or just having plenty of materials on-hand - this medal is to be assigned only for the best work in the engineering department. # DeltaV - Updated description for flavour - components: - - type: Sprite - sprite: DeltaV/Clothing/Neck/Medals/engineermedal.rsi # DeltaV - resprite - - type: Clothing - sprite: DeltaV/Clothing/Neck/Medals/engineermedal.rsi # DeltaV - resprite - -- type: entity - parent: ClothingNeckMedalBase - id: ClothingNeckMedicalmedal - name: medical medal - description: Whether it's being the first on the scene of an accident, the most caring bedside manner, or just making sure the patients don't go mad - this medal is to be assigned only for the best work in the medical department. # DeltaV - Updated description for flavour - components: - - type: Sprite - sprite: DeltaV/Clothing/Neck/Medals/medicalmedal.rsi # DeltaV - resprite - - type: Clothing - sprite: DeltaV/Clothing/Neck/Medals/medicalmedal.rsi # DeltaV - resprite - -- type: entity - parent: ClothingNeckMedalBase - id: ClothingNeckSciencemedal - name: epistemics medal # DeltaV - Epistemics Department replacing Science - description: Whether it's pushing the edges of modern science and technology, foraying into the vast expanses of the noosphere, or just fetching the coffee - this medal is to be assigned only for the best work in the epistemics department. # DeltaV - Epistemics Department replacing Science. Updated description for flavour - components: - - type: Sprite - sprite: DeltaV/Clothing/Neck/Medals/sciencemedal.rsi # DeltaV - resprite - - type: Clothing - sprite: DeltaV/Clothing/Neck/Medals/sciencemedal.rsi # DeltaV - resprite - -- type: entity - parent: ClothingNeckMedalBase - id: ClothingNeckSecuritymedal - name: security medal - description: Whether it's catching armed terrorists, guarding the crew from alien threats, or just having a conversation in the corridor - this medal is to be assigned only for the best work in the security department. # DeltaV - Updated description for flavour - components: - - type: Sprite - sprite: DeltaV/Clothing/Neck/Medals/securitymedal.rsi # DeltaV - resprite - - type: Clothing - sprite: DeltaV/Clothing/Neck/Medals/securitymedal.rsi # DeltaV - resprite - -- type: entity - parent: ClothingNeckMedalBase - id: ClothingNeckClownmedal - name: bravado medal # DeltaV - Updated title so it's not just a joke medal. - description: Given to crewmates who laugh in the face of death, lift their peers' spirits, and uplift themselves and their friends to success. # DeltaV - Updated description for flavour and to reflect title. - components: - - type: Sprite - sprite: DeltaV/Clothing/Neck/Medals/clownmedal.rsi # DeltaV - resprite - - type: Clothing - sprite: DeltaV/Clothing/Neck/Medals/clownmedal.rsi # DeltaV - resprite - - type: StealTarget - stealGroup: ClothingNeckClownmedal +- type: entity + parent: ClothingNeckBase + id: ClothingNeckMedalBase + abstract: true + name: medal + description: not given to anyone + components: + - type: Tag + tags: + - WhitelistChameleon + +- type: entity + parent: ClothingNeckMedalBase + id: ClothingNeckBronzeheart + name: bronzeheart medal + description: Given to crewmates for exemplary bravery in the face of danger. + components: + - type: Sprite + sprite: Clothing/Neck/Medals/bronzeheart.rsi + - type: Clothing + sprite: Clothing/Neck/Medals/bronzeheart.rsi + - type: Tag + tags: + - Medal + +- type: entity + parent: ClothingNeckMedalBase + id: ClothingNeckGoldmedal + name: gold medal of crewmanship + description: Given to crewmates who display excellent crewmanship. + components: + - type: Sprite + sprite: Clothing/Neck/Medals/gold.rsi + - type: Clothing + sprite: Clothing/Neck/Medals/gold.rsi + - type: StealTarget + stealGroup: ClothingNeckGoldmedal + - type: Tag + tags: + - Medal + +- type: entity + parent: ClothingNeckMedalBase + id: ClothingNeckCargomedal + name: logistics medal # DeltaV - Logistics Department replacing Cargo + description: Whether it's for superior accountancy, courageous salvage work, or just being a friendly technician - this medal is to be assigned only for the best work in the logistics department. # DeltaV - Logistics Department replacing Cargo. Updated description for flavour + components: + - type: Sprite + sprite: DeltaV/Clothing/Neck/Medals/cargomedal.rsi # DeltaV - resprite + - type: Clothing + sprite: DeltaV/Clothing/Neck/Medals/cargomedal.rsi + - type: Tag + tags: + - Medal + +- type: entity + parent: ClothingNeckMedalBase + id: ClothingNeckEngineermedal + name: engineer medal + description: Whether it's by keeping the crew breathing, meticulous rewiring and upgrading, or just having plenty of materials on-hand - this medal is to be assigned only for the best work in the engineering department. # DeltaV - Updated description for flavour + components: + - type: Sprite + sprite: DeltaV/Clothing/Neck/Medals/engineermedal.rsi # DeltaV - resprite + - type: Clothing + sprite: DeltaV/Clothing/Neck/Medals/engineermedal.rsi + - type: Tag + tags: + - Medal + +- type: entity + parent: ClothingNeckMedalBase + id: ClothingNeckMedicalmedal + name: medical medal + description: Whether it's being the first on the scene of an accident, the most caring bedside manner, or just making sure the patients don't go mad - this medal is to be assigned only for the best work in the medical department. # DeltaV - Updated description for flavour + components: + - type: Sprite + sprite: DeltaV/Clothing/Neck/Medals/medicalmedal.rsi + - type: Clothing + sprite: DeltaV/Clothing/Neck/Medals/medicalmedal.rsi + - type: Tag + tags: + - Medal + +- type: entity + parent: ClothingNeckMedalBase + id: ClothingNeckSciencemedal + name: epistemics medal # DeltaV - Epistemics Department replacing Science + description: Whether it's pushing the edges of modern science and technology, foraying into the vast expanses of the noosphere, or just fetching the coffee - this medal is to be assigned only for the best work in the epistemics department. # DeltaV - Epistemics Department replacing Science. Updated description for flavour + components: + - type: Sprite + sprite: DeltaV/Clothing/Neck/Medals/sciencemedal.rsi + - type: Clothing + sprite: DeltaV/Clothing/Neck/Medals/sciencemedal.rsi + - type: Tag + tags: + - Medal + +- type: entity + parent: ClothingNeckMedalBase + id: ClothingNeckSecuritymedal + name: security medal + description: Whether it's catching armed terrorists, guarding the crew from alien threats, or just having a conversation in the corridor - this medal is to be assigned only for the best work in the security department. # DeltaV - Updated description for flavour + components: + - type: Sprite + sprite: DeltaV/Clothing/Neck/Medals/securitymedal.rsi + - type: Clothing + sprite: DeltaV/Clothing/Neck/Medals/securitymedal.rsi + - type: Tag + tags: + - Medal + +- type: entity + parent: ClothingNeckMedalBase + id: ClothingNeckClownmedal + name: bravado medal # DeltaV - Updated title so it's not just a joke medal. + description: Given to crewmates who laugh in the face of death, lift their peers' spirits, and uplift themselves and their friends to success. # DeltaV - Updated description for flavour and to reflect title. + components: + - type: Sprite + sprite: DeltaV/Clothing/Neck/Medals/clownmedal.rsi # DeltaV - resprite + - type: Clothing + sprite: DeltaV/Clothing/Neck/Medals/clownmedal.rsi # DeltaV - resprite + - type: StealTarget + stealGroup: ClothingNeckClownmedal + - type: Tag + tags: + - Medal diff --git a/Resources/Prototypes/Entities/Clothing/Neck/specific.yml b/Resources/Prototypes/Entities/Clothing/Neck/specific.yml index 1f50dc1ef1c..56fddceaad6 100644 --- a/Resources/Prototypes/Entities/Clothing/Neck/specific.yml +++ b/Resources/Prototypes/Entities/Clothing/Neck/specific.yml @@ -16,5 +16,5 @@ default: ClothingNeckScarfStripedRed - type: UserInterface interfaces: - - key: enum.ChameleonUiKey.Key + enum.ChameleonUiKey.Key: type: ChameleonBoundUserInterface diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml index eb580d64996..46a431ddff2 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml @@ -2,7 +2,7 @@ # NOTE: Half of the kind of armor you're probably thinking of is in vests.yml. These should probably be merged some day. - type: entity - parent: ClothingOuterBaseMedium + parent: [ClothingOuterBaseMedium, AllowSuitStorageClothing] id: ClothingOuterArmorBasic name: armor vest description: A standard Type I armored vest that provides decent protection against most types of damage. @@ -35,7 +35,7 @@ sprite: Clothing/OuterClothing/Armor/security_slim.rsi - type: entity - parent: ClothingOuterBaseLarge + parent: [ClothingOuterBaseLarge, AllowSuitStorageClothing] id: ClothingOuterArmorRiot name: riot suit description: A suit of semi-flexible polycarbonate body armor with heavy padding to protect against melee attacks. Perfect for fighting delinquents around the station. @@ -95,6 +95,7 @@ Heat: 0.4 # this technically means it protects against fires pretty well? -heat is just for lasers and stuff, not atmos temperature - type: Reflect reflectProb: 1 + innate: true # armor grants a passive shield that does not require concentration to maintain reflects: - Energy @@ -118,7 +119,7 @@ - type: GroupExamine - type: entity - parent: ClothingOuterBaseLarge + parent: [ClothingOuterBaseLarge, AllowSuitStorageClothing] id: ClothingOuterArmorHeavy name: heavy armor suit description: A heavily armored suit that protects against excessive damage. @@ -137,6 +138,8 @@ Radiation: 0 Caustic: 0.75 - type: GroupExamine + - type: ClothingRequiredStepTriggerImmune + slots: WITHOUT_POCKET - type: Tag tags: - FullBodyOuter @@ -186,7 +189,7 @@ sprite: Clothing/OuterClothing/Armor/magusred.rsi - type: entity - parent: ClothingOuterBaseLarge + parent: [ClothingOuterBaseLarge, AllowSuitStorageClothing] id: ClothingOuterArmorCaptainCarapace name: "captain's carapace" description: "An armored chestpiece that provides protection whilst still offering maximum mobility and flexibility. Issued only to the station's finest." @@ -236,6 +239,8 @@ - type: ExplosionResistance damageCoefficient: 0.5 - type: GroupExamine + - type: ClothingRequiredStepTriggerImmune + slots: WITHOUT_POCKET - type: Tag tags: - FullBodyOuter @@ -265,6 +270,8 @@ - type: Construction graph: BoneArmor node: armor + - type: ClothingRequiredStepTriggerImmune + slots: WITHOUT_POCKET - type: entity parent: ClothingOuterBaseLarge @@ -284,3 +291,5 @@ Piercing: 0.6 Heat: 0.5 - type: GroupExamine + - type: ClothingRequiredStepTriggerImmune + slots: WITHOUT_POCKET diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml index 358f91d2971..c18e5d6ab60 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml @@ -41,8 +41,8 @@ ents: [] - type: UserInterface interfaces: - - key: enum.StorageUiKey.Key - type: StorageBoundUserInterface + enum.StorageUiKey.Key: + type: StorageBoundUserInterface - type: StaticPrice price: 70 @@ -104,7 +104,7 @@ - type: entity abstract: true - parent: [ClothingOuterBase, GeigerCounterClothing] + parent: [ClothingOuterBase, GeigerCounterClothing, AllowSuitStorageClothing] id: ClothingOuterHardsuitBase name: base hardsuit components: @@ -112,7 +112,9 @@ highPressureMultiplier: 0.3 lowPressureMultiplier: 1000 - type: TemperatureProtection - coefficient: 0.001 # yes it needs to be this low, fires are fucking deadly apparently!!!! + coefficient: 0.01 + - type: FireProtection + reduction: 0.75 # almost perfectly sealed, atmos firesuit is better - type: ClothingSpeedModifier walkModifier: 0.4 sprintModifier: 0.6 @@ -147,10 +149,12 @@ localSoundOnly: true - type: StaminaDamageResistance coefficient: 0.75 # 25% + - type: ClothingRequiredStepTriggerImmune + slots: WITHOUT_POCKET - type: entity abstract: true - parent: ClothingOuterBase + parent: [ClothingOuterBase, AllowSuitStorageClothing] id: ClothingOuterEVASuitBase name: base EVA Suit components: @@ -171,6 +175,8 @@ - type: Clothing equipDelay: 1.25 # Softsuits are easier to put on and off unequipDelay: 1 + - type: ClothingRequiredStepTriggerImmune + slots: WITHOUT_POCKET - type: entity parent: ClothingOuterBase @@ -193,4 +199,4 @@ id: ClothingOuterBaseMedium components: - type: Item - size: Huge + size: Huge \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/coats.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/coats.yml index a47a2bbcebc..6b3f8961dbe 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/coats.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/coats.yml @@ -10,7 +10,7 @@ sprite: Clothing/OuterClothing/Coats/bomber.rsi - type: entity - parent: ClothingOuterStorageBase + parent: [ClothingOuterStorageBase, AllowSuitStorageClothing] id: ClothingOuterCoatDetective name: detective trenchcoat description: A rugged canvas trenchcoat, designed and created by TX Fabrication Corp. Wearing it makes you feel for the plight of the Tibetans. @@ -31,6 +31,15 @@ Piercing: 0.70 Heat: 0.80 +- type: entity + parent: ClothingOuterCoatDetective + id: ClothingOuterCoatDetectiveLoadout + components: + - type: StorageFill + contents: + - id: SmokingPipeFilledTobacco + - id: FlippoLighter #Not the steal objective, only difference from normal detective trenchcoat + - type: entity parent: ClothingOuterStorageBase id: ClothingOuterCoatGentle @@ -43,7 +52,38 @@ sprite: Clothing/OuterClothing/Coats/gentlecoat.rsi - type: entity - parent: ClothingOuterStorageBase + abstract: true + parent: AllowSuitStorageClothing + id: ClothingOuterArmorHoS + components: + - type: Armor + modifiers: + coefficients: + Blunt: 0.7 + Slash: 0.7 + Piercing: 0.7 + Heat: 0.7 + Caustic: 0.75 # not the full 90% from ss13 because of the head + - type: ExplosionResistance + damageCoefficient: 0.9 + +- type: entity + abstract: true + parent: AllowSuitStorageClothing + id: ClothingOuterArmorWarden + components: + - type: Armor + modifiers: + coefficients: + Blunt: 0.7 + Slash: 0.7 + Piercing: 0.7 + Heat: 0.7 + - type: ExplosionResistance + damageCoefficient: 0.9 + +- type: entity + parent: [ClothingOuterArmorHoS, ClothingOuterStorageBase] id: ClothingOuterCoatHoSTrench name: head of security's armored trenchcoat description: A greatcoat enhanced with a special alloy for some extra protection and style for those with a commanding presence. @@ -52,16 +92,6 @@ sprite: DeltaV/Clothing/OuterClothing/Coats/hos_trenchcoat.rsi # DeltaV - resprite - type: Clothing sprite: DeltaV/Clothing/OuterClothing/Coats/hos_trenchcoat.rsi # DeltaV - resprite - - type: Armor - modifiers: - coefficients: - Blunt: 0.70 - Slash: 0.70 - Piercing: 0.70 - Heat: 0.70 - Caustic: 0.75 #not the full 90% from ss13 because of the head - - type: ExplosionResistance - damageCoefficient: 0.90 - type: entity parent: ClothingOuterStorageBase @@ -197,7 +227,7 @@ parent: ClothingOuterStorageFoldableBase id: ClothingOuterCoatLabCmo name: chief medical officer's lab coat - description: Bluer than the standard model. + description: Custom made blue lab coat for the Chief Medical Officer, offers improved protection against chemical spills and minor cuts components: - type: Sprite sprite: Clothing/OuterClothing/Coats/labcoat_cmo.rsi @@ -206,7 +236,14 @@ - type: Armor modifiers: coefficients: - Caustic: 0.75 + Slash: 0.95 + Heat: 0.95 + Caustic: 0.65 + +- type: entity + parent: [ClothingOuterStorageFoldableBaseOpened, ClothingOuterCoatLabCmo] + id: ClothingOuterCoatLabCmoOpened + name: chief medical officer's lab coat - type: entity parent: [ClothingOuterStorageFoldableBaseOpened, ClothingOuterCoatLabCmo] @@ -286,7 +323,7 @@ sprite: Clothing/OuterClothing/Coats/pirate.rsi - type: entity - parent: ClothingOuterStorageBase + parent: [ClothingOuterArmorWarden, ClothingOuterStorageBase] id: ClothingOuterCoatWarden name: warden's armored jacket description: A sturdy, utilitarian jacket designed to protect a warden from any brig-bound threats. @@ -295,15 +332,6 @@ sprite: Clothing/OuterClothing/Coats/warden.rsi - type: Clothing sprite: Clothing/OuterClothing/Coats/warden.rsi - - type: Armor - modifiers: - coefficients: - Blunt: 0.70 - Slash: 0.70 - Piercing: 0.70 - Heat: 0.70 - - type: ExplosionResistance - damageCoefficient: 0.90 - type: entity parent: ClothingOuterStorageBase diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml index ba889285a16..bb4aedcb5d7 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml @@ -52,20 +52,14 @@ Blunt: 0.9 Slash: 0.9 Piercing: 0.9 - Heat: 0.2 + Heat: 0.8 Radiation: 0.5 - Caustic: 0.5 - type: ClothingSpeedModifier walkModifier: 0.7 sprintModifier: 0.7 - type: HeldSpeedModifier - type: ToggleableClothing clothingPrototype: ClothingHeadHelmetHardsuitAtmos - - type: ReverseEngineering # Nyano - difficulty: 5 - newItem: ClothingOuterHardsuitJuggernautReverseEngineered - recipes: - - ClothingOuterHardsuitJuggernautReverseEngineered #Engineering Hardsuit - type: entity @@ -81,8 +75,6 @@ - type: PressureProtection highPressureMultiplier: 0.04 lowPressureMultiplier: 1000 - - type: TemperatureProtection - coefficient: 0.01 - type: ExplosionResistance damageCoefficient: 0.5 - type: Armor @@ -420,7 +412,7 @@ parent: ClothingOuterHardsuitBase id: ClothingOuterHardsuitRd name: experimental research hardsuit - description: A special suit that protects against hazardous, low pressure environments. Has an additional layer of armor. Able to be compressed to small sizes. + description: A special suit that protects against hazardous, low pressure environments. Has an additional layer of armor. components: - type: Sprite sprite: Clothing/OuterClothing/Hardsuits/rd.rsi @@ -445,7 +437,9 @@ sprintModifier: 0.75 - type: HeldSpeedModifier - type: Item - size: Normal + size: Huge + shape: + - 0,0,4,4 #5X5, can fit in a duffel bag but nothing smaller. - type: Tag tags: - WhitelistChameleon @@ -557,11 +551,6 @@ - type: HeldSpeedModifier - type: ToggleableClothing clothingPrototype: ClothingHeadHelmetHardsuitSyndie - - type: ReverseEngineering # Nyano - difficulty: 5 - newItem: ClothingOuterHardsuitSyndieReverseEngineered - recipes: - - ClothingOuterHardsuitSyndieReverseEngineered - type: Tag tags: - MonkeyWearable @@ -610,6 +599,8 @@ coefficient: 0.001 - type: ExplosionResistance damageCoefficient: 0.2 + - type: FireProtection + reduction: 0.8 # perfect protection like atmos firesuit for pyro tf2 ops - type: Armor modifiers: coefficients: diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/misc.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/misc.yml index 4b2c3c9c3ff..b5169a9cf6b 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/misc.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/misc.yml @@ -56,6 +56,39 @@ - type: Clothing sprite: Clothing/OuterClothing/Misc/chef.rsi +- type: entity + parent: ClothingOuterStorageBase + id: ClothingOuterJacketChefNt + name: nanotrasen chef jacket + description: An apron-jacket used by a high class Nanotrasen Corporation chef. + components: + - type: Sprite + sprite: Clothing/OuterClothing/Misc/chef_nt.rsi + - type: Clothing + sprite: Clothing/OuterClothing/Misc/chef_nt.rsi + +- type: entity + parent: ClothingOuterStorageBase + id: ClothingOuterJacketChefIdris + name: idris chef jacket + description: An apron-jacket used by a high class Idris Incorporated chef. + components: + - type: Sprite + sprite: Clothing/OuterClothing/Misc/chef_idris.rsi + - type: Clothing + sprite: Clothing/OuterClothing/Misc/chef_idris.rsi + +- type: entity + parent: ClothingOuterStorageBase + id: ClothingOuterJacketChefOrion + name: orion chef jacket + description: An apron-jacket used by a high class Orion Expresschef. + components: + - type: Sprite + sprite: Clothing/OuterClothing/Misc/chef_orion.rsi + - type: Clothing + sprite: Clothing/OuterClothing/Misc/chef_orion.rsi + - type: entity parent: ClothingOuterBase id: ClothingOuterHoodieBlack @@ -166,9 +199,16 @@ - type: Clothing sprite: Clothing/OuterClothing/Misc/santa.rsi +- type: entity + abstract: true + parent: ClothingOuterBase + id: ClothingOuterWizardBase + components: + - type: WizardClothes + # Is this wizard wearing a fanny pack??? - type: entity - parent: ClothingOuterEVASuitBase # DeltaV - Make real wizard clothes space proof + parent: ClothingOuterWizardBase id: ClothingOuterWizardViolet name: violet wizard robes description: A bizarre gem-encrusted violet robe that radiates magical energies. @@ -179,7 +219,7 @@ sprite: Clothing/OuterClothing/Misc/violetwizard.rsi - type: entity - parent: ClothingOuterEVASuitBase # DeltaV - Make real wizard clothes space proof + parent: ClothingOuterWizardBase id: ClothingOuterWizard name: wizard robes description: A bizarre gem-encrusted blue robe that radiates magical energies. @@ -190,7 +230,7 @@ sprite: Clothing/OuterClothing/Misc/wizard.rsi - type: entity - parent: ClothingOuterEVASuitBase # DeltaV - Make real wizard clothes space proof + parent: ClothingOuterWizardBase id: ClothingOuterWizardRed name: red wizard robes description: Strange-looking, red, hat-wear that most certainly belongs to a real magic user. @@ -388,3 +428,20 @@ sprite: Clothing/OuterClothing/Misc/unathirobe.rsi - type: Clothing sprite: Clothing/OuterClothing/Misc/unathirobe.rsi + +- type: entity + parent: ClothingOuterBase + id: ClothingOuterShadowkinRestraints + name: shadowkin restraints + description: One of the first creations after finding Shadowkin, these were used to contain the Shadowkin during research so they didn't teleport away. + components: + - type: Sprite + sprite: Clothing/OuterClothing/Misc/shadowkinrestraints.rsi + - type: Clothing + sprite: Clothing/OuterClothing/Misc/shadowkinrestraints.rsi + equipDelay: 0.5 + unequipDelay: 10 + - type: ShadowkinCuff + - type: GuideHelp + guides: + - Shadowkin \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/specific.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/specific.yml index 9be8c22a0a2..c3d9bb12242 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/specific.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/specific.yml @@ -16,5 +16,5 @@ default: ClothingOuterVest - type: UserInterface interfaces: - - key: enum.ChameleonUiKey.Key + enum.ChameleonUiKey.Key: type: ChameleonBoundUserInterface diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml index 9f0a01cc481..6215fb3b45a 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml @@ -27,6 +27,8 @@ - WhitelistChameleon - FullBodyOuter - HidesHarpyWings + - type: ClothingRequiredStepTriggerImmune + slots: WITHOUT_POCKET - type: entity parent: ClothingOuterSuitBomb @@ -52,7 +54,7 @@ - FullBodyOuter - type: entity - parent: ClothingOuterBaseLarge + parent: [ClothingOuterBaseLarge, AllowSuitStorageClothing] id: ClothingOuterSuitFire name: fire suit description: A suit that helps protect against hazardous temperatures. @@ -65,24 +67,28 @@ highPressureMultiplier: 0.04 - type: TemperatureProtection coefficient: 0.005 + - type: FireProtection + reduction: 0.65 # doesnt have a full seal so not as good - type: Armor modifiers: coefficients: Slash: 0.9 - Heat: 0.3 - Cold: 0.2 + Heat: 0.8 + Cold: 0.8 - type: ClothingSpeedModifier walkModifier: 0.8 sprintModifier: 0.7 - type: HeldSpeedModifier - type: GroupExamine + - type: ClothingRequiredStepTriggerImmune + slots: WITHOUT_POCKET - type: Tag tags: - WhitelistChameleon - HidesHarpyWings - type: entity - parent: ClothingOuterBaseLarge + parent: [ClothingOuterBaseLarge, AllowSuitStorageClothing] id: ClothingOuterSuitAtmosFire name: atmos fire suit description: An expensive firesuit that protects against even the most deadly of station fires. Designed to protect even if the wearer is set aflame. @@ -96,17 +102,21 @@ lowPressureMultiplier: 1000 - type: TemperatureProtection coefficient: 0.001 + - type: FireProtection + reduction: 0.8 # atmos firesuit offers best protection, hardsuits are a little vulnerable - type: Armor modifiers: coefficients: Slash: 0.9 - Heat: 0.3 - Cold: 0.2 + Heat: 0.8 + Cold: 0.8 - type: ClothingSpeedModifier walkModifier: 0.8 sprintModifier: 0.8 - type: HeldSpeedModifier - type: GroupExamine + - type: ClothingRequiredStepTriggerImmune + slots: WITHOUT_POCKET - type: Tag tags: - FullBodyOuter @@ -114,7 +124,7 @@ - HidesHarpyWings - type: entity - parent: [ClothingOuterBaseLarge, GeigerCounterClothing] + parent: [ClothingOuterBaseLarge, GeigerCounterClothing, AllowSuitStorageClothing] id: ClothingOuterSuitRad name: radiation suit description: "A suit that protects against radiation. The label reads, 'Made with lead. Please do not consume insulation.'" @@ -135,6 +145,8 @@ - type: ContainerContainer containers: toggleable-clothing: !type:ContainerSlot {} + - type: ClothingRequiredStepTriggerImmune + slots: WITHOUT_POCKET - type: Tag tags: - FullBodyOuter @@ -142,7 +154,7 @@ - HidesHarpyWings - type: entity - parent: ClothingOuterBaseLarge + parent: [ClothingOuterBaseLarge, AllowSuitStorageClothing] id: ClothingOuterSuitSpaceNinja name: space ninja suit description: This black technologically advanced, cybernetically-enhanced suit provides many abilities like invisibility or teleportation. @@ -191,6 +203,8 @@ sprite: Clothing/OuterClothing/Suits/chicken.rsi - type: Clothing sprite: Clothing/OuterClothing/Suits/chicken.rsi + - type: ClothingRequiredStepTriggerImmune + slots: WITHOUT_POCKET - type: Tag tags: - FullBodyOuter @@ -219,6 +233,8 @@ - type: ContainerContainer containers: toggleable-clothing: !type:ContainerSlot {} + - type: ClothingRequiredStepTriggerImmune + slots: WITHOUT_POCKET - type: Tag tags: - FullBodyOuter @@ -243,6 +259,8 @@ - type: Construction graph: ClothingOuterSuitIan node: suit + - type: ClothingRequiredStepTriggerImmune + slots: WITHOUT_POCKET - type: entity parent: ClothingOuterBase diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/vests.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/vests.yml index 784084652c1..9359bb0ce3e 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/vests.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/vests.yml @@ -1,6 +1,6 @@ #Web vest - type: entity - parent: ClothingOuterStorageBase + parent: [ClothingOuterStorageBase, AllowSuitStorageClothing] id: ClothingOuterVestWeb name: web vest description: A synthetic armor vest. This one has added webbing and ballistic plates. @@ -21,7 +21,7 @@ #Mercenary web vest - type: entity - parent: ClothingOuterStorageBase #web vest so it should have some pockets for ammo + parent: ClothingOuterVestWeb #web vest so it should have some pockets for ammo id: ClothingOuterVestWebMerc name: merc web vest description: A high-quality armored vest made from a hard synthetic material. It's surprisingly flexible and light, despite formidable armor plating. @@ -87,3 +87,36 @@ sprite: Clothing/OuterClothing/Vests/vest.rsi - type: Clothing sprite: Clothing/OuterClothing/Vests/vest.rsi + +- type: entity + parent: ClothingOuterBase + id: ClothingOuterVestNt + name: nanotrasen vest + description: A thick vest with a rubbery, water-resistant shell coloured in blue. + components: + - type: Sprite + sprite: Clothing/OuterClothing/Vests/vest_nt.rsi + - type: Clothing + sprite: Clothing/OuterClothing/Vests/vest_nt.rsi + +- type: entity + parent: ClothingOuterBase + id: ClothingOuterVestIdris + name: idris incorporated vest + description: A thick vest with a rubbery, water-resistant shell coloured in teal. + components: + - type: Sprite + sprite: Clothing/OuterClothing/Vests/vest_idris.rsi + - type: Clothing + sprite: Clothing/OuterClothing/Vests/vest_idris.rsi + +- type: entity + parent: ClothingOuterBase + id: ClothingOuterVestOrion + name: orion express vest + description: A thick vest with a rubbery, water-resistant shell coloured in brown. + components: + - type: Sprite + sprite: Clothing/OuterClothing/Vests/vest_orion.rsi + - type: Clothing + sprite: Clothing/OuterClothing/Vests/vest_orion.rsi \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/wintercoats.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/wintercoats.yml index 160c606cc41..73dc6c8c7f7 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/wintercoats.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/wintercoats.yml @@ -231,9 +231,23 @@ clothingPrototype: ClothingHeadHatHoodWinterHOP - type: entity - parent: ClothingOuterWinterCoatToggleable + parent: [ClothingOuterArmorHoS, ClothingOuterWinterCoatToggleable] id: ClothingOuterWinterHoS + name: head of security's armored winter coat + description: A sturdy, utilitarian winter coat designed to protect a head of security from any brig-bound threats and hypothermic events. + components: + - type: Sprite + sprite: Clothing/OuterClothing/WinterCoats/coathosarmored.rsi + - type: Clothing + sprite: Clothing/OuterClothing/WinterCoats/coathosarmored.rsi + - type: ToggleableClothing + clothingPrototype: ClothingHeadHatHoodWinterHOS + +- type: entity + parent: ClothingOuterWinterCoatToggleable + id: ClothingOuterWinterHoSUnarmored name: head of security's winter coat + description: A sturdy coat, a warm coat, but not an armored coat. components: - type: Sprite sprite: Clothing/OuterClothing/WinterCoats/coathos.rsi @@ -446,22 +460,28 @@ clothingPrototype: ClothingHeadHatHoodWinterSci - type: entity - parent: ClothingOuterWinterCoatToggleable + parent: [ClothingOuterArmorWarden, ClothingOuterWinterCoatToggleable] id: ClothingOuterWinterWarden name: warden's armored winter coat description: A sturdy, utilitarian winter coat designed to protect a warden from any brig-bound threats and hypothermic events. components: + - type: Sprite + sprite: Clothing/OuterClothing/WinterCoats/coatwardenarmored.rsi + - type: Clothing + sprite: Clothing/OuterClothing/WinterCoats/coatwardenarmored.rsi + - type: ToggleableClothing + clothingPrototype: ClothingHeadHatHoodWinterWarden + +- type: entity + parent: ClothingOuterWinterCoatToggleable + id: ClothingOuterWinterWardenUnarmored + name: warden's winter coat + description: A sturdy coat, a warm coat, but not an armored coat. + components: - type: Sprite sprite: Clothing/OuterClothing/WinterCoats/coatwarden.rsi - type: Clothing sprite: Clothing/OuterClothing/WinterCoats/coatwarden.rsi - - type: Armor - modifiers: - coefficients: - Blunt: 0.70 - Slash: 0.70 - Piercing: 0.8 #slightly less bulletproof then warden's normal coat - Heat: 0.70 - type: ToggleableClothing clothingPrototype: ClothingHeadHatHoodWinterWarden diff --git a/Resources/Prototypes/Entities/Clothing/Shoes/base_clothingshoes.yml b/Resources/Prototypes/Entities/Clothing/Shoes/base_clothingshoes.yml index 1119d5cda74..4e7c966a0de 100644 --- a/Resources/Prototypes/Entities/Clothing/Shoes/base_clothingshoes.yml +++ b/Resources/Prototypes/Entities/Clothing/Shoes/base_clothingshoes.yml @@ -23,6 +23,7 @@ tags: - ClothMade - WhitelistChameleon + - type: ClothingRequiredStepTriggerImmune - type: entity abstract: true @@ -58,4 +59,4 @@ description: Fluffy boots to help survive even the coldest of winters. components: - type: TemperatureProtection - coefficient: 0.2 + coefficient: 0.8 diff --git a/Resources/Prototypes/Entities/Clothing/Shoes/magboots.yml b/Resources/Prototypes/Entities/Clothing/Shoes/magboots.yml index 9381b3f2086..c4bdefd3a14 100644 --- a/Resources/Prototypes/Entities/Clothing/Shoes/magboots.yml +++ b/Resources/Prototypes/Entities/Clothing/Shoes/magboots.yml @@ -114,7 +114,7 @@ key: enum.SharedGasTankUiKey.Key - type: UserInterface interfaces: - - key: enum.SharedGasTankUiKey.Key + enum.SharedGasTankUiKey.Key: type: GasTankBoundUserInterface - type: Explosive explosionType: Default diff --git a/Resources/Prototypes/Entities/Clothing/Shoes/misc.yml b/Resources/Prototypes/Entities/Clothing/Shoes/misc.yml index d1f6e083f40..d5a695c7c0b 100644 --- a/Resources/Prototypes/Entities/Clothing/Shoes/misc.yml +++ b/Resources/Prototypes/Entities/Clothing/Shoes/misc.yml @@ -47,6 +47,8 @@ collection: FootstepDuck params: variation: 0.07 + - type: WaddleWhenWorn + tumbleIntensity: 10 # smaller than clown shoes - type: Construction graph: ClothingShoeSlippersDuck node: shoes diff --git a/Resources/Prototypes/Entities/Clothing/Shoes/specific.yml b/Resources/Prototypes/Entities/Clothing/Shoes/specific.yml index 987eda582e4..4ae752345a7 100644 --- a/Resources/Prototypes/Entities/Clothing/Shoes/specific.yml +++ b/Resources/Prototypes/Entities/Clothing/Shoes/specific.yml @@ -185,7 +185,7 @@ default: ClothingShoesColorBlack - type: UserInterface interfaces: - - key: enum.ChameleonUiKey.Key + enum.ChameleonUiKey.Key: type: ChameleonBoundUserInterface - type: entity diff --git a/Resources/Prototypes/Entities/Clothing/Uniforms/base_clothinguniforms.yml b/Resources/Prototypes/Entities/Clothing/Uniforms/base_clothinguniforms.yml index 1b3967ee658..0a8e440e5b3 100644 --- a/Resources/Prototypes/Entities/Clothing/Uniforms/base_clothinguniforms.yml +++ b/Resources/Prototypes/Entities/Clothing/Uniforms/base_clothinguniforms.yml @@ -9,12 +9,17 @@ slots: [innerclothing] equipSound: path: /Audio/Items/jumpsuit_equip.ogg + - type: EmitSoundOnPickup # Not sure why this wasn't set to the base; as all clothes should have clothing sounds. + sound: /Audio/SimpleStation14/Items/Handling/cloth_pickup.ogg + - type: EmitSoundOnDrop + sound: /Audio/SimpleStation14/Items/Handling/cloth_drop.ogg + - type: EmitSoundOnLand + sound: /Audio/SimpleStation14/Items/Handling/cloth_drop.ogg - type: Butcherable butcheringType: Knife spawned: - id: MaterialCloth1 amount: 3 - - id: N14MaterialThread1 - type: Food requiresSpecialDigestion: true - type: SolutionContainerManager @@ -37,7 +42,7 @@ - type: Clothing slots: [innerclothing] femaleMask: UniformTop - - type: Tag #DeltaV, needed for species with nonhuman legs/can only wear skirts + - type: Tag # Needed for species with nonhuman legs/can only wear skirts tags: - Skirt - ClothMade @@ -54,12 +59,6 @@ - type: WirelessNetworkConnection range: 1200 - type: StationLimitedNetwork - - type: EmitSoundOnPickup - sound: /Audio/SimpleStation14/Items/Handling/cloth_pickup.ogg - - type: EmitSoundOnDrop - sound: /Audio/SimpleStation14/Items/Handling/cloth_drop.ogg - - type: EmitSoundOnLand - sound: /Audio/SimpleStation14/Items/Handling/cloth_drop.ogg - type: entity abstract: true @@ -69,7 +68,87 @@ - type: Clothing slots: [innerclothing] femaleMask: UniformTop - - type: Tag #DeltaV, needed for species with nonhuman legs/can only wear skirts + - type: Tag # Needed for species with nonhuman legs/can only wear skirts + # And for moths to be able to eat this. tags: - Skirt - - ClothMade # Delta-V - allows moths to eat this + - ClothMade + +- type: entity # For clothes that need suit sensors. + parent: [UnsensoredClothingUniformBase, BaseFoldable] + id: ClothingUniformBaseUnsensoredFlippable + abstract: true + components: + - type: Appearance + - type: Foldable + canFoldInsideContainer: true + unfoldVerbText: fold-unrollsleeves-verb + foldVerbText: fold-rollsleeves-verb + - type: FoldableClothing + foldedEquippedPrefix: flipped + foldedHeldPrefix: flipped + - type: Sprite + layers: + - state: icon + map: [ "unfoldedLayer" ] + - state: icon_flipped + map: ["foldedLayer"] + visible: false + +- type: entity # For clothes that need suit sensors. + parent: ClothingHeadHeadHatBaseFlippable + id: ClothingUniformBaseUnsensoredFlipped + suffix: flipped + abstract: true + components: + - type: Foldable + folded: true + - type: Clothing + equippedPrefix: flipped + - type: Item + heldPrefix: flipped + - type: Sprite + layers: + - state: icon + map: [ "unfoldedLayer" ] + visible: false + - state: icon_flipped + map: ["foldedLayer"] + visible: true + +- type: entity # For clothes that don't need suit sensors. + parent: ClothingUniformBaseUnsensoredFlippable + id: ClothingUniformBaseFlippable + abstract: true + components: + - type: SuitSensor + - type: DeviceNetwork + deviceNetId: Wireless + transmitFrequencyId: SuitSensor + - type: WirelessNetworkConnection + range: 1200 + - type: StationLimitedNetwork + +- type: entity # For clothes that don't need suit sensors. + parent: ClothingUniformBaseFlippable + id: ClothingUniformBaseFlipped + suffix: flipped + abstract: true + components: # I *think* I can just disregard the components; + # and inherit from ClothingUniformBaseFlippable + # and ClothingUniformBaseUnsensoredFlipped but I don't want to + # test that right now. + - type: Foldable + folded: true + - type: Clothing + equippedPrefix: flipped + - type: Item + heldPrefix: flipped + - type: Sprite + layers: + - state: icon + map: [ "unfoldedLayer" ] + visible: false + - state: icon_flipped + map: ["foldedLayer"] + visible: true diff --git a/Resources/Prototypes/Entities/Clothing/Uniforms/jumpskirts.yml b/Resources/Prototypes/Entities/Clothing/Uniforms/jumpskirts.yml index cbbf78b9a17..18266dc4988 100644 --- a/Resources/Prototypes/Entities/Clothing/Uniforms/jumpskirts.yml +++ b/Resources/Prototypes/Entities/Clothing/Uniforms/jumpskirts.yml @@ -48,7 +48,7 @@ parent: ClothingUniformSkirtBase id: ClothingUniformJumpskirtChiefEngineer name: chief engineer's jumpskirt - description: It's a high visibility jumpskirt given to those engineers insane enough to achieve the rank of Chief Engineer. It has minor radiation shielding. + description: It's a high visibility jumpskirt given to those engineers insane enough to achieve the rank of Chief Engineer. components: - type: Sprite sprite: Clothing/Uniforms/Jumpskirt/ce.rsi @@ -180,7 +180,7 @@ parent: ClothingUniformSkirtBase id: ClothingUniformJumpskirtHoS name: head of security's jumpskirt - description: A standard Station Security uniform, adorned with gold emblems and commander's epaulettes. # DeltaV - improved description + description: A standard Station Security uniform, adorned with gold emblems and commander's epaulettes. components: - type: Sprite sprite: DeltaV/Clothing/Uniforms/Jumpskirt/hos.rsi # DeltaV - resprite @@ -191,7 +191,7 @@ parent: ClothingUniformSkirtBase id: ClothingUniformJumpskirtHoSAlt name: head of security's turtleneck - description: It's a turtleneck worn by those strong and disciplined enough to achieve the position of Head of Security. Its sturdy fabric provides minor protection from slash and pierce damage. + description: It's a turtleneck worn by those strong and disciplined enough to achieve the position of Head of Security. components: - type: Sprite sprite: Clothing/Uniforms/Jumpskirt/hos_alt.rsi @@ -365,7 +365,7 @@ parent: ClothingUniformSkirtBase id: ClothingUniformJumpskirtScientist name: scientist jumpskirt - description: It's made of a special fiber that provides minor protection against explosives. It has markings that denote the wearer as a scientist. + description: It's made of a special fiber that increases perceived intelligence and decreases personal ethics. It has markings that denote the wearer as a scientist. components: - type: Sprite sprite: Clothing/Uniforms/Jumpskirt/scientist.rsi @@ -828,3 +828,14 @@ - state: equipped-INNERCLOTHING-jumpskirt - state: equipped-INNERCLOTHING-shirt color: "#b30000" + +- type: entity + parent: ClothingUniformSkirtBase + id: ClothingUniformJumpskirtOldDress + name: old dress + description: A worn-looking dress from a very long time ago. + components: + - type: Sprite + sprite: Clothing/Uniforms/Jumpskirt/olddress.rsi + - type: Clothing + sprite: Clothing/Uniforms/Jumpskirt/olddress.rsi diff --git a/Resources/Prototypes/Entities/Clothing/Uniforms/jumpsuits.yml b/Resources/Prototypes/Entities/Clothing/Uniforms/jumpsuits.yml index 565cc987b19..d2339764f88 100644 --- a/Resources/Prototypes/Entities/Clothing/Uniforms/jumpsuits.yml +++ b/Resources/Prototypes/Entities/Clothing/Uniforms/jumpsuits.yml @@ -31,6 +31,54 @@ - type: Clothing sprite: Clothing/Uniforms/Jumpsuit/bartender.rsi +- type: entity + parent: ClothingUniformBaseFlippable + id: ClothingUniformJumpsuitBartenderNt + name: bartender's nanotrasen uniform + description: A nice and tidy uniform. Shame about the bar though. + components: + - type: Sprite + sprite: Clothing/Uniforms/Jumpsuit/bartender_nt.rsi + - type: Clothing + sprite: Clothing/Uniforms/Jumpsuit/bartender_nt.rsi + +- type: entity + parent: [ ClothingUniformBaseFlipped, ClothingUniformJumpsuitBartenderNt ] + id: ClothingUniformJumpsuitBartenderNtFlipped + name: bartender's nanotrasen uniform + +- type: entity + parent: ClothingUniformBaseFlippable + id: ClothingUniformJumpsuitBartenderIdris + name: bartender's idris incorporated uniform + description: A nice and tidy uniform. Shame about the bar though. + components: + - type: Sprite + sprite: Clothing/Uniforms/Jumpsuit/bartender_idris.rsi + - type: Clothing + sprite: Clothing/Uniforms/Jumpsuit/bartender_idris.rsi + +- type: entity + parent: [ ClothingUniformBaseFlipped, ClothingUniformJumpsuitBartenderIdris ] + id: ClothingUniformJumpsuitBartenderIdrisFlipped + name: bartender's idris incorporated uniform + +- type: entity + parent: ClothingUniformBaseFlippable + id: ClothingUniformJumpsuitBartenderOrion + name: bartender's orion express uniform + description: A nice and tidy uniform. Shame about the bar though. + components: + - type: Sprite + sprite: Clothing/Uniforms/Jumpsuit/bartender_orion.rsi + - type: Clothing + sprite: Clothing/Uniforms/Jumpsuit/bartender_orion.rsi + +- type: entity + parent: [ ClothingUniformBaseFlipped, ClothingUniformJumpsuitBartenderOrion ] + id: ClothingUniformJumpsuitBartenderOrionFlipped + name: bartender's orion express uniform + - type: entity parent: ClothingUniformBase id: ClothingUniformJumpsuitJacketMonkey @@ -83,7 +131,7 @@ parent: ClothingUniformBase id: ClothingUniformJumpsuitChiefEngineer name: chief engineer's jumpsuit - description: It's a high visibility jumpsuit given to those engineers insane enough to achieve the rank of Chief Engineer. It has minor radiation shielding. + description: It's a high visibility jumpsuit given to those engineers insane enough to achieve the rank of Chief Engineer. components: - type: Sprite sprite: Clothing/Uniforms/Jumpsuit/ce.rsi @@ -156,6 +204,55 @@ - type: Clothing sprite: Clothing/Uniforms/Jumpsuit/chef.rsi +- type: entity + parent: ClothingUniformBaseFlippable + id: ClothingUniformJumpsuitChefNt + name: nanotrasen chef uniform + description: Can't cook without this. + components: + - type: Sprite + sprite: Clothing/Uniforms/Jumpsuit/chef_nt.rsi + - type: Clothing + sprite: Clothing/Uniforms/Jumpsuit/chef_nt.rsi + +- type: entity + parent: [ ClothingUniformBaseFlipped, ClothingUniformJumpsuitChefNt ] + id: ClothingUniformChefNtFlipped + name: nanotrasen chef uniform + +- type: entity + parent: ClothingUniformBase + id: ClothingUniformJumpsuitChefIdris + name: idris incorporated chef uniform + description: Can't cook without this. + components: + - type: Sprite + sprite: Clothing/Uniforms/Jumpsuit/chef_idris.rsi + - type: Clothing + sprite: Clothing/Uniforms/Jumpsuit/chef_idris.rsi + +- type: entity + parent: [ ClothingUniformBaseFlipped, ClothingUniformJumpsuitChefIdris ] + id: ClothingUniformChefIdrisFlipped + name: nidris incorporated notrasen chef uniform + +- type: entity + parent: ClothingUniformBase + id: ClothingUniformJumpsuitChefOrion + name: orion express chef uniform + description: Can't cook without this. + components: + - type: Sprite + sprite: Clothing/Uniforms/Jumpsuit/chef_orion.rsi + - type: Clothing + sprite: Clothing/Uniforms/Jumpsuit/chef_orion.rsi + +- type: entity + parent: [ ClothingUniformBaseFlipped, ClothingUniformJumpsuitChefOrion ] + id: ClothingUniformChefOrionFlipped + name: orion express chef uniform + + - type: entity parent: ClothingUniformBase id: ClothingUniformJumpsuitChemistry @@ -374,6 +471,54 @@ - type: Clothing sprite: Clothing/Uniforms/Jumpsuit/hydro.rsi +- type: entity + parent: ClothingUniformBaseFlippable + id: ClothingUniformJumpsuitHydroponicsNt + name: nanotrasen hydroponics jumpsuit + description: Has a strong earthy smell to it. Hopefully it's merely dirty as opposed to soiled. + components: + - type: Sprite + sprite: Clothing/Uniforms/Jumpsuit/hydro_nt.rsi + - type: Clothing + sprite: Clothing/Uniforms/Jumpsuit/hydro_nt.rsi + +- type: entity + parent: [ ClothingUniformBaseFlipped, ClothingUniformJumpsuitHydroponicsNt ] + id: ClothingUniformJumpsuitHydroponicsNtFlipped + name: nanotrasen hydroponics jumpsuit + +- type: entity + parent: ClothingUniformBaseFlippable + id: ClothingUniformJumpsuitHydroponicsIdris + name: idris incorporated hydroponics jumpsuit + description: Has a strong earthy smell to it. Hopefully it's merely dirty as opposed to soiled. + components: + - type: Sprite + sprite: Clothing/Uniforms/Jumpsuit/hydro_idris.rsi + - type: Clothing + sprite: Clothing/Uniforms/Jumpsuit/hydro_idris.rsi + +- type: entity + parent: [ ClothingUniformBaseFlipped, ClothingUniformJumpsuitHydroponicsIdris ] + id: ClothingUniformJumpsuitHydroponicsIdrisFlipped + name: idris incorporated hydroponics jumpsuit + +- type: entity + parent: ClothingUniformBaseFlippable + id: ClothingUniformJumpsuitHydroponicsOrion + name: orion express hydroponics jumpsuit + description: Has a strong earthy smell to it. Hopefully it's merely dirty as opposed to soiled. + components: + - type: Sprite + sprite: Clothing/Uniforms/Jumpsuit/hydro_orion.rsi + - type: Clothing + sprite: Clothing/Uniforms/Jumpsuit/hydro_orion.rsi + +- type: entity + parent: [ ClothingUniformBaseFlipped, ClothingUniformJumpsuitHydroponicsOrion ] + id: ClothingUniformJumpsuitHydroponicsOrionFlipped + name: orion express hydroponics jumpsuit + - type: entity parent: ClothingUniformBase id: ClothingUniformJumpsuitJanitor @@ -385,6 +530,54 @@ - type: Clothing sprite: Clothing/Uniforms/Jumpsuit/janitor.rsi +- type: entity + parent: ClothingUniformBaseFlippable + id: ClothingUniformJumpsuitJanitorNt + name: nanotrasen janitor jumpsuit + description: The jumpsuit for the poor sop with a mop. + components: + - type: Sprite + sprite: Clothing/Uniforms/Jumpsuit/janitor_nt.rsi + - type: Clothing + sprite: Clothing/Uniforms/Jumpsuit/janitor_nt.rsi + +- type: entity + parent: [ ClothingUniformBaseFlipped, ClothingUniformJumpsuitJanitorNt ] + id: ClothingUniformJumpsuitJanitorNtFlipped + name: nanotrasen janitor jumpsuit + +- type: entity + parent: ClothingUniformBaseFlippable + id: ClothingUniformJumpsuitJanitorIdris + name: idris incorporated janitor jumpsuit + description: The jumpsuit for the poor sop with a mop. + components: + - type: Sprite + sprite: Clothing/Uniforms/Jumpsuit/janitor_idris.rsi + - type: Clothing + sprite: Clothing/Uniforms/Jumpsuit/janitor_idris.rsi + +- type: entity + parent: [ ClothingUniformBaseFlipped, ClothingUniformJumpsuitJanitorIdris ] + id: ClothingUniformJumpsuitJanitorIdrisFlipped + name: idris incorporated janitor jumpsuit + +- type: entity + parent: ClothingUniformBaseFlippable + id: ClothingUniformJumpsuitJanitorOrion + name: orion express janitor jumpsuit + description: The jumpsuit for the poor sop with a mop. + components: + - type: Sprite + sprite: Clothing/Uniforms/Jumpsuit/janitor_orion.rsi + - type: Clothing + sprite: Clothing/Uniforms/Jumpsuit/janitor_orion.rsi + +- type: entity + parent: [ ClothingUniformBaseFlipped, ClothingUniformJumpsuitJanitorOrion ] + id: ClothingUniformJumpsuitJanitorOrionFlipped + name: orion express janitor jumpsuit + - type: entity parent: ClothingUniformBase id: ClothingUniformJumpsuitMedicalDoctor @@ -518,7 +711,7 @@ parent: ClothingUniformBase id: ClothingUniformJumpsuitScientist name: scientist jumpsuit - description: It's made of a special fiber that provides minor protection against explosives. It has markings that denote the wearer as a scientist. + description: It's made of a special fiber that increases perceived intelligence and decreases personal ethics. It has markings that denote the wearer as a scientist. components: - type: Sprite sprite: Clothing/Uniforms/Jumpsuit/scientist.rsi @@ -613,6 +806,118 @@ - type: Clothing sprite: Clothing/Uniforms/Jumpsuit/librarian.rsi +- type: entity + parent: ClothingUniformBaseFlippable + id: ClothingUniformJumpsuitLibrarianNt + name: nanotrasen librarian jumpsuit + description: A cosy blue jumper fit for a curator of books. + components: + - type: Sprite + sprite: Clothing/Uniforms/Jumpsuit/librarian_nt.rsi + - type: Clothing + sprite: Clothing/Uniforms/Jumpsuit/librarian_nt.rsi + +- type: entity + parent: [ ClothingUniformBaseFlipped, ClothingUniformJumpsuitLibrarianNt ] + id: ClothingUniformJumpsuitLibrarianFlipped + name: nanotrasen librarian jumpsuit + +- type: entity + parent: ClothingUniformBaseFlippable + id: ClothingUniformJumpsuitLibrarianIdris + name: idris incroporated librarian jumpsuit + description: A cosy teal jumper fit for a curator of books. + components: + - type: Sprite + sprite: Clothing/Uniforms/Jumpsuit/librarian_idris.rsi + - type: Clothing + sprite: Clothing/Uniforms/Jumpsuit/librarian_idris.rsi + +- type: entity + parent: [ ClothingUniformBaseFlipped, ClothingUniformJumpsuitLibrarianIdris ] + id: ClothingUniformJumpsuitLibrarianIdrisFlipped + name: idris incroporated librarian jumpsuit + +- type: entity + parent: ClothingUniformBaseFlippable + id: ClothingUniformJumpsuitLibrarianOrion + name: orion express librarian jumpsuit + description: A cosy brown jumper fit for a curator of books. + components: + - type: Sprite + sprite: Clothing/Uniforms/Jumpsuit/librarian_orion.rsi + - type: Clothing + sprite: Clothing/Uniforms/Jumpsuit/librarian_orion.rsi + +- type: entity + parent: [ ClothingUniformBaseFlipped, ClothingUniformJumpsuitLibrarianOrion ] + id: ClothingUniformJumpsuitLibrarianOrionFlipped + name: orion express librarian jumpsuit + +- type: entity + parent: ClothingUniformBaseFlippable + id: ClothingUniformJumpsuitLibrarianHeph + name: hephaestus industries librarian jumpsuit + description: A cosy green jumper fit for a curator of books. + components: + - type: Sprite + sprite: Clothing/Uniforms/Jumpsuit/librarian_heph.rsi + - type: Clothing + sprite: Clothing/Uniforms/Jumpsuit/librarian_heph.rsi + +- type: entity + parent: [ ClothingUniformBaseFlipped, ClothingUniformJumpsuitLibrarianHeph ] + id: ClothingUniformJumpsuitLibrarianHephFlipped + name: hephaestus industries librarian jumpsuit + +- type: entity + parent: ClothingUniformBaseFlippable + id: ClothingUniformJumpsuitLibrarianPMCG + name: private military contracting group librarian jumpsuit + description: A cosy white jumper fit for a curator of books. + components: + - type: Sprite + sprite: Clothing/Uniforms/Jumpsuit/librarian_pmcg.rsi + - type: Clothing + sprite: Clothing/Uniforms/Jumpsuit/librarian_pmcg.rsi + +- type: entity + parent: [ ClothingUniformBaseFlipped, ClothingUniformJumpsuitLibrarianPMCG ] + id: ClothingUniformJumpsuitLibrarianPMCGFlipped + name: private military contracting group librarian jumpsuit + +- type: entity + parent: ClothingUniformBaseFlippable + id: ClothingUniformJumpsuitLibrarianZav + name: zavodskoi interstellar librarian jumpsuit + description: A blood brown jumper fit for a curator of books. + components: + - type: Sprite + sprite: Clothing/Uniforms/Jumpsuit/librarian_zav.rsi + - type: Clothing + sprite: Clothing/Uniforms/Jumpsuit/librarian_zav.rsi + +- type: entity + parent: [ ClothingUniformBaseFlipped, ClothingUniformJumpsuitLibrarianZav ] + id: ClothingUniformJumpsuitLibrarianZavFlipped + name: zavodskoi interstellar librarian jumpsuit + +- type: entity + parent: ClothingUniformBaseFlippable + id: ClothingUniformJumpsuitLibrarianZeng + name: zeng-hu pharmaceuticals librarian jumpsuit + description: A blood brown jumper fit for a curator of books. + components: + - type: Sprite + sprite: Clothing/Uniforms/Jumpsuit/librarian_zeng.rsi + - type: Clothing + sprite: Clothing/Uniforms/Jumpsuit/librarian_zeng.rsi + +- type: entity + parent: [ ClothingUniformBaseFlipped, ClothingUniformJumpsuitLibrarianZeng ] + id: ClothingUniformJumpsuitLibrarianZengFlipped + name: zeng-hu pharmaceuticals librarian jumpsuit + - type: entity parent: ClothingUniformBase id: ClothingUniformJumpsuitCurator diff --git a/Resources/Prototypes/Entities/Clothing/Uniforms/specific.yml b/Resources/Prototypes/Entities/Clothing/Uniforms/specific.yml index ad02f4aa676..a2c903bac3b 100644 --- a/Resources/Prototypes/Entities/Clothing/Uniforms/specific.yml +++ b/Resources/Prototypes/Entities/Clothing/Uniforms/specific.yml @@ -38,5 +38,5 @@ default: ClothingUniformJumpsuitColorBlack - type: UserInterface interfaces: - - key: enum.ChameleonUiKey.Key - type: ChameleonBoundUserInterface \ No newline at end of file + enum.ChameleonUiKey.Key: + type: ChameleonBoundUserInterface diff --git a/Resources/Prototypes/Entities/Clothing/base_clothing.yml b/Resources/Prototypes/Entities/Clothing/base_clothing.yml index 16532c03e67..bc592616be9 100644 --- a/Resources/Prototypes/Entities/Clothing/base_clothing.yml +++ b/Resources/Prototypes/Entities/Clothing/base_clothing.yml @@ -22,6 +22,12 @@ - type: Geiger attachedToSuit: true +- type: entity + abstract: true + id: AllowSuitStorageClothing + components: + - type: AllowSuitStorage + # for clothing that has a single item slot to insert and alt click out. # inheritors add a whitelisted slot named item - type: entity diff --git a/Resources/Prototypes/Entities/Debugging/tippy.yml b/Resources/Prototypes/Entities/Debugging/tippy.yml new file mode 100644 index 00000000000..292cbed0f1b --- /dev/null +++ b/Resources/Prototypes/Entities/Debugging/tippy.yml @@ -0,0 +1,30 @@ +- type: entity + id: Tippy + noSpawn: true + components: + - type: Sprite + netsync: false + noRot: false + scale: 4,4 + layers: + - sprite: Tips/tippy.rsi + state: left + map: [ "revealing" ] + - sprite: Tips/tippy.rsi + state: right + map: [ "hiding" ] + - sprite: Tips/tippy.rsi + state: down + visible: false + map: [ "speaking" ] + # footstep sounds wile waddling onto the screen. + - type: FootstepModifier + footstepSoundCollection: + collection: FootstepClown + # visuals for the speech bubble. + # only supports background image. + - type: PaperVisuals + backgroundImagePath: "/Textures/Interface/Paper/paper_background_default.svg.96dpi.png" + backgroundPatchMargin: 16.0, 16.0, 16.0, 16.0 + backgroundModulate: "#ffffcc" + fontAccentColor: "#000000" diff --git a/Resources/Prototypes/Entities/Effects/bluespace_flash.yml b/Resources/Prototypes/Entities/Effects/bluespace_flash.yml index 3421f0d9a61..b05681def2d 100644 --- a/Resources/Prototypes/Entities/Effects/bluespace_flash.yml +++ b/Resources/Prototypes/Entities/Effects/bluespace_flash.yml @@ -9,5 +9,98 @@ - type: TimedDespawn lifetime: 1 - type: EmitSoundOnSpawn - sound: - path: /Audio/Effects/Lightning/lightningbolt.ogg \ No newline at end of file + sound: + path: /Audio/Effects/Lightning/lightningbolt.ogg + +- type: entity + id: EffectFlashTelekineticPulse + noSpawn: true + components: + - type: PointLight + radius: 10 + energy: 3.5 + color: "#18abf5" + - type: TimedDespawn + lifetime: 1 + - type: EmitSoundOnSpawn + sound: + path: /Audio/Effects/Lightning/lightningbolt.ogg + +- type: entity + id: EffectFlashShadeskip + noSpawn: true + components: + - type: PointLight + radius: 5 + energy: 3.5 + color: "#7100bd" + - type: TimedDespawn + lifetime: 1 + - type: EmitSoundOnSpawn + sound: + path: /Audio/Effects/Lightning/lightningbolt.ogg + +- type: entity + id: EffectFlashShadowkinShadeskip + noSpawn: true + components: + - type: PointLight + radius: 5 + energy: 3.5 + color: "#7100bd" + - type: TimedDespawn + lifetime: 3 + - type: EmitSoundOnSpawn + sound: + path: /Audio/Effects/Shadowkin/shadeskip.ogg + +- type: entity + id: EffectFlashShadowkinDarkSwapOn + noSpawn: true + components: + - type: PointLight + radius: 5 + energy: 3.5 + color: "#7100bd" + - type: TimedDespawn + lifetime: 3 + - type: EmitSoundOnSpawn + sound: + path: /Audio/Effects/Shadowkin/darkswapon.ogg + +- type: entity + id: EffectFlashShadowkinDarkSwapOff + noSpawn: true + components: + - type: PointLight + radius: 5 + energy: 3.5 + color: "#7100bd" + - type: TimedDespawn + lifetime: 3 + - type: EmitSoundOnSpawn + sound: + path: /Audio/Effects/Shadowkin/darkswapoff.ogg + +- type: entity + id: EffectPyrokineticFlare + noSpawn: true + components: + - type: Sprite + sprite: /Textures/Interface/Actions/psionics.rsi + visible: false + state: pyrokinetic_flare + - type: TriggerOnSpawn + - type: PointLight + radius: 5 + energy: 8 + color: "#ff4500" + - type: LightFade + duration: 0.5 + - type: TimedDespawn + lifetime: 0.5 + - type: FlashOnTrigger + range: 7 + - type: EmitSoundOnSpawn + sound: + path: "/Audio/Effects/flash_bang.ogg" diff --git a/Resources/Prototypes/Entities/Effects/chemistry_effects.yml b/Resources/Prototypes/Entities/Effects/chemistry_effects.yml index 096e88bcb6f..469bab32782 100644 --- a/Resources/Prototypes/Entities/Effects/chemistry_effects.yml +++ b/Resources/Prototypes/Entities/Effects/chemistry_effects.yml @@ -77,6 +77,9 @@ animationState: foam-dissolve - type: Slippery - type: StepTrigger + triggerGroups: + types: + - SlipTile # disabled until foam reagent duplication is fixed #- type: ScoopableSolution # solution: solutionArea @@ -135,7 +138,7 @@ - type: RCDDeconstructable cost: 2 delay: 2 - fx: EffectRCDDeconstruct2 + fx: EffectRCDDeconstruct2 - type: Clickable - type: InteractionOutline - type: Sprite diff --git a/Resources/Prototypes/Entities/Effects/puddle.yml b/Resources/Prototypes/Entities/Effects/puddle.yml index 2c845e1d0f0..7f6125e73d3 100644 --- a/Resources/Prototypes/Entities/Effects/puddle.yml +++ b/Resources/Prototypes/Entities/Effects/puddle.yml @@ -142,13 +142,19 @@ mode: CardinalFlags - type: SolutionContainerManager solutions: - puddle: { maxVol: 1000 } + puddle: + maxVol: 1000 - type: Puddle + - type: MixableSolution + solution: puddle - type: Appearance - type: ActiveEdgeSpreader - type: EdgeSpreader id: Puddle - type: StepTrigger + triggerGroups: + types: + - SlipTile - type: Drink delay: 3 transferAmount: 1 @@ -160,3 +166,42 @@ solution: puddle - type: BadDrink - type: IgnoresFingerprints + - type: PuddleFootPrints + +- type: entity + name: Footstep + id: Footstep + save: false + description: Trace of liquid + components: + - type: Clickable + - type: FootstepModifier + footstepSoundCollection: + collection: FootstepWater + params: + volume: 3 + - type: Transform + noRot: false + - type: Sprite + drawdepth: FloorObjects + color: "#FFFFFF80" + - type: Physics + bodyType: Static + - type: Fixtures + fixtures: + slipFixture: + shape: + !type:PhysShapeAabb + bounds: "-0.4,-0.4,0.4,0.4" + mask: + - ItemMask + layer: + - SlipLayer + hard: false + - type: SolutionContainerManager + solutions: + step: { maxVol: 2 } + - type: FootPrint + - type: Puddle + solution: step + - type: Appearance diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/Food_Drinks/drinks_glass.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/Food_Drinks/drinks_glass.yml index ff9e5124328..f8fc2998d7f 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/Random/Food_Drinks/drinks_glass.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/Food_Drinks/drinks_glass.yml @@ -32,6 +32,7 @@ - DrinkBloodyMaryGlass - DrinkBooger - DrinkBraveBullGlass + - BudgetInsulsDrinkGlass - DrinkCarrotJuice - DrinkCoconutRum - DrinkChocolateGlass @@ -57,6 +58,7 @@ - DrinkIcedGreenTeaGlass - DrinkIcedBeerGlass - DrinkIceCreamGlass + - IrishBoolGlass - DrinkIrishCarBomb - DrinkIrishCoffeeGlass - DrinkLemonadeGlass @@ -78,6 +80,7 @@ - DrinkRewriter - DrinkRoyRogersGlass - DrinkRootBeerFloatGlass + - RubberneckGlass - DrinkRumGlass - DrinkSakeGlass - DrinkSbitenGlass @@ -91,12 +94,15 @@ - DrinkThreeMileIslandGlass - DrinkToxinsSpecialGlass - DrinkVodkaMartiniGlass + - DrinkVodkaRedBool - DrinkVodkaTonicGlass - DrinkWatermelonJuice + - DrinkWatermelonWakeup - DrinkWhiskeyColaGlass - DrinkWhiskeySodaGlass - DrinkWhiteRussianGlass - DrinkWineGlass + - XenoBasherGlass - DrinkShakeBlue - DrinkShakeWhite - DrinkTheMartinez diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/Food_Drinks/food_produce.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/Food_Drinks/food_produce.yml index 6edf341e108..a889b939bde 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/Random/Food_Drinks/food_produce.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/Food_Drinks/food_produce.yml @@ -33,8 +33,8 @@ - FoodOnion - FoodOnionRed - FoodMushroom - - FoodChili - - FoodChilly + - FoodChiliPepper + - FoodChillyPepper - FoodAloe - FoodPoppy - FoodLingzhi diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/salvage.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/salvage.yml index 34bf32d8d7b..4a611fe026e 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/Random/salvage.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/salvage.yml @@ -63,23 +63,78 @@ offset: 0.0 - type: entity - name: salvage loot spawner - id: SalvageLootSpawner + name: Salvage T2 Machine Parts Spawner + id: SalvagePartsT2Spawner parent: MarkerBase components: - type: Sprite layers: - state: red - - sprite: Objects/Weapons/Melee/crusher.rsi - state: icon + - sprite: Objects/Misc/stock_parts.rsi + state: advanced_matter_bin - type: RandomSpawner prototypes: - - WeaponCrusher - - WeaponCrusherDagger - - WeaponCrusherGlaive - - MiningDrill + - AdvancedCapacitorStockPart + - NanoManipulatorStockPart + - AdvancedMatterBinStockPart offset: 0.0 +- type: entity + parent: MarkerBase + id: SalvagePartsT3T4Spawner + name: tier 3/4 machine part + components: + - type: Sprite + layers: + - sprite: Objects/Misc/stock_parts.rsi + state: super_matter_bin + - type: RandomSpawner + rarePrototypes: + - BluespaceCapacitorStockPart + - BluespaceManipulatorStockPart + - BluespaceMatterBinStockPart + rareChance: 0.05 + prototypes: + - SuperCapacitorStockPart + - PicoManipulatorStockPart + - SuperMatterBinStockPart + chance: 0.95 + offset: 0.0 + +- type: entity + parent: MarkerBase + id: SalvagePartsT3Spawner + name: tier 3 machine part + suffix: Spawner + components: + - type: Sprite + layers: + - sprite: Objects/Misc/stock_parts.rsi + state: super_matter_bin + - type: RandomSpawner + prototypes: + - SuperCapacitorStockPart + - PicoManipulatorStockPart + - SuperMatterBinStockPart + offset: 0.0 + +- type: entity + parent: MarkerBase + id: SalvagePartsT4Spawner + name: tier 4 machine part + suffix: Spawner + components: + - type: Sprite + layers: + - sprite: Objects/Misc/stock_parts.rsi + state: bluespace_matter_bin + - type: RandomSpawner + prototypes: + - BluespaceCapacitorStockPart + - PicoManipulatorStockPart + - BluespaceMatterBinStockPart + offset: 0.0 + - type: entity name: Salvage Mob Spawner id: SalvageMobSpawner @@ -228,3 +283,28 @@ - MobFleshLoverSalvage chance: 1 offset: 0.2 + +- type: entity + name: Salvage Loot Spawner + id: SalvageLootSpawner + parent: MarkerBase + components: + - type: Sprite + layers: + - state: red + - sprite: Structures/Storage/Crates/generic.rsi + state: icon + - type: RandomSpawner + rarePrototypes: + - SalvagePartsT2Spawner + - SalvagePartsT3Spawner + - SalvagePartsT3T4Spawner + - SalvagePartsT4Spawner + rareChance: 0.4 + prototypes: + - CrateSalvageAssortedGoodies + - WeaponCrusher + - WeaponCrusherDagger + - WeaponCrusherGlaive + chance: 0.9 + offset: 0.2 diff --git a/Resources/Prototypes/Entities/Markers/Spawners/ghost_roles.yml b/Resources/Prototypes/Entities/Markers/Spawners/ghost_roles.yml index 0b09e0e4c9f..4ade9a9fd45 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/ghost_roles.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/ghost_roles.yml @@ -8,6 +8,8 @@ name: ghost-role-information-rat-king-name description: ghost-role-information-rat-king-description rules: ghost-role-information-rat-king-rules + raffle: + settings: default - type: GhostRoleMobSpawner prototype: MobRatKing - type: Sprite @@ -27,6 +29,8 @@ name: ghost-role-information-remilia-name description: ghost-role-information-remilia-description rules: ghost-role-information-remilia-rules + raffle: + settings: short - type: GhostRoleMobSpawner prototype: MobBatRemilia - type: Sprite @@ -46,6 +50,8 @@ name: ghost-role-information-cerberus-name description: ghost-role-information-cerberus-description rules: ghost-role-information-cerberus-rules + raffle: + settings: default - type: GhostRoleMobSpawner prototype: MobCorgiCerberus - type: Sprite @@ -64,6 +70,8 @@ components: - type: GhostRole rules: ghost-role-information-nukeop-rules + raffle: + settings: default - type: GhostRoleMobSpawner prototype: MobHumanNukeOp - type: Sprite @@ -84,6 +92,8 @@ name: ghost-role-information-loneop-name description: ghost-role-information-loneop-description rules: ghost-role-information-loneop-rules + raffle: + settings: default requirements: - !type:CharacterOverallTimeRequirement min: 172800 # DeltaV - 48 hours @@ -109,6 +119,8 @@ name: ghost-role-information-space-dragon-name description: ghost-role-information-space-dragon-description rules: ghost-role-component-default-rules + raffle: + settings: default - type: GhostRoleMobSpawner prototype: MobDragon - type: Sprite @@ -127,6 +139,8 @@ name: ghost-role-information-space-ninja-name description: ghost-role-information-space-ninja-description rules: ghost-role-information-space-ninja-rules + raffle: + settings: default - type: GhostRoleMobSpawner prototype: MobHumanSpaceNinja - type: Sprite @@ -135,20 +149,3 @@ - state: green - sprite: Objects/Weapons/Melee/energykatana.rsi state: icon - -- type: entity - parent: MarkerBase - id: SpawnPointGhostTerminator - name: terminator spawn point - components: - - type: GhostRole - name: ghost-role-information-exterminator-name - description: ghost-role-information-exterminator-description - rules: ghost-role-information-exterminator-rules - - type: GhostRoleMobSpawner - prototype: MobHumanTerminator - - type: Sprite - layers: - - state: green - - sprite: Mobs/Species/Terminator/parts.rsi - state: full diff --git a/Resources/Prototypes/Entities/Markers/Spawners/mobs.yml b/Resources/Prototypes/Entities/Markers/Spawners/mobs.yml index a59c7d59517..a69c974a39d 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/mobs.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/mobs.yml @@ -849,3 +849,17 @@ - type: ConditionalSpawner prototypes: - MobLuminousEntity + +- type: entity + name: clown spider spawner + id: SpawnClownSpider + parent: MarkerBase + components: + - type: Sprite + layers: + - state: green + - state: clown + sprite: Mobs/Animals/clownspider.rsi + - type: ConditionalSpawner + prototypes: + - MobClownSpider \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/harpy.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/harpy.yml new file mode 100644 index 00000000000..72cccec9528 --- /dev/null +++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/harpy.yml @@ -0,0 +1,436 @@ +# All the Harpy customization + +# Ears Markings +- type: marking + id: HarpyWingDefaultHuescale + bodyPart: RArm + markingCategory: RightArm + speciesRestriction: [Harpy] + coloring: + default: + type: + !type:CategoryColoring + category: Hair + fallbackTypes: + - !type:SimpleColoring + color: "#964b00" + sprites: + - sprite: Mobs/Customization/Harpy/harpy_wings.rsi + state: huescale_harpy + +- type: marking + id: HarpyWingDefaultWhitescale + bodyPart: RArm + markingCategory: RightArm + speciesRestriction: [Harpy] + coloring: + default: + type: + !type:CategoryColoring + category: Hair + fallbackTypes: + - !type:SimpleColoring + color: "#964b00" + sprites: + - sprite: Mobs/Customization/Harpy/harpy_wings.rsi + state: whitescale_harpy + +- type: marking + id: HarpyWingClassic + bodyPart: RArm + markingCategory: RightArm + speciesRestriction: [Harpy] + coloring: + default: + type: + !type:CategoryColoring + category: Hair + fallbackTypes: + - !type:SimpleColoring + color: "#964b00" + sprites: + - sprite: Mobs/Customization/Harpy/harpy_wings.rsi + state: classic_harpy + +- type: marking + id: HarpyWingFoldedHuescale + bodyPart: RArm + markingCategory: RightArm + speciesRestriction: [Harpy] + coloring: + default: + type: + !type:CategoryColoring + category: Hair + fallbackTypes: + - !type:SimpleColoring + color: "#964b00" + sprites: + - sprite: Mobs/Customization/Harpy/harpy_wings.rsi + state: huescale_harpy_folded + +- type: marking + id: HarpyWingFoldedWhitescale + bodyPart: RArm + markingCategory: RightArm + speciesRestriction: [Harpy] + coloring: + default: + type: + !type:CategoryColoring + category: Hair + fallbackTypes: + - !type:SimpleColoring + color: "#964b00" + sprites: + - sprite: Mobs/Customization/Harpy/harpy_wings.rsi + state: whitescale_harpy_folded + +- type: marking + id: HarpyWingOwlHuescale + bodyPart: RArm + markingCategory: RightArm + speciesRestriction: [Harpy] + coloring: + default: + type: + !type:CategoryColoring + category: Hair + fallbackTypes: + - !type:SimpleColoring + color: "#964b00" + sprites: + - sprite: Mobs/Customization/Harpy/harpy_wings.rsi + state: huescale_harpy_wing_owl + +- type: marking + id: HarpyWingOwlWhitescale + bodyPart: RArm + markingCategory: RightArm + speciesRestriction: [Harpy] + coloring: + default: + type: + !type:CategoryColoring + category: Hair + fallbackTypes: + - !type:SimpleColoring + color: "#964b00" + sprites: + - sprite: Mobs/Customization/Harpy/harpy_wings.rsi + state: whitescale_harpy_wing_owl + +- type: marking + id: HarpyEarsDefault + bodyPart: Head + markingCategory: HeadTop + speciesRestriction: [Harpy] + coloring: + default: + type: + !type:CategoryColoring + category: Hair + fallbackTypes: + - !type:SimpleColoring + color: "#964b00" + sprites: + - sprite: Mobs/Customization/Harpy/harpy_ears.rsi + state: harpy_ears_default + +- type: marking + id: HarpyEarsLarge + bodyPart: Head + markingCategory: HeadTop + speciesRestriction: [Harpy] + coloring: + default: + type: + !type:CategoryColoring + category: Hair + fallbackTypes: + - !type:SimpleColoring + color: "#964b00" + sprites: + - sprite: Mobs/Customization/Harpy/harpy_ears.rsi + state: harpy_ears_large + +- type: marking + id: HarpyTailPhoenix + bodyPart: Tail + markingCategory: Tail + speciesRestriction: [Harpy] + coloring: + default: + type: + !type:CategoryColoring + category: Hair + fallbackTypes: + - !type:SimpleColoring + color: "#964b00" + sprites: + - sprite: Mobs/Customization/Harpy/harpy_tails.rsi + state: phoenix_tail + +- type: marking + id: HarpyTailRooster + bodyPart: Tail + markingCategory: Tail + speciesRestriction: [Harpy] + coloring: + default: + type: + !type:CategoryColoring + category: Hair + fallbackTypes: + - !type:SimpleColoring + sprites: + - sprite: Mobs/Customization/Harpy/harpy_tails.rsi + state: rooster_tail + +- type: marking + id: HarpyTailForkedWhitescale + bodyPart: Tail + markingCategory: Tail + speciesRestriction: [Harpy] + coloring: + default: + type: + !type:CategoryColoring + category: Hair + fallbackTypes: + - !type:SimpleColoring + sprites: + - sprite: Mobs/Customization/Harpy/harpy_tails.rsi + state: whitescale_forked_tailfin + +- type: marking + id: HarpyTailForkedHuescale + bodyPart: Tail + markingCategory: Tail + speciesRestriction: [Harpy] + coloring: + default: + type: + !type:CategoryColoring + category: Hair + fallbackTypes: + - !type:SimpleColoring + sprites: + - sprite: Mobs/Customization/Harpy/harpy_tails.rsi + state: huescale_forked_tailfin + +- type: marking + id: HarpyTailFinch + bodyPart: Tail + markingCategory: Tail + speciesRestriction: [Harpy] + coloring: + default: + type: + !type:CategoryColoring + category: Hair + fallbackTypes: + - !type:SimpleColoring + sprites: + - sprite: Mobs/Customization/Harpy/harpy_tails36x36.rsi + state: finch_tail + +- type: marking + id: HarpyTailPeacock + bodyPart: Tail + markingCategory: Tail + speciesRestriction: [Harpy] + coloring: + default: + type: + !type:CategoryColoring + category: Hair + fallbackTypes: + - !type:SimpleColoring + sprites: + - sprite: Mobs/Customization/Harpy/harpy_tails48x48.rsi + state: peacock_tail_feathers + - sprite: Mobs/Customization/Harpy/harpy_tails48x48.rsi + state: peacock_tail_eyes + +- type: marking + id: HarpyTailHaven + bodyPart: Tail + markingCategory: Tail + speciesRestriction: [Harpy] + coloring: + default: + type: + !type:CategoryColoring + category: Hair + fallbackTypes: + - !type:SimpleColoring + sprites: + - sprite: Mobs/Customization/Harpy/harpy_tails.rsi + state: haven_tone_1 + - sprite: Mobs/Customization/Harpy/harpy_tails.rsi + state: haven_tone_2 + +- type: marking + id: HarpyTailForkedLong + bodyPart: Tail + markingCategory: Tail + speciesRestriction: [Harpy] + coloring: + default: + type: + !type:CategoryColoring + category: Hair + fallbackTypes: + - !type:SimpleColoring + sprites: + - sprite: Mobs/Customization/Harpy/harpy_tails.rsi + state: forked_long + +- type: marking + id: HarpyTailSwallow + bodyPart: Tail + markingCategory: Tail + speciesRestriction: [Harpy] + coloring: + default: + type: + !type:CategoryColoring + category: Hair + fallbackTypes: + - !type:SimpleColoring + sprites: + - sprite: Mobs/Customization/Harpy/harpy_tails.rsi + state: swallow_tail + +- type: marking + id: HarpyWing2ToneClassic + bodyPart: RArm + markingCategory: RightArm + speciesRestriction: [Harpy] + sprites: + - sprite: Mobs/Customization/Harpy/harpy_wings.rsi + state: harpy_2tone_1 + - sprite: Mobs/Customization/Harpy/harpy_wings.rsi + state: harpy_2tone_2 + +- type: marking + id: HarpyWing3ToneClassic + bodyPart: RArm + markingCategory: RightArm + speciesRestriction: [Harpy] + sprites: + - sprite: Mobs/Customization/Harpy/harpy_wings.rsi + state: harpy_3tone_1 + - sprite: Mobs/Customization/Harpy/harpy_wings.rsi + state: harpy_3tone_2 + - sprite: Mobs/Customization/Harpy/harpy_wings.rsi + state: harpy_3tone_3 + +- type: marking + id: HarpyWingSpeckledClassic + bodyPart: RArm + markingCategory: RightArm + speciesRestriction: [Harpy] + sprites: + - sprite: Mobs/Customization/Harpy/harpy_wings.rsi + state: harpy_speckled_1 + - sprite: Mobs/Customization/Harpy/harpy_wings.rsi + state: harpy_speckled_2 + +- type: marking + id: HarpyWingUndertoneClassic + bodyPart: RArm + markingCategory: RightArm + speciesRestriction: [Harpy] + sprites: + - sprite: Mobs/Customization/Harpy/harpy_wings.rsi + state: harpy_undertone_1 + - sprite: Mobs/Customization/Harpy/harpy_wings.rsi + state: harpy_undertone_2 + +- type: marking + id: HarpyWingTipsClassic + bodyPart: RArm + markingCategory: RightArm + speciesRestriction: [Harpy] + sprites: + - sprite: Mobs/Customization/Harpy/harpy_wings.rsi + state: harpy_wingtip_1 + - sprite: Mobs/Customization/Harpy/harpy_wings.rsi + state: harpy_wingtip_2 + +- type: marking + id: HarpyWingBat + bodyPart: RArm + markingCategory: RightArm + speciesRestriction: [Harpy] + sprites: + - sprite: Mobs/Customization/Harpy/harpy_wings.rsi + state: bat_wings_tone_1 + - sprite: Mobs/Customization/Harpy/harpy_wings.rsi + state: bat_wings_tone_2 + +- type: marking + id: HarpyWingBionic + bodyPart: RArm + markingCategory: RightArm + speciesRestriction: [Harpy] + sprites: + - sprite: Mobs/Customization/Harpy/harpy_wings.rsi + state: bionic_wings_tone_1 + - sprite: Mobs/Customization/Harpy/harpy_wings.rsi + state: bionic_wings_tone_2 + shader: unshaded + +- type: marking + id: HarpyChestDefault + bodyPart: Chest + markingCategory: Chest + speciesRestriction: [Harpy] + coloring: + default: + type: + !type:CategoryColoring + category: Hair + fallbackTypes: + - !type:SimpleColoring + color: "#964b00" + sprites: + - sprite: Mobs/Customization/Harpy/harpy_chest.rsi + state: upper + - sprite: Mobs/Customization/Harpy/harpy_chest.rsi + state: lower + +- type: marking + id: HarpyLegsDefault + bodyPart: LLeg + markingCategory: RightLeg + speciesRestriction: [Harpy] + coloring: + default: + type: + !type:CategoryColoring + category: Hair + fallbackTypes: + - !type:SimpleColoring + color: "#964b00" + sprites: + - sprite: Mobs/Customization/Harpy/harpy_legs.rsi + state: thighs + +- type: marking + id: HarpyFeetDefault + bodyPart: RFoot + markingCategory: RightLeg + speciesRestriction: [Harpy] + coloring: + default: + fallbackTypes: + - !type:SimpleColoring + color: "#964b00" + sprites: + - sprite: Mobs/Customization/Harpy/harpy_legs.rsi + state: feet + - sprite: Mobs/Customization/Harpy/harpy_legs.rsi + state: talons diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/human_hair.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/human_hair.yml index 449f8aa2cd4..aa983583c5a 100644 --- a/Resources/Prototypes/Entities/Mobs/Customization/Markings/human_hair.yml +++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/human_hair.yml @@ -1160,6 +1160,13 @@ sprites: - sprite: Mobs/Customization/human_hair.rsi state: spiky2 +- type: marking + id: HumanHairSpookyLong + bodyPart: Hair + markingCategory: Hair + sprites: + - sprite: Mobs/Customization/human_hair.rsi + state: spookylong - type: marking id: HumanHairSwept bodyPart: Hair diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/kemonomimi_ears.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/kemonomimi_ears.yml new file mode 100644 index 00000000000..66b4b5242c5 --- /dev/null +++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/kemonomimi_ears.yml @@ -0,0 +1,77 @@ +- type: marking + id: BullishHorns + bodyPart: HeadTop + markingCategory: HeadTop + speciesRestriction: [Human] + coloring: + default: + type: + !type:CategoryColoring + category: Hair + fallbackTypes: + - !type:SkinColoring + sprites: + - sprite: Mobs/Customization/kemonomimi-ears.rsi + state: bullishhorns + +- type: marking + id: BunnyEars + bodyPart: HeadTop + markingCategory: HeadTop + speciesRestriction: [Human] + coloring: + default: + type: + !type:CategoryColoring + category: Hair + fallbackTypes: + - !type:SkinColoring + layers: + bunnyearstone2: + type: + !type:SimpleColoring + color: "#FFFFFF" + sprites: + - sprite: Mobs/Customization/kemonomimi-ears.rsi + state: bunnyearstone1 + - sprite: Mobs/Customization/kemonomimi-ears.rsi + state: bunnyearstone2 + +- type: marking + id: FoxEars + bodyPart: HeadTop + markingCategory: HeadTop + speciesRestriction: [Human] + coloring: + default: + type: + !type:CategoryColoring + category: Hair + fallbackTypes: + - !type:SkinColoring + sprites: + - sprite: Mobs/Customization/kemonomimi-ears.rsi + state: foxears + +- type: marking + id: GoatHorns + bodyPart: HeadTop + markingCategory: HeadTop + speciesRestriction: [Human] + coloring: + default: + type: + !type:CategoryColoring + category: Hair + fallbackTypes: + - !type:SkinColoring + layers: + goathornstone22: + type: + !type:SimpleColoring + color: "#FFFFFF" + sprites: + - sprite: Mobs/Customization/kemonomimi-ears.rsi + state: goathornstone1 + - sprite: Mobs/Customization/kemonomimi-ears.rsi + state: goathornstone2 \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/kemonomimi_tails.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/kemonomimi_tails.yml new file mode 100644 index 00000000000..d45d366ec04 --- /dev/null +++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/kemonomimi_tails.yml @@ -0,0 +1,169 @@ +- type: marking + id: BunnyTail + bodyPart: Tail + markingCategory: Tail + speciesRestriction: [Human] + coloring: + default: + type: + !type:CategoryColoring + category: Hair + fallbackTypes: + - !type:CategoryColoring + category: FacialHair + - !type:SkinColoring + sprites: + - sprite: Mobs/Customization/kemonomimi-tails.rsi + state: bunnytail + +- type: marking + id: DobleFur + bodyPart: Tail + markingCategory: Tail + speciesRestriction: [Human] + coloring: + default: + type: + !type:CategoryColoring + category: Hair + fallbackTypes: + - !type:CategoryColoring + category: FacialHair + - !type:SkinColoring + sprites: + - sprite: Mobs/Customization/kemonomimi-tails.rsi + state: doblefurtailtone1 + - sprite: Mobs/Customization/kemonomimi-tails.rsi + state: doblefurtailtone2 + +- type: marking + id: FluffyTail + bodyPart: Tail + markingCategory: Tail + speciesRestriction: [Human] + coloring: + default: + type: + !type:CategoryColoring + category: Hair + fallbackTypes: + - !type:CategoryColoring + category: FacialHair + - !type:SkinColoring + sprites: + - sprite: Mobs/Customization/kemonomimi-tails.rsi + state: fluffytail + +- type: marking + id: FoxNineTails + bodyPart: Tail + markingCategory: Tail + speciesRestriction: [Human] + coloring: + default: + type: + !type:CategoryColoring + category: Hair + fallbackTypes: + - !type:CategoryColoring + category: FacialHair + - !type:SkinColoring + sprites: + - sprite: Mobs/Customization/kemonomimi-tails.rsi + state: foxninetailstone1 + - sprite: Mobs/Customization/kemonomimi-tails.rsi + state: foxninetailstone2 + +- type: marking + id: FoxThreeTails + bodyPart: Tail + markingCategory: Tail + speciesRestriction: [Human] + coloring: + default: + type: + !type:CategoryColoring + category: Hair + fallbackTypes: + - !type:CategoryColoring + category: FacialHair + - !type:SkinColoring + sprites: + - sprite: Mobs/Customization/kemonomimi-tails.rsi + state: foxthreetailstone1 + - sprite: Mobs/Customization/kemonomimi-tails.rsi + state: foxthreetailstone2 + +- type: marking + id: HorseTailCulty + bodyPart: Tail + markingCategory: Tail + speciesRestriction: [Human] + coloring: + default: + type: + !type:CategoryColoring + category: Hair + fallbackTypes: + - !type:CategoryColoring + category: FacialHair + - !type:SkinColoring + sprites: + - sprite: Mobs/Customization/kemonomimi-tails.rsi + state: horsetailculty + +- type: marking + id: HorseTailLong + bodyPart: Tail + markingCategory: Tail + speciesRestriction: [Human] + coloring: + default: + type: + !type:CategoryColoring + category: Hair + fallbackTypes: + - !type:CategoryColoring + category: FacialHair + - !type:SkinColoring + sprites: + - sprite: Mobs/Customization/kemonomimi-tails.rsi + state: horsetaillong + +- type: marking + id: SharkTail + bodyPart: Tail + markingCategory: Tail + speciesRestriction: [Human] + coloring: + default: + type: + !type:CategoryColoring + category: Hair + fallbackTypes: + - !type:CategoryColoring + category: FacialHair + - !type:SkinColoring + sprites: + - sprite: Mobs/Customization/kemonomimi-tails.rsi + state: sharktail + +- type: marking + id: TasselTail + bodyPart: Tail + markingCategory: Tail + speciesRestriction: [Human] + coloring: + default: + type: + !type:CategoryColoring + category: Hair + fallbackTypes: + - !type:CategoryColoring + category: FacialHair + - !type:SkinColoring + sprites: + - sprite: Mobs/Customization/kemonomimi-tails.rsi + state: tasseltailtone1 + - sprite: Mobs/Customization/kemonomimi-tails.rsi + state: tasseltailtone2 \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/oni_horns.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/oni_horns.yml new file mode 100644 index 00000000000..88d4ee493db --- /dev/null +++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/oni_horns.yml @@ -0,0 +1,525 @@ +- type: marking + id: OniHornTallCurved + bodyPart: HeadTop + markingCategory: HeadTop + forcedColoring: false + speciesRestriction: [Oni] + sprites: + - sprite: Mobs/Customization/Oni/oni_horns48x48.rsi + state: tall_curved +- type: marking + id: OniHornTallCurved3Tone + bodyPart: HeadTop + markingCategory: HeadTop + forcedColoring: false + speciesRestriction: [Oni] + sprites: + - sprite: Mobs/Customization/Oni/oni_horns48x48.rsi + state: tall_curved_3tone_1 + - sprite: Mobs/Customization/Oni/oni_horns48x48.rsi + state: tall_curved_3tone_2 + - sprite: Mobs/Customization/Oni/oni_horns48x48.rsi + state: tall_curved_3tone_3 +- type: marking + id: OniHornTallBull + bodyPart: HeadTop + markingCategory: HeadTop + forcedColoring: false + speciesRestriction: [Oni] + sprites: + - sprite: Mobs/Customization/Oni/oni_horns48x48.rsi + state: tall_bull +- type: marking + id: OniHornTallBull3Tone + bodyPart: HeadTop + markingCategory: HeadTop + forcedColoring: false + speciesRestriction: [Oni] + sprites: + - sprite: Mobs/Customization/Oni/oni_horns48x48.rsi + state: tall_bull_3tone_1 + - sprite: Mobs/Customization/Oni/oni_horns48x48.rsi + state: tall_bull_3tone_2 + - sprite: Mobs/Customization/Oni/oni_horns48x48.rsi + state: tall_bull_3tone_3 +- type: marking + id: OniHornCrowned + bodyPart: HeadTop + markingCategory: HeadTop + forcedColoring: false + speciesRestriction: [Oni] + sprites: + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: crowned + +- type: marking + id: OniHornSerket + bodyPart: HeadTop + markingCategory: HeadTop + forcedColoring: false + speciesRestriction: [Oni] + sprites: + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: serket + +- type: marking + id: OniHornSerket3Tone + bodyPart: HeadTop + markingCategory: HeadTop + forcedColoring: false + speciesRestriction: [Oni] + sprites: + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: serket_3tone_1 + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: serket_3tone_2 + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: serket_3tone_3 + +- type: marking + id: OniHornPisces + bodyPart: HeadTop + markingCategory: HeadTop + forcedColoring: false + speciesRestriction: [Oni] + sprites: + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: pisces + +- type: marking + id: OniHornPisces2Tone + bodyPart: HeadTop + markingCategory: HeadTop + forcedColoring: false + speciesRestriction: [Oni] + sprites: + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: pisces_2tone_1 + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: pisces_2tone_2 + +- type: marking + id: OniHornPisces3Tone + bodyPart: HeadTop + markingCategory: HeadTop + forcedColoring: false + speciesRestriction: [Oni] + sprites: + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: pisces_3tone_1 + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: pisces_3tone_2 + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: pisces_3tone_3 + +- type: marking + id: OniHornVirgo + bodyPart: HeadTop + markingCategory: HeadTop + forcedColoring: false + speciesRestriction: [Oni] + sprites: + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: virgo + +- type: marking + id: OniHornVirgo3Tone + bodyPart: HeadTop + markingCategory: HeadTop + forcedColoring: false + speciesRestriction: [Oni] + sprites: + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: virgo_3tone_1 + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: virgo_3tone_2 + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: virgo_3tone_3 + +- type: marking + id: OniHornSagittarius + bodyPart: HeadTop + markingCategory: HeadTop + forcedColoring: false + speciesRestriction: [Oni] + sprites: + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: sagittarius + +- type: marking + id: OniHornSagittarius3Tone + bodyPart: HeadTop + markingCategory: HeadTop + forcedColoring: false + speciesRestriction: [Oni] + sprites: + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: sagittarius_3tone_1 + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: sagittarius_3tone_2 + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: sagittarius_3tone_3 + +- type: marking + id: OniHornVantas + bodyPart: HeadTop + markingCategory: HeadTop + forcedColoring: false + speciesRestriction: [Oni] + sprites: + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: vantas + +- type: marking + id: OniHornVantas3Tone + bodyPart: HeadTop + markingCategory: HeadTop + forcedColoring: false + speciesRestriction: [Oni] + sprites: + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: vantas_3tone_1 + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: vantas_3tone_2 + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: vantas_3tone_3 + +- type: marking + id: OniHornMakara + bodyPart: HeadTop + markingCategory: HeadTop + forcedColoring: false + speciesRestriction: [Oni] + sprites: + - sprite: Mobs/Customization/Oni/oni_horns48x48.rsi + state: makara + +- type: marking + id: OniHornMakara2Tone + bodyPart: HeadTop + markingCategory: HeadTop + forcedColoring: false + speciesRestriction: [Oni] + sprites: + - sprite: Mobs/Customization/Oni/oni_horns48x48.rsi + state: makara_2tone_1 + - sprite: Mobs/Customization/Oni/oni_horns48x48.rsi + state: makara_2tone_2 + +- type: marking + id: OniHornMakara3Tone + bodyPart: HeadTop + markingCategory: HeadTop + forcedColoring: false + speciesRestriction: [Oni] + sprites: + - sprite: Mobs/Customization/Oni/oni_horns48x48.rsi + state: makara_3tone_1 + - sprite: Mobs/Customization/Oni/oni_horns48x48.rsi + state: makara_3tone_2 + - sprite: Mobs/Customization/Oni/oni_horns48x48.rsi + state: makara_3tone_3 + +- type: marking + id: OniHornNepeta + bodyPart: HeadTop + markingCategory: HeadTop + forcedColoring: false + speciesRestriction: [Oni] + sprites: + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: nepeta + +- type: marking + id: OniHornNepeta3Tone + bodyPart: HeadTop + markingCategory: HeadTop + forcedColoring: false + speciesRestriction: [Oni] + sprites: + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: nepeta_3tone_1 + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: nepeta_3tone_2 + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: nepeta_3tone_3 + +- type: marking + id: OniHornTaurus + bodyPart: HeadTop + markingCategory: HeadTop + forcedColoring: false + speciesRestriction: [Oni] + sprites: + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: taurus + +- type: marking + id: OniHornTaurus2Tone + bodyPart: HeadTop + markingCategory: HeadTop + forcedColoring: false + speciesRestriction: [Oni] + sprites: + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: taurus_2tone_1 + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: taurus_2tone_2 + +- type: marking + id: OniHornTaurus3Tone + bodyPart: HeadTop + markingCategory: HeadTop + forcedColoring: false + speciesRestriction: [Oni] + sprites: + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: taurus_3tone_1 + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: taurus_3tone_2 + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: taurus_3tone_3 + +- type: marking + id: OniHornAries + bodyPart: HeadTop + markingCategory: HeadTop + forcedColoring: false + speciesRestriction: [Oni] + sprites: + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: aries + +- type: marking + id: OniHornAries3Tone + bodyPart: HeadTop + markingCategory: HeadTop + forcedColoring: false + speciesRestriction: [Oni] + sprites: + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: aries_3tone_1 + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: aries_3tone_2 + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: aries_3tone_3 + +- type: marking + id: OniHornTavris + bodyPart: HeadTop + markingCategory: HeadTop + forcedColoring: false + speciesRestriction: [Oni] + sprites: + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: tavris + +- type: marking + id: OniHornTavris3Tone + bodyPart: HeadTop + markingCategory: HeadTop + forcedColoring: false + speciesRestriction: [Oni] + sprites: + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: tavris_3tone_1 + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: tavris_3tone_2 + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: tavris_3tone_3 + +- type: marking + id: OniHornInclined + bodyPart: HeadTop + markingCategory: HeadTop + forcedColoring: false + speciesRestriction: [Oni] + sprites: + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: inclined + +- type: marking + id: OniHornInclined3Tone + bodyPart: HeadTop + markingCategory: HeadTop + forcedColoring: false + speciesRestriction: [Oni] + sprites: + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: inclined_3tone_1 + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: inclined_3tone_2 + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: inclined_3tone_3 + +- type: marking + id: OniHornWavy + bodyPart: HeadTop + markingCategory: HeadTop + forcedColoring: false + speciesRestriction: [Oni] + sprites: + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: wavy + +- type: marking + id: OniHornWavy2Tone + bodyPart: HeadTop + markingCategory: HeadTop + forcedColoring: false + speciesRestriction: [Oni] + sprites: + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: wavy_2tone_1 + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: wavy_2tone_2 + +- type: marking + id: OniHornWavy3Tone + bodyPart: HeadTop + markingCategory: HeadTop + forcedColoring: false + speciesRestriction: [Oni] + sprites: + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: wavy_3tone_1 + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: wavy_3tone_2 + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: wavy_3tone_3 + +- type: marking + id: OniHornAntlers + bodyPart: HeadTop + markingCategory: HeadTop + forcedColoring: false + speciesRestriction: [Oni] + sprites: + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: antlers_2tone_1 + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: antlers_2tone_2 + +- type: marking + id: OniHornAntlers3Tone + bodyPart: HeadTop + markingCategory: HeadTop + forcedColoring: false + speciesRestriction: [Oni] + sprites: + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: antlers_3tone_1 + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: antlers_3tone_2 + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: antlers_3tone_3 + +- type: marking + id: OniHornUnicorn + bodyPart: HeadTop + markingCategory: HeadTop + forcedColoring: false + speciesRestriction: [Oni] + sprites: + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: unicorn + +- type: marking + id: OniHornErebia + bodyPart: HeadTop + markingCategory: HeadTop + forcedColoring: false + speciesRestriction: [Oni] + sprites: + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: erebia + +- type: marking + id: OniHornErebia3Tone + bodyPart: HeadTop + markingCategory: HeadTop + forcedColoring: false + speciesRestriction: [Oni] + sprites: + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: erebia_3tone_1 + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: erebia_3tone_2 + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: erebia_3tone_3 + +- type: marking + id: OniHornErebiaRings + bodyPart: HeadTop + markingCategory: HeadTop + forcedColoring: false + speciesRestriction: [Oni] + sprites: + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: erebia + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: erebia_rings + +- type: marking + id: OniHornDoubleThick + bodyPart: HeadTop + markingCategory: HeadTop + forcedColoring: false + speciesRestriction: [Oni] + sprites: + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: double_thick + +- type: marking + id: OniHornDoubleThick2Tone + bodyPart: HeadTop + markingCategory: HeadTop + forcedColoring: false + speciesRestriction: [Oni] + sprites: + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: double_thick_2tone_1 + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: double_thick_2tone_2 + +- type: marking + id: OniHornDoubleThick3Tone + bodyPart: HeadTop + markingCategory: HeadTop + forcedColoring: false + speciesRestriction: [Oni] + sprites: + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: double_thick_3tone_1 + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: double_thick_3tone_2 + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: double_thick_3tone_3 + +- type: marking + id: OniHornDoubleCurved3Tone + bodyPart: HeadTop + markingCategory: HeadTop + forcedColoring: false + speciesRestriction: [Oni] + sprites: + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: double_curved_3tone_1 + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: double_curved_3tone_2 + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: double_curved_3tone_3 + +- type: marking + id: OniHornDoubleCurvedOutwards3Tone + bodyPart: HeadTop + markingCategory: HeadTop + forcedColoring: false + speciesRestriction: [Oni] + sprites: + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: double_curved_outwards_3tone_1 + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: double_curved_outwards_3tone_2 + - sprite: Mobs/Customization/Oni/oni_horns.rsi + state: double_curved_outwards_3tone_3 diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/reptilian.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/reptilian.yml index f5749121e26..6197f820308 100644 --- a/Resources/Prototypes/Entities/Mobs/Customization/Markings/reptilian.yml +++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/reptilian.yml @@ -2,7 +2,7 @@ id: LizardFrillsAquatic bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Reptilian] + speciesRestriction: [Reptilian, Human] sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: frills_aquatic @@ -11,7 +11,7 @@ id: LizardFrillsShort bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Reptilian] + speciesRestriction: [Reptilian, Human] sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: frills_short @@ -20,7 +20,7 @@ id: LizardFrillsSimple bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Reptilian] + speciesRestriction: [Reptilian, Human] sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: frills_simple @@ -29,7 +29,7 @@ id: LizardFrillsDivinity bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Reptilian] + speciesRestriction: [Reptilian, Human] sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: frills_divinity @@ -38,7 +38,7 @@ id: LizardFrillsBig bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Reptilian] + speciesRestriction: [Reptilian, Human] sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: frills_big @@ -47,7 +47,7 @@ id: LizardFrillsAxolotl bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Reptilian] + speciesRestriction: [Reptilian, Human] sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: frills_axolotl @@ -56,18 +56,27 @@ id: LizardFrillsHood bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Reptilian] + speciesRestriction: [Reptilian, Human] sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: frills_hood_primary - sprite: Mobs/Customization/reptilian_parts.rsi state: frills_hood_secondary +- type: marking + id: LizardFrillsNeckfull + bodyPart: HeadSide + markingCategory: HeadSide + speciesRestriction: [Reptilian] + sprites: + - sprite: Mobs/Customization/reptilian_parts.rsi + state: frills_neckfull + - type: marking id: LizardHornsAngler bodyPart: HeadTop markingCategory: HeadTop - speciesRestriction: [Reptilian] + speciesRestriction: [Reptilian, Human] sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: horns_angler @@ -76,7 +85,7 @@ id: LizardHornsCurled bodyPart: HeadTop markingCategory: HeadTop - speciesRestriction: [Reptilian] + speciesRestriction: [Reptilian, Human] sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: horns_curled @@ -85,7 +94,7 @@ id: LizardHornsRam bodyPart: HeadTop markingCategory: HeadTop - speciesRestriction: [Reptilian] + speciesRestriction: [Reptilian, Human] sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: horns_ram @@ -94,7 +103,7 @@ id: LizardHornsShort bodyPart: HeadTop markingCategory: HeadTop - speciesRestriction: [Reptilian] + speciesRestriction: [Reptilian, Human] sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: horns_short @@ -103,7 +112,7 @@ id: LizardHornsSimple bodyPart: HeadTop markingCategory: HeadTop - speciesRestriction: [Reptilian] + speciesRestriction: [Reptilian, Human] sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: horns_simple @@ -112,7 +121,7 @@ id: LizardHornsDouble bodyPart: HeadTop markingCategory: HeadTop - speciesRestriction: [Reptilian] + speciesRestriction: [Reptilian, Human] sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: horns_double @@ -121,7 +130,7 @@ id: LizardTailSmooth bodyPart: Tail markingCategory: Tail - speciesRestriction: [Reptilian] + speciesRestriction: [Reptilian, Human] sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: tail_smooth_primary @@ -132,7 +141,7 @@ id: LizardTailLarge bodyPart: Tail markingCategory: Tail - speciesRestriction: [Reptilian] + speciesRestriction: [Reptilian, Human] sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: tail_large @@ -141,7 +150,7 @@ id: LizardTailSpikes bodyPart: Tail markingCategory: Tail - speciesRestriction: [Reptilian] + speciesRestriction: [Reptilian, Human] sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: tail_spikes @@ -150,7 +159,7 @@ id: LizardTailLTiger bodyPart: Tail markingCategory: Tail - speciesRestriction: [Reptilian] + speciesRestriction: [Reptilian, Human] sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: tail_ltiger @@ -159,7 +168,7 @@ id: LizardTailDTiger bodyPart: Tail markingCategory: Tail - speciesRestriction: [Reptilian] + speciesRestriction: [Reptilian, Human] sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: tail_dtiger @@ -184,11 +193,22 @@ - sprite: Mobs/Customization/reptilian_parts.rsi state: snout_sharp +- type: marking + id: LizardSnoutSplotch + bodyPart: Snout + markingCategory: Snout + speciesRestriction: [Reptilian] + sprites: + - sprite: Mobs/Customization/reptilian_parts.rsi + state: snout_splotch_primary + - sprite: Mobs/Customization/reptilian_parts.rsi + state: snout_splotch_secondary + - type: marking id: LizardChestTiger bodyPart: Chest markingCategory: Chest - speciesRestriction: [Reptilian] + speciesRestriction: [Reptilian, Shadowkin] sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: body_tiger @@ -242,7 +262,7 @@ id: LizardHornsArgali bodyPart: HeadTop markingCategory: HeadTop - speciesRestriction: [Reptilian] + speciesRestriction: [Reptilian, Human] sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: horns_argali @@ -251,7 +271,7 @@ id: LizardHornsAyrshire bodyPart: HeadTop markingCategory: HeadTop - speciesRestriction: [Reptilian] + speciesRestriction: [Reptilian, Human] sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: horns_ayrshire @@ -260,7 +280,7 @@ id: LizardHornsMyrsore bodyPart: HeadTop markingCategory: HeadTop - speciesRestriction: [Reptilian] + speciesRestriction: [Reptilian, Human] sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: horns_myrsore @@ -269,7 +289,7 @@ id: LizardHornsBighorn bodyPart: HeadTop markingCategory: HeadTop - speciesRestriction: [Reptilian] + speciesRestriction: [Reptilian, Human] sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: horns_bighorn @@ -278,7 +298,7 @@ id: LizardHornsKoboldEars bodyPart: HeadTop markingCategory: HeadTop - speciesRestriction: [Reptilian] + speciesRestriction: [Reptilian, Human] sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: horns_kobold_ears @@ -287,7 +307,7 @@ id: LizardHornsFloppyKoboldEars bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Reptilian] + speciesRestriction: [Reptilian, Human] sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: horns_floppy_kobold_ears diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/shadowkin.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/shadowkin.yml new file mode 100644 index 00000000000..f86852a9879 --- /dev/null +++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/shadowkin.yml @@ -0,0 +1,83 @@ +# Ears + +- type: marking + id: EarsShadowkin + bodyPart: HeadTop + markingCategory: HeadTop + speciesRestriction: [Shadowkin] + forcedColoring: true + sprites: + - sprite: Mobs/Customization/Shadowkin/ears.rsi + state: shadowkin + +- type: marking + id: EarsShadowkinStriped + bodyPart: HeadTop + markingCategory: HeadTop + speciesRestriction: [Shadowkin] + coloring: + default: + type: + !type:SkinColoring + layers: + shadowkin_stripes: + type: + !type:SimpleColoring + color: "#FFFFFF" + sprites: + - sprite: Mobs/Customization/Shadowkin/ears.rsi + state: shadowkin + - sprite: Mobs/Customization/Shadowkin/ears.rsi + state: shadowkin_stripes + +# Tails + +- type: marking + id: TailShadowkin + bodyPart: Tail + markingCategory: Tail + speciesRestriction: [Shadowkin] + forcedColoring: true + sprites: + - sprite: Mobs/Customization/Shadowkin/tails64x32.rsi + state: shadowkin + +- type: marking + id: TailShadowkinBig + bodyPart: Tail + markingCategory: Tail + speciesRestriction: [Shadowkin] + forcedColoring: true + sprites: + - sprite: Mobs/Customization/Shadowkin/tails64x32.rsi + state: shadowkin_big + +- type: marking + id: TailShadowkinBigFluff + bodyPart: Tail + markingCategory: Tail + speciesRestriction: [Shadowkin] + forcedColoring: true + sprites: + - sprite: Mobs/Customization/Shadowkin/tails64x32.rsi + state: shadowkin_big_fluff + +- type: marking + id: TailShadowkinShorter + bodyPart: Tail + markingCategory: Tail + speciesRestriction: [Shadowkin] + forcedColoring: true + sprites: + - sprite: Mobs/Customization/Shadowkin/tails32x32.rsi + state: shadowkin_shorter + +- type: marking + id: TailShadowkinMedium + bodyPart: Tail + markingCategory: Tail + speciesRestriction: [Shadowkin] + forcedColoring: true + sprites: + - sprite: Mobs/Customization/Shadowkin/tails32x32.rsi + state: shadowkin_medium \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/slime.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/slime.yml index 57b25798e74..0bff2347471 100644 --- a/Resources/Prototypes/Entities/Mobs/Customization/Markings/slime.yml +++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/slime.yml @@ -2,7 +2,7 @@ id: SlimeGradientLeftArm bodyPart: LArm markingCategory: LeftArm - speciesRestriction: [SlimePerson] + speciesRestriction: [SlimePerson, Shadowkin] sprites: - sprite: Mobs/Customization/slime_parts.rsi state: gradient_l_arm @@ -11,7 +11,7 @@ id: SlimeGradientRightArm bodyPart: RArm markingCategory: RightArm - speciesRestriction: [SlimePerson] + speciesRestriction: [SlimePerson, Shadowkin] sprites: - sprite: Mobs/Customization/slime_parts.rsi state: gradient_r_arm @@ -20,7 +20,7 @@ id: SlimeGradientLeftLeg bodyPart: LLeg markingCategory: LeftLeg - speciesRestriction: [SlimePerson] + speciesRestriction: [SlimePerson, Shadowkin] sprites: - sprite: Mobs/Customization/slime_parts.rsi state: gradient_l_leg @@ -29,7 +29,7 @@ id: SlimeGradientRightLeg bodyPart: RLeg markingCategory: RightLeg - speciesRestriction: [SlimePerson] + speciesRestriction: [SlimePerson, Shadowkin] sprites: - sprite: Mobs/Customization/slime_parts.rsi state: gradient_r_leg @@ -38,7 +38,7 @@ id: SlimeGradientLeftFoot bodyPart: LFoot markingCategory: LeftFoot - speciesRestriction: [SlimePerson] + speciesRestriction: [SlimePerson, Shadowkin] sprites: - sprite: Mobs/Customization/slime_parts.rsi state: gradient_l_foot @@ -47,7 +47,7 @@ id: SlimeGradientRightFoot bodyPart: RFoot markingCategory: RightFoot - speciesRestriction: [SlimePerson] + speciesRestriction: [SlimePerson, Shadowkin] sprites: - sprite: Mobs/Customization/slime_parts.rsi state: gradient_r_foot @@ -56,7 +56,7 @@ id: SlimeGradientLeftHand bodyPart: LHand markingCategory: LeftHand - speciesRestriction: [SlimePerson] + speciesRestriction: [SlimePerson, Shadowkin] sprites: - sprite: Mobs/Customization/slime_parts.rsi state: gradient_l_hand @@ -65,7 +65,7 @@ id: SlimeGradientRightHand bodyPart: RHand markingCategory: RightHand - speciesRestriction: [SlimePerson] + speciesRestriction: [SlimePerson, Shadowkin] sprites: - sprite: Mobs/Customization/slime_parts.rsi state: gradient_r_hand diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/tattoos.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/tattoos.yml index 88307085397..93a16fcfd3c 100644 --- a/Resources/Prototypes/Entities/Mobs/Customization/Markings/tattoos.yml +++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/tattoos.yml @@ -2,7 +2,7 @@ id: TattooHiveChest bodyPart: Chest markingCategory: Chest - speciesRestriction: [Human, Dwarf, Felinid, Oni] # Delta V - Felinid, Oni + speciesRestriction: [Human, Dwarf, Felinid, Oni, Shadowkin] # Delta V - Felinid, Oni coloring: default: type: @@ -16,7 +16,7 @@ id: TattooNightlingChest bodyPart: Chest markingCategory: Chest - speciesRestriction: [Human, Dwarf, Felinid, Oni] # Delta V - Felinid, Oni + speciesRestriction: [Human, Dwarf, Felinid, Oni, Shadowkin] # Delta V - Felinid, Oni coloring: default: type: @@ -30,7 +30,7 @@ id: TattooSilverburghLeftLeg bodyPart: LLeg markingCategory: LeftLeg - speciesRestriction: [Human, Dwarf, Felinid, Oni] # Delta V - Felinid, Oni + speciesRestriction: [Human, Dwarf, Felinid, Oni, Shadowkin] # Delta V - Felinid, Oni coloring: default: type: @@ -44,7 +44,7 @@ id: TattooSilverburghRightLeg bodyPart: RLeg markingCategory: RightLeg - speciesRestriction: [Human, Dwarf, Felinid, Oni] # Delta V - Felinid, Oni + speciesRestriction: [Human, Dwarf, Felinid, Oni, Shadowkin] # Delta V - Felinid, Oni coloring: default: type: @@ -58,7 +58,7 @@ id: TattooCampbellLeftArm bodyPart: LArm markingCategory: LeftArm - speciesRestriction: [Human, Dwarf, Felinid, Oni] # Delta V - Felinid, Oni + speciesRestriction: [Human, Dwarf, Felinid, Oni, Shadowkin] # Delta V - Felinid, Oni coloring: default: type: @@ -72,7 +72,7 @@ id: TattooCampbellRightArm bodyPart: RArm markingCategory: RightArm - speciesRestriction: [Human, Dwarf, Felinid, Oni] # Delta V - Felinid, Oni + speciesRestriction: [Human, Dwarf, Felinid, Oni, Shadowkin] # Delta V - Felinid, Oni coloring: default: type: @@ -86,7 +86,7 @@ id: TattooCampbellLeftLeg bodyPart: LLeg markingCategory: LeftLeg - speciesRestriction: [Human, Dwarf, Felinid, Oni] # Delta V - Felinid, Oni + speciesRestriction: [Human, Dwarf, Felinid, Oni, Shadowkin] # Delta V - Felinid, Oni coloring: default: type: @@ -100,7 +100,7 @@ id: TattooCampbellRightLeg bodyPart: RLeg markingCategory: RightLeg - speciesRestriction: [Human, Dwarf, Felinid, Oni] # Delta V - Felinid, Oni + speciesRestriction: [Human, Dwarf, Felinid, Oni, Shadowkin] # Delta V - Felinid, Oni coloring: default: type: diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/vox_facial_hair.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/vox_facial_hair.yml index d4cc4b00e31..6ec5f8999a1 100644 --- a/Resources/Prototypes/Entities/Mobs/Customization/Markings/vox_facial_hair.yml +++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/vox_facial_hair.yml @@ -1,40 +1,44 @@ - type: marking - id: VoxFacialHairColonel + id: VoxFacialHairBeard bodyPart: FacialHair markingCategory: FacialHair speciesRestriction: [Vox] sprites: - sprite: Mobs/Customization/vox_facial_hair.rsi - state: vox_colonel_s + state: beard_s + - type: marking - id: VoxFacialHairFu + id: VoxFacialHairColonel bodyPart: FacialHair markingCategory: FacialHair speciesRestriction: [Vox] sprites: - sprite: Mobs/Customization/vox_facial_hair.rsi - state: vox_fu_s + state: colonel_s + - type: marking - id: VoxFacialHairNeck + id: VoxFacialHairFu bodyPart: FacialHair markingCategory: FacialHair speciesRestriction: [Vox] sprites: - sprite: Mobs/Customization/vox_facial_hair.rsi - state: vox_neck_s + state: fu_s + - type: marking - id: VoxFacialHairBeard + id: VoxFacialHairMane bodyPart: FacialHair markingCategory: FacialHair speciesRestriction: [Vox] sprites: - sprite: Mobs/Customization/vox_facial_hair.rsi - state: vox_beard_s + state: mane_s + - type: marking - id: VoxFacialHairRuffBeard + id: VoxFacialHairNeck bodyPart: FacialHair markingCategory: FacialHair speciesRestriction: [Vox] sprites: - sprite: Mobs/Customization/vox_facial_hair.rsi - state: vox_ruff_beard_s + state: neck_s diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/vox_hair.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/vox_hair.yml index 975de63204d..9a847b40a99 100644 --- a/Resources/Prototypes/Entities/Mobs/Customization/Markings/vox_hair.yml +++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/vox_hair.yml @@ -1,91 +1,102 @@ - type: marking - id: VoxHairShortQuills + id: VoxHairAfro bodyPart: Hair markingCategory: Hair speciesRestriction: [Vox] sprites: - sprite: Mobs/Customization/vox_hair.rsi - state: vox_shortquills_s + state: afro_s + - type: marking - id: VoxHairKingly + id: VoxHairBraids bodyPart: Hair markingCategory: Hair speciesRestriction: [Vox] sprites: - sprite: Mobs/Customization/vox_hair.rsi - state: vox_kingly_s + state: braid_s + - type: marking - id: VoxHairAfro + id: VoxHairCrestedQuills bodyPart: Hair markingCategory: Hair speciesRestriction: [Vox] sprites: - sprite: Mobs/Customization/vox_hair.rsi - state: vox_afro_s + state: crestedquills_s + - type: marking - id: VoxHairMohawk + id: VoxHairEmperorQuills bodyPart: Hair markingCategory: Hair speciesRestriction: [Vox] sprites: - sprite: Mobs/Customization/vox_hair.rsi - state: vox_mohawk_s + state: emperorquills_s + - type: marking - id: VoxHairYasuhiro + id: VoxHairFlowing bodyPart: Hair markingCategory: Hair speciesRestriction: [Vox] sprites: - sprite: Mobs/Customization/vox_hair.rsi - state: vox_yasu_s + state: flowing_s + - type: marking - id: VoxHairHorns + id: VoxHairHawk bodyPart: Hair markingCategory: Hair speciesRestriction: [Vox] sprites: - sprite: Mobs/Customization/vox_hair.rsi - state: vox_horns_s + state: hawk_s + - type: marking - id: VoxHairNights + id: VoxHairHorns bodyPart: Hair markingCategory: Hair speciesRestriction: [Vox] sprites: - sprite: Mobs/Customization/vox_hair.rsi - state: vox_nights_s + state: horns_s + - type: marking - id: VoxHairSurf + id: VoxHairKeelQuills bodyPart: Hair markingCategory: Hair speciesRestriction: [Vox] sprites: - sprite: Mobs/Customization/vox_hair.rsi - state: vox_surf_s + state: keelquills_s + - type: marking - id: VoxHairCropped + id: VoxHairKeetQuills bodyPart: Hair markingCategory: Hair speciesRestriction: [Vox] sprites: - sprite: Mobs/Customization/vox_hair.rsi - state: vox_cropped_s + state: keetquills_s + - type: marking - id: VoxHairRuffhawk + id: VoxHairKingly bodyPart: Hair markingCategory: Hair speciesRestriction: [Vox] sprites: - sprite: Mobs/Customization/vox_hair.rsi - state: vox_ruff_hawk_s + state: kingly_s + - type: marking - id: VoxHairRows + id: VoxHairLongBraid bodyPart: Hair markingCategory: Hair speciesRestriction: [Vox] sprites: - sprite: Mobs/Customization/vox_hair.rsi - state: vox_rows_s + state: afro_s + - type: marking id: VoxHairMange bodyPart: Hair @@ -93,7 +104,26 @@ speciesRestriction: [Vox] sprites: - sprite: Mobs/Customization/vox_hair.rsi - state: vox_mange_s + state: mange_s + +- type: marking + id: VoxHairMohawk + bodyPart: Hair + markingCategory: Hair + speciesRestriction: [Vox] + sprites: + - sprite: Mobs/Customization/vox_hair.rsi + state: mohawk_s + +- type: marking + id: VoxHairNights + bodyPart: Hair + markingCategory: Hair + speciesRestriction: [Vox] + sprites: + - sprite: Mobs/Customization/vox_hair.rsi + state: nights_s + - type: marking id: VoxHairPony bodyPart: Hair @@ -101,4 +131,67 @@ speciesRestriction: [Vox] sprites: - sprite: Mobs/Customization/vox_hair.rsi - state: vox_pony_s + state: ponytail_s + +- type: marking + id: VoxHairRazorClipped + bodyPart: Hair + markingCategory: Hair + speciesRestriction: [Vox] + sprites: + - sprite: Mobs/Customization/vox_hair.rsi + state: razor_clipped_s + +- type: marking + id: VoxHairRazor + bodyPart: Hair + markingCategory: Hair + speciesRestriction: [Vox] + sprites: + - sprite: Mobs/Customization/vox_hair.rsi + state: razor_s + +- type: marking + id: VoxHairSortBraid + bodyPart: Hair + markingCategory: Hair + speciesRestriction: [Vox] + sprites: + - sprite: Mobs/Customization/vox_hair.rsi + state: short_braid_s + +- type: marking + id: VoxHairShortQuills + bodyPart: Hair + markingCategory: Hair + speciesRestriction: [Vox] + sprites: + - sprite: Mobs/Customization/vox_hair.rsi + state: shortquills_s + +- type: marking + id: VoxHairSurf + bodyPart: Hair + markingCategory: Hair + speciesRestriction: [Vox] + sprites: + - sprite: Mobs/Customization/vox_hair.rsi + state: surf_s + +- type: marking + id: VoxHairTielQuills + bodyPart: Hair + markingCategory: Hair + speciesRestriction: [Vox] + sprites: + - sprite: Mobs/Customization/vox_hair.rsi + state: tielquills_s + +- type: marking + id: VoxHairYasu + bodyPart: Hair + markingCategory: Hair + speciesRestriction: [Vox] + sprites: + - sprite: Mobs/Customization/vox_hair.rsi + state: yasu_s \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/vox_parts.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/vox_parts.yml new file mode 100644 index 00000000000..96acd068828 --- /dev/null +++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/vox_parts.yml @@ -0,0 +1,145 @@ +- type: marking + id: VoxBeak + bodyPart: Snout + markingCategory: Snout + forcedColoring: true + speciesRestriction: [Vox] + sprites: + - sprite: Mobs/Customization/vox_parts.rsi + state: beak + coloring: + default: + type: + !type:SimpleColoring + color: "#937e3d" + +- type: marking + id: VoxLArmScales + bodyPart: LArm + markingCategory: LeftArm + forcedColoring: true + speciesRestriction: [Vox] + sprites: + - sprite: Mobs/Customization/vox_parts.rsi + state: l_arm + coloring: + default: + type: + !type:SimpleColoring + color: "#937e3d" + +- type: marking + id: VoxLLegScales + bodyPart: LLeg + markingCategory: LeftLeg + forcedColoring: true + speciesRestriction: [Vox] + sprites: + - sprite: Mobs/Customization/vox_parts.rsi + state: l_leg + coloring: + default: + type: + !type:SimpleColoring + color: "#937e3d" + +- type: marking + id: VoxRArmScales + bodyPart: RArm + markingCategory: RightArm + forcedColoring: true + speciesRestriction: [Vox] + sprites: + - sprite: Mobs/Customization/vox_parts.rsi + state: r_arm + coloring: + default: + type: + !type:SimpleColoring + color: "#937e3d" + +- type: marking + id: VoxRLegScales + bodyPart: RLeg + markingCategory: RightLeg + forcedColoring: true + speciesRestriction: [Vox] + sprites: + - sprite: Mobs/Customization/vox_parts.rsi + state: r_leg + coloring: + default: + type: + !type:SimpleColoring + color: "#937e3d" + +- type: marking + id: VoxRHandScales + bodyPart: RHand + markingCategory: RightHand + forcedColoring: true + speciesRestriction: [Vox] + sprites: + - sprite: Mobs/Customization/vox_parts.rsi + state: r_hand + coloring: + default: + type: + !type:SimpleColoring + color: "#937e3d" + +- type: marking + id: VoxLHandScales + bodyPart: LHand + markingCategory: LeftHand + forcedColoring: true + speciesRestriction: [Vox] + sprites: + - sprite: Mobs/Customization/vox_parts.rsi + state: l_hand + coloring: + default: + type: + !type:SimpleColoring + color: "#937e3d" + +- type: marking + id: VoxLFootScales + bodyPart: LFoot + markingCategory: LeftFoot + forcedColoring: true + speciesRestriction: [Vox] + sprites: + - sprite: Mobs/Customization/vox_parts.rsi + state: l_foot + coloring: + default: + type: + !type:SimpleColoring + color: "#937e3d" + +- type: marking + id: VoxRFootScales + bodyPart: RFoot + markingCategory: RightFoot + forcedColoring: true + speciesRestriction: [Vox] + sprites: + - sprite: Mobs/Customization/vox_parts.rsi + state: r_foot + coloring: + default: + type: + !type:SimpleColoring + color: "#937e3d" + +- type: marking + id: VoxTail + bodyPart: Tail + markingCategory: Tail + speciesRestriction: [Vox] + forcedColoring: true + sprites: + - sprite: Mobs/Customization/vox_parts.rsi + # Ideally this should use the normal tail sprite and apply an actual mask over it, not just use a butchered sprite + state: tail_stenciled diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/vox_tattoos.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/vox_tattoos.yml new file mode 100644 index 00000000000..a802d284f3b --- /dev/null +++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/vox_tattoos.yml @@ -0,0 +1,55 @@ +- type: marking + id: TattooVoxHeartLeftArm + bodyPart: LArm + markingCategory: LeftArm + speciesRestriction: [Vox] + coloring: + default: + type: + !type:TattooColoring + fallbackColor: "#666666" + sprites: + - sprite: Mobs/Customization/vox_tattoos.rsi + state: heart_l_arm + +- type: marking + id: TattooVoxHeartRightArm + bodyPart: RArm + markingCategory: RightArm + speciesRestriction: [Vox] + coloring: + default: + type: + !type:TattooColoring + fallbackColor: "#666666" + sprites: + - sprite: Mobs/Customization/vox_tattoos.rsi + state: heart_r_arm + +- type: marking + id: TattooVoxHiveChest + bodyPart: Chest + markingCategory: Chest + speciesRestriction: [Vox] + coloring: + default: + type: + !type:TattooColoring + fallbackColor: "#666666" + sprites: + - sprite: Mobs/Customization/vox_tattoos.rsi + state: hive_s + +- type: marking + id: TattooVoxNightlingChest + bodyPart: Chest + markingCategory: Chest + speciesRestriction: [Vox] + coloring: + default: + type: + !type:TattooColoring + fallbackColor: "#666666" + sprites: + - sprite: Mobs/Customization/vox_tattoos.rsi + state: nightling_s diff --git a/Resources/Prototypes/Entities/Mobs/Customization/cyberlimbs/hesphiastos.yml b/Resources/Prototypes/Entities/Mobs/Customization/cyberlimbs/hesphiastos.yml index 1c14d7df0c3..e3bcd07f3a4 100644 --- a/Resources/Prototypes/Entities/Mobs/Customization/cyberlimbs/hesphiastos.yml +++ b/Resources/Prototypes/Entities/Mobs/Customization/cyberlimbs/hesphiastos.yml @@ -95,7 +95,7 @@ - type: marking id: CyberLimbsMarkingHesphiastosRHand bodyPart: RHand - markingCategory: RightArm + markingCategory: RightHand speciesRestriction: [IPC, Moth, Dwarf, Human, Arachnid, Felinid, Oni, Vulpkanin, HumanoidFoxes, Reptilian] sprites: - sprite: Mobs/Customization/cyberlimbs/hesphiastos/hesphiastos_main.rsi @@ -107,7 +107,7 @@ - type: marking id: CyberLimbsMarkingHesphiastosRLeg bodyPart: RLeg - markingCategory: RightHand + markingCategory: RightLeg speciesRestriction: [IPC, Moth, Dwarf, Human, Arachnid, Felinid, Oni, Vulpkanin, HumanoidFoxes, Reptilian] sprites: - sprite: Mobs/Customization/cyberlimbs/hesphiastos/hesphiastos_main.rsi diff --git a/Resources/Prototypes/Entities/Mobs/Customization/cyberlimbs/xion.yml b/Resources/Prototypes/Entities/Mobs/Customization/cyberlimbs/xion.yml index b5254df5f5b..84b630b788b 100644 --- a/Resources/Prototypes/Entities/Mobs/Customization/cyberlimbs/xion.yml +++ b/Resources/Prototypes/Entities/Mobs/Customization/cyberlimbs/xion.yml @@ -68,7 +68,7 @@ - type: marking id: CyberLimbsMarkingXionLFoot bodyPart: LFoot - markingCategory: RightFoot + markingCategory: LeftFoot speciesRestriction: [IPC] sprites: - sprite: Mobs/Customization/cyberlimbs/xion/xion_main.rsi diff --git a/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml b/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml index e0d2c7bc7aa..7974b06870e 100644 --- a/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml +++ b/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml @@ -63,12 +63,12 @@ locPrefix: silicon - type: UserInterface interfaces: - - key: enum.SiliconLawsUiKey.Key - type: SiliconLawBoundUserInterface - - key: enum.BorgUiKey.Key - type: BorgBoundUserInterface - - key: enum.StrippingUiKey.Key - type: StrippableBoundUserInterface + enum.SiliconLawsUiKey.Key: + type: SiliconLawBoundUserInterface + enum.BorgUiKey.Key: + type: BorgBoundUserInterface + enum.StrippingUiKey.Key: + type: StrippableBoundUserInterface - type: ActivatableUI key: enum.BorgUiKey.Key - type: SiliconLawBound @@ -129,11 +129,14 @@ proto: robot - type: Speech speechVerb: Robotic - speechSounds: Pai + speechSounds: Borg - type: Vocal sounds: Unsexed: UnisexSilicon - type: UnblockableSpeech + - type: FootstepModifier + footstepSoundCollection: + collection: FootstepBorg - type: Construction graph: Cyborg containers: @@ -205,29 +208,47 @@ - type: StandingState - type: Tag tags: - - ShoesRequiredStepTriggerImmune - DoorBumpOpener + - FootstepSound - CanPilot - type: Emoting - # - type: GuideHelp - # guides: - # - Cyborgs + - type: GuideHelp + guides: + - Cyborgs + - type: StepTriggerImmune - type: Eye visMask: - PsionicInvisibility - Normal - type: LanguageKnowledge speaks: - - GalacticCommon + - TauCetiBasic - RobotTalk understands: - - GalacticCommon + - TauCetiBasic - RobotTalk - type: PsionicInsulation +- type: entity + abstract: true + id: BaseBorgTransponder + components: + - type: BorgTransponder + - type: DeviceNetwork + deviceNetId: Wireless + receiveFrequencyId: CyborgControl + transmitFrequencyId: RoboticsConsole + # explosion does most of its damage in the center and less at the edges + - type: Explosive + explosionType: Minibomb + totalIntensity: 30 + intensitySlope: 20 + maxIntensity: 20 + canCreateVacuum: false # its for killing the borg not the station + - type: entity id: BaseBorgChassisNT - parent: BaseBorgChassis + parent: [BaseBorgChassis, BaseBorgTransponder] abstract: true components: - type: NpcFactionMember @@ -239,30 +260,36 @@ - AllAccessBorg - type: AccessReader access: [["Command"], ["Research"]] - - type: ShowSecurityIcons + - type: ShowJobIcons + - type: ShowMindShieldIcons - type: entity id: BaseBorgChassisSyndicate parent: BaseBorgChassis abstract: true components: - - type: NpcFactionMember - factions: - - Syndicate - - type: Access - tags: - - NuclearOperative - - SyndicateAgent - - type: AccessReader - access: [["SyndicateAgent"], ["NuclearOperative"]] - - type: SiliconLawProvider - laws: SyndicateStatic - - type: IntrinsicRadioTransmitter - channels: - - Binary - - Syndicate - - type: ActiveRadio - channels: - - Syndicate - - type: ShowSyndicateIcons - - type: MovementAlwaysTouching + - type: NpcFactionMember + factions: + - Syndicate + - type: Access + tags: + - NuclearOperative + - SyndicateAgent + - type: AccessReader + access: [["SyndicateAgent"], ["NuclearOperative"]] + - type: SiliconLawProvider + laws: SyndicateStatic + - type: IntrinsicRadioTransmitter + channels: + - Binary + - Syndicate + - type: ActiveRadio + channels: + - Syndicate + - type: ShowSyndicateIcons + - type: MovementAlwaysTouching + - type: Speech + speechSounds: SyndieBorg + - type: Vocal + sounds: + Unsexed: UnisexSiliconSyndicate diff --git a/Resources/Prototypes/Entities/Mobs/Cyborgs/borg_chassis.yml b/Resources/Prototypes/Entities/Mobs/Cyborgs/borg_chassis.yml index 5056fda4c06..e0dc4a0ad43 100644 --- a/Resources/Prototypes/Entities/Mobs/Cyborgs/borg_chassis.yml +++ b/Resources/Prototypes/Entities/Mobs/Cyborgs/borg_chassis.yml @@ -20,6 +20,11 @@ - BorgModuleGeneric hasMindState: robot_e noMindState: robot_e_r + - type: BorgTransponder + sprite: + sprite: Mobs/Silicon/chassis.rsi + state: robot + name: cyborg - type: Construction node: cyborg - type: Speech @@ -57,6 +62,11 @@ - BorgModuleCargo hasMindState: miner_e noMindState: miner_e_r + - type: BorgTransponder + sprite: + sprite: Mobs/Silicon/chassis.rsi + state: miner + name: salvage cyborg - type: Construction node: mining - type: IntrinsicRadioTransmitter @@ -100,6 +110,11 @@ - BorgModuleEngineering hasMindState: engineer_e noMindState: engineer_e_r + - type: BorgTransponder + sprite: + sprite: Mobs/Silicon/chassis.rsi + state: engineer + name: engineer cyborg - type: Construction node: engineer - type: IntrinsicRadioTransmitter @@ -153,6 +168,11 @@ - BorgModuleJanitor hasMindState: janitor_e noMindState: janitor_e_r + - type: BorgTransponder + sprite: + sprite: Mobs/Silicon/chassis.rsi + state: janitor + name: janitor cyborg - type: Construction node: janitor - type: IntrinsicRadioTransmitter @@ -206,6 +226,11 @@ - BorgModuleMedical hasMindState: medical_e noMindState: medical_e_r + - type: BorgTransponder + sprite: + sprite: Mobs/Silicon/chassis.rsi + state: medical + name: medical cyborg - type: Construction node: medical - type: IntrinsicRadioTransmitter @@ -224,11 +249,14 @@ access: [["Medical"], ["Command"], ["Research"]] - type: Inventory templateId: borgDutch + - type: FootstepModifier + footstepSoundCollection: + collection: FootstepHoverBorg - type: FabricateActions actions: - ActionFabricateLollipop - ActionFabricateGumball - - type: SiliconLawProvider # Delta-V - Adds custom lawset for Medical cyborg + - type: SiliconLawProvider laws: Medical - type: entity @@ -255,6 +283,11 @@ - BorgModuleService hasMindState: service_e noMindState: service_e_r + - type: BorgTransponder + sprite: + sprite: Mobs/Silicon/chassis.rsi + state: service + name: service cyborg - type: Construction node: service - type: IntrinsicRadioTransmitter diff --git a/Resources/Prototypes/Entities/Mobs/Debugging/debug_counter.yml b/Resources/Prototypes/Entities/Mobs/Debugging/debug_counter.yml new file mode 100644 index 00000000000..05707c7151c --- /dev/null +++ b/Resources/Prototypes/Entities/Mobs/Debugging/debug_counter.yml @@ -0,0 +1,53 @@ +- type: entity + parent: MobHuman + id: MobDebugCounter + name: debug counter + description: He can count + suffix: AI, DEBUG + components: + - type: HTN + rootTask: + task: DebugCounterCompound + blackboard: + MinimumIdleTime: !type:Single + 0.5 + MaximumIdleTime: !type:Single + 0.5 + Count: !type:Single + 0 + +- type: entity + parent: MobHuman + id: MobDebugRandomCounter + name: debug random counter + description: He can randomize + suffix: AI, DEBUG + components: + - type: HTN + rootTask: + task: DebugRandomCounterCompound + blackboard: + MinimumIdleTime: !type:Single + 1 + MaximumIdleTime: !type:Single + 1 + Count: !type:Single + 0 + +- type: entity + parent: MobHuman + id: MobDebugRandomLess + name: debug random less + description: He can lessing + suffix: AI, DEBUG + components: + - type: HTN + rootTask: + task: DebugRandomLessCompound + blackboard: + MinimumIdleTime: !type:Single + 1 + MaximumIdleTime: !type:Single + 1 + Count: !type:Single + 0 diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/Rslimes.yml b/Resources/Prototypes/Entities/Mobs/NPCs/Rslimes.yml new file mode 100644 index 00000000000..3512b518150 --- /dev/null +++ b/Resources/Prototypes/Entities/Mobs/NPCs/Rslimes.yml @@ -0,0 +1,287 @@ +- type: entity + id: ReagentSlimeIchor + parent: ReagentSlime + suffix: Ichor + components: + - type: Bloodstream + bloodReagent: Ichor + - type: PointLight + color: "#f4692e" + - type: Sprite + drawdepth: Mobs + sprite: Mobs/Aliens/elemental.rsi + layers: + - map: [ "enum.DamageStateVisualLayers.Base" ] + state: alive + color: "#f4692e" + +- type: entity + id: ReagentSlimeBleach + parent: ReagentSlime + suffix: Bleach + components: + - type: Bloodstream + bloodReagent: Bleach + - type: PointLight + color: "#a1000b" + - type: Sprite + drawdepth: Mobs + sprite: Mobs/Aliens/elemental.rsi + layers: + - map: [ "enum.DamageStateVisualLayers.Base" ] + state: alive + color: "#a1000b" + +- type: entity + id: ReagentSlimeSoap + parent: ReagentSlime + suffix: Soap + components: + - type: Bloodstream + bloodReagent: SoapReagent + - type: PointLight + color: "#c8dfc9" + - type: Sprite + drawdepth: Mobs + sprite: Mobs/Aliens/elemental.rsi + layers: + - map: [ "enum.DamageStateVisualLayers.Base" ] + state: alive + color: "#c8dfc9" + +- type: entity + id: ReagentSlimeSpacelube + parent: ReagentSlime + suffix: Spacelube + components: + - type: Bloodstream + bloodReagent: SpaceLube + - type: PointLight + color: "#77b58e" + - type: Sprite + drawdepth: Mobs + sprite: Mobs/Aliens/elemental.rsi + layers: + - map: [ "enum.DamageStateVisualLayers.Base" ] + state: alive + color: "#77b58e" + +- type: entity + id: ReagentSlimeBuzzachloricbees + parent: ReagentSlime + suffix: Buzzachloricbees + components: + - type: Bloodstream + bloodReagent: BuzzochloricBees + - type: PointLight + color: "#FFD35D" + - type: Sprite + drawdepth: Mobs + sprite: Mobs/Aliens/elemental.rsi + layers: + - map: [ "enum.DamageStateVisualLayers.Base" ] + state: alive + color: "#FFD35D" + +- type: entity + id: ReagentSlimeWehjuice + parent: ReagentSlime + suffix: Wehjuice + components: + - type: Bloodstream + bloodReagent: JuiceThatMakesYouWeh + - type: PointLight + color: "#59b23a" + - type: Sprite + drawdepth: Mobs + sprite: Mobs/Aliens/elemental.rsi + layers: + - map: [ "enum.DamageStateVisualLayers.Base" ] + state: alive + color: "#59b23a" + +- type: entity + id: ReagentCognizine + parent: ReagentSlime + suffix: Cognizine + components: + - type: Bloodstream + bloodReagent: Cognizine + - type: PointLight + color: "#b50ee8" + - type: Sprite + drawdepth: Mobs + sprite: Mobs/Aliens/elemental.rsi + layers: + - map: [ "enum.DamageStateVisualLayers.Base" ] + state: alive + color: "#b50ee8" + +- type: entity + id: ReagentSlimeNecrosol + parent: ReagentSlime + suffix: Necrosol + components: + - type: Bloodstream + bloodReagent: Necrosol + - type: PointLight + color: "#86a5bd" + - type: Sprite + drawdepth: Mobs + sprite: Mobs/Aliens/elemental.rsi + layers: + - map: [ "enum.DamageStateVisualLayers.Base" ] + state: alive + color: "#86a5bd" + +- type: entity + id: ReagentSlimeSpaceDrugs + parent: ReagentSlime + suffix: SpaceDrugs + components: + - type: Bloodstream + bloodReagent: SpaceDrugs + - type: PointLight + color: "#63806e" + - type: Sprite + drawdepth: Mobs + sprite: Mobs/Aliens/elemental.rsi + layers: + - map: [ "enum.DamageStateVisualLayers.Base" ] + state: alive + color: "#63806e" + +- type: entity + id: ReagentSlimeUnstableMutagen + parent: ReagentSlime + suffix: UnstableMutagen + components: + - type: Bloodstream + bloodReagent: UnstableMutagen + - type: PointLight + color: "#00ff5f" + - type: Sprite + drawdepth: Mobs + sprite: Mobs/Aliens/elemental.rsi + layers: + - map: [ "enum.DamageStateVisualLayers.Base" ] + state: alive + color: "#00ff5f" + +- type: entity + id: ReagentSlimeLead + parent: ReagentSlime + suffix: Lead + components: + - type: Bloodstream + bloodReagent: Lead + - type: PointLight + color: "#5C6274" + - type: Sprite + drawdepth: Mobs + sprite: Mobs/Aliens/elemental.rsi + layers: + - map: [ "enum.DamageStateVisualLayers.Base" ] + state: alive + color: "#5C6274" + +- type: entity + id: ReagentSlimechlorinetriflouride + parent: ReagentSlime + suffix: chlorinetriflouride + components: + - type: Bloodstream + bloodReagent: ChlorineTrifluoride + - type: PointLight + color: "#FFC8C8" + - type: Sprite + drawdepth: Mobs + sprite: Mobs/Aliens/elemental.rsi + layers: + - map: [ "enum.DamageStateVisualLayers.Base" ] + state: alive + color: "#FFC8C8" + +- type: entity + id: ReagentSlimePotassium + parent: ReagentSlime + suffix: Potassium + components: + - type: Bloodstream + bloodReagent: Potassium + - type: PointLight + color: "#c6c8cc" + - type: Sprite + drawdepth: Mobs + sprite: Mobs/Aliens/elemental.rsi + layers: + - map: [ "enum.DamageStateVisualLayers.Base" ] + state: alive + color: "#c6c8cc" + +- type: entity + id: reagentslimeVents + parent: BaseGameRule + noSpawn: true + components: + - type: StationEvent + startAnnouncement: true + earliestStart: 20 + reoccurrenceDelay: 12 + minimumPlayers: 30 + weight: 6 # Really weak compared to other critters + duration: 60 + - type: VentCrittersRule + entries: + - id: ReagentSlimeBeer + prob: 0.003 + - id: ReagentSlimePax + prob: 0.001 + - id: ReagentSlimeNocturine + prob: 0.001 + - id: ReagentSlimeTHC + prob: 0.002 + - id: ReagentSlimeBicaridine + prob: 0.002 + - id: ReagentSlimeToxin + prob: 0.002 + - id: ReagentSlimeNapalm + prob: 0.002 + - id: ReagentSlimeOmnizine + prob: 0.003 + - id: ReagentSlimeMuteToxin + prob: 0.002 + - id: ReagentSlimeNorepinephricAcid + prob: 0.002 + - id: ReagentSlimeEphedrine + prob: 0.002 + - id: ReagentSlimeRobustHarvest + prob: 0.003 + - id: ReagentSlimeIchor + prob: 0.002 + - id: ReagentSlimeBleach + prob: 0.002 + - id: ReagentSlimeSoap + prob: 0.002 + - id: ReagentSlimeSpacelube + prob: 0.002 + - id: ReagentSlimeBuzzachloricbees + prob: 0.002 + - id: ReagentSlimeWehjuice + prob: 0.003 + - id: ReagentCognizine + prob: 0.003 + - id: ReagentSlimeNecrosol + prob: 0.002 + - id: ReagentSlimeSpaceDrugs + prob: 0.003 + - id: ReagentSlimeUnstableMutagen + prob: 0.001 + - id: ReagentSlimeLead + prob: 0.001 + - id: ReagentSlimechlorinetriflouride + prob: 0.002 + - id: ReagentSlimePotassium + prob: 0.002 + - id: ReagentSlimeLotophagoiOil + prob: 0.001 diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml index b4aed6e5d3e..8dd348f47ec 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml @@ -17,6 +17,7 @@ - type: Speech speechSounds: Squeak speechVerb: SmallMob + allowedEmotes: ['Squeak'] - type: Fixtures fixtures: fix1: @@ -66,6 +67,9 @@ tags: - VimPilot - type: RandomBark + barkType: mouse + minTime: 10 # Mice like to squeak, I think. You can always put your pet mouse to sleep if it gets annoying + maxTime: 160 - type: entity name: bee @@ -135,11 +139,7 @@ Quantity: 5 - type: ZombieImmune - type: RandomBark - barks: - - Bzzzzz - - Bzzz bzzz - - Bzzzzzzzzzzzz - - Bzz + barkType: bee barkMultiplier: 1.5 - type: entity @@ -254,6 +254,7 @@ factions: - Passive - type: RandomBark + barkType: chicken - type: entity parent: MobChicken @@ -457,7 +458,10 @@ - type: GhostTakeoverAvailable - type: Speech speechVerb: Moth - speechSounds: Chitter # Delta-V - Eep! + speechSounds: Chitter + allowedEmotes: ['Chitter', 'Squeak'] + - type: FaxableObject + insertingState: inserting_mothroach - type: MothAccent - type: Sprite sprite: Mobs/Animals/mothroach.rsi @@ -641,6 +645,7 @@ factions: - Passive - type: RandomBark + barkType: chicken # Duh barkMultiplier: 0.7 - type: entity @@ -817,17 +822,11 @@ - type: HTN rootTask: task: RuminantCompound - # - type: GuideHelp - # guides: - # - Chef + - type: GuideHelp + guides: + - Chef - type: RandomBark - barks: - - Mooooooo - - Moo - - Huff - - Mooooooooooo - - Moooooo - - Moooo + barkType: cow barkMultiplier: 3 @@ -867,6 +866,7 @@ - type: Speech speechVerb: Arachnid speechSounds: Arachnid + allowedEmotes: ['Click', 'Chitter'] - type: DamageStateVisuals states: Alive: @@ -901,11 +901,7 @@ - type: Body prototype: AnimalHemocyanin - type: RandomBark - barks: - - click clack - - clack - - clickity clack - - clack clack + barkType: crab - type: entity name: goat @@ -1143,8 +1139,8 @@ - id: FoodMeat - type: UserInterface interfaces: - - key: enum.StrippingUiKey.Key - type: StrippableBoundUserInterface + enum.StrippingUiKey.Key: + type: StrippableBoundUserInterface - type: DamageStateVisuals states: Alive: @@ -1216,6 +1212,8 @@ templateId: monkey speciesId: monkey - type: InventorySlots + - type: Deathgasp + prototype: MonkeyDeathgasp - type: Cuffable - type: RotationVisuals defaultRotation: 90 @@ -1235,8 +1233,8 @@ - type: Strippable - type: UserInterface interfaces: - - key: enum.StrippingUiKey.Key - type: StrippableBoundUserInterface + enum.StrippingUiKey.Key: + type: StrippableBoundUserInterface - type: Sprite drawdepth: Mobs layers: @@ -1313,7 +1311,6 @@ tags: - VimPilot - DoorBumpOpener - - type: CanWalk - type: entity name: monkey @@ -1371,7 +1368,7 @@ understands: - Monkey - Kobold - - GalacticCommon + - TauCetiBasic - type: NpcFactionMember factions: - Syndicate @@ -1380,6 +1377,8 @@ makeSentient: true name: ghost-role-information-monkey-name description: ghost-role-information-monkey-description + raffle: + settings: default - type: GhostTakeoverAvailable - type: Loadout prototypes: [SyndicateOperativeGearMonkey] @@ -1403,9 +1402,10 @@ - type: entity name: kobold - id: MobKobold + id: MobBaseKobold parent: MobBaseAncestor description: Cousins to the sentient race of lizard people, kobolds blend in with their natural habitat and are as nasty as monkeys; ready to pull out your hair and stab you to death. + abstract: true components: - type: NameIdentifier group: Kobold @@ -1421,9 +1421,9 @@ speechVerb: Reptilian - type: Vocal sounds: - Male: UnisexReptilian - Female: UnisexReptilian - Unsexed: UnisexReptilian + Male: MaleReptilian + Female: FemaleReptilian + Unsexed: MaleReptilian - type: TypingIndicator proto: lizard - type: InteractionPopup @@ -1503,15 +1503,6 @@ spawned: - id: FoodMeat amount: 2 - - type: Clumsy - clumsyDamage: - types: - Blunt: 2 - Piercing: 7 - groups: - Burn: 3 - clumsySound: - path: /Audio/Voice/Reptilian/reptilian_scream.ogg - type: AlwaysRevolutionaryConvertible - type: GhostTakeoverAvailable - type: SentienceTarget @@ -1523,6 +1514,56 @@ description: ghost-role-information-kobold-description - type: RandomBark barkMultiplier: 0.65 + barkType: kobold + +- type: entity + name: kobold + id: MobKobold + parent: MobBaseKobold + description: Cousins to the sentient race of lizard people, kobolds blend in with their natural habitat and are as nasty as monkeys; ready to pull out your hair and stab you to death. + components: + - type: Clumsy + clumsyDamage: + types: + Blunt: 2 + Piercing: 7 + groups: + Burn: 3 + clumsySound: + path: /Audio/Voice/Reptilian/reptilian_scream.ogg + +- type: entity + id: MobBaseSyndicateKobold + parent: MobBaseKobold + suffix: syndicate base + components: + - type: MobThresholds + thresholds: + 0: Alive + 75: Critical + 200: Dead + - type: NpcFactionMember + factions: + - Syndicate + - type: Loadout + prototypes: [SyndicateOperativeGearMonkey] + +- type: entity + id: MobKoboldSyndicateAgent + parent: MobBaseSyndicateKobold + suffix: syndicate agent + components: + # make the player a traitor once its taken + - type: AutoTraitor + giveUplink: false + giveObjectives: false + +- type: entity + id: MobKoboldSyndicateAgentNukeops # Reinforcement exclusive to nukeops uplink + parent: MobBaseSyndicateKobold + suffix: NukeOps + components: + - type: NukeOperative - type: entity name: guidebook monkey @@ -1551,6 +1592,7 @@ - type: Speech speechSounds: Squeak speechVerb: SmallMob + allowedEmotes: ['Squeak'] - type: Sprite drawdepth: SmallMobs sprite: Mobs/Animals/mouse.rsi @@ -1579,6 +1621,8 @@ rootTask: task: MouseCompound - type: Physics + - type: FaxableObject + insertingState: inserting_mouse - type: Fixtures fixtures: fix1: @@ -1687,9 +1731,14 @@ - type: PreventSpiller - type: RandomBark barkMultiplier: 0.3 + barkType: mouse - type: FireVisuals sprite: Mobs/Effects/onfire.rsi normalState: Mouse_burning + - type: StepTriggerImmune + whitelist: + types: + - Landmine - type: entity parent: MobMouse @@ -1931,16 +1980,6 @@ - VimPilot - type: RandomBark barkMultiplier: 1.3 - barks: - - Croooaaaakkk - - Ribbit - - Ribbit - - Ribbit - - Crooaak - - Ribbit - - Ribbit - - Ribbit - - Bibbit # Would be cool to have some functionality for the parrot to be able to sit on stuff - type: entity @@ -1999,9 +2038,9 @@ bloodMaxVolume: 50 - type: LanguageKnowledge speaks: - - GalacticCommon + - TauCetiBasic understands: - - GalacticCommon + - TauCetiBasic - type: entity name: penguin @@ -2063,8 +2102,7 @@ types: Heat : 0.2 #per second, scales with temperature & other constants - type: RandomBark - barks: - - Wank + barkType: penguin barkMultiplier: 0.6 - type: entity @@ -2183,13 +2221,9 @@ damageContainer: Biological damageModifierSet: Scale - type: RandomBark - barkMultiplier: 1.5 - barks: - - Hsssssss - - Hss - - Hsssss - - Hisss - - Hshsss + minTime: 10 + maxTime: 50 # It's a sssnake... + barkType: hissing # Code unique spider prototypes or combine them all into one spider and get a # random sprite state when you spawn it. @@ -2243,6 +2277,7 @@ 0: Alive 90: Dead - type: MeleeWeapon + altDisarm: false angle: 0 animation: WeaponArcBite soundHit: @@ -2284,6 +2319,7 @@ - type: Speech speechVerb: Arachnid speechSounds: Arachnid + allowedEmotes: ['Click', 'Chitter'] - type: Vocal sounds: Male: UnisexArachnid @@ -2319,6 +2355,11 @@ Brute: -0.07 Burn: -0.07 - type: RandomBark + barkType: hissing + barkMultiplier: 0.3 + - type: BloodSucker + webRequired: true + - type: Cocooner - type: entity name: tarantula @@ -2338,7 +2379,9 @@ makeSentient: true name: ghost-role-information-giant-spider-name description: ghost-role-information-giant-spider-description - rules: deltav-ghost-role-information-softantag-rules #DeltaV + rules: deltav-ghost-role-information-softantag-rules + raffle: + settings: short - type: GhostTakeoverAvailable - type: entity @@ -2370,6 +2413,7 @@ - type: Spider webPrototype: SpiderWebClown - type: MeleeWeapon + altDisarm: false angle: 0 animation: WeaponArcBite soundHit: @@ -2386,6 +2430,18 @@ bloodMaxVolume: 150 bloodReagent: Laughter +- type: entity + name: wizard spider + parent: MobGiantSpider + id: MobGiantSpiderWizard + description: This spider looks a little magical + suffix: Wizard + components: + - type: Accentless + removes: + - type: ReplacementAccent + accent: xeno #let this wizard speak + - type: entity name: possum parent: SimpleMobBase @@ -2418,8 +2474,8 @@ - type: Strippable - type: UserInterface interfaces: - - key: enum.StrippingUiKey.Key - type: StrippableBoundUserInterface + enum.StrippingUiKey.Key: + type: StrippableBoundUserInterface - type: DamageStateVisuals states: Alive: @@ -2447,7 +2503,8 @@ - Hissing understands: - Hissing - + - type: RandomBark + barkType: possum - type: entity name: possum @@ -2500,8 +2557,8 @@ - type: Strippable - type: UserInterface interfaces: - - key: enum.StrippingUiKey.Key - type: StrippableBoundUserInterface + enum.StrippingUiKey.Key: + type: StrippableBoundUserInterface - type: DamageStateVisuals states: Alive: @@ -2530,6 +2587,8 @@ - Hissing understands: - Hissing + - type: RandomBark + barkType: raccoon - type: entity name: fox @@ -2570,8 +2629,8 @@ - type: Strippable - type: UserInterface interfaces: - - key: enum.StrippingUiKey.Key - type: StrippableBoundUserInterface + enum.StrippingUiKey.Key: + type: StrippableBoundUserInterface - type: DamageStateVisuals states: Alive: @@ -2588,7 +2647,7 @@ interactFailureString: petting-failure-generic interactSuccessSpawn: EffectHearts interactSuccessSound: - path: /Audio/Animals/fox_squeak.ogg + collection: Fox - type: Grammar attributes: gender: epicene @@ -2618,6 +2677,9 @@ - Fox understands: - Fox + - type: RandomBark + barkType: fox + barkMultiplier: 0.5 # Talkative <3 - type: entity name: corgi @@ -2653,8 +2715,8 @@ - type: Strippable - type: UserInterface interfaces: - - key: enum.StrippingUiKey.Key - type: StrippableBoundUserInterface + enum.StrippingUiKey.Key: + type: StrippableBoundUserInterface - type: DamageStateVisuals states: Alive: @@ -2687,6 +2749,7 @@ tags: - VimPilot - type: RandomBark + barkType: dog - type: entity name: corrupted corgi @@ -2808,8 +2871,8 @@ - type: Strippable - type: UserInterface interfaces: - - key: enum.StrippingUiKey.Key - type: StrippableBoundUserInterface + enum.StrippingUiKey.Key: + type: StrippableBoundUserInterface - type: DamageStateVisuals states: Alive: @@ -2836,6 +2899,11 @@ interactSuccessSound: path: /Audio/Animals/cat_meow.ogg - type: MeleeWeapon + altDisarm: false + angle: 0 + animation: WeaponArcBite + soundHit: + path: /Audio/Effects/bite.ogg damage: types: Piercing: 5 @@ -2848,6 +2916,7 @@ tags: - VimPilot - type: RandomBark + barkType: cat - type: entity name: calico cat @@ -2888,19 +2957,34 @@ allowMovement: true description: ghost-role-information-SyndiCat-description rules: ghost-role-information-SyndiCat-rules + raffle: + settings: default - type: GhostTakeoverAvailable - type: AutoImplant implants: - MicroBombImplant + - type: ExplosionResistance + damageCoefficient: 0.2 - type: NpcFactionMember factions: - Syndicate + - type: MeleeWeapon + altDisarm: false + angle: 0 + animation: WeaponArcBite + soundHit: + path: /Audio/Effects/bite.ogg + damage: + types: + Slash: 6 + Piercing: 6 + Structural: 15 - type: LanguageKnowledge speaks: - - Cat + - Cat understands: - Cat - - GalacticCommon + - TauCetiBasic - type: entity name: space cat @@ -2921,7 +3005,13 @@ - type: Temperature heatDamageThreshold: 423 coldDamageThreshold: 0 + - type: Tag + tags: + - DoorBumpOpener + - type: MovementAlwaysTouching - type: PressureImmunity + - type: StepTriggerImmune + - type: Insulated - type: InteractionPopup successChance: 0.7 interactSuccessString: petting-success-space-cat @@ -3042,8 +3132,8 @@ - type: Strippable - type: UserInterface interfaces: - - key: enum.StrippingUiKey.Key - type: StrippableBoundUserInterface + enum.StrippingUiKey.Key: + type: StrippableBoundUserInterface - type: DamageStateVisuals states: Alive: @@ -3067,10 +3157,6 @@ - type: Tag tags: - VimPilot - - type: RandomBark - barkMultiplier: 10 - barks: - - Sloth - type: LanguageKnowledge # WHAT DOES THE SLOTH SAY??????? speaks: - Hissing @@ -3109,8 +3195,8 @@ - type: Strippable - type: UserInterface interfaces: - - key: enum.StrippingUiKey.Key - type: StrippableBoundUserInterface + enum.StrippingUiKey.Key: + type: StrippableBoundUserInterface - type: DamageStateVisuals states: Alive: @@ -3157,6 +3243,7 @@ - type: Speech speechVerb: SmallMob speechSounds: Squeak + allowedEmotes: ['Squeak'] - type: Sprite drawdepth: SmallMobs sprite: Mobs/Animals/hamster.rsi @@ -3173,6 +3260,8 @@ - type: Item size: Tiny - type: Physics + - type: FaxableObject + insertingState: inserting_hamster - type: Fixtures fixtures: fix1: @@ -3207,8 +3296,8 @@ - type: Strippable - type: UserInterface interfaces: - - key: enum.StrippingUiKey.Key - type: StrippableBoundUserInterface + enum.StrippingUiKey.Key: + type: StrippableBoundUserInterface - type: DamageStateVisuals states: Alive: @@ -3283,6 +3372,7 @@ - type: NonSpreaderZombie - type: RandomBark barkMultiplier: 0.45 + barkType: mouse # duh - type: FireVisuals sprite: Mobs/Effects/onfire.rsi normalState: Mouse_burning @@ -3330,8 +3420,8 @@ - type: Strippable - type: UserInterface interfaces: - - key: enum.StrippingUiKey.Key - type: StrippableBoundUserInterface + enum.StrippingUiKey.Key: + type: StrippableBoundUserInterface - type: DamageStateVisuals states: Alive: @@ -3398,8 +3488,8 @@ bloodMaxVolume: 60 - type: UserInterface interfaces: - - key: enum.StrippingUiKey.Key - type: StrippableBoundUserInterface + enum.StrippingUiKey.Key: + type: StrippableBoundUserInterface - type: DamageStateVisuals states: Alive: @@ -3447,7 +3537,7 @@ speaks: - RootSpeak understands: - - GalacticCommon + - TauCetiBasic - RootSpeak - type: entity @@ -3457,4 +3547,4 @@ components: - type: ReplacementAccent accent: nymph - - type: RandomBark + - type: RandomBark # Using the default barks since they aren't going to talk anyway diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/behonker.yml b/Resources/Prototypes/Entities/Mobs/NPCs/behonker.yml index 8a10337c946..07ee6b1536a 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/behonker.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/behonker.yml @@ -10,6 +10,8 @@ makeSentient: true name: ghost-role-information-behonker-name description: ghost-role-information-behonker-description + raffle: + settings: default - type: GhostTakeoverAvailable - type: HTN rootTask: @@ -76,8 +78,8 @@ - id: BikeHorn - type: UserInterface interfaces: - - key: enum.StrippingUiKey.Key - type: StrippableBoundUserInterface + enum.StrippingUiKey.Key: + type: StrippableBoundUserInterface - type: MobThresholds thresholds: 0: Alive diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/carp.yml b/Resources/Prototypes/Entities/Mobs/NPCs/carp.yml index 787f8ae5427..2778bf12788 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/carp.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/carp.yml @@ -164,6 +164,8 @@ makeSentient: true name: ghost-role-information-sentient-carp-name description: ghost-role-information-sentient-carp-description + raffle: + settings: short - type: GhostTakeoverAvailable - type: HTN rootTask: diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/dogs.yml b/Resources/Prototypes/Entities/Mobs/NPCs/dogs.yml index 22da7583723..a0c19569bb2 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/dogs.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/dogs.yml @@ -43,8 +43,8 @@ - type: Strippable - type: UserInterface interfaces: - - key: enum.StrippingUiKey.Key - type: StrippableBoundUserInterface + enum.StrippingUiKey.Key: + type: StrippableBoundUserInterface - type: DamageStateVisuals states: Alive: @@ -65,7 +65,6 @@ interactFailureString: petting-failure-pibble interactSuccessSound: path: /Audio/Animals/small_dog_bark_happy.ogg - hostileOnFail: true - type: DogVision - type: NpcFactionMember factions: @@ -89,7 +88,7 @@ - Dog understands: - Dog - - GalacticCommon + - TauCetiBasic - type: entity parent: MobPibble diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/elemental.yml b/Resources/Prototypes/Entities/Mobs/NPCs/elemental.yml index 11c6f926ba6..94ba7ec4188 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/elemental.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/elemental.yml @@ -44,7 +44,6 @@ - type: Tag tags: - DoorBumpOpener - - ShoesRequiredStepTriggerImmune - type: MobState allowedStates: - Alive @@ -73,6 +72,8 @@ - type: InputMover - type: MobMover - type: ZombieImmune + - type: ClothingRequiredStepTriggerImmune + slots: All - type: entity abstract: true @@ -236,6 +237,8 @@ - type: GhostRole prob: 0 description: ghost-role-information-angry-slimes-description + raffle: + settings: short - type: NpcFactionMember factions: - SimpleHostile @@ -257,13 +260,13 @@ - type: MobThresholds thresholds: 0: Alive - 150: Dead + 50: Dead - type: SlowOnDamage speedModifierThresholds: - 50: 0.4 + 20: 0.4 - type: Bloodstream bloodReagent: Water - chemicalMaxVolume: 100 + chemicalMaxVolume: 50 - type: StatusEffects allowed: - SlowedDown @@ -274,10 +277,10 @@ animation: WeaponArcBite damage: types: - Slash: 8 + Slash: 3 - type: MeleeChemicalInjector solution: bloodstream - transferAmount: 5 + transferAmount: 2 - type: DamageStateVisuals rotate: true states: @@ -329,6 +332,19 @@ - ReagentSlimeNorepinephricAcid - ReagentSlimeEphedrine - ReagentSlimeRobustHarvest + - ReagentSlimeIchor + - ReagentSlimeBleach + - ReagentSlimeSoap + - ReagentSlimeSpacelube + - ReagentSlimeBuzzachloricbees + - ReagentSlimeWehjuice + - ReagentCognizine + - ReagentSlimeNecrosol + - ReagentSlimeSpaceDrugs + - ReagentSlimeUnstableMutagen + - ReagentSlimeLead + - ReagentSlimechlorinetriflouride + - ReagentSlimePotassium - ReagentSlimeLotophagoiOil chance: 1 @@ -560,4 +576,4 @@ color: "#3e901c" - type: GhostRole prob: 1 #it's significantly more psionic than the others - description: ghost-role-information-angry-slimes-description \ No newline at end of file + description: ghost-role-information-angry-slimes-description diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/glimmer_creatures.yml b/Resources/Prototypes/Entities/Mobs/NPCs/glimmer_creatures.yml new file mode 100644 index 00000000000..33e4ecee260 --- /dev/null +++ b/Resources/Prototypes/Entities/Mobs/NPCs/glimmer_creatures.yml @@ -0,0 +1,163 @@ +- type: entity + name: glimmer mite + parent: MobCockroach + id: MobGlimmerMite + description: A strange pest from a world beyond the noosphere. + components: + - type: Sprite + sprite: DeltaV/Mobs/Ghosts/glimmermite.rsi + layers: + - map: ["enum.DamageStateVisualLayers.Base"] + state: mite + - type: DamageStateVisuals + states: + Alive: + Base: mite + Dead: + Base: mite_dead + baseDecayRate: 0.25 + - type: SolutionContainerManager + solutions: + food: + reagents: + - ReagentId: Ectoplasm + Quantity: 15 + - type: Psionic + - type: GlimmerSource + - type: AmbientSound + range: 6 + volume: -3 + sound: /Audio/DeltaV/Glimmer_Creatures/mite.ogg + - type: AmbientOnPowered + +- type: entity + parent: + - BaseMob + - MobCombat + - MobDamageable + id: MobGlimmerWisp + name: glimmer wisp + description: A strange orb that moves with intent. + components: + # appearance + - type: Sprite + drawDepth: Ghosts + sprite: Mobs/Demons/glimmer_wisp.rsi + layers: + - state: willowisp + shader: unshaded + - type: PointLight + color: "#419ba3" + - type: Stealth + lastVisibility: 0.66 + - type: AmbientSound + volume: -8 + range: 5 + sound: + path: /Audio/Ambience/wisp_ambience.ogg + # physical + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeCircle + radius: 0.35 + density: 13 + mask: + - Opaque + layer: + - MobLayer + - type: MovementSpeedModifier + baseSprintSpeed: 8 + baseWalkSpeed: 5 + - type: MovementIgnoreGravity + - type: Speech + # powers + - type: Psionic + removable: false + - type: InnatePsionicPowers + powersToAdd: + - NoosphericZapPower + - type: LifeDrainer + damage: + types: + Asphyxiation: 200 + whitelist: + components: + - Psionic + # damage + - type: Reactive + groups: + Acidic: [Touch] # Holy water + - type: MobState + allowedStates: + - Alive + - Dead + - type: MobThresholds + thresholds: + 0: Alive + 300: Dead + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 300 + behaviors: + - !type:PlaySoundBehavior + sound: + path: /Audio/Effects/wail.ogg + - !type:SpawnEntitiesBehavior + spawn: + Ectoplasm: + min: 2 + max: 3 + - !type:DoActsBehavior + acts: [ "Destruction" ] + - type: Damageable + damageContainer: Spirit + damageModifierSet: CorporealSpirit + - type: DamageOnDispel + damage: + types: + Heat: 100 + - type: SlowOnDamage + speedModifierThresholds: + 150: 0.8 + 200: 0.6 + 250: 0.3 + - type: StatusEffects + allowed: + - Stun + - KnockedDown #KnockedDown is inseperable from stun because... IT JUST IS OK? + - SlowedDown + - Pacified + # combat + - type: Gun + fireRate: 0.7 + soundGunshot: + collection: MagicMissile + showExamineText: false + selectedMode: SemiAuto + availableModes: + - SemiAuto + - type: HitscanBatteryAmmoProvider + proto: WispLash + fireCost: 1 + # TODO: implement upstream or make it use a proper thing, maybe copy dragon + #examinable: false + - type: Battery + maxCharge: 1000 + startingCharge: 1000 + - type: BatterySelfRecharger + autoRecharge: true + autoRechargeRate: 100 + # AI + - type: HTN + rootTask: + task: GlimmerWispCompound + - type: NpcFactionMember + factions: + - GlimmerMonster + - type: NPCRetaliation + attackMemoryLength: 10 + - type: NPCRangedCombat diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/hellspawn.yml b/Resources/Prototypes/Entities/Mobs/NPCs/hellspawn.yml index 5511c40baad..74658f0a2db 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/hellspawn.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/hellspawn.yml @@ -12,6 +12,8 @@ makeSentient: true name: ghost-role-information-hellspawn-name description: ghost-role-information-hellspawn-description + raffle: + settings: default - type: RotationVisuals defaultRotation: 90 horizontalRotation: 90 @@ -53,6 +55,7 @@ - type: Perishable - type: Reflect reflectProb: 0.7 + innate: true reflects: - Energy - type: Fixtures diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/mimic.yml b/Resources/Prototypes/Entities/Mobs/NPCs/mimic.yml index ce2ca9e731e..c3a92d3ebcd 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/mimic.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/mimic.yml @@ -1,3 +1,4 @@ +# TODO: Pending a rewrite of Mob Replacement System, this entire list should just be moved into a ComponentRegistry on the event. - type: entity name: Mimic id: MobMimic @@ -43,4 +44,3 @@ damage: types: Blunt: 20 - - type: PsionicInsulation diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/pets.yml b/Resources/Prototypes/Entities/Mobs/NPCs/pets.yml index 6eb43fb89ae..f19e76ecf54 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/pets.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/pets.yml @@ -40,7 +40,7 @@ speaks: - Dog understands: - - GalacticCommon + - TauCetiBasic - Dog - type: entity @@ -131,7 +131,7 @@ speaks: - Cat understands: - - GalacticCommon + - TauCetiBasic - Cat - type: entity @@ -155,7 +155,7 @@ speaks: - Cat understands: - - GalacticCommon + - TauCetiBasic - Cat - type: entity @@ -229,8 +229,8 @@ - type: Strippable - type: UserInterface interfaces: - - key: enum.StrippingUiKey.Key - type: StrippableBoundUserInterface + enum.StrippingUiKey.Key: + type: StrippableBoundUserInterface - type: DamageStateVisuals states: Alive: @@ -292,8 +292,8 @@ - type: Strippable - type: UserInterface interfaces: - - key: enum.StrippingUiKey.Key - type: StrippableBoundUserInterface + enum.StrippingUiKey.Key: + type: StrippableBoundUserInterface - type: DamageStateVisuals states: Alive: @@ -310,7 +310,7 @@ speaks: - Dog understands: - - GalacticCommon + - TauCetiBasic - Dog - type: InteractionPopup successChance: 0.5 @@ -330,6 +330,7 @@ - type: StealTarget stealGroup: AnimalMcGriff - type: RandomBark + barkType: dog barkMultiplier: 1.3 - type: entity @@ -397,8 +398,8 @@ - type: Strippable - type: UserInterface interfaces: - - key: enum.StrippingUiKey.Key - type: StrippableBoundUserInterface + enum.StrippingUiKey.Key: + type: StrippableBoundUserInterface - type: DamageStateVisuals states: Alive: @@ -415,7 +416,7 @@ speaks: - Dog understands: - - GalacticCommon + - TauCetiBasic - Dog - type: InteractionPopup successChance: 0.7 @@ -435,6 +436,7 @@ - type: StealTarget stealGroup: AnimalWalter - type: RandomBark + barkType: dog barkMultiplier: 1.1 - type: entity @@ -559,7 +561,7 @@ interactFailureString: petting-failure-generic interactSuccessSpawn: EffectHearts interactSuccessSound: - path: /Audio/Animals/fox_squeak.ogg + collection: Fox - type: Butcherable spawned: - id: FoodMeat @@ -580,7 +582,7 @@ speaks: - Fox understands: - - GalacticCommon + - TauCetiBasic - Fox - type: entity @@ -633,7 +635,7 @@ speaks: - Mouse understands: - - GalacticCommon + - TauCetiBasic - Mouse - type: entity @@ -795,6 +797,9 @@ types: Blunt: 1 Caustic: 1 + - type: MultiHandedItem + - type: Item + size: Huge - type: SentienceTarget flavorKind: station-event-random-sentience-flavor-slime - type: MobPrice @@ -811,7 +816,7 @@ speaks: - Bubblish understands: - - GalacticCommon + - TauCetiBasic - Bubblish - type: entity @@ -820,13 +825,6 @@ id: MobMonkeyPunpun description: A prominent representative of monkeys with unlimited access to alcohol. components: - - type: GhostRole - prob: 1 - makeSentient: true - allowSpeech: true - allowMovement: true - name: ghost-role-information-punpun-name - description: ghost-role-information-punpun-description - type: GhostTakeoverAvailable - type: Butcherable butcheringType: Spike @@ -851,9 +849,10 @@ speaks: - Monkey understands: - - GalacticCommon + - TauCetiBasic - Monkey - Kobold + - type: Punpun - type: entity name: Tropico @@ -885,5 +884,5 @@ speaks: - Crab understands: - - GalacticCommon + - TauCetiBasic - Crab diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml b/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml index 6643be41af9..f6a42dfb76b 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml @@ -90,6 +90,8 @@ name: ghost-role-information-rat-king-name description: ghost-role-information-rat-king-description rules: ghost-role-information-rat-king-rules + raffle: + settings: default - type: GhostTakeoverAvailable - type: Tag tags: @@ -112,18 +114,18 @@ nameSegments: - RegalRatNameKingdom - RegalRatNameTitle - # - type: GuideHelp - # guides: - # - MinorAntagonists + - type: GuideHelp + guides: + - MinorAntagonists - type: Grammar attributes: gender: male - type: LanguageKnowledge speaks: - - GalacticCommon + - TauCetiBasic - Mouse understands: - - GalacticCommon + - TauCetiBasic - Mouse - type: entity @@ -158,9 +160,9 @@ speedModifierThresholds: 200: 0.7 250: 0.5 - # - type: GuideHelp - # guides: - # - MinorAntagonists + - type: GuideHelp + guides: + - MinorAntagonists - type: entity name: Rat Servant @@ -290,9 +292,9 @@ isBoss: false - type: Speech speechVerb: SmallMob - # - type: GuideHelp - # guides: - # - MinorAntagonists + - type: GuideHelp + guides: + - MinorAntagonists - type: FelinidFood # Nyanotrasen - Felinid, ability to eat rat, see Content.Server/Nyanotrasen/Abilities/Felinid/FelinidSystem.cs - type: Food - type: Item @@ -301,7 +303,7 @@ speaks: - Mouse understands: - - GalacticCommon + - TauCetiBasic - Mouse - type: FireVisuals sprite: Mobs/Effects/onfire.rsi diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/revenant.yml b/Resources/Prototypes/Entities/Mobs/NPCs/revenant.yml index 47ce0f9d490..c16816b5e44 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/revenant.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/revenant.yml @@ -60,6 +60,8 @@ name: ghost-role-information-revenant-name description: ghost-role-information-revenant-description rules: ghost-role-information-revenant-rules + raffle: + settings: default - type: GhostTakeoverAvailable - type: Revenant malfunctionWhitelist: @@ -79,8 +81,8 @@ softness: 1 - type: UserInterface interfaces: - - key: enum.StoreUiKey.Key - type: StoreBoundUserInterface + enum.StoreUiKey.Key: + type: StoreBoundUserInterface - type: Visibility layer: 2 #ghost vis layer - type: Store diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml b/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml index 47918fb2a49..2fea60ea1ea 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml @@ -61,11 +61,11 @@ group: GenericNumber - type: Repairable doAfterDelay: 8 + fuelCost: 15 - type: Pullable - type: Tag tags: - DoorBumpOpener - - ShoesRequiredStepTriggerImmune - type: MobState allowedStates: - Alive @@ -98,20 +98,21 @@ - type: MobMover - type: Body prototype: Bot - # - type: GuideHelp - # guides: - # - Robotics + - type: GuideHelp + guides: + - Robotics - type: Speech speechVerb: Robotic - type: TypingIndicator proto: robot - type: ZombieImmune + - type: StepTriggerImmune - type: LanguageKnowledge speaks: - - GalacticCommon + - TauCetiBasic - RobotTalk understands: - - GalacticCommon + - TauCetiBasic - RobotTalk - type: PsionicInsulation @@ -137,6 +138,9 @@ - type: Speech speechVerb: Cluwne - type: StepTrigger + triggerGroups: + types: + - SlipEntity intersectRatio: 0.2 - type: Fixtures fixtures: @@ -161,6 +165,8 @@ makeSentient: true name: ghost-role-information-honkbot-name description: ghost-role-information-honkbot-description + raffle: + settings: default - type: GhostTakeoverAvailable - type: InteractionPopup interactSuccessString: petting-success-honkbot @@ -186,6 +192,8 @@ makeSentient: true name: ghost-role-information-jonkbot-name description: ghost-role-information-jonkbot-description + raffle: + settings: default - type: InteractionPopup interactSuccessSound: path: /Audio/Items/brokenbikehorn.ogg @@ -307,8 +315,8 @@ - type: Strippable - type: UserInterface interfaces: - - key: enum.StrippingUiKey.Key - type: StrippableBoundUserInterface + enum.StrippingUiKey.Key: + type: StrippableBoundUserInterface - type: Sprite layers: - map: ["enum.DamageStateVisualLayers.Base"] @@ -322,9 +330,69 @@ makeSentient: true name: ghost-role-information-mimebot-name description: ghost-role-information-mimebot-description + raffle: + settings: default - type: GhostTakeoverAvailable - type: InteractionPopup interactSuccessString: petting-success-mimebot interactFailureString: petting-failure-mimebot - type: Inventory templateId: head + +- type: entity + parent: MobSiliconBase + id: MobSupplyBot + name: supplybot + description: Delivers cargo! + components: + - type: Sprite + sprite: Mobs/Silicon/Bots/supplybot.rsi + layers: + - state: supplybot + - type: GhostRole + makeSentient: true + name: ghost-role-information-supplybot-name + description: ghost-role-information-supplybot-description + raffle: + settings: default + - type: GhostTakeoverAvailable + - type: Construction + graph: SupplyBot + node: bot + - type: Access + tags: + - Cargo + - Maintenance + - Salvage + - type: Dumpable + - type: Storage + maxItemSize: Huge + grid: + - 0,0,9,3 + - type: UserInterface + interfaces: + enum.StorageUiKey.Key: + type: StorageBoundUserInterface + - type: ContainerContainer + containers: + storagebase: !type:Container + ents: [] + - type: UnpoweredFlashlight + - type: PointLight + enabled: false + radius: 3.5 + softness: 2 + mask: /Textures/Effects/LightMasks/cone.png + autoRot: true + - type: FootstepModifier + footstepSoundCollection: + collection: FootstepBorg + - type: Tag + tags: + - DoorBumpOpener + - FootstepSound + - type: ActiveRadio + channels: + - Binary + - Common + - Supply diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/slimes.yml b/Resources/Prototypes/Entities/Mobs/NPCs/slimes.yml index 3735bcc4eca..74bba2dec8a 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/slimes.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/slimes.yml @@ -1,16 +1,10 @@ - type: entity name: basic slime - id: MobAdultSlimes + id: BaseMobAdultSlimes parent: [ SimpleMobBase, MobCombat ] abstract: true description: It looks so much like jelly. I wonder what it tastes like? components: - - type: NpcFactionMember - factions: - - SimpleNeutral - - type: HTN - rootTask: - task: SimpleHostileCompound - type: Sprite drawdepth: Mobs sprite: Mobs/Aliens/slimes.rsi @@ -44,6 +38,7 @@ - type: Tag tags: - FootstepSound + - DoorBumpOpener - type: Butcherable butcheringType: Knife spawned: @@ -99,6 +94,7 @@ prototype: Slimes requiredLegs: 1 - type: MeleeWeapon + altDisarm: false soundHit: path: /Audio/Weapons/punch3.ogg angle: 0 @@ -112,6 +108,19 @@ successChance: 0.5 interactSuccessString: petting-success-slimes interactFailureString: petting-failure-generic + - type: Speech + speechVerb: Slime + speechSounds: Slime + - type: TypingIndicator + proto: slime + +- type: entity + name: basic slime + id: MobAdultSlimes + parent: BaseMobAdultSlimes + abstract: true + description: It looks so much like jelly. I wonder what it tastes like? + components: - type: LanguageKnowledge speaks: - Bubblish @@ -122,13 +131,54 @@ makeSentient: true name: ghost-role-information-slimes-name description: ghost-role-information-slimes-description - rules: deltav-ghost-role-information-softantag-rules #DeltaV + rules: deltav-ghost-role-information-softantag-rules - type: Speech speechVerb: Slime speechSounds: Slime + allowedEmotes: ['Squish'] - type: TypingIndicator proto: slime - - type: CanWalk + - type: NpcFactionMember + factions: + - SimpleNeutral + - type: HTN + rootTask: + task: SimpleHostileCompound + +- type: entity + name: geras + description: A geras of a slime - the name is ironic, isn't it? + id: MobSlimesGeras + parent: BaseMobAdultSlimes + noSpawn: true + components: + # they portable... + - type: MovementSpeedModifier + baseWalkSpeed: 3 + baseSprintSpeed: 5 # +.5 from normal movement speed + - type: MobThresholds + thresholds: + 0: Alive + 80: Dead # weak af tho + - type: NpcFactionMember + factions: + - NanoTrasen + - type: MultiHandedItem + - type: Item + size: Huge + - type: Sprite + color: "#FFFFFF55" + - type: MeleeWeapon + attackRate: 2 + damage: + types: + Blunt: 4 + - type: DamageStateVisuals + states: + Alive: + Base: blue_adult_slime + Dead: + Base: blue_adult_slime_dead - type: entity name: blue slime @@ -151,8 +201,6 @@ - type: NpcFactionMember factions: - SimpleHostile -# - type: GhostRole #DeltaV - all slimes neutral when ghost role -# description: ghost-role-information-angry-slimes-description - type: entity name: green slime diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/space.yml b/Resources/Prototypes/Entities/Mobs/NPCs/space.yml index adf3af93eab..4ea766c3140 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/space.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/space.yml @@ -174,8 +174,8 @@ - type: Strippable - type: UserInterface interfaces: - - key: enum.StrippingUiKey.Key - type: StrippableBoundUserInterface + enum.StrippingUiKey.Key: + type: StrippableBoundUserInterface - type: entity id: MobKangarooSpaceSalvage @@ -269,6 +269,7 @@ - type: Speech speechVerb: Arachnid speechSounds: Arachnid + allowedEmotes: ['Click', 'Chitter'] - type: Vocal sounds: Male: UnisexArachnid @@ -276,6 +277,9 @@ Unsexed: UnisexArachnid - type: TypingIndicator proto: spider + - type: BloodSucker + webRequired: true + - type: Cocooner - type: entity id: MobSpiderSpaceSalvage diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/xeno.yml b/Resources/Prototypes/Entities/Mobs/NPCs/xeno.yml index d618e407134..04b767b8ae2 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/xeno.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/xeno.yml @@ -58,13 +58,18 @@ layer: - MobLayer - type: MobState - allowedStates: - - Alive - - Dead + - type: Deathgasp + - type: MobStateActions + actions: + Critical: + - ActionCritSuccumb + - ActionCritFakeDeath + - ActionCritLastWords - type: MobThresholds thresholds: 0: Alive - 50: Dead + 50: Critical + 100: Dead - type: SlowOnDamage speedModifierThresholds: 25: 0.5 @@ -92,19 +97,22 @@ Dead: Base: dead - type: Puller + needsHands: false - type: Butcherable butcheringType: Spike spawned: - id: FoodMeatXeno amount: 5 - #- type: GhostRole # Delta V - Moves ghost role from parent to child - # allowMovement: true # Delta V - Moves ghost role from parent to child - # allowSpeech: true # Delta V - Moves ghost role from parent to child - # makeSentient: true # Delta V - Moves ghost role from parent to child - # name: ghost-role-information-xeno-name # Delta V - Moves ghost role from parent to child - # description: ghost-role-information-xeno-description # Delta V - Moves ghost role from parent to child - # rules: ghost-role-information-xeno-rules # Delta V - Moves ghost role from parent to child - # - type: GhostTakeoverAvailable # Delta V - Moves ghost role from parent to child + - type: GhostRole + allowMovement: true + allowSpeech: true + makeSentient: true + name: ghost-role-information-xeno-name + description: ghost-role-information-xeno-description + rules: ghost-role-information-xeno-rules + raffle: + settings: default + - type: GhostTakeoverAvailable - type: TypingIndicator proto: alien - type: Temperature @@ -121,8 +129,11 @@ molsPerSecondPerUnitMass: 0.0005 - type: Speech speechVerb: LargeMob - - type: Psionic #Nyano - Summary: makes psionic by default. + - type: Psionic removable: false + - type: InnatePsionicPowers + powersToAdd: + - TelepathyPower - type: LanguageKnowledge speaks: - Xeno @@ -144,7 +155,8 @@ - type: MobThresholds thresholds: 0: Alive - 100: Dead + 100: Critical + 150: Dead - type: Stamina critThreshold: 300 - type: SlowOnDamage @@ -177,7 +189,8 @@ - type: MobThresholds thresholds: 0: Alive - 80: Dead + 80: Critical + 130: Dead - type: SlowOnDamage speedModifierThresholds: 40: 0.7 @@ -214,7 +227,8 @@ - type: MobThresholds thresholds: 0: Alive - 300: Dead + 300: Critical + 350: Dead - type: SlowOnDamage speedModifierThresholds: 150: 0.7 @@ -239,10 +253,10 @@ - CannotSuicide - type: LanguageKnowledge speaks: - - GalacticCommon + - TauCetiBasic - Xeno understands: - - GalacticCommon + - TauCetiBasic - Xeno - type: entity @@ -260,7 +274,8 @@ - type: MobThresholds thresholds: 0: Alive - 100: Dead + 100: Critical + 150: Dead - type: MovementSpeedModifier baseSprintSpeed: 4 - type: MeleeWeapon @@ -299,7 +314,7 @@ - type: MeleeWeapon damage: groups: - Brute: 5 + Brute: 10 - type: Fixtures fixtures: fix1: @@ -321,6 +336,7 @@ drawdepth: Mobs sprite: Mobs/Aliens/Xenos/rouny.rsi offset: 0,0.6 + scale: 0.7, 0.7 - type: Butcherable butcheringType: Spike spawned: diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/xenopet.yml b/Resources/Prototypes/Entities/Mobs/NPCs/xenopet.yml new file mode 100644 index 00000000000..23108e521bf --- /dev/null +++ b/Resources/Prototypes/Entities/Mobs/NPCs/xenopet.yml @@ -0,0 +1,534 @@ +- type: entity + name: Neutral Rouny + id: MobXenoNeutralRouny + parent: MobXenoRounyNPC + description: They mostly come at night. Mostly. + components: + - type: NpcFactionMember + factions: + - Passive + - type: PointLight + radius: 2 + energy: 1 + color: "#B85E5E" + - type: MovementAlwaysTouching + - type: GhostRole + name: ghost-role-information-friendlyxeno-name + description: ghost-role-information-friendlyxeno-description + rules: ghost-role-information-friendlyxeno-rules + - type: GhostTakeoverAvailable + - type: LanguageKnowledge + speaks: + - Xeno + understands: + - Xeno + - TauCetiBasic + +- type: entity + name: Neutral Praetorian + id: MobXenoNeutralPraetorian + parent: MobXenoPraetorianNPC + description: They mostly come at night. Mostly. + components: + - type: NpcFactionMember + factions: + - Passive + - type: PointLight + radius: 2 + energy: 1 + color: "#62B85E" + - type: GhostRole + name: ghost-role-information-friendlyxeno-name + description: ghost-role-information-friendlyxeno-description + rules: ghost-role-information-friendlyxeno-rules + - type: GhostTakeoverAvailable + - type: LanguageKnowledge + speaks: + - Xeno + understands: + - Xeno + - TauCetiBasic + +- type: entity + name: Neutral Drone + id: MobXenoNeutralDrone + parent: MobXenoDroneNPC + description: They mostly come at night. Mostly. + components: + - type: NpcFactionMember + factions: + - Passive + - type: PointLight + radius: 2 + energy: 1 + color: "#8B5EB8" + - type: GhostRole + name: ghost-role-information-friendlyxeno-name + description: ghost-role-information-friendlyxeno-description + rules: ghost-role-information-friendlyxeno-rules + - type: GhostTakeoverAvailable + - type: LanguageKnowledge + speaks: + - Xeno + understands: + - Xeno + - TauCetiBasic + +- type: entity + name: Neutral Ravager + id: MobXenoNeutralRavager + parent: MobXenoRavagerNPC + description: They mostly come at night. Mostly. + components: + - type: NpcFactionMember + factions: + - Passive + - type: PointLight + radius: 2 + energy: 1 + color: "#E3954D" + - type: GhostRole + name: ghost-role-information-friendlyxeno-name + description: ghost-role-information-friendlyxeno-description + rules: ghost-role-information-friendlyxeno-rules + - type: GhostTakeoverAvailable + - type: LanguageKnowledge + speaks: + - Xeno + understands: + - Xeno + - TauCetiBasic + +- type: inventoryTemplate + id: friendxeno + slots: + - name: id + slotTexture: id + slotFlags: IDCARD + slotGroup: SecondHotbar + stripTime: 6 + uiWindowPos: 2,1 + strippingWindowPos: 2,4 + displayName: ID + - name: head + slotTexture: head + slotFlags: HEAD + uiWindowPos: 1,2 + strippingWindowPos: 0,0 + displayName: Head + - name: mask + slotTexture: mask + slotFlags: MASK + uiWindowPos: 0,1 + strippingWindowPos: 1,1 + displayName: Mask + +- type: entity + name: Friend-Shaped + parent: MobXenoNeutralRouny + id: MobXenoFriendShaped + description: A very clearly friend-shaped Xeno. + components: + - type: NpcFactionMember + factions: + - PetsNT + - type: Tool + speed: 3 + qualities: + - Prying + - type: Sprite + drawdepth: Mobs + sprite: Mobs/Aliens/Xenos/rouny.rsi + scale: 0.5, 0.5 + - type: GhostRole + - type: GhostTakeoverAvailable + - type: Inventory + templateId: friendxeno + - type: IdExaminable + - type: InventorySlots + - type: Stripping + - type: Strippable + - type: UserInterface + interfaces: + enum.StrippingUiKey.Key: + type: StrippableBoundUserInterface + - type: Grammar + attributes: + proper: true + gender: male + - type: Body + prototype: Friendshaped + requiredLegs: 1 # TODO: More than 1 leg + - type: InteractionPopup + successChance: 0.5 + interactSuccessString: petting-success-reptile + interactFailureString: petting-failure-generic + interactSuccessSpawn: EffectHearts + interactSuccessSound: + path: /Audio/Animals/lizard_happy.ogg + +- type: entity + name: Patriach + parent: MobXenoNeutralPraetorian + id: MobXenoPatriarch + description: A not entirely clearly friend-shaped Xeno. + components: + - type: NpcFactionMember + factions: + - PetsNT + - type: Tool + speed: 3 + qualities: + - Prying + - type: Sprite + drawdepth: Mobs + sprite: Mobs/Animals/patriarch.rsi + layers: + - map: ["enum.DamageStateVisualLayers.Base"] + state: patriarch + - type: DamageStateVisuals + states: + Alive: + Base: patriarch + Critical: + Base: patriarch_crit + Dead: + Base: patriarch_dead + - type: Inventory + templateId: friendxeno + - type: IdExaminable + - type: InventorySlots + - type: Strippable + - type: UserInterface + interfaces: + enum.StrippingUiKey.Key: + type: StrippableBoundUserInterface + - type: Grammar + attributes: + proper: true + gender: male + - type: InteractionPopup + successChance: 0.5 + interactSuccessString: petting-success-reptile + interactFailureString: petting-failure-generic + interactSuccessSpawn: EffectHearts + interactSuccessSound: + path: /Audio/Animals/lizard_happy.ogg + +- type: entity + name: FXES + parent: MobXenoNeutralDrone + id: MobXenoFXES + description: A very clearly friend-shaped Xeno. + components: + - type: NpcFactionMember + factions: + - PetsNT + - type: Tool + speed: 3 + qualities: + - Prying + - type: Inventory + templateId: friendxeno + - type: IdExaminable + - type: InventorySlots + - type: Strippable + - type: UserInterface + interfaces: + enum.StrippingUiKey.Key: + type: StrippableBoundUserInterface + - type: Grammar + attributes: + proper: true + gender: male + - type: InteractionPopup + successChance: 0.5 + interactSuccessString: petting-success-reptile + interactFailureString: petting-failure-generic + interactSuccessSpawn: EffectHearts + interactSuccessSound: + path: /Audio/Animals/lizard_happy.ogg + +- type: entity + name: Hell-Shaped + parent: MobXenoNeutralRavager + id: MobXenoHellShaped + description: A very clearly friend-shaped Xeno. + components: + - type: NpcFactionMember + factions: + - PetsNT + - type: Tool + speed: 3 + qualities: + - Prying + - type: Inventory + templateId: friendxeno + - type: IdExaminable + - type: InventorySlots + - type: Strippable + - type: UserInterface + interfaces: + enum.StrippingUiKey.Key: + type: StrippableBoundUserInterface + - type: Grammar + attributes: + proper: true + gender: male + - type: InteractionPopup + successChance: 0.5 + interactSuccessString: petting-success-reptile + interactFailureString: petting-failure-generic + interactSuccessSpawn: EffectHearts + interactSuccessSound: + path: /Audio/Animals/lizard_happy.ogg + +- type: entity + name: FXE Subject 7355 + parent: MobXenoNeutralRavager + id: MobXenoSubjectTess + description: An extremely oddly coloured xeno, with glowing stripes. An odd mutation. + components: + - type: NpcFactionMember + factions: + - PetsNT + - type: Tool + speed: 3 + qualities: + - Prying + - type: Sprite + drawdepth: Mobs + sprite: Mobs/Animals/subject7355.rsi + layers: + - map: ["enum.DamageStateVisualLayers.Base"] + state: subject7355 + - map: [ "enum.DamageStateVisualLayers.BaseUnshaded" ] + state: glow + shader: unshaded + - type: PointLight + radius: 2 + energy: 1 + color: "#639fff" + - type: DamageStateVisuals + states: + Alive: + Base: subject7355 + Critical: + Base: subject7355_crit + Dead: + Base: subject7355_dead + - type: Inventory + templateId: friendxeno + - type: IdExaminable + - type: InventorySlots + - type: Strippable + - type: UserInterface + interfaces: + enum.StrippingUiKey.Key: + type: StrippableBoundUserInterface + - type: Grammar + attributes: + proper: true + gender: male + - type: InteractionPopup + successChance: 0.5 + interactSuccessString: petting-success-reptile + interactFailureString: petting-failure-generic + interactSuccessSpawn: EffectHearts + interactSuccessSound: + path: /Audio/Animals/lizard_happy.ogg + +- type: entity + id: neutralXenoVents + parent: BaseGameRule + noSpawn: true + components: + - type: StationEvent + startAnnouncement: true + earliestStart: 20 + reoccurrenceDelay: 12 + minimumPlayers: 1 + weight: 6 # Really weak compared to other critters + duration: 60 + - type: VentCrittersRule + entries: + - id: MobXenoNeutralRouny + prob: 0.0075 + - id: MobXenoNeutralDrone + prob: 0.0075 + - id: MobXenoNeutralPraetorian + prob: 0.0075 + - id: MobXenoNeutralRavager + prob: 0.0075 + +- type: entity + id: ArgocyteVents + parent: BaseGameRule + noSpawn: true + components: + - type: StationEvent + startAnnouncement: true + earliestStart: 20 + reoccurrenceDelay: 12 + minimumPlayers: 30 + weight: 6 # Really weak compared to other critters + duration: 60 + - type: VentCrittersRule + entries: + - id: MobArgocyteSlurva + prob: 0.003 + - id: MobArgocyteBarrier + prob: 0.003 + - id: MobArgocyteSkitter + prob: 0.003 + - id: MobArgocyteSwiper + prob: 0.003 + - id: MobArgocyteMolder + prob: 0.003 + - id: MobArgocytePouncer + prob: 0.003 + - id: MobArgocyteGlider + prob: 0.003 + - id: MobArgocyteHarvester + prob: 0.003 + - id: MobArgocyteCrawler + prob: 0.003 + - id: MobArgocyteEnforcer + prob: 0.003 + - id: MobArgocyteFounder + prob: 0.003 + - id: MobArgocyteLeviathing + prob: 0.0001 + +- type: entity + id: MeatVents + parent: BaseGameRule + noSpawn: true + components: + - type: StationEvent + startAnnouncement: true + earliestStart: 20 + reoccurrenceDelay: 12 + minimumPlayers: 20 + weight: 6 # Really weak compared to other critters + duration: 60 + - type: VentCrittersRule + entries: + - id: MobFleshJared + prob: 0.005 + - id: MobFleshGolem + prob: 0.005 + - id: MobFleshClamp + prob: 0.005 + - id: MobFleshLover + prob: 0.005 + - id: MobAbomination + prob: 0.005 + +- type: entity + id: TickVents + parent: BaseGameRule + noSpawn: true + components: + - type: StationEvent + startAnnouncement: true + earliestStart: 20 + reoccurrenceDelay: 12 + minimumPlayers: 1 + weight: 6 # Really weak compared to other critters + duration: 60 + - type: VentCrittersRule + entries: + - id: MobTick + prob: 0.01 + +- type: entity + id: CarpVents + parent: BaseGameRule + noSpawn: true + components: + - type: StationEvent + startAnnouncement: true + earliestStart: 20 + reoccurrenceDelay: 12 + minimumPlayers: 20 + weight: 6 # Really weak compared to other critters + duration: 60 + - type: VentCrittersRule + entries: + - id: MobCarp + prob: 0.01 + - id: MobCarpMagic + prob: 0.01 + - id: MobCarpHolo + prob: 0.002 + - id: MobCarpRainbow + prob: 0.01 + - id: MobShark + prob: 0.002 + - id: MobCarpDragon + prob: 0.01 + +- type: entity + id: SpaceVents + parent: BaseGameRule + noSpawn: true + components: + - type: StationEvent + startAnnouncement: true + earliestStart: 20 + reoccurrenceDelay: 12 + minimumPlayers: 20 + weight: 6 # Really weak compared to other critters + duration: 60 + - type: VentCrittersRule + entries: + - id: MobBearSpace + prob: 0.01 + - id: MobKangarooSpace + prob: 0.01 + - id: MobSpiderSpace + prob: 0.01 + - id: MobCobraSpace + prob: 0.01 + +- type: entity + id: LightVents + parent: BaseGameRule + noSpawn: true + components: + - type: StationEvent + startAnnouncement: true + earliestStart: 20 + reoccurrenceDelay: 12 + minimumPlayers: 20 + weight: 6 # Really weak compared to other critters + duration: 60 + - type: VentCrittersRule + entries: + - id: MobLivingLight + prob: 0.01 + - id: MobLuminousPerson + prob: 0.01 + - id: MobLuminousObject + prob: 0.01 + - id: MobLuminousEntity + prob: 0.01 + +- type: entity + name: Friendly Xeno spawner + id: friendlyxenoSpawner + parent: MarkerBase + components: + - type: Sprite + layers: + - state: green + - sprite: Mobs/Aliens/Xenos/drone.rsi + state: sleeping + - type: RandomSpawner + prototypes: + - MobXenoNeutralRouny + - MobXenoNeutralPraetorian + - MobXenoNeutralDrone + - MobXenoNeutralRavager + chance: 1 diff --git a/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml b/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml index 6c9ec2049f4..dce408ed827 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml @@ -10,6 +10,7 @@ - PsionicInvisibility - Ghost - Normal + - Ethereal - type: ContentEye maxZoom: 8.916104, 8.916104 - type: Tag @@ -25,6 +26,8 @@ - type: GhostHearing - type: Hands - type: Puller + pushAcceleration: 1000000 # Will still be capped in max speed + maxPushRange: 20 - type: CombatMode - type: Physics ignorePaused: true @@ -40,32 +43,32 @@ - CentralCommand - type: UserInterface interfaces: - - key: enum.SolarControlConsoleUiKey.Key + enum.SolarControlConsoleUiKey.Key: type: SolarControlConsoleBoundUserInterface - - key: enum.CommunicationsConsoleUiKey.Key + enum.CommunicationsConsoleUiKey.Key: type: CommunicationsConsoleBoundUserInterface - - key: enum.RadarConsoleUiKey.Key + enum.RadarConsoleUiKey.Key: type: RadarConsoleBoundUserInterface - - key: enum.CargoConsoleUiKey.Orders + enum.CargoConsoleUiKey.Orders: type: CargoOrderConsoleBoundUserInterface - - key: enum.CrewMonitoringUIKey.Key + enum.CrewMonitoringUIKey.Key: type: CrewMonitoringBoundUserInterface - - key: enum.GeneralStationRecordConsoleKey.Key - # who the fuck named this bruh + enum.GeneralStationRecordConsoleKey.Key: + # who the fuck named this bruh type: GeneralStationRecordConsoleBoundUserInterface - type: IntrinsicUI uis: - - key: enum.SolarControlConsoleUiKey.Key + enum.SolarControlConsoleUiKey.Key: toggleAction: ActionAGhostShowSolar - - key: enum.CommunicationsConsoleUiKey.Key + enum.CommunicationsConsoleUiKey.Key: toggleAction: ActionAGhostShowCommunications - - key: enum.RadarConsoleUiKey.Key + enum.RadarConsoleUiKey.Key: toggleAction: ActionAGhostShowRadar - - key: enum.CargoConsoleUiKey.Orders + enum.CargoConsoleUiKey.Orders: toggleAction: ActionAGhostShowCargo - - key: enum.CrewMonitoringUIKey.Key + enum.CrewMonitoringUIKey.Key: toggleAction: ActionAGhostShowCrewMonitoring - - key: enum.GeneralStationRecordConsoleKey.Key + enum.GeneralStationRecordConsoleKey.Key: toggleAction: ActionAGhostShowStationRecords - type: SolarControlConsole # look ma i AM the computer! - type: CommunicationsConsole diff --git a/Resources/Prototypes/Entities/Mobs/Player/arachnid.yml b/Resources/Prototypes/Entities/Mobs/Player/arachnid.yml new file mode 100644 index 00000000000..d9dea3c18d9 --- /dev/null +++ b/Resources/Prototypes/Entities/Mobs/Player/arachnid.yml @@ -0,0 +1,13 @@ +- type: entity + save: false + name: Urist McWeb + parent: BaseMobArachnid + id: MobArachnid + components: + - type: Respirator + damage: + types: + Asphyxiation: 1.5 # This makes space and crit more lethal to arachnids. + damageRecovery: + types: + Asphyxiation: -0.5 diff --git a/Resources/Prototypes/Entities/Mobs/Player/dragon.yml b/Resources/Prototypes/Entities/Mobs/Player/dragon.yml index 7633106bda4..cb9dc1c911a 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/dragon.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/dragon.yml @@ -14,6 +14,8 @@ makeSentient: true name: ghost-role-information-space-dragon-name description: ghost-role-information-space-dragon-description + raffle: + settings: default - type: GhostTakeoverAvailable - type: HTN rootTask: @@ -89,6 +91,12 @@ speedModifierThresholds: 250: 0.7 400: 0.5 + # disable taking damage from fire, since its a fire breathing dragon + - type: Flammable + damage: + types: {} + - type: Temperature + heatDamageThreshold: 800 - type: Metabolizer solutionOnBody: false updateInterval: 0.25 @@ -137,11 +145,34 @@ components: - type: Dragon spawnRiftAction: ActionSpawnRift - # - type: GenericAntag - # rule: Dragon -# - type: GuideHelp -# guides: -# - MinorAntagonists + - type: GenericAntag + rule: Dragon + - type: ActionGun + action: ActionDragonsBreath + gunProto: DragonsBreathGun + - type: GuideHelp + guides: + - MinorAntagonists + +- type: entity + noSpawn: true + id: DragonsBreathGun + name: dragon's lung + description: For dragon's breathing + components: + - type: RechargeBasicEntityAmmo + rechargeCooldown: 5 + rechargeSound: + path: /Audio/Animals/space_dragon_roar.ogg + - type: BasicEntityAmmoProvider + proto: ProjectileDragonsBreath + capacity: 1 + count: 1 + - type: Gun + soundGunshot: + path: /Audio/Animals/space_dragon_roar.ogg + soundEmpty: null + projectileSpeed: 5 - type: entity parent: BaseMobDragon @@ -150,6 +181,8 @@ components: - type: GhostRole description: ghost-role-information-space-dragon-dungeon-description + raffle: + settings: default - type: SlowOnDamage speedModifierThresholds: 100: 0.7 @@ -179,6 +212,7 @@ state: icon event: !type:DragonSpawnRiftActionEvent useDelay: 1 + priority: 3 - type: entity id: ActionDevour @@ -190,3 +224,18 @@ icon: { sprite : Interface/Actions/devour.rsi, state: icon } iconOn: { sprite : Interface/Actions/devour.rsi, state: icon-on } event: !type:DevourActionEvent + priority: 1 + +- type: entity + noSpawn: true + id: ActionDragonsBreath + name: "[color=orange]Dragon's Breath[/color]" + description: Spew out flames at anyone foolish enough to attack you! + components: + - type: WorldTargetAction + # TODO: actual sprite + icon: { sprite : Objects/Weapons/Guns/Projectiles/magic.rsi, state: fireball } + event: !type:ActionGunShootEvent + priority: 2 + checkCanAccess: false + range: 0 diff --git a/Resources/Prototypes/Entities/Mobs/Player/familiars.yml b/Resources/Prototypes/Entities/Mobs/Player/familiars.yml index ab479e0332f..95c87fcb635 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/familiars.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/familiars.yml @@ -1,6 +1,75 @@ +- type: entity + parent: + - BaseMob + - MobCombat + - MobDamageable + id: BaseMobPsionicFamiliar + abstract: true + components: + - type: Sprite + drawdepth: Mobs + layers: + - map: ["enum.DamageStateVisualLayers.Base"] + state: bat + sprite: Mobs/Animals/bat.rsi + - type: GhostRole + makeSentient: true + allowMovement: true + allowSpeech: true + name: ghost-role-information-familiar-name + description: ghost-role-information-familiar-description + rules: ghost-role-information-familiar-rules + raffle: + settings: default + - type: GhostTakeoverAvailable + - type: Tag + tags: + - DoorBumpOpener + - type: MobThresholds + thresholds: + 0: Alive + 50: Dead + - type: Damageable + damageContainer: CorporealSpirit + damageModifierSet: CorporealSpirit + - type: MindContainer + showExamineInfo: false + - type: NpcFactionMember + factions: + - PsionicInterloper + - type: Alerts + - type: Familiar + - type: Psionic + removable: false + psychognomicDescriptors: + - p-descriptor-bound + - p-descriptor-cyclic + - type: InnatePsionicPowers + powersToAdd: + - TelepathyPower + - type: HTN + rootTask: + task: MeleePsionicFamiliarCompound + blackboard: + IdleRange: !type:Single + 3.5 + FollowCloseRange: !type:Single + 2.0 + FollowRange: !type:Single + 3.0 + - type: NPCRetaliation + attackMemoryLength: 10 + retaliateFriendlies: true + - type: PsionicFamiliar + - type: Dispellable + - type: DamageOnDispel + damage: + types: + Heat: 100 + - type: entity name: Remilia - parent: MobBat + parent: BaseMobPsionicFamiliar id: MobBatRemilia description: The chaplain's familiar. Likes fruit. components: @@ -23,25 +92,47 @@ - type: Access tags: - Chapel - - type: Damageable # Nyanotrasen - Corporeal Spirit allows Holy water to do damage - damageContainer: CorporealSpirit - damageModifierSet: CorporealSpirit - - type: MindContainer - showExamineInfo: true - - type: NpcFactionMember - factions: - - PetsNT - - PsionicInterloper #Nyano - Summary: makes a part of the psionic faction. - - type: Alerts - - type: Familiar - - type: Psionic - removable: false - psychognomicDescriptors: - - p-descriptor-bound - - p-descriptor-cyclic - type: InnatePsionicPowers powersToAdd: - TelepathyPower + - XenoglossyPower + - type: MovementSpeedModifier + baseWalkSpeed : 3 + baseSprintSpeed : 6 + - type: Speech + speechSounds: Squeak + speechVerb: SmallMob + allowedEmotes: ['Squeak'] + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeCircle + radius: 0.25 + density: 0.8 + mask: + - FlyingMobMask + layer: + - FlyingMobLayer + - type: InteractionPopup + successChance: 0.2 + interactSuccessString: petting-success-soft-floofy + interactFailureString: petting-failure-bat + interactSuccessSpawn: EffectHearts + interactSuccessSound: + path: /Audio/Animals/fox_squeak.ogg + - type: MeleeWeapon + soundHit: + path: /Audio/Effects/bite.ogg + angle: 0 + animation: WeaponArcBite + damage: + types: + Piercing: 5 + - type: MobThresholds + thresholds: + 0: Alive + 30: Dead - type: entity name: Cerberus @@ -56,6 +147,8 @@ name: ghost-role-information-cerberus-name description: ghost-role-information-cerberus-description rules: ghost-role-information-cerberus-rules + raffle: + settings: default - type: GhostTakeoverAvailable - type: MeleeWeapon altDisarm: false @@ -72,7 +165,7 @@ - type: NpcFactionMember factions: - Syndicate - - PsionicInterloper #Nyano - Summary: makes part of the psionoic faction. + - PsionicInterloper - type: InteractionPopup successChance: 0.5 interactSuccessString: petting-success-corrupted-corgi @@ -97,7 +190,7 @@ showExamineInfo: true - type: Familiar - type: Dispellable - - type: Psionic #Nyano - Summary: makes psionic on creation. + - type: Psionic removable: false - type: InnatePsionicPowers powersToAdd: @@ -107,3 +200,47 @@ Male: Cerberus Female: Cerberus Unsexed: Cerberus + +- type: entity + name: imp familiar + parent: BaseMobPsionicFamiliar + id: MobPsionicFamiliarImp + description: A living mote of flame summoned from Gehenna. + components: + - type: Sprite + drawdepth: Mobs + layers: + - map: ["enum.DamageStateVisualLayers.Base"] + state: imp + sprite: Mobs/Demons/imp.rsi + - type: InnatePsionicPowers + powersToAdd: + - TelepathyPower + - PyrokineticFlare + - XenoglossyPower + - type: MeleeWeapon + damage: + types: + Heat: 9 + soundHit: + path: /Audio/Weapons/Guns/Hits/energy_meat1.ogg + params: + variation: 0.250 + volume: -10 + - type: PointLight + radius: 2 + energy: 30 + color: "#ff4500" + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeCircle + radius: 0.35 + density: 13 + mask: + - Opaque + layer: + - MobLayer + - type: RandomMetadata + nameSegments: [names_golem] diff --git a/Resources/Prototypes/Entities/Mobs/Player/guardian.yml b/Resources/Prototypes/Entities/Mobs/Player/guardian.yml index 03253a79b32..6d90ac3ffee 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/guardian.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/guardian.yml @@ -13,6 +13,8 @@ makeSentient: true name: ghost-role-information-guardian-name description: ghost-role-information-guardian-description + raffle: + settings: default - type: GhostTakeoverAvailable - type: Input context: "human" @@ -95,8 +97,8 @@ - type: MeleeSpeech - type: UserInterface interfaces: - - key: enum.MeleeSpeechUiKey.Key - type: MeleeSpeechBoundUserInterface + enum.MeleeSpeechUiKey.Key: + type: MeleeSpeechBoundUserInterface - type: Actions - type: Guardian - type: Tag @@ -116,6 +118,8 @@ makeSentient: true name: ghost-role-information-holoparasite-name description: ghost-role-information-holoparasite-description + raffle: + settings: default - type: GhostTakeoverAvailable - type: NameIdentifier group: Holoparasite @@ -146,6 +150,8 @@ makeSentient: true name: ghost-role-information-ifrit-name description: ghost-role-information-ifrit-description + raffle: + settings: default - type: GhostTakeoverAvailable - type: RandomSprite available: @@ -177,6 +183,8 @@ makeSentient: true name: ghost-role-information-holoclown-name description: ghost-role-information-holoclown-description + raffle: + settings: default - type: GhostTakeoverAvailable - type: NameIdentifier group: Holoparasite diff --git a/Resources/Prototypes/Entities/Mobs/Player/harpy.yml b/Resources/Prototypes/Entities/Mobs/Player/harpy.yml new file mode 100644 index 00000000000..f4222301b50 --- /dev/null +++ b/Resources/Prototypes/Entities/Mobs/Player/harpy.yml @@ -0,0 +1,24 @@ +- type: entity + save: false + name: Urist McHarpy + parent: MobHarpyBase + id: MobHarpy + components: + - type: CombatMode + - type: MindContainer + showExamineInfo: true + - type: Input + context: "human" + - type: MobMover + - type: InputMover + - type: Respirator + - type: Alerts + - type: Actions + - type: Eye + - type: CameraRecoil + - type: Examiner + - type: CanHostGuardian + - type: NpcFactionMember + factions: + - NanoTrasen + - Birb diff --git a/Resources/Prototypes/Entities/Mobs/Player/human.yml b/Resources/Prototypes/Entities/Mobs/Player/human.yml index 613aabc4fff..ed2ecc1fae9 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/human.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/human.yml @@ -50,9 +50,8 @@ components: - type: NukeOperative - type: RandomHumanoidAppearance - #- type: PsionicBonusChance #Nyano - Summary: makes more likely to be psionic. - # multiplier: 7 - # warn: false + - type: Psionic + powerRollMultiplier: 7 - type: entity noSpawn: true @@ -72,9 +71,8 @@ - type: NpcFactionMember factions: - Syndicate - #- type: PsionicBonusChance #Nyano - Summary: makes more likely to be psionic. - # multiplier: 7 - # warn: false + - type: Psionic + powerRollMultiplier: 7 # Space Ninja - type: entity @@ -91,8 +89,8 @@ factions: - Syndicate - type: SpaceNinja - # - type: GenericAntag - # rule: Ninja + - type: GenericAntag + rule: Ninja - type: AutoImplant implants: - DeathAcidifierImplant diff --git a/Resources/Prototypes/Entities/Mobs/Player/humanoid.yml b/Resources/Prototypes/Entities/Mobs/Player/humanoid.yml index 52446ae8fa8..a4bfe2289bd 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/humanoid.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/humanoid.yml @@ -21,11 +21,15 @@ - type: randomHumanoidSettings id: DeathSquad randomizeName: false + speciesBlacklist: + - Shadowkin components: - type: MindShield - type: GhostRole name: ghost-role-information-Death-Squad-name description: ghost-role-information-Death-Squad-description + raffle: + settings: short - type: GhostTakeoverAvailable - type: Loadout prototypes: [ DeathSquadGear ] @@ -57,11 +61,15 @@ - type: randomHumanoidSettings id: ERTLeader randomizeName: false + speciesBlacklist: + - Shadowkin components: - type: MindShield - type: GhostRole name: ghost-role-information-ert-leader-name description: ghost-role-information-ert-leader-description + raffle: + settings: short - type: GhostTakeoverAvailable - type: Loadout prototypes: [ ERTLeaderGear ] @@ -92,6 +100,8 @@ - type: GhostRole name: ghost-role-information-ert-leader-name description: ghost-role-information-ert-leader-description + raffle: + settings: short - type: GhostTakeoverAvailable - type: Loadout prototypes: [ ERTLeaderGearEVA ] @@ -114,6 +124,8 @@ - type: GhostRole name: ghost-role-information-ert-leader-name description: ghost-role-information-ert-leader-description + raffle: + settings: short - type: GhostTakeoverAvailable - type: Loadout prototypes: [ ERTLeaderGearEVALecter ] @@ -145,6 +157,8 @@ - type: GhostRole name: ghost-role-information-ert-chaplain-name description: ghost-role-information-ert-chaplain-description + raffle: + settings: short - type: GhostTakeoverAvailable - type: RandomMetadata nameSegments: @@ -174,6 +188,8 @@ - type: GhostRole name: ghost-role-information-ert-chaplain-name description: ghost-role-information-ert-chaplain-description + raffle: + settings: short - type: GhostTakeoverAvailable - type: Loadout prototypes: [ ERTChaplainGearEVA ] @@ -205,6 +221,8 @@ - type: GhostRole name: ghost-role-information-ert-janitor-name description: ghost-role-information-ert-janitor-description + raffle: + settings: short - type: GhostTakeoverAvailable - type: RandomMetadata nameSegments: @@ -234,6 +252,8 @@ - type: GhostRole name: ghost-role-information-ert-janitor-name description: ghost-role-information-ert-janitor-description + raffle: + settings: short - type: GhostTakeoverAvailable - type: Loadout prototypes: [ ERTJanitorGearEVA ] @@ -265,6 +285,8 @@ - type: GhostRole name: ghost-role-information-ert-engineer-name description: ghost-role-information-ert-engineer-description + raffle: + settings: short - type: GhostTakeoverAvailable - type: RandomMetadata nameSegments: @@ -294,6 +316,8 @@ - type: GhostRole name: ghost-role-information-ert-engineer-name description: ghost-role-information-ert-engineer-description + raffle: + settings: short - type: GhostTakeoverAvailable - type: Loadout prototypes: [ ERTEngineerGearEVA ] @@ -325,6 +349,8 @@ - type: GhostRole name: ghost-role-information-ert-security-name description: ghost-role-information-ert-security-description + raffle: + settings: short - type: GhostTakeoverAvailable - type: RandomMetadata nameSegments: @@ -354,6 +380,8 @@ - type: GhostRole name: ghost-role-information-ert-security-name description: ghost-role-information-ert-security-description + raffle: + settings: short - type: GhostTakeoverAvailable - type: Loadout prototypes: [ ERTSecurityGearEVA ] @@ -375,6 +403,8 @@ - type: GhostRole name: ghost-role-information-ert-security-name description: ghost-role-information-ert-security-description + raffle: + settings: short - type: GhostTakeoverAvailable - type: Loadout prototypes: [ ERTSecurityGearEVALecter ] @@ -406,6 +436,8 @@ - type: GhostRole name: ghost-role-information-ert-medical-name description: ghost-role-information-ert-medical-description + raffle: + settings: short - type: GhostTakeoverAvailable - type: RandomMetadata nameSegments: @@ -435,6 +467,8 @@ - type: GhostRole name: ghost-role-information-ert-medical-name description: ghost-role-information-ert-medical-description + raffle: + settings: short - type: GhostTakeoverAvailable - type: Loadout prototypes: [ ERTMedicalGearEVA ] @@ -456,6 +490,8 @@ - type: randomHumanoidSettings id: CBURNAgent + speciesBlacklist: + - Shadowkin components: - type: MindShield - type: Loadout @@ -463,6 +499,8 @@ - type: GhostRole name: ghost-role-information-cburn-agent-name description: ghost-role-information-cburn-agent-description + raffle: + settings: short - type: GhostTakeoverAvailable - type: RandomMetadata nameSegments: @@ -484,11 +522,15 @@ - type: randomHumanoidSettings id: CentcomOfficial + speciesBlacklist: + - Shadowkin components: - type: MindShield - type: GhostRole name: ghost-role-information-centcom-official-name description: ghost-role-information-centcom-official-description + raffle: + settings: default - type: GhostTakeoverAvailable - type: Loadout prototypes: [ CentcomGear ] @@ -510,6 +552,8 @@ - type: randomHumanoidSettings id: SyndicateAgent + speciesBlacklist: + - Shadowkin components: - type: Loadout prototypes: [SyndicateOperativeGearExtremelyBasic] @@ -526,11 +570,12 @@ - type: randomHumanoidSettings id: NukeOp + speciesBlacklist: + - Shadowkin components: - type: NukeOperative - #- type: PsionicBonusChance #Nyano - Summary: makes more likely to be psionic. - # multiplier: 7 - # warn: false + - type: Psionic + powerRollMultiplier: 7 - type: entity id: RandomHumanoidSpawnerCluwne @@ -549,10 +594,318 @@ - type: randomHumanoidSettings id: Cluwne + speciesBlacklist: + - Shadowkin randomizeName: false components: - type: GhostRole name: ghost-role-information-cluwne-name description: ghost-role-information-cluwne-description + raffle: + settings: default - type: GhostTakeoverAvailable - type: Cluwne + +## Lost Cargo technician + +- type: entity + name: lost cargo technician spawner + id: LostCargoTechnicianSpawner + parent: MarkerBase + components: + - type: Sprite + layers: + - state: red + - sprite: Objects/Tools/appraisal-tool.rsi + state: icon + - type: RandomSpawner + prototypes: + - RandomHumanoidLostCargoTechnician + chance: 1 + +- type: entity + id: RandomHumanoidLostCargoTechnician + name: lost cargo technician ghost role + components: + - type: Sprite + sprite: Objects/Tools/appraisal-tool.rsi + state: icon + - type: RandomHumanoidSpawner + settings: LostCargoTechnician + +- type: randomHumanoidSettings + id: LostCargoTechnician + randomizeName: false + components: + - type: GhostRole + name: ghost-role-information-lost-cargo-technical-name + description: ghost-role-information-lost-cargo-technical-description + rules: ghost-role-information-lost-cargo-technical-rules + raffle: + settings: short + - type: GhostTakeoverAvailable + - type: Loadout + prototypes: [ CargoTechGear ] + - type: RandomMetadata + nameSegments: + - names_first + - names_last + +# Clown troupe + +- type: entity + name: clown troupe spawner + id: ClownTroupeSpawner + parent: MarkerBase + components: + - type: Sprite + layers: + - state: red + - sprite: Objects/Fun/bikehorn.rsi + state: icon + - type: RandomSpawner + prototypes: + - RandomHumanoidClownTroupe + rarePrototypes: + - RandomHumanoidClownTroupeBanana + rareChance: 0.3 + +- type: entity + id: RandomHumanoidClownTroupe + name: clown troupe ghost role + components: + - type: Sprite + sprite: Objects/Tools/appraisal-tool.rsi + state: icon + - type: RandomHumanoidSpawner + settings: ClownTroupe + +- type: entity + id: RandomHumanoidClownTroupeBanana + name: banana clown troupe + parent: RandomHumanoidClownTroupe + components: + - type: RandomHumanoidSpawner + settings: ClownTroupeBanana + +- type: randomHumanoidSettings + id: ClownTroupe + randomizeName: false + components: + - type: GhostRole + name: ghost-role-information-clown-troupe-name + description: ghost-role-information-clown-troupe-description + rules: ghost-role-information-clown-troupe-rules + raffle: + settings: short + - type: GhostTakeoverAvailable + - type: Loadout + prototypes: [ ClownGear ] + - type: RandomMetadata + nameSegments: + - names_clown + +- type: randomHumanoidSettings + id: ClownTroupeBanana + randomizeName: false + components: + - type: GhostRole + name: ghost-role-information-clown-troupe-name + description: ghost-role-information-clown-troupe-description + rules: ghost-role-information-clown-troupe-rules + - type: GhostTakeoverAvailable + - type: Loadout + prototypes: [ BananaClown ] + - type: RandomMetadata + nameSegments: + - names_clown + +# Traveling exotic chef + +- type: entity + name: traveling chef spawner + id: TravelingChefSpawner + parent: MarkerBase + components: + - type: Sprite + layers: + - state: red + - sprite: Objects/Weapons/Melee/kitchen_knife.rsi + state: icon + - type: RandomSpawner + prototypes: + - RandomHumanoidTravelingChef + +- type: entity + id: RandomHumanoidTravelingChef + name: traveling chef ghost role + components: + - type: Sprite + sprite: Objects/Tools/appraisal-tool.rsi + state: icon + - type: RandomHumanoidSpawner + settings: TravelingChef + +- type: randomHumanoidSettings + id: TravelingChef + randomizeName: false + components: + - type: GhostRole + name: ghost-role-information-traveling-chef-name + description: ghost-role-information-traveling-chef-description + rules: ghost-role-information-traveling-chef-rules + raffle: + settings: short + - type: GhostTakeoverAvailable + - type: Loadout + prototypes: [ ChefGear ] + - type: RandomMetadata + nameSegments: + - names_first + - names_last + +# Disaster victim + +- type: entity + name: disaster victim spawner + id: DisasterVictimSpawner + parent: MarkerBase + components: + - type: Sprite + layers: + - state: red + - sprite: Clothing/OuterClothing/Hardsuits/basic.rsi + state: icon + - type: RandomSpawner + prototypes: + - RandomHumanoidDisasterVictimRD + - RandomHumanoidDisasterVictimCMO + - RandomHumanoidDisasterVictimCaptain + - MobSkeletonCloset + +- type: entity + id: RandomHumanoidDisasterVictimRD + name: disaster victim RD ghost role + components: + - type: Sprite + sprite: Clothing/OuterClothing/Hardsuits/basic.rsi + state: icon + - type: RandomHumanoidSpawner + settings: DisasterVictimResearchDirector + +- type: entity + id: RandomHumanoidDisasterVictimCMO + parent: RandomHumanoidDisasterVictimRD + name: disaster victim CMO ghost role + components: + - type: RandomHumanoidSpawner + settings: DisasterVictimCMO + +- type: entity + id: RandomHumanoidDisasterVictimCaptain + parent: RandomHumanoidDisasterVictimRD + name: disaster victim Captain ghost role + components: + - type: RandomHumanoidSpawner + settings: DisasterVictimCaptain + +- type: randomHumanoidSettings + id: DisasterVictimResearchDirector + randomizeName: false + components: + - type: GhostRole + name: ghost-role-information-disaster-victim-name + description: ghost-role-information-disaster-victim-description + rules: ghost-role-information-disaster-victim-rules + raffle: + settings: default + - type: GhostTakeoverAvailable + - type: Loadout + prototypes: [ ResearchDirectorGear ] + - type: RandomMetadata + nameSegments: + - names_first + - names_last + +- type: randomHumanoidSettings + id: DisasterVictimCMO + randomizeName: false + components: + - type: GhostRole + name: ghost-role-information-disaster-victim-name + description: ghost-role-information-disaster-victim-description + rules: ghost-role-information-disaster-victim-rules + raffle: + settings: default + - type: GhostTakeoverAvailable + - type: Loadout + prototypes: [ CMOGear ] + - type: RandomMetadata + nameSegments: + - names_first + - names_last + +- type: randomHumanoidSettings + id: DisasterVictimCaptain + randomizeName: false + components: + - type: GhostRole + name: ghost-role-information-disaster-victim-name + description: ghost-role-information-disaster-victim-description + rules: ghost-role-information-disaster-victim-rules + raffle: + settings: default + - type: GhostTakeoverAvailable + - type: Loadout + prototypes: [ CaptainGear ] + - type: RandomMetadata + nameSegments: + - names_first + - names_last + +# Syndie Disaster Victim + +- type: entity + name: syndie disaster victim spawner + id: SyndieDisasterVictimSpawner + parent: MarkerBase + components: + - type: Sprite + layers: + - state: red + - sprite: Structures/Decoration/banner.rsi + state: banner_syndicate + - type: RandomSpawner + prototypes: + - RandomHumanoidSyndieDisasterVictim + +- type: entity + id: RandomHumanoidSyndieDisasterVictim + name: syndie disaster victim ghost role + components: + - type: Sprite + sprite: Structures/Decoration/banner.rsi + state: banner_syndicate + - type: RandomHumanoidSpawner + settings: SyndieDisasterVictim + +- type: randomHumanoidSettings + id: SyndieDisasterVictim + randomizeName: false + components: + - type: NpcFactionMember + factions: + - Syndicate + - type: GhostRole + name: ghost-role-information-syndie-disaster-victim-name + description: ghost-role-information-syndie-disaster-victim-description + rules: ghost-role-information-syndie-disaster-victim-rules + raffle: + settings: short + - type: GhostTakeoverAvailable + - type: Loadout + prototypes: [ SyndicateOperativeGearCivilian ] + - type: RandomMetadata + nameSegments: + - names_first + - names_last diff --git a/Resources/Prototypes/Entities/Mobs/Player/ipc.yml b/Resources/Prototypes/Entities/Mobs/Player/ipc.yml index cdf68f2fc41..85aec21ac66 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/ipc.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/ipc.yml @@ -28,11 +28,6 @@ # Por algum motivo esse componente é bem bugado, então o "LockTime" é quem diz o tempo de tudo enquanto o unlock só está servindo como um bool (???) lockTime: 5 unlockTime: 5 - - type: InteractionPopup - successChance: 1 - interactSuccessString: hugging-success-generic - interactSuccessSound: /Audio/Effects/thudswoosh.ogg - messagePerceivedByOthers: hugging-success-generic-others - type: NpcFactionMember factions: - NanoTrasen @@ -69,9 +64,9 @@ - type: SiliconDownOnDead - type: Inventory templateId: ipc - # - type: GuideHelp - # guides: - # - IPCs + - type: GuideHelp + guides: + - IPCs - type: Silicon entityType: enum.SiliconType.Player batteryPowered: true @@ -101,16 +96,32 @@ - type: CanHostGuardian - type: LanguageKnowledge speaks: - - GalacticCommon + - TauCetiBasic - RobotTalk understands: - - GalacticCommon + - TauCetiBasic - RobotTalk - type: WeldingHealable - type: PsionicInsulation - type: OfferItem - type: LayingDown - type: Carriable + - type: StepTriggerImmune + whitelist: + types: + - Shard + - type: Fixtures + fixtures: # TODO: This needs a second fixture just for mob collisions. + fix1: + shape: + !type:PhysShapeCircle + radius: 0.35 + density: 185 + restitution: 0.0 + mask: + - MobMask + layer: + - MobLayer - type: entity save: false diff --git a/Resources/Prototypes/Entities/Mobs/Player/moth.yml b/Resources/Prototypes/Entities/Mobs/Player/moth.yml new file mode 100644 index 00000000000..e79ba1a454f --- /dev/null +++ b/Resources/Prototypes/Entities/Mobs/Player/moth.yml @@ -0,0 +1,5 @@ +- type: entity + save: false + name: Urist McFluff + parent: BaseMobMoth + id: MobMoth \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Mobs/Player/observer.yml b/Resources/Prototypes/Entities/Mobs/Player/observer.yml index 0086be81d9a..c92595ffc9d 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/observer.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/observer.yml @@ -32,6 +32,7 @@ - PsionicInvisibility - Ghost - Normal + - Ethereal - type: Input context: "ghost" - type: Examiner diff --git a/Resources/Prototypes/Entities/Mobs/Player/reptilian.yml b/Resources/Prototypes/Entities/Mobs/Player/reptilian.yml index b9f265e0bcf..b332f573fb5 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/reptilian.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/reptilian.yml @@ -1,6 +1,7 @@ - type: entity save: false - name: Urisst' Mzhand + name: Urist McScales + suffix: Urisst' Mzhand parent: BaseMobReptilian id: MobReptilian diff --git a/Resources/Prototypes/Entities/Mobs/Player/shadowkin.yml b/Resources/Prototypes/Entities/Mobs/Player/shadowkin.yml new file mode 100644 index 00000000000..2a58fe5c1fe --- /dev/null +++ b/Resources/Prototypes/Entities/Mobs/Player/shadowkin.yml @@ -0,0 +1,5 @@ +- type: entity + save: false + name: Urist McShadow + parent: MobShadowkinBase + id: MobShadowkin \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Mobs/Player/silicon_base.yml b/Resources/Prototypes/Entities/Mobs/Player/silicon_base.yml index 0b122df1c84..a8772a41f8a 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/silicon_base.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/silicon_base.yml @@ -166,7 +166,6 @@ # damage: # types: # Blunt: 0.28 #per second, scales with pressure and other constants. - atmosTemperatureTransferEfficiency: 0.4 - type: Identity # soundHit: # path: /Audio/Effects/metalbreak.ogg @@ -202,11 +201,9 @@ - type: Strippable - type: UserInterface interfaces: - - key: enum.VoiceMaskUIKey.Key - type: VoiceMaskBoundUserInterface - - key: enum.HumanoidMarkingModifierKey.Key + enum.HumanoidMarkingModifierKey.Key: type: HumanoidMarkingModifierBoundUserInterface - - key: enum.StrippingUiKey.Key + enum.StrippingUiKey.Key: type: StrippableBoundUserInterface - type: Emoting - type: Grammar diff --git a/Resources/Prototypes/Entities/Mobs/Player/skeleton.yml b/Resources/Prototypes/Entities/Mobs/Player/skeleton.yml index 5c2a88c1064..bb77cefad50 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/skeleton.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/skeleton.yml @@ -11,6 +11,8 @@ - type: GhostRole name: ghost-role-information-skeleton-pirate-name description: ghost-role-information-skeleton-pirate-description + raffle: + settings: default - type: GhostTakeoverAvailable - type: Loadout prototypes: [PirateGear] @@ -25,6 +27,8 @@ - type: GhostRole name: ghost-role-information-skeleton-biker-name description: ghost-role-information-skeleton-biker-description + raffle: + settings: default - type: GhostTakeoverAvailable - type: Loadout prototypes: [SkeletonBiker] @@ -38,6 +42,8 @@ - type: GhostRole name: ghost-role-information-closet-skeleton-name description: ghost-role-information-closet-skeleton-description + raffle: + settings: default - type: GhostTakeoverAvailable - type: Loadout prototypes: [LimitedPassengerGear] diff --git a/Resources/Prototypes/Entities/Mobs/Player/slime.yml b/Resources/Prototypes/Entities/Mobs/Player/slime.yml new file mode 100644 index 00000000000..d748ff8f3cb --- /dev/null +++ b/Resources/Prototypes/Entities/Mobs/Player/slime.yml @@ -0,0 +1,4 @@ +- type: entity + save: false + parent: BaseMobSlimePerson + id: MobSlimePerson \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Mobs/Player/terminator.yml b/Resources/Prototypes/Entities/Mobs/Player/terminator.yml deleted file mode 100644 index 663838e01ac..00000000000 --- a/Resources/Prototypes/Entities/Mobs/Player/terminator.yml +++ /dev/null @@ -1,203 +0,0 @@ -# stuff common to flesh and endoskeleton -- type: entity - abstract: true - id: MobTerminatorBase - components: - - type: ZombieImmune # yeah no - - type: FlashImmunity # no brain to brainwash, eyes are robotic - -- type: entity - parent: [MobHuman, MobTerminatorBase] - id: MobHumanTerminator - # uses random name generator dont worry - name: exterminator - components: - - type: Terminator - - type: GenericAntag - rule: Exterminator - # reduced barotrauma damage - - type: Barotrauma - damage: - types: - Blunt: 0.1 - # 4x stamina, faster recovery - - type: Stamina - decay: 6 - cooldown: 1 - critThreshold: 400 - # immune to space drugs, pax, temporary blindness - - type: StatusEffects - allowed: - - Stun - - KnockedDown - - SlowedDown - - Stutter - - Electrocution - - Drunk - - SlurredSpeech - - RatvarianLanguage - - PressureImmunity - - Muted - - ForcedSleep - - StaminaModifier - - type: MobState - allowedStates: - - Alive - - Dead - # endoskeleton need it - - type: TransferMindOnGib - - type: MobThresholds - thresholds: - 0: Alive - # used for health display its not possible to actually fall into crit - 200: Dead - # fire!!!! - - type: Flammable - damage: - types: - Heat: 6.0 - # slightly wider thresholds - - type: Temperature - heatDamageThreshold: 390 - coldDamageThreshold: 240 - # take terminator flesh damage - - type: Damageable - damageModifierSet: CyberneticFlesh - # only organ is an endoskeleton, which is transferred when flesh dies - - type: Body - prototype: TerminatorFlesh - # endoskeleton transformation when either you would get burned to crit or killed by any damage - # you will become an endoskeleton as your last chance to kill the target - - type: Destructible - thresholds: - # the burn trigger is first incase of a bombing or nuking, it might well do over 200 damage but 100 heat is more important - - trigger: - !type:DamageTypeTrigger - damageType: Heat - damage: 100 - behaviors: - - !type:PopupBehavior - popup: terminator-endoskeleton-burn-popup - popupType: LargeCaution - - !type:GibBehavior - - trigger: - !type:DamageTrigger - damage: 200 - behaviors: - - !type:PopupBehavior - popup: terminator-endoskeleton-gib-popup - popupType: LargeCaution - - !type:GibBehavior - # faster than humans when damaged - - type: SlowOnDamage - speedModifierThresholds: - 70: 0.8 - 90: 0.6 - # arnold is very strong - - type: MeleeWeapon - damage: - types: - Blunt: 10 - Structural: 10 - - type: RandomHumanoidAppearance - - type: Tag - tags: - - CanPilot - - FootstepSound - - DoorBumpOpener - - Unimplantable # no brain to mindshield, no organic body to implant into - -- type: entity - parent: - - BaseMob - - MobCombat - - MobDamageable - - MobSiliconBase - - MobTerminatorBase - id: MobTerminatorEndoskeleton - # you are now valid - name: nt-800 "exterminator" endoskeleton - description: The inner powerhouse of Susnet's infiltrator androids. Ridiculously hard alloy on the inside, unassuming flesh on the outside. - components: - - type: HumanoidAppearance - species: Terminator - - type: MovementSpeedModifier - baseWalkSpeed: 1.5 - baseSprintSpeed: 3.0 - - type: Sprite - sprite: Mobs/Species/Terminator/parts.rsi - - type: Fixtures - fixtures: - fix1: - shape: - !type:PhysShapeCircle - radius: 0.35 - # he heavy - density: 500 - mask: - - MobMask - layer: - - MobLayer - - type: MobThresholds - thresholds: - 0: Alive - # gibbed at 200 so cant go crit - 200: Dead - # incase some weird stuff happens and the crew adopts a terminator - - type: Repairable - doAfterDelay: 15 - allowSelfRepair: false - - type: Body - prototype: TerminatorEndoskeleton - # lets it sit in the terminator flesh's brain slot - - type: Organ - - type: Brain - - type: TypingIndicator - proto: robot # beep boop borp - - type: Speech - speechSounds: Pai - - type: Damageable - damageModifierSet: Cybernetic - - type: Destructible - thresholds: - - trigger: - !type:DamageTrigger - damage: 200 - behaviors: - - !type:PlaySoundBehavior - # endoSKELETON - sound: /Audio/Effects/bone_rattle.ogg - # a keepsake or a gift for cargo - - !type:SpawnEntitiesBehavior - spawn: - HeadTerminator: - min: 1 - max: 1 - - !type:DoActsBehavior - acts: [ "Destruction" ] - # for fire spreading around, the endoskeleton cannot burn - - type: Flammable - fireSpread: true - canResistFire: true - damage: - types: - Heat: 0 - # now his only weapon, but it is stronger - - type: MeleeWeapon - damage: - types: - Blunt: 15 - Structural: 5 - - type: Puller - needsHands: false - - type: Prying - pryPowered: true - force: true - - type: Tag - tags: - - DoorBumpOpener - - ShoesRequiredStepTriggerImmune - # let mind transfer on gib work - - MindTransferTarget - # its just metal so no implants - - Unimplantable diff --git a/Resources/Prototypes/Entities/Mobs/Player/vox.yml b/Resources/Prototypes/Entities/Mobs/Player/vox.yml new file mode 100644 index 00000000000..e7ad39d7316 --- /dev/null +++ b/Resources/Prototypes/Entities/Mobs/Player/vox.yml @@ -0,0 +1,5 @@ +- type: entity + save: false + name: Urist McVox + parent: BaseMobVox + id: MobVox \ 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 2f6437dc14e..ddbdc57e0ad 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/arachne.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/arachne.yml @@ -104,15 +104,15 @@ - type: Tag tags: - CanPilot - - ShoesRequiredStepTriggerImmune - DoorBumpOpener + - type: StepTriggerImmune - type: Bloodstream bloodReagent: DemonsBlood + bloodRegenerationThirst: 4 # 1 unit of demon's blood satiates 4 thirst - type: BloodSucker webRequired: true - - type: Arachne + - type: Cocooner - type: DamageVisuals - thresholds: [ 20, 40, 100 ] targetLayers: - "enum.HumanoidVisualLayers.Chest" - "enum.HumanoidVisualLayers.Head" @@ -135,6 +135,9 @@ fireStackAlternateState: 3 - type: Spider - type: IgnoreSpiderWeb + - type: FootPrints + leftBarePrint: "footprint-left-bare-spider" + rightBarePrint: "footprint-right-bare-spider" - type: entity save: false diff --git a/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml b/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml new file mode 100644 index 00000000000..f512e71d325 --- /dev/null +++ b/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml @@ -0,0 +1,144 @@ +- type: entity + save: false + name: Urist McWebs + parent: BaseMobSpeciesOrganic + id: BaseMobArachnid + abstract: true + components: + - type: Body + prototype: Arachnid + requiredLegs: 2 # It would be funny if arachnids could use their little back limbs to move around once they lose their legs, but just something to consider post-woundmed + - type: HumanoidAppearance + species: Arachnid + - type: Hunger + baseDecayRate: 0.0125 # Spiders have slow metabolisms all things considered, so I decided to just make their hunger drain slower. + - type: Carriable # Carrying system from nyanotrasen. + - type: Thirst + - type: Sericulture + action: ActionSericulture + productionLength: 2 + entityProduced: MaterialWebSilk1 + hungerCost: 4 # Should total to 25 total silk on full hunger + - type: Tag + tags: + - CanPilot + - FootstepSound + - DoorBumpOpener + - SpiderCraft + - type: Butcherable + butcheringType: Spike + spawned: + - id: FoodMeatSpider + amount: 5 + - type: Inventory + templateId: arachnid + - type: Reactive + reactions: + - reagents: [Water] + methods: [Touch] + effects: + - !type:WearableReaction + slot: head + prototypeID: WaterDropletHat + - reagents: [Water, SpaceCleaner] + methods: [Touch] + effects: + - !type:WashCreamPieReaction + - type: BloodSucker + webRequired: true + - type: Cocooner + # Damage (Self) + - type: Bloodstream + bloodReagent: CopperBlood + # Damage (Others) + - type: MeleeWeapon + animation: WeaponArcBite + soundHit: + path: /Audio/Effects/bite.ogg + damage: + types: + Piercing: 5 + # Visual & Audio + - type: DamageVisuals + damageOverlayGroups: + Brute: + sprite: Mobs/Effects/brute_damage.rsi + color: "#162581" + - type: Speech + speechVerb: Arachnid + speechSounds: Arachnid + allowedEmotes: ['Click', 'Chitter'] + - type: Vocal + sounds: + Male: UnisexArachnid + Female: UnisexArachnid + Unsexed: UnisexArachnid + - type: TypingIndicator + proto: spider + - type: Sprite # I'd prefer if these maps were better. Insert map pun here. + layers: + - map: [ "enum.HumanoidVisualLayers.Chest" ] + - map: [ "enum.HumanoidVisualLayers.Head" ] + - map: [ "enum.HumanoidVisualLayers.Snout" ] + - map: [ "enum.HumanoidVisualLayers.Eyes" ] + - map: [ "enum.HumanoidVisualLayers.RArm" ] + - map: [ "enum.HumanoidVisualLayers.LArm" ] + - map: [ "enum.HumanoidVisualLayers.RLeg" ] + - map: [ "enum.HumanoidVisualLayers.LLeg" ] + - shader: StencilClear + sprite: Mobs/Species/Human/parts.rsi #PJB on stencil clear being on the left leg: "...this is 'fine'" -https://github.com/space-wizards/space-station-14/pull/12217#issuecomment-1291677115 + # its fine, but its still very stupid that it has to be done like this instead of allowing sprites to just directly insert a stencil clear. + # sprite refactor when + state: l_leg + - shader: StencilMask + map: ["enum.HumanoidVisualLayers.StencilMask"] + sprite: Mobs/Customization/masking_helpers.rsi + state: unisex_full + visible: false + - map: ["jumpsuit"] + - map: ["enum.HumanoidVisualLayers.LFoot"] + - map: ["enum.HumanoidVisualLayers.RFoot"] + - map: ["enum.HumanoidVisualLayers.LHand"] + - map: ["enum.HumanoidVisualLayers.RHand"] + - map: [ "gloves" ] + - map: [ "shoes" ] + - map: [ "ears" ] + - map: [ "outerClothing" ] + - map: [ "eyes" ] + - map: [ "belt" ] + - map: [ "id" ] + - map: [ "enum.HumanoidVisualLayers.Tail" ] # Mentioned in moth code: This needs renaming lol. + - map: [ "neck" ] + - map: [ "back" ] + - map: [ "enum.HumanoidVisualLayers.FacialHair" ] + - map: [ "enum.HumanoidVisualLayers.Hair" ] # Do these need to be here? (arachnid hair arachnid hair) + - map: [ "enum.HumanoidVisualLayers.HeadSide" ] + - map: [ "enum.HumanoidVisualLayers.HeadTop" ] + - map: [ "mask" ] + - map: [ "head" ] + - map: [ "pocket1" ] + - map: [ "pocket2" ] + - map: ["enum.HumanoidVisualLayers.Handcuffs"] + color: "#ffffff" + sprite: Objects/Misc/handcuffs.rsi + state: body-overlay-2 + visible: false + - map: [ "clownedon" ] # Dynamically generated + sprite: "Effects/creampie.rsi" + state: "creampie_arachnid" + visible: false + - type: Spider + - type: IgnoreSpiderWeb + - type: FootPrints + leftBarePrint: "footprint-left-bare-spider" + rightBarePrint: "footprint-right-bare-spider" + +- type: entity + parent: BaseSpeciesDummy + id: MobArachnidDummy + noSpawn: true + components: + - type: HumanoidAppearance + species: Arachnid + +#88w88 diff --git a/Resources/Prototypes/Entities/Mobs/Species/base.yml b/Resources/Prototypes/Entities/Mobs/Species/base.yml index b4d273d6c24..6855a6560be 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/base.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/base.yml @@ -109,11 +109,11 @@ soundGroups: Brute: collection: - N14MeatBulletImpact # Nuclear 14 Sound Overhaul + MeatBulletImpact soundTypes: Heat: collection: - N14MeatLaserImpact # Nuclear 14 Sound Overhaul + MeatLaserImpact - type: Reactive groups: Flammable: [ Touch ] @@ -141,8 +141,8 @@ - TemporaryBlindness - Pacified - StaminaModifier - - PsionicsDisabled #Nyano - Summary: PCs can have psionics disabled. - - PsionicallyInsulated #Nyano - Summary: PCs can be made insulated from psionic powers. + - PsionicsDisabled + - PsionicallyInsulated - type: Reflect enabled: false reflectProb: 0 @@ -152,7 +152,6 @@ - type: Identity - type: IdExaminable - type: Hands - - type: Internals - type: Inventory - type: InventorySlots - type: FloatingVisuals @@ -191,12 +190,13 @@ - type: Strippable - type: UserInterface interfaces: - - key: enum.VoiceMaskUIKey.Key - type: VoiceMaskBoundUserInterface - - key: enum.HumanoidMarkingModifierKey.Key + enum.HumanoidMarkingModifierKey.Key: type: HumanoidMarkingModifierBoundUserInterface - - key: enum.StrippingUiKey.Key + enum.StrippingUiKey.Key: type: StrippableBoundUserInterface + enum.InstrumentUiKey.Key: + type: InstrumentBoundUserInterface + requireInputValidation: false - type: Puller - type: Speech speechSounds: Alto @@ -218,18 +218,14 @@ - type: CanEscapeInventory # Carrying system from nyanotrasen. - type: LanguageKnowledge # This is here so even if species doesn't have a defined language, they at least speak GC speaks: - - GalacticCommon + - TauCetiBasic understands: - - GalacticCommon + - TauCetiBasic - type: Tag tags: - CanPilot - FootstepSound - DoorBumpOpener - - type: CanWalk - - type: CameraFollow # NC-Changes-End - backStrength: 50 - defaultBackStrength: 20 - type: entity save: false @@ -274,10 +270,11 @@ - Muted - Pacified - StaminaModifier + - PsionicsDisabled + - PsionicallyInsulated - type: Blindable # Other - type: Temperature - AtmosTemperatureTransferEfficiency: 0.5 heatDamageThreshold: 325 coldDamageThreshold: 260 currentTemperature: 310.15 @@ -297,8 +294,6 @@ normalBodyTemperature: 310.15 thermalRegulationTemperatureThreshold: 25 - type: Perishable - # Makes humans and human derived species rot after 30 minutes instead of 10 minutes. - rotAfter: 1800 - type: Butcherable butcheringType: Spike # TODO human. spawned: @@ -388,5 +383,5 @@ requiredLegs: 2 - type: UserInterface interfaces: - - key: enum.HumanoidMarkingModifierKey.Key # sure, this can go here too + enum.HumanoidMarkingModifierKey.Key: # sure, this can go here too type: HumanoidMarkingModifierBoundUserInterface diff --git a/Resources/Prototypes/Entities/Mobs/Species/diona.yml b/Resources/Prototypes/Entities/Mobs/Species/diona.yml index 42383d9a426..07d621b139d 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/diona.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/diona.yml @@ -33,6 +33,8 @@ amount: 5 - type: Bloodstream bloodReagent: Sap + bloodRegenerationHunger: 1 + bloodRegenerationThirst: 1 # 1 unit of sap satiates 1 hunger and thirst - type: Reactive groups: Flammable: [ Touch ] @@ -104,16 +106,23 @@ - Dead - type: LanguageKnowledge speaks: - - GalacticCommon + - TauCetiBasic - RootSpeak understands: - - GalacticCommon + - TauCetiBasic - RootSpeak - type: TraitSpeedModifier sprintModifier: 0.75 walkModifier: 0.75 - type: SpeedModifierImmunity - type: NoSlip + - type: StepTriggerImmune + whitelist: + types: + - Shard + - type: FootPrints + leftBarePrint: "footprint-left-bare-diona" + rightBarePrint: "footprint-right-bare-diona" - type: entity parent: BaseSpeciesDummy diff --git a/Resources/Prototypes/Entities/Mobs/Species/dwarf.yml b/Resources/Prototypes/Entities/Mobs/Species/dwarf.yml index 055c6522ddc..7f315040356 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/dwarf.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/dwarf.yml @@ -51,15 +51,25 @@ accent: dwarf - type: Speech speechSounds: Bass + - type: HumanoidAppearance + species: Human + hideLayersOnEquip: + - Hair + - Snout - type: LanguageKnowledge speaks: - - GalacticCommon + - TauCetiBasic - SolCommon understands: - - GalacticCommon + - TauCetiBasic - SolCommon - type: LightweightDrunk boozeStrengthMultiplier: 0.5 + - type: Stamina + critThreshold: 115 + - type: FootPrints + leftBarePrint: "footprint-left-bare-dwarf" + rightBarePrint: "footprint-right-bare-dwarf" - type: entity parent: BaseSpeciesDummy diff --git a/Resources/Prototypes/Entities/Mobs/Species/golem.yml b/Resources/Prototypes/Entities/Mobs/Species/golem.yml new file mode 100644 index 00000000000..e509660f81f --- /dev/null +++ b/Resources/Prototypes/Entities/Mobs/Species/golem.yml @@ -0,0 +1,460 @@ +# - type: entity +# name: Urist McGolem +# id: MobGolemBase +# save: false +# abstract: true +# description: An artificial construct imitating life. This one has no soul installed yet. +# components: +# - type: Sprite +# noRot: true +# drawdepth: Mobs +# layers: +# - map: [ "enum.HumanoidVisualLayers.Chest" ] +# color: "#e8b59b" +# sprite: Nyanotrasen/Mobs/Species/Golem/cult.rsi +# state: cultgolem_chest +# - map: [ "enum.HumanoidVisualLayers.Head" ] +# color: "#e8b59b" +# sprite: Nyanotrasen/Mobs/Species/Golem/cult.rsi +# state: cultgolem_head +# - map: [ "enum.ToggleVisuals.Layer" ] +# sprite: Nyanotrasen/Mobs/Species/Golem/cult.rsi +# state: lights +# visible: false +# shader: unshaded +# - map: [ "enum.HumanoidVisualLayers.RArm" ] +# color: "#e8b59b" +# sprite: Nyanotrasen/Mobs/Species/Golem/cult.rsi +# state: cultgolem_r_arm +# - map: [ "enum.HumanoidVisualLayers.LArm" ] +# color: "#e8b59b" +# sprite: Nyanotrasen/Mobs/Species/Golem/cult.rsi +# state: cultgolem_l_arm +# - map: [ "enum.HumanoidVisualLayers.RLeg" ] +# color: "#e8b59b" +# sprite: Nyanotrasen/Mobs/Species/Golem/cult.rsi +# state: cultgolem_r_leg +# - map: [ "enum.HumanoidVisualLayers.LLeg" ] +# color: "#e8b59b" +# sprite: Nyanotrasen/Mobs/Species/Golem/cult.rsi +# state: cultgolem_l_leg +# - map: [ "jumpsuit" ] +# - map: [ "enum.HumanoidVisualLayers.LHand" ] +# color: "#e8b59b" +# sprite: Nyanotrasen/Mobs/Species/Golem/cult.rsi +# state: cultgolem_l_hand +# - map: [ "enum.HumanoidVisualLayers.RHand" ] +# color: "#e8b59b" +# sprite: Nyanotrasen/Mobs/Species/Golem/cult.rsi +# state: cultgolem_r_hand +# - map: [ "enum.HumanoidVisualLayers.Handcuffs" ] +# color: "#ffffff" +# sprite: Objects/Misc/handcuffs.rsi +# state: body-overlay-2 +# visible: false +# - map: [ "id" ] +# - map: [ "gloves" ] +# - map: [ "shoes" ] +# - map: [ "ears" ] +# - map: [ "outerClothing" ] +# - map: [ "eyes" ] +# - map: [ "belt" ] +# - map: [ "neck" ] +# - map: [ "back" ] +# - map: [ "mask" ] +# - map: [ "head" ] +# - map: [ "pocket1" ] +# - map: [ "pocket2" ] +# - map: [ "clownedon" ] +# sprite: "Effects/creampie.rsi" +# state: "creampie_human" +# visible: false +# - type: LagCompensation +# - type: RangedDamageSound +# soundGroups: +# Brute: +# collection: +# MeatBulletImpact +# soundTypes: +# Heat: +# collection: +# MeatLaserImpact +# - type: Tag +# tags: +# - CanPilot +# - DoorBumpOpener +# - ShoesRequiredStepTriggerImmune +# # TODO: https://github.com/Nyanotrasen/Nyanotrasen/issues/1628 +# # - GunsDisabled +# - type: Reactive +# groups: +# Acidic: [Touch] +# reactions: +# - reagents: [Water, SpaceCleaner] +# methods: [Touch] +# effects: +# - !type:WashCreamPieReaction +# - type: Flashable +# - type: Polymorphable +# - type: Identity +# - type: Hands +# - type: MovementSpeedModifier +# baseWalkSpeed: 1.8 +# baseSprintSpeed: 3 +# - type: MovedByPressure +# - type: DamageOnHighSpeedImpact +# damage: +# types: +# Blunt: 5 +# soundHit: +# path: /Audio/Effects/hit_kick.ogg +# - type: Stamina +# excess: 300 +# - type: IdExaminable +# - type: HealthExaminable +# examinableTypes: +# - Blunt +# - Slash +# - Piercing +# - Heat +# - Shock +# - type: StatusEffects +# allowed: +# - Stun +# - KnockedDown +# - SlowedDown +# - Muted +# - Pacified +# - type: Inventory +# templateId: golem +# - type: InventorySlots +# - type: Clickable +# - type: InteractionOutline +# - type: Icon +# sprite: Nyanotrasen/Mobs/Species/Golem/cult.rsi +# state: full +# - type: Physics +# bodyType: KinematicController +# - type: Fixtures +# fixtures: # TODO: This needs a second fixture just for mob collisions. +# fix1: +# shape: +# !type:PhysShapeCircle +# radius: 0.35 +# density: 400 +# restitution: 0.0 +# mask: +# - MobMask +# layer: +# - MobLayer +# - type: Body +# prototype: Golem +# - type: Damageable +# damageContainer: Inorganic +# damageModifierSet: Metallic +# - type: MobState +# - type: MobThresholds +# thresholds: +# 0: Alive +# 100: Dead +# - type: SlowOnDamage +# speedModifierThresholds: +# 60: 0.7 +# 80: 0.5 +# - type: Appearance +# - type: RotationVisuals +# - type: CombatMode +# canDisarm: true +# - type: Climbing +# - type: Cuffable +# - type: Ensnareable +# sprite: Objects/Misc/ensnare.rsi +# state: icon +# - type: AnimationPlayer +# - type: Buckle +# - type: MeleeWeapon +# hidden: true +# soundHit: +# collection: Punch +# params: +# pitchscale: 0.3 +# angle: 30 +# animation: WeaponArcFist +# attackRate: 1 +# damage: +# types: +# Blunt: 12 +# - type: Pullable +# - type: DoAfter +# - type: CreamPied +# - type: Stripping +# - type: Strippable +# - type: UserInterface +# interfaces: + +# - key: enum.HumanoidMarkingModifierKey.Key +# type: HumanoidMarkingModifierBoundUserInterface +# - key: enum.StrippingUiKey.Key +# type: StrippableBoundUserInterface +# - key: enum.LawsUiKey.Key +# type: LawsBoundUserInterface +# - key: enum.GolemUiKey.Key +# type: GolemBoundUserInterface +# - type: Puller +# - type: Speech +# speechSounds: Baritone +# - type: Vocal +# - type: Emoting +# - type: Grammar +# attributes: +# proper: true +# - type: StandingState +# - type: CanEscapeInventory +# - type: MobPrice +# price: 6000 +# deathPenalty: 0.1 +# - type: MindContainer +# - type: Input +# context: "human" +# - type: MobMover +# - type: InputMover +# - type: Alerts +# - type: Actions +# - type: Eye +# - type: CameraRecoil +# - type: Examiner +# - type: CanHostGuardian +# - type: NpcFactionMember +# factions: +# - NanoTrasen +# - PsionicInterloper +# - type: ItemSlots +# slots: +# crystal_slot: +# name: SoulCrystal +# locked: true +# - type: Golem +# - type: GenericVisualizer +# visuals: +# enum.ToggleVisuals.Toggled: +# enum.ToggleVisuals.Layer: +# True: { visible: true } +# False: { visible: false } +# enum.CreamPiedVisuals.Creamed: +# clownedon: +# True: {visible: true} +# False: {visible: false} +# - type: Psionic +# removable: false +# - type: Laws +# - type: IntrinsicUI +# uis: +# - key: enum.LawsUiKey.Key +# toggleAction: +# name: action-name-show-laws +# description: action-description-show-laws +# icon: Structures/Wallmounts/posters.rsi/poster11_legit.png #someone wanna make new icons? +# iconOn: Structures/Wallmounts/posters.rsi/poster11_legit.png +# keywords: [ "AI", "console", "interface", "laws", "borg" ] +# priority: -3 +# event: !type:ToggleIntrinsicUIEvent +# - type: GuideHelp +# guides: +# - AltarsGolemancy + +# - type: entity +# parent: MobGolemBase +# id: MobGolemCult +# name: golem +# suffix: shell +# components: +# - type: Repairable +# fuelcost: 60 +# doAfterDelay: 32 +# - type: Construction +# graph: Golem +# node: golem + +# - type: entity +# parent: MobGolemBase +# id: MobGolemWood +# name: wood golem +# description: An artificial construct imitating life. This one has no soul installed yet. +# components: +# - type: Sprite +# noRot: true +# drawdepth: Mobs +# layers: +# - map: [ "enum.HumanoidVisualLayers.Chest" ] +# color: "#e8b59b" +# sprite: Mobs/Species/Diona/parts.rsi +# state: torso_m +# - map: [ "enum.HumanoidVisualLayers.Head" ] +# color: "#e8b59b" +# sprite: Nyanotrasen/Mobs/Species/Golem/wood.rsi +# state: head +# - map: [ "enum.ToggleVisuals.Layer" ] +# sprite: Nyanotrasen/Mobs/Species/Golem/wood.rsi +# state: lights +# visible: false +# shader: unshaded +# - map: [ "enum.PlantHolderLayers.Plant" ] +# offset: 0, 0.55 +# scale: 0.5, 0.5 +# - map: [ "enum.HumanoidVisualLayers.RArm" ] +# color: "#e8b59b" +# sprite: Mobs/Species/Diona/parts.rsi +# state: r_arm +# - map: [ "enum.HumanoidVisualLayers.LArm" ] +# color: "#e8b59b" +# sprite: Mobs/Species/Diona/parts.rsi +# state: l_arm +# - map: [ "enum.HumanoidVisualLayers.RLeg" ] +# color: "#e8b59b" +# sprite: Mobs/Species/Diona/parts.rsi +# state: r_leg +# - map: [ "enum.HumanoidVisualLayers.LLeg" ] +# color: "#e8b59b" +# sprite: Mobs/Species/Diona/parts.rsi +# state: l_leg +# - map: [ "jumpsuit" ] +# - map: [ "enum.HumanoidVisualLayers.LHand" ] +# color: "#e8b59b" +# sprite: Mobs/Species/Diona/parts.rsi +# state: l_hand +# - map: [ "enum.HumanoidVisualLayers.RHand" ] +# color: "#e8b59b" +# sprite: Mobs/Species/Diona/parts.rsi +# state: r_hand +# - map: [ "enum.HumanoidVisualLayers.Handcuffs" ] +# color: "#ffffff" +# sprite: Objects/Misc/handcuffs.rsi +# state: body-overlay-2 +# visible: false +# - map: [ "id" ] +# - map: [ "gloves" ] +# - map: [ "shoes" ] +# - map: [ "ears" ] +# - map: [ "outerClothing" ] +# - map: [ "eyes" ] +# - map: [ "belt" ] +# - map: [ "neck" ] +# - map: [ "back" ] +# - map: [ "mask" ] +# - map: [ "head" ] +# - map: [ "pocket1" ] +# - map: [ "pocket2" ] +# - type: Inventory +# templateId: golem_shoeless +# - type: Damageable +# damageContainer: Inorganic +# damageModifierSet: Wood +# - type: Flammable +# fireSpread: true +# canResistFire: true +# damage: +# types: +# Heat: 1.2 #per second, scales with number of fire 'stacks' +# - type: PlantHolder +# - type: PlantHolderVisuals +# - type: SolutionContainerManager +# solutions: +# soil: +# maxVol: 100 +# - type: RefillableSolution +# solution: soil +# maxRefill: 50 +# - type: Repairable #needs plant repair stuff l8er +# fuelcost: 60 +# doAfterDelay: 32 +# - type: Reactive +# groups: +# Acidic: [Touch] +# Flammable: [Touch] +# Extinguish: [Touch] +# reactions: +# - reagents: [Water, SpaceCleaner] +# methods: [Touch] +# effects: +# - !type:WashCreamPieReaction +# - type: Construction +# graph: GolemWood +# node: golem + +# - type: entity +# parent: MobGolemBase +# name: silver golem +# id: MobGolemSilver +# description: A fusion between soul and quantum machine, the epitome of epistemics. +# components: +# - type: MovementSpeedModifier +# baseWalkSpeed: 4 +# baseSprintSpeed: 5.5 +# - type: RandomSprite +# available: +# - enum.DamageStateVisualLayers.Base: +# silver_base: "" +# enum.ToggleVisuals.Layer: +# lights: Sixteen +# - type: Sprite +# drawdepth: Mobs +# sprite: Nyanotrasen/Mobs/Species/Golem/silver.rsi +# layers: +# - map: [ "enum.DamageStateVisualLayers.Base" ] +# state: silver_base +# - map: [ "enum.HumanoidVisualLayers.Handcuffs" ] +# color: "#ffffff" +# sprite: Objects/Misc/handcuffs.rsi +# state: body-overlay-2 +# visible: false +# - map: [ "enum.ToggleVisuals.Layer" ] +# sprite: Nyanotrasen/Mobs/Species/Golem/silver.rsi +# state: lights +# color: "#40a7d7" +# shader: unshaded +# visible: false +# - type: Icon +# sprite: Nyanotrasen/Mobs/Species/Golem/silver.rsi +# state: full +# - type: Fixtures +# fixtures: +# fix1: +# shape: +# !type:PhysShapeCircle +# radius: 0.35 +# density: 200 +# mask: +# - FlyingMobMask +# layer: +# - FlyingMobLayer +# - type: HeatResistance +# - type: Internals +# - type: TypingIndicator +# proto: robot +# - type: MeleeWeapon +# hidden: true +# angle: 30 +# animation: WeaponArcFist +# soundHit: +# path: /Audio/Nyanotrasen/Mobs/SilverGolem/sonic_jackhammer.ogg +# attackRate: 1.5 +# damage: +# types: +# Blunt: 10 +# Holy: 8 +# - type: Inventory +# templateId: golem_silver +# - type: PsychokinesisPower +# - type: Construction +# graph: GolemSilver +# node: golem +# - type: MovementIgnoreGravity +# - type: RangedDamageSound +# soundGroups: +# Brute: +# collection: +# MetalBulletImpact +# soundTypes: +# Heat: +# collection: +# MetalLaserImpact diff --git a/Resources/Prototypes/Entities/Mobs/Species/harpy.yml b/Resources/Prototypes/Entities/Mobs/Species/harpy.yml new file mode 100644 index 00000000000..4ad6ea03cd9 --- /dev/null +++ b/Resources/Prototypes/Entities/Mobs/Species/harpy.yml @@ -0,0 +1,224 @@ +- type: entity + save: false + name: Urist McHarpy + parent: BaseMobHuman + id: MobHarpyBase + abstract: true + components: + - type: Flight + isLayerAnimated: true + layer: "/Textures/Mobs/Customization/Harpy/harpy_wings.rsi" + animationKey: "Flap" + - type: Singer + proto: HarpySinger + - type: Sprite + scale: 0.9, 0.9 + layers: + - map: [ "enum.HumanoidVisualLayers.Chest" ] + - map: [ "enum.HumanoidVisualLayers.Head" ] + - map: [ "enum.HumanoidVisualLayers.Snout" ] + - map: [ "enum.HumanoidVisualLayers.Eyes" ] + - map: [ "enum.HumanoidVisualLayers.LArm" ] + - map: [ "enum.HumanoidVisualLayers.RLeg" ] + - map: [ "enum.HumanoidVisualLayers.LLeg" ] + - map: [ "underpants" ] + - map: [ "undershirt" ] + - map: [ "socks" ] + - map: [ "jumpsuit" ] + - map: ["enum.HumanoidVisualLayers.LFoot"] + - map: ["enum.HumanoidVisualLayers.RFoot"] + - map: ["enum.HumanoidVisualLayers.LHand"] + - map: ["enum.HumanoidVisualLayers.RHand"] + - map: [ "enum.HumanoidVisualLayers.Handcuffs" ] + color: "#ffffff" + sprite: Objects/Misc/handcuffs.rsi + state: body-overlay-2 + visible: false + - map: [ "id" ] + - map: [ "gloves" ] + - map: [ "ears" ] + - map: [ "outerClothing" ] + - map: [ "eyes" ] + - map: [ "belt" ] + - map: [ "neck" ] + - map: [ "back" ] + - map: [ "enum.HumanoidVisualLayers.FacialHair" ] + - map: [ "enum.HumanoidVisualLayers.HeadSide" ] + - map: [ "enum.HumanoidVisualLayers.Tail" ] + - map: [ "pocket1" ] + - map: [ "pocket2" ] + - map: [ "clownedon" ] # Dynamically generated + sprite: "Effects/creampie.rsi" + state: "creampie_human" + visible: false +# Yes, RArm has to be down here + - map: [ "enum.HumanoidVisualLayers.RArm" ] + - map: [ "enum.HumanoidVisualLayers.Hair" ] + - map: [ "enum.HumanoidVisualLayers.HeadTop" ] + - map: [ "mask" ] + - map: [ "head" ] + - map: [ "singingLayer" ] + sprite: Effects/harpysinger.rsi + state: singing_music_notes + visible: false + - type: HumanoidAppearance + species: Harpy + - type: Fixtures + fixtures: # TODO: This needs a second fixture just for mob collisions. + fix1: + shape: + !type:PhysShapeCircle + radius: 0.32 + density: 90 + restitution: 0.0 + mask: + - MobMask + layer: + - MobLayer + - type: Body + prototype: Harpy + - type: Damageable + damageModifierSet: Harpy + - type: MeleeWeapon + soundHit: + collection: AlienClaw + animation: WeaponArcClaw + damage: + types: + Piercing: 5 + - type: Speech + speechSounds: Harpy + speechVerb: Harpy + - type: Vocal + sounds: + Male: SoundsHarpy + Female: SoundsHarpy + Unsexed: SoundsHarpy + - type: GenericVisualizer + visuals: + enum.HarpyVisualLayers.Singing: + singingLayer: + False: {visible: false} + True: {visible: true} + - type: MovementSpeedModifier + baseWalkSpeed: 3 + baseSprintSpeed: 5.5 + weightlessAcceleration: 2.5 + - type: Inventory + speciesId: harpy + templateId: digitigrade + - type: HarpyVisuals + - type: UltraVision + - type: Tag + tags: + - CanPilot + - FootstepSound + - DoorBumpOpener + - type: LanguageKnowledge + speaks: + - TauCetiBasic + - ValyrianStandard + understands: + - TauCetiBasic + - ValyrianStandard + - type: StepTriggerImmune + whitelist: + types: + - Shard + - Landmine + - Mousetrap + - type: FootPrints + leftBarePrint: "footprint-left-bare-lizard" + rightBarePrint: "footprint-right-bare-lizard" # I was about to complain about this, then I remembered birbs have dinosaur feet. So this is valid. + +- type: entity + save: false + name: Urist McBirb + parent: MobHumanDummy + id: MobHarpyDummy + description: A dummy Harpy meant to be used in character setup. + components: + - type: HumanoidAppearance + species: Harpy + - type: Inventory + speciesId: harpy + templateId: digitigrade + - type: Sprite + scale: 0.9, 0.9 + layers: + - map: [ "enum.HumanoidVisualLayers.Chest" ] + - map: [ "enum.HumanoidVisualLayers.Head" ] + - map: [ "enum.HumanoidVisualLayers.Snout" ] + - map: [ "enum.HumanoidVisualLayers.Eyes" ] + - map: [ "enum.HumanoidVisualLayers.LArm" ] + - map: [ "enum.HumanoidVisualLayers.RLeg" ] + - map: [ "enum.HumanoidVisualLayers.LLeg" ] + - map: [ "underpants" ] + - map: [ "undershirt" ] + - map: [ "socks" ] + - map: [ "jumpsuit" ] + - map: ["enum.HumanoidVisualLayers.LFoot"] + - map: ["enum.HumanoidVisualLayers.RFoot"] + - map: ["enum.HumanoidVisualLayers.LHand"] + - map: ["enum.HumanoidVisualLayers.RHand"] + - map: [ "id" ] + - map: [ "gloves" ] + - map: [ "ears" ] + - map: [ "outerClothing" ] + - map: [ "eyes" ] + - map: [ "belt" ] + - map: [ "neck" ] + - map: [ "back" ] + - map: [ "enum.HumanoidVisualLayers.FacialHair" ] + - map: [ "enum.HumanoidVisualLayers.HeadSide" ] + - map: [ "enum.HumanoidVisualLayers.HeadTop" ] + - map: [ "enum.HumanoidVisualLayers.Tail" ] + - map: [ "pocket1" ] + - map: [ "pocket2" ] + - map: [ "clownedon" ] # Dynamically generated + sprite: "Effects/creampie.rsi" + state: "creampie_human" + visible: false +# Yes, RArm has to be down here + - map: [ "enum.HumanoidVisualLayers.RArm" ] + - map: [ "enum.HumanoidVisualLayers.Hair" ] + - map: [ "mask" ] + - map: [ "head" ] + - map: [ "singingLayer" ] + sprite: Effects/harpysinger.rsi + state: singing_music_notes + +- type: entity + id: ActionHarpyPlayMidi + name: Play MIDI + description: Sing your heart out! Right click yourself to set an instrument. + noSpawn: true + components: + - type: InstantAction + checkCanInteract: false + icon: DeltaV/Interface/Actions/harpy_sing.png + event: !type:OpenUiActionEvent + key: enum.InstrumentUiKey.Key + +- type: entity + id: ActionSyrinxChangeVoiceMask + name: Set name + description: Change the name others hear to something else. + noSpawn: true + components: + - type: InstantAction + icon: DeltaV/Interface/Actions/harpy_syrinx.png + itemIconStyle: BigAction + event: !type:VoiceMaskSetNameEvent + +- type: entity + id: ActionToggleFlight + name: Fly + description: Make use of your wings to fly. Beat the flightless bird allegations. + noSpawn: true + components: + - type: InstantAction + checkCanInteract: false + icon: { sprite: Interface/Actions/flight.rsi, state: flight_off } + iconOn: { sprite : Interface/Actions/flight.rsi, state: flight_on } + event: !type:ToggleFlightEvent diff --git a/Resources/Prototypes/Entities/Mobs/Species/human.yml b/Resources/Prototypes/Entities/Mobs/Species/human.yml index 3c40f142fbe..ee2886602d1 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/human.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/human.yml @@ -6,10 +6,6 @@ abstract: true components: - type: Hunger - starvationDamage: - types: - Cold: 0.5 - Bloodloss: 0.5 - type: Icon # It will not have an icon in the adminspawn menu without this. Body parts seem fine for whatever reason. sprite: Mobs/Species/Human/parts.rsi state: full @@ -20,13 +16,19 @@ spawned: - id: FoodMeatHuman amount: 5 - - type: PsionicInsulation + - type: HumanoidAppearance + species: Human + hideLayersOnEquip: + - Hair + - Snout - type: LanguageKnowledge speaks: - - GalacticCommon + - TauCetiBasic + - SolCommon understands: - - GalacticCommon - - type: Special + - TauCetiBasic + - SolCommon + - type: FootPrints - type: entity parent: BaseSpeciesDummy diff --git a/Resources/Prototypes/Entities/Mobs/Species/moth.yml b/Resources/Prototypes/Entities/Mobs/Species/moth.yml new file mode 100644 index 00000000000..5f684222264 --- /dev/null +++ b/Resources/Prototypes/Entities/Mobs/Species/moth.yml @@ -0,0 +1,133 @@ +- type: entity + save: false + name: Urist McFluff + parent: BaseMobSpeciesOrganic + id: BaseMobMoth + abstract: true + components: + - type: HumanoidAppearance + species: Moth + - type: Hunger + - type: Thirst + - type: Carriable # Carrying system from nyanotrasen. + - type: Icon + sprite: Mobs/Species/Moth/parts.rsi + state: full + - type: Body + prototype: Moth + requiredLegs: 2 + - type: Damageable + damageContainer: Biological + damageModifierSet: Moth + - type: ZombieAccentOverride + accent: zombieMoth + - type: Speech + speechVerb: Moth + allowedEmotes: ['Chitter', 'Squeak'] + - type: LanguageKnowledge + speaks: + - TauCetiBasic + - Moffic + understands: + - TauCetiBasic + - Moffic + - type: TypingIndicator + proto: moth + - type: Butcherable + butcheringType: Spike + spawned: + - id: FoodMeat + amount: 5 + - type: Bloodstream + bloodReagent: InsectBlood + - type: DamageVisuals + damageOverlayGroups: + Brute: + sprite: Mobs/Effects/brute_damage.rsi + color: "#808A51" + - type: MothAccent + - type: Vocal + sounds: + Male: UnisexMoth + Female: UnisexMoth + Unsexed: UnisexMoth + - type: MovementSpeedModifier + weightlessAcceleration: 2.5 # Move around more easily in space. + - type: Flammable + damage: + types: + Heat: 4 # DV - Reduced by .5 + - type: Temperature # Moths hate the heat and thrive in the cold. + heatDamageThreshold: 320 + coldDamageThreshold: 230 + currentTemperature: 310.15 + specificHeat: 46 + coldDamage: + types: + Cold : 0.05 #per second, scales with temperature & other constants + heatDamage: + types: + Heat : 3 #per second, scales with temperature & other constants + - type: Sprite # sprite again because we want different layer ordering + noRot: true + drawdepth: Mobs + layers: + - map: [ "enum.HumanoidVisualLayers.Chest" ] + - map: [ "enum.HumanoidVisualLayers.Head" ] + - map: [ "enum.HumanoidVisualLayers.Snout" ] + - map: [ "enum.HumanoidVisualLayers.Eyes" ] + - map: [ "enum.HumanoidVisualLayers.RArm" ] + - map: [ "enum.HumanoidVisualLayers.LArm" ] + - map: [ "enum.HumanoidVisualLayers.RLeg" ] + - map: [ "enum.HumanoidVisualLayers.LLeg" ] + - shader: StencilClear + sprite: Mobs/Species/Human/parts.rsi #PJB on stencil clear being on the left leg: "...this is 'fine'" -https://github.com/space-wizards/space-station-14/pull/12217#issuecomment-1291677115 + # its fine, but its still very stupid that it has to be done like this instead of allowing sprites to just directly insert a stencil clear. + # sprite refactor when + state: l_leg + - shader: StencilMask + map: [ "enum.HumanoidVisualLayers.StencilMask" ] + sprite: Mobs/Customization/masking_helpers.rsi + state: unisex_full + visible: false + - map: [ "jumpsuit" ] + - map: [ "enum.HumanoidVisualLayers.LHand" ] + - map: [ "enum.HumanoidVisualLayers.RHand" ] + - map: [ "enum.HumanoidVisualLayers.LFoot" ] + - map: [ "enum.HumanoidVisualLayers.RFoot" ] + - map: [ "enum.HumanoidVisualLayers.Handcuffs" ] + color: "#ffffff" + sprite: Objects/Misc/handcuffs.rsi + state: body-overlay-2 + visible: false + - map: [ "gloves" ] + - map: [ "shoes" ] + - map: [ "ears" ] + - map: [ "outerClothing" ] + - map: [ "eyes" ] + - map: [ "belt" ] + - map: [ "id" ] + - map: [ "enum.HumanoidVisualLayers.Tail" ] #in the utopian future we should probably have a wings enum inserted here so everyhting doesn't break + - map: [ "neck" ] + - map: [ "back" ] + - map: [ "enum.HumanoidVisualLayers.FacialHair" ] + - map: [ "enum.HumanoidVisualLayers.Hair" ] + - map: [ "enum.HumanoidVisualLayers.HeadSide" ] + - map: [ "enum.HumanoidVisualLayers.HeadTop" ] + - map: [ "mask" ] + - map: [ "head" ] + - map: [ "pocket1" ] + - map: [ "pocket2" ] + - map: [ "clownedon" ] # Dynamically generated + sprite: "Effects/creampie.rsi" + state: "creampie_moth" + visible: false + - type: FootPrints + +- type: entity + parent: BaseSpeciesDummy + id: MobMothDummy + noSpawn: true + components: + - type: HumanoidAppearance + species: Moth diff --git a/Resources/Prototypes/Entities/Mobs/Species/reptilian.yml b/Resources/Prototypes/Entities/Mobs/Species/reptilian.yml index 35f9e9fa393..ee5d6285659 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/reptilian.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/reptilian.yml @@ -33,9 +33,9 @@ proto: lizard - type: Vocal sounds: - Male: UnisexReptilian - Female: UnisexReptilian - Unsexed: UnisexReptilian + Male: MaleReptilian + Female: FemaleReptilian + Unsexed: MaleReptilian - type: Damageable damageContainer: Biological damageModifierSet: Scale @@ -61,11 +61,14 @@ - type: Wagging - type: LanguageKnowledge speaks: - - GalacticCommon + - TauCetiBasic - Draconic understands: - - GalacticCommon + - TauCetiBasic - Draconic + - type: FootPrints + leftBarePrint: "footprint-left-bare-lizard" + rightBarePrint: "footprint-right-bare-lizard" - type: entity parent: BaseSpeciesDummy diff --git a/Resources/Prototypes/Entities/Mobs/Species/shadowkin.yml b/Resources/Prototypes/Entities/Mobs/Species/shadowkin.yml new file mode 100644 index 00000000000..393cb0b8716 --- /dev/null +++ b/Resources/Prototypes/Entities/Mobs/Species/shadowkin.yml @@ -0,0 +1,304 @@ +- type: entity + save: false + parent: + - MobBloodstream + - MobAtmosStandard + - MobFlammable + - BaseMobSpecies + id: MobShadowkinBase + name: Urist McShadow + abstract: true + components: + - type: Destructible + thresholds: + - trigger: + !type:DamageTypeTrigger + damageType: Blunt + damage: 400 + behaviors: + - !type:GibBehavior {} + - !type:SpawnEntitiesBehavior + spawn: + ShadowkinShadow: + min: 1 + max: 1 + EffectFlashShadowkinShadeskip: + min: 1 + max: 1 + - trigger: + !type:DamageTypeTrigger + damageType: Heat + damage: 1500 + behaviors: + - !type:SpawnEntitiesBehavior + spawnInContainer: true + spawn: + Ash: + min: 1 + max: 1 + - !type:BurnBodyBehavior {} + - !type:PlaySoundBehavior + sound: + collection: MeatLaserImpact + - type: PassiveDamage # Slight passive regen. Assuming one damage type, comes out to about 4 damage a minute. + allowedStates: + - Alive + damageCap: 20 + damage: + types: + Heat: -0.07 + groups: + Brute: -0.07 + - type: StatusEffects + allowed: + - Stun + - KnockedDown + - SlowedDown + - Stutter + - SeeingRainbows + - Electrocution + - ForcedSleep + - TemporaryBlindness + - Drunk + - SlurredSpeech + - RatvarianLanguage + - PressureImmunity + - Muted + - Pacified + - StaminaModifier + - type: Blindable + - type: ThermalRegulator + metabolismHeat: 800 + radiatedHeat: 100 + implicitHeatRegulation: 500 + sweatHeatRegulation: 2000 + shiveringHeatRegulation: 2000 + normalBodyTemperature: 310.15 + thermalRegulationTemperatureThreshold: 25 + - type: Perishable + - type: FireVisuals + alternateState: Standing + - type: OfferItem + - type: LayingDown + - type: Shoving + - type: BloodstreamAffectedByMass + power: 0.6 + - type: Hunger + - type: Thirst + - type: Carriable + - type: HumanoidAppearance + species: Shadowkin + - type: Icon + sprite: Mobs/Species/Shadowkin/parts.rsi + state: full + - type: Body + prototype: Shadowkin + - type: Flammable + damage: + types: + Heat: 1.5 # burn more + - type: MobThresholds + thresholds: # Weak + 0: Alive + 80: Critical + 180: Dead + - type: SlowOnDamage + speedModifierThresholds: + 48: 0.85 + 64: 0.65 + - type: Damageable + damageContainer: Biological # Shadowkin + damageModifierSet: Shadowkin + - type: Barotrauma + damage: + types: + Blunt: 0.35 # per second, scales with pressure and other constants. + - type: Bloodstream + bloodlossDamage: + types: + Bloodloss: 1 + bloodlossHealDamage: + types: + Bloodloss: -0.25 + - type: Temperature + heatDamageThreshold: 330 + coldDamageThreshold: 195 + currentTemperature: 310.15 + specificHeat: 46 + coldDamage: + types: + Cold: 0.05 #per second, scales with temperature & other constants + heatDamage: + types: + Heat: 0.25 #per second, scales with temperature & other constants + - type: Fixtures + fixtures: + fix1: + shape: !type:PhysShapeCircle + radius: 0.35 + density: 130 #lower density + restitution: 0.0 + mask: + - MobMask + layer: + - MobLayer + - type: Sprite + netsync: false + noRot: true + drawdepth: Mobs + scale: 0.85, 0.85 + layers: + - map: ["enum.HumanoidVisualLayers.Chest"] + - map: ["enum.HumanoidVisualLayers.Head"] + - map: ["enum.HumanoidVisualLayers.Snout"] + - map: ["enum.HumanoidVisualLayers.Eyes"] + shader: unshaded + - map: ["enum.HumanoidVisualLayers.RArm"] + - map: ["enum.HumanoidVisualLayers.LArm"] + - map: ["enum.HumanoidVisualLayers.RLeg"] + - map: ["enum.HumanoidVisualLayers.LLeg"] + - shader: StencilClear + sprite: Mobs/Species/Human/parts.rsi + state: l_leg + - shader: StencilMask + map: ["enum.HumanoidVisualLayers.StencilMask"] + sprite: Mobs/Customization/masking_helpers.rsi + state: full + visible: false + - map: ["enum.HumanoidVisualLayers.LFoot"] + - map: ["enum.HumanoidVisualLayers.RFoot"] + - map: ["socks"] + - map: ["underpants"] + - map: ["undershirt"] + - map: ["jumpsuit"] + - map: ["enum.HumanoidVisualLayers.LHand"] + - map: ["enum.HumanoidVisualLayers.RHand"] + - map: ["enum.HumanoidVisualLayers.Handcuffs"] + color: "#ffffff" + sprite: Objects/Misc/handcuffs.rsi + state: body-overlay-2 + visible: false + - map: ["id"] + - map: ["gloves"] + - map: ["shoes"] + - map: ["ears"] + - map: ["outerClothing"] + - map: ["eyes"] + - map: ["belt"] + - map: ["neck"] + - map: ["back"] + - map: ["enum.HumanoidVisualLayers.FacialHair"] + - map: ["enum.HumanoidVisualLayers.Hair"] + - map: ["enum.HumanoidVisualLayers.HeadSide"] + - map: ["enum.HumanoidVisualLayers.HeadTop"] + - map: ["mask"] + - map: ["head"] + - map: ["pocket1"] + - map: ["pocket2"] + - map: ["enum.HumanoidVisualLayers.Tail"] + - type: MeleeWeapon + soundHit: + collection: AlienClaw + angle: 30 + animation: WeaponArcClaw + damage: + types: + Slash: 5 + - type: Vocal + sounds: + Male: MaleShadowkin + Female: FemaleShadowkin + Unsexed: MaleShadowkin + - type: TypingIndicator + proto: alien + - type: MovementSpeedModifier + baseWalkSpeed: 2.7 + baseSprintSpeed: 4.5 + - type: Flashable + eyeDamageChance: 0.3 + eyeDamage: 1 + durationMultiplier: 1.5 + - type: Speech + allowedEmotes: ['Mars', 'Wurble'] + - type: Shadowkin + - type: Psionic + mindbreakingFeedback: shadowkin-blackeye + manaGain: 0.25 + mana: 150 + maxMana: 250 + bypassManaCheck: true + removable: false + - type: InnatePsionicPowers + powersToAdd: + - ShadowkinPowers + - type: LanguageKnowledge + speaks: + - TauCetiBasic + - Marish + understands: + - TauCetiBasic + - Marish + +- type: entity + save: false + parent: MobHumanDummy + id: MobShadowkinDummy + noSpawn: true + description: A dummy shadowkin meant to be used in character setup. + components: + - type: HumanoidAppearance + species: Shadowkin + - type: Sprite + netsync: false + noRot: true + drawdepth: Mobs + scale: 0.85, 0.85 # Small + layers: + - map: ["enum.HumanoidVisualLayers.Chest"] + - map: ["enum.HumanoidVisualLayers.Head"] + - map: ["enum.HumanoidVisualLayers.Snout"] + - map: ["enum.HumanoidVisualLayers.Eyes"] + shader: unshaded + - map: ["enum.HumanoidVisualLayers.RArm"] + - map: ["enum.HumanoidVisualLayers.LArm"] + - map: ["enum.HumanoidVisualLayers.RLeg"] + - map: ["enum.HumanoidVisualLayers.LLeg"] + - shader: StencilClear + sprite: Mobs/Species/Human/parts.rsi + state: l_leg + - shader: StencilMask + map: ["enum.HumanoidVisualLayers.StencilMask"] + sprite: Mobs/Customization/masking_helpers.rsi + state: full + visible: false + - map: ["enum.HumanoidVisualLayers.LFoot"] + - map: ["enum.HumanoidVisualLayers.RFoot"] + - map: ["socks"] + - map: ["underpants"] + - map: ["undershirt"] + - map: ["jumpsuit"] + - map: ["enum.HumanoidVisualLayers.LHand"] + - map: ["enum.HumanoidVisualLayers.RHand"] + - map: ["enum.HumanoidVisualLayers.Handcuffs"] + color: "#ffffff" + sprite: Objects/Misc/handcuffs.rsi + state: body-overlay-2 + visible: false + - map: ["id"] + - map: ["gloves"] + - map: ["shoes"] + - map: ["ears"] + - map: ["outerClothing"] + - map: ["eyes"] + - map: ["belt"] + - map: ["neck"] + - map: ["back"] + - map: ["enum.HumanoidVisualLayers.FacialHair"] + - map: ["enum.HumanoidVisualLayers.Hair"] + - map: ["enum.HumanoidVisualLayers.HeadSide"] + - map: ["enum.HumanoidVisualLayers.HeadTop"] + - map: ["mask"] + - map: ["head"] + - map: ["pocket1"] + - map: ["pocket2"] + - map: ["enum.HumanoidVisualLayers.Tail"] diff --git a/Resources/Prototypes/Entities/Mobs/Species/skeleton.yml b/Resources/Prototypes/Entities/Mobs/Species/skeleton.yml index 28ea5b030f6..2d34c87cfb4 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/skeleton.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/skeleton.yml @@ -9,7 +9,7 @@ components: - type: HumanoidAppearance species: Skeleton - - type: Carriable # Carrying system from nyanotrasen. + - type: Carriable # Carrying system from nyanotrasen. - type: Icon sprite: Mobs/Species/Skeleton/parts.rsi state: full @@ -102,6 +102,7 @@ probability: 0.5 - type: FireVisuals alternateState: Standing + - type: FootPrints - type: entity parent: BaseSpeciesDummy diff --git a/Resources/Prototypes/Entities/Mobs/Species/slime.yml b/Resources/Prototypes/Entities/Mobs/Species/slime.yml new file mode 100644 index 00000000000..e8909166257 --- /dev/null +++ b/Resources/Prototypes/Entities/Mobs/Species/slime.yml @@ -0,0 +1,130 @@ +- type: entity + name: Urist McSlime + parent: BaseMobSpeciesOrganic + id: BaseMobSlimePerson + abstract: true + components: + - type: Hunger + - type: Thirst + - type: Carriable # Carrying system from nyanotrasen. + - type: Icon + sprite: Mobs/Species/Slime/parts.rsi + state: full + - type: Body + prototype: Slime + requiredLegs: 2 + # they like eat it idk lol + - type: Storage + clickInsert: false + grid: + - 0,0,1,2 + maxItemSize: Large + storageInsertSound: + path: /Audio/Voice/Slime/slime_squish.ogg + - type: ContainerContainer + containers: + storagebase: !type:Container + ents: [] + - type: UserInterface + interfaces: + enum.StorageUiKey.Key: + type: StorageBoundUserInterface + enum.HumanoidMarkingModifierKey.Key: + type: HumanoidMarkingModifierBoundUserInterface + enum.StrippingUiKey.Key: + type: StrippableBoundUserInterface + # to prevent bag open/honk spam + - type: UseDelay + delay: 0.5 + - type: HumanoidAppearance + species: SlimePerson + - type: Speech + speechVerb: Slime + speechSounds: Slime + allowedEmotes: ['Squish'] + - type: TypingIndicator + proto: slime + - type: Vocal + sounds: + Male: MaleSlime + Female: FemaleSlime + Unsexed: MaleSlime + - type: Damageable + damageContainer: Biological + damageModifierSet: Slime + - type: Geras + - type: PassiveDamage # Around 8 damage a minute healed + allowedStates: + - Alive + damageCap: 65 + damage: + types: + Heat: -0.14 + groups: + Brute: -0.14 + - type: DamageVisuals + damageOverlayGroups: + Brute: + sprite: Mobs/Effects/brute_damage.rsi + color: "#2cf274" + - type: Bloodstream + bloodReagent: Slime # TODO Color slime blood based on their slime color or smth + bloodRegenerationHunger: 2 + bloodRegenerationThirst: 2 # 1 of slime satiates 2 hunger + - type: Barotrauma + damage: + types: + Blunt: 0.60 #per second, scales with pressure and other constants. Slighty more than humans. + - type: Reactive + groups: + Flammable: [ Touch ] + Extinguish: [ Touch ] + reactions: + - reagents: [ Water, SpaceCleaner ] + methods: [ Touch ] + effects: + - !type:WashCreamPieReaction + - reagents: [ Water ] + methods: [ Touch ] + effects: + - !type:HealthChange + scaleByQuantity: true + damage: + types: + Heat: 2 + - !type:PopupMessage + type: Local + visualType: Large + messages: [ "slime-hurt-by-water-popup" ] + probability: 0.25 + - type: Butcherable + butcheringType: Spike + spawned: + - id: FoodMeatSlime + amount: 5 + - type: Respirator + damage: + types: + Asphyxiation: 0.2 + damageRecovery: + types: + Asphyxiation: -1.0 + maxSaturation: 15 + - type: LanguageKnowledge + speaks: + - TauCetiBasic + - Bubblish + understands: + - TauCetiBasic + - Bubblish + - type: FootPrints + leftBarePrint: "footprint-left-bare-slime" + rightBarePrint: "footprint-right-bare-slime" + +- type: entity + parent: MobHumanDummy + id: MobSlimePersonDummy + noSpawn: true + components: + - type: HumanoidAppearance + species: SlimePerson diff --git a/Resources/Prototypes/Entities/Mobs/Species/vox.yml b/Resources/Prototypes/Entities/Mobs/Species/vox.yml new file mode 100644 index 00000000000..58e2b3b6463 --- /dev/null +++ b/Resources/Prototypes/Entities/Mobs/Species/vox.yml @@ -0,0 +1,118 @@ +- type: entity + parent: BaseMobSpeciesOrganic + id: BaseMobVox + abstract: true + components: + - type: Hunger + - type: Thirst + - type: Icon + sprite: Mobs/Species/Vox/parts.rsi + state: vox_m + - type: Body + prototype: Vox + requiredLegs: 2 + - type: HumanoidAppearance + species: Vox + #- type: VoxAccent # Not yet coded + - type: Inventory + speciesId: vox + displacements: + jumpsuit: + layer: + sprite: Mobs/Species/Vox/displacement.rsi + state: jumpsuit + copyToShaderParameters: + # Value required, provide a dummy. Gets overridden when applied. + layerKey: dummy + parameterTexture: displacementMap + parameterUV: displacementUV + - type: Speech + speechVerb: Vox + speechSounds: Vox + - type: TypingIndicator + proto: vox + - type: Vocal + sounds: + Male: UnisexVox + Female: UnisexVox + Unsexed: UnisexVox + - type: Butcherable + butcheringType: Spike + spawned: + - id: FoodMeatChicken + amount: 5 + - type: Damageable + damageContainer: Biological + damageModifierSet: Vox + - type: DamageVisuals + damageOverlayGroups: + Brute: + sprite: Mobs/Effects/brute_damage.rsi + color: "#7a8bf2" + - type: Bloodstream + bloodReagent: AmmoniaBlood + - type: MeleeWeapon + soundHit: + collection: AlienClaw + angle: 30 + animation: WeaponArcClaw + damage: + types: + Slash: 5 # Reduce? + - type: Sprite # Need to redefine the whole order to draw the tail over their gas tank + layers: + - map: [ "enum.HumanoidVisualLayers.Chest" ] + - map: [ "enum.HumanoidVisualLayers.Head" ] + - map: [ "enum.HumanoidVisualLayers.Snout" ] + - map: [ "enum.HumanoidVisualLayers.Eyes" ] + - map: [ "enum.HumanoidVisualLayers.RArm" ] + - map: [ "enum.HumanoidVisualLayers.LArm" ] + - map: [ "enum.HumanoidVisualLayers.RLeg" ] + - map: [ "enum.HumanoidVisualLayers.LLeg" ] + - map: [ "jumpsuit" ] + - map: [ "enum.HumanoidVisualLayers.LFoot" ] + - map: [ "enum.HumanoidVisualLayers.RFoot" ] + - map: [ "enum.HumanoidVisualLayers.LHand" ] + - map: [ "enum.HumanoidVisualLayers.RHand" ] + - map: [ "gloves" ] + - map: [ "shoes" ] + - map: [ "ears" ] + - map: [ "outerClothing" ] + - map: [ "eyes" ] + - map: [ "belt" ] + - map: [ "id" ] + - map: [ "neck" ] + - map: [ "back" ] + - map: [ "enum.HumanoidVisualLayers.FacialHair" ] + - map: [ "enum.HumanoidVisualLayers.Hair" ] + - map: [ "enum.HumanoidVisualLayers.HeadSide" ] + - map: [ "enum.HumanoidVisualLayers.HeadTop" ] + - map: [ "suitstorage" ] # This is not in the default order + - map: [ "enum.HumanoidVisualLayers.Tail" ] + - map: [ "mask" ] + - map: [ "head" ] + - map: [ "pocket1" ] + - map: [ "pocket2" ] + - map: [ "enum.HumanoidVisualLayers.Handcuffs" ] + color: "#ffffff" + sprite: Objects/Misc/handcuffs.rsi + state: body-overlay-2 + visible: false + - map: [ "clownedon" ] + sprite: "Effects/creampie.rsi" + state: "creampie_vox" # Not default + visible: false + - type: FootPrints + leftBarePrint: "footprint-left-bare-lizard" + rightBarePrint: "footprint-right-bare-lizard" + +- type: entity + parent: BaseSpeciesDummy + id: MobVoxDummy + noSpawn: true + components: + - type: HumanoidAppearance + species: Vox + - type: Body + prototype: Vox + diff --git a/Resources/Prototypes/Entities/Mobs/base.yml b/Resources/Prototypes/Entities/Mobs/base.yml index 6f25841f50d..5ab790feeef 100644 --- a/Resources/Prototypes/Entities/Mobs/base.yml +++ b/Resources/Prototypes/Entities/Mobs/base.yml @@ -197,7 +197,7 @@ canResistFire: true damage: #per second, scales with number of fire 'stacks' types: - Heat: 3 + Heat: 1.5 - type: FireVisuals sprite: Mobs/Effects/onfire.rsi normalState: Generic_mob_burning @@ -233,3 +233,5 @@ bloodlossHealDamage: types: Bloodloss: -1 + bloodRegenerationHunger: 1 + bloodRegenerationThirst: 1.5 # 1 unit of normal blood satiates 1t, 0.3t for vampires, 0.75h, and restores 0.25 blood for non-humans... diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks-cartons.yml b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks-cartons.yml index e758022710b..40684d16cfd 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks-cartons.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks-cartons.yml @@ -15,6 +15,9 @@ solutions: drink: maxVol: 50 + - type: PressurizedSolution + solution: drink + - type: Shakeable - type: Sprite state: icon - type: Item diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks.yml b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks.yml index 93d4b957fe7..701b8ac28ef 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks.yml @@ -10,6 +10,8 @@ solutions: drink: maxVol: 30 + - type: MixableSolution + solution: drink - type: SolutionTransfer canChangeTransferAmount: true - type: Drink @@ -31,8 +33,8 @@ solution: drink - type: UserInterface interfaces: - - key: enum.TransferAmountUiKey.Key - type: TransferAmountBoundUserInterface + enum.TransferAmountUiKey.Key: + type: TransferAmountBoundUserInterface - type: EmitSoundOnPickup sound: path: /Audio/SimpleStation14/Items/Handling/drinkglass_pickup.ogg @@ -48,6 +50,31 @@ path: /Audio/SimpleStation14/Items/Handling/drinkglass_drop.ogg params: volume: -2 + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.25,-0.25,0.25,0.25" + density: 30 + mask: + - ItemMask + layer: + - BulletImpassable # Ever seen a John Woo movie? + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 5 + behaviors: + - !type:PlaySoundBehavior + sound: + collection: MetalBreak + params: + volume: -6 + - !type:SpillBehavior { } + - !type:DoActsBehavior + acts: [ "Destruction" ] - type: entity parent: DrinkBase @@ -516,6 +543,22 @@ sprite: Objects/Consumable/Drinks/bravebullglass.rsi state: icon +- type: entity + parent: DrinkGlass + id: BudgetInsulsDrinkGlass + suffix: budget insuls + components: + - type: SolutionContainerManager + solutions: + drink: + maxVol: 30 + reagents: + - ReagentId: BudgetInsulsDrink + Quantity: 30 + - type: Icon + sprite: Objects/Consumable/Drinks/budgetinsulsdrink.rsi + state: icon + - type: entity parent: DrinkGlass id: DrinkCarrotJuice @@ -548,6 +591,22 @@ sprite: Objects/Consumable/Drinks/chocolateglass.rsi state: icon +- type: entity + parent: DrinkGlass + id: RubberneckGlass + suffix: rubberneck + components: + - type: SolutionContainerManager + solutions: + drink: + maxVol: 30 + reagents: + - ReagentId: Rubberneck + Quantity: 30 + - type: Icon + sprite: Objects/Consumable/Drinks/rubberneck.rsi + state: icon + - type: entity parent: DrinkGlass id: DrinkCoconutRum @@ -1074,6 +1133,22 @@ sprite: Objects/Consumable/Drinks/icecreamglass.rsi state: icon +- type: entity + parent: DrinkGlass + id: IrishBoolGlass + suffix: irish bool + components: + - type: SolutionContainerManager + solutions: + drink: + maxVol: 30 + reagents: + - ReagentId: IrishBool + Quantity: 30 + - type: Icon + sprite: Objects/Consumable/Drinks/beerglass.rsi + state: icon + - type: entity parent: DrinkGlass id: DrinkIrishCarBomb @@ -2068,6 +2143,22 @@ sprite: Objects/Consumable/Drinks/martiniglass.rsi state: icon +- type: entity + parent: DrinkGlass + id: DrinkVodkaRedBool + suffix: vodka red bool + components: + - type: SolutionContainerManager + solutions: + drink: + maxVol: 30 + reagents: + - ReagentId: VodkaRedBool + Quantity: 30 + - type: Icon + sprite: Objects/Consumable/Drinks/ginvodkaglass.rsi + state: icon + - type: entity parent: DrinkGlass id: DrinkVodkaTonicGlass @@ -2114,6 +2205,22 @@ - ReagentId: JuiceWatermelon Quantity: 30 +- type: entity + parent: DrinkGlass + id: DrinkWatermelonWakeup + suffix: watermelon wakeup + components: + - type: SolutionContainerManager + solutions: + drink: + maxVol: 30 + reagents: + - ReagentId: WatermelonWakeup + Quantity: 30 + - type: Icon + sprite: Objects/Consumable/Drinks/champagneglass.rsi + state: icon + - type: entity parent: DrinkGlass id: DrinkWhiskeyColaGlass @@ -2194,6 +2301,22 @@ sprite: Objects/Consumable/Drinks/wineglass.rsi state: icon +- type: entity + parent: DrinkGlass + id: XenoBasherGlass + suffix: xeno basher + components: + - type: SolutionContainerManager + solutions: + drink: + maxVol: 30 + reagents: + - ReagentId: XenoBasher + Quantity: 30 + - type: Icon + sprite: Objects/Consumable/Drinks/xenobasher.rsi + state: icon + # TODO: MOVE - type: entity diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_bottles.yml b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_bottles.yml index a6752286dd2..7a4983b14d5 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_bottles.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_bottles.yml @@ -31,6 +31,9 @@ !type:DamageTrigger damage: 5 behaviors: + - !type:PlaySoundBehavior + sound: + collection: GlassBreak - !type:SpillBehavior { } - !type:DoActsBehavior acts: [ "Destruction" ] @@ -39,6 +42,9 @@ - type: PhysicalComposition materialComposition: Plastic: 100 + - type: PressurizedSolution + solution: drink + - type: Shakeable - type: entity parent: DrinkBottlePlasticBaseFull @@ -368,6 +374,7 @@ - type: Tag tags: - Wine + - DrinkBottle - type: entity parent: [DrinkBottleVisualsAll, DrinkBottleGlassBaseFull] @@ -517,6 +524,7 @@ - type: Tag tags: - Wine + - DrinkBottle # Small Bottles @@ -542,6 +550,7 @@ - type: Tag tags: - Beer + - DrinkBottle - type: entity parent: [DrinkBottleVisualsAll, DrinkBottleGlassBaseFull] @@ -565,7 +574,7 @@ - type: Tag tags: - Beer - + - DrinkBottle - type: entity parent: [DrinkBottleVisualsAll, DrinkBottlePlasticBaseFull] diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_cans.yml b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_cans.yml index a9ff1c784a9..319c8a634ed 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_cans.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_cans.yml @@ -6,7 +6,7 @@ components: - type: Drink - type: Openable - - type: PressurizedDrink + - type: Shakeable - type: SolutionContainerManager solutions: drink: @@ -14,13 +14,15 @@ - ReagentId: Cola Quantity: 30 maxVol: 30 + - type: MixableSolution + solution: drink - type: SolutionTransfer canChangeTransferAmount: true maxTransferAmount: 15 - type: UserInterface interfaces: - - key: enum.TransferAmountUiKey.Key - type: TransferAmountBoundUserInterface + enum.TransferAmountUiKey.Key: + type: TransferAmountBoundUserInterface - type: Sprite state: icon layers: @@ -34,6 +36,8 @@ solution: drink - type: DrainableSolution solution: drink + - type: PressurizedSolution + solution: drink - type: Appearance - type: GenericVisualizer visuals: diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_cups.yml b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_cups.yml index c4693c6a719..46fb4d97260 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_cups.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_cups.yml @@ -10,7 +10,8 @@ solutions: drink: maxVol: 20 - canMix: true + - type: MixableSolution + solution: drink - type: FitsInDispenser solution: drink - type: DrawableSolution @@ -24,8 +25,8 @@ maxTransferAmount: 10 - type: UserInterface interfaces: - - key: enum.TransferAmountUiKey.Key - type: TransferAmountBoundUserInterface + enum.TransferAmountUiKey.Key: + type: TransferAmountBoundUserInterface - type: Drink - type: Sprite state: icon diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_fun.yml b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_fun.yml index 2fd2331f91e..ef6208b69d4 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_fun.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_fun.yml @@ -146,6 +146,9 @@ - type: RandomFillSolution solution: drink weightedRandomId: RandomFillMopwata + - type: PressurizedSolution + solution: drink + - type: Shakeable - type: Appearance - type: GenericVisualizer visuals: diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_special.yml b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_special.yml index 9a523c997b9..9c87995f5ec 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_special.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_special.yml @@ -8,7 +8,10 @@ solutions: drink: maxVol: 100 + - type: MixableSolution + solution: drink - type: Drink + - type: Shakeable # Doesn't do anything, but I mean... - type: FitsInDispenser solution: drink - type: DrawableSolution @@ -26,8 +29,8 @@ state: icon - type: UserInterface interfaces: - - key: enum.TransferAmountUiKey.Key - type: TransferAmountBoundUserInterface + enum.TransferAmountUiKey.Key: + type: TransferAmountBoundUserInterface - type: PhysicalComposition materialComposition: Steel: 50 @@ -107,3 +110,63 @@ - type: Drink - type: Sprite sprite: Objects/Consumable/Drinks/jar_what.rsi + +- type: entity + id: BartenderMixer + abstract: true + components: + - type: DrainableSolution + solution: drink + - type: Drink + - type: DrawableSolution + solution: drink + - type: RefillableSolution + solution: drink + - type: SolutionTransfer + canChangeTransferAmount: true + - type: Spillable + solution: drink + - type: UserInterface + interfaces: + enum.TransferAmountUiKey.Key: + type: TransferAmountBoundUserInterface + +- type: entity + parent: [BaseItem, BartenderMixer] + id: DrinkJigger + name: jigger + description: Like a shaker, but smaller. Used to control the amount of ingredients. + components: + - type: SolutionContainerManager + solutions: + drink: + maxVol: 20 + - type: MixableSolution + solution: drink + - type: FitsInDispenser + solution: drink + - type: Sprite + sprite: Objects/Consumable/Drinks/jigger.rsi + state: icon + - type: PhysicalComposition + materialComposition: + Steel: 20 + +- type: entity + parent: [BaseItem, BartenderMixer] + id: DrinkIceBucket + name: ice bucket + description: A special bucket of refreshy ice. Prohibited use for challenge with the same name! + components: + - type: SolutionContainerManager + solutions: + drink: + reagents: + - ReagentId: Ice + Quantity: 200 + - type: Sprite + sprite: Objects/Consumable/Drinks/icebucket.rsi + state: icon + - type: PhysicalComposition + materialComposition: + Steel: 75 diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/trash_drinks.yml b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/trash_drinks.yml index aeaa54ccf1f..b78769034b8 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/trash_drinks.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/trash_drinks.yml @@ -25,6 +25,8 @@ damage: types: Blunt: 0 + - type: MixableSolution + solution: drink - type: Spillable solution: drink - type: FitsInDispenser @@ -37,8 +39,8 @@ solution: drink - type: UserInterface interfaces: - - key: enum.TransferAmountUiKey.Key - type: TransferAmountBoundUserInterface + enum.TransferAmountUiKey.Key: + type: TransferAmountBoundUserInterface - type: DamageOnLand damage: types: @@ -102,6 +104,8 @@ solutions: drink: maxVol: 50 + - type: MixableSolution + solution: drink - type: SolutionTransfer canChangeTransferAmount: true maxTransferAmount: 5 @@ -118,8 +122,8 @@ solution: drink - type: UserInterface interfaces: - - key: enum.TransferAmountUiKey.Key - type: TransferAmountBoundUserInterface + enum.TransferAmountUiKey.Key: + type: TransferAmountBoundUserInterface - type: Damageable damageContainer: Inorganic - type: Destructible @@ -214,12 +218,12 @@ - type: entity - name: goldschlager bottle + name: gildlager bottle parent: DrinkBottleBaseEmpty - id: DrinkBottleGoldschlager + id: DrinkBottleGildlager components: - type: Sprite - sprite: Objects/Consumable/TrashDrinks/goldschlagerbottle_empty.rsi + sprite: Objects/Consumable/TrashDrinks/gildlagerbottle_empty.rsi - type: entity diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bread.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bread.yml index 32a1815ac7c..e40ac40a289 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bread.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bread.yml @@ -810,6 +810,8 @@ allowMovement: true description: ghost-role-information-BreadDog-description rules: ghost-role-information-BreadDog-rules + raffle: + settings: short - type: GhostTakeoverAvailable - type: BarkAccent - type: Speech @@ -827,6 +829,7 @@ - type: Puller needsHands: false - type: Examiner + - type: DoAfter - type: CombatMode - type: MeleeWeapon soundHit: diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/cake.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/cake.yml index 71b38959ce3..c939dec52c6 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/cake.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/cake.yml @@ -672,6 +672,8 @@ allowMovement: true description: ghost-role-information-Cak-description rules: ghost-role-information-Cak-rules + raffle: + settings: short - type: GhostTakeoverAvailable - type: OwOAccent - type: Speech @@ -689,6 +691,7 @@ - type: Puller needsHands: false - type: Examiner + - type: DoAfter - type: CombatMode - type: MeleeWeapon soundHit: diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/bowl.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/bowl.yml index 45953296351..40cb141af78 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/bowl.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/bowl.yml @@ -19,6 +19,8 @@ - map: ["enum.SolutionContainerLayers.Fill"] state: fill-1 visible: false + - type: MixableSolution + solution: food - type: DamageOnLand damage: types: @@ -35,8 +37,8 @@ canChangeTransferAmount: true - type: UserInterface interfaces: - - key: enum.TransferAmountUiKey.Key - type: TransferAmountBoundUserInterface + enum.TransferAmountUiKey.Key: + type: TransferAmountBoundUserInterface - type: Destructible thresholds: - trigger: diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/box.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/box.yml index 966ae86db1e..aa9e70f3fa4 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/box.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/box.yml @@ -567,7 +567,6 @@ - type: Tag tags: - Trash - - HappyHonk - MimeHappyHonk - type: Sprite sprite: Objects/Storage/Happyhonk/mime.rsi @@ -664,6 +663,10 @@ name: woeful cluwne meal description: Nothing good can come of this. components: + - type: Tag + tags: + - Trash + - CluwneHappyHonk - type: Sprite sprite: Objects/Storage/Happyhonk/cluwne.rsi state: box diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/plate.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/plate.yml index 63c47df67e7..3bd66e8a481 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/plate.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/plate.yml @@ -54,6 +54,17 @@ materialComposition: Glass: 60 - type: SpaceGarbage + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.25,-0.25,0.25,0.25" + density: 25 + mask: + - ItemMask + layer: + - BulletImpassable # Ever seen a John Woo movie? - type: entity name: broken plate diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/produce.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/produce.yml index 3f0277e1bc3..3bf253f773b 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/produce.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/produce.yml @@ -314,6 +314,9 @@ launchForwardsMultiplier: 1.5 - type: StepTrigger intersectRatio: 0.2 + triggerGroups: + types: + - SlipEntity - type: CollisionWake enabled: false - type: Physics @@ -1133,9 +1136,9 @@ Quantity: 1 - type: entity - name: chili + name: chili pepper parent: FoodProduceBase - id: FoodChili + id: FoodChiliPepper description: Spicy, best not touch your eyes. components: - type: FlavorProfile @@ -1163,7 +1166,7 @@ - type: entity name: chilly pepper parent: FoodProduceBase - id: FoodChilly + id: FoodChillyPepper description: Icy hot. components: - type: FlavorProfile @@ -1869,3 +1872,36 @@ tags: - ClothMade - CottonBoll + +- type: entity + name: pyrotton boll + description: This will probably set you on fire. + id: PyrottonBol + parent: FoodProduceBase + components: + - type: Sprite + sprite: Objects/Specific/Hydroponics/pyrotton.rsi + - type: FlavorProfile + flavors: + - pyrotton + - type: Food + requiresSpecialDigestion: true + - type: SolutionContainerManager + solutions: + food: + reagents: + - ReagentId: Fiber + Quantity: 5 + - ReagentId: Phlogiston + Quantity: 5 + - type: Log + spawnedPrototype: MaterialPyrotton1 + spawnCount: 2 + - type: Produce + seedId: pyrotton + - type: Tag + tags: + - ClothMade + - CottonBoll + - type: Extractable + grindableSolutionName: food diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/joints.yml b/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/joints.yml index e3ae06ec9f5..9a0d96e89ea 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/joints.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/joints.yml @@ -28,6 +28,34 @@ reagents: - ReagentId: THC Quantity: 20 + +- type: entity + id: JointRainbow + parent: Joint + name: joint + suffix: Rainbow + description: A roll of dried plant matter wrapped in thin paper. Seems to be colorful inside. + components: + - type: Construction + graph: smokeableJointRainbow + node: jointRainbow + - type: SolutionContainerManager + solutions: + smokable: + maxVol: 20 + reagents: + - ReagentId: SpaceDrugs + Quantity: 4 + - ReagentId: Lipolicide + Quantity: 4 + - ReagentId: MindbreakerToxin + Quantity: 2.66 + - ReagentId: Happiness + Quantity: 2.66 +# - ReagentId: ColorfulReagent +# Quantity: 1.33 + - ReagentId: Psicodine + Quantity: 0.8 - type: entity id: Blunt @@ -59,3 +87,31 @@ reagents: - ReagentId: THC Quantity: 20 + +- type: entity + id: BluntRainbow + parent: Blunt + name: blunt + suffix: Rainbow + description: A roll of dried plant matter wrapped in a dried tobacco leaf. Seems to be colorful inside. + components: + - type: Construction + graph: smokeableBluntRainbow + node: bluntRainbow + - type: SolutionContainerManager + solutions: + smokable: + maxVol: 20 + reagents: + - ReagentId: SpaceDrugs + Quantity: 4 + - ReagentId: Lipolicide + Quantity: 4 + - ReagentId: MindbreakerToxin + Quantity: 2.66 + - ReagentId: Happiness + Quantity: 2.66 +# - ReagentId: ColorfulReagent +# Quantity: 1.33 + - ReagentId: Psicodine + Quantity: 0.8 diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Pipes/pipe.yml b/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Pipes/pipe.yml index c3f13d80b75..79c568802c5 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Pipes/pipe.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Pipes/pipe.yml @@ -63,3 +63,26 @@ path: /Audio/Weapons/Guns/Empty/empty.ogg ejectSound: path: /Audio/Weapons/Guns/Empty/empty.ogg + +- type: entity + id: SmokingPipeFilledCannabisRainbow + parent: SmokingPipe + name: pipe + suffix: Rainbow Cannabis + description: Just like grandpappy used to smoke. + components: + - type: ContainerContainer + containers: + bowl_slot: !type:ContainerSlot + - type: ItemSlots + - type: SmokingPipe + bowl_slot: + name: smoking-pipe-slot-component-slot-name-bowl + startingItem: GroundCannabisRainbow + whitelist: + tags: + - Smokable + insertSound: + path: /Audio/Weapons/Guns/Empty/empty.ogg + ejectSound: + path: /Audio/Weapons/Guns/Empty/empty.ogg diff --git a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/base_machineboard.yml b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/base_machineboard.yml index 164777284fa..360fc5ffaa3 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/base_machineboard.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/base_machineboard.yml @@ -15,7 +15,7 @@ price: 100 - type: PhysicalComposition materialComposition: - Glass: 400 + Glass: 230 chemicalComposition: Silicon: 20 diff --git a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml index 92a0da33996..a34af1c9d82 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml @@ -164,6 +164,28 @@ DefaultPrototype: Beaker ExamineName: Glass Beaker +- type: entity + parent: BaseMachineCircuitboard + id: CircuitImprinterHyperConvectionMachineCircuitboard + name: hyper convection circuit imprinter machine board + description: A machine printed circuit board for a hyper convection circuit imprinter. + components: + - type: Sprite + state: science + - type: MachineBoard + prototype: CircuitImprinterHyperConvection + requirements: + MatterBin: 2 + tagRequirements: + GlassBeaker: + Amount: 2 + DefaultPrototype: Beaker + ExamineName: Glass Beaker + Igniter: + Amount: 1 + DefaultPrototype: Igniter + ExamineName: Igniter + - type: entity id: ExosuitFabricatorMachineCircuitboard parent: BaseMachineCircuitboard @@ -182,9 +204,9 @@ difficulty: 2 recipes: - ExosuitFabricatorMachineCircuitboard - # - type: GuideHelp - # guides: - # - Robotics + - type: GuideHelp + guides: + - Robotics # yes i know this prototype name is long i'm just following conventions - type: entity @@ -281,27 +303,6 @@ recipes: - ArtifactAnalyzerMachineCircuitboard -- type: entity - id: TraversalDistorterMachineCircuitboard - parent: BaseMachineCircuitboard - name: traversal distorter machine board - description: A machine printed circuit board for a traversal distorter. - components: - - type: Sprite - state: science - - type: MachineBoard - prototype: MachineTraversalDistorter - requirements: - Manipulator: 1 - Capacitor: 2 - materialRequirements: - Steel: 5 - Cable: 1 - - type: ReverseEngineering # Nyano - difficulty: 2 - recipes: - - TraversalDistorterMachineCircuitboard - - type: entity id: ArtifactCrusherMachineCircuitboard parent: BaseMachineCircuitboard @@ -1624,3 +1625,23 @@ recipes: - JukeboxCircuitBoard +- type: entity + id: TraversalDistorterMachineCircuitboard + parent: BaseMachineCircuitboard + name: traversal distorter machine board + description: A machine printed circuit board for a traversal distorter. + components: + - type: Sprite + state: science + - type: MachineBoard + prototype: MachineTraversalDistorter + requirements: + Manipulator: 1 + Capacitor: 2 + materialRequirements: + Steel: 5 + Cable: 1 + - type: ReverseEngineering # Nyano + difficulty: 2 + recipes: + - TraversalDistorterMachineCircuitboard diff --git a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/computer.yml b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/computer.yml index 1210f302fcc..7681a459cb1 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/computer.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/computer.yml @@ -14,15 +14,15 @@ price: 100 - type: PhysicalComposition materialComposition: - Glass: 400 + Glass: 230 chemicalComposition: Silicon: 20 - type: entity parent: BaseComputerCircuitboard id: AlertsComputerCircuitboard - name: alerts computer board - description: A computer printed circuit board for an alerts computer. + name: atmospheric alerts computer board + description: A computer printed circuit board for an atmospheric alerts computer. components: - type: ComputerBoard prototype: ComputerAlert @@ -427,3 +427,14 @@ state: cpu_engineering - type: ComputerBoard prototype: ComputerSensorMonitoring + +- type: entity + parent: BaseComputerCircuitboard + id: RoboticsConsoleCircuitboard + name: robotics control console board + description: A computer printed circuit board for a robotics control console. + components: + - type: Sprite + state: cpu_science + - type: ComputerBoard + prototype: ComputerRoboticsControl diff --git a/Resources/Prototypes/Entities/Objects/Devices/Electronics/door.yml b/Resources/Prototypes/Entities/Objects/Devices/Electronics/door.yml index b761ef7996f..4d7dfed334b 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Electronics/door.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Electronics/door.yml @@ -19,10 +19,10 @@ - type: AccessReader - type: ActivatableUI key: enum.DoorElectronicsConfigurationUiKey.Key - allowedItems: + requiredItems: tags: - DoorElectronicsConfigurator - type: UserInterface interfaces: - - key: enum.DoorElectronicsConfigurationUiKey.Key - type: DoorElectronicsBoundUserInterface + enum.DoorElectronicsConfigurationUiKey.Key: + type: DoorElectronicsBoundUserInterface diff --git a/Resources/Prototypes/Entities/Objects/Devices/Electronics/door_access.yml b/Resources/Prototypes/Entities/Objects/Devices/Electronics/door_access.yml index 144be8252d6..c8db255f7b8 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Electronics/door_access.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Electronics/door_access.yml @@ -1,332 +1,426 @@ +# Command +- type: entity + parent: DoorElectronics + id: DoorElectronicsCaptain + suffix: Captain, Locked + components: + - type: AccessReader + access: [["Captain"]] - type: entity parent: DoorElectronics - id: DoorElectronicsService - suffix: Service, Locked - noSpawn: true + id: DoorElectronicsHeadOfPersonnel + suffix: HeadOfPersonnel, Locked components: - type: AccessReader - access: [["Service"]] + access: [["HeadOfPersonnel"]] - type: entity parent: DoorElectronics - id: DoorElectronicsTheatre - suffix: Theatre, Locked - noSpawn: true + id: DoorElectronicsCommand + suffix: Command, Locked components: - type: AccessReader - access: [["Theatre"]] + access: [["Command"]] + +# Service +- type: entity + parent: DoorElectronics + id: DoorElectronicsBar + suffix: Bar, Locked + components: + - type: AccessReader + access: [["Bar"]] + +- type: entity + parent: DoorElectronics + id: DoorElectronicsBarKitchen + suffix: Bar, Locked + components: + - type: AccessReader + access: [["Bar"], ["Kitchen"]] + +- type: entity + parent: DoorElectronics + id: DoorElectronicsHydroponics + suffix: Hydroponics, Locked + components: + - type: AccessReader + access: [["Hydroponics"]] - type: entity parent: DoorElectronics id: DoorElectronicsChapel suffix: Chapel, Locked - noSpawn: true components: - type: AccessReader access: [["Chapel"]] - type: entity parent: DoorElectronics - id: DoorElectronicsJanitor - suffix: Janitor, Locked - noSpawn: true + id: DoorElectronicsTheatre + suffix: Theatre, Locked components: - type: AccessReader - access: [["Janitor"]] + access: [["Theatre"]] - type: entity parent: DoorElectronics id: DoorElectronicsKitchen suffix: Kitchen, Locked - noSpawn: true components: - type: AccessReader access: [["Kitchen"]] - type: entity parent: DoorElectronics - id: DoorElectronicsBar - suffix: Bar, Locked - noSpawn: true + id: DoorElectronicsKitchenHydroponics + suffix: Kitchen/Hydroponics, Locked components: - type: AccessReader - access: [["Bar"]] + access: [["Kitchen"], ["Hydroponics"]] - type: entity parent: DoorElectronics - id: DoorElectronicsHydroponics - suffix: Hydroponics, Locked - noSpawn: true + id: DoorElectronicsJanitor + suffix: Janitor, Locked components: - type: AccessReader - access: [["Hydroponics"]] + access: [["Janitor"]] - type: entity parent: DoorElectronics id: DoorElectronicsLawyer suffix: Lawyer, Locked - noSpawn: true components: - type: AccessReader access: [["Lawyer"]] - type: entity parent: DoorElectronics - id: DoorElectronicsCaptain - suffix: Captain, Locked - noSpawn: true + id: DoorElectronicsService + suffix: Service, Locked components: - type: AccessReader - access: [["Captain"]] + access: [["Service"]] +# Cargo - type: entity parent: DoorElectronics - id: DoorElectronicsExternal - suffix: External, Locked - noSpawn: true + id: DoorElectronicsQuartermaster + suffix: Quartermaster, Locked components: - type: AccessReader - access: [["External"]] + access: [["Quartermaster"]] + +- type: entity + parent: DoorElectronics + id: DoorElectronicsSalvage + suffix: Salvage, Locked + components: + - type: AccessReader + access: [["Salvage"]] - type: entity parent: DoorElectronics id: DoorElectronicsCargo suffix: Cargo, Locked - noSpawn: true components: - type: AccessReader access: [["Cargo"]] +# Engineering - type: entity parent: DoorElectronics - id: DoorElectronicsEngineering - suffix: Engineering, Locked - noSpawn: true + id: DoorElectronicsChiefEngineer + suffix: ChiefEngineer, Locked components: - type: AccessReader - access: [["Engineering"]] + access: [["ChiefEngineer"]] - type: entity parent: DoorElectronics id: DoorElectronicsAtmospherics suffix: Atmospherics, Locked - noSpawn: true components: - type: AccessReader access: [["Atmospherics"]] - type: entity parent: DoorElectronics - id: DoorElectronicsFreezer - suffix: Freezer, Locked - noSpawn: true + id: DoorElectronicsEngineering + suffix: Engineering, Locked components: - type: AccessReader - access: [["Kitchen"], ["Hydroponics"]] + access: [["Engineering"]] +# Science - type: entity parent: DoorElectronics - id: DoorElectronicsSalvage - suffix: Salvage, Locked - noSpawn: true + id: DoorElectronicsMorgue + suffix: Morgue, Locked components: - type: AccessReader - access: [["Salvage"]] + access: [["Medical"], ["Detective"], ["Chapel"]] - type: entity parent: DoorElectronics - id: DoorElectronicsMedical - suffix: Medical, Locked - noSpawn: true + id: DoorElectronicsResearchDirector + suffix: ResearchDirector, Locked components: - type: AccessReader - access: [["Medical"]] + access: [["ResearchDirector"]] - type: entity parent: DoorElectronics - id: DoorElectronicsChemistry - suffix: Chemistry, Locked - noSpawn: true + id: DoorElectronicsMedicalResearch + suffix: Medical/Science, Locked components: - type: AccessReader - access: [["Chemistry"]] + access: [["Research"], ["Medical"]] - type: entity parent: DoorElectronics id: DoorElectronicsResearch suffix: Research, Locked - noSpawn: true components: - type: AccessReader access: [["Research"]] +# Security - type: entity parent: DoorElectronics - id: DoorElectronicsScience - suffix: Science, Locked - noSpawn: true + id: DoorElectronicsHeadOfSecurity + suffix: HeadOfSecurity, Locked components: - type: AccessReader - access: [["Research"], ["Medical"]] + access: [["HeadOfSecurity"]] - type: entity parent: DoorElectronics - id: DoorElectronicsCommand - suffix: Command, Locked - noSpawn: true + id: DoorElectronicsArmory + suffix: Armory, Locked components: - type: AccessReader - access: [["Command"]] + access: [["Armory"]] - type: entity parent: DoorElectronics - id: DoorElectronicsCentralCommand - suffix: CentralCommand, Locked - noSpawn: true + id: DoorElectronicsDetective + suffix: Detective, Locked components: - type: AccessReader - access: [["CentralCommand"]] + access: [["Detective"]] - type: entity parent: DoorElectronics - id: DoorElectronicsChiefMedicalOfficer - suffix: ChiefMedicalOfficer, Locked - noSpawn: true + id: DoorElectronicsSecurity + suffix: Security, Locked components: - type: AccessReader - access: [["ChiefMedicalOfficer"]] + access: [["Security"]] - type: entity parent: DoorElectronics - id: DoorElectronicsChiefEngineer - suffix: ChiefEngineer, Locked - noSpawn: true + id: DoorElectronicsSecurityLawyer + suffix: Security/Lawyer, Locked components: - type: AccessReader - access: [["ChiefEngineer"]] + access: [["Security"], ["Lawyer"]] - type: entity parent: DoorElectronics - id: DoorElectronicsHeadOfSecurity - suffix: HeadOfSecurity, Locked - noSpawn: true + id: DoorElectronicsBrig + suffix: Brig, Locked components: - type: AccessReader - access: [["HeadOfSecurity"]] + access: [["Brig"]] +# Medical - type: entity parent: DoorElectronics - id: DoorElectronicsResearchDirector - suffix: ResearchDirector, Locked - noSpawn: true + id: DoorElectronicsChiefMedicalOfficer + suffix: ChiefMedicalOfficer, Locked components: - type: AccessReader - access: [["ResearchDirector"]] + access: [["ChiefMedicalOfficer"]] - type: entity parent: DoorElectronics - id: DoorElectronicsHeadOfPersonnel - suffix: HeadOfPersonnel, Locked - noSpawn: true + id: DoorElectronicsChemistry + suffix: Chemistry, Locked components: - type: AccessReader - access: [["HeadOfPersonnel"]] + access: [["Chemistry"]] - type: entity parent: DoorElectronics - id: DoorElectronicsQuartermaster - suffix: Quartermaster, Locked - noSpawn: true + id: DoorElectronicsMedical + suffix: Medical, Locked components: - type: AccessReader - access: [["Quartermaster"]] + access: [["Medical"]] +# Syndicate - type: entity parent: DoorElectronics - id: DoorElectronicsSecurity - suffix: Security, Locked - noSpawn: true + id: DoorElectronicsNukeop + suffix: Nukeop, Locked components: - type: AccessReader - access: [["Security"]] + access: [["NuclearOperative"]] - type: entity parent: DoorElectronics - id: DoorElectronicsSecurityLawyer - suffix: Security/Lawyer, Locked - noSpawn: true + id: DoorElectronicsSyndicateAgent + suffix: SyndicateAgent, Locked components: - type: AccessReader - access: [["Security"], ["Lawyer"]] + access: [["SyndicateAgent"]] +# Misc - type: entity parent: DoorElectronics - id: DoorElectronicsDetective - suffix: Detective, Locked - noSpawn: true + id: DoorElectronicsCentralCommand + suffix: CentralCommand, Locked components: - type: AccessReader - access: [["Detective"]] + access: [["CentralCommand"]] -#- type: entity -# parent: DoorElectronics -# id: DoorElectronicsBrig -# suffix: Brig, Locked -# components: -# - type: AccessReader -# access: [["Brig"]] +- type: entity + parent: DoorElectronics + id: DoorElectronicsExternal + suffix: External, Locked + components: + - type: AccessReader + access: [["External"]] - type: entity parent: DoorElectronics - id: DoorElectronicsArmory - suffix: Armory, Locked - noSpawn: true + id: DoorElectronicsMaintenance + suffix: Maintenance, Locked components: - type: AccessReader - access: [["Armory"]] + access: [["Maintenance"]] - type: entity parent: DoorElectronics id: DoorElectronicsVault suffix: Vault, Locked - noSpawn: true components: - type: AccessReader access: [["Security"], ["Command"]] - type: entity parent: DoorElectronics - id: DoorElectronicsMaintenance - suffix: Maintenance, Locked - noSpawn: true + id: DoorElectronicsChiefJustice + suffix: ChiefJustice, Locked components: - type: AccessReader - access: [["Maintenance"]] + access: [["ChiefJustice"]] - type: entity parent: DoorElectronics - id: DoorElectronicsSyndicateAgent - suffix: SyndicateAgent, Locked - noSpawn: true + id: DoorElectronicsJustice + suffix: Justice, Locked components: - type: AccessReader - access: [["SyndicateAgent"]] + access: [["Justice"]] - type: entity parent: DoorElectronics - id: DoorElectronicsNukeop - suffix: Nukeop, Locked - noSpawn: true + id: DoorElectronicsProsecutor + suffix: Prosecutor, Locked components: - type: AccessReader - access: [["NuclearOperative"]] + access: [["Prosecutor"]] - type: entity parent: DoorElectronics - id: DoorElectronicsRnDMed - suffix: Medical/Science, Locked - noSpawn: true + id: DoorElectronicsMantis + suffix: Mantis, Locked components: - type: AccessReader - access: [["Research"], ["Medical"]] + access: [["Mantis"]] + +- type: entity + parent: DoorElectronics + id: DoorElectronicsCorpsman + suffix: Corpsman, Locked + components: + - type: AccessReader + access: [["Corpsman"]] + +- type: entity + parent: DoorElectronics + id: DoorElectronicsBoxer + suffix: Boxer, Locked + components: + - type: AccessReader + access: [["Boxer"]] + +- type: entity + parent: DoorElectronics + id: DoorElectronicsClown + suffix: Clown, Locked + components: + - type: AccessReader + access: [["Clown"]] + +- type: entity + parent: DoorElectronics + id: DoorElectronicsMime + suffix: Mime, Locked + components: + - type: AccessReader + access: [["Mime"]] + +- type: entity + parent: DoorElectronics + id: DoorElectronicsMusician + suffix: Musician, Locked + components: + - type: AccessReader + access: [["Musician"]] + + +- type: entity + parent: DoorElectronics + id: DoorElectronicsReporter + suffix: Reporter, Locked + components: + - type: AccessReader + access: [["Reporter"]] + + +- type: entity + parent: DoorElectronics + id: DoorElectronicsLibrary + suffix: Library, Locked + components: + - type: AccessReader + access: [["Library"]] + +- type: entity + parent: DoorElectronics + id: DoorElectronicsZookeeper + suffix: Zookeeper, Locked + components: + - type: AccessReader + access: [["Zookeeper"]] + +- type: entity + parent: DoorElectronics + id: DoorElectronicsPsychologist + suffix: Psychologist, Locked + components: + - type: AccessReader + access: [["Psychologist"]] + +- type: entity + parent: DoorElectronics + id: DoorElectronicsMail + suffix: Mail, Locked + components: + - type: AccessReader + access: [["Mail"]] diff --git a/Resources/Prototypes/Entities/Objects/Devices/Electronics/triggers.yml b/Resources/Prototypes/Entities/Objects/Devices/Electronics/triggers.yml index 43ed20c694c..2cb9b5233d0 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Electronics/triggers.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Electronics/triggers.yml @@ -18,6 +18,8 @@ state: timer - type: Item size: Small + - type: StaticPrice + price: 40 - type: PayloadTrigger components: - type: OnUseTimerTrigger @@ -28,8 +30,6 @@ path: /Audio/Machines/Nuke/general_beep.ogg params: volume: -2 - - type: StaticPrice - price: 40 - type: entity parent: TimerTrigger @@ -40,6 +40,11 @@ - type: Sprite sprite: Objects/Devices/signaltrigger.rsi state: signaltrigger + - type: StaticPrice + price: 40 + - type: Tag + tags: + - SignalTrigger - type: PayloadTrigger components: - type: TriggerOnSignal @@ -49,8 +54,6 @@ - type: WirelessNetworkConnection range: 200 - type: DeviceLinkSink - - type: StaticPrice - price: 40 - type: entity parent: BaseItem @@ -61,11 +64,11 @@ - type: Sprite sprite: Objects/Devices/voice.rsi state: voice - - type: PayloadTrigger - components: - - type: TriggerOnVoice - type: StaticPrice price: 40 - type: Tag tags: - VoiceTrigger + - type: PayloadTrigger + components: + - type: TriggerOnVoice diff --git a/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/reinforcement_teleporter.yml b/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/reinforcement_teleporter.yml index a8489866fc7..660a8c9e60c 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/reinforcement_teleporter.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/reinforcement_teleporter.yml @@ -12,6 +12,8 @@ name: ghost-role-information-syndicate-reinforcement-name description: ghost-role-information-syndicate-reinforcement-description rules: ghost-role-information-syndicate-reinforcement-rules + raffle: + settings: default - type: GhostRoleMobSpawner prototype: MobHumanSyndicateAgent - type: EmitSoundOnUse @@ -29,24 +31,28 @@ - type: entity parent: ReinforcementRadioSyndicate - id: ReinforcementRadioSyndicateMonkey - name: syndicate monkey reinforcement radio - description: Calls in a specially trained monkey to assist you. + id: ReinforcementRadioSyndicateAncestor + name: syndicate genetic ancestor reinforcement radio + description: Calls in a specially trained ancestor of your choosing to assist you. components: - type: GhostRole name: ghost-role-information-syndicate-monkey-reinforcement-name description: ghost-role-information-syndicate-monkey-reinforcement-description rules: ghost-role-information-syndicate-monkey-reinforcement-rules + raffle: + settings: default - type: GhostRoleMobSpawner prototype: MobMonkeySyndicateAgent + selectablePrototypes: ["SyndicateMonkey", "SyndicateKobold"] - type: entity - parent: ReinforcementRadioSyndicateMonkey - id: ReinforcementRadioSyndicateMonkeyNukeops # Reinforcement radio exclusive to nukeops uplink + parent: ReinforcementRadioSyndicateAncestor + id: ReinforcementRadioSyndicateAncestorNukeops # Reinforcement radio exclusive to nukeops uplink suffix: NukeOps components: - type: GhostRoleMobSpawner prototype: MobMonkeySyndicateAgentNukeops + selectablePrototypes: ["SyndicateMonkeyNukeops", "SyndicateKoboldNukeops"] - type: entity parent: ReinforcementRadioSyndicate @@ -59,5 +65,7 @@ name: Syndicate Assault Cyborg description: Nuclear operatives needs reinforcements. You, a cold silicon killing machine, will help them. rules: Normal syndicate antagonist rules apply. Work with whoever called you in, and don't harm them. + raffle: + settings: default - type: GhostRoleMobSpawner prototype: PlayerBorgSyndicateAssaultBattery diff --git a/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/war_declarator.yml b/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/war_declarator.yml index 08e96d1de2b..78009f10422 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/war_declarator.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/war_declarator.yml @@ -14,11 +14,11 @@ - type: ActivatableUI inHandsOnly: true singleUser: true - closeOnHandDeselect: false + requireActiveHand: false key: enum.WarDeclaratorUiKey.Key - type: UserInterface interfaces: - - key: enum.WarDeclaratorUiKey.Key + enum.WarDeclaratorUiKey.Key: type: WarDeclaratorBoundUserInterface - type: WarDeclarator message: war-declarator-default-message diff --git a/Resources/Prototypes/Entities/Objects/Devices/chameleon_projector.yml b/Resources/Prototypes/Entities/Objects/Devices/chameleon_projector.yml new file mode 100644 index 00000000000..e0212810210 --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Devices/chameleon_projector.yml @@ -0,0 +1,71 @@ +- type: entity + parent: BaseItem + id: ChameleonProjector + name: chameleon projector + description: Holoparasite technology used to create a hard-light replica of any object around you. Disguise is destroyed when picked up or deactivated. + components: + - type: Sprite + sprite: /Textures/Objects/Devices/chameleon_projector.rsi + state: icon + - type: ChameleonProjector + whitelist: + components: + - Anchorable + - Item + blacklist: + components: + - ChameleonDisguise # no becoming kleiner + - InsideEntityStorage # no clark kent going in phone booth and becoming superman + - MindContainer # no + - Pda # PDAs currently make you invisible /!\ + polymorph: + entity: ChameleonDisguise + +- type: entity + noSpawn: true + parent: BaseMob + id: ChameleonDisguise + name: Urist McKleiner + components: + # this and the name/desc get replaced, this is just placeholder incase something goes wrong + - type: Sprite + sprite: /Textures/Mobs/Species/Human/parts.rsi + state: full + # so people can attempt to pick it up + - type: Item + # so it can take damage + # projector system sets health to be proportional to mass + - type: Damageable + - type: MobState + - type: MobThresholds + thresholds: + 0: Alive + 1: Critical + 200: Dead + - type: MovementSpeedModifier + baseWalkSpeed: 1 # precise movement for the perfect spot + baseSprintSpeed: 5 # the jig is up + - type: ChameleonDisguise + +# actions +- type: entity + noSpawn: true + id: ActionDisguiseNoRot + name: Toggle Rotation + description: Use this to prevent your disguise from rotating, making it easier to hide in some scenarios. + components: + - type: InstantAction + icon: Interface/VerbIcons/refresh.svg.192dpi.png + event: !type:DisguiseToggleNoRotEvent + +- type: entity + noSpawn: true + id: ActionDisguiseAnchor + name: Toggle Anchored + description: For many objects you will want to be anchored to not be completely obvious. + components: + - type: InstantAction + icon: + sprite: Objects/Tools/wrench.rsi + state: icon + event: !type:DisguiseToggleAnchoredEvent diff --git a/Resources/Prototypes/Entities/Objects/Devices/flatpack.yml b/Resources/Prototypes/Entities/Objects/Devices/flatpack.yml index de2e5eadef7..3bb0e660af7 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/flatpack.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/flatpack.yml @@ -3,8 +3,7 @@ id: BaseFlatpack name: base flatpack description: A flatpack used for constructing something. - categories: - - hideSpawnMenu + categories: [ HideSpawnMenu ] components: - type: Item size: Large @@ -110,6 +109,20 @@ # - type: GuideHelp # guides: [ Singularity, Power ] +- type: entity + parent: BaseFlatpack + id: EmitterFlatpack + name: emitter flatpack + description: A flatpack used for constructing an emitter. + components: + - type: Flatpack + entity: Emitter + - type: Sprite + layers: + - state: emitter + - type: GuideHelp + guides: [ Singularity, Power ] + - type: entity parent: BaseFlatpack id: TeslaGeneratorFlatpack diff --git a/Resources/Prototypes/Entities/Objects/Devices/forensic_scanner.yml b/Resources/Prototypes/Entities/Objects/Devices/forensic_scanner.yml index 5e6aaaf9088..84f8f4dd86e 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/forensic_scanner.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/forensic_scanner.yml @@ -17,11 +17,11 @@ - type: ActivatableUI key: enum.ForensicScannerUiKey.Key inHandsOnly: true - closeOnHandDeselect: false + requireActiveHand: false - type: UserInterface interfaces: - - key: enum.ForensicScannerUiKey.Key - type: ForensicScannerBoundUserInterface + enum.ForensicScannerUiKey.Key: + type: ForensicScannerBoundUserInterface - type: ForensicScanner # - type: GuideHelp # guides: diff --git a/Resources/Prototypes/Entities/Objects/Devices/geiger.yml b/Resources/Prototypes/Entities/Objects/Devices/geiger.yml index de4178ce7fa..f8ee24c5c60 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/geiger.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/geiger.yml @@ -31,4 +31,7 @@ Med: {state: geiger_on_med} High: {state: geiger_on_high} Extreme: {state: geiger_on_ext} + - type: PhysicalComposition + materialComposition: + Plastic: 100 diff --git a/Resources/Prototypes/Entities/Objects/Devices/instrumentFlatpacks.yml b/Resources/Prototypes/Entities/Objects/Devices/instrumentFlatpacks.yml new file mode 100644 index 00000000000..f6057d1d323 --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Devices/instrumentFlatpacks.yml @@ -0,0 +1,120 @@ +- type: entity + parent: BaseFlatpack + id: InstrumentFlatpack + name: instrument flatpack + description: A flatpack used for constructing something. + categories: [ HideSpawnMenu ] + components: + - type: Item + size: Normal + - type: Sprite + layers: + - state: service_music + +- type: entity + parent: InstrumentFlatpack + id: PianoFlatpack + name: piano flatpack + description: A flatpack used for constructing a piano. + components: + - type: Flatpack + entity: PianoInstrument + +- type: entity + parent: InstrumentFlatpack + id: UprightPianoFlatpack + name: upright piano flatpack + description: A flatpack used for constructing an upright piano. + components: + - type: Flatpack + entity: UprightPianoInstrument + +- type: entity + parent: InstrumentFlatpack + id: VibraphoneFlatpack + name: vibraphone flatpack + description: A flatpack used for constructing a vibraphone. + components: + - type: Flatpack + entity: VibraphoneInstrument + +- type: entity + parent: InstrumentFlatpack + id: MarimbaFlatpack + name: marimba flatpack + description: A flatpack used for constructing a marimba. + components: + - type: Flatpack + entity: MarimbaInstrument + +- type: entity + parent: InstrumentFlatpack + id: ChurchOrganFlatpack + name: church organ flatpack + description: A flatpack used for constructing a church organ. + components: + - type: Flatpack + entity: ChurchOrganInstrument + +- type: entity + parent: InstrumentFlatpack + id: TubaFlatpack + name: tuba flatpack + description: A flatpack used for constructing a tuba. + components: + - type: Flatpack + entity: TubaInstrument + +- type: entity + parent: InstrumentFlatpack + id: HarpFlatpack + name: harp flatpack + description: A flatpack used for constructing a harp. + components: + - type: Flatpack + entity: HarpInstrument + +- type: entity + parent: InstrumentFlatpack + id: TimpaniFlatpack + name: timpani flatpack + description: A flatpack used for constructing a timpani. + components: + - type: Flatpack + entity: TimpaniInstrument + +- type: entity + parent: InstrumentFlatpack + id: TaikoFlatpack + name: taiko flatpack + description: A flatpack used for constructing a taiko. + components: + - type: Flatpack + entity: TaikoInstrument + +- type: entity + parent: InstrumentFlatpack + id: ContrabassFlatpack + name: contrabass flatpack + description: A flatpack used for constructing a contrabass. + components: + - type: Flatpack + entity: ContrabassInstrument + +- type: entity + parent: InstrumentFlatpack + id: MinimoogFlatpack + name: minimoog flatpack + description: A flatpack used for constructing a minimoog. + components: + - type: Flatpack + entity: MinimoogInstrument + +- type: entity + parent: InstrumentFlatpack + id: TomDrumsFlatpack + name: tom drums flatpack + description: A flatpack used for constructing a tom drums set. + components: + - type: Flatpack + entity: TomDrumsInstrument diff --git a/Resources/Prototypes/Entities/Objects/Devices/mousetrap.yml b/Resources/Prototypes/Entities/Objects/Devices/mousetrap.yml index c3bd74dd751..d20f3c2fb17 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/mousetrap.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/mousetrap.yml @@ -13,9 +13,12 @@ - type: StepTrigger intersectRatio: 0.2 requiredTriggeredSpeed: 0 + triggerGroups: + types: + - Mousetrap - type: Mousetrap - type: TriggerOnStepTrigger - - type: ShoesRequiredStepTrigger + - type: ClothingRequiredStepTrigger - type: DamageUserOnTrigger damage: types: diff --git a/Resources/Prototypes/Entities/Objects/Devices/pda.yml b/Resources/Prototypes/Entities/Objects/Devices/pda.yml index c5e46eb6eb4..bad1a8099ec 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/pda.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/pda.yml @@ -57,6 +57,7 @@ - idcard - Belt - type: UnpoweredFlashlight + - type: EtherealLight - type: PointLight enabled: false radius: 1.5 @@ -86,19 +87,18 @@ - type: ActivatableUI key: enum.PdaUiKey.Key singleUser: true - closeOnHandDeselect: false - type: UserInterface interfaces: - - key: enum.PdaUiKey.Key - type: PdaBoundUserInterface - - key: enum.StoreUiKey.Key - type: StoreBoundUserInterface - - key: enum.RingerUiKey.Key - type: RingerBoundUserInterface - - key: enum.InstrumentUiKey.Key - type: InstrumentBoundUserInterface - - key: enum.HealthAnalyzerUiKey.Key - type: HealthAnalyzerBoundUserInterface + enum.PdaUiKey.Key: + type: PdaBoundUserInterface + enum.StoreUiKey.Key: + type: StoreBoundUserInterface + enum.RingerUiKey.Key: + type: RingerBoundUserInterface + enum.InstrumentUiKey.Key: + type: InstrumentBoundUserInterface + enum.HealthAnalyzerUiKey.Key: + type: HealthAnalyzerBoundUserInterface - type: Tag tags: - DoorBumpOpener @@ -162,9 +162,9 @@ accentVColor: "#447987" - type: Icon state: pda-internmed - # - type: GuideHelp - # guides: - # - Medical Doctor + - type: GuideHelp + guides: + - Medical Doctor - type: entity parent: BasePDA @@ -272,6 +272,9 @@ paralyzeTime: 4 launchForwardsMultiplier: 1.5 - type: StepTrigger + triggerGroups: + types: + - SlipEntity - type: CollisionWake enabled: false - type: Physics @@ -355,6 +358,33 @@ accentVColor: "#a23e3e" - type: Icon state: pda-qm + - type: CartridgeLoader # Adds the MailMetrics courier tracker + preinstalled: + - CrewManifestCartridge + - NotekeeperCartridge + - NewsReaderCartridge + - MailMetricsCartridge + +- type: entity + name: LO special PDA unit # DeltaV - Logistics Department replacing Cargo + parent: BasePDA + id: QuartermasterNTPDA + description: PDA for the guy that directs logistics.it says in gold "special unit unique to the best logistics officer in the sector". # DeltaV - Logistics Department replacing Cargo + components: + - type: Pda + id: QuartermasterIDCard + state: pda-qmnano + - type: PdaBorderColor + borderColor: "#e39751" + accentVColor: "#a23e3e" + - type: Icon + state: pda-qmnano + - type: CartridgeLoader # Adds the MailMetrics courier tracker + preinstalled: + - CrewManifestCartridge + - NotekeeperCartridge + - NewsReaderCartridge + - MailMetricsCartridge - type: entity parent: BasePDA @@ -486,6 +516,26 @@ - type: Icon state: pda-captain +- type: entity + parent: BasePDA + id: CaptainNTPDA + name: CAP special PDA unit + description: incredibly shining with embossed details.it says in gold "special unit unique to the best captain in the sector". + components: + - type: Pda + id: CaptainIDCard + state: pda-captainnano + penSlot: + startingItem: PenCap + priority: -1 + whitelist: + tags: + - Write + - type: PdaBorderColor + borderColor: "#7C5D00" + - type: Icon + state: pda-captainnano + - type: entity parent: BasePDA id: HoPPDA @@ -507,6 +557,27 @@ - type: Icon state: pda-hop +- type: entity + parent: BasePDA + id: HoPNTPDA + name: HOP special PDA unit + description: Looks like it's been chewed on.it says in gold "special unit unique to the best head of personnel in the sector". + components: + - type: Pda + id: HoPIDCard + state: pda-hopnano + penSlot: + startingItem: PenHop + priority: -1 + whitelist: + tags: + - Write + - type: PdaBorderColor + borderColor: "#789876" + accentHColor: "#447987" + - type: Icon + state: pda-hopnano + - type: entity parent: BasePDA id: CEPDA @@ -522,6 +593,21 @@ - type: Icon state: pda-ce +- type: entity + parent: BasePDA + id: CENTPDA + name: CE special PDA unit + description: Looks like it's barely been used.it says in gold "special unit unique to the best chief engineer in the sector". + components: + - type: Pda + id: CEIDCard + state: pda-cenano + - type: PdaBorderColor + borderColor: "#949137" + accentHColor: "#447987" + - type: Icon + state: pda-cenano + - type: entity parent: BasePDA id: EngineerPDA @@ -559,6 +645,28 @@ - type: Icon state: pda-cmo +- type: entity + parent: BaseMedicalPDA + id: CMONTPDA + name: CMO special pda unit + description: Extraordinarily shiny and sterile.it says in gold "special unit unique to the best chief medical officer in the sector". Has a built-in health analyzer. + components: + - type: Pda + id: CMOIDCard + state: pda-cmonano + penSlot: # Fancy Pen Light + startingItem: CMOPenLight + priority: -1 + whitelist: + tags: + - Write + - type: PdaBorderColor + borderColor: "#d7d7d0" + accentHColor: "#447987" + accentVColor: "#447987" + - type: Icon + state: pda-cmonano + - type: entity parent: BaseMedicalPDA id: MedicalPDA @@ -579,9 +687,9 @@ accentVColor: "#447987" - type: Icon state: pda-medical - # - type: GuideHelp - # guides: - # - Medical Doctor + - type: GuideHelp + guides: + - Medical Doctor - type: entity parent: BaseMedicalPDA @@ -647,6 +755,28 @@ - NewsReaderCartridge - GlimmerMonitorCartridge +- type: entity + parent: BasePDA + id: RnDNTPDA + name: MY special PDA unit # DeltaV - Epistemics Department replacing Science + description: It appears surprisingly ordinary.it says in gold "special unit unique to the best Mystagogue in the sector". + components: + - type: Pda + id: RDIDCard + state: pda-rdnano + - type: PdaBorderColor + borderColor: "#d7d7d0" + accentHColor: "#447987" + accentVColor: "#8900c9" + - type: Icon + state: pda-rdnano + - type: CartridgeLoader # Nyanotrasen - Glimmer Monitor + preinstalled: + - CrewManifestCartridge + - NotekeeperCartridge + - NewsReaderCartridge + - GlimmerMonitorCartridge + - type: entity parent: BasePDA id: SciencePDA @@ -705,6 +835,28 @@ - CrimeAssistCartridge - SecWatchCartridge +- type: entity + parent: BasePDA + id: HoSNTPDA + name: HOS special PDA unit + description: Whosoever bears this PDA is the law.it says in gold "special unit unique to the best head of security in the sector". + components: + - type: Pda + id: HoSIDCard + state: pda-hosnano + - type: PdaBorderColor + borderColor: "#A32D26" + accentHColor: "#447987" + - type: Icon + state: pda-hosnano + - type: CartridgeLoader # DeltaV - Crime Assist + SecWatch + preinstalled: + - CrewManifestCartridge + - NotekeeperCartridge + - NewsReaderCartridge + - CrimeAssistCartridge + - SecWatchCartridge + - type: entity parent: BasePDA id: WardenPDA @@ -874,6 +1026,8 @@ whitelist: components: - Cartridge + - type: ClothingAddFaction + faction: Syndicate - type: entity parent: BasePDA @@ -1220,3 +1374,5 @@ whitelist: components: - Cartridge + - type: ClothingAddFaction + faction: Syndicate diff --git a/Resources/Prototypes/Entities/Objects/Devices/pinpointer.yml b/Resources/Prototypes/Entities/Objects/Devices/pinpointer.yml index f5e46bbf54e..4d36af44592 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/pinpointer.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/pinpointer.yml @@ -57,6 +57,11 @@ - type: Sprite layers: - state: pinpointer-syndicate + map: ["enum.PinpointerLayers.Base"] + - state: pinonnull + map: ["enum.PinpointerLayers.Screen"] + shader: unshaded + visible: false - type: Icon state: pinpointer-syndicate - type: Pinpointer @@ -72,6 +77,11 @@ - type: Sprite layers: - state: pinpointer-way + map: ["enum.PinpointerLayers.Base"] + - state: pinonnull + map: ["enum.PinpointerLayers.Screen"] + shader: unshaded + visible: false - type: Icon state: pinpointer-way - type: Pinpointer @@ -88,8 +98,13 @@ - type: Sprite layers: - state: pinpointer-station + map: ["enum.PinpointerLayers.Base"] + - state: pinonnull + map: ["enum.PinpointerLayers.Screen"] + shader: unshaded + visible: false - type: Icon state: pinpointer-station - type: Pinpointer - component: BecomesStation + component: ResearchServer targetName: the station diff --git a/Resources/Prototypes/Entities/Objects/Devices/radio.yml b/Resources/Prototypes/Entities/Objects/Devices/radio.yml index fc5a6619671..b1c0eff98aa 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/radio.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/radio.yml @@ -34,3 +34,20 @@ - key: enum.HandheldRadioUiKey.Key type: HandheldRadioBoundUserInterface # Nuclear-14-End + +- type: entity + name: security radio + description: A handy security radio. + parent: RadioHandheld + id: RadioHandheldSecurity + components: + - type: RadioMicrophone + broadcastChannel: Security + - type: RadioSpeaker + channels: + - Security + - type: Sprite + sprite: Objects/Devices/securityhandy.rsi + - type: Item + sprite: Objects/Devices/securityhandy.rsi + heldPrefix: walkietalkie \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Objects/Devices/station_beacon.yml b/Resources/Prototypes/Entities/Objects/Devices/station_beacon.yml index 9afef7abc71..28d6ddea691 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/station_beacon.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/station_beacon.yml @@ -30,8 +30,8 @@ singleUser: true - type: UserInterface interfaces: - - key: enum.NavMapBeaconUiKey.Key - type: NavMapBeaconBoundUserInterface + enum.NavMapBeaconUiKey.Key: + type: NavMapBeaconBoundUserInterface - type: Item size: Small - type: SubFloorHide diff --git a/Resources/Prototypes/Entities/Objects/Devices/station_map.yml b/Resources/Prototypes/Entities/Objects/Devices/station_map.yml index c37d8935f35..0d2f890a1d3 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/station_map.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/station_map.yml @@ -28,7 +28,7 @@ acts: [ "Destruction" ] - type: UserInterface interfaces: - - key: enum.StationMapUiKey.Key + enum.StationMapUiKey.Key: type: StationMapBoundUserInterface - type: entity diff --git a/Resources/Prototypes/Entities/Objects/Devices/translator_implants.yml b/Resources/Prototypes/Entities/Objects/Devices/translator_implants.yml index da42b2774b1..0e7fce95686 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/translator_implants.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/translator_implants.yml @@ -1,26 +1,26 @@ - type: entity parent: BaseSubdermalImplant - id: BasicGalacticCommonTranslatorImplant + id: BasicTauCetiBasicTranslatorImplant name: basic common translator implant description: Provides your illiterate friends the ability to understand the common galactic tongue. noSpawn: true components: - type: TranslatorImplant understood: - - GalacticCommon + - TauCetiBasic - type: entity parent: BaseSubdermalImplant - id: GalacticCommonTranslatorImplant + 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 components: - type: TranslatorImplant understood: - - GalacticCommon + - TauCetiBasic spoken: - - GalacticCommon + - TauCetiBasic - type: entity parent: BaseSubdermalImplant @@ -35,7 +35,7 @@ spoken: - Bubblish requires: - - GalacticCommon + - TauCetiBasic - type: entity parent: BaseSubdermalImplant @@ -50,7 +50,7 @@ spoken: - Nekomimetic requires: - - GalacticCommon + - TauCetiBasic - type: entity parent: BaseSubdermalImplant @@ -65,7 +65,7 @@ spoken: - Draconic requires: - - GalacticCommon + - TauCetiBasic - type: entity parent: BaseSubdermalImplant @@ -80,7 +80,7 @@ spoken: - Canilunzt requires: - - GalacticCommon + - TauCetiBasic - type: entity parent: BaseSubdermalImplant @@ -95,7 +95,7 @@ spoken: - SolCommon requires: - - GalacticCommon + - TauCetiBasic - type: entity parent: BaseSubdermalImplant @@ -110,7 +110,7 @@ spoken: - RootSpeak requires: - - GalacticCommon + - TauCetiBasic - type: entity parent: BaseSubdermalImplant @@ -125,4 +125,34 @@ spoken: - Moffic requires: - - GalacticCommon + - TauCetiBasic + +- type: entity + parent: BaseSubdermalImplant + id: ValyrianStandardTranslatorImplant + name: valyrian standard translator implant + description: An implant giving the ability to understand and speak Valyrian Standard. Chirp! + noSpawn: true + components: + - type: TranslatorImplant + understood: + - ValyrianStandard + spoken: + - ValyrianStandard + requires: + - TauCetiBasic + +- type: entity + parent: BaseSubdermalImplant + 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 + components: + - type: TranslatorImplant + understood: + - Azaziba + spoken: + - Azaziba + requires: + - Draconic diff --git a/Resources/Prototypes/Entities/Objects/Devices/translators.yml b/Resources/Prototypes/Entities/Objects/Devices/translators.yml index 6aa7947c82d..99b6d4305b6 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/translators.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/translators.yml @@ -67,13 +67,13 @@ components: - type: HandheldTranslator spoken: - - GalacticCommon + - TauCetiBasic - Canilunzt understood: - - GalacticCommon + - TauCetiBasic - Canilunzt requires: - - GalacticCommon + - TauCetiBasic - Canilunzt - type: entity @@ -84,13 +84,13 @@ components: - type: HandheldTranslator spoken: - - GalacticCommon + - TauCetiBasic - Bubblish understood: - - GalacticCommon + - TauCetiBasic - Bubblish requires: - - GalacticCommon + - TauCetiBasic - Bubblish - type: entity @@ -101,30 +101,30 @@ components: - type: HandheldTranslator spoken: - - GalacticCommon + - TauCetiBasic - Nekomimetic understood: - - GalacticCommon + - TauCetiBasic - Nekomimetic requires: - - GalacticCommon + - TauCetiBasic - Nekomimetic - type: entity id: DraconicTranslator parent: [ TranslatorPoweredBase ] - name: Draconic translator - description: Translates speech between Draconic and Galactic Common, making it easier to understand your local Uniathi. + name: Sinta'Unathi translator + description: Translates speech between Sinta'Unathi and Tau-Ceti Basic, making it easier to understand your local Unathi. components: - type: HandheldTranslator spoken: - - GalacticCommon + - TauCetiBasic - Draconic understood: - - GalacticCommon + - TauCetiBasic - Draconic requires: - - GalacticCommon + - TauCetiBasic - Draconic - type: entity @@ -135,13 +135,13 @@ components: - type: HandheldTranslator spoken: - - GalacticCommon + - TauCetiBasic - SolCommon understood: - - GalacticCommon + - TauCetiBasic - SolCommon requires: - - GalacticCommon + - TauCetiBasic - SolCommon - type: entity @@ -152,13 +152,13 @@ components: - type: HandheldTranslator spoken: - - GalacticCommon + - TauCetiBasic - RootSpeak understood: - - GalacticCommon + - TauCetiBasic - RootSpeak requires: - - GalacticCommon + - TauCetiBasic - RootSpeak - type: entity @@ -169,13 +169,13 @@ components: - type: HandheldTranslator spoken: - - GalacticCommon + - TauCetiBasic - Moffic understood: - - GalacticCommon + - TauCetiBasic - Moffic requires: - - GalacticCommon + - TauCetiBasic - Moffic - type: entity @@ -186,13 +186,13 @@ components: - type: HandheldTranslator spoken: - - GalacticCommon + - TauCetiBasic - Xeno understood: - - GalacticCommon + - TauCetiBasic - Xeno requires: - - GalacticCommon + - TauCetiBasic - type: entity id: AnimalTranslator @@ -217,5 +217,39 @@ - Kobold - Hissing requires: - - GalacticCommon + - TauCetiBasic setLanguageOnInteract: false + +- type: entity + id: ValyrianStandardTranslator + parent: [ TranslatorPoweredBase ] + name: Valyrian Standard translator + description: Translates speech between Valyrian Standard and Tau-Ceti Basic. For talking to Harpies! + components: + - type: HandheldTranslator + spoken: + - TauCetiBasic + - ValyrianStandard + understood: + - TauCetiBasic + - ValyrianStandard + requires: + - TauCetiBasic + - ValyrianStandard + +- type: entity + id: AzazibaTranslator + parent: [ TranslatorPoweredBase ] + name: Azaziba translator + description: Translates speech between Unathi and Azaziba. For Unathi to speak the Archaic form of their native tongue! # Intended for Admins Only, this item is for lore reasons not obtainable. + components: + - type: HandheldTranslator + spoken: + - Draconic + - Azaziba + understood: + - Draconic + - Azaziba + requires: + - Draconic + - Azaziba \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Objects/Fun/Instruments/base_instruments.yml b/Resources/Prototypes/Entities/Objects/Fun/Instruments/base_instruments.yml index 09b41d6e5d7..614af2a4886 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/Instruments/base_instruments.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/Instruments/base_instruments.yml @@ -13,8 +13,8 @@ key: enum.InstrumentUiKey.Key - type: UserInterface interfaces: - - key: enum.InstrumentUiKey.Key - type: InstrumentBoundUserInterface + enum.InstrumentUiKey.Key: + type: InstrumentBoundUserInterface - type: Item size: Normal - type: StaticPrice @@ -29,7 +29,7 @@ components: - type: Instrument - type: ActivatableUI - allowSpectator: false # otherwise they can play client-side music + blockSpectators: true # otherwise they can play client-side music inHandsOnly: false singleUser: true requireHands: true @@ -51,8 +51,8 @@ acts: ["Destruction"] - type: UserInterface interfaces: - - key: enum.InstrumentUiKey.Key - type: InstrumentBoundUserInterface + enum.InstrumentUiKey.Key: + type: InstrumentBoundUserInterface - type: Fixtures fixtures: fix1: diff --git a/Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_string.yml b/Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_string.yml index 947a973bbf6..730d532930b 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_string.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_string.yml @@ -25,7 +25,7 @@ bluntStaminaDamageFactor: 1.5 heavyRateModifier: 0.75 heavyDamageBaseModifier: 1.2 - heavyStaminaCost: 10 + heavyStaminaCost: 7.5 angle: 75 - type: Item size: Normal @@ -67,7 +67,7 @@ bluntStaminaDamageFactor: 1.5 heavyRateModifier: 0.75 heavyDamageBaseModifier: 1.2 - heavyStaminaCost: 10 + heavyStaminaCost: 7.5 angle: 75 - type: Item size: Normal @@ -110,7 +110,7 @@ bluntStaminaDamageFactor: 1.5 heavyRateModifier: 0.75 heavyDamageBaseModifier: 1.2 - heavyStaminaCost: 15 + heavyStaminaCost: 10 angle: 160 - type: Wieldable - type: IncreaseDamageOnWield @@ -234,7 +234,7 @@ bluntStaminaDamageFactor: 2 heavyRateModifier: 0.75 heavyDamageBaseModifier: 1.2 - heavyStaminaCost: 10 + heavyStaminaCost: 7.5 angle: 75 - type: entity diff --git a/Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_wind.yml b/Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_wind.yml index e99f825d483..e37fbaa3613 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_wind.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_wind.yml @@ -70,7 +70,7 @@ slots: - neck - type: ActivatableUI - inHandsOnly: false + inHandsOnly: false - type: Tag tags: - WoodwindInstrument diff --git a/Resources/Prototypes/Entities/Objects/Fun/candy_bucket.yml b/Resources/Prototypes/Entities/Objects/Fun/candy_bucket.yml index d8f11cdea29..63175dc89aa 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/candy_bucket.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/candy_bucket.yml @@ -36,8 +36,8 @@ ents: [] - type: UserInterface interfaces: - - key: enum.StorageUiKey.Key - type: StorageBoundUserInterface + enum.StorageUiKey.Key: + type: StorageBoundUserInterface # to prevent bag open/honk spam - type: UseDelay delay: 0.5 diff --git a/Resources/Prototypes/Entities/Objects/Fun/crayons.yml b/Resources/Prototypes/Entities/Objects/Fun/crayons.yml index cb755b161a6..4aab2efdb97 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/crayons.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/crayons.yml @@ -18,8 +18,8 @@ - type: SpaceGarbage - type: UserInterface interfaces: - - key: enum.CrayonUiKey.Key - type: CrayonBoundUserInterface + enum.CrayonUiKey.Key: + type: CrayonBoundUserInterface - type: Crayon capacity: 15 - type: Food diff --git a/Resources/Prototypes/Entities/Objects/Fun/dice.yml b/Resources/Prototypes/Entities/Objects/Fun/dice.yml index 852a1c2699c..bca5ec7ab99 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/dice.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/dice.yml @@ -119,9 +119,12 @@ mask: - ItemMask - type: StepTrigger + triggerGroups: + types: + - Shard intersectRatio: 0.2 - type: TriggerOnStepTrigger - - type: ShoesRequiredStepTrigger + - type: ClothingRequiredStepTrigger - type: Slippery slipSound: path: /Audio/Effects/glass_step.ogg diff --git a/Resources/Prototypes/Entities/Objects/Fun/immovable_rod.yml b/Resources/Prototypes/Entities/Objects/Fun/immovable_rod.yml index 7ff6c43e29b..b5cebbdd097 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/immovable_rod.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/immovable_rod.yml @@ -35,6 +35,7 @@ - type: entity id: ImmovableRodDespawn + suffix: Despawn parent: ImmovableRod components: - type: TimedDespawn @@ -92,3 +93,6 @@ components: - type: ImmovableRod randomizeVelocity: false + damage: + types: + Blunt: 120 diff --git a/Resources/Prototypes/Entities/Objects/Fun/pai.yml b/Resources/Prototypes/Entities/Objects/Fun/pai.yml index 537562f4618..b73767fd811 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/pai.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/pai.yml @@ -13,10 +13,12 @@ program: 2 - type: UserInterface interfaces: - - key: enum.InstrumentUiKey.Key - type: InstrumentBoundUserInterface - - key: enum.StationMapUiKey.Key - type: UntrackedStationMapBoundUserInterface + enum.InstrumentUiKey.Key: + type: InstrumentBoundUserInterface + requireInputValidation: false + enum.StationMapUiKey.Key: + type: UntrackedStationMapBoundUserInterface + requireInputValidation: false - type: Sprite sprite: Objects/Fun/pai.rsi layers: @@ -70,6 +72,22 @@ Searching: { state: pai-searching-overlay } On: { state: pai-on-overlay } - type: StationMap + - type: LanguageKnowledge + speaks: + - TauCetiBasic + - SolCommon + - Tradeband + - Freespeak + - Elyran + - RobotTalk + understands: + - TauCetiBasic + - SolCommon + - Tradeband + - Freespeak + - Elyran + - RobotTalk + - Sign # It's intentional that they don't "Speak" sign language. - type: entity parent: PersonalAI diff --git a/Resources/Prototypes/Entities/Objects/Fun/prizeticket.yml b/Resources/Prototypes/Entities/Objects/Fun/prizeticket.yml index d6d86c08b23..19aa6a3015a 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/prizeticket.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/prizeticket.yml @@ -285,6 +285,9 @@ - id: PetRock prob: 0.80 orGroup: Prize + - id: PlushieShadowkin + prob: 0.80 + orGroup: Prize # Uncommon - id: PrizeTicket60 prob: 0.50 diff --git a/Resources/Prototypes/Entities/Objects/Fun/snap_pops.yml b/Resources/Prototypes/Entities/Objects/Fun/snap_pops.yml index a39c2f881a2..88f07588740 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/snap_pops.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/snap_pops.yml @@ -33,15 +33,12 @@ maxIntensity: 0.01 intensitySlope: 1 totalIntensity: 0.01 - - type: Tag - tags: - - SnapPop - type: entity parent: BaseStorageItem id: SnapPopBox name: snap pop box - description: Contains twenty snap pops for a few minutes of popping fun! + description: Contains snap pops for a few minutes of popping fun! components: - type: Item size: Normal @@ -56,6 +53,6 @@ - type: StorageFill contents: - id: SnapPop - amount: 20 + amount: 5 - type: Dumpable diff --git a/Resources/Prototypes/Entities/Objects/Fun/toys.yml b/Resources/Prototypes/Entities/Objects/Fun/toys.yml index 9e9740a0a82..fc771414b4a 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/toys.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/toys.yml @@ -630,12 +630,11 @@ state: icon - type: MeleeWeapon attackRate: 1.5 - range: 1.3 + range: 1.5 damage: types: Blunt: 0.1 heavyDamageBaseModifier: 2 - heavyStaminaCost: 5 maxTargets: 8 angle: 25 - type: Clothing @@ -1955,4 +1954,14 @@ size: Ginormous sprite: Objects/Weapons/Melee/Throngler-in-hand.rsi - type: DisarmMalus - malus: 0 \ No newline at end of file + malus: 0 + +- type: entity + parent: BasePlushie + id: PlushieShadowkin + name: shadowkin plushie + description: A plushie of a Shadowkin. It's very soft. + components: + - type: Sprite + sprite: Objects/Fun/toys.rsi + state: shadowkin \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Objects/Fun/whistles.yml b/Resources/Prototypes/Entities/Objects/Fun/whistles.yml index 10c41efc54a..667d5da11ca 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/whistles.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/whistles.yml @@ -6,8 +6,12 @@ description: Someone forgot to turn off kettle? components: - type: Item + sprite: Objects/Fun/whistles.rsi size: Tiny + - type: Sprite + sprite: Objects/Fun/whistles.rsi - type: Clothing + sprite: Objects/Fun/whistles.rsi quickEquip: false slots: neck - type: UseDelay @@ -16,7 +20,14 @@ sound: collection: BaseWhistle - type: Whistle - distance: 5 + distance: 3 + +- type: entity + parent: BaseWhistle + id: Whistle + components: + - type: Sprite + state: whistle - type: entity parent: BaseWhistle @@ -24,10 +35,11 @@ description: Sound of it make you feel fear. components: - type: Sprite - sprite: Objects/Fun/whistle.rsi - state: securityWhistle - - type: Item - sprite: Objects/Fun/whistle.rsi + state: sec + - type: Clothing + equippedPrefix: sec + - type: Whistle + distance: 5 - type: entity parent: BaseWhistle @@ -36,13 +48,9 @@ description: A whistle used by Syndicate commanders to draw attention. Avanti! components: - type: Sprite - sprite: Clothing/Neck/Misc/whistles.rsi - state: icon + state: trench - type: Clothing - sprite: Clothing/Neck/Misc/whistles.rsi - quickEquip: False - slots: - - neck + equippedPrefix: trench - type: EmitSoundOnUse sound: collection: TrenchWhistle diff --git a/Resources/Prototypes/Entities/Objects/Magic/books.yml b/Resources/Prototypes/Entities/Objects/Magic/books.yml index 6202767ff12..7697e46b32a 100644 --- a/Resources/Prototypes/Entities/Objects/Magic/books.yml +++ b/Resources/Prototypes/Entities/Objects/Magic/books.yml @@ -9,7 +9,7 @@ layers: - state: paper_blood - state: cover_strong - color: "#645a5a" + color: "#645a5a" - state: decor_wingette_flat color: "#4d0303" - state: icon_pentagramm @@ -25,13 +25,58 @@ - type: EmitSoundOnLand sound: /Audio/SimpleStation14/Items/Handling/book_drop.ogg +# For the Wizard Antag +# Do not add discounts or price inflation +- type: entity + id: WizardsGrimoire + name: wizards grimoire + suffix: Wizard + parent: BaseItem + components: + - type: Sprite + sprite: Objects/Misc/books.rsi + layers: + - state: paper_blood + - state: cover_strong + color: "#645a5a" + - state: decor_wingette_flat + color: "#4d0303" + - state: icon_pentagramm + color: "#f7e19f" + - type: UserInterface + interfaces: + enum.StoreUiKey.Key: + type: StoreBoundUserInterface + - type: ActivatableUI + key: enum.StoreUiKey.Key + - type: Store + refundAllowed: true + ownerOnly: true # get your own tome! + preset: StorePresetSpellbook + balance: + WizCoin: 10 # prices are balanced around this 10 point maximum and how strong the spells are + +# Not meant for wizard antag but meant for spawning, so people can't abuse refund if they were given a tome +- type: entity + id: WizardsGrimoireNoRefund + name: wizards grimoire + suffix: Wizard, No Refund + parent: WizardsGrimoire + components: + - type: Store + refundAllowed: false + ownerOnly: true # get your own tome! + preset: StorePresetSpellbook + balance: + WizCoin: 10 # prices are balanced around this 10 point maximum and how strong the spells are + - type: entity id: SpawnSpellbook name: spawn spellbook parent: BaseSpellbook components: - type: Spellbook - spells: + spellActions: ActionSpawnMagicarpSpell: -1 - type: entity @@ -54,7 +99,7 @@ - state: detail_rivets color: gold - type: Spellbook - spells: + spellActions: ActionForceWall: -1 - type: entity @@ -75,7 +120,7 @@ - state: detail_rivets color: gold - type: Spellbook - spells: + spellActions: ActionBlink: -1 - type: entity @@ -98,7 +143,7 @@ color: red - state: overlay_blood - type: Spellbook - spells: + spellActions: ActionSmite: -1 - type: entity @@ -120,7 +165,7 @@ - state: detail_bookmark color: "#98c495" - type: Spellbook - spells: + spellActions: ActionKnock: -1 - type: entity @@ -144,7 +189,7 @@ - state: icon_magic_fireball shader: unshaded - type: Spellbook - spells: + spellActions: ActionFireball: -1 - type: entity @@ -159,7 +204,7 @@ layers: - state: spell_default - type: Spellbook - spells: + spellActions: ActionFlashRune: -1 ActionExplosionRune: -1 ActionIgniteRune: -1 diff --git a/Resources/Prototypes/Entities/Objects/Materials/Sheets/glass.yml b/Resources/Prototypes/Entities/Objects/Materials/Sheets/glass.yml index 91ba1abff93..e318d7b188d 100644 --- a/Resources/Prototypes/Entities/Objects/Materials/Sheets/glass.yml +++ b/Resources/Prototypes/Entities/Objects/Materials/Sheets/glass.yml @@ -93,13 +93,20 @@ Quantity: 10 - type: UserInterface interfaces: - - key: enum.ShortConstructionUiKey.Key - type: ShortConstructionMenuBUI + enum.RadialSelectorUiKey.Key: + type: RadialSelectorMenuBUI - type: ActivatableUI - key: enum.ShortConstructionUiKey.Key + key: enum.RadialSelectorUiKey.Key + inHandsOnly: true + requireActiveHand: false - type: ShortConstruction - prototypes: - - Window + entries: + - prototype: Window + - prototype: WindowDirectional + - prototype: WindowDiagonal + - prototype: SheetRGlass + - prototype: SheetPGlass + - prototype: SheetUGlass - type: entity parent: SheetGlass @@ -188,13 +195,19 @@ acts: [ "Destruction" ] - type: UserInterface interfaces: - - key: enum.ShortConstructionUiKey.Key - type: ShortConstructionMenuBUI + enum.RadialSelectorUiKey.Key: + type: RadialSelectorMenuBUI - type: ActivatableUI - key: enum.ShortConstructionUiKey.Key + key: enum.RadialSelectorUiKey.Key + inHandsOnly: true + requireActiveHand: false - type: ShortConstruction - prototypes: - - ReinforcedWindow + entries: + - prototype: SheetRPGlass1 + - prototype: SheetRUGlass1 + - prototype: ReinforcedWindow + - prototype: ReinforcedWindowDiagonal + - prototype: WindowReinforcedDirectional - type: entity parent: SheetRGlass @@ -272,6 +285,20 @@ max: 1 - !type:DoActsBehavior acts: [ "Destruction" ] + - type: UserInterface + interfaces: + enum.RadialSelectorUiKey.Key: + type: RadialSelectorMenuBUI + - type: ActivatableUI + key: enum.RadialSelectorUiKey.Key + inHandsOnly: true + requireActiveHand: false + - type: ShortConstruction + entries: + - prototype: SheetRPGlass0 + - prototype: PlasmaWindow + - prototype: PlasmaWindowDiagonal + - prototype: PlasmaWindowDirectional - type: entity parent: SheetPGlass @@ -338,6 +365,19 @@ - ReagentId: Carbon Quantity: 0.5 canReact: false + - type: UserInterface + interfaces: + enum.RadialSelectorUiKey.Key: + type: RadialSelectorMenuBUI + - type: ActivatableUI + key: enum.RadialSelectorUiKey.Key + inHandsOnly: true + requireActiveHand: false + - type: ShortConstruction + entries: + - prototype: ReinforcedPlasmaWindow + - prototype: ReinforcedPlasmaWindowDiagonal + - prototype: PlasmaReinforcedWindowDirectional - type: entity parent: SheetRPGlass @@ -413,6 +453,20 @@ - ReagentId: Uranium Quantity: 10 canReact: false + - type: UserInterface + interfaces: + enum.RadialSelectorUiKey.Key: + type: RadialSelectorMenuBUI + - type: ActivatableUI + key: enum.RadialSelectorUiKey.Key + inHandsOnly: true + requireActiveHand: false + - type: ShortConstruction + entries: + - prototype: SheetRUGlass0 + - prototype: UraniumWindow + - prototype: UraniumWindowDiagonal + - prototype: UraniumWindowDirectional - type: entity parent: SheetUGlass @@ -467,6 +521,19 @@ - ReagentId: Carbon Quantity: 0.5 canReact: false + - type: UserInterface + interfaces: + enum.RadialSelectorUiKey.Key: + type: RadialSelectorMenuBUI + - type: ActivatableUI + key: enum.RadialSelectorUiKey.Key + inHandsOnly: true + requireActiveHand: false + - type: ShortConstruction + entries: + - prototype: ReinforcedUraniumWindow + - prototype: ReinforcedUraniumWindowDiagonal + - prototype: UraniumReinforcedWindowDirectional - type: entity parent: SheetRUGlass diff --git a/Resources/Prototypes/Entities/Objects/Materials/Sheets/metal.yml b/Resources/Prototypes/Entities/Objects/Materials/Sheets/metal.yml index 83982474d2a..f486125ff68 100644 --- a/Resources/Prototypes/Entities/Objects/Materials/Sheets/metal.yml +++ b/Resources/Prototypes/Entities/Objects/Materials/Sheets/metal.yml @@ -71,17 +71,82 @@ Quantity: 1 - type: UserInterface interfaces: - - key: enum.ShortConstructionUiKey.Key - type: ShortConstructionMenuBUI + enum.RadialSelectorUiKey.Key: + type: RadialSelectorMenuBUI - type: ActivatableUI - key: enum.ShortConstructionUiKey.Key + key: enum.RadialSelectorUiKey.Key + inHandsOnly: true + requireActiveHand: false - type: ShortConstruction - prototypes: - - Girder - - MetalRod - - TileSteel - - TileWhite - - TileDark + entries: + - prototype: Girder + - prototype: MetalRod + - category: + name: Tiles + icon: + sprite: Objects/Tiles/tile.rsi + state: steel + entries: + - prototype: TileSteel + - prototype: TileWhite + - prototype: TileDark + - category: + name: Electronics + icon: + sprite: Structures/Machines/computers.rsi + state: computer-datatheory + entries: + - prototype: MachineFrame + - prototype: Computer + - prototype: Windoor + - prototype: LightTubeFixture + - prototype: APC + - prototype: AirAlarmFixture + - prototype: AirSensor + - prototype: FireAlarm + - category: + name: Atmospherics + icon: + sprite: Structures/Piping/Atmospherics/vent.rsi + state: vent_out + entries: + - prototype: GasPort + - prototype: GasOutletInjector + - prototype: GasVentScrubber + - prototype: GasPassiveVent + - prototype: GasVentPump + - prototype: GasMixer + - prototype: GasFilter + - prototype: GasVolumePump + - prototype: GasPressurePump + - prototype: GasValve + - category: + name: Piping + icon: + sprite: Structures/Piping/Atmospherics/pipe.rsi + state: pipeFourway + entries: + - prototype: HeatExchanger + - prototype: GasPipeBend + - prototype: GasPipeFourway + - prototype: GasPipeHalf + - prototype: GasPipeStraight + - prototype: GasPipeTJunction + - category: + name: Disposals + icon: + sprite: Structures/Piping/disposal.rsi + state: disposal + entries: + - prototype: DisposalPipe + - prototype: DisposalBend + - prototype: DisposalJunction + - prototype: DisposalYJunction + - prototype: DisposalRouter + - prototype: DisposalTagger + - prototype: DisposalTrunk + - prototype: DisposalUnit + - prototype: CrateGenericSteel - type: entity parent: SheetSteel @@ -218,6 +283,17 @@ - ReagentId: Carbon Quantity: 1 canReact: false + - type: UserInterface + interfaces: + enum.RadialSelectorUiKey.Key: + type: RadialSelectorMenuBUI + - type: ActivatableUI + key: enum.RadialSelectorUiKey.Key + inHandsOnly: true + requireActiveHand: false + - type: ShortConstruction + entries: + - prototype: SecureWindoor - type: entity parent: SheetPlasteel diff --git a/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml b/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml index dfb51336289..ae6770d631d 100644 --- a/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml +++ b/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml @@ -110,6 +110,19 @@ - type: Tag tags: - Sheet + - type: UserInterface + interfaces: + enum.RadialSelectorUiKey.Key: + type: RadialSelectorMenuBUI + - type: ActivatableUI + key: enum.RadialSelectorUiKey.Key + inHandsOnly: true + requireActiveHand: false + - type: ShortConstruction + entries: + - prototype: SheetPGlass + - prototype: SheetRPGlass + - prototype: SheetRPGlass1 - type: entity parent: SheetPlasma @@ -162,6 +175,17 @@ - ReagentId: Phosphorus Quantity: 5 canReact: false + - type: UserInterface + interfaces: + enum.RadialSelectorUiKey.Key: + type: RadialSelectorMenuBUI + - type: ActivatableUI + key: enum.RadialSelectorUiKey.Key + inHandsOnly: true + requireActiveHand: false + - type: ShortConstruction + entries: + - prototype: CratePlastic - type: entity parent: SheetPlastic @@ -224,6 +248,19 @@ - ReagentId: Radium Quantity: 2 canReact: false + - type: UserInterface + interfaces: + enum.RadialSelectorUiKey.Key: + type: RadialSelectorMenuBUI + - type: ActivatableUI + key: enum.RadialSelectorUiKey.Key + inHandsOnly: true + requireActiveHand: false + - type: ShortConstruction + entries: + - prototype: SheetUGlass + - prototype: SheetRUGlass + - prototype: SheetRUGlass1 - type: entity parent: SheetUranium diff --git a/Resources/Prototypes/Entities/Objects/Materials/bluespace.yml b/Resources/Prototypes/Entities/Objects/Materials/bluespace.yml index f93534ecd5c..7af87ca40d6 100644 --- a/Resources/Prototypes/Entities/Objects/Materials/bluespace.yml +++ b/Resources/Prototypes/Entities/Objects/Materials/bluespace.yml @@ -5,7 +5,7 @@ name: bluespace crystal components: - type: Sprite - sprite: Nyanotrasen/Objects/Materials/materials.rsi + sprite: Objects/Materials/materials.rsi layers: - state: bluespace_3 map: ["base"] @@ -14,6 +14,10 @@ - type: PhysicalComposition materialComposition: Bluespace: 100 + - type: EmitSoundOnUse + sound: + collection: RadiationPulse + - type: EtherealStunItem - type: Tag tags: - BluespaceCrystal @@ -54,3 +58,60 @@ components: - type: Stack count: 5 + +- type: entity + parent: MaterialBase + id: MaterialNormality + suffix: Full + name: normality crystal + components: + - type: Sprite + sprite: Objects/Materials/materials.rsi + layers: + - state: normality_3 + map: ["base"] + - type: Appearance + - type: Material + - type: PhysicalComposition + materialComposition: + Normality: 100 + - type: Tag + tags: + - NormalityCrystal + - RawMaterial + - type: Stack + stackType: Normality + baseLayer: base + layerStates: + - normality + - normality_2 + - normality_3 + count: 5 + - type: Item + size: Small + +- type: entity + parent: MaterialNormality + id: MaterialNormality1 + suffix: 1 + components: + - type: Sprite + state: normality + - type: Stack + count: 1 + +- type: entity + parent: MaterialNormality1 + id: MaterialNormality3 + suffix: 3 + components: + - type: Stack + count: 3 + +- type: entity + parent: MaterialNormality1 + id: MaterialNormality5 + suffix: 5 + components: + - type: Stack + count: 5 diff --git a/Resources/Prototypes/Entities/Objects/Materials/materials.yml b/Resources/Prototypes/Entities/Objects/Materials/materials.yml index da27289f96a..83dc147c1b5 100644 --- a/Resources/Prototypes/Entities/Objects/Materials/materials.yml +++ b/Resources/Prototypes/Entities/Objects/Materials/materials.yml @@ -422,6 +422,58 @@ - type: Stack count: 1 +- type: entity + parent: MaterialBase + id: MaterialPyrotton + name: pyrotton + suffix: Full + components: + - type: Stack + stackType: Pyrotton + baseLayer: base + layerStates: + - pyrotton + - pyrotton_2 + - pyrotton_3 + - type: Sprite + state: pyrotton_3 + layers: + - state: pyrotton_3 + map: ["base"] + - type: Appearance + - type: Food + requiresSpecialDigestion: true + - type: SolutionContainerManager + solutions: + food: + maxVol: 10 + reagents: + - ReagentId: Fiber + Quantity: 5 + - ReagentId: Phlogiston + Quantity: 5 + - type: Extractable + juiceSolution: + reagents: + - ReagentId: Fiber + Quantity: 3 + - ReagentId: Phlogiston + Quantity: 3 + - type: Tag + tags: + - ClothMade + - RawMaterial + +- type: entity + parent: MaterialPyrotton + id: MaterialPyrotton1 + suffix: Single + components: + - type: Sprite + state: pyrotton + - type: Stack + count: 1 + - type: entity parent: MaterialBase id: MaterialBananium diff --git a/Resources/Prototypes/Entities/Objects/Materials/ore.yml b/Resources/Prototypes/Entities/Objects/Materials/ore.yml index bf7dbfad5a3..521d3cf1ec8 100644 --- a/Resources/Prototypes/Entities/Objects/Materials/ore.yml +++ b/Resources/Prototypes/Entities/Objects/Materials/ore.yml @@ -344,4 +344,52 @@ suffix: Single components: - type: Stack - count: 1 \ No newline at end of file + count: 1 + +- type: entity + parent: OreBase + id: BluespaceOre + name: bluespace ore + suffix: Full + components: + - type: Stack + stackType: BluespaceOre + - type: Sprite + state: bluespace + - type: Item + - type: Material + - type: PhysicalComposition + materialComposition: + RawBluespace: 100 + +- type: entity + parent: BluespaceOre + id: BluespaceOre1 + suffix: Single + components: + - type: Stack + count: 1 + +- type: entity + parent: OreBase + id: NormalityOre + name: normality ore + suffix: Full + components: + - type: Stack + stackType: NormalityOre + - type: Sprite + state: normality + - type: Item + - type: Material + - type: PhysicalComposition + materialComposition: + RawNormality: 100 + +- type: entity + parent: NormalityOre + id: NormalityOre1 + suffix: Single + components: + - type: Stack + count: 1 diff --git a/Resources/Prototypes/Entities/Objects/Materials/parts.yml b/Resources/Prototypes/Entities/Objects/Materials/parts.yml index 8b916f2e2be..cfbb3ff3869 100644 --- a/Resources/Prototypes/Entities/Objects/Materials/parts.yml +++ b/Resources/Prototypes/Entities/Objects/Materials/parts.yml @@ -70,13 +70,37 @@ Quantity: 0.5 - type: UserInterface interfaces: - - key: enum.ShortConstructionUiKey.Key - type: ShortConstructionMenuBUI + enum.RadialSelectorUiKey.Key: + type: RadialSelectorMenuBUI - type: ActivatableUI - key: enum.ShortConstructionUiKey.Key + key: enum.RadialSelectorUiKey.Key + inHandsOnly: true + requireActiveHand: false - type: ShortConstruction - prototypes: - - Grille + entries: + - prototype: Grille + - prototype: GrilleDiagonal + - category: + name: Railings + icon: + sprite: Structures/Walls/railing.rsi + state: side + entries: + - prototype: Railing + - prototype: RailingCorner + - prototype: RailingRound + - prototype: RailingCornerSmall + - category: + name: Glass + icon: + sprite: Objects/Materials/Sheets/glass.rsi + state: rglass_3 + entries: + - prototype: SheetRPGlass + - prototype: SheetRPGlass0 + - prototype: SheetRUGlass + - prototype: SheetRUGlass0 + - prototype: SheetRGlass - type: entity parent: PartRodMetal diff --git a/Resources/Prototypes/Entities/Objects/Materials/shards.yml b/Resources/Prototypes/Entities/Objects/Materials/shards.yml index 6cdc066cf10..5e0b8890ccd 100644 --- a/Resources/Prototypes/Entities/Objects/Materials/shards.yml +++ b/Resources/Prototypes/Entities/Objects/Materials/shards.yml @@ -17,7 +17,7 @@ shard2: "" shard3: "" - type: MeleeWeapon - attackRate: 1.5 + attackRate: 1 damage: types: Slash: 3.5 @@ -64,8 +64,11 @@ - !type:DoActsBehavior acts: [ "Destruction" ] - type: StepTrigger + triggerGroups: + types: + - Shard intersectRatio: 0.2 - - type: ShoesRequiredStepTrigger + - type: ClothingRequiredStepTrigger - type: Slippery slipSound: path: /Audio/Effects/glass_step.ogg @@ -93,7 +96,7 @@ - type: DamageUserOnTrigger damage: types: - Piercing: 5 + Piercing: 4.5 - type: Tag tags: - GlassShard @@ -118,6 +121,10 @@ components: - type: Sprite color: "#96cdef" + - type: MeleeWeapon + damage: + types: + Slash: 4.5 - type: WelderRefinable refineResult: - id: SheetGlass1 @@ -125,7 +132,7 @@ - type: DamageUserOnTrigger damage: types: - Piercing: 5 + Piercing: 5.5 - type: Tag tags: - ReinforcedGlassShard @@ -150,6 +157,10 @@ components: - type: Sprite color: "#FF72E7" + - type: MeleeWeapon + damage: + types: + Slash: 5.5 - type: WelderRefinable refineResult: - id: SheetGlass1 @@ -157,7 +168,7 @@ - type: DamageUserOnTrigger damage: types: - Piercing: 5 + Piercing: 6.5 - type: Tag tags: - PlasmaGlassShard @@ -184,6 +195,11 @@ components: - type: Sprite color: "#8eff7a" + - type: MeleeWeapon + damage: + types: + Slash: 4.5 + Radiation: 2 - type: WelderRefinable refineResult: - id: SheetGlass1 @@ -191,8 +207,8 @@ - type: DamageUserOnTrigger damage: types: - Piercing: 3 - Radiation: 2 + Piercing: 5 + Radiation: 2.5 - type: Tag tags: - UraniumGlassShard diff --git a/Resources/Prototypes/Entities/Objects/Misc/books.yml b/Resources/Prototypes/Entities/Objects/Misc/books.yml index a508ff818ad..fca4b5c59dd 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/books.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/books.yml @@ -22,11 +22,10 @@ contentSize: 12000 - type: ActivatableUI key: enum.PaperUiKey.Key - closeOnHandDeselect: false - type: UserInterface interfaces: - - key: enum.PaperUiKey.Key - type: PaperBoundUserInterface + enum.PaperUiKey.Key: + type: PaperBoundUserInterface - type: Tag tags: - Book @@ -55,17 +54,17 @@ color: "#0a2a6b" - state: decor_wingette color: "#082561" - - state: icon_text + - state: icon_text color: gold - state: icon_planet color: "#42b6f5" - type: Tag tags: - Book - # - type: GuideHelp - # openOnActivation: true - # guides: - # - SS14 + - type: GuideHelp + openOnActivation: true + guides: + - SS14 - type: entity id: BookTheBookOfControl @@ -88,10 +87,10 @@ - type: Tag tags: - Book - # - type: GuideHelp - # openOnActivation: true - # guides: - # - Controls + - type: GuideHelp + openOnActivation: true + guides: + - Controls - type: entity id: BookBartendersManual @@ -111,10 +110,10 @@ - type: Tag tags: - Book - # - type: GuideHelp - # openOnActivation: true - # guides: - # - Bartender + - type: GuideHelp + openOnActivation: true + guides: + - Bartender - type: entity id: BookChefGaming @@ -133,10 +132,10 @@ - type: Tag tags: - Book - # - type: GuideHelp - # openOnActivation: true - # guides: - # - Chef + - type: GuideHelp + openOnActivation: true + guides: + - Chef - type: entity id: BookLeafLoversSecret @@ -158,10 +157,10 @@ - type: Tag tags: - Book - # - type: GuideHelp - # openOnActivation: true - # guides: - # - Botany + - type: GuideHelp + openOnActivation: true + guides: + - Botany - type: entity id: BookEngineersHandbook @@ -183,10 +182,10 @@ - type: Tag tags: - Book - # - type: GuideHelp - # openOnActivation: true - # guides: - # - Engineering + - type: GuideHelp + openOnActivation: true + guides: + - Engineering - type: entity id: BookScientistsGuidebook @@ -206,10 +205,10 @@ - type: Tag tags: - Book - # - type: GuideHelp - # openOnActivation: true - # guides: - # - Science + - type: GuideHelp + openOnActivation: true + guides: + - Science - type: entity id: BookSecurity @@ -234,10 +233,10 @@ damage: types: Blunt: 6 - # - type: GuideHelp - # openOnActivation: true - # guides: - # - Security + - type: GuideHelp + openOnActivation: true + guides: + - Security - type: entity id: BookHowToKeepStationClean @@ -256,10 +255,10 @@ - type: Tag tags: - Book - # - type: GuideHelp - # openOnActivation: true - # guides: - # - Janitorial + - type: GuideHelp + openOnActivation: true + guides: + - Janitorial - type: entity id: BookHowToRockAndStone @@ -282,10 +281,10 @@ - type: Tag tags: - Book - # - type: GuideHelp - # openOnActivation: true - # guides: - # - Salvage + - type: GuideHelp + openOnActivation: true + guides: + - Salvage - type: entity id: BookMedicalReferenceBook @@ -306,10 +305,10 @@ - type: Tag tags: - Book - # - type: GuideHelp - # openOnActivation: true - # guides: - # - Medical + - type: GuideHelp + openOnActivation: true + guides: + - Medical - type: entity id: BookHowToSurvive @@ -332,10 +331,10 @@ - type: Tag tags: - Book - # - type: GuideHelp - # openOnActivation: true - # guides: - # - Survival + - type: GuideHelp + openOnActivation: true + guides: + - Survival - type: entity id: BookChemicalCompendium @@ -355,10 +354,10 @@ - type: Tag tags: - Book - # - type: GuideHelp - # openOnActivation: true - # guides: - # - Chemicals + - type: GuideHelp + openOnActivation: true + guides: + - Chemicals - type: entity parent: BookBase @@ -367,7 +366,7 @@ description: Each book is unique! What is hidden in this one? components: - type: RandomMetadata - nameSegments: + nameSegments: - book_hint_appearance - book_type - type: RandomSprite @@ -416,7 +415,7 @@ icon_skull: "" icon_text: "" icon_text2: "" - icon_text3: "" + icon_text3: "" overlay: overlay_blood: "" overlay_dirt: Sixteen @@ -457,7 +456,7 @@ - book_story_element_trait - "." storySeparator: "" - + - type: entity parent: BookBase id: BookAtmosDistro @@ -536,4 +535,4 @@ - state: icon_corner color: gold - type: Paper - content: book-text-atmos-vents \ No newline at end of file + content: book-text-atmos-vents diff --git a/Resources/Prototypes/Entities/Objects/Misc/broken_bottle.yml b/Resources/Prototypes/Entities/Objects/Misc/broken_bottle.yml index f8dbabd07a1..a6cbe9a6e7e 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/broken_bottle.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/broken_bottle.yml @@ -6,8 +6,8 @@ components: - type: Sharp - type: MeleeWeapon - attackRate: 1.5 - range: 1.3 + attackRate: 1.4 + range: 1.4 damage: types: Slash: 4 diff --git a/Resources/Prototypes/Entities/Objects/Misc/chopsticks.yml b/Resources/Prototypes/Entities/Objects/Misc/chopsticks.yml new file mode 100644 index 00000000000..ed49053f8ae --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Misc/chopsticks.yml @@ -0,0 +1,30 @@ +- type: entity + parent: BaseItem + id: ChopSticks + name: chopsticks + description: A very traditional utensil. + components: + - type: Sprite + sprite: Objects/Misc/chopstick.rsi + state: icon + - type: Item + sprite: Objects/Misc/chopstick.rsi + size: Small + - type: Utensil + types: + - Fork + +- type: entity + parent: BaseItem + name: paired chopsticks + id: PairedChopsticks + description: You should probably seperate them. + components: + - type: SpawnItemsOnUse + items: + - id: ChopSticks + sound: + path: /Audio/Effects/chopstickbreak.ogg + - type: Sprite + sprite: Objects/Misc/chopstick.rsi + state: paired diff --git a/Resources/Prototypes/Entities/Objects/Misc/fire_extinguisher.yml b/Resources/Prototypes/Entities/Objects/Misc/fire_extinguisher.yml index f1802e426fb..32d8ea7540a 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/fire_extinguisher.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/fire_extinguisher.yml @@ -46,8 +46,8 @@ Blunt: 8 heavyRateModifier: 0.8 heavyDamageBaseModifier: 2 - heavyStaminaCost: 15 - maxTargets: 8 + heavyStaminaCost: 7.5 + maxTargets: 6 soundHit: path: /Audio/Weapons/smash.ogg - type: Tool @@ -61,6 +61,9 @@ enabled: True: { state: fire_extinguisher_closed } False: { state: fire_extinguisher_open } + - type: PhysicalComposition + materialComposition: + Steel: 100 - type: entity name: extinguisher spray diff --git a/Resources/Prototypes/Entities/Objects/Misc/fluff_lights.yml b/Resources/Prototypes/Entities/Objects/Misc/fluff_lights.yml index a42b2fa1139..8fc465f4fb2 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/fluff_lights.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/fluff_lights.yml @@ -40,6 +40,7 @@ sprite: Objects/Misc/Lights/lights.rsi size: Normal heldPrefix: off + - type: EtherealLight - type: PointLight enabled: false radius: 3 @@ -212,6 +213,11 @@ enabled: false radius: 8 energy: 5 + - type: ItemSlots + slots: + cell_slot: + name: power-cell-slot-component-slot-name-default + startingItem: PowerCellMedium - type: Anchorable - type: Damageable damageContainer: Inorganic diff --git a/Resources/Prototypes/Entities/Objects/Misc/identification_cards.yml b/Resources/Prototypes/Entities/Objects/Misc/identification_cards.yml index 4af517bc528..621fb4557d0 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/identification_cards.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/identification_cards.yml @@ -902,10 +902,12 @@ default: PassengerIDCard - type: UserInterface interfaces: - - key: enum.AgentIDCardUiKey.Key + enum.AgentIDCardUiKey.Key: type: AgentIDCardBoundUserInterface - - key: enum.ChameleonUiKey.Key + enum.ChameleonUiKey.Key: type: ChameleonBoundUserInterface + - type: ClothingAddFaction + faction: Syndicate - type: entity name: passenger ID card @@ -918,6 +920,8 @@ - Maintenance - SyndicateAgent - NuclearOperative + - type: ClothingAddFaction + faction: Syndicate - type: entity parent: IDCardStandard @@ -952,6 +956,8 @@ tags: - NuclearOperative - SyndicateAgent + - type: ClothingAddFaction + faction: Syndicate - type: entity parent: IDCardStandard @@ -970,6 +976,8 @@ tags: - NuclearOperative - SyndicateAgent + - type: ClothingAddFaction + faction: Syndicate - type: entity parent: IDCardStandard diff --git a/Resources/Prototypes/Entities/Objects/Misc/kudzu.yml b/Resources/Prototypes/Entities/Objects/Misc/kudzu.yml index a1005004946..838715f1da5 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/kudzu.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/kudzu.yml @@ -25,8 +25,7 @@ - type: MeleeSound soundGroups: Brute: - path: - "/Audio/Weapons/slash.ogg" + path: "/Audio/Weapons/slash.ogg" - type: Sprite sprite: Objects/Misc/kudzu.rsi state: kudzu_11 @@ -38,21 +37,19 @@ fix1: hard: false density: 7 - shape: - !type:PhysShapeAabb + shape: !type:PhysShapeAabb bounds: "-0.5,-0.5,0.5,0.5" layer: - - MidImpassable + - MidImpassable - type: Damageable damageModifierSet: Wood - type: Destructible thresholds: - - trigger: - !type:DamageTrigger - damage: 10 - behaviors: - - !type:DoActsBehavior - acts: [ "Destruction" ] + - trigger: !type:DamageTrigger + damage: 10 + behaviors: + - !type:DoActsBehavior + acts: ["Destruction"] - type: Temperature heatDamage: types: @@ -69,14 +66,14 @@ Flammable: [Touch] Extinguish: [Touch] reactions: - - reagents: [WeedKiller, PlantBGone] - methods: [Touch] - effects: - - !type:HealthChange - scaleByQuantity: true - damage: - types: - Heat: 10 + - reagents: [WeedKiller, PlantBGone] + methods: [Touch] + effects: + - !type:HealthChange + scaleByQuantity: true + damage: + types: + Heat: 10 - type: AtmosExposed - type: Kudzu growthTickChance: 0.3 @@ -86,19 +83,19 @@ sprintSpeedModifier: 0.2 ignoreWhitelist: components: - - IgnoreKudzu + - IgnoreKudzu - type: Food requiredStomachs: 2 # ruminants have 4 stomachs but i dont care to give them literally 4 stomachs. 2 is good delay: 0.5 - type: FlavorProfile flavors: - - fiber + - fiber - type: SolutionContainerManager solutions: food: reagents: - - ReagentId: Nutriment - Quantity: 2 + - ReagentId: Nutriment + Quantity: 2 - type: entity id: WeakKudzu @@ -127,22 +124,22 @@ sprintSpeedModifier: 0.8 ignoreWhitelist: components: - - IgnoreKudzu + - IgnoreKudzu - type: RandomSpawner deleteSpawnerAfterSpawn: false rareChance: 0.15 offset: 0.2 chance: 0.05 prototypes: - - LightTree01 - - LightTree02 - - LightTree03 - - LightTree04 - - LightTree05 - - LightTree06 - - CrystalCyan + - LightTree01 + - LightTree02 + - LightTree03 + - LightTree04 + - LightTree05 + - LightTree06 + - CrystalCyan rarePrototypes: - - AnomalyFloraBulb + - AnomalyFloraBulb - type: entity id: KudzuFlowerAngry @@ -154,11 +151,11 @@ - type: RandomSpawner chance: 0.05 rarePrototypes: - - AnomalyFloraBulb - - AnomalyFloraBulb - - MobLuminousEntity - - MobLuminousObject - - MobLuminousPerson + - AnomalyFloraBulb + - AnomalyFloraBulb + - MobLuminousEntity + - MobLuminousObject + - MobLuminousPerson - type: entity id: FleshKudzu @@ -173,8 +170,7 @@ - type: MeleeSound soundGroups: Brute: - path: - "/Audio/Weapons/slash.ogg" + path: "/Audio/Weapons/slash.ogg" - type: Sprite sprite: Objects/Misc/fleshkudzu.rsi state: kudzu_11 @@ -186,20 +182,18 @@ fix1: hard: false density: 7 - shape: - !type:PhysShapeAabb + shape: !type:PhysShapeAabb bounds: "-0.5,-0.5,0.5,0.5" layer: - - MidImpassable + - MidImpassable - type: Damageable - type: Destructible thresholds: - - trigger: - !type:DamageTrigger - damage: 40 - behaviors: - - !type:DoActsBehavior - acts: [ "Destruction" ] + - trigger: !type:DamageTrigger + damage: 40 + behaviors: + - !type:DoActsBehavior + acts: ["Destruction"] - type: DamageContacts damage: types: @@ -207,7 +201,7 @@ Piercing: 1.5 ignoreWhitelist: tags: - - Flesh + - Flesh - type: Kudzu growthTickChance: 0.1 spreadChance: 0.4 @@ -232,23 +226,23 @@ - type: Flammable fireSpread: true damage: - types: - Heat: 3 + types: + Heat: 3 - type: AtmosExposed - type: SpeedModifierContacts walkSpeedModifier: 0.3 sprintSpeedModifier: 0.3 ignoreWhitelist: tags: - - Flesh + - Flesh - type: Food # delightfully devilish ! delay: 0.5 - type: SolutionContainerManager solutions: food: reagents: - - ReagentId: Protein - Quantity: 2 + - ReagentId: Protein + Quantity: 2 - type: Respirator damage: types: @@ -260,7 +254,7 @@ - type: entity name: dark haze id: ShadowKudzu - parent: [ BaseKudzu, BaseShadow ] + parent: [BaseKudzu, BaseShadow] components: - type: Physics canCollide: false @@ -269,9 +263,9 @@ drawdepth: Effects sprite: Effects/spookysmoke.rsi layers: - - state: spookysmoke - color: "#793a80dd" - map: [base] + - state: spookysmoke + color: "#793a80dd" + map: [base] - type: Kudzu growthTickChance: 0.2 spreadChance: 0.99 @@ -281,10 +275,10 @@ offset: 0.2 chance: 0.45 prototypes: - - ShadowBasaltRandom + - ShadowBasaltRandom rarePrototypes: - - ShadowPortal - - ShadowKudzuLootSpawner + - ShadowPortal + - ShadowKudzuLootSpawner - type: Tag tags: - HideContextMenu @@ -292,10 +286,10 @@ - type: OptionsVisualizer visuals: base: - - options: Default - data: { state: spookysmoke } - - options: ReducedMotion - data: { state: spookysmoke_static } + - options: Default + data: { state: spookysmoke } + - options: ReducedMotion + data: { state: spookysmoke_static } - type: entity name: Haze @@ -304,3 +298,18 @@ components: - type: Kudzu spreadChance: 0 #appears during pulsation. It shouldnt spreading. + +- type: entity + name: Shadowkin Haze + id: ShadowkinShadow + parent: ShadowKudzuWeak + components: + - type: RandomSpawner + deleteSpawnerAfterSpawn: false + rareChance: 0 + offset: 0.2 + chance: 0.45 + prototypes: + - ShadowBasaltRandom + - type: TimedDespawn + lifetime: 30 \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Objects/Misc/land_mine.yml b/Resources/Prototypes/Entities/Objects/Misc/land_mine.yml index 71e5a72652c..9d9de4db8c4 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/land_mine.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/land_mine.yml @@ -40,6 +40,9 @@ params: maxDistance: 10 - type: StepTrigger + triggerGroups: + types: + - Landmine requiredTriggeredSpeed: 0 stepOn: true diff --git a/Resources/Prototypes/Entities/Objects/Misc/machine_parts.yml b/Resources/Prototypes/Entities/Objects/Misc/machine_parts.yml index 341acb52f0b..7cfb4a7a6eb 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/machine_parts.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/machine_parts.yml @@ -69,3 +69,153 @@ - type: ReverseEngineering # Nyano recipes: - MatterBinStockPart + +# Rating 2 + +- type: entity + id: AdvancedCapacitorStockPart + name: advanced capacitor + parent: CapacitorStockPart + description: An advanced capacitor used in the construction of a variety of devices. + suffix: Rating 2 + components: + - type: Sprite + state: adv_capacitor + - type: MachinePart + rating: 2 + - type: ReverseEngineering # Nyano + difficulty: 2 + recipes: + - AdvancedCapacitorStockPart + +- type: entity + id: NanoManipulatorStockPart + name: advanced manipulator + parent: MicroManipulatorStockPart + description: An advanced manipulator used in the construction of a variety of devices. + suffix: Rating 2 + components: + - type: Sprite + state: nano_mani + - type: MachinePart + rating: 2 + - type: ReverseEngineering # Nyano + difficulty: 2 + recipes: + - NanoManipulatorStockPart + +- type: entity + id: AdvancedMatterBinStockPart + name: advanced matter bin + parent: MatterBinStockPart + description: An advanced matter bin used in the construction of a variety of devices. + suffix: Rating 2 + components: + - type: Sprite + state: advanced_matter_bin + - type: MachinePart + rating: 2 + - type: ReverseEngineering # Nyano + difficulty: 2 + recipes: + - AdvancedMatterBinStockPart + +# Rating 3 + +- type: entity + id: SuperCapacitorStockPart + name: super capacitor + parent: CapacitorStockPart + description: A super capacitor used in the construction of a variety of devices. + suffix: Rating 3 + components: + - type: Sprite + state: super_capacitor + - type: MachinePart + rating: 3 + - type: ReverseEngineering # Nyano + difficulty: 3 + recipes: + - SuperCapacitorStockPart + +- type: entity + id: PicoManipulatorStockPart + name: super manipulator + parent: MicroManipulatorStockPart + description: A super manipulator used in the construction of a variety of devices. + suffix: Rating 3 + components: + - type: Sprite + state: pico_mani + - type: MachinePart + rating: 3 + - type: ReverseEngineering # Nyano + difficulty: 3 + recipes: + - PicoManipulatorStockPart + +- type: entity + id: SuperMatterBinStockPart + name: super matter bin + parent: MatterBinStockPart + description: A super matter bin used in the construction of a variety of devices. + suffix: Rating 3 + components: + - type: Sprite + state: super_matter_bin + - type: MachinePart + rating: 3 + - type: ReverseEngineering # Nyano + difficulty: 3 + recipes: + - SuperMatterBinStockPart + +# Rating 4 + +- type: entity + id: BluespaceCapacitorStockPart + name: bluespace capacitor + parent: CapacitorStockPart + description: A bluespace capacitor used in the construction of a variety of devices. + suffix: Rating 4 + components: + - type: Sprite + state: quadratic_capacitor + - type: MachinePart + rating: 4 + - type: ReverseEngineering # Nyano + difficulty: 4 + recipes: + - BluespaceCapacitorStockPart + +- type: entity + id: BluespaceManipulatorStockPart + name: bluespace manipulator + parent: MicroManipulatorStockPart + description: A bluespace manipulator used in the construction of a variety of devices. + suffix: Rating 4 + components: + - type: Sprite + state: femto_mani + - type: MachinePart + rating: 4 + - type: ReverseEngineering # Nyano + difficulty: 4 + recipes: + - BluespaceManipulatorStockPart + +- type: entity + id: BluespaceMatterBinStockPart + name: bluespace matter bin + parent: MatterBinStockPart + description: A bluespace matter bin used in the construction of a variety of devices. + suffix: Rating 4 + components: + - type: Sprite + state: bluespace_matter_bin + - type: MachinePart + rating: 4 + - type: ReverseEngineering # Nyano + difficulty: 4 + recipes: + - BluespaceMatterBinStockPart diff --git a/Resources/Prototypes/Entities/Objects/Misc/mail_capsule.yml b/Resources/Prototypes/Entities/Objects/Misc/mail_capsule.yml new file mode 100644 index 00000000000..bd6c9057cd0 --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Misc/mail_capsule.yml @@ -0,0 +1,139 @@ +- type: entity + name: mail capsule + suffix: Primed + id: MailCapsulePrimed + parent: BaseItem + components: + - type: ThrowingAngle + angle: 180 + - type: EmbeddableProjectile + minimumSpeed: 1 + removalTime: 0.1 + - type: Tag + tags: + - MailCapsule + - Trash + - type: Sprite + sprite: Objects/Misc/mail_capsule.rsi + layers: + - state: icon-empty + - type: ItemSlots + slots: + mail_slot: + insertVerbText: Put in Mail + ejectVerbText: Take out Mail + name: Mail + startingItem: null + whitelist: + tags: + - Book + - Document + - Mail + components: + - Mail + - Paper + - HyperlinkBook + insertOnInteract: true + priority: 3 + food_slot: + insertVerbText: Put in Food + ejectVerbText: Take out Food + name: Food + startingItem: null + whitelist: + components: + - Food + insertOnInteract: true + priority: 2 + cash_slot: + insertVerbText: Put in Cash + ejectVerbText: Take out Cash + name: Cash + startingItem: null + whitelist: + components: + - Currency + insertOnInteract: true + priority: 1 + - type: ContainerContainer + containers: + storagebase: !type:Container + showEnts: False + occludes: true + ents: [] + mail_slot: !type:ContainerSlot + showEnts: False + occludes: true + ent: null + food_slot: !type:ContainerSlot + showEnts: False + occludes: true + ent: null + cash_slot: !type:ContainerSlot + showEnts: False + occludes: true + ent: null + - type: Appearance + - type: ItemMapper + mapLayers: + icon-food: + whitelist: + components: + - Food + icon-cash: + whitelist: + components: + - Currency + icon-mail: + whitelist: + tags: + - Book + - Document + - Mail + components: + - Mail + - Paper + - HyperlinkBook + sprite: Objects/Misc/mail_capsule.rsi + - type: Dumpable + - type: Damageable + damageContainer: Inorganic + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 20 #excess damage avoids cost of spawning entities. + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - trigger: + !type:DamageTrigger + damage: 10 + behaviors: + - !type:PlaySoundBehavior + sound: + collection: GlassBreak + - !type:EmptyAllContainersBehaviour + - !type:DoActsBehavior + acts: [ "Destruction" ] + - type: DamageOnLand + damage: + types: + Blunt: 9.5 + +- type: entity + name: mail capsule box + parent: BoxCardboard + id: BoxMailCapsulePrimed + description: A box of primed mail capsules. + components: + - type: Storage + grid: + - 0,0,4,3 + - type: StorageFill + contents: + - id: MailCapsulePrimed + amount: 10 + - type: Sprite + layers: + - state: box diff --git a/Resources/Prototypes/Entities/Objects/Misc/medalcase.yml b/Resources/Prototypes/Entities/Objects/Misc/medalcase.yml index a421c1e9e99..35000b3fba1 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/medalcase.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/medalcase.yml @@ -17,6 +17,9 @@ - type: Storage grid: - 0,0,7,1 + whitelist: + tags: + - Medal - type: StorageFill contents: - id: ClothingNeckGoldmedal diff --git a/Resources/Prototypes/Entities/Objects/Misc/paper.yml b/Resources/Prototypes/Entities/Objects/Misc/paper.yml index 873a71eb04f..c72f7a2e91e 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/paper.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/paper.yml @@ -18,12 +18,11 @@ - type: PaperLabelType - type: ActivatableUI key: enum.PaperUiKey.Key - closeOnHandDeselect: false requireHands: false - type: UserInterface interfaces: - - key: enum.PaperUiKey.Key - type: PaperBoundUserInterface + enum.PaperUiKey.Key: + type: PaperBoundUserInterface - type: Item size: Tiny - type: Tag @@ -32,6 +31,7 @@ - Trash - Paper - type: Appearance + - type: FaxableObject - type: PaperVisuals - type: Flammable fireSpread: true @@ -117,9 +117,9 @@ - state: paper_stamp-generic map: ["enum.PaperVisualLayers.Stamp"] visible: false - # - type: GuideHelp - # guides: - # - ArtifactReports + - type: GuideHelp + guides: + - ArtifactReports - type: PaperVisuals headerImagePath: "/Textures/Interface/Paper/paper_heading_artifact_analyzer.svg.96dpi.png" headerMargin: 0.0, 0.0, 0.0, 16.0 @@ -159,6 +159,16 @@ backgroundPatchMargin: 16.0, 16.0, 16.0, 16.0 contentMargin: 32.0, 16.0, 32.0, 0.0 +- type: entity + name: note + description: A piece of white paper. + id: PaperWrittenPunpunNote + parent: PaperCaptainsThoughts + suffix: Punpun Note + components: + - type: Paper + content: I, Punpun, invoke my right to have all of my clones on the NT family vacation to the meat packaging plant one out of every 15 shifts. + - type: entity name: cargo invoice parent: Paper @@ -221,9 +231,9 @@ - type: CargoBountyLabel - type: StaticPrice price: 0 - # - type: GuideHelp - # guides: - # - CargoBounties + - type: GuideHelp + guides: + - CargoBounties - type: entity name: character sheet @@ -270,8 +280,8 @@ key: enum.PaperUiKey.Key - type: UserInterface interfaces: - - key: enum.PaperUiKey.Key - type: PaperBoundUserInterface + enum.PaperUiKey.Key: + type: PaperBoundUserInterface - type: entity parent: Paper @@ -714,10 +724,10 @@ key: enum.CargoConsoleUiKey.Orders - type: UserInterface interfaces: - - key: enum.CargoConsoleUiKey.Orders - type: CargoOrderConsoleBoundUserInterface - - key: enum.StorageUiKey.Key - type: StorageBoundUserInterface + enum.CargoConsoleUiKey.Orders: + type: CargoOrderConsoleBoundUserInterface + enum.StorageUiKey.Key: + type: StorageBoundUserInterface - type: MeleeWeapon wideAnimationRotation: 180 damage: diff --git a/Resources/Prototypes/Entities/Objects/Misc/pet_carrier.yml b/Resources/Prototypes/Entities/Objects/Misc/pet_carrier.yml index 84c9c7c7520..b7f296cbac7 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/pet_carrier.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/pet_carrier.yml @@ -30,7 +30,7 @@ radius: 0.45 density: 25 mask: - - SmallMobMask + - ItemMask layer: - MachineLayer - type: EntityStorage diff --git a/Resources/Prototypes/Entities/Objects/Misc/spider_web.yml b/Resources/Prototypes/Entities/Objects/Misc/spider_web.yml index 9561fa3538f..68ba94b578d 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/spider_web.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/spider_web.yml @@ -76,6 +76,9 @@ ignoreWhitelist: components: - IgnoreSpiderWeb + - type: Tag + tags: + - ArachneWeb - type: entity id: SpiderWebClown @@ -111,6 +114,9 @@ paralyzeTime: 2 launchForwardsMultiplier: 1.5 - type: StepTrigger + triggerGroups: + types: + - SlipTile intersectRatio: 0.2 - type: Physics - type: Fixtures diff --git a/Resources/Prototypes/Entities/Objects/Misc/subdermal_implants.yml b/Resources/Prototypes/Entities/Objects/Misc/subdermal_implants.yml index 2336945f171..a0f5e254d5f 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/subdermal_implants.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/subdermal_implants.yml @@ -126,7 +126,7 @@ ents: [ ] - type: UserInterface interfaces: - - key: enum.StorageUiKey.Key + enum.StorageUiKey.Key: type: StorageBoundUserInterface - type: entity @@ -160,8 +160,8 @@ Telecrystal: 0 - type: UserInterface interfaces: - - key: enum.StoreUiKey.Key - type: StoreBoundUserInterface + enum.StoreUiKey.Key: + type: StoreBoundUserInterface - type: entity parent: BaseSubdermalImplant diff --git a/Resources/Prototypes/Entities/Objects/Misc/torch.yml b/Resources/Prototypes/Entities/Objects/Misc/torch.yml index 0efb753e0da..50e8f658906 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/torch.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/torch.yml @@ -25,6 +25,8 @@ color: "#FFFFFF" visible: false shader: unshaded + - map: [ enum.ExpendableLightVisualLayers.Overlay ] + state: torch_nocloth - type: Icon sprite: Objects/Misc/torch.rsi state: icon diff --git a/Resources/Prototypes/Entities/Objects/Misc/translator_implanters.yml b/Resources/Prototypes/Entities/Objects/Misc/translator_implanters.yml index 8b5b262ff8a..53da8e72a57 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/translator_implanters.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/translator_implanters.yml @@ -10,7 +10,7 @@ name: basic common translator implanter components: - type: Implanter - implant: BasicGalacticCommonTranslatorImplant + implant: BasicTauCetiBasicTranslatorImplant - type: entity id: AdvancedGalaticCommonTranslatorImplanter @@ -18,7 +18,7 @@ name: advanced common translator implanter components: - type: Implanter - implant: GalacticCommonTranslatorImplant + implant: TauCetiBasicTranslatorImplant - type: entity id: BubblishTranslatorImplanter @@ -37,9 +37,9 @@ implant: NekomimeticTranslatorImplant - type: entity - id: DraconicTranslatorImplanter + id: DraconicTranslatorImplanter # Intended for Admins Only, this item is for lore reasons not obtainable. parent: [ BaseTranslatorImplanter ] - name: draconic translator implant + name: unathi translator implant components: - type: Implanter implant: DraconicTranslatorImplant @@ -75,3 +75,19 @@ components: - type: Implanter implant: MofficTranslatorImplant + +- type: entity + id: ValyrianStandardTranslatorImplanter + parent: [ BaseTranslatorImplanter ] + name: valyrian standard translator implant + components: + - type: Implanter + implant: ValyrianStandardTranslatorImplant + +- type: entity + id: AzazibaTranslatorImplanter + parent: [ BaseTranslatorImplanter ] + name: azaziba translator implant + components: + - type: Implanter + implant: AzazibaTranslatorImplant \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Objects/Misc/utensils.yml b/Resources/Prototypes/Entities/Objects/Misc/utensils.yml index 4250669581f..86667f094fd 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/utensils.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/utensils.yml @@ -120,3 +120,28 @@ - Plastic - Trash - Knife + +- type: entity + parent: UtensilBase + id: BarSpoon + name: bar spoon + description: Your personal helper to mix drinks and changes lives. + components: + - type: Tag + tags: + - Metal + - type: Sprite + state: bar_spoon + - type: Item + heldPrefix: spoon + - type: Utensil + types: + - Spoon + - type: MeleeWeapon + wideAnimationRotation: 180 + attackRate: 2 + damage: + types: + Blunt: 2 + - type: Shovel + speedModifier: 0.05 # nah diff --git a/Resources/Prototypes/Entities/Objects/Power/portable_recharger.yml b/Resources/Prototypes/Entities/Objects/Power/portable_recharger.yml new file mode 100644 index 00000000000..e3213ac8c9e --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Power/portable_recharger.yml @@ -0,0 +1,38 @@ +- type: entity + parent: Clothing + id: PortableRecharger + name: portable recharger + description: High-tech recharger adapted for portability + components: + - type: Item + size: Huge + - type: Sprite + sprite: Objects/Power/portable_recharger.rsi + state: charging + - type: Clothing + equippedPrefix: charging + quickEquip: false + slots: + - back + - type: Charger + slotId: charger_slot + portable: true + - type: PowerChargerVisuals + - type: ApcPowerReceiver + needsPower: false + powerLoad: 0 + - type: StaticPrice + price: 500 + - type: Tag + tags: [] # ignore "WhitelistChameleon" tag + - type: ContainerContainer + containers: + charger_slot: !type:ContainerSlot + - type: ItemSlots + slots: + charger_slot: + ejectOnInteract: true + whitelist: + components: + - HitscanBatteryAmmoProvider + - ProjectileBatteryAmmoProvider diff --git a/Resources/Prototypes/Entities/Objects/Shields/shields.yml b/Resources/Prototypes/Entities/Objects/Shields/shields.yml index b794e42ff7d..e7ebb1b98d4 100644 --- a/Resources/Prototypes/Entities/Objects/Shields/shields.yml +++ b/Resources/Prototypes/Entities/Objects/Shields/shields.yml @@ -313,7 +313,7 @@ name: mirror shield parent: BaseShield id: MirrorShield - description: Eerily glows red... you hear the geometer whispering + description: Glows an eerie red. You hear the Geometer whispering... components: - type: Sprite state: mirror-icon @@ -321,6 +321,7 @@ 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. @@ -408,6 +409,7 @@ - type: Reflect enabled: false reflectProb: 0.95 + innate: true reflects: - Energy - type: Blocking diff --git a/Resources/Prototypes/Entities/Objects/Specific/Cargo/cargo_pallet.yml b/Resources/Prototypes/Entities/Objects/Specific/Cargo/cargo_pallet.yml index 5c9cb4805ac..604afd01f56 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Cargo/cargo_pallet.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Cargo/cargo_pallet.yml @@ -1,7 +1,7 @@ - type: entity id: CargoPallet name: cargo pallet - description: Designates valid items to sell to CentCom when a shuttle is recalled. + description: Common fixture of logistics and cargo. Subtle reminder where crates go during transport to avoid bruised shins. parent: BaseStructure components: - type: InteractionOutline @@ -58,17 +58,20 @@ - type: entity id: CargoPalletSell name: cargo selling pallet - description: Designates valid items to sell with a selling computer, or to CentCom when a shuttle is recalled. + description: Designates valid items to sell. parent: CargoPallet components: - type: CargoPallet palletType: sell - type: Sprite drawdepth: FloorTiles - layers: - - sprite: Structures/cargo_pallets.rsi - state: cargo_pallet_sell - + sprite: Structures/cargo_pallets.rsi + - type: Icon + sprite: Structures/cargo_pallets.rsi + state: cargo_pallet_sell + - type: IconSmooth + key: cargo_pallet_sell + base: cargo_pallet_sell_ - type: entity id: CargoPalletBuy @@ -80,7 +83,10 @@ palletType: buy - type: Sprite drawdepth: FloorTiles - layers: - - sprite: Structures/cargo_pallets.rsi - state: cargo_pallet_buy - + sprite: Structures/cargo_pallets.rsi + - type: Icon + sprite: Structures/cargo_pallets.rsi + state: cargo_pallet_buy + - type: IconSmooth + key: cargo_pallet_buy + base: cargo_pallet_buy_ diff --git a/Resources/Prototypes/Entities/Objects/Specific/Chapel/bibles.yml b/Resources/Prototypes/Entities/Objects/Specific/Chapel/bibles.yml index 9ab53cebc96..23ce5a36ee2 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Chapel/bibles.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Chapel/bibles.yml @@ -20,8 +20,6 @@ Burn: 10 - type: Prayable bibleUserOnly: true - - type: Summonable - specialItem: SpawnPointGhostRemilia - type: ReactionMixer mixMessage: "bible-mixing-success" reactionTypes: @@ -40,8 +38,8 @@ - 0,0,0,1 - type: UserInterface interfaces: - - key: enum.StorageUiKey.Key - type: StorageBoundUserInterface + enum.StorageUiKey.Key: + type: StorageBoundUserInterface - type: MeleeWeapon # Nyanotrasen - Bibles do Holy damage damage: types: @@ -50,7 +48,7 @@ heavyRateModifier: 0.8 heavyDamageBaseModifier: 1 heavyStaminaCost: 5 - maxTargets: 3 + maxTargets: 4 - type: Tag tags: - Book diff --git a/Resources/Prototypes/Entities/Objects/Specific/Chapel/urn.yml b/Resources/Prototypes/Entities/Objects/Specific/Chapel/urn.yml index c7788600846..55a58ef18a1 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Chapel/urn.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Chapel/urn.yml @@ -9,8 +9,8 @@ - 0,0,0,1 - type: UserInterface interfaces: - - key: enum.StorageUiKey.Key - type: StorageBoundUserInterface + enum.StorageUiKey.Key: + type: StorageBoundUserInterface - type: Sprite sprite: Objects/Specific/Chapel/chaplainurn.rsi state: icon diff --git a/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/leaves.yml b/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/leaves.yml index b847416211d..c26ba925e0d 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/leaves.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/leaves.yml @@ -65,7 +65,101 @@ - Smokable - type: Item size: Tiny + +- type: entity + name: rainbow cannabis leaves + parent: LeavesCannabis + id: LeavesCannabisRainbow + description: "Is it supposed to be glowing like that...?" + components: + - type: Sprite + sprite: Objects/Specific/Hydroponics/rainbow_cannabis.rsi + - type: Produce + seedId: rainbowCannabis + - type: PointLight + radius: 1.5 + energy: 2 + - type: RgbLightController + cycleRate: 0.6 + - type: SolutionContainerManager + solutions: + food: + reagents: + - ReagentId: SpaceDrugs + Quantity: 3 + - ReagentId: Lipolicide + Quantity: 3 + - ReagentId: MindbreakerToxin + Quantity: 2 + - ReagentId: Happiness + Quantity: 2 +# - ReagentId: ColorfulReagent +# Quantity: 1 + - ReagentId: Psicodine + Quantity: 0.6 +- type: entity + name: dried rainbow cannabis leaves + parent: LeavesCannabisDried + id: LeavesCannabisRainbowDried + description: "Dried rainbow cannabis leaves, ready to be ground." + components: + - type: Stack + stackType: LeavesCannabisRainbowDried + count: 1 + - type: SolutionContainerManager + solutions: + food: + maxVol: 8.5 #fuck you saveload test fail + reagents: + - ReagentId: SpaceDrugs + Quantity: 2.4 + - ReagentId: Lipolicide + Quantity: 2.4 + - ReagentId: MindbreakerToxin + Quantity: 1.6 + - ReagentId: Happiness + Quantity: 1.6 +# - ReagentId: ColorfulReagent +# Quantity: 0.8 + - ReagentId: Psicodine + Quantity: 0.48 + - type: Sprite + sprite: Objects/Specific/Hydroponics/rainbow_cannabis.rsi + state: dried + +- type: entity + name: ground rainbow cannabis + parent: GroundCannabis + id: GroundCannabisRainbow + description: "Ground rainbow cannabis, ready to take you on a trip." + components: + - type: Stack + stackType: GroundCannabisRainbow + count: 1 + - type: SolutionContainerManager + solutions: + food: + reagents: + - ReagentId: SpaceDrugs + Quantity: 4 + - ReagentId: Lipolicide + Quantity: 4 + - ReagentId: MindbreakerToxin + Quantity: 2.66 + - ReagentId: Happiness + Quantity: 2.66 +# - ReagentId: ColorfulReagent +# Quantity: 1.33 + - ReagentId: Psicodine + Quantity: 0.8 + - type: Sprite + sprite: Objects/Specific/Hydroponics/rainbow_cannabis.rsi + state: powderpile_rainbow + color: white + - type: Construction + graph: smokeableGroundCannabisRainbow + node: groundRainbow - type: entity name: tobacco leaves diff --git a/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/seeds.yml b/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/seeds.yml index 2b232d643d3..92aa22a8bae 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/seeds.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/seeds.yml @@ -285,6 +285,17 @@ - type: Sprite sprite: Objects/Specific/Hydroponics/cannabis.rsi +- type: entity + parent: SeedBase + name: packet of rainbow cannabis seeds + description: "These seeds grow into rainbow weed. Groovy... and also highly addictive." + id: RainbowCannabisSeeds + components: + - type: Seed + seedId: rainbowCannabis + - type: Sprite + sprite: Objects/Specific/Hydroponics/rainbow_cannabis.rsi + - type: entity parent: SeedBase name: packet of nettle seeds @@ -571,3 +582,13 @@ seedId: cotton - type: Sprite sprite: Objects/Specific/Hydroponics/cotton.rsi + +- type: entity + parent: SeedBase + name: packet of pyrotton seeds + id: PyrottonSeeds + components: + - type: Seed + seedId: pyrotton + - type: Sprite + sprite: Objects/Specific/Hydroponics/pyrotton.rsi diff --git a/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/tools.yml b/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/tools.yml index 37b8daddc27..c43cce1f8b1 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/tools.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/tools.yml @@ -21,7 +21,6 @@ heavyRateModifier: 1 heavyRangeModifier: 1 heavyDamageBaseModifier: 1.2 - heavyStaminaCost: 5 maxTargets: 5 angle: 100 - type: Item @@ -48,7 +47,6 @@ heavyRateModifier: 0.9 heavyRangeModifier: 1.25 heavyDamageBaseModifier: 1.2 - heavyStaminaCost: 5 maxTargets: 1 angle: 20 - type: Item @@ -103,7 +101,7 @@ wideAnimationRotation: 135 swingLeft: true attackRate: 1.25 - range: 1.25 + range: 1.4 damage: types: Slash: 10 diff --git a/Resources/Prototypes/Entities/Objects/Specific/Janitorial/janitor.yml b/Resources/Prototypes/Entities/Objects/Specific/Janitorial/janitor.yml index adfafbb9cc4..a3a26299bf3 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Janitorial/janitor.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Janitorial/janitor.yml @@ -3,7 +3,6 @@ name: mop id: MopItem description: A mop that can't be stopped, viscera cleanup detail awaits. - noSpawn: true components: - type: Sprite sprite: Objects/Specific/Janitorial/mop.rsi @@ -17,7 +16,7 @@ heavyRateModifier: 0.8 heavyRangeModifier: 1.25 heavyDamageBaseModifier: 1.25 - heavyStaminaCost: 10 + heavyStaminaCost: 7.5 maxTargets: 2 angle: 180 soundHit: @@ -39,19 +38,21 @@ maxVol: 100 - type: UseDelay delay: 1 + - type: PhysicalComposition + materialComposition: + Plastic: 50 - type: Tag tags: - Mop - MopBasic - # - type: GuideHelp - # guides: - # - Janitorial + - type: GuideHelp + guides: + - Janitorial - type: entity parent: BaseItem name: advanced mop id: AdvMopItem - noSpawn: true description: Motorized mop that has a bigger reservoir and quickly replaces reagents inside with water. Automatic Clown Countermeasure not included. components: - type: Sprite @@ -66,7 +67,7 @@ heavyRateModifier: 0.8 heavyRangeModifier: 1.25 heavyDamageBaseModifier: 1.25 - heavyStaminaCost: 10 + heavyStaminaCost: 7.5 maxTargets: 2 angle: 180 soundHit: @@ -121,6 +122,9 @@ coefficients: Blunt: 0.95 Slash: 0.95 + - type: PhysicalComposition + materialComposition: + Plastic: 50 - type: Tag tags: - WetFloorSign @@ -131,7 +135,6 @@ suffix: Explosive parent: WetFloorSign id: WetFloorSignMineExplosive - noSpawn: true components: - type: StepTrigger intersectRatio: 0.2 @@ -197,9 +200,9 @@ - type: Item sprite: Objects/Specific/Janitorial/plunger.rsi heldPrefix: plunger - # - type: GuideHelp - # guides: - # - Janitorial + - type: GuideHelp + guides: + - Janitorial - type: Clothing sprite: Objects/Specific/Janitorial/plunger.rsi slots: diff --git a/Resources/Prototypes/Entities/Objects/Specific/Janitorial/soap.yml b/Resources/Prototypes/Entities/Objects/Specific/Janitorial/soap.yml index 5678de6bafc..5fe88f8d0cf 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Janitorial/soap.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Janitorial/soap.yml @@ -24,6 +24,9 @@ paralyzeTime: 2 launchForwardsMultiplier: 1.5 - type: StepTrigger + triggerGroups: + types: + - SlipEntity intersectRatio: 0.2 - type: CollisionWake enabled: false @@ -157,6 +160,9 @@ paralyzeTime: 5 launchForwardsMultiplier: 2.5 - type: StepTrigger + triggerGroups: + types: + - SlipEntity intersectRatio: 0.04 - type: Item heldPrefix: syndie @@ -198,6 +204,9 @@ - type: Slippery paralyzeTime: 2 - type: StepTrigger + triggerGroups: + types: + - SlipEntity - type: Item heldPrefix: gibs - type: FlavorProfile diff --git a/Resources/Prototypes/Entities/Objects/Specific/Janitorial/spray.yml b/Resources/Prototypes/Entities/Objects/Specific/Janitorial/spray.yml index 0e19c03deef..cddf7f6075a 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Janitorial/spray.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Janitorial/spray.yml @@ -5,6 +5,12 @@ suffix: Empty description: A spray bottle with an unscrewable top. components: + - type: Drink + solution: spray + ignoreEmpty: true + useSound: + path: /Audio/Effects/spray3.ogg + transferAmount: 10 - type: Tag tags: - Spray @@ -24,6 +30,8 @@ solution: spray - type: SolutionTransfer canChangeTransferAmount: true + - type: SolutionItemStatus + solution: spray - type: UseDelay - type: Spray transferAmount: 10 diff --git a/Resources/Prototypes/Entities/Objects/Specific/Janitorial/trashbag.yml b/Resources/Prototypes/Entities/Objects/Specific/Janitorial/trashbag.yml index f802ae1c5c3..9927d836baa 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Janitorial/trashbag.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Janitorial/trashbag.yml @@ -22,6 +22,8 @@ tags: - Cartridge - Trash + - type: UseDelay + delay: 0.5 - type: Tag tags: - TrashBag diff --git a/Resources/Prototypes/Entities/Objects/Specific/Kitchen/foodcarts.yml b/Resources/Prototypes/Entities/Objects/Specific/Kitchen/foodcarts.yml index 0894d6a7547..ca74dca8a7b 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Kitchen/foodcarts.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Kitchen/foodcarts.yml @@ -44,8 +44,8 @@ - type: Appearance - type: UserInterface interfaces: - - key: enum.StorageUiKey.Key - type: StorageBoundUserInterface + enum.StorageUiKey.Key: + type: StorageBoundUserInterface - type: Storage maxItemSize: Normal grid: diff --git a/Resources/Prototypes/Entities/Objects/Specific/Mail/Items/boxes.yml b/Resources/Prototypes/Entities/Objects/Specific/Mail/Items/boxes.yml new file mode 100644 index 00000000000..536736fc904 --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Specific/Mail/Items/boxes.yml @@ -0,0 +1,212 @@ +# Mail-only boxes. If/when something uses these outside of the mail, move the entry into Catalog/Fills. + +- type: entity + name: scented soap sampler pack + parent: BoxCardboard + id: BoxSoapsAssorted + description: A box of various scented soaps. Ooh, lavender. + components: + - type: StorageFill + contents: + - id: SoapNT + amount: 1 + - id: Soap + amount: 1 + - id: SoapHomemade + amount: 1 + - id: SoapDeluxe + amount: 1 + - type: Storage + maxItemSize: Normal + grid: + - 0,0,3,1 + whitelist: + tags: + - Soap + - type: Sprite + layers: + - state: box + +- type: entity + name: scented soap sampler pack + parent: BoxCardboard + id: BoxSoapsAssortedOmega + description: A box of various scented soaps. Ooh, bluespace. + components: + - type: StorageFill + contents: + - id: SoapNT + amount: 1 + - id: Soap + amount: 1 + - id: SoapOmega + amount: 1 + - id: SoapDeluxe + amount: 1 + - type: Storage + maxItemSize: Normal + grid: + - 0,0,3,1 + whitelist: + tags: + - Soap + - type: Sprite + layers: + - state: box + +- type: entity + name: Build-a-Buddy kit + suffix: Human + parent: BoxHug + id: BoxBuildABuddyHuman + description: "\"Henry the Human\" Build-a-Buddy kit. Some assembly required." + components: + - type: StorageFill + contents: + - id: HeadHuman + amount: 1 + - id: TorsoHuman + amount: 1 + - id: LeftArmHuman + amount: 1 + - id: RightArmHuman + amount: 1 + - id: LeftHandHuman + amount: 1 + - id: RightHandHuman + amount: 1 + - id: LeftLegHuman + amount: 1 + - id: RightLegHuman + amount: 1 + - id: LeftFootHuman + amount: 1 + - id: RightFootHuman + amount: 1 + - type: Storage + grid: + - 0,0,4,3 + whitelist: + components: + - BodyPart + +# DeltaV - Goblins Aren't Real +#- type: entity +# name: Build-a-Buddy kit +# suffix: Goblin +# parent: BoxBuildABuddyHuman +# id: BoxBuildABuddyGoblin +# description: "\"Greta the Goblin\" Build-a-Buddy kit. Some assembly required." +# components: +# - type: StorageFill +# contents: +# - id: HeadGoblin +# amount: 1 +# - id: TorsoGoblin +# amount: 1 +# - id: LeftArmGoblin +# amount: 1 +# - id: RightArmGoblin +# amount: 1 +# - id: LeftHandGoblin +# amount: 1 +# - id: RightHandGoblin +# amount: 1 +# - id: LeftLegGoblin +# amount: 1 +# - id: RightLegGoblin +# amount: 1 +# - id: LeftFootGoblin +# amount: 1 +# - id: RightFootGoblin +# amount: 1 + +- type: entity + name: Build-a-Buddy kit + suffix: Reptilian + parent: BoxBuildABuddyHuman + id: BoxBuildABuddyReptilian + description: "\"Randy the Reptilian\" Build-a-Buddy kit. Some assembly required." + components: + - type: StorageFill + contents: + - id: HeadReptilian + amount: 1 + - id: TorsoReptilian + amount: 1 + - id: LeftArmReptilian + amount: 1 + - id: RightArmReptilian + amount: 1 + - id: LeftHandReptilian + amount: 1 + - id: RightHandReptilian + amount: 1 + - id: LeftLegReptilian + amount: 1 + - id: RightLegReptilian + amount: 1 + - id: LeftFootReptilian + amount: 1 + - id: RightFootReptilian + amount: 1 + +- type: entity + name: Build-a-Buddy kit + suffix: Slime + parent: BoxBuildABuddyHuman + id: BoxBuildABuddySlime + description: "\"Steven the Slime\" Build-a-Buddy kit. Some assembly required." + components: + - type: StorageFill + contents: + - id: HeadSlime + amount: 1 + - id: TorsoSlime + amount: 1 + - id: LeftArmSlime + amount: 1 + - id: RightArmSlime + amount: 1 + - id: LeftHandSlime + amount: 1 + - id: RightHandSlime + amount: 1 + - id: LeftLegSlime + amount: 1 + - id: RightLegSlime + amount: 1 + - id: LeftFootSlime + amount: 1 + - id: RightFootSlime + amount: 1 + +- type: entity + name: Build-a-Buddy kit + suffix: Vulpkanin + parent: BoxBuildABuddyHuman + id: BoxBuildABuddyVulpkanin + description: "\"Valerie the Vulpkanin\" Build-a-Buddy kit. Some assembly required." + components: + - type: StorageFill + contents: + - id: HeadVulpkanin + amount: 1 + - id: TorsoVulpkanin + amount: 1 + - id: LeftArmVulpkanin + amount: 1 + - id: RightArmVulpkanin + amount: 1 + - id: LeftHandVulpkanin + amount: 1 + - id: RightHandVulpkanin + amount: 1 + - id: LeftLegVulpkanin + amount: 1 + - id: RightLegVulpkanin + amount: 1 + - id: LeftFootVulpkanin + amount: 1 + - id: RightFootVulpkanin + amount: 1 diff --git a/Resources/Prototypes/Entities/Objects/Specific/Mail/Items/misc.yml b/Resources/Prototypes/Entities/Objects/Specific/Mail/Items/misc.yml new file mode 100644 index 00000000000..6f1c86e00ba --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Specific/Mail/Items/misc.yml @@ -0,0 +1,117 @@ +# Mail-only items. If/when these get used for anything else, please move them to another folder. +# Pranks: admin items or effects put into an envelope, released when opened or damaged. +- type: entity + id: DelayedSmoke + parent: BaseItem + noSpawn: true + name: delayed smoke + suffix: "(10s)" + components: + - type: Sprite #DeltaV: Apparently these want sprites, probably because they're baseitems + sprite: /Textures/Objects/Fun/goldbikehorn.rsi + visible: false + state: icon + - type: DelayedItem + item: AdminInstantEffectSmoke10 + +- type: entity + id: AdminInstantEffectEMP7 + noSpawn: true + suffix: EMP, 7 meters + parent: AdminInstantEffectBase + components: + - type: EmpOnTrigger + range: 7 + energyConsumption: 50000 + +- type: entity + id: DelayedEMP + parent: BaseItem + noSpawn: true + name: delayed EMP (7 meters) + components: + - type: Sprite #DeltaV: Apparently these want sprites, probably because they're baseitems + sprite: /Textures/Objects/Fun/goldbikehorn.rsi + visible: false + state: icon + - type: DelayedItem + item: AdminInstantEffectEMP7 + +# Miscellaneous Items + +- type: entity + id: SyringeCognizine + parent: Syringe + name: cognizine syringe + components: + - type: SolutionContainerManager + solutions: + drink: + maxVol: 15 + reagents: + - ReagentId: Cognizine + Quantity: 15 # Surely three friends is enough. + +- type: entity + id: SyringeOpporozidone + parent: Syringe + name: opporozidone syringe + components: + - type: SolutionContainerManager + solutions: + drink: + maxVol: 15 +# reagents: # TODO: we don't have that yet. Guess the people will receive an empty syringe instead. +# - ReagentId: Opporozidone +# Quantity: 15 + +- type: entity + id: NecrosolChemistryBottle + parent: BaseChemistryBottleFilled + name: necrosol bottle + components: + - type: SolutionContainerManager + solutions: + drink: + maxVol: 30 + reagents: + - ReagentId: Necrosol + Quantity: 30 + +# Premium Alcohol: wait, it's just marketing? +# TODO: different sprites would be nice. +- type: entity + id: DrinkPremiumVodkaBottleFull + parent: DrinkVodkaBottleFull + name: Moment of Clarity vodka bottle + description: When things get a bit hectic, all you need is a Moment of Clarity. + +- type: entity + id: DrinkPremiumGinBottleFull + parent: DrinkGinBottleFull + name: Harry's gin bottle + description: An interesting set of botanicals, for sure. Is that pumpkin? + +- type: entity + id: DrinkPremiumTequilaBottleFull + parent: DrinkTequilaBottleFull + name: Casa del Eorg tequila bottle + description: Save the best for last. Casa del Eorg, 100% agave. + +- type: entity + id: DrinkPremiumWhiskeyBottleFull + parent: DrinkWhiskeyBottleFull + name: Ol' Prowler 18 whiskey bottle + description: Surprisingly smooth, it has a nasty habit of sneaking up on you. + +- type: entity + id: DrinkPremiumRumBottleFull + parent: DrinkRumBottleFull + name: Redeemer's Bounty rum bottle + description: Well, you asked for it. Navy strength. + +- type: entity + id: DrinkPremiumAbsintheBottleFull + parent: DrinkAbsintheBottleFull + name: Bureaucracy's Kiss absinthe bottle + description: A refined taste that tends to linger. diff --git a/Resources/Prototypes/Entities/Objects/Specific/Mail/Items/paper.yml b/Resources/Prototypes/Entities/Objects/Specific/Mail/Items/paper.yml new file mode 100644 index 00000000000..56c6123edd8 --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Specific/Mail/Items/paper.yml @@ -0,0 +1,483 @@ +# Papers (letters, ad copy) +# TODO: these should really be based on localization strings. +- type: entity + id: PaperMailNFPowerTool + name: Hazard Fraught advertisement + categories: [ HideSpawnMenu ] + suffix: "power tool ad, formatted" + parent: Paper + components: + - type: Paper + content: |2 + + [head=1]Hazard Fraught Tools[/head] + + [head=2]Discount Tools at Quality Prices![/head] + + [head=2]Fax us for a catalog at + [color=#990000]ERROR: UNEXPECTED EOF[/color][/head] + +- type: entity + id: PaperMailNFVagueThreat1 + categories: [ HideSpawnMenu ] + suffix: "vague mail threat 1, formatted" + parent: Paper + components: + - type: Paper + content: |2 + + [head=1]I know what you did.[/head] + + [head=3]You don't know what I'm going to do to you.[/head] + +- type: entity + id: PaperMailNFVagueThreat2 + categories: [ HideSpawnMenu ] + suffix: "vague mail threat 2, formatted" + parent: Paper + components: + - type: Paper + content: |2 + + [head=1]I'm coming for you.[/head] + +- type: entity + id: PaperMailNFVagueThreat3 + categories: [ HideSpawnMenu ] + suffix: "vague mail threat 3, formatted" + parent: Paper + components: + - type: Paper + content: |2 + + [head=1]You're next.[/head] + +- type: entity + id: PaperMailNFVagueThreat4 + categories: [ HideSpawnMenu ] + suffix: "vague mail threat 4, formatted" + parent: Paper + components: + - type: Paper + content: |2 + + [head=1]We see you.[/head] + +- type: entity + id: PaperMailNFVagueThreat5 + categories: [ HideSpawnMenu ] + suffix: "vague mail threat 5, formatted" + parent: Paper + components: + - type: Paper + content: |2 + + [head=2]I hope your affairs are in order.[/head] + +- type: entity + id: PaperMailNFVagueThreat6 + categories: [ HideSpawnMenu ] + suffix: "vague mail threat 6, formatted" + parent: Paper + components: + - type: Paper + content: |2 + + [head=1]It's only a matter of time.[/head] + + + [head=1]Enjoy it while it lasts.[/head] + +- type: entity + id: PaperMailNFVagueThreat7 + categories: [ HideSpawnMenu ] + suffix: "vague mail threat 7, formatted" + parent: Paper + components: + - type: Paper + content: |2 + + [head=2]Who should we mail your pieces to?[/head] + +- type: entity + id: PaperMailNFVagueThreat8 + categories: [ HideSpawnMenu ] + suffix: "vague mail threat 8, formatted" + parent: Paper + components: + - type: Paper + content: |2 + + [head=2]Would you prefer to die slowly or quickly? + [/head] + [head=1]Just kidding.[/head] + + [head=2]We don't care what you think.[/head] + +- type: entity + id: PaperMailNFVagueThreat9 + categories: [ HideSpawnMenu ] + suffix: "vague mail threat 9, formatted" + parent: Paper + components: + - type: Paper + content: |2 + + [head=3]I think your head would look nice on my mantel.[/head] + +- type: entity + id: PaperMailNFVagueThreat10 + categories: [ HideSpawnMenu ] + suffix: "vague mail threat 10, formatted" + parent: Paper + components: + - type: Paper + content: |2 + + [head=1]You should have paid up.[/head] + + + [head=1]It's too late now.[/head] + +- type: entity + id: PaperMailNFVagueThreat11 + categories: [ HideSpawnMenu ] + suffix: "vague mail threat 11, formatted" + parent: Paper + components: + - type: Paper + content: |2 + + [head=3]Your family will miss you, but don't worry.[/head] + + + [head=1]We'll take care of them too.[/head] + +- type: entity + id: PaperMailNFVagueThreat12 + categories: [ HideSpawnMenu ] + suffix: "vague mail threat 12, formatted" + parent: Paper + components: + - type: Paper + content: |2 + + [head=3]I have a bet that you're going to die today.[/head] + + + [head=1]I'm not afraid to cheat.[/head] + +- type: entity + id: PaperMailNFPwrGameAd + name: pwr game advertisement + categories: [ HideSpawnMenu ] + suffix: "pwr game ad" + parent: Paper + components: + - type: Paper + content: |2 + + [head=1]Drink Pwr Game![/head] + + [head=3]Proud sponsor of the NT Block Game Championship.[/head] + +- type: entity + id: PaperMailNFRedBoolAd + name: red bool advertisement + categories: [ HideSpawnMenu ] + suffix: "red bool ad" + parent: Paper + components: + - type: Paper + content: |2 + + [head=2]Try NEW Reformulated Red Bool![/head] + + [head=2]Over [color=#dd0000]1.5g[/color] of caffeine per can![/head] + + [head=2]Punch your heart into overdrive![/head] + +- type: entity + id: PaperMailNFSpaceColaAd + name: space cola advertisement + categories: [ HideSpawnMenu ] + suffix: "space cola ad" + parent: Paper + components: + - type: Paper + content: |2 + + [head=2]The classic taste you love, Space Cola.[/head] + + [head=2]Now certified lead-free.[/head] + +- type: entity + id: PaperMailNFSpaceMountainWindAd + name: space mountain wind advertisement + categories: [ HideSpawnMenu ] + suffix: "space mountain wind ad" + parent: Paper + components: + - type: Paper + content: |2 + + [head=3]When it's time to game, there's one choice:[/head] + + [head=1]Space Mountain Wind.[/head] + +- type: entity + id: PaperMailNFSpaceUpAd + name: space up advertisement + categories: [ HideSpawnMenu ] + suffix: "space up ad" + parent: Paper + components: + - type: Paper + content: |2 + + [head=3]The crisp, refreshing taste of lemon and lime.[/head] + + + [head=1]Space Up![/head] + + + [head=2]Ask your barkeep for a Sui Dream today![/head] + +- type: entity + id: PaperMailNTSoapAd1 + categories: [ HideSpawnMenu ] + suffix: "soap ad 1" + parent: Paper + components: + - type: Paper + stampedBy: + - stampedColor: '#333333FF' + stampedName: Christopher Cleanman +# stampType: Signature #DeltaV - Not compatible with our signatures code stuff apparently + content: |2 + [head=3]Hello Valued Customer,[/head] + You have been selected to receive a complimentary sampler of scented soaps that Nanotrasen has to offer. + + Why not enjoy a nice warm shower with our scented soaps? Tested and effective vs. vent crud and mold. + + We hope you enjoy. + + Sincerely, + Christopher Cleanman, Vice President, NT Habs - Toiletries Dept. + +- type: entity + id: PaperMailNTSoapAd2 + categories: [ HideSpawnMenu ] + suffix: "soap ad 2" #DeltaV - Edited to not be addressed to Frontier Citizens, localized + parent: Paper + components: + - type: Paper + content: |2 + [head=2]GREETINGS DELTA SECTOR CITIZEN[/head] + + OUR REPORTS INDICATE THAT: + 1. YOU HAVE FAILED YOUR QUARTERLY HYGIENE INSPECTION. + 2. THIS HAS REDUCED SECTOR EFFICIENCY BY [bold]0.02%[/bold]. + + ENCLOSED IS A SELECTION OF HYGIENE PRODUCTS SUITABLE FOR USE BY ORGANICS. WE HOPE THAT THIS SITUATION IS RESOLVED PROMPTLY. + + [italic]THIS IS AN AUTOMATED MESSAGE. DO NOT REPLY.[/italic] + +- type: entity + id: PaperMailNTConscript + categories: [ HideSpawnMenu ] + suffix: "conscript" + parent: Paper + components: + - type: Paper + content: |2 + + [head=1]NOT ONE STEP BACK.[/head] + + + [head=1]FOR THE FRONTIER.[/head] + +- type: entity + id: PaperMailNTMusket + categories: [ HideSpawnMenu ] + suffix: "musket" + parent: Paper + components: + - type: Paper + content: |2 + + [head=2]Use a musket for sector defense, + like the founding fathers intended.[/head] + +- type: entity + id: PaperMailNFPaperPusherAd + categories: [ HideSpawnMenu ] + suffix: "paper pusher" + parent: Paper + components: + - type: Paper + content: |2 + + [head=2]Here is a pen for any letters you write. + [/head] + [head=1]Keep it close, use it often.[/head] + + [head=2]May you write well, neatly, and with style.[/head] + + [head=3]Sincerely, + [italic]The Frontier Paper Pusher's Club[/italic][/head] + +- type: entity + id: PaperMailNFPetBedAssemblyManual + name: pet bed assembly manual + categories: [ HideSpawnMenu ] + suffix: "pet bed assembly manual" + parent: Paper + components: + - type: Paper + content: |2 + + [head=1]HÖGANÄS[/head] + + [italic](There is a black and white picture of a pet bed on the first page.)[/italic] + + [italic](On the next few pages, you see a list of materials and a happy stick figure assembling furniture.)[/italic] + + [italic](On the pages after that, you see a set of instructions to assemble a pet bed. You're sure you don't need them, how hard could it be?)[/italic] + +- type: entity + id: PaperMailNTBoxer + categories: [ HideSpawnMenu ] + suffix: "boxer" + parent: Paper + components: + - type: Paper + content: |2 + [head=2]You've gotta defend your belt, champ. + [/head] + [head=1]They're coming for you.[/head] + + [head=2]This should help. Knock 'em out.[/head] + +# Placeholder for an arm-on-use, flashbang fakeout pipebomb +- type: entity + id: PaperMailNFPipebombIntern + categories: [ HideSpawnMenu ] + suffix: "pipe bomb intern" + parent: Paper + components: + - type: Paper + stampedBy: + - stampedColor: '#333333FF' + stampedName: craig +# stampType: Signature #DeltaV - Not compatible with our signatures code stuff apparently + content: |2 + [bold]hey uh, they told me to send you a pipebomb i guess? + + this is all i could find around here, hope that works + + thanks[/bold] + +- type: entity + id: PaperMailNFAntivirus + name: Snortin Antivirus invoice + categories: [ HideSpawnMenu ] + suffix: "antivirus ad" + parent: Paper + components: + - type: Paper + content: |2 + + [head=1]Invoice[/head][head=3] + Snortin Antivirus Software[/head] + + [head=3]Order #41003 + [bold][bullet/][/bold] 1x Snortin Total-275 Antivirus Install Disk[/head] + + [head=3]Total: 947381 Spesos[/head] + + Thank you for making purchase from Snortin Antivirus Software. + We assuring you that our product is greatest. + Please sending payment at earliest convenience. + +- type: entity + id: PaperMailNFEMPPreparedness + categories: [ HideSpawnMenu ] + name: EMP preparedness response form + suffix: "emp preparedness" #DeltaV - Replaces mention of SR with HoS + parent: Paper + components: + - type: Paper + content: |2 + + [head=1]EMP Preparedness Response[/head] + + You have been selected to receive a NT EMP Preparedness kit as a test. Note that this is only a test. In a real emergency, follow the instructions of your vessel's command staff. + + As the recipient of this, please note [bold]any improvements[/bold] that could be made towards the EMP preparedness of the vessel you were aboard when opening and submit this form to your serving Captain or Head of Security. + + [bold]Date of test:[/bold] + [bold]Number of affected items:[/bold] + [bold]Perceived severity of incident:[/bold] + [bold]Suggested improvements:[/bold] + +- type: entity + id: PaperMailNFBuildABuddy + categories: [ HideSpawnMenu ] + name: Build-a-Buddy adoption letter + suffix: "build-a-buddy" #DeltaV- Body text changed, because Goblins Aren't Real + parent: Paper + components: + - type: Paper + stampState: paper_stamp-generic + stampedBy: + - stampedColor: '#FF6699FF' + stampedName: Chief Friendship Officer + - stampedColor: '#333333FF' + stampedName: Cuts-With-Scalpel +# stampType: Signature #DeltaV - Not compatible with our signatures code stuff apparently. + content: |2 + + [head=1]Note of Adoption[/head] + + You're now the proud owner of your very own Build-a-Buddy! + + We hope that your new friend can serve as a shoulder to lean on in the depths of space, and hopefully you won't be quite as lonely out there. Personally, I find putting them together to be rather therapeutic. + + [bold]Collect the whole set![/bold] + [bold][bullet/][/bold] Henry the Human + [bold][bullet/][/bold] Randy the Reptilian + [bold][bullet/][/bold] Steven the Slime + [bold][bullet/][/bold] Valerie the Vulpkanin + +- type: entity + id: PaperMailNFSpaceLaw + categories: [ HideSpawnMenu ] + suffix: "space-law" #DeltaV- edited contents to be from the Delta Sector instead of the Frontier + parent: Paper + components: + - type: Paper + stampState: paper_stamp-centcom + stampedBy: + - stampedColor: '#006600FF' + stampedName: Central Admiralty of the Delta Sector + content: |2 + + [head=1]Space Law is your shield.[/head] + + [head=2]With it, you guard the Delta Sector.[/head][head=3] + [/head] + [head=1]Memorize it. Grasp it firmly.[/head] + + [head=2]The SOP is your sword, don't get rusty.[/head] + + [head=2]Maintain your balance, and wield it well.[/head] + + + + + + + + + [head=3][italic]Internal Bureau of Propaganda[/italic][/head] diff --git a/Resources/Prototypes/Entities/Objects/Specific/Mail/base_mail_large.yml b/Resources/Prototypes/Entities/Objects/Specific/Mail/base_mail_large.yml new file mode 100644 index 00000000000..a5dcefacba5 --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Specific/Mail/base_mail_large.yml @@ -0,0 +1,79 @@ +# Large packages. +- type: entity + parent: BaseMail + abstract: true + id: BaseMailLarge + name: mail-large-item-name-unaddressed + components: + - type: Item + size: Ginormous + - type: Sprite + scale: 0.8, 0.8 + sprite: Objects/Specific/Mail/mail_large.rsi + layers: + - state: icon + map: ["enum.MailVisualLayers.Icon"] + - state: fragile + map: ["enum.MailVisualLayers.FragileStamp"] + visible: false + - map: ["enum.MailVisualLayers.JobStamp"] + scale: 0.8, 0.8 + offset: 0.235, -0.01 + - state: locked + map: ["enum.MailVisualLayers.Lock"] + - state: priority + map: ["enum.MailVisualLayers.PriorityTape"] + visible: false + shader: unshaded + - state: broken + map: ["enum.MailVisualLayers.Breakage"] + visible: false + - type: GenericVisualizer + visuals: + enum.MailVisuals.IsTrash: + enum.MailVisualLayers.Icon: + True: + state: trash + False: + state: icon + enum.MailVisuals.IsLocked: + enum.MailVisualLayers.Lock: + True: + visible: true + False: + visible: false + enum.MailVisuals.IsFragile: + enum.MailVisualLayers.FragileStamp: + True: + visible: true + False: + visible: false + enum.MailVisuals.IsPriority: + enum.MailVisualLayers.PriorityTape: + True: + visible: true + False: + visible: false + enum.MailVisuals.IsPriorityInactive: + enum.MailVisualLayers.PriorityTape: + True: + shader: shaded + state: priority_inactive + False: + shader: unshaded + state: priority + enum.MailVisuals.IsBroken: + enum.MailVisualLayers.Breakage: + True: + visible: true + False: + visible: false + - type: MultiHandedItem + - type: Mail + isLarge: true + +- type: entity + noSpawn: true + parent: BaseMailLarge + id: MailLargeAdminFun + suffix: adminfun diff --git a/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml b/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml index cb45a099703..0cfdbd0139a 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml @@ -39,8 +39,8 @@ doAfterDelay: 10 - type: UserInterface interfaces: - - key: enum.MechUiKey.Key - type: MechBoundUserInterface + enum.MechUiKey.Key: + type: MechBoundUserInterface - type: MeleeWeapon hidden: true attackRate: 0.75 @@ -72,7 +72,7 @@ shape: !type:PhysShapeCircle radius: 0.45 - density: 1000 + density: 21390 # 15 Tonnes mask: - MobMask layer: diff --git a/Resources/Prototypes/Entities/Objects/Specific/Medical/disease.yml b/Resources/Prototypes/Entities/Objects/Specific/Medical/disease.yml index cc21d41eb11..ee51778f98f 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Medical/disease.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Medical/disease.yml @@ -40,6 +40,27 @@ # - Virology (when it's back) # - Botany +- type: entity + parent: BaseAmmoProvider # this is for cycling swabs out and not spawning 30 entities, trust + id: BoxMouthSwab + name: sterile swab dispenser + description: Dispenses 30 sterile swabs, extremely useful for botany. + components: + - type: Sprite + layers: + - state: boxwide + - state: swab + - type: BallisticAmmoProvider + whitelist: + components: + - BotanySwab + proto: DiseaseSwab + capacity: 30 + - type: GuideHelp + guides: + # - Virology (when it's back) + - Botany + - type: entity parent: BaseItem id: Vaccine 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 e2e93283425..ab338b9da95 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Medical/handheld_crew_monitor.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Medical/handheld_crew_monitor.yml @@ -16,10 +16,9 @@ - type: ActivatableUIRequiresPowerCell - type: ActivatableUI key: enum.CrewMonitoringUIKey.Key - closeOnHandDeselect: false - type: UserInterface interfaces: - - key: enum.CrewMonitoringUIKey.Key + enum.CrewMonitoringUIKey.Key: type: CrewMonitoringBoundUserInterface - type: CrewMonitoringConsole - type: DeviceNetwork diff --git a/Resources/Prototypes/Entities/Objects/Specific/Medical/healthanalyzer.yml b/Resources/Prototypes/Entities/Objects/Specific/Medical/healthanalyzer.yml index 05794dfbee7..72bf96f687d 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Medical/healthanalyzer.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Medical/healthanalyzer.yml @@ -17,10 +17,9 @@ storedRotation: -90 - type: ActivatableUI key: enum.HealthAnalyzerUiKey.Key - closeOnHandDeselect: false - type: UserInterface interfaces: - - key: enum.HealthAnalyzerUiKey.Key + enum.HealthAnalyzerUiKey.Key: type: HealthAnalyzerBoundUserInterface - type: HealthAnalyzer scanningEndSound: diff --git a/Resources/Prototypes/Entities/Objects/Specific/Medical/medkits.yml b/Resources/Prototypes/Entities/Objects/Specific/Medical/medkits.yml index 62e5ab44762..46d1efa24eb 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Medical/medkits.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Medical/medkits.yml @@ -15,6 +15,9 @@ size: Large sprite: Objects/Specific/Medical/firstaidkits.rsi heldPrefix: firstaid + - type: PhysicalComposition + materialComposition: + Plastic: 150 - type: Tag tags: - Medkit diff --git a/Resources/Prototypes/Entities/Objects/Specific/Medical/surgery.yml b/Resources/Prototypes/Entities/Objects/Specific/Medical/surgery.yml index c81768da4d3..027d53f5bcd 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Medical/surgery.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Medical/surgery.yml @@ -51,7 +51,7 @@ - 1,1,1,1 - type: MeleeWeapon attackRate: 0.75 - range: 1.3 + range: 1.4 damage: types: Piercing: 8 @@ -87,7 +87,7 @@ wideAnimationRotation: 90 swingLeft: true attackRate: 1.25 - range: 1.25 + range: 1.4 damage: types: Slash: 7.5 @@ -208,7 +208,8 @@ heavyStaminaCost: 20 maxTargets: 8 angle: 20 -# ~~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. +# --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. - type: entity name: choppa @@ -252,7 +253,7 @@ storedRotation: 90 - type: MeleeWeapon attackRate: 1.15 - range: 1.4 + range: 1.5 bluntStaminaDamageFactor: 3.0 damage: types: @@ -260,7 +261,7 @@ Slash: 5.5 heavyRateModifier: 0.5 heavyDamageBaseModifier: 1 - heavyStaminaCost: 15 + heavyStaminaCost: 10 maxTargets: 8 angle: 360 soundHit: @@ -282,8 +283,8 @@ heldPrefix: advanced storedRotation: 90 - type: MeleeWeapon - attackRate: 1.25 - range: 1.4 + attackRate: 1.15 + range: 1.5 bluntStaminaDamageFactor: 5.0 damage: types: @@ -291,7 +292,7 @@ Slash: 7.5 heavyRateModifier: 0.5 heavyDamageBaseModifier: 1 - heavyStaminaCost: 15 + heavyStaminaCost: 10 maxTargets: 8 angle: 360 soundHit: diff --git a/Resources/Prototypes/Entities/Objects/Specific/Research/anomaly.yml b/Resources/Prototypes/Entities/Objects/Specific/Research/anomaly.yml index 48ea456c170..b9959582bfb 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Research/anomaly.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Research/anomaly.yml @@ -10,11 +10,11 @@ state: icon - type: ActivatableUI key: enum.AnomalyScannerUiKey.Key - closeOnHandDeselect: false + requireActiveHand: false inHandsOnly: true - type: UserInterface interfaces: - - key: enum.AnomalyScannerUiKey.Key + enum.AnomalyScannerUiKey.Key: type: AnomalyScannerBoundUserInterface - type: AnomalyScanner # - type: GuideHelp diff --git a/Resources/Prototypes/Entities/Objects/Specific/Research/rped.yml b/Resources/Prototypes/Entities/Objects/Specific/Research/rped.yml index 84a51b4f345..fca8c8ae85f 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Research/rped.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Research/rped.yml @@ -10,6 +10,9 @@ - type: Item sprite: Objects/Specific/Research/rped.rsi size: Normal + - type: GuideHelp + guides: + - MachineUpgrading - type: PartExchanger - type: Storage grid: diff --git a/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml b/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml index 3d64dce71f1..960e37a6ccc 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml @@ -15,9 +15,9 @@ - type: Tag tags: - BorgModuleGeneric - # - type: GuideHelp - # guides: - # - Cyborgs + - type: GuideHelp + guides: + - Cyborgs - type: entity id: BaseProviderBorgModule @@ -346,6 +346,7 @@ - HoloprojectorBorg - SprayBottleSpaceCleaner - Dropper + - TrashBag # medical modules - type: entity @@ -579,5 +580,19 @@ - state: icon-syndicate - type: ItemBorgModule items: - - WeaponLightMachineGunL6C - - PinpointerSyndicateNuclear + - WeaponLightMachineGunL6C + - PinpointerSyndicateNuclear + +- type: entity + id: BorgModuleMartyr + parent: [ BaseBorgModule, BaseProviderBorgModule ] + name: martyr cyborg module + description: "A module that comes with an explosive you probably don't want to handle yourself." + components: + - type: Sprite + layers: + - state: syndicateborgbomb + - state: icon-bomb + - type: ItemBorgModule + items: + - SelfDestructSeq diff --git a/Resources/Prototypes/Entities/Objects/Specific/Service/barber.yml b/Resources/Prototypes/Entities/Objects/Specific/Service/barber.yml index 4a16603541c..451230bbf1f 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Service/barber.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Service/barber.yml @@ -14,11 +14,12 @@ changeSlotTime: 20 - type: ActivatableUI key: enum.MagicMirrorUiKey.Key - closeOnHandDeselect: true + inHandsOnly: true + requireActiveHand: true - type: UserInterface interfaces: - - key: enum.MagicMirrorUiKey.Key - type: MagicMirrorBoundUserInterface + enum.MagicMirrorUiKey.Key: + type: MagicMirrorBoundUserInterface - type: MeleeWeapon wideAnimationRotation: -135 attackRate: 1 diff --git a/Resources/Prototypes/Entities/Objects/Specific/Xenoarchaeology/artifact_equipment.yml b/Resources/Prototypes/Entities/Objects/Specific/Xenoarchaeology/artifact_equipment.yml index c38868b3997..e1716f08439 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Xenoarchaeology/artifact_equipment.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Xenoarchaeology/artifact_equipment.yml @@ -36,7 +36,7 @@ radius: 0.45 density: 50 mask: - - SmallMobMask #this is so they can go under plastic flaps + - CrateMask #this is so they can go under plastic flaps layer: - MachineLayer - type: Icon diff --git a/Resources/Prototypes/Entities/Objects/Specific/Xenoarchaeology/item_artifacts.yml b/Resources/Prototypes/Entities/Objects/Specific/Xenoarchaeology/item_artifacts.yml index ae2d05e118b..409a6ec81ad 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Xenoarchaeology/item_artifacts.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Xenoarchaeology/item_artifacts.yml @@ -45,14 +45,14 @@ ano01_on: Rainbow - type: UserInterface #needs to be here for certain effects interfaces: - - key: enum.StorageUiKey.Key - type: StorageBoundUserInterface - - key: enum.TransferAmountUiKey.Key - type: TransferAmountBoundUserInterface - - key: enum.InstrumentUiKey.Key - type: InstrumentBoundUserInterface - - key: enum.IntercomUiKey.Key - type: IntercomBoundUserInterface + enum.StorageUiKey.Key: + type: StorageBoundUserInterface + enum.TransferAmountUiKey.Key: + type: TransferAmountBoundUserInterface + enum.InstrumentUiKey.Key: + type: InstrumentBoundUserInterface + enum.IntercomUiKey.Key: + type: IntercomBoundUserInterface - type: Appearance - type: Item size: Normal diff --git a/Resources/Prototypes/Entities/Objects/Specific/Xenoarchaeology/structure_artifacts.yml b/Resources/Prototypes/Entities/Objects/Specific/Xenoarchaeology/structure_artifacts.yml index 4680259666c..bee9ced960f 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Xenoarchaeology/structure_artifacts.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Xenoarchaeology/structure_artifacts.yml @@ -22,14 +22,14 @@ noRot: true - type: UserInterface #needs to be here for certain effects interfaces: - - key: enum.StorageUiKey.Key - type: StorageBoundUserInterface - - key: enum.TransferAmountUiKey.Key - type: TransferAmountBoundUserInterface - - key: enum.InstrumentUiKey.Key - type: InstrumentBoundUserInterface - - key: enum.IntercomUiKey.Key - type: IntercomBoundUserInterface + enum.StorageUiKey.Key: + type: StorageBoundUserInterface + enum.TransferAmountUiKey.Key: + type: TransferAmountBoundUserInterface + enum.InstrumentUiKey.Key: + type: InstrumentBoundUserInterface + enum.IntercomUiKey.Key: + type: IntercomBoundUserInterface - type: Reactive groups: Acidic: [Touch] diff --git a/Resources/Prototypes/Entities/Objects/Specific/atmos.yml b/Resources/Prototypes/Entities/Objects/Specific/atmos.yml index 0dc714aba0c..c67e7ff8c31 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/atmos.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/atmos.yml @@ -13,12 +13,12 @@ - type: ActivatableUI inHandsOnly: true singleUser: true - closeOnHandDeselect: false + requireActiveHand: false key: enum.GasAnalyzerUiKey.Key - type: UserInterface interfaces: - - key: enum.GasAnalyzerUiKey.Key - type: GasAnalyzerBoundUserInterface + enum.GasAnalyzerUiKey.Key: + type: GasAnalyzerBoundUserInterface - type: Appearance - type: GenericVisualizer visuals: diff --git a/Resources/Prototypes/Entities/Objects/Specific/chemical-containers.yml b/Resources/Prototypes/Entities/Objects/Specific/chemical-containers.yml index 027ff206f8d..4bd71f898db 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/chemical-containers.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/chemical-containers.yml @@ -8,7 +8,6 @@ solutions: beaker: maxVol: 200 - canMix: true - type: Sprite sprite: Objects/Specific/Chemistry/jug.rsi layers: @@ -19,6 +18,8 @@ - type: Item size: Normal sprite: Objects/Specific/Chemistry/jug.rsi + - type: MixableSolution + solution: beaker - type: RefillableSolution solution: beaker - type: DrainableSolution @@ -31,9 +32,11 @@ solution: beaker - type: SolutionTransfer canChangeTransferAmount: true + - type: SolutionItemStatus + solution: beaker - type: UserInterface interfaces: - - key: enum.TransferAmountUiKey.Key + enum.TransferAmountUiKey.Key: type: TransferAmountBoundUserInterface - type: Drink solution: beaker diff --git a/Resources/Prototypes/Entities/Objects/Specific/chemistry-bottles.yml b/Resources/Prototypes/Entities/Objects/Specific/chemistry-bottles.yml index acfb65aa54f..6fdb77fe5fc 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/chemistry-bottles.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/chemistry-bottles.yml @@ -29,7 +29,8 @@ solutions: drink: # This solution name and target volume is hard-coded in ChemMasterComponent maxVol: 30 - canMix: true + - type: MixableSolution + solution: drink - type: RefillableSolution solution: drink - type: DrainableSolution @@ -41,10 +42,12 @@ - type: SolutionTransfer maxTransferAmount: 30 canChangeTransferAmount: true + - type: SolutionItemStatus + solution: drink - type: UserInterface interfaces: - - key: enum.TransferAmountUiKey.Key - type: TransferAmountBoundUserInterface + enum.TransferAmountUiKey.Key: + type: TransferAmountBoundUserInterface - type: Item size: Tiny sprite: Objects/Specific/Chemistry/beaker.rsi diff --git a/Resources/Prototypes/Entities/Objects/Specific/chemistry-vials.yml b/Resources/Prototypes/Entities/Objects/Specific/chemistry-vials.yml index c5de88d690d..39a35dba8c6 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/chemistry-vials.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/chemistry-vials.yml @@ -35,7 +35,8 @@ solutions: beaker: maxVol: 30 - canMix: true + - type: MixableSolution + solution: beaker - type: RefillableSolution solution: beaker - type: DrainableSolution @@ -47,10 +48,12 @@ - type: SolutionTransfer maxTransferAmount: 30 canChangeTransferAmount: true + - type: SolutionItemStatus + solution: beaker - type: UserInterface interfaces: - - key: enum.TransferAmountUiKey.Key - type: TransferAmountBoundUserInterface + enum.TransferAmountUiKey.Key: + type: TransferAmountBoundUserInterface - type: Item size: Tiny sprite: Objects/Specific/Chemistry/vial.rsi diff --git a/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml b/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml index fd32523d8ff..2f86604711a 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml @@ -25,7 +25,8 @@ solutions: beaker: maxVol: 50 - canMix: true + - type: MixableSolution + solution: beaker - type: FitsInDispenser solution: beaker - type: RefillableSolution @@ -40,10 +41,12 @@ solution: beaker - type: SolutionTransfer canChangeTransferAmount: true + - type: SolutionItemStatus + solution: beaker - type: UserInterface interfaces: - - key: enum.TransferAmountUiKey.Key - type: TransferAmountBoundUserInterface + enum.TransferAmountUiKey.Key: + type: TransferAmountBoundUserInterface - type: Drink solution: beaker - type: Appearance @@ -117,7 +120,8 @@ solutions: beaker: maxVol: 50 - canMix: true + - type: MixableSolution + solution: beaker - type: FitsInDispenser solution: beaker - type: RefillableSolution @@ -132,10 +136,12 @@ solution: beaker - type: SolutionTransfer canChangeTransferAmount: true + - type: SolutionItemStatus + solution: beaker - type: UserInterface interfaces: - - key: enum.TransferAmountUiKey.Key - type: TransferAmountBoundUserInterface + enum.TransferAmountUiKey.Key: + type: TransferAmountBoundUserInterface - type: Drink solution: beaker - type: Appearance @@ -158,6 +164,9 @@ solution: beaker - type: StaticPrice price: 10 + - type: PhysicalComposition + materialComposition: + Glass: 50 - type: SolutionContainerVisuals maxFillLevels: 6 fillBaseName: beaker @@ -200,13 +209,15 @@ solutions: beaker: maxVol: 100 - canMix: true - type: Appearance - type: SolutionContainerVisuals maxFillLevels: 6 fillBaseName: beakerlarge inHandsMaxFillLevels: 4 inHandsFillBaseName: -fill- + - type: PhysicalComposition + materialComposition: + Glass: 100 - type: StaticPrice price: 20 @@ -248,8 +259,7 @@ solutions: beaker: maxVol: 1000 - canMix: true - - type: ReverseEngineering # Delta + - type: ReverseEngineering difficulty: 4 recipes: - BluespaceBeaker @@ -282,8 +292,8 @@ solution: dropper - type: UserInterface interfaces: - - key: enum.TransferAmountUiKey.Key - type: TransferAmountBoundUserInterface + enum.TransferAmountUiKey.Key: + type: TransferAmountBoundUserInterface - type: Spillable solution: injector - type: Item diff --git a/Resources/Prototypes/Entities/Objects/Specific/syndicate.yml b/Resources/Prototypes/Entities/Objects/Specific/syndicate.yml index 883f66816de..4f760066843 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/syndicate.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/syndicate.yml @@ -63,8 +63,8 @@ heldPrefix: radio - type: UserInterface interfaces: - - key: enum.StoreUiKey.Key - type: StoreBoundUserInterface + enum.StoreUiKey.Key: + type: StoreBoundUserInterface - type: ActivatableUI key: enum.StoreUiKey.Key - type: Store diff --git a/Resources/Prototypes/Entities/Objects/Tools/access_configurator.yml b/Resources/Prototypes/Entities/Objects/Tools/access_configurator.yml index 9504ec144a8..9c8102979a1 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/access_configurator.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/access_configurator.yml @@ -75,12 +75,12 @@ doAfter: 0.5 - type: UserInterface interfaces: - - key: enum.AccessOverriderUiKey.Key + enum.AccessOverriderUiKey.Key: type: AccessOverriderBoundUserInterface - type: ActivatableUI key: enum.AccessOverriderUiKey.Key requireHands: true - closeOnHandDeselect: false + requireActiveHand: false singleUser: true - type: ItemSlots - type: ContainerContainer diff --git a/Resources/Prototypes/Entities/Objects/Tools/appraisal.yml b/Resources/Prototypes/Entities/Objects/Tools/appraisal.yml index 18ffa4559fa..f774ce9cbb9 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/appraisal.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/appraisal.yml @@ -17,6 +17,9 @@ quickEquip: false slots: - Belt + - type: PhysicalComposition + materialComposition: + Steel: 250 - type: Tag tags: - AppraisalTool diff --git a/Resources/Prototypes/Entities/Objects/Tools/bucket.yml b/Resources/Prototypes/Entities/Objects/Tools/bucket.yml index 496fd231b82..77c5e548978 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/bucket.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/bucket.yml @@ -26,6 +26,8 @@ solutions: bucket: maxVol: 250 + - type: MixableSolution + solution: bucket - type: SolutionTransfer transferAmount: 100 maxTransferAmount: 100 @@ -33,8 +35,8 @@ canChangeTransferAmount: true - type: UserInterface interfaces: - - key: enum.TransferAmountUiKey.Key - type: TransferAmountBoundUserInterface + enum.TransferAmountUiKey.Key: + type: TransferAmountBoundUserInterface - type: MeleeWeapon soundNoDamage: path: "/Audio/Effects/Fluids/splat.ogg" @@ -49,6 +51,8 @@ solution: bucket - type: DrainableSolution solution: bucket + - type: SolutionItemStatus + solution: bucket - type: Appearance - type: SolutionContainerVisuals maxFillLevels: 3 diff --git a/Resources/Prototypes/Entities/Objects/Tools/cable_coils.yml b/Resources/Prototypes/Entities/Objects/Tools/cable_coils.yml index 36a4c411634..f06539aa175 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/cable_coils.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/cable_coils.yml @@ -31,7 +31,7 @@ Steel: 15 #Same as Ointment but divided by 5 and 3 because StackPrice needs to be 1 - Estacao Pirata IPCs #1 Ointment = -50 damage of those types - #1 Cable ~= -50 (-49.8) damage of those types + #1 Cable ~= -50 (-49.8) damage of those types - type: Healing delay: 0.6 damageContainers: diff --git a/Resources/Prototypes/Entities/Objects/Tools/cowtools.yml b/Resources/Prototypes/Entities/Objects/Tools/cowtools.yml index 977a8a931b5..87959ebef3d 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/cowtools.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/cowtools.yml @@ -128,11 +128,6 @@ sprite: Objects/Tools/Cowtools/cowelder.rsi - type: Tool speed: 0.05 - - type: Welder - litMeleeDamageBonus: - types: # When lit, negate standard melee damage and replace with heat - Heat: 0.5 - Blunt: -5 - type: entity name: milkalyzer @@ -147,8 +142,8 @@ - type: GasAnalyzer - type: UserInterface interfaces: - - key: enum.GasAnalyzerUiKey.Key - type: GasAnalyzerBoundUserInterface + enum.GasAnalyzerUiKey.Key: + type: GasAnalyzerBoundUserInterface - type: Appearance - type: entity diff --git a/Resources/Prototypes/Entities/Objects/Tools/decoys.yml b/Resources/Prototypes/Entities/Objects/Tools/decoys.yml index 0074fe517dc..d399b77d020 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/decoys.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/decoys.yml @@ -48,6 +48,15 @@ - type: ContainerContainer containers: cell_slot: !type:ContainerSlot + - type: HandheldLight + addPrefix: false + - type: PointLight # Just like the real thing... + autoRot: true + radius: 1.5 + energy: 2.3 + offset: 0, -1 + color: green + netsync: false - type: Tag tags: - Balloon @@ -59,8 +68,6 @@ name: operative balloon description: Upon closer inspection, this Syndicate operative is actually a balloon. components: - - type: HandheldLight - addPrefix: false - type: Sprite sprite: Objects/Tools/Decoys/operative_decoy.rsi layers: @@ -69,13 +76,6 @@ - state: folded map: ["foldedLayer"] visible: false - - type: PointLight # Just like the real thing... - autoRot: true - radius: 1.5 - energy: 2.3 - offset: 0, -1 - color: green - netsync: false - type: entity parent: BaseDecoy @@ -83,8 +83,6 @@ name: agent balloon description: Upon closer inspection, this Syndicate agent is actually a balloon. components: - - type: HandheldLight - addPrefix: false - type: Sprite sprite: Objects/Tools/Decoys/agent_decoy.rsi layers: @@ -93,12 +91,6 @@ - state: folded map: ["foldedLayer"] visible: false - - type: PointLight - radius: 1.5 - energy: 2.3 - offset: 0, -1 - color: green - netsync: false - type: entity parent: BaseDecoy @@ -106,8 +98,6 @@ name: elite operative balloon description: Upon closer inspection, this Syndicate elite operative is actually a balloon. components: - - type: HandheldLight - addPrefix: false - type: Sprite sprite: Objects/Tools/Decoys/elite_decoy.rsi layers: @@ -117,11 +107,7 @@ map: ["foldedLayer"] visible: false - type: PointLight - radius: 1.5 - energy: 2.3 - offset: 0, -1 color: red - netsync: false - type: entity parent: BaseDecoy @@ -129,8 +115,6 @@ name: juggernaut balloon description: Upon closer inspection, this Syndicate juggernaut is actually a balloon. components: - - type: HandheldLight - addPrefix: false - type: Sprite sprite: Objects/Tools/Decoys/juggernaut_decoy.rsi layers: @@ -139,11 +123,6 @@ - state: folded map: ["foldedLayer"] visible: false - - type: PointLight # Inbuilt flashlight, I guess? - radius: 1.5 - energy: 2.3 - offset: 0, -1 - netsync: false - type: entity parent: BaseDecoy @@ -151,8 +130,6 @@ name: commander balloon description: Upon closer inspection, this Syndicate commander is actually a balloon. components: - - type: HandheldLight - addPrefix: false - type: Sprite sprite: Objects/Tools/Decoys/commander_decoy.rsi layers: @@ -161,9 +138,3 @@ - state: folded map: ["foldedLayer"] visible: false - - type: PointLight - radius: 1.5 - energy: 2.3 - offset: 0, -1 - color: green - netsync: false diff --git a/Resources/Prototypes/Entities/Objects/Tools/flare.yml b/Resources/Prototypes/Entities/Objects/Tools/flare.yml index dbdb935b916..fdf53148631 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/flare.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/flare.yml @@ -20,7 +20,13 @@ fadeOutBehaviourID: fade_out litSound: path: /Audio/Items/Flare/flare_on.ogg - loopedSound: /Audio/Items/Flare/flare_burn.ogg + loopedSound: + path: /Audio/Items/Flare/flare_burn.ogg + params: + loop: true + volume: -10 + maxDistance: 5 + - type: Sprite sprite: Objects/Misc/flare.rsi layers: diff --git a/Resources/Prototypes/Entities/Objects/Tools/flashlights.yml b/Resources/Prototypes/Entities/Objects/Tools/flashlights.yml index 2b75a7e3dd9..cbb5dfee0a1 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/flashlights.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/flashlights.yml @@ -65,6 +65,7 @@ - type: Item sprite: Objects/Tools/flashlight.rsi storedRotation: -90 + - type: EtherealLight - type: PointLight enabled: false mask: /Textures/Effects/LightMasks/cone.png @@ -120,9 +121,8 @@ damage: types: Blunt: 6.5 - bluntStaminaDamageFactor: 1.5 + bluntStaminaDamageFactor: 2 heavyRateModifier: 0.9 - heavyStaminaCost: 5 maxTargets: 1 angle: 20 soundHit: diff --git a/Resources/Prototypes/Entities/Objects/Tools/gas_tanks.yml b/Resources/Prototypes/Entities/Objects/Tools/gas_tanks.yml index f739de251cb..8590a32a6a6 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/gas_tanks.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/gas_tanks.yml @@ -1,4 +1,4 @@ -- type: entity +- type: entity abstract: true parent: BaseItem id: GasTankBase @@ -19,8 +19,8 @@ key: enum.SharedGasTankUiKey.Key - type: UserInterface interfaces: - - key: enum.SharedGasTankUiKey.Key - type: GasTankBoundUserInterface + enum.SharedGasTankUiKey.Key: + type: GasTankBoundUserInterface - type: GasTank outputPressure: 21.3 air: @@ -41,9 +41,9 @@ bluntStaminaDamageFactor: 2.5 heavyRateModifier: 0.8 heavyDamageBaseModifier: 1.5 - heavyStaminaCost: 15 - maxTargets: 1 - angle: 140 + heavyStaminaCost: 10 + maxTargets: 3 + angle: 100 - type: PhysicalComposition materialComposition: Steel: 185 @@ -245,3 +245,6 @@ outputPressure: 101.3 - type: Clothing sprite: Objects/Tanks/plasma.rsi + slots: + - Belt + - suitStorage diff --git a/Resources/Prototypes/Entities/Objects/Tools/gps.yml b/Resources/Prototypes/Entities/Objects/Tools/gps.yml index 8ae34573ffa..becbb638f4f 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/gps.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/gps.yml @@ -12,6 +12,10 @@ - type: Item sprite: Objects/Devices/gps.rsi - type: HandheldGPS + - type: PhysicalComposition + materialComposition: + Steel: 400 + Glass: 150 - type: Tag tags: - GPS diff --git a/Resources/Prototypes/Entities/Objects/Tools/hand_labeler.yml b/Resources/Prototypes/Entities/Objects/Tools/hand_labeler.yml index 7e883953363..c97caad00f7 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/hand_labeler.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/hand_labeler.yml @@ -17,7 +17,7 @@ inHandsOnly: true - type: UserInterface interfaces: - - key: enum.HandLabelerUiKey.Key + enum.HandLabelerUiKey.Key: type: HandLabelerBoundUserInterface - type: HandLabeler whitelist: diff --git a/Resources/Prototypes/Entities/Objects/Tools/handheld_mass_scanner.yml b/Resources/Prototypes/Entities/Objects/Tools/handheld_mass_scanner.yml index 131bb1960ba..38b1f7cda9f 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/handheld_mass_scanner.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/handheld_mass_scanner.yml @@ -34,7 +34,7 @@ singleUser: true - type: UserInterface interfaces: - - key: enum.RadarConsoleUiKey.Key + enum.RadarConsoleUiKey.Key: type: RadarConsoleBoundUserInterface - type: StaticPrice price: 150 diff --git a/Resources/Prototypes/Entities/Objects/Tools/jammer.yml b/Resources/Prototypes/Entities/Objects/Tools/jammer.yml index beb36956275..b456a23f1f8 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/jammer.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/jammer.yml @@ -6,8 +6,26 @@ components: - type: Sprite sprite: Objects/Devices/jammer.rsi - state: jammer + layers: + - state: jammer + - state: jammer_high_charge + map: ["enum.RadioJammerLayers.LED"] + shader: unshaded + visible: false - type: RadioJammer + settings: + - wattage: 1 + range: 2.5 + message: radio-jammer-component-set-message-low + name: radio-jammer-component-setting-low + - wattage: 2 + range: 6 + message: radio-jammer-component-set-message-medium + name: radio-jammer-component-setting-medium + - wattage: 12 + range: 12 + message: radio-jammer-component-set-message-high + name: radio-jammer-component-setting-high - type: PowerCellSlot cellSlotId: cell_slot - type: ContainerContainer @@ -18,3 +36,15 @@ cell_slot: name: power-cell-slot-component-slot-name-default startingItem: PowerCellMedium + - type: Appearance + - type: GenericVisualizer + visuals: + enum.RadioJammerVisuals.LEDOn: + RadioJammerLayers.LED: + True: { visible: True } + False: { visible: False } + enum.RadioJammerVisuals.ChargeLevel: + RadioJammerLayers.LED: + Low: {state: jammer_low_charge} + Medium: {state: jammer_medium_charge} + High: {state: jammer_high_charge} diff --git a/Resources/Prototypes/Entities/Objects/Tools/jaws_of_life.yml b/Resources/Prototypes/Entities/Objects/Tools/jaws_of_life.yml index 12521ff644f..936e832224f 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/jaws_of_life.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/jaws_of_life.yml @@ -44,8 +44,8 @@ changeSound: /Audio/Items/change_jaws.ogg - type: MeleeWeapon wideAnimationRotation: 90 - attackRate: 0.75 - range: 1.75 + attackRate: 0.85 + range: 1.65 damage: types: Blunt: 10 @@ -53,7 +53,7 @@ bluntStaminaDamageFactor: 2.0 heavyRateModifier: 0.8 heavyDamageBaseModifier: 1.5 - heavyStaminaCost: 10 + heavyStaminaCost: 5 maxTargets: 1 angle: 20 soundHit: diff --git a/Resources/Prototypes/Entities/Objects/Tools/jetpacks.yml b/Resources/Prototypes/Entities/Objects/Tools/jetpacks.yml index a4c103847fe..bd05b8d0f39 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/jetpacks.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/jetpacks.yml @@ -40,7 +40,7 @@ size: Huge - type: UserInterface interfaces: - - key: enum.SharedGasTankUiKey.Key + enum.SharedGasTankUiKey.Key: type: GasTankBoundUserInterface - type: Clothing sprite: Objects/Tanks/Jetpacks/blue.rsi diff --git a/Resources/Prototypes/Entities/Objects/Tools/penlight.yml b/Resources/Prototypes/Entities/Objects/Tools/penlight.yml index 7f8a9b262c0..a7fb3a3f1c9 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/penlight.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/penlight.yml @@ -28,8 +28,8 @@ - type: Appearance - type: UserInterface interfaces: - - key: enum.PenLightUiKey.Key - type: PenLightBoundUserInterface + enum.PenLightUiKey.Key: + type: PenLightBoundUserInterface - type: ToggleableLightVisuals - type: ContainerContainer containers: diff --git a/Resources/Prototypes/Entities/Objects/Tools/spray_painter.yml b/Resources/Prototypes/Entities/Objects/Tools/spray_painter.yml index 903b8d3f906..ad31a6ec02d 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/spray_painter.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/spray_painter.yml @@ -13,8 +13,8 @@ key: enum.SprayPainterUiKey.Key - type: UserInterface interfaces: - - key: enum.SprayPainterUiKey.Key - type: SprayPainterBoundUserInterface + enum.SprayPainterUiKey.Key: + type: SprayPainterBoundUserInterface - type: SprayPainter colorPalette: red: '#FF1212FF' diff --git a/Resources/Prototypes/Entities/Objects/Tools/t-ray.yml b/Resources/Prototypes/Entities/Objects/Tools/t-ray.yml index c467974b743..8872b98c183 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/t-ray.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/t-ray.yml @@ -19,5 +19,9 @@ base: On: { state: tray-on } Off: { state: tray-off } + - type: PhysicalComposition + materialComposition: + Steel: 400 + Glass: 150 - type: StaticPrice price: 60 diff --git a/Resources/Prototypes/Entities/Objects/Tools/toolbox.yml b/Resources/Prototypes/Entities/Objects/Tools/toolbox.yml index 6702ae39d69..bfbb0573ca1 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/toolbox.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/toolbox.yml @@ -28,7 +28,7 @@ Blunt: 9 bluntStaminaDamageFactor: 2.0 heavyRateModifier: 0.8 - heavyStaminaCost: 10 + heavyStaminaCost: 7.5 angle: 80.5 soundHit: path: "/Audio/Weapons/smash.ogg" @@ -181,5 +181,5 @@ key: enum.ThiefBackpackUIKey.Key - type: UserInterface interfaces: - - key: enum.ThiefBackpackUIKey.Key + enum.ThiefBackpackUIKey.Key: type: ThiefBackpackBoundUserInterface diff --git a/Resources/Prototypes/Entities/Objects/Tools/tools.yml b/Resources/Prototypes/Entities/Objects/Tools/tools.yml index 561b1faa094..1f1b67349f4 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/tools.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/tools.yml @@ -35,12 +35,10 @@ range: 1.6 damage: types: - Piercing: 6 + Blunt: 6.5 heavyRateModifier: 0.9 heavyDamageBaseModifier: 1.2 - heavyStaminaCost: 5 maxTargets: 4 - angle: 60 soundHit: path: "/Audio/Items/wirecutter.ogg" - type: Tool @@ -97,13 +95,12 @@ storedRotation: -90 - type: MeleeWeapon wideAnimationRotation: -90 - attackRate: 1.2 + attackRate: 1.35 damage: types: - Piercing: 8 + Piercing: 6 heavyRateModifier: 0.75 heavyDamageBaseModifier: 1.5 - heavyStaminaCost: 5 maxTargets: 1 angle: 20 soundHit: @@ -157,14 +154,14 @@ state: storage - type: MeleeWeapon wideAnimationRotation: 135 - attackRate: 1.2 + attackRate: 0.9 + range: 1.6 damage: types: - Blunt: 12 + Blunt: 6.5 bluntStaminaDamageFactor: 1.5 heavyRateModifier: 0.75 heavyDamageBaseModifier: 1.75 - heavyStaminaCost: 5 angle: 100 soundHit: collection: MetalThud @@ -217,7 +214,7 @@ attackRate: 1.25 damage: types: - Blunt: 14 + Blunt: 6 bluntStaminaDamageFactor: 2 heavyStaminaCost: 5 soundHit: @@ -278,7 +275,6 @@ Shock: 2 heavyRateModifier: 0.9 heavyDamageBaseModifier: 1.2 - heavyStaminaCost: 5 maxTargets: 1 angle: 20 - type: Item @@ -297,11 +293,11 @@ inHandsOnly: true - type: UserInterface interfaces: - - key: enum.NetworkConfiguratorUiKey.List + enum.NetworkConfiguratorUiKey.List: type: NetworkConfiguratorBoundUserInterface - - key: enum.NetworkConfiguratorUiKey.Configure + enum.NetworkConfiguratorUiKey.Configure: type: NetworkConfiguratorBoundUserInterface - - key: enum.NetworkConfiguratorUiKey.Link + enum.NetworkConfiguratorUiKey.Link: type: NetworkConfiguratorBoundUserInterface - type: Tag tags: @@ -353,17 +349,17 @@ - DoorElectronicsConfigurator - type: UserInterface interfaces: - - key: enum.NetworkConfiguratorUiKey.List + enum.NetworkConfiguratorUiKey.List: type: NetworkConfiguratorBoundUserInterface - - key: enum.NetworkConfiguratorUiKey.Configure + enum.NetworkConfiguratorUiKey.Configure: type: NetworkConfiguratorBoundUserInterface - - key: enum.NetworkConfiguratorUiKey.Link + enum.NetworkConfiguratorUiKey.Link: type: NetworkConfiguratorBoundUserInterface - type: StaticPrice price: 56 - # - type: GuideHelp - # guides: - # - NetworkConfigurator + - type: GuideHelp + guides: + - NetworkConfigurator #Power tools #Later on these should switch probably switch damage when changing the tool behavior. @@ -423,7 +419,6 @@ Piercing: 8 heavyRateModifier: 0.9 heavyDamageBaseModifier: 1.2 - heavyStaminaCost: 5 maxTargets: 1 angle: 20 soundHit: @@ -482,8 +477,8 @@ price: 100 - type: UserInterface interfaces: - - key: enum.RcdUiKey.Key - type: RCDMenuBoundUserInterface + enum.RcdUiKey.Key: + type: RCDMenuBoundUserInterface - type: ActivatableUI key: enum.RcdUiKey.Key - type: ReverseEngineering # Nyano @@ -640,14 +635,14 @@ - type: MeleeWeapon wideAnimationRotation: 45 attackRate: 0.8 - range: 2.0 + range: 1.75 damage: types: - Blunt: 16 + Blunt: 8 bluntStaminaDamageFactor: 1.5 heavyRateModifier: 0.9 heavyDamageBaseModifier: 1.5 - heavyStaminaCost: 10 + heavyStaminaCost: 7.5 angle: 100 soundHit: collection: MetalThud @@ -691,12 +686,11 @@ attackRate: 0.9 damage: types: - Blunt: 8 + Blunt: 7 bluntStaminaDamageFactor: 2.0 heavyRateModifier: 0.8 heavyDamageBaseModifier: 1.5 - heavyStaminaCost: 5 - maxTargets: 1 + maxTargets: 2 angle: 20 soundHit: collection: MetalThud diff --git a/Resources/Prototypes/Entities/Objects/Tools/welders.yml b/Resources/Prototypes/Entities/Objects/Tools/welders.yml index 9f9df6f4f19..c501237b4c8 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/welders.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/welders.yml @@ -109,7 +109,6 @@ - type: WeldingHealing # Same as Brutepack - Estacao Pirata IPCs damageContainers: - Silicon - fuelcost: 5 damage: types: Blunt: -15 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.yml index 22eeeff859d..edca311cb17 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.yml @@ -10,7 +10,7 @@ tags: - CartridgeLightRifle proto: CartridgeLightRifle - capacity: 50 + capacity: 60 - type: Item size: Small - type: ContainerContainer diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/magnum.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/magnum.yml index c304f0af111..3f71f93440c 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/magnum.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/magnum.yml @@ -9,7 +9,7 @@ tags: - CartridgeMagnum proto: CartridgeMagnum - capacity: 60 + capacity: 12 - type: Item size: Small - type: ContainerContainer diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/rifle.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/rifle.yml index 8e6c79dfe57..03d6e337994 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/rifle.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/rifle.yml @@ -9,7 +9,7 @@ tags: - CartridgeRifle proto: CartridgeRifle - capacity: 60 + capacity: 50 - type: Item size: Small - type: ContainerContainer diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/shotgun.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/shotgun.yml index 831c3c33525..63ad52c0320 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/shotgun.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/shotgun.yml @@ -21,7 +21,7 @@ whitelist: tags: - ShellShotgun - capacity: 12 + capacity: 16 # Shotgun Shells - type: entity @@ -89,6 +89,19 @@ - state: boxwide - state: shellincendiary +- type: entity + name: shotgun uranium cartridges dispenser + parent: AmmoProviderShotgunShell + id: BoxShotgunUranium + description: A dispenser box full of uranium cartridges, designed for riot shotguns. + components: + - type: BallisticAmmoProvider + proto: ShellShotgunUranium + - type: Sprite + layers: + - state: boxwide + - state: shelluranium + - type: entity name: shotgun practice cartridges dispenser parent: AmmoProviderShotgunShell @@ -113,4 +126,4 @@ - type: Sprite layers: - state: boxwide - - state: shellslug \ No newline at end of file + - state: shellslug diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/light_rifle.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/light_rifle.yml index d420a5c3d81..296af23af5a 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/light_rifle.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/light_rifle.yml @@ -68,6 +68,19 @@ - state: mag-1 map: ["enum.GunVisualLayers.Mag"] +- type: entity + id: MagazineLightRifleEmpty + name: "magazine (.30 rifle any)" + suffix: empty + parent: MagazineLightRifle + components: + - type: BallisticAmmoProvider + proto: null + - type: Sprite + layers: + - state: base + map: ["enum.GunVisualLayers.Base"] + - type: entity id: MagazineLightRiflePractice name: "magazine (.30 rifle practice)" @@ -110,6 +123,14 @@ - state: mag-1 map: ["enum.GunVisualLayers.Mag"] +- type: entity + id: MagazineLightRifleIncendiary + name: "magazine (.30 rifle incendiary)" + parent: MagazineLightRifle + components: + - type: BallisticAmmoProvider + proto: CartridgeLightRifleIncendiary + - type: entity id: MagazineLightRifleMaxim name: "pan magazine (.30 rifle)" diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/magnum.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/magnum.yml index 6a1cc041ded..fc506ec594a 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/magnum.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/magnum.yml @@ -47,6 +47,19 @@ zeroVisible: false - type: Appearance +- type: entity + id: MagazineMagnumEmpty + name: pistol magazine (.45 magnum any) + suffix: empty + parent: BaseMagazineMagnum + components: + - type: BallisticAmmoProvider + proto: null + - type: Sprite + layers: + - state: base + map: ["enum.GunVisualLayers.Base"] + - type: entity id: MagazineMagnum name: pistol magazine (.45 magnum) @@ -117,6 +130,19 @@ - state: mag-1 map: ["enum.GunVisualLayers.Mag"] +- type: entity + id: MagazineMagnumSubMachineGunEmpty + name: "Vector magazine (.45 magnum any)" + suffix: empty + parent: BaseMagazineMagnumSubMachineGun + components: + - type: BallisticAmmoProvider + proto: null + - type: Sprite + layers: + - state: base + map: ["enum.GunVisualLayers.Base"] + - type: entity id: MagazineMagnumSubMachineGun name: "Vector magazine (.45 magnum)" diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/pistol.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/pistol.yml index 679acd299c4..bde2731937a 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/pistol.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/pistol.yml @@ -128,6 +128,14 @@ containers: ballistic-ammo: !type:Container +- type: entity + id: MagazinePistolSubMachineGunTopMountedEmpty + name: WT550 magazine (.35 auto top-mounted any) + parent: MagazinePistolSubMachineGunTopMounted + components: + - type: BallisticAmmoProvider + proto: null + - type: entity id: MagazinePistol name: pistol magazine (.35 auto) @@ -142,6 +150,28 @@ - state: mag-1 map: ["enum.GunVisualLayers.Mag"] +- type: entity + id: MagazinePistolEmpty + name: pistol magazine (.35 auto any) + suffix: empty + parent: MagazinePistol + components: + - type: BallisticAmmoProvider + proto: null + - type: Sprite + layers: + - state: base + map: ["enum.GunVisualLayers.Base"] + + +- type: entity + id: MagazinePistolIncendiary + name: pistol magazine (.35 auto incendiary) + parent: MagazinePistol + components: + - type: BallisticAmmoProvider + proto: CartridgePistolIncendiary + - type: entity id: MagazinePistolPractice name: pistol magazine (.35 auto practice) @@ -170,6 +200,33 @@ - state: mag-1 map: ["enum.GunVisualLayers.Mag"] +- type: entity + id: MagazinePistolUranium + name: pistol magazine (.35 auto uranium) + parent: BaseMagazinePistol + components: + - type: BallisticAmmoProvider + proto: CartridgePistolUranium + - type: Sprite + layers: + - state: uranium + map: ["enum.GunVisualLayers.Base"] + - state: mag-1 + map: ["enum.GunVisualLayers.Mag"] + +- type: entity + id: MagazinePistolHighCapacityEmpty + name: machine pistol magazine (.35 auto any) + suffix: empty + parent: BaseMagazinePistolHighCapacity + components: + - type: BallisticAmmoProvider + proto: null + - type: Sprite + layers: + - state: base + map: ["enum.GunVisualLayers.Base"] + - type: entity id: MagazinePistolHighCapacity name: machine pistol magazine (.35 auto) @@ -232,6 +289,19 @@ - state: mag-1 map: ["enum.GunVisualLayers.Mag"] +- type: entity + id: MagazinePistolSubMachineGunEmpty + name: SMG magazine (.35 auto any) + suffix: empty + parent: BaseMagazinePistolSubMachineGun + components: + - type: BallisticAmmoProvider + proto: null + - type: Sprite + layers: + - state: base + map: ["enum.GunVisualLayers.Base"] + - type: entity id: MagazinePistolSubMachineGunPractice name: SMG magazine (.35 auto practice) diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/rifle.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/rifle.yml index 5ba57dce4e2..7d8aeb93463 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/rifle.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/rifle.yml @@ -47,6 +47,27 @@ - state: mag-1 map: ["enum.GunVisualLayers.Mag"] +- type: entity + id: MagazineRifleEmpty + name: "magazine (.20 rifle any)" + suffix: empty + parent: MagazineRifle + components: + - type: BallisticAmmoProvider + proto: null + - type: Sprite + layers: + - state: base + map: ["enum.GunVisualLayers.Base"] + +- type: entity + id: MagazineRifleIncendiary + name: "magazine (.20 rifle incendiary)" + parent: MagazineRifle + components: + - type: BallisticAmmoProvider + proto: CartridgeRifleIncendiary + - type: entity id: MagazineRiflePractice name: "magazine (.20 rifle practice)" diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/shotgun.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/shotgun.yml index cbe9bbfbe97..5b0b16bf4bc 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/shotgun.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/shotgun.yml @@ -33,6 +33,15 @@ zeroVisible: false - type: Appearance +- type: entity + id: MagazineShotgunEmpty + name: ammo drum (.50 shells any) + suffix: empty + parent: BaseMagazineShotgun + components: + - type: BallisticAmmoProvider + proto: null + - type: entity id: MagazineShotgun name: ammo drum (.50 pellet) diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/SpeedLoaders/magnum.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/SpeedLoaders/magnum.yml index b06ca64d8f6..d8e2c908b6f 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/SpeedLoaders/magnum.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/SpeedLoaders/magnum.yml @@ -39,6 +39,27 @@ zeroVisible: false - type: Appearance +- type: entity + id: SpeedLoaderMagnumEmpty + name: "speed loader (.45 magnum any)" + parent: SpeedLoaderMagnum + components: + - type: BallisticAmmoProvider + proto: null + - type: Sprite + sprite: Objects/Weapons/Guns/Ammunition/SpeedLoaders/Magnum/magnum_speed_loader.rsi + layers: + - state: base + map: [ "enum.GunVisualLayers.Base" ] + +- type: entity + id: SpeedLoaderMagnumIncendiary + name: "speed loader (.45 magnum incendiary)" + parent: SpeedLoaderMagnum + components: + - type: BallisticAmmoProvider + proto: CartridgeMagnumIncendiary + - type: entity id: SpeedLoaderMagnumPractice name: "speed loader (.45 magnum practice)" diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/base_wieldable.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/base_wieldable.yml new file mode 100644 index 00000000000..690658d0c70 --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/base_wieldable.yml @@ -0,0 +1,13 @@ +# A basic inheritable template for a gun that is wieldable and has the standard inaccuracy. +- type: entity + id: BaseGunWieldable + abstract: true + components: + - type: Wieldable + unwieldOnUse: false + - type: GunWieldBonus + minAngle: -20 + maxAngle: -30 + - type: Gun + minAngle: 21 + maxAngle: 32 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/watergun.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/watergun.yml index e925bdab876..c96a1522d2e 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/watergun.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/watergun.yml @@ -34,8 +34,8 @@ canChangeTransferAmount: true - type: UserInterface interfaces: - - key: enum.TransferAmountUiKey.Key - type: TransferAmountBoundUserInterface + enum.TransferAmountUiKey.Key: + type: TransferAmountBoundUserInterface - type: DrawableSolution solution: chamber - type: RefillableSolution 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 0fa35b2bba9..3eb05908425 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml @@ -203,7 +203,7 @@ - type: entity name: laser rifle - parent: BaseWeaponBattery + parent: [BaseWeaponBattery, BaseGunWieldable] id: WeaponLaserCarbine description: Favoured by Nanotrasen Security for being cheap and easy to use. components: @@ -268,9 +268,18 @@ maxCharge: 2000 startingCharge: 2000 +- type: entity + name: antique pulse pistol + parent: WeaponPulsePistol + id: WeaponPulsePistolHoS + description: One of the many weapons belonging to the Head of Security's private collection. This pistol is engraved with the words, "Forgive Us, Mother Sol'" + components: + - type: StealTarget + stealGroup: HoSAntiqueWeapon + - type: entity name: pulse carbine - parent: BaseWeaponBattery + parent: [BaseWeaponBattery, BaseGunWieldable] id: WeaponPulseCarbine description: A high tech energy carbine favoured by the NT-ERT operatives. components: @@ -301,7 +310,7 @@ - type: entity name: pulse rifle - parent: BaseWeaponBattery + parent: [BaseWeaponBattery, BaseGunWieldable] id: WeaponPulseRifle description: A weapon that is almost as infamous as its users. components: @@ -328,7 +337,7 @@ - type: entity name: laser cannon - parent: BaseWeaponBattery + parent: [BaseWeaponBattery, BaseGunWieldable] id: WeaponLaserCannon description: A heavy duty, high powered laser weapon. components: @@ -383,7 +392,7 @@ - type: entity name: x-ray cannon - parent: BaseWeaponBattery + parent: [BaseWeaponBattery, BaseGunWieldable] id: WeaponXrayCannon description: An experimental weapon that uses concentrated x-ray energy against its target. components: diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Bow/bow.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Bow/bow.yml index db98c6eabe9..32b4fc6075a 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Bow/bow.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Bow/bow.yml @@ -12,7 +12,8 @@ - type: Clothing quickEquip: false slots: - - Back + - Back + - suitStorage - type: Wieldable wieldSound: path: /Audio/Items/bow_pull.ogg diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml index 9072d3c3778..e0359b1a7a0 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml @@ -15,6 +15,8 @@ - Back - suitStorage - type: Wieldable + unwieldOnUse: false + - type: GunRequiresWield - type: GunWieldBonus minAngle: -20 maxAngle: -20 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml index 594ffb4d4d9..be4ea534d7d 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml @@ -22,7 +22,7 @@ - type: entity name: china lake - parent: BaseWeaponLauncher + parent: [BaseWeaponLauncher, BaseGunWieldable] id: WeaponLauncherChinaLake description: PLOOP components: @@ -375,3 +375,29 @@ tags: - CartridgeRocket proto: ImmovableRodSlow + +# Frontier mail RPDS +- type: entity + name: mail RPDS + parent: WeaponLauncherChinaLake + id: WeaponMailLake + description: Rap(b?)id Parcel Delivery System + components: + - type: Sprite + sprite: Objects/Weapons/Guns/Launchers/mail.rsi + layers: + - state: icon + map: ["enum.GunVisualLayers.Base"] + - type: Clothing + sprite: Objects/Weapons/Guns/Launchers/mail.rsi + quickEquip: false + slots: + - Back + - Belt + - suitStorage + - type: BallisticAmmoProvider + proto: null + whitelist: + tags: + - MailCapsule + capacity: 4 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Pistols/pistols.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Pistols/pistols.yml index 410664e46e4..c4b2082f387 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Pistols/pistols.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Pistols/pistols.yml @@ -65,17 +65,16 @@ - type: Appearance - type: StaticPrice price: 500 + - type: AmmoCounter - type: entity name: viper parent: BaseWeaponPistol id: WeaponPistolViper - description: A small, easily concealable, but somewhat underpowered gun, produced by a bulk arms manufacturer now defunct for over a century. Uses .35 auto ammo. # DeltaV - change description to reflect forced semi + description: A small, easily concealable, but somewhat underpowered gun, produced by a bulk arms manufacturer now defunct for over a century. Uses .35 auto ammo. components: - type: Sprite sprite: Objects/Weapons/Guns/Pistols/viper.rsi - availableModes: # DeltaV - force semi for balance - - SemiAuto - type: ItemSlots slots: gun_magazine: @@ -109,6 +108,48 @@ path: /Audio/Weapons/Guns/Gunshots/pistol.ogg fireOnDropChance: 0.3 +- type: entity + name: viper + parent: WeaponPistolViper + id: WeaponPistolViperSecurity + description: A small, easily concealable, but somewhat underpowered gun, produced by a bulk arms manufacturer now defunct for over a century. + Uses .35 auto ammo. The serial number on the handguard marks this gun as belonging to an NT Security Officer. + suffix: Security Loadouts + +- type: entity + id: WeaponPistolViperNonLethal + parent: WeaponPistolViper + suffix: Non-lethal + components: + - type: Sprite + sprite: Objects/Weapons/Guns/Pistols/vipernl.rsi + - type: ItemSlots + slots: + gun_magazine: + name: Magazine + startingItem: MagazinePistolRubber + insertSound: /Audio/Weapons/Guns/MagIn/pistol_magin.ogg + ejectSound: /Audio/Weapons/Guns/MagOut/pistol_magout.ogg + priority: 2 + whitelist: + tags: + - MagazinePistol + - MagazinePistolHighCapacity + gun_chamber: + name: Chamber + startingItem: CartridgePistolRubber + priority: 1 + whitelist: + tags: + - CartridgePistol + +- type: entity + id: WeaponPistolViperSecurityNonLethal + parent: WeaponPistolViperNonLethal + suffix: Non-lethal, SecurityLoadouts + description: A small, easily concealable, but somewhat underpowered gun, produced by a bulk arms manufacturer now defunct for over a century. + Uses .35 auto ammo. The serial number on the handguard marks this gun as belonging to an NT Security Officer. + - type: entity name: cobra parent: BaseWeaponPistol @@ -181,11 +222,21 @@ path: /Audio/Weapons/Guns/Gunshots/mk58.ogg fireOnDropChance: 0.5 +- type: entity + name: mk 58 + parent: WeaponPistolMk58 + id: WeaponPistolMk58Security + description: A cheap, ubiquitous sidearm, produced by a NanoTrasen subsidiary. Uses .35 auto ammo. + The serial number on the handguard marks this gun as belonging to an NT Security Officer. + suffix: Security Loadouts + - type: entity id: WeaponPistolMk58Nonlethal parent: WeaponPistolMk58 suffix: Non-lethal components: + - type: Sprite + sprite: Objects/Weapons/Guns/Pistols/mk58nl.rsi - type: ItemSlots slots: gun_magazine: @@ -205,6 +256,13 @@ tags: - CartridgePistol +- type: entity + id: WeaponPistolMk58SecurityNonlethal + parent: WeaponPistolMk58Nonlethal + suffix: Non-lethal, Security Loadouts + description: A cheap, ubiquitous sidearm, produced by a NanoTrasen subsidiary. Uses .35 auto ammo. + The serial number on the handguard marks this gun as belonging to an NT Security Officer. + - type: entity name: N1984 parent: BaseWeaponPistol @@ -253,9 +311,19 @@ - type: entity name: N1984 parent: WeaponPistolN1984 - id: WeaponPistolN1984Nonlethal + id: WeaponPistolN1984Security # the spaces in description are for formatting. + description: The sidearm of any self respecting officer. Comes in .45 magnum, the lord's caliber. + The serial number on the handguard marks this gun as belonging to an NT Security Officer. + suffix: Security Loadouts + +- type: entity + name: N1984 + parent: WeaponPistolN1984 + id: WeaponPistolN1984NonLethal suffix: Non-lethal components: + - type: Sprite + sprite: Objects/Weapons/Guns/Pistols/N1984nl.rsi - type: ItemSlots slots: gun_magazine: @@ -274,3 +342,11 @@ whitelist: tags: - CartridgeMagnum + +- type: entity + name: N1984 + parent: WeaponPistolN1984NonLethal + id: WeaponPistolN1984SecurityNonLethal + description: The sidearm of any self respecting officer. Comes in .45 magnum, the lord's caliber. + The serial number on the handguard marks this gun as belonging to an NT Security Officer. + suffix: Security Loadouts diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/arrows.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/arrows.yml index 52c5dc8a9db..6f925139fb1 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/arrows.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/arrows.yml @@ -1,4 +1,4 @@ -- type: entity +- type: entity parent: BaseItem id: BaseArrow abstract: true @@ -35,7 +35,6 @@ - type: Tag tags: - Arrow - - CannonRestrict - type: Projectile deleteOnCollide: false onlyCollideWhenShot: true diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/hitscan.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/hitscan.yml index 2cff468f301..4a12161f320 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/hitscan.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/hitscan.yml @@ -137,3 +137,20 @@ impactFlash: sprite: Objects/Weapons/Guns/Projectiles/projectiles.rsi state: impact_beam_heavy2 + +# Glimmer wisp laser +- type: hitscan + id: WispLash + damage: + types: + Cold: 8 + Shock: 8 + muzzleFlash: + sprite: Objects/Weapons/Guns/Projectiles/projectiles.rsi + state: muzzle_omni + travelFlash: + sprite: Objects/Weapons/Guns/Projectiles/projectiles.rsi + state: beam_omni + impactFlash: + sprite: Objects/Weapons/Guns/Projectiles/projectiles.rsi + state: impact_omni diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/magic.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/magic.yml index 3556d1c8f8b..b3abbfdfd3f 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/magic.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/magic.yml @@ -30,6 +30,39 @@ - type: IgniteOnCollide fireStacks: 0.35 +- type: entity + noSpawn: true + parent: BaseBulletTrigger + id: ProjectileDragonsBreath + name: dragon's breath + description: Try not to get toasted. + components: + - type: PointLight + color: "#E25822" + radius: 3.0 + energy: 5.0 + - type: Sprite + sprite: Objects/Weapons/Guns/Projectiles/magic.rsi + layers: + - state: fireball + shader: unshaded + - type: IgnitionSource + temperature: 1000 + ignited: true + - type: RepeatingTrigger + delay: 0.5 # line of fire as well as if it hits something + - type: ExplodeOnTrigger + - type: Explosive + explosionType: Default + totalIntensity: 5 # low intensity, the point is to burn attackers not to break open walls, dragons can just eat them + intensitySlope: 1 + maxIntensity: 3 + canCreateVacuum: false + deleteAfterExplosion: false + repeatable: true + - type: TimedDespawn + lifetime: 5 + - type: entity id: ProjectileAnomalyFireball name: fireball diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml index b8d5d047ad5..6c598987414 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml @@ -15,7 +15,6 @@ - type: Tag tags: - Sidearm - - Revolver - type: Clothing sprite: Objects/Weapons/Guns/Revolvers/deckard.rsi quickEquip: false @@ -26,7 +25,6 @@ - type: Gun selectedMode: SemiAuto fireRate: 1.5 - resetOnHandSelected: false availableModes: - SemiAuto soundGunshot: @@ -47,9 +45,9 @@ chambers: [ True, True, True, True, True, True ] ammoSlots: [ null, null, null, null, null, null ] soundEject: - path: /Audio/_Nuclear14/Weapons/Effects/Reload/Revolvers/revolver_magout.ogg # Nuclear 14 + path: /Audio/Weapons/Guns/MagOut/revolver_magout.ogg soundInsert: - path: /Audio/_Nuclear14/Weapons/Effects/Reload/Revolvers/revolver_magin.ogg # Nuclear 14 + path: /Audio/Weapons/Guns/MagIn/revolver_magin.ogg - type: StaticPrice price: 500 @@ -81,6 +79,27 @@ - type: StaticPrice price: 1500 +- type: entity + name: Deckard + parent: WeaponRevolverDeckard + id: WeaponRevolverDeckardSecurity + description: A rare, custom-built revolver. Use when there is no time for Voight-Kampff test. Uses .45 magnum ammo. + The serial number on the handguard marks this gun as belonging to an NT Security Officer. + +- type: entity + name: Deckard + parent: WeaponRevolverDeckardSecurity + id: WeaponRevolverDeckardNonLethalSecurity + description: A rare, custom-built revolver. Use when you need to spare the Replicants. Comes with .45 magnum rubber. + The serial number on the handguard marks this gun as belonging to an NT Security Officer. + components: + - type: RevolverAmmoProvider + whitelist: + tags: + - CartridgeMagnum + - SpeedLoaderMagnum + proto: CartridgeMagnumRubber + - type: entity name: Inspector parent: BaseWeaponRevolver @@ -96,11 +115,32 @@ chambers: [ True, True, True, True, True, True ] ammoSlots: [ null, null, null, null, null, null ] +- type: entity + name: Inspector + parent: WeaponRevolverInspector + id: WeaponRevolverInspectorSecurity + description: A detective's best friend. Uses .45 magnum ammo. + The serial number on the handguard marks this gun as belonging to an NT Security Officer. + +- type: entity + name: Inspector + parent: WeaponRevolverInspectorSecurity + id: WeaponRevolverInspectorNonLethalSecurity + description: A detective's best friend. Comes loaded with .45 magnum rubber. + The serial number on the handguard marks this gun as belonging to an NT Security Officer. + components: + - type: RevolverAmmoProvider + whitelist: + tags: + - CartridgeMagnum + - SpeedLoaderMagnum + proto: CartridgeMagnumRubber + - type: entity name: Mateba parent: BaseWeaponRevolver id: WeaponRevolverMateba - description: The iconic sidearm of the dreaded death squads. Uses .45 magnum ammo. + description: A distinctive revolver of an ancient Sol' design that was once seen as a rare collectible. It is in common manufacture by many companies in the Biesel Republic. Uses .45 magnum ammo. components: - type: Sprite sprite: Objects/Weapons/Guns/Revolvers/mateba.rsi @@ -115,7 +155,7 @@ name: Python parent: BaseWeaponRevolver id: WeaponRevolverPython - description: A robust revolver favoured by Syndicate agents. Uses .45 magnum ammo. + description: An iconic large-framed revolver of ancient Sol' design. It is commonly manufactured by many companies all over the colonies. Uses .45 magnum ammo. components: - type: Sprite sprite: Objects/Weapons/Guns/Revolvers/python.rsi @@ -132,12 +172,38 @@ volume: 2.25 fireOnDropChance: 0.3 +- type: entity + name: Python + parent: WeaponRevolverPython + id: WeaponRevolverPythonSecurity + description: An iconic large-framed revolver of ancient Sol' design. It is commonly manufactured by many companies all over the colonies. Uses .45 magnum ammo. + The serial number on the handguard marks this gun as belonging to an NT Security Officer. + +- type: entity + name: Python + parent: WeaponRevolverPythonSecurity + id: WeaponRevolverPythonNonlethalSecurity + components: + - type: RevolverAmmoProvider + whitelist: + tags: + - CartridgeMagnum + - SpeedLoaderMagnum + proto: CartridgeMagnumRubber + capacity: 6 + chambers: [ True, True, True, True, True, True ] + ammoSlots: [ null, null, null, null, null, null ] + soundEject: + path: /Audio/Weapons/Guns/MagOut/revolver_magout.ogg + soundInsert: + path: /Audio/Weapons/Guns/MagIn/revolver_magin.ogg + - type: entity name: Python parent: WeaponRevolverPython id: WeaponRevolverPythonAP # For the uplink. suffix: armor-piercing - description: A robust revolver favoured by Syndicate agents. Uses .45 magnum ammo. + description: An iconic large-framed revolver of ancient Sol' design. It is commonly manufactured by many companies all over the colonies. Uses .45 magnum ammo. components: - type: RevolverAmmoProvider whitelist: diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Rifles/rifles.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Rifles/rifles.yml index d03d91966d0..4242f13e40c 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Rifles/rifles.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Rifles/rifles.yml @@ -1,6 +1,6 @@ - type: entity name: BaseWeaponRifle - parent: BaseItem + parent: [BaseItem, BaseGunWieldable] id: BaseWeaponRifle description: A rooty tooty point and shooty. abstract: true @@ -14,6 +14,8 @@ slots: - Back - suitStorage + - type: Wieldable + - type: GunRequiresWield - type: AmmoCounter - type: Gun fireRate: 5 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml index 3962f6e1f57..b448ddea3e4 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml @@ -20,7 +20,7 @@ maxAngle: 16 fireRate: 8 angleIncrease: 3 - angleDecay: 16 + angleDecay: 16 selectedMode: FullAuto availableModes: - SemiAuto @@ -81,9 +81,9 @@ - type: entity name: C-20r sub machine gun - parent: BaseWeaponSubMachineGun + parent: [BaseWeaponSubMachineGun, BaseGunWieldable] id: WeaponSubMachineGunC20r - description: A firearm that is often used by the infamous nuclear operatives. Uses .35 auto ammo. + description: Manufactured by Cybersun-Armaments, the C-20r is one of the most popular personal small-arms in the Coalition of Colonies. Uses .35 auto ammo. components: - type: Sprite sprite: Objects/Weapons/Guns/SMGs/c20r.rsi @@ -94,7 +94,13 @@ map: ["enum.GunVisualLayers.Mag"] - type: Clothing sprite: Objects/Weapons/Guns/SMGs/c20r.rsi + - type: Wieldable + - type: GunWieldBonus + minAngle: -19 + maxAngle: -16 - type: Gun + minAngle: 21 + maxAngle: 32 shotsPerBurst: 5 availableModes: - SemiAuto @@ -111,9 +117,18 @@ zeroVisible: true - type: Appearance +- type: entity + name: antique C-20r submachine gun + parent: WeaponSubMachineGunC20r + id: WeaponSubMachineGunC20rHoS + description: This heavily worn submachine gun is engraved with the words, "Remember Mars". + components: + - type: StealTarget + stealGroup: HoSAntiqueWeapon + - type: entity name: Drozd - parent: BaseWeaponSubMachineGun + parent: [BaseWeaponSubMachineGun, BaseGunWieldable] id: WeaponSubMachineGunDrozd description: An excellent fully automatic Heavy SMG. components: @@ -126,7 +141,13 @@ map: ["enum.GunVisualLayers.Mag"] - type: Clothing sprite: Objects/Weapons/Guns/SMGs/drozd.rsi + - type: Wieldable + - type: GunWieldBonus + minAngle: -19 + maxAngle: -16 - type: Gun + minAngle: 21 + maxAngle: 32 fireRate: 6 selectedMode: FullAuto soundGunshot: @@ -234,7 +255,7 @@ minAngle: 1 maxAngle: 6 angleIncrease: 1.5 - angleDecay: 6 + angleDecay: 6 selectedMode: FullAuto shotsPerBurst: 5 availableModes: @@ -266,6 +287,15 @@ zeroVisible: true - type: Appearance +- type: entity + name: antique Wt550 + id: WeaponSubMachineGunWt550HoS + parent: WeaponSubMachineGunWt550 + description: A prized possession of the station's Head of Security. The smell of dried blood lingers on this weapon's muzzle. A small torch with 24 stars surrounding it has been engraved on the grip. + components: + - type: StealTarget + stealGroup: HoSAntiqueWeapon + # Rubber - type: entity name: Drozd diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml index 52b05b6d60b..44ee4a08c1b 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml @@ -47,7 +47,7 @@ - type: entity name: Bulldog # Don't parent to BaseWeaponShotgun because it differs significantly - parent: BaseItem + parent: [BaseItem, BaseGunWieldable] id: WeaponShotgunBulldog description: It's a magazine-fed shotgun designed for close quarters combat. Uses .50 shotgun shells. components: @@ -67,6 +67,7 @@ - Back - suitStorage - type: AmmoCounter + - type: GunRequiresWield #remove when inaccuracy on spreads is fixed - type: Gun fireRate: 2 selectedMode: FullAuto @@ -77,6 +78,7 @@ soundEmpty: path: /Audio/Weapons/Guns/Empty/empty.ogg fireOnDropChance: 0.3 + - type: Wieldable - type: ItemSlots slots: gun_magazine: @@ -101,9 +103,18 @@ - type: StaticPrice price: 500 +- type: entity + name: antique Bulldog + parent: WeaponShotgunBulldog + id: WeaponShotgunBulldogHoS + description: This is a seemingly ordinary shotgun, no different from those issued as standard in the Republic of Biesel Navy. A close inspection reveals that this weapon's serial number is 000000013. + components: + - type: StealTarget + stealGroup: HoSAntiqueWeapon + - type: entity name: double-barreled shotgun - parent: BaseWeaponShotgun + parent: [BaseWeaponShotgun, BaseGunWieldable] id: WeaponShotgunDoubleBarreled description: An immortal classic. Uses .50 shotgun shells. components: @@ -113,11 +124,12 @@ size: Normal shape: - 0,0,4,0 - sprite: Objects/Weapons/Guns/Shotguns/inhands_64x.rsi - heldPrefix: db + sprite: Objects/Weapons/Guns/Shotguns/db_shotgun_inhands_64x.rsi + - type: GunRequiresWield #remove when inaccuracy on spreads is fixed - type: Gun fireRate: 2 fireOnDropChance: 0.5 + - type: Wieldable - type: BallisticAmmoProvider capacity: 2 - type: Construction @@ -137,15 +149,19 @@ - type: entity name: Enforcer - parent: BaseWeaponShotgun + parent: [BaseWeaponShotgun, BaseGunWieldable] id: WeaponShotgunEnforcer description: A premium combat shotgun based on the Kammerer design, featuring an upgraded clip capacity. .50 shotgun shells. components: - type: Sprite - sprite: DeltaV/Objects/Weapons/Guns/Shotguns/enforcer.rsi # Delta-V + sprite: DeltaV/Objects/Weapons/Guns/Shotguns/enforcer.rsi - type: Clothing - sprite: DeltaV/Objects/Weapons/Guns/Shotguns/enforcer.rsi # Delta-V + sprite: DeltaV/Objects/Weapons/Guns/Shotguns/enforcer.rsi + - type: Item + sprite: Objects/Weapons/Guns/Shotguns/enforcer_inhands_64x.rsi - type: BallisticAmmoProvider + - type: Wieldable + - type: GunRequiresWield - type: entity parent: WeaponShotgunEnforcer @@ -157,7 +173,7 @@ - type: entity name: Kammerer - parent: BaseWeaponShotgun + parent: [BaseWeaponShotgun, BaseGunWieldable] id: WeaponShotgunKammerer description: When an old Remington design meets modern materials, this is the result. A favourite weapon of militia forces throughout many worlds. Uses .50 shotgun shells. components: @@ -165,17 +181,18 @@ size: Normal shape: - 0,0,4,0 - sprite: Objects/Weapons/Guns/Shotguns/inhands_64x.rsi - heldPrefix: pump + sprite: Objects/Weapons/Guns/Shotguns/pump_inhands_64x.rsi - type: Sprite - sprite: DeltaV/Objects/Weapons/Guns/Shotguns/pump.rsi # Delta-V + sprite: DeltaV/Objects/Weapons/Guns/Shotguns/pump.rsi - type: Clothing - sprite: DeltaV/Objects/Weapons/Guns/Shotguns/pump.rsi # Delta-V + sprite: Objects/Weapons/Guns/Shotguns/pump.rsi + - type: GunRequiresWield #remove when inaccuracy on spreads is fixed - type: BallisticAmmoProvider capacity: 4 - type: Tag tags: - WeaponShotgunKammerer + - type: Wieldable - type: entity name: sawn-off shotgun @@ -189,8 +206,7 @@ sprite: DeltaV/Objects/Weapons/Guns/Shotguns/sawn.rsi # Delta-V - type: Item size: Small - sprite: Objects/Weapons/Guns/Shotguns/inhands_64x.rsi - heldPrefix: sawn + sprite: Objects/Weapons/Guns/Shotguns/sawn_inhands_64x.rsi - type: Gun fireRate: 4 fireOnDropChance: 0.5 @@ -242,7 +258,7 @@ - type: entity name: blunderbuss - parent: BaseWeaponShotgun + parent: [BaseWeaponShotgun, BaseGunWieldable] id: WeaponShotgunBlunderbuss suffix: Pirate description: Deadly at close range. @@ -253,6 +269,7 @@ - 0,0,4,0 - type: Sprite sprite: Objects/Weapons/Guns/Shotguns/blunderbuss.rsi + - type: GunRequiresWield #remove when inaccuracy on spreads is fixed - type: Gun fireRate: 2 fireOnDropChance: 1 @@ -260,10 +277,11 @@ capacity: 1 - type: StaticPrice price: 0 + - type: Wieldable - type: entity name: improvised shotgun - parent: BaseWeaponShotgun + parent: [BaseWeaponShotgun, BaseGunWieldable] id: WeaponShotgunImprovised description: A shitty, hand-made shotgun that uses .50 shotgun shells. It can only hold one round in the chamber. components: @@ -275,8 +293,8 @@ size: Normal shape: - 0,0,4,0 - sprite: Objects/Weapons/Guns/Shotguns/inhands_64x.rsi - heldPrefix: improvised + sprite: Objects/Weapons/Guns/Shotguns/improvised_shotgun_inhands_64x.rsi + - type: GunRequiresWield #remove when inaccuracy on spreads is fixed - type: Gun fireRate: 4 #No reason to stifle the firerate since you have to manually reload every time anyways. fireOnDropChance: 1 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml index 4b58642c307..88c00bedbd5 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml @@ -18,6 +18,8 @@ - Back - suitStorage - type: AmmoCounter + - type: Wieldable + - type: GunRequiresWield - type: Gun fireRate: 0.75 selectedMode: SemiAuto @@ -40,7 +42,7 @@ - type: entity name: Kardashev-Mosin - parent: BaseWeaponSniper + parent: [BaseWeaponSniper, BaseGunWieldable] id: WeaponSniperMosin description: A weapon for hunting, or endless trench warfare. Uses .30 rifle ammo. components: @@ -67,7 +69,7 @@ - type: entity name: Hristov - parent: BaseWeaponSniper + parent: [BaseWeaponSniper, BaseGunWieldable] id: WeaponSniperHristov description: A portable anti-materiel rifle. Fires armor piercing 14.5mm shells. Uses .60 anti-materiel ammo. components: @@ -81,6 +83,7 @@ - CartridgeAntiMateriel capacity: 5 proto: CartridgeAntiMateriel + - type: Telescope - type: entity name: musket diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/pneumatic_cannon.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/pneumatic_cannon.yml index ae1f5df3c15..12511729460 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/pneumatic_cannon.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/pneumatic_cannon.yml @@ -22,7 +22,6 @@ selectedMode: SemiAuto availableModes: - SemiAuto - - FullAuto soundGunshot: path: /Audio/Effects/thunk.ogg soundEmpty: @@ -34,10 +33,7 @@ - type: Storage maxItemSize: Normal grid: - - 0,0,3,3 - blacklist: - tags: - - CannonRestrict + - 0,0,1,1 - type: Appearance - type: ItemMapper containerWhitelist: [gas_tank] diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/baseball_bat.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/baseball_bat.yml index 8780d377e05..60f599af934 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/baseball_bat.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/baseball_bat.yml @@ -17,7 +17,7 @@ bluntStaminaDamageFactor: 2.0 heavyRateModifier: 0.5 heavyDamageBaseModifier: 1.75 - heavyStaminaCost: 15 + heavyStaminaCost: 10 maxTargets: 2 angle: 120 soundHit: @@ -43,6 +43,9 @@ node: bat - type: UseDelay delay: 1 + - type: PhysicalComposition + materialComposition: + Wood: 250 - type: Tag tags: - BaseballBat diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/cane.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/cane.yml new file mode 100644 index 00000000000..5c26020d72c --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/cane.yml @@ -0,0 +1,98 @@ +- type: entity + parent: BaseItem + id: Cane + name: cane + description: A wooden cane. + components: + - type: Sprite + sprite: Objects/Weapons/Melee/cane.rsi + state: cane + - type: Item + size: Normal + sprite: Objects/Weapons/Melee/cane.rsi + - type: Appearance + - type: MeleeWeapon + wideAnimationRotation: 45 + damage: + types: + Blunt: 5 + - type: StaminaDamageOnHit + damage: 5 + - type: Wieldable + - type: IncreaseDamageOnWield + damage: + types: + Blunt: 3 + - type: UseDelay + delay: 1 + +- type: entity + name: cane blade + parent: BaseItem + id: CaneBlade + description: A sharp blade with a cane shaped hilt. + components: + - type: Sharp + - type: Sprite + sprite: Objects/Weapons/Melee/cane_blade.rsi + state: icon + - type: MeleeWeapon + wideAnimationRotation: 65 + attackRate: 1.5 + damage: + types: + Slash: 14 + soundHit: + path: /Audio/Weapons/bladeslice.ogg + - type: Item + size: Normal + sprite: Objects/Weapons/Melee/cane_blade.rsi + - type: Tag + tags: + - CaneBlade + - type: DisarmMalus + +- type: entity + parent: Cane + id: CaneSheath + suffix: Empty + components: + - type: Sprite + sprite: Objects/Weapons/Melee/cane.rsi + state: cane-empty + - type: ContainerContainer + containers: + storagebase: !type:Container + ents: [] + item: !type:ContainerSlot + - type: UserInterface + interfaces: + enum.StorageUiKey.Key: + type: StorageBoundUserInterface + - type: ItemSlots + slots: + item: + name: CaneBlade + insertVerbText: sheath-insert-verb + ejectVerbText: sheath-eject-verb + whitelist: + tags: + - CaneBlade + insertSound: /Audio/Items/sheath.ogg + ejectSound: /Audio/Items/unsheath.ogg + - type: ItemMapper + mapLayers: + cane: + whitelist: + tags: + - CaneBlade + +- type: entity + id: CaneSheathFilled + parent: CaneSheath + suffix: Filled + components: + - type: ContainerFill + containers: + item: + - CaneBlade diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/cult.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/cult.yml index 5e9d789b658..a681ef52ebf 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/cult.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/cult.yml @@ -11,7 +11,7 @@ - type: MeleeWeapon wideAnimationRotation: -135 attackRate: 1.25 - range: 1.4 + range: 1.5 damage: types: Slash: 8 @@ -39,12 +39,12 @@ - type: MeleeWeapon wideAnimationRotation: -135 attackRate: 0.75 - range: 1.75 + range: 1.65 damage: types: Slash: 12 heavyDamageBaseModifier: 1.2 - heavyStaminaCost: 10 + heavyStaminaCost: 7.5 maxTargets: 6 angle: 90 - type: Item @@ -70,7 +70,7 @@ state: icon - type: MeleeWeapon wideAnimationRotation: -135 - attackRate: 0.75 + attackRate: 0.85 range: 1.75 damage: types: @@ -79,7 +79,7 @@ Structural: 5 heavyRateModifier: 0.9 heavyDamageBaseModifier: 1.2 - heavyStaminaCost: 10 + heavyStaminaCost: 7.5 angle: 100 soundHit: collection: MetalThud diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml index 0cbc824365d..37b2b03d9e7 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml @@ -78,9 +78,24 @@ malus: 0 - type: Reflect enabled: false + reflectProb: 0.5 + minReflectProb: 0.25 - type: IgnitionSource temperature: 700 +- type: entity + name: antique energy sword + parent: EnergySword + id: EnergySwordHoS + description: An elegant weapon fit for a prince, this otherwise plain silver hilt is engraved with, "My Love". + components: + - type: EnergySword + activatedColor: "#00CCFF" + colorOptions: + - "#00CCFF" + - type: StealTarget + stealGroup: HoSAntiqueWeapon + - type: entity name: pen parent: EnergySword @@ -225,7 +240,7 @@ name: double-bladed energy sword parent: EnergySword id: EnergySwordDouble - description: Syndicate Command Interns thought that having one blade on the energy sword was not enough. This can be stored in pockets. + description: Syndicate Command's intern thought that having only one blade on energy swords was not cool enough. This can be stored in pockets. components: - type: EnergySword - type: ItemToggle @@ -276,7 +291,8 @@ size: Small sprite: Objects/Weapons/Melee/e_sword_double-inhands.rsi - type: Reflect - reflectProb: .80 #DeltaV: 80% Energy Reflection but no ballistics. + reflectProb: .80 + minReflectProb: .65 spread: 75 reflects: - Energy #DeltaV: 80% Energy Reflection but no ballistics. diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/fireaxe.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/fireaxe.yml index b30a2855796..6630a22ea7d 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/fireaxe.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/fireaxe.yml @@ -43,6 +43,7 @@ - type: Tool qualities: - Prying + - Axing - type: ToolTileCompatible - type: Prying - type: UseDelay 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 5cb5795c8a5..43a4fb6c59b 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/home_run_bat.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/home_run_bat.yml @@ -14,8 +14,7 @@ bluntStaminaDamageFactor: 2.0 heavyRateModifier: 0.5 heavyDamageBaseModifier: 1.75 - heavyStaminaCost: 25 - maxTargets: 2 + heavyStaminaCost: 15 angle: 120 soundHit: collection: ExplosionSmall diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/knife.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/knife.yml index b08e43498a8..5502f752892 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/knife.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/knife.yml @@ -13,13 +13,12 @@ - type: MeleeWeapon wideAnimationRotation: -135 attackRate: 1.25 - range: 1.4 + range: 1.5 damage: types: Slash: 8 heavyRateModifier: 0.8 heavyDamageBaseModifier: 1.2 - heavyStaminaCost: 5 maxTargets: 3 angle: 40 soundHit: @@ -48,9 +47,9 @@ state: icon - type: Item sprite: Objects/Weapons/Melee/kitchen_knife.rsi - # - type: GuideHelp - # guides: - # - Chef + - type: GuideHelp + guides: + - Chef - type: entity name: butcher's cleaver @@ -75,9 +74,9 @@ - type: Item size: Normal sprite: Objects/Weapons/Melee/cleaver.rsi - # - type: GuideHelp - # guides: - # - Chef + - type: GuideHelp + guides: + - Chef - type: entity name: combat knife @@ -95,7 +94,6 @@ - type: MeleeWeapon wideAnimationRotation: -135 attackRate: 1.5 - range: 1.4 damage: types: Slash: 9 @@ -122,7 +120,6 @@ - type: MeleeWeapon wideAnimationRotation: -135 attackRate: 1.25 - range: 1.5 damage: types: Slash: 8 @@ -204,7 +201,7 @@ state: icon - type: MeleeWeapon attackRate: 1.75 - range: 0.75 + range: 1.4 damage: types: Slash: 5.5 @@ -278,7 +275,6 @@ tags: - CombatKnife - Knife - - CannonRestrict - type: Sprite sprite: Objects/Weapons/Melee/throwing_knife.rsi state: icon diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/mining.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/mining.yml index a1addba2625..38a203ce908 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/mining.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/mining.yml @@ -43,8 +43,8 @@ capacity: 1 count: 1 - type: MeleeWeapon - attackRate: 0.75 - range: 1.75 + attackRate: 0.85 + range: 1.65 wideAnimationRotation: -135 damage: types: @@ -53,7 +53,7 @@ bluntStaminaDamageFactor: 2.0 heavyRateModifier: 0.75 heavyDamageBaseModifier: 1.2 - heavyStaminaCost: 10 + heavyStaminaCost: 7.5 angle: 120 soundHit: collection: MetalThud @@ -92,7 +92,6 @@ Slash: 9 heavyRateModifier: 0.9 heavyDamageBaseModifier: 1.2 - heavyStaminaCost: 5 maxTargets: 2 angle: 20 - type: Tag diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/pickaxe.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/pickaxe.yml index 6ba659ccb40..fb1eb3d7fe9 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/pickaxe.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/pickaxe.yml @@ -11,8 +11,8 @@ sprite: Objects/Weapons/Melee/pickaxe.rsi state: pickaxe - type: MeleeWeapon - attackRate: 0.75 - range: 1.75 + attackRate: 0.85 + range: 1.5 wideAnimationRotation: -135 soundHit: path: "/Audio/Weapons/smash.ogg" @@ -24,9 +24,8 @@ Pierce: 3 bluntStaminaDamageFactor: 2.0 heavyDamageBaseModifier: 1.75 - heavyStaminaCost: 5 - maxTargets: 2 - angle: 60 + maxTargets: 5 + angle: 80 - type: Wieldable - type: IncreaseDamageOnWield damage: @@ -61,19 +60,17 @@ wideAnimationRotation: -90 soundHit: path: "/Audio/Items/drill_hit.ogg" - attackRate: 0.5 - range: 1.4 + attackRate: 1.2 + range: 1.5 damage: types: - Blunt: 9 + Blunt: 6 Slash: 3 Structural: 12 bluntStaminaDamageFactor: 4.0 heavyRateModifier: 1 heavyRangeModifier: 2 heavyDamageBaseModifier: 1 - heavyStaminaCost: 10 - maxTargets: 3 angle: 20 - type: ReverseEngineering # Nyano diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/sledgehammer.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/sledgehammer.yml index ecc84e50073..ffe791ce0c4 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.8 + attackRate: 0.75 range: 1.75 damage: types: @@ -18,7 +18,7 @@ bluntStaminaDamageFactor: 2.0 heavyRateModifier: 0.75 heavyDamageBaseModifier: 1.75 - heavyStaminaCost: 15 + heavyStaminaCost: 7.5 maxTargets: 10 angle: 120 soundHit: diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/stunprod.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/stunprod.yml index d8955b4defe..5214358ff96 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/stunprod.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/stunprod.yml @@ -25,22 +25,19 @@ - type: ItemToggleMeleeWeapon activatedDamage: types: - Blunt: 0 + Shock: 5 - type: Stunbaton - energyPerUse: 70 + energyPerUse: 120 - type: MeleeWeapon wideAnimationRotation: -135 - attackRate: 0.8 - range: 1.4 + attackRate: 1 + range: 1.5 damage: types: Blunt: 7.5 bluntStaminaDamageFactor: 2.0 heavyRateModifier: 0.8 heavyDamageBaseModifier: 1.2 - heavyStaminaCost: 5 - maxTargets: 3 - angle: 60 animation: WeaponArcThrust - type: StaminaDamageOnHit damage: 22 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/sword.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/sword.yml index 82b99ce37e3..046e9f76f7f 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/sword.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/sword.yml @@ -16,7 +16,7 @@ path: /Audio/SimpleStation14/Weapons/Melee/rapierhit.ogg damage: types: - Slash: 17 #cmon, it has to be at least BETTER than the rest. + Slash: 15 heavyRateModifier: 0.8 heavyRangeModifier: 1 heavyDamageBaseModifier: 1 @@ -25,7 +25,12 @@ angle: 80 - type: Reflect enabled: true - reflectProb: .5 + # Design intent: a robust captain or tot can sacrifice movement to make the most of this weapon, but they have to + # really restrict themselves to walking speed or less. + reflectProb: 0.5 + velocityBeforeNotMaxProb: 1.0 + velocityBeforeMinProb: 3.0 + minReflectProb: 0.1 spread: 90 - type: Item size: Normal @@ -57,9 +62,9 @@ types: Slash: 12 heavyRateModifier: 0.5 - heavyRangeModifier: 3 #Superior Japanese folded steel + heavyRangeModifier: 2.75 #Superior Japanese folded steel heavyDamageBaseModifier: 1.25 - heavyStaminaCost: 10 + heavyStaminaCost: 15 maxTargets: 1 angle: 20 - type: Item @@ -97,6 +102,9 @@ - Back - Belt - type: Reflect + reflectProb: 0.3 + velocityBeforeNotMaxProb: 6.0 # don't punish ninjas for being ninjas + velocityBeforeMinProb: 10.0 - type: entity name: machete @@ -120,7 +128,7 @@ heavyRateModifier: 0.8 heavyRangeModifier: 1.25 heavyDamageBaseModifier: 1.2 - heavyStaminaCost: 10 + heavyStaminaCost: 7.5 angle: 80 soundHit: path: /Audio/Weapons/bladeslice.ogg @@ -151,7 +159,7 @@ heavyRateModifier: 0.5 heavyRangeModifier: 1 heavyDamageBaseModifier: 1 - heavyStaminaCost: 20 + heavyStaminaCost: 15 maxTargets: 10 angle: 200 soundHit: @@ -186,7 +194,7 @@ heavyRateModifier: 0.8 heavyRangeModifier: 1.2 heavyDamageBaseModifier: 1.2 - heavyStaminaCost: 10 + heavyStaminaCost: 7.5 maxTargets: 3 angle: 40 soundHit: @@ -200,7 +208,7 @@ name: The Throngler parent: BaseItem id: Throngler - description: Why would you make this? + description: Why would someone make this? components: - type: Sharp - type: Sprite @@ -221,7 +229,10 @@ path: /Audio/Effects/explosion_small1.ogg - type: Reflect enabled: true - reflectProb: .25 + reflectProb: 0.5 # In robust hands, deflects as well as an e-sword + velocityBeforeNotMaxProb: 1.0 + velocityBeforeMinProb: 3.0 + minReflectProb: 0.1 spread: 90 - type: Item size: Ginormous diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/telescopic_baton.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/telescopic_baton.yml new file mode 100644 index 00000000000..5e797c85361 --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/telescopic_baton.yml @@ -0,0 +1,71 @@ +- type: entity + id: TelescopicBaton + parent: BaseItem + name: telescopic baton + description: A compact and harmless personal defense weapon. Sturdy enough to knock the feet out from under attackers. + components: + - type: Sprite + sprite: Objects/Weapons/Melee/telebaton.rsi + layers: + - state: icon + map: [ "enum.TelescopicBatonVisuals.Layer" ] + - type: Item + size: Small + - type: ItemToggle + soundActivate: + path: /Audio/Weapons/telescopicon.ogg + params: + volume: -2 + soundDeactivate: + path: /Audio/Weapons/telescopicoff.ogg + params: + volume: -2 + - type: ItemToggleDisarmMalus + activatedDisarmMalus: 0.6 + - type: ItemToggleMeleeWeapon + activatedDamage: + types: + Blunt: 12 + - type: ItemToggleSize + activatedSize: Normal + - type: UseDelay + delay: 2 + - type: TelescopicBaton + - type: KnockdownOnHit + duration: 1.5 + dropHeldItemsBehavior: NoDrop + - type: MeleeWeapon + attackRate: 0.8 + bluntStaminaDamageFactor: 1.5 + heavyDamageBaseModifier: 1.2 + heavyStaminaCost: 5 + maxTargets: 1 + angle: 40 + damage: + types: + Blunt: 1 + - type: Appearance + - type: GenericVisualizer + visuals: + enum.TelescopicBatonVisuals.State: + enum.TelescopicBatonVisuals.Layer: + True: { state: icon } + False: { state: icon-off } + +- type: entity + parent: TelescopicBaton + id: TelescopicBatonAdmeme + name: robust telescopic baton + description: A compact and HARMFUL personal defense weapon. Sturdy enough to break legs of the attackers, making them unable to walk again. + suffix: admeme, DO NOT MAP + components: + - type: TelescopicBaton + attackTimeframe: 300 # one minute after activation + - type: KnockdownOnHit + duration: 60 # + - type: MeleeWeapon + attackRate: 1.2 + - type: ItemToggleMeleeWeapon + activatedDamage: + types: + Blunt: 20 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/bola.yml b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/bola.yml index ca3edf68c0d..7bbd0fe8935 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/bola.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/bola.yml @@ -1,8 +1,9 @@ - type: entity name: bola + abstract: true + id: BaseBola parent: BaseItem - id: Bola - description: Linked together with some spare cuffs and metal. + description: High velocity entanglement tool. components: - type: Item size: Normal @@ -13,6 +14,25 @@ sound: /Audio/Weapons/bolathrow.ogg - type: EmitSoundOnLand sound: /Audio/Effects/snap.ogg + - type: DamageOnLand + damage: + types: + Blunt: 5 + - type: Ensnaring + freeTime: 2.0 + breakoutTime: 3.5 + walkSpeed: 0.7 + sprintSpeed: 0.7 + staminaDamage: 55 + canThrowTrigger: true + canMoveBreakout: true + +- type: entity + name: bola + parent: [BaseBola] + id: Bola + description: Linked together with some spare cuffs and metal. + components: - type: Construction graph: Bola node: bola @@ -35,16 +55,18 @@ collection: MetalBreak - !type:DoActsBehavior acts: [ "Destruction" ] + +- type: entity + name: energy bola + id: BolaEnergy + parent: BaseBola + description: An advanced hardlight criminal entangling tool. Otherwise known as an expensive piece of string. + components: + - type: Sprite + sprite: Objects/Weapons/Throwable/energy_bola.rsi - type: DamageOnLand damage: types: - Blunt: 5 + Heat: 5 - type: Ensnaring - freeTime: 2.0 - breakoutTime: 3.5 #all bola should generally be fast to remove - walkSpeed: 0.7 #makeshift bola shouldn't slow too much - sprintSpeed: 0.7 - staminaDamage: 55 # Sudden weight increase sapping stamina - canThrowTrigger: true - canMoveBreakout: true - + destroyOnRemove: true diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml index d1deaa2d4c2..6c60ed5ad0d 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml @@ -120,6 +120,30 @@ params: volume: 12 +- type: entity + name: Self Destruct + description: Go out on your own terms! + parent: GrenadeBase + id: SelfDestructSeq + noSpawn: true + components: + - type: ExplodeOnTrigger + - type: Explosive + explosionType: Minibomb + totalIntensity: 400 + intensitySlope: 30 + maxIntensity: 125 + canCreateVacuum: true + - type: OnUseTimerTrigger + delay: 4.5 + beepSound: + path: /Audio/Effects/Grenades/SelfDestruct/SDS_Charge2.ogg + params: + volume: 30 + initialBeepDelay: 0 + beepInterval: 16 + + - type: entity name: supermatter grenade description: Grenade that simulates delamination of the supermatter engine, pulling things in a heap and exploding after some time. diff --git a/Resources/Prototypes/Entities/Objects/Weapons/security.yml b/Resources/Prototypes/Entities/Objects/Weapons/security.yml index 9c963024410..1b07eab9faf 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/security.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/security.yml @@ -34,12 +34,10 @@ damage: types: Blunt: 7 - bluntStaminaDamageFactor: 2.0 + bluntStaminaDamageFactor: 2.5 heavyRateModifier: 0.75 heavyDamageBaseModifier: 1.75 - heavyStaminaCost: 5 - maxTargets: 3 - angle: 60 + heavyStaminaCost: 1 animation: WeaponArcSlash - type: StaminaDamageOnHit damage: 35 @@ -82,9 +80,13 @@ explosionType: Default intensitySlope: 1.5 maxIntensity: 200 - # - type: GuideHelp - # guides: - # - Security + - type: PhysicalComposition + materialComposition: + Steel: 100 + Plastic: 100 + - type: GuideHelp + guides: + - Security - type: entity name: truncheon @@ -106,9 +108,12 @@ bluntStaminaDamageFactor: 2 heavyRateModifier: 1 heavyDamageBaseModifier: 1.2 - heavyStaminaCost: 10 + heavyStaminaCost: 7.5 - type: Item size: Normal + - type: Tag + tags: + - Truncheon - type: Clothing sprite: Objects/Weapons/Melee/truncheon.rsi quickEquip: false @@ -119,9 +124,9 @@ - type: Appearance - type: StaticPrice price: 80 - # - type: GuideHelp - # guides: - # - Security + - type: GuideHelp + guides: + - Security - type: entity name: flash @@ -168,9 +173,9 @@ enum.FlashVisuals.LightLayer: True: {visible: true} False: {visible: false} - # - type: GuideHelp - # guides: - # - Security + - type: GuideHelp + guides: + - Security - type: entity name: flash @@ -226,6 +231,6 @@ radius: 0 softness: 0 enabled: true - # - type: GuideHelp - # guides: - # - Security \ No newline at end of file + - type: GuideHelp + guides: + - Security diff --git a/Resources/Prototypes/Entities/Objects/base_item.yml b/Resources/Prototypes/Entities/Objects/base_item.yml index 84b5477f508..9c9437f46a4 100644 --- a/Resources/Prototypes/Entities/Objects/base_item.yml +++ b/Resources/Prototypes/Entities/Objects/base_item.yml @@ -50,8 +50,8 @@ - type: Storage - type: UserInterface interfaces: - - key: enum.StorageUiKey.Key - type: StorageBoundUserInterface + enum.StorageUiKey.Key: + type: StorageBoundUserInterface - type: ContainerContainer containers: storagebase: !type:Container diff --git a/Resources/Prototypes/Entities/Stations/base.yml b/Resources/Prototypes/Entities/Stations/base.yml index 0bf0f7f9159..5962a02505a 100644 --- a/Resources/Prototypes/Entities/Stations/base.yml +++ b/Resources/Prototypes/Entities/Stations/base.yml @@ -61,7 +61,7 @@ - /Maps/Shuttles/trading_outpost.yml mining: paths: - - /Maps/Shuttles/mining.yml + - /Maps/Shuttles/pathfinder.yml # Spawn last ruins: hide: true @@ -70,13 +70,39 @@ maxCount: 2 stationGrid: false paths: - - /Maps/Ruins/DeltaV/biodome_satellite.yml #Delta V - Move to DV folder - - /Maps/Ruins/DeltaV/derelict.yml #Delta V - Move to DV folder - - /Maps/Ruins/DeltaV/djstation.yml #Delta V - Move to DV folder - - /Maps/Ruins/DeltaV/old_ai_sat.yml #Delta V - Move to DV folder - - /Maps/Ruins/DeltaV/relaystation.yml #Delta V - Move to DV folder - - /Maps/Ruins/DeltaV/whiteship_ancient.yml #Delta V - Move to DV folder - - /Maps/Ruins/DeltaV/whiteship_bluespacejumper.yml #Delta V - Move to DV folder + - /Maps/Ruins/DeltaV/biodome_satellite.yml + - /Maps/Ruins/DeltaV/derelict.yml + - /Maps/Ruins/DeltaV/djstation.yml + - /Maps/Ruins/DeltaV/old_ai_sat.yml + - /Maps/Ruins/DeltaV/relaystation.yml + - /Maps/Ruins/DeltaV/whiteship_ancient.yml + - /Maps/Ruins/DeltaV/whiteship_bluespacejumper.yml + +- type: entity + id: BaseStationShuttlesSalvageOnly + abstract: true + components: + - type: GridSpawn + groups: + mining: + addComponents: + - type: ProtectedGrid + paths: + - /Maps/Shuttles/pathfinder.yml + ruins: + hide: true + nameGrid: true + minCount: 2 + maxCount: 2 + stationGrid: false + paths: + - /Maps/Ruins/DeltaV/biodome_satellite.yml + - /Maps/Ruins/DeltaV/derelict.yml + - /Maps/Ruins/DeltaV/djstation.yml + - /Maps/Ruins/DeltaV/old_ai_sat.yml + - /Maps/Ruins/DeltaV/relaystation.yml + - /Maps/Ruins/DeltaV/whiteship_ancient.yml + - /Maps/Ruins/DeltaV/whiteship_bluespacejumper.yml - type: entity id: BaseStationShuttlesCore @@ -89,7 +115,7 @@ - /Maps/Shuttles/cargo_core.yml mining: paths: - - /Maps/Shuttles/mining.yml + - /Maps/Shuttles/pathfinder.yml ruins: hide: true nameGrid: true diff --git a/Resources/Prototypes/Entities/Stations/nanotrasen.yml b/Resources/Prototypes/Entities/Stations/nanotrasen.yml index d34e4b3f872..6067e466b74 100644 --- a/Resources/Prototypes/Entities/Stations/nanotrasen.yml +++ b/Resources/Prototypes/Entities/Stations/nanotrasen.yml @@ -6,48 +6,73 @@ factions: - NanoTrasen -# - type: entity - # id: StandardNanotrasenStation - # parent: - # - BaseStation - # - BaseStationNews - # - BaseStationCargo - # - BaseStationJobsSpawning - # - BaseStationRecords - # - BaseStationArrivals - # - BaseStationGateway - # - BaseStationShuttles - # - BaseStationCentcomm - # - BaseStationEvacuation - # - BaseStationAlertLevels - # - BaseStationMagnet - # - BaseStationExpeditions - # - BaseStationSiliconLawCrewsimov - # - BaseStationAllEventsEligible - # - BaseStationNanotrasen - # - BaseRandomStation - # - BaseStationMail # Nyano component, required for station mail to function - # noSpawn: true - # components: - # - type: Transform - -# - type: entity - # id: NanotrasenCentralCommand - # parent: - # - BaseStation - # - BaseStationAlertLevels - # - BaseStationNanotrasen - # noSpawn: true - # components: - # - type: Transform - -# - type: entity - # id: StandardStationArena - # parent: - # - BaseStation - # - BaseStationJobsSpawning - # - BaseStationRecords - # - BaseStationNanotrasen - # noSpawn: true - # components: - # - type: Transform +#- type: entity +# id: StandardNanotrasenStation +# parent: +# - BaseStation +# - BaseStationNews +# - BaseStationCargo +# - BaseStationJobsSpawning +# - BaseStationRecords +# - BaseStationArrivals +# - BaseStationGateway +# - BaseStationShuttles +# - BaseStationCentcomm +# - BaseStationEvacuation +# - BaseStationAlertLevels +# - BaseStationMagnet +# - BaseStationExpeditions +# - BaseStationSiliconLawCrewsimov +# - BaseStationAllEventsEligible +# - BaseStationNanotrasen +# - BaseRandomStation +# - BaseStationMail # Nyano component, required for station mail to function +# noSpawn: true +# components: +# - type: Transform +# +#- type: entity +# id: NanotrasenCentralCommand +# parent: +# - BaseStation +# - BaseStationAlertLevels +# - BaseStationNanotrasen +# noSpawn: true +# components: +# - type: Transform +# +#- type: entity +# id: StandardStationArena +# parent: +# - BaseStation +# - BaseStationJobsSpawning +# - BaseStationRecords +# - BaseStationNanotrasen +# noSpawn: true +# components: +# - type: Transform +# +#- type: entity +# id: StandardNanotrasenStationNoATS +# parent: +# - BaseStation +# - BaseStationNews +# - BaseStationCargo +# - BaseStationJobsSpawning +# - BaseStationRecords +# - BaseStationArrivals +# - BaseStationGateway +# - BaseStationShuttlesSalvageOnly +# - BaseStationCentcomm +# - BaseStationEvacuation +# - BaseStationAlertLevels +# - BaseStationMagnet +# - BaseStationExpeditions +# - BaseStationSiliconLawCrewsimov +# - BaseStationAllEventsEligible +# - BaseStationNanotrasen +# - BaseRandomStation +# - BaseStationMail +# noSpawn: true +# components: +# - type: Transform \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Structures/Dispensers/base_structuredispensers.yml b/Resources/Prototypes/Entities/Structures/Dispensers/base_structuredispensers.yml index 1b660c0cf07..213ad47d88f 100644 --- a/Resources/Prototypes/Entities/Structures/Dispensers/base_structuredispensers.yml +++ b/Resources/Prototypes/Entities/Structures/Dispensers/base_structuredispensers.yml @@ -30,8 +30,8 @@ - type: ActivatableUIRequiresPower - type: UserInterface interfaces: - - key: enum.ReagentDispenserUiKey.Key - type: ReagentDispenserBoundUserInterface + enum.ReagentDispenserUiKey.Key: + type: ReagentDispenserBoundUserInterface - type: Anchorable - type: Pullable - type: Damageable diff --git a/Resources/Prototypes/Entities/Structures/Dispensers/chem.yml b/Resources/Prototypes/Entities/Structures/Dispensers/chem.yml index 5641f39a401..c989b27983d 100644 --- a/Resources/Prototypes/Entities/Structures/Dispensers/chem.yml +++ b/Resources/Prototypes/Entities/Structures/Dispensers/chem.yml @@ -35,6 +35,9 @@ # guides: # - Chemicals # - Chemist + - type: UpgradePowerDraw + powerDrawMultiplier: 0.75 + scaling: Exponential - type: StealTarget stealGroup: ChemDispenser diff --git a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/access.yml b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/access.yml index 64155fccc2e..c6e15e8fc48 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/access.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/access.yml @@ -12,7 +12,7 @@ layoutId: AirlockService - type: entity - parent: AirlockServiceLocked + parent: AirlockJustice # DeltaV - Lawyer is in Justice Dept id: AirlockLawyerLocked suffix: Lawyer, Locked noSpawn: true @@ -169,7 +169,7 @@ components: - type: ContainerFill containers: - board: [ DoorElectronicsFreezer ] + board: [ DoorElectronicsKitchenHydroponics ] - type: entity parent: AirlockFreezer @@ -270,6 +270,17 @@ containers: board: [ DoorElectronicsChemistry ] +- type: entity + parent: AirlockMedical + id: AirlockMedicalMorgueLocked + suffix: Morgue, Locked + noSpawn: true + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsMorgue ] + + - type: entity parent: AirlockScience id: AirlockScienceLocked @@ -288,7 +299,7 @@ components: - type: ContainerFill containers: - board: [ DoorElectronicsScience ] + board: [ DoorElectronicsMedicalResearch ] - type: entity parent: AirlockCentralCommand @@ -466,8 +477,8 @@ layoutId: AirlockService - type: entity - parent: AirlockServiceGlassLocked - id: AirlockLawyerGlassLocked + parent: AirlockJusticeGlass + id: AirlockLawyerGlassLocked # DeltaV - Lawyer is in Justice Dept suffix: Lawyer, Locked noSpawn: true components: diff --git a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/base_structureairlocks.yml b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/base_structureairlocks.yml index 218a3c58673..586902bd776 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/base_structureairlocks.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/base_structureairlocks.yml @@ -64,6 +64,7 @@ containers: board: !type:Container - type: Weldable + fuel: 5 time: 3 - type: Airlock - type: NavMapDoor @@ -103,8 +104,8 @@ - type: SpawnOnOverload - type: UserInterface interfaces: - - key: enum.WiresUiKey.Key - type: WiresBoundUserInterface + enum.WiresUiKey.Key: + type: WiresBoundUserInterface - type: Airtight noAirWhenFullyAirBlocked: false - type: RadiationBlocker @@ -154,7 +155,7 @@ - KnockOn placement: mode: SnapgridCenter - + - type: entity id: AirlockRCDResistant parent: Airlock diff --git a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/highsec.yml b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/highsec.yml index e9ea05a1c3f..559dca704cd 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/highsec.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/highsec.yml @@ -55,6 +55,7 @@ denySound: path: /Audio/Machines/airlock_deny.ogg - type: Weldable + fuel: 10 time: 10 - type: Airlock - type: NavMapDoor @@ -78,8 +79,8 @@ alwaysRandomize: true - type: UserInterface interfaces: - - key: enum.WiresUiKey.Key - type: WiresBoundUserInterface + enum.WiresUiKey.Key: + type: WiresBoundUserInterface - type: Airtight - type: Occluder - type: Damageable diff --git a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/shuttle.yml b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/shuttle.yml index 5d6b1088f12..43d1228a408 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/shuttle.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/shuttle.yml @@ -6,6 +6,11 @@ description: Necessary for connecting two space craft together. components: - type: Docking + - type: DockingSignalControl + - type: DeviceLinkSource + ports: + - DoorStatus + - DockStatus - type: Fixtures fixtures: fix1: @@ -75,7 +80,6 @@ suffix: Glass, Docking description: Necessary for connecting two space craft together. components: - - type: Docking - type: Sprite sprite: Structures/Doors/Airlocks/Glass/shuttle.rsi snapCardinals: false @@ -127,7 +131,6 @@ suffix: Glass, Docking description: Necessary for connecting two space craft together. components: - - type: Docking - type: Sprite sprite: Structures/Doors/Airlocks/Glass/shuttle_syndicate.rsi snapCardinals: false diff --git a/Resources/Prototypes/Entities/Structures/Doors/Firelocks/firelock.yml b/Resources/Prototypes/Entities/Structures/Doors/Firelocks/firelock.yml index dfa00367540..074c981da25 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Firelocks/firelock.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Firelocks/firelock.yml @@ -82,6 +82,7 @@ openingAnimationTime: 0.6 closingAnimationTime: 0.6 - type: Weldable + fuel: 5 time: 3 - type: Firelock - type: Appearance @@ -89,7 +90,7 @@ - type: WiresPanel - type: UserInterface interfaces: - - key: enum.WiresUiKey.Key + enum.WiresUiKey.Key: type: WiresBoundUserInterface - type: Physics canCollide: false diff --git a/Resources/Prototypes/Entities/Structures/Doors/Shutter/shutters.yml b/Resources/Prototypes/Entities/Structures/Doors/Shutter/shutters.yml index 91d541bf5cf..3465b646b46 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Shutter/shutters.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Shutter/shutters.yml @@ -56,8 +56,8 @@ - type: Appearance - type: UserInterface interfaces: - - key: enum.WiresUiKey.Key - type: WiresBoundUserInterface + enum.WiresUiKey.Key: + type: WiresBoundUserInterface - type: Airtight - type: RadiationBlocker resistance: 1 diff --git a/Resources/Prototypes/Entities/Structures/Doors/Windoors/base_structurewindoors.yml b/Resources/Prototypes/Entities/Structures/Doors/Windoors/base_structurewindoors.yml index bb374b11387..462632dc074 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Windoors/base_structurewindoors.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Windoors/base_structurewindoors.yml @@ -93,10 +93,11 @@ max: 4 - !type:DoActsBehavior acts: [ "Destruction" ] - - type: AccessReader - type: ContainerFill containers: board: [ DoorElectronics ] + - type: AccessReader + containerAccessProvider: board - type: ContainerContainer containers: board: !type:Container @@ -129,8 +130,8 @@ layoutId: Airlock - type: UserInterface interfaces: - - key: enum.WiresUiKey.Key - type: WiresBoundUserInterface + enum.WiresUiKey.Key: + type: WiresBoundUserInterface - type: Appearance - type: WiresVisuals - type: Airtight diff --git a/Resources/Prototypes/Entities/Structures/Doors/Windoors/windoor.yml b/Resources/Prototypes/Entities/Structures/Doors/Windoors/windoor.yml index 86a1c2c2249..a306c1f4261 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Windoors/windoor.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Windoors/windoor.yml @@ -54,8 +54,9 @@ suffix: Bar, Locked noSpawn: true components: - - type: AccessReader - access: [["Bar"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsBar ] - type: entity parent: Windoor @@ -63,8 +64,9 @@ suffix: Bar&Kitchen, Locked noSpawn: true components: - - type: AccessReader - access: [["Bar"], ["Kitchen"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsBarKitchen ] - type: entity parent: Windoor @@ -72,8 +74,9 @@ suffix: Logistics, Locked # DeltaV - Logistics Department replacing Cargo noSpawn: true components: - - type: AccessReader - access: [["Cargo"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsCargo ] - type: entity parent: Windoor @@ -81,8 +84,9 @@ suffix: Chapel, Locked noSpawn: true components: - - type: AccessReader - access: [["Chapel"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsChapel ] - type: entity parent: Windoor @@ -90,8 +94,9 @@ suffix: Hydroponics, Locked noSpawn: true components: - - type: AccessReader - access: [["Hydroponics"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsHydroponics ] - type: entity parent: Windoor @@ -99,8 +104,9 @@ suffix: Janitor, Locked noSpawn: true components: - - type: AccessReader - access: [["Janitor"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsJanitor ] - type: entity parent: WindoorPlasma @@ -108,8 +114,9 @@ suffix: Janitor, Locked, Plasma noSpawn: true components: - - type: AccessReader - access: [["Janitor"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsJanitor ] - type: entity parent: Windoor @@ -117,8 +124,9 @@ suffix: Kitchen, Locked noSpawn: true components: - - type: AccessReader - access: [["Kitchen"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsKitchen ] - type: entity parent: Windoor @@ -126,8 +134,9 @@ suffix: Kitchen&Hydroponics, Locked noSpawn: true components: - - type: AccessReader - access: [["Kitchen"], ["Hydroponics"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsKitchenHydroponics ] - type: entity parent: Windoor @@ -135,8 +144,9 @@ suffix: Service, Locked noSpawn: true components: - - type: AccessReader - access: [["Service"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsService ] - type: entity parent: Windoor @@ -144,8 +154,9 @@ suffix: Theatre, Locked noSpawn: true components: - - type: AccessReader - access: [["Theatre"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsTheatre ] # Secure @@ -155,8 +166,18 @@ suffix: Armory, Locked noSpawn: true components: - - type: AccessReader - access: [["Armory"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsArmory ] + +- type: entity + parent: WindoorSecurePlasma + id: PlasmaWindoorSecureArmoryLocked + suffix: Armory, Locked, Plasma + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsArmory ] - type: entity parent: WindoorSecure @@ -164,8 +185,18 @@ suffix: Atmospherics, Locked noSpawn: true components: - - type: AccessReader - access: [["Atmospherics"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsAtmospherics ] + +- type: entity + parent: WindoorSecurePlasma + id: PlasmaWindoorSecureAtmosphericsLocked + suffix: Atmospherics, Locked, Plasma + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsAtmospherics ] - type: entity parent: WindoorSecure @@ -173,17 +204,18 @@ suffix: Bar, Locked noSpawn: true components: - - type: AccessReader - access: [["Bar"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsBar ] -#Delta V: Removed Brig Access -#- type: entity -# parent: WindoorSecureSecurityLocked -# id: WindoorSecureBrigLocked -# suffix: Brig, Locked -# components: -# - type: AccessReader -# access: [["Brig"]] +- type: entity + parent: WindoorSecureSecurityLocked + id: WindoorSecureBrigLocked + suffix: Brig, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsBrig ] - type: entity parent: WindoorSecure @@ -191,8 +223,9 @@ suffix: Logistics, Locked # DeltaV - Logistics Department replacing Cargo noSpawn: true components: - - type: AccessReader - access: [["Cargo"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsCargo ] - type: entity parent: WindoorSecure @@ -200,8 +233,9 @@ suffix: Chapel, Locked noSpawn: true components: - - type: AccessReader - access: [["Chapel"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsChapel ] - type: entity parent: WindoorSecure @@ -209,8 +243,9 @@ suffix: Chemistry, Locked noSpawn: true components: - - type: AccessReader - access: [["Chemistry"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsChemistry ] - type: entity parent: WindoorSecurePlasma @@ -218,8 +253,9 @@ suffix: Chemistry, Locked, Plasma noSpawn: true components: - - type: AccessReader - access: [["Chemistry"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsChemistry ] - type: entity parent: WindoorSecure @@ -227,8 +263,9 @@ suffix: Central Command, Locked noSpawn: true components: - - type: AccessReader - access: [["CentralCommand"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsCentralCommand ] - type: entity parent: WindoorSecurePlasma @@ -236,8 +273,9 @@ suffix: Central Command, Locked, Plasma noSpawn: true components: - - type: AccessReader - access: [["CentralCommand"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsCentralCommand ] - type: entity parent: WindoorSecureUranium @@ -245,8 +283,9 @@ suffix: Central Command, Locked, Uranium noSpawn: true components: - - type: AccessReader - access: [["CentralCommand"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsCentralCommand ] - type: entity parent: WindoorSecure @@ -254,8 +293,18 @@ suffix: Command, Locked noSpawn: true components: - - type: AccessReader - access: [["Command"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsCommand ] + +- type: entity + parent: WindoorSecurePlasma + id: PlasmaWindoorSecureCommandLocked + suffix: Command, Locked, Plasma + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsCommand ] - type: entity parent: WindoorSecure @@ -263,8 +312,9 @@ suffix: Detective, Locked noSpawn: true components: - - type: AccessReader - access: [["Detective"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsDetective ] - type: entity parent: WindoorSecure @@ -272,8 +322,9 @@ suffix: Engineering, Locked noSpawn: true components: - - type: AccessReader - access: [["Engineering"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsEngineering ] - type: entity parent: WindoorSecurePlasma @@ -281,8 +332,9 @@ suffix: Engineering, Locked, Plasma noSpawn: true components: - - type: AccessReader - access: [["Engineering"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsEngineering ] - type: entity parent: WindoorSecureUranium @@ -290,8 +342,9 @@ suffix: Engineering, Locked, Uranium noSpawn: true components: - - type: AccessReader - access: [["Engineering"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsEngineering ] - type: entity parent: WindoorSecure @@ -299,8 +352,9 @@ suffix: External, Locked noSpawn: true components: - - type: AccessReader - access: [["External"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsExternal ] - type: entity parent: WindoorSecure @@ -308,8 +362,9 @@ suffix: Janitor, Locked noSpawn: true components: - - type: AccessReader - access: [["Janitor"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsJanitor ] - type: entity parent: WindoorSecurePlasma @@ -317,8 +372,9 @@ suffix: Janitor, Locked, Plasma noSpawn: true components: - - type: AccessReader - access: [["Janitor"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsJanitor ] - type: entity parent: WindoorSecure @@ -326,8 +382,9 @@ suffix: Kitchen, Locked noSpawn: true components: - - type: AccessReader - access: [["Kitchen"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsKitchen ] - type: entity parent: WindoorSecureSecurityLocked @@ -335,8 +392,9 @@ suffix: Security/Lawyer, Locked noSpawn: true components: - - type: AccessReader - access: [["Security"], ["Lawyer"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsSecurityLawyer ] - type: entity parent: WindoorSecure @@ -344,8 +402,9 @@ suffix: Medical, Locked noSpawn: true components: - - type: AccessReader - access: [["Medical"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsMedical ] - type: entity parent: WindoorSecure @@ -353,8 +412,9 @@ suffix: Salvage, Locked noSpawn: true components: - - type: AccessReader - access: [["Salvage"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsSalvage ] - type: entity parent: WindoorSecure @@ -362,8 +422,18 @@ suffix: Security, Locked noSpawn: true components: - - type: AccessReader - access: [["Security"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsSecurity ] + +- type: entity + parent: WindoorSecurePlasma + id: PlasmaWindoorSecureSecurityLocked + suffix: Security, Locked, Plasma + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsSecurity ] - type: entity parent: WindoorSecure @@ -371,8 +441,9 @@ suffix: Epistemics, Locked # DeltaV - Epistemics Department replacing Science noSpawn: true components: - - type: AccessReader - access: [["Research"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsResearch ] - type: entity parent: WindoorSecurePlasma @@ -380,8 +451,9 @@ suffix: Science, Locked, Plasma noSpawn: true components: - - type: AccessReader - access: [["Research"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsResearch ] - type: entity parent: WindoorSecure @@ -389,8 +461,9 @@ suffix: Service, Locked noSpawn: true components: - - type: AccessReader - access: [["Service"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsService ] - type: entity parent: WindoorSecure @@ -398,5 +471,6 @@ suffix: HeadOfPersonnel, Locked noSpawn: true components: - - type: AccessReader - access: [["HeadOfPersonnel"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsHeadOfPersonnel ] diff --git a/Resources/Prototypes/Entities/Structures/Furniture/Tables/base_structuretables.yml b/Resources/Prototypes/Entities/Structures/Furniture/Tables/base_structuretables.yml index c1b0cf0423b..dbef5a7504a 100644 --- a/Resources/Prototypes/Entities/Structures/Furniture/Tables/base_structuretables.yml +++ b/Resources/Prototypes/Entities/Structures/Furniture/Tables/base_structuretables.yml @@ -20,6 +20,7 @@ - TableMask layer: - TableLayer + - BulletImpassable - type: SpriteFade - type: Sprite - type: Icon @@ -38,7 +39,8 @@ - type: FootstepModifier footstepSoundCollection: collection: FootstepHull - + - type: RequireProjectileTarget + - type: entity id: CounterBase parent: TableBase diff --git a/Resources/Prototypes/Entities/Structures/Furniture/Tables/tables.yml b/Resources/Prototypes/Entities/Structures/Furniture/Tables/tables.yml index e424b1b40b4..2a546bc5cf2 100644 --- a/Resources/Prototypes/Entities/Structures/Furniture/Tables/tables.yml +++ b/Resources/Prototypes/Entities/Structures/Furniture/Tables/tables.yml @@ -137,7 +137,7 @@ acts: [ "Destruction" ] - trigger: !type:DamageTrigger - damage: 25 + damage: 15 behaviors: - !type:PlaySoundBehavior sound: @@ -178,7 +178,7 @@ acts: [ "Destruction" ] - trigger: !type:DamageTrigger - damage: 25 + damage: 15 behaviors: - !type:PlaySoundBehavior sound: @@ -216,7 +216,7 @@ acts: [ "Destruction" ] - trigger: !type:DamageTrigger - damage: 75 + damage: 30 behaviors: - !type:PlaySoundBehavior sound: @@ -263,7 +263,7 @@ thresholds: - trigger: !type:DamageTrigger - damage: 25 + damage: 15 behaviors: - !type:DoActsBehavior acts: [ "Destruction" ] @@ -379,7 +379,7 @@ collection: GlassBreak - trigger: !type:DamageTrigger - damage: 50 + damage: 30 behaviors: - !type:PlaySoundBehavior sound: @@ -426,7 +426,7 @@ acts: [ "Destruction" ] - trigger: !type:DamageTrigger - damage: 25 + damage: 40 behaviors: - !type:PlaySoundBehavior sound: @@ -443,7 +443,7 @@ - type: Construction graph: Table node: TableBrass - + - type: entity id: TableWood parent: TableBase @@ -546,7 +546,7 @@ thresholds: - trigger: !type:DamageTrigger - damage: 50 + damage: 40 behaviors: - !type:PlaySoundBehavior sound: @@ -573,7 +573,7 @@ thresholds: - trigger: !type:DamageTrigger - damage: 50 + damage: 20 behaviors: - !type:DoActsBehavior acts: [ "Destruction" ] @@ -604,7 +604,7 @@ thresholds: - trigger: !type:DamageTrigger - damage: 25 + damage: 25 behaviors: - !type:PlaySoundBehavior sound: @@ -677,7 +677,7 @@ - type: Construction graph: Table node: TableFancyRed - + - type: entity id: TableFancyPurple parent: TableFancyBase @@ -690,7 +690,7 @@ - type: Construction graph: Table node: TableFancyPurple - + - type: entity id: TableFancyPink parent: TableFancyBase @@ -703,7 +703,7 @@ - type: Construction graph: Table node: TableFancyPink - + - type: entity id: TableFancyGreen parent: TableFancyBase @@ -712,11 +712,11 @@ - type: Sprite sprite: Structures/Furniture/Tables/Fancy/green.rsi - type: Icon - sprite: Structures/Furniture/Tables/Fancy/green.rsi + sprite: Structures/Furniture/Tables/Fancy/green.rsi - type: Construction graph: Table node: TableFancyGreen - + - type: entity id: TableFancyOrange parent: TableFancyBase @@ -729,7 +729,7 @@ - type: Construction graph: Table node: TableFancyOrange - + - type: entity id: TableFancyWhite parent: TableFancyBase diff --git a/Resources/Prototypes/Entities/Structures/Furniture/altar.yml b/Resources/Prototypes/Entities/Structures/Furniture/altar.yml index 117967ef301..1153d5b7cc9 100644 --- a/Resources/Prototypes/Entities/Structures/Furniture/altar.yml +++ b/Resources/Prototypes/Entities/Structures/Furniture/altar.yml @@ -25,8 +25,14 @@ - TableLayer - type: Sprite snapCardinals: true - - type: Climbable - type: Clickable + - type: SacrificialAltar + - type: Strap + position: Down + rotation: -90 + - type: GuideHelp + guides: + - AltarsGolemancy - type: entity id: AltarNanotrasen diff --git a/Resources/Prototypes/Entities/Structures/Furniture/bookshelf.yml b/Resources/Prototypes/Entities/Structures/Furniture/bookshelf.yml index 792f0766799..30aa793767a 100644 --- a/Resources/Prototypes/Entities/Structures/Furniture/bookshelf.yml +++ b/Resources/Prototypes/Entities/Structures/Furniture/bookshelf.yml @@ -59,8 +59,8 @@ - Spellbook - type: UserInterface interfaces: - - key: enum.StorageUiKey.Key - type: StorageBoundUserInterface + enum.StorageUiKey.Key: + type: StorageBoundUserInterface - type: InteractionOutline - type: ContainerContainer containers: diff --git a/Resources/Prototypes/Entities/Structures/Furniture/chairs.yml b/Resources/Prototypes/Entities/Structures/Furniture/chairs.yml index 0fb69b4fdbd..14b3270ba88 100644 --- a/Resources/Prototypes/Entities/Structures/Furniture/chairs.yml +++ b/Resources/Prototypes/Entities/Structures/Furniture/chairs.yml @@ -33,7 +33,7 @@ thresholds: - trigger: !type:DamageTrigger - damage: 100 + damage: 25 behaviors: - !type:DoActsBehavior acts: [ "Destruction" ] @@ -48,6 +48,7 @@ collection: MetalBreak - type: StaticPrice price: 10 + - type: RequireProjectileTarget #Starts unanchored, cannot be rotated while anchored - type: entity diff --git a/Resources/Prototypes/Entities/Structures/Furniture/dresser.yml b/Resources/Prototypes/Entities/Structures/Furniture/dresser.yml index 1d0a25ed852..6af67b239e0 100644 --- a/Resources/Prototypes/Entities/Structures/Furniture/dresser.yml +++ b/Resources/Prototypes/Entities/Structures/Furniture/dresser.yml @@ -33,8 +33,8 @@ storagebase: !type:Container - type: UserInterface interfaces: - - key: enum.StorageUiKey.Key - type: StorageBoundUserInterface + enum.StorageUiKey.Key: + type: StorageBoundUserInterface - type: InteractionOutline - type: Clickable - type: Tag diff --git a/Resources/Prototypes/Entities/Structures/Furniture/shower.yml b/Resources/Prototypes/Entities/Structures/Furniture/shower.yml index 694202efdc6..a8ba4f25a99 100644 --- a/Resources/Prototypes/Entities/Structures/Furniture/shower.yml +++ b/Resources/Prototypes/Entities/Structures/Furniture/shower.yml @@ -24,11 +24,11 @@ canCollide: false - type: InteractionOutline - type: Damageable + damageContainer: Inorganic + damageModifierSet: Metallic - type: Construction graph: Shower node: shower - damageContainer: Inorganic - damageModifierSet: Metallic - type: Destructible thresholds: - trigger: diff --git a/Resources/Prototypes/Entities/Structures/Furniture/toilet.yml b/Resources/Prototypes/Entities/Structures/Furniture/toilet.yml index f02b1262489..a3124c09f6a 100644 --- a/Resources/Prototypes/Entities/Structures/Furniture/toilet.yml +++ b/Resources/Prototypes/Entities/Structures/Furniture/toilet.yml @@ -51,6 +51,10 @@ disposals: !type:Container - type: Physics bodyType: Static + - type: Fixtures + fixtures: + fix1: + hard: false - type: Construction graph: Toilet node: toilet @@ -66,8 +70,8 @@ price: 25 - type: UserInterface interfaces: - - key: enum.DisposalUnitUiKey.Key - type: DisposalUnitBoundUserInterface + enum.DisposalUnitUiKey.Key: + type: DisposalUnitBoundUserInterface - type: RatKingRummageable - type: SolutionContainerManager solutions: @@ -104,7 +108,10 @@ components: - type: SolutionContainerManager solutions: - toilet: + drainBuffer: + maxVol: 100 + tank: + maxVol: 500 reagents: - ReagentId: Water Quantity: 180 diff --git a/Resources/Prototypes/Entities/Structures/Lighting/base_lighting.yml b/Resources/Prototypes/Entities/Structures/Lighting/base_lighting.yml index 9c1d3400469..c6c55a916c7 100644 --- a/Resources/Prototypes/Entities/Structures/Lighting/base_lighting.yml +++ b/Resources/Prototypes/Entities/Structures/Lighting/base_lighting.yml @@ -23,8 +23,7 @@ node: tubeLight - type: Sprite sprite: Structures/Wallmounts/Lighting/light_tube.rsi - drawdepth: Overdoors - offset: 0, 1 + drawdepth: WallMountedItems layers: - map: ["enum.PoweredLightLayers.Base"] state: base @@ -32,6 +31,7 @@ state: glow shader: unshaded state: base + - type: EtherealLight - type: PointLight color: "#FFE4CE" # 5000K color temp energy: 0.8 @@ -44,7 +44,7 @@ - type: RCDDeconstructable cost: 4 delay: 2 - fx: EffectRCDDeconstruct2 + fx: EffectRCDDeconstruct2 - type: Destructible thresholds: - trigger: @@ -71,12 +71,11 @@ - !type:PlaySoundBehavior sound: collection: GlassBreak - - type: WallMount placement: mode: SnapgridCenter snap: - Wallmount - + - type: entity name: light description: "A light fixture. Draws power and produces light when equipped with a light tube." @@ -93,7 +92,7 @@ bulb: Tube damage: types: - Heat: 5 + Heat: 2 - type: ContainerContainer containers: light_bulb: !type:ContainerSlot @@ -134,7 +133,7 @@ hasLampOnSpawn: LightTube damage: types: - Heat: 5 + Heat: 2 - type: AmbientOnPowered - type: AmbientSound volume: -15 @@ -153,7 +152,7 @@ hasLampOnSpawn: LedLightTube damage: types: - Heat: 2.5 + Heat: 1 #LEDs don't get as hot - type: PointLight radius: 15 energy: 1 @@ -175,20 +174,19 @@ - type: entity id: PoweredlightExterior description: "A light fixture. Draws power and produces light when equipped with a light tube." - suffix: Blue - noSpawn: true # DeltaV - Don't map these + suffix: Exterior parent: Poweredlight components: - type: PoweredLight hasLampOnSpawn: ExteriorLightTube damage: types: - Heat: 5 + Heat: 4 #brighter light gets hotter - type: entity parent: AlwaysPoweredWallLight id: AlwaysPoweredLightExterior - suffix: Always Powered, Blue + suffix: Always Powered, Exterior components: - type: PointLight radius: 12 @@ -207,7 +205,7 @@ hasLampOnSpawn: SodiumLightTube damage: types: - Heat: 5 + Heat: 2 - type: PointLight radius: 10 energy: 2.5 @@ -294,7 +292,7 @@ bulb: Bulb damage: types: - Heat: 5 + Heat: 2 - type: ApcPowerReceiver - type: ExtensionCableReceiver - type: DeviceNetwork @@ -333,7 +331,7 @@ hasLampOnSpawn: LedLightBulb damage: types: - Heat: 2.5 + Heat: 1 - type: entity id: PoweredSmallLight @@ -348,7 +346,7 @@ hasLampOnSpawn: LightBulb damage: types: - Heat: 5 + Heat: 2 #Emergency Lights - type: entity @@ -363,7 +361,7 @@ radius: 5 energy: 0.6 offset: "0, 0.4" - color: "#FF4020" + color: "#7CFC00" mask: /Textures/Effects/LightMasks/double_cone.png - type: ApcPowerReceiver - type: ExtensionCableReceiver @@ -380,10 +378,10 @@ map: [ "enum.EmergencyLightVisualLayers.Base" ] - state: emergency_light_off map: [ "enum.EmergencyLightVisualLayers.LightOff" ] - color: "#FF4020" + color: "#7CFC00" - state: emergency_light_on map: [ "enum.EmergencyLightVisualLayers.LightOn" ] - color: "#FF4020" + color: "#7CFC00" shader: "unshaded" visible: false - type: Appearance @@ -403,7 +401,7 @@ hasLampOnSpawn: LightTubeCrystalCyan damage: types: - Heat: 5 + Heat: 2 - type: PointLight radius: 8 energy: 3 @@ -430,7 +428,7 @@ hasLampOnSpawn: LightTubeCrystalBlue damage: types: - Heat: 5 + Heat: 2 - type: PointLight radius: 8 energy: 3 @@ -457,7 +455,7 @@ hasLampOnSpawn: LightTubeCrystalPink damage: types: - Heat: 5 + Heat: 2 - type: PointLight radius: 8 energy: 3 @@ -484,7 +482,7 @@ hasLampOnSpawn: LightTubeCrystalOrange damage: types: - Heat: 5 + Heat: 2 - type: PointLight radius: 8 energy: 3 @@ -511,7 +509,7 @@ hasLampOnSpawn: LightTubeCrystalRed damage: types: - Heat: 5 + Heat: 2 - type: PointLight radius: 8 energy: 3 @@ -538,7 +536,7 @@ hasLampOnSpawn: LightTubeCrystalGreen damage: types: - Heat: 5 + Heat: 2 - type: PointLight radius: 8 energy: 3 diff --git a/Resources/Prototypes/Entities/Structures/Lighting/ground_lighting.yml b/Resources/Prototypes/Entities/Structures/Lighting/ground_lighting.yml index 34a6f08294e..2afde4ef3fc 100644 --- a/Resources/Prototypes/Entities/Structures/Lighting/ground_lighting.yml +++ b/Resources/Prototypes/Entities/Structures/Lighting/ground_lighting.yml @@ -79,7 +79,7 @@ bulb: Tube damage: types: - Heat: 20 + Heat: 2 - type: ContainerContainer containers: light_bulb: !type:ContainerSlot @@ -124,7 +124,7 @@ hasLampOnSpawn: LightTube damage: types: - Heat: 20 + Heat: 2 - type: StaticPrice price: 25 - type: AmbientOnPowered @@ -153,7 +153,7 @@ hasLampOnSpawn: LedLightTube damage: types: - Heat: 20 + Heat: 1 - type: StaticPrice price: 25 - type: AmbientOnPowered diff --git a/Resources/Prototypes/Entities/Structures/Lighting/strobe_lighting.yml b/Resources/Prototypes/Entities/Structures/Lighting/strobe_lighting.yml index 8eceb76b639..72f54396469 100644 --- a/Resources/Prototypes/Entities/Structures/Lighting/strobe_lighting.yml +++ b/Resources/Prototypes/Entities/Structures/Lighting/strobe_lighting.yml @@ -89,7 +89,7 @@ on: false damage: types: - Heat: 5 + Heat: 2 - type: ApcPowerReceiver - type: ExtensionCableReceiver - type: DeviceNetwork @@ -145,4 +145,4 @@ volume: 0 range: 10 sound: - path: "/Audio/Effects/Lightning/strobeepsilon.ogg" \ No newline at end of file + path: "/Audio/Effects/Lightning/strobeepsilon.ogg" diff --git a/Resources/Prototypes/Entities/Structures/Machines/Computers/arcades.yml b/Resources/Prototypes/Entities/Structures/Machines/Computers/arcades.yml index 59690e56ebd..98c0f229ed5 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/Computers/arcades.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/Computers/arcades.yml @@ -90,9 +90,9 @@ - type: ActivatableUIRequiresPower - type: UserInterface interfaces: - - key: enum.SpaceVillainArcadeUiKey.Key + enum.SpaceVillainArcadeUiKey.Key: type: SpaceVillainArcadeBoundUserInterface - - key: enum.WiresUiKey.Key + enum.WiresUiKey.Key: type: WiresBoundUserInterface - type: Computer board: SpaceVillainArcadeComputerCircuitboard @@ -134,9 +134,9 @@ - type: ActivatableUIRequiresPower - type: UserInterface interfaces: - - key: enum.BlockGameUiKey.Key + enum.BlockGameUiKey.Key: type: BlockGameBoundUserInterface - - key: enum.WiresUiKey.Key + enum.WiresUiKey.Key: type: WiresBoundUserInterface - type: Computer board: BlockGameArcadeComputerCircuitboard diff --git a/Resources/Prototypes/Entities/Structures/Machines/Computers/base_structurecomputers.yml b/Resources/Prototypes/Entities/Structures/Machines/Computers/base_structurecomputers.yml index b7ea7c6f6ca..9468ecd4523 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/Computers/base_structurecomputers.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/Computers/base_structurecomputers.yml @@ -62,11 +62,11 @@ priority: 1 - type: RequireProjectileTarget - type: LanguageSpeaker - currentLanguage: GalacticCommon + currentLanguage: TauCetiBasic - type: LanguageKnowledge speaks: - - GalacticCommon + - TauCetiBasic - RobotTalk understands: - - GalacticCommon + - TauCetiBasic - RobotTalk diff --git a/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml b/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml index 33bc4bf70ca..df1a56866ba 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml @@ -1,8 +1,8 @@ - type: entity parent: BaseComputer id: ComputerAlert - name: alerts computer - description: Used to access the station's automated alert system. + name: atmospheric alerts computer + description: Used to access the station's automated atmospheric alert system. components: - type: Computer board: AlertsComputerCircuitboard @@ -13,9 +13,33 @@ - map: ["computerLayerKeyboard"] state: generic_keyboard - map: ["computerLayerScreen"] - state: alert-2 + state: alert-0 - map: ["computerLayerKeys"] state: atmos_key + - type: GenericVisualizer + visuals: + enum.ComputerVisuals.Powered: + computerLayerScreen: + True: { visible: true, shader: unshaded } + False: { visible: false } + computerLayerKeys: + True: { visible: true, shader: unshaded } + False: { visible: true, shader: shaded } + enum.AtmosAlertsComputerVisuals.ComputerLayerScreen: + computerLayerScreen: + 0: { state: alert-0 } + 1: { state: alert-0 } + 2: { state: alert-1 } + 3: { state: alert-2 } + 4: { state: alert-2 } + - type: AtmosAlertsComputer + - type: ActivatableUI + singleUser: true + key: enum.AtmosAlertsComputerUiKey.Key + - type: UserInterface + interfaces: + enum.AtmosAlertsComputerUiKey.Key: + type: AtmosAlertsComputerBoundUserInterface - type: entity parent: BaseComputer @@ -31,8 +55,8 @@ key: enum.EmergencyConsoleUiKey.Key - type: UserInterface interfaces: - - key: enum.EmergencyConsoleUiKey.Key - type: EmergencyConsoleBoundUserInterface + enum.EmergencyConsoleUiKey.Key: + type: EmergencyConsoleBoundUserInterface - type: PointLight radius: 1.5 energy: 1.6 @@ -52,8 +76,8 @@ key: enum.ShuttleConsoleUiKey.Key - type: UserInterface interfaces: - - key: enum.ShuttleConsoleUiKey.Key - type: ShuttleConsoleBoundUserInterface + enum.ShuttleConsoleUiKey.Key: + type: ShuttleConsoleBoundUserInterface - type: RadarConsole - type: WorldLoader radius: 256 @@ -211,8 +235,8 @@ key: enum.IFFConsoleUiKey.Key - type: UserInterface interfaces: - - key: enum.IFFConsoleUiKey.Key - type: IFFConsoleBoundUserInterface + enum.IFFConsoleUiKey.Key: + type: IFFConsoleBoundUserInterface - type: Computer board: ComputerIFFCircuitboard @@ -231,8 +255,8 @@ key: enum.IFFConsoleUiKey.Key - type: UserInterface interfaces: - - key: enum.IFFConsoleUiKey.Key - type: IFFConsoleBoundUserInterface + enum.IFFConsoleUiKey.Key: + type: IFFConsoleBoundUserInterface - type: Computer board: ComputerIFFSyndicateCircuitboard @@ -271,8 +295,8 @@ key: enum.PowerMonitoringConsoleUiKey.Key - type: UserInterface interfaces: - - key: enum.PowerMonitoringConsoleUiKey.Key - type: PowerMonitoringConsoleBoundUserInterface + enum.PowerMonitoringConsoleUiKey.Key: + type: PowerMonitoringConsoleBoundUserInterface - type: entity parent: BaseComputer @@ -306,8 +330,8 @@ - type: CriminalRecordsConsole - type: UserInterface interfaces: - - key: enum.CriminalRecordsConsoleKey.Key - type: CriminalRecordsConsoleBoundUserInterface + enum.CriminalRecordsConsoleKey.Key: + type: CriminalRecordsConsoleBoundUserInterface - type: ActivatableUI key: enum.CriminalRecordsConsoleKey.Key - type: Sprite @@ -328,9 +352,9 @@ board: CriminalRecordsComputerCircuitboard - type: AccessReader access: [["Security"]] - # - type: GuideHelp - # guides: - # - CriminalRecords + - type: GuideHelp + guides: + - CriminalRecords - type: entity parent: BaseComputer @@ -341,8 +365,8 @@ - type: GeneralStationRecordConsole - type: UserInterface interfaces: - - key: enum.GeneralStationRecordConsoleKey.Key - type: GeneralStationRecordConsoleBoundUserInterface + enum.GeneralStationRecordConsoleKey.Key: + type: GeneralStationRecordConsoleBoundUserInterface - type: ActivatableUI key: enum.GeneralStationRecordConsoleKey.Key - type: PointLight @@ -351,9 +375,9 @@ color: "#1f8c28" - type: Computer board: StationRecordsComputerCircuitboard - # - type: GuideHelp - # guides: - # - Forensics + - type: GuideHelp + guides: + - Forensics - type: entity parent: BaseComputer @@ -381,7 +405,7 @@ key: enum.CrewMonitoringUIKey.Key - type: UserInterface interfaces: - - key: enum.CrewMonitoringUIKey.Key + enum.CrewMonitoringUIKey.Key: type: CrewMonitoringBoundUserInterface - type: CrewMonitoringConsole - type: DeviceNetwork @@ -416,10 +440,10 @@ key: enum.ResearchConsoleUiKey.Key - type: UserInterface interfaces: - - key: enum.ResearchConsoleUiKey.Key - type: ResearchConsoleBoundUserInterface - - key: enum.ResearchClientUiKey.Key - type: ResearchClientBoundUserInterface + enum.ResearchConsoleUiKey.Key: + type: ResearchConsoleBoundUserInterface + enum.ResearchClientUiKey.Key: + type: ResearchClientBoundUserInterface - type: ApcPowerReceiver powerLoad: 1000 - type: Computer @@ -430,9 +454,9 @@ radius: 1.5 energy: 1.6 color: "#b53ca1" - # - type: GuideHelp - # guides: - # - Science + - type: GuideHelp + guides: + - Science - type: entity parent: BaseComputer @@ -464,10 +488,10 @@ key: enum.ArtifactAnalzyerUiKey.Key - type: UserInterface interfaces: - - key: enum.ArtifactAnalzyerUiKey.Key - type: AnalysisConsoleBoundUserInterface - - key: enum.ResearchClientUiKey.Key - type: ResearchClientBoundUserInterface + enum.ArtifactAnalzyerUiKey.Key: + type: AnalysisConsoleBoundUserInterface + enum.ResearchClientUiKey.Key: + type: ResearchClientBoundUserInterface - type: ApcPowerReceiver powerLoad: 1000 - type: Computer @@ -476,9 +500,9 @@ radius: 1.5 energy: 1.6 color: "#b53ca1" - # - type: GuideHelp - # guides: - # - Xenoarchaeology + - type: GuideHelp + guides: + - Xenoarchaeology - type: entity parent: BaseComputer @@ -509,8 +533,8 @@ key: enum.IdCardConsoleUiKey.Key - type: UserInterface interfaces: - - key: enum.IdCardConsoleUiKey.Key - type: IdCardConsoleBoundUserInterface + enum.IdCardConsoleUiKey.Key: + type: IdCardConsoleBoundUserInterface - type: CrewManifestViewer ownerKey: enum.IdCardConsoleUiKey.Key - type: Sprite @@ -580,8 +604,8 @@ key: enum.CommunicationsConsoleUiKey.Key - type: UserInterface interfaces: - - key: enum.CommunicationsConsoleUiKey.Key - type: CommunicationsConsoleBoundUserInterface + enum.CommunicationsConsoleUiKey.Key: + type: CommunicationsConsoleBoundUserInterface - type: Computer board: CommsComputerCircuitboard - type: PointLight @@ -644,8 +668,8 @@ key: enum.SolarControlConsoleUiKey.Key - type: UserInterface interfaces: - - key: enum.SolarControlConsoleUiKey.Key - type: SolarControlConsoleBoundUserInterface + enum.SolarControlConsoleUiKey.Key: + type: SolarControlConsoleBoundUserInterface - type: Computer board: SolarControlComputerCircuitboard - type: PointLight @@ -674,8 +698,8 @@ key: enum.RadarConsoleUiKey.Key - type: UserInterface interfaces: - - key: enum.RadarConsoleUiKey.Key - type: RadarConsoleBoundUserInterface + enum.RadarConsoleUiKey.Key: + type: RadarConsoleBoundUserInterface - type: Computer board: RadarConsoleCircuitboard - type: PointLight @@ -704,8 +728,8 @@ key: enum.CargoConsoleUiKey.Shuttle - type: UserInterface interfaces: - - key: enum.CargoConsoleUiKey.Shuttle - type: CargoShuttleConsoleBoundUserInterface + enum.CargoConsoleUiKey.Shuttle: + type: CargoShuttleConsoleBoundUserInterface - type: Computer board: CargoShuttleComputerCircuitboard - type: PointLight @@ -714,9 +738,9 @@ color: "#b89f25" - type: AccessReader access: [["Cargo"]] - # - type: GuideHelp - # guides: - # - Cargo + - type: GuideHelp + guides: + - Cargo - type: entity id: ComputerCargoOrders @@ -735,12 +759,15 @@ - map: ["computerLayerKeys"] state: tech_key - type: CargoOrderConsole + - type: ActiveRadio + channels: + - Supply - type: ActivatableUI key: enum.CargoConsoleUiKey.Orders - type: UserInterface interfaces: - - key: enum.CargoConsoleUiKey.Orders - type: CargoOrderConsoleBoundUserInterface + enum.CargoConsoleUiKey.Orders: + type: CargoOrderConsoleBoundUserInterface - type: Computer board: CargoRequestComputerCircuitboard - type: PointLight @@ -748,7 +775,7 @@ energy: 1.6 color: "#b89f25" - type: AccessReader - access: [["Orders"]] # DeltaV - see Resources/Prototypes/DeltaV/Access/cargo.yml + access: [["Cargo"]] - type: DeviceNetwork deviceNetId: Wireless receiveFrequencyId: BasicDevice @@ -758,9 +785,9 @@ range: 200 ports: - OrderSender - # - type: GuideHelp - # guides: - # - Cargo + - type: GuideHelp + guides: + - Cargo - type: entity id: ComputerCargoBounty @@ -783,8 +810,8 @@ key: enum.CargoConsoleUiKey.Bounty - type: UserInterface interfaces: - - key: enum.CargoConsoleUiKey.Bounty - type: CargoBountyConsoleBoundUserInterface + enum.CargoConsoleUiKey.Bounty: + type: CargoBountyConsoleBoundUserInterface - type: Computer board: CargoBountyComputerCircuitboard - type: PointLight @@ -793,9 +820,9 @@ color: "#b89f25" - type: AccessReader access: [["Quartermaster"]] -# - type: GuideHelp -# guides: -# - CargoBounties + - type: GuideHelp + guides: + - CargoBounties - type: entity parent: BaseComputer @@ -834,17 +861,17 @@ key: enum.CloningConsoleUiKey.Key - type: UserInterface interfaces: - - key: enum.CloningConsoleUiKey.Key - type: CloningConsoleBoundUserInterface + enum.CloningConsoleUiKey.Key: + type: CloningConsoleBoundUserInterface - type: Speech speechVerb: Robotic speechSounds: Pai - type: Damageable damageContainer: Inorganic damageModifierSet: StrongMetallic - # - type: GuideHelp - # guides: - # - Cloning + - type: GuideHelp + guides: + - Cloning - type: entity id: ComputerSalvageExpedition @@ -878,7 +905,7 @@ - type: ActivatableUIRequiresPower - type: UserInterface interfaces: - - key: enum.SalvageConsoleUiKey.Expedition + enum.SalvageConsoleUiKey.Expedition: type: SalvageExpeditionConsoleBoundUserInterface - type: Computer board: SalvageExpeditionsComputerCircuitboard @@ -923,8 +950,8 @@ anchored: true - type: UserInterface interfaces: - - key: enum.SurveillanceCameraMonitorUiKey.Key - type: SurveillanceCameraMonitorBoundUserInterface + enum.SurveillanceCameraMonitorUiKey.Key: + type: SurveillanceCameraMonitorBoundUserInterface - type: entity parent: BaseComputer @@ -960,8 +987,8 @@ - type: ActivatableUIRequiresVision - type: UserInterface interfaces: - - key: enum.SurveillanceCameraMonitorUiKey.Key - type: SurveillanceCameraMonitorBoundUserInterface + enum.SurveillanceCameraMonitorUiKey.Key: + type: SurveillanceCameraMonitorBoundUserInterface - type: entity id: ComputerPalletConsole @@ -987,17 +1014,17 @@ key: enum.CargoPalletConsoleUiKey.Sale - type: UserInterface interfaces: - - key: enum.CargoPalletConsoleUiKey.Sale - type: CargoPalletConsoleBoundUserInterface + enum.CargoPalletConsoleUiKey.Sale: + type: CargoPalletConsoleBoundUserInterface - type: Computer board: CargoRequestComputerCircuitboard - type: PointLight radius: 1.5 energy: 1.6 color: "#b89f25" - # - type: GuideHelp - # guides: - # - Cargo + - type: GuideHelp + guides: + - Cargo - type: entity parent: BaseComputer @@ -1028,8 +1055,8 @@ anchored: true - type: UserInterface interfaces: - - key: enum.NewsWriterUiKey.Key - type: NewsWriterBoundUserInterface + enum.NewsWriterUiKey.Key: + type: NewsWriterBoundUserInterface - type: entity parent: BaseComputer @@ -1061,7 +1088,7 @@ key: enum.SensorMonitoringConsoleUiKey.Key - type: UserInterface interfaces: - - key: enum.SensorMonitoringConsoleUiKey.Key + enum.SensorMonitoringConsoleUiKey.Key: type: SensorMonitoringConsoleBoundUserInterface - type: DeviceNetwork deviceNetId: AtmosDevices @@ -1073,3 +1100,42 @@ - type: WiredNetworkConnection - type: DeviceList - type: AtmosDevice + +- type: entity + parent: BaseComputer + id: ComputerRoboticsControl + name: robotics control console + description: Used to remotely monitor, disable and destroy the station's cyborgs. + components: + - type: Sprite + layers: + - map: ["computerLayerBody"] + state: computer + - map: ["computerLayerKeyboard"] + state: generic_keyboard + - map: ["computerLayerScreen"] + state: robot + - map: ["computerLayerKeys"] + state: rd_key + - type: RoboticsConsole + - type: ActiveRadio + channels: + - Science + - type: ActivatableUI + key: enum.RoboticsConsoleUiKey.Key + - type: UserInterface + interfaces: + enum.RoboticsConsoleUiKey.Key: + type: RoboticsConsoleBoundUserInterface + - type: ApcPowerReceiver + powerLoad: 1000 + - type: DeviceNetwork + deviceNetId: Wireless + receiveFrequencyId: RoboticsConsole + transmitFrequencyId: CyborgControl + - type: Computer + board: RoboticsConsoleCircuitboard + - type: AccessReader # only used for dangerous things + access: [["ResearchDirector"]] + - type: Lock + unlockOnClick: false diff --git a/Resources/Prototypes/Entities/Structures/Machines/Computers/techdiskterminal.yml b/Resources/Prototypes/Entities/Structures/Machines/Computers/techdiskterminal.yml index df989a77957..dd58b9709d3 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/Computers/techdiskterminal.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/Computers/techdiskterminal.yml @@ -19,10 +19,10 @@ - type: ActivatableUIRequiresPower - type: UserInterface interfaces: - - key: enum.DiskConsoleUiKey.Key - type: DiskConsoleBoundUserInterface - - key: enum.ResearchClientUiKey.Key - type: ResearchClientBoundUserInterface + enum.DiskConsoleUiKey.Key: + type: DiskConsoleBoundUserInterface + enum.ResearchClientUiKey.Key: + type: ResearchClientBoundUserInterface - type: ExtensionCableReceiver - type: Computer board: TechDiskComputerCircuitboard diff --git a/Resources/Prototypes/Entities/Structures/Machines/Medical/cryo_pod.yml b/Resources/Prototypes/Entities/Structures/Machines/Medical/cryo_pod.yml index adbbc8454c1..d1ba1d2005d 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/Medical/cryo_pod.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/Medical/cryo_pod.yml @@ -89,9 +89,9 @@ scanDelay: 0 - type: UserInterface interfaces: - - key: enum.HealthAnalyzerUiKey.Key + enum.HealthAnalyzerUiKey.Key: type: HealthAnalyzerBoundUserInterface - - key: enum.WiresUiKey.Key + enum.WiresUiKey.Key: type: WiresBoundUserInterface - type: ActivatableUI key: enum.HealthAnalyzerUiKey.Key diff --git a/Resources/Prototypes/Entities/Structures/Machines/anomaly_equipment.yml b/Resources/Prototypes/Entities/Structures/Machines/anomaly_equipment.yml index cd858c52771..572c90faf31 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/anomaly_equipment.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/anomaly_equipment.yml @@ -27,8 +27,8 @@ - type: ActivatableUIRequiresPower - type: UserInterface interfaces: - - key: enum.ResearchClientUiKey.Key - type: ResearchClientBoundUserInterface + enum.ResearchClientUiKey.Key: + type: ResearchClientBoundUserInterface - type: Machine board: AnomalyVesselCircuitboard - type: PointLight @@ -176,8 +176,8 @@ SetParticleZeta: AnomalousParticleZeta SetParticleSigma: AnomalousParticleSigma fireBurstSize: 1 - fireBurstDelayMin: 2 - fireBurstDelayMax: 6 + baseFireBurstDelayMin: 2 + baseFireBurstDelayMax: 6 - type: ApcPowerReceiver powerLoad: 100 # - type: GuideHelp @@ -298,8 +298,8 @@ - type: ActivatableUIRequiresPower - type: UserInterface interfaces: - - key: enum.AnomalyGeneratorUiKey.Key - type: AnomalyGeneratorBoundUserInterface + enum.AnomalyGeneratorUiKey.Key: + type: AnomalyGeneratorBoundUserInterface - type: Appearance - type: ActiveRadio channels: diff --git a/Resources/Prototypes/Entities/Structures/Machines/anomaly_sync.yml b/Resources/Prototypes/Entities/Structures/Machines/anomaly_sync.yml index 3019b8adf83..eeaae611c37 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/anomaly_sync.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/anomaly_sync.yml @@ -41,7 +41,7 @@ bounds: "-0.35,-0.35,0.35,0.35" density: 100 mask: - - ItemMask + - ItemMask hard: True - type: Transform anchored: true @@ -49,6 +49,9 @@ - type: ApcPowerReceiver powerLoad: 2500 needsPower: true + - type: UpgradePowerDraw + powerDrawMultiplier: 0.80 + scaling: Exponential - type: ItemPlacer whitelist: components: diff --git a/Resources/Prototypes/Entities/Structures/Machines/artifact_analyzer.yml b/Resources/Prototypes/Entities/Structures/Machines/artifact_analyzer.yml index 11f83c55972..0365e3e190f 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/artifact_analyzer.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/artifact_analyzer.yml @@ -44,6 +44,7 @@ powerLoad: 12000 needsPower: false #only turns on when scanning - type: ArtifactAnalyzer + - type: TraversalDistorter - type: ItemPlacer whitelist: components: @@ -107,6 +108,9 @@ hard: False - type: Transform noRot: false + - type: UpgradePowerDraw + powerDrawMultiplier: 0.80 + scaling: Exponential - type: TraversalDistorter - type: ItemPlacer # don't limit the number of artifacts that can be biased diff --git a/Resources/Prototypes/Entities/Structures/Machines/bombs.yml b/Resources/Prototypes/Entities/Structures/Machines/bombs.yml index 16587c28e34..5371ed0889a 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/bombs.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/bombs.yml @@ -10,7 +10,7 @@ - type: InteractionOutline - type: UserInterface interfaces: - - key: enum.WiresUiKey.Key + enum.WiresUiKey.Key: type: WiresBoundUserInterface - type: Wires layoutId: Defusable diff --git a/Resources/Prototypes/Entities/Structures/Machines/chem_master.yml b/Resources/Prototypes/Entities/Structures/Machines/chem_master.yml index 6747a5c21d4..e03dafd4193 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/chem_master.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/chem_master.yml @@ -50,8 +50,8 @@ - type: ActivatableUIRequiresPower - type: UserInterface interfaces: - - key: enum.ChemMasterUiKey.Key - type: ChemMasterBoundUserInterface + enum.ChemMasterUiKey.Key: + type: ChemMasterBoundUserInterface - type: ApcPowerReceiver powerLoad: 250 - type: Appearance diff --git a/Resources/Prototypes/Entities/Structures/Machines/fax_machine.yml b/Resources/Prototypes/Entities/Structures/Machines/fax_machine.yml index e8439f82131..75d125a84c7 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/fax_machine.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/fax_machine.yml @@ -1,4 +1,4 @@ -- type: entity +- type: entity parent: BaseMachinePowered id: FaxMachineBase name: long range fax machine @@ -9,7 +9,7 @@ drawdepth: SmallObjects layers: - state: icon - map: ["base"] + map: [ "enum.FaxMachineVisuals.VisualState" ] - type: Icon sprite: Structures/Machines/fax_machine.rsi state: icon @@ -32,30 +32,34 @@ - type: ActivatableUIRequiresPower - type: UserInterface interfaces: - - key: enum.FaxUiKey.Key - type: FaxBoundUi + enum.FaxUiKey.Key: + type: FaxBoundUi - type: ApcPowerReceiver powerLoad: 250 + - type: Faxecute + damage: + types: + Blunt: 100 - type: FaxMachine paperSlot: insertSound: /Audio/Machines/scanning.ogg ejectSound: /Audio/Machines/tray_eject.ogg whitelist: components: - - Paper + - FaxableObject blacklist: tags: - - PaperSlip # DeltaV - Prevent the faxing of paper slips. + - PaperSlip - type: GenericVisualizer visuals: enum.PowerDeviceVisuals.Powered: - base: + enum.FaxMachineVisuals.VisualState: True: { state: idle } False: { state: icon } enum.FaxMachineVisuals.VisualState: - base: - Inserting: { state: inserting } + enum.FaxMachineVisuals.VisualState: Printing: { state: printing } + Normal: {state: idle} - type: ItemSlots - type: ContainerContainer containers: diff --git a/Resources/Prototypes/Entities/Structures/Machines/flatpacker.yml b/Resources/Prototypes/Entities/Structures/Machines/flatpacker.yml index 3244789a028..e83cbfe8739 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/flatpacker.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/flatpacker.yml @@ -58,8 +58,8 @@ - type: ActivatableUIRequiresPower - type: UserInterface interfaces: - - key: enum.FlatpackCreatorUIKey.Key - type: FlatpackCreatorBoundUserInterface + enum.FlatpackCreatorUIKey.Key: + type: FlatpackCreatorBoundUserInterface - type: ItemSlots slots: board_slot: @@ -83,8 +83,7 @@ - type: entity id: FlatpackerNoBoardEffect - categories: - - hideSpawnMenu + categories: [ HideSpawnMenu ] components: - type: Sprite sprite: Structures/Machines/autolathe.rsi diff --git a/Resources/Prototypes/Entities/Structures/Machines/gateway.yml b/Resources/Prototypes/Entities/Structures/Machines/gateway.yml index b6ad9db356f..dd01adf6d5c 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/gateway.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/gateway.yml @@ -52,6 +52,6 @@ key: enum.GatewayUiKey.Key - type: UserInterface interfaces: - - key: enum.GatewayUiKey.Key - type: GatewayBoundUserInterface + enum.GatewayUiKey.Key: + type: GatewayBoundUserInterface - type: Gateway diff --git a/Resources/Prototypes/Entities/Structures/Machines/gravity_generator.yml b/Resources/Prototypes/Entities/Structures/Machines/gravity_generator.yml index 618538dccb7..6ee454c6a98 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/gravity_generator.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/gravity_generator.yml @@ -62,8 +62,8 @@ on: "on" - type: UserInterface interfaces: - - key: enum.GravityGeneratorUiKey.Key - type: GravityGeneratorBoundUserInterface + enum.GravityGeneratorUiKey.Key: + type: GravityGeneratorBoundUserInterface - type: Appearance - type: PointLight radius: 2.5 diff --git a/Resources/Prototypes/Entities/Structures/Machines/hotplate.yml b/Resources/Prototypes/Entities/Structures/Machines/hotplate.yml index 3764f135915..003916ce94e 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/hotplate.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/hotplate.yml @@ -43,7 +43,7 @@ map: ["enum.SolutionHeaterVisuals.IsOn"] shader: unshaded - type: SolutionHeater - heatPerSecond: 160 + baseHeatPerSecond: 160 - type: ItemPlacer whitelist: components: diff --git a/Resources/Prototypes/Entities/Structures/Machines/jukebox.yml b/Resources/Prototypes/Entities/Structures/Machines/jukebox.yml index 76b8ddd36ba..acd8527dbba 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/jukebox.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/jukebox.yml @@ -26,8 +26,8 @@ - type: ActivatableUIRequiresPower - type: UserInterface interfaces: - - key: enum.JukeboxUiKey.Key - type: JukeboxBoundUserInterface + enum.JukeboxUiKey.Key: + type: JukeboxBoundUserInterface - type: Damageable damageContainer: Inorganic damageModifierSet: Metallic diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index 797885aad1f..72c6dc3743f 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -38,10 +38,10 @@ - type: ActivatableUIRequiresPower - type: UserInterface interfaces: - - key: enum.LatheUiKey.Key - type: LatheBoundUserInterface - - key: enum.ResearchClientUiKey.Key - type: ResearchClientBoundUserInterface + enum.LatheUiKey.Key: + type: LatheBoundUserInterface + enum.ResearchClientUiKey.Key: + type: ResearchClientBoundUserInterface - type: Transform anchored: true - type: Pullable @@ -50,11 +50,46 @@ - type: ResearchClient - type: TechnologyDatabase +# a lathe that can be sped up with space lube / slowed down with glue - type: entity - id: Autolathe + abstract: true parent: BaseLathe + id: BaseLatheLube + components: + - type: ReagentSpeed + solution: lube + modifiers: + SpaceLube: 0.25 + SpaceGlue: 5 + - type: SolutionContainerManager + solutions: + lube: + maxVol: 250 + - type: Spillable + solution: lube + - type: RefillableSolution + solution: lube + - type: ExaminableSolution + solution: lube + +- type: entity + abstract: true + id: BaseHyperlathe + components: + - type: Lathe + materialUseMultiplier: 0.5 + timeMultiplier: 1.5 + - type: LatheHeatProducing + - type: ReagentSpeed + modifiers: + SpaceLube: 0.8 # being faster means less heat so lube needs to be nerfed + SpaceGlue: 5 # no change from normal lathe, overheat!!! + +- type: entity + id: Autolathe + parent: BaseLatheLube name: autolathe - description: It produces items using metal and glass. + description: It produces basic items using metal and glass. components: - type: Sprite sprite: Structures/Machines/autolathe.rsi @@ -121,6 +156,7 @@ - DrinkGlass - DrinkShotGlass - DrinkGlassCoupeShaped + - CustomDrinkJug - FoodPlate - FoodPlateSmall - FoodPlatePlastic @@ -162,88 +198,46 @@ - ClothingHeadHatWelding - type: EmagLatheRecipes emagStaticRecipes: - - CartridgePistol - - CartridgeMagnum - - ShellShotgun - - ShellShotgunFlare - - ShellTranquilizer - - CartridgeLightRifle - - CartridgeRifle - - CombatKnife - - MagazineBoxPistol - - MagazineBoxMagnum - - MagazineBoxRifle - - MagazineBoxLightRifle - - GrenadeBlast - # DeltaV - .38 special ammo - Add .38 special lethals to emagged autolathe - - CartridgeSpecial - - MagazineBoxSpecial - # End of modified code - emagDynamicRecipes: - - CartridgePistolRubber - - CartridgeMagnumRubber - - ShellShotgunBeanbag - - CartridgeRifleRubber - - CartridgeLightRifleRubber - - MagazineBoxPistolRubber - - MagazineBoxMagnumRubber - - MagazineBoxRifleRubber - - MagazineBoxLightRifleRubber - - ShellShotgunIncendiary - - CartridgePistolIncendiary - - CartridgeMagnumIncendiary - - CartridgeLightRifleIncendiary - - CartridgeRifleIncendiary - - MagazineBoxPistolIncendiary - - MagazineBoxMagnumIncendiary - - MagazineBoxLightRifleIncendiary - - MagazineBoxRifleIncendiary - - ShellShotgunUranium - - CartridgePistolUranium - - CartridgeMagnumUranium - - CartridgeLightRifleUranium - - CartridgeRifleUranium - - MagazineBoxPistolUranium - - MagazineBoxMagnumUranium - - MagazineBoxLightRifleUranium - - MagazineBoxRifleUranium - - PowerCageSmall - - PowerCageMedium - - PowerCageHigh - - MagazineGrenadeEmpty - - GrenadeEMP - - GrenadeFlash - # DeltaV - .38 special ammo - Add various .38 special ammo to emagged autolathe - - CartridgeSpecialRubber - - CartridgeSpecialIncendiary - - CartridgeSpecialUranium - - CartridgeSpecialMindbreaker - - MagazineBoxSpecialRubber - - MagazineBoxSpecialIncendiary - - MagazineBoxSpecialUranium - - MagazineBoxSpecialMindbreaker - # End of modified code + - BoxLethalshot + - BoxShotgunFlare + - BoxShotgunSlug + - MagazineBoxLightRifle + - MagazineBoxMagnum + - MagazineBoxPistol + - MagazineBoxRifle + - MagazineLightRifle + - MagazineLightRifleEmpty + - MagazinePistol + - MagazinePistolEmpty + - MagazinePistolSubMachineGun + - MagazinePistolSubMachineGunEmpty + - MagazinePistolSubMachineGunTopMounted + - MagazinePistolSubMachineGunTopMountedEmpty + - MagazineRifle + - MagazineRifleEmpty + - MagazineShotgun + - MagazineShotgunEmpty + - MagazineShotgunSlug + - RiotShield + - SpeedLoaderMagnum + - SpeedLoaderMagnumEmpty - type: entity id: AutolatheHyperConvection - parent: Autolathe + parent: [Autolathe, BaseHyperlathe] name: hyper convection autolathe description: A highly-experimental autolathe that harnesses the power of extreme heat to slowly create objects more cost-effectively. components: - type: Sprite sprite: Structures/Machines/autolathe_hypercon.rsi - - type: Lathe - materialUseMultiplier: 0.5 - timeMultiplier: 1.5 - - type: LatheHeatProducing - type: Machine board: AutolatheHyperConvectionMachineCircuitboard - type: entity id: Protolathe - parent: BaseLathe + parent: BaseLatheLube name: protolathe - description: Converts raw materials into useful objects. + description: Converts raw materials into advanced items. components: - type: Sprite sprite: Structures/Machines/protolathe.rsi @@ -294,6 +288,15 @@ - Implanter - PillCanister - ChemistryEmptyBottle01 + - AdvancedCapacitorStockPart + - AdvancedMatterBinStockPart + - NanoManipulatorStockPart + - SuperCapacitorStockPart + - SuperMatterBinStockPart + - PicoManipulatorStockPart + - BluespaceCapacitorStockPart + - BluespaceManipulatorStockPart + - BluespaceMatterBinStockPart - AdvMopItem - WeaponSprayNozzle - ClothingBackpackWaterTank @@ -310,6 +313,7 @@ - PowerCellMicroreactor - PowerCellHigh - WeaponPistolCHIMP + - ClothingMaskWeldingGas - WeaponGauntletGorilla - SynthesizerInstrument - RPED @@ -319,11 +323,11 @@ - HolofanProjector - BluespaceBeaker - SyringeBluespace - #- WeaponForceGun + - WeaponForceGun - WeaponLaserSvalinn - WeaponProtoKineticAccelerator - #- WeaponTetherGun - #- WeaponGrapplingGun + - WeaponTetherGun + - WeaponGrapplingGun - ClothingBackpackHolding - ClothingBackpackSatchelHolding - ClothingBackpackDuffelHolding @@ -359,10 +363,44 @@ - RCD #EE - type: EmagLatheRecipes emagDynamicRecipes: + - BoxBeanbag + - BoxShotgunIncendiary + - BoxShotgunUranium - ExplosivePayload - - WeaponLaserCarbine + - GrenadeBlast + - GrenadeEMP + - GrenadeFlash + - HoloprojectorSecurity + - MagazineBoxLightRifleIncendiary + - MagazineBoxLightRifleUranium + - MagazineBoxMagnumIncendiary + - MagazineBoxMagnumUranium + - MagazineBoxPistolIncendiary + - MagazineBoxPistolUranium + - MagazineBoxRifleIncendiary + - MagazineBoxRifleUranium + - MagazineGrenadeEmpty + - MagazineLightRifleIncendiary + - MagazineLightRifleUranium + - MagazinePistolIncendiary + - MagazinePistolUranium + - MagazineRifleIncendiary + - MagazineRifleUranium + - MagazineShotgunBeanbag + - MagazineShotgunIncendiary + - MagazineShotgunIncendiary + - PortableRecharger + - PowerCageHigh + - PowerCageMedium + - PowerCageSmall + - ShellTranquilizer + - SpeedLoaderMagnumIncendiary + - SpeedLoaderMagnumUranium + - TelescopicShield + - Truncheon - WeaponAdvancedLaser - WeaponLaserCannon + - WeaponLaserCarbine - WeaponXrayCannon - WeaponEnergyGun # DeltaV - Energy Gun - WeaponEnergyGunMini # DeltaV - Miniature Energy Gun @@ -371,22 +409,18 @@ - type: entity id: ProtolatheHyperConvection - parent: Protolathe + parent: [Protolathe, BaseHyperlathe] name: hyper convection protolathe description: A highly-experimental protolathe that harnesses the power of extreme heat to slowly create objects more cost-effectively. components: - type: Sprite sprite: Structures/Machines/protolathe_hypercon.rsi - - type: Lathe - materialUseMultiplier: 0.5 - timeMultiplier: 1.5 - - type: LatheHeatProducing - type: Machine board: ProtolatheHyperConvectionMachineCircuitboard - type: entity id: CircuitImprinter - parent: BaseLathe + parent: BaseLatheLube name: circuit imprinter description: Prints circuit boards for machines. components: @@ -455,6 +489,7 @@ - PowerComputerCircuitboard - AutolatheHyperConvectionMachineCircuitboard - ProtolatheHyperConvectionMachineCircuitboard + - CircuitImprinterHyperConvectionMachineCircuitboard - FatExtractorMachineCircuitboard - FlatpackerMachineCircuitboard - SheetifierMachineCircuitboard @@ -494,12 +529,10 @@ - AnomalySynchronizerCircuitboard - APECircuitboard - ArtifactAnalyzerMachineCircuitboard - - TraversalDistorterMachineCircuitboard - ArtifactCrusherMachineCircuitboard - TelecomServerCircuitboard - MassMediaCircuitboard - ReagentGrinderIndustrialMachineCircuitboard - # Begin Nyano additions - ReverseEngineeringMachineCircuitboard - CrewMonitoringComputerCircuitboard - DoorElectronics @@ -510,8 +543,14 @@ - SalvageMagnetMachineCircuitboard - StationMapElectronics - MetempsychoticMachineCircuitboard - # End Nyano additions - - SalvageExpeditionsComputerCircuitboard # DeltaV + - SalvageExpeditionsComputerCircuitboard + - JukeboxCircuitBoard + - type: EmagLatheRecipes + emagDynamicRecipes: + - ShuttleGunDusterCircuitboard + - ShuttleGunFriendshipCircuitboard + - ShuttleGunPerforatorCircuitboard + - ShuttleGunSvalinnMachineGunCircuitboard - type: MaterialStorage whitelist: tags: @@ -520,9 +559,20 @@ - Ingot - type: RequireProjectileTarget +- type: entity + id: CircuitImprinterHyperConvection + parent: [CircuitImprinter, BaseHyperlathe] + name: hyper convection circuit imprinter + description: A highly-experimental circuit imprinter that harnesses the power of extreme heat to slowly create objects more cost-effectively. + components: + - type: Sprite + sprite: Structures/Machines/circuit_imprinter_hypercon.rsi + - type: Machine + board: CircuitImprinterHyperConvectionMachineCircuitboard + - type: entity id: ExosuitFabricator - parent: BaseLathe + parent: BaseLatheLube name: exosuit fabricator description: Creates parts for robotics and other mechanical needs components: @@ -593,7 +643,7 @@ - BorgModuleLightReplacer - BorgModuleAdvancedCleaning - BorgModuleMining - #- BorgModuleGrapplingGun + - BorgModuleGrapplingGun - BorgModuleAdvancedTool - BorgModuleGPS - BorgModuleRCD @@ -628,8 +678,6 @@ - HamtrRLeg - VimHarness # Begin Nyano additions - - ClothingOuterHardsuitJuggernautReverseEngineered - - ClothingOuterHardsuitSyndieReverseEngineered - JetpackBlue - JetpackMini # End Nyano additions @@ -639,9 +687,9 @@ - Sheet - RawMaterial - Ingot - # - type: GuideHelp - # guides: - # - Robotics + - type: GuideHelp + guides: + - Robotics - type: entity id: Biofabricator @@ -688,7 +736,7 @@ - type: entity id: SecurityTechFab - parent: BaseLathe + parent: BaseLatheLube name: security techfab description: Prints equipment for use by security crew. components: @@ -711,49 +759,65 @@ idleState: icon runningState: icon staticRecipes: + - BoxLethalshot + - BoxShotgunFlare + - BoxShotgunPractice + - BoxShotgunSlug - ClothingEyesHudSecurity - CombatKnife - Flash - - Handcuffs - - Zipties - - Stunbaton - ForensicPad - - RiotShield + - Handcuffs - ShellShotgun - ShellShotgunSlug - ShellShotgunFlare - ShellTranquilizer + - MagazineBoxLightRifle + - MagazineBoxLightRiflePractice + - MagazineBoxMagnum + - MagazineBoxMagnumPractice + - MagazineBoxPistol + - MagazineBoxPistolPractice + - MagazineBoxRifle + - MagazineBoxRiflePractice + - MagazineLightRifle + - MagazineLightRifleEmpty - MagazinePistol + - MagazinePistolEmpty - MagazinePistolSubMachineGun + - MagazinePistolSubMachineGunEmpty - MagazinePistolSubMachineGunTopMounted + - MagazinePistolSubMachineGunTopMountedEmpty - MagazineRifle - - MagazineLightRifle - - MagazineBoxPistol - - MagazineBoxMagnum - - MagazineBoxRifle - - MagazineBoxLightRifle + - MagazineRifleEmpty + - MagazineShotgun + - MagazineShotgunEmpty + - MagazineShotgunSlug + - RiotShield - SpeedLoaderMagnum - - ClothingOuterArmorPlateCarrier # DeltaV - plate carrier body armour - - ClothingOuterArmorDuraVest # DeltaV - stabproof vest body armour + - SpeedLoaderMagnumEmpty + - Stunbaton + - TargetClown + - ClothingOuterArmorPlateCarrier + - ClothingOuterArmorDuraVest - TargetHuman - TargetSyndicate - - TargetClown - - MagazineBoxLightRiflePractice - - MagazineBoxMagnumPractice - - MagazineBoxPistolPractice - - MagazineBoxRiflePractice - - ShellShotgunPractice - - WeaponLaserCarbinePractice - WeaponDisablerPractice + - WeaponLaserCarbinePractice + - Zipties - ShockCollar + - ShadowkinRestraints # DeltaV - .38 special ammo - Add various .38 special ammo to security techfab - MagazineBoxSpecial - MagazineBoxSpecialPractice - SpeedLoaderSpecial - MagazinePistolSpecial - # End of modified code dynamicRecipes: - - EncryptionKeySyndie # Nyano + - BolaEnergy + - BoxBeanbag + - BoxShotgunIncendiary + - BoxShotgunUranium + - EncryptionKeySyndie - CartridgeLightRifleIncendiary - CartridgeMagnumIncendiary - CartridgePistolIncendiary @@ -769,34 +833,51 @@ - ClothingEyesGlassesSecurity - ExplosivePayload - FlashPayload + - GrenadeBlast + - GrenadeEMP + - GrenadeFlash - HoloprojectorSecurity - MagazineBoxLightRifleIncendiary - - MagazineBoxMagnumIncendiary - - MagazineBoxPistolIncendiary - - MagazineBoxRifleIncendiary - MagazineBoxLightRifleUranium + - MagazineBoxMagnumIncendiary - MagazineBoxMagnumUranium + - MagazineBoxPistolIncendiary - MagazineBoxPistolUranium + - MagazineBoxRifleIncendiary - MagazineBoxRifleUranium - - ShellSoulbreaker # Nyanotrasen - Shotgun shell to get rid of psionics + - ShellSoulbreaker - MagazineBoxLightRifleRubber - MagazineBoxMagnumRubber - MagazineBoxPistolRubber - MagazineBoxRifleRubber - MagazineGrenadeEmpty - - GrenadeEMP - - GrenadeFlash - - ShellShotgunBeanbag - - ShellShotgunIncendiary - - ShellShotgunUranium + - MagazineLightRifleIncendiary + - MagazineLightRifleUranium + - MagazinePistolIncendiary + - MagazinePistolUranium + - MagazineRifleIncendiary + - MagazineRifleUranium + - MagazineShotgunBeanbag + - MagazineShotgunIncendiary + - PortableRecharger + - PowerCageHigh + - PowerCageMedium + - PowerCageSmall + - ShellTranquilizer + - ShuttleGunDusterCircuitboard + - ShuttleGunFriendshipCircuitboard + - ShuttleGunPerforatorCircuitboard + - ShuttleGunSvalinnMachineGunCircuitboard - Signaller - SignalTrigger + - SpeedLoaderMagnumIncendiary + - SpeedLoaderMagnumUranium - TelescopicShield - TimerTrigger - Truncheon - VoiceTrigger - - WeaponDisablerPractice - WeaponAdvancedLaser + - WeaponDisabler - WeaponDisablerSMG - WeaponLaserCannon - WeaponLaserCarbine @@ -804,18 +885,10 @@ - ClothingHeadCage # Nyanotrasen - Insulative headgear - ShockCollar # Nyanotrasen - Shock Collar - WeaponXrayCannon - - PowerCageSmall - - PowerCageMedium - - PowerCageHigh - - ShuttleGunSvalinnMachineGunCircuitboard - - ShuttleGunPerforatorCircuitboard - - ShuttleGunFriendshipCircuitboard - - ShuttleGunDusterCircuitboard - - WeaponEnergyGun #DeltaV - Energy Gun - - WeaponEnergyGunMini #DeltaV - Energy Gun but miniature - - WeaponEnergyGunPistol #DeltaV - Energy Gun Mini but with the power of a normal energy gun - - WeaponGunLaserCarbineAutomatic #DeltaV - New Laser Projectiles with a 20 round carbine - # DeltaV - .38 special ammo - Add various .38 special ammo to security techfab + - WeaponEnergyGun + - WeaponEnergyGunMini + - WeaponEnergyGunPistol + - WeaponGunLaserCarbineAutomatic - CartridgeSpecialRubber - CartridgeSpecialIncendiary - CartridgeSpecialUranium @@ -825,7 +898,6 @@ - MagazineBoxSpecialIncendiary - MagazineBoxSpecialUranium - MagazineBoxSpecialMindbreaker - # End of modified code - type: MaterialStorage whitelist: tags: @@ -835,7 +907,7 @@ - type: entity id: AmmoTechFab - parent: BaseLathe + parent: BaseLatheLube name: ammo techfab description: Prints the bare minimum of bullets that any budget military or armory could need. Nothing fancy. components: @@ -858,22 +930,27 @@ idleState: icon runningState: icon staticRecipes: - - CartridgePistol - - CartridgeMagnum - - ShellShotgun - - ShellShotgunSlug - - ShellShotgunFlare - - ShellTranquilizer - - CartridgeLightRifle - - CartridgeRifle - - MagazineBoxPistol + - BoxLethalshot + - BoxShotgunFlare + - BoxShotgunSlug + - MagazineBoxLightRifle - MagazineBoxMagnum + - MagazineBoxPistol - MagazineBoxRifle - - MagazineBoxLightRifle - # DeltaV - .38 special ammo - Add lethal .38 special ammo to ammo techfab + - MagazineLightRifle + - MagazineLightRifleEmpty + - MagazinePistol + - MagazinePistolEmpty + - MagazineRifle + - MagazineRifleEmpty + - MagazineShotgun + - MagazineShotgunEmpty + - MagazineShotgunSlug + - ShellTranquilizer + - SpeedLoaderMagnum + - SpeedLoaderMagnumEmpty - CartridgeSpecial - MagazineBoxSpecial - # End of modified code - type: MaterialStorage whitelist: tags: @@ -883,7 +960,7 @@ - type: entity id: MedicalTechFab - parent: BaseLathe + parent: BaseLatheLube name: medical techfab description: Prints equipment for use by the medbay. components: @@ -1091,7 +1168,8 @@ - ClothingOuterWinterCE - ClothingOuterWinterCMO - ClothingOuterWinterHoP - - ClothingOuterWinterHoS + - ClothingOuterWinterHoSUnarmored + - ClothingOuterWinterWardenUnarmored - ClothingOuterWinterQM - ClothingOuterWinterRD - ClothingNeckMantleCap @@ -1205,7 +1283,8 @@ idleState: icon runningState: building staticRecipes: - - BluespaceCrystal #Nyano - Summary: Bluespace Crystals can be created here. + - BluespaceCrystal + - NormalityCrystal - SheetSteel30 - SheetGlass30 - SheetRGlass30 @@ -1234,6 +1313,8 @@ materialUseMultiplier: 0.75 timeMultiplier: 0.5 staticRecipes: + - BluespaceCrystal + - NormalityCrystal - SheetSteel30 - SheetGlass30 - SheetRGlass30 @@ -1295,7 +1376,6 @@ - type: LitOnPowered - type: ApcPowerReceiver powerLoad: 200 - priority: Low # - type: Advertise # pack: CuddlyCritterAds # TODO Change this - type: PointLight @@ -1321,6 +1401,7 @@ staticRecipes: - PrizeBall - PlushieMothRandom + - PlushieShadowkin - PlushieMothMusician - PlushieMothBartender - PlushieBee diff --git a/Resources/Prototypes/Entities/Structures/Machines/microwave.yml b/Resources/Prototypes/Entities/Structures/Machines/microwave.yml index 8a6c8c86e4b..bc0a90b1bb5 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/microwave.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/microwave.yml @@ -44,8 +44,8 @@ range: 200 - type: UserInterface interfaces: - - key: enum.MicrowaveUiKey.Key - type: MicrowaveBoundUserInterface + enum.MicrowaveUiKey.Key: + type: MicrowaveBoundUserInterface - type: Physics - type: Fixtures fixtures: diff --git a/Resources/Prototypes/Entities/Structures/Machines/nuke.yml b/Resources/Prototypes/Entities/Structures/Machines/nuke.yml index f37c42e4745..bc4581d7b65 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/nuke.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/nuke.yml @@ -88,8 +88,8 @@ key: enum.NukeUiKey.Key - type: UserInterface interfaces: - - key: enum.NukeUiKey.Key - type: NukeBoundUserInterface + enum.NukeUiKey.Key: + type: NukeBoundUserInterface - type: StaticPrice price: 50000 # YOU STOLE A NUCLEAR FISSION EXPLOSIVE?! - type: CargoSellBlacklist diff --git a/Resources/Prototypes/Entities/Structures/Machines/reagent_grinder.yml b/Resources/Prototypes/Entities/Structures/Machines/reagent_grinder.yml index 80bfb465fff..28aa464d210 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/reagent_grinder.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/reagent_grinder.yml @@ -12,8 +12,8 @@ key: enum.ReagentGrinderUiKey.Key - type: UserInterface interfaces: - - key: enum.ReagentGrinderUiKey.Key - type: ReagentGrinderBoundUserInterface + enum.ReagentGrinderUiKey.Key: + type: ReagentGrinderBoundUserInterface - type: Appearance - type: GenericVisualizer visuals: @@ -101,4 +101,4 @@ - type: DrainableSolution solution: output - type: ExaminableSolution - solution: output \ No newline at end of file + solution: output diff --git a/Resources/Prototypes/Entities/Structures/Machines/research.yml b/Resources/Prototypes/Entities/Structures/Machines/research.yml index 68d67f874d0..7834a238590 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/research.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/research.yml @@ -83,8 +83,8 @@ - type: ActivatableUIRequiresPower - type: UserInterface interfaces: - - key: enum.ResearchClientUiKey.Key - type: ResearchClientBoundUserInterface + enum.ResearchClientUiKey.Key: + type: ResearchClientBoundUserInterface - type: Appearance - type: GenericVisualizer visuals: diff --git a/Resources/Prototypes/Entities/Structures/Machines/salvage.yml b/Resources/Prototypes/Entities/Structures/Machines/salvage.yml index 859dc85ff1d..6a2f6c810c2 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/salvage.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/salvage.yml @@ -28,8 +28,8 @@ - type: ActivatableUIRequiresPower - type: UserInterface interfaces: - - key: enum.SalvageMagnetUiKey.Key - type: SalvageMagnetBoundUserInterface + enum.SalvageMagnetUiKey.Key: + type: SalvageMagnetBoundUserInterface - type: Transform noRot: false - type: Appearance diff --git a/Resources/Prototypes/Entities/Structures/Machines/seed_extractor.yml b/Resources/Prototypes/Entities/Structures/Machines/seed_extractor.yml index ec07294bfb1..4ecd1c29e27 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/seed_extractor.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/seed_extractor.yml @@ -35,3 +35,6 @@ - type: SeedExtractor - type: Machine board: SeedExtractorMachineCircuitboard + - type: UpgradePowerDraw + powerDrawMultiplier: 0.75 + scaling: Exponential diff --git a/Resources/Prototypes/Entities/Structures/Machines/surveillance_camera_routers.yml b/Resources/Prototypes/Entities/Structures/Machines/surveillance_camera_routers.yml index e359db813f6..7b342def540 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/surveillance_camera_routers.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/surveillance_camera_routers.yml @@ -13,7 +13,7 @@ - type: DeviceNetworkRequiresPower - type: UserInterface interfaces: - - key: enum.SurveillanceCameraSetupUiKey.Router + enum.SurveillanceCameraSetupUiKey.Router: type: SurveillanceCameraSetupBoundUi - type: Machine board: SurveillanceCameraRouterCircuitboard @@ -118,7 +118,7 @@ - type: DeviceNetworkRequiresPower - type: UserInterface interfaces: - - key: enum.SurveillanceCameraSetupUiKey.Router + enum.SurveillanceCameraSetupUiKey.Router: type: SurveillanceCameraSetupBoundUi - type: Machine board: SurveillanceCameraWirelessRouterCircuitboard diff --git a/Resources/Prototypes/Entities/Structures/Machines/telecomms.yml b/Resources/Prototypes/Entities/Structures/Machines/telecomms.yml index 80938fbb5ed..1fd4afa6e58 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/telecomms.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/telecomms.yml @@ -67,7 +67,7 @@ - type: entity parent: TelecomServer id: TelecomServerFilled - suffix: Filled + suffix: Filled All components: - type: ContainerFill containers: diff --git a/Resources/Prototypes/Entities/Structures/Machines/vending_machines.yml b/Resources/Prototypes/Entities/Structures/Machines/vending_machines.yml index 7cb9f84957d..c79cfa2641c 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/vending_machines.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/vending_machines.yml @@ -60,10 +60,10 @@ - type: ActivatableUIRequiresPower - type: UserInterface interfaces: - - key: enum.VendingMachineUiKey.Key - type: VendingMachineBoundUserInterface - - key: enum.WiresUiKey.Key - type: WiresBoundUserInterface + enum.VendingMachineUiKey.Key: + type: VendingMachineBoundUserInterface + enum.WiresUiKey.Key: + type: WiresBoundUserInterface - type: WiresPanel - type: Wires boardName: wires-board-name-vendingmachine @@ -86,6 +86,7 @@ - type: Electrified enabled: false usesApcPower: true + - type: EtherealLight - type: PointLight enabled: false castShadows: false @@ -105,10 +106,10 @@ - type: WiresVisuals - type: LanguageKnowledge speaks: - - GalacticCommon + - TauCetiBasic - RobotTalk understands: - - GalacticCommon + - TauCetiBasic - RobotTalk - type: VendingMachine soundVend: /Audio/SimpleStation14/Machines/machine_vend.ogg @@ -152,7 +153,6 @@ id: VendingMachineAmmo name: liberation station description: An overwhelming amount of ancient patriotism washes over you just by looking at the machine. - noSpawn: true components: - type: VendingMachine pack: AmmoVendInventory @@ -205,16 +205,15 @@ map: ["enum.WiresVisualLayers.MaintenancePanel"] - type: AccessReader access: [["Bar"]] - # - type: GuideHelp - # guides: - # - Bartender + - type: GuideHelp + guides: + - Bartender - type: entity parent: VendingMachine id: VendingMachineCart name: PTech description: PTech vending! Providing a ROBUST selection of PDAs, cartridges, and anything else a dull paper pusher needs! - noSpawn: true components: - type: VendingMachine pack: PTechInventory @@ -253,7 +252,6 @@ id: VendingMachineChefvend name: ChefVend description: An ingredient vendor for all your cheffin needs. - noSpawn: true components: - type: VendingMachine pack: ChefvendInventory @@ -289,7 +287,6 @@ id: VendingMachineCigs name: ShadyCigs Deluxe description: If you want to get cancer, might as well do it in style. - noSpawn: true components: - type: VendingMachine pack: CigaretteMachineInventory @@ -327,7 +324,6 @@ id: VendingMachineClothing name: ClothesMate description: A vending machine for dispensing the cheapest clothing Nanotrasen can buy. - noSpawn: true components: - type: VendingMachine pack: ClothesMateInventory @@ -362,7 +358,6 @@ id: VendingMachineWinter name: WinterDrobe description: The best place to enjoy the cold! - noSpawn: true components: - type: VendingMachine pack: WinterDrobeInventory @@ -397,7 +392,6 @@ id: VendingMachineCoffee name: Solar's Best Hot Drinks description: Served boiling so it stays hot all shift! - noSpawn: true components: - type: VendingMachine pack: HotDrinksMachineInventory @@ -448,7 +442,6 @@ id: VendingMachineCola name: Robust Softdrinks description: A softdrink vendor provided by Robust Industries, LLC. - noSpawn: true components: - type: VendingMachine pack: RobustSoftdrinksInventory @@ -493,7 +486,6 @@ parent: VendingMachineCola id: VendingMachineColaBlack suffix: Black - noSpawn: true components: - type: Sprite sprite: Structures/Machines/VendingMachines/soda2.rsi @@ -540,7 +532,6 @@ id: VendingMachineSpaceUp name: Space-Up! Vendor description: Indulge in an explosion of flavor. - noSpawn: true components: - type: VendingMachine pack: SpaceUpInventory @@ -567,7 +558,6 @@ parent: VendingMachineCola id: VendingMachineSoda suffix: Soda - noSpawn: true components: - type: VendingMachine pack: SodaInventory @@ -603,7 +593,6 @@ id: VendingMachineStarkist name: Star-kist Vendor description: The taste of a star in liquid form. - noSpawn: true components: - type: VendingMachine pack: StarkistInventory @@ -633,7 +622,6 @@ id: VendingMachineShamblersJuice name: Shambler's Juice Vendor description: ~Shake me up some of that Shambler's Juice!~ - noSpawn: true components: - type: VendingMachine pack: ShamblersJuiceInventory @@ -671,7 +659,6 @@ id: VendingMachinePwrGame name: Pwr Game Vendor description: You want it, we got it. Brought to you in partnership with Vlad's Salads. - noSpawn: true components: - type: VendingMachine pack: PwrGameInventory @@ -711,7 +698,6 @@ id: VendingMachineDrGibb name: Dr. Gibb Vendor description: Canned explosion of different flavors in this very vendor! - noSpawn: true components: - type: VendingMachine pack: DrGibbInventory @@ -751,7 +737,6 @@ id: VendingMachineDinnerware name: Plasteel Chef's Dinnerware Vendor description: A kitchen and restaurant equipment vendor. - noSpawn: true components: - type: VendingMachine pack: DinnerwareInventory @@ -794,7 +779,6 @@ id: VendingMachineMagivend name: MagiVend description: A magic vending machine. - noSpawn: true components: - type: VendingMachine pack: MagiVendInventory @@ -835,7 +819,6 @@ id: VendingMachineDiscount name: Discount Dan's description: A vending machine containing discount snacks from the infamous 'Discount Dan' franchise. - noSpawn: true components: - type: VendingMachine pack: DiscountDansInventory @@ -872,7 +855,6 @@ id: VendingMachineEngivend name: Engi-Vend description: Spare tool vending. What? Did you expect some witty description? - noSpawn: true components: - type: VendingMachine pack: EngiVendInventory @@ -911,7 +893,6 @@ id: VendingMachineMedical name: NanoMed Plus description: It's a medical drug dispenser. Natural chemicals only! - noSpawn: true components: - type: VendingMachine pack: NanoMedPlusInventory @@ -944,9 +925,9 @@ color: "#9dc5c9" mask: /Textures/Effects/LightMasks/cone.png autoRot: true - # - type: GuideHelp - # guides: - # - Medical Doctor + - type: GuideHelp + guides: + - Medical Doctor - type: Transform noRot: false - type: Rotatable @@ -958,7 +939,6 @@ id: VendingMachineNutri name: NutriMax description: A vending machine containing nutritional substances for plants and botanical tools. - noSpawn: true components: - type: VendingMachine pack: NutriMaxInventory @@ -995,7 +975,6 @@ id: VendingMachineSec name: SecTech description: A vending machine containing Security equipment. A label reads SECURITY PERSONNEL ONLY. - noSpawn: true components: - type: VendingMachine pack: SecTechInventory @@ -1027,9 +1006,9 @@ color: "#78645c" mask: /Textures/Effects/LightMasks/cone.png autoRot: true - # - type: GuideHelp - # guides: - # - Security + - type: GuideHelp + guides: + - Security - type: Transform noRot: false - type: Rotatable @@ -1042,7 +1021,6 @@ name: MegaSeed Servitor description: For when you need seeds fast. Hands down the best seed selection on the station! suffix: Unlocked - noSpawn: true components: - type: VendingMachine pack: MegaSeedServitorInventory @@ -1076,7 +1054,6 @@ parent: VendingMachineSeedsUnlocked id: VendingMachineSeeds suffix: Hydroponics - noSpawn: true components: - type: AccessReader access: [["Hydroponics"]] @@ -1086,7 +1063,6 @@ id: VendingMachineSnack name: Getmore Chocolate Corp description: A snack machine courtesy of the Getmore Chocolate Corporation, based out of Mars. - noSpawn: true components: - type: VendingMachine pack: GetmoreChocolateCorpInventory @@ -1131,7 +1107,6 @@ id: VendingMachineSustenance name: Sustenance Vendor description: A vending machine which vends food, as required by section 47-C of the NT's Prisoner Ethical Treatment Agreement. - noSpawn: true components: - type: VendingMachine pack: SustenanceInventory @@ -1163,7 +1138,6 @@ parent: VendingMachineSnack id: VendingMachineSnackBlue suffix: Blue - noSpawn: true components: - type: Sprite sprite: Structures/Machines/VendingMachines/snack-blue.rsi @@ -1186,7 +1160,6 @@ parent: VendingMachineSnack id: VendingMachineSnackOrange suffix: Orange - noSpawn: true components: - type: Sprite sprite: Structures/Machines/VendingMachines/snack-orange.rsi @@ -1209,7 +1182,6 @@ parent: VendingMachineSnack id: VendingMachineSnackGreen suffix: Green - noSpawn: true components: - type: Sprite sprite: Structures/Machines/VendingMachines/snack-green.rsi @@ -1232,7 +1204,6 @@ parent: VendingMachineSnack id: VendingMachineSnackTeal suffix: Teal - noSpawn: true components: - type: Sprite sprite: Structures/Machines/VendingMachines/snack-teal.rsi @@ -1256,7 +1227,6 @@ id: VendingMachineSovietSoda name: BODA description: An old vending machine containing sweet water. - noSpawn: true components: - type: VendingMachine pack: BodaInventory @@ -1301,7 +1271,6 @@ id: VendingMachineTheater name: AutoDrobe description: A vending machine containing costumes. - noSpawn: true components: - type: VendingMachine pack: AutoDrobeInventory @@ -1347,7 +1316,6 @@ id: VendingMachineVendomat name: Vendomat description: Only the finest robust equipment in space! - noSpawn: true components: - type: VendingMachine pack: VendomatInventory @@ -1389,7 +1357,6 @@ id: VendingMachineRobotics name: Robotech Deluxe description: All the tools you need to create your own robot army. - noSpawn: true components: - type: VendingMachine pack: RoboticsInventory @@ -1427,16 +1394,15 @@ - type: Rotatable rotateWhileAnchored: false rotateWhilePulling: true - # - type: GuideHelp - # guides: - # - Robotics + - type: GuideHelp + guides: + - Robotics - type: entity parent: VendingMachine id: VendingMachineYouTool name: YouTool description: "A vending machine containing standard tools. A label reads: Tools for tools." - noSpawn: true components: - type: VendingMachine pack: YouToolInventory @@ -1473,7 +1439,6 @@ id: VendingMachineGames name: Good Clean Fun description: Vends things that the Captain and Head of Personnel are probably not going to appreciate you fiddling with instead of your job... - noSpawn: true components: - type: VendingMachine pack: GoodCleanFunInventory @@ -1514,7 +1479,6 @@ id: VendingMachineChang name: Mr. Chang description: A self-serving Chinese food machine, for all your Chinese food needs. - noSpawn: true components: - type: VendingMachine pack: ChangInventory @@ -1559,7 +1523,6 @@ id: VendingMachineSalvage name: Salvage Vendor description: A dwarf's best friend! - noSpawn: true components: - type: VendingMachine pack: SalvageEquipmentInventory @@ -1585,16 +1548,15 @@ autoRot: true - type: AccessReader access: [["Salvage"]] - # - type: GuideHelp - # guides: - # - Salvage + - type: GuideHelp + guides: + - Salvage - type: entity parent: VendingMachine id: VendingMachineDonut name: Monkin' Donuts description: A donut vendor provided by Robust Industries, LLC. - noSpawn: true components: - type: VendingMachine pack: DonutInventory @@ -1654,7 +1616,6 @@ id: VendingMachineWallMedical name: NanoMed description: "It's a wall-mounted medical equipment dispenser. Natural chemicals only!" - noSpawn: true components: - type: VendingMachine pack: NanoMedInventory @@ -1676,9 +1637,9 @@ map: ["enum.WiresVisualLayers.MaintenancePanel"] - type: AccessReader access: [["Medical"]] - # - type: GuideHelp - # guides: - # - Medical + - type: GuideHelp + guides: + - Medical - type: Transform noRot: false - type: Rotatable @@ -1698,7 +1659,6 @@ id: VendingMachineHydrobe name: HyDrobe description: A machine with a catchy name. It dispenses botany related clothing and gear. - noSpawn: true components: - type: VendingMachine pack: HyDrobeInventory @@ -1727,7 +1687,6 @@ id: VendingMachineLawDrobe name: LawDrobe description: Objection! This wardrobe dispenses the rule of law... and lawyer clothing.. - noSpawn: true components: - type: VendingMachine pack: LawDrobeInventory @@ -1756,7 +1715,6 @@ id: VendingMachineSecDrobe name: SecDrobe description: A vending machine for security and security-related clothing! - noSpawn: true components: - type: VendingMachine pack: SecDrobeInventory @@ -1785,7 +1743,6 @@ id: VendingBarDrobe name: BarDrobe description: A stylish vendor to dispense the most stylish bar clothing! - noSpawn: true components: - type: VendingMachine pack: BarDrobeInventory @@ -1813,7 +1770,6 @@ parent: VendingMachine id: VendingMachineChapel name: PietyVend - noSpawn: true components: - type: VendingMachine pack: PietyVendInventory @@ -1845,7 +1801,6 @@ id: VendingMachineCargoDrobe name: LogiDrobe # DeltaV - Logistics Department replacing Cargo description: A highly advanced vending machine for buying logistics related clothing for free. # DeltaV - Logistics Department replacing Cargo - noSpawn: true components: - type: VendingMachine pack: CargoDrobeInventory @@ -1874,7 +1829,6 @@ id: VendingMachineMediDrobe name: MediDrobe description: A vending machine rumoured to be capable of dispensing clothing for medical personnel. - noSpawn: true components: - type: VendingMachine pack: MediDrobeInventory @@ -1903,7 +1857,6 @@ id: VendingMachineChemDrobe name: ChemDrobe description: A vending machine for dispensing chemistry related clothing. - noSpawn: true components: - type: VendingMachine pack: ChemDrobeInventory @@ -1932,7 +1885,6 @@ id: VendingMachineCuraDrobe name: CuraDrobe description: A lowstock vendor only capable of vending clothing for curators and librarians. - noSpawn: true components: - type: VendingMachine pack: CuraDrobeInventory @@ -1954,14 +1906,13 @@ - state: panel map: ["enum.WiresVisualLayers.MaintenancePanel"] - type: AccessReader - access: [["Service"]] + access: [["Library"]] - type: entity parent: VendingMachine id: VendingMachineAtmosDrobe name: AtmosDrobe description: This relatively unknown vending machine delivers clothing for Atmospherics Technicians, an equally unknown job. - noSpawn: true components: - type: VendingMachine pack: AtmosDrobeInventory @@ -1990,7 +1941,6 @@ id: VendingMachineEngiDrobe name: EngiDrobe description: A vending machine renowned for vending industrial grade clothing. - noSpawn: true components: - type: VendingMachine pack: EngiDrobeInventory @@ -2019,7 +1969,6 @@ id: VendingMachineChefDrobe name: ChefDrobe description: This vending machine might not dispense meat, but it certainly dispenses chef related clothing. - noSpawn: true components: - type: VendingMachine pack: ChefDrobeInventory @@ -2048,7 +1997,6 @@ id: VendingMachineDetDrobe name: DetDrobe description: A machine for all your detective needs, as long as you need clothes. - noSpawn: true components: - type: VendingMachine pack: DetDrobeInventory @@ -2077,7 +2025,6 @@ id: VendingMachineJaniDrobe name: JaniDrobe description: A self cleaning vending machine capable of dispensing clothing for janitors. - noSpawn: true components: - type: VendingMachine pack: JaniDrobeInventory @@ -2114,7 +2061,6 @@ id: VendingMachineSciDrobe name: SciDrobe description: A simple vending machine suitable to dispense well tailored science clothing. Endorsed by Space Cubans. - noSpawn: true components: - type: VendingMachine pack: SciDrobeInventory @@ -2143,7 +2089,6 @@ id: VendingMachineSyndieDrobe name: SyndieDrobe description: Wardrobe machine encoded by the syndicate, contains elite outfits for various operations. - noSpawn: true components: - type: VendingMachine pack: SyndieDrobeInventory @@ -2172,7 +2117,6 @@ id: VendingMachineRoboDrobe name: RoboDrobe description: A vending machine designed to dispense clothing known only to roboticists. - noSpawn: true components: - type: VendingMachine pack: RoboDrobeInventory @@ -2201,7 +2145,6 @@ id: VendingMachineGeneDrobe name: GeneDrobe description: A machine for dispensing clothing related to genetics. - noSpawn: true components: - type: VendingMachine pack: GeneDrobeInventory @@ -2230,7 +2173,6 @@ id: VendingMachineViroDrobe name: ViroDrobe description: An unsterilized machine for dispending virology related clothing. - noSpawn: true components: - type: VendingMachine pack: ViroDrobeInventory @@ -2259,7 +2201,6 @@ id: VendingMachineCentDrobe name: CentDrobe description: A one-of-a-kind vending machine for all your centcom aesthetic needs! - noSpawn: true components: - type: VendingMachine pack: CentDrobeInventory @@ -2290,7 +2231,6 @@ id: VendingMachineHappyHonk name: Happy Honk Dispenser description: A happy honk meal box dispenser made by honk! co. - noSpawn: true components: - type: VendingMachine pack: HappyHonkDispenserInventory @@ -2334,7 +2274,6 @@ suffix: EVA [O2, N2] name: gas tank dispenser description: A vendor for dispensing gas tanks. - noSpawn: true components: - type: VendingMachine pack: TankDispenserEVAInventory @@ -2348,7 +2287,6 @@ suffix: ENG [O2, Plasma] name: gas tank dispenser description: A vendor for dispensing gas tanks. This one has an engineering livery. - noSpawn: true components: - type: VendingMachine pack: TankDispenserEngineeringInventory @@ -2363,7 +2301,6 @@ id: VendingMachineChemicals name: ChemVend description: Probably not the coffee machine. - noSpawn: true components: - type: VendingMachine pack: ChemVendInventory @@ -2383,16 +2320,15 @@ map: ["enum.WiresVisualLayers.MaintenancePanel"] - type: AccessReader access: [["Chemistry"]] - # - type: GuideHelp - # guides: - # - Chemicals + - type: GuideHelp + guides: + - Chemicals - type: entity parent: VendingMachineChemicals id: VendingMachineChemicalsSyndicate name: SyndieJuice description: Not made with freshly squeezed syndies I hope. - noSpawn: true components: - type: VendingMachine pack: ChemVendInventorySyndicate @@ -2409,7 +2345,6 @@ parent: VendingMachine name: SweatMAX description: An exercise aid and nutrition supplement vendor that preys on your inadequacy. - noSpawn: true components: - type: Sprite noRot: true @@ -2454,7 +2389,6 @@ parent: VendingMachine name: hot foods description: An old vending machine promising 'hot foods'. You doubt any of its contents are still edible. - noSpawn: true components: - type: Sprite noRot: true @@ -2494,7 +2428,6 @@ parent: VendingMachine name: Mars Mart description: A SolCentric vending machine dispensing treats from home. - noSpawn: true components: - type: Sprite noRot: true @@ -2535,7 +2468,6 @@ parent: VendingMachine name: Nippon-tan description: A distressingly ethnic vending machine loaded with high sucrose low calorie for lack of better words snacks. - noSpawn: true components: - type: Sprite noRot: true diff --git a/Resources/Prototypes/Entities/Structures/Machines/wireless_surveillance_camera.yml b/Resources/Prototypes/Entities/Structures/Machines/wireless_surveillance_camera.yml index 0a145177713..95079b5c858 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/wireless_surveillance_camera.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/wireless_surveillance_camera.yml @@ -35,7 +35,7 @@ range: 10 - type: UserInterface interfaces: - - key: enum.SurveillanceCameraSetupUiKey.Camera + enum.SurveillanceCameraSetupUiKey.Camera: type: SurveillanceCameraSetupBoundUi placement: mode: SnapgridCenter diff --git a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/binary.yml b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/binary.yml index 4bea87f8175..fa5804c6452 100644 --- a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/binary.yml +++ b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/binary.yml @@ -51,8 +51,8 @@ enabled: false - type: UserInterface interfaces: - - key: enum.GasPressurePumpUiKey.Key - type: GasPressurePumpBoundUserInterface + enum.GasPressurePumpUiKey.Key: + type: GasPressurePumpBoundUserInterface - type: Construction graph: GasBinary node: pressurepump @@ -92,7 +92,7 @@ enabled: false - type: UserInterface interfaces: - - key: enum.GasVolumePumpUiKey.Key + enum.GasVolumePumpUiKey.Key: type: GasVolumePumpBoundUserInterface - type: Construction graph: GasBinary diff --git a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/pipes.yml b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/pipes.yml index e5b77095b0e..0025fc5ae1b 100644 --- a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/pipes.yml +++ b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/pipes.yml @@ -1,4 +1,4 @@ -- type: entity +- type: entity abstract: true id: GasPipeBase parent: BaseItem @@ -101,6 +101,20 @@ - type: Construction graph: GasPipe node: straight + - type: Item + size: Normal + storedSprite: + sprite: Structures/Piping/Atmospherics/pipe.rsi + state: storageStraight + shape: + - 0,0,0,2 + - type: MeleeWeapon + attackRate: 1 + damage: + types: + Blunt: 8 + soundHit: + collection: MetalThud # this NEEDS to changed to the metal pipe falling sound effect on april first every year - type: entity parent: GasPipeBase @@ -120,6 +134,27 @@ - type: Construction graph: GasPipe node: bend + - type: Item + size: Small + shape: + - 0,0,1,0 + - 1,1,1,1 + heldPrefix: Bend + storedSprite: + sprite: Structures/Piping/Atmospherics/pipe.rsi + state: storageBend + - type: MeleeWeapon + wideAnimationRotation: 180 + attackRate: 1 + damage: + types: + Blunt: 6 + soundHit: + collection: MetalThud + - type: DamageOtherOnHit + damage: + types: + Blunt: 3 #This should be 6 but throwing damage is doubled at the moment for some reason so for now it's 3 - type: entity parent: GasPipeBase @@ -139,6 +174,23 @@ - type: Construction graph: GasPipe node: tjunction + - type: Item + size: Normal + shape: + - 0,0,2,0 + - 1,1,1,1 + heldPrefix: TJunction + storedSprite: + sprite: Structures/Piping/Atmospherics/pipe.rsi + state: storageTJunction + - type: MeleeWeapon + wideAnimationRotation: 90 + attackRate: 0.75 + damage: + types: + Blunt: 10 + soundHit: + collection: MetalThud - type: entity parent: GasPipeBase @@ -160,6 +212,20 @@ - type: Construction graph: GasPipe node: fourway + - type: Item + size: Normal + shape: + - 1,0,1,2 + - 0,1,2,1 + heldPrefix: Fourway + - type: MeleeWeapon + wideAnimationRotation: 90 + attackRate: 0.75 + damage: + types: + Blunt: 10 + soundHit: + collection: MetalThud - type: entity id: GasPipeBroken diff --git a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/portable.yml b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/portable.yml index 6758c413280..87e71400f73 100644 --- a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/portable.yml +++ b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/portable.yml @@ -144,8 +144,8 @@ - type: WiresVisuals - type: UserInterface interfaces: - - key: enum.SpaceHeaterUiKey.Key - type: SpaceHeaterBoundUserInterface + enum.SpaceHeaterUiKey.Key: + type: SpaceHeaterBoundUserInterface - type: ActivatableUI inHandsOnly: false key: enum.SpaceHeaterUiKey.Key diff --git a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/trinary.yml b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/trinary.yml index d0f239b338b..e8025556aa5 100644 --- a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/trinary.yml +++ b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/trinary.yml @@ -53,7 +53,7 @@ - type: PipeColorVisuals - type: UserInterface interfaces: - - key: enum.GasFilterUiKey.Key + enum.GasFilterUiKey.Key: type: GasFilterBoundUserInterface - type: GasFilter enabled: false @@ -96,6 +96,9 @@ enabled: True: { state: gasFilterFOn } False: { state: gasFilterF } + - type: Construction + node: filterflipped + - type: PipeColorVisuals - type: NodeContainer nodes: @@ -138,7 +141,7 @@ - type: PipeColorVisuals - type: UserInterface interfaces: - - key: enum.GasMixerUiKey.Key + enum.GasMixerUiKey.Key: type: GasMixerBoundUserInterface - type: GasMixer enabled: false @@ -196,6 +199,8 @@ !type:PipeNode nodeGroupID: Pipe pipeDirection: North + - type: Construction + node: mixerflipped - type: entity parent: GasPipeBase diff --git a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml index bf475d5e068..7a69f4759cd 100644 --- a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml +++ b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml @@ -242,8 +242,8 @@ - type: AtmosDevice - type: UserInterface interfaces: - - key: enum.ThermomachineUiKey.Key - type: GasThermomachineBoundUserInterface + enum.ThermomachineUiKey.Key: + type: GasThermomachineBoundUserInterface - type: ActivatableUI inHandsOnly: false key: enum.ThermomachineUiKey.Key @@ -460,7 +460,8 @@ solutions: tank: maxVol: 400 - canMix: true + - type: MixableSolution + solution: tank - type: DrainableSolution solution: tank - type: ExaminableSolution diff --git a/Resources/Prototypes/Entities/Structures/Piping/Disposal/pipes.yml b/Resources/Prototypes/Entities/Structures/Piping/Disposal/pipes.yml index 218b532efcd..7aee5896472 100644 --- a/Resources/Prototypes/Entities/Structures/Piping/Disposal/pipes.yml +++ b/Resources/Prototypes/Entities/Structures/Piping/Disposal/pipes.yml @@ -143,8 +143,8 @@ key: enum.DisposalTaggerUiKey.Key - type: UserInterface interfaces: - - key: enum.DisposalTaggerUiKey.Key - type: DisposalTaggerBoundUserInterface + enum.DisposalTaggerUiKey.Key: + type: DisposalTaggerBoundUserInterface - type: Construction graph: DisposalPipe node: tagger @@ -219,8 +219,8 @@ key: enum.DisposalRouterUiKey.Key - type: UserInterface interfaces: - - key: enum.DisposalRouterUiKey.Key - type: DisposalRouterBoundUserInterface + enum.DisposalRouterUiKey.Key: + type: DisposalRouterBoundUserInterface - type: Fixtures fixtures: fix1: @@ -271,6 +271,8 @@ bounds: "-0.25,-0.5,0.5,0.5" mask: - SubfloorMask + - type: Construction + node: routerflipped - type: entity id: DisposalJunction @@ -353,6 +355,8 @@ bounds: "-0.25,-0.5,0.5,0.5" mask: - SubfloorMask + - type: Construction + node: junctionflipped - type: entity id: DisposalYJunction @@ -489,3 +493,5 @@ pipe: Free: { state: signal-router-flipped-free } Anchored: { state: signal-router-flipped } + - type: Construction + node: signal_router_flipped diff --git a/Resources/Prototypes/Entities/Structures/Piping/Disposal/units.yml b/Resources/Prototypes/Entities/Structures/Piping/Disposal/units.yml index 75ec98c402a..e7d3d3c9977 100644 --- a/Resources/Prototypes/Entities/Structures/Piping/Disposal/units.yml +++ b/Resources/Prototypes/Entities/Structures/Piping/Disposal/units.yml @@ -56,8 +56,8 @@ - type: Appearance - type: UserInterface interfaces: - - key: enum.DisposalUnitUiKey.Key - type: DisposalUnitBoundUserInterface + enum.DisposalUnitUiKey.Key: + type: DisposalUnitBoundUserInterface - type: ContainerContainer containers: disposals: !type:Container @@ -77,10 +77,12 @@ graph: DisposalMachine node: disposal_unit - type: DisposalUnit + - type: ThrowInsertContainer + containerId: disposals - type: UserInterface interfaces: - - key: enum.DisposalUnitUiKey.Key - type: DisposalUnitBoundUserInterface + enum.DisposalUnitUiKey.Key: + type: DisposalUnitBoundUserInterface - type: RatKingRummageable - type: RequireProjectileTarget @@ -130,7 +132,7 @@ - type: Appearance - type: UserInterface interfaces: - - key: enum.MailingUnitUiKey.Key - type: DisposalUnitBoundUserInterface - - key: enum.ConfigurationUiKey.Key - type: ConfigurationBoundUserInterface + enum.MailingUnitUiKey.Key: + type: DisposalUnitBoundUserInterface + enum.ConfigurationUiKey.Key: + type: ConfigurationBoundUserInterface diff --git a/Resources/Prototypes/Entities/Structures/Power/Generation/PA/control_box.yml b/Resources/Prototypes/Entities/Structures/Power/Generation/PA/control_box.yml index ca0cebffecd..96392ecd005 100644 --- a/Resources/Prototypes/Entities/Structures/Power/Generation/PA/control_box.yml +++ b/Resources/Prototypes/Entities/Structures/Power/Generation/PA/control_box.yml @@ -17,10 +17,10 @@ - type: ActivatableUIRequiresPower - type: UserInterface interfaces: - - key: enum.ParticleAcceleratorControlBoxUiKey.Key - type: ParticleAcceleratorBoundUserInterface - - key: enum.WiresUiKey.Key - type: WiresBoundUserInterface + enum.ParticleAcceleratorControlBoxUiKey.Key: + type: ParticleAcceleratorBoundUserInterface + enum.WiresUiKey.Key: + type: WiresBoundUserInterface - type: WiresPanel - type: Wires boardName: wires-board-name-pa diff --git a/Resources/Prototypes/Entities/Structures/Power/Generation/ame.yml b/Resources/Prototypes/Entities/Structures/Power/Generation/ame.yml index 743c8e471c3..d5333c422ff 100644 --- a/Resources/Prototypes/Entities/Structures/Power/Generation/ame.yml +++ b/Resources/Prototypes/Entities/Structures/Power/Generation/ame.yml @@ -66,8 +66,8 @@ key: enum.AmeControllerUiKey.Key - type: UserInterface interfaces: - - key: enum.AmeControllerUiKey.Key - type: AmeControllerBoundUserInterface + enum.AmeControllerUiKey.Key: + type: AmeControllerBoundUserInterface - type: Appearance - type: GenericVisualizer visuals: diff --git a/Resources/Prototypes/Entities/Structures/Power/Generation/portable_generator.yml b/Resources/Prototypes/Entities/Structures/Power/Generation/portable_generator.yml index 80cbe10f684..8321197cb9c 100644 --- a/Resources/Prototypes/Entities/Structures/Power/Generation/portable_generator.yml +++ b/Resources/Prototypes/Entities/Structures/Power/Generation/portable_generator.yml @@ -44,7 +44,7 @@ - type: WiresPanel - type: UserInterface interfaces: - - key: enum.GeneratorComponentUiKey.Key + enum.GeneratorComponentUiKey.Key: type: PortableGeneratorBoundUserInterface - type: ActivatableUI key: enum.GeneratorComponentUiKey.Key @@ -171,6 +171,9 @@ materialWhiteList: [Plasma] - type: PortableGenerator startChance: 0.8 + - type: UpgradePowerSupplier + powerSupplyMultiplier: 1.25 + scaling: Exponential - type: GeneratorExhaustGas gasType: CarbonDioxide # 2 moles of gas for every sheet of plasma. @@ -228,6 +231,9 @@ storageLimit: 3000 materialWhiteList: [Uranium] - type: PortableGenerator + - type: UpgradePowerSupplier + powerSupplyMultiplier: 1.25 + scaling: Exponential - type: PowerMonitoringDevice group: Generator loadNodes: diff --git a/Resources/Prototypes/Entities/Structures/Power/Generation/solar.yml b/Resources/Prototypes/Entities/Structures/Power/Generation/solar.yml index c512266e974..601c7c360a5 100644 --- a/Resources/Prototypes/Entities/Structures/Power/Generation/solar.yml +++ b/Resources/Prototypes/Entities/Structures/Power/Generation/solar.yml @@ -49,7 +49,7 @@ onBump: false requirePower: true highVoltageNode: output - - type: RequireProjectileTarget + - type: RequireProjectileTarget - type: entity id: SolarPanel @@ -58,8 +58,8 @@ description: A solar panel that generates power. components: - type: PowerSupplier - supplyRampTolerance: 500 - supplyRampRate: 500 + supplyRampTolerance: 1000 + supplyRampRate: 1000 - type: SolarPanel - type: Damageable damageContainer: Inorganic @@ -158,7 +158,7 @@ graph: SolarPanel node: solarassembly defaultTarget: solarpanel - - type: RequireProjectileTarget + - type: RequireProjectileTarget - type: entity id: SolarTracker @@ -203,4 +203,4 @@ - type: Construction graph: SolarPanel node: solartracker - - type: RequireProjectileTarget + - type: RequireProjectileTarget diff --git a/Resources/Prototypes/Entities/Structures/Power/apc.yml b/Resources/Prototypes/Entities/Structures/Power/apc.yml index 6504c6a1f48..01147f439f3 100644 --- a/Resources/Prototypes/Entities/Structures/Power/apc.yml +++ b/Resources/Prototypes/Entities/Structures/Power/apc.yml @@ -81,8 +81,8 @@ - type: ExtensionCableProvider - type: UserInterface interfaces: - - key: enum.ApcUiKey.Key - type: ApcBoundUserInterface + enum.ApcUiKey.Key: + type: ApcBoundUserInterface - type: ActivatableUI inHandsOnly: false singleUser: true diff --git a/Resources/Prototypes/Entities/Structures/Power/smes.yml b/Resources/Prototypes/Entities/Structures/Power/smes.yml index 1e3559e5a95..762e8d375f6 100644 --- a/Resources/Prototypes/Entities/Structures/Power/smes.yml +++ b/Resources/Prototypes/Entities/Structures/Power/smes.yml @@ -29,10 +29,15 @@ state: "smes-op1" shader: unshaded - type: Smes + - type: UpgradeBattery + maxChargeMultiplier: 2 + baseMaxCharge: 8000000 + - type: UpgradePowerSupplyRamping + scaling: Linear + supplyRampingMultiplier: 1 - type: Appearance - type: Battery startingCharge: 0 - maxCharge: 8000000 - type: ExaminableBattery - type: NodeContainer examinable: true diff --git a/Resources/Prototypes/Entities/Structures/Power/substation.yml b/Resources/Prototypes/Entities/Structures/Power/substation.yml index 347b18ecaee..489cfff6597 100644 --- a/Resources/Prototypes/Entities/Structures/Power/substation.yml +++ b/Resources/Prototypes/Entities/Structures/Power/substation.yml @@ -17,8 +17,13 @@ shader: unshaded - state: full shader: unshaded + - type: UpgradeBattery + maxChargeMultiplier: 2 + baseMaxCharge: 2500000 + - type: UpgradePowerSupplyRamping + scaling: Linear + supplyRampingMultiplier: 1 - type: Battery - maxCharge: 2500000 startingCharge: 0 - type: ExaminableBattery - type: PointLight diff --git a/Resources/Prototypes/Entities/Structures/Shuttles/thrusters.yml b/Resources/Prototypes/Entities/Structures/Shuttles/thrusters.yml index f87be426598..eb299e3f3a6 100644 --- a/Resources/Prototypes/Entities/Structures/Shuttles/thrusters.yml +++ b/Resources/Prototypes/Entities/Structures/Shuttles/thrusters.yml @@ -143,6 +143,7 @@ - type: Thruster thrusterType: Angular requireSpace: false + baseThrust: 2000 thrust: 2000 machinePartThrust: Manipulator - type: Sprite @@ -192,6 +193,9 @@ collection: MetalBreak - !type:ChangeConstructionNodeBehavior node: machineFrame + - type: UpgradePowerDraw + powerDrawMultiplier: 0.75 + scaling: Exponential - type: Damageable damageContainer: Inorganic damageModifierSet: Electronic @@ -216,6 +220,7 @@ - type: Thruster thrusterType: Angular requireSpace: false + baseThrust: 100 thrust: 100 - type: ApcPowerReceiver needsPower: false diff --git a/Resources/Prototypes/Entities/Structures/Specific/Anomaly/anomalies.yml b/Resources/Prototypes/Entities/Structures/Specific/Anomaly/anomalies.yml index 4e4a6ad87c5..5ed287d02bd 100644 --- a/Resources/Prototypes/Entities/Structures/Specific/Anomaly/anomalies.yml +++ b/Resources/Prototypes/Entities/Structures/Specific/Anomaly/anomalies.yml @@ -782,7 +782,6 @@ - Desoxyephedrine - Ephedrine - THC - - THCOil - SpaceDrugs - Nocturine - MuteToxin diff --git a/Resources/Prototypes/Entities/Structures/Specific/Janitor/janicart.yml b/Resources/Prototypes/Entities/Structures/Specific/Janitor/janicart.yml index 4ad62d8db06..bac93cae0d7 100644 --- a/Resources/Prototypes/Entities/Structures/Specific/Janitor/janicart.yml +++ b/Resources/Prototypes/Entities/Structures/Specific/Janitor/janicart.yml @@ -313,8 +313,8 @@ fillBaseName: cart_water- - type: UserInterface interfaces: - - key: enum.StorageUiKey.Key - type: StorageBoundUserInterface + enum.StorageUiKey.Key: + type: StorageBoundUserInterface - type: Drink solution: bucket - type: ContainerContainer diff --git a/Resources/Prototypes/Entities/Structures/Specific/bay12barbershop.yml b/Resources/Prototypes/Entities/Structures/Specific/bay12barbershop.yml index e66ae347d97..2b0f2a788a6 100644 --- a/Resources/Prototypes/Entities/Structures/Specific/bay12barbershop.yml +++ b/Resources/Prototypes/Entities/Structures/Specific/bay12barbershop.yml @@ -10,7 +10,7 @@ - type: Anchorable - type: Rotatable - type: Sprite - sprite: Structures/Specific/barbershop.rsi + sprite: Structures/Specific/barberchair.rsi state: barberchair - type: entity diff --git a/Resources/Prototypes/Entities/Structures/Specific/oracle.yml b/Resources/Prototypes/Entities/Structures/Specific/oracle.yml index b60906b55e0..3e2ed9508e3 100644 --- a/Resources/Prototypes/Entities/Structures/Specific/oracle.yml +++ b/Resources/Prototypes/Entities/Structures/Specific/oracle.yml @@ -33,7 +33,6 @@ fountain: maxVol: 200 - type: Drink - isOpen: true solution: fountain - type: DrawableSolution solution: fountain @@ -59,14 +58,13 @@ rewardEntities: - OracleRewardDisks - OracleRewardCrystals - demandBlacklist: - tags: - - Bluespace - components: - - MobState - demandWhitelist: - components: - - Item + - type: LanguageSpeaker + currentLanguage: TauCetiBasic + - type: LanguageKnowledge + speaks: + - TauCetiBasic + understands: + - TauCetiBasic - type: weightedRandomEntity diff --git a/Resources/Prototypes/Entities/Structures/Storage/Canisters/gas_canisters.yml b/Resources/Prototypes/Entities/Structures/Storage/Canisters/gas_canisters.yml index 52b008c7f2c..1d184ad45eb 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/Canisters/gas_canisters.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/Canisters/gas_canisters.yml @@ -36,7 +36,7 @@ 3: { state: can-o3, shader: "unshaded" } - type: UserInterface interfaces: - - key: enum.GasCanisterUiKey.Key + enum.GasCanisterUiKey.Key: type: GasCanisterBoundUserInterface - type: Destructible thresholds: 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 783bec3ba0d..7d7bc94bb32 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/Closets/Lockers/base_structurelockers.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/Closets/Lockers/base_structurelockers.yml @@ -45,7 +45,7 @@ min: 1 max: 2 - type: Construction - graph: ClosetSteel + graph: ClosetSteelSecure node: done containers: - entity_storage @@ -66,8 +66,3 @@ behaviors: - !type:DoActsBehavior acts: ["Destruction"] - - type: Construction - graph: ClosetSteelSecure - node: done - containers: - - entity_storage diff --git a/Resources/Prototypes/Entities/Structures/Storage/Closets/Lockers/lockers.yml b/Resources/Prototypes/Entities/Structures/Storage/Closets/Lockers/lockers.yml index b38a77b82b7..c1efc5a63f8 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/Closets/Lockers/lockers.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/Closets/Lockers/lockers.yml @@ -18,6 +18,20 @@ openSound: path: /Audio/Effects/woodenclosetopen.ogg +# Bartender +- type: entity + id: LockerBartender + parent: LockerBase + name: bartender's locker + components: + - type: Appearance + - type: EntityStorageVisuals + stateBaseClosed: bartender + stateDoorOpen: bartender_open + stateDoorClosed: bartender_door + - type: AccessReader + access: [ [ "Bar" ] ] + # Basic - type: entity id: LockerSteel @@ -194,6 +208,20 @@ - type: AccessReader access: [ [ "Hydroponics" ] ] +# Janitor +- type: entity + id: LockerJanitor + parent: LockerBase + name: janitor locker + components: + - type: Appearance + - type: EntityStorageVisuals + stateBaseClosed: jan + stateDoorOpen: jan_open + stateDoorClosed: jan_door + - type: AccessReader + access: [ [ "Janitor" ] ] + # Medicine - type: entity id: LockerMedicine @@ -394,6 +422,20 @@ stateDoorOpen: syndicate_open stateDoorClosed: syndicate_door +- type: entity + id: LockerSyndicateAgentLocker + name: syndicate agent locker + parent: LockerBase + description: It's a personal storage unit for agent gear. + components: + - type: Appearance + - type: EntityStorageVisuals + stateBaseClosed: syndicate1 + stateDoorOpen: syndicate1_open + stateDoorClosed: syndicate1_door + - type: AccessReader + access: [ [ "SyndicateAgent" ] ] + # Bluespace - type: entity id: LockerBluespaceStation diff --git a/Resources/Prototypes/Entities/Structures/Storage/Closets/wall_lockers.yml b/Resources/Prototypes/Entities/Structures/Storage/Closets/wall_lockers.yml index 4280b960b4c..e16df3bfb99 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/Closets/wall_lockers.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/Closets/wall_lockers.yml @@ -22,6 +22,18 @@ stateDoorOpen: emergency_open stateDoorClosed: emergency_door +- type: entity + id: ClosetWallRadiation + name: radiation wall closet + parent: BaseWallCloset + description: It's a storage unit for radiation equipment + components: + - type: Appearance + - type: EntityStorageVisuals + stateBaseClosed: rad + stateDoorOpen: rad_open + stateDoorClosed: rad_door + - type: entity id: ClosetWallFire name: fire-safety wall closet diff --git a/Resources/Prototypes/Entities/Structures/Storage/Crates/base_structurecrates.yml b/Resources/Prototypes/Entities/Structures/Storage/Crates/base_structurecrates.yml index 78c8c84d4c9..01c226cb0fd 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/Crates/base_structurecrates.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/Crates/base_structurecrates.yml @@ -34,7 +34,7 @@ bounds: "-0.4,-0.4,0.4,0.29" density: 50 mask: - - SmallMobMask #this is so they can go under plastic flaps + - CrateMask #this is so they can go under plastic flaps layer: - MachineLayer - type: EntityStorage diff --git a/Resources/Prototypes/Entities/Structures/Storage/Crates/crates.yml b/Resources/Prototypes/Entities/Structures/Storage/Crates/crates.yml index 1cf80836590..bd76a87f557 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/Crates/crates.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/Crates/crates.yml @@ -252,6 +252,18 @@ - type: AccessReader access: [["Engineering"], ["Research"], ["Chemistry"]] +- type: entity + parent: CrateBaseSecure + id: CrateUranium + name: uranium crate + components: + - type: Icon + sprite: Structures/Storage/Crates/uranium.rsi + - type: Sprite + sprite: Structures/Storage/Crates/uranium.rsi + - type: AccessReader + access: [["Engineering"], ["Research"]] + - type: entity parent: CrateBaseSecure id: CrateSecure @@ -356,7 +368,7 @@ bounds: "-0.4,-0.4,0.4,0.29" density: 135 mask: - - SmallMobMask #this is so they can go under plastic flaps + - CrateMask #this is so they can go under plastic flaps layer: - LargeMobLayer - type: Construction @@ -413,7 +425,7 @@ bounds: "-0.4,-0.4,0.4,0.29" density: 80 mask: - - LargeMobMask + - CrateMask layer: - LargeMobLayer - type: StaticPrice diff --git a/Resources/Prototypes/Entities/Structures/Storage/filing_cabinets.yml b/Resources/Prototypes/Entities/Structures/Storage/filing_cabinets.yml index d6becda9cc5..cfda95fc2f9 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/filing_cabinets.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/filing_cabinets.yml @@ -24,8 +24,8 @@ map: ["openLayer"] - type: UserInterface interfaces: - - key: enum.StorageUiKey.Key - type: StorageBoundUserInterface + enum.StorageUiKey.Key: + type: StorageBoundUserInterface - type: Transform noRot: true - type: Fixtures @@ -113,8 +113,8 @@ - type: Appearance - type: UserInterface interfaces: - - key: enum.StorageUiKey.Key - type: StorageBoundUserInterface + enum.StorageUiKey.Key: + type: StorageBoundUserInterface - type: Transform noRot: true - type: Fixtures diff --git a/Resources/Prototypes/Entities/Structures/Storage/glass_box.yml b/Resources/Prototypes/Entities/Structures/Storage/glass_box.yml index bdb02d2bc35..8177b6b6f0d 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/glass_box.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/glass_box.yml @@ -1,97 +1,148 @@ - type: entity - id: GlassBoxLaser - name: glass box - description: A sturdy showcase for an expensive exhibit. + id: BaseGlassBox parent: BaseStructureDynamic + abstract: true placement: mode: SnapgridCenter components: - - type: Anchorable - delay: 4 - type: Transform anchored: true - - type: Damageable - damageContainer: Inorganic - damageModifierSet: Glass - - type: MeleeSound - soundGroups: - Brute: - collection: GlassSmash - type: Physics bodyType: Static - type: Clickable - type: InteractionOutline + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.45,-0.45,0.45,0.45" + density: 1000 + mask: + - MachineMask + layer: + - MidImpassable + - LowImpassable + - type: ItemSlots + - type: ContainerContainer + containers: + ItemCabinet: !type:ContainerSlot + - type: Anchorable + delay: 4 + - type: Appearance + +- type: entity + id: GlassBox + name: glass box + description: A sturdy showcase for an expensive exhibit. + parent: BaseGlassBox + abstract: true # TODO: Temporarily abstract. Remove it after item scaling in cabinets is implemented. + components: - type: Sprite + noRot: true sprite: Structures/Storage/glassbox.rsi layers: - - state: glassbox - - state: caplaser + - state: base + - state: caplaser # TODO: Remove it after item scaling in cabinets is implemented. map: ["enum.ItemCabinetVisualLayers.ContainsItem"] visible: true - state: glass map: ["enum.ItemCabinetVisualLayers.Door"] - - type: ItemCabinet - cabinetSlot: - ejectOnInteract: true - whitelist: - tags: - - WeaponAntiqueLaser - doorSound: - path: /Audio/Machines/machine_switch.ogg - openState: glass-up - closedState: glass - - type: Lock + - state: locked + shader: unshaded + map: ["enum.LockVisualLayers.Lock"] + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.45,-0.45,0.45,0.45" + density: 1000 + mask: + - MachineMask + layer: + - LowImpassable + - MidImpassable + - BulletImpassable - type: AccessReader - access: [["Captain"]] - - type: ItemSlots - - type: ContainerContainer - containers: - ItemCabinet: !type:ContainerSlot - type: Repairable - - type: Appearance + fuelCost: 15 + doAfterDelay: 5 + - type: Lock + - type: LockVisuals - type: DamageVisuals - thresholds: [4, 8, 12] + thresholds: [4, 8, 12] # TODO: Fix damage visuals on open state. damageDivisor: 7.555 trackAllDamage: true damageOverlay: sprite: Structures/Storage/glassbox.rsi + - type: Damageable + damageContainer: Inorganic + damageModifierSet: Glass + - type: MeleeSound + soundGroups: + Brute: + collection: GlassSmash - type: Destructible thresholds: - trigger: !type:DamageTrigger damage: 150 behaviors: - - !type:EmptyAllContainersBehaviour - - !type:PlaySoundBehavior - sound: - collection: WindowShatter - - !type:SpawnEntitiesBehavior - spawn: - ShardGlassReinforced: - min: 1 - max: 1 - GlassBoxLaserBroken: - min: 1 - max: 1 - - !type:DoActsBehavior - acts: [ "Destruction" ] + - !type:EmptyAllContainersBehaviour + - !type:PlaySoundBehavior + sound: + collection: WindowShatter + - !type:PlaySoundBehavior + sound: + path: /Audio/Machines/warning_buzzer.ogg + params: + volume: 10 + - !type:SpawnEntitiesBehavior + spawn: + ShardGlassReinforced: + min: 1 + max: 2 + - !type:ChangeConstructionNodeBehavior + node: brokenGlassBox + - !type:DoActsBehavior + acts: [ "Destruction" ] - type: entity - id: GlassBoxLaserOpen - parent: GlassBoxLaser - suffix: Open + id: GlassBoxLaser + parent: GlassBox + suffix: AntiqueLaser components: + - type: AccessReader + access: [["Captain"]] + - type: Construction + graph: GlassBox + node: glassBox - type: ItemCabinet - opened: true + cabinetSlot: + ejectOnInteract: true + whitelist: + tags: + - WeaponAntiqueLaser doorSound: path: /Audio/Machines/machine_switch.ogg openState: glass-up closedState: glass +- type: entity + id: GlassBoxLaserOpen + parent: GlassBoxLaser + suffix: AntiqueLaser, Open + components: + - type: Lock + locked: false + - type: ItemCabinet + opened: true + - type: entity id: GlassBoxLaserFilled parent: GlassBoxLaser - suffix: Filled + suffix: AntiqueLaser, Filled components: - type: ItemCabinet cabinetSlot: @@ -100,40 +151,83 @@ whitelist: tags: - WeaponAntiqueLaser - doorSound: - path: /Audio/Machines/machine_switch.ogg - openState: glass-up - closedState: glass - type: entity id: GlassBoxLaserFilledOpen parent: GlassBoxLaserFilled - suffix: Filled, Open + suffix: AntiqueLaser, Filled, Open components: + - type: Lock + locked: false - type: ItemCabinet opened: true - doorSound: - path: /Audio/Machines/machine_switch.ogg - openState: glass-up - closedState: glass - type: entity - id: GlassBoxLaserBroken + id: GlassBoxFrame + name: glass box frame + description: A glassless sturdy showcase for an expensive exhibit. + parent: BaseGlassBox + suffix: Frame + components: + - type: Sprite + noRot: true + sprite: Structures/Storage/glassbox.rsi + layers: + - state: base + - type: Construction + graph: GlassBox + node: boxMissingWires + - type: Climbable + - type: Damageable + damageModifierSet: Wood + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 100 + behaviors: + - !type:PlaySoundBehavior + sound: + collection: WoodDestroy + - !type:SpawnEntitiesBehavior + spawn: + MaterialWoodPlank1: + min: 2 + max: 5 + - !type:DoActsBehavior + acts: ["Destruction"] + +- type: entity + id: GlassBoxBroken name: broken glass box description: A broken showcase for a stolen expensive exhibit. - parent: BaseStructureDynamic + parent: GlassBoxFrame suffix: Broken - placement: - mode: SnapgridCenter components: - - type: Transform - anchored: true - - type: Physics - bodyType: Static - type: Sprite sprite: Structures/Storage/glassbox.rsi layers: - - state: glassbox - - state: glass-4 - - type: Clickable - - type: InteractionOutline + - state: base + - state: glass-broken + - type: Construction + graph: GlassBox + node: brokenGlassBox + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 100 + behaviors: + - !type:PlaySoundBehavior + sound: + collection: WoodDestroy + - !type:SpawnEntitiesBehavior + spawn: + ShardGlassReinforced: + min: 1 + max: 1 + MaterialWoodPlank1: + min: 2 + max: 5 + - !type:DoActsBehavior + acts: ["Destruction"] diff --git a/Resources/Prototypes/Entities/Structures/Storage/morgue.yml b/Resources/Prototypes/Entities/Structures/Storage/morgue.yml index 725f4c9b0f2..496ea416119 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/morgue.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/morgue.yml @@ -5,6 +5,8 @@ placement: mode: SnapgridCenter components: + - type: Pullable + - type: Anchorable - type: Sprite sprite: Structures/Storage/morgue.rsi layers: @@ -28,11 +30,11 @@ shape: !type:PhysShapeAabb bounds: "-0.5,-0.5,0.5,0.5" - density: 190 + density: 1000 mask: - MachineMask layer: - - WallLayer + - HalfWallLayer - type: EntityStorage isCollidableWhenOpen: true showContents: false diff --git a/Resources/Prototypes/Entities/Structures/Storage/ore_box.yml b/Resources/Prototypes/Entities/Structures/Storage/ore_box.yml index 961d7854c08..b26bb2c954f 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/ore_box.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/ore_box.yml @@ -60,8 +60,8 @@ - Ore - type: UserInterface interfaces: - - key: enum.StorageUiKey.Key - type: StorageBoundUserInterface + enum.StorageUiKey.Key: + type: StorageBoundUserInterface - type: ContainerContainer containers: storagebase: !type:Container diff --git a/Resources/Prototypes/Entities/Structures/Storage/storage.yml b/Resources/Prototypes/Entities/Structures/Storage/storage.yml index 79a1e357998..d0b468ca53d 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/storage.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/storage.yml @@ -27,9 +27,9 @@ bounds: "-0.3,-0.3,0.3,0.3" density: 140 mask: - - MachineMask + - TableMask layer: - - MachineLayer + - TableLayer - type: Damageable damageContainer: Inorganic damageModifierSet: Metallic diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/air_alarm.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/air_alarm.yml index 62f2000593b..6090aae882f 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/air_alarm.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/air_alarm.yml @@ -53,14 +53,16 @@ - AirAlarm - type: AtmosDevice - type: AirAlarm + - type: AtmosAlertsDevice + group: AirAlarm - type: Clickable - type: InteractionOutline - type: UserInterface interfaces: - - key: enum.SharedAirAlarmInterfaceKey.Key - type: AirAlarmBoundUserInterface - - key: enum.WiresUiKey.Key - type: WiresBoundUserInterface + enum.SharedAirAlarmInterfaceKey.Key: + type: AirAlarmBoundUserInterface + enum.WiresUiKey.Key: + type: WiresBoundUserInterface - type: WiresPanel - type: Wires boardName: wires-board-name-airalarm diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/fire_alarm.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/fire_alarm.yml index 05988fbc217..c27b0ff27e9 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/fire_alarm.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/fire_alarm.yml @@ -42,6 +42,8 @@ - type: Clickable - type: InteractionOutline - type: FireAlarm + - type: AtmosAlertsDevice + group: FireAlarm - type: ContainerFill containers: board: [ FireAlarmElectronics ] @@ -60,8 +62,8 @@ delta: fire_3 - type: UserInterface interfaces: - - key: enum.WiresUiKey.Key - type: WiresBoundUserInterface + enum.WiresUiKey.Key: + type: WiresBoundUserInterface - type: WiresPanel - type: Wires boardName: wires-board-name-firealarm diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/intercom.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/intercom.yml index 230728401bd..7819e625d47 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/intercom.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/intercom.yml @@ -19,6 +19,9 @@ - type: Intercom - type: Speech speechVerb: Robotic + - type: VoiceOverride # This is for the wire that makes an electricity zapping noise. + speechVerbOverride: Electricity + enabled: false - type: ExtensionCableReceiver - type: Clickable - type: InteractionOutline @@ -63,9 +66,9 @@ key: enum.IntercomUiKey.Key - type: UserInterface interfaces: - - key: enum.IntercomUiKey.Key + enum.IntercomUiKey.Key: type: IntercomBoundUserInterface - - key: enum.WiresUiKey.Key + enum.WiresUiKey.Key: type: WiresBoundUserInterface - type: Construction graph: Intercom diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/mirror.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/mirror.yml index b524f099bfb..d02bce020da 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/mirror.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/mirror.yml @@ -16,5 +16,5 @@ key: enum.MagicMirrorUiKey.Key - type: UserInterface interfaces: - - key: enum.MagicMirrorUiKey.Key - type: MagicMirrorBoundUserInterface + enum.MagicMirrorUiKey.Key: + type: MagicMirrorBoundUserInterface diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/monitors_televisions.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/monitors_televisions.yml index 451495f58d2..408ab6b67c3 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/monitors_televisions.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/monitors_televisions.yml @@ -110,8 +110,8 @@ - type: ActivatableUIRequiresPower - type: UserInterface interfaces: - - key: enum.SurveillanceCameraMonitorUiKey.Key - type: SurveillanceCameraMonitorBoundUserInterface + enum.SurveillanceCameraMonitorUiKey.Key: + type: SurveillanceCameraMonitorBoundUserInterface # Wall Televisions @@ -169,8 +169,8 @@ - type: ActivatableUIRequiresPower - type: UserInterface interfaces: - - key: enum.SurveillanceCameraMonitorUiKey.Key - type: SurveillanceCameraMonitorBoundUserInterface + enum.SurveillanceCameraMonitorUiKey.Key: + type: SurveillanceCameraMonitorBoundUserInterface - type: PointLight radius: 1.5 energy: 1.6 diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/noticeboard.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/noticeboard.yml index 421ab93be97..f2315583e3c 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/noticeboard.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/noticeboard.yml @@ -50,8 +50,8 @@ - Write - type: UserInterface interfaces: - - key: enum.StorageUiKey.Key - type: StorageBoundUserInterface + enum.StorageUiKey.Key: + type: StorageBoundUserInterface - type: ContainerContainer containers: storagebase: !type:Container diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/station_map.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/station_map.yml index d1df619b7a4..2ae5040910e 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/station_map.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/station_map.yml @@ -86,7 +86,7 @@ acts: [ "Destruction" ] - type: UserInterface interfaces: - - key: enum.StationMapUiKey.Key + enum.StationMapUiKey.Key: type: StationMapBoundUserInterface - type: entity diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/surveillance_camera.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/surveillance_camera.yml index 6e56bb855f7..3347b0e4b1c 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/surveillance_camera.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/surveillance_camera.yml @@ -42,9 +42,9 @@ InUse: camera_in_use - type: UserInterface interfaces: - - key: enum.SurveillanceCameraSetupUiKey.Camera + enum.SurveillanceCameraSetupUiKey.Camera: type: SurveillanceCameraSetupBoundUi - - key: enum.WiresUiKey.Key + enum.WiresUiKey.Key: type: WiresBoundUserInterface - type: StaticPrice price: 200 diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/timer.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/timer.yml index 0c284eec7af..dd7eb5bea82 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/timer.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/timer.yml @@ -32,8 +32,8 @@ key: enum.SignalTimerUiKey.Key - type: UserInterface interfaces: - - key: enum.SignalTimerUiKey.Key - type: SignalTimerBoundUserInterface + enum.SignalTimerUiKey.Key: + type: SignalTimerBoundUserInterface - type: ApcPowerReceiver powerLoad: 100 - type: Electrified diff --git a/Resources/Prototypes/Entities/Structures/Walls/asteroid.yml b/Resources/Prototypes/Entities/Structures/Walls/asteroid.yml index c980abfeed9..d0a6f685a01 100644 --- a/Resources/Prototypes/Entities/Structures/Walls/asteroid.yml +++ b/Resources/Prototypes/Entities/Structures/Walls/asteroid.yml @@ -309,6 +309,50 @@ state: rock_asteroid_west - state: rock_artifact_fragment +- type: entity + id: AsteroidRockBluespace + parent: AsteroidRock + description: A rock wall. What's that sticking out of it? + suffix: Bluespace + components: + - type: OreVein + oreChance: 1.0 + currentOre: OreBluespace + - type: Sprite + layers: + - state: rock_asteroid + - map: [ "enum.EdgeLayer.South" ] + state: rock_asteroid_south + - map: [ "enum.EdgeLayer.East" ] + state: rock_asteroid_east + - map: [ "enum.EdgeLayer.North" ] + state: rock_asteroid_north + - map: [ "enum.EdgeLayer.West" ] + state: rock_asteroid_west + - state: rock_bluespace + +- type: entity + id: AsteroidRockNormality + parent: AsteroidRock + description: A rock wall. What's that sticking out of it? + suffix: Normality + components: + - type: OreVein + oreChance: 1.0 + currentOre: OreNormality + - type: Sprite + layers: + - state: rock_asteroid + - map: [ "enum.EdgeLayer.South" ] + state: rock_asteroid_south + - map: [ "enum.EdgeLayer.East" ] + state: rock_asteroid_east + - map: [ "enum.EdgeLayer.North" ] + state: rock_asteroid_north + - map: [ "enum.EdgeLayer.West" ] + state: rock_asteroid_west + - state: rock_bluespace + - type: entity id: AsteroidRockMining parent: AsteroidRock @@ -661,6 +705,50 @@ state: rock_west - state: rock_salt +- type: entity + id: WallRockBluespace + parent: WallRock + description: A rock wall. What's that sticking out of it? + suffix: Bluespace + components: + - type: OreVein + oreChance: 1.0 + currentOre: OreBluespace + - type: Sprite + layers: + - state: rock + - map: [ "enum.EdgeLayer.South" ] + state: rock_south + - map: [ "enum.EdgeLayer.East" ] + state: rock_east + - map: [ "enum.EdgeLayer.North" ] + state: rock_north + - map: [ "enum.EdgeLayer.West" ] + state: rock_west + - state: rock_bluespace + +- type: entity + id: WallRockNormality + parent: WallRock + description: A rock wall. What's that sticking out of it? + suffix: Normality + components: + - type: OreVein + oreChance: 1.0 + currentOre: OreNormality + - type: Sprite + layers: + - state: rock + - map: [ "enum.EdgeLayer.South" ] + state: rock_south + - map: [ "enum.EdgeLayer.East" ] + state: rock_east + - map: [ "enum.EdgeLayer.North" ] + state: rock_north + - map: [ "enum.EdgeLayer.West" ] + state: rock_west + - state: rock_bluespace + # Basalt variants - type: entity id: WallRockBasalt @@ -915,6 +1003,50 @@ state: rock_wall_west - state: rock_salt +- type: entity + id: WallRockBasaltBluespace + parent: WallRockBluespace + description: A rock wall. What's that sticking out of it? + suffix: Bluespace + components: + - type: OreVein + oreChance: 1.0 + currentOre: OreBluespace + - type: Sprite + layers: + - state: rock_wall + - map: [ "enum.EdgeLayer.South" ] + state: rock_wall_south + - map: [ "enum.EdgeLayer.East" ] + state: rock_wall_east + - map: [ "enum.EdgeLayer.North" ] + state: rock_wall_north + - map: [ "enum.EdgeLayer.West" ] + state: rock_wall_west + - state: rock_bluespace + +- type: entity + id: WallRockBasaltNormality + parent: WallRockNormality + description: A rock wall. What's that sticking out of it? + suffix: Normality + components: + - type: OreVein + oreChance: 1.0 + currentOre: OreNormality + - type: Sprite + layers: + - state: rock_wall + - map: [ "enum.EdgeLayer.South" ] + state: rock_wall_south + - map: [ "enum.EdgeLayer.East" ] + state: rock_wall_east + - map: [ "enum.EdgeLayer.North" ] + state: rock_wall_north + - map: [ "enum.EdgeLayer.West" ] + state: rock_wall_west + - state: rock_bluespace + # Snow variants - type: entity id: WallRockSnow @@ -1169,6 +1301,50 @@ state: rock_snow_west - state: rock_salt +- type: entity + id: WallRockSnowBluespace + parent: WallRockSnow + description: A rock wall. What's that sticking out of it? + suffix: Bluespace + components: + - type: OreVein + oreChance: 1.0 + currentOre: OreBluespace + - type: Sprite + layers: + - state: rock_snow + - map: [ "enum.EdgeLayer.South" ] + state: rock_snow_south + - map: [ "enum.EdgeLayer.East" ] + state: rock_snow_east + - map: [ "enum.EdgeLayer.North" ] + state: rock_snow_north + - map: [ "enum.EdgeLayer.West" ] + state: rock_snow_west + - state: rock_bluespace + +- type: entity + id: WallRockSnowNormality + parent: WallRockSnow + description: A rock wall. What's that sticking out of it? + suffix: Normality + components: + - type: OreVein + oreChance: 1.0 + currentOre: OreNormality + - type: Sprite + layers: + - state: rock_snow + - map: [ "enum.EdgeLayer.South" ] + state: rock_snow_south + - map: [ "enum.EdgeLayer.East" ] + state: rock_snow_east + - map: [ "enum.EdgeLayer.North" ] + state: rock_snow_north + - map: [ "enum.EdgeLayer.West" ] + state: rock_snow_west + - state: rock_bluespace + # Sand variants - type: entity id: WallRockSand @@ -1423,6 +1599,50 @@ state: rock_sand_west - state: rock_salt +- type: entity + id: WallRockSandBluespace + parent: WallRockSand + description: A rock wall. What's that sticking out of it? + suffix: Bluespace + components: + - type: OreVein + oreChance: 1.0 + currentOre: OreBluespace + - type: Sprite + layers: + - state: rock_sand + - map: [ "enum.EdgeLayer.South" ] + state: rock_sand_south + - map: [ "enum.EdgeLayer.East" ] + state: rock_sand_east + - map: [ "enum.EdgeLayer.North" ] + state: rock_sand_north + - map: [ "enum.EdgeLayer.West" ] + state: rock_sand_west + - state: rock_bluespace + +- type: entity + id: WallRockSandNormality + parent: WallRockSand + description: A rock wall. What's that sticking out of it? + suffix: Normality + components: + - type: OreVein + oreChance: 1.0 + currentOre: OreNormality + - type: Sprite + layers: + - state: rock_sand + - map: [ "enum.EdgeLayer.South" ] + state: rock_sand_south + - map: [ "enum.EdgeLayer.East" ] + state: rock_sand_east + - map: [ "enum.EdgeLayer.North" ] + state: rock_sand_north + - map: [ "enum.EdgeLayer.West" ] + state: rock_sand_west + - state: rock_bluespace + # Chromite variants - type: entity id: WallRockChromite @@ -1677,6 +1897,50 @@ state: rock_chromite_west - state: rock_salt +- type: entity + id: WallRockChromiteBluespace + parent: WallRockChromite + description: A rock wall. What's that sticking out of it? + suffix: Bluespace + components: + - type: OreVein + oreChance: 1.0 + currentOre: OreBluespace + - type: Sprite + layers: + - state: rock_chromite + - map: [ "enum.EdgeLayer.South" ] + state: rock_chromite_south + - map: [ "enum.EdgeLayer.East" ] + state: rock_chromite_east + - map: [ "enum.EdgeLayer.North" ] + state: rock_chromite_north + - map: [ "enum.EdgeLayer.West" ] + state: rock_chromite_west + - state: rock_bluespace + +- type: entity + id: WallRockChromiteNormality + parent: WallRockChromite + description: A rock wall. What's that sticking out of it? + suffix: Normality + components: + - type: OreVein + oreChance: 1.0 + currentOre: OreNormality + - type: Sprite + layers: + - state: rock_chromite + - map: [ "enum.EdgeLayer.South" ] + state: rock_chromite_south + - map: [ "enum.EdgeLayer.East" ] + state: rock_chromite_east + - map: [ "enum.EdgeLayer.North" ] + state: rock_chromite_north + - map: [ "enum.EdgeLayer.West" ] + state: rock_chromite_west + - state: rock_bluespace + # Andesite variants - type: entity id: WallRockAndesite @@ -1930,3 +2194,47 @@ - map: [ "enum.EdgeLayer.West" ] state: rock_andesite_west - state: rock_salt + +- type: entity + id: WallRockAndesiteBluespace + parent: WallRockAndesite + description: A rock wall. What's that sticking out of it? + suffix: Bluespace + components: + - type: OreVein + oreChance: 1.0 + currentOre: OreBluespace + - type: Sprite + layers: + - state: rock_andesite + - map: [ "enum.EdgeLayer.South" ] + state: rock_andesite_south + - map: [ "enum.EdgeLayer.East" ] + state: rock_andesite_east + - map: [ "enum.EdgeLayer.North" ] + state: rock_andesite_north + - map: [ "enum.EdgeLayer.West" ] + state: rock_andesite_west + - state: rock_bluespace + +- type: entity + id: WallRockAndesiteNormality + parent: WallRockAndesite + description: A rock wall. What's that sticking out of it? + suffix: Normality + components: + - type: OreVein + oreChance: 1.0 + currentOre: OreNormality + - type: Sprite + layers: + - state: rock_andesite + - map: [ "enum.EdgeLayer.South" ] + state: rock_andesite_south + - map: [ "enum.EdgeLayer.East" ] + state: rock_andesite_east + - map: [ "enum.EdgeLayer.North" ] + state: rock_andesite_north + - map: [ "enum.EdgeLayer.West" ] + state: rock_andesite_west + - state: rock_bluespace diff --git a/Resources/Prototypes/Entities/Structures/Walls/grille.yml b/Resources/Prototypes/Entities/Structures/Walls/grille.yml index 11ada142fa5..7be721b6f9a 100644 --- a/Resources/Prototypes/Entities/Structures/Walls/grille.yml +++ b/Resources/Prototypes/Entities/Structures/Walls/grille.yml @@ -32,7 +32,7 @@ node: grille deconstructionTarget: start - type: Damageable - damageContainer: Inorganic + damageContainer: StructuralInorganic damageModifierSet: PerforatedMetallic - type: PowerConsumer showInMonitor: false diff --git a/Resources/Prototypes/Entities/Structures/Walls/walls.yml b/Resources/Prototypes/Entities/Structures/Walls/walls.yml index ca9401ee0b5..dd6a1bf4c47 100644 --- a/Resources/Prototypes/Entities/Structures/Walls/walls.yml +++ b/Resources/Prototypes/Entities/Structures/Walls/walls.yml @@ -549,8 +549,6 @@ node: girder - !type:DoActsBehavior acts: ["Destruction"] - destroySound: - collection: MetalBreak - type: IconSmooth key: walls base: reinf_over @@ -806,8 +804,6 @@ node: girder - !type:DoActsBehavior acts: ["Destruction"] - destroySound: - collection: MetalBreak - type: Construction graph: Girder node: diagonalshuttleWall @@ -1217,7 +1213,7 @@ name: force wall components: - type: TimedDespawn - lifetime: 20 + lifetime: 12 - type: Tag tags: - Wall diff --git a/Resources/Prototypes/Entities/Structures/cargo_telepad.yml b/Resources/Prototypes/Entities/Structures/cargo_telepad.yml index d395235a533..9dc9f77cffc 100644 --- a/Resources/Prototypes/Entities/Structures/cargo_telepad.yml +++ b/Resources/Prototypes/Entities/Structures/cargo_telepad.yml @@ -47,3 +47,5 @@ board: CargoTelepadMachineCircuitboard - type: Appearance - type: CollideOnAnchor + - type: NameIdentifier + group: CargoTelepads diff --git a/Resources/Prototypes/Entities/Structures/cryopod.yml b/Resources/Prototypes/Entities/Structures/cryopod.yml index 9063e8b1385..bdb8862a829 100644 --- a/Resources/Prototypes/Entities/Structures/cryopod.yml +++ b/Resources/Prototypes/Entities/Structures/cryopod.yml @@ -12,8 +12,8 @@ map: ["base"] - type: UserInterface interfaces: - - key: enum.CryostorageUIKey.Key - type: CryostorageBoundUserInterface + enum.CryostorageUIKey.Key: + type: CryostorageBoundUserInterface - type: ActivatableUI key: enum.CryostorageUIKey.Key - type: AccessReader diff --git a/Resources/Prototypes/Entities/Structures/plastic_flaps.yml b/Resources/Prototypes/Entities/Structures/plastic_flaps.yml index c4ee507395f..5d5ff390bac 100644 --- a/Resources/Prototypes/Entities/Structures/plastic_flaps.yml +++ b/Resources/Prototypes/Entities/Structures/plastic_flaps.yml @@ -1,9 +1,7 @@ - type: entity - id: PlasticFlapsClear + id: PlasticFlapsBase parent: BaseStructureDynamic - name: plastic flaps - suffix: Clear - description: Heavy duty, plastic flaps. Definitely can't get past those. No way. + abstract: true placement: mode: SnapgridCenter components: @@ -23,9 +21,10 @@ bounds: "-0.49,-0.49,0.49,0.49" density: 100 mask: - - TabletopMachineMask + - Impassable layer: - MidImpassable + - BulletImpassable - type: Damageable damageContainer: StructuralInorganic damageModifierSet: Metallic @@ -33,22 +32,31 @@ thresholds: - trigger: !type:DamageTrigger - damage: 100 + damage: 50 behaviors: - !type:DoActsBehavior acts: ["Destruction"] - type: IconSmooth key: walls mode: NoSprite + - type: StaticPrice + price: 83 + - type: RequireProjectileTarget + +- type: entity + id: PlasticFlapsClear + parent: PlasticFlapsBase + name: plastic flaps + suffix: Clear + description: Heavy duty, plastic flaps. Definitely can't get past those. No way. + components: - type: Construction graph: PlasticFlapsGraph node: plasticFlaps - - type: StaticPrice - price: 83 - type: entity id: PlasticFlapsOpaque - parent: PlasticFlapsClear + parent: PlasticFlapsBase name: plastic flaps suffix: Opaque description: Heavy duty, plastic flaps. Definitely can't get past those. No way. @@ -61,10 +69,11 @@ bounds: "-0.49,-0.49,0.49,0.49" density: 100 mask: - - TabletopMachineMask + - Impassable layer: - Opaque - MidImpassable + - BulletImpassable - type: Occluder - type: Construction graph: PlasticFlapsGraph @@ -72,7 +81,7 @@ - type: entity id: PlasticFlapsAirtightClear - parent: PlasticFlapsClear + parent: PlasticFlapsBase name: airtight plastic flaps suffix: Airtight, Clear description: Heavy duty, slightly stronger, airtight plastic flaps. Definitely can't get past those. No way. @@ -81,20 +90,17 @@ thresholds: - trigger: !type:DamageTrigger - damage: 150 + damage: 75 behaviors: - !type:DoActsBehavior acts: ["Destruction"] - type: Airtight - - type: Construction - graph: PlasticFlapsGraph - node: airtightFlaps - type: StaticPrice price: 100 - type: entity id: PlasticFlapsAirtightOpaque - parent: PlasticFlapsOpaque + parent: PlasticFlapsBase name: airtight plastic flaps suffix: Airtight, Opaque description: Heavy duty, slightly stronger, airtight plastic flaps. Definitely can't get past those. No way. @@ -103,13 +109,10 @@ thresholds: - trigger: !type:DamageTrigger - damage: 150 + damage: 75 behaviors: - !type:DoActsBehavior acts: ["Destruction"] - type: Airtight - - type: Construction - graph: PlasticFlapsGraph - node: airtightopaqueFlaps - type: StaticPrice price: 100 diff --git a/Resources/Prototypes/Entities/Tiles/bananium.yml b/Resources/Prototypes/Entities/Tiles/bananium.yml index c9a6ec28441..9e8a46b2c35 100644 --- a/Resources/Prototypes/Entities/Tiles/bananium.yml +++ b/Resources/Prototypes/Entities/Tiles/bananium.yml @@ -47,6 +47,9 @@ paralyzeTime: 2 launchForwardsMultiplier: 1.5 - type: StepTrigger + triggerGroups: + types: + - SlipTile intersectRatio: 0.2 - type: Physics bodyType: Static diff --git a/Resources/Prototypes/Entities/Tiles/chasm.yml b/Resources/Prototypes/Entities/Tiles/chasm.yml index 23f3ad83950..85bc7b5ab34 100644 --- a/Resources/Prototypes/Entities/Tiles/chasm.yml +++ b/Resources/Prototypes/Entities/Tiles/chasm.yml @@ -14,6 +14,9 @@ blacklist: tags: - Catwalk + triggerGroups: + types: + - Chasm - type: Transform anchored: true - type: Clickable @@ -55,7 +58,7 @@ sprite: Tiles/Planet/Chasms/chromite_chasm.rsi - type: Icon sprite: Tiles/Planet/Chasms/chromite_chasm.rsi - + - type: entity parent: FloorChasmEntity id: FloorDesertChasm @@ -65,7 +68,7 @@ sprite: Tiles/Planet/Chasms/desert_chasm.rsi - type: Icon sprite: Tiles/Planet/Chasms/desert_chasm.rsi - + - type: entity parent: FloorChasmEntity id: FloorSnowChasm @@ -74,4 +77,4 @@ - type: Sprite sprite: Tiles/Planet/Chasms/snow_chasm.rsi - type: Icon - sprite: Tiles/Planet/Chasms/snow_chasm.rsi \ No newline at end of file + sprite: Tiles/Planet/Chasms/snow_chasm.rsi diff --git a/Resources/Prototypes/Entities/Tiles/lava.yml b/Resources/Prototypes/Entities/Tiles/lava.yml index 72641309b31..9d61304af9d 100644 --- a/Resources/Prototypes/Entities/Tiles/lava.yml +++ b/Resources/Prototypes/Entities/Tiles/lava.yml @@ -13,6 +13,9 @@ blacklist: tags: - Catwalk + triggerGroups: + types: + - Lava - type: Lava fireStacks: 0.75 - type: Transform diff --git a/Resources/Prototypes/Entities/Tiles/liquid_plasma.yml b/Resources/Prototypes/Entities/Tiles/liquid_plasma.yml index 08f46538631..500286ead31 100644 --- a/Resources/Prototypes/Entities/Tiles/liquid_plasma.yml +++ b/Resources/Prototypes/Entities/Tiles/liquid_plasma.yml @@ -13,6 +13,9 @@ blacklist: tags: - Catwalk + triggerGroups: + types: + - Lava - type: Lava fireStacks: 0.75 - type: Transform diff --git a/Resources/Prototypes/Entities/Tiles/shadow_basalt.yml b/Resources/Prototypes/Entities/Tiles/shadow_basalt.yml index d93351c7e27..974a0ac3b7b 100644 --- a/Resources/Prototypes/Entities/Tiles/shadow_basalt.yml +++ b/Resources/Prototypes/Entities/Tiles/shadow_basalt.yml @@ -1,7 +1,7 @@ - type: entity id: ShadowBasaltOne name: shadowstone - description: Cold rock + description: Glowing cracks in reality. It's probably fine. placement: mode: SnapgridCenter components: diff --git a/Resources/Prototypes/Entities/categories.yml b/Resources/Prototypes/Entities/categories.yml new file mode 100644 index 00000000000..2fb56818f94 --- /dev/null +++ b/Resources/Prototypes/Entities/categories.yml @@ -0,0 +1,4 @@ +- type: entityCategory + id: Actions + name: entity-category-name-actions + hideSpawnMenu: true diff --git a/Resources/Prototypes/Flavors/flavors.yml b/Resources/Prototypes/Flavors/flavors.yml index 9f0f6ad6787..26190d87912 100644 --- a/Resources/Prototypes/Flavors/flavors.yml +++ b/Resources/Prototypes/Flavors/flavors.yml @@ -589,6 +589,36 @@ flavorType: Complex description: flavor-complex-irish-car-bomb +- type: flavor + id: vodkaredbool + flavorType: Complex + description: flavor-complex-vodka-red-bool + +- type: flavor + id: xenobasher + flavorType: Complex + description: flavor-complex-xeno-basher + +- type: flavor + id: irishbool + flavorType: Complex + description: flavor-complex-irish-bool + +- type: flavor + id: budgetinsulsdrink + flavorType: Complex + description: flavor-complex-budget-insuls-drink + +- type: flavor + id: watermelonwakeup + flavorType: Complex + description: flavor-complex-watermelon-wakeup + +- type: flavor + id: rubberneck + flavorType: Complex + description: flavor-complex-rubberneck + - type: flavor id: blackrussian flavorType: Complex @@ -1053,3 +1083,18 @@ id: violets flavorType: Complex description: flavor-complex-violets + +- type: flavor + id: pyrotton + flavorType: Complex + description: flavor-complex-pyrotton + +- type: flavor + id: mothballs + flavorType: Complex + description: flavor-complex-mothballs + +- type: flavor + id: paintthinner + flavorType: Complex + description: flavor-complex-paint-thinner \ No newline at end of file diff --git a/Resources/Prototypes/GameRules/cargo_gifts.yml b/Resources/Prototypes/GameRules/cargo_gifts.yml index 799805272d6..3787f4e6034 100644 --- a/Resources/Prototypes/GameRules/cargo_gifts.yml +++ b/Resources/Prototypes/GameRules/cargo_gifts.yml @@ -4,7 +4,7 @@ noSpawn: true components: - type: StationEvent - weight: 10 + weight: 5 startDelay: 10 duration: 120 earliestStart: 20 @@ -24,11 +24,10 @@ noSpawn: true components: - type: StationEvent - weight: 6 + weight: 2 startDelay: 10 duration: 240 - minimumPlayers: 50 - earliestStart: 40 + earliestStart: 20 - type: CargoGiftsRule description: cargo-gift-pizza-large sender: cargo-gift-default-sender @@ -44,7 +43,7 @@ noSpawn: true components: - type: StationEvent - weight: 4 + weight: 5 startDelay: 10 duration: 240 earliestStart: 30 @@ -90,7 +89,7 @@ noSpawn: true components: - type: StationEvent - weight: 8 + weight: 6 startDelay: 10 duration: 120 minimumPlayers: 30 @@ -132,7 +131,7 @@ noSpawn: true components: - type: StationEvent - weight: 6 + weight: 4 startDelay: 10 duration: 120 earliestStart: 10 @@ -154,7 +153,7 @@ noSpawn: true components: - type: StationEvent - weight: 3 + weight: 4 startDelay: 10 duration: 120 earliestStart: 20 @@ -174,7 +173,7 @@ noSpawn: true components: - type: StationEvent - weight: 2 + weight: 3 startDelay: 10 duration: 120 earliestStart: 20 diff --git a/Resources/Prototypes/GameRules/unknown_shuttles.yml b/Resources/Prototypes/GameRules/unknown_shuttles.yml new file mode 100644 index 00000000000..f44bbdcaaab --- /dev/null +++ b/Resources/Prototypes/GameRules/unknown_shuttles.yml @@ -0,0 +1,64 @@ +- type: entity + id: UnknownShuttleCargoLost + parent: BaseGameRule + noSpawn: true + components: + - type: StationEvent + startAnnouncement: false + weight: 5 + reoccurrenceDelay: 30 + duration: 1 + - type: LoadMapRule + preloadedGrid: ShuttleCargoLost + +- type: entity + id: UnknownShuttleTravelingCuisine + parent: BaseGameRule + noSpawn: true + components: + - type: StationEvent + startAnnouncement: false + weight: 5 + reoccurrenceDelay: 30 + duration: 1 + - type: LoadMapRule + preloadedGrid: TravelingCuisine + +- type: entity + id: UnknownShuttleDisasterEvacPod + parent: BaseGameRule + noSpawn: true + components: + - type: StationEvent + startAnnouncement: false + weight: 5 + reoccurrenceDelay: 30 + duration: 1 + - type: LoadMapRule + preloadedGrid: DisasterEvacPod + +- type: entity + id: UnknownShuttleHonki + parent: BaseGameRule + noSpawn: true + components: + - type: StationEvent + startAnnouncement: false + weight: 2 + reoccurrenceDelay: 30 + duration: 1 + - type: LoadMapRule + preloadedGrid: Honki + +- type: entity + id: UnknownShuttleSyndieEvacPod + parent: BaseGameRule + noSpawn: true + components: + - type: StationEvent + startAnnouncement: false + weight: 2 + reoccurrenceDelay: 30 + duration: 1 + - type: LoadMapRule + preloadedGrid: SyndieEvacPod diff --git a/Resources/Prototypes/GhostRoleRaffles/deciders.yml b/Resources/Prototypes/GhostRoleRaffles/deciders.yml new file mode 100644 index 00000000000..b23464cf706 --- /dev/null +++ b/Resources/Prototypes/GhostRoleRaffles/deciders.yml @@ -0,0 +1,3 @@ +- type: ghostRoleRaffleDecider + id: default + decider: !type:RngGhostRoleRaffleDecider {} diff --git a/Resources/Prototypes/GhostRoleRaffles/settings.yml b/Resources/Prototypes/GhostRoleRaffles/settings.yml new file mode 100644 index 00000000000..7ed9326ee01 --- /dev/null +++ b/Resources/Prototypes/GhostRoleRaffles/settings.yml @@ -0,0 +1,15 @@ +# for important antag roles (nukie reinforcements, ninja, etc.) +- type: ghostRoleRaffleSettings + id: default + settings: + initialDuration: 30 + joinExtendsDurationBy: 10 + maxDuration: 90 + +# for roles that don't matter too much or are available plentifully (e.g. space carp) +- type: ghostRoleRaffleSettings + id: short + settings: + initialDuration: 10 + joinExtendsDurationBy: 5 + maxDuration: 30 diff --git a/Resources/Prototypes/Hydroponics/mutations.yml b/Resources/Prototypes/Hydroponics/mutations.yml index 17617f5ee32..6108278a4ac 100644 --- a/Resources/Prototypes/Hydroponics/mutations.yml +++ b/Resources/Prototypes/Hydroponics/mutations.yml @@ -6,7 +6,6 @@ reagents: - Omnizine - Nocturine - - Barozine - Lexorin - Honk - BuzzochloricBees diff --git a/Resources/Prototypes/Hydroponics/seeds.yml b/Resources/Prototypes/Hydroponics/seeds.yml index 030c89c8cf1..e134d24c26d 100644 --- a/Resources/Prototypes/Hydroponics/seeds.yml +++ b/Resources/Prototypes/Hydroponics/seeds.yml @@ -18,11 +18,11 @@ Nutriment: Min: 1 Max: 20 - PotencyDivisor: 20 + potencyDivisor: 20 Flour: Min: 5 Max: 20 - PotencyDivisor: 20 + potencyDivisor: 20 - type: seed id: oat @@ -44,11 +44,11 @@ Nutriment: Min: 1 Max: 20 - PotencyDivisor: 20 + potencyDivisor: 20 Oats: Min: 5 Max: 20 - PotencyDivisor: 20 + potencyDivisor: 20 - type: seed id: banana @@ -73,11 +73,11 @@ Vitamin: Min: 1 Max: 4 - PotencyDivisor: 25 + potencyDivisor: 25 Nutriment: Min: 1 Max: 2 - PotencyDivisor: 50 + potencyDivisor: 50 - type: seed id: mimana @@ -100,11 +100,11 @@ MuteToxin: Min: 1 Max: 5 - PotencyDivisor: 20 + potencyDivisor: 20 Nutriment: Min: 1 Max: 2 - PotencyDivisor: 50 + potencyDivisor: 50 - type: seed id: carrots @@ -126,15 +126,15 @@ JuiceCarrot: Min: 1 Max: 5 - PotencyDivisor: 20 + potencyDivisor: 20 Oculine: Min: 2 Max: 6 - PotencyDivisor: 20 + potencyDivisor: 20 Vitamin: Min: 1 Max: 4 - PotencyDivisor: 25 + potencyDivisor: 25 - type: seed id: laughinPea @@ -159,15 +159,15 @@ Nutriment: Min: 1 Max: 3 - PotencyDivisor: 7 + potencyDivisor: 7 Sugar: Min: 1 Max: 10 - PotencyDivisor: 5 + potencyDivisor: 5 Laughter: Min: 1 Max: 10 - PotencyDivisor: 5 + potencyDivisor: 5 - type: seed id: lemon @@ -191,11 +191,11 @@ Nutriment: Min: 1 Max: 5 - PotencyDivisor: 20 + potencyDivisor: 20 Vitamin: Min: 1 Max: 4 - PotencyDivisor: 25 + potencyDivisor: 25 - type: seed id: lemoon @@ -217,11 +217,11 @@ Vitamin: Min: 1 Max: 4 - PotencyDivisor: 25 + potencyDivisor: 25 Milk: Min: 8 Max: 20 - PotencyDivisor: 5 + potencyDivisor: 5 - type: seed id: lime @@ -243,11 +243,11 @@ Nutriment: Min: 1 Max: 5 - PotencyDivisor: 20 + potencyDivisor: 20 Vitamin: Min: 1 Max: 4 - PotencyDivisor: 25 + potencyDivisor: 25 - type: seed id: orange @@ -269,11 +269,11 @@ Nutriment: Min: 1 Max: 5 - PotencyDivisor: 20 + potencyDivisor: 20 Vitamin: Min: 1 Max: 4 - PotencyDivisor: 25 + potencyDivisor: 25 - type: seed id: pineapple @@ -296,15 +296,15 @@ Nutriment: Min: 1 Max: 20 - PotencyDivisor: 20 + potencyDivisor: 20 Water: Min: 1 Max: 4 - PotencyDivisor: 25 + potencyDivisor: 25 Vitamin: Min: 1 Max: 2 - PotencyDivisor: 50 + potencyDivisor: 50 - type: seed id: potato @@ -326,11 +326,11 @@ Nutriment: Min: 1 Max: 10 - PotencyDivisor: 10 + potencyDivisor: 10 Vitamin: Min: 1 Max: 4 - PotencyDivisor: 25 + potencyDivisor: 25 - type: seed id: sugarcane @@ -353,7 +353,7 @@ Sugar: Min: 4 Max: 5 - PotencyDivisor: 5 + potencyDivisor: 5 - type: seed id: towercap @@ -426,15 +426,15 @@ Nutriment: Min: 1 Max: 7 - PotencyDivisor: 14 + potencyDivisor: 14 Vitamin: Min: 1 Max: 3 - PotencyDivisor: 33 + potencyDivisor: 33 Water: Min: 1 Max: 4 - PotencyDivisor: 25 + potencyDivisor: 25 - type: seed id: blueTomato @@ -460,15 +460,15 @@ Nutriment: Min: 1 Max: 5 - PotencyDivisor: 20 + potencyDivisor: 20 SpaceLube: Min: 5 Max: 15 - PotencyDivisor: 10 + potencyDivisor: 10 Vitamin: Min: 1 Max: 4 - PotencyDivisor: 25 + potencyDivisor: 25 - type: seed id: bloodTomato @@ -494,11 +494,11 @@ Blood: Min: 1 Max: 10 - PotencyDivisor: 10 + potencyDivisor: 10 Vitamin: Min: 1 Max: 4 - PotencyDivisor: 25 + potencyDivisor: 25 - type: seed id: eggplant @@ -523,11 +523,11 @@ Nutriment: Min: 1 Max: 10 - PotencyDivisor: 10 + potencyDivisor: 10 Vitamin: Min: 1 Max: 4 - PotencyDivisor: 25 + potencyDivisor: 25 - type: seed id: cabbage @@ -548,11 +548,11 @@ Nutriment: Min: 1 Max: 10 - PotencyDivisor: 10 + potencyDivisor: 10 Vitamin: Min: 1 Max: 4 - PotencyDivisor: 25 + potencyDivisor: 25 - type: seed id: garlic @@ -573,15 +573,15 @@ Nutriment: Min: 1 Max: 10 - PotencyDivisor: 10 + potencyDivisor: 10 Vitamin: Min: 1 Max: 4 - PotencyDivisor: 25 + potencyDivisor: 25 Allicin: Min: 1 Max: 8 - PotencyDivisor: 25 + potencyDivisor: 25 - type: seed id: apple @@ -603,11 +603,11 @@ Nutriment: Min: 1 Max: 10 - PotencyDivisor: 10 + potencyDivisor: 10 Vitamin: Min: 1 Max: 4 - PotencyDivisor: 25 + potencyDivisor: 25 - type: seed id: corn @@ -631,11 +631,11 @@ Nutriment: Min: 1 Max: 10 - PotencyDivisor: 20 + potencyDivisor: 20 Cornmeal: Min: 5 Max: 15 - PotencyDivisor: 10 + potencyDivisor: 10 - type: seed id: onion @@ -661,15 +661,15 @@ Nutriment: Min: 1 Max: 10 - PotencyDivisor: 10 + potencyDivisor: 10 Vitamin: Min: 1 Max: 4 - PotencyDivisor: 25 + potencyDivisor: 25 Allicin: Min: 1 Max: 4 - PotencyDivisor: 25 + potencyDivisor: 25 - type: seed id: onionred @@ -693,15 +693,15 @@ Nutriment: Min: 1 Max: 10 - PotencyDivisor: 10 + potencyDivisor: 10 Vitamin: Min: 1 Max: 4 - PotencyDivisor: 25 + potencyDivisor: 25 Allicin: Min: 1 Max: 4 - PotencyDivisor: 25 + potencyDivisor: 25 - type: seed id: chanterelle @@ -726,7 +726,7 @@ Nutriment: Min: 1 Max: 25 - PotencyDivisor: 25 + potencyDivisor: 25 - type: seed id: eggy @@ -750,7 +750,7 @@ Egg: Min: 1 Max: 10 - PotencyDivisor: 10 + potencyDivisor: 10 - type: seed id: cannabis @@ -761,6 +761,8 @@ packetPrototype: CannabisSeeds productPrototypes: - LeavesCannabis + mutationPrototypes: + - rainbowCannabis harvestRepeat: Repeat lifespan: 75 maturation: 8 @@ -775,7 +777,52 @@ THC: Min: 1 Max: 10 - PotencyDivisor: 10 + potencyDivisor: 10 + +- type: seed + id: rainbowCannabis + name: seeds-rainbow-cannabis-name + noun: seeds-noun-seeds + displayName: seeds-rainbow-cannabis-display-name + plantRsi: Objects/Specific/Hydroponics/rainbow_cannabis.rsi + packetPrototype: RainbowCannabisSeeds + productPrototypes: + - LeavesCannabisRainbow + harvestRepeat: Repeat + lifespan: 75 + maturation: 8 + production: 12 + yield: 2 + potency: 20 + growthStages: 3 + waterConsumption: 0.40 + idealLight: 9 + idealHeat: 298 + chemicals: + SpaceDrugs: + Min: 1 + Max: 15 + potencyDivisor: 10 + Lipolicide: + Min: 1 + Max: 15 + potencyDivisor: 10 + MindbreakerToxin: + Min: 1 + Max: 5 + potencyDivisor: 20 + Happiness: + Min: 1 + Max: 5 +# potencyDivisor: 20 +# ColorfulReagent: +# Min: 0 +# Max: 5 +# potencyDivisor: 20 + Psicodine: + Min: 0 + Max: 5 + potencyDivisor: 33 - type: seed id: tobacco @@ -800,7 +847,7 @@ Nicotine: Min: 1 Max: 10 - PotencyDivisor: 10 + potencyDivisor: 10 - type: seed id: nettle @@ -826,7 +873,7 @@ Histamine: Min: 1 Max: 25 - PotencyDivisor: 4 + potencyDivisor: 4 - type: seed id: deathNettle @@ -851,11 +898,11 @@ SulfuricAcid: Min: 1 Max: 15 - PotencyDivisor: 6 + potencyDivisor: 6 FluorosulfuricAcid: Min: 1 Max: 15 - PotencyDivisor: 6 + potencyDivisor: 6 - type: seed id: chili @@ -865,7 +912,7 @@ plantRsi: Objects/Specific/Hydroponics/chili.rsi packetPrototype: ChiliSeeds productPrototypes: - - FoodChili + - FoodChiliPepper mutationPrototypes: - chilly harvestRepeat: Repeat @@ -880,15 +927,15 @@ CapsaicinOil: Min: 1 Max: 10 - PotencyDivisor: 10 + potencyDivisor: 10 Nutriment: Min: 1 Max: 4 - PotencyDivisor: 25 + potencyDivisor: 25 Vitamin: Min: 1 Max: 4 - PotencyDivisor: 25 + potencyDivisor: 25 - type: seed id: chilly @@ -898,7 +945,7 @@ plantRsi: Objects/Specific/Hydroponics/chilly.rsi packetPrototype: ChillySeeds productPrototypes: - - FoodChilly + - FoodChillyPepper harvestRepeat: Repeat lifespan: 25 maturation: 6 @@ -911,15 +958,15 @@ Frostoil: Min: 1 Max: 10 - PotencyDivisor: 10 + potencyDivisor: 10 Nutriment: Min: 1 Max: 4 - PotencyDivisor: 25 + potencyDivisor: 25 Vitamin: Min: 1 Max: 4 - PotencyDivisor: 25 + potencyDivisor: 25 - type: seed id: poppy @@ -943,11 +990,11 @@ Nutriment: Min: 1 Max: 2 - Potencydivisor: 50 + potencyDivisor: 50 Bicaridine: Min: 1 Max: 20 - PotencyDivisor: 5 + potencyDivisor: 5 - type: seed id: aloe @@ -969,11 +1016,11 @@ Aloe: Min: 1 Max: 10 - PotencyDivisor: 10 + potencyDivisor: 10 Dermaline: Min: 1 Max: 10 - PotencyDivisor: 10 + potencyDivisor: 10 - type: seed id: lily @@ -997,11 +1044,11 @@ Nutriment: Min: 1 Max: 2 - Potencydivisor: 50 + potencyDivisor: 50 Bicaridine: Min: 1 Max: 20 - PotencyDivisor: 5 + potencyDivisor: 5 - type: seed id: lingzhi @@ -1023,11 +1070,11 @@ Ultravasculine: Min: 1 Max: 20 - PotencyDivisor: 5 + potencyDivisor: 5 Epinephrine: Min: 1 Max: 20 - PotencyDivisor: 5 + potencyDivisor: 5 - type: seed id: ambrosiaVulgaris @@ -1051,23 +1098,23 @@ Nutriment: Min: 1 Max: 2 - PotencyDivisor: 10 + potencyDivisor: 10 Bicaridine: Min: 1 Max: 5 - PotencyDivisor: 20 + potencyDivisor: 20 Kelotane: Min: 1 Max: 5 - PotencyDivisor: 20 + potencyDivisor: 20 Desoxyephedrine: Min: 1 Max: 10 - PotencyDivisor: 10 + potencyDivisor: 10 Vitamin: Min: 1 Max: 2 - Potencydivisor: 50 + potencyDivisor: 50 - type: seed id: ambrosiaDeus @@ -1089,19 +1136,19 @@ Nutriment: Min: 1 Max: 2 - PotencyDivisor: 10 + potencyDivisor: 10 Omnizine: # Don't kill me Min: 1 Max: 3 - PotencyDivisor: 35 + potencyDivisor: 35 SpaceDrugs: Min: 1 Max: 5 - PotencyDivisor: 20 + potencyDivisor: 20 Desoxyephedrine: Min: 1 Max: 10 - PotencyDivisor: 10 + potencyDivisor: 10 - type: seed id: galaxythistle @@ -1123,7 +1170,7 @@ Stellibinin: Min: 1 Max: 25 - PotencyDivisor: 4 + potencyDivisor: 4 - type: seed id: flyAmanita @@ -1146,11 +1193,11 @@ Amatoxin: Min: 1 Max: 25 - PotencyDivisor: 4 + potencyDivisor: 4 Nutriment: ## yumby :) Min: 1 Max: 5 - PotencyDivisor: 20 + potencyDivisor: 20 - type: seed id: gatfruit @@ -1172,11 +1219,11 @@ Nutriment: Min: 1 Max: 5 - PotencyDivisor: 20 + potencyDivisor: 20 Sulfur: Min: 1 Max: 5 - PotencyDivisor: 20 + potencyDivisor: 20 - type: seed id: rice @@ -1200,11 +1247,11 @@ Nutriment: Min: 1 Max: 20 - PotencyDivisor: 20 + potencyDivisor: 20 Rice: Min: 5 Max: 20 - PotencyDivisor: 20 + potencyDivisor: 20 - type: seed id: soybeans @@ -1229,7 +1276,7 @@ Nutriment: Min: 1 Max: 2 - PotencyDivisor: 50 + potencyDivisor: 50 - type: seed id: spacemansTrumpet @@ -1251,11 +1298,11 @@ Nutriment: Min: 1 Max: 5 - Potencydivisor: 50 + potencyDivisor: 50 PolypyryliumOligomers: Min: 1 Max: 15 - PotencyDivisor: 5 + potencyDivisor: 5 - type: seed id: koibean @@ -1278,11 +1325,11 @@ Nutriment: Min: 1 Max: 5 - PotencyDivisor: 20 + potencyDivisor: 20 CarpoToxin: Min: 1 Max: 4 - PotencyDivisor: 30 + potencyDivisor: 30 - type: seed id: grape @@ -1303,11 +1350,11 @@ Nutriment: Min: 1 Max: 5 - PotencyDivisor: 20 + potencyDivisor: 20 Vitamin: Min: 1 Max: 4 - PotencyDivisor: 25 + potencyDivisor: 25 - type: seed id: watermelon @@ -1328,15 +1375,15 @@ Nutriment: Min: 1 Max: 10 - PotencyDivisor: 10 + potencyDivisor: 10 Water: Min: 1 Max: 10 - PotencyDivisor: 10 + potencyDivisor: 10 Vitamin: Min: 1 Max: 5 - PotencyDivisor: 20 + potencyDivisor: 20 - type: seed id: cocoa @@ -1360,11 +1407,11 @@ Vitamin: Min: 1 Max: 4 - PotencyDivisor: 25 + potencyDivisor: 25 Nutriment: Min: 1 Max: 2 - PotencyDivisor: 50 + potencyDivisor: 50 - type: seed id: berries @@ -1386,11 +1433,11 @@ Nutriment: Min: 2 Max: 5 - PotencyDivisor: 30 + potencyDivisor: 30 Vitamin: Min: 1 Max: 4 - PotencyDivisor: 40 + potencyDivisor: 40 - type: seed id: bungo @@ -1415,11 +1462,11 @@ Nutriment: Min: 5 Max: 10 - PotencyDivisor: 20 + potencyDivisor: 20 Enzyme: Min: 5 Max: 10 - PotencyDivisor: 20 + potencyDivisor: 20 - type: seed id: pea @@ -1446,11 +1493,11 @@ Nutriment: Min: 1 Max: 3 - PotencyDivisor: 33 + potencyDivisor: 33 Vitamin: Min: 1 Max: 2 - PotencyDivisor: 50 + potencyDivisor: 50 - type: seed id: pumpkin @@ -1472,11 +1519,11 @@ PumpkinFlesh: Min: 1 Max: 20 - PotencyDivisor: 5 + potencyDivisor: 5 Vitamin: Min: 1 Max: 5 - PotencyDivisor: 20 + potencyDivisor: 20 - type: seed id: cotton @@ -1487,6 +1534,8 @@ packetPrototype: CottonSeeds productPrototypes: - CottonBol + mutationPrototypes: + - pyrotton lifespan: 25 maturation: 8 production: 3 @@ -1499,5 +1548,31 @@ Fiber: Min: 5 Max: 10 - PotencyDivisor: 20 + potencyDivisor: 20 +- type: seed + id: pyrotton + name: seeds-pyrotton-name + noun: seeds-noun-seeds + displayName: seeds-pyrotton-display-name + plantRsi: Objects/Specific/Hydroponics/pyrotton.rsi + packetPrototype: PyrottonSeeds + productPrototypes: + - PyrottonBol + lifespan: 25 + maturation: 8 + production: 3 + yield: 2 + potency: 5 + idealLight: 8 + growthStages: 3 + waterConsumption: 0.80 + chemicals: + Fiber: + Min: 5 + Max: 10 + potencyDivisor: 20 + Phlogiston: + Min: 4 + Max: 8 + potencyDivisor: 30 diff --git a/Resources/Prototypes/InventoryTemplates/aghost_inventory_template.yml b/Resources/Prototypes/InventoryTemplates/aghost_inventory_template.yml index 6252ad8e993..84806a051a7 100644 --- a/Resources/Prototypes/InventoryTemplates/aghost_inventory_template.yml +++ b/Resources/Prototypes/InventoryTemplates/aghost_inventory_template.yml @@ -11,6 +11,7 @@ displayName: ID - name: id slotTexture: id + fullTextureName: template_small slotFlags: IDCARD slotGroup: SecondHotbar stripTime: 6 diff --git a/Resources/Prototypes/InventoryTemplates/arachnid_inventory_template.yml b/Resources/Prototypes/InventoryTemplates/arachnid_inventory_template.yml index a0c62b04cb1..863d5758ff7 100644 --- a/Resources/Prototypes/InventoryTemplates/arachnid_inventory_template.yml +++ b/Resources/Prototypes/InventoryTemplates/arachnid_inventory_template.yml @@ -63,6 +63,7 @@ displayName: Suit Storage - name: id slotTexture: id + fullTextureName: template_small slotFlags: IDCARD slotGroup: SecondHotbar stripTime: 6 @@ -72,6 +73,7 @@ displayName: ID - name: belt slotTexture: belt + fullTextureName: template_small slotFlags: BELT slotGroup: SecondHotbar stripTime: 6 @@ -80,6 +82,7 @@ displayName: Belt - name: back slotTexture: back + fullTextureName: template_small slotFlags: BACK slotGroup: SecondHotbar stripTime: 6 @@ -89,6 +92,7 @@ - name: pocket4 slotTexture: web + fullTextureName: template_small slotFlags: POCKET slotGroup: MainHotbar stripTime: 3 @@ -97,6 +101,7 @@ displayName: Pocket 4 - name: pocket3 slotTexture: web + fullTextureName: template_small slotFlags: POCKET slotGroup: MainHotbar stripTime: 3 @@ -112,6 +117,7 @@ displayName: Suit - name: pocket1 slotTexture: pocket + fullTextureName: template_small slotFlags: POCKET slotGroup: MainHotbar stripTime: 3 @@ -122,6 +128,7 @@ stripHidden: true - name: pocket2 slotTexture: pocket + fullTextureName: template_small slotFlags: POCKET slotGroup: MainHotbar stripTime: 3 @@ -138,4 +145,6 @@ uiWindowPos: 2,0 strippingWindowPos: 2,5 dependsOn: outerClothing + dependsOnComponents: + - type: AllowSuitStorage displayName: Suit Storage diff --git a/Resources/Prototypes/InventoryTemplates/corpse_inventory_template.yml b/Resources/Prototypes/InventoryTemplates/corpse_inventory_template.yml index 41fa7dc375f..878ccb3d6ba 100644 --- a/Resources/Prototypes/InventoryTemplates/corpse_inventory_template.yml +++ b/Resources/Prototypes/InventoryTemplates/corpse_inventory_template.yml @@ -55,6 +55,7 @@ displayName: Head - name: pocket1 slotTexture: pocket + fullTextureName: template_small slotFlags: POCKET slotGroup: MainHotbar stripTime: 3 @@ -65,6 +66,7 @@ stripHidden: true - name: pocket2 slotTexture: pocket + fullTextureName: template_small slotFlags: POCKET slotGroup: MainHotbar stripTime: 3 @@ -81,9 +83,12 @@ uiWindowPos: 2,0 strippingWindowPos: 2,5 dependsOn: outerClothing + dependsOnComponents: + - type: AllowSuitStorage displayName: Suit Storage - name: belt slotTexture: belt + fullTextureName: template_small slotFlags: BELT slotGroup: SecondHotbar stripTime: 6 diff --git a/Resources/Prototypes/InventoryTemplates/diona_inventory_template.yml b/Resources/Prototypes/InventoryTemplates/diona_inventory_template.yml index 4bbd18b1364..619aefddc34 100644 --- a/Resources/Prototypes/InventoryTemplates/diona_inventory_template.yml +++ b/Resources/Prototypes/InventoryTemplates/diona_inventory_template.yml @@ -56,6 +56,7 @@ displayName: Head - name: pocket1 slotTexture: pocket + fullTextureName: template_small slotFlags: POCKET slotGroup: MainHotbar stripTime: 3 @@ -66,6 +67,7 @@ stripHidden: true - name: pocket2 slotTexture: pocket + fullTextureName: template_small slotFlags: POCKET slotGroup: MainHotbar stripTime: 3 @@ -82,9 +84,12 @@ uiWindowPos: 2,0 strippingWindowPos: 2,5 dependsOn: outerClothing + dependsOnComponents: + - type: AllowSuitStorage displayName: Suit Storage - name: id slotTexture: id + fullTextureName: template_small slotFlags: IDCARD slotGroup: SecondHotbar stripTime: 6 @@ -94,6 +99,7 @@ displayName: ID - name: belt slotTexture: belt + fullTextureName: template_small slotFlags: BELT slotGroup: SecondHotbar stripTime: 6 @@ -102,6 +108,7 @@ displayName: Belt - name: back slotTexture: back + fullTextureName: template_small slotFlags: BACK slotGroup: SecondHotbar stripTime: 6 diff --git a/Resources/Prototypes/InventoryTemplates/holoclown_inventory_template.yml b/Resources/Prototypes/InventoryTemplates/holoclown_inventory_template.yml index 57dce506eaf..7be9c75015b 100644 --- a/Resources/Prototypes/InventoryTemplates/holoclown_inventory_template.yml +++ b/Resources/Prototypes/InventoryTemplates/holoclown_inventory_template.yml @@ -3,6 +3,7 @@ slots: - name: pocket1 slotTexture: pocket + fullTextureName: template_small slotFlags: POCKET slotGroup: MainHotbar stripTime: 3 @@ -12,6 +13,7 @@ stripHidden: true - name: pocket2 slotTexture: pocket + fullTextureName: template_small slotFlags: POCKET slotGroup: MainHotbar stripTime: 3 diff --git a/Resources/Prototypes/InventoryTemplates/human_inventory_template.yml b/Resources/Prototypes/InventoryTemplates/human_inventory_template.yml index 574ecca35f4..ff1447931fe 100644 --- a/Resources/Prototypes/InventoryTemplates/human_inventory_template.yml +++ b/Resources/Prototypes/InventoryTemplates/human_inventory_template.yml @@ -62,6 +62,7 @@ displayName: Head - name: pocket1 slotTexture: pocket + fullTextureName: template_small slotFlags: POCKET slotGroup: MainHotbar stripTime: 3 @@ -72,6 +73,7 @@ stripHidden: true - name: pocket2 slotTexture: pocket + fullTextureName: template_small slotFlags: POCKET slotGroup: MainHotbar stripTime: 3 @@ -88,9 +90,12 @@ uiWindowPos: 2,0 strippingWindowPos: 2,5 dependsOn: outerClothing + dependsOnComponents: + - type: AllowSuitStorage displayName: Suit Storage - name: id slotTexture: id + fullTextureName: template_small slotFlags: IDCARD slotGroup: SecondHotbar stripTime: 6 @@ -100,6 +105,7 @@ displayName: ID - name: belt slotTexture: belt + fullTextureName: template_small slotFlags: BELT slotGroup: SecondHotbar stripTime: 6 @@ -108,6 +114,7 @@ displayName: Belt - name: back slotTexture: back + fullTextureName: template_small slotFlags: BACK slotGroup: SecondHotbar stripTime: 6 diff --git a/Resources/Prototypes/InventoryTemplates/kangaroo_inventory_template.yml b/Resources/Prototypes/InventoryTemplates/kangaroo_inventory_template.yml index fb7dee1ec2b..5f81cdebc6c 100644 --- a/Resources/Prototypes/InventoryTemplates/kangaroo_inventory_template.yml +++ b/Resources/Prototypes/InventoryTemplates/kangaroo_inventory_template.yml @@ -35,6 +35,7 @@ - name: belt slotTexture: belt + fullTextureName: template_small slotFlags: BELT slotGroup: SecondHotbar stripTime: 6 @@ -47,6 +48,7 @@ - name: pocket1 slotTexture: pocket + fullTextureName: template_small slotFlags: POCKET slotGroup: MainHotbar stripTime: 3 @@ -60,6 +62,7 @@ slots: - name: pocket1 slotTexture: pocket + fullTextureName: template_small slotFlags: POCKET slotGroup: MainHotbar stripTime: 3 diff --git a/Resources/Prototypes/InventoryTemplates/monkey_inventory_template.yml b/Resources/Prototypes/InventoryTemplates/monkey_inventory_template.yml index 5af23dabac2..19875f7e1bf 100644 --- a/Resources/Prototypes/InventoryTemplates/monkey_inventory_template.yml +++ b/Resources/Prototypes/InventoryTemplates/monkey_inventory_template.yml @@ -29,6 +29,7 @@ displayName: Jumpsuit - name: id slotTexture: id + fullTextureName: template_small slotFlags: IDCARD slotGroup: SecondHotbar stripTime: 6 @@ -44,6 +45,8 @@ uiWindowPos: 2,0 strippingWindowPos: 2,5 dependsOn: outerClothing + dependsOnComponents: + - type: AllowSuitStorage displayName: Suit Storage - name: outerClothing slotTexture: suit diff --git a/Resources/Prototypes/Language/Species-Specific/diona.yml b/Resources/Prototypes/Language/Species-Specific/diona.yml new file mode 100644 index 00000000000..57c928dc465 --- /dev/null +++ b/Resources/Prototypes/Language/Species-Specific/diona.yml @@ -0,0 +1,18 @@ +# Spoken by dionas. +# TODO: Replace this with a much better language. +- type: language + id: RootSpeak + isVisibleLanguage: true + speech: + color: "#ce5e14dd" + fontId: Noganas + obfuscation: + !type:SyllableObfuscation + minSyllables: 1 + maxSyllables: 5 + replacement: + - hs + - zt + - kr + - st + - sh diff --git a/Resources/Prototypes/Language/Species-Specific/harpy.yml b/Resources/Prototypes/Language/Species-Specific/harpy.yml new file mode 100644 index 00000000000..531b92e3259 --- /dev/null +++ b/Resources/Prototypes/Language/Species-Specific/harpy.yml @@ -0,0 +1,117 @@ +- type: language + id: ValyrianStandard + isVisibleLanguage: true + speech: + fontId: Cambria + color: "#008ecc" + obfuscation: + !type:SyllableObfuscation + minSyllables: 2 + maxSyllables: 5 + replacement: + - š + - ž + - ź + - ż + - ö + - ü + - çi + - bü + - ca + - çu + - dü + - do + - fa + - fe + - fi + - gü + - ha + - je + - jü + - la + - le + - li + - me + - mi + - mo + - çe + - nj + - ba + - ce + - da + - fi + - go + - ha + - ji + - ka + - la + - ma + - na + - pa + - ra + - sa + - ta + - wa + - za + - ab + - ed + - if + - og + - up + - yk + - za + - ta + - va + - čk + - žd + - sak + - anz + - emn + - okl + - upn + - bab + - cic + - ded + - fig + - gog + - hib + - juj + - kik + - lal + - mam + - nan + - pap + - rar + - sas + - tat + - wab + - zab + - stras + - bram + - klam + - tram + - stry + - zrak + - deck + - mist + - ale + - ogn + - emt + - brat + - skar + - plik + - klat + - ae + - ai + - au + - ei + - ou + - bl + - dr + - fl + - gr + - pr + - sz + - cz + - zk + - jn diff --git a/Resources/Prototypes/Language/Species-Specific/marish.yml b/Resources/Prototypes/Language/Species-Specific/marish.yml new file mode 100644 index 00000000000..20b42a80d16 --- /dev/null +++ b/Resources/Prototypes/Language/Species-Specific/marish.yml @@ -0,0 +1,21 @@ +# Spoken by shadowkins. +- type: language + id: Marish + isVisibleLanguage: true + speech: + color: "#be3cc5" + fontId: Lymphatic + empathySpeech: true + speechVerbOverrides: + - chat-speech-verb-marish + obfuscation: + !type:SyllableObfuscation + minSyllables: 1 # Replacements are really short + maxSyllables: 2 + replacement: + - mar + - mwrrr + - maaAr + - aarrr + - wrurrl + - mmar diff --git a/Resources/Prototypes/Language/Species-Specific/moth.yml b/Resources/Prototypes/Language/Species-Specific/moth.yml new file mode 100644 index 00000000000..e44b3bdd7ce --- /dev/null +++ b/Resources/Prototypes/Language/Species-Specific/moth.yml @@ -0,0 +1,70 @@ +# Spoken by moths. +# TODO: Replace this with a much better language. +- type: language + id: Moffic + isVisibleLanguage: true + speech: + color: "#c7df2edd" + fontId: Copperplate + obfuscation: + !type:SyllableObfuscation + minSyllables: 2 # Replacements are really short + maxSyllables: 4 + replacement: + - år + - i + - går + - sek + - mo + - ff + - ok + - gj + - ø + - gå + - la + - le + - lit + - ygg + - van + - dår + - næ + - møt + - idd + - hvo + - ja + - på + - han + - så + - ån + - det + - att + - nå + - gö + - bra + - int + - tyc + - om + - när + - två + - må + - dag + - sjä + - vii + - vuo + - eil + - tun + - käyt + - teh + - vä + - hei + - huo + - suo + - ää + - ten + - ja + - heu + - stu + - uhr + - kön + - we + - hön diff --git a/Resources/Prototypes/Language/Species-Specific/nekomimetic.yml b/Resources/Prototypes/Language/Species-Specific/nekomimetic.yml new file mode 100644 index 00000000000..a9dae1650df --- /dev/null +++ b/Resources/Prototypes/Language/Species-Specific/nekomimetic.yml @@ -0,0 +1,61 @@ +# A mess of broken Japanese, spoken by Felinds and Oni +# TODO: Replace this with a much better language. +- type: language + id: Nekomimetic + isVisibleLanguage: true + speech: + color: "#df57aaee" + fontId: Manga + obfuscation: + !type:SyllableObfuscation + minSyllables: 1 + maxSyllables: 3 # May be too long even, we'll see. + replacement: + - neko + - nyan + - mimi + - moe + - mofu + - fuwa + - kyaa + - kawaii + - poka + - munya + - puni + - munyu + - ufufu + - icha + - doki + - kyun + - kusu + - nya + - nyaa + - desu + - kis + - ama + - chuu + - baka + - hewo + - boop + - gato + - kit + - sune + - yori + - sou + - baka + - chan + - san + - kun + - mahou + - yatta + - suki + - usagi + - domo + - ori + - uwa + - zaazaa + - shiku + - puru + - ira + - heto + - etto diff --git a/Resources/Prototypes/Language/Species-Specific/reptilian.yml b/Resources/Prototypes/Language/Species-Specific/reptilian.yml new file mode 100644 index 00000000000..b5ba3f6dda1 --- /dev/null +++ b/Resources/Prototypes/Language/Species-Specific/reptilian.yml @@ -0,0 +1,118 @@ +# Spoken by Unathi. +- type: language + id: Draconic + isVisibleLanguage: true + speech: + color: "#2aca2add" + obfuscation: + !type:SyllableObfuscation + minSyllables: 2 + maxSyllables: 4 + replacement: + - za + - az + - ze + - ez + - zi + - iz + - zo + - oz + - zu + - uz + - zs + - sz + - ha + - ah + - he + - eh + - hi + - ih + - ho + - oh + - hu + - uh + - hs + - sh + - la + - al + - le + - el + - li + - il + - lo + - ol + - lu + - ul + - ls + - sl + - ka + - ak + - ke + - ek + - ki + - ik + - ko + - ok + - ku + - uk + - ks + - sk + - sa + - as + - se + - es + - si + - is + - so + - os + - su + - us + - ss + - ss + - ra + - ar + - re + - er + - ri + - ir + - ro + - or + - ru + - ur + - rs + - sr + - a + - a + - e + - e + - i + - i + - o + - o + - u + - u + - s + - s + +# Reptilian-Specific "Rare" Language +# !Do Not Make A Translator For This Language. +- type: language + id: Azaziba + speech: + color: "#2aca2add" + obfuscation: + !type:SyllableObfuscation + minSyllables: 2 + maxSyllables: 4 + replacement: + - azs + - zis + - zau + - azua + - skiu + - zuakz + - izo + - aei + - ki + - kut + - zo diff --git a/Resources/Prototypes/Language/Species-Specific/slimeperson.yml b/Resources/Prototypes/Language/Species-Specific/slimeperson.yml new file mode 100644 index 00000000000..a4d8fc13451 --- /dev/null +++ b/Resources/Prototypes/Language/Species-Specific/slimeperson.yml @@ -0,0 +1,18 @@ +# Spoken by slimes. +# TODO: Replace this with a much better language. +- type: language + id: Bubblish + isVisibleLanguage: true + speech: + color: "#00a3e2dd" + fontId: RubikBubbles + obfuscation: + !type:SyllableObfuscation + minSyllables: 1 + maxSyllables: 3 + replacement: + - blob + - plop + - pop + - bop + - boop diff --git a/Resources/Prototypes/Language/Species-Specific/vulpkanin.yml b/Resources/Prototypes/Language/Species-Specific/vulpkanin.yml new file mode 100644 index 00000000000..2b53f79a55e --- /dev/null +++ b/Resources/Prototypes/Language/Species-Specific/vulpkanin.yml @@ -0,0 +1,69 @@ +# Spoken by the Vulpkanin race. +# TODO: Replace this with a much better language. +- type: language + id: Canilunzt + isVisibleLanguage: true + speech: + color: "#d69b3dcc" + obfuscation: + !type:SyllableObfuscation + minSyllables: 1 + maxSyllables: 4 + replacement: + - rur + - ya + - cen + - rawr + - bar + - kuk + - tek + - qat + - uk + - wu + - vuh + - tah + - tch + - schz + - auch + - ist + - ein + - entch + - zwichs + - tut + - mir + - wo + - bis + - es + - vor + - nic + - gro + - enem + - zandt + - tzch + - noch + - hel + - ischt + - far + - wa + - baram + - iereng + - tech + - lach + - sam + - mak + - lich + - gen + - or + - ag + - eck + - gec + - stag + - onn + - bin + - ket + - jarl + - vulf + - einech + - cresthz + - azunein + - ghzth diff --git a/Resources/Prototypes/Language/Standard/elyran.yml b/Resources/Prototypes/Language/Standard/elyran.yml new file mode 100644 index 00000000000..b97a0698f29 --- /dev/null +++ b/Resources/Prototypes/Language/Standard/elyran.yml @@ -0,0 +1,87 @@ +- type: language + id: Elyran + isVisibleLanguage: true + speech: + color: "#8282fbaa" + obfuscation: + !type:SyllableObfuscation + minSyllables: 1 + maxSyllables: 4 + replacement: + - af + - if + - ba + - ta + - tha + - id + - jem + - ha + - kha + - dal + - dhl + - ra + - zay + - sen + - um + - shn + - sid + - ad + - ta + - za + - ayn + - gha + - zir + - yn + - fa + - qaf + - iam + - mim + - al + - ja + - non + - ha + - waw + - ya + - hem + - zah + - hml + - ks + - ini + - da + - ks + - iga + - ih + - la + - ulf + - xe + - ayw + - sit + - ah + - aarah + - jalaa + - sirt + - kurt + - turhk + - ust + - irk + - kir + - mir + - ach + - oglu + - bolu + - shek + - she + - ghoz + - miya + - ejdan + - haaz + - quq + - taab + - shanha + - an + - saa + - seh + - an' + - e' + - a' + - em' diff --git a/Resources/Prototypes/Language/Standard/freespeak.yml b/Resources/Prototypes/Language/Standard/freespeak.yml new file mode 100644 index 00000000000..9fe252e5b20 --- /dev/null +++ b/Resources/Prototypes/Language/Standard/freespeak.yml @@ -0,0 +1,260 @@ +- type: language + id: Freespeak + isVisibleLanguage: true + speech: + color: "#597d35" + obfuscation: + !type:SyllableObfuscation + minSyllables: 1 + maxSyllables: 3 + replacement: + - a + - aan + - aas + - ab + - aba + - ad + - aee + - aft + - ag + - ai + - aise + - ak + - akee + - aq + - ar + - ata + - aur + - aus + - ba + - baat + - bach + - bad + - bahe + - band + - be + - ben + - ber + - bhaa + - bhu + - bra + - burt + - cap + - cer + - ch + - cha + - chaar + - chale + - chalo + - chil + - com + - da + - daa + - daaj + - dat + - de + - dee + - dhaa + - di + - die + - dik + - din + - diz + - do + - dos + - dosh + - durch + - eer + - ek + - er + - es + - fal + - fang + - fra + - fun + - ga + - gan + - gao + - gee + - geet + - gern + - gir + - gon + - gren + - gri + - gu + - guda + - ha + - haa + - hai + - hain + - har + - hat + - he + - hee + - heer + - hekt + - heu + - hit + - hn + - ho + - hua + - huk + - hul + - ich + - ig + - in + - isch + - ja + - jaa + - jad + - jan + - jao + - jar + - jas + - jee + - jiao + - jin + - jing + - un + - ka + - kaha + - kana + - kar + - kara + - karo + - ke + - kee + - keln + - kha + - khada + - khe + - khi + - ko + - koo + - ky + - la + - laa + - laat + - lad + - lada + - lana + - lane + - le + - lee + - leiden + - leis + - len + - lie + - lo + - maa + - maan + - mod + - most + - muj + - mujhe + - mukt + - na + - naya + - ne + - nee + - net + - neta + - nir + - nka + - oon + - oop + - pa + - paa + - pet + - phen + - phot + - pi + - plo + - pra + - que + - ra + - raa + - rahe + - raho + - ran + - rana + - rar + - re + - ri + - rie + - rin + - ro + - rona + - rosh + - rtiv + - saa + - saal + - saath + - san + - santu + - sch + - se + - sen + - sh + - sha + - shee + - shi + - shn + - sht + - shuo + - soch + - sol + - soo + - ssa + - ster + - suk + - sur + - ta + - taan + - tak + - taka + - tal + - tan + - tar + - ten + - tend + - th + - tho + - tili + - to + - ton + - tr + - tu + - tum + - tung + - udaa + - ugr + - unge + - ut + - va + - vaa + - vaad + - vaib + - ve + - ven + - ver + - vi + - vis + - vol + - wic + - wu + - wut + - xi + - xiao + - ya + - yah + - yon + - you + - zas + - ze + - zhu + - zi + - zo + - zorn + - zt diff --git a/Resources/Prototypes/Language/Standard/solcommon.yml b/Resources/Prototypes/Language/Standard/solcommon.yml new file mode 100644 index 00000000000..4bd1563f74c --- /dev/null +++ b/Resources/Prototypes/Language/Standard/solcommon.yml @@ -0,0 +1,259 @@ +- type: language + id: SolCommon + isVisibleLanguage: true + speech: + color: "#8282fbaa" + obfuscation: + !type:SyllableObfuscation + minSyllables: 1 + maxSyllables: 4 + replacement: + - a + - abe + - ade + - ai + - an + - ana + - ba + - bae + - bai + - bang + - bao + - bei + - ben + - beo + - bi + - bian + - bing + - bo + - bu + - bugu + - bun + - cai + - can + - cao + - cau + - chan + - chen + - cheong + - chiu + - chong + - chyo + - da + - dan + - dao + - de + - deun + - duo + - eon + - eun + - eusi + - feng + - fu + - ga + - gak + - gan + - gang + - gao + - ge + - gei + - gen + - geo + - gil + - go + - gou + - gu + - gua + - gui + - gul + - gun + - guo + - gwi + - ha + - hai + - hal + - han + - hap + - hara + - he + - hego + - hen + - hon + - hoo + - hu + - hua + - hun + - hyeong + - i + - jae + - jeo + - jeon + - ji + - jia + - jian + - jiang + - jie + - jong + - ju + - jue + - juede + - jung + - juzi + - ka + - kang + - kawa + - ke + - keun + - ki + - kin + - ko + - kore + - kou + - ku + - kuda + - kun + - kyu + - lang + - lao + - leng + - leung + - li + - lian + - liang + - lie + - ling + - lizi + - lleo + - long + - lu + - ma + - mah + - me + - mei + - meinu + - men + - meng + - meog + - meoni + - mi + - mian + - min + - mo + - mot + - mu + - mun + - na + - nae + - nai + - nari + - ne + - ni + - nii + - nim + - nin + - nop + - nu + - o + - oba + - oga + - oji + - oka + - ong + - op + - oto + - pa + - pai + - pang + - pin + - ping + - pong + - pu + - pum + - pye + - qi + - qie + - qing + - ra + - rei + - ren + - ri + - ru + - ruan + - sa + - sai + - sama + - san + - sang + - se + - sei + - sen + - seo + - seon + - seong + - shang + - shen + - sheng + - shi + - sho + - shui + - si + - su + - sui + - sum + - sun + - swi + - ta + - tae + - tai + - tame + - tamen + - tan + - te + - tei + - ti + - tian + - to + - ton + - tsu + - ul + - wa + - wan + - wang + - wei + - wo + - xi + - xian + - xiao + - xing + - xiong + - xiu + - xu + - xuan + - xue + - ya + - yan + - yang + - yeong + - yi + - yige + - yin + - ying + - yiqi + - yong + - you + - yu + - yuli + - yuyi + - zai + - zao + - zhan + - zhang + - zhe + - zhen + - zheng + - zhuo + - zi + - zo + - zu + - zun + - zuo diff --git a/Resources/Prototypes/Language/Standard/taucetibasic.yml b/Resources/Prototypes/Language/Standard/taucetibasic.yml new file mode 100644 index 00000000000..f21834f04e6 --- /dev/null +++ b/Resources/Prototypes/Language/Standard/taucetibasic.yml @@ -0,0 +1,256 @@ +# The "Default Language" other than Universal. +- type: language + id: TauCetiBasic + obfuscation: + !type:SyllableObfuscation + minSyllables: 1 + maxSyllables: 3 + replacement: + - a + - ado + - ago + - aj + - ajn + - al + - alt + - am + - amas + - an + - ang + - ante + - ap + - ard + - arma + - aro + - as + - aur + - aut + - aw + - ba + - bal + - bao + - be + - beau + - bel + - bi + - bit + - blu + - bo + - bod + - boj + - bojn + - bu + - but + - ca + - caj + - ce + - cer + - chun + - ci + - cion + - coj + - cor + - da + - daj + - dan + - de + - den + - dis + - do + - dor + - dorm + - eco + - ego + - ek + - eks + - en + - ero + - es + - est + - et + - eve + - fa + - fe + - fel + - fla + - foj + - fra + - fraz + - fros + - ful + - fut + - ga + - gan + - gar + - gi + - gis + - go + - gran + - ha + - han + - hav + - hom + - hong + - hu + - hum + - hushi + - ia + - iaj + - ica + - id + - idon + - il + - in + - ing + - io + - is + - iton + - iza + - ja + - ji + - jirou + - joj + - ka + - kaj + - kajo + - kan + - ke + - ket + - ki + - kna + - krio + - ku + - kui + - kuk + - kun + - kur + - la + - laca + - leng + - les + - li + - liao + - lib + - ling + - lis + - lo + - lon + - long + - lu + - lud + - ma + - mal + - man + - me + - mego + - mero + - mi + - mia + - min + - mo + - moj + - mola + - mon + - mul + - ne + - ner + - ni + - nio + - nu + - of + - oj + - om + - ou + - pe + - pi + - plan + - pli + - po + - por + - post + - pre + - prin + - pru + - pu + - pur + - qiu + - que + - ra + - ras + - re + - ri + - rig + - ril + - ro + - roj + - ron + - roso + - rou + - ru + - sa + - san + - sci + - sek + - shi + - shiia + - shiue + - shiwu + - shu + - shui + - si + - siaj + - sku + - so + - som + - sti + - str + - stre + - su + - suno + - ta + - tan + - tas + - te + - tel + - tem + - the + - ti + - tian + - tita + - tiu + - to + - toj + - ton + - tran + - tre + - tri + - trin + - tro + - trus + - un + - undo + - uno + - uz + - va + - var + - varm + - vas + - ve + - vek + - ven + - ves + - vi + - via + - vin + - vino + - vint + - vir + - von + - vu + - whe + - wu + - yong + - zem + - zo + - zoj + - zon diff --git a/Resources/Prototypes/Language/Standard/tradeband.yml b/Resources/Prototypes/Language/Standard/tradeband.yml new file mode 100644 index 00000000000..53613b46b25 --- /dev/null +++ b/Resources/Prototypes/Language/Standard/tradeband.yml @@ -0,0 +1,259 @@ +- type: language + id: Tradeband + isVisibleLanguage: true + speech: + color: "#597d35" + obfuscation: + !type:SyllableObfuscation + minSyllables: 1 + maxSyllables: 3 + replacement: + - a + - acc + - ai + - al + - ali + - am + - ama + - ami + - amo + - an + - ang + - arme + - ave + - ba + - bai + - bar + - bat + - bi + - blie + - bris + - ca + - can + - cant + - car + - care + - ce + - ci + - cis + - cit + - cla + - co + - cul + - cur + - curt + - da + - dam + - dans + - de + - di + - dier + - dim + - dins + - dorm + - du + - duro + - e + - eaux + - ec + - ecto + - ees + - ego + - el + - en + - ent + - er + - ere + - eres + - eri + - ero + - es + - et + - ex + - far + - fi + - fic + - fine + - fol + - foll + - fri + - fro + - gen + - gil + - go + - gran + - hab + - ho + - huc + - ia + - iam + - ibus + - idor + - ie + - iens + - ier + - ieur + - iis + - il + - in + - ine + - int + - ir + - is + - ise + - it + - itt + - jar + - je + - jo + - jor + - la + - lar + - lav + - le + - lees + - ler + - les + - li + - lib + - lie + - lo + - lu + - ma + - man + - manu + - mar + - mari + - mas + - me + - mea + - mee + - mejo + - men + - mes + - meum + - meus + - mi + - mier + - min + - mine + - mit + - mo + - moi + - mon + - mons + - mors + - mou + - mul + - na + - nam + - ne + - nee + - nent + - nes + - ni + - nit + - nom + - nu + - num + - o + - oc + - occ + - oja + - om + - omni + - or + - ori + - oro + - os + - ou + - oub + - pa + - par + - pars + - pas + - plu + - pluv + - po + - pol + - pos + - pou + - pous + - pre + - pu + - pug + - pus + - que + - qui + - re + - ri + - ric + - riga + - rito + - ro + - rom + - sa + - sal + - se + - ser + - sers + - ses + - sim + - sion + - so + - sol + - som + - sou + - sper + - sse + - ste + - su + - suis + - sul + - sur + - ta + - tar + - te + - teau + - tem + - temp + - ten + - tene + - tes + - ti + - tibus + - tien + - tion + - to + - tol + - ton + - tons + - tout + - tra + - trai + - tre + - trou + - tuo + - tus + - tut + - ues + - ui + - ul + - um + - un + - upa + - us + - ut + - ux + - va + - vail + - ve + - ven + - veni + - vi + - viam + - vie + - vo + - xus + - za + - zio diff --git a/Resources/Prototypes/Language/animal.yml b/Resources/Prototypes/Language/animal.yml new file mode 100644 index 00000000000..46178200011 --- /dev/null +++ b/Resources/Prototypes/Language/animal.yml @@ -0,0 +1,186 @@ +# Languages spoken by various critters. +- type: language + id: Cat + obfuscation: + !type:SyllableObfuscation + minSyllables: 1 + maxSyllables: 2 + replacement: + - murr + - meow + - purr + - mrow + +- type: language + id: Dog + obfuscation: + !type:SyllableObfuscation + minSyllables: 1 + maxSyllables: 2 + replacement: + - woof + - bark + - ruff + - bork + - raff + - garr + +- type: language + id: Fox + obfuscation: + !type:SyllableObfuscation + minSyllables: 1 + maxSyllables: 2 + replacement: + - ruff + - raff + - garr + - yip + - yap + - myah + +- type: language + id: Xeno + obfuscation: + !type:SyllableObfuscation + minSyllables: 1 + maxSyllables: 8 # I was crazy once + replacement: + - s + - S + +- type: language + id: Monkey + obfuscation: + !type:SyllableObfuscation + minSyllables: 1 + maxSyllables: 8 # They locked me in a room... + replacement: + - o + - k + +- type: language + id: Mouse + obfuscation: + !type:SyllableObfuscation + minSyllables: 2 + maxSyllables: 3 + replacement: + - squ + - eak + - pi + - ep + - chuu + - ee + - fwi + - he + +- type: language + id: Chicken + obfuscation: + !type:SyllableObfuscation + minSyllables: 1 + maxSyllables: 3 + replacement: + - co + - coo + - ot + +- type: language + id: Duck + obfuscation: + !type:SyllableObfuscation + minSyllables: 1 + maxSyllables: 3 + replacement: + - qu + - ack + - quack + +- type: language + id: Cow + obfuscation: + !type:SyllableObfuscation + minSyllables: 1 + maxSyllables: 3 + replacement: + - moo + - mooo + +- type: language + id: Sheep + obfuscation: + !type:SyllableObfuscation + minSyllables: 1 + maxSyllables: 3 + replacement: + - ba + - baa + - aa + +- type: language + id: Kangaroo + obfuscation: + !type:SyllableObfuscation + minSyllables: 1 + maxSyllables: 3 + replacement: + - shre + - ack + - chuu + - choo + +- type: language + id: Pig + obfuscation: + !type:SyllableObfuscation + minSyllables: 1 + maxSyllables: 3 + replacement: + - oink # Please someone come up with something better + +- type: language + id: Crab + obfuscation: + !type:SyllableObfuscation + minSyllables: 1 + maxSyllables: 3 + replacement: + - click + - clack + - ti + - pi + - tap + - cli + - ick + +- type: language + id: Kobold + obfuscation: + !type:SyllableObfuscation + minSyllables: 2 + maxSyllables: 4 + replacement: + - yip + - yap + - gar + - grr + - ar + - scre + - et + - gronk + - hiss + - ss + - ee + +- type: language + id: Hissing + obfuscation: + !type:SyllableObfuscation + minSyllables: 2 + maxSyllables: 4 + replacement: + - hss + - iss + - ss + - is diff --git a/Resources/Prototypes/Language/genericlanguages.yml b/Resources/Prototypes/Language/genericlanguages.yml new file mode 100644 index 00000000000..90cb874ee68 --- /dev/null +++ b/Resources/Prototypes/Language/genericlanguages.yml @@ -0,0 +1,46 @@ +# The universal language. This is technically used as a fallback for simulating the pre-languages +# style of Chat, and is not normally accessible by players. It is however used by characters +# with the Xenoglossy psionic power, as well as Ghosts, and AGhosts. +- type: language + id: Universal + obfuscation: + !type:ReplacementObfuscation + replacement: + - "*incomprehensible*" # Never actually used + +# Used by Robots. +# TODO: Replace this with much better languages. Yes, robots can have languages. +- type: language + id: RobotTalk + isVisibleLanguage: true + speech: + fontId: Monospace + obfuscation: + !type:SyllableObfuscation + minSyllables: 1 + maxSyllables: 10 # Crazy + replacement: + - 0 + - 1 + +# Example of a sign language. Used by the Sign Language trait. +- type: language + id: Sign + speech: + allowRadio: false + requireSpeech: false + color: "#dddddd" + messageWrapOverrides: + Speak: chat-sign-language-message-wrap + Whisper: chat-sign-language-whisper-wrap + speechVerbOverrides: + - chat-speech-verb-sign-1 + - chat-speech-verb-sign-2 + - chat-speech-verb-sign-3 + obfuscation: + !type:ReplacementObfuscation + replacement: + - something + - a cryptic message + - a signal + - a message diff --git a/Resources/Prototypes/Loadouts/Categories/categories.yml b/Resources/Prototypes/Loadouts/Categories/categories.yml index 80ed6d0efc3..bfda095b193 100644 --- a/Resources/Prototypes/Loadouts/Categories/categories.yml +++ b/Resources/Prototypes/Loadouts/Categories/categories.yml @@ -6,6 +6,10 @@ id: Uncategorized root: true +- type: loadoutCategory + id: Backpacks + root: true + - type: loadoutCategory id: Eyes root: true @@ -39,43 +43,10 @@ id: JobsAUncategorized - type: loadoutCategory - id: JobsCommand - subCategories: - - JobsCommandAUncategorized - - JobsCommandCaptain - - JobsCommandCE - - JobsCommandCMO - - JobsCommandHOP - - JobsCommandHOS - - JobsCommandQM - - JobsCommandRD - -- type: loadoutCategory - id: JobsCommandAUncategorized - -- type: loadoutCategory - id: JobsCommandCaptain - -- type: loadoutCategory - id: JobsCommandCE - -- type: loadoutCategory - id: JobsCommandCMO - -- type: loadoutCategory - id: JobsCommandHOP - -- type: loadoutCategory - id: JobsCommandHOS - -- type: loadoutCategory - id: JobsCommandQM - -- type: loadoutCategory - id: JobsCommandRD + id: JobsCargo - type: loadoutCategory - id: JobsCargo + id: JobsCommand - type: loadoutCategory id: JobsEngineering @@ -85,7 +56,7 @@ - type: loadoutCategory id: JobsScience - + - type: loadoutCategory id: JobsSecurity @@ -94,6 +65,10 @@ subCategories: - JobsServiceUncategorized - JobsServiceBartender + - JobsServiceBotanist + - JobsServiceChef + - JobsServiceJanitor + - JobsServiceMusician - type: loadoutCategory id: JobsServiceUncategorized @@ -101,6 +76,18 @@ - type: loadoutCategory id: JobsServiceBartender +- type: loadoutCategory + id: JobsServiceBotanist + +- type: loadoutCategory + id: JobsServiceChef + +- type: loadoutCategory + id: JobsServiceJanitor + +- type: loadoutCategory + id: JobsServiceMusician + - type: loadoutCategory id: Mask root: true diff --git a/Resources/Prototypes/Loadouts/Jobs/Heads/captain.yml b/Resources/Prototypes/Loadouts/Jobs/Heads/captain.yml index 8b4d785476e..47e4310fdf9 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Heads/captain.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Heads/captain.yml @@ -1,6 +1,6 @@ - type: loadout id: LoadoutCommandCapNeckMantle - category: JobsCommandCaptain + category: JobsCommand cost: 0 exclusive: true requirements: @@ -12,7 +12,7 @@ - type: loadout id: LoadoutCommandCapNeckCloak - category: JobsCommandCaptain + category: JobsCommand cost: 0 exclusive: true requirements: @@ -24,7 +24,7 @@ - type: loadout id: LoadoutCommandCapNeckCloakFormal - category: JobsCommandCaptain + category: JobsCommand cost: 0 exclusive: true requirements: @@ -36,7 +36,7 @@ - type: loadout id: LoadoutCommandCapJumpsuitFormal - category: JobsCommandCaptain + category: JobsCommand cost: 0 exclusive: true requirements: @@ -48,7 +48,7 @@ - type: loadout id: LoadoutCommandCapJumpskirtFormal - category: JobsCommandCaptain + category: JobsCommand cost: 0 exclusive: true requirements: @@ -60,7 +60,7 @@ - type: loadout id: LoadoutCommandCapOuterWinter - category: JobsCommandCaptain + category: JobsCommand cost: 1 requirements: - !type:CharacterJobRequirement @@ -71,7 +71,7 @@ - type: loadout id: LoadoutCommandCapGloves - category: JobsCommandCaptain + category: JobsCommand cost: 0 requirements: - !type:CharacterJobRequirement @@ -82,7 +82,7 @@ - type: loadout id: LoadoutCommandCapHat - category: JobsCommandCaptain + category: JobsCommand cost: 0 requirements: - !type:CharacterJobRequirement @@ -93,7 +93,7 @@ - type: loadout id: LoadoutCommandCapHatCapcap - category: JobsCommandCaptain + category: JobsCommand cost: 0 requirements: - !type:CharacterJobRequirement @@ -104,7 +104,7 @@ - type: loadout id: LoadoutCommandCapHatBeret - category: JobsCommandCaptain + category: JobsCommand cost: 0 requirements: - !type:CharacterJobRequirement @@ -115,7 +115,7 @@ - type: loadout id: LoadoutCommandCapMaskGas - category: JobsCommandCaptain + category: JobsCommand cost: 0 requirements: - !type:CharacterJobRequirement @@ -126,7 +126,7 @@ - type: loadout id: LoadoutCommandCapShoesBootsWinter - category: JobsCommandCaptain + category: JobsCommand cost: 0 exclusive: true requirements: @@ -138,7 +138,7 @@ - type: loadout id: LoadoutCommandCapItemDrinkFlask - category: JobsCommandCaptain + category: JobsCommand cost: 1 requirements: - !type:CharacterJobRequirement diff --git a/Resources/Prototypes/Loadouts/Jobs/Heads/chiefEngineer.yml b/Resources/Prototypes/Loadouts/Jobs/Heads/chiefEngineer.yml index 4ac34495ba8..bfddc6e383e 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Heads/chiefEngineer.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Heads/chiefEngineer.yml @@ -1,6 +1,6 @@ - type: loadout id: LoadoutCommandCENeckMantle - category: JobsCommandCE + category: JobsCommand cost: 0 exclusive: true requirements: @@ -12,7 +12,7 @@ - type: loadout id: LoadoutCommandCENeckCloak - category: JobsCommandCE + category: JobsCommand cost: 0 exclusive: true requirements: @@ -24,7 +24,7 @@ - type: loadout id: LoadoutCommandCEOuterWinter - category: JobsCommandCE + category: JobsCommand cost: 1 requirements: - !type:CharacterJobRequirement @@ -35,7 +35,7 @@ - type: loadout id: LoadoutCommandCEShoesBootsWinter - category: JobsCommandCE + category: JobsCommand cost: 0 exclusive: true requirements: diff --git a/Resources/Prototypes/Loadouts/Jobs/Heads/chiefMedicalOfficer.yml b/Resources/Prototypes/Loadouts/Jobs/Heads/chiefMedicalOfficer.yml index 79d821a8dbb..0c46af70137 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Heads/chiefMedicalOfficer.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Heads/chiefMedicalOfficer.yml @@ -1,6 +1,6 @@ - type: loadout id: LoadoutCommandCMONeckMantle - category: JobsCommandCMO + category: JobsCommand cost: 0 exclusive: true requirements: @@ -12,7 +12,7 @@ - type: loadout id: LoadoutCommandCMONeckCloak - category: JobsCommandCMO + category: JobsCommand cost: 0 exclusive: true requirements: @@ -24,7 +24,7 @@ - type: loadout id: LoadoutCommandCMOOuterWinter - category: JobsCommandCMO + category: JobsCommand cost: 1 requirements: - !type:CharacterJobRequirement @@ -35,7 +35,7 @@ - type: loadout id: LoadoutCommandCMOOuterLab - category: JobsCommandCMO + category: JobsCommand cost: 0 requirements: - !type:CharacterJobRequirement @@ -46,7 +46,7 @@ - type: loadout id: LoadoutCommandCMOHatBeret - category: JobsCommandCMO + category: JobsCommand cost: 0 requirements: - !type:CharacterJobRequirement @@ -57,7 +57,7 @@ - type: loadout id: LoadoutCommandCMOShoesBootsWinter - category: JobsCommandCMO + category: JobsCommand cost: 0 exclusive: true requirements: diff --git a/Resources/Prototypes/Loadouts/Jobs/Heads/command.yml b/Resources/Prototypes/Loadouts/Jobs/Heads/command.yml index 43c6213049e..ccc791460b6 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Heads/command.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Heads/command.yml @@ -1,6 +1,6 @@ - type: loadout id: LoadoutCommandGlovesInspection - category: JobsCommandAUncategorized + category: JobsCommand cost: 1 exclusive: true requirements: @@ -10,3 +10,15 @@ - 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 index d17a31bb65b..7bb265dd7b1 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Heads/headOfPersonnel.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Heads/headOfPersonnel.yml @@ -1,6 +1,6 @@ - type: loadout id: LoadoutCommandHOPNeckMantle - category: JobsCommandHOP + category: JobsCommand cost: 0 exclusive: true requirements: @@ -12,7 +12,7 @@ - type: loadout id: LoadoutCommandHOPNeckCloak - category: JobsCommandHOP + category: JobsCommand cost: 0 exclusive: true requirements: @@ -24,7 +24,7 @@ - type: loadout id: LoadoutCommandHOPJumpsuitTurtleneckBoatswain - category: JobsCommandHOP + category: JobsCommand cost: 0 exclusive: true requirements: @@ -36,7 +36,7 @@ - type: loadout id: LoadoutCommandHOPJumpsuitMess - category: JobsCommandHOP + category: JobsCommand cost: 0 exclusive: true requirements: @@ -48,7 +48,7 @@ - type: loadout id: LoadoutCommandHOPJumpskirtMess - category: JobsCommandHOP + category: JobsCommand cost: 0 exclusive: true requirements: @@ -60,7 +60,7 @@ - type: loadout id: LoadoutcommandHOPOuterCoatFormal - category: JobsCommandHOP + category: JobsCommand cost: 0 requirements: - !type:CharacterJobRequirement @@ -71,7 +71,7 @@ - type: loadout id: LoadoutCommandHOPBackIan - category: JobsCommandHOP + category: JobsCommand cost: 2 requirements: - !type:CharacterJobRequirement @@ -82,7 +82,7 @@ - type: loadout id: LoadoutCommandHOPHatCap - category: JobsCommandHOP + category: JobsCommand cost: 0 requirements: - !type:CharacterJobRequirement @@ -93,7 +93,7 @@ - type: loadout id: LoadoutCommandHOPShoesBootsWinter - category: JobsCommandHOP + category: JobsCommand cost: 0 exclusive: true requirements: @@ -105,7 +105,7 @@ - type: loadout id: LoadoutCommandHOPBedsheetIan - category: JobsCommandHOP + category: JobsCommand cost: 0 exclusive: true requirements: diff --git a/Resources/Prototypes/Loadouts/Jobs/Heads/headOfSecurity.yml b/Resources/Prototypes/Loadouts/Jobs/Heads/headOfSecurity.yml index 6e53c0195e7..bd2a03f214f 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Heads/headOfSecurity.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Heads/headOfSecurity.yml @@ -1,6 +1,6 @@ - type: loadout id: LoadoutCommandHOSNeckMantle - category: JobsCommandHOS + category: JobsCommand cost: 0 exclusive: true requirements: @@ -12,7 +12,7 @@ - type: loadout id: LoadoutCommandHOSNeckCloak - category: JobsCommandHOS + category: JobsCommand cost: 0 exclusive: true requirements: @@ -24,7 +24,7 @@ - type: loadout id: LoadoutCommandHOSJumpsuitAlt - category: JobsCommandHOS + category: JobsCommand cost: 0 exclusive: true requirements: @@ -36,7 +36,7 @@ - type: loadout id: LoadoutCommandHOSJumpsuitBlue - category: JobsCommandHOS + category: JobsCommand cost: 0 exclusive: true requirements: @@ -48,7 +48,7 @@ - type: loadout id: LoadoutCommandHOSJumpsuitGrey - category: JobsCommandHOS + category: JobsCommand cost: 0 exclusive: true requirements: @@ -60,7 +60,7 @@ - type: loadout id: LoadoutCommandHOSJumpsuitParade - category: JobsCommandHOS + category: JobsCommand cost: 0 exclusive: true requirements: @@ -72,7 +72,7 @@ - type: loadout id: LoadoutCommandHOSJumpsuitFormal - category: JobsCommandHOS + category: JobsCommand cost: 0 exclusive: true requirements: @@ -84,7 +84,7 @@ - type: loadout id: LoadoutCommandHOSJumpskirtAlt - category: JobsCommandHOS + category: JobsCommand cost: 0 exclusive: true requirements: @@ -96,7 +96,7 @@ - type: loadout id: LoadoutCommandHOSJumpskirtParade - category: JobsCommandHOS + category: JobsCommand cost: 0 exclusive: true requirements: @@ -108,7 +108,7 @@ - type: loadout id: LoadoutCommandHOSJumpskirtFormal - category: JobsCommandHOS + category: JobsCommand cost: 0 exclusive: true requirements: @@ -120,7 +120,7 @@ - type: loadout id: LoadoutCommandHOSOuterWinter - category: JobsCommandHOS + category: JobsCommand cost: 1 requirements: - !type:CharacterJobRequirement @@ -131,7 +131,7 @@ - type: loadout id: LoadoutCommandHOSOuterTrench - category: JobsCommandHOS + category: JobsCommand cost: 1 requirements: - !type:CharacterJobRequirement @@ -142,7 +142,7 @@ - type: loadout id: LoadoutCommandHOSHatBeret - category: JobsCommandHOS + category: JobsCommand cost: 0 requirements: - !type:CharacterJobRequirement @@ -153,7 +153,7 @@ - type: loadout id: LoadoutCommandHOSHatHoshat - category: JobsCommandHOS + category: JobsCommand cost: 0 requirements: - !type:CharacterJobRequirement @@ -164,7 +164,7 @@ - type: loadout id: LoadoutCommandHOSShoesBootsWinter - category: JobsCommandHOS + category: JobsCommand cost: 0 exclusive: true requirements: @@ -173,3 +173,97 @@ - HeadOfSecurity items: - ClothingShoesBootsWinterHeadOfSecurity + +# 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 + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHoSWeapon + - !type:CharacterJobRequirement + jobs: + - HeadOfSecurity + items: + - WeaponPulsePistolHoS + +- type: loadout + id: LoadoutCommandHoSWt550 + category: JobsCommand + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHoSWeapon + - !type:CharacterJobRequirement + jobs: + - HeadOfSecurity + items: + - WeaponSubMachineGunWt550HoS + +- type: loadout + id: LoadoutCommandHoSKatanaSheath + category: JobsCommand + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHoSWeapon + - !type:CharacterJobRequirement + jobs: + - HeadOfSecurity + items: + - ClothingBeltKatanaSheathFilledHoS + +- type: loadout + id: LoadoutCommandHoSC20r + category: JobsCommand + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHoSWeapon + - !type:CharacterJobRequirement + jobs: + - HeadOfSecurity + items: + - WeaponSubMachineGunC20rHoS + +- type: loadout + id: LoadoutCommandHoSBulldog + category: JobsCommand + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHoSWeapon + - !type:CharacterJobRequirement + jobs: + - HeadOfSecurity + items: + - WeaponShotgunBulldogHoS + +- type: loadout + id: LoadoutCommandHoSEnergySword + category: JobsCommand + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHoSWeapon + - !type:CharacterJobRequirement + jobs: + - HeadOfSecurity + items: + - EnergySwordHoS + +- type: loadout + id: LoadoutCommandHoSEnergyGun + category: JobsCommand + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHoSWeapon + - !type:CharacterJobRequirement + jobs: + - HeadOfSecurity + items: + - WeaponEnergyGunMultiphase diff --git a/Resources/Prototypes/Loadouts/Jobs/Heads/quarterMaster.yml b/Resources/Prototypes/Loadouts/Jobs/Heads/quarterMaster.yml index 8064b3105e0..0dd45eb3f5f 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Heads/quarterMaster.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Heads/quarterMaster.yml @@ -1,7 +1,7 @@ # What? This isn't a thing?? :( # - type: loadout # id: LoadoutCommandQMNeckMantle -# category: JobsCommandQM +# category: JobsCommand # cost: 2 # exclusive: true # requirements: @@ -13,7 +13,7 @@ - type: loadout id: LoadoutCommandQMNeckCloak - category: JobsCommandQM + category: JobsCommand cost: 0 exclusive: true requirements: @@ -25,7 +25,7 @@ - type: loadout id: LoadoutCommandQMUniformTurtleneck - category: JobsCommandQM + category: JobsCommand cost: 0 exclusive: true requirements: @@ -37,7 +37,7 @@ - type: loadout id: LoadoutCommandQMUniformTurtleneckSkirt - category: JobsCommandQM + category: JobsCommand cost: 0 exclusive: true requirements: @@ -49,7 +49,7 @@ - type: loadout id: LoadoutCommandQMHeadSoft - category: JobsCommandQM + category: JobsCommand cost: 0 requirements: - !type:CharacterJobRequirement @@ -60,7 +60,7 @@ - type: loadout id: LoadoutCommandQMShoesBootsWinter - category: JobsCommandQM + category: JobsCommand cost: 0 exclusive: true requirements: diff --git a/Resources/Prototypes/Loadouts/Jobs/Heads/researchDirector.yml b/Resources/Prototypes/Loadouts/Jobs/Heads/researchDirector.yml index 5d0421fe39d..0ec43fc3a77 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Heads/researchDirector.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Heads/researchDirector.yml @@ -2,7 +2,7 @@ - type: loadout id: LoadoutCommandRDOuterWinter - category: JobsCommandRD + category: JobsCommand cost: 1 requirements: - !type:CharacterJobRequirement @@ -13,7 +13,7 @@ - type: loadout id: LoadoutCommandRDOuterMysta - category: JobsCommandRD + category: JobsCommand cost: 0 requirements: - !type:CharacterJobRequirement @@ -26,7 +26,7 @@ - type: loadout id: LoadoutCommandRDHeadHatBeretMysta - category: JobsCommandRD + category: JobsCommand cost: 0 exclusive: true requirements: @@ -38,7 +38,7 @@ - type: loadout id: LoadoutCommandRDHeadHoodMysta - category: JobsCommandRD + category: JobsCommand cost: 0 exclusive: true requirements: @@ -52,7 +52,7 @@ - type: loadout id: LoadoutCommandRDNeckMantle - category: JobsCommandRD + category: JobsCommand cost: 0 exclusive: true requirements: @@ -64,7 +64,7 @@ - type: loadout id: LoadoutCommandRDNeckCloak - category: JobsCommandRD + category: JobsCommand cost: 0 exclusive: true requirements: @@ -76,7 +76,7 @@ - type: loadout id: LoadoutCommandRDNeckCloakMystagogue - category: JobsCommandRD + category: JobsCommand cost: 0 exclusive: true requirements: @@ -90,7 +90,7 @@ - type: loadout id: LoadoutCommandRDShoesBootsWinter - category: JobsCommandRD + category: JobsCommand cost: 0 exclusive: true requirements: diff --git a/Resources/Prototypes/Loadouts/Jobs/Service/musician.yml b/Resources/Prototypes/Loadouts/Jobs/Service/musician.yml new file mode 100644 index 00000000000..5bf5471697b --- /dev/null +++ b/Resources/Prototypes/Loadouts/Jobs/Service/musician.yml @@ -0,0 +1,554 @@ +# Musician +# Musician Instruments +# Brass Instruments +- type: loadout + id: LoadoutItemTrumpetInstrumentMusician + category: JobsServiceMusician + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMusicianInstruments + - !type:CharacterJobRequirement + jobs: + - Musician + items: + - TrumpetInstrument + +- type: loadout + id: LoadoutItemTromboneInstrumentMusician + category: JobsServiceMusician + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMusicianInstruments + - !type:CharacterJobRequirement + jobs: + - Musician + items: + - TromboneInstrument + +- type: loadout + id: LoadoutItemFrenchHornInstrumentMusician + category: JobsServiceMusician + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMusicianInstruments + - !type:CharacterJobRequirement + jobs: + - Musician + items: + - FrenchHornInstrument + +- type: loadout + id: LoadoutItemEuphoniumInstrumentMusician + category: JobsServiceMusician + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMusicianInstruments + - !type:CharacterJobRequirement + jobs: + - Musician + items: + - EuphoniumInstrument + +# Misc Instruments +- type: loadout + id: LoadoutItemSeashellInstrumentMusician + category: JobsServiceMusician + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMusicianInstruments + - !type:CharacterJobRequirement + jobs: + - Musician + items: + - SeashellInstrument + +- type: loadout + id: LoadoutItemBirdToyInstrumentMusician + category: JobsServiceMusician + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMusicianInstruments + - !type:CharacterJobRequirement + jobs: + - Musician + items: + - BirdToyInstrument + # After this are some instruments like "Phone, Helicopter, and Canned Aplause. I leave those to the Clown + +# Percussion +- type: loadout + id: LoadoutItemGlockenspielInstrumentMusician + category: JobsServiceMusician + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMusicianInstruments + - !type:CharacterJobRequirement + jobs: + - Musician + items: + - GlockenspielInstrument + +- type: loadout + id: LoadoutItemMusicBoxInstrumentMusician + category: JobsServiceMusician + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMusicianInstruments + - !type:CharacterJobRequirement + jobs: + - Musician + items: + - MusicBoxInstrument + +- type: loadout + id: LoadoutItemXylophoneInstrumentMusician + category: JobsServiceMusician + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMusicianInstruments + - !type:CharacterJobRequirement + jobs: + - Musician + items: + - XylophoneInstrument + +- type: loadout + id: LoadoutItemMicrophoneInstrumentMusician + category: JobsServiceMusician + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMusicianInstruments + - !type:CharacterJobRequirement + jobs: + - Musician + items: + - MicrophoneInstrument + +- type: loadout + id: LoadoutItemSynthesizerInstrumentMusician + category: JobsServiceMusician + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMusicianInstruments + - !type:CharacterJobRequirement + jobs: + - Musician + items: + - SynthesizerInstrument + +- type: loadout + id: LoadoutItemKalimbaInstrumentMusician + category: JobsServiceMusician + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMusicianInstruments + - !type:CharacterJobRequirement + jobs: + - Musician + items: + - KalimbaInstrument + +- type: loadout + id: LoadoutItemWoodblockInstrumentMusician + category: JobsServiceMusician + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMusicianInstruments + - !type:CharacterJobRequirement + jobs: + - Musician + items: + - WoodblockInstrument + +# Stringed Instruments +- type: loadout + id: LoadoutItemElectricGuitarInstrumentMusician + category: JobsServiceMusician + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMusicianInstruments + - !type:CharacterJobRequirement + jobs: + - Musician + items: + - ElectricGuitarInstrument + +- type: loadout + id: LoadoutItemBassGuitarInstrumentMusician + category: JobsServiceMusician + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMusicianInstruments + - !type:CharacterJobRequirement + jobs: + - Musician + items: + - BassGuitarInstrument + +- type: loadout + id: LoadoutItemRockGuitarInstrumentMusician + category: JobsServiceMusician + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMusicianInstruments + - !type:CharacterJobRequirement + jobs: + - Musician + items: + - RockGuitarInstrument + +- type: loadout + id: LoadoutItemAcousticGuitarInstrumentMusician + category: JobsServiceMusician + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMusicianInstruments + - !type:CharacterJobRequirement + jobs: + - Musician + items: + - AcousticGuitarInstrument + +- type: loadout + id: LoadoutItemBanjoInstrumentMusician + category: JobsServiceMusician + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMusicianInstruments + - !type:CharacterJobRequirement + jobs: + - Musician + items: + - BanjoInstrument + +- type: loadout + id: LoadoutItemViolinInstrumentMusician + category: JobsServiceMusician + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMusicianInstruments + - !type:CharacterJobRequirement + jobs: + - Musician + items: + - ViolinInstrument + +- type: loadout + id: LoadoutItemViolaInstrumentMusician + category: JobsServiceMusician + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMusicianInstruments + - !type:CharacterJobRequirement + jobs: + - Musician + items: + - ViolaInstrument + +- type: loadout + id: LoadoutItemCelloInstrumentMusician + category: JobsServiceMusician + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMusicianInstruments + - !type:CharacterJobRequirement + jobs: + - Musician + items: + - CelloInstrument + +# Structure Instruments +- type: loadout + id: LoadoutItemPianoInstrumentMusician + category: JobsServiceMusician + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMusicianInstruments + - !type:CharacterJobRequirement + jobs: + - Musician + items: + - PianoFlatpack + +- type: loadout + id: LoadoutItemUprightPianoInstrumentMusician + category: JobsServiceMusician + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMusicianInstruments + - !type:CharacterJobRequirement + jobs: + - Musician + items: + - UprightPianoFlatpack + +- type: loadout + id: LoadoutItemVibraphoneInstrumentMusician + category: JobsServiceMusician + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMusicianInstruments + - !type:CharacterJobRequirement + jobs: + - Musician + items: + - VibraphoneFlatpack + +- type: loadout + id: LoadoutItemMarimbaInstrumentMusician + category: JobsServiceMusician + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMusicianInstruments + - !type:CharacterJobRequirement + jobs: + - Musician + items: + - MarimbaFlatpack + +- type: loadout + id: LoadoutItemChurchOrganInstrumentMusician + category: JobsServiceMusician + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMusicianInstruments + - !type:CharacterJobRequirement + jobs: + - Musician + items: + - ChurchOrganFlatpack + +- type: loadout + id: LoadoutItemTubaInstrumentMusician + category: JobsServiceMusician + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMusicianInstruments + - !type:CharacterJobRequirement + jobs: + - Musician + items: + - TubaFlatpack + +- type: loadout + id: LoadoutItemHarpInstrumentMusician + category: JobsServiceMusician + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMusicianInstruments + - !type:CharacterJobRequirement + jobs: + - Musician + items: + - HarpFlatpack + +- type: loadout + id: LoadoutItemTimpaniInstrumentMusician + category: JobsServiceMusician + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMusicianInstruments + - !type:CharacterJobRequirement + jobs: + - Musician + items: + - TimpaniFlatpack + +- type: loadout + id: LoadoutItemTaikoInstrumentMusician + category: JobsServiceMusician + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMusicianInstruments + - !type:CharacterJobRequirement + jobs: + - Musician + items: + - TaikoFlatpack + +- type: loadout + id: LoadoutItemContrabassInstrumentMusician + category: JobsServiceMusician + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMusicianInstruments + - !type:CharacterJobRequirement + jobs: + - Musician + items: + - ContrabassFlatpack + +- type: loadout + id: LoadoutItemMinimoogInstrumentMusician + category: JobsServiceMusician + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMusicianInstruments + - !type:CharacterJobRequirement + jobs: + - Musician + items: + - MinimoogFlatpack + +- type: loadout + id: LoadoutItemTomDrumsInstrumentMusician + category: JobsServiceMusician + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMusicianInstruments + - !type:CharacterJobRequirement + jobs: + - Musician + items: + - TomDrumsFlatpack + +# Wind Instruments +- type: loadout + id: LoadoutItemSaxophoneInstrumentMusician + category: JobsServiceMusician + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMusicianInstruments + - !type:CharacterJobRequirement + jobs: + - Musician + items: + - SaxophoneInstrument + +- type: loadout + id: LoadoutItemAccordionInstrumentMusician + category: JobsServiceMusician + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMusicianInstruments + - !type:CharacterJobRequirement + jobs: + - Musician + items: + - AccordionInstrument + +- type: loadout + id: LoadoutItemHarmonicaInstrumentMusician + category: JobsServiceMusician + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMusicianInstruments + - !type:CharacterJobRequirement + jobs: + - Musician + items: + - HarmonicaInstrument + +- type: loadout + id: LoadoutItemClarinetInstrumentMusician + category: JobsServiceMusician + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMusicianInstruments + - !type:CharacterJobRequirement + jobs: + - Musician + items: + - ClarinetInstrument + +- type: loadout + id: LoadoutItemFluteInstrumentMusician + category: JobsServiceMusician + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMusicianInstruments + - !type:CharacterJobRequirement + jobs: + - Musician + items: + - FluteInstrument + +- type: loadout + id: LoadoutItemRecorderInstrumentMusician + category: JobsServiceMusician + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMusicianInstruments + - !type:CharacterJobRequirement + jobs: + - Musician + items: + - RecorderInstrument + +- type: loadout + id: LoadoutItemPanFluteInstrumentMusician + category: JobsServiceMusician + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMusicianInstruments + - !type:CharacterJobRequirement + jobs: + - Musician + items: + - PanFluteInstrument + +- type: loadout + id: LoadoutItemOcarinaInstrumentMusician + category: JobsServiceMusician + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMusicianInstruments + - !type:CharacterJobRequirement + jobs: + - Musician + items: + - OcarinaInstrument + +- type: loadout + id: LoadoutItemBagpipeInstrumentMusician + category: JobsServiceMusician + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMusicianInstruments + - !type:CharacterJobRequirement + jobs: + - Musician + items: + - BagpipeInstrument diff --git a/Resources/Prototypes/Loadouts/Jobs/cargo.yml b/Resources/Prototypes/Loadouts/Jobs/cargo.yml index 4558e362bf1..7e9c525e409 100644 --- a/Resources/Prototypes/Loadouts/Jobs/cargo.yml +++ b/Resources/Prototypes/Loadouts/Jobs/cargo.yml @@ -59,3 +59,14 @@ 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/science.yml b/Resources/Prototypes/Loadouts/Jobs/science.yml index 9a9526f83fa..3f376ec872d 100644 --- a/Resources/Prototypes/Loadouts/Jobs/science.yml +++ b/Resources/Prototypes/Loadouts/Jobs/science.yml @@ -3,14 +3,14 @@ - type: loadout id: LoadoutScienceUniformJumpskirtSenior category: JobsScience - cost: 1 + cost: 0 exclusive: true requirements: - !type:CharacterItemGroupRequirement group: LoadoutUniformsScience - - !type:CharacterJobRequirement - jobs: - - Scientist + - !type:CharacterDepartmentRequirement + departments: + - Epistemics - !type:CharacterDepartmentTimeRequirement department: Epistemics min: 216000 # 60 hours @@ -20,14 +20,14 @@ - type: loadout id: LoadoutScienceUniformJumpsuitSenior category: JobsScience - cost: 1 + cost: 0 exclusive: true requirements: - !type:CharacterItemGroupRequirement group: LoadoutUniformsScience - - !type:CharacterJobRequirement - jobs: - - Scientist + - !type:CharacterDepartmentRequirement + departments: + - Epistemics - !type:CharacterDepartmentTimeRequirement department: Epistemics min: 216000 # 60 hours @@ -37,28 +37,28 @@ - type: loadout id: LoadoutScienceUniformJumpskirtRoboticist category: JobsScience - cost: 1 + cost: 0 exclusive: true requirements: - !type:CharacterItemGroupRequirement group: LoadoutUniformsScience - - !type:CharacterJobRequirement - jobs: - - Scientist + - !type:CharacterDepartmentRequirement + departments: + - Epistemics items: - ClothingUniformJumpskirtRoboticist - type: loadout id: LoadoutScienceUniformJumpsuitRoboticist category: JobsScience - cost: 1 + cost: 0 exclusive: true requirements: - !type:CharacterItemGroupRequirement group: LoadoutUniformsScience - - !type:CharacterJobRequirement - jobs: - - Scientist + - !type:CharacterDepartmentRequirement + departments: + - Epistemics items: - ClothingUniformJumpsuitRoboticist @@ -100,11 +100,9 @@ requirements: - !type:CharacterItemGroupRequirement group: LoadoutOuterScience - - !type:CharacterJobRequirement - jobs: - - Scientist - - ResearchAssistant - - ResearchDirector + - !type:CharacterDepartmentRequirement + departments: + - Epistemics items: - ClothingOuterCoatRnd @@ -116,11 +114,9 @@ requirements: - !type:CharacterItemGroupRequirement group: LoadoutOuterScience - - !type:CharacterJobRequirement - jobs: - - Scientist - - ResearchAssistant - - ResearchDirector + - !type:CharacterDepartmentRequirement + departments: + - Epistemics items: - ClothingOuterCoatLab @@ -132,37 +128,37 @@ requirements: - !type:CharacterItemGroupRequirement group: LoadoutOuterScience - - !type:CharacterJobRequirement - jobs: - - Scientist + - !type:CharacterDepartmentRequirement + departments: + - Epistemics items: - ClothingOuterCoatRobo - type: loadout id: LoadoutScienceOuterWinterSci category: JobsScience - cost: 1 + cost: 0 exclusive: true requirements: - !type:CharacterItemGroupRequirement group: LoadoutOuterScience - - !type:CharacterJobRequirement - jobs: - - Scientist + - !type:CharacterDepartmentRequirement + departments: + - Epistemics items: - ClothingOuterWinterSci - type: loadout id: LoadoutScienceOuterLabcoatSeniorResearcher category: JobsScience - cost: 1 + cost: 0 exclusive: true requirements: - !type:CharacterItemGroupRequirement group: LoadoutOuterScience - - !type:CharacterJobRequirement - jobs: - - Scientist + - !type:CharacterDepartmentRequirement + departments: + - Epistemics - !type:CharacterDepartmentTimeRequirement department: Epistemics min: 216000 # 60 hours @@ -177,11 +173,9 @@ requirements: - !type:CharacterItemGroupRequirement group: LoadoutOuterScience - - !type:CharacterJobRequirement - jobs: - - Scientist - - ResearchAssistant - - ResearchDirector + - !type:CharacterDepartmentRequirement + departments: + - Epistemics items: - ClothingOuterExplorerCoat @@ -265,10 +259,9 @@ requirements: - !type:CharacterItemGroupRequirement group: LoadoutGlovesScience - - !type:CharacterJobRequirement - jobs: - - Scientist - - ResearchDirector + - !type:CharacterDepartmentRequirement + departments: + - Epistemics items: - ClothingHandsGlovesColorPurple @@ -280,10 +273,9 @@ requirements: - !type:CharacterItemGroupRequirement group: LoadoutGlovesScience - - !type:CharacterJobRequirement - jobs: - - Scientist - - ResearchDirector + - !type:CharacterDepartmentRequirement + departments: + - Epistemics items: - ClothingHandsGlovesLatex @@ -295,10 +287,9 @@ requirements: - !type:CharacterItemGroupRequirement group: LoadoutGlovesScience - - !type:CharacterJobRequirement - jobs: - - Scientist - - ResearchDirector + - !type:CharacterDepartmentRequirement + departments: + - Epistemics items: - ClothingHandsGlovesRobohands @@ -312,10 +303,9 @@ requirements: - !type:CharacterItemGroupRequirement group: LoadoutNeckScience - - !type:CharacterJobRequirement - jobs: - - Scientist - - ResearchDirector + - !type:CharacterDepartmentRequirement + departments: + - Epistemics items: - ClothingNeckTieSci @@ -327,10 +317,9 @@ requirements: - !type:CharacterItemGroupRequirement group: LoadoutNeckScience - - !type:CharacterJobRequirement - jobs: - - Scientist - - ResearchDirector + - !type:CharacterDepartmentRequirement + departments: + - Epistemics items: - ClothingNeckScarfStripedPurple @@ -356,9 +345,9 @@ requirements: - !type:CharacterItemGroupRequirement group: LoadoutNeckScience - - !type:CharacterJobRequirement - jobs: - - Chaplain + - !type:CharacterDepartmentRequirement + departments: + - Epistemics items: - ClothingNeckScarfStripedBlack @@ -388,11 +377,9 @@ requirements: - !type:CharacterItemGroupRequirement group: LoadoutHeadScience - - !type:CharacterJobRequirement - jobs: - - Scientist - - ResearchAssistant - - ResearchDirector + - !type:CharacterDepartmentRequirement + departments: + - Epistemics items: - ClothingHeadHatBeretRND @@ -404,9 +391,9 @@ requirements: - !type:CharacterItemGroupRequirement group: LoadoutHeadScience - - !type:CharacterJobRequirement - jobs: - - Chaplain + - !type:CharacterDepartmentRequirement + departments: + - Epistemics items: - ClothingHeadHatFez @@ -476,11 +463,9 @@ requirements: - !type:CharacterItemGroupRequirement group: LoadoutEyesScience - - !type:CharacterJobRequirement - jobs: - - Scientist - - ResearchAssistant - - ResearchDirector + - !type:CharacterDepartmentRequirement + departments: + - Epistemics items: - ClothingEyesHudDiagnostic @@ -492,11 +477,9 @@ requirements: - !type:CharacterItemGroupRequirement group: LoadoutEyesScience - - !type:CharacterJobRequirement - jobs: - - Scientist - - ResearchAssistant - - ResearchDirector + - !type:CharacterDepartmentRequirement + departments: + - Epistemics items: - ClothingEyesEyepatchHudDiag @@ -510,11 +493,9 @@ requirements: - !type:CharacterItemGroupRequirement group: LoadoutShoesScience - - !type:CharacterJobRequirement - jobs: - - Scientist - - ResearchAssistant - - ResearchDirector + - !type:CharacterDepartmentRequirement + departments: + - Epistemics items: - ClothingShoesBootsWinterSci @@ -529,11 +510,9 @@ requirements: - !type:CharacterItemGroupRequirement group: LoadoutOuterScience - - !type:CharacterJobRequirement - jobs: - - Scientist - - ResearchAssistant - - ResearchDirector + - !type:CharacterDepartmentRequirement + departments: + - Epistemics - type: loadout id: LoadoutHeadHoodTechPriest @@ -545,8 +524,190 @@ 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: - - Scientist - - ResearchAssistant - - ResearchDirector + - 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/security.yml b/Resources/Prototypes/Loadouts/Jobs/security.yml index 41c2124ab0b..f2587b4d14d 100644 --- a/Resources/Prototypes/Loadouts/Jobs/security.yml +++ b/Resources/Prototypes/Loadouts/Jobs/security.yml @@ -1,4 +1,4 @@ -## Uniforms +# Uniforms - type: loadout id: LoadoutSecurityUniformJumpsuitBlue category: JobsSecurity @@ -235,11 +235,12 @@ items: - ClothingMaskGasSwat -## Shoes +# Shoes - type: loadout id: LoadoutSecurityShoesJackboots category: JobsSecurity cost: 0 + exclusive: true requirements: - !type:CharacterItemGroupRequirement group: LoadoutShoesSecurity @@ -253,6 +254,7 @@ id: LoadoutClothingShoesBootsCombat category: JobsSecurity cost: 0 + exclusive: true requirements: - !type:CharacterItemGroupRequirement group: LoadoutShoesSecurity @@ -260,13 +262,13 @@ departments: - Security items: - - ClothingShoesBootsCombat + - ClothingShoesBootsCombatFilled # Eyes - type: loadout id: LoadoutSecurityEyesHudSecurity category: JobsSecurity - cost: 1 + cost: 0 exclusive: true requirements: - !type:CharacterItemGroupRequirement @@ -294,7 +296,7 @@ - type: loadout id: LoadoutSecurityEyesEyepatchHudSecurity category: JobsSecurity - cost: 1 + cost: 0 exclusive: true requirements: - !type:CharacterItemGroupRequirement @@ -308,7 +310,7 @@ - type: loadout id: LoadoutSecurityEyesHudSecurityPrescription category: JobsSecurity - cost: 1 + cost: 0 exclusive: true requirements: - !type:CharacterItemGroupRequirement @@ -337,7 +339,47 @@ - ClothingEyesGlassesSecurity #Backpack -#Will need to add a backpack category later on, that will be part of an starting inventory loadout refactor. +- type: loadout + id: LoadoutClothingBackSecurity + category: JobsSecurity + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutBackSecurity + - !type:CharacterDepartmentRequirement + departments: + - Security + items: + - ClothingBackpackSecurity + +- type: loadout + id: LoadoutClothingBackSecuritySatchel + category: JobsSecurity + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutBackSecurity + - !type:CharacterDepartmentRequirement + departments: + - Security + items: + - ClothingBackpackSatchelSecurity + +- type: loadout + id: LoadoutClothingBackSecurityDuffel + category: JobsSecurity + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutBackSecurity + - !type:CharacterDepartmentRequirement + departments: + - Security + items: + - ClothingBackpackDuffelSecurity # Head - type: loadout @@ -437,7 +479,7 @@ items: - ClothingHeadHelmetInsulated -## Belt +# Belt - type: loadout id: LoadoutSecurityBeltWebbing category: JobsSecurity @@ -478,7 +520,21 @@ departments: - Security items: - - ClothingBeltSecurity + - ClothingBeltSecurityFilled + +- type: loadout + id: LoadoutClothingBeltHolster + category: JobsSecurity + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutBeltSecurity + - !type:CharacterDepartmentRequirement + departments: + - Security + items: + - ClothingBeltHolster #Gloves @@ -526,6 +582,34 @@ items: - ClothingOuterArmorDuraVest +- type: loadout + id: LoadoutClothingOuterArmorBasic + category: JobsSecurity + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutOuterSecurity + - !type:CharacterDepartmentRequirement + departments: + - Security + items: + - ClothingOuterArmorBasic + +- type: loadout + id: LoadoutClothingOuterArmorSlim + category: JobsSecurity + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutOuterSecurity + - !type:CharacterDepartmentRequirement + departments: + - Security + items: + - ClothingOuterArmorBasicSlim + - type: loadout id: LoadoutClothingOuterCoatDetective category: JobsSecurity @@ -585,7 +669,7 @@ - type: loadout id: LoadoutClothingOuterWinterHoS category: JobsSecurity - cost: 1 + cost: 0 exclusive: true requirements: - !type:CharacterItemGroupRequirement @@ -639,11 +723,13 @@ items: - BedsheetBrigmedic -# 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: LoadoutSecurityCombatKnife category: JobsSecurity - cost: 1 + cost: 0 requirements: - !type:CharacterItemGroupRequirement group: LoadoutEquipmentSecurity @@ -656,7 +742,7 @@ - type: loadout id: LoadoutSecurityFlash category: JobsSecurity - cost: 1 + cost: 0 requirements: - !type:CharacterDepartmentRequirement departments: @@ -665,57 +751,579 @@ - Flash - type: loadout - id: LoadoutSecurityDisabler + id: LoadoutMagazinePistol category: JobsSecurity - cost: 1 + cost: 0 requirements: + - !type:CharacterDepartmentTimeRequirement + department: Security + min: 3600 # 1 hours + - !type:CharacterItemGroupRequirement + group: LoadoutEquipmentSecurity - !type:CharacterDepartmentRequirement departments: - Security items: - - WeaponDisabler + - MagazinePistol + +- type: loadout + id: LoadoutMagazinePistolSpare + category: JobsSecurity + cost: 2 + requirements: + - !type:CharacterDepartmentTimeRequirement + department: Security + min: 3600 # 1 hours + - !type:CharacterItemGroupRequirement + group: LoadoutEquipmentSecurity + - !type:CharacterDepartmentRequirement + departments: + - Security + items: + - MagazinePistol - type: loadout id: LoadoutMagazinePistolRubber category: JobsSecurity - cost: 1 + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutEquipmentSecurity + - !type:CharacterDepartmentRequirement + departments: + - Security + items: + - MagazinePistolRubber + +- type: loadout + id: LoadoutMagazinePistolRubberSpare + category: JobsSecurity + cost: 2 requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutEquipmentSecurity - !type:CharacterDepartmentRequirement departments: - Security items: - MagazinePistolRubber +- type: loadout + id: LoadoutSpeedLoaderMagnum + category: JobsSecurity + cost: 0 + exclusive: true + requirements: + - !type:CharacterDepartmentTimeRequirement + department: Security + min: 3600 # 1 hours + - !type:CharacterItemGroupRequirement + group: LoadoutEquipmentSecurity + - !type:CharacterDepartmentRequirement + departments: + - Security + items: + - SpeedLoaderMagnum + +- type: loadout + id: LoadoutSpeedLoaderMagnumSpare + category: JobsSecurity + cost: 2 + exclusive: true + requirements: + - !type:CharacterDepartmentTimeRequirement + department: Security + min: 3600 # 1 hours + - !type:CharacterItemGroupRequirement + group: LoadoutEquipmentSecurity + - !type:CharacterDepartmentRequirement + departments: + - Security + items: + - SpeedLoaderMagnum + - type: loadout id: LoadoutSpeedLoaderMagnumRubber category: JobsSecurity - cost: 1 + cost: 0 exclusive: true requirements: - - !type:CharacterJobRequirement - jobs: - - Detective + - !type:CharacterItemGroupRequirement + group: LoadoutEquipmentSecurity + - !type:CharacterDepartmentRequirement + departments: + - Security + items: + - SpeedLoaderMagnumRubber + +- type: loadout + id: LoadoutSpeedLoaderMagnumRubberSpare + category: JobsSecurity + cost: 2 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutEquipmentSecurity + - !type:CharacterDepartmentRequirement + departments: + - Security items: - SpeedLoaderMagnumRubber -# TODO: Make this replace the secoff handgun and make it cheaper -# # Species -# - type: loadout -# id: LoadoutSecurityEquipmentTruncheon -# category: JobsSecurity -# cost: 8 -# requirements: -# - !type:CharacterJobRequirement -# jobs: -# - SecurityOfficer -# - Warden -# - HeadOfSecurity -# - Brigmedic -# - !type:CharacterPlaytimeRequirement -# tracker: JobSecurityOfficer -# min: 36000 # 10 hours -# - !type:CharacterSpeciesRequirement -# species: -# - Oni -# items: -# - Truncheon +- type: loadout + id: LoadoutMagazineMagnum + category: JobsSecurity + cost: 2 + exclusive: true + requirements: + - !type:CharacterDepartmentTimeRequirement + department: Security + min: 3600 # 1 hours + - !type:CharacterItemGroupRequirement + group: LoadoutEquipmentSecurity + - !type:CharacterDepartmentRequirement + departments: + - Security + items: + - MagazineMagnum + +- type: loadout + id: LoadoutMagazineMagnumRubber + category: JobsSecurity + cost: 2 + exclusive: true + requirements: + - !type:CharacterDepartmentTimeRequirement + department: Security + min: 3600 # 1 hours + - !type:CharacterItemGroupRequirement + group: LoadoutEquipmentSecurity + - !type:CharacterDepartmentRequirement + departments: + - Security + items: + - MagazineMagnumRubber + +- type: loadout + id: LoadoutMagazineMagnumSpare + category: JobsSecurity + cost: 2 + exclusive: true + requirements: + - !type:CharacterDepartmentTimeRequirement + department: Security + min: 3600 # 1 hours + - !type:CharacterItemGroupRequirement + group: LoadoutEquipmentSecurity + - !type:CharacterDepartmentRequirement + departments: + - Security + items: + - MagazineMagnum + +- type: loadout + id: LoadoutMagazineMagnumRubberSpare + category: JobsSecurity + cost: 2 + exclusive: true + requirements: + - !type:CharacterDepartmentTimeRequirement + department: Security + min: 3600 # 1 hours + - !type:CharacterItemGroupRequirement + group: LoadoutEquipmentSecurity + - !type:CharacterDepartmentRequirement + departments: + - Security + items: + - 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: LoadoutSecurityDisabler + category: JobsSecurity + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutWeaponSecurity + - !type:CharacterDepartmentRequirement + departments: + - Security + items: + - WeaponDisabler + +- type: loadout + id: LoadoutSecurityMk58 + category: JobsSecurity + cost: 0 + requirements: + - !type:CharacterDepartmentTimeRequirement + department: Security + min: 3600 # 1 hours + - !type:CharacterItemGroupRequirement + group: LoadoutWeaponSecurity + - !type:CharacterDepartmentRequirement + departments: + - Security + items: + - WeaponPistolMk58Security + +- type: loadout + id: LoadoutSecurityMk58NonLethal + category: JobsSecurity + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutWeaponSecurity + - !type:CharacterDepartmentRequirement + departments: + - Security + items: + - WeaponPistolMk58SecurityNonlethal + +- type: loadout + id: LoadoutSecurityRevolver + category: JobsSecurity + cost: 0 + requirements: + - !type:CharacterDepartmentTimeRequirement + department: Security + min: 3600 # 1 hours + - !type:CharacterItemGroupRequirement + group: LoadoutWeaponSecurity + - !type:CharacterDepartmentRequirement + departments: + - Security + items: + - WeaponRevolverInspectorSecurity + +- type: loadout + id: LoadoutSecurityRevolverNonLethal + category: JobsSecurity + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutWeaponSecurity + - !type:CharacterDepartmentRequirement + departments: + - Security + items: + - WeaponRevolverInspectorNonLethalSecurity + +- type: loadout + id: LoadoutSecurityRevolverDeckard + category: JobsSecurity + cost: 1 + requirements: + - !type:CharacterDepartmentTimeRequirement + department: Security + min: 3600 # 1 hours + - !type:CharacterItemGroupRequirement + group: LoadoutWeaponSecurity + - !type:CharacterDepartmentRequirement + departments: + - Security + items: + - WeaponRevolverDeckardSecurity + +- type: loadout + id: LoadoutSecurityRevolverDeckardNonLethal + category: JobsSecurity + cost: 1 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutWeaponSecurity + - !type:CharacterDepartmentRequirement + departments: + - Security + items: + - WeaponRevolverDeckardNonLethalSecurity + +- type: loadout + id: LoadoutSecurityPistolN1984 + category: JobsSecurity + cost: 2 + requirements: + - !type:CharacterDepartmentTimeRequirement + department: Security + min: 3600 # 1 hours + - !type:CharacterItemGroupRequirement + group: LoadoutWeaponSecurity + - !type:CharacterDepartmentRequirement + departments: + - Security + items: + - WeaponPistolN1984Security + +- type: loadout + id: LoadoutSecurityPistolN1984NonLethal + category: JobsSecurity + cost: 2 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutWeaponSecurity + - !type:CharacterDepartmentRequirement + departments: + - Security + items: + - WeaponPistolN1984SecurityNonLethal + +- type: loadout + id: LoadoutSecurityPistolViper + category: JobsSecurity + cost: 2 + requirements: + - !type:CharacterDepartmentTimeRequirement + department: Security + min: 3600 # 1 hours + - !type:CharacterItemGroupRequirement + group: LoadoutWeaponSecurity + - !type:CharacterDepartmentRequirement + departments: + - Security + items: + - WeaponPistolViperSecurity + +- type: loadout + id: LoadoutSecurityPistolViperNonLethal + category: JobsSecurity + cost: 2 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutWeaponSecurity + - !type:CharacterDepartmentRequirement + departments: + - Security + items: + - WeaponPistolViperSecurityNonLethal + +- type: loadout + id: LoadoutSecurityPistolViperWood + category: JobsSecurity + cost: 2 + requirements: + - !type:CharacterDepartmentTimeRequirement + department: Security + min: 108000 # 30 hours + - !type:CharacterItemGroupRequirement + group: LoadoutWeaponSecurity + - !type:CharacterDepartmentRequirement + departments: + - Security + items: + - WeaponPistolViperWoodSecurity + +- type: loadout + id: LoadoutSecurityEquipmentTruncheon + category: JobsSecurity + cost: 3 + requirements: + - !type:CharacterDepartmentTimeRequirement + department: Security + min: 3600 # 1 hours + - !type:CharacterItemGroupRequirement + group: LoadoutWeaponSecurity + - !type:CharacterDepartmentRequirement + departments: + - Security + - !type:CharacterSpeciesRequirement + species: + - Oni + items: + - Truncheon + +- type: loadout + id: LoadoutSecurityPistolSvalin + category: JobsSecurity + cost: 1 + requirements: + - !type:CharacterDepartmentTimeRequirement + department: Security + min: 3600 # 1 hours + - !type:CharacterItemGroupRequirement + group: LoadoutWeaponSecurity + - !type:CharacterDepartmentRequirement + departments: + - Security + items: + - WeaponLaserSvalinn + +- type: loadout + id: LoadoutSecurityEnergyGunMini + category: JobsSecurity + cost: 2 + requirements: + - !type:CharacterDepartmentTimeRequirement + department: Security + min: 3600 # 1 hours + - !type:CharacterItemGroupRequirement + group: LoadoutWeaponSecurity + - !type:CharacterDepartmentRequirement + departments: + - Security + items: + - WeaponEnergyGunMiniSecurity + +- type: loadout + id: LoadoutSecurityEnergyGunPistol + category: JobsSecurity + cost: 2 + requirements: + - !type:CharacterDepartmentTimeRequirement + department: Security + min: 3600 # 1 hours + - !type:CharacterItemGroupRequirement + group: LoadoutWeaponSecurity + - !type:CharacterDepartmentRequirement + departments: + - Security + items: + - WeaponEnergyGunPistolSecurity + +- type: loadout + id: LoadoutSecurityPistolPollock + category: JobsSecurity + cost: 1 + requirements: + - !type:CharacterDepartmentTimeRequirement + department: Security + min: 3600 # 1 hours + - !type:CharacterItemGroupRequirement + group: LoadoutWeaponSecurity + - !type:CharacterDepartmentRequirement + departments: + - Security + items: + - WeaponPistolPollockSecurity + +- type: loadout + id: LoadoutSecurityPistolPollockNonlethal + category: JobsSecurity + cost: 1 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutWeaponSecurity + - !type:CharacterDepartmentRequirement + departments: + - Security + items: + - WeaponPistolPollockNonlethalSecurity + +- type: loadout + id: LoadoutSecurityRevolverSnub + category: JobsSecurity + cost: 2 + requirements: + - !type:CharacterDepartmentTimeRequirement + department: Security + min: 3600 # 1 hours + - !type:CharacterItemGroupRequirement + group: LoadoutWeaponSecurity + - !type:CharacterDepartmentRequirement + departments: + - Security + items: + - WeaponRevolverSnubSecurity + +- type: loadout + id: LoadoutSecurityRevolverSnubNonlethal + category: JobsSecurity + cost: 2 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutWeaponSecurity + - !type:CharacterDepartmentRequirement + departments: + - Security + items: + - WeaponRevolverSnubNonlethalSecurity + +- type: loadout + id: LoadoutSecurityRevolverK38Master + category: JobsSecurity + cost: 1 + requirements: + - !type:CharacterDepartmentTimeRequirement + department: Security + min: 3600 # 1 hours + - !type:CharacterItemGroupRequirement + group: LoadoutWeaponSecurity + - !type:CharacterDepartmentRequirement + departments: + - Security + items: + - WeaponRevolverK38MasterSecurity + +- type: loadout + id: LoadoutSecurityRevolverK38MasterNonlethal + category: JobsSecurity + cost: 1 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutWeaponSecurity + - !type:CharacterDepartmentRequirement + departments: + - Security + items: + - WeaponRevolverK38MasterNonlethalSecurity + +- type: loadout + id: LoadoutSecurityRevolverFitz + category: JobsSecurity + cost: 1 + requirements: + - !type:CharacterDepartmentTimeRequirement + department: Security + min: 3600 # 1 hours + - !type:CharacterItemGroupRequirement + group: LoadoutWeaponSecurity + - !type:CharacterDepartmentRequirement + departments: + - Security + items: + - WeaponRevolverFitzSecurity + +- type: loadout + id: LoadoutSecurityRevolverFitzNonlethal + category: JobsSecurity + cost: 1 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutWeaponSecurity + - !type:CharacterDepartmentRequirement + departments: + - Security + items: + - WeaponRevolverFitzNonlethalSecurity + +- type: loadout + id: LoadoutSecurityRevolverPython + category: JobsSecurity + cost: 3 + requirements: + - !type:CharacterDepartmentTimeRequirement + department: Security + min: 3600 # 1 hours + - !type:CharacterItemGroupRequirement + group: LoadoutWeaponSecurity + - !type:CharacterDepartmentRequirement + departments: + - Security + items: + - WeaponRevolverPythonSecurity + +- type: loadout + id: LoadoutSecurityRevolverPythonNonlethal + category: JobsSecurity + cost: 3 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutWeaponSecurity + - !type:CharacterDepartmentRequirement + departments: + - Security + items: + - WeaponRevolverPythonNonlethalSecurity diff --git a/Resources/Prototypes/Loadouts/Jobs/service.yml b/Resources/Prototypes/Loadouts/Jobs/service.yml index b5b7971e7d2..c0f04ef151a 100644 --- a/Resources/Prototypes/Loadouts/Jobs/service.yml +++ b/Resources/Prototypes/Loadouts/Jobs/service.yml @@ -1,4 +1,4 @@ -## Clown +# Clown - type: loadout id: LoadoutServiceClownOutfitJester category: JobsServiceUncategorized @@ -130,6 +130,9 @@ - HeavyweightDrunk - !type:CharacterLogicAndRequirement requirements: + - !type:CharacterSpeciesRequirement + species: + - Harpy - !type:CharacterHeightRequirement min: 170 - !type:CharacterWeightRequirement @@ -277,7 +280,7 @@ - type: loadout id: LoadoutServiceBartenderBoxLightRifleRubber category: JobsServiceBartender - cost: 1 + cost: 0 exclusive: true requirements: - !type:CharacterItemGroupRequirement @@ -305,7 +308,7 @@ - type: loadout id: LoadoutServiceBartenderMosinRubber category: JobsServiceBartender - cost: 3 + cost: 0 exclusive: true requirements: - !type:CharacterItemGroupRequirement @@ -316,10 +319,136 @@ 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: JobsServiceUncategorized + category: JobsServiceBotanist cost: 0 exclusive: true requirements: @@ -331,7 +460,49 @@ items: - ClothingUniformOveralls -## Lawyer +- 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 @@ -458,7 +629,7 @@ items: - ClothingUniformJumpsuitJournalist -## Reporter +# Reporter - type: loadout id: LoadoutServiceReporterUniformDetectivesuit category: JobsServiceUncategorized @@ -487,172 +658,172 @@ items: - ClothingUniformJumpskirtDetective -## Musician -- type: loadout - id: LoadoutItemSynthesizerInstrumentMusician - category: JobsServiceUncategorized - cost: 2 - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments - - !type:CharacterJobRequirement - jobs: - - Musician - items: - - SynthesizerInstrument - +# Chef - type: loadout - id: LoadoutItemMicrophoneInstrumentMusician - category: JobsServiceUncategorized + id: LoadoutServiceJumpsuitChefNt + category: JobsServiceChef cost: 0 + exclusive: true requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutChefUniforms - !type:CharacterJobRequirement jobs: - - Musician + - Chef items: - - MicrophoneInstrument + - ClothingUniformJumpsuitChefNt - type: loadout - id: LoadoutItemKalimbaInstrumentMusician - category: Items + id: LoadoutServiceJumpsuitChefIdris + category: JobsServiceChef cost: 0 + exclusive: true requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutChefUniforms - !type:CharacterJobRequirement jobs: - - Musician + - Chef items: - - KalimbaInstrument + - ClothingUniformJumpsuitChefIdris - type: loadout - id: LoadoutItemTrumpetInstrumentMusician - category: Items - cost: 2 + id: LoadoutServiceJumpsuitChefOrion + category: JobsServiceChef + cost: 0 + exclusive: true requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutChefUniforms - !type:CharacterJobRequirement jobs: - - Musician + - Chef items: - - TrumpetInstrument + - ClothingUniformJumpsuitChefOrion - type: loadout - id: LoadoutItemElectricGuitarInstrumentMusician - category: Items - cost: 2 + id: LoadoutServiceHeadChefNt + category: JobsServiceChef + cost: 0 + exclusive: true requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutChefHead - !type:CharacterJobRequirement jobs: - - Musician + - Chef items: - - ElectricGuitarInstrument + - ClothingHeadHatChefNt - type: loadout - id: LoadoutItemBassGuitarInstrumentMusician - category: Items - cost: 2 + id: LoadoutServiceHeadChefIdris + category: JobsServiceChef + cost: 0 + exclusive: true requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutChefHead - !type:CharacterJobRequirement jobs: - - Musician + - Chef items: - - BassGuitarInstrument + - ClothingHeadHatChefIdris - type: loadout - id: LoadoutItemRockGuitarInstrumentMusician - category: Items - cost: 2 + id: LoadoutServiceHeadChefOrion + category: JobsServiceChef + cost: 0 + exclusive: true requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutChefHead - !type:CharacterJobRequirement jobs: - - Musician + - Chef items: - - RockGuitarInstrument + - ClothingHeadHatChefOrion - type: loadout - id: LoadoutItemAcousticGuitarInstrumentMusician - category: Items - cost: 2 + id: LoadoutServiceOuterChefNt + category: JobsServiceChef + cost: 0 + exclusive: true requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutChefOuter - !type:CharacterJobRequirement jobs: - - Musician + - Chef items: - - AcousticGuitarInstrument + - ClothingOuterJacketChefNt - type: loadout - id: LoadoutItemViolinInstrumentMusician - category: Items - cost: 2 + id: LoadoutServiceOuterChefIdris + category: JobsServiceChef + cost: 0 + exclusive: true requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutChefOuter - !type:CharacterJobRequirement jobs: - - Musician + - Chef items: - - ViolinInstrument + - ClothingOuterJacketChefIdris - type: loadout - id: LoadoutItemHarmonicaInstrumentMusician - category: Items + id: LoadoutServiceOuterChefOrion + category: JobsServiceChef cost: 0 + exclusive: true requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutChefOuter - !type:CharacterJobRequirement jobs: - - Musician + - Chef items: - - HarmonicaInstrument + - ClothingOuterJacketChefOrion +# Janitor - type: loadout - id: LoadoutItemAccordionInstrumentMusician - category: Items + id: LoadoutServiceJumpsuitJanitorNt + category: JobsServiceJanitor cost: 0 + exclusive: true requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutJanitorUniforms - !type:CharacterJobRequirement jobs: - - Musician + - Janitor items: - - AccordionInstrument + - ClothingUniformJumpsuitJanitorNt - type: loadout - id: LoadoutItemFluteInstrumentMusician - category: Items + id: LoadoutServiceJumpsuitJanitorIdris + category: JobsServiceJanitor cost: 0 + exclusive: true requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutJanitorUniforms - !type:CharacterJobRequirement jobs: - - Musician + - Janitor items: - - FluteInstrument + - ClothingUniformJumpsuitJanitorIdris - type: loadout - id: LoadoutItemOcarinaInstrumentMusician - category: Items + id: LoadoutServiceJumpsuitJanitorOrion + category: JobsServiceJanitor cost: 0 + exclusive: true requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutJanitorUniforms - !type:CharacterJobRequirement jobs: - - Musician + - Janitor items: - - OcarinaInstrument \ No newline at end of file + - ClothingUniformJumpsuitJanitorOrion diff --git a/Resources/Prototypes/Loadouts/backpacks.yml b/Resources/Prototypes/Loadouts/backpacks.yml new file mode 100644 index 00000000000..5fd812380c5 --- /dev/null +++ b/Resources/Prototypes/Loadouts/backpacks.yml @@ -0,0 +1,268 @@ +- 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 new file mode 100644 index 00000000000..89997326f1a --- /dev/null +++ b/Resources/Prototypes/Loadouts/duffelbags.yml @@ -0,0 +1,234 @@ +- 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/items.yml b/Resources/Prototypes/Loadouts/items.yml index dc17229cf32..d992c93fa09 100644 --- a/Resources/Prototypes/Loadouts/items.yml +++ b/Resources/Prototypes/Loadouts/items.yml @@ -309,7 +309,6 @@ - !type:CharacterItemGroupRequirement group: LoadoutAirTank -## Instruments - type: loadout id: LoadoutItemsExtendedEmergencyOxygenTank category: Items @@ -684,18 +683,6 @@ items: - PersonalAI -- type: loadout - id: LoadoutItemBackpackSatchelLeather - category: Items - cost: 1 - items: - - ClothingBackpackSatchelLeather - requirements: - - !type:CharacterJobRequirement - inverted: true - jobs: - - Prisoner - - type: loadout id: LoadoutItemWaistbag category: Items diff --git a/Resources/Prototypes/Loadouts/outerClothing.yml b/Resources/Prototypes/Loadouts/outerClothing.yml index a529dd7c3ff..8411b4c40f8 100644 --- a/Resources/Prototypes/Loadouts/outerClothing.yml +++ b/Resources/Prototypes/Loadouts/outerClothing.yml @@ -109,7 +109,7 @@ - !type:CharacterItemGroupRequirement group: LoadoutOuter -## MNK +# MNK - type: loadout id: LoadoutOuterCoatMNKWhiteHoodie category: Outer @@ -140,7 +140,7 @@ - !type:CharacterItemGroupRequirement group: LoadoutOuter -## Contractor Jackets +# Contractor Jackets - type: loadout id: LoadoutOuterCorporateJacket category: Outer diff --git a/Resources/Prototypes/Loadouts/satchels.yml b/Resources/Prototypes/Loadouts/satchels.yml new file mode 100644 index 00000000000..4f21dc7656f --- /dev/null +++ b/Resources/Prototypes/Loadouts/satchels.yml @@ -0,0 +1,247 @@ +- 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/Loadouts/species.yml b/Resources/Prototypes/Loadouts/species.yml index 03dc4e5abc7..e7455a00fbe 100644 --- a/Resources/Prototypes/Loadouts/species.yml +++ b/Resources/Prototypes/Loadouts/species.yml @@ -1,35 +1,41 @@ -# - type: loadout - # id: LoadoutSpeciesEmergencyNitrogenTank - # category: Species - # cost: 0 - # requirements: - # - !type:CharacterSpeciesRequirement - # species: SlimePerson - # - !type:CharacterSpeciesRequirement - # species: Vox - # items: - # - EmergencyNitrogenTankFilled +- type: loadout + id: LoadoutSpeciesEmergencyNitrogenTank + category: Species + cost: 0 + requirements: + - !type:CharacterSpeciesRequirement + species: + - SlimePerson + - Vox + - !type:CharacterItemGroupRequirement + group: LoadoutAirTank + items: + - EmergencyNitrogenTankFilled -# - type: loadout - # id: LoadoutSpeciesExtendedEmergencyNitrogenTank - # category: Species - # cost: 1 - # requirements: - # - !type:CharacterSpeciesRequirement - # species: SlimePerson - # - !type:CharacterSpeciesRequirement - # species: Vox - # items: - # - ExtendedEmergencyNitrogenTankFilled +- type: loadout + id: LoadoutSpeciesExtendedEmergencyNitrogenTank + category: Species + cost: 1 + requirements: + - !type:CharacterSpeciesRequirement + species: + - SlimePerson + - Vox + - !type:CharacterItemGroupRequirement + group: LoadoutAirTank + items: + - ExtendedEmergencyNitrogenTankFilled -# - type: loadout - # id: LoadoutSpeciesDoubleEmergencyNitrogenTank - # category: Species - # cost: 3 - # requirements: - # - !type:CharacterSpeciesRequirement - # species: SlimePerson - # - !type:CharacterSpeciesRequirement - # species: Vox - # items: - # - DoubleEmergencyNitrogenTankFilled +- type: loadout + id: LoadoutSpeciesDoubleEmergencyNitrogenTank + category: Species + cost: 2 + requirements: + - !type:CharacterSpeciesRequirement + species: + - SlimePerson + - Vox + - !type:CharacterItemGroupRequirement + group: LoadoutAirTank + items: + - DoubleEmergencyNitrogenTankFilled diff --git a/Resources/Prototypes/Loadouts/uniform.yml b/Resources/Prototypes/Loadouts/uniform.yml index 04ac9dd22e6..f0f29cf8b1d 100644 --- a/Resources/Prototypes/Loadouts/uniform.yml +++ b/Resources/Prototypes/Loadouts/uniform.yml @@ -1039,8 +1039,8 @@ inverted: true departments: - Security + - Command -## Kimono - type: loadout id: LoadoutClothingKimonoBlue category: Uniform @@ -1121,7 +1121,7 @@ - Security - Command -## Gakuran +# Gakuran - type: loadout id: LoadoutUniformSchoolGakuranBlack category: Uniform diff --git a/Resources/Prototypes/Magic/event_spells.yml b/Resources/Prototypes/Magic/event_spells.yml new file mode 100644 index 00000000000..e59e1b2db88 --- /dev/null +++ b/Resources/Prototypes/Magic/event_spells.yml @@ -0,0 +1,13 @@ +- type: entity + id: ActionSummonGhosts + name: Summon Ghosts + description: Makes all current ghosts permanently invisible + noSpawn: true + components: + - type: InstantAction + useDelay: 120 + itemIconStyle: BigAction + icon: + sprite: Mobs/Ghosts/ghost_human.rsi + state: icon + event: !type:ToggleGhostVisibilityToAllEvent diff --git a/Resources/Prototypes/Magic/knock_spell.yml b/Resources/Prototypes/Magic/knock_spell.yml index f00897d32c7..e2c3dcfd4c7 100644 --- a/Resources/Prototypes/Magic/knock_spell.yml +++ b/Resources/Prototypes/Magic/knock_spell.yml @@ -7,6 +7,8 @@ - type: InstantAction useDelay: 10 itemIconStyle: BigAction + sound: !type:SoundPathSpecifier + path: /Audio/Magic/knock.ogg icon: sprite: Objects/Magic/magicactions.rsi state: knock diff --git a/Resources/Prototypes/Magic/projectile_spells.yml b/Resources/Prototypes/Magic/projectile_spells.yml index 196472fe7b2..b8db7557bba 100644 --- a/Resources/Prototypes/Magic/projectile_spells.yml +++ b/Resources/Prototypes/Magic/projectile_spells.yml @@ -4,10 +4,12 @@ description: Fires an explosive fireball towards the clicked location. noSpawn: true components: + - type: Magic - type: WorldTargetAction useDelay: 15 itemIconStyle: BigAction checkCanAccess: false + raiseOnUser: true range: 60 sound: !type:SoundPathSpecifier path: /Audio/Magic/fireball.ogg @@ -16,25 +18,25 @@ state: fireball event: !type:ProjectileSpellEvent prototype: ProjectileFireball - posData: !type:TargetCasterPos speech: action-speech-spell-fireball - type: ActionUpgrade effectedLevels: 2: ActionFireballII + 3: ActionFireballIII - type: entity id: ActionFireballII parent: ActionFireball name: Fireball II - description: Fire three explosive fireball towards the clicked location. + description: Fires a fireball, but faster! noSpawn: true components: - type: WorldTargetAction - useDelay: 5 - charges: 3 + useDelay: 10 renewCharges: true itemIconStyle: BigAction checkCanAccess: false + raiseOnUser: true range: 60 sound: !type:SoundPathSpecifier path: /Audio/Magic/fireball.ogg @@ -43,5 +45,27 @@ state: fireball event: !type:ProjectileSpellEvent prototype: ProjectileFireball - posData: !type:TargetCasterPos speech: action-speech-spell-fireball + +- type: entity + id: ActionFireballIII + parent: ActionFireball + name: Fireball III + description: The fastest fireball in the west! + noSpawn: true + components: + - type: WorldTargetAction + useDelay: 8 + renewCharges: true + itemIconStyle: BigAction + checkCanAccess: false + raiseOnUser: true + range: 60 + sound: !type:SoundPathSpecifier + path: /Audio/Magic/fireball.ogg + icon: + sprite: Objects/Magic/magicactions.rsi + state: fireball + event: !type:ProjectileSpellEvent + prototype: ProjectileFireball + speech: action-speech-spell-fireball diff --git a/Resources/Prototypes/Magic/teleport_spells.yml b/Resources/Prototypes/Magic/teleport_spells.yml index 30c83891eee..cc89cf8ee0d 100644 --- a/Resources/Prototypes/Magic/teleport_spells.yml +++ b/Resources/Prototypes/Magic/teleport_spells.yml @@ -8,9 +8,11 @@ useDelay: 10 range: 16 # default examine-range. # ^ should probably add better validation that the clicked location is on the users screen somewhere, + sound: !type:SoundPathSpecifier + path: /Audio/Magic/blink.ogg itemIconStyle: BigAction checkCanAccess: false - repeat: true + repeat: false icon: sprite: Objects/Magic/magicactions.rsi state: blink diff --git a/Resources/Prototypes/Magic/utility_spells.yml b/Resources/Prototypes/Magic/utility_spells.yml new file mode 100644 index 00000000000..dccdda37898 --- /dev/null +++ b/Resources/Prototypes/Magic/utility_spells.yml @@ -0,0 +1,15 @@ +- type: entity + id: ActionChargeSpell + name: Charge + description: Adds a charge back to your wand + noSpawn: true + components: + - type: InstantAction + useDelay: 30 + itemIconStyle: BigAction + icon: + sprite: Objects/Weapons/Guns/Basic/wands.rsi + state: nothing + event: !type:ChargeSpellEvent + charge: 1 + speech: DI'RI CEL! diff --git a/Resources/Prototypes/Maps/asterisk.yml b/Resources/Prototypes/Maps/asterisk.yml new file mode 100644 index 00000000000..3ef57dd4903 --- /dev/null +++ b/Resources/Prototypes/Maps/asterisk.yml @@ -0,0 +1,69 @@ +- type: gameMap + id: Asterisk + mapName: 'Asterisk' + mapPath: /Maps/asterisk.yml + minPlayers: 0 + maxPlayers: 60 + stations: + Asterisk: + stationProto: StandardNanotrasenStation + components: + - type: StationRandomTransform + enableStationRotation: false + maxStationOffset: null + - type: StationEmergencyShuttle + emergencyShuttlePath: /Maps/Shuttles/DeltaV/NTES_Kaeri.yml + - type: StationNameSetup + mapNameTemplate: '{0} Asterisk Station {1}' + nameGenerator: + !type:NanotrasenNameGenerator + prefixCreator: 'DV' + - type: StationJobs + overflowJobs: + - Passenger + availableJobs: + #service + Captain: [ 1, 1 ] + HeadOfPersonnel: [ 1, 1 ] + Bartender: [ 1, 2 ] + Botanist: [ 2, 3 ] + Chef: [ 1, 2 ] + Clown: [ 1, 1 ] + Lawyer: [ 1, 1 ] + Reporter: [ 1, 1 ] + Musician: [ 1, 1 ] + Janitor: [ 1, 2 ] + Mime: [ 1, 1 ] + #engineering + ChiefEngineer: [ 1, 1 ] + AtmosphericTechnician: [ 1, 1 ] #back by popular demand + StationEngineer: [ 3, 3 ] + TechnicalAssistant: [ 2, 4 ] + #medical + ChiefMedicalOfficer: [ 1, 1 ] + Chemist: [ 1, 2 ] + Paramedic: [ 1, 2 ] + MedicalDoctor: [ 2, 3 ] + MedicalIntern: [ 2, 3 ] + #science + ResearchDirector: [ 1, 1 ] + Chaplain: [ 1, 1 ] + ForensicMantis: [ 1, 1 ] + Scientist: [ 2, 3 ] + ResearchAssistant: [ 2, 3 ] + Borg: [ 1, 2 ] + #security + HeadOfSecurity: [ 1, 1 ] + Warden: [ 1, 1 ] + Detective: [ 1, 1 ] + Brigmedic: [ 1, 1 ] + SecurityOfficer: [ 2, 3 ] + SecurityCadet: [ 1, 3 ] + Prisoner: [ 1, 2 ] # :^) + #supply + Quartermaster: [ 1, 1 ] + MailCarrier: [ 1, 2 ] + SalvageSpecialist: [ 2, 3 ] + CargoTechnician: [ 2, 4 ] + #civilian + Passenger: [ -1, -1 ] diff --git a/Resources/Prototypes/Maps/gaxstation.yml b/Resources/Prototypes/Maps/gaxstation.yml new file mode 100644 index 00000000000..85f43c6b4cb --- /dev/null +++ b/Resources/Prototypes/Maps/gaxstation.yml @@ -0,0 +1,72 @@ +- type: gameMap + id: Gax + mapName: 'NCS Gax' + mapPath: /Maps/gaxstation.yml + minPlayers: 10 + maxPlayers: 45 + fallback: true + stations: + Gaxstation: + stationProto: StandardNanotrasenStation + components: + - type: StationEmergencyShuttle + emergencyShuttlePath: /Maps/Shuttles/DeltaV/NTES_Delta.yml + - type: StationNameSetup + mapNameTemplate: '{0} NCS Gax {1}' + nameGenerator: + !type:NanotrasenNameGenerator + prefixCreator: 'YG' + - type: StationJobs + overflowJobs: + - Passenger + availableJobs: + #service + Captain: [ 1, 1 ] + HeadOfPersonnel: [ 1, 1 ] + Bartender: [ 1, 1 ] + Botanist: [3 , 3 ] + Chef: [ 2, 2 ] + Janitor: [ 2, 2 ] + ServiceWorker: [ 2, 2 ] + #Engineering + ChiefEngineer: [ 1, 1 ] + AtmosphericTechnician: [ 4, 4 ] + StationEngineer: [ 4, 4 ] + TechnicalAssistant: [ 2, 2 ] + #Medical + ChiefMedicalOfficer: [ 1, 1 ] + Chemist: [ 2, 2 ] + MedicalDoctor: [ 3, 3 ] + MedicalIntern: [ 3, 3 ] + Paramedic: [ 2, 2 ] + MedicalBorg: [ 1, 1 ] + #Epistemics + ResearchDirector: [ 1, 1 ] + Scientist: [ 4, 4 ] + ResearchAssistant: [ 2, 2 ] + Roboticist: [ 1, 2 ] + Borg: [ 2, 2 ] + Chaplain: [ 1, 1 ] + Librarian: [ 1, 1 ] + ForensicMantis: [ 1, 1 ] + #Security + HeadOfSecurity: [ 1, 1 ] + Warden: [ 1, 1 ] + SecurityOfficer: [ 4, 4 ] + SecurityCadet: [ 4, 4 ] + Detective: [ 1, 1 ] + Prisoner: [ 1, 2 ] + PrisonGuard: [ 1, 2 ] + Brigmedic: [ 1, 1 ] + Lawyer: [ 1, 1 ] + #Supply + Quartermaster: [ 1, 1 ] + SalvageSpecialist: [ 1, 3 ] + CargoTechnician: [ 2, 2 ] + MailCarrier: [ 1, 2 ] + #Civillian + Passenger: [ -1, -1 ] + Clown: [ 1, 1 ] + Mime: [ 1, 1 ] + Musician: [ 1, 1 ] + diff --git a/Resources/Prototypes/Maps/radstation.yml b/Resources/Prototypes/Maps/radstation.yml new file mode 100644 index 00000000000..737b4d4492b --- /dev/null +++ b/Resources/Prototypes/Maps/radstation.yml @@ -0,0 +1,75 @@ +- type: gameMap + id: Rad + mapName: 'RadStation' + mapPath: /Maps/radstation.yml + minPlayers: 35 + stations: + RadStation: + stationProto: StandardNanotrasenStation + components: + - type: StationEmergencyShuttle + emergencyShuttlePath: /Maps/Shuttles/emergency_neol.yml + - type: StationNameSetup + mapNameTemplate: '{0} RadStation {1}' + nameGenerator: + !type:NanotrasenNameGenerator + prefixCreator: '14' + - type: StationJobs + overflowJobs: + - Passenger + availableJobs: + #service + Captain: [ 1, 1 ] + HeadOfPersonnel: [ 1, 1 ] + Bartender: [ 1, 1 ] + Botanist: [ 3, 3 ] + Chef: [ 2, 2 ] + Janitor: [ 2, 2 ] + Librarian: [ 1, 1 ] + ServiceWorker: [ 1, 1 ] + #engineering + ChiefEngineer: [ 1, 1 ] + AtmosphericTechnician: [ 4, 4 ] + StationEngineer: [ 3, 3 ] + TechnicalAssistant: [ 2, 2 ] + #medical + ChiefMedicalOfficer: [ 1, 1 ] + Chemist: [ 2, 2 ] + MedicalBorg: [ 2, 2 ] + MedicalDoctor: [ 3, 3 ] + Paramedic: [ 1, 1 ] + MedicalIntern: [ 2, 2 ] + #science + ResearchDirector: [ 1, 1 ] + Roboticist: [ 1, 2 ] + Scientist: [ 5, 5 ] + ForensicMantis: [ 1, 1 ] + ResearchAssistant: [ 2, 2 ] + Borg: [ 1, 1 ] + Chaplain: [ 1, 1 ] + #security + HeadOfSecurity: [ 1, 1 ] + Brigmedic: [ 1, 1 ] + Warden: [ 1, 1 ] + SecurityOfficer: [ 5, 5 ] + Prisoner: [ 2, 3 ] + PrisonGuard: [ 2, 3 ] + Detective: [ 1, 1 ] + SecurityCadet: [ 2, 2 ] + #supply + Quartermaster: [ 1, 1 ] + MailCarrier: [ 1, 2 ] + SalvageSpecialist: [ 3, 3 ] + CargoTechnician: [ 5, 5 ] + #civilian + Passenger: [ -1, -1 ] + Clown: [ 1, 1 ] + Mime: [ 1, 1 ] + Musician: [ 1, 1 ] + Reporter: [ 2, 2 ] + Psychologist: [ 1, 1 ] + #justice + ChiefJustice: [ 1, 1 ] + Clerk: [ 1, 1 ] + Lawyer: [ 1, 1 ] + Prosecutor: [ 1, 1] diff --git a/Resources/Prototypes/Maps/saltern.yml b/Resources/Prototypes/Maps/saltern.yml index 36666eb1cc3..154a35a16dc 100644 --- a/Resources/Prototypes/Maps/saltern.yml +++ b/Resources/Prototypes/Maps/saltern.yml @@ -7,7 +7,7 @@ fallback: true stations: Saltern: - stationProto: StandardNanotrasenStation + stationProto: StandardNanotrasenStationNoATS components: - type: StationNameSetup mapNameTemplate: '{0} Saltern {1}' @@ -53,6 +53,7 @@ Detective: [ 1, 1 ] SecurityOfficer: [ 4, 6 ] SecurityCadet: [ 4, 6 ] + Brigmedic: [ 1, 1 ] Prisoner: [ 1, 2 ] #supply Quartermaster: [ 1, 1 ] diff --git a/Resources/Prototypes/Mood/drugs.yml b/Resources/Prototypes/Mood/drugs.yml index 470abc5e3d7..379dd960061 100644 --- a/Resources/Prototypes/Mood/drugs.yml +++ b/Resources/Prototypes/Mood/drugs.yml @@ -4,14 +4,14 @@ - type: moodEffect id: LotoTranscendence moodChange: 30 - timeout: 900 #15 minutes + timeout: 1020 #17 minutes moodletOnEnd: LotoEnthrallment category: "LotophagoiAddiction" - type: moodEffect id: LotoEnthrallment moodChange: -30 - timeout: 7200 #2 hours + timeout: 600 #10 minutes category: "LotophagoiAddiction" - type: moodCategory @@ -21,7 +21,7 @@ - type: moodEffect id: NicotineBenefit moodChange: 5 - timeout: 600 #10 minutes + timeout: 1020 #17 minutes moodletOnEnd: NicotineWithdrawal category: "NicotineAddiction" @@ -31,4 +31,15 @@ category: "NicotineAddiction" - type: moodCategory - id: NicotineAddiction \ No newline at end of file + id: NicotineAddiction + +# Non-Addictive Drugs +- type: moodEffect + id: EthanolBenefit + moodChange: 7 + timeout: 300 #5 minutes + +- type: moodEffect + id: SpaceDrugsBenefit + moodChange: 7 + timeout: 300 #5 minutes diff --git a/Resources/Prototypes/Mood/genericNeeds.yml b/Resources/Prototypes/Mood/genericNeeds.yml index d0b24b7d7fe..e0b8c25c082 100644 --- a/Resources/Prototypes/Mood/genericNeeds.yml +++ b/Resources/Prototypes/Mood/genericNeeds.yml @@ -1,7 +1,7 @@ # Hunger - type: moodEffect id: HungerOverfed - moodChange: -10 + moodChange: 10 category: "Hunger" - type: moodEffect @@ -22,7 +22,7 @@ # Thirst - type: moodEffect id: ThirstOverHydrated - moodChange: -3 + moodChange: 10 category: "Thirst" - type: moodEffect diff --git a/Resources/Prototypes/NPCs/Combat/melee.yml b/Resources/Prototypes/NPCs/Combat/melee.yml index db459af4a7b..b0746e56793 100644 --- a/Resources/Prototypes/NPCs/Combat/melee.yml +++ b/Resources/Prototypes/NPCs/Combat/melee.yml @@ -17,30 +17,28 @@ - !type:HTNCompoundTask task: PickupMeleeCompound - # Melee combat (unarmed or otherwise) - - tasks: - - !type:HTNPrimitiveTask - operator: !type:UtilityOperator - proto: NearbyMeleeTargets - - !type:HTNCompoundTask - task: MeleeAttackTargetCompound - -- type: htnCompound - id: MeleeDumbCombatCompound - branches: - # Pickup weapon if we don't have one. - preconditions: - - !type:ActiveHandComponentPrecondition - components: - # Just serializer things - - type: MeleeWeapon - damage: - types: - Blunt: 0 - invert: true + - !type:BuckledPrecondition + isBuckled: true tasks: - - !type:HTNCompoundTask - task: PickupMeleeCompound + - !type:HTNPrimitiveTask + operator: !type:UnbuckleOperator + shutdownState: TaskFinished + + - preconditions: + - !type:InContainerPrecondition + isInContainer: true + tasks: + - !type:HTNCompoundTask + task: EscapeCompound + + - preconditions: + - !type:PulledPrecondition + isPulled: true + tasks: + - !type:HTNPrimitiveTask + operator: !type:UnPullOperator + shutdownState: TaskFinished # Melee combat (unarmed or otherwise) - tasks: @@ -48,7 +46,7 @@ operator: !type:UtilityOperator proto: NearbyMeleeTargets - !type:HTNCompoundTask - task: MeleeDumbAttackTargetCompound + task: MeleeAttackTargetCompound - type: htnCompound id: RatServantCombatCompound @@ -125,37 +123,21 @@ id: MeleeService proto: NearbyMeleeTargets key: Target - + - type: htnCompound - id: MeleeDumbAttackTargetCompound - preconditions: - - !type:KeyExistsPrecondition - key: Target + id: EscapeCompound branches: - # Move to melee range and hit them - - tasks: - - !type:HTNPrimitiveTask - operator: !type:MoveToOperator - shutdownState: PlanFinished - pathfindInPlanning: true - removeKeyOnFinish: false - targetKey: TargetCoordinates - pathfindKey: TargetPathfind - rangeKey: MeleeRange - - !type:HTNPrimitiveTask - operator: !type:MeleeOperator - targetKey: Target - preconditions: - - !type:KeyExistsPrecondition - key: Target - - !type:TargetInRangePrecondition - targetKey: Target - rangeKey: MeleeRange - services: - - !type:UtilityService - id: MeleeService - proto: NearbyMeleeTargets - key: Target + - tasks: + - !type:HTNPrimitiveTask + operator: !type:ContainerOperator + targetKey: Target + shutdownState: TaskFinished + - !type:HTNPrimitiveTask + operator: !type:EscapeOperator + targetKey: Target + preconditions: + - !type:InContainerPrecondition + isInContainer: true - type: htnCompound id: MeleeAttackOrderedTargetCompound @@ -189,33 +171,3 @@ id: MeleeService proto: OrderedTargets key: Target - -- type: htnCompound - id: MeleeDumbAttackOrderedTargetCompound - preconditions: - - !type:KeyExistsPrecondition - key: Target - branches: - - tasks: - - !type:HTNPrimitiveTask - operator: !type:MoveToOperator - shutdownState: PlanFinished - pathfindInPlanning: true - removeKeyOnFinish: false - targetKey: TargetCoordinates - pathfindKey: TargetPathfind - rangeKey: MeleeRange - - !type:HTNPrimitiveTask - operator: !type:MeleeOperator - targetKey: Target - preconditions: - - !type:KeyExistsPrecondition - key: Target - - !type:TargetInRangePrecondition - targetKey: Target - rangeKey: MeleeRange - services: - - !type:UtilityService - id: MeleeService - proto: OrderedTargets - key: Target diff --git a/Resources/Prototypes/NPCs/debug.yml b/Resources/Prototypes/NPCs/debug.yml new file mode 100644 index 00000000000..c7929be1037 --- /dev/null +++ b/Resources/Prototypes/NPCs/debug.yml @@ -0,0 +1,90 @@ +- type: htnCompound + id: DebugCounterCompound + branches: + - tasks: + - !type:HTNPrimitiveTask + operator: !type:AddFloatOperator + targetKey: Count + amount: 1 + + - !type:HTNPrimitiveTask + operator: !type:SayKeyOperator + key: Count + + - !type:HTNPrimitiveTask + operator: !type:RandomOperator + targetKey: IdleTime + minKey: MinimumIdleTime + maxKey: MaximumIdleTime + + - !type:HTNPrimitiveTask + operator: !type:WaitOperator + key: IdleTime + preconditions: + - !type:KeyExistsPrecondition + key: IdleTime + +- type: htnCompound + id: DebugRandomCounterCompound + branches: + - tasks: + - !type:HTNPrimitiveTask + operator: !type:SetRandomFloatOperator + targetKey: Count + minAmount: 0 + maxAmount: 100 + + - !type:HTNPrimitiveTask + operator: !type:SayKeyOperator + key: Count + + - !type:HTNPrimitiveTask + operator: !type:RandomOperator + targetKey: IdleTime + minKey: MinimumIdleTime + maxKey: MaximumIdleTime + + - !type:HTNPrimitiveTask + operator: !type:WaitOperator + key: IdleTime + preconditions: + - !type:KeyExistsPrecondition + key: IdleTime + +- type: htnCompound + id: DebugRandomLessCompound + branches: + - tasks: + - !type:HTNPrimitiveTask + operator: !type:SetRandomFloatOperator + targetKey: Count + minAmount: 0 + maxAmount: 100 + + - !type:HTNPrimitiveTask + operator: !type:SayKeyOperator + key: Count + preconditions: + - !type:KeyFloatLessPrecondition + key: Count + value: 50 + + - !type:HTNPrimitiveTask + operator: !type:RandomOperator + targetKey: IdleTime + minKey: MinimumIdleTime + maxKey: MaximumIdleTime + + - !type:HTNPrimitiveTask + operator: !type:WaitOperator + key: IdleTime + preconditions: + - !type:KeyExistsPrecondition + key: IdleTime + + - tasks: + - !type:HTNPrimitiveTask + operator: !type:SpeakOperator + speech: "fuck!" + + \ No newline at end of file diff --git a/Resources/Prototypes/NPCs/psionic.yml b/Resources/Prototypes/NPCs/psionic.yml new file mode 100644 index 00000000000..0c3772bd912 --- /dev/null +++ b/Resources/Prototypes/NPCs/psionic.yml @@ -0,0 +1,25 @@ +- type: htnCompound + id: MeleePsionicFamiliarCompound + branches: + - tasks: + - !type:HTNCompoundTask + task: MeleeCombatCompound + - tasks: + - !type:HTNCompoundTask + task: FollowCompound + - tasks: + - !type:HTNCompoundTask + task: IdleCompound + +- type: htnCompound + id: RangedPsionicFamiliarCompound + branches: + - tasks: + - !type:HTNCompoundTask + task: InnateRangedCombatCompound + - tasks: + - !type:HTNCompoundTask + task: FollowCompound + - tasks: + - !type:HTNCompoundTask + task: IdleCompound diff --git a/Resources/Prototypes/NPCs/wisp.yml b/Resources/Prototypes/NPCs/wisp.yml new file mode 100644 index 00000000000..3793a47cb2d --- /dev/null +++ b/Resources/Prototypes/NPCs/wisp.yml @@ -0,0 +1,28 @@ +- type: htnCompound + id: GlimmerWispCompound + branches: + - tasks: + - !type:HTNCompoundTask + task: RangedCombatCompound + - tasks: + - !type:HTNCompoundTask + task: DrainPsionicCompound + - tasks: + - !type:HTNCompoundTask + task: IdleCompound + +- type: htnCompound + id: DrainPsionicCompound + branches: + - tasks: + - !type:HTNPrimitiveTask + operator: !type:PickDrainTargetOperator + targetKey: TargetCoordinates + drainKey: DrainTarget + rangeKey: IdleRange + - !type:HTNPrimitiveTask + operator: !type:MoveToOperator + pathfindInPlanning: false + - !type:HTNPrimitiveTask + operator: !type:DrainOperator + drainKey: DrainTarget diff --git a/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Vending/Inventories/maildrobe.yml b/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Vending/Inventories/maildrobe.yml index 579c57ced4e..27642558244 100644 --- a/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Vending/Inventories/maildrobe.yml +++ b/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Vending/Inventories/maildrobe.yml @@ -3,6 +3,8 @@ startingInventory: ClothingUniformMailCarrier: 2 ClothingUniformSkirtMailCarrier: 2 + WeaponMailLake: 1 # Frontier + BoxMailCapsulePrimed: 2 # Frontier ClothingHeadMailCarrier: 2 MailBag: 2 ClothingHeadsetCargo: 2 diff --git a/Resources/Prototypes/Nyanotrasen/Damage/groups.yml b/Resources/Prototypes/Nyanotrasen/Damage/groups.yml index d2f9906f451..31606605718 100644 --- a/Resources/Prototypes/Nyanotrasen/Damage/groups.yml +++ b/Resources/Prototypes/Nyanotrasen/Damage/groups.yml @@ -1,4 +1,5 @@ - type: damageGroup id: Immaterial + name: damage-group-immaterial damageTypes: - Holy diff --git a/Resources/Prototypes/Nyanotrasen/Damage/types.yml b/Resources/Prototypes/Nyanotrasen/Damage/types.yml index f9aba7e2ac8..22c045e9a62 100644 --- a/Resources/Prototypes/Nyanotrasen/Damage/types.yml +++ b/Resources/Prototypes/Nyanotrasen/Damage/types.yml @@ -1,5 +1,6 @@ # Only affects magical beings. - type: damageType id: Holy + name: damage-type-holy armorCoefficientPrice: 25 armorFlatPrice: 150 diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Clothing/Head/hardsuit-helmets.yml b/Resources/Prototypes/Nyanotrasen/Entities/Clothing/Head/hardsuit-helmets.yml index 4cba6352bee..3896cd1ef1b 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Clothing/Head/hardsuit-helmets.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Clothing/Head/hardsuit-helmets.yml @@ -5,15 +5,12 @@ name: mystagogue's hardsuit helmet description: Lightweight hardsuit helmet that has a galaxy-first psionic passthrough system. components: - #- type: Psionic + - type: Psionic - type: TinfoilHat passthrough: true destroyOnFry: false - type: ClothingGrantPsionicPower power: MetapsionicPower - # - type: GuideHelp - # guides: - # - Psionics - type: entity parent: ClothingHeadHelmetHardsuitSyndie diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Clothing/Head/hats.yml b/Resources/Prototypes/Nyanotrasen/Entities/Clothing/Head/hats.yml index 5de353f7675..2f23944549f 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Clothing/Head/hats.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Clothing/Head/hats.yml @@ -74,9 +74,6 @@ - type: Construction graph: TinfoilHat node: tinfoilhat - # - type: GuideHelp - # guides: - # - Psionics - type: entity parent: ClothingHeadBase diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Clothing/OuterClothing/hardsuits.yml b/Resources/Prototypes/Nyanotrasen/Entities/Clothing/OuterClothing/hardsuits.yml index 6498eda075e..4e988c27406 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Clothing/OuterClothing/hardsuits.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Clothing/OuterClothing/hardsuits.yml @@ -19,8 +19,6 @@ sprite: Nyanotrasen/Clothing/OuterClothing/ReverseEngineering/syndicate.rsi - type: ToggleableClothing clothingPrototype: ClothingHeadHelmetHardsuitSyndieReverseEngineered - - type: ReverseEngineering - newItem: null - type: entity parent: ClothingOuterHardsuitJuggernaut @@ -35,8 +33,6 @@ sprite: Nyanotrasen/Clothing/OuterClothing/ReverseEngineering/juggernaut.rsi - type: ToggleableClothing clothingPrototype: ClothingHeadHelmetHardsuitJuggernautReverseEngineered - - type: ReverseEngineering - newItem: null - type: entity parent: ClothingOuterHardsuitERTLeader diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Markers/Spawners/ghost_roles.yml b/Resources/Prototypes/Nyanotrasen/Entities/Markers/Spawners/ghost_roles.yml index 1080d97303b..a21976fa7a5 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Markers/Spawners/ghost_roles.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Markers/Spawners/ghost_roles.yml @@ -51,23 +51,23 @@ - state: prisoner # - type: MidRoundAntagSpawnLocation # When MidRoundAntag? -# - type: entity - # id: SpawnPointGhostVampSpider - # name: ghost role spawn point - # suffix: Vampire spider - # parent: MarkerBase - # noSpawn: true - # components: - # - type: GhostRoleMobSpawner - # prototype: MobGiantSpiderVampireAngry - # - type: GhostRole - # makeSentient: true - # name: ghost-role-information-giant-spider-vampire-name - # description: ghost-role-information-giant-spider-vampire-description - # rules: No antagonist restrictions. Just don't talk in emote; you have telepathic chat. - # - type: Sprite - # sprite: Markers/jobs.rsi - # layers: - # - state: green - # - sprite: Mobs/Animals/bat.rsi - # state: bat \ No newline at end of file +#- type: entity +# id: SpawnPointGhostVampSpider +# name: ghost role spawn point +# suffix: Vampire spider +# parent: MarkerBase +# noSpawn: true +# components: +# - type: GhostRoleMobSpawner +# prototype: MobGiantSpiderVampireAngry +# - type: GhostRole +# makeSentient: true +# name: ghost-role-information-giant-spider-vampire-name +# description: ghost-role-information-giant-spider-vampire-description +# rules: No antagonist restrictions. Just don't talk in emote; you have telepathic chat. +# - type: Sprite +# sprite: Markers/jobs.rsi +# layers: +# - state: green +# - sprite: Mobs/Animals/bat.rsi +# state: bat diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Mobs/NPCs/mutants.yml b/Resources/Prototypes/Nyanotrasen/Entities/Mobs/NPCs/mutants.yml index 5cdfa18e812..b3de9e01910 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Mobs/NPCs/mutants.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Mobs/NPCs/mutants.yml @@ -70,143 +70,132 @@ - type: Produce - type: NoSlip -# - type: entity -# name: oneirophage -# parent: SimpleMobBase -# id: MobGiantSpiderVampire -# description: The 'dream-eater' spider, rumored to be one of the potential genetic sources for arachne. -# components: -# - type: Sprite -# drawdepth: Mobs -# layers: -# - map: ["enum.DamageStateVisualLayers.Base"] -# state: viper -# sprite: Mobs/Animals/spider.rsi -# - type: Physics -# - type: Fixtures -# fixtures: -# fix1: -# shape: -# !type:PhysShapeCircle -# radius: 0.35 -# density: 130 -# mask: -# - SmallMobMask -# layer: -# - SmallMobLayer -# - type: Appearance -# - type: DamageStateVisuals -# states: -# Alive: -# Base: viper -# Critical: -# Base: viper_dead -# Dead: -# Base: viper_dead -# - type: Butcherable -# spawned: -# - id: FoodMeatSpider -# amount: 2 -# - type: CombatMode -# - type: ReplacementAccent -# accent: xeno -# - type: InteractionPopup -# successChance: 0.5 -# interactSuccessString: petting-success-tarantula -# interactFailureString: petting-failure-generic -# - type: Puller -# needsHands: false -# - type: Arachne -# cocoonDelay: 8 -# - type: SolutionContainerManager -# solutions: -# melee: -# reagents: -# - ReagentId: Nocturine -# Quantity: 20 -# - type: MeleeChemicalInjector -# solution: melee -# transferAmount: 3.5 -# - type: SolutionRegeneration -# solution: melee -# generated: -# reagents: -# - ReagentId: Nocturine -# Quantity: 0.15 -# - type: BloodSucker -# unitsToSucc: 35 -# injectWhenSucc: true -# injectReagent: Cryptobiolin -# unitsToInject: 10 -# webRequired: true -# - type: Bloodstream -# bloodReagent: DemonsBlood -# - type: Body -# prototype: VampiricAnimalLarge -# #- type: PotentialPsionic -# #- type: Psionic -# removable: false -# - type: MetapsionicPower -# - type: MeleeWeapon -# hidden: true -# angle: 0 -# animation: WeaponArcBite -# damage: -# types: -# Piercing: 8 -# - type: AntiPsionicWeapon -# punish: false -# modifiers: -# coefficients: -# Piercing: 2.25 -# - type: Damageable -# damageContainer: HalfSpirit -# damageModifierSet: HalfSpirit -# - type: StatusEffects -# allowed: -# - Stun -# - KnockedDown -# - SlowedDown -# - Stutter -# - SeeingRainbows -# - Electrocution -# - Drunk -# - SlurredSpeech -# - PressureImmunity -# - Muted -# - ForcedSleep -# - TemporaryBlindness -# - Pacified -# - PsionicsDisabled -# - PsionicallyInsulated -# - type: Tag -# tags: -# - Oneirophage -# - type: MovementAlwaysTouching -# - type: PsionicInvisibleContacts -# whitelist: -# tags: -# - ArachneWeb +#- type: entity +# name: oneirophage +# parent: MobGiantSpider +# id: MobGiantSpiderVampire +# description: The 'dream-eater' spider, rumored to be one of the potential genetic sources for arachne. +# components: +# - type: Sprite +# drawdepth: Mobs +# layers: +# - map: ["enum.DamageStateVisualLayers.Base", "movement"] +# state: viper +# sprite: Mobs/Animals/spider.rsi +# - type: SpriteMovement +# movementLayers: +# movement: +# state: viper-moving +# noMovementLayers: +# movement: +# state: viper +# - type: Appearance +# - type: DamageStateVisuals +# states: +# Alive: +# Base: viper +# Critical: +# Base: viper_dead +# Dead: +# Base: viper_dead +# - type: ReplacementAccent +# accent: xeno +# - type: InteractionPopup +# successChance: 0.5 +# interactSuccessString: petting-success-tarantula +# interactFailureString: petting-failure-generic +# interactSuccessSpawn: EffectHearts +# interactSuccessSound: +# path: /Audio/Animals/snake_hiss.ogg +# - type: Puller +# needsHands: false +# - type: Cocooner +# cocoonDelay: 8 +# - type: SolutionContainerManager +# solutions: +# melee: +# reagents: +# - ReagentId: Nocturine +# Quantity: 20 +# - type: MeleeChemicalInjector +# solution: melee +# transferAmount: 3.5 +# - type: SolutionRegeneration +# solution: melee +# generated: +# reagents: +# - ReagentId: Nocturine +# Quantity: 0.15 +# - type: BloodSucker +# unitsToSucc: 35 +# injectWhenSucc: true +# injectReagent: Cryptobiolin +# unitsToInject: 10 +# webRequired: true +# - type: Bloodstream +# bloodReagent: DemonsBlood +# - type: Body +# prototype: VampiricAnimalLarge +# - type: Psionic +# removable: false +# - type: InnatePsionicPowers +# powersToAdd: +# - MetapsionicPower +# - PsionicInvisibilityPower +# - type: AntiPsionicWeapon +# punish: false +# modifiers: +# coefficients: +# Piercing: 2.25 +# - type: Damageable +# damageContainer: HalfSpirit +# damageModifierSet: HalfSpirit +# - type: StatusEffects +# allowed: +# - Stun +# - KnockedDown +# - SlowedDown +# - Stutter +# - SeeingRainbows +# - Electrocution +# - Drunk +# - SlurredSpeech +# - PressureImmunity +# - Muted +# - ForcedSleep +# - TemporaryBlindness +# - Pacified +# - PsionicsDisabled +# - PsionicallyInsulated +# - type: Tag +# tags: +# - Oneirophage +# - type: MovementAlwaysTouching +# - type: PsionicInvisibleContacts +# whitelist: +# tags: +# - ArachneWeb -# - type: entity -# name: oneirophage -# parent: MobGiantSpiderVampire -# id: MobGiantSpiderVampireAngry -# suffix: Angry -# components: -# - type: NpcFactionMember -# factions: -# - SimpleHostile -# - type: InputMover -# - type: MobMover -# - type: HTN -# rootTask: SimpleHostileCompound -# - type: GhostRole -# makeSentient: true -# name: ghost-role-information-giant-spider-vampire-name -# description: ghost-role-information-giant-spider-vampire-description -# rules: No antagonist restrictions. Just don't talk in emote; you have telepathic chat. -# - type: GhostTakeoverAvailable +#- type: entity +# name: oneirophage +# parent: MobGiantSpiderVampire +# id: MobGiantSpiderVampireAngry +# suffix: Angry +# components: +# - type: NpcFactionMember +# factions: +# - SimpleHostile +# - type: InputMover +# - type: MobMover +# - type: HTN +# rootTask: +# task: SimpleHostileCompound +# - type: GhostRole +# makeSentient: true +# name: ghost-role-information-giant-spider-vampire-name +# description: ghost-role-information-giant-spider-vampire-description +# rules: No antagonist restrictions. Just don't talk in emote; you have telepathic chat. +# - type: GhostTakeoverAvailable - type: entity parent: SimpleMobBase @@ -309,9 +298,10 @@ - type: Puller needsHands: false - type: Vocal - # mice are gender neutral who cares - maleScream: /Audio/Animals/mouse_squeak.ogg - femaleScream: /Audio/Animals/mouse_squeak.ogg + sounds: + Male: Mouse + Female: Mouse + Unsexed: Mouse wilhelmProbability: 0.001 - type: Tag tags: @@ -346,11 +336,7 @@ proper: true gender: male - type: IntrinsicRadioReceiver - channels: - - Common - type: IntrinsicRadioTransmitter - channels: - - Common - type: ActiveRadio channels: - Common diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Mobs/NPCs/xeno.yml b/Resources/Prototypes/Nyanotrasen/Entities/Mobs/NPCs/xeno.yml index 9dbe9f95f70..e12b14d4906 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Mobs/NPCs/xeno.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Mobs/NPCs/xeno.yml @@ -6,6 +6,7 @@ id: MobPurpleSnakeGhost components: - type: GhostTakeoverAvailable + - type: GhostRole allowMovement: true allowSpeech: false makeSentient: true @@ -19,6 +20,7 @@ id: MobSmallPurpleSnakeGhost components: - type: GhostTakeoverAvailable + - type: GhostRole allowMovement: true allowSpeech: false makeSentient: true diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Mobs/Species/Oni.yml b/Resources/Prototypes/Nyanotrasen/Entities/Mobs/Species/Oni.yml index c1655287fdc..8a5663dce45 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Mobs/Species/Oni.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Mobs/Species/Oni.yml @@ -40,11 +40,13 @@ proto: oni - type: LanguageKnowledge speaks: - - GalacticCommon + - TauCetiBasic - Nekomimetic understands: - - GalacticCommon + - TauCetiBasic - Nekomimetic + - type: PotentiaModifier + potentiaMultiplier: 0.5 - type: entity save: false diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Mobs/Species/felinid.yml b/Resources/Prototypes/Nyanotrasen/Entities/Mobs/Species/felinid.yml index a1ca357b080..44779fe9508 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Mobs/Species/felinid.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Mobs/Species/felinid.yml @@ -67,12 +67,10 @@ - type: NoShoesSilentFootsteps - type: LanguageKnowledge speaks: - - GalacticCommon - - SolCommon + - TauCetiBasic - Nekomimetic understands: - - GalacticCommon - - SolCommon + - TauCetiBasic - Nekomimetic - type: Thieving ignoreStripHidden: true @@ -80,6 +78,12 @@ stripTimeReduction: 0 stripTimeMultiplier: 0.667 - type: StepTriggerImmune + whitelist: + types: + - Shard + - Landmine + - Mousetrap + - SlipEntity - type: entity save: false diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Devices/pda.yml b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Devices/pda.yml index d898124b771..c85255f814e 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Devices/pda.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Devices/pda.yml @@ -32,7 +32,7 @@ accentVColor: "#DFDFDF" - type: Icon state: pda-security - - type: CartridgeLoader # DeltaV - Crime Assist + SecWatch + - type: CartridgeLoader # Adds Crime Assist and SecWatch preinstalled: - CrewManifestCartridge - NotekeeperCartridge @@ -43,7 +43,7 @@ - type: entity parent: BasePDA id: MailCarrierPDA - name: courier PDA # DeltaV - Mail Carrier to Courier replacement + name: courier PDA description: Smells like unopened letters. components: - type: Sprite @@ -67,6 +67,12 @@ - type: Icon sprite: DeltaV/Objects/Devices/pda.rsi state: pda-mailcarrier + - type: CartridgeLoader # Adds a courier performance tracker + preinstalled: + - CrewManifestCartridge + - NotekeeperCartridge + - NewsReaderCartridge + - MailMetricsCartridge - type: entity parent: BasePDA diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Chapel/amphorae.yml b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Chapel/amphorae.yml index 10f5d631aa5..2ef262fd538 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Chapel/amphorae.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Chapel/amphorae.yml @@ -17,7 +17,6 @@ jar: maxVol: 120 - type: Drink - isOpen: true solution: jar - type: Spillable solution: jar @@ -35,8 +34,8 @@ canChangeTransferAmount: true - type: UserInterface interfaces: - - key: enum.TransferAmountUiKey.Key - type: TransferAmountBoundUserInterface + enum.TransferAmountUiKey.Key: + type: TransferAmountBoundUserInterface - type: Damageable damageContainer: Inorganic - type: Destructible 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 c1ca2cd60b1..bee514917a3 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Mail/base_mail.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Mail/base_mail.yml @@ -5,11 +5,13 @@ name: mail-item-name-unaddressed components: - type: Item - size: Normal +# size: Normal # Frontier + storedRotation: -90 - type: Mail - type: AccessReader - type: Sprite - sprite: Nyanotrasen/Objects/Specific/Mail/mail.rsi + scale: 0.7, 0.7 # Frontier + sprite: Objects/Specific/Mail/mail.rsi layers: - state: icon map: ["enum.MailVisualLayers.Icon"] @@ -18,8 +20,8 @@ map: ["enum.MailVisualLayers.FragileStamp"] visible: false - map: ["enum.MailVisualLayers.JobStamp"] - scale: 0.5, 0.5 - offset: 0.275, 0.2 + scale: 0.8, 0.8 # Frontier 0.5<0.8 + offset: 0.225, 0.165 # Frontier (0.275, 0.2)<(0.225, 0.165) - state: locked map: ["enum.MailVisualLayers.Lock"] - state: priority @@ -77,7 +79,6 @@ - trigger: !type:DamageTrigger damage: 5 - triggersOnce: true behaviors: - !type:DoActsBehavior acts: [ "Breakage" ] @@ -92,6 +93,16 @@ damage: types: Blunt: 10 + - type: CargoSellBlacklist # Frontier + - type: Food # Frontier - Moth food + requiresSpecialDigestion: true + - type: SolutionContainerManager + solutions: + food: + maxVol: 1 + reagents: + - ReagentId: Nothing + Quantity: 1 # This empty parcel is allowed to exist and evade the tests for the admin # mailto command. diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Mail/mail.yml b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Mail/mail.yml deleted file mode 100644 index 7f1b26d9cbf..00000000000 --- a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Mail/mail.yml +++ /dev/null @@ -1,835 +0,0 @@ -- type: entity - noSpawn: true - parent: BaseMail - id: MailAlcohol - suffix: alcohol - components: - - type: Mail - contents: - - id: DrinkAbsintheBottleFull - orGroup: Drink - - id: DrinkBlueCuracaoBottleFull - orGroup: Drink - - id: DrinkGinBottleFull - orGroup: Drink - - id: DrinkMelonLiquorBottleFull - orGroup: Drink - - id: DrinkRumBottleFull - orGroup: Drink - - id: DrinkTequilaBottleFull - orGroup: Drink - - id: DrinkVermouthBottleFull - orGroup: Drink - - id: DrinkVodkaBottleFull - orGroup: Drink - - id: DrinkWineBottleFull - orGroup: Drink - - id: DrinkGlass - amount: 2 - -- type: entity - noSpawn: true - parent: BaseMail - id: MailSake - suffix: osake - components: - - type: Mail - contents: - - id: DrinkSakeCup - amount: 2 - - id: DrinkTokkuri - -- type: entity - noSpawn: true - parent: BaseMail - id: MailAMEGuide - suffix: ameguide - components: - - type: Mail - contents: - - id: PaperWrittenAMEScribbles - - id: Pen - -- type: entity - noSpawn: true - parent: BaseMail - id: MailBible - suffix: bible - components: - - type: Mail - contents: - - id: Bible - -- type: entity - noSpawn: true - parent: BaseMail - id: MailBikeHorn - suffix: bike horn - components: - - type: Mail - contents: - - id: BikeHorn - -- type: entity - noSpawn: true - parent: BaseMail - id: MailBlockGameDIY - suffix: blockgamediy - components: - - type: Mail - contents: - - id: BlockGameArcadeComputerCircuitboard - -#- type: entity -# noSpawn: true -# parent: BaseMail -# id: MailBooks -# suffix: books -# components: -# - type: Mail -# contents: -# # Don't use BookDemonomiconRandom. -# # It uses a RandomSpawner which just spawns the book outside of the mail. -# - id: BookDemonomicon1 -# orGroup: Demonomicon -# - id: BookDemonomicon2 -# orGroup: Demonomicon -# - id: BookDemonomicon3 -# orGroup: Demonomicon -# # There's no way to signal "spawn nothing" with an orGroup, -# # so have this blank book instead. Write your own demon summoning tome! -# - id: BookRandom -# prob: 3 -# orGroup: Demonomicon -# - id: BookChemistryInsane -# prob: 0.10 -# - id: BookBotanicalTextbook -# prob: 0.5 -# - id: BookFishing -# prob: 0.10 -# - id: BookDetective -# prob: 0.10 -# - id: BookGnominomicon -# prob: 0.2 -# - id: BookFishops # DeltaV - fishops book -# prob: 0.2 -# - id: BookSalvageEpistemics1 -# prob: 0.025 - -- type: entity - noSpawn: true - parent: BaseMail - id: MailCake - suffix: cake - components: - - type: Mail - isFragile: true - isPriority: true - contents: - - id: FoodCakeBlueberry - orGroup: Cake - - id: FoodCakeCarrot - orGroup: Cake - - id: FoodCakeCheese - orGroup: Cake - - id: FoodCakeChocolate - orGroup: Cake - - id: FoodCakeChristmas - orGroup: Cake - - id: FoodCakeClown - orGroup: Cake - - id: FoodCakeLemon - orGroup: Cake - - id: FoodCakeLime - orGroup: Cake - - id: FoodCakeOrange - orGroup: Cake - - id: FoodCakePumpkin - orGroup: Cake - - id: FoodCakeVanilla - orGroup: Cake - - id: FoodMothMothmallow - orGroup: Cake - prob: 0.5 - - id: KnifePlastic - - id: ForkPlastic - amount: 2 - -- type: entity - noSpawn: true - parent: BaseMail - id: MailCallForHelp - suffix: call-for-help - components: - - type: Mail - contents: - - id: PaperMailCallForHelp1 - orGroup: Paper - - id: PaperMailCallForHelp2 - orGroup: Paper - - id: PaperMailCallForHelp3 - orGroup: Paper - - id: PaperMailCallForHelp4 - orGroup: Paper - - id: PaperMailCallForHelp5 - orGroup: Paper - - id: FlashlightLantern - orGroup: Gift - - id: Crowbar - orGroup: Gift - prob: 0.5 - - id: CrowbarRed - orGroup: Gift - prob: 0.5 - - id: ClothingMaskGas - orGroup: Gift - - id: WeaponFlareGun - orGroup: Gift - prob: 0.25 - -- type: entity - noSpawn: true - parent: BaseMail - id: MailCheese - suffix: cheese - components: - - type: Mail - isFragile: true - isPriority: true - contents: - - id: FoodCheese - - id: KnifePlastic - -- type: entity - noSpawn: true - parent: BaseMail - id: MailChocolate - suffix: chocolate - components: - - type: Mail - contents: - # TODO make some actual chocolate candy items. - - id: FoodSnackChocolate - amount: 3 - -- type: entity - noSpawn: true - parent: BaseMail - id: MailCigarettes - suffix: cigs - components: - - type: Mail - contents: - - id: CigPackRed - - id: CheapLighter - -- type: entity - noSpawn: true - parent: BaseMail - id: MailCigars - suffix: Cigars - components: - - type: Mail - contents: - - id: CigarCase - - id: Lighter - -- type: entity - noSpawn: true - parent: BaseMail - id: MailCookies - suffix: cookies - components: - - type: Mail - # What, you want to eat stale cookies? - isPriority: true - contents: - - id: FoodBakedCookie - - id: FoodBakedCookieOatmeal - - id: FoodBakedCookieRaisin - - id: FoodBakedCookieSugar - -- type: entity - noSpawn: true - parent: BaseMail - id: MailCosplayArc - suffix: cosplay-arc - components: - - type: Mail - openSound: /Audio/Nyanotrasen/Voice/Felinid/cat_wilhelm.ogg - contents: - - id: ClothingCostumeArcDress - -- type: entity - noSpawn: true - parent: BaseMail - id: MailCosplayGeisha - suffix: cosplay-geisha - components: - - type: Mail - contents: - - id: UniformGeisha - - id: DrinkTeapot - - id: DrinkTeacup - amount: 3 - -- type: entity - noSpawn: true - parent: BaseMail - id: MailCosplayMaid - suffix: cosplay-maid - components: - - type: Mail - contents: - - id: UniformMaid - - id: SprayBottleSpaceCleaner - -- type: entity - noSpawn: true - parent: BaseMail - id: MailCosplayNurse - suffix: cosplay-nurse - components: - - type: Mail - contents: - - id: ClothingUniformJumpskirtNurse - - id: Syringe - -- type: entity - noSpawn: true - parent: BaseMail - id: MailCosplaySchoolgirl - suffix: cosplay-schoolgirl - components: - - type: Mail - contents: - - id: UniformSchoolgirlBlack - orGroup: Color - - id: UniformSchoolgirlBlue - orGroup: Color - - id: UniformSchoolgirlCyan - orGroup: Color - - id: UniformSchoolgirlGreen - orGroup: Color - - id: UniformSchoolgirlOrange - orGroup: Color - - id: UniformSchoolgirlPink - orGroup: Color - - id: UniformSchoolgirlPurple - orGroup: Color - - id: UniformSchoolgirlRed - orGroup: Color - -- type: entity - noSpawn: true - parent: BaseMail - id: MailCosplayWizard - suffix: cosplay-wizard - components: - - type: Mail - contents: - - id: ClothingOuterWizardFake - - id: ClothingHeadHatWizardFake - - id: ClothingShoesWizardFake - -- type: entity - noSpawn: true - parent: BaseMail - id: MailCrayon - suffix: Crayon - components: - - type: Mail - contents: - - id: CrayonBox - -- type: entity - noSpawn: true - parent: BaseMail - id: MailFigurine - suffix: figurine - components: - - type: Mail - isFragile: true - contents: - - id: ToyAi - orGroup: Toy - - id: ToyNuke - orGroup: Toy - - id: ToyFigurinePassenger - orGroup: Toy - - id: ToyGriffin - orGroup: Toy - - id: ToyHonk - orGroup: Toy - - id: ToyIan - orGroup: Toy - - id: ToyMarauder - orGroup: Toy - - id: ToyMauler - orGroup: Toy - - id: ToyGygax - orGroup: Toy - - id: ToyOdysseus - orGroup: Toy - - id: ToyOwlman - orGroup: Toy - - id: ToyDeathRipley - orGroup: Toy - - id: ToyPhazon - orGroup: Toy - - id: ToyFireRipley - orGroup: Toy - - id: ToyReticence - orGroup: Toy - - id: ToyRipley - orGroup: Toy - - id: ToySeraph - orGroup: Toy - - id: ToyDurand - orGroup: Toy - -- type: entity - noSpawn: true - parent: BaseMail - id: MailFishingCap - suffix: fishingcap - components: - - type: Mail - contents: - - id: ClothingHeadFishCap - -- type: entity - noSpawn: true - parent: BaseMail - id: MailFlashlight - suffix: Flashlight - components: - - type: Mail - contents: - - id: FlashlightLantern - -#- type: entity -# noSpawn: true -# parent: BaseMail -# id: MailFlowers -# suffix: flowers -# components: -# - type: Mail -# contents: -# # TODO actual flowers -# - id: ClothingHeadHatFlowerCrown -# orGroup: Flower -# - id: ClothingHeadHatHairflower -# orGroup: Flower - -- type: entity - noSpawn: true - parent: BaseMail - id: MailHighlander - suffix: highlander - components: - - type: Mail - contents: - - id: ClothingUniformJumpskirtColorRed - - id: ClothingHeadHatBeret - - id: DrinkRedMeadGlass - - id: Claymore - -- type: entity - noSpawn: true - parent: BaseMail - id: MailHighlanderDulled - suffix: highlander, dulled - components: - - type: Mail - contents: - - id: ClothingUniformJumpskirtColorRed - - id: ClothingHeadHatBeret - - id: DrinkGlass - - id: ClaymoreDulled - -- type: entity - noSpawn: true - parent: BaseMail - id: MailHoneyBuns - suffix: honeybuns - components: - - type: Mail - contents: - - id: FoodBakedBunHoney - amount: 2 - -- type: entity - noSpawn: true - parent: BaseMail - id: MailJunkFood - suffix: junk food - components: - - type: Mail - contents: - - id: FoodBoxDonkpocket - - id: FoodSnackChips - -- type: entity - noSpawn: true - parent: BaseMail - id: MailKatana - suffix: Katana - components: - - type: Mail - contents: - - id: Katana - prob: 0.1 - orGroup: Katana - - id: KatanaDulled - prob: 0.9 - orGroup: Katana - -- type: entity - noSpawn: true - parent: BaseMail - id: MailKnife - suffix: Knife - components: - - type: Mail - contents: - - id: CombatKnife - -- type: entity - noSpawn: true - parent: BaseMail - id: MailMoney - suffix: money - components: - - type: Mail - contents: - - id: SpaceCash100 - orGroup: Cash - prob: 0.3 - - id: SpaceCash500 - orGroup: Cash - prob: 0.6 - - id: SpaceCash1000 - orGroup: Cash - prob: 0.3 - -- type: entity - noSpawn: true - parent: BaseMail - id: MailMuffins - suffix: muffins - components: - - type: Mail - isPriority: true - contents: - - id: FoodBakedMuffinBerry - - id: FoodBakedMuffinCherry - - id: FoodBakedMuffinBluecherry - -- type: entity - noSpawn: true - parent: BaseMail - id: MailMoffins - suffix: moffins - components: - - type: Mail - isPriority: true - contents: - - id: FoodMothMoffin - amount: 3 - -- type: entity - noSpawn: true - parent: BaseMail - id: MailNoir - suffix: noir - components: - - type: Mail - contents: - - id: ClothingUniformJumpsuitDetectiveGrey - - id: ClothingUniformJumpskirtDetectiveGrey - - id: ClothingHeadHatBowlerHat - - id: ClothingOuterCoatGentle - -- type: entity - noSpawn: true - parent: BaseMail - id: MailPAI - suffix: PAI - components: - - type: Mail - contents: - - id: PersonalAI - -- type: entity - noSpawn: true - parent: BaseMail - id: MailPlushie - suffix: plushie - components: - - type: Mail - contents: - - id: PlushieMothRandom - orGroup: Prize - - id: PlushieMothMusician - orGroup: Prize - - id: PlushieMothBartender - orGroup: Prize - - id: PlushieBee - orGroup: Prize - - id: PlushieHampter - orGroup: Prize - - id: PlushieRouny - orGroup: Prize - - id: PlushieLamp - orGroup: Prize - - id: PlushieArachind - orGroup: Prize - - id: PlushieLizard - orGroup: Prize - - id: PlushieLizardMirrored - orGroup: Prize - - id: PlushieSpaceLizard - orGroup: Prize - - id: PlushieDiona - orGroup: Prize - - id: PlushieSharkBlue - orGroup: Prize - - id: PlushieSharkPink - orGroup: Prize - - id: PlushieSharkGrey - orGroup: Prize - - id: PlushieCarp - orGroup: Prize - - id: PlushieMagicarp - orGroup: Prize - - id: PlushieHolocarp - orGroup: Prize - - id: PlushieSlime - orGroup: Prize - - id: PlushieSnake - orGroup: Prize - - id: PlushieVox - orGroup: Prize - - id: PlushieAtmosian - orGroup: Prize - - id: PlushiePenguin - orGroup: Prize - - id: PlushieHuman - orGroup: Prize - - id: PlushieArachne - orGroup: Prize - - id: PlushieGnome - orGroup: Prize - - id: PlushieLoveable - orGroup: Prize - - id: PlushieDeer - orGroup: Prize - - id: PlushieIpc - orGroup: Prize - - id: PlushieGrey - orGroup: Prize - - id: PlushieRedFox - orGroup: Prize - - id: PlushiePurpleFox - orGroup: Prize - - id: PlushiePinkFox - orGroup: Prize - - id: PlushieOrangeFox - orGroup: Prize - - id: PlushieMarbleFox - orGroup: Prize - - id: PlushieCrimsonFox - orGroup: Prize - - id: PlushieCoffeeFox - orGroup: Prize - - id: PlushieBlueFox - orGroup: Prize - - id: PlushieBlackFox - orGroup: Prize - - id: PlushieVulp - orGroup: Prize - - id: PlushieCorgi - orGroup: Prize - - id: PlushieGirlyCorgi - orGroup: Prize - - id: PlushieRobotCorgi - orGroup: Prize - - id: PlushieCatBlack - orGroup: Prize - - id: PlushieCatGrey - orGroup: Prize - - id: PlushieCatOrange - orGroup: Prize - - id: PlushieCatSiames - orGroup: Prize - - id: PlushieCatTabby - orGroup: Prize - - id: PlushieCatTuxedo - orGroup: Prize - - id: PlushieCatWhite - orGroup: Prize - - id: PlushieGhost - orGroup: Prize - - id: PlushieRGBee - orGroup: Prize - - id: PlushieRatvar - orGroup: Prize - - id: PlushieNar - orGroup: Prize - - id: PlushieRainbowCarp - orGroup: Prize - - id: PlushieXeno - orGroup: Prize - - id: PlushieJester - orGroup: Prize - - id: PlushieSlips - orGroup: Prize - - id: PlushieAbductor - orGroup: Prize - - id: PlushieTrystan - orGroup: Prize - - id: PlushieAbductorAgent - orGroup: Prize - - id: PlushieNuke - orGroup: Prize - -- type: entity - noSpawn: true - parent: BaseMail - id: MailRestraints - suffix: restraints - components: - - type: Mail - contents: - - id: Handcuffs - - id: ClothingMaskMuzzle - - id: ClothingEyesBlindfold - -- type: entity - noSpawn: true - parent: BaseMail - id: MailSignallerKit - suffix: signallerkit - components: - - type: Mail - contents: - - id: Multitool - - id: RemoteSignaller - -# - type: entity -# noSpawn: true -# parent: BaseMail -# id: MailSixPack -# suffix: sixpack -# components: -# - type: Mail -# contents: -# - id: DrinkCanPack - -- type: entity - noSpawn: true - parent: BaseMail - id: MailSkub - suffix: skub - components: - - type: Mail - contents: - - id: Skub - -- type: entity - noSpawn: true - parent: BaseMail - id: MailSoda - suffix: soda - components: - - type: Mail - contents: - - id: DrinkColaBottleFull - orGroup: Soda - - id: DrinkSpaceMountainWindBottleFull - orGroup: Soda - - id: DrinkSpaceUpBottleFull - orGroup: Soda - -- type: entity - noSpawn: true - parent: BaseMail - id: MailSpaceVillainDIY - suffix: spacevilliandiy - components: - - type: Mail - contents: - - id: SpaceVillainArcadeComputerCircuitboard - -- type: entity - noSpawn: true - parent: BaseMail - id: MailSunglasses - suffix: Sunglasses - components: - - type: Mail - contents: - - id: ClothingEyesGlassesSunglasses - -- type: entity - noSpawn: true - parent: BaseMail - id: MailVagueThreat - suffix: vague-threat - components: - - type: Mail - contents: - - id: PaperMailVagueThreat1 - orGroup: Paper - - id: PaperMailVagueThreat2 - orGroup: Paper - - id: PaperMailVagueThreat3 - orGroup: Paper - - id: PaperMailVagueThreat4 - orGroup: Paper - - id: PaperMailVagueThreat5 - orGroup: Paper - - id: PaperMailVagueThreat6 - orGroup: Paper - - id: PaperMailVagueThreat7 - orGroup: Paper - - id: PaperMailVagueThreat8 - orGroup: Paper - - id: PaperMailVagueThreat9 - orGroup: Paper - - id: PaperMailVagueThreat10 - orGroup: Paper - - id: PaperMailVagueThreat11 - orGroup: Paper - - id: PaperMailVagueThreat12 - orGroup: Paper - - id: KitchenKnife - orGroup: ThreateningObject - - id: ButchCleaver - orGroup: ThreateningObject - - id: CombatKnife - orGroup: ThreateningObject - - id: SurvivalKnife - orGroup: ThreateningObject - - id: SoapHomemade - orGroup: ThreateningObject - - id: FoodMeat - orGroup: ThreateningObject - - id: OrganHumanHeart - orGroup: ThreateningObject - -- type: entity - noSpawn: true - parent: BaseMail - id: MailWinterCoat - suffix: wintercoat - components: - - type: Mail - contents: - - id: ClothingOuterWinterCoat - orGroup: Coat - - id: ClothingOuterWinterCoatLong - orGroup: Coat - - id: ClothingOuterWinterCoatPlaid - orGroup: Coat diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Mail/mail_civilian.yml b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Mail/mail_civilian.yml deleted file mode 100644 index a41fac14ffa..00000000000 --- a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Mail/mail_civilian.yml +++ /dev/null @@ -1,195 +0,0 @@ -- type: entity - noSpawn: true - parent: BaseMail - id: MailBotanistChemicalBottles - suffix: botanistchemicals - components: - - type: Mail - contents: - - id: RobustHarvestChemistryBottle - orGroup: Chemical - prob: 0.6 - - id: WeedSpray - orGroup: Chemical - prob: 0.4 - -- type: entity - noSpawn: true - parent: BaseMail - id: MailBotanistMutagen - suffix: mutagen - components: - - type: Mail - isFragile: true - isPriority: true - contents: - - id: UnstableMutagenChemistryBottle - -- type: entity - noSpawn: true - parent: BaseMail - id: MailBotanistSeeds - suffix: seeds - components: - - type: Mail - contents: - - id: AloeSeeds - orGroup: Seeds - - id: AmbrosiaVulgarisSeeds - orGroup: Seeds - - id: AppleSeeds - orGroup: Seeds - - id: BananaSeeds - orGroup: Seeds - - id: CarrotSeeds - orGroup: Seeds - - id: ChanterelleSeeds - orGroup: Seeds - - id: ChiliSeeds - orGroup: Seeds - - id: CornSeeds - orGroup: Seeds - - id: EggplantSeeds - orGroup: Seeds - - id: GalaxythistleSeeds - orGroup: Seeds - - id: LemonSeeds - orGroup: Seeds - - id: LingzhiSeeds - orGroup: Seeds - - id: OatSeeds - orGroup: Seeds - - id: OnionSeeds - orGroup: Seeds - - id: PoppySeeds - orGroup: Seeds - - id: PotatoSeeds - orGroup: Seeds - - id: SugarcaneSeeds - orGroup: Seeds - - id: TomatoSeeds - orGroup: Seeds - - id: TowercapSeeds - orGroup: Seeds - - id: WheatSeeds - orGroup: Seeds - -- type: entity - noSpawn: true - parent: BaseMail - id: MailClownGildedBikeHorn - suffix: honk - components: - - type: Mail - isFragile: true - contents: - - id: BikeHornInstrument - -- type: entity - noSpawn: true - parent: BaseMail - id: MailClownHonkSupplement - suffix: honk - components: - - type: Mail - isFragile: true - contents: - - id: BikeHorn - - id: FoodPieBananaCream - - id: FoodBanana - -- type: entity - noSpawn: true - parent: BaseMail - id: MailHoPBureaucracy - suffix: hoppaper - components: - - type: Mail - contents: - - id: Paper - maxAmount: 3 - -- type: entity - noSpawn: true - parent: BaseMail - id: MailHoPSupplement - suffix: hopsupplement - components: - - type: Mail - contents: - - id: ClearPDA - - id: ClothingHeadsetGrey - - id: Paper - -- type: entity - noSpawn: true - parent: BaseMail - id: MailMimeArtsCrafts - suffix: artscrafts - components: - - type: Mail - contents: - - id: CrayonBox - - id: Paper - maxAmount: 3 - -- type: entity - noSpawn: true - parent: BaseMail - id: MailMimeBlankBook - suffix: blankbook - components: - - type: Mail - contents: - - id: BookRandom - -- type: entity - noSpawn: true - parent: BaseMail - id: MailMimeBottleOfNothing - suffix: bottleofnothing - components: - - type: Mail - contents: - - id: DrinkBottleOfNothingFull - -- type: entity - noSpawn: true - parent: BaseMail - id: MailMusicianInstrumentSmall - suffix: instrument-small - components: - - type: Mail - isFragile: true - contents: - - id: FluteInstrument - orGroup: Instrument - - id: HarmonicaInstrument - orGroup: Instrument - - id: OcarinaInstrument - orGroup: Instrument - - id: PanFluteInstrument - orGroup: Instrument - - id: RecorderInstrument - orGroup: Instrument - -- type: entity - noSpawn: true - parent: BaseMail - id: MailPassengerMoney - suffix: passengermoney - components: - - type: Mail - contents: - - id: SpaceCash100 - orGroup: Cash - prob: 0.1 - maxAmount: 10 - - id: SpaceCash500 - orGroup: Cash - prob: 0.3 - maxAmount: 5 - - id: SpaceCash1000 - orGroup: Cash - prob: 0.6 - maxAmount: 3 diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Mail/mail_command.yml b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Mail/mail_command.yml deleted file mode 100644 index 7e2a935f908..00000000000 --- a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Mail/mail_command.yml +++ /dev/null @@ -1,9 +0,0 @@ -- type: entity - noSpawn: true - parent: BaseMail - id: MailCommandPinpointerNuclear - suffix: pinpointernuclear - components: - - type: Mail - contents: - - id: PinpointerNuclear diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Mail/mail_engineering.yml b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Mail/mail_engineering.yml deleted file mode 100644 index 461d9bf1365..00000000000 --- a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Mail/mail_engineering.yml +++ /dev/null @@ -1,45 +0,0 @@ -- type: entity - noSpawn: true - parent: BaseMail - id: MailEngineeringCables - suffix: cables - components: - - type: Mail - contents: - - id: CableHVStack - orGroup: Cables - - id: CableMVStack - orGroup: Cables - - id: CableApcStack - orGroup: Cables - -- type: entity - noSpawn: true - parent: BaseMail - id: MailEngineeringKudzuDeterrent - suffix: antikudzu - components: - - type: Mail - contents: - - id: PlantBGoneSpray - -- type: entity - noSpawn: true - parent: BaseMail - id: MailEngineeringSheetGlass - suffix: sheetglass - components: - - type: Mail - contents: - - id: SheetGlass - -- type: entity - noSpawn: true - parent: BaseMail - id: MailEngineeringWelderReplacement - suffix: welder - components: - - type: Mail - contents: - - id: Welder - diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Mail/mail_epistemology.yml b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Mail/mail_epistemology.yml deleted file mode 100644 index 38526966b80..00000000000 --- a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Mail/mail_epistemology.yml +++ /dev/null @@ -1,58 +0,0 @@ -- type: entity - noSpawn: true - parent: BaseMail - id: MailEpistemologyBluespace - suffix: bluespace - components: - - type: Mail - contents: - - id: MaterialBluespace1 - -- type: entity - noSpawn: true - parent: BaseMail - id: MailEpistemologyIngotGold - suffix: ingotgold - components: - - type: Mail - contents: - - id: IngotGold1 - maxAmount: 3 - -- type: entity - noSpawn: true - parent: BaseMail - id: MailEpistemologyResearchDisk - suffix: researchdisk - components: - - type: Mail - contents: - - id: ResearchDisk - orGroup: Disk - prob: 0.6 - - id: ResearchDisk5000 - orGroup: Disk - prob: 0.3 - - id: ResearchDisk10000 - orGroup: Disk - prob: 0.1 - -- type: entity - noSpawn: true - parent: BaseMail - id: MailEpistemologyTinfoilHat - suffix: tinfoilhat - components: - - type: Mail - contents: - - id: ClothingHeadTinfoil - -- type: entity - noSpawn: true - parent: BaseMail - id: MailDetectiveForensicSupplement # Deltav - Detective is in charge of investigating crimes. - suffix: detectivesupplement # Deltav - Detective is in charge of investigating crimes. - components: - - type: Mail - contents: - - id: BoxForensicPad diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Mail/mail_security.yml b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Mail/mail_security.yml deleted file mode 100644 index b47d5af56e3..00000000000 --- a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Mail/mail_security.yml +++ /dev/null @@ -1,56 +0,0 @@ -- type: entity - noSpawn: true - parent: BaseMail - id: MailSecurityDonuts - suffix: donuts - components: - - type: Mail - contents: - - id: FoodBoxDonut - -- type: entity - noSpawn: true - parent: BaseMail - id: MailSecurityFlashlight - suffix: seclite - components: - - type: Mail - contents: - - id: FlashlightSeclite - -- type: entity - noSpawn: true - parent: BaseMail - id: MailSecurityNonlethalsKit - suffix: nonlethalskit - components: - - type: Mail - contents: - - id: Flash - maxAmount: 2 - - id: GrenadeFlashBang - maxAmount: 2 - - id: Handcuffs - maxAmount: 2 - -#- type: entity -# noSpawn: true -# parent: BaseMail -# id: MailSecuritySpaceLaw -# suffix: spacelaw -# components: -# - type: Mail -# contents: -# - id: HyperlinkBookSpaceLaw -# Will we ever readd hyperlinks books? Who knows! - -- type: entity - noSpawn: true - parent: BaseMail - id: MailWardenCrowdControl - suffix: crowdcontrol - components: - - type: Mail - contents: - - id: BoxBeanbag - diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Mail/mail_specific_items.yml b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Mail/mail_specific_items.yml deleted file mode 100644 index b4d2b547798..00000000000 --- a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Mail/mail_specific_items.yml +++ /dev/null @@ -1,169 +0,0 @@ -- type: entity - id: PaperMailCallForHelp1 - noSpawn: true - suffix: "call for help 1" - parent: Paper - components: - - type: Paper - content: | - Help! They're coming! Take this! - -- type: entity - id: PaperMailCallForHelp2 - noSpawn: true - suffix: "call for help 2" - parent: Paper - components: - - type: Paper - content: | - Check disposals! - -- type: entity - id: PaperMailCallForHelp3 - noSpawn: true - suffix: "call for help 3" - parent: Paper - components: - - type: Paper - content: | - GET ME OUT! - -- type: entity - id: PaperMailCallForHelp4 - noSpawn: true - suffix: "call for help 4" - parent: Paper - components: - - type: Paper - content: | - Check maintenance! - -- type: entity - id: PaperMailCallForHelp5 - noSpawn: true - suffix: "call for help 5" - parent: Paper - components: - - type: Paper - content: | - Save me, please! - -- type: entity - id: PaperMailVagueThreat1 - noSpawn: true - suffix: "vague mail threat 1" - parent: Paper - components: - - type: Paper - content: | - I know what you did. You don't know what I'm going to do to you. - -- type: entity - id: PaperMailVagueThreat2 - noSpawn: true - suffix: "vague mail threat 2" - parent: Paper - components: - - type: Paper - content: | - I'm coming for you. - -- type: entity - id: PaperMailVagueThreat3 - noSpawn: true - suffix: "vague mail threat 3" - parent: Paper - components: - - type: Paper - content: | - You're next. - -- type: entity - id: PaperMailVagueThreat4 - noSpawn: true - suffix: "vague mail threat 4" - parent: Paper - components: - - type: Paper - content: | - We see you. - -- type: entity - id: PaperMailVagueThreat5 - noSpawn: true - suffix: "vague mail threat 5" - parent: Paper - components: - - type: Paper - content: | - I hope your affairs are in order. - -- type: entity - id: PaperMailVagueThreat6 - noSpawn: true - suffix: "vague mail threat 6" - parent: Paper - components: - - type: Paper - content: | - It's only a matter of time. Enjoy it while it lasts. - -- type: entity - id: PaperMailVagueThreat7 - noSpawn: true - suffix: "vague mail threat 7" - parent: Paper - components: - - type: Paper - content: | - Who should we mail your pieces to? - -- type: entity - id: PaperMailVagueThreat8 - noSpawn: true - suffix: "vague mail threat 8" - parent: Paper - components: - - type: Paper - content: | - Do you prefer to die slowly or quickly? Just kidding. We don't care what you think. - -- type: entity - id: PaperMailVagueThreat9 - noSpawn: true - suffix: "vague mail threat 9" - parent: Paper - components: - - type: Paper - content: | - I think your head would look nice on my mantel. - -- type: entity - id: PaperMailVagueThreat10 - noSpawn: true - suffix: "vague mail threat 10" - parent: Paper - components: - - type: Paper - content: | - You should have paid up. It's too late now. - -- type: entity - id: PaperMailVagueThreat11 - noSpawn: true - suffix: "vague mail threat 11" - parent: Paper - components: - - type: Paper - content: | - Your family will miss you, but don't worry. We'll take care of them too. - -- type: entity - id: PaperMailVagueThreat12 - noSpawn: true - suffix: "vague mail threat 12" - parent: Paper - components: - - type: Paper - content: | - I have a bet that you're going to die today. I'm not afraid of cheating. diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Research/crystals.yml b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Research/crystals.yml deleted file mode 100644 index 3204cf095f1..00000000000 --- a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Research/crystals.yml +++ /dev/null @@ -1,36 +0,0 @@ -- type: entity - parent: BaseItem - id: CrystalNormality - name: normality crystal - description: It looks... normal. Placeholder sprite. - components: - - type: Sprite - sprite: Nyanotrasen/Objects/Materials/materials.rsi - state: bluespace - color: gray - - type: Tag - tags: - - NormalityCrystal - -# - type: entity -# parent: BaseItem -# id: CrystalSoul -# name: soul crystal -# description: Contains a soul. Placeholder sprite. -# components: -# - type: Sprite -# sprite: Nyanotrasen/Objects/Materials/materials.rsi -# state: bluespace -# color: purple -# - type: Speech -# #- type: Psionic -# - type: SoulCrystal -# - type: SolutionContainerManager -# solutions: -# ectoplasm: -# maxvol: 50 -# reagents: -# - ReagentId: Ectoplasm -# Quantity: 50 -# - type: Extractable -# grindableSolutionName: ectoplasm 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 dc5ce84904a..42826c94cba 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Guns/Projectiles/shotgun.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Guns/Projectiles/shotgun.yml @@ -24,6 +24,3 @@ blockSlots: NONE #tranquillizer darts shouldn't be blocked by a mask - type: InjectableSolution solution: ammo - # - type: GuideHelp - # guides: - # - Psionics \ No newline at end of file diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Stations/mail.yml b/Resources/Prototypes/Nyanotrasen/Entities/Stations/mail.yml index ceb87bbaa1b..b85cfef87ab 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Stations/mail.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Stations/mail.yml @@ -3,3 +3,4 @@ abstract: true components: - type: StationMailRouter + - type: StationLogisticStats # DeltaV - Tracks statistics related to mail and income diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Structures/Doors/Airlocks/access.yml b/Resources/Prototypes/Nyanotrasen/Entities/Structures/Doors/Airlocks/access.yml index e1666a8b163..ff671f6d55e 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Structures/Doors/Airlocks/access.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Structures/Doors/Airlocks/access.yml @@ -4,8 +4,9 @@ suffix: Mail, Locked noSpawn: true components: - - type: AccessReader - access: [["Mail"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsMail ] - type: entity parent: AirlockCargoGlass @@ -13,5 +14,6 @@ suffix: Mail, Locked noSpawn: true components: - - type: AccessReader - access: [["Mail"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsMail ] diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Structures/Machines/deep_fryer.yml b/Resources/Prototypes/Nyanotrasen/Entities/Structures/Machines/deep_fryer.yml index fa3e0537dbb..9749a4295d2 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Structures/Machines/deep_fryer.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Structures/Machines/deep_fryer.yml @@ -124,15 +124,14 @@ - type: RefillableSolution solution: vat_oil - type: Drink - isOpen: true solution: vat_oil - type: Appearance - type: ActivatableUI key: enum.DeepFryerUiKey.Key - type: UserInterface interfaces: - - key: enum.DeepFryerUiKey.Key - type: DeepFryerBoundUserInterface + enum.DeepFryerUiKey.Key: + type: DeepFryerBoundUserInterface - type: Destructible thresholds: - trigger: diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Structures/Machines/laundry.yml b/Resources/Prototypes/Nyanotrasen/Entities/Structures/Machines/laundry.yml index ce982d41c2f..47518c78f69 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Structures/Machines/laundry.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Structures/Machines/laundry.yml @@ -84,8 +84,8 @@ ents: [] - type: UserInterface interfaces: - - key: enum.StorageUiKey.Key - type: StorageBoundUserInterface + enum.StorageUiKey.Key: + type: StorageBoundUserInterface - type: UseDelay delay: 0.5 - type: Repairable diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Structures/Machines/reverseEngineering.yml b/Resources/Prototypes/Nyanotrasen/Entities/Structures/Machines/reverseEngineering.yml index 1a16ae63d4e..13be1b454c2 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Structures/Machines/reverseEngineering.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Structures/Machines/reverseEngineering.yml @@ -19,8 +19,8 @@ key: enum.ReverseEngineeringMachineUiKey.Key - type: UserInterface interfaces: - - key: enum.ReverseEngineeringMachineUiKey.Key - type: ReverseEngineeringMachineBoundUserInterface + enum.ReverseEngineeringMachineUiKey.Key: + type: ReverseEngineeringMachineBoundUserInterface - type: ActivatableUIRequiresPower - type: ItemSlots slots: diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Structures/Research/glimmer_prober.yml b/Resources/Prototypes/Nyanotrasen/Entities/Structures/Research/glimmer_prober.yml index 0031a062230..0eede9c2810 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Structures/Research/glimmer_prober.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Structures/Research/glimmer_prober.yml @@ -65,9 +65,6 @@ damageContainer: Inorganic damageModifierSet: ShockAbsorber - type: CargoSellBlacklist - # - type: GuideHelp - # guides: - # - Psionics - type: AmbientSound range: 6 volume: -6 @@ -119,9 +116,6 @@ False: {visible: false} - type: PowerSwitch - type: CargoSellBlacklist - # - type: GuideHelp - # guides: - # - Psionics - type: NpcFactionMember factions: - PsionicInterloper # :^) diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Structures/Research/sophicscribe.yml b/Resources/Prototypes/Nyanotrasen/Entities/Structures/Research/sophicscribe.yml index f99e25ae820..f92c9b07400 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Structures/Research/sophicscribe.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Structures/Research/sophicscribe.yml @@ -16,13 +16,7 @@ - type: Speech speechSounds: Tenor - type: IntrinsicRadioReceiver - channels: - - Common - - Science - type: IntrinsicRadioTransmitter - channels: - - Common - - Science - type: ActiveRadio channels: - Common @@ -45,6 +39,10 @@ gender: female proper: true - type: SpriteFade - # - type: GuideHelp - # guides: - # - Psionics \ No newline at end of file + - type: LanguageSpeaker + currentLanguage: TauCetiBasic + - type: LanguageKnowledge + speaks: + - TauCetiBasic + understands: + - TauCetiBasic diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Structures/Walls/walls.yml b/Resources/Prototypes/Nyanotrasen/Entities/Structures/Walls/walls.yml index 12548299910..971e292f90d 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Structures/Walls/walls.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Structures/Walls/walls.yml @@ -49,8 +49,6 @@ node: girder - !type:DoActsBehavior acts: ["Destruction"] - destroySound: - collection: MetalBreak - type: IconSmooth key: walls base: paperwall diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Structures/Webbing/webs.yml b/Resources/Prototypes/Nyanotrasen/Entities/Structures/Webbing/webs.yml index e483ea5da71..c3e020090fd 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Structures/Webbing/webs.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Structures/Webbing/webs.yml @@ -60,7 +60,7 @@ butcheringType: Knife butcherDelay: 12 spawned: - - id: MaterialCloth1 + - id: MaterialWebSilk1 amount: 1 prob: 0.5 #This doesn't cost hunger so should at least make it not worth it time-wise - type: Appearance diff --git a/Resources/Prototypes/Nyanotrasen/Guidebook/epistemics.yml b/Resources/Prototypes/Nyanotrasen/Guidebook/epistemics.yml index 77b180d6ea1..2ae051100bb 100644 --- a/Resources/Prototypes/Nyanotrasen/Guidebook/epistemics.yml +++ b/Resources/Prototypes/Nyanotrasen/Guidebook/epistemics.yml @@ -1,12 +1,7 @@ - type: guideEntry - id: Psionics - name: guide-entry-psionics - text: "/ServerInfo/Nyanotrasen/Guidebook/Epistemics/Psionics.xml" - -# - type: guideEntry # When it's added -# id: AltarsGolemancy -# name: guide-entry-altars-golemancy -# text: "/ServerInfo/Nyanotrasen/Guidebook/Epistemics/Altar.xml" + id: AltarsGolemancy + name: guide-entry-altars-golemancy + text: "/ServerInfo/Nyanotrasen/Guidebook/Epistemics/Altar.xml" - type: guideEntry id: ReverseEngineering diff --git a/Resources/Prototypes/Nyanotrasen/Hydroponics/seeds.yml b/Resources/Prototypes/Nyanotrasen/Hydroponics/seeds.yml index 688af9fc50c..08f4482787f 100644 --- a/Resources/Prototypes/Nyanotrasen/Hydroponics/seeds.yml +++ b/Resources/Prototypes/Nyanotrasen/Hydroponics/seeds.yml @@ -17,14 +17,13 @@ nutrientConsumption: 0.25 idealLight: 8 idealHeat: 298 - juicy: true splatPrototype: PuddleSplatter chemicals: Nutriment: Min: 1 Max: 10 - PotencyDivisor: 10 + potencyDivisor: 10 DemonsBlood: Min: 1 Max: 4 - PotencyDivisor: 25 + potencyDivisor: 25 diff --git a/Resources/Prototypes/Nyanotrasen/Objectives/traitor.yml b/Resources/Prototypes/Nyanotrasen/Objectives/traitor.yml index 53910a54a92..e6e497003d5 100644 --- a/Resources/Prototypes/Nyanotrasen/Objectives/traitor.yml +++ b/Resources/Prototypes/Nyanotrasen/Objectives/traitor.yml @@ -9,29 +9,6 @@ stealGroup: AntiPsychicKnife owner: job-name-mantis -- type: entity - id: BecomePsionicObjective - parent: BaseTraitorObjective - name: Become psionic - description: We need you to acquire psionics and keep them until your mission is complete. - noSpawn: true - components: - - type: NotJobsRequirement - jobs: - - Mime - - ForensicMantis - - type: Objective - difficulty: 2.5 - #unique: false - icon: - sprite: Nyanotrasen/Icons/psi.rsi - state: psi - - type: ObjectiveBlacklistRequirement - blacklist: - components: - - BecomeGolemCondition - - type: BecomePsionicCondition - #- type: entity # id: BecomeGolemObjective # parent: BaseTraitorObjective diff --git a/Resources/Prototypes/Nyanotrasen/Reagents/Materials/materials.yml b/Resources/Prototypes/Nyanotrasen/Reagents/Materials/materials.yml deleted file mode 100644 index 9146f297132..00000000000 --- a/Resources/Prototypes/Nyanotrasen/Reagents/Materials/materials.yml +++ /dev/null @@ -1,8 +0,0 @@ -- type: material - id: Bluespace - name: bluespace - unit: materials-unit-crystal - icon: /Textures/Nyanotrasen/Objects/Materials/materials.rsi/bluespace.png - color: "#53a9ff" - stackEntity: MaterialBluespace - price: 15 diff --git a/Resources/Prototypes/Nyanotrasen/Recipes/Construction/Graphs/structures/glimmerdevices.yml b/Resources/Prototypes/Nyanotrasen/Recipes/Construction/Graphs/structures/glimmerdevices.yml index 1926992b691..a79f93ec0e1 100644 --- a/Resources/Prototypes/Nyanotrasen/Recipes/Construction/Graphs/structures/glimmerdevices.yml +++ b/Resources/Prototypes/Nyanotrasen/Recipes/Construction/Graphs/structures/glimmerdevices.yml @@ -30,36 +30,9 @@ conditions: - !type:EntityAnchored {} steps: - - tag: NormalityCrystal - icon: - sprite: Nyanotrasen/Objects/Materials/materials.rsi - state: bluespace - name: a normality crystal - doAfter: 1 - - tag: NormalityCrystal - icon: - sprite: Nyanotrasen/Objects/Materials/materials.rsi - state: bluespace - name: a normality crystal - doAfter: 1 - - tag: NormalityCrystal - icon: - sprite: Nyanotrasen/Objects/Materials/materials.rsi - state: bluespace - name: a normality crystal - doAfter: 1 - - tag: NormalityCrystal - icon: - sprite: Nyanotrasen/Objects/Materials/materials.rsi - state: bluespace - name: a normality crystal - doAfter: 1 - - tag: NormalityCrystal - icon: - sprite: Nyanotrasen/Objects/Materials/materials.rsi - state: bluespace - name: a normality crystal - doAfter: 1 + - material: Normality + amount: 5 + doAfter: 10 - tool: Welding doAfter: 5 diff --git a/Resources/Prototypes/Nyanotrasen/Recipes/Cooking/meal_recipes.yml b/Resources/Prototypes/Nyanotrasen/Recipes/Cooking/meal_recipes.yml index 51777e2f594..b61e99ba920 100644 --- a/Resources/Prototypes/Nyanotrasen/Recipes/Cooking/meal_recipes.yml +++ b/Resources/Prototypes/Nyanotrasen/Recipes/Cooking/meal_recipes.yml @@ -26,7 +26,7 @@ solids: FoodSnackBoritos: 1 FoodCheeseSlice: 1 - FoodChili: 1 + FoodChiliPepper: 1 FoodMeatMeatball: 1 # Base ingredients: Should be moved out of microwave as soon as possible. @@ -62,7 +62,7 @@ solids: FoodTofuSlice: 2 FoodOnionSlice: 1 - FoodChili: 1 + FoodChiliPepper: 1 FoodCarrot: 1 FoodCheeseCurds: 1 @@ -97,7 +97,7 @@ solids: FoodCheeseSlice: 1 FoodCabbage: 1 - FoodChili: 1 + FoodChiliPepper: 1 FoodPotato: 1 FoodOnionSlice: 2 @@ -111,7 +111,7 @@ solids: FoodCheeseSlice: 1 #Grilled cheese slice FoodMothSaladBase: 1 - FoodChili: 1 + FoodChiliPepper: 1 FoodCabbage: 1 - type: microwaveMealRecipe @@ -142,7 +142,7 @@ FoodRiceBoiled: 1 FoodPotato: 2 FoodCabbage: 1 - FoodChili: 1 + FoodChiliPepper: 1 #Herbs: 1 - type: microwaveMealRecipe @@ -307,7 +307,7 @@ solids: FoodBowlBig: 1 FoodTofuSlice: 1 - FoodChili: 1 + FoodChiliPepper: 1 #FoodYogurt: 1 #Milk and Cream placeholder - type: microwaveMealRecipe @@ -368,7 +368,7 @@ solids: FoodBowlBig: 1 FoodTomato: 1 - FoodChili: 1 + FoodChiliPepper: 1 # Salads: These should be moved out of the microwave as soon as possible @@ -421,7 +421,7 @@ solids: FoodBowlBig: 1 FoodMothSaladBase: 1 - FoodChili: 1 + FoodChiliPepper: 1 FoodOnionRed: 1 FoodAmbrosiaVulgaris: 1 #Herbs @@ -438,7 +438,7 @@ FoodDoughFlat: 1 FoodCheeseSlice: 1 FoodMothBakedCorn: 1 - FoodChili: 1 + FoodChiliPepper: 1 - type: microwaveMealRecipe id: RecipeMothFiveCheesePizza diff --git a/Resources/Prototypes/Nyanotrasen/Recipes/Lathes/bluespace.yml b/Resources/Prototypes/Nyanotrasen/Recipes/Lathes/bluespace.yml deleted file mode 100644 index 443f2a03f93..00000000000 --- a/Resources/Prototypes/Nyanotrasen/Recipes/Lathes/bluespace.yml +++ /dev/null @@ -1,22 +0,0 @@ -- type: latheRecipe - id: CoreSilver - icon: - sprite: Objects/Misc/guardian_info.rsi - state: icon - result: CoreSilver - completetime: 10 - materials: - Bluespace: 500 - Silver: 1000 - Plastic: 1000 - -- type: latheRecipe - id: BluespaceCrystal - icon: - sprite: Nyanotrasen/Objects/Materials/materials.rsi - state: bluespace - result: MaterialBluespace1 - applyMaterialDiscount: false - completetime: 4 - materials: - Bluespace: 100 diff --git a/Resources/Prototypes/Nyanotrasen/Recipes/Lathes/hardsuits.yml b/Resources/Prototypes/Nyanotrasen/Recipes/Lathes/hardsuits.yml deleted file mode 100644 index 560c03db49c..00000000000 --- a/Resources/Prototypes/Nyanotrasen/Recipes/Lathes/hardsuits.yml +++ /dev/null @@ -1,21 +0,0 @@ -- type: latheRecipe - id: ClothingOuterHardsuitSyndieReverseEngineered - result: ClothingOuterHardsuitSyndieReverseEngineered - completetime: 25 - materials: - Steel: 6000 - Glass: 1500 - Uranium: 100 - Plastic: 100 - Gold: 200 - -- type: latheRecipe - id: ClothingOuterHardsuitJuggernautReverseEngineered - result: ClothingOuterHardsuitJuggernautReverseEngineered - completetime: 25 - materials: - Steel: 12000 - Glass: 3000 - Uranium: 500 - Plastic: 500 - Gold: 250 diff --git a/Resources/Prototypes/Nyanotrasen/Recipes/Reactions/psionic.yml b/Resources/Prototypes/Nyanotrasen/Recipes/Reactions/psionic.yml index 304c9b686a4..d9d2ed51b50 100644 --- a/Resources/Prototypes/Nyanotrasen/Recipes/Reactions/psionic.yml +++ b/Resources/Prototypes/Nyanotrasen/Recipes/Reactions/psionic.yml @@ -30,6 +30,6 @@ catalyst: true effects: - !type:CreateEntityReactionEffect - entity: CrystalNormality + entity: MaterialNormality1 - !type:ChangeGlimmerReactionEffect count: -10 diff --git a/Resources/Prototypes/Nyanotrasen/Roles/Jobs/Epistemics/forensicmantis.yml b/Resources/Prototypes/Nyanotrasen/Roles/Jobs/Epistemics/forensicmantis.yml index f3b882d0721..644c0bab194 100644 --- a/Resources/Prototypes/Nyanotrasen/Roles/Jobs/Epistemics/forensicmantis.yml +++ b/Resources/Prototypes/Nyanotrasen/Roles/Jobs/Epistemics/forensicmantis.yml @@ -1,24 +1,30 @@ - type: job + setPreference: false id: ForensicMantis name: job-name-mantis description: job-description-mantis playTimeTracker: JobForensicMantis - setPreference: false requirements: - !type:CharacterOverallTimeRequirement min: 18000 - !type:DepartmentTimeRequirement department: Epistemics # DeltaV - Epistemics Department replacing Science min: 3600 - # - !type:CharacterLogicOrRequirement - # requirements: - # - !type:CharacterSpeciesRequirement - # inverted: true - # species: - # - IPC - # - !type:CharacterTraitRequirement - # traits: - # - AnomalousPositronics + - !type:CharacterLogicOrRequirement + requirements: + - !type:CharacterSpeciesRequirement + inverted: true + species: + - IPC + - !type:CharacterTraitRequirement + traits: + - AnomalousPositronics + - !type:CharacterLogicOrRequirement + requirements: + - !type:CharacterSpeciesRequirement + inverted: true + species: + - Shadowkin startingGear: ForensicMantisGear icon: "JobIconForensicMantis" supervisors: job-supervisors-rd @@ -33,6 +39,7 @@ - !type:AddComponentSpecial components: - type: Psionic + powerSlots: 2 - !type:AddComponentSpecial components: - type: InnatePsionicPowers diff --git a/Resources/Prototypes/Nyanotrasen/Roles/Jobs/Wildcards/prisoner.yml b/Resources/Prototypes/Nyanotrasen/Roles/Jobs/Wildcards/prisoner.yml index 64f60fb1c40..cb95400ba54 100644 --- a/Resources/Prototypes/Nyanotrasen/Roles/Jobs/Wildcards/prisoner.yml +++ b/Resources/Prototypes/Nyanotrasen/Roles/Jobs/Wildcards/prisoner.yml @@ -1,4 +1,5 @@ - type: job + setPreference: false id: Prisoner name: job-name-prisoner description: job-description-prisoner @@ -13,7 +14,15 @@ - !type:DepartmentTimeRequirement department: Security min: 21600 - setPreference: false + - !type:CharacterLogicOrRequirement + requirements: + - !type:CharacterSpeciesRequirement + inverted: true + species: + - Shadowkin + - !type:CharacterTraitRequirement + traits: + - ShadowkinBlackeye - type: startingGear id: PrisonerGear diff --git a/Resources/Prototypes/Nyanotrasen/Species/Oni.yml b/Resources/Prototypes/Nyanotrasen/Species/Oni.yml new file mode 100644 index 00000000000..4a306a7ce7f --- /dev/null +++ b/Resources/Prototypes/Nyanotrasen/Species/Oni.yml @@ -0,0 +1,67 @@ +- type: species + id: Oni + name: species-name-oni + roundStart: true + prototype: MobOni + dollPrototype: MobOniDummy + markingLimits: MobOniMarkingLimits + sprites: MobHumanSprites + skinColoration: Hues + maleFirstNames: names_oni_male + femaleFirstNames: names_oni_female + lastNames: names_oni_location + naming: LastNoFirst + minHeight: 0.9 + defaultHeight: 1.2 + maxHeight: 1.3 + minWidth: 0.85 + defaultWidth: 1.2 + maxWidth: 1.35 + +- type: markingPoints + id: MobOniMarkingLimits + points: + Hair: + points: 1 + required: false + FacialHair: + points: 1 + required: false + HeadTop: + points: 1 + required: true + defaultMarkings: [ OniHornDoubleCurved ] + HeadSide: + points: 1 + required: false + defaultMarkings: [ PointyEarsUpwards ] + Snout: + points: 2 + required: false + Chest: + points: 1 + required: false + RightLeg: + points: 2 + required: false + RightFoot: + points: 2 + required: false + LeftLeg: + points: 2 + required: false + LeftFoot: + points: 2 + required: false + RightArm: + points: 2 + required: false + RightHand: + points: 2 + required: false + LeftArm: + points: 2 + required: false + LeftHand: + points: 2 + required: false diff --git a/Resources/Prototypes/Nyanotrasen/Stacks/materials.yml b/Resources/Prototypes/Nyanotrasen/Stacks/materials.yml deleted file mode 100644 index e8c1b98b93a..00000000000 --- a/Resources/Prototypes/Nyanotrasen/Stacks/materials.yml +++ /dev/null @@ -1,7 +0,0 @@ -- type: stack - id: Bluespace - name: bluespace - icon: { sprite: Nyanotrasen/Objects/Materials/materials.rsi, state: bluespace } - spawn: MaterialBluespace - maxCount: 5 - itemSize: 1 diff --git a/Resources/Prototypes/Nyanotrasen/Voice/speech_emotes.yml b/Resources/Prototypes/Nyanotrasen/Voice/speech_emotes.yml index fa471f3d705..f9bd3f60b45 100644 --- a/Resources/Prototypes/Nyanotrasen/Voice/speech_emotes.yml +++ b/Resources/Prototypes/Nyanotrasen/Voice/speech_emotes.yml @@ -1,6 +1,7 @@ # vocal emotes - type: emote id: Hiss + name: chat-emote-name-cathisses category: Vocal chatMessages: [ hisses ] chatTriggers: @@ -8,6 +9,7 @@ - type: emote id: Meow + name: chat-emote-name-catmeow category: Vocal chatMessages: [ meows ] chatTriggers: @@ -18,6 +20,7 @@ - type: emote id: Mew + name: chat-emote-name-catmew category: Vocal chatMessages: [ mews ] chatTriggers: @@ -25,6 +28,7 @@ - type: emote id: Growl + name: chat-emote-name-catgrowl category: Vocal chatMessages: [ growls ] chatTriggers: @@ -32,6 +36,7 @@ - type: emote id: Purr + name: chat-emote-name-catpurr category: Vocal chatMessages: [ purrs ] chatTriggers: diff --git a/Resources/Prototypes/Nyanotrasen/psionicArtifacts.yml b/Resources/Prototypes/Nyanotrasen/psionicArtifacts.yml deleted file mode 100644 index 8f952b39057..00000000000 --- a/Resources/Prototypes/Nyanotrasen/psionicArtifacts.yml +++ /dev/null @@ -1,21 +0,0 @@ -- type: weightedRandom - id: PsionicArtifactPool - weights: - ClothingHandsDispelGloves: 1 - ClothingEyesTelegnosisSpectacles: 1 - ClothingHandsGlovesColorYellowUnsulated: 1 - PonderingOrbTelepathic: 1 - ClothingShoesBootsMagBlinding: 0.5 - LidOSaws: 0.25 - BedsheetInvisibilityCloak: 0.15 - # WeaponWandPolymorphCarp: 0.05 - # WeaponWandPolymorphMonkey: 0.05 - # WeaponWandFireball: 0.025 - # WeaponWandDeath: 0.001 - # WeaponWandPolymorphDoor: 0.05 - SpawnSpellbook: 0.025 - ForceWallSpellbook: 0.025 - BlinkBook: 0.025 - SmiteBook: 0.00025 - KnockSpellbook: 0.025 - FireballSpellbook: 0.01 diff --git a/Resources/Prototypes/Nyanotrasen/psionicPowers.yml b/Resources/Prototypes/Nyanotrasen/psionicPowers.yml index 0781122b8ec..8b2911018f9 100644 --- a/Resources/Prototypes/Nyanotrasen/psionicPowers.yml +++ b/Resources/Prototypes/Nyanotrasen/psionicPowers.yml @@ -11,3 +11,9 @@ # PsionicInvisibilityPower: 0.15 MindSwapPower: 0.15 TelepathyPower: 1 + HealingWordPower: 0.85 + RevivifyPower: 0.1 + ShadeskipPower: 0.15 + TelekineticPulsePower: 0.15 + PyrokineticFlare: 0.3 + SummonImpPower: 0.15 diff --git a/Resources/Prototypes/Objectives/base_objectives.yml b/Resources/Prototypes/Objectives/base_objectives.yml index e24b26e6e86..2ab5149213a 100644 --- a/Resources/Prototypes/Objectives/base_objectives.yml +++ b/Resources/Prototypes/Objectives/base_objectives.yml @@ -103,3 +103,11 @@ id: BaseSurviveObjective components: - type: SurviveCondition + +# objective progress is controlled by a system and not the objective itself +- type: entity + abstract: true + parent: BaseObjective + id: BaseCodeObjective + components: + - type: CodeCondition diff --git a/Resources/Prototypes/Objectives/ninja.yml b/Resources/Prototypes/Objectives/ninja.yml index 0495be29355..fb94f2b3788 100644 --- a/Resources/Prototypes/Objectives/ninja.yml +++ b/Resources/Prototypes/Objectives/ninja.yml @@ -46,7 +46,7 @@ - type: entity noSpawn: true - parent: BaseNinjaObjective + parent: [BaseNinjaObjective, BaseCodeObjective] id: SpiderChargeObjective description: This bomb can be detonated in a specific location. Note that the bomb will not work anywhere else! components: @@ -54,7 +54,6 @@ icon: sprite: Objects/Weapons/Bombs/spidercharge.rsi state: icon - - type: SpiderChargeCondition - type: entity noSpawn: true @@ -70,7 +69,7 @@ - type: entity noSpawn: true - parent: BaseNinjaObjective + parent: [BaseNinjaObjective, BaseCodeObjective] id: TerrorObjective name: Call in a threat description: Use your gloves on a communication console in order to bring another threat to the station. @@ -79,4 +78,15 @@ icon: sprite: Objects/Fun/Instruments/otherinstruments.rsi state: red_phone - - type: TerrorCondition + +- type: entity + noSpawn: true + parent: [BaseNinjaObjective, BaseCodeObjective] + id: MassArrestObjective + name: Set everyone to wanted + description: Use your gloves to hack a criminal records console, setting the entire station to be wanted! + components: + - type: Objective + icon: + sprite: Objects/Weapons/Melee/stunbaton.rsi + state: stunbaton_on diff --git a/Resources/Prototypes/Objectives/objectiveGroups.yml b/Resources/Prototypes/Objectives/objectiveGroups.yml index 263494f7987..6929d1e1a47 100644 --- a/Resources/Prototypes/Objectives/objectiveGroups.yml +++ b/Resources/Prototypes/Objectives/objectiveGroups.yml @@ -40,8 +40,6 @@ EscapeShuttleObjective: 1 # DieObjective: 0.05 # DeltaV - Disable the lrp objective aka murderbone justification #HijackShuttleObjective: 0.02 - BecomePsionicObjective: 1 # Nyanotrasen - Become Psionic objective, see Resources/Prototypes/Nyanotrasen/Objectives/traitor.yml - #BecomeGolemObjective: 0.5 # Nyanotrasen - Become a golem objective, see Resources/Prototypes/Nyanotrasen/Objectives/traitor.yml - type: weightedRandom id: TraitorObjectiveGroupSocial diff --git a/Resources/Prototypes/Objectives/stealTargetGroups.yml b/Resources/Prototypes/Objectives/stealTargetGroups.yml index 59952784339..9c56881bd81 100644 --- a/Resources/Prototypes/Objectives/stealTargetGroups.yml +++ b/Resources/Prototypes/Objectives/stealTargetGroups.yml @@ -91,6 +91,13 @@ sprite: Objects/Misc/nukedisk.rsi state: icon +- type: stealTargetGroup + id: HoSAntiqueWeapon + name: head of security's personal weapon + sprite: + sprite: Objects/Weapons/Guns/Battery/pulse_pistol.rsi + state: base + # Thief Collection - type: stealTargetGroup diff --git a/Resources/Prototypes/Objectives/terminator.yml b/Resources/Prototypes/Objectives/terminator.yml deleted file mode 100644 index 1b569599a7f..00000000000 --- a/Resources/Prototypes/Objectives/terminator.yml +++ /dev/null @@ -1,40 +0,0 @@ -- type: entity - abstract: true - parent: BaseObjective - id: BaseTerminatorObjective - components: - - type: Objective - difficulty: 1 - issuer: susnet - - type: RoleRequirement - roles: - components: - - TerminatorRole - -- type: entity - noSpawn: true - parent: [BaseTerminatorObjective, BaseKillObjective] - id: TerminateObjective - description: Follow your programming and terminate the target. - components: - - type: Objective - unique: false - - type: TargetObjective - title: objective-terminate-title - - type: PickRandomPerson - - type: TerminatorTargetOverride - - type: KillPersonCondition - requireDead: true - -- type: entity - noSpawn: true - parent: BaseTerminatorObjective - id: ShutDownObjective - name: Shut down - description: Once the mission is complete die to prevent our technology from being stolen. - components: - - type: Objective - icon: - sprite: Mobs/Species/Terminator/parts.rsi - state: skull_icon - - type: DieCondition diff --git a/Resources/Prototypes/Objectives/traitor.yml b/Resources/Prototypes/Objectives/traitor.yml index d9c071c30c0..b00d12529af 100644 --- a/Resources/Prototypes/Objectives/traitor.yml +++ b/Resources/Prototypes/Objectives/traitor.yml @@ -33,6 +33,20 @@ - type: ObjectiveLimit 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 + parent: BaseTraitorStealObjective + id: HoSAntiqueWeaponStealObjective + components: + - type: Objective + difficulty: 3 # HoS will mostly be using the gun to stop you from stealing it + - type: NotJobRequirement + job: HeadOfSecurity + - type: StealCondition + verifyMapExistence: true + stealGroup: HoSAntiqueWeapon + owner: job-name-hos + # state - type: entity @@ -191,6 +205,9 @@ components: - type: StealCondition stealGroup: ClothingOuterHardsuitRd + - type: Objective + # This item must be worn or stored in a slowing duffelbag, very hard to hide. + difficulty: 3 - type: entity noSpawn: true @@ -320,4 +337,4 @@ - type: StealCondition stealGroup: SupermatterSliver objectiveNoOwnerText: objective-condition-steal-smsliver-title - descriptionText: objective-condition-steal-smsliver-description \ No newline at end of file + descriptionText: objective-condition-steal-smsliver-description diff --git a/Resources/Prototypes/Polymorphs/polymorph.yml b/Resources/Prototypes/Polymorphs/polymorph.yml index b4249f8a3ea..a1a805c74fc 100644 --- a/Resources/Prototypes/Polymorphs/polymorph.yml +++ b/Resources/Prototypes/Polymorphs/polymorph.yml @@ -75,6 +75,17 @@ inventory: Transfer revertOnDeath: true +- type: polymorph + id: SlimeMorphGeras + configuration: + entity: MobSlimesGeras + transferName: true + transferHumanoidAppearance: false + inventory: Drop + transferDamage: true + revertOnDeath: true + revertOnCrit: true + # this is a test for transferring some visual appearance stuff - type: polymorph id: TestHumanMorph @@ -164,3 +175,25 @@ revertOnDeath: true revertOnCrit: true duration: 20 + +# Polymorphs for Wizards polymorph self spell +- type: polymorph + id: WizardSpider + configuration: + entity: MobGiantSpiderWizard #Not angry so ghosts can't just take over the wizard + transferName: true + inventory: None + revertOnDeath: true + revertOnCrit: true + +- type: polymorph + id: WizardRod + configuration: + entity: ImmovableRodWizard #CLANG + transferName: true + transferDamage: false + inventory: None + duration: 1 + forced: true + revertOnCrit: false + revertOnDeath: false diff --git a/Resources/Prototypes/Procedural/Magnet/asteroid.yml b/Resources/Prototypes/Procedural/Magnet/asteroid.yml index a21b709afad..8fcd265297d 100644 --- a/Resources/Prototypes/Procedural/Magnet/asteroid.yml +++ b/Resources/Prototypes/Procedural/Magnet/asteroid.yml @@ -10,6 +10,8 @@ OrePlasma: 0.15 OreUranium: 0.15 OreArtifactFragment: 0.15 + OreBluespace: 0.1 + OreNormality: 0.1 # Large asteroids, typically 1 - type: dungeonConfig diff --git a/Resources/Prototypes/Procedural/biome_ore_templates.yml b/Resources/Prototypes/Procedural/biome_ore_templates.yml index 4a60427e305..c0001367d5c 100644 --- a/Resources/Prototypes/Procedural/biome_ore_templates.yml +++ b/Resources/Prototypes/Procedural/biome_ore_templates.yml @@ -144,3 +144,32 @@ minGroupSize: 1 maxGroupSize: 2 radius: 4 + +# Bluespace +- type: biomeMarkerLayer + id: OreBluespace + entityMask: + AsteroidRock: AsteroidRockBluespace + WallRock: WallRockBluespace + WallRockBasalt: WallRockBasaltBluespace + WallRockChromite: WallRockChromiteBluespace + WallRockSand: WallRockSandBluespace + WallRockSnow: WallRockSnowBluespace + maxCount: 6 + minGroupSize: 1 + maxGroupSize: 2 + radius: 4 + +- type: biomeMarkerLayer + id: OreNormality + entityMask: + AsteroidRock: AsteroidRockNormality + WallRock: WallRockNormality + WallRockBasalt: WallRockBasaltNormality + WallRockChromite: WallRockChromiteNormality + WallRockSand: WallRockSandNormality + WallRockSnow: WallRockSnowNormality + maxCount: 6 + minGroupSize: 1 + maxGroupSize: 2 + radius: 4 diff --git a/Resources/Prototypes/Procedural/salvage_loot.yml b/Resources/Prototypes/Procedural/salvage_loot.yml index f12e8c7ffda..b256c73dfd9 100644 --- a/Resources/Prototypes/Procedural/salvage_loot.yml +++ b/Resources/Prototypes/Procedural/salvage_loot.yml @@ -185,3 +185,17 @@ loots: - !type:BiomeMarkerLoot proto: OreArtifactFragment + +- type: salvageLoot + id: OreBluespace + guaranteed: true + loots: + - !type:BiomeMarkerLoot + proto: OreBluespace + +- type: salvageLoot + id: OreNormality + guaranteed: true + loots: + - !type:BiomeMarkerLoot + proto: OreNormality diff --git a/Resources/Prototypes/Psionics/psionics.yml b/Resources/Prototypes/Psionics/psionics.yml index b8f798d4b63..7ee6e193e37 100644 --- a/Resources/Prototypes/Psionics/psionics.yml +++ b/Resources/Prototypes/Psionics/psionics.yml @@ -52,7 +52,7 @@ name: Pyrokinesis description: pyrokinesis-power-description actions: - - ActionPyrokinesis + - ActionPyrokinesis components: - type: PyrokinesisPower initializationFeedback: pyrokinesis-power-initialization-feedback @@ -64,7 +64,7 @@ name: Metapsionic Pulse description: metapsionic-power-description actions: - - ActionMetapsionic + - ActionMetapsionic components: - type: MetapsionicPower initializationFeedback: metapsionic-power-initialization-feedback @@ -77,7 +77,7 @@ name: Psionic Regeneration description: psionic-regeneration-power-description actions: - - ActionPsionicRegeneration + - ActionPsionicRegeneration components: - type: PsionicRegenerationPower initializationFeedback: psionic-regeneration-power-initialization-feedback @@ -90,7 +90,7 @@ name: Telegnosis description: telegnosis-power-description actions: - - ActionTelegnosis + - ActionTelegnosis components: - type: TelegnosisPower initializationFeedback: telegnosis-power-initialization-feedback @@ -103,7 +103,7 @@ name: Psionic Invisibility description: psionic-invisibility-power-description actions: - - ActionDispel + - ActionDispel components: - type: PsionicInvisibilityPower initializationFeedback: psionic-invisibility-power-initialization-feedback @@ -119,6 +119,7 @@ - type: UniversalLanguageSpeaker initializationFeedback: xenoglossy-power-initialization-feedback metapsionicFeedback: psionic-language-power-feedback # Reuse for telepathy, clairaudience, etc + powerSlotCost: 0 - type: psionicPower id: PsychognomyPower #i.e. reverse physiognomy @@ -128,6 +129,7 @@ - type: Psychognomist initializationFeedback: psychognomy-power-initialization-feedback metapsionicFeedback: psionic-language-power-feedback + powerSlotCost: 0 - type: psionicPower id: TelepathyPower @@ -137,3 +139,137 @@ - type: Telepathy initializationFeedback: telepathy-power-initialization-feedback metapsionicFeedback: psionic-language-power-feedback # Reuse for telepathy, clairaudience, etc + powerSlotCost: 0 + +- type: psionicPower + id: HealingWordPower + name: HealingWord + description: healing-word-power-description + actions: + - ActionHealingWord + initializationFeedback: healing-word-power-initialization-feedback + metapsionicFeedback: healing-word-power-feedback + amplificationModifier: 0.5 + dampeningModifier: 0.5 + +- type: psionicPower + id: RevivifyPower + name: Revivify + description: revivify-power-description + actions: + - ActionRevivify + initializationFeedback: revivify-power-initialization-feedback + metapsionicFeedback: revivify-power-feedback + amplificationModifier: 2.5 # An extremely rare and dangerous power + powerSlotCost: 2 + +- type: psionicPower + id: LowAmplification + name: LowAmplification + description: low-amplification-power-description + amplificationModifier: -0.25 + powerSlotCost: 0 + +- type: psionicPower + id: HighAmplification + name: HighAmplification + description: high-amplification-power-description + amplificationModifier: 0.25 + powerSlotCost: 0 + +- type: psionicPower + id: PowerOverwhelming + name: PowerOverwhelming + description: power-overwhelming-power-description + metapsionicFeedback: power-overwhelming-power-feedback + amplificationModifier: 2 + powerSlotCost: 2 + +- type: psionicPower + id: LowDampening + name: LowDampening + description: low-dampening-power-description + dampeningModifier: -0.25 + powerSlotCost: 0 + +- type: psionicPower + id: HighDampening + name: HighDampening + description: high-dampening-power-description + dampeningModifier: 0.25 + powerSlotCost: 0 + +- type: psionicPower + id: ShadeskipPower + name: Shadeskip + description: shadeskip-power-description + actions: + - ActionShadeskip + initializationFeedback: shadeskip-power-initialization-feedback + metapsionicFeedback: shadeskip-power-metapsionic-feedback + amplificationModifier: 1 + +- type: psionicPower + id: TelekineticPulsePower + name: Telekinetic Pulse + description: telekinetic-pulse-power-description + actions: + - ActionTelekineticPulse + initializationFeedback: telekinetic-pulse-power-initialization-feedback + metapsionicFeedback: telekinetic-pulse-power-metapsionic-feedback + amplificationModifier: 1 + +- type: psionicPower + id: ShadowkinPowers + name: Shadowkin Powers + description: shadowkin-powers-description + actions: + - ActionShadowkinShadeskip + - ActionDarkSwap + powerSlotCost: 1 + +- type: psionicPower + id: EtherealVisionPower + name: Ethereal Vision + description: ethereal-vision-powers-description + components: + - type: ShowEthereal + powerSlotCost: 0 + +- type: psionicPower + id: DarkSwapPower + name: DarkSwap + description: darkswap-power-description + actions: + - ActionDarkSwap + powerSlotCost: 1 + +- type: psionicPower + id: PyrokineticFlare + name: Pyrokinetic Flare + description: pyrokinetic-flare-power-description + actions: + - ActionPyrokineticFlare + powerSlotCost: 1 + initializationFeedback: pyrokinetic-flare-power-initialization-feedback + metapsionicFeedback: pyrokinetic-flare-power-metapsionic-feedback + amplificationModifier: 0.25 + +- type: psionicPower + id: SummonImpPower + name: Summon Imp + description: summon-imp-power-description + actions: + - ActionSummonImp + powerSlotCost: 1 + initializationFeedback: summon-imp-power-initialization-feedback + amplificationModifier: 0.5 + dampeningModifier: 0.5 + +- type: psionicPower + id: SummonRemiliaPower + name: Summon Remilia + description: summon-imp-power-description + actions: + - ActionSummonRemilia + powerSlotCost: 0 diff --git a/Resources/Prototypes/Reagents/Consumable/Drink/alcohol.yml b/Resources/Prototypes/Reagents/Consumable/Drink/alcohol.yml index d9e57d5b803..f374a3debf1 100644 --- a/Resources/Prototypes/Reagents/Consumable/Drink/alcohol.yml +++ b/Resources/Prototypes/Reagents/Consumable/Drink/alcohol.yml @@ -39,6 +39,7 @@ metamorphicMaxFillLevels: 5 metamorphicFillBaseName: fill- metamorphicChangeColor: false + fizziness: 0.6 - type: reagent id: Beer @@ -55,6 +56,7 @@ metamorphicMaxFillLevels: 6 metamorphicFillBaseName: fill- metamorphicChangeColor: true + fizziness: 0.6 - type: reagent id: BlueCuracao @@ -255,6 +257,12 @@ Cold: -1.60 - !type:Drunk boozePower: 2 + - !type:ChemAddMoodlet + moodPrototype: EthanolBenefit + conditions: + - !type:ReagentThreshold + reagent: Ethanol + min: 5 - type: reagent id: Gin @@ -418,7 +426,7 @@ metamorphicSprite: sprite: Objects/Consumable/Drinks/tequillaglass.rsi state: icon_empty - metamorphicMaxFillLevels: 4 + metamorphicMaxFillLevels: 3 metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: @@ -546,6 +554,7 @@ - !type:AdjustReagent reagent: Ethanol amount: 0.12 + fizziness: 0.8 # Mixed Alcohol @@ -811,6 +820,7 @@ - !type:AdjustReagent reagent: Ethanol amount: 0.13 + fizziness: 0.3 - type: reagent id: BlackRussian @@ -966,6 +976,7 @@ - !type:AdjustReagent reagent: Ethanol amount: 0.13 + fizziness: 0.2 - type: reagent id: DemonsBlood @@ -989,6 +1000,7 @@ - !type:AdjustReagent reagent: Ethanol amount: 0.10 + fizziness: 0.3 - type: reagent id: DevilsKiss @@ -1089,6 +1101,7 @@ - !type:AdjustReagent reagent: Ethanol amount: 0.02 + fizziness: 0.15 - type: reagent id: GargleBlaster @@ -1135,6 +1148,7 @@ - !type:AdjustReagent reagent: Ethanol amount: 0.15 + fizziness: 0.4 - type: reagent id: GinTonic @@ -1158,6 +1172,7 @@ - !type:AdjustReagent reagent: Ethanol amount: 0.15 + fizziness: 0.4 - type: reagent id: Gildlager @@ -1259,6 +1274,7 @@ metamorphicMaxFillLevels: 6 metamorphicFillBaseName: fill- metamorphicChangeColor: false + fizziness: 0.6 - type: reagent id: IrishCarBomb @@ -1412,6 +1428,7 @@ metamorphicMaxFillLevels: 2 metamorphicFillBaseName: fill- metamorphicChangeColor: false + fizziness: 0.7 - type: reagent id: Margarita @@ -1465,6 +1482,7 @@ metamorphicMaxFillLevels: 5 metamorphicFillBaseName: fill- metamorphicChangeColor: true + fizziness: 0.4 - type: reagent id: Mojito @@ -1488,6 +1506,7 @@ - !type:AdjustReagent reagent: Ethanol amount: 0.10 + fizziness: 0.3 - type: reagent id: Moonshine @@ -1497,6 +1516,12 @@ physicalDesc: reagent-physical-desc-strong-smelling flavor: moonshine color: "#d1d7d155" + metamorphicSprite: + sprite: Objects/Consumable/Drinks/moonshineglass.rsi + state: icon_empty + metamorphicMaxFillLevels: 6 + metamorphicFillBaseName: fill- + metamorphicChangeColor: false metabolisms: Drink: effects: @@ -1592,6 +1617,7 @@ metamorphicMaxFillLevels: 5 metamorphicFillBaseName: fill- metamorphicChangeColor: true + fizziness: 0.4 - type: reagent id: PinaColada @@ -1753,6 +1779,7 @@ - !type:AdjustReagent reagent: Ethanol amount: 0.03 + fizziness: 0.3 - type: reagent id: SuiDream @@ -1776,6 +1803,7 @@ - !type:AdjustReagent reagent: Ethanol amount: 0.13 + fizziness: 0.2 - type: reagent id: SyndicateBomb @@ -1799,6 +1827,7 @@ - !type:AdjustReagent reagent: Ethanol amount: 0.095 + fizziness: 0.6 - type: reagent id: TequilaSunrise @@ -1845,6 +1874,7 @@ - !type:AdjustReagent reagent: Ethanol amount: 0.13 + fizziness: 0.2 - type: reagent id: ThreeMileIsland @@ -1940,6 +1970,7 @@ - !type:AdjustReagent reagent: Ethanol amount: 0.13 + fizziness: 0.4 - type: reagent id: WhiskeyCola @@ -1963,6 +1994,7 @@ - !type:AdjustReagent reagent: Ethanol amount: 0.013 + fizziness: 0.3 - type: reagent id: WhiskeySoda @@ -1986,6 +2018,7 @@ - !type:AdjustReagent reagent: Ethanol amount: 0.13 + fizziness: 0.4 - type: reagent id: WhiteGilgamesh @@ -2003,6 +2036,7 @@ - !type:AdjustReagent reagent: Ethanol amount: 0.04 + fizziness: 0.5 - type: reagent id: WhiteRussian @@ -2026,3 +2060,165 @@ - !type:AdjustReagent reagent: Ethanol amount: 0.33 + +- type: reagent + id: VodkaRedBool + name: reagent-name-vodka-red-bool + parent: BaseAlcohol + desc: reagent-desc-vodka-red-bool + physicalDesc: reagent-physical-desc-strong-smelling + flavor: vodkaredbool + color: "#c4c27655" + metamorphicSprite: + sprite: Objects/Consumable/Drinks/ginvodkaglass.rsi + state: icon_empty + metamorphicMaxFillLevels: 4 + metamorphicFillBaseName: fill- + metamorphicChangeColor: true + metabolisms: + Drink: + effects: + - !type:SatiateThirst + factor: 1 + - !type:AdjustReagent + reagent: Ethanol + amount: 0.10 + - !type:AdjustReagent + reagent: Theobromine + amount: 0.05 + fizziness: 0.25 + +- type: reagent + id: XenoBasher + name: reagent-name-xeno-basher + parent: BaseAlcohol + desc: reagent-desc-xeno-basher + physicalDesc: reagent-physical-desc-fizzy-and-creamy + flavor: xenobasher + color: "#4d6600" + metamorphicSprite: + sprite: Objects/Consumable/Drinks/xenobasher.rsi + state: icon_empty + metamorphicMaxFillLevels: 2 + metamorphicFillBaseName: fill- + metamorphicChangeColor: false + metabolisms: + Drink: + effects: + - !type:SatiateThirst + factor: 1 + - !type:AdjustReagent + reagent: Ethanol + amount: 0.15 + - !type:AdjustReagent + reagent: Theobromine + amount: 0.05 + fizziness: 0.15 + +- type: reagent + id: IrishBool + name: reagent-name-irish-bool + parent: BaseAlcohol + desc: reagent-desc-irish-bool + physicalDesc: reagent-physical-desc-bubbly + flavor: irishbool + color: "#71672e99" + metamorphicSprite: + sprite: Objects/Consumable/Drinks/beerglass.rsi + state: icon_empty + metamorphicMaxFillLevels: 6 + metamorphicFillBaseName: fill- + metamorphicChangeColor: true + metabolisms: + Drink: + effects: + - !type:SatiateThirst + factor: 1 + - !type:AdjustReagent + reagent: Ethanol + amount: 0.10 + - !type:AdjustReagent + reagent: Theobromine + amount: 0.05 + fizziness: 0.15 + +- type: reagent + id: BudgetInsulsDrink + name: reagent-name-budget-insuls + parent: BaseAlcohol + desc: reagent-desc-budget-insuls + physicalDesc: reagent-physical-desc-strong-smelling + flavor: budgetinsulsdrink + color: "#dede73" + metamorphicSprite: + sprite: Objects/Consumable/Drinks/budgetinsulsdrink.rsi + state: icon_empty + metamorphicMaxFillLevels: 3 + metamorphicFillBaseName: fill- + metamorphicChangeColor: false + metabolisms: + Drink: + effects: + - !type:SatiateThirst + factor: 1 + - !type:AdjustReagent + reagent: Ethanol + amount: 0.15 + - !type:AdjustReagent + reagent: Theobromine + amount: 0.05 + fizziness: 0.25 + +- type: reagent + id: WatermelonWakeup + name: reagent-name-watermelon-wakeup + parent: BaseAlcohol + desc: reagent-desc-watermelon-wakeup + physicalDesc: reagent-physical-desc-sweet + flavor: watermelonwakeup + color: "#d49dca" + metamorphicSprite: + sprite: Objects/Consumable/Drinks/champagneglass.rsi + state: icon_empty + metamorphicMaxFillLevels: 4 + metamorphicFillBaseName: fill- + metamorphicChangeColor: true + metabolisms: + Drink: + effects: + - !type:SatiateThirst + factor: 1 + - !type:AdjustReagent + reagent: Ethanol + amount: 0.07 + - !type:AdjustReagent + reagent: Theobromine + amount: 0.05 + fizziness: 0.15 + +- type: reagent + id: Rubberneck + name: reagent-name-rubberneck + parent: BaseAlcohol + desc: reagent-desc-rubberneck + physicalDesc: reagent-physical-desc-strong-smelling + flavor: rubberneck + color: "#f0d74a" + metamorphicSprite: + sprite: Objects/Consumable/Drinks/rubberneck.rsi + state: icon_empty + metamorphicMaxFillLevels: 3 + metamorphicFillBaseName: fill- + metamorphicChangeColor: false + metabolisms: + Drink: + effects: + - !type:SatiateThirst + factor: 1 + - !type:AdjustReagent + reagent: Ethanol + amount: 0.15 + - !type:AdjustReagent + reagent: Theobromine + amount: 0.05 + fizziness: 0.25 diff --git a/Resources/Prototypes/Reagents/Consumable/Drink/base_drink.yml b/Resources/Prototypes/Reagents/Consumable/Drink/base_drink.yml index 9984b4c0cf6..19a5e1bf8f1 100644 --- a/Resources/Prototypes/Reagents/Consumable/Drink/base_drink.yml +++ b/Resources/Prototypes/Reagents/Consumable/Drink/base_drink.yml @@ -40,6 +40,7 @@ collection: FootstepSticky params: volume: 6 + fizziness: 0.5 - type: reagent id: BaseAlcohol @@ -75,4 +76,4 @@ footstepSound: collection: FootstepSticky params: - volume: 6 \ No newline at end of file + volume: 6 diff --git a/Resources/Prototypes/Reagents/Consumable/Drink/drinks.yml b/Resources/Prototypes/Reagents/Consumable/Drink/drinks.yml index 5c09b3c909b..52a01d973f6 100644 --- a/Resources/Prototypes/Reagents/Consumable/Drink/drinks.yml +++ b/Resources/Prototypes/Reagents/Consumable/Drink/drinks.yml @@ -15,6 +15,12 @@ - !type:AdjustReagent reagent: Theobromine amount: 0.05 + metamorphicSprite: + sprite: Objects/Consumable/Drinks/coffeeglass.rsi + state: icon_empty + metamorphicMaxFillLevels: 4 + metamorphicFillBaseName: fill- + metamorphicChangeColor: false - type: reagent id: HotCocoa @@ -100,9 +106,9 @@ flavor: tea color: "#7EB626" metamorphicSprite: - sprite: Objects/Consumable/Drinks/glass_green.rsi + sprite: Objects/Consumable/Drinks/greenteaglass.rsi state: icon_empty - metamorphicMaxFillLevels: 5 + metamorphicMaxFillLevels: 4 metamorphicFillBaseName: fill- metamorphicChangeColor: false @@ -149,7 +155,7 @@ flavor: icedtea color: "#5B821B" metamorphicSprite: - sprite: Objects/Consumable/Drinks/glass_green.rsi + sprite: Objects/Consumable/Drinks/icedgreenteaglass.rsi state: icon_empty metamorphicMaxFillLevels: 5 metamorphicFillBaseName: fill- @@ -322,6 +328,7 @@ damage: types: Poison: 1 + fizziness: 0.5 - type: reagent id: SodaWater @@ -331,6 +338,7 @@ physicalDesc: reagent-physical-desc-fizzy flavor: fizzy color: "#619494" + fizziness: 0.8 - type: reagent id: SoyLatte @@ -364,6 +372,12 @@ - !type:AdjustReagent reagent: Theobromine amount: 0.05 + metamorphicSprite: + sprite: Objects/Consumable/Drinks/teaglass.rsi + state: icon_empty + metamorphicMaxFillLevels: 4 + metamorphicFillBaseName: fill- + metamorphicChangeColor: false - type: reagent id: TonicWater @@ -373,6 +387,13 @@ physicalDesc: reagent-physical-desc-fizzy flavor: tonicwater color: "#0064C8" + fizziness: 0.4 + metamorphicSprite: + sprite: Objects/Consumable/Drinks/tonicglass.rsi + state: icon_empty + metamorphicMaxFillLevels: 5 + metamorphicFillBaseName: fill- + metamorphicChangeColor: false - type: reagent id: Water @@ -405,6 +426,12 @@ plantMetabolism: - !type:PlantAdjustWater amount: 1 + metamorphicSprite: + sprite: Objects/Consumable/Drinks/iceglass.rsi + state: icon_empty + metamorphicMaxFillLevels: 3 + metamorphicFillBaseName: fill- + metamorphicChangeColor: false - type: reagent id: DryRamen @@ -467,6 +494,7 @@ effects: - !type:SatiateThirst factor: 1 + fizziness: 0.3 - type: reagent id: Posca @@ -491,6 +519,7 @@ metamorphicMaxFillLevels: 3 metamorphicFillBaseName: fill- metamorphicChangeColor: false + fizziness: 0.3 - type: reagent id: Rewriter @@ -506,6 +535,7 @@ metamorphicMaxFillLevels: 5 metamorphicFillBaseName: fill- metamorphicChangeColor: true + fizziness: 0.3 - type: reagent id: Mopwata diff --git a/Resources/Prototypes/Reagents/Consumable/Drink/juice.yml b/Resources/Prototypes/Reagents/Consumable/Drink/juice.yml index ee1492b45e2..c42791fa8fe 100644 --- a/Resources/Prototypes/Reagents/Consumable/Drink/juice.yml +++ b/Resources/Prototypes/Reagents/Consumable/Drink/juice.yml @@ -63,6 +63,12 @@ physicalDesc: reagent-physical-desc-citric flavor: sour color: "#fff690" + metamorphicSprite: + sprite: Objects/Consumable/Drinks/lemonjuiceglass.rsi + state: icon_empty + metamorphicMaxFillLevels: 5 + metamorphicFillBaseName: fill- + metamorphicChangeColor: false - type: reagent id: JuiceLime @@ -89,6 +95,12 @@ physicalDesc: reagent-physical-desc-citric flavor: orange color: "#E78108" + metamorphicSprite: + sprite: Objects/Consumable/Drinks/orangejuiceglass.rsi + state: icon_empty + metamorphicMaxFillLevels: 5 + metamorphicFillBaseName: fill- + metamorphicChangeColor: false - type: reagent id: JuicePineapple @@ -125,3 +137,9 @@ physicalDesc: reagent-physical-desc-sweet flavor: watermelon color: "#EF3520" + metamorphicSprite: + sprite: Objects/Consumable/Drinks/watermelonglass.rsi + state: icon_empty + metamorphicMaxFillLevels: 4 + metamorphicFillBaseName: fill- + metamorphicChangeColor: false diff --git a/Resources/Prototypes/Reagents/Consumable/Drink/soda.yml b/Resources/Prototypes/Reagents/Consumable/Drink/soda.yml index ba5adc4f2ae..a8ca013b26e 100644 --- a/Resources/Prototypes/Reagents/Consumable/Drink/soda.yml +++ b/Resources/Prototypes/Reagents/Consumable/Drink/soda.yml @@ -7,6 +7,29 @@ flavor: soda color: "#6c2828" recognizable: true + metamorphicSprite: + sprite: Objects/Consumable/Drinks/colaglass.rsi + state: icon_empty + metamorphicMaxFillLevels: 5 + metamorphicFillBaseName: fill- + metamorphicChangeColor: false + +- type: reagent + id: RoyRogers + name: reagent-name-roy-rogers + parent: BaseSoda + desc: reagent-desc-roy-rogers + physicalDesc: reagent-physical-desc-sweet + flavor: cola + color: "#262019" + metamorphicSprite: + sprite: Objects/Consumable/Drinks/royrogers.rsi + state: icon + metabolisms: + Drink: + effects: + - !type:SatiateThirst + factor: 4 - type: reagent id: RoyRogers @@ -42,6 +65,12 @@ physicalDesc: reagent-physical-desc-fizzy flavor: drgibb color: "#102000" + metamorphicSprite: + sprite: Objects/Consumable/Drinks/dr_gibb_glass.rsi + state: icon_empty + metamorphicMaxFillLevels: 5 + metamorphicFillBaseName: fill- + metamorphicChangeColor: false - type: reagent id: EnergyDrink @@ -58,7 +87,8 @@ factor: 2 - !type:AdjustReagent reagent: Theobromine - amount: 0.05 + amount: 0.1 + fizziness: 0.4 - type: reagent id: GrapeSoda @@ -84,6 +114,7 @@ metamorphicMaxFillLevels: 5 metamorphicFillBaseName: fill- metamorphicChangeColor: true + fizziness: 0 - type: reagent id: LemonLime @@ -102,6 +133,7 @@ physicalDesc: reagent-physical-desc-fizzy flavor: pwrgamesoda color: "#9385bf" + fizziness: 0.9 # gamers crave the fizz - type: reagent id: RootBeer @@ -132,6 +164,36 @@ metamorphicMaxFillLevels: 7 metamorphicFillBaseName: fill- metamorphicChangeColor: false + fizziness: 0.4 + +- type: reagent + id: SolDry + name: reagent-name-sol-dry + parent: BaseSoda + desc: reagent-desc-sol-dry + physicalDesc: reagent-physical-desc-fizzy + flavor: gingersoda + color: "#ccb87e" + metamorphicSprite: + sprite: Objects/Consumable/Drinks/sol_dry_glass.rsi + state: icon + +- type: reagent + id: ShirleyTemple + name: reagent-name-shirley-temple + parent: BaseSoda + desc: reagent-desc-shirley-temple + physicalDesc: reagent-physical-desc-fizzy + flavor: sweet + color: "#af2221" + metamorphicSprite: + sprite: Objects/Consumable/Drinks/shirleytemple.rsi + state: icon + metabolisms: + Drink: + effects: + - !type:SatiateThirst + factor: 4 - type: reagent id: SolDry @@ -170,6 +232,12 @@ physicalDesc: reagent-physical-desc-fizzy flavor: sodacitrus color: "#a6fa5a" + metamorphicSprite: + sprite: Objects/Consumable/Drinks/space_mountain_wind_glass.rsi + state: icon_empty + metamorphicMaxFillLevels: 5 + metamorphicFillBaseName: fill- + metamorphicChangeColor: false - type: reagent id: SpaceUp @@ -179,6 +247,12 @@ physicalDesc: reagent-physical-desc-fizzy flavor: spaceup color: "#e3e3e37d" + metamorphicSprite: + sprite: Objects/Consumable/Drinks/space-up_glass.rsi + state: icon_empty + metamorphicMaxFillLevels: 6 + metamorphicFillBaseName: fill- + metamorphicChangeColor: false - type: reagent id: Starkist diff --git a/Resources/Prototypes/Reagents/Consumable/Food/food.yml b/Resources/Prototypes/Reagents/Consumable/Food/food.yml index 03ebf7cc321..c9625c663ca 100644 --- a/Resources/Prototypes/Reagents/Consumable/Food/food.yml +++ b/Resources/Prototypes/Reagents/Consumable/Food/food.yml @@ -93,6 +93,12 @@ amount: 2 - !type:PlantAdjustPests amount: 2 + metamorphicSprite: + sprite: Objects/Consumable/Drinks/sugarglass.rsi + state: icon_empty + metamorphicMaxFillLevels: 7 + metamorphicFillBaseName: fill- + metamorphicChangeColor: false - type: reagent id: PumpkinFlesh #Just so pumpkins spill orange stuff when smashed @@ -100,4 +106,4 @@ name: reagent-name-pumpkin-flesh desc: reagent-desc-pumpkin-flesh flavor: pumpkin - color: "#fc9300" \ No newline at end of file + color: "#fc9300" diff --git a/Resources/Prototypes/Reagents/Materials/materials.yml b/Resources/Prototypes/Reagents/Materials/materials.yml index fa51608a224..f56a712cd8e 100644 --- a/Resources/Prototypes/Reagents/Materials/materials.yml +++ b/Resources/Prototypes/Reagents/Materials/materials.yml @@ -116,3 +116,21 @@ icon: { sprite: Objects/Materials/ore.rsi, state: coal } color: "#404040" price: 0 + +- type: material + id: Bluespace + stackEntity: MaterialBluespace1 + name: materials-bluespace + unit: materials-unit-piece + icon: { sprite: Objects/Materials/materials.rsi, state: bluespace } + color: "#53a9ff" + price: 7.5 + +- type: material + id: Normality + stackEntity: MaterialNormality1 + name: materials-normality + unit: materials-unit-piece + icon: { sprite: Objects/Materials/materials.rsi, state: normality } + color: "#53a9ff" + price: 7.5 diff --git a/Resources/Prototypes/Reagents/Materials/ores.yml b/Resources/Prototypes/Reagents/Materials/ores.yml index 18f1d9ebb3a..7b887b2f43c 100644 --- a/Resources/Prototypes/Reagents/Materials/ores.yml +++ b/Resources/Prototypes/Reagents/Materials/ores.yml @@ -67,4 +67,22 @@ unit: materials-unit-chunk icon: { sprite: Objects/Materials/ore.rsi, state: salt } color: "#f5e7d7" - price: 0.075 \ No newline at end of file + price: 0.075 + +- type: material + id: RawBluespace + stackEntity: BluespaceOre1 + name: materials-raw-bluespace + unit: materials-unit-piece + icon: { sprite: Objects/Materials/ore.rsi, state: bluespace } + color: "#53a9ff" + price: 7.5 + +- type: material + id: RawNormality + stackEntity: NormalityOre1 + name: materials-raw-normality + unit: materials-unit-piece + icon: { sprite: Objects/Materials/ore.rsi, state: normality } + color: "#53a9ff" + price: 7.5 diff --git a/Resources/Prototypes/Reagents/biological.yml b/Resources/Prototypes/Reagents/biological.yml index 5c0cef314ca..4c1341ea7db 100644 --- a/Resources/Prototypes/Reagents/biological.yml +++ b/Resources/Prototypes/Reagents/biological.yml @@ -18,7 +18,7 @@ Drink: effects: - !type:SatiateThirst - factor: 1.5 + factor: 0.5 conditions: - !type:OrganType type: Human @@ -39,7 +39,7 @@ - !type:OrganType type: Vampiric reagent: Protein - amount: 0.15 + amount: 0.125 # See below - !type:AdjustReagent conditions: - !type:OrganType @@ -50,7 +50,11 @@ effects: - !type:AdjustReagent reagent: UncookedAnimalProteins - amount: 0.5 + amount: 0.125 # 0.25 proteins for 1u of blood - restores 0.75 hunger, adds 0.25 blood per unit + conditions: + - !type:OrganType + type: Vampiric + shouldHave: false Medicine: effects: - !type:HealthChange @@ -99,7 +103,7 @@ # Delicious! effects: - !type:SatiateHunger - factor: 1.5 + factor: 1 footstepSound: collection: FootstepBlood params: @@ -123,9 +127,9 @@ # Sweet! effects: - !type:SatiateHunger - factor: 1 + factor: 0.5 - !type:SatiateThirst - factor: 1 + factor: 0.5 footstepSound: collection: FootstepBlood params: diff --git a/Resources/Prototypes/Reagents/botany.yml b/Resources/Prototypes/Reagents/botany.yml index a03c3826a4d..cdd19dc308d 100644 --- a/Resources/Prototypes/Reagents/botany.yml +++ b/Resources/Prototypes/Reagents/botany.yml @@ -222,6 +222,9 @@ - !type:OrganType type: Rat shouldHave: false + - !type:OrganType + type: Vox + shouldHave: false - !type:ReagentThreshold reagent: Ammonia min: 0.8 @@ -247,6 +250,13 @@ groups: Brute: -5 Burn: -5 + types: + Bloodloss: -5 + - !type:Oxygenate # ammonia displaces nitrogen in vox blood + conditions: + - !type:OrganType + type: Vox + factor: -4 - type: reagent diff --git a/Resources/Prototypes/Reagents/gases.yml b/Resources/Prototypes/Reagents/gases.yml index 9cb73fffb85..06fb2b269b6 100644 --- a/Resources/Prototypes/Reagents/gases.yml +++ b/Resources/Prototypes/Reagents/gases.yml @@ -35,6 +35,25 @@ ratios: CarbonDioxide: 1.0 Oxygen: -1.0 + - !type:HealthChange + conditions: + - !type:OrganType + type: Vox + scaleByQuantity: true + ignoreResistances: true + damage: + types: + Poison: + 7 + - !type:AdjustAlert + alertType: Toxins + conditions: + - !type:ReagentThreshold + min: 0.5 + - !type:OrganType + type: Vox + clear: true + time: 5 - type: reagent id: Plasma @@ -142,6 +161,9 @@ - !type:OrganType type: Plant shouldHave: false + - !type:OrganType + type: Vox + shouldHave: false # Don't want people to get toxin damage from the gas they just # exhaled, right? - !type:ReagentThreshold @@ -194,7 +216,7 @@ - !type:OrganType type: Vox ratios: - CarbonDioxide: 1.0 + Ammonia: 1.0 Nitrogen: -1.0 - !type:ModifyLungGas conditions: diff --git a/Resources/Prototypes/Reagents/medicine.yml b/Resources/Prototypes/Reagents/medicine.yml index dfe96359e68..6b441711e1b 100644 --- a/Resources/Prototypes/Reagents/medicine.yml +++ b/Resources/Prototypes/Reagents/medicine.yml @@ -11,16 +11,20 @@ metabolismRate: 0.1 effects: - !type:GenericStatusEffect - key: PsionicallyInsulated #Nyano - Summary: makes the user psionically insulated from effects. - component: PsionicInsulation #Nyano - Summary: see above. + key: PsionicallyInsulated + component: PsionicInsulation type: Add + time: 900 - !type:GenericStatusEffect key: Stutter component: ScrambledAccent + type: Add + time: 900 - !type:GenericStatusEffect - key: PsionicsDisabled #Nyano - Summary: disables psinoics from being used by the wearer. - component: PsionicsDisabled #Nyano - Summary: see above. + key: PsionicsDisabled + component: PsionicsDisabled type: Add + time: 900 - !type:Drunk slurSpeech: false boozePower: 20 @@ -1121,6 +1125,27 @@ - !type:ReagentThreshold min: 12 +- type: reagent + id: Opporozidone #Name based of an altered version of the startreck chem "Opporozine" + name: reagent-name-opporozidone + group: Medicine + desc: reagent-desc-opporozidone + physicalDesc: reagent-physical-desc-sickly + flavor: acid + color: "#b5e36d" + worksOnTheDead: true + metabolisms: + Medicine: + effects: + - !type:ReduceRotting + seconds: 20 + conditions: + #Patient must be dead and in a cryo tube (or something cold) + - !type:Temperature + max: 150.0 + - !type:MobStateCondition + mobstate: Dead + - type: reagent id: Necrosol name: reagent-name-necrosol @@ -1171,3 +1196,67 @@ Heat: -3.0 Shock: -3.0 Caustic: -1.0 + +- type: reagent + id : Mannitol # currently this is just a way to create psicodine + name: reagent-name-mannitol + group: Medicine + desc: reagent-desc-mannitol + physicalDesc: reagent-physical-desc-opaque + flavor: sweet + color: "#A0A0A0" + metabolisms: + Medicine: + effects: + - !type:PopupMessage + conditions: + - !type:ReagentThreshold + min: 15 + type: Local + visualType: Medium + messages: [ "mannitol-effect-enlightened" ] + probability: 0.2 + +- type: reagent + id: Psicodine + name: reagent-name-psicodine + group: Medicine + desc: reagent-desc-psicodine + physicalDesc: reagent-physical-desc-shiny + flavor: bitter + color: "#07E79E" + metabolisms: + Medicine: + effects: + - !type:HealthChange + conditions: + - !type:ReagentThreshold + min: 30 + damage: + types: + Poison: 2 + - !type:GenericStatusEffect + conditions: + - !type:ReagentThreshold + min: 30 + key: SeeingRainbows + component: SeeingRainbows + type: Add + time: 8 + refresh: false + - !type:GenericStatusEffect + key: Jitter + time: 2.0 + type: Remove + - !type:GenericStatusEffect + key: Drunk + time: 6.0 + type: Remove + - !type:PopupMessage # we dont have sanity/mood so this will have to do + type: Local + visualType: Medium + messages: + - "psicodine-effect-fearless" + - "psicodine-effect-anxieties-wash-away" + - "psicodine-effect-at-peace" + probability: 0.2 diff --git a/Resources/Prototypes/Reagents/narcotics.yml b/Resources/Prototypes/Reagents/narcotics.yml index ca85fd15b34..ebb8b0fc43b 100644 --- a/Resources/Prototypes/Reagents/narcotics.yml +++ b/Resources/Prototypes/Reagents/narcotics.yml @@ -182,25 +182,6 @@ time: 16 refresh: false -- type: reagent - id: THCOil # deprecated in favor of THC, preserved here for forks - name: reagent-name-thc-oil - group: Narcotics - desc: reagent-desc-thc-oil - physicalDesc: reagent-physical-desc-skunky - flavor: bitter - flavorMinimum: 0.05 - color: "#DAA520" - metabolisms: - Narcotic: - effects: - - !type:GenericStatusEffect - key: SeeingRainbows - component: SeeingRainbows - type: Add - time: 16 - refresh: false - - type: reagent id: Nicotine name: reagent-name-nicotine @@ -270,6 +251,12 @@ - !type:ReagentThreshold reagent: SpaceDrugs min: 15 + - !type:ChemAddMoodlet + moodPrototype: SpaceDrugsBenefit + conditions: + - !type:ReagentThreshold + reagent: SpaceDrugs + min: 5 - type: reagent id: Bananadine @@ -417,3 +404,53 @@ conditions: - !type:ReagentThreshold min: 20 + +- type: reagent + id: Happiness + name: reagent-name-happiness + group: Narcotics + desc: reagent-desc-happiness + physicalDesc: reagent-physical-desc-soothing + flavor: paintthinner + color: "#EE35FF" + metabolisms: + Narcotic: + effects: + - !type:Emote + emote: Laugh + showInChat: true + probability: 0.1 + conditions: + - !type:ReagentThreshold + max: 20 + - !type:Emote + emote: Whistle + showInChat: true + probability: 0.1 + conditions: + - !type:ReagentThreshold + max: 20 + - !type:Emote + emote: Crying + showInChat: true + probability: 0.1 + conditions: + - !type:ReagentThreshold + min: 20 + - !type:PopupMessage # we dont have sanity/mood so this will have to do + type: Local + visualType: Medium + messages: + - "psicodine-effect-fearless" + - "psicodine-effect-anxieties-wash-away" + - "psicodine-effect-at-peace" + probability: 0.2 + conditions: + - !type:ReagentThreshold + max: 20 + - !type:GenericStatusEffect + key: SeeingRainbows + component: SeeingRainbows + type: Add + time: 5 + refresh: false diff --git a/Resources/Prototypes/Reagents/toxins.yml b/Resources/Prototypes/Reagents/toxins.yml index 661e1b7dd16..abb33f832a4 100644 --- a/Resources/Prototypes/Reagents/toxins.yml +++ b/Resources/Prototypes/Reagents/toxins.yml @@ -486,7 +486,6 @@ - !type:OrganType type: Animal shouldHave: false - reagent: Protein type: Local visualType: MediumCaution messages: [ "generic-reagent-effect-sick" ] @@ -512,6 +511,12 @@ shouldHave: true reagent: Protein amount: 0.5 + - !type:AdjustReagent + conditions: + - !type:OrganType + type: Shadowkin + reagent: Protein + amount: 0.5 - type: reagent id: Allicin @@ -647,3 +652,23 @@ - !type:Electrocute probability: 0.8 +- type: reagent + id: Lipolicide + name: reagent-name-lipolicide + group: Toxins + desc: reagent-desc-lipolicide + physicalDesc: reagent-physical-desc-strong-smelling + flavor: mothballs #why does weightloss juice taste like mothballs + color: "#F0FFF0" + metabolisms: + Poison: + effects: + - !type:HealthChange + conditions: + - !type:Hunger + max: 50 + damage: + types: + Poison: 2 + - !type:SatiateHunger + factor: -6 diff --git a/Resources/Prototypes/DeltaV/Recipes/Construction/Graphs/clothing/prescription_huds.yml b/Resources/Prototypes/Recipes/Construction/Graphs/clothing/prescriptionhuds.yml similarity index 100% rename from Resources/Prototypes/DeltaV/Recipes/Construction/Graphs/clothing/prescription_huds.yml rename to Resources/Prototypes/Recipes/Construction/Graphs/clothing/prescriptionhuds.yml diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/clothing/quiver.yml b/Resources/Prototypes/Recipes/Construction/Graphs/clothing/quiver.yml new file mode 100644 index 00000000000..10736a5876f --- /dev/null +++ b/Resources/Prototypes/Recipes/Construction/Graphs/clothing/quiver.yml @@ -0,0 +1,19 @@ +- type: constructionGraph + id: Quiver + start: start + graph: + - node: start + edges: + - to: Quiver + steps: + - material: Cable + amount: 2 + doAfter: 1 + - material: Cloth + amount: 5 + doAfter: 2 + - material: WoodPlank + amount: 1 + doAfter: 2 + - node: Quiver + entity: ClothingBeltQuiver diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/structures/glassbox.yml b/Resources/Prototypes/Recipes/Construction/Graphs/structures/glassbox.yml new file mode 100644 index 00000000000..081f22ea8dd --- /dev/null +++ b/Resources/Prototypes/Recipes/Construction/Graphs/structures/glassbox.yml @@ -0,0 +1,160 @@ +- type: constructionGraph + id: GlassBox + start: start + graph: + - node: start + actions: + - !type:DeleteEntity + edges: + - to: boxMissingWires + completed: + - !type:SetAnchor + value: false + steps: + - material: WoodPlank + amount: 10 + doAfter: 5 + + - node: boxMissingWires + entity: GlassBoxFrame + edges: + - to: boxMissingTrigger + conditions: + - !type:EntityAnchored + steps: + - material: Cable + amount: 2 + doAfter: 0.5 + + - to: start + steps: + - tool: Prying + doAfter: 5 + completed: + - !type:SpawnPrototype + prototype: MaterialWoodPlank1 + amount: 10 + + - node: boxMissingTrigger + edges: + - to: boxTriggerUnsecured + conditions: + - !type:EntityAnchored + steps: + - tag: SignalTrigger + name: a Signal Trigger + icon: + sprite: Objects/Devices/signaltrigger.rsi + state: signaltrigger + doAfter: 0.5 + + - to: boxMissingWires + conditions: + - !type:EntityAnchored + steps: + - tool: Cutting + doAfter: 0.25 + completed: + - !type:SpawnPrototype + prototype: CableApcStack1 + amount: 2 + + - node: boxTriggerUnsecured + edges: + - to: boxMissingRGlass + conditions: + - !type:EntityAnchored + steps: + - tool: Screwing + doAfter: 0.5 + + - to: boxMissingTrigger + conditions: + - !type:EntityAnchored + steps: + - tool: Prying + doAfter: 0.5 + completed: + - !type:SpawnPrototype + prototype: SignalTrigger + amount: 1 + + - node: boxMissingRGlass + edges: + - to: boxRGlassUnsecured + conditions: + - !type:EntityAnchored + steps: + - material: ReinforcedGlass + amount: 5 + doAfter: 2.5 + + - to: boxTriggerUnsecured + conditions: + - !type:EntityAnchored + steps: + - tool: Screwing + doAfter: 0.5 + + - node: boxRGlassUnsecured + edges: + - to: glassBox + conditions: + - !type:EntityAnchored + steps: + - tool: Screwing + doAfter: 0.5 + + - to: boxMissingRGlass + conditions: + - !type:EntityAnchored + steps: + - tool: Prying + doAfter: 2 + completed: + - !type:SpawnPrototype + prototype: SheetRGlass1 + amount: 5 + + - node: brokenGlassBox + entity: GlassBoxBroken + edges: + - to: boxMissingWires + steps: + - tool: Prying + doAfter: 2 + completed: + - !type:SpawnPrototype + prototype: ShardGlassReinforced + amount: 1 + + - node: glassBox + entity: GlassBoxLaser + edges: + - to: boxMissingWires + steps: + - tool: Screwing + doAfter: 4 + - tool: Pulsing + doAfter: 2 + - tool: Cutting + doAfter: 2 + - tool: Screwing + doAfter: 2 + - tool: Welding + doAfter: 10 + - tool: Anchoring + doAfter: 2 + - tool: Prying + doAfter: 2 + completed: + - !type:EmptyAllContainers + - !type:SpawnPrototype + prototype: CableApcStack1 + amount: 2 + - !type:SpawnPrototype + prototype: SignalTrigger + amount: 1 + - !type:SpawnPrototype + prototype: SheetRGlass1 + amount: 5 diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/structures/plastic_flaps.yml b/Resources/Prototypes/Recipes/Construction/Graphs/structures/plastic_flaps.yml index 776c1491a63..781dd4aa871 100644 --- a/Resources/Prototypes/Recipes/Construction/Graphs/structures/plastic_flaps.yml +++ b/Resources/Prototypes/Recipes/Construction/Graphs/structures/plastic_flaps.yml @@ -33,16 +33,6 @@ - tool: Welding doAfter: 5 - - to: airtightFlaps - completed: - - !type:SnapToGrid { } - steps: - - material: Plastic - amount: 5 - doAfter: 5 - - tool: Screwing - doAfter: 5 - - node: opaqueFlaps entity: PlasticFlapsOpaque edges: @@ -54,44 +44,3 @@ steps: - tool: Anchoring doAfter: 10 - - - to: airtightopaqueFlaps - completed: - - !type:SnapToGrid { } - steps: - - material: Plastic - amount: 5 - doAfter: 5 - - tool: Screwing - doAfter: 5 - - - node: airtightFlaps - entity: PlasticFlapsAirtightClear - edges: - - to: plasticFlaps - completed: - - !type:SpawnPrototype - prototype: SheetPlastic - amount: 5 - steps: - - tool: Screwing - doAfter: 10 - - - to: airtightopaqueFlaps #test - completed: - - !type:SnapToGrid { } - steps: - - tool: Welding - doAfter: 5 - - - node: airtightopaqueFlaps - entity: PlasticFlapsAirtightOpaque - edges: - - to: opaqueFlaps - completed: - - !type:SpawnPrototype - prototype: SheetPlastic - amount: 5 - steps: - - tool: Screwing - doAfter: 10 diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/structures/windowdirectional.yml b/Resources/Prototypes/Recipes/Construction/Graphs/structures/windowdirectional.yml index 96f009fabb7..effddd7ca39 100644 --- a/Resources/Prototypes/Recipes/Construction/Graphs/structures/windowdirectional.yml +++ b/Resources/Prototypes/Recipes/Construction/Graphs/structures/windowdirectional.yml @@ -28,6 +28,7 @@ - material: ReinforcedPlasmaGlass amount: 1 doAfter: 3 + - to: uraniumWindowDirectional steps: - material: UraniumGlass @@ -136,6 +137,7 @@ doAfter: 2 - tool: Anchoring doAfter: 3 + - node: uraniumWindowDirectional entity: UraniumWindowDirectional edges: diff --git a/Resources/Prototypes/Recipes/Construction/clothing.yml b/Resources/Prototypes/Recipes/Construction/clothing.yml index 54218d28226..ba0c0d6c59b 100644 --- a/Resources/Prototypes/Recipes/Construction/clothing.yml +++ b/Resources/Prototypes/Recipes/Construction/clothing.yml @@ -107,3 +107,14 @@ description: A roll of treated canvas used for wrapping claws or paws. icon: { sprite: Clothing/Shoes/Misc/clothWrap.rsi, state: icon } objectType: Item + +- type: construction + name: quiver + id: ClothingBeltQuiver + graph: Quiver + startNode: start + targetNode: Quiver + category: construction-category-clothing + description: Can hold up to 15 arrows, and fits snug around your waist. + icon: { sprite: Clothing/Belt/quiver.rsi, state: icon } + objectType: Item diff --git a/Resources/Prototypes/Recipes/Construction/storage.yml b/Resources/Prototypes/Recipes/Construction/storage.yml index 41abf881b65..c8edebc5096 100644 --- a/Resources/Prototypes/Recipes/Construction/storage.yml +++ b/Resources/Prototypes/Recipes/Construction/storage.yml @@ -49,3 +49,21 @@ canBuildInImpassable: false conditions: - !type:TileNotBlocked + +# ItemCabinets +- type: construction + id: ShowCase + name: showcase + description: A sturdy showcase for an expensive exhibit. + graph: GlassBox + startNode: start + targetNode: glassBox + category: construction-category-storage + icon: + sprite: Structures/Storage/glassbox.rsi + state: icon + objectType: Structure + placementMode: SnapgridCenter + canBuildInImpassable: false + conditions: + - !type:TileNotBlocked diff --git a/Resources/Prototypes/Recipes/Construction/structures.yml b/Resources/Prototypes/Recipes/Construction/structures.yml index b0467e72bed..a80ac9a3ebf 100644 --- a/Resources/Prototypes/Recipes/Construction/structures.yml +++ b/Resources/Prototypes/Recipes/Construction/structures.yml @@ -688,6 +688,42 @@ objectType: Structure placementMode: SnapgridCenter +- type: construction + name: directional uranium window + id: UraniumWindowDirectional + graph: WindowDirectional + startNode: start + targetNode: uraniumWindowDirectional + category: construction-category-structures + canBuildInImpassable: true + description: Clear and tougher than regular glass, with added RadAbsorb to protect you from deadly radiation. + conditions: + - !type:EmptyOrWindowValidInTile + - !type:NoWindowsInTile + icon: + sprite: Structures/Windows/directional.rsi + state: uranium_window + objectType: Structure + placementMode: SnapgridCenter + +- type: construction + name: directional reinforced uranium window + id: UraniumReinforcedWindowDirectional + graph: WindowDirectional + startNode: start + targetNode: uraniumReinforcedWindowDirectional + category: construction-category-structures + canBuildInImpassable: true + description: Clear and much tougher than regular glass, with added RadAbsorb to protect you from deadly radiation. + conditions: + - !type:EmptyOrWindowValidInTile + - !type:NoWindowsInTile + icon: + sprite: Structures/Windows/directional.rsi + state: uranium_reinforced_window + objectType: Structure + placementMode: SnapgridCenter + - type: construction name: firelock id: Firelock @@ -858,7 +894,6 @@ canBuildInImpassable: false conditions: - !type:TileNotBlocked - hide: false - type: construction name: wooden barricade @@ -876,7 +911,6 @@ canBuildInImpassable: false conditions: - !type:TileNotBlocked - hide: false - type: construction name: railing @@ -894,7 +928,6 @@ canBuildInImpassable: false conditions: - !type:TileNotBlocked - hide: false - type: construction name: railing corner @@ -912,7 +945,6 @@ canBuildInImpassable: false conditions: - !type:TileNotBlocked - hide: false - type: construction name: railing corner small @@ -930,7 +962,6 @@ canBuildInImpassable: false conditions: - !type:TileNotBlocked - hide: false - type: construction name: railing round @@ -948,7 +979,6 @@ canBuildInImpassable: false conditions: - !type:TileNotBlocked - hide: false # Chain link fencing - type: construction @@ -1036,7 +1066,6 @@ canBuildInImpassable: false conditions: - !type:TileNotBlocked - hide: false - type: construction name: wooden high fence end @@ -1054,7 +1083,6 @@ canBuildInImpassable: false conditions: - !type:TileNotBlocked - hide: false - type: construction name: wooden high fence corner @@ -1072,7 +1100,6 @@ canBuildInImpassable: false conditions: - !type:TileNotBlocked - hide: false - type: construction name: wooden high fence t-junction @@ -1090,7 +1117,6 @@ canBuildInImpassable: false conditions: - !type:TileNotBlocked - hide: false - type: construction name: wooden high fence gate @@ -1108,7 +1134,6 @@ canBuildInImpassable: false conditions: - !type:TileNotBlocked - hide: false #Wooden fence small - type: construction @@ -1127,8 +1152,7 @@ canBuildInImpassable: false conditions: - !type:TileNotBlocked - hide: false - + - type: construction name: wooden small fence end id: FenceWoodEndSmall @@ -1145,7 +1169,6 @@ canBuildInImpassable: false conditions: - !type:TileNotBlocked - hide: false - type: construction name: wooden small fence corner @@ -1163,7 +1186,6 @@ canBuildInImpassable: false conditions: - !type:TileNotBlocked - hide: false - type: construction name: wooden small fence t-junction @@ -1181,7 +1203,6 @@ canBuildInImpassable: false conditions: - !type:TileNotBlocked - hide: false - type: construction name: wooden small fence gate @@ -1199,7 +1220,6 @@ canBuildInImpassable: false conditions: - !type:TileNotBlocked - hide: false #Airlocks - type: construction @@ -1568,23 +1588,6 @@ conditions: - !type:TileNotBlocked -- type: construction - name: airtight plastic flaps - id: PlasticFlapsAirtight - graph: PlasticFlapsGraph - startNode: start - targetNode: airtightFlaps - category: construction-category-structures - placementMode: SnapgridCenter - description: An airtight plastic flap to let items through and keep people out. - objectType: Structure - canBuildInImpassable: false - icon: - sprite: Structures/plastic_flaps.rsi - state: plasticflaps - conditions: - - !type:TileNotBlocked - - type: construction name: opaque plastic flaps id: PlasticFlapsOpaque @@ -1602,23 +1605,6 @@ conditions: - !type:TileNotBlocked -- type: construction - name: airtight opaque plastic flaps - id: PlasticFlapsAirtightOpaque - graph: PlasticFlapsGraph - startNode: start - targetNode: airtightopaqueFlaps - category: construction-category-structures - placementMode: SnapgridCenter - description: An opaque, airtight plastic flap to let items through and keep people out. - objectType: Structure - canBuildInImpassable: false - icon: - sprite: Structures/plastic_flaps.rsi - state: plasticflaps - conditions: - - !type:TileNotBlocked - - type: construction name: bananium clown statue id: BananiumClownStatue diff --git a/Resources/Prototypes/Recipes/Construction/utilities.yml b/Resources/Prototypes/Recipes/Construction/utilities.yml index 1647e98bcea..19f2fee1837 100644 --- a/Resources/Prototypes/Recipes/Construction/utilities.yml +++ b/Resources/Prototypes/Recipes/Construction/utilities.yml @@ -178,7 +178,7 @@ targetNode: pipe category: construction-category-utilities placementMode: SnapgridCenter - canBuildInImpassable: true + canBuildInImpassable: false icon: sprite: Structures/Piping/disposal.rsi state: conpipe-s diff --git a/Resources/Prototypes/Recipes/Cooking/meal_recipes.yml b/Resources/Prototypes/Recipes/Cooking/meal_recipes.yml index d7aaab73c27..f3176cc5e7a 100644 --- a/Resources/Prototypes/Recipes/Cooking/meal_recipes.yml +++ b/Resources/Prototypes/Recipes/Cooking/meal_recipes.yml @@ -135,7 +135,7 @@ FoodBreadBun: 1 FoodMeat: 2 FoodCheeseSlice: 2 - FoodChili: 1 + FoodChiliPepper: 1 FoodCabbage: 1 CrayonGreen: 1 Flare: 1 @@ -177,7 +177,7 @@ solids: FoodBreadBun: 1 FoodMeat: 1 - FoodChili: 3 + FoodChiliPepper: 3 - type: microwaveMealRecipe id: RecipeGhostBurger @@ -675,7 +675,7 @@ solids: FoodRiceBoiled: 1 FoodMeatCutlet: 3 - FoodChili: 2 + FoodChiliPepper: 2 - type: microwaveMealRecipe id: RecipeEggRice @@ -894,7 +894,7 @@ solids: FoodBowlBig: 1 FoodBungo: 2 - FoodChili: 1 + FoodChiliPepper: 1 #Pies @@ -965,7 +965,7 @@ time: 15 solids: FoodDoughPie: 1 - FoodChilly: 3 + FoodChillyPepper: 3 FoodPlateTin: 1 - type: microwaveMealRecipe @@ -1063,7 +1063,7 @@ solids: FoodDough: 1 FoodCheeseSlice: 2 - FoodChili: 1 + FoodChiliPepper: 1 FoodMeatFish: 2 - type: microwaveMealRecipe @@ -1423,14 +1423,14 @@ FoodSnackChocolateBar: 2 FoodEgg: 3 -# - type: microwaveMealRecipe - # id: RecipeHarpyWings - # name: harpy wings recipe - # result: FoodHarpyWings - # time: 15 - # solids: - # LeftLegHarpy: 1 - # RightLegHarpy: 1 +- type: microwaveMealRecipe + id: RecipeHarpyWings + name: harpy wings recipe + result: FoodHarpyWings + time: 15 + solids: + LeftLegHarpy: 1 + RightLegHarpy: 1 #Donks i guess - type: microwaveMealRecipe @@ -1513,7 +1513,7 @@ time: 20 solids: FoodBowlBig: 1 - FoodChili: 1 + FoodChiliPepper: 1 FoodMeatCutlet: 1 FoodOnionSlice: 1 FoodTomato: 1 @@ -1546,7 +1546,7 @@ time: 30 solids: FoodBowlBig: 1 - FoodChili: 1 + FoodChiliPepper: 1 FoodMeatCutlet: 1 FoodOnionSlice: 1 FoodTomato: 1 @@ -1561,7 +1561,7 @@ #reagents: #blackpepper: 5 solids: - FoodChili: 1 + FoodChiliPepper: 1 FoodCheeseSlice: 2 - type: microwaveMealRecipe @@ -1581,7 +1581,7 @@ result: FoodMealEnchiladas time: 20 solids: - FoodChili: 2 + FoodChiliPepper: 2 FoodMeatCutlet: 1 FoodCorn: 1 @@ -1712,6 +1712,14 @@ solids: LeavesCannabis: 1 +- type: microwaveMealRecipe + id: RecipeDriedCannabisRainbow + name: dried rainbow cannabis leaves recipe + result: LeavesCannabisRainbowDried + time: 10 + solids: + LeavesCannabisRainbow: 1 + - type: microwaveMealRecipe id: RecipeTrashBakedBananaPeel name: baked banana peel recipe @@ -1749,7 +1757,7 @@ result: FoodMeatHawaiianKebab time: 5 solids: - FoodChili: 1 + FoodChiliPepper: 1 FoodMeatCutlet: 1 FoodPineappleSlice: 1 FoodKebabSkewer: 1 @@ -1760,7 +1768,7 @@ result: FoodMeatFiestaKebab time: 5 solids: - FoodChili: 1 + FoodChiliPepper: 1 FoodCorn: 1 FoodMeatCutlet: 1 FoodTomato: 1 diff --git a/Resources/Prototypes/Recipes/Crafting/Graphs/bots/honkbot.yml b/Resources/Prototypes/Recipes/Crafting/Graphs/bots/honkbot.yml index ff3f6d2e2a7..6806aacc241 100644 --- a/Resources/Prototypes/Recipes/Crafting/Graphs/bots/honkbot.yml +++ b/Resources/Prototypes/Recipes/Crafting/Graphs/bots/honkbot.yml @@ -6,17 +6,11 @@ edges: - to: bot steps: - - tag: BoxHug - icon: - sprite: Objects/Storage/boxes.rsi - state: box_hug - name: box of hugs - - tag: ClownRubberStamp + - tag: HappyHonk icon: - sprite: Objects/Misc/stamps.rsi - state: stamp-clown - name: clown's rubber stamp - doAfter: 2 + sprite: Objects/Storage/Happyhonk/clown.rsi + state: box + name: happy honk meal - tag: BikeHorn icon: sprite: Objects/Fun/bikehorn.rsi @@ -45,21 +39,15 @@ edges: - to: bot steps: - - tag: HappyHonk + - tag: CluwneHappyHonk icon: - sprite: Objects/Storage/Happyhonk/clown.rsi + sprite: Objects/Storage/Happyhonk/cluwne.rsi state: box - name: happy honk meal - - tag: ClownRubberStamp - icon: - sprite: Objects/Misc/stamps.rsi - state: stamp-clown - name: clown's rubber stamp - doAfter: 2 + name: woeful cluwne meal - tag: CluwneHorn icon: - sprite: Objects/Fun/cluwnehorn.rsi - state: icon + sprite: Objects/Fun/cluwnehorn.rsi + state: icon name: broken bike horn doAfter: 2 - tag: ProximitySensor diff --git a/Resources/Prototypes/Recipes/Crafting/Graphs/bots/supplybot.yml b/Resources/Prototypes/Recipes/Crafting/Graphs/bots/supplybot.yml new file mode 100644 index 00000000000..efabb849bbc --- /dev/null +++ b/Resources/Prototypes/Recipes/Crafting/Graphs/bots/supplybot.yml @@ -0,0 +1,23 @@ +- type: constructionGraph + id: SupplyBot + start: start + graph: + - node: start + edges: + - to: bot + steps: + - tag: ProximitySensor + icon: + sprite: Objects/Misc/proximity_sensor.rsi + state: icon + name: proximity sensor + - tag: BorgHead + icon: + sprite: Objects/Specific/Robotics/cyborg_parts.rsi + state: borg_head + name: borg head + doAfter: 1 + - material: Steel + amount: 10 + - node: bot + entity: MobSupplyBot diff --git a/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/makeshifthandcuffs.yml b/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/makeshifthandcuffs.yml index 08d6d57fb94..47eaf30e5cc 100644 --- a/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/makeshifthandcuffs.yml +++ b/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/makeshifthandcuffs.yml @@ -11,4 +11,3 @@ doAfter: 5 - node: cuffscable entity: Cablecuffs - diff --git a/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/makeshiftstunprod.yml b/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/makeshiftstunprod.yml index fa006a938bd..024a7c58763 100644 --- a/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/makeshiftstunprod.yml +++ b/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/makeshiftstunprod.yml @@ -8,24 +8,23 @@ steps: - material: MetalRod amount: 1 - - material: Cable - amount: 15 - - tag: DrinkSpaceGlue - name: Drink Space Glue - icon: - sprite: Objects/Consumable/Drinks/glue-tube.rsi - state: icon - tag: PowerCellSmall name: Power Cell Small icon: sprite: Objects/Power/power_cells.rsi state: small - - tag: CapacitorStockPart - name: Capacitor Stock Part + - tag: Handcuffs icon: - sprite: Objects/Misc/stock_parts.rsi - state: capacitor - doAfter: 20 + sprite: Objects/Misc/cablecuffs.rsi + state: cuff + color: red + name: cuffs + - tag: Igniter + name: Igniter + icon: + sprite: Objects/Devices/igniter.rsi + state: icon + doAfter: 15 - node: msstunprod entity: Stunprod diff --git a/Resources/Prototypes/Recipes/Crafting/Graphs/smokeables.yml b/Resources/Prototypes/Recipes/Crafting/Graphs/smokeables.yml index 00900a95efd..419d7bff339 100644 --- a/Resources/Prototypes/Recipes/Crafting/Graphs/smokeables.yml +++ b/Resources/Prototypes/Recipes/Crafting/Graphs/smokeables.yml @@ -12,6 +12,21 @@ doAfter: 2 - node: joint entity: Joint + +- type: constructionGraph + id: smokeableJointRainbow + start: start + graph: + - node: start + edges: + - to: jointRainbow + steps: + - material: PaperRolling + - material: CigaretteFilter + - material: GroundCannabisRainbow + doAfter: 2 + - node: jointRainbow + entity: JointRainbow - type: constructionGraph id: smokeableBlunt @@ -27,6 +42,20 @@ - node: blunt entity: Blunt +- type: constructionGraph + id: smokeableBluntRainbow + start: start + graph: + - node: start + edges: + - to: bluntRainbow + steps: + - material: LeavesTobaccoDried + - material: GroundCannabisRainbow + doAfter: 2 + - node: bluntRainbow + entity: BluntRainbow + - type: constructionGraph id: smokeableCigarette start: start @@ -56,6 +85,20 @@ - node: ground entity: GroundCannabis +- type: constructionGraph + id: smokeableGroundCannabisRainbow + start: start + graph: + - node: start + edges: + - to: groundRainbow + steps: + - material: LeavesCannabisRainbowDried + amount: 2 + doAfter: 5 + - node: groundRainbow + entity: GroundCannabisRainbow + - type: constructionGraph id: smokeableGroundTobacco start: start diff --git a/Resources/Prototypes/Recipes/Crafting/bots.yml b/Resources/Prototypes/Recipes/Crafting/bots.yml index 9a70a19c868..3031f4a7803 100644 --- a/Resources/Prototypes/Recipes/Crafting/bots.yml +++ b/Resources/Prototypes/Recipes/Crafting/bots.yml @@ -62,3 +62,16 @@ icon: sprite: Mobs/Silicon/Bots/mimebot.rsi state: mimebot + +- type: construction + name: supplybot + id: supplybot + graph: SupplyBot + startNode: start + targetNode: bot + category: construction-category-utilities + objectType: Item + description: This bot can be loaded with cargo to make deliveries. + icon: + sprite: Mobs/Silicon/Bots/supplybot.rsi + state: supplybot diff --git a/Resources/Prototypes/Recipes/Crafting/smokeables.yml b/Resources/Prototypes/Recipes/Crafting/smokeables.yml index 1b7406fac37..17d9b664745 100644 --- a/Resources/Prototypes/Recipes/Crafting/smokeables.yml +++ b/Resources/Prototypes/Recipes/Crafting/smokeables.yml @@ -8,6 +8,17 @@ description: "A roll of dried plant matter wrapped in thin paper." icon: { sprite: Objects/Consumable/Smokeables/Cannabis/joint.rsi, state: unlit-icon } objectType: Item + +- type: construction + name: rainbow joint + id: smokeableJointRainbow + graph: smokeableJointRainbow + startNode: start + targetNode: jointRainbow + category: construction-category-misc + description: "A roll of dried plant matter wrapped in thin paper." + icon: { sprite: Objects/Consumable/Smokeables/Cannabis/joint.rsi, state: unlit-icon } + objectType: Item - type: construction name: blunt @@ -20,6 +31,17 @@ icon: { sprite: Objects/Consumable/Smokeables/Cannabis/blunt.rsi, state: unlit-icon } objectType: Item +- type: construction + name: rainbow blunt + id: smokeableBluntRainbow + graph: smokeableBluntRainbow + startNode: start + targetNode: bluntRainbow + category: construction-category-misc + description: "A roll of dried plant matter wrapped in a dried tobacco leaf." + icon: { sprite: Objects/Consumable/Smokeables/Cannabis/blunt.rsi, state: unlit-icon } + objectType: Item + - type: construction name: cigarette id: smokeableCigarette @@ -45,6 +67,17 @@ # color: darkgreen objectType: Item +- type: construction + name: ground rainbow cannabis + id: smokeableGroundCannabisRainbow + graph: smokeableGroundCannabisRainbow + startNode: start + targetNode: groundRainbow + category: construction-category-misc + description: "Ground rainbow cannabis, ready to take you on a trip." + icon: { sprite: Objects/Specific/Hydroponics/rainbow_cannabis.rsi, state: powderpile_rainbow } + objectType: Item + - type: construction name: ground tobacco id: smokeableGroundTobacco diff --git a/Resources/Prototypes/Recipes/Lathes/Parts.yml b/Resources/Prototypes/Recipes/Lathes/Parts.yml index 90cff2174d6..4534bf60971 100644 --- a/Resources/Prototypes/Recipes/Lathes/Parts.yml +++ b/Resources/Prototypes/Recipes/Lathes/Parts.yml @@ -1,3 +1,4 @@ +#Rating 1 - type: latheRecipe id: CapacitorStockPart result: CapacitorStockPart @@ -24,3 +25,93 @@ materials: Steel: 50 Plastic: 50 + +#Rating 2 +- type: latheRecipe + id: AdvancedCapacitorStockPart + result: AdvancedCapacitorStockPart + completetime: 3 + materials: + Steel: 80 + Plastic: 80 + Plasma: 75 + +- type: latheRecipe + id: AdvancedMatterBinStockPart + result: AdvancedMatterBinStockPart + completetime: 3 + materials: + Steel: 80 + Plastic: 80 + Plasma: 75 + +- type: latheRecipe + id: NanoManipulatorStockPart + result: NanoManipulatorStockPart + completetime: 3 + materials: + Steel: 80 + Plastic: 80 + Plasma: 75 + +#Rating 3 +- type: latheRecipe + id: SuperCapacitorStockPart + result: SuperCapacitorStockPart + completetime: 3 + materials: + Steel: 150 + Plastic: 150 + Plasma: 75 + Gold: 75 + +- type: latheRecipe + id: SuperMatterBinStockPart + result: SuperMatterBinStockPart + completetime: 3 + materials: + Steel: 150 + Plastic: 150 + Plasma: 75 + Gold: 75 + +- type: latheRecipe + id: PicoManipulatorStockPart + result: PicoManipulatorStockPart + completetime: 3 + materials: + Steel: 150 + Plastic: 150 + Plasma: 75 + Gold: 75 + +#Rating 4 +- type: latheRecipe + id: BluespaceCapacitorStockPart + result: BluespaceCapacitorStockPart + completetime: 3 + materials: + Steel: 150 + Plastic: 150 + Gold: 75 + Bluespace: 300 + +- type: latheRecipe + id: BluespaceMatterBinStockPart + result: BluespaceMatterBinStockPart + completetime: 3 + materials: + Steel: 150 + Plastic: 150 + Gold: 75 + Bluespace: 300 + +- type: latheRecipe + id: BluespaceManipulatorStockPart + result: BluespaceManipulatorStockPart + completetime: 3 + materials: + Steel: 150 + Plastic: 150 + Gold: 75 + Bluespace: 300 diff --git a/Resources/Prototypes/Recipes/Lathes/clothing.yml b/Resources/Prototypes/Recipes/Lathes/clothing.yml index 19b2fbb883c..729f20e9795 100644 --- a/Resources/Prototypes/Recipes/Lathes/clothing.yml +++ b/Resources/Prototypes/Recipes/Lathes/clothing.yml @@ -706,8 +706,16 @@ Durathread: 300 - type: latheRecipe - id: ClothingOuterWinterHoS - result: ClothingOuterWinterHoS + id: ClothingOuterWinterHoSUnarmored + result: ClothingOuterWinterHoSUnarmored + completetime: 3.2 + materials: + Cloth: 500 + Durathread: 300 + +- type: latheRecipe + id: ClothingOuterWinterWardenUnarmored + result: ClothingOuterWinterWardenUnarmored completetime: 3.2 materials: Cloth: 500 diff --git a/Resources/Prototypes/Recipes/Lathes/cooking.yml b/Resources/Prototypes/Recipes/Lathes/cooking.yml index a8836ff3926..577d8299dab 100644 --- a/Resources/Prototypes/Recipes/Lathes/cooking.yml +++ b/Resources/Prototypes/Recipes/Lathes/cooking.yml @@ -49,6 +49,13 @@ materials: Glass: 100 +- type: latheRecipe + id: CustomDrinkJug + result: CustomDrinkJug + completetime: 2 + materials: + Plastic: 200 + - type: latheRecipe id: FoodPlate result: FoodPlate diff --git a/Resources/Prototypes/Recipes/Lathes/devices.yml b/Resources/Prototypes/Recipes/Lathes/devices.yml index d41b5fdce87..2b0d6fa44fe 100644 --- a/Resources/Prototypes/Recipes/Lathes/devices.yml +++ b/Resources/Prototypes/Recipes/Lathes/devices.yml @@ -76,7 +76,7 @@ Steel: 100 Plastic: 200 Glass: 100 - + - type: latheRecipe id: SignallerAdvanced result: RemoteSignallerAdvanced @@ -178,15 +178,23 @@ Plasma: 1000 #DeltaV: Bluespace Exists so less plasma used, no uranium Bluespace: 200 #DeltaV: Bluespace Exists -#- type: latheRecipe #DeltaV - LRP -# id: WeaponForceGun -# result: WeaponForceGun -# category: Tools -# completetime: 5 -# materials: -# Steel: 500 -# Glass: 400 -# Silver: 200 +- type: latheRecipe + id: ClothingMaskWeldingGas + result: ClothingMaskWeldingGas + completetime: 3 + materials: + Steel: 600 + Glass: 200 + +- type: latheRecipe + id: WeaponForceGun + result: WeaponForceGun + category: Tools + completetime: 5 + materials: + Steel: 500 + Glass: 400 + Silver: 200 - type: latheRecipe id: DeviceQuantumSpinInverter @@ -207,22 +215,22 @@ Glass: 500 Silver: 100 -#- type: latheRecipe #DeltaV - LRP -# id: WeaponTetherGun -# result: WeaponTetherGun -# category: Tools -# completetime: 5 -# materials: -# Steel: 500 -# Glass: 400 -# Silver: 100 - -#- type: latheRecipe #DeltaV - LRP -# id: WeaponGrapplingGun -# result: WeaponGrapplingGun -# category: Tools -# completetime: 5 -# materials: -# Steel: 500 -# Glass: 400 -# Gold: 100 +- type: latheRecipe + id: WeaponTetherGun + result: WeaponTetherGun + category: Tools + completetime: 5 + materials: + Steel: 500 + Glass: 400 + Silver: 100 + +- type: latheRecipe + id: WeaponGrapplingGun + result: WeaponGrapplingGun + category: Tools + completetime: 5 + materials: + Steel: 500 + Glass: 400 + Gold: 100 diff --git a/Resources/Prototypes/Recipes/Lathes/electronics.yml b/Resources/Prototypes/Recipes/Lathes/electronics.yml index 12b5bedf107..af258ad31b0 100644 --- a/Resources/Prototypes/Recipes/Lathes/electronics.yml +++ b/Resources/Prototypes/Recipes/Lathes/electronics.yml @@ -114,7 +114,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 Gold: 100 - type: latheRecipe @@ -133,7 +133,7 @@ completetime: 4 materials: Steel: 150 - Glass: 900 + Glass: 500 Gold: 50 - type: latheRecipe @@ -143,7 +143,7 @@ completetime: 4 materials: Steel: 150 - Glass: 900 + Glass: 500 Gold: 50 - type: latheRecipe @@ -153,7 +153,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 - type: latheRecipe id: PortableScrubberMachineCircuitBoard @@ -162,7 +162,7 @@ completetime: 4 materials: Steel: 150 - Glass: 900 + Glass: 500 Gold: 50 - type: latheRecipe @@ -172,7 +172,7 @@ completetime: 4 materials: Steel: 150 - Glass: 900 + Glass: 500 Gold: 50 - type: latheRecipe @@ -182,7 +182,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 - type: latheRecipe id: CryoPodMachineCircuitboard @@ -191,7 +191,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 Gold: 100 - type: latheRecipe @@ -201,7 +201,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 - type: latheRecipe id: ChemDispenserMachineCircuitboard @@ -210,7 +210,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 Gold: 100 - type: latheRecipe @@ -220,7 +220,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 Gold: 100 - type: latheRecipe @@ -230,7 +230,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 Gold: 100 - type: latheRecipe @@ -240,7 +240,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 - type: latheRecipe id: AutolatheMachineCircuitboard @@ -249,7 +249,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 - type: latheRecipe id: ProtolatheMachineCircuitboard @@ -258,7 +258,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 - type: latheRecipe id: AutolatheHyperConvectionMachineCircuitboard @@ -267,7 +267,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 Gold: 100 - type: latheRecipe @@ -277,7 +277,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 Gold: 100 - type: latheRecipe @@ -286,8 +286,19 @@ category: Circuitry completetime: 4 materials: - Steel: 100 - Glass: 900 + Steel: 100 + Glass: 500 + +- type: latheRecipe + id: CircuitImprinterHyperConvectionMachineCircuitboard + result: CircuitImprinterHyperConvectionMachineCircuitboard + category: Circuitry + completetime: 4 + materials: + Steel: 100 + Glass: 900 + Gold: 100 + - type: latheRecipe id: ExosuitFabricatorMachineCircuitboard @@ -296,7 +307,7 @@ completetime: 5 materials: Steel: 100 - Glass: 900 + Glass: 500 - type: latheRecipe id: UniformPrinterMachineCircuitboard @@ -305,7 +316,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 - type: latheRecipe id: VaccinatorMachineCircuitboard @@ -314,7 +325,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 Gold: 100 - type: latheRecipe @@ -324,7 +335,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 Gold: 100 - type: latheRecipe @@ -334,17 +345,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 - Gold: 100 - -- type: latheRecipe - id: TraversalDistorterMachineCircuitboard - result: TraversalDistorterMachineCircuitboard - category: Circuitry - completetime: 4 - materials: - Steel: 100 - Glass: 900 + Glass: 500 Gold: 100 - type: latheRecipe @@ -354,7 +355,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 Gold: 100 - type: latheRecipe @@ -364,7 +365,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 - type: latheRecipe id: AnomalyVesselExperimentalCircuitboard @@ -373,7 +374,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 Gold: 100 - type: latheRecipe @@ -393,7 +394,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 - type: latheRecipe id: ReagentGrinderMachineCircuitboard @@ -402,7 +403,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 - type: latheRecipe id: HotplateMachineCircuitboard @@ -411,7 +412,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 - type: latheRecipe id: AnalysisComputerCircuitboard @@ -420,7 +421,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 Gold: 100 - type: latheRecipe @@ -430,7 +431,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 Gold: 100 - type: latheRecipe @@ -440,7 +441,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 Gold: 100 - type: latheRecipe @@ -450,7 +451,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 - type: latheRecipe id: DawInstrumentMachineCircuitboard @@ -459,7 +460,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 - type: latheRecipe id: StasisBedMachineCircuitboard @@ -468,7 +469,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 Gold: 100 - type: latheRecipe @@ -478,7 +479,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 - type: latheRecipe id: CentrifugeMachineCircuitboard @@ -487,7 +488,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 - type: latheRecipe id: MaterialReclaimerMachineCircuitboard @@ -496,7 +497,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 - type: latheRecipe id: OreProcessorMachineCircuitboard @@ -505,7 +506,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 - type: latheRecipe id: OreProcessorIndustrialMachineCircuitboard @@ -514,7 +515,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 Gold: 100 - type: latheRecipe @@ -524,7 +525,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 Gold: 100 - type: latheRecipe @@ -534,7 +535,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 Gold: 100 - type: latheRecipe @@ -544,7 +545,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 Bananium: 100 - type: latheRecipe @@ -554,7 +555,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 Bananium: 100 - type: latheRecipe @@ -564,7 +565,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 Bananium: 100 - type: latheRecipe @@ -574,7 +575,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 Gold: 100 - type: latheRecipe @@ -584,7 +585,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 Gold: 100 # Power @@ -622,7 +623,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 - type: latheRecipe id: PortableGeneratorPacmanMachineCircuitboard @@ -676,7 +677,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 - type: latheRecipe id: SolarTrackerElectronics @@ -694,7 +695,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 - type: latheRecipe id: CloningConsoleComputerCircuitboard @@ -703,7 +704,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 - type: latheRecipe id: MicrowaveMachineCircuitboard @@ -712,7 +713,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 - type: latheRecipe id: ElectricGrillMachineCircuitboard @@ -721,7 +722,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 - type: latheRecipe id: FatExtractorMachineCircuitboard @@ -730,7 +731,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 - type: latheRecipe id: FlatpackerMachineCircuitboard @@ -739,7 +740,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 Gold: 100 - type: latheRecipe @@ -749,7 +750,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 - type: latheRecipe id: SurveillanceCameraRouterCircuitboard @@ -758,7 +759,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 - type: latheRecipe id: SurveillanceCameraWirelessRouterCircuitboard @@ -767,7 +768,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 - type: latheRecipe id: SurveillanceWirelessCameraAnchoredCircuitboard @@ -776,7 +777,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 - type: latheRecipe id: SurveillanceWirelessCameraMovableCircuitboard @@ -785,7 +786,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 - type: latheRecipe id: SurveillanceCameraMonitorCircuitboard @@ -794,7 +795,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 - type: latheRecipe id: SurveillanceWirelessCameraMonitorCircuitboard @@ -803,7 +804,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 - type: latheRecipe id: ComputerTelevisionCircuitboard @@ -812,7 +813,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 - type: latheRecipe id: EmitterCircuitboard @@ -821,7 +822,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 - type: latheRecipe id: ThrusterMachineCircuitboard @@ -830,7 +831,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 - type: latheRecipe id: GyroscopeMachineCircuitboard @@ -839,7 +840,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 - type: latheRecipe id: GasRecyclerMachineCircuitboard @@ -848,7 +849,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 - type: latheRecipe id: SeedExtractorMachineCircuitboard @@ -857,7 +858,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 - type: latheRecipe id: BoozeDispenserMachineCircuitboard @@ -866,7 +867,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 - type: latheRecipe id: CargoTelepadMachineCircuitboard @@ -875,7 +876,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 Gold: 100 - type: latheRecipe @@ -885,7 +886,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 - type: latheRecipe id: TelecomServerCircuitboard @@ -894,7 +895,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 - type: latheRecipe id: MassMediaCircuitboard @@ -903,7 +904,7 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 - type: latheRecipe id: MiniGravityGeneratorCircuitboard @@ -912,7 +913,7 @@ completetime: 6 materials: Steel: 100 - Glass: 900 + Glass: 500 Gold: 100 - type: latheRecipe @@ -921,7 +922,7 @@ completetime: 6 materials: Steel: 100 - Glass: 900 + Glass: 500 - type: latheRecipe id: ShuttleGunSvalinnMachineGunCircuitboard @@ -929,7 +930,8 @@ completetime: 6 materials: Steel: 100 - Glass: 900 + + Glass: 500 - type: latheRecipe id: ShuttleGunPerforatorCircuitboard @@ -937,7 +939,7 @@ completetime: 10 materials: Steel: 100 - Glass: 900 + Glass: 500 Gold: 100 - type: latheRecipe @@ -946,7 +948,7 @@ completetime: 6 materials: Steel: 100 - Glass: 900 + Glass: 500 - type: latheRecipe id: ShuttleGunFriendshipCircuitboard @@ -954,7 +956,7 @@ completetime: 8 materials: Steel: 100 - Glass: 900 + Glass: 500 Gold: 50 - type: latheRecipe @@ -963,7 +965,7 @@ completetime: 12 materials: Steel: 100 - Glass: 900 + Glass: 500 Gold: 100 - type: latheRecipe @@ -972,7 +974,7 @@ completetime: 5 materials: Steel: 100 - Glass: 900 + Glass: 500 Gold: 100 - type: latheRecipe @@ -981,4 +983,4 @@ completetime: 4 materials: Steel: 100 - Glass: 900 + Glass: 500 \ No newline at end of file diff --git a/Resources/Prototypes/Recipes/Lathes/janitorial.yml b/Resources/Prototypes/Recipes/Lathes/janitorial.yml index a3b968a331b..9ba7dfa1889 100644 --- a/Resources/Prototypes/Recipes/Lathes/janitorial.yml +++ b/Resources/Prototypes/Recipes/Lathes/janitorial.yml @@ -18,7 +18,7 @@ result: Bucket completetime: 2 materials: - Steel: 100 + Plastic: 100 - type: latheRecipe id: WetFloorSign diff --git a/Resources/Prototypes/Recipes/Lathes/medical.yml b/Resources/Prototypes/Recipes/Lathes/medical.yml index 631829ed53b..822945de103 100644 --- a/Resources/Prototypes/Recipes/Lathes/medical.yml +++ b/Resources/Prototypes/Recipes/Lathes/medical.yml @@ -116,7 +116,7 @@ result: ClothingMaskSterile completetime: 2 materials: - Plastic: 100 + Plastic: 50 - type: latheRecipe id: DiseaseSwab diff --git a/Resources/Prototypes/Recipes/Lathes/misc.yml b/Resources/Prototypes/Recipes/Lathes/misc.yml index ab13dc4573f..2c0e1eeec38 100644 --- a/Resources/Prototypes/Recipes/Lathes/misc.yml +++ b/Resources/Prototypes/Recipes/Lathes/misc.yml @@ -207,3 +207,19 @@ materials: Steel: 400 Glass: 200 + +- type: latheRecipe + id: ClothingShoesBootsMagAdv + result: ClothingShoesBootsMagAdv + completetime: 12 + materials: + Silver: 1000 + Gold: 500 + +- type: latheRecipe + id: MailCapsule + result: MailCapsulePrimed + completetime: 1 + materials: + Glass: 100 + Plastic: 100 diff --git a/Resources/Prototypes/Recipes/Lathes/prizecounter.yml b/Resources/Prototypes/Recipes/Lathes/prizecounter.yml index c600702b206..9e5e239c6f5 100644 --- a/Resources/Prototypes/Recipes/Lathes/prizecounter.yml +++ b/Resources/Prototypes/Recipes/Lathes/prizecounter.yml @@ -6,6 +6,14 @@ materials: PrizeTicket: 30 +- type: latheRecipe + id: PlushieShadowkin + result: PlushieShadowkin + applyMaterialDiscount: false + completetime: 0.1 + materials: + PrizeTicket: 50 + - type: latheRecipe id: PlushieMothRandom result: PlushieMothRandom diff --git a/Resources/Prototypes/Recipes/Lathes/robotics.yml b/Resources/Prototypes/Recipes/Lathes/robotics.yml index bf6f479703e..2dc0a65748e 100644 --- a/Resources/Prototypes/Recipes/Lathes/robotics.yml +++ b/Resources/Prototypes/Recipes/Lathes/robotics.yml @@ -427,16 +427,16 @@ Glass: 250 Plastic: 250 -#- type: latheRecipe -# id: BorgModuleGrapplingGun -# result: BorgModuleGrapplingGun -# category: Robotics -# completetime: 3 -# materials: -# Steel: 500 -# Glass: 500 -# Plastic: 250 -# Gold: 50 +- type: latheRecipe + id: BorgModuleGrapplingGun + result: BorgModuleGrapplingGun + category: Robotics + completetime: 3 + materials: + Steel: 500 + Glass: 500 + Plastic: 250 + Gold: 50 - type: latheRecipe id: BorgModuleAdvancedTool diff --git a/Resources/Prototypes/Recipes/Lathes/security.yml b/Resources/Prototypes/Recipes/Lathes/security.yml index 08e11e4ff82..4a2e737e153 100644 --- a/Resources/Prototypes/Recipes/Lathes/security.yml +++ b/Resources/Prototypes/Recipes/Lathes/security.yml @@ -12,6 +12,14 @@ materials: Plastic: 200 +- type: latheRecipe + id: BolaEnergy + result: BolaEnergy + completetime: 2 + materials: + Plastic: 200 + Plasma: 150 + - type: latheRecipe id: Stunbaton result: Stunbaton @@ -38,7 +46,7 @@ materials: Steel: 250 Plastic: 100 - + - type: latheRecipe id: WeaponLaserCarbine result: WeaponLaserCarbine @@ -146,15 +154,6 @@ Plastic: 200 Steel: 100 -- type: latheRecipe - id: ShellShotgunBeanbag - result: ShellShotgunBeanbag - category: Ammo - completetime: 2 - materials: - Plastic: 15 - Steel: 10 - - type: latheRecipe id: CartridgePistolRubber result: CartridgePistolRubber @@ -173,14 +172,6 @@ Plastic: 5 Steel: 5 -- type: latheRecipe - id: CartridgeRifle - result: CartridgeRifle - category: Ammo - completetime: 2 - materials: - Steel: 15 - - type: latheRecipe id: CartridgeLightRifleRubber result: CartridgeLightRifleRubber @@ -199,54 +190,6 @@ Plastic: 10 Steel: 5 -- type: latheRecipe - id: CartridgePistol - result: CartridgePistol - category: Ammo - completetime: 2 - materials: - Steel: 10 - -- type: latheRecipe - id: ShellShotgun - result: ShellShotgun - category: Ammo - completetime: 2 - materials: - Steel: 20 - -- type: latheRecipe - id: ShellShotgunSlug - result: ShellShotgunSlug - completetime: 2 - materials: - Steel: 25 - -- type: latheRecipe - id: CartridgeMagnum - result: CartridgeMagnum - category: Ammo - completetime: 2 - materials: - Steel: 20 - -- type: latheRecipe - id: CartridgeLightRifle - result: CartridgeLightRifle - category: Ammo - completetime: 2 - materials: - Steel: 30 - -- type: latheRecipe - id: ShellShotgunFlare - result: ShellShotgunFlare - category: Ammo - completetime: 2 - materials: - Plastic: 20 - Steel: 5 - - type: latheRecipe id: ShellTranquilizer result: ShellTranquilizer @@ -283,13 +226,56 @@ materials: Steel: 500 +- type: latheRecipe + id: MagazinePistolEmpty + result: MagazinePistolEmpty + category: Ammo + completetime: 5 + materials: + Steel: 25 + - type: latheRecipe id: MagazinePistol result: MagazinePistol category: Ammo completetime: 5 materials: - Steel: 100 + Steel: 145 + +- type: latheRecipe + id: MagazinePistolPractice + result: MagazinePistolPractice + category: Ammo + completetime: 5 + materials: + Steel: 85 + +- type: latheRecipe + id: MagazinePistolUranium + result: MagazinePistolUranium + category: Ammo + completetime: 5 + materials: + Steel: 25 + Plastic: 65 + Uranium: 120 + +- type: latheRecipe + id: MagazinePistolIncendiary + result: MagazinePistolIncendiary + category: Ammo + completetime: 5 + materials: + Steel: 25 + Plastic: 120 + +- type: latheRecipe + id: MagazinePistolSubMachineGunEmpty + result: MagazinePistolSubMachineGunEmpty + category: Ammo + completetime: 5 + materials: + Steel: 30 - type: latheRecipe id: MagazinePistolSubMachineGun @@ -299,6 +285,14 @@ materials: Steel: 300 +- type: latheRecipe + id: MagazinePistolSubMachineGunTopMountedEmpty + result: MagazinePistolSubMachineGunTopMountedEmpty + category: Ammo + completetime: 5 + materials: + Steel: 30 + - type: latheRecipe id: MagazinePistolSubMachineGunTopMounted result: MagazinePistolSubMachineGunTopMounted @@ -313,7 +307,7 @@ category: Ammo completetime: 5 materials: - Steel: 650 + Steel: 600 - type: latheRecipe id: MagazineBoxPistolRubber @@ -330,7 +324,15 @@ category: Ammo completetime: 5 materials: - Steel: 1250 + Steel: 240 + +- type: latheRecipe + id: MagazineRifleEmpty + result: MagazineRifleEmpty + category: Ammo + completetime: 5 + materials: + Steel: 25 - type: latheRecipe id: MagazineBoxMagnumRubber @@ -347,7 +349,43 @@ category: Ammo completetime: 5 materials: - Steel: 375 + Steel: 475 + + +- type: latheRecipe + id: MagazineRiflePractice + result: MagazineRiflePractice + category: Ammo + completetime: 5 + materials: + Steel: 175 + +- type: latheRecipe + id: MagazineRifleUranium + result: MagazineRifleUranium + category: Ammo + completetime: 5 + materials: + Steel: 25 + Plastic: 300 + Uranium: 300 + +- type: latheRecipe + id: MagazineRifleIncendiary + result: MagazineRifleIncendiary + category: Ammo + completetime: 5 + materials: + Steel: 25 + Plastic: 450 + +- type: latheRecipe + id: MagazineLightRifleEmpty + result: MagazineLightRifleEmpty + category: Ammo + completetime: 5 + materials: + Steel: 25 - type: latheRecipe id: MagazineLightRifle @@ -355,7 +393,35 @@ category: Ammo completetime: 5 materials: - Steel: 375 + Steel: 565 + +- type: latheRecipe + id: MagazineLightRiflePractice + result: MagazineLightRiflePractice + category: Ammo + completetime: 5 + materials: + Steel: 205 + + +- type: latheRecipe + id: MagazineLightRifleUranium + result: MagazineLightRifleUranium + category: Ammo + completetime: 5 + materials: + Steel: 25 + Plastic: 360 + Uranium: 360 + +- type: latheRecipe + id: MagazineLightRifleIncendiary + result: MagazineLightRifleIncendiary + category: Ammo + completetime: 5 + materials: + Steel: 25 + Plastic: 540 - type: latheRecipe id: MagazineBoxRifle @@ -363,7 +429,7 @@ category: Ammo completetime: 5 materials: - Steel: 950 + Steel: 750 - type: latheRecipe id: MagazineBoxRifleRubber @@ -380,7 +446,41 @@ category: Ammo completetime: 5 materials: - Steel: 1800 + Steel: 900 + +- type: latheRecipe + id: BoxLethalshot + result: BoxLethalshot + category: Ammo + completetime: 5 + materials: + Steel: 320 + +- type: latheRecipe + id: BoxBeanbag + result: BoxBeanbag + category: Ammo + completetime: 5 + materials: + Steel: 160 + Plastic: 240 + +- type: latheRecipe + id: BoxShotgunSlug + result: BoxShotgunSlug + category: Ammo + completetime: 5 + materials: + Steel: 240 + Plastic: 160 + +- type: latheRecipe + id: SpeedLoaderMagnumEmpty + result: SpeedLoaderMagnumEmpty + category: Ammo + completetime: 5 + materials: + Steel: 50 - type: latheRecipe id: MagazineBoxLightRifleRubber @@ -397,47 +497,77 @@ category: Ammo completetime: 5 materials: - Steel: 200 + Steel: 190 - type: latheRecipe - id: ShellShotgunIncendiary - result: ShellShotgunIncendiary + id: SpeedLoaderMagnumPractice + result: SpeedLoaderMagnumPractice category: Ammo - completetime: 2 + completetime: 5 materials: - Plastic: 20 + Steel: 90 - type: latheRecipe - id: CartridgePistolIncendiary - result: CartridgePistolIncendiary + id: SpeedLoaderMagnumUranium + result: SpeedLoaderMagnumUranium category: Ammo - completetime: 2 + completetime: 5 materials: - Plastic: 10 + Steel: 50 + Plastic: 150 + Uranium: 110 - type: latheRecipe - id: CartridgeMagnumIncendiary - result: CartridgeMagnumIncendiary + id: SpeedLoaderMagnumIncendiary + result: SpeedLoaderMagnumIncendiary category: Ammo - completetime: 2 + completetime: 5 materials: - Plastic: 20 + Steel: 50 + Plastic: 150 - type: latheRecipe - id: CartridgeLightRifleIncendiary - result: CartridgeLightRifleIncendiary + id: MagazineShotgunEmpty + result: MagazineShotgunEmpty category: Ammo - completetime: 2 + completetime: 5 materials: - Plastic: 20 + Steel: 50 - type: latheRecipe - id: CartridgeRifleIncendiary - result: CartridgeRifleIncendiary + id: MagazineShotgun + result: MagazineShotgun category: Ammo - completetime: 2 + completetime: 5 materials: - Plastic: 15 + Steel: 240 + +- type: latheRecipe + id: MagazineShotgunBeanbag + result: MagazineShotgunBeanbag + category: Ammo + completetime: 5 + materials: + Steel: 150 + Plastic: 140 + +- type: latheRecipe + id: MagazineShotgunSlug + result: MagazineShotgunSlug + category: Ammo + completetime: 5 + materials: + Steel: 190 + Plastic: 100 + +- type: latheRecipe + id: MagazineShotgunIncendiary + result: MagazineShotgunIncendiary + category: Ammo + completetime: 5 + materials: + Steel: 100 + Plastic: 190 - type: latheRecipe id: MagazineBoxPistolIncendiary @@ -445,7 +575,7 @@ category: Ammo completetime: 5 materials: - Plastic: 650 + Plastic: 600 - type: latheRecipe id: MagazineBoxMagnumIncendiary @@ -453,7 +583,7 @@ category: Ammo completetime: 5 materials: - Plastic: 1250 + Plastic: 240 - type: latheRecipe id: MagazineBoxLightRifleIncendiary @@ -461,7 +591,7 @@ category: Ammo completetime: 5 materials: - Plastic: 1800 + Plastic: 900 - type: latheRecipe id: MagazineBoxRifleIncendiary @@ -469,15 +599,25 @@ category: Ammo completetime: 5 materials: - Plastic: 950 + Plastic: 750 - type: latheRecipe - id: ShellShotgunPractice - result: ShellShotgunPractice + id: BoxShotgunFlare + result: BoxShotgunFlare category: Ammo - completetime: 2 + completetime: 5 materials: - Plastic: 20 + Steel: 80 + Plastic: 80 + +- type: latheRecipe + id: BoxShotgunIncendiary + result: BoxShotgunIncendiary + category: Ammo + completetime: 5 + materials: + Steel: 80 + Plastic: 320 - type: latheRecipe id: MagazineBoxPistolPractice @@ -485,7 +625,7 @@ category: Ammo completetime: 5 materials: - Plastic: 600 + Steel: 300 - type: latheRecipe id: MagazineBoxMagnumPractice @@ -493,7 +633,7 @@ category: Ammo completetime: 5 materials: - Plastic: 1200 + Steel: 60 - type: latheRecipe id: MagazineBoxLightRiflePractice @@ -501,7 +641,7 @@ category: Ammo completetime: 5 materials: - Plastic: 1000 + Steel: 300 - type: latheRecipe id: MagazineBoxRiflePractice @@ -509,7 +649,7 @@ category: Ammo completetime: 5 materials: - Plastic: 900 + Steel: 250 - type: latheRecipe id: WeaponLaserCarbinePractice @@ -532,49 +672,12 @@ Plastic: 200 - type: latheRecipe - id: ShellShotgunUranium - result: ShellShotgunUranium - category: Ammo - completetime: 2 - materials: - Plastic: 15 - Uranium: 10 - -- type: latheRecipe - id: CartridgePistolUranium - result: CartridgePistolUranium - category: Ammo - completetime: 2 - materials: - Plastic: 5 - Uranium: 10 - -- type: latheRecipe - id: CartridgeMagnumUranium - result: CartridgeMagnumUranium - category: Ammo - completetime: 2 - materials: - Plastic: 20 - Uranium: 10 - -- type: latheRecipe - id: CartridgeLightRifleUranium - result: CartridgeLightRifleUranium - category: Ammo - completetime: 2 - materials: - Plastic: 20 - Uranium: 10 - -- type: latheRecipe - id: CartridgeRifleUranium - result: CartridgeRifleUranium + id: BoxShotgunPractice + result: BoxShotgunPractice category: Ammo - completetime: 2 + completetime: 5 materials: - Plastic: 15 - Uranium: 10 + Steel: 80 - type: latheRecipe id: MagazineBoxPistolUranium @@ -582,8 +685,8 @@ category: Ammo completetime: 5 materials: - Plastic: 650 - Uranium: 65 + Plastic: 300 + Uranium: 600 - type: latheRecipe id: MagazineBoxMagnumUranium @@ -591,8 +694,8 @@ category: Ammo completetime: 5 materials: - Plastic: 1250 - Uranium: 125 + Plastic: 240 + Uranium: 180 - type: latheRecipe id: MagazineBoxLightRifleUranium @@ -600,8 +703,8 @@ category: Ammo completetime: 5 materials: - Plastic: 1800 - Uranium: 180 + Plastic: 600 + Uranium: 600 - type: latheRecipe id: MagazineBoxRifleUranium @@ -609,8 +712,27 @@ category: Ammo completetime: 5 materials: - Plastic: 950 - Uranium: 95 + Plastic: 500 + Uranium: 500 + +- type: latheRecipe + id: BoxShotgunUranium + result: BoxShotgunUranium + category: Ammo + completetime: 5 + materials: + Plastic: 320 + Uranium: 240 + +- type: latheRecipe + id: WeaponDisabler + result: WeaponDisabler + category: Weapons + completetime: 6 + materials: + Steel: 300 + Glass: 200 + Plastic: 200 - type: latheRecipe id: WeaponDisablerSMG @@ -621,7 +743,7 @@ Steel: 1000 Glass: 500 Plastic: 500 - + - type: latheRecipe id: MagazineGrenadeEmpty result: MagazineGrenadeEmpty @@ -629,7 +751,7 @@ materials: Steel: 150 Plastic: 50 - + - type: latheRecipe id: GrenadeEMP result: GrenadeEMP @@ -638,7 +760,7 @@ Steel: 150 Plastic: 100 Glass: 20 - + - type: latheRecipe id: GrenadeBlast result: GrenadeBlast @@ -647,7 +769,7 @@ Steel: 150 Plastic: 100 Gold: 50 - + - type: latheRecipe id: GrenadeFlash result: GrenadeFlash @@ -656,4 +778,113 @@ Steel: 150 Plastic: 100 Glass: 20 - \ No newline at end of file + +- type: latheRecipe + id: PortableRecharger + result: PortableRecharger + completetime: 15 + materials: + Steel: 2000 + Uranium: 2000 + Plastic: 1000 + Plasma: 500 + Glass: 500 + +- type: latheRecipe + id: ShellShotgun + result: ShellShotgun + category: Ammo + completetime: 2 + materials: + Steel: 20 + +- type: latheRecipe + id: ShellShotgunSlug + result: ShellShotgunSlug + completetime: 2 + materials: + Steel: 25 + +- type: latheRecipe + id: ShellShotgunFlare + result: ShellShotgunFlare + category: Ammo + completetime: 2 + materials: + Plastic: 20 + Steel: 5 + +- type: latheRecipe + id: CartridgeLightRifleIncendiary + result: CartridgeLightRifleIncendiary + category: Ammo + completetime: 2 + materials: + Plastic: 20 + +- type: latheRecipe + id: CartridgeMagnumIncendiary + result: CartridgeMagnumIncendiary + category: Ammo + completetime: 2 + materials: + Plastic: 20 + +- type: latheRecipe + id: CartridgePistolIncendiary + result: CartridgePistolIncendiary + category: Ammo + completetime: 2 + materials: + Plastic: 10 + +- type: latheRecipe + id: CartridgeRifleIncendiary + result: CartridgeRifleIncendiary + category: Ammo + completetime: 2 + materials: + Plastic: 15 + +- type: latheRecipe + id: CartridgePistolUranium + result: CartridgePistolUranium + category: Ammo + completetime: 2 + materials: + Plastic: 5 + Uranium: 10 + +- type: latheRecipe + id: CartridgeMagnumUranium + result: CartridgeMagnumUranium + category: Ammo + completetime: 2 + materials: + Plastic: 20 + Uranium: 10 + +- type: latheRecipe + id: CartridgeLightRifleUranium + result: CartridgeLightRifleUranium + category: Ammo + completetime: 2 + materials: + Plastic: 20 + Uranium: 10 + +- type: latheRecipe + id: CartridgeRifleUranium + result: CartridgeRifleUranium + category: Ammo + completetime: 2 + materials: + Plastic: 15 + Uranium: 10 + +- type: latheRecipe + id: ShadowkinRestraints + result: ClothingOuterShadowkinRestraints + completetime: 6 + materials: + Steel: 300 diff --git a/Resources/Prototypes/Recipes/Lathes/sheet.yml b/Resources/Prototypes/Recipes/Lathes/sheet.yml index 053715a1811..9f83c58e66c 100644 --- a/Resources/Prototypes/Recipes/Lathes/sheet.yml +++ b/Resources/Prototypes/Recipes/Lathes/sheet.yml @@ -176,3 +176,37 @@ completetime: 1 materials: Wood: 50 + +- type: latheRecipe + id: CoreSilver + icon: + sprite: Objects/Misc/guardian_info.rsi + state: icon + result: CoreSilver + completetime: 10 + materials: + Bluespace: 500 + Silver: 1000 + Plastic: 1000 + +- type: latheRecipe + id: BluespaceCrystal + icon: + sprite: Objects/Materials/materials.rsi + state: bluespace + result: MaterialBluespace1 + applyMaterialDiscount: false + completetime: 4 + materials: + RawBluespace: 100 + +- type: latheRecipe + id: NormalityCrystal + icon: + sprite: Objects/Materials/materials.rsi + state: normality + result: MaterialNormality1 + applyMaterialDiscount: false + completetime: 4 + materials: + RawNormality: 100 diff --git a/Resources/Prototypes/Recipes/Reactions/drinks.yml b/Resources/Prototypes/Recipes/Reactions/drinks.yml index 812cded972f..afb315c09d9 100644 --- a/Resources/Prototypes/Recipes/Reactions/drinks.yml +++ b/Resources/Prototypes/Recipes/Reactions/drinks.yml @@ -86,6 +86,16 @@ products: B52: 3 +- type: reaction + id: BudgetInsulsDrink + reactants: + Tequila: + amount: 1 + VodkaRedBool: + amount: 2 + products: + BudgetInsulsDrink: 3 + - type: reaction id: BlueHawaiian reactants: @@ -516,6 +526,16 @@ products: IcedTea: 3 +- type: reaction + id: IrishBool + reactants: + EnergyDrink: + amount: 1 + IrishCarBomb: + amount: 1 + products: + IrishBool: 2 + - type: reaction id: IrishCarBomb reactants: @@ -794,6 +814,18 @@ products: RoyRogers: 3 +- type: reaction + id: Rubberneck + reactants: + EnergyDrink: + amount: 2 + Moonshine: + amount: 1 + Sugar: + amount: 1 + products: + Rubberneck: 4 + - type: reaction id: Sbiten reactants: @@ -943,6 +975,16 @@ products: VodkaMartini: 3 +- type: reaction + id: VodkaRedBool + reactants: + Vodka: + amount: 1 + EnergyDrink: + amount: 2 + products: + VodkaRedBool: 3 + - type: reaction id: VodkaTonic reactants: @@ -963,6 +1005,18 @@ products: WhiskeyCola: 3 +- type: reaction + id: WatermelonWakeup + reactants: + JuiceWatermelon: + amount: 1 + Whiskey: + amount: 1 + EnergyDrink: + amount: 1 + products: + WatermelonWakeup: 3 + - type: reaction id: WhiteRussian reactants: @@ -983,6 +1037,16 @@ products: WhiskeySoda: 3 +- type: reaction + id: XenoBasher + reactants: + ManlyDorf: + amount: 2 + EnergyDrink: + amount: 1 + products: + XenoBasher: 3 + - type: reaction id: HotRamen minTemp: 323.15 diff --git a/Resources/Prototypes/Recipes/Reactions/medicine.yml b/Resources/Prototypes/Recipes/Reactions/medicine.yml index a1ca3ea38e2..2e9b1d4f854 100644 --- a/Resources/Prototypes/Recipes/Reactions/medicine.yml +++ b/Resources/Prototypes/Recipes/Reactions/medicine.yml @@ -298,6 +298,18 @@ products: Lipozine: 3 +- type: reaction + id: Mannitol + reactants: + Hydrogen: + amount: 1 + Water: + amount: 1 + Sugar: + amount: 1 + products: + Mannitol: 3 + - type: reaction id: MindbreakerToxin minTemp: 370 @@ -542,11 +554,21 @@ amount: 1 Silicon: amount: 1 - Benzene: - amount: 1 products: Insuzine: 3 - Ash: 1 + +- type: reaction + id: Opporozidone + minTemp: 400 #Maybe if a method of reducing reagent temp exists one day, this could be -50 + reactants: + Cognizine: + amount: 1 + Plasma: + amount: 2 + Doxarubixadone: + amount: 1 + products: + Opporozidone: 3 - type: reaction id: Necrosol @@ -574,3 +596,43 @@ amount: 2 products: Aloxadone: 4 + +- type: reaction + id: Psicodine + impact: Medium + reactants: + Mannitol: + amount: 2 + Impedrezene: + amount: 1 + Water: + amount: 2 + products: + Psicodine: 4 + +- type: reaction + id: Lipolicide + reactants: + Ephedrine: + amount: 1 + Diethylamine: + amount: 1 + Mercury: + amount: 1 + products: + Lipolicide: 3 + +- type: reaction + id: Happiness + reactants: + Laughter: + amount: 2 + Epinephrine: + amount: 1 + Ethanol: + amount: 1 + Plasma: + amount: 5 + catalyst: true + products: + Happiness: 4 diff --git a/Resources/Prototypes/Recipes/Reactions/pyrotechnic.yml b/Resources/Prototypes/Recipes/Reactions/pyrotechnic.yml index 72162d9446a..2fa72dbf135 100644 --- a/Resources/Prototypes/Recipes/Reactions/pyrotechnic.yml +++ b/Resources/Prototypes/Recipes/Reactions/pyrotechnic.yml @@ -31,6 +31,7 @@ - type: reaction id: ChlorineTrifluoride + minTemp: 370 priority: 20 reactants: Chlorine: @@ -38,7 +39,6 @@ Fluorine: amount: 3 effects: - # TODO solution temperature!! - !type:ExplosionReactionEffect explosionType: Default # 15 damage per intensity. maxIntensity: 200 diff --git a/Resources/Prototypes/Research/arsenal.yml b/Resources/Prototypes/Research/arsenal.yml index 7432d4225f2..ee2be33c831 100644 --- a/Resources/Prototypes/Research/arsenal.yml +++ b/Resources/Prototypes/Research/arsenal.yml @@ -24,11 +24,12 @@ tier: 1 cost: 10000 recipeUnlocks: - - ShellShotgunIncendiary - - CartridgePistolIncendiary - - CartridgeMagnumIncendiary - - CartridgeLightRifleIncendiary - - CartridgeRifleIncendiary + - BoxShotgunIncendiary + - MagazineRifleIncendiary + - MagazinePistolIncendiary + - MagazineLightRifleIncendiary + - SpeedLoaderMagnumIncendiary + - MagazineShotgunIncendiary - MagazineBoxPistolIncendiary - MagazineBoxMagnumIncendiary - MagazineBoxLightRifleIncendiary @@ -60,7 +61,9 @@ tier: 1 cost: 5000 recipeUnlocks: - - ShellShotgunBeanbag + - MagazineShotgunBeanbag + - ShellTranquilizer + - BoxBeanbag - CartridgePistolRubber - CartridgeMagnumRubber - CartridgeLightRifleRubber @@ -69,10 +72,9 @@ - MagazineBoxMagnumRubber - MagazineBoxLightRifleRubber - MagazineBoxRifleRubber - # DeltaV - .38 special rubber ammo - Adds .38 special rubber ammo to the research tree - CartridgeSpecialRubber - MagazineBoxSpecialRubber - # End of modified code + - WeaponDisabler - type: technology id: UraniumMunitions @@ -84,19 +86,17 @@ tier: 1 cost: 7500 recipeUnlocks: - - ShellShotgunUranium - - CartridgePistolUranium - - CartridgeMagnumUranium - - CartridgeLightRifleUranium - - CartridgeRifleUranium + - MagazineRifleUranium + - MagazinePistolUranium + - MagazineLightRifleUranium + - SpeedLoaderMagnumUranium - MagazineBoxPistolUranium - MagazineBoxMagnumUranium - MagazineBoxLightRifleUranium - MagazineBoxRifleUranium - # DeltaV - .38 special uranium ammo - Adds .38 special uranium ammo to the research tree + - BoxShotgunUranium - CartridgeSpecialUranium - MagazineBoxSpecialUranium - # End of modified code - type: technology id: AdvancedRiotControl @@ -113,6 +113,7 @@ - TelescopicShield - HoloprojectorSecurity - WeaponDisablerSMG + - BolaEnergy # Tier 2 @@ -173,6 +174,7 @@ - PowerCageMedium - MagazineGrenadeEmpty - GrenadeFlash + - GrenadeBlast - ShuttleGunSvalinnMachineGunCircuitboard - ShuttleGunPerforatorCircuitboard - ShuttleGunFriendshipCircuitboard @@ -192,6 +194,7 @@ cost: 15000 recipeUnlocks: - WeaponAdvancedLaser + - PortableRecharger - type: technology id: ExperimentalBatteryAmmo diff --git a/Resources/Prototypes/Research/civilianservices.yml b/Resources/Prototypes/Research/civilianservices.yml index 0a9f74b86d6..26b519e1efa 100644 --- a/Resources/Prototypes/Research/civilianservices.yml +++ b/Resources/Prototypes/Research/civilianservices.yml @@ -191,8 +191,6 @@ - WeaponSprayNozzle - ClothingBackpackWaterTank -# Tier 3 - - type: technology id: BluespaceCargoTransport name: research-technology-bluespace-cargo-transport @@ -200,11 +198,13 @@ sprite: Structures/cargo_telepad.rsi state: display discipline: CivilianServices - tier: 3 + tier: 2 cost: 15000 recipeUnlocks: - CargoTelepadMachineCircuitboard +# Tier 3 + - type: technology id: QuantumFiberWeaving name: research-technology-quantum-fiber-weaving diff --git a/Resources/Prototypes/Research/experimental.yml b/Resources/Prototypes/Research/experimental.yml index d46e1db144e..60017fc98d1 100644 --- a/Resources/Prototypes/Research/experimental.yml +++ b/Resources/Prototypes/Research/experimental.yml @@ -84,17 +84,30 @@ # Tier 2 +- type: technology + id: AdvancedParts + name: research-technology-advanced-parts + icon: + sprite: Objects/Misc/stock_parts.rsi + state: advanced_matter_bin + discipline: Experimental + tier: 2 + cost: 10000 + recipeUnlocks: + - AdvancedCapacitorStockPart + - AdvancedMatterBinStockPart + - NanoManipulatorStockPart + - type: technology id: AbnormalArtifactManipulation name: research-technology-abnormal-artifact-manipulation icon: - sprite: Structures/Machines/traversal_distorter.rsi - state: display + sprite: Structures/Machines/artifact_crusher.rsi + state: icon discipline: Experimental tier: 2 cost: 5000 recipeUnlocks: - - TraversalDistorterMachineCircuitboard - ArtifactCrusherMachineCircuitboard - type: technology @@ -155,18 +168,32 @@ # Tier 3 -#- type: technology # DeltaV - LRP -# id: GravityManipulation -# name: research-technology-gravity-manipulation -# icon: -# sprite: Objects/Weapons/Guns/Launchers/tether_gun.rsi -# state: base -# discipline: Experimental -# tier: 3 -# cost: 10000 -# recipeUnlocks: -# - WeaponForceGun -# - WeaponTetherGun +- type: technology + id: SuperParts + name: research-technology-super-parts + icon: + sprite: Objects/Misc/stock_parts.rsi + state: super_matter_bin + discipline: Experimental + tier: 3 + cost: 15000 + recipeUnlocks: + - SuperCapacitorStockPart + - SuperMatterBinStockPart + - PicoManipulatorStockPart + +- type: technology + id: GravityManipulation + name: research-technology-gravity-manipulation + icon: + sprite: Objects/Weapons/Guns/Launchers/tether_gun.rsi + state: base + discipline: Experimental + tier: 3 + cost: 10000 + recipeUnlocks: + - WeaponForceGun + - WeaponTetherGun - type: technology id: QuantumLeaping diff --git a/Resources/Prototypes/Research/industrial.yml b/Resources/Prototypes/Research/industrial.yml index 33377f52520..2e1e7f5b26d 100644 --- a/Resources/Prototypes/Research/industrial.yml +++ b/Resources/Prototypes/Research/industrial.yml @@ -14,7 +14,8 @@ - BorgModuleMining - OreProcessorIndustrialMachineCircuitboard - OreBagOfHolding - - SalvageExpeditionsComputerCircuitboard # DeltaV + - ClothingMaskWeldingGas + - SalvageExpeditionsComputerCircuitboard - type: technology id: AdvancedPowercells @@ -53,6 +54,7 @@ recipeUnlocks: - AutolatheHyperConvectionMachineCircuitboard - ProtolatheHyperConvectionMachineCircuitboard + - CircuitImprinterHyperConvectionMachineCircuitboard - SheetifierMachineCircuitboard - type: technology @@ -105,18 +107,18 @@ - RipleyPeripheralsElectronics - MechEquipmentGrabber -#- type: technology -# id: Grappling -# name: research-technology-grappling -# icon: -# sprite: Objects/Weapons/Guns/Launchers/grappling_gun.rsi -# state: base -# discipline: Industrial -# tier: 1 -# cost: 5000 -# recipeUnlocks: -# - WeaponGrapplingGun -# - BorgModuleGrapplingGun +- type: technology + id: Grappling + name: research-technology-grappling + icon: + sprite: Objects/Weapons/Guns/Launchers/grappling_gun.rsi + state: base + discipline: Industrial + tier: 1 + cost: 5000 + recipeUnlocks: + - WeaponGrapplingGun + - BorgModuleGrapplingGun # Tier 2 diff --git a/Resources/Prototypes/Roles/Antags/Thief.yml b/Resources/Prototypes/Roles/Antags/Thief.yml index e6c555c3e77..1a57d270cc5 100644 --- a/Resources/Prototypes/Roles/Antags/Thief.yml +++ b/Resources/Prototypes/Roles/Antags/Thief.yml @@ -3,4 +3,4 @@ name: roles-antag-thief-name antagonist: true setPreference: false - objective: roles-antag-thief-objective + objective: roles-antag-thief-objective \ No newline at end of file diff --git a/Resources/Prototypes/Roles/Antags/nukeops.yml b/Resources/Prototypes/Roles/Antags/nukeops.yml index 57852b981a0..c1c57df6391 100644 --- a/Resources/Prototypes/Roles/Antags/nukeops.yml +++ b/Resources/Prototypes/Roles/Antags/nukeops.yml @@ -1,8 +1,9 @@ - type: antag + setPreference: false id: Nukeops name: roles-antag-nuclear-operative-name antagonist: true - setPreference: false + setPreference: true objective: roles-antag-nuclear-operative-objective requirements: - !type:CharacterOverallTimeRequirement @@ -12,23 +13,25 @@ min: 36000 # DeltaV - 10 hours - type: antag + setPreference: false id: NukeopsMedic name: roles-antag-nuclear-operative-agent-name antagonist: true - setPreference: false + setPreference: true objective: roles-antag-nuclear-operative-agent-objective requirements: - !type:CharacterOverallTimeRequirement - min: 108000 # DeltaV - 30 hours - - !type:CharacterDepartmentTimeRequirement # DeltaV - Medical dept time requirement + min: 108000 # 30 hours + - !type:CharacterDepartmentTimeRequirement department: Medical - min: 36000 # DeltaV - 10 hours + min: 36000 # 10 hours - type: antag + setPreference: false id: NukeopsCommander name: roles-antag-nuclear-operative-commander-name antagonist: true - setPreference: false + setPreference: true objective: roles-antag-nuclear-operative-commander-objective requirements: - !type:CharacterOverallTimeRequirement diff --git a/Resources/Prototypes/Roles/Antags/terminator.yml b/Resources/Prototypes/Roles/Antags/terminator.yml deleted file mode 100644 index ef1f176b8de..00000000000 --- a/Resources/Prototypes/Roles/Antags/terminator.yml +++ /dev/null @@ -1,6 +0,0 @@ -- type: antag - id: Terminator - name: roles-antag-terminator-name - antagonist: true - setPreference: false - objective: roles-antag-terminator-objective diff --git a/Resources/Prototypes/Roles/Antags/traitor.yml b/Resources/Prototypes/Roles/Antags/traitor.yml index 221ef5507d5..ff6bd687cc4 100644 --- a/Resources/Prototypes/Roles/Antags/traitor.yml +++ b/Resources/Prototypes/Roles/Antags/traitor.yml @@ -6,4 +6,4 @@ objective: roles-antag-syndicate-agent-objective requirements: - !type:CharacterOverallTimeRequirement # DeltaV - Playtime requirement - min: 86400 # DeltaV - 24 hours + min: 86400 # DeltaV - 24 hours \ No newline at end of file diff --git a/Resources/Prototypes/Roles/Ghostroles/syndicate.yml b/Resources/Prototypes/Roles/Ghostroles/syndicate.yml new file mode 100644 index 00000000000..24c0d8b3e3b --- /dev/null +++ b/Resources/Prototypes/Roles/Ghostroles/syndicate.yml @@ -0,0 +1,27 @@ +- type: ghostRole + id: SyndicateKobold + name: ghost-role-information-syndicate-kobold-reinforcement-name + description: ghost-role-information-syndicate-kobold-reinforcement-description + rules: ghost-role-information-syndicate-kobold-reinforcement-rules + entityPrototype: MobKoboldSyndicateAgent + +- type: ghostRole + id: SyndicateKoboldNukeops + name: ghost-role-information-syndicate-kobold-reinforcement-name + description: ghost-role-information-syndicate-kobold-reinforcement-description + rules: ghost-role-information-syndicate-kobold-reinforcement-rules + entityPrototype: MobKoboldSyndicateAgentNukeops + +- type: ghostRole + id: SyndicateMonkey + name: ghost-role-information-syndicate-monkey-reinforcement-name + description: ghost-role-information-syndicate-monkey-reinforcement-description + rules: ghost-role-information-syndicate-monkey-reinforcement-name + entityPrototype: MobMonkeySyndicateAgent + +- type: ghostRole + id: SyndicateMonkeyNukeops + name: ghost-role-information-syndicate-monkey-reinforcement-name + description: ghost-role-information-syndicate-monkey-reinforcement-description + rules: ghost-role-information-syndicate-monkey-reinforcement-name + entityPrototype: MobMonkeySyndicateAgentNukeops \ No newline at end of file diff --git a/Resources/Prototypes/Roles/Jobs/Civilian/chaplain.yml b/Resources/Prototypes/Roles/Jobs/Civilian/chaplain.yml index 7b594b1f5ad..8b2d826ffd1 100644 --- a/Resources/Prototypes/Roles/Jobs/Civilian/chaplain.yml +++ b/Resources/Prototypes/Roles/Jobs/Civilian/chaplain.yml @@ -1,47 +1,55 @@ - type: job + setPreference: false id: Chaplain name: job-name-chaplain description: job-description-chaplain playTimeTracker: JobChaplain - setPreference: false requirements: - !type:CharacterDepartmentTimeRequirement - department: Epistemics # DeltaV - Epistemics Department replacing Science - min: 14400 #DeltaV 4 hours - # - !type:CharacterLogicOrRequirement - # requirements: - # - !type:CharacterSpeciesRequirement - # inverted: true - # species: - # - IPC - # - !type:CharacterTraitRequirement - # traits: - # - AnomalousPositronics + department: Epistemics # Chaplain is now one of the station's "Crew-Aligned Wizards" + min: 14400 # 4 hours + - !type:CharacterLogicOrRequirement + requirements: + - !type:CharacterSpeciesRequirement + inverted: true + species: + - IPC + - !type:CharacterTraitRequirement + traits: + - AnomalousPositronics + - !type:CharacterLogicOrRequirement + requirements: + - !type:CharacterSpeciesRequirement + inverted: true + species: + - Shadowkin startingGear: ChaplainGear icon: "JobIconChaplain" supervisors: job-supervisors-rd access: - Chapel - - Research # DeltaV - Move Chaplain into Epistemics + - Research - Maintenance special: - !type:AddComponentSpecial components: - - type: BibleUser #Lets them heal with bibles - # - type: Psionic - # powerRollMultiplier: 3 - # - type: InnatePsionicPowers - # powersToAdd: - # - TelepathyPower + - type: BibleUser + - type: Psionic + powerRollMultiplier: 3 + - type: InnatePsionicPowers + powersToAdd: + - TelepathyPower + - HealingWordPower + - SummonRemiliaPower - type: startingGear id: ChaplainGear equipment: jumpsuit: ClothingUniformJumpsuitChaplain - back: ClothingBackpackChaplainFilled + back: ClothingBackpack shoes: ClothingShoesColorBlack id: ChaplainPDA - ears: ClothingHeadsetScience # DeltaV - Move Chaplain into Epistemics + ears: ClothingHeadsetScience innerClothingSkirt: ClothingUniformJumpskirtChaplain satchel: ClothingBackpackSatchelChaplainFilled duffelbag: ClothingBackpackDuffelChaplainFilled diff --git a/Resources/Prototypes/Roles/Jobs/Civilian/librarian.yml b/Resources/Prototypes/Roles/Jobs/Civilian/librarian.yml index c184557af13..65823611cc1 100644 --- a/Resources/Prototypes/Roles/Jobs/Civilian/librarian.yml +++ b/Resources/Prototypes/Roles/Jobs/Civilian/librarian.yml @@ -1,4 +1,5 @@ - type: job + setPreference: false id: Librarian name: job-name-librarian description: job-description-librarian @@ -7,23 +8,37 @@ - !type:CharacterDepartmentTimeRequirement department: Epistemics min: 14400 - # - !type:CharacterLogicOrRequirement - # requirements: - # - !type:CharacterSpeciesRequirement - # inverted: true - # species: - # - IPC - # - !type:CharacterTraitRequirement - # traits: - # - AnomalousPositronics + - !type:CharacterLogicOrRequirement + requirements: + - !type:CharacterSpeciesRequirement + inverted: true + species: + - IPC + - !type:CharacterTraitRequirement + traits: + - AnomalousPositronics + - !type:CharacterLogicOrRequirement + requirements: + - !type:CharacterSpeciesRequirement + inverted: true + species: + - Shadowkin startingGear: LibrarianGear icon: "JobIconLibrarian" - supervisors: job-supervisors-hop + supervisors: job-supervisors-rd access: - - Service + - Research - Maintenance - - Library # DeltaV - Add Library access - setPreference: false + - Library + special: + - !type:AddComponentSpecial + components: + - type: Psionic + - type: InnatePsionicPowers + powersToAdd: + - XenoglossyPower + - TelepathyPower + - type: startingGear id: LibrarianGear @@ -31,6 +46,7 @@ jumpsuit: ClothingUniformJumpsuitLibrarian back: ClothingBackpackLibrarianFilled shoes: ClothingShoesBootsLaceup + outerClothing: ClothingOuterCoatRnd id: LibrarianPDA ears: ClothingHeadsetScience pocket1: d10Dice diff --git a/Resources/Prototypes/Roles/Jobs/Fun/emergencyresponseteam.yml b/Resources/Prototypes/Roles/Jobs/Fun/emergencyresponseteam.yml index 22d0a4d77ff..f1e8fc9cf87 100644 --- a/Resources/Prototypes/Roles/Jobs/Fun/emergencyresponseteam.yml +++ b/Resources/Prototypes/Roles/Jobs/Fun/emergencyresponseteam.yml @@ -27,7 +27,7 @@ id: ERTLeaderPDA ears: ClothingHeadsetAltCentCom belt: ClothingBeltSecurityFilled - pocket1: WeaponPistolN1984Nonlethal + pocket1: WeaponPistolN1984NonLethal pocket2: FlashlightSeclite - type: startingGear @@ -44,7 +44,7 @@ id: ERTLeaderPDA ears: ClothingHeadsetAltCentCom belt: ClothingBeltSecurityFilled - pocket1: WeaponPistolN1984Nonlethal + pocket1: WeaponPistolN1984NonLethal pocket2: FlashlightSeclite - type: startingGear diff --git a/Resources/Prototypes/Roles/Jobs/Fun/misc_startinggear.yml b/Resources/Prototypes/Roles/Jobs/Fun/misc_startinggear.yml index b2bcd8bcb49..7dd3e6823ae 100644 --- a/Resources/Prototypes/Roles/Jobs/Fun/misc_startinggear.yml +++ b/Resources/Prototypes/Roles/Jobs/Fun/misc_startinggear.yml @@ -79,6 +79,15 @@ satchel: ClothingBackpackDuffelSyndicateOperative duffelbag: ClothingBackpackDuffelSyndicateOperative +# Syndicate Operative Outfit - Civilian +- type: startingGear + id: SyndicateOperativeGearCivilian + equipment: + jumpsuit: ClothingUniformJumpsuitSyndieFormal + back: ClothingBackpackDuffelSyndicate + shoes: ClothingShoesBootsCombat + gloves: ClothingHandsGlovesColorBlack + #Syndicate Operative Outfit - Basic - type: startingGear id: SyndicateOperativeGearBasic @@ -144,7 +153,7 @@ jumpsuit: ClothingUniformJumpsuitOperative back: ClothingBackpackDuffelSyndicateOperativeMedic mask: ClothingMaskGasSyndicate - eyes: ClothingEyesHudSyndicateMed # - Delta-V + eyes: ClothingEyesHudSyndicateAgent ears: ClothingHeadsetAltSyndicate gloves: ClothingHandsGlovesCombat outerClothing: ClothingOuterHardsuitSyndieMedic diff --git a/Resources/Prototypes/Roles/Jobs/Medical/chief_medical_officer.yml b/Resources/Prototypes/Roles/Jobs/Medical/chief_medical_officer.yml index f22ed1128db..0e840dfbd50 100644 --- a/Resources/Prototypes/Roles/Jobs/Medical/chief_medical_officer.yml +++ b/Resources/Prototypes/Roles/Jobs/Medical/chief_medical_officer.yml @@ -1,12 +1,12 @@ # Best job. - type: job + setPreference: false id: ChiefMedicalOfficer name: job-name-cmo description: job-description-cmo playTimeTracker: JobChiefMedicalOfficer antagAdvantage: 6 # DeltaV - Reduced TC: Head of Staff - setPreference: false requirements: - !type:CharacterPlaytimeRequirement tracker: JobChemist @@ -19,6 +19,15 @@ min: 43200 # DeltaV - 12 hours - !type:CharacterOverallTimeRequirement min: 72000 # DeltaV - 20 hours + - !type:CharacterLogicOrRequirement + requirements: + - !type:CharacterSpeciesRequirement + inverted: true + species: + - Shadowkin + - !type:CharacterTraitRequirement + traits: + - ShadowkinBlackeye weight: 10 startingGear: CMOGear icon: "JobIconChiefMedicalOfficer" diff --git a/Resources/Prototypes/Roles/Jobs/Medical/medical_doctor.yml b/Resources/Prototypes/Roles/Jobs/Medical/medical_doctor.yml index 2c97459fd04..b1ff658ef72 100644 --- a/Resources/Prototypes/Roles/Jobs/Medical/medical_doctor.yml +++ b/Resources/Prototypes/Roles/Jobs/Medical/medical_doctor.yml @@ -1,10 +1,11 @@ - type: job + setPreference: false id: MedicalDoctor name: job-name-doctor description: job-description-doctor playTimeTracker: JobMedicalDoctor requirements: - - !type:DepartmentTimeRequirement + - !type:CharacterDepartmentTimeRequirement department: Medical min: 14400 #4 hrs startingGear: DoctorGear @@ -16,7 +17,6 @@ extendedAccess: - Chemistry - Paramedic # DeltaV - Add Paramedic access - setPreference: false special: - !type:AddComponentSpecial components: diff --git a/Resources/Prototypes/Roles/Jobs/Medical/medical_intern.yml b/Resources/Prototypes/Roles/Jobs/Medical/medical_intern.yml index fd377154894..e506c535f31 100644 --- a/Resources/Prototypes/Roles/Jobs/Medical/medical_intern.yml +++ b/Resources/Prototypes/Roles/Jobs/Medical/medical_intern.yml @@ -1,4 +1,5 @@ - type: job + setPreference: false id: MedicalIntern name: job-name-intern description: job-description-intern @@ -15,7 +16,6 @@ access: - Medical - Maintenance - setPreference: false special: - !type:AddComponentSpecial components: diff --git a/Resources/Prototypes/Roles/Jobs/Medical/paramedic.yml b/Resources/Prototypes/Roles/Jobs/Medical/paramedic.yml index 7ab163d3516..aa8fc4341f4 100644 --- a/Resources/Prototypes/Roles/Jobs/Medical/paramedic.yml +++ b/Resources/Prototypes/Roles/Jobs/Medical/paramedic.yml @@ -1,4 +1,5 @@ - type: job + setPreference: false id: Paramedic name: job-name-paramedic description: job-description-paramedic @@ -23,7 +24,6 @@ - Paramedic # DeltaV - Add Paramedic access extendedAccess: - Chemistry - setPreference: false special: - !type:AddComponentSpecial components: diff --git a/Resources/Prototypes/Roles/Jobs/Science/research_director.yml b/Resources/Prototypes/Roles/Jobs/Science/research_director.yml index 8a67a31d60d..f686b0e6dd9 100644 --- a/Resources/Prototypes/Roles/Jobs/Science/research_director.yml +++ b/Resources/Prototypes/Roles/Jobs/Science/research_director.yml @@ -1,24 +1,31 @@ - type: job + setPreference: false id: ResearchDirector name: job-name-rd description: job-description-rd playTimeTracker: JobResearchDirector antagAdvantage: 6 # DeltaV - Reduced TC: Head of Staff requirements: - - !type:DepartmentTimeRequirement + - !type:CharacterDepartmentTimeRequirement department: Epistemics # DeltaV - Epistemics Department replacing Science min: 54000 # DeltaV - 15 hours - !type:CharacterOverallTimeRequirement min: 72000 # DeltaV - 20 hours - # - !type:CharacterLogicOrRequirement - # requirements: - # - !type:CharacterSpeciesRequirement - # inverted: true - # species: - # - IPC - # - !type:CharacterTraitRequirement - # traits: - # - AnomalousPositronics + - !type:CharacterLogicOrRequirement + requirements: + - !type:CharacterSpeciesRequirement + inverted: true + species: + - IPC + - !type:CharacterTraitRequirement + traits: + - AnomalousPositronics + - !type:CharacterLogicOrRequirement + requirements: + - !type:CharacterSpeciesRequirement + inverted: true + species: + - Shadowkin weight: 10 startingGear: ResearchDirectorGear icon: "JobIconResearchDirector" @@ -30,21 +37,25 @@ - Command - Maintenance - ResearchDirector - - Mantis # DeltaV - Psionic Mantis, see Resources/Prototypes/DeltaV/Access/epistemics.yml + - Mantis # DeltaV - Mantis, see Resources/Prototypes/DeltaV/Access/epistemics.yml - Chapel # DeltaV - Chaplain is in Epistemics - Cryogenics special: # Nyanotrasen - Mystagogue can use the Bible - !type:AddComponentSpecial components: - type: BibleUser # Nyano - Lets them heal with bibles - #- type: Psionic # Nyano - They start with telepathic chat - - type: DispelPower # Nyano - They get the Dispel psionic power on spawn + - type: Psionic # Nyano - They start with telepathic chat + powerSlots: 3 - !type:AddImplantSpecial implants: [ MindShieldImplant ] - !type:AddComponentSpecial components: - type: CommandStaff - setPreference: false + - type: InnatePsionicPowers + powersToAdd: + - DispelPower + - MetapsionicPower + - TelepathyPower - type: startingGear id: ResearchDirectorGear diff --git a/Resources/Prototypes/Roles/Jobs/Science/roboticist.yml b/Resources/Prototypes/Roles/Jobs/Science/roboticist.yml index 7f1bb8ef8c7..73dc3590627 100644 --- a/Resources/Prototypes/Roles/Jobs/Science/roboticist.yml +++ b/Resources/Prototypes/Roles/Jobs/Science/roboticist.yml @@ -1,9 +1,9 @@ - type: job + setPreference: false id: Roboticist name: job-name-roboticist description: job-description-roboticist playTimeTracker: JobRoboticist - setPreference: false requirements: - !type:CharacterDepartmentTimeRequirement department: Epistemics diff --git a/Resources/Prototypes/Roles/Jobs/Science/senior_researcher.yml b/Resources/Prototypes/Roles/Jobs/Science/senior_researcher.yml index 90234250302..25b170a46e6 100644 --- a/Resources/Prototypes/Roles/Jobs/Science/senior_researcher.yml +++ b/Resources/Prototypes/Roles/Jobs/Science/senior_researcher.yml @@ -3,7 +3,7 @@ name: job-name-senior-researcher description: job-description-senior-researcher playTimeTracker: JobSeniorResearcher - setPreference: false # DeltaV - Disable Senior Roles round start selection + setPreference: true requirements: - !type:CharacterDepartmentTimeRequirement department: Epistemics # DeltaV - Epistemics Department replacing Science diff --git a/Resources/Prototypes/Roles/Jobs/Security/detective.yml b/Resources/Prototypes/Roles/Jobs/Security/detective.yml index 90149550e6b..8046d83203f 100644 --- a/Resources/Prototypes/Roles/Jobs/Security/detective.yml +++ b/Resources/Prototypes/Roles/Jobs/Security/detective.yml @@ -28,7 +28,7 @@ id: DetectiveGear equipment: jumpsuit: ClothingUniformJumpsuitDetective - back: ClothingBackpackSecurityFilledDetective + back: ClothingBackpackSecurity shoes: ClothingShoesBootsCombatFilled eyes: ClothingEyesGlassesSunglasses head: ClothingHeadHatFedoraBrown @@ -37,5 +37,5 @@ ears: ClothingHeadsetSecurity belt: ClothingBeltHolsterFilled innerClothingSkirt: ClothingUniformJumpskirtDetective - satchel: ClothingBackpackSatchelSecurityFilledDetective - duffelbag: ClothingBackpackDuffelSecurityFilledDetective + satchel: ClothingBackpackSatchelSecurity + duffelbag: ClothingBackpackDuffelSecurity diff --git a/Resources/Prototypes/Roles/Jobs/Security/head_of_security.yml b/Resources/Prototypes/Roles/Jobs/Security/head_of_security.yml index 30d6482b7b9..d6303749cdb 100644 --- a/Resources/Prototypes/Roles/Jobs/Security/head_of_security.yml +++ b/Resources/Prototypes/Roles/Jobs/Security/head_of_security.yml @@ -1,4 +1,5 @@ - type: job + setPreference: false id: HeadOfSecurity name: job-name-hos description: job-description-hos @@ -7,6 +8,9 @@ - !type:CharacterPlaytimeRequirement tracker: JobWarden min: 14400 #DeltaV 4 hrs + # - !type:RoleTimeRequirement # DeltaV - No Security Officer time requirement - REIMPLEMENT WHEN MORE PEOPLE HAVE IT + # role: JobDetective + # time: 14400 #DeltaV 4 hrs - !type:CharacterDepartmentTimeRequirement # DeltaV - Command dept time requirement department: Command min: 36000 # 10 hours @@ -37,7 +41,6 @@ - !type:AddComponentSpecial components: - type: CommandStaff - setPreference: false - type: startingGear id: HoSGear @@ -50,7 +53,6 @@ gloves: ClothingHandsGlovesCombat ears: ClothingHeadsetAltSecurity belt: ClothingBeltSecurityFilled - pocket1: WeaponPistolMk58Nonlethal innerClothingSkirt: ClothingUniformJumpskirtHoS satchel: ClothingBackpackSatchelHOSFilled duffelbag: ClothingBackpackDuffelHOSFilled diff --git a/Resources/Prototypes/Roles/Jobs/Security/security_cadet.yml b/Resources/Prototypes/Roles/Jobs/Security/security_cadet.yml index be249ee31d2..826d19cdfe5 100644 --- a/Resources/Prototypes/Roles/Jobs/Security/security_cadet.yml +++ b/Resources/Prototypes/Roles/Jobs/Security/security_cadet.yml @@ -30,14 +30,13 @@ id: SecurityCadetGear equipment: jumpsuit: ClothingUniformJumpsuitColorRed - back: ClothingBackpackSecurityFilled + back: ClothingBackpackSecurity shoes: ClothingShoesBootsCombatFilled outerClothing: ClothingOuterArmorDuraVest # DeltaV - ClothingOuterArmorBasic replaced in favour of stab vest. Sucks to suck, cadets id: SecurityCadetPDA ears: ClothingHeadsetSecurity belt: ClothingBeltSecurityFilled -# pocket1: WeaponPistolMk58Nonlethal # DeltaV - Security Cadet doesn't spawn with a gun pocket2: BookSecurity innerClothingSkirt: ClothingUniformJumpskirtColorRed - satchel: ClothingBackpackSatchelSecurityFilled - duffelbag: ClothingBackpackDuffelSecurityFilled + satchel: ClothingBackpackSatchelSecurity + duffelbag: ClothingBackpackDuffelSecurity diff --git a/Resources/Prototypes/Roles/Jobs/Security/security_officer.yml b/Resources/Prototypes/Roles/Jobs/Security/security_officer.yml index 5def050b817..b81a35264c6 100644 --- a/Resources/Prototypes/Roles/Jobs/Security/security_officer.yml +++ b/Resources/Prototypes/Roles/Jobs/Security/security_officer.yml @@ -1,4 +1,5 @@ - type: job + setPreference: false id: SecurityOfficer name: job-name-security description: job-description-security @@ -6,7 +7,6 @@ requirements: - !type:CharacterDepartmentTimeRequirement department: Security - min: 14400 # DeltaV - 4 hours startingGear: SecurityOfficerGear icon: "JobIconSecurityOfficer" supervisors: job-supervisors-hos @@ -21,13 +21,12 @@ special: - !type:AddImplantSpecial implants: [ MindShieldImplant ] - setPreference: false - type: startingGear id: SecurityOfficerGear equipment: jumpsuit: ClothingUniformJumpsuitSec - back: ClothingBackpackSecurityFilled + back: ClothingBackpackSecurity shoes: ClothingShoesBootsCombatFilled eyes: ClothingEyesGlassesSunglasses head: ClothingHeadHelmetBasic @@ -35,7 +34,6 @@ id: SecurityPDA ears: ClothingHeadsetSecurity belt: ClothingBeltSecurityFilled - pocket1: WeaponPistolMk58Nonlethal innerClothingSkirt: ClothingUniformJumpskirtSec - satchel: ClothingBackpackSatchelSecurityFilled - duffelbag: ClothingBackpackDuffelSecurityFilled + satchel: ClothingBackpackSatchelSecurity + duffelbag: ClothingBackpackDuffelSecurity diff --git a/Resources/Prototypes/Roles/Jobs/Security/senior_officer.yml b/Resources/Prototypes/Roles/Jobs/Security/senior_officer.yml index 2623adf1fd0..d395e0f5cdc 100644 --- a/Resources/Prototypes/Roles/Jobs/Security/senior_officer.yml +++ b/Resources/Prototypes/Roles/Jobs/Security/senior_officer.yml @@ -35,7 +35,7 @@ id: SeniorOfficerGear equipment: jumpsuit: ClothingUniformJumpsuitSeniorOfficer - back: ClothingBackpackSecurityFilled + back: ClothingBackpackSecurity shoes: ClothingShoesBootsCombatFilled eyes: ClothingEyesGlassesSecurity head: ClothingHeadHatBeretSecurity @@ -43,7 +43,6 @@ id: SeniorOfficerPDA ears: ClothingHeadsetSecurity belt: ClothingBeltSecurityFilled - pocket1: WeaponPistolMk58Nonlethal innerClothingSkirt: ClothingUniformJumpskirtSeniorOfficer - satchel: ClothingBackpackSatchelSecurityFilled - duffelbag: ClothingBackpackDuffelSecurityFilled + satchel: ClothingBackpackSatchelSecurity + duffelbag: ClothingBackpackDuffelSecurity diff --git a/Resources/Prototypes/Roles/Jobs/Security/warden.yml b/Resources/Prototypes/Roles/Jobs/Security/warden.yml index 023628461ce..ac36c5cb8e9 100644 --- a/Resources/Prototypes/Roles/Jobs/Security/warden.yml +++ b/Resources/Prototypes/Roles/Jobs/Security/warden.yml @@ -34,14 +34,13 @@ equipment: head: ClothingHeadHatWarden jumpsuit: ClothingUniformJumpsuitWarden - back: ClothingBackpackSecurityFilled + back: ClothingBackpackSecurity shoes: ClothingShoesBootsCombatFilled eyes: ClothingEyesGlassesSunglasses outerClothing: ClothingOuterCoatWarden id: WardenPDA ears: ClothingHeadsetSecurity belt: ClothingBeltSecurityFilled - pocket1: WeaponPistolMk58Nonlethal innerClothingSkirt: ClothingUniformJumpskirtWarden - satchel: ClothingBackpackSatchelSecurityFilled - duffelbag: ClothingBackpackDuffelSecurityFilled + satchel: ClothingBackpackSatchelSecurity + duffelbag: ClothingBackpackDuffelSecurity diff --git a/Resources/Prototypes/Shaders/displacement.yml b/Resources/Prototypes/Shaders/displacement.yml new file mode 100644 index 00000000000..5c907380083 --- /dev/null +++ b/Resources/Prototypes/Shaders/displacement.yml @@ -0,0 +1,10 @@ +- type: shader + id: DisplacedStencilDraw + kind: source + path: "/Textures/Shaders/displacement.swsl" + stencil: + ref: 1 + op: Keep + func: NotEqual + params: + displacementSize: 127 diff --git a/Resources/Prototypes/Shaders/shaders.yml b/Resources/Prototypes/Shaders/shaders.yml index 3f0cb5ae1fb..41d04137bbe 100644 --- a/Resources/Prototypes/Shaders/shaders.yml +++ b/Resources/Prototypes/Shaders/shaders.yml @@ -110,4 +110,16 @@ - type: shader id: Flap kind: source - path: "/Textures/Shaders/flap.swsl" \ No newline at end of file + path: "/Textures/Shaders/flap.swsl" + + # Shadowkin shaders + +- type: shader + id: ColorTint + kind: source + path: "/Textures/Shaders/color_tint.swsl" + +- type: shader + id: Ethereal + kind: source + path: "/Textures/Shaders/ethereal.swsl" \ No newline at end of file diff --git a/Resources/Prototypes/Shuttles/shuttle_incoming_event.yml b/Resources/Prototypes/Shuttles/shuttle_incoming_event.yml new file mode 100644 index 00000000000..5819a934bf2 --- /dev/null +++ b/Resources/Prototypes/Shuttles/shuttle_incoming_event.yml @@ -0,0 +1,29 @@ +- type: preloadedGrid + id: ShuttleStriker + path: /Maps/Shuttles/ShuttleEvent/striker.yml + copies: 2 + +- type: preloadedGrid + id: ShuttleCargoLost + path: /Maps/Shuttles/ShuttleEvent/lost_cargo.yml + copies: 2 + +- type: preloadedGrid + id: TravelingCuisine + path: /Maps/Shuttles/ShuttleEvent/traveling_china_cuisine.yml + copies: 2 + +- type: preloadedGrid + id: DisasterEvacPod + path: /Maps/Shuttles/ShuttleEvent/disaster_evacpod.yml + copies: 3 + +- type: preloadedGrid + id: Honki + path: /Maps/Shuttles/ShuttleEvent/honki.yml + copies: 1 + +- type: preloadedGrid + id: SyndieEvacPod + path: /Maps/Shuttles/ShuttleEvent/syndie_evacpod.yml + copies: 2 diff --git a/Resources/Prototypes/SimpleStation14/Traits/disabilities.yml b/Resources/Prototypes/SimpleStation14/Traits/disabilities.yml deleted file mode 100644 index b7aa00353c8..00000000000 --- a/Resources/Prototypes/SimpleStation14/Traits/disabilities.yml +++ /dev/null @@ -1,12 +0,0 @@ -- type: trait - id: Nearsighted - category: Visual - points: 1 - requirements: - - !type:CharacterJobRequirement - inverted: true - jobs: - - Borg - - MedicalBorg - components: - - type: Nearsighted diff --git a/Resources/Prototypes/SimpleStation14/tags.yml b/Resources/Prototypes/SimpleStation14/tags.yml deleted file mode 100644 index 3b885a58016..00000000000 --- a/Resources/Prototypes/SimpleStation14/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -- type: Tag - id: GlassesNearsight diff --git a/Resources/Prototypes/SoundCollections/emotes.yml b/Resources/Prototypes/SoundCollections/emotes.yml index 35693a70a4d..f655a8cf6b4 100644 --- a/Resources/Prototypes/SoundCollections/emotes.yml +++ b/Resources/Prototypes/SoundCollections/emotes.yml @@ -86,3 +86,13 @@ - /Audio/Voice/IPC/whirr1.ogg - /Audio/Voice/IPC/whirr2.ogg - /Audio/Voice/IPC/whirr3.ogg + +- type: soundCollection + id: Mars + files: + - /Audio/Voice/Shadowkin/mar.ogg + +- type: soundCollection + id: Wurble + files: + - /Audio/Voice/Shadowkin/wurble.ogg \ No newline at end of file diff --git a/Resources/Prototypes/SoundCollections/expeditions.yml b/Resources/Prototypes/SoundCollections/expeditions.yml new file mode 100644 index 00000000000..526a16f3c2c --- /dev/null +++ b/Resources/Prototypes/SoundCollections/expeditions.yml @@ -0,0 +1,5 @@ +- type: soundCollection + id: ExpeditionEnd + files: + - /Audio/Expedition/tension_session.ogg + - /Audio/Expedition/deadline.ogg diff --git a/Resources/Prototypes/SoundCollections/footsteps.yml b/Resources/Prototypes/SoundCollections/footsteps.yml index bd51e6b4458..e179584f6fb 100644 --- a/Resources/Prototypes/SoundCollections/footsteps.yml +++ b/Resources/Prototypes/SoundCollections/footsteps.yml @@ -201,3 +201,13 @@ - /Audio/Effects/Footsteps/spurs1.ogg - /Audio/Effects/Footsteps/spurs2.ogg - /Audio/Effects/Footsteps/spurs3.ogg + +- type: soundCollection + id: FootstepBorg + files: + - /Audio/Effects/Footsteps/borgwalk1.ogg + +- type: soundCollection + id: FootstepHoverBorg + files: + - /Audio/Effects/Footsteps/borgwalk2.ogg diff --git a/Resources/Prototypes/SoundCollections/fox.yml b/Resources/Prototypes/SoundCollections/fox.yml new file mode 100644 index 00000000000..912ae24e9a4 --- /dev/null +++ b/Resources/Prototypes/SoundCollections/fox.yml @@ -0,0 +1,18 @@ +- type: soundCollection + id: Fox + files: + - /Audio/Animals/fox_squeak.ogg + - /Audio/Animals/fox1.ogg + - /Audio/Animals/fox2.ogg + - /Audio/Animals/fox3.ogg + - /Audio/Animals/fox4.ogg + - /Audio/Animals/fox5.ogg + - /Audio/Animals/fox6.ogg + - /Audio/Animals/fox7.ogg + - /Audio/Animals/fox8.ogg + - /Audio/Animals/fox9.ogg + - /Audio/Animals/fox10.ogg + - /Audio/Animals/fox11.ogg + - /Audio/Animals/fox12.ogg + - /Audio/Animals/fox13.ogg + - /Audio/Animals/fox14.ogg diff --git a/Resources/Prototypes/SoundCollections/glimmer_wisp.yml b/Resources/Prototypes/SoundCollections/glimmer_wisp.yml new file mode 100644 index 00000000000..4fc09903978 --- /dev/null +++ b/Resources/Prototypes/SoundCollections/glimmer_wisp.yml @@ -0,0 +1,6 @@ +- type: soundCollection + id: MagicMissile + files: + - /Audio/Effects/magic_missile_1.ogg + - /Audio/Effects/magic_missile_2.ogg + - /Audio/Effects/magic_missile_3.ogg diff --git a/Resources/Prototypes/Species/arachnid.yml b/Resources/Prototypes/Species/arachnid.yml new file mode 100644 index 00000000000..a2d941028da --- /dev/null +++ b/Resources/Prototypes/Species/arachnid.yml @@ -0,0 +1,173 @@ +- type: species + id: Arachnid + name: species-name-arachnid + roundStart: true + prototype: MobArachnid + sprites: MobArachnidSprites + defaultSkinTone: "#385878" + markingLimits: MobArachnidMarkingLimits + dollPrototype: MobArachnidDummy + skinColoration: Hues + maleFirstNames: names_arachnid_first + femaleFirstNames: names_arachnid_first + lastNames: names_arachnid_last + sexes: + - Unsexed + +- type: speciesBaseSprites + id: MobArachnidSprites + sprites: + Head: MobArachnidHead + Snout: MobHumanoidAnyMarking + Chest: MobArachnidTorso + HeadTop: MobHumanoidAnyMarking + HeadSide: MobHumanoidAnyMarking + Tail: MobHumanoidAnyMarking + Eyes: MobArachnidEyes + LArm: MobArachnidLArm + RArm: MobArachnidRArm + LHand: MobArachnidLHand + RHand: MobArachnidRHand + LLeg: MobArachnidLLeg + RLeg: MobArachnidRLeg + LFoot: MobArachnidLFoot + RFoot: MobArachnidRFoot + +- type: humanoidBaseSprite + id: MobArachnidEyes + baseSprite: + sprite: Mobs/Species/Arachnid/parts.rsi + state: eyes + +- type: markingPoints + id: MobArachnidMarkingLimits + onlyWhitelisted: true + points: + Hair: + points: 0 + required: false + FacialHair: + points: 0 + required: false + Tail: + points: 1 + required: true + defaultMarkings: [ ArachnidAppendagesDefault ] + HeadTop: + points: 1 + required: false + HeadSide: + points: 1 + required: true + defaultMarkings: [ ArachnidCheliceraeDownwards ] + Chest: + points: 1 + required: false + RightLeg: + points: 2 + required: false + RightFoot: + points: 2 + required: false + LeftLeg: + points: 2 + required: false + LeftFoot: + points: 2 + required: false + RightArm: + points: 2 + required: false + RightHand: + points: 2 + required: false + LeftArm: + points: 2 + required: false + LeftHand: + points: 2 + required: false + +- type: humanoidBaseSprite + id: MobArachnidHead + baseSprite: + sprite: Mobs/Species/Arachnid/parts.rsi + state: head_m + +- type: humanoidBaseSprite + id: MobArachnidHeadMale + baseSprite: + sprite: Mobs/Species/Arachnid/parts.rsi + state: head_m + +- type: humanoidBaseSprite + id: MobArachnidHeadFemale + baseSprite: + sprite: Mobs/Species/Arachnid/parts.rsi + state: head_f + +- type: humanoidBaseSprite + id: MobArachnidTorso + baseSprite: + sprite: Mobs/Species/Arachnid/parts.rsi + state: torso_m + +- type: humanoidBaseSprite + id: MobArachnidTorsoMale + baseSprite: + sprite: Mobs/Species/Arachnid/parts.rsi + state: torso_m + +- type: humanoidBaseSprite + id: MobArachnidTorsoFemale + baseSprite: + sprite: Mobs/Species/Arachnid/parts.rsi + state: torso_f + +- type: humanoidBaseSprite + id: MobArachnidLLeg + baseSprite: + sprite: Mobs/Species/Arachnid/parts.rsi + state: l_leg + +- type: humanoidBaseSprite + id: MobArachnidLHand + baseSprite: + sprite: Mobs/Species/Arachnid/parts.rsi + state: l_hand + +- type: humanoidBaseSprite + id: MobArachnidLArm + baseSprite: + sprite: Mobs/Species/Arachnid/parts.rsi + state: l_arm + +- type: humanoidBaseSprite + id: MobArachnidLFoot + baseSprite: + sprite: Mobs/Species/Arachnid/parts.rsi + state: l_foot + +- type: humanoidBaseSprite + id: MobArachnidRLeg + baseSprite: + sprite: Mobs/Species/Arachnid/parts.rsi + state: r_leg + +- type: humanoidBaseSprite + id: MobArachnidRHand + baseSprite: + sprite: Mobs/Species/Arachnid/parts.rsi + state: r_hand + +- type: humanoidBaseSprite + id: MobArachnidRArm + baseSprite: + sprite: Mobs/Species/Arachnid/parts.rsi + state: r_arm + +- type: humanoidBaseSprite + id: MobArachnidRFoot + baseSprite: + sprite: Mobs/Species/Arachnid/parts.rsi + state: r_foot diff --git a/Resources/Prototypes/Species/harpy.yml b/Resources/Prototypes/Species/harpy.yml new file mode 100644 index 00000000000..cf9e044eee9 --- /dev/null +++ b/Resources/Prototypes/Species/harpy.yml @@ -0,0 +1,168 @@ +- type: species + id: Harpy + name: species-name-harpy + roundStart: true + prototype: MobHarpy + sprites: MobHarpySprites + markingLimits: MobHarpyMarkingLimits + dollPrototype: MobHarpyDummy + skinColoration: HumanToned + minHeight: 0.6 + defaultHeight: 0.8 + maxHeight: 1.1 + minWidth: 0.55 + defaultWidth: 0.8 + maxWidth: 1.15 + +- type: speciesBaseSprites + id: MobHarpySprites + sprites: + Head: MobHarpyHead + Hair: MobHumanoidAnyMarking + FacialHair: MobHumanoidAnyMarking + Snout: MobHumanoidAnyMarking + Chest: MobHarpyTorso + HeadTop: MobHumanoidAnyMarking + HeadSide: MobHumanoidAnyMarking + Tail: MobHumanoidAnyMarking + Eyes: MobHumanoidEyes + LArm: MobHarpyLArm + RArm: MobHarpyRArm + LHand: MobHarpyLHand + RHand: MobHarpyRHand + LLeg: MobHarpyLLeg + RLeg: MobHarpyRLeg + LFoot: MobHarpyLFoot + RFoot: MobHarpyRFoot + + +- type: markingPoints + id: MobHarpyMarkingLimits + points: + Hair: + points: 1 + required: false + FacialHair: + points: 1 + required: false + Tail: + points: 1 + required: true + defaultMarkings: [ HarpyTailPhoenix ] + HeadTop: + points: 1 + required: true + defaultMarkings: [ HarpyEarsDefault ] + Chest: + points: 1 + required: true + defaultMarkings: [ HarpyChestDefault ] + RightLeg: + points: 2 + required: false + RightFoot: + points: 2 + required: false + LeftLeg: + points: 2 + required: false + LeftFoot: + points: 2 + required: false + RightArm: + points: 1 + required: false + defaultMarkings: [ HarpyWingDefaultHuescale ] + RightHand: + points: 2 + required: false + LeftArm: + points: 2 + required: false + LeftHand: + points: 2 + required: false + +- type: humanoidBaseSprite + id: MobHarpyHead + baseSprite: + sprite: Mobs/Species/Harpy/parts.rsi + state: head_m + +- type: humanoidBaseSprite + id: MobHarpyHeadMale + baseSprite: + sprite: Mobs/Species/Harpy/parts.rsi + state: head_m + +- type: humanoidBaseSprite + id: MobHarpyHeadFemale + baseSprite: + sprite: Mobs/Species/Harpy/parts.rsi + state: head_f + +- type: humanoidBaseSprite + id: MobHarpyTorso + baseSprite: + sprite: Mobs/Species/Harpy/parts.rsi + state: torso_m + +- type: humanoidBaseSprite + id: MobHarpyTorsoMale + baseSprite: + sprite: Mobs/Species/Harpy/parts.rsi + state: torso_m + +- type: humanoidBaseSprite + id: MobHarpyTorsoFemale + baseSprite: + sprite: Mobs/Species/Harpy/parts.rsi + state: torso_f + +- type: humanoidBaseSprite + id: MobHarpyLLeg + baseSprite: + sprite: Mobs/Species/Harpy/parts.rsi + state: l_leg + +- type: humanoidBaseSprite + id: MobHarpyLHand + baseSprite: + sprite: Mobs/Species/Harpy/parts.rsi + state: l_hand + +- type: humanoidBaseSprite + id: MobHarpyLArm + baseSprite: + sprite: Mobs/Species/Harpy/parts.rsi + state: l_arm + +- type: humanoidBaseSprite + id: MobHarpyLFoot + baseSprite: + sprite: Mobs/Species/Harpy/parts.rsi + state: l_foot + +- type: humanoidBaseSprite + id: MobHarpyRLeg + baseSprite: + sprite: Mobs/Species/Harpy/parts.rsi + state: r_leg + +- type: humanoidBaseSprite + id: MobHarpyRHand + baseSprite: + sprite: Mobs/Species/Harpy/parts.rsi + state: r_hand + +- type: humanoidBaseSprite + id: MobHarpyRArm + baseSprite: + sprite: Mobs/Species/Harpy/parts.rsi + state: r_arm + +- type: humanoidBaseSprite + id: MobHarpyRFoot + baseSprite: + sprite: Mobs/Species/Harpy/parts.rsi + state: r_foot diff --git a/Resources/Prototypes/Species/human.yml b/Resources/Prototypes/Species/human.yml index f7ec873d47d..b407aaa3589 100644 --- a/Resources/Prototypes/Species/human.yml +++ b/Resources/Prototypes/Species/human.yml @@ -53,11 +53,11 @@ Snout: points: 1 required: false - Tail: # the cat tail joke - points: 0 + Tail: + points: 1 required: false - HeadTop: # the cat ear joke - points: 0 + HeadTop: + points: 1 required: false Chest: points: 1 diff --git a/Resources/Prototypes/Species/ipc.yml b/Resources/Prototypes/Species/ipc.yml index 47cefaf841e..b25c6b32f73 100644 --- a/Resources/Prototypes/Species/ipc.yml +++ b/Resources/Prototypes/Species/ipc.yml @@ -154,7 +154,7 @@ - type: marking id: MobIPCLLegDefault bodyPart: LLeg - markingCategory: RightLeg + markingCategory: LeftLeg speciesRestriction: [IPC] sprites: - sprite: Mobs/Species/IPC/parts.rsi @@ -168,7 +168,7 @@ - type: marking id: MobIPCLArmDefault bodyPart: LArm - markingCategory: RightArm + markingCategory: LeftArm speciesRestriction: [IPC] sprites: - sprite: Mobs/Species/IPC/parts.rsi @@ -182,7 +182,7 @@ - type: marking id: MobIPCLHandDefault bodyPart: LHand - markingCategory: RightArm + markingCategory: LeftHand speciesRestriction: [IPC] sprites: - sprite: Mobs/Species/IPC/parts.rsi @@ -196,7 +196,7 @@ - type: marking id: MobIPCLFootDefault bodyPart: LFoot - markingCategory: RightLeg + markingCategory: LeftFoot speciesRestriction: [IPC] sprites: - sprite: Mobs/Species/IPC/parts.rsi @@ -238,7 +238,7 @@ - type: marking id: MobIPCRHandDefault bodyPart: RHand - markingCategory: RightArm + markingCategory: RightHand speciesRestriction: [IPC] sprites: - sprite: Mobs/Species/IPC/parts.rsi @@ -252,7 +252,7 @@ - type: marking id: MobIPCRFootDefault bodyPart: RFoot - markingCategory: RightLeg + markingCategory: RightFoot speciesRestriction: [IPC] sprites: - sprite: Mobs/Species/IPC/parts.rsi diff --git a/Resources/Prototypes/Species/moth.yml b/Resources/Prototypes/Species/moth.yml new file mode 100644 index 00000000000..511f22394e0 --- /dev/null +++ b/Resources/Prototypes/Species/moth.yml @@ -0,0 +1,177 @@ +- type: species + id: Moth + name: species-name-moth + roundStart: true + prototype: MobMoth + sprites: MobMothSprites + defaultSkinTone: "#ffda93" + markingLimits: MobMothMarkingLimits + dollPrototype: MobMothDummy + skinColoration: Hues + maleFirstNames: names_moth_first_male + femaleFirstNames: names_moth_first_female + lastNames: names_moth_last + +- type: speciesBaseSprites + id: MobMothSprites + sprites: + Head: MobMothHead + Snout: MobHumanoidAnyMarking + Chest: MobMothTorso + HeadTop: MobHumanoidAnyMarking + HeadSide: MobHumanoidAnyMarking + Tail: MobHumanoidAnyMarking + Eyes: MobMothEyes + LArm: MobMothLArm + RArm: MobMothRArm + LHand: MobMothLHand + RHand: MobMothRHand + LLeg: MobMothLLeg + RLeg: MobMothRLeg + LFoot: MobMothLFoot + RFoot: MobMothRFoot + +- type: humanoidBaseSprite + id: MobMothEyes + baseSprite: + sprite: Mobs/Species/Moth/parts.rsi + state: eyes + +- type: markingPoints + id: MobMothMarkingLimits + onlyWhitelisted: true + points: + Hair: + points: 0 + required: false + FacialHair: + points: 0 + required: false + Tail: + points: 1 + required: true + defaultMarkings: [ MothWingsDefault ] + Snout: + points: 1 + required: false + HeadTop: + points: 1 + required: true + defaultMarkings: [ MothAntennasDefault ] + HeadSide: + points: 1 + required: false + Head: + points: 1 + required: false + Chest: + points: 1 + required: false + RightLeg: + points: 2 + required: false + RightFoot: + points: 2 + required: false + LeftLeg: + points: 2 + required: false + LeftFoot: + points: 2 + required: false + RightArm: + points: 2 + required: false + RightHand: + points: 2 + required: false + LeftArm: + points: 2 + required: false + LeftHand: + points: 2 + required: false + +- type: humanoidBaseSprite + id: MobMothHead + baseSprite: + sprite: Mobs/Species/Moth/parts.rsi + state: head_m + +- type: humanoidBaseSprite + id: MobMothHeadMale + baseSprite: + sprite: Mobs/Species/Moth/parts.rsi + state: head_m + +- type: humanoidBaseSprite + id: MobMothHeadFemale + baseSprite: + sprite: Mobs/Species/Moth/parts.rsi + state: head_f + +- type: humanoidBaseSprite + id: MobMothTorso + baseSprite: + sprite: Mobs/Species/Moth/parts.rsi + state: torso_m + +- type: humanoidBaseSprite + id: MobMothTorsoMale + baseSprite: + sprite: Mobs/Species/Moth/parts.rsi + state: torso_m + +- type: humanoidBaseSprite + id: MobMothTorsoFemale + baseSprite: + sprite: Mobs/Species/Moth/parts.rsi + state: torso_f + +- type: humanoidBaseSprite + id: MobMothLLeg + baseSprite: + sprite: Mobs/Species/Moth/parts.rsi + state: l_leg + +- type: humanoidBaseSprite + id: MobMothLHand + baseSprite: + sprite: Mobs/Species/Moth/parts.rsi + state: l_hand + +- type: humanoidBaseSprite + id: MobMothLArm + baseSprite: + sprite: Mobs/Species/Moth/parts.rsi + state: l_arm + +- type: humanoidBaseSprite + id: MobMothLFoot + baseSprite: + sprite: Mobs/Species/Moth/parts.rsi + state: l_foot + +- type: humanoidBaseSprite + id: MobMothRLeg + baseSprite: + sprite: Mobs/Species/Moth/parts.rsi + state: r_leg + +- type: humanoidBaseSprite + id: MobMothRHand + baseSprite: + sprite: Mobs/Species/Moth/parts.rsi + state: r_hand + +- type: humanoidBaseSprite + id: MobMothRArm + baseSprite: + sprite: Mobs/Species/Moth/parts.rsi + state: r_arm + +- type: humanoidBaseSprite + id: MobMothRFoot + baseSprite: + sprite: Mobs/Species/Moth/parts.rsi + state: r_foot diff --git a/Resources/Prototypes/Species/shadowkin.yml b/Resources/Prototypes/Species/shadowkin.yml new file mode 100644 index 00000000000..f7674e80d61 --- /dev/null +++ b/Resources/Prototypes/Species/shadowkin.yml @@ -0,0 +1,179 @@ +- type: species + id: Shadowkin + name: species-name-shadowkin + roundStart: false + prototype: MobShadowkin + sprites: MobShadowkinSprites + defaultSkinTone: "#FFFFFF" + markingLimits: MobShadowkinMarkingLimits + dollPrototype: MobShadowkinDummy + skinColoration: Hues + naming: First + maleFirstNames: names_shadowkin + femaleFirstNames: names_shadowkin + minAge: 18 + maxAge: 300 + youngAge: 20 + oldAge: 250 + sexes: + - Male + - Female + - Unsexed + minHeight: 0.65 + defaultHeight: 0.85 + maxHeight: 1.15 + minWidth: 0.6 + defaultWidth: 0.85 + maxWidth: 1.2 + +- type: speciesBaseSprites + id: MobShadowkinSprites + sprites: + Head: MobShadowkinHead + Snout: MobShadowkinAnyMarkingFollowSkin + HeadTop: MobShadowkinAnyMarkingFollowSkin + HeadSide: MobShadowkinAnyMarkingFollowSkin + Tail: MobShadowkinAnyMarkingFollowSkin + Chest: MobShadowkinTorso + Eyes: MobShadowkinEyes + LArm: MobShadowkinLArm + RArm: MobShadowkinRArm + LHand: MobShadowkinLHand + RHand: MobShadowkinRHand + LLeg: MobShadowkinLLeg + RLeg: MobShadowkinRLeg + LFoot: MobShadowkinLFoot + RFoot: MobShadowkinRFoot + +- type: markingPoints + id: MobShadowkinMarkingLimits + points: + Tail: + points: 1 + required: true + defaultMarkings: [TailShadowkin] + HeadTop: + points: 1 + required: true + defaultMarkings: [EarsShadowkin] + Chest: + points: 1 + required: false + RightLeg: + points: 2 + required: false + RightFoot: + points: 2 + required: false + LeftLeg: + points: 2 + required: false + LeftFoot: + points: 2 + required: false + RightArm: + points: 2 + required: false + RightHand: + points: 2 + required: false + LeftArm: + points: 2 + required: false + LeftHand: + points: 2 + required: false + +- type: humanoidBaseSprite + id: MobShadowkinAnyMarkingFollowSkin + markingsMatchSkin: true + +- type: humanoidBaseSprite + id: MobShadowkinHead + baseSprite: + sprite: Mobs/Species/Shadowkin/parts.rsi + state: head_m + +- type: humanoidBaseSprite + id: MobShadowkinHeadMale + baseSprite: + sprite: Mobs/Species/Shadowkin/parts.rsi + state: head_m + +- type: humanoidBaseSprite + id: MobShadowkinHeadFemale + baseSprite: + sprite: Mobs/Species/Shadowkin/parts.rsi + state: head_f + +- type: humanoidBaseSprite + id: MobShadowkinTorso + baseSprite: + sprite: Mobs/Species/Shadowkin/parts.rsi + state: torso_m + +- type: humanoidBaseSprite + id: MobShadowkinTorsoMale + baseSprite: + sprite: Mobs/Species/Shadowkin/parts.rsi + state: torso_m + +- type: humanoidBaseSprite + id: MobShadowkinTorsoFemale + baseSprite: + sprite: Mobs/Species/Shadowkin/parts.rsi + state: torso_f + +- type: humanoidBaseSprite + id: MobShadowkinLLeg + baseSprite: + sprite: Mobs/Species/Shadowkin/parts.rsi + state: l_leg + +- type: humanoidBaseSprite + id: MobShadowkinLHand + baseSprite: + sprite: Mobs/Species/Shadowkin/parts.rsi + state: l_hand + +- type: humanoidBaseSprite + id: MobShadowkinEyes + baseSprite: + sprite: Mobs/Species/Shadowkin/parts.rsi + state: eyes + +- type: humanoidBaseSprite + id: MobShadowkinLArm + baseSprite: + sprite: Mobs/Species/Shadowkin/parts.rsi + state: l_arm + +- type: humanoidBaseSprite + id: MobShadowkinLFoot + baseSprite: + sprite: Mobs/Species/Shadowkin/parts.rsi + state: l_foot + +- type: humanoidBaseSprite + id: MobShadowkinRLeg + baseSprite: + sprite: Mobs/Species/Shadowkin/parts.rsi + state: r_leg + +- type: humanoidBaseSprite + id: MobShadowkinRHand + baseSprite: + sprite: Mobs/Species/Shadowkin/parts.rsi + state: r_hand + +- type: humanoidBaseSprite + id: MobShadowkinRArm + baseSprite: + sprite: Mobs/Species/Shadowkin/parts.rsi + state: r_arm + +- type: humanoidBaseSprite + id: MobShadowkinRFoot + baseSprite: + sprite: Mobs/Species/Shadowkin/parts.rsi + state: r_foot diff --git a/Resources/Prototypes/Species/slime.yml b/Resources/Prototypes/Species/slime.yml new file mode 100644 index 00000000000..72fe8534989 --- /dev/null +++ b/Resources/Prototypes/Species/slime.yml @@ -0,0 +1,153 @@ +- type: species + id: SlimePerson + name: species-name-slime + roundStart: true + prototype: MobSlimePerson + sprites: MobSlimeSprites + defaultSkinTone: "#b8b8b8" + markingLimits: MobSlimeMarkingLimits + dollPrototype: MobSlimePersonDummy + skinColoration: Hues + +- type: speciesBaseSprites + id: MobSlimeSprites + sprites: + Head: MobSlimeHead + Hair: MobSlimeMarkingFollowSkin + FacialHair: MobSlimeMarkingFollowSkin + Chest: MobSlimeTorso + Eyes: MobHumanoidEyes + LArm: MobSlimeLArm + RArm: MobSlimeRArm + LHand: MobSlimeLHand + RHand: MobSlimeRHand + LLeg: MobSlimeLLeg + RLeg: MobSlimeRLeg + LFoot: MobSlimeLFoot + RFoot: MobSlimeRFoot + +- type: markingPoints + id: MobSlimeMarkingLimits + points: + Hair: + points: 1 + required: false + FacialHair: + points: 1 + required: false + Chest: + points: 1 + required: false + RightLeg: + points: 2 + required: false + RightFoot: + points: 2 + required: false + LeftLeg: + points: 2 + required: false + LeftFoot: + points: 2 + required: false + RightArm: + points: 2 + required: false + RightHand: + points: 2 + required: false + LeftArm: + points: 2 + required: false + LeftHand: + points: 2 + required: false + +- type: humanoidBaseSprite + id: MobSlimeMarkingFollowSkin + markingsMatchSkin: true + layerAlpha: 0.5 + +- type: humanoidBaseSprite + id: MobSlimeHead + baseSprite: + sprite: Mobs/Species/Slime/parts.rsi + state: head_m + +- type: humanoidBaseSprite + id: MobSlimeHeadMale + baseSprite: + sprite: Mobs/Species/Slime/parts.rsi + state: head_m + +- type: humanoidBaseSprite + id: MobSlimeHeadFemale + baseSprite: + sprite: Mobs/Species/Slime/parts.rsi + state: head_f + +- type: humanoidBaseSprite + id: MobSlimeTorso + baseSprite: + sprite: Mobs/Species/Slime/parts.rsi + state: torso_m + +- type: humanoidBaseSprite + id: MobSlimeTorsoMale + baseSprite: + sprite: Mobs/Species/Slime/parts.rsi + state: torso_m + +- type: humanoidBaseSprite + id: MobSlimeTorsoFemale + baseSprite: + sprite: Mobs/Species/Slime/parts.rsi + state: torso_f + +- type: humanoidBaseSprite + id: MobSlimeLLeg + baseSprite: + sprite: Mobs/Species/Slime/parts.rsi + state: l_leg + +- type: humanoidBaseSprite + id: MobSlimeLArm + baseSprite: + sprite: Mobs/Species/Slime/parts.rsi + state: l_arm + +- type: humanoidBaseSprite + id: MobSlimeLHand + baseSprite: + sprite: Mobs/Species/Slime/parts.rsi + state: l_hand + +- type: humanoidBaseSprite + id: MobSlimeLFoot + baseSprite: + sprite: Mobs/Species/Slime/parts.rsi + state: l_foot + +- type: humanoidBaseSprite + id: MobSlimeRLeg + baseSprite: + sprite: Mobs/Species/Slime/parts.rsi + state: r_leg + +- type: humanoidBaseSprite + id: MobSlimeRArm + baseSprite: + sprite: Mobs/Species/Slime/parts.rsi + state: r_arm + +- type: humanoidBaseSprite + id: MobSlimeRHand + baseSprite: + sprite: Mobs/Species/Slime/parts.rsi + state: r_hand + +- type: humanoidBaseSprite + id: MobSlimeRFoot + baseSprite: + sprite: Mobs/Species/Slime/parts.rsi + state: r_foot diff --git a/Resources/Prototypes/Species/terminator.yml b/Resources/Prototypes/Species/terminator.yml deleted file mode 100644 index cfc5a7107ce..00000000000 --- a/Resources/Prototypes/Species/terminator.yml +++ /dev/null @@ -1,110 +0,0 @@ -- type: species - id: Terminator - name: Terminator - roundStart: false - prototype: MobTerminatorEndoskeleton - sprites: MobTerminatorSprites - defaultSkinTone: "#fff9e2" - markingLimits: MobHumanMarkingLimits - maleFirstNames: skeletonNamesFirst - femaleFirstNames: skeletonNamesFirst - dollPrototype: MobSkeletonPersonDummy - skinColoration: TintedHues - -- type: speciesBaseSprites - id: MobTerminatorSprites - sprites: - Head: MobTerminatorHead - Chest: MobTerminatorTorso - LArm: MobTerminatorLArm - RArm: MobTerminatorRArm - LHand: MobTerminatorLHand - RHand: MobTerminatorRHand - LLeg: MobTerminatorLLeg - RLeg: MobTerminatorRLeg - LFoot: MobTerminatorLFoot - RFoot: MobTerminatorRFoot - -- type: humanoidBaseSprite - id: MobTerminatorHead - baseSprite: - sprite: Mobs/Species/Terminator/parts.rsi - state: head_m - -- type: humanoidBaseSprite - id: MobTerminatorHeadMale - baseSprite: - sprite: Mobs/Species/Terminator/parts.rsi - state: head_m - -- type: humanoidBaseSprite - id: MobTerminatorHeadFemale - baseSprite: - sprite: Mobs/Species/Terminator/parts.rsi - state: head_f - -- type: humanoidBaseSprite - id: MobTerminatorTorso - baseSprite: - sprite: Mobs/Species/Terminator/parts.rsi - state: torso_m - -- type: humanoidBaseSprite - id: MobTerminatorTorsoMale - baseSprite: - sprite: Mobs/Species/Terminator/parts.rsi - state: torso_m - -- type: humanoidBaseSprite - id: MobTerminatorTorsoFemale - baseSprite: - sprite: Mobs/Species/Terminator/parts.rsi - state: torso_f - -- type: humanoidBaseSprite - id: MobTerminatorLLeg - baseSprite: - sprite: Mobs/Species/Terminator/parts.rsi - state: l_leg - -- type: humanoidBaseSprite - id: MobTerminatorLArm - baseSprite: - sprite: Mobs/Species/Terminator/parts.rsi - state: l_arm - -- type: humanoidBaseSprite - id: MobTerminatorLHand - baseSprite: - sprite: Mobs/Species/Terminator/parts.rsi - state: l_hand - -- type: humanoidBaseSprite - id: MobTerminatorLFoot - baseSprite: - sprite: Mobs/Species/Terminator/parts.rsi - state: l_foot - -- type: humanoidBaseSprite - id: MobTerminatorRLeg - baseSprite: - sprite: Mobs/Species/Terminator/parts.rsi - state: r_leg - -- type: humanoidBaseSprite - id: MobTerminatorRArm - baseSprite: - sprite: Mobs/Species/Terminator/parts.rsi - state: r_arm - -- type: humanoidBaseSprite - id: MobTerminatorRHand - baseSprite: - sprite: Mobs/Species/Terminator/parts.rsi - state: r_hand - -- type: humanoidBaseSprite - id: MobTerminatorRFoot - baseSprite: - sprite: Mobs/Species/Terminator/parts.rsi - state: r_foot diff --git a/Resources/Prototypes/Species/vox.yml b/Resources/Prototypes/Species/vox.yml new file mode 100644 index 00000000000..b6cba51322e --- /dev/null +++ b/Resources/Prototypes/Species/vox.yml @@ -0,0 +1,181 @@ +- type: species + id: Vox + name: species-name-vox + roundStart: false # sad... + prototype: MobVox + sprites: MobVoxSprites + markingLimits: MobVoxMarkingLimits + dollPrototype: MobVoxDummy + skinColoration: VoxFeathers + defaultSkinTone: "#6c741d" + maleFirstNames: names_vox + femaleFirstNames: names_vox + naming: First + sexes: + - Unsexed + +- type: speciesBaseSprites + id: MobVoxSprites + sprites: + Head: MobVoxHead + Snout: MobHumanoidAnyMarking + Hair: MobHumanoidAnyMarking + FacialHair: MobHumanoidAnyMarking + Chest: MobVoxTorso + Eyes: MobVoxEyes + LArm: MobVoxLArm + RArm: MobVoxRArm + LHand: MobVoxLHand + RHand: MobVoxRHand + LLeg: MobVoxLLeg + RLeg: MobVoxRLeg + LFoot: MobVoxLFoot + RFoot: MobVoxRFoot + Tail: MobHumanoidAnyMarking + +- type: markingPoints + id: MobVoxMarkingLimits + onlyWhitelisted: true + points: + Hair: + points: 1 + required: false + FacialHair: + points: 1 + required: false + Head: + points: 1 + required: true + Snout: + points: 1 + required: true + defaultMarkings: [ VoxBeak ] + RightArm: + points: 1 + required: true + defaultMarkings: [ VoxRArmScales ] + RightHand: + points: 1 + required: true + defaultMarkings: [ VoxRHandScales ] + LeftArm: + points: 1 + required: true + defaultMarkings: [ VoxLArmScales ] + LeftHand: + points: 1 + required: true + defaultMarkings: [ VoxLHandScales ] + RightLeg: + points: 1 + required: true + defaultMarkings: [ VoxRLegScales ] + LeftLeg: + points: 1 + required: true + defaultMarkings: [ VoxLLegScales ] + RightFoot: + points: 1 + required: true + defaultMarkings: [ VoxRFootScales ] + LeftFoot: + points: 1 + required: true + defaultMarkings: [ VoxLFootScales ] + Chest: + points: 1 + required: false + Tail: + points: 1 + required: true + defaultMarkings: [ VoxTail ] + +- type: humanoidBaseSprite + id: MobVoxEyes + baseSprite: + sprite: Mobs/Species/Vox/parts.rsi + state: eyes + +- type: humanoidBaseSprite + id: MobVoxHead + baseSprite: + sprite: Mobs/Species/Vox/parts.rsi + state: head + +- type: humanoidBaseSprite + id: MobVoxHeadMale + baseSprite: + sprite: Mobs/Species/Vox/parts.rsi + state: head + +- type: humanoidBaseSprite + id: MobVoxHeadFemale + baseSprite: + sprite: Mobs/Species/Vox/parts.rsi + state: head + +- type: humanoidBaseSprite + id: MobVoxTorso + baseSprite: + sprite: Mobs/Species/Vox/parts.rsi + state: torso + +- type: humanoidBaseSprite + id: MobVoxTorsoMale + baseSprite: + sprite: Mobs/Species/Vox/parts.rsi + state: torso + +- type: humanoidBaseSprite + id: MobVoxTorsoFemale + baseSprite: + sprite: Mobs/Species/Vox/parts.rsi + state: torso + +- type: humanoidBaseSprite + id: MobVoxLLeg + baseSprite: + sprite: Mobs/Species/Vox/parts.rsi + state: l_leg + +- type: humanoidBaseSprite + id: MobVoxLArm + baseSprite: + sprite: Mobs/Species/Vox/parts.rsi + state: l_arm + +- type: humanoidBaseSprite + id: MobVoxLHand + baseSprite: + sprite: Mobs/Species/Vox/parts.rsi + state: l_hand + +- type: humanoidBaseSprite + id: MobVoxLFoot + baseSprite: + sprite: Mobs/Species/Vox/parts.rsi + state: l_foot + +- type: humanoidBaseSprite + id: MobVoxRLeg + baseSprite: + sprite: Mobs/Species/Vox/parts.rsi + state: r_leg + +- type: humanoidBaseSprite + id: MobVoxRArm + baseSprite: + sprite: Mobs/Species/Vox/parts.rsi + state: r_arm + +- type: humanoidBaseSprite + id: MobVoxRHand + baseSprite: + sprite: Mobs/Species/Vox/parts.rsi + state: r_hand + +- type: humanoidBaseSprite + id: MobVoxRFoot + baseSprite: + sprite: Mobs/Species/Vox/parts.rsi + state: r_foot diff --git a/Resources/Prototypes/Stacks/Materials/crystals.yml b/Resources/Prototypes/Stacks/Materials/crystals.yml index 274f9c10eab..e4c9e48718d 100644 --- a/Resources/Prototypes/Stacks/Materials/crystals.yml +++ b/Resources/Prototypes/Stacks/Materials/crystals.yml @@ -4,3 +4,19 @@ icon: Objects/Specific/Syndicate/telecrystal.rsi spawn: Telecrystal1 itemSize: 1 + +- type: stack + id: Bluespace + name: bluespace + icon: { sprite: Objects/Materials/materials.rsi, state: bluespace } + spawn: MaterialBluespace1 + maxCount: 5 + itemSize: 1 + +- type: stack + id: Normality + name: normality + icon: { sprite: Objects/Materials/materials.rsi, state: normality } + spawn: MaterialNormality1 + maxCount: 5 + itemSize: 1 diff --git a/Resources/Prototypes/Stacks/Materials/materials.yml b/Resources/Prototypes/Stacks/Materials/materials.yml index 00153ef23c0..0a05a899648 100644 --- a/Resources/Prototypes/Stacks/Materials/materials.yml +++ b/Resources/Prototypes/Stacks/Materials/materials.yml @@ -54,6 +54,14 @@ maxCount: 30 itemSize: 1 +- type: stack + id: Pyrotton + name: pyrotton + icon: { sprite: /Textures/Objects/Materials/materials.rsi, state: pyrotton } + spawn: MaterialPyrotton1 + maxCount: 30 + itemSize: 1 + - type: stack id: Bananium name: bananium diff --git a/Resources/Prototypes/Stacks/Materials/ore.yml b/Resources/Prototypes/Stacks/Materials/ore.yml index 2a95393c27b..cf7fcb04836 100644 --- a/Resources/Prototypes/Stacks/Materials/ore.yml +++ b/Resources/Prototypes/Stacks/Materials/ore.yml @@ -46,7 +46,6 @@ maxCount: 30 itemSize: 2 - - type: stack id: BananiumOre name: bananium ore @@ -70,3 +69,19 @@ spawn: Salt1 maxCount: 30 itemSize: 2 + +- type: stack + id: BluespaceOre + name: raw bluespace + icon: { sprite: Objects/Materials/ore.rsi, state: bluespace } + spawn: BluespaceOre1 + maxCount: 30 + itemSize: 2 + +- type: stack + id: NormalityOre + name: raw normality + icon: { sprite: Objects/Materials/ore.rsi, state: normality } + spawn: NormalityOre1 + maxCount: 30 + itemSize: 2 diff --git a/Resources/Prototypes/Stacks/consumable_stacks.yml b/Resources/Prototypes/Stacks/consumable_stacks.yml index e9f0cab7e4b..2936772f080 100644 --- a/Resources/Prototypes/Stacks/consumable_stacks.yml +++ b/Resources/Prototypes/Stacks/consumable_stacks.yml @@ -51,6 +51,14 @@ maxCount: itemSize: 1 +- type: stack + id: GroundCannabisRainbow + name: ground rainbow cannabis + icon: { sprite: /Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi, state: powderpile_rainbow } + spawn: GroundCannabisRainbow + maxCount: + itemSize: 1 + - type: stack id: LeavesTobaccoDried name: dried tobacco leaves @@ -66,3 +74,11 @@ spawn: LeavesCannabisDried maxCount: 5 itemSize: 5 + +- type: stack + id: LeavesCannabisRainbowDried + name: dried rainbow cannabis leaves + icon: { sprite: /Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi, state: dried } + spawn: LeavesCannabisRainbowDried + maxCount: 5 + itemSize: 5 diff --git a/Resources/Prototypes/StatusEffects/health.yml b/Resources/Prototypes/StatusEffects/health.yml index 562dbb336d8..073b03a2aeb 100644 --- a/Resources/Prototypes/StatusEffects/health.yml +++ b/Resources/Prototypes/StatusEffects/health.yml @@ -1,8 +1,8 @@ - type: statusIcon id: HealthIcon abstract: true - priority: 1 - locationPreference: Right + priority: 3 + locationPreference: Left isShaded: true - type: statusIcon diff --git a/Resources/Prototypes/StatusEffects/security.yml b/Resources/Prototypes/StatusEffects/security.yml index 2a6695387b6..31a22e5df36 100644 --- a/Resources/Prototypes/StatusEffects/security.yml +++ b/Resources/Prototypes/StatusEffects/security.yml @@ -9,33 +9,33 @@ parent: SecurityIcon id: SecurityIconDischarged icon: - sprite: Interface/Misc/security_icons.rsi + sprite: /Textures/Interface/Misc/security_icons.rsi state: hud_discharged - type: statusIcon parent: SecurityIcon id: SecurityIconIncarcerated icon: - sprite: Interface/Misc/security_icons.rsi + sprite: /Textures/Interface/Misc/security_icons.rsi state: hud_incarcerated - type: statusIcon parent: SecurityIcon id: SecurityIconParoled icon: - sprite: Interface/Misc/security_icons.rsi + sprite: /Textures/Interface/Misc/security_icons.rsi state: hud_paroled - type: statusIcon parent: SecurityIcon id: SecurityIconSuspected icon: - sprite: Interface/Misc/security_icons.rsi + sprite: /Textures/Interface/Misc/security_icons.rsi state: hud_suspected - type: statusIcon parent: SecurityIcon id: SecurityIconWanted icon: - sprite: Interface/Misc/security_icons.rsi + sprite: /Textures/Interface/Misc/security_icons.rsi state: hud_wanted diff --git a/Resources/Prototypes/StepTrigger/StepTriggerTypes.yml b/Resources/Prototypes/StepTrigger/StepTriggerTypes.yml new file mode 100644 index 00000000000..6d03908a17f --- /dev/null +++ b/Resources/Prototypes/StepTrigger/StepTriggerTypes.yml @@ -0,0 +1,20 @@ +- type: stepTriggerType + id: Lava + +- type: stepTriggerType + id: Landmine + +- type: stepTriggerType + id: Shard + +- type: stepTriggerType + id: Chasm + +- type: stepTriggerType + id: Mousetrap + +- type: stepTriggerType + id: SlipTile + +- type: stepTriggerType + id: SlipEntity diff --git a/Resources/Prototypes/Store/categories.yml b/Resources/Prototypes/Store/categories.yml index 11f8d509af3..489145813e2 100644 --- a/Resources/Prototypes/Store/categories.yml +++ b/Resources/Prototypes/Store/categories.yml @@ -7,6 +7,32 @@ id: Debug2 name: store-category-debug2 +#WIZARD +- type: storeCategory + id: SpellbookOffensive + name: store-caregory-spellbook-offensive + priority: 0 + +- type: storeCategory + id: SpellbookDefensive + name: store-caregory-spellbook-defensive + priority: 1 + +- type: storeCategory + id: SpellbookUtility + name: store-caregory-spellbook-utility + priority: 2 + +- type: storeCategory + id: SpellbookEquipment + name: store-caregory-spellbook-equipment + priority: 3 + +- type: storeCategory + id: SpellbookEvents + name: store-caregory-spellbook-events + priority: 4 + #uplink categoires - type: storeCategory id: UplinkWeapons @@ -68,6 +94,21 @@ name: store-category-deception priority: 10 +- type: storeCategory + id: UplinkChemicals + name: store-category-chemicals + priority: 11 + +- type: storeCategory + id: UplinkDisruption + name: store-category-disruption + priority: 12 + +- type: storeCategory + id: UplinkSales + name: Sales + priority: 10 + #revenant - type: storeCategory id: RevenantAbilities diff --git a/Resources/Prototypes/Store/currency.yml b/Resources/Prototypes/Store/currency.yml index 91039a75e6a..b1cff06be2d 100644 --- a/Resources/Prototypes/Store/currency.yml +++ b/Resources/Prototypes/Store/currency.yml @@ -1,7 +1,7 @@ - type: currency id: Telecrystal displayName: store-currency-display-telecrystal - cash: + cash: 1: Telecrystal1 canWithdraw: true @@ -10,7 +10,12 @@ displayName: store-currency-display-stolen-essence canWithdraw: false +- type: currency + id: WizCoin + displayName: store-currency-display-wizcoin + canWithdraw: false + #debug - type: currency id: DebugDollar - displayName: store-currency-display-debugdollar \ No newline at end of file + displayName: store-currency-display-debugdollar diff --git a/Resources/Prototypes/Store/presets.yml b/Resources/Prototypes/Store/presets.yml index e623f4c8cd6..47768b68ec3 100644 --- a/Resources/Prototypes/Store/presets.yml +++ b/Resources/Prototypes/Store/presets.yml @@ -13,5 +13,25 @@ - UplinkJob - UplinkArmor - UplinkPointless + - UplinkSales currencyWhitelist: - Telecrystal + sales: + enabled: true + minMultiplier: 0.2 + maxMultiplier: 0.8 + minItems: 3 + maxItems: 8 + salesCategory: UplinkSales + +- type: storePreset + id: StorePresetSpellbook + storeName: Spellbook + categories: + - SpellbookOffensive #Fireball, Rod Form + - SpellbookDefensive #Magic Missile, Wall of Force + - SpellbookUtility #Body Swap, Lich, Teleport, Knock, Polymorph + - SpellbookEquipment #Battlemage Robes, Staff of Locker + - SpellbookEvents #Summon Weapons, Summon Ghosts + currencyWhitelist: + - WizCoin diff --git a/Resources/Prototypes/Tiles/plating.yml b/Resources/Prototypes/Tiles/plating.yml index 7edb1ae784c..0a74ef9fd43 100644 --- a/Resources/Prototypes/Tiles/plating.yml +++ b/Resources/Prototypes/Tiles/plating.yml @@ -4,6 +4,7 @@ sprite: /Textures/Tiles/plating.png baseTurf: Lattice isSubfloor: true + deconstructTools: [ Axing ] footstepSounds: collection: FootstepPlating friction: 0.3 @@ -20,6 +21,7 @@ - 1.0 baseTurf: Lattice isSubfloor: true + deconstructTools: [ Axing ] footstepSounds: collection: FootstepPlating friction: 0.3 @@ -31,6 +33,7 @@ sprite: /Textures/Tiles/plating_burnt.png baseTurf: Lattice isSubfloor: true + deconstructTools: [ Axing ] footstepSounds: collection: FootstepPlating friction: 0.3 @@ -42,6 +45,7 @@ sprite: /Textures/Tiles/Asteroid/asteroid_plating.png baseTurf: Lattice isSubfloor: true + deconstructTools: [ Axing ] footstepSounds: collection: FootstepPlating friction: 0.3 @@ -53,6 +57,7 @@ sprite: /Textures/Tiles/Misc/clockwork/clockwork_floor.png baseTurf: Lattice isSubfloor: true + deconstructTools: [ Axing ] footstepSounds: collection: FootstepPlating friction: 0.3 @@ -64,6 +69,7 @@ sprite: /Textures/Tiles/snow_plating.png #Not in the snow planet RSI because it doesn't have any metadata. Should probably be moved to its own folder later. baseTurf: Lattice isSubfloor: true + deconstructTools: [ Axing ] footstepSounds: collection: FootstepPlating friction: 0.15 #a little less then actual snow diff --git a/Resources/Prototypes/Traits/Misc/singer_types.yml b/Resources/Prototypes/Traits/Misc/singer_types.yml index c0acf1d4221..605f3be9130 100644 --- a/Resources/Prototypes/Traits/Misc/singer_types.yml +++ b/Resources/Prototypes/Traits/Misc/singer_types.yml @@ -1,26 +1,22 @@ -# - type: SingerInstrument - # id: HarpySinger - # instrumentList: - # "Voice": {52: 0} - # "Trumpet": {56: 0} - # "Electric": {27: 0} - # "Bass": {33: 0} - # "Rock": {29: 0} - # "Acoustic": {24: 0} - # "Flute": {73: 0} - # "Sax": {66: 0} - # defaultInstrument: "Voice" - # midiUi: - # key: enum.InstrumentUiKey.Key - # type: InstrumentBoundUserInterface - # midiActionId: ActionHarpyPlayMidi +- type: SingerInstrument + id: HarpySinger + instrumentList: + "Voice": {52: 0} + "Trumpet": {56: 0} + "Electric": {27: 0} + "Bass": {33: 0} + "Rock": {29: 0} + "Acoustic": {24: 0} + "Flute": {73: 0} + "Sax": {66: 0} + defaultInstrument: "Voice" + midiUi: Key + midiActionId: ActionHarpyPlayMidi -# - type: SingerInstrument - # id: NormalSinger - # instrumentList: - # "Voice": {52: 0} - # defaultInstrument: "Voice" - # midiUi: - # key: enum.InstrumentUiKey.Key - # type: InstrumentBoundUserInterface - # midiActionId: ActionHarpyPlayMidi # TODO: custom action maybe? +- type: SingerInstrument + id: NormalSinger + instrumentList: + "Voice": {52: 0} + defaultInstrument: "Voice" + midiUi: Key + midiActionId: ActionHarpyPlayMidi # TODO: custom action maybe? diff --git a/Resources/Prototypes/Traits/categories.yml b/Resources/Prototypes/Traits/categories.yml index e413706bfa0..fcd89d5bbe8 100644 --- a/Resources/Prototypes/Traits/categories.yml +++ b/Resources/Prototypes/Traits/categories.yml @@ -19,7 +19,24 @@ - type: traitCategory id: Speech root: true + subCategories: + - TraitsSpeechUncategorized + - TraitsSpeechAccents + - TraitsSpeechLanguages + +- type: traitCategory + id: TraitsSpeechUncategorized + +- type: traitCategory + id: TraitsSpeechAccents + +- type: traitCategory + id: TraitsSpeechLanguages - type: traitCategory id: Visual root: true + +- type: traitCategory + id: Language + root: true \ No newline at end of file diff --git a/Resources/Prototypes/Traits/disabilities.yml b/Resources/Prototypes/Traits/disabilities.yml index 34147cef8a9..efa77391013 100644 --- a/Resources/Prototypes/Traits/disabilities.yml +++ b/Resources/Prototypes/Traits/disabilities.yml @@ -8,8 +8,26 @@ jobs: - Borg - MedicalBorg - components: - - type: PermanentBlindness + functions: + - !type:TraitAddComponent + components: + - type: PermanentBlindness + +- type: trait + id: Nearsighted + category: Visual + points: 1 + requirements: + - !type:CharacterJobRequirement + inverted: true + jobs: + - Borg + - MedicalBorg + functions: + - !type:TraitAddComponent + components: + - type: PermanentBlindness + blindness: 4 - type: trait id: Narcolepsy @@ -21,42 +39,54 @@ jobs: - Borg - MedicalBorg - components: - - type: Narcolepsy - timeBetweenIncidents: 300, 600 - durationOfIncident: 10, 30 + - !type:CharacterSpeciesRequirement + inverted: true + species: + - IPC + functions: + - !type:TraitAddComponent + components: + - type: Narcolepsy + timeBetweenIncidents: 300, 600 + durationOfIncident: 10, 30 - type: trait id: Pacifist category: Mental points: 6 - components: - - type: Pacified + functions: + - !type:TraitAddComponent + components: + - type: Pacified - type: trait id: Paracusia category: Auditory points: 2 - components: - - type: Paracusia - minTimeBetweenIncidents: 0.1 - maxTimeBetweenIncidents: 300 - maxSoundDistance: 7 - sounds: - collection: Paracusia + functions: + - !type:TraitAddComponent + components: + - type: Paracusia + minTimeBetweenIncidents: 0.1 + maxTimeBetweenIncidents: 300 + maxSoundDistance: 7 + sounds: + collection: Paracusia - type: trait id: Muted - category: Speech - points: 0 + category: Mental + points: 4 requirements: - !type:CharacterJobRequirement inverted: true jobs: - Borg - MedicalBorg - components: - - type: Muted + functions: + - !type:TraitAddComponent + components: + - type: Muted - type: trait id: Uncloneable @@ -68,12 +98,14 @@ jobs: - Borg - MedicalBorg - components: - - type: Uncloneable + functions: + - !type:TraitAddComponent + components: + - type: Uncloneable - type: trait id: FrontalLisp - category: Speech + category: TraitsSpeechAccents requirements: - !type:CharacterJobRequirement inverted: true @@ -84,8 +116,12 @@ inverted: true species: - IPC - components: - - type: FrontalLisp + - !type:CharacterItemGroupRequirement + group: TraitsAccents + functions: + - !type:TraitAddComponent + components: + - type: FrontalLisp - type: trait id: Snoring @@ -100,8 +136,10 @@ inverted: true species: - IPC - components: - - type: Snoring + functions: + - !type:TraitAddComponent + components: + - type: Snoring - type: trait id: Sluggish @@ -117,14 +155,16 @@ inverted: true species: - Diona - components: - - type: TraitSpeedModifier - sprintModifier: 0.85 - walkModifier: 0.85 - - type: ClimbDelayModifier - climbDelayMultiplier: 1.35 - - type: LayingDownModifier - layingDownCooldownMultiplier: 1.2 + functions: + - !type:TraitAddComponent + components: + - type: TraitSpeedModifier + sprintModifier: 0.85 + walkModifier: 0.85 + - type: ClimbDelayModifier + climbDelayMultiplier: 1.35 + - type: LayingDownModifier + layingDownCooldownMultiplier: 1.2 - type: trait id: SnailPaced @@ -140,14 +180,16 @@ inverted: true species: - Diona - components: - - type: TraitSpeedModifier - sprintModifier: 0.7 - walkModifier: 0.7 - - type: ClimbDelayModifier - climbDelayMultiplier: 1.66 - - type: LayingDownModifier - layingDownCooldownMultiplier: 1.6 + functions: + - !type:TraitAddComponent + components: + - type: TraitSpeedModifier + sprintModifier: 0.7 + walkModifier: 0.7 + - type: ClimbDelayModifier + climbDelayMultiplier: 1.66 + - type: LayingDownModifier + layingDownCooldownMultiplier: 1.6 - type: trait id: BloodDeficiency @@ -163,9 +205,11 @@ inverted: true species: - IPC - components: - - type: BloodDeficiency # by default, start taking bloodloss damage at around ~21.4 minutes, - bloodLossPercentage: 0.0002333333 # then become crit ~10 minutes + functions: + - !type:TraitAddComponent + components: + - type: BloodDeficiency # By default, start taking bloodloss damage at around ~21.4 minutes, + bloodLossPercentage: 0.0002333333 # then become crit ~10 minutes - type: trait id: Hemophilia @@ -181,9 +225,54 @@ inverted: true species: - IPC - components: - - type: Hemophilia - bleedReductionModifier: 0.5 - damageModifiers: - coefficients: - Blunt: 1.1 + functions: + - !type:TraitAddComponent + components: + - type: Hemophilia + bleedReductionModifier: 0.5 + damageModifiers: + coefficients: + Blunt: 1.1 + +- type: trait + id: Photophobia + category: Visual + points: 1 + requirements: + - !type:CharacterSpeciesRequirement + inverted: true + species: + - Vulpkanin # This trait functions exactly as-is for the Vulpkanin trait. + - Shadowkin + functions: + - !type:TraitAddComponent + components: + - type: Flashable + eyeDamageChance: 0.3 + eyeDamage: 1 + durationMultiplier: 1.5 + +- type: trait + id: Clumsy + category: Physical + points: 1 + requirements: + - !type:CharacterJobRequirement + inverted: true + jobs: + - Clown # This trait functions exactly as is for the Clown's trait. + - !type:CharacterDepartmentRequirement + inverted: true + departments: + - Command # Because I know for a fact people will play Captain and grief with their inability to fight back. + - Security # Because I know for a fact people will play Security and grief with their inability to use guns. + functions: + - !type:TraitAddComponent + components: + - type: Clumsy + clumsyDamage: + types: + Blunt: 5 + Piercing: 4 + groups: + Burn: 3 diff --git a/Resources/Prototypes/Traits/inconveniences.yml b/Resources/Prototypes/Traits/inconveniences.yml index 7782a52206d..57d166d3e38 100644 --- a/Resources/Prototypes/Traits/inconveniences.yml +++ b/Resources/Prototypes/Traits/inconveniences.yml @@ -11,45 +11,65 @@ inverted: true traits: - HeavyweightDrunk - components: - - type: LightweightDrunk - boozeStrengthMultiplier: 2 + - LiquorLifeline + - !type:CharacterSpeciesRequirement + inverted: true + species: + - Dwarf + - IPC + functions: + - !type:TraitAddComponent + components: + - type: LightweightDrunk + boozeStrengthMultiplier: 2 - type: trait - id: SocialAnxiety - category: Mental + id: Stutter + category: TraitsSpeechAccents requirements: - !type:CharacterJobRequirement inverted: true jobs: - Borg - MedicalBorg - components: - - type: StutteringAccent - matchRandomProb: 0.1 - fourRandomProb: 0 - threeRandomProb: 0 - cutRandomProb: 0 + - !type:CharacterItemGroupRequirement + group: TraitsAccents + functions: + - !type:TraitAddComponent + components: + - type: StutteringAccent + matchRandomProb: 0.1 + fourRandomProb: 0 + threeRandomProb: 0 + cutRandomProb: 0 -# - type: trait - # id: ForeignerLight - # category: Mental - # points: 1 - # requirements: - # - !type:TraitGroupExclusionRequirement - # prototypes: [ Foreigner ] - # components: - # - type: ForeignerTrait - # cantUnderstand: false # Allows to understand - # baseTranslator: TranslatorForeigner +- type: trait + id: ForeignerLight + category: TraitsSpeechLanguages + points: 2 + requirements: + - !type:CharacterTraitRequirement + inverted: true + traits: + - Foreigner + functions: + - !type:TraitAddComponent + components: + - type: ForeignerTrait + cantUnderstand: false + baseTranslator: TranslatorForeigner -# - type: trait - # id: Foreigner - # category: Mental - # points: 2 - # requirements: # TODO: Add a requirement to know at least 1 non-gc language - # - !type:TraitGroupExclusionRequirement - # prototypes: [ ForeignerLight ] - # components: - # - type: ForeignerTrait - # baseTranslator: TranslatorForeigner +- type: trait + id: Foreigner + category: TraitsSpeechLanguages + points: 4 + requirements: # TODO: Add a requirement to know at least 1 non-gc language + - !type:CharacterTraitRequirement + inverted: true + traits: + - ForeignerLight + functions: + - !type:TraitAddComponent + components: + - type: ForeignerTrait + baseTranslator: TranslatorForeigner diff --git a/Resources/Prototypes/Traits/languages.yml b/Resources/Prototypes/Traits/languages.yml new file mode 100644 index 00000000000..a8bdeff4683 --- /dev/null +++ b/Resources/Prototypes/Traits/languages.yml @@ -0,0 +1,108 @@ +- type: trait + id: SignLanguage + category: TraitsSpeechLanguages + points: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: TraitsLanguagesBasic + functions: + - !type:TraitModifyLanguages + languagesSpoken: + - Sign + languagesUnderstood: + - Sign + +- type: trait + id: SolCommon + category: TraitsSpeechLanguages + points: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: TraitsLanguagesBasic + - !type:CharacterSpeciesRequirement + inverted: true + species: + - Human + functions: + - !type:TraitModifyLanguages + languagesSpoken: + - SolCommon + languagesUnderstood: + - SolCommon + +- type: trait + id: Tradeband + category: TraitsSpeechLanguages + points: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: TraitsLanguagesBasic + - !type:CharacterSpeciesRequirement + inverted: true + species: + - Harpy + functions: + - !type:TraitModifyLanguages + languagesSpoken: + - Tradeband + languagesUnderstood: + - Tradeband + +- type: trait + id: Freespeak + category: TraitsSpeechLanguages + points: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: TraitsLanguagesBasic + functions: + - !type:TraitModifyLanguages + languagesSpoken: + - Freespeak + languagesUnderstood: + - Freespeak + +- type: trait + id: Elyran + category: TraitsSpeechLanguages + points: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: TraitsLanguagesBasic + functions: + - !type:TraitModifyLanguages + languagesSpoken: + - Elyran + languagesUnderstood: + - Elyran + +- type: trait + id: ValyrianStandard + category: TraitsSpeechLanguages + points: 1 + requirements: + - !type:CharacterItemGroupRequirement + group: TraitsLanguagesBasic + functions: + - !type:TraitModifyLanguages + languagesSpoken: + - ValyrianStandard + languagesUnderstood: + - ValyrianStandard + +- type: trait + id: Azaziba + category: TraitsSpeechLanguages + points: 1 + requirements: + - !type:CharacterSpeciesRequirement + species: + - Reptilian + - !type:CharacterItemGroupRequirement + group: TraitsLanguagesBasic + functions: + - !type:TraitModifyLanguages + languagesSpoken: + - Azaziba + languagesUnderstood: + - Azaziba diff --git a/Resources/Prototypes/Traits/mental.yml b/Resources/Prototypes/Traits/mental.yml new file mode 100644 index 00000000000..5b4fc56bf02 --- /dev/null +++ b/Resources/Prototypes/Traits/mental.yml @@ -0,0 +1,282 @@ +- type: trait + id: HighPotential + category: Mental + points: -5 + requirements: + - !type:CharacterLogicOrRequirement + requirements: + - !type:CharacterTraitRequirement + traits: + - LatentPsychic + - !type:CharacterJobRequirement + jobs: + - Chaplain + - Librarian + - ResearchDirector + - ForensicMantis + - !type:CharacterLogicOrRequirement + requirements: + - !type:CharacterSpeciesRequirement + inverted: true + species: + - IPC + - !type:CharacterTraitRequirement + traits: + - AnomalousPositronics + - !type:CharacterSpeciesRequirement + inverted: true + species: + - Oni + - Shadowkin + - !type:CharacterTraitRequirement + inverted: true + traits: + - LowPotential + functions: + - !type:TraitReplaceComponent + components: + - type: PotentiaModifier + potentiaMultiplier: 1.25 + +- type: trait + id: LowPotential + category: Mental + points: 4 + requirements: + - !type:CharacterLogicOrRequirement + requirements: + - !type:CharacterTraitRequirement + traits: + - LatentPsychic + - !type:CharacterJobRequirement + jobs: + - Chaplain + - Librarian + - ResearchDirector + - ForensicMantis + - !type:CharacterLogicOrRequirement + requirements: + - !type:CharacterSpeciesRequirement + inverted: true + species: + - IPC + - !type:CharacterTraitRequirement + traits: + - AnomalousPositronics + - !type:CharacterSpeciesRequirement + inverted: true + species: + - Oni + - Shadowkin + - !type:CharacterTraitRequirement + inverted: true + traits: + - HighPotential + functions: + - !type:TraitReplaceComponent + components: + - type: PotentiaModifier + potentiaMultiplier: 0.75 + +- type: trait + id: LowAmplification + category: Mental + points: 3 + requirements: + - !type:CharacterLogicOrRequirement + requirements: + - !type:CharacterTraitRequirement + traits: + - LatentPsychic + - !type:CharacterJobRequirement + jobs: + - Chaplain + - Librarian + - ResearchDirector + - ForensicMantis + - !type:CharacterLogicOrRequirement + requirements: + - !type:CharacterSpeciesRequirement + inverted: true + species: + - IPC + - !type:CharacterTraitRequirement + traits: + - AnomalousPositronics + - !type:CharacterLogicOrRequirement + requirements: + - !type:CharacterSpeciesRequirement + inverted: true + species: + - Shadowkin + - !type:CharacterTraitRequirement + inverted: true + traits: + - HighAmplification + - PowerOverwhelming + functions: + - !type:TraitAddPsionics + psionicPowers: + - LowAmplification + +- type: trait + id: HighAmplification + category: Mental + points: -3 + requirements: + - !type:CharacterLogicOrRequirement + requirements: + - !type:CharacterTraitRequirement + traits: + - LatentPsychic + - !type:CharacterJobRequirement + jobs: + - Chaplain + - Librarian + - ResearchDirector + - ForensicMantis + - !type:CharacterLogicOrRequirement + requirements: + - !type:CharacterSpeciesRequirement + inverted: true + species: + - IPC + - !type:CharacterTraitRequirement + traits: + - AnomalousPositronics + - !type:CharacterLogicOrRequirement + requirements: + - !type:CharacterSpeciesRequirement + inverted: true + species: + - Shadowkin + - !type:CharacterTraitRequirement + inverted: true + traits: + - LowAmplification + - PowerOverwhelming + functions: + - !type:TraitAddPsionics + psionicPowers: + - HighAmplification + +- type: trait + id: PowerOverwhelming + category: Mental + points: -10 + requirements: + - !type:CharacterLogicOrRequirement + requirements: + - !type:CharacterTraitRequirement + traits: + - LatentPsychic + - !type:CharacterJobRequirement + jobs: + - Chaplain + - Librarian + - ResearchDirector + - ForensicMantis + - !type:CharacterLogicOrRequirement + requirements: + - !type:CharacterSpeciesRequirement + inverted: true + species: + - IPC + - !type:CharacterTraitRequirement + traits: + - AnomalousPositronics + - !type:CharacterLogicOrRequirement + requirements: + - !type:CharacterSpeciesRequirement + inverted: true + species: + - Shadowkin + - !type:CharacterTraitRequirement + inverted: true + traits: + - LowAmplification + - HighAmplification + functions: + - !type:TraitAddPsionics + psionicPowers: + - PowerOverwhelming + +- type: trait + id: LowDampening + category: Mental + points: 3 + requirements: + - !type:CharacterLogicOrRequirement + requirements: + - !type:CharacterTraitRequirement + traits: + - LatentPsychic + - !type:CharacterJobRequirement + jobs: + - Chaplain + - Librarian + - ResearchDirector + - ForensicMantis + - !type:CharacterLogicOrRequirement + requirements: + - !type:CharacterSpeciesRequirement + inverted: true + species: + - IPC + - !type:CharacterTraitRequirement + traits: + - AnomalousPositronics + - !type:CharacterLogicOrRequirement + requirements: + - !type:CharacterSpeciesRequirement + inverted: true + species: + - Shadowkin + - !type:CharacterTraitRequirement + inverted: true + traits: + - HighDampening + functions: + - !type:TraitAddPsionics + psionicPowers: + - LowDampening + +- type: trait + id: HighDampening + category: Mental + points: -3 + requirements: + - !type:CharacterLogicOrRequirement + requirements: + - !type:CharacterTraitRequirement + traits: + - LatentPsychic + - !type:CharacterJobRequirement + jobs: + - Chaplain + - Librarian + - ResearchDirector + - ForensicMantis + - !type:CharacterLogicOrRequirement + requirements: + - !type:CharacterSpeciesRequirement + inverted: true + species: + - IPC + - !type:CharacterTraitRequirement + traits: + - AnomalousPositronics + - !type:CharacterLogicOrRequirement + requirements: + - !type:CharacterSpeciesRequirement + inverted: true + species: + - Shadowkin + - !type:CharacterTraitRequirement + inverted: true + traits: + - LowDampening + functions: + - !type:TraitAddPsionics + psionicPowers: + - HighDampening diff --git a/Resources/Prototypes/Traits/neutral.yml b/Resources/Prototypes/Traits/neutral.yml index 2d8dce4a0e8..8ea7006c0c8 100644 --- a/Resources/Prototypes/Traits/neutral.yml +++ b/Resources/Prototypes/Traits/neutral.yml @@ -1,44 +1,60 @@ - type: trait id: PirateAccent - category: Speech - components: - - type: PirateAccent + category: TraitsSpeechAccents + requirements: + - !type:CharacterItemGroupRequirement + group: TraitsAccents + functions: + - !type:TraitAddComponent + components: + - type: PirateAccent - type: trait id: Accentless - category: Speech - points: -2 + category: TraitsSpeechAccents + points: -1 requirements: - !type:CharacterJobRequirement inverted: true jobs: - Borg - MedicalBorg - components: - - type: Accentless - removes: - - type: LizardAccent - - type: MothAccent - - type: ReplacementAccent - accent: dwarf + - !type:CharacterItemGroupRequirement + group: TraitsAccents + functions: + - !type:TraitAddComponent + components: + - type: Accentless + removes: + - type: LizardAccent + - type: MothAccent + - type: ReplacementAccent + accent: dwarf - type: trait id: Southern - category: Speech - components: - - type: SouthernAccent + category: TraitsSpeechAccents + requirements: + - !type:CharacterItemGroupRequirement + group: TraitsAccents + functions: + - !type:TraitAddComponent + components: + - type: SouthernAccent - type: trait id: NormalVision category: Visual - # requirements: - # - !type:CharacterSpeciesRequirement - # species: - # - Harpy - # - Vulpkanin - componentRemovals: - - UltraVision - - DogVision + requirements: + - !type:CharacterSpeciesRequirement + species: + - Harpy + - Vulpkanin + functions: + - !type:TraitRemoveComponent + components: + - type: UltraVision + - type: DogVision - type: trait id: Saturnine @@ -54,8 +70,10 @@ inverted: true traits: - Sanguine - moodEffects: - - TraitSaturnine + functions: + - !type:TraitAddMoodlets + moodEffects: + - TraitSaturnine - type: trait id: Sanguine @@ -71,8 +89,10 @@ inverted: true traits: - Saturnine - moodEffects: - - TraitSanguine + functions: + - !type:TraitAddMoodlets + moodEffects: + - TraitSanguine - type: trait id: AddictionNicotine @@ -88,5 +108,17 @@ inverted: true species: - IPC - moodEffects: - - NicotineWithdrawal \ No newline at end of file + functions: + - !type:TraitAddMoodlets + moodEffects: + - NicotineWithdrawal + +- type: trait + id: Liar + category: Mental + functions: + - !type:TraitAddComponent + components: + - type: ReplacementAccent + replacementChance: 0.15 + accent: liar diff --git a/Resources/Prototypes/Traits/physical.yml b/Resources/Prototypes/Traits/physical.yml index 4d6d7506cb2..083a91382f9 100644 --- a/Resources/Prototypes/Traits/physical.yml +++ b/Resources/Prototypes/Traits/physical.yml @@ -1,24 +1,26 @@ - type: trait id: WillToLive category: Physical - points: -50 + points: -1 requirements: - !type:CharacterJobRequirement inverted: true jobs: - Borg - MedicalBorg - # - !type:CharacterSpeciesRequirement - # inverted: true - # species: - # - IPC + - !type:CharacterSpeciesRequirement + inverted: true + species: + - IPC - !type:CharacterTraitRequirement inverted: true traits: - WillToDie - components: - - type: DeadModifier - deadThresholdModifier: 10 + functions: + - !type:TraitReplaceComponent + components: + - type: DeadModifier + deadThresholdModifier: 10 - type: trait id: WillToDie @@ -30,22 +32,24 @@ jobs: - Borg - MedicalBorg - # - !type:CharacterSpeciesRequirement - # inverted: true - # species: - # - IPC + - !type:CharacterSpeciesRequirement + inverted: true + species: + - IPC - !type:CharacterTraitRequirement inverted: true traits: - WillToLive - components: - - type: DeadModifier - deadThresholdModifier: -15 + functions: + - !type:TraitReplaceComponent + components: + - type: DeadModifier + deadThresholdModifier: -15 - type: trait id: Tenacity category: Physical - points: -50 + points: -3 requirements: - !type:CharacterJobRequirement inverted: true @@ -60,9 +64,11 @@ inverted: true traits: - GlassJaw - components: - - type: CritModifier - critThresholdModifier: 5 + functions: + - !type:TraitReplaceComponent + components: + - type: CritModifier + critThresholdModifier: 5 - type: trait id: GlassJaw @@ -82,9 +88,11 @@ inverted: true traits: - Tenacity - components: - - type: CritModifier - critThresholdModifier: -10 + functions: + - !type:TraitReplaceComponent + components: + - type: CritModifier + critThresholdModifier: -10 - type: trait id: Vigor @@ -103,11 +111,13 @@ - !type:CharacterSpeciesRequirement inverted: true species: - # - Oni + - Oni - IPC - components: - - type: StaminaCritModifier - critThresholdModifier: 10 + functions: + - !type:TraitReplaceComponent + components: + - type: StaminaCritModifier + critThresholdModifier: 10 - type: trait id: Lethargy @@ -123,13 +133,15 @@ inverted: true traits: - Vigor - # - !type:CharacterSpeciesRequirement - # inverted: true - # species: - # - Felinid - components: - - type: StaminaCritModifier - critThresholdModifier: -15 + - !type:CharacterSpeciesRequirement + inverted: true + species: + - Felinid + functions: + - !type:TraitReplaceComponent + components: + - type: StaminaCritModifier + critThresholdModifier: -15 - type: trait id: HighAdrenaline @@ -149,10 +161,12 @@ inverted: true traits: - AdrenalDysfunction - components: - - type: Adrenaline - rangeModifier: 0.4 - inverse: true + functions: + - !type:TraitReplaceComponent + components: + - type: Adrenaline + rangeModifier: 0.4 + inverse: true - type: trait id: AdrenalDysfunction @@ -172,9 +186,11 @@ inverted: true traits: - HighAdrenaline - components: - - type: Adrenaline - rangeModifier: 0.8 + functions: + - !type:TraitReplaceComponent + components: + - type: Adrenaline + rangeModifier: 0.8 - type: trait id: Masochism @@ -190,10 +206,12 @@ inverted: true traits: - LowPainTolerance - components: - - type: PainTolerance - rangeModifier: 0.4 - inverse: true + functions: + - !type:TraitReplaceComponent + components: + - type: PainTolerance + rangeModifier: 0.4 + inverse: true - type: trait id: LowPainTolerance @@ -209,9 +227,11 @@ inverted: true traits: - Masochism - components: - - type: PainTolerance - rangeModifier: 0.6 + functions: + - !type:TraitReplaceComponent + components: + - type: PainTolerance + rangeModifier: 0.6 - type: trait id: MartialArtist @@ -224,10 +244,401 @@ - Borg - MedicalBorg - Boxer - components: - - type: Boxer - modifiers: - coefficients: - Blunt: 1.5 - Slash: 1.5 - Piercing: 1.5 + functions: + - !type:TraitReplaceComponent + components: + - type: Boxer + modifiers: + coefficients: + Blunt: 1.5 + Slash: 1.5 + Piercing: 1.5 + +- type: trait + id: Small + category: Physical + points: -2 + requirements: + - !type:CharacterSpeciesRequirement + inverted: true + species: + - Felinid # Felinids already have this feature by default. + - !type:CharacterHeightRequirement + max: 150 + - !type:CharacterWidthRequirement + max: 32 + functions: + - !type:TraitAddComponent + components: + - type: PseudoItem + storedOffset: 0,17 + shape: + - 0,0,1,4 + - 0,2,3,4 + - 4,0,5,4 + +- type: trait + id: TemperatureTolerance + category: Physical + points: -1 + requirements: + - !type:CharacterSpeciesRequirement + inverted: true + species: + - Vulpkanin # This trait functions exactly as-is for the Vulpkanin trait. + functions: + - !type:TraitReplaceComponent + components: + - type: TemperatureProtection + coefficient: 0.1 # Enough resistance to walk into the chef's freezer, or tolerate daytime temperatures on Glacier without a jacket. + +# These traits largely exist to demonstrate more of the "Component Removals" functionality. This way contributors +# can get used to seeing that they can "Remove and Replace" a pre-existing component. +# When declared, componentRemovals work like a "RemComp" that activates upon joining a round. +- type: trait + id: Talons + category: Physical + points: -1 + requirements: + - !type:CharacterSpeciesRequirement + inverted: true + species: + - Harpy # Harpies already have talons + - Arachnid # Apparently they have a "piercing" bite + - !type:CharacterTraitRequirement + inverted: true + traits: + - Claws + functions: + - !type:TraitReplaceComponent + components: + - type: MeleeWeapon + soundHit: + collection: AlienClaw + animation: WeaponArcClaw + damage: + types: + Piercing: 5 # No, this isn't "OP", this is literally the worst brute damage type in the game. + # Same deal as Slash, except that a majority of all armor provides Piercing resistance. + +- type: trait + id: Claws + category: Physical + points: -1 + requirements: + - !type:CharacterSpeciesRequirement + inverted: true + species: + - Felinid # Felinids already have cat claws. + - Reptilian # Reptilians also have cat claws. + - Shadowkin # Shadowkins also have claws. + # - Vulpkanin # Vulpkanin have "Blunt" claws. One could argue this trait "Sharpens" their claws. + - !type:CharacterTraitRequirement + inverted: true + traits: + - Talons + functions: + - !type:TraitReplaceComponent + components: + - type: MeleeWeapon + soundHit: + collection: AlienClaw + angle: 30 + animation: WeaponArcClaw + damage: + types: + Slash: 5 # Trade stamina damage on hit for a very minor amount of extra bleed. + # Blunt also deals bleed damage, so this is more of a sidegrade. + +- type: trait + id: NaturalWeaponRemoval + category: Physical + points: 0 + requirements: + - !type:CharacterSpeciesRequirement + inverted: true + species: + - Human + - Oni + - SlimePerson + - !type:CharacterTraitRequirement + inverted: true + traits: + - Talons + - Claws + functions: + - !type:TraitReplaceComponent + components: + - type: MeleeWeapon + soundHit: + collection: Punch + angle: 30 + animation: WeaponArcFist + damage: + types: + Blunt: 5 + +- type: trait + id: StrikingCalluses + category: Physical + points: -4 + requirements: + - !type:CharacterJobRequirement + inverted: true + jobs: + - Prisoner # Bionics should be "Confiscated" from long term prisoners. + - !type:CharacterSpeciesRequirement + species: + - Human # Entirely arbitrary, I've decided I want a trait unique to humans. Since they don't normally get anything exciting. + # When we get the Character Records system in, I also want to make this require certain Backgrounds. + - !type:CharacterTraitRequirement + inverted: true + traits: + - Claws + - Talons + - !type:CharacterLogicOrRequirement + requirements: + - !type:CharacterTraitRequirement + traits: + - MartialArtist + - !type:CharacterJobRequirement + jobs: + - Boxer + functions: + - !type:TraitReplaceComponent + components: + - type: MeleeWeapon + soundHit: + collection: Punch + angle: 30 + animation: WeaponArcFist + damage: + types: + Blunt: 6 + +- type: trait + id: Spinarette + category: Physical + points: -4 + requirements: + - !type:CharacterJobRequirement + inverted: true + jobs: + - Prisoner # Bionics should be "Confiscated" from long term prisoners. + - !type:CharacterSpeciesRequirement + inverted: true + species: + - Arachnid + - Arachne + - Shadowkin + - IPC + functions: + - !type:TraitAddComponent + components: + - type: Sericulture + action: ActionSericulture + productionLength: 2 + entityProduced: MaterialWebSilk1 + hungerCost: 4 + +- type: trait + id: BionicArm + category: Physical + points: -8 + requirements: + - !type:CharacterJobRequirement + inverted: true + jobs: + - Prisoner # Bionics should be "Confiscated" from long term prisoners. + functions: + - !type:TraitAddComponent + components: + - type: Prying + speedModifier: 1 + pryPowered: true + +- type: trait + id: PlateletFactories + category: Physical + points: -10 + requirements: + - !type:CharacterJobRequirement + inverted: true + jobs: + - Prisoner # Bionics should be "Confiscated" from long term prisoners. + - !type:CharacterSpeciesRequirement + inverted: true + species: + - IPC + functions: # TODO: Code Platelet factories as an actual obtainable implant, and replace this with TraitAddImplant + - !type:TraitReplaceComponent + components: + - type: PassiveDamage + allowedStates: + - Alive + - Critical + damageCap: 200 + damage: + groups: + Brute: -0.07 + Burn: -0.07 + Airloss: -0.07 + Toxin: -0.07 + Genetic: -0.07 + +- type: trait + id: DermalArmor + category: Physical + points: -9 + 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: trait + id: CyberEyes + category: Physical + points: -8 + requirements: + - !type:CharacterJobRequirement + inverted: true + jobs: + - Prisoner # Bionics should be "Confiscated" from long term prisoners. + - !type:CharacterTraitRequirement + inverted: true + traits: + - Photophobia + - Blindness + - Nearsighted + functions: + - !type:TraitRemoveComponent + components: + - type: Flashable + - !type:TraitAddComponent + components: + - type: FlashImmunity + - type: EyeProtection + - type: CyberEyes + +- type: trait + id: CyberEyesSecurity + category: Physical + points: -1 + requirements: + - !type:CharacterJobRequirement + inverted: true + jobs: + - Prisoner # Bionics should be "Confiscated" from long term prisoners. + - !type:CharacterDepartmentRequirement + departments: + - Security + - !type:CharacterTraitRequirement + traits: + - CyberEyes + - !type:CharacterTraitRequirement + inverted: true + traits: + - CyberEyesOmni + functions: + - !type:TraitAddComponent + components: + - type: ShowJobIcons + - type: ShowMindShieldIcons + - type: ShowCriminalRecordIcons + +- type: trait + id: CyberEyesMedical + category: Physical + points: -1 + requirements: + - !type:CharacterJobRequirement + inverted: true + jobs: + - Prisoner # Bionics should be "Confiscated" from long term prisoners. + - !type:CharacterTraitRequirement + traits: + - CyberEyes + - !type:CharacterTraitRequirement + inverted: true + traits: + - CyberEyesDiagnostic + - CyberEyesOmni + functions: + - !type:TraitAddComponent + components: + - type: ShowHealthBars + damageContainers: + - Biological + - type: ShowHealthIcons + damageContainers: + - Biological + +- type: trait + id: CyberEyesDiagnostic + category: Physical + points: -1 + requirements: + - !type:CharacterJobRequirement + inverted: true + jobs: + - Prisoner # Bionics should be "Confiscated" from long term prisoners. + - !type:CharacterTraitRequirement + traits: + - CyberEyes + - !type:CharacterTraitRequirement + inverted: true + traits: + - CyberEyesMedical + - CyberEyesOmni + functions: + - !type:TraitAddComponent + components: + - type: ShowHealthBars + damageContainers: + - Inorganic + - Silicon + +- type: trait + id: CyberEyesOmni + category: Physical + points: -3 + requirements: + - !type:CharacterJobRequirement + inverted: true + jobs: + - Prisoner # Bionics should be "Confiscated" from long term prisoners. + - !type:CharacterDepartmentRequirement + departments: + - Security + - !type:CharacterTraitRequirement + traits: + - CyberEyes + - !type:CharacterTraitRequirement + inverted: true + traits: + - CyberEyesMedical + - CyberEyesDiagnostic + - CyberEyesSecurity + functions: + - !type:TraitAddComponent + components: + - type: ShowJobIcons + - type: ShowMindShieldIcons + - type: ShowCriminalRecordIcons + - type: ShowHealthIcons + damageContainers: + - Biological + - type: ShowHealthBars + damageContainers: + - Biological + - Inorganic + - Silicon diff --git a/Resources/Prototypes/Traits/skills.yml b/Resources/Prototypes/Traits/skills.yml index d20d11fb6fb..2306d254ed5 100644 --- a/Resources/Prototypes/Traits/skills.yml +++ b/Resources/Prototypes/Traits/skills.yml @@ -2,8 +2,10 @@ id: CPRTraining category: Mental points: -4 - components: - - type: CPRTraining + functions: + - !type:TraitAddComponent + components: + - type: CPRTraining requirements: - !type:CharacterJobRequirement inverted: true @@ -19,19 +21,21 @@ id: SelfAware category: Mental points: -4 - components: - - type: SelfAware - analyzableTypes: - - Blunt - - Slash - - Piercing - - Heat - - Shock - - Cold - - Caustic - detectableGroups: - - Airloss - - Toxin + functions: + - !type:TraitAddComponent + components: + - type: SelfAware + analyzableTypes: + - Blunt + - Slash + - Piercing + - Heat + - Shock + - Cold + - Caustic + detectableGroups: + - Airloss + - Toxin - type: trait id: HeavyweightDrunk @@ -53,9 +57,11 @@ species: - Dwarf - IPC - components: - - type: LightweightDrunk - boozeStrengthMultiplier: 0.5 + functions: + - !type:TraitReplaceComponent + components: + - type: LightweightDrunk + boozeStrengthMultiplier: 0.5 - type: trait id: LiquorLifeline @@ -77,46 +83,41 @@ species: - Dwarf - IPC - components: - - type: LiquorLifeline - - type: LightweightDrunk - boozeStrengthMultiplier: 0.5 + functions: + - !type:TraitReplaceComponent + components: + - type: LiquorLifeline + - type: LightweightDrunk + boozeStrengthMultiplier: 0.5 - type: trait id: Thieving category: Physical points: -8 - components: - - type: Thieving - ignoreStripHidden: true - stealth: Subtle - stripTimeReduction: 0 - stripTimeMultiplier: 0.667 + functions: + - !type:TraitReplaceComponent + components: + - type: Thieving + ignoreStripHidden: true + stealth: Subtle + stripTimeReduction: 0 + stripTimeMultiplier: 0.667 requirements: - !type:CharacterSpeciesRequirement inverted: true species: - Felinid -- type: trait - id: SignLanguage - category: Visual - points: -2 - components: - - type: LanguageKnowledgeModifier - speaks: - - Sign - understands: - - Sign - - type: trait id: Voracious category: Physical points: -2 - components: - - type: ConsumeDelayModifier - foodDelayMultiplier: 0.5 - drinkDelayMultiplier: 0.5 + functions: + - !type:TraitReplaceComponent + components: + - type: ConsumeDelayModifier + foodDelayMultiplier: 0.5 + drinkDelayMultiplier: 0.5 requirements: - !type:CharacterSpeciesRequirement inverted: true @@ -138,150 +139,201 @@ inverted: true species: - Diona - components: - - type: ClimbDelayModifier - climbDelayMultiplier: 0.35 - - type: LayingDownModifier - layingDownCooldownMultiplier: 0.5 - downedSpeedMultiplierMultiplier: 1.65 + functions: + - !type:TraitReplaceComponent + components: + - type: ClimbDelayModifier + climbDelayMultiplier: 0.35 + - type: LayingDownModifier + layingDownCooldownMultiplier: 0.5 + downedSpeedMultiplierMultiplier: 1.65 - type: trait id: LightStep category: Auditory points: -2 - components: - - type: FootstepVolumeModifier - sprintVolumeModifier: -10 - walkVolumeModifier: -10 + functions: + - !type:TraitReplaceComponent + components: + - type: FootstepVolumeModifier + sprintVolumeModifier: -10 + walkVolumeModifier: -10 requirements: - !type:CharacterSpeciesRequirement inverted: true species: - Felinid -# - type: trait - # id: Singer - # category: Auditory - # points: -2 - # requirements: - # - !type:CharacterSpeciesRequirement - # inverted: true - # species: - # - Harpy - # components: - # - type: Singer - # proto: NormalSinger +- type: trait + id: Singer + category: Auditory + points: -2 + requirements: + - !type:CharacterSpeciesRequirement + inverted: true + species: + - Harpy + functions: + - !type:TraitAddComponent + components: + - type: Singer + proto: NormalSinger -# - type: trait - # id: LatentPsychic - # category: Mental - # points: -4 - # components: - # - type: Psionic - # requirements: - # - !type:CharacterJobRequirement - # inverted: true - # jobs: - # - Borg - # - MedicalBorg - # - ResearchDirector - # - ForensicMantis - # - Chaplain - # - Librarian - # - !type:CharacterLogicOrRequirement - # requirements: - # - !type:CharacterSpeciesRequirement - # inverted: true - # species: - # - IPC - # - !type:CharacterTraitRequirement - # traits: - # - AnomalousPositronics - # - !type:CharacterTraitRequirement - # inverted: true - # traits: - # - PsionicInsulation +- type: trait + id: LatentPsychic + category: Mental + points: -4 + functions: + - !type:TraitAddComponent + components: + - type: Psionic + requirements: + - !type:CharacterJobRequirement + inverted: true + jobs: + - Borg + - MedicalBorg + - ResearchDirector + - ForensicMantis + - Chaplain + - Librarian + - !type:CharacterLogicOrRequirement + requirements: + - !type:CharacterSpeciesRequirement + inverted: true + species: + - IPC + - !type:CharacterTraitRequirement + traits: + - AnomalousPositronics + - !type:CharacterLogicOrRequirement + requirements: + - !type:CharacterSpeciesRequirement + inverted: true + species: + - Shadowkin + - !type:CharacterTraitRequirement + inverted: true + traits: + - PsionicInsulation -# - type: trait - # id: PsionicInsulation - # category: Mental - # points: -10 #Buy a significant disability to get this. - # components: - # - type: PsionicInsulation - # - type: Mindbroken - # requirements: - # - !type:CharacterJobRequirement - # inverted: true - # jobs: - # - Borg - # - MedicalBorg - # - ResearchDirector - # - ForensicMantis - # - Chaplain - # - Librarian - # - !type:CharacterLogicOrRequirement - # requirements: - # - !type:CharacterSpeciesRequirement - # inverted: true - # species: - # - IPC - # - !type:CharacterTraitRequirement - # traits: - # - AnomalousPositronics - # - !type:CharacterTraitRequirement - # inverted: true - # traits: - # - LatentPsychic +- type: trait + id: PsionicInsulation + category: Mental + points: -10 #Buy a significant disability to get this. + functions: + - !type:TraitAddComponent + components: + - type: PsionicInsulation + - type: Mindbroken + requirements: + - !type:CharacterJobRequirement + inverted: true + jobs: + - Borg + - MedicalBorg + - ResearchDirector + - ForensicMantis + - Chaplain + - Librarian + - !type:CharacterLogicOrRequirement + requirements: + - !type:CharacterSpeciesRequirement + inverted: true + species: + - IPC + - !type:CharacterTraitRequirement + traits: + - AnomalousPositronics + - !type:CharacterTraitRequirement + inverted: true + traits: + - LatentPsychic + - !type:CharacterLogicOrRequirement + requirements: + - !type:CharacterSpeciesRequirement + inverted: true + species: + - Shadowkin - type: trait id: NaturalTelepath category: Mental points: -2 - psionicPowers: - - TelepathyPower + functions: + - !type:TraitAddPsionics + psionicPowers: + - TelepathyPower requirements: - !type:CharacterJobRequirement + inverted: true jobs: - - TribalElder - # - !type:CharacterLogicOrRequirement - # requirements: - # - !type:CharacterTraitRequirement - # traits: - # - LatentPsychic - # - !type:CharacterJobRequirement - # jobs: - # - Chaplain - # - Librarian - # - !type:CharacterLogicOrRequirement - # requirements: - # - !type:CharacterSpeciesRequirement - # inverted: true - # species: - # - IPC - # - !type:CharacterTraitRequirement - # traits: - # - AnomalousPositronics + - ResearchDirector + - ForensicMantis + - !type:CharacterLogicOrRequirement + requirements: + - !type:CharacterTraitRequirement + traits: + - LatentPsychic + - !type:CharacterJobRequirement + jobs: + - Chaplain + - Librarian + - !type:CharacterLogicOrRequirement + requirements: + - !type:CharacterSpeciesRequirement + inverted: true + species: + - IPC + - !type:CharacterTraitRequirement + traits: + - AnomalousPositronics + - !type:CharacterLogicOrRequirement + requirements: + - !type:CharacterSpeciesRequirement + inverted: true + species: + - Shadowkin - type: trait id: TrapAvoider category: Physical points: -3 - components: - - type: StepTriggerImmune - # requirements: - # - !type:CharacterSpeciesRequirement - # inverted: true - # species: - # - Felinid - # - Harpy + functions: + - !type:TraitAddComponent + components: + - type: StepTriggerImmune + whitelist: + types: + - Shard + - Landmine + - Mousetrap + - SlipEntity + requirements: + - !type:CharacterSpeciesRequirement + inverted: true + species: + - Felinid + - Harpy + +- type: trait + id: AnomalousPositronics + category: Mental + points: -4 + functions: + - !type:TraitRemoveComponent + components: + - type: PsionicInsulation + requirements: + - !type:CharacterSpeciesRequirement + species: + - IPC -# - type: trait - # id: AnomalousPositronics - # category: Mental - # points: -4 - # componentRemovals: - # - PsionicInsulation - # requirements: - # - !type:CharacterSpeciesRequirement - # species: - # - IPC +- type: trait + id: AnimalFriend + category: Mental + points: -4 + functions: + - !type:TraitModifyFactions + addFactions: + - AnimalFriend diff --git a/Resources/Prototypes/Traits/species.yml b/Resources/Prototypes/Traits/species.yml index ee80de14bd3..a3e29b37285 100644 --- a/Resources/Prototypes/Traits/species.yml +++ b/Resources/Prototypes/Traits/species.yml @@ -1,62 +1,82 @@ -# - type: trait - # id: Swashbuckler - # category: Physical - # points: -2 - # components: - # - type: OniDamageModifier - # modifiers: - # coefficients: - # Blunt: 1.2 - # Slash: 1.35 - # Piercing: 1.2 - # requirements: - # - !type:CharacterSpeciesRequirement - # species: - # - Oni - # - !type:CharacterTraitRequirement - # inverted: true - # traits: - # - Spearmaster - # - WeaponsGeneralist +- type: trait + id: Swashbuckler + category: Physical + points: -2 + functions: + - !type:TraitReplaceComponent + components: + - type: OniDamageModifier + modifiers: + coefficients: + Blunt: 1.2 + Slash: 1.35 + Piercing: 1.2 + requirements: + - !type:CharacterSpeciesRequirement + species: + - Oni + - !type:CharacterTraitRequirement + inverted: true + traits: + - Spearmaster + - WeaponsGeneralist -# - type: trait - # id: Spearmaster - # category: Physical - # points: -2 - # components: - # - type: OniDamageModifier - # modifiers: - # coefficients: - # Blunt: 1.2 - # Slash: 1.2 - # Piercing: 1.35 - # requirements: - # - !type:CharacterSpeciesRequirement - # species: - # - Oni - # - !type:CharacterTraitRequirement - # inverted: true - # traits: - # - Swashbuckler - # - WeaponsGeneralist +- type: trait + id: Spearmaster + category: Physical + points: -2 + functions: + - !type:TraitReplaceComponent + components: + - type: OniDamageModifier + modifiers: + coefficients: + Blunt: 1.2 + Slash: 1.2 + Piercing: 1.35 + requirements: + - !type:CharacterSpeciesRequirement + species: + - Oni + - !type:CharacterTraitRequirement + inverted: true + traits: + - Swashbuckler + - WeaponsGeneralist -# - type: trait - # id: WeaponsGeneralist - # category: Physical - # points: -2 - # components: - # - type: OniDamageModifier - # modifiers: - # coefficients: - # Blunt: 1.25 - # Slash: 1.25 - # Piercing: 1.25 - # requirements: - # - !type:CharacterSpeciesRequirement - # species: - # - Oni - # - !type:CharacterTraitRequirement - # inverted: true - # traits: - # - Swashbuckler - # - Spearmaster +- type: trait + id: WeaponsGeneralist + category: Physical + points: -2 + functions: + - !type:TraitReplaceComponent + components: + - type: OniDamageModifier + modifiers: + coefficients: + Blunt: 1.25 + Slash: 1.25 + Piercing: 1.25 + requirements: + - !type:CharacterSpeciesRequirement + species: + - Oni + - !type:CharacterTraitRequirement + inverted: true + traits: + - Swashbuckler + - Spearmaster + +- type: trait + id: ShadowkinBlackeye + category: Mental + points: 4 + functions: + - !type:TraitReplaceComponent + components: + - type: Shadowkin + blackeyeSpawn: true + requirements: + - !type:CharacterSpeciesRequirement + species: + - Shadowkin diff --git a/Resources/Prototypes/Voice/disease_emotes.yml b/Resources/Prototypes/Voice/disease_emotes.yml index 7845fd3e6d2..6b9914ad454 100644 --- a/Resources/Prototypes/Voice/disease_emotes.yml +++ b/Resources/Prototypes/Voice/disease_emotes.yml @@ -1,43 +1,65 @@ - type: emote id: Sneeze + name: chat-emote-name-sneeze category: Vocal - chatMessages: [ sneezes ] + chatMessages: [ "chat-emote-msg-sneeze" ] - type: emote id: Cough + name: chat-emote-name-cough + icon: Interface/Emotes/cough.png category: Vocal - chatMessages: [ coughs ] + chatMessages: [ "chat-emote-msg-cough" ] + whitelist: + components: + - Vocal + blacklist: + components: + - BorgChassischatMessages chatTriggers: - coughs - type: emote id: CatMeow + name: chat-emote-name-catmeow category: Vocal - chatMessages: [ meows ] + chatMessages: [ "chat-emote-msg-catmeow" ] - type: emote id: CatHisses + name: chat-emote-name-cathisses category: Vocal - chatMessages: [ hisses ] + chatMessages: [ "chat-emote-msg-cathisses" ] - type: emote id: MonkeyScreeches + name: chat-emote-name-monkeyscreeches category: Vocal - chatMessages: [ screeches ] + chatMessages: [ "chat-emote-msg-monkeyscreeches" ] - type: emote id: RobotBeep + name: chat-emote-name-robotbeep category: Vocal - chatMessages: [ beeps ] + chatMessages: [ "chat-emote-msg-beep" ] - type: emote id: Yawn + name: chat-emote-name-yawn + icon: Interface/Emotes/yawn.png category: Vocal - chatMessages: [ yawns ] + chatMessages: [ "chat-emote-msg-yawn" ] + whitelist: + components: + - Vocal + blacklist: + components: + - BorgChassischatMessages chatTriggers: - yawns - type: emote id: Snore + name: chat-emote-name-snore category: Vocal - chatMessages: [ snores ] + chatMessages: [ "chat-emote-msg-snore" ] diff --git a/Resources/Prototypes/Voice/speech_emote_sounds.yml b/Resources/Prototypes/Voice/speech_emote_sounds.yml index 2ec71110766..5c3f8ec6976 100644 --- a/Resources/Prototypes/Voice/speech_emote_sounds.yml +++ b/Resources/Prototypes/Voice/speech_emote_sounds.yml @@ -72,7 +72,7 @@ collection: Weh - type: emoteSounds - id: UnisexReptilian + id: MaleReptilian params: variation: 0.125 sounds: @@ -89,6 +89,24 @@ Weh: collection: Weh +- type: emoteSounds + id: FemaleReptilian + params: + variation: 0.125 + sounds: + Scream: + path: /Audio/Voice/Reptilian/reptilian_scream.ogg + Laugh: + path: /Audio/Animals/lizard_happy.ogg + Honk: + collection: BikeHorn + Whistle: + collection: Whistles + Crying: + collection: FemaleCry + Weh: + collection: Weh + - type: emoteSounds id: MaleSlime sounds: @@ -165,6 +183,90 @@ params: variation: 0.125 +- type: emoteSounds + id: MaleShadowkin + params: + variation: 0.125 + sounds: + Scream: + collection: SlimeMaleScreams + Laugh: + collection: MaleLaugh + Sneeze: + collection: MaleSneezes + Cough: + collection: MaleCoughs + Yawn: + collection: MaleYawn + Snore: + collection: Snores + Honk: + collection: BikeHorn + Sigh: + collection: MaleSigh + Crying: + collection: MaleCry + Whistle: + collection: Whistles + Weh: + collection: Weh + Hiss: + collection: FelinidHisses + Meow: + collection: FelinidMeows + Mew: + collection: FelinidMews + Growl: + collection: FelinidGrowls + Purr: + collection: FelinidPurrs + Mars: + collection: Mars + Wurble: + collection: Wurble + +- type: emoteSounds + id: FemaleShadowkin + params: + variation: 0.125 + sounds: + Scream: + collection: SlimeFemaleScreams + Laugh: + collection: MaleLaugh + Sneeze: + collection: FemaleSneezes + Cough: + collection: FemaleCoughs + Yawn: + collection: FemaleYawn + Snore: + collection: Snores + Honk: + collection: BikeHorn + Sigh: + collection: FemaleSigh + Crying: + collection: FemaleCry + Whistle: + collection: Whistles + Weh: + collection: Weh + Hiss: + collection: FelinidHisses + Meow: + collection: FelinidMeows + Mew: + collection: FelinidMews + Growl: + collection: FelinidGrowls + Purr: + collection: FelinidPurrs + Mars: + collection: Mars + Wurble: + collection: Wurble + - type: emoteSounds id: UnisexVox sounds: @@ -316,6 +418,26 @@ Ping: path: /Audio/Effects/Cargo/ping.ogg +- type: emoteSounds + id: UnisexSiliconSyndicate + params: + variation: 0.05 + sounds: + Laugh: + path: /Audio/Voice/Silicon/syndieborg_laugh.ogg + Beep: + path: /Audio/Machines/twobeep.ogg + Chime: + path: /Audio/Machines/chime.ogg + Buzz: + path: /Audio/Machines/buzz-sigh.ogg + Buzz-Two: + path: /Audio/Machines/buzz-two.ogg + Honk: + path: /Audio/Items/bikehorn.ogg + Ping: + path: /Audio/Effects/Cargo/ping.ogg + # body emotes - type: emoteSounds id: GeneralBodyEmotes diff --git a/Resources/Prototypes/Voice/speech_emotes.yml b/Resources/Prototypes/Voice/speech_emotes.yml index 130e5e3d80b..309794c1dcd 100644 --- a/Resources/Prototypes/Voice/speech_emotes.yml +++ b/Resources/Prototypes/Voice/speech_emotes.yml @@ -1,8 +1,16 @@ # vocal emotes - type: emote id: Scream + name: chat-emote-name-scream category: Vocal - chatMessages: [ screams ] + icon: Interface/Actions/scream.png + whitelist: + components: + - Vocal + blacklist: + components: + - BorgChassis + chatMessages: ["chat-emote-msg-scream"] chatTriggers: - screams - shrieks @@ -11,8 +19,16 @@ - type: emote id: Laugh + name: chat-emote-name-laugh category: Vocal - chatMessages: [ laughs ] + icon: Interface/Emotes/laugh.png + whitelist: + components: + - Vocal + blacklist: + components: + - BorgChassischatMessages + chatMessages: ["chat-emote-msg-laugh"] chatTriggers: - laughs - chuckles @@ -21,73 +37,156 @@ - type: emote id: Honk + name: chat-emote-name-honk category: Vocal - chatMessages: [ honks ] + icon: Interface/Emotes/honk.png + chatMessages: ["chat-emote-msg-honk"] + whitelist: + requireAll: true + components: + - Vocal + - BorgChassischatMessages chatTriggers: - honks - type: emote id: Sigh + name: chat-emote-name-sigh category: Vocal - chatMessages: [ sighs ] + icon: Interface/Emotes/sigh.png + whitelist: + components: + - Vocal + blacklist: + components: + - BorgChassischatMessages + chatMessages: ["chat-emote-msg-sigh"] chatTriggers: - sighs - type: emote id: Whistle + name: chat-emote-name-whistle category: Vocal - chatMessages: [ whistles ] + icon: Interface/Emotes/whistle.png + whitelist: + components: + - Vocal + blacklist: + components: + - BorgChassis + chatMessages: ["chat-emote-msg-whistle"] chatTriggers: - whistles - type: emote id: Crying + name: chat-emote-name-crying category: Vocal - chatMessages: [ cries ] + icon: Interface/Emotes/cry.png + whitelist: + components: + - Vocal + blacklist: + components: + - BorgChassis + chatMessages: ["chat-emote-msg-crying"] chatTriggers: - cries - sobs - type: emote id: Squish + name: chat-emote-name-squish category: Vocal - chatMessages: [ squishes ] + available: false + icon: Interface/Emotes/squish.png + whitelist: + components: + - Vocal + blacklist: + components: + - BorgChassis + chatMessages: ["chat-emote-msg-squish"] chatTriggers: - squishes - type: emote id: Chitter + name: chat-emote-name-chitter category: Vocal - chatMessages: [ chitters ] + available: false + icon: Interface/Emotes/chitter.png + whitelist: + components: + - Vocal + blacklist: + components: + - BorgChassis + chatMessages: ["chat-emote-msg-chitter"] chatTriggers: - chitters - type: emote id: Squeak + name: chat-emote-name-squeak category: Vocal - chatMessages: [ squeaks ] + available: false + icon: Interface/Emotes/squeak.png + whitelist: + components: + - Vocal + blacklist: + components: + - BorgChassis + chatMessages: ["chat-emote-msg-squeak"] chatTriggers: - squeaks - type: emote id: Click + name: chat-emote-name-click category: Vocal - chatMessages: [ clicks ] + available: false + icon: Interface/Emotes/click.png + whitelist: + components: + - Vocal + blacklist: + components: + - BorgChassis + chatMessages: ["chat-emote-msg-click"] chatTriggers: - clicks # hand emotes - type: emote id: Clap + name: chat-emote-name-clap category: Hands - chatMessages: [ claps ] + icon: Interface/Emotes/clap.png + whitelist: + components: + - Hands + blacklist: + components: + - BorgChassis + chatMessages: ["chat-emote-msg-clap"] chatTriggers: - claps - type: emote id: Snap + name: chat-emote-name-snap category: Hands - chatMessages: [ snaps ] # snaps <{THEIR($ent)}> fingers? + icon: Interface/Emotes/snap.png + whitelist: + components: + - Hands + blacklist: + components: + - BorgChassis + chatMessages: ["chat-emote-msg-snap"] # snaps <{THEIR($ent)}> fingers? chatTriggers: - snaps - snaps fingers @@ -99,52 +198,95 @@ - type: emote id: Salute + name: chat-emote-name-salute category: Hands - chatMessages: [ salutes ] + icon: Interface/Emotes/salute.png + whitelist: + components: + - Hands + blacklist: + components: + - BorgChassis + chatMessages: ["chat-emote-msg-salute"] chatTriggers: - salutes - type: emote id: DefaultDeathgasp - chatMessages: ["emote-deathgasp"] + name: chat-emote-name-deathgasp + icon: Interface/Emotes/deathgasp.png + whitelist: + components: + - MobState + chatMessages: ["chat-emote-msg-deathgasp"] chatTriggers: - deathgasp +- type: emote + id: MonkeyDeathgasp + name: chat-emote-name-deathgasp + icon: Interface/Emotes/deathgasp.png + chatMessages: ["chat-emote-msg-deathgasp-monkey"] + - type: emote id: SiliconDeathgasp + name: chat-emote-name-deathgasp chatMessages: ["chat-emote-msg-deathgasp-silicon"] chatTriggers: - sdeathgasp - type: emote id: Buzz + name: chat-emote-name-buzz category: Vocal - chatMessages: [ buzzes ] + icon: Interface/Emotes/buzz.png + whitelist: + requireAll: true + components: + - BorgChassis + - Vocal + chatMessages: ["chat-emote-msg-buzz"] chatTriggers: - buzzes - type: emote id: Weh + name: chat-emote-name-weh category: Vocal + icon: Interface/Emotes/weh.png chatMessages: [ wehs ] - type: emote id: Chirp + name: chat-emote-name-chirp category: Vocal - chatMessages: [ chirps ] + icon: Interface/Emotes/chirp.png + whitelist: + requireAll: true + components: + - Nymph + chatMessages: ["chat-emote-msg-chirp"] chatTriggers: - chirps # Machine Emotes - type: emote id: Beep + name: chat-emote-name-beep category: Vocal - chatMessages: [ beeps ] + icon: Interface/Emotes/beep.png + whitelist: + requireAll: true + components: + - BorgChassis + - Vocal + chatMessages: ["chat-emote-msg-beep"] chatTriggers: - beeps - type: emote id: Boop + name: chat-emote-name-boop category: Vocal chatMessages: [ boops ] chatTriggers: @@ -152,27 +294,65 @@ - type: emote id: Chime + name: chat-emote-name-chime category: Vocal - chatMessages: [ chimes ] + icon: Interface/Emotes/chime.png + whitelist: + requireAll: true + components: + - BorgChassis + - Vocal + chatMessages: ["chat-emote-msg-chime"] chatTriggers: - chimes - type: emote id: Buzz-Two + name: chat-emote-name-buzztwo category: Vocal - chatMessages: [ "buzzes twice" ] + icon: Interface/Emotes/buzztwo.png + whitelist: + requireAll: true + components: + - BorgChassis + - Vocal + chatMessages: ["chat-emote-msg-buzzestwo"] chatTriggers: - buzzes twice - type: emote id: Ping + name: chat-emote-name-ping category: Vocal - chatMessages: [ pings ] + icon: Interface/Emotes/ping.png + whitelist: + requireAll: true + components: + - BorgChassis + - Vocal + chatMessages: ["chat-emote-msg-ping"] chatTriggers: - pings - type: emote - id: Whirr # uncategorized as it is generic + id: Whirr + name: chat-emote-name-whirr chatMessages: [ whirrs ] chatTriggers: - whirrs + +- type: emote + id: Mars + name: chat-emote-name-mars + category: Vocal + chatMessages: [ mars ] + chatTriggers: + - mars + +- type: emote + id: Wurble + name: chat-emote-name-wurble + category: Vocal + chatMessages: [ wurble ] + chatTriggers: + - wurble diff --git a/Resources/Prototypes/Voice/speech_sounds.yml b/Resources/Prototypes/Voice/speech_sounds.yml index 2e7e7bf989a..a490c734d3d 100644 --- a/Resources/Prototypes/Voice/speech_sounds.yml +++ b/Resources/Prototypes/Voice/speech_sounds.yml @@ -52,6 +52,24 @@ exclaimSound: path: /Audio/Machines/vending_jingle.ogg +- type: speechSounds + id: Borg + saySound: + path: /Audio/Voice/Talk/Silicon/borg.ogg + askSound: + path: /Audio/Voice/Talk/Silicon/borg_ask.ogg + exclaimSound: + path: /Audio/Voice/Talk/Silicon/borg_exclaim.ogg + +- type: speechSounds + id: SyndieBorg + saySound: + path: /Audio/Voice/Talk/Silicon/syndieborg.ogg + askSound: + path: /Audio/Voice/Talk/Silicon/syndieborg_ask.ogg + exclaimSound: + path: /Audio/Voice/Talk/Silicon/syndieborg_exclaim.ogg + - type: speechSounds id: Pai saySound: diff --git a/Resources/Prototypes/Voice/speech_verbs.yml b/Resources/Prototypes/Voice/speech_verbs.yml index 0da9ab653fb..3f0a4c10fce 100644 --- a/Resources/Prototypes/Voice/speech_verbs.yml +++ b/Resources/Prototypes/Voice/speech_verbs.yml @@ -94,6 +94,15 @@ - chat-speech-verb-vox-2 - chat-speech-verb-vox-3 +- type: speechVerb + id: Oni + name: chat-speech-verb-name-oni + speechVerbStrings: + - chat-speech-verb-oni-1 + - chat-speech-verb-oni-2 + - chat-speech-verb-oni-3 + - chat-speech-verb-oni-4 + - type: speechVerb id: Plant name: chat-speech-verb-name-plant diff --git a/Resources/Prototypes/Voice/tail_emotes.yml b/Resources/Prototypes/Voice/tail_emotes.yml index be6064b652a..965b7da8d9f 100644 --- a/Resources/Prototypes/Voice/tail_emotes.yml +++ b/Resources/Prototypes/Voice/tail_emotes.yml @@ -1,6 +1,7 @@ - type: emote id: WagTail - chatMessages: [wags tail] + name: chat-emote-name-tailwag + chatMessages: [wags their tail] chatTriggers: - wags tail - wags his tail diff --git a/Resources/Prototypes/XenoArch/Effects/normal_effects.yml b/Resources/Prototypes/XenoArch/Effects/normal_effects.yml index b9564c0366b..a343ebd77b4 100644 --- a/Resources/Prototypes/XenoArch/Effects/normal_effects.yml +++ b/Resources/Prototypes/XenoArch/Effects/normal_effects.yml @@ -109,7 +109,7 @@ components: - type: PointLight radius: 8 - energy: 25 + energy: 10 color: "#daa3fd" - type: TriggerArtifact - type: FlashOnTrigger @@ -584,6 +584,24 @@ messages: - shuffle-artifact-popup +- type: artifactEffect + id: EffectT4PartsSpawn + targetDepth: 3 + effectHint: artifact-effect-hint-creation + components: + - type: SpawnArtifact + maxSpawns: 10 + spawns: + - id: BluespaceCapacitorStockPart + prob: 0.5 + maxAmount: 3 + - id: BluespaceManipulatorStockPart + prob: 0.5 + maxAmount: 3 + - id: BluespaceMatterBinStockPart + prob: 0.5 + maxAmount: 3 + - type: artifactEffect id: EffectFoamDangerous targetDepth: 3 diff --git a/Resources/Prototypes/XenoArch/Effects/utility_effects.yml b/Resources/Prototypes/XenoArch/Effects/utility_effects.yml index 911c1c2e88e..84df09af33d 100644 --- a/Resources/Prototypes/XenoArch/Effects/utility_effects.yml +++ b/Resources/Prototypes/XenoArch/Effects/utility_effects.yml @@ -214,8 +214,8 @@ permanentComponents: - type: UserInterface interfaces: - - key: enum.SignalLinkerUiKey.Key - type: SignalPortSelectorBoundUserInterface + enum.SignalLinkerUiKey.Key: + type: SignalPortSelectorBoundUserInterface - type: ToolTileCompatible - type: Tool qualities: diff --git a/Resources/Prototypes/ai_factions.yml b/Resources/Prototypes/ai_factions.yml index 02a2ac168d3..cdbbf868662 100644 --- a/Resources/Prototypes/ai_factions.yml +++ b/Resources/Prototypes/ai_factions.yml @@ -35,6 +35,8 @@ - type: npcFaction id: SimpleHostile + friendly: + - AnimalFriend hostile: - NanoTrasen - Syndicate @@ -86,6 +88,8 @@ - type: npcFaction id: Pibble + friendly: + - AnimalFriend hostile: - Cat - Birb @@ -99,3 +103,6 @@ - type: npcFaction id: Birb + +- type: npcFaction + id: AnimalFriend diff --git a/Resources/Prototypes/floor_trap.yml b/Resources/Prototypes/floor_trap.yml new file mode 100644 index 00000000000..217dd9fca2d --- /dev/null +++ b/Resources/Prototypes/floor_trap.yml @@ -0,0 +1,116 @@ +- type: entity + id: CollideFloorTrap + abstract: true + placement: + mode: SnapgridCenter + components: + - type: Sprite + sprite: Tiles/Misc/floortrap.rsi + state: floortrap + - type: Fixtures + fixtures: + floortrap: + shape: + !type:PhysShapeAabb + bounds: "-0.4,-0.4,0.4,0.4" + hard: false + mask: + - ItemMask + layer: + - SlipLayer + - type: Physics + - type: Tag + tags: + - HideContextMenu + +- type: entity + parent: CollideFloorTrap + id: CollideFloorTrapSpawn + name: floor trap spawn + abstract: true + components: + - type: Sprite + sprite: Tiles/Misc/floortrap.rsi + state: floortrapspawn + +- type: entity + parent: CollideFloorTrap + id: FloorTrapExplosion + name: explosion floor trap + components: + - type: TriggerOnCollide + fixtureID: floortrap + - type: ExplodeOnTrigger + - type: Explosive + explosionType: Default + totalIntensity: 20.0 + intensitySlope: 5 + maxIntensity: 4 + - type: DeleteOnTrigger + +- type: entity + parent: CollideFloorTrap + id: FloorTrapEMP + name: EMP floor trap + components: + - type: TriggerOnCollide + fixtureID: floortrap + - type: EmpOnTrigger + range: 2 + energyConsumption: 5000 + - type: DeleteOnTrigger + +- type: entity + parent: CollideFloorTrapSpawn + id: SpawnFloorTrapCarp + suffix: Carp + components: + - type: TriggerOnCollide + fixtureID: floortrap + - type: SpawnOnTrigger + proto: MobCarp + - type: DeleteOnTrigger + +- type: entity + parent: CollideFloorTrapSpawn + id: SpawnFloorTrapBear + suffix: Bear + components: + - type: TriggerOnCollide + fixtureID: floortrap + - type: SpawnOnTrigger + proto: MobBearSpace + - type: DeleteOnTrigger + +- type: entity + parent: CollideFloorTrapSpawn + id: SpawnFloorTrapKangaroo + suffix: Kangaroo + components: + - type: TriggerOnCollide + fixtureID: floortrap + - type: SpawnOnTrigger + proto: MobKangarooSpace + - type: DeleteOnTrigger + +- type: entity + parent: CollideFloorTrapSpawn + id: SpawnFloorTrapXenoDrone + suffix: Xeno. Drone + components: + - type: TriggerOnCollide + fixtureID: floortrap + - type: SpawnOnTrigger + proto: MobXenoDrone + - type: DeleteOnTrigger + +- type: entity + parent: CollideFloorTrapSpawn + id: SpawnFloorTrapXenoBurrower + suffix: Xeno. Burrower + components: + - type: TriggerOnCollide + fixtureID: floortrap + - type: SpawnOnTrigger + proto: MobXeno + - type: DeleteOnTrigger diff --git a/Resources/Prototypes/fonts.yml b/Resources/Prototypes/fonts.yml index 92c2947258c..c61a5fb8041 100644 --- a/Resources/Prototypes/fonts.yml +++ b/Resources/Prototypes/fonts.yml @@ -61,3 +61,11 @@ - type: font id: Noganas path: /Fonts/Noganas.ttf + +- type: font + id: Lymphatic + path: /Fonts/Lymphatic.ttf + +- type: font + id: Cambria + path: /Fonts/Cambria.ttf diff --git a/Resources/Prototypes/name_identifier_groups.yml b/Resources/Prototypes/name_identifier_groups.yml index 82c2f3bce9a..4823e31f55d 100644 --- a/Resources/Prototypes/name_identifier_groups.yml +++ b/Resources/Prototypes/name_identifier_groups.yml @@ -37,3 +37,9 @@ id: Bounty minValue: 0 maxValue: 999 + +- type: nameIdentifierGroup + id: CargoTelepads + prefix: TELE + minValue: 0 + maxValue: 999 diff --git a/Resources/Prototypes/ore.yml b/Resources/Prototypes/ore.yml index b01696ad376..29a86b293c0 100644 --- a/Resources/Prototypes/ore.yml +++ b/Resources/Prototypes/ore.yml @@ -84,6 +84,18 @@ minOreYield: 2 maxOreYield: 4 +- type: ore + id: OreBluespace + oreEntity: BluespaceOre1 + minOreYield: 1 + maxOreYield: 1 + +- type: ore + id: OreNormality + oreEntity: NormalityOre1 + minOreYield: 1 + maxOreYield: 1 + # - type: weightedRandomOre # id: RandomOreDistributionStandard # weights: diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml index d75591b39a0..315a4de6bda 100644 --- a/Resources/Prototypes/tags.yml +++ b/Resources/Prototypes/tags.yml @@ -25,6 +25,9 @@ - type: Tag id: Arrow +- type: Tag + id: Ash + - type: Tag id: ATVKeys @@ -259,6 +262,9 @@ - type: Tag id: CableCoil +- type: Tag + id: CaneBlade + - type: Tag id: CapacitorStockPart @@ -352,6 +358,9 @@ - type: Tag id: CartridgeRocket +- type: Tag + id: CaveFactory + # Allows you to walk over tile entities such as lava without steptrigger - type: Tag id: Catwalk @@ -401,11 +410,14 @@ - type: Tag id: ClownSuit +- type: Tag + id: CluwneHappyHonk + - type: Tag id: CluwneHorn - type: Tag - id: Coldsauce + id: CottonBoll - type: Tag id: CoordinatesDisk @@ -803,6 +815,12 @@ - type: Tag id: MacroBomb +- type: Tag + id: Mail + +- type: Tag + id: MailCapsule + - type: Tag id: MimeBelt @@ -880,6 +898,9 @@ - type: Tag id: Meat +- type: Tag + id: Medal + - type: Tag id: Medkit @@ -919,6 +940,12 @@ - type: Tag id: Multitool +- type: Tag + id: Mustard + +- type: Tag + id: MysteryFigureBox + - type: Tag id: NoBlockAnchoring @@ -1115,15 +1142,15 @@ - type: Tag id: Shiv -- type: Tag - id: ShoesRequiredStepTriggerImmune - - type: Tag id: Shovel - type: Tag id: Sidearm +- type: Tag + id: SignalTrigger + - type: Tag id: SkeletonMotorcycleKeys @@ -1139,9 +1166,6 @@ - type: Tag id: Smokable -- type: Tag - id: SnapPop - - type: Tag id: SnowyLabs @@ -1250,6 +1274,9 @@ - type: Tag id: TrashBag +- type: Tag + id: Truncheon + - type: Tag id: Unimplantable @@ -1289,6 +1316,9 @@ - type: Tag id: WeaponShotgunKammerer +- type: Tag + id: WeldingMask + - type: Tag id: WetFloorSign @@ -1298,6 +1328,9 @@ - type: Tag id: WhitelistChameleon +- type: Tag + id: WhoopieCushion + - type: Tag id: Window @@ -1330,5 +1363,3 @@ - type: Tag id: WriteIgnoreStamps - -# PUT YOUR TAGS IN ALPHABETICAL ORDER diff --git a/Resources/Prototypes/themes.yml b/Resources/Prototypes/themes.yml index 0faeca1fb9d..7f6865370ff 100644 --- a/Resources/Prototypes/themes.yml +++ b/Resources/Prototypes/themes.yml @@ -12,6 +12,8 @@ concerningOrangeFore: "#A5762F" dangerousRedFore: "#BB3232" disabledFore: "#5A5A5A" + _itemstatus_content_margin_right: "#06060404" + _itemstatus_content_margin_left: "#04060604" - type: uiTheme id: SS14PlasmafireTheme path: /Textures/Interface/Plasmafire/ @@ -26,6 +28,8 @@ concerningOrangeFore: "#FFF5EE" dangerousRedFore: "#FFF5EE" disabledFore: "#FFF5EE" + _itemstatus_content_margin_right: "#06060404" + _itemstatus_content_margin_left: "#04060604" - type: uiTheme id: SS14SlimecoreTheme path: /Textures/Interface/Slimecore/ @@ -40,6 +44,8 @@ concerningOrangeFore: "#FFF5EE" dangerousRedFore: "#FFF5EE" disabledFore: "#FFF5EE" + _itemstatus_content_margin_right: "#06060404" + _itemstatus_content_margin_left: "#04060604" - type: uiTheme id: SS14ClockworkTheme path: /Textures/Interface/Clockwork/ @@ -54,6 +60,8 @@ concerningOrangeFore: "#FFF5EE" dangerousRedFore: "#FFF5EE" disabledFore: "#FFF5EE" + _itemstatus_content_margin_right: "#06060404" + _itemstatus_content_margin_left: "#04060604" - type: uiTheme id: SS14RetroTheme path: /Textures/Interface/Retro/ @@ -68,6 +76,8 @@ concerningOrangeFore: "#FFF5EE" dangerousRedFore: "#FFF5EE" disabledFore: "#FFF5EE" + _itemstatus_content_margin_right: "#06060404" + _itemstatus_content_margin_left: "#04060604" - type: uiTheme id: SS14MinimalistTheme path: /Textures/Interface/Minimalist/ @@ -82,6 +92,8 @@ concerningOrangeFore: "#A5762F" dangerousRedFore: "#BB3232" disabledFore: "#5A5A5A" + _itemstatus_content_margin_right: "#06060604" + _itemstatus_content_margin_left: "#06060604" - type: uiTheme id: SS14AshenTheme path: /Textures/Interface/Ashen/ @@ -96,6 +108,9 @@ concerningOrangeFore: "#FFF5EE" dangerousRedFore: "#FFF5EE" disabledFore: "#FFF5EE" + _itemstatus_content_margin_right: "#06060604" + _itemstatus_content_margin_left: "#06060604" + - type: uiTheme id: SS14Fallout2Theme path: /Textures/Interface/Fallout2/ @@ -110,3 +125,5 @@ concerningOrangeFore: "#FFF5EE" dangerousRedFore: "#FFF5EE" disabledFore: "#FFF5EE" + _itemstatus_content_margin_right: "#06060604" + _itemstatus_content_margin_left: "#06060604" diff --git a/Resources/Prototypes/tool_qualities.yml b/Resources/Prototypes/tool_qualities.yml index ff55d9fcf14..4508ea94b71 100644 --- a/Resources/Prototypes/tool_qualities.yml +++ b/Resources/Prototypes/tool_qualities.yml @@ -67,3 +67,10 @@ toolName: tool-quality-rolling-tool-name spawn: RollingPin icon: { sprite: Objects/Tools/rolling_pin.rsi, state: icon } + +- type: tool + id: Axing + name: tool-quality-axing-name + toolName: tool-quality-axing-tool-name + spawn: FireAxe + icon: { sprite: Objects/Weapons/Melee/fireaxe.rsi, state: icon } diff --git a/Resources/ServerInfo/Guidebook/Antagonist/Antagonists.xml b/Resources/ServerInfo/Guidebook/Antagonist/Antagonists.xml index a0e434dc772..927a56a5054 100644 --- a/Resources/ServerInfo/Guidebook/Antagonist/Antagonists.xml +++ b/Resources/ServerInfo/Guidebook/Antagonist/Antagonists.xml @@ -8,5 +8,6 @@ Antagonists can take many forms, like: - Nuclear operatives, with the goal of infiltrating and destroying the station. - Traitors infiltrating the crew who can assassinate targets and steal high value items. + - Space Ninjas, masters of espionage and sabotage, who are equipped with special gear. - Several non-humanoid creatures, who usually just try to bring down as many crewmembers as they can. diff --git a/Resources/ServerInfo/Guidebook/Antagonist/Revolutionaries.xml b/Resources/ServerInfo/Guidebook/Antagonist/Revolutionaries.xml index 8ee9ec090eb..e69220fc2a0 100644 --- a/Resources/ServerInfo/Guidebook/Antagonist/Revolutionaries.xml +++ b/Resources/ServerInfo/Guidebook/Antagonist/Revolutionaries.xml @@ -10,7 +10,7 @@ - [color=#5e9cff]Head Revolutionaries[/color] are chosen at the start of the shift and are tasked with taking over the station by killing or exiling all of the Command staff. Head Revolutionaries will be given a [color=#a4885c]Flash[/color] and a pair of [color=#a4885c]Sunglasses[/color] to aid them. + [color=#5e9cff]Head Revolutionaries[/color] are chosen at the start of the shift and are tasked with taking over the station by killing, exiling or cuffing all of the Command staff. Head Revolutionaries will be given a [color=#a4885c]Flash[/color] and a pair of [color=#a4885c]Sunglasses[/color] to aid them. ## Conversion @@ -41,7 +41,7 @@ ## Objectives - You must eliminate or exile all of the following Command staff on station in no particular order. + You must eliminate, exile or arrest all of the following Command staff on station in no particular order. - Captain - Head of Personnel - Chief Engineer diff --git a/Resources/ServerInfo/Guidebook/Antagonist/SpaceNinja.xml b/Resources/ServerInfo/Guidebook/Antagonist/SpaceNinja.xml index 7fed84da73e..f088b9f27b1 100644 --- a/Resources/ServerInfo/Guidebook/Antagonist/SpaceNinja.xml +++ b/Resources/ServerInfo/Guidebook/Antagonist/SpaceNinja.xml @@ -1,74 +1,80 @@ -# Space Ninja + # Space Ninja -The Space Ninja is a ghost role randomly available mid-late game. If you pick it you will be given your gear, your objectives and the greeting. + The [color=#66FF00]Space Ninja[/color] is a ghost role randomly available mid-late game. If you pick it you will be given your gear, your objectives and the greeting. -You are a ninja, but in space. The Spider Clan has sent you to the station to wreak all kinds of havoc, from bolting the armory open and killing the entire station to engaging in a slipping war with the clown and fighting in rage cages. + You are a ninja, but in space. [color=#66FF00]The Spider Clan[/color] has sent you to the station to wreak all kinds of havoc, and you are equipped to keep it silent-but-deadly. -# Equipment + Whether you mercilessly pick off the station's crew one by one, or assassinate the clown over and over, your discipline has taught you that [color=#66FF00]your objectives must be at least attempted[/color]. For honor! -You start with a microbomb implant, so if you get KIA or seppuku you will leave behind a nice crater and all your precious equipment is kept out of enemy hands. + # Equipment -Your bag is full of tools for more subtle sabotage, along with a survival box if you need a snack. + You begin implanted with a [color=#a4885c]death acidifier[/color], so if you are KIA or decide to commit seppuku you will leave behind one final gift to the janitor and all your precious equipment is kept out of enemy hands. -You have a jetpack and pinpointer that will let you find the station. + Your bag is full of tools for more subtle sabotage, along with a survival box if you need a snack. - + You have a [color=#a4885c]jetpack[/color] and [color=#a4885c]pinpointer[/color] that will let you find the station. -## Ninja Suit + - + ## Ninja Suit -Your single most important item is your suit, without it none of your abilities would work. -Your suit requires power to function, its internal battery can be replaced by clicking on it **with a better one**. -You can see the current charge by examining the suit or in a sweet battery alert at the top right of your screen. + -If you run out of power and need to recharge your battery, just use your gloves to drain an APC, substation or a SMES. + Your single most important item is [color=#66FF00]your suit[/color], without it none of your abilities would work. + Your suit requires power to function. Its [color=#a4885c]internal battery[/color] can be replaced by clicking on it with another one, and [color=#a4885c]higher capacity batteries[/color] mean a [color=#a4885c]highly effective ninja[/color]. + You can see the current charge by examining the suit or in a sweet battery alert at the top right of your screen. -## Ninja Gloves + If you run out of power and need to recharge your battery, just use your gloves to drain an APC, substation or a SMES. - + ## Ninja Gloves -These bad boys are your bread and butter. + -They are insulated so you can nom on wires in peace. Obviously they block your fingerprints from being left on things you touch. + [color=#66FF00]These bad boys are your bread and butter.[/color] -You have an action to toggle gloves. When the gloves are turned on, they allow you to use special abilities, which are triggered by interacting with things with an empty hand and with combat mode disabled. + They are made from [color=#a4885c]insulated nanomachines[/color] to assist you in gracefully breaking and entering into your destination without leaving behind fingerprints. -Your glove abilities include: -- Emagging an unlimited number of doors. -- Draining power from transformers such as APCs, substations or SMESes. The higher the voltage, the more efficient the draining is. -- You can shock any mob, stunning and slightly damaging them. -- You can download technologies from a R&D server for one of your objectives. -- You can hack a communications console to call in a threat. + You have an action to toggle gloves. When the gloves are turned on, they allow you to use [color=#a4885c]special abilities[/color], which are triggered by interacting with things with an empty hand and with combat mode disabled. -## Energy Katana + Your glove abilities include: + - Emagging an unlimited number of doors. + - Draining power from transformers such as APCs, substations or SMESes. The higher the voltage, the more efficient the draining is. + - You can shock any mob, stunning and slightly damaging them. + - You can download technologies from a R&D server for one of your objectives. + - You can hack a communications console to call in a threat. - + ## Energy Katana -Deals a lot of damage and can be recalled at will, costing suit power proportional to the distance teleported. -While in hand you can teleport to anywhere that you can see, meaning most doors and windows, but not past solid walls. -This has a limited number of charges which regenerate slowly, so keep a charge or two spare incase you need a quick getaway. + -## Spider Clan Charge + You have sworn yourself to the [color=#66FF00]sword[/color] and refuse to use firearms. + Deals a lot of damage and can be recalled at will, costing suit power proportional to the distance teleported. + + While in hand you can [color=#a4885c]teleport[/color] to anywhere that you can see, meaning most doors and windows, but not past solid walls. + This has a limited number of charges which regenerate slowly, so keep a charge or two spare incase you need a quick getaway. - + ## Spider Clan Charge -A modified C-4 explosive, you start with this in your pocket. Creates a large explosion but must be armed in your target area. -A random area on the map is selected for you to blow up, which is one of your objectives. It can't be activated manually, simply plant it on a wall or something. -Can't be unstuck once planted. + -## Ninja Shoes + [color=#66FF00]A modified C-4 explosive[/color], you start with this in your pocket. Creates a large explosion but must be armed in your target area. + A random area on the map is selected for you to blow up, which is one of your [color=#a4885c]objectives[/color]. -Special noslips that make you go really fast. -Energy not required. + It can't be activated manually, simply plant it on a wall or a particularly ugly piece of furniture. + Can't be unstuck once planted. -# Objectives + ## Ninja Shoes -- Download X research nodes: Use your gloves on an R&D server with a number of unlocked technologies -- Doorjack X doors on the station: Use your gloves to emag a number of doors. -- Detonate the spider clan charge: Plant your spider clan charge at a random location and watch it go boom. -- Call in a threat: Use your gloves on a communications console. -- Survive: Don't die. + Special [color=#a4885c]noslips[/color] that keep you agile, swift and upright. + Energy not required. + + # Objectives + + - Download X research nodes: Use your gloves on an R&D server with a number of unlocked technologies + - Doorjack X doors on the station: Use your gloves to emag a number of doors. + - Detonate the spider clan charge: Plant your spider clan charge at a random location and watch it go boom. + - Call in a threat: Use your gloves on a communications console. + - Survive: Don't die. diff --git a/Resources/ServerInfo/Guidebook/DeltaV/Epistemics/GlimmerCreatures.xml b/Resources/ServerInfo/Guidebook/DeltaV/Epistemics/GlimmerCreatures.xml new file mode 100644 index 00000000000..3d2f07a2fe3 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/DeltaV/Epistemics/GlimmerCreatures.xml @@ -0,0 +1,87 @@ + +# Glimmer Creatures +As glimmer rises higher and higher, there can be occasional disturbances in the [color=#a4885c]noösphere[/color]. +When new psionic signatures are detected Central Command will make an announcement to the station. +Sometimes these signatures can be the appearance of glimmer creatures! + +Glimmer creatures can appear in numbers as low as 1, or multiple depending on how high glimmer is and how many psionics there are. + +These are the entities currently known to NanoTrasen. +Research is ongoing, more are yet to be discovered. + +# Glimmer Mite + + + +The glimmer mite is a small insect-like being that naturally provokes the noösphere. + +Minimum glimmer rating: Low + +## Assessment +As long as it is physically intact it will slowly raise glimmer. + +They show no signs of aggression and are physically harmless. + +## Procedure +Kill them as soon as they're spotted, they affect the noösphere and the brooding sound drives crew insane! + +## Analysis +You can get liquid [color=#a4885c]Ectoplasm[/color] from blending its body, so they can be a decent source of [color=#a4885c]Normality Crystals[/color]. + +In an emergency the body can be beaten to a pulp which will make it cease raising glimmer, at the cost of not yielding ectoplasm. + +Overall, a mild help to stopping glimmer, if you can find them. + +# Glimmer Wisp + + + +These wisps are physical manifestations of glimmer that are ghostly in appearance. + +Minimum glimmer rating: High + +## Assessment + +They don't directly affect the noösphere themselves, the main threat is that they [color=#a4885c]hunt down[/color] any psionics! + +Once a psionic is critically injured, they will begin to drain the life out of the body to [color=#a4885c]heal all injuries[/color]. + +## Procedure +Most physical attacks pass through them unnoticed, but holy weapons like the Chaplain's [color=#a4885c]Bible[/color] will weaken it. + +Once attacked they will retaliate for some time, so be prepared for a fight! + +They can also be dispelled by any gifted psionic. + +## Analysis +If you manage to kill a wisp, it will leave behind a large amount of ectoplasm which can easily make a drain or two. + +Extremely useful to a trained Epistemics team, but will require coordination to take it down. + +# Revenant + + + +A tortured soul taking revenge on those who wronged them, brought to this plane by the noösphere. + +Minimum glimmer rating: Dangerous + +## Assessment + +They have no effect on the noösphere but are a serious threat to the station, feeding on the souls of dead crew. + +Unlike wisps, revenants cannot be attacked in any way by default. + +Once a revenant uses their abilities, they can be attacked by any means for a short time. + +## Procedure +Holy damage from a bible or anti-psionic knife is especially effective at taking down wisps. + +Assistance from the Security department is usually recommended. + +Spare no time in putting down a revenant. + +## Analysis +Mostly annoying to the crew, limited exploitation due to low amount of ectoplasm when killed. + + diff --git a/Resources/ServerInfo/Guidebook/Engineering/AME.xml b/Resources/ServerInfo/Guidebook/Engineering/AME.xml index ae0217c4b0c..0a969072033 100644 --- a/Resources/ServerInfo/Guidebook/Engineering/AME.xml +++ b/Resources/ServerInfo/Guidebook/Engineering/AME.xml @@ -1,26 +1,25 @@ -# Antimatter Engine (AME) + # Antimatter Engine (AME) -The AME is one of the simplest engines available. You put together the multi-tile structure, stick some fuel into it, and you're all set. This doesn't mean it isn't potentially dangerous with overheating though. + The AME is one of the simplest engines available. You put together the multi-tile structure, stick some fuel into it, and you're all set. This doesn't mean it is perfectly safe though; you may need to deal with the AME overheating. -## Construction -Required parts: - - - - - + ## Construction + Required parts: + + + + + -To assemble an AME, start by wrenching down the controller on the far end of a HV wire. On most stations, there's catwalks to assist with this. From there, start putting down a 3x3 or larger square of AME parts in preparation for construction, making sure to maximize the number of "center" pieces that are surrounded on all 8 sides. + To assemble an AME, start by wrenching down the controller on the near end of a HV wire. On most stations, there's catwalks to assist with this. From there, start putting down a 3x3 or larger square of AME parts in preparation for construction, making sure to maximize the number of "center" pieces that are surrounded on all 8 sides. -Once this is done, you can use a multitool to convert each AME part into shielding, which should form a finished AME configuration. From there, insert a fuel jar, set the fuel rate to [color=#a4885c]twice the core count or less[/color], and turn on injection. + Once this is done, you can use a multitool to convert each AME part into shielding, which should form a finished AME configuration. From there, insert a fuel jar, set the fuel rate to [color=#a4885c]twice the core count or less[/color], and turn on injection. Any more than this ratio will eventually result in the engine [color=#ff0000]overheating and[/color], shortly afterwards, [color=#ff0000]exploding[/color]. -## Fuel Economy -The closer you are to the perfect ratio of [color=#a4885c]1:2[/color] (1 AME core to 2 fuel rate) the more efficient you'll be. You're cutting fuel efficiency to [color=#a4885c]50% and less[/color] if you're using more cores, but less fuel injection rate. -For an example [color=#76db91]3 core and 6 fuel rate[/color] will generate [color=#76db91]240kW[/color], while [color=#f0684d]8 core 8 fuel rate[/color] will generate [color=#f0684d]160kW[/color]. Generating 80kW less while spending 2 more fuel each injection. + ## Fuel Economy + The closer you are to the perfect ratio of [color=#a4885c]1:2[/color] AME cores to fuel injection rate, the more efficient you'll be. You're cutting fuel efficiency to [color=#a4885c]50% and less[/color] if you're using more cores, but a lower fuel injection rate. + For an example, [color=#76db91]3 cores and 6 fuel injected[/color] will generate [color=#76db91]240kW[/color], while [color=#f0684d]8 cores and 8 fuel injected[/color] will generate [color=#f0684d]160kW[/color]; you'd be generating 80kW less while spending 2 more fuel per injection. -## Upgrading the AME - -You can generally only upgrade the AME by getting more cores, which can be done by ordering more AME packages from [color=#a4885c]logistics[/color]. + ## Upgrading the AME + You can generally only upgrade the AME by installing more cores, which can be done by ordering more AME flatpacks from [color=#a4885c]Logistics[/color]. diff --git a/Resources/ServerInfo/Guidebook/Engineering/AccessConfigurator.xml b/Resources/ServerInfo/Guidebook/Engineering/AccessConfigurator.xml index e54f45345d6..490cbf09c35 100644 --- a/Resources/ServerInfo/Guidebook/Engineering/AccessConfigurator.xml +++ b/Resources/ServerInfo/Guidebook/Engineering/AccessConfigurator.xml @@ -1,32 +1,34 @@ -# Access Configurator -The access configurator is a tool used to specify what type of personnel may use certain devices. + # Access Configurator + The access configurator is a tool used to specify what type of personnel may use certain devices. - - - + + + -Configurable devices can include airlocks, secure crates and lockers, as well as access restricted machines. + Configurable devices can include airlocks, secure crates and lockers, as well as access restricted machines. + Note: Airlocks can have their accesses configured by the [color=#a4885c]Network Configurator[/color] (or multitool), for convenience. -## Where to find access configurators -Each station is equipped with up to two access configurators. The first is in the possession of the Chief Engineer, while the second can be found with the Head of Personnel. + ## Where to find Access Configurators + Each station is equipped with up to two access configurators. The first is in the possession of the Chief Engineer, while the second can be found with the Head of Personnel. -## How to use the access configurator -To modify a device using the access configurator -- First, use the access configurator on the chosen device to link them together. This will automatically open the configurator UI. -- Next, insert an ID card into the access configurator. -- Set the access requirements of the connected device. What requirements can be added or removed will depend upon the access privileges of the inserted ID card. -- Any changes made will be applied immediately - simply eject the ID card from the access configurator and close the UI when you are done. + ## How to use the access configurator + To modify a device using the access configurator: + - First, use the access configurator on the chosen device to link them together. This will automatically open the configurator UI. + - Next, insert an ID card into the access configurator. + - Set the access requirements of the connected device. What requirements can be added or removed will depend upon the access privileges of the inserted ID card. + - Any changes made will be applied [color=#a4885c]immediately[/color] - simply eject the ID card from the access configurator and close the UI when you are done. -## Restrictions on changing access -As a safety precaution, the inserted ID must possess *all* of the access requirements that are currently active on the connected device in order to modify it. + ## Restrictions on changing access + As a safety precaution, the inserted ID must possess [bold]all[/bold] of the access requirements that are currently active on the connected device in order to modify it. -For example, a device which can be access by both 'Epistemics' and 'Medical' personnel can only by modified using an ID card that has access to both of these departments. The access configurator will warn the user if the inserted ID card does not have sufficient privileges to modify a device. + For example, a device which can be access by both 'Epistemics' and 'Medical' personnel can only by modified using an ID card that has access to [color=#a4885c]both[/color] of these departments. + The access configurator will warn the user if the inserted ID card does not have sufficient privileges to modify a device. -A device with no access requirements set, like a public access airlock, can be modified using any valid station ID card. + A device with no access requirements set, like a public access airlock, can be modified using any valid station ID card. -## Repairing damaged ID card readers -Syndicate agents may attempt to hack access restricted devices through the use of a Cryptographic Sequencer (EMAG). This nefarious tool will completely short out any ID card readers that are attached to the device. + ## Repairing damaged ID card readers + Syndicate agents may attempt to hack access restricted devices through the use of a [color=#a4885c]Cryptographic Sequencer (EMAG)[/color]. This nefarious tool will completely short out any ID card readers that are attached to the device. -Crew members will need to partially de/reconstruct affected devices, and then set appropriate access permissions afterwards using the access configurator, to re-establish access restrictions. + Engineers will need to partially de/reconstruct affected devices, and then set appropriate access permissions afterwards using the access configurator (or network configurator, for airlocks), to re-establish access restrictions. diff --git a/Resources/ServerInfo/Guidebook/Engineering/AirlockSecurity.xml b/Resources/ServerInfo/Guidebook/Engineering/AirlockSecurity.xml index 125833a0a18..8bfd3902cc2 100644 --- a/Resources/ServerInfo/Guidebook/Engineering/AirlockSecurity.xml +++ b/Resources/ServerInfo/Guidebook/Engineering/AirlockSecurity.xml @@ -1,76 +1,76 @@ -# Airlock Upgrades -It is not uncommon for plucky individuals to try and bypass an airlock by meddling with its internal wiring. + # Airlock Upgrades + It is not uncommon for plucky individuals to try and bypass an airlock by meddling with its internal wiring. -Fortunately, certain countermeasures can installed into airlocks to inconvenience any would be trespassers. + Fortunately, certain countermeasures can installed into airlocks to inconvenience any would-be trespassers. -## Medium security airlocks -The most basic form of intrusion deterrence is to install internal steel plating that will prevent access to internal wiring of the airlock. + ## Medium security airlocks + The most basic form of intrusion deterrence is to install a secured steel plating that will prevent access to internal wiring of the airlock. -To upgrade a basic airlock to a medium security airlock, you will require the following materials - - - - - - - - - - - + To upgrade a basic airlock to a medium security airlock, you will require the following materials: + + + + + + + + + + + -To upgrade the basic airlock, -- Use the screwdriver to open the airlock maintenance panel. -- Add the steel sheets to the airlock. -- Weld the steel sheets into place. -- Close the maintenance panel using the screwdriver. + To upgrade a basic airlock: + - Use the screwdriver to open the airlock maintenance panel. + - Add the steel sheets to the airlock. + - Weld the steel sheets into place. + - Close the maintenance panel using the screwdriver. -## High security airlocks -For airlocks leading to the more sensitive areas of the space station, the use of stronger deterrents are advised. High security airlocks have improved armor plating to protect its internal wiring, along with an electrified security grille. + ## High security airlocks + For airlocks leading to the more sensitive areas of the space station, the use of stronger deterrents are advised. High security airlocks have improved armor plating to protect its internal wiring, along with an electrified security grille. -To upgrade a basic airlock to a high security airlock, you will require the following materials - - - - - - - - - - - - - - + To upgrade a medium security airlock to a high security airlock, you will require the following materials: + + + + + + + + + + + + + + -To upgrade the basic airlock, -- Use the screwdriver to open the airlock maintenance panel. -- Add the plasteel sheets to the airlock. -- Weld the plasteel sheets into place. -- Add the metal rods to the airlock. -- Close the maintenance panel using the screwdriver. + To upgrade a medium security airlock: + - Use the screwdriver to open the airlock maintenance panel. + - Add the plasteel sheets to the airlock. + - Weld the plasteel sheets into place. + - Add the metal rods to the airlock. + - Close the maintenance panel using the screwdriver. -## Maximum security airlocks -You can optionally upgrade a high security airlock to a maximum security airlock. Maximum security airlocks possess an additional layer of plasteel plating on top of its other protections. + ## Maximum security airlocks + You can optionally upgrade a high security airlock to a maximum security airlock. Maximum security airlocks possess an additional layer of plasteel plating on top of its other protections. -To upgrade a high security airlock to a maximum security airlock, you will require the following materials - - - - - - - - - - - + To upgrade a high security airlock to a maximum security airlock, you will require the following materials: + + + + + + + + + + + -To upgrade the high security airlock, -- Use the screwdriver to open the airlock maintenance panel. -- Add the plasteel sheets to the airlock. -- Weld the plasteel sheets into place. -- Close the maintenance panel using the screwdriver. - \ No newline at end of file + To upgrade a high security airlock: + - Use the screwdriver to open the airlock maintenance panel. + - Add the plasteel sheets to the airlock. + - Weld the plasteel sheets into place. + - Close the maintenance panel using the screwdriver. + diff --git a/Resources/ServerInfo/Guidebook/Engineering/Atmospherics.xml b/Resources/ServerInfo/Guidebook/Engineering/Atmospherics.xml index 693e3a02098..48d0d9415e2 100644 --- a/Resources/ServerInfo/Guidebook/Engineering/Atmospherics.xml +++ b/Resources/ServerInfo/Guidebook/Engineering/Atmospherics.xml @@ -1,61 +1,67 @@ - -# Atmospherics - -Atmospherics setups are a necessity for your long-term comfort but are generally undocumented, resulting in them being a bit tricky to set up. The following attempts to cover the basics. - -## Standard Mix -Breathing pure O2 or pure N2 is generally bad for the health of your crew, and it is recommended to instead aim for a mix of [color=#a4885c]78% N2 and 22% O2 at 101.24kPa.[/color] It's recommended that your gas mixer setup be set to output at least 1000kPa for faster re-pressurization of rooms. - - - - - -Variations on this mix may be necessary for the long-term comfort of atypical crew, for example crew who require a plasma gas mix to survive. For atypical crew, it is recommended to try and give them their own personal space, isolated by either airlock or disposals section. Keep in mind both methods are leaky and you will need scrubbers on both sides of the lock to clean up any leaked gasses. - - - - -## Vents and Scrubbers -Vents and scrubbers are core atmospherics devices that fill and cleanse rooms, respectively. By default, they are configured for filling rooms to standard pressure (101.24kPa) and to remove all non-O2/N2 gasses from a room. They can be reconfigured from their default settings, allowing you to configure how they respond to various types of gasses or pressure levels. This can be done by interacting with an existing air alarm nearby, or installing and connecting them to a new one. - - - - - -During standard operation, if a vent detects that the outside environment is space, it will automatically cease operation until a minimum pressure is reached to avoid destruction of necessary gasses. This can be fixed by pressurizing the room up to that minimum pressure by refilling it with gas canister (potentially multiple, if the room is of significant size). - -Should you encounter a situation where scrubbers aren't cleaning a room fast enough, employ portable scrubbers by dragging them to the affected location and wrenching them down. They work much faster than typical scrubbers and can clean up a room quite quickly. Large spills may require you to employ multiple. - - - -# Gas mixes and Burn chambers -In the event you finish all the tasks at hand, you can make some extra power or money by creating new chemical gasses. - -##Tritium -Tritium is a clear, green gas that is highly flammable, radioactive, and combusts when in contact with oxygen making it very helpful when running the [color=#a4885c]TEG.[/color] -It can be made by burning 1% Plasma and 96% or more Oxygen in the Burn Chamber. You can extract this gas through scrubbers. - - - - - - - - -##Frezon -Frezon is a bluish-green gas that is very complex and very dangerous. To obtain frezon, you must mix Tritium, Oxygen, and Nitrogen in a 70K room to start the reaction, as well as prevent the Tritium from combusting with the oxygen. - - - - - - - - -It is critical to understand that a frezon leak can devastate the station, causing a wintery hell filled with itchy sweaters and cold burns. Frezon is very cold, and can freeze the station to death if even a few moles get out, so make sure that you lock your canisters or just move your Frezon straight into a storage room. - -## Reference Sheet -- Standard atmospheric mix is [color=#a4885c]78% N2 and 22% O2 at 101.24kPa.[/color] -- Gas obeys real math. You can use the equation PV = nRT (Pressure kPa * Volume L = Moles * R * Temperature K) to derive information you might need to know about a gas. R is approximately 8.31446 + + # Atmospherics + + Atmospherics setups are a necessity for your long-term comfort, but are generally underdocumented, resulting in them being a bit tricky to set up. The following attempts to cover the basics. + + ## Standard Mix + Breathing pure O2 or pure N2 is generally bad for the health of your crew, and it is recommended to instead aim for a mix of [color=#a4885c]78% N2 and 22% O2 at 101.24kPa.[/color] It's recommended that your gas mixer setup be set to output at least 300kPA for faster re-pressurization of rooms, without posing too much of an overpressurization risk, should traitors sabotage the distro. + + + + + + Variations on this mix may be necessary for the long-term comfort of atypical crew, (for example, Voxes, who are poisoned by Oxygen and breathe Nitrogen). For atypical crew (to be implemented), it is recommended to try and give them their own personal space, isolated by either an airlock or disposals section. Keep in mind that both methods are leaky and you will need scrubbers on both sides of the lock to clean up any leaked gasses. + + + + + ## Vents and Scrubbers + Vents and scrubbers are core atmospherics devices that fill and cleanse rooms, respectively. By default, they are configured for filling rooms to standard pressure (101.24kPa) and to remove all non-O2/N2 gasses from a room. They can be reconfigured from their default settings by linking them to an Air Alarm, allowing you to configure how they respond to various types of gasses or pressure levels. + + + + + + During standard operation, if a normal vent detects that the outside environment is space, it will automatically cease operation until a minimum pressure is reached to avoid destruction of useful gasses. This can be fixed by pressurizing the room up to that minimum pressure by refilling it with gas canister (potentially multiple, if the room is of significant size). + + Should you encounter a situation where scrubbers aren't cleaning a room fast enough (and the "Siphon" functionality still cannot keep up), employ portable scrubbers by dragging them to the affected location and wrenching them down. They work much faster than typical scrubbers and can clean up a room quite quickly. Large spills may require you to employ multiple. + + + + # Gas mixes and Burn chambers + In the event you finish all the tasks at hand, you can make some extra money by creating new chemical gasses. + + ##Tritium + Tritium is a clear, green gas that is highly flammable, radioactive, and combusts when in contact with oxygen, making it very helpful when running the [color=#a4885c]TEG[/color]. + It can be made by burning 1% Plasma and 96% or more Oxygen in the Burn Chamber (Ideal ratio is 3% Plasma to 97% Oxygen). You can extract this gas through scrubbers. + + + + + + + + + ##Frezon + Frezon is a bluish-green gas that is very complex and very dangerous. To obtain frezon, you must mix Tritium, Oxygen, and Nitrogen in a 70K room to start the reaction, and prevent the Tritium from combusting with the oxygen. + + + + + + + + + It is critical to understand that a frezon leak can devastate the station, causing a wintery hell filled with itchy sweaters and cold burns. Frezon is very cold, and can freeze the station to death if even a few moles get out, so make sure that you lock your canisters or just move your Frezon straight into a storage room. + + ## Reference Sheet + - Standard atmospheric mix is [color=#a4885c]78% N2 and 22% O2 at 101.24kPa.[/color] + - Gas obeys real math. You can use the equation: + + [color=cyan]PV = nRT[/color] + + + ([color=#a4885c]Pressure kPa * Volume L = Moles * R * Temperature K[/color]) + to derive information you might need to know about a gas. R is approximately 8.31446. diff --git a/Resources/ServerInfo/Guidebook/Engineering/Construction.xml b/Resources/ServerInfo/Guidebook/Engineering/Construction.xml index 832b831d8e4..15f2f155394 100644 --- a/Resources/ServerInfo/Guidebook/Engineering/Construction.xml +++ b/Resources/ServerInfo/Guidebook/Engineering/Construction.xml @@ -1,11 +1,11 @@ - -# Construction + + # Construction -By pressing [color=#a4885c]G[/color], one can open the construction menu, which allows you to craft and build a variety of objects. + By pressing [color=#a4885c][keybind="OpenCraftingMenu"][/color], one can open the construction menu, which allows you to craft and build a variety of objects. -When placing objects that "snap" to the grid, you can hold [color=#a4885c]shift[/color] to place an entire line at a time, and [color=#a4885c]ctrl[/color] to place an entire square at a time. + When placing objects that "snap" to the grid, you can hold [color=#a4885c]Shift[/color] to place an entire line at a time, and [color=#a4885c]Ctrl[/color] to place an entire grid at a time. -When crafting objects with a lot of ingredients, keep in mind you don't have to hold everything at once, you can simply place the ingredients on the floor or on a table near you and they'll be used up during crafting like normal. + When crafting objects with a lot of ingredients, keep in mind you don't have to hold everything at once; you can simply place the ingredients on the floor, in your backpack or on a table near you, and they'll be used up during crafting like normal. -When placing a "building ghost" somewhere in the world press [color=#a4885c]Middle Mouse Button[/color] to rotate the ghost clockwise. + When placing a "building ghost" somewhere in the world, press [color=#a4885c][keybind="EditorRotateObject"][/color] to rotate the ghost clockwise. If you are building a mirrorable component (think: Gas Mixers/Filters), you can press [color=#a4885c][keybind="EditorFlipObject"][/color] to flip the ghost. diff --git a/Resources/ServerInfo/Guidebook/Engineering/Engineering.xml b/Resources/ServerInfo/Guidebook/Engineering/Engineering.xml index 0f53ea30424..ab48ed1d827 100644 --- a/Resources/ServerInfo/Guidebook/Engineering/Engineering.xml +++ b/Resources/ServerInfo/Guidebook/Engineering/Engineering.xml @@ -1,22 +1,21 @@ -# Engineering + # Engineering -Engineering is a combination of construction work, repair work, maintaining a death machine that happens to produce power, and making sure the station contains breathable air. + Engineering is a combination of construction work, repair work, maintaining a death machine that happens to produce power, and making sure the station contains breathable air. -## Tools - - - - - - - - - - - -Your core toolset is a small variety of tools. If you're an engineer, then you should have a belt on your waist containing one of each, if not you can likely find them in maintenance and tool storage within assorted toolboxes and vending machines. - -Most tasks will have explainers for how to perform them on examination, for example if you're constructing a wall, it'll tell you the next step if you look at it a bit closer. + ## Tools + + + + + + + + + + + + Your core toolset is a small variety of tools. If you're an engineer, then you should have a belt on your waist containing one of each; if not, you can likely find them in maintenance shafts and in tool storage within assorted toolboxes and vending machines. + Most tasks will have explainers for how to perform them on examination; for example, if you're constructing a wall, it'll tell you the next step if you look at it a bit closer. diff --git a/Resources/ServerInfo/Guidebook/Engineering/Fires.xml b/Resources/ServerInfo/Guidebook/Engineering/Fires.xml index a1c54059b78..e2c83956cc6 100644 --- a/Resources/ServerInfo/Guidebook/Engineering/Fires.xml +++ b/Resources/ServerInfo/Guidebook/Engineering/Fires.xml @@ -1,15 +1,15 @@ - -# Fires & Space + + # Fires & Space -Fires and spacings are an inevitability due to the highly flammable plasma gas and endless vacuum of space present in and around the station, so it's important to know how to manage them. + Fires and spacings are an inevitability due to the highly flammable plasma gas and the endless vacuum of space present in and around the station, so it's important to know how to manage them. -## Spacing -Space is arguably the easier of the two to handle. -While it does render an area uninhabitable, it can be trivially solved by simply sealing the hole that resulted in the vacuum. After that, assuming distro vents and pipes have not been destroyed in some unfortunate accident, the room will slowly begin to repressurize. -Be aware, that active spacings will slowly siphon the air out of the station's air reserves. If you find it impossible to fix structural damage due to some other hazard - make sure to limit the airflow to that room. + ## Spacing + Space is arguably the easier of the two to handle. + While it does render an area uninhabitable, it can be trivially solved by simply sealing the hole that resulted in the vacuum. After that, assuming distro vents and pipes have not been destroyed in some unfortunate accident, the room will slowly begin to repressurize. + Be aware; active spacings will slowly siphon the air out of the station's air reserves. If you find it impossible to fix structural damage due to some other hazard, make sure to limit the airflow to that room. (Currently only half-valid due to the Gas Miners infinitely replenishing most of the useful gases) -## Fires -Fires can be dealt with through a multitude of ways, but some of the most effective methods include: - - Spacing the enflamed area if possible. This will destroy all of the gasses in the room, which may be a problem if you're already straining life support. - - Dumping a Frezon canister into the enflamed area. This will ice over the flames and halt any ongoing reaction, provided you use enough Frezon. Additionally does not result in destruction of material, so you can simply scrub the room afterwards. + ## Fires + Fires can be dealt with through a multitude of ways, but some of the most effective methods include: + - Spacing the enflamed area if possible. This will destroy all of the gasses in the room, which may be a problem if you're already straining life support. + - Dumping a Frezon canister into the enflamed area. This will ice over the flames and halt any ongoing reaction, provided you use enough Frezon. Additionally, this does not result in destruction of material, so you can simply scrub the room afterwards. diff --git a/Resources/ServerInfo/Guidebook/Engineering/NetworkConfigurator.xml b/Resources/ServerInfo/Guidebook/Engineering/NetworkConfigurator.xml index 445d182ab84..ab95dd2e29b 100644 --- a/Resources/ServerInfo/Guidebook/Engineering/NetworkConfigurator.xml +++ b/Resources/ServerInfo/Guidebook/Engineering/NetworkConfigurator.xml @@ -1,39 +1,40 @@ -# Network Configurator -The network configurator allows you to manipulate device lists and link devices together. - - - -The configurator has two modes: List and Link. You can press [color=gray]Alt+Z[/color] or [color=gray]Alt+Y[/color] to switch between them. + # Network Configurator + The network configurator allows you to manipulate device lists, link devices together and configure accesses for airlocks through door electronics. + + + + The configurator has two modes: List and Link. You can press [color=gray]Alt+Z[/color] or [color=gray]Alt+Y[/color] to switch between them. -## List Mode -In list mode you can click on network devices to save them on the configurator and then on a network device that has a device list like the [color=#a4885c]Air Alarm[/color]. + ## List Mode + In list mode you can click on network devices to save them on the configurator and then on a network device that has a device list like the [color=#a4885c]Air Alarm[/color]. -When clicking on a device like the Air Alarm, a UI will open displaying the list currently saved on the device and buttons to manipulate that list. + When clicking on a device like the Air Alarm, a UI will open displaying the list currently saved on the device and buttons to manipulate that list. -You can: -- Replace the current list with the one saved on the configurator -- Add the list on the configurator to the current one -- Clear the current list -- Copy the current list to the configurator -- Visualize the connections to the devices on the current list + You can: + - Replace the current list with the one saved on the configurator + - Add the list on the configurator to the current one + - Clear the current list + - Copy the current list to the configurator + - Visualize the connections to the devices on the current list -Pressing [color=gray]z[/color] or [color=gray]y[/color] opens the list saved on the configurator where you can remove saved devices. + Pressing [color=gray][keybind="ActivateItemInHand"][/color] opens the list saved on the configurator where you can remove saved devices. -## Link Mode -With link mode you can click on a device that is capable of device linking and click on any other device that is either -a sink or source. + ## Link Mode + With link mode, you can click on a device that is capable of device linking and then click on any other device that is either a sink or source. -For example, first clicking on a source like a [color=#a4885c]signal button[/color] and then on sink like a -[color=#a4885c]small light[/color] opens a UI that displays the source ports on the left side and the sink ports on the right. + For example, first clicking on a source, like a [color=#a4885c]signal button[/color], and then on sink, like a [color=#a4885c]small light[/color], opens a UI that displays the source ports on the left side and the sink ports on the right. -Now you can eiter click [color=gray]link defaults[/color] to link the default ports for a source + sink combination or press on a source and then a sink port to connect them. + Now, you can either click [color=gray]Link Defaults[/color] to link the default ports for a source + sink combination, or press on a source port and then a sink port to connect them. -An example of a default link for the aformentioned combinaton of devices would be: - - [color=cyan]Pressed 🠒 Toggle[/color] - -When you're done connecting the ports you want you can click on [color=gray]ok[/color] to close the UI. + An example of a default link for the aformentioned combinaton of devices would be: + + [color=cyan]Pressed 🠒 Toggle[/color] + + When you're done connecting the ports you want you can click on [color=gray]OK[/color] to close the UI. -You can quickly link multiple devices to their default port by first clicking on a device that can be linked and then using [color=gray]alt+left mouse button[/color] on the devices you want to link together. + You can quickly link multiple devices to their default port by first clicking on a device that can be linked and then using [color=gray]Alt+Left Mouse button[/color] on the devices you want to link together. + + ## Airlock Access + To configure an airlock's access, simply take the airlock's door electronics and interact with it using a network configurator (or multitool). Select the accesses you want, insert the door electronics into an airlock frame, and construct to finish! diff --git a/Resources/ServerInfo/Guidebook/Engineering/Networking.xml b/Resources/ServerInfo/Guidebook/Engineering/Networking.xml index 03576c789ac..90d1f0891b4 100644 --- a/Resources/ServerInfo/Guidebook/Engineering/Networking.xml +++ b/Resources/ServerInfo/Guidebook/Engineering/Networking.xml @@ -1,25 +1,24 @@ -# Networking -Some devices on the station need to communicate with each other, and they do this by utilizing device networking. -With networking machines and devices can send arbitrary data between each other. -There are multiple networks that get used, such as the wireless and wired network. -Each network device has a frequency it receives on. PDAs for example, use the frequency: [color=green]220.2[/color] + # Networking + Some devices on the station need to communicate with each other, and they do this by utilizing device networking. + With networking, machines and devices can send arbitrary data between each other. + There are multiple networks that get used, such as the wireless and wired network. + Each network device has a frequency it receives on. PDAs for example, use the frequency: [color=green]220.2[/color] -## Device Lists -Some devices need to know what other devices to communicate with specifically. - - - -Air alarms for example require you to tell it which vents, scrubbers, sensors, and firelocks to interact with. -You do that by using the Network Configurator. + Note: The following operations will require use of the Network Configurator to be performed: -## Linking -If devices basic or still more advanced but need finer control of how and what connects to each other they will generally use device linking. + ## Device Lists + Some devices need to know which other devices to communicate with specifically. - - + -With linking you can connect the outputs of a device like [color=gray]On[/color] or [color=gray]Off[/color] with the inputs of a device like the airlocks -[color=gray]Open[/color] or [color=gray]Close[/color] inputs. -The Network Configurator is also used for linking devices together. + Air alarms, for example, require you to tell it which vents, scrubbers, sensors, and firelocks to interact with. + + ## Linking + If a device, basic or advanced, needs finer controls of how and which devices it connects to, it will generally use device linking. + + + + + With linking, you can connect the outputs of a device, like [color=gray]On[/color] or [color=gray]Off[/color], with the inputs of a device, like the airlocks [color=gray]Open[/color] or [color=gray]Close[/color] inputs. diff --git a/Resources/ServerInfo/Guidebook/Engineering/PortableGenerator.xml b/Resources/ServerInfo/Guidebook/Engineering/PortableGenerator.xml index 2cf1fa44ea1..b946bf041cb 100644 --- a/Resources/ServerInfo/Guidebook/Engineering/PortableGenerator.xml +++ b/Resources/ServerInfo/Guidebook/Engineering/PortableGenerator.xml @@ -1,7 +1,7 @@ - + # Portable Generators - Need power? No engine running? The "P.A.C.M.A.N." line of portable generators has you covered. + Need power? No engines running? The "P.A.C.M.A.N." line of portable generators has you covered. @@ -16,10 +16,10 @@ - The J.R.P.A.C.M.A.N. can be found across the station in maintenance areas, and is ideal for crew to set up themselves whenever there are power issues. + The J.R.P.A.C.M.A.N. can be found across the station in maintenance shafts, and is ideal for crew to set up themselves whenever there are power issues. Setup is incredibly easy: wrench it down above an [color=green]LV[/color] power cable, give it some welding fuel, and start it up. - Welding fuel should be plentiful to find around the station. In a pinch, you can even transfer some from the big tanks with a soda can. Just remember to empty the soda can first, I don't think it likes soda as fuel. + Welding fuel should be plentiful to find around the station. In a pinch, you can even transfer some from the big tanks with a soda can or water bottle. Just remember to empty the soda can first, I don't think it likes soda as fuel. # The Big Ones @@ -33,10 +33,11 @@ - The (S.U.P.E.R.)P.A.C.M.A.N. is intended for usage by engineering for advanced power scenarios. Bootstrapping the engine, powering departments, and so on. + The (S.U.P.E.R.)P.A.C.M.A.N. is intended for usage by engineering for advanced power scenarios. Bootstrapping larger engines, powering departments, and so on. - The S.U.P.E.R.P.A.C.M.A.N. boasts larger power output and longer runtime at maximum output, but scales down to lower outputs less efficiently. + The S.U.P.E.R.P.A.C.M.A.N. boasts a larger power output and longer runtime at maximum output, but scales down to lower outputs less efficiently. - They connect directly to [color=yellow]MV[/color] or [color=orange]HV[/color] power cables, able to switch between them for flexibility. + They connect directly to [color=yellow]MV[/color] or [color=orange]HV[/color] power cables, and are able to switch between them for flexibility. + The S.U.P.E.R.P.A.C.M.A.N and P.A.C.M.A.N require uranium sheets and plasma sheets as fuel, respectively. diff --git a/Resources/ServerInfo/Guidebook/Engineering/Power.xml b/Resources/ServerInfo/Guidebook/Engineering/Power.xml index 62b38e397dd..7dd227ee9b9 100644 --- a/Resources/ServerInfo/Guidebook/Engineering/Power.xml +++ b/Resources/ServerInfo/Guidebook/Engineering/Power.xml @@ -1,53 +1,53 @@ -# Power - -SS14 has a fairly in-depth power system through which all devices on the station receive electricity. It's divided into three main powernets; HV, LV, and MV. - - - - - - -## Cabling -The three major cable types (HV, MV, and LV) can be used to form independent powernets. Examine them for a description of their uses. - - - - - - -## Power storage -Each power storage device presented functions as the transformer for its respective power level (HV, MV, and LV) and also provides a fairly sizable backup battery to help flatten out spikes and dips in power usage. - - - - - - -## Ramping -Contrary to what one might expect from a video game electrical simulation, power is not instantly provided upon request. Generators and batteries take time to ramp up to match the draw imposed on them, which leads to brownouts when there are large changes in current draw all at once, for example when batteries run out. - -## Installing power storage -Substations are the most self-explanatory. Simply install the machine on top of an MV and HV cable, it will draw power from the HV cable to provide to MV. - -Installing APCs is similarly simple, except APCs are exclusively wallmounted machinery and cannot be installed on the floor. Make sure it has both MV and LV connections. - -Installing a SMES requires you construct a cable terminal to use as the input. The SMES will draw power from the terminal and send power out from underneath. The terminal will ensure that the HV input and HV output do not connect. Avoid connecting a SMES to itself, this will result in a short circuit which can result in power flickering or outages depending on severity. - -## APC breaking -Currently the only power storage device that has a limit to its power network is APC. As soon as all connected devices and machinery demand more than [color=#a4885c]24kW[/color] it's breaker will pop and everything will turn off. - - - - -## Checking power grid -1. Use the [color=#a4885c]t-ray scanner[/color] in order to locate cables that are hidden under tiles. (skip this step if cables aren't hidden) -2. Pry open the tile that is blocking your access to the cable with a [color=#a4885c]crowbar[/color]. (skip this step if cables aren't hidden) -3. Equip your trusty [color=#a4885c]Multitool[/color] and click on any cable to see powergrid stats. - - - - - + # Power + + SS14 has a fairly in-depth power system through which all devices on the station receive electricity. It's divided into three main powernets; High Voltage, Medium Voltage, and Low Voltage. + + + + + + + ## Cabling + The three major cable types (HV, MV, and LV) can be used to form independent powernets. Examine them for a description of their uses. + + + + + + + ## Power storage + Each power storage device presented functions as the transformer for its respective power level (HV, MV, and LV), and also provides a fairly sizable backup battery to help flatten out spikes and dips in power usage. + + + + + + + ## Ramping + Contrary to what one might expect from a video game electrical simulation, power is not instantly provided upon request. Generators and batteries take time to ramp up to match the draw imposed on them, which leads to brownouts when there are large changes in current draw all at once; for example, when batteries run out. + + ## Installing power storage + Substations are the most self-explanatory. Simply install the machine on top of an MV and HV cable; it will draw power from the HV cable to provide to MV. + + Installing APCs is similarly simple, except APCs are exclusively wallmounted machinery and cannot be installed on the floor. Make sure it has both MV and LV connections. + + Installing a SMES requires you construct a cable terminal to use as the input. The SMES will draw power from the terminal and send power out from underneath. The terminal will ensure that the HV input and HV output do not connect. Avoid connecting a SMES to itself; this will result in a short circuit, which can result in power flickering or outages depending on severity. + + ## APC breaking + Currently the only power storage device that has a limit to its power to the network is the APC. As soon as all connected devices and machinery demand more than [color=#a4885c]24kW[/color] of power, its breaker will pop and everything will turn off. In the case that you are not an engineer, call an engineer (or cyborg) to re-enable it, after reducing the load back down to [color=#a4885c]below[/color] 24kW. + + + + + ## Checking the power grid + 1. Use the [color=#a4885c]t-ray scanner[/color] in order to locate cables that are hidden under tiles. (skip this step if cables aren't hidden) + 2. Pry open the tile that is blocking your access to the cable with a [color=#a4885c]crowbar[/color]. (skip this step if cables aren't hidden) + 3. Equip your trusty [color=#a4885c]Multitool[/color] and click on any cable to see the power-grid stats. + + + + + diff --git a/Resources/ServerInfo/Guidebook/Engineering/RTG.xml b/Resources/ServerInfo/Guidebook/Engineering/RTG.xml index 1d71ee9144b..6149b580494 100644 --- a/Resources/ServerInfo/Guidebook/Engineering/RTG.xml +++ b/Resources/ServerInfo/Guidebook/Engineering/RTG.xml @@ -1,17 +1,20 @@ -# Radioisotope Thermoelectric Generator (RTG) + # Radioisotope Thermoelectric Generator (RTG) - - - - + + + -Making power using a Radioisotope Thermoelectric Generator (RTG) is similar to making power using solar. -RTGs only provide 10 kW of power, but they provide it for free and for the entire round. -Basically, if you connect an RTG to your power grid, it'll give you free power. + Making power using a Radioisotope Thermoelectric Generator (RTG) is similar to making power using solars. + RTGs only provide [color=#a4885c]10kW[/color] of power, but they provide it for free and for the entire round. + Basically, if you connect an RTG to your power grid, it'll give you [color=#a4885c]free power[/color]. + However, they're only accessible through salvage finding one on an expedition. Should they bring some in, make sure to thank them! -Sometimes, RTGs are damaged. -Damaged RTGs behave just like regular ones, but they're radioactive. -That means they're more dangerous, but on the bright side, you can put radiation collectors next to them to turn that radiation into more power. - - \ No newline at end of file + + + + Sometimes, RTGs appear damaged. + Damaged RTGs behave just like regular ones, but they're [color=yellow]radioactive[/color]. + That means they're more dangerous, but on the bright side, you can put radiation collectors next to them to turn that radiation into more power. + This is usually more worthwhile, considering the power is still free, so long as you can find a safe spot to put the RTG(s) in. + diff --git a/Resources/ServerInfo/Guidebook/Engineering/Shuttlecraft.xml b/Resources/ServerInfo/Guidebook/Engineering/Shuttlecraft.xml index 7e743ddd685..21956d600cb 100644 --- a/Resources/ServerInfo/Guidebook/Engineering/Shuttlecraft.xml +++ b/Resources/ServerInfo/Guidebook/Engineering/Shuttlecraft.xml @@ -1,40 +1,39 @@ -# Shuttle-craft + # Shuttle-craft -Shuttle construction is simple and easy, albeit rather expensive and hard to pull off within an hour. It's a good activity if you have a significant amount of spare time on your hands and want a bit of a challenge. + Shuttle construction is simple and easy, albeit rather expensive and hard to pull off within an hour. It's a good activity if you have a significant amount of spare time on your hands and want a bit of a challenge. -## Getting started -Required parts: - - - - - - - - - - - - - + ## Getting started + Required parts: + + + + + + + + + + + + + -Optional parts: - - - - - - - - - - + Optional parts: + + + + + + + + + + -Head out into space with steel sheets and metal rods in hand, and once you're three or more meters away from the station, click near or under you with the rods in hand. This will place some lattice, which can then be turned into plating with the steel sheets. Expand your lattice platform by clicking just off the edge with rods in hand. + Head out into space with steel sheets and metal rods in hand, and once you're three or more tiles away from the station, click near or under you with the rods in hand. This will place some lattice, which can then be turned into plating with steel sheets or floor tiles. Expand your lattice platform by clicking just off the edge with some rods in hand. -From there, once you have the shape you want, bring out and install thrusters at the edges. They must be pointing outward into space to function and will not fire if there's a tile in the way of the nozzle. Install a gyroscope where convenient, and use your substation and generator to set up power. Construct a wall on top of an MV cable and then install an APC on that to power the devices onboard. - -Finally, install the shuttle computer wherever is convenient and ensure all your thrusters and gyroscopes are receiving power. If they are, congratulations, you should have a functional shuttle! Making it livable and good looking is left as an exercise to the reader. + From there, once you have the shape you want, bring out and install thrusters at the edges. They must be pointing outward into space to function and will not fire if there's a tile in the way of the nozzle. Install a gyroscope where convenient, and use your substation and generator to set up power. Construct a wall on top of an MV cable and then install an APC on that to power the devices onboard. + Finally, install the shuttle computer wherever is convenient and ensure all your thrusters and gyroscopes are receiving power (remember to wire the MV and LV networks!). If they are; congratulations, you should have a functional shuttle! Making it livable and good looking is left as an exercise to the reader. diff --git a/Resources/ServerInfo/Guidebook/Engineering/Singularity.xml b/Resources/ServerInfo/Guidebook/Engineering/Singularity.xml index 3553d43e6fc..3c0dd665e25 100644 --- a/Resources/ServerInfo/Guidebook/Engineering/Singularity.xml +++ b/Resources/ServerInfo/Guidebook/Engineering/Singularity.xml @@ -1,109 +1,141 @@ -# Gravitational Singularity Engine - -The Gravitational Singularity Engine can yield infinite power, with no fueling required. It can also destroy the whole station with equal ease. It uses a Particle Accelerator to fire high energy particles at a Singularity Generator to form a singularity. The singularity then pulses radiation which is absorbed by Radiation Collectors. - -## Setting it up - -The Gravitational Singularity Engine requires 4 subsystems to work properly: - -## Gravitational singularity generator - - - -The generator should be anchored at the center of the containment area since this is where the singularity will appear at. - -## Containment field generators and emitters - - - - - -The emitters connect to MV cables and fire lasers as long as they have power and are turned on. -Fire emitters at containment field generators to activate them. -If two containment field generators are active, in range and in the same cardinal axis, a containment field will appear. -The containment field will repell the singularity, keeping it from escaping, and yield a little bit of power every time anything bounces off of them. -Emitter lasers and containment field can cause damage, avoid touching them when active. - -## Radiation collectors - - - - -They connect to HV cables and generate power from nearby radiation sources when turned on. -Radiation collectors require a tank full of gaseous plasma in order to operate. -Continous radiation exposure will gradually consume the stored plasma, so replace depleted tanks with fresh ones to maintain a high power output. - -## Particle accelerator - - - - - - - - - - - - - - - - - - - - - -The Particle Accelerator (PA) is a multi-tile structure that launches accelerated particles from its emitters. Its emitters should always face the gravitational singularity generator. -Some stations already have an unfinished PA. To complete, first ensure there is MV cable beneath the PA power box, anchor all parts, then add LV cable to each part. - - - -Then use a screwdriver to screw back the panels. -Scan parts using the PA control computer to check if it's operational. If it shows up as incomplete, examine for what's missing. - - - - -## Turing on the Gravitational Singularity Engine - -[color=#a4885c]Do not[/color] turn the PA on unless all other subsystems are working properly. - -Turn power on using the PA control computer. Set strength to an appropiate level. Currently the only appropriate level is [color=#f0684d]1[/color], anything above that will ensure that singularity grows too strong to handle. -The higher the output stength is set on PA control computer, the bigger the singularity will be. - -The PA will now draw power from the power net and start firing particles at the Gravitational singularity generator. - - - - - - - -A singularity will soon appear at the position of the Gravitational singularity generator. - - - - -If no particle is hitting the singularity generator, the singularity will start to slowly decay until it disappear. - -## Safety -Singularity emits radiation around it, so always keep a distance. Consider getting radiation shielding gear beforehand. Seek medical attention if experiencing health issues. - - - - - - - - - - - -A singularity might move around, but the containment field will repel it. -If a singularity escapes its containment field, often referred to as a "singuloose," it will attract and then consume everything in its way. - -In such circumstances, there is little to be done other than running in the opposite direction. + # Singularity / Tesla Engine + + The Singularity Engine / Tesla Engine can yield [color=#a4885c]infinite power[/color], with no fueling required. It can also [color=red]destroy the whole station[/color] with equal ease. It uses a Particle Accelerator to fire high energy particles at a Singularity Generator to form a singularity or ball lightning. + The singularity then pulses radiation which is absorbed by Radiation Collectors, or the ball lightning then zaps nearby tesla coils and grounding rods to provide power. + + # Setting it up + + Both engines requires 4 subsystems to work properly; two are shared between both engines: + + ## Containment field generators and Emitters + + + + + + The emitters connect to MV cables and fire lasers as long as they have power and are turned on. + Fire the emitters at enabled containment field generators to activate them. + If two containment field generators are active, in range and are in the same cardinal axis, a containment field will appear. + The containment field will repel the singularity or tesla, keeping it from escaping, and yield a little bit of power every time anything bounces off of them. + + The emitter lasers and the containment fields can also cause damage and/or cause you to be sent flying into deep space; [color=#a4885c]avoid touching them[/color] when active. + It is recommended to [color=#a4885c]lock the emitters[/color] with [keybind="AltActivateItemInWorld"/], to prevent any break-in no-gooders from loosing the singularity or tesla by simply switching off the field. + + Teslas can have significantly smaller containment fields than singularity containment fields; adjusting field size is recommended, as the tesla becomes easier to keep watch on in a simply 3x3 field setup. + + ## Particle accelerator + + + + + + + + + + + + + + + + + + + + + + The Particle Accelerator (PA) is a multi-tile structure that launches accelerated particles from its emitters. Its emitters should always face the generator. + Some stations already have an unfinished PA. To complete it, first ensure there is a MV cable beneath the PA power box, anchor all the parts, and then add an LV cable to each part. + + + + Then use a screwdriver to screw back the panels. + [color=#a4885c]Scan parts[/color] using the PA control computer to check if it's operational (the PA will not function if you do not scan it!). If it shows up as incomplete, examine what's missing. + + + + + The other two subsystems are unique to each other: + + ## Gravitational singularity generator or Ball lightning generator + + + + + The generator should be anchored at the center of the containment area, since this is where the singularity/tesla should appear at. + + ## Radiation collectors or Tesla coils + + + + + The radition collectors connect to HV cables and generate power from nearby radiation sources when turned on. + Radiation collectors require a tank full of gaseous plasma in order to operate. + Continous radiation exposure will gradually convert the stored plasma into tritium, so replace depleted plasma tanks with fresh ones regularly to maintain a high power output. + + + + + + The tesla coils connect to HV cables and provide a stream of power after being zapped by the ball lightning. + However, tesla coils usually do not fully absorb the lightning strike, and the grounding rods are required to prevent lighting from arcing to and obliterating nearby machines. + Do note that one grounding rod is not a foolproof solution; get [color=#a4885c]atleast 4 rods[/color] around the containment field to make it mathematically unlikely for the tesla to escape. + As the ball lightning zaps tesla coils, they will degrade from wear; make sure to [color=#a4885c]weld them[/color] every now and then to keep generating power. + + ## Turing on the Engines + + [color=red]Do not[/color] turn the PA on unless all the other subsystems are working properly and there is enough power to start the engine. + + Turn power on using the PA control computer. Set the strength to an appropiate level. Currently the only appropriate level is [color=#f0684d]1[/color]; anything above that will ensure that singularity grows too strong to handle. + The higher the output stength is set on PA control computer, the bigger the singularity will be. + + Currently, the output power does not affect the ball lightning, beyond giving the ball lightning extra orbs around it. + + The PA will now draw power from the power net and start firing particles at the generators. + + + + + + + + A singularity or ball lightning will soon appear at the position of the Gravitational singularity generator. + + + or + + + + If no particles are hitting the singularity, the singularity will start to slowly decay until it disappears. + This is not the case for the tesla; feel free to disconnect the PA after the tesla has been set up. + + ## Safety + The singularity emits a large amount of radiation around it, so always keep a distance from it. Consider getting [color=yellow]radiation shielding gear[/color] beforehand. Seek medical attention if you are experiencing health issues. + + + + + + + + + + + + The singularity might move around, but the containment field will repel it. + + The tesla creates large bolts of lightning around it, so make sure to wear insuls before approaching it. If you aren't, and it zaps you, pray that the ball lightning doesn't stunlock you and eventually send you into crit. + + + + If a singularity or tesla escapes its containment field, often referred to as a "singuloose" or "tesloose" respectively, it will attract and then consume everything in its way, growing larger as it does so, or it will begin to obliterate every machine in its path, and shock all crew personnel. + + In such circumstances, there is little to be done other than running in the opposite direction. + + + + However, if science has happened to research [color=#D381C9]Portable Particle Decelerators[/color], or if cargo can order them in time, you may be able to stop the singularity from eating the whole station. + Good luck on the tesla, though; it is merely too powerful to recontain after breaching. diff --git a/Resources/ServerInfo/Guidebook/Engineering/TEG.xml b/Resources/ServerInfo/Guidebook/Engineering/TEG.xml index 9e8697a9e13..63a62fecf80 100644 --- a/Resources/ServerInfo/Guidebook/Engineering/TEG.xml +++ b/Resources/ServerInfo/Guidebook/Engineering/TEG.xml @@ -19,25 +19,25 @@ Note that the circulators are [color=#a4885c]directional[/color]: they will only let gas through one way. You can see this direction in-game by examining the circulator itself. A pressure difference is required across the input and output, so pumps are generally provided and must be turned on. - There is no preference for which side must be hot or cold, there need only be a difference in temperature between them. The gases in the two "loops" are never mixed, only energy is exchanged between them. The hot side will cool down, the cold side will heat up. + There is no preference for which side must be hot or cold, there need only be a difference in temperature between them. The gases in the two "loops" are never mixed, [color=#a4885c]only energy is exchanged between them[/color]. The hot side will cool down, the cold side will heat up. ## The Pipes - There are 2 major pipenets to worry about here: The Hot Loop (where gas will be burnt for heat), and The Cold Loop (where circulated, heated waste gas will either be removed into space or cooled back down). Make sure that [bold]both pipenets do NOT mix[/bold], as only heat should be transferred between the two through the TEG. + There are 2 major pipenets to worry about here: [color=red]The Hot Loop[/color] (where gas will be burnt for heat), and [color=cyan]The Cold Loop[/color] (where circulated, heated waste gas will either be removed into space or cooled back down). Make sure that [color=#a4885c][bold]both pipenets do NOT mix[/bold][/color], as only heat should be transferred between the two through the TEG. # The Hot Loop As I'm sure a wise person once said: the best way to make something hot is to light it on fire. Well, depending on context, that may not be very wise, but luckily your engineering department has just what's needed to do it wisely after all. - As stated above, there are many different layouts one can follow to heat up (or cool down) gases; this part of the guide will cover 2 common methods one will often see for the hot loop when the TEG is setup: The Pipe Burn, and the Burn chamber. + As stated above, there are many different layouts one can follow to heat up (or cool down) gases; this part of the guide will cover 2 common methods one will often see for the hot loop when the TEG is setup: [color=#a4885c]The Pipe Burn[/color], and [color=red]the Burn Chamber[/color]. - Side note: Plasma fires burn relatively cool compared to, for example, Tritium fires. It may be viable to extract Tritium from an extraction setup (using a 97/3 ratio of O2/Plasma) and react it with Oxygen to get truly hellish temperatures for power. Although, this is just a recommendation; I'm not ya mum. + Side note: Plasma fires burn relatively cool compared to, for example, Tritium fires. It may be viable to extract Tritium from an extraction setup (using a 96/4 ratio of O2/Plasma) and react it with Oxygen to get truly hellish temperatures for power. Although, this is just a recommendation; I'm not ya mum. ## The Pipe Burn Also known as the naive method, this is generally discouraged when working for efficiency. However, if all you need is a smidge of power to run the station, and you don't feel like setting up the burn chamber, this method will do. - TODO: Remove this section when atmos pipes are updated to have pressure/temperature limits in a future atmos refactor. + [color=#444444]TODO: Remove this section when atmos pipes are updated to have pressure/temperature limits in a future atmos refactor.[/color] Most (if not all) pipe burns follow this general layout: @@ -55,8 +55,8 @@ - The Gas input is pretty self-explanatory; this is where you will input the O2-Plasma mix to be burnt. A 2:1 (67/33) ratio of Oxygen to Plasma is recommended for the hottest burn. - The High-pressure pump serves 2 purposes; first, it prevents the burn from backwashing into the supply pipe, which would be.. bad, for many reasons. Second, it maintains a positive pressure in the following pipe segment, which is important to allow the burn to continue, especially since hot gases expand. - - The Pipe segment is where the burn actually occurs; to start it off, one can use a heater to increase the temperature up to the ignition temperature of Plasma. Afterwards, the reaction should be self-sustaining, so long as the Pressure and Moles supplied remains high enough. Be warned; if you wish to remove the heater, it will carry some of this superheated gas with it, transferring it to the next pipenet you connect it to. Best to space the gas through a space vent, if you must. - - The Low-pressure pump (whose pressure should be [italics]slightly lower[/italics] than the input pump) prevents [italics]all[/italics] the gas from passing through the circulator, which could result in the loss of the Moles required to sustain a burn. + - The Pipe segment is where the burn actually occurs; to start it off, one can use a heater to increase the temperature up to the ignition temperature of Plasma. Afterwards, the reaction should be self-sustaining, so long as the Pressure and Moles supplied remains high enough. [color=#a4885c]Be warned[/color]; if you wish to remove the heater, it will carry some of this superheated gas with it, transferring it to the next pipenet you connect it to. Best to space the gas through a space vent, if you must. + - The Low-pressure pump (whose pressure should be [italic]slightly lower[/italic] than the input pump) prevents [italic]all[/italic] the gas from passing through the circulator, which could result in the loss of the Moles required to sustain a burn. - The Circulator is where this generated heat will flow to the cold loop; afterwards, feel free to space the waste gases. Note: Pressure pumps are used here as, while they pump on pressure (not flow-rate, which is comparatively faster), they are a bit easier to control when it comes to the limited Plasma supply on-station. However, the steps shown can be followed with volumetric pumps too. @@ -68,25 +68,53 @@ Most (if not all) stations have the burn chamber separated from the main atmospherics block by a 1-wide spaced grid, presumably to prevent conduction. The chambers consist of 3(+1) important parts: - The Air Injector/Passive Vent - The Space Vent - - The Radiator Loop + - The Scrubber Array + + Here is one layer of an example setup: (pipes can and do need to be layered under the scrubbers below to connect them!) + + + + + + + + + + + + + + + + + + + + + + + + + + + + - Most normal burn chambers don't come with Heat-Exchangers; instead, they have air scrubbers (and optionally, an air alarm) to help filter for Tritium, which is a highly reactive, hot-burning gas that can also be used to heat the TEG efficiently. - However, this is a slightly more advanced setup than just burning plasma, as it needs 2 burn chambers instead of 1 (one for tritium production, one for burning said tritium), so remove the scrubbers and retrofit the burn chamber with a parallel array of heat-exchangers instead. - The air injector (or Passive Vent) injects air (or allows air to flow) into the burn chamber. Either should be supplemented with a pump before it, to keep pressures high. - There is a notable difference between the passive vent and the air injector; the air injector can only keep injecting air up to 9MPa, which can be reached very easily with a good burn. Ideally, switch out the air injector for a passive vent connected to a volume pump. + There is a notable difference between the passive vent and the air injector; the air injector can only keep injecting air up to [color=#a4885c]9MPa[/color], which can be reached very easily with a good burn. Ideally, switch out the air injector for a passive vent connected to a volume pump. + + The space vent (designated as a blast door to space on one side of the burn chamber) allows waste gases to be expelled and destroyed. Open this every now and then to keep the pressure under control, or to space excess input gas. - The space vent (designated as a blast door to space on one side of the burn chamber) allows waste gases to be expelled and destroyed. Open this to keep the pressure under control. + The scrubber array filters out all the burnt gasses and sends them through the TEG. Note that using default settings on the scrubbers is a bad idea, as valuable plasma will be filtered out too. + Instead, use a network configurator to connect all the scrubbers to a nearby air alarm, and set the air alarm's scrubber settings to scrub everything except Oxygen and Plasma, and to siphon air aswell. This ensures that as much heat as available can be collected and sent to the TEG. - The radiator loop collects heat from the burnt gases and brings it to the TEG. To maximize efficiency, hook up the heat-exchangers [italics]in parallel to each other[/italics], with a pressure pump at max pressure after the array and a volumetric pump before the array. - The pressure of the volumetric pump should be set to ( 200 / number of heat-exchangers ) L/s. For example, having 2 heat-exchangers would mean you should set the pressure to 100 L/s. - Finally, fill the whole loop with (ideally) a high heat capacity gas, like Frezon or Plasma. (Yes, Frezon =/= Cold. Frezon has one of the highest heat capacities in the game; so long as it isn't reacting with Nitrogen, it can actually be heated and can store heat really well!) + Note that these are just two of many ways you can setup the hot loop; [color=#a4885c]feel free to mix and match setups as needed![/color] Volume pumps in replacement of pressure pumps, radiator loops for heat collection, or even a Pyroclastic anomaly to provide said heat! The stars are the limit! # The Cold Loop As with the Hot Loop, the Cold Loop must also be setup in order to operate the TEG. However, the Cold Loop is usually a lot more low-tech than the Hot Loop; in reality, the Cold Loop only has to be "relatively" cooler -- hey, room temperature is technically cooler than the surface of the sun, right? - There are 3 main methods you will see used for the Cold Loop: The Water Cooler (see: Liltenhead's video on the TEG), the Coolant Array and the Freezer Loop. + There are 3 main methods you will see used for the Cold Loop: [color=#a4885c]The Water Cooler[/color] (see: Liltenhead's video on the TEG), [color=cyan]the Coolant Array[/color] and [color=#a4885c]the Freezer Loop[/color]. ## The Water Cooler @@ -103,14 +131,17 @@ - TODO: Remove this section when gas miners are removed in a future atmos refactor. + [color=#444444]TODO: Remove this section when gas miners are removed in a future atmos refactor.[/color] ## Coolant Array - This is the default method for the Cold Loop you will see on a variety of stations. Being of moderate complexity and having no losses of any resource, this [italics]should[/italics] be the main method of cooling down the TEG. However, every station at the moment somehow has their heat exchangers hooked up wrong, reducing efficiency greatly. (Thanks a bunch, NT!) + This is the default method for the Cold Loop you will see on a variety of stations. Being of moderate complexity and having no losses of any resource, this [color=#a4885c]should[/color] be the main method of cooling down the TEG. However, most stations at the moment somehow have their heat exchangers hooked up wrong (or suggest incorrect piping), reducing efficiency greatly. [color=#444444](Thanks a bunch, NT!)[/color] - To use heat-exchangers properly, they must be setup in [italics]parallel[/italics], not in series (like what you see on most stations). A gas pump at max pressure should be placed after, and a volumetric pump before the heat-exchangers. - The flow-rate of the volumetric pump should be set to ( 200 / number of heat-exchangers ) L/s. + To use heat-exchangers properly, they must be setup in [color=#a4885c]parallel[/color], not in series (like what you see on most stations). A gas pump at max pressure should be placed after, and a volumetric pump before the heat-exchangers. + The flow-rate of the volumetric pump should be set using the following formula: + + [color=cyan]( 200 / number of heat-exchangers )[/color] L/s. + Simply speaking, the Coolant Array consists of 3 major parts: An input connector port, a few pumps and the heat-exchanger array out in space. It can be setup like so: @@ -161,7 +192,7 @@ - Connector Port: Use this to input a gas with high heat capacity; most of the time, Plasma or Frezon is used to do so, as they both have very high specific heat capacities (although most any gas will do). (Yes, Plasma =/= Hot. You can cool it down, and it acts as a really good heat exchange medium.) - Input/Output Pumps: Used to make sure gas keeps flowing through both the Circulator and the Heat-Exchanger array. As the gas cools down and heats up (and as it flows through the Exchanger), pressure must be applied for it to keep flowing. - - Heat-Exchanger: Basically, just a bunch of heat-exchanger pipes in space. Not much to say, besides the fact that it cools down the gas inside it. Make sure the heat-exchangers are placed on lattice, not plating! Otherwise, the heat-exchange efficiency will be greatly reduced, as the heat-exchangers aren't directly exposed to space below them. + - Heat-Exchanger: Basically, just a bunch of heat-exchanger pipes in space. Not much to say, besides the fact that it cools down the gas inside it. Make sure the heat-exchangers are [color=#a4885c]placed on lattice, not plating[/color]! Otherwise, the heat-exchange efficiency will be greatly reduced, as the heat-exchangers aren't directly exposed to space below them. ## The Freezer Loop diff --git a/Resources/ServerInfo/Guidebook/Medical/Cryogenics.xml b/Resources/ServerInfo/Guidebook/Medical/Cryogenics.xml index ef6e1a49e87..f70f43c8a8b 100644 --- a/Resources/ServerInfo/Guidebook/Medical/Cryogenics.xml +++ b/Resources/ServerInfo/Guidebook/Medical/Cryogenics.xml @@ -12,7 +12,7 @@ Cryogenics can be a bit daunting to understand, but hopefully, quick run through - + diff --git a/Resources/ServerInfo/Guidebook/Mobs/Harpy.xml b/Resources/ServerInfo/Guidebook/Mobs/Harpy.xml new file mode 100644 index 00000000000..0b27e314737 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/Mobs/Harpy.xml @@ -0,0 +1,122 @@ + + # Harpy (Homo-Aves sapiens) + All Information included in this document is licensed under CC BY-SA 4.0, and is written by VMSolidus(Github), also known as raistlin_jag(Discord) + + + + + + Harpies were created during the first 100 years of the colonial period of human civilization, back when the corporations still answered to the Sol Government. + Their creators were a company called GenetiCorp, now long defunct. + During it's heyday, GenetiCorp developed processes for converting colonists into forms suitable for the lesser colonized planets with some extreme conditions. + For the Harpy subtype, these adaptations were created to colonize the moon of a Hycean world, Valyrian 4b(4a referring to the Hycean world itself). + It is a planet with an incredibly dense atmosphere, measuring just slightly over 150kpa at sea level, with a high oxygen concentration. + Its host star is extraordinarily rich in the UV spectrum of light, but gives off incredibly dim amounts of red light. + The planet's terrain features a vast ocean surrounding a single volcanically active continent, as well as extensive archipelagos. + Valyrian 4b is well known for its flora sporting leaves that fluoresce orange in the nearby star's UV intense light. + + Due to persistent financial troubles, GenetiCorp was bought out by its largest competitor Interdyne long before its first colony ship arrived at the intended destination. + Shortly after arrival, the original Harpy colonists were repossesed by Interdyne- who had gotten to the planet first in faster ships made after the fact. + Some Harpy colonists remained on "the Homeworld", while others were kept by the company and gradually spread across the realms of human space. + Due to the costs of their radical genemodding, most Harpies today are indebted to corporations, owing vast sums of money inherited from their parents. + These debts are often traded between corporations like stocks, resulting in a wide Diaspora of Harpies around the galaxy, and in turn gives them their extremely diverse coloration. + + ## Biology + + Harpies are biologically classed as a different species than Homo-Sapiens, due to the extreme nature of their original designer genetic modifications rendering them incapable of breeding true with Sol-Standard Humans. + They are however not true mutants, owing to the stability of their modifications such that they breed naturally as a species. + However, a "GenetiCorp-Standard Harpy" is readily recognisable as being related to humans thanks in part to retaining many body parts and organs present in the standard human. + A typical Harpy possesses a human brain, heart, stomach, kidneys, and reproductive organs, with skin not unlike a human- though it may be partially feathered, and can have a rough texture to the touch. + + Their most extreme internal modifications are the possession of a second trachea, leading to a quartet of Avian lung organs. + A Harpy's breathing is several times more efficient than a Human's at taking in oxygen, and like a bird, they have no separation of "Inhale and Exhale". + Air enters a Harpy's lungs in a continuous loop via a circular motion through their four lung chambers. Listening to a Harpy breathing via a stethoscope is something like listening to the rhythm of a heartbeat, it is fast and continuous. + + This continuous-flow breathing also permits the use of a highly advanced vocal organ called a Syrinx, which is what enables Harpies to perform iconic ability to imitate nearly any sound. + This of course comes with a significant trade-off, one that makes for a difficult life for Harpies to live in space. + They require double the volume of air a human requires, burning through tanks of oxygen twice as fast as any other species. + They are also substantially vulnerable to air impurities of any kind, and will be readily injured by simple things such as cigarette smoke, or someone hyperventilating in their face. + + ## Unique Languages +- [color=#008ecc]Valyrian Standard[/color]: + A language descended from eastern european languages of old earth - Valyrian Standard is the commonly spoken tongue of Harpies brought up on their homeworld of Valyrian 4b. + It is rarely spoken outside of the worlds of its native speakers, and has in modern times been supplanted by the 'Conlangs of the Sol Alliance. + Its speakers are those who wish to uphold the traditions and beliefs of ancient peoples from before the colonial era. + + ## Other Notes + + - No, Harpies don't lay eggs. + - In a combination of low-gravity and high atmospheric density, a Harpy is capable of flight. They are however flightless in Terran-Standard Atmospheric conditions. + - Adult Harpies can be anywhere from 135cm to 190cm tall, with an average height of around 155cm(Human average being roughly 175cm, depending on ethnicity). + - An average adult male Harpy weighs only 24kg, while an average adult female weighs 18kg. For reference, the average weight of an adult male human is 71kg. + - Curiously, Harpies do not follow the pattern of sexual dimorphism present in Terran birds. Female Harpies are usually just as colorful(or lack thereof) as their male counterparts. + - Spacer Harpies(Those not born on the Homeworld), are typically far more colorfully diverse than those native to the Homeworld. + + # Species Traits + + ## Positive Traits + - [color=#1e90ff]Mimicry[/color]: + Harpies can mimic almost any sound in the game using emotes, barring only a few exceptions. This includes the voice emotes of every other species. + The Harpy sound library contains nearly 700 possible sounds. This trait is unique only to Harpies. + + - [color=#1e90ff]Runner[/color]: + Thanks to their incredibly light build, a Harpy's base running speed is 10% faster than that of a standard Human. + + - [color=#1e90ff]Singer(Advanced)[/color]: + Harpies have a significantly more advanced variant of the [color=#1e90ff]Singer[/color] trait. This trait gives a Harpy access to an innate Midi Player, as well as a menu for swapping instruments. + Right click on yourself to open the Swappable Instrument menu, and select from a list of available instruments to mimic. Any of the following conditions both stop and prevent a Harpy from singing: + + * Being Mute + + * Being Zombified + + * Being Dead or Crit + + * Taking more than 5 damage in a single instance + + * Being shoved to the ground + + + - [color=#1e90ff]Zero Gravity Flight[/color]: + Harpies have significantly enhanced acceleration in zero gravity. This trait is shared with Nians. + + - [color=#1e90ff](Limited) True Flight[/color]: + Harpies have an activatable ability to attempt to fly. In order to fly, a Harpy must have both of their wings unencumbered, either by carrying something in hand, or by being restrained. + When activated, Flight significantly increases the maximum speed and acceleration of a Harpy, while allowing them to fly over obstacles. + Using flight costs a significant amount of stamina. + + - [color=#1e90ff]Talons[/color]: + Functions as per the [color=#1e90ff]Talons[/color] trait. A Harpy's unarmed attacks deal 5 points of Piercing damage. + + ## Negative Traits + - [color=#ffa500]Asthmatic[/color]: + Using their powerful Avian Lungs, a Harpy breathes twice as deeply, and twice as often as a standard Human. This results in two key conditions. The first is that all oxygen tanks last half as long for a Harpy. + The second condition, is that Harpies are uniquely vulnerable to poisonous fumes. When exposed to even a small amount of Carbon Dioxide and or Ammonia, a Harpy will shortly thereafter being to choke. + Choking can be ended either by moving away from the sources of poisonous fumes(such as rotting bodies, open gas tanks, or several people in an enclosed space with no scrubbers). + A choking Harpy can also stop themselves from choking by breathing from a tank of Pure Oxygen for at least 6 seconds. + + - [color=#ffa500]Extreme Low Density[/color]: + The average weight of a Harpy is only 24kg, and can be as low as 10kg, with a maximum of 31kg. Because of this, Harpies suffer from any form of Mass Contests. + This results in weaknesses such as- but are not limited to: + - Experiencing more recoil with firearms + - Being easier to shove down + - Being easy to pick up by other people + - Being easy to throw + - Having a harder time pushing or dragging heavy objects + - Having weaker melee damage with certain weapons + - Being thrown extremely easily by Space Wind + + - [color=#ffa500]Hollow Bones[/color]: + Harpies take 15% greater damage from any source of Brute damage. + + - [color=#ffa500]Ultraviolet Vision[/color]: + Harpies have a unique kind of eye lens that lets them see in Ultraviolet-Blue-Green, but that they cannot see the color Red. This functions as per the Ultraviolet Vision trait. + "Ultravision" can also be "Bought off" in character creation by taking the [color=#1e90ff]Trichromat Modification[/color] trait. + + # Unique Traitor Items + + - [color=#1e90ff]Bionic Syrinx[/color]: + Traitor Harpies can optionally purchase a Bionic Syrinx. This takes the form of an Implant which- when implanted in a Harpy, acts as an internal Voice Changer. + The Bionic Syrinx will only work on Harpies. + + diff --git a/Resources/ServerInfo/Guidebook/Mobs/Reptilian.xml b/Resources/ServerInfo/Guidebook/Mobs/Reptilian.xml index 936cd9f5e2d..8acdab3e513 100644 --- a/Resources/ServerInfo/Guidebook/Mobs/Reptilian.xml +++ b/Resources/ServerInfo/Guidebook/Mobs/Reptilian.xml @@ -1,16 +1,131 @@ - # Reptilians - + # Unathi +All Information included in this document is licensed under CC BY-SA 4.0, and is taken from https://wiki.aurorastation.org/index.php?title=Unathi with some modifications by VMSolidus(Github). - They can ONLY eat fruits and meat, but can eat raw meat and drink blood without any ill effects. - They prefer a somewhat higher temperature range than humans. - They can drag objects with their tail, keeping both their hands free. + The Unathi (direct plural: Unathi – You-NAWH-thee both singular and multiple) (adjective: Unathite - You-NAWH-thit) are a race of tall humanoid reptiles standing from six to seven feet tall on average, with females slightly smaller in stature. They possess a mixture of snake-like and crocodile-like features, resulting in hard and plate-like scales. + Unathi live in their home system of Uueoa-Esa with their homeworld being Moghes. The planet's history can be summarized as being divided up between various Hegemonies, names they give the most powerful Clans on Moghes throughout time. + The Clan system is deeply entrenched in Unathi society with everything else revolving around it. It forms a major part of their code of honor, which stresses the importance of martial abilities and loyalty to the Clan. + + Religion and spirituality play a major role in a Unathi society, and religious differences are the main dividing factor. + Conflict between the Sk'akh Church and the various Th'akh faiths of Moghes, as well as the various communes and cults, have caused conflict and wars between the Izweski Hegemony and the kingdoms that eventually comprised the Traditionalist Coalition. + This conflict hit a peak when they entered the intergalactic stage, which is now known as the Contact War. After this conflict, some Unathi fled the planet through Hephaestus or NanoTrasen shuttle ports. + Unathi fleeing to megacorporations like NanoTrasen find themselves working in security and engineering roles, but recently many have been proving themselves as competent surgeons and brilliant scientists, earning opportunities that Moghes would deny them because of its strict feudal hierarchy. + However, others are slipping through the cracks and becoming slavers, raiders, or pirates. As the ability for spaceship construction increases in the Unathi home system, so too does space piracy and smuggling. + + Moghes has two different biomes after the Contact War. The fertile Untouched Lands with its great jungles, vast swamps, and lush forests; all of which are protected by massive terraforming equipment kept secure by the Hegemony's wealth and power. + Contrast to that are the bombarded Wasteland kingdoms in the ashes of plains and forests, burnt into a massive planet-spanning desert rampant with punished kingdoms raiding to survive and part scavengers living in cities on treads. + + ## Megacorporate Relations + + Prior to 2465, Moghean Unathi that were not members of trade guilds were almost exclusively employed with Hephaestus Industries. + Unathi with guild memberships would primarily take contracts with NanoTrasen or Orion Express, depending on their career choice. Unathi living in Dominia, like most of their countrymen, seek employment with Zavodskoi Interstellar. + + After the Merchant's Guild declared bankruptcy, Hephaestus Industries bailed out all Hegemonic guilds and reorganised them under the banner of the company. + Since then, nearly all residents of Moghes are employed by Hephaestus in some way. + + # Biology + + Their average life expectancy is around sixty years for most Unathi. However, they tend to live for well past sixty years when given advanced medical care available to the other space-faring species. + As a cold-blooded species, they suffer fatigue and even short comas when exposed to extremely low temperatures. + + Humans and Unathi share a lot of similar internal biology with some notable exceptions. + Since they are a carnivorous species, their diet mostly consists of meat and animal products, though they do have a tolerance to some plants and fruits. + While Unathi do receive minor benefits for eating certain fruits, they do not get any nutrition from plants. + Due to their carnivorous nature, they also have an increased stomach capacity to help eat larger meals at a time. + The typical Unathi usually only eats one meal a day, and for the poorer sinta, perhaps once every two days. + They tend towards lethargic and sluggish movements more often than not because of their evolutionary history, so they move slower than most organic species. + However, the cyclical period of work for Unathi compared to other species is much faster. Unathi are polyphasic sleepers: creatures that sleep in shorter naps rather than at one time during the night. + While they tend towards sluggishness, sinta are often capable of incredible bursts of energy and speed, and their ability to work in three or four hour periods of time compensates for their more sporadic schedules. + + The reproductive system of a Sinta'Unathi is very similar to that of Earth reptiles. Females lay eggs, with the average clutch being somewhere between one and three. + They have a six-month gestation period, after which they are laid in a humid, warm area. After two months, the fetus is fully developed and hatches from the egg. + Unathi are born with their claws and the ability to walk within hours of hatching. A Sinta'Unathi is considered an adult when they are 16 years old. + + # Physical Appearance + + The Unathi as a species show a great deal of variation within body types as well as clusters of smaller physical traits passed down through clans. + Facial and body features range in size and shape with some having raptor-like aesthetics, serpentine looks, or a more draconic body. + Tail length is often genetic; conversely, tail girth is defined by a Unathi's diet as it stores most of the body's fat— nobles grow some of the largest tails. + + Unathi scales are somewhat tougher than human skin, though they shed off sporadically rather than all at once. + More vulnerable and hidden spots, such as the stomach and waist, the backs of joints, and inner thighs are all leathery skin and aren't covered in scales. + + The typical healthy adult male Unathi weighs roughly 280 pounds. Female sinta differ from males as they generally have a shorter and more rounded snout. + The typical healthy Unathi female weighs roughly 250 pounds. Female Unathi grow to about 5'9" to 6'8, while male Unathi grow to about 6'0" to 7'0". + Unusual heights tend to be smaller in scale, as the taller a Unathi is, the more likely it will be marred with health problems and not live as long as others. + + Both sexes stand on digitigrade legs, with three toes on each foot and a hooked dewclaw, and have clawed feet and hands. + They also have very long tongues, typically black or extremely dark red in color, which may stretch up to a foot and a half long and are forked just like a serpent's. + In much the same manner as snakes, Unathi can sample the air around them using their tongue. They blink and have tear ducts similar to humans. + + Unathi horns do not naturally regrow, and serious damage tends to remain permanent. + Ancient recipes using native herbs known as "horn paste" are commonly made and sold by herbalists and can counter cosmetic scratches or minor chipping. + More modern synthetic Horn Gel (based on Bone Gel), developed largely by Zeng-Hu Pharmaceuticals, can regenerate an entire lost horn, but it tends to be stratified to the upper classes and noblemen due to cost. + + ## Coloration + + Unathi are also often born into one of four major scale colour categories: red, black, orange-brown and "sand-colored", and green. + Alternative colours are rare, with dark blue and even albino Unathi being reported in very small numbers. Albinos are sometimes slightly tinted in colour while remaining predominantly white. Traditionally these off-coloured Unathi are met with prejudice, though some clans outside the Izweski may feel different. + + It has been noticed that scale colourations were more represented in some areas than other, and thus, many shades of these colours were, in Unathi culture, named after the places they tend to be seen in more often, in many cases. + + Modern red-coloured Unathi are thought to originate from a large nomadic clan that settled South of the Moghresian Sea around modern Skalamar. Nowadays, red-scaled Sinta tend to be seen on the entire Southern coast of the Moghresian Sea and the mountain ranges near it. + Today’s green-coloured Unathi hail from the Southern side of the Moghresian sea, and they are seen more often throughout this side of the coast and down to the colder lands even further South. Surprisingly, there is also a large batch of green-coloured Unathi located around Sahl lake, indicating that an old nomadic clan of mostly green Sinta settled there centuries ago. + Orange-brown and sand-yellow Unathi comprises a wide range of colours. They are a more common colour to be seen in a large area, and it is believed that their origins come from displacement in ancient conflicts that forced them to migrate and find new homelands. More precisely, Unathi harbouring such colours tend to be more represented in a large area defined between Darakath, Bahard, Mudki, and Yu’kal. + Black or “dark-scaled’ Unathi do not seem to originate from any precise area, and instead, tend to be more often seen around colder areas of Moghes, both North and South. A popular theory is that black scales are actually a consequence of exposure to the cold for generations— something that has yet to be proven. + All colours, barring albino, do not mix; if a brown Unathi and a light red Unathi have a child, the red scales the child has might be a little darker, but the colours do not blend to make something new. + + ## Genetic Variety + + Besides scale colouration, many other physical aspects of Unathi bodies can vary widely. + From horns and frills, to even extra scale crests and different structures in a Unathi’s very skeleton (namely, the skull). + While anatomical differences within a species are natural, Unathi are noteworthy for how wide these differences can get and how fast they come to be. + The exact science behind this has been lost after the Contact War, and most of the research behind such a phenomena is idly handled by Nanotrasen and Zeng-Hu specialists. + However it is assumed that Sinta simply evolve and adapt to their surroundings much faster than most of the other sentient species of the Spur, leading to such large physical discrepancies between Unathi alone. + From this, it is also assumed that, with Unathi populations moving between planets, and Moghes on its way to changing considerably (may the consequences of the of the Contact War be the of the Sinta homeworld, or may terraforming efforts save it), said biological differences between different groups will only get larger and more exotic in the next few centuries. + + # History + + The history of the Unathi is predominately a history of each Hegemony that has existed throughout their history. There have only been three clans that have managed to create an empire worthy of the title 'Hegemon.' + + The Kres’ha’nor Hegemony lasted from roughly 920 CE - 1500 CE. It is most famous for being the first empire to dominate Moghes and creating what was then a modern feudal state. + Their empire saw rise of walled cities, steel weapons, centralized taxation, and other innovations. It ended in a brutal succession war, with Moghes once again being shattered into hundreds of individual Kingdoms with no true global power. + + In the 16th century the power of Guilds began to grow, forming an early form of mercantilism. Guilds formed for bakers, butchers, grocers, millers, smiths, carpenters, weavers, mason, shoemakers, in fact, nearly every trade had its own guild. + Standards such as just weights and measures evolved from the guilds, and guild inspectors would inspect shops to ensure rules were being followed. + Guilds would help members that were sick, or in trouble, and would sometimes take care of families after the member died. + This time also saw Guilds building the first major universities. While incredibly exclusive, these universities began to create a new era of specialized labor and intellectuals. + + The 19th century saw rise of the Second Hegemony, ruled by the Sarakus Clan. + Their clan ruled harshly, and forced technological advances into the cities and towns. + In the 1930's they ruthlessly modernized their empire in The Great Endeavor, spreading electricity, radio, paved roads, modern plumbing, and other modern innovations. + + In 1994 the Izweski Clan violently deposed the Sarakus and slaughtered the entire surviving dynasty, declaring the Third Hegemony. + After they won an incredibly destructive global war to defend their claim, the Izweski have ruled Moghes until modern times. + + In 2403, a human exploration team discovered Moghes. Shortly after, first contact with the Izweski Hegemony was made. + Sol Alliance merchants and scientists flocked to Moghes, living under very careful observation and guard in Izweski cities. + Skalamar, the second largest city in Izweski, became the first Unathite city to have a shuttle port constructed. Owned by NanoTrasen, it served to transport people to and from the planet’s surface. + + The Contact War, which has more information here, was a cataclysmic global war that lasted from 2438 to 2449. + The fighting was between two global powers, the Izweski Hegemony, and the Traditionalist Coalition. + The war was fought over the very future of the Unathi and their relationship with the rest of the galaxy. + The Izweski demanded Moghes submit to a one-world government ran by themselves and embrace the influence of humanity. + The Traditionalist Coalition rejected this. The war went nuclear on September 5th, 2439, causing immense suffering across Moghes and directly leading to the creation of The Wasteland, which is set to engulf Moghes within a hundred years. + + # Species Traits + + - [color=#1e90ff]Reptilian Diet[/color]: Unathi can ONLY eat fruits and meat, but can eat raw meat and drink blood without any ill effects. + + - [color=#1e90ff]High Temperature Tolerance[/color]: Unathi prefer a somewhat higher temperature range than humans. + + - [color=#1e90ff]Grasping Tail[/color]: Unathi can drag objects with their tail, keeping both their hands free. - Their unarmed claw attacks deal Slash damage instead of Blunt. + - [color=#1e90ff]Claws[/color]: Unath unarmed claw attacks deal Slash damage instead of Blunt. - They take [color=#ffa500]30% more Cold damage.[/color] + - [color=#ffa500]Cold Intolerance[/color]: Unathi take [color=#ffa500]30% more Cold damage.[/color] diff --git a/Resources/ServerInfo/Guidebook/Mobs/Shadowkin.xml b/Resources/ServerInfo/Guidebook/Mobs/Shadowkin.xml new file mode 100644 index 00000000000..f2f73ee6663 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/Mobs/Shadowkin.xml @@ -0,0 +1,36 @@ + +# Shadowkin + + + + + +Fluffy lil' guys. + +## Ability Differences + +- Need no air to survive +- Can Shadeskip +- Can travel to and from The Dark at will +- Dims nearby lights when in the The Dark +- When too low on energy, they may fall into a powerful sleep +- Can "speak" in the Empathy, which only other Shadowkin can understand +- Slightly less blunt damage +- A bit more slash damage +- Slightly more piercing damage +- Less cold damage +- Slightly more heat damage +- Near no cellular damage +- More bloodloss damage +- Slightly more shock damage +- More radiation damage + +## Physical Differences + +- Very large and brightly colored eyes with no pupils +- Sees the world through their eyes' tint +- Very large ears +- Very fluffy +- Can be Male, Female, or Unisex +- Can be 18-300 years old + \ No newline at end of file diff --git a/Resources/ServerInfo/Guidebook/Mobs/SlimePerson.xml b/Resources/ServerInfo/Guidebook/Mobs/SlimePerson.xml index fc72c60dbf4..0374d4cb958 100644 --- a/Resources/ServerInfo/Guidebook/Mobs/SlimePerson.xml +++ b/Resources/ServerInfo/Guidebook/Mobs/SlimePerson.xml @@ -10,7 +10,21 @@ They exhale nitrous oxide and are unaffected by it. Their body can process 6 reagents at the same time instead of just 2. - Their Slime "blood" can not be regenerated from Iron. Slime Blood is technically a source of + Slimepeople can morph into a [bold]"geras"[/bold] (an archaic slimefolk term), which is a smaller slime form that can [bold]pass through grilles[/bold], + but forces them to drop their inventory and held items. It's handy for a quick getaway. A geras is small enough to pick up (with two hands) + and fits in a duffelbag. + + + + + + Slimepeople have an [bold]internal 2x2 storage inventory[/bold] inside of their slime membrane. Anyone can see what's inside and take it out of you without asking, + so be careful. They [bold]don't drop their internal storage when they morph into a geras, however![/bold] + + Slimepeople have slight accelerated regeneration compared to other humanoids. They're also capable of hardening their fists, and as such have stronger punches, + although they punch a little slower. + + Their slime "blood" can not be regenerated from Iron. Slime Blood is technically a source of moderately filling food for other species, although drinking the blood of your coworkers is usually frowned upon. They suffocate 80% slower, but take pressure damage 9% faster. This makes them by far the species most capable to survive in hard vacuum. For a while. diff --git a/Resources/ServerInfo/Guidebook/Mobs/shadowkin.Lore.txt b/Resources/ServerInfo/Guidebook/Mobs/shadowkin.Lore.txt new file mode 100644 index 00000000000..e3cda6d77e2 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/Mobs/shadowkin.Lore.txt @@ -0,0 +1,178 @@ +# Lore + +## Biology + +[color=#a88b5e]Physicality[/color] + +Shadowkin seem very similar to canine species when looked at. +While mammalian in nature, it is nearly impossible to find any sexual dimorphism between genders, if they even have any. +They seem to all share the same body shape and often voices. + +The head consists of a snout with a nose, sharp teeth in the mouth, and two big ears on top of the head. +In addition to the two big ears, Shadowkin have two smaller ears lower down, giving them an exceptionally good ability to detect where exactly sounds come from. + +Shadowkin eyes are usually very large and fully mono-colored; they have no discernible pupils, irises, or similar. +The eye of a Shadowkin is a solid orb of color and, perhaps, their most defining trait. + +All observations show Shadowkin do not seem to age after a certain point. +Some may look older or younger than others, but the aging process seems to stop when the Shadowkin is chronologically in their 20s. + +Unusually, compiled medical data on Shadowkin shows that they have no lungs, thus not needing to breathe. +The compiled medical data also shows that they have a large, more circular shape where their lungs would be. + +[color=#a88b5e]Mentality[/color] + +Shadowkin core personalities are mirrored by their eye color. +Some common colors and their meanings are: + +- Red: Determined to reach a goal, even if it means sacrificing others. +- Green: Eager to learn and fit in with others. +- Blue: Very calm and collected, or shy. + +Other colors also exist in addition to these but are not as common. +The other colors are just mixes of the three main colors. +For example, here are a couple of mixes: + +- Purple: Determined, yet probably won't harm, in some cases shy. +- Yellow: Quite eager to be number one, especially if related to knowledge. +- Orange: Shy and calm, yet will fight if provoked. +- White: Very robust, exceeds expectations in most things they do, but is quite boring to interact with generally. + +There are rumors other colors exist as well. +Shadowkin that lose their ability to travel between dimensions have [color=#000000]black eyes[/color] no matter their core personality. +These black-eyed Shadowkin make up the largest number of them living in Realspace. + +## History + +Shadowkin are creatures native to their so-called Pocket Dimension, a part of space that is unable to be accurately pinpointed and/or visited by most people. +From there, Shadowkin visit our worlds, and sometimes a large number of them are forced into our world in mass migrations and then live among us. +What exactly causes these mass migrations is unknown, but may be related to them losing their ability to travel between dimensions. + +[color=#a88b5e]Homeworld[/color] + +While no home system or world has been found, some Shadowkin talk about dreaming of their homeworld, describing a lush and green land with abundant resources. + +[color=#a88b5e]Racial/Government Status[/color] + +There currently exists no Shadowkin government, and with Shadowkin being as rare as they are, they tend to fit into currently established societies and civilizations, with varying degrees of success in the past. +In recent years, however, many cultures have taken to accepting Shadowkin as another galactic constant, going as far as allowing them lives similar to those that any of the other species would lead. + +Some systems early on took and experimented on Shadowkin, in an attempt to utilize their powers in various technology, and even recreating them with very experimental technology. +The tests failed and this was met with a lot of resistance from Shadowkin, many of them being killed or becoming Blackeyes in the process. +After this, those systems realized that Shadowkin were a sentient species, and deeply apologized for their actions. + +## Culture + +[color=#a88b5e]The Typical Experience[/color] + +Most times, life is pretty normal. A Shadowkin can have a job, go to the job to work, then spend time off with friends. +The fact is most times of the day, the small abilities one might have are nice, but not overly useful. Sure, a Shadowkin could dim the nearby lights, but at the same time, the Shadowkin could also just flick the light switch. +However, it can sometimes happen that when a Shadowkin slept in and needs to get to work quickly, they might just teleport to work. +Some people might be overly wary of Shadowkin, some might be drawn towards Shadowkin. +Many Shadowkin are used to not wearing clothes, which can lead to some awkward situations, but those are generally the same situations any other furred species would have. + +[color=#a88b5e]Language[/color] + +The only recorded spoken language of the Shadowkin is an unusual language named "Mar", named after the fact that every single word in this language is the word "mar". +Spoken in different tones, with more or less emphasis on the various parts, or by drawing out parts of this word, a multitude of different "mar"s can be created, but they follow no apparent conventions. +Shadowkin can perfectly understand each other though and discuss complex topics using only this one word. +The Shadowkin can hear the Mar language from anywhere and understand it via Empathy, yet do not know who it is from unless they are close enough to see the sender. +Other humanoid species are incapable of understanding or learning Mar, as they are unable to accentuate their speech in the same way or hear some of the silent, Empathic tones they use. +Shadowkin tend to learn one or more languages of the Realspace beings. +The capability in such learned languages depends fully on each single Shadowkin, where some have only very broken capabilities, while others are fluent in several languages. + +[color=#a88b5e]Naming Conventions[/color] + +Shadowkin tend to name themselves with a singular word, ranging from states of being, such as Lone and Collected, to words that describe their memories connected to their supposed homeworld, like Dreamer. +Name schemes of the humans are usually frowned upon, as they do not reflect upon the Shadowkin, resulting in reactions ranging anywhere from an actual frown to being entirely ignored. +Shadowkin following another species naming scheme are often Blackeyes, not fitting in with other Shadowkin as well. +Names hold a great deal for Shadowkin because of how closely they are often tied to describing who they are. +Following life-changing events, Shadowkin often change their names to reflect the new person they have become. + +[color=#a88b5e]Rumors and Speculation[/color] + +Shadowkin are beings from another dimension, capable of performing feats that others could only describe as "magic", with no scientific explanation. +It is speculated that Shadowkin actually have a whole nation in their dimension, and those that come to Realspace just simply refuse to talk about it. +Sometimes Shadowkin mention a "Hub", acting as evidence for this theory. + +Some believe Shadowkin are the result of experimentation, though them being taken and experimented on is a large piece of evidence denying this theory. + +Some believe Shadowkin are the result of an expedition crew that disappeared hundreds of years ago, even though the first Shadowkin sightings were long before that. +Obviously, this expedition ship performed time travel. + +## OOC Notes + +Extra information, should be read if playing Shadowkin, if not you should try to learn this in gameplay. + +[color=#a88b5e]History[/color] + +Shadowkin used to live on a very lush forest planet, using primitive technology to work with metal, create tools, and build stone structures. +According to the dreams, Shadowkin back then had forged tools and blades, but had no electricity, presumably putting them at a medieval technology level. +In a sudden event, everyone and everything organic suddenly found themselves in an alternate dimension, sucked straight out of their previous home. +The Shadowkin being ripped from their homes happened in three total "dimensional ripples". + +Now stuck in this alternate dimension, Shadowkin changed a lot. +They stopped aging and with time developed the ability to use the energy of this dimension to power their unusual "magic". +And even later, they learned how to leave the dimension and travel to Realspace and back again. +However, as the eons passes, memories became shady of their home. +Many Shadowkin forgot more and more about the thousands of years they had lived, reducing memory to focus on the more important closer time. +However in dreams, Shadowkin, even those born in Realspace, often have visions of their home planet. +Some events can trigger certain memories to return like meeting someone they knew from the past makes them remember in great detail who they are. +As such, it can happen that two Shadowkin can randomly meet and remember that they met hundreds of years ago, often confusing nearby unknowing humanoids. + +[color=#a88b5e]Biology[/color] + +If a Shadowkin personality changes drastically, their eye color will change as an effect, reflecting upon their new personality. +Shadowkin, being ageless entities, can look older or younger, but that is merely a visual representation of how they feel about their age. +22 years after birth a Shadowkin stops aging, and in all of their history no instance of them dying of old age has been recorded. + +[color=#a88b5e]Shadowkin energy[/color] + +Shadowkin have an odd organ in them, their "Core". +This organ is the source and storage place for their power. +Without it, they would be unable to use their abilities. +The Core is very sensitive to physical trauma, yet is very resilient to electrical or magical damage. +The Core can get irreversibly destroyed from overloading it, using too much power too quickly, which is what happens to the Blackeyes. +The Core can not be replaced, using a new one would require a new body, and trying to use another Shadowkin Core will result in death. + +The Shadowkin's ability to fall into a deep sleep is a method to recharge their energy at a significantly higher rate than idling. +Though while in this deep sleep, it is difficult to wake up, and cannot be woken up by anything other than themself. + +Shadowkin can know exactly how much energy they have, and feel differently based on how much they have. +They can also Empathically sense the energy of others nearby and can estimate how much energy they have based on their feelings. + +[color=#a88b5e]Shadowkin Abilities[/color] + +Shadowkin have a few abilities. +They can teleport, requiring a small amount of energy, but they can do it quickly. +They can teleport to and from The Dark, requiring much more energy than teleportation. +They can immediately fall into a deep sleep at any time. + +[color=#a88b5e]The Ritual[/color] + +When a Shadowkin reaches adulthood, they undergo a "Ritual". +During this Ritual they intentionally overload their energy reserves, forcing their capacity to expand rapidly in order to gain enough energy to travel between dimensions. +Most Shadowkin pass the Ritual and that's the end of it, but some Shadowkin perish or become Blackeyes during the ritual. + +[color=#a88b5e]Important Terminology[/color] + +[color=#a88b5e]Shadowkin:[/color] +The name given for your race. +While your race doesn't have a name for itself, this is how most of the Galaxy refers to you, so it's how you refer to yourself too. + +[color=#a88b5e]The Dark:[/color] +The other dimension where you are from. +There are theories that The Dark and Bluespace are connected, but you don't know the details about that. +The Dark is a dimension where strange rules apply. +For outsiders who somehow enter it, whatever they imagine being in there, they see there, if not too complex. +If an outsider comes with a willing Shadowkin they may see what the Shadowkin sees, being anything they imagine, or a reflection of the station. + +[color=#a88b5e]Blackeyes:[/color] +A Shadowkin who has undergone and failed the Ritual, or lost their ability via other methods. +The Blackeyes have completely black eyes, no matter their actual personality. +They choose a new name, which follows a favorite species' naming scheme. +They are often ignored or left alone more by other Shadowkin. +[color=#a88b5e]Note:[/color] Blackeyes correlation with black eyes is done entirely via roleplay, the game will not handle this for you. + +[color=#a88b5e]Mar:[/color] +A word used to verbally communicate feelings, emotions, wishes, hopes, ideas, and whatever, in addition to your Empathy. \ No newline at end of file diff --git a/Resources/ServerInfo/Guidebook/Science/ArtifactReports.xml b/Resources/ServerInfo/Guidebook/Science/ArtifactReports.xml index a377c980e55..5aaa9ba34ac 100644 --- a/Resources/ServerInfo/Guidebook/Science/ArtifactReports.xml +++ b/Resources/ServerInfo/Guidebook/Science/ArtifactReports.xml @@ -1,25 +1,24 @@ -# Artifact Reports -A large portion of Xenoarchaeology gameplay revolves around the interpretation of artifact reports, which are created at the [color=#a4885c]analysis console[/color] after an artifact is scanned. Reports contain the following information: + # Artifact Reports + A large portion of Xenoarchaeology gameplay revolves around the interpretation of artifact reports, which are created at the [color=#a4885c]analysis console[/color] after an artifact is scanned. Reports contain the following information: -- [color=#a4885c]Node ID:[/color] a unique numeric ID corresponding to this artifact's node. Useful in conjunction with a [color=#a4885c]node scanner[/color] for quickly identifying recurring nodes. + - [color=#a4885c]Node ID:[/color] a unique numeric ID corresponding to this artifact's node. Useful in conjunction with a [color=#a4885c]node scanner[/color] for quickly identifying recurring nodes. -- [color=#a4885c]Depth:[/color] a distance from the starting node (depth 0). This is a good shorthand for the value and danger of a node. + - [color=#a4885c]Depth:[/color] a distance from the starting node (depth 0). This is a good shorthand for the value and danger of a node. -- [color=#a4885c]Activation status:[/color] whether or not a node has been activated in the past. + - [color=#a4885c]Activation status:[/color] whether or not a node has been activated in the past. -- [color=#a4885c]Stimulus:[/color] the stimulus for that particular node. + - [color=#a4885c]Stimulus:[/color] the stimulus for that particular node. -- [color=#a4885c]Reaction:[/color] the reaction the stimulus induces. This is often vague, so caution is advised. + - [color=#a4885c]Reaction:[/color] the reaction the stimulus induces. This is often vague, so caution is advised. -- [color=#a4885c]Edges:[/color] the amount of nodes that are connected to the current node. Using this, you can calculate the total number of nodes as well as organize a map of their connections. + - [color=#a4885c]Edges:[/color] the amount of nodes that are connected to the current node. Using this, you can calculate the total number of nodes as well as organize a map of their connections. -- [color=#a4885c]Current value:[/color] the amount of research points an artifact is currently worth. Extracting will set this to zero and traversing new nodes will increase it. - -Reports are a helpful tool in manipulating an artifact, especially in the later stages where you are traversing nodes that have already been activated. - - - -To help with this process, consider printing out reports, writing down details uncovered during activation, or storing them in a folder nearby. + - [color=#a4885c]Current value:[/color] the amount of research points an artifact is currently worth. Extracting will set this to zero and traversing new nodes will increase it. + Reports are a helpful tool in manipulating an artifact, especially in the later stages where you are traversing nodes that have already been activated. + + + + To help with this process, consider printing out reports, writing down details uncovered during activation, or storing them in a folder nearby. diff --git a/Resources/ServerInfo/Guidebook/Science/Xenoarchaeology.xml b/Resources/ServerInfo/Guidebook/Science/Xenoarchaeology.xml index 8cd94e8526d..b42b8de5306 100644 --- a/Resources/ServerInfo/Guidebook/Science/Xenoarchaeology.xml +++ b/Resources/ServerInfo/Guidebook/Science/Xenoarchaeology.xml @@ -2,18 +2,28 @@ # Xenoarchaeology Xenoarchaeology is a epistemics subdepartment focused on researching and experimenting on alien artifacts. -## Artifacts +At the start of each shift, the Science department will usually have access to at least two artifacts to experiment on. You can buy more by talking to the Cargo department. + +By researching the unique things each artifact can do, you gain Research Points, increase the artifact's sale value, and potentially discover a useful ability or two that can help your department or the whole station! + +## Artifact Nodes -Artifacts consist of a randomly-generated graph structure. They consist of nodes connected to each other by edges, the traversal of which is the main goal of the scientists working on them. +Artifacts consist of a randomly-generated tree of nodes. These nodes have a "[color=#a4885c]depth[/color]", representing how dangerous the node is, and the number of other nodes connected to it, called "[color=#a4885c]edges[/color]", + +Artifacts always start at depth zero, the root of the tree. Travelling the tree to find as many nodes as possible is the main goal of the scientists working on them. Knowledge is extracted from nodes to gain Research Points and increase the artifact's sale value. + +Each node has two components: its [color=#a4885c]stimulus[/color] and a [color=#a4885c]reaction[/color]. + +A stimulus is the external behavior that triggers the reaction. There's a variety of these, and higher depth nodes have more difficult to accomplish stimuli. Some stimuli will need improvisation to trigger, and you may need to talk to other departments to get everything you need. -Each node has two main components: a [color=#a4885c]stimulus[/color] and a [color=#a4885c]reaction[/color]. A stimulus is the external behavior that triggers the reaction. Some reactions are instantaneous effects while others are permanent changes. Triggering the reaction causes the artifact to move to one of the node's edges. +Some reactions are instantaneous effects while others are permanent changes. Once an artifact is triggered, the reaction causes the artifact to randomly move to another node it is linked to. -With these basic principles, you can begin to grasp how the different nodes of an artifact are interconnected, and how one can move between them by repeatedly activating nodes. +With some experimental science, you can begin to grasp how the different nodes of an artifact are connected, and how to move between them by repeatedly activating nodes. -While it might seem random to an untrained eye, a skilled scientist can learn to understand the internal structure of any artifact. +All non-zero-depth nodes will have exactly one edge that leads up to its parent node. All other edges a node has lead down to the next depth. ## Artifact Analyzer and Analysis Console @@ -22,13 +32,26 @@ While it might seem random to an untrained eye, a skilled scientist can learn to The main equipment that you'll be using for Xenoarchaeology is the [color=#a4885c]artifact analyzer[/color] and the [color=#a4885c]analysis console[/color]. You can use these to create reports that contain valuable information about an artifact. -To set them up, simply link them with a network configurator, set an artifact on top of the analyzer, and press the [color=#a4885c]Scan[/color] button. +To set them up, simply link them with a network configurator and set an artifact on top of the analyzer. Every station has at least one of these machines already set up. -Using the console, you can extract points from the artifact using the [color=#a4885c]Extract[/color] button. The amount of points you extract is based on how many new nodes have been activated, since last extracting. You can extract multiple times, there is no reason not to!!! +Use the console's [color=#a4885c]scan[/color] button to discover what stimulus the artifact needs and what its reaction will do. Scanning takes thirty seconds. + +Use the [color=#a4885c]print[/color] button to save the scan result, so you can refer to it later. + +Once you've discovered a new node, you can extract points from the artifact using the [color=#a4885c]Extract[/color] button. ## Assembling Artifacts -It is possible to gather multiple artifact fragments and assemble them into a working artifact. You can ask for these from Salvage, they usually find these while mining asteroids or on Expeditions. +It is possible to gather multiple artifact fragments and assemble them into a working artifact. You can ask for these from Salvage, who usually find these while mining asteroids or on Expeditions. + +## Traversal Bias + + + +Artifacts placed on top of a powered artifact analyzer are subjected to a bias which affects which node they will move to after being activated. The bias can be set in the artifact console. +There are two types of biases: +- [color=#a4885c]Up:[/color] favors nodes closer to the origin. Results in a decrease of depth. +- [color=#a4885c]Down:[/color] favors nodes farther away from the origin. Results in an increase of depth. diff --git a/Resources/ServerInfo/Guidebook/Security/Forensics.xml b/Resources/ServerInfo/Guidebook/Security/Forensics.xml index 2189488c6b2..3eb53b1e9ac 100644 --- a/Resources/ServerInfo/Guidebook/Security/Forensics.xml +++ b/Resources/ServerInfo/Guidebook/Security/Forensics.xml @@ -1,4 +1,4 @@ - + # Forensics There are a lot of tools to help you gather and examine the evidence at your disposal @@ -40,7 +40,7 @@ ## Fibers Whenenever people wearing gloves touch anything on the station, they are bound to leave behind some fibers. This complicates things, but nothing is unsolvable for a real detective. - There are up to [color=red]16[/color] different types of fibers possible. Can that stop you from solving the case? + There are up to [color=red]25[/color] different types of fibers possible. Can that stop you from solving the case? diff --git a/Resources/ServerInfo/Guidebook/Service/Bartender.xml b/Resources/ServerInfo/Guidebook/Service/Bartender.xml index 060c39fca31..b7599fc0d1c 100644 --- a/Resources/ServerInfo/Guidebook/Service/Bartender.xml +++ b/Resources/ServerInfo/Guidebook/Service/Bartender.xml @@ -18,6 +18,7 @@ Don't forget containers to serve them in! + ## Drinks diff --git a/Resources/ServerInfo/Nyanotrasen/Guidebook/Epistemics/Altar.xml b/Resources/ServerInfo/Nyanotrasen/Guidebook/Epistemics/Altar.xml index c3b211d2964..540e15a7245 100644 --- a/Resources/ServerInfo/Nyanotrasen/Guidebook/Epistemics/Altar.xml +++ b/Resources/ServerInfo/Nyanotrasen/Guidebook/Epistemics/Altar.xml @@ -5,18 +5,11 @@ The chapel has a [color=#a4885c]sacrificial altar[/color]. To use it, a psionic humanoid must be placed on it, and someone with either psionics or clerical training must initiate the sacrifice. It appears in the context menu on the altar, which can be opened with the right mouse button by default. - -Once sacrificed, the psionic humanoid's soul is trapped inside a [color=#a4885c]soul crystal[/color]. This is not the end for them; they can still talk both vocally and telepathically, and this form is much harder to destroy. - - -10% of the time, the altar will spawn a powerful psionic item along with the soul crystal. This chance increases to 50% if the sacrifice was performed by someone with clerical training, such as the [color=#a4885c]chaplain[/color] or [color=#a4885c]mystagogue[/color]. + + +As a reward for sacrificing a psionic, glimmer will be lowered substantially and you will be given some loot. +Usually this is a few bluespace crystals, but you can also get a powerful psionic item. ## Golemancy - - - - -Soul crystals can be installed into [color=#a4885c]golems[/color] to give the soul a new body. Golems are bound to serve their master. As constructs, they do not need to eat, drink, or breathe. -Note that for wood golems, if plants are planted on top of their head, the plants will still need those things. - +[color=red]Note: Golemancy is not implemented yet. Once you sacrifice a psionic you can borg them with an MMI.[/color] diff --git a/Resources/ServerInfo/Nyanotrasen/Guidebook/Epistemics/Psionics.xml b/Resources/ServerInfo/Nyanotrasen/Guidebook/Epistemics/Psionics.xml deleted file mode 100644 index 2911dae1557..00000000000 --- a/Resources/ServerInfo/Nyanotrasen/Guidebook/Epistemics/Psionics.xml +++ /dev/null @@ -1,73 +0,0 @@ - -# Psionics -[color=#a4885c]Psionics[/color] are mental abilities that interface with the [color=#a4885c]noösphere[/color]. Humans have limited access to the noösphere's full potential, allowing some to find ways to command it. -The abilities originate from distorting a noöspheric imprint into a specific shape, a bit like a lock and key. This means that humans can only have a single ability at a time. -An imprint shaped for metapsionics will not work for invisibility, and vice versa. - - -Many other creatures are much more in tune with it than humans, allowing them to access more powerful psionics like [color=#a4885c]kineses[/color]. - -## Telepathy -All psionic entities have a shared telepathic communication channel. It's anonymized, so you never know who you are talking to. Statistically, it probably is not human. - -## Glimmer -[color=#a4885c]Glimmer[/color] is a more colloquial term for [color=#a4885c]noöspheric pressure[/color], measured in [color=#a4885c]milli-Psi (mΨ)[/color]. The noösphere can be considered analogous to an atmosphere. In a localized area, everything will equalize towards a certain pressure that's based off of the total energy in the system. -Note that unlike atmospheres, areas of noopsheric pressure do not operate by physical contigiousness, but mental. This means that areas with intertwined destinies will experience the same latent glimmer regardless of physical separation. - - -The [color=#a4885c]sophic scribe[/color] tracks glimmer. - - - - - - -Epistemics can build devices to interact with glimmer. These are usually the main determiners of where glimmer is going. -[color=#a4885c]Glimmer probers[/color] will increase glimmer, but directly generate research points without further input. [color=#a4885c]Glimmer drains[/color] simply drain glimmer at the cost of electricity. - -Use of psionics will increase glimmer, as will [color=#a4885c]noöspheric storms[/color]. - -## Discharges -Glimmer will occasionally discharge if it's above 100 mΨ, causing a wide range of effects based on just how high it is. The most common is giving all entities with psionic potential a small seizure, -which is something most people working on stations with an Epistemics department have grown used to. - -## Acquiring Psionics - - -Psionics can be acquired in a number of ways. The oracle will sometimes dispense a strange liquid called [color=#a4885c]lotophagoi oil[/color], which at high glimmer levels is guaranteed to give psionics. - -Random discharges may give you psionics as the seizure knocks your noöspheric imprint into just the right shape. - -[color=#a4885c]Space drugs[/color] are an easier to acquire but much weaker alternative to lotophagoi oil. - -## Psionic Insulation - - - - - -[color=#a4885c]Insulative clothing[/color] and [color=#a4885c]cryptobiolin[/color] will render you immune to psionics, but prevent you from using any you have. - - -Security has a more forcible option for insulative clothing. - -## Handling Glimmer Emergencies - -Probers should be turned off before glimmer exceeds 500 mΨ. - - -Glimmer drains are quite effective at draining glimmer, taking it out as fast as a prober can put it in. - - -Sacrificing psychics will reduce glimmer instantly by a decent amount. - - -Metabolizing 20u or more of [color=#a4885c]mindbreaker[/color] will remove psionics from a person, meaning they will not generate any more glimmer. - - -[color=#a4885c]Soulbreaker[/color] shells will remove psionics from psychics they hit. - - -[color=#a4885c]Ectoplasm[/color], combined in a beaker with equal parts water, ash, blood, and plasma, will produce a normality crystal when heated enough. [color=#fcdf03]Use a hot plate for this.[/color] - - diff --git a/Resources/ServerInfo/RedialAddresses.txt b/Resources/ServerInfo/RedialAddresses.txt deleted file mode 100644 index fd9d38e4987..00000000000 --- a/Resources/ServerInfo/RedialAddresses.txt +++ /dev/null @@ -1,5 +0,0 @@ -# 1. Use addresses in the format ss14://example.com:1212 or ss14s://example.com:1212 or ss14://192.168.0.1:1212 etc -# 2. Make sure that your server has hub.server_url CVar set so that it will not redial people to itself. -# 3. Put comments on their own line -# Mining Station -ss14://nfn.mooo.com:1213 diff --git a/Resources/ServerInfo/RedialAddressesCentral.txt b/Resources/ServerInfo/RedialAddressesCentral.txt deleted file mode 100644 index a38ce861097..00000000000 --- a/Resources/ServerInfo/RedialAddressesCentral.txt +++ /dev/null @@ -1,6 +0,0 @@ -# 1. Use addresses in the format ss14://example.moe:1212 or ss14s://example.moe:1212 or ss14://192.168.0.1:1212 etc -# 2. Make sure that your server has hub.server_url CVar set so that it will not redial people to itself. -# 3. Put comments on their own line -# This version contains only servers listed on the hub located at https://central.spacestation14.io/hub/ -# Mining Station -ss14://nfn.mooo.com:1213 \ No newline at end of file diff --git a/Resources/Textures/Clothing/Back/etherealteleporter.rsi/equipped-BACKPACK.png b/Resources/Textures/Clothing/Back/etherealteleporter.rsi/equipped-BACKPACK.png new file mode 100644 index 00000000000..7496c91c550 Binary files /dev/null and b/Resources/Textures/Clothing/Back/etherealteleporter.rsi/equipped-BACKPACK.png differ diff --git a/Resources/Textures/Clothing/Back/etherealteleporter.rsi/icon.png b/Resources/Textures/Clothing/Back/etherealteleporter.rsi/icon.png new file mode 100644 index 00000000000..265318a96f5 Binary files /dev/null and b/Resources/Textures/Clothing/Back/etherealteleporter.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Back/etherealteleporter.rsi/meta.json b/Resources/Textures/Clothing/Back/etherealteleporter.rsi/meta.json new file mode 100644 index 00000000000..e4f5aa0f920 --- /dev/null +++ b/Resources/Textures/Clothing/Back/etherealteleporter.rsi/meta.json @@ -0,0 +1,56 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/ParadiseSS13/Paradise/blob/master/icons/mob/clothing/back.dmi", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-BACKPACK", + "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 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Clothing/Eyes/Glasses/etherealgoogles.rsi/equipped-EYES.png b/Resources/Textures/Clothing/Eyes/Glasses/etherealgoogles.rsi/equipped-EYES.png new file mode 100644 index 00000000000..39fafeb1449 Binary files /dev/null and b/Resources/Textures/Clothing/Eyes/Glasses/etherealgoogles.rsi/equipped-EYES.png differ diff --git a/Resources/Textures/Clothing/Eyes/Glasses/etherealgoogles.rsi/icon.png b/Resources/Textures/Clothing/Eyes/Glasses/etherealgoogles.rsi/icon.png new file mode 100644 index 00000000000..8ef5aa68d09 Binary files /dev/null and b/Resources/Textures/Clothing/Eyes/Glasses/etherealgoogles.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Eyes/Glasses/etherealgoogles.rsi/inhand-left.png b/Resources/Textures/Clothing/Eyes/Glasses/etherealgoogles.rsi/inhand-left.png new file mode 100644 index 00000000000..7ecbd93e8ae Binary files /dev/null and b/Resources/Textures/Clothing/Eyes/Glasses/etherealgoogles.rsi/inhand-left.png differ diff --git a/Resources/Textures/Clothing/Eyes/Glasses/etherealgoogles.rsi/inhand-right.png b/Resources/Textures/Clothing/Eyes/Glasses/etherealgoogles.rsi/inhand-right.png new file mode 100644 index 00000000000..26fd8e57a42 Binary files /dev/null and b/Resources/Textures/Clothing/Eyes/Glasses/etherealgoogles.rsi/inhand-right.png differ diff --git a/Resources/Textures/Clothing/Eyes/Glasses/etherealgoogles.rsi/meta.json b/Resources/Textures/Clothing/Eyes/Glasses/etherealgoogles.rsi/meta.json new file mode 100644 index 00000000000..555efbc7daa --- /dev/null +++ b/Resources/Textures/Clothing/Eyes/Glasses/etherealgoogles.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "JustAnOrange", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-EYES", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/Eyes/Hud/syndagent.rsi/equipped-EYES.png b/Resources/Textures/Clothing/Eyes/Hud/syndagent.rsi/equipped-EYES.png new file mode 100644 index 00000000000..84979d10972 Binary files /dev/null and b/Resources/Textures/Clothing/Eyes/Hud/syndagent.rsi/equipped-EYES.png differ diff --git a/Resources/Textures/Clothing/Eyes/Hud/syndagent.rsi/icon.png b/Resources/Textures/Clothing/Eyes/Hud/syndagent.rsi/icon.png new file mode 100644 index 00000000000..900b438c7e2 Binary files /dev/null and b/Resources/Textures/Clothing/Eyes/Hud/syndagent.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Eyes/Hud/syndagent.rsi/inhand-left.png b/Resources/Textures/Clothing/Eyes/Hud/syndagent.rsi/inhand-left.png new file mode 100644 index 00000000000..b888ce227ab Binary files /dev/null and b/Resources/Textures/Clothing/Eyes/Hud/syndagent.rsi/inhand-left.png differ diff --git a/Resources/Textures/Clothing/Eyes/Hud/syndagent.rsi/inhand-right.png b/Resources/Textures/Clothing/Eyes/Hud/syndagent.rsi/inhand-right.png new file mode 100644 index 00000000000..0e248905fbf Binary files /dev/null and b/Resources/Textures/Clothing/Eyes/Hud/syndagent.rsi/inhand-right.png differ diff --git a/Resources/Textures/Clothing/Eyes/Hud/syndagent.rsi/meta.json b/Resources/Textures/Clothing/Eyes/Hud/syndagent.rsi/meta.json new file mode 100644 index 00000000000..7426dc9306c --- /dev/null +++ b/Resources/Textures/Clothing/Eyes/Hud/syndagent.rsi/meta.json @@ -0,0 +1,31 @@ +{ + "version": 1, +<<<<<<<< HEAD:Resources/Textures/_Nuclear14/Clothing/Hands/Gloves/brownbikergloves.rsi/meta.json + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/54ecdcc05bcaf335489938b1253a2a733ba12271", +======== + "license": "CC-BY-SA-3.0", + "copyright": "Made by IntegerTempest, edited by Golinth", +>>>>>>>> EE_Upstream/master:Resources/Textures/Clothing/Eyes/Hud/syndagent.rsi/meta.json + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-EYES", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/Hands/Gloves/combat.rsi/equipped-HAND.png b/Resources/Textures/Clothing/Hands/Gloves/combat.rsi/equipped-HAND.png new file mode 100644 index 00000000000..7ca224617c0 Binary files /dev/null and b/Resources/Textures/Clothing/Hands/Gloves/combat.rsi/equipped-HAND.png differ diff --git a/Resources/Textures/Clothing/Hands/Gloves/combat.rsi/icon.png b/Resources/Textures/Clothing/Hands/Gloves/combat.rsi/icon.png new file mode 100644 index 00000000000..eedef5290db Binary files /dev/null and b/Resources/Textures/Clothing/Hands/Gloves/combat.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Hands/Gloves/combat.rsi/inhand-left.png b/Resources/Textures/Clothing/Hands/Gloves/combat.rsi/inhand-left.png new file mode 100644 index 00000000000..2e6ce0b9b9f Binary files /dev/null and b/Resources/Textures/Clothing/Hands/Gloves/combat.rsi/inhand-left.png differ diff --git a/Resources/Textures/Clothing/Hands/Gloves/combat.rsi/inhand-right.png b/Resources/Textures/Clothing/Hands/Gloves/combat.rsi/inhand-right.png new file mode 100644 index 00000000000..41ca0dddfb5 Binary files /dev/null and b/Resources/Textures/Clothing/Hands/Gloves/combat.rsi/inhand-right.png differ diff --git a/Resources/Textures/Clothing/Hands/Gloves/combat.rsi/meta.json b/Resources/Textures/Clothing/Hands/Gloves/combat.rsi/meta.json new file mode 100644 index 00000000000..1ad417f8f1b --- /dev/null +++ b/Resources/Textures/Clothing/Hands/Gloves/combat.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Sprited by OnsenCapy (NamelessName on Discord)", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-HAND", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/Head/Bandanas/black.rsi/equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Bandanas/black.rsi/equipped-HELMET-vox.png new file mode 100644 index 00000000000..b74049130c7 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Bandanas/black.rsi/equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Bandanas/black.rsi/equipped-MASK-vox.png b/Resources/Textures/Clothing/Head/Bandanas/black.rsi/equipped-MASK-vox.png new file mode 100644 index 00000000000..a3def50f88e Binary files /dev/null and b/Resources/Textures/Clothing/Head/Bandanas/black.rsi/equipped-MASK-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Bandanas/black.rsi/meta.json b/Resources/Textures/Clothing/Head/Bandanas/black.rsi/meta.json index a5553690327..a39a46ac810 100644 --- a/Resources/Textures/Clothing/Head/Bandanas/black.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Bandanas/black.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. equipped-MASK-vox & equipped-HELMET-vox states taken from Paradise at https://github.com/ParadiseSS13/Paradise/blob/bc095ad398790a2b718b2bab4f2157cdd80a51da/icons/mob/clothing/species/vox/mask.dmi", "size": { "x": 32, "y": 32 @@ -17,10 +17,18 @@ "name": "equipped-HELMET", "directions": 4 }, + { + "name": "equipped-HELMET-vox", + "directions": 4 + }, { "name": "equipped-MASK", "directions": 4 }, + { + "name": "equipped-MASK-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/Head/Bandanas/blue.rsi/equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Bandanas/blue.rsi/equipped-HELMET-vox.png new file mode 100644 index 00000000000..72664323727 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Bandanas/blue.rsi/equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Bandanas/blue.rsi/equipped-MASK-vox.png b/Resources/Textures/Clothing/Head/Bandanas/blue.rsi/equipped-MASK-vox.png new file mode 100644 index 00000000000..6bc5266367f Binary files /dev/null and b/Resources/Textures/Clothing/Head/Bandanas/blue.rsi/equipped-MASK-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Bandanas/blue.rsi/meta.json b/Resources/Textures/Clothing/Head/Bandanas/blue.rsi/meta.json index a5553690327..a39a46ac810 100644 --- a/Resources/Textures/Clothing/Head/Bandanas/blue.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Bandanas/blue.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. equipped-MASK-vox & equipped-HELMET-vox states taken from Paradise at https://github.com/ParadiseSS13/Paradise/blob/bc095ad398790a2b718b2bab4f2157cdd80a51da/icons/mob/clothing/species/vox/mask.dmi", "size": { "x": 32, "y": 32 @@ -17,10 +17,18 @@ "name": "equipped-HELMET", "directions": 4 }, + { + "name": "equipped-HELMET-vox", + "directions": 4 + }, { "name": "equipped-MASK", "directions": 4 }, + { + "name": "equipped-MASK-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/Head/Bandanas/botany.rsi/equipped-HELMET-hamster.png b/Resources/Textures/Clothing/Head/Bandanas/botany.rsi/equipped-HELMET-hamster.png deleted file mode 100644 index 3b89ea8bdfd..00000000000 Binary files a/Resources/Textures/Clothing/Head/Bandanas/botany.rsi/equipped-HELMET-hamster.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Bandanas/botany.rsi/equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Bandanas/botany.rsi/equipped-HELMET-vox.png new file mode 100644 index 00000000000..c576b30f47c Binary files /dev/null and b/Resources/Textures/Clothing/Head/Bandanas/botany.rsi/equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Bandanas/botany.rsi/equipped-MASK-vox.png b/Resources/Textures/Clothing/Head/Bandanas/botany.rsi/equipped-MASK-vox.png new file mode 100644 index 00000000000..378a1a3c19f Binary files /dev/null and b/Resources/Textures/Clothing/Head/Bandanas/botany.rsi/equipped-MASK-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Bandanas/botany.rsi/meta.json b/Resources/Textures/Clothing/Head/Bandanas/botany.rsi/meta.json index a9b3b1556d9..a39a46ac810 100644 --- a/Resources/Textures/Clothing/Head/Bandanas/botany.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Bandanas/botany.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. equipped-MASK-vox & equipped-HELMET-vox states taken from Paradise at https://github.com/ParadiseSS13/Paradise/blob/bc095ad398790a2b718b2bab4f2157cdd80a51da/icons/mob/clothing/species/vox/mask.dmi", "size": { "x": 32, "y": 32 @@ -18,13 +18,17 @@ "directions": 4 }, { - "name": "equipped-HELMET-hamster", + "name": "equipped-HELMET-vox", "directions": 4 }, { "name": "equipped-MASK", "directions": 4 }, + { + "name": "equipped-MASK-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/Head/Bandanas/gold.rsi/equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Bandanas/gold.rsi/equipped-HELMET-vox.png new file mode 100644 index 00000000000..5189f62e251 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Bandanas/gold.rsi/equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Bandanas/gold.rsi/equipped-MASK-vox.png b/Resources/Textures/Clothing/Head/Bandanas/gold.rsi/equipped-MASK-vox.png new file mode 100644 index 00000000000..616bb8eeb3c Binary files /dev/null and b/Resources/Textures/Clothing/Head/Bandanas/gold.rsi/equipped-MASK-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Bandanas/gold.rsi/meta.json b/Resources/Textures/Clothing/Head/Bandanas/gold.rsi/meta.json index a5553690327..a39a46ac810 100644 --- a/Resources/Textures/Clothing/Head/Bandanas/gold.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Bandanas/gold.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. equipped-MASK-vox & equipped-HELMET-vox states taken from Paradise at https://github.com/ParadiseSS13/Paradise/blob/bc095ad398790a2b718b2bab4f2157cdd80a51da/icons/mob/clothing/species/vox/mask.dmi", "size": { "x": 32, "y": 32 @@ -17,10 +17,18 @@ "name": "equipped-HELMET", "directions": 4 }, + { + "name": "equipped-HELMET-vox", + "directions": 4 + }, { "name": "equipped-MASK", "directions": 4 }, + { + "name": "equipped-MASK-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/Head/Bandanas/green.rsi/equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Bandanas/green.rsi/equipped-HELMET-vox.png new file mode 100644 index 00000000000..ed4c08a3257 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Bandanas/green.rsi/equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Bandanas/green.rsi/equipped-MASK-vox.png b/Resources/Textures/Clothing/Head/Bandanas/green.rsi/equipped-MASK-vox.png new file mode 100644 index 00000000000..958bcdf0ea5 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Bandanas/green.rsi/equipped-MASK-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Bandanas/green.rsi/meta.json b/Resources/Textures/Clothing/Head/Bandanas/green.rsi/meta.json index a5553690327..ef97b40b361 100644 --- a/Resources/Textures/Clothing/Head/Bandanas/green.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Bandanas/green.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. equipped-MASK-vox & equipped-HELMET-vox states taken from Paradise at https://github.com/ParadiseSS13/Paradise/blob/bc095ad398790a2b718b2bab4f2157cdd80a51da/icons/mob/clothing/species/vox/mask.dmi", "size": { "x": 32, "y": 32 @@ -21,6 +21,14 @@ "name": "equipped-MASK", "directions": 4 }, + { + "name": "equipped-HELMET-vox", + "directions": 4 + }, + { + "name": "equipped-MASK-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/Head/Bandanas/grey.rsi/equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Bandanas/grey.rsi/equipped-HELMET-vox.png new file mode 100644 index 00000000000..92f305f183a Binary files /dev/null and b/Resources/Textures/Clothing/Head/Bandanas/grey.rsi/equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Bandanas/grey.rsi/equipped-MASK-vox.png b/Resources/Textures/Clothing/Head/Bandanas/grey.rsi/equipped-MASK-vox.png new file mode 100644 index 00000000000..5d2af65f4b2 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Bandanas/grey.rsi/equipped-MASK-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Bandanas/grey.rsi/meta.json b/Resources/Textures/Clothing/Head/Bandanas/grey.rsi/meta.json index a5553690327..a39a46ac810 100644 --- a/Resources/Textures/Clothing/Head/Bandanas/grey.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Bandanas/grey.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. equipped-MASK-vox & equipped-HELMET-vox states taken from Paradise at https://github.com/ParadiseSS13/Paradise/blob/bc095ad398790a2b718b2bab4f2157cdd80a51da/icons/mob/clothing/species/vox/mask.dmi", "size": { "x": 32, "y": 32 @@ -17,10 +17,18 @@ "name": "equipped-HELMET", "directions": 4 }, + { + "name": "equipped-HELMET-vox", + "directions": 4 + }, { "name": "equipped-MASK", "directions": 4 }, + { + "name": "equipped-MASK-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/Head/Bandanas/red.rsi/equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Bandanas/red.rsi/equipped-HELMET-vox.png new file mode 100644 index 00000000000..22df7888e7c Binary files /dev/null and b/Resources/Textures/Clothing/Head/Bandanas/red.rsi/equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Bandanas/red.rsi/equipped-MASK-vox.png b/Resources/Textures/Clothing/Head/Bandanas/red.rsi/equipped-MASK-vox.png new file mode 100644 index 00000000000..7cea36d5393 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Bandanas/red.rsi/equipped-MASK-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Bandanas/red.rsi/meta.json b/Resources/Textures/Clothing/Head/Bandanas/red.rsi/meta.json index a5553690327..a39a46ac810 100644 --- a/Resources/Textures/Clothing/Head/Bandanas/red.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Bandanas/red.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. equipped-MASK-vox & equipped-HELMET-vox states taken from Paradise at https://github.com/ParadiseSS13/Paradise/blob/bc095ad398790a2b718b2bab4f2157cdd80a51da/icons/mob/clothing/species/vox/mask.dmi", "size": { "x": 32, "y": 32 @@ -17,10 +17,18 @@ "name": "equipped-HELMET", "directions": 4 }, + { + "name": "equipped-HELMET-vox", + "directions": 4 + }, { "name": "equipped-MASK", "directions": 4 }, + { + "name": "equipped-MASK-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/Head/Bandanas/skull.rsi/equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Bandanas/skull.rsi/equipped-HELMET-vox.png new file mode 100644 index 00000000000..99ed4f9cc2f Binary files /dev/null and b/Resources/Textures/Clothing/Head/Bandanas/skull.rsi/equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Bandanas/skull.rsi/equipped-MASK-vox.png b/Resources/Textures/Clothing/Head/Bandanas/skull.rsi/equipped-MASK-vox.png new file mode 100644 index 00000000000..a5fdbe4aac0 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Bandanas/skull.rsi/equipped-MASK-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Bandanas/skull.rsi/meta.json b/Resources/Textures/Clothing/Head/Bandanas/skull.rsi/meta.json index a5553690327..96c7993dd35 100644 --- a/Resources/Textures/Clothing/Head/Bandanas/skull.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Bandanas/skull.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. equipped-MASK-vox & equipped-HELMET-vox states taken from Paradise at https://github.com/ParadiseSS13/Paradise/blob/bc095ad398790a2b718b2bab4f2157cdd80a51da/icons/mob/clothing/species/vox/mask.dmi and modified by Flareguy", "size": { "x": 32, "y": 32 @@ -17,10 +17,18 @@ "name": "equipped-HELMET", "directions": 4 }, + { + "name": "equipped-HELMET-vox", + "directions": 4 + }, { "name": "equipped-MASK", "directions": 4 }, + { + "name": "equipped-MASK-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertengineer.rsi/meta.json b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertengineer.rsi/meta.json index fe9f38cad4d..bcd0d726dcf 100644 --- a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertengineer.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertengineer.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from paradisestation at commit https://github.com/ParadiseSS13/Paradise/commit/f09526480788c2e18fff8c16c4318fd6b4272c10 inhands by peptide", + "copyright": "Taken from paradisestation at commit https://github.com/ParadiseSS13/Paradise/commit/f09526480788c2e18fff8c16c4318fd6b4272c10. Vox states by Flareguy for Space Station 14", "size": { "x": 32, "y": 32 @@ -18,11 +18,7 @@ "directions": 4 }, { - "name": "off-inhand-left", - "directions": 4 - }, - { - "name": "off-inhand-right", + "name": "off-equipped-HELMET-vox", "directions": 4 }, { @@ -30,11 +26,7 @@ "directions": 4 }, { - "name": "on-inhand-left", - "directions": 4 - }, - { - "name": "on-inhand-right", + "name": "on-equipped-HELMET-vox", "directions": 4 }, { diff --git a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertengineer.rsi/off-equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertengineer.rsi/off-equipped-HELMET-vox.png new file mode 100644 index 00000000000..e24011cc920 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertengineer.rsi/off-equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertengineer.rsi/off-inhand-left.png b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertengineer.rsi/off-inhand-left.png deleted file mode 100644 index 8617b5a239b..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertengineer.rsi/off-inhand-left.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertengineer.rsi/off-inhand-right.png b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertengineer.rsi/off-inhand-right.png deleted file mode 100644 index d205602ccf7..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertengineer.rsi/off-inhand-right.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertengineer.rsi/on-equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertengineer.rsi/on-equipped-HELMET-vox.png new file mode 100644 index 00000000000..5ad3f9c79a9 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertengineer.rsi/on-equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertengineer.rsi/on-inhand-left.png b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertengineer.rsi/on-inhand-left.png deleted file mode 100644 index 22a6c42d8f4..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertengineer.rsi/on-inhand-left.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertengineer.rsi/on-inhand-right.png b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertengineer.rsi/on-inhand-right.png deleted file mode 100644 index a204bb0a787..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertengineer.rsi/on-inhand-right.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertjanitor.rsi/meta.json b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertjanitor.rsi/meta.json index fe9f38cad4d..bcd0d726dcf 100644 --- a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertjanitor.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertjanitor.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from paradisestation at commit https://github.com/ParadiseSS13/Paradise/commit/f09526480788c2e18fff8c16c4318fd6b4272c10 inhands by peptide", + "copyright": "Taken from paradisestation at commit https://github.com/ParadiseSS13/Paradise/commit/f09526480788c2e18fff8c16c4318fd6b4272c10. Vox states by Flareguy for Space Station 14", "size": { "x": 32, "y": 32 @@ -18,11 +18,7 @@ "directions": 4 }, { - "name": "off-inhand-left", - "directions": 4 - }, - { - "name": "off-inhand-right", + "name": "off-equipped-HELMET-vox", "directions": 4 }, { @@ -30,11 +26,7 @@ "directions": 4 }, { - "name": "on-inhand-left", - "directions": 4 - }, - { - "name": "on-inhand-right", + "name": "on-equipped-HELMET-vox", "directions": 4 }, { diff --git a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertjanitor.rsi/off-equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertjanitor.rsi/off-equipped-HELMET-vox.png new file mode 100644 index 00000000000..34d61a07cac Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertjanitor.rsi/off-equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertjanitor.rsi/off-inhand-left.png b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertjanitor.rsi/off-inhand-left.png deleted file mode 100644 index 8de04490735..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertjanitor.rsi/off-inhand-left.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertjanitor.rsi/off-inhand-right.png b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertjanitor.rsi/off-inhand-right.png deleted file mode 100644 index 7a96aed7319..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertjanitor.rsi/off-inhand-right.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertjanitor.rsi/on-equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertjanitor.rsi/on-equipped-HELMET-vox.png new file mode 100644 index 00000000000..99955187a8e Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertjanitor.rsi/on-equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertjanitor.rsi/on-inhand-left.png b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertjanitor.rsi/on-inhand-left.png deleted file mode 100644 index 030472239bb..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertjanitor.rsi/on-inhand-left.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertjanitor.rsi/on-inhand-right.png b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertjanitor.rsi/on-inhand-right.png deleted file mode 100644 index 270a9249dba..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertjanitor.rsi/on-inhand-right.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertleader.rsi/meta.json b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertleader.rsi/meta.json index fe9f38cad4d..bcd0d726dcf 100644 --- a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertleader.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertleader.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from paradisestation at commit https://github.com/ParadiseSS13/Paradise/commit/f09526480788c2e18fff8c16c4318fd6b4272c10 inhands by peptide", + "copyright": "Taken from paradisestation at commit https://github.com/ParadiseSS13/Paradise/commit/f09526480788c2e18fff8c16c4318fd6b4272c10. Vox states by Flareguy for Space Station 14", "size": { "x": 32, "y": 32 @@ -18,11 +18,7 @@ "directions": 4 }, { - "name": "off-inhand-left", - "directions": 4 - }, - { - "name": "off-inhand-right", + "name": "off-equipped-HELMET-vox", "directions": 4 }, { @@ -30,11 +26,7 @@ "directions": 4 }, { - "name": "on-inhand-left", - "directions": 4 - }, - { - "name": "on-inhand-right", + "name": "on-equipped-HELMET-vox", "directions": 4 }, { diff --git a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertleader.rsi/off-equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertleader.rsi/off-equipped-HELMET-vox.png new file mode 100644 index 00000000000..f79fe95b573 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertleader.rsi/off-equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertleader.rsi/off-inhand-left.png b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertleader.rsi/off-inhand-left.png deleted file mode 100644 index b53973feec2..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertleader.rsi/off-inhand-left.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertleader.rsi/off-inhand-right.png b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertleader.rsi/off-inhand-right.png deleted file mode 100644 index 0f534f88b1f..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertleader.rsi/off-inhand-right.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertleader.rsi/on-equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertleader.rsi/on-equipped-HELMET-vox.png new file mode 100644 index 00000000000..f94eecb4113 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertleader.rsi/on-equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertleader.rsi/on-inhand-left.png b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertleader.rsi/on-inhand-left.png deleted file mode 100644 index 819ca15f448..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertleader.rsi/on-inhand-left.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertleader.rsi/on-inhand-right.png b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertleader.rsi/on-inhand-right.png deleted file mode 100644 index 848bfcfe88b..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertleader.rsi/on-inhand-right.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertmedical.rsi/meta.json b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertmedical.rsi/meta.json index fe9f38cad4d..bcd0d726dcf 100644 --- a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertmedical.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertmedical.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from paradisestation at commit https://github.com/ParadiseSS13/Paradise/commit/f09526480788c2e18fff8c16c4318fd6b4272c10 inhands by peptide", + "copyright": "Taken from paradisestation at commit https://github.com/ParadiseSS13/Paradise/commit/f09526480788c2e18fff8c16c4318fd6b4272c10. Vox states by Flareguy for Space Station 14", "size": { "x": 32, "y": 32 @@ -18,11 +18,7 @@ "directions": 4 }, { - "name": "off-inhand-left", - "directions": 4 - }, - { - "name": "off-inhand-right", + "name": "off-equipped-HELMET-vox", "directions": 4 }, { @@ -30,11 +26,7 @@ "directions": 4 }, { - "name": "on-inhand-left", - "directions": 4 - }, - { - "name": "on-inhand-right", + "name": "on-equipped-HELMET-vox", "directions": 4 }, { diff --git a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertmedical.rsi/off-equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertmedical.rsi/off-equipped-HELMET-vox.png new file mode 100644 index 00000000000..17790bee542 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertmedical.rsi/off-equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertmedical.rsi/off-inhand-left.png b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertmedical.rsi/off-inhand-left.png deleted file mode 100644 index 7d3ce261575..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertmedical.rsi/off-inhand-left.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertmedical.rsi/off-inhand-right.png b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertmedical.rsi/off-inhand-right.png deleted file mode 100644 index 67f7494249b..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertmedical.rsi/off-inhand-right.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertmedical.rsi/on-equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertmedical.rsi/on-equipped-HELMET-vox.png new file mode 100644 index 00000000000..d25030e13a8 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertmedical.rsi/on-equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertmedical.rsi/on-equipped-HELMET.png b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertmedical.rsi/on-equipped-HELMET.png index 8f01538a7a6..486ae099690 100644 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertmedical.rsi/on-equipped-HELMET.png and b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertmedical.rsi/on-equipped-HELMET.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertmedical.rsi/on-inhand-left.png b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertmedical.rsi/on-inhand-left.png deleted file mode 100644 index 4eaae604cde..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertmedical.rsi/on-inhand-left.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertmedical.rsi/on-inhand-right.png b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertmedical.rsi/on-inhand-right.png deleted file mode 100644 index f5f2f5c6f70..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertmedical.rsi/on-inhand-right.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertsecurity.rsi/meta.json b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertsecurity.rsi/meta.json index fe9f38cad4d..bcd0d726dcf 100644 --- a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertsecurity.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertsecurity.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from paradisestation at commit https://github.com/ParadiseSS13/Paradise/commit/f09526480788c2e18fff8c16c4318fd6b4272c10 inhands by peptide", + "copyright": "Taken from paradisestation at commit https://github.com/ParadiseSS13/Paradise/commit/f09526480788c2e18fff8c16c4318fd6b4272c10. Vox states by Flareguy for Space Station 14", "size": { "x": 32, "y": 32 @@ -18,11 +18,7 @@ "directions": 4 }, { - "name": "off-inhand-left", - "directions": 4 - }, - { - "name": "off-inhand-right", + "name": "off-equipped-HELMET-vox", "directions": 4 }, { @@ -30,11 +26,7 @@ "directions": 4 }, { - "name": "on-inhand-left", - "directions": 4 - }, - { - "name": "on-inhand-right", + "name": "on-equipped-HELMET-vox", "directions": 4 }, { diff --git a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertsecurity.rsi/off-equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertsecurity.rsi/off-equipped-HELMET-vox.png new file mode 100644 index 00000000000..d300533c208 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertsecurity.rsi/off-equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertsecurity.rsi/off-inhand-left.png b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertsecurity.rsi/off-inhand-left.png deleted file mode 100644 index c7b53126d48..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertsecurity.rsi/off-inhand-left.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertsecurity.rsi/off-inhand-right.png b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertsecurity.rsi/off-inhand-right.png deleted file mode 100644 index b6be1feebb6..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertsecurity.rsi/off-inhand-right.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertsecurity.rsi/on-equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertsecurity.rsi/on-equipped-HELMET-vox.png new file mode 100644 index 00000000000..a9b18438721 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertsecurity.rsi/on-equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertsecurity.rsi/on-inhand-left.png b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertsecurity.rsi/on-inhand-left.png deleted file mode 100644 index 946a56c89a7..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertsecurity.rsi/on-inhand-left.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertsecurity.rsi/on-inhand-right.png b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertsecurity.rsi/on-inhand-right.png deleted file mode 100644 index e490de88da1..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertsecurity.rsi/on-inhand-right.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/equipped-head-light-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/equipped-head-light-vox.png new file mode 100644 index 00000000000..879ce40a74a Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/equipped-head-light-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/equipped-head-unshaded-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/equipped-head-unshaded-vox.png new file mode 100644 index 00000000000..40f2eca45a1 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/equipped-head-unshaded-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/equipped-head-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/equipped-head-vox.png new file mode 100644 index 00000000000..f61a157050a Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/equipped-head-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/inhand-left-light.png b/Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/inhand-left-light.png deleted file mode 100644 index 9ee768d5ee0..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/inhand-left-light.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/inhand-left-unshaded.png b/Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/inhand-left-unshaded.png deleted file mode 100644 index 8a7835b20d4..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/inhand-left-unshaded.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/inhand-left.png b/Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/inhand-left.png deleted file mode 100644 index e9ba55de1e0..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/inhand-left.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/inhand-right-light.png b/Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/inhand-right-light.png deleted file mode 100644 index 29906052373..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/inhand-right-light.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/inhand-right-unshaded.png b/Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/inhand-right-unshaded.png deleted file mode 100644 index 6c80725c0a7..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/inhand-right-unshaded.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/inhand-right.png b/Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/inhand-right.png deleted file mode 100644 index 45d73f73dfc..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/inhand-right.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/meta.json b/Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/meta.json index 93d9fece1d0..c24aa39b804 100644 --- a/Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Vox states made by Flareguy for SS14 | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d", "size": { "x": 32, "y": 32 @@ -32,27 +32,15 @@ "directions": 4 }, { - "name": "inhand-left", + "name": "equipped-head-unshaded-vox", "directions": 4 }, { - "name": "inhand-left-unshaded", + "name": "equipped-head-vox", "directions": 4 }, { - "name": "inhand-left-light", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - }, - { - "name": "inhand-right-unshaded", - "directions": 4 - }, - { - "name": "inhand-right-light", + "name": "equipped-head-light-vox", "directions": 4 }, { diff --git a/Resources/Textures/Clothing/Head/Hardsuits/capspace.rsi/meta.json b/Resources/Textures/Clothing/Head/Hardsuits/capspace.rsi/meta.json index cc8edd38197..1ccf847b3ed 100644 --- a/Resources/Textures/Clothing/Head/Hardsuits/capspace.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Hardsuits/capspace.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e, modified by Emisse for SS14", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e, modified by Emisse for SS14. Vox states by Flareguy for SS14", "size": { "x": 32, "y": 32 @@ -18,11 +18,7 @@ "directions": 4 }, { - "name": "off-inhand-left", - "directions": 4 - }, - { - "name": "off-inhand-right", + "name": "off-equipped-HELMET-vox", "directions": 4 }, { @@ -30,11 +26,7 @@ "directions": 4 }, { - "name": "on-inhand-left", - "directions": 4 - }, - { - "name": "on-inhand-right", + "name": "on-equipped-HELMET-vox", "directions": 4 }, { diff --git a/Resources/Textures/Clothing/Head/Hardsuits/capspace.rsi/off-equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/capspace.rsi/off-equipped-HELMET-vox.png new file mode 100644 index 00000000000..f02e33c6584 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/capspace.rsi/off-equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/capspace.rsi/off-inhand-left.png b/Resources/Textures/Clothing/Head/Hardsuits/capspace.rsi/off-inhand-left.png deleted file mode 100644 index 5216ba5dd92..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/capspace.rsi/off-inhand-left.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/capspace.rsi/off-inhand-right.png b/Resources/Textures/Clothing/Head/Hardsuits/capspace.rsi/off-inhand-right.png deleted file mode 100644 index 2ffe013c121..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/capspace.rsi/off-inhand-right.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/capspace.rsi/on-equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/capspace.rsi/on-equipped-HELMET-vox.png new file mode 100644 index 00000000000..9a0101f09a2 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/capspace.rsi/on-equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/capspace.rsi/on-inhand-left.png b/Resources/Textures/Clothing/Head/Hardsuits/capspace.rsi/on-inhand-left.png deleted file mode 100644 index 6a5d075d808..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/capspace.rsi/on-inhand-left.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/capspace.rsi/on-inhand-right.png b/Resources/Textures/Clothing/Head/Hardsuits/capspace.rsi/on-inhand-right.png deleted file mode 100644 index 25796fc014d..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/capspace.rsi/on-inhand-right.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/cburn.rsi/equipped-head-unshaded-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/cburn.rsi/equipped-head-unshaded-vox.png new file mode 100644 index 00000000000..40d1f9a0c62 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/cburn.rsi/equipped-head-unshaded-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/cburn.rsi/equipped-head-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/cburn.rsi/equipped-head-vox.png new file mode 100644 index 00000000000..cc2fa16917f Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/cburn.rsi/equipped-head-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/cburn.rsi/inhand-left-unshaded.png b/Resources/Textures/Clothing/Head/Hardsuits/cburn.rsi/inhand-left-unshaded.png deleted file mode 100644 index 60ca0efa13b..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/cburn.rsi/inhand-left-unshaded.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/cburn.rsi/inhand-left.png b/Resources/Textures/Clothing/Head/Hardsuits/cburn.rsi/inhand-left.png deleted file mode 100644 index 43f27a890f2..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/cburn.rsi/inhand-left.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/cburn.rsi/inhand-right-unshaded.png b/Resources/Textures/Clothing/Head/Hardsuits/cburn.rsi/inhand-right-unshaded.png deleted file mode 100644 index 118914c8d3f..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/cburn.rsi/inhand-right-unshaded.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/cburn.rsi/inhand-right.png b/Resources/Textures/Clothing/Head/Hardsuits/cburn.rsi/inhand-right.png deleted file mode 100644 index 602020b2769..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/cburn.rsi/inhand-right.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/cburn.rsi/meta.json b/Resources/Textures/Clothing/Head/Hardsuits/cburn.rsi/meta.json index 16f509fa99f..1df9c2ddbf6 100644 --- a/Resources/Textures/Clothing/Head/Hardsuits/cburn.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Hardsuits/cburn.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Made by EmoGarbage404", + "copyright": "Made by EmoGarbage404. Vox states by Flareguy for SS14", "size": { "x": 32, "y": 32 @@ -28,19 +28,11 @@ "directions": 4 }, { - "name": "inhand-left", + "name": "equipped-head-vox", "directions": 4 }, { - "name": "inhand-left-unshaded", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - }, - { - "name": "inhand-right-unshaded", + "name": "equipped-head-unshaded-vox", "directions": 4 } ] diff --git a/Resources/Textures/Clothing/Head/Hardsuits/clown.rsi/meta.json b/Resources/Textures/Clothing/Head/Hardsuits/clown.rsi/meta.json index 5a77b01e501..5956a9b0f4f 100644 --- a/Resources/Textures/Clothing/Head/Hardsuits/clown.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Hardsuits/clown.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e, modified by brainfood1183 (github)", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e, modified by brainfood1183 (github). Vox state by Flareguy for SS14", "size": { "x": 32, "y": 32 @@ -20,6 +20,14 @@ { "name": "on-equipped-HELMET", "directions": 4 + }, + { + "name": "off-equipped-HELMET-vox", + "directions": 4 + }, + { + "name": "on-equipped-HELMET-vox", + "directions": 4 } ] } diff --git a/Resources/Textures/Clothing/Head/Hardsuits/clown.rsi/off-equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/clown.rsi/off-equipped-HELMET-vox.png new file mode 100644 index 00000000000..a974f19a2bd Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/clown.rsi/off-equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/clown.rsi/on-equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/clown.rsi/on-equipped-HELMET-vox.png new file mode 100644 index 00000000000..88ee1fbad61 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/clown.rsi/on-equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/cybersun.rsi/equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/cybersun.rsi/equipped-HELMET-vox.png new file mode 100644 index 00000000000..02363a7faac Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/cybersun.rsi/equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/cybersun.rsi/inhand-left.png b/Resources/Textures/Clothing/Head/Hardsuits/cybersun.rsi/inhand-left.png deleted file mode 100644 index ee1c8d1c4b6..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/cybersun.rsi/inhand-left.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/cybersun.rsi/inhand-right.png b/Resources/Textures/Clothing/Head/Hardsuits/cybersun.rsi/inhand-right.png deleted file mode 100644 index fa19eea1f7b..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/cybersun.rsi/inhand-right.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/cybersun.rsi/meta.json b/Resources/Textures/Clothing/Head/Hardsuits/cybersun.rsi/meta.json index f6b86138919..0c1323d3f01 100644 --- a/Resources/Textures/Clothing/Head/Hardsuits/cybersun.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Hardsuits/cybersun.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from Paradise SS13 at commit https://github.com/ParadiseSS13/Paradise/commit/a67c929b7394f78e7787114457ba42f4df6cc3a1", + "copyright": "Taken from Paradise SS13 at commit https://github.com/ParadiseSS13/Paradise/commit/a67c929b7394f78e7787114457ba42f4df6cc3a1. Vox state by Flareguy for SS14", "size": { "x": 32, "y": 32 @@ -15,16 +15,12 @@ "directions": 4 }, { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", + "name": "equipped-HELMET-harpy", "directions": 4 }, { - "name": "equipped-HELMET-harpy", - "directions": 4 + "name": "equipped-HELMET-vox", + "directions": 4 } ] } diff --git a/Resources/Textures/Clothing/Head/Hardsuits/deathsquad.rsi/equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/deathsquad.rsi/equipped-HELMET-vox.png new file mode 100644 index 00000000000..1a7ed3b8666 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/deathsquad.rsi/equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/deathsquad.rsi/inhand-left.png b/Resources/Textures/Clothing/Head/Hardsuits/deathsquad.rsi/inhand-left.png deleted file mode 100644 index 6be2c34d768..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/deathsquad.rsi/inhand-left.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/deathsquad.rsi/inhand-right.png b/Resources/Textures/Clothing/Head/Hardsuits/deathsquad.rsi/inhand-right.png deleted file mode 100644 index e3c056ada0e..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/deathsquad.rsi/inhand-right.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/deathsquad.rsi/meta.json b/Resources/Textures/Clothing/Head/Hardsuits/deathsquad.rsi/meta.json index 83e8e1a7881..782ce631af8 100644 --- a/Resources/Textures/Clothing/Head/Hardsuits/deathsquad.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Hardsuits/deathsquad.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e | vulpkanin versions taken from https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13/commit/091d9ec00f186052b87bd65125e896f78faefe38 and edited by Floofers", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e | vulpkanin versions taken from https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13/commit/091d9ec00f186052b87bd65125e896f78faefe38 and edited by Floofers | Vox state by Flareguy", "size": { "x": 32, "y": 32 @@ -15,15 +15,11 @@ "directions": 4 }, { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", + "name": "equipped-HELMET-vulpkanin", "directions": 4 }, { - "name": "equipped-HELMET-vulpkanin", + "name": "equipped-HELMET-vox", "directions": 4 } ] diff --git a/Resources/Textures/Clothing/Head/Hardsuits/engineering-white.rsi/meta.json b/Resources/Textures/Clothing/Head/Hardsuits/engineering-white.rsi/meta.json index 1ac1729cd2d..7dbf66ad67c 100644 --- a/Resources/Textures/Clothing/Head/Hardsuits/engineering-white.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Hardsuits/engineering-white.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e | vulpkanin versions taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Vox states by Flareguy for Space Station 14 | vulpkanin versions taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d | Vox states by Flareguy for Space Station 14", "size": { "x": 32, "y": 32 @@ -18,34 +18,26 @@ "directions": 4 }, { - "name": "off-inhand-left", - "directions": 4 - }, - { - "name": "off-inhand-right", - "directions": 4 - }, - { - "name": "on-equipped-HELMET", - "directions": 4 - }, - { - "name": "on-inhand-left", - "directions": 4 + "name": "on-equipped-HELMET", + "directions": 4 }, { - "name": "on-inhand-right", + "name": "on-equipped-HELMET-vulpkanin", "directions": 4 }, { - "name": "on-equipped-HELMET-vulpkanin", + "name": "off-equipped-HELMET-vulpkanin", "directions": 4 }, { - "name": "off-equipped-HELMET-vulpkanin", + "name": "on-equipped-HELMET-vox", "directions": 4 - }, - { + }, + { + "name": "off-equipped-HELMET-vox", + "directions": 4 + }, + { "name": "on-equipped-HELMET-harpy", "directions": 4 }, diff --git a/Resources/Textures/Clothing/Head/Hardsuits/engineering-white.rsi/off-equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/engineering-white.rsi/off-equipped-HELMET-vox.png new file mode 100644 index 00000000000..683d6ce97d6 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/engineering-white.rsi/off-equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/engineering-white.rsi/off-inhand-left.png b/Resources/Textures/Clothing/Head/Hardsuits/engineering-white.rsi/off-inhand-left.png deleted file mode 100644 index f7375fd6002..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/engineering-white.rsi/off-inhand-left.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/engineering-white.rsi/off-inhand-right.png b/Resources/Textures/Clothing/Head/Hardsuits/engineering-white.rsi/off-inhand-right.png deleted file mode 100644 index c2adc46cdb1..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/engineering-white.rsi/off-inhand-right.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/engineering-white.rsi/on-equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/engineering-white.rsi/on-equipped-HELMET-vox.png new file mode 100644 index 00000000000..574b3d985b7 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/engineering-white.rsi/on-equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/engineering-white.rsi/on-inhand-left.png b/Resources/Textures/Clothing/Head/Hardsuits/engineering-white.rsi/on-inhand-left.png deleted file mode 100644 index 7c6e7831c89..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/engineering-white.rsi/on-inhand-left.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/engineering-white.rsi/on-inhand-right.png b/Resources/Textures/Clothing/Head/Hardsuits/engineering-white.rsi/on-inhand-right.png deleted file mode 100644 index 5ee7bc104c3..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/engineering-white.rsi/on-inhand-right.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/engineering.rsi/meta.json b/Resources/Textures/Clothing/Head/Hardsuits/engineering.rsi/meta.json index 4dae2c687da..f20b167c368 100644 --- a/Resources/Textures/Clothing/Head/Hardsuits/engineering.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Hardsuits/engineering.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e | vulpkanin versions taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Vox states by Flareguy for Space Station 14 | vulpkanin versions taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d | Vox states by Flareguy for Space Station 14", "size": { "x": 32, "y": 32 @@ -18,25 +18,17 @@ "directions": 4 }, { - "name": "off-inhand-left", + "name": "off-equipped-HELMET-vox", "directions": 4 }, { - "name": "off-inhand-right", - "directions": 4 + "name": "on-equipped-HELMET-vox", + "directions": 4 }, { "name": "on-equipped-HELMET", "directions": 4 }, - { - "name": "on-inhand-left", - "directions": 4 - }, - { - "name": "on-inhand-right", - "directions": 4 - }, { "name": "on-equipped-HELMET-vulpkanin", "directions": 4 diff --git a/Resources/Textures/Clothing/Head/Hardsuits/engineering.rsi/off-equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/engineering.rsi/off-equipped-HELMET-vox.png new file mode 100644 index 00000000000..900ed95dc03 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/engineering.rsi/off-equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/engineering.rsi/off-inhand-left.png b/Resources/Textures/Clothing/Head/Hardsuits/engineering.rsi/off-inhand-left.png deleted file mode 100644 index cafca9a938e..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/engineering.rsi/off-inhand-left.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/engineering.rsi/off-inhand-right.png b/Resources/Textures/Clothing/Head/Hardsuits/engineering.rsi/off-inhand-right.png deleted file mode 100644 index 9645b59e2d1..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/engineering.rsi/off-inhand-right.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/engineering.rsi/on-equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/engineering.rsi/on-equipped-HELMET-vox.png new file mode 100644 index 00000000000..1a40bc3a266 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/engineering.rsi/on-equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/engineering.rsi/on-inhand-left.png b/Resources/Textures/Clothing/Head/Hardsuits/engineering.rsi/on-inhand-left.png deleted file mode 100644 index bff16d72c49..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/engineering.rsi/on-inhand-left.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/engineering.rsi/on-inhand-right.png b/Resources/Textures/Clothing/Head/Hardsuits/engineering.rsi/on-inhand-right.png deleted file mode 100644 index 355977d540b..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/engineering.rsi/on-inhand-right.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/luxury.rsi/meta.json b/Resources/Textures/Clothing/Head/Hardsuits/luxury.rsi/meta.json index d431123de2b..d80c50a1c44 100644 --- a/Resources/Textures/Clothing/Head/Hardsuits/luxury.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Hardsuits/luxury.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Texture edit from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Texture edit from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Vox states by Flareguy for Space Station 14", "size": { "x": 32, "y": 32 @@ -17,24 +17,16 @@ "name": "off-equipped-HELMET", "directions": 4 }, - { - "name": "off-inhand-left", - "directions": 4 - }, - { - "name": "off-inhand-right", - "directions": 4 - }, { "name": "on-equipped-HELMET", "directions": 4 }, { - "name": "on-inhand-left", + "name": "off-equipped-HELMET-vox", "directions": 4 }, { - "name": "on-inhand-right", + "name": "on-equipped-HELMET-vox", "directions": 4 } ] diff --git a/Resources/Textures/Clothing/Head/Hardsuits/luxury.rsi/off-equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/luxury.rsi/off-equipped-HELMET-vox.png new file mode 100644 index 00000000000..efacfba7411 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/luxury.rsi/off-equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/luxury.rsi/off-inhand-left.png b/Resources/Textures/Clothing/Head/Hardsuits/luxury.rsi/off-inhand-left.png deleted file mode 100644 index b26ae9a31f0..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/luxury.rsi/off-inhand-left.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/luxury.rsi/off-inhand-right.png b/Resources/Textures/Clothing/Head/Hardsuits/luxury.rsi/off-inhand-right.png deleted file mode 100644 index fc0edd4a972..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/luxury.rsi/off-inhand-right.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/luxury.rsi/on-equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/luxury.rsi/on-equipped-HELMET-vox.png new file mode 100644 index 00000000000..09d835e9b9f Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/luxury.rsi/on-equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/luxury.rsi/on-inhand-left.png b/Resources/Textures/Clothing/Head/Hardsuits/luxury.rsi/on-inhand-left.png deleted file mode 100644 index 3f5034da6c0..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/luxury.rsi/on-inhand-left.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/luxury.rsi/on-inhand-right.png b/Resources/Textures/Clothing/Head/Hardsuits/luxury.rsi/on-inhand-right.png deleted file mode 100644 index 45776a03b8e..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/luxury.rsi/on-inhand-right.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/maxim.rsi/equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/maxim.rsi/equipped-HELMET-vox.png new file mode 100644 index 00000000000..11de602a6e9 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/maxim.rsi/equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/maxim.rsi/inhand-left.png b/Resources/Textures/Clothing/Head/Hardsuits/maxim.rsi/inhand-left.png deleted file mode 100644 index 81e8a07fdd2..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/maxim.rsi/inhand-left.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/maxim.rsi/inhand-right.png b/Resources/Textures/Clothing/Head/Hardsuits/maxim.rsi/inhand-right.png deleted file mode 100644 index e10648fd9b2..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/maxim.rsi/inhand-right.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/maxim.rsi/meta.json b/Resources/Textures/Clothing/Head/Hardsuits/maxim.rsi/meta.json index 2d5aaae8c75..2a085063a47 100644 --- a/Resources/Textures/Clothing/Head/Hardsuits/maxim.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Hardsuits/maxim.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/6b3f58d7de4d4e374282819a7001eaa9bde1676d", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/6b3f58d7de4d4e374282819a7001eaa9bde1676d. Vox state by Flareguy for Space Station 14", "size": { "x": 32, "y": 32 @@ -15,11 +15,7 @@ "directions": 4 }, { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", + "name": "equipped-HELMET-vox", "directions": 4 } ] diff --git a/Resources/Textures/Clothing/Head/Hardsuits/medical.rsi/meta.json b/Resources/Textures/Clothing/Head/Hardsuits/medical.rsi/meta.json index d168108fdf3..7954c0611e6 100644 --- a/Resources/Textures/Clothing/Head/Hardsuits/medical.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Hardsuits/medical.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Vox states by Flareguy for Space Station 14 | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d | Vox states by Flareguy for Space Station 14", "size": { "x": 32, "y": 32 @@ -14,28 +14,20 @@ "name": "icon-flash" }, { - "name": "off-equipped-HELMET", - "directions": 4 - }, - { - "name": "off-inhand-left", - "directions": 4 - }, + "name": "on-equipped-HELMET", + "directions": 4 + }, { - "name": "off-inhand-right", - "directions": 4 - }, - { - "name": "on-equipped-HELMET", + "name": "off-equipped-HELMET", "directions": 4 }, { - "name": "on-inhand-left", + "name": "on-equipped-HELMET-vox", "directions": 4 }, { - "name": "on-inhand-right", - "directions": 4 + "name": "off-equipped-HELMET-vox", + "directions": 4 }, { "name": "on-equipped-HELMET-vulpkanin", diff --git a/Resources/Textures/Clothing/Head/Hardsuits/medical.rsi/off-equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/medical.rsi/off-equipped-HELMET-vox.png new file mode 100644 index 00000000000..1952c3152d8 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/medical.rsi/off-equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/medical.rsi/off-inhand-left.png b/Resources/Textures/Clothing/Head/Hardsuits/medical.rsi/off-inhand-left.png deleted file mode 100644 index 8fbfbbf6c6a..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/medical.rsi/off-inhand-left.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/medical.rsi/off-inhand-right.png b/Resources/Textures/Clothing/Head/Hardsuits/medical.rsi/off-inhand-right.png deleted file mode 100644 index 035c6fc0619..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/medical.rsi/off-inhand-right.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/medical.rsi/on-equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/medical.rsi/on-equipped-HELMET-vox.png new file mode 100644 index 00000000000..3011afac41d Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/medical.rsi/on-equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/medical.rsi/on-inhand-left.png b/Resources/Textures/Clothing/Head/Hardsuits/medical.rsi/on-inhand-left.png deleted file mode 100644 index 85cbfb321a0..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/medical.rsi/on-inhand-left.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/medical.rsi/on-inhand-right.png b/Resources/Textures/Clothing/Head/Hardsuits/medical.rsi/on-inhand-right.png deleted file mode 100644 index c876fefb6c2..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/medical.rsi/on-inhand-right.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/piratecaptainhelm.rsi/equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/piratecaptainhelm.rsi/equipped-HELMET-vox.png new file mode 100644 index 00000000000..8d0cd093f3b Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/piratecaptainhelm.rsi/equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/piratecaptainhelm.rsi/meta.json b/Resources/Textures/Clothing/Head/Hardsuits/piratecaptainhelm.rsi/meta.json index 2244815b787..48f0cbb6153 100644 --- a/Resources/Textures/Clothing/Head/Hardsuits/piratecaptainhelm.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Hardsuits/piratecaptainhelm.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Made by brainfood1183 (github) for ss14", + "copyright": "Made by brainfood1183 (github) for ss14. Vox states by Flareguy for Space Station 14", "size": { "x": 32, "y": 32 @@ -13,6 +13,10 @@ { "name": "equipped-HELMET", "directions": 4 + }, + { + "name": "equipped-HELMET-vox", + "directions": 4 } ] } diff --git a/Resources/Textures/Clothing/Head/Hardsuits/pirateeva.rsi/equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/pirateeva.rsi/equipped-HELMET-vox.png new file mode 100644 index 00000000000..663733cfe82 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/pirateeva.rsi/equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/pirateeva.rsi/meta.json b/Resources/Textures/Clothing/Head/Hardsuits/pirateeva.rsi/meta.json index 2244815b787..5bb20fd0fb3 100644 --- a/Resources/Textures/Clothing/Head/Hardsuits/pirateeva.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Hardsuits/pirateeva.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Made by brainfood1183 (github) for ss14", + "copyright": "Made by brainfood1183 (github) for ss14. Vox state by Flareguy for Space Station 14", "size": { "x": 32, "y": 32 @@ -13,6 +13,10 @@ { "name": "equipped-HELMET", "directions": 4 + }, + { + "name": "equipped-HELMET-vox", + "directions": 4 } ] } diff --git a/Resources/Textures/Clothing/Head/Hardsuits/rd.rsi/meta.json b/Resources/Textures/Clothing/Head/Hardsuits/rd.rsi/meta.json index a2c357d43ff..db7f740811d 100644 --- a/Resources/Textures/Clothing/Head/Hardsuits/rd.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Hardsuits/rd.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e | vulpkanin versions taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Vox states made by Flareguy for SS14 | vulpkanin versions taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d | Vox states by Flareguy for Space Station 14", "size": { "x": 32, "y": 32 @@ -14,28 +14,20 @@ "name": "icon-flash" }, { - "name": "off-equipped-HELMET", - "directions": 4 - }, - { - "name": "off-inhand-left", - "directions": 4 + "name": "on-equipped-HELMET", + "directions": 4 }, { - "name": "off-inhand-right", - "directions": 4 - }, - { - "name": "on-equipped-HELMET", + "name": "off-equipped-HELMET", "directions": 4 }, { - "name": "on-inhand-left", + "name": "on-equipped-HELMET-vox", "directions": 4 }, { - "name": "on-inhand-right", - "directions": 4 + "name": "off-equipped-HELMET-vox", + "directions": 4 }, { "name": "on-equipped-HELMET-vulpkanin", diff --git a/Resources/Textures/Clothing/Head/Hardsuits/rd.rsi/off-equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/rd.rsi/off-equipped-HELMET-vox.png new file mode 100644 index 00000000000..9f2f5c41df3 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/rd.rsi/off-equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/rd.rsi/off-inhand-left.png b/Resources/Textures/Clothing/Head/Hardsuits/rd.rsi/off-inhand-left.png deleted file mode 100644 index dc16b147b84..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/rd.rsi/off-inhand-left.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/rd.rsi/off-inhand-right.png b/Resources/Textures/Clothing/Head/Hardsuits/rd.rsi/off-inhand-right.png deleted file mode 100644 index e289c62a841..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/rd.rsi/off-inhand-right.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/rd.rsi/on-equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/rd.rsi/on-equipped-HELMET-vox.png new file mode 100644 index 00000000000..b577d32feb2 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/rd.rsi/on-equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/rd.rsi/on-inhand-left.png b/Resources/Textures/Clothing/Head/Hardsuits/rd.rsi/on-inhand-left.png deleted file mode 100644 index b107272ddae..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/rd.rsi/on-inhand-left.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/rd.rsi/on-inhand-right.png b/Resources/Textures/Clothing/Head/Hardsuits/rd.rsi/on-inhand-right.png deleted file mode 100644 index 59a3181afb1..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/rd.rsi/on-inhand-right.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/salvage.rsi/meta.json b/Resources/Textures/Clothing/Head/Hardsuits/salvage.rsi/meta.json index d168108fdf3..051b7e25eaf 100644 --- a/Resources/Textures/Clothing/Head/Hardsuits/salvage.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Hardsuits/salvage.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Vox states by Flareguy for Space Station 14 | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d | Vox states by Flareguy for Space Station 14", "size": { "x": 32, "y": 32 @@ -14,28 +14,20 @@ "name": "icon-flash" }, { - "name": "off-equipped-HELMET", - "directions": 4 - }, - { - "name": "off-inhand-left", - "directions": 4 + "name": "on-equipped-HELMET", + "directions": 4 }, { - "name": "off-inhand-right", - "directions": 4 - }, - { - "name": "on-equipped-HELMET", + "name": "off-equipped-HELMET", "directions": 4 }, { - "name": "on-inhand-left", + "name": "on-equipped-HELMET-vox", "directions": 4 }, { - "name": "on-inhand-right", - "directions": 4 + "name": "off-equipped-HELMET-vox", + "directions": 4 }, { "name": "on-equipped-HELMET-vulpkanin", diff --git a/Resources/Textures/Clothing/Head/Hardsuits/salvage.rsi/off-equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/salvage.rsi/off-equipped-HELMET-vox.png new file mode 100644 index 00000000000..c3f24c8b34a Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/salvage.rsi/off-equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/salvage.rsi/off-inhand-left.png b/Resources/Textures/Clothing/Head/Hardsuits/salvage.rsi/off-inhand-left.png deleted file mode 100644 index b11a533c26b..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/salvage.rsi/off-inhand-left.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/salvage.rsi/off-inhand-right.png b/Resources/Textures/Clothing/Head/Hardsuits/salvage.rsi/off-inhand-right.png deleted file mode 100644 index b9c9df2350a..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/salvage.rsi/off-inhand-right.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/salvage.rsi/on-equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/salvage.rsi/on-equipped-HELMET-vox.png new file mode 100644 index 00000000000..007852fc102 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/salvage.rsi/on-equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/salvage.rsi/on-inhand-left.png b/Resources/Textures/Clothing/Head/Hardsuits/salvage.rsi/on-inhand-left.png deleted file mode 100644 index 12d13f0e189..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/salvage.rsi/on-inhand-left.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/salvage.rsi/on-inhand-right.png b/Resources/Textures/Clothing/Head/Hardsuits/salvage.rsi/on-inhand-right.png deleted file mode 100644 index 141dc492a4e..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/salvage.rsi/on-inhand-right.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/santahelm.rsi/equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/santahelm.rsi/equipped-HELMET-vox.png new file mode 100644 index 00000000000..025e7026679 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/santahelm.rsi/equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/santahelm.rsi/inhand-left.png b/Resources/Textures/Clothing/Head/Hardsuits/santahelm.rsi/inhand-left.png deleted file mode 100644 index c0c5863a3bc..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/santahelm.rsi/inhand-left.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/santahelm.rsi/inhand-right.png b/Resources/Textures/Clothing/Head/Hardsuits/santahelm.rsi/inhand-right.png deleted file mode 100644 index f29877bf5a8..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/santahelm.rsi/inhand-right.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/santahelm.rsi/meta.json b/Resources/Textures/Clothing/Head/Hardsuits/santahelm.rsi/meta.json index c53de839011..afc9f219ac6 100644 --- a/Resources/Textures/Clothing/Head/Hardsuits/santahelm.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Hardsuits/santahelm.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Edited by StanTheCarpenter. Originally taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Edited by StanTheCarpenter. Originally taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Vox states by Flareguy for Space Station 14", "size": { "x": 32, "y": 32 @@ -15,11 +15,7 @@ "directions": 4 }, { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", + "name": "equipped-HELMET-vox", "directions": 4 } ] diff --git a/Resources/Textures/Clothing/Head/Hardsuits/security-red.rsi/meta.json b/Resources/Textures/Clothing/Head/Hardsuits/security-red.rsi/meta.json index 40c5c72b114..f7be4bb5d47 100644 --- a/Resources/Textures/Clothing/Head/Hardsuits/security-red.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Hardsuits/security-red.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e | vulpkanin versions taken from https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13/commit/091d9ec00f186052b87bd65125e896f78faefe38 and edited by Floofers", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Vox states by Flareguy for Space Station 14 | vulpkanin versions taken from https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13/commit/091d9ec00f186052b87bd65125e896f78faefe38 and edited by Floofers", "size": { "x": 32, "y": 32 @@ -14,28 +14,20 @@ "name": "icon-flash" }, { - "name": "off-equipped-HELMET", - "directions": 4 - }, - { - "name": "off-inhand-left", - "directions": 4 + "name": "on-equipped-HELMET", + "directions": 4 }, { - "name": "off-inhand-right", - "directions": 4 - }, - { - "name": "on-equipped-HELMET", + "name": "off-equipped-HELMET", "directions": 4 }, { - "name": "on-inhand-left", + "name": "on-equipped-HELMET-vox", "directions": 4 }, { - "name": "on-inhand-right", - "directions": 4 + "name": "off-equipped-HELMET-vox", + "directions": 4 }, { "name": "on-equipped-HELMET-vulpkanin", diff --git a/Resources/Textures/Clothing/Head/Hardsuits/security-red.rsi/off-equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/security-red.rsi/off-equipped-HELMET-vox.png new file mode 100644 index 00000000000..6954a4e1a85 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/security-red.rsi/off-equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/security-red.rsi/off-inhand-left.png b/Resources/Textures/Clothing/Head/Hardsuits/security-red.rsi/off-inhand-left.png deleted file mode 100644 index c81cf30dc9c..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/security-red.rsi/off-inhand-left.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/security-red.rsi/off-inhand-right.png b/Resources/Textures/Clothing/Head/Hardsuits/security-red.rsi/off-inhand-right.png deleted file mode 100644 index f5b449d7b99..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/security-red.rsi/off-inhand-right.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/security-red.rsi/on-equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/security-red.rsi/on-equipped-HELMET-vox.png new file mode 100644 index 00000000000..b48bb710d9b Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/security-red.rsi/on-equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/security-red.rsi/on-inhand-left.png b/Resources/Textures/Clothing/Head/Hardsuits/security-red.rsi/on-inhand-left.png deleted file mode 100644 index 32f699cb473..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/security-red.rsi/on-inhand-left.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/security-red.rsi/on-inhand-right.png b/Resources/Textures/Clothing/Head/Hardsuits/security-red.rsi/on-inhand-right.png deleted file mode 100644 index 71d2a093251..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/security-red.rsi/on-inhand-right.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/security-warden.rsi/meta.json b/Resources/Textures/Clothing/Head/Hardsuits/security-warden.rsi/meta.json index 14121523ca0..3d94d382c31 100644 --- a/Resources/Textures/Clothing/Head/Hardsuits/security-warden.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Hardsuits/security-warden.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "sprite made by Gtheglorious based on the sprite made by Alekshhh for SS14 | vulpkanin versions made by Floofers", + "copyright": "sprite made by Gtheglorious based on the sprite made by Alekshhh for SS14 | vulpkanin versions made by Floofers. Vox states by Flareguy for Space Station 14", "size": { "x": 32, "y": 32 @@ -28,6 +28,14 @@ { "name": "off-equipped-HELMET-vulpkanin", "directions": 4 + }, + { + "name": "off-equipped-HELMET-vox", + "directions": 4 + }, + { + "name": "on-equipped-HELMET-vox", + "directions": 4 } ] } diff --git a/Resources/Textures/Clothing/Head/Hardsuits/security-warden.rsi/off-equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/security-warden.rsi/off-equipped-HELMET-vox.png new file mode 100644 index 00000000000..2a3619db8e9 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/security-warden.rsi/off-equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/security-warden.rsi/on-equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/security-warden.rsi/on-equipped-HELMET-vox.png new file mode 100644 index 00000000000..5b9e2b19ad1 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/security-warden.rsi/on-equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/security.rsi/meta.json b/Resources/Textures/Clothing/Head/Hardsuits/security.rsi/meta.json index a2e10d43001..24f2a06e376 100644 --- a/Resources/Textures/Clothing/Head/Hardsuits/security.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Hardsuits/security.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Sprite made by Gtheglorious based on the sprite taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e, | vulpkanin versions taken from https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13/commit/091d9ec00f186052b87bd65125e896f78faefe38 and edited by Floofers", + "copyright": "Sprite made by Gtheglorious based on the sprite taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Vox states by Flareguy for Space Station 14 | vulpkanin versions taken from https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13/commit/091d9ec00f186052b87bd65125e896f78faefe38 and edited by Floofers", "size": { "x": 32, "y": 32 @@ -14,28 +14,20 @@ "name": "icon-flash" }, { - "name": "off-equipped-HELMET", - "directions": 4 - }, - { - "name": "off-inhand-left", - "directions": 4 + "name": "on-equipped-HELMET", + "directions": 4 }, { - "name": "off-inhand-right", - "directions": 4 - }, - { - "name": "on-equipped-HELMET", + "name": "off-equipped-HELMET", "directions": 4 }, { - "name": "on-inhand-left", + "name": "on-equipped-HELMET-vox", "directions": 4 }, { - "name": "on-inhand-right", - "directions": 4 + "name": "off-equipped-HELMET-vox", + "directions": 4 }, { "name": "on-equipped-HELMET-vulpkanin", diff --git a/Resources/Textures/Clothing/Head/Hardsuits/security.rsi/off-equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/security.rsi/off-equipped-HELMET-vox.png new file mode 100644 index 00000000000..439b6c6ebc0 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/security.rsi/off-equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/security.rsi/off-inhand-left.png b/Resources/Textures/Clothing/Head/Hardsuits/security.rsi/off-inhand-left.png deleted file mode 100644 index 68329b89c1a..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/security.rsi/off-inhand-left.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/security.rsi/off-inhand-right.png b/Resources/Textures/Clothing/Head/Hardsuits/security.rsi/off-inhand-right.png deleted file mode 100644 index 38cc8ca8a67..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/security.rsi/off-inhand-right.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/security.rsi/on-equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/security.rsi/on-equipped-HELMET-vox.png new file mode 100644 index 00000000000..56bca1c618e Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/security.rsi/on-equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/security.rsi/on-inhand-left.png b/Resources/Textures/Clothing/Head/Hardsuits/security.rsi/on-inhand-left.png deleted file mode 100644 index 742af4cd003..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/security.rsi/on-inhand-left.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/security.rsi/on-inhand-right.png b/Resources/Textures/Clothing/Head/Hardsuits/security.rsi/on-inhand-right.png deleted file mode 100644 index 79f70ac1217..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/security.rsi/on-inhand-right.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/spatiohelm.rsi/equipped-head-light-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/spatiohelm.rsi/equipped-head-light-vox.png new file mode 100644 index 00000000000..d0124f743be Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/spatiohelm.rsi/equipped-head-light-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/spatiohelm.rsi/equipped-head-unshaded-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/spatiohelm.rsi/equipped-head-unshaded-vox.png new file mode 100644 index 00000000000..4486bff5622 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/spatiohelm.rsi/equipped-head-unshaded-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/spatiohelm.rsi/equipped-head-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/spatiohelm.rsi/equipped-head-vox.png new file mode 100644 index 00000000000..80a31d544fa Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/spatiohelm.rsi/equipped-head-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/spatiohelm.rsi/inhand-left-light.png b/Resources/Textures/Clothing/Head/Hardsuits/spatiohelm.rsi/inhand-left-light.png deleted file mode 100644 index 7f1657d9e5c..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/spatiohelm.rsi/inhand-left-light.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/spatiohelm.rsi/inhand-left-unshaded.png b/Resources/Textures/Clothing/Head/Hardsuits/spatiohelm.rsi/inhand-left-unshaded.png deleted file mode 100644 index fe450b8df19..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/spatiohelm.rsi/inhand-left-unshaded.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/spatiohelm.rsi/inhand-left.png b/Resources/Textures/Clothing/Head/Hardsuits/spatiohelm.rsi/inhand-left.png deleted file mode 100644 index 81cecd01c2f..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/spatiohelm.rsi/inhand-left.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/spatiohelm.rsi/inhand-right-light.png b/Resources/Textures/Clothing/Head/Hardsuits/spatiohelm.rsi/inhand-right-light.png deleted file mode 100644 index 7749494c565..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/spatiohelm.rsi/inhand-right-light.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/spatiohelm.rsi/inhand-right-unshaded.png b/Resources/Textures/Clothing/Head/Hardsuits/spatiohelm.rsi/inhand-right-unshaded.png deleted file mode 100644 index be08f2c2576..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/spatiohelm.rsi/inhand-right-unshaded.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/spatiohelm.rsi/inhand-right.png b/Resources/Textures/Clothing/Head/Hardsuits/spatiohelm.rsi/inhand-right.png deleted file mode 100644 index 2bbec0f04c7..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/spatiohelm.rsi/inhand-right.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/spatiohelm.rsi/meta.json b/Resources/Textures/Clothing/Head/Hardsuits/spatiohelm.rsi/meta.json index 35a6a87bfdc..64ba4dc5d6a 100644 --- a/Resources/Textures/Clothing/Head/Hardsuits/spatiohelm.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Hardsuits/spatiohelm.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Original by Emisse, modified by EmoGarbage404 | vulpkanin version made by Floofers", + "copyright": "Original by Emisse, modified by EmoGarbage404 | vulpkanin version made by Floofers. Vox states by Flareguy for SS14", "size": { "x": 32, @@ -33,27 +33,15 @@ "directions": 4 }, { - "name": "inhand-left", + "name": "equipped-head-unshaded-vox", "directions": 4 }, { - "name": "inhand-left-unshaded", + "name": "equipped-head-vox", "directions": 4 }, { - "name": "inhand-left-light", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - }, - { - "name": "inhand-right-unshaded", - "directions": 4 - }, - { - "name": "inhand-right-light", + "name": "equipped-head-light-vox", "directions": 4 }, { @@ -61,4 +49,4 @@ "directions": 4 } ] -} \ No newline at end of file +} diff --git a/Resources/Textures/Clothing/Head/Hardsuits/syndicate.rsi/meta.json b/Resources/Textures/Clothing/Head/Hardsuits/syndicate.rsi/meta.json index e9de1ae57b6..9b960ec32b1 100644 --- a/Resources/Textures/Clothing/Head/Hardsuits/syndicate.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Hardsuits/syndicate.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Vox states by Flareguy for Space Station 14", "size": { "x": 32, "y": 32 @@ -21,24 +21,16 @@ "name": "off-equipped-HELMET", "directions": 4 }, - { - "name": "off-inhand-left", - "directions": 4 - }, - { - "name": "off-inhand-right", - "directions": 4 - }, { "name": "on-equipped-HELMET", "directions": 4 }, { - "name": "on-inhand-left", + "name": "off-equipped-HELMET-vox", "directions": 4 }, { - "name": "on-inhand-right", + "name": "on-equipped-HELMET-vox", "directions": 4 } ] diff --git a/Resources/Textures/Clothing/Head/Hardsuits/syndicate.rsi/off-equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/syndicate.rsi/off-equipped-HELMET-vox.png new file mode 100644 index 00000000000..eb2027c5fa6 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/syndicate.rsi/off-equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/syndicate.rsi/off-inhand-left.png b/Resources/Textures/Clothing/Head/Hardsuits/syndicate.rsi/off-inhand-left.png deleted file mode 100644 index 1b108753b35..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/syndicate.rsi/off-inhand-left.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/syndicate.rsi/off-inhand-right.png b/Resources/Textures/Clothing/Head/Hardsuits/syndicate.rsi/off-inhand-right.png deleted file mode 100644 index dc0500af778..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/syndicate.rsi/off-inhand-right.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/syndicate.rsi/on-equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/syndicate.rsi/on-equipped-HELMET-vox.png new file mode 100644 index 00000000000..8804afa3d86 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/syndicate.rsi/on-equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/syndicate.rsi/on-inhand-left.png b/Resources/Textures/Clothing/Head/Hardsuits/syndicate.rsi/on-inhand-left.png deleted file mode 100644 index c1350c82422..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/syndicate.rsi/on-inhand-left.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/syndicate.rsi/on-inhand-right.png b/Resources/Textures/Clothing/Head/Hardsuits/syndicate.rsi/on-inhand-right.png deleted file mode 100644 index db67f97b6f4..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/syndicate.rsi/on-inhand-right.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/syndiecommander.rsi/meta.json b/Resources/Textures/Clothing/Head/Hardsuits/syndiecommander.rsi/meta.json index 038aabe6050..6999f12991b 100644 --- a/Resources/Textures/Clothing/Head/Hardsuits/syndiecommander.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Hardsuits/syndiecommander.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from vg at commit https://github.com/vgstation-coders/vgstation13/commit/a16e41020a93479e9a7e2af343b1b74f7f2a61bd", + "copyright": "Taken from vg at commit https://github.com/vgstation-coders/vgstation13/commit/a16e41020a93479e9a7e2af343b1b74f7f2a61bd. Vox states by Flareguy for Space Station 14", "size": { "x": 32, @@ -18,25 +18,17 @@ "name": "off-equipped-HELMET", "directions": 4 }, - { - "name": "off-inhand-left", - "directions": 4 - }, - { - "name": "off-inhand-right", - "directions": 4 - }, { "name": "on-equipped-HELMET", "directions": 4 }, { - "name": "on-inhand-left", + "name": "off-equipped-HELMET-vox", "directions": 4 }, { - "name": "on-inhand-right", + "name": "on-equipped-HELMET-vox", "directions": 4 } ] -} \ No newline at end of file +} diff --git a/Resources/Textures/Clothing/Head/Hardsuits/syndiecommander.rsi/off-equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/syndiecommander.rsi/off-equipped-HELMET-vox.png new file mode 100644 index 00000000000..5276e3f681e Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/syndiecommander.rsi/off-equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/syndiecommander.rsi/off-inhand-left.png b/Resources/Textures/Clothing/Head/Hardsuits/syndiecommander.rsi/off-inhand-left.png deleted file mode 100644 index 79a96cd7111..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/syndiecommander.rsi/off-inhand-left.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/syndiecommander.rsi/off-inhand-right.png b/Resources/Textures/Clothing/Head/Hardsuits/syndiecommander.rsi/off-inhand-right.png deleted file mode 100644 index 0c7b0caddfa..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/syndiecommander.rsi/off-inhand-right.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/syndiecommander.rsi/on-equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/syndiecommander.rsi/on-equipped-HELMET-vox.png new file mode 100644 index 00000000000..65069f91c71 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/syndiecommander.rsi/on-equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/syndiecommander.rsi/on-inhand-left.png b/Resources/Textures/Clothing/Head/Hardsuits/syndiecommander.rsi/on-inhand-left.png deleted file mode 100644 index 505808fc9d0..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/syndiecommander.rsi/on-inhand-left.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/syndiecommander.rsi/on-inhand-right.png b/Resources/Textures/Clothing/Head/Hardsuits/syndiecommander.rsi/on-inhand-right.png deleted file mode 100644 index 862f6294fbc..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/syndiecommander.rsi/on-inhand-right.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/syndieelite.rsi/meta.json b/Resources/Textures/Clothing/Head/Hardsuits/syndieelite.rsi/meta.json index 038aabe6050..5c7932bb286 100644 --- a/Resources/Textures/Clothing/Head/Hardsuits/syndieelite.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Hardsuits/syndieelite.rsi/meta.json @@ -1,42 +1,33 @@ { - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Taken from vg at commit https://github.com/vgstation-coders/vgstation13/commit/a16e41020a93479e9a7e2af343b1b74f7f2a61bd", - - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from vg at commit https://github.com/vgstation-coders/vgstation13/commit/a16e41020a93479e9a7e2af343b1b74f7f2a61bd. Vox states by Flareguy for Space Station 14", + "size": { + "x": 32, + "y": 32 }, - { - "name": "icon-flash" - }, - { - "name": "off-equipped-HELMET", - "directions": 4 - }, - { - "name": "off-inhand-left", - "directions": 4 - }, - { - "name": "off-inhand-right", - "directions": 4 - }, - { - "name": "on-equipped-HELMET", - "directions": 4 - }, - { - "name": "on-inhand-left", - "directions": 4 - }, - { - "name": "on-inhand-right", - "directions": 4 - } - ] + "states": [ + { + "name": "icon" + }, + { + "name": "icon-flash" + }, + { + "name": "off-equipped-HELMET", + "directions": 4 + }, + { + "name": "on-equipped-HELMET", + "directions": 4 + }, + { + "name": "off-equipped-HELMET-vox", + "directions": 4 + }, + { + "name": "on-equipped-HELMET-vox", + "directions": 4 + } + ] } \ No newline at end of file diff --git a/Resources/Textures/Clothing/Head/Hardsuits/syndieelite.rsi/off-equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/syndieelite.rsi/off-equipped-HELMET-vox.png new file mode 100644 index 00000000000..4f4b2f0f771 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/syndieelite.rsi/off-equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/syndieelite.rsi/off-inhand-left.png b/Resources/Textures/Clothing/Head/Hardsuits/syndieelite.rsi/off-inhand-left.png deleted file mode 100644 index 22a8dd14b15..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/syndieelite.rsi/off-inhand-left.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/syndieelite.rsi/off-inhand-right.png b/Resources/Textures/Clothing/Head/Hardsuits/syndieelite.rsi/off-inhand-right.png deleted file mode 100644 index 71572c0ffdc..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/syndieelite.rsi/off-inhand-right.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/syndieelite.rsi/on-equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/syndieelite.rsi/on-equipped-HELMET-vox.png new file mode 100644 index 00000000000..bf7243ed32c Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/syndieelite.rsi/on-equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/syndieelite.rsi/on-inhand-left.png b/Resources/Textures/Clothing/Head/Hardsuits/syndieelite.rsi/on-inhand-left.png deleted file mode 100644 index 5a40993d72e..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/syndieelite.rsi/on-inhand-left.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/syndieelite.rsi/on-inhand-right.png b/Resources/Textures/Clothing/Head/Hardsuits/syndieelite.rsi/on-inhand-right.png deleted file mode 100644 index 27a27d1e8e2..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/syndieelite.rsi/on-inhand-right.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/syndiemedic.rsi/meta.json b/Resources/Textures/Clothing/Head/Hardsuits/syndiemedic.rsi/meta.json index b69addc4760..9adc3b7cef9 100644 --- a/Resources/Textures/Clothing/Head/Hardsuits/syndiemedic.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Hardsuits/syndiemedic.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Based on tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e, modified by EmoGarbage404 (github)", + "copyright": "Based on tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e, modified by EmoGarbage404 (github). Vox states by Flareguy for Space Station 14", "size": { "x": 32, "y": 32 @@ -17,24 +17,16 @@ "name": "off-equipped-HELMET", "directions": 4 }, - { - "name": "off-inhand-left", - "directions": 4 - }, - { - "name": "off-inhand-right", - "directions": 4 - }, { "name": "on-equipped-HELMET", "directions": 4 }, { - "name": "on-inhand-left", + "name": "off-equipped-HELMET-vox", "directions": 4 }, { - "name": "on-inhand-right", + "name": "on-equipped-HELMET-vox", "directions": 4 } ] diff --git a/Resources/Textures/Clothing/Head/Hardsuits/syndiemedic.rsi/off-equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/syndiemedic.rsi/off-equipped-HELMET-vox.png new file mode 100644 index 00000000000..4d5f2cf4b72 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/syndiemedic.rsi/off-equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/syndiemedic.rsi/off-inhand-left.png b/Resources/Textures/Clothing/Head/Hardsuits/syndiemedic.rsi/off-inhand-left.png deleted file mode 100644 index 97f21fd350b..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/syndiemedic.rsi/off-inhand-left.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/syndiemedic.rsi/off-inhand-right.png b/Resources/Textures/Clothing/Head/Hardsuits/syndiemedic.rsi/off-inhand-right.png deleted file mode 100644 index 0e950a6674a..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/syndiemedic.rsi/off-inhand-right.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/syndiemedic.rsi/on-equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/syndiemedic.rsi/on-equipped-HELMET-vox.png new file mode 100644 index 00000000000..8c072609c94 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/syndiemedic.rsi/on-equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/syndiemedic.rsi/on-inhand-left.png b/Resources/Textures/Clothing/Head/Hardsuits/syndiemedic.rsi/on-inhand-left.png deleted file mode 100644 index 0e174c04c33..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/syndiemedic.rsi/on-inhand-left.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/syndiemedic.rsi/on-inhand-right.png b/Resources/Textures/Clothing/Head/Hardsuits/syndiemedic.rsi/on-inhand-right.png deleted file mode 100644 index b0494003486..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/syndiemedic.rsi/on-inhand-right.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/wizard.rsi/meta.json b/Resources/Textures/Clothing/Head/Hardsuits/wizard.rsi/meta.json index d168108fdf3..b72a96092e7 100644 --- a/Resources/Textures/Clothing/Head/Hardsuits/wizard.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Hardsuits/wizard.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Vox states by Flareguy for Space Station 14 | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d", "size": { "x": 32, "y": 32 @@ -14,28 +14,20 @@ "name": "icon-flash" }, { - "name": "off-equipped-HELMET", - "directions": 4 - }, - { - "name": "off-inhand-left", - "directions": 4 + "name": "on-equipped-HELMET", + "directions": 4 }, { - "name": "off-inhand-right", - "directions": 4 - }, - { - "name": "on-equipped-HELMET", + "name": "off-equipped-HELMET", "directions": 4 }, { - "name": "on-inhand-left", + "name": "on-equipped-HELMET-vox", "directions": 4 }, { - "name": "on-inhand-right", - "directions": 4 + "name": "off-equipped-HELMET-vox", + "directions": 4 }, { "name": "on-equipped-HELMET-vulpkanin", diff --git a/Resources/Textures/Clothing/Head/Hardsuits/wizard.rsi/off-equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/wizard.rsi/off-equipped-HELMET-vox.png new file mode 100644 index 00000000000..647d0e76c1b Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/wizard.rsi/off-equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/wizard.rsi/off-inhand-left.png b/Resources/Textures/Clothing/Head/Hardsuits/wizard.rsi/off-inhand-left.png deleted file mode 100644 index 90b7c2574ad..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/wizard.rsi/off-inhand-left.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/wizard.rsi/off-inhand-right.png b/Resources/Textures/Clothing/Head/Hardsuits/wizard.rsi/off-inhand-right.png deleted file mode 100644 index de647331f93..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/wizard.rsi/off-inhand-right.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/wizard.rsi/on-equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/wizard.rsi/on-equipped-HELMET-vox.png new file mode 100644 index 00000000000..a0345048e84 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hardsuits/wizard.rsi/on-equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/wizard.rsi/on-inhand-left.png b/Resources/Textures/Clothing/Head/Hardsuits/wizard.rsi/on-inhand-left.png deleted file mode 100644 index fc11467e8f9..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/wizard.rsi/on-inhand-left.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hardsuits/wizard.rsi/on-inhand-right.png b/Resources/Textures/Clothing/Head/Hardsuits/wizard.rsi/on-inhand-right.png deleted file mode 100644 index 131989b5928..00000000000 Binary files a/Resources/Textures/Clothing/Head/Hardsuits/wizard.rsi/on-inhand-right.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Head/Hats/chefhat_idris.rsi/equipped-HELMET.png b/Resources/Textures/Clothing/Head/Hats/chefhat_idris.rsi/equipped-HELMET.png new file mode 100644 index 00000000000..a6ccc52dc26 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hats/chefhat_idris.rsi/equipped-HELMET.png differ diff --git a/Resources/Textures/Clothing/Head/Hats/chefhat_idris.rsi/icon.png b/Resources/Textures/Clothing/Head/Hats/chefhat_idris.rsi/icon.png new file mode 100644 index 00000000000..76c55d1b96c Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hats/chefhat_idris.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Head/Hats/chefhat_idris.rsi/meta.json b/Resources/Textures/Clothing/Head/Hats/chefhat_idris.rsi/meta.json new file mode 100644 index 00000000000..dcf3d382c4d --- /dev/null +++ b/Resources/Textures/Clothing/Head/Hats/chefhat_idris.rsi/meta.json @@ -0,0 +1,18 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Aurorastation at commit https://github.com/Aurorastation/Aurora.3/commit/a8759f3c77b61315df50ee86969799f5a0afe894", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-HELMET", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/Head/Hats/chefhat_nt.rsi/equipped-HELMET.png b/Resources/Textures/Clothing/Head/Hats/chefhat_nt.rsi/equipped-HELMET.png new file mode 100644 index 00000000000..47a4ef7a60f Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hats/chefhat_nt.rsi/equipped-HELMET.png differ diff --git a/Resources/Textures/Clothing/Head/Hats/chefhat_nt.rsi/icon.png b/Resources/Textures/Clothing/Head/Hats/chefhat_nt.rsi/icon.png new file mode 100644 index 00000000000..391b8ae3a0e Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hats/chefhat_nt.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Head/Hats/chefhat_nt.rsi/meta.json b/Resources/Textures/Clothing/Head/Hats/chefhat_nt.rsi/meta.json new file mode 100644 index 00000000000..dcf3d382c4d --- /dev/null +++ b/Resources/Textures/Clothing/Head/Hats/chefhat_nt.rsi/meta.json @@ -0,0 +1,18 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Aurorastation at commit https://github.com/Aurorastation/Aurora.3/commit/a8759f3c77b61315df50ee86969799f5a0afe894", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-HELMET", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/Head/Hats/chefhat_orion.rsi/equipped-HELMET.png b/Resources/Textures/Clothing/Head/Hats/chefhat_orion.rsi/equipped-HELMET.png new file mode 100644 index 00000000000..95a8ad5b42c Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hats/chefhat_orion.rsi/equipped-HELMET.png differ diff --git a/Resources/Textures/Clothing/Head/Hats/chefhat_orion.rsi/icon.png b/Resources/Textures/Clothing/Head/Hats/chefhat_orion.rsi/icon.png new file mode 100644 index 00000000000..05bd50b8cb1 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hats/chefhat_orion.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Head/Hats/chefhat_orion.rsi/meta.json b/Resources/Textures/Clothing/Head/Hats/chefhat_orion.rsi/meta.json new file mode 100644 index 00000000000..dcf3d382c4d --- /dev/null +++ b/Resources/Textures/Clothing/Head/Hats/chefhat_orion.rsi/meta.json @@ -0,0 +1,18 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Aurorastation at commit https://github.com/Aurorastation/Aurora.3/commit/a8759f3c77b61315df50ee86969799f5a0afe894", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-HELMET", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/Head/Hats/flatcap_idris.rsi/equipped-HELMET.png b/Resources/Textures/Clothing/Head/Hats/flatcap_idris.rsi/equipped-HELMET.png new file mode 100644 index 00000000000..2a8480d237f Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hats/flatcap_idris.rsi/equipped-HELMET.png differ diff --git a/Resources/Textures/Clothing/Head/Hats/flatcap_idris.rsi/icon.png b/Resources/Textures/Clothing/Head/Hats/flatcap_idris.rsi/icon.png new file mode 100644 index 00000000000..52b439669aa Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hats/flatcap_idris.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Head/Hats/flatcap_idris.rsi/meta.json b/Resources/Textures/Clothing/Head/Hats/flatcap_idris.rsi/meta.json new file mode 100644 index 00000000000..dcf3d382c4d --- /dev/null +++ b/Resources/Textures/Clothing/Head/Hats/flatcap_idris.rsi/meta.json @@ -0,0 +1,18 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Aurorastation at commit https://github.com/Aurorastation/Aurora.3/commit/a8759f3c77b61315df50ee86969799f5a0afe894", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-HELMET", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/Head/Hats/flatcap_nt.rsi/equipped-HELMET.png b/Resources/Textures/Clothing/Head/Hats/flatcap_nt.rsi/equipped-HELMET.png new file mode 100644 index 00000000000..bc25822a7e1 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hats/flatcap_nt.rsi/equipped-HELMET.png differ diff --git a/Resources/Textures/Clothing/Head/Hats/flatcap_nt.rsi/icon.png b/Resources/Textures/Clothing/Head/Hats/flatcap_nt.rsi/icon.png new file mode 100644 index 00000000000..397bc77453e Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hats/flatcap_nt.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Head/Hats/flatcap_nt.rsi/meta.json b/Resources/Textures/Clothing/Head/Hats/flatcap_nt.rsi/meta.json new file mode 100644 index 00000000000..dcf3d382c4d --- /dev/null +++ b/Resources/Textures/Clothing/Head/Hats/flatcap_nt.rsi/meta.json @@ -0,0 +1,18 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Aurorastation at commit https://github.com/Aurorastation/Aurora.3/commit/a8759f3c77b61315df50ee86969799f5a0afe894", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-HELMET", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/Head/Hats/flatcap_orion.rsi/equipped-HELMET.png b/Resources/Textures/Clothing/Head/Hats/flatcap_orion.rsi/equipped-HELMET.png new file mode 100644 index 00000000000..cd78cb38a48 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hats/flatcap_orion.rsi/equipped-HELMET.png differ diff --git a/Resources/Textures/Clothing/Head/Hats/flatcap_orion.rsi/icon.png b/Resources/Textures/Clothing/Head/Hats/flatcap_orion.rsi/icon.png new file mode 100644 index 00000000000..915b2d54b2f Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hats/flatcap_orion.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Head/Hats/flatcap_orion.rsi/meta.json b/Resources/Textures/Clothing/Head/Hats/flatcap_orion.rsi/meta.json new file mode 100644 index 00000000000..dcf3d382c4d --- /dev/null +++ b/Resources/Textures/Clothing/Head/Hats/flatcap_orion.rsi/meta.json @@ -0,0 +1,18 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Aurorastation at commit https://github.com/Aurorastation/Aurora.3/commit/a8759f3c77b61315df50ee86969799f5a0afe894", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-HELMET", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/Head/Hats/gladiator.rsi/equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hats/gladiator.rsi/equipped-HELMET-vox.png new file mode 100644 index 00000000000..b432655c5ac Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hats/gladiator.rsi/equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hats/gladiator.rsi/meta.json b/Resources/Textures/Clothing/Head/Hats/gladiator.rsi/meta.json index bbb0aac6648..057d0b0ab24 100644 --- a/Resources/Textures/Clothing/Head/Hats/gladiator.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Hats/gladiator.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. equipped-HELMET-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79", "size": { "x": 32, "y": 32 @@ -20,7 +20,11 @@ }, { "name": "inhand-right", - "direction": 4 + "directions": 4 + }, + { + "name": "equipped-HELMET-vox", + "directions": 4 } ] } diff --git a/Resources/Textures/Clothing/Head/Hats/paper.rsi/equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hats/paper.rsi/equipped-HELMET-vox.png new file mode 100644 index 00000000000..5f5c3376d7e Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hats/paper.rsi/equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hats/paper.rsi/meta.json b/Resources/Textures/Clothing/Head/Hats/paper.rsi/meta.json index a470e009443..057d0b0ab24 100644 --- a/Resources/Textures/Clothing/Head/Hats/paper.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Hats/paper.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. equipped-HELMET-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79", "size": { "x": 32, "y": 32 @@ -21,6 +21,10 @@ { "name": "inhand-right", "directions": 4 + }, + { + "name": "equipped-HELMET-vox", + "directions": 4 } ] } diff --git a/Resources/Textures/Clothing/Head/Hats/surgcap_blue.rsi/equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hats/surgcap_blue.rsi/equipped-HELMET-vox.png new file mode 100644 index 00000000000..a51c2680417 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hats/surgcap_blue.rsi/equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hats/surgcap_blue.rsi/meta.json b/Resources/Textures/Clothing/Head/Hats/surgcap_blue.rsi/meta.json index ade65863af2..e099085bde1 100644 --- a/Resources/Textures/Clothing/Head/Hats/surgcap_blue.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Hats/surgcap_blue.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. equipped-HELMET-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79", "size": { "x": 32, "y": 32 @@ -25,6 +25,10 @@ { "name": "inhand-right", "directions": 4 + }, + { + "name": "equipped-HELMET-vox", + "directions": 4 } ] } diff --git a/Resources/Textures/Clothing/Head/Hats/surgcap_green.rsi/equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hats/surgcap_green.rsi/equipped-HELMET-vox.png new file mode 100644 index 00000000000..81601c6c2bb Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hats/surgcap_green.rsi/equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hats/surgcap_green.rsi/meta.json b/Resources/Textures/Clothing/Head/Hats/surgcap_green.rsi/meta.json index a470e009443..057d0b0ab24 100644 --- a/Resources/Textures/Clothing/Head/Hats/surgcap_green.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Hats/surgcap_green.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. equipped-HELMET-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79", "size": { "x": 32, "y": 32 @@ -21,6 +21,10 @@ { "name": "inhand-right", "directions": 4 + }, + { + "name": "equipped-HELMET-vox", + "directions": 4 } ] } diff --git a/Resources/Textures/Clothing/Head/Hats/surgcap_purple.rsi/equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hats/surgcap_purple.rsi/equipped-HELMET-vox.png new file mode 100644 index 00000000000..24ea1365cd8 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hats/surgcap_purple.rsi/equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hats/surgcap_purple.rsi/meta.json b/Resources/Textures/Clothing/Head/Hats/surgcap_purple.rsi/meta.json index a470e009443..057d0b0ab24 100644 --- a/Resources/Textures/Clothing/Head/Hats/surgcap_purple.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Hats/surgcap_purple.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. equipped-HELMET-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79", "size": { "x": 32, "y": 32 @@ -21,6 +21,10 @@ { "name": "inhand-right", "directions": 4 + }, + { + "name": "equipped-HELMET-vox", + "directions": 4 } ] } diff --git a/Resources/Textures/Clothing/Head/Helmets/atmos_firehelmet.rsi/meta.json b/Resources/Textures/Clothing/Head/Helmets/atmos_firehelmet.rsi/meta.json index 26d3341e24e..f2d8747c039 100644 --- a/Resources/Textures/Clothing/Head/Helmets/atmos_firehelmet.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Helmets/atmos_firehelmet.rsi/meta.json @@ -1,41 +1,49 @@ -{ - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation https://github.com/tgstation/tgstation/blob/master/icons/mob/clothing/head.dmi", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" - }, - { - "name": "icon-flash" - }, - { - "name": "off-equipped-HELMET", - "directions": 4 - }, - { - "name": "off-inhand-left", - "directions": 4 - }, - { - "name": "off-inhand-right", - "directions": 4 - }, - { - "name": "on-equipped-HELMET", - "directions": 4 - }, - { - "name": "on-inhand-left", - "directions": 4 - }, - { - "name": "on-inhand-right", - "directions": 4 - } - ] -} +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation https://github.com/tgstation/tgstation/blob/master/icons/mob/clothing/head.dmi. Vox states taken from paradise at https://github.com/ParadiseSS13/Paradise/blob/765461f14aa4dd4f1edc33242c667843134678b5/icons/mob/clothing/species/vox/head.dmi", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "icon-flash" + }, + { + "name": "off-equipped-HELMET", + "directions": 4 + }, + { + "name": "off-equipped-HELMET-vox", + "directions": 4 + }, + { + "name": "off-inhand-left", + "directions": 4 + }, + { + "name": "off-inhand-right", + "directions": 4 + }, + { + "name": "on-equipped-HELMET", + "directions": 4 + }, + { + "name": "on-equipped-HELMET-vox", + "directions": 4 + }, + { + "name": "on-inhand-left", + "directions": 4 + }, + { + "name": "on-inhand-right", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Clothing/Head/Helmets/atmos_firehelmet.rsi/off-equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Helmets/atmos_firehelmet.rsi/off-equipped-HELMET-vox.png new file mode 100644 index 00000000000..ea6e7edce8e Binary files /dev/null and b/Resources/Textures/Clothing/Head/Helmets/atmos_firehelmet.rsi/off-equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Helmets/atmos_firehelmet.rsi/on-equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Helmets/atmos_firehelmet.rsi/on-equipped-HELMET-vox.png new file mode 100644 index 00000000000..301ff00e341 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Helmets/atmos_firehelmet.rsi/on-equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Helmets/bombsuit.rsi/equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Helmets/bombsuit.rsi/equipped-HELMET-vox.png new file mode 100644 index 00000000000..58e8aa9e709 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Helmets/bombsuit.rsi/equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Helmets/bombsuit.rsi/meta.json b/Resources/Textures/Clothing/Head/Helmets/bombsuit.rsi/meta.json index e0ee93d642c..e55d1eb4691 100644 --- a/Resources/Textures/Clothing/Head/Helmets/bombsuit.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Helmets/bombsuit.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from cev-eris at commit https://github.com/discordia-space/CEV-Eris/commit/a75dee2e6d236612dbd403dd5f8687ca930c01f1", + "copyright": "Taken from cev-eris at commit https://github.com/discordia-space/CEV-Eris/commit/a75dee2e6d236612dbd403dd5f8687ca930c01f1. Vox state by Flareguy for SS14", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-HELMET", "directions": 4 }, + { + "name": "equipped-HELMET-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/Head/Helmets/eva.rsi/equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Helmets/eva.rsi/equipped-HELMET-vox.png new file mode 100644 index 00000000000..50d4ec39d54 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Helmets/eva.rsi/equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Helmets/eva.rsi/meta.json b/Resources/Textures/Clothing/Head/Helmets/eva.rsi/meta.json index 3c406ff57cd..c7a2236b61b 100644 --- a/Resources/Textures/Clothing/Head/Helmets/eva.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Helmets/eva.rsi/meta.json @@ -14,6 +14,10 @@ "name": "equipped-HELMET", "directions": 4 }, + { + "name": "equipped-HELMET-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/Head/Helmets/eva_large.rsi/equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Helmets/eva_large.rsi/equipped-HELMET-vox.png new file mode 100644 index 00000000000..b5f224b98ad Binary files /dev/null and b/Resources/Textures/Clothing/Head/Helmets/eva_large.rsi/equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Helmets/eva_large.rsi/equipped-HELMET.png b/Resources/Textures/Clothing/Head/Helmets/eva_large.rsi/equipped-HELMET.png index c64f69b0d84..f6f0e58c6b9 100644 Binary files a/Resources/Textures/Clothing/Head/Helmets/eva_large.rsi/equipped-HELMET.png and b/Resources/Textures/Clothing/Head/Helmets/eva_large.rsi/equipped-HELMET.png differ diff --git a/Resources/Textures/Clothing/Head/Helmets/eva_large.rsi/meta.json b/Resources/Textures/Clothing/Head/Helmets/eva_large.rsi/meta.json index 3c406ff57cd..c7a2236b61b 100644 --- a/Resources/Textures/Clothing/Head/Helmets/eva_large.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Helmets/eva_large.rsi/meta.json @@ -14,6 +14,10 @@ "name": "equipped-HELMET", "directions": 4 }, + { + "name": "equipped-HELMET-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/Head/Helmets/eva_syndicate.rsi/equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Helmets/eva_syndicate.rsi/equipped-HELMET-vox.png new file mode 100644 index 00000000000..62ff233af14 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Helmets/eva_syndicate.rsi/equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Helmets/eva_syndicate.rsi/meta.json b/Resources/Textures/Clothing/Head/Helmets/eva_syndicate.rsi/meta.json index 3c406ff57cd..c7a2236b61b 100644 --- a/Resources/Textures/Clothing/Head/Helmets/eva_syndicate.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Helmets/eva_syndicate.rsi/meta.json @@ -14,6 +14,10 @@ "name": "equipped-HELMET", "directions": 4 }, + { + "name": "equipped-HELMET-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/Head/Helmets/firehelmet.rsi/meta.json b/Resources/Textures/Clothing/Head/Helmets/firehelmet.rsi/meta.json index 9530d0f7aa4..014284471a4 100644 --- a/Resources/Textures/Clothing/Head/Helmets/firehelmet.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Helmets/firehelmet.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from paradise station and modified by Peptide90 https://github.com/ParadiseSS13/Paradise/commit/46bb8d448f52278a8f027b3f5bdf061e39d06140", + "copyright": "Taken from paradise station and modified by Peptide90 https://github.com/ParadiseSS13/Paradise/commit/46bb8d448f52278a8f027b3f5bdf061e39d06140. Vox states by Flareguy for SS14", "size": { "x": 32, "y": 32 @@ -17,6 +17,10 @@ "name": "off-equipped-HELMET", "directions": 4 }, + { + "name": "off-equipped-HELMET-vox", + "directions": 4 + }, { "name": "off-inhand-left", "directions": 4 @@ -29,6 +33,10 @@ "name": "on-equipped-HELMET", "directions": 4 }, + { + "name": "on-equipped-HELMET-vox", + "directions": 4 + }, { "name": "on-inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/Head/Helmets/firehelmet.rsi/off-equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Helmets/firehelmet.rsi/off-equipped-HELMET-vox.png new file mode 100644 index 00000000000..ad7bbad4477 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Helmets/firehelmet.rsi/off-equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Helmets/firehelmet.rsi/on-equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Helmets/firehelmet.rsi/on-equipped-HELMET-vox.png new file mode 100644 index 00000000000..2ebb820f60c Binary files /dev/null and b/Resources/Textures/Clothing/Head/Helmets/firehelmet.rsi/on-equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Helmets/ihvoid.rsi/equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Helmets/ihvoid.rsi/equipped-HELMET-vox.png new file mode 100644 index 00000000000..522a2eb9237 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Helmets/ihvoid.rsi/equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Helmets/ihvoid.rsi/meta.json b/Resources/Textures/Clothing/Head/Helmets/ihvoid.rsi/meta.json index 4427c7fb519..69b03ad731d 100644 --- a/Resources/Textures/Clothing/Head/Helmets/ihvoid.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Helmets/ihvoid.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Vox state by Flareguy for Space Station 14 | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-HELMET", "directions": 4 }, + { + "name": "equipped-HELMET-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/Head/Helmets/light_riot.rsi/equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Helmets/light_riot.rsi/equipped-HELMET-vox.png new file mode 100644 index 00000000000..952b32f3a1a Binary files /dev/null and b/Resources/Textures/Clothing/Head/Helmets/light_riot.rsi/equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Helmets/light_riot.rsi/meta.json b/Resources/Textures/Clothing/Head/Helmets/light_riot.rsi/meta.json index 5048ec6bb0d..abfed0635af 100644 --- a/Resources/Textures/Clothing/Head/Helmets/light_riot.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Helmets/light_riot.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from TGstation github https://github.com/tgstation/tgstation/commit/fed2ddeb54d0fb8bb97cb0a899a088b7d7423bbb", + "copyright": "Taken from TGstation github https://github.com/tgstation/tgstation/commit/fed2ddeb54d0fb8bb97cb0a899a088b7d7423bbb. Vox state by Flareguy for SS14", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-HELMET", "directions": 4 }, + { + "name": "equipped-HELMET-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/Head/Helmets/security.rsi/equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Helmets/security.rsi/equipped-HELMET-vox.png new file mode 100644 index 00000000000..703d927ecfe Binary files /dev/null and b/Resources/Textures/Clothing/Head/Helmets/security.rsi/equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Helmets/security.rsi/meta.json b/Resources/Textures/Clothing/Head/Helmets/security.rsi/meta.json index db2bbfafd4c..a0653e5c65f 100644 --- a/Resources/Textures/Clothing/Head/Helmets/security.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Helmets/security.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Vox state by Flareguy for SS14", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-HELMET", "directions": 4 }, + { + "name": "equipped-HELMET-vox", + "directions": 4 + }, { "name": "light-equipped-HELMET", "directions": 4 diff --git a/Resources/Textures/Clothing/Head/Helmets/spaceninja.rsi/equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Helmets/spaceninja.rsi/equipped-HELMET-vox.png new file mode 100644 index 00000000000..59f1e3263b1 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Helmets/spaceninja.rsi/equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Helmets/spaceninja.rsi/meta.json b/Resources/Textures/Clothing/Head/Helmets/spaceninja.rsi/meta.json index 61c8ce163c2..dae510390fe 100644 --- a/Resources/Textures/Clothing/Head/Helmets/spaceninja.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Helmets/spaceninja.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from paradise https://github.com/ParadiseSS13/Paradise/tree/master/icons (unknown commit) | vulpkanin version made by Floofers", + "copyright": "Taken from paradise https://github.com/ParadiseSS13/Paradise/tree/master/icons (unknown commit) | vulpkanin version made by Floofers. Vox state by Flareguy for SS14", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-HELMET", "directions": 4 }, + { + "name": "equipped-HELMET-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/Head/Helmets/swat.rsi/equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Helmets/swat.rsi/equipped-HELMET-vox.png new file mode 100644 index 00000000000..1ed974c2062 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Helmets/swat.rsi/equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Helmets/swat.rsi/meta.json b/Resources/Textures/Clothing/Head/Helmets/swat.rsi/meta.json index 8836c0b646c..f505b4e75e8 100644 --- a/Resources/Textures/Clothing/Head/Helmets/swat.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Helmets/swat.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/fb2d71495bfe81446159ef528534193d09dd8d34, inhand sprites by Flareguy", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/fb2d71495bfe81446159ef528534193d09dd8d34, inhand sprites & vox state by Flareguy", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-HELMET", "directions": 4 }, + { + "name": "equipped-HELMET-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/Head/Helmets/swat_syndicate.rsi/equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Helmets/swat_syndicate.rsi/equipped-HELMET-vox.png new file mode 100644 index 00000000000..e228a8a33aa Binary files /dev/null and b/Resources/Textures/Clothing/Head/Helmets/swat_syndicate.rsi/equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Helmets/swat_syndicate.rsi/meta.json b/Resources/Textures/Clothing/Head/Helmets/swat_syndicate.rsi/meta.json index 8bedbfb78e0..a0bf9545853 100644 --- a/Resources/Textures/Clothing/Head/Helmets/swat_syndicate.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Helmets/swat_syndicate.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/fb2d71495bfe81446159ef528534193d09dd8d34, inhand sprites by Flareguy, icon edited by Flareguy", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/fb2d71495bfe81446159ef528534193d09dd8d34, inhand sprites by Flareguy, icon edited by Flareguy. Vox state taken from from Paradise at https://github.com/ParadiseSS13/Paradise/blob/b1658390731745adf5cc9fb039bb0f17ad3c11a7/icons/mob/clothing/species/vox/helmet.dmi ", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-HELMET", "directions": 4 }, + { + "name": "equipped-HELMET-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/Head/Helmets/templar.rsi/equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Helmets/templar.rsi/equipped-HELMET-vox.png new file mode 100644 index 00000000000..3572a5de9f0 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Helmets/templar.rsi/equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Helmets/templar.rsi/meta.json b/Resources/Textures/Clothing/Head/Helmets/templar.rsi/meta.json index 7bd2e3e22a7..5c8b454ea69 100644 --- a/Resources/Textures/Clothing/Head/Helmets/templar.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Helmets/templar.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. equipped-HELMET-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79", "size": { "x": 32, "y": 32 @@ -13,6 +13,10 @@ { "name": "equipped-HELMET", "directions": 4 + }, + { + "name": "equipped-HELMET-vox", + "directions": 4 } ] } diff --git a/Resources/Textures/Clothing/Head/Helmets/wizardhelm.rsi/equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Helmets/wizardhelm.rsi/equipped-HELMET-vox.png new file mode 100644 index 00000000000..0cabbe106c7 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Helmets/wizardhelm.rsi/equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Helmets/wizardhelm.rsi/meta.json b/Resources/Textures/Clothing/Head/Helmets/wizardhelm.rsi/meta.json index a470e009443..8e639d26bcd 100644 --- a/Resources/Textures/Clothing/Head/Helmets/wizardhelm.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Helmets/wizardhelm.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. equipped-HELMET-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79 and modified to remove duplicate states", "size": { "x": 32, "y": 32 @@ -21,6 +21,10 @@ { "name": "inhand-right", "directions": 4 + }, + { + "name": "equipped-HELMET-vox", + "directions": 4 } ] } diff --git a/Resources/Textures/Clothing/Head/Hoods/Bio/bio.rsi/equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hoods/Bio/bio.rsi/equipped-HELMET-vox.png new file mode 100644 index 00000000000..35cfa8ddc0e Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hoods/Bio/bio.rsi/equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hoods/Bio/bio.rsi/meta.json b/Resources/Textures/Clothing/Head/Hoods/Bio/bio.rsi/meta.json index 4427c7fb519..fd2c470dc4b 100644 --- a/Resources/Textures/Clothing/Head/Hoods/Bio/bio.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Hoods/Bio/bio.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d | equipped-HELMET-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79", "size": { "x": 32, "y": 32 @@ -25,6 +25,10 @@ { "name": "equipped-HELMET-vulpkanin", "directions": 4 + }, + { + "name": "equipped-HELMET-vox", + "directions": 4 } ] } diff --git a/Resources/Textures/Clothing/Head/Hoods/Bio/cmo.rsi/equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hoods/Bio/cmo.rsi/equipped-HELMET-vox.png new file mode 100644 index 00000000000..90ad846f9b8 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hoods/Bio/cmo.rsi/equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hoods/Bio/cmo.rsi/meta.json b/Resources/Textures/Clothing/Head/Hoods/Bio/cmo.rsi/meta.json index 4427c7fb519..d95bcad823c 100644 --- a/Resources/Textures/Clothing/Head/Hoods/Bio/cmo.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Hoods/Bio/cmo.rsi/meta.json @@ -1,30 +1,34 @@ { - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d | equipped-HELMET-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79", + "size": { + "x": 32, + "y": 32 }, - { - "name": "equipped-HELMET", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - }, - { - "name": "equipped-HELMET-vulpkanin", - "directions": 4 - } - ] -} + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-HELMET", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "equipped-HELMET-vulpkanin", + "directions": 4 + }, + { + "name": "equipped-HELMET-vox", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Clothing/Head/Hoods/Bio/general.rsi/equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hoods/Bio/general.rsi/equipped-HELMET-vox.png new file mode 100644 index 00000000000..35cfa8ddc0e Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hoods/Bio/general.rsi/equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hoods/Bio/general.rsi/meta.json b/Resources/Textures/Clothing/Head/Hoods/Bio/general.rsi/meta.json index 4427c7fb519..d95bcad823c 100644 --- a/Resources/Textures/Clothing/Head/Hoods/Bio/general.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Hoods/Bio/general.rsi/meta.json @@ -1,30 +1,34 @@ { - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d | equipped-HELMET-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79", + "size": { + "x": 32, + "y": 32 }, - { - "name": "equipped-HELMET", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - }, - { - "name": "equipped-HELMET-vulpkanin", - "directions": 4 - } - ] -} + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-HELMET", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "equipped-HELMET-vulpkanin", + "directions": 4 + }, + { + "name": "equipped-HELMET-vox", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Clothing/Head/Hoods/Bio/janitor.rsi/equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hoods/Bio/janitor.rsi/equipped-HELMET-vox.png new file mode 100644 index 00000000000..2a8f1b0cdb3 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hoods/Bio/janitor.rsi/equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hoods/Bio/janitor.rsi/meta.json b/Resources/Textures/Clothing/Head/Hoods/Bio/janitor.rsi/meta.json index 4427c7fb519..d95bcad823c 100644 --- a/Resources/Textures/Clothing/Head/Hoods/Bio/janitor.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Hoods/Bio/janitor.rsi/meta.json @@ -1,30 +1,34 @@ { - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d | equipped-HELMET-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79", + "size": { + "x": 32, + "y": 32 }, - { - "name": "equipped-HELMET", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - }, - { - "name": "equipped-HELMET-vulpkanin", - "directions": 4 - } - ] -} + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-HELMET", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "equipped-HELMET-vulpkanin", + "directions": 4 + }, + { + "name": "equipped-HELMET-vox", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Clothing/Head/Hoods/Bio/scientist.rsi/equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hoods/Bio/scientist.rsi/equipped-HELMET-vox.png new file mode 100644 index 00000000000..4b90b700a8d Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hoods/Bio/scientist.rsi/equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hoods/Bio/scientist.rsi/meta.json b/Resources/Textures/Clothing/Head/Hoods/Bio/scientist.rsi/meta.json index 4427c7fb519..d95bcad823c 100644 --- a/Resources/Textures/Clothing/Head/Hoods/Bio/scientist.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Hoods/Bio/scientist.rsi/meta.json @@ -1,30 +1,34 @@ { - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d | equipped-HELMET-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79", + "size": { + "x": 32, + "y": 32 }, - { - "name": "equipped-HELMET", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - }, - { - "name": "equipped-HELMET-vulpkanin", - "directions": 4 - } - ] -} + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-HELMET", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "equipped-HELMET-vulpkanin", + "directions": 4 + }, + { + "name": "equipped-HELMET-vox", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Clothing/Head/Hoods/Bio/security.rsi/equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hoods/Bio/security.rsi/equipped-HELMET-vox.png new file mode 100644 index 00000000000..402d6bf76a9 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hoods/Bio/security.rsi/equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hoods/Bio/security.rsi/meta.json b/Resources/Textures/Clothing/Head/Hoods/Bio/security.rsi/meta.json index e830cae2823..6d404a14b82 100644 --- a/Resources/Textures/Clothing/Head/Hoods/Bio/security.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Hoods/Bio/security.rsi/meta.json @@ -1,30 +1,34 @@ { - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d edited by Floofers", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d edited by Floofers | equipped-HELMET-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79", + "size": { + "x": 32, + "y": 32 }, - { - "name": "equipped-HELMET", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - }, - { - "name": "equipped-HELMET-vulpkanin", - "directions": 4 - } - ] -} + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-HELMET", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "equipped-HELMET-vulpkanin", + "directions": 4 + }, + { + "name": "equipped-HELMET-vox", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Clothing/Head/Hoods/Bio/virology.rsi/equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hoods/Bio/virology.rsi/equipped-HELMET-vox.png new file mode 100644 index 00000000000..d4a1f0848eb Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hoods/Bio/virology.rsi/equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hoods/Bio/virology.rsi/meta.json b/Resources/Textures/Clothing/Head/Hoods/Bio/virology.rsi/meta.json index 4427c7fb519..d95bcad823c 100644 --- a/Resources/Textures/Clothing/Head/Hoods/Bio/virology.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Hoods/Bio/virology.rsi/meta.json @@ -1,30 +1,34 @@ { - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d | equipped-HELMET-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79", + "size": { + "x": 32, + "y": 32 }, - { - "name": "equipped-HELMET", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - }, - { - "name": "equipped-HELMET-vulpkanin", - "directions": 4 - } - ] -} + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-HELMET", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "equipped-HELMET-vulpkanin", + "directions": 4 + }, + { + "name": "equipped-HELMET-vox", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Clothing/Head/Misc/chickenhead.rsi/equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Misc/chickenhead.rsi/equipped-HELMET-vox.png new file mode 100644 index 00000000000..65a8cb83c17 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Misc/chickenhead.rsi/equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Misc/chickenhead.rsi/meta.json b/Resources/Textures/Clothing/Head/Misc/chickenhead.rsi/meta.json index a470e009443..8e639d26bcd 100644 --- a/Resources/Textures/Clothing/Head/Misc/chickenhead.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Misc/chickenhead.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. equipped-HELMET-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79 and modified to remove duplicate states", "size": { "x": 32, "y": 32 @@ -21,6 +21,10 @@ { "name": "inhand-right", "directions": 4 + }, + { + "name": "equipped-HELMET-vox", + "directions": 4 } ] } diff --git a/Resources/Textures/Clothing/Head/Welding/blue_flame_welding_mask.rsi/equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Welding/blue_flame_welding_mask.rsi/equipped-HELMET-vox.png new file mode 100644 index 00000000000..5b2c2550498 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Welding/blue_flame_welding_mask.rsi/equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Welding/blue_flame_welding_mask.rsi/meta.json b/Resources/Textures/Clothing/Head/Welding/blue_flame_welding_mask.rsi/meta.json index 39eb54f44c8..22039e8e306 100644 --- a/Resources/Textures/Clothing/Head/Welding/blue_flame_welding_mask.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Welding/blue_flame_welding_mask.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e, icon by лазік#7305 | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d edited by Floofers", + "copyright": "Taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79, icon by лазік#7305. equipped-HELMET-vox state modified by Flareguy from vox welding helmet state | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d edited by Floofers", "size": { "x": 32, "y": 32 @@ -21,6 +21,14 @@ "name": "up-equipped-HELMET", "directions": 4 }, + { + "name": "equipped-HELMET-vox", + "directions": 4 + }, + { + "name": "up-equipped-HELMET-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/Head/Welding/blue_flame_welding_mask.rsi/up-equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Welding/blue_flame_welding_mask.rsi/up-equipped-HELMET-vox.png new file mode 100644 index 00000000000..14129a80cb6 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Welding/blue_flame_welding_mask.rsi/up-equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Welding/flame_welding_mask.rsi/equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Welding/flame_welding_mask.rsi/equipped-HELMET-vox.png new file mode 100644 index 00000000000..64014962527 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Welding/flame_welding_mask.rsi/equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Welding/flame_welding_mask.rsi/meta.json b/Resources/Textures/Clothing/Head/Welding/flame_welding_mask.rsi/meta.json index 39eb54f44c8..d0931b9be1a 100644 --- a/Resources/Textures/Clothing/Head/Welding/flame_welding_mask.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Welding/flame_welding_mask.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e, icon by лазік#7305 | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d edited by Floofers", + "copyright": "Taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79 and up-equipped-HELMET modified by Flareguy, icon by лазік#7305. equipped-HELMET-vox state modified by Flareguy from vox welding helmet state | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d edited by Floofers", "size": { "x": 32, "y": 32 @@ -21,6 +21,14 @@ "name": "up-equipped-HELMET", "directions": 4 }, + { + "name": "equipped-HELMET-vox", + "directions": 4 + }, + { + "name": "up-equipped-HELMET-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/Head/Welding/flame_welding_mask.rsi/up-equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Welding/flame_welding_mask.rsi/up-equipped-HELMET-vox.png new file mode 100644 index 00000000000..d011e47c2d8 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Welding/flame_welding_mask.rsi/up-equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Welding/flame_welding_mask.rsi/up-equipped-HELMET.png b/Resources/Textures/Clothing/Head/Welding/flame_welding_mask.rsi/up-equipped-HELMET.png index b60219beccd..e7ef24dceef 100644 Binary files a/Resources/Textures/Clothing/Head/Welding/flame_welding_mask.rsi/up-equipped-HELMET.png and b/Resources/Textures/Clothing/Head/Welding/flame_welding_mask.rsi/up-equipped-HELMET.png differ diff --git a/Resources/Textures/Clothing/Head/Welding/paintedwelding.rsi/equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Welding/paintedwelding.rsi/equipped-HELMET-vox.png new file mode 100644 index 00000000000..0b9342b2362 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Welding/paintedwelding.rsi/equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Welding/paintedwelding.rsi/meta.json b/Resources/Textures/Clothing/Head/Welding/paintedwelding.rsi/meta.json index 39eb54f44c8..825fa48b804 100644 --- a/Resources/Textures/Clothing/Head/Welding/paintedwelding.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Welding/paintedwelding.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e, icon by лазік#7305 | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d edited by Floofers", + "copyright": "Taken from CEV-Eris at https://github.com/discordia-space/CEV-Eris/blob/2a0d963d5bf68bd8ddf6fba6f60479bec172b51d/icons/inventory/head/mob.dmi, icon by лазік#7305. equipped-HELMET-vox state modified by Flareguy from 'welding' state in /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79 | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d edited by Floofers", "size": { "x": 32, "y": 32 @@ -21,6 +21,14 @@ "name": "up-equipped-HELMET", "directions": 4 }, + { + "name": "equipped-HELMET-vox", + "directions": 4 + }, + { + "name": "up-equipped-HELMET-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/Head/Welding/paintedwelding.rsi/up-equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Welding/paintedwelding.rsi/up-equipped-HELMET-vox.png new file mode 100644 index 00000000000..6ecdfda3ea0 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Welding/paintedwelding.rsi/up-equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Welding/welding.rsi/equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Welding/welding.rsi/equipped-HELMET-vox.png new file mode 100644 index 00000000000..6b19f42a821 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Welding/welding.rsi/equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Welding/welding.rsi/meta.json b/Resources/Textures/Clothing/Head/Welding/welding.rsi/meta.json index 3a84e3148e0..569555b8695 100644 --- a/Resources/Textures/Clothing/Head/Welding/welding.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Welding/welding.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d", + "copyright": "Taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79 | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d", "size": { "x": 32, "y": 32 @@ -21,6 +21,14 @@ "name": "up-equipped-HELMET", "directions": 4 }, + { + "name": "equipped-HELMET-vox", + "directions": 4 + }, + { + "name": "up-equipped-HELMET-vox", + "directions": 4 + }, { "name": "equipped-HELMET-hamster", "directions": 4 diff --git a/Resources/Textures/Clothing/Head/Welding/welding.rsi/up-equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Welding/welding.rsi/up-equipped-HELMET-vox.png new file mode 100644 index 00000000000..b13423cd8b1 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Welding/welding.rsi/up-equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Mask/bee.rsi/equipped-MASK-vox.png b/Resources/Textures/Clothing/Mask/bee.rsi/equipped-MASK-vox.png new file mode 100644 index 00000000000..05af835e9d9 Binary files /dev/null and b/Resources/Textures/Clothing/Mask/bee.rsi/equipped-MASK-vox.png differ diff --git a/Resources/Textures/Clothing/Mask/bee.rsi/meta.json b/Resources/Textures/Clothing/Mask/bee.rsi/meta.json index cc214ea433b..628b5d1ffcf 100644 --- a/Resources/Textures/Clothing/Mask/bee.rsi/meta.json +++ b/Resources/Textures/Clothing/Mask/bee.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/dannno/-tg-station/blob/a51c5a85d327f562004cef2f36c081ad0d95fd9a/icons/obj/clothing/masks.dmi. Reptilian edit by Nairod(Github)", + "copyright": "Taken from tgstation at commit https://github.com/dannno/-tg-station/blob/a51c5a85d327f562004cef2f36c081ad0d95fd9a/icons/obj/clothing/masks.dmi. Reptilian edit by Nairod(Github). equipped-MASK-vox state taken from Paradise at https://github.com/ParadiseSS13/Paradise/blob/bc095ad398790a2b718b2bab4f2157cdd80a51da/icons/mob/clothing/species/vox/mask.dmi", "size": { "x": 32, "y": 32 @@ -17,6 +17,10 @@ { "name": "equipped-MASK-reptilian", "directions": 4 + }, + { + "name": "equipped-MASK-vox", + "directions": 4 } ] } diff --git a/Resources/Textures/Clothing/Mask/breath.rsi/meta.json b/Resources/Textures/Clothing/Mask/breath.rsi/meta.json index bed9ae64b0b..f0ec0118d81 100644 --- a/Resources/Textures/Clothing/Mask/breath.rsi/meta.json +++ b/Resources/Textures/Clothing/Mask/breath.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Reptilian edit by Nairod(Github) equipped-MASK-secdog modified from equipped-MASK-dog by TJohnson. | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Reptilian edit by Nairod(Github) equipped-MASK-secdog modified from equipped-MASK-dog by TJohnson. | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d | equipped-MASK-vox & up-equipped-MASK-vox state in /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/4638130fab5ff0e9faa220688811349d3297a33e", "size": { "x": 32, "y": 32 @@ -18,6 +18,14 @@ "name": "up-equipped-MASK", "directions": 4 }, + { + "name": "equipped-MASK-vox", + "directions": 4 + }, + { + "name": "up-equipped-MASK-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 @@ -54,10 +62,6 @@ "name": "equipped-MASK-possum", "directions": 4 }, - { - "name": "equipped-MASK-vox", - "directions": 4 - }, { "name": "equipped-MASK-pig", "directions": 4 diff --git a/Resources/Textures/Clothing/Mask/breath.rsi/up-equipped-MASK-vox.png b/Resources/Textures/Clothing/Mask/breath.rsi/up-equipped-MASK-vox.png new file mode 100644 index 00000000000..770ad70cf5e Binary files /dev/null and b/Resources/Textures/Clothing/Mask/breath.rsi/up-equipped-MASK-vox.png differ diff --git a/Resources/Textures/Clothing/Mask/clown.rsi/equipped-MASK-vox.png b/Resources/Textures/Clothing/Mask/clown.rsi/equipped-MASK-vox.png new file mode 100644 index 00000000000..0a7c6fc3279 Binary files /dev/null and b/Resources/Textures/Clothing/Mask/clown.rsi/equipped-MASK-vox.png differ diff --git a/Resources/Textures/Clothing/Mask/clown.rsi/meta.json b/Resources/Textures/Clothing/Mask/clown.rsi/meta.json index b3709bcd83c..6671a11d694 100644 --- a/Resources/Textures/Clothing/Mask/clown.rsi/meta.json +++ b/Resources/Textures/Clothing/Mask/clown.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Reptilian edit by Nairod(Github) | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d edited by Floofers", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Reptilian edit by Nairod(Github) | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d edited by Floofers | equipped-MASK-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/4638130fab5ff0e9faa220688811349d3297a33e and slightly modified by Flareguy", "size": { "x": 32, "y": 32 @@ -33,6 +33,10 @@ { "name": "equipped-MASK-reptilian", "directions": 4 + }, + { + "name": "equipped-MASK-vox", + "directions": 4 } ] } diff --git a/Resources/Textures/Clothing/Mask/gas.rsi/equipped-MASK-vox.png b/Resources/Textures/Clothing/Mask/gas.rsi/equipped-MASK-vox.png new file mode 100644 index 00000000000..7170d7ebdf5 Binary files /dev/null and b/Resources/Textures/Clothing/Mask/gas.rsi/equipped-MASK-vox.png differ diff --git a/Resources/Textures/Clothing/Mask/gas.rsi/meta.json b/Resources/Textures/Clothing/Mask/gas.rsi/meta.json index 07a0c908b10..7d52a23d9c4 100644 --- a/Resources/Textures/Clothing/Mask/gas.rsi/meta.json +++ b/Resources/Textures/Clothing/Mask/gas.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Reptilian edit by Nairod(Github) | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d edited by Floofers", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Reptilian edit by Nairod(Github) | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d edited by Floofers | equipped-MASK-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/4638130fab5ff0e9faa220688811349d3297a33e and modified by Flareguy", "size": { "x": 32, "y": 32 @@ -33,6 +33,10 @@ { "name": "equipped-MASK-reptilian", "directions": 4 + }, + { + "name": "equipped-MASK-vox", + "directions": 4 } ] } diff --git a/Resources/Textures/Clothing/Mask/gasatmos.rsi/equipped-MASK-vox.png b/Resources/Textures/Clothing/Mask/gasatmos.rsi/equipped-MASK-vox.png new file mode 100644 index 00000000000..8975b1eb04e Binary files /dev/null and b/Resources/Textures/Clothing/Mask/gasatmos.rsi/equipped-MASK-vox.png differ diff --git a/Resources/Textures/Clothing/Mask/gasatmos.rsi/meta.json b/Resources/Textures/Clothing/Mask/gasatmos.rsi/meta.json index 63476f222be..6e2e5245473 100644 --- a/Resources/Textures/Clothing/Mask/gasatmos.rsi/meta.json +++ b/Resources/Textures/Clothing/Mask/gasatmos.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Reptilian edit by Nairod(Github) | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d edited by Floofers", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Reptilian edit by Nairod(Github) | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d edited by Floofers | equipped-MASK-vox state modified by Flareguy from 'gas-alt' state in /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/4638130fab5ff0e9faa220688811349d3297a33e", "size": { "x": 32, "y": 32 @@ -29,6 +29,10 @@ { "name": "equipped-MASK-reptilian", "directions": 4 + }, + { + "name": "equipped-MASK-vox", + "directions": 4 } ] } diff --git a/Resources/Textures/Clothing/Mask/gascaptain.rsi/equipped-MASK-vox.png b/Resources/Textures/Clothing/Mask/gascaptain.rsi/equipped-MASK-vox.png new file mode 100644 index 00000000000..bc0f5e90119 Binary files /dev/null and b/Resources/Textures/Clothing/Mask/gascaptain.rsi/equipped-MASK-vox.png differ diff --git a/Resources/Textures/Clothing/Mask/gascaptain.rsi/meta.json b/Resources/Textures/Clothing/Mask/gascaptain.rsi/meta.json index 4b2d043352d..332a8fed816 100644 --- a/Resources/Textures/Clothing/Mask/gascaptain.rsi/meta.json +++ b/Resources/Textures/Clothing/Mask/gascaptain.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e, edited by Emisse for ss14. Reptilian edit by Nairod(Github) | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d edited by Floofers", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e, edited by Emisse for ss14. Reptilian edit by Nairod(Github) | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d edited by Floofers | equipped-MASK-vox state taken from 'gas-alt' state in /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/4638130fab5ff0e9faa220688811349d3297a33e, and modified by Flareguy", "size": { "x": 32, "y": 32 @@ -29,6 +29,10 @@ { "name": "equipped-MASK-reptilian", "directions": 4 + }, + { + "name": "equipped-MASK-vox", + "directions": 4 } ] } diff --git a/Resources/Textures/Clothing/Mask/gasexplorer.rsi/equipped-MASK-vox.png b/Resources/Textures/Clothing/Mask/gasexplorer.rsi/equipped-MASK-vox.png new file mode 100644 index 00000000000..f504228f7df Binary files /dev/null and b/Resources/Textures/Clothing/Mask/gasexplorer.rsi/equipped-MASK-vox.png differ diff --git a/Resources/Textures/Clothing/Mask/gasexplorer.rsi/meta.json b/Resources/Textures/Clothing/Mask/gasexplorer.rsi/meta.json index 600054012ea..42e2775ecae 100644 --- a/Resources/Textures/Clothing/Mask/gasexplorer.rsi/meta.json +++ b/Resources/Textures/Clothing/Mask/gasexplorer.rsi/meta.json @@ -1,38 +1,42 @@ { - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Reptilian edit by Nairod(Github) | vulpkanin version edited by Floofers", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Reptilian edit by Nairod(Github) | vulpkanin version edited by Floofers. Vox state by Flareguy for SS14", + "size": { + "x": 32, + "y": 32 }, - { - "name": "equipped-MASK", - "directions": 4 - }, - { - "name": "up-equipped-MASK", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - }, - { - "name": "equipped-MASK-vulpkanin", - "directions": 4 - }, - { - "name": "equipped-MASK-reptilian", - "directions": 4 - } - ] -} + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-MASK", + "directions": 4 + }, + { + "name": "equipped-MASK-vox", + "directions": 4 + }, + { + "name": "up-equipped-MASK", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "equipped-MASK-vulpkanin", + "directions": 4 + }, + { + "name": "equipped-MASK-reptilian", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Clothing/Mask/gassecurity.rsi/equipped-MASK-vox.png b/Resources/Textures/Clothing/Mask/gassecurity.rsi/equipped-MASK-vox.png new file mode 100644 index 00000000000..ff33f309443 Binary files /dev/null and b/Resources/Textures/Clothing/Mask/gassecurity.rsi/equipped-MASK-vox.png differ diff --git a/Resources/Textures/Clothing/Mask/gassecurity.rsi/meta.json b/Resources/Textures/Clothing/Mask/gassecurity.rsi/meta.json index 9ed76c4839d..a92fcef8bf8 100644 --- a/Resources/Textures/Clothing/Mask/gassecurity.rsi/meta.json +++ b/Resources/Textures/Clothing/Mask/gassecurity.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Reptilian edit by Nairod(Github) | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Reptilian edit by Nairod(Github) | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d | equipped-MASK-vox & up-equipped-MASK-vox states taken from Paradise at https://github.com/ParadiseSS13/Paradise/blob/bc095ad398790a2b718b2bab4f2157cdd80a51da/icons/mob/clothing/species/vox/mask.dmi", "size": { "x": 32, "y": 32 @@ -14,24 +14,32 @@ "name": "equipped-MASK", "directions": 4 }, + { + "name": "equipped-MASK-reptilian", + "directions": 4 + }, + { + "name": "equipped-MASK-vox", + "directions": 4 + }, { "name": "up-equipped-MASK", "directions": 4 }, { - "name": "inhand-left", + "name": "up-equipped-MASK-vox", "directions": 4 }, { - "name": "inhand-right", + "name": "inhand-left", "directions": 4 }, { - "name": "equipped-MASK-vulpkanin", + "name": "inhand-right", "directions": 4 }, { - "name": "equipped-MASK-reptilian", + "name": "equipped-MASK-vulpkanin", "directions": 4 } ] diff --git a/Resources/Textures/Clothing/Mask/gassecurity.rsi/up-equipped-MASK-vox.png b/Resources/Textures/Clothing/Mask/gassecurity.rsi/up-equipped-MASK-vox.png new file mode 100644 index 00000000000..e701323f55a Binary files /dev/null and b/Resources/Textures/Clothing/Mask/gassecurity.rsi/up-equipped-MASK-vox.png differ diff --git a/Resources/Textures/Clothing/Mask/gassyndicate.rsi/equipped-MASK-vox.png b/Resources/Textures/Clothing/Mask/gassyndicate.rsi/equipped-MASK-vox.png new file mode 100644 index 00000000000..59a80479f7f Binary files /dev/null and b/Resources/Textures/Clothing/Mask/gassyndicate.rsi/equipped-MASK-vox.png differ diff --git a/Resources/Textures/Clothing/Mask/gassyndicate.rsi/meta.json b/Resources/Textures/Clothing/Mask/gassyndicate.rsi/meta.json index 1e01e88dc45..b2871a27974 100644 --- a/Resources/Textures/Clothing/Mask/gassyndicate.rsi/meta.json +++ b/Resources/Textures/Clothing/Mask/gassyndicate.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Reptilian edit by Nairod(Github) | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Reptilian edit by Nairod(Github) | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d | equipped-MASK-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/4638130fab5ff0e9faa220688811349d3297a33e and slightly modified to fix an error", "size": { "x": 32, "y": 32 @@ -47,6 +47,16 @@ [ 0.5, 0.5, 0.5 ], [ 0.5, 0.5, 0.5 ] ] + }, + { + "name": "equipped-MASK-vox", + "directions": 4, + "delays": [ + [ 0.5, 0.5, 0.5 ], + [ 0.5, 0.5, 0.5 ], + [ 0.5, 0.5, 0.5 ], + [ 0.5, 0.5, 0.5 ] + ] } ] } diff --git a/Resources/Textures/Clothing/Mask/italian_moustache.rsi/equipped-MASK-vox.png b/Resources/Textures/Clothing/Mask/italian_moustache.rsi/equipped-MASK-vox.png new file mode 100644 index 00000000000..9bd2b35d778 Binary files /dev/null and b/Resources/Textures/Clothing/Mask/italian_moustache.rsi/equipped-MASK-vox.png differ diff --git a/Resources/Textures/Clothing/Mask/italian_moustache.rsi/meta.json b/Resources/Textures/Clothing/Mask/italian_moustache.rsi/meta.json index 9621b18fe9e..af0873d23a7 100644 --- a/Resources/Textures/Clothing/Mask/italian_moustache.rsi/meta.json +++ b/Resources/Textures/Clothing/Mask/italian_moustache.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/6665eec76c98a4f3f89bebcd10b34b47dcc0b8ae | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/6665eec76c98a4f3f89bebcd10b34b47dcc0b8ae | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d | equipped-MASK-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-MASK", "directions": 4 }, + { + "name": "equipped-MASK-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/Mask/medical.rsi/equipped-MASK-vox.png b/Resources/Textures/Clothing/Mask/medical.rsi/equipped-MASK-vox.png new file mode 100644 index 00000000000..c3fa7f5917d Binary files /dev/null and b/Resources/Textures/Clothing/Mask/medical.rsi/equipped-MASK-vox.png differ diff --git a/Resources/Textures/Clothing/Mask/medical.rsi/meta.json b/Resources/Textures/Clothing/Mask/medical.rsi/meta.json index 59e292cbd4b..ba8e8da405c 100644 --- a/Resources/Textures/Clothing/Mask/medical.rsi/meta.json +++ b/Resources/Textures/Clothing/Mask/medical.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Reptilian edit by Nairod(Github) | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Reptilian edit by Nairod(Github) | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d | equipped-MASK-vox & up-equipped-MASK-vox states taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/4638130fab5ff0e9faa220688811349d3297a33e", "size": { "x": 32, "y": 32 @@ -75,6 +75,14 @@ { "name": "equipped-MASK-reptilian", "directions": 4 + }, + { + "name": "equipped-MASK-vox", + "directions": 4 + }, + { + "name": "up-equipped-MASK-vox", + "directions": 4 } ] } diff --git a/Resources/Textures/Clothing/Mask/medical.rsi/up-equipped-MASK-vox.png b/Resources/Textures/Clothing/Mask/medical.rsi/up-equipped-MASK-vox.png new file mode 100644 index 00000000000..770ad70cf5e Binary files /dev/null and b/Resources/Textures/Clothing/Mask/medical.rsi/up-equipped-MASK-vox.png differ diff --git a/Resources/Textures/Clothing/Mask/mime.rsi/equipped-MASK-vox.png b/Resources/Textures/Clothing/Mask/mime.rsi/equipped-MASK-vox.png new file mode 100644 index 00000000000..cab47297f0a Binary files /dev/null and b/Resources/Textures/Clothing/Mask/mime.rsi/equipped-MASK-vox.png differ diff --git a/Resources/Textures/Clothing/Mask/mime.rsi/meta.json b/Resources/Textures/Clothing/Mask/mime.rsi/meta.json index 34248cb9b95..e1a387cdd35 100644 --- a/Resources/Textures/Clothing/Mask/mime.rsi/meta.json +++ b/Resources/Textures/Clothing/Mask/mime.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Reptilian edit by Nairod(Github) | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d edited by Floofers", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Reptilian edit by Nairod(Github) | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d edited by Floofers | equipped-MASK-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/4638130fab5ff0e9faa220688811349d3297a33e", "size": { "x": 32, "y": 32 @@ -25,6 +25,10 @@ { "name": "equipped-MASK-reptilian", "directions": 4 + }, + { + "name": "equipped-MASK-vox", + "directions": 4 } ] } diff --git a/Resources/Textures/Clothing/Mask/muzzle.rsi/equipped-MASK-vox.png b/Resources/Textures/Clothing/Mask/muzzle.rsi/equipped-MASK-vox.png new file mode 100644 index 00000000000..529c87878ed Binary files /dev/null and b/Resources/Textures/Clothing/Mask/muzzle.rsi/equipped-MASK-vox.png differ diff --git a/Resources/Textures/Clothing/Mask/muzzle.rsi/meta.json b/Resources/Textures/Clothing/Mask/muzzle.rsi/meta.json index 33176d73e7b..d5fd7a68ee2 100644 --- a/Resources/Textures/Clothing/Mask/muzzle.rsi/meta.json +++ b/Resources/Textures/Clothing/Mask/muzzle.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Reptilian edit by Nairod(Github) | vulpkanin version taken from https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13/commit/091d9ec00f186052b87bd65125e896f78faefe38", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Reptilian edit by Nairod(Github) | vulpkanin version taken from https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13/commit/091d9ec00f186052b87bd65125e896f78faefe38 | equipped-MASK-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/4638130fab5ff0e9faa220688811349d3297a33e", "size": { "x": 32, "y": 32 @@ -29,6 +29,10 @@ { "name": "equipped-MASK-reptilian", "directions": 4 + }, + { + "name": "equipped-MASK-vox", + "directions": 4 } ] } diff --git a/Resources/Textures/Clothing/Mask/ninja.rsi/equipped-MASK-vox.png b/Resources/Textures/Clothing/Mask/ninja.rsi/equipped-MASK-vox.png new file mode 100644 index 00000000000..924742fa945 Binary files /dev/null and b/Resources/Textures/Clothing/Mask/ninja.rsi/equipped-MASK-vox.png differ diff --git a/Resources/Textures/Clothing/Mask/ninja.rsi/meta.json b/Resources/Textures/Clothing/Mask/ninja.rsi/meta.json index da51268a11b..26fff924c11 100644 --- a/Resources/Textures/Clothing/Mask/ninja.rsi/meta.json +++ b/Resources/Textures/Clothing/Mask/ninja.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from paradise at commit https://github.com/ParadiseSS13/Paradise/commit/33f7c1ef477fa67db5dda48078b469ab59aa7997 | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d edited by Floofers", + "copyright": "Taken from paradise at commit https://github.com/ParadiseSS13/Paradise/commit/33f7c1ef477fa67db5dda48078b469ab59aa7997 | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d edited by Floofers | equipped-MASK-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/4638130fab5ff0e9faa220688811349d3297a33e", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-MASK", "directions": 4 }, + { + "name": "equipped-MASK-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/Mask/plaguedoctormask.rsi/equipped-MASK-vox.png b/Resources/Textures/Clothing/Mask/plaguedoctormask.rsi/equipped-MASK-vox.png new file mode 100644 index 00000000000..67d3c25cac4 Binary files /dev/null and b/Resources/Textures/Clothing/Mask/plaguedoctormask.rsi/equipped-MASK-vox.png differ diff --git a/Resources/Textures/Clothing/Mask/plaguedoctormask.rsi/meta.json b/Resources/Textures/Clothing/Mask/plaguedoctormask.rsi/meta.json index 0f2358a55ff..4536363585b 100644 --- a/Resources/Textures/Clothing/Mask/plaguedoctormask.rsi/meta.json +++ b/Resources/Textures/Clothing/Mask/plaguedoctormask.rsi/meta.json @@ -1,30 +1,34 @@ -{ - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Taken from TGstation github https://github.com/tgstation/tgstation/commit/e89db4dd4f42377b0adafb06806a763314a89034 , edited by Alekshhh | vulpkanin version taken from https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13/commit/091d9ec00f186052b87bd65125e896f78faefe38", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" - }, - { - "name": "equipped-MASK", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - }, - { - "name": "equipped-MASK-vulpkanin", - "directions": 4 - } - ] -} +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from TGstation github https://github.com/tgstation/tgstation/commit/e89db4dd4f42377b0adafb06806a763314a89034 , edited by Alekshhh | vulpkanin version taken from https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13/commit/091d9ec00f186052b87bd65125e896f78faefe38 | equipped-MASK-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/4638130fab5ff0e9faa220688811349d3297a33e", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-MASK", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "equipped-MASK-vulpkanin", + "directions": 4 + }, + { + "name": "equipped-MASK-vox", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/Mask/sexyclown.rsi/equipped-MASK-vox.png b/Resources/Textures/Clothing/Mask/sexyclown.rsi/equipped-MASK-vox.png new file mode 100644 index 00000000000..b1cb32a1573 Binary files /dev/null and b/Resources/Textures/Clothing/Mask/sexyclown.rsi/equipped-MASK-vox.png differ diff --git a/Resources/Textures/Clothing/Mask/sexyclown.rsi/meta.json b/Resources/Textures/Clothing/Mask/sexyclown.rsi/meta.json index da5fdbe7cd2..9e577533fcc 100644 --- a/Resources/Textures/Clothing/Mask/sexyclown.rsi/meta.json +++ b/Resources/Textures/Clothing/Mask/sexyclown.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/blob/ed466a4c67828b44ddb9d9550366be5c2d745955/icons/obj/clothing/masks.dmi. Reptilian edit by Nairod(Github) | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/blob/ed466a4c67828b44ddb9d9550366be5c2d745955/icons/obj/clothing/masks.dmi. Reptilian edit by Nairod(Github) | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d | equipped-MASK-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/4638130fab5ff0e9faa220688811349d3297a33e", "size": { "x": 32, "y": 32 @@ -21,6 +21,10 @@ { "name": "equipped-MASK-reptilian", "directions": 4 + }, + { + "name": "equipped-MASK-vox", + "directions": 4 } ] } diff --git a/Resources/Textures/Clothing/Mask/sexymime.rsi/equipped-MASK-vox.png b/Resources/Textures/Clothing/Mask/sexymime.rsi/equipped-MASK-vox.png new file mode 100644 index 00000000000..4ceaf59677b Binary files /dev/null and b/Resources/Textures/Clothing/Mask/sexymime.rsi/equipped-MASK-vox.png differ diff --git a/Resources/Textures/Clothing/Mask/sexymime.rsi/meta.json b/Resources/Textures/Clothing/Mask/sexymime.rsi/meta.json index 8c0842d68ad..747190632bf 100644 --- a/Resources/Textures/Clothing/Mask/sexymime.rsi/meta.json +++ b/Resources/Textures/Clothing/Mask/sexymime.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/blob/ed466a4c67828b44ddb9d9550366be5c2d745955/icons/obj/clothing/masks.dmi. Reptilian edit by Nairod(Github) | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d edited by Floofers", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/blob/ed466a4c67828b44ddb9d9550366be5c2d745955/icons/obj/clothing/masks.dmi. Reptilian edit by Nairod(Github) | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d edited by Floofers | equipped-MASK-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/4638130fab5ff0e9faa220688811349d3297a33e", "size": { "x": 32, "y": 32 @@ -21,6 +21,10 @@ { "name": "equipped-MASK-reptilian", "directions": 4 + }, + { + "name": "equipped-MASK-vox", + "directions": 4 } ] } diff --git a/Resources/Textures/Clothing/Mask/sterile.rsi/equipped-MASK-vox.png b/Resources/Textures/Clothing/Mask/sterile.rsi/equipped-MASK-vox.png new file mode 100644 index 00000000000..18c64e1048e Binary files /dev/null and b/Resources/Textures/Clothing/Mask/sterile.rsi/equipped-MASK-vox.png differ diff --git a/Resources/Textures/Clothing/Mask/sterile.rsi/meta.json b/Resources/Textures/Clothing/Mask/sterile.rsi/meta.json index f61bba1a326..4115a8de19f 100644 --- a/Resources/Textures/Clothing/Mask/sterile.rsi/meta.json +++ b/Resources/Textures/Clothing/Mask/sterile.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Reptilian edit by Nairod(Github) | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Reptilian edit by Nairod(Github) | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d | equipped-MASK-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/4638130fab5ff0e9faa220688811349d3297a33e", "size": { "x": 32, "y": 32 @@ -14,10 +14,22 @@ "name": "equipped-MASK", "directions": 4 }, + { + "name": "equipped-MASK-reptilian", + "directions": 4 + }, + { + "name": "equipped-MASK-vox", + "directions": 4 + }, { "name": "up-equipped-MASK", "directions": 4 }, + { + "name": "up-equipped-MASK-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 @@ -33,10 +45,6 @@ { "name": "up-equipped-MASK-vulpkanin", "directions": 4 - }, - { - "name": "equipped-MASK-reptilian", - "directions": 4 } ] } diff --git a/Resources/Textures/Clothing/Mask/sterile.rsi/up-equipped-MASK-vox.png b/Resources/Textures/Clothing/Mask/sterile.rsi/up-equipped-MASK-vox.png new file mode 100644 index 00000000000..770ad70cf5e Binary files /dev/null and b/Resources/Textures/Clothing/Mask/sterile.rsi/up-equipped-MASK-vox.png differ diff --git a/Resources/Textures/Clothing/Mask/swat.rsi/equipped-MASK-vox.png b/Resources/Textures/Clothing/Mask/swat.rsi/equipped-MASK-vox.png new file mode 100644 index 00000000000..d654e3493c9 Binary files /dev/null and b/Resources/Textures/Clothing/Mask/swat.rsi/equipped-MASK-vox.png differ diff --git a/Resources/Textures/Clothing/Mask/swat.rsi/meta.json b/Resources/Textures/Clothing/Mask/swat.rsi/meta.json index fb3b9e8f4a5..9b8c7ad0809 100644 --- a/Resources/Textures/Clothing/Mask/swat.rsi/meta.json +++ b/Resources/Textures/Clothing/Mask/swat.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/RemieRichards/-tg-station/blob/f8c05e21694cd3cb703e40edc5cfc375017944b1/icons/obj/clothing/masks.dmi. Reptilian edit by Nairod(Github) | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d", + "copyright": "Taken from tgstation at commit https://github.com/RemieRichards/-tg-station/blob/f8c05e21694cd3cb703e40edc5cfc375017944b1/icons/obj/clothing/masks.dmi. Reptilian edit by Nairod(Github) | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d | equipped-MASK-vox state taken from Paradise at https://github.com/ParadiseSS13/Paradise/blob/bc095ad398790a2b718b2bab4f2157cdd80a51da/icons/mob/clothing/species/vox/mask.dmi", "size": { "x": 32, "y": 32 @@ -15,19 +15,23 @@ "directions": 4 }, { - "name": "inhand-left", + "name": "equipped-MASK-reptilian", "directions": 4 }, { - "name": "inhand-right", + "name": "equipped-MASK-vox", "directions": 4 }, { - "name": "equipped-MASK-vulpkanin", + "name": "inhand-left", "directions": 4 }, { - "name": "equipped-MASK-reptilian", + "name": "inhand-right", + "directions": 4 + }, + { + "name": "equipped-MASK-vulpkanin", "directions": 4 } ] diff --git a/Resources/Textures/Clothing/Mask/welding-gas.rsi/equipped-MASK-vox.png b/Resources/Textures/Clothing/Mask/welding-gas.rsi/equipped-MASK-vox.png new file mode 100644 index 00000000000..e6028f3a4c1 Binary files /dev/null and b/Resources/Textures/Clothing/Mask/welding-gas.rsi/equipped-MASK-vox.png differ diff --git a/Resources/Textures/Clothing/Mask/welding-gas.rsi/equipped-MASK.png b/Resources/Textures/Clothing/Mask/welding-gas.rsi/equipped-MASK.png new file mode 100644 index 00000000000..5d0a7ea70d1 Binary files /dev/null and b/Resources/Textures/Clothing/Mask/welding-gas.rsi/equipped-MASK.png differ diff --git a/Resources/Textures/Clothing/Mask/welding-gas.rsi/icon-up.png b/Resources/Textures/Clothing/Mask/welding-gas.rsi/icon-up.png new file mode 100644 index 00000000000..352e536ca91 Binary files /dev/null and b/Resources/Textures/Clothing/Mask/welding-gas.rsi/icon-up.png differ diff --git a/Resources/Textures/Clothing/Mask/welding-gas.rsi/icon.png b/Resources/Textures/Clothing/Mask/welding-gas.rsi/icon.png new file mode 100644 index 00000000000..cdb8d4b7c7e Binary files /dev/null and b/Resources/Textures/Clothing/Mask/welding-gas.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Mask/welding-gas.rsi/inhand-left.png b/Resources/Textures/Clothing/Mask/welding-gas.rsi/inhand-left.png new file mode 100644 index 00000000000..c5111a66a9b Binary files /dev/null and b/Resources/Textures/Clothing/Mask/welding-gas.rsi/inhand-left.png differ diff --git a/Resources/Textures/Clothing/Mask/welding-gas.rsi/inhand-right.png b/Resources/Textures/Clothing/Mask/welding-gas.rsi/inhand-right.png new file mode 100644 index 00000000000..5841f0b8460 Binary files /dev/null and b/Resources/Textures/Clothing/Mask/welding-gas.rsi/inhand-right.png differ diff --git a/Resources/Textures/Clothing/Mask/welding-gas.rsi/meta.json b/Resources/Textures/Clothing/Mask/welding-gas.rsi/meta.json new file mode 100644 index 00000000000..8e9b8573250 --- /dev/null +++ b/Resources/Textures/Clothing/Mask/welding-gas.rsi/meta.json @@ -0,0 +1,49 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/6f5ca45e3ac06b30fb1957042214a888d8c01722. Inhands, worn sprites, and vox sprites created by EmoGarbage404 (github)", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "icon-up" + }, + { + "name": "equipped-MASK", + "directions": 4 + }, + { + "name": "up-equipped-MASK", + "directions": 4 + }, + { + "name": "equipped-MASK-vox", + "directions": 4 + }, + { + "name": "up-equipped-MASK-vox", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "up-inhand-left", + "directions": 4 + }, + { + "name": "up-inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/Mask/welding-gas.rsi/up-equipped-MASK-vox.png b/Resources/Textures/Clothing/Mask/welding-gas.rsi/up-equipped-MASK-vox.png new file mode 100644 index 00000000000..90871d7d006 Binary files /dev/null and b/Resources/Textures/Clothing/Mask/welding-gas.rsi/up-equipped-MASK-vox.png differ diff --git a/Resources/Textures/Clothing/Mask/welding-gas.rsi/up-equipped-MASK.png b/Resources/Textures/Clothing/Mask/welding-gas.rsi/up-equipped-MASK.png new file mode 100644 index 00000000000..449c8624c9a Binary files /dev/null and b/Resources/Textures/Clothing/Mask/welding-gas.rsi/up-equipped-MASK.png differ diff --git a/Resources/Textures/Clothing/Mask/welding-gas.rsi/up-inhand-left.png b/Resources/Textures/Clothing/Mask/welding-gas.rsi/up-inhand-left.png new file mode 100644 index 00000000000..2868ab8317e Binary files /dev/null and b/Resources/Textures/Clothing/Mask/welding-gas.rsi/up-inhand-left.png differ diff --git a/Resources/Textures/Clothing/Mask/welding-gas.rsi/up-inhand-right.png b/Resources/Textures/Clothing/Mask/welding-gas.rsi/up-inhand-right.png new file mode 100644 index 00000000000..1362d990110 Binary files /dev/null and b/Resources/Textures/Clothing/Mask/welding-gas.rsi/up-inhand-right.png differ diff --git a/Resources/Textures/Clothing/Neck/Misc/whistles.rsi/meta.json b/Resources/Textures/Clothing/Neck/Misc/whistles.rsi/meta.json deleted file mode 100644 index 31cda14261e..00000000000 --- a/Resources/Textures/Clothing/Neck/Misc/whistles.rsi/meta.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Drawn by Firewatchin on Discord.", - "size": { - "x": 32, - "y": 32 - }, - - "states": [ - { - "name": "equipped-NECK", - "directions": 4 - }, - { - "name": "icon" - } - ] -} diff --git a/Resources/Textures/Clothing/OuterClothing/Armor/armor_reflec.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Armor/armor_reflec.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..9d92b21329d Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Armor/armor_reflec.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Armor/armor_reflec.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Armor/armor_reflec.rsi/meta.json index c7a0afcae33..5f95573206c 100644 --- a/Resources/Textures/Clothing/OuterClothing/Armor/armor_reflec.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Armor/armor_reflec.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/dbc2435fa562f4ef130a7112d2a4cc9c80099894", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/dbc2435fa562f4ef130a7112d2a4cc9c80099894. equipped-OUTERCLOTHING-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Armor/bulletproof.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Armor/bulletproof.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..cffb51e5e56 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Armor/bulletproof.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Armor/bulletproof.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Armor/bulletproof.rsi/meta.json index 9ae7fc3f93a..8b7a929fcde 100644 --- a/Resources/Textures/Clothing/OuterClothing/Armor/bulletproof.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Armor/bulletproof.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from https://github.com/ParadiseSS13/Paradise", + "copyright": "Taken from https://github.com/ParadiseSS13/Paradise. Vox states by Flareguy for Space Station 14", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Armor/captain_carapace.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Armor/captain_carapace.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..e0bfdfbc389 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Armor/captain_carapace.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Armor/captain_carapace.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Armor/captain_carapace.rsi/meta.json index b979f8bfb8a..a9366f0bc1d 100644 --- a/Resources/Textures/Clothing/OuterClothing/Armor/captain_carapace.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Armor/captain_carapace.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/pull/69842/commits/d8138946b0ed06fced522729ac8eaa0596864329 edited by Skarletto (github), edited by Emisse for ss14", + "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/pull/69842/commits/d8138946b0ed06fced522729ac8eaa0596864329 edited by Skarletto (github), edited by Emisse for ss14. Vox state by Flareguy for SS14", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Armor/cult_armour.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Armor/cult_armour.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..599e73c76f1 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Armor/cult_armour.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Armor/cult_armour.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Armor/cult_armour.rsi/meta.json index e482264df5f..5c326232e4f 100644 --- a/Resources/Textures/Clothing/OuterClothing/Armor/cult_armour.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Armor/cult_armour.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. equipped-OUTERCLOTHING-vox state taken from Paradise at https://github.com/ParadiseSS13/Paradise/blob/fce54deb01d465957691ba2907218d4af4830db2/icons/mob/clothing/species/vox/suit.dmi and north sprite modified", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Armor/heavygreen.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Armor/heavygreen.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..f37eba33599 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Armor/heavygreen.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Armor/heavygreen.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Armor/heavygreen.rsi/meta.json index e482264df5f..232bec9c0a2 100644 --- a/Resources/Textures/Clothing/OuterClothing/Armor/heavygreen.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Armor/heavygreen.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. equipped-OUTERCLOTHING-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Armor/heavyred.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Armor/heavyred.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..164f5e4592d Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Armor/heavyred.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Armor/heavyred.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Armor/heavyred.rsi/meta.json index e482264df5f..232bec9c0a2 100644 --- a/Resources/Textures/Clothing/OuterClothing/Armor/heavyred.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Armor/heavyred.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. equipped-OUTERCLOTHING-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Armor/riot.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Armor/riot.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..f0e99ee3c33 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Armor/riot.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Armor/riot.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Armor/riot.rsi/meta.json index afdd4120b55..26631d02819 100644 --- a/Resources/Textures/Clothing/OuterClothing/Armor/riot.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Armor/riot.rsi/meta.json @@ -1,26 +1,30 @@ { - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Taken from https://github.com/ParadiseSS13/Paradise", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/ParadiseSS13/Paradise. Vox state by Flareguy for Space Station 14", + "size": { + "x": 32, + "y": 32 }, - { - "name": "equipped-OUTERCLOTHING", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - } - ] -} + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Clothing/OuterClothing/Armor/security.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Armor/security.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..1d9b1d14596 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Armor/security.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Armor/security.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Armor/security.rsi/meta.json index afdd4120b55..00bef7108a3 100644 --- a/Resources/Textures/Clothing/OuterClothing/Armor/security.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Armor/security.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from https://github.com/ParadiseSS13/Paradise", + "copyright": "Taken from https://github.com/ParadiseSS13/Paradise. Vox state by Flareguy for Space Station 14", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Armor/security_slim.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Armor/security_slim.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..ea3c78dfbe7 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Armor/security_slim.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Armor/security_slim.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Armor/security_slim.rsi/meta.json index afdd4120b55..26631d02819 100644 --- a/Resources/Textures/Clothing/OuterClothing/Armor/security_slim.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Armor/security_slim.rsi/meta.json @@ -1,26 +1,30 @@ { - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Taken from https://github.com/ParadiseSS13/Paradise", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/ParadiseSS13/Paradise. Vox state by Flareguy for Space Station 14", + "size": { + "x": 32, + "y": 32 }, - { - "name": "equipped-OUTERCLOTHING", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - } - ] -} + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Clothing/OuterClothing/Bio/cmo.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Bio/cmo.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..e62fa89ab54 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Bio/cmo.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Bio/cmo.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Bio/cmo.rsi/meta.json index e482264df5f..ca1146d007e 100644 --- a/Resources/Textures/Clothing/OuterClothing/Bio/cmo.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Bio/cmo.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. equipped-OUTERCLOTHING-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79", "size": { "x": 32, "y": 32 @@ -21,6 +21,10 @@ { "name": "inhand-right", "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 } ] } diff --git a/Resources/Textures/Clothing/OuterClothing/Bio/general.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Bio/general.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..0a224c92b96 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Bio/general.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Bio/general.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Bio/general.rsi/meta.json index e482264df5f..232bec9c0a2 100644 --- a/Resources/Textures/Clothing/OuterClothing/Bio/general.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Bio/general.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. equipped-OUTERCLOTHING-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Bio/janitor.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Bio/janitor.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..82b0ea9f364 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Bio/janitor.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Bio/janitor.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Bio/janitor.rsi/meta.json index e482264df5f..ca1146d007e 100644 --- a/Resources/Textures/Clothing/OuterClothing/Bio/janitor.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Bio/janitor.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. equipped-OUTERCLOTHING-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79", "size": { "x": 32, "y": 32 @@ -21,6 +21,10 @@ { "name": "inhand-right", "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 } ] } diff --git a/Resources/Textures/Clothing/OuterClothing/Bio/scientist.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Bio/scientist.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..044d87e2f63 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Bio/scientist.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Bio/scientist.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Bio/scientist.rsi/meta.json index e482264df5f..ca1146d007e 100644 --- a/Resources/Textures/Clothing/OuterClothing/Bio/scientist.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Bio/scientist.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. equipped-OUTERCLOTHING-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79", "size": { "x": 32, "y": 32 @@ -21,6 +21,10 @@ { "name": "inhand-right", "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 } ] } diff --git a/Resources/Textures/Clothing/OuterClothing/Bio/security.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Bio/security.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..e426556e7db Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Bio/security.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Bio/security.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Bio/security.rsi/meta.json index e482264df5f..ca1146d007e 100644 --- a/Resources/Textures/Clothing/OuterClothing/Bio/security.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Bio/security.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. equipped-OUTERCLOTHING-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79", "size": { "x": 32, "y": 32 @@ -21,6 +21,10 @@ { "name": "inhand-right", "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 } ] } diff --git a/Resources/Textures/Clothing/OuterClothing/Bio/virology.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Bio/virology.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..f6b5c43d2bf Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Bio/virology.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Bio/virology.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Bio/virology.rsi/meta.json index e482264df5f..ca1146d007e 100644 --- a/Resources/Textures/Clothing/OuterClothing/Bio/virology.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Bio/virology.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. equipped-OUTERCLOTHING-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79", "size": { "x": 32, "y": 32 @@ -21,6 +21,10 @@ { "name": "inhand-right", "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 } ] } diff --git a/Resources/Textures/Clothing/OuterClothing/Coats/expensive_coat.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Coats/expensive_coat.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..1fd6c3828d3 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Coats/expensive_coat.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Coats/expensive_coat.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Coats/expensive_coat.rsi/meta.json index 20e876460d2..cc68d97d378 100644 --- a/Resources/Textures/Clothing/OuterClothing/Coats/expensive_coat.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Coats/expensive_coat.rsi/meta.json @@ -11,6 +11,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "icon" } diff --git a/Resources/Textures/Clothing/OuterClothing/Coats/hos_trenchcoat.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Coats/hos_trenchcoat.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..31e6f31708e Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Coats/hos_trenchcoat.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Coats/hos_trenchcoat.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Coats/hos_trenchcoat.rsi/meta.json index 55e082d620d..fa20ea7d596 100644 --- a/Resources/Textures/Clothing/OuterClothing/Coats/hos_trenchcoat.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Coats/hos_trenchcoat.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e , edited by Alekshhh", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e , edited by Alekshhh. Vox state made by Flareguy for SS14", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Coats/jensencoat.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Coats/jensencoat.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..59bf1f287b2 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Coats/jensencoat.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Coats/jensencoat.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Coats/jensencoat.rsi/meta.json index e482264df5f..232bec9c0a2 100644 --- a/Resources/Textures/Clothing/OuterClothing/Coats/jensencoat.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Coats/jensencoat.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. equipped-OUTERCLOTHING-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Coats/labcoat.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Coats/labcoat.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..fa32996aa89 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Coats/labcoat.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Coats/labcoat.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Coats/labcoat.rsi/meta.json index 442bfb29202..2311851853a 100644 --- a/Resources/Textures/Clothing/OuterClothing/Coats/labcoat.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Coats/labcoat.rsi/meta.json @@ -21,6 +21,14 @@ "name": "open-equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, + { + "name": "open-equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Coats/labcoat.rsi/open-equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Coats/labcoat.rsi/open-equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..ce7c029026c Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Coats/labcoat.rsi/open-equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Coats/labcoat_chem.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Coats/labcoat_chem.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..6d96d0a0379 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Coats/labcoat_chem.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Coats/labcoat_chem.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Coats/labcoat_chem.rsi/meta.json index 442bfb29202..2311851853a 100644 --- a/Resources/Textures/Clothing/OuterClothing/Coats/labcoat_chem.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Coats/labcoat_chem.rsi/meta.json @@ -21,6 +21,14 @@ "name": "open-equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, + { + "name": "open-equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Coats/labcoat_chem.rsi/open-equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Coats/labcoat_chem.rsi/open-equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..f83538ee601 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Coats/labcoat_chem.rsi/open-equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Coats/labcoat_cmo.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Coats/labcoat_cmo.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..58b84263ac0 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Coats/labcoat_cmo.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Coats/labcoat_cmo.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Coats/labcoat_cmo.rsi/meta.json index 02abb078069..c2b48b1d762 100644 --- a/Resources/Textures/Clothing/OuterClothing/Coats/labcoat_cmo.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Coats/labcoat_cmo.rsi/meta.json @@ -21,6 +21,14 @@ "name": "open-equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, + { + "name": "open-equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Coats/labcoat_cmo.rsi/open-equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Coats/labcoat_cmo.rsi/open-equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..547839061b6 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Coats/labcoat_cmo.rsi/open-equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Coats/labcoat_gene.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Coats/labcoat_gene.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..fa9a53d3735 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Coats/labcoat_gene.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Coats/labcoat_gene.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Coats/labcoat_gene.rsi/meta.json index 442bfb29202..2311851853a 100644 --- a/Resources/Textures/Clothing/OuterClothing/Coats/labcoat_gene.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Coats/labcoat_gene.rsi/meta.json @@ -21,6 +21,14 @@ "name": "open-equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, + { + "name": "open-equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Coats/labcoat_gene.rsi/open-equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Coats/labcoat_gene.rsi/open-equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..9cba3e8ef3f Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Coats/labcoat_gene.rsi/open-equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Coats/labcoat_viro.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Coats/labcoat_viro.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..e432bb2d017 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Coats/labcoat_viro.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Coats/labcoat_viro.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Coats/labcoat_viro.rsi/meta.json index 6cb239d8c85..4d788f71eed 100644 --- a/Resources/Textures/Clothing/OuterClothing/Coats/labcoat_viro.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Coats/labcoat_viro.rsi/meta.json @@ -21,6 +21,14 @@ "name": "open-equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, + { + "name": "open-equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Coats/labcoat_viro.rsi/open-equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Coats/labcoat_viro.rsi/open-equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..2363b4118d0 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Coats/labcoat_viro.rsi/open-equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Coats/pirate.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Coats/pirate.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..1679773c734 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Coats/pirate.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Coats/pirate.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Coats/pirate.rsi/meta.json index e482264df5f..232bec9c0a2 100644 --- a/Resources/Textures/Clothing/OuterClothing/Coats/pirate.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Coats/pirate.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. equipped-OUTERCLOTHING-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Coats/rndcoat.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Coats/rndcoat.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..89369f8794c Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Coats/rndcoat.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Coats/rndcoat.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Coats/rndcoat.rsi/meta.json index 442bfb29202..2311851853a 100644 --- a/Resources/Textures/Clothing/OuterClothing/Coats/rndcoat.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Coats/rndcoat.rsi/meta.json @@ -21,6 +21,14 @@ "name": "open-equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, + { + "name": "open-equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Coats/rndcoat.rsi/open-equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Coats/rndcoat.rsi/open-equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..973451e5f5b Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Coats/rndcoat.rsi/open-equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Coats/warden.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Coats/warden.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..a56db4fd532 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Coats/warden.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Coats/warden.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Coats/warden.rsi/meta.json index e482264df5f..232bec9c0a2 100644 --- a/Resources/Textures/Clothing/OuterClothing/Coats/warden.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Coats/warden.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. equipped-OUTERCLOTHING-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/ERTSuits/ertengineer.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Hardsuits/ERTSuits/ertengineer.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..be85f19ea64 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Hardsuits/ERTSuits/ertengineer.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/ERTSuits/ertengineer.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Hardsuits/ERTSuits/ertengineer.rsi/meta.json index 4fbd43a08b5..b7b0719efa4 100644 --- a/Resources/Textures/Clothing/OuterClothing/Hardsuits/ERTSuits/ertengineer.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Hardsuits/ERTSuits/ertengineer.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from paradisestation at commit https://github.com/ParadiseSS13/Paradise/commit/12c21ced8432015485484b17e311dcceb7c458f6", + "copyright": "Taken from paradisestation at commit https://github.com/ParadiseSS13/Paradise/commit/12c21ced8432015485484b17e311dcceb7c458f6. Vox state by Flareguy for Space Station 14", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/ERTSuits/ertjanitor.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Hardsuits/ERTSuits/ertjanitor.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..e5f648a31f1 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Hardsuits/ERTSuits/ertjanitor.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/ERTSuits/ertjanitor.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Hardsuits/ERTSuits/ertjanitor.rsi/meta.json index 4fbd43a08b5..6de2d485b82 100644 --- a/Resources/Textures/Clothing/OuterClothing/Hardsuits/ERTSuits/ertjanitor.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Hardsuits/ERTSuits/ertjanitor.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from paradisestation at commit https://github.com/ParadiseSS13/Paradise/commit/12c21ced8432015485484b17e311dcceb7c458f6", + "copyright": "Taken from paradisestation at commit https://github.com/ParadiseSS13/Paradise/commit/12c21ced8432015485484b17e311dcceb7c458f6. Vox sprite by Flareguy for Space Station 14", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/ERTSuits/ertleader.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Hardsuits/ERTSuits/ertleader.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..cb2c6308015 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Hardsuits/ERTSuits/ertleader.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/ERTSuits/ertleader.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Hardsuits/ERTSuits/ertleader.rsi/meta.json index 4fbd43a08b5..6de2d485b82 100644 --- a/Resources/Textures/Clothing/OuterClothing/Hardsuits/ERTSuits/ertleader.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Hardsuits/ERTSuits/ertleader.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from paradisestation at commit https://github.com/ParadiseSS13/Paradise/commit/12c21ced8432015485484b17e311dcceb7c458f6", + "copyright": "Taken from paradisestation at commit https://github.com/ParadiseSS13/Paradise/commit/12c21ced8432015485484b17e311dcceb7c458f6. Vox sprite by Flareguy for Space Station 14", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/ERTSuits/ertmedical.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Hardsuits/ERTSuits/ertmedical.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..284954aabcc Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Hardsuits/ERTSuits/ertmedical.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/ERTSuits/ertmedical.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Hardsuits/ERTSuits/ertmedical.rsi/meta.json index 4fbd43a08b5..daa64b2f5c6 100644 --- a/Resources/Textures/Clothing/OuterClothing/Hardsuits/ERTSuits/ertmedical.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Hardsuits/ERTSuits/ertmedical.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from paradisestation at commit https://github.com/ParadiseSS13/Paradise/commit/12c21ced8432015485484b17e311dcceb7c458f6", + "copyright": "Taken from paradisestation at commit https://github.com/ParadiseSS13/Paradise/commit/12c21ced8432015485484b17e311dcceb7c458f6. Vox sprite made by Flareguy", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/ERTSuits/ertsecurity.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Hardsuits/ERTSuits/ertsecurity.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..29130c57f07 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Hardsuits/ERTSuits/ertsecurity.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/ERTSuits/ertsecurity.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Hardsuits/ERTSuits/ertsecurity.rsi/meta.json index 4fbd43a08b5..6de2d485b82 100644 --- a/Resources/Textures/Clothing/OuterClothing/Hardsuits/ERTSuits/ertsecurity.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Hardsuits/ERTSuits/ertsecurity.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from paradisestation at commit https://github.com/ParadiseSS13/Paradise/commit/12c21ced8432015485484b17e311dcceb7c458f6", + "copyright": "Taken from paradisestation at commit https://github.com/ParadiseSS13/Paradise/commit/12c21ced8432015485484b17e311dcceb7c458f6. Vox sprite by Flareguy for Space Station 14", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/atmospherics.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Hardsuits/atmospherics.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..b896fbef73d Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Hardsuits/atmospherics.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/atmospherics.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Hardsuits/atmospherics.rsi/meta.json index ef5e62cca40..2da9e2ad1d5 100644 --- a/Resources/Textures/Clothing/OuterClothing/Hardsuits/atmospherics.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Hardsuits/atmospherics.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Vox state made by Flareguy for SS14", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/capspace.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Hardsuits/capspace.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..644c67846b1 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Hardsuits/capspace.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/capspace.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Hardsuits/capspace.rsi/meta.json index 7f50fdcf083..3271d26a2cf 100644 --- a/Resources/Textures/Clothing/OuterClothing/Hardsuits/capspace.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Hardsuits/capspace.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Made by Emisse for SS14", + "copyright": "Made by Emisse for SS14. Vox state made by Flareguy for SS14", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/cburn.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Hardsuits/cburn.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..52c1cea7cf3 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Hardsuits/cburn.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/cburn.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Hardsuits/cburn.rsi/meta.json index 2de954bbf90..2edd20e1dc1 100644 --- a/Resources/Textures/Clothing/OuterClothing/Hardsuits/cburn.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Hardsuits/cburn.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Made by EmoGarbage404, harpy by VMSolidus", + "copyright": "Made by EmoGarbage404, harpy by VMSolidus. Vox state made by Flareguy for SS14", "size": { "x": 32, "y": 32 @@ -18,6 +18,10 @@ "name": "equipped-OUTERCLOTHING-harpy", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/clown.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Hardsuits/clown.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..bf6028dfdb9 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Hardsuits/clown.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/clown.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Hardsuits/clown.rsi/meta.json index 090140fa8cd..60c53e9cc28 100644 --- a/Resources/Textures/Clothing/OuterClothing/Hardsuits/clown.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Hardsuits/clown.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e, modified by brainfood1183 (github), harpy by VMSolidus", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e, modified by brainfood1183 (github), harpy by VMSolidus. Vox state made by Flareguy for SS14", "size": { "x": 32, "y": 32 @@ -18,6 +18,10 @@ "name": "equipped-OUTERCLOTHING-harpy", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/cybersun.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Hardsuits/cybersun.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..631815d06b6 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Hardsuits/cybersun.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/cybersun.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Hardsuits/cybersun.rsi/meta.json index 1cfa2a9cfe4..5a3fd99c11f 100644 --- a/Resources/Textures/Clothing/OuterClothing/Hardsuits/cybersun.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Hardsuits/cybersun.rsi/meta.json @@ -1,30 +1,34 @@ -{ - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Sprite made by Gtheglorious based on the sprite made by emisse for ss14, harpy variant by VMSolidus", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" - }, - { - "name": "equipped-OUTERCLOTHING", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - }, - { - "name": "equipped-OUTERCLOTHING-harpy", - "directions": 4 - } - ] -} +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Sprite made by Gtheglorious based on the sprite made by emisse for ss14, harpy variant by VMSolidus, vox state made by Flareguy for SS14.", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING-harpy", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/deathsquad.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Hardsuits/deathsquad.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..cbf92dffde4 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Hardsuits/deathsquad.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/deathsquad.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Hardsuits/deathsquad.rsi/meta.json index f6910b12aa0..5054eea8f45 100644 --- a/Resources/Textures/Clothing/OuterClothing/Hardsuits/deathsquad.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Hardsuits/deathsquad.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e, edited by Emisse for SS14, harpy edit by VMSolidus", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e, edited by Emisse for SS14. Vox state made by Flareguy for SS14, harpy edit by VMSolidus", "size": { "x": 32, "y": 32 @@ -18,6 +18,10 @@ "name": "equipped-OUTERCLOTHING-harpy", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/engineering-white.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Hardsuits/engineering-white.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..a6066c595b2 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Hardsuits/engineering-white.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/engineering-white.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Hardsuits/engineering-white.rsi/meta.json index ef5e62cca40..0a78966c1d5 100644 --- a/Resources/Textures/Clothing/OuterClothing/Hardsuits/engineering-white.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Hardsuits/engineering-white.rsi/meta.json @@ -1,11 +1,11 @@ { - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", - "size": { - "x": 32, - "y": 32 - }, + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Vox state made by Flareguy for SS14", + "size": { + "x": 32, + "y": 32 + }, "states": [ { "name": "icon" @@ -14,6 +14,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 @@ -27,4 +31,4 @@ "directions": 4 } ] -} +} \ No newline at end of file diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/engineering.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Hardsuits/engineering.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..7e4e050f9d2 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Hardsuits/engineering.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/engineering.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Hardsuits/engineering.rsi/meta.json index cbf3391af71..13f389a778c 100644 --- a/Resources/Textures/Clothing/OuterClothing/Hardsuits/engineering.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Hardsuits/engineering.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e, harpy version by VMSolidus", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e, harpy version by VMSolidus. Vox state made by Flareguy for SS14", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/luxury.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Hardsuits/luxury.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..c082fd23404 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Hardsuits/luxury.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/luxury.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Hardsuits/luxury.rsi/meta.json index 0261a0564f1..76e3264cbce 100644 --- a/Resources/Textures/Clothing/OuterClothing/Hardsuits/luxury.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Hardsuits/luxury.rsi/meta.json @@ -1,11 +1,11 @@ { - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Texture edit from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", - "size": { - "x": 32, - "y": 32 - }, + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Texture edit from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Vox state made by Flareguy for SS14", + "size": { + "x": 32, + "y": 32 + }, "states": [ { "name": "icon" @@ -14,6 +14,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 @@ -27,4 +31,4 @@ "directions": 4 } ] -} +} \ No newline at end of file diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/maxim.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Hardsuits/maxim.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..2085dc1c838 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Hardsuits/maxim.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/maxim.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Hardsuits/maxim.rsi/meta.json index 3641da6f505..9acde9a4dea 100644 --- a/Resources/Textures/Clothing/OuterClothing/Hardsuits/maxim.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Hardsuits/maxim.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/6b3f58d7de4d4e374282819a7001eaa9bde1676d", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/6b3f58d7de4d4e374282819a7001eaa9bde1676d. Vox state made by Flareguy for SS14", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/medical.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Hardsuits/medical.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..6b6a36e0e7f Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Hardsuits/medical.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/medical.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Hardsuits/medical.rsi/meta.json index ef5e62cca40..0a78966c1d5 100644 --- a/Resources/Textures/Clothing/OuterClothing/Hardsuits/medical.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Hardsuits/medical.rsi/meta.json @@ -1,11 +1,11 @@ { - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", - "size": { - "x": 32, - "y": 32 - }, + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Vox state made by Flareguy for SS14", + "size": { + "x": 32, + "y": 32 + }, "states": [ { "name": "icon" @@ -14,6 +14,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 @@ -27,4 +31,4 @@ "directions": 4 } ] -} +} \ No newline at end of file diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/paramed.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Hardsuits/paramed.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..e8149c9cd9b Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Hardsuits/paramed.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/paramed.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Hardsuits/paramed.rsi/meta.json index 64b98f1e798..403cfec384c 100644 --- a/Resources/Textures/Clothing/OuterClothing/Hardsuits/paramed.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Hardsuits/paramed.rsi/meta.json @@ -1,30 +1,34 @@ -{ - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Taken from paradise station git at commit https://github.com/ParadiseSS13/Paradise/commit/e5e584804b4b0b373a6a69d23afb73fd3c094365, redrawn by Ubaser", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" - }, - { - "name": "equipped-OUTERCLOTHING", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - }, - { - "name": "equipped-OUTERCLOTHING-harpy", - "directions": 4 - } - ] -} +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from paradise station git at commit https://github.com/ParadiseSS13/Paradise/commit/e5e584804b4b0b373a6a69d23afb73fd3c094365, redrawn by Ubaser. Vox state made by Flareguy for SS14", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING-harpy", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/piratecaptain.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Hardsuits/piratecaptain.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..f0638fc80d7 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Hardsuits/piratecaptain.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/piratecaptain.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Hardsuits/piratecaptain.rsi/meta.json index 8840689d9ed..8663673f5c6 100644 --- a/Resources/Textures/Clothing/OuterClothing/Hardsuits/piratecaptain.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Hardsuits/piratecaptain.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Made by brainfood1183 (Github) for ss14", + "copyright": "Made by brainfood1183 (Github) for ss14. Vox state made by Flareguy for SS14", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/pirateeva.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Hardsuits/pirateeva.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..ce3d20cc203 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Hardsuits/pirateeva.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/pirateeva.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Hardsuits/pirateeva.rsi/meta.json index 8840689d9ed..8663673f5c6 100644 --- a/Resources/Textures/Clothing/OuterClothing/Hardsuits/pirateeva.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Hardsuits/pirateeva.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Made by brainfood1183 (Github) for ss14", + "copyright": "Made by brainfood1183 (Github) for ss14. Vox state made by Flareguy for SS14", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/rd.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Hardsuits/rd.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..629584e995b Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Hardsuits/rd.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/rd.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Hardsuits/rd.rsi/meta.json index def2d42704e..c3caac82252 100644 --- a/Resources/Textures/Clothing/OuterClothing/Hardsuits/rd.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Hardsuits/rd.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Vox state made by Flareguy for SS14", "size": { "x": 32, "y": 32 @@ -18,6 +18,10 @@ "name": "equipped-OUTERCLOTHING-harpy", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/salvage.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Hardsuits/salvage.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..b8c26d6f41c Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Hardsuits/salvage.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/salvage.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Hardsuits/salvage.rsi/meta.json index ef5e62cca40..0a78966c1d5 100644 --- a/Resources/Textures/Clothing/OuterClothing/Hardsuits/salvage.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Hardsuits/salvage.rsi/meta.json @@ -1,11 +1,11 @@ { - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", - "size": { - "x": 32, - "y": 32 - }, + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Vox state made by Flareguy for SS14", + "size": { + "x": 32, + "y": 32 + }, "states": [ { "name": "icon" @@ -14,6 +14,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 @@ -27,4 +31,4 @@ "directions": 4 } ] -} +} \ No newline at end of file diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/santahardsuit.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Hardsuits/santahardsuit.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..0d8f373dc1b Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Hardsuits/santahardsuit.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/santahardsuit.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Hardsuits/santahardsuit.rsi/meta.json index 13748622fee..eb28d4c8a1f 100644 --- a/Resources/Textures/Clothing/OuterClothing/Hardsuits/santahardsuit.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Hardsuits/santahardsuit.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Edited by StanTheCarpenter. Originally taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Edited by StanTheCarpenter. Originally taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Vox state made by Flareguy for SS14", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/security-red.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Hardsuits/security-red.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..8c301cbe55c Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Hardsuits/security-red.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/security-red.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Hardsuits/security-red.rsi/meta.json index e482264df5f..15aef26a56c 100644 --- a/Resources/Textures/Clothing/OuterClothing/Hardsuits/security-red.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Hardsuits/security-red.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Vox state made by Flareguy for SS14", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/security-warden.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Hardsuits/security-warden.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..30cf54325e5 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Hardsuits/security-warden.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/security-warden.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Hardsuits/security-warden.rsi/meta.json index 54a0ed85fa2..180439fbcce 100644 --- a/Resources/Textures/Clothing/OuterClothing/Hardsuits/security-warden.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Hardsuits/security-warden.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Sprite made by Gtheglorious based on the sprite made by Alekshhh for SS14", + "copyright": "Sprite made by Gtheglorious based on the sprite made by Alekshhh for SS14. Vox state made by Flareguy for SS14", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/security.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Hardsuits/security.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..c06d8fae90d Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Hardsuits/security.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/security.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Hardsuits/security.rsi/meta.json index 32d6d8901a7..8acf2ddc611 100644 --- a/Resources/Textures/Clothing/OuterClothing/Hardsuits/security.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Hardsuits/security.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Sprite made by Gtheglorious based on the sprite taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Sprite made by Gtheglorious based on the sprite taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Vox state made by Flareguy for SS14", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/spatio.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Hardsuits/spatio.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..999761e150b Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Hardsuits/spatio.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/spatio.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Hardsuits/spatio.rsi/meta.json index f6a942a8956..c04f7d758c0 100644 --- a/Resources/Textures/Clothing/OuterClothing/Hardsuits/spatio.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Hardsuits/spatio.rsi/meta.json @@ -1,32 +1,34 @@ - -{ - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Original by Emisse, modified by EmoGarbage404", - - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" - }, - { - "name": "equipped-OUTERCLOTHING", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - }, - { - "name": "equipped-OUTERCLOTHING-harpy", - "directions": 4 - } - ] -} +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Original by Emisse, modified by EmoGarbage404. Vox state made by Flareguy for SS14", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING-harpy", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/syndicate.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Hardsuits/syndicate.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..df2abbbf030 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Hardsuits/syndicate.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/syndicate.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Hardsuits/syndicate.rsi/meta.json index b9b739337be..30830125099 100644 --- a/Resources/Textures/Clothing/OuterClothing/Hardsuits/syndicate.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Hardsuits/syndicate.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/fb2d71495bfe81446159ef528534193d09dd8d34, equipped-OUTERCLOTHING-monkey made by Dutch-VanDerLinde", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/fb2d71495bfe81446159ef528534193d09dd8d34, equipped-OUTERCLOTHING-monkey made by Dutch-VanDerLinde, vox state made by Flareguy for SS14", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "equipped-OUTERCLOTHING-monkey", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/syndiecommander.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Hardsuits/syndiecommander.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..24c1aa2a870 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Hardsuits/syndiecommander.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/syndiecommander.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Hardsuits/syndiecommander.rsi/meta.json index 4aa4d60ccb8..3744e040b68 100644 --- a/Resources/Textures/Clothing/OuterClothing/Hardsuits/syndiecommander.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Hardsuits/syndiecommander.rsi/meta.json @@ -1,30 +1,34 @@ -{ - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Taken from vg at commit https://github.com/vgstation-coders/vgstation13/commit/a16e41020a93479e9a7e2af343b1b74f7f2a61bd", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" - }, - { - "name": "equipped-OUTERCLOTHING", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - }, - { - "name": "equipped-OUTERCLOTHING-harpy", - "directions": 4 - } - ] -} +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from vg at commit https://github.com/vgstation-coders/vgstation13/commit/a16e41020a93479e9a7e2af343b1b74f7f2a61bd. Vox state made by Flareguy for SS14", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING-harpy", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/syndieelite.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Hardsuits/syndieelite.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..869cf41ce2a Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Hardsuits/syndieelite.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/syndieelite.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Hardsuits/syndieelite.rsi/meta.json index b85c75656c4..772c3edc9c7 100644 --- a/Resources/Textures/Clothing/OuterClothing/Hardsuits/syndieelite.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Hardsuits/syndieelite.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from vg at commit https://github.com/vgstation-coders/vgstation13/commit/a16e41020a93479e9a7e2af343b1b74f7f2a61bd, harpy by VMSolidus", + "copyright": "Taken from vg at commit https://github.com/vgstation-coders/vgstation13/commit/a16e41020a93479e9a7e2af343b1b74f7f2a61bd, harpy by VMSolidus. Vox state made by Flareguy for SS14", "size": { "x": 32, "y": 32 @@ -18,6 +18,10 @@ "name": "equipped-OUTERCLOTHING-harpy", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/syndiemedic.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Hardsuits/syndiemedic.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..9417c5547b3 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Hardsuits/syndiemedic.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/syndiemedic.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Hardsuits/syndiemedic.rsi/meta.json index 88d91565d77..2026bba8931 100644 --- a/Resources/Textures/Clothing/OuterClothing/Hardsuits/syndiemedic.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Hardsuits/syndiemedic.rsi/meta.json @@ -1,11 +1,11 @@ { - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Based on tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e, modified by EmoGarbage404 (github), harpy by VMSolidus", - "size": { - "x": 32, - "y": 32 - }, + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Based on tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e, modified by EmoGarbage404 (github), harpy by VMSolidus. Vox state made by Flareguy for SS14", + "size": { + "x": 32, + "y": 32 + }, "states": [ { "name": "icon" @@ -14,6 +14,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 @@ -27,4 +31,4 @@ "directions": 4 } ] -} +} \ No newline at end of file diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/wizard.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Hardsuits/wizard.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..d4e4ab0f53c Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Hardsuits/wizard.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/wizard.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Hardsuits/wizard.rsi/meta.json index e482264df5f..15aef26a56c 100644 --- a/Resources/Textures/Clothing/OuterClothing/Hardsuits/wizard.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Hardsuits/wizard.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Vox state made by Flareguy for SS14", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Misc/apronbotanist.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Misc/apronbotanist.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..091fe54d8b6 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Misc/apronbotanist.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Misc/apronbotanist.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Misc/apronbotanist.rsi/meta.json index e482264df5f..232bec9c0a2 100644 --- a/Resources/Textures/Clothing/OuterClothing/Misc/apronbotanist.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Misc/apronbotanist.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. equipped-OUTERCLOTHING-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Misc/apronchef.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Misc/apronchef.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..e0fd17d98a2 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Misc/apronchef.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Misc/apronchef.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Misc/apronchef.rsi/meta.json index e482264df5f..232bec9c0a2 100644 --- a/Resources/Textures/Clothing/OuterClothing/Misc/apronchef.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Misc/apronchef.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. equipped-OUTERCLOTHING-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Misc/cardborg.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Misc/cardborg.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..e4ea5d5fa4a Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Misc/cardborg.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Misc/cardborg.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Misc/cardborg.rsi/meta.json index e482264df5f..15aef26a56c 100644 --- a/Resources/Textures/Clothing/OuterClothing/Misc/cardborg.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Misc/cardborg.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Vox state made by Flareguy for SS14", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Misc/chef.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Misc/chef.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..a159e887771 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Misc/chef.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Misc/chef.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Misc/chef.rsi/meta.json index e482264df5f..232bec9c0a2 100644 --- a/Resources/Textures/Clothing/OuterClothing/Misc/chef.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Misc/chef.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. equipped-OUTERCLOTHING-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Misc/chef_idris.rsi/equipped-OUTERCLOTHING.png b/Resources/Textures/Clothing/OuterClothing/Misc/chef_idris.rsi/equipped-OUTERCLOTHING.png new file mode 100644 index 00000000000..53430fe1e98 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Misc/chef_idris.rsi/equipped-OUTERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Misc/chef_idris.rsi/icon.png b/Resources/Textures/Clothing/OuterClothing/Misc/chef_idris.rsi/icon.png new file mode 100644 index 00000000000..d49f1321eaf Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Misc/chef_idris.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Misc/chef_idris.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Misc/chef_idris.rsi/meta.json new file mode 100644 index 00000000000..4820d6b667a --- /dev/null +++ b/Resources/Textures/Clothing/OuterClothing/Misc/chef_idris.rsi/meta.json @@ -0,0 +1,18 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Aurorastation at commit https://github.com/Aurorastation/Aurora.3/commit/a8759f3c77b61315df50ee86969799f5a0afe894", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/OuterClothing/Misc/chef_nt.rsi/equipped-OUTERCLOTHING.png b/Resources/Textures/Clothing/OuterClothing/Misc/chef_nt.rsi/equipped-OUTERCLOTHING.png new file mode 100644 index 00000000000..9c90a41c058 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Misc/chef_nt.rsi/equipped-OUTERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Misc/chef_nt.rsi/icon.png b/Resources/Textures/Clothing/OuterClothing/Misc/chef_nt.rsi/icon.png new file mode 100644 index 00000000000..1aeb2d82e4e Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Misc/chef_nt.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Misc/chef_nt.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Misc/chef_nt.rsi/meta.json new file mode 100644 index 00000000000..4820d6b667a --- /dev/null +++ b/Resources/Textures/Clothing/OuterClothing/Misc/chef_nt.rsi/meta.json @@ -0,0 +1,18 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Aurorastation at commit https://github.com/Aurorastation/Aurora.3/commit/a8759f3c77b61315df50ee86969799f5a0afe894", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/OuterClothing/Misc/chef_orion.rsi/equipped-OUTERCLOTHING.png b/Resources/Textures/Clothing/OuterClothing/Misc/chef_orion.rsi/equipped-OUTERCLOTHING.png new file mode 100644 index 00000000000..ec931bebbab Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Misc/chef_orion.rsi/equipped-OUTERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Misc/chef_orion.rsi/icon.png b/Resources/Textures/Clothing/OuterClothing/Misc/chef_orion.rsi/icon.png new file mode 100644 index 00000000000..bd3c4727502 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Misc/chef_orion.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Misc/chef_orion.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Misc/chef_orion.rsi/meta.json new file mode 100644 index 00000000000..4820d6b667a --- /dev/null +++ b/Resources/Textures/Clothing/OuterClothing/Misc/chef_orion.rsi/meta.json @@ -0,0 +1,18 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Aurorastation at commit https://github.com/Aurorastation/Aurora.3/commit/a8759f3c77b61315df50ee86969799f5a0afe894", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/OuterClothing/Misc/classicponcho.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Misc/classicponcho.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..94835833ccb Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Misc/classicponcho.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Misc/classicponcho.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Misc/classicponcho.rsi/meta.json index e482264df5f..21cd9257fdf 100644 --- a/Resources/Textures/Clothing/OuterClothing/Misc/classicponcho.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Misc/classicponcho.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. equipped-OUTERCLOTHING-vox state taken from Paradise at https://github.com/ParadiseSS13/Paradise/blob/fce54deb01d465957691ba2907218d4af4830db2/icons/mob/clothing/species/vox/suit.dmi", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Misc/ghostsheet.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Misc/ghostsheet.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..df08ef1986f Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Misc/ghostsheet.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Misc/ghostsheet.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Misc/ghostsheet.rsi/meta.json index 5de1afef0f3..ccfd0c03038 100644 --- a/Resources/Textures/Clothing/OuterClothing/Misc/ghostsheet.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Misc/ghostsheet.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/pull/38809", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/pull/38809. Vox state by Flareguy for SS1", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Misc/grey_hoodie.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Misc/grey_hoodie.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..6423bd5c734 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Misc/grey_hoodie.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Misc/grey_hoodie.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Misc/grey_hoodie.rsi/meta.json index 442bfb29202..b5f8619d65a 100644 --- a/Resources/Textures/Clothing/OuterClothing/Misc/grey_hoodie.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Misc/grey_hoodie.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Vox state by Flareguy for SS14", "size": { "x": 32, "y": 32 @@ -17,6 +17,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "open-equipped-OUTERCLOTHING", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Misc/nunrobe.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Misc/nunrobe.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..36e53e4396e Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Misc/nunrobe.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Misc/nunrobe.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Misc/nunrobe.rsi/meta.json index 217a3f95112..3fa2c7657cb 100644 --- a/Resources/Textures/Clothing/OuterClothing/Misc/nunrobe.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Misc/nunrobe.rsi/meta.json @@ -1,26 +1,30 @@ -{ - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Taken from TGstation github https://github.com/tgstation/tgstation/commit/a20589c401fc9b0f23c1dea08c56d4a1697adcd6", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" - }, - { - "name": "equipped-OUTERCLOTHING", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - } - ] -} \ No newline at end of file +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from TGstation github https://github.com/tgstation/tgstation/commit/a20589c401fc9b0f23c1dea08c56d4a1697adcd6. equipped-OUTERCLOTHING-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/OuterClothing/Misc/red_racoon.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Misc/red_racoon.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..ff43b16105d Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Misc/red_racoon.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Misc/red_racoon.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Misc/red_racoon.rsi/meta.json index b20ea0277f7..cd0053daea8 100644 --- a/Resources/Textures/Clothing/OuterClothing/Misc/red_racoon.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Misc/red_racoon.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Created by netwy(583844759429316618)", + "copyright": "Created by netwy(583844759429316618). Vox state made by Flareguy for SS14", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Misc/redwizard.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Misc/redwizard.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..d5efb0d4b2b Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Misc/redwizard.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Misc/redwizard.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Misc/redwizard.rsi/meta.json index e482264df5f..15aef26a56c 100644 --- a/Resources/Textures/Clothing/OuterClothing/Misc/redwizard.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Misc/redwizard.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Vox state made by Flareguy for SS14", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Misc/shadowkinrestraints.rsi/equipped-OUTERCLOTHING.png b/Resources/Textures/Clothing/OuterClothing/Misc/shadowkinrestraints.rsi/equipped-OUTERCLOTHING.png new file mode 100644 index 00000000000..e8618fc6b7d Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Misc/shadowkinrestraints.rsi/equipped-OUTERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Misc/shadowkinrestraints.rsi/icon.png b/Resources/Textures/Clothing/OuterClothing/Misc/shadowkinrestraints.rsi/icon.png new file mode 100644 index 00000000000..def3161bb0a Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Misc/shadowkinrestraints.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Misc/shadowkinrestraints.rsi/inhand-left.png b/Resources/Textures/Clothing/OuterClothing/Misc/shadowkinrestraints.rsi/inhand-left.png new file mode 100644 index 00000000000..5c15def7666 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Misc/shadowkinrestraints.rsi/inhand-left.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Misc/shadowkinrestraints.rsi/inhand-right.png b/Resources/Textures/Clothing/OuterClothing/Misc/shadowkinrestraints.rsi/inhand-right.png new file mode 100644 index 00000000000..99c96d368ad Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Misc/shadowkinrestraints.rsi/inhand-right.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Misc/shadowkinrestraints.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Misc/shadowkinrestraints.rsi/meta.json new file mode 100644 index 00000000000..57a0b994f9b --- /dev/null +++ b/Resources/Textures/Clothing/OuterClothing/Misc/shadowkinrestraints.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "JustAnOrange", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + }, + { + "name": "icon" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/OuterClothing/Misc/skubbody.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Misc/skubbody.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..b50aa58c48c Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Misc/skubbody.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Misc/skubbody.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Misc/skubbody.rsi/meta.json index 9a00c5741a8..ed75ee470b7 100644 --- a/Resources/Textures/Clothing/OuterClothing/Misc/skubbody.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Misc/skubbody.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "EOBGames from tgstation", + "copyright": "EOBGames from tgstation. Vox state made by Flareguy for SS14", "size": { "x": 32, "y": 32 @@ -13,6 +13,10 @@ { "name": "equipped-OUTERCLOTHING", "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 } ] } diff --git a/Resources/Textures/Clothing/OuterClothing/Misc/straight_jacket.rsi/body-overlay-2-vox.png b/Resources/Textures/Clothing/OuterClothing/Misc/straight_jacket.rsi/body-overlay-2-vox.png new file mode 100644 index 00000000000..0a23447f94e Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Misc/straight_jacket.rsi/body-overlay-2-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Misc/straight_jacket.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Misc/straight_jacket.rsi/meta.json index b41f0209d72..2eda10ef510 100644 --- a/Resources/Textures/Clothing/OuterClothing/Misc/straight_jacket.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Misc/straight_jacket.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Vox state made by Flareguy for SS14", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "body-overlay-2", "directions": 4 }, + { + "name": "body-overlay-2-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Misc/violetwizard.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Misc/violetwizard.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..e39761b3608 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Misc/violetwizard.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Misc/violetwizard.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Misc/violetwizard.rsi/meta.json index e482264df5f..15aef26a56c 100644 --- a/Resources/Textures/Clothing/OuterClothing/Misc/violetwizard.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Misc/violetwizard.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Vox state made by Flareguy for SS14", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Misc/wizard.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Misc/wizard.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..a586ec3fe39 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Misc/wizard.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Misc/wizard.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Misc/wizard.rsi/meta.json index e482264df5f..15aef26a56c 100644 --- a/Resources/Textures/Clothing/OuterClothing/Misc/wizard.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Misc/wizard.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Vox state made by Flareguy for SS14", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Suits/bombsuit.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Suits/bombsuit.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..36cea26549a Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Suits/bombsuit.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Suits/bombsuit.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Suits/bombsuit.rsi/meta.json index e9a9a4453d8..669e1d98574 100644 --- a/Resources/Textures/Clothing/OuterClothing/Suits/bombsuit.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Suits/bombsuit.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from cev-eris at commit https://github.com/discordia-space/CEV-Eris/commit/760f0be7af33a31f5a08a3291864e91539d0ebb7", + "copyright": "Taken from cev-eris at commit https://github.com/discordia-space/CEV-Eris/commit/760f0be7af33a31f5a08a3291864e91539d0ebb7. Vox state made by Flareguy for Space Station 14", "size": { "x": 32, "y": 32 @@ -18,6 +18,10 @@ "name": "equipped-OUTERCLOTHING-harpy", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Suits/chicken.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Suits/chicken.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..d9ccc1dd962 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Suits/chicken.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Suits/chicken.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Suits/chicken.rsi/meta.json index e482264df5f..ca1146d007e 100644 --- a/Resources/Textures/Clothing/OuterClothing/Suits/chicken.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Suits/chicken.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. equipped-OUTERCLOTHING-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79", "size": { "x": 32, "y": 32 @@ -21,6 +21,10 @@ { "name": "inhand-right", "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 } ] } diff --git a/Resources/Textures/Clothing/OuterClothing/Suits/eva.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Suits/eva.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..2fb7750843d Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Suits/eva.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Suits/eva.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Suits/eva.rsi/meta.json index 4dcd7b13b58..136d76ea97e 100644 --- a/Resources/Textures/Clothing/OuterClothing/Suits/eva.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Suits/eva.rsi/meta.json @@ -14,6 +14,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "equipped-OUTERCLOTHING-monkey", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Suits/eva_emergency.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Suits/eva_emergency.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..99b555f7ac5 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Suits/eva_emergency.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Suits/eva_emergency.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Suits/eva_emergency.rsi/meta.json index 8d09b75006a..87ae5d0fb0a 100644 --- a/Resources/Textures/Clothing/OuterClothing/Suits/eva_emergency.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Suits/eva_emergency.rsi/meta.json @@ -18,6 +18,10 @@ "name": "equipped-OUTERCLOTHING-harpy", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Suits/eva_prisoner.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Suits/eva_prisoner.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..9601695dacb Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Suits/eva_prisoner.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Suits/eva_prisoner.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Suits/eva_prisoner.rsi/meta.json index 0482d086421..510a3431afe 100644 --- a/Resources/Textures/Clothing/OuterClothing/Suits/eva_prisoner.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Suits/eva_prisoner.rsi/meta.json @@ -14,6 +14,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "equipped-OUTERCLOTHING-monkey", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Suits/eva_syndicate.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Suits/eva_syndicate.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..7f71b04f1cd Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Suits/eva_syndicate.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Suits/eva_syndicate.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Suits/eva_syndicate.rsi/meta.json index 0482d086421..510a3431afe 100644 --- a/Resources/Textures/Clothing/OuterClothing/Suits/eva_syndicate.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Suits/eva_syndicate.rsi/meta.json @@ -14,6 +14,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "equipped-OUTERCLOTHING-monkey", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Suits/fire.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Suits/fire.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..920cc9e05f8 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Suits/fire.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Suits/fire.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Suits/fire.rsi/meta.json index 0a8c670a890..5edb3774090 100644 --- a/Resources/Textures/Clothing/OuterClothing/Suits/fire.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Suits/fire.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e, harpy edit by VMSolidus", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e, harpy edit by VMSolidus. equipped-OUTERCLOTHING-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79", "size": { "x": 32, "y": 32 @@ -18,6 +18,10 @@ "name": "equipped-OUTERCLOTHING-harpy", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Suits/monkey.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Suits/monkey.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..c585862bb1d Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Suits/monkey.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Suits/monkey.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Suits/monkey.rsi/meta.json index e482264df5f..920eab55204 100644 --- a/Resources/Textures/Clothing/OuterClothing/Suits/monkey.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Suits/monkey.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Vox state made by Flareguy for Space Station 14", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Suits/rad.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Suits/rad.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..13f9dacef35 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Suits/rad.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Suits/rad.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Suits/rad.rsi/meta.json index 0a8c670a890..e3387cff968 100644 --- a/Resources/Textures/Clothing/OuterClothing/Suits/rad.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Suits/rad.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e, harpy edit by VMSolidus", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e, harpy edit by VMSolidus. Vox state made by Flareguy for Space Station 14", "size": { "x": 32, "y": 32 @@ -18,6 +18,10 @@ "name": "equipped-OUTERCLOTHING-harpy", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Vests/detvest.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Vests/detvest.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..50e6d79c20f Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Vests/detvest.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Vests/detvest.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Vests/detvest.rsi/meta.json index e482264df5f..920eab55204 100644 --- a/Resources/Textures/Clothing/OuterClothing/Vests/detvest.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Vests/detvest.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Vox state made by Flareguy for Space Station 14", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Vests/hazard.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Vests/hazard.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..6d9f6dbead9 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Vests/hazard.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Vests/hazard.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Vests/hazard.rsi/meta.json index 05ec90135ea..4c56c355a49 100644 --- a/Resources/Textures/Clothing/OuterClothing/Vests/hazard.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Vests/hazard.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/c838ba21dae97db345e0113f99596decd1d66039", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/c838ba21dae97db345e0113f99596decd1d66039. Vox state made by Flareguy for Space Station 14", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Vests/vest.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Vests/vest.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..ee35c40fbd7 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Vests/vest.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Vests/vest.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Vests/vest.rsi/meta.json index e482264df5f..920eab55204 100644 --- a/Resources/Textures/Clothing/OuterClothing/Vests/vest.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Vests/vest.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Vox state made by Flareguy for Space Station 14", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/Vests/vest_idris.rsi/equipped-OUTERCLOTHING.png b/Resources/Textures/Clothing/OuterClothing/Vests/vest_idris.rsi/equipped-OUTERCLOTHING.png new file mode 100644 index 00000000000..a6d978ee535 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Vests/vest_idris.rsi/equipped-OUTERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Vests/vest_idris.rsi/icon.png b/Resources/Textures/Clothing/OuterClothing/Vests/vest_idris.rsi/icon.png new file mode 100644 index 00000000000..08f319524f3 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Vests/vest_idris.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Vests/vest_idris.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Vests/vest_idris.rsi/meta.json new file mode 100644 index 00000000000..4820d6b667a --- /dev/null +++ b/Resources/Textures/Clothing/OuterClothing/Vests/vest_idris.rsi/meta.json @@ -0,0 +1,18 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Aurorastation at commit https://github.com/Aurorastation/Aurora.3/commit/a8759f3c77b61315df50ee86969799f5a0afe894", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/OuterClothing/Vests/vest_nt.rsi/equipped-OUTERCLOTHING.png b/Resources/Textures/Clothing/OuterClothing/Vests/vest_nt.rsi/equipped-OUTERCLOTHING.png new file mode 100644 index 00000000000..cdb943fac9e Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Vests/vest_nt.rsi/equipped-OUTERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Vests/vest_nt.rsi/icon.png b/Resources/Textures/Clothing/OuterClothing/Vests/vest_nt.rsi/icon.png new file mode 100644 index 00000000000..8d2c25387eb Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Vests/vest_nt.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Vests/vest_nt.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Vests/vest_nt.rsi/meta.json new file mode 100644 index 00000000000..4820d6b667a --- /dev/null +++ b/Resources/Textures/Clothing/OuterClothing/Vests/vest_nt.rsi/meta.json @@ -0,0 +1,18 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Aurorastation at commit https://github.com/Aurorastation/Aurora.3/commit/a8759f3c77b61315df50ee86969799f5a0afe894", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/OuterClothing/Vests/vest_orion.rsi/equipped-OUTERCLOTHING.png b/Resources/Textures/Clothing/OuterClothing/Vests/vest_orion.rsi/equipped-OUTERCLOTHING.png new file mode 100644 index 00000000000..70a30ad238a Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Vests/vest_orion.rsi/equipped-OUTERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Vests/vest_orion.rsi/icon.png b/Resources/Textures/Clothing/OuterClothing/Vests/vest_orion.rsi/icon.png new file mode 100644 index 00000000000..cd4c9e6c059 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Vests/vest_orion.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Vests/vest_orion.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Vests/vest_orion.rsi/meta.json new file mode 100644 index 00000000000..4820d6b667a --- /dev/null +++ b/Resources/Textures/Clothing/OuterClothing/Vests/vest_orion.rsi/meta.json @@ -0,0 +1,18 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Aurorastation at commit https://github.com/Aurorastation/Aurora.3/commit/a8759f3c77b61315df50ee86969799f5a0afe894", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/OuterClothing/Vests/webvest.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Vests/webvest.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..17d75d29b36 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/Vests/webvest.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/Vests/webvest.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Vests/webvest.rsi/meta.json index e482264df5f..0e30ab4d3f1 100644 --- a/Resources/Textures/Clothing/OuterClothing/Vests/webvest.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Vests/webvest.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Vox state by Flareguy for SS14", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-OUTERCLOTHING", "directions": 4 }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coat.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coat.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..440fc3375fa Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coat.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coat.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coat.rsi/meta.json index 7752722477b..19f610cdfe9 100644 --- a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coat.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coat.rsi/meta.json @@ -1,26 +1,30 @@ -{ - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/77cff42b6c514e73881a885036be4b4dd2949f62", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" - }, - { - "name": "equipped-OUTERCLOTHING", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - } - ] -} \ No newline at end of file +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/77cff42b6c514e73881a885036be4b4dd2949f62. equipped-OUTERCLOTHING-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatatmos.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatatmos.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..1d755313177 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatatmos.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatatmos.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatatmos.rsi/meta.json index 7752722477b..5d9e9636f78 100644 --- a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatatmos.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatatmos.rsi/meta.json @@ -1,26 +1,30 @@ -{ - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/77cff42b6c514e73881a885036be4b4dd2949f62", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" - }, - { - "name": "equipped-OUTERCLOTHING", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - } - ] +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/77cff42b6c514e73881a885036be4b4dd2949f62. equipped-OUTERCLOTHING-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] } \ No newline at end of file diff --git a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatbar.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatbar.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..092d66ea3ef Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatbar.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatbar.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatbar.rsi/meta.json index 7863947d1cc..19fcc6a9352 100644 --- a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatbar.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatbar.rsi/meta.json @@ -1,26 +1,30 @@ -{ - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Taken from vg at commit https://github.com/vgstation-coders/vgstation13/commit/a16e41020a93479e9a7e2af343b1b74f7f2a61bd", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" - }, - { - "name": "equipped-OUTERCLOTHING", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - } - ] +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from vg at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] } \ No newline at end of file diff --git a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatcap.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatcap.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..0fca4396ea0 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatcap.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatcap.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatcap.rsi/meta.json index 46b3e631a07..7ddd460a3bd 100644 --- a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatcap.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatcap.rsi/meta.json @@ -1,26 +1,30 @@ -{ - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/77cff42b6c514e73881a885036be4b4dd2949f62 , edited by Skarletto (github)", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" - }, - { - "name": "equipped-OUTERCLOTHING", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - } - ] +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/77cff42b6c514e73881a885036be4b4dd2949f62, edited by Skarletto (github). equipped-OUTERCLOTHING-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79 and repaletted to match with the default state", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] } \ No newline at end of file diff --git a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatcargo.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatcargo.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..f4427249ec8 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatcargo.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatcargo.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatcargo.rsi/meta.json index 7752722477b..5d9e9636f78 100644 --- a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatcargo.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatcargo.rsi/meta.json @@ -1,26 +1,30 @@ -{ - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/77cff42b6c514e73881a885036be4b4dd2949f62", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" - }, - { - "name": "equipped-OUTERCLOTHING", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - } - ] +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/77cff42b6c514e73881a885036be4b4dd2949f62. equipped-OUTERCLOTHING-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] } \ No newline at end of file diff --git a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatce.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatce.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..29002eaf6b1 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatce.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatce.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatce.rsi/meta.json index 7752722477b..5d9e9636f78 100644 --- a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatce.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatce.rsi/meta.json @@ -1,26 +1,30 @@ -{ - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/77cff42b6c514e73881a885036be4b4dd2949f62", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" - }, - { - "name": "equipped-OUTERCLOTHING", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - } - ] +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/77cff42b6c514e73881a885036be4b4dd2949f62. equipped-OUTERCLOTHING-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] } \ No newline at end of file diff --git a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatclown.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatclown.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..781df9000be Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatclown.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatclown.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatclown.rsi/meta.json index 7863947d1cc..19fcc6a9352 100644 --- a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatclown.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatclown.rsi/meta.json @@ -1,26 +1,30 @@ -{ - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Taken from vg at commit https://github.com/vgstation-coders/vgstation13/commit/a16e41020a93479e9a7e2af343b1b74f7f2a61bd", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" - }, - { - "name": "equipped-OUTERCLOTHING", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - } - ] +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from vg at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] } \ No newline at end of file diff --git a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatengi.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatengi.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..015e3250235 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatengi.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatengi.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatengi.rsi/meta.json index 7752722477b..5d9e9636f78 100644 --- a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatengi.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatengi.rsi/meta.json @@ -1,26 +1,30 @@ -{ - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/77cff42b6c514e73881a885036be4b4dd2949f62", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" - }, - { - "name": "equipped-OUTERCLOTHING", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - } - ] +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/77cff42b6c514e73881a885036be4b4dd2949f62. equipped-OUTERCLOTHING-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] } \ No newline at end of file diff --git a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coathosarmored.rsi/equipped-OUTERCLOTHING.png b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coathosarmored.rsi/equipped-OUTERCLOTHING.png new file mode 100644 index 00000000000..d279e92da28 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coathosarmored.rsi/equipped-OUTERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coathosarmored.rsi/icon.png b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coathosarmored.rsi/icon.png new file mode 100644 index 00000000000..6f7573420d0 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coathosarmored.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coathosarmored.rsi/inhand-left.png b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coathosarmored.rsi/inhand-left.png new file mode 100644 index 00000000000..85a0b83457b Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coathosarmored.rsi/inhand-left.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coathosarmored.rsi/inhand-right.png b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coathosarmored.rsi/inhand-right.png new file mode 100644 index 00000000000..70ade34a8d1 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coathosarmored.rsi/inhand-right.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coathosarmored.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coathosarmored.rsi/meta.json new file mode 100644 index 00000000000..4010520850d --- /dev/null +++ b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coathosarmored.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from vg at commit https://github.com/vgstation-coders/vgstation13/commit/a16e41020a93479e9a7e2af343b1b74f7f2a61bd, recolored by Github user PursuitinAshes", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coathydro.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coathydro.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..334e1e8fe8b Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coathydro.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coathydro.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coathydro.rsi/meta.json index 7752722477b..5d9e9636f78 100644 --- a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coathydro.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coathydro.rsi/meta.json @@ -1,26 +1,30 @@ -{ - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/77cff42b6c514e73881a885036be4b4dd2949f62", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" - }, - { - "name": "equipped-OUTERCLOTHING", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - } - ] +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/77cff42b6c514e73881a885036be4b4dd2949f62. equipped-OUTERCLOTHING-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] } \ No newline at end of file diff --git a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatmed.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatmed.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..7b1b9d883c1 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatmed.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatmed.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatmed.rsi/meta.json index 7752722477b..5d9e9636f78 100644 --- a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatmed.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatmed.rsi/meta.json @@ -1,26 +1,30 @@ -{ - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/77cff42b6c514e73881a885036be4b4dd2949f62", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" - }, - { - "name": "equipped-OUTERCLOTHING", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - } - ] +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/77cff42b6c514e73881a885036be4b4dd2949f62. equipped-OUTERCLOTHING-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] } \ No newline at end of file diff --git a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatmime.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatmime.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..f713d3c8464 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatmime.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatmime.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatmime.rsi/meta.json index 7863947d1cc..19fcc6a9352 100644 --- a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatmime.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatmime.rsi/meta.json @@ -1,26 +1,30 @@ -{ - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Taken from vg at commit https://github.com/vgstation-coders/vgstation13/commit/a16e41020a93479e9a7e2af343b1b74f7f2a61bd", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" - }, - { - "name": "equipped-OUTERCLOTHING", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - } - ] +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from vg at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] } \ No newline at end of file diff --git a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatminer.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatminer.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..438eced1b5e Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatminer.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatminer.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatminer.rsi/meta.json index 7752722477b..5d9e9636f78 100644 --- a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatminer.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatminer.rsi/meta.json @@ -1,26 +1,30 @@ -{ - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/77cff42b6c514e73881a885036be4b4dd2949f62", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" - }, - { - "name": "equipped-OUTERCLOTHING", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - } - ] +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/77cff42b6c514e73881a885036be4b4dd2949f62. equipped-OUTERCLOTHING-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] } \ No newline at end of file diff --git a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatparamed.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatparamed.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..a7ff1040664 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatparamed.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatparamed.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatparamed.rsi/meta.json index 7752722477b..5d9e9636f78 100644 --- a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatparamed.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatparamed.rsi/meta.json @@ -1,26 +1,30 @@ -{ - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/77cff42b6c514e73881a885036be4b4dd2949f62", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" - }, - { - "name": "equipped-OUTERCLOTHING", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - } - ] +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/77cff42b6c514e73881a885036be4b4dd2949f62. equipped-OUTERCLOTHING-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] } \ No newline at end of file diff --git a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatsci.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatsci.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..1634304d137 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatsci.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatsci.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatsci.rsi/meta.json index 7752722477b..5d9e9636f78 100644 --- a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatsci.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatsci.rsi/meta.json @@ -1,26 +1,30 @@ -{ - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/77cff42b6c514e73881a885036be4b4dd2949f62", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" - }, - { - "name": "equipped-OUTERCLOTHING", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - } - ] +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/77cff42b6c514e73881a885036be4b4dd2949f62. equipped-OUTERCLOTHING-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] } \ No newline at end of file diff --git a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatsec.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatsec.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..e67c55f114d Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatsec.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatsec.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatsec.rsi/meta.json index 7752722477b..5d9e9636f78 100644 --- a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatsec.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatsec.rsi/meta.json @@ -1,26 +1,30 @@ -{ - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/77cff42b6c514e73881a885036be4b4dd2949f62", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" - }, - { - "name": "equipped-OUTERCLOTHING", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - } - ] +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/77cff42b6c514e73881a885036be4b4dd2949f62. equipped-OUTERCLOTHING-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] } \ No newline at end of file diff --git a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatwarden.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatwarden.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..b4f8cacea5b Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatwarden.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatwarden.rsi/equipped-OUTERCLOTHING.png b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatwarden.rsi/equipped-OUTERCLOTHING.png index 28cf03f49cc..baeeca8781a 100644 Binary files a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatwarden.rsi/equipped-OUTERCLOTHING.png and b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatwarden.rsi/equipped-OUTERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatwarden.rsi/icon.png b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatwarden.rsi/icon.png index eaf984f4378..854ea543e96 100644 Binary files a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatwarden.rsi/icon.png and b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatwarden.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatwarden.rsi/inhand-left.png b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatwarden.rsi/inhand-left.png index df033631e9d..464c4bfc5e3 100644 Binary files a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatwarden.rsi/inhand-left.png and b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatwarden.rsi/inhand-left.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatwarden.rsi/inhand-right.png b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatwarden.rsi/inhand-right.png index 77baaca885f..d537128b824 100644 Binary files a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatwarden.rsi/inhand-right.png and b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatwarden.rsi/inhand-right.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatwarden.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatwarden.rsi/meta.json index 7863947d1cc..ade0905fb8b 100644 --- a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatwarden.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatwarden.rsi/meta.json @@ -1,26 +1,30 @@ -{ - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Taken from vg at commit https://github.com/vgstation-coders/vgstation13/commit/a16e41020a93479e9a7e2af343b1b74f7f2a61bd", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" - }, - { - "name": "equipped-OUTERCLOTHING", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - } - ] -} \ No newline at end of file +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from vg at commit https://github.com/vgstation-coders/vgstation13/commit/31d6576ba8102135d058ef49c3cb6ecbe8db8a79 / https://github.com/tgstation/tgstation/commit/77cff42b6c514e73881a885036be4b4dd2949f62, recolored by Github user Dutch-VanDerLinde.", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatwardenarmored.rsi/equipped-OUTERCLOTHING.png b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatwardenarmored.rsi/equipped-OUTERCLOTHING.png new file mode 100644 index 00000000000..28cf03f49cc Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatwardenarmored.rsi/equipped-OUTERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatwardenarmored.rsi/icon.png b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatwardenarmored.rsi/icon.png new file mode 100644 index 00000000000..eaf984f4378 Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatwardenarmored.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatwardenarmored.rsi/inhand-left.png b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatwardenarmored.rsi/inhand-left.png new file mode 100644 index 00000000000..df033631e9d Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatwardenarmored.rsi/inhand-left.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatwardenarmored.rsi/inhand-right.png b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatwardenarmored.rsi/inhand-right.png new file mode 100644 index 00000000000..77baaca885f Binary files /dev/null and b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatwardenarmored.rsi/inhand-right.png differ diff --git a/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatwardenarmored.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatwardenarmored.rsi/meta.json new file mode 100644 index 00000000000..c9f0d90ea13 --- /dev/null +++ b/Resources/Textures/Clothing/OuterClothing/WinterCoats/coatwardenarmored.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from vg at commit https://github.com/vgstation-coders/vgstation13/commit/a16e41020a93479e9a7e2af343b1b74f7f2a61bd", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Clothing/Shoes/Boots/jackboots.rsi/equipped-FEET-vox.png b/Resources/Textures/Clothing/Shoes/Boots/jackboots.rsi/equipped-FEET-vox.png new file mode 100644 index 00000000000..73ab1326b83 Binary files /dev/null and b/Resources/Textures/Clothing/Shoes/Boots/jackboots.rsi/equipped-FEET-vox.png differ diff --git a/Resources/Textures/Clothing/Shoes/Boots/jackboots.rsi/meta.json b/Resources/Textures/Clothing/Shoes/Boots/jackboots.rsi/meta.json index 54b1191d425..1abf6951f1e 100644 --- a/Resources/Textures/Clothing/Shoes/Boots/jackboots.rsi/meta.json +++ b/Resources/Textures/Clothing/Shoes/Boots/jackboots.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/7e4e9d432d88981fb9bb463970c5b98ce85c0abe", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/7e4e9d432d88981fb9bb463970c5b98ce85c0abe. equipped-FEET-vox state taken from vgstation13 at https://github.com/vgstation-coders/vgstation13/blob/31d6576ba8102135d058ef49c3cb6ecbe8db8a79/icons/mob/species/vox/shoes.dmi", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-FEET", "directions": 4 }, + { + "name": "equipped-FEET-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/Shoes/Boots/magboots-advanced.rsi/equipped-FEET-vox.png b/Resources/Textures/Clothing/Shoes/Boots/magboots-advanced.rsi/equipped-FEET-vox.png new file mode 100644 index 00000000000..0d3d83cbad4 Binary files /dev/null and b/Resources/Textures/Clothing/Shoes/Boots/magboots-advanced.rsi/equipped-FEET-vox.png differ diff --git a/Resources/Textures/Clothing/Shoes/Boots/magboots-advanced.rsi/meta.json b/Resources/Textures/Clothing/Shoes/Boots/magboots-advanced.rsi/meta.json index 8d56bf0c2bb..5b3afdcd749 100644 --- a/Resources/Textures/Clothing/Shoes/Boots/magboots-advanced.rsi/meta.json +++ b/Resources/Textures/Clothing/Shoes/Boots/magboots-advanced.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "https://github.com/tgstation/tgstation/commit/3d319f6157acc1c1cd9ebcb0f6f12641e051cf91", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/3d319f6157acc1c1cd9ebcb0f6f12641e051cf91. equipped-FEET-vox & on-equipped-FEET-vox state taken from vgstation13 at https://github.com/vgstation-coders/vgstation13/blob/31d6576ba8102135d058ef49c3cb6ecbe8db8a79/icons/mob/species/vox/shoes.dmi, and equipped-FEET-vox state modified to fix inconsistencies", "size": { "x": 32, "y": 32 @@ -15,6 +15,14 @@ "name": "on-equipped-FEET", "directions": 4 }, + { + "name": "equipped-FEET-vox", + "directions": 4 + }, + { + "name": "on-equipped-FEET-vox", + "directions": 4 + }, { "name": "icon" }, diff --git a/Resources/Textures/Clothing/Shoes/Boots/magboots-advanced.rsi/on-equipped-FEET-vox.png b/Resources/Textures/Clothing/Shoes/Boots/magboots-advanced.rsi/on-equipped-FEET-vox.png new file mode 100644 index 00000000000..9c1af7f0619 Binary files /dev/null and b/Resources/Textures/Clothing/Shoes/Boots/magboots-advanced.rsi/on-equipped-FEET-vox.png differ diff --git a/Resources/Textures/Clothing/Shoes/Boots/magboots-syndicate.rsi/equipped-FEET-vox.png b/Resources/Textures/Clothing/Shoes/Boots/magboots-syndicate.rsi/equipped-FEET-vox.png new file mode 100644 index 00000000000..ff7074dbe3d Binary files /dev/null and b/Resources/Textures/Clothing/Shoes/Boots/magboots-syndicate.rsi/equipped-FEET-vox.png differ diff --git a/Resources/Textures/Clothing/Shoes/Boots/magboots-syndicate.rsi/meta.json b/Resources/Textures/Clothing/Shoes/Boots/magboots-syndicate.rsi/meta.json index ead74d88966..ae71606af37 100644 --- a/Resources/Textures/Clothing/Shoes/Boots/magboots-syndicate.rsi/meta.json +++ b/Resources/Textures/Clothing/Shoes/Boots/magboots-syndicate.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/debf90acfcafa4fb8d6723a37e0b8ac556c0702b", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/debf90acfcafa4fb8d6723a37e0b8ac556c0702b. equipped-FEET-vox & on-equipped-FEET-vox state taken from vgstation13 at https://github.com/vgstation-coders/vgstation13/blob/31d6576ba8102135d058ef49c3cb6ecbe8db8a79/icons/mob/species/vox/shoes.dmi, and equipped-FEET-vox state modified to fix inconsistencies", "size": { "x": 32, "y": 32 @@ -15,6 +15,14 @@ "name": "on-equipped-FEET", "directions": 4 }, + { + "name": "equipped-FEET-vox", + "directions": 4 + }, + { + "name": "on-equipped-FEET-vox", + "directions": 4 + }, { "name": "icon" }, diff --git a/Resources/Textures/Clothing/Shoes/Boots/magboots-syndicate.rsi/on-equipped-FEET-vox.png b/Resources/Textures/Clothing/Shoes/Boots/magboots-syndicate.rsi/on-equipped-FEET-vox.png new file mode 100644 index 00000000000..c14f7078345 Binary files /dev/null and b/Resources/Textures/Clothing/Shoes/Boots/magboots-syndicate.rsi/on-equipped-FEET-vox.png differ diff --git a/Resources/Textures/Clothing/Shoes/Boots/magboots.rsi/equipped-FEET-vox.png b/Resources/Textures/Clothing/Shoes/Boots/magboots.rsi/equipped-FEET-vox.png new file mode 100644 index 00000000000..66083b253d4 Binary files /dev/null and b/Resources/Textures/Clothing/Shoes/Boots/magboots.rsi/equipped-FEET-vox.png differ diff --git a/Resources/Textures/Clothing/Shoes/Boots/magboots.rsi/meta.json b/Resources/Textures/Clothing/Shoes/Boots/magboots.rsi/meta.json index 96b3f4109e6..f2aa6dbc5b1 100644 --- a/Resources/Textures/Clothing/Shoes/Boots/magboots.rsi/meta.json +++ b/Resources/Textures/Clothing/Shoes/Boots/magboots.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/7e4e9d432d88981fb9bb463970c5b98ce85c0abe", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/7e4e9d432d88981fb9bb463970c5b98ce85c0abe. equipped-FEET-vox & on-equipped-FEET-vox state taken from vgstation13 at https://github.com/vgstation-coders/vgstation13/blob/31d6576ba8102135d058ef49c3cb6ecbe8db8a79/icons/mob/species/vox/shoes.dmi, and equipped-FEET-vox state modified to fix inconsistencies", "size": { "x": 32, "y": 32 @@ -15,6 +15,14 @@ "name": "on-equipped-FEET", "directions": 4 }, + { + "name": "equipped-FEET-vox", + "directions": 4 + }, + { + "name": "on-equipped-FEET-vox", + "directions": 4 + }, { "name": "icon" }, diff --git a/Resources/Textures/Clothing/Shoes/Boots/magboots.rsi/on-equipped-FEET-vox.png b/Resources/Textures/Clothing/Shoes/Boots/magboots.rsi/on-equipped-FEET-vox.png new file mode 100644 index 00000000000..e9d3dffc764 Binary files /dev/null and b/Resources/Textures/Clothing/Shoes/Boots/magboots.rsi/on-equipped-FEET-vox.png differ diff --git a/Resources/Textures/Clothing/Shoes/Misc/slippers.rsi/equipped-FEET-vox.png b/Resources/Textures/Clothing/Shoes/Misc/slippers.rsi/equipped-FEET-vox.png new file mode 100644 index 00000000000..02a752334bf Binary files /dev/null and b/Resources/Textures/Clothing/Shoes/Misc/slippers.rsi/equipped-FEET-vox.png differ diff --git a/Resources/Textures/Clothing/Shoes/Misc/slippers.rsi/meta.json b/Resources/Textures/Clothing/Shoes/Misc/slippers.rsi/meta.json index 54b1191d425..1abf6951f1e 100644 --- a/Resources/Textures/Clothing/Shoes/Misc/slippers.rsi/meta.json +++ b/Resources/Textures/Clothing/Shoes/Misc/slippers.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/7e4e9d432d88981fb9bb463970c5b98ce85c0abe", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/7e4e9d432d88981fb9bb463970c5b98ce85c0abe. equipped-FEET-vox state taken from vgstation13 at https://github.com/vgstation-coders/vgstation13/blob/31d6576ba8102135d058ef49c3cb6ecbe8db8a79/icons/mob/species/vox/shoes.dmi", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-FEET", "directions": 4 }, + { + "name": "equipped-FEET-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/Shoes/Misc/tourist.rsi/equipped-FEET-vox.png b/Resources/Textures/Clothing/Shoes/Misc/tourist.rsi/equipped-FEET-vox.png new file mode 100644 index 00000000000..a7383072977 Binary files /dev/null and b/Resources/Textures/Clothing/Shoes/Misc/tourist.rsi/equipped-FEET-vox.png differ diff --git a/Resources/Textures/Clothing/Shoes/Misc/tourist.rsi/meta.json b/Resources/Textures/Clothing/Shoes/Misc/tourist.rsi/meta.json index 54b1191d425..1abf6951f1e 100644 --- a/Resources/Textures/Clothing/Shoes/Misc/tourist.rsi/meta.json +++ b/Resources/Textures/Clothing/Shoes/Misc/tourist.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/7e4e9d432d88981fb9bb463970c5b98ce85c0abe", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/7e4e9d432d88981fb9bb463970c5b98ce85c0abe. equipped-FEET-vox state taken from vgstation13 at https://github.com/vgstation-coders/vgstation13/blob/31d6576ba8102135d058ef49c3cb6ecbe8db8a79/icons/mob/species/vox/shoes.dmi", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-FEET", "directions": 4 }, + { + "name": "equipped-FEET-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/Shoes/Specific/clown.rsi/equipped-FEET-vox.png b/Resources/Textures/Clothing/Shoes/Specific/clown.rsi/equipped-FEET-vox.png new file mode 100644 index 00000000000..2dc1885cd37 Binary files /dev/null and b/Resources/Textures/Clothing/Shoes/Specific/clown.rsi/equipped-FEET-vox.png differ diff --git a/Resources/Textures/Clothing/Shoes/Specific/clown.rsi/meta.json b/Resources/Textures/Clothing/Shoes/Specific/clown.rsi/meta.json index 54b1191d425..1abf6951f1e 100644 --- a/Resources/Textures/Clothing/Shoes/Specific/clown.rsi/meta.json +++ b/Resources/Textures/Clothing/Shoes/Specific/clown.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/7e4e9d432d88981fb9bb463970c5b98ce85c0abe", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/7e4e9d432d88981fb9bb463970c5b98ce85c0abe. equipped-FEET-vox state taken from vgstation13 at https://github.com/vgstation-coders/vgstation13/blob/31d6576ba8102135d058ef49c3cb6ecbe8db8a79/icons/mob/species/vox/shoes.dmi", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-FEET", "directions": 4 }, + { + "name": "equipped-FEET-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/Shoes/Specific/swat.rsi/equipped-FEET-vox.png b/Resources/Textures/Clothing/Shoes/Specific/swat.rsi/equipped-FEET-vox.png new file mode 100644 index 00000000000..73ab1326b83 Binary files /dev/null and b/Resources/Textures/Clothing/Shoes/Specific/swat.rsi/equipped-FEET-vox.png differ diff --git a/Resources/Textures/Clothing/Shoes/Specific/swat.rsi/meta.json b/Resources/Textures/Clothing/Shoes/Specific/swat.rsi/meta.json index 54b1191d425..1abf6951f1e 100644 --- a/Resources/Textures/Clothing/Shoes/Specific/swat.rsi/meta.json +++ b/Resources/Textures/Clothing/Shoes/Specific/swat.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/7e4e9d432d88981fb9bb463970c5b98ce85c0abe", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/7e4e9d432d88981fb9bb463970c5b98ce85c0abe. equipped-FEET-vox state taken from vgstation13 at https://github.com/vgstation-coders/vgstation13/blob/31d6576ba8102135d058ef49c3cb6ecbe8db8a79/icons/mob/species/vox/shoes.dmi", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-FEET", "directions": 4 }, + { + "name": "equipped-FEET-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/Shoes/Specific/wizard.rsi/equipped-FEET-vox.png b/Resources/Textures/Clothing/Shoes/Specific/wizard.rsi/equipped-FEET-vox.png new file mode 100644 index 00000000000..838d02bb453 Binary files /dev/null and b/Resources/Textures/Clothing/Shoes/Specific/wizard.rsi/equipped-FEET-vox.png differ diff --git a/Resources/Textures/Clothing/Shoes/Specific/wizard.rsi/meta.json b/Resources/Textures/Clothing/Shoes/Specific/wizard.rsi/meta.json index 54b1191d425..1abf6951f1e 100644 --- a/Resources/Textures/Clothing/Shoes/Specific/wizard.rsi/meta.json +++ b/Resources/Textures/Clothing/Shoes/Specific/wizard.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/7e4e9d432d88981fb9bb463970c5b98ce85c0abe", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/7e4e9d432d88981fb9bb463970c5b98ce85c0abe. equipped-FEET-vox state taken from vgstation13 at https://github.com/vgstation-coders/vgstation13/blob/31d6576ba8102135d058ef49c3cb6ecbe8db8a79/icons/mob/species/vox/shoes.dmi", "size": { "x": 32, "y": 32 @@ -14,6 +14,10 @@ "name": "equipped-FEET", "directions": 4 }, + { + "name": "equipped-FEET-vox", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Clothing/Under/Socks/coder.rsi/equipped-FEET.png b/Resources/Textures/Clothing/Under/Socks/coder.rsi/equipped-FEET.png index 0fea6220634..4bb67f166d5 100644 Binary files a/Resources/Textures/Clothing/Under/Socks/coder.rsi/equipped-FEET.png and b/Resources/Textures/Clothing/Under/Socks/coder.rsi/equipped-FEET.png differ diff --git a/Resources/Textures/Clothing/Under/Socks/coder.rsi/meta.json b/Resources/Textures/Clothing/Under/Socks/coder.rsi/meta.json index 194b8c4f0f5..1bb04ab6eb6 100644 --- a/Resources/Textures/Clothing/Under/Socks/coder.rsi/meta.json +++ b/Resources/Textures/Clothing/Under/Socks/coder.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/c838ba21dae97db345e0113f99596decd1d66039", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/c838ba21dae97db345e0113f99596decd1d66039, equipped-FEET modified by Psychpsyo", "size": { "x": 32, "y": 32 diff --git a/Resources/Textures/Clothing/Uniforms/Jumpskirt/olddress.rsi/equipped-INNERCLOTHING.png b/Resources/Textures/Clothing/Uniforms/Jumpskirt/olddress.rsi/equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..145cf97b2e5 Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpskirt/olddress.rsi/equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpskirt/olddress.rsi/icon.png b/Resources/Textures/Clothing/Uniforms/Jumpskirt/olddress.rsi/icon.png new file mode 100644 index 00000000000..28b2de16927 Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpskirt/olddress.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpskirt/olddress.rsi/inhand-left.png b/Resources/Textures/Clothing/Uniforms/Jumpskirt/olddress.rsi/inhand-left.png new file mode 100644 index 00000000000..a85d0a11e9b Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpskirt/olddress.rsi/inhand-left.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpskirt/olddress.rsi/inhand-right.png b/Resources/Textures/Clothing/Uniforms/Jumpskirt/olddress.rsi/inhand-right.png new file mode 100644 index 00000000000..4d6da567de5 Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpskirt/olddress.rsi/inhand-right.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpskirt/olddress.rsi/meta.json b/Resources/Textures/Clothing/Uniforms/Jumpskirt/olddress.rsi/meta.json new file mode 100644 index 00000000000..d4ea50d555c --- /dev/null +++ b/Resources/Textures/Clothing/Uniforms/Jumpskirt/olddress.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "fujiwaranao", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-INNERCLOTHING", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/Uniforms/Jumpskirt/security.rsi/equipped-INNERCLOTHING.png b/Resources/Textures/Clothing/Uniforms/Jumpskirt/security.rsi/equipped-INNERCLOTHING.png index 8ffa6e2e94c..8781d46b5f8 100644 Binary files a/Resources/Textures/Clothing/Uniforms/Jumpskirt/security.rsi/equipped-INNERCLOTHING.png and b/Resources/Textures/Clothing/Uniforms/Jumpskirt/security.rsi/equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpskirt/senior_officer.rsi/equipped-INNERCLOTHING.png b/Resources/Textures/Clothing/Uniforms/Jumpskirt/senior_officer.rsi/equipped-INNERCLOTHING.png index b3ecbd97129..8d2ae436492 100644 Binary files a/Resources/Textures/Clothing/Uniforms/Jumpskirt/senior_officer.rsi/equipped-INNERCLOTHING.png and b/Resources/Textures/Clothing/Uniforms/Jumpskirt/senior_officer.rsi/equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpskirt/senior_officer.rsi/icon.png b/Resources/Textures/Clothing/Uniforms/Jumpskirt/senior_officer.rsi/icon.png index 18ab875179f..b08cd213dee 100644 Binary files a/Resources/Textures/Clothing/Uniforms/Jumpskirt/senior_officer.rsi/icon.png and b/Resources/Textures/Clothing/Uniforms/Jumpskirt/senior_officer.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpskirt/senior_physician.rsi/equipped-INNERCLOTHING-monkey.png b/Resources/Textures/Clothing/Uniforms/Jumpskirt/senior_physician.rsi/equipped-INNERCLOTHING-monkey.png index 4e98c89cc93..830f482ab86 100644 Binary files a/Resources/Textures/Clothing/Uniforms/Jumpskirt/senior_physician.rsi/equipped-INNERCLOTHING-monkey.png and b/Resources/Textures/Clothing/Uniforms/Jumpskirt/senior_physician.rsi/equipped-INNERCLOTHING-monkey.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpskirt/senior_physician.rsi/equipped-INNERCLOTHING.png b/Resources/Textures/Clothing/Uniforms/Jumpskirt/senior_physician.rsi/equipped-INNERCLOTHING.png index 311e0aecb97..c92abfde99c 100644 Binary files a/Resources/Textures/Clothing/Uniforms/Jumpskirt/senior_physician.rsi/equipped-INNERCLOTHING.png and b/Resources/Textures/Clothing/Uniforms/Jumpskirt/senior_physician.rsi/equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpskirt/senior_physician.rsi/icon.png b/Resources/Textures/Clothing/Uniforms/Jumpskirt/senior_physician.rsi/icon.png index aaee2537daa..65ef81a2529 100644 Binary files a/Resources/Textures/Clothing/Uniforms/Jumpskirt/senior_physician.rsi/icon.png and b/Resources/Textures/Clothing/Uniforms/Jumpskirt/senior_physician.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpskirt/senior_physician.rsi/inhand-left.png b/Resources/Textures/Clothing/Uniforms/Jumpskirt/senior_physician.rsi/inhand-left.png index e0b2d4759be..4381a0172be 100644 Binary files a/Resources/Textures/Clothing/Uniforms/Jumpskirt/senior_physician.rsi/inhand-left.png and b/Resources/Textures/Clothing/Uniforms/Jumpskirt/senior_physician.rsi/inhand-left.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpskirt/senior_physician.rsi/inhand-right.png b/Resources/Textures/Clothing/Uniforms/Jumpskirt/senior_physician.rsi/inhand-right.png index a2ecc2b551d..3855dc44e1b 100644 Binary files a/Resources/Textures/Clothing/Uniforms/Jumpskirt/senior_physician.rsi/inhand-right.png and b/Resources/Textures/Clothing/Uniforms/Jumpskirt/senior_physician.rsi/inhand-right.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/bartender_idris.rsi/equipped-INNERCLOTHING.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/bartender_idris.rsi/equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..0870a1469e6 Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/bartender_idris.rsi/equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/bartender_idris.rsi/flipped-equipped-INNERCLOTHING.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/bartender_idris.rsi/flipped-equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..b1542b08790 Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/bartender_idris.rsi/flipped-equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/bartender_idris.rsi/icon.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/bartender_idris.rsi/icon.png new file mode 100644 index 00000000000..e5618fd85b3 Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/bartender_idris.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/bartender_idris.rsi/icon_flipped.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/bartender_idris.rsi/icon_flipped.png new file mode 100644 index 00000000000..e5618fd85b3 Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/bartender_idris.rsi/icon_flipped.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/bartender_idris.rsi/meta.json b/Resources/Textures/Clothing/Uniforms/Jumpsuit/bartender_idris.rsi/meta.json new file mode 100644 index 00000000000..5fb2373c7cd --- /dev/null +++ b/Resources/Textures/Clothing/Uniforms/Jumpsuit/bartender_idris.rsi/meta.json @@ -0,0 +1,25 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Aurorastation at commit https://github.com/Aurorastation/Aurora.3/commit/a8759f3c77b61315df50ee86969799f5a0afe894", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "icon_flipped" + }, + { + "name": "equipped-INNERCLOTHING", + "directions": 4 + }, + { + "name": "flipped-equipped-INNERCLOTHING", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/bartender_nt.rsi/equipped-INNERCLOTHING.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/bartender_nt.rsi/equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..d96717ec856 Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/bartender_nt.rsi/equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/bartender_nt.rsi/flipped-equipped-INNERCLOTHING.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/bartender_nt.rsi/flipped-equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..b0938a8d9b2 Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/bartender_nt.rsi/flipped-equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/bartender_nt.rsi/icon.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/bartender_nt.rsi/icon.png new file mode 100644 index 00000000000..a2df7edad68 Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/bartender_nt.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/bartender_nt.rsi/icon_flipped.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/bartender_nt.rsi/icon_flipped.png new file mode 100644 index 00000000000..a2df7edad68 Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/bartender_nt.rsi/icon_flipped.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/bartender_nt.rsi/meta.json b/Resources/Textures/Clothing/Uniforms/Jumpsuit/bartender_nt.rsi/meta.json new file mode 100644 index 00000000000..5fb2373c7cd --- /dev/null +++ b/Resources/Textures/Clothing/Uniforms/Jumpsuit/bartender_nt.rsi/meta.json @@ -0,0 +1,25 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Aurorastation at commit https://github.com/Aurorastation/Aurora.3/commit/a8759f3c77b61315df50ee86969799f5a0afe894", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "icon_flipped" + }, + { + "name": "equipped-INNERCLOTHING", + "directions": 4 + }, + { + "name": "flipped-equipped-INNERCLOTHING", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/bartender_orion.rsi/equipped-INNERCLOTHING.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/bartender_orion.rsi/equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..582dfded6ba Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/bartender_orion.rsi/equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/bartender_orion.rsi/flipped-equipped-INNERCLOTHING.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/bartender_orion.rsi/flipped-equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..0065f96ccfc Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/bartender_orion.rsi/flipped-equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/bartender_orion.rsi/icon.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/bartender_orion.rsi/icon.png new file mode 100644 index 00000000000..023044764ac Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/bartender_orion.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/bartender_orion.rsi/icon_flipped.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/bartender_orion.rsi/icon_flipped.png new file mode 100644 index 00000000000..023044764ac Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/bartender_orion.rsi/icon_flipped.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/bartender_orion.rsi/meta.json b/Resources/Textures/Clothing/Uniforms/Jumpsuit/bartender_orion.rsi/meta.json new file mode 100644 index 00000000000..5fb2373c7cd --- /dev/null +++ b/Resources/Textures/Clothing/Uniforms/Jumpsuit/bartender_orion.rsi/meta.json @@ -0,0 +1,25 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Aurorastation at commit https://github.com/Aurorastation/Aurora.3/commit/a8759f3c77b61315df50ee86969799f5a0afe894", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "icon_flipped" + }, + { + "name": "equipped-INNERCLOTHING", + "directions": 4 + }, + { + "name": "flipped-equipped-INNERCLOTHING", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/chef_idris.rsi/equipped-INNERCLOTHING.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/chef_idris.rsi/equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..0e198c8ca62 Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/chef_idris.rsi/equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/chef_idris.rsi/flipped-equipped-INNERCLOTHING.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/chef_idris.rsi/flipped-equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..ae0a3684619 Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/chef_idris.rsi/flipped-equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/chef_idris.rsi/icon.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/chef_idris.rsi/icon.png new file mode 100644 index 00000000000..344384e22b9 Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/chef_idris.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/chef_idris.rsi/icon_flipped.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/chef_idris.rsi/icon_flipped.png new file mode 100644 index 00000000000..344384e22b9 Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/chef_idris.rsi/icon_flipped.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/chef_idris.rsi/meta.json b/Resources/Textures/Clothing/Uniforms/Jumpsuit/chef_idris.rsi/meta.json new file mode 100644 index 00000000000..5fb2373c7cd --- /dev/null +++ b/Resources/Textures/Clothing/Uniforms/Jumpsuit/chef_idris.rsi/meta.json @@ -0,0 +1,25 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Aurorastation at commit https://github.com/Aurorastation/Aurora.3/commit/a8759f3c77b61315df50ee86969799f5a0afe894", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "icon_flipped" + }, + { + "name": "equipped-INNERCLOTHING", + "directions": 4 + }, + { + "name": "flipped-equipped-INNERCLOTHING", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/chef_nt.rsi/equipped-INNERCLOTHING.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/chef_nt.rsi/equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..28f5d72a40b Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/chef_nt.rsi/equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/chef_nt.rsi/flipped-equipped-INNERCLOTHING.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/chef_nt.rsi/flipped-equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..83f9c5604c5 Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/chef_nt.rsi/flipped-equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/chef_nt.rsi/icon.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/chef_nt.rsi/icon.png new file mode 100644 index 00000000000..26e328aa541 Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/chef_nt.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/chef_nt.rsi/icon_flipped.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/chef_nt.rsi/icon_flipped.png new file mode 100644 index 00000000000..26e328aa541 Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/chef_nt.rsi/icon_flipped.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/chef_nt.rsi/meta.json b/Resources/Textures/Clothing/Uniforms/Jumpsuit/chef_nt.rsi/meta.json new file mode 100644 index 00000000000..5fb2373c7cd --- /dev/null +++ b/Resources/Textures/Clothing/Uniforms/Jumpsuit/chef_nt.rsi/meta.json @@ -0,0 +1,25 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Aurorastation at commit https://github.com/Aurorastation/Aurora.3/commit/a8759f3c77b61315df50ee86969799f5a0afe894", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "icon_flipped" + }, + { + "name": "equipped-INNERCLOTHING", + "directions": 4 + }, + { + "name": "flipped-equipped-INNERCLOTHING", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/chef_orion.rsi/equipped-INNERCLOTHING.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/chef_orion.rsi/equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..582dfded6ba Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/chef_orion.rsi/equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/chef_orion.rsi/flipped-equipped-INNERCLOTHING.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/chef_orion.rsi/flipped-equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..0065f96ccfc Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/chef_orion.rsi/flipped-equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/chef_orion.rsi/icon.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/chef_orion.rsi/icon.png new file mode 100644 index 00000000000..a8617562aff Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/chef_orion.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/chef_orion.rsi/icon_flipped.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/chef_orion.rsi/icon_flipped.png new file mode 100644 index 00000000000..a8617562aff Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/chef_orion.rsi/icon_flipped.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/chef_orion.rsi/meta.json b/Resources/Textures/Clothing/Uniforms/Jumpsuit/chef_orion.rsi/meta.json new file mode 100644 index 00000000000..5fb2373c7cd --- /dev/null +++ b/Resources/Textures/Clothing/Uniforms/Jumpsuit/chef_orion.rsi/meta.json @@ -0,0 +1,25 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Aurorastation at commit https://github.com/Aurorastation/Aurora.3/commit/a8759f3c77b61315df50ee86969799f5a0afe894", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "icon_flipped" + }, + { + "name": "equipped-INNERCLOTHING", + "directions": 4 + }, + { + "name": "flipped-equipped-INNERCLOTHING", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/hydro_idris.rsi/equipped-INNERCLOTHING.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/hydro_idris.rsi/equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..363f2d2a744 Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/hydro_idris.rsi/equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/hydro_idris.rsi/flipped-equipped-INNERCLOTHING.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/hydro_idris.rsi/flipped-equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..cac20979820 Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/hydro_idris.rsi/flipped-equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/hydro_idris.rsi/icon.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/hydro_idris.rsi/icon.png new file mode 100644 index 00000000000..c9c994b1cac Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/hydro_idris.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/hydro_idris.rsi/icon_flipped.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/hydro_idris.rsi/icon_flipped.png new file mode 100644 index 00000000000..c9c994b1cac Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/hydro_idris.rsi/icon_flipped.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/hydro_idris.rsi/meta.json b/Resources/Textures/Clothing/Uniforms/Jumpsuit/hydro_idris.rsi/meta.json new file mode 100644 index 00000000000..5fb2373c7cd --- /dev/null +++ b/Resources/Textures/Clothing/Uniforms/Jumpsuit/hydro_idris.rsi/meta.json @@ -0,0 +1,25 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Aurorastation at commit https://github.com/Aurorastation/Aurora.3/commit/a8759f3c77b61315df50ee86969799f5a0afe894", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "icon_flipped" + }, + { + "name": "equipped-INNERCLOTHING", + "directions": 4 + }, + { + "name": "flipped-equipped-INNERCLOTHING", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/hydro_nt.rsi/equipped-INNERCLOTHING.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/hydro_nt.rsi/equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..a7e697f4b37 Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/hydro_nt.rsi/equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/hydro_nt.rsi/flipped-equipped-INNERCLOTHING.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/hydro_nt.rsi/flipped-equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..1ce04abfd63 Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/hydro_nt.rsi/flipped-equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/hydro_nt.rsi/icon.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/hydro_nt.rsi/icon.png new file mode 100644 index 00000000000..7e69ab12b4b Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/hydro_nt.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/hydro_nt.rsi/icon_flipped.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/hydro_nt.rsi/icon_flipped.png new file mode 100644 index 00000000000..7e69ab12b4b Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/hydro_nt.rsi/icon_flipped.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/hydro_nt.rsi/meta.json b/Resources/Textures/Clothing/Uniforms/Jumpsuit/hydro_nt.rsi/meta.json new file mode 100644 index 00000000000..5fb2373c7cd --- /dev/null +++ b/Resources/Textures/Clothing/Uniforms/Jumpsuit/hydro_nt.rsi/meta.json @@ -0,0 +1,25 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Aurorastation at commit https://github.com/Aurorastation/Aurora.3/commit/a8759f3c77b61315df50ee86969799f5a0afe894", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "icon_flipped" + }, + { + "name": "equipped-INNERCLOTHING", + "directions": 4 + }, + { + "name": "flipped-equipped-INNERCLOTHING", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/hydro_orion.rsi/equipped-INNERCLOTHING.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/hydro_orion.rsi/equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..5be6ed06ffe Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/hydro_orion.rsi/equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/hydro_orion.rsi/flipped-equipped-INNERCLOTHING.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/hydro_orion.rsi/flipped-equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..a30d64c9a33 Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/hydro_orion.rsi/flipped-equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/hydro_orion.rsi/icon.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/hydro_orion.rsi/icon.png new file mode 100644 index 00000000000..30e2a825471 Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/hydro_orion.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/hydro_orion.rsi/icon_flipped.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/hydro_orion.rsi/icon_flipped.png new file mode 100644 index 00000000000..30e2a825471 Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/hydro_orion.rsi/icon_flipped.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/hydro_orion.rsi/meta.json b/Resources/Textures/Clothing/Uniforms/Jumpsuit/hydro_orion.rsi/meta.json new file mode 100644 index 00000000000..5fb2373c7cd --- /dev/null +++ b/Resources/Textures/Clothing/Uniforms/Jumpsuit/hydro_orion.rsi/meta.json @@ -0,0 +1,25 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Aurorastation at commit https://github.com/Aurorastation/Aurora.3/commit/a8759f3c77b61315df50ee86969799f5a0afe894", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "icon_flipped" + }, + { + "name": "equipped-INNERCLOTHING", + "directions": 4 + }, + { + "name": "flipped-equipped-INNERCLOTHING", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/janitor_idris.rsi/equipped-INNERCLOTHING.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/janitor_idris.rsi/equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..7e7edddcdad Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/janitor_idris.rsi/equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/janitor_idris.rsi/flipped-equipped-INNERCLOTHING.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/janitor_idris.rsi/flipped-equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..cb6862563bd Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/janitor_idris.rsi/flipped-equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/janitor_idris.rsi/icon.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/janitor_idris.rsi/icon.png new file mode 100644 index 00000000000..8c4abbbf2b9 Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/janitor_idris.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/janitor_idris.rsi/icon_flipped.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/janitor_idris.rsi/icon_flipped.png new file mode 100644 index 00000000000..8c4abbbf2b9 Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/janitor_idris.rsi/icon_flipped.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/janitor_idris.rsi/meta.json b/Resources/Textures/Clothing/Uniforms/Jumpsuit/janitor_idris.rsi/meta.json new file mode 100644 index 00000000000..5fb2373c7cd --- /dev/null +++ b/Resources/Textures/Clothing/Uniforms/Jumpsuit/janitor_idris.rsi/meta.json @@ -0,0 +1,25 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Aurorastation at commit https://github.com/Aurorastation/Aurora.3/commit/a8759f3c77b61315df50ee86969799f5a0afe894", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "icon_flipped" + }, + { + "name": "equipped-INNERCLOTHING", + "directions": 4 + }, + { + "name": "flipped-equipped-INNERCLOTHING", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/janitor_nt.rsi/equipped-INNERCLOTHING.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/janitor_nt.rsi/equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..3a155aaf9ea Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/janitor_nt.rsi/equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/janitor_nt.rsi/flipped-equipped-INNERCLOTHING.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/janitor_nt.rsi/flipped-equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..8a275a2d43c Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/janitor_nt.rsi/flipped-equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/janitor_nt.rsi/icon.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/janitor_nt.rsi/icon.png new file mode 100644 index 00000000000..6aaba29a2f4 Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/janitor_nt.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/janitor_nt.rsi/icon_flipped.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/janitor_nt.rsi/icon_flipped.png new file mode 100644 index 00000000000..6aaba29a2f4 Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/janitor_nt.rsi/icon_flipped.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/janitor_nt.rsi/meta.json b/Resources/Textures/Clothing/Uniforms/Jumpsuit/janitor_nt.rsi/meta.json new file mode 100644 index 00000000000..5fb2373c7cd --- /dev/null +++ b/Resources/Textures/Clothing/Uniforms/Jumpsuit/janitor_nt.rsi/meta.json @@ -0,0 +1,25 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Aurorastation at commit https://github.com/Aurorastation/Aurora.3/commit/a8759f3c77b61315df50ee86969799f5a0afe894", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "icon_flipped" + }, + { + "name": "equipped-INNERCLOTHING", + "directions": 4 + }, + { + "name": "flipped-equipped-INNERCLOTHING", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/janitor_orion.rsi/equipped-INNERCLOTHING.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/janitor_orion.rsi/equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..995b2caa14c Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/janitor_orion.rsi/equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/janitor_orion.rsi/flipped-equipped-INNERCLOTHING.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/janitor_orion.rsi/flipped-equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..7342f0ae8e8 Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/janitor_orion.rsi/flipped-equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/janitor_orion.rsi/icon.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/janitor_orion.rsi/icon.png new file mode 100644 index 00000000000..9fb0d1e0d43 Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/janitor_orion.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/janitor_orion.rsi/icon_flipped.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/janitor_orion.rsi/icon_flipped.png new file mode 100644 index 00000000000..9fb0d1e0d43 Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/janitor_orion.rsi/icon_flipped.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/janitor_orion.rsi/meta.json b/Resources/Textures/Clothing/Uniforms/Jumpsuit/janitor_orion.rsi/meta.json new file mode 100644 index 00000000000..5fb2373c7cd --- /dev/null +++ b/Resources/Textures/Clothing/Uniforms/Jumpsuit/janitor_orion.rsi/meta.json @@ -0,0 +1,25 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Aurorastation at commit https://github.com/Aurorastation/Aurora.3/commit/a8759f3c77b61315df50ee86969799f5a0afe894", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "icon_flipped" + }, + { + "name": "equipped-INNERCLOTHING", + "directions": 4 + }, + { + "name": "flipped-equipped-INNERCLOTHING", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_heph.rsi/equipped-INNERCLOTHING.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_heph.rsi/equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..e344719ee5f Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_heph.rsi/equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_heph.rsi/flipped-equipped-INNERCLOTHING.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_heph.rsi/flipped-equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..e7166beafce Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_heph.rsi/flipped-equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_heph.rsi/icon.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_heph.rsi/icon.png new file mode 100644 index 00000000000..f3ce2436e0e Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_heph.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_heph.rsi/icon_flipped.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_heph.rsi/icon_flipped.png new file mode 100644 index 00000000000..f3ce2436e0e Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_heph.rsi/icon_flipped.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_heph.rsi/meta.json b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_heph.rsi/meta.json new file mode 100644 index 00000000000..5fb2373c7cd --- /dev/null +++ b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_heph.rsi/meta.json @@ -0,0 +1,25 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Aurorastation at commit https://github.com/Aurorastation/Aurora.3/commit/a8759f3c77b61315df50ee86969799f5a0afe894", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "icon_flipped" + }, + { + "name": "equipped-INNERCLOTHING", + "directions": 4 + }, + { + "name": "flipped-equipped-INNERCLOTHING", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_idris.rsi/equipped-INNERCLOTHING.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_idris.rsi/equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..c7820e94cae Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_idris.rsi/equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_idris.rsi/flipped-equipped-INNERCLOTHING.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_idris.rsi/flipped-equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..cd9f3c5e60b Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_idris.rsi/flipped-equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_idris.rsi/icon.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_idris.rsi/icon.png new file mode 100644 index 00000000000..b732b87fff2 Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_idris.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_idris.rsi/icon_flipped.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_idris.rsi/icon_flipped.png new file mode 100644 index 00000000000..b732b87fff2 Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_idris.rsi/icon_flipped.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_idris.rsi/meta.json b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_idris.rsi/meta.json new file mode 100644 index 00000000000..5fb2373c7cd --- /dev/null +++ b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_idris.rsi/meta.json @@ -0,0 +1,25 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Aurorastation at commit https://github.com/Aurorastation/Aurora.3/commit/a8759f3c77b61315df50ee86969799f5a0afe894", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "icon_flipped" + }, + { + "name": "equipped-INNERCLOTHING", + "directions": 4 + }, + { + "name": "flipped-equipped-INNERCLOTHING", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_nt.rsi/equipped-INNERCLOTHING.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_nt.rsi/equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..88d44b1ae97 Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_nt.rsi/equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_nt.rsi/flipped-equipped-INNERCLOTHING.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_nt.rsi/flipped-equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..7376e70e15a Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_nt.rsi/flipped-equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_nt.rsi/icon.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_nt.rsi/icon.png new file mode 100644 index 00000000000..f1f520dcc66 Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_nt.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_nt.rsi/icon_flipped.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_nt.rsi/icon_flipped.png new file mode 100644 index 00000000000..f1f520dcc66 Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_nt.rsi/icon_flipped.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_nt.rsi/meta.json b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_nt.rsi/meta.json new file mode 100644 index 00000000000..5fb2373c7cd --- /dev/null +++ b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_nt.rsi/meta.json @@ -0,0 +1,25 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Aurorastation at commit https://github.com/Aurorastation/Aurora.3/commit/a8759f3c77b61315df50ee86969799f5a0afe894", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "icon_flipped" + }, + { + "name": "equipped-INNERCLOTHING", + "directions": 4 + }, + { + "name": "flipped-equipped-INNERCLOTHING", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_orion.rsi/equipped-INNERCLOTHING.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_orion.rsi/equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..b273c7e0842 Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_orion.rsi/equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_orion.rsi/flipped-equipped-INNERCLOTHING.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_orion.rsi/flipped-equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..a2ce4da9bd7 Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_orion.rsi/flipped-equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_orion.rsi/icon.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_orion.rsi/icon.png new file mode 100644 index 00000000000..256f82647f6 Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_orion.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_orion.rsi/icon_flipped.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_orion.rsi/icon_flipped.png new file mode 100644 index 00000000000..256f82647f6 Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_orion.rsi/icon_flipped.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_orion.rsi/meta.json b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_orion.rsi/meta.json new file mode 100644 index 00000000000..5fb2373c7cd --- /dev/null +++ b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_orion.rsi/meta.json @@ -0,0 +1,25 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Aurorastation at commit https://github.com/Aurorastation/Aurora.3/commit/a8759f3c77b61315df50ee86969799f5a0afe894", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "icon_flipped" + }, + { + "name": "equipped-INNERCLOTHING", + "directions": 4 + }, + { + "name": "flipped-equipped-INNERCLOTHING", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_pmcg.rsi/equipped-INNERCLOTHING.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_pmcg.rsi/equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..08aa1dca97a Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_pmcg.rsi/equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_pmcg.rsi/flipped-equipped-INNERCLOTHING.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_pmcg.rsi/flipped-equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..92abe6d4904 Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_pmcg.rsi/flipped-equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_pmcg.rsi/icon.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_pmcg.rsi/icon.png new file mode 100644 index 00000000000..a5b325ee0d3 Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_pmcg.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_pmcg.rsi/icon_flipped.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_pmcg.rsi/icon_flipped.png new file mode 100644 index 00000000000..a5b325ee0d3 Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_pmcg.rsi/icon_flipped.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_pmcg.rsi/meta.json b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_pmcg.rsi/meta.json new file mode 100644 index 00000000000..5fb2373c7cd --- /dev/null +++ b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_pmcg.rsi/meta.json @@ -0,0 +1,25 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Aurorastation at commit https://github.com/Aurorastation/Aurora.3/commit/a8759f3c77b61315df50ee86969799f5a0afe894", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "icon_flipped" + }, + { + "name": "equipped-INNERCLOTHING", + "directions": 4 + }, + { + "name": "flipped-equipped-INNERCLOTHING", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_zav.rsi/equipped-INNERCLOTHING.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_zav.rsi/equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..9fd318e746e Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_zav.rsi/equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_zav.rsi/flipped-equipped-INNERCLOTHING.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_zav.rsi/flipped-equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..423f85751af Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_zav.rsi/flipped-equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_zav.rsi/icon.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_zav.rsi/icon.png new file mode 100644 index 00000000000..02699cde786 Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_zav.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_zav.rsi/icon_flipped.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_zav.rsi/icon_flipped.png new file mode 100644 index 00000000000..02699cde786 Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_zav.rsi/icon_flipped.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_zav.rsi/meta.json b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_zav.rsi/meta.json new file mode 100644 index 00000000000..5fb2373c7cd --- /dev/null +++ b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_zav.rsi/meta.json @@ -0,0 +1,25 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Aurorastation at commit https://github.com/Aurorastation/Aurora.3/commit/a8759f3c77b61315df50ee86969799f5a0afe894", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "icon_flipped" + }, + { + "name": "equipped-INNERCLOTHING", + "directions": 4 + }, + { + "name": "flipped-equipped-INNERCLOTHING", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_zeng.rsi/equipped-INNERCLOTHING.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_zeng.rsi/equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..ec58f45df10 Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_zeng.rsi/equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_zeng.rsi/flipped-equipped-INNERCLOTHING.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_zeng.rsi/flipped-equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..33ab3d300d2 Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_zeng.rsi/flipped-equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_zeng.rsi/icon.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_zeng.rsi/icon.png new file mode 100644 index 00000000000..133890a5ae9 Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_zeng.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_zeng.rsi/icon_flipped.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_zeng.rsi/icon_flipped.png new file mode 100644 index 00000000000..133890a5ae9 Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_zeng.rsi/icon_flipped.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_zeng.rsi/meta.json b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_zeng.rsi/meta.json new file mode 100644 index 00000000000..5fb2373c7cd --- /dev/null +++ b/Resources/Textures/Clothing/Uniforms/Jumpsuit/librarian_zeng.rsi/meta.json @@ -0,0 +1,25 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Aurorastation at commit https://github.com/Aurorastation/Aurora.3/commit/a8759f3c77b61315df50ee86969799f5a0afe894", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "icon_flipped" + }, + { + "name": "equipped-INNERCLOTHING", + "directions": 4 + }, + { + "name": "flipped-equipped-INNERCLOTHING", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/security.rsi/equipped-INNERCLOTHING.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/security.rsi/equipped-INNERCLOTHING.png index b3977c97489..2fb771d84c3 100644 Binary files a/Resources/Textures/Clothing/Uniforms/Jumpsuit/security.rsi/equipped-INNERCLOTHING.png and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/security.rsi/equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/security.rsi/meta.json b/Resources/Textures/Clothing/Uniforms/Jumpsuit/security.rsi/meta.json index 3f72fb44600..c11c48fe747 100644 --- a/Resources/Textures/Clothing/Uniforms/Jumpsuit/security.rsi/meta.json +++ b/Resources/Textures/Clothing/Uniforms/Jumpsuit/security.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/c838ba21dae97db345e0113f99596decd1d66039. In hand sprite scaled down by potato1234_x, monkey made by brainfood1183 (github) for ss14", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/c838ba21dae97db345e0113f99596decd1d66039. In hand sprite scaled down by potato1234_x, monkey made by brainfood1183 (github) for ss14. equipped-INNERCLOTHING edited by Dutch-VanDerLinde (github).", "size": { "x": 32, "y": 32 diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/senior_officer.rsi/meta.json b/Resources/Textures/Clothing/Uniforms/Jumpsuit/senior_officer.rsi/meta.json index 913d9408814..bfad46e1841 100644 --- a/Resources/Textures/Clothing/Uniforms/Jumpsuit/senior_officer.rsi/meta.json +++ b/Resources/Textures/Clothing/Uniforms/Jumpsuit/senior_officer.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Edit by Nairodian (github) of secred_s taken from tgstation at pull request https://github.com/tgstation/tgstation/pull/2984", + "copyright": "Edit by Nairodian (github) of secred_s taken from tgstation at pull request https://github.com/tgstation/tgstation/pull/2984, jumpskirt sprite made by Flareguy and edited by Dutch-VanDerLinde.", "size": { "x": 32, "y": 32 diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/senior_physician.rsi/equipped-INNERCLOTHING-monkey.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/senior_physician.rsi/equipped-INNERCLOTHING-monkey.png index 5248c1b09f2..1c5fc823ebd 100644 Binary files a/Resources/Textures/Clothing/Uniforms/Jumpsuit/senior_physician.rsi/equipped-INNERCLOTHING-monkey.png and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/senior_physician.rsi/equipped-INNERCLOTHING-monkey.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/senior_physician.rsi/equipped-INNERCLOTHING.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/senior_physician.rsi/equipped-INNERCLOTHING.png index f67f3c67bf0..3e68439c786 100644 Binary files a/Resources/Textures/Clothing/Uniforms/Jumpsuit/senior_physician.rsi/equipped-INNERCLOTHING.png and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/senior_physician.rsi/equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/senior_physician.rsi/icon.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/senior_physician.rsi/icon.png index d5d956c4e51..7a4e5b493fd 100644 Binary files a/Resources/Textures/Clothing/Uniforms/Jumpsuit/senior_physician.rsi/icon.png and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/senior_physician.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/senior_physician.rsi/inhand-left.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/senior_physician.rsi/inhand-left.png index e0b2d4759be..4381a0172be 100644 Binary files a/Resources/Textures/Clothing/Uniforms/Jumpsuit/senior_physician.rsi/inhand-left.png and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/senior_physician.rsi/inhand-left.png differ diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/senior_physician.rsi/inhand-right.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/senior_physician.rsi/inhand-right.png index a2ecc2b551d..3855dc44e1b 100644 Binary files a/Resources/Textures/Clothing/Uniforms/Jumpsuit/senior_physician.rsi/inhand-right.png and b/Resources/Textures/Clothing/Uniforms/Jumpsuit/senior_physician.rsi/inhand-right.png differ diff --git a/Resources/Textures/DeltaV/Objects/Devices/cartridge.rsi/cart-mail.png b/Resources/Textures/DeltaV/Objects/Devices/cartridge.rsi/cart-mail.png new file mode 100644 index 00000000000..5734abb6fd1 Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Devices/cartridge.rsi/cart-mail.png differ diff --git a/Resources/Textures/DeltaV/Objects/Devices/cartridge.rsi/meta.json b/Resources/Textures/DeltaV/Objects/Devices/cartridge.rsi/meta.json index 293870d3a3b..4a4ba3352f8 100644 --- a/Resources/Textures/DeltaV/Objects/Devices/cartridge.rsi/meta.json +++ b/Resources/Textures/DeltaV/Objects/Devices/cartridge.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Timfa", + "copyright": "Timfa, plus edits by portfiend", "size": { "x": 32, "y": 32 @@ -9,6 +9,9 @@ "states": [ { "name": "cart-cri" + }, + { + "name": "cart-mail" } ] -} \ No newline at end of file +} diff --git a/Resources/Textures/DeltaV/Objects/Specific/Justice/gavel.rsi/inhand-left.png b/Resources/Textures/DeltaV/Objects/Specific/Justice/gavel.rsi/inhand-left.png new file mode 100644 index 00000000000..a41d27bcc71 Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Specific/Justice/gavel.rsi/inhand-left.png differ diff --git a/Resources/Textures/DeltaV/Objects/Specific/Justice/gavel.rsi/meta.json b/Resources/Textures/DeltaV/Objects/Specific/Justice/gavel.rsi/meta.json index 9f8e549faad..39ff0ed9d9b 100644 --- a/Resources/Textures/DeltaV/Objects/Specific/Justice/gavel.rsi/meta.json +++ b/Resources/Textures/DeltaV/Objects/Specific/Justice/gavel.rsi/meta.json @@ -10,6 +10,10 @@ { "name": "icon" }, + { + "name": "inhand-left", + "directions": 4 + }, { "name": "inhand-right", "directions": 4 diff --git a/Resources/Textures/Effects/creampie.rsi/creampie_vox.png b/Resources/Textures/Effects/creampie.rsi/creampie_vox.png new file mode 100644 index 00000000000..dfe199b0c86 Binary files /dev/null and b/Resources/Textures/Effects/creampie.rsi/creampie_vox.png differ diff --git a/Resources/Textures/Effects/creampie.rsi/meta.json b/Resources/Textures/Effects/creampie.rsi/meta.json index 54e0cc73c2b..8db8a77945c 100644 --- a/Resources/Textures/Effects/creampie.rsi/meta.json +++ b/Resources/Textures/Effects/creampie.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from https://github.com/tgstation/tgstation at 0d9c9a8233dfc3fc55edc538955a761a6328bee0. creampie_moth by MilenVolf, creampie_arachnid by PixelTheKermit (Github)", + "copyright": "Taken from https://github.com/tgstation/tgstation at 0d9c9a8233dfc3fc55edc538955a761a6328bee0. creampie_moth by MilenVolf, creampie_arachnid by PixelTheKermit (Github), creampie_vox by Errant", "size": { "x": 32, "y": 32 @@ -66,6 +66,10 @@ "name": "creampie_standborg", "directions": 4 }, + { + "name": "creampie_vox", + "directions": 4 + }, { "name": "creampie_xeno_crit" }, diff --git a/Resources/Textures/Effects/footprints.rsi/dragging-1.png b/Resources/Textures/Effects/footprints.rsi/dragging-1.png new file mode 100644 index 00000000000..74d2aeb0743 Binary files /dev/null and b/Resources/Textures/Effects/footprints.rsi/dragging-1.png differ diff --git a/Resources/Textures/Effects/footprints.rsi/dragging-2.png b/Resources/Textures/Effects/footprints.rsi/dragging-2.png new file mode 100644 index 00000000000..cc45f4f8ae8 Binary files /dev/null and b/Resources/Textures/Effects/footprints.rsi/dragging-2.png differ diff --git a/Resources/Textures/Effects/footprints.rsi/dragging-3.png b/Resources/Textures/Effects/footprints.rsi/dragging-3.png new file mode 100644 index 00000000000..d0f7274dd3c Binary files /dev/null and b/Resources/Textures/Effects/footprints.rsi/dragging-3.png differ diff --git a/Resources/Textures/Effects/footprints.rsi/dragging-4.png b/Resources/Textures/Effects/footprints.rsi/dragging-4.png new file mode 100644 index 00000000000..5eb34b5d570 Binary files /dev/null and b/Resources/Textures/Effects/footprints.rsi/dragging-4.png differ diff --git a/Resources/Textures/Effects/footprints.rsi/dragging-5.png b/Resources/Textures/Effects/footprints.rsi/dragging-5.png new file mode 100644 index 00000000000..6b1b34d1456 Binary files /dev/null and b/Resources/Textures/Effects/footprints.rsi/dragging-5.png differ diff --git a/Resources/Textures/Effects/footprints.rsi/dragging-test.png b/Resources/Textures/Effects/footprints.rsi/dragging-test.png new file mode 100644 index 00000000000..b8c9ba50a7d Binary files /dev/null and b/Resources/Textures/Effects/footprints.rsi/dragging-test.png differ diff --git a/Resources/Textures/Effects/footprints.rsi/footprint-left-bare-diona.png b/Resources/Textures/Effects/footprints.rsi/footprint-left-bare-diona.png new file mode 100644 index 00000000000..fa40e0f2977 Binary files /dev/null and b/Resources/Textures/Effects/footprints.rsi/footprint-left-bare-diona.png differ diff --git a/Resources/Textures/Effects/footprints.rsi/footprint-left-bare-dwarf.png b/Resources/Textures/Effects/footprints.rsi/footprint-left-bare-dwarf.png new file mode 100644 index 00000000000..43b88aa1646 Binary files /dev/null and b/Resources/Textures/Effects/footprints.rsi/footprint-left-bare-dwarf.png differ diff --git a/Resources/Textures/Effects/footprints.rsi/footprint-left-bare-human.png b/Resources/Textures/Effects/footprints.rsi/footprint-left-bare-human.png new file mode 100644 index 00000000000..f7ab3257c58 Binary files /dev/null and b/Resources/Textures/Effects/footprints.rsi/footprint-left-bare-human.png differ diff --git a/Resources/Textures/Effects/footprints.rsi/footprint-left-bare-lizard.png b/Resources/Textures/Effects/footprints.rsi/footprint-left-bare-lizard.png new file mode 100644 index 00000000000..e53ba99227e Binary files /dev/null and b/Resources/Textures/Effects/footprints.rsi/footprint-left-bare-lizard.png differ diff --git a/Resources/Textures/Effects/footprints.rsi/footprint-left-bare-slime.png b/Resources/Textures/Effects/footprints.rsi/footprint-left-bare-slime.png new file mode 100644 index 00000000000..87561cb1619 Binary files /dev/null and b/Resources/Textures/Effects/footprints.rsi/footprint-left-bare-slime.png differ diff --git a/Resources/Textures/Effects/footprints.rsi/footprint-left-bare-spider.png b/Resources/Textures/Effects/footprints.rsi/footprint-left-bare-spider.png new file mode 100644 index 00000000000..4939e72c4b5 Binary files /dev/null and b/Resources/Textures/Effects/footprints.rsi/footprint-left-bare-spider.png differ diff --git a/Resources/Textures/Effects/footprints.rsi/footprint-right-bare-diona.png b/Resources/Textures/Effects/footprints.rsi/footprint-right-bare-diona.png new file mode 100644 index 00000000000..21f3a117741 Binary files /dev/null and b/Resources/Textures/Effects/footprints.rsi/footprint-right-bare-diona.png differ diff --git a/Resources/Textures/Effects/footprints.rsi/footprint-right-bare-dwarf.png b/Resources/Textures/Effects/footprints.rsi/footprint-right-bare-dwarf.png new file mode 100644 index 00000000000..e493ddbdf6a Binary files /dev/null and b/Resources/Textures/Effects/footprints.rsi/footprint-right-bare-dwarf.png differ diff --git a/Resources/Textures/Effects/footprints.rsi/footprint-right-bare-human.png b/Resources/Textures/Effects/footprints.rsi/footprint-right-bare-human.png new file mode 100644 index 00000000000..4de70b5c1ea Binary files /dev/null and b/Resources/Textures/Effects/footprints.rsi/footprint-right-bare-human.png differ diff --git a/Resources/Textures/Effects/footprints.rsi/footprint-right-bare-lizard.png b/Resources/Textures/Effects/footprints.rsi/footprint-right-bare-lizard.png new file mode 100644 index 00000000000..e53ba99227e Binary files /dev/null and b/Resources/Textures/Effects/footprints.rsi/footprint-right-bare-lizard.png differ diff --git a/Resources/Textures/Effects/footprints.rsi/footprint-right-bare-slime.png b/Resources/Textures/Effects/footprints.rsi/footprint-right-bare-slime.png new file mode 100644 index 00000000000..c10fe24f0b0 Binary files /dev/null and b/Resources/Textures/Effects/footprints.rsi/footprint-right-bare-slime.png differ diff --git a/Resources/Textures/Effects/footprints.rsi/footprint-right-bare-spider.png b/Resources/Textures/Effects/footprints.rsi/footprint-right-bare-spider.png new file mode 100644 index 00000000000..e9f3a88776c Binary files /dev/null and b/Resources/Textures/Effects/footprints.rsi/footprint-right-bare-spider.png differ diff --git a/Resources/Textures/Effects/footprints.rsi/footprint-shoes.png b/Resources/Textures/Effects/footprints.rsi/footprint-shoes.png new file mode 100644 index 00000000000..6cf329a9b6f Binary files /dev/null and b/Resources/Textures/Effects/footprints.rsi/footprint-shoes.png differ diff --git a/Resources/Textures/Effects/footprints.rsi/footprint-suit.png b/Resources/Textures/Effects/footprints.rsi/footprint-suit.png new file mode 100644 index 00000000000..6bc32d343c7 Binary files /dev/null and b/Resources/Textures/Effects/footprints.rsi/footprint-suit.png differ diff --git a/Resources/Textures/Effects/footprints.rsi/meta.json b/Resources/Textures/Effects/footprints.rsi/meta.json new file mode 100644 index 00000000000..0ce2e096ac5 --- /dev/null +++ b/Resources/Textures/Effects/footprints.rsi/meta.json @@ -0,0 +1,71 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "IMPERIAL SPACE", + "states": [ + { + "name": "footprint-left-bare-diona" + }, + { + "name": "footprint-left-bare-dwarf" + }, + { + "name": "footprint-left-bare-human" + }, + { + "name": "footprint-left-bare-lizard" + }, + { + "name": "footprint-left-bare-slime" + }, + { + "name": "footprint-left-bare-spider" + }, + { + "name": "footprint-right-bare-diona" + }, + { + "name": "footprint-right-bare-dwarf" + }, + { + "name": "footprint-right-bare-human" + }, + { + "name": "footprint-right-bare-lizard" + }, + { + "name": "footprint-right-bare-slime" + }, + { + "name": "footprint-right-bare-spider" + }, + { + "name": "footprint-shoes" + }, + { + "name": "footprint-suit" + }, + { + "name": "dragging-1" + }, + { + "name": "dragging-2" + }, + { + "name": "dragging-3" + }, + { + "name": "dragging-4" + }, + { + "name": "dragging-5" + }, + { + "name": "dragging-test" + } + ] +} diff --git a/Resources/Textures/Interface/Actions/psionics.rsi/healing_word.png b/Resources/Textures/Interface/Actions/psionics.rsi/healing_word.png new file mode 100644 index 00000000000..800e2a46e61 Binary files /dev/null and b/Resources/Textures/Interface/Actions/psionics.rsi/healing_word.png differ diff --git a/Resources/Textures/Interface/Actions/psionics.rsi/meta.json b/Resources/Textures/Interface/Actions/psionics.rsi/meta.json new file mode 100644 index 00000000000..735bc293d15 --- /dev/null +++ b/Resources/Textures/Interface/Actions/psionics.rsi/meta.json @@ -0,0 +1,35 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "healing_word, revivify, shadeskip by leonardo_dabepis (discord), telekinetic_pulse by .mocho (discord), pyrokinetic_flare, summon_remilia, summon_bat and summon_imp by ghost581 (discord)", + "size": { + "x": 64, + "y": 64 + }, + "states": [ + { + "name": "healing_word" + }, + { + "name": "revivify" + }, + { + "name": "shadeskip" + }, + { + "name": "telekinetic_pulse" + }, + { + "name": "pyrokinetic_flare" + }, + { + "name": "summon_imp" + }, + { + "name": "summon_remilia" + }, + { + "name": "summon_bat" + } + ] +} diff --git a/Resources/Textures/Interface/Actions/psionics.rsi/pyrokinetic_flare.png b/Resources/Textures/Interface/Actions/psionics.rsi/pyrokinetic_flare.png new file mode 100644 index 00000000000..db728ec603c Binary files /dev/null and b/Resources/Textures/Interface/Actions/psionics.rsi/pyrokinetic_flare.png differ diff --git a/Resources/Textures/Interface/Actions/psionics.rsi/revivify.png b/Resources/Textures/Interface/Actions/psionics.rsi/revivify.png new file mode 100644 index 00000000000..087f40b4c98 Binary files /dev/null and b/Resources/Textures/Interface/Actions/psionics.rsi/revivify.png differ diff --git a/Resources/Textures/Interface/Actions/psionics.rsi/shadeskip.png b/Resources/Textures/Interface/Actions/psionics.rsi/shadeskip.png new file mode 100644 index 00000000000..81144773723 Binary files /dev/null and b/Resources/Textures/Interface/Actions/psionics.rsi/shadeskip.png differ diff --git a/Resources/Textures/Interface/Actions/psionics.rsi/summon_bat.png b/Resources/Textures/Interface/Actions/psionics.rsi/summon_bat.png new file mode 100644 index 00000000000..60f571278b9 Binary files /dev/null and b/Resources/Textures/Interface/Actions/psionics.rsi/summon_bat.png differ diff --git a/Resources/Textures/Interface/Actions/psionics.rsi/summon_imp.png b/Resources/Textures/Interface/Actions/psionics.rsi/summon_imp.png new file mode 100644 index 00000000000..5de7c274fc1 Binary files /dev/null and b/Resources/Textures/Interface/Actions/psionics.rsi/summon_imp.png differ diff --git a/Resources/Textures/Interface/Actions/psionics.rsi/summon_remilia.png b/Resources/Textures/Interface/Actions/psionics.rsi/summon_remilia.png new file mode 100644 index 00000000000..fcfe2a37265 Binary files /dev/null and b/Resources/Textures/Interface/Actions/psionics.rsi/summon_remilia.png differ diff --git a/Resources/Textures/Interface/Actions/psionics.rsi/telekinetic_pulse.png b/Resources/Textures/Interface/Actions/psionics.rsi/telekinetic_pulse.png new file mode 100644 index 00000000000..7c690a6adb6 Binary files /dev/null and b/Resources/Textures/Interface/Actions/psionics.rsi/telekinetic_pulse.png differ diff --git a/Resources/Textures/Interface/Actions/shadowkin_icons.rsi/darkswap.png b/Resources/Textures/Interface/Actions/shadowkin_icons.rsi/darkswap.png new file mode 100644 index 00000000000..3c2815e8c24 Binary files /dev/null and b/Resources/Textures/Interface/Actions/shadowkin_icons.rsi/darkswap.png differ diff --git a/Resources/Textures/Interface/Actions/shadowkin_icons.rsi/meta.json b/Resources/Textures/Interface/Actions/shadowkin_icons.rsi/meta.json new file mode 100644 index 00000000000..62b03fecafc --- /dev/null +++ b/Resources/Textures/Interface/Actions/shadowkin_icons.rsi/meta.json @@ -0,0 +1,23 @@ +{ + "version": 1, + "size": { + "x": 64, + "y": 64 + }, + "license": "CC-BY-SA-3.0", + "copyright": "DEATHB4DEFEAT#4404 (801294818839756811)", + "states": [ + { + "name": "darkswap", + "directions": 1 + }, + { + "name": "rest", + "directions": 1 + }, + { + "name": "shadeskip", + "directions": 1 + } + ] +} diff --git a/Resources/Textures/Interface/Actions/shadowkin_icons.rsi/rest.png b/Resources/Textures/Interface/Actions/shadowkin_icons.rsi/rest.png new file mode 100644 index 00000000000..188b4ec5911 Binary files /dev/null and b/Resources/Textures/Interface/Actions/shadowkin_icons.rsi/rest.png differ diff --git a/Resources/Textures/Interface/Actions/shadowkin_icons.rsi/shadeskip.png b/Resources/Textures/Interface/Actions/shadowkin_icons.rsi/shadeskip.png new file mode 100644 index 00000000000..b0f1bd8dc8c Binary files /dev/null and b/Resources/Textures/Interface/Actions/shadowkin_icons.rsi/shadeskip.png differ diff --git a/Resources/Textures/Interface/Alerts/deflecting.rsi/deflecting0.png b/Resources/Textures/Interface/Alerts/deflecting.rsi/deflecting0.png new file mode 100644 index 00000000000..37404e77f76 Binary files /dev/null and b/Resources/Textures/Interface/Alerts/deflecting.rsi/deflecting0.png differ diff --git a/Resources/Textures/Interface/Alerts/deflecting.rsi/meta.json b/Resources/Textures/Interface/Alerts/deflecting.rsi/meta.json new file mode 100644 index 00000000000..f5d94c891a7 --- /dev/null +++ b/Resources/Textures/Interface/Alerts/deflecting.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Deflecting icon by Ubaser", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "deflecting0" + } + ] +} diff --git a/Resources/Textures/Interface/Alerts/shadowkin_power.rsi/meta.json b/Resources/Textures/Interface/Alerts/shadowkin_power.rsi/meta.json new file mode 100644 index 00000000000..f642565f9ab --- /dev/null +++ b/Resources/Textures/Interface/Alerts/shadowkin_power.rsi/meta.json @@ -0,0 +1,43 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "DEATHB4DEFEAT#4404 (801294818839756811)", + "states": [ + { + "name": "power0", + "delays": [[0.8, 0.8, 0.8, 0.8, 0.8, 0.8]] + }, + { + "name": "power1", + "delays": [[0.7, 0.7, 0.7, 0.7, 0.7, 0.7]] + }, + { + "name": "power2", + "delays": [[0.6, 0.6, 0.6, 0.6, 0.6, 0.6]] + }, + { + "name": "power3", + "delays": [[0.5, 0.5, 0.5, 0.5, 0.5, 0.5]] + }, + { + "name": "power4", + "delays": [[0.4, 0.4, 0.4, 0.4, 0.4, 0.4]] + }, + { + "name": "power5", + "delays": [[0.3, 0.3, 0.3, 0.3, 0.3, 0.3]] + }, + { + "name": "power6", + "delays": [[0.2, 0.2, 0.2, 0.2, 0.2, 0.2]] + }, + { + "name": "power7", + "delays": [[0.1, 0.1, 0.1, 0.1, 0.1, 0.1]] + } + ] +} diff --git a/Resources/Textures/Interface/Alerts/shadowkin_power.rsi/power0.png b/Resources/Textures/Interface/Alerts/shadowkin_power.rsi/power0.png new file mode 100644 index 00000000000..ab370f753ed Binary files /dev/null and b/Resources/Textures/Interface/Alerts/shadowkin_power.rsi/power0.png differ diff --git a/Resources/Textures/Interface/Alerts/shadowkin_power.rsi/power1.png b/Resources/Textures/Interface/Alerts/shadowkin_power.rsi/power1.png new file mode 100644 index 00000000000..d72965eeec8 Binary files /dev/null and b/Resources/Textures/Interface/Alerts/shadowkin_power.rsi/power1.png differ diff --git a/Resources/Textures/Interface/Alerts/shadowkin_power.rsi/power2.png b/Resources/Textures/Interface/Alerts/shadowkin_power.rsi/power2.png new file mode 100644 index 00000000000..1b2c51575c7 Binary files /dev/null and b/Resources/Textures/Interface/Alerts/shadowkin_power.rsi/power2.png differ diff --git a/Resources/Textures/Interface/Alerts/shadowkin_power.rsi/power3.png b/Resources/Textures/Interface/Alerts/shadowkin_power.rsi/power3.png new file mode 100644 index 00000000000..0f93f925ac2 Binary files /dev/null and b/Resources/Textures/Interface/Alerts/shadowkin_power.rsi/power3.png differ diff --git a/Resources/Textures/Interface/Alerts/shadowkin_power.rsi/power4.png b/Resources/Textures/Interface/Alerts/shadowkin_power.rsi/power4.png new file mode 100644 index 00000000000..3f3035da0df Binary files /dev/null and b/Resources/Textures/Interface/Alerts/shadowkin_power.rsi/power4.png differ diff --git a/Resources/Textures/Interface/Alerts/shadowkin_power.rsi/power5.png b/Resources/Textures/Interface/Alerts/shadowkin_power.rsi/power5.png new file mode 100644 index 00000000000..af3f7168618 Binary files /dev/null and b/Resources/Textures/Interface/Alerts/shadowkin_power.rsi/power5.png differ diff --git a/Resources/Textures/Interface/Alerts/shadowkin_power.rsi/power6.png b/Resources/Textures/Interface/Alerts/shadowkin_power.rsi/power6.png new file mode 100644 index 00000000000..9f7957c44f2 Binary files /dev/null and b/Resources/Textures/Interface/Alerts/shadowkin_power.rsi/power6.png differ diff --git a/Resources/Textures/Interface/Alerts/shadowkin_power.rsi/power7.png b/Resources/Textures/Interface/Alerts/shadowkin_power.rsi/power7.png new file mode 100644 index 00000000000..ac9f17f55bf Binary files /dev/null and b/Resources/Textures/Interface/Alerts/shadowkin_power.rsi/power7.png differ diff --git a/Resources/Textures/Interface/Ashen/item_status_left.png b/Resources/Textures/Interface/Ashen/item_status_left.png new file mode 100644 index 00000000000..fb2bf2b9b4a Binary files /dev/null and b/Resources/Textures/Interface/Ashen/item_status_left.png differ diff --git a/Resources/Textures/Interface/Ashen/item_status_left_highlight.png b/Resources/Textures/Interface/Ashen/item_status_left_highlight.png new file mode 100644 index 00000000000..91cd15dd4cf Binary files /dev/null and b/Resources/Textures/Interface/Ashen/item_status_left_highlight.png differ diff --git a/Resources/Textures/Interface/Ashen/item_status_right.png b/Resources/Textures/Interface/Ashen/item_status_right.png new file mode 100644 index 00000000000..53f4f362d0a Binary files /dev/null and b/Resources/Textures/Interface/Ashen/item_status_right.png differ diff --git a/Resources/Textures/Interface/Ashen/item_status_right_highlight.png b/Resources/Textures/Interface/Ashen/item_status_right_highlight.png new file mode 100644 index 00000000000..ad16bab6d10 Binary files /dev/null and b/Resources/Textures/Interface/Ashen/item_status_right_highlight.png differ diff --git a/Resources/Textures/Interface/Ashen/template_small.png b/Resources/Textures/Interface/Ashen/template_small.png new file mode 100644 index 00000000000..f3a4379f76c Binary files /dev/null and b/Resources/Textures/Interface/Ashen/template_small.png differ diff --git a/Resources/Textures/Interface/AtmosMonitoring/status_bg.png b/Resources/Textures/Interface/AtmosMonitoring/status_bg.png new file mode 100644 index 00000000000..165a9b9d9f1 Binary files /dev/null and b/Resources/Textures/Interface/AtmosMonitoring/status_bg.png differ diff --git a/Resources/Textures/Interface/Clockwork/item_status_left.png b/Resources/Textures/Interface/Clockwork/item_status_left.png new file mode 100644 index 00000000000..1ce950362d2 Binary files /dev/null and b/Resources/Textures/Interface/Clockwork/item_status_left.png differ diff --git a/Resources/Textures/Interface/Clockwork/item_status_left_highlight.png b/Resources/Textures/Interface/Clockwork/item_status_left_highlight.png new file mode 100644 index 00000000000..f715e062765 Binary files /dev/null and b/Resources/Textures/Interface/Clockwork/item_status_left_highlight.png differ diff --git a/Resources/Textures/Interface/Clockwork/item_status_right.png b/Resources/Textures/Interface/Clockwork/item_status_right.png new file mode 100644 index 00000000000..5ea5ffcffad Binary files /dev/null and b/Resources/Textures/Interface/Clockwork/item_status_right.png differ diff --git a/Resources/Textures/Interface/Clockwork/item_status_right_highlight.png b/Resources/Textures/Interface/Clockwork/item_status_right_highlight.png new file mode 100644 index 00000000000..315d595c925 Binary files /dev/null and b/Resources/Textures/Interface/Clockwork/item_status_right_highlight.png differ diff --git a/Resources/Textures/Interface/Default/item_status_left.png b/Resources/Textures/Interface/Default/item_status_left.png new file mode 100644 index 00000000000..6c980f226ec Binary files /dev/null and b/Resources/Textures/Interface/Default/item_status_left.png differ diff --git a/Resources/Textures/Interface/Default/item_status_left_highlight.png b/Resources/Textures/Interface/Default/item_status_left_highlight.png new file mode 100644 index 00000000000..87dea5cf100 Binary files /dev/null and b/Resources/Textures/Interface/Default/item_status_left_highlight.png differ diff --git a/Resources/Textures/Interface/Default/item_status_right.png b/Resources/Textures/Interface/Default/item_status_right.png new file mode 100644 index 00000000000..82ad44b48c1 Binary files /dev/null and b/Resources/Textures/Interface/Default/item_status_right.png differ diff --git a/Resources/Textures/Interface/Default/item_status_right_highlight.png b/Resources/Textures/Interface/Default/item_status_right_highlight.png new file mode 100644 index 00000000000..0c1c3448486 Binary files /dev/null and b/Resources/Textures/Interface/Default/item_status_right_highlight.png differ diff --git a/Resources/Textures/Interface/Emotes/attributions.yml b/Resources/Textures/Interface/Emotes/attributions.yml new file mode 100644 index 00000000000..125651e4194 --- /dev/null +++ b/Resources/Textures/Interface/Emotes/attributions.yml @@ -0,0 +1,117 @@ +# Attempted to keep the files in alphabetical order so its easier to audit. +# Finding individual authors is an unfeasible task. If you can reference the author please do so. + +- files: ["beep.png"] + license: "CC-BY-SA-3.0" + copyright: "Modified from borg_chest.png and borg_head.png by TyAshley (AllenTheGreat)" + source: "https://github.com/TyAshley" + +- files: ["buzz.png"] + license: "CC-BY-SA-3.0" + copyright: "Modified from existing bee texture (0.png) by TyAshley (AllenTheGreat)" + source: "https://github.com/TyAshley" + +- files: ["buzztwo.png"] + license: "CC-BY-SA-3.0" + copyright: "Modified from existing bee texture (0.png) by TyAshley (AllenTheGreat)" + source: "https://github.com/TyAshley" + +- files: ["chime.png"] + license: "CC-BY-SA-3.0" + copyright: "Modified from existing desk bell texture (normal.png) by TyAshley (AllenTheGreat)" + source: "https://github.com/TyAshley" + +- files: ["chirp.png"] + license: "CC-BY-SA-3.0" + copyright: "Modified from existing nymph texture (icon.png) by TyAshley (AllenTheGreat)" + source: "https://github.com/TyAshley" + +- files: ["chitter.png"] + license: "CC-BY-SA-3.0" + copyright: "Modified from mothroach.png by TyAshley (AllenTheGreat)" + source: "https://github.com/TyAshley" + +- files: ["clap.png"] + license: "CC-BY-SA-3.0" + copyright: "Created by TyAshley (AllenTheGreat) at commit 7f6c7cd82943dbc9a1fe8a79d6a924ac600b3fdb" + source: "https://github.com/TyAshley" + +- files: ["click.png"] + license: "CC-BY-SA-3.0" + copyright: "Modified from existing crab.png by TyAshley (AllenTheGreat)" + source: "https://github.com/TyAshley" + +- files: ["cough.png"] + license: "CC-BY-SA-3.0" + copyright: "Created by TyAshley (AllenTheGreat) at commit 7f6c7cd82943dbc9a1fe8a79d6a924ac600b3fdb" + source: "https://github.com/TyAshley" + +- files: ["cry.png"] + license: "CC-BY-SA-3.0" + copyright: "Modified from scream.png by TyAshley (AllenTheGreat)" + source: "https://github.com/TyAshley" + +- files: ["deathgasp.png"] + license: "CC-BY-SA-3.0" + copyright: "Modified from scream.png by TyAshley (AllenTheGreat)" + source: "https://github.com/TyAshley" + +- files: ["honk.png"] + license: "CC-BY-SA-3.0" + copyright: "Modified from existing bikehorn texture (icon.png) by TyAshley (AllenTheGreat)" + source: "https://github.com/TyAshley" + +- files: ["laugh.png"] + license: "CC-BY-SA-3.0" + copyright: "Modified from scream.png by TyAshley (AllenTheGreat)" + source: "https://github.com/TyAshley" + +- files: ["ping.png"] + license: "CC-BY-SA-3.0" + copyright: "Created by TyAshley (AllenTheGreat) at commit 7f6c7cd82943dbc9a1fe8a79d6a924ac600b3fdb" + source: "https://github.com/TyAshley" + +- files: ["salute.png"] + license: "CC-BY-SA-3.0" + copyright: "Modified from scream.png by TyAshley (AllenTheGreat)" + source: "https://github.com/TyAshley" + +- files: ["sigh.png"] + license: "CC-BY-SA-3.0" + copyright: "Created by TyAshley (AllenTheGreat) at commit 7f6c7cd82943dbc9a1fe8a79d6a924ac600b3fdb" + source: "https://github.com/TyAshley" + +- files: ["snap.png"] + license: "CC-BY-SA-3.0" + copyright: "Created by TyAshley (AllenTheGreat) at commit 7f6c7cd82943dbc9a1fe8a79d6a924ac600b3fdb" + source: "https://github.com/TyAshley" + +- files: ["squeak.png"] + license: "CC-BY-SA-3.0" + copyright: "Modified from mouse-0.png by TyAshley (AllenTheGreat)" + source: "https://github.com/TyAshley" + +- files: ["squish.png"] + license: "CC-BY-SA-3.0" + copyright: "Modified from blue_adult_slime.png by TyAshley (AllenTheGreat)" + source: "https://github.com/TyAshley" + +- files: ["vocal.png"] + license: "CC-BY-SA-3.0" + copyright: "Created by TyAshley (AllenTheGreat) at commit 7f6c7cd82943dbc9a1fe8a79d6a924ac600b3fdb" + source: "https://github.com/TyAshley" + +- files: ["weh.png"] + license: "CC-BY-SA-3.0" + copyright: "Modified from plushie_lizard.png by TyAshley (AllenTheGreat)" + source: "https://github.com/TyAshley" + +- files: ["whistle.png"] + license: "CC-BY-SA-3.0" + copyright: "Modified from scream.png by TyAshley (AllenTheGreat)" + source: "https://github.com/TyAshley" + +- files: ["yawn.png"] + license: "CC-BY-SA-3.0" + copyright: "Created by TyAshley (AllenTheGreat) at commit 7f6c7cd82943dbc9a1fe8a79d6a924ac600b3fdb" + source: "https://github.com/TyAshley" diff --git a/Resources/Textures/Interface/Emotes/beep.png b/Resources/Textures/Interface/Emotes/beep.png new file mode 100644 index 00000000000..f59b0925ab5 Binary files /dev/null and b/Resources/Textures/Interface/Emotes/beep.png differ diff --git a/Resources/Textures/Interface/Emotes/buzz.png b/Resources/Textures/Interface/Emotes/buzz.png new file mode 100644 index 00000000000..da7ac363a47 Binary files /dev/null and b/Resources/Textures/Interface/Emotes/buzz.png differ diff --git a/Resources/Textures/Interface/Emotes/buzztwo.png b/Resources/Textures/Interface/Emotes/buzztwo.png new file mode 100644 index 00000000000..460a8868a52 Binary files /dev/null and b/Resources/Textures/Interface/Emotes/buzztwo.png differ diff --git a/Resources/Textures/Interface/Emotes/chime.png b/Resources/Textures/Interface/Emotes/chime.png new file mode 100644 index 00000000000..ca595be5d3b Binary files /dev/null and b/Resources/Textures/Interface/Emotes/chime.png differ diff --git a/Resources/Textures/Interface/Emotes/chirp.png b/Resources/Textures/Interface/Emotes/chirp.png new file mode 100644 index 00000000000..57e8b671439 Binary files /dev/null and b/Resources/Textures/Interface/Emotes/chirp.png differ diff --git a/Resources/Textures/Interface/Emotes/chitter.png b/Resources/Textures/Interface/Emotes/chitter.png new file mode 100644 index 00000000000..f6e11012237 Binary files /dev/null and b/Resources/Textures/Interface/Emotes/chitter.png differ diff --git a/Resources/Textures/Interface/Emotes/clap.png b/Resources/Textures/Interface/Emotes/clap.png new file mode 100644 index 00000000000..a0ef9e1316a Binary files /dev/null and b/Resources/Textures/Interface/Emotes/clap.png differ diff --git a/Resources/Textures/Interface/Emotes/click.png b/Resources/Textures/Interface/Emotes/click.png new file mode 100644 index 00000000000..539aea7b928 Binary files /dev/null and b/Resources/Textures/Interface/Emotes/click.png differ diff --git a/Resources/Textures/Interface/Emotes/cough.png b/Resources/Textures/Interface/Emotes/cough.png new file mode 100644 index 00000000000..cb1c2832acc Binary files /dev/null and b/Resources/Textures/Interface/Emotes/cough.png differ diff --git a/Resources/Textures/Interface/Emotes/cry.png b/Resources/Textures/Interface/Emotes/cry.png new file mode 100644 index 00000000000..2793a11b9dc Binary files /dev/null and b/Resources/Textures/Interface/Emotes/cry.png differ diff --git a/Resources/Textures/Interface/Emotes/deathgasp.png b/Resources/Textures/Interface/Emotes/deathgasp.png new file mode 100644 index 00000000000..e27d0bb5734 Binary files /dev/null and b/Resources/Textures/Interface/Emotes/deathgasp.png differ diff --git a/Resources/Textures/Interface/Emotes/honk.png b/Resources/Textures/Interface/Emotes/honk.png new file mode 100644 index 00000000000..19441e4a0ee Binary files /dev/null and b/Resources/Textures/Interface/Emotes/honk.png differ diff --git a/Resources/Textures/Interface/Emotes/laugh.png b/Resources/Textures/Interface/Emotes/laugh.png new file mode 100644 index 00000000000..a688fdb4432 Binary files /dev/null and b/Resources/Textures/Interface/Emotes/laugh.png differ diff --git a/Resources/Textures/Interface/Emotes/ping.png b/Resources/Textures/Interface/Emotes/ping.png new file mode 100644 index 00000000000..7408eb1f28f Binary files /dev/null and b/Resources/Textures/Interface/Emotes/ping.png differ diff --git a/Resources/Textures/Interface/Emotes/salute.png b/Resources/Textures/Interface/Emotes/salute.png new file mode 100644 index 00000000000..5727d8fd854 Binary files /dev/null and b/Resources/Textures/Interface/Emotes/salute.png differ diff --git a/Resources/Textures/Interface/Emotes/sigh.png b/Resources/Textures/Interface/Emotes/sigh.png new file mode 100644 index 00000000000..ff49a56360f Binary files /dev/null and b/Resources/Textures/Interface/Emotes/sigh.png differ diff --git a/Resources/Textures/Interface/Emotes/snap.png b/Resources/Textures/Interface/Emotes/snap.png new file mode 100644 index 00000000000..ae6d81c19d8 Binary files /dev/null and b/Resources/Textures/Interface/Emotes/snap.png differ diff --git a/Resources/Textures/Interface/Emotes/squeak.png b/Resources/Textures/Interface/Emotes/squeak.png new file mode 100644 index 00000000000..e32a89f5989 Binary files /dev/null and b/Resources/Textures/Interface/Emotes/squeak.png differ diff --git a/Resources/Textures/Interface/Emotes/squish.png b/Resources/Textures/Interface/Emotes/squish.png new file mode 100644 index 00000000000..efa1ce6c5ea Binary files /dev/null and b/Resources/Textures/Interface/Emotes/squish.png differ diff --git a/Resources/Textures/Interface/Emotes/vocal.png b/Resources/Textures/Interface/Emotes/vocal.png new file mode 100644 index 00000000000..9b129ec4669 Binary files /dev/null and b/Resources/Textures/Interface/Emotes/vocal.png differ diff --git a/Resources/Textures/Interface/Emotes/weh.png b/Resources/Textures/Interface/Emotes/weh.png new file mode 100644 index 00000000000..fea5ad3b731 Binary files /dev/null and b/Resources/Textures/Interface/Emotes/weh.png differ diff --git a/Resources/Textures/Interface/Emotes/whistle.png b/Resources/Textures/Interface/Emotes/whistle.png new file mode 100644 index 00000000000..029a52af231 Binary files /dev/null and b/Resources/Textures/Interface/Emotes/whistle.png differ diff --git a/Resources/Textures/Interface/Emotes/yawn.png b/Resources/Textures/Interface/Emotes/yawn.png new file mode 100644 index 00000000000..8130fc9ab44 Binary files /dev/null and b/Resources/Textures/Interface/Emotes/yawn.png differ diff --git a/Resources/Textures/Interface/Minimalist/SlotBackground.png b/Resources/Textures/Interface/Minimalist/SlotBackground.png index eb0ee037fd5..85c944357ef 100644 Binary files a/Resources/Textures/Interface/Minimalist/SlotBackground.png and b/Resources/Textures/Interface/Minimalist/SlotBackground.png differ diff --git a/Resources/Textures/Interface/Minimalist/item_status_left.png b/Resources/Textures/Interface/Minimalist/item_status_left.png new file mode 100644 index 00000000000..d70eca2fe92 Binary files /dev/null and b/Resources/Textures/Interface/Minimalist/item_status_left.png differ diff --git a/Resources/Textures/Interface/Minimalist/item_status_left_highlight.png b/Resources/Textures/Interface/Minimalist/item_status_left_highlight.png new file mode 100644 index 00000000000..b69872cd89c Binary files /dev/null and b/Resources/Textures/Interface/Minimalist/item_status_left_highlight.png differ diff --git a/Resources/Textures/Interface/Minimalist/item_status_right.png b/Resources/Textures/Interface/Minimalist/item_status_right.png new file mode 100644 index 00000000000..89171b9b478 Binary files /dev/null and b/Resources/Textures/Interface/Minimalist/item_status_right.png differ diff --git a/Resources/Textures/Interface/Minimalist/item_status_right_highlight.png b/Resources/Textures/Interface/Minimalist/item_status_right_highlight.png new file mode 100644 index 00000000000..d1474cee120 Binary files /dev/null and b/Resources/Textures/Interface/Minimalist/item_status_right_highlight.png differ diff --git a/Resources/Textures/Interface/Minimalist/template_small.png b/Resources/Textures/Interface/Minimalist/template_small.png new file mode 100644 index 00000000000..85c944357ef Binary files /dev/null and b/Resources/Textures/Interface/Minimalist/template_small.png differ diff --git a/Resources/Textures/Interface/Misc/health_analyzer_out_of_range.png b/Resources/Textures/Interface/Misc/health_analyzer_out_of_range.png new file mode 100644 index 00000000000..8a76b0e83f2 Binary files /dev/null and b/Resources/Textures/Interface/Misc/health_analyzer_out_of_range.png differ diff --git a/Resources/Textures/Interface/Misc/job_icons.rsi/Librarian.png b/Resources/Textures/Interface/Misc/job_icons.rsi/Librarian.png index b10b1ed71e0..114283c053f 100644 Binary files a/Resources/Textures/Interface/Misc/job_icons.rsi/Librarian.png and b/Resources/Textures/Interface/Misc/job_icons.rsi/Librarian.png differ diff --git a/Resources/Textures/Interface/Nano/help.png b/Resources/Textures/Interface/Nano/help.png new file mode 100644 index 00000000000..17f52833341 Binary files /dev/null and b/Resources/Textures/Interface/Nano/help.png differ diff --git a/Resources/Textures/Interface/Nano/item_status_left.svg b/Resources/Textures/Interface/Nano/item_status_left.svg deleted file mode 100644 index c97f8de0167..00000000000 --- a/Resources/Textures/Interface/Nano/item_status_left.svg +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - diff --git a/Resources/Textures/Interface/Nano/item_status_left.svg.96dpi.png b/Resources/Textures/Interface/Nano/item_status_left.svg.96dpi.png deleted file mode 100644 index e058fa73747..00000000000 Binary files a/Resources/Textures/Interface/Nano/item_status_left.svg.96dpi.png and /dev/null differ diff --git a/Resources/Textures/Interface/Nano/item_status_middle.svg b/Resources/Textures/Interface/Nano/item_status_middle.svg deleted file mode 100644 index a913981db11..00000000000 --- a/Resources/Textures/Interface/Nano/item_status_middle.svg +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - diff --git a/Resources/Textures/Interface/Nano/item_status_middle.svg.96dpi.png b/Resources/Textures/Interface/Nano/item_status_middle.svg.96dpi.png deleted file mode 100644 index ce41106b20c..00000000000 Binary files a/Resources/Textures/Interface/Nano/item_status_middle.svg.96dpi.png and /dev/null differ diff --git a/Resources/Textures/Interface/Nano/item_status_right.svg b/Resources/Textures/Interface/Nano/item_status_right.svg deleted file mode 100644 index d898bb2ce09..00000000000 --- a/Resources/Textures/Interface/Nano/item_status_right.svg +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - diff --git a/Resources/Textures/Interface/Nano/item_status_right.svg.96dpi.png b/Resources/Textures/Interface/Nano/item_status_right.svg.96dpi.png deleted file mode 100644 index fb7c4a9e6e6..00000000000 Binary files a/Resources/Textures/Interface/Nano/item_status_right.svg.96dpi.png and /dev/null differ diff --git a/Resources/Textures/Interface/Plasmafire/item_status_left.png b/Resources/Textures/Interface/Plasmafire/item_status_left.png new file mode 100644 index 00000000000..d5d25c98091 Binary files /dev/null and b/Resources/Textures/Interface/Plasmafire/item_status_left.png differ diff --git a/Resources/Textures/Interface/Plasmafire/item_status_left_highlight.png b/Resources/Textures/Interface/Plasmafire/item_status_left_highlight.png new file mode 100644 index 00000000000..afe37513fd5 Binary files /dev/null and b/Resources/Textures/Interface/Plasmafire/item_status_left_highlight.png differ diff --git a/Resources/Textures/Interface/Plasmafire/item_status_right.png b/Resources/Textures/Interface/Plasmafire/item_status_right.png new file mode 100644 index 00000000000..ca97f81c8f5 Binary files /dev/null and b/Resources/Textures/Interface/Plasmafire/item_status_right.png differ diff --git a/Resources/Textures/Interface/Plasmafire/item_status_right_highlight.png b/Resources/Textures/Interface/Plasmafire/item_status_right_highlight.png new file mode 100644 index 00000000000..b95822b7373 Binary files /dev/null and b/Resources/Textures/Interface/Plasmafire/item_status_right_highlight.png differ diff --git a/Resources/Textures/Interface/Retro/item_status_left.png b/Resources/Textures/Interface/Retro/item_status_left.png new file mode 100644 index 00000000000..21b107b84df Binary files /dev/null and b/Resources/Textures/Interface/Retro/item_status_left.png differ diff --git a/Resources/Textures/Interface/Retro/item_status_left_highlight.png b/Resources/Textures/Interface/Retro/item_status_left_highlight.png new file mode 100644 index 00000000000..fdd5a4fe7d6 Binary files /dev/null and b/Resources/Textures/Interface/Retro/item_status_left_highlight.png differ diff --git a/Resources/Textures/Interface/Retro/item_status_right.png b/Resources/Textures/Interface/Retro/item_status_right.png new file mode 100644 index 00000000000..5e7d54618d2 Binary files /dev/null and b/Resources/Textures/Interface/Retro/item_status_right.png differ diff --git a/Resources/Textures/Interface/Retro/item_status_right_highlight.png b/Resources/Textures/Interface/Retro/item_status_right_highlight.png new file mode 100644 index 00000000000..c6e12c41e69 Binary files /dev/null and b/Resources/Textures/Interface/Retro/item_status_right_highlight.png differ diff --git a/Resources/Textures/Interface/Retro/template_small.png b/Resources/Textures/Interface/Retro/template_small.png new file mode 100644 index 00000000000..7244b37f5c7 Binary files /dev/null and b/Resources/Textures/Interface/Retro/template_small.png differ diff --git a/Resources/Textures/Interface/Slimecore/item_status_left.png b/Resources/Textures/Interface/Slimecore/item_status_left.png new file mode 100644 index 00000000000..a7d940f401f Binary files /dev/null and b/Resources/Textures/Interface/Slimecore/item_status_left.png differ diff --git a/Resources/Textures/Interface/Slimecore/item_status_left_highlight.png b/Resources/Textures/Interface/Slimecore/item_status_left_highlight.png new file mode 100644 index 00000000000..322355b1358 Binary files /dev/null and b/Resources/Textures/Interface/Slimecore/item_status_left_highlight.png differ diff --git a/Resources/Textures/Interface/Slimecore/item_status_right.png b/Resources/Textures/Interface/Slimecore/item_status_right.png new file mode 100644 index 00000000000..77b53340a63 Binary files /dev/null and b/Resources/Textures/Interface/Slimecore/item_status_right.png differ diff --git a/Resources/Textures/Interface/Slimecore/item_status_right_highlight.png b/Resources/Textures/Interface/Slimecore/item_status_right_highlight.png new file mode 100644 index 00000000000..1e1a631db4b Binary files /dev/null and b/Resources/Textures/Interface/Slimecore/item_status_right_highlight.png differ diff --git a/Resources/Textures/Interface/VerbIcons/ATTRIBUTION.txt b/Resources/Textures/Interface/VerbIcons/ATTRIBUTION.txt index 0b8ae856bd8..69aa4650b32 100644 --- a/Resources/Textures/Interface/VerbIcons/ATTRIBUTION.txt +++ b/Resources/Textures/Interface/VerbIcons/ATTRIBUTION.txt @@ -7,3 +7,6 @@ https://game-icons.net/1x1/lorc/padlock.html unlock.svg by Delapouite under CC BY 3.0 https://game-icons.net/1x1/delapouite/padlock-open.html + +healing_word.png by LeonardoDaBepis under CC BY 3.0 +revivify.png by LeonardoDaBepis under CC BY 3.0 \ No newline at end of file diff --git a/Resources/Textures/Interface/emotes.svg b/Resources/Textures/Interface/emotes.svg new file mode 100644 index 00000000000..352f7ed2941 --- /dev/null +++ b/Resources/Textures/Interface/emotes.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Resources/Textures/Interface/emotes.svg.192dpi.png b/Resources/Textures/Interface/emotes.svg.192dpi.png new file mode 100644 index 00000000000..4e1f3c4f481 Binary files /dev/null and b/Resources/Textures/Interface/emotes.svg.192dpi.png differ diff --git a/Resources/Textures/Interface/emotes.svg.192dpi.png.yml b/Resources/Textures/Interface/emotes.svg.192dpi.png.yml new file mode 100644 index 00000000000..dabd6601f78 --- /dev/null +++ b/Resources/Textures/Interface/emotes.svg.192dpi.png.yml @@ -0,0 +1,2 @@ +sample: + filter: true diff --git a/Resources/Textures/LobbyScreens/attributions.yml b/Resources/Textures/LobbyScreens/attributions.yml index afe4af7bf29..4dd3dc945bf 100644 --- a/Resources/Textures/LobbyScreens/attributions.yml +++ b/Resources/Textures/LobbyScreens/attributions.yml @@ -37,3 +37,8 @@ license: "CC-BY-SA-3.0" copyright: "aserovich on discord" source: "https://github.com/space-wizards/space-station-14" + +- files: ["justaweekaway.webp"] + license: "CC-BY-SA-3.0" + copyright: "plantyfern on discord" + source: "https://github.com/space-wizards/space-station-14" \ No newline at end of file diff --git a/Resources/Textures/LobbyScreens/justaweekaway.webp b/Resources/Textures/LobbyScreens/justaweekaway.webp new file mode 100644 index 00000000000..6e8205043c9 Binary files /dev/null and b/Resources/Textures/LobbyScreens/justaweekaway.webp differ diff --git a/Resources/Textures/LobbyScreens/justaweekaway.yml b/Resources/Textures/LobbyScreens/justaweekaway.yml new file mode 100644 index 00000000000..5c43e233050 --- /dev/null +++ b/Resources/Textures/LobbyScreens/justaweekaway.yml @@ -0,0 +1,2 @@ +sample: + filter: true diff --git a/Resources/Textures/Mobs/Aliens/Xenos/rouny.rsi/crit.png b/Resources/Textures/Mobs/Aliens/Xenos/rouny.rsi/crit.png index 23a7ec0af6c..72f56385f58 100644 Binary files a/Resources/Textures/Mobs/Aliens/Xenos/rouny.rsi/crit.png and b/Resources/Textures/Mobs/Aliens/Xenos/rouny.rsi/crit.png differ diff --git a/Resources/Textures/Mobs/Aliens/Xenos/rouny.rsi/dead.png b/Resources/Textures/Mobs/Aliens/Xenos/rouny.rsi/dead.png index cd355b61529..8e846432812 100644 Binary files a/Resources/Textures/Mobs/Aliens/Xenos/rouny.rsi/dead.png and b/Resources/Textures/Mobs/Aliens/Xenos/rouny.rsi/dead.png differ diff --git a/Resources/Textures/Mobs/Aliens/Xenos/rouny.rsi/meta.json b/Resources/Textures/Mobs/Aliens/Xenos/rouny.rsi/meta.json index cc020d01c46..f238edbb198 100644 --- a/Resources/Textures/Mobs/Aliens/Xenos/rouny.rsi/meta.json +++ b/Resources/Textures/Mobs/Aliens/Xenos/rouny.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "DakoDragon, discord ID: 56038550335922176", + "copyright": "Created by Fenndragon, discord ID: 190763499276861440", "size": { "x": 64, "y": 64 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/rouny.rsi/running.png b/Resources/Textures/Mobs/Aliens/Xenos/rouny.rsi/running.png index 1438285113f..556dc97d7e9 100644 Binary files a/Resources/Textures/Mobs/Aliens/Xenos/rouny.rsi/running.png and b/Resources/Textures/Mobs/Aliens/Xenos/rouny.rsi/running.png differ diff --git a/Resources/Textures/Mobs/Aliens/Xenos/rouny.rsi/sleeping.png b/Resources/Textures/Mobs/Aliens/Xenos/rouny.rsi/sleeping.png index 9221665dd85..3bb814f467e 100644 Binary files a/Resources/Textures/Mobs/Aliens/Xenos/rouny.rsi/sleeping.png and b/Resources/Textures/Mobs/Aliens/Xenos/rouny.rsi/sleeping.png differ diff --git a/Resources/Textures/Mobs/Animals/patriarch.rsi/meta.json b/Resources/Textures/Mobs/Animals/patriarch.rsi/meta.json new file mode 100644 index 00000000000..c8fa857fee2 --- /dev/null +++ b/Resources/Textures/Mobs/Animals/patriarch.rsi/meta.json @@ -0,0 +1,24 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "https://gitlab.com/cmdevs/colonial-warfare/-/blob/dev/icons/mob/xenonids/praetorian.dmi edited by Fenndragon", + "size": { + "x": 64, + "y": 64 + }, + "states": [ + { + "name": "patriarch", + "directions": 4 + }, + { + "name": "patriarch_sleeping" + }, + { + "name": "patriarch_crit" + }, + { + "name": "patriarch_dead" + } + ] +} diff --git a/Resources/Textures/Mobs/Animals/patriarch.rsi/patriarch.png b/Resources/Textures/Mobs/Animals/patriarch.rsi/patriarch.png new file mode 100644 index 00000000000..34cb16d5552 Binary files /dev/null and b/Resources/Textures/Mobs/Animals/patriarch.rsi/patriarch.png differ diff --git a/Resources/Textures/Mobs/Animals/patriarch.rsi/patriarch_crit.png b/Resources/Textures/Mobs/Animals/patriarch.rsi/patriarch_crit.png new file mode 100644 index 00000000000..add264b5b5c Binary files /dev/null and b/Resources/Textures/Mobs/Animals/patriarch.rsi/patriarch_crit.png differ diff --git a/Resources/Textures/Mobs/Animals/patriarch.rsi/patriarch_dead.png b/Resources/Textures/Mobs/Animals/patriarch.rsi/patriarch_dead.png new file mode 100644 index 00000000000..f190202dcc3 Binary files /dev/null and b/Resources/Textures/Mobs/Animals/patriarch.rsi/patriarch_dead.png differ diff --git a/Resources/Textures/Mobs/Animals/patriarch.rsi/patriarch_sleeping.png b/Resources/Textures/Mobs/Animals/patriarch.rsi/patriarch_sleeping.png new file mode 100644 index 00000000000..2cf18ada647 Binary files /dev/null and b/Resources/Textures/Mobs/Animals/patriarch.rsi/patriarch_sleeping.png differ diff --git a/Resources/Textures/Mobs/Animals/subject7355.rsi/glow.png b/Resources/Textures/Mobs/Animals/subject7355.rsi/glow.png new file mode 100644 index 00000000000..9fc359cf0c2 Binary files /dev/null and b/Resources/Textures/Mobs/Animals/subject7355.rsi/glow.png differ diff --git a/Resources/Textures/Mobs/Animals/subject7355.rsi/meta.json b/Resources/Textures/Mobs/Animals/subject7355.rsi/meta.json new file mode 100644 index 00000000000..c49d5687f1a --- /dev/null +++ b/Resources/Textures/Mobs/Animals/subject7355.rsi/meta.json @@ -0,0 +1,28 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "https://gitlab.com/cmdevs/colonial-warfare/-/tree/dev/icons/mob/xenonids", + "size": { + "x": 64, + "y": 64 + }, + "states": [ + { + "name": "subject7355", + "directions": 4 + }, + { + "name": "glow", + "directions": 4 + }, + { + "name": "subject7355_sleeping" + }, + { + "name": "subject7355_crit" + }, + { + "name": "subject7355_dead" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Mobs/Animals/subject7355.rsi/subject7355.png b/Resources/Textures/Mobs/Animals/subject7355.rsi/subject7355.png new file mode 100644 index 00000000000..9b51c993259 Binary files /dev/null and b/Resources/Textures/Mobs/Animals/subject7355.rsi/subject7355.png differ diff --git a/Resources/Textures/Mobs/Animals/subject7355.rsi/subject7355_crit.png b/Resources/Textures/Mobs/Animals/subject7355.rsi/subject7355_crit.png new file mode 100644 index 00000000000..d400295959f Binary files /dev/null and b/Resources/Textures/Mobs/Animals/subject7355.rsi/subject7355_crit.png differ diff --git a/Resources/Textures/Mobs/Animals/subject7355.rsi/subject7355_dead.png b/Resources/Textures/Mobs/Animals/subject7355.rsi/subject7355_dead.png new file mode 100644 index 00000000000..6b28c7da7a9 Binary files /dev/null and b/Resources/Textures/Mobs/Animals/subject7355.rsi/subject7355_dead.png differ diff --git a/Resources/Textures/Mobs/Animals/subject7355.rsi/subject7355_sleeping.png b/Resources/Textures/Mobs/Animals/subject7355.rsi/subject7355_sleeping.png new file mode 100644 index 00000000000..10600583256 Binary files /dev/null and b/Resources/Textures/Mobs/Animals/subject7355.rsi/subject7355_sleeping.png differ diff --git a/Resources/Textures/Mobs/Customization/Harpy/harpy_chest.rsi/lower.png b/Resources/Textures/Mobs/Customization/Harpy/harpy_chest.rsi/lower.png new file mode 100644 index 00000000000..1cfada1c9eb Binary files /dev/null and b/Resources/Textures/Mobs/Customization/Harpy/harpy_chest.rsi/lower.png differ diff --git a/Resources/Textures/Mobs/Customization/Harpy/harpy_chest.rsi/meta.json b/Resources/Textures/Mobs/Customization/Harpy/harpy_chest.rsi/meta.json new file mode 100644 index 00000000000..d4f4136903f --- /dev/null +++ b/Resources/Textures/Mobs/Customization/Harpy/harpy_chest.rsi/meta.json @@ -0,0 +1,19 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/tgstation/tgstation/blob/8024397cc81c5f47f74cf4279e35728487d0a1a7/icons/mob/human_parts_greyscale.dmi and and modified by @raistlin_jag with parts by @ps3moira", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "upper", + "directions": 4 + }, + { + "name": "lower", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Mobs/Customization/Harpy/harpy_chest.rsi/upper.png b/Resources/Textures/Mobs/Customization/Harpy/harpy_chest.rsi/upper.png new file mode 100644 index 00000000000..272459e82ec Binary files /dev/null and b/Resources/Textures/Mobs/Customization/Harpy/harpy_chest.rsi/upper.png differ diff --git a/Resources/Textures/Mobs/Customization/Harpy/harpy_ears.rsi/harpy_ears_default.png b/Resources/Textures/Mobs/Customization/Harpy/harpy_ears.rsi/harpy_ears_default.png new file mode 100644 index 00000000000..00ddb37abd9 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/Harpy/harpy_ears.rsi/harpy_ears_default.png differ diff --git a/Resources/Textures/Mobs/Customization/Harpy/harpy_ears.rsi/harpy_ears_large.png b/Resources/Textures/Mobs/Customization/Harpy/harpy_ears.rsi/harpy_ears_large.png new file mode 100644 index 00000000000..5ace395ce7d Binary files /dev/null and b/Resources/Textures/Mobs/Customization/Harpy/harpy_ears.rsi/harpy_ears_large.png differ diff --git a/Resources/Textures/Mobs/Customization/Harpy/harpy_ears.rsi/meta.json b/Resources/Textures/Mobs/Customization/Harpy/harpy_ears.rsi/meta.json new file mode 100644 index 00000000000..256abc36f49 --- /dev/null +++ b/Resources/Textures/Mobs/Customization/Harpy/harpy_ears.rsi/meta.json @@ -0,0 +1,19 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "By @leonardo_dabepis, large by VMSolidus", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "harpy_ears_default", + "directions": 4 + }, + { + "name": "harpy_ears_large", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Mobs/Customization/Harpy/harpy_legs.rsi/feet.png b/Resources/Textures/Mobs/Customization/Harpy/harpy_legs.rsi/feet.png new file mode 100644 index 00000000000..d37935c9316 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/Harpy/harpy_legs.rsi/feet.png differ diff --git a/Resources/Textures/Mobs/Customization/Harpy/harpy_legs.rsi/meta.json b/Resources/Textures/Mobs/Customization/Harpy/harpy_legs.rsi/meta.json new file mode 100644 index 00000000000..865473f5450 --- /dev/null +++ b/Resources/Textures/Mobs/Customization/Harpy/harpy_legs.rsi/meta.json @@ -0,0 +1,27 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "by Ko4erga (discord)", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "base", + "directions": 4 + }, + { + "name": "empty", + "directions": 4 + }, + { + "name": "glow", + "directions": 4 + }, + { + "name": "broken", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Mobs/Customization/Harpy/harpy_legs.rsi/talons.png b/Resources/Textures/Mobs/Customization/Harpy/harpy_legs.rsi/talons.png new file mode 100644 index 00000000000..cc55693289c Binary files /dev/null and b/Resources/Textures/Mobs/Customization/Harpy/harpy_legs.rsi/talons.png differ diff --git a/Resources/Textures/Mobs/Customization/Harpy/harpy_legs.rsi/thighs.png b/Resources/Textures/Mobs/Customization/Harpy/harpy_legs.rsi/thighs.png new file mode 100644 index 00000000000..89b2463c48d Binary files /dev/null and b/Resources/Textures/Mobs/Customization/Harpy/harpy_legs.rsi/thighs.png differ diff --git a/Resources/Textures/Mobs/Customization/Harpy/harpy_tails.rsi/forked_long.png b/Resources/Textures/Mobs/Customization/Harpy/harpy_tails.rsi/forked_long.png new file mode 100644 index 00000000000..280768b40af Binary files /dev/null and b/Resources/Textures/Mobs/Customization/Harpy/harpy_tails.rsi/forked_long.png differ diff --git a/Resources/Textures/Mobs/Customization/Harpy/harpy_tails.rsi/haven_tone_1.png b/Resources/Textures/Mobs/Customization/Harpy/harpy_tails.rsi/haven_tone_1.png new file mode 100644 index 00000000000..e818e7dd11e Binary files /dev/null and b/Resources/Textures/Mobs/Customization/Harpy/harpy_tails.rsi/haven_tone_1.png differ diff --git a/Resources/Textures/Mobs/Customization/Harpy/harpy_tails.rsi/haven_tone_2.png b/Resources/Textures/Mobs/Customization/Harpy/harpy_tails.rsi/haven_tone_2.png new file mode 100644 index 00000000000..fe98ec53eb2 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/Harpy/harpy_tails.rsi/haven_tone_2.png differ diff --git a/Resources/Textures/Mobs/Customization/Harpy/harpy_tails.rsi/huescale_forked_tailfin.png b/Resources/Textures/Mobs/Customization/Harpy/harpy_tails.rsi/huescale_forked_tailfin.png new file mode 100644 index 00000000000..c6addb53ec1 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/Harpy/harpy_tails.rsi/huescale_forked_tailfin.png differ diff --git a/Resources/Textures/Mobs/Customization/Harpy/harpy_tails.rsi/meta.json b/Resources/Textures/Mobs/Customization/Harpy/harpy_tails.rsi/meta.json new file mode 100644 index 00000000000..94795a626ea --- /dev/null +++ b/Resources/Textures/Mobs/Customization/Harpy/harpy_tails.rsi/meta.json @@ -0,0 +1,43 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Phoenix and Rooster by @leonardo_dabepis, Finch & Forked Tailfin by @stillxicarus, haven & forked_long & swallow by @Kilath", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "phoenix_tail", + "directions": 4 + }, + { + "name": "rooster_tail", + "directions": 4 + }, + { + "name": "huescale_forked_tailfin", + "directions": 4 + }, + { + "name": "whitescale_forked_tailfin", + "directions": 4 + }, + { + "name": "haven_tone_1", + "directions": 4 + }, + { + "name": "haven_tone_2", + "directions": 4 + }, + { + "name": "forked_long", + "directions": 4 + }, + { + "name": "swallow_tail", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Mobs/Customization/Harpy/harpy_tails.rsi/phoenix_tail.png b/Resources/Textures/Mobs/Customization/Harpy/harpy_tails.rsi/phoenix_tail.png new file mode 100644 index 00000000000..0254b0fe3e2 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/Harpy/harpy_tails.rsi/phoenix_tail.png differ diff --git a/Resources/Textures/Mobs/Customization/Harpy/harpy_tails.rsi/rooster_tail.png b/Resources/Textures/Mobs/Customization/Harpy/harpy_tails.rsi/rooster_tail.png new file mode 100644 index 00000000000..e6a4e00271d Binary files /dev/null and b/Resources/Textures/Mobs/Customization/Harpy/harpy_tails.rsi/rooster_tail.png differ diff --git a/Resources/Textures/Mobs/Customization/Harpy/harpy_tails.rsi/swallow_tail.png b/Resources/Textures/Mobs/Customization/Harpy/harpy_tails.rsi/swallow_tail.png new file mode 100644 index 00000000000..f9187b66f84 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/Harpy/harpy_tails.rsi/swallow_tail.png differ diff --git a/Resources/Textures/Mobs/Customization/Harpy/harpy_tails.rsi/whitescale_forked_tailfin.png b/Resources/Textures/Mobs/Customization/Harpy/harpy_tails.rsi/whitescale_forked_tailfin.png new file mode 100644 index 00000000000..b92610a9605 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/Harpy/harpy_tails.rsi/whitescale_forked_tailfin.png differ diff --git a/Resources/Textures/Mobs/Customization/Harpy/harpy_tails36x36.rsi/finch_tail.png b/Resources/Textures/Mobs/Customization/Harpy/harpy_tails36x36.rsi/finch_tail.png new file mode 100644 index 00000000000..b151d4a48d2 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/Harpy/harpy_tails36x36.rsi/finch_tail.png differ diff --git a/Resources/Textures/Mobs/Customization/Harpy/harpy_tails36x36.rsi/meta.json b/Resources/Textures/Mobs/Customization/Harpy/harpy_tails36x36.rsi/meta.json new file mode 100644 index 00000000000..8284a502d40 --- /dev/null +++ b/Resources/Textures/Mobs/Customization/Harpy/harpy_tails36x36.rsi/meta.json @@ -0,0 +1,15 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Finch by @stillxicarus", + "size": { + "x": 36, + "y": 32 + }, + "states": [ + { + "name": "finch_tail", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Mobs/Customization/Harpy/harpy_tails48x48.rsi/meta.json b/Resources/Textures/Mobs/Customization/Harpy/harpy_tails48x48.rsi/meta.json new file mode 100644 index 00000000000..2961db3707d --- /dev/null +++ b/Resources/Textures/Mobs/Customization/Harpy/harpy_tails48x48.rsi/meta.json @@ -0,0 +1,19 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Peacock by stillxicarus (Discord)", + "size": { + "x": 48, + "y": 48 + }, + "states": [ + { + "name": "peacock_tail_feathers", + "directions": 4 + }, + { + "name": "peacock_tail_eyes", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Mobs/Customization/Harpy/harpy_tails48x48.rsi/peacock_tail_eyes.png b/Resources/Textures/Mobs/Customization/Harpy/harpy_tails48x48.rsi/peacock_tail_eyes.png new file mode 100644 index 00000000000..71af693afd7 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/Harpy/harpy_tails48x48.rsi/peacock_tail_eyes.png differ diff --git a/Resources/Textures/Mobs/Customization/Harpy/harpy_tails48x48.rsi/peacock_tail_feathers.png b/Resources/Textures/Mobs/Customization/Harpy/harpy_tails48x48.rsi/peacock_tail_feathers.png new file mode 100644 index 00000000000..d56b093d6ca Binary files /dev/null and b/Resources/Textures/Mobs/Customization/Harpy/harpy_tails48x48.rsi/peacock_tail_feathers.png differ diff --git a/Resources/Textures/Mobs/Customization/Harpy/harpy_wingcover.png b/Resources/Textures/Mobs/Customization/Harpy/harpy_wingcover.png new file mode 100644 index 00000000000..b1c31bc83b7 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/Harpy/harpy_wingcover.png differ diff --git a/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/bat_wings_tone_1.png b/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/bat_wings_tone_1.png new file mode 100644 index 00000000000..a147739cc90 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/bat_wings_tone_1.png differ diff --git a/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/bat_wings_tone_2.png b/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/bat_wings_tone_2.png new file mode 100644 index 00000000000..b2170ff803c Binary files /dev/null and b/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/bat_wings_tone_2.png differ diff --git a/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/bionic_wings_tone_1.png b/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/bionic_wings_tone_1.png new file mode 100644 index 00000000000..752d6cc9a20 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/bionic_wings_tone_1.png differ diff --git a/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/bionic_wings_tone_2.png b/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/bionic_wings_tone_2.png new file mode 100644 index 00000000000..528b5cbfa04 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/bionic_wings_tone_2.png differ diff --git a/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/classic_harpy.png b/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/classic_harpy.png new file mode 100644 index 00000000000..6f39a925124 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/classic_harpy.png differ diff --git a/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/harpy_2tone_1.png b/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/harpy_2tone_1.png new file mode 100644 index 00000000000..3edaf057e7b Binary files /dev/null and b/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/harpy_2tone_1.png differ diff --git a/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/harpy_2tone_2.png b/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/harpy_2tone_2.png new file mode 100644 index 00000000000..cc7ad928781 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/harpy_2tone_2.png differ diff --git a/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/harpy_3tone_1.png b/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/harpy_3tone_1.png new file mode 100644 index 00000000000..bd11f128114 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/harpy_3tone_1.png differ diff --git a/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/harpy_3tone_2.png b/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/harpy_3tone_2.png new file mode 100644 index 00000000000..a27169651dd Binary files /dev/null and b/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/harpy_3tone_2.png differ diff --git a/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/harpy_3tone_3.png b/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/harpy_3tone_3.png new file mode 100644 index 00000000000..c378328a02f Binary files /dev/null and b/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/harpy_3tone_3.png differ diff --git a/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/harpy_speckled_1.png b/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/harpy_speckled_1.png new file mode 100644 index 00000000000..00cf7c36794 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/harpy_speckled_1.png differ diff --git a/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/harpy_speckled_2.png b/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/harpy_speckled_2.png new file mode 100644 index 00000000000..32aef4b6218 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/harpy_speckled_2.png differ diff --git a/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/harpy_undertone_1.png b/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/harpy_undertone_1.png new file mode 100644 index 00000000000..4410790851d Binary files /dev/null and b/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/harpy_undertone_1.png differ diff --git a/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/harpy_undertone_2.png b/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/harpy_undertone_2.png new file mode 100644 index 00000000000..ace8b76f087 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/harpy_undertone_2.png differ diff --git a/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/harpy_wingtip_1.png b/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/harpy_wingtip_1.png new file mode 100644 index 00000000000..f603ce356be Binary files /dev/null and b/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/harpy_wingtip_1.png differ diff --git a/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/harpy_wingtip_2.png b/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/harpy_wingtip_2.png new file mode 100644 index 00000000000..94ad0126cd4 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/harpy_wingtip_2.png differ diff --git a/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/huescale_harpy.png b/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/huescale_harpy.png new file mode 100644 index 00000000000..4ed888072fa Binary files /dev/null and b/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/huescale_harpy.png differ diff --git a/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/huescale_harpy_folded.png b/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/huescale_harpy_folded.png new file mode 100644 index 00000000000..838e05deb4d Binary files /dev/null and b/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/huescale_harpy_folded.png differ diff --git a/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/huescale_harpy_wing_owl.png b/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/huescale_harpy_wing_owl.png new file mode 100644 index 00000000000..c136dc27940 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/huescale_harpy_wing_owl.png differ diff --git a/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/meta.json b/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/meta.json new file mode 100644 index 00000000000..c8bf28767a8 --- /dev/null +++ b/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/meta.json @@ -0,0 +1,99 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "classicharpy Taken from S.P.L.U.R.T at commit https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13/commit/285f6f86ac41a6246f250993486effeab8581c2c, edited by @raistlin_jag | harpyfolded, harpy, and owl by @stillxicarus, bat wings by @Kilath", + "states": [ + { + "name": "huescale_harpy", + "directions": 4 + }, + { + "name": "whitescale_harpy", + "directions": 4 + }, + { + "name": "huescale_harpy_folded", + "directions": 4 + }, + { + "name": "whitescale_harpy_folded", + "directions": 4 + }, + { + "name": "harpy_2tone_1", + "directions": 4 + }, + { + "name": "harpy_2tone_2", + "directions": 4 + }, + { + "name": "harpy_3tone_1", + "directions": 4 + }, + { + "name": "harpy_3tone_2", + "directions": 4 + }, + { + "name": "harpy_3tone_3", + "directions": 4 + }, + { + "name": "harpy_speckled_1", + "directions": 4 + }, + { + "name": "harpy_speckled_2", + "directions": 4 + }, + { + "name": "harpy_undertone_1", + "directions": 4 + }, + { + "name": "harpy_undertone_2", + "directions": 4 + }, + { + "name": "harpy_wingtip_1", + "directions": 4 + }, + { + "name": "harpy_wingtip_2", + "directions": 4 + }, + { + "name": "classic_harpy", + "directions": 4 + }, + { + "name": "huescale_harpy_wing_owl", + "directions": 4 + }, + { + "name": "whitescale_harpy_wing_owl", + "directions": 4 + }, + { + "name": "bat_wings_tone_1", + "directions": 4 + }, + { + "name": "bat_wings_tone_2", + "directions": 4 + }, + { + "name": "bionic_wings_tone_1", + "directions": 4 + }, + { + "name": "bionic_wings_tone_2", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/whitescale_harpy.png b/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/whitescale_harpy.png new file mode 100644 index 00000000000..0c2f826ec57 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/whitescale_harpy.png differ diff --git a/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/whitescale_harpy_folded.png b/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/whitescale_harpy_folded.png new file mode 100644 index 00000000000..e6777aee73b Binary files /dev/null and b/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/whitescale_harpy_folded.png differ diff --git a/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/whitescale_harpy_wing_owl.png b/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/whitescale_harpy_wing_owl.png new file mode 100644 index 00000000000..bbf46cdb9c3 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/Harpy/harpy_wings.rsi/whitescale_harpy_wing_owl.png differ diff --git a/Resources/Textures/Mobs/Customization/Oni/oni_horns48x48.rsi/meta.json b/Resources/Textures/Mobs/Customization/Oni/oni_horns48x48.rsi/meta.json new file mode 100644 index 00000000000..66b6d33feb6 --- /dev/null +++ b/Resources/Textures/Mobs/Customization/Oni/oni_horns48x48.rsi/meta.json @@ -0,0 +1,67 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "tall_curved & tall_bull by dootythefrooty, makara by angelofallars (github)", + "size": { + "x": 48, + "y": 48 + }, + "states": [ + { + "name": "tall_curved", + "directions": 4 + }, + { + "name": "tall_curved_3tone_1", + "directions": 4 + }, + { + "name": "tall_curved_3tone_2", + "directions": 4 + }, + { + "name": "tall_curved_3tone_3", + "directions": 4 + }, + { + "name": "tall_bull", + "directions": 4 + }, + { + "name": "tall_bull_3tone_1", + "directions": 4 + }, + { + "name": "tall_bull_3tone_2", + "directions": 4 + }, + { + "name": "tall_bull_3tone_3", + "directions": 4 + }, + { + "name": "makara", + "directions": 4 + }, + { + "name": "makara_2tone_1", + "directions": 4 + }, + { + "name": "makara_2tone_2", + "directions": 4 + }, + { + "name": "makara_3tone_1", + "directions": 4 + }, + { + "name": "makara_3tone_2", + "directions": 4 + }, + { + "name": "makara_3tone_3", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Mobs/Customization/Shadowkin/ears.rsi/meta.json b/Resources/Textures/Mobs/Customization/Shadowkin/ears.rsi/meta.json new file mode 100644 index 00000000000..b67f4f34899 --- /dev/null +++ b/Resources/Textures/Mobs/Customization/Shadowkin/ears.rsi/meta.json @@ -0,0 +1,19 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from S.P.L.U.R.T ears.dmi at commit https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13/commit/8b4abffbe538fbded19b44b989ebc6808748f31f", + "states": [ + { + "name": "shadowkin", + "directions": 4 + }, + { + "name": "shadowkin_stripes", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Mobs/Customization/Shadowkin/ears.rsi/shadowkin.png b/Resources/Textures/Mobs/Customization/Shadowkin/ears.rsi/shadowkin.png new file mode 100644 index 00000000000..3aec926c5e2 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/Shadowkin/ears.rsi/shadowkin.png differ diff --git a/Resources/Textures/Mobs/Customization/Shadowkin/ears.rsi/shadowkin_stripes.png b/Resources/Textures/Mobs/Customization/Shadowkin/ears.rsi/shadowkin_stripes.png new file mode 100644 index 00000000000..ce1f04ce602 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/Shadowkin/ears.rsi/shadowkin_stripes.png differ diff --git a/Resources/Textures/Mobs/Customization/Shadowkin/tails32x32.rsi/meta.json b/Resources/Textures/Mobs/Customization/Shadowkin/tails32x32.rsi/meta.json new file mode 100644 index 00000000000..4731b9de3dd --- /dev/null +++ b/Resources/Textures/Mobs/Customization/Shadowkin/tails32x32.rsi/meta.json @@ -0,0 +1,19 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13/commit/96703f76bccd8fe6a96b78524efb97a9af661767 Shadowkin big fluff made by DSC@Cabbage#9633 (561159087765848084)", + "states": [ + { + "name": "shadowkin_shorter", + "directions": 4 + }, + { + "name": "shadowkin_medium", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Mobs/Customization/Shadowkin/tails32x32.rsi/shadowkin_medium.png b/Resources/Textures/Mobs/Customization/Shadowkin/tails32x32.rsi/shadowkin_medium.png new file mode 100644 index 00000000000..ca162bb1b05 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/Shadowkin/tails32x32.rsi/shadowkin_medium.png differ diff --git a/Resources/Textures/Mobs/Customization/Shadowkin/tails32x32.rsi/shadowkin_shorter.png b/Resources/Textures/Mobs/Customization/Shadowkin/tails32x32.rsi/shadowkin_shorter.png new file mode 100644 index 00000000000..979e4e6b26c Binary files /dev/null and b/Resources/Textures/Mobs/Customization/Shadowkin/tails32x32.rsi/shadowkin_shorter.png differ diff --git a/Resources/Textures/Mobs/Customization/Shadowkin/tails64x32.rsi/meta.json b/Resources/Textures/Mobs/Customization/Shadowkin/tails64x32.rsi/meta.json new file mode 100644 index 00000000000..535c01bbaf1 --- /dev/null +++ b/Resources/Textures/Mobs/Customization/Shadowkin/tails64x32.rsi/meta.json @@ -0,0 +1,23 @@ +{ + "version": 1, + "size": { + "x": 64, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13/commit/96703f76bccd8fe6a96b78524efb97a9af661767 Shadowkin big fluff made by DSC@Cabbage#9633 (561159087765848084)", + "states": [ + { + "name": "shadowkin", + "directions": 4 + }, + { + "name": "shadowkin_big", + "directions": 4 + }, + { + "name": "shadowkin_big_fluff", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Mobs/Customization/Shadowkin/tails64x32.rsi/shadowkin.png b/Resources/Textures/Mobs/Customization/Shadowkin/tails64x32.rsi/shadowkin.png new file mode 100644 index 00000000000..94ff21d9cbb Binary files /dev/null and b/Resources/Textures/Mobs/Customization/Shadowkin/tails64x32.rsi/shadowkin.png differ diff --git a/Resources/Textures/Mobs/Customization/Shadowkin/tails64x32.rsi/shadowkin_big.png b/Resources/Textures/Mobs/Customization/Shadowkin/tails64x32.rsi/shadowkin_big.png new file mode 100644 index 00000000000..988aa6e589f Binary files /dev/null and b/Resources/Textures/Mobs/Customization/Shadowkin/tails64x32.rsi/shadowkin_big.png differ diff --git a/Resources/Textures/Mobs/Customization/Shadowkin/tails64x32.rsi/shadowkin_big_fluff.png b/Resources/Textures/Mobs/Customization/Shadowkin/tails64x32.rsi/shadowkin_big_fluff.png new file mode 100644 index 00000000000..20ad696ccee Binary files /dev/null and b/Resources/Textures/Mobs/Customization/Shadowkin/tails64x32.rsi/shadowkin_big_fluff.png differ diff --git a/Resources/Textures/Mobs/Customization/eyes.rsi/meta.json b/Resources/Textures/Mobs/Customization/eyes.rsi/meta.json index cb94dfab3e1..78339d7b76d 100644 --- a/Resources/Textures/Mobs/Customization/eyes.rsi/meta.json +++ b/Resources/Textures/Mobs/Customization/eyes.rsi/meta.json @@ -1 +1 @@ -{"version": 1, "license": "CC-BY-SA-3.0","copyright": "Vox_eyes Taken from https://github.com/vgstation-coders/vgstation13 at 02ff588d59b3c560c685d9ca75e882d32a72d8cb and human_eyes taken from https://github.com/tgstation/tgstation/blob/8024397cc81c5f47f74cf4279e35728487d0a1a7/icons/mob/human_parts_greyscale.dmi and modified by DrSmugleaf", "size": {"x": 32, "y": 32}, "states": [{"name": "diona", "directions": 4}, {"name": "eyes", "directions": 4}, {"name":"no_eyes"},{"name": "vox_eyes_s", "directions": 4}]} +{"version": 1, "license": "CC-BY-SA-3.0","copyright": "human_eyes taken from https://github.com/tgstation/tgstation/blob/8024397cc81c5f47f74cf4279e35728487d0a1a7/icons/mob/human_parts_greyscale.dmi and modified by DrSmugleaf", "size": {"x": 32, "y": 32}, "states": [{"name": "diona", "directions": 4}, {"name": "eyes", "directions": 4}, {"name":"no_eyes"}]} diff --git a/Resources/Textures/Mobs/Customization/eyes.rsi/vox_eyes_s.png b/Resources/Textures/Mobs/Customization/eyes.rsi/vox_eyes_s.png deleted file mode 100644 index 807e9374c45..00000000000 Binary files a/Resources/Textures/Mobs/Customization/eyes.rsi/vox_eyes_s.png and /dev/null differ diff --git a/Resources/Textures/Mobs/Customization/human_hair.rsi/meta.json b/Resources/Textures/Mobs/Customization/human_hair.rsi/meta.json index 5cb41c258b8..8fd4f5e1b91 100644 --- a/Resources/Textures/Mobs/Customization/human_hair.rsi/meta.json +++ b/Resources/Textures/Mobs/Customization/human_hair.rsi/meta.json @@ -667,6 +667,10 @@ "name": "spikyponytail", "directions": 4 }, + { + "name": "spookylong", + "directions": 4 + }, { "name": "stail", "directions": 4 diff --git a/Resources/Textures/Mobs/Customization/human_hair.rsi/spookylong.png b/Resources/Textures/Mobs/Customization/human_hair.rsi/spookylong.png new file mode 100644 index 00000000000..4e79da275bc Binary files /dev/null and b/Resources/Textures/Mobs/Customization/human_hair.rsi/spookylong.png differ diff --git a/Resources/Textures/Mobs/Customization/kemonomimi-ears.rsi/bullishhorns.png b/Resources/Textures/Mobs/Customization/kemonomimi-ears.rsi/bullishhorns.png new file mode 100644 index 00000000000..cb807326569 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/kemonomimi-ears.rsi/bullishhorns.png differ diff --git a/Resources/Textures/Mobs/Customization/kemonomimi-ears.rsi/bunnyearstone1.png b/Resources/Textures/Mobs/Customization/kemonomimi-ears.rsi/bunnyearstone1.png new file mode 100644 index 00000000000..6a2f37f003d Binary files /dev/null and b/Resources/Textures/Mobs/Customization/kemonomimi-ears.rsi/bunnyearstone1.png differ diff --git a/Resources/Textures/Mobs/Customization/kemonomimi-ears.rsi/bunnyearstone2.png b/Resources/Textures/Mobs/Customization/kemonomimi-ears.rsi/bunnyearstone2.png new file mode 100644 index 00000000000..2da5da89a04 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/kemonomimi-ears.rsi/bunnyearstone2.png differ diff --git a/Resources/Textures/Mobs/Customization/kemonomimi-ears.rsi/foxears.png b/Resources/Textures/Mobs/Customization/kemonomimi-ears.rsi/foxears.png new file mode 100644 index 00000000000..c37755fc3c6 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/kemonomimi-ears.rsi/foxears.png differ diff --git a/Resources/Textures/Mobs/Customization/kemonomimi-ears.rsi/goathornstone1.png b/Resources/Textures/Mobs/Customization/kemonomimi-ears.rsi/goathornstone1.png new file mode 100644 index 00000000000..74a1bf1c7a5 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/kemonomimi-ears.rsi/goathornstone1.png differ diff --git a/Resources/Textures/Mobs/Customization/kemonomimi-ears.rsi/goathornstone2.png b/Resources/Textures/Mobs/Customization/kemonomimi-ears.rsi/goathornstone2.png new file mode 100644 index 00000000000..c260f4e98de Binary files /dev/null and b/Resources/Textures/Mobs/Customization/kemonomimi-ears.rsi/goathornstone2.png differ diff --git a/Resources/Textures/Mobs/Customization/kemonomimi-ears.rsi/meta.json b/Resources/Textures/Mobs/Customization/kemonomimi-ears.rsi/meta.json new file mode 100644 index 00000000000..fcee2ae217f --- /dev/null +++ b/Resources/Textures/Mobs/Customization/kemonomimi-ears.rsi/meta.json @@ -0,0 +1,35 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Body parts by @Kilath", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "bullishhorns", + "directions": 4 + }, + { + "name": "bunnyearstone1", + "directions": 4 + }, + { + "name": "bunnyearstone2", + "directions": 4 + }, + { + "name": "foxears", + "directions": 4 + }, + { + "name": "goathornstone1", + "directions": 4 + }, + { + "name": "goathornstone2", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Mobs/Customization/kemonomimi-tails.rsi/bunnytail.png b/Resources/Textures/Mobs/Customization/kemonomimi-tails.rsi/bunnytail.png new file mode 100644 index 00000000000..220acb476fb Binary files /dev/null and b/Resources/Textures/Mobs/Customization/kemonomimi-tails.rsi/bunnytail.png differ diff --git a/Resources/Textures/Mobs/Customization/kemonomimi-tails.rsi/doblefurtailtone1.png b/Resources/Textures/Mobs/Customization/kemonomimi-tails.rsi/doblefurtailtone1.png new file mode 100644 index 00000000000..88852ce6001 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/kemonomimi-tails.rsi/doblefurtailtone1.png differ diff --git a/Resources/Textures/Mobs/Customization/kemonomimi-tails.rsi/doblefurtailtone2.png b/Resources/Textures/Mobs/Customization/kemonomimi-tails.rsi/doblefurtailtone2.png new file mode 100644 index 00000000000..138e64bcf8a Binary files /dev/null and b/Resources/Textures/Mobs/Customization/kemonomimi-tails.rsi/doblefurtailtone2.png differ diff --git a/Resources/Textures/Mobs/Customization/kemonomimi-tails.rsi/fluffytail.png b/Resources/Textures/Mobs/Customization/kemonomimi-tails.rsi/fluffytail.png new file mode 100644 index 00000000000..227add91f3a Binary files /dev/null and b/Resources/Textures/Mobs/Customization/kemonomimi-tails.rsi/fluffytail.png differ diff --git a/Resources/Textures/Mobs/Customization/kemonomimi-tails.rsi/foxninetailstone1.png b/Resources/Textures/Mobs/Customization/kemonomimi-tails.rsi/foxninetailstone1.png new file mode 100644 index 00000000000..4faf8ce5b54 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/kemonomimi-tails.rsi/foxninetailstone1.png differ diff --git a/Resources/Textures/Mobs/Customization/kemonomimi-tails.rsi/foxninetailstone2.png b/Resources/Textures/Mobs/Customization/kemonomimi-tails.rsi/foxninetailstone2.png new file mode 100644 index 00000000000..d391c48368b Binary files /dev/null and b/Resources/Textures/Mobs/Customization/kemonomimi-tails.rsi/foxninetailstone2.png differ diff --git a/Resources/Textures/Mobs/Customization/kemonomimi-tails.rsi/foxthreetailstone1.png b/Resources/Textures/Mobs/Customization/kemonomimi-tails.rsi/foxthreetailstone1.png new file mode 100644 index 00000000000..68e03d1d9e6 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/kemonomimi-tails.rsi/foxthreetailstone1.png differ diff --git a/Resources/Textures/Mobs/Customization/kemonomimi-tails.rsi/foxthreetailstone2.png b/Resources/Textures/Mobs/Customization/kemonomimi-tails.rsi/foxthreetailstone2.png new file mode 100644 index 00000000000..b309c9d628f Binary files /dev/null and b/Resources/Textures/Mobs/Customization/kemonomimi-tails.rsi/foxthreetailstone2.png differ diff --git a/Resources/Textures/Mobs/Customization/kemonomimi-tails.rsi/foxtwotailstone1.png b/Resources/Textures/Mobs/Customization/kemonomimi-tails.rsi/foxtwotailstone1.png new file mode 100644 index 00000000000..a87f5316cae Binary files /dev/null and b/Resources/Textures/Mobs/Customization/kemonomimi-tails.rsi/foxtwotailstone1.png differ diff --git a/Resources/Textures/Mobs/Customization/kemonomimi-tails.rsi/foxtwotailstone2.png b/Resources/Textures/Mobs/Customization/kemonomimi-tails.rsi/foxtwotailstone2.png new file mode 100644 index 00000000000..07fc4877c8c Binary files /dev/null and b/Resources/Textures/Mobs/Customization/kemonomimi-tails.rsi/foxtwotailstone2.png differ diff --git a/Resources/Textures/Mobs/Customization/kemonomimi-tails.rsi/horsetailculty.png b/Resources/Textures/Mobs/Customization/kemonomimi-tails.rsi/horsetailculty.png new file mode 100644 index 00000000000..b9e788df70e Binary files /dev/null and b/Resources/Textures/Mobs/Customization/kemonomimi-tails.rsi/horsetailculty.png differ diff --git a/Resources/Textures/Mobs/Customization/kemonomimi-tails.rsi/horsetaillong.png b/Resources/Textures/Mobs/Customization/kemonomimi-tails.rsi/horsetaillong.png new file mode 100644 index 00000000000..4f67cbc7cda Binary files /dev/null and b/Resources/Textures/Mobs/Customization/kemonomimi-tails.rsi/horsetaillong.png differ diff --git a/Resources/Textures/Mobs/Customization/kemonomimi-tails.rsi/meta.json b/Resources/Textures/Mobs/Customization/kemonomimi-tails.rsi/meta.json new file mode 100644 index 00000000000..29005fb2115 --- /dev/null +++ b/Resources/Textures/Mobs/Customization/kemonomimi-tails.rsi/meta.json @@ -0,0 +1,71 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Body parts by @Kilath", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "bunnytail", + "directions": 4 + }, + { + "name": "doblefurtailtone1", + "directions": 4 + }, + { + "name": "doblefurtailtone2", + "directions": 4 + }, + { + "name": "fluffytail", + "directions": 4 + }, + { + "name": "foxninetailstone1", + "directions": 4 + }, + { + "name": "foxninetailstone2", + "directions": 4 + }, + { + "name": "foxthreetailstone1", + "directions": 4 + }, + { + "name": "foxthreetailstone2", + "directions": 4 + }, + { + "name": "foxtwotailstone1", + "directions": 4 + }, + { + "name": "foxtwotailstone2", + "directions": 4 + }, + { + "name": "horsetailculty", + "directions": 4 + }, + { + "name": "horsetaillong", + "directions": 4 + }, + { + "name": "sharktail", + "directions": 4 + }, + { + "name": "tasseltailtone1", + "directions": 4 + }, + { + "name": "tasseltailtone2", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Mobs/Customization/kemonomimi-tails.rsi/sharktail.png b/Resources/Textures/Mobs/Customization/kemonomimi-tails.rsi/sharktail.png new file mode 100644 index 00000000000..9ebdb7bf79b Binary files /dev/null and b/Resources/Textures/Mobs/Customization/kemonomimi-tails.rsi/sharktail.png differ diff --git a/Resources/Textures/Mobs/Customization/kemonomimi-tails.rsi/tasseltailtone1.png b/Resources/Textures/Mobs/Customization/kemonomimi-tails.rsi/tasseltailtone1.png new file mode 100644 index 00000000000..d45b14f99ba Binary files /dev/null and b/Resources/Textures/Mobs/Customization/kemonomimi-tails.rsi/tasseltailtone1.png differ diff --git a/Resources/Textures/Mobs/Customization/kemonomimi-tails.rsi/tasseltailtone2.png b/Resources/Textures/Mobs/Customization/kemonomimi-tails.rsi/tasseltailtone2.png new file mode 100644 index 00000000000..edb0e539bd0 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/kemonomimi-tails.rsi/tasseltailtone2.png differ diff --git a/Resources/Textures/Mobs/Customization/reptilian_parts.rsi/frills_axolotl.png b/Resources/Textures/Mobs/Customization/reptilian_parts.rsi/frills_axolotl.png index f7f54acdaed..d61b60824c9 100644 Binary files a/Resources/Textures/Mobs/Customization/reptilian_parts.rsi/frills_axolotl.png and b/Resources/Textures/Mobs/Customization/reptilian_parts.rsi/frills_axolotl.png differ diff --git a/Resources/Textures/Mobs/Customization/reptilian_parts.rsi/frills_neckfull.png b/Resources/Textures/Mobs/Customization/reptilian_parts.rsi/frills_neckfull.png new file mode 100644 index 00000000000..dfbe573096b Binary files /dev/null and b/Resources/Textures/Mobs/Customization/reptilian_parts.rsi/frills_neckfull.png differ diff --git a/Resources/Textures/Mobs/Customization/reptilian_parts.rsi/meta.json b/Resources/Textures/Mobs/Customization/reptilian_parts.rsi/meta.json index 8eaac10cd94..3770a771d8e 100644 --- a/Resources/Textures/Mobs/Customization/reptilian_parts.rsi/meta.json +++ b/Resources/Textures/Mobs/Customization/reptilian_parts.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "https://github.com/Skyrat-SS13/Skyrat-tg/tree/40e3cdbb15b8bc0d5ef2fb46133adf805bda5297, while Argali, Ayrshire, Myrsore and Bighorn are drawn by Ubaser, and Kobold Ears are drawn by Pigeonpeas. Body_underbelly made by Nairod(github) for SS14. Large drawn by Ubaser. Wagging tail by SonicDC.", + "copyright": "https://github.com/Skyrat-SS13/Skyrat-tg/tree/40e3cdbb15b8bc0d5ef2fb46133adf805bda5297, while Argali, Ayrshire, Myrsore and Bighorn are drawn by Ubaser, and Kobold Ears are drawn by Pigeonpeas. Body_underbelly made by Nairod(github) for SS14. Large drawn by Ubaser. Wagging tail by SonicDC. Splotch modified from Sharp by KittenColony(github). Frills neckfull come from: https://github.com/Bubberstation/Bubberstation/commit/8bc6b83404803466a560b694bf22ef3c0ac266a2", "size": { "x": 32, "y": 32 @@ -87,391 +87,391 @@ "name": "tail_smooth_wagging_primary", "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 - ], - [ - 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 - ] + [ + 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 + ], + [ + 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": "tail_smooth_wagging_secondary", "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 - ], - [ - 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 - ] + [ + 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 + ], + [ + 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": "tail_dtiger_wagging", - "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 - ], - [ - 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": "tail_dtiger_wagging", + "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 + ], + [ + 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": "tail_ltiger_wagging", - "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 - ], - [ - 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": "tail_ltiger_wagging", + "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 + ], + [ + 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": "tail_spikes_wagging", - "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 - ], - [ - 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": "tail_spikes_wagging", + "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 + ], + [ + 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": "snout_round", @@ -525,19 +525,19 @@ "name": "frills_divinity", "directions": 4 }, - { + { "name": "horns_double", "directions": 4 }, - { + { "name": "frills_axolotl", "directions": 4 }, - { + { "name": "frills_hood_primary", "directions": 4 }, - { + { "name": "frills_hood_secondary", "directions": 4 }, @@ -548,58 +548,70 @@ { "name": "body_tiger", "directions": 4 - }, - { - "name": "head_tiger", - "directions": 4 - }, - { - "name": "l_arm_tiger", - "directions": 4 - }, - { - "name": "l_leg_tiger", - "directions": 4 - }, - { - "name": "r_arm_tiger", - "directions": 4 - }, - { - "name": "horns_argali", - "directions": 4 - }, - { - "name": "horns_ayrshire", - "directions": 4 - }, - { - "name": "horns_myrsore", - "directions": 4 - }, - { - "name": "horns_bighorn", - "directions": 4 - }, - { - "name": "horns_kobold_ears", - "directions": 4 - }, - { - "name": "r_leg_tiger", - "directions": 4 - }, - { - "name": "horns_floppy_kobold_ears", - "directions": 4 - }, + }, + { + "name": "head_tiger", + "directions": 4 + }, + { + "name": "l_arm_tiger", + "directions": 4 + }, + { + "name": "l_leg_tiger", + "directions": 4 + }, + { + "name": "r_arm_tiger", + "directions": 4 + }, + { + "name": "horns_argali", + "directions": 4 + }, + { + "name": "horns_ayrshire", + "directions": 4 + }, + { + "name": "horns_myrsore", + "directions": 4 + }, + { + "name": "horns_bighorn", + "directions": 4 + }, + { + "name": "horns_kobold_ears", + "directions": 4 + }, + { + "name": "r_leg_tiger", + "directions": 4 + }, + { + "name": "horns_floppy_kobold_ears", + "directions": 4 + }, { "name": "body_underbelly", "directions": 4 - }, - { - "name": "body_backspikes", - "directions": 4 - } + }, + { + "name": "body_backspikes", + "directions": 4 + }, + { + "name": "snout_splotch_primary", + "directions": 4 + }, + { + "name": "snout_splotch_secondary", + "directions": 4 + }, + { + "name": "frills_neckfull", + "directions": 4 + } ] -} +} \ No newline at end of file diff --git a/Resources/Textures/Mobs/Customization/reptilian_parts.rsi/snout_splotch_primary.png b/Resources/Textures/Mobs/Customization/reptilian_parts.rsi/snout_splotch_primary.png new file mode 100644 index 00000000000..850b985e5dc Binary files /dev/null and b/Resources/Textures/Mobs/Customization/reptilian_parts.rsi/snout_splotch_primary.png differ diff --git a/Resources/Textures/Mobs/Customization/reptilian_parts.rsi/snout_splotch_secondary.png b/Resources/Textures/Mobs/Customization/reptilian_parts.rsi/snout_splotch_secondary.png new file mode 100644 index 00000000000..5a982ed3546 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/reptilian_parts.rsi/snout_splotch_secondary.png differ diff --git a/Resources/Textures/Mobs/Customization/vox_facial_hair.rsi/beard_s.png b/Resources/Textures/Mobs/Customization/vox_facial_hair.rsi/beard_s.png new file mode 100644 index 00000000000..92aeea8f360 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_facial_hair.rsi/beard_s.png differ diff --git a/Resources/Textures/Mobs/Customization/vox_facial_hair.rsi/colonel_s.png b/Resources/Textures/Mobs/Customization/vox_facial_hair.rsi/colonel_s.png new file mode 100644 index 00000000000..2e657d675af Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_facial_hair.rsi/colonel_s.png differ diff --git a/Resources/Textures/Mobs/Customization/vox_facial_hair.rsi/fu_s.png b/Resources/Textures/Mobs/Customization/vox_facial_hair.rsi/fu_s.png new file mode 100644 index 00000000000..87f97eeaeeb Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_facial_hair.rsi/fu_s.png differ diff --git a/Resources/Textures/Mobs/Customization/vox_facial_hair.rsi/mane_s.png b/Resources/Textures/Mobs/Customization/vox_facial_hair.rsi/mane_s.png new file mode 100644 index 00000000000..08b120f500e Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_facial_hair.rsi/mane_s.png differ diff --git a/Resources/Textures/Mobs/Customization/vox_facial_hair.rsi/meta.json b/Resources/Textures/Mobs/Customization/vox_facial_hair.rsi/meta.json index c52ad8a2a2e..64eebb88830 100644 --- a/Resources/Textures/Mobs/Customization/vox_facial_hair.rsi/meta.json +++ b/Resources/Textures/Mobs/Customization/vox_facial_hair.rsi/meta.json @@ -1 +1,31 @@ -{"version": 1, "size": {"x": 32, "y": 32}, "license": "CC-BY-SA-3.0", "copyright": "https://github.com/vgstation-coders/vgstation13/blob/02ff588d59b3c560c685d9ca75e882d32a72d8cb/icons/mob/human_face.dmi", "states": [{"name": "vox_beard_s", "directions": 4}, {"name": "vox_colonel_s", "directions": 4}, {"name": "vox_fu_s", "directions": 4}, {"name": "vox_neck_s", "directions": 4}, {"name": "vox_ruff_beard_s", "directions": 4}, {"name": "vox_ruff_beard_s2", "directions": 4}]} +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Paradise at https://github.com/ParadiseSS13/Paradise/blob/0f9ef5962f4422836c0a42f289fb24d018918cbc/icons/mob/sprite_accessories/vox/vox_facial_hair.dmi and greyscaled", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "colonel_s", + "directions": 4 + }, + { + "name": "fu_s", + "directions": 4 + }, + { + "name": "neck_s", + "directions": 4 + }, + { + "name": "beard_s", + "directions": 4 + }, + { + "name": "mane_s", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Mobs/Customization/vox_facial_hair.rsi/neck_s.png b/Resources/Textures/Mobs/Customization/vox_facial_hair.rsi/neck_s.png new file mode 100644 index 00000000000..f630e8ce8bc Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_facial_hair.rsi/neck_s.png differ diff --git a/Resources/Textures/Mobs/Customization/vox_facial_hair.rsi/vox_beard_s.png b/Resources/Textures/Mobs/Customization/vox_facial_hair.rsi/vox_beard_s.png deleted file mode 100644 index 8e922e58dea..00000000000 Binary files a/Resources/Textures/Mobs/Customization/vox_facial_hair.rsi/vox_beard_s.png and /dev/null differ diff --git a/Resources/Textures/Mobs/Customization/vox_facial_hair.rsi/vox_colonel_s.png b/Resources/Textures/Mobs/Customization/vox_facial_hair.rsi/vox_colonel_s.png deleted file mode 100644 index 8de4dd68030..00000000000 Binary files a/Resources/Textures/Mobs/Customization/vox_facial_hair.rsi/vox_colonel_s.png and /dev/null differ diff --git a/Resources/Textures/Mobs/Customization/vox_facial_hair.rsi/vox_fu_s.png b/Resources/Textures/Mobs/Customization/vox_facial_hair.rsi/vox_fu_s.png deleted file mode 100644 index e49e84baf0d..00000000000 Binary files a/Resources/Textures/Mobs/Customization/vox_facial_hair.rsi/vox_fu_s.png and /dev/null differ diff --git a/Resources/Textures/Mobs/Customization/vox_facial_hair.rsi/vox_neck_s.png b/Resources/Textures/Mobs/Customization/vox_facial_hair.rsi/vox_neck_s.png deleted file mode 100644 index 9009717cee3..00000000000 Binary files a/Resources/Textures/Mobs/Customization/vox_facial_hair.rsi/vox_neck_s.png and /dev/null differ diff --git a/Resources/Textures/Mobs/Customization/vox_facial_hair.rsi/vox_ruff_beard_s.png b/Resources/Textures/Mobs/Customization/vox_facial_hair.rsi/vox_ruff_beard_s.png deleted file mode 100644 index 365f134c44f..00000000000 Binary files a/Resources/Textures/Mobs/Customization/vox_facial_hair.rsi/vox_ruff_beard_s.png and /dev/null differ diff --git a/Resources/Textures/Mobs/Customization/vox_facial_hair.rsi/vox_ruff_beard_s2.png b/Resources/Textures/Mobs/Customization/vox_facial_hair.rsi/vox_ruff_beard_s2.png deleted file mode 100644 index 0858c19f052..00000000000 Binary files a/Resources/Textures/Mobs/Customization/vox_facial_hair.rsi/vox_ruff_beard_s2.png and /dev/null differ diff --git a/Resources/Textures/Mobs/Customization/vox_hair.rsi/afro_s.png b/Resources/Textures/Mobs/Customization/vox_hair.rsi/afro_s.png new file mode 100644 index 00000000000..74b09a0635a Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_hair.rsi/afro_s.png differ diff --git a/Resources/Textures/Mobs/Customization/vox_hair.rsi/braid_s.png b/Resources/Textures/Mobs/Customization/vox_hair.rsi/braid_s.png new file mode 100644 index 00000000000..ff2aa4acbc7 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_hair.rsi/braid_s.png differ diff --git a/Resources/Textures/Mobs/Customization/vox_hair.rsi/crestedquills_s.png b/Resources/Textures/Mobs/Customization/vox_hair.rsi/crestedquills_s.png new file mode 100644 index 00000000000..f089905438f Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_hair.rsi/crestedquills_s.png differ diff --git a/Resources/Textures/Mobs/Customization/vox_hair.rsi/emperorquills_s.png b/Resources/Textures/Mobs/Customization/vox_hair.rsi/emperorquills_s.png new file mode 100644 index 00000000000..899918e694c Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_hair.rsi/emperorquills_s.png differ diff --git a/Resources/Textures/Mobs/Customization/vox_hair.rsi/flowing_s.png b/Resources/Textures/Mobs/Customization/vox_hair.rsi/flowing_s.png new file mode 100644 index 00000000000..98139350d4e Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_hair.rsi/flowing_s.png differ diff --git a/Resources/Textures/Mobs/Customization/vox_hair.rsi/hawk_s.png b/Resources/Textures/Mobs/Customization/vox_hair.rsi/hawk_s.png new file mode 100644 index 00000000000..c262fc1d918 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_hair.rsi/hawk_s.png differ diff --git a/Resources/Textures/Mobs/Customization/vox_hair.rsi/horns_s.png b/Resources/Textures/Mobs/Customization/vox_hair.rsi/horns_s.png new file mode 100644 index 00000000000..8891151c9fd Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_hair.rsi/horns_s.png differ diff --git a/Resources/Textures/Mobs/Customization/vox_hair.rsi/keelquills_s.png b/Resources/Textures/Mobs/Customization/vox_hair.rsi/keelquills_s.png new file mode 100644 index 00000000000..c3c947bcce9 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_hair.rsi/keelquills_s.png differ diff --git a/Resources/Textures/Mobs/Customization/vox_hair.rsi/keetquills_s.png b/Resources/Textures/Mobs/Customization/vox_hair.rsi/keetquills_s.png new file mode 100644 index 00000000000..910542dde13 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_hair.rsi/keetquills_s.png differ diff --git a/Resources/Textures/Mobs/Customization/vox_hair.rsi/kingly_s.png b/Resources/Textures/Mobs/Customization/vox_hair.rsi/kingly_s.png new file mode 100644 index 00000000000..1d0a1d8d894 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_hair.rsi/kingly_s.png differ diff --git a/Resources/Textures/Mobs/Customization/vox_hair.rsi/long_braid_s.png b/Resources/Textures/Mobs/Customization/vox_hair.rsi/long_braid_s.png new file mode 100644 index 00000000000..3df31052dbe Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_hair.rsi/long_braid_s.png differ diff --git a/Resources/Textures/Mobs/Customization/vox_hair.rsi/mange_s.png b/Resources/Textures/Mobs/Customization/vox_hair.rsi/mange_s.png new file mode 100644 index 00000000000..afa934e8807 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_hair.rsi/mange_s.png differ diff --git a/Resources/Textures/Mobs/Customization/vox_hair.rsi/meta.json b/Resources/Textures/Mobs/Customization/vox_hair.rsi/meta.json index 2f141784244..9b08260bd64 100644 --- a/Resources/Textures/Mobs/Customization/vox_hair.rsi/meta.json +++ b/Resources/Textures/Mobs/Customization/vox_hair.rsi/meta.json @@ -1 +1,99 @@ -{"version": 1, "size": {"x": 32, "y": 32}, "license": "CC-BY-SA-3.0", "copyright": "https://github.com/vgstation-coders/vgstation13/blob/02ff588d59b3c560c685d9ca75e882d32a72d8cb/icons/mob/human_face.dmi", "states": [{"name": "vox_afro_s", "directions": 4}, {"name": "vox_afro_s2", "directions": 4}, {"name": "vox_bald_s", "directions": 4}, {"name": "vox_cropped_s", "directions": 4}, {"name": "vox_cropped_s2", "directions": 4}, {"name": "vox_horns_s", "directions": 4}, {"name": "vox_horns_s2", "directions": 4}, {"name": "vox_kingly_s", "directions": 4}, {"name": "vox_kingly_s2", "directions": 4}, {"name": "vox_mange_s", "directions": 4}, {"name": "vox_mange_s2", "directions": 4}, {"name": "vox_mohawk_s", "directions": 4}, {"name": "vox_mohawk_s2", "directions": 4}, {"name": "vox_nights_s", "directions": 4}, {"name": "vox_nights_s2", "directions": 4}, {"name": "vox_pony_s", "directions": 4}, {"name": "vox_pony_s2", "directions": 4}, {"name": "vox_rows_s", "directions": 4}, {"name": "vox_rows_s2", "directions": 4}, {"name": "vox_ruff_hawk_s", "directions": 4}, {"name": "vox_ruff_hawk_s2", "directions": 4}, {"name": "vox_shortquills_s", "directions": 4}, {"name": "vox_shortquills_s2", "directions": 4}, {"name": "vox_surf_s", "directions": 4}, {"name": "vox_surf_s2", "directions": 4}, {"name": "vox_yasu_s", "directions": 4}, {"name": "vox_yasu_s2", "directions": 4}]} +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Paradise at https://github.com/ParadiseSS13/Paradise/blob/dcd1f5d88a8c5ba9634fc3fce67a76ada45f71dc/icons/mob/sprite_accessories/vox/vox_hair.dmi and greyscaled", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "crestedquills_s", + "directions": 4 + }, + { + "name": "emperorquills_s", + "directions": 4 + }, + { + "name": "keelquills_s", + "directions": 4 + }, + { + "name": "keetquills_s", + "directions": 4 + }, + { + "name": "shortquills_s", + "directions": 4 + }, + { + "name": "tielquills_s", + "directions": 4 + }, + { + "name": "kingly_s", + "directions": 4 + }, + { + "name": "afro_s", + "directions": 4 + }, + { + "name": "yasu_s", + "directions": 4 + }, + { + "name": "razor_s", + "directions": 4 + }, + { + "name": "razor_clipped_s", + "directions": 4 + }, + { + "name": "mohawk_s", + "directions": 4 + }, + { + "name": "horns_s", + "directions": 4 + }, + { + "name": "nights_s", + "directions": 4 + }, + { + "name": "hawk_s", + "directions": 4 + }, + { + "name": "long_braid_s", + "directions": 4 + }, + { + "name": "short_braid_s", + "directions": 4 + }, + { + "name": "mange_s", + "directions": 4 + }, + { + "name": "ponytail_s", + "directions": 4 + }, + { + "name": "braid_s", + "directions": 4 + }, + { + "name": "surf_s", + "directions": 4 + }, + { + "name": "flowing_s", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Mobs/Customization/vox_hair.rsi/mohawk_s.png b/Resources/Textures/Mobs/Customization/vox_hair.rsi/mohawk_s.png new file mode 100644 index 00000000000..b8466620b8d Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_hair.rsi/mohawk_s.png differ diff --git a/Resources/Textures/Mobs/Customization/vox_hair.rsi/nights_s.png b/Resources/Textures/Mobs/Customization/vox_hair.rsi/nights_s.png new file mode 100644 index 00000000000..68d2654dcd1 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_hair.rsi/nights_s.png differ diff --git a/Resources/Textures/Mobs/Customization/vox_hair.rsi/ponytail_s.png b/Resources/Textures/Mobs/Customization/vox_hair.rsi/ponytail_s.png new file mode 100644 index 00000000000..316f08fe9a5 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_hair.rsi/ponytail_s.png differ diff --git a/Resources/Textures/Mobs/Customization/vox_hair.rsi/razor_clipped_s.png b/Resources/Textures/Mobs/Customization/vox_hair.rsi/razor_clipped_s.png new file mode 100644 index 00000000000..e5ffe57daa0 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_hair.rsi/razor_clipped_s.png differ diff --git a/Resources/Textures/Mobs/Customization/vox_hair.rsi/razor_s.png b/Resources/Textures/Mobs/Customization/vox_hair.rsi/razor_s.png new file mode 100644 index 00000000000..0b57cec2c12 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_hair.rsi/razor_s.png differ diff --git a/Resources/Textures/Mobs/Customization/vox_hair.rsi/short_braid_s.png b/Resources/Textures/Mobs/Customization/vox_hair.rsi/short_braid_s.png new file mode 100644 index 00000000000..6f7a1e86ca3 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_hair.rsi/short_braid_s.png differ diff --git a/Resources/Textures/Mobs/Customization/vox_hair.rsi/shortquills_s.png b/Resources/Textures/Mobs/Customization/vox_hair.rsi/shortquills_s.png new file mode 100644 index 00000000000..a0d496aeed8 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_hair.rsi/shortquills_s.png differ diff --git a/Resources/Textures/Mobs/Customization/vox_hair.rsi/surf_s.png b/Resources/Textures/Mobs/Customization/vox_hair.rsi/surf_s.png new file mode 100644 index 00000000000..712ccb542f3 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_hair.rsi/surf_s.png differ diff --git a/Resources/Textures/Mobs/Customization/vox_hair.rsi/tielquills_s.png b/Resources/Textures/Mobs/Customization/vox_hair.rsi/tielquills_s.png new file mode 100644 index 00000000000..aa121bd3313 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_hair.rsi/tielquills_s.png differ diff --git a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_afro_s.png b/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_afro_s.png deleted file mode 100644 index 60b9b18c21e..00000000000 Binary files a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_afro_s.png and /dev/null differ diff --git a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_afro_s2.png b/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_afro_s2.png deleted file mode 100644 index 0858c19f052..00000000000 Binary files a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_afro_s2.png and /dev/null differ diff --git a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_bald_s.png b/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_bald_s.png deleted file mode 100644 index 0858c19f052..00000000000 Binary files a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_bald_s.png and /dev/null differ diff --git a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_cropped_s.png b/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_cropped_s.png deleted file mode 100644 index 67574355ee4..00000000000 Binary files a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_cropped_s.png and /dev/null differ diff --git a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_cropped_s2.png b/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_cropped_s2.png deleted file mode 100644 index 0858c19f052..00000000000 Binary files a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_cropped_s2.png and /dev/null differ diff --git a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_horns_s.png b/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_horns_s.png deleted file mode 100644 index dbb4ae8f28e..00000000000 Binary files a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_horns_s.png and /dev/null differ diff --git a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_horns_s2.png b/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_horns_s2.png deleted file mode 100644 index 0858c19f052..00000000000 Binary files a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_horns_s2.png and /dev/null differ diff --git a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_kingly_s.png b/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_kingly_s.png deleted file mode 100644 index 3f35429e14f..00000000000 Binary files a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_kingly_s.png and /dev/null differ diff --git a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_kingly_s2.png b/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_kingly_s2.png deleted file mode 100644 index 0858c19f052..00000000000 Binary files a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_kingly_s2.png and /dev/null differ diff --git a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_mange_s.png b/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_mange_s.png deleted file mode 100644 index 138c58e690a..00000000000 Binary files a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_mange_s.png and /dev/null differ diff --git a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_mange_s2.png b/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_mange_s2.png deleted file mode 100644 index 0858c19f052..00000000000 Binary files a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_mange_s2.png and /dev/null differ diff --git a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_mohawk_s.png b/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_mohawk_s.png deleted file mode 100644 index 0a5589b0bae..00000000000 Binary files a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_mohawk_s.png and /dev/null differ diff --git a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_mohawk_s2.png b/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_mohawk_s2.png deleted file mode 100644 index 0858c19f052..00000000000 Binary files a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_mohawk_s2.png and /dev/null differ diff --git a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_nights_s.png b/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_nights_s.png deleted file mode 100644 index 0a587eafceb..00000000000 Binary files a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_nights_s.png and /dev/null differ diff --git a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_nights_s2.png b/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_nights_s2.png deleted file mode 100644 index 0858c19f052..00000000000 Binary files a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_nights_s2.png and /dev/null differ diff --git a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_pony_s.png b/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_pony_s.png deleted file mode 100644 index a9ff211389f..00000000000 Binary files a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_pony_s.png and /dev/null differ diff --git a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_pony_s2.png b/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_pony_s2.png deleted file mode 100644 index 0858c19f052..00000000000 Binary files a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_pony_s2.png and /dev/null differ diff --git a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_rows_s.png b/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_rows_s.png deleted file mode 100644 index cee8b9a1030..00000000000 Binary files a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_rows_s.png and /dev/null differ diff --git a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_rows_s2.png b/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_rows_s2.png deleted file mode 100644 index 0858c19f052..00000000000 Binary files a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_rows_s2.png and /dev/null differ diff --git a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_ruff_hawk_s.png b/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_ruff_hawk_s.png deleted file mode 100644 index 41c3cb6decc..00000000000 Binary files a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_ruff_hawk_s.png and /dev/null differ diff --git a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_ruff_hawk_s2.png b/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_ruff_hawk_s2.png deleted file mode 100644 index 0858c19f052..00000000000 Binary files a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_ruff_hawk_s2.png and /dev/null differ diff --git a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_shortquills_s.png b/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_shortquills_s.png deleted file mode 100644 index c83ef673a54..00000000000 Binary files a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_shortquills_s.png and /dev/null differ diff --git a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_shortquills_s2.png b/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_shortquills_s2.png deleted file mode 100644 index 0858c19f052..00000000000 Binary files a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_shortquills_s2.png and /dev/null differ diff --git a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_surf_s.png b/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_surf_s.png deleted file mode 100644 index df2191cacd2..00000000000 Binary files a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_surf_s.png and /dev/null differ diff --git a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_surf_s2.png b/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_surf_s2.png deleted file mode 100644 index 0858c19f052..00000000000 Binary files a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_surf_s2.png and /dev/null differ diff --git a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_yasu_s.png b/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_yasu_s.png deleted file mode 100644 index 6461305e85e..00000000000 Binary files a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_yasu_s.png and /dev/null differ diff --git a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_yasu_s2.png b/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_yasu_s2.png deleted file mode 100644 index 0858c19f052..00000000000 Binary files a/Resources/Textures/Mobs/Customization/vox_hair.rsi/vox_yasu_s2.png and /dev/null differ diff --git a/Resources/Textures/Mobs/Customization/vox_hair.rsi/yasu_s.png b/Resources/Textures/Mobs/Customization/vox_hair.rsi/yasu_s.png new file mode 100644 index 00000000000..6ee3de1dad2 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_hair.rsi/yasu_s.png differ diff --git a/Resources/Textures/Mobs/Customization/vox_parts.rsi/beak.png b/Resources/Textures/Mobs/Customization/vox_parts.rsi/beak.png new file mode 100644 index 00000000000..23744679b68 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_parts.rsi/beak.png differ diff --git a/Resources/Textures/Mobs/Customization/vox_parts.rsi/l_arm.png b/Resources/Textures/Mobs/Customization/vox_parts.rsi/l_arm.png new file mode 100644 index 00000000000..e35fb3c6bfb Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_parts.rsi/l_arm.png differ diff --git a/Resources/Textures/Mobs/Customization/vox_parts.rsi/l_foot.png b/Resources/Textures/Mobs/Customization/vox_parts.rsi/l_foot.png new file mode 100644 index 00000000000..5ab81e36168 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_parts.rsi/l_foot.png differ diff --git a/Resources/Textures/Mobs/Customization/vox_parts.rsi/l_hand.png b/Resources/Textures/Mobs/Customization/vox_parts.rsi/l_hand.png new file mode 100644 index 00000000000..660da8a5d11 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_parts.rsi/l_hand.png differ diff --git a/Resources/Textures/Mobs/Customization/vox_parts.rsi/l_leg.png b/Resources/Textures/Mobs/Customization/vox_parts.rsi/l_leg.png new file mode 100644 index 00000000000..1a81369838c Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_parts.rsi/l_leg.png differ diff --git a/Resources/Textures/Mobs/Customization/vox_parts.rsi/meta.json b/Resources/Textures/Mobs/Customization/vox_parts.rsi/meta.json new file mode 100644 index 00000000000..fd5c14b6a35 --- /dev/null +++ b/Resources/Textures/Mobs/Customization/vox_parts.rsi/meta.json @@ -0,0 +1,55 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/vgstation-coders/vgstation13 at 02ff588d59b3c560c685d9ca75e882d32a72d8cb, modified by Bhijn, Errant and Flareguy", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "beak", + "directions": 4 + }, + { + "name": "l_arm", + "directions": 4 + }, + { + "name": "l_foot", + "directions": 4 + }, + { + "name": "l_hand", + "directions": 4 + }, + { + "name": "l_leg", + "directions": 4 + }, + { + "name": "r_arm", + "directions": 4 + }, + { + "name": "r_foot", + "directions": 4 + }, + { + "name": "r_hand", + "directions": 4 + }, + { + "name": "r_leg", + "directions": 4 + }, + { + "name": "tail", + "directions": 4 + }, + { + "name": "tail_stenciled", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Mobs/Customization/vox_parts.rsi/r_arm.png b/Resources/Textures/Mobs/Customization/vox_parts.rsi/r_arm.png new file mode 100644 index 00000000000..c8c70752f44 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_parts.rsi/r_arm.png differ diff --git a/Resources/Textures/Mobs/Customization/vox_parts.rsi/r_foot.png b/Resources/Textures/Mobs/Customization/vox_parts.rsi/r_foot.png new file mode 100644 index 00000000000..58dbe90b090 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_parts.rsi/r_foot.png differ diff --git a/Resources/Textures/Mobs/Customization/vox_parts.rsi/r_hand.png b/Resources/Textures/Mobs/Customization/vox_parts.rsi/r_hand.png new file mode 100644 index 00000000000..e433456bf22 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_parts.rsi/r_hand.png differ diff --git a/Resources/Textures/Mobs/Customization/vox_parts.rsi/r_leg.png b/Resources/Textures/Mobs/Customization/vox_parts.rsi/r_leg.png new file mode 100644 index 00000000000..d6167531291 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_parts.rsi/r_leg.png differ diff --git a/Resources/Textures/Mobs/Customization/vox_parts.rsi/tail.png b/Resources/Textures/Mobs/Customization/vox_parts.rsi/tail.png new file mode 100644 index 00000000000..0e63d3327bd Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_parts.rsi/tail.png differ diff --git a/Resources/Textures/Mobs/Customization/vox_parts.rsi/tail_stenciled.png b/Resources/Textures/Mobs/Customization/vox_parts.rsi/tail_stenciled.png new file mode 100644 index 00000000000..50627ac5220 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_parts.rsi/tail_stenciled.png differ diff --git a/Resources/Textures/Mobs/Customization/vox_tattoos.rsi/heart_l_arm.png b/Resources/Textures/Mobs/Customization/vox_tattoos.rsi/heart_l_arm.png new file mode 100644 index 00000000000..0ff82bbaf26 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_tattoos.rsi/heart_l_arm.png differ diff --git a/Resources/Textures/Mobs/Customization/vox_tattoos.rsi/heart_r_arm.png b/Resources/Textures/Mobs/Customization/vox_tattoos.rsi/heart_r_arm.png new file mode 100644 index 00000000000..774c96692c1 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_tattoos.rsi/heart_r_arm.png differ diff --git a/Resources/Textures/Mobs/Customization/vox_tattoos.rsi/hive_s.png b/Resources/Textures/Mobs/Customization/vox_tattoos.rsi/hive_s.png new file mode 100644 index 00000000000..8361f55864b Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_tattoos.rsi/hive_s.png differ diff --git a/Resources/Textures/Mobs/Customization/vox_tattoos.rsi/meta.json b/Resources/Textures/Mobs/Customization/vox_tattoos.rsi/meta.json new file mode 100644 index 00000000000..725fbb6a0db --- /dev/null +++ b/Resources/Textures/Mobs/Customization/vox_tattoos.rsi/meta.json @@ -0,0 +1,27 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Paradise at https://github.com/ParadiseSS13/Paradise/blob/ef7a4d962915cb36b138eeb59663f0053d4906fe/icons/mob/sprite_accessories/vox/vox_body_markings.dmi and modified by Flareguy", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "heart_l_arm", + "directions": 4 + }, + { + "name": "heart_r_arm", + "directions": 4 + }, + { + "name": "hive_s", + "directions": 4 + }, + { + "name": "nightling_s", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Mobs/Customization/vox_tattoos.rsi/nightling_s.png b/Resources/Textures/Mobs/Customization/vox_tattoos.rsi/nightling_s.png new file mode 100644 index 00000000000..72b0b30fd5f Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_tattoos.rsi/nightling_s.png differ diff --git a/Resources/Textures/Mobs/Demons/glimmer_wisp.rsi/meta.json b/Resources/Textures/Mobs/Demons/glimmer_wisp.rsi/meta.json new file mode 100644 index 00000000000..4f2cce97e1c --- /dev/null +++ b/Resources/Textures/Mobs/Demons/glimmer_wisp.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "license": "CC-BY-SA-4.0", + "copyright": "Created by @Vordenburg (github) for Nyanotrasen", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "willowisp" + } + ] +} diff --git a/Resources/Textures/Mobs/Demons/glimmer_wisp.rsi/willowisp.png b/Resources/Textures/Mobs/Demons/glimmer_wisp.rsi/willowisp.png new file mode 100644 index 00000000000..6ee16245edb Binary files /dev/null and b/Resources/Textures/Mobs/Demons/glimmer_wisp.rsi/willowisp.png differ diff --git a/Resources/Textures/Mobs/Demons/imp.rsi/imp.png b/Resources/Textures/Mobs/Demons/imp.rsi/imp.png new file mode 100644 index 00000000000..575c223ee87 Binary files /dev/null and b/Resources/Textures/Mobs/Demons/imp.rsi/imp.png differ diff --git a/Resources/Textures/Mobs/Demons/imp.rsi/meta.json b/Resources/Textures/Mobs/Demons/imp.rsi/meta.json new file mode 100644 index 00000000000..98f33679c7b --- /dev/null +++ b/Resources/Textures/Mobs/Demons/imp.rsi/meta.json @@ -0,0 +1,15 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Created by ghost581(Discord)", + "states": [ + { + "name": "imp", + "delays": [[0.3, 0.3, 0.3, 0.3]] + } + ] +} diff --git a/Resources/Textures/Mobs/Species/Harpy/organs.rsi/lung-l.png b/Resources/Textures/Mobs/Species/Harpy/organs.rsi/lung-l.png new file mode 100644 index 00000000000..32aca484b9f Binary files /dev/null and b/Resources/Textures/Mobs/Species/Harpy/organs.rsi/lung-l.png differ diff --git a/Resources/Textures/Mobs/Species/Harpy/organs.rsi/lung-r.png b/Resources/Textures/Mobs/Species/Harpy/organs.rsi/lung-r.png new file mode 100644 index 00000000000..7e29649ccd8 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Harpy/organs.rsi/lung-r.png differ diff --git a/Resources/Textures/Mobs/Species/Harpy/organs.rsi/meta.json b/Resources/Textures/Mobs/Species/Harpy/organs.rsi/meta.json new file mode 100644 index 00000000000..e639085d8d0 --- /dev/null +++ b/Resources/Textures/Mobs/Species/Harpy/organs.rsi/meta.json @@ -0,0 +1,17 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation and cev-eris at https://github.com/tgstation/tgstation/commit/c4b7f3c41b6742aca260fe60cc358a778ba9b8c8 and https://github.com/discordia-space/CEV-Eris/commit/476e374cea95ff5e8b1603c48342bf700e2cd7af", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "lung-l" + }, + { + "name": "lung-r" + } + ] +} diff --git a/Resources/Textures/Mobs/Species/Harpy/parts.rsi/full.png b/Resources/Textures/Mobs/Species/Harpy/parts.rsi/full.png new file mode 100644 index 00000000000..e358746ec8b Binary files /dev/null and b/Resources/Textures/Mobs/Species/Harpy/parts.rsi/full.png differ diff --git a/Resources/Textures/Mobs/Species/Harpy/parts.rsi/head_f.png b/Resources/Textures/Mobs/Species/Harpy/parts.rsi/head_f.png new file mode 100644 index 00000000000..b705d2d50e8 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Harpy/parts.rsi/head_f.png differ diff --git a/Resources/Textures/Mobs/Species/Harpy/parts.rsi/head_m.png b/Resources/Textures/Mobs/Species/Harpy/parts.rsi/head_m.png new file mode 100644 index 00000000000..e555d030bea Binary files /dev/null and b/Resources/Textures/Mobs/Species/Harpy/parts.rsi/head_m.png differ diff --git a/Resources/Textures/Mobs/Species/Harpy/parts.rsi/l_arm.png b/Resources/Textures/Mobs/Species/Harpy/parts.rsi/l_arm.png new file mode 100644 index 00000000000..87c10adfa22 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Harpy/parts.rsi/l_arm.png differ diff --git a/Resources/Textures/Mobs/Species/Harpy/parts.rsi/l_foot.png b/Resources/Textures/Mobs/Species/Harpy/parts.rsi/l_foot.png new file mode 100644 index 00000000000..a03b643ad62 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Harpy/parts.rsi/l_foot.png differ diff --git a/Resources/Textures/Mobs/Species/Harpy/parts.rsi/l_hand.png b/Resources/Textures/Mobs/Species/Harpy/parts.rsi/l_hand.png new file mode 100644 index 00000000000..2e0ec001ce2 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Harpy/parts.rsi/l_hand.png differ diff --git a/Resources/Textures/Mobs/Species/Harpy/parts.rsi/l_leg.png b/Resources/Textures/Mobs/Species/Harpy/parts.rsi/l_leg.png new file mode 100644 index 00000000000..a70f92524b6 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Harpy/parts.rsi/l_leg.png differ diff --git a/Resources/Textures/Mobs/Species/Harpy/parts.rsi/meta.json b/Resources/Textures/Mobs/Species/Harpy/parts.rsi/meta.json new file mode 100644 index 00000000000..1463c57a060 --- /dev/null +++ b/Resources/Textures/Mobs/Species/Harpy/parts.rsi/meta.json @@ -0,0 +1,62 @@ +{ + "version": 2, + "license": "CC-BY-SA-3.0", + "copyright": "Original drawn by @robustyanka on Discord, modified by @pspritechologist", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "full" + }, + { + "name": "head_m", + "directions": 4 + }, + { + "name": "head_f", + "directions": 4 + }, + { + "name": "torso_m", + "directions": 4 + }, + { + "name": "torso_f", + "directions": 4 + }, + { + "name": "r_arm", + "directions": 4 + }, + { + "name": "l_arm", + "directions": 4 + }, + { + "name": "r_hand", + "directions": 4 + }, + { + "name": "l_hand", + "directions": 4 + }, + { + "name": "r_leg", + "directions": 4 + }, + { + "name": "l_leg", + "directions": 4 + }, + { + "name": "r_foot", + "directions": 4 + }, + { + "name": "l_foot", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Mobs/Species/Harpy/parts.rsi/r_arm.png b/Resources/Textures/Mobs/Species/Harpy/parts.rsi/r_arm.png new file mode 100644 index 00000000000..6a47ac86071 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Harpy/parts.rsi/r_arm.png differ diff --git a/Resources/Textures/Mobs/Species/Harpy/parts.rsi/r_foot.png b/Resources/Textures/Mobs/Species/Harpy/parts.rsi/r_foot.png new file mode 100644 index 00000000000..ef502c30f5c Binary files /dev/null and b/Resources/Textures/Mobs/Species/Harpy/parts.rsi/r_foot.png differ diff --git a/Resources/Textures/Mobs/Species/Harpy/parts.rsi/r_hand.png b/Resources/Textures/Mobs/Species/Harpy/parts.rsi/r_hand.png new file mode 100644 index 00000000000..2c16b27041c Binary files /dev/null and b/Resources/Textures/Mobs/Species/Harpy/parts.rsi/r_hand.png differ diff --git a/Resources/Textures/Mobs/Species/Harpy/parts.rsi/r_leg.png b/Resources/Textures/Mobs/Species/Harpy/parts.rsi/r_leg.png new file mode 100644 index 00000000000..9cdd3b85566 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Harpy/parts.rsi/r_leg.png differ diff --git a/Resources/Textures/Mobs/Species/Harpy/parts.rsi/torso_f.png b/Resources/Textures/Mobs/Species/Harpy/parts.rsi/torso_f.png new file mode 100644 index 00000000000..8cd598f06e9 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Harpy/parts.rsi/torso_f.png differ diff --git a/Resources/Textures/Mobs/Species/Harpy/parts.rsi/torso_m.png b/Resources/Textures/Mobs/Species/Harpy/parts.rsi/torso_m.png new file mode 100644 index 00000000000..9a30fbfb574 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Harpy/parts.rsi/torso_m.png differ diff --git a/Resources/Textures/Mobs/Species/Shadowkin/organs.rsi/appendix.png b/Resources/Textures/Mobs/Species/Shadowkin/organs.rsi/appendix.png new file mode 100644 index 00000000000..0d2ad309c74 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Shadowkin/organs.rsi/appendix.png differ diff --git a/Resources/Textures/Mobs/Species/Shadowkin/organs.rsi/brain.png b/Resources/Textures/Mobs/Species/Shadowkin/organs.rsi/brain.png new file mode 100644 index 00000000000..ac2806b79ce Binary files /dev/null and b/Resources/Textures/Mobs/Species/Shadowkin/organs.rsi/brain.png differ diff --git a/Resources/Textures/Mobs/Species/Shadowkin/organs.rsi/core.png b/Resources/Textures/Mobs/Species/Shadowkin/organs.rsi/core.png new file mode 100644 index 00000000000..ac2d7893fdb Binary files /dev/null and b/Resources/Textures/Mobs/Species/Shadowkin/organs.rsi/core.png differ diff --git a/Resources/Textures/Mobs/Species/Shadowkin/organs.rsi/ears.png b/Resources/Textures/Mobs/Species/Shadowkin/organs.rsi/ears.png new file mode 100644 index 00000000000..6ff3ac86b76 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Shadowkin/organs.rsi/ears.png differ diff --git a/Resources/Textures/Mobs/Species/Shadowkin/organs.rsi/eyes.png b/Resources/Textures/Mobs/Species/Shadowkin/organs.rsi/eyes.png new file mode 100644 index 00000000000..f7c0a306aaa Binary files /dev/null and b/Resources/Textures/Mobs/Species/Shadowkin/organs.rsi/eyes.png differ diff --git a/Resources/Textures/Mobs/Species/Shadowkin/organs.rsi/heart.png b/Resources/Textures/Mobs/Species/Shadowkin/organs.rsi/heart.png new file mode 100644 index 00000000000..1b79b529aee Binary files /dev/null and b/Resources/Textures/Mobs/Species/Shadowkin/organs.rsi/heart.png differ diff --git a/Resources/Textures/Mobs/Species/Shadowkin/organs.rsi/kidneys.png b/Resources/Textures/Mobs/Species/Shadowkin/organs.rsi/kidneys.png new file mode 100644 index 00000000000..482bb241022 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Shadowkin/organs.rsi/kidneys.png differ diff --git a/Resources/Textures/Mobs/Species/Shadowkin/organs.rsi/liver.png b/Resources/Textures/Mobs/Species/Shadowkin/organs.rsi/liver.png new file mode 100644 index 00000000000..0a2e6ab25ae Binary files /dev/null and b/Resources/Textures/Mobs/Species/Shadowkin/organs.rsi/liver.png differ diff --git a/Resources/Textures/Mobs/Species/Shadowkin/organs.rsi/lungs.png b/Resources/Textures/Mobs/Species/Shadowkin/organs.rsi/lungs.png new file mode 100644 index 00000000000..a76c9fc1eb4 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Shadowkin/organs.rsi/lungs.png differ diff --git a/Resources/Textures/Mobs/Species/Shadowkin/organs.rsi/meta.json b/Resources/Textures/Mobs/Species/Shadowkin/organs.rsi/meta.json new file mode 100644 index 00000000000..1c9aebfb6d6 --- /dev/null +++ b/Resources/Textures/Mobs/Species/Shadowkin/organs.rsi/meta.json @@ -0,0 +1,44 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/tgstation/tgstation/commit/f309886bf3e29808206693e9142304260df134e9", + "states": [ + { + "name": "appendix" + }, + { + "name": "brain" + }, + { + "name": "core" + }, + { + "name": "ears" + }, + { + "name": "eyes" + }, + { + "name": "heart" + }, + { + "name": "kidneys" + }, + { + "name": "liver" + }, + { + "name": "lungs" + }, + { + "name": "stomach" + }, + { + "name": "tongue" + } + ] +} diff --git a/Resources/Textures/Mobs/Species/Shadowkin/organs.rsi/stomach.png b/Resources/Textures/Mobs/Species/Shadowkin/organs.rsi/stomach.png new file mode 100644 index 00000000000..a0341750d32 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Shadowkin/organs.rsi/stomach.png differ diff --git a/Resources/Textures/Mobs/Species/Shadowkin/organs.rsi/tongue.png b/Resources/Textures/Mobs/Species/Shadowkin/organs.rsi/tongue.png new file mode 100644 index 00000000000..64306900f57 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Shadowkin/organs.rsi/tongue.png differ diff --git a/Resources/Textures/Mobs/Species/Shadowkin/parts.rsi/eyes.png b/Resources/Textures/Mobs/Species/Shadowkin/parts.rsi/eyes.png new file mode 100644 index 00000000000..20fd326f17f Binary files /dev/null and b/Resources/Textures/Mobs/Species/Shadowkin/parts.rsi/eyes.png differ diff --git a/Resources/Textures/Mobs/Species/Shadowkin/parts.rsi/full-nomarkings.png b/Resources/Textures/Mobs/Species/Shadowkin/parts.rsi/full-nomarkings.png new file mode 100644 index 00000000000..b62d81fec79 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Shadowkin/parts.rsi/full-nomarkings.png differ diff --git a/Resources/Textures/Mobs/Species/Shadowkin/parts.rsi/full.png b/Resources/Textures/Mobs/Species/Shadowkin/parts.rsi/full.png new file mode 100644 index 00000000000..253eb0c3c9b Binary files /dev/null and b/Resources/Textures/Mobs/Species/Shadowkin/parts.rsi/full.png differ diff --git a/Resources/Textures/Mobs/Species/Shadowkin/parts.rsi/head_f.png b/Resources/Textures/Mobs/Species/Shadowkin/parts.rsi/head_f.png new file mode 100644 index 00000000000..9d99bd18903 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Shadowkin/parts.rsi/head_f.png differ diff --git a/Resources/Textures/Mobs/Species/Shadowkin/parts.rsi/head_m.png b/Resources/Textures/Mobs/Species/Shadowkin/parts.rsi/head_m.png new file mode 100644 index 00000000000..9d99bd18903 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Shadowkin/parts.rsi/head_m.png differ diff --git a/Resources/Textures/Mobs/Species/Shadowkin/parts.rsi/l_arm.png b/Resources/Textures/Mobs/Species/Shadowkin/parts.rsi/l_arm.png new file mode 100644 index 00000000000..078ca333f6d Binary files /dev/null and b/Resources/Textures/Mobs/Species/Shadowkin/parts.rsi/l_arm.png differ diff --git a/Resources/Textures/Mobs/Species/Shadowkin/parts.rsi/l_foot.png b/Resources/Textures/Mobs/Species/Shadowkin/parts.rsi/l_foot.png new file mode 100644 index 00000000000..30ad69dc3f0 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Shadowkin/parts.rsi/l_foot.png differ diff --git a/Resources/Textures/Mobs/Species/Shadowkin/parts.rsi/l_hand.png b/Resources/Textures/Mobs/Species/Shadowkin/parts.rsi/l_hand.png new file mode 100644 index 00000000000..0cbc7371d14 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Shadowkin/parts.rsi/l_hand.png differ diff --git a/Resources/Textures/Mobs/Species/Shadowkin/parts.rsi/l_leg.png b/Resources/Textures/Mobs/Species/Shadowkin/parts.rsi/l_leg.png new file mode 100644 index 00000000000..b961dfc842a Binary files /dev/null and b/Resources/Textures/Mobs/Species/Shadowkin/parts.rsi/l_leg.png differ diff --git a/Resources/Textures/Mobs/Species/Shadowkin/parts.rsi/meta.json b/Resources/Textures/Mobs/Species/Shadowkin/parts.rsi/meta.json new file mode 100644 index 00000000000..a259ab696b8 --- /dev/null +++ b/Resources/Textures/Mobs/Species/Shadowkin/parts.rsi/meta.json @@ -0,0 +1,71 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13/commit/5bc3ea02ce03a551c85017f1ddd411315a19a5ca#diff-519788fa2ca74299d1686a44d3ab2098b49ed5ab65d293ec742bead7d49f0b8d", + "states": [ + { + "name": "full", + "directions": 4 + }, + { + "name": "full-nomarkings", + "directions": 4 + }, + { + "name": "head_m", + "directions": 4 + }, + { + "name": "head_f", + "directions": 4 + }, + { + "name": "torso_m", + "directions": 4 + }, + { + "name": "torso_f", + "directions": 4 + }, + { + "name": "r_arm", + "directions": 4 + }, + { + "name": "l_arm", + "directions": 4 + }, + { + "name": "r_hand", + "directions": 4 + }, + { + "name": "l_hand", + "directions": 4 + }, + { + "name": "r_leg", + "directions": 4 + }, + { + "name": "r_foot", + "directions": 4 + }, + { + "name": "l_leg", + "directions": 4 + }, + { + "name": "l_foot", + "directions": 4 + }, + { + "name": "eyes", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Mobs/Species/Shadowkin/parts.rsi/r_arm.png b/Resources/Textures/Mobs/Species/Shadowkin/parts.rsi/r_arm.png new file mode 100644 index 00000000000..c294120942c Binary files /dev/null and b/Resources/Textures/Mobs/Species/Shadowkin/parts.rsi/r_arm.png differ diff --git a/Resources/Textures/Mobs/Species/Shadowkin/parts.rsi/r_foot.png b/Resources/Textures/Mobs/Species/Shadowkin/parts.rsi/r_foot.png new file mode 100644 index 00000000000..390e0a27ee3 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Shadowkin/parts.rsi/r_foot.png differ diff --git a/Resources/Textures/Mobs/Species/Shadowkin/parts.rsi/r_hand.png b/Resources/Textures/Mobs/Species/Shadowkin/parts.rsi/r_hand.png new file mode 100644 index 00000000000..331e33a587e Binary files /dev/null and b/Resources/Textures/Mobs/Species/Shadowkin/parts.rsi/r_hand.png differ diff --git a/Resources/Textures/Mobs/Species/Shadowkin/parts.rsi/r_leg.png b/Resources/Textures/Mobs/Species/Shadowkin/parts.rsi/r_leg.png new file mode 100644 index 00000000000..6b0270f6343 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Shadowkin/parts.rsi/r_leg.png differ diff --git a/Resources/Textures/Mobs/Species/Shadowkin/parts.rsi/torso_f.png b/Resources/Textures/Mobs/Species/Shadowkin/parts.rsi/torso_f.png new file mode 100644 index 00000000000..83cc63cdd29 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Shadowkin/parts.rsi/torso_f.png differ diff --git a/Resources/Textures/Mobs/Species/Shadowkin/parts.rsi/torso_m.png b/Resources/Textures/Mobs/Species/Shadowkin/parts.rsi/torso_m.png new file mode 100644 index 00000000000..dafc83b65eb Binary files /dev/null and b/Resources/Textures/Mobs/Species/Shadowkin/parts.rsi/torso_m.png differ diff --git a/Resources/Textures/Mobs/Species/Vox/displacement.rsi/jumpsuit.png b/Resources/Textures/Mobs/Species/Vox/displacement.rsi/jumpsuit.png new file mode 100644 index 00000000000..2c938634eb6 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Vox/displacement.rsi/jumpsuit.png differ diff --git a/Resources/Textures/Mobs/Species/Vox/displacement.rsi/meta.json b/Resources/Textures/Mobs/Species/Vox/displacement.rsi/meta.json new file mode 100644 index 00000000000..6ea6c552b97 --- /dev/null +++ b/Resources/Textures/Mobs/Species/Vox/displacement.rsi/meta.json @@ -0,0 +1,18 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Made by PJB3005", + "size": { + "x": 32, + "y": 32 + }, + "load": { + "srgb": false + }, + "states": [ + { + "name": "jumpsuit", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Mobs/Species/Vox/parts.rsi/eyes.png b/Resources/Textures/Mobs/Species/Vox/parts.rsi/eyes.png new file mode 100644 index 00000000000..5069e90b535 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Vox/parts.rsi/eyes.png differ diff --git a/Resources/Textures/Mobs/Species/Vox/parts.rsi/full.png b/Resources/Textures/Mobs/Species/Vox/parts.rsi/full.png new file mode 100644 index 00000000000..6338e4d1128 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Vox/parts.rsi/full.png differ diff --git a/Resources/Textures/Mobs/Species/Vox/parts.rsi/groin.png b/Resources/Textures/Mobs/Species/Vox/parts.rsi/groin.png new file mode 100644 index 00000000000..ec0dd8402e5 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Vox/parts.rsi/groin.png differ diff --git a/Resources/Textures/Mobs/Species/Vox/parts.rsi/groin_f.png b/Resources/Textures/Mobs/Species/Vox/parts.rsi/groin_f.png deleted file mode 100644 index 15c0ed8d66f..00000000000 Binary files a/Resources/Textures/Mobs/Species/Vox/parts.rsi/groin_f.png and /dev/null differ diff --git a/Resources/Textures/Mobs/Species/Vox/parts.rsi/groin_m.png b/Resources/Textures/Mobs/Species/Vox/parts.rsi/groin_m.png deleted file mode 100644 index 15c0ed8d66f..00000000000 Binary files a/Resources/Textures/Mobs/Species/Vox/parts.rsi/groin_m.png and /dev/null differ diff --git a/Resources/Textures/Mobs/Species/Vox/parts.rsi/head.png b/Resources/Textures/Mobs/Species/Vox/parts.rsi/head.png new file mode 100644 index 00000000000..955e6c7b2aa Binary files /dev/null and b/Resources/Textures/Mobs/Species/Vox/parts.rsi/head.png differ diff --git a/Resources/Textures/Mobs/Species/Vox/parts.rsi/head_f.png b/Resources/Textures/Mobs/Species/Vox/parts.rsi/head_f.png deleted file mode 100644 index 6d92de1b903..00000000000 Binary files a/Resources/Textures/Mobs/Species/Vox/parts.rsi/head_f.png and /dev/null differ diff --git a/Resources/Textures/Mobs/Species/Vox/parts.rsi/head_m.png b/Resources/Textures/Mobs/Species/Vox/parts.rsi/head_m.png deleted file mode 100644 index 6d92de1b903..00000000000 Binary files a/Resources/Textures/Mobs/Species/Vox/parts.rsi/head_m.png and /dev/null differ diff --git a/Resources/Textures/Mobs/Species/Vox/parts.rsi/l_arm.png b/Resources/Textures/Mobs/Species/Vox/parts.rsi/l_arm.png index bdd61871c5f..258127dbae2 100644 Binary files a/Resources/Textures/Mobs/Species/Vox/parts.rsi/l_arm.png and b/Resources/Textures/Mobs/Species/Vox/parts.rsi/l_arm.png differ diff --git a/Resources/Textures/Mobs/Species/Vox/parts.rsi/l_foot.png b/Resources/Textures/Mobs/Species/Vox/parts.rsi/l_foot.png index d12c19cf0cb..3b81ae70595 100644 Binary files a/Resources/Textures/Mobs/Species/Vox/parts.rsi/l_foot.png and b/Resources/Textures/Mobs/Species/Vox/parts.rsi/l_foot.png differ diff --git a/Resources/Textures/Mobs/Species/Vox/parts.rsi/l_hand.png b/Resources/Textures/Mobs/Species/Vox/parts.rsi/l_hand.png index 0d1048e090b..d321880c7b8 100644 Binary files a/Resources/Textures/Mobs/Species/Vox/parts.rsi/l_hand.png and b/Resources/Textures/Mobs/Species/Vox/parts.rsi/l_hand.png differ diff --git a/Resources/Textures/Mobs/Species/Vox/parts.rsi/l_leg.png b/Resources/Textures/Mobs/Species/Vox/parts.rsi/l_leg.png index 20eebad8606..918b343f98c 100644 Binary files a/Resources/Textures/Mobs/Species/Vox/parts.rsi/l_leg.png and b/Resources/Textures/Mobs/Species/Vox/parts.rsi/l_leg.png differ diff --git a/Resources/Textures/Mobs/Species/Vox/parts.rsi/meta.json b/Resources/Textures/Mobs/Species/Vox/parts.rsi/meta.json index 1070da1203d..4704e093b40 100644 --- a/Resources/Textures/Mobs/Species/Vox/parts.rsi/meta.json +++ b/Resources/Textures/Mobs/Species/Vox/parts.rsi/meta.json @@ -1,26 +1,25 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from https://github.com/vgstation-coders/vgstation13 at 02ff588d59b3c560c685d9ca75e882d32a72d8cb", + "copyright": "Taken from https://github.com/vgstation-coders/vgstation13 at 02ff588d59b3c560c685d9ca75e882d32a72d8cb, and modified by Bhijn, Errant and Flareguy", "size": { "x": 32, "y": 32 }, "states": [ { - "name": "groin_f", + "name": "eyes", "directions": 4 }, { - "name": "groin_m", - "directions": 4 + "name": "full" }, { - "name": "head_f", + "name": "groin", "directions": 4 }, { - "name": "head_m", + "name": "head", "directions": 4 }, { @@ -60,11 +59,7 @@ "directions": 4 }, { - "name": "torso_f", - "directions": 4 - }, - { - "name": "torso_m", + "name": "torso", "directions": 4 }, { diff --git a/Resources/Textures/Mobs/Species/Vox/parts.rsi/r_arm.png b/Resources/Textures/Mobs/Species/Vox/parts.rsi/r_arm.png index 0c1f703efdf..766cd378ea8 100644 Binary files a/Resources/Textures/Mobs/Species/Vox/parts.rsi/r_arm.png and b/Resources/Textures/Mobs/Species/Vox/parts.rsi/r_arm.png differ diff --git a/Resources/Textures/Mobs/Species/Vox/parts.rsi/r_foot.png b/Resources/Textures/Mobs/Species/Vox/parts.rsi/r_foot.png index 80d3a787598..2511bc5252c 100644 Binary files a/Resources/Textures/Mobs/Species/Vox/parts.rsi/r_foot.png and b/Resources/Textures/Mobs/Species/Vox/parts.rsi/r_foot.png differ diff --git a/Resources/Textures/Mobs/Species/Vox/parts.rsi/r_hand.png b/Resources/Textures/Mobs/Species/Vox/parts.rsi/r_hand.png index d794c608bda..98f8b376a81 100644 Binary files a/Resources/Textures/Mobs/Species/Vox/parts.rsi/r_hand.png and b/Resources/Textures/Mobs/Species/Vox/parts.rsi/r_hand.png differ diff --git a/Resources/Textures/Mobs/Species/Vox/parts.rsi/r_leg.png b/Resources/Textures/Mobs/Species/Vox/parts.rsi/r_leg.png index 37417e28157..45b1ae82e78 100644 Binary files a/Resources/Textures/Mobs/Species/Vox/parts.rsi/r_leg.png and b/Resources/Textures/Mobs/Species/Vox/parts.rsi/r_leg.png differ diff --git a/Resources/Textures/Mobs/Species/Vox/parts.rsi/torso.png b/Resources/Textures/Mobs/Species/Vox/parts.rsi/torso.png new file mode 100644 index 00000000000..841d4097351 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Vox/parts.rsi/torso.png differ diff --git a/Resources/Textures/Mobs/Species/Vox/parts.rsi/torso_f.png b/Resources/Textures/Mobs/Species/Vox/parts.rsi/torso_f.png deleted file mode 100644 index 75bb51ed378..00000000000 Binary files a/Resources/Textures/Mobs/Species/Vox/parts.rsi/torso_f.png and /dev/null differ diff --git a/Resources/Textures/Mobs/Species/Vox/parts.rsi/torso_m.png b/Resources/Textures/Mobs/Species/Vox/parts.rsi/torso_m.png deleted file mode 100644 index 75bb51ed378..00000000000 Binary files a/Resources/Textures/Mobs/Species/Vox/parts.rsi/torso_m.png and /dev/null differ diff --git a/Resources/Textures/Mobs/Species/Vox/parts.rsi/vox_m.png b/Resources/Textures/Mobs/Species/Vox/parts.rsi/vox_m.png index 31f75a79964..8eead3c97b7 100644 Binary files a/Resources/Textures/Mobs/Species/Vox/parts.rsi/vox_m.png and b/Resources/Textures/Mobs/Species/Vox/parts.rsi/vox_m.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Materials/materials.rsi/meta.json b/Resources/Textures/Nyanotrasen/Objects/Materials/materials.rsi/meta.json deleted file mode 100644 index 87a4078ff76..00000000000 --- a/Resources/Textures/Nyanotrasen/Objects/Materials/materials.rsi/meta.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/commit/f8f4aeda930fcd0805ca4cc76d9bc9412a5b3428", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "bluespace" - }, - { - "name": "bluespace_2" - }, - { - "name": "bluespace_3" - } - ] -} diff --git a/Resources/Textures/Objects/Consumable/Drinks/budgetinsulsdrink.rsi/fill-1.png b/Resources/Textures/Objects/Consumable/Drinks/budgetinsulsdrink.rsi/fill-1.png new file mode 100644 index 00000000000..aca8f4931d8 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/budgetinsulsdrink.rsi/fill-1.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/budgetinsulsdrink.rsi/fill-2.png b/Resources/Textures/Objects/Consumable/Drinks/budgetinsulsdrink.rsi/fill-2.png new file mode 100644 index 00000000000..4715162ebe2 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/budgetinsulsdrink.rsi/fill-2.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/budgetinsulsdrink.rsi/fill-3.png b/Resources/Textures/Objects/Consumable/Drinks/budgetinsulsdrink.rsi/fill-3.png new file mode 100644 index 00000000000..04bfd58d03a Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/budgetinsulsdrink.rsi/fill-3.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/budgetinsulsdrink.rsi/icon.png b/Resources/Textures/Objects/Consumable/Drinks/budgetinsulsdrink.rsi/icon.png new file mode 100644 index 00000000000..04bfd58d03a Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/budgetinsulsdrink.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/budgetinsulsdrink.rsi/icon_empty.png b/Resources/Textures/Objects/Consumable/Drinks/budgetinsulsdrink.rsi/icon_empty.png new file mode 100644 index 00000000000..4d446abc54e Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/budgetinsulsdrink.rsi/icon_empty.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/budgetinsulsdrink.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/budgetinsulsdrink.rsi/meta.json new file mode 100644 index 00000000000..14c43f186f3 --- /dev/null +++ b/Resources/Textures/Objects/Consumable/Drinks/budgetinsulsdrink.rsi/meta.json @@ -0,0 +1,28 @@ +{ + "version": 1, + "size": + { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Glass and fillstates by Hanzdegloker on Github.", + "states": + [ + { + "name": "icon" + }, + { + "name": "icon_empty" + }, + { + "name": "fill-1" + }, + { + "name": "fill-2" + }, + { + "name": "fill-3" + } + ] +} diff --git a/Resources/Textures/Objects/Consumable/Drinks/coffeeglass.rsi/fill-1.png b/Resources/Textures/Objects/Consumable/Drinks/coffeeglass.rsi/fill-1.png new file mode 100644 index 00000000000..e4e832ce8db Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/coffeeglass.rsi/fill-1.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/coffeeglass.rsi/fill-2.png b/Resources/Textures/Objects/Consumable/Drinks/coffeeglass.rsi/fill-2.png new file mode 100644 index 00000000000..c778f3c428e Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/coffeeglass.rsi/fill-2.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/coffeeglass.rsi/fill-3.png b/Resources/Textures/Objects/Consumable/Drinks/coffeeglass.rsi/fill-3.png new file mode 100644 index 00000000000..480528bc96a Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/coffeeglass.rsi/fill-3.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/coffeeglass.rsi/fill-4.png b/Resources/Textures/Objects/Consumable/Drinks/coffeeglass.rsi/fill-4.png new file mode 100644 index 00000000000..da13e681397 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/coffeeglass.rsi/fill-4.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/coffeeglass.rsi/icon.png b/Resources/Textures/Objects/Consumable/Drinks/coffeeglass.rsi/icon.png new file mode 100644 index 00000000000..08de3090393 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/coffeeglass.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/coffeeglass.rsi/icon_empty.png b/Resources/Textures/Objects/Consumable/Drinks/coffeeglass.rsi/icon_empty.png new file mode 100644 index 00000000000..d46a00edd04 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/coffeeglass.rsi/icon_empty.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/coffeeglass.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/coffeeglass.rsi/meta.json new file mode 100644 index 00000000000..32c5e0342d1 --- /dev/null +++ b/Resources/Textures/Objects/Consumable/Drinks/coffeeglass.rsi/meta.json @@ -0,0 +1,29 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Made by borkroman. Fill levels by RumiTiger", + "states": [ + { + "name": "icon" + }, + { + "name": "icon_empty" + }, + { + "name": "fill-1" + }, + { + "name": "fill-2" + }, + { + "name": "fill-3" + }, + { + "name": "fill-4" + } + ] +} diff --git a/Resources/Textures/Objects/Consumable/Drinks/colaglass.rsi/fill-1.png b/Resources/Textures/Objects/Consumable/Drinks/colaglass.rsi/fill-1.png new file mode 100644 index 00000000000..a36d304a4dd Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/colaglass.rsi/fill-1.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/colaglass.rsi/fill-2.png b/Resources/Textures/Objects/Consumable/Drinks/colaglass.rsi/fill-2.png new file mode 100644 index 00000000000..6351e9f3dd4 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/colaglass.rsi/fill-2.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/colaglass.rsi/fill-3.png b/Resources/Textures/Objects/Consumable/Drinks/colaglass.rsi/fill-3.png new file mode 100644 index 00000000000..bb7bee49d05 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/colaglass.rsi/fill-3.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/colaglass.rsi/fill-4.png b/Resources/Textures/Objects/Consumable/Drinks/colaglass.rsi/fill-4.png new file mode 100644 index 00000000000..1808bdbd041 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/colaglass.rsi/fill-4.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/colaglass.rsi/fill-5.png b/Resources/Textures/Objects/Consumable/Drinks/colaglass.rsi/fill-5.png new file mode 100644 index 00000000000..734126d8668 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/colaglass.rsi/fill-5.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/colaglass.rsi/icon.png b/Resources/Textures/Objects/Consumable/Drinks/colaglass.rsi/icon.png new file mode 100644 index 00000000000..2894625a2e5 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/colaglass.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/colaglass.rsi/icon_empty.png b/Resources/Textures/Objects/Consumable/Drinks/colaglass.rsi/icon_empty.png new file mode 100644 index 00000000000..b20279f8f1b Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/colaglass.rsi/icon_empty.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/colaglass.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/colaglass.rsi/meta.json new file mode 100644 index 00000000000..ec55ebfa1f1 --- /dev/null +++ b/Resources/Textures/Objects/Consumable/Drinks/colaglass.rsi/meta.json @@ -0,0 +1,32 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Made by RumiTiger", + "states": [ + { + "name": "icon" + }, + { + "name": "icon_empty" + }, + { + "name": "fill-1" + }, + { + "name": "fill-2" + }, + { + "name": "fill-3" + }, + { + "name": "fill-4" + }, + { + "name": "fill-5" + } + ] +} diff --git a/Resources/Textures/Objects/Consumable/Drinks/dr_gibb_glass.rsi/fill-1.png b/Resources/Textures/Objects/Consumable/Drinks/dr_gibb_glass.rsi/fill-1.png new file mode 100644 index 00000000000..68731e8fcb0 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/dr_gibb_glass.rsi/fill-1.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/dr_gibb_glass.rsi/fill-2.png b/Resources/Textures/Objects/Consumable/Drinks/dr_gibb_glass.rsi/fill-2.png new file mode 100644 index 00000000000..716aebbb83a Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/dr_gibb_glass.rsi/fill-2.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/dr_gibb_glass.rsi/fill-3.png b/Resources/Textures/Objects/Consumable/Drinks/dr_gibb_glass.rsi/fill-3.png new file mode 100644 index 00000000000..74f54a4c832 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/dr_gibb_glass.rsi/fill-3.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/dr_gibb_glass.rsi/fill-4.png b/Resources/Textures/Objects/Consumable/Drinks/dr_gibb_glass.rsi/fill-4.png new file mode 100644 index 00000000000..da440839643 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/dr_gibb_glass.rsi/fill-4.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/dr_gibb_glass.rsi/fill-5.png b/Resources/Textures/Objects/Consumable/Drinks/dr_gibb_glass.rsi/fill-5.png new file mode 100644 index 00000000000..db2b9315bfa Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/dr_gibb_glass.rsi/fill-5.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/dr_gibb_glass.rsi/icon.png b/Resources/Textures/Objects/Consumable/Drinks/dr_gibb_glass.rsi/icon.png index 620cf5ea01e..6a68486662a 100644 Binary files a/Resources/Textures/Objects/Consumable/Drinks/dr_gibb_glass.rsi/icon.png and b/Resources/Textures/Objects/Consumable/Drinks/dr_gibb_glass.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/dr_gibb_glass.rsi/icon_empty.png b/Resources/Textures/Objects/Consumable/Drinks/dr_gibb_glass.rsi/icon_empty.png new file mode 100644 index 00000000000..af2dcb404ce Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/dr_gibb_glass.rsi/icon_empty.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/dr_gibb_glass.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/dr_gibb_glass.rsi/meta.json index db0ac608ed0..ec55ebfa1f1 100644 --- a/Resources/Textures/Objects/Consumable/Drinks/dr_gibb_glass.rsi/meta.json +++ b/Resources/Textures/Objects/Consumable/Drinks/dr_gibb_glass.rsi/meta.json @@ -1 +1,32 @@ -{"version": 1, "size": {"x": 32, "y": 32}, "license": "CC-BY-SA-3.0", "copyright": "https://github.com/discordia-space/CEV-Eris/raw/f7aa28fd4b4d0386c3393d829681ebca526f1d2d/icons/obj/drinks.dmi", "states": [{"name": "icon"}]} \ No newline at end of file +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Made by RumiTiger", + "states": [ + { + "name": "icon" + }, + { + "name": "icon_empty" + }, + { + "name": "fill-1" + }, + { + "name": "fill-2" + }, + { + "name": "fill-3" + }, + { + "name": "fill-4" + }, + { + "name": "fill-5" + } + ] +} diff --git a/Resources/Textures/Objects/Consumable/Drinks/energy_drink.rsi/icon.png b/Resources/Textures/Objects/Consumable/Drinks/energy_drink.rsi/icon.png index 7a577d477ca..e9e2aea7168 100644 Binary files a/Resources/Textures/Objects/Consumable/Drinks/energy_drink.rsi/icon.png and b/Resources/Textures/Objects/Consumable/Drinks/energy_drink.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/energy_drink.rsi/icon_open.png b/Resources/Textures/Objects/Consumable/Drinks/energy_drink.rsi/icon_open.png index b26d37e3779..44688ef3e92 100644 Binary files a/Resources/Textures/Objects/Consumable/Drinks/energy_drink.rsi/icon_open.png and b/Resources/Textures/Objects/Consumable/Drinks/energy_drink.rsi/icon_open.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/greenteaglass.rsi/fill-1.png b/Resources/Textures/Objects/Consumable/Drinks/greenteaglass.rsi/fill-1.png new file mode 100644 index 00000000000..613efd11712 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/greenteaglass.rsi/fill-1.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/greenteaglass.rsi/fill-2.png b/Resources/Textures/Objects/Consumable/Drinks/greenteaglass.rsi/fill-2.png new file mode 100644 index 00000000000..785703f4df7 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/greenteaglass.rsi/fill-2.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/greenteaglass.rsi/fill-3.png b/Resources/Textures/Objects/Consumable/Drinks/greenteaglass.rsi/fill-3.png new file mode 100644 index 00000000000..1f482c8df9b Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/greenteaglass.rsi/fill-3.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/greenteaglass.rsi/fill-4.png b/Resources/Textures/Objects/Consumable/Drinks/greenteaglass.rsi/fill-4.png new file mode 100644 index 00000000000..99c7dffa36f Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/greenteaglass.rsi/fill-4.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/greenteaglass.rsi/icon.png b/Resources/Textures/Objects/Consumable/Drinks/greenteaglass.rsi/icon.png new file mode 100644 index 00000000000..9c77c673ffb Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/greenteaglass.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/greenteaglass.rsi/icon_empty.png b/Resources/Textures/Objects/Consumable/Drinks/greenteaglass.rsi/icon_empty.png new file mode 100644 index 00000000000..71eb4351836 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/greenteaglass.rsi/icon_empty.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/greenteaglass.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/greenteaglass.rsi/meta.json new file mode 100644 index 00000000000..32c5e0342d1 --- /dev/null +++ b/Resources/Textures/Objects/Consumable/Drinks/greenteaglass.rsi/meta.json @@ -0,0 +1,29 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Made by borkroman. Fill levels by RumiTiger", + "states": [ + { + "name": "icon" + }, + { + "name": "icon_empty" + }, + { + "name": "fill-1" + }, + { + "name": "fill-2" + }, + { + "name": "fill-3" + }, + { + "name": "fill-4" + } + ] +} diff --git a/Resources/Textures/Objects/Consumable/Drinks/icebucket.rsi/icon.png b/Resources/Textures/Objects/Consumable/Drinks/icebucket.rsi/icon.png new file mode 100644 index 00000000000..228d098060c Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/icebucket.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/icebucket.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/icebucket.rsi/meta.json new file mode 100644 index 00000000000..f55a85dc265 --- /dev/null +++ b/Resources/Textures/Objects/Consumable/Drinks/icebucket.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Made by Dezzzix; Discord: dezzzix", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + } + ] + } diff --git a/Resources/Textures/Objects/Consumable/Drinks/icedgreenteaglass.rsi/fill-1.png b/Resources/Textures/Objects/Consumable/Drinks/icedgreenteaglass.rsi/fill-1.png new file mode 100644 index 00000000000..2d217ef1477 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/icedgreenteaglass.rsi/fill-1.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/icedgreenteaglass.rsi/fill-2.png b/Resources/Textures/Objects/Consumable/Drinks/icedgreenteaglass.rsi/fill-2.png new file mode 100644 index 00000000000..d8ca5b63af8 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/icedgreenteaglass.rsi/fill-2.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/icedgreenteaglass.rsi/fill-3.png b/Resources/Textures/Objects/Consumable/Drinks/icedgreenteaglass.rsi/fill-3.png new file mode 100644 index 00000000000..a65df2aaed0 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/icedgreenteaglass.rsi/fill-3.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/icedgreenteaglass.rsi/fill-4.png b/Resources/Textures/Objects/Consumable/Drinks/icedgreenteaglass.rsi/fill-4.png new file mode 100644 index 00000000000..3ae28ff68fe Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/icedgreenteaglass.rsi/fill-4.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/icedgreenteaglass.rsi/fill-5.png b/Resources/Textures/Objects/Consumable/Drinks/icedgreenteaglass.rsi/fill-5.png new file mode 100644 index 00000000000..72c2f4cecf0 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/icedgreenteaglass.rsi/fill-5.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/icedgreenteaglass.rsi/icon.png b/Resources/Textures/Objects/Consumable/Drinks/icedgreenteaglass.rsi/icon.png new file mode 100644 index 00000000000..999834b1421 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/icedgreenteaglass.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/icedgreenteaglass.rsi/icon_empty.png b/Resources/Textures/Objects/Consumable/Drinks/icedgreenteaglass.rsi/icon_empty.png new file mode 100644 index 00000000000..e10df8d1724 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/icedgreenteaglass.rsi/icon_empty.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/icedgreenteaglass.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/icedgreenteaglass.rsi/meta.json new file mode 100644 index 00000000000..ec55ebfa1f1 --- /dev/null +++ b/Resources/Textures/Objects/Consumable/Drinks/icedgreenteaglass.rsi/meta.json @@ -0,0 +1,32 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Made by RumiTiger", + "states": [ + { + "name": "icon" + }, + { + "name": "icon_empty" + }, + { + "name": "fill-1" + }, + { + "name": "fill-2" + }, + { + "name": "fill-3" + }, + { + "name": "fill-4" + }, + { + "name": "fill-5" + } + ] +} diff --git a/Resources/Textures/Objects/Consumable/Drinks/iceglass.rsi/fill-1.png b/Resources/Textures/Objects/Consumable/Drinks/iceglass.rsi/fill-1.png new file mode 100644 index 00000000000..04c8198fc97 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/iceglass.rsi/fill-1.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/iceglass.rsi/fill-2.png b/Resources/Textures/Objects/Consumable/Drinks/iceglass.rsi/fill-2.png new file mode 100644 index 00000000000..367a9e178bd Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/iceglass.rsi/fill-2.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/iceglass.rsi/fill-3.png b/Resources/Textures/Objects/Consumable/Drinks/iceglass.rsi/fill-3.png new file mode 100644 index 00000000000..02022cd03b9 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/iceglass.rsi/fill-3.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/iceglass.rsi/icon.png b/Resources/Textures/Objects/Consumable/Drinks/iceglass.rsi/icon.png index 61f63fd057b..96807c9a5d8 100644 Binary files a/Resources/Textures/Objects/Consumable/Drinks/iceglass.rsi/icon.png and b/Resources/Textures/Objects/Consumable/Drinks/iceglass.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/iceglass.rsi/icon_empty.png b/Resources/Textures/Objects/Consumable/Drinks/iceglass.rsi/icon_empty.png new file mode 100644 index 00000000000..5d1f677b89b Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/iceglass.rsi/icon_empty.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/iceglass.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/iceglass.rsi/meta.json index db0ac608ed0..bdfdb18a0d0 100644 --- a/Resources/Textures/Objects/Consumable/Drinks/iceglass.rsi/meta.json +++ b/Resources/Textures/Objects/Consumable/Drinks/iceglass.rsi/meta.json @@ -1 +1,26 @@ -{"version": 1, "size": {"x": 32, "y": 32}, "license": "CC-BY-SA-3.0", "copyright": "https://github.com/discordia-space/CEV-Eris/raw/f7aa28fd4b4d0386c3393d829681ebca526f1d2d/icons/obj/drinks.dmi", "states": [{"name": "icon"}]} \ No newline at end of file +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Made by borkroman. Fill levels by RumiTiger", + "states": [ + { + "name": "icon" + }, + { + "name": "icon_empty" + }, + { + "name": "fill-1" + }, + { + "name": "fill-2" + }, + { + "name": "fill-3" + } + ] +} diff --git a/Resources/Textures/Objects/Consumable/Drinks/jigger.rsi/icon.png b/Resources/Textures/Objects/Consumable/Drinks/jigger.rsi/icon.png new file mode 100644 index 00000000000..6c65ca02025 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/jigger.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/jigger.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/jigger.rsi/meta.json new file mode 100644 index 00000000000..f55a85dc265 --- /dev/null +++ b/Resources/Textures/Objects/Consumable/Drinks/jigger.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Made by Dezzzix; Discord: dezzzix", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + } + ] + } diff --git a/Resources/Textures/Objects/Consumable/Drinks/lemonjuiceglass.rsi/fill-1.png b/Resources/Textures/Objects/Consumable/Drinks/lemonjuiceglass.rsi/fill-1.png new file mode 100644 index 00000000000..48881271871 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/lemonjuiceglass.rsi/fill-1.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/lemonjuiceglass.rsi/fill-2.png b/Resources/Textures/Objects/Consumable/Drinks/lemonjuiceglass.rsi/fill-2.png new file mode 100644 index 00000000000..081ad92014b Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/lemonjuiceglass.rsi/fill-2.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/lemonjuiceglass.rsi/fill-3.png b/Resources/Textures/Objects/Consumable/Drinks/lemonjuiceglass.rsi/fill-3.png new file mode 100644 index 00000000000..97a8f2c29b6 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/lemonjuiceglass.rsi/fill-3.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/lemonjuiceglass.rsi/fill-4.png b/Resources/Textures/Objects/Consumable/Drinks/lemonjuiceglass.rsi/fill-4.png new file mode 100644 index 00000000000..5b8af69ec86 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/lemonjuiceglass.rsi/fill-4.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/lemonjuiceglass.rsi/fill-5.png b/Resources/Textures/Objects/Consumable/Drinks/lemonjuiceglass.rsi/fill-5.png new file mode 100644 index 00000000000..9b2bc6a3f7a Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/lemonjuiceglass.rsi/fill-5.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/lemonjuiceglass.rsi/icon.png b/Resources/Textures/Objects/Consumable/Drinks/lemonjuiceglass.rsi/icon.png new file mode 100644 index 00000000000..9ee1bdd5176 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/lemonjuiceglass.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/lemonjuiceglass.rsi/icon_empty.png b/Resources/Textures/Objects/Consumable/Drinks/lemonjuiceglass.rsi/icon_empty.png new file mode 100644 index 00000000000..abbdd77b271 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/lemonjuiceglass.rsi/icon_empty.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/lemonjuiceglass.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/lemonjuiceglass.rsi/meta.json new file mode 100644 index 00000000000..ec55ebfa1f1 --- /dev/null +++ b/Resources/Textures/Objects/Consumable/Drinks/lemonjuiceglass.rsi/meta.json @@ -0,0 +1,32 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Made by RumiTiger", + "states": [ + { + "name": "icon" + }, + { + "name": "icon_empty" + }, + { + "name": "fill-1" + }, + { + "name": "fill-2" + }, + { + "name": "fill-3" + }, + { + "name": "fill-4" + }, + { + "name": "fill-5" + } + ] +} diff --git a/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/fill-1.png b/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/fill-1.png new file mode 100644 index 00000000000..824ffcf3d65 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/fill-1.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/fill-2.png b/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/fill-2.png new file mode 100644 index 00000000000..5159ff36712 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/fill-2.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/fill-3.png b/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/fill-3.png new file mode 100644 index 00000000000..6d2115a95af Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/fill-3.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/fill-4.png b/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/fill-4.png new file mode 100644 index 00000000000..90ca019493a Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/fill-4.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/fill-5.png b/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/fill-5.png new file mode 100644 index 00000000000..c50860e4d03 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/fill-5.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/fill-6.png b/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/fill-6.png new file mode 100644 index 00000000000..1488e2b6297 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/fill-6.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/icon.png b/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/icon.png new file mode 100644 index 00000000000..5fa26544fda Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/icon_empty.png b/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/icon_empty.png new file mode 100644 index 00000000000..673679cb4ab Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/icon_empty.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/meta.json new file mode 100644 index 00000000000..5fe156daaae --- /dev/null +++ b/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/meta.json @@ -0,0 +1,35 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Made by RumiTiger", + "states": [ + { + "name": "icon" + }, + { + "name": "icon_empty" + }, + { + "name": "fill-1" + }, + { + "name": "fill-2" + }, + { + "name": "fill-3" + }, + { + "name": "fill-4" + }, + { + "name": "fill-5" + }, + { + "name": "fill-6" + } + ] +} diff --git a/Resources/Textures/Objects/Consumable/Drinks/orangejuiceglass.rsi/fill-1.png b/Resources/Textures/Objects/Consumable/Drinks/orangejuiceglass.rsi/fill-1.png new file mode 100644 index 00000000000..6a56b31eeed Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/orangejuiceglass.rsi/fill-1.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/orangejuiceglass.rsi/fill-2.png b/Resources/Textures/Objects/Consumable/Drinks/orangejuiceglass.rsi/fill-2.png new file mode 100644 index 00000000000..0a853551c53 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/orangejuiceglass.rsi/fill-2.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/orangejuiceglass.rsi/fill-3.png b/Resources/Textures/Objects/Consumable/Drinks/orangejuiceglass.rsi/fill-3.png new file mode 100644 index 00000000000..92293d8cf22 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/orangejuiceglass.rsi/fill-3.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/orangejuiceglass.rsi/fill-4.png b/Resources/Textures/Objects/Consumable/Drinks/orangejuiceglass.rsi/fill-4.png new file mode 100644 index 00000000000..85f6dea9b6a Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/orangejuiceglass.rsi/fill-4.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/orangejuiceglass.rsi/fill-5.png b/Resources/Textures/Objects/Consumable/Drinks/orangejuiceglass.rsi/fill-5.png new file mode 100644 index 00000000000..598d0be5b6d Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/orangejuiceglass.rsi/fill-5.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/orangejuiceglass.rsi/icon.png b/Resources/Textures/Objects/Consumable/Drinks/orangejuiceglass.rsi/icon.png new file mode 100644 index 00000000000..64e185065a5 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/orangejuiceglass.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/orangejuiceglass.rsi/icon_empty.png b/Resources/Textures/Objects/Consumable/Drinks/orangejuiceglass.rsi/icon_empty.png new file mode 100644 index 00000000000..fc940737b24 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/orangejuiceglass.rsi/icon_empty.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/orangejuiceglass.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/orangejuiceglass.rsi/meta.json new file mode 100644 index 00000000000..ec55ebfa1f1 --- /dev/null +++ b/Resources/Textures/Objects/Consumable/Drinks/orangejuiceglass.rsi/meta.json @@ -0,0 +1,32 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Made by RumiTiger", + "states": [ + { + "name": "icon" + }, + { + "name": "icon_empty" + }, + { + "name": "fill-1" + }, + { + "name": "fill-2" + }, + { + "name": "fill-3" + }, + { + "name": "fill-4" + }, + { + "name": "fill-5" + } + ] +} diff --git a/Resources/Textures/Objects/Consumable/Drinks/rubberneck.rsi/fill-1.png b/Resources/Textures/Objects/Consumable/Drinks/rubberneck.rsi/fill-1.png new file mode 100644 index 00000000000..f5afa0bed8a Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/rubberneck.rsi/fill-1.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/rubberneck.rsi/fill-2.png b/Resources/Textures/Objects/Consumable/Drinks/rubberneck.rsi/fill-2.png new file mode 100644 index 00000000000..79bcdcfb8cb Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/rubberneck.rsi/fill-2.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/rubberneck.rsi/fill-3.png b/Resources/Textures/Objects/Consumable/Drinks/rubberneck.rsi/fill-3.png new file mode 100644 index 00000000000..772aa80d6a7 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/rubberneck.rsi/fill-3.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/rubberneck.rsi/icon.png b/Resources/Textures/Objects/Consumable/Drinks/rubberneck.rsi/icon.png new file mode 100644 index 00000000000..772aa80d6a7 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/rubberneck.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/rubberneck.rsi/icon_empty.png b/Resources/Textures/Objects/Consumable/Drinks/rubberneck.rsi/icon_empty.png new file mode 100644 index 00000000000..416d1f77176 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/rubberneck.rsi/icon_empty.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/rubberneck.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/rubberneck.rsi/meta.json new file mode 100644 index 00000000000..a26c7355aeb --- /dev/null +++ b/Resources/Textures/Objects/Consumable/Drinks/rubberneck.rsi/meta.json @@ -0,0 +1,28 @@ +{ + "version": 1, + "size": + { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "https://tgstation13.org/wiki/images/archive/4/4e/20220514022531%21Rubberneck.png. Fill levels by Hanzdegloker on GitHub.", + "states": + [ + { + "name": "icon" + }, + { + "name": "icon_empty" + }, + { + "name": "fill-1" + }, + { + "name": "fill-2" + }, + { + "name": "fill-3" + } + ] +} diff --git a/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/fill-1.png b/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/fill-1.png new file mode 100644 index 00000000000..077d84804eb Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/fill-1.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/fill-2.png b/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/fill-2.png new file mode 100644 index 00000000000..763d02e7b8b Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/fill-2.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/fill-3.png b/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/fill-3.png new file mode 100644 index 00000000000..ba76b0c22ba Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/fill-3.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/fill-4.png b/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/fill-4.png new file mode 100644 index 00000000000..ce9f636dbc5 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/fill-4.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/fill-5.png b/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/fill-5.png new file mode 100644 index 00000000000..b79be483635 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/fill-5.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/fill-6.png b/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/fill-6.png new file mode 100644 index 00000000000..9abb7c672bc Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/fill-6.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/icon.png b/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/icon.png index 5930cd7536c..e5eeaba2642 100644 Binary files a/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/icon.png and b/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/icon_empty.png b/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/icon_empty.png new file mode 100644 index 00000000000..9e12bbbe4d7 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/icon_empty.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/meta.json index db0ac608ed0..5fe156daaae 100644 --- a/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/meta.json +++ b/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/meta.json @@ -1 +1,35 @@ -{"version": 1, "size": {"x": 32, "y": 32}, "license": "CC-BY-SA-3.0", "copyright": "https://github.com/discordia-space/CEV-Eris/raw/f7aa28fd4b4d0386c3393d829681ebca526f1d2d/icons/obj/drinks.dmi", "states": [{"name": "icon"}]} \ No newline at end of file +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Made by RumiTiger", + "states": [ + { + "name": "icon" + }, + { + "name": "icon_empty" + }, + { + "name": "fill-1" + }, + { + "name": "fill-2" + }, + { + "name": "fill-3" + }, + { + "name": "fill-4" + }, + { + "name": "fill-5" + }, + { + "name": "fill-6" + } + ] +} diff --git a/Resources/Textures/Objects/Consumable/Drinks/space_mountain_wind_glass.rsi/fill-1.png b/Resources/Textures/Objects/Consumable/Drinks/space_mountain_wind_glass.rsi/fill-1.png new file mode 100644 index 00000000000..53db03fd96b Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/space_mountain_wind_glass.rsi/fill-1.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/space_mountain_wind_glass.rsi/fill-2.png b/Resources/Textures/Objects/Consumable/Drinks/space_mountain_wind_glass.rsi/fill-2.png new file mode 100644 index 00000000000..601efddc0d9 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/space_mountain_wind_glass.rsi/fill-2.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/space_mountain_wind_glass.rsi/fill-3.png b/Resources/Textures/Objects/Consumable/Drinks/space_mountain_wind_glass.rsi/fill-3.png new file mode 100644 index 00000000000..4c50ee9fd7a Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/space_mountain_wind_glass.rsi/fill-3.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/space_mountain_wind_glass.rsi/fill-4.png b/Resources/Textures/Objects/Consumable/Drinks/space_mountain_wind_glass.rsi/fill-4.png new file mode 100644 index 00000000000..38cf3fdbfc8 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/space_mountain_wind_glass.rsi/fill-4.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/space_mountain_wind_glass.rsi/fill-5.png b/Resources/Textures/Objects/Consumable/Drinks/space_mountain_wind_glass.rsi/fill-5.png new file mode 100644 index 00000000000..06be04566cd Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/space_mountain_wind_glass.rsi/fill-5.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/space_mountain_wind_glass.rsi/icon.png b/Resources/Textures/Objects/Consumable/Drinks/space_mountain_wind_glass.rsi/icon.png index 812d7fd4887..6303745c500 100644 Binary files a/Resources/Textures/Objects/Consumable/Drinks/space_mountain_wind_glass.rsi/icon.png and b/Resources/Textures/Objects/Consumable/Drinks/space_mountain_wind_glass.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/space_mountain_wind_glass.rsi/icon_empty.png b/Resources/Textures/Objects/Consumable/Drinks/space_mountain_wind_glass.rsi/icon_empty.png new file mode 100644 index 00000000000..d576502499c Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/space_mountain_wind_glass.rsi/icon_empty.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/space_mountain_wind_glass.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/space_mountain_wind_glass.rsi/meta.json index db0ac608ed0..ec55ebfa1f1 100644 --- a/Resources/Textures/Objects/Consumable/Drinks/space_mountain_wind_glass.rsi/meta.json +++ b/Resources/Textures/Objects/Consumable/Drinks/space_mountain_wind_glass.rsi/meta.json @@ -1 +1,32 @@ -{"version": 1, "size": {"x": 32, "y": 32}, "license": "CC-BY-SA-3.0", "copyright": "https://github.com/discordia-space/CEV-Eris/raw/f7aa28fd4b4d0386c3393d829681ebca526f1d2d/icons/obj/drinks.dmi", "states": [{"name": "icon"}]} \ No newline at end of file +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Made by RumiTiger", + "states": [ + { + "name": "icon" + }, + { + "name": "icon_empty" + }, + { + "name": "fill-1" + }, + { + "name": "fill-2" + }, + { + "name": "fill-3" + }, + { + "name": "fill-4" + }, + { + "name": "fill-5" + } + ] +} diff --git a/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/fill-1.png b/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/fill-1.png new file mode 100644 index 00000000000..6dce3834eee Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/fill-1.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/fill-2.png b/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/fill-2.png new file mode 100644 index 00000000000..64dfddb473a Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/fill-2.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/fill-3.png b/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/fill-3.png new file mode 100644 index 00000000000..2d281d5189a Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/fill-3.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/fill-4.png b/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/fill-4.png new file mode 100644 index 00000000000..18ee0e42802 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/fill-4.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/fill-5.png b/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/fill-5.png new file mode 100644 index 00000000000..fe4fdead762 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/fill-5.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/fill-6.png b/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/fill-6.png new file mode 100644 index 00000000000..9a023cdb01e Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/fill-6.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/fill-7.png b/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/fill-7.png new file mode 100644 index 00000000000..d7cd6ca7be5 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/fill-7.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/icon.png b/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/icon.png new file mode 100644 index 00000000000..cf2066eb378 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/icon_empty.png b/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/icon_empty.png new file mode 100644 index 00000000000..5f3bc4f4c7f Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/icon_empty.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/meta.json new file mode 100644 index 00000000000..55fdf441638 --- /dev/null +++ b/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/meta.json @@ -0,0 +1,38 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Made by RumiTiger", + "states": [ + { + "name": "icon" + }, + { + "name": "icon_empty" + }, + { + "name": "fill-1" + }, + { + "name": "fill-2" + }, + { + "name": "fill-3" + }, + { + "name": "fill-4" + }, + { + "name": "fill-5" + }, + { + "name": "fill-6" + }, + { + "name": "fill-7" + } + ] +} diff --git a/Resources/Textures/Objects/Consumable/Drinks/teaglass.rsi/fill-1.png b/Resources/Textures/Objects/Consumable/Drinks/teaglass.rsi/fill-1.png new file mode 100644 index 00000000000..05e6af71a78 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/teaglass.rsi/fill-1.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/teaglass.rsi/fill-2.png b/Resources/Textures/Objects/Consumable/Drinks/teaglass.rsi/fill-2.png new file mode 100644 index 00000000000..cdf98da4a6b Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/teaglass.rsi/fill-2.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/teaglass.rsi/fill-3.png b/Resources/Textures/Objects/Consumable/Drinks/teaglass.rsi/fill-3.png new file mode 100644 index 00000000000..1f514088a29 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/teaglass.rsi/fill-3.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/teaglass.rsi/fill-4.png b/Resources/Textures/Objects/Consumable/Drinks/teaglass.rsi/fill-4.png new file mode 100644 index 00000000000..1a8ed41fde2 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/teaglass.rsi/fill-4.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/teaglass.rsi/icon.png b/Resources/Textures/Objects/Consumable/Drinks/teaglass.rsi/icon.png index 727bc3f2fbd..b31ed22db53 100644 Binary files a/Resources/Textures/Objects/Consumable/Drinks/teaglass.rsi/icon.png and b/Resources/Textures/Objects/Consumable/Drinks/teaglass.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/teaglass.rsi/icon_empty.png b/Resources/Textures/Objects/Consumable/Drinks/teaglass.rsi/icon_empty.png new file mode 100644 index 00000000000..abad93afb35 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/teaglass.rsi/icon_empty.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/teaglass.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/teaglass.rsi/meta.json index db0ac608ed0..019c918be99 100644 --- a/Resources/Textures/Objects/Consumable/Drinks/teaglass.rsi/meta.json +++ b/Resources/Textures/Objects/Consumable/Drinks/teaglass.rsi/meta.json @@ -1 +1,29 @@ -{"version": 1, "size": {"x": 32, "y": 32}, "license": "CC-BY-SA-3.0", "copyright": "https://github.com/discordia-space/CEV-Eris/raw/f7aa28fd4b4d0386c3393d829681ebca526f1d2d/icons/obj/drinks.dmi", "states": [{"name": "icon"}]} \ No newline at end of file +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Made by RumiTiger", + "states": [ + { + "name": "icon" + }, + { + "name": "icon_empty" + }, + { + "name": "fill-1" + }, + { + "name": "fill-2" + }, + { + "name": "fill-3" + }, + { + "name": "fill-4" + } + ] +} diff --git a/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/fill-1.png b/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/fill-1.png index 202cfe304cf..30399627af6 100644 Binary files a/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/fill-1.png and b/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/fill-1.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/fill-2.png b/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/fill-2.png index 8cb7a51424e..ed17e566935 100644 Binary files a/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/fill-2.png and b/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/fill-2.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/fill-3.png b/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/fill-3.png index b17d5ec6b6f..a240f84f261 100644 Binary files a/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/fill-3.png and b/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/fill-3.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/fill-4.png b/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/fill-4.png deleted file mode 100644 index 642c08ff685..00000000000 Binary files a/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/fill-4.png and /dev/null differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/icon.png b/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/icon.png index 4cac2a3aa48..b1510211cfe 100644 Binary files a/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/icon.png and b/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/icon_empty.png b/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/icon_empty.png index 72476b77c00..dd4fd594d57 100644 Binary files a/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/icon_empty.png and b/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/icon_empty.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/meta.json index 20e933bb577..a2e79dfea11 100644 --- a/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/meta.json +++ b/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/meta.json @@ -1,31 +1,26 @@ { - "version": 1, - "size": + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Made by RumiTiger", + "states": [ { - "x": 32, - "y": 32 + "name": "icon" }, - "license": "CC-BY-SA-3.0", - "copyright": "https://github.com/discordia-space/CEV-Eris/raw/f7aa28fd4b4d0386c3393d829681ebca526f1d2d/icons/obj/drinks.dmi. Fill levels by Tayrtahn on GitHub.", - "states": - [ - { - "name": "icon" - }, - { - "name": "icon_empty" - }, - { - "name": "fill-1" - }, - { - "name": "fill-2" - }, - { - "name": "fill-3" - }, - { - "name": "fill-4" - } - ] + { + "name": "icon_empty" + }, + { + "name": "fill-1" + }, + { + "name": "fill-2" + }, + { + "name": "fill-3" + } + ] } diff --git a/Resources/Textures/Objects/Consumable/Drinks/tonicglass.rsi/fill-1.png b/Resources/Textures/Objects/Consumable/Drinks/tonicglass.rsi/fill-1.png new file mode 100644 index 00000000000..0082f2b8143 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/tonicglass.rsi/fill-1.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/tonicglass.rsi/fill-2.png b/Resources/Textures/Objects/Consumable/Drinks/tonicglass.rsi/fill-2.png new file mode 100644 index 00000000000..cd667bfb334 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/tonicglass.rsi/fill-2.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/tonicglass.rsi/fill-3.png b/Resources/Textures/Objects/Consumable/Drinks/tonicglass.rsi/fill-3.png new file mode 100644 index 00000000000..0edd69b4dbd Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/tonicglass.rsi/fill-3.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/tonicglass.rsi/fill-4.png b/Resources/Textures/Objects/Consumable/Drinks/tonicglass.rsi/fill-4.png new file mode 100644 index 00000000000..f3cf6be999d Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/tonicglass.rsi/fill-4.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/tonicglass.rsi/fill-5.png b/Resources/Textures/Objects/Consumable/Drinks/tonicglass.rsi/fill-5.png new file mode 100644 index 00000000000..3e1c0d68c12 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/tonicglass.rsi/fill-5.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/tonicglass.rsi/icon.png b/Resources/Textures/Objects/Consumable/Drinks/tonicglass.rsi/icon.png new file mode 100644 index 00000000000..438ed21e517 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/tonicglass.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/tonicglass.rsi/icon_empty.png b/Resources/Textures/Objects/Consumable/Drinks/tonicglass.rsi/icon_empty.png new file mode 100644 index 00000000000..1a306745d94 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/tonicglass.rsi/icon_empty.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/tonicglass.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/tonicglass.rsi/meta.json new file mode 100644 index 00000000000..ec55ebfa1f1 --- /dev/null +++ b/Resources/Textures/Objects/Consumable/Drinks/tonicglass.rsi/meta.json @@ -0,0 +1,32 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Made by RumiTiger", + "states": [ + { + "name": "icon" + }, + { + "name": "icon_empty" + }, + { + "name": "fill-1" + }, + { + "name": "fill-2" + }, + { + "name": "fill-3" + }, + { + "name": "fill-4" + }, + { + "name": "fill-5" + } + ] +} diff --git a/Resources/Textures/Objects/Consumable/Drinks/watermelonglass.rsi/fill-1.png b/Resources/Textures/Objects/Consumable/Drinks/watermelonglass.rsi/fill-1.png new file mode 100644 index 00000000000..533f3b81770 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/watermelonglass.rsi/fill-1.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/watermelonglass.rsi/fill-2.png b/Resources/Textures/Objects/Consumable/Drinks/watermelonglass.rsi/fill-2.png new file mode 100644 index 00000000000..7563af563a7 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/watermelonglass.rsi/fill-2.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/watermelonglass.rsi/fill-3.png b/Resources/Textures/Objects/Consumable/Drinks/watermelonglass.rsi/fill-3.png new file mode 100644 index 00000000000..38c729ef387 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/watermelonglass.rsi/fill-3.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/watermelonglass.rsi/fill-4.png b/Resources/Textures/Objects/Consumable/Drinks/watermelonglass.rsi/fill-4.png new file mode 100644 index 00000000000..010224c48eb Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/watermelonglass.rsi/fill-4.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/watermelonglass.rsi/icon.png b/Resources/Textures/Objects/Consumable/Drinks/watermelonglass.rsi/icon.png new file mode 100644 index 00000000000..e551fdb07ba Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/watermelonglass.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/watermelonglass.rsi/icon_empty.png b/Resources/Textures/Objects/Consumable/Drinks/watermelonglass.rsi/icon_empty.png new file mode 100644 index 00000000000..ab9ba53863e Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/watermelonglass.rsi/icon_empty.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/watermelonglass.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/watermelonglass.rsi/meta.json new file mode 100644 index 00000000000..019c918be99 --- /dev/null +++ b/Resources/Textures/Objects/Consumable/Drinks/watermelonglass.rsi/meta.json @@ -0,0 +1,29 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Made by RumiTiger", + "states": [ + { + "name": "icon" + }, + { + "name": "icon_empty" + }, + { + "name": "fill-1" + }, + { + "name": "fill-2" + }, + { + "name": "fill-3" + }, + { + "name": "fill-4" + } + ] +} diff --git a/Resources/Textures/Objects/Consumable/Drinks/xenobasher.rsi/fill-1.png b/Resources/Textures/Objects/Consumable/Drinks/xenobasher.rsi/fill-1.png new file mode 100644 index 00000000000..3aef3bd8abd Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/xenobasher.rsi/fill-1.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/xenobasher.rsi/fill-2.png b/Resources/Textures/Objects/Consumable/Drinks/xenobasher.rsi/fill-2.png new file mode 100644 index 00000000000..ce4411ee1ef Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/xenobasher.rsi/fill-2.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/xenobasher.rsi/icon.png b/Resources/Textures/Objects/Consumable/Drinks/xenobasher.rsi/icon.png new file mode 100644 index 00000000000..ce4411ee1ef Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/xenobasher.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/xenobasher.rsi/icon_empty.png b/Resources/Textures/Objects/Consumable/Drinks/xenobasher.rsi/icon_empty.png new file mode 100644 index 00000000000..85097b80cca Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/xenobasher.rsi/icon_empty.png differ diff --git a/Resources/Textures/Objects/Consumable/Drinks/xenobasher.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/xenobasher.rsi/meta.json new file mode 100644 index 00000000000..9743bd909e0 --- /dev/null +++ b/Resources/Textures/Objects/Consumable/Drinks/xenobasher.rsi/meta.json @@ -0,0 +1,23 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Created by Hanzdegloker on github", + "states": [ + { + "name": "icon" + }, + { + "name": "icon_empty" + }, + { + "name": "fill-1" + }, + { + "name": "fill-2" + } + ] +} diff --git a/Resources/Textures/Objects/Consumable/Smokeables/Cigars/cigar-gold.rsi/lit-equipped-MASK-vox.png b/Resources/Textures/Objects/Consumable/Smokeables/Cigars/cigar-gold.rsi/lit-equipped-MASK-vox.png new file mode 100644 index 00000000000..c0723dcde67 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Smokeables/Cigars/cigar-gold.rsi/lit-equipped-MASK-vox.png differ diff --git a/Resources/Textures/Objects/Consumable/Smokeables/Cigars/cigar-gold.rsi/meta.json b/Resources/Textures/Objects/Consumable/Smokeables/Cigars/cigar-gold.rsi/meta.json index 6b6687d88c1..17b46355b69 100644 --- a/Resources/Textures/Objects/Consumable/Smokeables/Cigars/cigar-gold.rsi/meta.json +++ b/Resources/Textures/Objects/Consumable/Smokeables/Cigars/cigar-gold.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/bfc9c6ba8126ee8c41564d68c4bfb9ce37faa8f8 | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/bfc9c6ba8126ee8c41564d68c4bfb9ce37faa8f8 | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d | lit-equipped-MASK-vox & unlit-equipped-MASK-vox states taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/4638130fab5ff0e9faa220688811349d3297a33e", "size": { "x": 32, "y": 32 @@ -57,6 +57,56 @@ ] ] }, + { + "name": "unlit-equipped-MASK-vox", + "directions": 4 + }, + { + "name": "lit-equipped-MASK-vox", + "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": "burnt-icon" }, diff --git a/Resources/Textures/Objects/Consumable/Smokeables/Cigars/cigar-gold.rsi/unlit-equipped-MASK-vox.png b/Resources/Textures/Objects/Consumable/Smokeables/Cigars/cigar-gold.rsi/unlit-equipped-MASK-vox.png new file mode 100644 index 00000000000..3cbf873967a Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Smokeables/Cigars/cigar-gold.rsi/unlit-equipped-MASK-vox.png differ diff --git a/Resources/Textures/Objects/Consumable/Smokeables/Cigars/cigar.rsi/lit-equipped-MASK-vox.png b/Resources/Textures/Objects/Consumable/Smokeables/Cigars/cigar.rsi/lit-equipped-MASK-vox.png new file mode 100644 index 00000000000..c0723dcde67 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Smokeables/Cigars/cigar.rsi/lit-equipped-MASK-vox.png differ diff --git a/Resources/Textures/Objects/Consumable/Smokeables/Cigars/cigar.rsi/meta.json b/Resources/Textures/Objects/Consumable/Smokeables/Cigars/cigar.rsi/meta.json index 6b6687d88c1..17b46355b69 100644 --- a/Resources/Textures/Objects/Consumable/Smokeables/Cigars/cigar.rsi/meta.json +++ b/Resources/Textures/Objects/Consumable/Smokeables/Cigars/cigar.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/bfc9c6ba8126ee8c41564d68c4bfb9ce37faa8f8 | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/bfc9c6ba8126ee8c41564d68c4bfb9ce37faa8f8 | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d | lit-equipped-MASK-vox & unlit-equipped-MASK-vox states taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/4638130fab5ff0e9faa220688811349d3297a33e", "size": { "x": 32, "y": 32 @@ -57,6 +57,56 @@ ] ] }, + { + "name": "unlit-equipped-MASK-vox", + "directions": 4 + }, + { + "name": "lit-equipped-MASK-vox", + "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": "burnt-icon" }, diff --git a/Resources/Textures/Objects/Consumable/Smokeables/Cigars/cigar.rsi/unlit-equipped-MASK-vox.png b/Resources/Textures/Objects/Consumable/Smokeables/Cigars/cigar.rsi/unlit-equipped-MASK-vox.png new file mode 100644 index 00000000000..3cbf873967a Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Smokeables/Cigars/cigar.rsi/unlit-equipped-MASK-vox.png differ diff --git a/Resources/Textures/Objects/Consumable/TrashDrinks/goldschlagerbottle_empty.rsi/icon.png b/Resources/Textures/Objects/Consumable/TrashDrinks/gildlagerbottle_empty.rsi/icon.png similarity index 100% rename from Resources/Textures/Objects/Consumable/TrashDrinks/goldschlagerbottle_empty.rsi/icon.png rename to Resources/Textures/Objects/Consumable/TrashDrinks/gildlagerbottle_empty.rsi/icon.png diff --git a/Resources/Textures/Objects/Consumable/TrashDrinks/goldschlagerbottle_empty.rsi/meta.json b/Resources/Textures/Objects/Consumable/TrashDrinks/gildlagerbottle_empty.rsi/meta.json similarity index 100% rename from Resources/Textures/Objects/Consumable/TrashDrinks/goldschlagerbottle_empty.rsi/meta.json rename to Resources/Textures/Objects/Consumable/TrashDrinks/gildlagerbottle_empty.rsi/meta.json diff --git a/Resources/Textures/Objects/Devices/chameleon_projector.rsi/icon.png b/Resources/Textures/Objects/Devices/chameleon_projector.rsi/icon.png new file mode 100644 index 00000000000..ce20b5eeeed Binary files /dev/null and b/Resources/Textures/Objects/Devices/chameleon_projector.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Devices/chameleon_projector.rsi/inhand-left.png b/Resources/Textures/Objects/Devices/chameleon_projector.rsi/inhand-left.png new file mode 100644 index 00000000000..2d3863145b9 Binary files /dev/null and b/Resources/Textures/Objects/Devices/chameleon_projector.rsi/inhand-left.png differ diff --git a/Resources/Textures/Objects/Devices/chameleon_projector.rsi/inhand-right.png b/Resources/Textures/Objects/Devices/chameleon_projector.rsi/inhand-right.png new file mode 100644 index 00000000000..1704b9c3c11 Binary files /dev/null and b/Resources/Textures/Objects/Devices/chameleon_projector.rsi/inhand-right.png differ diff --git a/Resources/Textures/Objects/Devices/chameleon_projector.rsi/meta.json b/Resources/Textures/Objects/Devices/chameleon_projector.rsi/meta.json new file mode 100644 index 00000000000..3eb42e9e6fa --- /dev/null +++ b/Resources/Textures/Objects/Devices/chameleon_projector.rsi/meta.json @@ -0,0 +1,32 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at ", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon", + "delays": [ + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ] + ] + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Objects/Devices/flatpack.rsi/emitter.png b/Resources/Textures/Objects/Devices/flatpack.rsi/emitter.png new file mode 100644 index 00000000000..c663886f9cc Binary files /dev/null and b/Resources/Textures/Objects/Devices/flatpack.rsi/emitter.png differ diff --git a/Resources/Textures/Objects/Devices/flatpack.rsi/meta.json b/Resources/Textures/Objects/Devices/flatpack.rsi/meta.json index 2d1ca371418..11f5d24e111 100644 --- a/Resources/Textures/Objects/Devices/flatpack.rsi/meta.json +++ b/Resources/Textures/Objects/Devices/flatpack.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC0-1.0", - "copyright": "Created by EmoGarbage404 (github) for SS14, solar-assembly-part taken from tgstation and modified at https://tgstation13.org/wiki/Guide_to_construction#Solar_Panels_and_Trackers, ame-part taken from vgstation at https://github.com/vgstation-coders/vgstation13/commit/1b7952787c06c21ef1623e494dcfe7cb1f46e041; singularity-generator, tesla-generator, radiation-collector, containment-field-generator, tesla-coil, grounding-rod inner icons made by lzk228", + "copyright": "service_music by erhardsteinhauer, Created by EmoGarbage404 (github) for SS14, solar-assembly-part taken from tgstation and modified at https://tgstation13.org/wiki/Guide_to_construction#Solar_Panels_and_Trackers, ame-part taken from vgstation at https://github.com/vgstation-coders/vgstation13/commit/1b7952787c06c21ef1623e494dcfe7cb1f46e041; singularity-generator, tesla-generator, radiation-collector, containment-field-generator, tesla-coil, grounding-rod inner icons made by lzk228; emitter made by pigeonpeas", "size": { "x": 32, "y": 32 @@ -39,6 +39,12 @@ }, { "name": "containment-field-generator" + }, + { + "name": "emitter" + }, + { + "name": "service_music" } ] } diff --git a/Resources/Textures/Objects/Devices/flatpack.rsi/service_music.png b/Resources/Textures/Objects/Devices/flatpack.rsi/service_music.png new file mode 100644 index 00000000000..db1a9a8aec8 Binary files /dev/null and b/Resources/Textures/Objects/Devices/flatpack.rsi/service_music.png differ diff --git a/Resources/Textures/Objects/Devices/jammer.rsi/jammer-on.png b/Resources/Textures/Objects/Devices/jammer.rsi/jammer-on.png deleted file mode 100644 index 987e571b263..00000000000 Binary files a/Resources/Textures/Objects/Devices/jammer.rsi/jammer-on.png and /dev/null differ diff --git a/Resources/Textures/Objects/Devices/jammer.rsi/jammer_high_charge.png b/Resources/Textures/Objects/Devices/jammer.rsi/jammer_high_charge.png new file mode 100644 index 00000000000..e288427e717 Binary files /dev/null and b/Resources/Textures/Objects/Devices/jammer.rsi/jammer_high_charge.png differ diff --git a/Resources/Textures/Objects/Devices/jammer.rsi/jammer_low_charge.png b/Resources/Textures/Objects/Devices/jammer.rsi/jammer_low_charge.png new file mode 100644 index 00000000000..0950a95df7e Binary files /dev/null and b/Resources/Textures/Objects/Devices/jammer.rsi/jammer_low_charge.png differ diff --git a/Resources/Textures/Objects/Devices/jammer.rsi/jammer_medium_charge.png b/Resources/Textures/Objects/Devices/jammer.rsi/jammer_medium_charge.png new file mode 100644 index 00000000000..7c12da8606c Binary files /dev/null and b/Resources/Textures/Objects/Devices/jammer.rsi/jammer_medium_charge.png differ diff --git a/Resources/Textures/Objects/Devices/jammer.rsi/meta.json b/Resources/Textures/Objects/Devices/jammer.rsi/meta.json index c5cc9f56d24..d837374a87f 100644 --- a/Resources/Textures/Objects/Devices/jammer.rsi/meta.json +++ b/Resources/Textures/Objects/Devices/jammer.rsi/meta.json @@ -1,23 +1,33 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from Paradise at https://github.com/ParadiseSS13/Paradise/blob/93d9c70530c7299ef0af96fe2178096b2a62e036/icons/obj/device.dmi", + "copyright": "Taken from https://github.com/tgstation/tgstation/commit/c65da5a49477413310c81c460ea4b243a9f864dd with minor edits.", "size": { "x": 32, "y": 32 }, "states": [ { - "name": "jammer" + "name": "jammer", + "directions": 1 }, { - "name": "jammer-on", - "delays": [ - [ - 0.8, - 0.2 - ] + "name": "jammer_high_charge", + "directions": 1 + }, + { + "name": "jammer_medium_charge", + "directions": 1 + }, + { + "name": "jammer_low_charge", + "directions": 1, + "delays": [ + [ + 0.3, + 0.3 ] + ] } ] } diff --git a/Resources/Textures/Objects/Devices/pda.rsi/meta.json b/Resources/Textures/Objects/Devices/pda.rsi/meta.json index 37355b77a1d..1debaf447f2 100644 --- a/Resources/Textures/Objects/Devices/pda.rsi/meta.json +++ b/Resources/Textures/Objects/Devices/pda.rsi/meta.json @@ -34,6 +34,27 @@ { "name": "pda-atmos" }, + { + "name": "pda-cmonano" + }, + { + "name": "pda-hopnano" + }, + { + "name": "pda-hosnano" + }, + { + "name": "pda-rdnano" + }, + { + "name": "pda-cenano" + }, + { + "name": "pda-qmnano" + }, + { + "name": "pda-captainnano" + }, { "name": "pda-bartender" }, diff --git a/Resources/Textures/Objects/Devices/pda.rsi/pda-captainnano.png b/Resources/Textures/Objects/Devices/pda.rsi/pda-captainnano.png new file mode 100644 index 00000000000..010eef5ffc4 Binary files /dev/null and b/Resources/Textures/Objects/Devices/pda.rsi/pda-captainnano.png differ diff --git a/Resources/Textures/Objects/Devices/pda.rsi/pda-cenano.png b/Resources/Textures/Objects/Devices/pda.rsi/pda-cenano.png new file mode 100644 index 00000000000..d01b5b830b5 Binary files /dev/null and b/Resources/Textures/Objects/Devices/pda.rsi/pda-cenano.png differ diff --git a/Resources/Textures/Objects/Devices/pda.rsi/pda-cmonano.png b/Resources/Textures/Objects/Devices/pda.rsi/pda-cmonano.png new file mode 100644 index 00000000000..0fab5ebc0f1 Binary files /dev/null and b/Resources/Textures/Objects/Devices/pda.rsi/pda-cmonano.png differ diff --git a/Resources/Textures/Objects/Devices/pda.rsi/pda-hopnano.png b/Resources/Textures/Objects/Devices/pda.rsi/pda-hopnano.png new file mode 100644 index 00000000000..41e6dd8bc98 Binary files /dev/null and b/Resources/Textures/Objects/Devices/pda.rsi/pda-hopnano.png differ diff --git a/Resources/Textures/Objects/Devices/pda.rsi/pda-hosnano.png b/Resources/Textures/Objects/Devices/pda.rsi/pda-hosnano.png new file mode 100644 index 00000000000..e03293f3801 Binary files /dev/null and b/Resources/Textures/Objects/Devices/pda.rsi/pda-hosnano.png differ diff --git a/Resources/Textures/Objects/Devices/pda.rsi/pda-qmnano.png b/Resources/Textures/Objects/Devices/pda.rsi/pda-qmnano.png new file mode 100644 index 00000000000..e1479a7bcdb Binary files /dev/null and b/Resources/Textures/Objects/Devices/pda.rsi/pda-qmnano.png differ diff --git a/Resources/Textures/Objects/Devices/pda.rsi/pda-rdnano.png b/Resources/Textures/Objects/Devices/pda.rsi/pda-rdnano.png new file mode 100644 index 00000000000..47c5a55e6c1 Binary files /dev/null and b/Resources/Textures/Objects/Devices/pda.rsi/pda-rdnano.png differ diff --git a/Resources/Textures/Objects/Devices/securityhandy.rsi/meta.json b/Resources/Textures/Objects/Devices/securityhandy.rsi/meta.json new file mode 100644 index 00000000000..18a2d932724 --- /dev/null +++ b/Resources/Textures/Objects/Devices/securityhandy.rsi/meta.json @@ -0,0 +1,28 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from cev-eris and modified by Swept at https://github.com/discordia-space/CEV-Eris/commit/efce5b6c3be75458ce238dcc01510e8f8a653ca6", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "walkietalkie" + }, + { + "name": "walkietalkie-inhand-left", + "directions": 4 + }, + { + "name": "walkietalkie-inhand-right", + "directions": 4 + }, + { + "name": "walkietalkie-off" + }, + { + "name": "walkietalkie-on" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Objects/Devices/securityhandy.rsi/walkietalkie-inhand-left.png b/Resources/Textures/Objects/Devices/securityhandy.rsi/walkietalkie-inhand-left.png new file mode 100644 index 00000000000..5815169abfb Binary files /dev/null and b/Resources/Textures/Objects/Devices/securityhandy.rsi/walkietalkie-inhand-left.png differ diff --git a/Resources/Textures/Objects/Devices/securityhandy.rsi/walkietalkie-inhand-right.png b/Resources/Textures/Objects/Devices/securityhandy.rsi/walkietalkie-inhand-right.png new file mode 100644 index 00000000000..ed1e606cfb7 Binary files /dev/null and b/Resources/Textures/Objects/Devices/securityhandy.rsi/walkietalkie-inhand-right.png differ diff --git a/Resources/Textures/Objects/Devices/securityhandy.rsi/walkietalkie-off.png b/Resources/Textures/Objects/Devices/securityhandy.rsi/walkietalkie-off.png new file mode 100644 index 00000000000..2afdf8d962f Binary files /dev/null and b/Resources/Textures/Objects/Devices/securityhandy.rsi/walkietalkie-off.png differ diff --git a/Resources/Textures/Objects/Devices/securityhandy.rsi/walkietalkie-on.png b/Resources/Textures/Objects/Devices/securityhandy.rsi/walkietalkie-on.png new file mode 100644 index 00000000000..dfd79a64416 Binary files /dev/null and b/Resources/Textures/Objects/Devices/securityhandy.rsi/walkietalkie-on.png differ diff --git a/Resources/Textures/Objects/Devices/securityhandy.rsi/walkietalkie.png b/Resources/Textures/Objects/Devices/securityhandy.rsi/walkietalkie.png new file mode 100644 index 00000000000..12aaa3f2f09 Binary files /dev/null and b/Resources/Textures/Objects/Devices/securityhandy.rsi/walkietalkie.png differ diff --git a/Resources/Textures/Objects/Fun/toys.rsi/meta.json b/Resources/Textures/Objects/Fun/toys.rsi/meta.json index 24345aadf38..cc03557e0b4 100644 --- a/Resources/Textures/Objects/Fun/toys.rsi/meta.json +++ b/Resources/Textures/Objects/Fun/toys.rsi/meta.json @@ -386,6 +386,9 @@ { "name": "beachb-inhand-right", "directions": 4 + }, + { + "name": "shadowkin" } ] } \ No newline at end of file diff --git a/Resources/Textures/Objects/Fun/toys.rsi/shadowkin.png b/Resources/Textures/Objects/Fun/toys.rsi/shadowkin.png new file mode 100644 index 00000000000..df4118ecd45 Binary files /dev/null and b/Resources/Textures/Objects/Fun/toys.rsi/shadowkin.png differ diff --git a/Resources/Textures/Objects/Fun/whistle.rsi/meta.json b/Resources/Textures/Objects/Fun/whistle.rsi/meta.json deleted file mode 100644 index 59159ff6170..00000000000 --- a/Resources/Textures/Objects/Fun/whistle.rsi/meta.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Made by Foleps (discord)", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "securityWhistle" - } - ] -} diff --git a/Resources/Textures/Objects/Fun/whistles.rsi/equipped-NECK.png b/Resources/Textures/Objects/Fun/whistles.rsi/equipped-NECK.png new file mode 100644 index 00000000000..89fdd599b2b Binary files /dev/null and b/Resources/Textures/Objects/Fun/whistles.rsi/equipped-NECK.png differ diff --git a/Resources/Textures/Objects/Fun/whistles.rsi/meta.json b/Resources/Textures/Objects/Fun/whistles.rsi/meta.json new file mode 100644 index 00000000000..4f59ad60e0f --- /dev/null +++ b/Resources/Textures/Objects/Fun/whistles.rsi/meta.json @@ -0,0 +1,33 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "sec and whistle made by Foleps (discord), trench by Firewatchin (discord)", + "size": { + "x": 32, + "y": 32 + }, + + "states": [ + { + "name": "equipped-NECK", + "directions": 4 + }, + { + "name": "whistle" + }, + { + "name": "sec-equipped-NECK", + "directions": 4 + }, + { + "name": "sec" + }, + { + "name": "trench-equipped-NECK", + "directions": 4 + }, + { + "name": "trench" + } + ] +} diff --git a/Resources/Textures/Objects/Fun/whistles.rsi/sec-equipped-NECK.png b/Resources/Textures/Objects/Fun/whistles.rsi/sec-equipped-NECK.png new file mode 100644 index 00000000000..053c457f03c Binary files /dev/null and b/Resources/Textures/Objects/Fun/whistles.rsi/sec-equipped-NECK.png differ diff --git a/Resources/Textures/Objects/Fun/whistle.rsi/securityWhistle.png b/Resources/Textures/Objects/Fun/whistles.rsi/sec.png similarity index 100% rename from Resources/Textures/Objects/Fun/whistle.rsi/securityWhistle.png rename to Resources/Textures/Objects/Fun/whistles.rsi/sec.png diff --git a/Resources/Textures/Clothing/Neck/Misc/whistles.rsi/equipped-NECK.png b/Resources/Textures/Objects/Fun/whistles.rsi/trench-equipped-NECK.png similarity index 100% rename from Resources/Textures/Clothing/Neck/Misc/whistles.rsi/equipped-NECK.png rename to Resources/Textures/Objects/Fun/whistles.rsi/trench-equipped-NECK.png diff --git a/Resources/Textures/Clothing/Neck/Misc/whistles.rsi/icon.png b/Resources/Textures/Objects/Fun/whistles.rsi/trench.png similarity index 100% rename from Resources/Textures/Clothing/Neck/Misc/whistles.rsi/icon.png rename to Resources/Textures/Objects/Fun/whistles.rsi/trench.png diff --git a/Resources/Textures/Objects/Fun/whistles.rsi/whistle.png b/Resources/Textures/Objects/Fun/whistles.rsi/whistle.png new file mode 100644 index 00000000000..35db0ffca4b Binary files /dev/null and b/Resources/Textures/Objects/Fun/whistles.rsi/whistle.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Materials/materials.rsi/bluespace.png b/Resources/Textures/Objects/Materials/materials.rsi/bluespace.png similarity index 100% rename from Resources/Textures/Nyanotrasen/Objects/Materials/materials.rsi/bluespace.png rename to Resources/Textures/Objects/Materials/materials.rsi/bluespace.png diff --git a/Resources/Textures/Nyanotrasen/Objects/Materials/materials.rsi/bluespace_2.png b/Resources/Textures/Objects/Materials/materials.rsi/bluespace_2.png similarity index 100% rename from Resources/Textures/Nyanotrasen/Objects/Materials/materials.rsi/bluespace_2.png rename to Resources/Textures/Objects/Materials/materials.rsi/bluespace_2.png diff --git a/Resources/Textures/Nyanotrasen/Objects/Materials/materials.rsi/bluespace_3.png b/Resources/Textures/Objects/Materials/materials.rsi/bluespace_3.png similarity index 100% rename from Resources/Textures/Nyanotrasen/Objects/Materials/materials.rsi/bluespace_3.png rename to Resources/Textures/Objects/Materials/materials.rsi/bluespace_3.png diff --git a/Resources/Textures/Objects/Materials/materials.rsi/meta.json b/Resources/Textures/Objects/Materials/materials.rsi/meta.json index f0307208e92..016ccddc294 100644 --- a/Resources/Textures/Objects/Materials/materials.rsi/meta.json +++ b/Resources/Textures/Objects/Materials/materials.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/c6e3401f2e7e1e55c57060cdf956a98ef1fefc24 , bear pelt remade by Alekshhh, wood sprite modified by MisterMecky, wood_2 and wood_3 made by MisterMecky based on wood sprite, cardboard sprites made by MisterMecky, bananium, bananium_1 and peel made by brainfood1183 (github) for ss14", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/c6e3401f2e7e1e55c57060cdf956a98ef1fefc24 , bear pelt remade by Alekshhh, wood sprite modified by MisterMecky, wood_2 and wood_3 made by MisterMecky based on wood sprite, cardboard sprites made by MisterMecky, bananium, bananium_1 and peel made by brainfood1183 (github) for ss14. Pyrotton sprites are drawn by Ubaser, using the cotton material sprites as a base. Bluespace and Normality taken from tgstation at https://github.com/tgstation/tgstation/commit/f8f4aeda930fcd0805ca4cc76d9bc9412a5b3428, reshaded by Aidenkrz", "size": { "x": 32, "y": 32 @@ -66,6 +66,15 @@ { "name": "cotton_3" }, + { + "name": "pyrotton" + }, + { + "name": "pyrotton_2" + }, + { + "name": "pyrotton_3" + }, { "name": "diamond" }, @@ -150,6 +159,24 @@ }, { "name": "bones_3" + }, + { + "name": "bluespace" + }, + { + "name": "bluespace_2" + }, + { + "name": "bluespace_3" + }, + { + "name": "normality" + }, + { + "name": "normality_2" + }, + { + "name": "normality_3" } ] } diff --git a/Resources/Textures/Objects/Materials/materials.rsi/normality.png b/Resources/Textures/Objects/Materials/materials.rsi/normality.png new file mode 100644 index 00000000000..3a91811667b Binary files /dev/null and b/Resources/Textures/Objects/Materials/materials.rsi/normality.png differ diff --git a/Resources/Textures/Objects/Materials/materials.rsi/normality_2.png b/Resources/Textures/Objects/Materials/materials.rsi/normality_2.png new file mode 100644 index 00000000000..fd672a9b09d Binary files /dev/null and b/Resources/Textures/Objects/Materials/materials.rsi/normality_2.png differ diff --git a/Resources/Textures/Objects/Materials/materials.rsi/normality_3.png b/Resources/Textures/Objects/Materials/materials.rsi/normality_3.png new file mode 100644 index 00000000000..8895885954d Binary files /dev/null and b/Resources/Textures/Objects/Materials/materials.rsi/normality_3.png differ diff --git a/Resources/Textures/Objects/Materials/materials.rsi/pyrotton.png b/Resources/Textures/Objects/Materials/materials.rsi/pyrotton.png new file mode 100644 index 00000000000..daa6701c39d Binary files /dev/null and b/Resources/Textures/Objects/Materials/materials.rsi/pyrotton.png differ diff --git a/Resources/Textures/Objects/Materials/materials.rsi/pyrotton_2.png b/Resources/Textures/Objects/Materials/materials.rsi/pyrotton_2.png new file mode 100644 index 00000000000..fcd26895575 Binary files /dev/null and b/Resources/Textures/Objects/Materials/materials.rsi/pyrotton_2.png differ diff --git a/Resources/Textures/Objects/Materials/materials.rsi/pyrotton_3.png b/Resources/Textures/Objects/Materials/materials.rsi/pyrotton_3.png new file mode 100644 index 00000000000..072ba2c6d14 Binary files /dev/null and b/Resources/Textures/Objects/Materials/materials.rsi/pyrotton_3.png differ diff --git a/Resources/Textures/Objects/Materials/ore.rsi/bluespace.png b/Resources/Textures/Objects/Materials/ore.rsi/bluespace.png new file mode 100644 index 00000000000..8aa4a335526 Binary files /dev/null and b/Resources/Textures/Objects/Materials/ore.rsi/bluespace.png differ diff --git a/Resources/Textures/Objects/Materials/ore.rsi/meta.json b/Resources/Textures/Objects/Materials/ore.rsi/meta.json index 98a10750bf7..bc5dde90121 100644 --- a/Resources/Textures/Objects/Materials/ore.rsi/meta.json +++ b/Resources/Textures/Objects/Materials/ore.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-NC-SA-3.0", - "copyright": "silver, plasma taken from https://github.com/vgstation-coders/vgstation13 at commit f2ef221849675915a78fd92fe622c32ab740e085, spacequartz taken from https://github.com/goonstation/goonstation at commit b51daf824df46a3a1426475f982c09479818e522 and reshaded by Alekshhh, bananium; uranium; iron; gold; coal by Alekshhh", + "copyright": "silver, plasma taken from https://github.com/vgstation-coders/vgstation13 at commit f2ef221849675915a78fd92fe622c32ab740e085, spacequartz taken from https://github.com/goonstation/goonstation at commit b51daf824df46a3a1426475f982c09479818e522 and reshaded by Alekshhh, bananium; uranium; iron; gold; coal by Alekshhh. Bluespace and Normality taken from tgstation at https://github.com/tgstation/tgstation/commit/f8f4aeda930fcd0805ca4cc76d9bc9412a5b3428, reshaded by Aidenkrz", "size": { "x": 32, "y": 32 @@ -33,6 +33,12 @@ }, { "name": "salt" + }, + { + "name": "bluespace" + }, + { + "name": "normality" } ] } diff --git a/Resources/Textures/Objects/Materials/ore.rsi/normality.png b/Resources/Textures/Objects/Materials/ore.rsi/normality.png new file mode 100644 index 00000000000..e0bb3341b65 Binary files /dev/null and b/Resources/Textures/Objects/Materials/ore.rsi/normality.png differ diff --git a/Resources/Textures/Objects/Misc/chopstick.rsi/icon.png b/Resources/Textures/Objects/Misc/chopstick.rsi/icon.png new file mode 100644 index 00000000000..95acfb53cd1 Binary files /dev/null and b/Resources/Textures/Objects/Misc/chopstick.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Misc/chopstick.rsi/inhand-left.png b/Resources/Textures/Objects/Misc/chopstick.rsi/inhand-left.png new file mode 100644 index 00000000000..48fa05ce347 Binary files /dev/null and b/Resources/Textures/Objects/Misc/chopstick.rsi/inhand-left.png differ diff --git a/Resources/Textures/Objects/Misc/chopstick.rsi/inhand-right.png b/Resources/Textures/Objects/Misc/chopstick.rsi/inhand-right.png new file mode 100644 index 00000000000..51dc3961d5f Binary files /dev/null and b/Resources/Textures/Objects/Misc/chopstick.rsi/inhand-right.png differ diff --git a/Resources/Textures/Objects/Misc/chopstick.rsi/meta.json b/Resources/Textures/Objects/Misc/chopstick.rsi/meta.json new file mode 100644 index 00000000000..78e9149225e --- /dev/null +++ b/Resources/Textures/Objects/Misc/chopstick.rsi/meta.json @@ -0,0 +1,25 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from goonstation at https://github.com/goonstation/goonstation/pull/1179", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "paired" + } + ] + } \ No newline at end of file diff --git a/Resources/Textures/Objects/Misc/chopstick.rsi/paired.png b/Resources/Textures/Objects/Misc/chopstick.rsi/paired.png new file mode 100644 index 00000000000..220dc31ecba Binary files /dev/null and b/Resources/Textures/Objects/Misc/chopstick.rsi/paired.png differ diff --git a/Resources/Textures/Objects/Misc/mail_capsule.rsi/icon-cash.png b/Resources/Textures/Objects/Misc/mail_capsule.rsi/icon-cash.png new file mode 100644 index 00000000000..8ba33c95b57 Binary files /dev/null and b/Resources/Textures/Objects/Misc/mail_capsule.rsi/icon-cash.png differ diff --git a/Resources/Textures/Objects/Misc/mail_capsule.rsi/icon-empty.png b/Resources/Textures/Objects/Misc/mail_capsule.rsi/icon-empty.png new file mode 100644 index 00000000000..085b787410b Binary files /dev/null and b/Resources/Textures/Objects/Misc/mail_capsule.rsi/icon-empty.png differ diff --git a/Resources/Textures/Objects/Misc/mail_capsule.rsi/icon-food.png b/Resources/Textures/Objects/Misc/mail_capsule.rsi/icon-food.png new file mode 100644 index 00000000000..d08489cec89 Binary files /dev/null and b/Resources/Textures/Objects/Misc/mail_capsule.rsi/icon-food.png differ diff --git a/Resources/Textures/Objects/Misc/mail_capsule.rsi/icon-mail.png b/Resources/Textures/Objects/Misc/mail_capsule.rsi/icon-mail.png new file mode 100644 index 00000000000..b35a2acc0f3 Binary files /dev/null and b/Resources/Textures/Objects/Misc/mail_capsule.rsi/icon-mail.png differ diff --git a/Resources/Textures/Objects/Misc/mail_capsule.rsi/meta.json b/Resources/Textures/Objects/Misc/mail_capsule.rsi/meta.json new file mode 100644 index 00000000000..2e9bfc36170 --- /dev/null +++ b/Resources/Textures/Objects/Misc/mail_capsule.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-SA-4.0", + "copyright": "Made for Frontier by erhardsteinhauer (discord)", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon-empty" + }, + { + "name": "icon-mail" + }, + { + "name": "icon-food" + }, + { + "name": "icon-cash" + }, + { + "name": "spent" + } + ] +} diff --git a/Resources/Textures/Objects/Misc/mail_capsule.rsi/spent.png b/Resources/Textures/Objects/Misc/mail_capsule.rsi/spent.png new file mode 100644 index 00000000000..acd0d0577fc Binary files /dev/null and b/Resources/Textures/Objects/Misc/mail_capsule.rsi/spent.png differ diff --git a/Resources/Textures/Objects/Misc/utensils.rsi/bar_spoon-inhand-left.png b/Resources/Textures/Objects/Misc/utensils.rsi/bar_spoon-inhand-left.png new file mode 100644 index 00000000000..fba15fa255f Binary files /dev/null and b/Resources/Textures/Objects/Misc/utensils.rsi/bar_spoon-inhand-left.png differ diff --git a/Resources/Textures/Objects/Misc/utensils.rsi/bar_spoon-inhand-right.png b/Resources/Textures/Objects/Misc/utensils.rsi/bar_spoon-inhand-right.png new file mode 100644 index 00000000000..d2b32fd8b8a Binary files /dev/null and b/Resources/Textures/Objects/Misc/utensils.rsi/bar_spoon-inhand-right.png differ diff --git a/Resources/Textures/Objects/Misc/utensils.rsi/bar_spoon.png b/Resources/Textures/Objects/Misc/utensils.rsi/bar_spoon.png new file mode 100644 index 00000000000..f24ded7e6b8 Binary files /dev/null and b/Resources/Textures/Objects/Misc/utensils.rsi/bar_spoon.png differ diff --git a/Resources/Textures/Objects/Misc/utensils.rsi/meta.json b/Resources/Textures/Objects/Misc/utensils.rsi/meta.json index 30dd4e85643..77aeb5e3c13 100644 --- a/Resources/Textures/Objects/Misc/utensils.rsi/meta.json +++ b/Resources/Textures/Objects/Misc/utensils.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/commit/e1142f20f5e4661cb6845cfcf2dd69f864d67432 and modified by Swept", + "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/commit/e1142f20f5e4661cb6845cfcf2dd69f864d67432 and modified by Swept; Bar spoon by Dezzzix", "size": { "x": 32, "y": 32 @@ -40,6 +40,17 @@ }, { "name": "plastic_knife" + }, + { + "name": "bar_spoon" + }, + { + "name": "bar_spoon-inhand-left", + "directions": 4 + }, + { + "name": "bar_spoon-inhand-right", + "directions": 4 } ] } diff --git a/Resources/Textures/Objects/Power/portable_recharger.rsi/charging-equipped-BACKPACK.png b/Resources/Textures/Objects/Power/portable_recharger.rsi/charging-equipped-BACKPACK.png new file mode 100644 index 00000000000..500ad05704c Binary files /dev/null and b/Resources/Textures/Objects/Power/portable_recharger.rsi/charging-equipped-BACKPACK.png differ diff --git a/Resources/Textures/Objects/Power/portable_recharger.rsi/charging-unlit.png b/Resources/Textures/Objects/Power/portable_recharger.rsi/charging-unlit.png new file mode 100644 index 00000000000..6c902b7d7ef Binary files /dev/null and b/Resources/Textures/Objects/Power/portable_recharger.rsi/charging-unlit.png differ diff --git a/Resources/Textures/Objects/Power/portable_recharger.rsi/charging.png b/Resources/Textures/Objects/Power/portable_recharger.rsi/charging.png new file mode 100644 index 00000000000..6105bb4ad3b Binary files /dev/null and b/Resources/Textures/Objects/Power/portable_recharger.rsi/charging.png differ diff --git a/Resources/Textures/Objects/Power/portable_recharger.rsi/inhand-left.png b/Resources/Textures/Objects/Power/portable_recharger.rsi/inhand-left.png new file mode 100644 index 00000000000..e3bc6d82993 Binary files /dev/null and b/Resources/Textures/Objects/Power/portable_recharger.rsi/inhand-left.png differ diff --git a/Resources/Textures/Objects/Power/portable_recharger.rsi/inhand-right.png b/Resources/Textures/Objects/Power/portable_recharger.rsi/inhand-right.png new file mode 100644 index 00000000000..8c651922317 Binary files /dev/null and b/Resources/Textures/Objects/Power/portable_recharger.rsi/inhand-right.png differ diff --git a/Resources/Textures/Objects/Power/portable_recharger.rsi/meta.json b/Resources/Textures/Objects/Power/portable_recharger.rsi/meta.json new file mode 100644 index 00000000000..794f491bdb9 --- /dev/null +++ b/Resources/Textures/Objects/Power/portable_recharger.rsi/meta.json @@ -0,0 +1,92 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Sprited by Lomovar", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "charging", + "delays": [ + [ + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3 + ] + ] + }, + { + "name": "charging-equipped-BACKPACK", + "directions": 4, + "delays": [ + [ + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3 + ], + [ + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3 + ], + [ + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3 + ], + [ + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3 + ] + ] + }, + { + "name": "charging-unlit", + "delays": [ + [ + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3 + ] + ] + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} + diff --git a/Resources/Textures/Objects/Specific/Chapel/quran.rsi/icon.png b/Resources/Textures/Objects/Specific/Chapel/quran.rsi/icon.png new file mode 100644 index 00000000000..0c710e8850c Binary files /dev/null and b/Resources/Textures/Objects/Specific/Chapel/quran.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Specific/Chapel/quran.rsi/inhand-left.png b/Resources/Textures/Objects/Specific/Chapel/quran.rsi/inhand-left.png new file mode 100644 index 00000000000..f5c0eca3159 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Chapel/quran.rsi/inhand-left.png differ diff --git a/Resources/Textures/Objects/Specific/Chapel/quran.rsi/inhand-right.png b/Resources/Textures/Objects/Specific/Chapel/quran.rsi/inhand-right.png new file mode 100644 index 00000000000..bc8b034185e Binary files /dev/null and b/Resources/Textures/Objects/Specific/Chapel/quran.rsi/inhand-right.png differ diff --git a/Resources/Textures/Objects/Specific/Chapel/quran.rsi/meta.json b/Resources/Textures/Objects/Specific/Chapel/quran.rsi/meta.json new file mode 100644 index 00000000000..64d37670f1c --- /dev/null +++ b/Resources/Textures/Objects/Specific/Chapel/quran.rsi/meta.json @@ -0,0 +1,22 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/commit/40d89d11ea4a5cb81d61dc1018b46f4e7d32c62a, modified by Terraspark4941", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Objects/Specific/Hydroponics/chili.rsi/produce.png b/Resources/Textures/Objects/Specific/Hydroponics/chili.rsi/produce.png index 5033cdecc75..873f89e1811 100644 Binary files a/Resources/Textures/Objects/Specific/Hydroponics/chili.rsi/produce.png and b/Resources/Textures/Objects/Specific/Hydroponics/chili.rsi/produce.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/chilly.rsi/produce.png b/Resources/Textures/Objects/Specific/Hydroponics/chilly.rsi/produce.png index 45ea8a32f5b..b2c59dc31a1 100644 Binary files a/Resources/Textures/Objects/Specific/Hydroponics/chilly.rsi/produce.png and b/Resources/Textures/Objects/Specific/Hydroponics/chilly.rsi/produce.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/dead.png b/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/dead.png new file mode 100644 index 00000000000..39d4b40f4c2 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/dead.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/harvest.png b/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/harvest.png new file mode 100644 index 00000000000..1012ccfe03b Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/harvest.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/meta.json b/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/meta.json new file mode 100644 index 00000000000..4a6e3c94fca --- /dev/null +++ b/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/meta.json @@ -0,0 +1,32 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Drawn by Ubaser, using the cotton sprites as a base.", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "dead" + }, + { + "name": "harvest" + }, + { + "name": "produce" + }, + { + "name": "seed" + }, + { + "name": "stage-1" + }, + { + "name": "stage-2" + }, + { + "name": "stage-3" + } + ] +} diff --git a/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/produce.png b/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/produce.png new file mode 100644 index 00000000000..72a98653c8f Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/produce.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/seed.png b/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/seed.png new file mode 100644 index 00000000000..6528f4f326a Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/seed.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/stage-1.png b/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/stage-1.png new file mode 100644 index 00000000000..c86f85f0d25 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/stage-1.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/stage-2.png b/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/stage-2.png new file mode 100644 index 00000000000..7bc634ce83a Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/stage-2.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/stage-3.png b/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/stage-3.png new file mode 100644 index 00000000000..31aa7399f58 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/stage-3.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/dead.png b/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/dead.png new file mode 100644 index 00000000000..2eb3c64ca9e Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/dead.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/dried.png b/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/dried.png new file mode 100644 index 00000000000..77f23e938c5 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/dried.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/harvest.png b/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/harvest.png new file mode 100644 index 00000000000..9702e5b4881 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/harvest.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/meta.json b/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/meta.json new file mode 100644 index 00000000000..e5bfeb99ef8 --- /dev/null +++ b/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/meta.json @@ -0,0 +1,173 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/vgstation-coders/vgstation13 at 1dbcf389b0ec6b2c51b002df5fef8dd1519f8068 and modified by potato1234_x", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "dead" + }, + { + "name": "harvest", + "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, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08 + ] + ] + }, + { + "name": "powderpile_rainbow" + }, + { + "name": "produce", + "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, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08 + ] + ] + }, + { + "name": "dried" + }, + { + "name": "seed" + }, + { + "name": "stage-1", + "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, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08 + ] + ] + }, + { + "name": "stage-2", + "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, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08 + ] + ] + }, + { + "name": "stage-3", + "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, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08 + ] + ] + } + ] +} diff --git a/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/powderpile_rainbow.png b/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/powderpile_rainbow.png new file mode 100644 index 00000000000..15057f8785f Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/powderpile_rainbow.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/produce.png b/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/produce.png new file mode 100644 index 00000000000..400fed1b21d Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/produce.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/seed.png b/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/seed.png new file mode 100644 index 00000000000..fa194148f3a Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/seed.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/stage-1.png b/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/stage-1.png new file mode 100644 index 00000000000..8a3e17b098f Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/stage-1.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/stage-2.png b/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/stage-2.png new file mode 100644 index 00000000000..d30ed1ed264 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/stage-2.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/stage-3.png b/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/stage-3.png new file mode 100644 index 00000000000..f4880b69e05 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/stage-3.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Specific/Mail/mail.rsi/broken.png b/Resources/Textures/Objects/Specific/Mail/mail.rsi/broken.png similarity index 100% rename from Resources/Textures/Nyanotrasen/Objects/Specific/Mail/mail.rsi/broken.png rename to Resources/Textures/Objects/Specific/Mail/mail.rsi/broken.png diff --git a/Resources/Textures/Nyanotrasen/Objects/Specific/Mail/mail.rsi/fragile.png b/Resources/Textures/Objects/Specific/Mail/mail.rsi/fragile.png similarity index 100% rename from Resources/Textures/Nyanotrasen/Objects/Specific/Mail/mail.rsi/fragile.png rename to Resources/Textures/Objects/Specific/Mail/mail.rsi/fragile.png diff --git a/Resources/Textures/Nyanotrasen/Objects/Specific/Mail/mail.rsi/icon.png b/Resources/Textures/Objects/Specific/Mail/mail.rsi/icon.png similarity index 100% rename from Resources/Textures/Nyanotrasen/Objects/Specific/Mail/mail.rsi/icon.png rename to Resources/Textures/Objects/Specific/Mail/mail.rsi/icon.png diff --git a/Resources/Textures/Nyanotrasen/Objects/Specific/Mail/mail.rsi/locked.png b/Resources/Textures/Objects/Specific/Mail/mail.rsi/locked.png similarity index 100% rename from Resources/Textures/Nyanotrasen/Objects/Specific/Mail/mail.rsi/locked.png rename to Resources/Textures/Objects/Specific/Mail/mail.rsi/locked.png diff --git a/Resources/Textures/Nyanotrasen/Objects/Specific/Mail/mail.rsi/meta.json b/Resources/Textures/Objects/Specific/Mail/mail.rsi/meta.json similarity index 100% rename from Resources/Textures/Nyanotrasen/Objects/Specific/Mail/mail.rsi/meta.json rename to Resources/Textures/Objects/Specific/Mail/mail.rsi/meta.json diff --git a/Resources/Textures/Nyanotrasen/Objects/Specific/Mail/mail.rsi/postmark.png b/Resources/Textures/Objects/Specific/Mail/mail.rsi/postmark.png similarity index 100% rename from Resources/Textures/Nyanotrasen/Objects/Specific/Mail/mail.rsi/postmark.png rename to Resources/Textures/Objects/Specific/Mail/mail.rsi/postmark.png diff --git a/Resources/Textures/Nyanotrasen/Objects/Specific/Mail/mail.rsi/priority.png b/Resources/Textures/Objects/Specific/Mail/mail.rsi/priority.png similarity index 100% rename from Resources/Textures/Nyanotrasen/Objects/Specific/Mail/mail.rsi/priority.png rename to Resources/Textures/Objects/Specific/Mail/mail.rsi/priority.png diff --git a/Resources/Textures/Nyanotrasen/Objects/Specific/Mail/mail.rsi/priority_inactive.png b/Resources/Textures/Objects/Specific/Mail/mail.rsi/priority_inactive.png similarity index 100% rename from Resources/Textures/Nyanotrasen/Objects/Specific/Mail/mail.rsi/priority_inactive.png rename to Resources/Textures/Objects/Specific/Mail/mail.rsi/priority_inactive.png diff --git a/Resources/Textures/Nyanotrasen/Objects/Specific/Mail/mail.rsi/trash.png b/Resources/Textures/Objects/Specific/Mail/mail.rsi/trash.png similarity index 100% rename from Resources/Textures/Nyanotrasen/Objects/Specific/Mail/mail.rsi/trash.png rename to Resources/Textures/Objects/Specific/Mail/mail.rsi/trash.png diff --git a/Resources/Textures/Objects/Specific/Mail/mail_large.rsi/broken.png b/Resources/Textures/Objects/Specific/Mail/mail_large.rsi/broken.png new file mode 100644 index 00000000000..1c798c4075b Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mail/mail_large.rsi/broken.png differ diff --git a/Resources/Textures/Objects/Specific/Mail/mail_large.rsi/fragile.png b/Resources/Textures/Objects/Specific/Mail/mail_large.rsi/fragile.png new file mode 100644 index 00000000000..0917000cbef Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mail/mail_large.rsi/fragile.png differ diff --git a/Resources/Textures/Objects/Specific/Mail/mail_large.rsi/icon.png b/Resources/Textures/Objects/Specific/Mail/mail_large.rsi/icon.png new file mode 100644 index 00000000000..f3974ab116c Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mail/mail_large.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Specific/Mail/mail_large.rsi/inhand-left.png b/Resources/Textures/Objects/Specific/Mail/mail_large.rsi/inhand-left.png new file mode 100644 index 00000000000..ccbc87cf3bd Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mail/mail_large.rsi/inhand-left.png differ diff --git a/Resources/Textures/Objects/Specific/Mail/mail_large.rsi/inhand-right.png b/Resources/Textures/Objects/Specific/Mail/mail_large.rsi/inhand-right.png new file mode 100644 index 00000000000..ccbc87cf3bd Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mail/mail_large.rsi/inhand-right.png differ diff --git a/Resources/Textures/Objects/Specific/Mail/mail_large.rsi/locked.png b/Resources/Textures/Objects/Specific/Mail/mail_large.rsi/locked.png new file mode 100644 index 00000000000..1cacaf19213 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mail/mail_large.rsi/locked.png differ diff --git a/Resources/Textures/Objects/Specific/Mail/mail_large.rsi/meta.json b/Resources/Textures/Objects/Specific/Mail/mail_large.rsi/meta.json new file mode 100644 index 00000000000..ac5345ba1a5 --- /dev/null +++ b/Resources/Textures/Objects/Specific/Mail/mail_large.rsi/meta.json @@ -0,0 +1,40 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation (obj/storage/closet.dmi, obj/service/bureaucracy.dmi), modified by Whatstone (Discord). broken, inhand-left, inhand-right by Whatstone.", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "broken" + }, + { + "name": "fragile" + }, + { + "name": "icon" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "locked" + }, + { + "name": "priority" + }, + { + "name": "priority_inactive" + }, + { + "name": "trash" + } + ] +} diff --git a/Resources/Textures/Objects/Specific/Mail/mail_large.rsi/priority.png b/Resources/Textures/Objects/Specific/Mail/mail_large.rsi/priority.png new file mode 100644 index 00000000000..9c5a74ad103 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mail/mail_large.rsi/priority.png differ diff --git a/Resources/Textures/Objects/Specific/Mail/mail_large.rsi/priority_inactive.png b/Resources/Textures/Objects/Specific/Mail/mail_large.rsi/priority_inactive.png new file mode 100644 index 00000000000..fc03165b576 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mail/mail_large.rsi/priority_inactive.png differ diff --git a/Resources/Textures/Objects/Specific/Mail/mail_large.rsi/trash.png b/Resources/Textures/Objects/Specific/Mail/mail_large.rsi/trash.png new file mode 100644 index 00000000000..2ef4ee72338 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mail/mail_large.rsi/trash.png differ diff --git a/Resources/Textures/Objects/Specific/Robotics/borgmodule.rsi/icon-bomb.png b/Resources/Textures/Objects/Specific/Robotics/borgmodule.rsi/icon-bomb.png new file mode 100644 index 00000000000..5f876573f38 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Robotics/borgmodule.rsi/icon-bomb.png differ diff --git a/Resources/Textures/Objects/Specific/Robotics/borgmodule.rsi/meta.json b/Resources/Textures/Objects/Specific/Robotics/borgmodule.rsi/meta.json index ce8f8187b7d..1b3eba668d1 100644 --- a/Resources/Textures/Objects/Specific/Robotics/borgmodule.rsi/meta.json +++ b/Resources/Textures/Objects/Specific/Robotics/borgmodule.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC0-1.0", - "copyright": "Created by EmoGarbage404 (github) for Space Station 14. icon-construction.png created by deltanedas (github).", + "copyright": "Created by EmoGarbage404 (github) for Space Station 14. icon-construction.png created by deltanedas (github). syndicateborgbomb.png created by Mangohydra (github).", "size": { "x": 32, "y": 32 @@ -112,6 +112,9 @@ { "name": "janitor" }, + { + "name": "icon-bomb" + }, { "name": "medical" }, @@ -124,6 +127,9 @@ { "name": "service" }, + { + "name": "syndicateborgbomb" + }, { "name": "syndicate" } diff --git a/Resources/Textures/Objects/Specific/Robotics/borgmodule.rsi/syndicateborgbomb.png b/Resources/Textures/Objects/Specific/Robotics/borgmodule.rsi/syndicateborgbomb.png new file mode 100644 index 00000000000..c5238b96fc3 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Robotics/borgmodule.rsi/syndicateborgbomb.png differ diff --git a/Resources/Textures/Objects/Storage/boxes.rsi/meta.json b/Resources/Textures/Objects/Storage/boxes.rsi/meta.json index b30927da33c..0cba2f59d93 100644 --- a/Resources/Textures/Objects/Storage/boxes.rsi/meta.json +++ b/Resources/Textures/Objects/Storage/boxes.rsi/meta.json @@ -197,6 +197,9 @@ { "name": "shellslug" }, + { + "name": "shelluranium" + }, { "name": "shelltoy" }, diff --git a/Resources/Textures/Objects/Storage/boxes.rsi/shelluranium.png b/Resources/Textures/Objects/Storage/boxes.rsi/shelluranium.png new file mode 100644 index 00000000000..2a4e1dee152 Binary files /dev/null and b/Resources/Textures/Objects/Storage/boxes.rsi/shelluranium.png differ diff --git a/Resources/Textures/Objects/Tanks/emergency.rsi/equipped-SUITSTORAGE.png b/Resources/Textures/Objects/Tanks/emergency.rsi/equipped-SUITSTORAGE.png new file mode 100644 index 00000000000..a37261e3f7b Binary files /dev/null and b/Resources/Textures/Objects/Tanks/emergency.rsi/equipped-SUITSTORAGE.png differ diff --git a/Resources/Textures/Objects/Tanks/emergency.rsi/meta.json b/Resources/Textures/Objects/Tanks/emergency.rsi/meta.json index b4d4730957e..c71ae8955eb 100644 --- a/Resources/Textures/Objects/Tanks/emergency.rsi/meta.json +++ b/Resources/Textures/Objects/Tanks/emergency.rsi/meta.json @@ -71,6 +71,10 @@ { "name": "inhand-right", "directions": 4 + }, + { + "name": "equipped-SUITSTORAGE", + "directions": 4 } ] } diff --git a/Resources/Textures/Objects/Tanks/emergency_clown.rsi/equipped-SUITSTORAGE.png b/Resources/Textures/Objects/Tanks/emergency_clown.rsi/equipped-SUITSTORAGE.png new file mode 100644 index 00000000000..dd19aa56804 Binary files /dev/null and b/Resources/Textures/Objects/Tanks/emergency_clown.rsi/equipped-SUITSTORAGE.png differ diff --git a/Resources/Textures/Objects/Tanks/emergency_clown.rsi/meta.json b/Resources/Textures/Objects/Tanks/emergency_clown.rsi/meta.json index 489cf3072ae..21d23712e98 100644 --- a/Resources/Textures/Objects/Tanks/emergency_clown.rsi/meta.json +++ b/Resources/Textures/Objects/Tanks/emergency_clown.rsi/meta.json @@ -66,6 +66,10 @@ { "name": "inhand-right", "directions": 4 + }, + { + "name": "equipped-SUITSTORAGE", + "directions": 4 } ] } diff --git a/Resources/Textures/Objects/Tanks/emergency_double.rsi/equipped-SUITSTORAGE.png b/Resources/Textures/Objects/Tanks/emergency_double.rsi/equipped-SUITSTORAGE.png new file mode 100644 index 00000000000..f139bc6db21 Binary files /dev/null and b/Resources/Textures/Objects/Tanks/emergency_double.rsi/equipped-SUITSTORAGE.png differ diff --git a/Resources/Textures/Objects/Tanks/emergency_double.rsi/meta.json b/Resources/Textures/Objects/Tanks/emergency_double.rsi/meta.json index 6b3765d794d..b3ab67fad65 100644 --- a/Resources/Textures/Objects/Tanks/emergency_double.rsi/meta.json +++ b/Resources/Textures/Objects/Tanks/emergency_double.rsi/meta.json @@ -71,6 +71,10 @@ { "name": "inhand-right", "directions": 4 + }, + { + "name": "equipped-SUITSTORAGE", + "directions": 4 } ] } diff --git a/Resources/Textures/Objects/Tanks/emergency_double_red.rsi/equipped-SUITSTORAGE.png b/Resources/Textures/Objects/Tanks/emergency_double_red.rsi/equipped-SUITSTORAGE.png new file mode 100644 index 00000000000..7e2f947d343 Binary files /dev/null and b/Resources/Textures/Objects/Tanks/emergency_double_red.rsi/equipped-SUITSTORAGE.png differ diff --git a/Resources/Textures/Objects/Tanks/emergency_double_red.rsi/meta.json b/Resources/Textures/Objects/Tanks/emergency_double_red.rsi/meta.json index ce287bf2779..74fc108c09c 100644 --- a/Resources/Textures/Objects/Tanks/emergency_double_red.rsi/meta.json +++ b/Resources/Textures/Objects/Tanks/emergency_double_red.rsi/meta.json @@ -66,6 +66,10 @@ { "name": "inhand-right", "directions": 4 + }, + { + "name": "equipped-SUITSTORAGE", + "directions": 4 } ] } diff --git a/Resources/Textures/Objects/Tanks/emergency_extended.rsi/equipped-SUITSTORAGE.png b/Resources/Textures/Objects/Tanks/emergency_extended.rsi/equipped-SUITSTORAGE.png new file mode 100644 index 00000000000..0470c6895f3 Binary files /dev/null and b/Resources/Textures/Objects/Tanks/emergency_extended.rsi/equipped-SUITSTORAGE.png differ diff --git a/Resources/Textures/Objects/Tanks/emergency_extended.rsi/meta.json b/Resources/Textures/Objects/Tanks/emergency_extended.rsi/meta.json index a1661aee78c..fe19dcec1cf 100644 --- a/Resources/Textures/Objects/Tanks/emergency_extended.rsi/meta.json +++ b/Resources/Textures/Objects/Tanks/emergency_extended.rsi/meta.json @@ -66,6 +66,10 @@ { "name": "inhand-right", "directions": 4 + }, + { + "name": "equipped-SUITSTORAGE", + "directions": 4 } ] } diff --git a/Resources/Textures/Objects/Tanks/emergency_extended_red.rsi/equipped-SUITSTORAGE.png b/Resources/Textures/Objects/Tanks/emergency_extended_red.rsi/equipped-SUITSTORAGE.png new file mode 100644 index 00000000000..db800b2a3bf Binary files /dev/null and b/Resources/Textures/Objects/Tanks/emergency_extended_red.rsi/equipped-SUITSTORAGE.png differ diff --git a/Resources/Textures/Objects/Tanks/emergency_extended_red.rsi/meta.json b/Resources/Textures/Objects/Tanks/emergency_extended_red.rsi/meta.json index ce287bf2779..74fc108c09c 100644 --- a/Resources/Textures/Objects/Tanks/emergency_extended_red.rsi/meta.json +++ b/Resources/Textures/Objects/Tanks/emergency_extended_red.rsi/meta.json @@ -66,6 +66,10 @@ { "name": "inhand-right", "directions": 4 + }, + { + "name": "equipped-SUITSTORAGE", + "directions": 4 } ] } diff --git a/Resources/Textures/Objects/Tanks/emergency_red.rsi/equipped-SUITSTORAGE.png b/Resources/Textures/Objects/Tanks/emergency_red.rsi/equipped-SUITSTORAGE.png new file mode 100644 index 00000000000..db800b2a3bf Binary files /dev/null and b/Resources/Textures/Objects/Tanks/emergency_red.rsi/equipped-SUITSTORAGE.png differ diff --git a/Resources/Textures/Objects/Tanks/emergency_red.rsi/meta.json b/Resources/Textures/Objects/Tanks/emergency_red.rsi/meta.json index ce3d401ca2f..d71cdae541c 100644 --- a/Resources/Textures/Objects/Tanks/emergency_red.rsi/meta.json +++ b/Resources/Textures/Objects/Tanks/emergency_red.rsi/meta.json @@ -66,6 +66,10 @@ { "name": "inhand-right", "directions": 4 + }, + { + "name": "equipped-SUITSTORAGE", + "directions": 4 } ] } diff --git a/Resources/Textures/Objects/Tanks/emergency_yellow.rsi/equipped-SUITSTORAGE.png b/Resources/Textures/Objects/Tanks/emergency_yellow.rsi/equipped-SUITSTORAGE.png new file mode 100644 index 00000000000..0470c6895f3 Binary files /dev/null and b/Resources/Textures/Objects/Tanks/emergency_yellow.rsi/equipped-SUITSTORAGE.png differ diff --git a/Resources/Textures/Objects/Tanks/emergency_yellow.rsi/meta.json b/Resources/Textures/Objects/Tanks/emergency_yellow.rsi/meta.json index 6b3765d794d..b3ab67fad65 100644 --- a/Resources/Textures/Objects/Tanks/emergency_yellow.rsi/meta.json +++ b/Resources/Textures/Objects/Tanks/emergency_yellow.rsi/meta.json @@ -71,6 +71,10 @@ { "name": "inhand-right", "directions": 4 + }, + { + "name": "equipped-SUITSTORAGE", + "directions": 4 } ] } diff --git a/Resources/Textures/Objects/Tanks/plasma.rsi/equipped-SUITSTORAGE.png b/Resources/Textures/Objects/Tanks/plasma.rsi/equipped-SUITSTORAGE.png new file mode 100644 index 00000000000..e282da2e6d2 Binary files /dev/null and b/Resources/Textures/Objects/Tanks/plasma.rsi/equipped-SUITSTORAGE.png differ diff --git a/Resources/Textures/Objects/Tanks/plasma.rsi/meta.json b/Resources/Textures/Objects/Tanks/plasma.rsi/meta.json index a88e367a852..2d3199f75cd 100644 --- a/Resources/Textures/Objects/Tanks/plasma.rsi/meta.json +++ b/Resources/Textures/Objects/Tanks/plasma.rsi/meta.json @@ -21,6 +21,10 @@ { "name": "inhand-right", "directions": 4 + }, + { + "name": "equipped-SUITSTORAGE", + "directions": 4 } ] } diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/base.png b/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/base.png index d6da03ed28d..003858cf9d9 100644 Binary files a/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/base.png and b/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/base.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/icon.png b/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/icon.png index d2e461be282..88be89b3780 100644 Binary files a/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/icon.png and b/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/mag-unshaded-0.png b/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/mag-unshaded-0.png index 32fba189df8..042d52f5d74 100644 Binary files a/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/mag-unshaded-0.png and b/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/mag-unshaded-0.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/mag-unshaded-1.png b/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/mag-unshaded-1.png index b0fa62d39f2..5e64562bdc3 100644 Binary files a/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/mag-unshaded-1.png and b/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/mag-unshaded-1.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/mag-unshaded-2.png b/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/mag-unshaded-2.png index 4ad441aa0b0..df4767bff9f 100644 Binary files a/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/mag-unshaded-2.png and b/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/mag-unshaded-2.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/mag-unshaded-3.png b/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/mag-unshaded-3.png index 1678a31534f..fcbbc48af1a 100644 Binary files a/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/mag-unshaded-3.png and b/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/mag-unshaded-3.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/mag-unshaded-4.png b/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/mag-unshaded-4.png index 5300c65d31a..40e557d736c 100644 Binary files a/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/mag-unshaded-4.png and b/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/mag-unshaded-4.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/meta.json index 04e2ac93099..86ecf2bff1a 100644 --- a/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/meta.json +++ b/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/meta.json @@ -1,80 +1,80 @@ -{ - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "taken from tg station at commit https://github.com/tgstation/tgstation/commit/8b7f8ba6a3327c7381967c550f185dffafd11a57", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" - }, - { - "name": "base" - }, - { - "name": "mag-unshaded-0" - }, - { - "name": "mag-unshaded-1" - }, - { - "name": "mag-unshaded-2" - }, - { - "name": "mag-unshaded-3" - }, - { - "name": "mag-unshaded-4" - }, - { - "name": "inhand-left-0", - "directions": 4 - }, - { - "name": "inhand-right-0", - "directions": 4 - }, - { - "name": "inhand-left-1", - "directions": 4 - }, - { - "name": "inhand-right-1", - "directions": 4 - }, - { - "name": "inhand-left-2", - "directions": 4 - }, - { - "name": "inhand-right-2", - "directions": 4 - }, - { - "name": "inhand-left-3", - "directions": 4 - }, - { - "name": "inhand-right-3", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - }, - { - "name": "equipped-BELT", - "directions": 4 - }, - { - "name": "equipped-SUITSTORAGE", - "directions": 4 - } - ] -} +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "icon by RiceMar1244 based on icon taken from tg station at commit https://github.com/tgstation/tgstation/commit/8b7f8ba6a3327c7381967c550f185dffafd11a57", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "base" + }, + { + "name": "mag-unshaded-0" + }, + { + "name": "mag-unshaded-1" + }, + { + "name": "mag-unshaded-2" + }, + { + "name": "mag-unshaded-3" + }, + { + "name": "mag-unshaded-4" + }, + { + "name": "inhand-left-0", + "directions": 4 + }, + { + "name": "inhand-right-0", + "directions": 4 + }, + { + "name": "inhand-left-1", + "directions": 4 + }, + { + "name": "inhand-right-1", + "directions": 4 + }, + { + "name": "inhand-left-2", + "directions": 4 + }, + { + "name": "inhand-right-2", + "directions": 4 + }, + { + "name": "inhand-left-3", + "directions": 4 + }, + { + "name": "inhand-right-3", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "equipped-BELT", + "directions": 4 + }, + { + "name": "equipped-SUITSTORAGE", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/laser_cannon.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Battery/laser_cannon.rsi/meta.json index 6657216b76b..acbd06c2708 100644 --- a/Resources/Textures/Objects/Weapons/Guns/Battery/laser_cannon.rsi/meta.json +++ b/Resources/Textures/Objects/Weapons/Guns/Battery/laser_cannon.rsi/meta.json @@ -1,77 +1,85 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from vgstation at https://github.com/vgstation-coders/vgstation13/commit/125c975f1b3bf9826b37029e9ab5a5f89e975a7e, backpack sprite by Peptide, backpack sling sprite edited by Boaz1111", + "copyright": "Taken from vgstation at https://github.com/vgstation-coders/vgstation13/commit/125c975f1b3bf9826b37029e9ab5a5f89e975a7e, backpack sprite by Peptide, backpack sling sprite edited by Boaz1111, wield sprites by RiceMar1244", "size": { "x": 32, "y": 32 }, - "states": [ - { - "name": "icon" - }, - { - "name": "base" - }, - { - "name": "mag-unshaded-1" - }, - { - "name": "mag-unshaded-2" - }, - { - "name": "mag-unshaded-3" - }, - { - "name": "mag-unshaded-4" - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - }, - { - "name": "0-inhand-left", - "directions": 4 - }, - { - "name": "0-inhand-right", - "directions": 4 - }, - { - "name": "25-inhand-left", - "directions": 4 - }, - { - "name": "25-inhand-right", - "directions": 4 - }, - { - "name": "50-inhand-left", - "directions": 4 - }, - { - "name": "50-inhand-right", - "directions": 4 - }, - { - "name": "75-inhand-left", - "directions": 4 - }, - { - "name": "75-inhand-right", - "directions": 4 - }, - { - "name": "equipped-BACKPACK", - "directions": 4 - }, - { - "name": "equipped-SUITSTORAGE", - "directions": 4 - } - ] + "states": [ + { + "name": "icon" + }, + { + "name": "base" + }, + { + "name": "mag-unshaded-1" + }, + { + "name": "mag-unshaded-2" + }, + { + "name": "mag-unshaded-3" + }, + { + "name": "mag-unshaded-4" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "wielded-inhand-left", + "directions": 4 + }, + { + "name": "wielded-inhand-right", + "directions": 4 + }, + { + "name": "0-inhand-left", + "directions": 4 + }, + { + "name": "0-inhand-right", + "directions": 4 + }, + { + "name": "25-inhand-left", + "directions": 4 + }, + { + "name": "25-inhand-right", + "directions": 4 + }, + { + "name": "50-inhand-left", + "directions": 4 + }, + { + "name": "50-inhand-right", + "directions": 4 + }, + { + "name": "75-inhand-left", + "directions": 4 + }, + { + "name": "75-inhand-right", + "directions": 4 + }, + { + "name": "equipped-BACKPACK", + "directions": 4 + }, + { + "name": "equipped-SUITSTORAGE", + "directions": 4 + } + ] } diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/laser_cannon.rsi/wielded-inhand-left.png b/Resources/Textures/Objects/Weapons/Guns/Battery/laser_cannon.rsi/wielded-inhand-left.png new file mode 100644 index 00000000000..38327d97081 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Battery/laser_cannon.rsi/wielded-inhand-left.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/laser_cannon.rsi/wielded-inhand-right.png b/Resources/Textures/Objects/Weapons/Guns/Battery/laser_cannon.rsi/wielded-inhand-right.png new file mode 100644 index 00000000000..4e0a357b844 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Battery/laser_cannon.rsi/wielded-inhand-right.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/laser_gun.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Battery/laser_gun.rsi/meta.json index 7ec48da4fec..2b374ec4dd8 100644 --- a/Resources/Textures/Objects/Weapons/Guns/Battery/laser_gun.rsi/meta.json +++ b/Resources/Textures/Objects/Weapons/Guns/Battery/laser_gun.rsi/meta.json @@ -1,45 +1,53 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from Polaris at https://github.com/PolarisSS13/Polaris/commit/9ded73fb85b9106d6bbf1c9a34d1d2fa27ee0e2e, backpack sprite by Peptide, backpack sling sprite edited by Boaz1111", + "copyright": "Taken from Polaris at https://github.com/PolarisSS13/Polaris/commit/9ded73fb85b9106d6bbf1c9a34d1d2fa27ee0e2e, backpack sprite by Peptide, backpack sling sprite edited by Boaz1111, wield sprites by RiceMar1244", "size": { "x": 32, "y": 32 }, "states": [ - { - "name": "icon" - }, - { - "name": "base" - }, - { - "name": "mag-unshaded-1" - }, - { - "name": "mag-unshaded-2" - }, - { - "name": "mag-unshaded-3" - }, - { - "name": "mag-unshaded-4" - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - }, - { - "name": "equipped-BACKPACK", - "directions": 4 - }, - { - "name": "equipped-SUITSTORAGE", - "directions": 4 - } + { + "name": "icon" + }, + { + "name": "base" + }, + { + "name": "mag-unshaded-1" + }, + { + "name": "mag-unshaded-2" + }, + { + "name": "mag-unshaded-3" + }, + { + "name": "mag-unshaded-4" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "wielded-inhand-left", + "directions": 4 + }, + { + "name": "wielded-inhand-right", + "directions": 4 + }, + { + "name": "equipped-BACKPACK", + "directions": 4 + }, + { + "name": "equipped-SUITSTORAGE", + "directions": 4 + } ] } diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/laser_gun.rsi/wielded-inhand-left.png b/Resources/Textures/Objects/Weapons/Guns/Battery/laser_gun.rsi/wielded-inhand-left.png new file mode 100644 index 00000000000..126915fd270 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Battery/laser_gun.rsi/wielded-inhand-left.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/laser_gun.rsi/wielded-inhand-right.png b/Resources/Textures/Objects/Weapons/Guns/Battery/laser_gun.rsi/wielded-inhand-right.png new file mode 100644 index 00000000000..93a9303c5ea Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Battery/laser_gun.rsi/wielded-inhand-right.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/pulse_carbine.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Battery/pulse_carbine.rsi/meta.json index 3b48bfc87c3..434d66fcfd8 100644 --- a/Resources/Textures/Objects/Weapons/Guns/Battery/pulse_carbine.rsi/meta.json +++ b/Resources/Textures/Objects/Weapons/Guns/Battery/pulse_carbine.rsi/meta.json @@ -1,45 +1,53 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/pull/27386/commits/4814da0f8e0d88f430c8b335e541e0a7734755a2 backpack sprite by Peptide (copy of pulse rifle), backpack sling sprite edited by Boaz1111", + "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/pull/27386/commits/4814da0f8e0d88f430c8b335e541e0a7734755a2 backpack sprite by Peptide (copy of pulse rifle), backpack sling sprite edited by Boaz1111, wield sprites by RiceMar1244", "size": { "x": 32, "y": 32 }, "states": [ - { - "name": "icon" - }, - { - "name": "base" - }, - { - "name": "mag-unshaded-1" - }, - { - "name": "mag-unshaded-2" - }, - { - "name": "mag-unshaded-3" - }, - { - "name": "mag-unshaded-4" - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - }, - { - "name": "equipped-BACKPACK", - "directions": 4 - }, - { - "name": "equipped-SUITSTORAGE", - "directions": 4 - } + { + "name": "icon" + }, + { + "name": "base" + }, + { + "name": "mag-unshaded-1" + }, + { + "name": "mag-unshaded-2" + }, + { + "name": "mag-unshaded-3" + }, + { + "name": "mag-unshaded-4" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "wielded-inhand-left", + "directions": 4 + }, + { + "name": "wielded-inhand-right", + "directions": 4 + }, + { + "name": "equipped-BACKPACK", + "directions": 4 + }, + { + "name": "equipped-SUITSTORAGE", + "directions": 4 + } ] } diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/pulse_carbine.rsi/wielded-inhand-left.png b/Resources/Textures/Objects/Weapons/Guns/Battery/pulse_carbine.rsi/wielded-inhand-left.png new file mode 100644 index 00000000000..b9df7a2cb2d Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Battery/pulse_carbine.rsi/wielded-inhand-left.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/pulse_carbine.rsi/wielded-inhand-right.png b/Resources/Textures/Objects/Weapons/Guns/Battery/pulse_carbine.rsi/wielded-inhand-right.png new file mode 100644 index 00000000000..644db232d2e Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Battery/pulse_carbine.rsi/wielded-inhand-right.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/pulse_rifle.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Battery/pulse_rifle.rsi/meta.json index 1a906ef965d..023ad90cfae 100644 --- a/Resources/Textures/Objects/Weapons/Guns/Battery/pulse_rifle.rsi/meta.json +++ b/Resources/Textures/Objects/Weapons/Guns/Battery/pulse_rifle.rsi/meta.json @@ -1,45 +1,53 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/pull/27386/commits/4814da0f8e0d88f430c8b335e541e0a7734755a2, backpack sprite by Peptide, backpack sling sprite edited by Boaz1111", + "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/pull/27386/commits/4814da0f8e0d88f430c8b335e541e0a7734755a2, backpack sprite by Peptide, backpack sling sprite edited by Boaz1111, wield sprites by RiceMar1244", "size": { "x": 32, "y": 32 }, "states": [ - { - "name": "icon" - }, - { - "name": "base" - }, - { - "name": "mag-unshaded-1" - }, - { - "name": "mag-unshaded-2" - }, - { - "name": "mag-unshaded-3" - }, - { - "name": "mag-unshaded-4" - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - }, - { - "name": "equipped-BACKPACK", - "directions": 4 - }, - { - "name": "equipped-SUITSTORAGE", - "directions": 4 - } + { + "name": "icon" + }, + { + "name": "base" + }, + { + "name": "mag-unshaded-1" + }, + { + "name": "mag-unshaded-2" + }, + { + "name": "mag-unshaded-3" + }, + { + "name": "mag-unshaded-4" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "wielded-inhand-left", + "directions": 4 + }, + { + "name": "wielded-inhand-right", + "directions": 4 + }, + { + "name": "equipped-BACKPACK", + "directions": 4 + }, + { + "name": "equipped-SUITSTORAGE", + "directions": 4 + } ] } diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/pulse_rifle.rsi/wielded-inhand-left.png b/Resources/Textures/Objects/Weapons/Guns/Battery/pulse_rifle.rsi/wielded-inhand-left.png new file mode 100644 index 00000000000..b9df7a2cb2d Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Battery/pulse_rifle.rsi/wielded-inhand-left.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/pulse_rifle.rsi/wielded-inhand-right.png b/Resources/Textures/Objects/Weapons/Guns/Battery/pulse_rifle.rsi/wielded-inhand-right.png new file mode 100644 index 00000000000..644db232d2e Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Battery/pulse_rifle.rsi/wielded-inhand-right.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/xray.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Battery/xray.rsi/meta.json index 990ba511859..8766242121a 100644 --- a/Resources/Textures/Objects/Weapons/Guns/Battery/xray.rsi/meta.json +++ b/Resources/Textures/Objects/Weapons/Guns/Battery/xray.rsi/meta.json @@ -1,54 +1,62 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from cev-eris at https://github.com/discordia-space/CEV-Eris/raw/167a810bc8534a56c74ffa8f1373acd3b1ac70ee/icons/obj/guns/energy/xray.dmi, backpack sprite by peptide, backpack sling sprite edited by Boaz1111", + "copyright": "Taken from cev-eris at https://github.com/discordia-space/CEV-Eris/raw/167a810bc8534a56c74ffa8f1373acd3b1ac70ee/icons/obj/guns/energy/xray.dmi, backpack sprite by peptide, backpack sling sprite edited by Boaz1111, wield sprites by RiceMar1244", "size": { "x": 32, "y": 32 }, - "states": [ - { - "name": "icon" - }, - { - "name": "base" - }, - { - "name": "mag-unshaded-0", - "delays": [ - [ - 0.3, - 0.3 - ] - ] - }, - { - "name": "mag-unshaded-1" - }, - { - "name": "mag-unshaded-2" - }, - { - "name": "mag-unshaded-3" - }, - { - "name": "mag-unshaded-4" - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - }, - { - "name": "equipped-BACKPACK", - "directions": 4 - }, - { - "name": "equipped-SUITSTORAGE", - "directions": 4 - } - ] + "states": [ + { + "name": "icon" + }, + { + "name": "base" + }, + { + "name": "mag-unshaded-0", + "delays": [ + [ + 0.3, + 0.3 + ] + ] + }, + { + "name": "mag-unshaded-1" + }, + { + "name": "mag-unshaded-2" + }, + { + "name": "mag-unshaded-3" + }, + { + "name": "mag-unshaded-4" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "wielded-inhand-left", + "directions": 4 + }, + { + "name": "wielded-inhand-right", + "directions": 4 + }, + { + "name": "equipped-BACKPACK", + "directions": 4 + }, + { + "name": "equipped-SUITSTORAGE", + "directions": 4 + } + ] } diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/xray.rsi/wielded-inhand-left.png b/Resources/Textures/Objects/Weapons/Guns/Battery/xray.rsi/wielded-inhand-left.png new file mode 100644 index 00000000000..9fa2fafdff6 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Battery/xray.rsi/wielded-inhand-left.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/xray.rsi/wielded-inhand-right.png b/Resources/Textures/Objects/Weapons/Guns/Battery/xray.rsi/wielded-inhand-right.png new file mode 100644 index 00000000000..63615e2df1f Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Battery/xray.rsi/wielded-inhand-right.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Launchers/china_lake.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Launchers/china_lake.rsi/meta.json index a5e32a3b395..d3b991783f4 100644 --- a/Resources/Textures/Objects/Weapons/Guns/Launchers/china_lake.rsi/meta.json +++ b/Resources/Textures/Objects/Weapons/Guns/Launchers/china_lake.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-4.0", - "copyright": "Taken/modified from cev-eris at https://github.com/discordia-space/CEV-Eris/pull/6042/commits/64916c98f4847acc4adf3a2416bf78c005fd7dd7, https://github.com/discordia-space/CEV-Eris/blob/master/icons/obj/guns/launcher/grenadelauncher.dmi, backpack sprite by Peptide, backpack sling sprite edited by Boaz1111", + "copyright": "Taken/modified from cev-eris at https://github.com/discordia-space/CEV-Eris/pull/6042/commits/64916c98f4847acc4adf3a2416bf78c005fd7dd7, https://github.com/discordia-space/CEV-Eris/blob/master/icons/obj/guns/launcher/grenadelauncher.dmi, backpack sprite by Peptide, backpack sling sprite edited by Boaz1111, wield sprites by RiceMar1244", "size": { "x": 32, "y": 32 @@ -21,11 +21,19 @@ "name": "inhand-right", "directions": 4 }, + { + "name": "wielded-inhand-left", + "directions": 4 + }, + { + "name": "wielded-inhand-right", + "directions": 4 + }, { "name": "equipped-BACKPACK", "directions": 4 }, - { + { "name": "equipped-SUITSTORAGE", "directions": 4 } diff --git a/Resources/Textures/Objects/Weapons/Guns/Launchers/china_lake.rsi/wielded-inhand-left.png b/Resources/Textures/Objects/Weapons/Guns/Launchers/china_lake.rsi/wielded-inhand-left.png new file mode 100644 index 00000000000..a1d40617d2f Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Launchers/china_lake.rsi/wielded-inhand-left.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Launchers/china_lake.rsi/wielded-inhand-right.png b/Resources/Textures/Objects/Weapons/Guns/Launchers/china_lake.rsi/wielded-inhand-right.png new file mode 100644 index 00000000000..146fe9b1c2a Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Launchers/china_lake.rsi/wielded-inhand-right.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Launchers/mail.rsi/bolt-open.png b/Resources/Textures/Objects/Weapons/Guns/Launchers/mail.rsi/bolt-open.png new file mode 100644 index 00000000000..87c6d812ec2 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Launchers/mail.rsi/bolt-open.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Launchers/mail.rsi/equipped-BACKPACK.png b/Resources/Textures/Objects/Weapons/Guns/Launchers/mail.rsi/equipped-BACKPACK.png new file mode 100644 index 00000000000..c17a68eb35a Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Launchers/mail.rsi/equipped-BACKPACK.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Launchers/mail.rsi/equipped-BELT.png b/Resources/Textures/Objects/Weapons/Guns/Launchers/mail.rsi/equipped-BELT.png new file mode 100644 index 00000000000..59dc5f13ed0 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Launchers/mail.rsi/equipped-BELT.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Launchers/mail.rsi/icon.png b/Resources/Textures/Objects/Weapons/Guns/Launchers/mail.rsi/icon.png new file mode 100644 index 00000000000..dd7b21e1671 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Launchers/mail.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Launchers/mail.rsi/inhand-left.png b/Resources/Textures/Objects/Weapons/Guns/Launchers/mail.rsi/inhand-left.png new file mode 100644 index 00000000000..427389f40d5 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Launchers/mail.rsi/inhand-left.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Launchers/mail.rsi/inhand-right.png b/Resources/Textures/Objects/Weapons/Guns/Launchers/mail.rsi/inhand-right.png new file mode 100644 index 00000000000..8e50ef04f91 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Launchers/mail.rsi/inhand-right.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Launchers/mail.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Launchers/mail.rsi/meta.json new file mode 100644 index 00000000000..464c22d1a7a --- /dev/null +++ b/Resources/Textures/Objects/Weapons/Guns/Launchers/mail.rsi/meta.json @@ -0,0 +1,33 @@ +{ + "version": 1, + "license": "CC-BY-SA-4.0", + "copyright": "Taken/modified from cev-eris at https://github.com/discordia-space/CEV-Eris/pull/6042/commits/64916c98f4847acc4adf3a2416bf78c005fd7dd7, https://github.com/discordia-space/CEV-Eris/blob/master/icons/obj/guns/launcher/grenadelauncher.dmi, backpack sprite by Peptide, resprited for mail gun by erhardsteinhauer (discord)", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "bolt-open" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "equipped-BELT", + "directions": 4 + }, + { + "name": "equipped-BACKPACK", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Objects/Weapons/Guns/Pistols/N1984.rsi/base.png b/Resources/Textures/Objects/Weapons/Guns/Pistols/N1984.rsi/base.png index 984060bd911..8453ff926f3 100644 Binary files a/Resources/Textures/Objects/Weapons/Guns/Pistols/N1984.rsi/base.png and b/Resources/Textures/Objects/Weapons/Guns/Pistols/N1984.rsi/base.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Pistols/N1984.rsi/bolt-open.png b/Resources/Textures/Objects/Weapons/Guns/Pistols/N1984.rsi/bolt-open.png index 92f2c6e391f..9b260ad6389 100644 Binary files a/Resources/Textures/Objects/Weapons/Guns/Pistols/N1984.rsi/bolt-open.png and b/Resources/Textures/Objects/Weapons/Guns/Pistols/N1984.rsi/bolt-open.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Pistols/N1984.rsi/icon.png b/Resources/Textures/Objects/Weapons/Guns/Pistols/N1984.rsi/icon.png index bbe6128065d..4a114bc5bf3 100644 Binary files a/Resources/Textures/Objects/Weapons/Guns/Pistols/N1984.rsi/icon.png and b/Resources/Textures/Objects/Weapons/Guns/Pistols/N1984.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Pistols/N1984.rsi/inhand-left.png b/Resources/Textures/Objects/Weapons/Guns/Pistols/N1984.rsi/inhand-left.png index 73e6d63b9c2..ba1c8b93168 100644 Binary files a/Resources/Textures/Objects/Weapons/Guns/Pistols/N1984.rsi/inhand-left.png and b/Resources/Textures/Objects/Weapons/Guns/Pistols/N1984.rsi/inhand-left.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Pistols/N1984.rsi/inhand-right.png b/Resources/Textures/Objects/Weapons/Guns/Pistols/N1984.rsi/inhand-right.png index 443e6d2587f..bb63cdda359 100644 Binary files a/Resources/Textures/Objects/Weapons/Guns/Pistols/N1984.rsi/inhand-right.png and b/Resources/Textures/Objects/Weapons/Guns/Pistols/N1984.rsi/inhand-right.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Pistols/N1984nl.rsi/base.png b/Resources/Textures/Objects/Weapons/Guns/Pistols/N1984nl.rsi/base.png new file mode 100644 index 00000000000..96926b74b3d Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Pistols/N1984nl.rsi/base.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Pistols/N1984nl.rsi/bolt-open.png b/Resources/Textures/Objects/Weapons/Guns/Pistols/N1984nl.rsi/bolt-open.png new file mode 100644 index 00000000000..198796654d0 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Pistols/N1984nl.rsi/bolt-open.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Pistols/N1984nl.rsi/equipped-BELT.png b/Resources/Textures/Objects/Weapons/Guns/Pistols/N1984nl.rsi/equipped-BELT.png new file mode 100644 index 00000000000..ab0d0a822f9 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Pistols/N1984nl.rsi/equipped-BELT.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Pistols/N1984nl.rsi/equipped-SUITSTORAGE.png b/Resources/Textures/Objects/Weapons/Guns/Pistols/N1984nl.rsi/equipped-SUITSTORAGE.png new file mode 100644 index 00000000000..ab0d0a822f9 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Pistols/N1984nl.rsi/equipped-SUITSTORAGE.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Pistols/N1984nl.rsi/icon.png b/Resources/Textures/Objects/Weapons/Guns/Pistols/N1984nl.rsi/icon.png new file mode 100644 index 00000000000..43cd3b8a6af Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Pistols/N1984nl.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Pistols/N1984nl.rsi/inhand-left.png b/Resources/Textures/Objects/Weapons/Guns/Pistols/N1984nl.rsi/inhand-left.png new file mode 100644 index 00000000000..6edffcf2ca2 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Pistols/N1984nl.rsi/inhand-left.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Pistols/N1984nl.rsi/inhand-right.png b/Resources/Textures/Objects/Weapons/Guns/Pistols/N1984nl.rsi/inhand-right.png new file mode 100644 index 00000000000..bfaeff21d72 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Pistols/N1984nl.rsi/inhand-right.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Pistols/N1984nl.rsi/mag-0.png b/Resources/Textures/Objects/Weapons/Guns/Pistols/N1984nl.rsi/mag-0.png new file mode 100644 index 00000000000..c661c6dfdce Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Pistols/N1984nl.rsi/mag-0.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Pistols/N1984nl.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Pistols/N1984nl.rsi/meta.json new file mode 100644 index 00000000000..86cb488aec4 --- /dev/null +++ b/Resources/Textures/Objects/Weapons/Guns/Pistols/N1984nl.rsi/meta.json @@ -0,0 +1,39 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Created by IProduceWidgets (github) to make the style of desertrose at https://github.com/DesertRose2/desertrose/commit/120961e254d7f83a6e00a02c76e734f9e5019345, https://github.com/DesertRose2/desertrose/blob/master/icons/obj/guns/projectile.dmi, modified by VMSolidus(Github)", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "base" + }, + { + "name": "bolt-open" + }, + { + "name": "mag-0" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "equipped-BELT", + "directions": 4 + }, + { + "name": "equipped-SUITSTORAGE", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Objects/Weapons/Guns/Pistols/mk58nl.rsi/base.png b/Resources/Textures/Objects/Weapons/Guns/Pistols/mk58nl.rsi/base.png new file mode 100644 index 00000000000..35fabdc39e4 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Pistols/mk58nl.rsi/base.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Pistols/mk58nl.rsi/bolt-open.png b/Resources/Textures/Objects/Weapons/Guns/Pistols/mk58nl.rsi/bolt-open.png new file mode 100644 index 00000000000..fbaec30e809 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Pistols/mk58nl.rsi/bolt-open.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Pistols/mk58nl.rsi/equipped-BELT.png b/Resources/Textures/Objects/Weapons/Guns/Pistols/mk58nl.rsi/equipped-BELT.png new file mode 100644 index 00000000000..785f4037d7c Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Pistols/mk58nl.rsi/equipped-BELT.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Pistols/mk58nl.rsi/equipped-SUITSTORAGE.png b/Resources/Textures/Objects/Weapons/Guns/Pistols/mk58nl.rsi/equipped-SUITSTORAGE.png new file mode 100644 index 00000000000..785f4037d7c Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Pistols/mk58nl.rsi/equipped-SUITSTORAGE.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Pistols/mk58nl.rsi/icon.png b/Resources/Textures/Objects/Weapons/Guns/Pistols/mk58nl.rsi/icon.png new file mode 100644 index 00000000000..6374765cdc6 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Pistols/mk58nl.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Pistols/mk58nl.rsi/inhand-left.png b/Resources/Textures/Objects/Weapons/Guns/Pistols/mk58nl.rsi/inhand-left.png new file mode 100644 index 00000000000..6edffcf2ca2 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Pistols/mk58nl.rsi/inhand-left.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Pistols/mk58nl.rsi/inhand-right.png b/Resources/Textures/Objects/Weapons/Guns/Pistols/mk58nl.rsi/inhand-right.png new file mode 100644 index 00000000000..bfaeff21d72 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Pistols/mk58nl.rsi/inhand-right.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Pistols/mk58nl.rsi/mag-0.png b/Resources/Textures/Objects/Weapons/Guns/Pistols/mk58nl.rsi/mag-0.png new file mode 100644 index 00000000000..c38916a8a1e Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Pistols/mk58nl.rsi/mag-0.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Pistols/mk58nl.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Pistols/mk58nl.rsi/meta.json new file mode 100644 index 00000000000..4a0d66bec3d --- /dev/null +++ b/Resources/Textures/Objects/Weapons/Guns/Pistols/mk58nl.rsi/meta.json @@ -0,0 +1,39 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from desertrose at https://github.com/DesertRose2/desertrose/commit/120961e254d7f83a6e00a02c76e734f9e5019345, https://github.com/DesertRose2/desertrose/blob/master/icons/obj/guns/projectile.dmi, modified by VMSolidus(Github)", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "base" + }, + { + "name": "bolt-open" + }, + { + "name": "mag-0" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "equipped-BELT", + "directions": 4 + }, + { + "name": "equipped-SUITSTORAGE", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Objects/Weapons/Guns/Pistols/viper.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Pistols/viper.rsi/meta.json index 6ac14bfc8f6..6e8276cc984 100644 --- a/Resources/Textures/Objects/Weapons/Guns/Pistols/viper.rsi/meta.json +++ b/Resources/Textures/Objects/Weapons/Guns/Pistols/viper.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken/modified from tgstation at https://github.com/tgstation/tgstation/pull/41804/commits/1baf679a544505960cebd071425f1df60669cdf3", + "copyright": "Taken/modified from tgstation at https://github.com/tgstation/tgstation/pull/41804/commits/1baf679a544505960cebd071425f1df60669cdf3, modified by VMSolidus", "size": { "x": 32, "y": 32 diff --git a/Resources/Textures/Objects/Weapons/Guns/Pistols/vipernl.rsi/base.png b/Resources/Textures/Objects/Weapons/Guns/Pistols/vipernl.rsi/base.png new file mode 100644 index 00000000000..8f71309a4f9 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Pistols/vipernl.rsi/base.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Pistols/vipernl.rsi/bolt-open.png b/Resources/Textures/Objects/Weapons/Guns/Pistols/vipernl.rsi/bolt-open.png new file mode 100644 index 00000000000..f4cd1110b52 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Pistols/vipernl.rsi/bolt-open.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Pistols/vipernl.rsi/equipped-BELT.png b/Resources/Textures/Objects/Weapons/Guns/Pistols/vipernl.rsi/equipped-BELT.png new file mode 100644 index 00000000000..07f1f9fa262 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Pistols/vipernl.rsi/equipped-BELT.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Pistols/vipernl.rsi/equipped-SUITSTORAGE.png b/Resources/Textures/Objects/Weapons/Guns/Pistols/vipernl.rsi/equipped-SUITSTORAGE.png new file mode 100644 index 00000000000..07f1f9fa262 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Pistols/vipernl.rsi/equipped-SUITSTORAGE.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Pistols/vipernl.rsi/icon.png b/Resources/Textures/Objects/Weapons/Guns/Pistols/vipernl.rsi/icon.png new file mode 100644 index 00000000000..396600d94f7 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Pistols/vipernl.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Pistols/vipernl.rsi/inhand-left.png b/Resources/Textures/Objects/Weapons/Guns/Pistols/vipernl.rsi/inhand-left.png new file mode 100644 index 00000000000..631d2edd374 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Pistols/vipernl.rsi/inhand-left.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Pistols/vipernl.rsi/inhand-right.png b/Resources/Textures/Objects/Weapons/Guns/Pistols/vipernl.rsi/inhand-right.png new file mode 100644 index 00000000000..9eb5acea484 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Pistols/vipernl.rsi/inhand-right.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Pistols/vipernl.rsi/mag-0.png b/Resources/Textures/Objects/Weapons/Guns/Pistols/vipernl.rsi/mag-0.png new file mode 100644 index 00000000000..ae6e64af1fa Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Pistols/vipernl.rsi/mag-0.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Pistols/vipernl.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Pistols/vipernl.rsi/meta.json new file mode 100644 index 00000000000..6ac14bfc8f6 --- /dev/null +++ b/Resources/Textures/Objects/Weapons/Guns/Pistols/vipernl.rsi/meta.json @@ -0,0 +1,42 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken/modified from tgstation at https://github.com/tgstation/tgstation/pull/41804/commits/1baf679a544505960cebd071425f1df60669cdf3", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "base" + }, + { + "name": "bolt-open" + }, + { + "name": "mag-0" + }, + { + "name": "suppressor" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "equipped-BELT", + "directions": 4 + }, + { + "name": "equipped-SUITSTORAGE", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Objects/Weapons/Guns/Pistols/vipernl.rsi/suppressor.png b/Resources/Textures/Objects/Weapons/Guns/Pistols/vipernl.rsi/suppressor.png new file mode 100644 index 00000000000..401301c43e7 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Pistols/vipernl.rsi/suppressor.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Rifles/ak.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Rifles/ak.rsi/meta.json index 919d0f87ac0..0257e70364f 100644 --- a/Resources/Textures/Objects/Weapons/Guns/Rifles/ak.rsi/meta.json +++ b/Resources/Textures/Objects/Weapons/Guns/Rifles/ak.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken/modified from cev-eris at https://github.com/discordia-space/CEV-Eris/pull/6042/commits/64916c98f4847acc4adf3a2416bf78c005fd7dd7, https://github.com/discordia-space/CEV-Eris/raw/e1a3cbe9ba2e6e29b7f1cad1bb456b390aac936d/icons/obj/guns/projectile.dmi, backpack sprite by Peptide, backpack sling sprite edited by Boaz1111", + "copyright": "Taken/modified from cev-eris at https://github.com/discordia-space/CEV-Eris/pull/6042/commits/64916c98f4847acc4adf3a2416bf78c005fd7dd7, https://github.com/discordia-space/CEV-Eris/raw/e1a3cbe9ba2e6e29b7f1cad1bb456b390aac936d/icons/obj/guns/projectile.dmi, backpack sprite by Peptide, backpack sling sprite edited by Boaz1111, wield sprites by RiceMar1244", "size": { "x": 32, "y": 32 @@ -27,13 +27,21 @@ "name": "inhand-right", "directions": 4 }, + { + "name": "wielded-inhand-left", + "directions": 4 + }, + { + "name": "wielded-inhand-right", + "directions": 4 + }, { "name": "equipped-BACKPACK", "directions": 4 - }, - { - "name": "equipped-SUITSTORAGE", - "directions": 4 + }, + { + "name": "equipped-SUITSTORAGE", + "directions": 4 } ] } diff --git a/Resources/Textures/Objects/Weapons/Guns/Rifles/ak.rsi/wielded-inhand-left.png b/Resources/Textures/Objects/Weapons/Guns/Rifles/ak.rsi/wielded-inhand-left.png new file mode 100644 index 00000000000..2fa1f7811dc Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Rifles/ak.rsi/wielded-inhand-left.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Rifles/ak.rsi/wielded-inhand-right.png b/Resources/Textures/Objects/Weapons/Guns/Rifles/ak.rsi/wielded-inhand-right.png new file mode 100644 index 00000000000..c358af57c32 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Rifles/ak.rsi/wielded-inhand-right.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Rifles/lecter.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Rifles/lecter.rsi/meta.json index 2f30ef18a87..c45db54aff5 100644 --- a/Resources/Textures/Objects/Weapons/Guns/Rifles/lecter.rsi/meta.json +++ b/Resources/Textures/Objects/Weapons/Guns/Rifles/lecter.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken/modified from tgstation at https://github.com/tgstation/tgstation/pull/41393/commits/1e56473177d0994d163c9edca3d13d6e5b640cc4, https://github.com/tgstation/tgstation/tree/master/icons/obj/weapons/guns backpack sprite by Peptide (copy of carbine), backpack sling sprite edited by Boaz1111", + "copyright": "Taken/modified from tgstation at https://github.com/tgstation/tgstation/pull/41393/commits/1e56473177d0994d163c9edca3d13d6e5b640cc4, https://github.com/tgstation/tgstation/tree/master/icons/obj/weapons/guns backpack sprite by Peptide (copy of carbine), backpack sling sprite edited by Boaz1111, wield sprites by RiceMar1244", "size": { "x": 32, "y": 32 @@ -27,11 +27,19 @@ "name": "inhand-right", "directions": 4 }, + { + "name": "wielded-inhand-left", + "directions": 4 + }, + { + "name": "wielded-inhand-right", + "directions": 4 + }, { "name": "equipped-BACKPACK", "directions": 4 }, - { + { "name": "equipped-SUITSTORAGE", "directions": 4 } diff --git a/Resources/Textures/Objects/Weapons/Guns/Rifles/lecter.rsi/wielded-inhand-left.png b/Resources/Textures/Objects/Weapons/Guns/Rifles/lecter.rsi/wielded-inhand-left.png new file mode 100644 index 00000000000..42926b00f47 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Rifles/lecter.rsi/wielded-inhand-left.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Rifles/lecter.rsi/wielded-inhand-right.png b/Resources/Textures/Objects/Weapons/Guns/Rifles/lecter.rsi/wielded-inhand-right.png new file mode 100644 index 00000000000..fd58fca837b Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Rifles/lecter.rsi/wielded-inhand-right.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/SMGs/c20r.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/SMGs/c20r.rsi/meta.json index 8b1af3c5049..2ff87fa2917 100644 --- a/Resources/Textures/Objects/Weapons/Guns/SMGs/c20r.rsi/meta.json +++ b/Resources/Textures/Objects/Weapons/Guns/SMGs/c20r.rsi/meta.json @@ -45,11 +45,19 @@ "name": "inhand-right", "directions": 4 }, + { + "name": "wielded-inhand-left", + "directions": 4 + }, + { + "name": "wielded-inhand-right", + "directions": 4 + }, { "name": "equipped-BACKPACK", "directions": 4 }, - { + { "name": "equipped-SUITSTORAGE", "directions": 4 } diff --git a/Resources/Textures/Objects/Weapons/Guns/SMGs/c20r.rsi/wielded-inhand-left.png b/Resources/Textures/Objects/Weapons/Guns/SMGs/c20r.rsi/wielded-inhand-left.png new file mode 100644 index 00000000000..50b0e2a1d4f Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/SMGs/c20r.rsi/wielded-inhand-left.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/SMGs/c20r.rsi/wielded-inhand-right.png b/Resources/Textures/Objects/Weapons/Guns/SMGs/c20r.rsi/wielded-inhand-right.png new file mode 100644 index 00000000000..eaf5e92574d Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/SMGs/c20r.rsi/wielded-inhand-right.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/SMGs/drozd.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/SMGs/drozd.rsi/meta.json index 25feebd92c2..bd66b2c9685 100644 --- a/Resources/Textures/Objects/Weapons/Guns/SMGs/drozd.rsi/meta.json +++ b/Resources/Textures/Objects/Weapons/Guns/SMGs/drozd.rsi/meta.json @@ -1,42 +1,50 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken/modified from cev-eris at https://github.com/discordia-space/CEV-Eris/raw/56cbafd6ad8c013ccd5472d6c4a0db790f7f872a/icons/obj/guns/projectile/drozd.dmi, sprite modification by Jaсkal 298/TaralGit, backpack sling sprite edited by Boaz1111", + "copyright": "Taken/modified from cev-eris at https://github.com/discordia-space/CEV-Eris/raw/56cbafd6ad8c013ccd5472d6c4a0db790f7f872a/icons/obj/guns/projectile/drozd.dmi, sprite modification by Jaсkal 298/TaralGit, backpack sling sprite edited by Boaz1111, wield sprites by RiceMar1244", "size": { "x": 32, "y": 32 }, - "states": [ - { - "name": "icon" - }, - { - "name": "base" - }, - { - "name": "bolt-open" - }, - { - "name": "mag-0" - }, - { - "name": "suppressor" - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - }, - { - "name": "equipped-BACKPACK", - "directions": 4 - }, - { - "name": "equipped-SUITSTORAGE", - "directions": 4 - } + "states": [ + { + "name": "icon" + }, + { + "name": "base" + }, + { + "name": "bolt-open" + }, + { + "name": "mag-0" + }, + { + "name": "suppressor" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "wielded-inhand-left", + "directions": 4 + }, + { + "name": "wielded-inhand-right", + "directions": 4 + }, + { + "name": "equipped-BACKPACK", + "directions": 4 + }, + { + "name": "equipped-SUITSTORAGE", + "directions": 4 + } ] } diff --git a/Resources/Textures/Objects/Weapons/Guns/SMGs/drozd.rsi/wielded-inhand-left.png b/Resources/Textures/Objects/Weapons/Guns/SMGs/drozd.rsi/wielded-inhand-left.png new file mode 100644 index 00000000000..ee66cf3df9b Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/SMGs/drozd.rsi/wielded-inhand-left.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/SMGs/drozd.rsi/wielded-inhand-right.png b/Resources/Textures/Objects/Weapons/Guns/SMGs/drozd.rsi/wielded-inhand-right.png new file mode 100644 index 00000000000..c5d66956051 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/SMGs/drozd.rsi/wielded-inhand-right.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Shotguns/blunderbuss.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Shotguns/blunderbuss.rsi/meta.json index f55fd2db207..b3ab88b772f 100644 --- a/Resources/Textures/Objects/Weapons/Guns/Shotguns/blunderbuss.rsi/meta.json +++ b/Resources/Textures/Objects/Weapons/Guns/Shotguns/blunderbuss.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Made by brainfood1183(Github) inspired by an image created by rezierré#5003 (Discord)", + "copyright": "Made by brainfood1183(Github) inspired by an image created by rezierré#5003 (Discord), wield sprites by RiceMar1244", "size": { "x": 32, "y": 32 @@ -20,6 +20,14 @@ { "name": "inhand-left", "directions": 4 + }, + { + "name": "wielded-inhand-left", + "directions": 4 + }, + { + "name": "wielded-inhand-right", + "directions": 4 } ] } diff --git a/Resources/Textures/Objects/Weapons/Guns/Shotguns/blunderbuss.rsi/wielded-inhand-left.png b/Resources/Textures/Objects/Weapons/Guns/Shotguns/blunderbuss.rsi/wielded-inhand-left.png new file mode 100644 index 00000000000..da4a7f4f922 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Shotguns/blunderbuss.rsi/wielded-inhand-left.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Shotguns/blunderbuss.rsi/wielded-inhand-right.png b/Resources/Textures/Objects/Weapons/Guns/Shotguns/blunderbuss.rsi/wielded-inhand-right.png new file mode 100644 index 00000000000..ac02c47a844 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Shotguns/blunderbuss.rsi/wielded-inhand-right.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Shotguns/bulldog.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Shotguns/bulldog.rsi/meta.json index 5ef981dec9e..8699d00b7df 100644 --- a/Resources/Textures/Objects/Weapons/Guns/Shotguns/bulldog.rsi/meta.json +++ b/Resources/Textures/Objects/Weapons/Guns/Shotguns/bulldog.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/commit/1b6831dab1e1a74c0d91f2229adb87abbb089d31, backpack sprite by Peptide, backpack sling sprite edited by Boaz1111", + "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/commit/1b6831dab1e1a74c0d91f2229adb87abbb089d31, backpack sprite by Peptide, backpack sling sprite edited by Boaz1111, wield sprites by RiceMar1244", "size": { "x": 32, "y": 32 @@ -27,11 +27,19 @@ "name": "inhand-right", "directions": 4 }, + { + "name": "wielded-inhand-left", + "directions": 4 + }, + { + "name": "wielded-inhand-right", + "directions": 4 + }, { "name": "equipped-BACKPACK", "directions": 4 }, - { + { "name": "equipped-SUITSTORAGE", "directions": 4 } diff --git a/Resources/Textures/Objects/Weapons/Guns/Shotguns/bulldog.rsi/wielded-inhand-left.png b/Resources/Textures/Objects/Weapons/Guns/Shotguns/bulldog.rsi/wielded-inhand-left.png new file mode 100644 index 00000000000..9a45848ec52 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Shotguns/bulldog.rsi/wielded-inhand-left.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Shotguns/bulldog.rsi/wielded-inhand-right.png b/Resources/Textures/Objects/Weapons/Guns/Shotguns/bulldog.rsi/wielded-inhand-right.png new file mode 100644 index 00000000000..7252681abaf Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Shotguns/bulldog.rsi/wielded-inhand-right.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Shotguns/db_shotgun.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Shotguns/db_shotgun.rsi/meta.json index 27d7ebd6653..3add3a471b6 100644 --- a/Resources/Textures/Objects/Weapons/Guns/Shotguns/db_shotgun.rsi/meta.json +++ b/Resources/Textures/Objects/Weapons/Guns/Shotguns/db_shotgun.rsi/meta.json @@ -17,7 +17,7 @@ "name": "equipped-BACKPACK", "directions": 4 }, - { + { "name": "equipped-SUITSTORAGE", "directions": 4 } diff --git a/Resources/Textures/Objects/Weapons/Guns/Shotguns/inhands_64x.rsi/db-inhand-left.png b/Resources/Textures/Objects/Weapons/Guns/Shotguns/db_shotgun_inhands_64x.rsi/inhand-left.png similarity index 100% rename from Resources/Textures/Objects/Weapons/Guns/Shotguns/inhands_64x.rsi/db-inhand-left.png rename to Resources/Textures/Objects/Weapons/Guns/Shotguns/db_shotgun_inhands_64x.rsi/inhand-left.png diff --git a/Resources/Textures/Objects/Weapons/Guns/Shotguns/inhands_64x.rsi/db-inhand-right.png b/Resources/Textures/Objects/Weapons/Guns/Shotguns/db_shotgun_inhands_64x.rsi/inhand-right.png similarity index 100% rename from Resources/Textures/Objects/Weapons/Guns/Shotguns/inhands_64x.rsi/db-inhand-right.png rename to Resources/Textures/Objects/Weapons/Guns/Shotguns/db_shotgun_inhands_64x.rsi/inhand-right.png diff --git a/Resources/Textures/Objects/Weapons/Guns/Shotguns/db_shotgun_inhands_64x.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Shotguns/db_shotgun_inhands_64x.rsi/meta.json new file mode 100644 index 00000000000..6c1d1581e8a --- /dev/null +++ b/Resources/Textures/Objects/Weapons/Guns/Shotguns/db_shotgun_inhands_64x.rsi/meta.json @@ -0,0 +1,27 @@ +{ + "version": 1, + "license": "CC-BY-NC-4.0", + "copyright": "Taken from https://github.com/tgstation/tgstation/ at commit fb2d71495bfe81446159ef528534193d09dd8d34, wield sprites by RiceMar1244", + "size": { + "x": 64, + "y": 64 + }, + "states": [ + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "wielded-inhand-left", + "directions": 4 + }, + { + "name": "wielded-inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Objects/Weapons/Guns/Shotguns/db_shotgun_inhands_64x.rsi/wielded-inhand-left.png b/Resources/Textures/Objects/Weapons/Guns/Shotguns/db_shotgun_inhands_64x.rsi/wielded-inhand-left.png new file mode 100644 index 00000000000..27c2e923590 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Shotguns/db_shotgun_inhands_64x.rsi/wielded-inhand-left.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Shotguns/db_shotgun_inhands_64x.rsi/wielded-inhand-right.png b/Resources/Textures/Objects/Weapons/Guns/Shotguns/db_shotgun_inhands_64x.rsi/wielded-inhand-right.png new file mode 100644 index 00000000000..78165792c70 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Shotguns/db_shotgun_inhands_64x.rsi/wielded-inhand-right.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Shotguns/enforcer.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Shotguns/enforcer.rsi/meta.json index f3a7f48582c..42b8d94d6d0 100644 --- a/Resources/Textures/Objects/Weapons/Guns/Shotguns/enforcer.rsi/meta.json +++ b/Resources/Textures/Objects/Weapons/Guns/Shotguns/enforcer.rsi/meta.json @@ -17,7 +17,7 @@ "name": "equipped-BACKPACK", "directions": 4 }, - { + { "name": "equipped-SUITSTORAGE", "directions": 4 } diff --git a/Resources/Textures/Objects/Weapons/Guns/Shotguns/inhands_64x.rsi/enforcer-inhand-left.png b/Resources/Textures/Objects/Weapons/Guns/Shotguns/enforcer_inhands_64x.rsi/inhand-left.png similarity index 100% rename from Resources/Textures/Objects/Weapons/Guns/Shotguns/inhands_64x.rsi/enforcer-inhand-left.png rename to Resources/Textures/Objects/Weapons/Guns/Shotguns/enforcer_inhands_64x.rsi/inhand-left.png diff --git a/Resources/Textures/Objects/Weapons/Guns/Shotguns/inhands_64x.rsi/enforcer-inhand-right.png b/Resources/Textures/Objects/Weapons/Guns/Shotguns/enforcer_inhands_64x.rsi/inhand-right.png similarity index 100% rename from Resources/Textures/Objects/Weapons/Guns/Shotguns/inhands_64x.rsi/enforcer-inhand-right.png rename to Resources/Textures/Objects/Weapons/Guns/Shotguns/enforcer_inhands_64x.rsi/inhand-right.png diff --git a/Resources/Textures/Objects/Weapons/Guns/Shotguns/enforcer_inhands_64x.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Shotguns/enforcer_inhands_64x.rsi/meta.json new file mode 100644 index 00000000000..6c1d1581e8a --- /dev/null +++ b/Resources/Textures/Objects/Weapons/Guns/Shotguns/enforcer_inhands_64x.rsi/meta.json @@ -0,0 +1,27 @@ +{ + "version": 1, + "license": "CC-BY-NC-4.0", + "copyright": "Taken from https://github.com/tgstation/tgstation/ at commit fb2d71495bfe81446159ef528534193d09dd8d34, wield sprites by RiceMar1244", + "size": { + "x": 64, + "y": 64 + }, + "states": [ + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "wielded-inhand-left", + "directions": 4 + }, + { + "name": "wielded-inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Objects/Weapons/Guns/Shotguns/enforcer_inhands_64x.rsi/wielded-inhand-left.png b/Resources/Textures/Objects/Weapons/Guns/Shotguns/enforcer_inhands_64x.rsi/wielded-inhand-left.png new file mode 100644 index 00000000000..5f5b50d715d Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Shotguns/enforcer_inhands_64x.rsi/wielded-inhand-left.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Shotguns/enforcer_inhands_64x.rsi/wielded-inhand-right.png b/Resources/Textures/Objects/Weapons/Guns/Shotguns/enforcer_inhands_64x.rsi/wielded-inhand-right.png new file mode 100644 index 00000000000..4810c9c3755 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Shotguns/enforcer_inhands_64x.rsi/wielded-inhand-right.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Shotguns/inhands_64x.rsi/improvised-inhand-left.png b/Resources/Textures/Objects/Weapons/Guns/Shotguns/improvised_shotgun_inhands_64x.rsi/inhand-left.png similarity index 100% rename from Resources/Textures/Objects/Weapons/Guns/Shotguns/inhands_64x.rsi/improvised-inhand-left.png rename to Resources/Textures/Objects/Weapons/Guns/Shotguns/improvised_shotgun_inhands_64x.rsi/inhand-left.png diff --git a/Resources/Textures/Objects/Weapons/Guns/Shotguns/inhands_64x.rsi/improvised-inhand-right.png b/Resources/Textures/Objects/Weapons/Guns/Shotguns/improvised_shotgun_inhands_64x.rsi/inhand-right.png similarity index 100% rename from Resources/Textures/Objects/Weapons/Guns/Shotguns/inhands_64x.rsi/improvised-inhand-right.png rename to Resources/Textures/Objects/Weapons/Guns/Shotguns/improvised_shotgun_inhands_64x.rsi/inhand-right.png diff --git a/Resources/Textures/Objects/Weapons/Guns/Shotguns/improvised_shotgun_inhands_64x.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Shotguns/improvised_shotgun_inhands_64x.rsi/meta.json new file mode 100644 index 00000000000..6c1d1581e8a --- /dev/null +++ b/Resources/Textures/Objects/Weapons/Guns/Shotguns/improvised_shotgun_inhands_64x.rsi/meta.json @@ -0,0 +1,27 @@ +{ + "version": 1, + "license": "CC-BY-NC-4.0", + "copyright": "Taken from https://github.com/tgstation/tgstation/ at commit fb2d71495bfe81446159ef528534193d09dd8d34, wield sprites by RiceMar1244", + "size": { + "x": 64, + "y": 64 + }, + "states": [ + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "wielded-inhand-left", + "directions": 4 + }, + { + "name": "wielded-inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Objects/Weapons/Guns/Shotguns/improvised_shotgun_inhands_64x.rsi/wielded-inhand-left.png b/Resources/Textures/Objects/Weapons/Guns/Shotguns/improvised_shotgun_inhands_64x.rsi/wielded-inhand-left.png new file mode 100644 index 00000000000..26a569bfc22 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Shotguns/improvised_shotgun_inhands_64x.rsi/wielded-inhand-left.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Shotguns/improvised_shotgun_inhands_64x.rsi/wielded-inhand-right.png b/Resources/Textures/Objects/Weapons/Guns/Shotguns/improvised_shotgun_inhands_64x.rsi/wielded-inhand-right.png new file mode 100644 index 00000000000..e2380308b43 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Shotguns/improvised_shotgun_inhands_64x.rsi/wielded-inhand-right.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Shotguns/inhands_64x.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Shotguns/inhands_64x.rsi/meta.json deleted file mode 100644 index fefe1f6eb75..00000000000 --- a/Resources/Textures/Objects/Weapons/Guns/Shotguns/inhands_64x.rsi/meta.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "version": 1, - "license": "CC-BY-NC-4.0", - "copyright": "Taken from https://github.com/tgstation/tgstation/ at commit fb2d71495bfe81446159ef528534193d09dd8d34, sawn-inhand states modified from db-inhand by Flareguy", - "size": { - "x": 64, - "y": 64 - }, - "states": [ - { - "name": "pump-inhand-left", - "directions": 4 - }, - { - "name": "pump-inhand-right", - "directions": 4 - }, - { - "name": "enforcer-inhand-left", - "directions": 4 - }, - { - "name": "enforcer-inhand-right", - "directions": 4 - }, - { - "name": "db-inhand-left", - "directions": 4 - }, - { - "name": "db-inhand-right", - "directions": 4 - }, - { - "name": "sawn-inhand-left", - "directions": 4 - }, - { - "name": "sawn-inhand-right", - "directions": 4 - }, - { - "name": "improvised-inhand-left", - "directions": 4 - }, - { - "name": "improvised-inhand-right", - "directions": 4 - } - ] -} diff --git a/Resources/Textures/Objects/Weapons/Guns/Shotguns/pump.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Shotguns/pump.rsi/meta.json index 27d7ebd6653..3add3a471b6 100644 --- a/Resources/Textures/Objects/Weapons/Guns/Shotguns/pump.rsi/meta.json +++ b/Resources/Textures/Objects/Weapons/Guns/Shotguns/pump.rsi/meta.json @@ -17,7 +17,7 @@ "name": "equipped-BACKPACK", "directions": 4 }, - { + { "name": "equipped-SUITSTORAGE", "directions": 4 } diff --git a/Resources/Textures/Objects/Weapons/Guns/Shotguns/inhands_64x.rsi/pump-inhand-left.png b/Resources/Textures/Objects/Weapons/Guns/Shotguns/pump_inhands_64x.rsi/inhand-left.png similarity index 100% rename from Resources/Textures/Objects/Weapons/Guns/Shotguns/inhands_64x.rsi/pump-inhand-left.png rename to Resources/Textures/Objects/Weapons/Guns/Shotguns/pump_inhands_64x.rsi/inhand-left.png diff --git a/Resources/Textures/Objects/Weapons/Guns/Shotguns/inhands_64x.rsi/pump-inhand-right.png b/Resources/Textures/Objects/Weapons/Guns/Shotguns/pump_inhands_64x.rsi/inhand-right.png similarity index 100% rename from Resources/Textures/Objects/Weapons/Guns/Shotguns/inhands_64x.rsi/pump-inhand-right.png rename to Resources/Textures/Objects/Weapons/Guns/Shotguns/pump_inhands_64x.rsi/inhand-right.png diff --git a/Resources/Textures/Objects/Weapons/Guns/Shotguns/pump_inhands_64x.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Shotguns/pump_inhands_64x.rsi/meta.json new file mode 100644 index 00000000000..6c1d1581e8a --- /dev/null +++ b/Resources/Textures/Objects/Weapons/Guns/Shotguns/pump_inhands_64x.rsi/meta.json @@ -0,0 +1,27 @@ +{ + "version": 1, + "license": "CC-BY-NC-4.0", + "copyright": "Taken from https://github.com/tgstation/tgstation/ at commit fb2d71495bfe81446159ef528534193d09dd8d34, wield sprites by RiceMar1244", + "size": { + "x": 64, + "y": 64 + }, + "states": [ + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "wielded-inhand-left", + "directions": 4 + }, + { + "name": "wielded-inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Objects/Weapons/Guns/Shotguns/pump_inhands_64x.rsi/wielded-inhand-left.png b/Resources/Textures/Objects/Weapons/Guns/Shotguns/pump_inhands_64x.rsi/wielded-inhand-left.png new file mode 100644 index 00000000000..09fbaae551e Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Shotguns/pump_inhands_64x.rsi/wielded-inhand-left.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Shotguns/pump_inhands_64x.rsi/wielded-inhand-right.png b/Resources/Textures/Objects/Weapons/Guns/Shotguns/pump_inhands_64x.rsi/wielded-inhand-right.png new file mode 100644 index 00000000000..00b475f6b45 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Shotguns/pump_inhands_64x.rsi/wielded-inhand-right.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Shotguns/inhands_64x.rsi/sawn-inhand-left.png b/Resources/Textures/Objects/Weapons/Guns/Shotguns/sawn_inhands_64x.rsi/inhand-left.png similarity index 100% rename from Resources/Textures/Objects/Weapons/Guns/Shotguns/inhands_64x.rsi/sawn-inhand-left.png rename to Resources/Textures/Objects/Weapons/Guns/Shotguns/sawn_inhands_64x.rsi/inhand-left.png diff --git a/Resources/Textures/Objects/Weapons/Guns/Shotguns/inhands_64x.rsi/sawn-inhand-right.png b/Resources/Textures/Objects/Weapons/Guns/Shotguns/sawn_inhands_64x.rsi/inhand-right.png similarity index 100% rename from Resources/Textures/Objects/Weapons/Guns/Shotguns/inhands_64x.rsi/sawn-inhand-right.png rename to Resources/Textures/Objects/Weapons/Guns/Shotguns/sawn_inhands_64x.rsi/inhand-right.png diff --git a/Resources/Textures/Objects/Weapons/Guns/Shotguns/sawn_inhands_64x.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Shotguns/sawn_inhands_64x.rsi/meta.json new file mode 100644 index 00000000000..852268d1874 --- /dev/null +++ b/Resources/Textures/Objects/Weapons/Guns/Shotguns/sawn_inhands_64x.rsi/meta.json @@ -0,0 +1,19 @@ +{ + "version": 1, + "license": "CC-BY-NC-4.0", + "copyright": "Taken from https://github.com/tgstation/tgstation/ at commit fb2d71495bfe81446159ef528534193d09dd8d34, sawn-inhand states modified from db-inhand by Flareguy", + "size": { + "x": 64, + "y": 64 + }, + "states": [ + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Objects/Weapons/Guns/Snipers/bolt_gun_wood.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Snipers/bolt_gun_wood.rsi/meta.json index 4f7fc5d6f55..e4f1ef8dd85 100644 --- a/Resources/Textures/Objects/Weapons/Guns/Snipers/bolt_gun_wood.rsi/meta.json +++ b/Resources/Textures/Objects/Weapons/Guns/Snipers/bolt_gun_wood.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from InterBay13 at https://github.com/AndySok/InterBay13/commit/84824582fe1381d9ea6282b9da407994ab8ab509, backpack sling sprite edited by Boaz1111", + "copyright": "Taken from InterBay13 at https://github.com/AndySok/InterBay13/commit/84824582fe1381d9ea6282b9da407994ab8ab509, backpack sling sprite edited by Boaz1111, wield sprites by RiceMar1244", "size": { "x": 32, "y": 32 @@ -21,11 +21,19 @@ "name": "inhand-right", "directions": 4 }, + { + "name": "wielded-inhand-left", + "directions": 4 + }, + { + "name": "wielded-inhand-right", + "directions": 4 + }, { "name": "equipped-BACKPACK", "directions": 4 }, - { + { "name": "equipped-SUITSTORAGE", "directions": 4 } diff --git a/Resources/Textures/Objects/Weapons/Guns/Snipers/bolt_gun_wood.rsi/wielded-inhand-left.png b/Resources/Textures/Objects/Weapons/Guns/Snipers/bolt_gun_wood.rsi/wielded-inhand-left.png new file mode 100644 index 00000000000..dc8f5727641 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Snipers/bolt_gun_wood.rsi/wielded-inhand-left.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Snipers/bolt_gun_wood.rsi/wielded-inhand-right.png b/Resources/Textures/Objects/Weapons/Guns/Snipers/bolt_gun_wood.rsi/wielded-inhand-right.png new file mode 100644 index 00000000000..7a478a39768 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Snipers/bolt_gun_wood.rsi/wielded-inhand-right.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Snipers/heavy_sniper.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Snipers/heavy_sniper.rsi/meta.json index da8881c7c58..818c56417d4 100644 --- a/Resources/Textures/Objects/Weapons/Guns/Snipers/heavy_sniper.rsi/meta.json +++ b/Resources/Textures/Objects/Weapons/Guns/Snipers/heavy_sniper.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/pull/13612/commits/c1cf3c42b0cd00023937e46845a7c32d6beefa0e, backpack sling sprite edited by Boaz1111", + "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/pull/13612/commits/c1cf3c42b0cd00023937e46845a7c32d6beefa0e, backpack sling sprite edited by Boaz1111, wield sprites by RiceMar1244", "size": { "x": 32, "y": 32 @@ -21,11 +21,19 @@ "name": "inhand-right", "directions": 4 }, + { + "name": "wielded-inhand-left", + "directions": 4 + }, + { + "name": "wielded-inhand-right", + "directions": 4 + }, { "name": "equipped-BACKPACK", "directions": 4 }, - { + { "name": "equipped-SUITSTORAGE", "directions": 4 } diff --git a/Resources/Textures/Objects/Weapons/Guns/Snipers/heavy_sniper.rsi/wielded-inhand-left.png b/Resources/Textures/Objects/Weapons/Guns/Snipers/heavy_sniper.rsi/wielded-inhand-left.png new file mode 100644 index 00000000000..d373352b9f5 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Snipers/heavy_sniper.rsi/wielded-inhand-left.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Snipers/heavy_sniper.rsi/wielded-inhand-right.png b/Resources/Textures/Objects/Weapons/Guns/Snipers/heavy_sniper.rsi/wielded-inhand-right.png new file mode 100644 index 00000000000..03625930c82 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Snipers/heavy_sniper.rsi/wielded-inhand-right.png differ diff --git a/Resources/Textures/Objects/Weapons/Melee/cane.rsi/cane-empty.png b/Resources/Textures/Objects/Weapons/Melee/cane.rsi/cane-empty.png new file mode 100644 index 00000000000..64cb9ef3aa2 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Melee/cane.rsi/cane-empty.png differ diff --git a/Resources/Textures/Objects/Weapons/Melee/cane.rsi/cane.png b/Resources/Textures/Objects/Weapons/Melee/cane.rsi/cane.png new file mode 100644 index 00000000000..721847ff284 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Melee/cane.rsi/cane.png differ diff --git a/Resources/Textures/Objects/Weapons/Melee/cane.rsi/inhand-left.png b/Resources/Textures/Objects/Weapons/Melee/cane.rsi/inhand-left.png new file mode 100644 index 00000000000..caa2f232703 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Melee/cane.rsi/inhand-left.png differ diff --git a/Resources/Textures/Objects/Weapons/Melee/cane.rsi/inhand-right.png b/Resources/Textures/Objects/Weapons/Melee/cane.rsi/inhand-right.png new file mode 100644 index 00000000000..8f12a08afd6 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Melee/cane.rsi/inhand-right.png differ diff --git a/Resources/Textures/Objects/Weapons/Melee/cane.rsi/meta.json b/Resources/Textures/Objects/Weapons/Melee/cane.rsi/meta.json new file mode 100644 index 00000000000..913fcb524bf --- /dev/null +++ b/Resources/Textures/Objects/Weapons/Melee/cane.rsi/meta.json @@ -0,0 +1,33 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Sprited by ps3moira#9488 on discord", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "cane-empty" + }, + { + "name": "cane" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "wielded-inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "wielded-inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Objects/Weapons/Melee/cane.rsi/wielded-inhand-left.png b/Resources/Textures/Objects/Weapons/Melee/cane.rsi/wielded-inhand-left.png new file mode 100644 index 00000000000..f6f87a4a90e Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Melee/cane.rsi/wielded-inhand-left.png differ diff --git a/Resources/Textures/Objects/Weapons/Melee/cane.rsi/wielded-inhand-right.png b/Resources/Textures/Objects/Weapons/Melee/cane.rsi/wielded-inhand-right.png new file mode 100644 index 00000000000..e1f0449b4c2 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Melee/cane.rsi/wielded-inhand-right.png differ diff --git a/Resources/Textures/Objects/Weapons/Melee/cane_blade.rsi/icon.png b/Resources/Textures/Objects/Weapons/Melee/cane_blade.rsi/icon.png new file mode 100644 index 00000000000..6581dc96e8c Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Melee/cane_blade.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Weapons/Melee/cane_blade.rsi/inhand-left.png b/Resources/Textures/Objects/Weapons/Melee/cane_blade.rsi/inhand-left.png new file mode 100644 index 00000000000..f8e57880cb1 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Melee/cane_blade.rsi/inhand-left.png differ diff --git a/Resources/Textures/Objects/Weapons/Melee/cane_blade.rsi/inhand-right.png b/Resources/Textures/Objects/Weapons/Melee/cane_blade.rsi/inhand-right.png new file mode 100644 index 00000000000..5fa04f7f87c Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Melee/cane_blade.rsi/inhand-right.png differ diff --git a/Resources/Textures/Objects/Weapons/Melee/cane_blade.rsi/meta.json b/Resources/Textures/Objects/Weapons/Melee/cane_blade.rsi/meta.json new file mode 100644 index 00000000000..a48335cc0d7 --- /dev/null +++ b/Resources/Textures/Objects/Weapons/Melee/cane_blade.rsi/meta.json @@ -0,0 +1,22 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Sprited by ps3moira#9488 on discord", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "icon" + } + ] +} diff --git a/Resources/Textures/Objects/Weapons/Melee/telebaton.rsi/icon-off.png b/Resources/Textures/Objects/Weapons/Melee/telebaton.rsi/icon-off.png new file mode 100644 index 00000000000..77efc573562 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Melee/telebaton.rsi/icon-off.png differ diff --git a/Resources/Textures/Objects/Weapons/Melee/telebaton.rsi/icon.png b/Resources/Textures/Objects/Weapons/Melee/telebaton.rsi/icon.png new file mode 100644 index 00000000000..fb6adc7b3dc Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Melee/telebaton.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Weapons/Melee/telebaton.rsi/inhand-left.png b/Resources/Textures/Objects/Weapons/Melee/telebaton.rsi/inhand-left.png new file mode 100644 index 00000000000..6f31eafd0f4 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Melee/telebaton.rsi/inhand-left.png differ diff --git a/Resources/Textures/Objects/Weapons/Melee/telebaton.rsi/inhand-right.png b/Resources/Textures/Objects/Weapons/Melee/telebaton.rsi/inhand-right.png new file mode 100644 index 00000000000..3ff76ef4daa Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Melee/telebaton.rsi/inhand-right.png differ diff --git a/Resources/Textures/Objects/Weapons/Melee/telebaton.rsi/meta.json b/Resources/Textures/Objects/Weapons/Melee/telebaton.rsi/meta.json new file mode 100644 index 00000000000..1abc5be52ff --- /dev/null +++ b/Resources/Textures/Objects/Weapons/Melee/telebaton.rsi/meta.json @@ -0,0 +1,25 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from Bee Station 13 at https://github.com/BeeStation/BeeStation-Hornet/commit/59b6fbe2e6f6f4194d650e2c51c6ae70b8a14aca", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "icon-off" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Objects/Weapons/Throwable/energy_bola.rsi/icon.png b/Resources/Textures/Objects/Weapons/Throwable/energy_bola.rsi/icon.png new file mode 100644 index 00000000000..a7192bb8e9d Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Throwable/energy_bola.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Weapons/Throwable/energy_bola.rsi/meta.json b/Resources/Textures/Objects/Weapons/Throwable/energy_bola.rsi/meta.json new file mode 100644 index 00000000000..dbbae21857c --- /dev/null +++ b/Resources/Textures/Objects/Weapons/Throwable/energy_bola.rsi/meta.json @@ -0,0 +1,18 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/b3e22d34474afbee7b84ba282ce0a9b8f332d377.", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon", + "delays": + [ + [0.1, 0.1] + ] + } + ] +} diff --git a/Resources/Textures/Shaders/color_tint.swsl b/Resources/Textures/Shaders/color_tint.swsl new file mode 100644 index 00000000000..a5449b2d4d6 --- /dev/null +++ b/Resources/Textures/Shaders/color_tint.swsl @@ -0,0 +1,56 @@ +light_mode unshaded; + +uniform sampler2D SCREEN_TEXTURE; +uniform lowp vec3 tint_color; // RGB color between 0 and 1 +uniform lowp float tint_amount; // Number between 0 and 1 + +// Function to convert RGB to HSV. +highp vec3 rgb2hsv(highp vec3 c) +{ + highp vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + highp vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g)); + highp vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r)); + + highp float d = q.x - min(q.w, q.y); + /* float e = 1.0e-10; */ + highp float e = 0.0000000001; + return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); +} + +// Function to convert HSV to RGB. +highp vec3 hsv2rgb(highp vec3 c) +{ + highp vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + highp vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); +} + +void fragment() { + highp vec4 color = zTextureSpec(SCREEN_TEXTURE, FRAGCOORD.xy * SCREEN_PIXEL_SIZE); + + // Convert color to HSV. + highp vec3 hsvTint = rgb2hsv(tint_color); + highp vec3 hsvColor = rgb2hsv(color.rgb); + + // Set the original hue to the tint hue as long as it's not greyscale. + if (hsvTint.y > 0.05 && hsvTint.z != 0.0) + { + hsvColor.x = hsvTint.x; + } + // Modify saturation based on tint color saturation, + // Halving it if it's higher and capping it at the original. + hsvColor.y = (hsvColor.y < hsvTint.y) ? + mix(hsvColor.y, hsvTint.y, 0.75) : mix(hsvColor.y, hsvTint.y, 0.35); + + // Modify value based on tint color value, but only if it's darker. + hsvColor.z = (mix(hsvColor.z, hsvTint.z, 0.85) <= hsvColor.z) ? + mix(hsvColor.z, hsvTint.z, 0.85) : hsvColor.z; + + // Convert back to RGB. + highp vec3 rgbColorMod = hsv2rgb(hsvColor); + + // Mix the final RGB product with the original color to the intensity of the tint. + color.rgb = mix(color.rgb, rgbColorMod, tint_amount); + + COLOR = color; +} \ No newline at end of file diff --git a/Resources/Textures/Shaders/displacement.swsl b/Resources/Textures/Shaders/displacement.swsl new file mode 100644 index 00000000000..ba5ca57852e --- /dev/null +++ b/Resources/Textures/Shaders/displacement.swsl @@ -0,0 +1,18 @@ +uniform sampler2D displacementMap; +uniform highp float displacementSize; +uniform highp vec4 displacementUV; + +varying highp vec2 displacementUVOut; + +void vertex() { + displacementUVOut = mix(displacementUV.xy, displacementUV.zw, tCoord2); +} + +void fragment() { + highp vec4 displacementSample = texture2D(displacementMap, displacementUVOut); + highp vec2 displacementValue = (displacementSample.xy - vec2(128.0 / 255.0)) / (1.0 - 128.0 / 255.0); + COLOR = zTexture(UV + displacementValue * TEXTURE_PIXEL_SIZE * displacementSize * vec2(1.0, -1.0)); + COLOR.a *= displacementSample.a; +} + + diff --git a/Resources/Textures/Shaders/ethereal.swsl b/Resources/Textures/Shaders/ethereal.swsl new file mode 100644 index 00000000000..dc9d971e1cd --- /dev/null +++ b/Resources/Textures/Shaders/ethereal.swsl @@ -0,0 +1,75 @@ +light_mode unshaded; + +uniform sampler2D SCREEN_TEXTURE; + +// Function to convert RGB to HSV. +highp vec3 rgb2hsv(highp vec3 c) +{ + highp vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + highp vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g)); + highp vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r)); + + highp float d = q.x - min(q.w, q.y); + /* float e = 1.0e-10; */ + highp float e = 0.0000000001; + return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); +} + +// Function to convert HSV to RGB. +highp vec3 hsv2rgb(highp vec3 c) +{ + highp vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + highp vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); +} + +// Random number function with potential negative values. +highp float rand(highp vec2 n) { + highp float r = 2.0 * (0.5 + 0.5 * fract (sin (dot (n.xy, vec2(12.9898, 78.233)))* 43758.5453)) - 1.0; + return r * (r < 0.0 ? 0.8 : 1.3); +} + +void fragment() { + highp vec4 color = zTextureSpec(SCREEN_TEXTURE, FRAGCOORD.xy * SCREEN_PIXEL_SIZE); + + // Increase the contrast of the image if the luminance is low enough. + highp float luminance = dot(color.rgb, vec3(0.2126, 0.7152, 0.0722)); + if (luminance < 0.06) { + color.rgb *= 0.5; + } + + // Convert to HSV. + highp vec3 hsvColor = rgb2hsv(color.rgb); + + // Apply a breathing effect to the value of the image. + hsvColor.z *= mix(0.35, 0.7, (sin(TIME) * 0.65)); + + // Increase the saturation of the color, incorperating a random value, as long as the value is above 0.1. + if (hsvColor.z > 0.065) { + hsvColor.y *= (rand(FRAGCOORD.xy * (TIME * 0.15)) * 1.5) + 1.0; + } + + // Convert back to RGB. + color.rgb = hsv2rgb(hsvColor); + + + + // get distortion magnitude. hand crafted from a random jumble of trig functions + highp float w = sin(TIME + (FRAGCOORD.x + FRAGCOORD.y + 2.0*sin(TIME*0.3) * sin(TIME*0.3 + FRAGCOORD.x - FRAGCOORD.y)) ); + + // visualize distortion via: + // COLOR = vec4(w,w,w,1.0); + + w *= 5.0; + + highp vec4 background = zTextureSpec(SCREEN_TEXTURE, ( FRAGCOORD.xy + vec2(w) ) * SCREEN_PIXEL_SIZE ); + highp vec3 hsvBg = rgb2hsv(background.rgb); + hsvBg.x *= -1.0; + background.rgb = hsv2rgb(hsvBg); + + color.xyz = mix(background.xyz, color.xyz, 0.75); + + + + COLOR = color; +} diff --git a/Resources/Textures/SimpleStation14/Structures/Furniture/Benches/pews.rsi/left.png b/Resources/Textures/SimpleStation14/Structures/Furniture/Benches/pews.rsi/left.png index 9631b4b1714..beb8cd4a0b2 100644 Binary files a/Resources/Textures/SimpleStation14/Structures/Furniture/Benches/pews.rsi/left.png and b/Resources/Textures/SimpleStation14/Structures/Furniture/Benches/pews.rsi/left.png differ diff --git a/Resources/Textures/SimpleStation14/Structures/Furniture/Benches/pews.rsi/right.png b/Resources/Textures/SimpleStation14/Structures/Furniture/Benches/pews.rsi/right.png index ea0922930fe..c1f2949a719 100644 Binary files a/Resources/Textures/SimpleStation14/Structures/Furniture/Benches/pews.rsi/right.png and b/Resources/Textures/SimpleStation14/Structures/Furniture/Benches/pews.rsi/right.png differ diff --git a/Resources/Textures/SimpleStation14/Structures/Furniture/Benches/steel_bench.rsi/left.png b/Resources/Textures/SimpleStation14/Structures/Furniture/Benches/steel_bench.rsi/left.png index 260c7298f77..b6c1ef00fcb 100644 Binary files a/Resources/Textures/SimpleStation14/Structures/Furniture/Benches/steel_bench.rsi/left.png and b/Resources/Textures/SimpleStation14/Structures/Furniture/Benches/steel_bench.rsi/left.png differ diff --git a/Resources/Textures/SimpleStation14/Structures/Furniture/Benches/steel_bench.rsi/right.png b/Resources/Textures/SimpleStation14/Structures/Furniture/Benches/steel_bench.rsi/right.png index b6c1ef00fcb..260c7298f77 100644 Binary files a/Resources/Textures/SimpleStation14/Structures/Furniture/Benches/steel_bench.rsi/right.png and b/Resources/Textures/SimpleStation14/Structures/Furniture/Benches/steel_bench.rsi/right.png differ diff --git a/Resources/Textures/SimpleStation14/Structures/Furniture/Benches/steel_bench_white.rsi/left.png b/Resources/Textures/SimpleStation14/Structures/Furniture/Benches/steel_bench_white.rsi/left.png index d456300e104..a412a51871b 100644 Binary files a/Resources/Textures/SimpleStation14/Structures/Furniture/Benches/steel_bench_white.rsi/left.png and b/Resources/Textures/SimpleStation14/Structures/Furniture/Benches/steel_bench_white.rsi/left.png differ diff --git a/Resources/Textures/SimpleStation14/Structures/Furniture/Benches/steel_bench_white.rsi/right.png b/Resources/Textures/SimpleStation14/Structures/Furniture/Benches/steel_bench_white.rsi/right.png index a412a51871b..d456300e104 100644 Binary files a/Resources/Textures/SimpleStation14/Structures/Furniture/Benches/steel_bench_white.rsi/right.png and b/Resources/Textures/SimpleStation14/Structures/Furniture/Benches/steel_bench_white.rsi/right.png differ diff --git a/Resources/Textures/Structures/Doors/Windoors/windoor.rsi/assembly.png b/Resources/Textures/Structures/Doors/Windoors/windoor.rsi/assembly.png index 668997d837e..1c397d15c74 100644 Binary files a/Resources/Textures/Structures/Doors/Windoors/windoor.rsi/assembly.png and b/Resources/Textures/Structures/Doors/Windoors/windoor.rsi/assembly.png differ diff --git a/Resources/Textures/Structures/Doors/Windoors/windoor.rsi/closed.png b/Resources/Textures/Structures/Doors/Windoors/windoor.rsi/closed.png index fe1f75ba132..528b2cada2f 100644 Binary files a/Resources/Textures/Structures/Doors/Windoors/windoor.rsi/closed.png and b/Resources/Textures/Structures/Doors/Windoors/windoor.rsi/closed.png differ diff --git a/Resources/Textures/Structures/Doors/Windoors/windoor.rsi/closing.png b/Resources/Textures/Structures/Doors/Windoors/windoor.rsi/closing.png index e7085665d79..44c87b9aca4 100644 Binary files a/Resources/Textures/Structures/Doors/Windoors/windoor.rsi/closing.png and b/Resources/Textures/Structures/Doors/Windoors/windoor.rsi/closing.png differ diff --git a/Resources/Textures/Structures/Doors/Windoors/windoor.rsi/meta.json b/Resources/Textures/Structures/Doors/Windoors/windoor.rsi/meta.json index 66954b66626..ecc17f8affb 100644 --- a/Resources/Textures/Structures/Doors/Windoors/windoor.rsi/meta.json +++ b/Resources/Textures/Structures/Doors/Windoors/windoor.rsi/meta.json @@ -1,7 +1,7 @@ { "version":1, "license":"CC-BY-SA-3.0", - "copyright":"Taken from tgstation at https://github.com/tgstation/tgstation/blob/3681006d7102045e334e8eddb23a8685fcdb258a/icons/obj/doors/windoor.dmi", + "copyright":"Taken from Paradise at https://github.com/ParadiseSS13/Paradise/blob/bd91a1b962fe9bd38e346e9fafd4ebb10784fcb3/icons/obj/doors/windoor.dmi", "size": { "x":32, "y":32 diff --git a/Resources/Textures/Structures/Doors/Windoors/windoor.rsi/opening.png b/Resources/Textures/Structures/Doors/Windoors/windoor.rsi/opening.png index 5b68943ff61..08b296af385 100644 Binary files a/Resources/Textures/Structures/Doors/Windoors/windoor.rsi/opening.png and b/Resources/Textures/Structures/Doors/Windoors/windoor.rsi/opening.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/carpet.rsi/full.png b/Resources/Textures/Structures/Furniture/Tables/carpet.rsi/full.png index 1b774e05759..c5587a9fa1c 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/carpet.rsi/full.png and b/Resources/Textures/Structures/Furniture/Tables/carpet.rsi/full.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/carpet.rsi/meta.json b/Resources/Textures/Structures/Furniture/Tables/carpet.rsi/meta.json index 0ebc40b8144..1ad8b4f3583 100644 --- a/Resources/Textures/Structures/Furniture/Tables/carpet.rsi/meta.json +++ b/Resources/Textures/Structures/Furniture/Tables/carpet.rsi/meta.json @@ -5,159 +5,42 @@ "y": 32 }, "license": "CC-BY-SA-3.0", - "copyright": "Taken from https://github.com/discordia-space/CEV-Eris/blob/0b3ab17dbad632ddf738b63900ef8df1926bba47/icons/obj/tables.dmi", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/47f6d91b37609b940152de62befa931dba35adf0", "states": [ { - "name": "full", - "delays": [ - [ - 1 - ] - ] + "name": "full" }, { "name": "state_0", - "directions": 4, - "delays": [ - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ] - ] + "directions": 4 }, { "name": "state_1", - "directions": 4, - "delays": [ - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ] - ] + "directions": 4 }, { "name": "state_2", - "directions": 4, - "delays": [ - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ] - ] + "directions": 4 }, { "name": "state_3", - "directions": 4, - "delays": [ - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ] - ] + "directions": 4 }, { "name": "state_4", - "directions": 4, - "delays": [ - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ] - ] + "directions": 4 }, { "name": "state_5", - "directions": 4, - "delays": [ - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ] - ] + "directions": 4 }, { "name": "state_6", - "directions": 4, - "delays": [ - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ] - ] + "directions": 4 }, { "name": "state_7", - "directions": 4, - "delays": [ - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ] - ] + "directions": 4 } ] } diff --git a/Resources/Textures/Structures/Furniture/Tables/carpet.rsi/state_0.png b/Resources/Textures/Structures/Furniture/Tables/carpet.rsi/state_0.png index f57395c659c..197d42df822 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/carpet.rsi/state_0.png and b/Resources/Textures/Structures/Furniture/Tables/carpet.rsi/state_0.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/carpet.rsi/state_1.png b/Resources/Textures/Structures/Furniture/Tables/carpet.rsi/state_1.png index f3631cfc0ea..43aca220cfa 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/carpet.rsi/state_1.png and b/Resources/Textures/Structures/Furniture/Tables/carpet.rsi/state_1.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/carpet.rsi/state_2.png b/Resources/Textures/Structures/Furniture/Tables/carpet.rsi/state_2.png index f57395c659c..197d42df822 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/carpet.rsi/state_2.png and b/Resources/Textures/Structures/Furniture/Tables/carpet.rsi/state_2.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/carpet.rsi/state_3.png b/Resources/Textures/Structures/Furniture/Tables/carpet.rsi/state_3.png index f3631cfc0ea..43aca220cfa 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/carpet.rsi/state_3.png and b/Resources/Textures/Structures/Furniture/Tables/carpet.rsi/state_3.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/carpet.rsi/state_4.png b/Resources/Textures/Structures/Furniture/Tables/carpet.rsi/state_4.png index a8d469a32f9..5ab0bb93dfd 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/carpet.rsi/state_4.png and b/Resources/Textures/Structures/Furniture/Tables/carpet.rsi/state_4.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/carpet.rsi/state_5.png b/Resources/Textures/Structures/Furniture/Tables/carpet.rsi/state_5.png index 6cbcfa1beff..f429ddeb5ac 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/carpet.rsi/state_5.png and b/Resources/Textures/Structures/Furniture/Tables/carpet.rsi/state_5.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/carpet.rsi/state_6.png b/Resources/Textures/Structures/Furniture/Tables/carpet.rsi/state_6.png index a8d469a32f9..5ab0bb93dfd 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/carpet.rsi/state_6.png and b/Resources/Textures/Structures/Furniture/Tables/carpet.rsi/state_6.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/carpet.rsi/state_7.png b/Resources/Textures/Structures/Furniture/Tables/carpet.rsi/state_7.png index 29bd4db74b9..0209287820a 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/carpet.rsi/state_7.png and b/Resources/Textures/Structures/Furniture/Tables/carpet.rsi/state_7.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/frame.rsi/full.png b/Resources/Textures/Structures/Furniture/Tables/frame.rsi/full.png index 2af9b7ff1b8..4eed0b0b085 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/frame.rsi/full.png and b/Resources/Textures/Structures/Furniture/Tables/frame.rsi/full.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/frame.rsi/state_0.png b/Resources/Textures/Structures/Furniture/Tables/frame.rsi/state_0.png index 2ba1f779a28..b0eb81d2c93 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/frame.rsi/state_0.png and b/Resources/Textures/Structures/Furniture/Tables/frame.rsi/state_0.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/frame.rsi/state_1.png b/Resources/Textures/Structures/Furniture/Tables/frame.rsi/state_1.png index 27684dc2589..2a982fa394b 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/frame.rsi/state_1.png and b/Resources/Textures/Structures/Furniture/Tables/frame.rsi/state_1.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/frame.rsi/state_2.png b/Resources/Textures/Structures/Furniture/Tables/frame.rsi/state_2.png index 2ba1f779a28..b0eb81d2c93 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/frame.rsi/state_2.png and b/Resources/Textures/Structures/Furniture/Tables/frame.rsi/state_2.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/frame.rsi/state_3.png b/Resources/Textures/Structures/Furniture/Tables/frame.rsi/state_3.png index 27684dc2589..2a982fa394b 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/frame.rsi/state_3.png and b/Resources/Textures/Structures/Furniture/Tables/frame.rsi/state_3.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/frame.rsi/state_4.png b/Resources/Textures/Structures/Furniture/Tables/frame.rsi/state_4.png index f2df00c177c..cc0ad2cf1cf 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/frame.rsi/state_4.png and b/Resources/Textures/Structures/Furniture/Tables/frame.rsi/state_4.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/frame.rsi/state_5.png b/Resources/Textures/Structures/Furniture/Tables/frame.rsi/state_5.png index 682b8d26e10..47e94567e70 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/frame.rsi/state_5.png and b/Resources/Textures/Structures/Furniture/Tables/frame.rsi/state_5.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/frame.rsi/state_6.png b/Resources/Textures/Structures/Furniture/Tables/frame.rsi/state_6.png index f2df00c177c..cc0ad2cf1cf 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/frame.rsi/state_6.png and b/Resources/Textures/Structures/Furniture/Tables/frame.rsi/state_6.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/generic.rsi/full.png b/Resources/Textures/Structures/Furniture/Tables/generic.rsi/full.png index 41b2c199d18..4f41d6f7dee 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/generic.rsi/full.png and b/Resources/Textures/Structures/Furniture/Tables/generic.rsi/full.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/generic.rsi/meta.json b/Resources/Textures/Structures/Furniture/Tables/generic.rsi/meta.json index 0ebc40b8144..3d992bc28d3 100644 --- a/Resources/Textures/Structures/Furniture/Tables/generic.rsi/meta.json +++ b/Resources/Textures/Structures/Furniture/Tables/generic.rsi/meta.json @@ -1,163 +1,46 @@ { - "version": 1, - "size": { - "x": 32, - "y": 32 - }, - "license": "CC-BY-SA-3.0", - "copyright": "Taken from https://github.com/discordia-space/CEV-Eris/blob/0b3ab17dbad632ddf738b63900ef8df1926bba47/icons/obj/tables.dmi", - "states": [ - { - "name": "full", - "delays": [ - [ - 1 - ] - ] - }, - { - "name": "state_0", - "directions": 4, - "delays": [ - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ] - ] - }, - { - "name": "state_1", - "directions": 4, - "delays": [ - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ] - ] - }, - { - "name": "state_2", - "directions": 4, - "delays": [ - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ] - ] - }, - { - "name": "state_3", - "directions": 4, - "delays": [ - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ] - ] - }, - { - "name": "state_4", - "directions": 4, - "delays": [ - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ] - ] - }, - { - "name": "state_5", - "directions": 4, - "delays": [ - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ] - ] - }, - { - "name": "state_6", - "directions": 4, - "delays": [ - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ] - ] - }, - { - "name": "state_7", - "directions": 4, - "delays": [ - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ] - ] - } - ] -} + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Paradise at https://github.com/ParadiseSS13/Paradise/blob/bd91a1b962fe9bd38e346e9fafd4ebb10784fcb3/icons/obj/smooth_structures/tables/table.dmi", + "states": [ + { + "name": "full" + }, + { + "name": "state_0", + "directions": 4 + }, + { + "name": "state_1", + "directions": 4 + }, + { + "name": "state_2", + "directions": 4 + }, + { + "name": "state_3", + "directions": 4 + }, + { + "name": "state_4", + "directions": 4 + }, + { + "name": "state_5", + "directions": 4 + }, + { + "name": "state_6", + "directions": 4 + }, + { + "name": "state_7", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Furniture/Tables/generic.rsi/state_0.png b/Resources/Textures/Structures/Furniture/Tables/generic.rsi/state_0.png index 47ab5fc187e..7f0bb2b5b29 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/generic.rsi/state_0.png and b/Resources/Textures/Structures/Furniture/Tables/generic.rsi/state_0.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/generic.rsi/state_1.png b/Resources/Textures/Structures/Furniture/Tables/generic.rsi/state_1.png index 3e78a2531b9..fa15c2495e3 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/generic.rsi/state_1.png and b/Resources/Textures/Structures/Furniture/Tables/generic.rsi/state_1.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/generic.rsi/state_2.png b/Resources/Textures/Structures/Furniture/Tables/generic.rsi/state_2.png index 47ab5fc187e..7f0bb2b5b29 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/generic.rsi/state_2.png and b/Resources/Textures/Structures/Furniture/Tables/generic.rsi/state_2.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/generic.rsi/state_3.png b/Resources/Textures/Structures/Furniture/Tables/generic.rsi/state_3.png index 3e78a2531b9..fa15c2495e3 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/generic.rsi/state_3.png and b/Resources/Textures/Structures/Furniture/Tables/generic.rsi/state_3.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/generic.rsi/state_4.png b/Resources/Textures/Structures/Furniture/Tables/generic.rsi/state_4.png index f4f9168b071..e5d4b519fef 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/generic.rsi/state_4.png and b/Resources/Textures/Structures/Furniture/Tables/generic.rsi/state_4.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/generic.rsi/state_5.png b/Resources/Textures/Structures/Furniture/Tables/generic.rsi/state_5.png index 0046d100290..eaec7e603a2 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/generic.rsi/state_5.png and b/Resources/Textures/Structures/Furniture/Tables/generic.rsi/state_5.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/generic.rsi/state_6.png b/Resources/Textures/Structures/Furniture/Tables/generic.rsi/state_6.png index f4f9168b071..e5d4b519fef 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/generic.rsi/state_6.png and b/Resources/Textures/Structures/Furniture/Tables/generic.rsi/state_6.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/generic.rsi/state_7.png b/Resources/Textures/Structures/Furniture/Tables/generic.rsi/state_7.png index 165f578dc0b..8cac72fc6f5 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/generic.rsi/state_7.png and b/Resources/Textures/Structures/Furniture/Tables/generic.rsi/state_7.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/glass.rsi/full.png b/Resources/Textures/Structures/Furniture/Tables/glass.rsi/full.png index 4c394c4650e..cbcbd3a3b13 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/glass.rsi/full.png and b/Resources/Textures/Structures/Furniture/Tables/glass.rsi/full.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/glass.rsi/meta.json b/Resources/Textures/Structures/Furniture/Tables/glass.rsi/meta.json index 0ebc40b8144..1ad8b4f3583 100644 --- a/Resources/Textures/Structures/Furniture/Tables/glass.rsi/meta.json +++ b/Resources/Textures/Structures/Furniture/Tables/glass.rsi/meta.json @@ -5,159 +5,42 @@ "y": 32 }, "license": "CC-BY-SA-3.0", - "copyright": "Taken from https://github.com/discordia-space/CEV-Eris/blob/0b3ab17dbad632ddf738b63900ef8df1926bba47/icons/obj/tables.dmi", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/47f6d91b37609b940152de62befa931dba35adf0", "states": [ { - "name": "full", - "delays": [ - [ - 1 - ] - ] + "name": "full" }, { "name": "state_0", - "directions": 4, - "delays": [ - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ] - ] + "directions": 4 }, { "name": "state_1", - "directions": 4, - "delays": [ - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ] - ] + "directions": 4 }, { "name": "state_2", - "directions": 4, - "delays": [ - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ] - ] + "directions": 4 }, { "name": "state_3", - "directions": 4, - "delays": [ - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ] - ] + "directions": 4 }, { "name": "state_4", - "directions": 4, - "delays": [ - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ] - ] + "directions": 4 }, { "name": "state_5", - "directions": 4, - "delays": [ - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ] - ] + "directions": 4 }, { "name": "state_6", - "directions": 4, - "delays": [ - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ] - ] + "directions": 4 }, { "name": "state_7", - "directions": 4, - "delays": [ - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ] - ] + "directions": 4 } ] } diff --git a/Resources/Textures/Structures/Furniture/Tables/glass.rsi/state_0.png b/Resources/Textures/Structures/Furniture/Tables/glass.rsi/state_0.png index 2ed3dbb4c09..d8d134f0cf2 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/glass.rsi/state_0.png and b/Resources/Textures/Structures/Furniture/Tables/glass.rsi/state_0.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/glass.rsi/state_1.png b/Resources/Textures/Structures/Furniture/Tables/glass.rsi/state_1.png index f63429f102c..4d979a5381a 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/glass.rsi/state_1.png and b/Resources/Textures/Structures/Furniture/Tables/glass.rsi/state_1.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/glass.rsi/state_2.png b/Resources/Textures/Structures/Furniture/Tables/glass.rsi/state_2.png index 2ed3dbb4c09..d8d134f0cf2 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/glass.rsi/state_2.png and b/Resources/Textures/Structures/Furniture/Tables/glass.rsi/state_2.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/glass.rsi/state_3.png b/Resources/Textures/Structures/Furniture/Tables/glass.rsi/state_3.png index f63429f102c..4d979a5381a 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/glass.rsi/state_3.png and b/Resources/Textures/Structures/Furniture/Tables/glass.rsi/state_3.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/glass.rsi/state_4.png b/Resources/Textures/Structures/Furniture/Tables/glass.rsi/state_4.png index 71d87be2d18..7ba52d1dd5c 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/glass.rsi/state_4.png and b/Resources/Textures/Structures/Furniture/Tables/glass.rsi/state_4.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/glass.rsi/state_5.png b/Resources/Textures/Structures/Furniture/Tables/glass.rsi/state_5.png index 74794bbf345..16c34ffa59c 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/glass.rsi/state_5.png and b/Resources/Textures/Structures/Furniture/Tables/glass.rsi/state_5.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/glass.rsi/state_6.png b/Resources/Textures/Structures/Furniture/Tables/glass.rsi/state_6.png index 71d87be2d18..7ba52d1dd5c 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/glass.rsi/state_6.png and b/Resources/Textures/Structures/Furniture/Tables/glass.rsi/state_6.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/glass.rsi/state_7.png b/Resources/Textures/Structures/Furniture/Tables/glass.rsi/state_7.png index ecdf387b8fa..c2e924aaafc 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/glass.rsi/state_7.png and b/Resources/Textures/Structures/Furniture/Tables/glass.rsi/state_7.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/plasma.rsi/full.png b/Resources/Textures/Structures/Furniture/Tables/plasma.rsi/full.png index 7345eb65919..7f999c52334 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/plasma.rsi/full.png and b/Resources/Textures/Structures/Furniture/Tables/plasma.rsi/full.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/plasma.rsi/meta.json b/Resources/Textures/Structures/Furniture/Tables/plasma.rsi/meta.json index 0ebc40b8144..1ad8b4f3583 100644 --- a/Resources/Textures/Structures/Furniture/Tables/plasma.rsi/meta.json +++ b/Resources/Textures/Structures/Furniture/Tables/plasma.rsi/meta.json @@ -5,159 +5,42 @@ "y": 32 }, "license": "CC-BY-SA-3.0", - "copyright": "Taken from https://github.com/discordia-space/CEV-Eris/blob/0b3ab17dbad632ddf738b63900ef8df1926bba47/icons/obj/tables.dmi", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/47f6d91b37609b940152de62befa931dba35adf0", "states": [ { - "name": "full", - "delays": [ - [ - 1 - ] - ] + "name": "full" }, { "name": "state_0", - "directions": 4, - "delays": [ - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ] - ] + "directions": 4 }, { "name": "state_1", - "directions": 4, - "delays": [ - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ] - ] + "directions": 4 }, { "name": "state_2", - "directions": 4, - "delays": [ - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ] - ] + "directions": 4 }, { "name": "state_3", - "directions": 4, - "delays": [ - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ] - ] + "directions": 4 }, { "name": "state_4", - "directions": 4, - "delays": [ - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ] - ] + "directions": 4 }, { "name": "state_5", - "directions": 4, - "delays": [ - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ] - ] + "directions": 4 }, { "name": "state_6", - "directions": 4, - "delays": [ - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ] - ] + "directions": 4 }, { "name": "state_7", - "directions": 4, - "delays": [ - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ] - ] + "directions": 4 } ] } diff --git a/Resources/Textures/Structures/Furniture/Tables/plasma.rsi/state_0.png b/Resources/Textures/Structures/Furniture/Tables/plasma.rsi/state_0.png index a8791e01c1e..5ff4a7ceac3 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/plasma.rsi/state_0.png and b/Resources/Textures/Structures/Furniture/Tables/plasma.rsi/state_0.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/plasma.rsi/state_1.png b/Resources/Textures/Structures/Furniture/Tables/plasma.rsi/state_1.png index 4e04182a05d..dab25bc1cda 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/plasma.rsi/state_1.png and b/Resources/Textures/Structures/Furniture/Tables/plasma.rsi/state_1.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/plasma.rsi/state_2.png b/Resources/Textures/Structures/Furniture/Tables/plasma.rsi/state_2.png index a8791e01c1e..5ff4a7ceac3 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/plasma.rsi/state_2.png and b/Resources/Textures/Structures/Furniture/Tables/plasma.rsi/state_2.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/plasma.rsi/state_3.png b/Resources/Textures/Structures/Furniture/Tables/plasma.rsi/state_3.png index 4e04182a05d..dab25bc1cda 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/plasma.rsi/state_3.png and b/Resources/Textures/Structures/Furniture/Tables/plasma.rsi/state_3.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/plasma.rsi/state_4.png b/Resources/Textures/Structures/Furniture/Tables/plasma.rsi/state_4.png index 230838bfc60..34d673b2ea4 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/plasma.rsi/state_4.png and b/Resources/Textures/Structures/Furniture/Tables/plasma.rsi/state_4.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/plasma.rsi/state_5.png b/Resources/Textures/Structures/Furniture/Tables/plasma.rsi/state_5.png index 2da0cebb25a..428050b93c6 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/plasma.rsi/state_5.png and b/Resources/Textures/Structures/Furniture/Tables/plasma.rsi/state_5.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/plasma.rsi/state_6.png b/Resources/Textures/Structures/Furniture/Tables/plasma.rsi/state_6.png index 230838bfc60..34d673b2ea4 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/plasma.rsi/state_6.png and b/Resources/Textures/Structures/Furniture/Tables/plasma.rsi/state_6.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/plasma.rsi/state_7.png b/Resources/Textures/Structures/Furniture/Tables/plasma.rsi/state_7.png index 82880b87ad6..aab0092a56e 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/plasma.rsi/state_7.png and b/Resources/Textures/Structures/Furniture/Tables/plasma.rsi/state_7.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/r_glass.rsi/full.png b/Resources/Textures/Structures/Furniture/Tables/r_glass.rsi/full.png index be30ee84c50..0fae301078b 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/r_glass.rsi/full.png and b/Resources/Textures/Structures/Furniture/Tables/r_glass.rsi/full.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/r_glass.rsi/meta.json b/Resources/Textures/Structures/Furniture/Tables/r_glass.rsi/meta.json index 0ebc40b8144..966ed1ee959 100644 --- a/Resources/Textures/Structures/Furniture/Tables/r_glass.rsi/meta.json +++ b/Resources/Textures/Structures/Furniture/Tables/r_glass.rsi/meta.json @@ -1,163 +1,46 @@ { - "version": 1, - "size": { - "x": 32, - "y": 32 - }, - "license": "CC-BY-SA-3.0", - "copyright": "Taken from https://github.com/discordia-space/CEV-Eris/blob/0b3ab17dbad632ddf738b63900ef8df1926bba47/icons/obj/tables.dmi", - "states": [ - { - "name": "full", - "delays": [ - [ - 1 - ] - ] - }, - { - "name": "state_0", - "directions": 4, - "delays": [ - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ] - ] - }, - { - "name": "state_1", - "directions": 4, - "delays": [ - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ] - ] - }, - { - "name": "state_2", - "directions": 4, - "delays": [ - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ] - ] - }, - { - "name": "state_3", - "directions": 4, - "delays": [ - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ] - ] - }, - { - "name": "state_4", - "directions": 4, - "delays": [ - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ] - ] - }, - { - "name": "state_5", - "directions": 4, - "delays": [ - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ] - ] - }, - { - "name": "state_6", - "directions": 4, - "delays": [ - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ] - ] - }, - { - "name": "state_7", - "directions": 4, - "delays": [ - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ] - ] - } - ] -} + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Paradise at https://github.com/ParadiseSS13/Paradise/blob/bd91a1b962fe9bd38e346e9fafd4ebb10784fcb3/icons/obj/smooth_structures/tables/rglass_table.dmi", + "states": [ + { + "name": "full" + }, + { + "name": "state_0", + "directions": 4 + }, + { + "name": "state_1", + "directions": 4 + }, + { + "name": "state_2", + "directions": 4 + }, + { + "name": "state_3", + "directions": 4 + }, + { + "name": "state_4", + "directions": 4 + }, + { + "name": "state_5", + "directions": 4 + }, + { + "name": "state_6", + "directions": 4 + }, + { + "name": "state_7", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Furniture/Tables/r_glass.rsi/state_0.png b/Resources/Textures/Structures/Furniture/Tables/r_glass.rsi/state_0.png index 862aff93380..bc2443592a3 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/r_glass.rsi/state_0.png and b/Resources/Textures/Structures/Furniture/Tables/r_glass.rsi/state_0.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/r_glass.rsi/state_1.png b/Resources/Textures/Structures/Furniture/Tables/r_glass.rsi/state_1.png index 8b97929d643..46a287ee483 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/r_glass.rsi/state_1.png and b/Resources/Textures/Structures/Furniture/Tables/r_glass.rsi/state_1.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/r_glass.rsi/state_2.png b/Resources/Textures/Structures/Furniture/Tables/r_glass.rsi/state_2.png index 862aff93380..bc2443592a3 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/r_glass.rsi/state_2.png and b/Resources/Textures/Structures/Furniture/Tables/r_glass.rsi/state_2.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/r_glass.rsi/state_3.png b/Resources/Textures/Structures/Furniture/Tables/r_glass.rsi/state_3.png index 8b97929d643..46a287ee483 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/r_glass.rsi/state_3.png and b/Resources/Textures/Structures/Furniture/Tables/r_glass.rsi/state_3.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/r_glass.rsi/state_4.png b/Resources/Textures/Structures/Furniture/Tables/r_glass.rsi/state_4.png index 57fdbb30d75..e4fd4d16ddb 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/r_glass.rsi/state_4.png and b/Resources/Textures/Structures/Furniture/Tables/r_glass.rsi/state_4.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/r_glass.rsi/state_5.png b/Resources/Textures/Structures/Furniture/Tables/r_glass.rsi/state_5.png index b3231dc9724..d04eac89c9a 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/r_glass.rsi/state_5.png and b/Resources/Textures/Structures/Furniture/Tables/r_glass.rsi/state_5.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/r_glass.rsi/state_6.png b/Resources/Textures/Structures/Furniture/Tables/r_glass.rsi/state_6.png index 57fdbb30d75..e4fd4d16ddb 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/r_glass.rsi/state_6.png and b/Resources/Textures/Structures/Furniture/Tables/r_glass.rsi/state_6.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/r_glass.rsi/state_7.png b/Resources/Textures/Structures/Furniture/Tables/r_glass.rsi/state_7.png index 495a1103fbf..8e15bd7f119 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/r_glass.rsi/state_7.png and b/Resources/Textures/Structures/Furniture/Tables/r_glass.rsi/state_7.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/reinforced.rsi/full.png b/Resources/Textures/Structures/Furniture/Tables/reinforced.rsi/full.png index 19dec0a9840..478eca14b0f 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/reinforced.rsi/full.png and b/Resources/Textures/Structures/Furniture/Tables/reinforced.rsi/full.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/reinforced.rsi/meta.json b/Resources/Textures/Structures/Furniture/Tables/reinforced.rsi/meta.json index 0ebc40b8144..3f2fb05658d 100644 --- a/Resources/Textures/Structures/Furniture/Tables/reinforced.rsi/meta.json +++ b/Resources/Textures/Structures/Furniture/Tables/reinforced.rsi/meta.json @@ -1,163 +1,46 @@ { - "version": 1, - "size": { - "x": 32, - "y": 32 - }, - "license": "CC-BY-SA-3.0", - "copyright": "Taken from https://github.com/discordia-space/CEV-Eris/blob/0b3ab17dbad632ddf738b63900ef8df1926bba47/icons/obj/tables.dmi", - "states": [ - { - "name": "full", - "delays": [ - [ - 1 - ] - ] - }, - { - "name": "state_0", - "directions": 4, - "delays": [ - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ] - ] - }, - { - "name": "state_1", - "directions": 4, - "delays": [ - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ] - ] - }, - { - "name": "state_2", - "directions": 4, - "delays": [ - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ] - ] - }, - { - "name": "state_3", - "directions": 4, - "delays": [ - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ] - ] - }, - { - "name": "state_4", - "directions": 4, - "delays": [ - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ] - ] - }, - { - "name": "state_5", - "directions": 4, - "delays": [ - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ] - ] - }, - { - "name": "state_6", - "directions": 4, - "delays": [ - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ] - ] - }, - { - "name": "state_7", - "directions": 4, - "delays": [ - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ], - [ - 1.0 - ] - ] - } - ] -} + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Taken from Paradise at https://github.com/ParadiseSS13/Paradise/blob/bd91a1b962fe9bd38e346e9fafd4ebb10784fcb3/icons/obj/smooth_structures/tables/reinforced_table.dmi", + "states": [ + { + "name": "full" + }, + { + "name": "state_0", + "directions": 4 + }, + { + "name": "state_1", + "directions": 4 + }, + { + "name": "state_2", + "directions": 4 + }, + { + "name": "state_3", + "directions": 4 + }, + { + "name": "state_4", + "directions": 4 + }, + { + "name": "state_5", + "directions": 4 + }, + { + "name": "state_6", + "directions": 4 + }, + { + "name": "state_7", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Furniture/Tables/reinforced.rsi/state_0.png b/Resources/Textures/Structures/Furniture/Tables/reinforced.rsi/state_0.png index 1e061724e1b..b42b1c05bb7 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/reinforced.rsi/state_0.png and b/Resources/Textures/Structures/Furniture/Tables/reinforced.rsi/state_0.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/reinforced.rsi/state_1.png b/Resources/Textures/Structures/Furniture/Tables/reinforced.rsi/state_1.png index 428ae7c3e1f..6d74f31f6ea 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/reinforced.rsi/state_1.png and b/Resources/Textures/Structures/Furniture/Tables/reinforced.rsi/state_1.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/reinforced.rsi/state_2.png b/Resources/Textures/Structures/Furniture/Tables/reinforced.rsi/state_2.png index 1e061724e1b..b42b1c05bb7 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/reinforced.rsi/state_2.png and b/Resources/Textures/Structures/Furniture/Tables/reinforced.rsi/state_2.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/reinforced.rsi/state_3.png b/Resources/Textures/Structures/Furniture/Tables/reinforced.rsi/state_3.png index 428ae7c3e1f..6d74f31f6ea 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/reinforced.rsi/state_3.png and b/Resources/Textures/Structures/Furniture/Tables/reinforced.rsi/state_3.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/reinforced.rsi/state_4.png b/Resources/Textures/Structures/Furniture/Tables/reinforced.rsi/state_4.png index a8229181797..32186acdaa1 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/reinforced.rsi/state_4.png and b/Resources/Textures/Structures/Furniture/Tables/reinforced.rsi/state_4.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/reinforced.rsi/state_5.png b/Resources/Textures/Structures/Furniture/Tables/reinforced.rsi/state_5.png index f57b63ecacb..09654a2cc3c 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/reinforced.rsi/state_5.png and b/Resources/Textures/Structures/Furniture/Tables/reinforced.rsi/state_5.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/reinforced.rsi/state_6.png b/Resources/Textures/Structures/Furniture/Tables/reinforced.rsi/state_6.png index a8229181797..32186acdaa1 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/reinforced.rsi/state_6.png and b/Resources/Textures/Structures/Furniture/Tables/reinforced.rsi/state_6.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/reinforced.rsi/state_7.png b/Resources/Textures/Structures/Furniture/Tables/reinforced.rsi/state_7.png index 52bb74a0dac..8cac72fc6f5 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/reinforced.rsi/state_7.png and b/Resources/Textures/Structures/Furniture/Tables/reinforced.rsi/state_7.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/wood.rsi/full.png b/Resources/Textures/Structures/Furniture/Tables/wood.rsi/full.png index e4c06d9d8f4..3c24c896e67 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/wood.rsi/full.png and b/Resources/Textures/Structures/Furniture/Tables/wood.rsi/full.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/wood.rsi/meta.json b/Resources/Textures/Structures/Furniture/Tables/wood.rsi/meta.json index 667cf5efc1a..dc98ecc2347 100644 --- a/Resources/Textures/Structures/Furniture/Tables/wood.rsi/meta.json +++ b/Resources/Textures/Structures/Furniture/Tables/wood.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from vgstation at commit https://github.com/vgstation-coders/vgstation13/commit/a138859aec54b20dac65eb76e94e9db1b2202f55 and modified by Swept", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/47f6d91b37609b940152de62befa931dba35adf0", "size": { "x": 32, "y": 32 diff --git a/Resources/Textures/Structures/Furniture/Tables/wood.rsi/state_0.png b/Resources/Textures/Structures/Furniture/Tables/wood.rsi/state_0.png index 1e93bd9a76f..458b7255322 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/wood.rsi/state_0.png and b/Resources/Textures/Structures/Furniture/Tables/wood.rsi/state_0.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/wood.rsi/state_1.png b/Resources/Textures/Structures/Furniture/Tables/wood.rsi/state_1.png index 7e03504066f..e522858f14c 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/wood.rsi/state_1.png and b/Resources/Textures/Structures/Furniture/Tables/wood.rsi/state_1.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/wood.rsi/state_2.png b/Resources/Textures/Structures/Furniture/Tables/wood.rsi/state_2.png index 1e93bd9a76f..458b7255322 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/wood.rsi/state_2.png and b/Resources/Textures/Structures/Furniture/Tables/wood.rsi/state_2.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/wood.rsi/state_3.png b/Resources/Textures/Structures/Furniture/Tables/wood.rsi/state_3.png index 7e03504066f..e522858f14c 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/wood.rsi/state_3.png and b/Resources/Textures/Structures/Furniture/Tables/wood.rsi/state_3.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/wood.rsi/state_4.png b/Resources/Textures/Structures/Furniture/Tables/wood.rsi/state_4.png index 9421e661269..a57e1cf0d90 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/wood.rsi/state_4.png and b/Resources/Textures/Structures/Furniture/Tables/wood.rsi/state_4.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/wood.rsi/state_5.png b/Resources/Textures/Structures/Furniture/Tables/wood.rsi/state_5.png index 679bcc34aee..c1d14dfb973 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/wood.rsi/state_5.png and b/Resources/Textures/Structures/Furniture/Tables/wood.rsi/state_5.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/wood.rsi/state_6.png b/Resources/Textures/Structures/Furniture/Tables/wood.rsi/state_6.png index 9421e661269..a57e1cf0d90 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/wood.rsi/state_6.png and b/Resources/Textures/Structures/Furniture/Tables/wood.rsi/state_6.png differ diff --git a/Resources/Textures/Structures/Furniture/Tables/wood.rsi/state_7.png b/Resources/Textures/Structures/Furniture/Tables/wood.rsi/state_7.png index 87f2e5da7cb..6b15d22996c 100644 Binary files a/Resources/Textures/Structures/Furniture/Tables/wood.rsi/state_7.png and b/Resources/Textures/Structures/Furniture/Tables/wood.rsi/state_7.png differ diff --git a/Resources/Textures/Structures/Machines/artifact_crusher.rsi/icon.png b/Resources/Textures/Structures/Machines/artifact_crusher.rsi/icon.png new file mode 100644 index 00000000000..af5f78e3683 Binary files /dev/null and b/Resources/Textures/Structures/Machines/artifact_crusher.rsi/icon.png differ diff --git a/Resources/Textures/Structures/Machines/artifact_crusher.rsi/meta.json b/Resources/Textures/Structures/Machines/artifact_crusher.rsi/meta.json index dc0d23c539e..279bc73ec72 100644 --- a/Resources/Textures/Structures/Machines/artifact_crusher.rsi/meta.json +++ b/Resources/Textures/Structures/Machines/artifact_crusher.rsi/meta.json @@ -7,6 +7,9 @@ "y": 64 }, "states": [ + { + "name": "icon" + }, { "name": "glass" }, diff --git a/Resources/Textures/Structures/Machines/circuit_imprinter_hypercon.rsi/building.png b/Resources/Textures/Structures/Machines/circuit_imprinter_hypercon.rsi/building.png new file mode 100644 index 00000000000..7987532f393 Binary files /dev/null and b/Resources/Textures/Structures/Machines/circuit_imprinter_hypercon.rsi/building.png differ diff --git a/Resources/Textures/Structures/Machines/circuit_imprinter_hypercon.rsi/icon.png b/Resources/Textures/Structures/Machines/circuit_imprinter_hypercon.rsi/icon.png new file mode 100644 index 00000000000..e56878a7adc Binary files /dev/null and b/Resources/Textures/Structures/Machines/circuit_imprinter_hypercon.rsi/icon.png differ diff --git a/Resources/Textures/Structures/Machines/circuit_imprinter_hypercon.rsi/meta.json b/Resources/Textures/Structures/Machines/circuit_imprinter_hypercon.rsi/meta.json new file mode 100644 index 00000000000..faa9a362b4a --- /dev/null +++ b/Resources/Textures/Structures/Machines/circuit_imprinter_hypercon.rsi/meta.json @@ -0,0 +1,52 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Made by Piksqu for ss14, based on the circuit imprinter sprite taken from tgstation at https://github.com/tgstation/tgstation/commit/40d89d11ea4a5cb81d61dc1018b46f4e7d32c62a", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "panel" + }, + { + "name": "unlit" + }, + { + "name": "building", + "delays": [ + [ + 0.16, + 0.16, + 0.16, + 0.16, + 0.16, + 0.16, + 0.16, + 0.16, + 0.16, + 0.16, + 0.16, + 0.16, + 0.16, + 0.16, + 0.16, + 0.16, + 0.16, + 0.16, + 0.16, + 0.16, + 0.16, + 0.16, + 0.16, + 0.16, + 0.18 + ] + ] + } + ] +} diff --git a/Resources/Textures/Structures/Machines/circuit_imprinter_hypercon.rsi/panel.png b/Resources/Textures/Structures/Machines/circuit_imprinter_hypercon.rsi/panel.png new file mode 100644 index 00000000000..e9c369c734f Binary files /dev/null and b/Resources/Textures/Structures/Machines/circuit_imprinter_hypercon.rsi/panel.png differ diff --git a/Resources/Textures/Structures/Machines/circuit_imprinter_hypercon.rsi/unlit.png b/Resources/Textures/Structures/Machines/circuit_imprinter_hypercon.rsi/unlit.png new file mode 100644 index 00000000000..9a9e240fbc1 Binary files /dev/null and b/Resources/Textures/Structures/Machines/circuit_imprinter_hypercon.rsi/unlit.png differ diff --git a/Resources/Textures/Structures/Machines/fax_machine.rsi/inserting_hamster.png b/Resources/Textures/Structures/Machines/fax_machine.rsi/inserting_hamster.png new file mode 100644 index 00000000000..5f14e3013fe Binary files /dev/null and b/Resources/Textures/Structures/Machines/fax_machine.rsi/inserting_hamster.png differ diff --git a/Resources/Textures/Structures/Machines/fax_machine.rsi/inserting_mothroach.png b/Resources/Textures/Structures/Machines/fax_machine.rsi/inserting_mothroach.png new file mode 100644 index 00000000000..d034322697e Binary files /dev/null and b/Resources/Textures/Structures/Machines/fax_machine.rsi/inserting_mothroach.png differ diff --git a/Resources/Textures/Structures/Machines/fax_machine.rsi/inserting_mouse.png b/Resources/Textures/Structures/Machines/fax_machine.rsi/inserting_mouse.png new file mode 100644 index 00000000000..7fb87053f3f Binary files /dev/null and b/Resources/Textures/Structures/Machines/fax_machine.rsi/inserting_mouse.png differ diff --git a/Resources/Textures/Structures/Machines/fax_machine.rsi/meta.json b/Resources/Textures/Structures/Machines/fax_machine.rsi/meta.json index 1a8856301d5..00681ca6da1 100644 --- a/Resources/Textures/Structures/Machines/fax_machine.rsi/meta.json +++ b/Resources/Textures/Structures/Machines/fax_machine.rsi/meta.json @@ -40,6 +40,63 @@ ] ] }, + { + "name": "inserting_hamster", + "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 + ] + ] + }, + { + "name": "inserting_mothroach", + "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 + ] + ] + }, + { + "name": "inserting_mouse", + "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 + ] + ] + }, { "name": "printing", "delays": [ diff --git a/Resources/Textures/Structures/Piping/Atmospherics/pipe.rsi/Bend-inhand-left.png b/Resources/Textures/Structures/Piping/Atmospherics/pipe.rsi/Bend-inhand-left.png new file mode 100644 index 00000000000..f4f60cdd179 Binary files /dev/null and b/Resources/Textures/Structures/Piping/Atmospherics/pipe.rsi/Bend-inhand-left.png differ diff --git a/Resources/Textures/Structures/Piping/Atmospherics/pipe.rsi/Bend-inhand-right.png b/Resources/Textures/Structures/Piping/Atmospherics/pipe.rsi/Bend-inhand-right.png new file mode 100644 index 00000000000..dfd245221f8 Binary files /dev/null and b/Resources/Textures/Structures/Piping/Atmospherics/pipe.rsi/Bend-inhand-right.png differ diff --git a/Resources/Textures/Structures/Piping/Atmospherics/pipe.rsi/Fourway-inhand-left.png b/Resources/Textures/Structures/Piping/Atmospherics/pipe.rsi/Fourway-inhand-left.png new file mode 100644 index 00000000000..4da2f458e8e Binary files /dev/null and b/Resources/Textures/Structures/Piping/Atmospherics/pipe.rsi/Fourway-inhand-left.png differ diff --git a/Resources/Textures/Structures/Piping/Atmospherics/pipe.rsi/Fourway-inhand-right.png b/Resources/Textures/Structures/Piping/Atmospherics/pipe.rsi/Fourway-inhand-right.png new file mode 100644 index 00000000000..a59a7971659 Binary files /dev/null and b/Resources/Textures/Structures/Piping/Atmospherics/pipe.rsi/Fourway-inhand-right.png differ diff --git a/Resources/Textures/Structures/Piping/Atmospherics/pipe.rsi/TJunction-inhand-left.png b/Resources/Textures/Structures/Piping/Atmospherics/pipe.rsi/TJunction-inhand-left.png new file mode 100644 index 00000000000..8b14c9117a5 Binary files /dev/null and b/Resources/Textures/Structures/Piping/Atmospherics/pipe.rsi/TJunction-inhand-left.png differ diff --git a/Resources/Textures/Structures/Piping/Atmospherics/pipe.rsi/TJunction-inhand-right.png b/Resources/Textures/Structures/Piping/Atmospherics/pipe.rsi/TJunction-inhand-right.png new file mode 100644 index 00000000000..828920b4002 Binary files /dev/null and b/Resources/Textures/Structures/Piping/Atmospherics/pipe.rsi/TJunction-inhand-right.png differ diff --git a/Resources/Textures/Structures/Piping/Atmospherics/pipe.rsi/inhand-left.png b/Resources/Textures/Structures/Piping/Atmospherics/pipe.rsi/inhand-left.png new file mode 100644 index 00000000000..7ca777a2e94 Binary files /dev/null and b/Resources/Textures/Structures/Piping/Atmospherics/pipe.rsi/inhand-left.png differ diff --git a/Resources/Textures/Structures/Piping/Atmospherics/pipe.rsi/inhand-right.png b/Resources/Textures/Structures/Piping/Atmospherics/pipe.rsi/inhand-right.png new file mode 100644 index 00000000000..6c8c55a515c Binary files /dev/null and b/Resources/Textures/Structures/Piping/Atmospherics/pipe.rsi/inhand-right.png differ diff --git a/Resources/Textures/Structures/Piping/Atmospherics/pipe.rsi/meta.json b/Resources/Textures/Structures/Piping/Atmospherics/pipe.rsi/meta.json index ae4ff9b12d0..aecb62aee52 100644 --- a/Resources/Textures/Structures/Piping/Atmospherics/pipe.rsi/meta.json +++ b/Resources/Textures/Structures/Piping/Atmospherics/pipe.rsi/meta.json @@ -5,8 +5,40 @@ "y":32 }, "license":"CC-BY-SA-3.0", - "copyright":"pipeTrinaryConnectors made by Menshin for SS14 based on pipeTJunction, the rest is taken from https://github.com/tgstation/tgstation at commit 57cd1d59ca019dd0e7811ac451f295f818e573da", + "copyright":"Inhand sprites by alzore_(discord) for SS14. pipeTrinaryConnectors made by Menshin for SS14 based on pipeTJunction, the rest is taken from https://github.com/tgstation/tgstation at commit 57cd1d59ca019dd0e7811ac451f295f818e573da.", "states":[ + { + "name": "inhand-left", + "directions":4 + }, + { + "name":"inhand-right", + "directions":4 + }, + { + "name": "Bend-inhand-left", + "directions":4 + }, + { + "name":"Bend-inhand-right", + "directions":4 + }, + { + "name": "TJunction-inhand-left", + "directions":4 + }, + { + "name":"TJunction-inhand-right", + "directions":4 + }, + { + "name": "Fourway-inhand-left", + "directions":4 + }, + { + "name":"Fourway-inhand-right", + "directions":4 + }, { "name":"pipeBroken", "directions":1 @@ -38,6 +70,18 @@ { "name":"pipeTrinaryConnectors", "directions":4 + }, + { + "name":"storageStraight", + "directions":4 + }, + { + "name":"storageBend", + "directions":4 + }, + { + "name":"storageTJunction", + "directions":4 } ] } diff --git a/Resources/Textures/Structures/Piping/Atmospherics/pipe.rsi/pipeBend.png b/Resources/Textures/Structures/Piping/Atmospherics/pipe.rsi/pipeBend.png index b6408718eba..cda379a65b9 100644 Binary files a/Resources/Textures/Structures/Piping/Atmospherics/pipe.rsi/pipeBend.png and b/Resources/Textures/Structures/Piping/Atmospherics/pipe.rsi/pipeBend.png differ diff --git a/Resources/Textures/Structures/Piping/Atmospherics/pipe.rsi/storageBend.png b/Resources/Textures/Structures/Piping/Atmospherics/pipe.rsi/storageBend.png new file mode 100644 index 00000000000..39ffe213efb Binary files /dev/null and b/Resources/Textures/Structures/Piping/Atmospherics/pipe.rsi/storageBend.png differ diff --git a/Resources/Textures/Structures/Piping/Atmospherics/pipe.rsi/storageStraight.png b/Resources/Textures/Structures/Piping/Atmospherics/pipe.rsi/storageStraight.png new file mode 100644 index 00000000000..715aeb58249 Binary files /dev/null and b/Resources/Textures/Structures/Piping/Atmospherics/pipe.rsi/storageStraight.png differ diff --git a/Resources/Textures/Structures/Piping/Atmospherics/pipe.rsi/storageTJunction.png b/Resources/Textures/Structures/Piping/Atmospherics/pipe.rsi/storageTJunction.png new file mode 100644 index 00000000000..af8376a1527 Binary files /dev/null and b/Resources/Textures/Structures/Piping/Atmospherics/pipe.rsi/storageTJunction.png differ diff --git a/Resources/Textures/Structures/Specific/barberchair.rsi/barberchair.png b/Resources/Textures/Structures/Specific/barberchair.rsi/barberchair.png new file mode 100644 index 00000000000..244a875dca4 Binary files /dev/null and b/Resources/Textures/Structures/Specific/barberchair.rsi/barberchair.png differ diff --git a/Resources/Textures/Structures/Specific/barberchair.rsi/meta.json b/Resources/Textures/Structures/Specific/barberchair.rsi/meta.json new file mode 100644 index 00000000000..2e6b70f2fcd --- /dev/null +++ b/Resources/Textures/Structures/Specific/barberchair.rsi/meta.json @@ -0,0 +1,15 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from BlueMoon at https://github.com/BlueMoon-Labs/MOLOT-BlueMoon-Station/blob/master/modular_bluemoon/krashly/icons/obj/chairs.dmi", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "barberchair", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Specific/barbershop.rsi/meta.json b/Resources/Textures/Structures/Specific/barbershop.rsi/meta.json index 1226428bcfb..6d57cc380d5 100644 --- a/Resources/Textures/Structures/Specific/barbershop.rsi/meta.json +++ b/Resources/Textures/Structures/Specific/barbershop.rsi/meta.json @@ -18,9 +18,6 @@ ] ] }, - { - "name": "barberchair" - }, { "name": "dyedispenser" }, diff --git a/Resources/Textures/Structures/Storage/Crates/uranium.rsi/base.png b/Resources/Textures/Structures/Storage/Crates/uranium.rsi/base.png new file mode 100644 index 00000000000..b0b2f0aef57 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/uranium.rsi/base.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/uranium.rsi/closed.png b/Resources/Textures/Structures/Storage/Crates/uranium.rsi/closed.png new file mode 100644 index 00000000000..71706982943 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/uranium.rsi/closed.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/uranium.rsi/icon.png b/Resources/Textures/Structures/Storage/Crates/uranium.rsi/icon.png new file mode 100644 index 00000000000..f56c7ef4e1f Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/uranium.rsi/icon.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/uranium.rsi/locked.png b/Resources/Textures/Structures/Storage/Crates/uranium.rsi/locked.png new file mode 100644 index 00000000000..aceacfce597 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/uranium.rsi/locked.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/uranium.rsi/meta.json b/Resources/Textures/Structures/Storage/Crates/uranium.rsi/meta.json new file mode 100644 index 00000000000..6a4a45c0121 --- /dev/null +++ b/Resources/Textures/Structures/Storage/Crates/uranium.rsi/meta.json @@ -0,0 +1,45 @@ +{ + "version": 1, + "license": "CC0-1.0", + "copyright": "Created by EmoGarbage404 (github) for Space Station 14.", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "base" + }, + { + "name": "closed" + }, + { + "name": "open" + }, + { + "name": "welded" + }, + { + "name": "sparking", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "locked" + }, + { + "name": "unlocked" + } + ] +} diff --git a/Resources/Textures/Structures/Storage/Crates/uranium.rsi/open.png b/Resources/Textures/Structures/Storage/Crates/uranium.rsi/open.png new file mode 100644 index 00000000000..de957954873 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/uranium.rsi/open.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/uranium.rsi/sparking.png b/Resources/Textures/Structures/Storage/Crates/uranium.rsi/sparking.png new file mode 100644 index 00000000000..87b78b9b465 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/uranium.rsi/sparking.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/uranium.rsi/unlocked.png b/Resources/Textures/Structures/Storage/Crates/uranium.rsi/unlocked.png new file mode 100644 index 00000000000..94b89fa655d Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/uranium.rsi/unlocked.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/uranium.rsi/welded.png b/Resources/Textures/Structures/Storage/Crates/uranium.rsi/welded.png new file mode 100644 index 00000000000..311739a2701 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/uranium.rsi/welded.png differ diff --git a/Resources/Textures/Structures/Storage/closet.rsi/bartender.png b/Resources/Textures/Structures/Storage/closet.rsi/bartender.png new file mode 100644 index 00000000000..5846a93d96e Binary files /dev/null and b/Resources/Textures/Structures/Storage/closet.rsi/bartender.png differ diff --git a/Resources/Textures/Structures/Storage/closet.rsi/bartender_door.png b/Resources/Textures/Structures/Storage/closet.rsi/bartender_door.png new file mode 100644 index 00000000000..a8f3f1fd1f1 Binary files /dev/null and b/Resources/Textures/Structures/Storage/closet.rsi/bartender_door.png differ diff --git a/Resources/Textures/Structures/Storage/closet.rsi/bartender_open.png b/Resources/Textures/Structures/Storage/closet.rsi/bartender_open.png new file mode 100644 index 00000000000..947b3763533 Binary files /dev/null and b/Resources/Textures/Structures/Storage/closet.rsi/bartender_open.png differ diff --git a/Resources/Textures/Structures/Storage/closet.rsi/jan.png b/Resources/Textures/Structures/Storage/closet.rsi/jan.png new file mode 100644 index 00000000000..dd15c4a3a69 Binary files /dev/null and b/Resources/Textures/Structures/Storage/closet.rsi/jan.png differ diff --git a/Resources/Textures/Structures/Storage/closet.rsi/jan_door.png b/Resources/Textures/Structures/Storage/closet.rsi/jan_door.png new file mode 100644 index 00000000000..055374e977c Binary files /dev/null and b/Resources/Textures/Structures/Storage/closet.rsi/jan_door.png differ diff --git a/Resources/Textures/Structures/Storage/closet.rsi/jan_open.png b/Resources/Textures/Structures/Storage/closet.rsi/jan_open.png new file mode 100644 index 00000000000..d2da542a631 Binary files /dev/null and b/Resources/Textures/Structures/Storage/closet.rsi/jan_open.png differ diff --git a/Resources/Textures/Structures/Storage/closet.rsi/meta.json b/Resources/Textures/Structures/Storage/closet.rsi/meta.json index d3802637c05..23e024d043a 100644 --- a/Resources/Textures/Structures/Storage/closet.rsi/meta.json +++ b/Resources/Textures/Structures/Storage/closet.rsi/meta.json @@ -511,6 +511,33 @@ ] ] }, + { + "name": "bartender" + }, + { + "name": "bartender_door" + }, + { + "name": "bartender_open" + }, + { + "name": "jan" + }, + { + "name": "jan_door" + }, + { + "name": "jan_open" + }, + { + "name": "syndicate1" + }, + { + "name": "syndicate1_door" + }, + { + "name": "syndicate1_open" + }, { "name": "syndicate" }, diff --git a/Resources/Textures/Structures/Storage/closet.rsi/syndicate1.png b/Resources/Textures/Structures/Storage/closet.rsi/syndicate1.png new file mode 100644 index 00000000000..879f85b6392 Binary files /dev/null and b/Resources/Textures/Structures/Storage/closet.rsi/syndicate1.png differ diff --git a/Resources/Textures/Structures/Storage/closet.rsi/syndicate1_door.png b/Resources/Textures/Structures/Storage/closet.rsi/syndicate1_door.png new file mode 100644 index 00000000000..e654ce7f122 Binary files /dev/null and b/Resources/Textures/Structures/Storage/closet.rsi/syndicate1_door.png differ diff --git a/Resources/Textures/Structures/Storage/closet.rsi/syndicate1_open.png b/Resources/Textures/Structures/Storage/closet.rsi/syndicate1_open.png new file mode 100644 index 00000000000..7f5d1dcaf5c Binary files /dev/null and b/Resources/Textures/Structures/Storage/closet.rsi/syndicate1_open.png differ diff --git a/Resources/Textures/Structures/Storage/glassbox.rsi/DamageOverlay_12.png b/Resources/Textures/Structures/Storage/glassbox.rsi/DamageOverlay_12.png index cce6fe0ba3c..a82bb8b2338 100644 Binary files a/Resources/Textures/Structures/Storage/glassbox.rsi/DamageOverlay_12.png and b/Resources/Textures/Structures/Storage/glassbox.rsi/DamageOverlay_12.png differ diff --git a/Resources/Textures/Structures/Storage/glassbox.rsi/DamageOverlay_4.png b/Resources/Textures/Structures/Storage/glassbox.rsi/DamageOverlay_4.png index 08b6f664490..054f1f520c9 100644 Binary files a/Resources/Textures/Structures/Storage/glassbox.rsi/DamageOverlay_4.png and b/Resources/Textures/Structures/Storage/glassbox.rsi/DamageOverlay_4.png differ diff --git a/Resources/Textures/Structures/Storage/glassbox.rsi/DamageOverlay_8.png b/Resources/Textures/Structures/Storage/glassbox.rsi/DamageOverlay_8.png index 6d980d1c67c..e1c22974684 100644 Binary files a/Resources/Textures/Structures/Storage/glassbox.rsi/DamageOverlay_8.png and b/Resources/Textures/Structures/Storage/glassbox.rsi/DamageOverlay_8.png differ diff --git a/Resources/Textures/Structures/Storage/glassbox.rsi/glassbox-empty-open.png b/Resources/Textures/Structures/Storage/glassbox.rsi/base.png similarity index 100% rename from Resources/Textures/Structures/Storage/glassbox.rsi/glassbox-empty-open.png rename to Resources/Textures/Structures/Storage/glassbox.rsi/base.png diff --git a/Resources/Textures/Structures/Storage/glassbox.rsi/glass-4.png b/Resources/Textures/Structures/Storage/glassbox.rsi/glass-broken.png similarity index 100% rename from Resources/Textures/Structures/Storage/glassbox.rsi/glass-4.png rename to Resources/Textures/Structures/Storage/glassbox.rsi/glass-broken.png diff --git a/Resources/Textures/Structures/Storage/glassbox.rsi/glassbox-filled-closed.png b/Resources/Textures/Structures/Storage/glassbox.rsi/glassbox-filled-closed.png deleted file mode 100644 index b558cf5212c..00000000000 Binary files a/Resources/Textures/Structures/Storage/glassbox.rsi/glassbox-filled-closed.png and /dev/null differ diff --git a/Resources/Textures/Structures/Storage/glassbox.rsi/glassbox-filled-open.png b/Resources/Textures/Structures/Storage/glassbox.rsi/glassbox-filled-open.png deleted file mode 100644 index 48db8e88e59..00000000000 Binary files a/Resources/Textures/Structures/Storage/glassbox.rsi/glassbox-filled-open.png and /dev/null differ diff --git a/Resources/Textures/Structures/Storage/glassbox.rsi/glassbox.png b/Resources/Textures/Structures/Storage/glassbox.rsi/glassbox.png deleted file mode 100644 index 3a3bf591ca5..00000000000 Binary files a/Resources/Textures/Structures/Storage/glassbox.rsi/glassbox.png and /dev/null differ diff --git a/Resources/Textures/Structures/Storage/glassbox.rsi/icon.png b/Resources/Textures/Structures/Storage/glassbox.rsi/icon.png new file mode 100644 index 00000000000..9d1c8c8685e Binary files /dev/null and b/Resources/Textures/Structures/Storage/glassbox.rsi/icon.png differ diff --git a/Resources/Textures/Structures/Storage/glassbox.rsi/meta.json b/Resources/Textures/Structures/Storage/glassbox.rsi/meta.json index 5ce653f37b1..33decc40092 100644 --- a/Resources/Textures/Structures/Storage/glassbox.rsi/meta.json +++ b/Resources/Textures/Structures/Storage/glassbox.rsi/meta.json @@ -1,50 +1,44 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation https://github.com/tgstation/tgstation/commit/0129a094635aac51e00fdc7aa3b4248affc1f49d Sprite modified and updated by Nimfar11 (Github), Shatter resprite by KREKS", + "copyright": "Taken from tgstation https://github.com/tgstation/tgstation/commit/0129a094635aac51e00fdc7aa3b4248affc1f49d Sprite modified and updated by Nimfar11 (Github), Shatter resprite by KREKS and modified by MilenVolf (GitHub)", "size": { "x": 32, "y": 32 }, "states": [ { - "name": "glass" - }, - { - "name": "DamageOverlay_4" + "name": "base" }, { - "name": "DamageOverlay_8" + "name": "glass" }, { - "name": "DamageOverlay_12" + "name": "glass-up" }, { - "name": "glass-4" + "name": "glass-broken" }, { - "name": "glass-up" + "name": "caplaser" }, { "name": "locked" }, - { - "name": "caplaser" - }, { "name": "unlocked" }, { - "name": "glassbox" + "name": "icon" }, { - "name": "glassbox-empty-open" + "name": "DamageOverlay_4" }, { - "name": "glassbox-filled-closed" + "name": "DamageOverlay_8" }, { - "name": "glassbox-filled-open" + "name": "DamageOverlay_12" } ] } \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/wall_locker.rsi/meta.json b/Resources/Textures/Structures/Storage/wall_locker.rsi/meta.json index b6ed63c7a3e..a954c838e36 100644 --- a/Resources/Textures/Structures/Storage/wall_locker.rsi/meta.json +++ b/Resources/Textures/Structures/Storage/wall_locker.rsi/meta.json @@ -33,6 +33,9 @@ { "name": "unlocked" }, { "name": "welded" }, { "name": "white_door" }, - { "name": "yellow_door" } + { "name": "yellow_door" }, + { "name": "rad" }, + { "name": "rad_door" }, + { "name": "rad_open" } ] } diff --git a/Resources/Textures/Structures/Storage/wall_locker.rsi/rad.png b/Resources/Textures/Structures/Storage/wall_locker.rsi/rad.png new file mode 100644 index 00000000000..5c7a95a8f88 Binary files /dev/null and b/Resources/Textures/Structures/Storage/wall_locker.rsi/rad.png differ diff --git a/Resources/Textures/Structures/Storage/wall_locker.rsi/rad_door.png b/Resources/Textures/Structures/Storage/wall_locker.rsi/rad_door.png new file mode 100644 index 00000000000..7f0f2489532 Binary files /dev/null and b/Resources/Textures/Structures/Storage/wall_locker.rsi/rad_door.png differ diff --git a/Resources/Textures/Structures/Storage/wall_locker.rsi/rad_open.png b/Resources/Textures/Structures/Storage/wall_locker.rsi/rad_open.png new file mode 100644 index 00000000000..2beb8fd4d6c Binary files /dev/null and b/Resources/Textures/Structures/Storage/wall_locker.rsi/rad_open.png differ diff --git a/Resources/Textures/Structures/Wallmounts/air_monitors.rsi/alarm1.png b/Resources/Textures/Structures/Wallmounts/air_monitors.rsi/alarm1.png index d371695e129..9d8640f85b0 100644 Binary files a/Resources/Textures/Structures/Wallmounts/air_monitors.rsi/alarm1.png and b/Resources/Textures/Structures/Wallmounts/air_monitors.rsi/alarm1.png differ diff --git a/Resources/Textures/Structures/Wallmounts/air_monitors.rsi/alarm2.png b/Resources/Textures/Structures/Wallmounts/air_monitors.rsi/alarm2.png index 9d8640f85b0..d371695e129 100644 Binary files a/Resources/Textures/Structures/Wallmounts/air_monitors.rsi/alarm2.png and b/Resources/Textures/Structures/Wallmounts/air_monitors.rsi/alarm2.png differ diff --git a/Resources/Textures/Structures/Wallmounts/air_monitors.rsi/meta.json b/Resources/Textures/Structures/Wallmounts/air_monitors.rsi/meta.json index 7484be2ffed..72f6d194f80 100644 --- a/Resources/Textures/Structures/Wallmounts/air_monitors.rsi/meta.json +++ b/Resources/Textures/Structures/Wallmounts/air_monitors.rsi/meta.json @@ -10,56 +10,17 @@ { "name": "alarm0", "directions": 4, - "delays": [ - [2.8, 2.8], - [2.8, 2.8], - [2.8, 2.8], - [2.8, 2.8] - ] + "delays": [ [ 2.8, 2.8 ], [ 2.8, 2.8 ], [ 2.8, 2.8 ], [ 2.8, 2.8 ] ] }, { "name": "alarm1", "directions": 4, - "delays": [ - [ - 0.6, 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.6, 0.6, 0.6 - ], - [ - 0.6, 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.6, 0.6, 0.6 - ], - [ - 0.6, 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.6, 0.6, 0.6 - ], - [ - 0.6, 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.6, 0.6, 0.6 - ] - ] + "delays": [ [ 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4 ], [ 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4 ], [ 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4 ], [ 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4 ] ] }, { "name": "alarm2", "directions": 4, - "delays": [ - [ - 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.4, 0.4, 0.4, 0.4, - 0.4, 0.4 - ], - [ - 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.4, 0.4, 0.4, 0.4, - 0.4, 0.4 - ], - [ - 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.4, 0.4, 0.4, 0.4, - 0.4, 0.4 - ], - [ - 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.4, 0.4, 0.4, 0.4, - 0.4, 0.4 - ] - ] + "delays": [ [ 0.6, 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.6, 0.6, 0.6 ], [ 0.6, 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.6, 0.6, 0.6 ], [ 0.6, 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.6, 0.6, 0.6 ], [ 0.6, 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.6, 0.6, 0.6 ] ] }, { "name": "alarm_b1", @@ -84,12 +45,12 @@ { "name": "auth_off", "directions": 1, - "delays": [[1]] + "delays": [ [ 1 ] ] }, { "name": "auth_on", "directions": 1, - "delays": [[0.1, 0.1]] + "delays": [ [ 0.1, 0.1 ] ] }, { "name": "fire0", @@ -106,22 +67,12 @@ { "name": "fire_2", "directions": 4, - "delays": [ - [0.5, 0.5], - [0.5, 0.5], - [0.5, 0.5], - [0.5, 0.5] - ] + "delays": [ [ 0.5, 0.5 ], [ 0.5, 0.5 ], [ 0.5, 0.5 ], [ 0.5, 0.5 ] ] }, { "name": "fire_3", "directions": 4, - "delays": [ - [0.3, 0.3], - [0.3, 0.3], - [0.3, 0.3], - [0.3, 0.3] - ] + "delays": [ [ 0.3, 0.3 ], [ 0.3, 0.3 ], [ 0.3, 0.3 ], [ 0.3, 0.3 ] ] }, { "name": "fire_b0", @@ -142,12 +93,7 @@ { "name": "fire_emagged", "directions": 4, - "delays": [ - [0.3, 0.3], - [0.3, 0.3], - [0.3, 0.3], - [0.3, 0.3] - ] + "delays": [ [ 0.3, 0.3 ], [ 0.3, 0.3 ], [ 0.3, 0.3 ], [ 0.3, 0.3 ] ] }, { "name": "fire_detected" @@ -159,12 +105,7 @@ { "name": "fire_on", "directions": 4, - "delays": [ - [0.2, 0.2, 0.2, 0.2, 0.2, 0.2], - [0.2, 0.2, 0.2, 0.2, 0.2, 0.2], - [0.2, 0.2, 0.2, 0.2, 0.2, 0.2], - [0.2, 0.2, 0.2, 0.2, 0.2, 0.2] - ] + "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, 0.2 ] ] }, { "name": "fire_overlay" @@ -174,4 +115,4 @@ "directions": 4 } ] -} +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Walls/rock.rsi/meta.json b/Resources/Textures/Structures/Walls/rock.rsi/meta.json index aa46326a4b5..27935ec089d 100644 --- a/Resources/Textures/Structures/Walls/rock.rsi/meta.json +++ b/Resources/Textures/Structures/Walls/rock.rsi/meta.json @@ -198,6 +198,9 @@ }, { "name": "rock_andesite_west" + }, + { + "name": "rock_bluespace" } ] } diff --git a/Resources/Textures/Structures/Walls/rock.rsi/rock_bluespace.png b/Resources/Textures/Structures/Walls/rock.rsi/rock_bluespace.png new file mode 100644 index 00000000000..e3368c34d71 Binary files /dev/null and b/Resources/Textures/Structures/Walls/rock.rsi/rock_bluespace.png differ diff --git a/Resources/Textures/Structures/Windows/directional.rsi/frosted_window.png b/Resources/Textures/Structures/Windows/directional.rsi/frosted_window.png index 4f9bf4c955d..c9f0b82f5d8 100644 Binary files a/Resources/Textures/Structures/Windows/directional.rsi/frosted_window.png and b/Resources/Textures/Structures/Windows/directional.rsi/frosted_window.png differ diff --git a/Resources/Textures/Structures/Windows/directional.rsi/meta.json b/Resources/Textures/Structures/Windows/directional.rsi/meta.json index 5a01452c005..f93cacfa699 100644 --- a/Resources/Textures/Structures/Windows/directional.rsi/meta.json +++ b/Resources/Textures/Structures/Windows/directional.rsi/meta.json @@ -1,47 +1,47 @@ { - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "tgstation at ff1c30ac123dd28c6b5fee11e7f03654f5daa731, plasma windows from paradise at 44c12c6d9d0e42a9d3a582dff7e9a8d72b6ea68a, uranium windows made via edit by SphiraI(github), clockwork windows from https://github.com/tgstation/tgstation/blob/21b42d49ecf2b87f665b5f122368f6a247676721/icons/obj/smooth_structures/structure_variations.dmi", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "window", - "directions": 4 + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Paradise at https://github.com/ParadiseSS13/Paradise/blob/bd91a1b962fe9bd38e346e9fafd4ebb10784fcb3/icons/obj/structures.dmi, uranium windows made via edit by SphiraI(github), clockwork windows from https://github.com/tgstation/tgstation/blob/21b42d49ecf2b87f665b5f122368f6a247676721/icons/obj/smooth_structures/structure_variations.dmi", + "size": { + "x": 32, + "y": 32 }, - { - "name": "reinforced_window", - "directions": 4 - }, - { - "name": "tinted_window", - "directions": 4 - }, - { - "name": "frosted_window", - "directions": 4 - }, - { - "name": "clock_window", - "directions": 4 - }, - { - "name": "plasma_window", - "directions": 4 - }, - { - "name": "plasma_reinforced_window", - "directions": 4 - }, - { - "name": "uranium_window", - "directions": 4 - }, - { - "name": "uranium_reinforced_window", - "directions": 4 - } - ] -} + "states": [ + { + "name": "window", + "directions": 4 + }, + { + "name": "reinforced_window", + "directions": 4 + }, + { + "name": "tinted_window", + "directions": 4 + }, + { + "name": "frosted_window", + "directions": 4 + }, + { + "name": "clock_window", + "directions": 4 + }, + { + "name": "plasma_window", + "directions": 4 + }, + { + "name": "plasma_reinforced_window", + "directions": 4 + }, + { + "name": "uranium_window", + "directions": 4 + }, + { + "name": "uranium_reinforced_window", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Windows/directional.rsi/plasma_reinforced_window.png b/Resources/Textures/Structures/Windows/directional.rsi/plasma_reinforced_window.png index c1269b424e0..2c18ad87f17 100644 Binary files a/Resources/Textures/Structures/Windows/directional.rsi/plasma_reinforced_window.png and b/Resources/Textures/Structures/Windows/directional.rsi/plasma_reinforced_window.png differ diff --git a/Resources/Textures/Structures/Windows/directional.rsi/plasma_window.png b/Resources/Textures/Structures/Windows/directional.rsi/plasma_window.png index b1d1f4fef52..92f31ef80dc 100644 Binary files a/Resources/Textures/Structures/Windows/directional.rsi/plasma_window.png and b/Resources/Textures/Structures/Windows/directional.rsi/plasma_window.png differ diff --git a/Resources/Textures/Structures/Windows/directional.rsi/reinforced_window.png b/Resources/Textures/Structures/Windows/directional.rsi/reinforced_window.png index 865f079317c..1be51d99327 100644 Binary files a/Resources/Textures/Structures/Windows/directional.rsi/reinforced_window.png and b/Resources/Textures/Structures/Windows/directional.rsi/reinforced_window.png differ diff --git a/Resources/Textures/Structures/Windows/directional.rsi/tinted_window.png b/Resources/Textures/Structures/Windows/directional.rsi/tinted_window.png index 4f9bf4c955d..c9f0b82f5d8 100644 Binary files a/Resources/Textures/Structures/Windows/directional.rsi/tinted_window.png and b/Resources/Textures/Structures/Windows/directional.rsi/tinted_window.png differ diff --git a/Resources/Textures/Structures/Windows/directional.rsi/window.png b/Resources/Textures/Structures/Windows/directional.rsi/window.png index a510742c941..b902ba8e9fb 100644 Binary files a/Resources/Textures/Structures/Windows/directional.rsi/window.png and b/Resources/Textures/Structures/Windows/directional.rsi/window.png differ diff --git a/Resources/Textures/Structures/cargo_pallets.rsi/cargo_pallet_buy_0.png b/Resources/Textures/Structures/cargo_pallets.rsi/cargo_pallet_buy_0.png new file mode 100644 index 00000000000..1505c892b8e Binary files /dev/null and b/Resources/Textures/Structures/cargo_pallets.rsi/cargo_pallet_buy_0.png differ diff --git a/Resources/Textures/Structures/cargo_pallets.rsi/cargo_pallet_buy_1.png b/Resources/Textures/Structures/cargo_pallets.rsi/cargo_pallet_buy_1.png new file mode 100644 index 00000000000..e0d5a4d39ea Binary files /dev/null and b/Resources/Textures/Structures/cargo_pallets.rsi/cargo_pallet_buy_1.png differ diff --git a/Resources/Textures/Structures/cargo_pallets.rsi/cargo_pallet_buy_2.png b/Resources/Textures/Structures/cargo_pallets.rsi/cargo_pallet_buy_2.png new file mode 100644 index 00000000000..1505c892b8e Binary files /dev/null and b/Resources/Textures/Structures/cargo_pallets.rsi/cargo_pallet_buy_2.png differ diff --git a/Resources/Textures/Structures/cargo_pallets.rsi/cargo_pallet_buy_3.png b/Resources/Textures/Structures/cargo_pallets.rsi/cargo_pallet_buy_3.png new file mode 100644 index 00000000000..e0d5a4d39ea Binary files /dev/null and b/Resources/Textures/Structures/cargo_pallets.rsi/cargo_pallet_buy_3.png differ diff --git a/Resources/Textures/Structures/cargo_pallets.rsi/cargo_pallet_buy_4.png b/Resources/Textures/Structures/cargo_pallets.rsi/cargo_pallet_buy_4.png new file mode 100644 index 00000000000..38cb4115083 Binary files /dev/null and b/Resources/Textures/Structures/cargo_pallets.rsi/cargo_pallet_buy_4.png differ diff --git a/Resources/Textures/Structures/cargo_pallets.rsi/cargo_pallet_buy_5.png b/Resources/Textures/Structures/cargo_pallets.rsi/cargo_pallet_buy_5.png new file mode 100644 index 00000000000..b863e36b8ce Binary files /dev/null and b/Resources/Textures/Structures/cargo_pallets.rsi/cargo_pallet_buy_5.png differ diff --git a/Resources/Textures/Structures/cargo_pallets.rsi/cargo_pallet_buy_6.png b/Resources/Textures/Structures/cargo_pallets.rsi/cargo_pallet_buy_6.png new file mode 100644 index 00000000000..38cb4115083 Binary files /dev/null and b/Resources/Textures/Structures/cargo_pallets.rsi/cargo_pallet_buy_6.png differ diff --git a/Resources/Textures/Structures/cargo_pallets.rsi/cargo_pallet_buy_7.png b/Resources/Textures/Structures/cargo_pallets.rsi/cargo_pallet_buy_7.png new file mode 100644 index 00000000000..88ffa378d2a Binary files /dev/null and b/Resources/Textures/Structures/cargo_pallets.rsi/cargo_pallet_buy_7.png differ diff --git a/Resources/Textures/Structures/cargo_pallets.rsi/cargo_pallet_sell_0.png b/Resources/Textures/Structures/cargo_pallets.rsi/cargo_pallet_sell_0.png new file mode 100644 index 00000000000..136a48087b5 Binary files /dev/null and b/Resources/Textures/Structures/cargo_pallets.rsi/cargo_pallet_sell_0.png differ diff --git a/Resources/Textures/Structures/cargo_pallets.rsi/cargo_pallet_sell_1.png b/Resources/Textures/Structures/cargo_pallets.rsi/cargo_pallet_sell_1.png new file mode 100644 index 00000000000..06fb688c5bd Binary files /dev/null and b/Resources/Textures/Structures/cargo_pallets.rsi/cargo_pallet_sell_1.png differ diff --git a/Resources/Textures/Structures/cargo_pallets.rsi/cargo_pallet_sell_2.png b/Resources/Textures/Structures/cargo_pallets.rsi/cargo_pallet_sell_2.png new file mode 100644 index 00000000000..136a48087b5 Binary files /dev/null and b/Resources/Textures/Structures/cargo_pallets.rsi/cargo_pallet_sell_2.png differ diff --git a/Resources/Textures/Structures/cargo_pallets.rsi/cargo_pallet_sell_3.png b/Resources/Textures/Structures/cargo_pallets.rsi/cargo_pallet_sell_3.png new file mode 100644 index 00000000000..06fb688c5bd Binary files /dev/null and b/Resources/Textures/Structures/cargo_pallets.rsi/cargo_pallet_sell_3.png differ diff --git a/Resources/Textures/Structures/cargo_pallets.rsi/cargo_pallet_sell_4.png b/Resources/Textures/Structures/cargo_pallets.rsi/cargo_pallet_sell_4.png new file mode 100644 index 00000000000..80a85ef2383 Binary files /dev/null and b/Resources/Textures/Structures/cargo_pallets.rsi/cargo_pallet_sell_4.png differ diff --git a/Resources/Textures/Structures/cargo_pallets.rsi/cargo_pallet_sell_5.png b/Resources/Textures/Structures/cargo_pallets.rsi/cargo_pallet_sell_5.png new file mode 100644 index 00000000000..4a194d7fb1f Binary files /dev/null and b/Resources/Textures/Structures/cargo_pallets.rsi/cargo_pallet_sell_5.png differ diff --git a/Resources/Textures/Structures/cargo_pallets.rsi/cargo_pallet_sell_6.png b/Resources/Textures/Structures/cargo_pallets.rsi/cargo_pallet_sell_6.png new file mode 100644 index 00000000000..80a85ef2383 Binary files /dev/null and b/Resources/Textures/Structures/cargo_pallets.rsi/cargo_pallet_sell_6.png differ diff --git a/Resources/Textures/Structures/cargo_pallets.rsi/cargo_pallet_sell_7.png b/Resources/Textures/Structures/cargo_pallets.rsi/cargo_pallet_sell_7.png new file mode 100644 index 00000000000..88ffa378d2a Binary files /dev/null and b/Resources/Textures/Structures/cargo_pallets.rsi/cargo_pallet_sell_7.png differ diff --git a/Resources/Textures/Structures/cargo_pallets.rsi/meta.json b/Resources/Textures/Structures/cargo_pallets.rsi/meta.json index 4751d95b9b5..c32fcfefd05 100644 --- a/Resources/Textures/Structures/cargo_pallets.rsi/meta.json +++ b/Resources/Textures/Structures/cargo_pallets.rsi/meta.json @@ -10,8 +10,72 @@ { "name": "cargo_pallet_buy" }, + { + "name": "cargo_pallet_buy_0", + "directions": 4 + }, + { + "name": "cargo_pallet_buy_1", + "directions": 4 + }, + { + "name": "cargo_pallet_buy_2", + "directions": 4 + }, + { + "name": "cargo_pallet_buy_3", + "directions": 4 + }, + { + "name": "cargo_pallet_buy_4", + "directions": 4 + }, + { + "name": "cargo_pallet_buy_5", + "directions": 4 + }, + { + "name": "cargo_pallet_buy_6", + "directions": 4 + }, + { + "name": "cargo_pallet_buy_7", + "directions": 4 + }, { "name": "cargo_pallet_sell" + }, + { + "name": "cargo_pallet_sell_0", + "directions": 4 + }, + { + "name": "cargo_pallet_sell_1", + "directions": 4 + }, + { + "name": "cargo_pallet_sell_2", + "directions": 4 + }, + { + "name": "cargo_pallet_sell_3", + "directions": 4 + }, + { + "name": "cargo_pallet_sell_4", + "directions": 4 + }, + { + "name": "cargo_pallet_sell_5", + "directions": 4 + }, + { + "name": "cargo_pallet_sell_6", + "directions": 4 + }, + { + "name": "cargo_pallet_sell_7", + "directions": 4 } ] } diff --git a/Resources/Textures/Tiles/Misc/floortrap.rsi/floortrap.png b/Resources/Textures/Tiles/Misc/floortrap.rsi/floortrap.png new file mode 100644 index 00000000000..391437064e5 Binary files /dev/null and b/Resources/Textures/Tiles/Misc/floortrap.rsi/floortrap.png differ diff --git a/Resources/Textures/Tiles/Misc/floortrap.rsi/floortrapspawn.png b/Resources/Textures/Tiles/Misc/floortrap.rsi/floortrapspawn.png new file mode 100644 index 00000000000..764a0fed152 Binary files /dev/null and b/Resources/Textures/Tiles/Misc/floortrap.rsi/floortrapspawn.png differ diff --git a/Resources/Textures/Tiles/Misc/floortrap.rsi/meta.json b/Resources/Textures/Tiles/Misc/floortrap.rsi/meta.json new file mode 100644 index 00000000000..586fad6d231 --- /dev/null +++ b/Resources/Textures/Tiles/Misc/floortrap.rsi/meta.json @@ -0,0 +1,17 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Made by Nimfar11 (github) for ss14", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "floortrap" + }, + { + "name": "floortrapspawn" + } + ] +} diff --git a/Resources/Textures/Tips/tippy.rsi/down.png b/Resources/Textures/Tips/tippy.rsi/down.png new file mode 100644 index 00000000000..bdfcf315b6c Binary files /dev/null and b/Resources/Textures/Tips/tippy.rsi/down.png differ diff --git a/Resources/Textures/Tips/tippy.rsi/left.png b/Resources/Textures/Tips/tippy.rsi/left.png new file mode 100644 index 00000000000..f2293c6111d Binary files /dev/null and b/Resources/Textures/Tips/tippy.rsi/left.png differ diff --git a/Resources/Textures/Tips/tippy.rsi/meta.json b/Resources/Textures/Tips/tippy.rsi/meta.json new file mode 100644 index 00000000000..68942d731c9 --- /dev/null +++ b/Resources/Textures/Tips/tippy.rsi/meta.json @@ -0,0 +1,20 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "down" + }, + { + "name": "left" + }, + { + "name": "right" + } + ] +} diff --git a/Resources/Textures/Tips/tippy.rsi/right.png b/Resources/Textures/Tips/tippy.rsi/right.png new file mode 100644 index 00000000000..900262932da Binary files /dev/null and b/Resources/Textures/Tips/tippy.rsi/right.png differ diff --git a/Resources/Textures/_Nuclear14/Clothing/Hands/Gloves/bikergloves.rsi/meta.json b/Resources/Textures/_Nuclear14/Clothing/Hands/Gloves/bikergloves.rsi/meta.json deleted file mode 100644 index d4e5bb59c86..00000000000 --- a/Resources/Textures/_Nuclear14/Clothing/Hands/Gloves/bikergloves.rsi/meta.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "version": 1, - "license": "CC-BY-NC-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/54ecdcc05bcaf335489938b1253a2a733ba12271", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" - }, - { - "name": "equipped-HAND", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - } - ] -} diff --git a/Resources/Textures/_Nuclear14/Clothing/Hands/Gloves/blackleathergloves.rsi/meta.json b/Resources/Textures/_Nuclear14/Clothing/Hands/Gloves/blackleathergloves.rsi/meta.json deleted file mode 100644 index d4e5bb59c86..00000000000 --- a/Resources/Textures/_Nuclear14/Clothing/Hands/Gloves/blackleathergloves.rsi/meta.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "version": 1, - "license": "CC-BY-NC-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/54ecdcc05bcaf335489938b1253a2a733ba12271", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" - }, - { - "name": "equipped-HAND", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - } - ] -} diff --git a/Resources/Textures/_Nuclear14/Clothing/Hands/Gloves/brownbikergloves.rsi/meta.json b/Resources/Textures/_Nuclear14/Clothing/Hands/Gloves/brownbikergloves.rsi/meta.json deleted file mode 100644 index d4e5bb59c86..00000000000 --- a/Resources/Textures/_Nuclear14/Clothing/Hands/Gloves/brownbikergloves.rsi/meta.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "version": 1, - "license": "CC-BY-NC-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/54ecdcc05bcaf335489938b1253a2a733ba12271", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" - }, - { - "name": "equipped-HAND", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - } - ] -} diff --git a/Resources/Textures/_Nuclear14/Clothing/Hands/Gloves/clothgloves.rsi/meta.json b/Resources/Textures/_Nuclear14/Clothing/Hands/Gloves/clothgloves.rsi/meta.json deleted file mode 100644 index d4e5bb59c86..00000000000 --- a/Resources/Textures/_Nuclear14/Clothing/Hands/Gloves/clothgloves.rsi/meta.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "version": 1, - "license": "CC-BY-NC-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/54ecdcc05bcaf335489938b1253a2a733ba12271", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" - }, - { - "name": "equipped-HAND", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - } - ] -} diff --git a/Resources/Textures/_Nuclear14/Clothing/Head/FalloutHoods/midwestscribetabard.rsi/meta.json b/Resources/Textures/_Nuclear14/Clothing/Head/FalloutHoods/midwestscribetabard.rsi/meta.json index 0bd5ffa5b93..d141055a4b3 100644 --- a/Resources/Textures/_Nuclear14/Clothing/Head/FalloutHoods/midwestscribetabard.rsi/meta.json +++ b/Resources/Textures/_Nuclear14/Clothing/Head/FalloutHoods/midwestscribetabard.rsi/meta.json @@ -10,6 +10,10 @@ { "name": "icon" }, + { + "name": "equipped-NECK", + "directions": 4 + }, { "name": "equipped-HELMET", "directions": 4 diff --git a/Resources/Textures/_Nuclear14/Clothing/OuterClothing/PowerArmor/hellfire.rsi/meta.json b/Resources/Textures/_Nuclear14/Clothing/OuterClothing/PowerArmor/hellfire.rsi/meta.json deleted file mode 100644 index fddaf78ddf5..00000000000 --- a/Resources/Textures/_Nuclear14/Clothing/OuterClothing/PowerArmor/hellfire.rsi/meta.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "version": 1, - "license": "CC-BY-NC-SA-3.0", - "copyright": "Taken from cev-eris at commit https://github.com/discordia-space/CEV-Eris/commit/760f0be7af33a31f5a08a3291864e91539d0ebb7", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" - }, - { - "name": "equipped-OUTERCLOTHING", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - } - ] -} diff --git a/Resources/engineCommandPerms.yml b/Resources/engineCommandPerms.yml index 51743c6e822..42cc4668a93 100644 --- a/Resources/engineCommandPerms.yml +++ b/Resources/engineCommandPerms.yml @@ -96,6 +96,8 @@ - tp - tpto - respawn + - tippy + - tip - Flags: SERVER Commands: diff --git a/Resources/keybinds.yml b/Resources/keybinds.yml index 2cca749317a..87df8c1eec8 100644 --- a/Resources/keybinds.yml +++ b/Resources/keybinds.yml @@ -187,6 +187,9 @@ binds: - function: OpenCharacterMenu type: State key: C +- function: OpenEmotesMenu + type: State + key: Y - function: OpenLanguageMenu type: State key: L @@ -264,6 +267,10 @@ binds: - function: ToggleStanding type: State key: R +- function: ToggleCrawlingUnder + type: State + mod1: Shift + key: R - function: ShowDebugConsole type: State key: Tilde @@ -461,6 +468,9 @@ binds: - function: OpenDecalSpawnWindow type: State key: F8 +- function: OpenScoreboardWindow + type: State + key: F9 - function: OpenSandboxWindow type: State key: B @@ -543,3 +553,6 @@ binds: - function: Hotbar9 type: State key: Num9 +- function: LookUp + type: State + key: Space diff --git a/RobustToolbox b/RobustToolbox index f4edb591fe4..a9aea7027f1 160000 --- a/RobustToolbox +++ b/RobustToolbox @@ -1 +1 @@ -Subproject commit f4edb591fe42eb9dbfdb3048accdc79ad13d1e63 +Subproject commit a9aea7027f1840c83bcaf1c973caf099745f9eed diff --git a/SpaceStation14.sln.DotSettings b/SpaceStation14.sln.DotSettings index 620de422532..156e5d27014 100644 --- a/SpaceStation14.sln.DotSettings +++ b/SpaceStation14.sln.DotSettings @@ -34,6 +34,7 @@ WARNING WARNING WARNING + SUGGESTION Required Required Required @@ -55,6 +56,7 @@ AL BB CC + FTL GC GD GL @@ -653,6 +655,7 @@ public sealed partial class $CLASS$ : Shared$CLASS$ { True True True + True True True True diff --git a/Tools/SS14 Aseprite Plugins/Displacement Map Flip.lua b/Tools/SS14 Aseprite Plugins/Displacement Map Flip.lua new file mode 100644 index 00000000000..3291685071d --- /dev/null +++ b/Tools/SS14 Aseprite Plugins/Displacement Map Flip.lua @@ -0,0 +1,78 @@ +local sprite = app.editor.sprite +local cel = app.cel + +if sprite.selection.isEmpty then + print("You need to select something sorry") + return +end + +local diag = Dialog{ + title = "Flip Displacement Map" +} + +diag:check{ + id = "horizontal", + label = "flip horizontal?" +} + +diag:check{ + id = "vertical", + label = "flip vertical?" +} + +diag:button{ + text = "ok", + focus = true, + onclick = function(ev) + local horizontal = diag.data["horizontal"] + local vertical = diag.data["vertical"] + + local selection = sprite.selection + local image = cel.image:clone() + + for x = 0, selection.bounds.width do + for y = 0, selection.bounds.height do + local xSel = x + selection.origin.x + local ySel = y + selection.origin.y + + local xImg = xSel - cel.position.x + local yImg = ySel - cel.position.y + + if xImg < 0 or xImg >= image.width or yImg < 0 or yImg >= image.height then + goto continue + end + + local imgValue = image:getPixel(xImg, yImg) + local color = Color(imgValue) + + if horizontal then + color.red = 128 + -(color.red - 128) + end + + if vertical then + color.green = 128 + -(color.green - 128) + end + + image:drawPixel( + xImg, + yImg, + app.pixelColor.rgba(color.red, color.green, color.blue, color.alpha)) + + ::continue:: + end + end + + cel.image = image + + diag:close() + end +} + +diag:button{ + text = "cancel", + onclick = function(ev) + diag:close() + end +} + +diag:show() diff --git a/Tools/SS14 Aseprite Plugins/Displacement Map Visualizer.lua b/Tools/SS14 Aseprite Plugins/Displacement Map Visualizer.lua new file mode 100644 index 00000000000..468636c07d8 --- /dev/null +++ b/Tools/SS14 Aseprite Plugins/Displacement Map Visualizer.lua @@ -0,0 +1,171 @@ +-- Displacement Map Visualizer +-- +-- This script will create a little preview window that will test a displacement map. +-- +-- TODO: Handling of sizes != 127 doesn't work properly and rounds differently from the real shader. Ah well. + +local scale = 4 + +-- This script requires UI +if not app.isUIAvailable then + return +end + +local getOffsetPixel = function(x, y, image, rect) + local posX = x - rect.x + local posY = y - rect.y + + if posX < 0 or posX >= image.width or posY < 0 or posY >= image.height then + return image.spec.transparentColor + end + + return image:getPixel(posX, posY) +end + +local pixelValueToColor = function(sprite, value) + return Color(value) +end + +local applyDisplacementMap = function(width, height, size, displacement, displacementRect, target, targetRect) + -- print(Color(displacement:getPixel(17, 15)).red) + local image = target:clone() + image:resize(width, height) + image:clear() + + for x = 0, width - 1 do + for y = 0, height - 1 do + local value = getOffsetPixel(x, y, displacement, displacementRect) + local color = pixelValueToColor(sprite, value) + + if color.alpha ~= 0 then + local offset_x = (color.red - 128) / 127 * size + local offset_y = (color.green - 128) / 127 * size + + local colorValue = getOffsetPixel(x + offset_x, y + offset_y, target, targetRect) + image:drawPixel(x, y, colorValue) + end + end + end + + return image +end + +local dialog = nil + +local sprite = app.editor.sprite +local spriteChanged = sprite.events:on("change", + function(ev) + dialog:repaint() + end) + +local layers = {} +for i,layer in ipairs(sprite.layers) do + table.insert(layers, 1, layer.name) +end + +local findLayer = function(sprite, name) + for i, layer in ipairs(sprite.layers) do + if layer.name == name then + return layer + end + end + + return nil +end + +dialog = Dialog{ + title = "Displacement map preview", + onclose = function(ev) + sprite.events:off(spriteChanged) + end} + +dialog:canvas{ + id = "canvas", + width = sprite.width * scale, + height = sprite.height * scale, + onpaint = function(ev) + local context = ev.context + + local layerDisplacement = findLayer(sprite, dialog.data["displacement-select"]) + local layerTarget = findLayer(sprite, dialog.data["reference-select"]) + local layerBackground = findLayer(sprite, dialog.data["background-select"]) + -- print(layerDisplacement.name) + -- print(layerTarget.name) + + local celDisplacement = layerDisplacement:cel(1) + local celTarget = layerTarget:cel(1) + local celBackground = layerBackground:cel(1) + + -- Draw background + context:drawImage( + -- srcImage + celBackground.image, + -- srcPos + 0, 0, + -- srcSize + celBackground.image.width, celBackground.image.height, + -- dstPos + celBackground.position.x * scale, celBackground.position.y * scale, + -- dstSize + celBackground.image.width * scale, celBackground.image.height * scale) + + -- Apply displacement map and draw + local image = applyDisplacementMap( + sprite.width, sprite.height, + dialog.data["size"], + celDisplacement.image, celDisplacement.bounds, + celTarget.image, celTarget.bounds) + + context:drawImage( + -- srcImage + image, + -- srcPos + 0, 0, + -- srcSize + image.width, image.height, + -- dstPos + 0, 0, + -- dstSize + image.width * scale, image.height * scale) + end +} + +dialog:combobox{ + id = "displacement-select", + label = "displacement layer", + options = layers, + onchange = function(ev) + dialog:repaint() + end +} + +dialog:combobox{ + id = "reference-select", + label = "reference layer", + options = layers, + onchange = function(ev) + dialog:repaint() + end +} + +dialog:combobox{ + id = "background-select", + label = "background layer", + options = layers, + onchange = function(ev) + dialog:repaint() + end +} + +dialog:slider{ + id = "size", + label = "displacement size", + min = 1, + max = 127, + value = 127, + onchange = function(ev) + dialog:repaint() + end +} + +dialog:show{wait = false} diff --git a/Tools/SS14 Aseprite Plugins/Displacement Map.png b/Tools/SS14 Aseprite Plugins/Displacement Map.png new file mode 100644 index 00000000000..50744cef601 Binary files /dev/null and b/Tools/SS14 Aseprite Plugins/Displacement Map.png differ diff --git a/Tools/contribs_shared.ps1 b/Tools/contribs_shared.ps1 index ba97c50a9a3..12340cda703 100644 --- a/Tools/contribs_shared.ps1 +++ b/Tools/contribs_shared.ps1 @@ -9,6 +9,10 @@ $ignore = @{ "PJBot" = $true + "github-actions[bot]" = $true "ZDDM" = $true "TYoung86" = $true + "paul" = $true # erroneously included -- presumably from PaulRitter, somehow, who is already credited + "08a" = $true # erroneously included -- valid github account, but not an actual contributor, probably an alias of a contributor who does not own this github account and is already credited somewhere. + "UristMcContributor" = $true # this was an account used to demonstrate how to create a valid PR, and is in actuality Willhelm53, who is already credited. } diff --git a/Tools/dump_github_contributors.ps1 b/Tools/dump_github_contributors.ps1 index 193eec4692d..d88b9db6122 100755 --- a/Tools/dump_github_contributors.ps1 +++ b/Tools/dump_github_contributors.ps1 @@ -3,10 +3,22 @@ $scriptDir = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent . $(join-path $scriptDir contribs_shared.ps1) +if ($null -eq $env:GITHUB_TOKEN) +{ + throw "A GitHub API token is required to run this script properly without being rate limited. If you're a user, generate a personal access token and use that. If you're running this in a GitHub action, make sure you expose the GITHUB_TOKEN secret as an environment variable." +} + function load_contribs([string] $repo) { + # https://developer.github.com/enterprise/2.8/v3/repos/#list-contributors + # We use the ?anon=1 query param for reasons explained later. $qParams = @{ "per_page" = 100 + "anon" = 1 + } + + $headers = @{ + Authorization="Bearer $env:GITHUB_TOKEN" } $url = "https://api.github.com/repos/{0}/contributors" -f $repo @@ -15,7 +27,7 @@ function load_contribs([string] $repo) while ($null -ne $url) { - $resp = Invoke-WebRequest $url -Body $qParams + $resp = Invoke-WebRequest $url -Body $qParams -Headers $headers $url = $resp.RelationLink.next @@ -23,6 +35,80 @@ function load_contribs([string] $repo) $r += $j } + # After collecting all the paginated data, we still aren't done. + # GitHub's API, for some reason, has a hard cap on 500 email addresses per repo which it will collate + # SS14 has gone past this limit for quite some time, so GitHub will stop including accounts, starting + # with those that have lower contributions, as valid distinct users with a `login` field. + # + # This is obviously a problem. + # To remedy, we first use the ?anon=1 parameter to force GitHub to include all committers emails, even + # those that it has, in its great and infinite wisdom, chosen to not properly attach to a GitHub account. + # + # Of course, this is normally an issue -- we use this API specifically because we want to only get + # committers with valid GitHub accounts, otherwise we pollute the contributor log with random aliases + # and names that people don't use, things like that. + # + # So, okay, solution: + # 1) Go over our list, and check for ones which only have a `name` and `email` field ('anonymous' contributors) + # and which dont already appear. + # 2) Check to see if the email ends with `@users.noreply.github.com`. + # - To my knowledge, GitHub includes an email in the form of `(numbers)+(username)@users.noreply.github.com` + # - when commits are made using someones GitHub account, and they aren't attaching another email to their account + # 3) If an email of this form was found, we can assume this is one of the 'missing' contribs and extract their GitHub username. + # 4) If an email of this form -wasn't- found, but they're still anonymous, we -unfortunately- still have to check if they're a valid GitHub user + # because GitHub might have just force-anonymized them anyway! + # + # It's possible their `name` is a valid GitHub user, but that this is a coincidence and they aren't actually a contributor. + # There is kind of not really jack shit we can do about that! It's not that common though and it's probably more likely to attribute + # correctly than not. + # 5) Then, we just add a `login` field to our object with their true username and let the rest of the code do its job. + + foreach ($contributor in $r) + { + if ($null -ne $contributor.name ` + -And $null -ne $contributor.email ` + -And $contributor.email -match '\d+\+(.*)@users\.noreply\.github\.com$') + { + $username = $Matches.1 + # Use their `name` if its equivalent to the extracted username, + # since that one will have proper casing. Otherwise just let them be a lowercasecel + if ($contributor.name.ToLower() -eq $username) + { + $username = $contributor.name + } + + if (($r).login -contains $username) + { + continue + } + + $contributor | Add-Member -MemberType NoteProperty -Name "login" -Value $username + } + elseif ($null -eq $contributor.login ` + -And $null -ne $contributor.name ` + -And !$contributor.name.Contains(" ")) + { + $username = $contributor.name + # They're an anonymous user, without a GH email, and their name doesn't contain a space + # (since a valid GH username can't have a space) + # Might still be a valid contrib??? + if (($r).login -contains $username) + { + continue + } + + $userUrl = "https://api.github.com/users/{0}" -f $username + + try + { + $userResp = Invoke-WebRequest $userUrl -Headers $headers + $userJ = ConvertFrom-Json $userResp.Content + $contributor | Add-Member -MemberType NoteProperty -Name "login" -Value $userJ.login + } + catch {} # if it 404s do nothing. powershell doesn't seem to really have a simpler way to do this. + } + } + return $r } @@ -34,4 +120,4 @@ $contentJson = load_contribs("Simple-Station/Einstein-Engines") | Where-Object { -not $ignore[$_] }` | ForEach-Object { if($replacements[$_] -eq $null){ $_ } else { $replacements[$_] }} ` | Sort-object ` - | Join-String -Separator ", " + | Join-String -Separator ", " \ No newline at end of file diff --git a/Tools/publish_multi_request.py b/Tools/publish_multi_request.py new file mode 100755 index 00000000000..131d1f7f76f --- /dev/null +++ b/Tools/publish_multi_request.py @@ -0,0 +1,78 @@ +#!/usr/bin/env python3 + +import requests +import os +import subprocess +from typing import Iterable + +PUBLISH_TOKEN = os.environ["PUBLISH_TOKEN"] +VERSION = os.environ["GITHUB_SHA"] + +RELEASE_DIR = "release" + +# +# CONFIGURATION PARAMETERS +# Forks should change these to publish to their own infrastructure. +# +ROBUST_CDN_URL = "https://cdn.simplestation.org/" +FORK_ID = "einstein-engines" + +def main(): + session = requests.Session() + session.headers = { + "Authorization": f"Bearer {PUBLISH_TOKEN}", + } + + print(f"Starting publish on Robust.Cdn for version {VERSION}") + + data = { + "version": VERSION, + "engineVersion": get_engine_version(), + } + headers = { + "Content-Type": "application/json" + } + resp = session.post(f"{ROBUST_CDN_URL}fork/{FORK_ID}/publish/start", json=data, headers=headers) + resp.raise_for_status() + print("Publish successfully started, adding files...") + + for file in get_files_to_publish(): + print(f"Publishing {file}") + with open(file, "rb") as f: + headers = { + "Content-Type": "application/octet-stream", + "Robust-Cdn-Publish-File": os.path.basename(file), + "Robust-Cdn-Publish-Version": VERSION + } + resp = session.post(f"{ROBUST_CDN_URL}fork/{FORK_ID}/publish/file", data=f, headers=headers) + + resp.raise_for_status() + + print("Successfully pushed files, finishing publish...") + + data = { + "version": VERSION + } + headers = { + "Content-Type": "application/json" + } + resp = session.post(f"{ROBUST_CDN_URL}fork/{FORK_ID}/publish/finish", json=data, headers=headers) + resp.raise_for_status() + + print("SUCCESS!") + + +def get_files_to_publish() -> Iterable[str]: + for file in os.listdir(RELEASE_DIR): + yield os.path.join(RELEASE_DIR, file) + + +def get_engine_version() -> str: + proc = subprocess.run(["git", "describe","--tags", "--abbrev=0"], stdout=subprocess.PIPE, cwd="RobustToolbox", check=True, encoding="UTF-8") + tag = proc.stdout.strip() + assert tag.startswith("v") + return tag[1:] # Cut off v prefix. + + +if __name__ == '__main__': + main() diff --git a/shell.nix b/shell.nix index 57d64e00718..ce17c6acea9 100644 --- a/shell.nix +++ b/shell.nix @@ -51,5 +51,7 @@ in pkgs.mkShell { export ROBUST_SOUNDFONT_OVERRIDE=${pkgs.soundfont-fluid}/share/soundfonts/FluidR3_GM2-2.sf2 export XDG_DATA_DIRS=$GSETTINGS_SCHEMAS_PATH export LD_LIBRARY_PATH=${pkgs.lib.makeLibraryPath dependencies} + export DOTNET_ROOT=${pkgs.dotnetCorePackages.sdk_8_0_1xx} + export PATH="$PATH:/home/$(whoami)/.dotnet/tools" ''; }